{ "cells": [ { "cell_type": "markdown", "id": "deb79d20", "metadata": {}, "source": [ "# Hyperspectral Tutorial\n", "\n", "Example analysis of a hyperspectral image. This includes white reference and dark reference normalization but please note that that sample image (corn kernel)in this case has already been normalized to the white and dark references before the original image was cropped. We are just showing these steps for the sake of the tutorial. " ] }, { "cell_type": "code", "execution_count": null, "id": "309a8dd1-57c4-4f5d-b28e-cc91effe7cb7", "metadata": {}, "outputs": [], "source": [ "import os\n", "\n", "# Detect notebook environment\n", "def detect_notebook_environment():\n", " if 'COLAB_GPU' in os.environ:\n", " print('Google Colaboratory detected.')\n", " %pip install \"altair>=5\" ipympl plantcv\n", " \n", " # Give access and mount your Google Drive (need a Google Account)\n", " from google.colab import drive\n", " drive.mount('/content/gdrive')\n", " \n", " # Enable widget feature with matplotlib\n", " from google.colab import output\n", " output.enable_custom_widget_manager()\n", " \n", " #View working directory, may need to change\n", " %pwd\n", " else:\n", " print('Binder detected.')\n", "\n", "environment = detect_notebook_environment()" ] }, { "cell_type": "code", "execution_count": 1, "id": "e1712db7", "metadata": {}, "outputs": [], "source": [ "%matplotlib widget\n", "from plantcv import plantcv as pcv\n", "from plantcv.parallel import WorkflowInputs\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "id": "1e7e9b03", "metadata": {}, "outputs": [], "source": [ "# Input/output options\n", "args = WorkflowInputs(\n", " images=[\"./img/4-22-22_right_same_B73_top_00.raw\"],\n", " names=\"image1\",\n", " result=\"hyperspectral_result\",\n", " outdir=\".\",\n", " writeimg=True,\n", " debug=\"plot\"\n", " )" ] }, { "cell_type": "code", "execution_count": 3, "id": "223254b4", "metadata": {}, "outputs": [], "source": [ "# Set debug to the global parameter \n", "pcv.params.debug = args.debug\n", "# Change display settings\n", "pcv.params.dpi = 100\n", "pcv.params.text_size = 20\n", "pcv.params.text_thickness = 20" ] }, { "cell_type": "code", "execution_count": 4, "id": "964f1012", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "237b1288f6f94080a1d81680c126b3a9", "version_major": 2, "version_minor": 0 }, "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5i0lEQVR4nO3de4xd1Xn//8/e5zb3scf23GLjOsGkTQxIxSnYTYIhwYrboiROI5JUkVHbKBdAsZworYOiuFWLEVURqVxo01YU1FL4oyGNBCG4CjaNqCvjwhcL8kNEMWQSPAy+zO3MzLnt9fuDesqAgedpZjzMWe+XdCR85pnF2nvtveeZfc6cTxJCCAIAAEA00sWeAAAAAM4tGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiEx+sSewlGVZphdffFGdnZ1KkmSxpwMAAAxCCJqYmNDg4KDSNM57YTSAv4QXX3xRa9asWexpAACA/4OhoSGtXr16saexKKJvAG+//Xb9xV/8hY4fP673vve9uu222/SBD3zA9L2dnZ2SpBUDv2L/DSLMmOdWT9rMta/I2StzwTVyKvtcarlJ19j5mbq5tp52usZWWrHX5sZdQ4dywVxbb9RcYzdkHzsLvrVMZqadc7HLy358S1KjvWgvnvbNuz3YL2/Fgv0YlKSe1H6utaa+y2xbt33skpa5xi61HTfXpi29rrELoeSqz8KoubaRW+YaW/kxc+lM1Tf0lKbstcG+lpI0NmG/vp2annCNPVO2Xwsz+c61xLEPcwXfcZWfsR9XScl+/Qkh08T4ydmf4zGKugG87777tHPnTt1+++36zd/8Tf3t3/6ttm3bpmeeeUbnnXfeW37/mZd90zR1NID2W81J4rt4JI4GME29DaBnbN+80zQz1ybOsT31wfsygKM+cay7JCWOt+cmmbMBTLxz8dT63gqRpI5659ssPHNJnWPnHPP21EpSPmdfn7zzbdyFnGOf5J1jZ75zM3OcE2neN7Ycc6/bLz+vDB0ca++olaTUsfauc8dZ731Dk+f0cV9/HPXesV/5nnjfvhXnC9//49Zbb9Uf/MEf6A//8A/1a7/2a7rtttu0Zs0a3XHHHYs9NQAAgAUTbQNYrVZ15MgRbd26dc7zW7du1WOPPXbW76lUKhofH5/zAAAAWGqibQBPnDihRqOhvr6+Oc/39fVpeHj4rN+zd+9edXd3zz74AxAAALAURdsAnvHa1/9DCG/4noDdu3drbGxs9jE0NHQupggAADCvov0jkJUrVyqXy73ubt/IyMjr7gqeUSqVVCr5/tINAADg7SbaO4DFYlGXXHKJ9u/fP+f5/fv3a/PmzYs0KwAAgIUX7R1ASdq1a5c++9nPauPGjdq0aZO+/e1v62c/+5m+8IUvLPbUAAAAFkzUDeA111yjkydP6k//9E91/PhxbdiwQQ8++KDWrl272FMDAABYMEkIzhgBzBofH1d3d7dWvXOD/cOPy/bd3Wi1f5q9JCVVR2ZDi+/Tz3NVx7wbjnQHSWli/0T7Rovvd5ZQtX+AbMMTeSEprZ0019ZK3a6xG1OOj9YPvpQRNXyf8l/L7HMvtNlTEiSpNHHKXNvtPGa725eba1fkffPuKNjXp624zDV2W4d9PTvafWMX8qP24uTs74V+I7kOXwqMMvsnMIdCu2/oYD+uppIW19jVun19xquOJCJJI1P2a+epKfs2StLJEfs7viam7Nc2SaqND5hrC6UTrrFD1b4+hbz9PfohZBodO6mxsTF1dXW55tQson0PIAAAQKxoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACITdRbwfEmqNSWpLdYoJKPmcfO5Nt9E6vboq2zCFzM3Y9w+SSp6D6uivT5M+6KVsjBuHzt0uMauZo5osoYvJit1/G7WyPv2d9Lw1Xfm7FF9HaO+7VzR2Wqu7WmxxzxJUneXPd5tWYf93JGkzjb7XNqLZdfY7V32tc+3+pI8S7nzzbWFDt+8JV+cVr5kj/jKWn1zqU2utNcmvhjAicwe1zZe9V1Tuqqj5tpfnOhxjV0o2uPdwi96XWOX8/ZoxPrUCtfYxXTUXJsW7PPOskySL/Ku2XAHEAAAIDI0gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDI0gAAAAJGhAQQAAIgMWcDzIKQ1hbRhqs05ojsbSeKaR7bcnsNanPLlqmaO/EslNdfYScW27yRJqe+QzfKOfOSKPe/4lW+w55NmU45tlJRm9rnkcznX2N2h7qpf0Wqfy/IeX85nX5t9PTvbfL+vdnXa593e4cvd7m5xjN22xjV2S2vBXNtqj1J+pb693VybttlrJSlx5hIXgn09s4JvH1YLo+baWtl3TRlPXzbXTkz7FmjEkWGcpM+6xs4ly8y1jYY9/1uSRk/af1aNyffzoVGxZ0ynBUe2b+Y7XpsRdwABAAAiQwMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDI0gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGaLg5kGSpEoSWxxXvWSPkMo1+l3zKEyMmGtr6Zhr7DS1x+aEWo9r7EbNHg3UcEbBNXKO33GCL1Kt4JhKreGLgmtvs++TVb5kNy3v9cVTreywH4fLS/aYLEnqaVlmr+31RUi1F+3b2bnCFwPYXrBH3rU74u4kqaXdHktXbPOtZdERM9dSmHSNnbb44iVznqjLVl8sXc0RpTjuuLZJUtf0KnPtaGXcNXZh0h65mWqZa+x6i/3cDL4UUtWr9mtntWSPLJWk6inPtdM+ce82NiPuAAIAAESGBhAAACAyNIAAAACRoQEEAACIDA0gAABAZGgAAQAAIkMDCAAAEBkaQAAAgMjQAAIAAESGBhAAACAyNIAAAACRIQt4HqT5ilJr5uxkt3ncUJhyzaNaPG6uTRp9rrElez5pKPkyRGda7GG2ufJK19iaduRf5n15vakjT3lVsOeHSlJP3p4J2u+LXtaKoj3HVpJ6VlXNtau6zneN3bXcntm6rNOXe9tW7DDXdnf5jtm2dvvYpZLvmM0X7ed9a6nFNXbOPm2V8u9yjV1o8+Xe5ov2XOKs4MvpbqT23OjuaV8o7Fih01zbMuFcn3F7LnGW9x2z1WP262xt5bRr7Kma/TzOhn1tx2hrxVxb9RyCjrzoZsUdQAAAgMhE2wDu2bNHSZLMefT39y/2tAAAABZc1C8Bv/e979W///u/z/47l/O9zAAAALAURd0A5vN57voBAIDoRPsSsCQ999xzGhwc1Lp16/SpT31KP/3pT9+0vlKpaHx8fM4DAABgqYm2Abz00kt199136wc/+IH+7u/+TsPDw9q8ebNOnjz5ht+zd+9edXd3zz7WrFlzDmcMAAAwP6JtALdt26ZPfOITuvDCC/XhD39YDzzwgCTprrvuesPv2b17t8bGxmYfQ0ND52q6AAAA8ybq9wC+Wnt7uy688EI999xzb1hTKpVUKpXO4awAAADmX7R3AF+rUqnoxz/+sQYGBhZ7KgAAAAsq2gbwq1/9qg4ePKhjx47pv/7rv/S7v/u7Gh8f144dOxZ7agAAAAsq2peAf/7zn+vTn/60Tpw4oVWrVumyyy7ToUOHtHbtWvdYWaUgpbZeOiueMo+b5nzLk6vZ7142SvYYple+wR7HI/kidvJ1e1xSI+f7y+ukaP9sx0Lw/T7UUbNnsA0WfGP3ddmj4Fas9EWkDSxf5qpf0WM/Dpct8619pyNSrb3FHsElSZ1t9qi+1rbVrrELBUd8YZvn3JFa2hwxc6kvaizN2edSKPk+FzVt9UUMFkr24ypNfcfVdN5en+vwbWcyWTbX5le2u8ZWccJcWnWu/UzZfr2aaYy6xm5M2CM36840z4pjebJp+zGVEQUXbwN47733LvYUAAAAFkW0LwEDAADEigYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMtFGwc2rQtWcBVyqLTMPW2/zLU9lpmEvrvkydQvptLk2FGqusUOy3FybBtfQKiT2fbIi+DJB+zrsma2Dy+37T5J6e+25t309vvzqvmX2eUtS90p7fmx3+zLX2O2OzOOW4Fv84vI2c20h8R2zaa5kri3lfZmtiezzzhV9805y9nOtVPTdH0gdGcaSVEhn7MUd9v0tSaFq3+e1xJ6/K0mt3fbjMEw5rsmSyjn7ena3Jq6xp1bYx56p+PKrp2bs+7unpeobO7NvZzZlv4ZnjUT6uWsqTYc7gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDI0gAAAAJGhAQQAAIgMUXDzIKvlzVFw9WCP2GmM+aKvSqk9dqiRb3WNnQV7faaXXWN7DsJcoewae1XeHiPU0/BFdq1eYY8dGljli2vrH3yHubav2xeT1dPd7qrvGlhmri202mslqaOYmWtzJV88ValojxrL5wqusdWw1xdT+zZKUtpiP2aLzmM2abXHgaXOHw/5xLc+IbGPn6/XXWMXHKdEmvfdB8mm7fu8tX3KNXZXw35NqdbscZGSVO6wR7CV2065xl7Rbv/ZU2v4rj+nO+3zfvmE/RjMnOdlM+IOIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZsoDnQTFfUJraMhyradE8br7uy5GsB3t+bJof9Y1dteeqFvLLXWOXpu3buaJjmWvsVaVpc+3qZStcY/f2d5lrB1f59knvspXm2uU9zmzfHvvYktTWZs/5LC735Vfn6qftxUX7/n5l7IUqlvI5e2Zrku92jZ1l9mM2V/LNW1pmL83Zc4MlKTSc+zB1/PhJ2nxjNxyZx45cZ0mqJSfNtZmc50PRHmJcLNmPQUkq5u3r09HlO2aXTduvEZPOfdIxZl/7zg57vm+jThYwdwABAAAiQwMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDI0gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGaLg5kEWZqRg66XT6irzuI3EHgskSUneHqvVqNoj6SQp126P4VqpU66xu3vPM9cOtPt+Z+lrtY/dt7rfNXbvQId97E7fWvastMe1tZfs85Ck9uW+fZgv2GOekhZfvFIx67GPnZ1wjV3ocMS15XzxeEmtbK7N5e3RbpKUr9ijyZLUvjaSpPZxc2na8MWBpYkvOi5VYq4N9Ypr7JCrmmuToi9SLV+z/9isVXxjp7IfK4XEfgxKUmup01zbXvBdw9vTFnNtR8G3lu2r7Ne3dNq+/0LNfvw1K+4AAgAARKZpG8BHH31UV199tQYHB5Ukib773e/O+XoIQXv27NHg4KBaW1u1ZcsWPf3004szWQAAgHOoaRvAcrmsiy++WPv27Tvr12+55Rbdeuut2rdvnw4fPqz+/n5dddVVmpiYOMczBQAAOLea9j2A27Zt07Zt2876tRCCbrvtNt14443avn27JOmuu+5SX1+f7rnnHn3+858/l1MFAAA4p5r2DuCbOXbsmIaHh7V169bZ50qlki6//HI99thjizgzAACAhde0dwDfzPDwsCSpr69vzvN9fX164YUX3vD7KpWKKpX//Qum8XH7X9QBAAC8XUR5B/CMJJn7Z+AhhNc992p79+5Vd3f37GPNmjULPUUAAIB5F2UD2N//yue9nbkTeMbIyMjr7gq+2u7duzU2Njb7GBoaWtB5AgAALIQoG8B169apv79f+/fvn32uWq3q4MGD2rx58xt+X6lUUldX15wHAADAUtO07wGcnJzUT37yk9l/Hzt2TE8++aR6enp03nnnaefOnbrpppu0fv16rV+/XjfddJPa2tr0mc98ZhFnDQAAsPCatgF8/PHHdcUVV8z+e9euXZKkHTt26B//8R/1ta99TdPT0/rSl76k06dP69JLL9XDDz+szk57XA4AAMBSlIQQwmJPYqkaHx9Xd3e3Vr3zfKWpMfOxYf+g6bTge4k5mbG/ol9q92UB9+TtuYl93e2usfvTVnNt72rfH96s7LFn0/auepdr7FW99n3Y0+X7XSu/0r5POorLfWP74kmVb58013qvJrnKlLk2rfuyO9OWk/Z5zNi3UZLSYpu5tkW+7NNa3v5LaL5oP04kKavb93cx9R2zIfVlARcL9oMlafgOrNDpyKQO9n0iSdWcfS61xPcuq8kJ+3F4quw7Zk9P/txc+/Kwb3+/PGrPoX/pRV+G8XNlexbwMz+x/3xt1DL9v+8/r7GxsWjfzhXlewABAABiRgMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDI0gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGRpAAACAyPjCHnFWSVimJNh2ZQj2jMqkUXfNo3W5PeS1J/Plk65ue4e5ds3gea6x+1bYs09X9Ppyhnu7us21q/p8uartjnm3tvqylwtt9qzZXMl3GhcTX/ZpSOxZw0nmGzvx5BKXR11j5x2Xt1yL73fhXGgx1zbafFnNuXrVXJvMuIZWrs0+dlrxZS83ZN8nklSZmTbXtrQ5sn0leS6dIbPPQ5IaiT0nN5txng9F+8QLU76xczVPxrQvZzgnewZv5swib6T2n1WhZL9uhrThm0gT4g4gAABAZGgAAQAAIkMDCAAAEBkaQAAAgMjQAAIAAESGBhAAACAyNIAAAACRoQEEAACIDA0gAABAZGgAAQAAIkMU3DzIZU8plTE2KZxvHjd0+KLgSo2CufZXejpcY7+zd5W59h3re1xjr+iyx8yt6PWNvbzXXtvV6Ru71GnfJ6kzs6vQYo8/yssXj5elvlg65e0xT2HcFzGoxB7HFEq+aLIk2LczdcaYNYzRj5JUqvuixuSIi8wKZd/YFfu8q7LHxklSUi+56lPZI9WqFV/sWT3Y88Zymf26KUlZdcxcW5XvGl49bd8noeo8rur2fZLPnBmD1S5zaVb3HbNZqNmLK46xa754wWbEHUAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMmQBz4Nk/F1KUlvOYrLSnpVazPsyW1eW+sy1gyVffuza/hXm2t5fucA19qply8y1HV3LXWN3rmwz17a3+jJBc+327OBcwZ6nK0lpyZ5TmVR9OalZ3fd7X1a155nWOrpdY+cn7LmqKrS6xk4dWalZw5cFnObtucRZ3Zc5mrbY1ydx5H9LUlK0nw+N2qhr7MbMaVd92tpprk1mfNm0jbJ9v9QT37lZz9nXJ8z48pRDZj9WQua8f5PZrxONGftxIkn1hn3tq84s4JmpZfbauj03uFH3ZYs3I+4AAgAARIYGEAAAIDI0gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDJEwc2DpDevJGeLgstkjyjKB1+MUEvrqLm2r7TaNfZg37vsY/f7ouDal5fMtR2dq1xjF9vscT+FTt/p0FIM5tos9UXY5WqnzLVJsdc1djU57qoPqT02MDfti1cKxUl77Yx9f0tSTfYIu5x8cW353Mvm2qzFFzNXn7L/Xp7L+SK70pp9HzYavvMh51se1Wbsx3ia+O5V1MNL5trgjFKsFeyxZ426L6qvNm2fy5QzyqzRsNfONHzxeNUZe2zpVOK7Fk5P2+NTGxOO47vuPGCbEHcAAQAAItO0DeCjjz6qq6++WoODg0qSRN/97nfnfP3aa69VkiRzHpdddtniTBYAAOAcatoGsFwu6+KLL9a+ffvesOYjH/mIjh8/Pvt48MEHz+EMAQAAFkfTvgdw27Zt2rZt25vWlEol9ff3n6MZAQAAvD007R1AiwMHDqi3t1cXXHCBPve5z2lkZORN6yuVisbHx+c8AAAAlppoG8Bt27bpn//5n/XDH/5Qf/mXf6nDhw/ryiuvVKXyxn9xtHfvXnV3d88+1qxZcw5nDAAAMD+a9iXgt3LNNdfM/veGDRu0ceNGrV27Vg888IC2b99+1u/ZvXu3du3aNfvv8fFxmkAAALDkRNsAvtbAwIDWrl2r55577g1rSqWSSiX7Z9YBAAC8HUX7EvBrnTx5UkNDQxoYGFjsqQAAACyopr0DODk5qZ/85Cez/z527JiefPJJ9fT0qKenR3v27NEnPvEJDQwM6Pnnn9fXv/51rVy5Uh//+McXcdYAAAALr2kbwMcff1xXXHHF7L/PvHdvx44duuOOO3T06FHdfffdGh0d1cDAgK644grdd9996uzsXKwpAwAAnBNN2wBu2bJFIbxx1t8PfvCD+fufJblXHhZ1+y7PF2Zc0+jO9Zhr+zrsOamS1Luqz1y7bHWHa+y2Lns2ZK7DnjkpSYXEnpeZz/neEZHkaubaUurLncwKjgzRxJdlmi/Ys30lKavY90tolH1jZ/b1zKf2TFBJyk/b36+bNKZdY2cN+/o0yr5M71xupbm2ltlzaSVJM45A2JwvxzYr+bYzc4TTVsu+bFpPfnWt6tgnkrLpLnNtteZbn2nH+tSzX7jGrtTsudHV076c4Ylp+3k/8bLvODk9aj+PG1P2sbOGL/+7GfEeQAAAgMjQAAIAAESGBhAAACAyNIAAAACRoQEEAACIDA0gAABAZGgAAQAAIkMDCAAAEBkaQAAAgMjQAAIAAESmaaPgzqVGmFYItii4Yps9a7ilaI9Ik6T+LnvUz8oOe2ycJHUN2iO72joGXGOXuu2RU2nJF6lWTOzzToIvDiwnY/yfpHyLL9YvqS0z19ZbR3xjj/kikGqy7/M0+CIG1bDHuzWC73KVZuP24uA717JszD6Pgv04kaR63R4HluRbXGN7IgYbdV8cWFb1RRLKEdNYDb5jtl6zR8eFim/eM5l97EbNF19YnbLPpTzju4aX66fMtaenfOfayUn7dp6Y8a3lZMV+zE6P28+1rOE7vpsRdwABAAAiQwMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDI0gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGRpAAACAyJAFPA9KtYLSzJZB2Nluzx88r+DLehxs7zXXtgysdY2dW2XP9w1tvrzetM1+GObTkmts5ez5vknN9/tQktXs08h1u8bOcpPm2jSz50tLUqXDngkqSTptz/dNS77M48a4fT2TvG/srNJqL059GcZpwX4eN4I9y1SSlLPXJ1Xf0JkjezlLfDnD1WDPMJak/KQ9t7VW8F1TKuWyuTbUfFnN1bo9c7066cvpnq7a136sdto19il7fLVOVR052pJGXrafP6emfefx9Kh9LklYZa+VL5O4GXEHEAAAIDI0gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDI0gAAAAJEhCm4e5FuqyuVscULdiT3ebVXeF3/U1WOPbsov63CNrXyXuTRXL/rGrthjtUK7b+hGap9LIl8kVC6ZMtdmme93rdQReZcFX4xZ5oyOq9Xtx2G9etI1dq7oiCab8cUApl0rzbVhxhcLVTdGP0pSYj+8Xxk72KOyGlVfFlya2seuVe1Rh5KUNewRaZJUzezZZDOTvmthPbNHgtWrL7jGrmb2fVi2H97/U2//hlNTvn0yPGE/xl+yJ+lJkk7X7LGLYy/6Bq+P23+uVU/boz+zjCg47gACAABEhgYQAAAgMjSAAAAAkaEBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkSELeB6koV1psGWDdsie27oq6XbNY9nyAXNtUrRnN0pSrWHPHG3UfL9X1HMNc21a8+WNhmTUXNuQPeNTkqrTBXNtqeTL7cwSe31w/h6X1XxzSRz5sUniW59aiyNTN0y4xm5M2Y+revAF9mZV+/kTwqRr7HxqzyjN6r5L+Iznku/Msa3VTrvqs4Z9O2fqvrzrWnnUXuvIupaksuMyMek4TiRpdPQlc+3wad/any7br+HHPRsp6fgpe/3YpC/Tuz5hv0ak7Y7zOEsk3yHbdLgDCAAAEJmmbQD37t2r973vfers7FRvb68+9rGP6dlnn51TE0LQnj17NDg4qNbWVm3ZskVPP/30Is0YAADg3GjaBvDgwYO67rrrdOjQIe3fv1/1el1bt25VuVyerbnlllt06623at++fTp8+LD6+/t11VVXaWLC91ITAADAUtK07wF86KGH5vz7zjvvVG9vr44cOaIPfvCDCiHotttu04033qjt27dLku666y719fXpnnvu0ec///nFmDYAAMCCa9o7gK81NjYmSerp6ZEkHTt2TMPDw9q6detsTalU0uWXX67HHnvsrGNUKhWNj4/PeQAAACw1UTSAIQTt2rVL73//+7VhwwZJ0vDwsCSpr69vTm1fX9/s115r79696u7unn2sWbNmYScOAACwAKJoAK+//no99dRT+pd/+ZfXfS1J5v7ZeAjhdc+dsXv3bo2Njc0+hoaGFmS+AAAAC6lp3wN4xg033KDvfe97evTRR7V69erZ5/v7+yW9cidwYOB/Pz9vZGTkdXcFzyiVSiqVfJ9hBAAA8HbTtHcAQwi6/vrr9Z3vfEc//OEPtW7dujlfX7dunfr7+7V///7Z56rVqg4ePKjNmzef6+kCAACcM017B/C6667TPffco3/7t39TZ2fn7Pv6uru71draqiRJtHPnTt10001av3691q9fr5tuukltbW36zGc+s8izBwAAWDhN2wDecccdkqQtW7bMef7OO+/UtddeK0n62te+punpaX3pS1/S6dOndemll+rhhx9WZ2en6/8V2koKOduubCnYb7p2F33xR6VO+8vTaZcv+qqSazHXTtWmXWMXKsvsxS2+WK16zvGSfSi/dc2rZfb4o0bDFzcV6vbjpJo6I9IcUWOSLzouS52xdKP2uLZGvegaO5X9PM7CL1xj1x1xh7nUfu5IUiXYx06qI66xM0cUZbXmGlpV32GlbNqeNVep+Na+ktrrJ8u+a+FE2X7MTkz5roWnx+3Hyqlx3wL9YmLKXDvi/CjcseP2fVgt+z49ozruiAotrjXXhsx5wDahpm0AQ3jrH1pJkmjPnj3as2fPwk8IAADgbaJp3wMIAACAs6MBBAAAiAwNIAAAQGRoAAEAACJDAwgAABAZGkAAAIDI0AACAABEhgYQAAAgMjSAAAAAkaEBBAAAiEzTRsGdS7lQUy7YcgVb893mcVvzba55tHYMmmsL3b2usZXa8xjrqT3jU5JqM1VzbT7n+50lqdgzKhvBkRssaUr2nM/Wes41ds0QZXhGPVdwjV2d8OWqNhL7Ps8qL7nGzhz7JdR92adTdXu2c+LIDZYkNcbMpdWa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Gg0NDamryx7uvZTEsI0S29lMYthGie1sJjFso7Q42xlC0MTEhAYHB5WmUf05xKymfQn4XEjT9E1/cziTQ9zMYthGie1sJjFso8R2NpMYtlE699vZ3d19zv5fb0dxtr0AAAARowEEAACIDA3gAiiVSvrmN7/Z1B8aHcM2SmxnM4lhGyW2s5nEsI1SPNv5dsMfgQAAAESGO4AAAACRoQEEAACIDA0gAABAZGgAAQAAIkMDOM9uv/12rVu3Ti0tLbrkkkv0H//xH4s9pXm1Z88eJUky59Hf37/Y0/qlPfroo7r66qs1ODioJEn03e9+d87XQwjas2ePBgcH1draqi1btujpp59enMn+H73VNl577bWvW9vLLrtscSb7S9i7d6/e9773qbOzU729vfrYxz6mZ599dk7NUl9PyzY2w3recccduuiii2Y/IHjTpk36/ve/P/v1pb6OZ7zVdjbDWr7W3r17lSSJdu7cOftcs6znUkEDOI/uu+8+7dy5UzfeeKOeeOIJfeADH9C2bdv0s5/9bLGnNq/e+9736vjx47OPo0ePLvaUfmnlclkXX3yx9u3bd9av33LLLbr11lu1b98+HT58WP39/brqqqs0MTFxjmf6f/dW2yhJH/nIR+as7YMPPngOZzg/Dh48qOuuu06HDh3S/v37Va/XtXXrVpXL5dmapb6elm2Ulv56rl69WjfffLMef/xxPf7447ryyiv10Y9+dLYpWOrreMZbbae09Nfy1Q4fPqxvf/vbuuiii+Y83yzruWQEzJvf+I3fCF/4whfmPPerv/qr4Y//+I8XaUbz75vf/Ga4+OKLF3saC0pSuP/++2f/nWVZ6O/vDzfffPPsczMzM6G7uzv8zd/8zSLM8Jf32m0MIYQdO3aEj370o4syn4U0MjISJIWDBw+GEJpzPV+7jSE073ouX748/P3f/31TruOrndnOEJprLScmJsL69evD/v37w+WXXx6+/OUvhxCa87x8u+MO4DypVqs6cuSItm7dOuf5rVu36rHHHlukWS2M5557ToODg1q3bp0+9alP6ac//eliT2lBHTt2TMPDw3PWtlQq6fLLL2+6tT1w4IB6e3t1wQUX6HOf+5xGRkYWe0q/tLGxMUlST0+PpOZcz9du4xnNtJ6NRkP33nuvyuWyNm3a1JTrKL1+O89olrW87rrr9Nu//dv68Ic/POf5Zl3Pt7P8Yk+gWZw4cUKNRkN9fX1znu/r69Pw8PAizWr+XXrppbr77rt1wQUX6KWXXtKf/dmfafPmzXr66ae1YsWKxZ7egjizfmdb2xdeeGExprQgtm3bpk9+8pNau3atjh07pm984xu68sordeTIkSX7Cf0hBO3atUvvf//7tWHDBknNt55n20apedbz6NGj2rRpk2ZmZtTR0aH7779f73nPe2abgmZZxzfaTql51vLee+/Vf//3f+vw4cOv+1qznZdLAQ3gPEuSZM6/Qwive24p27Zt2+x/X3jhhdq0aZPe9a536a677tKuXbsWcWYLr9nX9pprrpn97w0bNmjjxo1au3atHnjgAW3fvn0RZ/Z/d/311+upp57Sj370o9d9rVnW8422sVnW893vfreefPJJjY6O6l//9V+1Y8cOHTx4cPbrzbKOb7Sd73nPe5piLYeGhvTlL39ZDz/8sFpaWt6wrlnWcyngJeB5snLlSuVyudfd7RsZGXndbzTNpL29XRdeeKGee+65xZ7KgjnzV86xre3AwIDWrl27ZNf2hhtu0Pe+9z098sgjWr169ezzzbSeb7SNZ7NU17NYLOr888/Xxo0btXfvXl188cX61re+1VTrKL3xdp7NUlzLI0eOaGRkRJdccony+bzy+bwOHjyov/qrv1I+n59ds2ZZz6WABnCeFItFXXLJJdq/f/+c5/fv36/Nmzcv0qwWXqVS0Y9//GMNDAws9lQWzLp169Tf3z9nbavVqg4ePNjUa3vy5EkNDQ0tubUNIej666/Xd77zHf3whz/UunXr5ny9GdbzrbbxbJbqer5WCEGVSqUp1vHNnNnOs1mKa/mhD31IR48e1ZNPPjn72Lhxo37v935PTz75pN75znc29Xq+LS3SH580pXvvvTcUCoXwD//wD+GZZ54JO3fuDO3t7eH5559f7KnNm6985SvhwIED4ac//Wk4dOhQ+J3f+Z3Q2dm55LdxYmIiPPHEE+GJJ54IksKtt94annjiifDCCy+EEEK4+eabQ3d3d/jOd74Tjh49Gj796U+HgYGBMD4+vsgzt3uzbZyYmAhf+cpXwmOPPRaOHTsWHnnkkbBp06bwjne8Y0ltYwghfPGLXwzd3d3hwIED4fjx47OPqamp2Zqlvp5vtY3Nsp67d+8Ojz76aDh27Fh46qmnwte//vWQpml4+OGHQwhLfx3PeLPtbJa1PJtX/xVwCM2znksFDeA8++u//uuwdu3aUCwWw6//+q/P+ViGZnDNNdeEgYGBUCgUwuDgYNi+fXt4+umnF3tav7RHHnkkSHrdY8eOHSGEVz6i4Jvf/Gbo7+8PpVIpfPCDHwxHjx5d3Ek7vdk2Tk1Nha1bt4ZVq1aFQqEQzjvvvLBjx47ws5/9bLGn7Xa2bZQU7rzzztmapb6eb7WNzbKev//7vz97PV21alX40Ic+NNv8hbD01/GMN9vOZlnLs3ltA9gs67lUJCGEcO7uNwIAAGCx8R5AAACAyNAAAgAARIYGEAAAIDI0gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDI0gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDI0gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDI0gAAAAJGhAQQAAIgMDSAAAEBkaAABAAAiQwMIAAAQGRpAAACAyNAAAgAARIYGEAAAIDI0gAAAAJGhAQQAAIjM/w82yylTOQNv/wAAAABJRU5ErkJggg==", "text/html": [ "\n", "