{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ISB-CGC Community Notebooks\n", "Check out more notebooks at our [Community Notebooks Repository](https://github.com/isb-cgc/Community-Notebooks)!\n", "\n", "```\n", "Title: How to visualize results from BigQuery\n", "Author: David L Gibbs\n", "Created: 2019-07-17\n", "Purpose: Demonstrate how visualize the results from a query.\n", "URL: https://github.com/isb-cgc/Community-Notebooks/blob/master/Notebooks/How_to_plot_BigQuery_results.ipynb\n", "Notes: \n", "```\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# How to visualize results from BigQuery" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example, we'll perform a few easy queries, and use the python Seaborn library to \n", "visualize the results.\n", "\n", "Library documentation: https://seaborn.pydata.org/\n", "\n", "There's many python tutorials on using the Seaborn library for plotting.\n", "For example, https://elitedatascience.com/python-seaborn-tutorial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initial setup" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# If you start your jupyter notebook session using the \n", "# Community-Notebook/VM-Notebook-Launcher then you're already logged in!\n", "\n", "# !gcloud auth application-default login" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting seaborn\n", " Using cached https://files.pythonhosted.org/packages/a8/76/220ba4420459d9c4c9c9587c6ce607bf56c25b3d3d2de62056efe482dadc/seaborn-0.9.0-py3-none-any.whl\n", "Collecting matplotlib>=1.4.3 (from seaborn)\n", " Using cached https://files.pythonhosted.org/packages/89/61/465fb3bfba684b0f53b5c4829c3c89e86e6fe9fdcdfda93e38f1788090f0/matplotlib-3.0.3-cp35-cp35m-manylinux1_x86_64.whl\n", "Collecting numpy>=1.9.3 (from seaborn)\n", " Using cached https://files.pythonhosted.org/packages/bb/ef/d5a21cbc094d3f4d5b5336494dbcc9550b70c766a8345513c7c24ed18418/numpy-1.16.4-cp35-cp35m-manylinux1_x86_64.whl\n", "Collecting scipy>=0.14.0 (from seaborn)\n", " Using cached https://files.pythonhosted.org/packages/14/49/8f13fa215e10a7ab0731cc95b0e9bb66cf83c6a98260b154cfbd0b55fb19/scipy-1.3.0-cp35-cp35m-manylinux1_x86_64.whl\n", "Collecting pandas>=0.15.2 (from seaborn)\n", " Using cached https://files.pythonhosted.org/packages/74/24/0cdbf8907e1e3bc5a8da03345c23cbed7044330bb8f73bb12e711a640a00/pandas-0.24.2-cp35-cp35m-manylinux1_x86_64.whl\n", "Collecting pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 (from matplotlib>=1.4.3->seaborn)\n", " Using cached https://files.pythonhosted.org/packages/dd/d9/3ec19e966301a6e25769976999bd7bbe552016f0d32b577dc9d63d2e0c49/pyparsing-2.4.0-py2.py3-none-any.whl\n", "Collecting cycler>=0.10 (from matplotlib>=1.4.3->seaborn)\n", " Using cached https://files.pythonhosted.org/packages/f7/d2/e07d3ebb2bd7af696440ce7e754c59dd546ffe1bbe732c8ab68b9c834e61/cycler-0.10.0-py2.py3-none-any.whl\n", "Collecting kiwisolver>=1.0.1 (from matplotlib>=1.4.3->seaborn)\n", " Using cached https://files.pythonhosted.org/packages/ee/18/4cd2e84c6aff0c6a50479118083d20b9e676e5175a913c0ea76d700fc244/kiwisolver-1.1.0-cp35-cp35m-manylinux1_x86_64.whl\n", "Collecting python-dateutil>=2.1 (from matplotlib>=1.4.3->seaborn)\n", " Using cached https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl\n", "Collecting pytz>=2011k (from pandas>=0.15.2->seaborn)\n", " Using cached https://files.pythonhosted.org/packages/3d/73/fe30c2daaaa0713420d0382b16fbb761409f532c56bdcc514bf7b6262bb6/pytz-2019.1-py2.py3-none-any.whl\n", "Collecting six (from cycler>=0.10->matplotlib>=1.4.3->seaborn)\n", " Using cached https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl\n", "Collecting setuptools (from kiwisolver>=1.0.1->matplotlib>=1.4.3->seaborn)\n", " Using cached https://files.pythonhosted.org/packages/ec/51/f45cea425fd5cb0b0380f5b0f048ebc1da5b417e48d304838c02d6288a1e/setuptools-41.0.1-py2.py3-none-any.whl\n", "Installing collected packages: pyparsing, six, cycler, setuptools, kiwisolver, python-dateutil, numpy, matplotlib, scipy, pytz, pandas, seaborn\n", "Successfully installed cycler-0.10.0 kiwisolver-1.1.0 matplotlib-3.0.3 numpy-1.16.4 pandas-0.24.2 pyparsing-2.4.0 python-dateutil-2.8.0 pytz-2019.1 scipy-1.3.0 seaborn-0.9.0 setuptools-41.0.1 six-1.12.0\n" ] } ], "source": [ "!pip3 install seaborn" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting google-cloud-bigquery\n", " Downloading https://files.pythonhosted.org/packages/2e/95/64e92560983db41ff1de7c08839f38ae7c5326a8aad71f5e893098cd1c85/google_cloud_bigquery-1.15.0-py2.py3-none-any.whl (133kB)\n", "\u001b[K 100% |████████████████████████████████| 133kB 4.0MB/s ta 0:00:01\n", "\u001b[?25hCollecting protobuf>=3.6.0 (from google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/7c/d2/581ebc3c41879aca2c4fce5c37cdb8d779c4ea79109b6da7f640735ea0a2/protobuf-3.8.0-cp35-cp35m-manylinux1_x86_64.whl (1.2MB)\n", "\u001b[K 100% |████████████████████████████████| 1.2MB 1.1MB/s eta 0:00:01\n", "\u001b[?25hCollecting google-resumable-media>=0.3.1 (from google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/e2/5d/4bc5c28c252a62efe69ed1a1561da92bd5af8eca0cdcdf8e60354fae9b29/google_resumable_media-0.3.2-py2.py3-none-any.whl\n", "Collecting google-cloud-core<2.0dev,>=1.0.0 (from google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/98/7f/ff56aec313787577e262d5a2e306c04aef61c5c274699ff9fb40095e6691/google_cloud_core-1.0.2-py2.py3-none-any.whl\n", "Collecting setuptools (from protobuf>=3.6.0->google-cloud-bigquery)\n", " Using cached https://files.pythonhosted.org/packages/ec/51/f45cea425fd5cb0b0380f5b0f048ebc1da5b417e48d304838c02d6288a1e/setuptools-41.0.1-py2.py3-none-any.whl\n", "Collecting six>=1.9 (from protobuf>=3.6.0->google-cloud-bigquery)\n", " Using cached https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl\n", "Collecting google-api-core<2.0.0dev,>=1.11.0 (from google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/10/d6/8b1e8d79a8a56649af3a094e3d90dd213278da942f36d831b57c0ca4a503/google_api_core-1.11.1-py2.py3-none-any.whl (66kB)\n", "\u001b[K 100% |████████████████████████████████| 71kB 10.6MB/s ta 0:00:01\n", "\u001b[?25hCollecting google-auth<2.0dev,>=0.4.0 (from google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/c5/9b/ed0516cc1f7609fb0217e3057ff4f0f9f3e3ce79a369c6af4a6c5ca25664/google_auth-1.6.3-py2.py3-none-any.whl (73kB)\n", "\u001b[K 100% |████████████████████████████████| 81kB 10.7MB/s ta 0:00:01\n", "\u001b[?25hCollecting pytz (from google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Using cached https://files.pythonhosted.org/packages/3d/73/fe30c2daaaa0713420d0382b16fbb761409f532c56bdcc514bf7b6262bb6/pytz-2019.1-py2.py3-none-any.whl\n", "Collecting requests<3.0.0dev,>=2.18.0 (from google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl (57kB)\n", "\u001b[K 100% |████████████████████████████████| 61kB 10.3MB/s ta 0:00:01\n", "\u001b[?25hCollecting googleapis-common-protos!=1.5.4,<2.0dev,>=1.5.3 (from google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/eb/ee/e59e74ecac678a14d6abefb9054f0bbcb318a6452a30df3776f133886d7d/googleapis-common-protos-1.6.0.tar.gz\n", "Collecting rsa>=3.1.4 (from google-auth<2.0dev,>=0.4.0->google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/02/e5/38518af393f7c214357079ce67a317307936896e961e35450b70fad2a9cf/rsa-4.0-py2.py3-none-any.whl\n", "Collecting pyasn1-modules>=0.2.1 (from google-auth<2.0dev,>=0.4.0->google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/91/f0/b03e00ce9fddf4827c42df1c3ce10c74eadebfb706231e8d6d1c356a4062/pyasn1_modules-0.2.5-py2.py3-none-any.whl (74kB)\n", "\u001b[K 100% |████████████████████████████████| 81kB 11.0MB/s ta 0:00:01\n", "\u001b[?25hCollecting cachetools>=2.0.0 (from google-auth<2.0dev,>=0.4.0->google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl\n", "Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests<3.0.0dev,>=2.18.0->google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/e6/60/247f23a7121ae632d62811ba7f273d0e58972d75e58a94d329d51550a47d/urllib3-1.25.3-py2.py3-none-any.whl (150kB)\n", "\u001b[K 100% |████████████████████████████████| 153kB 8.1MB/s eta 0:00:01\n", "\u001b[?25hCollecting certifi>=2017.4.17 (from requests<3.0.0dev,>=2.18.0->google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/60/75/f692a584e85b7eaba0e03827b3d51f45f571c2e793dd731e598828d380aa/certifi-2019.3.9-py2.py3-none-any.whl (158kB)\n", "\u001b[K 100% |████████████████████████████████| 163kB 7.1MB/s eta 0:00:01\n", "\u001b[?25hCollecting chardet<3.1.0,>=3.0.2 (from requests<3.0.0dev,>=2.18.0->google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)\n", "\u001b[K 100% |████████████████████████████████| 143kB 7.5MB/s eta 0:00:01\n", "\u001b[?25hCollecting idna<2.9,>=2.5 (from requests<3.0.0dev,>=2.18.0->google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB)\n", "\u001b[K 100% |████████████████████████████████| 61kB 10.2MB/s ta 0:00:01\n", "\u001b[?25hCollecting pyasn1>=0.1.3 (from rsa>=3.1.4->google-auth<2.0dev,>=0.4.0->google-api-core<2.0.0dev,>=1.11.0->google-cloud-core<2.0dev,>=1.0.0->google-cloud-bigquery)\n", " Downloading https://files.pythonhosted.org/packages/7b/7c/c9386b82a25115cccf1903441bba3cbadcfae7b678a20167347fa8ded34c/pyasn1-0.4.5-py2.py3-none-any.whl (73kB)\n", "\u001b[K 100% |████████████████████████████████| 81kB 11.4MB/s ta 0:00:01\n", "\u001b[?25hBuilding wheels for collected packages: googleapis-common-protos\n", " Running setup.py bdist_wheel for googleapis-common-protos ... \u001b[?25ldone\n", "\u001b[?25h Stored in directory: /home/dgibbs/.cache/pip/wheels/9e/3d/a2/1bec8bb7db80ab3216dbc33092bb7ccd0debfb8ba42b5668d5\n", "Successfully built googleapis-common-protos\n", "Installing collected packages: setuptools, six, protobuf, google-resumable-media, pyasn1, rsa, pyasn1-modules, cachetools, google-auth, pytz, urllib3, certifi, chardet, idna, requests, googleapis-common-protos, google-api-core, google-cloud-core, google-cloud-bigquery\n", "Successfully installed cachetools-3.1.1 certifi-2019.3.9 chardet-3.0.4 google-api-core-1.11.1 google-auth-1.6.3 google-cloud-bigquery-1.15.0 google-cloud-core-1.0.2 google-resumable-media-0.3.2 googleapis-common-protos-1.6.0 idna-2.8 protobuf-3.8.0 pyasn1-0.4.5 pyasn1-modules-0.2.5 pytz-2019.1 requests-2.22.0 rsa-4.0 setuptools-41.0.1 six-1.12.0 urllib3-1.25.3\n" ] } ], "source": [ "!pip3 install google-cloud-bigquery" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Defining helper functions" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import seaborn as se\n", "from google.cloud import bigquery" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "plt.rcParams['figure.figsize'] = (20.0, 10.0)\n", "plt.rcParams['font.family'] = \"serif\"" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def runQuery ( client, qString, dryRun=False ):\n", " \n", " print ( \"\\n in runQuery ... \" )\n", " if ( dryRun ):\n", " print ( \" dry-run only \" )\n", " \n", " ## set up QueryJobConfig object\n", " job_config = bigquery.QueryJobConfig()\n", " job_config.dry_run = dryRun\n", " job_config.use_query_cache = True\n", " job_config.use_legacy_sql = False\n", " \n", " ## run the query\n", " try:\n", " query_job = client.query ( qString, job_config=job_config )\n", " ## print ( \" query job state: \", query_job.state )\n", " except:\n", " print ( \" FATAL ERROR: query execution failed \" )\n", " return ( None )\n", " \n", " ## return results as a dataframe (or an empty dataframe for a dry-run) \n", " if ( not dryRun ):\n", " try:\n", " df = query_job.to_dataframe()\n", " if ( query_job.total_bytes_processed==0 ):\n", " print ( \" the results for this query were previously cached \" )\n", " else:\n", " print ( \" this query processed {} bytes \".format(query_job.total_bytes_processed) )\n", " if ( len(df) < 1 ):\n", " print ( \" WARNING: this query returned NO results \")\n", " return ( df )\n", " except:\n", " print ( \" FATAL ERROR: query execution failed \" )\n", " return ( None )\n", " \n", " else:\n", " print ( \" if not cached, this query will process {} bytes \".format(query_job.total_bytes_processed) )\n", " ## return an empty dataframe\n", " return ( pd.DataFrame() )\n", " \n", "\n", "\n", "def checkQueryResults ( qr ):\n", " print ( \"\\n in checkQueryResults ... \" )\n", " if ( not isinstance(qr, pd.DataFrame) ):\n", " print ( \" query execution failed! \" )\n", " return ( False )\n", " else:\n", " if ( len(qr) > 0 ): \n", " print ( \" # of rows in query results: {} \".format(len(qr)) )\n", " print ( \"\\n\", qr.head() )\n", " else:\n", " print ( \" query returned NO results ?!? \" ) \n", " return ( True )" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# User your own project ID\n", "\n", "project_id = 'your_project_number'\n", "if project_id == 'your_project_number':\n", " print('Please update the project number with your Google Cloud Project')\n", "else:\n", " bqclient = bigquery.Client(project=project_id)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Making barplots" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " in runQuery ... \n", " this query processed 74236 bytes \n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
icd_10Count
0C02.21
1C51.91
2C44.31
3C53.11
4C49.81
\n", "
" ], "text/plain": [ " icd_10 Count\n", "0 C02.2 1\n", "1 C51.9 1\n", "2 C44.3 1\n", "3 C53.1 1\n", "4 C49.8 1" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We define queries as strings #\n", "\n", "sql = '''\n", "SELECT\n", " icd_10,\n", " COUNT(*) as Count\n", "FROM\n", " `isb-cgc.TCGA_bioclin_v0.Clinical`\n", "GROUP BY\n", " 1 -- this is the same as 'group by icd_10'\n", "ORDER BY\n", " Count\n", "'''\n", "\n", "res0 = runQuery ( bqclient, sql, dryRun=False )\n", "\n", "res0[0:5]" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# first I'll subset the results,\n", "# there's a lot of categories!\n", "res1 = res0[res0['Count'] > 200]\n", "\n", "# then we'll make a bar plot\n", "p = se.barplot(data=res1, x = 'icd_10', y = 'Count')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Making scatter plots" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " in runQuery ... \n", " this query processed 138600 bytes \n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
avg_percent_neutrophil_infiltrationavg_percent_lymphocyte_infiltration
010.040.0
10.085.0
21.58.5
33.09.0
45.06.0
\n", "
" ], "text/plain": [ " avg_percent_neutrophil_infiltration avg_percent_lymphocyte_infiltration\n", "0 10.0 40.0\n", "1 0.0 85.0\n", "2 1.5 8.5\n", "3 3.0 9.0\n", "4 5.0 6.0" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sql = '''\n", "SELECT\n", " avg_percent_neutrophil_infiltration,\n", " avg_percent_lymphocyte_infiltration\n", "FROM\n", " `isb-cgc.TCGA_bioclin_v0.Biospecimen`\n", "GROUP BY\n", " 1,2\n", "'''\n", "\n", "res3 = runQuery ( bqclient, sql, dryRun=False )\n", "\n", "res3[0:5]" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABJUAAAJPCAYAAADFQeWtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3X2UZWldH/rvU11UW9NTE4uepiG08yJiX1+Gl1io2KLhqhjDYulovPcapQW0UcY4lyQqCoomvgQMajTJRGlEbQxXXerINS6v11wJIRMUajSAGEeQF20Wa2jKgmmq2y66znP/6Kqipqe7a++u2nV27fp81hq6zq5zzv4953eq6PPt53l2qbUGAAAAANqYGHcBAAAAAOw+QiUAAAAAWhMqAQAAANCaUAkAAACA1oRKAAAAALQmVAIAAACgNaESAAAAAK0JlQAAAABoTagEAAAAQGtCJQAAAABamxx3AVtx880319tuu23cZQAAAAAMxv333/+RWuuhze63q0Ol2267LfPz8+MuAwAAAGAwSikfaHI/y98AAAAAaE2oBAAAAEBrQiUAAAAAWhMqAQAAANCaUAkAAACA1oRKAAAAALQmVAIAAACgNaESAAAAAK0JlQAAAABoTagEAAAAQGtCJQAAAABaEyoBAAAA0JpQCQAAAIDWhEoAAAAAtCZUAgAAAKA1oRIAAAAArQmVAAAAAGhNqAQAAABAa0IlAAAAAFqb7OqJSymPTfIjSZ5ca33a6rFPSfKqJB9M8sQkr6i1/sXq974pyVOTrCT5y1rrz3VVW5+MRjULS8tZvriSqcl9OXhgKhMTZdxlAQAAAFxTZ6FSki9O8oYkT9lw7MVJ/qrW+uOllDuS/HySZ5RSjiT5riRPrbXWUsrbSil/UGt9d4f1jd1oVPPAg2dz4tR8Ti+ez5HZ6Zw8Ppejh2cESwAAAECvdbb8rdb660nOXnb42Unesvr9dyZ5cinlpiRfmeT+Wmtdvd9bknxVV7X1xcLS8nqglCSnF8/nxKn5LCwtj7kyAAAAgGvb6T2VHpOHB00PrR672vFHKKW8sJQyX0qZP3PmTGeF7oTliyvrgdKa04vns3xxZUwVAQAAADSz06HSh5PMbLh90+qxqx1/hFrrq2utc7XWuUOHDnVW6E6YmtyXI7PTDzt2ZHY6U5P7xlQRAAAAQDM7HSr9TpKnJ8nqnkpvr7U+lOT3knxeKWVtI6GnJ/ndHa5txx08MJWTx+fWg6W1PZUOHpgac2UAAAAA11Y+uY3RNj9xKV+a5HiSf5DkPyT5idVvvSrJh5J8RpIfu+zqb3O5dPW3v2hy9be5ubk6Pz/fQfU7x9XfAAAAgD4ppdxfa53b9H5dhUo7YQihEgAAAECfNA2Vdnr5GwAAAAADIFQCAAAAoDWhEgAAAACtCZUAAAAAaE2oBAAAAEBrQiUAAAAAWhMqAQAAANCaUAkAAACA1oRKAAAAALQmVAIAAACgNaESAAAAAK0JlQAAAABoTagEAAAAQGtCJQAAAABaEyoBAAAA0JpQCQAAAIDWhEoAAAAAtCZUAgAAAKA1oRIAAAAArQmVAAAAAGhNqAQAAABAa0IlAAAAAFoTKgEAAADQmlAJAAAAgNaESgAAAAC0JlQCAAAAoDWhEgAAAACtCZUAAAAAaE2oBAAAAEBrQiUAAAAAWhMqAQAAANCaUAkAAACA1oRKAAAAALQmVAIAAACgNaESAAAAAK0JlQAAAABoTagEAAAAQGtCJQAAAABaEyoBAAAA0JpQCQAAAIDWhEoAAAAAtCZUAgAAAKC1yXEXsNeNRjULS8tZvriSqcl9OXhgKhMTZdxlAQAAAFyTUGmMRqOaBx48mxOn5nN68XyOzE7n5PG5HD08I1gCAAAAes3ytzFaWFpeD5SS5PTi+Zw4NZ+FpeUxVwYAAABwbUKlMVq+uLIeKK05vXg+yxdXxlQRAAAAQDNCpTGamtyXI7PTDzt2ZHY6U5P7xlQRAAAAQDNCpTE6eGAqJ4/PrQdLa3sqHTwwNebKAAAAAK7NRt1jNDFRcvTwTO6965irvwEAAAC7ilBpzCYmSg7N7B93GQAAAACtWP4GAAAAQGtCJQAAAABaEyoBAAAA0JpQCQAAAIDWhEoAAAAAtCZUAgAAAKA1oRIAAAAArQmVAAAAAGhNqAQAAABAa0IlAAAAAFoTKgEAAADQmlAJAAAAgNaESgAAAAC0JlQCAAAAoDWhEgAAAACtCZUAAAAAaE2oBAAAAEBrQiUAAAAAWhMqAQAAANCaUAkAAACA1oRKAAAAALQmVAIAAACgNaESAAAAAK0JlQAAAABoTagEAAAAQGtCJQAAAABaEyoBAAAA0JpQCQAAAIDWhEoAAAAAtCZUAgAAAKA1oRIAAAAArQmVAAAAAGhNqAQAAABAa0IlAAAAAFoTKgEAAADQmlAJAAAAgNaESgAAAAC0JlQCAAAAoDWhEgAAAACtCZUAAAAAaE2oBAAAAEBrk+M4aSnlu5PcluQjSZ6Y5FuSTCd5RZL3rh57aa31wXHUBwAAAMC17XioVEp5bJLvS3JzrXVUSnlDkq9N8owk/7nW+mullOckeVWS5+50fQAAAABsbhzL384lWU5y0+rtG5O8K8mzk7xl9dh9q7cBAAAA6KEdn6lUa31odfnbr5ZSPpTkdJL3JHlMkrOrd3soyWwpZbLWenHj40spL0zywiS55ZZbdq5wAAAAANbt+EylUspTknx3kmfXWp+XS/sqvTzJh5PMrN7tpiSLlwdKSVJrfXWtda7WOnfo0KEdqhoAAACAjcax/O3xSf5mQ2D0oSSfkuR3kjx99dix1dsAAAAA9NA4rv72/yT5h6WUn0jy0SSfm+TFSS4keWUp5TOTPCHJd42hNgAAAAAaGMeeSitJvuMq3z6xk7UAAAAAcH3GsfwNAAAAgF1OqAQAAABAa0IlAAAAAFoTKgEAAADQmlAJAAAAgNaESgAAAAC0JlQCAAAAoDWhEgAAAACtCZUAAAAAaE2oBAAAAEBrQiUAAAAAWhMqAQAAANCaUAkAAACA1oRKAAAAALQmVAIAAACgNaESAAAAAK0JlQAAAABoTagEAAAAQGtCJQAAAABaEyoBAAAA0JpQCQAAAIDWhEoAAAAAtCZUAgAAAKA1oRIAAAAArQmVAAAAAGhNqAQAAABAa0IlAAAAAFoTKgEAAADQmlAJAAAAgNaESgAAAAC0JlQCAAAAoDWhEgAAAACtCZUAAAAAaE2oBAAAAEBrQiUAAAAAWhMqAQAAANCaUAkAAACA1oRKAAAAALQmVAIAAACgNaESAAAAAK0JlQAAAABobXLcBQCwO41GNQtLy1m+uJKpyX05eGAqExNl3GUBAAA7RKgEQGujUc0DD57NiVPzOb14Pkdmp3Py+FyOHp4RLAEAwB5h+RsArS0sLa8HSklyevF8Tpyaz8LS8pgrAwAAdopQCYDWli+urAdKa04vns/yxZUxVQQAAOw0oRIArU1N7suR2emHHTsyO52pyX1jqggAANhpQiUAWjt4YConj8+tB0treyodPDA15soAAICdYqNuAFqbmCg5engm9951zNXfAABgjxIqAXBdJiZKDs3sH3cZAADAmFj+BgAAAEBrQiUAAAAAWhMqAQAAANCaUAkAAACA1oRKAAAAALQmVAIAAACgtesKlUopd253IQAAAADsHpNN7lRK+dYkdye5MUlJclOSezusCwAAAIAeaxQqJfnGJP9rrfUjSVJK+ebuSgIAAACg75ouf3v7WqC06p1dFAMAAADA7tB0ptJnlVLuS/IXq7fvSDLXTUkAAAAA9F3TUGmU5KUbbj+3g1oAAAAA2CWahkrfUGv96NqNUspbOqoHAAAAgF2g6Z5Kh0sp95VSzpZS3pzk9i6LAgAAAKDfmoZK35Pknya5Ncl3J/nezioCAAAAoPeahkp/Xmt9a631b2qtf5hPbtgNAAAAwB7UdE+lzyylPDXJ+5I8IclndFcSAAAAAH3XNFT6iSSvTfKkJP8jybd0VhEAAAAAvdcoVKq1/nmSL1q7XUp5XGcVAQAAANB71wyVSilPrrW+vZRy/LJvPSfJ13dXFgAAAAB9ttlG3Xev/vn8JLdv+O/RXRYFAAAAQL9dc6ZSrXVt76S7a63vTJJSyoEkv9l1YQAAAAD012YzldZ81YavDyf57g5qAQAAAGCX2GxPpVuS3JbkfymlfMnq4Yk0D6MAAAAAGKDNrv721CRfk+QpScrqsZUkv91lUQAAAAD022Z7Kr0hyRtKKU+rtb5th2oCAAAAoOcaLWOrtb6tlHKglHLL6n8/1HFdAAAAAPTYZsvfkiSllH+W5LlJZpI8mOTvJvmh7soCAAAAoM+abrj92FrrU5OcrLUeS/LvOqwJAAAAgJ5rGip9fPXPmdU/j3ZQCwAAAAC7RNNQ6Ugp5TlJ/rqU8pdJHtdhTQAAAAD0XKM9lXJpudv7a60PlVLekuQvOqwJAAAAgJ5rOlPpt5IcTJJa6ztqrX/bXUkAAAAA9F3TUOk/1Vrft3ajlPLMjuoBAAAAYBdouvztsaWUX0nyP1dvPyPJG7spCQAAAIC+axoqPS7JazbcvqODWgAAAADYJZqGSi+qtf5pkpRSbk7yB92VBAAAAEDfNd1T6Ws3fP2oJD/SQS0AAAAA7BLXnKlUSnlSkqckeUop5fjq4YkkN3VdGAAAAAD9tdnyt9kkt2/4M0lWkvxkl0UBAAAA0G/XDJVqrW9K8qZSyutrre9eO15Kme68MgAAAAB6a7Plb1+y4evHbfjWc5Oc6KooAAAAAPpts+VvP5Xk7UnKZcfv2MpJSylHk3xDkvNJvjTJDyX5cJIfSPKeJLcl+ee11o9v5TwAAAAAdGOzUOnuWut9lx8spRy73hOWUvbl0p5Mz6m1jkopp5JcTPK6JC+vtb61lPKdSV6SSyETAAAAAD0zscn3/3uSlFJu2fhfkmdv4ZxPy6WZT99ZSvm+JM9J8tEkz0zyttX73LfFcwAAAADQoc1mKv1Rks9P8qYk78snl8HdkuSl13nOW5M8Pck31Fo/Vkr55SQHk5yvtdbV+zyU5DFXenAp5YVJXpgkt9xyy3WWAAAAAMBWbBYq/ebqcrW7a62/vXawlPIPt3DOh5L8ea31Y6u3/1uSZySZLqWU1WDpplzaY+kRaq2vTvLqJJmbm6tXug8AAAAA3dps+dtkrXUlyeMvO760hXP+UZKDq2FVcmnm0ruSvDGXlsYlybEkv7OFcwAAAADQoc1mKh0tpTwvybNKKec2HH9OLi2Ja63W+jellJck+TellDNJDiX5l0len+TlpZRn5dLyun92Pc8PAAAAQPc2C5VekeSrk8wmuX3D8Udv5aS11nuT3HvZ4fcnecFWnhcAAACAnXHNUKnW+q4k7yql/Hat9Z1rx0spn9N5ZQAAAAD01mYzlZIktdZ3llJmk8ysHvr6XNoHCQAAAIA9qFGoVEr5+SRfkEtXZCu5tOfRD3VXFgAAAAB91ihUSvJ3aq2fu3ajlPL3uykHAAAAgN1gouH93lVKuXHD7dkuigEAAABgd2gaKj0/yYdLKe8rpbwvyWs6rAkAAACAnmsaKr2+1npDrfX2WuvtSb6ny6IAAAAA6LemV3/73ssOufIbAPTQaFSzsLSc5YsrmZrcl4MHpjIxUcZdFgAAA3TNUKmU8h211n9fSnntxsNJ7kgy12llAEAro1HNAw+ezYlT8zm9eD5HZqdz8vhcjh6eESwBALDtNlv+dm71z5Lkl1b/+8Uk/6PDmgCA67CwtLweKCXJ6cXzOXFqPgtLy2OuDACAIbrmTKVa6y+sfnl3rfXs2vFSyv0bvn5SrfUdHdUHADS0fHFlPVBac3rxfJYvroypIgAAhqzRRt0bA6XV2x/fcPMp21oRAHBdpib35cjs9MOOHZmdztTkvjFVBADAkDW9+tu12KQBAHrg4IGpnDw+tx4sre2pdPDA1JgrAwBgiBpd/W0TdRueAwDYoomJkqOHZ3LvXcdc/Q0AgM5tR6jkb6oA0BMTEyWHZvaPuwwAAPaA61r+Vkp53IabrgQHAAAAsMdcc6ZSKeX4Vb71nCRfnyS11rdvd1EAAAAA9Ntmy9++Ocl/vcLxR3dQCwAAAAC7xGah0t211nddfrCU8qSO6gEAAABgF9gsVHowSUopX3LZ8ecmOdFJRQAAAAD03mah0uuSfFWSn07yJ/nkld7u6LIoAAAAAPrtmqFSrfWrVr+8u9b65rXjpZRjnVYFAAAAQK9NNLnTxkBp1RM7qAUAAACAXWKz5W9JklLKDyX5liSfyKUlcDcl+cXOqgIAAACg1xqFSknmktxaax0lSSnla7orCQAAAIC+a7T8LcmfrQVKqz7WRTEAAAAA7A7XnKlUSnljkppkppTy/iTvW/3WLUme0G1pAAAAAPTVZsvf3prknsuOlVzaXwkAAACAPeqaoVKt9SUbb5dSbq61fiTJD3RaFQAAAAC91mhPpVLKs0opH0ry3lLKh0opz+q4LgAAAAB6rOlG3S9K8pRa601J/l6S7+yuJAAAAAD6rmmoNF9rfTBJaq0fSvJHSVJKOdBVYQAAAAD012Ybda95fCnlBUnem+TTk9xYSvmSJM9NcqKr4gAAAADop6ah0tOTTCd5xoZjz09yx7ZXBAAAAEDvNQ2V7q61vvnyg6WUY9tcDwAAAAC7QNM9lf64lPIjpZTfLqX88NpeSrXW+zqsDQAAAICeahoq/WSSh5L8QpKPJ/mpzioCAAAAoPeaLn97b631x9dulFJe1lE9AAAAAOwCTWcqHSml7EuSUspkksd3VxIAAAAAfdd0ptLvJ3l/KWUhyaOTfEd3JQEAAADQd01DpfcnuSPJZyR5T631o51VBAAAAEDvNQ2VfivJl9Va57ssBoDdYzSqWVhazvLFlUxN7svBA1OZmCjjLmvP05f+0RMAYKiahkr/qdb6vrUbpZRn1lrf2FFNAPTcaFTzwINnc+LUfE4vns+R2emcPD6Xo4dnfFgeI33pHz0BAIas6Ubdjy2l/Eop5QdLKT+YxNXfAPawhaXl9Q/JSXJ68XxOnJrPwtLymCvb2/Slf/QEABiypjOVHpfkNRtu39FBLQDsEssXV9Y/JK85vXg+yxdXxlQRib70kZ4AAEPWNFR6Ua31T5OklHJzkj/oriQA+m5qcl+OzE4/7MPykdnpTE3uG2NV6Ev/6AkAMGRNl7997YavH5XkRzqoBYBd4uCBqZw8Ppcjs9NJsr5PzMEDU2OubG/Tl/7REwBgyEqt9erfLOVJSZ6S5Gty6QpwyaUg6qtrrXd2X961zc3N1fl5F6QDGAdXtOonfekfPQEAdptSyv211rnN7rfZ8rfZJLdv+DNJVpL85NbKA2C3m5goOTSzf9xlcBl96R89AQCG6pqhUq31TUneVEp5fa313TtUEwAAAAA913RPpQullFs2/PdjnVYFAAAAQK81vfrbm5K8L0lJ8mlJHkry0q6KAgAAAKDfmoZKL6y1/v7ajVLKt3VUDwAAAAC7QKPlbxsDpVWf3UEtAAAAAOwSjWYqlVLel6Tm0vK3muR1XRYFAAAAQL81Xf72ilrrz3VaCQAAAAC7RtPlbz9XSrm5lPK5pZQbuy4KAAAAgH5rFCqVUr4pyZuTvDzJl5dSXtZpVQAAAAD0WqNQKcmTa62fleT+Wutv5dLeSgAAAADsUU1DpY+t/llX/9zXQS0AAAAA7BJNN+o+XEr52SSPK6W8Kp8MlwAAAADYg5rOVHpxkj9O8tdJHkjyks4qAgAAAKD3Gs1UqrWuJHn12u1SyjOTvLGrogAAAADot0ahUinlq5K8KMmNubRJ9y1JntBhXQAAAAD0WNM9lV6WS0vgzuRSqPTNnVUEAAAAQO81DZX+pNY6v3ajlPK6juoBAAAAYBdoGio9tpTyH5P8xertZyT58m5KAgAAAKDvGodKSV6z4fYdHdQCAAAAwC7RNFR6fq31PWs3Sim/u+HrT6+1vnfbKwMAAACgtyaa3GljoLR6+8Mbbn7xtlYEAAAAQO81CpU2UbbhOQAAAADYRbYjVKrb8BwAAAAA7CJmKgEAAADQWqNQqZQyteHrm0spj9vw7fdc4SEAAAAADFjTmUrfu+HrRyV5xdqNWut921oRAAAAAL03ea1vllKelOQpSZ5SSjm+engiyU1dFwYAAABAf10zVEoym+T2DX8myUqSn+yyKAAAAAD67ZqhUq31TUneVEp5fa313WvHSyn7Oq8MAAAAgN7abKbSmveUUp6aZGb19nOTnOimJAAAAAD6rmmo9Nurf55Z/fOODmoBAAAAYJdoGip9rNb6jWs3VmctAQAAALBHTTS833wp5TM23H5yF8UAAAAAsDs0nan0L5N8ZyklSUqSm5L8Ykc1AQAAANBzTUOlf1FrfdXajVLKP+qoHgAAAAB2gUahUq31VaWUm5M8Nsn7a62/3m1ZAAAAAPRZoz2VSinflOTNSV6e5MtLKS/rtCoAAAAAeq3pRt1PrrV+VpL7a62/lUv7KgEAAACwRzUNlT62+mdd/XNfB7UAAAAAsEs03aj7cCnlZ5M8rpTyqnwyXAIAAABgD2o6U+nFSf44yV8n+fMkL+msIgAAAAB6r2modCTJ79da/0kubdi95T2VSinTpZR3rM58SinlU0op/66U8n2llNeWUj5zq+cAAAAAoBtNQ6WfSvJpq18/NsmPbcO5fyTJn2y4/eIkf1Vr/Ver5/v5bTgHMBCjUc2ZsxfywcVzOXP2QkYjq3DHTU/6SV/6R0/6SV8AYOua7qn0llrrf02SWuubSilP38pJSynPTXJfkicluXH18LOTvHT1HO8spTy5lHJTrfWhrZwL2P1Go5oHHjybE6fmc3rxfI7MTufk8bkcPTyTiQkXoxwHPeknfekfPeknfQGA7dF0ptJtpZTJJFn985brPWEp5bOTfFat9Tcv+9ZjkpzdcPuh1WPAHrewtLz+F/8kOb14PidOzWdhaXnMle1detJP+tI/etJP+gIA26PpTKXfS/K+UspCkkcn+Y4tnPPOJH9bSvneJF+cZKqU8uIkH04ys+F+N60ee5hSyguTvDBJbrnlurMtYBdZvriy/hf/NacXz2f54sqYKkJP+klf+kdP+klfAGB7NA2V3p/kjiSfkeQ9tdaPXu8Ja60/uvZ1KeVTktxYa/03q18/PcmbSyl3JHn7lZa+1VpfneTVSTI3N2fxO+wBU5P7cmR2+mEfAI7MTmdqct8Yq9rb9KSf9KV/9KSf9AUAtkfT5W+/lWS21jq/lUBpo1LK1yX5kiRfWEr5hiQ/neTWUsr3J/nnSb5lO84D7H4HD0zl5PG5HJmdTpL1vS8OHpgac2V7l570k770j570k74AwPYotW4+2aeU8jO11rs33H5mrfWNnVbWwNzcXJ2fnx93GcAOGI1qFpaWs3xxJVOT+3LwwJTNVMdMT/pJX/pHT/pJXwDg6kop99da5za7X9Plb48tpfxKkv+5evsZScYeKgF7x8REyaGZ/eMugw30pJ/0pX/0pJ/0BQC2rmmo9Lgkr9lw+44OagEAAABgl2gaKj2/1vqetRullN/tqB4AAAAAdoGmodLflFJ+IslKkv+S5C+TfLirogAAAADot6ZXf3tFknckGSX5wyTf2VlFAAAAAPRe01DpgVrrLyVZrLX+TZK/7rAmAAAAAHquaaj0OaWUxyWppZS/k+TTO6wJAAAAgJ5ruqfSa5O8Lcmjk9yV5P/orCIAAAAAeq9RqFRr/W9JjpRSbq61fqTjmgAAAADouUbL30opt5ZSfjXJfyml/Fop5faO6wIAAACgx5ruqfQzSX4jyfEk9yb5t51VBAAAAEDvNd1T6e211l9b/fqPSymf01VBAAAAAPRf05lKD60teSulfHqSv1r9+tu7KgwAAACA/mo6U+llSe4qpSTJpf8p5fuS3JTkZ7spDQAAAIC+ahoq3V1rfd3lB0sp/3ib6wEAAABgF2i0/O1KgdLq8deXUo5vb0kAAAAA9F3TPZWupWzDcwAAAACwizRd/nYtdRueA2DPGI1qFpaWs3xxJVOT+3LwwFQmJuTz46Qn/TOkngxpLAAAG21HqARAQ6NRzQMPns2JU/M5vXg+R2anc/L4XI4envEhc0z0pH+G1JMhjQUA4HKWvwHsoIWl5fUPl0lyevF8Tpyaz8LS8pgr27v0pH+G1JMhjQUA4HKNQqVSyjdd7Xu11l/avnIAhm354sr6h8s1pxfPZ/niypgqQk/6Z0g9GdJYAAAu13Sm0r8tpbx3w39/WUr5f0spn9tpdQADMzW5L0dmpx927MjsdKYm942pIvSkf4bUkyGNBQDgck1DpR9L8hVJnpDkWUl+PMm3JPmOjuoCGKSDB6Zy8vjc+ofMtf1VDh6YGnNle5ee9M+QejKksQAAXK7UuvnF20op/6LW+oMbbv9wrfUHSinfVWt9VacVXsPc3Fydn58f1+kBrosrQfWPnvTPkHoypLEAAHtDKeX+WuvcZvdrevW3p5ZSvj7Ju5N85urtm5LcsYUaAfakiYmSQzP7x10GG+hJ/wypJ0MaCwDARk1Dpbtzacnb5yR51+rtxyQ51VFdAAAAAPRY01DpSbXW/+0Kx9+zncUAAAAAsDs03aj7+0sp/7qU8uROqwEAAABgV2gaKn1zkpcn+YJSyr8vpfyjDmsCAAAAoOeahkr7kqwkuZDkaUm+vbOKAAAAAOi9pnsq/XKSm5L8bpLn1Vr/rLuSAAAAAOi7pqHSA0m+tdZ6NklKKXfWWu/triwAAAAA+qxpqPTqJP9fKeXmJCWXZi0JlQAAAAD2qKZ7Kn1Dkq9M8nNJPjPJv+6sIgAAAAB6r2mo9ECtdTHJZK31E0lmO6wJAAAAgJ5ruvztS0sp9yf5lFLKa5I8scOaAAAAAOi5pqHS/55klOQPk3xrLH8DAAAA2NMahUq11qUNN3+mo1oAAAAA2CWa7qkEAAAAAOuESgAAAAC0JlQCAAAAoDWhEgAAAACtNb36Gx0ZjWoWlpazfHElU5P7cvDAVCYmyljOm2RLtYxrLNttKOOArvlZ6Sd96R896aeh9GUo40iGNRaAvUKoNEajUc0DD57NiVPzOb138UkwAAAgAElEQVR4Pkdmp3Py+FyOHp7p9P9Ar3be/ZMTOf7at15XLeMay3Ybyjiga35W+klf+kdP+mkofRnKOJJhjQVgL7H8bYwWlpbX/48zSU4vns+JU/NZWFoey3k/sHDuumsZ11i221DGAV3zs9JP+tI/etJPQ+nLUMaRDGssAHuJUGmMli+urP8f55rTi+ezfHFlLOe9YWrfddcyrrFst6GMA7rmZ6Wf9KV/9KSfhtKXoYwjGdZYAPYSodIYTU3uy5HZ6YcdOzI7nanJfVd5RLfnPbe88ohjTWsZ11i221DGAV3zs9JP+tI/etJPQ+nLUMaRDGssAHuJUGmMDh6Yysnjc+v/B7q2dnxt0+ydPu+tB2+47lrGNZbtNpRxQNf8rPSTvvSPnvTTUPoylHEkwxoLwF5Saq3jruG6zc3N1fn5+XGXsSWu/tY/QxkHdM3PSj/pS//oST8NpS9DGUcyrLEA7HallPtrrXOb3k+oBAAAAMCapqGS5W8AAAAAtCZUAgAAAKA1oRIAAAAArQmVAAAAAGhNqAQAAABAa5PjLgCA7eeyzAAAQNeESgADMxrVPPDg2Zw4NZ/Ti+dzZHY6J4/P5ejhGcESAACwbSx/AxiYhaXl9UApSU4vns+JU/NZWFoec2UAAMCQCJUABmb54sp6oLTm9OL5LF9cGVNFAADAEAmVAAZmanJfjsxOP+zYkdnpTE3uG1NFAADAEAmVAAbm4IGpnDw+tx4sre2pdPDA1JgrAwAAhsRG3QADMzFRcvTwTO6965irvwEAAJ0RKgEM0MREyaGZ/eMuAwAAGDDL3wAAAABoTagEAAAAQGtCJQAAAABaEyoBAAAA0JqNutk2o1HNwtKyq031iJ7QJe+vftKX/tETAGCohEpsi9Go5oEHz+bEqfmcXjyfI7PTOXl8LkcPz/iL85joCV3y/uonfekfPQEAhszyN7bFwtLy+l+Yk+T04vmcODWfhaXlMVe2d+kJXfL+6id96R89AQCGTKjEtli+uLL+F+Y1pxfPZ/niypgqQk/okvdXP+lL/+gJADBkQiW2xdTkvhyZnX7YsSOz05ma3DemitATuuT91U/60j96AgAMmVCJbXHwwFROHp9b/4vz2p4RBw9MjbmyvUtP6JL3Vz/pS//oCQAwZKXWOu4artvc3Fydn58fdxmscnWb/tETuuT91U/60j96AgDsNqWU+2utc5vdz9Xf2DYTEyWHZvaPuww20BO65P3VT/rSP3oCAAyV5W8AAAAAtCZUAgAAAKA1oRIAAAAArQmVAAAAAGhNqAQAAABAa0IlAAAAAFoTKgEAAADQ2uS4CwB2t9GoZmFpOcsXVzI1uS8HD0xlYqKMuywAAAA6JlQCrttoVPPAg2dz4tR8Ti+ez5HZ6Zw8Ppejh2cESwAAAANn+Rtw3RaWltcDpSQ5vXg+J07NZ2FpecyVAQAA0DWhEnDdli+urAdKa04vns/yxZUxVQQAAMBOESoB121qcl+OzE4/7NiR2elMTe4bU0UAAADsFKEScN0OHpjKyeNz68HS2p5KBw9Mjbky6J/RqObM2Qv54OK5nDl7IaNRHXdJAACwJTbqBq7bxETJ0cMzufeuY67+BtdgU3sAAIbITCVgSyYmSg7N7M/jZ2/IoZn9u+YDslkj7CSb2gMAMERmKgF7jlkj7DSb2gMAMEQ7PlOplPKEUsr/VUr57lLKT5dSXr56/NGllFeXUr63lPLzpZTDO10bsDeYNcJOs6k9AABDNI6ZSo9O8iu11jckSSnlz0opv5PkRJL/XGv9tVLKc5K8Kslzx1DfnjAa1SwsLQ9iH5ztHkvT52tz3ivdN0nnPRjXedvU0/Tc29nncc8aGcrP31DGkXQ/lrVN7S+fHdfFpvZD6ctQxpEMayxDoi/9oyf9oyfAZnY8VKq1vu2yQxNJlpI8O8mPrh67L8kv7WRde8mQlv5s91iaPl+b817pvqde8Pm5cHHUaQ/Gdd429TQ993b3eW3WyMZgaadmjQzl528o40h2Ziw7tan9UPoylHEkwxrLkOhL/+hJ/+gJ0MRYN+oupdyZ5PdqrX+e5DFJzq5+66Eks6UUez51YEhLf7Z7LE2fr815r3TfDyyc67wH4zpvm3qannu7+7w2a2RtOVKXs0YuN5Sfv6GMI9m5sezEpvZD6ctQxpEMayxDoi/9oyf9oydAE2MLbUopz0zyzCQvXj304SQzST6a5KYki7XWi1d43AuTvDBJbrnllp0pdmDGvfRnO233WJo+X5vzXum+N0zt67wH4zpvm3qannu7+7xTs0auZCg/f0MZR2IsfTSUcSTDGsuQ6Ev/6En/6AnQxFhmKpVSnp3kK5P8n0keW0p5epLfSfL01bscW739CLXWV9da52qtc4cOHdqReodmSBvGbvdYmj5fm/Ne6b7nllc678G4ztumnqbn7uI9uxOzRq5kKD9/QxlHYix9NJRxJMMay5DoS//oSf/oCdDEOK7+9nlJfjXJFyZ5Y5I3JDma5KVJvqKU8v1JvjbJd+10bXvFOJf+XM1oVHPm7IV8cPFczpy9kNGoNnrcdo+l6fO1Oe+V7nvrwRs678G4ztumnqbn7uN79noNZSxDGUdiLH00lHEkwxrLkOhL/+hJ/+gJ0ESptdmH9z6am5ur8/Pz4y5jV+rTlRy2ugmgq7+1G8tOnLdNPeO4+tu4DWUsQxlHYix9NJRxJMMay5DoS//oSf/oCexdpZT7a61zm95PqMS4nTl7IXfec98jrsR1713Hcmhm/xgrAwAAgL2naag01qu/QWITQAAAANiNhEqMnU0AAQAAYPcRKjF2NgEEAACA3Wdy3AXAxETJ0cMzufeuYzYBBAAAgF1CqDRme/GKClcbc5NNuffi6wUAAAB9JFQao9Go5oEHz+bEqfmcXjy/vuzr6OGZwQYlWxnzXny9AAAAoK/sqTRGC0vL6wFJcumKZydOzWdhaXnMlXVnK2Pei68XAAAA9JVQaYyWL66sByRrTi+ez/LFlTFV1L2tjHkvvl4AAADQV0KlMZqa3Ld+xbM1R2anMzW5b0wVdW8rY96Lr1cfjEY1Z85eyAcXz+XM2QsZjeq4SwLgOvh9DgBsN6HSGB08MJWTx+fWg5K1PYIOHpgac2Xd2cqY9+LrNW5r+1jdec99OfbKN+bOe+7LAw+e9UEEYJfx+xwA6EKpdff+ZWJubq7Oz8+Pu4wt2YtXM9vKmPfi6zVOZ85eyJ333PewZYdHZqdz713HGl2tD4B+8PscAGijlHJ/rXVus/u5+tuYTUyUR/xlbujByZXGvBOPpT37WAEMg9/nAEAXhEo9szY9fe0qZ2tLvI4enhlUsMTusLaP1eX/sm0fK4Ddxe9zAKAL9lTqmYWl5fVAKbn0r4gnTs1nYWl5zJWxF9nHCmAY/D4HALpgplLPmJ5On0xMlBw9PJN77zo22OWYAHuB3+cAQBeESj1jejp9Yx8rgGHw+xwA2G5CpZ5Zm55++Z5K2z09vYvNwJs+Z983Iu97fW3sxFh26vXSl/4ZyjiSYY0FAAB2ilCpZ3ZienoXm4E3fc6+b0Te9/ra2Imx7NTrpS/9M5RxJMMaCwAA7CQbdffQ2vT0x8/ekEMz+7f9Q00Xm4E3fc6+b0Te9/ra2Imx7NTrpS/9M5RxJMMaCwAA7CSh0h7UxWbgTZ+z7xuR972+NnZiLDv1eulL/wxlHMmwxgIAADtJqLQHrW0GvtFWNwNv+pxdnHs79b2+NnZiLDv1eulL/wxlHMmwxgIAADtJqLQHrW0GvvYhajs2A2/6nF2cezu1qW80qjlz9kI+uHguZ85eyGhUd7rca9qJ13qn+tn3900bQxnLUMaRDGssAACwk0qt/fog3Mbc3Fydn58fdxm7kqu/XdloVPP+haV8YOFcbpjal3PLK7n14A257eCBXbXh+BpXf+unoYxlKONIhjUWAADYqlLK/bXWuU3vJ1SCTzpz9kLuvOe+h+2vcmR2OvfedSyHZva3vh8AAADsNk1DpcmdKIZuXOlf1pPsyGyhIcxKupKhbDgO9M9u+30IAACbESrtUldbfrV/ciLHX/vWay7J2urSraaP73KJWFcfztY27L18BtLVNhzf7H4Aye5ZMgsAAG3YqHuXWlhaXv9wklyaJXPi1Hw+sHDuEccWlpYbPfby+7U993af52rWPpzdec99OfbKN+bOe+7LAw+e3ZaNsoey4TjQL139PgQAgHEyU2mXutryqxum9j3i2HYv3Rr3ErGrfTjbjv2MJiZKjh6eyb13HbvmLKim9wNILJkFAGCYzFTapdaWX210ZHY655ZXHnHsaku3Nrtf23Nv93mupusPZxMTJYdm9ufxszfk0Mz+qwZFTe8H0NXvQwAAGCeh0i51teVXtx68ofOlW1tdIjY7/aicOXshH1w8lzNnL7RatjYa1ZRS8uvf/vT83HM/L0/9tE9df+7t+nA2GtXrrm8v8noxBF2/jy2ZBQBgiEqtu/cD4NzcXJ2fnx93GWOzG6/+Njv9qLz7zMeva7PaK210+8qve1J+6b+/L//0K45u2wbgNtNtzuvFEOzU+9jV3wAA2C1KKffXWuc2vZ9Qie3S5APTmbMXcuc99z3iqmlN9kO62mN/80VflJTkExdHW/6gtpX69iKvF0MwtPex8AoAgK1qGirZqJtt0fRf+reyH9KVHnvoxv05c/ZCvu2X79+WGQY2023H68UQDOl9bPYgAAA7yZ5KbIuml8veyma1V3rs3V/2xPVA6Vrnbcpmuu14vRiCIb2Pm/4uBgCA7SBU2sX6tEFy03/p38pmtVd67O03H9jWGQY2023H68UQDOl9PKRZVwAA9J/lb7tU35Y4rP1L/+V7klz+L/0TEyVHD8/k3ruOtd7v40qPramNztvUVurbi7xeDMGQ3sdNfxcDAMB2MFNpl+rbEoc2/9I/MVFyaGZ/Hj97Qw7N7G/1we3yx958YP+2zzDYSn07pU+z1HbD6wV7xZBmXQEA0H9mKu1SfVviMK5/6R/SDIOm+jZLDXa7If1M7cXfiQAAjI+ZSrtUHzeWHdeMlb02U6Zvs9Rgtxvaz9Re+50IAMD4CJV2KUsc9q6rzVIbjUbbuiSuT0vsoEt9m/kJAAC7heVvu5QlDnvXlTbifdZnPyYfWVrOt73u/m1ZvjOk5UCwGZtbAwDA9Sm17t7ZB3Nzc3V+fn7cZeyI0ahmYWn5ugKkKz02yXU/31Zr3Mr9uqh7J867lf5d6bkuD3xe/61fkH/8mj96xIfi//ufHMvKKK3Pe+bshdx5z32PeL577zqWQzP7r6vurWral6bHtvLe5JKhvF5DC1GH0pch0ZN+0pf+0RNoxs8KO6GUcn+tdW6z+5mptAts5QPPlR576gWfnwsXR9v6AappjVu93/7JiRx/7Vs7++DXxXm3+wPrlWapXWn5zqEb9+dDH/3bfNsvt5+91LflQG3ex5f3qun7fWjBQteG9HoNaebnkPoyFHrST/rSP3oCzfhZoW/sqbQLbGUT2Ss99gML57Z9U9qmNW71fh9YOHfddTfZI6iL83axCfDlG/FeaeP2u7/sieuBUtvz9m0j+Dbv48t71fT9PrTNmrs2tNdrKJtbD60vQ6An/aQv/aMn0IyfFfpGqLQLbGXWyJUee8PUvm2fhdK0xq3e74apfY841qTutUT/znvuy7FXvjF33nNfHnjw7COCpe0+77Wecztn/Vxp4/bbbz5w3eft20bwbd7Hl/eq6fu9b7Oz+s7r1U/60j960k/60j96As34WaFvhEq7wFZmjVzpseeWV7Z9FkrTGrd6v3PLK4841qTupon+dp/3Ws+5nbN+Ni7fue8lz8y9dx3LDfuv/7xXer5xTqlt8z6+vFdN3+99m53Vd16vftKX/tGTftKX/tETaMbPCn0jVNoFtjJr5EqPvfXgDY2fr+ll5ZvWuKX7PXcutx684ZqPvVq9TRP96z3vtRw8MJVTL/j8/MLznpZffeEX5hee97ScesHnb/usn8uX79x8YP+WZhv1aTlQm/fx5b1q+n7v2+ysvvN69ZO+9I+e9JO+9I+eQDN+VugbV3/bJcZx9be2m8Bt59XfRqOa9y8s5QML53LD1L6cW17JrQdvyC2zN2Tx/Ceu+Nhr1buwtNzoambXc94mr/+4NtMb0pUhXP2tf7xe/aQv/aMn/aQv/aMn0IyfFXZC06u/CZW4qnFeVv56zr3xMU/9tE/Nt//9J+Tggan83U+dzmNu3J+/Wjz3iLDotoMHHvYL+MzZC3nZve/I133ep+VTpx+Vj57/RH7j/r/Oj975pOse8zhfRwAAAGiraag0uRPFsDuNcxO46zn32mOe+mmfmu/6yqN5yW+84+GXlf/EKD/whj992Gyhy41Go3zzF93+sMe+8uuelNFotKNjAQAAgL6zpxJXNc5N4Nqce20fpZVa8wvPe1q+5x98MlBKNlxW/nWbb9S9UvOIx77kN96RlS1M6LOZHgAAAENkptKYjWs9bJPzrm0wffmSsattAredeyqtbUB3+T5Es9OPypmzF9YfOzv9qLz7zMcfdr//8I1/L4du3P+w2UFNLytfa73i/bayTPRqY9mJzfSst+4nfQEAAIZAqDRG49rAuc15L1zcfMlYm+dser+Nl7S/VoD0+m/9gvXbyaUA6EX/8Y/zw1/9uXn+L75t/fnWLit/+b5Gl88WetTkxBXv96jJ65/Ud6Wx7ESIMM4Nwrk6fQEAgP+/vTuPk6K88wf++fY5pzAMgxdyRBFDcBAGUDTJGs/kp8YYUFcEAiiOGmVXjYm/bIhmSXYF4po1XmBEBI+IUaOrv6BZN8b1CohXlIAXIhiUYZiBOXt6up/fH1XddHVVzVRN38Xn/XrNy6amup6jupzup5/nU+QVXP5WQM0dPbj1j1uw6OxxeOSyE7Do7HG49Y9bTEuyclFu+kCM1VIwp/vl6pjpt7Rv6Yqa+qulM2o5s2j00MoB3VY+4BMsm1Fv2G/ZjHoEMvywn96WfAweuOnrUpBY5vhZSyea2iKIx7N/k4F8lOG180LO5eP1RURERESUT5ypVEC5CIV2wmlwtJuA6VwcM51Vf62eP9VyZlFF2G+aGQSg39lCXT0xLF2nDVwl7v62dN0W3D5zIlDZbxWLipcCwvMxuydfM4i8dF7IOc5QIyIiIiIv4kylAspFKLQTToOj3QRM5+KY6az66+Y//A3LZzWYZiANrQybZgY5mS0kImhqj6BxzUZcuOI1NK7ZiKb2CERK70OflwLC8zG7J18ziETE8ryU4muMnOMMNSIiIiLyIs5UKqBchEI7YRfAbRWC7TRg2mmot5vQ6vQw47hFfz23aRcWnzt+wHlF6WWE/IIl0+tNs8f8Jfh5v5AB4dmWj9k9+ZpB5Bd45jVGznGGGhERERF5EQeVCigxk6S/8OhcMAVwz56MT1s6MWflesMARFXYj8Xnjk8OFIX7CKx2EurtNLTaaqnIQ5ceb9lfPp8PddVh131gVcby2Q14ccsXhuVv97+yFb84r9718QutUAHhuZCPa8VpGZneuc3n8+H+V7Z64jVGzhXy//dERERERLkiuZ4Vk0uTJ09Wr7/+eqGrMWCFythoaovgvDtfNn24Sb9jmt22J648yTSIY3dMq32dfCi3Ot4Z44bhn047Go1rNg6ov9LL9fuAb99urvNDlx6Pmb/5iydyT7xy6/p4XOGT5g7TTLhRtZV5zVTKxjXLbB33vPA65nknIiIiolIiIhuVUta3f0/BmUoFVKiZJHbLMCpCfkfbMgnqdvrByup4mSx1s5yVNKsBdVVhQzk7Wrrg94knZvd47UOsk5lwmQoHfH3OzLPLxbEaPLXjpRlk+eCV1zHPOxERERF5EYO6C6wQt5q3C3Du7Ik52pZJULfTsFq74yWWurntL6tyGx/YiIWnjrGsc77PSS54KRg4X0Hdc1aux7xVG3Dhitcwb9UGzFm53lBGtnJxCnHdlyovvY553omIiIjIazioVGDxuEJTWwSftXSiqS2CeDyz5YhOjpcIcDbcMW32ZIysrTDdRc1qm11Qt+mYFvs6/VDu9HhO22xX7uihlaYyEoHlqcdzc56yfU4HykvBwMUS1O2lO+qVCi+9jomIiIiIvIbL3woo28s63BzPtMwn6MOImgrD0oya8iA+bel0HNTd39IhAAgGfJZhtcG0fTMJ9LZqs125FSG/qc0fNLWbjhcO+Ewh5lb9WkxLdZz2dSkolqBuL91Rr1Qw4JqIiIiIqHgxqLuA3IRb9yceV/h8XzcuWP5qv8ezK/fxK0+EQPoNss4kqHtPRwRbPm/D9b/bfzv1ZTPqMfaQagypdH8HNzflfrSrHdesfTtZ7q0XTMCYg6sQjSHZZgWF7975iqMQ80wDyzPhJLjYrs1HDqsaUF8XUj4G65yW4YXQ6GzJRV+kH9NuoLfUMpWIiIiIiEoJg7pLQLaWdSQ+DHdEeh0dz67czkgMs+7df9czuyDrTIK6u3piWLpui+F26kvXbcHtMycCla6a7arcaG8cwbSZVGVBP3a392DufRuSbX7gkuMdh5hn0g+ZcDr4YdXmYMCHaG88a3XJl3yEHDstI5GLc6DLxUCf3THH1FUx4JqIiIiIqAhxUKmAsrWsIxFku+jscY6OZ1fu1t0dpiBrqxk6fQV1Oym7qT2CxjUbM2qz23JjCrjqoTctZyCltnnr7g7L47kNLM/lUh2ndyCza/PaxmlZq0s+5WMwhwNGzmXjTnj5OCYREREREeUOB5UKqLYyhNXzp2Jbc2dyJsnI2grbMGq7ZSaJ2TF3v/ARlkyvx48ee8fwLX/68azKPWJIOa5/9B3DfqlB1v3lxzjNmsk0k8ZqaYxVHybCtpNL+QSOZiDd9vwHWD67AY1rNu6v3+zJCAd9pn5IL6O2MmTbPqt9AQxo6VBPbwx1VWHDbK+7X/jINBtKKWW5X7aXvLpZApXJcql8LDvL19I2Lyyhc/o6dHvMQoVye+n15RVe6i8vtcVLeF6Kj5fOiVfa4pV2AN56n8fzQsWEg0oFFumNY9GT7xoGINL1t8wkMTvmze2t+OWz2tKy2soQBleEYHc9ppe7fHYD6qqNAzvDa8rh90lWg7rd7OekH1bPn4pI1NiW1fOnmjJYls9uwBnjhuG5TbsM7UsfXqmrDjkOMbfLeUlfQpVp+He68pAfP/zmWFMuVXnaAJnT/TLhZglUJsuliilTqVTKybVcvL4KFcrtpdeXV3ipv7zUFi/heSk+XjonXmmLV9oBeOt9Hs8LFRsGdReQ01Dn/vZLvRjrqsJYeOoYjKitwM7WLqx+9RP84rx6R8d76NLjMfM3fzEMxPznf79vGojJJKC6qS2Cf3niHUxvOCI5u+GxjdtNdbTrr/TnDioP4gePvm0o9765U5KDTKl1WT1/qmEQZ9mMeoyqrcD5y19Lbkvtg9TnPnXVSYjFUwK9lcJ37zIHej9+5YkYVl3mqG+chn+nj947LXtXW7dl6LhVHQfKTTB5JiHm+QhAz1fIer7KybVcvL4K9cbCS68vr/BSf3mpLV7C81J8vHROvNIWr7QD8Nb7PJ4XyhcGdZcAp0s9+tsvETD82OXTsKstgisefCP5gWzJ9HrE43FHx/P7xDDDJh6PGwaU7Ornpi3xeBzfO3G0YYmeVR2tWD33/vlTTeVWhPyWdenoiVkGhKe22aoddVVh7GztRuMD+5fEPXipdaB3d9TcDru+cRL+bfUh2y5MPD2AO9obd7RfJtwsV8pkaVM+lkXla+lVIZd4ZVMuXl/5CGS34qXXl1d4qb+81BYv4XkpPl46J15pi1faAXjrfR7PCxUbZ+uOKCcSSz1S9RWs3dd+Pp8gppAcUAK0C/JHj72DWNpkNBGxPJ6IFlJ8eE0F6qrD8Pl8jurnpi0xheSgUF91tGL13E+bO03ldvbELOtSHvSjcc1GXLjiNTSu2Yim9ghCAb+hzVbtWHjqmOSAUqLcuFKWZfgtPvva9Y2T8G+r4OJEmHh/z3V6TjLhpoxM6lNsbSmFcnItV+1IhKXv//9Q7qc+e+n15RVe6i8vtcVLeF6Kj5fOiVfa4pV2AN56n8fzQsWGy98KyOlSD6f7fdbSiZOW/MlUzss/+kZyFk4o4IdA4aOmDlynLxsbXlOOW86fgFG1FTh4ULmh3E+aO0wh2KNqKy3zcpzs+1lLJ6566E1cfvKRhnDf22dOxOE1FaZjpi77ivTG8NW09k08YjB+/p3xhllEq+ZNQXN7j6F9S6bXY/TQCmz5vL3P+lm14+iDq0z9+vCC41ER8mNPRzS535DKII4YUoEhlebla6bzp4d/95epZHVOrdqcyesmE/nMVHL6WnRT9/TQd7ucLCdlOA0ZzEVbCsFLa+CL7Vohb/WXl9riJTwvxcdL58QrbfFKOwBmKhUrL7XFi5wuf+OgUgE5/XDpdD+7jBOrrKSAD/h7a6TPAZFcDBjs6Yhgy+dtpnDfsYdU91u2Xd7Ro40nYHPKYNExh1ThxqfeM+U2/eSscYZ+cDoQY5Ut1fi1UTjnuOG4PGVg5+5ZDTjm4GoE0oLH7c7fiJoKtHRF+xyEsFtnnJ7xZPXcfA1e5OPub9n+g2N3vDF1Vf2ek0zr56U/nl66Wwfv1FJ8vNRfXmqLl/C8FB8vnROvtMUr7QB497di5aW2eA0HlUqA09BqpwFmVgM2d148Cbf/zwemsG2rkOjHrzgRIrI/EBrKcpDKLoTZSVuchvtatfmMccNw1SljcGVKZpRV+84YNwz/dNrRaFyzsc+BIau2OA0xtxvgchNQ7XRgaKADEJmEoruR6R8CJ8/PdluyHQqYr8ByIiIiIiKifGBQdwlwGlrtNMCsqyeGpeu2GMKoBbAM27YKie7siWHWvfsHTh6wCaO2Ck5z2han4b5WbX5u0y5cfcqYftv33KZdWHzu+AGFjjsNMc80oNoq/NtqsCiT4FyNP9MAACAASURBVOJMQtGdynTWjfMloNltS7ZDAfMVWE5ERERERFRMGNRdQE5Dq90Eeje1Rwxh1LvbexyHRG/d3WGoS2/MOoxaxDxYkIu2WO23u73HUft8Pt+AQsedhphnGlBtFf69YPXraO7oMT1/oMHFmYSiO2UVJG7Xjkyen+22ZDsUMF+B5URERERERMWEM5UKSCllOWMhfUlibWUIq+dPNWXj1FaGTPvdM2eyYdbHyNoK3DN7MhasMYdED68pNywPu//lT7B8dgMOG1SGsqAfZQHB7TMnoiUljLqmMgi/mJcsxZVCXVXYMIvo7hc+smxLeh3vmTO5z7bUVYWx8NQxGDW0Aj4RnDFuGJ7btAvDa8oxtCqEVfOmYPueLkPf1JQH0dQWQU9vDMGADyG/YPmsBtPMoPRy/QLbNg+kHXbnb3RdpYtZYANbXqYcnpNMyujpjVmWEY/Hk/2ferz0cpzO2nHTFifcnL9sH8/p9VwKvLQG3kttISJneN0TERFljoNKBZSYsZCerWI1YyHSG8eiJ981fGC1Eg74sPjc8ckPqwBQVeY3bKsq8yMaU4Zt1WUBnD95OO7534/xvRNH44oH38CyGfUI+MRQ7q0XTEAgIKYlS482noAffnOsKYC7PGRuS3odwwHrCXPhgA+3XnAcyoI+XJGWo3T1KWOwu70HoYCgJ61vVs+farqL17IZ9Xjijc+w+NzxGFFbgaa2iGW5wYAP0bTj3XrBBAQt9nXaDqvz99Clxzs695ksLysP+R2dk2yXcesFE9AW6cXc+zaYQrDTz4vTfnDaFjfcnL9sH8/p9VzMvBY47pW2EJEzvO6JiIiyg0HdBeT0DY3TYF+7/W694Djs6exJzvAYUhHCNWvfMux339wpeHj9Nlx/5jHY2xVFc0cPhlWHcPXDb5mO92jjNNz41LuG0OSDq8O484UPTUHKPz/v2H4DuPtqy6Kzx2Hx05tM+y86exwa12zEfXOnJD+cp7YlfdvwmnLc/N1j0dETQ21lCIPKg1j27OaMgsSdBkfbhY6nh4lncu6t7Grrxk+e+KujczLQEGy7/rIKgl/bOA0XLH91QP1g25bvHGsIl3f6LbNdvz5+5YkQZO94Xg7q9ko7AG+1hYic4XVPRETUNwZ1lwCnIcxOlwjZBUKXBX3JgZnhNeW46+JJqKsKG/YdWhXC904cjXmrNvS5346WLkRj+0OTE0vT6g4KWwYpq7hx0NJtWwaXBy33H1weBABUhPym31tt29HShUMHl+N7K9dnJUjcTXC01RKx5zd94WhmSyahziquHJ2TTEKw7frLKgi+N2be1ypU3eoasGtLNBbHhStec/0ts12/dkaMYfWZHs/LQd1eaQfgrbYQkTO87omIiLKDQd0F5iSEOZNw64WnjkkuHQO0N0xXPPgGFp46xrBfeShgCkK22m94TTn8PkkOKP3gzLFY9OS76IzEHAUp9xWEbdWW1q6o5f6tXVEAQGdPzPR7q23Da8rxaXNn1urnJjg6sXRr8dObcOGK17D46U2YNW0klq7bjHmrNuDCFa9h3qoNmLNyvSmgOpNQZ6d1zCQE266/rILgA37rsHRzqLrzIPiuaNywzWlIuF2/pofVZ3o8Lwd1O71WSoFXzgkROcfrnoiIKDs4U6nAnIREDiTcOrHf6KHWgdBHH1yF++ZOSc6SCfrFcr+RtRWGQO975kxGwKftu+jscckP+u2RXsvnpy+vTA3CHloVQnkoAL8PgFKIx1Wy7Ykw4+b2Htx18SRDptKyGfVYum5LMog8PfT4qGGVpm3Da8pwz4tbsXx2Q59Bz06CuuNxhd543HFwdG9cJbOAEv1y5YNvYNHZ4/Dcpl2G/kr/htTu3KcGkdvO7nEYBG+3n1/Qbxl+AZZMrzfMILrl/AmorQqZXjfDqsJZb0tbd9S0zcm3zFb9unx2A37yxLtZO55d27IdEu5GNkNp/QLccv4EXPfo24Zznx5qXwrcnJNSCPYthToSFVoh/19MVEr4N4WI+sNBpQJyExLpJtw6db+AX0xByGeMG4bWrqghKPjhBSfYBCabyw0EtGOmLk3b1RaxfH56wHUiCPvh9duSgeB2bY/0xnHN2rdQVxXG4nPHY/TQSgT8gp2t3bjhW8ckB8Pau2OmoO5I1BiEvHx2Ay4+YQS+/9CbhsGp9KDn/oK6E+esvbvXcXC03RKx9DeuVv1ltUSypjxoCry2et0EAz5H58QqMP6MccOwu6On36wjn8+H+1/Zahhcu/elj3Hz9HrTkjbA/PqsCvszaktrp3FQyc23zFbXVF21+Zw4OZ6b8zSmrirrIeFOZDuUNhjwaUtrU9pRFvRZhtoXO6dLkUsh2LcU6khUDJxe90QHMv5NISInGNRdQG5Cq/sLUo7HFT7f142mtggqQn50R2P4+95uDB9cjs6eXlyzdv9sgjWXTMXse9cbyn20cRp643HTIEnA58P5y1811O/RxmnY0dKJ9sj+wZyJRwzGD84ca5ixcusFE3DksCoMqTQHYdsFcD9y2QkIBfxQUJbBzBdNHWkIgHYT1G0VHv3kVSciHt8fzOzzKZx7u31Qd+Kc3fzdY3HD43+13S/V31u7TAHVicGvOSkZT8tm1GPsIdWG/rLi9HWzpyOCLZ+3mc5pehlWbxgeuvR4zPzNX/otw82bDat6250rJ2259YIJqKkMme4y5+SNjl0fprY70zdOdmVYBZbnIxw226G0TkPtS4WTb2JLIdi3FOpIRESlgX9TiA5sDOouAU5DIvsLUrb6YL9kej0e27gd1585FnHlN8wmSJRjKEMpLF23xTDjZOm6LbjhW8eY6heNxxEM+FAFSS5Ne3N7K+5/ZStWz5+KvV1RtHZGk7N+EnVs7uhBd0/fAdw7Wrpw3aNv45HLTrBs80Flxpesm6Du9PDouqowPt8bMczGWT6rwTqcXG9H4pxVhgOWZaQHegPWS8TuungS7n7hI1N/3z5zIlBpOoSB09dNV0/M8pyml2H1ba3TMtx802t1TLtz5aQt//b/NuPuWZMG9C2zXfv8PnF9PLvBCLsyohaB5U6X2WUi26G0TkPtS4HTwdFSCPYthToSEVFp4N8UInKCg0oFFAr4cca4YabZOMGAz5DDErcJKX60cVpyv8SHodTfLzp7HHa0dFvO5ElfStTZE0NTuzbAkmAXuOwXwVX6MrKJRwzGorPHYewh1dja1IHr1r6NN7e3Jvdd2zjN8IHtvrlTcMa4YRhSGTLVYXhNOYZVazlFPbG4ZZsfXnACHl5wPHwiaO2KQunPS2+L1bF9IoZMpUMHlSUHlBJlND6w0XJGU+KcJP5dFQ5YliEipkGGYMC8RGxQRRCvfNyMtRt3mJ7fX76QiFi+btIDkkXE8pxaBSknAuMTmmyWM2YSYJoIdnZyrqxC6K3akgj5dstqyZ/V0sD+9DUYYVuG33opX67DYe3qM9Bys328vuQ6z6G5o8f0/9AFq183fRObzzYPVCnUkYiyi5k3lCv8m0JETpRe+IWH1JQHsfDUow13BVt46tGIRGM4786XcdKSP+G8O19GxG5mQyyenJJq9fvB5UHLmSB/+OtO3DWrIXnXk+E15RheU4a707bdPasBQ/XA5cS2JdPrIbJ/ptOb21vRuGYj2rp7MW/VhuSAUqIOSqm0D2wKV50yBsue3Ywl0+sNx142ox7Xrn0bi5/elHx+epsSwcw3/2EzFj+9CYcNNtf78Joy/OrC4wzbls+ahPKQ39DXPhHUVYVNZYwaWmnqh8Q5ueqhN7FshtYHd148ybDfnRdPQllQsOWLNsP5+2JvBD/85jFpZcPU/iXT66GUMjx3yxdtiMeNS1RDfsFVp4wxHO+qU8YglJaQ7Lcpw0mQciLANPW5VgGmiUGV/upsV5+ayiCWz27ot5ya8qDl67OmPNh/YyzYHa+9u9dRWxLsBiOaO3ps+7CuMpTVtjjl9JwW6nh23LzGBsrpN7H5anMmsn2tEFFxy8f/I+nAxb8pROQEM5UKyG6dcvpMmf++9h8w9771pv1WzZuK0/7jz1g+u8Eyn+i+uVPQ3NGDH+h3Z0q4b+4UPLx+m2mmy4KvHYk9nT39brvxnK/gwhWvJWcqXX7ykRh7cDW27u7Abc9/YJqppJTCSUv+BAD44zVfx7xVGwzPra0MYXBFCNc/un+Wk12b75s7BfNWbcCis8ehcc1G27bMO2k09nX3Jo8d8Alm3WvOCLKalfTgpcdj8+dttllOE48YjNsumojFT79nKje1b1KP+cvzJ2BvV3T/TKXyIFa+9HG/mVFW69btMprWNk7DYYPLDfvd9NS7pjJu+vZ4w352sp0xY5cNdvP0esTi6Lec/nLF3LA63pCKEK5Z+5ar3IDPWjqTr+1UL//oGzi8psKyD5s7erLaFjey/W12Pr4dz0eeg5syin1GQLavFSIqbsy8oVzi3xSiAxszlUqA3bfj6dk/XT29pkyeJdPr0RuLYfnsBhw2qAx3zJyE7z+0/05qd108Ca2dURw6WJu188+PvJX83cjaCjy3aZfhdvYAcMlXv2RYXgQAN3zry8kP2olywwEf7pkzGbf+cYsh9+iMccNwywUTkplKNZVB+AXw+fdPnW2P9JpmOQHAI5edYJjlZNfm7uj+TCZAy+Tpry3/fe3Xsber17KvR9ZWJOuWmC3199YuUz9c8tUvJR+/ub0Vu9sjluX+y1njLMsRwHDMiUcMxs/PG2/Kc/rJ7/u/pb1SyrKM9AFiv8Ayl8rpLd/Tl8RZcbPWvrYyhGtOH2taKja4vP8P5T29Mcv+vvGcga3ptzreI5ed4Do3oL9p4VZ92Fdb+lv66Ibd4Ec23wRm+3hW8pHn4ObW4vlocyayfa14TbEPChK5xcwbyiX+TSEiJzioVEB2t0lPnzu2u70HD6/fZsjkeXHLF5g1bTRqK7W7vL3xSTMeuewERHrj2NbciZ8++R6a2iNYNqMeB5UFDc/d1xW1LNcqP2lfV9Tw3Ptf2YpfnFePsQdX46Zvj0/OmJl4xGB878TRhruZ/ec/HodgwIfB5fs/sHVEeh2VbdXm+1/ZiukNR2B4TTlau7RlcHaZPInfD68px/Y9xsGj1P2CfuMt0euqw1i6brOpH9Lr19pp3Ye9ceWofXXVIdNt5YdUBtHUHjGVbZUv5GR9u89nznJKnL9scbPWPpPbN+cjD8hpvlMqN4MR/bUlFlfJb5tTs5kG8oHXS7cAzkeeg5duLc78C3teui6IEnjNUy7x9UVEThTV8jcROQ3AdwHsAqCUUj/ra/9SX/6Wepv0uqowfvx/voxDBpXB7wO6o3F09MRQHvTjoDI/drX14PIHtFktjV8bhe+dNBrRmELi9AX9gmDAZ3mL70cvn4bNO9swuCKIwRVBVIUD+GJfJHm8xADQQWUBzFu1/832XbMaUFcVwvY9XYgrhc6eGEbWVmBUrXbrsB2tnfj60hcAwHYJ3uNXnKiHV8cRU9rsmY93d5huDT+oIoj5KWXfMXMifD4frkip45Lp9Xhxyxe4cOrI5GyowwaH4ff5sH1Pl2Fw5qanNqGpPYK7ZzXgoPIAgn5Ba0cvFqxJ+TAxezKGHRRCeyQGv08Q8vsQDgo2/b3/W9evmjcFkWgMu9p6DOUCQHskZpgddM+cyagK+/Hhro7kvsccUoUbnzIun3vjk2acP2WEoS0jayswoqYCLV3R5IfdmvIgPmhqN30wGlNXZdrv05ZObGvuNBxvVG2l6QOU1bf3APr9Rt/uQ1p6Xfr6gO6kbLu2pPeN04GAeFzhk+YOw/GOGlaJ9u6Y8TXi4AOn25kPVmUfMaQcS9dtNnwT6Gb5QnodFJTl/wuyvRwiF7M+0o/p5nWczXJzMag00OvMbRnpry8v9VcmZdgtE3rqqpP6XYKbKc6QKk5eOC9eGyz1wjnxEr6+ilcp/h0udDm55pV2pCq55W8iUgHgbgBfUUpFROQxETlVKfV8oeuWK4nbpC+bUY+hVSHsbu/B4qffs1yy9OKWL7B6/lTElIIA+KylC9esfduwbKuuOoy6qrDhDXNdVRjN7T3JO8Al9n3ijc+w+NzxGFlbgV1tEVSG/YCIYeZMLB7HT598F/NOGo2l67agqT2Ce+ZMRjyu8EFTOz7f25389mJwedBy+nVnNIZZv/lLsuwHLjne8tbw/3ruVwzbHnztUyz4+mgsPnc8BlcEUV0WRGXYh0Hlww2zoe66eBJ8vrihfctnN+D2mRPx/hftWPT7d7V6z56MqjJ/sn0KQDAgOPeOV0x9+MQbn5nqd/vMiYa+CQV8aO2MGsq95fwJqAj58ctntfZ9+ZBqlIcCyUGg9Dpe+Y2jknfRG15TjttnTkSk19iW1fOnWg4gVYX9hvpUhf2W+4UDPsPx7plj/n+C1RuG1fOnItIbd/QmIn3GlV1drJ5r92YlHPAZzvPq+VMRiRr75p7Zk/FpS6dhPzdvdNL7Ov010tkTQ9jB3eAGshwqvezlsxvQ1NZj2Mfp8gWrPnzg0uNzvhwiF280bV+L6efe4nVcbG1xUoab68wN02vbI/2VaRlWy4TqqsLY2dqNxpQvMEqhLZQ5r5wXL8209Mo58Zr093lO3hsVIy+9vkr173Ahy8k1r7RjoIrp/wrTAGxTSiXW/7wM4KwC1ifnErd839fdix0t3bj+d1oQXmJACdA+CP7osXcwaVQt5qxcj3DAj+179g8oJfa5/nfvYPueLiw8dYyhjIWnjknOSErd99RxB2Peqg2Ys3I99nZFsbM1gnn3bcC8VRtw4YrXMG/VBlz10JuY3nAErv/dO7j85COxo0W7s9Wu9ggWrH4dtz3/QfJuXq36krpUw2vK0RtThrK37u5I3hr+whWvoXHNRjS1R7C7vcew7VvHHop5q17HvFUbcN6dr+C0//gzNu9sN7Ul8bzUbY1rNuL9L9qTd6Pb0dKFBWtex4e7OpLt29sVTc48Su/Dbx17qKl+ieMl+uajXR3JnKrE86979G2UBf14c3srFj+9CeWhAOqqw2jpipruENa4ZiNaOqKGbS0dUVNbtjV3Wt5dLLUt81ZtwIe7Oiz329bcadrW3GEcvLC6g5lduVbPnbNyvaO6pD/Xrmyrem9r7kzOIErut8ZZ+6xYlrvG3K9zVq53dDw3rMpuXLPRdO06nV5udbzemLK8HkWy90etrzvfZfOYluc+w3KclJuPMpxeZ5mW45X+yrSMxDKOVAtPHZMcUMpWOeny0V/knpfOS+LLjcNrKlBXHS7ZDzBeOideYfU+LxfvjfLBS6+vUv07XMhycs0r7RioYhpUGgagLeXf+/RtBiJymYi8LiKvNzU15a1yuZC4xXptZQgVIT92tNjP+ElsjyuV3Dd9n4qQHyP07CAAyVBuu+OlPrY7ZqLc1P2jsTh2tHThze2tyVk54w8/CHfMnGQoe8n0enT19BqOedvzH+Cui4373XL+BAyvKTNsG2FRb6s69tUXfW2z62erPrzr4km47fkPHJXbrmdGpebqOA1kz6R9bvohfbaKVf3sjpfN59o9P9vts+K0XKfHc8Ou7NFDKw2vO6e3qrc6XiLoPv16dBrS7kQuwmEzfT1ls9x8lJGLthWqLaVQRiIDLfW6GD20siTbQpnjeSk+PCfFx0vnhG0pvjLyWU6ueaUdA1U0y9+g5ShVp/z7IH2bgVJqBYAVgJaplJ+q5UYiSPn6M4/BjpYuw4yf1Bdl6nafiG2gcGdPDDtbu7D43PEYMaQCCoBPpN8g69auKEJ+69DwRLmp+wdT9k3cwe23l52AlS99bAqFvmjqSEObm9oj6I7GDfvd+9LHWPC1Iw3bmtoijoKU++qLVOnb7Pq5s0e7A1dqXbqjcVOAtl25w6rDeOLKkwxTz+1CDtPrmEn73PSDk+Bvp6HVmQZeZ9I3TttnxWm5To/nhl3ZFWF/1kLM7YLuCxXSnskxBxKgno1y81FGLtpWqLaUQhlWy4QUrG+uUOxtoczxvBQfnpPi46VzwrYUXxn5LCfXvNKOgSqmmUqvAhgpIolwkpMAPFPA+uRc4hbry57djJrKIJbNqMdjG7dbzjB4bON23D2rAWVBwfAhWnh06j7LZtSjpjKI1a9+grKgD3EVR0tHD/w+mL6ZXTajHne/8FFyltBjG7djZG2Fab9Euan73zNnMoZVhU37DqsO45rTxmLx05tw4YrXsPjpTbjmtLHJu64l9rtnzmTUVoWM+50+1rStLOgztdGqjlbb7pkz2bLc1G2J/kzvl5G1FRhWHTbUpbbK/O22XbmHDio3TT23+nbcqo6ZtM9NP6TPfrGqn93xsvncTPvGafusOC3X6fHcsCt7aGV4QMsX7M7BNaePNV9nWWyLXTsyKSPT11M2y81HGbloW6HaUiplpC8TGlpp/ntWKm2hzPC8FB+ek+LjpXPCthRfGfksJ9e80o6BKra7v50OYAaAJgBRr9/9DdifEh+PxwEA0biCXwAFgVIKIgK/AOITBHyCrp4YKsN+9PQqRGNxxOIKfp8g6PchphTicYWg3welFHw+n+nuQj4R+ASIxOII+nzwCSz3syo3dfaE07sYDWRbouxgwIfeuEK0N571MhJ3ldrT1YPuaBx+AcpDfgwuz6yMTO5wlq9tVnXM5K5Umd7RKtt943QwJh934nJTdqZ3/CpEW/Jx97dSbouTMoDst80rd4Tx0l1nvHhHGC/geSk+PCfFx0vnhG0pvjLyWU6ueaUdqZze/a2oBpXc8sKgEhERERERERFRMXE6qFRMy9+IiIiIiIiIiKhEcFCJiIiIiIiIiIhc46ASERERERERERG5xkElIiIiIiIiIiJyjYNKRERERERERETkGgeViIiIiIiIiIjINQ4qERERERERERGRaxxUIiIiIiIiIiIi1zioRERERERERERErnFQiYiIiIiIiIiIXOOgEhERERERERERucZBJSIiIiIiIiIico2DSkRERERERERE5BoHlYiIiIiIiIiIyDUOKhERERERERERkWscVCIiIiIiIiIiItc4qERERERERERERK5xUImIiIiIiIiIiFzjoBIREREREREREbnGQSUiIiIiIiIiInJNlFKFrsOAiUgTgG2FrkeWDAWwu9CVICoBvFaInOG1QuQMrxWi/vE6IXLGS9fKSKVUXX87lfSgkpeI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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "se.scatterplot(data=res3, x='avg_percent_lymphocyte_infiltration', y='avg_percent_neutrophil_infiltration')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }