{ "cells": [ { "cell_type": "markdown", "id": "5257bb27", "metadata": {}, "source": [ "# LeNet5 \n", "\n", "Train unconstrained deep learning for CIFAR-10 classification using modified LeNet5 based on [this PyTorch tutorial](https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html)" ] }, { "cell_type": "markdown", "id": "c859c154", "metadata": {}, "source": [ "## Problem Description" ] }, { "attachments": { "image.png": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvcAAADRCAIAAADHdwruAAAgAElEQVR4Aeydd1CbSZr/767un6u6tHW1V7tVe7W1t7OzO3vnHe/YkzzZcTyO2BgbMMGAAGNykEgmmAwm55wxORgw2ASRo8kZIQnlgBASEkKg8P7q6PX700ggky3w+5TL1W+/3f32++1X7/uhw9N/J15bR/5tqsD4+Dik1mQy2apaE4vFagv4v5NqC/i/k3K5XH0ha2tr6guRSqXqS5BIJOpLWFtbU1+CXC5XX8JRkUIqlaq/kb1Lsbq6ql5MCILEYrH6auz9qZBIJOqrcVSkkMlk6m9kfX1dvZjr6+vqS9CQX/pbn4q3SvHWX/pRkWKnL72GhoZNX/JI5PugwN+9Dze5u3tEKAf+Nuz9045QDiwmQjn7K8VbP+0I5cAMh1DO7r4FSK4jrcDfKAf+GSABRAFEAUQBRAFEAUQBRIHjoQBCOcejHZG7QBRAFEAUQBRAFEAUUFYAoRxlRZBjRAFEAUQBRAFEAUSB46EAQjnHox2Ru0AUQBRAFEAUQBRAFFBWAKEcZUWQY0QBRAFEAUQBRAFEgeOhAEI5x6MdkbtAFEAUQBRAFEAUQBRQVgChHGVFkGNEAfUKyOVy2YapT3YUz8rlcqlU+lZnPEfx1pA6IwogCryfCiCU8362O3LXu1FALpeLxWIGg9Hb29vW1sblcoEnIalUKhQKl5aWlpeXt/Krtr6+zuPxtuMsZzc1U5sH+PcDSWQymVgs5m8Y7MRILpevra3x+XwcDtfU1ITD4Xg8nqqTJOBtBS5HJBKpv2UIgiQSCXwVCIJkMhnIJRAI3uqWUO09IScRBRAFEAW2pQBCOduSCUmEKABB0NLSUl5eno6Ojra29q1bt3766aeysjKpVDozM+Pp6WlkZGRvb19fX7/p97unp+fmzZulpaWHqaRUKhUIBL29vbm5ueC6bDY7JyfH3NzcwsIiKytrfX1dJpMtLCxUVlZaWFhcu3bN0NBQR0fn/v37z58/X1lZAblAOV1dXQUFBRAEyeVyCoUSExNjYGDg7Ozc3Nys6l8bZOns7Hz27BkoRC6Xk0ik6OhoAwMDFxcXLBb7Vod+h6kVci1EAUSBY6kAQjnHslmRm9p/BWQyWXd3971792prawUCAZPJTE9PNzAwmJ+fT01Ntbe3J5FIxcXFurq6OBxOIpEsLy/DuCORSMrLy8+ePcvlcpVqBro3OBwOk8lkMBhLS0scDodGoy0uLkql0vX1dQ6HQ6FQGAyGUCiUSqXLy8uLi4sMBoNOpwuFQlCaWCxmMpkUCmVhYUGxM4lKpcbGxurq6vr6+kIQJJVK6+vrjYyMent7a2pqHBwcJicnWSxWXFzcw4cP+/v7KRTK/Pw8DofLysrS1dXNzs4Gt0Amk6Ojo3V1df39/SEIEolERUVFFhYWg4ODqampJiYm8/PzQqFQJBLJ5XKRSLS8vEwikaKiou7duxcUFAQqKRKJCgoKLC0th4aGkpKSUCgUlUpVUgM5RBRAFEAU2F8FEMrZXz2R0o6tAouLi4mJiba2tgAjQH9GRUXF2NhYXl5eXV2dUCjEYrFmZmajo6NEIjE9PZ1IJAI55ufnLSws/vSnP5WXlysJxOfzKysrUSjU3bt3f/rpJwwGY2Nj8+2339rZ2RGJxNHRUXNz86+++uratWvp6elzc3ORkZG2trZaWlrnz5/PzMxcWVkRiUSNjY23b98+deqUubn5wMAAfAkcDufr6/vgwQNvb28IgqhUakxMTFhYGIPBIBAIg4ODNBqttrbWzMxsbGxsZGQkODjY1tY2ICAgJycnISHBxMRkenoagqDp6WlfX19jY+MnT55AEITH44ODg5OSkqRS6cDAgLu7e2pq6rNnz8rKythsdklJSUZGxtTUlI+Pj7GxcUBAAKgPDocLCgpKSUmRSqX9/f3u7u41NTVwVZEAogCiAKLAQSiAUM5BqIqUeQwVwOPxrq6uycnJ8L3J5XKJRAJ6XNhsdllZmY2Nja2tLZfLXV5enpycFAgEILFMJqupqblw4QLcuwMXwuFwIiIi7ty5w2AwSkpKvvvuu8rKyr6+Pnt7+9TU1OzsbHd3dw6HU11dbWBgUFRUZGhoeO/ePRKJ1N3dbWNjU1JSQiAQAgICYmJipqenCwsLy8rK4MJlMhnozgGUMzExYWNjo6ura7FhmZmZExMToaGhSUlJw8PDzs7OWVlZY2NjNjY2jo6OQ0NDaDQaDFHJZDIKhRIdHQ0oZ2RkxNXVNT8/H4KgkZERDAaTn5/f3NxsZ2eXkJCARqPHx8dlMhmZTI6MjIQpZ2hoyNXVFRQ4ODiIwWCKiorgqiIBRAFEAUSBg1AAoZyDUBUp8xgqgMfj3d3dExIS4HsDw1IikUgqlS4uLlZWVj569Oj27dsTExNg8gqcEoKg+vr6S5cuKcaAMIfDSU5OdnV1lcvlPT09bm5uMplsamoKg8Gkp6fzeLyhoaGKigpXV9ebN28+e/YMjUanp6fL5XI2m52QkODl5cVgMEJDQ69du5aSkjIwMACjFSgfJAOUMz4+bmRkZGpqSiKRmpqarKysfHx8njx58vLly+rqal1dXXikKTU1dXh42MXFBQYRJpMZGxsLUw4gG5hyCgoKOBzO06dPP/vss7y8PLBKi8FgREdHK1IOBoMB03QA5RQWFqoKgsQgCiAKIArsowII5eyjmEhRx1kBLpebkpJiYWEBj1gNDg4+ePAgLS1tcHBwcXERgqDZ2VkMBpOWlqa6JBumHHAKVgpQjru7OwRBvb29Hh4eEAQByomIiEhKSvrhhx9CQkK8vb319fWfPXvm4uKSlpYGQRCLxYqPj/f29pbJZGw2u7q62sbG5sKFCzBVgEsoUs7k5KS7u3tWVhYEQRQKJTg4+O7du0+ePKmrq6uoqLh169bKykpnZ6erqysWi62qqjI3N2ez2aAcRcoZGxtzc3PLycmBIAh0+RQWFvJ4vLi4uDNnzmRnZ4PJyEqUMzIy4ubmlpeXB0HQwMAAGo0uLi6GdUACiAKIAogCB6EAQjkHoSpS5vFUoKen5/Lly8XFxXw+n0ajxcXFXb9+vbOz093dPT4+XiAQjIyMoNHonJwcLpc7ODjI4/FgIWDKYbFYnZ2dcLwaynFzc3N1dU1MTFxZWXn58qWenl5OTo6hoaGxsTGfz3/9+rW9vX1KSsr8/Hx6evqrV6+EQmFxcfHt27fhwiEIUqQcHo+Xl5f3+PHj5eXlvr4+NBodEhISFBQUHBzc1tamra1tYWFhZmZ27tw5CwsLJycnLBYLF6VIOUtLS2lpaWg0WiAQ1NfXP3z4sLu7+9WrVw4ODrGxsSgUqr+/Xy6XK1EOl8tNTk52c3MTCAS1tbWPHj16/fo1XD4SQBRAFEAUOAgFEMo5CFWRMo+nAnw+v6Cg4Ouvv/7xxx+vXr2qra1dX1+/srJSVVV1/vx5U1PT+/fvOzs7Ly8vj46Ouri4jI2NwUJgsdh79+5BEITFYu/fvw973ltcXMzJyQkMDIQgaHBwEKxIwuFw/v7+8fHxMTEx33//vbOzM1jd7ejoaGZm9s0339y4cePOnTtWVlYMBoPD4SQmJl6+fPnhw4eGhoYZGRnwRSEI4nA4mZmZoaGhIHJ0dBSFQt24cUNPT8/T03N5ebm1tdXQ0LCiomJ6erqlpWV2dnZsbKy5uRmPxyuu9Gaz2enp6REREaCcoaEhW1tbsw1LSkoaHx8PCAgoKytbXFxMSUlxc3NbWVlhsVhpaWlRUVFwfV6/fg3nSk1NhUWAEyABRAFEAUSB/VUAoZz91VPjSgMzZFU9vGlcRY9ChYCYdDq9qampt7eXw+GAoRmJREKn09va2qanp8ViMXCOLBaLFSkBds0HB8AdKzaQTCYDLQUC6+vrfD5/ZGTk9evXTCZzbm6uuLgYjUbHxMSMjo4ODQ2Ba4HF2zgcrr29fXZ2VnElOZgetL6+Dj8AYHiru7t7eHh4bW0N+DlsaGgwMDCws7PLysoqKSlJTU3FYrFKCCKXy9c3DFRbJpOxWKyBgYG5uTngdGdtbU0ikYBkcMUUswCvgIq5jkKbI3VEFEAUONoKIJRztNtPTe3lcvnKygqZTO7s7Hz58iWFQoHdqwDXKXw+f6vs6+vrdDpdTQKljMD5r1LkcT2El1YpcgCYbaOINfty+wCYwK4LYFayj49Pfn6+6hYTMplMKpVupwKqVZVIJEwm88WLF2EblpWVBa+BV3MXquWoSQyf2l0uODsSQBRAFEAU2JECCOXsSK6jlFgoFJaUlOjp6d27d09XV/fChQuZmZng67i8vDwxMREXF6fqshbc4fT09I8//gg7zH3rbbNYLGS9zFtV2nsCDofT0tKiOBC29zJBCQDdxBu2tra2HVra0aWlUqlYLN7qedtRUZqWGOxise+KadptIvVBFDiiCiCUc0Qb7i3Vlsvl09PTP/30U0VFxcrKytLSUkVFxaVLl3gblpKSoqenZ2VlBdy3SKVSHo8Hj3RIpdKWlpYTJ04sLi7KZDIej0fdsOXlZXBVqVTK4XDIZDKVSgUefvv7+01MTMA+TSAZ6N1ZW1tbXV1dWlpis9nLy8vgQlQqlUajwaWBURWRSMThcBgMBo1GA/5/gSdfqVQqkUjA5UAu2P8vnU6nUCignLW1NSaTSSKRmEwmPDrzFo2O4Omj2BEikUi4XO7o6Gh9ff34+DiPx4P7wCQSiUAgULO3l0gkYrFY8EYTh9liYrEYvi7YrYLNZi8sLMCRMpkMzD0aHBxsaGiYnJxks9nwpl2rq6sLCwvMDVtaWtoU7xTT8Hg8VV9Kh3m/yLUQBY6rAgjlHM+WFQgE2dnZurq68KuTy+WWlJTQ6fSFhQVfX18LC4uHDx+CsywWKzIyEni5hSCIwWDY2dn9+te/Tk1NZTAYvr6+n3/++VdffRUREbGysiKXy4lEIgqFOnHixJkzZ8LDwwkEgoODw4kTJ+Li4l69ehUZGQnWOefl5fX19TU2NqLRaDArlkqlent7f/HFF19//XVUVBT8eRMKhTU1NcbGxtevXz9z5oyDg4OVldXJkycNDAxwONzMzIypqemJEydALjKZHBER8fDhw8uXL//1r3+NiYnh8XidnZ3Xrl37/e9/r62t3dXVdTwb9QjelVwun5ycdHBwuHDhgra29uXLl318fMA2F3K5fHx8PCoqqrGxcas7q66u1tLSqq6u3irBQcQD9mpqaoI3HaNSqUlJSYaGhqampkVFRRKJRCaTMRiM/Px8fX39S5cu6erqXrlyxcDA4OXLl+CpbmhouH//vt6GhYeH02g01aq+fPkSThMREUGn01XTIDGIAogCe1QAoZw9Cqih2dlsNgaDCQ8P37QjXSAQFBQUPHr0CFDO6urqxMSEYufKwMDAxx9/vLKyUlJScvfu3cXFxdnZWQsLi6KiIqFQWFRUhEKh1tbWRkZGbt682d3dPT09bWFhsby8nJuba2lpCbtjefXqVUpKyhdffAG81RUWFhoZGS0sLExOTpqZmZWUlAD5eDweWCXE5XJbWlpOnjxZVFREIBBsbW3j4uJyc3Otra3FYnF/fz/Y8NLExOTy5cs0Gm12dtbc3Nx/wyIjI5lMZkVFRXZ2toa2yvtXreXl5dTUVCsrKzAnrLu728HBoa6uDoIgLpcbHh7+5ZdfwmOd6+vrwMUi0EkikaSkpOjq6sIdJLB+8M7qi4uLXC5XIBDweDwOhyMQCGQyGdj+nc1mc7lcMEy2srIC9v9aXFwEpYnFYi6Xy2az+Xw+/JcAKB+HwwUEBNy4cQOsDpNKpbm5uebm5uPj44WFhc7OzjMzM1Qq1c/Pz9raempqSiAQ8Pl8BoORlJSkra1dXFwslUrj4+Pt7OxkMhnccSWVSkUiEZjxvbq6KhKJYmJiHBwcFNPAN4gEEAUQBfZLAYRy9ktJzSqHzWZ7eHgEBQXBlANGi0QiEQRBSpSjWnVAOXQ63cnJydHRsaampqioyMXFJTg4WC6XC4XC8fHxyspKPz+/8+fPd3V1qaGc3NxcKysrsImSk5OTs7NzdXV1YWGhi4tLSEgIuDSPx8vOzra3t5fL5VNTU9bW1hAEkclkDAYTHx+/vLw8NjZWXl7u7e198eLF0tJSDAaTmJgol8uXlpYyMzMNDAzi4uIuXLgQGxvb29ur5PxX9e6QmENTYGlpKSEhwdzcnEQiAc4gEAgLCwsSiaSuru7GjRumpqYw5QwPD6elpZFIJFC90dHR27dvnzx5srKyUqnCCwsL2dnZenp6Z8+e/eGHHxwdHXV1dU+cOOHs7EyhUDo7O7W1tf/4xz+eO3cuPz9/bGwsMDDQ1NT0qw0rKCjgcrllZWXffvvt7373OxQKNTo6qlj+wMCAh4eHgYEBoBwcDhcWFpaWlra0tEShUGZmZlgsVnZ2tq2tLYFAABtymZqa+vr6FhcXh4WFPXr0aHx8PCcnx8/Pb3JyEofDgR5QAoGQnp5eU1PDZDIzMjJSUlIyMzOV0ihWAwkjCiAK7IsCR4xypFIpk8kEfwnRaDR4yEMqlXK53LW1NalUSqPRFjaMyWSy2WwQyWAwYL3AihKRSAT+/ltYWABZFhcX4UF3OPERDaysrBQXF2tpaYFPvlwun5ub09fXB3sPKVEOmHkK8xBwTfvxxx8zGAwHB4dbt24FBgb6+fn5+PiUlZUJhcLCwsJvv/02LCwsIiLixo0bm/blkEikJ0+evHr1SpFy7OzstLW1AwICQGnw1pVqKCc4ODgrK+uHH34IDw8PDQ3V0tIqLS11cXGJioqSy+VcLjc1NdXOzo7FYtXV1WEwmKtXr7q5uR3RVjuW1R4cHNTT0/vqq68cHR0LCgomJydFIlFvb6+Pj09ISAgGg4EpZ3FxETAB0EEul2dlZRkYGMDdIbA+NBrNy8vL0tKSy+WmpaVdvHixsbGxvb3dyckpIyMjNjY2NDRUIBA8e/bMwsIiOztbW1vb0tKSzWZjsVhbW9vAwEAfH5/s7GwcDpefn//ixQu4ZDBLjEwmh4aGAsrp6emxtLTU1dU1NjYGTDYwMBAQEFBYWNjW1ubg4FBWVjYwMGBqaurn59fZ2YnBYBISEh4/fnzq1KmfNiwsLGxpaQmCoPLycjQaHRoa6uXl1dLS4uHhAacJDw9X9CGpWB8kjCiAKLAXBY4Y5czPz//v//5vbW1taWnpr371q9zcXDCtj8FgmJiYtLa20mi0f//3fzcxMTEyMrpw4cKPP/7Y0tJCIBA++OADWCYCgXDixImKioqQkBBTU1M9Pb1f/OIXDx48sLa2rq6uVuq+hnMduQAej7948WJqaiqFQiEQCJmZmefPn6dSqap9OUKhsL29ncPhwPcI+nLAH+LW1tYUCmV0dDQkJKSlpYXJZD5+/Njb25vJZLa1td28ebO5uXlyctLY2JjJZIIxqcXFxY6ODh0dHUXKWVxcjIuLc3R0JJFIw8PDQUFBbW1t4IpqKMfd3d3T09Pf35/JZDY1NWlpaeXm5qJQKG1tbSqVOjAwYG9v7+XllZmZWVJSQqPRysrKrl69Ct/IexIAnAqc0xzo/6rAoV5hMAmdxWL19PQkJCTo6emBZzI8PDwgIKC+vt7a2jolJQWMZ8k3TLHA7OxsQ0NDxRgQptFoERERISEhcrm8rq4uODhYJpP19/cDZqLT6R0dHSUlJba2tkZGRtnZ2WA3CbCNfFhYmIODg7+/v56eXlpaWm9vL0AQxatQqdSwsDCYcvT09FxcXMhk8vPnz+3s7Ly9vQMCAtra2tLT062trYVC4dTUVGhoaHFxcWtrKxqNLikpef369eDgoFgsxmKxrq6u9fX1EASB3873339fWVnJ4/H6+/uB06OmpiZXV9eXL18q1gEJIwogCuyLAkeMcohE4h/+8Ifq6uqysrIPP/zwhx9+IBAIwJe8gYFBc3MzjUb75S9/ubphdDrdy8vL3t5+dnb2N7/5DawXHo//8MMPGxoaQDIikfirX/0KrPU4NogDQdDq6mpdXd1PP/2kpaV17949HR2dqqoq8JVaWVmprq728fEBjEilUl1cXEZGRmCJxsfHr169CiYaGxkZmZmZOTg4ODs7c7lcoVD47Nmzs2fP+vj4mJiYPHjwICYmZmxs7OLFi9XV1X19fefOnXvy5Im1tbWzs3N7e3tlZSXYKlIul+NwuAcPHqBQKHt7eycnJ9gfj0AgKC8v9/f3B31Ovr6+EATR6fTQ0NDExMSsrKwLFy54e3uDy6HRaCsrq7Nnz+rq6pqYmFhaWk5NTRUUFGhpaTk5OaFQqKSkJPhG3pPA2toahUKZPGCbm5vbaX8Dg8Gora3t7u6WSCTr6+szMzO+vr63b982MDDQ1dXV1tb+5JNPbt++DSAATKlRBCmYciQSieLSOUA5wKFzfX19WFgYBEGAcuLi4p4+fXrv3r3ExEQPDw/Ql+Po6Ah6Mefn54ODg0NCQnA4XElJCRqN1tbWjo+PV3pOFCnn9evX7u7uz549A8OpXl5eDx488Pf3b25uTklJQaFQTCazqqrKzc2tsbExPT398ePHFAqFxWKBiW5zc3OBgYGpqalgXr+fn9/FixcLCwv5fD6cBswESk9PV6oGcogogCiwdwWOKuWAddF+fn6PHz/m8/l0Ol2RclY2DDiYt7S03JRyGhsbwRgNnU7/9a9/fZz4Bn4swJLvlpaW7u5uNputeI/AyQdICRzgKo5YyWQyMINHJpMtLS319/e/fv16dXUVfIFEItHExERvby+LxSKRSIODgyKRaGpqCjjenZ+f7+7uJpFIYOKn4oVkMhmXywWlAfe4cFXhzxjs/1cul6+tra2vr4NpQH19fSwWa35+vrKyEo1GP336dGxsDNRKJpOtrq4SicSOjo7p6Wl4STxc+LEPgC20Og7Y+vr6Nl0rpEZeOp0eERHh4uIyPT1NpVI7Ojo8PT2Tk5PBoHN3d7eTk1Nubi54Mul0en9/vyJIwZSDx+MVN/9SQzmenp5g8y8KhZKRkWFmZpacnHzv3j17e3sqlVpfX+/g4BAUFJSRkfHixYv5+fmwsDB7e3ulW1CkHA6Hk5KSEhwcTKVSX7x44erqGhsb6+/vHxcXV11dbWJi4urqamNjc/fuXUdHRz8/v97e3sHBQT8/v7y8PAaDUVNT4+3t3draurq6Wlxc7OPj8/TpU2dn57S0NF9f3/z8fAaDAf7kaG9vV6oGcogogCiwdwWOKuVUVlZqaWkRicRLly6Vl5eTyWSYcv7t3/6tpqbm+fPnKSkpt2/fjo+Px+Fwqn057wPlgOcDeAJU/BMZ+NpfXV1V5B41D5Oqp13gkxcMMQA8gocb4FNbFaha2lYp4Xi4TLlcTiKRfHx8MjIylFz9wmngXO9PQCAQDA8Ptx+w9fX1gRHP7Qsrl8vHxsbs7e2vXr2qr6+vra3t4uIyPz8PSpiYmAgJCampqQGHXV1dgYGBOBwOLr+8vNzZ2RmCoIqKCldXVziexWKlp6enpKRAENTW1gYCYFAVbNqlpaWFwWAMDQ3NzMzQaLSxsfH58+fBum4fHx+wgl1HR8fa2trCwqKsrAwuGQQYDEZqampmZiaYpgNPzTEyMoqOjhYIBDU1NVZWVlVVVQMDA62trdPT0/39/VgslkwmA+YuKSnR19d/+PChsbFxXFzcysrK0NBQWFjYq1evWCxWbGxscHBwTk4OSGNkZBQfH39sJgUqiYkcIgq8WwWOMOXcunVrfX29pqbmp59+Ghoaun//Phix+ud//uegDQsLC6uoqFhbWyMSie8h5cjlcuB2DHjkA88Z6CDhcDhzc3O1tbXDw8MMBgN+vcpkMoFAwGKxFLPAkRwOB57urfjUwgngXHDMVlkUs+80zOfz29rahoeHlbhtp+Ucp/QaSzmAEsRiMYFA6O7unp+fV+wyBGQMt6PSIcgLM7RiRnAKZITxGo5cXl4eHx8fGxvjcrl4PD4/Px+DwWRmZo6Pj09PT4P0YrEYj8f39PSQyWS4AoqPhFKxCwsLfX19s7OzILFYLK6qqtLV1bW3t8/JyXn27FlKSkp3dzdcglwup1KpPT09FApFsZ5wGCwgp1AoPT09VCp10zrApSEBRAFEgV0rcLQpB0ykDQwMtLS0vH37NqCc//zP/1SSY35+/r/+67/ggYyZmZk//elPbW1t4L15XEeswA4PxsbG+vr6wcHBYISIz+e/evXK3Nz8+++/v3v3rpaW1sWLFzMzMwUCgVwuB+4BwfbXISEhYNCKzWZHRETcuXPH1NS0rKxMqftHLpeDUYk7d+7cv38/LCxsZWWFyWTCWcrLy5WyKLUOcrh3BTSZcvZ+d3ssYWBgwMvLS3U5+h6LBfu9P3/+PHDD8vPzd9rRtfcKICUgCiAKvFWBI085Mplsenr6f//3f0+dOtXU1ESj0VQph0qlfvrpp42NjWw2m0qlFhQUXLx4Ee7AOJaUAxzLnj17tqenZ2hoyNjYGDiSyc3NvXbtWn9/P5/PX1hYYLPZjY2NV65cCQgI4PF4RUVFN2/enJ+fHx4e1tfXLygoEIvFL1++/PHHHwkEQkNDw5UrVwYGBlZWVsCiGLFYTKVS8/Pzb9++TaVSR0ZG7t+/n52dXVtbe+PGDTwe/+rVq8uXLw8PD7/1QUQS7EUBhHLUqMdkMrFY7Pj4uJo0yClEAUSB46rAEaMcCoXy7bffNjY2vnz50tzcHLSKSCTKy8v76quvOjo6mEzmyZMnlVpLLBbX1NScPHny1q1bN27c+OmnnxT7JFgs1qlTp45ZfwOfz09JSXF3d2exWFQqdXx8HFDIxYsXJycn5+fnQ0NDTUxMPD09k5KSamtrL1682NDQEBsbC+a7MBiMkJCQoKAgoVBYWlqKQqEWFhZGR0dtbW1TUlKKi4vj4+P5fH5dXZ2NjU1MTExmZiZY6RYcHPz48ePi4mIrKyuQxdrauqioSKlFkMP9VeD9oRywk9dOV8uPjY3V1dUtLS0pLr0tY4AAACAASURBVNTa3yZASkMUQBTQTAWOGOXI5fL19XUwfVWRS8AaVDDUvemLTCaTCYXCtra2np4esVisOMYPytTM5tl1rdhstqOj4+3bt62srMzMzEJDQ/F4fFRUlL+/P41Gs7W1jY6OJpPJnp6e2tradDodjUZHRUVJpdL19XUOh1NfX29oaPjixQu5XD47O6utrQ2cIJuYmLDZ7Lm5OUNDw6ysLBQKNTAwABYJK+aanJzU0dEBWR48eKDoiWfXd4RkVKPAVpTT2toK/iR4uR+GxWInJycXVWxpaWnTCVtqKrzrUyKRiEQiTezQwsLCTp48aW9vX1tbq7iGa9fVQDIiCiAKHBUFjhjl7FHWXazu2eMV31V2NpttbW197do1AoEwMjJibW3t7e39+PHjwsLCqampzz//nLNhiYmJwcHBNBrNzs4uLS1NIpHMzs5GRkbeuXMnMzMT7Lzz/PnzS5cuFRQUREdH37p1q7e3d2VlpbCw8KOPPoqMjARgNDMzExERcfv27aysrOXl5YqKiitXruTn50dFRWlpafX19b0rHd6T625FObW1tdHR0U/2z/z8/MCuYYr/g401DkdqHo83PDy80yXzpaWlXl5eWlpan3zyib+/P4lEOjQsOxxZkKsgCiAKbKXAEaMcmUzG4XDIZDKFQgFOt+RyOY/HI2/YwsKC6n3KZLKFhQUSiUShUOAdjmQymfpcquUcrRiw8bifnx9wmRMTE3Pv3j3g1X5ycvLkyZNkMnloaMjGxqaoqKirq+vOnTskEgnsIRUUFEQkEkFXGZPJ9PT0fPr06fr6Oo1GCw0NBcNYhYWFX3zxRWBgIJ/PHxsbs7GxCQoKIpPJEomERqN5eHhERUWtra3RaLSQkBDgve1oCXi0aquGciIjI30O2CIjI3t6eg5HMUA5O10y39bWNjk5icfjHz9+/Pvf//7SpUvPnz9nsVgI6xxOqyFXQRR4hwocJcoBy3l8fX3NzMzMzc0zMzNXV1e5XG58fLypqSkKhfL19VVy1i6Xy2k0mre3N0iQlZUFXNux2ey4uDgTExMzMzNvb2/YCe87bIn9vbRYLG5sbDQxMSEQCIODgy4uLuHh4SkpKWAXZWNjYzs7O09Pz+vXrzs5OaHR6NraWg6HA7a8GBkZmZqawuFwXC6Xw+FERkY+efKEQqG8fv3ayckpNTV1YGAAhUKVlJQYGBhkZ2cHBASAHZunpqbm5uZAb1BgYCCFQunv73dwcMjKytrfuzu00kBvluLY6KFdekcXQijnrdwDFoFLJJK2trbr169/9tln9vb21dXVSm+MHcmOJEYUQBTQfAWOEuWsrq6WlpYaGBjQ6fShoaHTp0/39vbW1tZevnx5dsMMDQ1TU1MFAgGPxwP+fCkUSlFRkb6+PofDGR4e/uyzz8ASoaqqqmvXruHxeCKRqKOjk56erjhTR/ObbTs1ZLFYjo6O169fNzIysrGx4fP5JBLp7t276enpeDy+qalpZsMaGhpmZ2chCGKz2RgM5oM39tlnn4FBq7Gxsdu3b6NQqPv375uZmeHx+JCQEICYL168uHHjho2NzZtMH3zxxRfp6enDw8M6Ojogi6mpKeh1206dNSeNRCJZXFwcGxt7/vz54OAgh8MBTwjY2p1OpzOZzK3ua3V1lU6nb3X2IO4RoZztUA6sPIlESkpKunLlysmTJ58+fUoikY7f3znwzSIBRIH3XIGjRDkrKyslJSVVVVV8Ph+Px1+/fr25uTkhISExMXFtbY3L5UZERDg7O1dWVgYFBfH5/ObmZnt7+9zc3MrKSqFQiMfjb9y40dXVtbS0lLJhEomEz+eHhoZ6eHiAHZ2O2dMgFotHRkaGhoaAzzGw6l5fX9/Y2Dg5Obm0tDQxMbGqquqtd726ujq8Ydv3XSYSiUCWtxaugQnkcjkej0ej0RcuXNDV1b1y5YqtrS2LxQIbewUHB4MdqmNiYmB/BIp30dnZefHixcNcWYZQzo4oBzQWmUxOSkq6cOHCBx98EBISsri4KBaLFdsRCSMKIAocAwWOEuUAuUUi0YsXL5ycnK5evQom4oCpOW1tbfr6+uXl5TweT0tLq6CgwNDQsKurCww61NbWOjo63rhxg8lkwp/8paWljo4ObW3tysrK49eXs9XTKRaLu7q6QkNDQ0JCkpKSQEfOVonfz3iRSFRSUnL37l3QHzM9Pe3k5FRRUcHj8dLS0gwMDGg0WldX14MHDyoqKtbX13k8Huxzcn19vbS09Pvvv1ftHgAL/VgsFoVCIZPJHA6HyWTOz8+zWCypVLq2tsZkMgkEAjznTCKR8Hg8NptNoVBIJNLy8jLwZ02lUgkEAoPBgL/KCOXsgnLAs93R0XHjxo3PP//c1ta2trZWtdU06ifA5XI1vIYaJRdSGUQBCIKOEuWA3QlWVlZaWlqePHny5ZdfdnZ2SqVSEokUHx9/5cqV+Ph4mUwmkUiam5t/+9vf+vv7i8XitbU1kUiExWJ9fX2/+uqrzs5OmUwGcsXFxZ0/f151R2LkyXjPFRAKhYWFhTo6OpOTk2w2m8PhEAgE4HkoPj6+qKgIdOoEBATExsYSCITExMS5uTkgGpFINDMz+8Mf/qDal8Pj8YqLi/X19W/cuPH999/b2tqiUKjTp0+jUCgcDgd2Kfnkk0/OnTsXHx8vFouJRGJQUBAKhbp8+fJXX32VmJjIZrPr6+svX7780Ucf3b9/v7e3F1wUoRywZv7V1jY4OKiyBP7/IoB/y46ODjCAFRYWNj8/f6Ak8fz5c2sFAy2Y/sYIBIKaX19AQEBSUpKaBMgpRAFEASUFjhLlgE4IIpEI5kag0WhfX9/5+Xlra2svLy8CgQBGndbX1+vr60+fPu3h4cFgMLq6uohEokwm4/P5aDQ6KCgIbGFjY2Pj5eUFdtdTEgU5RBTA4/FWVlbfffednZ1denp6T08PWKAHPDMxmcyysjIUCoXFYgUCAQ6HAx9LsJVSfX39hQsXVEf3OBwO2PiCy+VWVVV9++23L168GB0ddXBwSE5Ozs/P9/b2XlpaevHihZ6e3tDQ0PT0tJGRka6uLpPJBAvi/P39/fz8IiMjcThceXl5RUUFaKmdUo6fn1/o/lliYmJ3d7dIxba/Hez2n7et1lg9f/48MjLSV61tuqAe7BUKsDU5Ofn69esnT5708/Mjk8lwV9n2q7edlOnp6efOnQt/YyDLuTfW0tKiphCYckQiEYVCmZ2dJZFIQqFwZWUF9nkoFAp5PN7KygqDwZibmwMJpFLp8vIyk8mk0+nws6rmQkflFNgbFe5JPSrVRup5mAocJcpZXl4ODw/39PTE4/GTk5O2trZPnz6NiIjQ09Pr6ekZHR2dnJxkMBg4HE5PT6+2thZMRg4MDPTw8ADLpG1tbZOSkhYXFyMjIw0MDPr7+0dHRycmJths9mGKjlxLwxUAnwQ2mz08PJyZmfnw4cPvvvuupKQEgiCxWDw6OhoUFKSnp1dcXAwGOpWA5uXLlxcuXFC9Rw6Hk5ycjMFgIAjq7e3FYDBgphQGg0lNTWUwGC0tLSUlJW5ublpaWkNDQ1NTU2g0Oi0tTS6Xs9nshIQES0vLuLi4u3fvxsXFYbFYJpMJrrJTyomPj2/dV2tvb+9Usf7+fhqNpqrDXmLUUE5ERMQulsxXV1eD+gCvygQCwcvL64MPPrh06VJVVRWTyQS7ue2lzkp5AeUoRhYVFZ07d07REYaBgYFiAjgMKGdtba2+vl5PT+/777+/c+dOSUkJFouNj48fGxuTSqU1NTXJyckvXrywsbG5ePGirq5uWVkZHo/Pzc199OgRGo3u7OyECzy6AalUurCwMDQ0VFNT09raOj8/D9Mbk8lUfKUzGAwajba4uEihUIhE4szMzOzsLJFIZDAYq6urDAZjZmaGSCTOzc3NzMywWCyJRMJgMBR9mSqVMD09DZdwQCh8dNtFA2t+lChHIpEMDQ3dvXv30aNHNjY2ZmZmdDo9ODj41KlTpzfsu+++i46OjomJSUxMFIlEra2t5ubmjY2N2traoIfY3Nx8cXFxaWkpKCgIZDl9+vQ333xzLNdYaeDTdlSqtLi4WFtb29DQIJFIpFIplUoNCwtzc3NbX1/v6+t79OhRdHQ0jUYDfYcymUzJmzZMOWBOGHzXHA4nJSXF1dUVgqC+vj43NzcIgqanpzEYTFhYWFJSkpaWVlJSUnBwMOjLmZqacnJyiouLgyCIwWBER0e7u7sTCITnz597e3vr6Oj4+vqCwndBOW+dyLL3BH19ffu+geXBUQ5QUi6XSySS1tZWLS2tL7/80s7OrrKycnFxEW7EvQcA5dzaMBQKBUHQtWvXzp07B/5nsVgQBAUGBm56IUA5DAYjPj4+OTmZxWLFx8c7ODhUV1f7+fnl5+czGIyIiAgPDw8/Pz/g8LOoqMjFxaWgoMDR0fHRo0d4PP54zEEkEAghISF6enomJia3bt3S19evqqoCoOPh4REWFgYL6O7u/vDhw4KCAk9PTysrq08//fSbb76xsrKKjIycnZ11dXUFh/r6+mfPnvX29p6fnwe+4OES0Gi0jY1Nfn4+KOGTTz757rvvrKysoqKi4KFqODES0DQFjhLlgOEAoVDY09MzOTkJvJgA37vwvjbSNwZBEJijA6Z8dnV1gSzgz27VXJrWMEh93qECi4uLKSkpKBRqZGRkfn6+p6fHy8srKiqKQqH4+vo+evRoZGRkfHx8ZmYGuBRqb29X/MsPphwqlfry5Uv4RtRQjseGhYSEUCiUsrIyXV3djo6OqakpY2Pj+/fvEwgELBZrZ2cXEBCQnp5eUlIyPz+fmZmpp6cHCkco5/nz53vsy4GbCbxniERiSkrKzZs3//rXvz558oRIJO5Xpw6gnIENGxsbA9cF5GFsbPzkyRPFmiiFAeVIJJL5+fnm5uZnz56Zm5s/fPhwbGwsKirK29u7urray8srODjYxsYmICCgqqoqISHByckpNjbWz88vJSVFqd9RqXxwuLCwMDs7O//G6HS6SCQCvhVIJBKVSoXdqypmX1tbY7PZh+N/SCQSRUZGOjs7j4+PSyQSgUBQWFhoZWVVX18PQRAGgwkODobrhkajUSgUgUCQbJiTk1NISAj4A0Yulzs7O4NDiURSV1dnaWlZXV3t4OAQHh4Ol+Dg4GBpaQl8pUokEjs7u/DwcLgEOBkS0EwFjhjlaKaIh1ArMPN6DbGtFdjfsXkSieTm5nbp0qW7d+/evn374cOHRCJxfn7e0dHxj2/s7NmzxcXFExMTHh4eExMT8GPQ0dFhYmICQVB7e7uZmRkcv7S0VFRUBN6eo6OjIEAgEMLCwtLS0lJSUi5duoRGow0NDc3MzFJTU6empszNzc+ePautra2vr+/k5DQzM5ORkXHz5s1Hjx6ZmZnl5eWBwhHK2V/KgZuMTCY/fvz4N7/5zdmzZ6urq9ls9t5HKFRHrBISErq7uyEIMjIyCggIgK+uGgCUQyaTvby8dHV1k5OTnZycHBwcZmdn6+rqPDw8zM3Nvby8qqurTU1Nzc3Nw8LC/Pz8QkJCiouL/f39U1NTVctUjQkICPjLX/5i/Mb8/PxGR0dnZmaePn364MEDFAoFlhYqZcTj8T4+PofjArS7u9vW1ra4uBiuA4/HQ6PREREREolkU8qZn58HiV1cXBR7epydnQMCAoRCoUAg6OnpcXZ2rqio2JRySCQSKMHe3j4qKgq+NBLQcAUQytHwBvpb9dbW1sYRU6uA+sUpu2hmqVRKo9F6e3uJROIusu80y+rq6uzs7OjoKJ/Pp1Kpk5OTU1NTGAwmISFhdnZ2amoKFCiRSKhUal9fH/zOhSAIoZwDohygeUdHx61bt86cOWNjY1NdXb3H/T5VKScxMfHcuXM6OjoXLlwAy7vOnTu36fMDKKerq8vFxSUnJ4fBYMTFxVlbW4+NjREIBFdX1/Pnz4O96nx9fePi4mg0Wm1tbXx8fF1d3Y4ox93dXbECa2trMTExaDR6dnYWuDsnEokrKyt8Ph/2DA5TzsrKCplMxuFwZDIZnhkN/ggRCAR8Pl8qlQLPmXNzc2QyeWVlBbguYzAYdDp9Ux9UipWBIKi+vh6DwWCxWMV40F9Fp9N3SjkPHjyorKwsLCy0tbV99OgR8Niu2pcD/+IQylGUXfPDCOVofhv9Xw1FItHe50kc7xJGRkYOsy0PYfOH2dnZJ0+eFBQUvPW+EMo5UMoB+nd0dFy7du3UqVNhYWFzc3P7OzQjlUrhzgY1zZ2cnFxYWEilUv38/O7cuePo6GhkZAQGWeRyOdiubnh4GIKgFy9eGBoaolAoMzOztLS0ubm5xMREMINeTfngVEBAgL29PWvDOByOSCQaHR318/PLzs6mUCjTG8bj8drb24uKiuAp8IByUlNTq6qqtLS0PvvsMy0trcrKyvr6+vj4+MnJSalUWlJSkp2dvbi4iMViUSjU119/ra2t/fz587m5uczMTHNzc0dHR9Ctpb6Sr169wmAwjY2NcDKZTBYZGenl5UWlUndKOdeuXXu6YWlpaTMzMxAEIX05sLDHIIBQztFoRIRy3opo+0s5MplseXmZsmGK3zO5XC4UCikUyuDgYEVFRX9/P4lEUpqmsLa2ppgFgiCJRMLlcpWSKT15qrnYbHZtbW1/f79SStVDhHK2opwnT54EBweHbW21tbUrKrbVGngymZySkvLjjz/+4Q9/CA4Ofof7fS4vL09MTMzMzPB4PDwej8Ph6HR6SEhIZGQk/HgsLCwMDAxsB57gLCAQEBDw7bffgoX30dHRg4ODTU1Npqam+vr6KBTK0tKyrKxsZWWFzWYrrrcHlOPv7//06dOcnBw+nx8VFeXi4lJZWent7V1aWkqn0wMDA7OzswkEgqenZ0xMzOLiYkFBARqNLigosLS0dHR0pFAoSpXZ9HB0dNTNzS0nJwfebxVsUJOYmAhBkKura0BAAOhkWl9fd3Z2tra2hpf7qY5YKQ5ggcs5OTmFhoaCEsBEHHt7ezqdDs4ifTmbNorGRiKUo7FN87OKIZRzyJSzsLCQnp5ubm6OQqGioqLAzFOZTMZgMEpKSqysrG7evAk26rpz505OTg5YhgNmaLa1tSUkJMDtJ5fLp6eng4KCttpMQyKRcDictrY2RYdvMplsamoqKCgIXuoMF6ga2C/KaWlpqds/a2pqGh8fZ6vYXnzu7XSNVXR0dG1tbdvWtulz9fr1awaDoaozmJjc0dFx586db775xsbG5oBWm296aTWRFAolISHBxcWltbVVTbJtngoICDAyMurasIGBARaL1dTUpK2tHRQUxGQyS0tL7e3tm5qalEoDlJOWljY/P9/U1JSfn29kZGRvbz8xMREYGBgUFFRWVubj49Pf39/Q0PDo0aOQkJDKysrY2FgnJ6eEhAQvL6/c3FylMtUcpqSkmJub19bWEgiEubm5jIyMx48f9/X1QRAUGRnp4ODQ09NDJBI7OzvNzc0VJyRth3LCwsKcnZ3BaHVnZ6eZmZnifCOEctS0iwaeQihHAxtlkyohlLPp10gxch/7coD7bF1d3eHh4a6uLgcHh9HRUQiCWCxWTEyMpaXl0NAQhULB4XBzc3OlpaX37t2LiooSi8V0Oj0yMlJHRwcsFwcNyeVy4+Pjv/zyy/T09PX1deDLALipBL39NBoNeAv08PCA235xcTEmJubMmTOZmZlw5FaB/aKc8vJytX71dnxyU0d8sDPDrW5HTTyfzx8bGwMfYMX/a2trN11jBShH8TnZTri/v38rygGgA/Y2v3379pkzZ2xtbcvLyxUX2ampP3xKKBTCtCcWi4EHP9jt8vr6OpPJnJubo1Kp21nbtby83NvbOzw8vC+rxAMCAtzc3OQK1tnZ6ebm9vz5c7lcPjw87Orqmp+fv76+vra2Bl8RUI6Pj4+7u7upqWlGRoadnR0Gg8Hj8VVVVZ6eng8ePAgODubxeM3NzSYmJra2tjExMYGBgWFhYSUlJV5eXvBselglNQEGgxEbG3v37l1dXd07d+7Y29v39fWBFWREItHLy+vmzZuGhoY6Ojre3t7T09NwUZGRkYrIEhERoXgIkhGJRE9PTy0tLUNDwzt37vj6+oKRLHA2LCwsPz8fLhAJaLgCCOVoeAP9rXoI5bz147SPlMNkMmNiYnx9ffF4/MTExMDAAJvNXl9fb2hoMDQ0nJycHBwcDA4Otre39/b2BlMl9PT0BgcHyWRyaGiopaUlcP0HvAg2Nzfr6OiYmJikp6dzOJzi4uL09HQ6nV5UVAS6fObn50NDQy0sLOApn6urqw0NDSDXYVIO+Gt7F771dpSlrKxs1786eLcvws+tq6srNjZWtRoHQTmg8jKZjEgkpqWlaWtrnz592sfHZ25ubjtEIhaLmUxmRUVFeXk5GM3s6+vz9va2sLCwtrYuKCgQCARjY2P+/v6mpqaurq7Nzc3wDF81ugEmUZNg+6cCAgLgRxHkYrPZMTExUVFROBwOOJ7p6OiYnZ3t7++HWQ1QDgqFcnZ2BsNS4DcyMTExNzfn7Oz8448/VlZWQhA0MTHh5eWVkJCAw+GKi4uTkpJevny5U8oBXhxpNNrr169nZ2eFQiHMW8DpEYFA6OzsJJFIEolEcf08cDYCq6F0COJBCXg8vrOzk0wmqy8BLgoJaKYCCOVoZrso1wqhnMOkHDweb2trq6OjY2tr+/Dhw+joaC6XS6FQQkND4+LiJicnbWxssrOziUSii4uLhYXFzMwMBoNJT0+Xy+ULCwspKSmAcoAfSy8vr5iYGDjBwMAA8Cfm4OAwOTkJ+gbYbHZSUhL4tEgkkoGBAW9vb5ALoRzlHwMEKfQy/C1IIBBSU1MPk3JArQDreHt7f/DBBxcvXqyoqADeZVTrDMdMTU35+flpaWkBxgVTib29vcFgqJ2dXXV1dUxMjKur68zMTEREhIODw747V4Qrs2kgLS0tNjZW6VRbW9ujR48MDQ1NTExyc3NXV1dra2sTExPhmTQUCiUpKSkhIcHHx8fIyAiNRpuZmdnY2DQ0NMhksqCgIGNjY+BwQS6XV1VVmZmZWVtbA399OBwuISGhtrZW6aLbOdwK7+CHZDuFbJpm7yVsWiwSecgKIJRzyILv8nKbUk5bWxsWi21AbEOB7u5u3mYG+33fvvR4PN7c3NzIyIhOpwMoycjIwOFwPj4+1dXVWCz28uXLQqGQRqMBR9uTk5OOjo6FhYUQBC0uLqampgLKodPpERERaDS6qanJ0tIyLCyMy+UuLy8nJyd//PHH6enpcJXA5g+Acmg0Wnh4uJubW2Njo6WlZUREBJfLhVNuGtivESvN78vZ9PYhCCISie+EcuD6gL3NP/30U2tr68rKSjVNNjQ05OfnZ2xsDPYJHh8fT0hIwGKxcrm8r6/Py8vL29vbx8cHrIdqb29//PhxQ0MDfKF3GFhYWAAdlurrwOfzQf8Nn8+fm5vD4/HAnWZycrJiRhaLNTg4CEOS4qldhJeXlxVn94M+PyKRyGQy9+7iaBf1QbJojgII5WhOW6iryaaUg8ViCwoKYhDbUCAhISFvM1P0PqxOYoVzJBLJx8cH/DnLYDDCwsI8PDzweLyvry/YM+j8+fNkMrmtrQ180qqrqy0sLMDWOYqUMzEx8eDBA319fR0dnb/+9a9XrlwpLy/ncrlJSUnff/99dHQ0vEJEkXJGR0cVc127dg308ytUUDmIUM47pxwIgkgkUlpa2o0bNz799NPQ0NDp6emtWIdEIgUHBwPKAW25trZGJBJjY2PRaHRcXBwGgwGzztvb2zEYDNhSVLnVj8gxkUiMjo52dXXdzhLxXdzT6uoqk8nMy8uDWVAul/f393t6ehoYGLi5ufX09IDNWHZROJLlGCiAUM7RaMRNKaexsXHTuQiq/fbvc8x2RnyUHoKVlZWqqip7e/u5ubn29nZnZ+fi4mIWixUbG+vm5tbb22tubm5vb+/q6nr79m1HR0dPT8+2tjZQiCLlwMXCQ1pisbixsdHe3j4vLw+FQr169QpMJlCkHDgX8Aq4nfofNOWA5cHAp8je/wf7DQlVbG1tDb73nQY0gXJAnUkkUmpq6uXLl//4xz8GBQUxGAzVyTpKlCMQCDo6OpydnVEoVEtLCyAbTaAcMC0aj8fT6XSYyIH7LuBHZzvNxOfzu7u7FZ2DbyfX9tMMDAy4u7tfu3bt2bNnINfi4qKPj09QUBAej/f09PTy8oKd+my/WCTlsVEAoZyj0ZQI5ewa1LZDCaoPAZhzc+fOHTMzMx8fH+CPdWxszMzMLDMzc3R0tLm5eWZmZnx8vKmpCXaKCkEQj8crKytTcgA/Pz8fFRVVUVEBBwQCQXl5ubu7Oyh5aWmppKQkJiZGsSZEIjEqKuqtHTn76Pt4qxGrhISEt86L2nsCxWUsijpsJ7xTysFisS9fvtxq1Xxzc/P4+DhTxRYWFlSRZdPqdXZ23r1797vvvrO2tq6oqFDa71ORclZXVysrK62srPLz84FX5b6+Pnd399LSUgiCsFgsGo3eRX/kprXaUaRUKu3u7nZzczM2NnZ1dW1tbQX+i6VSaXNzc0hIyAH1zeyokhAEdXR0PHnyRF9fH6aczs5OT09PINqLFy+8vLw0pKo7vTUk/b4ogFDOvsh44IUglHPIlANBkFAoHB0dBROEQQODecFmZmaPHj1KSUl59uxZYmIi3E9+4A/B1hc46L6c40c5VVVV4eHhO32ogIu8rdtB+UxHRwfwAhwSEjI5OQmzjiLlDA8POzg4PHnyZHjDZmdniURiTEyMv7///Px8Wlqau7v7XvhPuU7bPuZwOH5+fk+ePKFQKOHh4S4uLmATFRKJ5Ojo+NNPP7169WrbhR1sQhwO5+npCVNOXV0dBoNpaWkBPqDh8MFWAildUxVAKEdTW+bn9UIoZ6cfJDj97vpygPyqyzfkcjmfz29vb4/dsLy8vF34lv15Jr+sewAAIABJREFU2+7DEUI5ZDI5Nzc3RMUSExPr6upU+5kOh3LkcjlYbX7t2rU///nPQUFBVCp1ZWWFwWBkZmaCzSaHh4cfPnz46aeffr5hxsbG7e3tPT09Hh4ednZ2Tk5O1dXViguh9+Fx2V4RNBotLCwsOjoaaOvp6fn69Ws+n5+enn737l1LS0uEcrYnJJLqHSuAUM47boBtXh6hHJhadhrYC+Vs1TpyuVz2xt7JF0ipYkKhcGJiolvF6uvro6KiVBWLj49X/fC3t7cf3RGr5eXl4eHhRhVrampqa2tTvdnDoRzgJkAmk7W3t9+/f//ChQvW1talpaUUCkUgEIApWcDvy/obA65ZgEuC8fFxOp0Ou4FRavSDPpRIJHl5eYaGhu7u7sbGxpGRkWw2u7q6Ojg4+OnTpxgMRmMpp6WlxdXVFYxYVVVVubq6dnZ2HrRcSPkaqwBCORrbND+rGEI5qp/qbcYcBOX8rG004GB9fZ3NZhNVrL+/H/gvUdLq+FEO4AnYwQkcWFpaGhoaeoeUA54OgMUdHR3a2tpnzpwBrLOwsKD+2Xm3AE2j0Xx9fW1tbcvKytBoNAaDATPJoqOjs7KyzM3Nc3NzYZeA6m/koM8qjVixWKyAgIDY2Ni5ubnw8PCAgABN6HA9aBGQ8rdSAKGcrZTRrHiEcpS+09s/fB8oZ6uHlUajpaenq2p1LClnUxF4PN42KcfPzy8sLCxcraWmpvb39wsUTCgUbscxMVw3Mpmcnp5+69atkydPent743A4MP0cTqA5ASwW6+bmVl9fD0FQf3+/l5fXw4cPTUxMHjx4cP369VOnTj148EBDZvWSyeSEhATFOdpNTU0YDMba2trR0RFM0NEcYZGaHLICCOUcsuC7vBxCOaqf6m3GIJSjKhRCOaojVjExMS9evFDt9VEfo37Hq61+7WQy2cfH54MPPjh//nxpaSmYrLNV4ncVPzQ05O/vn52djcfjc3Nz3d3d4XEfwBCaM2K1qUQsFmtycnKn+4ttWhQSeaQV2DfKkUgkq4jtnwJisVjxb8SdUo6vr29oaKjav0vfl5P5+fkKf3v//6BQKNyLg5Yj8bM/6L6c5ubm2v2z7u5u2ma2tLS0a7W335dzmJQDbqejo+PWrVuff/75w4cPi4uLSSQSd4e2vLwMVnfvWh81GdfW1oqLi8GKQgMDg4yMDNiJcF9fX0xMTE9Pj5rsyClEAQ1RYH8oRy6X0+n08fHxMcT2SYHJyUk2mw0PzO+UcoKCgiorK9X/Gfqen+3p6Tn2o/UHTTmlpaWqHUX7HrOXPcw1mXKAu+Tk5ORLly598MEHBgYGSUlJOdu2hISExMRELBY7OzsLdi8/iMGvhYWF4eHh/dqHQUM+e0g13isF9odyZDLZ1NRUR0fHe/7h3Mfb7+rqwuPxCOXso6RKRSGUoyTILtZYIZSzuxErpW/M0NCQnZ3dDz/8oKuru31GvHLlyj/90z/993//9+XLl69cuWJiYpKfn9+3YaOjo7g3RqFQDoJ+lG4BOUQU0FgFEMpRfdVrRAxCOQfdDAjlqCq805Xkh0M55eXlu36B8vn8sbGxHhWrqamJiIhQRIrDH7GCb0oul5NIpIKCgoCAAMUqqQ8/ePDg6w27dOnS2bNnT5069eWXX545c+ajjz46deqUzoZdv37d1NQ0Ly8POBkYHh6efWNvXeEFV09zAiKRiEgkjo6OjoyM4HA4yg5tcXFRcRqA5twXUpMDVQChHNVXvUbEIJRz0M3wPlDOwsJCTU1NuooVFRVtKu/xo5y1tTUWizWvYl1dXUp7wL1DygHL4MlkckFBQWBgoHq4UTzr/cbS0tImJydXV1elUmlra6uHh4fnhhkYGHz99dfffPPN6dOnf/e733366ad3N+z69es+Pj6db2xoaGj6jb1z+llZWSGTyW+qMz00NPSmmp15eXn37t37+OOP//KXv+jq6vru0PLz8wkEAgI6B4oUGlg4Qjmbvu3ffSRCOQfdBu8D5WzlRWZhYWFTeY8f5Wz1ziUQCCkpKYrE8G4pB9QTgM6OenTgW8jIyJidnV1fX4d9BSn6riQQCOnp6e7u7h4bdv/+/TNnznz11VeffPLJb3/729OnT+vo6Fy7du3cuXO+vr5dGzY0NDTzxshkMhj2EolEnN2a4hZgIpGITCa/KX5maGgIXLSrqysvL8/U1PTatWugO+r06dO//OUv//SnP321YWfOnLl58+adO3dQKBR879sP5OXlIaCz1Y/iuMYjlLPp2/7dRyKUc9Bt8J5QzqZvLg6Hs6m8COWoyoLFYuvq6mq2sIaGhpGREdWREwaDIRQKNxVffeS+gI76SyieJRKJgH7c3d319fW/eGMffvjhqVOn7mzY1atXwaSf7u7uZ8+ehYaGRryxpKSk7O1ZUlJSSUkJ7J07Pz/f1NT06tWr4BKnTp36j//4jw8//PDN9b/Q09NzVzAsFqtY7bm5uZycHH9//+3zDZwSAR1FJd+HMEI5qq81jYhBKOegmwGhHFWFEcpR1aSysnIX+3rGxMQMDg7u7hOyi6Er+BMO9+js7tJwrpaWFtDr4+Hhoa+v/+WGffzxx7/5zW9+97vfnThx4s9//vOHH374ww8/mL4xGxsbDw8PuCZKAT09vd/+9re/+MUvPvroI1Dal19+qaenB1/Fw8OjubkZrsBbA3g8fi+gMzMzs7q6+tarIAmOgQII5ai+1jQi5oAop7W1tb6+fou/S9+v6Pr6+v7+frKK0Wg0DfFbf3Dvl4PuywkICIjcP6uuruZvZoojIDvVavsjVodPORAEkcnkZ8+e7XHoaqeavDU96PhxcXExNja+dOnSiRMnfrNhv/rVr/71X//1448/trKyUoIb+NDOzu769et6enpVVVV7aTjFSu4FdGJiYvr6+varJoq1QsKapgBCORrBNKqVOCDKaWhoiImJgV89SEBVgbCwsJaWFngNv/pfrEwmE2mevdXb4UFTTmJiouojve8xs7Oz6ltHzVkNpxwAOrm5uarP53ZiMjIyZmZmDs5h4NLS0qtXr0JDQ0Fl7O3tb9y4cf36dTs7u7dWLzo6uru7e78WtyOgo+YhR04BBRDK2fd37/4UiFDOW1+XB5RgR5QjEAhGNc/e6u0QoRzNpxwIgoaGhsLCwnb3nB8y6OyokhoFOr29vcjQ1fHmIYRy9gdK9r0UhHJ29N7cx8Q7opylpaV9b/q9FzgxMaH+tYVQDp1Of/78eYaCPXv2rLGxUVX8dzJiBZqPz+c3NTUhoKP+YYYgaG5uLjc3d3eTkZGhq7fKe9QTIJSj+lrTiBiEcvYRXHZU1PtAOXw+f2Qzq6ur21SrhISETX8VW3kF1PwRK9U19lwud9Pdy98h5UAQxOPxmpubjyvodHV18Xi8fRlZA1uK7m4mU0xMTG9v734Noh11Jjh+9UcoZ9O397uPRChn08/tIUS+D5Sz1YtscnJyU4WPJeUoibC0tKSBlANBEJ/P3zvovHWqlpIa2z8Ec3R2x2HR0dFVVVU4HE5DQAeZjLz9dj9CKRHKefdAs2kNEMrZ9HN7CJEI5aiKjFCOqiaBgYFRW1tGRsbr1695KiYQCHbxRd8X0NnFdbf5JePxeIqTkVW1Uh+TnZ29v6Cz66Gr3t5eBHS22ehHKBlCOZsyxruPPGTK8fX1DQwMDEMsLCwuLq61tXVFxUQikVQqVfptH9F5OUp3AR8eaF9Oa2trQ0ND/f5Zf3//gopxudzd9VvstC8nLS1tF6+J/v5+JpMJC779AACdp0+fqieGrc4e9GTkPYJOVlYWAjrbfxiQlDtSAKGcXbypDiPLIVNOQEBAZmZmNWLV1bW1tW1tbaoLp6ampjgcjtKvC6GcTT+rm87LefnyZWZm5tbdHzs+k5CQkKViVVVVRCJRqZm2c8jn88fHx1W29exR3dcT3PIhU86+DF1NT0/vDgG3I+Behq58fHz2vUdnL3N0kB6d7bT4UUmDUM5hIMsurnHIlBMUFFRVVbWLer4/WXp6ekgkktIPeyvKaWlp2b8+ix2X1N3dzVaxxcVFsVisVH+lwwPty6murlbaBnxTQtpjZFRUVH9/v9J9bedw+/t6vivK2RfQOVA/Ojwer6GhAfajs9Om3PceHQR0tvPkH/s0COVo6GcaoRxNa5gdUU5tbe2Ouyb2L0N8fLxKH0dWWVkZDodT/0Z7nylnK2XweHxycrLqB/vw+3JADfc+dDU9PX1wc3SWlpYaGhp2NxnZx8dnH0GHQCDk5ubuDnSio6ORVVdb/SKOXDxCOZr2Mf1bfRDK0bSG2RHlVFVVqX4X321MREREZ2en+jcUQjmq+mga5cA9OnuZo3PQQ1d76dHJzs4Gm6urtsVOY/B4fF5e3u5ABywvR4audqq5BqZHKEfTPqYI5Whoi7wPlEMikXI2s7Kysk1bZUf+cjR8xGqrt7MGUg7wo4PFYvcCOlNTUwc6R2ePPTqzs7P7Ur09gk5PTw/iR2ern8ZRiUcoZ9O397uPRPpy3n0b/LwG7wPlbPXaWlhY+LkYfztCKGdTWdRE7nqNlWrT8Pn8vYBOenr6IfTo7GXoar96dAgEwq57dKKjoxHQUX32jlbMcaac1tbWysrKnJyc7A3LycmpqalR8wLSqFMI5WhUc7S3tyOUo9oiCOWoatLQ0FC1tdXX1w8MDBBUjEwmCwSCnX48ENDZpmJ7BJ22tjY2m31wk5m2eRdIst0pcDwpp6WlJTMzMyQkRF9f/5NPPjm5YadPn0ahULm5uW1tbarvJk2L0RDKaW1trUNsQ4GGhobh4WHmzw2Hw718+RKLxSo9P0rzcvz8/J6+a0tKSurs7BQq2FuXXMHvlAPty3ny5ElwcPB+yZOcnNzb26twl38Lrq6uqro7gm9QTWCnI1YFBQW7mIAVGxs7NDSkphpbndJw0AGrro56j46Pj09OTs7c3BwCOls9h5ocfwwpp6WlJTEx8cSJE//wD//wdz+3f/zHf/zyyy+joqKqq6s1nHU0hHJevXq1f0t/jnZJ0dHRSUlJSmuXUlNTExISKioq1FNORETEO3dF9OLFi46ODsXdq966dTn85jpQygkNDc3Ly9svferq6jo7OxVvE4RnZ2eXlpbgO9p+gEQi5efnq/rLzMnJUWp0cHjIlAMmI+9x6OpA5+gcG9DJzc1FQGf7PxzNSXmsKAcMUSUkJPzP//zP3//93/+ccP7/0b/8y7+Ym5tXVlZqMuhoCOVstX3jLv5aPa5ZAgMDVT94Sn05sbGxm34R323k5OTk/2PvvOOaSN7H70kRRQULds+zIaKevWBBUCyooCIcWOjSlV5EQALYQOm92o4SQHpLIHQQkQ4iShMUUASkCApyn/xeX+bHXi6bxJACQff5A2efzM7Ozs4++/aZZ2aotERMpRwXF5fExERmN0VhYWFrayuV90uYrbe3t6qqKpuUkKzz+FMOBDqOjo60vWWBgYHMBp20tDQ6PToMCUamZ+gK8egQvheTKP3zUE5WVlZYWNjFixc3bNjwL9GQSc2aNUtNTY2V18FDKIc2ez3+Z/0KlAPWBa6CCTkIJrn2Mbk5VixOOeSseWtrK+tQzqQAnaSkpNu3b9P2hj58+JBR6xkioEOuS/+s+p+HclJSUtTV1YlGqaZOnbpgwYIdO3Zs27aNl5eXkHmARyc+Pp6kqZpwJUI5tFnD8T/rV6AccuavqqqKZIMjlEOyWSgoaY7LIXw0IEaHZT06b9++DQ0NpQd0Kisrv3z5QnjLtKUbGhqCg4NpW0cH8ejQ1uYTeNZPQjnp6emurq6bNm2CBqoA3+zfv19fXz8jIwODwSgpKa1atQrKMGXKlJkzZ2poaEw40JCsAEI5FD4JLPUTQjnwx4FQDrxNKGsYQjkM8ehUV1dTH5Y+1k8XnaDj4uICIujHel14fjpBB4nRgTcpy2p+BsrJysp6+PDh5s2bIUfOb7/9tmTJEl1d3fT0dIghMjIy7t69O2/ePELQ4eXlffToEZSHdRII5VD+KrDOrwjlwJ8FQjnwNrl165YjeQkICCguLoZPDaMhGOXn9ugwEHQaGxsRjw7LogkDKzbpKScrKys0NFRGRoaDgwMMSE2dOnXx4sW6urrw+b1YLFZRUZEQdDg4OISEhB49esRqkcgI5cC/E6ypQSgH/lwQyoG3iZeXVwJ5SUlJyc/Ph08Noy1imsVBp6mpiZ6hKwA6NCwvBP9w0unRQaaXw5uUBTWTnnJSU1PV1NQ4OTmhmJtp06bJy8tnZWWRdMxgMBhFRcX58+dDHh12dvZ9+/ax2pQrhHLg3wnW1NBDORkZGUkTJ3l5ea2kpKuri0pTxdS4nKysLCwWy6jmSUtLq6yshN/up0+faBugGWv0cWBgIEmLRFlZX19P5bMgytbT05OZmcmyMToMAR2GxOjQ79Gpra1F1tEh6n4sdTi5KScrK+vvv//+888/obEqdnb2zZs3+/j4UPDNJCcny8vLs7OzQ2DEzc1tZmaWmZlJ2eKM568I5bAm08BrRQ/lJCQkOE+ceHh4BJGS9PR0Ko0UUykHg8EEBQUxqnnAckfw242Ojm5oaKDyfgmzdXZ2viQlRIsIQB1mnCkHxOjQCTrMjtEJCwujORiZgR4dBHQIO/bPl57clJOamiojIwPxytSpU1esWOHr6/tDHHn69KmAgAChO2fv3r1BQUHkPEA/LJDhGRDKgT4PLJ6gh3JiYmJY8O7Cw8OptHRMpRxyM88Z22Kurq7FxcVU3i812Z4/f06yhuNPOYwKRqYhNoiahsLj8fR7dHJzcxk4dEUzcj1+/Bjx6FD50Mc/2ySmnMzMTBcXFzY2NsglM3PmTD09PWqAA4fD3bp1i4+PDzqXg4NDWFj46dOnFJxA1JTMqDwI5ZD8VLCg8lemnKamphBSEhMTA38RyFELufVyyOVnbB/4uSmH9T06TU1NdHp0GAU6wKODgM74UwizrzhZKScrKyskJERQUBDyx0ydOlVAQID6UaekpCR5eXno9ClTpvDw8JiamlJfAtyOM1CDUA5jP2bMK+1Xphxy5qm9vR3+LpCjFoRy4G0FaWiOyyF8NL29vZmZmU5OTrS9BQEBAdXV1Uz16LAO6ISEhNC8js6jR49qa2uZ11CEzxRJU98Ck5VyUlNT1dXVIU8MGxvb77//rqenN6Yhp+jo6DVr1kCFcHJy7t+/PzAwkBXcOQjl0GaRx/8shHLg5gahHHg/nJARK+jRgGBkmkEnMDCQqTE6rOPRaWhoCAkJodOjg4AO1PFYITEpKScrK+vJkyfr16+HAIWbm1tRURE+dRz6LxHJRHp6ur29/dy5c6Fypk2bJiIiMtZySBZOpxKhHPh3gjU1COXADRlCOfC+So5ycDhcInl58eJFCynp6emBNztlzaQAnTt37sCbjhqNi4sLA4eu6AQdRq3RTPmBIr9S2QKTknIwGIyamhqEJlOnTl2zZo2np+eYHDmAQsAKOlBRU6ZMWbBgQUBAAJ2MQv/pCOVQY9pYIQ9COXBbg1AOvGeSo5ynT59SmEfm6ekJnxcWFBT0/PlzeLP/UMOQoSvaJt7/sG4gGDksLOwnAB1XV9dnz54xZKI7Ne2G5KHcApOPcjIzMx8+fEi4JeesWbPANg60sUVCQsLatWuhAB0wbjXhG3kilAP/TrCmhhmUc/PmTaeJk+jo6F6Y9Pf3f//+nbI1gX5lKuXY2tra29szqnn8/f0LCwtht9vb398/PDwM3RH1ibHOsaJtD3MMBkN9lQhzsjjoNDc30xmjk5OTw5BZV42NjfQsXejq6pqfn4+ADmHfm6j05KOclJSUy5cvQwvkgKBjLBZLG+Lk5ORkZGTY29sTrhM4e/ZsU1NTmgtkyIkI5bAm08BrxQzKcXZ2Jr9MLtN/weFwZTB59eoV9asFMpVy7t27FxISwqhWSElJycvLg91u2evXrz9//kyDXX7z5k0YKUlISCBpGcaZcvB4PP2g8/LlS+Z5dJqbm9FoNM0eHWdnZxYZukJAh4bXhxmnTDLKycrKevDgAeGunDNmzNDX1yfcr4qkKaGsTElJkZCQgCalc3Jy7tmzJygoiPJZTP0VoRw4T7CmhhmU4+HhwdTeRUPhz58/f//+PZU2iKmU4+rqmpiYSMMtjOmUFy9etLW1UXm/1GQb61rJlHs7zb4cUFUWB52mpiZ6QMfFxYWBHh16YnQQ0KHm1WB2nklGOcCRQ7hl1dq1a9PS0sZkv+CZgTtnwYIF0LgVOzv7/v374TnHTYNQDmUrzzq/IpQDN1I9PT3VMMnOznZ3d4c/uLHOJEcoB4VC0Uk5wKOTlZVF86yrgICAcfDo0DzXydnZOScn59OnT/RPd2LI0BVDBtHgLxqioaYFJhPlZGZmAkcONFzFxcVlYGDAkClRYH8riJ+mTJnCy8sbFBQ0UbPKEcqBfw5ZU4NQDjWGBsSWBgQEwB8iQjnwNvmhhn7KAQsGsjLo0O/RiYyMrKmpoX9wjU7QYeA+6lS+a0g2whaYTJSDwWBUVVWhjTl/++231atXM3ARv6ioqA0bNkAIxcHBsXfv3qioqAkBHYRyfmjoWSQDQjmEBoVCuqmpCaEcuDN4/ONyCJ9Rb28vnaBTVVVFP0YQVokwDWJ0aPbooFCoBw8evHr1CvHoELbqr5ZmacpJS0u7OSI+Pj5+fn5BQUGbNm2CKISLi8vQ0JCG2eNwQwM0OBzuzp07ixYtgsatZs6caWJiwkCQIndpuB6hHBaBmB9WA6EcKo0mQjnw1zwnJ4ck5djZ2Tk4OFCYR5aamtpDSmgADgA6zs7OP+zqJDOMz9AVzcHIEOjQ0DJEHZtOj46rq2teXh4ydEXUquNwyLqUk5mZ6e/vz8HBwcbGtnHjxs2bN588eRIaUZo6derq1atJWg16lPHx8adPn4ZAip2dfc+ePX5+fgxkKSqrh1AOSZPKgkqEcqi0UwjlkHz3SVKOo6NjaGgohXlkWVlZ8HlhZWVlLS0tVD4Owmz0e3SYGqND59AVCoUKCgpiyNDV27dv6Zle7uLigkwvJ+x445NmXcoBgcbQvCfChfumTJnCzs6+bds2Ozs7b29vPz+/6OhohowrpaWl3blzZ8GCBdDlODk5Dx48iMPhSFoo5il/esqxsrLS1dVVJSXq6uomJiYsCDQkqzSelJOenk7hy8fUnzAYTElJyTuYfPjwYWBggBprxWzKweFwDGwBLBZbVlYGu9131N8vUZuMaY6Vh4dHcnIyDealoaGB6LpUHvb29qampt69e5dkJ/+h0t/ff1IMXSEeHSr7w8+UjXUpJz4+XkREBHKrQNhBmGBjYxMUFNy6dev58+dtbW29vLy8vb39/f1psA7QKcnJycrKyoRX4ePj8/HxGWd3zk9POcbGxiIiIoL/lfXr1/Pz82/ZsuXcuXM/NKwskmE8KSc+Pp7COrlM/cnFxcXLyysQJhEREW/evKHGJjKbcqKjoxnYAi4uLt7e3rDbDYyKiqKNJLq6ul6Rkri4OHhPHn/KwePx79+/j4yMpHlsKCAggNmgEx4eTnP1oKEr+mN06PToIENX1JgLBuZhaco5dOgQHx8fIXBQSHNycq5fv37Dhg3btm2zsbGxs7Pz8vKizc3z9OnT+fPnQ9fi5OQUEREZZ3fOT085urq6goKCW7ZsOTYqYmJiW7ZsmT9//rJlywQEBKSlpeXk5CBfD8s6eMaTcqKjo+FfxInVODk5FRQUUGOSmE05aDR6HJrC1dW1uLiYmvulMk9BQQG82hNCOQB0nj59SjNJsD7oBAUFvXr1in6PDgI6VHZvVsjGupSTkpJiaGiora0tIiIye/ZsiDmoTLCzs69fv37Lli3nz5+3trYGnh4/Pz9qBrZSUlLU1NQIQWfhwoXe3t7UnAv5hOhM/CKUs3//fsjEm5uby8rK8vPz84wKHx8f8PWsW7du1apVwsLC0qMiKysLAZCqqqqWlhZUzjgnEMqhknI6OjrS09MjYBIbG0tyVc/4+HiSq7mQWy8HoZycnBza/EyEn6KWlpbIyEhWHrqi06PDQNChczMKJBiZsOMxL826lANRQkpKypIlS6B5T1OnTuXh4VmwYAH1bh4Qx7Nhw4bt27ffuHHD1tbW09PTy8uLwthWSkrK6dOnIaICm1s9ffoUqhWzE78g5QA6uXr1KpGP59ixY4cOHdo4KuvXr1+yZAkEQPz8/EuXLgW+H4BAcnJyKgTCbABCKIdKyiFnxbq7u8vKyuAvFEI58Db5oYZ+ysHj8S0tLYhHh1x3JdS/ffuWTtDJzc1tb2+nfxCNsFZImqgFWJ1yMjIy7t27B9EGGxvbihUrFBQUdHV1dXR0Dh8+LCIismjRIsJdqKDM5BIcHBzr168XFBTcuXOntbW1jY2Nl5eXj48PYQgzuC6hO4eXl9fExOSHVoZRGX5xyiH08RD5Zq5fv66goHB8VCgA0Lp165YuXbp+/fpzBCIrKwshkJqaGv1hzgjlIJRDZFXHdMhSI1ZQzekEHX9//8rKyq9fv0IFMjbR3NxMv0enurqafrygE3RcXV0jIyNfv35Nf00Y28I/U2msTjlJSUn79++HeIWLi0tSUpIwRCY1NdXQ0FBLSwv6H//ChQvH6uYRFBTcvHnz+fPnUSiU54j4+fmlpKRISkpCPiROTk6wSCCjOIZyOQjlEMENNYcAgMTFxQECHTp0aBOBrF27loeHh9AJBEbBpEaFEIDU1dWNjY2puShCOQjl0PNJGBPlZGRkJCcnx5OXgoKCJlJCw86jAHRoHrqaFDE61dXVDInRocejg0KhHj58WFNTg4AOPe8RhXNZmnIyMzMfPny4bt06iHJmz55tbGxMbkuH9PR0Ly8vPT09HR2do0ePHjx4cPHixQsXLiR0yUBFkUxwcnIKCAhs2rRJUlIyPT393r17hJtbcXNzKykpUaYTRv2KUA41hDGmPIaGhuIEQshAIBirBaf9AAAgAElEQVRowYIFIAyIn59/9erVwsLCkA9IVlZWmUC0tbWhSyOUg1AOBQv7w5/GRDmJiYn+/v4UVgv08PAIICWFhYU/rAk8A52gMw7Tyxni0WER0EE8OvAeyBANS1MO2NIBwhE2NrYNGzZgsVgqSQKDwRgZGenr62tra4uJiW3cuBEQD+SegUomSgCPUU5ODhaLVVVVZWdnhzLw8vL6+vpSWQF6sv0ilLNz504CePi/pIyMjKCgIIURKwgvGJiAA9CfoyIoKLh06VJCAAKjYKMOIKnz588bGRnZ29t7jIi/v39cXFxsbCxh9dzd3Ul2hpiYGMJsUJrcnuSTeo4VOYPF7Lgce3t7H8bJkydPCgsLP8Kkt7eX3A1S1o+JcqKiou7fvw/1E+oTqamplKtB7lf6QWdSDF0xBHTQaDQ9m1EgHh1ynZBOPetSTmZmZlBQ0Pr16yHCmDlzprGxMcnpGCQ/IYTKjIwMyM1z7NgxERER4OYhObbFzc2tqqoKTo+KiiKMfWZnZ9+3bx9hyUxK//SUY2BgsGvXrv8ulyMoICDwxx9/rFy5ctu2bZqamtQbceblNDc3l5eXh3xAhw4dGuWfPwEAzZs3b9myZdBA2M6dOxUUFAwMDAAGSUtLy8rKampqenh4AAAi7DAI5eDxeGZTjp+fH2GbMyldV1dHmy2uq6uLgklCQgJJj/X4Uw4UjEzz0BWzY3TevXvHIh6dpqYmZOiKtreAqWexLuWkpKSoqKhAax9PnTpVUFCQekcOZVuWnJxsbGysr69/5coVENBDGMI8f/78oKAgUAIGg1FXVyfc3IqXl5fKGemU60D515+ecq5fv66oqAjRA0js27dv+vTp3Nzc8+fPX7duHeQvoZyQkZEhcgiRO2QsOUEAdPz48dFFf47t3bt30aJFfHx8M2fO5ODg4OTknD59+ty5c9evX79z505FRUXLUbG2tr527ZqsrOyFCxeUlZUJR8F+KV9OX1/fq1evCmGSkpLi4uIC59exziRnccohad+7urpKSkrgJmJCKAeATlRUFJ2gQ7+/hGRb4fH45ubmiIgImpf5AVtAFBcX9/T0kLsElXo6g5GRGB0q23lM2ViXcmJiYjZu3AiNLnFxcSkrKxPGHcNNAM0aEMKso6MjLi4uJiZ2+PBhwqISEhLOnDkD8RbY3CoyMpKpy+f89JQD/3qhUCg9Pb3NVIiAgMDokjr/9y/kRyHyDAkKCoJ55ktHRUBA4Cx1QiU5qampXb9+/fHjx1CHefr0qYGBgbq6+pEjR/bs2bNr167Nmzfv2rULBERDDDR79uyZM2fOnTt3+vTps2fPXrp0qaCgIFQ1JSUlu1G5e/fuo0ePQPk/5YjV0NBQV1dXK0yKi4s9PT3h/QShHHib/FBD84gV9Dlh8aGrd+/e0Qk6zs7OWVlZDAEdZOgK6jaskGBRysHhcHZ2dtOmTQPDVWBvTl9f33HYZgGHwz18+BD6aOXk5OBwuLt37y5evBhCLjB2xtS9yn9NyvmhsQYZjI2NT1AnYmJiVFDT5g0bNixdupSQnKBAHMrktGrVKhEREXV1dQsLi1Efzf/9q6+vDyHL2bNn5eXlrays7Ozsrly5snXr1k2bNq1YsYKPj4+Xl5eDQNjZ2adOncrOzs7FxcXHxzdv3rxZs2YtWLBAVFQUlK+rqyslJfUXgSgoKNA/GZ7KZieZjfq1j8dq796+fevv7w+/KEI58Db5oYZ+yvkVPDqMBR16fEsPHjxAZl2N1WKQy8+ilAMcOdAmVpycnMrKyiQHqglxhHnp+Pj4M2fOQPVhZ2cXEhIKDw9nnjsHoZwfGm4GZjA3N1dQUKAOnE4cPnyYkJx27Nhx7NgxBQUFxRH566+/du/evXTp0tmzZ0+fPp1zVLi5uflgAjiGa1SmTZvGzs7OycnJxcU1a9as6dOnQ0FpUGLq1Kmj2f/v34ULFwoLC58ZFQitlJSUKLePsbHxxYsX5eXllcYuCgoKGhoaoHyEcoDZoTkuh6RpZrURK6iSLS0t9A9dMW8dHdbx6NC/jzoCOlCvozPBipSTlZXl7e1NaOK5ubkDAgLGwZFDjpNwOJy9vf2iRYugj83s2bONjIyYB14I5VD+SLPOr/fu3cvKyoLew56enrS0NBQKdfz4cREREaERERUVJfC//JuUlJQEQ1qE2LR58+bdu3cTRSyJi4sfOnRo7dq106dPJ/D+/JsEMwF/G5X169dTbiJ5efk5c+bMnz9/yZIly5YtW7FixapVq/j5+eG+K7hm1apV69atO3PmjIyMjI6OTmRkJHT7DEwgvhy4OSIXl3Pz5s379++7khccDtdNSmgAjtbWVtYHHZpDiFAoFKM8OgB06Jx19erVK2QdHTqtCitSDhaLVVFR4eTkhIar1qxZw9ThIbg1gWtAdA5EORwcHHv37kWj0Uxy5yCUQ/kjzTq/ElEOeCHr6uoIa8iQmeTJyckoFOrgwYOAnIj+7t69eyuBiIuLE1YAnpaVleXh4dmyZQs/P//cuXPnzZsHgr5XrFgBsGbHjh0knVsiIiIrV65csmTJ2rVrFy9eLCAgICkp+eDBg/Dw8IyMjJcvX9JpkqDTEcqBWyFylOPk5IRGoxPJS3Z2dikpaW1thRqc+gSLe3RAMDKLgA6ds64Qjw713ZJcTpajnKysrMDAwA0bNkDDQ1xcXNeuXZtARw6wNTgczsHBYcGCBRDo8PDwGBkZMQm/EMqBf5hZUzNulJOTk8PA6GNZWVng79HT0ztx4sShQ4e2bNmyYcOGNWvWCAoKrl27duPGjadPn5aRkVFUVCTcCkNVVVVQUPDYsWO6uronTpw4duzYqVOnTpw4sW3bthMnTpw/fz4oKAiNRtNPPMymHAwGE844wWAwpCii9N27d+SMLwX9WEesaN7DvLGxkUI1KPxEP+gUFhbSsCIzhSoR/vTu3bvIyEh6ImMY5dF5+/YtGo2mpyYAdJg3Q42w3X7KNMtRTmpqKpEjZ+3atfD/00yIJiUlRV1dHaIcTk7Offv2odFoZlQGoRzWZBp4rSY75RDekZmZmby8/MmTJw8dOrR161Z+fv7FixcLCgpu2rTpwIEDp0+flpaWFhcXX7ly5eHDh8GJIC6ntrbWy8vr5s2bysrKJ0+e3L59OyHxpKen0+DjYTblhIWFEd47k9KJiYk0fDm+fPnS1NT0BiYZGRkkZ9ePP+Xg8Xg6h66cnJxwOBxTQSciIoJ+j053dzcNT5DwFIbE6CBDV4RNOqY0y1FOUlKSoKAg5MiZPn26srIyMzCCtjJjYmII3Tm8vLxGRkbM8DMhlMOkrw7Di/2ZKIeocXR1dU+OCCH0rFixgpubm5+fX1paWlFRUVtbOyIigtDoQMSjoqICiEdcXPz8+fOBgYFoNJp64mltbY2IiICHmgQGBmIwGPj7i0ajieoPDsmtl8PKlEPYnoTp169fe3t7w29zQigHgE50dDTNJOHo6Mhs0KHfo5OZmUn/9HIEdAi78TinWYtyMjMzb926BUXksLGxrV27FlqgD27Xxl+DxWI1NDQI3Tm7du3y8vJieE0QyoGbctbU/MSUQ9TgAHr27NnDy8u7YMECMLa1bt26U6dOBQQEhIWF4XC4goKCjx8/QlastrbW29v75s2bqqqqhMQD5afg4xkYGKirqyuCyfPnz3Nzc+FvHEI58Db5oYbmESvoEQOPjr29PVFvofJwfECHZg5DoVBOTk6MAh0612h+8OBBcXExzXuJQI/sV0uwFuWkpqYKCwtD6+/NmDFDRUXlhy/qOGcgcudwcnLu37+f4XVAKIdKKznh2UhSTlNTE6ETghypT+AOD1BczlgbEMTlCAsLg7EtcXFxSUlJCQmJ7du3y8jIXLx40dzc3N/fPzQ0NC0tjRB63rx54+3tfevWrcuXL586dWrHjh3Ax+Pv7x8WFpaWlkaBeAjtMrkdIRDKocEK0U85YB0d1vfo0AM6zs7OjAIdOmN0XFxccnJyENAhNAg/TLMQ5WRlZT169Iifnx8arpo7d66/vz8Nry5TT0lNTVVXV4cqOWXKlHnz5jHcnYNQzli/vhOVnyTl9PT0EPognj9/TrJPTl7KOXbsGGhwKC4HbIh5+/bty5cvA+g5ceLE0aNHCaGnqqoKmKQ3b974+PiQJB6ARxSIB6EceFefqBEr6APT2tpKP+h0dXVBBTI2QX8wMvDoMCRGh06PDgI6Y+0bLEQ5OBxOWVkZogc2NraNGzfStjcnyS8KA5XR0dGEW3hycHAICQkxsPycnByEcuCmnDU1JCmH6D3s6uoi2T1+Gsohut+6ujpfX9/bt2+rq6tfuHBhz54927dvFxcXl5OT8/X1DQkJSR0RAD21tbVQZgkJiZ07dwIfD5QTYiNwFYRy4C8COcrBYrFPnz4NIy8YDKYYJi9fvqQBOOgEHWYHI79//z4yMpJOj05GRgZDYnToBB1nZ+fs7GzEo0NkdsgdshDlYDCYNWvWQLsozJ49mxUmkJP8OGGxWG1tbcI9H+bMmePp6UkyM21KhHLgppw1NQjlFBQUkLMveDy+s7MTg8H4+vreuXNHXV39/PnzJ06ckJGRIYKeZ8+etbe3v3nzhhzxBAcHp6amVlVVIZQDfxHIUQ659XXgJRBqPD09iciSwvMl/IlO0HF0dExLS2PqrCs6QYdRMTrNzc10Dl05OzsjQ1eEfY9CmlUoJz09/fbt21BULxsb26ZNm1JTU2lDhHE4KzEx8ezZs1AIEcPdOQjlEJpdVk4jlEOZcoisT2dnJxaLBdCjoaEhKSm5Y8cOENBz7do1Hx8fiGYg4tHQ0AA+nuPHj58/f97FxeX27dtOTk5PnjwhfNMZFZdz7949f8ZJampqGymhzSUAtrwmDPkC6YcPH2KxWMLWAOlxphxo1hU9wchpaWk0eJKIuhm5w59p6Arx6JB7ykR6VqGchISENWvWQJTDzc2tqqrKmsNVwHykp6ffuXMHmg42ZcoUXl5eDw8PRi2FjFAOK5MNYd0QyhkT5RAZoNraWr8RuXv37sWLF/fs2QNGrGRlZX18fP7++2/siERFRfn5+d25c0dDQ+PkyZOCgoK7d+8WExMzNja+ceOGk5PT48ePGUU54xMLWF9fT9QU1Bx++fKltrYWNsRUXFhYmJeXxwqUwyjQYZ5Hh/6hK+DRaW1tpXOlvubmZoYMXdFGzNT0t58jD0tQTmZmpp+fH4Q4bGxsAgICfn5+zFiHBm4IaNaEh4cvX74cGmID7hxGLYWMUA4hSbBymhrK6e7ufkFKkpKSSN6ah4cHyW7JjLWPSVaAghJa+xjkYeBuncDNA9HMxYsXT548KSMjc/z4cTk5OQh6AgICDAwM9PX1ZWVlRUVFN2zYICQkJCYmpqamJiUlJS8vr6OjQ1j/sa6Xw8qUQ+6r09nZWVJSAu8z4+/LATVsbW2NiYlhWY/O+/fvnz59Sk+MjpOTU1hYWFVVFQI65Pok6+hZgnIwGIyysjJEOdOmTZOQkEhLS4O/tCylSUlJ0dDQALskgsrPmTPH3d2dIXCGUA7hh4qV09RQzrdv30iNWrQVFhaSvLVfk3KIzGJHRwcWi/X39797966WlhbY2VRGRkZOTk5LS+vGjRv379+3sbHR0NCwtbXV0tI6duzY0qVL16xZs3HjxpMnTwLi0dbWRiiHZB+joKQ5LofwCbI+6Dx58oRCI1DzU0BAAAI6hA+dNdMTTzmZmZn+/v7r1q2DKGfWrFnm5ubM2+6bgaiERqOJ3Dn79u1jyEAbQjnUWBlWyEMN5ZB7+Wtra0neAkI58BZ78+YNiJaxt7e/dOmSkJDQrl27jh07Jicn5+np+eTJEzs7O0FBwT///HPnzp3r1q1bunTp6tWrN27ceOHCBSsrK0dHx8ePHxO+++TWPkZ8OQyhHDB0xcoeneLiYpLbZZB8JckpAejQsLU7YQ9nyNBVVlYWMnRF2KpQeuIpJyUlRUlJCQrjnTp16saNG0lG0hFaqPFJp6Wl3bx508LC4vr161ZWVvfv33f8r9jY2OzduxcatJoyZcqcOXPMzc3v37/v4OAAbKuLi0tERMRY43UQyiFnVlhNT4FyPn36VFRUBL1s8ARCOfA2oUbT0dGRmpoaEBBgb2+vra196dKlU6dOHTlyBGDNiRMnhIWFBQUF161bt2bNmj/++ENQUHDXrl1iYmKGhoaWlpaAeBDKIfcqMYpy8Hh8W1sby4JOb29vVlYWQ0CnsrKSFUAnOzsbAR24AZl4yomJiVm/fj0EClxcXJcvX8bhcOPDMZSvEhsbu3TpUj4+vvnz5/Py8q4dlXXr1m0elfXr10+fPh1yRE2dOnX+/PkHDx4UEhKaP3/+gQMHBAUFz5w5o6+vb2BgYGJiAlAJoA+FqyOUQ84Es5qeAuWUlZXdunUL/tZBGoRyoKagJwGg58aNG0eOHNm5c6eAgMDSpUvBJqNbt27dtGnT1q1bt23btmLFipUrVwLiOXz4sLKy8tmzZ1VVVU1MTAg71a/gy7G3t/f29g4gI2FhYUVFRS0waW9vp+FbzuKgk52dzTqgExERQc/u5YzaR52el5EFz51gyklLS7O2tp42bRqghN9++42fnz8gIIAhoS0UGILKn6Kionh4eC5evHjp0iWpETl9+vT27duXL1++bkRWr149a9Ysbm5uiHKmTJkybdq0LVu27N69e+7cuUZGRuBESUnJ7du3r1q1SkRE5MCBAxs2bDhz5ozBiJiamt67d+/+/fsuLi6RkZGgbgjlEH54WDmNUA49c6wYaBNLSkpAP7l69erpERETE9u1a9fGjRsB2WzYsAEQz/bt2xctWjR37txly5Zt2rRp3759Z8+evXjxIiCeX4FyPD09U1JSqDSDULbi4uL29nYaHhn9oJOamsqk6eW9vb2sAzrv3r1DZl3R0MEonzLBlJOQkCAqKgoNV3FycqqqqrJORE5UVNTSpUsJ46AzMjJ8fX2vjYqhoaG0tPTJkycXLVoEgQ4bG9vChQtXrFjBy8urPyLGxsa3b99WUVE5dOjQiRMnDA0Nz40IYCYi9AGnmJmZBQUFJSUl4XC4t2/ffvv2jXDHAJDOycnx9PQkSQB37tyJiYmBzBOUSE1NdXNzg59y586d2NhYKBuUSE5OhmdGNIQtgFAOq1EO4dNBoVBWVlbXrl3T0tI6d+7c8ePH9+3bJyoqunXr1kUjsmDBAh4eHj4+vnXr1gHiuXz58r1797y9vePi4qAXIScnJyUlJZRxkpSU9JyUNDU1UTbZJH/t6emprq6Gm4iEhARHR0eiBkGhUONMOQyJ0ZkUoFNVVUWDu4vwmTY3NyMeHcIGoT89kZQDJpALCAhAuzrMmDEjKCiIRRw5OTk5cMohtHpQGoPBaGtrQ5QzderUefPm/fnnnzNnzjxz5syOHTtWrlwpIiIiKip64MCBrVu36hGIsrLyoUOHREVFxcTEpEcEnLJ69erjx49LSkoKCQlpamo6OztbWFigUKgHIxIcHPz8+fOGhobAwEC4CUOhUAjlkGwWZignL+UsXrwY+DwI/549e1ZWVvYSeTl58iQ/P//27dtBFnV1dScnp6SkpNLSUvrtET0lQL4coqdMOMcqMTHR2dn52rVr2trax48fFxAQWLZsGQhVnjdvHg8PDwcHx5IlS7Zt23bw4MHz589bWFjcu3fPy8srLi4uNDSUqGRmHCYnJ9PQCENDQ58/f/4Ak4KCAnd3d3g9x59yQIxObGwsPdPLJwXoMCRGhyGgQ/+KPjR0RRY8ZSIpB4vFKikpQQvrTZ06lZ+fn1HrzUAIQk+CSsrJycmJjo5evHgxBDq8vLzS0tLLli1LT0/39fU1HxXg+zl37hxAmT/++APQz/79+7dt26anp6evr6+trS0uLn7o0CFxcXEJCYmtW7devXpVU1NTTExs48aN0tLSp0+f3rt3r6ampoODg4KCwqlTpy6OiKKior6+PrBoCOXALTuTNPRQztu3b91JycOHD0n2Wwaul3Px4sVZs2bNJpCZM2dycXFxc3PPnTsX+DkI/y5ZsuT3UQHDPeBo1apVGzZs2Lp1q5SUFHxNXuCPTPqvlJWVMcMUVldXk2pL9+DgYJKNGRYWBo1tHTlyZPfu3QICAosWLVq8ePGcOXN4eHi4uLiWL1/+559/CgkJnT9/XkND4+LFiyoqKkRxPIztV7RRDrn2rKmp8fb2htdwQiiHUaDT2dlJ7n7p0bPa0BX9oBMaGvry5Us6V/Shp0lZ5NyJpJz4+HhBQUHIkcPFxXXjxo2xzkUiab8YpaSecrBYrI6ODkQ5nJycv//++9KlS8nVhIh+jIyMZGRkpKWlId+PqKiouLi4pKSkqKioq6urg4PD+fPnd+3aJS0tLSEhwc/Pv3XrVmVl5YULFy5YsABMJ1m+fPmOHTuOHz8uLi5+9uxZKysrBwcHEOsDtSoyYgW3+HRq6KGc3t7eUlJSVFREsucwkHJ0dXXFxMQOEsiBAwd2w2Tr1q0rVqyYO3cuHx/fklFZvHjxokWL5s+fz8XFNX36dCiuDur/IMHOzr58+fL9o7Jnz54tI3Lu3Dkqeai8vJx6Q9nZ2UmqLUsLCwtJNiZ8jhWAnrNnz0pLS4uLi+/atWvLli3Lli0DNzhz5szff/+dn59/7969Z86cYRLx/NyUw5BZV8z26Li6utJpEwICAhjo0TExMTE3N6etSkFBQdXV1b846EwY5WRkZFhbW3NxcQGDyMbGtm7dOpLGaAKV1FNOTk5OTEwMoTtnypQpS5YsGWvlAf1cv37dwsLCwcHBy8tLX19fT0/v8uXLa9euhXw5W7duFRERsba2XrFixaJFi5YuXcrPzz9v3ry5o7Jo0aK9e/eCMOfTp09fvXrVyMjIwcHh1q1bmpqaysrKRO8MEpdD1CDUH9JDOeQ+4eT2MGcg5VB5g9euXVNUVDxDSo4fP75nzx5hYWFZWVmCMVi9v/76C0xGFBQU3Ekgq1evJsIgwsM5c+bs2LEDEBEhD7nAJCgoKBEmFHiora2N5GsIpxzQJiD6OCEhwdnZ+fr16zo6OjIyMsLCwsuWLVuyZAkPD8+UKVNmzJgBXjpAPBcuXGCUj+enpxxGeXSYGoxMP+j4+/vTBjqVlZWgdz948MDY2FhKSkpMTExDQ4PKFxbKdu/ePbcRiYmJ+fDhAzlT8yvoJ4xykpOTCSNypk+ffvnyZZLGaAKVY6Kc5ORkKSkpyDVFG+VAN0s0x6qnpwdE5Dx48MDb2xuscK+trX3o0KF58+ZB7pxFixYtHJHFixevXLly9erVy5cvX7Zs2eLFi+fNmycqKnrw4MFNmzb98ccfx0bk5MmTF0ZESUnpzp070NWhBBJ9DFkNcomfm3LI3TWkh+/w0NDQAPVVwoSTkxOIrCf6q6KicuDAgbVr127YsAFA0ebNmwEnEQb1Q0g0d+5c4BMi/CstLe38XwkKCkoYkb///tthVDw9PaGYYsqUA70CIBEcHKylpXXmzJmjR4/u2bNHQECAj4+Pl5cXEM/ChQtXrVq1d+/e06dP00k8vwLl0A869+/fT01NZfGhK39//4qKCsrByJWVlaCXPnjwAPRfWVnZo0ePysjICAkJ7d+/X1lZWVNT09raGj4aGxQUFBMTk0xG8vPzy0aFSQ01WQhpwignKSlpzZo1S5YsASvl8PDwPHr0iMiyTPjhmCgnIyPj/v370HwxxlIOyf7U29sbGBgI/Tf71KlTQkJCe0Zkx44dS5YsWb16tYiIyP79+//44w9eXt41a9asXr164cKFbGxsc+fO5eXl5ebmXrFihaCgoICAwKZNm66OiKGhob29Pfgu0LN4A/Qh/LkTCOXQOceqq6srPT39ISlxdnYGqy0Q/ZWRkeEnJYRUNHfuXLCm1YYNG9aMyrZt2/766y/QzxUUFADrnzhx4syZM3/99df5Ebl69aqDgwMhDwFDRBh9fOXKFYh4tm7d+vvvv8+bN4+bm3vGjBkLFy5cuXLl3r17T5w4ISUlNVYfz8RSTmJiYjB5iYiISE1NfQaTsrKyjo4OkjaKgrKtrY2wScdqJRwdHZkKOjk5OQzx6BCCTlVVFWCaoKAgpxGRlZU9cuQIIdMYGBg4OjqCtyEtLa2jo+Pdu3ejuPKffxsaGvr7+ym0MPITaIEJoxwcDnfjxg0zMzMpKanVq1cfPXp0wpkGXoExUQ6Yk7Vs2TJohUMaRqygOhD5ckj2197e3uDgYJLWwcrKSk9Pz2JEjI2NZUfl1KlTC0ZEUFBwzZo106dP5+bmXrhw4bx586ZMmcLBwQFCL8GyIvv37xcUFCTy+ly4cAE+4EWyDr+IEqEcOimHZN+mrKytrX1ESpycnAxhoqGhISIishwmixcvnjVrFjs7OxsbG4i5Bn7Q5cuXr1mzZvv27bKyslcIRF5eHkwIkBiRc+fOAT+onJwcmE9w9OhRISEhAD3gvxCzZ89euXKlkJAQACkFBYUfRi5PLOXQtrUTzWsll5eXk5wCRqXpcHR0xGKxTHJU9Pb2MgR0bt26de/ePbBmPsQ0e/fuBX4aQ0NDR0dH0JfT0tI+ffpEuecjv9LQAhNGOdDnPDU11dbWlgUdOdTPJIfuJT4+fu/evdCgFbMpp7+/Pzk5Ge7JdHd39/HxSUxMhCoGJeLj4y9dugTcP8D3IzQikO9n//79q1evnjlzJi8v7/Lly8EwwW+//TZjxgzwmVi2bNnKlSuPjsiJEyfOnz8PbP0viz4I5Yw/5YzJ0gGfASB+wr/a2tpgLwjwCkB/jxw5cvLkyT///JOQi/j4+ECoNTc3N9eI8PDwACoCHAPeiKNHj4LRN7AMDycnJwcHx9SpUzk4OLi5uZcvXw6IR0JC4sKFCySJh7GU09TUFB4eDjcRjx8/JrmLzjhTTl9fX35+PskVvKgHHaZ6dB4+fCgjI3P27Fk9PT0qq0SU7fTp08uWLdu4cRYudrsAACAASURBVKO8vDzCNGN6cxmVeeIpB/oAs2BirL6ccaac4eHh9+/fl5OS0tLSZ8+ewZuU3BwrS0tLfX19yPcjNyqnTp2aN28emF+zcOFCLi4uaOb/b7/9Bgw3CP35448/CNEHOP9/BfRBKIf1KQf+IuTk5FCIy0lMTHR1dSVEIkNDw7/++ktUVFRYWBjiIcLE+vXr582bx8vLO2PGDE5OzhkzZoBJ+jNnzuTk5IT8u1OmTGFjY+Pi4lq8eLGQkJCioiLRR5GxlNPf319fXw+3EEVFRXl5efBmGWfKwePxAHTo8ejcv3+f4R6d9vb23NzcwMBAaWnp1atX79u3T0dHh/BJ3bt3D86OkCYoKCg2NhYzIkFBQQ4ODmg0uqWlhVGfbaScMbUAQjnwN/1fzZgoByxyKCQkNG6+HApPenBwsKqq6t87GU2Roxxyc6yio6PPjsqpU6f2jsq2bdvmz58PZhYvXLgQQp8pU6aAWfS///473OvzU6IPMyinv7+/gZRkZ2cTmlpWSMOjjyl0ywn5qbe3l1RbNmAwGJINSG6HB8pBJFeuXDl79qykpOTRo0cP/VeEhYVH35t//924cSMPD4+QkBBRHRhLOeQavKOjo7i4eNQq/Pvv+FMOq4FOe3t7Tk6OnZ3d+fPnz549q6KiYm9vHxkZCZAF+vvs2TM4O0IaJGKGXMebED1COf++4fDUmCgnIyPD39//2rVrFy5ckJOTO3ny5LJly+BlUqmhJi6HQo9hFOWQm2NlZmY2Cj9nCeln+/btfHx8S0eEj48PmhfDwcGxaNEi4PVZuXLlkSNHjh49Cga8APqoqKgQmfvJcsgMyiH3ZF+/fs1qzcL6lEOuMYuLi0k2Jm2UQ7IoCko9PT0wbkWU5xekHAA6z549m1iPzsuXLwMCAgwNDeXk5M6cOWNpaZmWlkbbvl3kuhyin5AWQCiHEnWMiXKICgoODl6+fDmRkvpDFqccItMMHYJwcrBBqYSExL5RgegHWnEEBDsvXLhw0aJFwOtzZETExcVHh8vkJsWAF0I5LD5iRc6wTizlQK8MUeLXpJwJBB3gvPH395eVlRUUFJSSknJ2dkb4htxbMxn1COVQAg+Ecsj5cohM8w8PTU1NId8PnH7Acj5gvTUODg4Q1Alm5IqJiR05cuT48ePnzp1jzQEvhHIQyvlh/6c+wy9LOeMPOu3t7dnZ2ba2tnJycvv37wd8U11dPRk/5EidKbQAQjkI5fyfBSYXl8MoyiFn5U1NTYHjR0pKioh+5o0KDw8PGxvbnDlzoCktwOtz9OhRCQmJc+fOyclNpNcHoRyEcsh1bxr0vzLl4PH4L1++jMPQVVVVVUxMDOAbKSkpKyurv//+G+EbCqAwqX9CKAehnImkHHKfASL6Gd0Kaf/27dvnj8icOXOmTZs2ffr0OXPmLFiwYOXKlWIjAsJ9Tp06de7cufEZ8EIoh1GU09PT09raOm72FBmxgtu+CYk+JnriDAEdDAZDch2dqqoqPz8/WVnZw4cPa2pqOjs743A4JPiG6BH8ZIcI5cDf9H81yIgVs3055CiHnN7ExOTciJw+fVpUVJSIfubMmTN9+vRZs2ZNnz6dl5d35cqVh0fkyJEjJ0bk1KlTly5dIlc4bXqEchhFORUVFdHR0eNmYX9lyunu7n716lURTMjNrqf8atC8KiC5Z93X10e/R4cQdD5+/JiVleXr63vlypUDBw6cO3fOxcWFxZ03paWljY2N5JoI0VPfAgjl/Ms08FRUVBQvL6+qqqrG2EVWVpaHh2fs5/3/M7S0tIyNjW/fvn2HJrGzs9PT04NfXVVVVUJCAnz7Cf8eO3ZMXl4enl9ZWZkwG8umhYSEFixYMHfu3GnTpnFwcEBzu6BVDaeNyPTp05ctW3b48GEpKSnKhpv6XxHKYRTlZGVlubu7U2+86Mz5K1PO0NBQd3d3O0xo+18NwykHGrq6e/eusrLylStXqH8foZz379/HYDDZ2dnR0dE2NjaysrJSUlI3btwIDg5mcb4BHdvPzw+DwdDZyZHT8Xg8QjlwtvlXk5KSoqCgcGkiREFBQUtLy5zRYmhoKCkpeQAmoqKi0tLS8BuVlZWF5f0ZFBISEpA1pDMxnpTz6dOnNBaT3Nzc5uZmhhjTcaac9+/fk2zLjIyMf00AQYryejl09iLodJrjcjo6OnJzc6Pok5s3b4LNYKSlpSUkJM6cOUO0Gh5UT8IEQygHxAKD6vv6+t6+ffv69esSEhIrV66k+W01NTU9efLkoUOHtLS0XF1d09PT6dxC4cOHDyQHwhjS/4kKQSiHqEFoPkQoh8CMsVKSzpnk5DpET0/P33//TWihQHqioo/hNZl0mvGkHHKP9efQjzPlkGu01tZWkpYAUM6VK1ckJSXF/yvHjh1jlJtTSUnpFk1iYGAgJia2iWo5ePCgjIzM8ePHoZUKt2/fvmrVKrDPHdh8dNGiRefOnfvhK0kD5VRXV0NAA25XT0/v0KFDoqKiMjIywsLCBw4cUFdXNzc319PTu3Hjhsd/xcHB4Ye1QqFQmpqax44dU1JSys3NJfe4x6THYDCM8lz+8LoI5fywiajMgFAOSYM28UqEcqixYqyQB6EcKm3ND7NNCso5e/Ys2LqB8C83Nzc7OzsXFxcIjaf8d/ny5du2bSPnEZWTkyPcWYJRaRkZmfWjsmDBgilTpvDx8W3cuPH333/n4eFZtWrV7t27t27dumLFCgEBAahux48f19LS+uFbRplyqqurn46Kr6/vzRGRk5MDQHPw4EFhYWENDQ1wp66urqEjkp6eDoKC+/r6GhoaKv8rBQUFOKrl+fPndLpwoK778OHDhIQE6JCpCYRyGNW8COVMPNCQrAFCOT+0rSySAaEcRhmjSUE5YE1zsJYB4V8BAYHVq1dLUyHy8vJGRkbkei/NI1bgKbx+/XqUKJ76+fnZjcrFixeB80ZGRkZUVHT9+vVgeV/LEXFxcQFsYW1tTQ3WEFUeopxPnz5lZWWBCvj4+ICLy8rKAqCRkZE5ePDguXPnwEXd3NwgoPn48SOjehFTy0Eoh6nNy6TCEcohyRgTr6SecgYHB+vq6v73v/9R00WQESsiA03/IUI51HQ8avJMFsrZsWMHvNucOHFi586dcP1YNdRQTkdHR05ODjU0c+DAATU1NSKUAWxRVlYGfyg0bJRmamqqoqJy9epVOzs7XV3dQ4cOiYiIAKCRkpICl4Y8NKGhoZWVlUTXbW9vZ5Svhahkhh8ilMPwJh2HAhHKmXigIVkD6inn06dPHh4e//zzDzXdBaGcsX51fpgfoRxqOh41eRDKQaFQhJTT0dGRnZ0dOSq+vr62I6Krq3v48GFhYWGZEREVFQVRLFYj4urqGjYqaWlpHz58oKbxQR4aKEdHR0dISGj37t0aGhqgAu7u7uD6VVVV1Fw6PT09KyuLmpwTngehnAl/BDRUAKEckowx8UrqKef9+/d6enoI5fwQR5iUAaEcGuwOyVN+WcoB7pC/RsTCwgKiGT09PTExMQo0gx6VtLS0trY2kq06JuXbt2/Txyjx8fGPHz9OSkqiedQpLCwsMjJyTPWcqMwI5UxUy9NzXYRyJh5oSNYAoRwmQQnDi0Uohx4DRHjuT085V69eBSgD/p46dUpkRHbv3r1q1arff/9dUFDwwIEDhw4dOn369I1RcXNzCx8VHA7HEJohbPYJTyOUQ/IRINHHJJuFBiVCOSQZY+KVTKKcb9++lZeXZ8AkMzMzOzsbftu0rRLGcJJg5QIRyqHB7pA8hUUop6+vr4mUYDAYFAp18uTJH8bl6OrqgrEkGRkZCGVERET+/PNPPj4+QDOCgoIrV64UEBAAoCMiIiIuLi4jI3P9+vXw8PDS0lKSTURSWVNTU15eTvKnSaFEKIfkY4qPj3/x4gXJnxDlmFoAoRz4l50lNEyiHHKd49u3b1VVVfA7Ryjnh4CFUA65TjVWPYtQDrlqv3jxAlDOkiVLIDSBEvz8/EuXLgWHhDSzcuVKPj4+OM0ADNLU1CTqYIRxOeRqQqSPi4t78uQJkXISHSKUQ/JhtbS0dHV1kfwJUY6pBRDKgX/ZWUKDUA6R9WfZQ4RyxmRxKGSeFJSjrq4OkQ1hYvfu3Rs2bNixYwekBL4ZcjRDrj8jlEOhh0z4T+MZlzPhN/vTVAChHJZgGnglEMoh9xlgNT1COYyyhpOCcsh1PzMzMx0dHQoL4ZA7kUiPUA6juhMzyqGTcoaGhr5+/To8PMyMuiFlkmsBhHLggMESGoRyiKw/yx4ilEPOuIxVP6kph1H9E6GcsXab8cxPM+XU1NQEBARYWlqamprevHkzOTmZ4fthtbe3p6SkvHnzZjwbhM5rffjw4cuXL3g8/sOHD4mJiUzagx2hHJZgGnglEMph1GeD2eUglEOnpYNORyiHaL0cqGUoJ2iLy8nOzgZL9kF/w8PDSX56u7q6MjIy0tLSMjIySkpKKFeGhl9piMvp7Oz8/PlzZ2dnWlpaRUUFDRel7RTaKOfVq1fW1tZqamoWFhZ2dnZGRkaXLl0KCwsDH3jaagI/q7W1NTQ0dHLFobu7uz979gyPx7979+7JkyevXr2C3xf9GoRy4IDBEhqEcphNJ4wqH6Ec+s0QKAGhnPGknDt37mzatMnAwGB0Ewi7qKgokuGuDQ0NNjY2VlZWNjY2Dx48YNTjhsqhgXLCwsJiY2M/fPjw9OnTcds+E4/H00A5Q0NDDg4OmpqamZmZAGva2tpAYzY2Nvb395eWlqLR6KioqPr6+uHh4S9fvrx+/Rrs4YXH46urq9+9e4fH49vb27OysmJjY/Py8sBjAru4A01nZ2d3d3d+fn5TUxMej+/v7y8uLkaj0dHR0Y2NjaDYmpqa2tra3Nzc2NjY8vLy/v5+6BHg8fgvX74UFxdHRUXhcDiwFPXQ0FBZWVlUVFRKSsq7d++Gh4f7+vpevXpVW1ubk5MTGxtbUVHR39//5cuXV69e1dXVESqHhoaqqqoiIiKSkpLev38PBun6+vpevHjx9OnTjIyMzs7Ourq6I0eOXL9+va6u7sOHDzk5OS0tLUNDQ8XFxU+fPsVgMC0tLeCi1dXVdXV14ParqqoGBgaA+yc9PT02NragoKCnp4fwXojSCOWwBNPAK4FQDqMohNnlIJRDZFNoPkQoZ5wpR1ZWtra2lvB5DQwM1NXVvX//Hijr6+tra2spUM7AwEBlZWVMTExKSgp01tDQUE1NTUxMTEJCQl1dXW9vb11dXU1NTWFhYUxMzIsXL3p7ewcGBmpra4HS2NjY1dW1t7cXj8d///69trY2Ojo6Nja2vr7++/fveDx+YGCgoqIiJiYGi8W2tra+e/dOSUlJWVm5oKAgJycHjNEMDQ29fPkyJiYmMTGxoaHh+/fvAwMDb968ef36dUFBQUxMTHFxcV9fH+HN0pCmgXKamprU1NQ8PDy+ffsGXfH169fPnj1raWkJDw83MTGxsrIyMDC4c+dOTU3N27dvPTw8cnJyQGYHB4fo6OjPnz/7+PiYmJigUChtbW00Gt3U1OTt7U2oqaiocHNzy8/PHxwcDAkJAcXq6+vb29u/efOmsbHxzp07KBTKw8PD0tLS0NCwsLAQqs/Q0FBwcLCpqamVlZWenp6fn9/bt2+jo6OtrKzs7OyuXbvm6OhYV1fX0NBw8+ZNW1tbDw8PCwsLQ0PD4uJiQiUouaSkJDEx0dzc3MLCwsTE5O7du2/evBkcHHz06BG4hK6ubkBAQGJiIlizu6ioqKqqytHRsaCgICIiwtLS0s7OzszMzNnZubGxsa6uzsbGxs7Ozt3d/fr164aGhhUVFZ2dnY6OjmZmZigUSkNDIy4ujoJjjGGU09TUVFJSUowIg1qgrKystbWVmt2pxrT2MdStiRLDw8Pt7e3NMCkvL2c2JUz28hHKIepLNB+yOOW0trZmM1/q6+vH2oC0jVjduXMHTjmtra1BQUFxcXGgDg8fPvTx8SFHOd+/f09KSjIxMbG0tDQyMnJ0dKytrf3+/TsOhwO+CktLy9u3bycmJrq7u5ubm3t6eqJQKAMDAywW+/79ezc3N3Nzcw8PjwsXLkhISKSmpuLx+NzcXEtLy2sjYmtrW1RUNDQ0FBcXB77ZhoaGLi4uiYmJMjIyZ8+eDQ8Pd3FxwWKxQ0NDGAwGXNTCwuLu3bsVFRXv3r1zdna2sLDw8PCwtrY2MDDIyMgYa9sS5aeBcjIyMhQVFaHFnfPz8wNH5OnTpxUVFU5OTi4uLuXl5U+fPlVXV09MTHz16pWJiQn0CDQ1NX18fIqKis6fP29vb19SUuLj4xMWFpacnCwnJ+fg4FBSUuLt7Y1Go7Ozs42MjBITEz9//uzg4ODu7l5RUREREXH58mUsFvvy5UspKSkDA4MXI3Lu3Lm///4burvKykoNDQ0HB4fi4uLAwMBr166FhIRoaWndu3evoqICi8X+9ddfwcHBxcXFkpKSxsbGRUVFz58/P336NBqNrqyslJSUNDExKS4ufv78uYSEhJOTk46Ojq2tbXFxcUZGhry8fEhISEFBgaqqqrOzc0lJiZ+f37Vr1zIzM0+fPu3u7v758+fS0tIrV654e3tfvnzZxcWlsrIyJSVFSkoqIiLixYsX4uLi5ubmJSUlBQUF4uLiwH0lKSnp7e1dUlLi4uICQBC6HaIEYygHuMg6EGFcC3R2dn79+pXoaZE8ZAjlkCwZeAUnO4Uwu/4I5ZDrPGPVszjljPV2xi0/zZQjKCiopaV1fUS8vb3B//htbW0DAwNB5W/dumVhYUGOcurr6wGOFBYWotFoc3NzLBb79u1bCwuLa9eulZSUZGdna2ho6OjoKI5Ifn5+SUmJurq6vb19fX395cuXlZSU8vPzsVislJSUg4PDhw8fbGxsDA0Nnz17lpeXp6ur6+TkVFJSYmxsbGlp+eLFi5CQkGvXrsXFxV29etXExOT58+fm5uahoaGNjY3ASVBaWpqZmamqqurm5lZRUaGoqHj58uVnz54VFxcrKyu7ubnR+VBooJzU1FRlZeXo6Ghw6eTkZFtbWyMjI2Vl5bi4uOzs7Ojo6LCwMAsLizNnzsTGxpKknJqaGgMDAx0dnUePHsXExFRXV5eXl+vp6V25cgVoXr16VVpaCiinv78/MzMzJiYmLCzM3Nz8zJkzycnJL1++PH78uI+PDxg8UlZWDgoKglojOjpaX18/Ly8Pj8d/+vSpsLAwICDg6tWrubm5eDx+aGjIwMDA0dExKytLTEwsMDAQFCIvL//kyZPKysrDhw8/ePAAKC9evHjp0iXAPYDnjh07dvfuXS8vLz09PeBAam9vf/78+cePH+Xk5MLCwvB4fEVFxZUrV/T19a9evfr8+XM8Hj84OKitre3u7p6ZmSksLBwcHAzKP3fuXGRkZGVlpbq6uqGh4ZMnT2JjY2tra4eGhqDbIUowjHKIykUOx60FEMphNsdQLh+hHEZ1dYRyaGtJmiln8+bNxsbGt0fk0aNH9fX1jY2N1FNOZmamkZFRbGwsHo8H/x1vaGjIzc01MjKKiooCw09OTk6XLl06ceKEpaUlGH6ysrJCoVD19fWXLl2ysrICSktLS1tb27y8vEuXLqmpqYGvo5ycnIGBwYMHDwwNDZOSkvB4fFdXV0lJydu3b83NzW/fvl1bW2tpaRkaGpqRkWFoaJiQkAA+ybdv37ayssrOzpaVlb158ya4hKmpqYODA20tDJ1FA+W8fv1aVVXVy8sL/K+1o6OjsbExMjJSSUkpICDAw8Pjxo0b7u7ulpaW0tLSRJQzNDR0+fJlHx+foaGhZ8+eubm52dra6unpeXl51dfX5+fnE2owGAygnI8fP7q6ulpbW7u7u1tYWJw7dw6iHIhfiSgnPDzczMysqKgI4EVLS0tAQACkwePxdnZ29+/fT01NFRMTe/ToEWgQQsqBPEMXL16UkJCQl5e/e/duyIh4e3vn5OT4+/ubmZmVlZWBS7x//76vr4+IctTV1c3MzKAAaktLSxcXl9TUVGFh4fDwcHBRQDlDQ0OZmZnOzs62trZXr14NCAigsCstQjlQB56sCYRyKFMIs39FKIdRbw5CObS1JM2UAx+xIqSc79+/o1AoCr6ctLQ0MzMzLBYL2OLjx4+dnZ2pqamQEo/HBwYGqqioiImJoVAocHeElGNjYwOUgHIwGIyKigoAl9DQUH9//5SUFDQabWZmlp6eDrDpw4cPXV1dRJSTnJxsZmYGDUh5eXlZW1unpqbKysra29uDS0wU5QwMDNy8eVNFRSU/Px/wFhhROnr0qLGxsaqqqo+PT0tLS1ZWlra2NqAcbW3tiIgIPB7/8uXLkydP+vj4VFVVxcXFvXz5sq6u7s6dO0pKSl5eXpDm9u3bioqKvr6+gHIyMjKUlZX9/f1bW1vT09M1NTV/SDmJiYkqKiqJiYnDw8M1NTWenp7Ozs6amppJSUnfv3/v6urS1NR0d3fPy8ujhnK0RwSDwQwPDw8ODoaHhxcXF0dHRyspKaWmpg4PD1dXV3t4eFRUVBBRzo0bN9TU1NLS0oaHhzs7O1VUVPz8/HJycuCUU1JSEhsbC+KurKyslJWVKcz+QyiHNsPCQmchlMNsjqFcPkI5jHoZysvLY2JiGFXar1MOYynn+vXrHh4eeDy+vr5eSUmJAuXk5eVpa2sHBQUNDQ01NTU9ePAgLS2tuLjYyMjowYMHQ0NDvb29dnZ2ioqKkpKS1FBOWVmZqanpkydPhkYEg8Gkp6fjcDhNTc0nT558//69oaEhMDAwKyuLiHIKCwv19fWDg4O/f//e3d0NmOnZs2esQDl4PL6srMzS0lJNTc3e3t7b2xuFQmlqap49e9bGxkZLS+vatWsPHz5EoVAHDx4EgbrGxsaampqBgYH29vZbtmzx8fEpKSnR1NTU09Pz8fFRU1MzMjJ68uSJhoYGoSYiIgJQTnFxsbq6+vXr1x88eGBtbS0sLOzo6Jibm3v8+HFyvpympqbr16/r6Oi4ubldvXrV1NQ0MzPT2tr6ypUrbm5ulpaWioqKOByuvLycGsrx9PS8efOmvr6+u7v7rVu3Ll++nJGRUV9fb2JicvXqVXd3dx0dnWvXrtXU1CgoKJiampaXlz9//vzKlSvh4eHm5ua6urog0FhBQSE7O7u0tBROOQUFBeBcX19fBQUFMFGL3CuPUA65lpk0eoRyKFMIs39FKIdRr0pPT09rayujSvt1ymEg5XR3d9vb21+6dMnPz8/JyenAgQMUKKetre3+/fuqqqpgtouurm5eXt7nz589PDyA0sbGRllZ+e7duxcvXqSGcvr6+vz8/LS0tJycnOzt7TU1NSMiIpqbm+/evaumpubk5GRsbKyvr19QUHDjxg1FRcXw8HAjI6PQ0NCuri4nJyc1NTVnZ2cUCqWkpBQVFfXq1SsWoZzv378DB8mNGzdu3rzp4uKCw+HS0tLKy8vj4+MdHBxcXV2Dg4Pv3r376NGjtra2Z8+eOTg43Lt3D41GBwQElJaWDgwMxMbGolAoGxub27dvZ2ZmdnR0xMTEQJqsrKzm5mYcDldfX9/f3x8TE+Pg4ODm5hYSEnLnzp0nT568fPkyPDwcGgxKTEwkWmeooqLC3d0dlJ+bmwvmtbm5udnY2KBQqLi4uM7Ozk+fPoWFhVVVVYGXKz4+vqqqqr29PTQ09OXLl0AJPEzV1dV+fn43b95EoVDx8fGfP38GtOfq6gou8ezZs69fv4aHh9+/fz83N7exsRGLxTY3N5eVlYE8KBQqISHh8+fP7e3twcHBNTU1oPzo6OiampovX76g0Whra2tQWkFBAeEUNqJ3H6EcogaZfIcI5TCbYyiXj1DO5Htnfq4a00Y5BQUFsbGx8AVyKioqnJ2dQVDFo0ePsrOzu7u78/LycnJy8vLyKisrCRuvrq7O398fhULdvn07OTkZTNUGSpsRCQ0NrampSUhIAHGseDwelPP58+f4+HgQ7gop8Xh8Y2Pj48ePb926ZWNjg0ajQbDFmzdvfH19wfcMi8X29fWlpaXZ29tHRUUlJSVVV1fj8fjXr1+DPDY2NuHh4R8/fuzq6gKLqYAKZ2RkgLBWwvqPNU1DXA50iYGBgdbW1vfv3xMuVPP9+/ePHz9++PBhcHCwp6eno6NjcHAQj8d3dHS8f/8eLAwDShgaGvr48WNjY2NXVxeIw4U0nZ2dQANdCxT78ePHwcHB7u5uqFgoA8lEd3f3u3fvoPLxeHx3d3dzczMoh+QpFJT9/f0tLS1E537+/Lm5ufnz58+gwl++fGlpafn8+fM///wDFQXytLe3UwgoBoOkbW1tjY2NRKdD5UAJhHKgppisCYRyKFMIs39FKGeyvjk/S71poxwKdw++dmABGwrZwE9fvnx59+7dp0+fQNAJofLDhw9UThQlvMrXr1/b2tqIzu3r63v37l1HRwe4ysDAQFtbG3QITgd5iE4kLJn+ND2UQ//VkRJoawGEcmhrNxY6i6mU09/fn4cIxRYoLCwEi5PC+0RZWdmtW7fgekSDtAADW4DhlMPAuv1kRSGUMxkfKEI5k/Gp/afOfX19OByOmvUD/3MacsD8FkAoh/ltjFwBj1DOuHUCLBY7nhtKjNt9/dwXQijn536+yN1NZAsglDORrf/LXBuhnHF71O3t7fBIpnG7OnIh2loAoRza2g05a7K2wD///NPX10d5dzdG3Vt9fX1ISAijSkPKYakW+P79e09PD4Xdc8attnV1dSACd9yuiFwIaYFJ1AII5YzHwxoeHm5ra0MGlcajrclf49u3b0VFRXZ2dlZWVjdu3HB0dISmRBKdNDAw8Pz58/j4eCL9WA9BYOYPz/ry5Ut+fn54eHh+fj5Y4/WHp0xghv7+/o6OjgmswIRf+suXL2lpaba2tjdGxN/fv6GhgWStPn/+jMPhoOlFJPMwUNnV1ZWamvrs2TMowcDCkaKQFpikgQzZ6AAAHp5JREFULYBQDnMfXH9/f0REhK6uroKCgpmZWXBwMDP+8zc4OFhaWhoZGUk0nxDc27dv35qamsC62qWlpWg0mrn3zKqlv379+vLly4aGhkFBQX5+frq6uiYmJt3d3fD6dnZ2BgYGmpiYwH9ihqajo8PX11dXVzc7O5uVl8UDWzlqa2urqKjcuHEjOTkZzHplYJv09PRkZWXhcDhyZfb09LS1tYFsYD1ccjmZp8/IyFBTU7O0tHz48KGbm5uGhoazszPJ9xqs9QIW2WNefaCSGxsbb9265evr29nZmZSUBO1rDWVg8URSUpLBfyU0NLSzs5Oo2p8+fUpOTi4uLv706VNSUhKFRW+JTmTqIZi7/vHjx4SEBKKlaJh6XaTwH7YAQjk/bCLaM/T394eEhPz111/Ac2Btba2iovLgwQOGO3W+fPkSFhampaVFcoGBhoYGU1PTf/75Bzgznjx5QvstTdozh4aGEhISdu3aBVavGhwczM7O1tHRef36dXNzM+TU6ejoyM/PB5SjqamZk5MTHBycm5sLlpzq7+8vLi5Go9Hx8fF1dXVgzYb6+vqIiIigoCCQDawD++LFi6KiosjIyLy8vNbW1ri4uEePHpWWloJfnz9/np2dHRwcnJ+f/+3bN0A5hoaGL1++fPbs2eDgYFNTU0lJSUVFBRqNxmKxnz59ApBaW1sbExODxWKrqqroX/xjTA+ztbXVzc1NUVHR1tb23r17pqam2traiYmJYyrkh5lbW1tdXFygVfnh+dPT093c3Lq7u3E4HNhbAJ6HqZqvX786OTnJyso2Njbi8fiBgYHQ0FA7O7uGhoa6ujrIqdPY2FhZWQkoB4VCpaamhoWFlZaWAi78/Plzbm4ueLjv37/H4/Ffv36tqKgICQl58uRJWVnZ4ODg169fa2trS0pKcnNznz59WlZWVldXFxERERoa+ubNm4GBgdra2sLCQiwWGxYWVl5ePjQ0BFFOX19fUVHRixcv3rx5U1lZWVBQgEajc3NzAdMPDAyUl5dHRUXl5uYWFRW9evWKqS1GfeFWVla7du2ysrJyGhUMBgP/f0hdXZ2lpWVISAi0jxX1l2BezsDAwISEhA8fPkRHR5eWljLvQkjJY20BhHLG2mLU5v/nn39qa2tFRESCgoJ6e3v/97//dXZ2Pn78WFVVtb+//3//+x9YvPLvv//Oy8vr7+8Ho1qFhYVv3rxBo9FxcXEtLS1fvnwpKioCC8IODw+/f/8+MzPz+/fv7e3tMTEx4NyvX79ClPP169eWlhboHevt7U1OTn748CE/Pz8Wi21vb6+rqwP/Uf7nn38+fvwYExMDvrVgdaYXL168evUqPDw8ISGhra0Nj8d/+/atrKwMjUbHxsbW1NQwnM+obU26833//h2LxW7dujUoKOj169ffvn3r6ekpKip6+/ZtXFyck5MTuEJRUZGmpmZnZ6enp6ewsDAKhbKzs7ty5UpwcPC3b98yMjLU1dVtbW1NTU3NzMzevn1bXl6uq6trYWFhZWUF9gvs6ekJDQ1VUFBwcnKytbW9cOHCtWvXbt26paure+XKlZKSkpCQkPPnz1tbW9va2urq6oaGhgLK0dbWjoqK8vT07O7uDgsL09TU9PDwuHfvHljEfXh4uKioSE9Pz8rK6u7du1paWgYGBnS3CrUFDA8PJyYmSktLx8XF9ff3//PPP2/fvnV0dEShUIODg8PDww0NDZGRkWg0Gnyhv3371tjYWFZWBnyHOByupqamrKwMDHV9+/atpqampKQEOhGsyjo4OAhRzrdv3xoaGmpra0EV3717V1pa+vHjR0tLy8OHD2dkZOTn5xcXF+Px+OHhYQCaERERFRUVg4OD3759q6+vLy8vLyoqQqPRGRkZwB/Q3d2dn5+PRqNTUlKam5upvfn/5hscHPT09Dx69Gh4eHhjY+PQ0FBra2tlZWVtbe2jR4/ABst4PB6NRjs4ODQ3N1taWp48edLOzs7S0tLQ0BCDwfT19YWFhV25cgV0AEdHx5aWFgwGo6+vf+PGDTMzMwsLi7y8vLa2Njc3N01NTRcXFzMzMyUlJUtLSzs7u8uXL9vZ2RUXF7u5uamoqNjZ2VlYWBgZGeFwOIhy2traAgMDvby8PDw8DA0NPTw87OzsdHV1Y2P/X3tn/pRWlvbxv2Vq5peuSne6amq6ezq9lnZNUhmzqmmNC2Iwbq0i0SviBhFZRARRUYyKwQWXhKjYmoAR3MCgiEHRENwQCEoEF9BwAXnrzaminJixs3Tn7bx170/Hy1nu/d4Dfu7zPOc53R6Pp6+vLyMjA6Tyi4qK+mCmpv8U8jV/5efno1CoACn6/X6Xy7WwsABA0O/3z8/P6/X64ykn8CoiFotBQxiGwQuDSCR6+vSpx+NxuVzz8/Nzc3MjIyPt7e1KpXJnZ8fpdB4+OTExATIGwTCs0+na2to6OzsNBgMMw06nU6VStbW19fX1gR/npaWlsLAwDAYzPj4OdjMAr0DT09NCofDevXuLi4sej8fpdOpeHnK5vL29/dGjRyCP4mu0QE79fgoglPP7afmfPb148eLBgwdffvllILnWwcGBzWaTSCR7e3tmszn35UGlUm/cuCEUCp1O54MHD2JiYjgcDpvNTk9PJ5PJZrOZTqffvn3b7/fv7u42NzeTyWSDwVBQUEAgEGg0WmZmJmgLbDnb29sPHjwI7IG3tLQUEhLCYrH+8pe/CIVCo9F4//59Eonk8/mWl5fz8/Pz8vKoVCoOh+Pz+b/++isKhaqoqGAymRkZGRQKBYbhR48eodFoEomEx+MzMjIO/wD95+1+BH8ZjUYikYhGo69fv47FYnk8nlartdvt9fX1mZmZ4AaGhoZ+/PHHzc3NioqKoKAgmUym0+nYbHZoaOjo6GhxcfHly5cfP34skUhYLNbs7OzDhw+xWKzq5QH03NzcpNPp//znP8fHx6VS6blz5yIiIqanp3t6eqKjo3k8HoPB+P777+Vy+dzcXFlZ2c8//zwxMVFbW5uQkFBbW5ubm2uz2Wg02vfffy+TyRYWFsrLy8PCwqxWK/if9+jRI7lcHhMTExIS8sFE39raqqqqAoAOBvX5fEtLS+Pj4/v7+5OTk7m5uYDbCASCRCIBQJ+SklJZWUmlUoFzkE6n379/3+/3r66ucrnchoaGiYkJPB4PstQTCISHDx8GKMdms7W2tvL5fDBcb29vYWHh2tpaZmbmqVOnWltba2trm5qaPB6PQqEIdJKXlzc0NGSz2err63/55ZfKykoKhZKWlgY8xXfv3k1JSSGRSFgslkajAY5/Bw01Gg0ej4+Pj79+/ToEQc3NzYuLi0ajkUajVVRUgA45HE5qaqrRaIQgKCoqSqlUqtVq8CV6+PBhWlpaenq6Vqvt6upqbGxcWFhobW0lk8kzMzODg4Ngcq6urqakpPz888+Tk5MtLS1gc8fHjx+DPRBu376dnp5+9erViYmJqamprKysGzdujI2NAY/V8vJycXExgUBISUmJjIxUKpVarTYjI6OwsNBgMBQWFhYUFKjV6t7e3n/96185OTnvIMIf0eQo5ZhMppqamv7+fjBcVVVVQ0PDMZQDw3BnZycWiy0sLMRisQwGQ6fTicViPB4PQPPmzZsajcZoNNLpdAiCKisriURiWlra4ODg6urqKyeBS1QikWRnZxMIBAiCCgsLlUplW1sbGCIjI4PJZC4tLc3NzZ07dy4yMrKrq4tOpz98+BCGYZFIhMfjyWRybm4umUzWarUrKysUCgWPx1dWVhYVFaWlpcnl8j9CSaTPwwoglHNYjd+zDDaeDQsLO9rp3t5eZ2fn6dOnlUrlkydPuFzu2bNnQWpzYHRZXFwUCoXffvut1WrlcrmXL1/2+/1mszkiIqKurq6lpeXSpUsKhQK0DQ4ONplMbW1tSUlJdrtdKBSi0WgwqE6nO3HixMDAwMmTJ0Hq7ra2tvj4eKfT2draGhoaqlAoFhYWKisrv/nmGzabfeLEiQcPHoC30lOnTjkcDiaTGRwcrNVqh4eHmUzmR72Uw+PxWCyWwcHBxsZGIpGIwWCSk5PlcvlrKae2tjY5ORnIqNFoIiMj6+rqGhsbL1y4wGAwOjo6ZDLZ1taWwWAQCoUdHR1kMjk0NBSCoM3NTSqV+tNPP4Gs80lJSRAEgTIEQXQ6vbKyMikpCVjFVCoV2DPoFcohk8mnT58G/kexWHz27Nm5uTkcDldXVwe8JPX19R+ScgwGAwRBBQUFRyfz+vp6eXl5QkKCWq2enp7Oz89PSkp6+vRpUVHR6dOnR0ZG5ufni4uLg4ODCwsL8/Pz/X6/TCZLTExsbm4uKytLSkqanp5Wq9UEAuGXX37R6/XAY2WxWMA+A2BEPp8fGxu7t7dXUVERGho6MzNTWlpKp9MtFgudTk9JSdFoNFNTUzk5OVgs9smTJzk5OefOnRsbG9PpdAUFBSkpKQaDAYfDJSUlabXa7u7uW7dugWC1o3f0m2fcbvfS0tLAwACPxwMbGRYUFMhkstdSDnDwgT67u7sTEhIEAgGVSo2MjKyoqOjs7FSpVFtbWxqNpqOjo6WlhUAgXLx4sbq6enV1NTExEVjshoeHUShUTU2N3+8fHh6GIKiqqiovL4/BYICeu7q6EhMTwd4ItbW1Acq5du0aDocD+YJpNBrY3DszMxNE1m9vb0MQ9KeinE8++QSFQqW9PNhs9q+//pqfn9/S0gJuE+ACcFS91mM1Pz+fmZkJUKajo4NAINTX19+4cYNEIs3Ozo6OjqLRaBaLNTMzEx0dnZiYODU1NTMzExcXx+Fw9Hp9VFRUcnIyOIlCoTgcjslkysnJIRAIarV6YmIiJSUlMzMzMTGRQqFoNJq2tjYCgTA6Orqzs4PBYIqKipRKZVZWlkgk0uv14F0RWIxiY2O5XK5Go7ly5UpaWppardZoNFevXuXxeL8535AK76kAQjnvKeB/be5wOGg0GgCUQCVg37ZYLEQiMTs72+/3HxwczM3NnTlzZmRkhM/n//WvfwWe+/n5+b///e+7u7sTExPffvvtzMzM+Pj4d999p9FoiERiQUGBz+c7ODhYWFj44YcfwOvFaynn888/n5iY+Mc//uH1ep1OJ6CcjY0NsAeb1+s9ODjQarVff/11bm7uiRMnwM4pU1NTJ0+edDqdHR0dZ86codFo7e3tUqk0YJcK3NHHUnC5XNPT02C1i8/nczgcPT09ly5dys/PD1CO1+sdGBgAtpzD0cdarTY2NpbP55tMppaWFjqdnpubm5WVJZVK+/v7k5KSqqurWSwWBoN5E8qpra3F4/GActRqNQqFYrPZRynn7NmzQFtAObOzs5mZmY2NjeBkT0/PB6ac7OzsvLy8w4/b5XJZrdbp6Wk8Hs/lcoHz6N69e7GxsaOjo7m5uVeuXAGgBrhcIBDExcXNzc3V19cnJCTI5fKcnBzwK+/z+bq6utBo9Ojo6DGU4/f7GxsbY2NjzWYzk8mk0+kzMzM5OTlgp2Wv1ysUCjEYzOjoKA6HQ6FQYPRbt26h0ehnz56BeBoWi9XZ2TkxMXF4k6DD93V82eFwKJVKEF7q9XqtViuPx7ty5UppaWmAcjweD5PJBLYcKpUacAn19fUlJCT09vYuLCzw+XxgRiWRSMPDw01NTTgcjsvl0mi06OjoN6EcMpkMuMfv93d3dycmJtbV1b1iy7l27Rr4nfH7/YBypFIpDocLWEcoFMqfinK++OKLgoIC9sujs7NzaGjorShHIpEAt6Df73c4HI8fPxYIBJmZmWDposfjKSkpKSwsHB4eDgsLKykpAfx348YNBoOh1+tDQ0NpNBpYw5GZmclgMGQyWXh4OAaDqXp5nD9//scff8RgMMDv73A4ZmZmgNMqLS2NzWYvLCxAECQSie7fv4/FYiUSid/v93g8RUVFZDJZLpefP3++vLwcDAGMncfPN+TT91cAoZz31/D1Pezv79+7d+/zzz8/nEVqbW0tPT19ZGQEgqBAiOXy8nJ4ePjAwACfz//b3/4GugOUA+JsEhMTS0pKWCxWamqqxWIhEAjl5eVge7PV1dVz585JJJKjthyfzzc1NfVayrFarXg8ns1mgy/b4uLi6dOnMzIyPv30U3AGUM7BwcHGxkZ7ezuDwcjLy8vIyBgaGnr93f7pz4JgiOjo6PX1dXCxOp0uJiamsLCwpqYmPj4e7JBXUlICKIfD4Vy4cGF9fd3r9cpkspCQkP7+/rt370okErCMIioqCgRSJCcnr6ys6PV6Mpn8JpRTXl4eGhoKepZIJCEhIT09Pb9JOcCaAmwhGxsbJBLpQ1LO8+fPGQxGdHT0YcwdHx8HmxVDEBRICySVSq9fvy6RSHJzcyMiIoDULS0twG+Snp5eWlpKJBJZLJZarYYgKBDIMjAwkJSUBFyBNBrtsC3H4/HweLzY2NijlKNSqSAI6ujoAAOJxeLU1FSJRILD4cAz9fv9gHK8Xq/BYLh9+zaNRsvKyiosLNRoNO8wbW02G5PJJBAIge/1gwcP4uLiysrKiEQihUIBW04mJiYCygHmJbvd7vF46uvrMRhMX19fV1eXQqEwmUyNjY0xMTE5OTkZGRlkMtlkMk1OTmZnZ78J5dy4cSM7O9vhcHg8Hi6Xe+3aNbFY/JuUo1QqU1JSABcuLy/Hx8f/qSjnlbgcg8EQoBwYhrOysshk8jG2nP7+fgiCwM8UDMNms7m5uRmCIJlMBp41cBVJJJKwsLDS0lJw8jDllJWVgZOAcsRicXx8fElJiejlIRAIgC8MrF9zu91msxnMhFcop7u7G4KgwHakTCaTTCZLJJLz588HqBehnHf4Ar5DE4Ry3kG0N2ri8/kWFhaCgoLodDp4a9zZ2eHxeF999dX8/HxFRUV0dPTe3h4MwyMjIz/99NP09PRrKWd3d7e1tfXLL78MDw8fHBy02+1sNvv69etOp9Pj8YyOjn7zzTezs7MBymlubr548SKI4+FyuSdPnjxqy7Hb7SwWKzk52el0wjAsk8m++OKLmzdvvkI529vbIpFILBY/f/5cKpXGxMSQSKQ3uvk/XyWv16tSqSIjI0G4BoPBSE5Ojo+Pf/TokVgsDgoKYjKZHA7nypUrgHJqamp++OGHrKwsOp2OwWCys7NXVlbYbPa///1vBoORn58fFhbG5/NZLNbFixd5PB6VSg0PDw8JCZmYmDjeY8VgME6cOJGVlUWj0TAYTE5OjsFg+E3K2dnZ6ezsjIiIIJPJdDr94sWLH5JywAq1CxcuNDc3A1ujyWQiEAiRkZEqlaqoqIhEIrndbpfLBWwtarX6KOUA79KpU6dSU1OnpqZAeBmZTHa73U6ns66uDo1GT01NBWw5VCoVUN3a2hoWi30t5ej1ehCODTrhcrnXr1+fmpo6SjkrKyt37twZGRkB//liYmKampreYZ663e6enp6rV69mZ2eDuJ+4uDg8Hq/RaKqrqy9fvlxRUVFaWhoUFAQop6io6MyZM3l5ecXFxSDuTafT5eXlRURElJWVpaWlYTCY5ubmvLw8NBpdW1tLIpFOnz6dkpIyNjZ2vMcqIyPj1KlT+fn5N2/ejI2N5XA4s7Ozv0k5NpuNw+HEx8fTaDQymfzdd9/9ySkHh8PdunULhB6Hh4cfTzlyuRz4BGEYNhgMXC6XwWCkp6c3NzfDMOxwOECAjlKpfEPKmZ6exmKxbW1tHo8HhuG7d+8WFBSg0WihUAjDsF6vr6qqAsTzCuUoFIqUlJSOjg6Px2O32zMzM+l0ukKhQCjnHb5079kEoZz3FPC45mAleVBQEA6HKy8vhyDo0qVL1dXVMAyr1erz588TCAQ6nY5Go/F4vM1ma2pqOmrL8fl8Wq32k08+iYiI2N3dhWFYqVSGh4fn5eWVlpaiUCgIgkA4TlJSksvlGhkZ+frrrxkMRnV1NRqN/uyzz1Qq1aeffgrWFwCPFQzDCoUCdEKn01EoVHp6enV19VHKqaurCw4OLi0tJZFIFy9e7OrqOu6G/9yfOZ3O0dHR8vJyGo1GpVLZbPbw8LDb7V5fX29sbKRQKAKBoLe3VyQS7e/vz8/Pi0QiEDzL5XJnZ2c9Hs/CwkJZWdnNmzdLS0uFQqHNZpufn2exWBwORyAQtLa2MhgMtVo9NTXV3d0NbOYymQy8zzkcjrGxsZGRkerq6kuXLnE4HCqVWltbq9Pp9vf3Z2dnh4aGZmdnFQrF/v6+SqUK5CRcXl7u7e11u906na6mpoZKpdbX1xOJxNDQ0A+pt8ViYTAYISEhBAKBwWCkpqZevXr17t27Lpfr7t27ERERxJcHCoWqrKxcW1s7SjkwDLe3t3/22WcFBQV7e3sglVRkZCSJRCISiSgUisvlGo1GQDkul4vP5587d47FYjGZzDNnzgDKEQgEwcHBra2tRCKRTqeD1YVXr14lkUhFRUUoFIrH462srLxCOfHx8aurq0QiMTw8vKysDIvFxsXFvXPg5+bm5sDAQFlZGZhINTU1arUahuGnT5/W1NSUlpa2t7d3dXXJ5fLd3V0QcMNms6lUalNT09LSktvtVigUdDq9uLiYwWD09/dvbm4qFAoWi1VVVSUUCnkvD61WOzQ0BP6Dms1mqVSq1WpBfN7Y2JhcLgeZKUDPAoFgeXl5Z2dHpVLNzs5ub2+rVCqFQvHw4cOAOWFqampsbAxkvORwOKWlpQKB4Nq1awAlP+Rc+m9jHY0+3traKi4ujoqK4nA4FArlq6++Op5yrFYr+EUtKSlJTU3FYrGDg4MsFguNRpeUlIClaj09PTqd7g0pZ3d3t7q6GgTiFBYWJiQkNDQ0FBcXx8fHUyiU5ORkHA4HjIJgyrW2tqalpYlEIrvdTqfTr127RqFQsrOzUShUf3//7OwsQjn/7en/cecRyvnjtP3fmBuHw9HV1UWlUikUColEunPnDsh9sr+/39/fX1JSQqPRKisrnzx5AsPwwsJCIJmNw+Fob28H/qPd3d2urq7h4WFwrU6ns7+/n0Kh0Gg0DocD1kbq9XqZTObz+ba3t5ubm0tKSvh8/sDAgFAotFgsZWVlzc3NwLECFg7s7u729fWBTqqqqsASyra2NhAvsrGxIRQKvV7vyspKeXn5zZs36XS6QCD42JPegu0djEajxWI5nMbtxYsXJpPJ4XAcng0+n29nZ+dwTXDGaDRarVYQ83G4jtvtttlsLpfrcCevlMGicQiCtre3LRbL8ZUPt93e3u7u7s7NzZVIJH19fWBB0+EKf3QZrB4HkbPFxcU0Gk0ikYCNMtbX1zs7O8Fkvn379tramsvlUigUgXw2T548AeXV1VWRSDQzMwOu1mq1dnR0gEkoEAhMJpPT6ZyZmQF53lZWVurq6gBQikQiqVTq9/sfP37MZDJB9Deo9uzZs/b2dtBJS0sLyL8wOjoaSC2o0+nAmpfJyUkGg0EmkxkMRl9f32Hv29uq5/V6HQ6H0WhcX1/f398PNN/d3TWbza/0DCpbrdZAzUDz58+fg9AQr9drt9tBby6Xa3NzM1A50PnhwsrKCplMrqqqCrQ6/Okx5Y2Njfr6ehqNNjg42NXVBdZXHlP/Q36kVCoHBwdf2X1Fq9VWVVWVl5ffuXOnvb19cnJya2tLqVTq9fpA4fBFLi4u8vl8CoXCZDLlcrnL5TIYDOA1hkajdXd322w2h8MxMDAQSCc4NjY2PT3tcDj6+/sDaThGR0cBviwvL7e1tTEYDCqV2tvb+/z586dPnzY0NIAhRkZGgKleKpWy2WyxWCyVShcXF/1+v16vb2hooL48xGLx5uam3W7v6+sL5AyUy+WB8uFbQMq/rwII5fy+er6mNxDrura29somD16vd3193Ww2v0PKBI/Hs76+bjKZXtvW4/GYTKZAzlBwARaLBfgaApcIOjn+Anw+n9PpNBqNz549e6V5oB+k8OYKAHgNpOd584bAAJCTk0MkEsHimv+TZG4wDD9//txoNL7Cuy9evHj28nhzbgP3vr+/Dxq+NhbY5XK9Ag0wDNteHgAODnditVpf20lA5ABb2Gy2w80DFT6igtlsrqmpeYc85i6Xq7e3l0AgFBUV5ebm8ni8d15r9sHk2traeqtXgt3dXYvFYrfbwVsicN9bLJaNjQ2Q3vNtr3x/f399fd1mswV+A48Osb+/b7VaHQ5HYFAwrtlsPtzwbYdG6r+/AgjlvL+GSA+IAm+qgNvtXllZeTdA2dvbe/LkyeDg4NDQEMi8/KajIvX+3yngcrn0ev3Kyso73NnOzs7jx4+lUimIUnqHHpAmiAIfkQII5XxEDwu5VEQBRAFEAUQBRAFEgbdQAKGctxALqYoogCiAKIAogCiAKPARKYBQzkf0sJBLRRRAFEAUQBRAFEAUeAsFEMp5C7GQqogCiAKIAogCiAKIAh+RAgjlfEQPC7lURAFEAUQBRAFEAUSBt1AAoZy3EAupiiiAKIAogCiAKIAo8BEpgFDOR/SwkEtFFEAUQBRAFEAUQBR4CwX+B6HTABGiFuE9AAAAAElFTkSuQmCC" } }, "cell_type": "markdown", "id": "b96269c7", "metadata": {}, "source": [ "We have a simple feed-forward network. The input is an image, which is fed through several layers to obtain the output. The logit output is used to decide the label of the input image. Below is a demo image of LeNet5:\n", "![image.png](attachment:image.png)" ] }, { "cell_type": "markdown", "id": "08dfdd50", "metadata": {}, "source": [ "## Modules Importing\n", "Import all necessary modules and add PyGRANSO src folder to system path. " ] }, { "cell_type": "code", "execution_count": 1, "id": "90ed32f9", "metadata": {}, "outputs": [], "source": [ "import time\n", "import torch\n", "import sys\n", "## Adding PyGRANSO directories. Should be modified by user\n", "sys.path.append('/home/buyun/Documents/GitHub/PyGRANSO')\n", "from pygranso.pygranso import pygranso\n", "from pygranso.pygransoStruct import pygransoStruct\n", "from pygranso.private.getNvar import getNvarTorch\n", "import torch.nn as nn\n", "import torchvision.transforms as transforms\n", "import torch.nn.functional as F\n", "import torchvision" ] }, { "cell_type": "markdown", "id": "17a1b7fe", "metadata": {}, "source": [ "## Data Initialization \n", "Specify torch device, neural network architecture, and generate data.\n", "\n", "NOTE: please specify path for downloading data.\n", "\n", "Use GPU for this problem. If no cuda device available, please set *device = torch.device('cpu')*" ] }, { "cell_type": "code", "execution_count": 2, "id": "8b4842e1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Files already downloaded and verified\n" ] } ], "source": [ "device = torch.device('cuda')\n", "\n", "class Net(nn.Module):\n", " def __init__(self):\n", " super().__init__()\n", " # 3 input image channel, 6 output channels, 5x5 square convolution\n", " # kernel\n", " self.conv1 = nn.Conv2d(3, 6, 5)\n", " self.conv2 = nn.Conv2d(6, 16, 5)\n", " # an affine operation: y = Wx + b\n", " self.fc1 = nn.Linear(16 * 5 * 5, 120) # 5*5 from image dimension\n", " self.fc2 = nn.Linear(120, 84)\n", " self.fc3 = nn.Linear(84, 10)\n", "\n", " def forward(self, x):\n", " # Max pooling over a (2, 2) window\n", " x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))\n", " # If the size is a square, you can specify with a single number\n", " x = F.max_pool2d(F.relu(self.conv2(x)), 2)\n", " x = torch.flatten(x, 1) # flatten all dimensions except the batch dimension\n", " x = F.relu(self.fc1(x))\n", " x = F.relu(self.fc2(x))\n", " x = self.fc3(x)\n", " return x\n", "\n", "# fix model parameters\n", "torch.manual_seed(0)\n", "model = Net().to(device=device, dtype=torch.double)\n", "\n", "transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])\n", "batch_size = 1000\n", "trainset = torchvision.datasets.CIFAR10(root='/home/buyun/Documents/GitHub/PyGRANSO/examples', train=True, download=True, transform=transform)\n", "\n", "trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size, shuffle=False, num_workers=2)\n", "# data_in\n", "for i, data in enumerate(trainloader, 0): \n", " if i >= 1:\n", " break \n", " # get the inputs; data is a list of [inputs, labels]\n", " inputs, labels = data\n", " \n", "# All the user-provided data (vector/matrix/tensor) must be in torch tensor format. \n", "# As PyTorch tensor is single precision by default, one must explicitly set `dtype=torch.double`.\n", "# Also, please make sure the device of provided torch tensor is the same as opts.torch_device.\n", "labels = labels.to(device=device) # label/target [256]\n", "inputs = inputs.to(device=device, dtype=torch.double) # input data [256,3,32,32]" ] }, { "cell_type": "markdown", "id": "ec80716b", "metadata": {}, "source": [ "## Function Set-Up\n", "\n", "Encode the optimization variables, and objective and constraint functions.\n", "\n", "Note: please strictly follow the format of comb_fn, which will be used in the PyGRANSO main algortihm." ] }, { "cell_type": "code", "execution_count": 3, "id": "fb360e75", "metadata": {}, "outputs": [], "source": [ "def user_fn(model,inputs,labels):\n", " # objective function \n", " outputs = model(inputs)\n", " criterion = nn.CrossEntropyLoss()\n", " f = criterion(outputs, labels)\n", " ci = None\n", " ce = None\n", " return [f,ci,ce]\n", "\n", "comb_fn = lambda model : user_fn(model,inputs,labels)" ] }, { "cell_type": "markdown", "id": "f0f55ace", "metadata": {}, "source": [ "## User Options\n", "Specify user-defined options for PyGRANSO " ] }, { "cell_type": "code", "execution_count": 4, "id": "f3a65b57", "metadata": {}, "outputs": [], "source": [ "opts = pygransoStruct()\n", "opts.torch_device = device\n", "nvar = getNvarTorch(model.parameters())\n", "opts.x0 = torch.nn.utils.parameters_to_vector(model.parameters()).detach().reshape(nvar,1)\n", "opts.opt_tol = 1e-3\n", "# opts.fvalquit = 1e-6\n", "opts.print_level = 1\n", "opts.print_frequency = 10\n", "# opts.print_ascii = True\n", "opts.limited_mem_size = 100" ] }, { "cell_type": "markdown", "id": "754ba30a", "metadata": {}, "source": [ "## Initial Test \n", "Check initial accuracy of the modified LeNet5 model" ] }, { "cell_type": "code", "execution_count": 5, "id": "711f0e9c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initial acc = 0.105\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/buyun/anaconda3/envs/cuosqp_pygranso/lib/python3.9/site-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at /opt/conda/conda-bld/pytorch_1623448255797/work/c10/core/TensorImpl.h:1156.)\n", " return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)\n" ] } ], "source": [ "outputs = model(inputs )\n", "acc = (outputs.max(1)[1] == labels).sum().item()/labels.size(0)\n", "\n", "print(\"Initial acc = {}\".format(acc)) " ] }, { "cell_type": "markdown", "id": "8bca18c7", "metadata": {}, "source": [ "## Main Algorithm" ] }, { "cell_type": "code", "execution_count": 6, "id": "632976b3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\u001b[33m╔═════ QP SOLVER NOTICE ════════════════════════════════════════════════════════════════════════╗\n", "\u001b[0m\u001b[33m║ PyGRANSO requires a quadratic program (QP) solver that has a quadprog-compatible interface, ║\n", "\u001b[0m\u001b[33m║ the default is osqp. Users may provide their own wrapper for the QP solver. ║\n", "\u001b[0m\u001b[33m║ To disable this notice, set opts.quadprog_info_msg = False ║\n", "\u001b[0m\u001b[33m╚═══════════════════════════════════════════════════════════════════════════════════════════════╝\n", "\u001b[0m══════════════════════════════════════════════════════════════════════════════════════════════╗\n", "PyGRANSO: A PyTorch-enabled port of GRANSO with auto-differentiation ║ \n", "Version 1.2.0 ║ \n", "Licensed under the AGPLv3, Copyright (C) 2021-2022 Tim Mitchell and Buyun Liang ║ \n", "══════════════════════════════════════════════════════════════════════════════════════════════╣\n", "Problem specifications: ║ \n", " # of variables : 62006 ║ \n", " # of inequality constraints : 0 ║ \n", " # of equality constraints : 0 ║ \n", "══════════════════════════════════════════════════════════════════════════════════════════════╣\n", "\u001b[33mLimited-memory mode enabled with size = 100. \u001b[0m ║ \n", "\u001b[33mNOTE: limited-memory mode is generally NOT \u001b[0m ║ \n", "\u001b[33mrecommended for nonsmooth problems. \u001b[0m ║ \n", "═════╦════════════╦════════════════╦═════════════╦═══════════════════════╦════════════════════╣\n", " ║ Penalty Fn ║ ║ Violation ║ <--- Line Search ---> ║ <- Stationarity -> ║ \n", "Iter ║ Mu │ Value ║ Objective ║ Ineq │ Eq ║ SD │ Evals │ t ║ Grads │ Value ║ \n", "═════╬════════════╬════════════════╬═════════════╬═══════════════════════╬════════════════════╣\n", " 0 ║ - │ - ║ 2.30404643258 ║ - │ - ║ - │ 1 │ 0.000000 ║ 1 │ 0.044542 ║ \n", " 10 ║ - │ - ║ 2.14604806758 ║ - │ - ║ QN │ 8 │ 0.007812 ║ 1 │ 15.27986 ║ \n", " 20 ║ - │ - ║ 1.83576254073 ║ - │ - ║ QN │ 4 │ 0.125000 ║ 1 │ 4.301531 ║ \n", " 30 ║ - │ - ║ 1.51636303311 ║ - │ - ║ QN │ 4 │ 0.125000 ║ 1 │ 5.412692 ║ \n", " 40 ║ - │ - ║ 1.15580906091 ║ - │ - ║ QN │ 4 │ 0.125000 ║ 1 │ 12.11675 ║ \n", " 50 ║ - │ - ║ 0.62375615977 ║ - │ - ║ QN │ 5 │ 0.062500 ║ 1 │ 7.328582 ║ \n", " 60 ║ - │ - ║ 0.13021076357 ║ - │ - ║ QN │ 4 │ 0.125000 ║ 1 │ 6.408397 ║ \n", " 70 ║ - │ - ║ 5.6679828e-04 ║ - │ - ║ QN │ 1 │ 1.000000 ║ 1 │ 0.059144 ║ \n", "═════╩════════════╩════════════════╩═════════════╩═══════════════════════╩════════════════════╣\n", "Optimization results: ║ \n", "F = final iterate, B = Best (to tolerance), MF = Most Feasible ║ \n", "═════╦════════════╦════════════════╦═════════════╦═══════════════════════╦════════════════════╣\n", " F ║ │ ║ 5.2997040e-05 ║ - │ - ║ │ │ ║ │ ║ \n", " B ║ │ ║ 5.2997040e-05 ║ - │ - ║ │ │ ║ │ ║ \n", "═════╩════════════╩════════════════╩═════════════╩═══════════════════════╩════════════════════╣\n", "Iterations: 73 ║ \n", "Function evaluations: 338 ║ \n", "PyGRANSO termination code: 0 --- converged to stationarity tolerance. ║ \n", "══════════════════════════════════════════════════════════════════════════════════════════════╝\n", "Total Wall Time: 9.920972108840942s\n" ] } ], "source": [ "start = time.time()\n", "soln = pygranso(var_spec= model, combined_fn = comb_fn, user_opts = opts)\n", "end = time.time()\n", "print(\"Total Wall Time: {}s\".format(end - start))" ] }, { "cell_type": "markdown", "id": "21bff5fd", "metadata": {}, "source": [ "## Train Accuracy" ] }, { "cell_type": "code", "execution_count": 7, "id": "8d846f87", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train acc = 1.0\n" ] } ], "source": [ "torch.nn.utils.vector_to_parameters(soln.final.x, model.parameters())\n", "outputs = model(inputs)\n", "acc = (outputs.max(1)[1] == labels).sum().item()/labels.size(0)\n", "print(\"Train acc = {}\".format(acc))" ] } ], "metadata": { "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.9.7" } }, "nbformat": 4, "nbformat_minor": 5 }