{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Yelp text data" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "ename": "OSError", "evalue": "[E050] Can't find model 'en_core_web_md'. It doesn't seem to be a shortcut link, a Python package or a valid path to a data directory.", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0mlaptop\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'/media/seapea/Blade HDD/_Storage/Data/yelp_dataset/'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0mtower\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'/run/media/seapea/HDD1TB_1/SharedSpace/_Large_datasets/Yelp/'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 26\u001b[0;31m \u001b[0mnlp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mspacy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'en_core_web_md'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdisable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'tagger'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'ner'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 27\u001b[0m \u001b[0mread\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mReadability\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnlp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0mnlp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_pipe\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlast\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/spacy/__init__.py\u001b[0m in \u001b[0;36mload\u001b[0;34m(name, **overrides)\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdepr_path\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0mdeprecation_warning\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mWarnings\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mW001\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdepr_path\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 27\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mutil\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0moverrides\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 28\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/spacy/util.py\u001b[0m in \u001b[0;36mload_model\u001b[0;34m(name, **overrides)\u001b[0m\n\u001b[1;32m 137\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"exists\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Path or Path-like to model data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 138\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mload_model_from_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0moverrides\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 139\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mErrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mE050\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 140\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 141\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mOSError\u001b[0m: [E050] Can't find model 'en_core_web_md'. It doesn't seem to be a shortcut link, a Python package or a valid path to a data directory." ] } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import re\n", "import os\n", "import seaborn as sns\n", "import dask.dataframe as dd\n", "import spacy\n", "from spacy_readability import Readability\n", "from dask import delayed\n", "from dask_ml.model_selection import train_test_split\n", "from gensim.models import Word2Vec, Doc2Vec\n", "from gensim.models.doc2vec import TaggedDocument\n", "from gensim.corpora import Dictionary\n", "from gensim.similarities import Similarity\n", "from gensim.models import LsiModel\n", "from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer\n", "from sklearn.manifold import TSNE\n", "# from sklearn.model_selection import train_test_split\n", "# from gensim.test.utils import common_dictionary, common_corpus\n", "# from tqdm import tqdm\n", "\n", "sns.set_style('darkgrid')\n", "laptop = '/media/seapea/Blade HDD/_Storage/Data/yelp_dataset/'\n", "tower = '/run/media/seapea/HDD1TB_1/SharedSpace/_Large_datasets/Yelp/'\n", "nlp = spacy.load('en_core_web_md', disable=['tagger', 'ner'])\n", "read = Readability(nlp)\n", "nlp.add_pipe(read, last=True)\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Read in a sample of the larger dataset for necessary trial and error\n", "df0 = pd.read_parquet(laptop + 'parquet/part.0.parquet')#.set_index('review_id')\n", "df1 = pd.read_parquet(laptop + 'parquet/part.1.parquet')#.set_index('review_id')\n", "df2 = pd.read_parquet(laptop + 'parquet/part.2.parquet')#.set_index('review_id')\n", "df3 = pd.read_parquet(laptop + 'parquet/part.3.parquet')#.set_index('review_id')\n", "df4 = pd.read_parquet(laptop + 'parquet/part.4.parquet')#.set_index('review_id')\n", "\n", "# Let's concat and convert to Dask\n", "df = pd.concat([df0, df1, df2, df3, df4], axis=0)\n", "del(df0, df1, df2, df3, df4)\n", "ddf = dd.from_pandas(df, chunksize=2**12)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
review_idstarsusefultext
0Q1sbwvVQXV2734tPgoKj4Q16Total bill for this horrible service? Over $8G...
1GJXCdrto3ASJOqKeVWPi6Q50I *adore* Travis at the Hard Rock's new Kelly ...
22TzJjDVDEuAW6MR5Vuc1ug53I have to say that this office really has it t...
3yi0R0Ugj_xUx_Nek0-_Qig50Went in for a lunch. Steak sandwich was delici...
411a8sVPMUFtaC7_ABRkmtw17Today was my second out of three sessions I ha...
\n", "
" ], "text/plain": [ " review_id stars useful \\\n", "0 Q1sbwvVQXV2734tPgoKj4Q 1 6 \n", "1 GJXCdrto3ASJOqKeVWPi6Q 5 0 \n", "2 2TzJjDVDEuAW6MR5Vuc1ug 5 3 \n", "3 yi0R0Ugj_xUx_Nek0-_Qig 5 0 \n", "4 11a8sVPMUFtaC7_ABRkmtw 1 7 \n", "\n", " text \n", "0 Total bill for this horrible service? Over $8G... \n", "1 I *adore* Travis at the Hard Rock's new Kelly ... \n", "2 I have to say that this office really has it t... \n", "3 Went in for a lunch. Steak sandwich was delici... \n", "4 Today was my second out of three sessions I ha... " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# usr = dd.read_json('G:/SharedSpace/_Large_datasets/Yelp/user.json', lines=True, blocksize=2**28)\n", "# biz = dd.read_json('E:/_Large_datasets/Yelp/business.json', lines=True)#, blocksize=2**28)\n", "\n", "rev = dd.read_json(laptop + 'review.json', \n", " lines=True, blocksize=2**22) # lower blocksize (i.e. 2*22) made this work in Linux\n", "rev = rev.drop(['funny', 'cool', 'date', 'user_id', 'business_id'], axis=1)\n", "rev = rev.drop_duplicates(subset='text')\n", "# rev = rev.set_index('review_id')\n", "# rev.to_parquet(laptop + 'parquet/')\n", "rev.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dask challenges\n", "Throughout this project, I have found it to be very painful working with Dask. It is not covered in the course anywhere, despite being a more realistic work environment where too much data exists to analyze things in memory. Arithmetic computations and other analyses across the Dask dataframe chunks pose challenges we haven't seen when operating only in memory.\n", "\n", "Some basic issues encountered with Dask include:\n", "\n", "- Boolean indexing\n", "- .loc slicing (returning many values)\n", "- spaCy pipelines (memory allocation)\n", "- Word2Vec conversions (memory allocation)\n", "- Basic computations (very long turn around)\n", "\n", "Because of these limitations, some of the work and discovery efforts behind the scenes might not be displayed in the notebook.\n", "\n", "### Distribution of review ratings\n", "Let's try some basic Dask computations, verifying integrity and observing the distribution of review ratings." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16,9))\n", "sns.distplot(np.log((rev.useful + 2).compute()), ax=ax1)\n", "sns.boxplot(rev.useful.compute(), ax=ax2)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "203142 Dinner for 1.\\n\\n- Preface\\nI went to Amy's Ba...\n", "Name: text, dtype: object" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rev[rev.useful == rev.useful.max().compute()].text.compute()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Approaching parsing of vast text\n", "Another simple task to test the library - we will try the TfidfVectorizer. I'm working with this instead of the regular counter because it will keep our values between zero and one for the visualization I want to map." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['best', 'came', 'chicken', 'come', 'definitely', 'did', 'didn', 'don', 'food', 'friendly', 'good', 'got', 'great', 'just', 'like', 'little', 'love', 'nice', 'order', 'ordered', 'people', 'place', 'really', 'restaurant', 'service', 'staff', 'time', 'try', 've', 'went']\n" ] } ], "source": [ "@delayed\n", "def ret_count(ddf):\n", " vec = TfidfVectorizer(stop_words='english', ngram_range=(1,2), max_features=30)\n", " X = vec.fit_transform(ddf)\n", " names = vec.get_feature_names()\n", " return X, names\n", "\n", "ddf, names = ret_count(rev.text).compute()\n", "print(names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Success! \n", "Our vectorizer didn't overload the system!\n", "\n", "Unfortunately, the counts are exceedingly high and overpower the other observations making this unhelpful." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def top4(val, ax):\n", " sns.distplot(ddf.todense()[:,val].reshape(1,-1), kde=True, ax=ax)\n", " \n", "fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(16,9), sharex=True, sharey=True) \n", "axes = [ax1, ax2, ax3, ax4]\n", "\n", "for val, ax in zip(range(4), axes):\n", " top4(val, ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Dask hurdles overcome\n", "After some hours of troubleshooting (not shown in project), I comfortable with the distributed dataframes\n", "\n", "## Other memory improvements - Previous attempts at spaCy\n", "In a previous project, I limited my vocabulary and text subset to one million words as spaCy throws an error when too large a vocabulary exists for use in memory. I have since discovered a lazy computation design for this exists within spaCy called the pipe. This allows spaCy to batch the documents and prevent breaking memory constraints. This has been a helpful discovery.\n", "\n", "### Steps to find review value\n", "The steps below will be the analyses we take to find explicit value in reviews.\n", "\n", "#### Graph the count of words\n", "Maybe the frequency of certain words is more prevalent in more valuable reviews\n", "\n", "#### Word combinations?\n", "Are there combinations of words (phrases) that exist frequently?\n", "\n", "#### Readability\n", "Might be a factor\n", "\n", "#### Length of review\n", "Might also\n", "\n", "#### Combining the metrics\n", "Also checking if industries respond differently" ] }, { "cell_type": "code", "execution_count": 345, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['amazing', 'best', 'better', 'came', 'chicken', 'come', 'day', 'definitely', 'delicious', 'did', 'didn', 'don', 'experience', 'food', 'friendly', 'going', 'good', 'got', 'great', 'just', 'know', 'like', 'little', 'love', 'make', 'menu', 'new', 'nice', 'night', 'order', 'ordered', 'people', 'place', 'pretty', 'really', 'recommend', 'restaurant', 'right', 'said', 'say', 'service', 'staff', 'sure', 'time', 'try', 've', 'wait', 'want', 'way', 'went']\n" ] } ], "source": [ "'''@delayed\n", "def ret_count(ddf):\n", " vec = CountVectorizer(stop_words='english', ngram_range=(1,2), max_features=50)\n", " X = vec.fit_transform(ddf)\n", " names = vec.get_feature_names()\n", " return X, names\n", "\n", "ddf, names = ret_count(rev.text).compute()\n", "print(names)'''" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Crunching bag of words, need lemmas\n", "We will try this again with some preprocessing - the benefits of lemmatization would increase the diversity of words selected for features." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Basic text cleaning\n", "def fix_nl(mytext):\n", " text = re.sub(r'\\n\\n', '', mytext)\n", " text = re.sub(r'\\n', '', text)\n", " final = re.sub(r' ', ' ', text)\n", " return final\n", "\n", "# Basic lemmatize function\n", "def lemma_sent(sent):\n", " return ' '.join(word.lemma_.lower() for word in sent if not word.is_punct and not word.is_stop)\n", "\n", "@delayed\n", "def process_n_count(series):\n", " series = series.apply(fix_nl)\n", " spaCy_text = nlp.pipe(series)\n", " vec = CountVectorizer(stop_words='english', ngram_range=(1,2), max_features=300)\n", " vec.fit_transform([lemma_sent(text) for text in spaCy_text])\n", " return vec\n", " \n", "@delayed\n", "def test(series, vec):\n", " series = series.apply(fix_nl)\n", " spaCy_test = nlp.pipe(series)\n", " X_new = vec.transform(series)\n", " return X_new" ] }, { "cell_type": "code", "execution_count": 412, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<5000x100 sparse matrix of type ''\n", "\twith 52872 stored elements in Compressed Sparse Row format>" ] }, "execution_count": 412, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# This cell will test the steps of my approach against a much smaller dataframe\n", "df.text = df.text.apply(fix_nl)\n", "new_txt = list(nlp.pipe(df.iloc[:5000].text))\n", "cvec = CountVectorizer(stop_words='english', max_features=100)\n", "cvec.fit_transform([lemma_sent(txt) for txt in new_txt])" ] }, { "cell_type": "code", "execution_count": 426, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<1000x100 sparse matrix of type ''\n", "\twith 10395 stored elements in Compressed Sparse Row format>" ] }, "execution_count": 426, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cvec.transform([lemma_sent(txt) for txt in list(nlp.pipe(df.iloc[5000:6000].text))])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Vectorized text transformation\n", "The transformation appears to work against new data! We will now attempt the same process against the entire 'rev' dataset. \n", "\n", "Note: This is the same tactic as we tried above (commented out), but we are hoping for better, more accurate results since we are reducing the text to lemmas and cleaning it more." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = train_test_split(rev[['text', 'useful']], rev.useful, test_size=0.5)\n", "\n", "# Had to run this training and compute command after emptying as much in memory as possible\n", "# new_vec = process_n_count(X_train).compute()\n", "\n", "from joblib import dump, load\n", "# dump(new_vec, \"vec.joblib\")\n", "new_vec = load('vec.joblib')\n", "\n", "myX = test(X_test.text, new_vec).compute()" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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vHnzMnfu3EyfPj1Lly5NX19ftZsFwCSbrAkzv2QSAwDUoqZSqVSqdiPK+e53v5vdu3fnySefTJJs3bo1+/bty/r166vcMgAAAGCiavpMiEvlI01NTVVoCQAAAHC1ajqE6OjoyMDAwOjrwcHBtLe3V7FFAAAAwJWq6RBiwYIFOXDgQPr7+zM8PJze3t50dnZWu1kAAADAFajpEKK5uTnr16/Pgw8+mPvuuy9LlizJ/Pnzq92sSbFr16709PSkq6srmzZtqnZzaACdnZ1ZtmxZ7r///vz2b/92kuTIkSNZvXp1uru7s3r16hw9erTKrb+GPEcAACAASURBVKRePProo7njjjvyqU99arSsXH8qlUrZuHFjurq6smzZsvzoRz+qVrOpE5fqX//xP/7HfOITn8j999+f+++/P6+++urovz333HPp6upKT09Pdu/eXY0mUycOHjyY3/3d382SJUuydOnSPP/880mMX0yOcv3L+MVkeP/997Ny5cr8q3/1r7J06dI888wzSZL+/v6sWrUq3d3dWbt2bYaHh5Mkw8PDWbt2bbq6urJq1aq8/fbb1Wz+xJQo3OnTp0v33HNP6ec//3np/fffLy1btqz005/+tNrNos598pOfLL333nsfKPv3//7fl5577rlSqVQqPffcc6X/8B/+QzWaRh36wQ9+UHrzzTdLS5cuHS0r15++973vlX7/93+/dObMmdLrr79eWrlyZVXaTP24VP965plnSps3b77ovT/96U9Ly5YtK73//vuln//856V77rmndPr06SKbSx0ZHBwsvfnmm6VSqVQ6fvx4qbu7u/TTn/7U+MWkKNe/jF9MhjNnzpROnDhRKpVKpeHh4dLKlStLr7/+emnNmjWlbdu2lUqlUumxxx4rfetb3yqVSqXSf/kv/6X02GOPlUqlUmnbtm2lz33uc9Vp+BWo6TMhGpVHj1KUvr6+LF++PEmyfPnyvPLKK1VuEfXin//zf57rr7/+A2Xl+tO58qampnzsYx/LsWPHMjQ0VHibqR+X6l/l9PX1ZenSpZk+fXrmzp2befPmZd++fRVuIfWqvb09t956a5Lkuuuuy0c/+tEMDg4av5gU5fpXOcYvJqKpqSkf+chHkiSnT5/O6dOn09TUlNdeey09PT1JkhUrVozOG3fu3JkVK1YkSXp6erJ3795LPtihFgkhqmBwcDAdHR2jr2fPnn3ZAQzG6/d///fz27/92/nLv/zLJMl77703ejPX9vb2HDp0qJrNo86V608XjmkdHR3GNK7It771rSxbtiyPPvro6Ony9plcqbfffjs//vGPs3DhQuMXk+78/pUYv5gcIyMjuf/++/Obv/mb+c3f/M3MnTs3M2fOTHNzc5IPjlGDg4OZM2dOkrO3MWhpacnhw4er1vaJEEJUwaUSKo8e5Wr9t//237Jly5b85//8n/Otb30rP/zhD6vdJKYIYxqT4V//63+dl19+OS+99FLa29vzJ3/yJ0n0L67ML37xi6xZsyZf/OIXc91115V9n/7Flbiwfxm/mCzTpk3LSy+9lFdffTX79u3Lz372s4vec64P1XP/EkJUgUePUgmzZ89Oktx4443p6urKvn37cuONN46eVjo0NJRZs2ZVs4nUuXL96cIxbWBgwJjGhN10002ZNm1aPvShD2XVqlX5X//rfyWxz2TiTp06lTVr1mTZsmXp7u5OYvxi8lyqfxm/mGwzZ87MokWL8sYbb+TYsWM5ffp0kg+OUR0dHTl48GCSs5dvHD9+PK2trVVr80QIIarAo0eZbP/7f//vnDhxYvT//8f/+B+ZP39+Ojs7s3Xr1iTJ1q1bc88991SzmdS5cv3pXHmpVMobb7yRlpYWB1lM2PnX4b/yyiujT8Pq7OxMb29vhoeH09/fnwMHDuS2226rVjOpcaVSKV/60pfy0Y9+NKtXrx4tN34xGcr1L+MXk+HQoUM5duxYkuTkyZP5/ve/n5tvvjmLFi3K9u3bkyRbtmwZnTd2dnZmy5YtSZLt27fn9ttvr5szIZpK9XL3igbz6quv5qmnnsrIyEg+/elP56GHHqp2k6hj/f39efjhh5OcvZbsU5/6VB566KEcPnw4a9euzcGDBzNnzpx87Wtfq5uElOp65JFH8oMf/CCHDx/OjTfemH/37/5d/uW//JeX7E+lUikbNmzI7t278+EPfzhPPfVUFixYUO2PQA27VP/6wQ9+kJ/85CdJkn/yT/5JNmzYMDoZ/E//6T/lO9/5TqZNm5YvfvGLWbx4cTWbTw3727/92/ybf/Nv8uu//uv50IfO/tb2yCOP5LbbbjN+cdXK9a9t27YZv7hqP/nJT/JHf/RHGRkZSalUyr333pt/+2//bfr7+/P5z38+R48ezS233JKnn34606dPz/vvv59169blxz/+ca6//vp89atfzdy5c6v9McZFCAEAAAAUwuUYAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAIZqr3YDJ8M47x6vdhCvS1tZSt22n9ulfVJL+RSXpX1SS/kUl6V9UUr31r7a2lkuWOxMCAAAAKIQQAgAAACiEEAIAAAAohBACAAAAKIQQAgAAACiEEAIAAAAohBACAAAAKIQQAgAAACiEEAIAAAAoRHO1GwBA/Zpx4t3k0NDZF7Pac/K6m6rbIAAAapoQAoArd2goR9Y/nCRp3fD1RAgBAMBluBwDAAAAKIQQAgAAACiEEAIAAAAohBACAAAAKIQQAgAAACiEEAIAAAAohBACAAAAKIQQAgAAACiEEAIAAAAoRHO1GwAA4zHjxLvJoaGzL2a15+R1N1W3QQAATJgQAoD6cGgoR9Y/nCRp3fD1RAgBAFB3XI4BAAAAFEIIAQAAABRCCAEAAAAUQggBAAAAFEIIAQAAABRCCAEAAAAUQggBAAAAFKK52g0AAIDJMuPEu8mhobMvZrXn5HU3VbdBAHyAEAIAgMZxaChH1j+cJGnd8PVECAFQU8Z1OcZf/MVfZOnSpfnUpz6VRx55JO+//376+/uzatWqdHd3Z+3atRkeHk6SDA8PZ+3atenq6sqqVavy9ttvjy7nueeeS1dXV3p6erJ79+7R8l27dqWnpyddXV3ZtGnTaHm5OgAAAID6M2YIMTg4mG9+85v5zne+k23btmVkZCS9vb15+umn88ADD2THjh2ZOXNmXnzxxSTJCy+8kJkzZ+bll1/OAw88kKeffjpJsn///vT29qa3tzebN2/OE088kZGRkYyMjGTDhg3ZvHlzent7s23btuzfvz9JytYBAAAA1J9xnQkxMjKSkydP5vTp0zl58mTa2try2muvpaenJ0myYsWK9PX1JUl27tyZFStWJEl6enqyd+/elEql9PX1ZenSpZk+fXrmzp2befPmZd++fdm3b1/mzZuXuXPnZvr06Vm6dGn6+vpSKpXK1gEAAADUnzHvCTF79uz83u/9Xj75yU/m2muvzZ133plbb701M2fOTHPz2T/v6OjI4OBgkrNnTsyZM+fswpub09LSksOHD2dwcDALFy78wHLP/U1HR8cHyvft25fDhw+XreNCbW0tV/LZa0I9t53ap39RSW1tLTl5cNro62uumZaWCva5Iuui+oxfXKnxjBX6F5Wkf1FJjdC/xgwhjh49mr6+vvT19aWlpSWf+9znsmvXrove19TUlCQplUqX/Ldy5WfOnCm7rPGWv/PO8ct+hlrV1tZSt22n9ulfVNK5/jXj1Mho2alTIzlewT5XZF1Ul/GLqzHWWKF/UUn6F5VUb/2rXGAy5uUY3//+9/Orv/qrmTVrVq655pp0d3fn9ddfz7Fjx3L69OkkycDAQNrb25OcPWPh4MGDSZLTp0/n+PHjaW1tTUdHRwYGBkaXOzg4mPb29rLlN9xwQ9k6AAAAgPozZgjxK7/yK/n7v//7/OM//mNKpVL27t2bX/u1X8uiRYuyffv2JMmWLVvS2dmZJOns7MyWLVuSJNu3b8/tt9+epqamdHZ2pre3N8PDw+nv78+BAwdy2223ZcGCBTlw4ED6+/szPDyc3t7edHZ2pqmpqWwdAAAAQP0Z83KMhQsXpqenJytWrEhzc3NuueWW/M7v/E5+67d+K5///Ofz53/+57nllluyatWqJMnKlSuzbt26dHV15frrr89Xv/rVJMn8+fOzZMmS3HfffZk2bVrWr1+fadPOXrO3fv36PPjggxkZGcmnP/3pzJ8/P0mybt26S9YBAAAA1J8xQ4gkWbNmTdasWfOBsrlz517ykZnXXnttnnnmmUsu56GHHspDDz10UfnixYuzePHii8rL1QEAAADUn3E9ohMAAADgagkhAAAAgEIIIQAAAIBCCCEAAACAQgghAAAAgEIIIQAAAIBCCCEAAACAQgghAAAAgEI0V7sBADBR06Zfkxk/f+vsi1ntOXndTdVtEAAA4yKEAKDulI4dzZGn1iVJWjd8PRFCAADUBZdjAAAAAIUQQgAAAACFEEIAAAAAhRBCAAAAAIUQQgAAAACFEEIAAAAAhRBCAAAAAIUQQgAAAACFEEIAAAAAhRBCAAAAAIUQQgAAAACFEEIAAAAAhRBCAAAAAIUQQgAAAACFEEIAAAAAhRBCAAAAAIUQQgAAAACFEEIAAAAAhRBCAAAAAIUQQgAAAACFEEIAAAAAhWiudgMAAICpbcaJd5NDQ2dfzGrPyetuqm6DgIoRQgAAANV1aChH1j+cJGnd8PVECAENy+UYAAAAQCGEEAAAAEAhhBAAAABAIYQQAAAAQCGEEAAAAEAhhBAAAABAITyiEwCoCTNOvJscGsrJg9Myo+XGnPSIPgBoOEIIAKA2HBrKkfUPJ0laN3w9EUIA1IVzIXKSZFa7EJnLGtflGMeOHcuaNWty7733ZsmSJXn99ddz5MiRrF69Ot3d3Vm9enWOHj2aJCmVStm4cWO6urqybNmy/OhHPxpdzpYtW9Ld3Z3u7u5s2bJltPzNN9/MsmXL0tXVlY0bN6ZUKiVJ2ToAAACoEf8nRD6y/uFfhhFQxrhCiCeffDKf+MQn8t3vfjcvvfRSbr755mzatCl33HFHduzYkTvuuCObNm1KkuzatSsHDhzIjh078pWvfCWPP/54krOBwrPPPptvf/vbeeGFF/Lss8+OhgqPP/54NmzYkB07duTAgQPZtWtXkpStAwAAAKg/Y4YQJ06cyA9/+MOsXLkySTJ9+vTMnDkzfX19Wb58eZJk+fLleeWVV5JktLypqSkf+9jHcuzYsQwNDWXPnj25884709ramuuvvz533nlndu/enaGhoZw4cSIf//jH09TUlOXLl6evr+8Dy7qwDgAAAKD+jHlPiP7+/syaNSuPPvpofvKTn+TWW2/Nl770pbz33ntpb29PkrS3t+fQoUNJksHBwXR0dIz+fUdHRwYHBy8qnz179iXLz70/Sdk6AAAAgPozZghx+vTpvPXWW3nssceycOHCbNy48bKXRZy7n8P5mpqaJlw+EW1tLRN6fy2p57ZT+/QvKqmtrSUnD04bfX3NNdPSUsE+d35dTeedx1fpeilOkf2JxjWefmT/WHsaafufiv2rkdZfrWuE/jVmCNHR0ZGOjo4sXLgwSXLvvfdm06ZNufHGGzM0NJT29vYMDQ1l1qxZo+8fGBgY/fuBgYG0t7eno6MjP/jBD0bLBwcH8y/+xb8o+/4kZeu40DvvHL+Cj159bW0tddt2ap/+RSWd618zTo2Mlp06NZLjFexz59dVOvPL8krXS3GK7E80rrH6kf1jbWqU7X+q9q9GWX+1rt76V7nAZMx7QrS1taWjoyM/+9nPkiR79+7NzTffnM7OzmzdujVJsnXr1txzzz1JMlpeKpXyxhtvpKWlJe3t7bnrrruyZ8+eHD16NEePHs2ePXty1113pb29PR/5yEfyxhtvpFQqXXJZF9YBAAAA1J8xz4RIksceeyxf+MIXcurUqcydOzd//Md/nDNnzmTt2rV58cUXM2fOnHzta19LkixevDivvvpqurq68uEPfzhPPfVUkqS1tTWf/exnR29w+fDDD6e1tTXJ2adjPProozl58mTuvvvu3H333UmSz3zmM5esAwAAAKg/4wohbrnllvzVX/3VReXPP//8RWVNTU358pe/fMnlrFy5cjSEON+CBQuybdu2i8pvuOGGS9YBAAAA1J8xL8cAAAAAmAxCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEEIIAAAAoBBCCAAAAKAQQggAAACgEOMOIUZGRrJ8+fL8wR/8QZKkv78/q1atSnd3d9auXZvh4eEkyfDwcNauXZuurq6sWrUqb7/99ugynnvuuXR1daWnpye7d+8eLd+1a1d6enrS1dWVTZs2jZaXqwMAAACoP+MOIb75zW/m5ptvHn399NNP54EHHsiOHTsyc+bMvPjii0mSF154ITNnzszLL7+cBx54IE8//XSSZP/+/ent7U1vb282b96cJ554IiMjIxkZGcmGDRuyefPm9Pb2Ztu2bdm/f/9l6wAAAADqz7hCiIGBgXzve9/LypUrkySlUimvvfZaenp6kiQrVqxIX19fkmTnzp1ZsWJFkqSnpyd79+5NqVRKX19fli5dmunTp2fu3LmZN29e9u3bl3379mXevHmZO3dupk+fnqVLl6avr++ydQAAAAD1p3k8b3rqqaeybt26/OIXv0iSHD58ODNnzkxz89k/7+joyODgYJJkcHAwc+bMObvw5ua0tLTk8OHDGRwczMKFC0eXOXv27NG/6ejo+ED5vn37LlvHhdraWib0oWtJPbed2qd/UUltbS05eXDa6OtrrpmWlgr2ufPrajovQq90vRSnyP5E4xpPP7J/rD2NtP1Pxf7VSOuv1jVC/xozhPjrv/7rzJo1K7/xG7+Rv/mbvyn7vqampiRnz5K41L+VKz9z5kzZZY23/J13jpdtVy1ra2up27ZT+/QvKulc/5pxamS07NSpkRyvYJ87v67SebuOStdLcYrsTzSusfqR/WNtapTtf6r2r0ZZf7Wu3vpXucBkzBDi7/7u77Jz587s2rUr77//fk6cOJEnn3wyx44dy+nTp9Pc3JyBgYG0t7cnOXvGwsGDB9PR0ZHTp0/n+PHjaW1tTUdHRwYGBkaXOzg4OPo3lyq/4YYbytYBAAAA1J8x7wnxh3/4h9m1a1d27tyZP/uzP8vtt9+eP/3TP82iRYuyffv2JMmWLVvS2dmZJOns7MyWLVuSJNu3b8/tt9+epqamdHZ2pre3N8PDw+nv78+BAwdy2223ZcGCBTlw4ED6+/szPDyc3t7edHZ2pqmpqWwdAAAAQP0Z99MxLrRu3bp84xvfSFdXV44cOZJVq1YlSVauXJkjR46kq6sr3/jGN/KFL3whSTJ//vwsWbIk9913Xx588MGsX78+06ZNS3Nzc9avX58HH3ww9913X5YsWZL58+dftg4AAACg/ozrxpTnLFq0KIsWLUqSzJ0795KPzLz22mvzzDPPXPLvH3rooTz00EMXlS9evDiLFy++qLxcHQAAAED9ueIzIQAAAAAmQggBAAAAFEIIAQAAABRCCAEAAAAUQggBAAAAFEIIAQAAABRCCAEAAAAUQggBAAAAFEIIAQAAABRCCAEAAAAUQggBAAAAFEIIAQAAABRCCAEAAAAUQggBAAAAFEIIAQAAABRCCAEAAAAUQggBAAAAFEIIAQAAABSiudoNAABg4maceDc5NHT2xaz2nLzupuo2CADGQQgBAFCPDg3lyPqHkyStG76eCCEAqAMuxwAAAAAKIYQAAAAACiGEAAAAAAohhAAAAAAK4caUAMCU5OkSAFA8IQQAMDV5ugRQhpASKkcIAQWwIwMAqCNCSqgYIQQUwY4MgDonUAdgMgghAAAYm0AdgEng6RgAAABAIZwJAQAAQGFc3jW1CSEAAKDOmMRR11zeNaUJIQCoCgfQAFfBJA6oU0IIaBAXTujS1lLdBpVh4skoB9Aw5dknAEw9QghoFBdO6P7pP61yg8ow8QSugMlqg7JPAJhyhBAA/P/t3X9sVfX9x/HXbbWpgUJHx6VEGzI2TaZBXTLj/J0VKVu6xjrBZDHLQlxIlK1iE43gZK4KX+bXxLn5zb4w/zGRLTq3lqREZXSRH/sRppF0ODSYpaH4bW+BQktdoO3t5/tH5Xq53NPeH+fH55zzfCQm9Hp/fM45n8/78/m8z+ecA9iPySoAAJHAIzoBAAAAAIAvWAkBAAFheTkAAADihiQEAASF5eUAAACIGZIQAAAAWVilBACAd0hCAAAAZGOVEgAAnuHGlAAAAAAAwBezJiEGBgb0/e9/X9/+9rfV3NysV155RZJ05swZrVmzRk1NTVqzZo1GRkYkScYYPfvss1qxYoVaWlr0wQcfZL6rs7NTTU1NampqUmdnZ+b1w4cPq6WlRStWrNCzzz4rY8yMvwEAAAAAAMJn1iREZWWlnnjiCb355pt67bXX9Nvf/lYff/yxtm/frltuuUW7d+/WLbfcou3bt0uS9u3bp76+Pu3evVvPPPOMnn76aUnTCYWXXnpJr7/+un7/+9/rpZdeyiQVnn76aXV0dGj37t3q6+vTvn37JMnxNwBEQ2XV5ao+9q/p/8ZOBl0cAHBV9dhJYhwAADlmTUIkk0ldd911kqS5c+dq6dKlSqVS6unpUWtrqySptbVVe/bskaTM64lEQjfeeKNGR0c1NDSkAwcO6LbbblNtba3mz5+v2267Tfv379fQ0JDGxsb0ta99TYlEQq2trerp6bnou3J/A0A0mNERndm0bvra6ws3gQMQCkywC/DZvSWIcQAAfK6oG1MeP35cR44c0Q033KBTp04pmUxKmk5UDA8PS5JSqZTq6+szn6mvr1cqlbrk9UWLFuV9/cL7JTn+Rq6FC2uK2QyrhLnsKNy5gcrMvy+/vFI1Hhz33N+Q7Kxf2eVMZKVBvdovNvOjXnhp4cKasrah2M9Sd+xybuAjnfjs5o0L/+t/VfOlL7nwnc51wov24vSdbv2W123c7xji5zHw+jvL7R8nBo4rfWJQklS5sF6XL76qrO8rRdj7kFy2bU855bFx/OW1cvp0G453LhvauJMo1K+CkxCffvqp2tratHHjRs2dO9fxfRfu55AtkUgU/XoxTpw4W9T7bbFwYU1oy47iVE+kM/+emEjrrAfHPfc3quVP2yj2UXbZ5TRTn7/u1X6xmR/1wisX4lc521DsZ6k7dvGi/s70nX7+nlu/5XUb9zuG+H3MvfpON8Zf1f/3yUVPUDlz2fyyvq+kMoS4D8nHtu0ptTxxHd+X06fbcLxz2dDG8wlb/XJKmBT0dIyJiQm1tbWppaVFTU1NkqS6ujoNDU1PPIaGhrRgwQJJ0ysZBgcHM58dHBxUMpm85PVUKpX39Qvvn+k3AFiE5cYAAAAACjRrEsIYoyeffFJLly7VmjVrMq83Njaqq6tLktTV1aXly5df9LoxRocOHVJNTY2SyaRuv/12HThwQCMjIxoZGdGBAwd0++23K5lMas6cOTp06JCMMXm/K/c3AAAAAABA+Mx6OcZ7772nnTt36pprrtE999wjSWpvb9fatWu1fv16vfHGG1q8eLFefPFFSdJdd92lvXv3asWKFbriiiu0ZcsWSVJtba0efvhhrVq1SpK0bt061dbWSpp+OsaGDRt07tw53XnnnbrzzjslyfE3AAAA4ij7EriK9ETApYEfir3sEQBsN2sS4utf/7o++uijvP/vlVdeueS1RCKhn/70p3nfv2rVqkwSItuyZcvU3d19yetf+MIX8v4GAABALH12CZwkLdj43wEXBr7IOua1Hf8jkYQAEHJFPR0DAAAAAIAwYmWRHUhCAAAAABHH5Ct8OGazK3ofsbLICiQhAAAAgBJVVl2u6mP/mv7D5omix5MvJsweYMI8O/ZRKJGEAAAAAEpkRkd0ZstjkmI+CWIyGDvcKBelIgkBAPAUZ8cA74XmbDyA6OBGuSgRSQgAjpg8whWcHQM8F/ez8ZyRDQb7HX4J65g0rOX2GkkIAM6YPAIAwoAzssFgv8MvYR2ThrXcHiMJEWNk5rzF2QEAAAAAuBhJiDjzKDNHcuMznB0AAF/R/wAgDgD2IwmBklwU4CVV1sxT+uyopOmz/sM/Wy+JZUcINwYy8BL1ywMFJNdZpQZEHMvfAeuRhAhI9dhJnRv4SNUT6XAOPrMCvDR9pv/CDbE46w+v+D5pYyADL1G/POX4tAiHVWrZ7yc5AVyMpGl4cKwQBiQhgjI8pBMMPoHiMGkDUKBinxaR/X6S6YiTgiat9L/hwbFCCJCEAAAAKJKfZxu5hASeYtLqKVYmAJciCYHAEZwBAKHj58SNGx0D4VVkrCDpGF2OlwnGEEkIBI8MfF4kZ6LDhmNpQxnCxO/9xcAEiA/iMWZE0jGyir1MMMpIQgA5yhkcuJq9jnFyJnIDNBuOpQ1lCBOf9xcDEyBGiMcAYo4kBJCrnMEB2Wt3MEADAADwhDUn3BBbJCEAAK5jkAIAmA19RUA44YaAkYRAwego4o1r1sMn0DbrMEjJrkfEEQCIOSa0KAFjifAjCYHCWdJRRO5+ASERhWvWw1h3yiqzJW02W3Y9sqVMgJvimLB3K7aS7AZQCMYS4UcSAuET8/sFhHEibY0w1p0wlhmuob27w9ezZhYm/zznIcEDeAAADXFJREFUUpyKQrLbNl4kxTgLDaBcJCFCjgFqfpHeL0xKEbDqsZM6N/CRqifSDEC9ltXe67ZuV3UI4loh8beQ91x0VlzlTXY4awa/WLeaw4OkWJjak3XHwyNxXIGFcCMJEXYeTEgjMYFnol4yOjLManhIJ+J2prcMbsXU7IG/U0LCrd9y+p6C4kMh8beA92RvrxRcXYvLJAbuYDWHXWJzPMpINhHjPscY2D8kIXAphzNvYW2M5QTXWAbmEC4lvmjCJMXnWEVUJBKh2TxIijolJCrSExr+2fryf8upzCGMD+WaaV9HSeTaHRBhueMet1aKRTpRU4gY9nFBIQmBGYVpyZ2TQs4eFvLZ2Admm2V1GlK8j1UksvisZCpKFOJ0WLi1r62c8PvY7iIRpyzG/s2vkBNLodl3OeOeKMV+K+MjXEcSAr4pJ6i41SnEJalQWXW5zvW+q+qJdFnXZCOEyOIHwvb2ZHv5YifCibaCVhBaHKf8biuerLi0bP/aEn8KGgNatu9iycL4GMuV0R4jCQH/lBNU6BSKYkZHdKKIjtaWIB9ndHD+8eK+CdmXQVy04kqWnE2jvaMI5cQjt5L9gcVEn9tKLE6OlLlPvU5ihGb1Q4hkt9/KmnlKnx2d/h8hHd/Eop36jCSEZbIDYXajjUIDzsbjnaLPljMfXivrBn5ZyrnuvJwB1EzHKbLHsMgBseNkyCE5Wu4NFYmPCJoNA24/y8Ak1HJeJ4YKONFVbFIsrHXKreRf7qVrpbblcvpD28cwcT/5RBLCNjmBMF8DjsKNsbiGOQbicuZ1hhu5XjgzXmwdL7p9lLNSaKbjFPJj6MVTKfw+M0p8hK0ilSyLwGrLSB0PCxXdD4S0TpVzHzWvy+Pq+KYMXiRqwjjGKhdJCAsU23EwQEWpwpqZL4ef20zbtIyFT/qJ80QhjvEnyoh3dnHreNh+dtb28tnGhkurosaL/RK1y1cKQRLCAn525FEeBEZ525wUPaFxyMzbMDFyswy535VvRULYBzI21veg6pFT551dBlsmTDaUw4Zr7Zm05uf38mEb40g+UXjUdlj2te0TT6fy2bB/L5Th3EBlWZcOuFl+L+7RYnP9deJV+Z3GH05jESdOl6/YsBrFKyQh4ibKg8AIb5tT8HRrQlPs9ziVp5wg7+bkrJDvsn2gNSsL63tQE2ynztuW/WKb0Nf9HDZMPlzjwyVQTjdUtfkkiBeP2vaj3hSSEHd6f9QmHJ7zsU+cKfFdzDEu9rNBsiGBXgivx8u5Zhp/uD0+j0J/nY0kBDwVlsypWzf2K+SzpQwybAv+TuWxrZyl8HpgGpY2Adis2MkdsgSVwHTpd10blPuwH4rtE6M84fBCUP1pOYlvkubeisI4NC5IQkSIjRl0r4NBOR1QOYPYcs4kMciwj58TmnLaBAkMhI1XdZaBZuEuusRDxI5i2Diuiks/UMh2EgeA8CIJESFxnNyW0wG5dcdd124AJVkzyImbsAxkwlJON8VlwB12fi+BRRGy+iuJ41AMG8dVXtyA0sbYSuwAoo0kBKxl23W+XnTY2Z2sZM8gB5ey8YyY23KTYja0Owai3vLqmfCllsGGOue3uG8/glFIm/WibtrYzwDwH0kI2MuyG+/5MRliMGovG8+IuS03KWbbE1TgPhvqdVwSTawWCd6FY1DK0wviyIu6OVM/AyA+SELEgG0rCmYS94kOg1H4oZR2FtW6GYcVLvCebdevx70vdeLWih2J/Rp2cWwjcdzm2dCug0MSIg4sW1Ewk6hOdACb0M4+Z8NKAFswQC2dbW3KzfLYXC/8LBtn8Itjc72R7GuzfojjNs+Gdh0ckhAAABTI9oF1ORig2sWWumbz/T6os/bi2CAfW+IagkcSApIICkAxaC/xFceBNfU9GFGoa1HYhqDQ7pArCnXCKSZEYdtQHOuTEPv27dPmzZs1NTWl1atXa+3atUEXKZIYKESXDYG9nDI4fTbI7aK9RJMNbcVG1HfAf7Q75IpynYjytiG/iqALMJN0Oq2Ojg69/PLL2rVrl7q7u/Xxxx8HXSwgVMzoiM5sWjd9X5CJYCZW5ZTB6bM2bBeihToFAADgPatXQvT29mrJkiVqaGiQJDU3N6unp0df+cpXAi4ZAMBNrEJwH/sUAADYKGGMMUEXwslbb72l/fv3a/PmzZKkrq4u9fb2atOmTQGXDAAAAAAAFMvqyzHy5UcSiUQAJQEAAAAAAOWyOglRX1+vwcHBzN+pVErJZDLAEgEAAAAAgFJZnYRYtmyZ+vr61N/fr/Hxce3atUuNjY1BFwsAAAAAAJTA6htTXnbZZdq0aZN++MMfKp1O67777tPVV18ddLEAAAAAAEAJrL4xZZTt27dPmzdv1tTUlFavXq21a9cGXSSEXGNjo+bMmaOKigpVVlbqj3/8o86cOaNHH31Un3zyia688kr94he/0Pz584MuKkJgw4YNeuedd1RXV6fu7m5JcqxPxhht3rxZe/fuVXV1tbZu3arrrrsu4C2AzfLVr1/96ld6/fXXtWDBAklSe3u77rrrLknStm3b9MYbb6iiokI/+clPdMcddwRWdthtYGBAjz/+uE6ePKmKigrdf//9+sEPfkD8giuc6hfxC244f/68HnjgAY2PjyudTmvlypVqa2tTf3+/2tvbNTIyomuvvVbPPfecqqqqND4+rscff1wffPCBamtr9cILL+iqq64KejMKY+C7yclJs3z5cnPs2DFz/vx509LSYo4ePRp0sRBy3/zmN82pU6cueu3nP/+52bZtmzHGmG3btpnnnnsuiKIhhA4ePGgOHz5smpubM6851ad33nnHPPjgg2Zqasq8//77ZtWqVYGUGeGRr3798pe/NC+//PIl7z169KhpaWkx58+fN8eOHTPLly83k5OTfhYXIZJKpczhw4eNMcacPXvWNDU1maNHjxK/4Aqn+kX8ghumpqbM2NiYMcaY8fFxs2rVKvP++++btrY2093dbYwx5qmnnjI7duwwxhjz6quvmqeeesoYY0x3d7d55JFHgil4Cay+J0RU9fb2asmSJWpoaFBVVZWam5vV09MTdLEQQT09PWptbZUktba2as+ePQGXCGFx0003XbJqxqk+XXg9kUjoxhtv1OjoqIaGhnwvM8IjX/1y0tPTo+bmZlVVVamhoUFLlixRb2+vxyVEWCWTycxKhrlz52rp0qVKpVLEL7jCqX45IX6hGIlEQnPmzJEkTU5OanJyUolEQn//+9+1cuVKSdK9996bmTf++c9/1r333itJWrlypf72t7/lfbqkjUhCBCCVSqm+vj7z96JFi2YMYEChHnzwQX33u9/Va6+9Jkk6depU5okyyWRSw8PDQRYPIedUn3JjWn19PTENJdmxY4daWlq0YcMGjYyMSKLPROmOHz+uI0eO6IYbbiB+wXXZ9UsifsEd6XRa99xzj2699Vbdeuutamho0Lx583TZZdO3csyOUalUSosXL5Y0fS/FmpoanT59OrCyF4MkRADyZagSiUQAJUGU/O53v1NnZ6d+85vfaMeOHfrHP/4RdJEQE8Q0uOF73/ue/vSnP2nnzp1KJpPaunWrJOoXSvPpp5+qra1NGzdu1Ny5cx3fR/1CKXLrF/ELbqmsrNTOnTu1d+9e9fb26t///vcl77lQh8Jcv0hCBKC+vl6Dg4OZv1OpVCY7D5Rq0aJFkqS6ujqtWLFCvb29qquryywrHRoaytwwCSiFU33KjWmDg4PENBTti1/8oiorK1VRUaHVq1frn//8pyT6TBRvYmJCbW1tamlpUVNTkyTiF9yTr34Rv+C2efPm6eabb9ahQ4c0OjqqyclJSRfHqPr6eg0MDEiavnzj7Nmzqq2tDazMxSAJEYBly5apr69P/f39Gh8f165du9TY2Bh0sRBi//nPfzQ2Npb591/+8hddffXVamxsVFdXlySpq6tLy5cvD7KYCDmn+nThdWOMDh06pJqaGgZZKFr2dfh79uzJPJK7sbFRu3bt0vj4uPr7+9XX16frr78+qGLCcsYYPfnkk1q6dKnWrFmTeZ34BTc41S/iF9wwPDys0dFRSdK5c+f017/+VV/+8pd188036+2335YkdXZ2ZuaNjY2N6uzslCS9/fbb+sY3vhGalRA8ojMge/fu1ZYtW5ROp3XffffpoYceCrpICLH+/n6tW7dO0vS1ZN/5znf00EMP6fTp01q/fr0GBga0ePFivfjii6HJkCJY7e3tOnjwoE6fPq26ujr9+Mc/1t133523Phlj1NHRof379+uKK67Qli1btGzZsqA3ARbLV78OHjyoDz/8UJJ05ZVXqqOjIzMZ/PWvf60//OEPqqys1MaNGzOPvgNyvfvuu3rggQd0zTXXqKJi+lxbe3u7rr/+euIXyuZUv7q7u4lfKNuHH36oJ554Qul0WsYYfetb39KPfvQj9ff369FHH9XIyIi++tWv6vnnn1dVVZXOnz+vxx57TEeOHNH8+fP1wgsvqKGhIejNKAhJCAAAAAAA4AsuxwAAAAAAAL4gCQEAAAAAAHxBEgIAAAAAAPiCJAQAAAAAAPAFSQgAAAAAAOALkhAAAAAAAMAXJCEAAAAAAIAv/h+k4Je0jI2DcQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.set_style('darkgrid')\n", "# plt.style.use('ggplot')\n", "fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(16,9), sharey=True)\n", "myInd1 = X_train[X_train.useful > 0].index.compute()\n", "myInd0 = X_train[X_train.useful == 0].index.compute()\n", "\n", "ax1.bar(range(300), np.array(myX[myInd1].sum(axis=0)).tolist()[0], width=1)\n", "ax2.bar(range(300), np.array(myX[myInd0].sum(axis=0)).tolist()[0], width=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visual differences \n", "Visually, we are seeing striking similarities between\n", "\n", "### Readability" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Heatmap\n", "\n" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "nlp.pipe(rev.text)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Doc2Vec: How to handle the large corpus\n", "After some trial, error, and research, it is my conclusion that the model computation will not differ between one large or several chunks. This stems from a blog written by the library's author - Radim Rehurek - discussing multiprocessing for faster running times. If the content can be processed in parallel, it is not requiring information from the entire corpus and can be run in pieces.\n", "\n", "### Verifying training updates\n", "We will verify if this can be done below. Within gensim, we can access the document and word vectors after training updates to see if the model updates." ] }, { "cell_type": "code", "execution_count": 427, "metadata": {}, "outputs": [], "source": [ "# Tagging function with delayed capability\n", "@delayed\n", "def tag(df):\n", " df.text = df.text.apply(fix_nl)\n", " tags = []\n", " for i, doc in enumerate(nlp.pipe(df.text, disable=['ner', 'parser'])):\n", " mylist = [chunk.lemma_.lower() for chunk in doc if not chunk.is_punct and not chunk.is_stop]\n", " tags.append(TaggedDocument(mylist, [i]))\n", " \n", " vec = Doc2Vec(min_count=1)\n", " vec.build_vocab(tags)\n", " \n", " return vec, tags" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(17033, 0.38854920864105225),\n", " (23295, 0.3664354085922241),\n", " (12518, 0.3616259694099426),\n", " (12915, 0.3600383400917053),\n", " (14743, 0.35090503096580505)]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vec1, tags1 = tag(ddf).compute()\n", "test_arr = vec1.docvecs[0]\n", "vec1.docvecs.most_similar(0, topn=5)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[('cantor', 0.3950194716453552),\n", " ('allllways', 0.39479339122772217),\n", " ('chitown', 0.3757461905479431),\n", " ('fantastico', 0.35876384377479553),\n", " ('sick', 0.35497692227363586)]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vec1.wv.most_similar(tags1[0][0], topn=5)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(17033, 0.38854920864105225),\n", " (23295, 0.3664354085922241),\n", " (12518, 0.3616259694099426),\n", " (12915, 0.3600383400917053),\n", " (14743, 0.35090503096580505)]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vec2, tags2 = tag(rev).compute()\n", "vec1.train(tags2, len(tags1) + len(tags2), epochs=5)\n", "test_arr1 = vec1.docvecs[0]\n", "vec1.docvecs.most_similar(0, topn=5)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[('apartment', 0.9960299134254456),\n", " ('spicy', 0.9960122108459473),\n", " ('oil', 0.9959917664527893),\n", " ('dry', 0.9959776401519775),\n", " ('b', 0.9959765672683716)]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vec1.wv.most_similar(tags1[0][0], topn=5)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Every single value in array is equal\n", "sum(test_arr != test_arr1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Basic retraining failed\n", "It appears the document vectors within the model are *not* returning different results when compared with the most_similar method. I did see this somewhere but wanted to verify. We can verify the document vectors themselves are not different, as shown when comparing the test arrays.\n", "\n", "Moving forward, some Google queries and documentation digging show Doc2Vec does not allow the same training update approach that word vectors allow, as I suspected. We will have to work with the word embeddings instead.\n", "\n", "### Similarity_matrix\n", "We are actually able to \n", "\n", "#### Steps\n", "1. Create gensim Dictionary\n", "2. Create corpus of tuples\n", "3. Create LSI model with each input\n", "4. Query and fit a Dictionary object into the vector space\n", "\n", "Where does model.wv.similarity_matrix fit in?" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mvec\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtext\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0mit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvectorize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrev\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m~/anaconda3/envs/py36/lib/python3.6/site-packages/dask/base.py\u001b[0m in \u001b[0;36mcompute\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 173\u001b[0m \u001b[0mdask\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbase\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompute\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 174\u001b[0m \"\"\"\n\u001b[0;32m--> 175\u001b[0;31m \u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcompute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraverse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 176\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 177\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/py36/lib/python3.6/site-packages/dask/base.py\u001b[0m in \u001b[0;36mcompute\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 444\u001b[0m \u001b[0mkeys\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__dask_keys__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mcollections\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 445\u001b[0m \u001b[0mpostcomputes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__dask_postcompute__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mcollections\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 446\u001b[0;31m \u001b[0mresults\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mschedule\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdsk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeys\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 447\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrepack\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresults\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpostcomputes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 448\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/py36/lib/python3.6/site-packages/dask/threaded.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(dsk, result, cache, num_workers, pool, **kwargs)\u001b[0m\n\u001b[1;32m 80\u001b[0m \u001b[0mget_id\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0m_thread_get_id\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 81\u001b[0m \u001b[0mpack_exception\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpack_exception\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 82\u001b[0;31m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 83\u001b[0m )\n\u001b[1;32m 84\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/py36/lib/python3.6/site-packages/dask/local.py\u001b[0m in \u001b[0;36mget_async\u001b[0;34m(apply_async, num_workers, dsk, result, cache, get_id, rerun_exceptions_locally, pack_exception, raise_exception, callbacks, dumps, loads, **kwargs)\u001b[0m\n\u001b[1;32m 478\u001b[0m \u001b[0;31m# Main loop, wait on tasks to finish, insert new ones\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 479\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"waiting\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"ready\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"running\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 480\u001b[0;31m \u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mres_info\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfailed\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mqueue_get\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mqueue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 481\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mfailed\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 482\u001b[0m \u001b[0mexc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mloads\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mres_info\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/py36/lib/python3.6/site-packages/dask/local.py\u001b[0m in \u001b[0;36mqueue_get\u001b[0;34m(q)\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mqueue_get\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mq\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 144\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 145\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 146\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/py36/lib/python3.6/queue.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, block, timeout)\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 163\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_qsize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 164\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnot_empty\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 165\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 166\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"'timeout' must be a non-negative number\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/py36/lib/python3.6/threading.py\u001b[0m in \u001b[0;36mwait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 293\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# restore state no matter what (e.g., KeyboardInterrupt)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 294\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 295\u001b[0;31m \u001b[0mwaiter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0macquire\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 296\u001b[0m \u001b[0mgotit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ "vec = CountVectorizer(max_features=100, ngram_range=(1,2), stop_words='english')\n", "\n", "@delayed\n", "def vectorize(df):\n", " return vec.fit_transform(df.text)\n", "\n", "it = vectorize(rev).compute()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# sklearn tool faster than [fix_nl(txt).split] for txt in rev.text.compute()])\n", "mydct = Dictionary([vec.get_feature_names()])\n", "mycorp = [mydct.doc2bow(fix_nl(txt).split()) for txt in rev.text.compute()]\n", "mylsi = LsiModel(mycorp, id2word=mydct, num_topics=100)\n", "mylsi[mydct.doc2bow(fix_nl(list(rev.text.loc[0].compute())[0]).split())]" ] }, { "cell_type": "code", "execution_count": 287, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(0, 0.8622897373758738), (1, -0.7724632421528443)]" ] }, "execution_count": 287, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# sklearn tool faster than [fix_nl(txt).split] for txt in rev.text.compute()])\n", "mydct = Dictionary([vec.get_feature_names()])\n", "mycorp = [mydct.doc2bow(fix_nl(txt).split()) for txt in rev.text.compute()]\n", "mylsi = LsiModel(mycorp, id2word=mydct, num_topics=2)\n", "mylsi[mydct.doc2bow(fix_nl(list(rev.text.loc[0].compute())[0]).split())]" ] }, { "cell_type": "code", "execution_count": 290, "metadata": {}, "outputs": [], "source": [ "mybow = [mydct.doc2bow(fix_nl(list(rev.text.loc[i].compute())[0]).split()) for i in range(len(rev))]\n", "mylsa = [mylsi[bow] for bow in mybow]" ] }, { "cell_type": "code", "execution_count": 354, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 354, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6UAAAIICAYAAACW1EjCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdTYxz257f9d9aa7/YrqrnqXPuPffephOEmBSgSBFSDyIiIaQwI3MYEIkgZggCAiGChDJkghA9jYKQEBnR6SFCjDJAgpbSKFKktEpCIJrO7Zs+957zPPVie7+stRgsb5ftsl0u21V+qe9ncs7jcm1v27uq1s//tf7LxBgFAAAAAMAh2EOfAAAAAADg4yKUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOJjvEg4YQovfHuRWNc0bHem44Xlw32AbXDbbBdYNtcN1gG1w32EZ33eS5+7Wk7zb5nr2E0pubm/9Y0r8nKUr6R5L++u3t7XjV/b2P+vJluI+H3rvr68HRnhuOF9cNtsF1g21w3WAbXDfYBtcNttFdN999d/X/bvo9O0/fvbm5+W1J/6Gk37m9vf0Lkpykf2vX4wIAAAAAzt++1pRmkvo3NzeZpIGkX+7puAAAAACAM7ZzKL29vf0nkv5rSX8s6U8lfb29vf1fdz0uAAAAAOD8mRh3W7x8c3PzjaS/J+nflPRF0v8k6fdub2//x1Xfc9yNjqy8D4c+DZwYrhtsg+sG2+C6wTa4brANrhtso7tu8tz9oaTf2eR79tHo6F+X9P/c3t5+L0k3Nze/L+lfkbQylNLoCOeG6wbb4LrBNrhusA2uG2yD6wbbmGl0tPH37COU/rGkv3RzczOQNJL0VyT9gz0cFwAAAABw5vaxpvQPJP2epP9TaTsYK+lv73pcAAAAAMD528s+pbe3t39L0t/ax7EAAAAAAB/HvraEAQAAAADg1QilAAAAAICDIZQCAAAAAA6GUAoAAAAAOBhCKQAAAADgYAilAAAAAICDIZQCAAAAAA6GUAoAAAAAOBhCKQAAAADgYAilAACckKrxGrVetY+HPhUAAPYiO/QJAACAzdxXrSpr9TBuJUm93Omq5E85AOC0USkFAOAE1D5q3Pi528YNFVMAwOkjlAIAcAJ8DK+6HQCAU0EoBQDgBDiz/E/2qtsBADgV/CUDAOAEFM6ol7u523q5U+HMgc4IAID9oDsCAAAn4qrM1O/nCnUjZyyBFABwFgilAACckDJ36mfu5TsCAHAimL4LAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADgYQikAAAAA4GAIpQAAAACAgyGUAgAAAAAOhlAKAAAAADiYbB8Hubm5uZb0dyT9BUlR0r97e3v7v+/j2AAAAACA87WvSunvSvpfbm9v/wVJf1HSH+3puAAAAACAM7ZzpfTm5uaTpH9V0r8jSbe3t7WketfjAgAAAADO3z6m7/7zkr6X9N/f3Nz8RUl/KOlv3N7ePu7h2AAAAACAM2ZijDsd4Obm5nck/R+S/vLt7e0f3Nzc/K6ku9vb2/9y1feEEKL3uz3uW3HOyvtw6NPAieG6wTa4brANrhtsg+sG2+C6wTa66ybP3R9K+p1NvmcfldI/kfQnt7e3fzD59+9J+s/XfYP3UV++DPfw0Pt3fT042nPD8eK6wTa4brANrhtsg+sG2+C6wTa66+a77642/p6dGx3d3t7+StL/d3NzczO56a9I+se7HhcAAAAAcP72siWMpP9A0t+9ubkpJP3fkv76no4LAAAAADhjewmlt7e3/1AbzhcGAAAAAKCzr31KAQAAAAB4NUIpAAAAAOBgCKUAAAAAgIMhlAIAAAAADoZQCgAAAAA4GEIpAAAAAOBgCKUAAAAAgIMhlAIAAAAADiY79AkAAIDd1T7KxyBnrApnDn06AABsjFAKAMCJu69ajRs//Xcvd7oq+RMPADgNTN8FAOCE1T7OBVJJGjdetY8HOiMAAF6HUAoAwAnzMbzqdgAAjg2hFACAE+bM8j/lq24HAODY8BcLAIATVjijXu7mbuvljmZHAICTQRcEAABO3FWZqcwc3XcBACeJUAoAwBlIQdS9eD8AAI4N03cBAAAAAAdDKAUAAAAAHAyhFAAAAABwMIRSAAAAAMDBEEoBAAAAAAdDKAUAAAAAHAyhFAAAAABwMIRSAAAAAMDBEEoBAAAAAAeTHfoEAAAfQ+2jfAxyxqpw5tCnAwAAjgShFADw5u6rVuPGT//dy52uSv4EAQAApu8CAN5Y7eNcIJWkceNV+3igMwIAAMeEUAoAeFM+hlfdDgAAPhZCKQDgTTmz/E/NqtsBAMDHwogAAPCmCmfUy93cbb3c0ewIAABIotERAOAdXJWZyszRfRcAADxDKAUAvIsURN2L9wMAAB8L03cBAAAAAAdDKAUAAAAAHAyhFAAAAABwMIRSAAAAAMDBEEoBAAAAAAdDKAUAAAAAHAyhFAAAAABwMOxTCgAAzkbto3wMcsZO9sYFABw7QikAHBEG1MD27qtW48ZP/93Lna5KhjoAcOz4TQ0AR4IBNbC92se5nx9JGjdeZeb4gAcAjhxrSgHgCKwaUNc+HuiMgNPiY3jV7QCA40EoBYAjwIAa2I0zy4c0q24HABwPflMDwBFgQA3spnBGvdzN3dbLmboLAKeAxUoAcAS6AfXimlIG1MDmrspMZeZoFgYAJ4ZQCgBHggE1sLv0c+NevB8A4HgQSgHgiDCgBgAAHw2LlQAAAAAAB0MoBQAAAAAcDNN3AXwYtY+s1wQAADgyhFIAH8J91T7rbHtV8isQAADg0Ji+C+Ds1T7OBVJJGjdetY8HOiMAAAB0CKUAzp6P4VW3AwAA4P0wdw3A2XNm+edvq24/NayVBQAAp4xQCuDsFc6ol7tna0rPIcCxVhYAAJw6Ri4APoSrMlOZubOqKK5aK1tm2wduqq4AAOC9EUoBfBgpZLlDn8berF8r+/rnSdUVAAAcwnksqAKAD2ifa2XpUHz8ah81ar2qhfcJAIBTx0fgAHCi9rlWdt9VV+zXbBXbFo3qqqWKDQA4G/xFA4A9eu81mftaK3vuHYpP2VusHQYA4JgQSgFgTw61JnMfa2XPuUPxqaOKDQA4d4RSANiDc6hmnWOH4nNAFRsAcO4IpQCwB+dSzVpWdWWbmMOiig0AOHeEUgDYg3OtZrFNzHGYrWJf93ONwvIPQQAAOEV7G1nc3Nw4Sf9A0j+5vb39q/s6LgCcgnOsZp3DlORz0lWxy9xpdOiTAQBgj/b5cfffkPRHkj7t8ZgAcDLObU3muUxJBgAAx20v88pubm7+nKR/Q9Lf2cfxAOBUFc6of0KVxNpHjVqv2sdnXzvXKckAAOC47KtS+t9K+s8kXe3peACAN/bSetFznJIMAACOz86h9Obm5q9K+rPb29s/vLm5+dc2+R7njK6vB7s+9Jtwzh7tueF4cd1gG4e8bqrGq7JWRX/+9n4/V5k/Tc29nty3DVGZNXNfw2Hw+wbb4LrBNrhusI1trhsT4/MpW69xc3PzX0n6a5JaST2lNaW/f3t7+2+v+p6m8fHLl+FOj/tWrq8HOtZzw/HiusE2DnndjFqvh3H77PbLXqZ+RvA8Zvy+wTa4brANrhtso7tuvvvu6g8l/c4m37NzpfT29vZvSvqbkjSplP6n6wIpALw19tV8GetFAQDAsWCzOQBn5S321TzHkMt6UQAAcCz2Gkpvb2//vqS/v89jAsCm3mJfzbcIucfi3LawAQAAp+k8RlYAoP3vq7mvkHtMldbFc0nnwxpSAABwOIRSAGdj3+sk9xFyj6nSekznAgAA0KGjBYCz0a2TnLXLOsldQ+6qSmvtd+t6vo1jOhcAAIBZfEQO4Kzsc53krs2A9j2deBfHdC4AAACzCKUAzs4+10nuEnKPaduVYzoXAACAWYxGAOAFhTPqb9HBd9/TiXdxTOcCAAAwi0opALyhY9p25ZjOBQAAoEMoBYA3dkzbrrz2XI5pOxsAAHCeCKUAgKXYQgYAALwH1pQCAJ5hCxkAAPBeCKUAgGfWbyEDAACwP8zDAvAM6wjBFjIAAOC9EEoBzGEd4ds4taDfbSGzeC2cwrkDAIDTwkgTwNSqdYTlFnt04smpBn22kAEAAO/h+EdFAN7N+nWEx7GlyalZF/RPwTFtZwMAAM4Ti4MATLGOcP9oGAQAALAeI00AU906wlmsI9wNQR94We2jRi1bDgHAR8X0XQBzWEe4XzQMAtY71TXXAID94bc+gGdYR7hfBH1gOZqrAQAkQimAiVPbsuTUvHXQ5/3DKaK5GgBAIpQCENPnTh3vH2ad0gcUrLkGAEiEUuDDY/rcaeP9w6xT+4CCNdcAAIlQCnx4TJ87bbx/6JzqBxSsuQYAEEqBD+6jTJ87pSmNr/FR3j+87JQ/oKC5GgB8bIRS4IN76+lzxxAGT21K42sw/REdPqAAAJyq8xiVAdjJa6fPbRo0jyEMnuqUxtdg+iMkPqAAAJwuQikASZtPn9s0aB5LGDzlKY2vwfRHSHxAAQA4TYRSABt7TdA8ljDIlEZ8NHxAAQA4NYzKgHdU+6hR61X7eOhT2cr6oDnvWMJgN6VxFlMaAQAAjgeVUuCdHMP6yl29Jmge0/o2pjQCAAAcr9MaEQMn6ljWV+7qtUHzmMIgUxoBAACOE6EUeAfHsr5yH14bNAmDAAAAWIdQCryDddNej2Efz9ciaH4cj3VQE1rlNtNFQRsCAACwf4RS4B2smvZatf7k15l+RKf4QcI2fnU/1pdhM/lXpetBrl9c9Q56TgAA4Pww+gXeyeK0V0n6Oqrn7nOK60w/mnNoWLWJxzrMBNLky7DRVVlQMQUAAHvFyAJ4R4Uz6k9C52u2V8FxWNWw6lS3+FmnCe2rbgcAANjW+X28D5yIY9nHE5t7q4ZV3XTgEIysjUcxLTi3maRqxe0AAAD7w+gC2IOq8Rq1/lVh4pj28cRm3uKDhG468EPlVbVeg8Kpn7uDTwu+KKyuB/ncFN7rQc7UXQAAsHeEUmBH91Wrylo9jNO0xteEiWPax/M1Nmn0c8zNgLY9t31/kFA1fjr9t2rTMYe1V+Hsu60vXvda/OKqp6uyoPsuAAB4U4RSYAfdGsOi/3Tba8PEa7dXOXTY26TRz3s0A9r2ddj13Pb5QUIb0lrUsDAt2McoJ/Pm+9hu8lqkIFq82TkAAAAQSoEdvNUaw1UO3fl1VaOf2RC+yX12te3rsK9z29c+rZlNj2mNlfR0Xs6YyX/frjL5Hu8TAADAJpiLBezgLdYY1j5q1D7v6HoMnV836Rj8ll2Fax91V7e6G893gN30dTi2jsflZO1o4YzKLIXcQeHkrHnz9cXH9loAAICPi0opsINujeGsl8LEummn6yqA712VXWaTEP5WXYW716b2QffjVmXmdFk+Pe9NXoddzu2tpk1304Eve+/bfZfuzwAA4FgQSoEdXZWZ+v1coW5eDBPrQudL0yk3DRFvueZ0k0Y/b9FVePa16aa2Vq1XkaXn6ENU7aOciWsfZ9tze+tp07tOB97mPaf7MwAAOBaEUmAPytypn60PFS+FzpcqoZuEiPdYc7pJo599dxWefW2cNRoUTsPaK8agUSP5IDnrVTf+xedcZk5BkjFSz70cwo597eUu7/mpdn8GAADnhVAKvJOXQucmldB1IeI9w9Mmlb19NQOSnleD+7lT4azy3Glce/Xzp+e37jkvBjiTS4Vb/2vwGKZNr7KP93yf7xMAAMA2WDwEvJOXQuem61MLZ9RfEjqWhScfooZN867NkN7Cstfmosw0yJdX95a9Fts2ijrmtZc0KwIAAOeASinwTjaZfrvLdMrFkDRqvIa111XM1bT1QfcK3cc612WvzapAuSwwblvxPOa1l9sE5kPvcwsAALCIUAq8o01C57bTKWfDkw9Rw3p+Gueh9grd5zrXxdfmNYFxl4rnsa69fG1gPvQ+tzhffNgBANgFoxHgnb3lGr4uPA2bRlcxXzHFd/fH3nQt42vWPK4b1K772qaBcdeK57Guvdz0+R97w6ZNEX6ODx92AAB2xV8N4MykgXqasrtoX+sgN50Ku+n91g1qNxnwbhoYj7XiuatNnv8xN2zaFOHn+JzLhx0AgMM6fKcOAHu3adOkbW06FXaT+61rQLRtc6J1VjWKOnfH3LBpE29xLWB3NNsCAOwDHzEDZ+otq4KbToXd5H4vDWp9iPIxyhkjZ83M106juncsjrlh0ybOodJ7jk79ww4AwHEglAJn5vmau7ddv/pS6H3pfusGtY91qy+jZnrboHDq56v3dMV6pzx9mfBznE79ww4AwHEglAJn5L3X3K0LvcvCce2jRq2fC0SrBrWS1PqgMnOq2vS1Ye111XvewAmb2/SDimNrKET4OV6n/GEHAOA4EEqBM3FMDUeWhePufGZv6wLzskHtaBJEL0unIrMKMcgaq15OZeytHWtDIcLP8TrW7tQAgNNw+FEGgL04ljV3y8LxY9XKR82FiMXAvDionZ2WOfs1pmu+rWP6cGMZwg8AAOeH0R3wjrrpq2/RMfRY1twtC8c+RoWlt6/u0PnWHYSPzVteG69BN1UAAPDeqJQC7+Stp0Qey5q7ZSHYGSPp+Xm8FJg/ynTNY5oueywfbgAAgI+DUIoPaZsmLrs0fnmvKZHLQtx7N6xZFo4vJgFrm8B87tM1j2267LF8uAEAAD4OQinOzksh7DVVqe5Y4yao9WGj71nmLdd7Lj7f2RC3yXN9i9C6qsL5mqrnuvM6ts6wuziWtcCzPkqFGgAAHAdCKc7KSyHsNVWp7li1j7ofN9M9Mtd9zypvNSVy3fPd5Lm+5bTRZRXOTaue687rmKa67sOya8CHqNpHORNXXmNvHczPvUINAACOB4uEcDZWhbDZxjGbNnGZPVbXoGdYe/nw/Fi1j3qs2rUNal7TtGfThjcvPd+Xnusmr9chrDuvTc/5WJoGbWLx2hg1XqMmqG68vo5q3Vfts++5r1p9HdV6GLcr7wMAAHAqTre8ACzYZBrkphXL2WNZYyX5ye1RbtKwxxk7rdrF3OluVK+t2m0yJfK+anU3bqd7cn7qZUuPV/uoYdOo9s8rad3z7Z5T7eP0eIUz09u75+hDTM/LGDlrDjptdPa8Nr396WubT1k+Nt21MfYpSPfz1VvnHNsa1GN2TtO8AQA4Z8c9UgNe4aXA2Q1QM2efrQ9dHLAu7pFZZk5V6yddZDWtbL02HKybEln7qF8/1Kra7phedRueHa8LXT6kacVl5nRZPt/fs3BGPqb7dMe7HuTTYzljNWq8hvXTcxgUTp/7xdLzey/bTHWefY9PNbCl98ssPc/Z0H2Ma1CP0Sl+OAEAwEfFX2icjXVdQxcHqJmz6uV2ZQVl8ViXpdP1IJ/7nlHrn32ftH04GLV+JpAmVes1ar0K93ydqLNGg8JpWHsVmZ2e82xFzRmj637+VAk1Zq666hfyzeK/D+Gl7q/rvrZrYNu2sravitwmgXzb9ckfqWp4yh9OAADwEe0cSm9ubv68pP9B0i8kBUl/+/b29nd3PS6wjVVboiwOUFsf5Ips7QD1pem2+25eZFacyuzti6GrnzsVzqpXWA3yfO4cu/s6a6ZTjp9uT8/rsnQqMjs3vfcYKm7rXvt1X9vlPdm2srbPitwm27Fss2XLR6saUk0GAOC07KPRUSvpP7m9vf0XJf0lSf/+zc3Nv7SH4+KD27ZZTeGM+tmm1bPXHWvxa5s2L9pEzzkNivnjDQqnnns+NXeWs+ZZIF1139nbZ6f59mae464dgfflpdd+2de2fU+2bfr0Fs2irspMn/uFLnvpv8vC4yb3eYtzPJUGUm/V7RoAALyNnT8qv729/VNJfzr5//ubm5s/kvTbkv7xrsfGx7VrZWd2quJbDlC7qt1Fmcn0i52mBhbO6JtBocK10+m2F2W2dZXspftuU3F7D7tOM91mj81tK2tvVZHbZDuWTbds2dc5nlK19VivbQAAsNxeRxQ3Nzf/nKR/WdIf7PO4+Fh2XQ+2bPD8lgPUwqXw2Izq6fmvC0Trvr5JoHpN6Fo1nbn79ybH2sdaxE2Psa/g89o9Nrf94OIUKnL7OMdTXKO5zYcTOA0faX00AHwUewulNzc3l5L+nqT/6Pb29m7dfZ0zur4e7Ouh98o5e7Tn9lE8Vq1i/jxQXJSZLl4IKFXjVVmroj9/+3U/lyS1ISqzRuWS4++iu26+jmrFJsjKKUoyuZ3rZrvu61Xj1Yao/huc37rH/9mabrsvPZ9tH3PZMVa9d/1+Pn09utfoLd7DcpRr3Mx2Zd7suW77fdL7/b7Z5Ryl3X4msX8f+e/UPn4nfVQf+brB9rhusI1trpu9jCZubm5ypUD6d29vb3//pft7H/Xly3AfD71319eDoz23j6L2UXeTquMs0y+m1chVRq3Xw7h9dnuoG/WzNKhuJI32cqZPrq8H+rPfPOrrwvndSar6zbRCuerrVevffGrkusdfVSF9zf13fcyX3rv3mD5qZiowMQR9qZ6fzz6/7z1/35jJelBjJNO4jc9R2u1nEvv3Uf9O7eN30kf2Ua8b7IbrBtvorpvvvrva+Hv20X3XSPrvJP3R7e3tf7Pr8YBd1oNtM1VxX1PBXlq7t+rrY+9VvcPUyNeuLdzHWsRNj1H7mN6HEOXs84ZN3fRRH+J0ve1bvEavnfb7mu879JTDqvWqJ9dZJf+qUM8aTRwDuiqvdujfLwCwq32UGf6ypL8m6R/d3Nz8w8lt/8Xt7e3/vIdj44Padj3YawfPq6pv2/yB37Tb7aK4opHpvgdarw3s+1iLuMkxZt+DURPkbNrqRnp670at16jxGtZP79WgcLrsncZg9NBNgvaxJpQ1mji0U1jDfQiH/v0CAPuwj+67/5skRifYu22rVpsOnlcN1NsQ1frZ9XfP/8AvC63bdrstMzetYM3a90DrtYF9H9Wxl46x+B5clk61jyonW+F09wvBzAVSSRrWXiEc/6+edYHwveyrwvTan0mqN9gnKvbPnWITMgBYho/ScJbSGk4rH4Nqn8Ld4uB42UDdh6hx26g3Exgeq1ZBmu6LuexT6evJ/78UiFd9/b0GWq+tdm1THVsMIuuOsew9KJxRbs3c/ayNKjOnqn16jcrMydrj3i9T2m2f3H05RIWJ6g3eAhX7eUxpBnAuGCHgLM1PCfXyIVXhpKfB8bIBuY9Rdub2bspoE4LqzClzdq6KKqVPpWfXhK6qJs2Gtf5ClWyXgdZiCFxVnVr3+Ou8pjq2KogsHqM7l67SWfuoEIPs5JwX3xtnrC5LpyKza+/3Wu9RyTuGKYfvXWGieoO3tO0smnN0DL9fAGAfCKU4atuEhtkBsQ9xOu2zyNIxZgfHiwP1QZFNQ+fs93ZBdVi3ksyzc2nD8opdd/7jJrw4JXibgdZiCOyaAC0+zntUrTYNIovn8lC3qqbblXhdD/Jnr2/3Xkle3Wu0a6i6r1rdjdtpyP3Uy96kkted+2PVTt+fi2lQfz/vWWGiegO8D6Y0AzgXhFLszb6rTrPhxYeozFl96j0PLItmB8R+potQmBkQd4PjZQP1H0eNHqpGXYacDVXOGDXh+cA6s0bNivOvfdT9uNGgcNMGPttWjWZf4+440+caor6MGl3NvEbjxssau1XV6rXv5yZBZDG4+hBVt0GDIpOz6fV1JlV7N536vI3aR/36oZ6ZDuxVt2GvlbzF98pHKcSoQy7Bf68KE9Ub4P0wpRnAOSCUYi/2XYmbDS+zXVerNrxY0Zod+PqQtsKwxs5Ny529z+xA/b5q1fqg3FrFGJQ5O532K0nOGpV5/qzqWeZubu/T2fMPk7A2rL0KZyfhJKhovQq3+Wu0+Bovju+7AB4WqlFNWL4f5bJtWbpBzTb7pm4SRBaDq49RMUrGRBXOLdzveXjaV6gatX5ufaqUrpPRK9+TVRY/UBk1YXIdzX8oca6o3gDviynNAE4doRQ7e4v1Y114mZ1CK6XAte7YXbDKnNXXYaPKe0kmNTxqgwrnVg6OZ5+Hs0Z9m6aLzlbtNt0yZjZ8pTCcjntXeYWQvpbbVlbaqLPvste4aqKc0XRfz27arl0Ih7nN1Dyr467eliXtFxqmVV1ps/dzkyDyfK3o8nN+64qaWfE0Vt3+Gs+qwTGqav10+vjT7e/X6OgQqN4AAIBNEUqxs32sH1sMYk9THufXalrz1El38diLwSoq6qrMdN0zipNjDYpcF8VT4Jl93GXPo587lYVTbs2z7V/WPbfFSmyZOT1UrZy8rIwGhZOz5lnYW1VxXtWl1hijGKN8iPIx6qo3v1axlztdFFYhbr4tS4hhWtXtAu+q13zRS0FkMbg6a3Q9yJ+tg509t7cINT3nNCjcs31Pe273SsPie9U9t8UK9keYykr15mNiKyAAwGsRSrGzXdePrQpivdzJzzQQml/bOX/sZcGqalO1z3aVRJm5LUQWHzdzy893dr/MTS2Gr8vSqVdaRR9ljVka9tZVnFe9lp96uR7rVuO2mXakzZxVL7dzA8LXbMvSVXZ9jHJaXeVc99zXBZFl57JsEPuWzZkKZ/TNoFDh9t986Fk12KYPIWarwUxlxbliKyAAwDb4S4Gd7bJ+bDGI1T5q3Nby0cgYKc+dvrVS6xR8P9YAACAASURBVKV8El7KfP10WenlYLUsALY+PNvyZZfwsBi+JOnrqH52PzdX/X3Ox6B+5pa+xt15z+6r2vogVzwPWKvC4mKI6iq7q6qX+7B4Lsu2jHnrLUXeanrpsp+HbwbFzvu9AseOrYAAANsilGIvlgWwUetfHFDPBrGHKjWfGbde3z9UitHookjTLK96uXyIciYqhhTuZiuCmwar7ryaFVu49HIrV2R7CwOLYWtdeF+6b2qIqn163rOvcQip6jv2/tn3SPPV15eey7IQ9dPL14eofXqvLUXeanrp6sC7236vp4yQff7YCggAsK3THuXgqHQD/NcMqGcrl8O6VROC7katisxKihq3Ro0PCkHq509rHEeN1/Cxnm5/0sufVxIXg1XV+mmlclkzn+589h1UZgfj66pzi+Fw1Hj5IDnrVTd+Zs/RqHHTvvg8XvM+7BqiXvs6vBRKzmFLkW2vo3OsNp1jyMZz5/BzCwA4DEYF2KvXDqi7IPbDaKS7cas2RLUhSj4oxrRNR+GcmhD0Keb6PKmYdg1quuYx48brc39VdW/5es1Rmzrz9vM0YFqcorqPys7qwfjysNKFw7FPXX/7M1OVl+05WjijhzZVVLvA3lWEXxtsuhBV+7hRlfs1XhtKPvKWIudWbTrHkI3lPvLPLQBgN4RS7EUX4Gq/fFrsugF1mTn1s0xXvShZ6etjo/uqVYhRl0UuScqtU9UE+SLOdeSdbR7Trb1c9jjLpgknUcYYfZpUXLvncjdu0trMmaDXhah1YXX2a9LLwXDZsQpn5KNZOpBbtufoZelUTAZ+3XFG7fppvatsW9F66TXZJpR81C1Fzq3adG4hG+t91J9bAMBuCKXY2WyQ8SFq1ARdls+nk67iY1A/t/IhU+29Lsv039ob5S51Lr0qs+m2Lt060cVQs+4xZqcJV+1spdEqxvmOvHfjVvfjtK/noHDqTz75LzOX1ryuCG2Lgc6s2PSyG4yvC4CrnsuqPUf7G74W616jbcPjS0F2l1DyEbcUObdq07mFbLzsI/7cAgB2QyjFThaDjLNGzqbbu0H0SwPqbnB6WTrV3uqiCPrcy9XGqMxKhXPKJ98/KHJ5BQUjzWadlx5jOtBvn7rfdnuFSppUedPU2DBz4Nn9Osfeq1oR2qrGPwt0rQ/yUc/Oyxmrxzroy6ieNizqugV3AXBVMHlpz9Fnz7dJ04BDDLos87Wv0TbhcZMgSyh5vXOqNp1byAYAAPtHKD1hh+xm2T32si62/dypLJxyazY6t25vzWHdyhkj55w+95+vi+zlLu0/2njlxiiYqBClXuFUZi9/Kn9VZrLGypoqPY6dryx2oawLiJ1uW5m4fGayRq2XHTdzQVxKAT2zz8Nz1XrdjRv95rHWqA4qMquLyXO47D0FwFXBZNPAclVmakNU7VvlNm11c1+1Lzad2vT29Nq8HGSPKZS89mfmkD9j51RtOqeQDQAA9o9QeqL21c1yk0H34n1mH3tV99ee2zx03FftZG9QoyYElXk+fS6zW6B4Bd2P2ulxKx80rL36TaY7W+uyzPVNP1/7HHJn9amXLw1ItU/hq9tOppvm60wKVWXmVC9UBR8qr36IcoXT/bhJwXJm6nI/y9XGIGMkJzt9DorSqE6Brm6DCpeCcAib7S3anW9X4V32Wtc+qvXdsZNNmk69JjxuGmTfOpRsch2/9meGjrH7dcwhm+1qAAA4LEZYJ2hf3Sw3GXR3ayxDDLLGalC4SYBMlnV/zdz6sLTquXSD1taHuarjY+XV+qAQo+7HbWqMlFsN67SnadWm5/5YpeMsBtNlz/Nzv1jaYKgLZZelU5FZlbnRp7KYm4o8G8idTRXR3Dn1MquHupWzqaOvj1HDOq3/fKi8nJUya3Q/buVsei1HjZePUZX3uiwLWbu8HLvug4HZ9272fttMx31teHxNkH2rULLJdbzpz0z3+oVg6Bj7QWx6/RBaTxvvIQAcN0LpCdpHN8tNBum1j/r1Qz3TGMjroW70ucznpr523V8laVynPTXrxquNUYMiW1m9lNLU13GbtjqZHSj4GHRfxbmmQ2VmZUzaJsaYSVOlOuhyZgA5rFtdFNncc1j1PPszU367AUuZubWhbDa0NSGqmmxN81i1GrdBRlIdvAbGTd+J2kfV3su3UYPMKSgqRq/MGfXl9FC1021gvo5aucH84/44ap6mNts01Xn2g4HuObUhzt2eue3Wcr42PL4myO5jYPjaDsfSZj8zs+Fk3HrFqGczAOgYe142+T1Ixfz08R4CwPHjt/IJ2kfjmE0G6aPWz3WqlaS6iaqzoL6dH5iHyd6h9+NG49YrBKnIjL4MU6BcFkzvq1ajqp1UOP3c1NdUqWrnmg5VbVAvsxq3QVJUiFFFZqdNkNJrYOaew+zz7Br+2GkV8XkYkTbbQ1Nycj6qkpcPcTqt11mjfpZNXrfUsCjGoHGTphr7Mm1p46xRlhvdPbbqFza9fm2UibV8iPrUy3RVZvpx1Oif3o2njz0onNxkqvNiha/27dxU3daHZwH2rdZybhJkF7s0Z5Op1LtU91/qcNx56WdmMZxYY3VfNdMmVy8dB6fppd+D7LF6+ngPAeA0EEpP0LIpk6+ZMittFmy78X4zE+bS+Nw8m66bptcG+RBTA5/K65uLQtYYZQ/jueql9DRQcDZt+TKsUwAuMqtPvWw6jXWx6VCeWfVyp36ZaVDk+uGxmn6t66brjJ2bhikt7k3q01Yv2dOgs26DmhAmDYGionl5XWz3PtyNGxlJQVGZdXJGMjKqQxrYhmg0nFRUrTHKndVj3SrLcl2WmayJeqy9Lgo7fa3HTaoeP1Tz278Ma6+rMlPQfOgKMZ37ol5u5Yrs4NPWZgeGo8ZPX4+qDdMA/ppjdNZ1OJ710jTjxXDSrSvumlwt3h/n4aXfg+yxevp4DwHgNBBKT9TslMlxE9T6oIdJRWyTqUmbrAXsOacoo4eqURuixm2lQZnpm0EhH6UQoy7LTDFKvonyQXqsW/342ChEKata9XKrusk0ar2kpymeswOFfu5UuLQG86qf6apIayO781xsOnRRTkJMKeXOzE1t7brbjhuvEKJqn6bZjlsvZ1IH3W5dbBdcfxg1+uEhbRUzarwue5n+vHqqnJ97LZdNPe06+v7YenkvWQV9GYW0t2ovV+uDnJWKzE7Xn/oQJRldZFYmxLRud9QohEzOBvULp14mNaF9Fsql9GHBZZHPVUAvy/zZlN70etmNp+Oumlq7jym33fvtJxX1ThfAN6laLBtcrupwvOxY66YZLwsnl6XToMhlbWQd2pl66fcg2xmdPt5DADgNhNIT1nVgbX07d/smg/zaR2XOaGDWD7ovC6thbRVarxgk76OGTQp4VetlYwpyPwzTVMcfRymQpmqh5EMKUcOmnetcu7je0VkjJ6Oee76NSJFZBUmD0urbfjl3nt/0c11MKoEhGLUxaDTp5vubYZOmzMaoPDP6yaDQVZHJzuxNWrWaBtLGR9Vt0I8PtX5xWSpzM/uQtl6PVZsqZ7PBWCkY9zQ/jdgH6aJIXx/7NJVXSiGs9pKzaf/T2kW1IaZKa4y6nAnMgyJX4Zq5UC5J/ck63cc6qAmtcpvporBLpyG/pgPysqm1XcCfPeY2a7FCMKp9mATyJ3auIrU+ODtj5UOcvgddpf5TWUyP8VJ4XNfNeNW+sG/lsQ5q78eq6vCmj4P11n1YcUzbGWE7vIcAcBoIpSdukzVRi4Ot+6p9FrD65fPKWOoua9Uv0ro676UYg75/rNXPjHJr1figqk3VwDoGXRaZxk3Q576bTGU1kjUa1UGls5MgHVW1jYosk1GcBo3BwhTfMnN6rL18CLrMraxSEC7c/GWbutFGjZtW49brbtSqDVGjJjVEMkYaVa1GWaar4un70ifljYrMqm6DotJrWRZWQU/hadR6fR3WcxW+2k+mM9uo2kdd9QtVvXw6zblwaW1rP3NqvJVM1KiJKp2UGaN8MtW4lxldDzIVzqqwKWg1Psg66aKwCnES0jOrEMN025vZENmoUYhu621XVk2tfay8jIlzzX526fJct1GjtlXdBvUmDaVeqkjNqlqvUROmAX1QOH0zKGbOZbepeO+5l+av7sf6Mmx01fZ0fz/W9SDXL656b/Z4L/nonUnXzSZgj9XT9xHfw4/+Mw3g9BBKT9y6qUnLKmdl5vTjkoDVBYTFitmXUSMfohofNG5ajVovO25SkM0y5bmRMWkKbh2kx9DqqnSy1qqfOxkjldZMO/J2QViSLqPURslHqZeldak/jhr1cjttDNR13lUh9a1buY1Hd87WWIUY9VC1si5VP4fjVllm9eOoUp4ZXfdyXZQpADc+00WRpg+PvVVUK6MoxdnOrfNTTiXph2GtEGOq0oaoxphnA1tn7DR8DBuf1k/2c/2kn8tHTRpCGZlo9PPLQm2Ieqi9nDOKPoW5ZYOplxt3vC6crZpa20SvtonPmv1s2+X5snQqM6uHplVpnQaT6uAmVYvuON1WPV34L7P9rglb9vrte3D3WIdpA7DGezU+6DcPta7K4iAVUzqTvuyY91jFZj7Se8jPNIBTxG+pEzc7NWm24igt3yqjWQhYxkgPdauvVaNBls19TwqiXnfjVuO2lWSUOSNFo6aNuu5ZtW3sZqZKQbooM9Vt0GXh1MSo616mQZFNw+19lbZsaYJXo6jHUTsJdlZfQlDdRP3kotCwbjWbt4e1n4ajxVA0Wy0unFG/yPR13GpYtfr+a6N+z8pHyXujh9qrn2W6KNP9Lwqr60GuL8NG6WWJ6heZ6uAVK+mnl4UWa9HdVjTX/UmVzxpZYzSa2Vu1lzs1PurLsFHjo6omHeVu2KhwRiFEXRaZrJOuXCZnjB7qRplNa2hzZ1YGzX037nhq6jI/tTY3Tq3auWY/s/ffxOK55s7oG5erLJzySVOqTYLe4ns83105/f9bVAbWDe62fbwmpOn249arGVs9TPbX/TKudFH093Lem6IzKXBe1v1MA8AxI5SegasymzQiamRNqjjejZtn96t9lIJX46Nylyqc4yZo1HjlrtGjbeSD9KmXKYSo+7pVmVsNZFU/GkWftmS56OUqM6t8EsbyzMqH1OQnd06f+7nKzKgJUunMtMPufdWoDkGPDyNl1ilrgkKM+nFc6+GHVk30irJqQgqO8pI1mlbpah/kopl21O2eU+3jXDdgZ4wGhVXVpoKnUQrYvTxXaa3aGPVlVMsaq4vC6hdXPfXyXF+GY/3iqpSVVIWgfBIQJc2t6+y2oullT+HsosyUxTAXtP7sMe3x2sxkvcZHPVY+fa/RzBYuRkVmlVmrfv503GVBs+suPDtVuLv9JcuCVPfBxux6zzJLlcwQ0xTs7vEuy9dt4bLqnF7qbLzpcbrbN6kMvDZErhvc7bLWNreZfBinPXZnppN7nx7zPcMgnUmB87L+ZxoAjheh9AzUPqr1aZ1eZ3GrjG5LlKsyNQWqa6lfWI0mA+uHcauooIdxkK57kqK+Dlv5kBrx5M7K5lbWGClKubMqnFUwqfNrmTk9jCuZ2ZDko2JMHXALZ1VkVvfDVmVhNW68enJ6qFo1wattjR6aVsFLuY26Kgv1Cqd+bhV8+oMaFNXPMg3rtIayDVEPVQri9WRda2atqtbrc79Q6ZwyZxVjVIhG/dxp2LSyRmqskTWVQswnU2RTY6JR43Vfp6pziK1sZvRblz1dlJmqEGSN0ac8kzFxbkqrNB+07qtWTeM1rEPa5kVBpXOKCsqyp/AspXWcbZTqNqiebPXSreNcFsaqNq2zTRXvFJJ+evm0tnJV+FoX3LppwllmVDVPweink2nFw7qdbJcTptOKZ6+/VWFvX01G1h1nk2rfNtPZVg3iRq3XaGZNtrOLVe31LorUROpu/NSg7HpQqJ/bdw+DdCYFzgs/0wBOFaH0DLy0VUZqLJT25iwyq28Hhe7HrZx1uiikr+NGcdIUKCrq+4dKF5NQlE0qnaPGq3ApJH4dNYrjONlTM+qxbPXtoEgNkczToNxaaVTHSYiKqnzQ9UWuGKRHn5oSZZnReGQUFRWD1C+c6jbK96QfH2qVn3uyirLG6rpXTDvc/tP7SrX3sqnHr8rMyVmrMje6Nnl6XUJQP8/042Otqm01HHt9d5XLx6hR7dXLntaohpCe40Pdqg1Bj1VQmGzdMqpS46QQotogXQ6srnrFQsixqhqv0WSdaNc1+NvLQj881Bo2kjdRP73sKbdSL3PT7WGGtddVL5eJKXB2U5W7da+d2sdpIJrdRseZp4ruqvC1SXArnNFPB+VcyJSk8ahOnYJ9VNN61T4uXYM8+3iz9tVkZNVxNmn2tc0U1VWDuHHT6svoaSbCoEgfIrwmUP78U09RUtHP9Tl7qo6/98CRzqTAfh26wRA/0wBOFaH0DKwayHZbZQybRs7k08peF2jyzOjHofRQpYpNjFKZWZWZVZY7fVdmGtVej5NpvFe9XP3cKkYps0ZfR61yl6qUD1WrIit01U9bzIRgNKybaWOaUdsqVFLZswpRqmLQ/ajRoHQaZJIrMn0zcLofebVBsor6xeeePvWyaSjuJpfWPmpUtzLGyE6eetWmEJg5pxDSH+PCWoWQ9j69CLl88PrhsVU2bpVPmimlNaNRrY8atl5fRk1ae9sEWWs0bIOKkfTTq1IxpKB9X7X63C81KOx0SxZJ+jpKW8uMW68Y0+v8bT/XZe7UhKBBmeuqdNN9ZaW0jjNzqXFPkdlpE5/+zJYz0lPH5GHjNWy8ysyo75yMMfKKk21n3Mrw9ZppmrNrNkeTKctdpX3yXSqzVO17KezNDtD6M5X8TQZuq6YaL5vOvMzTWtntpqguG9xlzmq00PRqut75FYGycEbfDHIV/UJ3k9f1UAPH13xocOgBN3DMjqXB0EfsNgzg9BFKz8DLn4zmatp67nucNboq09TM7+81830pGJWZ1dWkAhRi1P24lTVRD+O0hYqZWesppf03QwxqY1AhI6/FxjSZvG/krNFvhrVG41ZOUmyjvlRew7tan/qZPpWZPl/kuipzZdaoyJycSQP/MAkRaS2lSeG29bIm7REaJluwWKVwlGdWV2WmJgQV1mrYGH3/MNR1kalugsYhdff9dVnou6tcD5XX11Gj7+8rldbpsp/Jt7WGMQWczBr5mLZI+XE4nlYnx6HWaBKZ0xpXaVy308ZMRWZVyOpzL63H7GdPW/U8Vl7341Ypl6RAd1m6ZwGu65h8X7f6/q6SFHXRzxSDdN3PJRnVuZ/ef3Frmm2ndHXrV2f3SZXS9PDRwm2dLuytGqBtMnB7zeDupet/l+lsi4M7H9MHCot7x2bu9QO/qzJTv58r1M27DxwXw+UmnUmPZcANHKNjaxr2kboNAzgPjCjORJk5RZOqnf2FP4LrBu3f9Ev94pPXQ9XK2RT0Mpv2IO22LCkzq/KqlDNRyjL51svmRo2PikrhRzL6Mm4Vo1E/t5PmQ2G6NjINfJ3aGNT6qDyzij6omdxnUDgZ49TvZ/r5RanKRxUzazTLzGrcRDXBy8nIWSvv05pNKVUZf/4p7fOYOaOByVUqqPXSqEmVYGOk0ln95r5R470y51S3QU00+tzP1LRBTSuFKBlnNKy8ri9z/fKHkb65SA2VhrXXY9XKGqPPvbTNiY9Rvg0ajdtpBXTcBj02Xp8mg/bFKljhjB5ro1Gdtq5p2yhr0j6s14P5ZkJjn6b0Nj5VdGufphaH6JVZo7pIgbhq0qCo8d0HAmlA9LlfrKz6pf1oVweiwhmVudH9+Om2wWSPVbNinNUF2WUDNGvsRtXV1w7u1lUGdp3ONju4q30Ksotb03zq5Rsda1GZz38A8R62CZfHNuAGjg1NwwBgN4TSM7A4yLSSCvd8XZ81T9NNu/0QC2f008tSg9zpN6NGd+NapjIyanTVz3WRp2613nsNq/RHN8SogTIZGzWugmSDYiV9LjONmlY+TKbsNkHOpEqhJF0Pct2Nag2KTE3rNQxWD1Wjfm7VKzL95KLQ5zLXN5e5YjTTgDearNWUpKqVitxKJkhGuhxkcpIGk4F9N4VWSoPti55Vt/wvrTm1+mHYSEbybVDrvR5HjX5dpOmXg55TiJly56Yh9tvLUj5E/fquljHSILdpuxzfqvRpHe3Yez1WzbR6elE45daqLNzSTrP3Vatf3o30w0OTHidPldRB7tTL5yt43U4tIaYw2suc2iAVudRzmcpJldgaKy3kAzdzqNng1k0hfpi8xuuCyaeyUNvGucY+UmrsZHItDXurqqjddiiLZgdum6wRXRU+Vw3+9jWdbTbgdo93rOu1lr1O24bLjzTgZooytkGDIQDYDaH0xC0bZN6NW0Uz3w32x1Ez7VRbuNS9drbzqo9Gw7uxMms1roNyZ3Q3bNS7KlNjo/A0XdeHdOH8s5/78jHqvvKy1sgoBaiv43r6h/jRGplJAx0fg37zOKlcWqOHqtIPj7UuJ4HBxFSFG+T5U1fVSTXUTtKWtdKffhmpaoIuykw+RH13VaqfOd2P0/RgZ9K53I0bXZSFrvspUF0Gqfat/viHoay1KrO0fUuIUcMqVXmLwupnn/uKk21mvunluuplGjVB31xlUrCqG6/vHyrVPpezVt/0chXOTirGyWDSOTi35tnAtvZRd+NW9WSvmBilcR1UZl6D3D0bxPQzpzJL+55aG2QkXfWtnOxkj9T02CGG1KAqT9VbxVQdHns//ZAiva5WrZ8Ph+vWghbO6KLMlobPwi0Pe6sGYrnN1Oj5dkUhpCDrzOq1mc7YnaaQvnY626pwcszrtbpznl23LD29Tl247PY07j5keClcfpQBN1OUsS0aDAHAbvhre4Re80l9mn75tIawbsNkrVtU5bx6edo65Z/edfMvnzbRng0hj1WjpgnT7T+KLG35MmxTM6Ox9wpeigrKMydjpSyzyibnGxTVtEFGVqM6yJigGCXnpLthmEwpdnqoGtVtkJ8MmAe500WZyUgaNUHWzb8GMUrWPu2fOWqC7kZezqZKqrOpG7BMVOtTobCdbN1SZilw5s6qsFY/No1iNPrtb3q6H3ldlFbjxipz0qfLQiZGFc7q20GpqvGpuVORqQ5BX4ZtCrrDRoOek5EUglTVQb6I+u66kG383EC/9lFNiHILe0/6yfrb3KUqct1OKtBh+drEVM0u0lrf3Kp0Vs5JikZtiLqcdOnNXD4NInUT9HXUKsSgYRtV970+lcV0jemqa2ndWtB102OXNUtaNkC7mOx9Onu7j1HDupm737LvlfRuU0iXvQbPn//LAfc9qm6LQdSHqC+jZro+WXp6nZxJ20ANZ5o1DYo0xXudjzDgZooydnXMH1gBwLEjlB6ZxcFw5qx6uV35B27cBN2P04Deh1bjNuiicNOtWe7GaeuV2YZA6f+N8qyRNFkLN5kjGpVC3XjslRmry16mEKOMM0rZ0KrxXo+N9FNjpk1wnLW6KHON6jZV9Ix01cvkjFGM0rBuFUvJyKh0TnWUYjD62adCv7jqScaobqPaOuiX1VAjn4JsbtPtxqTwUoVWUgqr41aKMWjQs7ofG9VNarQ0qr0ue5l+elnImjS9Ns8yOZP2aS2dlVWlxgdd9qw+9QrFGNN/JWVO+unlhcrsqRJkTSVrjbx/2p/024tCeWZlndWnstC4bKbv3UPl5axU1V6V/FzFxZmuqup1UaROyCEGferlK9cmdoOdb2OuEFIjqRilzFhZG6fXR9el9/uHWnUbZKw0uh/r69Dqtz9HXUyOs8y6taBPA/PNK42rBmizt3ddmjs+RN2NG133S33uz3/vS42V9mXZa/DjsJazT89hkwrae1TduseofdT9uNGgcMom12fXkXp26xxnrPzCZxKL/17l3AfcH2mKMt4ODYYAvIdzXGpCKD0ii4PhUeM1fKx1NQkqZW6m1S5JeqyDRnWrMrOq2qCo1ATnwjy9rQ9Vq9qHaUOgMrOyVnpovKJyPbqgMk8Vu4tepl99GUlW+vrQ6J/5pqfSGWU20589jFX7mCpzhZM1Rr8eVsptanLUhqDMZPp2UMi6NH22C6SSpCgNK69eYeSKTKOx9G3MUwdeY1Q3KXje+1a/vqs1qrz6RabL0umyl8kH6euo1X2Tnst3n8u05UtMU3tHdao+DqtW95VX66N+ftWbTgMOatTLrKwyOev180+lHmuvzFrFmPbdHDVe4yZIIarnGjmTqV+m1/pTL5MzmjQYCrooczljVDVeY2P0y69jKUR97hcatV79EOe6E88Gu8IZfeplGjVpHao1Vt8MCn0zSO9zN411WcX0abCzfNrkVZmpmVRmC+v02HQdeYPuJ9WxMlteiXyL4LdqgNbdPvt4j1Wrh9rLWinG9Fp2e6x2+78us48ppN1U8TiZ8jyr20v2otT0ubxUQXuPqtvsY4RJoBrWfi74hpn3resevNik6al6/vL7e84D7o8yRRkAcNrOdanJ6T+DMzL7SX03EJZSsIwx6n6curReTC68L6Naj1UaxJfOqA1GTRs0rFtpsv+lD0GZS1P0hrXX2HuNRl5XZa4fR7Uykzrf9jOrXmb02z/p62HcTsKT1Y/jVsYGSVGKUTamsDVuvMa+1W9d9vVbV6WCJg2QykLOWf0wrKbPJUr6cVSrX+T6s4daPzzUqpqgu1Gjby4KXQ1yWSv1MqdRlSqdMmmqcNUa5U1Qr3T6Wd7TT0Kadnv/2Ghw4dR4I2+kr6NKTYjykpoY9TD2ijHqsfIat366FUma0phrUDh92zeKLurusdWo9frhoVavsHqovQZNmiLchYiuSpRlRlWTuuB+GVXKnNOoaRVGle7vK/3W574uSqfaPg8eiwP/y+IpoHQfPCw2atrml0yWmTTluk2deNsQVTdBZWbkfaYsS2t8X7MW9K0G5t1xH6pWv7p7umYK51Q2Xm2Ic2sju+nRnX1MIb2v2umWO9LTFOquc7SffLJiF16DdUHuPapue4xtGAAAIABJREFUs4/RVd4lSebp57075+516roHL4ZLgtfHmKIMADht57zUhFB6RGYHht1AuJmU562JMkpBo/ZRpUsNbozxGtVBfzquNaq96jaqDlHqS856fe7lctZoKK88M6pDUNV4fR3W8jGtwfw8yPXnrvtqQ1QIUhNimlbZetWjRj881OoXRlVr9KnvNLqvFUJU44N8G/Wzq75+0s81bLzGvlLprLyXoo3KM6MfHhpZazT2tR5GXg9jr7K0+jQolFkpi0bKjKo2qPJed6NWvcKqzJ1q7zVsjQZlpk+l0w/DoNBKgyJT7tJgvHRWd7bV14dKRtKgTHuKDidrPC+LTEVmNYhOd+NWXk6ZSdvAXBSZ5McaPba6LLNpdbNqvWpnNWyepjj7GPSpLPRoWn0d1bImdQ+Oki6M1UPl9au7sX521Zs2wZ1rKDN5f7tfKM4a9SeLaKvGaxg19wvlpeZDq/Sck7FGj3VaO3g/avXpIlM+fay0vc1r1oK+1S+6tBbW6qF6arxUZDbtg9oEOR9UzLQQdsZoUOSyNl2j1s4+l9erfdRj1c6tsRzVXvWkYVaRpenfy37ZrwtyIRiNJ1PmZ7+vmyK9bu/YTc1+f+HMdO9UZ4yK3Oqqlz+b+k/wWu/Ypiif4/QsAMD2znmpCaH0gJZtYN8NGLtqUIhpzWbVBo0qr28vi2k31M+9XJm1uh/XqclJjCpzK00a6Xzq9ZRnqeKZOysfo0ZNqz8ZB2WTAU6U9HXY6BdXPXkvNcHLtzGtn4xBj2OvJkZ9KnI9NI1++aVWiGkKaJk51W3U//X9g75clrKSrDVqJ2tK6zbIZal6WzqnUdXqN4+1YgzKjFOeW+V52jbFGqvCBoUqqpdbPVZeubNSlPpFVNV4/boN+jKsVfugtg1pvWsIKgqni8Jp3EvdeK8HedpbNXe6zN204hX/f/bebEmOK83W+/boQww5IEGAZFV1dctadUxHdvQUMtOj6VYXutNT6CV0zHQjmUw6KrV1DV3FIgEkcogIn/aoix0RmUgkCBBEFVloX2a8QALh4eERGfyXr/WvlcCnhBsilVJlJ1MKaiswgyKqiAAao/AxcT14hBBshqHcCNCClARClFqW2+wJKbMdAnavaEoJUwgsK8N29EeycyAMVulHv1BizqScefiF8q7wIa0kSolHe2kBKik5X5TrkAEt5fE83mfX/FsP5rUpe70pT8e9Zyi7zVapN4K8rCpENMTM6MO9Y3ycqhxzOt4AAuhcxIVicfUpU0k4byqmED+YyB3eq5xhO3m0KknPy8q8dZxq+Lh+U3ibYC4rxWn7NhF9iJ8b8fq54ediUf5c7VkzZsyYMePj8Tmvmsz/h/uJ8K6B4/7AKKXkcjvSZximSG0VMWWSlDifcDqhJNSVIojAdpN4NRb7586V1Nwn54tjIqdPCYFg1ap9Qi74kJEKXCyhOzufkSIiyLSV4bJz9FOgrRTd6JFKFnujVuScuO1GXu4ik4ucLAyVUmzHwLJWxYbrBLspcNIaai3xKRF94qwVhVSlRJRQS4FUmkoLpBC87qYy+BtJaxUuRa47T8olsVdVmkjCKIkxgrNa40Iip8y6NrRWUil1VNlczHQhMLpU9kOlwMXIi23Zi7VS4ITA6vLfTR/5YmWQAq56x+ASy0oDRZn7xUnNojJsp0giM/pEvVfVpJBIKfbhTxwVvc0Yjgmo9xFTqZ95q2SUx8OHRh+5uh1LWNVeIbtY3u1f9t5TG4nVllaXvdmU83F3+HDc78P9wfzHqjXve7wSktZKUrb75OiCdW3oxkAXAikVwt9qTWvNG4T0cE0+xrqi9kFYUFwJhyRkKQS1lhzuH3wokbv/XjVGkVJm5yJWGQYXCSkdb5KU806IH6H0fizB/LkQrxmP43O2Z82YMWPGjI/H5+x4mknpT4D3DRzHgbGGlCxKy6ONt/eBZa33e5oeUuZqOxFSLKE7LhTba8gMvihNnQt8t5voXSTt03KlLOE3PmWMELzsR0SWrCuD0hIZMoMLbMeA0ZLrnQcEC6OojMZK2EyRPpbwFJTgcuNoG0U/RHZTpK0FtRTURjK5AChaLcFIboeAkpllY/jzZU9rNJWWnC0sF0uL0bCwmiEmMoV8nbaafkooJUgpQwCpIEZorObpsii/rSlBTOf74KDeBXwsabWNlXd9qzkzTp7zhaW1hagOPhGBs4U9hhENbl/ZkhNaSlyIDCFxUmuGaOimQG0kbgxUqRADIcoXx24qymlBpNKSdW0QQhBjYoqJ3h1qejKDj0fS8lj4UEyZrSt209ZKoCiw2zEQUlGUx1A+Jyuraa2m95mb3lEpyTZ5TlvzwV9eP1at+ZDHH75ggWMAz7IyLKzmde+47e8IqFpKwie0rhxcBy4mrvtyQ6exsiRHHz8n5bgfQuQe7oWPIaFlUddL9U3EKvlGCNaPtdzMBPPzw+dsz5oxY8aMGT8On6vjaSalPwE+dOBQogyv1b6Tc/Sx7Ga6gBCStlK87B2ve8emDxijWC1MsbyaogS+6gZebR2dC3RjxGqBj4m1Ndz0ESkylZb8/kWP1oqvTnJRiERRUs8XFTFlFlZwPZQAJHLiZoxc7zzPTwTr1iAoC6qjLzt61ki006wWujyH0fgU+cWTBqMk/RhRWrDtPMvGlORTn/jTdeDLdU1I8M3NyGb01EpRVZJVZbBGMhysvcBFa6iMAiE4bUzpKc2Z1mr0PpAJBDGX3lIt7xKBUyo7qVJIrIYhBEJOLKUh5HQMkTpAColWgsYWxdeFQrq/Pm+QSiFMRsp9jY9SbGN4Q/kTArajZwoJqwTTPlV2Vd+RRBczlVXU6u6u18Nd45TuzucAHyO7LpBiSTEeXGL0jvPGomTmy3WF2Su5al/l874vsR+r1vyQxz/2BbtxYa98l1oiKQR5v6P7GD7WunJ47kVt6Eb/Fmn8Icd9bC8c7r9X+y5bPu74M/594HO2Z82YMWPGjB+Pz/GG9ExKfwI8Nli4mPEpo+6RhaK4CV7ve0iVEFRG0rtEFombyXPTOQZfgoNSyrzeFourC4acJYvacT06pqnshsZYej8XQpBC5PykKpZFCd0YGBal07SuFLsh0E+l57SqakSWhAiLWrGuFJ0rqtzCFGuiFpInC8VJ3TJOnkSxXF6cNOSUEZSdupjvdk6llAw+ctt7jBGMU+K8rVAZur1KqWpJFUGQqaSgaQ0ZaKzC7O2oJ40+Vl4cru8hybaoz4rdBFoV9QqKvVIKgQulWudV5xhdRCGKkuw9T1pLaxUhZawWpTIGsFIxxohPEEPG5chN76iN4qSJnDWGygi24917XClZlLP9F4kq67+E/c7kweabHwQePdw1lrIoikbdV9tgcul4ji4kfMwY5VlafUxsjqnUBo2x7Ld+H36sWnN4/MOd0Hc9/uEX7IHTKSkekDiB+cTWFasETxqDPd7I+LjjPrYXfp+EF/v2/fRgSU6PX+cZ/37xOduzZsyYMWPGjMcwk9KfAHeJo6Wj0oWyGzq5yEQ8WhyvB083eUTKKAXL2mCUYPSZ627iZgy82E687hwpJ359vmCKkRCh9wEtIVwGtlMqQUgxkXPmYmXJOXM7BeItJal1LGmwIZVkX0KplUgpQxZMU0JKuNxNJCyTKgpuzBlEptESgcIqBSmijaIfPS4ZRMpopegnX4KbfOS691gt6KbEFCJGKRQCJQVdKFbhEHMhqiESYkQKOGkttVUYIRhjYjMWa2dlFGeN4kBqhn1K8X2yZ7Usnac5E2PGKMV2dLzuJvLe+tpUqnS9Ko0U0FSSX9Utzsdjj+mqKjurg4eXw8AUEkIXBdf5xGsz0WiFlhqjA4piKfa5EOKDaqZEScj1MeH2+4yNlRgpkfCGzfW+klgZ9VaIUmMVLqSjRRTAKEGtNVNINCbv+2oPQ65AZL7Xivtj1Rq1TyS+U4uLSnrS2A96fLMP07qvNldaHYOd/hrWlQ+xxLxvR/bhe3W/0uZiad84/kljuZnCW8eY8fniQ3e0P1d71o/BnEY8Y8aMGZ8vZlL6E2A7BUJMGFmUs5wTWpYQo0MH6OAT1/3ETe/4w+UAEqwu1SjLStG0mhfbkdFF2krRKAsZFlZRKYVSCiHh5a4MvNe9wyjJbvScLgy9d6WuZV8NowQsKoOWmSkk1kuFFIqvzipuhojVkj+87ggxk7PAxURKcLGwaKNIIZVwo5AgZvwUeXbSFEU0QddPaCO46VypW0kZmQRaC17tPF+elB2+06UpHaD9xDhmtC7KriNxthBoKRhcxOtiw02pKJ5hT+wOg0o3RS53I8NeNVxUqtS/kLGqqLPf9D1TKLumCKitLLuhIbNxHqsUAsnC6tLvGouF1MfEsK908TFxM3iUKcFOJ22xmv7huodU0pNdSJwvLWf7IfNwjmmf/hszx4AdgUDwuM31oCQ2Wh3PyceMlgItJIOLdO7NapXWKlwQbxDSw3HfZ8X9FGqNko//+UOGS6sEF0vLZgxHpXVdl6+sIUSUkDT601tXvs8S86E7tvffq8df6+dhuZlJwg/DD93R/hztWR+LOY14xowZMz5vzN/of2M83LPrQ7GunjYlvKjSilZJtt7Tucj1EDhtFdd94HLr6C97/qvnCxotebKwXPaebgoMY2AIitZqRu+JeHaDIwuJEPB0WWGlJKTIq61DpsxpazHSU1WafvRICf/2eii7j0OkrSQgkKJUinyxbtiNnut+wCpF7wJfmZpKwhbBN9cdp8uKGEqH6beb8u9uekdGUpsSUPTtzUhtDOt1RS3hi5OaZ6uaSguGmPjueqC2iklGQsy4ELlYW9p9SFGKmZgEMZYeyANJXNbFFno9eF53Ezsf+cvViDWCwSma8xL6FLVmOwYGl/aVOwkXIz4lXmwcPkaMLnuhUsJFbRhCIqWyA5qywMfMqtIYJVlVEqE0qi7ncRsi/eCLMlsZlpVmdAG7amiqu/c/5sR5a0i5EEspi3oacsZyZ3N9bPC3SjAFSDHhIjjiPsTJEFMhcMtKH63LUpXPwcPezPdZcd+l1jx2Tg9/FnNJmrX7OiIlihK+mRz3ncHfN1w+fP4pxKMt+32P/dT42B3bz5VYzCThh2FO1P14zNduxowZMz5/zBPE3xiHPbvBl8TU151n8gEoKtxl8PgcGV2iHzwvdo7zhabWkjNtWLWWVa0RSbAbJ3woaa2DiHifkBV81018uxk4b2oWteR28FgpCnGrTFFoEfzuuw3LyiKHgJClViXliJGSmBLeZ6IsFTBGQTc4riePSNBWkrUy9GOgWVle3ZagpMvNxNmiVMmsagU6IyvN7c7xbF3hU2I7FmvtslXkBCJndi7wahfIZJa1pjaKs4UlxMRuCKway0LvP66ZIyFNOTF4wc5HaqtJSdC7UKpzUmLdlsesKo1LCYQkpLTvBGX/XgR8ykDmqnNkMr84rWkrzevNhEZgpCCkxOAiIwKjSgrwk4UtwU0pE3swUqDJ7MZIY8B5x/nSsq40xb5qSJTQo9YaeudxMaNl+VzkzHHnUAn5zsH/sSFNiXI+bSWZ/J1qXJtig03xzd3Fsl+aUeL7Q48ekqrHzgl462fVXsW8vxMaUybGN3dm3zVc3ie5B8XxpxxMfy6JqD8HddLFEmh2/2bDTBK+Hz+Xz8/fI+ZrN2PGjBmfP2ZS+lfA9w2NSkhiKnt/PiUgg4LXuwmpBLd9UUj7MfD8vEZKwdUQMLKolf2UkAgulprlQvPEVfiU+dPrnrbS6DGWPbUhkAGfEotKEjJMIfPlSnO6tFx3I5vB7/f1SjiOuIDrnaM1iqZSSF1RSaiVYAqBZaO53DmklGx7z9N1TcyQk+DLs4bdGJhSZjtGhKC8xljIX9toXM6kDMtaYZTkeuvYTp6vThtG59FGIfchPz5lNOU111axMKX7E8BaRec8u8nT+8h29KxqTWMElyisKqR/00c6H8kpY6TkpDWkVI4phWCKZUc0JcEwRlat5NnaMoWM1golwGVIlBCq7Vj2WisraZRkacrrOKk0kxS81jCEsrdbW4FWgpxgcIFGK0KE23Bf5TsQunjcnWytQslim/UxczM4lJBIUdJcY8pH5fAxSJm5aKtHP4P3rbiDj8QESkacjx+scj1GDAs5eZxoPrT/aiVRj6TnPhwuHyO++sHvUtwn8X5IaNOnwIcGlP0QTD4ercgf8vhPoU5+ClK7mRw3gz/+ubWKxpTPpYvyJyfNP0fMibofj/nazZgxY8bnj5mUfmK8b2g8hByNIdK5yHebiZAjaU9Uex8ZXOC6D/icqKzmT9c9KkNbGU5bw804IUisGsNXJxUvt46vzloSJdjn9c5Tm9J3qhEsa83Sala1ZtEUxayfEjELjCx1KrUuNS0uZbJLhJQhZ1KSLGvFn646np20fHViiUi0KMribgwkBCkGci7dm8ZKrCi7kilnbsfAysLSaNpaU6uG2zEwusRJbZEIpgQ2ZLSC2ylhhcRKSW0l//XpCq0EY0iMKZJzZnKZbt/XCXDb7as8lERkiKmQyckXYlxPnotoudgrmykpLjuB1ZIYI8tGURlFThFJQmRI+/1OqyUpQTdNZCBnwWplaGzZ280JzheWy9uR7eCQ7O3FqZA9gaStFfkBGduMgVWjaa1hWetjINPBpnozTGzGQOcCKcO61ihR9nDX1ZthQQeCltKdvfehgrCqNFJI+hAAwbIqA52LmTE4pJAs7PcPeTGn43MpIUgZxlAIbjLiDXtwzOkt+y3whv32gPvD5bsU0VaY458HH98Kbfprh8I83LHdTRElYTcEbrNjWRnOGvOeo9xhOwUmKdntw7reRzDfdV2kkMfPzfte96citZN/87Pcu1jSpX0ixLu95tnSe4c5UffjMV+7GTNmzPj8MU8LnxAfOjQ2RgOCzeTZOU+Iidsp4Hwmk+nGRBCZ2ylSBVhVBiUhxcx3mxEjBG5ZUnGtETRacrGy9C5yOzq2w8j5omXTO7KELCxLW+ouICO1IgtYmJKuq5XE6KLgLirJ5BNKG7SUoCVXncMYzeADlZZMPnI7eH55VvOPT1u+uZ6QWnG9cUQSr4fE12ctV5sJhcDtVbOXG4+tEirDSWtobGY7BAZXdkdbK6mMYlErWq1ZNYbaCs4WFS5GXEzE/TXKInPVO17eTFirGKZAyJmzRbEnh5SwWnLS6L1iJ7FacbGsATBaoKQEMjsXueocah8YZE0EMkYLFpWlVZJJJtatQUvBolJIUayvT5uKzgVuB8duCPuKmczSSnzKfHnW8KQyrFrD5O4+G3eptCV4qQzv6vg56qZA5yKve8er24mY4Wxh+GJZ4XyG6k75PBC0Sit650n5cSJwICRjOBA6RUqFVAJIMZGy+V4SMfp0VMg6F/dBTZnBRxZWUe8Tc5eVOhLNhwT5fcPl96nAtVF0U3grtOly52jMXb/opyZDB3Wx2r++IUSalBl9YuP212Mq5/QhxPTwXWGbu5+9z/762HXZTeX3wu4TpL7vdX8q+3PM6Zh+fD8ZGSHeSBr+2OO/Cz8H2/KPxZyo+/GYr92MGTNmfN6YSeknwGFYcvFtW+JuKoqokhzTQ6dYFNFvXndsXEJLwdJq/nWzRUnNslboCJt+whqNVGCERAqJ2HdUTjEzxNKdOYTIbgz4mGit4XxZIUXiH58u2E6es6bmunNsxkBTS75eNDxpDZUSXPWB3Tjxj4sFXYglEbdWRJ/5Y9/z9bpl5wMnjSFlIEFjBFpZKqNp9mTqdgwoBT6UvchhiqwaAznRaEUGFpXCx0RVaySC1ghyVvRTSfeFUmPSasOq1tRKEFzmz7c9UpRaFSUFMYGPxcZ8tqqATIqwHTw5Q6UlkYwWgkWlS7WIUZzW+jjQCCHLXqgshLDRkled46TRuFjOZdUYzqsSciTJnLbmWK2ThKQyZSgKMRUbM4lKFfJltMBkyYlRtJUmZ47pyoNPdC4gJWghiCmzGf1RqdxMjlc7R+dCSSuOCaMko4tMMe2tvOmofI4hsqrNcUg7EAHgDYXyQEhKJU3kdijvmdzve2oh6KZAgmPtysPPeYiJWqsjwU0ZTluNlppuiiXZOAQa+8PDkw44nO99RVZJUXZLK0Gi2NIPqqyLmSlErL7bXf1YMvQY8XlMXbRKsMt3hP6A3gUWVr/3eT9mR+6hVfHwuhtzR4IPr9vHjE8BI/VR/f5Ue3mH81hWqrgI9snItVW4B6T3Y47/GD6nUKXPNfjqb4H52s2YMWPG54u/z/+r/4xwf1iKqahulRbHLsqr3tFWklzcsGy8I7jM7TihjWLaeTqRuWgqfv10ifMBheRySPzHr8/YjoF+CtyOHh8LkVnXBkFmOzp2fcZayRTKvuGmH/ly3ZZ6kkZzMzgu+5FWGzKZ4BNTSiyk5uvThudrGGMkeuhS4v99cUtjDOtGoYXk2+3AaW3pplgCiGqFVpLXm4ndFOhGhTIK1zmyKEqjUII/XHWsK42WcL6sed07hKyxQiIQNLWmkhBJhFAec1qXNNuy+xm5HBLDGKhNsQV+dd6g912mWil8SGxHjxCSznvClMhCMoSEFdBncCGjlpKTprwHB3uhi5ndFLBKlJRarUDAdnRIoRhcIOXMWit6H3m9m4g5MfnSPXm+MGU/OCd2U8SLopRJWRTaVW1RIqO1LupRpNTTpMTkA91UOklvp0DOudTb5IyLhskXG/Zhf3TwidooTmpNpcSeqO2JBgkpBA850Gb0b9iFhXizWqaoXA6RJFKWKqFpXxvjU8Lt90HvD/4HUiMlTOlg4034WJRRowVQ0pF9LCm576tMeQx2/xrv7yyetneku9EKd68KJu3PS4k3L8KHkqEDET3ccDjgENZ0+P0+9N66mDlt7PF570MJ8UHP+zE7cg8tjCmn4w7yfbzYjPeqgSZOW8PzVf3J9vLun8fhfTxcq8dI6Y/d+/upA65m/HB8Dqr2jBkzZsz422ImpT8CD4clH1OpZ3F7BS1nlAQfyr7oZvTcdJ4pZV5sBm4GR8iZZW35thtoVFFRf3FagSoBOd/djnTO8Wxd83y5JIuMQHDVTSX4J2fOaoXa73NJCZspIACjNM/XLS+2A5vRoRAsK4uWglWjSSmRBFxuHVpLQggsq4qTRhXVI0S6IbGqM5e7CUh0o+fp0h7TXHejR2kFGZZW4mRRsS4WltPGsBsim8HT7rtMk5H4mOl6DwvNX65d2fm0Ei0FSkS0EtyMgZc3UznPrOimyHU38qSt6V3AKtBG8ryqSSmjROLPm4BWksvNwLqxXKwsjdYYVZRLqYqqeWedhd2UaKvSEXu9c6QMPjpCSvShkDTnEq/6iWWlWVYa7xPkElIjhOR2dChrUEqw6QONlTxdVpy3lvsrmlZLdl2gsQYlIgK46hyrVpfdTJ/xccJIxbIy9D4hKCEytZUYVdTydq/EbafAdefZjA4pxD7sSR0Tde+TlYOaexgQl5VCigoh8tH6eTP4fSIvSJE5BDAdHnM/pKuSEq8kxJLqXJtyjLxXg+U9dfaHkody/oJVbY4qnBLi2EP7kJyVa8Jb5OxDyNDhplJMhQQfrMeHc8/7Q97/zJTrUup+DpZd9u/TQdF93+uLOaEflLjetzG/a6i/rzK3qaQ338fgy42a+9fipvesKsvCyk+2l/cutfuvsfc3J6/+feFzUrVnzJgxY8bfDvP/KX4E7g9Luynyqh9plAIFzpdAnpRLCIhEcjN4NlPg5W4oQ6OUVBJe7EbOa8PoA0JAiJmrwfPnq54QMk9XNS4lshD8/qrjvLHcTp6TxpIyfPN6JImitK1rTa00CMHkIkYJjFaQS4hRowSbMRLiCKLYZVe1ZgqJhbVUJtBaTe88Uihc8ggBX53UnLaWP7zekXeFMPiQMFPgrNLcjgG3izxd1fs6FkHOktOF4KYve7OBTFtXCBJSKTY7x84FcgStBJe3jvVCsbCl8kQqwXYMLKyiMoI/X0386WokplxqcYCyJSswRvPrM8XSKFhVjC7RjZGLJ9W+r1MhZQlzur8HZ5RgcImYYglGSomYS6Lqi6uOf3q6IudiBXYu0SwUUgi0lPs03LCPQ4J1ZfZWYcHzk5qlVVx1/kisUk7FnmwkWgh2k8fFxOV2YnKJlMHq8n48X9U8W1YYJZh8Yl1ppJKcL83x+lzuHFMo9TouFIXz+aqmMoKHc7ySAr0PZTrgfFFsn6Mve4mHwCIlIz4UMnnofoW7kK7DdbNa0thyzLBXdUNKb5HQH0oeDr9XD9XU+8d5rL/0h5Kh+zeV4l5VLjbgO5KV851N9j5CTKzrimfrcpPkYDF+3/M+HNiVgGWt32sXfhiWdrgOKb9JApV6m5wD+BQA+0n38t4VpvWp9/7m5NW/H8yq9owZM2bM+FjMpPRH4DAUveomrntP7wIvwkQ3BM4XFh8TTSWJMaNUIQ0hJ1zI7Lzn5XbiP319Sj9FWqO4GhxaFsts7yLJJ56sanYusDA1W+dYW01tNV+ZYrdMGW5cQOTSc/rFsua81WymzLebgd4ntIQnC0vnEwF4ujSAKHUUUyqhQYPjYlnzi5OG3111pASnteD5qqKbAl+vG8ilFqU1BnKmdwmJhC7wZFFx2Y0oAVMI/PJ8ATFz2U2cVobTdcWq0sUWmzK7PrLd78KerSwLa8g5MPrM1kUGn3i1mUAI2qoMNN0UUHtC93LrSClxtqh4sqpZ14oxRIyALgisFvvgm333JxBDYjM6XMws3th5zHQucb3zvO4dEni6qqmtRJHwQGUVKUKidJFKWayaAkltJE1jECEef273yvV29Pi97bM2ev+5Kcm3PkHopj1hLWfiQiYm2LrASWV4uqiwWiBEeSEKwe3giJkjUVpYhVWF9FqtWFb60YTbQ2LvQ8IghcSNjilm2nu22CnEY5rv8Ri1YQqJMSTOjEIhGGPASoUQmQfC3Ru/Jx9q6ftQEnKfFFn1w8nQ/ZtK962/6R75bbTCm8h2vHvcQRGBUvV5AAAgAElEQVSNOXHWlJsEH/K8nUvcDO5BQjFvPO6HDvUPSaCPJTzsIYx8nNT+NfCpjz8nr/79YFa1Z8yYMWPGx2ImpR+Jw4AdE7zuHP0U6Vzg1XaitpohBK67QO0kQmVIRfHqp0BlFM/WNctKl8TSSnLZO266iabSnLUVUsC6rfA57ysjBmq7RArJVT+WQB2RjypaSpmn65rWKIyWDNthP8hlbvuJttLURqKBkGHbT3gg7nckJYIQAlkqjJQsKsXzdU0GQsicNYarPvDFqiKlMigmEq0t8puSgqcLy6q1WK1olSTIVPojteAv1wMntWY7Rk4XlpQyw1Q6GusxcmozPhVysBs8IUbWjeZ659i6gKZUtKy1onMlYKe2mpQTIURqo0mpKHhPGonRhTyc1hWmrIuWmwRWsds6rJJFtbQKn4qafbrSuJRIWaBk5pfnLQujMPvE15vOI0V5zMpqFntCcDuovRJ5qGMp+7h99GSKIgoweMeTpUVJUeyg3tMYVZRSMq1UGCORCmISTLGojgIYXDzaSoGijMaM2Q/mRgl8lGTKUPj9Q/ybfaDXvSv1JD7SjSXUamEVrVVI+XZ4V0qZ0QWUFPiYsUYez00KQe/u1MbD8/4QS999EnIIO2ofhAc9RnB/CBk69IseLMFKlve1d/FoPT6c+7qyhPBm6BLckeQPed7tFNiMfm/3jW/YhO8P7B8z1L9JzkWpjerf3Md9X9XPzx1z8urfB2ZVe8aMGTNmfCxmUvoRuD9gbyZHItPWCqFgOwZihj9eDdwMni9XDVWlCDEUEtUlQPCym2iM5mZytFZxeTsAIEi0lWBd1/zLyy0iC6TInNSWzpWdvxAzWwJ5b/eUSuJ9or/seH7S7AlYxvnEVTfxZGVRAq77CR9hMXqu+kAWcNFa/rQZyDGxqlpaq3myrPA+8m/XA1IKTqxC6ppnK0NrFVPwGCX4cl2zrg233cTGJ04rgxaCk0pxvtJcbiNjHPnucqRWEoTAiKIECQTLSvF8WdNaRVMJnqiKyhbyHlNRANdPW4wsPZS9jPQhFoI4eFaN5henDZWGxgrWTU03eowWTCGxqi0ueV53gcln6kpy1hqWraZWkpXVZQcwJZQStFpzsRaIXPYspZRsx0idMpWW/IcvVzRaYrXkvK2Pg/7F0oJRJKeOCctSFsIjReakLYRZSlgahdEaGxOLrHi5HXm1LaRwvTCcVJpaSmL0tKbap8umt2yllZJUVpL2ic+HepYQMrepBAydNPZ7h/hD9UzvIkKwJ+ogpaC1uijN94bJQqwCvQ8ICUZLGgNjSMdk4cYU1ba2ktaYYzruMZwnZaaYGPZVSe8iS6tKE1JmDCWVOMTEdgqsKv2jd9buP37wkZ1LLK0pSdK1od6/7vtkd1Hpj1bqDq//vhp7eD/hzYH9Uwz1z1c1q8q+lb77U+BTBt7Myas/f8yq9owZM2bM+FjMpPQD0bm038tS+HCXxukTbIcJsqDzuQzrAm5Hh1ESdOY//+4VCBAIvj5rqZRiXWtCziAEf7mdmGLGasWqrjixFdrAr84aEJKdC8SYOGlrbrqJ7247tJZYKVmftSyU5PXkSVkw+sjlLvPtduBi2fBkbamUKnbQuqIbPSFllnVR4DoXEClwsW7ZusAYE0oINs7jA1wsK9YLy9XOY4TExYhRxTpMFnRjRBtFncGHRDd5/uGLBbcbx4vNyLrW+FisxZWSPFkahjHSVAqjFKeNwlSaWikEmWWlyClimjK0d/t03UUtabPixdajteBsYaiUops8OSe+vXFIWUiP3u9ljsGz6xPXveO0NezGSDfE0pF60qB1UcE2oyfE0vtqlCBnuOkCX57XVJUkR8HSSE6N4iZEtlMkRnBtITCVVpysapIv5O5QC5NyIudSuSL3vKCk4BaCsp2KTXnZGHxObHaeVkoqUwJpQkrH0B8hwMcIyKNa93RRMfnIGBKJzMrqEn7FneWz0e8e4mNOx11KJQqhHHxEkgkpodWdOnkgVvdfkw8JYzV5f5xDHYuS4khID89zOKer3h87RocQ+WrdPEoo79fPHHDo/P0xO2v3CfJuisT9DnFMCW3NOztGf4xSd3j999VYYG/pluR0p45+qqG+EFH7gx7zqTEH3vz7xKxqz5gxY8aMj8E8IXwAvturWeTEjY/EmHlSG6wU3AbPXzae//LilhhBisR/+/UpykieLRv+fNsRciaEhI9w9acr/tM/nFMLyzBNfLGqkGLgtLWIlHEh8G3X8x+erNi6yMIIciz21EqXBNfGKNZNxTdXPUpPXDxfckbFd7sRIeDFdkIg+fN1j0AwiMQvTmtcjLS1xsdErTUhRb65HbDagAAp4JubgYvWIBE8W1q6EPE+s508//SkpR88lxvHFCNPlzU5J1a14enCsqiKDXhtNFvlkbJYOacYiRnEWIJYKilZWIWLiZPGYrTCp8TgSsWE1oIQBd3gSUiUlISQWdSKZyvDyy287kZuB8+Xq5qcYTtOSCVBSG42E18sK26HgFaa3iWWVWLwRfFUUlCpEtDjY6Z3JWBq8LHU5iR4cmJRCDajx7sMrWbnA/0YycDL3chpY/nlSYNWAifFsQ5jIlIb9Wg6qwBSKupnSKV/dK0EC9OQheSkUZy1ptimUwnYWRiFEILtGDGqEJjT1vC0MTir6b2ndvKtgJuHls+HqlVKpSM1UQhlYyWJfNxzvK9OHutg9h2nBygJlVZvqIAPSdQhtXfrwpGQATif2YzhUUJ5eL5DDcthD7PcGHobH7qzdv+4h51cua8ZCjEd7byP4WOVuvsq50FJjjlz2lScNJab6c3X9DkM9XPgzb9vzKr2jBkzZsz4oZhJ6XvQucQ3NyMhJf54NfDtzUDvI89PKqzShJT43373imVjyAi2Y+b/+suW/+b5kslFUoAXt3ur7jBxvqhwISJbsEazc5nXO4/3iYuTilebicUU+YPQCAS/e7nh2WnLn692nLbn3O4TfMeY+fpJS0jFgvm6c2gkIWZCirgIWghCBsiEnPEBroaBLxYNUwycVxVxBV8sLb+93LI0hlpJlJJses8/nFvibkKpXCy2tcBtMk2lGHeJfopc9SP//EyTgClkUs70IaJkGUKnmGmN5pvbnn70ZDK/XLcoJXi+bEu6aUpcdY5vrnpWjaXVkvO15VfPFvgQ2Q0JQUZrydX1SDcFtFRUWtC7gDYKD2Rf+l8HH2ltZDsGYMJqxZigMmJvz1S4CCklfJq4HQKndXntfUjEmFBGcNt5QoIpRsYAN11k2ShCguASwU9cLAwVGjd4VLqrYRl95KSxb6Sz+pjofWK538UMhx7RXAihDxktJY3WdCFy23tiBWOI5AznC/toRQoYfHg72Oih9fY+STjsR8YELiQEAmsEKcF5a8uuMHdE4v7+ZOk4jfvnEFwszfeSqENq7z1BEKvLTm/K6VFCqYR8pIZF8YWt8bydpvSh9tbDv3vYMXog1X+NQJaH6qeSgoX5flvt32qo/2v1Sc6BNzNmzJgxY8aMH4KZlL4HvS/qThcD3173ZCmodSF//+d3r/nvnp/wq/MVvQ8lnKfWTD7gfeZkaXndj6xqxRgSJ01FTIHbPtCNOxZWYpTGaMWiMviYuViW1NfrYeK6m/jFkwX//MWSp4sKEpw2hpwbvr0d2U2B81bTWE01Ja67qdhJK02bBa/7Q5dp4vXO4UPZZ/UxoqTi1TDSu1IFElLZc9tOjtFnlMq82g5IBLd94PmJZZwyY4yFRKdEZSUg+G4zkDPUWtEYiU+JWheF002OXUqsK1tskiFzPTgWleLJSqKzYBoSv7/ckaPA6KJE2sHzxarm1Ri47CaMkAgpQElcKNUtk0usTypySmgpMFqSs6KtyvtTG4kPiUWtIWaaSiNlIXmxL0rOycKw8x6cgAyZEixVI9mNgSkmtoNHq5bbYSJgsUoQAjgivc8YlZCoNyyswBvprGOMbIfA0uzrY+ryq2ekpJ8iSgqWNaxrWyzELvN0VVHpQhwPhOa+nXUIkZhLL+a7LJ+dS3Q+4P3dDqMLiavesa4ty0phdc0UU1Hgq7eVwpgTjVbH5yiPkVSm2J8fC1B6iHVt6F2xy0ohjwFNhWC/Y49Svv1n84H21neRrQNBdLH0sMJdmi4UFXsI8ZOTtEorXCo3bVr90+55HvDXtNfOgTczZsyYMWPGjB+CmZR+DzqX+G4z8XIzMqbENkSeryuMUtRG8kVbYY3CE9mNnu9uR74+b/ExsZ0SUxo5ayq+WAdeb0dCSDw7W3HSaBQZRCFwlSrK0+0wsaoNQmoygi9OFqSc+ePlwGU3ctJaTmvL9eh5uqq4WFqUkPQ+USnJPzxZln1MrbidAr86XzD6wO8vdzw/sVzuJkQWVFqiVUnufbqwbF3k6aIipsTXZ0tuupEsym7jL09bckpUShByptaCr08rpJC82o00ldrbPQWb0WFVw8vNBCRyFqwaw+Aj3972RQEEKlOom8yCPgRuB0cIoLXgunMsa00icdqVTtJaKaQEKTMyw+nCYJTkZgpsB8/pxYJh8ty4SD96LpYVMWVyAqsVz9a22J+V5MXNSCDjY+bJ0rIdPZMre6KnTSGEi0bTTwFrBdMgOGktIQS0Vmz7wMXKAplKCxClkzXGiEwZlxMpZzLQ2rKfaJUgZvEWyVnXmqfrihAymUStDUYJeu9Z5Xs7melunxMKodpNgaVNR6L5WLDRd9uRm94zhUjvEudLy0JLbsbAboqkPJHynpgqhTXqaEG+jwOR+LG20raSuGgIsahoWhVi+xhiTm9YXQ97tDGn43mMsSjI1YO92feRrcPjK10sygdCGnOmv9dp86lI2nYKx05ZgMEGUrZUuqQ6f59l+K+Fv7a9dg68mTFjxowZM2b8EMyk9B34bjsWQrobCCmgheB8YRhcoiOgnaSpFL+/2nGxqPnjyw6E4KZ3XCwq/nzb82xZ8xc/8MvTli/XNSFmdj6wHT2DT5zWBhcjSyuZfCbth9O1tWyD56zVjC4xhMSqUtyMnpvOsawNptYgiro5hsgvTlo2k+PL8wW73nEzZf503fOL04Ynq3pfWSKptOR15zlrDJOPKCWxJnHaGF5uR0jwqydLcs5IYPQJreB1F4qiWxucj4QkWFaGX5y3XG+mki5qDa/HCVIhZavK4nzE+UBtNLUuIS+3Q2A3eVx0pCxY1ZKvTytebD1KSdpKsdgnCocEUmVu+lBsphJSzAgjWCjB6UmNEolFW7GIicXThmEIXPcebTStlqQIygh6H0mC0rE6BWolaExFbRWDS1RG0GhNS9kvJUE3BRCZWiu+Oqm53nqkgJNGc7awWCkYQ6S1hqvBcd2X2pjlnsykbFlV+p0KUa0U1j4c1N+04x4CcuTe0rqbAilnINNkRbMf/u8HG3UucdOXjlSfy+7sq82EX5pj6JIU8o1U30ar/Xv+NpG4rzw+Fp70fTbQ+yRxZRUITXGVlxsHt4N7iwAerpeSAlIhjKQ7JXP06UhunY/Hx38o2bJKcLGwx/NOSbxBSMvOqSNmQaX5aOXUxbI3e2dDLp+tuCu28mwUm0de/w85/o8JX3r855/GXnv/JkZK4phIPRPTGTNmzJgxY8ZDzKT0ERwG+pvJ87qb6CfPtztP7xMxZhKJXz1ZsB08396OVGri10+X5JQZfcalwGljGWKknyK31nHWWnwuP78VjsooTirDyy4SEBij+PXFkiRKGNCZttRKcusDLkRcSqysJqjM4D0xK/7hdEHMJYSo85HbKWA3E4Ji8221praSddLshghktpPj67MFVpSKlsFH0n6v8KKtebEd8TGxtgYlC5kZfOR2iCgZuO0dX5+3OB8IMfHN645VY/AOfne1I6bMotasK80YIieV4WxR7Xf2EjdDYGk1lVFcdZ6UikU6UkiBVordGFid1lxuHT5lpISQEoNPrBuLNhJSorG6pAcHyW3vyTnzsnMMPmKkRNuEVIV46Si42Xp2U6S2CoTg1gWqQbGoSjVMYw2nlWbnPRKBVYplJZlSZt1o2roQwLbSnNWahdH0IWGkYN1aLm/GfZARKAG3Q8AqeSREH6ocPfZvz1qLi3A79Ugl0PuH9S5ilTyqiAdC4VOgcxEXCvlIJMaQWYSSqHvSGA65SCUFtthwrXpbDX2f8vh9f/+QJEop9onCvBHM9JA4Hq7Bde+O4UgxZ1wsroDrwb/R9Xl4/A8lW4fdzeEeadxNERcL8b3uPcvKsKzURxHHmNNb+6sxF6X7VL379T+GhwT0Xdf9Q4jq38peW84zM/q7MKc5hXfGjBkzZsyY8RDzZPAIfAr89vWGbhe47B1TyHy7mTBC4HNiaTX/5Ztb/vmLNWGVue4dLzc9z1YtlQadNa2V+ATPlxUSeLl1LK3EpchV5wgx0yrF83VDaxXbwXPS2GKBNWVv8g9XA0OInFaGzkf+shn456dLRg9GaaYY+fPNQG0022kAIfi3256nC8vvL7c8O1nQVmpfKZL4zbMVf7oe6KdI05ZaGqMkKZcBPMVI7wMntea8VWRgihkXCsk1soT1fHs7cmI1q8aQQsLHzJQD522pV5EINoMn1ZBEpo2K82UFWfLVaYMq/JTrIUDM9N4z+lLjcrFqEBTV+MYHxinxupv2FSg1SkV8THghECSuBs/CGvopYo0sdsiUqSqJSALvM14ktCikTSvBv77aEXMi58xpY2hyUQtjLARCIvjypOa6cwyVpt9NuJj47mrk/KRCCah0CXcyWqAQRdEVJbnXh8huEkiRys2HthCiD7G/HghFsZfe/dubfuJPNyOX24lYll/5+rShNrKopok92ctHonUgpFB2UWMMjDESkqTRktYojJacNtUbO473Q3bepzy+7+8fI4mFpIk39m+hEDgX5fE1V1qhpGRR7RXS/X73oenkYXfr4XHH46V8Z/19D9k6/P0hlTeR6d1+R/zYKfrD7a1KyLcSi1MCKcT+52++/neplA8JqFbymBZ8CL+CSEj5qCDDuwng38pee1CK7ycozym8M2bMmDFjxoyH+CSk9De/+c3/APxPlInqf/ntb3/7P36K4/5U+N1Vx1+uRha15bXziCx4uRmolAYy/3i+wGjBqtJsnSPGyMJqbifPwmq0hpAzQkDnEyllKiWISXIzOlaV5rS27LwnTpmTWiGF4LevNmzHiCLxH78+I+3J2RAC28FBzqQEQpTBfQqCyWd8CqSUuFhWSDK9j4gs6V3kLzc9lVH8+smKq87ROUeMkvPG4HLiy5OG//vbG1ptSSnQas03twNfrA67pOC05MV2QpJpK8MUHFWlcVNCG8G61py2hpve89Up/MuLDded57y1aCFREnaDhwyLKnO+soQA3jlCUgwBXu4mpMw0VtNWimkCjcAoOFsY8p70bQZ/rL356qxhO3oao6itQgpQSvKkKju/ISaSKjcHNoPHJ/jXVzusllwsa7SU3HSOadKcLjSb0aGU5KLW3LpA5wKScgNAUqpqoouo1uJTIYZaCV51jrUAt+9qPYzaPiZcjJTGj/vhOR9GPA6EonOJy96VFF7K/u4Ui4r37MQy7QOslIzsxkBlBFYrniwtr3fFBhxzprISLSCExDYkppD4p4vF94buvE95LETyzdqW+3//GBks4UZvH7NYcu8UNSHE8XqN4e1dV+C4Zwt3FtuHCushLdiqd3/dHUna3jadEjT2rmYn3Xu9H2pvPdxgaG25QXCw8C6tIvP2jvG7iPNjxL93geGehRkiWkkaI7H3EqK+jwD+LapnNqNnOx5s0fGobv/cUnj/WinEM2bMmDFjxowPw48mpb/5zW8U8D8D/z3w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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = []\n", "y = []\n", "for i, val in enumerate(mylsa):\n", " try:\n", " x.append(val[0][1])\n", " except:\n", " pass\n", " try:\n", " y.append(val[1][1])\n", " except:\n", " pass\n", "\n", "fig, ax = plt.subplots(figsize=(16,9))\n", "sns.scatterplot(x=x, y=y, alpha=0.1)" ] }, { "cell_type": "code", "execution_count": 342, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "7.533877018931459" ] }, "execution_count": 342, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tsne = TSNE()\n", "TSNE.fit_transform(mylsi)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Build two separate LSI models\n", "Compare the text to both and check soft cosine similarity?" ] }, { "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 }