{ "cells": [ { "cell_type": "markdown", "id": "a810277f-23c0-45a4-b8a5-6507c1082b88", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": "b531f46d-30d5-4961-beac-ce1849136722", "diskcache": false, "headerColor": "inherit", "id": "5b3029a2-1020-4079-8b0d-d42ffd181601", "isComponent": false, "name": "", "parents": [] }, "tags": [] }, "source": [ "# Deep Q-Network Reinforcement Learning for the CartPole Environment\n", "\n", "### Note\n", "\n", "This Link notebook was adapted from Pytorch DQN Reinforce learning tutorial at\n", "https://github.com/ritakurban/Practical-Data-Science/blob/master/DQL_CartPole.ipynb" ] }, { "cell_type": "markdown", "id": "1d00f941-ca49-4f7c-836e-abe0f05f3864", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "3158a8d2-5bdd-4924-8fd7-2320a2121ae3", "isComponent": false, "name": "", "parents": [] }, "tags": [] }, "source": [ "### Required Python Packages\n", "- `gym`\n", "- `torch`\n", "- `matplotlib`\n", "\n", "Run the following cell to install the packages. " ] }, { "cell_type": "code", "execution_count": null, "id": "66e45142-3bf8-4c2d-ae3a-15390d453b1a", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "ef3d8048-57bb-486f-9d58-d45c0051c746", "isComponent": false, "name": "", "parents": [] }, "tags": [] }, "outputs": [], "source": [ "#\n", "# Required Packages\n", "# Run this cell to install required packages.\n", "#\n", "%pip install \"gym>=0.21\" \"matplotlib>=2.0\" \"torch>=1.9\"" ] }, { "cell_type": "code", "execution_count": null, "id": "db80b6e7-7a03-4131-af2b-53b80bcd9f60", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "d7613e69-d825-4b3f-99e1-8f25a8be99f3", "isComponent": true, "name": "Import Common Packages", "parents": [] }, "tags": [] }, "outputs": [], "source": [ "import random\n", "\n", "import gym\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import torch\n", "from IPython import display" ] }, { "cell_type": "markdown", "id": "b3cef5be-6b47-4aa2-94ee-323b47b5bfcb", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "81b2885a-3cfd-4b10-ab52-15f9a915fc7d", "isComponent": false, "name": "", "parents": [] } }, "source": [ "## Environment\n", "\n", "The CartPole environment consists of a pole which moves along a frictionless track. The system is controlled by applying a force of +1 or -1 to the cart. The pendulum starts upright, and the goal is to prevent it from falling over. The state space is represented by four values: cart position, cart velocity, pole angle, and the velocity of the tip of the pole. The action space consists of two actions: moving left or moving right. A reward of +1 is provided for every timestep that the pole remains upright. The episode ends when the pole is more than 15 degrees from vertical, or the cart moves more than 2.4 units from the center. \n", "\n", "Source: [https://gym.openai.com/envs/CartPole-v1/](Open AI Gym). " ] }, { "cell_type": "code", "execution_count": null, "id": "db326fe4-160b-4c76-a247-28c276161af4", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "80a78dfc-36a5-46ce-a4c2-1f6020827397", "isComponent": true, "name": "Gym Environment", "parents": [ { "id": "d7613e69-d825-4b3f-99e1-8f25a8be99f3", "name": "Import Common Packages" } ] }, "tags": [] }, "outputs": [], "source": [ "# Use Open-AI Gym Framework\n", "# - CartPole environment\n", "# https://www.gymlibrary.ml/environments/classic_control/cart_pole/\n", "\n", "env = gym.make(\"CartPole-v1\")\n", "\n", "# Rendering routine\n", "def get_screen(env):\n", " \"\"\"Extract one step of the simulation.\"\"\"\n", " screen = env.render(mode=\"rgb_array\").transpose((2, 0, 1))\n", " screen = np.ascontiguousarray(screen, dtype=np.float32) / 255.0\n", " return torch.from_numpy(screen)" ] }, { "cell_type": "markdown", "id": "e194c3e2-65b0-4751-a649-a0d1674bd90b", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "a23ca276-27e8-411f-bc61-045a96061980", "isComponent": false, "name": "", "parents": [] } }, "source": [ "## Plotting Function\n", "\n", "This function will make it possible to analyze how the agent learns over time. The resulting plot consists of two subplots. The first one plots the total reward the agent accumulates over time, while the other plot shows a histogram of the agent's total rewards for the last 100 episodes. " ] }, { "cell_type": "code", "execution_count": null, "id": "2a58351d-32ce-4de7-b553-e655c769f686", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "85e37334-cf5d-4ddc-a8d7-f5652a2ffc77", "isComponent": true, "name": "Plot Learning Status", "parents": [ { "id": "80a78dfc-36a5-46ce-a4c2-1f6020827397", "name": "Gym Environment" } ] }, "tags": [] }, "outputs": [], "source": [ "def plot_res(values, title=\"\"):\n", " \"\"\"Plot the reward curve and histogram of results over time.\"\"\"\n", " # Update the window after each episode\n", " display.clear_output(wait=True)\n", "\n", " # Two plots\n", " f, ax = plt.subplots(1, 2, figsize=(12, 5))\n", " f.suptitle(title)\n", " ax1, ax2 = ax\n", "\n", " # Reward curves\n", " ax1.plot(values, label=\"Score per Run\")\n", " ax1.axhline(100, c=\"red\", ls=\"--\", label=\"Goal\")\n", " ax1.set_xlabel(\"Episodes\")\n", " ax1.set_ylabel(\"Reward\")\n", " ax1.legend()\n", " # Calculate the trend\n", " x = range(len(values))\n", " try:\n", " z = np.polyfit(x, values, 1)\n", " p = np.poly1d(z)\n", " ax[0].plot(x, p(x), \"--\", label=\"trend\")\n", " except:\n", " pass\n", "\n", " # Histogram of Rewards\n", " ax2.hist(values[-100:], bins=10)\n", " ax2.axvline(100, c=\"red\", label=\"Goal\")\n", " ax2.set_xlabel(\"Rewards for last 100 episodes\")\n", " ax2.set_ylabel(\"Frequency\")\n", " ax2.legend()\n", " plt.show()" ] }, { "cell_type": "markdown", "id": "e3b111ad-75e7-4619-a92b-855e14a52872", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "b7de3341-17ae-4a83-8c41-6ccd87a4b462", "isComponent": false, "name": "", "parents": [] } }, "source": [ "## Random Search\n", "\n", "Before implementing any deep learning approaches, I wrote a simple strategy where the action is sampled randomly from the action space. This approach will serve as a baseline for other strategies and will make it easier to understand how to work with the agent using the Open AI Gym environment." ] }, { "cell_type": "code", "execution_count": null, "id": "a8776c3c-25d8-4088-aac8-8eecc3497b65", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "#0030CC", "id": "9b2e6124-9509-4e90-9d22-092dff3abc38", "isComponent": true, "name": "Random Search Routine", "parents": [ { "id": "85e37334-cf5d-4ddc-a8d7-f5652a2ffc77", "name": "Plot Learning Status" } ] }, "tags": [] }, "outputs": [], "source": [ "def random_search(env, episodes):\n", " final = []\n", " for episode in range(episodes):\n", " state = env.reset()\n", " done = False\n", " total = 0\n", " while not done:\n", " # Sample random actions\n", " action = env.action_space.sample()\n", " # Take action and extract results\n", " next_state, reward, done, info = env.step(action)\n", " # Update reward\n", " total += reward\n", " get_screen(env)\n", " if done:\n", " break\n", " # Add to the final reward\n", " final.append(total)\n", " plot_res(final, title=\"Random Strategy\")\n", " return final" ] }, { "cell_type": "markdown", "id": "973aca40-1793-419c-add7-7d71875b2b83", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "d9eaa8e3-9a43-4cd6-9b8c-185eff51a386", "isComponent": false, "name": "", "parents": [] } }, "source": [ "The run below presents the random strategy. As expected, it's impossible to solve the environment using this approach. The agent is not learning from their experience. Despite being lucky sometimes (getting a reward of almost 75), their average performance is as low as 10 steps." ] }, { "cell_type": "code", "execution_count": null, "id": "943288fd-d88b-4e22-be08-87d2e0fe00b3", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "#0030CC", "id": "deb61bc0-a6a9-4f24-91e8-9c7821fe22cc", "isComponent": true, "name": "Do Random Search", "parents": [ { "id": "9b2e6124-9509-4e90-9d22-092dff3abc38", "name": "Random Search Routine" } ] }, "tags": [] }, "outputs": [ { "data": { "image/png": "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3ROn1GQxwgzyWDn99NP5zGc+w5VXXskHPvABAPr6+gBKvg91dnYyf/58AoEAq1evJp1O12TtanypZGu8a4H7gWUislVE3oMTRJ8lIhuBM92fAf4MPAc8C/wEGKS+QClVT3p6erjooos44ogjWL58OevWreNLX/oSkUiE6667jssvv5wVK1Zw1llnMTAwwCWXXEImk+Hoo4/mggsu4Oqrr/Yyu36f//znSSaTLF++nCOPPJLPlygbOv7447nssss4/PDDWbx4MW94wxuYMWMGV199NRdeeCHLly/npJNO4plnnhnxY/vCF77Ad77zHebNm8db3vIWjjrqKN7ylrcUDeqVUvVFRLjxxhu5++67Wbx4MSeccAIXXXQR3/zmN0u+D11yySWsXr2aFStW8Mwzzwz6KZZSljgNNManVatWmYcffrjWy1Cqpp5++mmnjngSuuuuu/jWt77ldNmoY8VeIxF5xBizqkZLqol6ec/WmunKm0zvS5PpsU4IthvXYHuTSij1vq0TEJVSSimllCpTzbp5KKXUaNlNj0oppVStaGZaKaWUUkqpMmkwrZRSSqkxN573ZA3XZHiMamgaTCullFJqTMViMfbt2zehg01jDPv27dNe1EprppVSSik1tubPn8/WrVvZs2dPrZdSUbFYrOQAGDV5aDCtlBq1Xbt28ZGPfIR///vfTJkyhUgkwn/913/xhje8YUS3s3nzZs455xzWrl1boZUqpaohHA6zePHiWi9DqarQMg+l1KgYYzjvvPN4+ctfznPPPccjjzzCb3/7W7Zu3VrrpSmllFIVp8G0UmpU/vGPfxCJRHj/+9/vnbZw4UIuv/xyBgYGePe7383RRx/NMcccw5133gk4GehTTjmFY489lmOPPZb77ruvVstXSimlRkXLPJRSo/LUU09x7LHHFj3vBz/4ASLCk08+yTPPPMMrX/lKNmzYwMyZM7ntttuIxWJs3LiRCy+8kHqYjKeUUkqNlAbTSk00xYaYvOUtcMkl0NcHZ59deP673uV87d0L55+fe94IR65eeuml3HPPPUQiEebPn8/ll18OwGGHHcbChQvZsGEDCxcu5LLLLuPxxx8nGAyyYcOGEd2HUkopVS80mFZKjcqRRx7J9ddf7/38gx/8gL1797Jq1aqSu9yvuOIKZs2axRNPPEEmk9HWUkoppcYtDaaVmmgGyyQ3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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "random_search(env, 100)\n", "env.close()" ] }, { "cell_type": "markdown", "id": "498c9043-f647-4f5b-88ee-815d72f088d9", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "31288df1-de2d-4dfb-a5a7-8b86bfc2f8e6", "isComponent": false, "name": "", "parents": [] } }, "source": [ "## Deep Q Learning\n", "\n", "The main idea behind Q-learning is that we have a function $Q: State \\times Action \\rightarrow \\mathbb{R}$, which can tell the agent what actions will result in what rewards. If we know the value of Q, it is possible to construct a policy that maximizes rewards:\n", "\n", "\\begin{align}\\pi(s) = \\arg\\!\\max_a \\ Q(s, a)\\end{align}\n", "\n", "However, in the real world, we don't have access to full information, that's why we need to come up with ways of approximating Q. One traditional method is creating a lookup table where the values of Q are updated after each of the agent's actions. However, this approach is slow and does not scale to large action and state spaces. Since neural networks are universal function approximators, I will train a network that can approximate $Q$.\n", "\n", "The DQL class implementation consists of a simple neural network implemented in PyTorch that has two main methods--predict and update. The network takes the agent's state as an input and returns the Q values for each of the actions. The maximum Q value is selected by the agent to perform the next action." ] }, { "cell_type": "code", "execution_count": null, "id": "2876af53-a7d7-4111-b17e-f16250ae20d4", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "#6C00FF", "id": "949cf49a-8f6c-4825-8991-65310a8a721a", "isComponent": true, "name": "Deep-Q Network Model", "parents": [ { "id": "85e37334-cf5d-4ddc-a8d7-f5652a2ffc77", "name": "Plot Learning Status" } ] }, "tags": [] }, "outputs": [], "source": [ "from torch.nn import LeakyReLU, Linear, Module, MSELoss, ReLU, Sequential\n", "\n", "\n", "class DQN(Module):\n", " \"\"\"Deep Q Neural Network\"\"\"\n", "\n", " def __init__(self, state_dim, action_dim, hidden_dim=64, lr=0.01):\n", " super().__init__()\n", " self.criterion = MSELoss()\n", " self.model = Sequential(\n", " Linear(state_dim, hidden_dim),\n", " ReLU(),\n", " Linear(hidden_dim, hidden_dim),\n", " ReLU(),\n", " Linear(hidden_dim, action_dim),\n", " )\n", " self.optimizer = torch.optim.Adam(self.model.parameters(), lr)\n", "\n", " def update(self, state, y):\n", " \"\"\"Update the weights of networks given a training sample\"\"\"\n", " y_pred = self.model(torch.Tensor(state))\n", " loss = self.criterion(y_pred, torch.tensor(y, requires_grad=True))\n", " self.optimizer.zero_grad()\n", " loss.backward()\n", " self.optimizer.step()\n", "\n", " def predict(self, state):\n", " \"\"\"Compute Q values for all actions\"\"\"\n", " with torch.no_grad():\n", " return self.model(torch.Tensor(state))" ] }, { "cell_type": "markdown", "id": "415ca7c3-57a0-427c-9704-119593f44aa3", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "016a7135-d982-47ff-92a1-e376d4e1d507", "isComponent": false, "name": "", "parents": [] } }, "source": [ "## Deep Q Network Training\n", "\n", "The `q_learning` function is the main loop for all the algorithms that follow. \n", "It has many parameters, namely:\n", "\n", "- Env represents the Open Ai Gym environment that we want to solve (CartPole.)\n", "- Episodes stand for the number of games we want to play (from the beginning until the end.)\n", "- Gamma is a discounting factor that is multiplied by future rewards to dampen these rewards' effect on the agent. It is designed to make future rewards worth less than immediate rewards.\n", "- Epsilon represents the proportion of random actions relative to actions that are informed by existing \"knowledge\" that the agent accumulates during the episode. Before playing the game, the agent doesn't have any experience, so it is common to set epsilon to higher values and then gradually decrease its value.\n", "- Eps_decay parameter indicates the speed at which the epsilon decreases as the agent learns. 0.99 comes from the original DQN paper.\n", "\n", "I will explain other parameters later on when we will get to the corresponding agents.\n", "The most straightforward agent updates its Q-values based on its most recent observation. It doesn't have any memory, but it learns by first exploring the environment and the gradually decreasing its epsilon value to make informed decisions:" ] }, { "cell_type": "code", "execution_count": null, "id": "0b47a319-fb53-40cf-ab4e-d7845ca9def1", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "#6C00FF", "id": "07047e3d-44e6-492e-9bcd-869687959e54", "isComponent": true, "name": "Q Learning Routine", "parents": [ { "id": "23e61e89-120d-4406-bf42-1f402873bb86", "name": "Replay Update Routine" } ] }, "tags": [] }, "outputs": [], "source": [ "def q_learning(env, model, n_episode, gamma=0.9, epsilon=0.5, eps_decay=0.99, replay=True, replay_size=50):\n", " \"\"\"Deep Q Learning algorithm\"\"\"\n", " final = []\n", " memory = []\n", " for episode in range(n_episode):\n", " # Reset state\n", " state = env.reset()\n", " done = False\n", " total = 0\n", "\n", " while not done:\n", " # Greedy search policy\n", " if random.random() < epsilon:\n", " action = env.action_space.sample()\n", " else:\n", " q_values = model.predict(state)\n", " action = torch.argmax(q_values).item()\n", "\n", " # Take action and add reward to total\n", " next_state, reward, done, _ = env.step(action)\n", " total += reward\n", " q_values = model.predict(state).tolist()\n", "\n", " # Store to memory\n", " memory.append((state, action, next_state, reward, done))\n", "\n", " if done:\n", " if not replay:\n", " q_values[action] = reward\n", " # Update network weights\n", " model.update(state, q_values)\n", " break\n", "\n", " # Show environment\n", " get_screen(env)\n", "\n", " if replay:\n", " # Update network weights using replay memory\n", " replay_update(model, memory, size=replay_size, gamma=gamma)\n", " else:\n", " # Update network weights using the last step only\n", " q_values_next = model.predict(next_state)\n", " q_values[action] = reward + gamma * torch.max(q_values_next).item()\n", " model.update(state, q_values)\n", "\n", " state = next_state\n", "\n", " # Update epsilon\n", " epsilon = max(epsilon * eps_decay, 0.01)\n", " final.append(total)\n", " plot_res(final, \"DQN Learning\")\n", "\n", " return final" ] }, { "cell_type": "markdown", "id": "c4641356-bb7e-4d47-9340-8de6c9a70149", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "da975244-3175-4c31-a4bc-19debfae18d8", "isComponent": false, "name": "", "parents": [] } }, "source": [ "## Train DQN with a single-per-step data\n", "\n", "The run below shows that the performance of the agent has significantly improved. It got to 100 steps, which, as we've seen before, is impossible for a random agent. The trend line is also positive, and we can see that the performance increases over time. At the same time, its average performance is still around 20 steps, so there is definitely enough room for improvement." ] }, { "cell_type": "code", "execution_count": null, "id": "de542215-5dab-4576-a47e-775796969f91", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "#6C00FF", "id": "72668538-9702-4304-91e2-c0f444163eb4", "isComponent": true, "name": "Train DQN Using Single Data", "parents": [ { "id": "07047e3d-44e6-492e-9bcd-869687959e54", "name": "Q Learning Routine" } ] }, "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtwAAAFhCAYAAABDFX1fAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAAB12ElEQVR4nO3dd5xcdb3/8ddnZvsmm2STTa+QkJBOCKEjHQSkKFIUjVhQQRCvXkUs6O/qvXD1gg1QLICKgBQBQTqEIpBCCKT3QupudtO2z858f3+cM7OzfZPdmbPl/Xw89rEz58zM+c5kc+Yzn/l8P19zziEiIiIiIqkRCnoAIiIiIiI9mQJuEREREZEUUsAtIiIiIpJCCrhFRERERFJIAbeIiIiISAop4BYRERERSSEF3CIi0iYzW25mpwY9DhGR7kgBt4hIG8xsk5lVmdkBM9trZm+Z2VfMLNTodieY2Sv+7faZ2VNmNilp/6lm5szsrkb3e9PMPtfCsX9kZn9NyRM7CM65Kc65eUGPQ0SkO1LALSLSPh9zzvUFxgC3At8B/hjfaWbHAy8ATwLDgXHAB8C/zWxs0uNUAJ9ptC1QZpYR9BhERHoyBdwiIgfBObfPOfcUcDkw18ym+rv+F/izc+6XzrkDzrky59z3gQXALUkPsRe4r9G2Q2Jmx/nZ9r1m9n5yyYeZXW1mK/1s+wYz+3LSvlPNbKuZfcfMdgL3+pn0v5vZn/37LDez2Un32WRmZ/qX27rtLDN7z9/3iJk9bGY/6ejzFRHprhRwi4gcAufcAmArcLKZ5QEnAI80c9O/A2c32vZT4BNmNvFQj29mI4BngJ8AhcC3gMfMrMi/STFwAVAAXA3cYWazkh5iqH+/McA1/rYLgYeA/sBTwG9aGUKztzWzLOAfeB8qCoEHgUsO9XmKiPQECrhFRA7ddrygshDvfLqjmdvsAIqSNzjndgK/Bf5fB459FfAv59y/nHMx59yLwCLgPP8Yzzjn1jvPa3jlLicn3T8G3OKcq3HOVfnb3vQfLwr8BZjRyvFbuu1xQAbwK+dcxDn3OF6WX0Sk11LALSJy6EYAZcAevAB2WDO3GQbsbmb7bcA5ZtZaUNuaMcAn/XKSvWa2FzgpPgYz+6iZvWNmZf6+84BBSfcvcc5VN3rMnUmXK4GcVuq7W7rtcGCbc84l7f/wIJ+biEiPooBbROQQmNkxeAH3m865CuBt4JPN3PQyYF7jjc65UuAXwH8d4hA+BP7inOuf9JPvnLvVzLKBx4CfA0Occ/2BfwGWPIRDPG5bdgAjzCz5WKNSdCwRkW5BAbeIyEEwswIzuwCvfvmvzrml/q6b8CZR3mBmfc1sgD9R8GTgv1t4uNvxar+PbOOwITPLSfrJBv4KfMzMzjGzsL/9VDMbCWQB2UAJUGdmH6VpHXmqvA1Ega+ZWYaZXQTMSdOxRUS6JAXcIiLt808zO4CXWf4eXrB8dXync+5N4Bzg43hZ3jJgLnCGc25Zcw/onNuP192ksI1jXwlUJf2sd859CFwE3IwXWH8I/CcQcs4dAG7Am7C5B/gU3sTGlHPO1eK9Bl/A68hyFfA0UJOO44uIdEXWsMxOREQ6g5lNB14FPuWcez7o8QTJzOYDv3XO3Rv0WEREgqAMt4hICjjnPgAuBqb1toVlzOwjZjbULymZC0wHngt6XCIiQelVbwIiIunknHsDeCPocQRgIl45Sz6wAbjUOddcy0QRkV5BJSUiIiIiIimkkhIRERERkRRSwC0iIiIikkIKuEVEREREUkgBt4iIiIhICingFhERERFJIQXcIiIiIiIppIBbRERERCSFFHCLiIiIiKSQAm4RERERkRRSwC0iIiIikkIKuEVEREREUkgBt4iIiIhICingFhERERFJIQXcIiIiIiIppIBbRERERCSFFHCLiIiIiKSQAm4RERERkRRSwC0iIiIikkIKuEVEREREUihlAbeZ/cnMis1sWTP7vmlmzswG+dfNzH5lZuvM7AMzm5WqcYmIiIiIpFMqM9z3Aec23mhmo4CzgS1Jmz8KTPB/rgHuTuG4RERERETSJmUBt3PudaCsmV13AN8GXNK2i4A/O887QH8zG5aqsYmIiIiIpEtGOg9mZhcB25xz75tZ8q4RwIdJ17f623a09niDBg1yY8eO7exhioikxbvvvrvbOVcU9DjSRedskRRZvdr7PXFisOPo4Tpyzk5bwG1mecDNeOUkHXmca/DKThg9ejSLFi3qhNGJiKSfmW0OegzpNHbsWJ2zRVLh1FO93/PmBTmKHq8j5+x0dik5HBgHvG9mm4CRwGIzGwpsA0Yl3Xakv60J59w9zrnZzrnZRUW9JjEkIiIiIt1U2gJu59xS59xg59xY59xYvLKRWc65ncBTwGf9biXHAfucc62Wk4iIiIiIdAepbAv4IPA2MNHMtprZF1q5+b+ADcA64PfAtakal4iIiIhIOqWshts5d2Ub+8cmXXbAdakai0hPFolE2Lp1K9XV1UEPRVqQk5PDyJEjyczMDHooIiKHrLe836TinJ3WLiUi0vm2bt1K3759GTt2LI26/0gX4JyjtLSUrVu3Mm7cuKCHIyJyyHrD+02qztla2l2km6uurmbgwIE99uTX3ZkZAwcO7PEZIRHp+XrD+02qztkKuEV6gJ588usJ9O8jIj1FbzifpeI5KuAWkQ776U9/ypQpU5g+fTozZ85k/vz5QQ/pkPzoRz9ixIgRzJw5k8mTJ/Pggw8GPSQREWlk165dfOpTn+Kwww7j6KOP5vjjj+cf//jHQT/Opk2bmDp1agpG2JRquEWkQ95++22efvppFi9eTHZ2Nrt376a2trZDj1lXV0dGRupPT9FolHA43GDbN77xDb71rW+xdu1ajj76aC699FJNdhQR6SKcc1x88cXMnTuXv/3tbwBs3ryZp556KuCRtU4ZbpGAVdTUsWhTWdDDOGQ7duxg0KBBZGdnAzBo0CCGDx8OwMKFCznhhBOYMWMGc+bM4cCBA1RXV3P11Vczbdo0jjrqKF599VUA7rvvPi688EJOP/10zjjjDCoqKvj85z/PnDlzOOqoo3jyySebHHvevHmccsopnH/++UycOJGvfOUrxGIxAF544QWOP/54Zs2axSc/+UnKy8sBb7XD73znO8yaNYtHHnmkxec1YcIE8vLy2LNnD/PmzeOCCy5I7Pva177Gfffdl3i8W265hVmzZjFt2jRWrVrV8RdVRESa9corr5CVlcVXvvKVxLYxY8Zw/fXXt/j+smnTJk4++WRmzZrFrFmzeOutt9I+bgXcIgF7/L1tXH7PO1TW1gU9lENy9tln8+GHH3LEEUdw7bXX8tprrwFQW1vL5Zdfzi9/+Uvef/99XnrpJXJzc7nzzjsxM5YuXcqDDz7I3LlzE5NTFi9ezKOPPsprr73GT3/6U04//XQWLFjAq6++yn/+539SUVHR5PgLFizg17/+NStWrGD9+vU8/vjj7N69m5/85Ce89NJLLF68mNmzZ3P77bcn7jNw4EAWL17MFVdc0eLzWrx4MRMmTGDw4MFtvgaDBg1i8eLFfPWrX+XnP//5wb6EIiLSTsuXL2fWrFnN7mvp/WXw4MG8+OKLLF68mIcffpgbbrghzaNWSYlI4Kpq64jGHJE6B1kde6wf/3M5K7bv75yB+SYPL+CWj01pcX+fPn149913eeONN3j11Ve5/PLLufXWWzn66KMZNmwYxxxzDAAFBQUAvPnmm1x//fUATJo0iTFjxrBmzRoAzjrrLAoLCwEvQ/3UU08lAtjq6mq2bNnCkUce2eD4c+bM4bDDDgPgyiuv5M033yQnJ4cVK1Zw4oknAl7wf/zxxyfuc/nll7f4fO644w7uvfde1qxZwz//+c92vUYf//jHATj66KN5/PHH23Ufab+xNz2T1uNtuvX8tB5PpFu68UZYsqRzH3PmTPjFLw7qLtdddx1vvvkmWVlZjBw5stn3lzFjxvC1r32NJUuWEA6HE+856aSAWyRgUa8CgphzwQ6kA8LhMKeeeiqnnnoq06ZN4/777+foo48+6MfJz89PXHbO8dhjjzFx4sRW79N4NrmZ4ZzjrLPOanHSY/JxGovXcD/11FN84QtfYP369WRkZCRKVYAm7aLi5TThcJi6uu75TYWISHcwZcoUHnvsscT1O++8k927dzN79mxGjhzZ7H3uuOMOhgwZwvvvv08sFiMnJyddw01QwC0SsHig3RkBd2uZ6FRZvXo1oVCICRMmALBkyRLGjBnDxIkT2bFjBwsXLuSYY47hwIED5ObmcvLJJ/PAAw9w+umns2bNGrZs2cLEiRNZvHhxg8c955xz+PWvf82vf/1rzIz33nuPo446qsnxFyxYwMaNGxkzZgwPP/ww11xzDccddxzXXXcd69atY/z48VRUVLBt2zaOOOKIdj+vCy+8kD/+8Y/cf//9nHfeeaxYsYKamhqqqqp4+eWXOemkkzr2womIdGcHmYnuLKeffjo333wzd999N1/96lcBqKysBGjx/WXfvn2MHDmSUCjE/fffTzQaTfu4VcMtErBYLB5wBzyQQ1ReXs7cuXOZPHky06dPZ8WKFfzoRz8iKyuLhx9+mOuvv54ZM2Zw1llnUV1dzbXXXkssFmPatGlcfvnl3HfffYkMcbIf/OAHRCIRpk+fzpQpU/jBD37Q7PGPOeYYvva1r3HkkUcybtw4LrnkEoqKirjvvvu48sormT59Oscff/whTWb84Q9/yO23386IESO47LLLmDp1Kpdddlmzgb+IiKSemfHEE0/w2muvMW7cOObMmcPcuXO57bbbWnx/ufbaa7n//vuZMWMGq1atavVbzpSN23Xjr7Fnz57tFi1aFPQwRDrkly+t5Y6X1rDg5jMYXHDwX3OtXLmySV1zbzFv3jx+/vOf8/TTTwc9lDY19+9kZu8652YHNKS0O9Rztmq4Rdpw6qne73nzUnqY3vR+09nnbGW4RQJWX1IS8EBEREQkJVTDLRKwzqzh7m3iEzVFRES6MmW4RQKmgFtERKRnU8AtErB4KYnibRER6eq689y/9krFc1TALRKw+i4lPf8kJiIi3VdOTg6lpaU9Ouh2zlFaWtrpvbpVwy0SME2aFBGR7mDkyJFs3bqVkpKSoIeSUjk5OS0uonOoFHCLBKwnrDS5a9cuvvGNb/DOO+8wYMAAsrKy+Pa3v80ll1xyUI+zadMmLrjgApYtW5aikYqIyKHKzMxk3LhxQQ+jW1JJiUjA4oF2d/2KzjnHxRdfzCmnnMKGDRt49913eeihh9i6dWvQQxMREekSFHCLBMx185KSV155haysLL7yla8kto0ZM4brr7+e6upqrr76aqZNm8ZRRx3Fq6++CniZ7JNPPplZs2Yxa9Ys3nrrraCGLyIiknIqKREJWLSbtwVcvnw5s2bNanbfnXfeiZmxdOlSVq1axdlnn82aNWsYPHgwL774Ijk5Oaxdu5Yrr7wSrRorIiI9lQJukYDFM9uxWCc9YHMLwVx2GVx7LVRWwnnnNd3/uc95P7t3w6WXNtx3kEsFX3fddbz55ptkZWUxcuRIrr/+egAmTZrEmDFjWLNmDWPGjOFrX/saS5YsIRwOs2bNmoM6hoiISHeigFskYK6bZ7inTJnCY489lrh+5513snv3bmbPnt3iLO877riDIUOG8P777xOLxTq9/ZKIiEhXooBbJGDRWHzSZCc9YGsZ6by81vcPGnTQGe3TTz+dm2++mbvvvpuvfvWrAFRWVgJw8skn88ADD3D66aezZs0atmzZwsSJE9m3bx8jR44kFApx//33E41GD+qYIiIi3YkmTYoELFFS0k0z3GbGE088wWuvvca4ceOYM2cOc+fO5bbbbuPaa68lFosxbdo0Lr/8cu677z6ys7O59tpruf/++5kxYwarVq0iPz8/6KchIiKSMspwiwSsJ6w0OWzYMB566KFm9917771Ntk2YMIEPPvggcf22224DYOzYserBLSIiPY4y3CIB00qTIiIiPZsCbpGAxQPt7rrwjYiIiLROAbdIwKLKcIuIiPRoKQu4zexPZlZsZsuStv3MzFaZ2Qdm9g8z65+077tmts7MVpvZOakal0hX0xltAZUd79r07yMi0rulMsN9H3Buo20vAlOdc9OBNcB3AcxsMnAFMMW/z11mFk7h2ES6jGgHJ03m5ORQWlqqoK6Lcs5RWlqqXuMiIr1YyrqUOOdeN7Oxjba9kHT1HSC+pN1FwEPOuRpgo5mtA+YAb6dqfCJdRX0N96Hdf+TIkWzdupWSkpLOG5R0qpycnBYXARIRkZ4vyLaAnwce9i+PwAvA47b625ows2uAawBGjx6dyvGJpEU8Mx09xCLuzMxMxo0b15lDEhERkU4UyKRJM/seUAc8cLD3dc7d45yb7ZybXVRU1PmDE0mzjpaUiIiISNeW9gy3mX0OuAA4w9UXnW4DRiXdbKS/TaTH62hJiUg6mNkm4AAQBeqcc7PNrBDvm8qxwCbgMufcnqDGKCLSVaU1w21m5wLfBi50zlUm7XoKuMLMss1sHDABWJDOsYkEJdYJXUpE0uQ059xM59xs//pNwMvOuQnAy/51ERFpJJVtAR/Em/Q40cy2mtkXgN8AfYEXzWyJmf0WwDm3HPg7sAJ4DrjOORdN1dhEuhKtNCnd2EXA/f7l+4GLgxuKiEjXlcouJVc2s/mPrdz+p8BPUzUeka4qFvN/K8MtXZsDXjAzB/zOOXcPMMQ5t8PfvxMYEtjoRES6sCC7lIgI9StNqo+2dHEnOee2mdlgvG8pVyXvdM45PxhvQJ2lRES0tLtI4JxKSqQbcM5t838XA//AWythl5kNA/B/FzdzP3WWEpFeTwG3SMDigbZKSqSrMrN8M+sbvwycDSzDm/A+17/ZXODJYEYoItK1qaREJGD1fbgDHohIy4YA/zAz8N43/uace87MFgJ/9yfFbwYuC3CMIiJdlgJukYA51XBLF+ec2wDMaGZ7KXBG+kckItK9qKREJGAqKREREenZFHCLBCxRUhILeCAiIiKSEgq4RQKmlSZFRER6NgXcIgGLJWq4Ax6IiIiIpIQCbpGAqYZbRESkZ1PALRKwmBa+ERER6dEUcIsELBZTDbeIiEhPpoBbJGDxzLb6cIuIiPRMCrhFAqaSEhERkZ5NAbdIwFRSIiIi0rMp4BYJWH2XkmDHISIiIqmhgFskYNFEH25F3CIiIj2RAm6RgDmtNCkiItKjKeAWCZhKSkRERHo2BdwiAYtq0qSIiEiPpoBbJGCxRA13wAMRERGRlFDALRKwRFtA1ZSIiIj0SAq4RQKmGm4REZGeTQG3SMBi6lIiIiLSoyngFglYTH24RUREejQF3CIBU0mJiIhIz6aAWyRgKikRERHp2RRwiwTIOZdoB6gMt4iISM+kgFskQMlBtmq4RUREeqaUBdxm9iczKzazZUnbCs3sRTNb6/8e4G83M/uVma0zsw/MbFaqxiXSlUSTIm6VlIiIiPRMqcxw3wec22jbTcDLzrkJwMv+dYCPAhP8n2uAu1M4LpEuIznIVkmJiIhIz5SygNs59zpQ1mjzRcD9/uX7gYuTtv/Zed4B+pvZsFSNTaSrSE5qK8MtIiLSM2Wk+XhDnHM7/Ms7gSH+5RHAh0m32+pv20FrVq+GU09tuO2yy+Daa6GyEs47r+l9Pvc572f3brj00qb7v/pVuPxy+PBD+Mxnmu7/5jfhYx/zjv3lLzfd//3vw5lnwpIlcOONTff/93/DCSfAW2/BzTc33f+LX8DMmfDSS/CTnzTd/7vfwcSJ8M9/wv/9X9P9f/kLjBoFDz8MdzfzRcGjj8KgQXDffd5PY//6F+TlwV13wd//3nT/vHne75//HJ5+uuG+3Fx49lnv8n/9F7z8csP9AwfCY495l7/7XXj77Yb7R46Ev/7Vu3zjjd5rmOyII+Cee7zL11wDa9Y03D9zpvf6AVx1FWzd2nD/8cfD//yPd/kTn4DS0ob7zzgDfvAD7/JHPwpVVQ33X3ABfOtb3uXGf3dwSH97WTHHQ5u8z6UfRufCx6bob683/u2JiEiPFtikSefNEDvolJ6ZXWNmi8xsUSQSScHIRNIn+T+ASkpERER6JktlZwQzGws87Zyb6l9fDZzqnNvhl4zMc85NNLPf+ZcfbHy71h5/9uzZbtGiRSkbv0iq7auMMOP/vQDAp48dzU8vmRbwiCSdzOxd59zsoMeRLod6zh570zMpGE3LNt16flqPJ9Jh8W9d498ESkp05Jyd7gz3U8Bc//Jc4Mmk7Z/1u5UcB+xrK9gW6QmimjQpIiLS46WshtvMHgROBQaZ2VbgFuBW4O9m9gVgM3CZf/N/AecB64BK4OpUjUukK0meKKk+3CIiIj1TygJu59yVLew6o5nbOuC6VI1FpKuKqQ+3iIhIj6eVJkUCFHPNXxYREZGeQwG3SIAaLnyjiFtERKQnUsAtEqDkpd0Vb4uIiPRMCrhFAqSVJqW7MLOwmb1nZk/718eZ2XwzW2dmD5tZVtBjFBHpqhRwiwQopraA0n18HViZdP024A7n3HhgD/CFQEYlItINKOAWCVBUNdzSDZjZSOB84A/+dQNOBx71b3I/cHEggxMR6QYUcIsEyKkPt3QPvwC+DcT86wOBvc65Ov/6VmBEAOMSEekWFHCLBCgaq78ci7V8O5GgmNkFQLFz7t1DvP81ZrbIzBaVlJR08uhERLoHBdwiAVJbQOkGTgQuNLNNwEN4pSS/BPqbWXzxtJHAtubu7Jy7xzk32zk3u6ioKB3jFRHpchRwiwRIkyalq3POfdc5N9I5Nxa4AnjFOfdp4FXgUv9mc4EnAxqiiEiXp4BbJEDJZSSq4ZZu5jvAf5jZOrya7j8GPB4RkS4ro+2biEiqqKREuhPn3Dxgnn95AzAnyPGIiHQXynCLBCiqkhIREZEeTwG3SICcMtwiIiI9ngJukQAlZ7UVb4uIiPRMCrhFAhSNKcMtIiLS0yngFgmQJk2KiIj0fAq4RQIUj7EzQqZJkyIiIj2UAm6RAMVLSsIhUx9uERGRHkoBt0iA4mUkmeGQMtwiIiI9lAJukQDFA+5wyFTDLSIi0kMp4BYJUHxpd9Vwi4iI9FwKuEUCFM9qZ4RVwy0iItJTKeAWCVAi4A6FVFIiIiLSQyngFglQvIwkHLJEeYmIiIj0LAq4RQKUXFKiDLeIiEjPpIBbJEDxPtwZIUPxtoiISM+kgFskQPUrTaqGW0REpKdSwC0SoESGWyUlIiIiPZYCbpEAJS98o3hb0sHMpgU9BhGR3iaQgNvMvmFmy81smZk9aGY5ZjbOzOab2Toze9jMsoIYm0g6xYPsTJWUSPrcZWYLzOxaM+sX9GBERHqDtAfcZjYCuAGY7ZybCoSBK4DbgDucc+OBPcAX0j02kXSLNljaPeDBSK/gnDsZ+DQwCnjXzP5mZmcFPCwRkR4tqJKSDCDXzDKAPGAHcDrwqL//fuDiYIYmkj5qCyhBcM6tBb4PfAf4CPArM1tlZh8PdmQiIj1T2gNu59w24OfAFrxAex/wLrDXOVfn32wrMCLdYxNJt1iiS4lquCU9zGy6md0BrMRLdHzMOXekf/mOQAcnItJDBVFSMgC4CBgHDAfygXMP4v7XmNkiM1tUUlKSolGKpEcsFi8pCSU6loik2K+BxcAM59x1zrnFAM657XhZbxER6WRBlJScCWx0zpU45yLA48CJQH+/xARgJLCtuTs75+5xzs12zs0uKipKz4hFUiReRpKpkhJJn/OBvznnqgDMLGRmeQDOub8EOjIRkR4qiIB7C3CcmeWZmQFnACuAV4FL/dvMBZ4MYGwiaRWNadKkpN1LQG7S9Tx/m4iIpEhGazvNbFZr++NfRR4M59x8M3sU7yvNOuA94B7gGeAhM/uJv+2PB/vYIt1Noi1gOIRThrtdduyr4gdPLOMXVxxFn+xWT2HSvBznXHn8inOuPJ7hFhGR1Gjr3er//N85wGzgfcCA6cAi4PhDOahz7hbglkabNwBzDuXxRLqrWIO2gAq42+P9D/fx0spiNpSUM31k/6CH0x1VmNmseMLEzI4GqgIek4hIj9ZqwO2cOw3AzB4HZjnnlvrXpwI/SvnoRHq4eB/uDJWUtFtdLOb/1gt2iG4EHjGz7XgJlKHA5YGOSESkh2vv97ET48E2gHNumZkdmaIxifQa8aS2+nC3X7zuXV1dDo1zbqGZTQIm+ptW+xPYRUQkRdobcC81sz8Af/Wvfxr4IDVDEuk94m0BM0Ih9eFup0jUe6HqonrBOuAYYCzee8AsM8M59+dghyQi0nO1N+D+HPBV4Ov+9deBu1MxIJHeJKoa7oMWTZSUxAIeSfdkZn8BDgeWAFF/swMUcIuIpEibAbeZhYFn/XpurUIm0omSV5pUwN0+iQy3SkoO1WxgslNbHBGRtGmzD7dzLgrEzKxfGsYj0qvEYo6QgZkmTbZXooZbJSWHahneREkREUmT9paUlOPVcb8IVMQ3OuduSMmoRHqJmHOEQ0bIUB/udopE1aWkgwYBK8xsAVAT3+icuzC4IYmI9GztDbgf939EpBPFnJfdDinD3W7qUtJhPwp6ACIivU27Am7n3P2pHohIbxRzXklJyFANdzvFM9uaNHlonHOvmdkYYIJz7iV/lclw0OMSEenJ2qzhBjCzCWb2qJmtMLMN8Z9UD06kp4vFHGEzvLZsKitpjzq1BewQM/sS8CjwO3/TCOCJwAYkItILtCvgBu7FawNYB5yG1z7qr63eQ0TaFHWOkF9SAqgXdzvE2wKqpOSQXQecCOwHcM6tBQa3dgczyzGzBWb2vpktN7Mf+9vHmdl8M1tnZg+bWVbKRy8i0g21N+DOdc69DJhzbrNz7kfA+akblkjv4ByE/EmToLKS9ojE1Bawg2qcc7XxK2aWgdeHu9X7AKc752YAM4Fzzew44DbgDufceGAP8IXUDFlEpHtrb8BdY2YhYK2Zfc3MLgH6pHBcIr1Coobbj7gVQ7atftKkargP0WtmdjOQa2ZnAY8A/2ztDs5T7l/N9H8ccDpeeQrA/cDFKRmxiEg3196A++tAHnADcDRwFTA3VYMS6S2iMa+kxJThbje1Beywm4ASYCnwZeBfwPfbupOZhc1sCVAMvAisB/Y65+r8m2zFqwcXEZFG2tsWsMzPbpQDV6dwPCK9SixRUqIa7vZSW8COcc7FgN/7Pwdzvygw08z6A/8AJrXnfmZ2DXANwOjRow9qrCIiPUV7A+4/mdlIYCHwBvC6c25p6oYl0ju4pLaAoAx3e2hp944xs400U7PtnDusPfd3zu01s1eB44H+ZpbhZ7lHAtuauf09wD0As2fP1j+aiPRK7e3D/RF/9vkxwKnAM2bWxzlXmMrBifR0Ub8tYDzDrYC7bfHa7bqoargP0eykyznAJ4FWz+VmVgRE/GA7FzgLb8Lkq8ClwEN4ZYZPpmTEIiLdXLsCbjM7CTjZ/+kPPI2X6RaRDoivNGmmSZPtVacMd4c450obbfqFmb0L/LCVuw0D7jezMN7cn7875542sxXAQ2b2E+A94I8pGbSISDfX3pKSecC7wP8A/0puKSUihy7mHKFQfUmJFr5pW51quDvEzGYlXQ3hZbxbfS9wzn0AHNXM9g3AnE4doIhID9TegHsQ3kIJpwA3mFkMeNs594OUjUykF4i5xiUlAQ+oG4iqD3dH/V/S5TpgE3BZMEMREekd2lvDvddfyn0U3sSYE/D6sIpIB8Qc/kqT8esKItsSbwuoDPehcc6dFvQYRER6m/bWcG8AVgFv4i3xfrXKSkQ6LhZzmJFUw60gsi2JDHdUr9WhMLP/aG2/c+72dI1FRKS3aG9JyXi/d6uIdKKYc4TVh/ug1C/trlPSIZqN13HqKf/6x4AFwNrARiQi0sO1O+A2s7uBIc65qWY2HbjQOfeTFI5NpMfzlnZXScnBSLQFVEnJoRoJzHLOHQAwsx8Bzzjnrgp0VCIiPVh7l3b/PfBdIAKJGetXpGpQIr1FNBav4dakyfaKL3wTVUnJoRoCJJcE1vrbREQkRdqb4c5zzi2I15n66lIwHpFexcXbAvop7pgi7japS0mH/RlYYGb/8K9fDNwf3HBERHq+9gbcu83scPzlgM3sUmBHykYl0ktEG5WUqKKkbXWJLiWq4T4UzrmfmtmzeAuZgTcJ/r0gxyQi0tO1N+C+DrgHmGRm24CNwKdTNiqRXqK+LaC6lLRXnTLcnSEP2O+cu9fMisxsnHNuY9CDEhHpqdrbh3sDcKaZ5ePVfVfi1XBvTuHYRHo85xwhA9OkyXaLtwNUH+5DY2a34HUqmQjci7emwl/xFjcTEZEUaHXSpJkVmNl3zew3ZnYWXqA9F1iHViYT6bBorGFbQMWQbYu3A4xo0uShugS4EKgAcM5tB/oGOiIRkR6urS4lf8HLgiwFvgS8CnwSuMQ5d9GhHtTM+pvZo2a2ysxWmtnxZlZoZi+a2Vr/94BDfXyR7iLmHGbJfbgVRLYlntlWDfchq3XeH1p8Tk5+wOMREenx2gq4D3POfc459zvgSmAycI5zbkkHj/tL4Dnn3CRgBrASuAl42Tk3AXjZvy7So3k13CT14Q52PN1BPLMdVA33H97YwJ2vrgvk2J3k72b2O6C/mX0JeAmv9auIiKRIWwF3JH7BORcFtjrnqjtyQDPrB5wC/NF/3Frn3F7gIupbU92P16pKpEeL+SUlWtq9/eoz3MG8Vi+s2MULy3cGcuyOMu8P7WHgUeAxvG8wf+ic+3WgAxMR6eHamjQ5w8z2+5cNyPWvG+CccwWHcMxxQAlwr5nNAN4Fvo63imW81eBOtBCD9AJBrjT5q5fXUlMX5T/PmZS2Y3aGuoBXmoxEY1RFooEcu6Occ87M/uWcmwa8GPR4RER6i1Yz3M65sHOuwP/p65zLSLp8KME2eEH+LOBu59xReBN3GpSPJNcXNmZm15jZIjNbVFJScohDEOkaoo3bAqaxLPnf63bz5rrS9B2wk9QFnOGORGNU1nbPgNu32MyOCXoQIiK9SXuXdu9MW/FKU+b71x/FC8B3mdkwAP93cXN3ds7d45yb7ZybXVRUlJYBi6RKvC1gyP+fmM4Md200llhEpjupC7iGO1LnqO6mGW7fscA7ZrbezD4ws6Vm9kHQgxIR6cnau/BNp3HO7TSzD81sonNuNXAGsML/mQvc6v9+Mt1jE0m3eElJEDXckWgsEbx2J4mSkoA+LNRGY1R1wwy3mY12zm0Bzgl6LF3d2JueSevxNt16flqPJyLpl/aA23c98ICZZQEbgKvxsu1/N7Mv4C2ooz7f0uNFYxAKqA93bV03DbgDXvimts6r4XZ+S8du5AlglnNus5k95pz7RNADEhHpLQIJuP22grOb2XVGmociEqhESYnVX0+XSNQlssXdhXMu8KXdI9EYMedlurMzwoGM4RAlfzo4LLBRiIj0QkHUcIuILxpzDSdNKsPdquSsdmAZbr+UpRuWlbgWLouISIoFVVIiIvg13CHDAmgLWBuNdbuVLZOz2kFl5yN1fsAdidI/kBEcshlJbV1zG7V8PdQ2ryIi0g4KuEUC5Bq3BUzzpMluFm83zHAHlJ2Pr3TZ3TLczrluVf8iItKTKOAWCVDUOcJGIuBOZwBcWxejW035gwYlMJEASkqcc/UlJd27NaCIiKSRAm6RAAW50mQkGsO6WcidXEYSRA13JCng7+a9uEVEJI0UcIsEKBYDa9CHO13HdUSiDrPuVVMSr+HOzggF0oc7knTMbr7apIiIpJG6lIgEKOYc4RBpz3BH/Eyxc8F1+zgUyQF3MBnu+oC7u9Vwi4hIcBRwiwSovqQkXsOdniCytq4+cIx0o+Xd41ntnMxwIH24k1831XCLiEh7KeAWCVCTlSbTFPsm1yJ3q4A7nuHODCbDXZv0WqmGW0RE2ksBt0iA4itNprsPd3KmtjstfhMfa3aGl+FOdx/x5A8qKikREZH2UsAtEqDGJSXpStomZ7W7V4Y7XlLinbrSneVuMGlSGW4REWknBdwiAUos7e7/T0xbDXdywN1K0Lq3spYXV+xKx5DaJZ7hzsnw1nBJdx138jcD1cpwi4hIOyngFglQ05Um03PchiUlLWe4H313K1/68yL2V0fSMaw2xQPsnEwv4E53hjv5g4omTYqISHsp4BYJUGBtAdtZUlJeU+f9rq5L+ZjaI5rUFhDSn+GOqEuJiIgcAgXcIgGK+jXc9QvfBNEWsOVjVke821XWdo2AO7ktIASc4a7tPrXvIiISLAXcIgGKOW+lyfo+3Ok5bnLg2FqXknjru/KarpHNrWuS4U5v0Ntg4ZtI1/gQIiIiXZ8CbpEAxWLBlJQkZ7hrWykpiQfclTVdI7iMB9jZfoY73S0Na+u842WErFe1BTSzUWb2qpmtMLPlZvZ1f3uhmb1oZmv93wOCHquISFekgFskQMG1Baw/UGuTJuMBd0UXCS4TXUoCbgvYLzezt9Vw1wHfdM5NBo4DrjOzycBNwMvOuQnAy/51ERFpRAG3SIDiJSWBLnzTStAaDyq7TA13oy4lQbUFLMjNpCrSe2q4nXM7nHOL/csHgJXACOAi4H7/ZvcDFwcyQBGRLk4Bt6SFc46fP7+aZdv2BT2ULiPmB4vhBjXc6e9S0npJibevvBNKSn772npeXtmxnt6Na7ijAdVwF+RmUlVbh3OOT/3+HZ5csi2t4wiSmY0FjgLmA0Occzv8XTuBIUGNS0SkK1PALWkRiTp+8+o6XuhCi6gELZ7NDhnp78PdzkmTiQx3BydNVtVG+fnzq/nta+s79Djx8pfsgBa+aVxSsrcywlvrS9ldXpvWcQTFzPoAjwE3Ouf2J+9z3qfFJv8gZnaNmS0ys0UlJSVpGqmISNeigFvSoqbOC9iSSxl6u3isGApZoJMmW6vhrknUcHcsw/3eh3uoizne/3Bfoi78UNSXlPhdStI8abImXlKSk0FVbYyS8hoABvfNTus4gmBmmXjB9gPOucf9zbvMbJi/fxhQ3Ph+zrl7nHOznXOzi4qK0jdgEZEuRAG3pEU8wFPAXa8+w53chzs9xz7YkpLKDk6aXLhxT+JYH2w99LKi+kmTwfThjk82LcjNpDoSpXi/F3AX9fCA27w/0D8CK51ztyftegqY61+eCzyZ7rGJiHQHCrglLeJBXW20V3V2aFXDkhJvW7pquBtmuNsuKeloDffCTWWMHJCbuNyW3762nu8/sbRJQB2v2U5kuAOq4Y6XlBQfqAZ6RYb7ROAzwOlmtsT/OQ+4FTjLzNYCZ/rXRUSkkYygByC9gzLcTcWDyXAoqS1gmjK2yRnu1oLWzujDHYnGeHfzHi6bPZK3N5Qyf2MZ153W+n2eXbaT9z/cS1VtjJ9dOp2Q/4mkftJkMH24I9EYIYM+2RlEY47te6sAGFyQk9ZxpJtz7k3AWth9RjrHIiLSHSnDLSlz17x1/N8Lq4H6QLtGAXdCPLa2APpwN1z4pu0Md0f6cC/fvp+qSJRjxhVyzNhCFm/e02YpyJ6KWvrlZvLY4q3c88aGxPag+3DX1sXIDIcSJS2bSyvJzQyTnxVO6zhERKR7UcAtKfP6mhLmrfa6EtQow91EvHwkbGD+/8S0TZps58I3NYka7kPPcC/c6JWQzBlbyJxxhZTX1LFyx/5W71NWUcslR43g8KJ8lmzZWz/WxhnudAfc0RhZGSHy/AB7c1klgwuyEzX4IiIizVHALSlTUxdLdCdRwN1UPDsbCiX34U7PsWvrYonFdloqy4jGXKL2vryVtoD7KiOceftrLfZYX7S5jDED8xhckMOccYXetlbquGvqopTX1DEwP4tBfbIpq6hvuRf/cBDkSpNZ4RC5fob7w7JKivr0+PptERHpIAXckjI1kViTQLu1jhi9TcOSkvi29NVw5/lBY0v/Jsnt+1qr4f5wTyXristZsLH5IHrX/hpGF+YBMLQgh6xwiJ1+d4/m7KmIAFDYJ4uBfbIoq0wKuIPOcDcqKdmxr5rBBQq4RUSkdQq4JWVq6qKJkoR4UKca7nqxRElJMDXcuVnenOmWMtwNAu5Warjjt4tPIGxsf1WEfrmZgPfhoiA3k31VLS8UE89oF+ZlMSAvq2GGOxYjHDIywv4kyjR/gItEHZkZRm5SzbYy3CIi0pbAAm4zC5vZe2b2tH99nJnNN7N1ZvawmWUFNTbpHA1KSiJa+Kax5LaAFkCGOyczRMha7lISnzCZmxludeGbeDC+raWAuzpCgR9wA/TPy2RfVaTFx0sE3PlZDMzPYm9lbaJ0pC7myAgZGY26lqRLbaOSEuj5HUpERKTjgsxwfx1YmXT9NuAO59x4YA/whUBGJZ2mti6ppCTa/Wq4n1u2g9k/eTHxoaGzNVxpMl7Dna5Jk97kv4xwqJWSEm97YX4WFa2UlFS1kuF2zrG/qo6CnPqAu19uJnsrWwm4K+sD7gH5WcQciQC9LuoF3OFQQDXcfklJnjLcIiJyEAIJuM1sJHA+8Af/ugGnA4/6N7kfuDiIsUnnqamLNem/3Z1quNeXVLC7vJby6o4t+tKSeM/tUEAlJVnhEJkha7OkZFCfLCJR1+KHpfjtmstwV0di1EZjiZISgP65rWe49yRluAvzvS+64lnvaMyREQ6lNcMdi7lEl5b4B5WcpAx3kWq4RUSkDUFluH8BfBuIv4MPBPY65+KRzVZgRADjkk5UUxelLuaoizYNvLuDeBlMqurOm1tpMp0lJZnhEJkZoRbroOOB9EA/g9tSa8Aqv6Rkd3ltg7pv8MpJAApy69fYaivDXVpRi5l3u8YBdyQa8zPc3gsWTcNKk/94bxvH/88rVEei9V1KlOEWEZGDkPaA28wuAIqdc+8e4v2vMbNFZraopKSkk0cnncU516CcpDuWlFSn+ENCPDkbDhlmhlkaM9zxkpJQqMWFb+KlIgP9oLelxW+qkoLsxmUl+/1MdoOSkrzMxPbmxBe9yQiHGJDXXIY7vTXcq3cdYF9VhH1VESJ1jswmNdwKuEVEpHVBZLhPBC40s03AQ3ilJL8E+ptZPA02EtjW3J2dc/c452Y752YXFRWlY7xyCCJRl+gpXROJNelW0h1UpzjDHa8/ji+aEjJL39LudY7MsJEZtlYy3H4Ndx8/4G6hjju5g0njspJ46UhySUm/3EwO1NS1eNyyitpEZntgn4YBtzdp0qs9h/TUcJcc8FoYltfUURONkZlRH3CHDAbmK+AWEZHWpT3gds591zk30jk3FrgCeMU592ngVeBS/2ZzgSfTPTbpPMkTDWvqummGO8WdVVxSSUn8d7pKSmqiMbIywmSGQy1miRM13H5A2VLAXd0owx2JxthQUg4kl5Q0rOH29jX/eGUVtRT6me14hnuPP5GyLhojI1xfUhJpZVn6zlJ8oBqA8uo6In7te3aGd+oc2Cc7MRYREZGWdKU+3N8B/sPM1uHVdP8x4PFIByRnhWvqot1ypcnqRFY+NV1Kokl9uMHLdKerpMQLHL1+1i1965AoKfGzzC314q6qjZKd4bUY3Laninte38C5v3yD8po69ld5QXVBTlINd54XcO+tbL4X957K+gx3TmaY/KwwpeX1Ge5wUlvAdNRwxzPcFTV1Xg13hhEKGbmZYQb3VXZbRETaltH2TVLHOTcPmOdf3gDMCXI80nkaBtyxBl1KnHOJMoquLFFSEklRDbf/sPUlJelvC5gZannSZHzSaDz4bSnDXRWJ0jcng6xwiK17q1i54wC1dTF27qtutqSkf673eHtbqOMurahl5qj+iesD8rOSMtyuwaTJdNRwF/sB9wE/4M70y1lys8IUKeAWEZF2CDTglp6rJqnMoCYSa5DZro3GEktzd2XxSZM1Kao7T6w0GUqq4U57l5KW2wJWJdoC+iUlrXQpyckMM7QghwUby9i6x6vjLjlQk5gc2Tdp0mS8vKS51oDOOfYk1XCDN2mztHENdzzDneKSkpq6aKKjSnl1XWJpd4CRA3KZOKRvSo8vIiI9gwJuSYmmJSX1AXhtXTcJuGtTnOFuUsOd7pKSeJeSthe+AaioablLSW5mmBEDclm0eU9ie/GBavZXR8jNDJOVUV+91t8vKdnXTGvA/dV11MVcg4B7QH5WUklJwxruVGe4d5fXl71U1NZRG3WJ5/LwNccnlpgXERFpTVeq4ZYepLaFkpLG+7qyav9DQqo6qyRWmkzUcKdv0mSt323D61LScoY7M2yJcpAW+3BHouRmhRnRPxeAUYXe75IDNeyrijQoJ4H68pLmMtzxRW/ikyUBCvOyGrYF9NsoZoQs5V1K4vXbAAeq6xJ9uMErKYlnu0VERFqjdwtJicYZ7uSgtbu0Bqyv4U7V0u5+hjuppCRN8Xb9SpPhEHUtTDysjkTJyQgnWuCVt5Th9ktKhvsB9yePHkVWRsgvKalrsOgN1AfczS1+k1jWvU9SwJ2f1WjhG++0FQ4ZkRRPmizeX524XF4TLylRVltERA6OAm5JiQZtARvXcHeXDHeKe4fXL+1O4nc6M9xZGV4/65YWvqmOxMjODBMKGXlZYSpbaQuYlxVm5qj+DMjL5GMzhlPUJ9sLuKsjDRa9AcgMh8jPCjeb4S7zSzgK8xqWlFRFolTVRhML3wBehjvFNdzFSRnu+i4lOm2KiMjBUQ23pERy3XNttLsG3Kntw51YadKCmDTpL3wTam3hmyi5WV5wmZeV0eJKk5W1UYb3DzN1RD/e++HZABT1zabYLykZWpDT5D7987LYW9W0LWAiw91o0mR8XyTqyMn0Xq9wyFJew11yoAYzGNI3hwN+fbnKSERE5GDpnUNSokFJSSTWpE1gd5DulSbT1Yc7GnNEY46ssL/wTYsZbq+kBKBPdrj1Gu7MhpNgB/dNynA3quEGr1NJc8u7x0tHGk+aBK++O5oU8GaEQymv4S4+UENhXhb98zITrQkVcIuIyMHSO4ekRMOVJqNN2gJ2B9UpXqynuZUm09GHO+K//pkZ3sI3kVYWvsnN8gLpvKyMVleazMlqGHB7Ge5qr4Y7p+kXaf1zM9lbGeFAdYS75q1L/L3sqaglKyNEXtLjxTPcpRW1iYVvIH0Z7qK+2fTJzkh8GMhWSYmIiBwkvXNISjTOaNdE6yebdYeSkljMJcaZ/OGhU48RLylJ7sOdhpcm/m8TnzTZ0sTD5Ax3fna45baAtc1luHPYUxlhf3XTLiXgTZzcVxXhySXb+d/nVvPiil0ALNu+jzGFeQ0WRkrOcNdFY4ke3JkhS/lKkyUHqinqm01+UsCtDLeIiBwsvXNISjRY+MZvC9gn28t0doeAuyYNNefxpd2TV5pMRw13PKOd1WZbwBjZmfU13M2VlDjnqPInTSYbXJDt76fZkpL+eZnsrYqwcFMZAM8t28neylre2VDGWZOHNLhtfAJlqV9SkuEHvOFwejLcg/vm0CcnI9FVJTMcglgUdq2ADx6BFU+ldAwiItL9adKkpETDGu4otXVR+uZksqcy0i0C7upGHxhSofFKk+mq4a5NynBnhEMtlpTURKLk+kuX98nOYNveqqa3qYsRc5DTKMNd1Kd+yfPGXUrAz3BXRliw0Qu4X11VzDNLdxCNOc6dOrTJbTPDRsmBGiKx+gx3Rqjl+vPO4JyjpLyacdn7yKtczci6d9kUGkJmeDrUHIC7j/duOOpYmHxhysYhIiLdnwJuSYl4UJcRMq+kpC6WCLy6Qw13daOVMVOhSQ13KM013OEQmSEj0tqkycx4DXe42Rru+AeTJiUlBUkBd3MlJXmZ1EZj7NhXzRmTBvPyqmJuf2ENw/vlMG1Evwa3DYWMwX1z2LW/mmjUJQLucCcvfONqDvD75xZy0jGzmTy8gMhfL2dBxr8Z8F65d4NM+HvdR7y2gLn94bI/w8DxMHBCp41BRER6JgXckhI1dTHCfv/mRElJTvcpKamqTX2Gu9I/RjyoTVdbwPpJk34Nd2uTJv2xFfg1183dBkhMrowr6psccDc9zSTXdX/9zAks2FRGaUUtnzthbIP67bghBdns3FdNpFEf7pYW7WmX9a/Alndg13LYtRzbs5E5scN4NPQAPxw+mcqsgTwbncO0WSewMjaKnywy9tOHu+M13JMvOvRji4hIr6KAW1Kipi5KdkaI7MxwYqXJvt2ohrs6kvoa7j1+TXD/PC/4DKWppKSmUUlJy20BY+T4NdyD+mRTWRulsraOvKz600b8g0njDPegNkpK+udm+fsymDq8H2dMGswTS7Y3KSeJG9Yvl5U79vtLu9evNNlmhrtidyKgpng5HNgFVz3q7Vt0L6x6GgoPh2Ez2Db2En4xP4NYiZfRXjrr/3Hzewt4eOZx7Nu6j/2sBDRpUkREDp4CbkmJmrqYF3BnhBIrTcYz3DXdrKQkVRnuvX7Xi3jwaWmbNOkdIyvDyAx7y6M755pklquSSkoG+kutl5bXkleY0eA20DTDnRkOJZZkb6lLCcDssYWEQsYXTz6MPjkZHDO2sNkxDynI4dXVxYRDlqh5zwiH6idN1tVAyWovsJ52KYQz4aUfw5u31z9I3iAYMsW7bUY2nPdz+Pg9kOktST9/8Vbmvf0+I4q9gHtDSQUAowfmsWF3ReJhtNKkiIgcLAXckhI1kRjZGWEv4PZLSvp2o5KShpMmU9MWcE9lhD7ZGYkALmRGOhaarJ806S184xwNlkyH+raI8YB7kB9w7y6vYVRhXuJ2LWW4wVv8pqyitsUuJQBzxnkB9tQR/fjJiGktjnloPy/DbubICnnjn1y3iouKn4Q7d8HuteD8f6dhM2DIZBh/BuQNhCFT2J59GN97cRd3fHIm/TP8RXX6NuyGsrm0EoBte6uoqKlj2bZ9FOZnMbQgJ9FhB5ThFhGRg6eAW1Kipi5KdmaI7AxvhcK6mKNPtj9pshsE3PGl6bMzQikb797KhtnfdLcFzAxbIsiuizkykmLmeIa/PuD2SkRKyxsux95Shhu8Ou7Vuw4kSomSTRzaly+dPI6PzxrRykCrYPsSKF7O2RsXcFTWe0y0D/nXgVuBafSlgsNqV0Hh0TDpAi97PWSKVyICMPYk7weY/95WXl1dwrzVJVx8VPPH3Fxan8XeUFLB8u37mTK8ADNrEHBnZTStMRcREWmNAm5JiURJSWaIcr+7RXfMcBfkZqaupKQqwoD85IA7PZMmExnujBCZfj10JBpr0NovXsOe69dwD/QD7t3lNQ0eq7UMd1HfbPpmZxAKNQ1QM8Mhvnf+ZO9KtA5K13k11ruWw9iT4fDTvG33ngvAyMy+7GIET0RPwmUPBGBZ3hyuy76PR648oc3nHP+gsGBTWcsBd1klg/tmU3yghpU79rO2+AAnHzEOIFEOBd43AyIiIgdDAbekhBdweyUl8QVDcjLDhAxqo6kp0ehM8Qxvv9zMFE6arGWAv6gLpLEPd3JbQD/D3bg1YPwDR6KGO2l59WRVjW6X7PMnjuPkCYPqNzgH5cVQVwUDxkJtJfzpbChZA1E/kA9lQFa+F3APmgif+rtXEhIZwOU/nwfAjQVeG75wyKiKtO8FK/E/KCz0+343Z0tpJadNGsw/3tvGs8t2EIk6pgz3WhQ2KClRhltERA6SAm5JiUSXkowwB6q9BVOyM0JkpbBEozPFM7wFORnNtsPrDHsrI4wcUF8PHbL09OGOv/7ZGaHEqo11jSayNg6kczLD9MnOaJLhjgfmjVeaBK8ue2rp8/Dce7BrmZe9riyFKZfAJ++DrDyvh/Vhp8GQqV7d9aAjvAmNABlZcMQ5AAxOqqmvX/im/X244xnutcXllFXUUpif1WB/eU0dpRW1HF7UhzED83hj7W4ApgwvAFANt4iIdIgCbkmJmkiMLL9Lyf5qL2DNygiRFe4uAXd9hrukUZDZWbwMd+OSkpQcqoFIcxnuWOsZbvAmTu5uVMNdWRNhjO2kYONzsM/vEpKRDZ/4g3eDt3/jTWgcfCRMPM8LrEceU/8An7y3XWPOyQwnup7EPyS01tKwsdLyGu9vLxpj4aYyzpnSsP1gvH57zMA8xhf1YUNJBXlZYcYNzAcaBtxZCrhFROQgKeCWlKiNel1JsjPDiRpuL8Md7h4rTfoZ7n65mYkJlJ0pGnPsq4rQP8hJk/7CNwCRRh+C6gPu+uByTF4tRaUL4b3lcNRVAJyy5Ftcnf0KPAlgUHgYjD6u/oGuehxyC71lNDtoSEGOF3AfQoZ7d3kts8cOYNHmPSzc2DTg3uJ3KBldmMf4wX14YcUujhxWkKg/z28waVIBt4iIHBwF3JISyW0B4zFkVjiUaBPY1cVLKvrmZKbkA8L+qgjOQf8gargbLXwDNFyxsa6W6lrvQ9LwHS/Bwsdg1wruP7Dd2/8k3iqL2X35YNAF3LPjcG796pXY4Ele/XWy/EF0lqEF2azcQYOl3du70mRpeQ1HDOnLzFGOhZua1nFvLvMC7jEDvYAb6stJwP92xi+HUkmJiIgcLAXckhL1bQHrg5OsblTDXRPxatBzMlMz3j2VXmlGwy4laarhji98Ew6RW7efU0PvUfDuUqhcB7tWwO7V2DnPAJAb2eetzjjuFJ4tKeSZXYX85sarIMsLSlf0PZ5/hkdw28ijUz7uof1yAAjHS0pCVr/wTSucc+yuqGVQnyyG9cvh7tfWs7860mAFzM2llRTmZ9E3J5MjhvQFvBr0ZH2zMyitq02U4fQmZvYn4AKg2Dk31d9WCDwMjAU2AZc55/YENUYRka5MqZpuxjnXYFGWrireFjCrccDdjWq4czLDZKUoI7+3Kr6se32GO6VtAWsOwIcLYNGfmLPiv5lim8jKCDG4dCH3Zf2MwfP/B7a8A/1Gwgk3sCfi1W7HZn0WvvomfPx3rBz3OZ6pmky0z1BvWUy8bwKaawmYCkMLvBUhMxMZ7vbVcJfX1FFbF2NQn2xOm1RENOZ4dVVxg9tsKatgtL+gz5ThBfz+s7O5eGbD9oHx1oC9tKTkPuDcRttuAl52zk0AXvavi4hIM5Th7maeWbqDmx9fyvybz2x2sZGuor4tYP0YszO8ALa71HDnZIbICoeJxhx10Vii/KIz7I1nuBsH3B19aWJRKNsAGTnQfxSUroe/XAJ7NyduMjGcz1gbSmbYODDsOD5Z80O+d/UnmHnE2MRttr2+Hihu0M1jYJ9snPOy8/GFcCpro822BEyFof28Y4YPsoY7PtFzYJ8sjho1gKK+2Ty/fCcXJQXUH5ZVMXNUf8Ar7Tlr8pAmj5Of5Z0uMzuhHr27cc69bmZjG22+CDjVv3w/MA/4TvpGJSLSfSjg7mbWF1ewv7quyRLbXU28JKO7lpRU13mBZLY/abC2kwPuPRVehju5S4kdyqTJaAQW3ON1B9m1HEpWQV01nHgjnPVj6DsURsyCWZ/xOoQMnsyv5lfx7GvruTMcwnIHsNBNoiajb4OHLauIkBluuMLioKTFb+KXqyPRtH3wG1LglZRkJrqUtK+kpNTvMjOwTzahkHHOlCE89u62xLcYACUHahhSkN3q4/TJySAjZM0u5NNLDXHO7fAv7wSafkoBzOwa4BqA0aNHp2lo3cvYm55J27E23Xp+2o4lIvUUcHcz8RZ7eysjjCoMeDCtqKmLeTXcSV0ussLdrKQkI5xoAVdbFyMvq407HYR4DXf/3IYZ7mYztpFqL5AuXlEfWBdNgo/e6i0U89r/QjjLW9b8mC96v0cd6903K9/reZ38cLGViaA10aWkUWlGWUUNhflZmNUHlwP7+IvfJLUGrKpNX0nJWL9FXz+/s4uX4W77bymR4faz9edOGcZf39nC62tKOHvKUCpq6qiKRBOrabakb3ZGby0naZNzzplZs59+nHP3APcAzJ49Ow3TgkVEuh4F3N1MfBGWVC3G0hnqojHqYq5JSUk8w11RW0cs5nh/616qIlEG981m/OC+rTxi+sVLSuIfGDq7jntvZYSQ1S93DxC2GAPqdsKqf0HNfphxhbfjD2d4C8eAVypSNAly+3vXzeDGDyCn4QS/1tTUxRKBY0aiD3fD51dWEWlQ7gJeH25ouLx7VRoz3GMH5fPs109moj+pMRwKURfz5jTsr44wuG9Os/eLj7eorxdQH3tYIf1yM3lu+U7OnjI08QFiUBsBd352hjqUNLTLzIY553aY2TCguM17iIj0Ugq4u5n9fqC9t6q2jVsGJ16j3bikJHmlybc3lPLpP8wHIDNsLP7BWfRN6hoRtOpIlOzMhhnuzlRxYC/987K88oT5v4Olj/L77cvIdZXwEJBfVB9wn/It7/eQqV6f61CjAPcggm2oXwUU6uuRG08+jGe4k9WXlCRluCOxBr3EU+3IYfWt+jLC3jcCP3pqOU8s2cb9V8/h2MMGNrlPPKCOf4DIDIc4bWJRYjXJ3RXxkpPWv8IY3j838aFDAHgKmAvc6v9+MtjhiIh0XWkPuM1sFPBnvHo/B9zjnPulWky1T7ykpCtnuOMLxWS1EnBv8fseX3XcaP76zhZ2l9d2rYC7Lka/3Eyy/XKJDmW4934IH873lzf3ykK+v387b/V52NtftRfCmbyZfxZrGMN1l18IgyfV33/KJYd+7GaUHKif9JiZ4We4G01k3VMZYcrw3AbbCnIyyQgZpeU1bC6toH9uFlW1dQwraD6znGrhkFFbF+NfS3dQHYnx+fsWcsuFUyjIyeSYsQMSJSKlFTX0y81sUA4yblAfnliynZq6aH2GO7/1DPfXz5jAF08el7on1IWZ2YN4EyQHmdlW4Ba8QPvvZvYFYDNwWXAjFBHp2oLIcNcB33TOLTazvsC7ZvYi8Dm8FlO3mtlNeC2mNOO9kX1V3oIkeyu7bsBdn+EOJwJW8APwsNdmr3i/l1X8yBGD+es7WyirqGHcoPxmHy8INZEoOX2zExnumro2WjE6Bwd2QrFfY71rBZx5CxQMh5VPwfM3e/XWgybCmOP5++a+DMr2A8BTvwOnfocH7l3Anoparht1TOvH6qCS8ppEeUVGKF7D3bikpLZJhjsUMgrzs3h1dQl/eHMjs8cMSGtJSWPxPtz7q+v4ycVT+f0bG/j2ox8AcOGM4fzqyqOA+CTPhs9lmN/Tu3h/TaLkZFDf1rPXuVnhLt0ZKJWcc1e2sOuMtA5ERKSbSnvA7c9q3+FfPmBmK4ERqMVUu8RLSvZ3gwx3i11KojFKyqsZkJeZ6AxRVtG1nk+8g0WiS0lyhru2AopXeT2r+w6BDa/BI5+DqqQVDPsOh/3bvYB76ifgsFNh4ATI8IK6v/zyDYb3aZgZDrWw0uSSD/dyWFF+g4VaOqJkfzWHF3mlF/FFXJJLSiLRGPuqIk0CbvA6fazcsZ/8rDBvrS8lHDJyxgcVcHv/NnlZYS49eiSfmDWSjbsruP3FNbyzoRTnHGbG7vLaJhMih/gB98791YkuJs09XxERkc4QaA2339f1KGA+ajHVLsldSrqqeDa4yUqT4fqSkuL9NQzum5MIcsoqapp9rKBURaLepMlwiP4coGjR7fDWBq9TSNlGwMEFd8Dsz0P/0XDkx7zuIEOmwODJkJfUQqbvUO8nyd7K2gb1yOCtNNm4LeD+6giX3v0W3zjrCK47bXyHn5dzrkGGu75LSf0HivjfVnMB6PjBfaiti3Lv5+Zw4Z1vsrcyQl5QGW7/w8KpE4sS7f0mDy/g1IlFvLRyF1vKKhkzMJ/S8homDm04KXeoXwazc1+1X86U0WCCr4iISGcKLOA2sz7AY8CNzrn9ye3H1GKqedGY40C1V1LSpWu465JKSvwgJmSQkdQWMB701QfcAT+filK/HGQF7FrGH2vfYkfpWWRlfIcYIUYs/Y03YXHoNJh+hd96b45338JxcOGvDupweyojDXpwg7fgSuMM94rt+6mLOXbsq+rIs0vYWxkhEnWJjh71XUrqD1xW4dU0Nxdw33HZDGLO+7bi8yeO4/YX16StLWBj8QVwzpnS8MPMnHHeh535G8sYMzCf3eW1nNgowx0PuHftr2Z3eQ1FbXQoERER6YhAAm4zy8QLth9wzj3ub1aLqTaU+8E2dO0uJYkMd0Z9W7144B0vKSneX8Ox4/LJy8ogJzOUvgx3XQ3sXuPVWWfkwJSLIRaDX06H2nLvNnkDORAbSm3OQLIzwuwnn1cuWcIZ08d0yhCqI1GqIlEGNK6RNog1iriXb98PNOx93REljVrk1Xcpqc9wJwLuZhqPJy/+M/f4sfxt/hYOKwqm9n7swDyGFuRw2qTBDbaPL+pD/7xMFm4s4+KZI9hXFWFgowmRBbne393OfdWUlte22aFERESkI4LoUmLAH4GVzrnbk3apxVQbkrPa8cmTXVFzNdxZSb+jMUfxgepE0FeYl9X5GW7noLIM8v02cS98H9a+BKVrIea/dqOO9QLuUAjOvx3yB8GQqbj8Iq68+VluGD6B8f64q+m8gCxestG/UYbbq+FuHHDvAxr2vu6I+GTVwfGAO6O+pORfS3dw9JgB9QF3G0Fov7xM3rrp9MBWXjx36jDOmTK0weI84E3uPGZsIQs2lSWeS+OA2swY1i+XHfurKa2o4bBBfdI2bhER6X2CyHCfCHwGWGpmS/xtN6MWU22K128X5GR07UmT8ZKSzHCzATd4KxvGA+4B+VmJlRcP2a7lsOUd73fxCq80JCsfvrnS2x+phgFjYdJ5fp31FBh4eP39Z1xeP/6Il6HPSapBb7NLSTvVRWP8+J/LARILuMQ1F3Cv6PQMdzVAUpcSL1jdvrea//7XKq455TBGFeYBzWe4Gwt6mfPGwXbcnLGFvLhiF9965H0AjhzWdGGlIQXZ7PJruI8Zqwy3iIikThBdSt4EWnqXTnuLqUcWfchxhw1MBBldSeOxxYPs0QPz2FhSEeTQGqisreNv87cw94SxZIZDDUtK4qUkfilCVlJJQiLDnZ9FaUU7AspoHZStr1/evGSVt2x5OBPevR8W/A6yC7yAetql3m/nvNUYz/95u59PdTzgzggnPiB01sI3Nz2+lGeX7eQHF0xm9tjCBvvMvOEmj2NtsVfmkrIMt//v8e913iIwy7bto0+2d1ro35lr2afZMX4d95vrdnPLxyZz9JjCJrcZWpDDgo1l7KmsbXOVSRERkY7o1StN7quK8J+PfsCnjh3Nf18yLejhNLBzXzX/+egHXHPKYdx83pFAfUnJ6MI8lm3bTyQa6xJLTf9r6U5+8sxKxgzM56zJQxIZ7uSFbxr/BhIT9wrzs9hcWtnwQcuLvYViRhztraS4+C/wzDch6geeFoZBE6CixGu9d+INcML1Xqu+FrKe7VXtl8TkJGXoa6MdD7hLDtTw6Ltb+fyJ4/jCSU0XUGmc4V6z6wDRmGPysAJW7NjvrxDZsQmKJQdqyMkMJYLqcMgIGYnAfvn2/RwxpC99czIaLBTT3UwZXsAJhw/k9EmDufrE5herGdIvh+37vIy/VpAUEZFU6tUB9zo/yFi4sayNW6bHvNXFVNVG+ei0YSzY5I1p0+76THa8pCSe8d5XFekSmbl4nfHCTWVewN2ghrt+smTyb2iY4c6v2ALPfbd+NcZKL+PKVY/D+DO8VnvHXuOVggyZAkUTISPpufcb2WnPpzqppCQ+3vhz6oj463TW5GY7XvptAZNv75WTnHJEESt27KesopZh/XKbvW97FR/w2jEml2Jk+J1jwPubWrptX7fvSZ0ZDvG3Lx3X6m2SV8hs3KdbRESkM/XqgHu9H3CvLS5vdmW9dPvZ86vZvreKsyYPSXwIiC+BDrDfnyg5ussF3F5guMAfc02DlSa9gDUnDJRtZEzJ61wffp1JoS2Me+gHcMp/Upg3G6stxy26Fxs8CSaeC0OmekH2iFneQUYe7f2kQXVdPOBOKinphAx3/HWaPLyg2f2NM9zLt++jb04GM0f1B7w67o4G3CUHahLlJHGZIaMWOH3SYF5ZVcySD/cyfWS/Dh2nOxjarz7g7gr/j0REpOfq1QH3upLyxOWFm8qa9PNNp9q6GGt2HSASdSzYVMbCTfUBd3zFvH1VEUIGw/t7QVdXWPwmFnOs3L6fkHn1v5W1dbjKPcyxlfT5YAtZg7yJiQND5fCrmRwHzMkwtjCE0ODZkF9EYU0WK91oir+2niH9g1/evb6kJFS/tHuk45MmV2zfz6jCXPrlNr9ipJk1qOFevn0/k4cVJL4J6Iw67uID1RzRaLJmZkYIaqN85vgxzFtdTDTm2jVhsrsb0iDD3fOfr4iIBKf7Fml2gnXF5Rw2KJ+sjFDgZSVri71gG+DhhR+yaucBhhRkU1kbTfRO3l8doSA3k/5+wBZ4p5K6WrZv3ciBmjrOnjyUX4dvJ/yLKXz29Y/w9+z/IvfFmwitfIKscIjq7EK4+G7mn/EIU2r+yGfy78aueAAmnElhXhaOEKWVndMJpKOSJ02aGVkZoUTWviOWb9/HlGEtZ47DofqVJp1zrNl5gCOHFSTqi3d3QqeS5jLcGaEQmWHj+MMGcliR1x4v6G970qFBhjtfGW4REUmdXh9wHzm8gJmj+icyyp3life2cde8dTjXvsUwl2/zyg0mDunLk0u2A3DJUV5d8hZ/QuH+qggFOZmJ7hHJi9/cNW8dzy7d0Wnjb9amN+HNO+CxL8JdJ8B/DyPvyS8C8Nnjx1BHBhvyj+L1Mdczt/Y7uG+sgIvuJDvDzxTP/BTVQ46iipwGK/vFF4DpcGvAQ3DXvHU8v3xng21VkfjS9F79eXZGqMM13PurI2wqrWRKC+Uk0LCkZMe+aipqoxw+uE+ivri0gxnu6kiU/dV1iYx5XGbYmD6yPzmZ4cT4ekPAXdQnm5B5z78gt1d/2SciIinWa99lqiNRPtxTySVHjWDcwHzufm09FTV15Gd3zktyx0tr2FxayZ6KWm4+78gW+wXHLd++j/ysMNecchjffOR9ssIhLpwxnN++tp7NpZXMHlvIvqoI/XIzEyUJ+/ySkmjM8auX1zJqQB4fnTasYwOvKYfilf4y58uhshQu/ZO3761fw5rnoGCEN3HxiLN5vXgo4R3GrDED+ETR9+iXlcm0of14Z/0mrN8IALIzm7YHjHcoARjoB3ftag3YiWIxx69fXseRw/o2KCd6/8O9mNXXymf7q2N2xEq/fnvKiJYD7uSl3eMTescX9SE/K0xOZqjDr0/JgXhLwJwG2z97/NjEapFThhfw5JLtvSLgzgiHKOqbjWFt/v8UERHpiF6b4d64uwLnYPzgPhwzrpBozLF4y54mt3POC2Z///qGxPX/+PuSRN/i5uzaX83m0kpGF+bx+zc2csdLa9scz/Lt+zlyWAFnHjmEjJAxfWQ/Dh+cjxls9idO7q+uoyA3g4Ic70PBXr+kZENJOdWRGGuLy1mfVJfeqlgUdq+D5U94lwFe+jH8zwj445nwz6/Dkr9RtmMj33/8PS9Tf97P4DubiN24nO9k/4CnB1/DEzWzmDC4DzmZYW91v41lPLpoa4NuJNlJ/azjv5OzrIkMd5oD7u37qqiKRFm6bV+ijATguWU7mT1mQGKM2RnhJhnuumiM6x98j9fXlDT72M8u3cH3/rE08Q1HfMLklOEtl5QkL+2eCLgH98HMGJif3eEa7uIDDZd1j/vqqYcnPnDEx9d42fmeamhBjuq3RUQk5Xpthjs5oBlVmEfIvPaAJ08oStzGOcf/PLuKe17fQL/cTL5w0jg27C7n8cXbKKuo5cTxg5p97Hi3jl9deRQPvLOZX728lrysMF/5yOHN3j4Wc6zcsZ9Ljx5Jv7xMvnf+kYwdlE92Rpjh/XLZUuq1BtxXFWFIQR8ywiH6Zmck+nLHgzmA55fv5NpTxzc8QHzxl62L4N17/dUYV0Fdlbf/+sXeqotjT4TMPBgy2ctg9xvN3DvfYumC7ZwzbSQnTxgNwHuby3h40Yc88u6HZGWEOM/Pql85ZzQ79lURjTmOGj0gcfjrThvPmIH12WKgQR1x/9xMzNKf4Y7/DUSijve27OX4wweyubSCVTsP8P3zj0zcLquZDPdT72/nn+9vZ9WO/Tx/4ylNVlz889ubeXtDKedNG8aJ4wexfPt+BvXJalI/nWx4/1xKK2rZU1HL+pJy+uVmJuq3B/XJ6nANd0kLAXey2WMH8LkTxnLqxKIWb9OTfPkjhxPphPp8ERGR1vTqgNsMxg3K92tX+yV6X8f94qW13PP6BiYO6cvqXQdYU3yAxZv3At7KfPurvZrqxhZuKiMvK8zU4QXc+onpVNfFuPXZVQzrl8NFM0c0uf2m0goqaqOJ7GLyQh2jC/PqM9xV9cfrl5eZKClZtm0f2Rkhjhyczdolb0L/BfWrMe5aDp+8F8aeBAd2wJrnvWB69udhyBSiRZP5+r9KOGliJlfMORPGn5k49ra9VSzd5vWOvvPVdYkPI88v30Vm2Jg6oh/vbdmbGPfEoX353WdmN3l+nzp2dOJydjMZ7oxwiH65mZ2S4S45UMO3H32fq08cxylHtB40rk9arXPhpjKOP3xgop47ucQkOyNEbdLS7rGY465568nLCrO2uJwXVuyiIDeDu+et5/8um0H/3Cze+9D7tuQ3r6xj1ugBLNxUxuTh/VotXZjjr464cFMZ64rLE9lt8PpE79pf3a7XIBpzfPkvi/j0cWM4beJg1u46wFcfWEyZ//q2FvRnZ4T50YVT2nWcnuC8jpZgiYiItEPvDbhLyhk1II8cf2LcMWMLeWD+5sRqfr99bT2/fHktlx49khtOn8ApP3uVhRvLWLxlLxkhIxJ1vLqquNkAesHGMo4eM4AMv1759stmsHF3Of/3whrOnzYssT2utf7MYwbm8eKKXUB9lxKcY0JWGWNLl8HrLxLZWMikoRP5zOjdfGLx1+EJICMHiibBhLMg228DN/F8OPJjDR5/0YZSnl7+Dk8vLyVkxmXHjErse36ZF3x+5rgx/OWdzby7uYxZowfw3LKdnHD4IH79qaO469X1fGx6+4OWw4r6cOOZE5q0YCzMy6Ksg5Mm91TUctUf5rN61wHqYq7NgHtdcTn98zITS3yDV04yZXhBYnEh8DLcNUlLu7+wYifrisu54/IZ/OKltdz67EqKD9RQWRvln+/v4KjR/amOxJgztpC3N5TyibvfYuueSn5wweRWxzN9ZD+vY86mMtaXlHPGpPoFcgb1yWJF0jcZrVm1cz8vrSymNuo4beJgHn13K5t2V3DhjOGMGJDbaoZbREREOl+vreFeu+sA4wf3SVyfM66QmroYy7bt49mlO7j12VVcMH0Yt31iOqMKcxlakMP8jWUs2FjGmUcOoahvdpPuFuBNZFy96wDHjC1MbMsMh/jaaRPYUlbJM0t38PLKXVz4mzfZvtcr6Vi2bR+ZYWvSHxlgfL8o4YpdlFXUkhEp5+pVX4ZbR3Pvvi9wQ/EP4JWfUFi6kMnD+zFr9olcW3sDfz/2H3Dzdvjya3DxXTBshvdgoRCRaIxvPfI+N/9jKQDPLd9JVkaIE8cP5DuPf8CMH7/Ayf/7Cgs3lfHc8p1MHNKX7543icL8LP7nX6t4f+s+tpRVcu7UoRTkZHLTRycxuCCnybhbEg4ZN555RJMa4cL8LIr3V/PNv7/P9/yxteSv72zmst+9TVWtl3X+6TMrmPHjFzj+1pfZWFrBSeMH8fb60sQ3AC1ZX1zO+KI+HDuukMVb9vDu5j0s3rK3yYeBrKSVGPdXR/i/F9YwdmAeF84YwVc+cjibSisZUpDDuEH5PL9sZ6LF5M8/OYMBeZms2LGf2z4xvcUVJuOyM8LMHNmfF1fsYnd5bYO/z4F9simtqGHp1n2c/6s3WNTo25gf/3M5tzy5DKhfOfWtdbvZVxnh+eU7OWH8IG6/fCbfPHuiJgiKiIikWa/McG/bW8WaXeWJtnsAx4z1ao7f2VDGE+9tY+KQvtxx+UzCfm3uMeMKeXVVMeU1dXzx5HEM6pvFY+9uozoSTWTJARZtLsM5GgTcAGdPHsIRQ/pw27Or2F1RS21djCeXbOerpx7OK6uKmTV6gDehcPkTsPMDvxxkBV/ct4UBmSexdNs5lJNLLKsvTLycv23uw9vlw/jOZy/hjl8s5CfDCxg3vIiS0R/lF0uquPgsI6vRx6lozPGNh5fw9Ade+8BPzRnN88t2csqEQfz6yln87vX17K2MMG91MVffu5DK2jq+dvoE8rIyuOVjk/n6Q0uY+6cFmLW8PPmhGpCfxYsrdrFwk1eK8aljRzc7wfDvCz/k+094geVra0o4dWIRD8zfwoTBfThq9ADOmzaMzLBxyV1v8crqXQ3+jRtbV1LO2ZOHcMy4Qu5/ezOf+v07jOifyxVzRjW4XXZmiOpIjMraOj5/70I2lVbwh7nHEA4Zlx49kqraKOdNG8bfFmzh16+spTYa47BB+YwemMedn55FZU2UM9v5eh0zbgB3vroeoGHAnZ9FJOq45allLN++n6vvXcgDXzqW6SP7s6GknPve2kRmKMS3zpnIwk17vA8J0Rh3v7aeTaWVXHNK8/MHREREJPV6ZYY7Xipx7tT6TObAPtkcXpTPH97YwNricq497XAyk0o/5owrpLymLnH5nClDqYpEOfKHzzHtludZu+sAAG+s3U1m2DhqdP8GxwyFjGtPHc/2fVXMLqzhU4VryV34G/b/7fN8ruyXfDQ+lnm3wr9/CXu3wKg57DzmOzxYdzpPv78dMBaddA+c/3OWDfsEr5SP4ZWNXn13vH/ytaeNZ/u+ap5Ysq3B8WMxx02PfcDTH+zghtPH0zc7g2898j7b91VzzpSh5GaFufHMI/jRhVN48JrjGJCfSczBOVO8QPGimSP4ycVT2VcV4ZgxhZ2+FHb88eJju+vV9WwoKecjP3uVw777TOLn2499wClHFNE/L5MXlu/kzbW7qayN8h9nT+RHF05hzrhCZozsz9CCHJ5bVv8NxDMf7OC0n89j1U6vLKOsopayCi+LPMf/cNQ/L5MHv3Rck7Z58Qz3tx/9gMVb9vCrK47iI365SmY4xOdPGsfQfjmcO2UozsGSD/cm6rFPOHxQu4NtgDnjBiYuH15UH3DHy0AWb9nLZ48fQ7+8TD77pwWs2rmfu+d5AXptNMarq0uYv7GMj04bypCCbH7/xoaUfEASERGR9uuVGe7nlu9k0tC+jBvUcBnxOeMG8uCCLYwdmMcF04c33OcHZX2zM5g0tAADfnDBZPZU1HLvvzfy61fW8V8XTeWRRR9y7tRhXta7thJKVnrB85RL+NiM4Rwz/wZG7Hwp8bj7NhaRZ0dwbLyM4dOPQJ/BkOEFWINjjoKSRTzy7lYAr4YbLzv95HvbuOWp5YQMJg31Au5TjyhiyvAC7p63nnOnDiVkhnOOnz2/mkfe3crXz5jAN846gjp/4l84ZJx5ZMNgbFi/XP7+5eN5d/MeJg+rryu/6rgxjBiQy6gBuR38F2jqiyeP46Txgzh/+jDqYo67X1vPwk1lRGOOa08dT7wKoiAnk6uOG8P3n1jGiyt2EnOOvjkZHH9YfaAaChnnTBnCw4s+pLK2jqxwiNueW8WWskqu+sN8Hv7y8ZT6HT8OH9yHwQU53POZozlyWMPa7bjsjDCbSitYum0fN5w+vsVe50cO68vowjy2lFU2+YajvWaN7u8vxhJiRNLrPNBfCbFvdgbfPHsiXzzpMD75u7e46g/z2VsZ4TPHjeHZZTu55/X17C6vYc64QvrlZvLntzdzzNgBqtsWEREJUK8LuHeX17BoUxnXnz6hyb5jxxXy4IItfOUjhydKSeImDO7DgLxMZo7qn9j3hZO8biK1dXX84c2NZIZDnFA3n5/WroRfrYGyDYADC8MRHyWcmcOIk6+C8rPZmnUY5z9cxv6aPkwf2Z9L+vvBVf+G5QyhkHHXp2fx+fsW8tb6Ugb4q0xOHdGPP33uGObeu4DRhXnkZnllLWbGdaeN59oHFjP9Ry80eKwvnTyOG8+ckBj7n/69kVmjBzTbc3lYv1wumN40sD5t4uC2XuJDcnhRn0RG9/P+2KojUR665vhmJ5OeO3Uojy3eypPvb+fimSMa9P0GOGfqUO5/ezP3/nsTI/rnsqWskps+Ook/vLGBT/9+Ph+f5U12He8f8+xGddvJsjJCHKiuIy8rzOdPGtfi7cyMc6cO5Z7XNyQy3Aerb04mU0f0IxpzDf4GhxR4AfNnTxiTWPzogS8ex+W/exsz+MpHDqcu5vjb/C2A9wFx3MB8/vz25iY16SLSe4296Zm0Hm/Treen9XgiXVWvC7hfWrHLL5VoGoScP30YoZBx3tSm+0Ih4w9zj2FQZg1sfAOKV8CuZbBrBTcVr+D58P/y2GLj1uFVFOxb47Xem36Z93vIFAj7Qe2USwAYCRS9+hr7iss5t42AKCczzB/mzubFFbuYPqK+rvnYwwbyyJdPwNFw+fhzpwzlfz8xPdGnG2BIvxw+Nn1YgzZzf/78sV0y8zmoTzYPfPE4BuRlclhSWUWykycMIi8rTGVttNl/y+PGDeT8acP42fOr6Z+XycQhfbnm5MP4yBFFXHHPO9w1bz25mWFG9G87Wx9vZXjVcWPon9f6IinXnTaeOWMLm82Ut9fPLp1BNNbw33T84D7c+alZnD5pcINt/7j2RHbsq2J4/1zOnTKUv83fQmF+FuMH90nc54wjU/MhSURERNqn1wXczy3fyejCPI4c1rQjSKa/nDoAdTWwe019L+uZn+boMZNg6aPw2Be82+QWwpAphGbN5YIDw7lzcTVHXPRtGHNru8by0alD+fUr6xJ10q3Jy8potgXhtJFNJxaGQg3b+7XkULOw6XD0mAGt7s/JDHPapMG8srI4UU+dLBQy7rh8JtWRKC+vKubHF04hFDKOHFbAnz8/h0//YT6HFeU3WbCmOX1yMsjKCPHFVrLbcf1yMw+qZrs5E4c2/ds0M85vpv3i6IF5jPYXFTrusIH0y81kztjCxAer5u4jIiIi6dXrAu6vfuRw9lZF6lujOQf7t0EoE/oOgd1r4eHPQOlaiHmTJAlnwYhZMHgSjPsIXPUYDJkKfYYQLy7+ak0dJ8zay6wx7Q9iv3rq4Zw4flCLWVxp3S0fm8xXTjk8UU7TWFZGiLuumsW7m/c0qPGeMao/T1x3YmLZ9bZ89dTD+fhRIw+q/WEQsjJCPPil4yjsJcuyi4iIdBe9LuA+dnRfWPJXeMZru8eu5VCzDz7yHTjtZsgvggFjYNJ5XinI4Cnesudhf0XJPkUNVmOM65Od0eJS7y3Jy8rguKRAUA7O4L45TTqKNJadEeaEw5v+uyS33OuM43QVzdW7i4iISLB6XcBNKAOe/z5YyAuop33C+z3mJG9/bn/41MOBDlFEREREeo5eGHCH4Ib3vNZ7WnFPRERERFKs9wXc4NVqi4iIiIikQa9caVJEREREJF16Z4ZbREREUk4L7Yh4lOEWEREREUkhBdwiIiIiIimkgFtEREREJIVUwy0iIiI9QjprxlUv3nl6Q62/MtwiInLIzOxcM1ttZuvM7KagxyMi0hUp4BYRkUNiZmHgTuCjwGTgSjObHOyoRES6HgXcIiJyqOYA65xzG5xztcBDwEUBj0lEpMtRwC0iIodqBPBh0vWt/jYREUnSrSdNvvvuu7vNbPMh3HUQsLuzx9NBGlP7dMUxQdccl8bUPkGOaUxAx00bM7sGuMa/Wm5mq4McTzt0xb/R1nSn8XansUIb47Xb0jiS9hmEWY95fVPpEP/tBtGBc3a3Dridc0WHcj8zW+Scm93Z4+kIjal9uuKYoGuOS2Nqn644pm5kGzAq6fpIf1uCc+4e4J50DqojutvfQ3cab3caK2i8qdZNxzv2UO+vkhIRETlUC4EJZjbOzLKAK4CnAh6TiEiX060z3CIiEhznXJ2ZfQ14HggDf3LOLQ94WCIiXU5vDbi74tebGlP7dMUxQdccl8bUPl1xTN2Gc+5fwL+CHkcn6m5/D91pvN1prKDxplqvGq855zprICIiIiIi0ohquEVEREREUqjXBdxdYRliMxtlZq+a2QozW25mX/e3F5rZi2a21v89IICxhc3sPTN72r8+zszm+6/Xw/7EqHSOp7+ZPWpmq8xspZkdH/TrZGbf8P/dlpnZg2aWk+7Xycz+ZGbFZrYsaVuzr4t5fuWP7QMzm5Xmcf3M//f7wMz+YWb9k/Z91x/XajM7J11jStr3TTNzZjbIv56210qC1ZXPw63paufo1nTF83drusK5vY3xdcnz/kGON9D3g4Mdb9K+Dr9X9KqA27rOMsR1wDedc5OB44Dr/HHcBLzsnJsAvOxfT7evAyuTrt8G3OGcGw/sAb6Q5vH8EnjOOTcJmOGPLbDXycxGADcAs51zU/Emil1B+l+n+4BzG21r6XX5KDDB/7kGuDvN43oRmOqcmw6sAb4L4P/NXwFM8e9zl/9/NB1jwsxGAWcDW5I2p/O1kmB15fNwa7raObo1Xer83ZoudG5vzX10zfN+S+6j670ftOY+Uvle4ZzrNT/A8cDzSde/C3y3C4zrSeAsYDUwzN82DFid5nGMxPsPezrwNGB4Tekzmnv90jCefsBG/LkGSdsDe52oX1mvEG/S8dPAOUG8TsBYYFlbrwvwO+DK5m6XjnE12ncJ8IB/ucH/P7xOF8ena0zAo3hBwCZgUBCvlX66zk9XOQ+3McYudY5uY6xd7vzdxni7zLm9jXF2yfN+e8fbaF8g7wcHO97Oeq/oVRluuuAyxGY2FjgKmA8Mcc7t8HftBIakeTi/AL4NxPzrA4G9zrk6/3q6X69xQAlwr/8V6h/MLJ8AXyfn3Dbg53ifdHcA+4B3CfZ1imvpdelKf/efB571Lwc2LjO7CNjmnHu/0a6u9FpJmnSx83BrfkHXOke3psudv1vTxc/trekO5/2WdIn3g9Z05ntFbwu4uxQz6wM8BtzonNufvM95H5nS1kLGzC4Aip1z76brmO2QAcwC7nbOHQVU0OjrxwBepwHARXhvJsOBfJr5Cipo6X5d2sPMvof3Nf4DAY8jD7gZ+GGQ45CuoSudh1vTRc/Rrely5+/WdJdze2u60uvZlq7yftCazn6v6G0Bd5vLEKeLmWXineQfcM497m/eZWbD/P3DgOI0DulE4EIz2wQ8hPeV5S+B/mYW79ee7tdrK7DVOTffv/4o3gk8yNfpTGCjc67EORcBHsd77YJ8neJael0C/7s3s88BFwCf9t8UghzX4Xhvqu/7f+8jgcVmNjTAMUkAuuB5uDVd8Rzdmq54/m5NVz63t6bLnvdb0sXeD1rTqe8VvS3g7hLLEJuZAX8EVjrnbk/a9RQw1788F6+mMC2cc991zo10zo3Fe11ecc59GngVuDSgMe0EPjSzif6mM4AVBPg64X3deJyZ5fn/jvExBfY6JWnpdXkK+Kw/q/o4YF/SV5ApZ2bn4n0NfqFzrrLReK8ws2wzG4c3+WRBqsfjnFvqnBvsnBvr/71vBWb5f2+BvlaSPl3xPNyarniObk0XPX+3piuf21vTJc/7Lelq7wet6fT3inQXpAf9A5yHNzN2PfC9gMZwEt7XPh8AS/yf8/Dq8V4G1gIvAYUBje9U4Gn/8mF4f/TrgEeA7DSPZSawyH+tngAGBP06AT8GVgHLgL8A2el+nYAH8eoMI/5J4AstvS54E6vu9P/ml+LNwk/nuNbh1brF/9Z/m3T77/njWg18NF1jarR/E/UTYdL2Wukn2J+ufh5uY+xd5hzdxji73Pm7jfEGfm5vY3xd8rx/kOMN9P3gYMfbaH+H3iu00qSIiIiISAr1tpISEREREZG0UsAtIiIiIpJCCrhFRERERFJIAbeIiIiISAop4BYRERERSSEF3NIjmFnUzJYk/dzUxu2/Ymaf7YTjbjKzQR19HBGR1iSd45aZ2T/NrH9A45hnZrPbedsiM5vvL+1+8iEe7z4zu7TtWza536lmdkIL+yaZ2dtmVmNm32q071wzW21m65LfR/z1O+b72x/21/LoMDN7qxMe43Nm9pvOGI+kjgJu6SmqnHMzk35ube3GzrnfOuf+nK7BiYh0UPwcNxUoA65L9QGTVlg8VGcAS51zRznn3mjnMcMdPGbcqUCzATfe63cD8PNmjn0n8FFgMnClmU32d98G3OGcGw/swesp3WHOuZbGKD2MAm7p0fwM9P+a2VIzW2Bm4/3tP4pnNszsBjNbYWYfmNlD/rZCM3vC3/aOmU33tw80sxfMbLmZ/QGv+X38WFf5x1hiZr8zs7D/c5+flVpqZt8I4GUQkZ7lbWAEgJkdbmbPmdm7ZvaGn70Nm9lGfxW8/n52/BT/9q+b2QQzm+Nned8zs7fiK0L62dKnzOwV4GUzyzWzh8xspZn9A8j1b9fquc3MZgL/C1zknxNzzexK/7bLzOy2pNuWm9n/mdn7wPEtPWkz+6GZLfTvf4+Zmb+9wTnczMYCXwG+4R+7QXbdOVfsnFuIt8BJsjnAOufcBudcLfCQP34DTsdbnh7gfuDiZsaXb2Z/8t8H3jOzi5Je0yf9bwfWmtktyc/d/z3M/7eJf4txsr+9pdfsajNbY2YL8Jagj28vMrPH/NdpoZmd6G//iNV/A/yemfVt6XWW1Ojop1eRriLXzJYkXf8f59zD/uV9zrlp5pWQ/AK4oNF9bwLGOedqrP5r2h8D7znnLjaz04E/462adgvwpnPu/5nZ+fhZDjM7ErgcONE5FzGzu4BPA8uBEX5WCgvoa2AR6RnMy8KegbcsPcA9wFecc2vN7FjgLufc6Wa2Gi9LOw5YDJxsZvOBUf5tC4CTnXN1ZnYm8N/AJ/zHnAVMd86Vmdl/AJXOuSP9xMNi/zYzaeXc5pxbYmY/xFuB72tmNhwvS3w0Xob4BTO72Dn3BJAPzHfOfbONp/8b59z/84/3F7xz+T9pdA53zu01s98C5c65n7fyeI2NwFsFMW4rcCzeao57nXN1SdtHNHP/7wGvOOc+778eC8zsJX/fHGAqUAksNLNnnHOLku77KeB559xP/X/jvJZeM2A+3nvU0cA+vOXn3/Mf55d4mfg3zWw08DxwJPAt4Drn3L/NrA9QfRCvi3QCBdzSU1Q552a2sO/BpN93NLP/A+ABM3sCb/lh8JZ9/gSAc+4V8zLbBcApwMf97c+Y2R7/9mfgnfwW+kmXXKAY783gMDP7NfAM8MIhPj8R6d3iSYURwErgRT9wOgF4xD/vgLccOcAbeOerccD/AF8CXgMW+vv7Afeb2QS8Je4zk471onOuzL98CvArAOfcB2b2gb99Awd3bjsGmOecKwEwswf8x34CiAKPteM1OM3Mvg3kAYV4CY1/0vw5PAhnAxdafV14DjDav/yic64UwMwex3uPSQ64FwJ/MrNM4An/A8vpNP+a0Wj7w8AR/vYzgclJfw8F/t/Jv4Hb/cd43Dm3tTOfuLRNJSXSG7gWLsedj1e3NwsvYD6UD6IG3J9UQz7ROfcj59weYAYwD+8rzj8cwmOLiMSTCmPwzjfX4b2H7200f+VI//avAyfjZVb/BfTHq2uO11L/F/Cqn6H+GF5wGFfR1mA6+dxW7ZyLtnYDM8sB7gIudc5NA35P/Zg74xwOsA0YlXR9pL+tFOif9Ljx7U2GCXwi6d9itHNupb+v8XtPg+vOudfxgultwH126JP6Q8BxSWMY4Zwr9+c1fREvGfRvM5t0iI8vh0gBt/QGlyf9fjt5h5mF8L5ifRX4Dl7Wpw/em9Kn/ducCux2zu3HexP7lL/9o8AA/6FeBi41s8H+vkIzG2NeB5OQc+4x4Pt4bwgiIofEOVeJN+Hvm3jlCRvN7JMA5pnh33QBXvY75pyrBpYAX8Y7h4F3rosHjZ9r5ZDJ57ypQHw+y8Ge2xYAHzGzQX7JxJV4Gff2igfXu/2M7aX+OFo6hx8ADrZOeSEwwbyOJFnAFcBTzjmHV7YR75YyF3iymfs/D1zv13xjZkcl7TvLf1/Ixav//nfyHc1sDLDLOfd7vA8vs2j5NZvvbx/oZ8Q/mfRQLwDXJz3uTP/34c65pc652/znqYA7zVRSIj1F4xru55xz8ZZOA/yvQWvwTljJwsBfzawfXnbiV37934/wvt77AO9Nba5/+x8DD5rZcuAtYAuAc26FmX0fr8YuhDcZ5zqgCrjX3wbw3U57xiLSKznn3vPPTVfiJQbu9s8/mXgT/d7365k/BN7x7/aGf/ul/vX/xSsp+T5eSUhL7sY7h63EK2V5198+goM4tznndpjXZu9VvHPtM8655oLWlu6/18x+DywDdlJfGtPSOfyfwKPmTVy8PrlLipkNxSvnKABiZnYjMNk5t9/MvoYXOIeBPznnlvt3+w7wkJn9BK9eOl5Dn+y/8OYJfeC/LhupnzO0AK9sZiTw10b12+B9+/CfZhYByoHPtvaa+e9RbwN78T5Mxd0A3On/fWTgfWD6CnCjmZ0GxPBKcZ5t7nWW1DHvg5tIz2Rmm/Am7ewOeiwiItL7mNnn8CePBj0WCY5KSkREREREUkgZbhERERGRFFKGW0REREQkhRRwi4iIiIikkAJuEREREZEUUsAtIiIiIpJCCrhFRERERFJIAbeIiIiISAr9f90RuJ7jZNU+AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "state_dim = env.observation_space.shape[0]\n", "action_dim = env.action_space.n\n", "hidden_dim = 100\n", "lr = 0.001\n", "n_episode = 150\n", "epsilon = 0.3\n", "eps_decay = 0.99\n", "\n", "model = DQN(state_dim=state_dim, action_dim=action_dim, hidden_dim=hidden_dim, lr=lr)\n", "q_learning(env, model, n_episode=n_episode, epsilon=epsilon, eps_decay=eps_decay, replay=False)\n", "env.close()" ] }, { "cell_type": "markdown", "id": "16e877fb-01d0-44be-96fa-8ac890a65bd4", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "38447fd3-d489-41e7-8d06-700f3934b34a", "isComponent": false, "name": "", "parents": [] } }, "source": [ "## Replay\n", "\n", "The approximation of Q using one sample at a time is not very effective. The graph above is a nice illustration of that. The network managed to achieve a much better performance compared to a random agent. However, it couldn't get to the threshold line of 195 steps. I implemented experience replay to improve network stability and make sure previous experiences are not discarded but used in training.\n", "\n", "Experience replay stores the agent's experiences in memory. Batches of experiences are randomly sampled from memory and are used to train the neural network. Such learning consists of two phases--gaining experience and updating the model. The size of the replay controls the number of experiences that are used for the network update. Memory is an array that stores the agent's state, reward, and action, as well as whether the action finished the game and the next state." ] }, { "cell_type": "code", "execution_count": null, "id": "4164429c-8658-4597-8542-3e7e3b578987", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "#6C00FF", "id": "23e61e89-120d-4406-bf42-1f402873bb86", "isComponent": true, "name": "Replay Update Routine", "parents": [ { "id": "949cf49a-8f6c-4825-8991-65310a8a721a", "name": "Deep-Q Network Model" } ] }, "tags": [] }, "outputs": [], "source": [ "def replay_update(model, memory, size, gamma=0.9):\n", " \"\"\"Use replay buffer for accumulation of experience\"\"\"\n", " if len(memory) <= size:\n", " return\n", " states = []\n", " targets = []\n", " # Sample a batch of experiences from the agent's memory\n", " batch = random.sample(memory, size)\n", " # Extract information from data\n", " for state, action, next_state, reward, done in batch:\n", " states.append(state)\n", " q_values = model.predict(state)\n", " if done:\n", " q_values[action] = reward\n", " else:\n", " q_values_next = model.predict(next_state)\n", " q_values[action] = reward + gamma * torch.max(q_values_next).item()\n", " targets.append(q_values.tolist())\n", " model.update(states, targets)" ] }, { "cell_type": "markdown", "id": "1ebbe186-4e77-46de-b539-d6a507802969", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "7c436808-e351-4d2c-a2eb-725df64bdf78", "isComponent": false, "name": "", "parents": [] } }, "source": [ "## Train DQN with Replay Data\n", "As below, neural network training with the replay seems to be much more robust and smart compared to its counterpart that only remembers the last action. After approximately 60 episodes, the agent managed to achieve the winning threshold and remain at this level. I also managed to achieve the highest reward possible--500." ] }, { "cell_type": "code", "execution_count": null, "id": "ede22c33-a56e-4e18-9c96-5bd88430647f", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "#6C00FF", "id": "decd8bda-03fa-4e40-99dd-f05e7f6166fd", "isComponent": true, "name": "Train DQN Using Replay Data", "parents": [ { "id": "07047e3d-44e6-492e-9bcd-869687959e54", "name": "Q Learning Routine" } ] }, "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtMAAAFhCAYAAACyHibSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAACgbElEQVR4nOy9eZgcZbn+/3l6nzV7QiAhCRDCTggBAUURlM0Fd8TlgPoVRUHR4zkix+24nAP+VNCjorgArqDigrgiiIogGCBsAZIAARJC9mQyWy9V7++Pqre6uru6p2fr7sk8n+uaa7qrq6vfrq6Zvuuu+30eMcagKIqiKIqiKMrwiTV7AIqiKIqiKIoyUVExrSiKoiiKoigjRMW0oiiKoiiKoowQFdOKoiiKoiiKMkJUTCuKoiiKoijKCFExrSiKoiiKoigjRMW0oiiKMiQi8oiInNTscSiKorQaKqYVRVGGQETWiciAiOwWkZ0icqeIvFdEYmXrnSAit/nr7RKRm0TkoNDjJ4mIEZFvlD3vDhE5r8prf1pEfjgub2wYGGMONcbc3uxxKIqitBoqphVFUerjVcaYLmABcBnwUeC79kEROR74E/BrYG9gEfAg8A8RWRjaTh/w9rJlTUVEEs0eg6IoykRFxbSiKMowMMbsMsbcBJwNnCsih/kPfQH4vjHmK8aY3caY7caYjwP3AJ8KbWIncG3ZshEhIsf5LvlOEXkgHMMQkXeIyKO+S/6kiLwn9NhJIrJeRD4qIs8D1/gO+E9F5Pv+cx4RkeWh56wTkZf5t4dad5mI3O8/9jMRuUFEPjfa96soitKKqJhWFEUZAcaYe4D1wIki0g6cAPwsYtWfAqeWLfs88HoRWTLS1xeRfYDfAp8DpgMfAW4UkVn+KpuBVwLdwDuAK0RkWWgTe/nPWwCc7y97NXA9MBW4CfhajSFErisiKeCXeCcM04GfAK8d6ftUFEVpdVRMK4qijJzn8ATjdLz/pxsj1tkIzAovMMY8D3wT+MwoXvttwO+MMb8zxrjGmFuAFcCZ/mv81hjzhPH4K14E5cTQ813gU8aYrDFmwF92h789B/gBcGSN16+27nFAAviqMSZvjPkFnjuvKIqyR6JiWlEUZeTsA2wHduCJ07kR68wFtkYsvxw4TURqCdZaLADe6Ec8dorITuBFdgwicoaI/FNEtvuPnQnMDD1/izFmsGybz4du9wOZGnnqauvuDWwwxpjQ488O870piqJMGFRMK4qijAAROQZPTN9hjOkD7gLeGLHqm4DbyxcaY7YBVwKfHeEQngV+YIyZGvrpMMZcJiJp4Ebgi8AcY8xU4HeAhIcwwtcdio3APiISfq354/RaiqIoTUfFtKIoyjAQkW4ReSVeXviHxpiH/IcuwZuQ+AER6RKRaf6kuxOB/6myuS/jZa0PHuJlYyKSCf2kgR8CrxKR00Qk7i8/SUTmASkgDWwBCiJyBpW57fHiLsABLhSRhIicBRzboNdWFEVpOCqmFUVR6uM3IrIbzxH+Lzwh/A77oDHmDuA04HV47ux24FzgFGPMw1EbNMb04FUBmT7Ea58DDIR+njDGPAucBVyKJ5qfBf4DiBljdgMfwJv8uAN4C94kwXHHGJPD2wfvwqtc8jbgZiDbiNdXFEVpNFIaa1MURVHGAhE5AvgL8BZjzB+bPZ5mIiJ3A980xlzT7LEoiqKMNepMK4qijAPGmAeB1wCHT7amKCLyEhHZy495nAscAfyh2eNSFEUZDybVP3hFUZRGYoz5O/D3Zo+jCSzBi5h0AE8CbzDGRJUNVBRFmfBozENRFEVRFEVRRojGPBRFURRFURRlhKiYVhRFURRFUZQRomJaURRFURRFUUaIimlFURRFURRFGSEqphVFURRFURRlhKiYVhRFURRFUZQRomJaURRFURRFUUaIimlFURRFURRFGSEqphVFURRFURRlhKiYVhRFURRFUZQRomJaURRFURRFUUaIimlFURRFURRFGSEqphVFURRFURRlhKiYVhRFURRFUZQRomJaURRFURRFUUaIimlFURRFURRFGSEqphVFURRFURRlhKiYVhRFURRFUZQRomJaURRFURRFUUaIimlFURRFURRFGSEqphVFURRFURRlhIy7mBaRuIjcLyI3+/cXicjdIrJWRG4QkZS/PO3fX+s/vnC8x6YoiqIoiqIooyHRgNf4IPAo0O3fvxy4whhzvYh8E3gXcJX/e4cx5gARebO/3tm1Njxz5kyzcOHCcRu4oijKeHLvvfduNcbMavY4GsW4/89+/HHv95Il4/caiqJMWqr9zx5XMS0i84BXAJ8HPiwiApwMvMVf5Trg03hi+iz/NsDPga+JiBhjTLXtL1y4kBUrVozP4BVFUcYZEXm62WNoJOP+P/ukk7zft98+fq+hKMqkpdr/7PGOeVwJ/Cfg+vdnADuNMQX//npgH//2PsCzAP7ju/z1SxCR80VkhYis2LJlyzgOXVEURVEURVFqM25iWkReCWw2xtw7lts1xlxtjFlujFk+a9akuTqqKIqiKIqitCDjGfN4IfBqETkTyOBlpr8CTBWRhO8+zwM2+OtvAOYD60UkAUwBto3j+BRFURRFURRlVIybmDbGfAz4GICInAR8xBjzVhH5GfAG4HrgXODX/lNu8u/f5T9+W628tKIoiqIoitI48vk869evZ3BwsNlDGVcymQzz5s0jmUzWtX4jqnmU81HgehH5HHA/8F1/+XeBH4jIWmA78OYmjE1RFEVRFEWJYP369XR1dbFw4UK8mhJ7HsYYtm3bxvr161m0aFFdz2mImDbG3A7c7t9+Ejg2Yp1B4I2NGI+iKIqiKIoyPAYHB/doIQ0gIsyYMYPhFLnQDoiKoiiKoihKXezJQtoy3PeoYlpRFEVRFEWZMGzatIm3vOUt7Lfffhx99NEcf/zx/PKXvxz2dtatW8dhhx026vGomFYURVEURVEmBMYYXvOa1/DiF7+YJ598knvvvZfrr7+e9evXN21MKqYVRVFq0JstcO/T25s9DEVRFAW47bbbSKVSvPe97w2WLViwgIsuuojBwUHe8Y53cPjhh3PUUUfxl7/8BfAc6BNPPJFly5axbNky7rzzzjEdUzOqeSiKokwYbrx3PZ+9eRUPffo02lLxZg9HURRlUvPII4+wbNmyyMe+/vWvIyI89NBDPPbYY5x66qmsXr2a2bNnc8stt5DJZFizZg3nnHMOK1asGLMxqZhWFEWpQV+uQME15AquimllwrPwkt829PXWXfaKhr6e0kAuvhhWrhzbbS5dCldeOaynvP/97+eOO+4glUoxb948LrroIgAOOuggFixYwOrVq1mwYAEXXnghK1euJB6Ps3r16jEdtoppRVGUGriu1zvK0R5SiqIoTefQQw/lxhtvDO5//etfZ+vWrSxfvpx58+ZFPueKK65gzpw5PPDAA7iuSyaTGdMxqZhWFEWpgeN6vwuu29yBKIqitBLDdJDHipNPPplLL72Uq666igsuuACA/v5+AE488UR+9KMfcfLJJ7N69WqeeeYZlixZwq5du5g3bx6xWIzrrrsOx3HGdEw6AVFRgLzjot3rlSisI61aWlEUpfmICL/61a/461//yqJFizj22GM599xzufzyy3nf+96H67ocfvjhnH322Vx77bWk02ne9773cd1113HkkUfy2GOP0dHRMaZjUmdaGTdWb9pN3nE5dO8pzR5KTVzX8MLLbuMjpy3hTcvnN3s4SothYx7qTCuKorQGc+fO5frrr4987JprrqlYtnjxYh588MHg/uWXXw7AwoULefjhh0c9HnWmlXHjf3/3KJ++6ZFmD2NI8q7L5t1ZNuwYaPZQlBZEnWlFURSlFiqmlXFjIO8wkB/bXNJ44NgJZq7GPJRKJrszLSLzReQvIrJKRB4RkQ/6yz8tIhtEZKX/c2azx6ooitIMNOahjBsFx1BwWl+gFgKxNPZj/cFd6xjIO5z/4v3HfNtKY7AnWe7kzdQXgH83xtwnIl3AvSJyi//YFcaYLzZxbIqiKE1HnWll3Mi7hrzT+m6e44yfWPr9w8/z65XPjfl2lcZhYx7jcbI1ETDGbDTG3Off3g08CuzT3FEpitIsJsNk/eG+RxXTyrjhuO6EECCBM12ni96bLTBYZ3yl4Bp6s4URj00ZPdv7cqP65+9qDChARBYCRwF3+4suFJEHReR7IjKteSNTFKURZDIZtm3btkcLamMM27ZtG1Ytao15KONGwTHkCxPAmQ7EUn1jfet37mbZvlP51KsOrWvbuwdVTDeLzT2DnHDZbXz/Xcdywv4zR7QN60xPdjEtIp3AjcDFxpgeEbkK+Cxg/N9fAt4Z8bzzgfMB9t1338YNWFGUMWfevHmsX7+eLVu2NHso40omk6naACYKFdPKuFFwDfkJIEDsxLJ6XfQtPYM8saWvzm0belVMN43t/TkKrmFzT3bE2yg2bWn9Y3m8EJEknpD+kTHmFwDGmE2hx78N3Bz1XGPM1cDVAMuXL5+8O1FR9gCSySSLFi1q9jBaDo15KONGwXEpTITM9DAv4xdcw7be+sSZ47rkHJdsofWrmuyJ2OhObhTHoY15uJNUTIuIAN8FHjXGfDm0fG5otdcCoy/WqiiKMgFRZ1oZNwruxKrmUa+Ydo1ha51i2r7/3sEC6c74yAaojBj7mY5mIuxkn4AIvBB4O/CQiKz0l10KnCMiS/FiHuuA9zRjcIqiKM1GxbQybhQcQ34C1OYdrjPtuIad/XmMMXim3dDb7s0WmNGZHt1AlWEz3MmlUTiT3Jk2xtwBRB3ov2v0WBRFUVoRjXko48aEcaad4TmPBddQcA27BvJDrmuFmE5CbA5j4kyPYx1yRVEUZeKjYloZNwp+abxWL6EzXGfaOpRbe3NDrlsIOdNK47Gf6Wgy00E1jxY/jhVFUZTmoGJaGTeG6/g2i2I1j/oEVyEQ00PnptWZbi7OGMQ8gjrTE+Aqi6IoitJ4VEwr40YgUltchBSd6frWt50St9XlTHsb7c0OHQlRxh67/8ci5qHOtKIoihLFuIlpEcmIyD0i8oCIPCIi/+0vv1ZEnhKRlf7PUn+5iMhXRWSt31Fr2XiNTRlbntraxylfur3CqbUiutUnIRareYyfM621ppvDWMQ8XG3aoiiKotRgPKt5ZIGTjTG9fsH/O0Tk9/5j/2GM+XnZ+mcAi/2fFwBX+b+VFuexjT08saWPZ7b3M9OvWGGMGZNKCo1gOBPMXNdgDcp6ak3bbe7WzHRTGMtqHiqmFUVRlCjGzZk2Hr3+3aT/U+vb6Czg+/7z/glMLWsKoLQAF/74Pq7+2xMly/pzXkOSsNgI3271xi3DqTMdvtS/pY6Yh+OoM91MbN55dHWm/d8qphVFUZQIxjUzLSJxv8j/ZuAWY8zd/kOf96McV4iILb67D/Bs6Onr/WXl2zxfRFaIyIo9vTd8K3Lf0zt4aENPybKBvCemw+5f2OUdzSX2RuAMo514WFDVE/PQah7NpTAGYtpVZ1pRFEWpwbiKaWOMY4xZCswDjhWRw4CPAQcBxwDTgY8Oc5tXG2OWG2OWz5o1a6yHrAxBzjEVTvNAhDNdKHGmW1uE2PHV05Qj/B7riXloZrq5FOtMa8xDURRFGR8aUs3DGLMT+AtwujFmox/lyALXAMf6q20A5oeeNs9fprQQecetECbWmQ5PNAwL7npLzjWL4WSmwzGP+upMe+9dM9PNYSycaa0zrSiKotRiPKt5zBKRqf7tNuDlwGM2By1eH+bXAA/7T7kJ+De/qsdxwC5jzMbxGp8yMgqOWyFMrJh2qsQ8RuMKNoJhZab995KIyZDOtOsa7CZ3D2ppvGbgjEFpPHcYJ1uKoijK5GM8q3nMBa4TkTieaP+pMeZmEblNRGYBAqwE3uuv/zvgTGAt0A+8YxzHpoyQvGMqnGYb86gW7Wj1mMdInOnZXWme2zXIQM6hLRWvuS5oZrpZFMYi5mHqjwEpiqIok49xE9PGmAeBoyKWn1xlfQO8f7zGo4weYwy5qJhHZGa6KLgnSp3p4WSmZ3dneG7XIFt7s8yf3l5zXdDMdLMYi2oe6kwriqIotdAOiErdVMuf9ttqHiWZ6YnkTNffTtwK5DndXhGaWhU9wuJLnenmMJaZaXWmFUVRlChUTCt1Y0VxuTgOYh5VMtN7VJ3pQExngNotxe37TsVj7FZnuikE1TwKIxfCwXGvYlpRFEWJQMW0Uje2XnS5yzeYHyrm0doiZFiZ6TIxXY8zPbU9Sbbgkiu09knFnkjgTI8iamTbibtazUNRFEWJQMW0Ujf5KmK6P+e5rtUnILa2iLRjHU4HxFldXsxjW191Z9oJiWmAPo16NBxnLGIeY9CSXFEURdlzUTGtVJAtOJHLrSApd3AH8t5yJ5yZnkCl8YbTlMOu05Hy5u5m89H7CkLOdFsK0Nx0M7ACeDQxD3tYaJ1pRVEUJQoV00oJD2/YxaGf/CPrd/RXPFYtM21jHvkqbnSrN20ZSWY6HhOScakZYbE1qaf4znSP1ppuOFYAjybmUTzZau3jWFEURWkOKqaVEtbv6KfgGjb1DFY8Vi0zbWMe1dqJj+YSeyMoVvMYnphOxGI1Iyz2JGJqmyemtTxe4xmLpi1FMT0mQ1IURVH2MFRMKyVk/Uly2YjJctUy00M1bWn1mMfInGk8Z7rGe7PrTuvQmEezCCYgjirmoc60oiiKUh0V00oJtuJElEi0gqSiNF5QzSM62tHqE7eK1TyGFkuFQEzHSMZjNR1Pu+4U60yrmK6b6+5cx7f/9uSot+M49X+2VbdRxZn+398/yq9XbhjxdhVFUZQ9AxXTSglBlCPCmQ4eC5e9C3VErFrNo8UdvWIHxKHXtS5lXIREXGqK6fJqHlprun5+99BGfvfwxlFvx362oylLWM2Z/vX9z/GbB0Y/RkVRFGVio2JaKaHoTFeKj4JT6VoPhqpZVGva0uoxj2E50054AmKsputu98G0do15DJe8447JFQ0rhEdzDAbOdFk1j4Jr2LhrYOSDUxRFUfYIVEwrJVgRnYsQ0/lQPWbjCwubl4YyZ7ok5tHizrRjm3IM3TI6cKZ9MV2zmoe/DzrSCeIx0QmIwyDvmDHpOFgYxolSNaqVTiy4Lht3VU7UVRRFUSYXKqaVEqwzHXVZPOxWW2E9EHKmnSo56VZvwxwe91C1hAtuWExLZBwmWNffB8mY0JlOsFtL49VNruCOyUmYzUznneIJ4HCxh2+5U+44hu19uZKrM4qiKMrkQ8W0UkKtCYg5pzQrDdBf1ZmeOKXxwmMdqqKHGxLTiVispuMZLqPXmU6wW2MedZN33LqqqwzFWMSNasU8AHWnFUVRJjkqppUSslXK30F5i/AoZ7pK05YJkpkuvx2FFVAJ60zXkZlOxIVMMhZZblCJJue4Y3JFo1qFmWFtI5iAWOZMWzG9U3PTiqIokxkV00oJdcc8fGEyGHKm89UmIE6Qah7lt6OwAiomMmRpvKIzHSOTjNdsPa6UMlYxj5LjcIS1pmtlpgGeU2daURRlUpNo9gCU1iIQ0xFCJhfhNodjHk6VSYd7kjPthNzmRFzqquaRiAnpRIzBfGufVLQS3knK6M/13VA0I+qYrocoMe26JshSP68VPRRFUSY16kwrJdQqjZePyEyHYx5RDm88Jq1fzaNKFZIo7CV/60zXEmj25CIeE8+ZLqgzXS9jVs2jpBPn8I9Dt8qJVnhs6kwriqJMblRMKyVYcRgV84gSJlZMJ2ISKTYyiRi5lnemQ9U86pyAmLB1pmuI77AznUnG1ZkeBmNWzaNKI6G6n2+ixXT4tmamFUVRJjcqppUS8jUmIIaXWaFo60x3ZRJlExS9ddtS8dZ3pp36Yx5hxz0Rqx3zCFfzSCdi6kzXiTFmzCYghrcxkphHiYA20VcwtJqHoijK5EbFtFJCvaXx7HrWme7KJEsbtfgiJJ2IT4A60yMrjZdM1I55WKGd8CcgqjNdH8VGK2NRzWOUMY8hnOmYwHPqTCuKokxqVEwrJWRrTEAMV0OwQsdOQOxIJyouqccEUonaFS9ageFU8yhp2lKvMx23ExDVma4He6I2FnWmRx3zGCIzPXdKGz2DBfq0hriiKMqkRcW0UkK9pfFsdGMw75BJxkjFpUKUJuIxkkNUvGgFhlXNIzQBMTFEabzyzLTWma4Pu0/DbetHijPKmEc4El+IEObzprUBsFEreiiKokxaVEwrJeRqZaZDyiJoJ55zaEvGiZdPQHRcEnV0CWwFClXaoEfh+PvFTkCs1bQlXM0jnVRnul5yEdn8kVJwveMQRhbzCOek3ZKTRW9b86e3A5qbVhRFmcyMm5gWkYyI3CMiD4jIIyLy3/7yRSJyt4isFZEbRCTlL0/799f6jy8cr7Ep1alZGi8U8wi3E29PJUjEYhUTFOvpEliNJ7b0smV3dtjPGwkl9YOHcELtW4n5763eah7phOdMj9ZpnQyEr4qM9qqG4xoyyfiIt1WtHJ5dPn+aL6Z3qphWFEWZrIynM50FTjbGHAksBU4XkeOAy4ErjDEHADuAd/nrvwvY4S+/wl9PaTDFmEel8CgVy6Uxj0S8vDSeSyIeIzFE+bhqvOcH9/LlWx4f9vNGwvA6IJY50zWiG+FqHpmk96emUY+hKe2kObr9VQiJ6dFOQHRN5XGy99QMAM9pzENRFGXSMm5i2nj0+neT/o8BTgZ+7i+/DniNf/ss/z7+46eIiIzX+JRogjrTQzZtsRMQC7SnEl5zljLnLuGXjxuJM90zkGdnf37YzxsJdqze7SGatvgPx2NeB8R8DfFddKZjpBOeoMtqRY8hKc3mV+7fRzf2cNRn/sTmnqHdYM+Z9v7NjbY0XlQJxfZUgj9/+CW8+8T9hr1tRVEUZc9gXDPTIhIXkZXAZuAW4AlgpzHGTn1fD+zj394HeBbAf3wXMCNim+eLyAoRWbFly5bxHP6kxDqtUY5rvkrTlrZkvKJpS94xJOMxr7HJCERMznEb5uIWHEM6EQtu1yKcg07Gak9AjHamNTc9FCUxj4iTlSe39LGjP8+zO/qH3JbjGtrGKOYRdqbt5x6PCQfM7qQjnRj2thVFUZQ9g3EV08YYxxizFJgHHAscNAbbvNoYs9wYs3zWrFmj3ZxSRs0JiBGO4UDeJZOKE4+VTsYrOG7g3o5kElmu4DZswp7jGtK+4Bqymod1pv124sZUf06xzrQEzrTWmh6asIMctW9zjndc1LMvnTGMeURlppPxyXHxTETmi8hfRGSVPwfmg/7y6SJyi4is8X9Pa/ZYFUVRGk1DqnkYY3YCfwGOB6aKiLVx5gEb/NsbgPkA/uNTgG2NGJ9SpGadacelPVUqTAZyBdoDZ7psAmJc/ImJwxfTeadxYrrguqTi3p+CM9QERNdFxJuAmIjXrhIRXled6foJXxWJ2rfWua7n+CiMMuYRFtBuRLY+HpscYhooAP9ujDkEOA54v4gcAlwC3GqMWQzc6t9XFEWZVIxnNY9ZIjLVv90GvBx4FE9Uv8Ff7Vzg1/7tm/z7+I/fZrT0QcMZqs50UUxbZ9qhLRWvcKALTriax/BEjOsa8o5pmItbcA1pX3ANOQHRGOJ+lN8K8GrvrxDKYmfUma6bIZ3pQEw3wJkOOdBRznQiNjmqixpjNhpj7vNv78b7X74PpXNdwnNgFEVRJg3jGfSbC1wnInE80f5TY8zNIrIKuF5EPgfcD3zXX/+7wA9EZC2wHXjzOI5NicAYM0TMI1RmzLXOtEsmGccYU1FGLBHzq3kMU8TYMTTKxS04ho60H/MYwkUvuCZwI60zXS2L64TWtWJ9UJ3pIYmqGhMmW9bKvhYF1x1dZtpYMR2LnIw4iZzpAL9s6VHA3cAcY8xG/6HngTnNGpeiKEqzGDcxbYx5EO8fbvnyJ/Hy0+XLB4E3jtd4lKEpuAZ7LSAqmpF3XDpSiZLHB3IF2lNxcgW3RKx4pfFGVmfaiqlGubiOa4JM81DOtFsipn1nukoFEHtCAQQnIVrNY2hyEW3rSx536o95jNaZtgI6lSgT07ZE4iTJTFtEpBO4EbjYGNMTLrhkjDEiUvGBicj5wPkA++67b6OGqkxSFl7y24a91rrLXtGw11Jam8lxjVKpi3C0o1rMoy1lXT6vAUm4mkfYRbTl5pIj6IBoX7thzrRbrOYx1ATEsDOdCjLT1SYgukVn2t9+I7sgDuQczv/+Ch7esKthrzkW5CImuoaxJyT1imnrTI+mnXgyHivJ04cb8kwWRCSJJ6R/ZIz5hb94k4jM9R+fi1e5qQSdNK4oyp6OimklIDfUxC/HlExAzBZcXEOQmS4tjef6MQ8Z9uX1IObRMGfaJZWobwJiiTMds+X06shMW2e6gU1bnt7ex59WbeLCH99HX7Yw9BNahPwQpfGKMaCh92V4AuJoYh6pspiHE1RqmRz/Qv2a/98FHjXGfDn0UHiuS3gOjKIoyqRhcnwTKHVhBXQ6EYuu5lEo5k+9CYKeM1h0pssmIMb9LoHDdARt2/JG5YtLnekhmraYokAeuppHUXgXJyA2zpm2JyPrtvXzud8+2rDXHS35kgmI1at5DOSi9+VAzgm24biGVCKGyFjHPEKZaacxzYWazAuBtwMni8hK/+dM4DLg5SKyBniZf19RFGVSoZ0GlADr9HWkE/TnKp3Mgu/g2kiHnQDW5teZdpxSsdEej1WI7HqwdYTzjikRpONFSWZ6yKYthlhFNY8qMY+QM51uQjtxe0J05Pyp/OSeZ/h/Jy5i/1mdDXv9kRI+kYvat0OVxnvzt//J8fvN4JIzDvJjOV7zoBHFPKo5065hmaxm3z9dC+kEnPOTYW97ImGMuQOo9od4SiPHoiiK0mqoM60EWLHRkY5XyUx7XQ0T/qTCft8ZbPdjHvmSOtOu1048Hhv25fWw4GyEkxsujTd005bKCYg1q3nEm+9Mv/zg2QBs2jV0++1WIHzs1SyNV+XKxfrt/Ty3cyB4fiImpEZwHIZfP5kojTEdeu8n+EX607RtvAfmLgWt4qkoijJpUTGtBFiR0plO4kZ09ssVXK9FuN9G215mzyTjxMvaiZfUmR7mBMSwG9kIJ9cJxTyGctHDExBt97tqjme4mkczSuPZCZwzO9MA9AxOjNx0VNv6MLkhqr0M5B1yBTco12g7cY6mznQmZjjN/AMGewDYOOtEPpN/O8+941446aMgk2cioqIoilKKimkloCimo0uJ5R2XZFxIJjyXz8Y82lNxkuWZ6VAHxFott2uNA8bGyd3cU92RtYLLTkB0hzEBMRmvPQHRcSureTSyNJ7dj0UxPTGyvfU601F1pm2FmZzjTY4FL9c8kuw+gFsY5C3xW/na9vO5MvFVeOhnADw752S+55xBLNMx7G0qiqIoexYqppWAYszDi9KXu8IF1495xKTEmW5LeplpY4pOnhM0bak9SS9yHGMopu9+chsv+N9bWbe1L/JxK9bqzUyXNG2JDVUar5iZFhFSiViDnWlvP87q8sX0wMQQ0/khMtPWcc9GHBvZgosx3jZsSca4H/OoVe/8tsc28djzPcUFrgt3XMkxvzqJ/0l+l754N+fnPoQ5+jxgcpbGUxRFUaJRMa0E5AqlYrrCmbYxD1+YWGcwk4wXuwH6IsMrjSdBFGI4kxDDr1sr5jGYd9jWm625rUc39mAMbKmyXiEQ0/Vlpt1QO/FkonbTlvLJk5lErKHOtBWd0ztSAOyeMDGP2s50tlA95mH3b7bghlp+D93W/uO/fJiv3bYWcv5JVywGT9xK79QlnJP7L/5n7tf4k3sMjhF/XEWhriiKokxuVEwrAVZMd1UR0znHJZnwhEnBLTrT7al4ICqsG+i4xdJ4UD0KEUW9ExC/dtta3vDNu2pu69kdAzW3U+FMD5WZdkIxj1jtCYjhah7gnXQ0qhENFPdjeypOVzoxYWIe2ZI609VL40V9pvYEL1dwS8rXJYaIeUzNPccrn/0ifOkg2LXBW/iWn3Lfi7/HXe6hpPySkLbutDrTiqIoikVL4ykB5TGPfKFUJOYdl1Q8FlToCJfGS8TKnWmvJJmteDGcsmThdWu1FN/UM1gzDw3w7Pb+mtsJnOlkfXWmXROu5lF/nWn7Go1qkQ5F0ZlKxOhuS9IzMPGc6agTFXt8RGWmw2K62FhFgqspFTz/MPzjSm5yb8QMxGDZW4qTCZNtOO5OgGJTH/94seNSZ1pRFEVRZ1oJKI952HrP4IkI13gd3xIxIVeWmbZi2gqYgutPVrQi2ylmqb/51yfY1V/dJQ13wKvl5A4W3CGrfdTrTNua0UNp/rDbnAzqTFcT6m5Jh7xMojnOdDoRpyuTYPcEcaaHinnUdKZztka5G7jIXmY6IubRuxmufgnm8d/zPecMTsp9BfeVX4XuvUOv7/0uHh+lzrQ9BhRFUZTJi34TKAGBmPZbhudCzrQVIsmEN5Gu4JQ1bYmXlpZzHDsBsTQK8dCGXVz2+8f486Obqo+jTmc6m3couKZqhMQYw3rfma4mum2MIOl3yRuyA6JriJWVxqtZZ7qJznQ27yDijbM7kxxVzOP6e57h3d9fUbH82e39Y147O1dwgwx7VB49VyMzHTjTTjEzba+Q5AsOrP4j/PnT3sqds+GN15K76EH+p/BWNrjT2NaXK9le0E68zJnWzLSiKIpiUTGtBFgR25mpzEzb26lQV8OBnENMisugKDbyrutnpiW4D/DU1l4AerPVIwe5YTjT4XGX0zNQYLf/OkM504mY1NWt0RmWM22CKAg0wZn2YzkiQndbYlQxj388sY1bVm3i6W3FqigFx+X0K//Gj+5+ZiyGG5B3DO3+CV2kM+3YSYaV+3IwIjOdxOGk7F/4n03vhR+/CR66EQZ3eU84+FUMJrqD5z9f1tjGLXOgy53puNaXVhRFmfSomFYCinWmo8R0UVQk4jFyBZf+nEN7KoGIBA6dfY4VnYmySXpPbfWc4lpiOl/iTFcXn7Y0WrUKGc/u6B9yO+Hsa3njmSjC7cSDzHSV54SFN3gTEBvrTBcd3u5Mkt3ZkTvT2/u8aih/W70lWNafd+jLOWz0uw2OFTnHpT3lHYORmWlbZzo3RMzDMRwuT3Lm7a/gop1fQIyB134LPnAfZKYEzwmX2Nu4q/S9FCeoljvThpgQXKVQFEVRJi8qppWAYswjUXIfigLXus0F15uAmPGrHFgH2nENxhjyfo3l8kl6tt5zrTJt2RJnukZpvIJbcx07+bDWOqXOdKwuMW3fk63mka8WIfEnYVrSiVhj24kXXNL+59OVGZ0zva3Xiz/c/nhRTNv3smuM61fnCi6ZpI0NRZS/C9qJR8c8uuljn8IzFFyXp81s+jr35SuzP8v7p/wfHPlmiCcjtwfwfNmEVhvzCJxpU5xgG87DK4qiKJMX/TZQAsqreeQiYh62znTBcRnMO7SlvEPIisaCP1ERIBGPVdSZXufHBPrqjHnU5UxXiU6EnenyBh+f/PXDfOJXD5eUT4vJ0KXxHFN0ppOJ6oIPop3pbMFlZ3+Ol37xdh7esKvma42WXMENJs51tyXZPZjHDNHhsRrb/SzxnU9sCzVN8d73WIvpfNiZrjEB0XFNacRm9/MsfvD/4x/pD/B583+4rksPndxz4vdY1XUCOSfaRR4scaajYx42M12cSOuWRHgURVGUyYuKaSUgWxHzCE9ALFa9SMS8MmP9uQLtSW/dcGbaCpx4SczDxRjDU74zPVTMw2rQmhMQh3SmB+jOJMgkYyUu5q6BPNff8yz3PbMj5Ex78ZW6nOl6OyC6LvGQ4LLO9JrNvTy1tY8H1u+s+VqjJVtwgpJ/3ZkkroG+iGjEUBhj2N6XY8mcLgbyDivW7QCKk/3Gun513nFpS1XvSJkruMFJ2mDege1Pwm8+CFcezoFPXMtf3KX8Z/7d2EMnLn5pvConPeFjbNOu2s60G6ozrZMPFUVRFFAxrYTIO55IsQIsKuaR9N3mvOMykHfJ+KInnJkulg0Lxzw8QWbjHbViHrmC67col5oT9obKTK/f0c/86e2eIxxyH//48PNeab+8U9JyOl7nBMR4nRMQy53ptO9Mb+7x8sc7y8oD7ujLsXbz7pqvPxyyBTdoRtPlTyodSUvxnoECBdfwiiPmkorH+Kufmy7GPMa2frUX84huomOMIee4dGeSgF/r/Km/w8ofw9K38tPjfsEH8hexyl0YHL/xoM50FTFdGIYzHcpMa8MWRVEUBbRpixLCxgKiRKIVJkm/q2HBNQzmHNp90RN2pp1gUl9xWwXXDSIeAL01JsN5nRa959VypouZ6WoxjwH2n9XB1t5syXZ+tdLrcDeQcyqqedRVGs+PeQTRkBodEEtK4/nO9ObdnmDbUVaG7cu3rOZPq57n7ktfVnMM9ZIruIEI7G7zcsI9g3n2pm1Y29nmTz6cP72NI+dP4b6nfWfad7lHItBrkXNMsWpMeRfOgsML5FE+zG/5XfxwsvmTvRz0gadB115s+vMaYDUA/f74bM6/vAmRxZ4U7NWdqcxMB3XIvc/Rimvvs1UvQlGGYuElv232EBRl3NFvAyUgV/BErL2EHs5Mh5tUJHxnuj9fCC7HJ0J1pu3l9GRJO3ETVPJYNLNjyJhHKh4jnYzXmZmuFMDGGM+ZnuY509Z93NQzyF1PbiMeE9+Z9oV/3FbzqL2PwhMQ7fuu15n2HHKXzbs9cbqjzJleu7mXzbuzQ0ZN6iVbcEqqeUDtKwLVsHnp6R1pprangs/OnsyMR2Y6nfCOs2BfuC489lsS15zGDenPssR9khwJ7/hIpKFrL6C0K+JA3hunPamrlm23J1oLZrSzcddASa7cnieVO9MFx1VnWlEURQFUTCshrDNthUNUnelkPEYy5gnIgZxDW5QzHc4hh+If67b2EY8JB8/toneIah6pRIxMonaTk1rO9BbfjZ4/vd2r7+xv5+YHN2IMnHzQbPrLnOl4Pc50aAIieBny6pnpUvcyk4yRc9wgl7uzv9SZfmZ7P8aMndObDTU/GU3MwzYymdGRoi10gmN/92YLVRvnjASbiU7EYsWYx6/fD9e/BXo38/H8O/jw3j/gJ84pFcdH+ORrIOdXoPFjHrkq2Xp7/Cyc0cFg3i05OahVZ1onICqKoiigYloJkXM8EWsrQJRkpkMxj0RcKDhe05a2ssx0wXWLZfRiEoqMGJ7a1se8aW0l7mbkOHxR71W/qFYfutjhLioz/cw2zwXfd3q713nQ386aTbuZ2Znm0L27yRXcklxtvZnpsCOZiEvd1Txsfnm93+J8R0hM5wpuUON4e5nIHinhToLhmMdwsWXxpnekaE/Fg/hEWLiOxPGuRt5xaZccb5M/kB7c6i086q3wum+z6bw7+aHzcto6OoFSJxpKa0/bx2LixzyqnPRYQb5wZgdQWh6vegdEzUwriqIoHpqZVgJsxjYyMx20E48Fk7lcYyqc6YITcqZDExALrudML5zRQVc6MXTMY4jMdLg6R1TM40m/ash+szrIJIpual/OoSuTCDrs2XFYF72upi1hMR2rHvMoOG5JZtrWTrYl+8ITEDfsHAhKCpY71iMlPAGx23emRxbz8GIp0ztSZJLxQLCGxfSugTzTOlKjHTIM7ODf8jfwb6v/SAc7uWnHVODFsPBFAOT8z3WKf3JQHgMqiXnk/M82yPlXi3l4z1k0sx3wJiEetJfXFdEpd6a1moeiKIpSxrg50yIyX0T+IiKrROQREfmgv/zTIrJBRFb6P2eGnvMxEVkrIo+LyGnjNTYlmmzFBMSisLST7JKxWODyDeQrnWmvNF6xdnPQ2MQxrNvax6KZHXSkEwzm3aoi1Ir6Ws50uDpH1DpPbe0jGRf2mdrmOdO+KO/PFmhPxYOTACsuPWc6NmxnOlXD8azmTFvnM+xMPxNqMLOjb6xiHk4o5uE70yOMeXSmE2SScdpT8UCwhk90RpqbHsg5/OHh5zGuC3/6BFxxGBe4N7Ch4xDOT3yOf0x7bcn69qTOZsBriWnroMdj4mfbTWSdbbuNBTN8ZzpU0SOYgFjuTGvTFkVRFMVnPJ3pAvDvxpj7RKQLuFdEbvEfu8IY88XwyiJyCPBm4FBgb+DPInKgMaZxLeMmOTl/4lcwATGqNF7CEyY5P2bRFnRALE7QCrt51pl+ftcAfTmHhTPaAwe2L1tganulm5lz3KAEX7Wyd0M5009t6WPf6e0k/LjIVj+q0Jcr0JFK0OY3Ben1Yw+2modbh5iOx0onIFbLCxdcU1Jn2jrTxngCb9dAHtd3ukvE9BjGPKwI9E5OYvSMcALidN91bk/FKbiGXMEtEa4jEdPZgsN/XPtHbn7S8PsPnsjBu9bDkjN59cqjOe6gl/DIgxs5ruzzsMdk4EwXqmemg2oeMQmqceQdQypR6ijb42f+dM+Z3upPEIVwNY/yzLSrzrSiKIoCjKMzbYzZaIy5z7+9G3gU2KfGU84CrjfGZI0xTwFrgWPHa3xKJXlffIkIKV8wW3LhCYih5iaVznTRcY6H2omv2dwLeLnUziEiB/mCCTLTg/U40xGC+6mtfSya6eVq04lYsH5/zqE9He1Mx4ZZZ9rbH/U707Z2MhCcVNgM8zPb+oLtjpWYDk9ABM/N3T2CzHRYTNv3MJBzSoTrcLPYZsP9PHzFa7hyw1vZXzZ423r9d+H13+YRZ1+vNF5EHt0K3+427xgaLGtCEx6TvR0PZfcj25PnHUSgIxUnJqUnZ64xiJROsPW2Y4KTTkVRFGVy05DrlCKyEDgKuNtfdKGIPCgi3xORaf6yfYBnQ09bT4T4FpHzRWSFiKzYsmXLeA570pELZZW9urxhZ7ro0CVDAtFmj8PdAMNNW2zMY80mT0wvmullpqF6F8SsPw5blzlynRJnunQd1/UmO+43y7tsnwlVoOizMQ+/DXqQmY5LfZlpY4hLWExHZ6aNMRXVPMLCdsleXUCxPN4z2/tZNLODREwqSuaNlGzeJR0S8F2ZBD0jaLCytTfHjMCZ9j67gbwz/JiHMfDkX+H7r0G+fRKLe1dwU+eb2G66vP0eiwXVYJLxWOSE0EpnujLm0eEfk9Y5T4TqnUfVmh70TzpEhHSiNFrkuN7nbU8KwxMQ1ZlWFEVRoAFiWkQ6gRuBi40xPcBVwP7AUmAj8KXhbM8Yc7UxZrkxZvmsWbPGeriTGq8kmS+mE6UisRBypm1NaSg6leHMtBN0FSzGPJ7Y0ksi5mWYrTNdTUzbcWT8joFRDJZkpkvXeW7XALmCy6KZVkzHgnUGcg7tqQRtfht0G3uwpfGqTVKzOE6pQLY1t8uxGrCaM33gHCumPRf6me0DLJjeztT21BhOQHSCeAJ4FT1GUs1je1+WGZ3FmAdAf67AYN4JTr7qEtMDO+DHZ8PmVTx3zMc4IftVHjv0YnbQHZysheNEyVgsaABkGTIznXOCyiXFzDSRtdMtg3kn+GxSidISeo7xYji2HGLgTGtmWlEURfEZ128DEUniCekfGWN+AWCM2WSMcYwxLvBtilGODcD80NPn+cuUBmFL0gF+zKMoZIJyd343OUtUZjofTFYsXl7PFryaz4l4jE7rTFeLefjZ7XAVjnKyNTLTT/kVH6yYTpdV8+hIxYN4ihX08XqreRhDSJ8G3SDLCbcpt5Q4076Y3tmfwxjDM9v62HdGO9Pak8OagFhw3Mj6yQXHxTVUxDyGm5k2xvgxjzQQinnkvZjH1LYkqXgsWkwXcnD/D+EX7/Fc6fbp8PZfwgcf5JmD300v7cGxYPe7FbupwJkui3n4n2N3UM2jPDPtBq71QCCmoyvUFJ/jkPEnh6YTsdKYh3WmY5Wl8dSZVhRFUWB8q3kI8F3gUWPMl0PL54ZWey3wsH/7JuDNIpIWkUXAYuCe8RqfUklpzKPUobPC2mamLe0RmeliabzSdRfO8CZ42QYiu2s406lErKQKRzklznSZ4LZier+QM20nqvXnCrSni6XxdocmIMbrENPl0Y1kldJ44WYwFitERWDxHC/PvaMvz/a+HH05h32ntzOtPTWszPRVtz/BUZ/5Ez+/d31JpQorCNPJ4li7Mgl2D3Oi4O5sgbxjQjGP0sx0WyruOd7h+Ei2F+76Bnx1qddsZfMjnisNsOB4SGaCz8+Kads10x5zKX8ibEXMw9/Xbck4ybhU1pnOF53pYsyjtBNnOYN5N5gcmk6WimnHtXl6737QAdF1tWmLoiiKAoxvNY8XAm8HHhKRlf6yS4FzRGQpYIB1wHsAjDGPiMhPgVV4lUDer5U8Gkt59YeoDoh2Ypilos60a0omIMZjgohnTNqmGJ1pT+z01Yx5SEnWuZxazvSTW/roSMWZ1eW7qYk4jus1mck7xnOm/XH3lpTGG1pMu26pM52IS2QUJWhTHuFMT29PMbPTG9uO/lxQyWPf6e1MbU+ybltfzTGEeXp7P305h4/87AGe2trLf5x2EFDcJ6ONeWwPNWyB4oTT/pzDgO/oJmJSLLm34V744es98bzgRfCqr8IBp3hnECECMe2fWDnlMQ/rTJfHPOxJQpUrFwM5J3Cm+3PFzzZRI+bhlRD0Yx5lJ5GuMcSEwJl2tc60oiiKUsa4iWljzB1A1LfN72o85/PA58drTEptwtUfkmVZ4HAHxGS4RXZ5B0QnXBrPW5aMeZVBbOwiyEzXiHnYduLZgosxBqkixuy4wzy1tY+FMzuC51h31nYWbE8lAlG4O5SZTtRRzaPCmY7HIk8KrDiMcqZndaXpziSJide4xYrpBTPamd6R4v5nd9YcQ5hswWXBjHbmdGf4y2NbAjEdiM5QTnskMY9ttmGLn5luK4l5uGRScWa725m980lgGcw+BBafCsf8P5hfvRiPveJgJ6Pa/W4nCKb8bH55zCPsXKeT8ZIrF8Z4tc9tnnogX+zEmaoZ8wg501ETEGMSnEAVNDOtKIqilKHfBkpA3gllpssmYuVdr0RYPCYkQ3V6i9U8KjPTVmBbV3Ch3xSj3ZalqxXziMcDIRjl/NplbRGNXZ7ym8NYrIi1LmtHqDReMTM9tDNta1CXVvOQkmy5xcYW4iFn2Ir6WV1pYjFhSluSHf05Vm/aTSImzJtWnIAY1VwkisG8Q1syzrxpbSWus90n4cx0VyZBruBGuv3GGC76yf3c9cS2kuW2lfhMPzMdjnlMH1jHxb1XctW2d/HO7V/yLj8k2+B1V9cU0lCMYHQEYtqPeTje8mTCy7BXONNOUUy3pWJlzXvKKn34melYTIJ9H/XeB/NOcKxVxDyMFdO+M63txBVFUZQyVEwrAeGYR7KsznTecUnGvPJhYUcuiHnEi5lpK4xsTtWKDitwYzGhM52o6kxnHZdkQgIhGFVH2oqoKW3JkscLjsv6Hf2BcAeCyWXWZW1LJYJx9wSZ6RgJvwPiYN7hB/98uqKBi20lXTEBsc7MtI0SzO7KADCtPcXOgTwrn93JQXO7yCTjTGtPkncMfbn6Ek7Zglf+rjuTLJkEmA05uBabT+6P2HZfzuE3DzzHP58sFdPb+/yYR2cx5nGwPM3R/7yIL205nxMG/8o/pr2aDyc/WRHlqEVFzMNOQAycaVtdJTrmkfJjHuHM9GDomADozxevOtgOkFEVZAYLbrGaR7xyAmJMJDiBCmem45qZVhRFUVAxrYQon4BYHvMIYhvhzHR5zCPUAdEuS8ZjpOIx9p7aFjyvM52gN1uZ3zXGy1yn/dJ4EN0uPNy8Iyx+egYLuIaglBsUHWE7sa8jFffcykQxohH3xZvrGv62eguf+NXDPLB+Z8lrFt9XuDRelWoeTmVm2kYJZnd7Lu/U9iTbe3M88OwujprvlVuf5neE3NFX3yRErxJFjO62JL3ZQnACUMwWF2MemRrurN0P5VcBbDRmelsSnDztyQQLZBOzt93DT9Jv4r8W/IRbF/47a3LTKrZZCyuCbcyjvDSeNwExVnGlIJwFL8/UDwSVPvxa2KF24l01GgVl/X0IXiymdAKi70z7x7w604qiKEo5KqYVgJJmGeDFA/JlpfGSIaFtqZiA6IRL4/nOdFyYP72tRFh2ZhKRLmHBNRhj2197246q6BF2IcNi27qzNjfrvRffme4tZqa93/GSetDWCbW54nLhVRTTxWXJmESWpqvmTP/3qw/lTcu9CpDT2lM8sH4nvdkCS+dP9Zb5E/3qreiR9WskT2lLYkxxzFExj3BZu3Ls88rfS0/fIK9O3kPbtafA375IWyrOH93lXHvszXwrfg6FzHSmtCXp8Vuj14v9TNuD0ng25lE6AbE845wrEdOl1V6seLaffbGdeCxwpqM6QJbEPBKl0RHHRDvTeUcnICqKoigeKqYVoPTyOVSWxsuHhHYiQkyXOtM2LyzBNsMZZvCc6SiXMFcoiikrBKNaimcLrtcCOl3qTFsxbS/1Q9GRtZGFjnS8ZOx2/DYzbQVXudgvRDjTyYhJcqXrlgquc09YGOyLqe2pQPAdte9UAKa1e+Mu74LYM5jn9VfdyepNuyv2QzoRozuTCNaDYjQmFSGmazvT/mOFLNx7He964Gy+Gr8SsrthxgEk40IsFqfHZILSeFPakrgGenP1T270GqXEgqscxQmI4bb1lRn2rH+FJBaTinbzA6HoSEyK98POdFQHyGzBDZzpVKI03uQGExCLMSbvtymZiKsoiqJMXvTbQAFKHT+IruZh24jb37biAoCIFaNuSdMWgEvPOJgLT15c8npdmURkFYzwZf5a4s822sgk4iWZaVuibUp7WEx729nRX+pM24gK4Dfm8JqE9AbOdKmgLU5ALC5LxCsnyUHYma7+J2aF85S2ZInABiq6ID7+/G7ufXpHRabZdu+ztZXtyUTWKZaQs7TVIaaDE6jfXAy/+QD9tPHZ9kvgwn/BEW9ERGhPxun360ynE/HACd41jDboduJkMHHVKWvakogRj1VGaHIFN7jSkEnGAzc6/L7aknFSiRgmdNWhM5VApLoznSlxpkMZ/AoxHSqNN0Ez0yJyeLPHoCiKsicxnnWmlQlE1imNBUROQLSP+b8zyVKhaEvLhZu2AJxx+FzK6Uwn2NQzWLG8ZIJZstg9sWK8BZd0MuZXX6iMeYSdafueKpxpX0zHxJsUaZ1p60iXO+eB2xwvdaajahdHdUAsx0Y6ls6fGpTxswJ7e1lmeuOuwZLfJfshEQverz2ZsIKwNDNdPTaT7dnMhxM/ZWf/G4Aj4fj3wRFv5D9vyWBEIBbaTiruN21xS4T8cGpYD+Q8ARu+ogGlJ3XJiA6IOafYwry83fxAzq/wkoqTihcjIDH/NTpTicjSgJWl8SrrTJeP03HdiZyZ/oaIpIFr8brT7mryeBRFUSY06kwrQGXMo7Jpi6mozmEdXksiJjhOadOWalSr5pENXeavx5kub/8cHfPwS+P1lWWmkwl/3MX35bgmKNlXHvOwDTvKS+OFnekNOwf43h1PRWamy5nqC2ebl7bjFqmMeWzyRfSmMjEdONOZUkFrTzBSEc502M1l5zPwu//kxN++lA8kfsX+u//lLd/rcNj/ZHYNFpga2pfgZc17swVyjkubn9cGoluKV2Gw4AZdDIGgIko+1GmzWtMWe/Ukk4hFTkC0zjSU7v+uTGW0yBjDYKHUmc5F1pn2JyDuAU1bjDEnAm8F5gP3isiPReTlTR6WoijKhEXFtAJUllIr7wSXd9xATNvf4ZgEEEzgK2/aEkVnJhFZZzofiicEmekoJ9U602VOYtQExEox7ccEyiqRxPzxW5FfLvYLEQI5UVb15Bf3ruczN6/ieV/01ooC2BbdS/28tN1edyZZEfOo5UxnkrEg1mLff7hTYHE/hDLoxsBNF8FXlsKK77Jur9M4Jfv/8eeOV5Zsf2d/PhD9lrZknJ2+2M8ki674cGIeAzlv0l+54xuO+SSi2omHyje2paKreWSS8UBwx0vEdLIi5pFzXIwp7qfykzOvnXispMMn2KYtE1NMAxhj1gAfBz4KvAT4qog8JiKva+7IFEVRJh4a81AAWONPbFvg12f2SuOVVvNIxUubsGSSpWLadqyrNvkujFcar1DR3TDIzA5RGq/EmQ4Jqp7BfFDpwRKOeaTiseLJQLLUvUyUxTwqnGn/fcViYWc65lcg8d7HRj+6sqU3W7LtKF5y4Gw++cpDOPGAmSXLp7UnK5zp53sG/N9FMW2MCeWWSyfYWUGYTobFdJwD5VkGckd4NaFTnfCC98Dx7+fPK7M88cRjzCmL1OwcyAU5bktbKh6cmGSSceb4pf6ej4jtVCNbcGhLxoJJfE5ZzCMZ9+qZl09ADJdvzCS9OtP/WLuVJ7b0BvXEM8lY3c603U8lmelQ103XeO3jYxJRGi8+Mb0IETkCeAfwCuAW4FXGmPtEZG/gLuAXzRyfoijKREPFtALA/c/sJBWPceje3YAvpkPCqi9bvBRuxWh7mTNtxah1F2tVO+hMJzDGK19mu+BBaTUPK45qOtNlHet6BvJ0tyVLBLod986BfEn8w8Y9rHtsJ7wFExCrVPMIC7RkyLFMxiVwpLfszvrbrC6m21Jx3vmiRRXLbRfEMEVneiAQennH4BpPPHakvAoWxZiHL6bjcc+FXnsrc/76Jf6UvpPfb9kbmA+n/2+w/b7s40BpabxBv2X4lIiYh32fbck40ztSZJIxNuwYqPpey7GZ6VhMECnGPMInU9VK45XGPFzecc2/cI3hP09fEozJiul4mZi2Jznh9wjFtuv2eXnHkEp4x7OdnAqlTVsmsDP9f8B3gEuNMcGHZox5TkQ+3rxhKYqiTEwmprWijDn3P7uTg/fuDiaspRKxoCIEwNa+LDO7PAfSiuS2cmfaz7g6fuvxWC1n2ndSy93f8GX+oVpAe850nIJrAjG2ayDPlLbSc0TrUhsDHaGctxXZ5c60FaTlMQ8nwpm27qQd98YyMV2rmkc1pnekKiYg2qz0YN4Nuc920qgnSrvbkiUxjxgubWt+Bd86EX70ehK71vGZ/Nt5Pr1fxWv2RjRtsduqjHkkgvGlk15XzHnT2lk/DDE9WHBKapRHxTyqlcazgjdcG7rgGlas2+GNLxUPTvgqYx5lzrR/ohY0bUmUXg1xjSEWk0D0u67xfkztE6UW5xXAj62QFpGYiLQDGGN+0NSRKYqiTEBUTCsUHJeH1u/iqNBEuJRfGs/4E6629+WY6Wd8q8U84nHrTA9dg9e2ti4X0+HsdiYQNrUy097r5EJiurvMSQ1XtAi76e1lmelineno0nhRkwptLtxGYp7f5QnKepzpakxtTwaZZPu6m3Zn2c8vn7fRj3xYx96eLHRnksVqHgWHNrIkf/8RyA/CWV/Hueh+vuecQa9JV7xmb0TTFjuGqW2VMQ/7mVhBvM/UNjbsHL4zDQRt3MOv701AjFVMQLTVSwCOXTSdFx84i5+cfxwAdz+13dsfibAzXTwOo2Ieg6GcNRRjMfb9WWcavImnBdcEbeUnsDP9Z6AtdL/dX1YVEfmeiGwWkYdDyz4tIhtEZKX/c+Y4jVdRFKWlqRnzEJFltR43xtw3tsNRmsHjm3YzkHeCxiHgiRljPDFhMOzszzO9Ix08BlExjxh5v2nLUCKyWnvnkqYtNZ1plxkd8UBYZfMu7SkvMxxuJQ6eoPXqZpug4x6EuzeWupg9VZq2BM50STWPojM9mHeCrHM9melqTGtPlXRA3NqbxXENS+dP5cmtfWzcNchBe3WXONMAc9I5Tnj+h3DtJ8jO+QK5eDvyrltgxv4Qi5P0xxPVAbEvV9a0hWKt63Jnuj10EmVF6D7T2nhoQ/0V1mxZPShe0YCiM52Mx4K632FyBTc4do5ZOJ3vv/NY7/V9MZ9OxIjFJIiCJCqc6XxJTn8wKCFYnHhrXwe8zzwWPtkyJtQqfsJ6ERljTK+9Y4zptc50Da4FvgZ8v2z5FcaYL47x+BRFUSYUQ2Wmv+T/zgDLgQcAAY4AVgDHj9/QlEax8tmdABw1f1qwLBnKjlqH1opU68aWxzzCTVsSQzS0qNbe2Tq8tppHPCb0R3TWyxYcPzNd6l7vGsiz36yOivUziTh5p1AiBNsinGlvTNHVPKKd6WLTkXDd7NE409M7UkFTlEwyHkRHlu47lV/cvyHIK1sh2OXugFuv4dqd36TD9MH0k4gN7vRE9qwDS7bdloxHZtB7s56ILnGmI8oMQmkVFyuI501rY3tfjv5cAWO8E7Rl+06jGrYDIviNb4J24sVKMIm44BovWmEFbS7kTIdZuu9UNuwcCMZWLTOdd4xfAcXP4xdqO9OuMSUnW45jgrFOYGe6T0SWWTNERI4Gal5WMMb8TUQWNmJwiqIoE42a1oox5qXGmJcCG4FlxpjlxpijgaOADY0YoDL+3P/MTmZ0pJg/vXjl1wrlvlyBrb2eQzmz08Y8okvjWYcxW0XwhAnqIg9EO9OphJfFrVqPOu8G1Tyg6KjuKptkaLGi2zZsCb/HcGY6TPkERHt5PyzQEkHMwy0pW2fFdHIEFR+sE2xjFlY8HzFvKiLF+9mCw+HyJKf+8WXw9y/zWPvRvL/jS/Bvv2aXdEV+Bmm/AkY5fVGZ6f4qmelU5T7cZ6p37GzYMcC1d67jdd+4kxXrtld9j7YDIhQnfkJxgqFETPqD0moeYWxEyW4zcKZDJ3XlLdchlJkO8telmWlbZ9obp+dMF5sSTVgxfTHwMxH5u4jcAdwAXDjCbV0oIg/6MZDIsycROV9EVojIii1btozwZRRFUVqXer/plxhjHrJ3jDEPAwePz5CURrPy2Z0lXfiAYrmzXYNs6/OE4YxOb5kVORVi2s9M7+yvLKdWTjHmUV731xMxVoR2pitzrhBypkO5atefPBgpphM2mlK8GBOVmbZMbU8GpfssTkRXw2RITFuR25lOBKJ0JM70NH/f2aiHzWHPn9bGrM40bHoEHv89g3mXVWYBGw58O1y4gp/t93n+lVvo7Y98tOhsS5WWErRUtBPHK4sXHo+lNObhvca8aZ6YXr9jIBDRn/3to0EpuTDGGAbyTknMwwnFPIKydvHSsnl2fKmIExQbUWpL1nKm7dWQ4vFUzExXiXkYSmMeroms6jKRMMb8CzgIuAB4L3CwMebeEWzqKmB/YCme4fKlqJWMMVf7RszyWbNmjWzQiqIoLUy9YvohEfmOiJzk/3wbeHA8B6Y0hoLjsnZzb1ASzzJ3iieONu4aZJvvTNsmI6l4jDndaRbOKI1Zxv3M9La+HNM76hXTZdU8Cp5QsWKoK1OjBXSiNDO9O+tFDMINWyxWLJU402ViOiyO5k5pC0r3WWxxk3hUzMM1QZ3lg/bqCh4fieCyTrAV0xt7BknFY0zfdh9f5zI+tPY8+MPHyObyOMR57thLYeYBdLclS0rjRTnTmUS0Mx1VzWNHf55kXCqy8dExD+9YWL+jn5XP7mR2V5oHnt3Jbx58ruK1bEk/u51EXMi7tgOiG5yg2H2XD+Wmw01bwhy69xQSMakocRfuVhl1zA2W5c4rYh6uwRrQttqLFfcTODMNcAxeXG8ZcI6I/NtwN2CM2WSMcYwxLvBt4NgxHqOiKMqEoN5vg/OAR4AP+j+r8Ir+KxOIzbsHecDPR1v6/KzslDL3ce7UDODVNd7aW+pMx2LCPz56Mm9aPr/kOQk/M729L8f0IZzp8rrIlmyozjB4wrg3W9lZr5iZLsY8eqpkfKEo+sLOdBDzsHWmQ47n3lO89x+ehBg1AdHmaa0z3ZVJMH968SRjpJlpKMY80s/fy8/S/41cczoHO49zXfot8O7b8D+6QDR3ZxIM5l2yBcfPFscrtl3eNdASONOhCi47+/NMaUuVXLGw27DY/TqrM00qHuPOJ7axoz/PB05ZzKF7d/N/t62teK2igC1t4w7efkyUTR50nKFjHplknEP3mRII5modEKH0akh5RZTgSkc+VM3DdsiU0jrqE9WZFpEfAF8EXoQnqo/BmxMz3O3MDd19LfBwtXUVRVH2ZIZs2iIiceD3fnb6ivEfkjKWhMXAZb9/jDvWbOWe/3pZ8Lit4tCZLhVeMzvSJOPCczsHEfHiDDZzCkR2f4v7mekdfTmmL6otpmMxiYxwBJlpG/PIJEom9tn3lHeMP0mxGPMIWonXiHl0pKKc6UoXcy9fTO8ezDPbr68dlZUNl8bbuGuAvbozJbGIkeRqp7WniOPQs2sHMJfe3b3szTY44wtcuWEZNzy4nXPbpzOY3wgUBa09iegZKJAtONGis4oz3Zd1EPFqcdsJersGchV5aSit4mJFaCwmzJ2a4bbHNgNw9IJprN3cyy/uW1/x/EHf7S8608USeLmCKQphWykl5Exn/Y6PUXzpjUcEVw+SQVRkCGe6rDReKii1WMxM25OnSmd6YoppPOF8iAlnmIZARH4CnATMFJH1wKeAk0RkKWCAdcB7xnykiqIoE4AhnWljjAO4IjKlAeNRxpCHN+zi0E/9gbWbvSpY9zy1vaLcm3Ukw44teOJorykZNu4aYHtvjhkd6QqHspykX5t6R38uiITUoiuTrHCmw007vHWiWkAXBVB4AmJdznS6MjMdNQFxbiCmC3zj9id41dfuCCYgRpXGKzguz/dk2WtKhukdxdcftuDKDzB91fe5PfVhDl71FQBuHTyQzx/wY3jBe5gxfTq7Bwv0ZQsVrbDtSUTPYL56zCNVWc0jW3DIOS5T/efbmt07+/PBsjBtyUpnGrzcdLbg0p6Kc+CcLlKJWLCtMIEbnAg3bSnGPMpbgTt1TEAEOGB2F0v8iE3RmS6tMw2lznSwD23MIxQbAm/SaeBMl2emJ+4ExIeBvYbzBGPMOcaYucaYpDFmnjHmu8aYtxtjDjfGHGGMebUxZuM4jVdRFKWlqbedeC9ebvoWoM8uNMZ8YFxGpYwJT2zpZTDv8sdHnqcjvQ/rdwxUXJq24rozXXkozJ3Sxsadg3S3JYbMQIMnXLb1DeCayklrUXS3JWtW8wArpsuiIKHawEHMI+8Gy7vbKt9LMeZRKQSjJiDu5WfGe7MF7n9mB2s29QYTEMP70AqqnOPy/K4BlsyZxbTQvqq7A+LATljxXfjnVST7trBdDmBV+3KOMIaNPVlOnzrXH5fnkm/cNVhshR3EPDzhu2sg78U8klHOdIzNZc60jfpM70ixoz/v7ceMJ6b39uM+Ydr8E69ETEqqldiKHkfMm0Lcr/UcntAYvNV8qTMdL495lJ3cFBzDf/3yIV571D5em+86KqSkywQ51J6AmA5iHpWZ6VhoPCXVPCZuZnomsEpE7gGC/urGmFc3b0iKoigTl3rF9C/8H2UCYWMPf129hX39HG/Bb4dsBYKdYNcRIab3npJhxdM7yDnpikYoUSRiwuYem6+ux5muFMq5gktMisK2K1OsqhE02gg50+Euidaxrr+aR1EUQqnTaJ3p3sEC63cMkC24gaMaFt1W2GXzLpt3Z9mrO1PiytftTN/yCbjv+3DAy+BFH+J9P8nygtQMTunNkiu4wXhm+I1zdvTnqjvTA54z3ZWp/EyjMtP26sT0jhRPbOkr6SZ58Nzuym34r1feAdNOQlzq1ytPJ2K4xnPtw7Gg8goaiXgsqC+ed0wg0O3nsbM/z4/ufoantnrn8dWc6TBRExDtCWN4Qmu27IQkiHkUQs60FJ1pr3X9hI95fLrZA1AURdmTqEtMG2OuG+6GRWQ+XresOXiZuquNMV8Rkel4dU0X4uXs3mSM2SGeUvoKcCbQD5ynHRZHh4093Pf0DuZNLdaQzjkumZgnhHqDmEdlDnWvKW1s6tmIMbBoZmUjlHLioe569TjZ3ZlkRQvqfNll/M50ZaONSGe64AQnD7ViHh0RNZITEZPVgsx0thCM0U4ILK0z7T13w84BjPH2WUlmuprg2v4k/OOrcPR5sPdSeNGH4Zj/B3OPBGBa59/Z0Zfj2e39ACyY4e1/K5h3D+YrnOkpviO/ayDvTdCMyBZHZaZ7Q2IaigLTK3FYPTNdLqatM23L1BXzx6VieqAsp1w+ATHIO/vOry3NeOcT20reby2SEZ9pPMjphyYg+nEYe6IWVWc67JS7rols3jORMMb8VUQWAIuNMX/2ux9GB9EVRVGUIanrOqWILBaRn4vIKhF50v4M8bQC8O/GmEOA44D3i8ghwCXArcaYxcCt/n2AM4DF/s/5eDVMlVFgxWXBNfz6gWKJsnCOta9GzGPvqRnyjmHDzoG6MtDJkLNbV8wjKsJRVkc4qtHGYElm2u9kl/cmIFrBVI51QaPbifsxD19QpRIxZvoO8HM7B4JYgK27XCKm/du2SsrcKZmSE4kK93Ljg/Dzd8L/HQ0rfwQbH/CWT18UCGmwLcXzPOOL6X39MoThSXTlrbCLmelC1ZhHW0Rmuq9MTOccl1zBpS/nRGemAzFduv2TlszirS/YlxMXzwQqXd5/rdvO09v6Kib9JWISZOXzjkuqrDTe9r5ia/XwdmuRipiACJUZ/MFQvWuILo1nr+LExHOm7YTI+ATNTIvIu4GfA9/yF+0D/KppA1IURZng1Bv6uwZP3BaAl+I5zj+s9QRjzEbrLBtjdgOP4v3TPguwTvd1wGv822cB3zce/wSmlpVeUobJroE8MztTdKYTOK4JBHE+lGPtqxHzsLWmoVgWrxbhyV71xzzKMtNlzrTNufaWXJoPOdOJUme6O5OInChpRXd0NY/SzHRXOhHUo378+d3B+rsinGk71p/du550IsYBszvLMtOhsfzsHfCtE2H1H+H4C+Hih+DocyP3zdT2FDv7czy9rR+RYlMUK6Z7fPc5EZPA9S12lcxXnJQE+yEZq8OZLlZGiXKmq8U8ZnSm+fxrDw/iM+Vi+sM/XcmVf14TiOlwacLSzHRp0xZb59zuy3oy01Gl8aAyWpTNuyUnBUFsJyLmkYiXOtPJiZuZfj/wQqAHwBizBpjd1BEpiqJMYOrNTLcZY24VETHGPA18WkTuBT5Zz5NFZCFeC/K7gTmhWd/P48VAwBPaz4aett5fpjPER8iugTzTO1IsmtnBHx/ZxPH7z+DmBzdGOtMd6cqrvDanC/WJ47BwrHcC4u7BfEkeOl8mAq3LXK2cWbj6Qs9AIbIsHhQdx3BmOhkX4jGpyEx3ZhIk4jHaknEeC4tpX2CGc7j7zezgvBMWsv/sTl5x+Fymd6Qo+PtXcImv+yvsdxKIwNwjYM6hcMy7oC2y83LA9PZk4EzP7c4EJwOBYPad6UxZZY1UIhaI6UhnOhknV3BLSiYWJyB6J0w5x2WX78KX1x/39mE82FYtyoVpf9Zh466BUG3ncDtxx39tQ1uqdPLgNt+ZPu2wvfjtgxsj31fFa0dMQATv5Ky8aUuJM102AdFxQx0QZY/JTGeNMTn7NyciCbwonqIoijIC6hXTWRGJAWtE5EJgA9BZzxNFpBO4EbjYGNMTdg2NMUZEhvVPXETOx4uBsO+++w7nqZOOXQNea+3XLZvH48/v5gX7+WK6UCqmYxItjPYO5axn1iGmrbjoSMUrXMsoujIJXOO541Y0VzrTlWLaCp10IkYiHiMek6DOdFReGoqlz8InDSJCezIecqb92tb+WDozCdZtC4rXVM1Mf/rVh5a8VgKHt2bu5Fz3V8gP1sPbbgwmFtbL1PYUPYN5ntraV9IEJpOMk4rH/PJ3TkXUYkpbkqe39Vdt2hLkzgtOcGJhT6hmhJxp+16jYh6ZZHTMo5xUmTDNFrxJmgNlznQyVBqvEIp5xIOYh5eZPu+EhTzw7E72nzX0vx4r5GNS6Uxbpxu8E7NwBltESCViQWbaNQZ7bhePCW64mscEjXkAfxWRS4E2EXk58D7gN00ek6IoyoSl3uuUHwTagQ8ARwNvA6KvT4cQkSSekP6RMcZWA9lk4xv+783+8g1AuKXePH9ZCcaYq40xy40xy2fNmlXn8CcnPQMFprQlOe3Qvbj9P15arCNcIqYdOlLR0Yhp7clAaFjXshbWBZxeh/CGYoTDTpS0YwuXW4vuWleauU374qemmPbXbSubaJlJxStKsVkx3ZVOEG5rEZWZLqGQhbuvhq8u4/N8DSMCr/s2LDopev0aTGtPYgw8urEnqMRisfGYwXylYH71kXvzh0eepzdbiJyoZwXsQKhNuo15TAsy004gpqtVRolJZcwjaj0oHm/ZgsOWnmxFNQ/b7AdsO/HSvLPNTC/Zq4s7PnoyR8ybWvN1oXpmujuTrOiAWP4+0qGSfo5bjHnYcVrhP4Gd6UuALcBDeI1Wfgd8vKkjUhRFmcDU60xvN8b04tWbrquNuF+d47vAo8aYL4ceuglPiF/m//51aPmFInI98AJglzYBGB27BvIc5DexgGKFg/KYR3tExAM8l27ulAzrtvXXNQHRCpehWolbuiPq/pZX8wic6Wy0M21/ZwsuO/tz7DOt6KaHOWyfbg7bp5upbaVjO36/GRzuizPrYtrX7PR/T21PsrM/HwjMiioOrgOxOCDwjythynw+zzv50Y6DWHXEGXXti3KssB3MuyyYUSqmvXiMVy6wPPJw6ZkHs6lnkJsf3Fil7ba3bDB0QhVkptuLzrTdx1Hl9USE9lRiSDEdruZhu1bmnQI7fHFsn5+Mx4JGKHnHhNqJ22oeOWICnal6/12FSuOV5ZrLc/q92UJFJZt0MhY5ATHu15m2wn8CV/NwgW/7P4qiKMooqffb6XsiMg/4F/B34G/GmIeGeM4LgbfjNXtZ6S+7FE9E/1RE3gU8DbzJf+x3eGXx1uKVxqtLtCvV6RnIl2SIy51CgN5cIXLyoWXulDZPTNeVmbYudr3OdGlHusG8w5rNvezVnYlYp3oL6HQiztPb+lm3rZ83Lg9f3Chy4uJZnLi48krGV885qjj+eLG2dfi1D9qri38+uT3ITFtxRc9GuOtrsOZP8N47IJGG82+Hztk8dd2/iO/aXtd+iCKcOZ8f4Uz3DORJxmMVznQ8Jlxx9lL2n+VluMvJRDjTfdkCqUQsiMDkHLdmMx+7nSHFdNzfXsEtOeae2e5Nqkwnis60jU54VyZKM+zbenN0tyWL+70OUoEgr52Z3tqbrXC604l4aQfEkDOdz7vFDogTdAKiiDxFREbaGLNfE4ajKIoy4am3zvRLRCQFHAOcBPxWRDqNMdNrPOcOoNq33ykR6xu8WebKGOC4ht3ZQsll+vLqCgD92UJVwQQwd2qG9lS8ot14FPaydz2REAhVpvDF9OV/eIynt/XzmbMOC9YpTkCsbAEdONPJGP9YuxWA0w6dw0iJl8U87O/9ZnVy79M7Amc6tfNJuO0b8MD14BbgsNdDdrcnpju9ogjT2lOjci7DYjo65pGnI52IzC0n4zE+9PIDI7drBXC4cUuvfwykQpM5AzEd4UwDvHjxTI6cP7Xmewgfb+ViOpOIB9GicDvxgutWCOHtfbm6TubCJENCPUxXJkHOcYOSeFt3ZyvmA4TboIcnasZjMRzX2RMy08tDtzPAG4Gq/8sVRVGU2tQlpkXkRcCJ/s9U4GY8h1ppUaz4jBTTTmlmOqphi+WdL1zECfvPrOs1g8x0R3RuuZxiA5ICd6zZyjX/WMd5JyzkJQcWHeREPEZ7Kl5SGm/Lbm9Cmq0ZnU54MYH9ZnbUNTltqPFbAdmZ9sa3z9Q2ujJJtvflOETW0fWdt0I8BUe9HU64yKsRXca5JyzkhANmjHgs4ZJ0tmGLpTuTZHNPlkQsFkysrJe2CDHdly3QkS7W7M46bs2JqQBfPnvpkK9VPN6cYEIf+GI6dBKQiIcz06ai4UpvtlBX06CS167iTNu40tbeLDM60vTlHGaWlX1MJ2JB4xrXhGIe4onriZ6ZNsZsK1t05XCqMymKoiil1BvzuB24F/hf4HfGmFzt1ZVmE9UN0IqUvFOal917aoZqHLbPFA7bZ0pdrzlyZ7rAbY9tZmZnmkvOOKhiPa9rnSemjTH87qGNHLNwWuAcWxH48kPnRE6krJdyZ9obn2Fp4UHeGL+Pb3E8q8wCcqd8lvRRZwcudBTD2W9R2Mx0ZzrBtLJaz12ZBD2DedpS8bojNZaiMx0+BrxJqEVn2qE3W6g6MbVerKDNFYoZbICtvTn2DpVd9Erj+WI6NAE1PBG12sTSqq/tv5fyaMgc/3U39QwGk0tnRYnpyAmI3jgnegdEEVkWuhvDc6rrD6QriqIoJdT7D3QmXgb6xcAHRMQF7jLGfGLcRqaMCiumw5npsLix9OcKdUU46sFOHKvbmQ5V81i9qZfD9umOzOF2ZRLsznrv59GNu1mzuZfPvqYYBbFxj1MP2WtU4w+atmQS4Los7buDX6W+xdJ/PMHC2N58mxfgEsMc9z6oo/TfaOhIeSXw9p3eXiFobe53aps7Ymd6oMyZ7sokipl6x6V3sFA14lEv4dJ4YWcaSiuBJOMS1ObOOcXMdNj5Ha6Ytu+lXPDaPP7zu7LYFNqsrlIxnUp41TyMMbgmVGc65k1I3APqTH8pdLsArKM4d0VRFEUZJvVmpnf67cPn45WsOwEY3reb0lCinOnyur/gu5I1MtPDITFMZ9rWTN41kOeJLb28qEosIjxp7NcPbCARk5LJdZlknJmdaY4aIsM7FNYJXdh7P3zjjbxm62qeZjY9L/v/+OjDS3DX9QKNEVEiwrSOZEVeGryTkP6c5x7X08AkTFDNIyymcwWmd6SKTVbyLn1DTEyth/CE1/IW5mExHY9J4EwX3GLMI9xhsFoznmqUR0UsVkxv6hkMMs+VMY84/blC4EAHHRBjMQruxJ+AaIx5abPHoCiKsidRb2b6SeAx4A68tuLv0KhHaxMlpqOqefRlC3RWKY03XIoxj/qjB12ZBI88t4tcwWXxnK6q6+weLOC6ht+sfI4TF88seY0PnLKYwbwzrGoPFeT62C/Tx6dedQjL5++EJ9LsesW3uMs5ljcftx+ZJ/6FVxmytAPiePK51xxe0oXSYuMxW3uzw3amMxHOdG+2wPzp7cRiQioe86t5jP4kK+x0h0/gvHGEMtN+/WbHj1AEQjg+cme6WgfEqe1JUokYm3oGgxORmV2lx2s6EWNHv4tjrAPtLY/FBNeA42emJ+oERBH5cK3Hy0qZKoqiKENQ77flAX5tUmWC0DPgObnRmWlPJDiuYSDvjF3MYwRiurstycpndgKweHb05MGuTILndg5w/7M7eG7XIP95emmu+thFoyhE0L8d7rka7v4msvg03vG6b3nL3/N3pojw5mAM3n4UqczhjhcvPyS6MokV09Vahtci6IBYFvOwNZy9yXcuvYN5ukYppqOqeXSmE/RmCyXNcxLxmF+H2lsnmfD2bzK0n7vbhjeWanWmRYQ53Wme7xkMxjCj7EpKOunFPHzNHHzetupIYYJnpvEy0sfg1fYHeBVwD7CmaSNSFEWZwNQtpkXkKmCOMeYwETkCeLUx5nPjODZlFBQz08WPuChuPCHVn6tdS3i4zO5O05GKM7urvpgHeMLwqa3eeA6oJqbTXszj7qe8us3hah8jZtcGuOvrcO+1kO+DA8+A5e8sPl7mPtt91AoCKhx5qKdtexgrIEuc6cFipMMrC+fQl3UqssTDJSozPW9aG489v7vEUbciNRDTscqIxrCd6SDmUfnYXt0ZNvUM0pVJBE51+XOzhaIzbT/zmAiuSzH+0QLHwgiZBywzxuwGEJFPA781xrytqaNSFEWZoNRra30b+BiQBzDGPAiBaae0ILsG8iTjUlLarLw0Xl/WEzhjlZl+9ZH78PePnjys7VmXde8pmcD9jVqnN1tg5TM7WTSzI6h0MSru+jrc/U04+FVwwV3wluth3xcMOc5YgyIetQh3JcxEdDmshV3fZphd19CXc4KoT+BMZ0efmY6q5mEb0GTCznQshmuK8aOgaUvIVR65mK7cP3O6M2zqybJ1d64iLw1eZjpXcAPRHCurh513JnZmGpgDhGN6OX+ZoiiKMgLq/bZsN8bcU1ZVoFBtZaX57BrIM6UtWVIJoryaR5/vTHeMYWZ6uKXabEWPA6rkpcGr+9yfc7jvmR2RXQzrYsO9cMeVcMy7YL+T4EUXwwveA9MW1PV0W9miJZzp0ElHepjOdCIeIxGTwJnuz5eeUNmGJb3ZwqhjHol4jJiUielpvpgOO9O+eLZjsg1XEuOQmQZPTN/66Gamd6QqGraAbSfu4JY50KlEjMG8G2SmJ7Az/X3gHhH5pX//NcB1zRuOoijKxKbeb8utIrI/fgtaEXkDsHHcRqWMmvJW4lB0/HK+s9bnd7nrGKPM9EiwLuuBVSIe3jre+9jam+OofafWv3Fj4Mnb4Y4r4Km/QmYKLDnTe6xGjehaY2hUXroWJWJ6mM40eOXxbDWP4BgI1ezO5l2/kcvojwsrzm1Ge/70Nm8MqeK4rSi1Lc6jKnF0V7lqUY1MMsbrjtqH4/arrBCzV3eGgbzDU1v7eOEBlQ2JymMedhx7TcmwayDPbn+ftcKJ1UgwxnxeRH6P14QLvAnl9zdzTIqiKBOZer8t3w9cDRwkIhuAp4C3jtuolFHTM5ivcPNE/GoNvkvYWyakmoEVSYvn1BLTxfEtHU75u5+8GVb/ATr3gpd/Fo4+DzLdIxpnVwtlpsP7Y7jOtH2OFdNB2/CQM90zmKfgmlHXmQaC48060/OinOlYmTPtn/SNpmmLiFTt0mgbt2zvy1V1pr0JiKUxj32meicC67cPEGvgRNRxoh3oMcZcIyKzRGSRMeapZg9KURRlIlJvnekngZeJSAdezrofLzP99DiOTRkFuwbyTGuvFAq2IQWEM9Pj24CkFl2BmK4e8+gKtQ0/aK8aYriQhUd+CYe9HuJJLw+95Aw48hxIjG4ynRWwrXBpv3MUmWnwXGGbme4rE9PpRIztfbmSZaMhlYiTDVXzmDfNOtOVYtqOyYro8K4erpiuxZzQxMpqmemCa4K5BfYz39sX089s75/IeWlE5FN4FT2WANfg9Qz4IV5jLkVRFGWY1Py2FJFuPFd6H+DXwJ/9+/8OPAj8aLwHqIyMXQN5Fs7oqFhuqzVAsZpHM53pRbM66M4kOLCWmPYF92H7TKmovABAtterynHX12H3c5DugoNeAUeNXXECKyxbQUwn4zHaU3H6c86InOlMIh5EKsqvTqQSMbZv98T0WMR/0olyZ7qNmZ2pIDsNEPfFsz0erZgWEZJxIe+YYTdtqcVeodrdURVLUsEkTW8f2brie0/1nvf0tr6WOA5GwWuBo4D7AIwxz4lI9T9ARVEUpSZDfVv+ANgB3AW8G/gvvB68rzXGrBzfoSmjwU5ALCcZF/IF7/J1+SX+ZvCqI+Zy6iFzapZ4s65wRYfD/CDc8WW4+1swuBMWnghnfQ32P3nMx2nd4EY1bBmKLn9S5sic6TiDBZuZ9n5HOtNjEfOwmWn/9TpSCf5xycnBZFgo1pO24jX8WDwmZBLxMRWvc7pDYjrSmbbi3huPjXPM6c4QE+gZHP3kzCaTM8YYEbFzYCrPuhVFUZS6GeobYT9jzOEAIvIdvEmH+xpjBsd9ZMqIcV1DTxUxbcUNFC/xt6eaF/MQkSFrJe8zrY10IsZLlviVPHL9kGqHeAoe/Q0sfBG86EMwb/m4jdNmu+Mt0vWuK5NkU0922HWmodSZLk5A9LaTSsSCpiRjEvOIx8gVHLIFl1Q8RiwmpGOlY46XZabDVTwSsdiYutLg1eae2p5kZ3++aswDimLaavtkPMac7gwbdw1O2O6HPj8VkW8BU0Xk3cA78cqfKoqiKCNgqG/LvL1hjHFEZL0K6danL1fANdFd48ITEK0rOVYdEMeLmZ1pHv7v00huWw2//CSs+RN8cKUX53j3bZBsG/cxBDGPFnGmuzNFJ3m4ZFLxoKnP7orMdFHojlk1j4JLNu9GR3QoxjoGcqWZafCE9ViLaYA5XRlPTHdFzyvwxuM706HPfO+pbWzcNRhZv3oiIF6tzBuAg4AevNz0J40xtzR1YIqiKBOYob4tjxSRHv+2AG3+fQGMMWZkpRGUccUKpWhnOl7iTLclx/YS+rjw7L9I3nEFPP5bSLZ7VTkc/zyvAUIaipGHVqngYHPkI3OmY2yqcKaLmWnL2ExA9K6E5BynqvAvd6ZLxHRMmDLMVuL1MGdKhsc37a5oJQ6VMY/w38feU9u49+kdLVHVZST48Y7f+VccVUAriqKMATW/pYwxzbv+r4wYKwKiHOdUXEqatjRz8mFdbH4UvvsyyEyFl1wCx54PHZW1g8ebZDxGJhlrGRFl3dp0crSZ6QIixahPeqzFdNzrqJjNu1XFdFAaz5+AmCoR07ExreRh8SZCpiPd8qKY9sYTL3Gmvbx1y5+A1uY+ETnGGPOvZg9EURRlT6DFlZQyEqxYjhIv5aXxOptYFi8S14FVv4Id6+DEf4fZB8PrvwsHng7p6rWoG0FXJtkS7cShOCkzXK+5XsqreXSkEkGnzLC4HIuSielkjL5cgWzBrVp5JGFjHkEHxOI+PmB2J4fMnTLqcZRz8SmLOeeYfSMfK6/mEb4aYWtNT/DM9AuAt4nIOqCP4pXGI5o6KkVRlAmKiuk9EFuGLMp1sy2RwXMlWyYvXcjCyh/DP74CO56C2YfCCR+EeAIOf0OzRwd49a5bRUQFYnoEMY+uTIKeQS8m05ctlDjQJZnpMTg2ik1bqsc8is60698vrvfD//eCUY8hitndGWaHqnqEqZiAGHamp3hieiI60yKyrzHmGeC0Zo9FURRlT6JFlJQyluRqiel4jN2D3uXr3jIh1TSeuA1+eQH0Pg97HwUv/4FXJzrWWq551xiUihsrbHWRkUxAnNGZZjDv0p8r0Jd1Shxoe8x0pOJjkg9PhepMVxXT8dLMdDjm0QxsdKZaZhogOTEnIP4KWGaMeVpEbjTGvL7ZA1IURdkTaB11oIwZdoJhlHhJhqp59OecyHbKDaF3C+R2w/T9YNoimHMIvO5qWPRiaJEoRTkzO9NB1rjZnH7YXvTnCkxtH36eeEaH95lv681VnFDZY2assvSpRIzsENU84mV1psMxj2ZgxXytmMdEdKbx4hyW/Zo2CkVRlD0MFdN7IIEzHa90dksz0wX2ndFesc64suNpuPP/4P4fwKKXwFt/CtMXwdt/2dhxjIDPvuYwHL8Gc7PZf1Yn/3HaQSN67nQrpvty9GVLJ6FaMT0WDVvs9rxqHi5t1TLTsegOiM1ihn+C+cSWPoCSSafdbQk6UvGWifsME1PltqIoijIKVEzvgdhuc9Uy0zZT3ZttYCe3Tavgjivg4RtBYnDk2fDCixvz2mOEvcQ/0Znui8XtfVl6swXmdxRPqAIxPVbOdCgzPbVKVY5izMOvM93kCMXcKW0ctFcXf1+zBSitMy0i7D21baI600eGSpu2lZU91VKnTWThJb9t9hAURRkF4/atJSLfE5HNIvJwaNmnRWSDiKz0f84MPfYxEVkrIo+LiE6QGQW1MtPpRIy8UxTT414az/gG2KO/gcd+C8ddAB98AM76OsxcPL6vrURSO+bhucdjMfkQSpu2VCvjZ53fwVxrxDwATj10r+Cks1w4v/jAWRw5b2oTRjU6jDFxY0y3MabLGJPwb9v7KqQVRVFGyHgqqWuBrwHfL1t+hTHmi+EFInII8GbgUGBv4M8icqAxpjUCqhOMmqXx4t5ld8c19Oec8ZmAaAys/TP8/cvwgvfAoa/xRPSx74b26WP/esqwmOG30N4exDwqJyCOVczDNm3xJiDWjnlENW1pFqceMoev3roGKLYTt3zilYc0YUSKoihKqzJuYtoY8zcRWVjn6mcB1xtjssBTIrIWOBa4a7zGtydjJyBGOdN2AmJfrrSN9JjgFLwa0XdcAZsehu55BNHMjBpfrUJHKk4qEfPFtBOdmR6zmEc8OHEbqpqHzUy3QmOcQ/fuZp+pbWzYOdAytcUVRVGU1qQZFtCFIvKgHwOZ5i/bB3g2tM56f5kyAmqWxvMvu/f65fHGyoEE4MdvhBvfBW4BXvNN+OBKOPS1Y7d9ZUwQEWZ0pHi+Z5Cc45bk5lNjLab97e0ezNdRzcMlGZeggUwzERFOPXQOMGErdyiKoigNotFi+ipgf2ApsBH40nA3ICLni8gKEVmxZcuWMR5e67Jh5wBvuOpOdvTlhlw3aNoScbk8lYhRcE1Qa3pUomlwF/zjq5Dr9+4fez68+cdwwV2w9ByIj30baGVsmN6R4pnt3ufWEZWZHmMxXavOtJ1wOJh3WiLiYXnj0fNZPLuTedMaXPFGURRFmVA09JvLGLPJGOMYY1zg23hRDoANwPzQqvP8ZVHbuNoYs9wYs3zWrFnjO+AWYtVzPax4egdPbu0bct3cEGIaYEe/J8pHJKZ3b4JbPgVXHAa3fAKeuNVbvuQMv9lK6wgiJZoZnWmejRDTRWd6bBrmhN3oapnpeBDzaC0xfcje3dzy4ZcEpQQnM1UmlE8XkVtEZI3/e1qtbSiKouypNPSbS0Tmhu6+FrD/mG8C3iwiaRFZBCwG7mnk2FodW4HD/q5FtuBdLo/qYGcF9nbf4R5WzKOQhZs/BFceDnd+FQ44Bd7zNzj4VfVvQ2kJZnSk2NpbeUI11pnpdDwspqs508UOiK0kppUSrgVOL1t2CXCrMWYxcKt/X1EUZdIxbhMQReQnwEnATBFZD3wKOElEluLNSlsHvAfAGPOIiPwUWAUUgPdrJY9ShiOmcwW3aktm6xRu6xuGM717E3TNgXgKtq7xIhwnfABm7F/n6JVWI+y2RjnTYx3zAKqWxgtnklMTsxnKHk+VCeVn4f2PB7gOuB34aONGpSiK0hqMZzWPcyIWf7fG+p8HPj9e45noFByvKkZdYtpxSFfpNmdF9o6hxLQx8MxdXmWOp/4OFz8InbPh327SGMceQFhMhyMd86e3s3zBNI7ad+qYvE66jphHInQ8JdSZnkjMMcZs9G8/D8xp5mAURVGahXZAnCAUXOtMD90FuB5nens1Me26sOaPnoh+9m5onwkv/ggkMt7jKqT3CGZ2RjvTnekEP7/ghDF7nbAzXa2aR7g1d1Kd6QmJMcaISOQ/JxE5HzgfYN99923ouBRFURqBiukJQm44znTBrSpcbCbVTkCsuJy/4yn4yTkwZT6c+UVY+lZIaTWDPY3pHeng9lh1O4yidALi0DEPzUxPKDaJyFxjzEZ/PszmqJWMMVcDVwMsX758aDdAURRlgqFieoJQGE5m2qkupsPOdCoRI+UOwt0/hO1PwBmXeznoc38D+x6npe32YEpjHuMopuNDxzzCArracau0JDcB5wKX+b9/3dzhKIqiNAcV0xOEYmZ6bGIeud3b+WDy13DlhdC/FfY9Hgo5SKRg0YljN3ClJZlRZQLiWFOPMx0uOtMK3Q+VSqpMKL8M+KmIvAt4GnhT80aoKIrSPFRMTxBywyyNV83hS8djvCT2AN/Y+VU6GIB9ToUXfQgWjF1OVml9ZviZ6VQiNq5ucD3VPESEREwouEZjHi1KlQnlAKc0dCCKoigtiIrpCULgTBdGKKa3PQG5XpKJ+TzsLuQWdzm3THkjX3/rueMxXKXF6UwnSMVj4xrxgPqqeYA3CbHgGo15KIqiKBMO/eaaIAy3mkcgYp5bCT87D762HP74X6TiMbYxhYtzF7Cl88DxG7DS0ogI0ztSdIxRp8NqpOLF7dcSyrY8njrTiqIoykRDnekJghXRebe+ah4HFx6DH1wGT9wG6W544QfhuPeR2l0UK+PtSiqtzfSOFK4Z3+IK9WSmoVgeTzPTiqIoykRD1dQEIeiAWKghflwXjEvOcdm/sAaefxhe9mlY/k7ITAEgNdAbrK5ienJz0F5dDBbGt9Fo3WLaF9FJjXkoiqIoEwxVUxOEmqXxCjl46Gfwjyvh+PeTKyzgX3u9krPP/y9ItpWsGq7y0ZnRj38y84U3HIHI+DrBpRMQq0dKbK3palVoFEVRFKVVUTU1Qci7ETGPXB/c932482vQsx7mHAZdc8kVXGKptgohDaXiRp3pyU0jWneX1pmuJzOtMQ9FUSYGCy/5bUNfb91lr2jo6yn1o2pqglCIinnc8DYvE73ghfCqK+GAl4EIOeeW6k1b4iqmlcYRFsd1ZabVmVYURVEmGKqmJgh5x7AX2zj5md9A//9A+3R48X/CSy6BfV9Qsm4275RUUQgTFtnj2axDUcCrGpJOxGrWPodiZlpjHoqiKMpEQ9XURGDrGt644TIuT/+J+BZg3ZlwyKthwfGRq9dqJx4uPdalYlppACkrpmsIZY15KIqiKBMVVVOtjJOHn78THv0NyyXJT5yTefag/8fHDzm96lNc15B3TNVL6mGxohMQlUaQTsTIJWI1JzvaCYhaZ1pRFEWZaKiaajWMgc2PwpxDIJ70JhGe+O/857oX8Ks1eV4dn1Pz6bbteDVnWkRIJWLkCq7GPJSGkIrHaualoXiSp2JaURRFmWjoN1er4Lqw6ib49snwzRfC9ie95a+7Gk75BNtlKlClNF4IK6ZriZe0L1h0AqLSCFKJWM2yeBB2pjXmoSiKokwsVE01m0IOHrwB/vEV2LYGpu8Hr7wCuvcpXc2pr514rlDbmQa/MUYWujTmoTSAVCJGwa193NoqHupMK4qiKBMNVVPNpn8b/PbDMOsgeOO1cPCrIVbp4hVsO/GhnGkrpmuIEvuYxjyURlCXmNbMtKIoijJBUTXVaPq2wT3f8nLRZ/8AuufCe/4Os5ZAjQlauVodEENk63Cm7WMa81AaQSoewxniUItrO3FFURRlgqJqqlHsfBbu+hrcex0UBuCgV0J+wJtgOPugIZ9ecOsT0/XEPOxjHanaOVZFGQvSiThDGNOBI52MaWZaURRFmViomG4Ea26Bn7zZu334m+CFH6xLQIcpxjzqy0ynE9WFcjIeoy0Z125zSkM4/yX7BcdvNbQ0nqIoijJRUTE9XqxfAfl+WPRi2Pc4OO4COPY9MHX+iDaXrzPmkXMcYGhnWmtMK43ipUtmD7lOUBpPYx6KoijKBEMV1VhiDDxxG9xxBaz7O8w/Dt71Ykh3wamfG9Wm83VOQMzWMQExHY9pXlppKeJ+B8SUlsZTFEVRJhjjZgOJyPdEZLOIPBxaNl1EbhGRNf7vaf5yEZGvishaEXlQRJaN17jGjbW3wrdeDD98HWx7Ak77H3jbjWO2eVsab6jL5fVkptNJFdNKa2Gredi24oqiKIoyURhPRXUt8DXg+6FllwC3GmMuE5FL/PsfBc4AFvs/LwCu8n+3NoUsuA6k2r0Sd/kBOOvrXi46kRrTl8r7M7hydU5ArNW05f0vPSBwsBWlFUhoNQ9FURRlgjJuYtoY8zcRWVi2+CzgJP/2dcDteGL6LOD7xhgD/FNEporIXGPMxvEa36gY7IF7r4G7vgHHvRde9CE47PXeT0SN6LGgMIal8Y7bb8bYDUxRxoBEXDsgKoqiKBOTRl/rnxMSyM8Dc/zb+wDPhtZb7y+rLaYffxxOOql02ZveBO97H/T3w5lnVj7nvPO8n61b4Q1vqHz8ggvg7LPh2Wfh7W8vfSyZh9fvBzv+CtldsKMT/v4j+Pivi+t8/OPwspfBypVw8cWV2/+f/4ETToA774RLL618/MorYelS+POf4XPFnPXV67bjuIbLX/shb8FvfgNf+lLF0+P/8QUApt70C/jRNZXb//nPYeZMuPZa76ec3/0O2tvhG9+An/608vHbb/d+f/GLcPPNpY+1tcHvf+/d/uxn4dZbSx+fMQNu9KMvH/sY3HVX6ePz5sEPf+jdvvhibx+GOfBAuPpq7/b558Pq1aWPL13q7T+At70N1q8vffz44+F//9e7/frXw7ZtpY+fcgp84hPe7TPOgIGB0sdf+Ur4yEe82+XHHYzvsQfw7/8Or3qVd9y/5z2Vj4/TsRfwrW/BkiVVjz1+8AOYPx9uuAGuuqry8RrH3vlb+/jlaZd4Wf/JeOwpiqIoE5amXVP1Xeghqs9WIiLni8gKEVmRz+fHYWQ1OOgZeP43sN9L4NRr4YHFsKuzIS9t6/QWhnCm8349ar1crkwkbL8iLY2nKIqiTDTE07TjtHEv5nGzMeYw//7jwEnGmI0iMhe43RizRES+5d/+Sfl6tba/fPlys2LFinEbP5tWwZ1fhZM/DlPmeffjSZi5ePxeswr7X/o7HNeQScZ47LNnVF3vujvX8ambHuHej7+MGZ3pBo5QUUbO525exXfueIrffuBFHLr3lGYPp2GIyL3GmOXNHkejGPf/2faKkb2KMUFYeMlvmz0EZQKw7rJXNHsIk55q/7MbbQPdBJzr3z4X+HVo+b/5VT2OA3Y1NS/9zN3w4zfDVcfDqptg4wPe8jmHNEVIu67BcYfXtKVWZlpRWg3bQKhWSUdFURRFaUXGLTMtIj/Bm2w4U0TWA58CLgN+KiLvAp4G3uSv/jvgTGAt0A+8Y7zGVRPXgR+8Bp76G7RNh5MuhWPfDe3TmzIci41upBIxcgUX1zXEqrRdttU+VEwrE4mEdkBUFEVRJijjWc3jnCoPnRKxrgHeP15jqYlTgKfvgP1O8ipx7H0ULDkTlv0bpDqaMqRybG3ptmScXMEl77qkq1QNqadpi6K0GgntgKgoiqJMUCZv5478IKz8kZeJ3rEOLrgT5hwKL/9Ms0dWgRXT7ak4uwby5B1DtZ4ruYJLKh5DREuMKROHwJmucsVFURRFUVqVySems73wr297NaL7NsM+R8Opn4dZBzd7ZFWx0Y32lOdG5wsuVJlbmC04GvFQJhy2nbjGPBRFUZSJxuQT024B/vYlmH8MvOjDsPBFxbpcLUrBtWLa+7hshjqKXMGt2f1QUVqRfaa1MbU9SXt6fJoeKYqiKMp4MfnEdNtU+MB90Dm72SOpm3BmGmpX9MgVXHWmlQnHq46Yy6mHzCGdUDGtKIqiTCwmp+qaQEIaii3ErWuXL9Rwph0V08rEQ0TIJFVIK4qiKBMPVV0TgHxoAqJ3v3bMQyt5KIqiKIqiNAZVXRMAK54zGvNQFEVRFEVpKVR1tSAPrd/F+h39wf2COwxnWmMeiqIoiqIoDUNVVwty0U/u48o/rwnuW/HcYat51BDT2bzGPBRFURRFURqFqq4WZFtfjl0D+eC+Fc9tqaFjHll1phVFURRFURqGqq4Ww3UNvdkCg3knWFZZGm+oOtNaFUFRFEVRFKURqJhuMXZnCxgD/bmQmHbLOiDWFNOONm1RFEVRFEVpEKq6WoweP94RFtO5gu9M15GZ1gmIiqIoiqIojWPydUBscXoGPTFdEvOocKaHKI2nExAVRWkQIrIO2A04QMEYs7y5I1IURWksKqZbjJ6BAgD9uUKwLMhM19u0RZ1pRVEay0uNMVubPQhFUZRmoGK6xbDO9EAo5lFPabw7124lmYipmFYURVEURWkgKqZbDJuZHsiHxXR505bKmMd//PxBNuwcAFAxrShKIzHAn0TEAN8yxlzd7AEpiqI0EhXTLUbPoBfvyDuGvOOSjMeCzHSmRmm8rb1Z9urO8HzPIDM6Uo0bsKIok50XGWM2iMhs4BYRecwY8zf7oIicD5wPsO+++zZrjIqitDALL/ltQ19v3WWvGNPtqZhuMXpCzVoG8g7JeCzCmS4V0wM5h2zB5dwTFnL6YXsxd0qmcQNWFGVSY4zZ4P/eLCK/BI4F/hZ6/GrgaoDly5dXnz2tKIoyQdE8QIthM9NQzE1b8Vwt5rG9PwfAtPYki2Z2BA62oijKeCIiHSLSZW8DpwIPN3dUiqIojUWd6RbDVvOAopguVLQTL3Wmd/T5YlrjHYqiNJY5wC9FBLzvkx8bY/7Q3CEpiqI0FhXTLcauUMyjP3CmPSc6FY+RiEmlmA6caRXTiqI0DmPMk8CRzR6HoihKM9GYR4tREvPIey51wXWJxwQRKclQW3b0e8+Z3pFs3EAVRVEURVEUFdOtRs9AnqntnigeyHkOdN4xJOMCQCIe4Uz7MY+p6kwriqIoiqI0lKaIaRFZJyIPichKEVnhL5suIreIyBr/97RmjK3Z7B4ssFe3V43DdkHMOy7JmPdRpeKxqjGPqW3qTCuKoiiKojSSZjrTLzXGLDXGLPfvXwLcaoxZDNzq35909AzkmeOLadu4peAYEr4znYzHyBfKYh59ObozCRJxvdCgKIqiKIrSSFpJfZ0FXOffvg54TfOG0hwc17A7W3Smg2oerte8BarEPPrzTNdKHoqiKIqiKA2nWdU8otrPzjHGbPQffx6v5NKkotfvfjinOw0Uq3nkCiYQ06l4jLxbPgExp3lpRVEURdmDmehdAvdkmiWmK9rPhh80xhhfaFewJ7emtZU85kwpi3m4blnMozIzPasz3cCRKoqiKIqiKNAkMV2l/ewmEZlrjNkoInOBzVWeu8e2prU1pmd0pInHJNS0xZCI+WI6EVXNI8+Bc7oaO1ilZcjn86xfv57BwcFmD0WpQiaTYd68eSSTOklYURRlT6PhYtpvORszxuwOtZ/9DHATcC5wmf/7140eW7OxzvSUtiRtyXgx5uGEMtOx6JiHNmyZvKxfv56uri4WLlyI34lOaSGMMWzbto3169ezaNGiZg9HURRFGWOa4UxHtp8VkX8BPxWRdwFPA29qwtiaim0l3t2WoC0VD1XzcEsz06GYx2DeoT/n6ATESczg4KAK6RZGRJgxYwZbtmxp9lAURVGUcaDhYrpa+1ljzDbglEaPp5WwznR3xnOmB3K2A2KoNF5CyOaLYnqn3/3QNnpRJicqpFsb/XwURVH2XFqpNN6kp8fPTHe3JWkPOdPhpi2JWGnTlu1+98PpGvNQmsjnP/95Dj30UI444giWLl3K3Xff3ewhjYhPf/rT7LPPPixdupRDDjmEn/zkJ80ekqIoitLiNKuahxJBz2ABEehKezEPm5nOO4ZM0hPTyXiMvFPMTO/s11biSnO56667uPnmm7nvvvtIp9Ns3bqVXC43qm0WCgUSifH/9+Q4DvF4vGTZhz70IT7ykY+wZs0ajj76aN7whjfoxEFFURSlKupMtxA9A3k60wliMfFjHsXMdMK2Ey+r5rHdF9OamVaaxcaNG5k5cybptFeecebMmey9994A/Otf/+KEE07gyCOP5Nhjj2X37t0MDg7yjne8g8MPP5yjjjqKv/zlLwBce+21vPrVr+bkk0/mlFNOoa+vj3e+850ce+yxHHXUUfz615Vzkm+//XZe/OIX84pXvIIlS5bw3ve+F9f1/j7+9Kc/cfzxx7Ns2TLe+MY30tvbC8DChQv56Ec/yrJly/jZz35W9X0tXryY9vZ2duzYwe23384rX/nK4LELL7yQa6+9Ntjepz71KZYtW8bhhx/OY489VmWLiqIoyp6IOtMtRM9gnu6M54C1p+JBqby8Y0iG60yHxPQOPzM9TTPTCvDfv3mEVc/1jOk2D9m7m0+96tCqj5966ql85jOf4cADD+RlL3sZZ599Ni95yUvI5XKcffbZ3HDDDRxzzDH09PTQ1tbGV77yFUSEhx56iMcee4xTTz2V1atXA3Dffffx4IMPMn36dC699FJOPvlkvve977Fz506OPfZYXvayl9HR0VHy+vfccw+rVq1iwYIFnH766fziF7/gpJNO4nOf+xx//vOf6ejo4PLLL+fLX/4yn/zkJwGYMWMG9913X833fd9997F48WJmz57NqlWraq47c+ZM7rvvPr7xjW/wxS9+ke985zv17FpFURRlD0DFdAvRM5Cnu80TxZmwM+2WlcYLxTx29GnMQ2kunZ2d3Hvvvfz973/nL3/5C2effTaXXXYZRx99NHPnzuWYY44BoLu7G4A77riDiy66CICDDjqIBQsWBGL65S9/OdOnTwc8Z/mmm27ii1/8IuBVLXnmmWc4+OCDS17/2GOPZb/99gPgnHPO4Y477iCTybBq1Spe+MIXApDL5Tj++OOD55x99tlV388VV1zBNddcw+rVq/nNb35T1z543eteB8DRRx/NL37xi7qeoyiK0so0uuPiREbFdItgjOHB9bs4ZpEnJEonIBoS8eiYx47+HJ3pBKmEJnYUajrI40k8Huekk07ipJNO4vDDD+e6667j6KOPHvZ2wq6zMYYbb7yRJUuW1HxOeaUMEcEYw8tf/vKqEwjL3e0wNjN900038a53vYsnnniCRCIRxEeAigY5NuISj8cpFAo1x6soiqLsWagCaxEee343m3dnecmBswBoTyVCExBdkrEqMY++HNM6NOKhNI/HH3+cNWvWBPdXrlzJggULWLJkCRs3buRf//oXALt376ZQKHDiiSfyox/9CIDVq1fzzDPPRArm0047jf/7v//DGO9KzP333x/5+vfccw9PPfUUrutyww038KIXvYjjjjuOf/zjH6xduxaAvr6+wP2ul1e/+tUsX76c6667jgULFrBq1Sqy2Sw7d+7k1ltvHda2FEVRlD0XdaZbhL+u9ho6WDFdEvNwQnWmy6p5bOvLaVk8pan09vZy0UUXsXPnThKJBAcccABXX301qVSKG264gYsuuoiBgQHa2tr485//zPve9z4uuOACDj/8cBKJBNdee23g7Ib5xCc+wcUXX8wRRxyB67osWrSIm2++uWK9Y445hgsvvJC1a9fy0pe+lNe+9rXEYjGuvfZazjnnHLLZLACf+9znOPDAA4f13j75yU/ylre8hXe/+9286U1v4rDDDmPRokUcddRRI9tZiqIoyh6HiukW4a+Pb+GgvbqY050BvJhHznEpOK7nTNvMdLw05vHklj6WL5zWlDErCng54TvvvDPysWOOOYZ//vOfFcuvueaaimXnnXce5513XnC/ra2Nb33rW0O+fnd3d6TIPvnkkwNXPMy6deuqbuvTn/50yf2jjz6axx9/HIAvfOELfOELX6i5veXLl3P77bcPOWZFURRlz0FjHi1Ab7bAiqe385Ils4JlbUmv9u1A3ikR06lQzKM3W2DDzgEOnNPV+EEriqIoiqIo6ky3Aneu3UreMZx04OxgWVvKF9M5x2snHspMuwYc17B2s1c394DZnY0ftKK0AHbSo6IoiqI0C3WmW4C/rdlC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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "state_dim = env.observation_space.shape[0]\n", "action_dim = env.action_space.n\n", "hidden_dim = 100\n", "lr = 0.001\n", "n_episode = 150\n", "epsilon = 0.3\n", "eps_decay = 0.99\n", "replay_size = 30\n", "\n", "model = DQN(state_dim=state_dim, action_dim=action_dim, hidden_dim=hidden_dim, lr=lr)\n", "q_learning(env, model, n_episode=n_episode, epsilon=epsilon, eps_decay=eps_decay, replay=True, replay_size=replay_size)\n", "env.close()" ] }, { "cell_type": "code", "execution_count": null, "id": "fb2ced27-ec1c-4cd6-a185-d7ccc4b65746", "metadata": { "canvas": { "comments": [], "componentType": "CodeCell", "copiedOriginId": null, "diskcache": false, "headerColor": "inherit", "id": "e6ceba50-0e51-480c-b8d9-b14811f8f669", "isComponent": false, "name": "", "parents": [] } }, "outputs": [], "source": [] } ], "metadata": { "canvas": { "colorPalette": [ "inherit", "inherit", "inherit", "inherit", "inherit", "inherit", "inherit", "inherit", "inherit", "inherit" ], "parameters": [], "version": "1.0" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.10" } }, "nbformat": 4, "nbformat_minor": 5 }