{ "cells": [ { "cell_type": "markdown", "id": "83888a11-fd09-4d2d-9d35-96a324c9f333", "metadata": { "tags": [] }, "source": [ "# Distinct epitopes assumption" ] }, { "cell_type": "markdown", "id": "ac4757b5-b3fc-4e49-913a-be0c9c03546d", "metadata": {}, "source": [ "The `Polyclonal` model assumes that a polyclonal antibody mix can be divided into independent classes of neutralizing antibodies that bind to distinct epitopes without competition. Here we interrogate the validity of this assumption, being cognizant of the observation that realistic epitopes are often overlapping and therefore not distinct. To do this, we draw from statistical mechanics principles to compare the antibody escape fractions predicted by `Polyclonal` and an identically formulated model that instead assumes all epitopes are overlapping." ] }, { "cell_type": "markdown", "id": "5f1fc489-81ba-46fa-98d9-72ba7c56c904", "metadata": {}, "source": [ "### 1. Modeling a monoclonal antibody that neutralizes a viral protein" ] }, { "cell_type": "markdown", "id": "6742cb80-7857-4156-bff4-21a1b6f56c26", "metadata": {}, "source": [ "Before we consider the polyclonal antibody case, lets first consider the case of a monoclonal antibody that neutralizes a viral protein. Here, the viral protein can exist in two microstates, bound or unbound by a neutralizing antibody. The Boltzmann weight is 1 for the unbound state and $\\frac{c}{K_d}$ for the bound state, where $c$ is the antibody concentration and $K_d$ is the dissociation constant of antibody-protein binding. These Boltzmann weights can derived using the steady-state approximation (see [Einav et al. 2020](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1007830))." ] }, { "cell_type": "markdown", "id": "8da7107c-f0b4-46a3-beae-f6c5e8517673", "metadata": {}, "source": [ "We can then define the partition function $\\Xi$ as:\n", "\n", "$$ \\Xi = \\sum_{i} Z_{i} = Z_{unbound} + Z_{bound}$$ \n", "\n", "where $Z_{i}$ represents the Boltzmann weights of the $i$ microstates. Thus, the probability of a viral protein being unbound by a neutralizing antibody, or in other words the **escape fraction**, is:\n", "\n", "$$ p_{unbound} = \\frac{Z_{unbound}}{\\Xi} = \\frac{1}{1 + \\frac{c}{K_d}} \\tag{Eq. 1}$$ \n" ] }, { "cell_type": "markdown", "id": "717e8b9f-5e7d-4230-b226-b5bc7be55807", "metadata": {}, "source": [ "### 2. Modeling polyclonal antibodies that neutralize a viral protein" ] }, { "cell_type": "markdown", "id": "6db3486f-9aac-47e5-b330-d7a1f40ba585", "metadata": {}, "source": [ "To extend above to a polyclonal antibody mix, we first modify $c$ to represent the concentration of the polyclonal antibody mix. We assume that the polyclonal antibody mix contains neutralizing antibodies that bind one of $E$ epitopes. As follows, the Boltzmann weight of the state where epitope $e$ is bound is modified to $\\frac{c f_e}{K_{d,e}}$, where $f_e$ represents the fraction of neutralizing antibodies in the polyclonal mix that target epitope $e$, and $K_{d,e}$ is the dissociation constant of neutralizing antibodies binding to epitope $e$. " ] }, { "cell_type": "markdown", "id": "60e96d12-bfd9-4a87-9983-ee0d99421fba", "metadata": {}, "source": [ "#### 2.1 Two distinct epitopes" ] }, { "cell_type": "markdown", "id": "a8968a2e-9359-4bbf-9a4f-f330e67884c1", "metadata": {}, "source": [ "In a polyclonal antibody mix, it now becomes possible for new microstates to exist where multiple epitopes are bound by antibodies. For example, we can consider a viral protein that contains two distinct epitopes (1 and 2) that are targeted by polyclonal antibodies. In addition to the microstates where a *single* epitope is bound, we now require an additional microstate where *both* epitopes are bound. The Boltzmann weight for this new microstate is: \n", "\n", "$$ Z_{12,bound} = \\left(\\frac{c f_1}{K_{d,1}}\\right) \\left(\\frac{c f_2}{K_{d,2}}\\right)$$" ] }, { "cell_type": "markdown", "id": "ca41e39e-3ad5-4ed3-bcf2-6560e4645ea6", "metadata": {}, "source": [ "Thus, we can rewrite the partition function $\\Xi$ as:\n", "\n", "$$ \\Xi = \\sum_{i} Z_{i} = Z_{unbound} + Z_{1, bound} + Z_{2, bound} + Z_{12, bound}$$" ] }, { "cell_type": "markdown", "id": "f12693a3-e0ce-4b71-8f37-05f184147b13", "metadata": {}, "source": [ "and the probability of a viral protein being unbound by neutralizing antibodies is:\n", "\n", "$$\n", "\\begin{eqnarray}\n", "p_{unbound} = \\frac{Z_{unbound}}{\\Xi} &=& \\frac{1}{1 + \\frac{c f_1}{K_{d,1}} + \\frac{c f_2}{K_{d,2}} + \\left(\\frac{c f_1}{K_{d,1}}\\right) \\left(\\frac{c f_2}{K_{d,2}}\\right)} \\\\\n", "&=& \\left(\\frac{1}{1 + \\frac{c f_1}{K_{d,1}}}\\right) \\left(\\frac{1}{1 + \\frac{c f_2}{K_{d,2}}}\\right) \\tag{Eq. 2} \\\\\n", "\\end{eqnarray}\n", "$$\n", "\n", "Note that Eq. 2 exactly corresponds to the `Polyclonal` model." ] }, { "cell_type": "markdown", "id": "3c2d669b-f2bc-4090-8727-fbd7e1d95fd0", "metadata": {}, "source": [ "#### 2.2 Two overlapping epitopes" ] }, { "cell_type": "markdown", "id": "7851eadc-6c60-41cf-bd44-9abc6d6e42e8", "metadata": {}, "source": [ "In the above case, the two epitopes were *distinct* and there was no competition amongst neutralizing antibodies. However, if the epitopes are overlapping and there is competition, then the microstate where *both* epitopes are bound ($Z_{12,bound}$) can no longer happen. In this case, the probability of a viral protein being unbound by antibodies is: \n", "\n", "$$ p_{unbound} = \\frac{Z_{unbound}}{\\Xi} = \\frac{1}{1 + \\frac{c f_1}{K_{d,1}} + \\frac{c f_2}{K_{d,2}}} \\tag{Eq. 3}$$" ] }, { "cell_type": "markdown", "id": "abcb861d-2d56-4599-ab26-5b0401951f78", "metadata": {}, "source": [ "Using Eq. 2 and Eq. 3, we can see how $p_{unbound}$ varies due to $c$, $f_{1}$, $f_{2}$, $K_{d,1}$, and $K_{d,2}$ under both the distinct and overlapping epitopes assumptions when there are two epitopes.\n", "\n", "First, we'll plot the $p_{unbound}$ curves as a function of $c$ when the two classes of antibodies have the same affinities ($K_{d,1} = K_{d,2} = 10^{-6}$). Then, we'll plot the same curve for when the the two classes of antibodies have slightly different affinities ($K_{d,1} = 10^{-7}$, $K_{d,2} = 10^{-5}$). For both plots, we'll assume the two classes of antibodies are present in equal proportion in the sera ($f_1 = f_2 = 0.5$)." ] }, { "cell_type": "code", "execution_count": 1, "id": "770ea518-ddf9-4695-bac3-2bbfc99b9c70", "metadata": { "execution": { "iopub.execute_input": "2023-02-11T21:27:31.576762Z", "iopub.status.busy": "2023-02-11T21:27:31.576076Z", "iopub.status.idle": "2023-02-11T21:27:35.481436Z", "shell.execute_reply": "2023-02-11T21:27:35.480879Z", "shell.execute_reply.started": "2023-02-11T21:27:31.576733Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7QAAAFeCAYAAAC1h1NjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB7pElEQVR4nO3dd3hUZfr/8fe09E5CCAkJJQkJoQdEKYJIE1RQLKig2HVX1O/uooCguK6KXX+71l1XFLBgWykWsICICBgUIYROSKGEQCghdWbO748JAzGAEAIzST6v65orp5/7ZMLD3PM0k2EYBiIiIiIiIiL1jNnTAYiIiIiIiIjUhhJaERERERERqZeU0IqIiIiIiEi9pIRWRERERERE6iUltCIiIiIiIlIvKaEVERERERGRekkJrYiIiIiIiNRLSmhFRERERESkXrJ6OgBvkZOTQ2FhoafDEBFpsCIjI4mPjz/uPpXBIiJnz8nKX5H6Tgktrg9SqamplJSUeDoUEZEGKyAggKysrBofqlQGi4icXScqf0UaAiW0QGFhISUlJcycOZPU1FRPhyMi0uBkZWUxevRoCgsLa3ygUhksInL2nKz8FWkIlNAeIzU1la5du3o6DBGRRkllsIiIiJwuDQolUo9t3bqVIUOGkJyczAsvvADA+PHjSUtLo0+fPixfvpyePXue0rXy8/NJSkqivLz8hMdcdNFFfP/993USu4g0Tk888QT3338/ULPcKSsr45ZbbiE1NZXrrrsOgJkzZ9KlSxeSkpLYvn27p8KutYyMDC688EKSkpKYPXt2jWf85JNPuPrqq0/pWqdSpiclJbFly5a6CF1EpF5QDa1IPfbqq6/StWtXvvzySwBWrlzJwoULWb58OUFBQQD8+OOPp3St2NhYNm3a5F6/6qqruPzyy7nxxhvd27777rs6jF5EGrvflzuff/45eXl5rF69Gh8fHyorK3nkkUf4+OOP6dy58zmP74MPPmDGjBnMmzev1td45plnuO6667j77rsB+OSTT6o9I8CVV155Stfq0aNHtTK9R48eTJs2jYsuusi97djfp4hIY6AaWpF6LCcnh5SUlGrrcXFx7mRWRKQ+ycnJoU2bNu5Eb8+ePZSVlVUr506H3W6vy/BqJTc3t0Y5fewziojImVFCK1Lltddeo1u3biQnJ3PBBRfw2WefAa4PH9dccw1paWm0b9+eP/3pT+zfv999Xo8ePXj11VcZPHgwiYmJ3Hbbbezfv597772Xtm3bcvHFF7N+/Xr38QUFBdx111106tSJbt268dxzz+F0Oo8b0+rVq7n88stJTU2lc+fOTJw40d0078orr+THH39k6tSpJCUl8fLLLzN+/HhWr15NUlISDz/8MD/++GO1Wo0ePXrw2muvMWTIENq2bcuYMWPcz5Kbm0tsbCxlZWU8/vjjLF++3H3tcePGuc8/UktrGAavv/46vXv3Ji0tjTFjxrBjxw73vscee4xOnTrRtm1bLrzwwlOuKRaRhmXdunUMHTqU5OTkamUOVC93pk2bxosvvsjnn39OUlISL730EhdeeCEAHTp0YMiQIYCrq8Xo0aNp3749PXv2ZPr06e7rPffcc9x222385S9/ITU1lVdffZWKigqefPJJzj//fNq3b8+f//znGuXeRx99xPnnn0+7du145JFHANdAOhMnTnSXqUlJSccdifvbb79l8ODBtG3blm7duvH000+79/Xo0YPt27dz2223kZSUxIQJE6o94+uvv84HH3zApZde6j4nNjaWmTNncuGFF5KSksK4ceOoqKgAqFam/+lPfyI/P9997WnTprnP37x5M8BJn72srIz777+ftLQ0UlJSGDBgABs3bqzluywi4kGGGBkZGQZgZGRkeDoU8ZBNmzYZrVu3NjZt2mQYhmHs2rXL2LBhg2EYhpGdnW0sWrTIKCsrM/bu3WuMHDnSmDRpkvvc8847zxg8eLCxY8cOY+/evUavXr2MXr16Gd9++61ht9uNyZMnG6NGjTIMwzAcDocxdOhQ48knnzRKS0uNnTt3GgMHDjRmzpx53LjWrFljrFixwqisrDRyc3ONfv36Ga+++qp7/8iRI423337bvf7+++8bw4YNc68vXbrU6NSpU7VYBw4caOTl5RnFxcXGZZddZjz99NOGYRhGTk6O0bx5c6O0tPS41z5y/rfffmsYhmG8+eabxuDBg42cnByjoqLCmDZtmjF8+HDDMAzju+++M9LT041du3YZhmEY27dvN7Kzs0/x3ZCG6GTlrMrghquiosLo0aOH8dJLLxkVFRXGokWLjNatWxv33XefYRg1y51nn33WuOuuu9zn/35/SUmJ0a1bN2P69OlGRUWFsWnTJqNbt27G4sWL3efHx8cb//vf/wyHw2GUlJQYU6dONa6//npjz549RklJiXHfffcZf/7zn6td/9577zUOHz5sZGdnGykpKcaSJUsMw6hZph7PsmXLjMzMTMPhcBjr1q0zOnXqZMydO9e9/9hy83jP+Pt7NG/e3Bg1apSxd+9eY8+ePcYFF1xgvPfee4ZhHL9MP/baR84/8n/ZyZ79nXfeMQYPHmzs37/fcDqdxsaNG43du3ef9FmlflIZKw2damhFAKvV1Z18w4YNlJaWEh0dTXJyMgAJCQn07dsXX19fIiIiuP322/npp5+qnX/zzTcTExNDREQEF110EQkJCVx00UVYLBYuv/xy1qxZA7hqXHfs2MGDDz6In58fzZo144477uB///vfceNq37493bt3x2q1EhcXxw033MCyZcvO6FlvvfVWYmNjCQwMZNiwYe7YTtc777zDAw88QIsWLbDZbPz1r39l9erV5OfnY7PZKC8vZ8OGDVRWVhIfH09CQsIZxS0i9U9GRgYlJSXcc8892Gw2+vbtS79+/Wp9vYULFxIdHc1NN92EzWYjMTGR66+/vloZ2qFDB4YPH47ZbMbPz48ZM2YwdepUIiMj8ff3Z/z48cybNw+Hw+E+529/+xsBAQEkJCTQo0cP1q5de8oxHanZNZvNpKamMnz48Br/R5yucePGERERQWRkJBdffHGtymnDME767D4+PhQXF7N582YMwyApKYmmTZueUdwiIp6gQaFEgJYtW/LCCy/w3//+l7/85S+cd955PPLIIyQmJrJnzx4efvhhVqxYQXFxMU6ns0Yf1WM/BPj7+xMVFVVt/UgztdzcXPbu3Uu7du3c+51OJ82bNz9uXFu2bOHRRx/lt99+o7S0FLvdXu3c2vh9rMdrQncqcnNzufvuuzGbj34vZjab2bFjB7169eKvf/0rTz31FFu3bqVfv3488sgjNGvW7IxiF5H6Zffu3TRr1qxaOREbG8vBgwdrdb28vDzWrl1bbb5ih8NBjx493OtxcXHu5b1791JaWsrll19e7Tpms5mCggL3+u/L7MOHD59yTKtWreKJJ55wf4FXUVHhbh5dW78vp4+N9VT90bOPHDmSXbt28eCDD7Jr1y6GDh3KlClTCA4OPqPYRUTONdXQilS5/PLL+fjjj/n1119p2bIl48ePB2DatGk4nU4WLlzIhg0b+Ne//oVhGLW6R2xsLDExMWRlZblfGzZsOOHowRMnTqRly5YsWbKEDRs2MHHixFrfu67Fxsby1ltvVXuWLVu20L17dwDGjh3L/PnzWbZsGXa7nccff9zDEYvIuRYdHc2uXbuqjRNwpK99bcTGxtKtW7dq5c7GjRuZMWOG+xiTyeRejoiIwM/PjwULFlQ7Z+vWrcTExPzh/Y691oncc889DBgwgBUrVrB+/XrGjBlzzsrpk8X3R89utVq57777+Prrr/nmm2/YuHEjr7766jmJW0SkLimhFQE2b97M999/T1lZGT4+PgQEBGCxWAAoLi4mICCAkJAQdu3axWuvvVbr+3Tu3JkmTZrwwgsvUFJSgtPpZOvWrSdsRnz48GGCg4MJCgpiy5Yt1T60nW1RUVEnnfPxxhtv5KmnniI7OxuA/fv3M2fOHAB+/fVXfv75ZyoqKvD398ff39/9+xSRxiM9PR0/Pz9eeeUVKisr+f77789o+q8BAwaQm5vLe++9R3l5OXa7naysLH799dfjHm82mxk9ejRTp05l9+7dABQWFvLVV1+d0v2ioqLYtWvXSefnLi4uJjQ0FH9/f1avXn3CLiRnQ2Rk5AnL6T969qVLl5KZmYnD4SAwMBAfHx+V0yJSLymhFcE1EuTTTz9Nx44dad++PatWrXKPGPmXv/yFrKwsUlNTGTNmDIMHD671fSwWC9OnT2fbtm307t2bdu3acdddd52wOdmUKVOYO3cuycnJ/O1vf6s2EubZduutt7JgwQLatWvHfffdV2P/LbfcwvDhw7npppto27YtAwcOZPHixQAcOnSICRMm0L59e7p27cqhQ4eYNGnSOYtdRLyDzWbjv//9L/Pnz6ddu3b8+9//ZuTIkbW+XmBgIO+99x4LFiyge/fudOzYkQceeIBDhw6d8JxJkybRrl07rrzySpKTkxk+fDi//PLLKd2vV69epKWl0bVrV1JTU4/bReOJJ57ghRdeIDk5meeee+6cltPjxo3jlVdeITU1tdroykec7Nn37NnD3XffTUpKCj179qRZs2buuXJFROoTk+Et7Rc9aNWqVaSnp5ORkUHXrl09HY6ISINzsnJWZbCIyNmjMlYaOtXQioiIiIiISL2khFZERERERETqJSW0IiIiIiIiUi8poRUREREREZF6SQmtiIiIiIiI1EtWTwfgDUpLSwFOOI+diIicmaysrBPuUxksInL2nKz8FWkIlNAC+/fvB1zzboqIyNkREBBAZGRkje0qg0VEzq4Tlb8iDYESWiAmJgaAmTNnkpqa6uFoREQapsjISOLj42tsVxksInJ2naj8FWkIlNAeIzU1VRNOi4h4iMpgEREROV0aFEpERERERETqJSW0IiIiIiIiUi8poRUREREREZF6SQmtiIiIiIiI1EsNclCoefPm8e2335Kdnc0FF1zA+PHjPR2SiIiIiIiI1LEGmdBGRERwzTXX8Ouvv3Lo0CFPhyMiIiIiIiJnQYNMaHv27AnA1q1bldCKiIiIiIg0UA0yofWEL/+zgJLSMkyYXBtMHFnCZDp2m2uHyVR1pMmEa7cJs6n6PpPZhMlkwmw2YTKZMZuPLJswmU2YzWbXy2LCYrFgtpixWMyYLRYsNgsWqwWrzYLFx4rVZsHqY8PmZ8Pm54OPnw9WPx8sVnWjFpH6Lev7THbn7nGXj2az2V1GWixmzFYzFosFi9XsKietR8pHKxabBZuPDYuvFR9fG1Y/H3wCfLH6WjGbVT6KiIh4u0ab0BYWFlJYWAjAtm3bzvh6X6zfzD6zccbXOdesBtgMsBkmfE0mfEwmfE1mfC0W/CwW/H2sBPj4EODvS1CAH0Eh/gSHBRESEUxYTDihzcKxWC2efgwRacS+++4Xlh0+UOfXtTnBBvgYx5SNZlf56G+x4O9jI8DXhwB/H4KC/AkKDiAkLIjQpqGExYQT2CRYSbGIiMhZ1mgT2o8//ph///vfAJSUlHg4Gs+xm1yvUgzgSELuAEclOICKk59vMiDYgHCzlQgfX8KD/GkaEUqzuEiat4mhaetoLLZG+2cmIueAYZydLxMrzVAJlLjLR6frh73qVQ6cpFeLxYAww0SYxUa4rw9RIUE0jQqjWWwksSlxhDYPV8IrIiJyhhptpjFy5Ej69u0LQGZmJlddddUZXe+lZ/9Ubd3pdAJgOKs2GE4MAwzD6f5MZDhdC4ZrB4bTwMDA6XD9NBwGTrsDDAOn04nT4bqG0+6oWjZwOpw4HK59TrsDe4UDp9OJo9KBw27HbnfgsDuwVzqwV7rWKyvsVFbaqbQ7qKi0U1npoMJup9xup6LSQZnD9Sp3OigzDEpwUmoCp4kaDBMcNMFB7GyvsMO+w7CvEDZvgUWuGuAYrMQGBhDfrAmJaQm0Tk/EN8D3jH7fIiJH3DhuOKOKy13l5DHlo6PStex0OHHYHTjsTpwO1097pb1qm4PKquXKSjuVFQ4q7a4ysqLSVSZWHCkb7XbKq8rHMqeTUpyUYVB6gpzUYYK9JoO9RgWUVUBZMRTsgkxgAQQ4IcbiQ1xIEK1aRNOmfQItOiToS0AREZHT0CD/13Q4HDgcrsTO6XRSUVGB2WzGaj36uJGRkURGRgJnp4bW/a27+4NO/f4W3ul0Urq/hEOFBzhYeJCDew+xf98h9u8vZn9xCfsOl1JUWcE+w0HJMY9qN0EudnJLDvLT1oOwdRuWOYuIM9lIbdqE9p3akNIrVQmuiNRacJMQaOK5+zsq7RTvPcShwoMcLDzE/sIDHNx/mP0Hiyk6VEJRWTn7KivYa3JiP+aLwRIzbDEq2HJgH4sP7IO1Wfi+C21sfqTENiWtaxJtzkvWWAciIiInYTLOVlstD3r33Xd5//33q23r378/999//3GPX7VqFenp6WRkZNC1a9dzEGHDdqjgADs25rNzewH5+YXk7T/IjvIy9lmO/6dmc0KqXwDd0lrTfXBXgiKCz3HEIuJJjaUMdtidFOXtYdfmXeRt382OXfvIP3iIXEfFCWt5Q5zQMTSMrp0S6TywCzZ/n3MbtIiIiJdrkAnt6WosH6Y8bX/+Pjb9vInNm/LYWLCXbUYljt81YzYb0MEvkIt6daDzwM5YLBpwSqSha+xlsNPpZNeGfDav3srGLTvYULSfXWZnjeMCnXBeRBP6DuhK6+5JR0fQFxERacSU0KIPU55Suv8w677P5NfVm/llfxEHfpe7hjtN9GuTwODr+xEYGuiZIEXkrFMZXFNR3l5WL17DqqxsMssOU/G7GtwErFxyXnvOH95DfW5FRKRRU0KLPkx5A0elg40/rOPHH9ay/MC+as3v/J3QPz6OoTf0J6SJmiOLNDQqg0+u/HAZGV9k8MOqDWRWllYboC/SaWZo+yQuur4fVh8ltiIi0vgooUUfprxN2YESfvp0Gd+s3US22eHe7ueEy9OSGDKmPzarPriJNBQqg09dUd5evvtkKd/k5HLwmC/+YpwWru2XTtdh3dQUWUREGhUltOjDlLdyOpz8Nj+DOUt+YZOp0r29GVZGX9qLThe292B0IlJXVAafvorSCr6fvYTP12xkzzH9bVMtftx661CiE2M8GJ2IiMi5o7kAxGuZLWY6X96dKU/fzvg+59Hc4fpz3YWdZ+ct5t/PfEhZabmHoxQROfd8/H0YcNPFPPX4rYxKbENgVU6b5Sjjodc+YeH0r93zoYuIiDRkSmjF65lMJjpe1p3HH7uF6+LiCahqhfz9ngImT53Olsztng1QRMRDbL4+DLtjCM9OvJH+YZGYDCg3wzvrNvDUQ2+xf+c+T4coIiJyVimhlXrDGuDL0Hsv44nbR5DqtAGw27Dz2PR5fP3JUg9HJyLiOUFNgrl50rU8eEkfmlSNGrXOUcYjz73P1p83ezg6ERGRs0cJrdQ7TVJiefAfN3NNVHOsTnCY4O2ffmXm6/NwOht9l3ARacTS+ndk2pSb6BUUBsA+s8Hj73/F0o/0pZ+IiDRMSmilXrL42bhs/BVMurgnoXbXtq+2bOfFp9+nrLzCs8GJiHiQX2ggd065nhuSEzEbUGGG11b8ypxX53s6NBERkTqnhFbqtaRLuvDw6KHEVrqa2P2ybx/PTntPSa2INGomk4khtw1m/ODe7gGjPtyWzSf/muvZwEREROqYElqp95p2bcWU+68mze6am3bD4WJeeGY2FZV2D0cmIuJZ7Qd0YsrYywhzuL70+zQnhw9f+szDUYmIiNQdJbTSIAQmRPGXidfRvtKV1K47eIAXn/sQu93h4chERDwrtn08k267jPCqpHZOfh4f/3OOh6MSERGpG0popcHwiQrhvr9dQ2qFBYA1+/bxyj8/xTA0UJSING4xqS2YdOcImlQltf/LzeX7D773cFQiIiJnTgmtNCh+seHcf9+VJJe7/rRX7tzNZx/pQ5uISLPk5jx42+UEVTVceevnNWR9n+nZoERERM6QElppcAJaNeW+2y+jWdW4UJ+sWEvGzxs8G5SIiBeISY3j3ssuxOoEuwlemrOInRvzPR2WiIhIrSmhlQYppH0c4y7qgb8DDBO8Nvsb8nYUejosERGPS+3XgVvS2wNw2Awv/Hsu5YfLPByViIhI7SihlQYrfng3botpgcmAMgxefPV/lFVUejosERGP63NdXy5r1hyAnSYHs/6fRj4WEZH6SQmtNGjd7x3KcCMQgN3l5bw362sPRyQi4h1GjrucZJMPAN8VFbJy3goPRyQiInL6lNBKg2bysTL8b1eQUuoa2fPbrK2sWZft2aBERLyAxWbh7rsuJ9DpWv/vopXsy1PXDBERqV+U0EqDZ20Wys0Xdce/amTPN2Yt4HCJ+ouJiES2imbsBV0AKDbDay9/htPp9HBUIiIip04JrTQKMSO6cY01DID9lZVMn7XQswGJiHiJ80f2pE9QOABZjjJ++PAHD0ckIiJy6pTQSqNgMpvoN+4SOh92NT3+aVMOv2Vt93BUIiLe4cb7hhPmcJWPH6xcy+GiYg9HJCIicmqU0EqjYY2LYEzfdAKqmh7P/OBb7A6HZ4MSEfECfqGBXH9+RwAOmg0+eH2+hyMSERE5NUpopVGJurIbwxz+AOwsKWHh4l89G5CIiJfoMbInaWY/ABbtLWTLz5s9HJGIiMgfU0IrjYrJamHgtRcSU+5a/3ThSg4Ul3g2KBERL2A2m7npxkHYnGCYYPrsb3E4NECUiIh4NyW00uj4nd+Gq/0jACh1OPjwMw2AIiICENOuBZc0bw5ANpX8+MmPHo5IRETk5JTQSqNjMpnofMtFdD7kWv9+9Sa279jj2aBERLzE5XcMcQ8Q9b/la7BX2D0ckYiIyIkpoZVGyZbcjKtaJmB1ggF8Mke1ECIiAL5B/lyWmghAgdnJ4g++93BEIiIiJ6aEVhqtuBv70LOqlnbV1jyy81VLKyICcNHofkRW1dJ+tno9FWUVHo5IRETk+JTQSqNliQnlkrZtsFaNefLp58s8G5CIiJew+fkwvHMqAEVmg4Uzv/NwRCIiIsenhFYatWZXdafnAdfyqk25qqUVEanSZ1QfYpyujwnz12+hrLjUwxGJiIjUpIRWGjVrfBMGJ8QdraX9crlnAxIR8RIWm5Urz+sIwCGzwdfvLvJsQCIiIsehhFYavZirzjtaS7thu2ppRUSqnDfyAmKdFgAWbtyGvdLh4YhERESqU0IrjZ4tJYZBkU3dtbSff7fKswGJiHgJs8XMoPZJAOwzGyyf85OHIxIREalOCa0IEDOyO92qRjxesWYLRQcOezYgEREv0eea3oRWVcx+sSITwzA8G5CIiMgxlNCKALb0BC7yDQHAYRh8vWyNhyMSEfEOtgBf+sfHAbDdqCRrSaaHIxIRETlKCa0IYDKZaDWwI0klrvXvflxLRaXds0GJiHiJgdf2xaeqW8b8hT97NhgREZFjKKEVqeLbry0XHnL9kzhUVs5Pv27ycEQiIt4huFkYvcIiAFhTdpj8jfkejkhERMRFCa1IFXOwH126JNKk0rX+1fe/qq+YiEiVoVf0xmSAYYKvPlnq6XBEREQAJbQi1QQMSqPPftdyzu59rN+6w6PxiIh4i2ZpLehg9Qfgp8I9lJeUezgiERERJbQi1VhTY+gZFIZvVV+xr3/U4FAiIkf0Oy8VgFIz/DRvhYejERERUUIrUo3JZCJsUHvSD7rWV2Vu49DhMs8GJSLiJboO7eaewmfxLxs8G4yIiAhKaEVq8O3Xlh4lrn8adqeTZb9u9HBEIiLeweJro1d0NACbHOXkb9DgUCIi4llKaEV+xxzsR2KX1jSr6h62eMU6zwYkIuJF+l92Pqaq8fK+nfeTZ4MREZFGTwmtyHH4XZhMj6pmxzk795Kdv8ezAYmIeIno1DhSzL4ALNu5m8rySg9HJCIijZkSWpHjsHWOp5vDB3NVLcT3P2d5NiARES/Sr3MyAIfMBj9/meHhaEREpDFTQityHCabhcgebWh32LX+46qNVNodng1KRMRLdL/8PIKODA61Ql/4iYiI5yihFTkBn95J7mbHh0vLWbVum2cDEhHxErZAP3qENwEgq6KEA3sOejgiERFprJTQipyArX0saTY/guyu9e9XqhZCROSInr3bA+A0wU+fr/RwNCIi0lgpoRU5AZPFTECvJLodcq2v3ZjLocOlng1KRMRLJPZpR6TDBMBP69WCRUREPEMJrchJ+PROomtVQus0DH5eu9WzAYmIeAmzxcx5TZsCsMVeTmFeoYcjEhGRxsjq6QCOKC4u5uWXX2bVqlX4+/tzxRVXMHz48BrHLVq0iFdeecW9bhgG5eXlTJgwgZ49e7JmzRomT56Mr6+v+5irrrqKa6655pw8hzQs1rbNSAgJokllMXttsHz1Zi7qkebpsEREvEKvizrx+UcLMEzw4+crufyOSzwdkoiINDJek9C+/vrrVFZW8tZbb1FQUMCUKVOIi4sjPT292nH9+vWjX79+7vWMjAyeeeaZaseFhobyzjvvnKvQpQEzmUz49kyk8w+/8k0ErNuSz4HiEkKDAjwdmoiIx7XonkjsB1+Tb3Hy0+ZcLvd0QCIi0uh4RZPjsrIyli5dypgxYwgICKBly5YMGjSIhQsX/uG5CxcupHfv3tVqZEXqks95rehS7Fo2DIOVa9TsWEQEXF/69YiLASCXSvI35ns4IhERaWy8IqHNz8/HMAwSEhLc21q1akVOTs5Jzzt48CArVqxgwIAB1bYfOnSIG2+8kVtvvZWXX36ZQ4cOnZW4pXGwtm1GnI8vURWu9eWrN3k2IBERL9Jz8NEWUku/yvBgJCIi0hh5RUJbVlZGQED1JpyBgYGUlp58RNnFixcTExNDSkqKe1tcXBwvvfQS06dPZ9q0aezdu5cXX3yxxrmFhYWsX7+e9evXs22bRmeUEzNZzPh2a0XnqlraDdt2sP/gYc8GJSLiJaLbtaC109WDaUXODg9HIyIijY1XJLR+fn41kteSkhL8/f1Pet7XX3/NxRdfXG1beHg48fHxmM1moqKiuOOOO8jIyKC8vLzacR9//DGjR49m9OjRTJkypW4eRBosW/eWdKmq6DcMWLFmi2cDEhHxIt1bxgKw2+Qgd0Oeh6MREZHGxCsS2thY13+ExzYx3rZtG/Hx8Sc8Z8uWLeTk5HDRRRed9NpmsxnDMDAMo9r2kSNHMnPmTGbOnMljjz12BtFLY+DTuQUxThPRVd+LLF+92bMBiYh4ke79O7mXV3672oORiIhIY+MVCa2fnx+9evVixowZlJSUsH37dhYsWMDAgQNPeM4333xDeno64eHh1bb/9ttv7N69G8MwKCoq4o033qBz5874+flVOy4yMpKUlBRSUlJo1arVWXkuaThM/j74dGjhHhxqY/ZO9h9Ss2MREYCmqXG0cFgAWJWtgaFEROTc8YqEFuDOO+/EYrEwduxYHn74YUaOHOmeiueaa64hMzPTfWxlZSWLFy+uMRgUwNatW5k4cSJXX301//d//0dISAh/+ctfztlzSMPlc14rOhYfXf9lXbbHYhER8SYmk4kuMU0B2G5UUrhjr4cjEhGRxsJr5qENCgpiwoQJx903e/bsaus2m41Zs2Yd99gRI0YwYsSIug5PBFu3BGJeh/BKKLLBqnXZXNQjzdNhiYh4he692jPn050A/LzwF4bcVPNLZxERkbrmNTW0It7OEhmMtXUkHapqaTM35VJWUenZoEREvET8eYlE2U0AZGw8+bR7IiIidUUJrchp8OneivZVXWcr7Q7Wbsz1bEAiIl7CbDHTuUkEABsrSik+oHEGRETk7FNCK3IabF3iaVMKfg7X+i/rNIexiMgR3bq1BcBpglVf/+rZYEREpFFQQityGqyJTbEG+NCuxLX+S9Z2nE6nZ4MSEfESbft1ILjqC78MzdctIiLngBJakdNgspixdYijfVU/2kOHS9mcs9uzQYmIeAmLr5VOgSEArC0+RHlZhYcjEhGRhk4JrchpsnVuQWoJmA3Xekammh2LiBzRtUNrACrMsO7HLA9HIyIiDZ0SWpHTZOvUAn8nJJa61tWPVkTkqPb9O2Gr6onxa8YmzwYjIiINnhJakdNkiQnFHB3inr5n55797Nyz36MxiYh4C/8mQSSZfQBYu6fQw9GIiEhDp4RWpBZsneJod8yMFL9t2O65YEREvEyHFs0AKMDBzm0aZ0BERM4eJbQitWDr1IImdmhaNd7JbxtyPBuQiIgX6XJBO/fyL4t/82AkIiLS0CmhFakFW4c4MEFKVS1t1pZ8Kirtng1KRMRLNO/amii7CYDVW/I8HI2IiDRkSmhFasEc7Ic1sSmpVfPRVtodrN+6w7NBiYh4CZPZRPvQMAA2lZVQVlru2YBERKTBUkIrUku2Ti1oU4p7NE81OxYROapz+1YAVJogc+k6D0cjIiINlRJakVqydWqBjwFtqqbv0cBQIiJHtbuoAz5Hpu9Zpel7RETk7FBCK1JL1uRosFnczY537tlPwb6Dng1KRMRL+EUEkWz2BWDtnr0YhuHhiEREpCFSQitSSyYfK9akaPfAUABr1OxYRMStY7xr+p5Ck5MdW3d5OBoREWmIrKdz8DvvvHNaF7/xxhtP63iR+saW1pym63YQUQn7bPDbxhwuvqC9p8MSEfEKnXum8W6OqzvG6h8yiW0T4+GIRESkoTmthHbs2LHV1k0m15D8xzYjOrINlNBKw2dNa47pQ0g9DEvDYN2mPOx2B1arxdOhiYh4XLNOCUTOhEIrZG7JZ6inAxIRkQbntJocFxUVuV8rV64kISGByZMns3r1anbt2sXq1at56KGHSEhIYPny5WcrZhGvYWvbDCxmdz/asopKNmbv9GxQIiJewmQxkxoUAsCG0mIq7ZqvW0RE6tZp1dCGhoa6lydMmMAdd9zBhAkT3NuaNm1Khw4d8Pf358EHH+Sbb76pu0hFvJDJz4Y1sSmJG3dhBpxA5uY82iXGeTo0ERGvkJbUgiVrMik3wZZftpLSPdnTIYmISANS60GhfvzxR9LT04+7Lz09nZ9++qnWQYnUJ9a05vgZ0LLMtb52U65nAxIR8SId+rTDVNUz6bcVGzwbjIiINDi1TmibNm3KBx98cNx977//PlFRUbUOSqQ+saU1ByC5arTjbXl7OFxS5sGIRES8R0jLpsQ7XR83MvN3ezgaERFpaE6ryfGxJk2axJ133smWLVsYMWIETZs2paCggE8//ZTvv/+e119/vS7jFPFattQYMJtILjH4solrkLSsrTvo1r61p0MTEfEKqRERbD9QSHZlOSWHywgI9PN0SCIi0kDUuob29ttvZ86cOZSVlTF+/HhuuOEGxo8fT1lZGZ999hm33357XcYp4rVM/j5YWkeRUAa+uEb5ztyc5+GoRES8R4f2rQBwmmDtj+s8HI2IiDQktU5oAS699FKWLVtGWVkZO3fupKysjJ9++onLLrusruITqRdsac2xAG1KXB3FMtWPVkTELeXCNHycruU1q7d6NhgREWlQziihdV/EbCY6OhqzuU4uJ1Lv/L4f7c49+9m7/5AHIxIR8R4+4YEkmnwAyCrY6+FoRETq1tSpU/nxxx9rbDeZTDz77LMeiKhxqXUfWoAFCxbw0UcfkZeXR1lZ9UFwTCaTpu2RRsOaGgNAcsnRbZmb87iwW6qHIhIR8S7tYqJYtyuf3djZu7uIJtHhng5JRKROPProowQFBdGzZ89q25ctW0ZCQoKHomo8al2l+swzzzBkyBC+/vprTCYToaGh1V4hISF1GaeIVzMH+WFpEUFMBQSbXP+s1qkfrYiIW8duSe7l1d9nejASEZFz4/zzzycmJsbTYTR4tU5oX375Ze655x62bt3K/Pnz+fTTT2u8RBoTa0ozTBytpV27KQ/DMDwak4iIt0jokUyww7W8bmOOZ4MRkbNu2bJlXH755TRv3pzAwEA6d+7MjBkz3PsrKysZP3488fHx+Pr6EhMTw2WXXcaBAwdOaf/06dMxmUwUFhZWu2/nzp0ZO3ase33s2LG0b9+er7/+mo4dO+Lv70/fvn3Jzs5m3759XHPNNYSEhNCmTZsaU5L269ePSy+9lHfeeYc2bdrg7+9Pv3792LDh6JzaJpNrQNDx48djMpkwmUwsWrTIve/3TY5ff/112rZti6+vLy1btuQf//gHTqfTvf/Ic/3yyy9ccsklBAYGkpSUxDvvvFPLd6Lhq3VCu2/fPkaMGFGHoYjUb9YU1zdwSQddhdKBQyXk797nyZBERLyG2ddGss0fgA37D+gLP5EGbvv27fTq1Yv//Oc/zJ07l5EjR3Lrrbfy9ttvA/Dkk0/y2muvMWHCBBYsWMC//vUvmjdvTnl5+SntPx27du3ir3/9Kw899BCzZs1iy5Yt3HDDDVx77bV06NCBjz/+mPT0dEaPHs327durnbtq1SqefPJJpk2bxjvvvMPOnTsZPHiwO45ly5YBMG7cOJYtW8ayZcvo2rXrceP45z//yV133cXgwYOZO3cuY8eOZerUqTzwwAM1jr3hhhsYNGgQ//vf/+jSpQtjx44lKyvrtJ+9Mah1H9rLLruMH374gf79+9dlPCL1li2lGQBtf9ePNq5ZEw9FJCLiXVLjosnIyWa/ycnO3D00j2/q6ZBE5CwZNWqUe9kwDC688ELy8vJ4/fXXuemmm1ixYgWDBg3iT3/6k/u4kSNHupf/aP/p2LdvH4sXLyYtLQ2AHTt2MG7cOB588EGmTJkCQPfu3fnkk0/43//+x3333ec+d/fu3SxevJikJFe3iS5dutC2bVumT5/OnXfeyfnnnw9AfHy8e/l4HA4Hf//73xk1ahT/7//9PwAGDRpERUUFzz33HBMnTqRJk6OfGe+55x73s/fs2ZP58+fz8ccfM3ny5Fr9DhqyWtfQ3nzzzcyYMYOJEyfy7bffsmrVqhovkcbEHBOKKcSPcDtEWV2jea7bku/hqEREvEfaMf1o1/6omgaRhqyoqIh7772XhIQEbDYbNpuNN954g40bNwLQtWtXPv/8c6ZOncrKlSurNbs9lf2no3nz5u5kFiA5ORmAAQMGuLeFhYXRtGlTcnOrT73Yvn17dzILkJiYSKdOnVi+fPlpxbB+/XoKCwu5+uqrq22/9tprqaioYMWKFdW2Dxo0yL0cGBhIQkICeXkan+V4al1De+SX/NRTT/HUU0+524+D61sYk8mEw+E48whF6gmTyYS1bTMqV2aTVAZ7rLB+6w6cTqemtBIRAZp3bU3YbNhvhaxNeQz641NEpJ4aO3YsP/74Iw8//DBpaWmEhITw6quvuvupPvTQQ5jNZt5++20effRRoqKi+POf/8zDDz+MyWT6w/2nIywsrNq6j4/PCbf/fuaWpk1rtiSJjo5m586dpxVDUVGR+9zfXwtctch/FPPvYxOXWie03333XV3GIdIg2FJjqFyZTZs9FfwYAyWl5eTs2EvLuChPhyYi4nFmHyttfQNY7ihh/cED7i/ARaRhKSsrY968eTz//POMGzfOvf3YWlZfX1+mTp3K1KlT2bx5M//973+ZOnUqrVu3ZsyYMX+438/PD4CKiopq9z6SONaVgoKCGtt2795N586dT+s6ERERx73e7t27q+2X01frhLZv3751GYdIg2Bt6+pHm1h6dNu6LXlKaEVEqqTGN2P5tq0Umwxyt+wkPrG5p0MSkTpWXl6O0+l014QCHDp0iDlz5hz3+MTERJ544glef/314w58dLz9cXFxAGRlZdG8eXP38u+bDJ+ptWvXsnnzZhITEwHYvHkzq1ev5s4773QfY7PZ/rD2tG3btkRFRfHhhx9yxRVXuLfPnj0bHx8fzjvvvDqNuzGpdUIrIjVZ2zQFq5lQu5Nmvn7sKi8ja0s+Q/t28XRoIiJeIa17W9i2FYC1P61XQivSAIWGhtK9e3emTZtGVFQUVquVadOmERoa6q6hHDFiBOnp6XTp0oXAwEDmzp1LUVGRe8DZP9rfo0cPWrRowf/93//x5JNPcvDgQaZNm1ZtYKW6EB0dzWWXXcbf//53AKZMmUJsbGy1qYFSU1P57LPP6NOnD4GBgbRt25bg4OBq17FYLEyZMoV7772Xpk2bMnToUH766Seeeuop7r///jqPuzGpdcc+s9mMxWI56UuksTH5WrG2dtXGJlW6/g2s37YDh6P2AxmIiDQk0Z0TiKx0LWvgPJGG69133yUxMZGbbrqJe++9l6uuuoobb7zRvb9Xr17MmTOH0aNHc9lll7F48WJmzZrlHqjpj/bbbDY+/fRT/Pz8uPrqq3nyySd5/vnniY2NrdPn6Nq1Kw888AAPPPAAY8aMITo6mq+++gpfX1/3MS+//DJOp5NLLrmE7t27k5GRcdxrjRs3jldffZXPP/+cSy+9lDfffJOpU6fy9NNP12nMjY3JqOVEcC+++GKNfi9FRUUsWLCAHTt2cP/993P//ffXRYxn3apVq0hPTycjI+OE80aJnKrD//2Bsrmr+TXMzPQoVyI79Z6raBMf/QdnijROKoMbn9cmTWep/TABholXn7pLA+eJiFfq168fQUFBzJs3z9OhyEnUusnxiZLVqVOncuONN9YYqUuksbCmxsDc1SQeckJV19msLflKaEVEqqS2as7STZsoMRlkb8yjdUq8p0MSEZF66qx8JTp69Ghef/31s3FpEa9nqxoYKsgBzQMCADWrExE5Vvvz2rqX1y7f4MFIRESkvjsrg0Jt2LDhjCY/FqnPzBGBmKOCce45RBI2dgAbs3dgdziwqm+5iAgR7VsQXQm7bZC1bQeXezogEZHjWLRokadDkFNQ64T2+eefr7GtoqKCrKwsPvzwQ66//vozCkykPrMmR1Ox5xCJhRUsDoDyCjtbcwtIbhnj6dBERDzOZDGTHBDE7spiNh8uxul0qh+tiIjUSq0T2r/97W81tvn6+hIXF8d9993HlClTzigwkfrMmhxNxdLNtN5ZiqkNGLj60SqhFRFxSW0Zw5JNmygzwbYNebRJVT9aERE5fbVOaNWkWOTErMmuAaACnRAXFkLu/oNkbcln+MXdPByZiIh3SO3eFjZtAiBzxUYltCIiUitq3yNyFlhbRYHF9c8ryeoHwKbtu7DbHZ4MS0TEazTp0IKmVfPRrt+2w7PBiIhIvXVGCW1+fj7jx4/nggsuoG3btlxwwQU88MAD5OdrRFdp3Ey+ViwtmwCQeMiVxFZU2tmaV+DJsEREvIbJYibZPwiATVX9aEVERE5XrRPatWvX0qFDB1577TViYmLo378/MTExvPbaa3Ts2JHMzMy6jFOk3rEmuZodt8w+hMnk2rZ+q77sERE5IqWla5qzMpNB9iaVjyIicvpqndD+7W9/o02bNuTk5PDJJ5/w6quv8sknn7B9+3Zat2593EGjRBqTI/PRBhRXENckDID1W9WsTkTkiHbdkt3LmSs2ejASEWkoJkyYwNixY8nJySEoKIjy8vLTvsasWbPo37//WYju7FiyZAlt2rTxdBgeU+uE9ocffmDy5MmEh4dX2x4eHs5DDz3EDz/8cMbBidRnR2poAZIDXc3qNmbvxO5QP1oREYDIjvFH+9GqBYuI1KH4+HiKi4vx9fU96XGLFi2iWbNm1bbdcMMNfPvtt2ccw9SpUxk1atQZX+eP9OnThy1btrjXW7ZsyZdffnnW7+stap3QWq3WE37jUV5ejsViqXVQIg2BuXkopiBXIdqmzNXmuLzCTnbeHk+GJSLiNUxWC8n+gQBsKlY/WhEROX21TmgHDBjAQw89xMaN1ZsIbdq0iSlTpjBw4MAzDk6kPjOZTO5a2lY7Stzbs1QLISLi1jbeVTNSajLYvkXdMkTk9Pz22290796d4OBghg0bRlFREQDZ2dmYTCbKysoAmDFjBomJiQQHB9OiRQteeOEFDhw4wCWXXEJBQQFBQUEEBQWRlZXF9OnTOf/88933MJlMvPHGG6SkpBAaGsro0aOpqKhw7//iiy/o1q0boaGhtGjRgunTpzNv3jyeeOIJPv74Y4KCgmjZsuVJn8MwDJ5//nmSk5OJiIhg6NCh5OXlVYvhn//8J4mJiURERHD77be7KxePrWW+7rrryMnJ4YorriAoKIiHHnoIgBUrVnDBBRcQGhpKhw4dmDdvnvvaU6dO5corr2T06NEEBweTlpbG4sWL3fsPHjzIXXfdRVxcHM2aNeOee+5x/1737t3L8OHDCQ8PJzw8nB49elBYWHja7+OZqPU8tM8//zx9+/alXbt2tG/fnujoaAoKClizZg3x8fE8//zzp3W94uJiXn75ZVatWoW/vz9XXHEFw4cPP+6xl19+Ob6+vpiqRtpp164dU6dOde9funQpb7/9Nvv27SMlJYV7772Xpk2b1vZRRWrNmtSUyl9y8N9eRNz5EeQV7GP91h1cdlG6p0MTEfEK7bolwVZXU7nM5RtplRTn4YhE5EzsveLls3LdJp/+uca2yspKhg8fzu2338748eP57rvvGDFiBNdcc0214w4fPswtt9zCt99+S58+fdi3bx/bt28nNDSUL774glGjRrFr1y738cuXL69xr48++oilS5ficDi44IILmDlzJrfccgsZGRlcc801vP/++wwZMoSioiJyc3Pp0qULkyZNYv369bz//vt/+Hz/+te/mDVrFgsWLCA2NpZHH32UUaNGVevG+f777/Pjjz8CMGzYMB5//HH+/ve/V7vOe++9x7Jly3jttdcYMmQIAEVFRQwZMoSnnnqKm2++mW+//ZYrrriCn3/+mdTUVADmzJnDW2+9xfTp05k1axbDhw9n27ZthIeHc/PNNxMcHMy6detwOp1ce+21PPbYYzz++OM8++yzOJ1O8vPz8fX15ddff8XPz+8Pn7cu1bqGNj4+njVr1ri/SXA6nSQnJ/PCCy/w22+/0aJFi9O63uuvv05lZSVvvfUWU6dO5aOPPiIjI+OEx7/wwgvMnj2b2bNnV0tmc3Nzeemll7j77ruZNWsWLVu25Omnn67tY4qcEWtyVT9ah5O2VQNDbdy2E4dDzepERACiOrUkqqofrVqwiMjpWLZsGYcPH2bChAnYbDYGDRrE4MGDj3uszWZj3bp1HDx4kIiICLp06XJa95o0aRJNmjShadOmDBs2jFWrVgHw73//m5tuuolhw4ZhsViIjIw87WsDvPrqq/zjH/+gZcuW2Gw2pk6dysqVK8nJyXEfM2HCBJo2bUrTpk2ZPHky77777ilde/78+SQkJHD77bdjtVoZNGgQl112WbXzO3XqxJgxY7Bardx00020atWK+fPnU1BQwJw5c/jnP/9JSEgIYWFhTJ48mffeew8AHx8f9u7dy+bNm7FYLKSnpxMUFHTaz38mzmge2qCgIO69915mz57NwoUL+eCDDxg3btxpP0RZWRlLly5lzJgxBAQE0LJlSwYNGsTChQtPO6ZFixbRtWtXunTpgq+vL9dffz3btm2r9scgcq5Yk44OMpDotAFQVlFJdr760YqIAJhsFpJ8AwDYfOgQTqfh4YhEpL7YsWMHsbGxmM1HU5qEhIQaxwUGBjJnzhw+/fRTWrRoQd++fVm2bNlp3evYgaMCAgIoLi4GICcnh8TExFo+wVHZ2dlce+21hIWFERYWRmRkJGazuVqz4/j4ePdyQkIC+fmn9iVgfn5+jSbPLVu2rHb+sdc+9vrZ2dk4HA5atGjhju3SSy+loKAAgPHjx9O7d29GjhxJ8+bNeeCBB6isrDzdxz8jZ5TQAmzcuJGZM2fyzDPPMGvWLDZs2HDa18jPz8cwjGp/gK1atTppEjp58mTGjBnD3//+92rHbd++nVatWrnXAwICaNasGdu3bz/tuETOlDnED3NMKACtC48OoqbRPEVEjkpNcH1QLDEZbN+208PRiEh90bx5c/Lz86sNKHei/GHAgAF8+eWX7Nmzh2HDhrmbJR/pwlhb8fHxbN68+bj7Tufa8fHxzJkzh/3797tfpaWl9OzZ033Msc+Wk5NDbGzsKd03NjaW7Ozsatuys7Ornf/739uR68fHx2O1WikoKHDHdeDAAXdCHxQUxNNPP82mTZtYsmQJ//vf/3jnnXdO+bnrQq370BYXF3PHHXcwe/ZsnE4nfn5+lJWVYTabufrqq/n3v/99yjW1ZWVlBAQEVNsWGBhIaWnpcY9/4oknaNu2LZWVlXzyySc8/PDDvPLKKwQEBFBWVkZgYOAfXquwsNDdYXnbtm2n+tgip82a1JSKnQfw37qX2OQI8nfvI2vrDob16+rp0EREvEK79CTYthWAdSs20KpNcw9HJCK1dby+rmfLBRdcgL+/P08//TR//etfWbx4MV9++WWNPrS7d+9m2bJlDBgwgMDAQIKDg90zskRHR1NUVERRUVGN6UhPxW233Ub//v0ZNmwYgwYNoqioiLy8PDp37kx0dDRffPEFTqezWi3y8dx999089NBDvPPOO7Rp04aioiIWLlxY7Vmefvpp92BVjz/+ONddd91xrxUdHV1tGp+hQ4cybtw4/vvf/3LjjTeyaNEi5s6dy88//+w+ZvXq1bz77rtcc801vPfee2zZsoWhQ4cSERHBsGHDuO+++3jiiScICwsjLy+PzMxMhgwZwrx580hOTiYxMZGQkBBsNts5n+2m1jW048aNY968efz73//mwIEDlJSUcODAAd544w3mz5/PuHHjTvlafn5+NRLOkpIS/P39j3t8+/btsdlsBAQEMHr0aCwWC1lZWe5rlZSUVDv+eNf6+OOPGT16NKNHj2bKlCmnHKvI6bImuvrROgsOkRLrGpxsY7b60YqIHBHVqSWRR/rRblYLFhE5NTabjc8++4yPPvqI8PBwXnjhBcaMGVPjOKfTyYsvvkhcXBxhYWFMnz7d3X80JSWF0aNHk5iYSFhYmDunOFXdunVj1qxZTJo0ibCwMLp27crq1asBuPrqq7HZbDRp0oQ2bdqc9Drjxo1j1KhRXHrppYSEhNCpUye++uqrasdcc801XHDBBSQnJ9O+fXv3CMa/N3HiRJ5++mnCwsKYMmUKERERfP7557z++us0adKE+++/n3fffdc9IBS4Bt39/PPPCQ8P58knn+TTTz8lIiICgLfffhubzUbnzp0JDQ1l8ODB7pluNm/ezJAhQwgODqZjx44MGjTouO/B2WQyDKNWnVVCQkJ46qmnuPvuu2vse+WVV5g4cSIHDhw4pWuVlZVx/fXX8+KLL7rbb8+cOZO8vDwmTJjwh+ffdttt3H333aSnpzNjxgzy8/Pd55WWljJmzBief/75am3Dj62hzczM5KqrriIjI4OuXVVrJnWrcv0uDk78GID1N3bltWWuQQQeHXc1rVto9G2RVatWkZ6erjK4kXvlwf+yzCglABOvTrsbs/nMmgGKiDQkJpOJrKwsUlJS6vzaU6dOPeXRmL1RrWto/fz8qvVVPVbr1q2x2Wynda1evXoxY8YMSkpK2L59OwsWLDjuXLY5OTls2bIFh8NBeXk57777LhUVFbRt2xaAfv36sWrVKn799VcqKip49913admyZY2OzpGRkaSkpJCSknLC5xCpC9ZWkWBx/VNrU3y0Vlb9aEVEjkqJc7VmKcEgL7fAw9GIiEh9UeuE9uabb+bVV1/l9xW8hmHwyiuvcPPNN5/W9e68804sFgtjx47l4YcfZuTIkaSnu+bqvOaaa8jMzARg//79PPvss4waNYpbbrmFDRs28Oijj7r767Zo0YJ7772Xl19+meuvv56tW7fywAMP1PYxRc6YydeKJcHVZCMgex/Nm7r6Z2Rt3eHJsEREvEpq16OjhGb+tN6DkYiInB1paWkEBQXVeD3xxBOeDq1eO61BoZ5//nn3cpMmTcjIyCApKYnLLruMpk2bUlBQwNy5cykvL6dPnz6nFUhQUNAJmxfPnj3bvdyxY0deffXVk16rd+/e9O7d+7TuL3I2WROjcWwtxL6pgJQRbdhRUMSGbTtOaZAAEZHGoFl6a5p8BHttsH5zPpd4OiARkTp2pIKuNmrZS/SUTJ069axd+1w4rYT2b3/723G3v/TSSzW2TZgwgfHjx9cuKpEGxprUlPIFmRiHymjbJIJvgdKyCnJ27KVlXJSnwxMR8TiTn40kmx97KWPjgQMYhnHG02mIiEjDd1pVQ06n85RfDofjbMUsUu9Yk6Ldy4mVR//ZZakfrYiIW9uqkeCLcZKXu8fD0YiISH2gto4i54AlLhx8XQ0iAnP3ExMVBmhgKBGRY7XrcnRai3UrNngwEhERqS9Oq8nx7zkcDpYvX05eXh5lZWU19t94441ncnmRBsNkMWNtE4V93U7smwtI7RrLzj37Wb9tp/rRiohUaZbehvBPv6PIBlmb8hjs6YBERMTr1TqhXbVqFVdeeSW5ubnH7aRsMpmU0Iocw5oU7Upot+yh7ZVpfLs8k5LScnJ27qVlrPrRioiYA31JsviygnI2Fu1XP1oREflDta4WuvvuuwkNDeXbb79l9+7dFBUVVXvt27evLuMUqfesia6+YZTbSfILcG9fr+l7RETcUpq7yspDOMnfsdfD0YiIiLerdUKbmZnJtGnT6Nu3L1FRUYSGhtZ4ichRxw4MFbzzEM0iXf9GNDCUiMhRacf0o81crvloRUTk5Gqd0CYnJ3Pw4MG6jEWkQTM3DcYU4geAfdNuUlrHArBh6w6czrM3t5iISH3SrHsbwitdy1kbcj0bjIiIeL1aJ7QvvPACTz75JOvX69tTkVNhMpnczY7tmwpIbeNKaA+XlpO7q9CToYmIeA1zkB/JFl8ANlT1oxURETmRWg8Kdc8997Br1y7at29P8+bNCQsLq7bfZDKxevXqM41PpEGxJkVTuSoHx/a9pMQdbYK8bnM+Cc01MJSICEBKbFOW78x1zUebX0iLOJWPIiJyfLVOaNPT0zXyoMhpsiZVDQzlNAjeW0KzyDB2Fe4na0s+l1zY2aOxiYh4i3ad2sBOV3PjzBUblNCKiMdNnTqV9evX8/7773s6lON64okn2LhxI9OnT/d0KOdcrRPaxvjLEjlT1sSjtbL2TQW0axPLrsL9bNi2Q/PRiohUada9DU3mLmKvDbI25DDE0wGJiHi5SZMmuZezs7Np1aoVpaWl+Pn5eTCqc0OfnkXOIXOoP+amwQDYN+9296MtKasgO1/9aEVEAMzBfiRV9aPdWHRAA+eJiEfZ7XZPhyAnUeuE9pZbbvnDl4jUdGT6nmMHhgLI2pLnqZBERLxOSqyri4arH+0eD0cjIt5q48aNDBw4kPDwcJKTk3nzzTcpLy8nPDyclStXuo8rLy8nIiKCFStWALBy5UouvPBCwsPDSU1N5ZNPPnEfO3bsWO666y6uuOIKgoKC+PDDD2vc97rrriMmJobQ0FD69OnDmjVrqp1/5513MnToUIKDgznvvPNYu3btHz7LwYMHueuuu4iLi6NZs2bcc889lJWVAbBo0SKaNWvGM888Q9OmTYmLi+Oll15ynzt16lRGjRoFQM+ePQGIjIwkKCiIL7/8EoC3336blJQUwsLC6N+/f7XBffv168fEiRPp2bMnwcHBXHzxxeTmHh1pftOmTVxyySVERkbSpk0bXnnlFfe+n3/+mR49ehASEkJUVBQ33HDDHz5rXap1k+NffvmlxraioiJyc3OJjIwkNjb2OGeJiDWxKRVLN+PceYBQzMRGh5O/u4h1W/IZ1q+rp8MTEfEK7Tof04925UbiWzT1cEQicirGPPDyWbnujKf/XGNbZWUll156KaNGjWL+/Pn89ttvDBkyhISEBK6++mpmzZpF9+7dAfj888+JiorivPPOY+fOnQwZMoQ333yTyy67jJ9//plLLrmE1NRUUlNTAZg5cyZz587lk08+oaysjKeeeqravQcNGsTrr7+Or68vkyZN4rrrrquWtM6YMYM5c+bw2Wef8dRTTzFixAjWr1+P1Xri9Ovmm28mODiYdevW4XQ6ufbaa3nsscd4/PHHASgsLGTbtm3k5OSQmZnJwIED6dChA/379692nR9//JFWrVpRWFjobnK8aNEi7r//fr744gu6du3KM888w7Bhw1i3bh2+vq4WMf/973/54osvaNeuHffddx+jR49m8eLFlJSUcPHFFzNx4kTmzJnD1q1bGThwIElJSQwcOJBx48Zx+eWXs2zZMioqKsjIyDjdt/eM1LqG9pdffqnxys7OZu3atcTExPDcc8/VZZwiDcaRGloA+5YCUtvEAbBx207sDoenwhIR8SrR3drQRPPRishJLF++nKKiIh555BF8fHzo1q0bt912G2+//TajR4/m/fffx1H12WrWrFnumsMZM2YwYMAARowYgcVioUePHlxxxRXVamIvvfRSLrroIkwmE/7+/jXuffPNNxMSEoKvry8PP/wwmZmZ7N27173/kksuYcCAAdhsNiZOnMiBAwf46aefTvgsBQUFzJkzh3/+85+EhIQQFhbG5MmTee+999zHOJ1OnnzySfz8/EhPT+emm27i3XffPaXf1cyZMxk7diznn38+Pj4+TJw4kdLSUn744Qf3MaNHj6Zr1674+fnx1FNPsWTJEvLy8pg3bx4xMTHcfffd2Gw22rZty+233+6OzcfHh+3bt7Njxw78/Pzo1avXKcVUV+q8D21qaioPPvgg//d//1fXlxZpEKytI8HsGiH8yMBQAGUVlWTnqVmdiAi4+tEmu/vR7lc/WhGpIT8/n7i4OCwWi3tby5Ytyc/Pp0+fPvj5+fHNN99w4MAB5s+fz+jRowHXoEmfffYZYWFh7tcHH3zAzp073ddJSEg44X0dDgcTJkygTZs2hISEuI8tLDw6Hkp8fLx72WKxEBsbS35+/gmvmZ2djcPhoEWLFu6YLr30UgoKCtzHhIaGEhoaWi3Gk13zWPn5+bRs2dK9bjabiY+Pr3b+sTGHhYUREhJCfn4+2dnZ/PLLL9V+X08//TS7du0CXDW7JSUldO3albS0NP773/+eUkx1pdZNjk8mNDSUzZs3n41Li9R7Jn8fLHHhOHL2Yd+0m5Shae59WVvzSUxo5sHoRES8R0rzpizblcthnOTkFdAyPvqPTxKRRiM2Npa8vDwcDoc7qc3OziY2NhaTycT111/PzJkzyc3NpUuXLrRu3RpwJW6jRo066awtJ5ue9N133+WTTz5h4cKFtGrVioMHDxIWFoZhHP3iLScnx73scDjIz88/aZfM+Ph4rFYrBQUF+Pj4HPeYAwcOcPDgQUJCQtz3ON41jxd7bGws2dnZ7nWn00lubm6184+Nef/+/Rw8eJDY2Fji4+Pp2bMnixYtOm5cbdq0YebMmRiGweLFixk0aBAXXnghiYmJJ3zeulTrhHbfvn01tlVUVJCVlcWkSZNo3779GQUm0pBZk6LdCW14gB8tmjUhd9desrbkc9lF6Z4OT0TEK6R1TYTPXc2N1yzfoIRWpB44Xl/Xs6VHjx6EhYXx2GOPMWnSJNauXcubb77JrFmzAFcT2h49erBp0ybGjBnjPm/06NGkp6czd+5cLrnkEpxOJ7/88gshISHuPrQnc+jQIXx9fWnSpAmlpaVMnjy5xjFffvkl3377LX369OGZZ54hODiYHj16nPCazZo1Y9iwYdx333088cQThIWFkZeXR2ZmJkOGuCYvM5vNTJo0ieeee45169bx9ttvM3v27BrXioqKwmw2s2XLFtLSXBUnN9xwA1deeSXXXXcdXbp04dlnn8XHx4fevXu7z5s1axZjxowhJSWFiRMn0qtXL+Li4rj00kuZMGECb775JqNHj8ZisZCVlUVZWRndu3fnnXfeYciQITRt2pSwsDBMJlO1WvOzrdZNjiMjI4mKiqr2io2N5eKLL6aoqIhXX321LuMUaVCsSa7BTYz9pTj3FrtHO96wbSd2u/rRiogARHVrTXSFa3ndxpyTHywijY7NZmPu3LksWbKEpk2bcu211/L4448zaNAgANq1a0dSUhIZGRlce+217vPi4uL4/PPPefHFF4mOjqZ58+ZMnDiR8vLyU7rvjTfeSOvWrYmNjSU1NdU98NSxRo8ezbPPPkt4eDiffvopn376KTab7aTXffvtt7HZbHTu3JnQ0FAGDx7Mxo0b3fsjIyNJSEigRYsWXHrppUyePJmLL764xnUCAgKYPHkyF110EWFhYXz11VdcdNFFPPfcc4wZM4aoqCgWLFjA/Pnz3QNCgWt05j/96U9ERUWxYcMG9xcDQUFBLFy4kDlz5tCiRQuioqK44447OHjwIAALFy6kQ4cOBAUFcfXVV/PKK6/QqlWrU/pd1gWTcWzd+GmYPn16jepsPz8/4uLi6NGjx0lH8PI2q1atIj09nYyMDLp21SizcvbZt+zhwN9c36gFPTCENcEmXnrnCwAm330FbVs192R4IueUymA5mTfGv8kSUxk+mHj9yTuxnsNv/UVEamPs2LE0a9aMadOm1dk1Fy1axKhRo9z9Vutav379GDVqFHfddddZuf7ZVOusc+zYsad8rGEYPPbYY9xxxx00a6b+gSKWhAiwWaDS4ZqP9uqumEwmDMMgc3OeEloRkSrt4mNYkruNCgy2bNlJ2+Q4T4ckIiJepM5HOT4ep9PJo48+yo4dO87F7US8nslqwdo6CgD7pt0E+vvSKs61nrkpz5OhiYh4lbTuSZiq2pKtXbHes8GIiJyBnJwcgoKCjvtasmSJp8Ort85Zu+BatmwWabCsiU2xb9iFY0sBhtOgfVILtuYWsCVnN6VlFfj7HX+EOxGRxiSsUwJx70KuH2RuyWekpwMSEfkDJxo9OT4+nuLi4lpds1+/fmetuTFwwhGM64NzUkMrIjW5B4YqrcSRX0S7RFczOofTyYZtas0gIgKuqc5S/AMB2Hq4mLKKSg9HJCIi3kQJrYiHWJOP9ie3b9hFUkIzbFbXYCeZm9XsWETkiHatXeMKOIAN6zXasYiIHKWEVsRDzM1CMIX4Aa5+tD42q3swKPWjFRE5KqVHWyxO1/LalRtPfrCIiDQqSmhFPMRkMmFNigbAvnE3AGlJrmbHubv2cuBQicdiExHxJoHtYml5ZD7a7Ts9G4yIiHgVJbQiHmRNdiW0jpx9GKUVpCUenY5inZodi4gAYPKxkhoUAkBuaSnFJWUejkhERLzFGSW0hYWFPPTQQwwYMIC0tDQGDBjA5MmT2bNnT7XjLBYLb731Fq1atTqjYEUamiMJLU4D+5Y9JDSPJCjAF4C1SmhFRNzSklsAYJggc802D0cjIiLeotYJ7fLly0lKSuJf//oXoaGh9O3bl9DQUP75z3+SmJjI8uXLqx1/0003ER4efsYBizQkR5ocg6sfrdlsJrWNq5Y2c1OuprsSEamSeH4yfg7X8uqfN3g2GBER8Rq1nof2z3/+M2lpaXz++eeEhIS4tx84cIBLLrmEe+65h5UrV9ZJkCINlTnQF0tsOI78IuwbqvrRJsaxcs0W9u4vZnfhAZpFhXk2SBERL+Cb1IzkCjO/+TtZm7cbwzAwmUyeDktERDys1jW0mZmZTJgwoVoyCxAaGsqECRNYu3btGQcn0hgcaXZcucmV0LZPOtqPds2mXI/EJCLibUwWM+2jmgBQ5LCTv3ufhyMSERFvUOuENjExkf379x9334EDB2jdunVtLy3SqBxJaI19h3EUFtO0SShNI1xfFK3ZoPkWRUSO6NDp6GeL337W9D0iInIGCe0zzzzDI488wuLFi6ttX7RoEVOnTuXZZ5894+BEGoNq/Wg37sJkMtGhbTwA67bkUWl3eCo0ERGvEnN+MlFV0/esWauBoURE5AwS2vHjx3PgwAH69+9PREQEbdu2JSIigosvvpgDBw7w4IMP0rFjRzp27EinTp3qMmaRBsWSEAE+ru7sR+aj7ViV0JZX2NmYrTkXRUQALNEhpOIDwIZ9+6motHs4IhER8bRaDwqVnp6uwRhE6oDJasHaJgp71k7sVf1o27WJxWoxY3c4+W399mrz04qINGbtE2L4fud2KjHYsDmfDqkJng5JREQ8qNYJ7fTp0+swDJHGzZoc7UpoN+/BsDvw8/WhbavmZG7O47eNOVxHL0+HKCLiFdr3aIvlk+04zPDb8vVKaEVEGrlaNzkWkbpzZGAoKuw4trtG7jzSjzZv1z727S/2VGgiIl4lsHMCrctdy2u25ns2GBER8TgltCJewNq2mXu5coOrz2ynqoQW4LeNGu1YRATAHOBDu8BgAPLLSik6cNjDEYmIiCcpoRXxApYmQZijXB/Q7Fm7AIiNjiAiNAiA3zR9j4iI27HNjFev3uzBSERExNOU0Ip4CWuqq5bWvt5VQ2symdyjHa/dlIvdoel7REQAWp3flpCqAY5/zdB8tCIijZkSWhEvYWsbA4CzsBhH4SHg6PQ9pWUVbMnZ7bHYRES8iS2xKWkVFgDW7tqj+bpFRBoxJbQiXuJIDS0cbXaclhiH2eyaHmv1+u0eiUtExNuYLGY6xboG0ys3DNZvzvNwRCIi4ilKaEW8hCW+CSZ/G3C02XGAvy/JLV01t6vWZXsqNBERr9Ph/FRsTtdyxk9Zng1GREQ8RgmtiJcwWcxYk121tJVVCS1A13atAMjfvY/dew94JDYREW8T1L0lSaWu5dWbczEMw7MBiYiIRyihFfEiR5odO7L3YpRWANA1rZV7/6rMbR6JS0TE25iD/OgQHApAYUUF+bv3eTgiERHxBCW0Il7EmuJqXozTwL7JNQhUdJNQYqMjAPhFzY5FRNy6dm7jXs74eYMHIxEREU9RQiviRWzJ0VA1CFRl1cBQAF3btQRgQ/YOikvKPBGaiIjXadqrLXFVReKvq7d4NhgREfEIJbQiXsTk74MloQlwdGAoONrs2Ok0NNqxiEgVS1w4aSYfALYcOMihw6UejkhERM41JbQiXuZIs2P7hl0YDtcQnq3jogkNDgAgQ/1oRUQAMJlMdElqAYABrF671bMBiYjIOWf1dABHFBcX8/LLL7Nq1Sr8/f254oorGD58eI3j1q9fz3vvvcfmzZsBaNu2LbfddhvNmzcHYM2aNUyePBlfX1/3OVdddRXXXHPNuXkQkTNkS21G+RdrMEorceTsw9oqErPZRJfUlixasY41G3KotDuwWS2eDlVExOPa9EolZOsWDlph5U9Z9O6R5umQRETkHPKahPb111+nsrKSt956i4KCAqZMmUJcXBzp6enVjjt8+DADBgzggQcewMfHh1mzZvGPf/yDV155xX1MaGgo77zzzrl+BJE64R4YCqjM2oG1VSTgmr5n0Yp1lFVUkrUlj45tEzwVooiI1/BtH0eHMhNLgwzW7CigrLwCP18fT4clIiLniFc0OS4rK2Pp0qWMGTOGgIAAWrZsyaBBg1i4cGGNY9PT0+nTpw+BgYHYbDZGjBhBXl4eBw8e9EDkInXPEhWMuWkwAPa1O9zb05Li8LG5voNSs2MREReTzUK35lVzeBsGv2o0eBGRRsUrEtr8/HwMwyAh4WiNU6tWrcjJyfnDc9euXUt4eDghISHubYcOHeLGG2/k1ltv5eWXX+bQoUNnJW6Rs8XWPhaAyrX5GE4DAB+blY5t4wH4ee1WnE6nx+ITEfEm7fq0I9DuWl7+4zrPBiMiIueUVyS0ZWVlBAQEVNsWGBhIaenJRyvctWsXr7/+Orfddpt7W1xcHC+99BLTp09n2rRp7N27lxdffPFshC1y1tg6xAFgHCrDkbvPvf28jokAHCwuJWvrjuOeKyLS2Ph1b03HEtfybzk7KK+o9GxAIiJyznhFQuvn51cjeS0pKcHf3/+E5+zZs4cpU6YwcuRI+vTp494eHh5OfHw8ZrOZqKgo7rjjDjIyMigvL692fmFhIevXr2f9+vVs26bmm+JdrO2bu5cr1+S5l7ukJribHS9fvemcxyUi4o3MAT6kN4sGoMIwWJ2l6c1ERBoLr0hoY2NdzSuPbWK8bds24uPjj3t8YWEhkydPZvDgwYwYMeKk1zabzRiGgWEY1bZ//PHHjB49mtGjRzNlypQzewCROmaJDMbczNWMvnJtvnu7n68PnVJcTfNXrtmKw6FmxyIiAGm9UwlwuJaXL8v0bDAiInLOeEVC6+fnR69evZgxYwYlJSVs376dBQsWMHDgwBrH7t27l4ceeoh+/fpx1VVX1dj/22+/sXv3bgzDoKioiDfeeIPOnTvj5+dX7biRI0cyc+ZMZs6cyWOPPXbWnk2ktmztXc2O7Zk73P1oAc7v5Gp2XFxSxrotecc9V0SksQno0YaOh13Lq7N3UFFp92xAIiJyTnjNtD133nkn//rXvxg7diz+/v6MHDnSPWXPNddcwyOPPEJaWhoLFixg586dfPrpp3z66afu819++WWioqLYunUrL774IgcPHiQoKIiuXbty00031bhfZGQkkZGu6VBKSkrOzUOKnAZb++aUf70Oo7gcx/ZCrK2iAOiUkoCvj5XyCjs/rd5Mh+Tjt2QQEWlMzMF+dI2K5KfyQsqdTn7bsJ1u7dt4OiwRETnLvCahDQoKYsKECcfdN3v2bPfyddddx3XXXXfC64wYMeIPmyGL1AdHBoYCqFy7w53Q+vrY6JLaip9WbyJj7VZuvqIvVqvFU2GKiHiNDr3a4b/we0otrtGOldCKiDR8XtHkWERqMkcEYm4eBlQfGAqgR1Wz48Ol5azdlHuuQxMR8UoB57ehQ1Wz41Vb8ygtq/BsQCIictYpoRXxYraq0Y7tmTswjhkAqmPbePx8bQAs/22zR2ITEfE25rAAzo9oAkCF08nKtVs8HJGIiJxtSmhFvNiRgaGMkgoc2Xvd231sVtLTWgHw85qtlGnORRERANIuTCO8qkj8YckazwYjIiJnnRJaES9mO8F8tAC9uqYAUFZRyc9rVAshIgLg1zuJblXNjtfv3ENh0SHPBiQiImeVEloRL2YOD8TSIhyAyl9zqu1LS4ylSVgQAN+vXH/OYxMR8UbmID96tqxq3QIs/Vnlo4hIQ6aEVsTL2bomAFCZuQOj9OgAJ2azmT7prlrarK35FOw94JH4RES8TfzFHUgodS3/sCwTwzBOfoKIiNRbSmhFvJxPVUKL3Unlmvxq+/p0S3EvL1EthIgI4Poi8LwK18yEu4oPszW3wMMRiYjI2aKEVsTLWVNjwM81onHFqu3V9jVtEkpKa1c/2yUZ63E6nTXOFxFpbEw2Cz06JWKpKhKXLM/0bEAiInLWKKEV8XImmwVbR1d/sMpV22s0nevbPRWAvfuLydycX+N8EZHGKOLiNNpXDQ617JdNlGs0eBGRBkkJrUg94JPuanbs3FOMI6+o2r5uHdq456Rd8nPWOY9NRMQbWZOjucAaAECJ3c5Pqzd5OCIRETkblNCK1AO2rvHu5crfNTv287FxfqckAH5eu5VDh0vPaWwiIt7IZDLRqXcaTarG0lu46FcNDiUi0gApoRWpByyRwVjiIwCoyNheY3+/89oBUGl38N3ydec0NhERb+U/oB29DrqWt+8pYkvObs8GJCIidU4JrUg9cWT6HnvWzmrT9wC0iY+mTXw0AF8vW4Pd4Tjn8YmIeBtLkyD6JCVgqxocauGS1Z4NSERE6pwSWpF64kg/WuxOKn/Lq7F/cK+OABQdOMzPa7aey9BERLxWk2Gd6HLItbxizRYOFJd4NiAREalTSmhF6glrSjNM/lXT9xyn2XH3jm0IDwkE4Kulv53T2EREvJW1QxwX+gQBYDcMFq9QtwwRkYZECa1IPWGyWrB1dg0OVbFiG4aj+pyzVouFiy9oD8Dm7bvYmqu+YiIiJpOJ5EGdSagaL+/bJb/hcGjObhGRhkIJrUg94tOrDQDGgVLsmTtq7L+oRxo2qwWAr35QLa2ICIDvRW3pc9j1kWfv4VJN4SMi0oAooRWpR3zSW4KPFYDypTU/kIUE+XNBl2QAlv+2mX0His9leCIiXskc5Mf5XZIJr3Stz/n6Z5xOTeEjItIQKKEVqUdMfjZ8urkGh6pYtrVGs2OAwb1dg0M5HE7mL/rlnMYnIuKtAod1pH+Ra3lH4X4yMjV4nohIQ6CEVqSe8emVCIBxqIzKNfk19sfHRJKe1gqA75ZnUnTg8DmNT0TEG1lbR9G7VRzBdtf6Z1+vxDBUSysiUt8poRWpZ3zSE8DX1ey4Yunm4x4zYkB3ACrtDuYtWnXOYhMR8WahV3Xnoqpa2u0797JmY45nAxIRkTOmhFaknjH52vDp3hKAip+2YNgdNY5pGRulWloRkd+xtovhwuhoAqqKzc8W/uzZgERE5IwpoRWph3x6VjU7Li4/brNjUC2tiMjvmUwmwq/uxoX7Xesbc3axdlOuR2MSEZEzo4RWpB7y6ZoAfidvdqxaWhGRmmxdE7goJBz/qlra9+YuxenUvLQiIvWVElqResjka8WnuytZrVi2BaOs8rjHHVtL++FXP52z+EREvJXJZKLJyO4M2udaz9m1lx8yNng2KBERqTUltCL1lG//VACMkgrKf6g5Jy24amkv6JwEwJKf17MlZ/c5i09ExFv5XNCGvqERNKlwrX/4xU+UVRz/i0EREfFuSmhF6ilbxzjMzUIAKPsq84THjRraEx+bq3nyO599j9OpaSpEpHEzWcyE3tiTy/a61vcXl/D5Ys3bLSJSHymhFamnTGYTfoPSAHBsLsC+ueC4x0WEBXF5/3QAtuYWsHSVmtaJiNi6xNOtdRytSl3r879bpbEGRETqISW0IvWYb/9UsLr+GZ+slvaSCzsTFeGqzf3g8x8pLas4J/GJiHgrk8lE4NheDC90rVfYHbzz2fcYhlqxiIjUJ0poReoxc6g/Pj3bAFC+ZCPOw+XHPc7HZuX6S3sBcKC4lA+/1ABRIiLWVpG07ZlCjwOu9Z/XbmXFmi2eDUpERE6LElqRes5vcHvXQrmdisUbT3hcelorOiTHA7DwxzVkau5FERH8r+vB8AMWQuyu9bc/Xcyhw6WeDUpERE6ZElqRes6aGoOlRTgAZV+uPWFzOZPJxK1X9SPAzweAN2Z/y+HS49foiog0FpbIICKvPY9rqoYhOHS4jBmfLfFsUCIicsqU0IrUcyaTCd+qWlpH7j4qf84+4bFNwoK5ccSFAOw7UMzMOfrQJiLid3lnOjWLIv2ga33Zr5v4ee1WzwYlIiKnRAmtSAPgd3EqplB/AEreW3HSQU16dkmmewdXv9sfMjawUv3FRKSRM1nMBP25P1fuMxFU1fT437O/YffeA54NTERE/pASWpEGwORnw/+KrgA4thVSsXzbiY81mRh7RV9Cg1wJ8BuzvyF/975zEqeIiLeytookckQ61+8GkwElZRX8v3e+oLyi0tOhiYjISSihFWkg/IakYQpzJamlH6zAcJ64ljYkyJ87Rw3AZDJRVl7Ji29/rv60ItLo+V/djQ5NwhlU9R1fzs69TP9UU/mIiHgzJbQiDYTJ14b/lekAOLL3UvHTyZsSd0iOZ9TQCwDYVXiAV95dgNPpPOtxioh4K5PNQtBfBzO42ELqYde2HzLW882ytZ4NTERETkgJrUgD4jcoDVN4AACl76/EcJw8Qb3kws706poMwG8bcnhv/o+qiRCRRs2a0ISQuy9i9C6IqGpt/M5nSzTegIiIl1JCK9KAmHyt+F9VVUubu4/yrzJPfrzJxC0jL6J1i6YAfLlkNZ8sXHHW4xQR8Wa+/doSMag9t+0APwcYhsEr7y5gzUbN3y0i4m2U0Io0MH4D07DEuualPTxjGY6Cgyc93sdm5f4bh9K0SQgA//v6Z+Z8+/NZj1NExJsF3tKbFvFNuWMH2Jxgdzh56Z3P2bx9l6dDExGRYyihFWlgTDYLgX++CExAWSWHX1v8h82Iw0MDmXjHCCLDgwH48MvlzFu06hxEKyLinUw2CyETh5IYEszNO8FsQHmFnaf+M4fMzXmeDk9ERKoooRVpgGypMfgN7QBA5S85VCze+IfnRIYHM/HOEUSEBgHwwefLmPHZEg0UJSKNljkikJBHLifN5s/oXa7pfMrKK3nmzbn89OsmT4cnIiIooRVpsAJuOB9zlCs5PfzmEpz7Dv/hOU0jQph053CahLnOW7D0N154+wvKyivOaqwiIt7K0jyMkIcvI93pw607Xc2PHQ4nr7y3gC++/1UD6YmIeJgSWpEGyuTvQ+DdFwFgFJdzaNrnGOX2PzwvOjKMqeOucg8U9WtWNo+98gk7C4rOarwiIt7K2jqK4IeG0d5h40/5EOAAw4B35y3l5VkLKC3Tl34iIp6ihFakAfPpEo/fZZ0AsG8qoPj/fY3h/OPahLDgQCbdOYLuHdoAkLNzL5Nfms13yzNVGyEijZKtXXNC/3EFrf38uS8XmlTlsMt/28zklz5gW16BZwMUEWmklNCKNHABN/XElp4AQMWPWyh9d/kpnefrY+OeGwZz5cDzMJlMVFTa+e/Hi3jxnS/Yd6D4bIYsIuKVrG2iCH1yJDGRofwtFzodcm0v2HuQR1/+mNlfLKO8otKzQYqINDJKaEUaOJPFTPBfB2Fp2QSA0o8zKJ3z6ymdazabuGJgd6b86UqaRrim9VmVuY0HnpnFnG9/pqLyj5swi4g0JJZmoYQ+OZLglBjG7oKrCsBquPrVzv1uFROee49fs7I9HaaISKOhhFakETD5+xD80DBM4QEAlLy1lMP//eGUmh8DJCU04x/3X0vf7qmAa+qKD79czsTn3uOHjA04HBoJWUQaD3OoPyF/H0HANd3ofRD+lgNtSlz7CosO8dxb83nitf+xfusOzwYqItIImAx1iGPVqlWkp6eTkZFB165dPR2OyFnjyCvi4GNzcRa42sn5XNCGoPsGYPK1nvI1NufsYsZnS9iae7S/WFRECJf260rv9Lb42E79WiKgMljqt8o1eRx68Wuc+w6zMhg+i4LDlqP70xLjGNq3M+2T4jGbTZ4LVESkgVJCiz5MSePiLDrMwcfn49iyBwBLXDiBf7oIW2rMqV/DafBDxno+/XolhUWH3NsD/X3p1bUt/Xq0o0WzJnUeuzRMKoOlvnMeLqf0/RWUfb6GEgwWhcHicCg/ph1cdJNQLr6gPb26tiUkyN9jsYqINDRKaNGHKWl8jNIKDj23gMqM7e5tvkPaEzD6fMyBvqd8HbvDwbJfNjH3uwx27tlfbV9C80i6dWhD9/atiY2OqKvQpQFSGSwNhX1bIYf//T32rJ0cNsN34bA0DEqPSWzNZhPt2sTRo1Mi6WmtCA5UcisiciaU0KIPU9I4GU6D8i/XcnjGMihzjcppCvDBd0h7/Id1xBwReMrXcjqd/LYhh+9WrOPXrGycv+ub2ywylLSkFqQlxpHaJpagAL86fRap31QGS0NiGAaVq3Mpnf0z9qydlJtgVTD8EAr5vyv6TCZoFdeUjsnxtEuMo3WLpvj62DwTuIhIPdVgE9ri4mJefvllVq1ahb+/P1dccQXDhw8/7rH6MCWNmaPwEIdfW1yttharGZ+eifj2SsTWuQUmn1PvF1t04DBLf9nAyjVbqvWzPVazyFDaxEfTukU0LZo1oUVMEyW5jZjKYGmIDMPAnrmD0nmrqVyZjeE0yPOFX4Lgl2AoOk7eajGbSYiNpE18NC2bRxEfE0lsswhsVkvNg0VEBGjACe1zzz1HaWkpf/nLXygoKGDKlCncf//9pKen1zhWH6aksXPVKORR9r9fqFydW32nnw2fzi2wpsZgTYnB2ioSk+3UPlzt3X+IjMxtrN2YS9bWfMrKTzw/Y1hwAM2iwmgWGUZ0ZCiRYcE0CQ+mSVgQoUEBWCwalL2hUhksDZ2z6DDl322gfNF6HLlFGECOL2QFwvoA2O4HxgnGizKZTERFBBMTFU6zyDCiIoKJDHe9IkKDCArww2TSYFMi0ng1yIS2rKyM66+/nhdeeIGEhAQAZsyYQX5+PhMmTKhxvD5MiRxl37qHsnm/UbF8K0ZJRc0DrGYsMaFYYsOxxIZhjgzG3CQIc5NATCF+mIP9MPnWrHqwOxxszS1gU/ZOtuQWsCVnN/sOFJ9STCaTiZBAP0KDAwgJCiA40I+gQD+C/P0I8PclwN+HAD9f/Hxt+Pna8Pf1wdfHiq+PDR+bFZvVqtFFvZjKYGlMHPn7qVixlYqV2dg37Qa7kxIzZPu5Xtv8IdcXyk6xUtZqMRMaHEBocADBgf6uV4AvAQF+BPr7EuDng7+fD/6+PtXKRl8fKzabFZvVooRYROq1Bjm/Rn5+PoZhuJNZgFatWrFs2TIPRiVSP1hbRxF078UYlf2o/C2Pip+2UJm5A+fOA64D7E4cuUU4cotOfBEfCyZ/H0z+NtdPXysmHyvNbBZifKxcaDVjCorlULCTfHsFO+wV7KwsZ09lBQUV5RTZq9fkGobBgeJSDhSXAntr91wmEzazGavJjNVswlb102I68jIfs2zCbDJhMbmSaTMmzCYwVy2bTLh/mtw/j78MR9eBY7Yd2eI64NiPkyaqf7g0nWDlREed7KPpaX9sPeaEK8ddfrpni8jvWGLD8L+iK/5XdMUor8S+YRf+mTsI3bKHtK17MPJLMIB9VtjhCzt9oKDqVWiDkt8lunaHk737i9m7/9S+IPw9E7jKQ5OpWtlo/V2ZaDGZsJhdZeCRn+aqstKEq3w0Haec5JjyEqq2wR+Wj0f2ccxxR2M21djmybLxXOg9tDtN25z6bAQijUmDTGjLysoICAioti0wMJDS0lL3emFhIYWFhQBs27btnMYnUh+YbBZ80hPwSXd9MeTcX0Ll+l04tu3Bkb8fR14Rjp0HoMJe8+QKB0ZFKcaB0pr7juEDtKp6HavSBPutUFT1OmiFQxbXz2KLa47HwxY4bAbHKbZEthsGdocDcJzaCVLDlZ4OQKSBMfnasHVsga1jC/c2577DOPKKCNqxn9gd+3HsOoCzsBhnYTHGoTLKzK5kt8gGByxwwHq0bDzyKjFDqQWcp5B0GUCF4aTCAJxn7VHlDCVvS1BCK3ICDTKh9fPzq5a8ApSUlODvf3Ro/I8//ph///vf7n0icnLmsAB8z28N57d2bzMMA6O4HOfeYpz7DmMcLMN5qAzjUBlGWSVGaQVGaSVGuR0q7RjlDgy7A+wOsDtdy04DHAaG0wkOAwwDH6dBU8P1MioNqMD1qetID4ljekpUYlBqhlKTQbkZyk2uuR8rzFBRtWw3uZLkSpNr2YHrp90EjmNfuD4AOkyuz3XO3/00qpbdn/uO2W5UbT/2RdU2jt12zD6O2fb75WO3ubebTn7sH2lw/UtEGiBzRCDmiEBsHeNq7DMq7DgPlhJ9oAzngRKMw+UYhytwFpdBWWVVuVvpOq6skvIKOyWVlZTZHZQ6HJQ7HJQbTsqdDioMgwrDoBKDSsPAbjKoBOwYrjISw11eOgGHyXCVh/yunORoGehe/105+fuy0fhd+VetfDxO2fhH69X21aKc9Nay8UT9qkWkugaZ0MbGxgKQk5NDfHw84KqFPbIMMHLkSPr27QtAZmYmV1111bkPVKSeM5lMmIJd/WZpGenpcEREGjSTjxVLZDBEBns6FBERr9Eghw318/OjV69ezJgxg5KSErZv386CBQsYOHCg+5jIyEhSUlJISUmhVavfN3gUERERERERb9cga2gB7rzzTv71r38xduxY/P39GTly5HGn7BEREREREZH6qcEmtEFBQcedokdEREREREQahgbZ5FhEREREREQaPiW0IiIiIiIiUi8poRUREREREZF6SQmtiIiIiIiI1EtKaEVERERERKReUkIrIiIiIiIi9VKDnbbndJSWlgKQlZXl4UhERBq2lJQUAgICqm1TGSwicvYdr/wVaQiU0ALZ2dkAjB492rOBiIg0cBkZGXTt2rXaNpXBIiJn3/HKX5GGwGQYhuHpIDytsLCQr776ipYtW+Lv7+/pcBqMbdu2MWXKFB577DFatWrl6XDkOPQeebeG+P4cr4ZAZXDda4h/Ow2N3iPv1hDfH9XQSkOlGlogMjKSG264wdNhNDgBAQEEBASQlpZGSkqKp8OR49B75N0ay/ujMrjuNZa/nfpM75F30/sjUn9oUCgRERERERGpl5TQylkTGRnJ7bffTmRkpKdDkRPQe+Td9P5Ibelvx/vpPfJuen9E6g/1oRUREREREZF6STW0IiIiIiIiUi8poRUREREREZF6SaMcyymbN28e3377LdnZ2VxwwQWMHz++1tdavXo1b7/9Nvn5+QQGBjJkyBCuueaaOoy2carL9+i2225j//79mM2u772ioqJ4+eWX6yrURquu3qP8/HymT5/O+vXrsdvttGzZkltuuYWkpKQ6jli8hcpg76by1/up/BVpmJTQyimLiIjgmmuu4ddff+XQoUO1vk5lZSVPPPEEN910E0OGDGHnzp1MnDiR+Ph4zj///DqMuPGpq/foiIkTJ5Kenl4HkckRdfUeHT58mPT0dMaNG0dgYCBffPEFjz76KP/5z3/w8/Orw4jFW6gM9m4qf72fyl+RhkkJrZyynj17ArB169Ya/xFs2rSJN998k+3btxMeHs7o0aPdx//ewYMHKS0t5eKLL8ZsNhMbG0u7du3Izs7Wh6kzVFfvkZw9dfUeJScnk5yc7F6/9NJLmT59Onl5eSQmJp69BxCPURns3VT+ej+VvyINkxJaOWP79u1j6tSpjBs3ju7du7N582YeffRRWrRoQYsWLWoc36RJE3r37s2CBQsYOnQo+fn5rF+/nhEjRpz74BuJ032PjnjxxRcxDIP4+HhGjx5Nu3btzmHUjUtt36MjNm3ahGEYxMTEnINoxZuoDPZuKn+9n8pfkfpNg0LJGfvuu+/o1KkT559/PhaLhbZt23L++eezdOnSE57Tt29fZs+ezciRI7nnnnsYNGgQKSkp5zDqxqU279Ff/vIX/vOf//Dmm2/Su3dvHn30UQoKCs5h1I1Lbd6jIw4ePMjzzz/P9ddfT2Bg4DmIVryJymDvpvLX+6n8FanfVEMrZ6ygoIDly5dz3XXXubc5HA769evHnj17+POf/+ze/vLLL1NWVsYzzzzDgw8+SNeuXSksLOSpp54iLCyMoUOHeuIRGrzTfY+ioqKq1QYMHTqUJUuWkJGRwSWXXHJOY28savMegasv19SpU+natSsjR44853GL56kM9m4qf72fyl+R+k0JrZyxqKgo+vTpw/3333/c/bNnz662vnTpUpo1a0b37t0BiI6Opnfv3vz888/6MHWWnO57dDxmsxnDMOo4MjmiNu/R4cOHeeSRR0hMTOT2228/yxGKt1IZ7N1U/no/lb8i9ZuaHMspczgcVFRU4HQ6cTqdVFRUYLfb6devHxkZGaxYsQKHw0FlZSUbNmwgNzf3uNdp3bo1BQUFZGRkYBgGe/fu5YcffqBVq1bn+Ikanrp6j/bs2UNmZiaVlZVUVlby1VdfsWnTJrp06XKOn6jhqav3qKSkhKlTp9KiRQvuvvvuc/wU4gkqg72byl/vp/JXpGEyGfrKT07Ru+++y/vvv19tW//+/bn//vvZvHkz06dPZ9u2bQC0bNmSW2+9ldatWx/3Wj/++CPvvfceBQUF+Pn50aNHD2699VZ8fX3P+nM0ZHX1HuXk5PDcc8+xc+dOrFYrLVq0YPTo0XTo0OGcPEdDVlfv0TfffMNLL72Er68vJpPJvf2RRx4hLS3t7D6EeITKYO+m8tf7qfwVaZiU0IqIiIiIiEi9pCbHIiIiIiIiUi8poRUREREREZF6SQmtiIiIiIiI1EtKaEVERERERKReUkIrIiIiIiIi9ZISWhEREREREamXlNCKiIiIiIhIvaSEVkREREREROolJbQiIlLnFi1axBNPPFHn150+fTrvvvtuje39+vXj0ksvrfP7iYiIiHczGYZheDoIERFpWKZOncqzzz5LcXFxnV63X79+BAUFMW/evGrb161bh8VioW3btnV6PxEREfFuVk8HICIijVtpaSn+/v5ndI127drVUTQiIiJSn6jJsYiIhy1btoxBgwYREhJCcHAwPXr0YOHChQDs27ePW265hcjISPz9/enZsyfff/99tfOPNLf96KOPaNu2LUFBQfTv358tW7ZUO668vJzJkyfTunVrfH19iYuLY+zYsTVi6d+/P4GBgYSGhnL99ddTUFDg3p+dnY3JZGLmzJncc889hIeHExMTw9/+9jfsdjvgqp199NFHOXz4MCaTCZPJRL9+/dz7goKCWLFiBRdccAF+fn68/PLLAEyYMIEOHToQFBREbGws1113HTt37qz2nIsXL2b+/Pnu606dOrXa7+BY33//PT179sTf35/IyEhuueUW9u3bd1rPIiIiIt5NCa2IiActXbqUfv36UV5ezn/+8x8+/vhjhg8fTk5ODg6Hg0suuYS5c+fy1FNP8eGHHxIUFMTAgQPJyMiodp1ff/2VZ555hmnTpjF9+nQ2b97M6NGjqx0zcuRInn/+eW655Rbmz5/PM888w+HDh937ly1bRr9+/QgNDeWDDz7gjTfeYOXKlQwfPrxG3A899BBms5nZs2dz11138dxzz/Gf//wHgNtuu41bb70Vf39/li1bxrJly3jllVfc51ZUVHD99dczevRovvjiCwYNGgRAQUEBkyZNYv78+bz00ktkZ2fTt29fd3L5yiuv0KVLF3r16uW+7m233Xbc32tGRgYDBw4kODiYDz/8kKeeeoq5c+dyySWX4HA4TvlZRERExMsZIiLiMT179jTatWtn2O32Gvs+++wzAzC+/PJL97aKigojPj7euPLKK93b+vbtawQGBhoFBQXubW+99ZYBGLm5uYZhGMaCBQsMwHj33XdPGMuFF15o9OzZ03A6ne5tmZmZhslkMubPn28YhmFs27bNAIyrr7662rl9+/Y1Lr74Yvf6I488YgQGBta4xyOPPGIAxvvvv3/COAzDMOx2u5GXl2cAxldffVXtPsOGDatx/O+3X3HFFUZ8fLxRUVHh3vbVV18ZgDFnzpzTehYRERHxXqqhFRHxkJKSEn766SduuukmLBZLjf1LliwhJCSEwYMHu7fZbDauvPJKfvjhh2rHdu7cmaioKPf6kT6leXl5AHzzzTcEBAQwatSoE8aydOlSrr76ahwOB3a7HbvdTnJyMi1atGDlypXVjj9Sq3rs/Y7c61QMGzasxrYvvviCnj17EhoaitVqJS4uDoCNGzee8nWPWLJkCcOHD8dms1WLOSwsrMbv7kyfRURERDxHCa2IiIcUFRXhdDpp3rz5Cfc3bdq0xvbo6OhqfUEBwsLCqq37+PgAUFZWBsDevXuJiYnBZDKd8F4Oh4P/+7//w2azVXvl5OSQm5v7h/c7cq8/EhAQQFBQULVtK1eu5PLLL6d58+bMmDGDZcuW8dNPP1V7htNRVFREdHR0je2n+rurzT1FRETk3NMoxyIiHhIWFobZbGbHjh3H3R8REVFtQKYjdu/eTURExGndq0mTJuzcuRPDMI6b1IaFhWEymZg0aRIjRoyosT8yMvK07ncyx7v/p59+SmhoKLNnz8Zsdn3Xun379lrfoy5/dyIiIuK9VEMrIuIhgYGBXHDBBbzzzjs1BioC6N27NwcPHmTBggXubXa7nU8//ZTevXuf1r0GDBhASUkJs2fPPmksWVlZdOvWrcarZcuWp3U/Hx8fysvLT/n40tJSbDZbtWR31qxZx73uqdSe9u7dm//973/VRiteuHAh+/fvP+3fnYiIiHgv1dCKiHjQtGnT6N+/PwMGDOBPf/oT4eHhrFq1isjISG666SbOO+88Ro8ezbRp04iOjuaf//wnO3fuZNKkSad1nwEDBjB06FBuueUWtmzZQo8ePdi3bx8fffQRH3zwAQDPPPMM/fv359prr2XUqFGEh4eTl5fHwoULufnmm91T75yK1NRU7HY7L730Ej179iQkJIS2bdue8PiBAwfy4osvMm7cOK644gqWLVvGjBkzjnvdt99+m7lz5xITE0Pz5s2P22T7oYceomfPnlx66aWMGzeO3bt3M2HCBM477zyGDh16ys8hIiIi3k01tCIiHtS7d28WLVqEyWRi7NixXHnllXz66ackJCRgsVj4/PPPGTZsGOPHj2fkyJHuGtv09PTTvtfHH3/Mvffey+uvv84ll1zCX/7yl2p9WXv27MkPP/xAcXExN998M0OHDuXvf/87AQEBJCYmnta9LrvsMv70pz/x5JNP0qNHD+68886THj906FCeeuopPvvsMy6//HK+//575s2bV+O4Bx54gF69enHjjTfSvXt33njjjeNeLz09nQULFnDw4EFGjhzJ+PHjGTZsGF988cVxB+ASERGR+slkGIbh6SBERERERERETpdqaEVERERERKReUkIrIiIiIiIi9ZISWhEREREREamXlNCKiIiIiIhIvaSEVkREREREROolJbQiIiIiIiJSLymhFRERERERkXpJCa2IiIiIiIjUS0poRUREREREpF5SQisiIiIiIiL1khJaERERERERqZeU0IqIiIiIiEi99P8BuZaOGUP9ybMAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "from plotnine import *\n", "\n", "n_points = 100\n", "\n", "df = (\n", " pd.DataFrame(\n", " {\n", " \"c\": np.tile(np.logspace(-10, -1, n_points), 2),\n", " \"k_d_1\": np.append(np.repeat(1e-6, n_points), np.repeat(1e-5, n_points)),\n", " \"k_d_2\": np.append(np.repeat(1e-6, n_points), np.repeat(1e-7, n_points)),\n", " \"f_1\": np.repeat(0.5, 2 * n_points),\n", " \"f_2\": np.repeat(0.5, 2 * n_points),\n", " \"scenario\": ([\"same affinities\"] * n_points)\n", " + ([\"different affinities\"] * n_points),\n", " }\n", " )\n", " .assign(\n", " distinct_epitopes=lambda x: (1 / (1 + x.c * x.f_1 / x.k_d_1))\n", " * (1 / (1 + x.c * x.f_2 / x.k_d_2)),\n", " overlap_epitopes=lambda x: (\n", " 1 / (1 + x.c * x.f_1 / x.k_d_1 + x.c * x.f_2 / x.k_d_2)\n", " ),\n", " )\n", " .melt(\n", " id_vars=[\"c\", \"k_d_1\", \"k_d_2\", \"f_1\", \"f_2\", \"scenario\"],\n", " value_vars=[\"overlap_epitopes\", \"distinct_epitopes\"],\n", " var_name=\"assumption\",\n", " value_name=\"p_unbound\",\n", " )\n", ")\n", "\n", "df[\"scenario\"] = (\n", " df[\"scenario\"]\n", " .astype(\"category\")\n", " .cat.reorder_categories([\"same affinities\", \"different affinities\"])\n", ")\n", "\n", "p = (\n", " ggplot(df, aes(x=\"c\", y=\"p_unbound\"))\n", " + geom_line(aes(color=\"assumption\"), size=1)\n", " + facet_wrap(\"scenario\")\n", " + labs(x=\"concentration\")\n", " + scale_color_manual(values=[\"#ec5094\", \"#5c7594\"])\n", " + scale_x_log10()\n", " + theme_classic()\n", " + theme(figure_size=(9, 3.5))\n", ")\n", "\n", "_ = p.draw()" ] }, { "cell_type": "markdown", "id": "4c9dd033-5833-4c78-9e6e-c4616c129b17", "metadata": {}, "source": [ "There is a small range in the sera concentration where the curves will slightly differ when the two classes of antibodies have the same affinity ($K_{d,1} = K_{d,2} = 10^{-6}$) for their epitopes. However in general, and when the affinities of the two classes of antibodies start to differ ($K_{d,1} = 10^{-7}$, $K_{d,2} = 10^{-5}$), the two curves are quite concordant.\n", "\n", "We can show that this is true across the range of parameters $c$, $f_{1}$, $f_{2}$, $K_{d,1}$, and $K_{d,2}$. You can toggle each parameter to visualize the how it affects `p_unbound` under each assumption." ] }, { "cell_type": "code", "execution_count": 2, "id": "4fccf2c9-f32f-4cae-8342-08bf95f704e2", "metadata": { "execution": { "iopub.execute_input": "2023-02-11T21:27:35.484516Z", "iopub.status.busy": "2023-02-11T21:27:35.484228Z", "iopub.status.idle": "2023-02-11T21:27:36.121026Z", "shell.execute_reply": "2023-02-11T21:27:36.120328Z", "shell.execute_reply.started": "2023-02-11T21:27:35.484500Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "" ], "text/plain": [ "alt.Chart(...)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import altair as alt\n", "from itertools import product\n", "\n", "c_range = np.logspace(-8, -2, 4)\n", "Kds = np.logspace(-8, -2, 4)\n", "fracs = np.array([0, 0.25, 0.5, 0.75, 1])\n", "\n", "df = (\n", " pd.DataFrame(\n", " list(product(c_range, Kds, Kds, fracs, fracs)),\n", " columns=[\"c\", \"k_d_1\", \"k_d_2\", \"f_1\", \"f_2\"],\n", " )\n", " .assign(f_sum=lambda x: x.f_1 + x.f_2)\n", " .query(\"f_sum == 1\")\n", " .assign(\n", " distinct_epitopes=lambda x: (\n", " (1 / (1 + x.c * x.f_1 / x.k_d_1)) * (1 / (1 + x.c * x.f_2 / x.k_d_2))\n", " ).round(3),\n", " overlap_epitopes=lambda x: (\n", " (1 / (1 + x.c * x.f_1 / x.k_d_1 + x.c * x.f_2 / x.k_d_2))\n", " ).round(3),\n", " log_c=lambda x: np.log10(x.c).astype(int),\n", " log_k_d_1=lambda x: np.log10(x.k_d_1).astype(int),\n", " log_k_d_2=lambda x: np.log10(x.k_d_2).astype(int),\n", " )\n", " .melt(\n", " id_vars=[\"log_c\", \"log_k_d_1\", \"log_k_d_2\", \"f_1\", \"f_2\"],\n", " value_vars=[\"overlap_epitopes\", \"distinct_epitopes\"],\n", " var_name=\"assumption\",\n", " value_name=\"p_unbound\",\n", " )\n", ")\n", "\n", "c_slider = alt.binding_range(min=-8, max=-2, step=2, name=\"log(sera concentration): \")\n", "c_filter = alt.selection_point(fields=[\"log_c\"], bind=c_slider, value=-6)\n", "\n", "k_d_1_slider = alt.binding_range(min=-8, max=-2, step=2, name=\"log(antibody 1 Kd): \")\n", "k_d_1_filter = alt.selection_point(fields=[\"log_k_d_1\"], bind=k_d_1_slider, value=-6)\n", "\n", "k_d_2_slider = alt.binding_range(min=-8, max=-2, step=2, name=\"log(antibody 2 Kd): \")\n", "k_d_2_filter = alt.selection_point(fields=[\"log_k_d_2\"], bind=k_d_2_slider, value=-6)\n", "\n", "f_1_slider = alt.binding_range(min=0, max=1, step=0.25, name=\"antibody 1 fraction: \")\n", "f_1_filter = alt.selection_point(fields=[\"f_1\"], bind=f_1_slider, value=0.5)\n", "\n", "alt.Chart(df).mark_bar().encode(\n", " x=alt.X(\"p_unbound:Q\", scale=alt.Scale(domain=[0, 1])),\n", " y=alt.Y(\"assumption:O\", axis=alt.Axis(title=\"\")),\n", " color=alt.Color(\n", " \"assumption:O\",\n", " legend=None,\n", " scale=alt.Scale(\n", " domain=[\"distinct_epitopes\", \"overlap_epitopes\"],\n", " range=[\"#ec5094\", \"#5c7594\"],\n", " ),\n", " ),\n", " tooltip=[\"assumption:O\", \"p_unbound:O\"],\n", ").add_params(f_1_filter, k_d_2_filter, k_d_1_filter, c_filter).transform_filter(\n", " f_1_filter\n", ").transform_filter(\n", " k_d_2_filter\n", ").transform_filter(\n", " k_d_1_filter\n", ").transform_filter(\n", " c_filter\n", ").properties(\n", " height=60, width=400, title=\"p_unbound in a two-epitope model\"\n", ")" ] }, { "cell_type": "markdown", "id": "6fbe66c1-f908-4cb8-9912-899899cd3f27", "metadata": {}, "source": [ "#### 2.3 Extending beyond two epitopes" ] }, { "cell_type": "markdown", "id": "fd199f2c-739e-48f4-8df1-efbfe5d92155", "metadata": {}, "source": [ "The same logic applies to viral proteins with more than two epitopes targeted by neutralizing antibodies. For example, we can write the case of 3 distinct epitopes as:\n", "\n", "$$\\begin{eqnarray}\n", "p_{unbound} = \\frac{Z_{unbound}}{\\Xi} &=& \\frac{1}{1 + \\frac{c f_1}{K_{d,1}} + \\frac{c f_2}{K_{d,2}} + \\frac{c f_3}{K_{d,3}} + \\left(\\frac{c f_1}{K_{d,1}}\\right) \\left(\\frac{c f_2}{K_{d,2}}\\right) + \\left(\\frac{c f_1}{K_{d,1}}\\right) \\left(\\frac{c f_3}{K_{d,3}}\\right) + \\left(\\frac{c f_2}{K_{d,2}}\\right) \\left(\\frac{c f_3}{K_{d,3}}\\right) + \\left(\\frac{c f_1}{K_{d,1}}\\right) \\left(\\frac{c f_2}{K_{d,2}}\\right) \\left(\\frac{c f_3}{K_{d,3}}\\right)} \\\\\n", "&=& \\left(\\frac{1}{1 + \\frac{c f_1}{K_{d,1}}}\\right) \\left(\\frac{1}{1 + \\frac{c f_2}{K_{d,2}}}\\right) \\left(\\frac{1}{1 + \\frac{c f_3}{K_{d,3}}}\\right)\n", "\\end{eqnarray}$$\n", "\n", "and the case of 3 overlapping epitopes as:\n", "\n", "$$ p_{unbound} = \\frac{Z_{unbound}}{\\Xi} = \\frac{1}{1 + \\frac{c f_1}{K_{d,1}} + \\frac{c f_2}{K_{d,2}} + \\frac{c f_3}{K_{d,3}}}$$\n", "\n", "Again, we can see how the predicted $p_{unbound}$ varies as a function of all parameters under both the distinct and overlapping epitopes assumptions." ] }, { "cell_type": "code", "execution_count": 3, "id": "6d232324-94e1-414a-b56b-25703b181ade", "metadata": { "execution": { "iopub.execute_input": "2023-02-11T21:27:36.123928Z", "iopub.status.busy": "2023-02-11T21:27:36.123770Z", "iopub.status.idle": "2023-02-11T21:27:36.303177Z", "shell.execute_reply": "2023-02-11T21:27:36.302483Z", "shell.execute_reply.started": "2023-02-11T21:27:36.123911Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "" ], "text/plain": [ "alt.Chart(...)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c_range = np.logspace(-8, -2, 4)\n", "Kds = np.logspace(-6, -2, 3)\n", "fracs = np.array([0, 0.25, 0.5, 0.75, 1])\n", "\n", "df = (\n", " pd.DataFrame(\n", " list(product(c_range, Kds, Kds, Kds, fracs, fracs, fracs)),\n", " columns=[\"c\", \"k_d_1\", \"k_d_2\", \"k_d_3\", \"f_1\", \"f_2\", \"f_3\"],\n", " )\n", " .assign(f_sum=lambda x: x.f_1 + x.f_2 + x.f_3)\n", " .query(\"f_sum == 1\")\n", " .assign(\n", " distinct_epitopes=lambda x: (\n", " (1 / (1 + x.c * x.f_1 / x.k_d_1))\n", " * (1 / (1 + x.c * x.f_2 / x.k_d_2))\n", " * (1 / (1 + x.c * x.f_3 / x.k_d_3))\n", " ).round(3),\n", " overlap_epitopes=lambda x: (\n", " (\n", " 1\n", " / (\n", " 1\n", " + x.c * x.f_1 / x.k_d_1\n", " + x.c * x.f_2 / x.k_d_2\n", " + x.c * x.f_3 / x.k_d_3\n", " )\n", " )\n", " ).round(3),\n", " log_c=lambda x: np.log10(x.c).astype(int),\n", " log_k_d_1=lambda x: np.log10(x.k_d_1).astype(int),\n", " log_k_d_2=lambda x: np.log10(x.k_d_2).astype(int),\n", " log_k_d_3=lambda x: np.log10(x.k_d_3).astype(int),\n", " )\n", " .melt(\n", " id_vars=[\"log_c\", \"log_k_d_1\", \"log_k_d_2\", \"log_k_d_3\", \"f_1\", \"f_2\", \"f_3\"],\n", " value_vars=[\"overlap_epitopes\", \"distinct_epitopes\"],\n", " var_name=\"assumption\",\n", " value_name=\"p_unbound\",\n", " )\n", ")\n", "\n", "c_slider = alt.binding_range(min=-8, max=-2, step=2, name=\"log(sera concentration): \")\n", "c_filter = alt.selection_point(fields=[\"log_c\"], bind=c_slider, value=-4)\n", "\n", "k_d_1_slider = alt.binding_range(min=-6, max=-2, step=2, name=\"log(antibody 1 Kd): \")\n", "k_d_1_filter = alt.selection_point(fields=[\"log_k_d_1\"], bind=k_d_1_slider, value=-4)\n", "\n", "k_d_2_slider = alt.binding_range(min=-6, max=-2, step=2, name=\"log(antibody 2 Kd): \")\n", "k_d_2_filter = alt.selection_point(fields=[\"log_k_d_2\"], bind=k_d_2_slider, value=-4)\n", "\n", "k_d_3_slider = alt.binding_range(min=-6, max=-2, step=2, name=\"log(antibody 3 Kd): \")\n", "k_d_3_filter = alt.selection_point(fields=[\"log_k_d_3\"], bind=k_d_3_slider, value=-4)\n", "\n", "f_1_slider = alt.binding_range(min=0, max=1, step=0.25, name=\"antibody 1 fraction: \")\n", "f_1_filter = alt.selection_point(fields=[\"f_1\"], bind=f_1_slider, value=0.5)\n", "\n", "f_2_slider = alt.binding_range(min=0, max=1, step=0.25, name=\"antibody 2 fraction: \")\n", "f_2_filter = alt.selection_point(fields=[\"f_2\"], bind=f_2_slider, value=0.5)\n", "\n", "alt.Chart(df).mark_bar().encode(\n", " x=alt.X(\"p_unbound:Q\", scale=alt.Scale(domain=[0, 1])),\n", " y=alt.Y(\"assumption:O\", axis=alt.Axis(title=\"\")),\n", " color=alt.Color(\n", " \"assumption:O\",\n", " legend=None,\n", " scale=alt.Scale(\n", " domain=[\"distinct_epitopes\", \"overlap_epitopes\"],\n", " range=[\"#ec5094\", \"#5c7594\"],\n", " ),\n", " ),\n", " tooltip=[\"assumption:O\", \"p_unbound:O\"],\n", ").add_params(\n", " f_2_filter, f_1_filter, k_d_3_filter, k_d_2_filter, k_d_1_filter, c_filter\n", ").transform_filter(\n", " f_2_filter\n", ").transform_filter(\n", " f_1_filter\n", ").transform_filter(\n", " k_d_3_filter\n", ").transform_filter(\n", " k_d_2_filter\n", ").transform_filter(\n", " k_d_1_filter\n", ").transform_filter(\n", " c_filter\n", ").properties(\n", " height=60, width=400, title=\"p_unbound in a three-epitope model\"\n", ")" ] } ], "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.11.0" } }, "nbformat": 4, "nbformat_minor": 5 }