├── README.md ├── assets ├── apriori_algorithm.png ├── datacamp.svg └── olist_marketplaces.png ├── data ├── olist_order_items_dataset.csv ├── olist_products_dataset.csv ├── olist_transactions.csv └── product_category_name_translation.csv └── notebooks ├── Market-Basket-Analysis-in-Python.ipynb └── Market-Basket-Analysis-in-Python_Solution.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # **Market Basket Analysis**
by **Isaiah Hull** 2 | 3 | Live training sessions are designed to mimic the flow of how a real data scientist would address a problem or a task. As such, a session needs to have some “narrative” where learners are achieving stated learning objectives in the form of a real-life data science task or project. For example, a data visualization live session could be around analyzing a dataset and creating a report with a specific business objective in mind _(ex: analyzing and visualizing churn)_, a data cleaning live session could be about preparing a dataset for analysis etc ... 4 | 5 | As part of the 'Live training Spec' process, you will need to complete the following tasks: 6 | 7 | Edit this README by filling in the information for steps 1 - 4. 8 | 9 | ## Step 1: Foundations 10 | 11 | This part of the 'Live training Spec' process is designed to help guide you through session design by having you think through several key questions. Please make sure to delete the examples provided here for you. 12 | 13 | ### A. What problem(s) will students learn how to solve? (minimum of 5 problems) 14 | 15 | - Prepare data for use in Market Basket Analysis. 16 | - Identify patterns in consumer decision-making with `mlxtend`. 17 | - Use metrics to evaluate the properties of patterns. 18 | - Construct association rules that provide concrete recommendations for businesses. 19 | - Perform pruning to identify useful rules. 20 | - Visualize patterns and rules using `seaborn` and `matplotlib`. 21 | 22 | ### B. What technologies, packages, or functions will students use? Please be exhaustive. 23 | 24 | - `numpy` 25 | - `pandas` 26 | - `matplotlib` 27 | - `seaborn` 28 | - `mlxtend` 29 | 30 | ### C. What terms or jargon will you define? 31 | 32 | - Transaction: A set of items purchased together. 33 | - Itemset: A collection of unique items. 34 | - Association rule: an "if-then" statement of association between two itemsets. For instance, "if coffee then milk" is an association rule that implies that customers who purchase coffee are also likely to purchase milk. 35 | - Metric: The numerical measure of the intensity of an association between itemsets. 36 | - Pruning: The removal of itemsets or rules that perform poorly according to a metric. 37 | 38 | ### D. What mistakes or misconceptions do you expect? 39 | 40 | - I expect students to be confused about the definitions of metrics and how to interpret them. 41 | - Students are likely to be confused about how the Apriori algorithm works and what it achieves. 42 | 43 | ### E. What datasets will you use? 44 | 45 | - Brazilian E-Commerce Public Dataset by Olist: https://www.kaggle.com/olistbr/brazilian-ecommerce 46 | 47 | ## Step 2: Who is this session for? 48 | 49 | Terms like "beginner" and "expert" mean different things to different people, so we use personas to help instructors clarify a live training's audience. When designing a specific live training, instructors should explain how it will or won't help these people, and what extra skills or prerequisite knowledge they are assuming their students have above and beyond what's included in the persona. 50 | 51 | - [x] Please select the roles and industries that align with your live training. 52 | - [x] Include an explanation describing your reasoning and any other relevant information. 53 | 54 | ### What roles would this live training be suitable for? 55 | 56 | *Check all that apply.* 57 | 58 | - [ ] Data Consumer 59 | - [ ] Leader 60 | - [x] Data Analyst 61 | - [ ] Citizen Data Scientist 62 | - [x] Data Scientist 63 | - [ ] Data Engineer 64 | - [ ] Database Administrator 65 | - [x] Statistician 66 | - [x] Machine Learning Scientist 67 | - [ ] Programmer 68 | - [ ] Other (please describe) 69 | 70 | Reasoning: Market Basket Analysis has limited overlap with popular methods in machine learning and data science (e.g. deep learning, gradient boosting, clustering, etc.). As such, learning the basics of Market Basket Analysis will open up an entirely new toolset for many data analysts, data scientists, statisticians, and machine learning scientists. 71 | 72 | ### What industries would this apply to? 73 | 74 | - Industries: Retail, e-commerce, streaming services. 75 | - Reasoning: Market basket analysis can be used to analyze associations between itemsets in any domain. While it is typically applied in retail settings, it can also be used in other applications, such as building recommender systems for e-commerce sites or streaming services. 76 | 77 | ### What level of expertise should learners have before beginning the live training? 78 | 79 | *List three or more examples of skills that you expect learners to have before beginning the live training* 80 | 81 | - Can define and manipulate an `array` in `numpy`. 82 | - Can define a `DataFrame` in `pandas`, create columns, and apply basic methods, such as `.mean()` and `.sum()`. 83 | - Can use `.apply()` and `lambda` functions to transform columns in a `DataFrame`. 84 | - Can generate basic plots in `matplotlib`. 85 | 86 | ## Step 3: Prerequisites 87 | 88 | List any prerequisite courses you think your live training could use from. This could be the live session’s companion course or a course you think students should take before the session. Prerequisites act as a guiding principle for your session and will set the topic framework, but you do not have to limit yourself in the live session to the syntax used in the prerequisite courses. 89 | 90 | [Data Manipulation with Pandas]( 91 | https://www.datacamp.com/courses/data-manipulation-with-pandas) 92 | 93 | [Market Basket Analysis in Python](https://learn.datacamp.com/courses/market-basket-analysis-in-python) 94 | 95 | ## Step 4: Session Outline 96 | 97 | A live training session usually begins with an introductory presentation, followed by the live training itself, and an ending presentation. Your live session is expected to be around 2h30m-3h long (including Q&A) with a hard-limit at 3h30m. You can check out our live training content guidelines [here](_LINK_). 98 | 99 | 100 | **Introduction Slides** 101 | - Introduction to the webinar and instructor (led by DataCamp TA). 102 | - Summary of webinar topics. 103 | - Define Market Basket Analysis. 104 | - Discuss applications. 105 | - Introduce packages used in webinar. 106 | - Set expectations about Q&A. 107 | 108 | **Data Preparation** 109 | - Discuss Brazilian e-commerce dataset. 110 | - Import data using `pd.read_csv()`. 111 | - Define transaction and itemset. 112 | - Identify transactions in dataset using `pandas` 113 | and `numpy` methods. 114 | - Convert transactions to list of lists. 115 | - Q&A 116 | 117 | **Association Rules, Metrics, and Pruning** 118 | - One-hot encode transactions using 119 | `TransactionEncoder` from `mlxtend`. 120 | - Use `.mean()` to compute support for 121 | individual items. 122 | - Use `.mean()` to compute support for 123 | itemsets. 124 | - Compute confidence using `lambda` function. 125 | - Visualize results in `matplotlib` and `seaborn`. 126 | - Q&A 127 | 128 | **The Apriori Algorithm** 129 | - Introduce `apriori` and `association_rules` 130 | from `mlxtend`. 131 | - Use `min_support`, `max_len`, and `min_threshold` to 132 | perform pruning over itemsets and association rules. 133 | - Identify useful association rules in e-commerce dataset 134 | through the use of pruning. 135 | - Visualize results in `matplotlib` and `seaborn`. 136 | - Q&A 137 | 138 | **Ending Slides** 139 | - Summarize webinar topics. 140 | - Reference DataCamp course on MBA. 141 | - Explain additional topics covered. 142 | - Provide additional supporting material and appendices. 143 | 144 | ## Authoring your session 145 | 146 | To get yourself started with setting up your live session, follow the steps below: 147 | 148 | 1. Download and install the "Open in Colabs" extension from [here](https://chrome.google.com/webstore/detail/open-in-colab/iogfkhleblhcpcekbiedikdehleodpjo?hl=en). This will let you take any jupyter notebook you see in a GitHub repository and open it as a **temporary** Colabs link. 149 | 2. Upload your dataset(s) to the `data` folder. 150 | 3. Upload your images, gifs, or any other assets you want to use in the notebook in the `assets` folder. 151 | 4. Check out the notebooks templates in the `notebooks` folder, and keep the template you want for your session while deleting all remaining ones. 152 | 153 | You can author and save your progress on your notebook using **either** of these methods. 154 | 155 | _**How to author your notebook: By directly saving into GitHub**_ 156 | 157 | 1. Preview your desired notebook, press on "Open in Colabs" extension - and start developing your content in colabs _(which will act as the solution code to the session)_. :warning: **Important** :warning: Your progress will **not** be saved on Google Colabs since it's a temporary link. To save your progress, make sure to press on `File`, `Save a copy in GitHub` and follow remaining prompts. 158 | 2. Once your notebooks is ready to go, give it the name `session_name_solution.ipynb` create an empty version of the Notebook to be filled out by you and learners during the session, end the file name with `session_name.ipynb`. 159 | 3. Create Colabs links for both sessions and save them in notebooks :tada: 160 | 161 | _**How to author your notebook: By uploading notebook into GitHub**_ 162 | 163 | 1. Preview your desired notebook, press on "Open in Colabs" extension - and start developing your content in colabs _(which will act as the solution code to the session)_. Once you're done, press on `file` - `download .ipynb` file - and overwrite the notebook by uploading it into GitHub. 164 | 2. Once your notebooks is ready to go, give it the name `session_name_solution.ipynb` create an empty version of the Notebook to be filled out by you and learners during the session, end the file name with `session_name.ipynb`. 165 | 3. Create Colabs links for both sessions and save them in notebooks :tada: 166 | 167 | 168 | You can check out either of those methods in action using this [recording](https://www.loom.com/share/1eeb148129244edd93fbc34bf5dc7f0d). 169 | -------------------------------------------------------------------------------- /assets/apriori_algorithm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datacamp/Market-Basket-Analysis-in-python-live-training/84ab96d17c41f8c627ff50fe414e8ca98728308f/assets/apriori_algorithm.png -------------------------------------------------------------------------------- /assets/datacamp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/olist_marketplaces.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datacamp/Market-Basket-Analysis-in-python-live-training/84ab96d17c41f8c627ff50fe414e8ca98728308f/assets/olist_marketplaces.png -------------------------------------------------------------------------------- /data/product_category_name_translation.csv: -------------------------------------------------------------------------------- 1 | product_category_name,product_category_name_english 2 | beleza_saude,health_beauty 3 | informatica_acessorios,computers_accessories 4 | automotivo,auto 5 | cama_mesa_banho,bed_bath_table 6 | moveis_decoracao,furniture_decor 7 | esporte_lazer,sports_leisure 8 | perfumaria,perfume 9 | utilidades_domesticas,housewares 10 | telefonia,telephony 11 | relogios_presentes,watches_gifts 12 | alimentos_bebidas,food_drink 13 | bebes,baby 14 | papelaria,stationery 15 | tablets_impressao_imagem,tablets_printing_image 16 | brinquedos,toys 17 | telefonia_fixa,fixed_telephony 18 | ferramentas_jardim,garden_tools 19 | fashion_bolsas_e_acessorios,fashion_bags_accessories 20 | eletroportateis,small_appliances 21 | consoles_games,consoles_games 22 | audio,audio 23 | fashion_calcados,fashion_shoes 24 | cool_stuff,cool_stuff 25 | malas_acessorios,luggage_accessories 26 | climatizacao,air_conditioning 27 | construcao_ferramentas_construcao,construction_tools_construction 28 | moveis_cozinha_area_de_servico_jantar_e_jardim,kitchen_dining_laundry_garden_furniture 29 | construcao_ferramentas_jardim,costruction_tools_garden 30 | fashion_roupa_masculina,fashion_male_clothing 31 | pet_shop,pet_shop 32 | moveis_escritorio,office_furniture 33 | market_place,market_place 34 | eletronicos,electronics 35 | eletrodomesticos,home_appliances 36 | artigos_de_festas,party_supplies 37 | casa_conforto,home_comfort 38 | construcao_ferramentas_ferramentas,costruction_tools_tools 39 | agro_industria_e_comercio,agro_industry_and_commerce 40 | moveis_colchao_e_estofado,furniture_mattress_and_upholstery 41 | livros_tecnicos,books_technical 42 | casa_construcao,home_construction 43 | instrumentos_musicais,musical_instruments 44 | moveis_sala,furniture_living_room 45 | construcao_ferramentas_iluminacao,construction_tools_lights 46 | industria_comercio_e_negocios,industry_commerce_and_business 47 | alimentos,food 48 | artes,art 49 | moveis_quarto,furniture_bedroom 50 | livros_interesse_geral,books_general_interest 51 | construcao_ferramentas_seguranca,construction_tools_safety 52 | fashion_underwear_e_moda_praia,fashion_underwear_beach 53 | fashion_esporte,fashion_sport 54 | sinalizacao_e_seguranca,signaling_and_security 55 | pcs,computers 56 | artigos_de_natal,christmas_supplies 57 | fashion_roupa_feminina,fashion_female_clothing 58 | eletrodomesticos_2,home_appliances_2 59 | livros_importados,books_imported 60 | bebidas,drinks 61 | cine_foto,cine_photo 62 | la_cuisine,cuisine 63 | musica,music 64 | casa_conforto_2,home_comfort_2 65 | portateis_casa_forno_e_cafe,small_appliances_home_oven_and_coffee 66 | cds_dvds_musicais,cds_dvds_music 67 | dvds_blu_ray,dvds_blu_ray 68 | flores,flowers 69 | artes_e_artesanato,arts_and_crafts 70 | fraldas_higiene,diapers_and_hygiene 71 | fashion_roupa_infanto_juvenil,fashion_childrens_clothes 72 | seguros_e_servicos,security_and_services -------------------------------------------------------------------------------- /notebooks/Market-Basket-Analysis-in-Python.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Market-Basket-Analysis-in-Python.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "display_name": "Python 3", 11 | "language": "python", 12 | "name": "python3" 13 | }, 14 | "language_info": { 15 | "codemirror_mode": { 16 | "name": "ipython", 17 | "version": 3 18 | }, 19 | "file_extension": ".py", 20 | "mimetype": "text/x-python", 21 | "name": "python", 22 | "nbconvert_exporter": "python", 23 | "pygments_lexer": "ipython3", 24 | "version": "3.7.1" 25 | } 26 | }, 27 | "cells": [ 28 | { 29 | "cell_type": "markdown", 30 | "metadata": { 31 | "colab_type": "text", 32 | "id": "6Ijg5wUCTQYG" 33 | }, 34 | "source": [ 35 | "

\n", 36 | "\"DataCamp\n", 37 | "

\n", 38 | "

\n", 39 | "\n", 40 | "## **Market Basket Analysis in Python**\n", 41 | "\n", 42 | "Welcome to this hands-on training event on Market Basket Analysis in Python. In this session, you will learn how to:\n", 43 | "* Identify patterns in consumer decision-making with the `mlxtend` package.\n", 44 | "* Use metrics to evaluate the properties of patterns.\n", 45 | "* Construct \"rules\" that provide concrete recommendations for businesses.\n", 46 | "* Visualize patterns and rules using `seaborn` and `matplotlib`.\n", 47 | "\n", 48 | "## **The dataset**\n", 49 | "\n", 50 | "**We'll use a dataset from a Brazilian ecommerce site (olist.com) that is divided into three CSV files:**\n", 51 | "\n", 52 | "1. `olist_order_items_dataset.csv`\n", 53 | "2. `olist_products_dataset.csv`\n", 54 | "3. `product_category_name_translation.csv`\n", 55 | "\n", 56 | "**The column definitions are as follows:**\n", 57 | "\n", 58 | "`olist_order_items_dataset.csv`:\n", 59 | "\n", 60 | "- `order_id`: The unique identifier for a transaction.\n", 61 | "- `order_item_id`: The order of an item within a transaction.\n", 62 | "- `product_id`: The unique identifier for a product.\n", 63 | "- `price`: The product's price.\n", 64 | "\n", 65 | "`olist_products_dataset.csv`:\n", 66 | "\n", 67 | "- `product_id`: The unique identifier for a product.\n", 68 | "- `product_category_name`: The name of an item's product category in Portuguese.\n", 69 | "- `product_weight_g`: The product's weight in grams.\n", 70 | "- `product_length_cm`: The product's length in centimeters.\n", 71 | "- `product_width_cm`: The product's width in centimeters.\n", 72 | "- `product_height_cm`: The product's height in centimeters.\n", 73 | "\n", 74 | "`product_category_name_translation.csv`:\n", 75 | "\n", 76 | "- `product_category_name`: The name of an item's product category in Portuguese.\n", 77 | "- `product_category_name_english`: The name of an item's product category in English.\n" 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "metadata": { 83 | "colab_type": "text", 84 | "id": "BMYfcKeDY85K" 85 | }, 86 | "source": [ 87 | "## **Data preparation**" 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": { 93 | "id": "y3xDirMYnuYB", 94 | "colab_type": "text" 95 | }, 96 | "source": [ 97 | "The first step in any Market Basket Analysis (MBA) project is to determine what constitutes an **item**, an **itemset**, and a **transaction**. This will depend on the dataset we're using and the question we're attempting to answer.\n", 98 | "\n", 99 | "* **Grocery store**\n", 100 | "\t* Item: Grocery\n", 101 | "\t* Itemset: Collection of groceries\n", 102 | "\t* Transaction: Basket of items purchased\n", 103 | "* **Music streaming service**\n", 104 | "\t* Item: Song\n", 105 | "\t* Itemset: Collection of unique songs\n", 106 | "\t* Transaction: User song library\n", 107 | "* **Ebook store**\n", 108 | "\t* Item: Ebook\n", 109 | "\t* Itemset: One or more ebooks\n", 110 | "\t* Transaction: User ebook library\n" 111 | ] 112 | }, 113 | { 114 | "cell_type": "markdown", 115 | "metadata": { 116 | "id": "4_gO3NX1JvFy", 117 | "colab_type": "text" 118 | }, 119 | "source": [ 120 | "**In this live training session, we'll use a dataset of transactions from olist.com, a Brazilian ecommerce site.**\n", 121 | "* 100,000+ orders over 2016-2018.\n", 122 | "* Olist connects sellers to marketplaces.\n", 123 | "* Seller can register products with Olist.\n", 124 | "* Customer makes purchase at marketplace from Olist store.\n", 125 | "* Seller fulfills orders." 126 | ] 127 | }, 128 | { 129 | "cell_type": "markdown", 130 | "metadata": { 131 | "id": "_mo4P8zBp_9d", 132 | "colab_type": "text" 133 | }, 134 | "source": [ 135 | "\n", 136 | "\n", 137 | "---\n", 138 | "\n", 139 | "\n", 140 | "![alt](https://github.com/datacamp/Market-Basket-Analysis-in-python-live-training/blob/master/assets/olist_marketplaces.png?raw=true)\n", 141 | "\n", 142 | "\n", 143 | "\n", 144 | "\n", 145 | "\n", 146 | "---\n", 147 | "\n" 148 | ] 149 | }, 150 | { 151 | "cell_type": "markdown", 152 | "metadata": { 153 | "id": "D1HMEk73_ie6", 154 | "colab_type": "text" 155 | }, 156 | "source": [ 157 | "**What is an item**?\n", 158 | " * A product purchased from Olist.\n", 159 | "\n", 160 | "**What is an itemset?**\n", 161 | " * A collection of one or more product(s).\n", 162 | "\n", 163 | "**What is a transaction?**\n", 164 | " * An itemset that corresponds to a customer's order." 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "metadata": { 170 | "id": "xhliXEYb02sm", 171 | "colab_type": "code", 172 | "colab": {} 173 | }, 174 | "source": [ 175 | "# Import modules.\n", 176 | "import numpy as np\n", 177 | "import pandas as pd\n", 178 | "import matplotlib.pyplot as plt\n", 179 | "import seaborn as sns\n", 180 | "\n", 181 | "# Set default asthetic parameters.\n", 182 | "sns.set()\n", 183 | "\n", 184 | "# Define path to data.\n", 185 | "data_path = 'https://github.com/datacamp/Market-Basket-Analysis-in-python-live-training/raw/master/data/'" 186 | ], 187 | "execution_count": null, 188 | "outputs": [] 189 | }, 190 | { 191 | "cell_type": "code", 192 | "metadata": { 193 | "colab_type": "code", 194 | "id": "EMQfyC7GUNhT", 195 | "colab": {} 196 | }, 197 | "source": [ 198 | "# Load orders dataset.\n", 199 | "\n", 200 | "\n", 201 | "# Load products items dataset.\n", 202 | "\n", 203 | "\n", 204 | "# Load translations dataset.\n" 205 | ], 206 | "execution_count": null, 207 | "outputs": [] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "metadata": { 212 | "id": "KOKdds8Qe6wq", 213 | "colab_type": "code", 214 | "colab": { 215 | "base_uri": "https://localhost:8080/", 216 | "height": 204 217 | }, 218 | "outputId": "da00d052-1eef-423e-e3d0-3d30d9089bb7" 219 | }, 220 | "source": [ 221 | "# Print orders header.\n" 222 | ], 223 | "execution_count": null, 224 | "outputs": [ 225 | { 226 | "output_type": "execute_result", 227 | "data": { 228 | "text/html": [ 229 | "
\n", 230 | "\n", 243 | "\n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | "
order_idorder_item_idproduct_idprice
0b8bfa12431142333a0c84802f9529d871765a8070ece0f1383d0f5faf913dfb9b81.0
1b8bfa12431142333a0c84802f9529d872a41e356c76fab66334f36de622ecbd3a99.3
2b8bfa12431142333a0c84802f9529d873765a8070ece0f1383d0f5faf913dfb9b81.0
300010242fe8c5a6d1ba2dd792cb1621414244733e06e7ecb4970a6e2683c13e6158.9
400018f77f2f0320c557190d7a144bdd31e5f2d52b802189ee658865ca93d83a8f239.9
\n", 291 | "
" 292 | ], 293 | "text/plain": [ 294 | " order_id ... price\n", 295 | "0 b8bfa12431142333a0c84802f9529d87 ... 81.0\n", 296 | "1 b8bfa12431142333a0c84802f9529d87 ... 99.3\n", 297 | "2 b8bfa12431142333a0c84802f9529d87 ... 81.0\n", 298 | "3 00010242fe8c5a6d1ba2dd792cb16214 ... 58.9\n", 299 | "4 00018f77f2f0320c557190d7a144bdd3 ... 239.9\n", 300 | "\n", 301 | "[5 rows x 4 columns]" 302 | ] 303 | }, 304 | "metadata": { 305 | "tags": [] 306 | }, 307 | "execution_count": 3 308 | } 309 | ] 310 | }, 311 | { 312 | "cell_type": "code", 313 | "metadata": { 314 | "id": "8jxinQxfAB6e", 315 | "colab_type": "code", 316 | "colab": { 317 | "base_uri": "https://localhost:8080/", 318 | "height": 204 319 | }, 320 | "outputId": "eab66112-b228-4a67-a33b-fcdc3459ddab" 321 | }, 322 | "source": [ 323 | "# Print orders info.\n" 324 | ], 325 | "execution_count": null, 326 | "outputs": [ 327 | { 328 | "output_type": "stream", 329 | "text": [ 330 | "\n", 331 | "RangeIndex: 112650 entries, 0 to 112649\n", 332 | "Data columns (total 4 columns):\n", 333 | " # Column Non-Null Count Dtype \n", 334 | "--- ------ -------------- ----- \n", 335 | " 0 order_id 112650 non-null object \n", 336 | " 1 order_item_id 112650 non-null int64 \n", 337 | " 2 product_id 112650 non-null object \n", 338 | " 3 price 112650 non-null float64\n", 339 | "dtypes: float64(1), int64(1), object(2)\n", 340 | "memory usage: 3.4+ MB\n" 341 | ], 342 | "name": "stdout" 343 | } 344 | ] 345 | }, 346 | { 347 | "cell_type": "code", 348 | "metadata": { 349 | "id": "D5QCoN3CEaGi", 350 | "colab_type": "code", 351 | "colab": { 352 | "base_uri": "https://localhost:8080/", 353 | "height": 204 354 | }, 355 | "outputId": "01918f16-8ef2-4699-8ed1-4cd78cd9b2d6" 356 | }, 357 | "source": [ 358 | "# Print products header.\n" 359 | ], 360 | "execution_count": null, 361 | "outputs": [ 362 | { 363 | "output_type": "execute_result", 364 | "data": { 365 | "text/html": [ 366 | "
\n", 367 | "\n", 380 | "\n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | "
product_idproduct_category_nameproduct_weight_gproduct_length_cmproduct_height_cmproduct_width_cm
01e9e8ef04dbcff4541ed26657ea517e5perfumaria225.016.010.014.0
13aa071139cb16b67ca9e5dea641aaa2fartes1000.030.018.020.0
296bd76ec8810374ed1b65e291975717fesporte_lazer154.018.09.015.0
3cef67bcfe19066a932b7673e239eb23dbebes371.026.04.026.0
49dc1a7de274444849c219cff195d0b71utilidades_domesticas625.020.017.013.0
\n", 440 | "
" 441 | ], 442 | "text/plain": [ 443 | " product_id ... product_width_cm\n", 444 | "0 1e9e8ef04dbcff4541ed26657ea517e5 ... 14.0\n", 445 | "1 3aa071139cb16b67ca9e5dea641aaa2f ... 20.0\n", 446 | "2 96bd76ec8810374ed1b65e291975717f ... 15.0\n", 447 | "3 cef67bcfe19066a932b7673e239eb23d ... 26.0\n", 448 | "4 9dc1a7de274444849c219cff195d0b71 ... 13.0\n", 449 | "\n", 450 | "[5 rows x 6 columns]" 451 | ] 452 | }, 453 | "metadata": { 454 | "tags": [] 455 | }, 456 | "execution_count": 99 457 | } 458 | ] 459 | }, 460 | { 461 | "cell_type": "code", 462 | "metadata": { 463 | "id": "Gd93j3O_AWsU", 464 | "colab_type": "code", 465 | "colab": { 466 | "base_uri": "https://localhost:8080/", 467 | "height": 238 468 | }, 469 | "outputId": "ca205535-15b4-4c24-8829-87caa5e69d3a" 470 | }, 471 | "source": [ 472 | "# Print products info.\n" 473 | ], 474 | "execution_count": null, 475 | "outputs": [ 476 | { 477 | "output_type": "stream", 478 | "text": [ 479 | "\n", 480 | "RangeIndex: 32951 entries, 0 to 32950\n", 481 | "Data columns (total 6 columns):\n", 482 | " # Column Non-Null Count Dtype \n", 483 | "--- ------ -------------- ----- \n", 484 | " 0 product_id 32951 non-null object \n", 485 | " 1 product_category_name 32341 non-null object \n", 486 | " 2 product_weight_g 32949 non-null float64\n", 487 | " 3 product_length_cm 32949 non-null float64\n", 488 | " 4 product_height_cm 32949 non-null float64\n", 489 | " 5 product_width_cm 32949 non-null float64\n", 490 | "dtypes: float64(4), object(2)\n", 491 | "memory usage: 1.5+ MB\n" 492 | ], 493 | "name": "stdout" 494 | } 495 | ] 496 | }, 497 | { 498 | "cell_type": "code", 499 | "metadata": { 500 | "id": "AzBZGfXJEZ0P", 501 | "colab_type": "code", 502 | "colab": { 503 | "base_uri": "https://localhost:8080/", 504 | "height": 204 505 | }, 506 | "outputId": "2def817c-b13d-464a-c0b9-a6b80c090363" 507 | }, 508 | "source": [ 509 | "# Print translations header.\n" 510 | ], 511 | "execution_count": null, 512 | "outputs": [ 513 | { 514 | "output_type": "execute_result", 515 | "data": { 516 | "text/html": [ 517 | "
\n", 518 | "\n", 531 | "\n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | "
product_category_nameproduct_category_name_english
0beleza_saudehealth_beauty
1informatica_acessorioscomputers_accessories
2automotivoauto
3cama_mesa_banhobed_bath_table
4moveis_decoracaofurniture_decor
\n", 567 | "
" 568 | ], 569 | "text/plain": [ 570 | " product_category_name product_category_name_english\n", 571 | "0 beleza_saude health_beauty\n", 572 | "1 informatica_acessorios computers_accessories\n", 573 | "2 automotivo auto\n", 574 | "3 cama_mesa_banho bed_bath_table\n", 575 | "4 moveis_decoracao furniture_decor" 576 | ] 577 | }, 578 | "metadata": { 579 | "tags": [] 580 | }, 581 | "execution_count": 100 582 | } 583 | ] 584 | }, 585 | { 586 | "cell_type": "code", 587 | "metadata": { 588 | "id": "l4ci_uMgy81Z", 589 | "colab_type": "code", 590 | "colab": {} 591 | }, 592 | "source": [ 593 | "# Print translations info.\n" 594 | ], 595 | "execution_count": null, 596 | "outputs": [] 597 | }, 598 | { 599 | "cell_type": "markdown", 600 | "metadata": { 601 | "id": "sC5SO_1LgNO5", 602 | "colab_type": "text" 603 | }, 604 | "source": [ 605 | "---\n", 606 | "

Q&A 1

\n", 607 | "\n", 608 | "---" 609 | ] 610 | }, 611 | { 612 | "cell_type": "markdown", 613 | "metadata": { 614 | "id": "3bGr9T2DGo20", 615 | "colab_type": "text" 616 | }, 617 | "source": [ 618 | "### **Translating item category names**" 619 | ] 620 | }, 621 | { 622 | "cell_type": "markdown", 623 | "metadata": { 624 | "id": "e9Y2uCaKwl3j", 625 | "colab_type": "text" 626 | }, 627 | "source": [ 628 | "**The product names are given in Portuguese.**\n", 629 | " * We'll translate the names to English using a `pandas` `DataFrame` named `translations`.\n", 630 | " * `.merge()` performs a join operation on columns or indices.\n", 631 | " * `on` is the column on which to perform the join.\n", 632 | " * `how` specifies which keys to use to perform the join. " 633 | ] 634 | }, 635 | { 636 | "cell_type": "code", 637 | "metadata": { 638 | "id": "6AXIu0a_fLuG", 639 | "colab_type": "code", 640 | "colab": {} 641 | }, 642 | "source": [ 643 | "# Translate product names to English.\n", 644 | "\n", 645 | "\n", 646 | "# Print English names.\n" 647 | ], 648 | "execution_count": null, 649 | "outputs": [] 650 | }, 651 | { 652 | "cell_type": "markdown", 653 | "metadata": { 654 | "id": "FVqfYEjwHXZM", 655 | "colab_type": "text" 656 | }, 657 | "source": [ 658 | "### **Convert product IDs to product category names.**" 659 | ] 660 | }, 661 | { 662 | "cell_type": "markdown", 663 | "metadata": { 664 | "id": "welfsnP1xJzC", 665 | "colab_type": "text" 666 | }, 667 | "source": [ 668 | "**We can work with product IDs directly, but do not have product names.**\n", 669 | " * Map product IDs to product category names, which are available in `products`.\n", 670 | " * Use another `.merge()` with `orders` and subset of `products` columns.\n", 671 | " \n", 672 | "**Using category names will also simplify the analysis, since there are fewer categories than products.**" 673 | ] 674 | }, 675 | { 676 | "cell_type": "code", 677 | "metadata": { 678 | "id": "H1wmY51JtTu7", 679 | "colab_type": "code", 680 | "colab": {} 681 | }, 682 | "source": [ 683 | "# Define product category name in orders DataFrame.\n" 684 | ], 685 | "execution_count": null, 686 | "outputs": [] 687 | }, 688 | { 689 | "cell_type": "code", 690 | "metadata": { 691 | "id": "kogImVcnu4q7", 692 | "colab_type": "code", 693 | "colab": {} 694 | }, 695 | "source": [ 696 | "# Print orders header.\n" 697 | ], 698 | "execution_count": null, 699 | "outputs": [] 700 | }, 701 | { 702 | "cell_type": "code", 703 | "metadata": { 704 | "id": "J906oRHjgsZE", 705 | "colab_type": "code", 706 | "colab": {} 707 | }, 708 | "source": [ 709 | "# Drop products without a defined category.\n" 710 | ], 711 | "execution_count": null, 712 | "outputs": [] 713 | }, 714 | { 715 | "cell_type": "code", 716 | "metadata": { 717 | "id": "S0DEdAgkfke2", 718 | "colab_type": "code", 719 | "colab": {} 720 | }, 721 | "source": [ 722 | "# Print number of unique items.\n" 723 | ], 724 | "execution_count": null, 725 | "outputs": [] 726 | }, 727 | { 728 | "cell_type": "code", 729 | "metadata": { 730 | "id": "sp_ZZcj7IEMD", 731 | "colab_type": "code", 732 | "colab": {} 733 | }, 734 | "source": [ 735 | "# Print number of unique categories.\n" 736 | ], 737 | "execution_count": null, 738 | "outputs": [] 739 | }, 740 | { 741 | "cell_type": "markdown", 742 | "metadata": { 743 | "id": "Yxp4Dk15IP9g", 744 | "colab_type": "text" 745 | }, 746 | "source": [ 747 | "**Insight**: Performing \"aggregation\" up to the product category level reduces the number of potential itemsets from $2^{32328}$ to $2^{71}$." 748 | ] 749 | }, 750 | { 751 | "cell_type": "markdown", 752 | "metadata": { 753 | "id": "_z5WqVXFIn23", 754 | "colab_type": "text" 755 | }, 756 | "source": [ 757 | "### **Construct transactions from order and product data**" 758 | ] 759 | }, 760 | { 761 | "cell_type": "markdown", 762 | "metadata": { 763 | "id": "fDofpDQ8zw7n", 764 | "colab_type": "text" 765 | }, 766 | "source": [ 767 | "* **We will perform Market Basket Analysis on transactions.**\n", 768 | " * A transaction consists of the unique items purchased by a customer.\n", 769 | "* **Need to extract transactions from orders `DataFrame`.**\n", 770 | " * Group all items in an order." 771 | ] 772 | }, 773 | { 774 | "cell_type": "code", 775 | "metadata": { 776 | "id": "LObvSR1bfs8N", 777 | "colab_type": "code", 778 | "colab": {} 779 | }, 780 | "source": [ 781 | "# Identify transactions associated with example order.\n", 782 | "example1 = orders[orders['order_id'] == 'fe64170e936bc5f6a6a41def260984b9']['product_category_name_english']\n", 783 | "\n", 784 | "# Print example.\n" 785 | ], 786 | "execution_count": null, 787 | "outputs": [] 788 | }, 789 | { 790 | "cell_type": "code", 791 | "metadata": { 792 | "id": "B2EEHJpPWOVJ", 793 | "colab_type": "code", 794 | "colab": {} 795 | }, 796 | "source": [ 797 | "# Identify transactions associated with example order.\n", 798 | "example2 = orders[orders['order_id'] == 'fffb9224b6fc7c43ebb0904318b10b5f']['product_category_name_english']\n", 799 | "\n", 800 | "# Print example.\n" 801 | ], 802 | "execution_count": null, 803 | "outputs": [] 804 | }, 805 | { 806 | "cell_type": "markdown", 807 | "metadata": { 808 | "id": "n83EDUs0Wa_2", 809 | "colab_type": "text" 810 | }, 811 | "source": [ 812 | "**Insight**: Aggregation reduces the number of items and, therefore, itemsets." 813 | ] 814 | }, 815 | { 816 | "cell_type": "markdown", 817 | "metadata": { 818 | "id": "0yVc5cmhCHt6", 819 | "colab_type": "text" 820 | }, 821 | "source": [ 822 | "**Map `orders` to `transactions`.**\n", 823 | "* `.groupby()` splits a `DataFrame` into groups according to some criterion.\n", 824 | "* `.unique()` returns list of unique values." 825 | ] 826 | }, 827 | { 828 | "cell_type": "code", 829 | "metadata": { 830 | "id": "nXES2DJ3Ry8l", 831 | "colab_type": "code", 832 | "colab": {} 833 | }, 834 | "source": [ 835 | "# Recover transaction itemsets from orders DataFrame.\n", 836 | "\n", 837 | "\n", 838 | "# Print transactions header.\n" 839 | ], 840 | "execution_count": null, 841 | "outputs": [] 842 | }, 843 | { 844 | "cell_type": "code", 845 | "metadata": { 846 | "id": "l06VMDNQfzqZ", 847 | "colab_type": "code", 848 | "colab": { 849 | "base_uri": "https://localhost:8080/", 850 | "height": 564 851 | }, 852 | "outputId": "bcf16881-eabe-4f22-b70a-18c097c4c0a8" 853 | }, 854 | "source": [ 855 | "# Plot 50 largest categories of transactions.\n" 856 | ], 857 | "execution_count": null, 858 | "outputs": [ 859 | { 860 | "output_type": "execute_result", 861 | "data": { 862 | "text/plain": [ 863 | "" 864 | ] 865 | }, 866 | "metadata": { 867 | "tags": [] 868 | }, 869 | "execution_count": 59 870 | }, 871 | { 872 | "output_type": "display_data", 873 | "data": { 874 | "image/png": "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6oknntCPP/6oDh06mOqK6uv+t3btWj322GMKDQ1VWFiYpTacOXNG8+fP12effaZy5crpiSee0Nq1a9WpUyf/XfbcOLFvlitXTvv379cNN9wgKfMuam6p43MSFham8+fP+48RCQkJltuRmpqqY8eOacWKFerZs6ckWfpeU1NTde7cOX3//fdq3769JFlugxPbMzw8XJGRkZbKXMjuvmWn/E033aSHH35YmzZt0sMPP+x/PSIiwvKTmhIlSgR9vPCVW7lypebOnet//bXXXlOLFi0CZorzyZMnjzp27BhUGx5//HE1bdpU06dPt/xk5kJnzpzJtv1q1qypUaNGWaojLS1NGzZs0Ndff63hw4dLkqVjp53zupPj4tatW6dZs2b5/65Tp47atGmjWbNmqVGjRgHL58uXL1u7fV2zrbBzXXD69Gn/b6Nr16666aab9Mwzz2jatGmWr5Psng/trEfWrnJPPPGEBg8erBo1aqhixYratWuXbrnlFkvrEuz57IEHHtANN9yg4cOHZ+s9EhERodtuu8305xcpUsTyE7sL2b2+sHvdeyHf/nTVVVcpX758GjBggB588EENHDjwLy9vd9+U7J0DfDwV4NWvX19DhgzRqVOnNHfuXH322Wdq0aKF6fLTpk3TrFmzVLZsWT311FN66KGHFBISohdeeEH169c3Vce1116r9evXKyQkRBkZGZo0aZLlYGvkyJH67LPP1LdvX5UoUUIHDhywdOHTtWtXS593Ka+99po++OADtWzZUmXLltW+fftUo0YN0+XLly+vjh07as+ePerTp4/Onj1r6fPPnTunxYsX6/PPP1d6erp69uypRo0aaePGjerfv3/AaRJ8ypUrpwkTJvjHJs6ZM0dly5a9LOvhG4P39ddfm0trm4tx48ZpwYIFevzxx1WkSBEdPHhQzz33nOny1atX16RJk3Tu3DmtXbtWH330UcAUyRfq0qWLdu7cqTZt2mju3Lm6+uqrJUlVq1bV4sWLTdVx7733qlGjRkpPT9ewYcOUlJRkKRiIjo7WV199pbp162rs2LGqUKGCJCkyMlINGzY0VYfdfVPKPIE1bdpU1apVk5TZxbBq1ar+Ljrjx48PWEe7du3UtWtXnThxQu+8847mzZunXr16WWrHM888o4YNG6pmzZqqVKmS4uPjLSVZatSokf9CoWrVqjp69KjlQf9ObM/atWtr5cqVeuihhyyX9bG7b9kpf/vtt+v2229X3bp1VbRo0WBXQZJ0//33a8yYMXrssceyfRdWLhxTUlJ0/PhxFStWTFJmFzIr3akffPBBW99HaGiovvzyS9sBXv78+bV27Vr/ueenn35S/vz5LdXRo0cPDRkyRDVr1tStt96qvXv3+m/MmOHEef3QoUOKiYnRb7/95h8zK8nfXdKMEydOZEvKce7cOZ08eVIhISEKDw8PWN7XpdwwDB08eFBTpkzxH7/MsnNdkJqaqvT0dP9Nk8cee0x58+bVs88+e8nx9pdi93xoZz06d+580WvLli3TsmXLFBISYuk7tXM+K1OmjK699lpVrlxZ9957r+nPvFD9+vX12WefqVGjRtmON1Z+Z3avL+xe9/osW7ZMM2bM0LFjx/Tkk09q0aJFKliwoNLS0tSgQYOAAZrd8pK9fdN388CJc4DnsmguWLBAy5cvl2EYqlu3rpo2bWq6bHR0tJ588kmVL1/+omWbN2/WXXfdFbCOo0ePasCAAfrpp58UEhKi6tWra+zYsSpevLil9ZCU7eRsxZkzZzRx4kT98MMPkqRatWrphRdesHxStOvs2bNavXq1brvtNpUtW1YJCQnavn27ateubap8rVq1VKNGDbVv315VqlTJtuyVV14xnbggMTFRI0aM0A8//KCQkBDdf//9euWVV0x/J3bWY9CgQfrqq6+Umpqa7aLbMAyFhIQElawkWOfPn9fUqVOz/T46d+580ZPv3CxdulT169e3/MQtK8Mw9Ntvv6ls2bKKiIjQ8ePHdfjwYd1xxx2myk+bNk0tW7ZUkSJFLlp25MgRlSxZMmAddvdNSYqNjc11eW5zB2W1fv16/6DuunXrWnoynZP09HSlp6dfdEc1NydPnlShQoUUGhqqU6dOKSUlRaVKlTJd3onted999+nPP/9UwYIFlTdv3qB+I3b3LbvlpcwB9i+//LLy58+vp59+Wlu3btWwYcMsnYtyujCyeuE4Y8YMTZ482f/EZOXKlerSpYvatWtnqvyaNWv00ksvKTQ0NOjvo2vXrho4cKCuv/5602UutHHjRvXo0cO/P58/f14TJkwwdT72sZvtMKfzekxMjK655hrTbXjuuefUqFEjffjhh3rjjTf0+eefq1y5cpZuyL711ltauXKlHn30UUmZF6O1atVSly5dNGDAgIBjnlJSUjRq1Cj/zdG6detq8ODBKlCggOk22BEdHa2HHnroopsGK1as0ODBg4M+HyYmJio+Pl6VK1c2XcZOhlcnOXE+e+KJJzRnzpyg23D77bf7/++bkDskJETbtm0zXYed64v09HRFRUVZHgOZky5duqh9+/Z68MEHL1q2fPnygEGn3fI+KSkp2r9/v+68805zDf//cqvf6jnAU2Pw7PKNXwn02qWkpaUZM2fONAzDME6fPm2kpKQE1Y5ff/3VePjhh43atWsbhmEYGzduNF599VXT5QcNGmT079/fWL9+vbF+/Xpj4MCBxsCBAy23Y+/evUabNm2MOnXqGIZhGJs3b/aP0TFjxIgRpl67lISEBNPvzU1ycrKp1y5l8uTJRmJiYtCfb3cMXvPmzbP1r7/w3+W2fft249NPPzU+/fRTY8eOHZbLf//990ZSUpL/75MnT2YbY5ObtLQ0W/3ys9qzZ4/x9ddfG4aRuT+cOHHCkXrNcmpdTp8+bbz11ltG7969DcPIHDvgWy8zMjIyjNmzZxtjxowxDCNz3OvPP/9suR12t6cTY5QMI3OM1qeffmoYRuZvb8+ePabLdu/e3dRrufGNv1ixYoXRs2dP4/Dhw0GNBXfCtm3bjOnTpxvTp083fvvtN0tl69WrZyxZssTWmMhnn33WqFKlitGxY8ds4xKtOnfunLF9+3Zj+/btxrlz5yyXf/bZZ420tDT/3wkJCZbHyxqGvfO6bwyOb8xbenq60bJlS8v1fPvtt8bIkSONkSNHGt9++63pcmlpaZbGYF6K3esCM1auXBnwPW3btjWSkpKMkydPGrVq1TIaNWpkjBo1yvRn5HTsDeZ4fPr0aWPPnj3Gzp07/f+CkZqaapw+fdr/z4qxY8caw4YNMzZs2GC7HVdKML+FnMybN8/Ua39VecMwjO+++86oXbu2/zeyceNGS2MineKJLpqB0i6bzWy3ePHii1Lc5vTapYSFhWnWrFlq3bq1radlI0eO1AcffKC+fftKkipVqmS637CUmXVs4cKF/r+rVq2qJk2aWG6HL8PfuHHjJGVm+Ovfv7+6detmqrzdbHIlS5bUmjVrdODAgWzdN3zTYJj11FNPXfS0JafXLuXIkSOKjIzUAw88oCeffFL33HOPpc+/5pprNHv2bBUsWNBSOR8rGRFzc/bsWcXFxV20Pa1kfpwxY4YmTZrkfyowZcoUvfDCC6afCkiZv9es2z4iIuKi1y4lLCxMBQoUsD13UGxsrCZPnqzz58+rXr16OnLkiKKjo/Xxxx+bruP48eMaPny4/67zAw88oFdeecX0U3en1mXo0KEqUaJEtuxlffr0Ub169UyVHzlypBITE7Vlyxb169fPn1nviy++MN0GJ7ZnmTJllJaW5k8/f9NNN1l6uixl7o8rV67U0aNH1b59e3+2Q7PT5djNRpfVunXrVL9+fZUqVcry+CIps6vO2rVrJWU+3cypZ0kgt9xyi/9p+0033WSpbJEiRUx3eb6UJk2aBHXukTK7H+bNm9efddPXrT4tLU1paWmWzrG+sTMxMTFBZTucN2+e6tSp43/K8ueff+q///2vpXXzjeErUKCA/vjjD11zzTXZskiaVbduXctd66XM481///tf02MwL8XudYEZb731VsCn/6dPn1ahQoU0f/58RUZGqm/fvmratGnA8+X+/fu1b98+f4ZXn+TkZMsZXmfMmKGxY8eqSJEi/q7cVp+y+MaF+qaWMYJ4erZo0SJJ0nfffed/zWo79u7dq927d6tevXo6deqUzp8/b6mr+YgRI9S1a1d/mRMnTmjixImms9Xed999io6OVrNmzbI9UbY6nvHjjz++qLdETq/9VeUlacKECfriiy/8sUOlSpUsT4Pxww8/qFKlSv6eX0lJSdqyZYulJ8yeCPDsdi/4/vvvtXr1ah05ciRbsJiSkmI5CUWNGjW0dOlSWyfG8+fPX7RTW5337fTp0/7tYvWg5ZOcnKzatWv7U9WGhoaaaseSJUu0ZMkS/f7779lOoikpKabGCfgMGDBAW7Zs0R133BFUl8C0tDSdP39eGRkZOnv2rP+7tHogf/XVV9W7d2/Nnz9fr776qq666io9+eSTaty4sekL80GDBuV4kWdmnNaFfetPnz4tyfp+37VrV4WGhurOO++01H0vq+nTp2vevHn+7q3Hjx9X27ZtLQV4vhOYT2hoqKUByDfddJOefPJJPfLII9m2gZXA/5NPPtGXX37pL3PzzTfr2LFjpstLUlRUlG655RYNHDhQhmFo9uzZGjJkiKXU0E6sy/bt2zV69Gj/nEEFCxa0lDxh7dq1mjdvnr9L6dVXX51tjJAZTmzPTZs2qXv37v7ugGlpaXrnnXcsdXGJi4vTl19+qSeeeEJSZrBrZtzZ7NmzNWvWLO3bty/bVADJycmWAyMnBtjPmzdP48aN83dlmzx5svr27WspoLC7PevVq6fPP/9cjz76aNDjcsx2U85J69atFRsbqypVqmTrNhbMBfDzzz+vESNG6PXXX9fPP/+sTp06qUGDBqbLf/jhh2rWrJn/76JFi+rDDz+09H1Ur15df/75p9q2bavmzZsrb968euSRR0yXlzJvNrz//vuKj4/PdpPO7M2Yhx9+WNOmTbvoItrKdxrsdYEVZq67gk2I9Msvv2ju3Lk6duyYpk6d6n89IiLC0o10KXO/iIuLs5UMY8yYMXr77bdVuXJly4mpfMzmI7iUuXPnasqUKf4bdAkJCZZv0K1fvz5bQHj11VdbuqFvN0jdtGmTNm7cqBMnTmjGjBn+11NSUkwla7Fb/kIXJvOzes1l50a4jycCPLtJRa666ioVLFhQISEh2Q56JUuWzHEwbW5iY2P10UcfKTw8XPnz5w9q3ELevHl16tQp/0Xwrl27LN3hj4yMVOvWrfXYY49JynwKaeXug0+wGf5KlizpSDa5X3/9VXFxcUGfPCZNmqR3331XISEh2frmR0REWBqMLWUGU61bt1bx4sX1xhtvaMqUKRo/frwGDhxoKntZnTp1/P9PTU3VsmXLLN+Rj4+PV58+fbRt2zaFhITojjvuUExMjOmEMYcOHfIfRINVsGDBbGMXixUrZvnJZMGCBbVhwwb/k9ANGzZYClbT09N16623Bv1kRfq/33xWVm8iHDhwINuk5N27d7f8O3NiXexmL3Mis54T2/P111/XG2+84T9GrFmzRsOHD9fMmTNN1xFstkOnstFJ9pM/SJkXjnPnzvVfJPjmKLQSUNjdnr6s0cOGDfO/ZjWwsvOU23ch43syHQynsx1mZTVo9z1Zatasme69916lpKT4E2qY1bt3bzVs2FDNmzcP6qan7+ZTTExM0MGyE5l/AzHzmw02IdLjjz+uxx9/XHPnzlXz5s1ttdOJTIdOZLD0SUxMzHZzzuwY0+nTp9u+QZfT78FK4hy7QWpCQoI2b96sM2fOZJuwvmDBgho5cuRfXj6rggUL6tixY/79eO3atZYSn0n2b4RLHgnwfFJSUjRx4kT9+OOPkjLTKb/44osXDa6+0L333qt7771XDRo0sHzAvdCXX35pq7wkvfDCC+rQoYOOHDmigQMHatWqVYqJiTFdvnPnzrr99tv9J9W+fftaSnbgE2yGv9dff11z587VkiVLbN3Bvfbaa4MuK2UG/l27dlV0dLTliZuzOnbsmGbOnKnY2FjdddddiomJ0b/+9S/Fx8frqaeeMhXgXbgdmjdvrg4dOlhqx5AhQ9SqVSt/ZljfhNQfffSRqfK33nqr6UHbF/JdKPku0HxPOWJjY3McjJybfv366eWXX/ZfXO3atcvSUy+rB9ucFC1aVHv37vUfQOfPn295f8vIyFBiYqI/4E1MTLQcHDmxLnazlzmRWc+J7elEOvxgsx2WKVNGZcqUUVxcnKXPy0mxYsXUsmVL7d+/X1LmVC/BJBmxM7WLZH972gmsfOw85Q7Uy8LMUyensh2WKFFCX331lf+p37JlyywnTsva5eq6665TUlKS5aQeGRkZeuGFFyx9blZOfKdOZP51QlRUlD8h0lVXXaXk5GRLSTqaN2+uAwcO6MCBA9kunK1kjXUi06ETGSzXrFmjgQMHKjExUaGhof7ulWYfLDhxg65SpUoaMWKEOnXqJMMwNHXqVFWqVMlSHWvWrNHu3bvVvn17JSYmKikpyXQPinr16qlevXpavXq1atWqZelznSifVd++fdWpUycdPHhQTz31lPbt26f333/fUh12b4RLHsui2b17d0VERPgvPufOnaukpCRNmDDBVPlLjeWzMkbJKfHx8Vq1apUMw1CtWrUspXR2UjAZ/h599FHFxMSof//+eueddy56mmD24BcVFaVdu3apXr162Z5SWB2Dd6kLBbMH0Fq1aql58+Zq167dRRetEyZMCGpMw/nz5/XYY4/pq6++Ml2madOmmj9/fsDXLmXXrl3q2LGjbr/99mwnEjPdRB3N7KTMrI2//vqrJKly5co5ZhC7lDNnzmjy5MmKj4/XuHHjtHv3bu3du9f0mDMpc7xBnz59tGfPHhUrVkzh4eGaNGmSypUrZ7oOXze6rFkK+/TpY+kpXtauIFlZ2cftZkfNKbPeoEGDLD2ZdWJ7tmnTRr169cqWDv/NN9+09ATPbrZDu13gpMz9YMiQIQoLC9Py5cu1adMmvffee5o0aZLpOrp27aoKFSpkm9pl27Zteu+990zX4cT2PHHihDZs2CAp83dqdfoHO8es22+/PdcnOVaeOtm1e/duvfTSS/4bOGFhYZo4caJuvvlm03U0a9ZMsbGx/nXKyMhQixYtLHW5GjJkiNq1a5ct66EVds+FPk5n/r1Qs2bNTM2pmjUgOHbsmKUu1W+++aZmz56t8uXLZxs/Z2YeVR8nst3m9F1afaravHlzjRs3Tr169VJsbKy++OILHTx40HTg3alTJw0ePFi9e/dWbGys5s+fr8WLF2vy5Mmm25CSkqLXX39d3333nUJCQvTwww9r0KBBpp9cZR0//dVXX+nw4cPq1auX6fHTPsFeH/z888+qVq1atnGZWVmdLiY5OVm//PKLJKlKlSoqXLiwpfL/+9//1K1bt4tuhFvJFOupJ3g7d+7UkiVL/H9XrVrVn07YjKzRcWpqqr777jtLqZilzIGiOZ2UrKb/LVu2rKVxTVm1bdtWkyZNyjYg/OWXX77kxWRO0tPT1bJlS8XGxlo+eD/11FPq37+/Dhw4cFGCGisHv3PnzqlcuXLasWOHpc+/0IVjOHzMHkCXL19+yf7TZoO77t27+z/bMAxt377dcjrm0NBQ7dmzx39RsXfvXkt32fr376+6desGNabRbveJCxUpUiTo+bXsJhWRMse+zZkzR/v27ZNhGLrpppssb5NmzZrpjjvu0E8//SRJevrppy3PjZW1K0hqaqrWrl2re+65x1KAd9VVV+nFF1/Uiy++aOmzfSIiImynp3Ziew4ePDjHdPhWlChRQh9++KHOnDmjjIwMy92H7XaBk5wZYD9s2DCNGDFCTZo08U/tEh0dbamOrNvTNwbPyvZctWqV+vXrp4oVK/rri4mJ0QMPPGC6DjtPuX2/74kTJypv3rxq3bq1DMPQnDlzghoTc+bMGR0+fDjb0xqzNxvLly+vxYsXZ0sAZHX/cKLL1caNGzV37lzddNNN2W7Smb0BYfdc6FO9enX/1CF2cyD45vLL+pTaTGBiN6HSkiVL9M033wTs4ZUbJ86LTjxVlTL3ybS0NIWEhOiJJ55Q8+bNTQd4gwcPVp8+fbR3717VrVvXf4POrPT0dH344Ye2eqQEO376QsFeH8TGxqpatWrZxmX6hISEWL5eKVSokK05XatUqaJFixYFfSNc8liAV7JkyWxzx504ccLSXE4XjuXr0qWLpUxbUvYumqmpqVq4cKHpO+n9+vVTTEyMWrRokWOQaPYgfvr06Ww7QtGiRXXq1ClTZX3sZPhr166d2rVrp169eumtt96yVDYrJ7qvSdkPoL7v5MSJE6bLp6ena9y4cf55BR944AG9+OKLlu56Zh2DFxYWpg4dOljOxtmrVy89+eSTqlixoj9IDJRBNqvz58/b6qqaVTB9/Z955hl98sknF90EsTpO1U5SkQsz8/na7Ruwb/VOdoUKFWx1675wH/dln7Qi2OyoTt6x9HU/840rDSbj1913362vvvoq20W01fG3drMd2u0C52N3gH3x4sVtHTsl+9vzrbfe0owZM/zf6e7du9WvXz9LAV6HDh3UrFmzi55yW/H1119ne8rVoUMHNW/e3NL35ES2w7CwMH8CooSEBEnmxzhJznS5Gjx4sKX3X8juuVDKHHvct29ff11Wx4JLmeey6OhoXXXVVWratKlOnDihLl26+IctmDn22A0ISpQoEXRwd+F55EJWzyN2n5T7rjFLlSql5cuXq0yZMjp58qTp8nZv0DmRoTXY8dMXCvb6YMSIEcrIyNArr7wS9BNyp65xfOzcCJc8EuD5LnKvvvpqNW3a1H8x/d1339nqOlCwYEH98ccflspcOOC2R48eatWqlV5++eWAZZ955hlJ9tPiZ2Rk6MyZM/6DzKlTpywNdvWxm+HP7gWKYRiaNWtWtgnbn3jiiaB+9D758uVTy5Yt1aJFC9PTXwwfPlzp6en+k+sXX3yh6OhoSwFoaGjoRV335s+fb6k7X+3atbVo0SL/ieCee+4xnZJfyjxxbN++3XLSiKzs9PX3jSO1O07VTlIRJzPz/fLLL4qJiVF8fLzS09Mdmby+ZMmS2rdvn6UywWZHdfKOpZ2MX06mw7eb7bBy5cr67bffgj7BS/YG2DvdTWj//v3+THZhYWGWEjulpaVle3/58uVNn0d8WZybNWumO++80z/dQzBPuc+ePav9+/f7hykcOHDAcmZou9kO7Y5xkuyPPZYuzqhsRzDnQilz6ISdseBSZu+TQoUKaenSpapRo4YGDRqkVq1aWRqXHmxA4PttVa5c2f/EPutNbDO/sZzOI1nbYOU84sST8qefflonT55Ujx491KdPHyUnJ5u6GZA1CVFWvptCVsYS2s3QGuz46QvZuT4IDQ1Vv379sk0zZoVT1zhS5s0Y3zhT3w1oydrTdk8EeL6d6ZZbbsm2Q7Zq1cpSPVmfhhiGoc2bNwc191BW8fHxSkxMNPXeu+66S+np6VqwYIGtLlONGzfWc889p7Zt20qSPv/886DmIgo2w59TTyLHjBmjbdu2+TNdzZs3T/v27bM8JjLrxUBGRoY2bdqk5ORk0+WdmFfQiblVpMyTh2+bWg10N27cqBYtWgTdvUfKPIB9/PHHF/X1N8OX3MVu1jE7SUWcyMzn88orr+ill16yld46a7dpwzC0adMmS0G7FHx2VCfuWPrY6X524cXShXXaHWtlpRuc3S5wkr0B9k4G3XanWihWrFi2TIOxsbGm98327dtr7ty5/nNBMBdqPr169VKrVq101113yTAMbdu2TcOHD7dUh91sh3aOez52ulzFxMSoX79+2br6Z2VmHLVk/1woZWZGzTqVSIsWLSyNW5P+L7viunXr9NBDDyl//vyWj6HBBgQX/rY+/fRT///N/sacPI848aS8cePGkjKf2n/99demy3Xu3NkfoB46dEgREREKCQlRUlKSrrvuOktdUO1maH3ttdc0YMAA7dy5U/fcc49//LRVaVVr5QAAIABJREFUdpOO3XDDDTp48GBQibGcusaRMrua9uzZUyNHjtTUqVM1Y8YMy0MOPBHg2Z0mwSfrXYewsDC1bdtW9evXt1RH1kezGRkZSktLMz3Ro+9zt2/fbukzL9SlSxeVLFnS/+Ns06ZNtrvaZgXbRdKpJ5GrV69WbGysv/vBo48+qubNm1sO8LLeZQsLC9MNN9xg6TuRgp9X0Mm5VXx3+u644w5/F00rd/qsrvOl2OnrL9l/8tWrVy9NnTpVBQsWVExMjD+piFlZx5faER4ersjISFt1ZB2D53vCMmjQIEt12MmOaveOpY+d7mdOXizZzXZotwtcRkaG8ubNq+nTpwc1wN53Yy/rRWew7E61EB0drb59+yoqKkohISGqWLGixo4da6qsL9X4li1btHv37qATbUlSgwYNVK1atWxd2KzeBHEi26Hd454UfJcrX1bbrF39g+HEudDuWHAp82lwx44dtWfPHvXp00dnz561VF7KOSAws3868duSnDuP2HlSbiYLa27v8V0jDh8+XNWrV/fnrFi6dKnWr19vqg0+do/fdsdP+9i9Pjh16pSaNGmiatWqZTuHmbmJcqmHGj5WbhSeO3dONWvWlGEYKlmypHr16qUWLVpYWhdPBHhZrV69Wtu2bcs2PshsAOhEoJj10WyePHl0zTXXWD743XfffYqOjr7oUbeVk5Fvrhe79uzZc9Ej4kDBoi8xjRPdSbL+WILtmmn3wGNnXkEn51axe6fPie/Dbl9/yf6TL7tJReyML82qdu3aWrlypa0+8h07dryol8Du3bstjcHo2rWrWrVqFVR2VMneHUufrN3PDMPQ7t27LXc/e/311y+62MzptdwMHjxYL730kv/Ory/boVm+30jWsdxWZA2Y7ewXbdu2vShZRE6vBWJnqoVy5cpp9uzZ/vHbVi64nEq0JWUGiwUKFMh2kZp1CIIZvoyMS5cuDaoddo57TozL8T2BsHtOd+Imit2x4JL8Y6Ruu+02FShQQAkJCZbHZtoNCHLqBh0REaEKFSqY6lLt1HnEzpPyUaNGadasWbl2QRw9enTAjKTr1q3Ta6+95v+7YcOGltP6S5nB/u7du1WvXj2dOnXK35XZDN/xLevv2soxb9SoURo4cKC++eYbW9cHTZo0CarHm2T/oUZWvrihSJEi+u2331SqVCnL42U9FeCNHTtWmzZt0q5du/Tvf/9b3377raVB/mlpafryyy8vChCtXIgXKVJEBQoUUGhoqHbs2KH169erfv36lsbG+Lpbfffdd/7XrJyM9u7dq8GDByshIUHLly/Xli1btHz5cnXr1s10G6TMyS9nzZqlo0ePqlKlSlq/fr3+9a9/mX4amNPdjEKFCqly5crq2LFjwANyrVq11KlTJ/9Jbd68ebbmJwl2ElA78wo6ObeKnTt90qXvLlm5qxRsX/+s7D75Sk1N1YIFCy5KZW/lya6d8aW+CzXDMDR58mQVLFjQn6nQ6hi8vn37XnQHOKfXcmMnO6pk746ljxMZv3K6Y+wbP2aW3WyHGzZsUM+ePZWRkaGVK1dq06ZNmj17tqUugU4EzBc+0UhPT7d8I6VcuXKaMGFCtqkWrCTCkDJ7DWQdA232ZpJTibYkXdR118dK11272Q5zOu6ZfdLu5LicxMREffrppxcd+8z+Vnv06HHRe3N6LTe1a9dWXFycNm7cKMn6WHAp8xxQvnx5bd++XWXLllXBggV19913W6pDkq157CZOnKhNmzb5x6Tv2LFDt912mxISEjRixAhTT0vt5imQcn5SbrZr4vbt21WlSpUcAzzfOcrMFDGGYWj9+vX+nBU///yz5Tld586dqylTpuj8+fOqV6+eEhISFB0drY8//thUebvHPN95d8qUKZay51/Izk2UC2+iB3NzzKdRo0Y6ceKEOnfurLZt2yojI8NyEhtPBXgrV65UbGysmjdvrujoaL388st69dVXTZcfMmSI0tPTtXbtWrVt21ZxcXGWk7Q8/fTT+s9//qNTp06pQ4cOqlChglatWmVpglm7J6Nhw4bpxRdf1Lhx4yRJFStWVP/+/S0HeLNnz9acOXPUtm1bTZs2TTt27LA0D1PNmjW1f/9+f0A4f/58lSxZUgkJCRo6dGjAg1i/fv00c+ZMf5/yevXq+S9WrLA7QN6XDCVrUGc1QUpSUpJSUlIUERGh8ePHa+PGjerVq5elaTjs3OmTst9dSk1N1aJFiyx36wu2r39Wdp989ejRQ+fPn9fdd99tOTuhT7DjSyVnLtSOHz+u48ePKzU1NVsXtuTkZJ0+fdpSXXazo9q5Y5lVkSJFVLNmTf/FltmnLEuWLNGSJUv0+++/Z8tanJKSovDwcMvtOHfunMLCwpSenm45WcDIkSP1wQcfqG/fvpIypzgYOHCgpc+3EzBPnTpVU6dOVUpKSrabk2fPnrV8U8TuVAtTp07VvHnz/D0XRo0apWbNmllKhGE3uJPsZX50KtuhneOek+NyunXrpvLly6tmzZpB3czJabqOYI6BxYsX1wMPPGD5t+4TGxuryZMn+4MBX/Zgs8GAJI0bN05z5sy5aB47s+eVcuXK6bXXXvOfg7ds2aKPPvpIMTEx6t27t6kAz855JGs7gn1S7tQUC1FRUerdu7f/O0xNTfVfP5o1ffp0ffnll/7g9uabb9axY8cClnPqmFeqVClFRkbq4MGD2caI+pi9kW13nKuU2Qunf//+2rFjh0JCQlShQgWNHj3aUk6P5557TlLm9dJPP/2k1NRUy1lfPRXg5c2bV3ny5FFISIjOnz+vUqVK6fDhw6bL+5JpREZGqkuXLmrXrp1eeuklS20wDEMFChTQokWL1KpVK3Xr1i2opxW7du3yZx677777LO0YycnJql27tt58801Jmd2GrKYblzK3Z4ECBZSRkSHDMFShQgVLGf7WrVunWbNm+f+uU6eO2rRpo1mzZqlRo0YBy4eGhvrvBNthd4C8EwlS3n//fTVq1EgbN27U6tWr9fTTT2vEiBGWJh0eNmyY+vXrp6FDh0qSpTt90sV3l2rVquVPxGNWWlqaZs2alW3fbNWqlempQCRp1qxZtp587d+/P9t8l8GwMwVHThdqiYmJio+PNz0J6f9j77rjorj271lWbIBgjOKzd40NUV/E7tOYKKKiqIgRNfaChQiRolhAEYnlxUjArokmKtKs0QQlKsYSE0UjogYETESaUoK0nd8f+5t5O7S9d+4VkffO5+MnYWFmh2Xm3m8755w4cQIHDhzA8+fPZSNsJiYmmD17NtX1sKqj8hjlPnfuHHx8fJCamgqATiCldevWGDJkCGJiYiQ5fUA7LkXrFSnK4ZuZmcnEiEinHwoLC0slg7RrJ0vCbG9vjxEjRsDb21uWtBsbGxN3RPfu3YuZM2ciISGBKcEKDw/Hd999JwUVjo6OcHBwoErwbt68iS1btkhdFlalWVrlR1a1w/LUTEXQFKl4qO5mZWVRC8wA2mLtkSNHkJCQIAt+aYzBRbA86yIOHDigKBnQxdmzZ5l87GJjY2UF1i5duiAuLg5t27YlVl3kZeXE0olkhUajQW5uLn744QfZ5ANt8dTQ0LBUckpShOCx5gHAjh078Pvvv8PV1ZVap0EXuol9fn4+vv/+e2qxRXd3dzg6OkoxYkREBNzd3XH06FHicwiCgODgYCQkJMDV1RUpKSmIi4tDz549ic9RrRI8IyMj5OXlwdLSEm5ubmjYsCFVBVico1ar1cjLy4OJiQmxAqaI/Px8FBQU4MqVK5g6dSoAUPOMWNXP1Go1CgsLpQAnJSVFEdepTp06KCwsRKdOneDv749//OMfVG37zMxM2Xy6aGiqUqmI/i6s4yi6UEKQ5ymQIiZAV65cwcSJEzF69Gjs3buX6hwtW7ZUXOkrCzk5OdSb6rp16/D06VNZVzY2NpaqM8DaAWvevLnUDVUKHhYcU6ZMQVBQEARBgK2tLerVq4dBgwYRzeFPnz4d06dPR2BgILPvGqs6akZGBry9vaVAs3///vD09KTqDvv7+2Pbtm2KeJWdOnVCp06dMHToUGr/p5JglcOvWbMmcnNzpfvg0aNH1PwaloTZxMQEJiYm8PX1hbGxsRRkFRQUEPMCT5w4gZkzZ8LHx4dZAEL3GVPyvHl6emLZsmXo2rWrYqVZFuVHVgGfstRMRdCqmvJQ3W3fvj1SUlKo/H0B7TPdsmVLeHt7y4JfY2Nj6sIQy7MuQmkyoAsWHztAG9+cPHlS6s6ePHlSikv07QO68UBZoBnRZO1EssLAwADbtm3D4MGDmSyUzMzMEB8fL3124eHhaNy4sd7jxDUvKChI8XsD2nvKwsICQUFB1EULXZRcv8ePH09V1AK0ony6VKaxY8dWuJaUBV9fX6Snp+PevXtwdXWFkZERNmzYQEWpqVYJ3pYtW6BWq7FixQrs27cP2dnZ+OKLL4iPNzU1xcuXLzFw4EDMmTMH9evXp15Ira2tpcW0Z8+eSE1NpQ4QWNXPpkyZAicnJ2RmZmL79u0ICwujVvsCtG37wsJCuLm5YcuWLUhOTqYiU48cORL29vbSPPT333+Pjz76CLm5uUQBGOs4igilBHmeAikqlQqnT5/G6dOnJdEH2iRRJBzrbow0JGRdDp5Go0FycrI0BkCK69ev4/Tp09JGNHLkSGmEixRNmzZFUVGRrFpI0wE0MTGBnZ0dBg4cKKsy0lTteFhw/P333zAxMUF4eDhGjx4NFxcXjB07lijBE0fHpk+fXub4GM24E6s66urVq9GuXTu4ublBEAQcPXoUXl5eVCIppqamVJXFsrBq1Sp4e3tLSV5mZibWrFlDVdBhlcOfP38+Zs2ahefPn8PNzQ2XLl2ilupOSEiAu7s7Ewd63rx5Mun5oqIizJ8/n6gCXKtWLcyfP7/UyKsI0s+za9eucHd3l4ykg4ODqUbKAaBevXpMfBiAXfmRRe2Ql+IiwEd1NysrC2PGjIGlpSWVoFLTpk3RtGlTnDx5kun9AT7PutJkQBcsPnaANoB2dXWVOOTt2rWDn58f/v77b737gBgPZGZm4vr169KkwdWrV9GnTx+qBI+1E8kDnTp1wp07dxTxIEV4eHhg+fLliI+Px9ChQ1G7dm0EBgYSH19ShEgEbbe/devWTGKLJaFSqZCSkkJ1TJcuXUpxGmnXzmvXriEsLExKOOvXry/7fUhQrRK8K1euSC1RcbSShiu1c+dOqNVqODs748SJE8jOzqa2F3BycoKjoyNMTExgYGCAunXrYvv27XS/CNjUz2xtbdGsWTNcuHABeXl58PPzU2T43qJFC9SuXRt169bF+vXrqY93dnZGjx49pHE+JycnSQ2MJHhUOo5SEkqFQXgKpKxatQq7du3ChAkT0Lx5cyQkJKBPnz5U51BKQhYtHnQTD7VajebNm1Nz8MzMzFBQUCBVOouKiqgJ9jExMViyZIk0nllUVITt27ejS5cuRMe3bt2aqUIH8LHgEJVlr127hlGjRsHAwIC4EMHTKJdVHTUxMVG2Ri1ZsoTan3H48OE4fPgwrK2tZcEWTaKalJQk6+DVr1+/TM5QRWCVwx88eDDatGmDS5cuQRAELFiwQDLYJsWaNWuYOdAFBQWyz05U6yNBYGAgoqOj8eDBA9nIKy1WrVqFgIAAybqhX79+1JQFGxsbfPvttxg5cqTi+4KVZ8RL7TAqKgo///wzAG0wStth4aG6a2NjI3WcaMDDR08sRPF41lmTAUC7jwDKfOwArSBTSEgIcnJyAMg71PrEhMQC79y5cxEeHi6JFyUlJVHHSqydSB64d+8eHBwc0LJlSxlvmKZb1Lp1axw7dgwJCQkQBIFa4Ep3skfk2tIUfkWwii3qPiOiSmy/fv2oriE2NhaOjo5o0aIFAO190aFDB2k8muRzrVWrluxZpRW9AapZgsfKlVKr1cjJycGTJ0+oA5ykpCQ0b94cjx49AgBpPl0ETSeQh/pZ7969FSV1uhgyZAjatWsHKysrWFlZoUePHtQP3L/+9a9yycoLFy6sUMJc6ThKSSglyIv+MRUldyQ+NIC2Cq37u7Zq1UomS7xmzRqJW1cSrCRk0XT42LFjioxDgf+MpLRv3x729vYSh/Ls2bPo1q0b1bnWr1+PDRs2yKqe3t7exHxEXr6XrBYc77//PqytrVFcXIy1a9ciKyuLeGSJp/dbdnY2du3aVapiSWo+rNFokJ6eLvnFpaenU28mItdr3bp1ikxuAW3Bori4WAoKCgsLZfYsJGCVwwe0I8AsvF9eHGjdkUyav4mZmRmsra3RoEED6iKSiOLiYmzYsEFK7pSiQYMGWLVqlTTCzWJer1QFGWBXO9y6dSsiIyOlaYUtW7bg119/xbJly4ivgZV7DCgf/+Xho1eyGMXyrLMmA4Dy7mrJWK0kaOyo/vzzT1ls1rx5c2J+v8jvZO1E8gCNGGFFKCgogIGBgSKBq5KTF0uXLsWkSZOwaNEiqmtgFVvUfUbUajVmzZol+buSgofncIcOHRAREQFBEJCcnIydO3dKzzEpqkWCx4srFRUVBS8vL6jVakRGRiImJgY7duwgqiz5+PggKCioTBNC2gBDV/0M0FaTSDhOPE0WAW1HNCYmBtHR0fj3v/+NuLg4dO/eHbt27aI6T3n4888/y3xdrKDk5OQoGkcRwWoCystjhgSiiW9ZYCUh8zAd1h1R7dy5syS206lTJ+pR07y8PNln3rdvXyqV2by8PAQEBMj4c/Pnz6eqIPOw4Fi9ejViY2PRvHlzGBoaIjs7WxYQx8bGolOnTkTnKigokBHsaavhbdu2RUJCApYuXYrjx48Td0MBYNasWbC1tZW6PVFRUdSeVDwS1QEDBsDZ2RnTpk0DoE1QBw4cSHUOVgViHqIgPDjQoqCJWGgMDw8nNrgV17SKkjt9a6NarcaDBw+orrksbNmyBQcPHkSXLl0U87VYVZABdrXDs2fPIjQ0VEoOp02bhnHjxlEleLzUd5XwZXn46PFSbASA6OhodOvWTRKvyMrKwr1794iKpawJGs9Y7d1338WOHTukMebjx48T2RIApfmdSjuRPMDDI/fgwYPYunWrYoGrkkhKSqLWwADYxRZ5iI6JnyeLXoKbmxs2btyI1NRUTJw4EcOGDaP22VMJpHJBVRg//PADfvzxR0RGRkoLGaD9UMeOHUvcYbCzs0NgYCDmzJkjBe3W1tY4ffr0a7lu3rh+/ToArX/eH3/8IbWDQ0JC0Lp1a7i6ulKfMy0tDdHR0bh69Spu3bqFVq1aMZNhRYwbN65MXoQ+rgTpAzh27Fi9CZqDg0O5CVqnTp1Kjc+J0PWYuXz5MtH1VITyPgsaTJgwocwk/vDhw/jmm2+QmJhYaiSTZQFWismTJ8PZ2VkKQK9fv44tW7YQd/A8PDxQXFyMSZMmAfhP4YKGF6nRaHDkyBEpUOrbty/s7e0VB6FlgeRvKirSPX/+XHE1fMyYMYiIiMDo0aNx4sQJFBQUYNq0aVQKrQ8fPpRGqfv06YP27dsTH8sLhYWFCAoKkvw/hwwZgrlz5yqywlDa7fnoo4/KFAWh4fWFhYXhzJkzePDgAezs7CQONO1o3bVr16Qq/5AhQ4iDMNZ1T8TmzZuRm5sLW1tbWdeLpsMxefJkqvuwLIwfPx6bN28upYKshFeuFBMnTsTRo0elwLW4uBiTJ0/GsWPHKu0aAC0vvV27dpg8ebLEl42LiyPmy/IQLsvJyZF5/T58+JDa69fW1hahoaEyTridnR3RHjhv3jwEBQXJYj0Rlb2fpaSkYP369TJVaQ8PD+apo8oG6xQIAAwbNgyHDx9W/LvrcvA0Gg2Kiorg6ekp8eRJMW3aNAQFBcHPzw/Z2dlo2LAhfvnlF+Jn1cHBAYGBgVLx/MWLF1i0aJFeYR1d8LBJ4IFq0cEj5UoFBweX6Y+hi5J8NyXBxdWrV/H48WNMnToV6enpyMrKouIMnT59GoMGDaL2TBMDAH9/f9lmJNoT0MLGxga1a9fGkCFDMGHCBHh7eyuaiaYFjwoKwG4CyrNiWRkoz/Sch+kwazdUF56enhIHD9AG9jRiSKKdiYiePXtSy9IbGBjAwcGB2iaCBiS1Mx6KdOLnaGhoiBcvXsDU1BQZGRlU52jfvj3at28v2T3QIjY2Vupo6o5V0iSqhoaGcHJyYhrBZe328BAF4cWB7tOnj6IRS17mx6dOnQIAKeEWj6cJoK2srODv71+Kr0WTJALKVJABfmqHlpaWmD17trQ3RUREoFevXlICTtJt4WGTwMqX5SFcxsPrV/zdRYhjfSQQC8xKu/XleSKKoJmeMDc3r3DvIok5AXZ+JytYp0AAoHHjxkyJrW6Hu0aNGnj33XcV3aNliS3SFDD+/vtv2WSUmZmZ1IkjBQ+bBB6WVNUiwROhb8Tq0KFDFT5sRkZGSEtLkxaea9euwcTEhOoadu7ciaioKKSmpmLq1KkoLCyEh4cHsdIhwO6Z9vLlS+Tn50tCGKI9AS169+6NW7du4fr166hRowYMDQ3RrVs3RXwlJXj+/Dl8fHxkN7inpyexMMjblqCxoqK/S3FxMbWBti54jatqNBpkZGTg3LlzMhVNWo6SKBwD6N+wy8LGjRuxaNEi1KlTB9OmTcPvv/+OtWvXUnNvKwLJc8JDka5Vq1Z48eIFRo8eDXt7e5iYmFBtzix2DyLWrFmDZcuWwdfXF7t378ahQ4eox1LKU+ilEb5h9bzkIQoiCnvpJnU0Yl9A+eP2JGP2vNY9fQE0yQhyREQEAMh8K2mTRKUqyAA/tUOxUKHr63rv3j3cu3ePeJyOh00CK1+Wh3AZD69fIyMj3L59W+I23b59W9YlJkF8fDyaNGmCWrVq4dKlS7h//z7s7e310hbKErYSoZQfWh70xZwAH34nK548eYLt27fjxx9/hI2NDT788ENpVJ4UixcvhqenJwYPHqyIS9i0aVNkZGRIdJUePXqgfv36VNcAQFa8mj17Nl6+fEklVKjRaJCXlyet+bm5ueUWz8sDD5sEHpZU1SrB0wd9FXUXFxfMmTMHycnJcHR0REJCAr766iuq9zh58iSOHz8uzWQ3btxYUmkiBatnmmhPIAphnDlzhshYvCRE0Y9nz57h4sWLWLZsGbKzs3Hjxg3qc5UFfbLIn332GXr37i0RVo8fP47PPvsM+/fv5/L+VQk8RwPLglqtxosXL6DRaBS9F6+ugK7nTocOHaivA4CUyIgb4unTp6kTs+joaLi5ueHixYswNzfH1q1bMXfuXK4JHgl4KNJ9/vnnAIBPPvkE3bp1Q3Z2NhV3jcXuQURBQQH69u0LQRDQqFEjODs7w87Ojpg3BkAW4OXn5+PixYvU0tKA8m4PwEcUhFXsC4Dss8/Pz8epU6eoFW9fN9zd3fWO1LFyIgHlKsgAP7VDfYIeP/30EwYNGlThz/CwSWDly/IQLuPh9evq6opFixahXbt2EAQBjx8/prJlAYBly5YhODgYSUlJWL16Nfr3748VK1bo1UwgLYCQ+k5WBJIpDh78TlbwmAK5cOECLly4gISEBEV+fufOncOqVavQtWtXCIIADw8PeHt744MPPqC6DmdnZ6xbtw6GhoYYO3YsMjMzMW/ePGIvOxsbG3zyySfSdM+3335LPSHEwyaBhyXVf1WCp6+i3r17dxw8eBC3bt0CoK301KtXj+o9ateuXaobQdvxYvVMK2lPsGzZMkVy2Xfv3sXVq1cRHR2N33//HZ07d6aSm71x4wY6d+4MIyMjHDt2DDExMZgzZ460yepLnlNTU2XjWgsXLpTGht4WkI6D8CDg69tMLCws4OTkBBsbG1l3hWQB5tkNZfXcmTt3Ljp27CiNtLi4uOgNrsrDjRs3MHz4cJibm3PvTJNs7jzUJ3XvMbFzRzPGwWL3IEL8eVNTU8TGxsLc3ByZmZlU5yg5mjlv3rwyfdwqAku3B2ATBeEl9gWUFj0YMGDAax0nVgJS+v6jR49kUxi0PBSlKsi6YFE7JMHWrVv1rkE8bBJsbW3RuXNniW8/bdo0Kr6sUh89XfDw+rW0tMSpU6fw22+/AdB2a0gEw3QhqtNGRUXBwcEBc+bM4VqgmzVrFjMvnmRPqVevnqygV6tWLeq4kxWsUyAAcP78eURGRkqTY7TYunUrvvvuO4nOlJCQgAULFlAnePHx8TAxMcHZs2fRp08fuLu7Y9KkScQJ3rx589CoUSOpODV58mRquzQeNgk8LKn+qxI8EhQWFkojD7RtWUDblbp58yZUKhU0Gg0CAwOpBQtWrlyJ3bt3M3mmsdgTiPDx8YGVlRXmz58PS0tLaj7iunXrEBERgYcPH2Lfvn0YM2YMPD09iYm7LVq0wJMnTyQfqsTERLRq1YrqGt40KnMcRJ+Ur/heuuPCla3WBfDx3Bk8eDDTdTdo0ACrV6/GpUuXMHfuXBQVFRFzQESUxTnUfU3f+JdGo0FYWBix0mZ5EO8xXdSoUQPdu3eHt7c32rRpU+HxLHYPIqytrZGZmYm5c+fCwcEBGo0GS5Ysof5ddGFkZFSu0m55KKvb4+7uTnx8o0aNqG0/RKSkpODu3buSaq0IIyMjKgGgspCTk4O0tDSmc/AGSfAaFhaGzZs3S89qUFAQXFxciCriPHm/LGqHJKgo2RXFIwRBYLZJALTy6UqnH5T66OlCn9cvSTcT0BaD+vbtK627umNxJMjPz0daWhouXLggdbt4agZWlv4gD34nK1inQABt0YRFo6FWrVoyrYpWrVopShbFuP3GjRsYPHgw6tSpQ72fjRs3jkkLgsUmgaclVbVQ0SSFra1thRyhki3i+/fvU7eIU1NTsWLFCly/fh0qlQq9e/fG559/Ls3MVwXo+xx4QVQR3LNnD2rWrAlHR0eq9545cyZu3boleX/cunULPXv2lExBaaqO1QVXr15FYmKirPhAyiOpKhCrzyWhTyWQh1mviIyMDERERKBHjx7o0aOL4lS9AAAgAElEQVQHkpOTcf36dSrFrrJUMmnVUEXlSxYEBQWhVq1amDBhAgRBQGhoKDIzM9G8eXOEhobqHS8TBEGyezA2NkZmZib++usvdO7cWdH1FBYWIj8/n9q818/PT2Ywe/fuXZiamlKPbrFg27ZtKCwsZBIF0Sf2RQJdDp5Go0FycjI++eQTLFiwgOm8PEFyr48ZMwZ79uyRODCpqamYNWuWxM2rCLzUQIHXr3ZY0Wfx9OnTCo8lUWh1dXWFv78/EzezuLgYCxcu5KaCXR5o1INFv2AlkwtHjhyBv78/+vbti+3btyMpKQlubm5UaocVgYeyNUm84+joWO73VCoVlZKlUpQ1aUSTbAOAl5cXHj9+jA8++EDWDCCNT7Zv344aNWpI+1hISAiKioowe/ZsCIJAfD1Lly5Fbm4u/vjjD5w8eRIGBgawt7dHeHg40fHx8fHw8PBASkoKIiMjce/ePURGRmLx4sVEx7NCX0GSplj4X9XB06fyxKNF3LBhQ+zduxd5eXnQaDSK/C9etwAE6ShaQkIC3N3dFd/oRUVFuH37Ns6fPy8Ru2m6JKNHj5ZxFlgrj28amZmZMgKxmZkZ1fFubm64e/cuOnfurEhdShAEBAcH48mTJ3BxcUFycjKeP3/OLPJBi7/++qvUvUyy+PIw6xXxzjvvYMaMGQC0QgVpaWnEyd2TJ0+QkJCAnJwcqcoKaKWmaQVfWrZsieTkZDRr1ozqOF18//33CAkJkb6eNm0axo8fj5CQEOzbt0/v8QkJCWjTpk0psQIS8DQN1l0r1Wo1HBwcMHz4cKJjf/nlF1nVuyRIq+A8REEGDBjAXIjR5eCp1Wo0b968ynHwSGvDugIHNGIHvHi/gH61w9cJMYHLyMiAsbGxFPwWFBQQ8/OnT58OANQ+WLoQedglFSx5o7LUg+3t7WXrVNOmTYnWu8oEibKoUsN2nmCdAgG0hb0WLVogLi5O0TXs2LEDQOlC7ZdffkmV/Pv5+eHy5cvo2LEj6tati5SUFBlPVR+3cu3atViwYAE2b94MAHjvvffw2WefUSV4LIUY0gSORKG1WiV4+mSI9Y1CsbSIywtwRNAEOlVFAGLNmjVMN/rSpUvh5eUFKysrtG/fHvHx8dK4JQl42SVUBVy6dAmurq547733AGhlif39/dG/f3/ic/z66684efIkteKkCF9fX6Snp+PevXtwcXGBkZERNmzYQDUayQNKRShE36PGjRuXORpJAxblyFu3biEkJARpaWkyZSxjY2O4ublRXUdubi7GjBmDXr16ycZVabqReXl5UqIFaJMuUTGVpBCgVKwA4GcaXFxczDTWGRoail69epWpVEYzhsxDFIS1EFNcXIw9e/a89k4LK0gS1hYtWuCLL76QAvFjx47JuHAVgQfvl+eYZ0UgSWrmzZsn68YUFRVh/vz5RNLpokCD0uKYCAsLCyxatEgRD5sUlaUeXF6njtdEC8nYbXkgjTnF93nThVdnZ+dyp0BWr15NlISyjqHz4vnXrl1b1pQxNzeXder1cSuzs7MxaNAgbNmyBcB/uJ40qAyRLBKF1mqV4CmVIRar7sOGDcNXX30laxEPGzaM6BwVqcUpNd98nQIQJGC90UV/QhGtW7emGrdi7SBWJWzduhWHDh2SBAYeP34MV1dXqgRPn+qoPly7dg1hYWFS4ly/fn2ZqenrBi8Rik2bNpVaoMt6rSKwKEeK8/khISHUJqwlMWbMGGqFrpJYtmwZJkyYIAWB9+7dw9q1a5Gbm4sRI0boPZ5FrIDVk0qEWq3GTz/9pDjB8/HxAcBeDefRiWQtxFRWp0UfyhqFNjExQY8ePTB+/HiJz1YR1q5dCx8fH4wZMwYqlQr9+vWjkvlmBS97l7JsLnRfI1FpLSgokI2Z1a1bl3r9ZVVorSo8bB7qwbo81/z8fFy7dg0WFhbcEryKpgdEUbTg4GC8ePEC9vb2UqJGKxZTFQqvrFMgInhQSAoKCmSTXrSjovqgrxijVqtRWFgorX0pKSnUXebKEMkiKSpVqwRPqQxxSSEM3eq5SqUiMt4lDXBIvIN4CEBUBNJEgfVGT09Ph6+vL/766y8cOnQIsbGx+PXXX4lvdNYOYlVCUVGRTD2ubdu21CI+rVq1wowZMxTPuNeqVUsWsNH4J/EAqwgFz9FIHsqRtra2OHbsGFPllUeX+qOPPkLv3r2l8V8LCwuJ8zt//ny9IyksYgU8TYOHDBmCPXv2wNbWVtbNJDkHrwkK3UJdQUEB0tLS0KRJE6oElrUQA1ROp0UfGjZsiLt378rsSExMTHDmzBnExsZi5cqVes/RoEEDSSn2TYDXmKe+xIr076L7LNJ42PEqjlXGOGBlqQeX3DOeP39OVTzYt28fJkyYABMTE7i6uiImJgYrV66U+LOLFi0q91hx7DYqKkqWGK1atQp2dnZUhao3XXgF2KdAAK2adVxcHDp16qRocuHs2bPw9fVFSkqK4nuCBPqKZlOmTIGTkxMyMzOxfft2hIWFEdvslIfXIZJFUvyrVgmeUhniyvRFIfEO2rx5MyIiIjBu3DiYmppKBHtSiJWkhIQEuLq6lgo8Sb39WG/0lStXYtCgQTh8+DAAoE2bNnB1dSVO8Hi0yqsK3nnnHVnHJzQ0lPpeKigoYJpx79ChAyIiIiAIApKTk7Fz506J11YZEDu6SkUoeI5G8lCO3LhxI3PllYdgDKANpMUR1pLQN5Iyffp0jBgxAn379kW3bt2QlJQEExMTovflqRIrdvf9/f2pN3heExQlE7mrV6/ip59+IjpWBGshBqganZbY2Fh8/fXX0u9gb2+PGTNm4MCBA8Sy4Tt37sSkSZMkvnFmZiaOHz+O2bNnv7br1gXr2BdP6wtHR0c4ODhISWF4eDixTyQvhVZWjioJSGIEnrY7Iho1aoSEhATinw8JCcEnn3yCn3/+GRkZGdiwYQN8fHyo9qacnBxZXJiRkUHte/ymC68A+xQIoO2onjp1SlFyB2jX/e3bt6Nr166v3Re4Itja2qJZs2a4cOEC8vLy4OfnJ/nZkaI8kazKRrVI8HjLEJcHHr4oJNWtd955BxMmTMCTJ08AAM2aNaMSYdBt+bu6uipu+bPe6CkpKXBwcMCRI0cAaM00aR5cHq3yqoJ169bBxcUFq1evhkqlwnvvvSdJE5OCdcbdzc0NGzduRGpqKiZOnIhhw4YxkfaV4vfff0fXrl2pgz6eo5GrV6+WlCMNDQ2RnZ0tjfmRgkflVVcwJj8/H99//z21T5g+6FtzSooVNGnShHgsh2egxnIuHty5stC3b19s2rSJ6hjWQgxQNYQX0tLSZAW1GjVqIDMzEzVr1iS2zDl16pQsialfvz5OnjxZaQkeK3haX4i2R2KS5e3trVc5WARrcUyEbmGsoKAA9+/fR+fOnakSvD/++ANfffUVkpKSZFMoYnxRWUUI3YRbEATExMRQFU3FROTatWsYPXo0evbsSW2NMH369FLG8/PmzaM6x5suvALsUyCAlm+bl5dHrZ4somHDhoq9cWlA8jfu3bs3evfujYKCAiofVRGVIZL1XzOiycMkmgQ8HCVI2qpRUVHw8vKCWq1GZGQkYmJisGPHDiLRA4Bvy5/lRi/piZKVlUX1Gb6OVvmbQosWLXD06FHk5uYCgCJ11by8PAQFBSEpKQmbN2/G48ePER8fT6zyamxsTJ3EvA6wBn3jx49HdnY24uPjZff1P//5T+JrUKlUePHiBX755RdMnToVGo2GetafR+W15Ijm+PHjiQ1ZSaFvzSl5XyUkJFDdVyIyMjJkKrH169enOn79+vWl/IPKek0f4uLiJCsOKysrKv6c7qinRqNBTEyMNM5LCtZCDKCV/9ft3pX32uvE+++/LxP3OnHiBHr37o3c3FziBK+s9Z4n3eB1g1diJaJPnz5o37499fSGqBJbXFxcZheONKkqWTh49OgR9uzZQ3Utn376KUaMGIHx48cr7tbExsZKRTbd54um46+bcKvVarRt25bK87J27drYuXMnTp06hUOHDkEQBOqu7Mcff4xevXrhxo0b0tcdO3akOodu4XXSpEkYOnToGym8skyBANqkxtHREb169ZKtD5999hnR+zs6OmLbtm0YPny4YosaEuhTZnZ2dsa6detgaGiIsWPHIjMzE/PmzaPal3ULN+np6UhKSqJK8EgsTUgUWqtFgifOQ+/atQtz5syRfa+s15SisgjvX3zxBYKDg6Xr7tatGxITE4mP59XyZ73Rhw8fDi8vL+Tm5iIkJASHDx+GnZ0d8fvzaJVXJVy6dAnR0dEAtKRbGoEVQMtJbNiwodTpaNy4MZYvX04ciBcVFeHIkSMyL6hJkyYxmZMqAWvQd/r0afj5+SErKwuNGjVCYmIiOnXqRNVd37lzJ6KiopCamoqpU6eiqKgIHh4eVAH066i8qlQqpKSkMJ2DFqz3FfAfD9EuXboA0KrE0nqI3rx5s9RrYuBEikOHDiEwMFCqqO/cuRPz58/HlClTiI7XLTzUqFEDLVu2JNpIAX5WDQDw6tUr2dfFxcWKKsks8PLywnfffYfvv/8egHbNmjx5MgwNDYmUHwHtuOq+ffswY8YMCIKA/fv3o0WLFq/zsl8LevXqhW3btikurgHA7du3sWzZMmg0GkRFRSEmJgZHjx6VLIQqAi+V2JJo164d7t27R3WMRqPB/PnzFb2fiDVr1mDZsmXw9fXF7t27cejQIeqiJ2shxdfXF4cPH4aLiwsaNmyIxMRERRoO7dq1kxJdXRV2UlSVwmtFICnM+/j4wNzcHCYmJooS/5SUFOzfvx9hYWHSpJYSgUIWbiWg9cEzMTHB2bNn0adPH7i7u2PSpElUCR6LSjfwH6EtjUZT7tQaiUJrtUjwRJw+fbpUMlfWa28SSryDABBXTAF+gSfrjT5nzhxEREQgKysLUVFRcHR0pLZ6EDuIbzt2796NsLAwSbBg48aNsLW1pVo0Hjx4IHm8ANouIE3yvm7dOjx9+lTiz4SHhyM2NrZSVe0A9qAvMDAQISEhmDVrFsLCwnDlyhUpCCXFyZMncfz4cUkJsHHjxtTcCR4jr7ocPEEQ8ODBA/Tr14/qHPqgb81hva8ANg/RM2fO4MyZM3j69CmWLl0qvZ6Tk0NsUyPi4MGDCAsLk8aLMjIy4ODgQJTgaTQaBAQEEG2cZYFHEL57927s3r0bOTk5Mun+V69eKQo+WWBoaAhHR8cKjZj1wdPTE66urtiyZQtUKhUsLS3h7+/P8SorBzyKIL6+vti1axdcXFwAaAu3pNxhXiqxusUHsUNNW+Dr0aMHkVhcRSgoKEDfvn0hCAIaNWoEZ2dn2NnZEXMSAe36EBAQgJ9//hmAtmC5cOFC4hHB1q1by6YDWrRoQT1eGRMTgyVLlkiUoKKiImzfvl0qdFWE8gpBIipb2bQikDQ3nj17JvMPpcXXX3+Nc+fOMY8ysnIrxbHjGzduYPDgwahTpw41NYhFpVuEhYUFnJycmIS2qkWCd+XKFVy+fBnPnz+X8SVycnK4jFWK4HEuEqK9kZER0tLSpIfq2rVrxKIHQNktf1oRCoDPja5EBr484QkRtAIUVQHh4eH47rvvpM1HJNzTJHglk/z8/Hyqe/L69es4ffq09DccOXKklHBWJsoK+mh4TjVq1ECDBg2krl///v2p+Yy1a9cuJdhD26HnUXnV5eCp1WrMmjULFhYWTOcsCX0jKaz3FcDmIdq6dWsMGTIEMTExUucN0H6+tP5kRkZGUnIHaPnMpJ0BAwMDuLq64sSJE1TvKYI0CP/pp58waNCgMr9nb2+PESNGwNvbG15eXtLrxsbG1PLrrEhPT8fXX39dimtFs/6am5vj4MGDkiKfrjoqUPFnUZXAowhSWFhYatyMVDSMVzKgW3yoUaMGWrRoQb2f3rlzByEhIWjdurVslI6G4y92eExNTREbGwtzc3NkZmZSXYeHhweMjY0lNdeQkBB4eHjoNbTnGV+sX78eGzZskNapq1evwtvbG999953eY8sqBIl4E9YVrOjYsSOeP3+uOEFr0qQJF54aK7eybdu2mD17Nv744w8sX7681DQFCXiodPMQ2qoWCZ6hoSGMjIygUqlkG0ijRo2oKkL6oC9QArSdmUWLFqFOnTqYNm0afv/9d6xdu1bqXJF4B7m4uGDOnDlITk6Go6MjEhISiJUvi4uLsXfvXi4tf9YbXWmAoBv0VifoVhaVEJF79+6NwMBAFBQU4Nq1a9i3b1+5M/NlwczMDAUFBVLgXVRUxKwKqwT6gj59EKulLVu2xNdff42mTZtK5yJF48aNcfPmTahUKmg0GgQGBqJ9+/ZU52AZeZ06dSq++eYbPHr0CK6urlTvWxKsIyms9xVQvofoq1evIAhChfzGTp06oVOnThg6dKgkvKMU/fv3h6enp2QAGxoaioEDB0rcOn18jpYtWyI5OZlK1IoWW7duLTepMTExgYmJiYx7kZ6ejvj4ePTo0eO1XVNZWLx4Mdq2bYu+ffsq5lqJKO8Zr+izqErgUQSpWbMmcnNzpeTi0aNHsgSpIojJQEFBAWJiYtChQwcAWr5p9+7d9QZ9e/fuxcyZM7F06VLmiRgPDw+m4wHA2toamZmZmDt3LhwcHKDRaKg9MB8+fCjrGPXs2RMjR47UexzP+CIvL09WhOrbty/xSHdVEFIiBcm9np2djdGjR8PS0lJ2X5MmzN27d5f4nbrH0ya6rNxKsZDTsWNH1K1bFykpKVi+fLn0fRLBGR4q3TzuD5XAs8X1hhEXFyctfEqQn5+PiIiIUgkJKUkU0HasIiIicPHiRYSHh8PNzQ1z585FeHg41bVkZ2fj1q1bALRS5PXq1SM+dsKECVxMMl+9eiXd6M2bN0dKSgoePHhAvCFPmTIFbdu2hYWFhSxA4OH99bZBJH+LCX5wcDAEQaDiERQWFmL37t2IjIyEIAgYOnQo5s6dSzxis2rVKty5cwfW1tYAtL4z3bp1k0jhvAxi9UG08VDqH3f16lV07doV6enpWLNmDbKzs7F8+XKq0cbU1FSsWLEC169fh0qlQu/eveHv70/kiSXCy8ur1MhrkyZNiEZeR44cicOHD2PGjBllGjHTCL6MHj0aJ06cwM8//4xdu3Zh0aJF8PHxkfkzVQTW+wqomA9AanWgrzhGgooSUxI+xyeffILbt2+jV69esqSE59SAra2tXmNtXQ7HqFGjqDkcPGBjY4OTJ0++1vcg+SyqAjZt2oR69eohIiICq1evxr59+9CxY0cq0a+oqChJfXLgwIG4dOkS/P39qdatTz/9FNOnT5e6/Hfu3MGBAwckr9jyMG7cOISGhkr/5QGlBbqSKCwsRH5+PnXRc/r06di6dasUbGdmZsLZ2Rn79+9nuh4aTJ48Gc7OzujTpw8A7ZTMli1biDp4Ilj3w8rAjh079BYKy7uvSOO9skbBVSoVDh48SHS8iPj4eBw+fBj//Oc/8eGHHyIxMRFnzpyhHr8tDyTPkCAIkkq3sbExMjIy8OzZM3Tu3BkAmR82AHYxueqU4AHA5cuXcf/+fdkHQmJUDmjlYAsLC9G9e3dZQkJ6PPCfBM/f3x9dunSBtbU19SYWFxeHZs2aSQvn33//jadPnxJ3GL788kvUqVNHkWGwLsozMSY9D2uAkJCQAHd3d6SkpCAyMhL37t1DZGTkW2l0/vfffyMgIEASWenXrx8WLlzIvDnSQJ/CGA/1PxJs2LBBsvE4e/YsMjMzMWfOHOKixOPHj0tZCZT1Ggny8vKg0WgUqZqOGDFCNvJaVFSEUaNGEfEBt27div3796OgoEBK7pSau4rry7///W+0bNkStra2XAO5ygKv4hgLWIMUEpD8bcS/aXh4OB48eCBxOJSOjyqBs7Mz3NzcYG5u/tre4225T8sqgsybN4+6s5mUlIRLly5BEAQMGDAALVu2pDpeLOboe60kJk+eDDMzM9y6davMsWeaAkZSUhKWL1+O+/fvQ6VSoXPnzvD395dMsvUd27x5c5larS5IFBPFcf4///wTv/zyi9SRu3jxInr37i355upDRkYGvL29JRstsftPM9Vy584dLF26VMbB++KLLyQ/ORKw7oc8oG8K5H/4D3gUpUjWPR5ictViRFPE559/jpiYGDx69AjDhg3Djz/+SMXhePLkCRNJFNBKza5evRqXLl3C3LlzUVRURC0L7ebmJnnHAdpZ+RUrVhBX5FkMg3Wha2KsO7NOep727dsjJSVFcYCwZs0aLFiwQKpOvvfee/jss8/eygSvbt26ErmeFvr4aaQd5spK4PSB1cbDxcWl1CJX1msVISwsDP/6178kXtOLFy/w008/UfFFWUZenZ2d4ezsjI8//ljm56QErCMpPj4+cHJykvkSBgQEUNsTsNokiLhx4waGDx8Oc3NzRcrFLDYJjRs3LrVn8PJRpQEPDgcrsrKyMGbMGMUjV9UJt2/fxoIFC7BgwQLptbCwMGLDd+A/it66gj+0Kt916tRBeHi41NWOiIggKrgGBgYiOjoaDx48kPFclcDLywuTJk2SFLFDQkLg5eVF5J3p4+ODoKCgMqkzpIqJYlG0Xbt2smd70qRJpL8CAK0Xart27eDm5gZBEHD06FF4eXlJ8RMJunfvjnPnziE+Ph6Alk9MyqsUwdPWSil4mL7zSJhZlMYrS7uBh5o+SV+Nh5hctUrwoqKiEBoaivHjx2PdunVYtGiRRMAlQfPmzZGTk6PYqBEANm/ejIiICIwbNw6mpqaKHOyLi4tli0TNmjWpkkRe5sO658nPz8eJEyeIiNDig5aTk8MUIGRnZ2PQoEFSRc7AwIB68awqYAmixQ0tMTFRCn4B4IcffiBq11+9elVvoYPkZ3hBqY1HRkYGMjIykJ+fj8ePH0uLZHZ2NjUHb+/evbLgzMzMDHv37qVK8Nq3bw97e/tSI69iwkYy8qovuVu4cCECAgIq/BlWue+bN2/KuG/169entifgYZPAozjGapOwadOmUoWCsl5jAcnmzoPDwQobGxvY2Ni81vd4WwaI1q1bh23btqFNmzYAtMqv+/fvp0rweKh8+/r6wtXVFStXroRKpUKHDh3g5+en9zgzMzNYW1ujQYMG0jhhWQgODpb4q+UhIyND9jN2dnbEY3QitzQyMpLo58sC6URVQEAAFi5cWO73ExMTsX37dunrJUuWUKt8A9rGgLhein58NOBla8UCHqbvrAkzq9L426TdQJIk8hCTq1YJXs2aNVGjRg2oVCoUFhbC3Nwcz54903uc2CExMTGBnZ0dBg4cqMioEdCarusu2M2aNaPuCtaoUUMaZQC0CxFN9ZZ1tLIs1KpVCxMmTICdnZ3eDUn3QWMJENRqNQoLC6WHISUlpdKDHF5gCaLFDW3atGkICQmROiMLFiyQycqXh40bN5bJ89KFn59fpXFhlNp4nDhxAgcOHMDz589l96CJiQmxSXpFoE0mioqK0LlzZyQkJADQ8tAKCwtlBrys+PPPP/X+jCj3nZGRAYBe7rus31uXg0wCFpsEETyKY0ptEp48eYKEhATk5OTIFAuzs7PLXU+VgoS3JZpAN2/eHIaGhsjOzq50ryyeY6nlCRPQcNjeJPz9/bFs2TLs2bMHMTEx2LFjBzHXi6fKd9u2bRESEiJZutAWoytK7gBtgURfgmdgYIA//vhDSnbj4+OJ4xN9zxJLjFIS58+frzDB02g0SE9Pl9aK9PR06uQqLCwMmzdvloRAgoKC4OLiQlUofB1+qrTgYfrOmjCzKo1XlrZDZRWleIjJVasEz8jICHl5ebC0tISbmxsaNmxIJNUtdkhat26tyKhSFzyqdE5OTnBwcJAWjaioKKrNnXW0UoTuYix65mRnZ+s9jteDNmXKFDg5OSEzMxPbt29HWFjYWxMQlASPIDotLU029la/fn2kpaXpPe7BgwewtLQsc2ES7xMacRFWlGXjQSIeMX36dEyfPh2BgYHMRrsNGzbEuXPn8OGHHwIAvv/+e5m8PgkqY+SVpNLHYqAMaP24fHx8MGfOHAiCgN27d6Nbt25U18likyDinXfewYwZM6SvmzVrRq1mqdQm4datWwgJCUFaWppMvtzY2JjYYoZ0RIhEFU6lUqFVq1Z49uyZVKSk8UJlwYEDBzB9+vRyR8NpCp767s23RQq+Y8eOcHd3x8yZM6HRaLB3717iNZO3yndiYiISExNlewqvz5EkeBVHy9977z0A2kkfUpsb3dikJJTQSCqCvt9l1qxZsLW1lbr9UVFRMrVEEuzduxchISGSb3FqaipmzZpFleAp3Q95gofpO4+EmVVpHOAzKloRSNT09YHkOVu6dClycnLg4uIiicmtXr2a6n2qlchKWloa6tWrh+LiYuzbtw/Z2dlwdHREkyZNiI5nEW8Qq3QRERGyqkVOTg7u3LlD3R1JSEjAlStXAEARGVuE7mglreF7p06dpMVYrVajZcuWWLFiBfFmsnjxYnh7e8vGEtesWUM1C33z5k1cuHBBIra/rabnHh4eqFu3riyIzs3NpUoSlixZAhMTE6nCGhISgpcvX+r1/aluiI+PR5MmTVCrVi1cunQJ9+/fh729PZVP2OPHj7Fw4UJpA1Kr1QgICJCq0hWhMkdeScjYkydPho+PD1xcXKR1ZtSoUTh16hTRe+Tk5GD9+vW4ePEiVCoVhgwZAnd3dyrvze3bt6NGjRoym4SioiLMnj1br02CiFu3bsHf3x9JSUkoLi6WClQ0HLjNmzfLRshCQ0NRv359KVjRx8cLCQnB+PHjid9PF/r+TjSFr0OHDuHzzz+HmZmZlDSScpRY8d1332Hy5MnljlbRiI6x3ptvGiUTl8uXL6NVq1ZS4YEm2dWn8q1vpBDQ3t/Hjh1D27ZtpWkWJUqD5YFU9CY9PR137twBoDVkfhN2O/pA8rvo8nX79OlDbZUjCkPpe60ilEULYqUKvQmI3cySCTb18HYAACAASURBVDNpF4+H0jigjTvbtWuHyZMnS6OicXFxekdFeWkdkODYsWNElmmsqFYJnojc3FwAoFbGK2tBIF3wrl+/juvXr0ubowhjY2N88MEHVJXojIwMGBsbSxXbgoIC5OTkMC2idnZ2OH78uOLjlaAstSEa1TRdMnlFr70N4BFE5+TkYMeOHZLvWp8+fbBo0aK3ZiPgZdY7duxYBAcH49mzZ5g+fTr69++P1NRUBAYGUl1PcXGxjBxPOmY0duxYvSOvDg4OXEZeSZ4X8dnWfd4qW36eh03CyJEjsXDhQvTo0UM2it20aVPi62C1Sbhx4wY6d+4MIyMjHDt2DDExMZgzZw6RQiBPDBs2DAcPHqT63Xnj1atX1F3YkqgK9yYL9AWFNMmuPpA868OHD0doaOhrW/MrU9WUlyhTeSD5XYqKimR7AI01DKD9+3fo0AH29vYAtIH7/fv3sWPHDqbrrKy/A29hkocPH8riE5qEmZfS+NixY0spL5f1WkmIz3p5WgckXFcRPCx/0tPT4evri7/++guHDh1CbGwsfv31Vzg4OBCfo1qNaD5+/BifffYZ4uLiZARkfR04HuIN77//Pnr16gUzMzNMnTqV6feYN2+erCJXVFSE+fPn4+jRo0THKx2tLAuPHj2SGTnTEIiLi4tRXFwsBc6FhYWSOhwJ9u/fX+qBKOu1twHGxsZMI33FxcXYuHFjpfNweEJ39K0kVCoVcYIniu1ERUXBwcEBc+bMob4noqOj0a1bN6mjk5WVhXv37hF13Spz5LVx48Z6f4bFQBnQCpFMmjRJ1mk/fvw4Fa+Rh7BT7dq1qceCSoJFvAHQimlERETg4cOH2LdvH8aMGQNPT0+qDklRURGOHz9eyq6H5vlv2LDhG03uAGDIkCEYNmwYxo8fr5gTxHpvvmk4OTmhuLgYwcHBUhD/ukBSa2/YsOFrLehVdA3Tp0/HgQMHYGVlJUsKlHTaeYgy6YO+zzMmJgZLliyRWRxs375duiYSrF27Fj4+PhgzZgxUKhX69etH5IMKaNeJwsJCaDQavHr1ShZ38ub9lgeewiQZGRlo2bKllNQVFBQQmYKLYFEa14XSUVFWrQNdREdHw83NDRcvXoS5uTm2bt2KuXPnUsUpK1euxKBBg3D48GEAQJs2beDq6vrfm+C5u7vD0dFRJiHs7u6uNzHiJd6gVqsREhLCnOAVFBTIRprq1q1LJZurO+cujlbSSp4D7ATiAQMGwNnZGdOmTQOgFUAYOHCg3uNiYmJw584dZGZmylQGc3JyqIm/bxq8xvnUajUePHjA89IqHV9//TWX8+Tn5yMtLQ0XLlzAsmXLANATn0sqIxobGxOrJfJSqQX+Y3KbkJAAV1fXUia3X331ld5zzJ8/H7NmzcLz58/h5uYmGSiT4tSpUzIuUP369XHy5EkuwjU0GDRoEKKiorjwidLT02VrJumYvijS9dNPP8HBwQGOjo44e/Ys1Xt7eXmhuLgY165dg4ODA06ePEk9Wt6vXz9s2rQJo0aNkiVENJYPrDh79ixOnjyJ9evXIzc3F+PGjYOtrS1R0UEE671ZFaBWq3HkyJHXnuCR8G179OiBTz/9FCNGjJDdF7w4eBs3biz3e+LfjcckEIsoE6lQy969eyv8ufXr12PDhg3S3nv16lV4e3sTmZTv3bsXM2fOREJCArZu3ar358tCYGAgvvzyS6hUKvTo0UN63djYmFpcSil4CpOwNiZ42fWwciuVah2UBRbLn5SUFDg4OEiWaTVr1qQWGaxWCd7ff/8tky0eO3ZshV0DETzFG/r06YOzZ89ixIgRTOfRrXzQklV5BaCsBOJPP/0UQUFB0qYxZMgQIlJ5SkoK7t69i7y8PJkioZGRUZXxciMFTwVLKysrrFu3rpSBfWUGfTwgJjVPnjyBi4tLqaRGH6ZPn44RI0agb9++6NatG5KSkqhGXcVr0F1wDQwMqFU0ecDX11cyuXV1dYWRkRE2bNhAZXI7ePBgtGnTRjJQXrBgARVnt6x7k/aziI2NlZQfdbv0NKIJR44cQVBQEIyMjKSqOm1n4OrVq3Bzc0N6ejoMDAxQWFgIMzMz4nMUFRXh9u3bOH/+vCQEQvtZxMTE4MSJExg9ejTmzZuHKVOm6OVWlYS4Hugml5XFwRMhTqNMnToVcXFx2LdvH4YNG4Z79+4Rn4P13qwq4LWvsyImJgaAvFhGM/2gj+da0ah1o0aNANCNTJcHFlEmsYBdHsQ1R1/nKC8vT1ZY7du3b4UJri5OnDiBmTNnwsfHR/EopZOTE5ycnLBu3Tp4eXmV+3M0XTCl4CFMwtqY4GHXA2hHwDt37ixxK6dNm0Y1KtquXTt4enrKtA5oYywelj8lx4WzsrKoC9nVKsHr0qULbt68KVVLf/nlF3Tt2lXvcWJFaPr06WVWh2ike0NDQ7Fv3z7Url0bderUURSkiPKwYicyPDycSm1r6dKlpWany3qNBGJyV/L/SZCYmCgtYiJIRGs++OADfPDBB7h8+TKV0WZVBM9xPlGY4OLFi7JzVGbQxwO6SY2Liwt1UmNvby+rpjdp0oTIZFcXRkZGuH37NiwsLABo1f5oZ/15gJfJbfPmzYm93kqiVatW2LdvH2bMmAFBELB//360aNGC6hxr1qzBsmXL4Ovri927d+PQoUPUHGgenQF/f3/s378fzs7OCA0NRXBwMJKTk4mPX7p0Kby8vGBlZYX27dsjPj6eOiEROytqtRp5eXkwMTFBeno61TlYR015QVS/DA0NxY0bNxRV/FnuzaoCHvu6PpAEb6xTEJ6enmXyXGnAQwxp2LBh+Oqrr2SiTMOGDZNGFSuKucQCdkBAAGrWrAl7e3sIgoBjx45RTfjUqVMH165dk6wjrl+/Thzr1apVC/Pnz8fTp0/LHN+jibUqSu4AbUfqdfPxeJi+A2yNCR5K4yLatGkjFQFolfE3bNiAHTt2SAW+Pn36UKua8rD8GT58OLy8vJCbm4uQkBAcPnwYdnZ2VOeoFgmenZ2d5H03depUaUNOTExEx44d9R6vWxEqucjSSvfyCFImTJiA5s2bS6IU3t7eeP/994mPT0xMLPXaH3/8QX0dLVq0wBdffCEjENOIDbi4uJRamMp6rSTEkcWKkrvKNOZmAc9xvqoS9LFCaVJT3t9crVZLPE/S+8LV1RWLFi2SKnOPHj2i3sx4gMXkVlz3ygNpwuzp6QlXV1ds2bIFKpUKlpaWxLLnIgoKCtC3b18IgoBGjRrB2dkZdnZ2VIWppk2bMoseiMcVFRVBpVJh4sSJGD9+PLG9ilhc0j0X7X1hamqKly9fYuDAgZgzZw7q168Pc3NzqnMAbPxnHvD19cXp06fRvn172NraYtOmTdSiKzdv3sSWLVskWf/XkRhVBnjs6zk5Oahbty4MDAwQFxeHhw8fYvjw4ZKYmr6RQhGXLl2ShCgGDBiA/v37E18DD54rjyRRFCEpmQiJI4skMdf58+dlscSsWbMwfvx44iksDw8PLF26VPr8CwsLiROzwMBAREdH48GDB9Io4OtCZegg8jB9Z21M8LDrAdi5lcbGxsw2FTwsf+bMmYOIiAhkZWUhKipKRj8jRbVI8Fj/GDyDcF5BSp8+ffSakpbE0aNHceTIESQkJMjMSrOzsxX5++kSiAFt256EQMwqWlPVjLmrGpTyi6oKlCY1PO8LS0tLnDp1Cr/99hsALbeFxmaBF1hMbnl5JZmbm+PgwYPSs6mkkykm2KampoiNjYW5uTkyMzOpzsFD9EBca83NzREZGYmmTZvi5cuXxMfn5+cjIiICSUlJsuoxjUT2zp07oVar4ezsjBMnTiA7O1tGHSABDwNlVpiZmeHo0aP4xz/+ofgcnp6eWLZsGbp27ao4GagK4DGWOG3aNHzzzTfIzc3FrFmz0KFDB1y6dEkaCyQZh9u9ezfCwsIwatQoANo10dbWltgMmgfPlUeSyCPmevXqFZ48eSIr6NOIk3Tv3h3nzp2TxWqGhoZEx5qZmcHa2hoNGjSgjtNoQcvdUgIeHnasjQkPDw+sX78etra2ktK4h4cH1TUAbNxKgM8e8Ndff8Hf3x+xsbGyWI1m2urVq1cYM2YM05pfLRI80pto4cKFCAgIeK3XwiNIyc7Oxq5du0qpsOlTcuvfvz9atmwJb29v2c1obGxM1MksiQYNGigiELOK1lQ1Y+6qAlZ+UVWB0qSG931hamr6xo2WWUxuS657LAladnY24uPjZevNP//5T+Ljra2tkZmZiblz58LBwQEajQZLliyhugbWjRnQBtEvX77E0qVLsXz5cmRnZ1MFCUuXLkVhYSG6d++uyFi8uLgYCxcuRFBQEAwMDBQr/vIwUGbFggULmM9Rr149jBw5ksPVvFnwCNgEQUDdunVx6tQpTJo0CYsXL6ZOlMLDw/Hdd99JSppi14Q0wePBc+UlhsRqk+Ds7IxJkyaha9euEAQB9+/fl8bqSCDSVnS9CUmpLOKkSEXJ3dsyZQTwMX0HKm5M6Iu/WZXGRbBwKwH2PQDQJqvW1ta4f/8+Pv/8c3z77bfUtIchQ4agXbt2sLKygpWVFXr06EHdLKoWCR4p/vzzzwq/z0MogEeQ4uHhgbZt2yIhIQFLly7F8ePHiRLEpk2bomnTpjh58iTxe+nD1atXkZiYKKtkfPzxxxUewypaw7OjWp3Ayi+qKigrqXFzc9N7HM/7gsezzgPGxsbM1hdJSUlYvnw57t+/D5VKhc6dO8Pf3594nPr06dPw8/NDVlYWGjVqhMTERHTq1ImK9yHyCwYNGoTr168jPz9fJuf+008/YdCgQRWeg3VjBgAbGxsA2ur8+fPnS30/ODhYNt1QEk+ePMGZM2eo3lMXarUaL168gEajYe5YsfCfWcBTDt/GxgbffvstRo4cKVN9pOG1VwXwCNjy8/NRUFCAK1euSErbSu4R3eeK1jKBZdRUvB8EQWBOEnnYJHz44Yfo2bOnZLjeo0cPKlEQFipLZU4ZVcaIJqswCQnKi795KY2LYOFWAux7AKBVAJ04cSIOHjwIS0tLWFhYwN7enso388qVK4iJiUF0dDT+/e9/Iy4uDt27d8euXbuIz/FfleDpa3XzEArgEaQ8efIE27dvx48//ggbGxt8+OGHktVARfD394erq2u55pW0Iitubm64e/cuOnfuTGwCrQsxuXvbRwqrElj4RVUFPJIaVvB41nmAhwedl5cXJk2aJBGwQ0JC4OXlRSw8ExgYiJCQEMyaNQthYWG4cuUKvv/+e/pf5v9haGhYatRp69atehM81o2ZBIcOHaowwWvevDlycnKYvMYsLCzg5OQEGxsb2T1F0/Fg5T+zgKccfoMGDbBq1SpptF9MBiq7kMIKHgGbtbW1NGXTs2dPpKamUnsCdu3aFe7u7pg4cSIAbcGCREhORNOmTZGTk4MnT55QTRUBfO4HESw2Cbp49913MWDAAEmgIy8vT++awYPKUplTRqLh9usGizAJCcqLv3knyyzcSoDPHiDuf3Xr1sWff/6Jd999FxkZGVTnUKvVEnevWbNmeP78+X+3TQIreAgF8AhSxBvT0NAQL168gKmpKdHNIY658TKv/PXXX3Hy5EniufSS+Pnnn7FixYq3fqSwqoCVX/SmwbtSxwIezzoP8PCgy8jIkAUqdnZ2VMbcNWrUQIMGDaQgqX///vj888+JjycBSRW6rI35iy++qNTrMDExgZ2dHQYOHCgbz6HhX4jJy7fffiu9RiNlD7AZKLOCpxz+li1bcPDgQXTp0uWt5uDxCNicnJzg6OgIExMTGBgYoG7dujJhCxKsWrUKAQEBUoGsX79+VBYcUVFR8PLyglqtRmRkJGJiYrBjxw4EBgbqPbas+yE9PR1JSUkyHzcSsNgkiDh37hx8fHyQmpoKgLx4wIPKwmOaRJ+QlXhtixYtYn4vfeBBLVIK3skyC7cS4LMH9O7dGy9evICDgwPGjx+PmjVr4qOPPiI+HtBOP9SuXRtDhgzBhAkT4O3t/b8RTRbwEArQDVLEB4U2SGnVqhVevHiB0aNHw97eHiYmJkQP2tChQwHwM6+kMbQtC5s2baoWI4VVBWXxi9zd3d/0ZRGjKonn8HjWeYCHB52BgQH++OMPtGnTBgAQHx9P1XEX16qWLVvi66+/RtOmTYnEkGhAIhTAujHzuI7WrVszV69ZpewB5fxnHuClzgpok0UlSnhVDTwCNj8/Pxm/tlatWli+fDlRciWibt26cHFxoXpfXXzxxRcIDg6WuPHdunUrc1SxIkyZMgVBQUEQBAG2traoV68eBg0aRCX6xGKTIMLf3x/btm2jVvMkpbK8bs0GkSudmJgoGWIDwA8//EDFf+YBHtQipeBNyWHhVgJ89gDxWbC1tcX777+PnJwc2fWQoHfv3rh16xauX7+OGjVqwNDQEN26daMS3fmvSvD0JSw8hAJ4BCli9fyTTz5Bt27dkJ2djYEDB0rf12d8mZ6ejq+//rqUChDpDX7o0CEA2kRzxowZ+OCDD2SVDH0cPF1Uh5HCqgJ9/KKqjqoknsPjWecBHh50zs7O+Pjjj/Hee+9BEAQ8ePCAyuZg6dKlyMnJgYuLC9asWYPs7GysXr2a9ldhRnR0NLp16yZthFlZWbh582alChXQjNyVB0EQEBwcjCdPnsDFxQXJycl4/vw5evbsSXwOHqO7SsFLnRXQ8rb8/f1hbW0tG0ekNQ5+0+ARsD179gyHDh3Cxx9/DI1Gg+XLl1MHkj4+PnBycpLdFwEBAfD09CQ+R0k+J62QxN9//w0TExOEh4dj9OjRcHFxwdixY6nuGx42CaamplTPFC30aTawQlxrpk2bhpCQEElkZsGCBWV6671O8KAW6QNrw4AUrDZhPPYAQPuZPnv2DMXFxTAwMMCjR4+o1r01a9YA0K4bFy9exLJly5CdnU1l/l4tEjxRlrU8iKMxX331VYU/p08ogBTx8fESWdXAwIBpMxNN23Whz/hy8eLFaNu2Lfr27auIO3f37l3p/1u0aIG4uDjqcwBv/0hhVYOYeOvCxMQE3bt3R6tWrSr/gihRlcRzeIiC8AAPD7pBgwbh1KlTkiKdhYUFldiAuLGbmJhg//79pb4fEBBANQZWFkhGNDdt2iRb14yNjUu9xoryruPMmTMYOXJkmc8YQFfU8vX1RXp6Ou7duwcXFxcYGRlhw4YNVJ0vHqO7SsFTlToiIgIAZKIFKpWKSn2yqoA1YPPz88OsWbPw7rvvIjIyEg0aNKBOpm/evCkld4D2vqAJ+IyMjJCWliZ1Aa5duwYTExOqaxBFqa5du4ZRo0bBwMCAOs7gsRcMHz4chw8fLlU84MXbrQx7AgBIS0uTKYjWr18faWlplfLeIlioRbzib1bwtAm7fPlyKRV7msTv4MGD2Lp1K8zMzKT7iHbdu3v3Lq5evYro6Gj8/vvv6Ny5M3Wxs1okeLt37wagXXhiYmKkypqoOkPKfRArrwkJCXB1dUVKSgri4uKoqkSHDh1CYGCgJDe7c+dOzJ8/H1OmTKH7pfRcZ0XIysqikgsuCR5StQC7ZPn/IMelS5dw48YN6SH/+eefYWFhgS1btsDJyalC8Yj/oXwoFQXhAR4edDk5OTAzM8O//vUvxMXF4erVqzIDZVacP3+eOMErb7qApGsvcmhEGBgYUI+r6kN5VemHDx9i5MiRsuKWUly7dg1hYWHSqHz9+vVlgQIJeIzuvm6QdDgiIyMr4UpeP3gEbDVr1sSXX36Jjz/+GBYWFvDy8qK+jrLuAd0pHX1wcXHBnDlzkJycDEdHRyQkJFAH3u+//z6sra1RXFyMtWvXIisr643wK8UR5nXr1kkTIG+jgE+7du3g6ekp7d8hISGV3uFmESbhFX+zgpdN2Oeff46YmBg8evQIw4YNw48//kidWB04cABnz56Fubk51XG68PHxgZWVFebPnw9LS0tl+7lQjeDs7Cz89ttv0te3b98WPv30U+Lj169fL3z66afCRx99JAiCIGRkZAh2dnZU1/Dhhx8KaWlp0tfp6enChx9+SHUOfbC1ta3w+8uWLROePXum+PzR0dFcfuZ/4Iv58+cLT58+lb7+888/hXnz5gnPnz8XRo0a9QavrPph7Nixr/X8iYmJgiAIwsOHD8v8R4Nx48YJubm5wvPnz4UBAwYIM2fOFFasWMHtWkk+i99++00YMmSIMGjQIEEQBOHOnTvCypUrqd7HwcFBtn7/9ttvgr29PdGx48ePF+zs7Mr9xwvHjh3T+zMTJ04UBOE/n1txcbFgY2ND9T6LFy8W9u7dK2g0GqG4uFjYs2ePsHDhQvoLfo3Qtw+JePjwofDNN98I33zzjfDo0aPXfFWvB0OHDlW8p/bp00ewsrKS/vXo0UN4//33pa9p4O7uLnh7ewvPnj0T/vrrL8Hb21twc3OjOkdWVpZw8eJF4eLFi8LLly+pjhUEQdBoNMLvv/8uZGdnC4KgjXHu3btHdY779+8LkyZNErp37y506tRJ+leVQHp/syI7O1vw9fUVxo0bJ4wbN07YuHGj9NlWJgoKCoQHDx4IDx48EAoKCqiPZ42/KwsLFiyo8Ps2NjZCYWGhMHr0aEEQBOHZs2fC7Nmzqd5jypQpiq9PEAShqKhI2LZtG9M5BEEQqkUHT8TDhw9hYWEhfd29e3eq8UIelVcjIyM0aNBA+vqdd96pdPn1rKwsjBkzBpaWlrLRBdKKDC8xjMmTJ6Nfv36wsrKCpaUld8GE/zYkJyfLLCb+8Y9/4OnTp2jYsKGiUdz/oXy87vEcHx8fBAUFlanaSdsZEDgYKFcEks/C19cXu3btkgQgunXrRuRtqAtXV1csWrRIql4/evQIX375JdGxPHljFUGfzQIAdOjQARERERAEAcnJydi5c6ekcEyKskZ3RfuCtwlhYWHYvHmzVMUPCgqCi4tLpRq280Djxo0VV+N52gt4eHhg/fr1sLW1hUqlwpAhQ4imYvLy8qT/r1GjhmwMl8RaQBcqlQrvvfce0tPTkZWVBQCysVESVBWbmopQWZwxY2Nj6rWSN1iFSQD2+LuyoG/yoGbNmqhRowZUKhUKCwthbm6OZ8+eUb3H4sWL4enpicGDB8ticNJuplqtxuXLl5m5mNUqwatTpw7Cw8MxduxYANr5f5qFq1atWrJgRqPRUF9D//79Ze320NBQDBw4EI8ePQLAh1xeUeIFaMU4REEOJeAlhuHh4YGff/4ZAQEBuH//Prp27QorKytJwet/oEODBg0QGBiI8ePHA9DeW++88w6Ki4srjS/wP/DBzJkzAWi5SbReWCXBy0CZBYWFhaXWNtqCjqWlJU6dOoXffvsNgNa42NTUVPp+ReJSpLwxVuhbewGtf+jGjRuRmpqKSZMmYejQodQJqL7R3criiLJi7969CAkJkYQ9UlNTMWvWrLcuwWMJ2HTtBYqKimQCbLSy58bGxhVSKIKDg8ssQFhaWla4R9CMNV69ehVubm5M9kc8bGpiY2OxevVqxMbGSrxA2t8lMTERiYmJstHXyuKMiUhPT4evry/++usvHDp0CLGxsfj111/h4OBQKe8PsAuTAOzxd2VBX6xkZGSEvLw8WFpaws3NDQ0bNqS28Lhw4QIuXLiAhIQEaS+mtcoZPHgw9uzZA1tbW9n6T/OZVqsEz9fXF66urli5ciVUKhU6dOgAPz8/4uN5VF5PnToFAKUWuxMnTnAjl1dkfFlcXIyzZ88iKChI8fl5iWF0794d3bt3x9ixY3HhwgXs3LkTd+7c+V+CpxB+fn5Yv369ZGDdp08f+Pn5oaioiOo+/x/0gySQZ4Gfnx9CQkIwefJkZhERHgbKFYHks6hZsyZyc3OlzfPRo0eKrsHU1LTcTbAicaklS5ZUuHHTVKIrAkkhxdjYWPIpY0V5nMzK4ohWBNIOh65qY0kFx7cFPAK2yvAaK6/DLO7pAQEBqFmzJuzt7SEIAo4dO4bCwkKq9/D392e2P+JhU8PaBdy8eTOOHTuGtm3bKv6b8sDKlSsxaNAgHD58GIDWcNzV1bVSEjyewiSs8XdVwZYtW6BWq7FixQrs27cP2dnZ1PvH+fPnERkZSZ0Y6kKcXvH391fMMa1WCV7btm0REhKCnJwcAKBWwORReeVBKt+3bx8mTJgAExMTuLq6Iibm/9i7+7ga7/8P4K/TjUhNljC+ZS2sUcQMLffTECmVaEkzcx9JGtVyk8zN+bIZa7HwHXMTicjNNkOyJWx7bPl9JTdR2twl6UZ355zfH33PtY5S13Wu65zrdHo/H489HrraOb2lzrk+n8/7JhOffvopBg0aBKDhwZeGhoZ4+vRpnYYFYli1ahV+/fVXvPLKK3B2dsbGjRv1YiaSWDp06PDSmYpcioiJqsrKShQVFancfGp6lEdVVRV27NiBJ0+e1Nu5kUvXRiEGKOfk5ODWrVsYOXIkSktLmV15oOYUpjGzZ8/G9OnT8fDhQyxduhRpaWmCpxQ2tNAcPny4oF+Lr/T0dOTm5qo0wODyb9oYTW9AKL9G7aZjL457YHPCYWNjgy+//BKTJk0CABw8eBDW1tYajVsThLhh08asscZ+Ln788UeVTZLp06fDy8sLs2fP5vR1+I4/EmJMDd9TwFOnTuH06dNqdUoX0oMHD+Dn54eEhAQANZtl2srAEKoxCcD//ltX1M5Oq6+5GJvuwdbW1pxP518kxEGLXi3wFDznDwmx85qTk4NOnTrBxMQEaWlpuHbtGiZNmqSSatSYpKQkTJs2DRcvXsSTJ0/w2WefISYmhlngNaZ3796YN28exo0bp7Kjpe2dqYsXL6Jly5bo378/BgwYAEdHR6oVU0N6enqjXZzY/D/kHyEhIYiOjoaxsTE8PDxQWFiIWbNmYfr06QA0/7sSHR2N5ORklJeXC9K5saioCJmZmSqpRmxrhg4fPoytW7eiqqoKI0eOxIMHDxAdHc2MTGAzKWgzYQAAIABJREFUcmHo0KF44403kJaWBoVCgTlz5qBLly5q/V1epqENK2XdtKaxTdG8evUqevToobHXO21s3tUe9xAWFqbWuIeVK1ciJiaGScl0cXFBdHS0pkLWGCFu2LQxa6yxn4vy8nLcvXuX+d3Mzc1Vqc9jQ4jxR0KMqeF7CmhlZaUTi5AXf66ePXumlQ0cQPih7w2lvOoKvrWVbLoHd+nSBYGBgbxmSAMNb7yyoVcLPCHmD/HdeV24cCESExORl5eH5cuXw8XFBUuWLEFcXBzr51C+cGVkZMDd3R19+/bl9AuvPMLdt28fc02M1IPjx4/j0aNH+OWXX3Dw4EFERETg9ddf5/S9IMI1vSH/yMnJgbm5OU6dOoUBAwYgPDwcvr6+zAJP06qqqrBixQq0b9+e94w5vqlG3377LQ4dOsS8zr3xxhtqzWGytrYWdByMOqqrq3Ho0KE6M4yEGv3C5ob8999/R0pKSpNvKiVE0zFLS0umnX1TJsQNG59ZY0IJCQmBr68vHBwcAAD//e9/OY9UEnr8kbpjavieAjo5OWHRokUYPXq0Wo0whOLq6oply5ahtLQUSUlJ2Lt3L7y9vbUaQ2PYLGp0JeUV0GxtJZvNtaqqKl4zpIGag55t27a9dOOVDb1a4PF9QxJi59XAwADGxsZITU2Fn58fZsyYwRSdstWyZUts27YNx48fx549e6BQKDjlye/evZtr2BqhUCjw999/46+//kJ+fj4KCwvxr3/9S+ywmhyhmt6Qfyg3cC5fvoyhQ4eiVatWWm1MsnbtWiQlJXGaMfcyfFONjI2N69SucH39u3LlCjZu3Mi8qSpTxLk0XmgMm02uZcuWQSaTISMjA35+fkhJSUG/fv0afZy3t3eDb9zKTUJ7e/tGn0sb3fe0scMvRNMxQPPpqtogxA1b7Vljyhq8l6Xcq6uhnwu5XA4bGxucOHECf/zxB4CaRQ6bE3qgJlX7o48+wmuvvYY2bdqgV69e+PHHHwWJ+0Vsfr75ngJmZmYCUL1fEmNBMmPGDBw9ehTPnj1DamoqAgICON8zahqbRY2upLzqwkIzMjKyzvdBmbrK1q5du3hvvOrVAo/vG5IQO68VFRV4/Pgxzp49i4ULFwLg/ma8Zs0a7N27F4sXL4aVlRVyc3M5tT1PTU2t97q2X7icnZ1hZ2eHgQMHYv78+XBycmryu9piEKrpDfmHnZ0dPv74Y9y+fRuhoaEoLy/X6tdX1uAVFhbyrsHjm2pkYWGBnJwc5rUzOTmZ8yIlMjISCxcuhIODg8YWyg01l1LKzMzEsWPH4O7ujlmzZuGDDz5gtYAWcszC66+/jg8//JB3eg7Ab3A8X0I0HdNGuqo2CHEC3KtXL/zwww8qXTS5vB/KZDLMnTu3wQZqDZ0wGxgYICwsDMeOHcOIESPYB/4/x44dw0cffYSYmBjejaEawzUFWZ1TQF3ZCM/KysL48eNVOsumpaVh8ODBIkbFna6kvOrCQjMgIKDO70h91xoixMarXi3w+L4hCbHzGhgYiNGjR8PZ2RmOjo7Iy8uDubk568fLZDJs375dpRbQxsYGs2bNYv0c8fHxzJ8rKytx7do19OjRQ+sLvDNnzry0CxwhYlq3bh0uXLiAN998E6ampnjw4AFCQ0O19vWVNXjPnz/nXYPHN9UoIiICoaGhyMnJwYgRI9CyZUvOadSvvPIKxowZw+kxL+LTXEpJ+fc3NDTE8+fPYW5ujoKCgkYfJ+SYhcrKSt6nPX/88QcWLlwIuVyO1NRUZGZm4sCBA0w6nTZey+trOsZ1XldTT1cVuv757t27uHz5MoCan1E7OzvWsSgbqMnl8pduojR2wtylSxfcu3dPrUwaExMTzJ49G/n5+fXO5xKqU61Q2Gysp6Wl4ZdffgEADBo0CC4uLpoOq4558+ZhxowZmDx5MuRyOT7//HOcPXu2yS3wdCXlVdMLzYbWCdXV1aiqqoJcLkd5eTnzM1hcXMy51lWIjVe9WuDVfkOaOHEi3nvvPVY7s8oddCF2XidNmsR0DAOATp06MW3t2TA0NMT169dZ///1eXFn6ubNm9i+fTuv5+RC+YbX0OKOmoIQMSkUCubN/Pnz53jllVe02na+T58+6NOnD6ytrXnX/fFNNbK1tcXBgwdx584dKBQK2Nract4pHDduHPbt24cxY8aovLlzqTHi21wKqGm4UFRUhMGDB2PGjBlo27YtpwHVxcXF+Oabb+rU8O3atYv1cwhx2iPE4Hg+ZDIZduzYwbvpmLaGRWuKkPXPQgx97927N4KCgtRuoFZaWorx48fj7bffVnl/ZrM4i4uLwy+//ILr169j2LBhrGNWhxApyI2dAsbHx+PIkSMYO3YsgJp/a09PT63VYSslJCQgLCwM6enpePz4MWxsbHDw4EGtxtAYNr/HupLyynehWV8GnJmZGbp37w5zc/MGa/ji4uKwZcsWSCQSODk5qTxemVLMlhAbrxKFttr16LDw8PAGP8/mDVvInb4NGzagtLS0zoBDPkPSx48fj6NHj6r9eC48PDwafVP08/OjpiBENPb29nVuAIyMjNCrVy+sWrUKb7zxhtZiuXnzJjIyMgAAAwcO5LSrL9TXf5G5uTmnhVFKSgqioqKYVFd1ZvZ4enriyJEj2LRpE7p06QJPT09MmDCBU1qLTCaDoaEh5HI5jh49ipKSEnh6erLe0Z0/fz7s7Oxw/PhxBAcH49ChQ+jZsyez0GLj+fPn2Lp1K/Ly8rBhwwbcunULOTk5GDlyJOvn8Pb2xqFDh5jvCQCVP2uDj48PpwZltSk3TbOzs3Hz5k1B0lXFoHydaKz++cKFC40+1/jx47F9+/Y6Q9+5vC8HBATUGwfbDYiX/S5x6UJbu1EMXy9LQU5NTeW9MGjstcPd3R379u1jXhtKSkrg5+eHY8eO8fq66jh9+jTCwsJgbm6O7777DjY2NlqPoSl0wGSD7+/IpEmTcPXqVXTv3h1AzWvYm2++iQcPHiAmJobVSJ7o6GgsW7aMW+D1kMlkvDZe9eoEr7q6GgkJCSo3S76+vo22NxZix1XInT7lsPRz584x17gMSa+9AyGXy5GZmcm7xTMX1BSE6LqQkBCYmJjAx8cHCoUChw8fRmFhIaytrbF8+XKt1WcIsasP8Es1mjlzJv7++28mlby4uBiWlpZo0aIFNm7cqLIT+TIbN27Erl270LNnT7Vr8Pg2lwL+qVEwMDCAp6cn5xju3r2LzZs346effsK4cePw/vvvY+rUqZyeY8WKFbCysmJqZzt27IjQ0FBOCzyhBsfzMWzYMGzfvr3ORiObU9naacd801XFJHT9M9+h73xfl/iME1FuUDe0uGO7ia2NFGQ2Zxe1N37Eqtlas2YNLl68iEOHDuHmzZv48MMPsXjxYri5uWktBqEakxQXFyMnJ0cl++Gdd94RNNbG8P0dsbGxQVRUFNNp9v/+7/+wc+dOSKVSLFq0iNUCb9GiRUwqdXZ2Nm7cuAFXV1eVTa6XqW/DFQBTu8vloEevFnjR0dHIz89n3tiTk5ORlZXV6NwdIU7fhFzU8B2WXrsGz8jICDY2NlrNj6emIETXff/990hKSmI+njp1Kry8vJCUlMQppZqvHTt2ICkpqc6uPpcFHt9Uo/feew8DBgxgFiCnT5/GxYsX4erqitWrV7NKF2rfvj0cHR1Zx1wfvs2lgLrdPJXYdvNUvgEbGxvj6dOnaNOmDZ48ecIphuvXrzM1ngDQunVrzg2/tDE4vjFbtmwBAEilUuY9jO2prFBjKfQJn6HveXl5sLa2funNH9ubPj5jRITcxBYyBVndRkQODg4IDw/HxIkTAdR0ylXe1GtTaWkpDhw4ABMTE7zxxht46623sGjRIq0u8IRoTHLixAmsW7cOz549Q/v27ZGbmwt7e3uNN+SpD58Nz6ysLJWfg549eyI7Oxt2dnasU4enTp2K7777DqWlpZg+fTq6d++OtLQ0VmN2Zs6cybze/v333zAzM4NEIsGzZ8/QqVMnTusDvVrgXbp0CSdOnGB2IMaMGcPc9DREiBcuoRc16enpuHXrFqZMmYKCggI8e/YMtra2DT5G2cY4ODiYVWtwQpqr58+fMzdNQM0NVFlZGQDunar44rurn5ycjP379zNvzgEBAfDz82O9wLt06RIiIyOZj0eOHInNmzfj008/Zd1ddODAgZBKpXBzc1M5aeKy22hra6sSB9fmUgD/bp6vv/46nj59Cnd3d0yaNAnm5ubo2bMnp+d4cZe2oqKCc02RNgbHN4bPe5rQzUn0AZ+h7zExMdi6dStmzpxZ53NcsnvUHSMCCLuJXVVVVee1gWsjHr6ngFFRUfjqq6+YOtN3332X98gadbxY52ptbY29e/dqNQYhGpPExcUhKSkJ06dPx5EjR/Dzzz/j+++/FyhC9vhueLZq1QopKSkYN24cgJryg5YtWwJg391VoVDA1NQUx48fh6+vL+bPn896s1K5gFu1ahX69evHNC87deoUrly5wuo5lPRqgWdhYYHKykrmH6O6uprVjBddSynctm0bUlNT8ejRI0yZMgVVVVWIiIhQGVxeH2Ub49WrV4uya0JIU7Fw4UL4+PiopGGsXLkSpaWlGD16tNbi4LOrXxufVCO5XI7ffvsNffv2BVDT+VB54sR2kaSsIzp58iRzje2N54IFCxp84+SSfcC3m+e///1vADUzthwdHVFcXMy5m12/fv0QFxeHyspKZGRkYOfOnWq1pRd7cPzLur6xSdEU8rRHX/AZ+q4cjcA3u0fdMSKAsJvYQqQg8z0FNDU1RVhYGKevKaSTJ09izJgx9Y7JAbRbpypEB0wjIyNYWloymRMuLi7M66k28d3wXLNmDcLCwhAeHg6JRIKuXbti3bp1KCsrwyeffMLqOSoqKlBZWYmff/4ZU6ZMAcD+vVTp8uXLiIqKYj4ePXo05yHterHAU/6CdOvWDZMmTWKOtk+dOsUqbUjXUgpTUlJw6NAhJnWgY8eOrIYkNrU2xoSIZdSoUXj77bfx559/AqjpTmdpaQmgJj1OW2rv6kskErz77rusd/WV+KYaLV++HCEhIczGWHl5OdPo6cMPP2T1HHxuPNnUNLDFt5tndnY2/vWvf8HU1BT9+vVDaWkpcnJy0K1bN9YxhISEID4+Hq1bt4ZUKsWIESPqPXlpiDYGxzemT58+KqmZSmxSNHVt01QXqNsjoD4FBQUqKZadOnVi9Th1x4gITYgUZHVPAXVlYaVMt+U7JkcIQnTAbNGiBRQKBbp06YLdu3ejc+fOTFaMtvHZ8LSzs0NSUhJzz1378WxTPd3c3ODi4oIuXbqgb9++ePToEecNDIVCgStXrjAn7L/++ivnVH+9WODV/gXp0aMH7ty5A6CmAxbXIn1d0LJlyzovVGyOhrXZxpiQpq5du3ZqnawIic+uvlJUVBRiY2PVTjXq168ffvzxR5UBzMo0Qy5NGdTtBsqn8cOLLC0tERUVxSySuXbzXLp0KRISEpiPjY2NsWTJEpV6zcYYGxtjzpw5mDNnDrfga9HG4PjG1N74rKiowLFjx1BYWMj5saSGuj0CaktPT8fSpUtRUFAAAwMDVFVVwcLCgvXCn+8YEaEIkYKs7ingjRs3MGbMGNEXVsoxFz4+PpzmNWuCEE3FgoODUVJSgsWLF2PFihUoLi7G8uXLBYiOGyFqK/l2FA0KCkJAQADMzc1hYGAAU1NTbN68mVMMy5cvx6JFi5jNyYqKCmzYsIHTc9CYBB20YMECTJ06FatXr8ahQ4cQFxeHW7dusf7HFbKNMSH6KCsrC8uXL0dWVhYqKyuZ61za+vOhizVK6p4KAHW7gZ4/f55zN9AnT55g1apVzM2qi4sLIiMjWaXZK40YMQKbNm1Su5unh4cHkpOTG73WkPXr19e5Zm5uDicnJ9b/nhMnTtS5WVjAP+MbCHejR49W6RFQXV2NsWPHcqpT8vLywoYNGxASEoLDhw8jMTER9+7da7ShiBLfMSK6JDU1FV9//TXy8vIwePBg5hTw3XffZfX4kpKSOn/v+q5pinKMA9dRMJqi6aHvsbGxWqlxLCsrw1dffcW8jyg3PBuay1zbyzqKshmzIFQzJKXKysp6N17Z0osTPF28WeIjKioKS5YswY0bN9C7d2/069ePVfqCkG2MCdFnK1aswMKFC7FmzRrEx8djz549KoODNU3IGqWYmBgEBQXBwsICAFBYWIjY2FiVhiUN4XsqAAjTDXT58uXo2rUrli5dCoVCgQMHDmDZsmVMN0c2+HbzNDIyUmm+k5uby7npTkFBAa5cucJ0Jf3pp5/g6OjIpIaxOdkTYnA8X7Vr8JTjdoqLi7X29fWNuj0CXmRra4vq6mpIJBJMnDgRXl5erBd4fMeICEWIFGS+p4ABAQF1Flb1XdMUXSqp0cbQ9x9//FErCzy+tZV8OooK1QxJSSaToUWLFpDJZMjNzQXQDMck6FtBt5WVFXbs2IHnz59DLpezvvHUt+8DIZpSWVkJZ2dnKBQKtG/fHiEhIfD29uZcK6UuIWuUrly5wizuAKBt27a4fPky61ikUin+85//1DkV4IpvN9Dc3FyVNJYFCxbAw8OD03Pw7eYZFBQEPz8/5iQyNTW1Tpe7xjx8+BBJSUlo06YNAGDevHmYP38+9u7dC19fX1YLPL6ppkKoXYNnaGiILl26sN40IP/g2yOgNmW9XocOHXDmzBl07twZRUVFrB8/cODAOuUeytPlsLAwtX5v1SFECvKTJ0/QoUMHphFRZWXlS0cm1FZdXY2qqirI5XKUl5czr8HFxcUvbSykCbpUUsO3MQkbmk4WFKq2kk9HUWUzpCNHjuCVV15R6zmU9uzZg3//+9+wsLBgfme5LhL1YoGnbwXdfn5+2Ldvn8purfJaQ/Tt+0CIpih3stu0aYOsrCx06NCBdX2REISsUapdJ6BUXV3N6Tn4nAoAwnQDlcvlKCgoYJrdFBQUcC4q59PNE6hp+LJ7924mVWnmzJmca4MePHjALO6Ams6ejx49gpmZGesUGyEGx/NFdXTCELJHwNSpU1FUVITg4GCEhoaiuLgYERERrB/v7++PZ8+ewdvbG0DNjaihoSFatWqFqKgoxMXFcYpHXXy73QLArFmzVNLmqqurMXv2bBw4cKDBx8XFxTFZAU5OTsx1MzMzTJs2jVdMXFhYWMDNzQ2WlpY6UVKj6aHvbEcMqEuo2kq+HUUVCgUmT56MEydO8Ipjx44dSElJQefOndV+Dr1Y4OnbG9GLs6dkMhmrXTp9+z4Qoilubm4oLCzEzJkz4efnB7lcjgULFogdllocHR0RExODGTNmQKFQID4+ntPJAN9TAYDfjC+l6dOnw9PTk9nNTk1NRWhoKKfn4NtGHqhZ7DY2c7QhXbt2RVRUFLy8vAAAhw8fhp2dHSorK1kv1oQYHM9XcHBwnTSx+q6Rhgk59F05m6tXr1748ccfOT/+/PnzKrWdS5cuZeoq2cwMFooQKciVlZUq/7+pqalKDfHLBAUFISgoCNHR0Vi2bBm3wAWkSyU1ujL0nQ/l+3dkZGS9tZVs8e0oKpFI8Nprr6GoqEhlo48rKysrXos7gJqs6JT4+HjEx8ejpKQE5ubmzPXy8nK4u7tzvmEihDSuqqoKFRUVTbLRAFDz5rV69WqcO3cOEokEw4YNQ3h4uMprSENSUlIwePBg3L17lzkVCA8P55weKYTs7GxcunQJADBgwABO4wkAICcnB506dYKJiQnS0tJw7do1TJo0qdE32rCwMEilUnh7e9e705yYmMg6hpKSEnz11VdMR9H+/ftj3rx5aNWqFZ49e8aq7uqLL75AVVUVr8HxfNXX/MHd3R3Hjh3TWgz6QIgeAUL1GRg1ahQSEhJU6nUnT56M77//Hp6enlor30hJSUFUVBSzma1OCrKHhwd27tzJ/D4VFBTgww8/ZP3zWXskClDTnCM/P5/za466PDw8Gi2p8fPz08q/Cd/GJGxo6+ervtctbTeyCQ4ORmZmJoYMGaLyPWQ7Rw8AvvzyS5SXl2Ps2LFqvwfQAk+HFBcXo6ioCKtWrVLZWTIzM+O1E0AIqSs1NRUXL14EUFObwqUNMqkrPT0dubm5KumhXGdKVVdXq3QN4zojzMPDA4mJibh//z4CAwPh4uKCR48eNZp6dvXqVTg4ODCLyxf179+fUxwNYdNNrr7xHeoU6avjwIEDSEhIwO3bt1VGXRQXF8PW1lZraXz6QogbeaEWA9999x2++eYblW63H3/8MSZMmIANGzZo7USLb7dboGbT5ZtvvmE2opKTkzFz5kwm/bQxXl5eSEhIYEZSVVZWYvLkyZxGovBhb2/PlM68qHZJzYULF7QSD1/btm3DxIkT0bZt23o/z6Y+kg9lbeXkyZNVfleKi4sxdepUnDp1qsHHC9kB82WNwYKCglg/hxDvAbTAI4Q0O59//jnOnDnDpCWdPHkSw4cPx8KFC0WOjD2hdvXrK0o3NzdHr1698Prrr7OKZenSpbh69Sp69Oih0nWSS3paZmYmFixYwAzMra6uxubNm9GzZ0/Wz6Hcqf3uu+/w/PlzzJgxg/OYA6XKykoUFRUJ3nhCV9qiv0x+fj7u3btX70bjm2++ybmraHMnxI28kIuB69evMxsZ77zzDuzt7Tn8bYQxefJk7N+/n/fzZGRkIDU1FQAwbNgwThsxQoxEaeqEHPoeExODEydOYNCgQfD390fv3r2FCpOVLVu21LuwUtZWzps3r8HHz5o1C1u3bhV1c01otMDTQfV1ugLAqYUwIeTlRo0ahcOHD6uk50yYMIHTTCqxCbWrP3v2bFy+fJlZCF68eBG9e/fGrVu3EBQUBB8fn0ZjGTVqFFJSUpjdcHVMnjwZwcHBTBzp6enYtGkTpxtBNzc37Nq1C0uWLMHChQvh6OiI8ePHM81XGhMSEoLo6GgYGxvDw8MDhYWFmDVrlqDd5NimKqk7OJ4Qdfn4+HBKR1YX3xRkmUwGHx8fXhsl3t7e+OKLL1RGoixcuFBrJ3i64Msvv8SCBQsQHh5e7+e51o+WlZUhOTkZe/fuhbGxMfz9/TFu3DhWA+iFInZtJVAzlPzo0aPIy8tTyWjhkqIpxEmiXjRZ0Te1B8lWVFTg2LFjnFOVCCEv98orr6gU6JuYmPBua6xtQnXNlUgkOHbsGDPY/O+//8bKlStx8OBBTJs2jdUCr2PHjtz/Ai94/vy5ymmjs7Mz1q5dy+k5AgMDMXr0aDg7O8PR0RF5eXmsaxGBmho+c3NznDp1CgMGDEB4eDh8fX0FXeCx6Sb34uD4rVu3ch4cry6pVIqwsDAsWLCg3lipyYr+4tp9V118u90aGhoyTVXUXTwIMRKlqROqMYmSqakpJk2aBEtLS3z22WfYtm0bNm3ahKVLlzLjQTRt8uTJKCsr41xb2diIDC4NgIKDg1FVVYVevXpxHk6uVHtkU2VlJR4/foxOnTpxaiRGqwYd9GLnnODgYPj6+jZ6xEwIaZgynadPnz5M7QlQc8Px9ttvixkaZ0J1zb137x6zuAOA1157Dfn5+bCysmo0HU+Z2vP666/jww8/xMiRI1Xe0Lik+LRq1QoZGRlMV7lLly5xHuw9adIkZlQDAHTq1Ak7d+5k/XjlDe7ly5cxdOhQtGrVSpQxBUIMjleX8vdg+PDhGv9aRLdoupW9klDdbv39/TFq1CiVRhZsX3OEGImiL4QY+v748WPs378fhw8fhoODA6RSKd555x3k5eUhICBAawu8pUuXIiEhgfnYyMgIS5YsafRktvbczxdxbQB09+5dlc0Ldbz4O5Keno7z589zeg5a4DUBeXl5KCgoEDsMQpq8+Ph4lY9rvxH897//1XY4OsHS0hJxcXEqbf1fffVVyGSyRm/4as8csrGxQXZ2ttpxREREIDg4mFkgVlVVsT4telmtoaGhIbNIZVOPaGdnh48//hi3b99GaGhonZE1QmBbFcF3cLy6lDUoys0PQjSBbwqyTCZDt27dcPv2bbVj4DsSpakTcui7p6cnvLy8sGfPHpWMDmtra+a9RRtkMplKqUCLFi3qnRX7IiHHjFlbW6OkpETQztzOzs5Yv349p8dQDZ4Oql2DJ5fLUV1djcjISK3+khDSnJ0/fx5DhgwROwytePDgAVavXs3cbA0YMAARERFo27Yt7ty5gzfffFNrsVRVVal00WRb0ydUPWJ5eTkuXLiAN998E9bW1njw4AGuX7/O6WehpKQEpqamMDAwQHZ2Nm7cuAFXV1dm4cqmm1xQUBC6d++uMjj+2rVr+Oqrr1jHwVdBQQF2795dp46EUjT1l7Za2b+Ygnz+/HmtpSArUa8D/o1JlGQyGQ4ePIjJkycLHSJnYtZWKhdgDx48wNWrVzF48GCVjBZ1a/DkcjkyMzOxY8cOHD9+nPVz0AJPB+Xn5zN/NjIyQrt27ahzGSFapOudDnWFUJ08AX6DtYXqMviyXWsuqaJeXl747rvvUFpaCi8vL3Tv3h1WVlac6gkLCgoQExPDpI+5uLggMjISlpaWrJ+Drw8++AB2dnbo3bu3yvsPnezpr+XLl2PlypUa/zrjx4/H9u3b66Qgs22GBNT8rm7duhV5eXnYsGEDbt26hZycHIwcOZLV42vfZ9XuddAcS2GEaEzi5eWlEw1qzp49i6ioqDq1lcOGDWP1+KysLCxfvhxZWVmorKxkrrNJ0XzZeAQldcckGBkZoUuXLliwYAEcHR1ZPwelaOqgzp0748mTJ/jjjz8AAE5OTi+dLUIIEV5z2vfiMyZh7dq1jZ6crVu3jtWpQG5ubp1rbNOvhEqvqV2HUXt3n0v9hUKhgKmpKY4fPw5fX1/Mnz8f7u7unOKwtLTE559/zukxQnv27BlWrVolagxEWKNHj8aUKVPg6elZb/qYNhZ3SnxTkFesWAErKyvmd79jx44IDQ1lvcCjXgf/ULcxSW0DBgzR3PH+AAAgAElEQVTAqVOnMHr0aE2FyQrf2soVK1Zg4cKFWLNmDeLj47Fnzx60bt2a1WO5LOAa01idKpssI1rg6aAffvgBUVFRcHBwgEKhQEREBFatWsX6hYsQwo+2mg3ogrS0tHrHJGzcuLHRMQlCdPJUDta+c+eOytdSDtbWptoLReWufmFhIafnqKioQGVlJX7++WdMmTIFANRq1CLE4Hg+unXrhgcPHqBDhw5a+5pEszZu3Ig9e/YgNjYWrq6u8Pf3R/fu3bUeh42NDb788kuVFGRlSh1b169fx7p165hT+datW0Mul6sdU3PudaBuY5LaDh8+jJ07d6Jly5Zo1aoVs0kmRsorn9rKyspKODs7Q6FQoH379ggJCYG3t7dKV8vGxMTEICgoCBYWFgCAwsJCxMbGIjIyUq2Y6vP555/TAq8p+vzzz7F//37mB/TOnTuYM2cOLfAIIYLjMyZBiJMzFxcXdOnSBatWrVKpUVAO1haLiYkJfHx84O3tjRkzZrB+nJubG/N36tu3Lx49esS5lfvLBsdr07NnzzB+/Hj06dNHJX6qwWu6evTogdWrV+PZs2c4dOgQZsyYgX/9618IDAzE+++/r7U4Vq5ciZiYGKbmzsXFBdHR0Zye48X28xUVFZwyL17W66A5UrcxSW21x3uJiW9tpfL1tk2bNsjKykKHDh04b/JduXKFWdwBQNu2bXH58mVOz9EYNj/rtMDTQSYmJiq7D6+//jpatmwpYkSENC/NKUWTz5gEIXTu3BmdO3dGSkpKg//f3LlzERsbq9FYatfgKQvbi4uLOT1HUFAQAgICYG5uDgMDA5iammLz5s2cnuP333/nPTier3HjxmHcuHGifX2iOX/88QcyMjLQsmVLDB48GPv378eJEyfwxRdfaOXrC5GC3K9fP8TFxaGyshIZGRnYuXOnSt1SY2ovSJp7rwMjIyPk5eWpNCbh+r04ceJEnY2wb775htPmmBD4zpF2c3NDYWEhZs6cCT8/P8jlcmZeIFv1LY6FnjHJJsuIFng66L333sPXX38NHx8fKBQKJCUl4b333mPa2HKdDUUI4SYkJETsELSGz5gEbfrrr780/jVq1+AZGhqiS5cunHf1161bhyVLljAfm5iYIDQ0FHFxcayfQ4jB8XzIZDKcOnUKW7duFTUOIqzt27cjISEB1tbWCAgIwNChQyGRSDB79my4urpqNRa+KcghISGIj49H69atIZVKMWLECNZpdDKZDEFBQdRI63+EGPpe3wKvvmuaxre2ctq0aQCAIUOG4NKlS6ioqOA87sDR0RExMTGYMWMGFAoF4uPjOTVHEQot8HSQshX2i6kwW7Zs4TxwkRBS1+3bt/H111/XaQGfmJgIAMwbXXOwbt06rF69mhkIPmDAAKxbtw7V1dVYt26dyNH9QxuLTSFSTu/fv489e/bA398fcrkcoaGhrOtBhBwcz4ehoSGePn1ap9kMadry8/Px9ddf1ztzTptNfYRIQTY2NsacOXMwZ84czo81NDSEqakpKioqOKdP6yM+jUl+/vlnXLhwAQ8fPlSZ01ZSUqITmTDq1Fbm5uYiNzdX5SSOyz1BREQEVq9eDU9PT0gkEgwbNgwRERGcYmgMpWg2UUIOXCSE1LVo0SKMHj0aXl5ezTYtR6lDhw748ssv6/2cmDVwYnn+/Dnu37+v8ubetWtX1o9ft24dpk+fjnbt2uHMmTOwtLRUOdFriJCD4/nq3bs35s2bh3Hjxql0kWtOmx/6RCaTIT8//6UDxR0cHLQWixApyOXl5UhJSalzCsh21pitrS38/f0xatQopnskoN1GRrpE3cYkxsbGaN26NSQSicr3sX379pwakwiFb23lhg0bcPDgQdjZ2THNsSQSCafXPTMzM6xZs4Zb4ByxyTKiBZ4Oq6ysVLnJoNRMQoQhl8sxe/ZsscPQCfWNSQCa543Orl278Pnnn6NNmzYqb+4//fQT6+do0aIFtmzZAn9/f/Tu3ZvTfClN3xRwocwU2bdvH3ON640O0R3KU1m5XK5WV1chCZGCHBQUBAMDA/Ts2bNOwxU2ZDIZunXrxnoUiz7j05ikf//+6N+/P95//31ROrK+iG9t5alTp3D69GnOaZmAsHNhhcgyogWeDjp16hTWrFmDBw8eqMxkotRMQoTh5OSErKws2Nvbix2K6GqfGlVUVCAjIwO9e/fWuQWeNurSvv32W5w6dUqt0QAv3iSVl5fj0aNHzDwjNjdLQt4g8LV7926Nfw2iXb1790ZQUJBop7JCpiD//fffOH78uNqxREZG1rmJLykpUfv5mjK+jUmAmlTN1157Debm5ggLC0NmZiY+/fRTDBo0SOhwX0qI2korKyu1FneAsHNhhcgyogWeDpJKpdi8eTMcHBxE32kjRB/9+eefSEpKgq2trUoNhnJ3rDl58dTo4cOHnFuWC6Wh2oevv/5a41+/Y8eOas99E6JNuJA3CHylpqbWe51O8JousU9lhUxB7tatGx4+fIj27dur9fiAgIA6C4H6rjUHQgx9T0pKwrRp03Dx4kU8efIEn332GWJiYrS6wBOittLJyYlZXNV+Dja/I0LMhVUSIsuIFng6yMrKCr169RI7DEL0ltAFz/qkffv2uHPnjta/rhC1D3zNnz8fkZGRGDp0KOc399o3SdXV1cjJyQFQU9vCdjdcyBsEvuLj45k/V1ZW4tq1a+jRowct8JowsU9lhUxBDgoKgq+vL+zt7TnNaayurkZVVRXkcjnTmRwAiouLVcakNGfqNCZRnjJlZGTA3d0dffv2FaXJCt/ayszMTACqvyts34eE7J8hRJYRLfB0UEBAAL744gu4urqqvHBxKfQnhLxc//79AQBlZWUAoPJG0NzUrsFTKBTIzMzEq6++qvU4+NQ+COXs2bM4e/Ys7ty5o/YiMzMzEwsWLECLFi2gUChQXV2NzZs3o2fPno0+VpcabL24GLh58ya2b98uUjSEj5edxippa9EuZAryJ598ghEjRnDuxBkXF8d0JHdycmKum5mZMS3ymxshhr63bNkS27Ztw/Hjx7Fnzx4oFApUVVVpItwG8a2tFHsTREmILCOJQhf6mBIVO3bswJdffgkLCwu1C/0JIS+Xl5eH0NBQXLt2DRKJBD169IBUKmUGvTYn4eHhzJ8NDQ1hY2MDX19fWFhYaDWODz74AHv37tXq13zRiBEjcOLECbRs2VLt55g8eTKCg4OZm9T09HRs2rQJ+/fvFypM0YwfPx5Hjx4VOwzCUUBAAICak9jMzEymGUZ2djZ69eqltZ9NDw+PRlOQ/fz8WKUgu7u749ixY2rHEh0dzakBkj7Lz89n/qzu0PecnBzs3bsX77zzDt5//33k5ubi5MmTmDVrltDhNqikpKTe2kq2G4f1bYaYmZmhe/fuMDc3FyRGNi5dulTvdeXmNBu0wNNBw4cPR0JCgtq55YSQhk2bNg1jx46Ft7c3gJr6gZSUFGYWHNG+9evX4/79+2rVPgglMDAQ27dv59xgoDYPDw8kJyc3ek3X1b7RkcvlyMzMxLlz55CUlCRiVISPRYsWITAwEL179wZQc0rw7bffYsOGDVr5+vb29kyq8YtqpyBfuHCh0eeKiorClClT1B7lUlJSAlNTUxgYGCA7Oxs3btyAq6urWh05mzKZTAYfHx+9qT2cMGFCnb9LfddeZtKkScjMzGR+rrKzs/Hmm2/iwYMHiImJwfDhwwWPuSF8sowoRVMHderUiRZ3hGjQkydP4OPjw3zs7e2NXbt2iRiR9r1sPIKStrto8ql9EEqXLl0QGBjIq7tfq1atkJGRgQEDBgCo2YltiiNuatfgGRkZwcbGptH6JqLbbty4wSzuAKBXr15anbUoZAryn3/+CW9vb7VT2KZOnYrvvvsOpaWlmD59Orp37460tDSsXbtWsBibAqGGvnt7e9c7akFbjcuEqq20sbFBVFQUMxfy//7v/7Bz505IpVIsWrRIaws8IbKMaIGng3r16qV2Fx9CSOMMDAxw+/ZtvPHGGwBq0kua28Dz2h3tdIEu1D5UVVXx7u4XERGB4OBglRq8lw2S10U7duzARx99hODgYPTr10/scIiAWrVqheTkZHh4eAAAjh492iQ3HwBwrhF7kUKhgKmpKY4fPw5fX1/Mnz8f7u7uAkXXtAgx9H3JkiXMnysqKnD8+HGtHlQIVVuZlZXFLO4AoGfPnsjOzoadnZ1Wm8YsW7YMvr6+KllGy5Yt45RlRAs8HaS88RJzJ5sQfRYSEgJ/f3+89dZbAGpe1NevXy9yVNqlS0O1ldLS0vDLL78AAAYNGgQXFxetfn0hvie9evXCDz/8oNJF09jYmPfzasuxY8fw0UcfYfXq1XqTtkVqrFmzBmFhYfj0008hkUjQvXt3rFu3Tuyw1MKlFqk+FRUVqKysxM8//4wpU6YAQLMdSyXE0PcX/z0GDRoEPz8/vqGxFhQUhKCgIN61la1atUJKSgrGjRsHAEhJSWFqsus7odQUIbKMaIGng3RhJ5sQfTZkyBCkpKTgzz//BFAzAFiMzpFi0qWh2kBNSuCRI0cwduxYADUz4Tw9PTF9+nSNf22hvxd3797F5cuXAdSkQNnZ2fGOUVtMTEwwe/Zs5OfnIzg4uM7nKU2z6bKzs0NSUhIz0FvMjrV83b59G3FxccjNzUV1dTVznW1KoJubG1xcXNClSxf07dsXjx494pWi2JRpYuh7SUkJHj9+zOs51LFo0SLI5XK1ayuVmyDKUUpdu3bFunXrUFZWhk8++USToasQIsuImqzoKLF3sgkh+k3IjnZCcHd3x759+5gbjZKSEvj5+fHqlMeWkN+LI0eOYMOGDUzGxfnz57F48WKMHz9esHg16enTp/jll18glUqxYMGCOp+fMGGCCFERoeTm5iI3NxcymYy51hSzg9zd3eHh4YGePXuq3PhyOdkrKiqCubk5DAwMUFpaipKSEnTo0EET4eo0vo1JANUaPLlcjnv37mHatGmYM2eOoLE2xsvLi6mt9PLyQvfu3WFlZcW5tlLsTZDz589jyZIldbKMuAyOpxM8HSTmTjYh+iwwMBDffvutytwfoKYeQyKRID09XcTotEuXhmor1X4z1eYbq5Dfix07diApKQlWVlYAgEePHmH69OlNZoFnYWEBNzc3WFpaMo1iiH7YsGEDDh48CDs7O7XnPOoKIyMjfPzxx7yeo6ioCJmZmSqL3ea0wBNy6HvtGjxDQ0NYW1uL0ixQ3drKvLw8WFtb4+bNm/V+XttzqIXIMqIFng5KTk7G/v37mRucgIAA+Pn50QKPEJ6kUikA4NChQyJHIj5dGqoNAA4ODggPD8fEiRMB1KRa1S521yShvxfKxd2Lf24KlKmoDS3utJm6S4Rz6tQpnD59ukmnZioNHjwYqampai9O9Wmxqy4hh77zrYkUirq1lTExMdi6dStmzpxZ53NizaG2tLTk1bWTFng6SqydbEL0mXJHsXPnziJHQl4UFRWFr776CjExMQCAd999F3PnzhU5Ku5sbGzw5ZdfYtKkSQCAgwcPcmptLba1a9c2mq66bt06raXuEuFYWVnpzf2Es7Mz5s6dCwMDA6ZjLZcsDH1a7KpLiMYkL2bDvEjbWTHq1lZu3boVAHDmzBlNh9ggIbOMqAZPB4WHhwOAyk62QqHQya53hDRFv/32G6RSKfLy8iCTyZpliibRjIKCAsTExDA11C4uLoiMjISlpaXIkbEj5DBqolvWr1+P+/fv68UIJldXV4SGhqJnz54qJzRsN+8++OAD7N27V1PhNSl8hr7n5+cDqLlPffr0KSZNmgSFQoHExES0adOm3jpeTeNTW5mTk4NOnTrBxMQEaWlpuHbtGiZNmoQ2bdpoOOoaDx8+RPv27Znv64u4bE7TAk8HlZWVITY2lrlBUO5kqzPJnhBS15gxYzB37lw4OTmpdXNAhHPy5EmMGTPmpYPXtT1wnRB9FRAQUOeaRCLh3H5dF/j4+PAaoq1Pi12+hGhM4uXlhaSkJJVr3t7eopRD8Gkk5OHhgcTERNy/fx+BgYFwcXHBo0ePEBcXp6lwNYZSNHWQqakpFi9eLHYYhOitli1bNtuhtrrmxo0bGDNmjM4NXldXdXU1EhISkJGRAaAmhcnX1xdGRvR2S8SlTyOYRo4ciX379mHMmDEqCzS2g9szMzMB0LxhQJih7yUlJXjy5AnTCOTJkye8Ry2og29tpYGBAYyNjZGamgo/Pz/MmDEDHh4emgy5XkJkGdE7jg6KiYlBUFAQLCwsAACFhYWIjY1FZGSkyJERoh+GDBnCq0CfCEeZwqOJWUxiiI6ORn5+Pjw9PQHUNM3KyspCdHS0yJGR5i41NbXe603xdfCLL74AAKxcuZK5JpFIcO3aNVaP16fFLl9CDH0PDAyEp6cnhg0bBqDmZ23WrFlCh9oovrWVFRUVePz4Mc6ePYuFCxcCQIP1yJoSGRlZb5YRF7TA00FXrlxhFncA0LZtW2ZoLiFEfcrCZYVCga1bt6J169ZqFegT4QUEBNSZu1TfNV136dIlnDhxgnlTHjNmDDPyhhAxxcfHM3+urKzEtWvX0KNHjya5wBOi8y3NG64hxNB3f39/vP3228y9qr+/P958801NhNsgvo2EAgMDMXr0aDg7O8PR0RF5eXkwNzcXMEJ2hMgyogWeDqqdN6xUXV0tQiSE6Bcaj6B7hJzFpAssLCxQWVmJli1bAqj5+3GdX0SIJrx4anXz5k1s375dpGj4KywsxB9//AEAcHJyUtkYbwzNG/5HUFAQAgICmMYkpqam2Lx5M+fnsbe3h729vQYiZM/JyQmLFi1Su7Zy0qRJTAdkAOjUqRN27twpeJyNESLLiJqs6KCIiAiYmppixowZUCgUiI+PR2lpKXXRJEQDCgoKkJeXpzIHiGjPli1bsGXLljrXlbOY5s2bJ0JU3CmbxGRlZeHPP/+Em5sbgJqUIUdHR0rRJDpp/PjxOHr0qNhhcJaWloawsDC89dZbAIDr169DKpWyPoVzd3fHvn37mNOekpIS+Pn54dixYxqLWZfVPs10cXHBoEGDOD1eVzpTq9tIiM1sT23M/6ydZfT06VNeWUa0wNNBJSUlWL16Nc6dOweJRIJhw4YhPDxclGNiQvTRBx98gK1bt0KhUGDs2LF45ZVXMGTIECxZskTs0JotPrOYdIFyvM3L0AYdEVvtGjy5XI7MzEycO3euTvfDpsDLywtSqRR2dnYAgFu3biEsLIz138Xd3b3OYq6+a83Bi6eZJ06c4Hya2dQ7U3t4eDQ6/9PPz0/j8z9fNh5Bicv3k1I0dZCZmRndDBCiQWVlZTA3N0dycjLc3d2xePFieHh40AJPRJMnT0ZZWRkzDqasrAz5+fno1q2byJGxQ6/ZRNfVrsEzMjKCjY0NNm3aJGJE6quurmYWdwBgZ2fHqZTFwcEB4eHhKvOGHRwcBI+zKUhOTsb+/fuZ08yAgAD4+flxWuDpUmdqdWorr1+/jj59+jQ6/1PT6lvAqZtlRAs8HaIrR8SE6LvKykoAQEZGBsaOHQsDAwMYGhqKHFXztnTpUiQkJDAfGxkZYcmSJU3mdIFev4mu06fOka+++iqSkpLg5eUFADh8+DCnWteoqCjExsYiJiYGwD/zhpur2o1J1GlSoiudqdWtrRSiaY+QamcZeXp6qpVlRCmaOkRXjogJ0XcrVqzApUuXIJPJkJKSgufPn+PDDz9sMosJfeTh4YHk5ORGr+kqev0mTcHt27eRlZXFbHIBYEZ6NCW5ublYvHgxc2P+1ltvQSqVwsbGRuTImh5lennt00yFQsEpK2HgwIG8a8aEoC+1lZ6enjhy5AiSk5Nx/fp1JsuIy9+DTvB0iK4cEROi75YvX46srCxYW1vD2NgYxcXFzE4uEYeRkRHy8vJgbW0NoOYGrimdqtLrN9F1u3btQkJCAh49egRHR0dcuXIF77zzTpNc4NnY2ODAgQMoLS0FALRu3ZrT42ne8D+EOM3UpQ7VfE8jdYEQWUa0wNMhunZETIi+kkgkeOutt1BQUIBnz54BAKcW20R4QUFB8PPzY1J8UlNTm9Sim16/ia47cOAADh48CD8/P2zfvh3Z2dn46quvxA5LLUeOHMHw4cPRpk0bAMDTp09x/vx5jB8/ntXjad7wP0xNTbF48WJez6ErzVT0pbayf//+cHNzg0wmw8qVK/Hs2TPOA89pgUcIaXbS09OxdOlSFBQUwMDAAFVVVbCwsKBB5yIaPnw4du/ezRTHz5w5E126dBE5KkL0R4sWLWBqagq5XA6FQoHu3bvjzp07Yoellh07dqicPFpYWGDHjh2sF3g0b/gffE4zw8LCIJVK4e3tDYlEUufziYmJgsfbEH2prRQiy4gWeISQZkcqleI///kPQkJCcPjwYSQmJuLevXtih9Xs2drawtbWVuwwCNFLrVq1QlVVFezt7SGVSvHaa69BLpeLHZZg6lu0vYyjoyNiYmJU5g07OjpqMDrdxec0MzAwEAB0pgO1EKeRukCILCNu532EEKInbG1tUV1dDYlEgokTJyItLU3skJq1gQMHwtnZuc5/hBBhLF++HFVVVVi6dCmKiopw+fJlrF+/Xuyw1GJlZYUffviB+fj777+HpaUl68dHRESgtLQUnp6e8PLyQllZGSIiIjQRqs7jc5qpTH/s379/vf8paesULSYmBk+fPmU+LiwsxOrVq7XytYWUnp6OoUOHYujQoRg9ejTee+89eHt7c3oOOsEjhDQ7RkY1L30dOnTAmTNn0LlzZxQVFYkcVfNWu0i/oqICx44dY/6dCCH8de/eHUDNKUdTvOmtLSIiAnPnzoVUKgUAGBoaIjY2lvXjad7wP7RxmvnXX38J+nwvoy+1lUJkGdG7JyGk2Zk6dSqKiooQHByM0NBQFBcXN9vdW13xYpF+cHAwfH19MW/ePJEiIkQ/NHZK98knn2gpEuHY2dnhxIkTyMnJAVCTkVG7y2BWVhbs7e3rPI7mVdYVERGB1atXw9PTExKJBMOGDRP8/bC++jxN0KfayhezjLy8vBASEsL68bTAI4Q0Gzt27MBHH32E1157DW3atEGvXr3w448/ih0WqUdeXh4KCgrEDoOQJs/U1FTsEDTC0NAQXbt2rfdz4eHhOHz4cJ3ra9eubXRe5bp165rVvEp9Os3Ul9pKIbKMaIFHCGk2jh07ho8++ggxMTH1vvkT8QwcOJDZ5ZXL5aiurm6WM6kIEVpQUBCr/y82NrZJdhysz8sWcDSv8h/6eJqpjdNIbRAiy0iiaGgbgxBC9MjkyZNhYWGB3377rd43rU2bNokQFQGA/Px85s9GRkZo165dkxp0TkhTN2HCBL3Z+NKnv4umeHh4NHqa6efnJ8hp5pw5c/D111/zfh59p8wy+vXXX/H222/zei46wSOENBtxcXH45ZdfcP36dQwbNkzscMj/yGQyBAUF0Q0ZISKi/f7mRejTzLS0NGaOqYuLCwYNGsR8TtOLO305jRQyy4gWeISQZsPCwgJubm6wtLTEgAEDxA6H/I+hoSFMTU1RUVEBExMTscMhpFnSViMMbaDFauOysrIEe674+HgcOXIEY8eOBVBTx3j9+nVMnz5dsK/REH2prTQxMcHs2bORn5+P4ODgOp/nkmVECzxCSLOh3MFraHHXFHb59JGtrS38/f0xatQolaYQ/v7+IkZFCNFF9+/fR8eOHV/6eXrd0K7k5GTs378fZmZmAICAgAD4+flpbYGnL7WVQmYZ0QKPENJs6Msunz6SyWTo1q0bbt++LXYohDRLTenUy8fHB3369MEHH3xQ74bcxIkTRYiqeVMu7l78szYIeRopJiGzjKjJCiGk2bC3t2d2815Ue5fvwoULIkTXvJWUlNS5KajvGiFEPc+fP69zrVWrVsyfnzx5gldffVWbIamtsrISJ06cwL59+1BcXAx/f394eHjQ64VIwsPDAfyzsE5MTIRCodCb8QvaImQtIS3wCCGEiK6+rnfUCY8Q4Sg3uGozMjJCr169sGrVKrzxxhsiRcbPb7/9hkWLFuHZs2eYMGEC5s6dC0tLS7HDalbKysoQGxvLNFl59913MXfuXL2dwagpQnY2pRRNQgghoqmurkZVVRXkcjnKy8uZN7bi4uJ6TxwIIeoJCQmBiYkJfHx8oFAocPjwYRQWFsLa2hrLly/H7t27xQ6Rk/z8fOzfvx8pKSlwdnbGxIkTcfHiRUyfPp3S7LVIJpPhs88+Q0xMjNihNHlC1hLSAo8QQoho4uLisGXLFkgkEjg5OTHXzczMMG3aNBEjI0S/fP/990hKSmI+njp1Kry8vJCUlISdO3eKGBl3s2bNwo0bNzB58mQkJSWhbdu2AIC+ffvixIkTIkfXvBgaGuL69etih6EXhKwlpAUeIYQQ0QQFBSEoKAjR0dFYtmyZ2OEQoreeP3+OvLw8WFtbAwDy8vJQVlYGoOYmvSmZMGECXF1d6407JSVFhIiat4EDByI6Ohqenp4qaZldu3YVMarmjWrwCCGEiK6kpASmpqYwMDBAdnY2bty4AVdXV7Ro0ULs0AjRC99//z2WLVsGBwcHKBQK/Pe//8XKlSsxaNAg7N69G7NnzxY7RFYUCgXGjh1LJ3U6ZMSIEXWuSSQS/PTTTyJEQwBa4BFCCNEBXl5e+O6771BaWgovLy90794dVlZWWLt2rdihEaI3Hj9+jD///BMA0Lt37ybbjGT69OnYuHEj2rRpI3YohOgkStEkhBAiOoVCAVNTUxw/fhy+vr6YP38+3N3dxQ6LEL3Srl07DBo0CDKZDEBN2mbtUQlNhZmZGSZMmIAhQ4aopAR+8sknIkbVfN28ebPONXNzc3To0EGEaAhACzxCCCE6oKKiApWVlfj5558xZcoUAICBgYHIURGiP3744QfExMTg0aNHAGo2VSQSCa5duyZyZNx169YN3bp1EzsM8rv5LnYAAA1ISURBVD8zZ87E33//DXNzcwA1XZAtLS3RokULbNy4UaWBFtEOWuARQggRnZubG1xcXNClSxf07dsXjx49gomJidhhEaI3pFIpvvjiCzg5OTX5zZMxY8bAzs5O5dqtW7dEioa89957GDBgAEaOHAkAOH36NC5evAhXV1esXr0aBw8eFDnC5qdp/4YTQgjRC0FBQTh9+jQOHDgAAwMDmJqaYvPmzWKHRYjeaNOmDfr27dvkF3cAsHjxYlbXiHZcunSJWdwBwMiRI3H58mUMGDAA5eXlIkbWfNEJHiGEEJ1QVFSEzMxMpj4IANVwECIQV1dX7N27F25ubiqn402pBu/Jkyd48uQJKioqcOvWLWYgdHFxMTPygWifXC7Hb7/9hr59+wIAfv/9d8jlcgCUai8W6qJJCCFEdBs2bMDBgwdhZ2fH3BBIJBLs2rVL5MgI0Q/29vbMnyUSSZOswfv222/x7bff4uHDh2jfvj1z3dzcHFOmTMHEiRNFjK75unLlCkJDQ9GyZUsAQHl5OTZs2IC33noLP/zwAyZMmCByhM0PLfAIIYSIztXVFYcPH4aZmZnYoRBCdFxcXFyTmdvXXFRWViInJwcAYGtrSzNMRUbnpoQQQkRnZWVFiztCCCujRo1CRUUFACAtLQ3btm1DUVGRyFE1by1atEC7du1gbm6Ox48f46+//hI7pGaNTvAIIYSIbv369bh//z5Gjx6tUh80dOhQEaMipOkLDAzEt99+i4EDB0IikTDXlSma6enpIkanHg8PDyQmJuL+/fsIDAyEi4sLHj16hLi4OLFDa5bS09OxdOlSFBQUwMDAAFVVVbCwsGiSP1v6gpqsEEIIEV1mZiYAYPfu3cw1iURCCzxCeJJKpQCAQ4cOiRyJcAwMDGBsbIzU1FT4+flhxowZ8PDwEDusZksqleI///kPQkJCcPjwYSQmJuLevXtih9Ws0QKPEEKI6Gov7AghwlE2I+ncubPIkQinoqICjx8/xtmzZ7Fw4UIAACWkicvW1hbV1dWQSCSYOHEivLy8EBISInZYzRYt8AghhOiEtLQ0/PLLLwCAQYMGwcXFReSICNEfv/32G6RSKfLy8iCTyZp0imZgYCBGjx4NZ2dnODo6Ii8vD+bm5mKH1WwZGdUsJzp06IAzZ86gc+fOVBMpMqrBI4QQIrr4+HgcOXIEY8eOBQCcOHECnp6emD59usiREaIfxowZg7lz58LJyUllNpk+nOzJ5XJUV1dT50aRpKSkYPDgwbh79y5CQ0NRXFyMiIgIjB8/XuzQmi1a4BFCCBGdu7s79u3bx3TSLCkpgZ+fH44dOyZyZITohwkTJuDw4cNihyGIPXv21Hvd399fy5EQoptoTAIhhBCdUHtMAo1MIERYQ4YMQWpqqthhCOLq1avMf7/++itiY2Px888/ix1Ws8MmvbcppgDrAzrBI4QQIrrw8HAAwMSJEwEAiYmJUCgUWLNmjZhhEaI3Bg4ciKdPn6J169Zo0aJFk67Be9HDhw8RHR2NLVu2iB1Ks+Lh4YGEhIQGG9z4+fnhyJEjWoyKALTAI4QQogPKysoQGxvLNFl59913MXfuXJiamoocGSH6IT8/v97r+lCDBwDjxo1DSkqK2GE0K/b29pBIJPUu8JTX27VrhwsXLogQXfNGCzxCCCGEENJk1K7BUygUyMzMxN9//41du3aJGBUhuoPGJBBCCBFdTEwMgoKCYGFhAQAoLCxEbGwsIiMjRY6MkKYtLCwMUqkU3t7ekEgkdT6fmJgoQlT8XL16lfmzoaEh7OzsmDRvQggt8AghhOiAK1euMIs7AGjbti0uX74sYkSE6IfAwEAAwJIlS0SORDhUm0tIw2iBRwghRHQymazOterqahEiIUS/ODg4AAD69+8vciT8rV+/vsHPf/LJJ1qKhBDdRgs8QgghonN0dERMTAxmzJgBhUKB+Ph4ODo6ih0WIU3ey1IzlZpSiqay6VJubi4uX74MV1dXAMDp06fxzjvviBkaITqFmqwQQggRXUlJCVavXo1z585BIpFg2LBhCA8Ph7m5udihEdKkXbp0CQBw7tw53L59Gz4+PgCApKQk2NraIiwsTMzw1DJ16lRs2rQJbdu2BVBTsxscHExNVgj5HzrBI4QQIjozMzOqqyFEA5SpmVKpFAcOHGBO84YPH47JkyeLGZraHj9+zCzugJqa3cePH4sYESG6xUDsAAghhDRfbIYs68MgZkLEVlRUhIqKCubjyspKFBUViRiR+rp27YrIyEj8/vvv+P333xEVFYWuXbuKHRYhOoNSNAkhhIjGw8MDCQkJ9Q7KVfLz88ORI0e0GBUh+ufzzz/HuXPn4ObmBgA4efIkhg0bhoULF4ocGXclJSX46quvkJGRAQAYMGAA5s2bBzMzM5EjI0Q30AKPEEKIaOzt7SGRSOpd4Cmvt2vXDhcuXBAhOkL0y9mzZ5lF0cCBAzFs2DBxAyKEaAQt8AghhBBCmrm5c+ciNjZW7DBYqaiowNGjR5GXl6cyToXGJBBSg5qsEEIIIYQ0c3/99ZfYIbAWHByMqqoq9OrVCy1atBA7HEJ0Di3wCCGEEEKauYZm5emau3fv4uTJk2KHQYjOoi6ahBBCCCGkybC2tkZJSYnYYRCis+gEjxBCCCGENBnm5ubw9vbG4MGDVVI0qQaPkBq0wCOEEEIIaeY6duwodgis2drawtbWVuwwCNFZ1EWTEEIIIaQZyM3NRW5uLmQyGXNt6NChIkZECNEEOsEjhBBCCNFzGzZswMGDB2FnZwcDg5oWDBKJpEkt8E6ePIkxY8Zgz5499X7e399fyxERoptogUcIIYQQoudOnTqF06dPw8zMTOxQ1Hbjxg2MGTMGV69eFTsUQnQapWgSQgghhOi5Dz74AHv37hU7DEKIFtACjxBCCCFEz61fvx7379/H6NGjYWJiwlxvSima6enpcHZ25v3/EKLvaIFHCCGEEKLnAgIC6lyTSCTYtWuXCNGox8PDAwkJCWjo1tXPzw9HjhzRYlSE6B5a4BFCCCGEEJ1nb28PiURS7wJPeb1du3a4cOGCCNERojtogUcIIYQQoucUCgUSExNx9+5dLF68GPfu3cPDhw/Rt29fsUMjhAjMQOwACCGEEEKIZq1ZswYXL17E6dOnAQCtW7fGZ599JnJUhBBNoAUeIYQQQoiey8jIwL///W+0bNkSANC2bVtUVFSIHBUhRBNogUcIIYQQoudMTEwgkUiYj+VyuYjREEI0iQadE0IIIYToue7du+Po0aNQKBS4d+8etm3bhrffflvssAghGkBNVgghhBBC9FxJSQnWrl2LM2fOAABGjBiB8PBwtG7dWuTICCFCowUeIYQQQgghhOgJStEkhBBCCGkG0tPTkZubi+rqauaav7+/iBERQjSBFniEEEIIIXpu6dKluHr1Knr06AFDQ0OxwyGEaBAt8AghhBBC9Nzvv/+OlJQUGBsbix0KIUTDaEwCIYQQQoie69ixo9ghEEK0hJqsEEIIIYToqT179gAAsrOzcfPmTYwcORItWrRgPk81eIToH0rRJIQQQgjRU1evXmX+bGNjg+zsbBGjIYRoA53gEUIIIYQQQoieoBo8QgghhBA9t23bNjx9+pT5uLCwEPHx8SJGRAjRFFrgEUIIIYTouePHj8PCwoL5uG3btkhJSRExIkKIptACjxBCCCFEz9VXkSOTyUSIhBCiabTAI4QQQgjRc6+//jp27twJhUIBuVyOHTt2wMbGRuywCCEaQE1WCCGEEEL03IMHDxAWFobff/8dEokEffr0wfr169GhQwexQyOECIwWeIQQQgghzURZWRkAwNTUVORICCGaQimahBBCCCF6zs/PD0DNwk65uFNeI4ToF1rgEUIIIYToufLycpWPZTIZioqKRIqGEKJJRmIHQAghhBBCNCM+Ph7x8fEoKSmBs7Mzc728vBzu7u4iRkYI0RSqwSOEEEII0VPFxcUoKirCqlWrsGzZMua6mZkZ2rRpI2JkhBBNoQUeIYQQQgghhOgJStEkhBBCCNFTYWFhkEql8Pb2hkQiqfP5xMREEaIihGgSneARQgghhOipq1evwsHBAZcuXar38/3799dyRIQQTaMTPEIIIYQQPeXg4AAA+P/27hBHYSiKAuhjC4QlENAk7IYdYFEEhwKNYAUkeNZAEN8RDGsATVGAm4TMjKNp5s05ScVrK669yX9tu92Obrf79my/3zcRCaiZ3yQAACQ3mUzicrl8zaWUmM/nDSYC6qLgAQAkN51OYzwex+12i+PxGLPZLNbrddOxgBrYwQMA+Ad2u11st9u4Xq+xWq2i1+s1HQmogR08AICkNpvN21xVVQyHwyilRCklRqNRQ8mAuih4AABJnU6nt7nf78fj8fh2H8jDEU0AAIAkfGQFACCpw+HwkXeAv0PBAwBIarFYxP1+j6qqfr2Wy2XTMYEPsoMHAJDU+XyOwWAQP23ktFqteD6f0el0GkgG1MUOHgAAQBKOaAIAACSh4AEAACSh4AEAACSh4AEAACSh4AEAACTxAvsU5/J7u2CVAAAAAElFTkSuQmCC\n", 875 | "text/plain": [ 876 | "
" 877 | ] 878 | }, 879 | "metadata": { 880 | "tags": [] 881 | } 882 | } 883 | ] 884 | }, 885 | { 886 | "cell_type": "markdown", 887 | "metadata": { 888 | "id": "aDSZJBjJT3Iw", 889 | "colab_type": "text" 890 | }, 891 | "source": [ 892 | "**Insight 1:** The most common itemsets consist of a single item.\n", 893 | "\n", 894 | "**Insight 2:** There's a long tail of categories that consist of infrequently purchased items." 895 | ] 896 | }, 897 | { 898 | "cell_type": "markdown", 899 | "metadata": { 900 | "id": "ApMsvYgwHqIl", 901 | "colab_type": "text" 902 | }, 903 | "source": [ 904 | "**Use `.tolist()` to transform a `DataFrame` or `Series` object into a list.**" 905 | ] 906 | }, 907 | { 908 | "cell_type": "code", 909 | "metadata": { 910 | "id": "nrBBAg9kf5R1", 911 | "colab_type": "code", 912 | "colab": {} 913 | }, 914 | "source": [ 915 | "# Convert the pandas series to list of lists.\n" 916 | ], 917 | "execution_count": null, 918 | "outputs": [] 919 | }, 920 | { 921 | "cell_type": "markdown", 922 | "metadata": { 923 | "id": "J_JdOGzOVUed", 924 | "colab_type": "text" 925 | }, 926 | "source": [ 927 | "### **Summarize final transaction data**" 928 | ] 929 | }, 930 | { 931 | "cell_type": "code", 932 | "metadata": { 933 | "id": "NXo1XlNh2nvV", 934 | "colab_type": "code", 935 | "colab": {} 936 | }, 937 | "source": [ 938 | "# Print length of transactions.\n" 939 | ], 940 | "execution_count": null, 941 | "outputs": [] 942 | }, 943 | { 944 | "cell_type": "code", 945 | "metadata": { 946 | "id": "KHWb2YGe2n__", 947 | "colab_type": "code", 948 | "colab": {} 949 | }, 950 | "source": [ 951 | "# Count number of unique item categories for each transaction.\n" 952 | ], 953 | "execution_count": null, 954 | "outputs": [] 955 | }, 956 | { 957 | "cell_type": "code", 958 | "metadata": { 959 | "id": "5dcX5qwN2njx", 960 | "colab_type": "code", 961 | "colab": {} 962 | }, 963 | "source": [ 964 | "# Print median number of items in a transaction.\n" 965 | ], 966 | "execution_count": null, 967 | "outputs": [] 968 | }, 969 | { 970 | "cell_type": "code", 971 | "metadata": { 972 | "id": "bZm2vOczf7mB", 973 | "colab_type": "code", 974 | "colab": {} 975 | }, 976 | "source": [ 977 | "# Print maximum number of items in a transaction.\n" 978 | ], 979 | "execution_count": null, 980 | "outputs": [] 981 | }, 982 | { 983 | "cell_type": "markdown", 984 | "metadata": { 985 | "id": "xLOYfyVps4Uu", 986 | "colab_type": "text" 987 | }, 988 | "source": [ 989 | "---\n", 990 | "

Q&A 2

\n", 991 | "\n", 992 | "---" 993 | ] 994 | }, 995 | { 996 | "cell_type": "markdown", 997 | "metadata": { 998 | "id": "tXqmKHdXiCt6", 999 | "colab_type": "text" 1000 | }, 1001 | "source": [ 1002 | "## **Association Rules and Metrics**" 1003 | ] 1004 | }, 1005 | { 1006 | "cell_type": "markdown", 1007 | "metadata": { 1008 | "id": "RQnsrXg7aKgS", 1009 | "colab_type": "text" 1010 | }, 1011 | "source": [ 1012 | "**Association rule:** an \"if-then\" relationship between two itemsets.\n", 1013 | " * **rule:** if *{coffee)* then *{milk}*.\n", 1014 | " * **antecedent:** coffee\n", 1015 | " * **consequent:** milk\n", 1016 | "\n", 1017 | "**Metric:** a measure of the strength of association between two itemsets.\n", 1018 | " * **rule:** if *{coffee)* then *{milk}*\n", 1019 | " * **support:** 0.10\n", 1020 | " * **leverage:** 0.03\n", 1021 | "\n" 1022 | ] 1023 | }, 1024 | { 1025 | "cell_type": "markdown", 1026 | "metadata": { 1027 | "id": "QbFpAuLocyqt", 1028 | "colab_type": "text" 1029 | }, 1030 | "source": [ 1031 | "### **One-hot encode the transaction data**" 1032 | ] 1033 | }, 1034 | { 1035 | "cell_type": "markdown", 1036 | "metadata": { 1037 | "id": "jT0FHyUfIDNC", 1038 | "colab_type": "text" 1039 | }, 1040 | "source": [ 1041 | "* **One-hot encoding data.**\n", 1042 | " * `TransactionEncoder()` instantiates an encoder object.\n", 1043 | " * `.fit()` creates mapping between list and one-hot encoding.\n", 1044 | " * `.transform()` transforms list into one-hot encoded array." 1045 | ] 1046 | }, 1047 | { 1048 | "cell_type": "markdown", 1049 | "metadata": { 1050 | "id": "3Y65e_9jzBUw", 1051 | "colab_type": "text" 1052 | }, 1053 | "source": [ 1054 | "* **Applying one-hot encoding will transform the list of lists (of transactions) into a `DataFrame`.**\n", 1055 | " * The columns correspond to item categories and the rows correspond to transactions. A true indicates that a transaction contains an item from the corresponding category.\n", 1056 | "* **One-hot encoding simplifies the computation of metrics.**\n", 1057 | " * We will also use a one-hot encoded `DataFrame` as an input to different `mlxtend` functions." 1058 | ] 1059 | }, 1060 | { 1061 | "cell_type": "code", 1062 | "metadata": { 1063 | "id": "PADu6cwylDWC", 1064 | "colab_type": "code", 1065 | "colab": {} 1066 | }, 1067 | "source": [ 1068 | "from mlxtend.preprocessing import TransactionEncoder\n", 1069 | "\n", 1070 | "# Instantiate an encoder.\n", 1071 | "\n", 1072 | "\n", 1073 | "# Fit encoder to list of lists.\n", 1074 | "\n", 1075 | "\n", 1076 | "# Transform lists into one-hot encoded array.\n", 1077 | "\n", 1078 | "\n", 1079 | "# Convert array to pandas DataFrame.\n" 1080 | ], 1081 | "execution_count": null, 1082 | "outputs": [] 1083 | }, 1084 | { 1085 | "cell_type": "code", 1086 | "metadata": { 1087 | "id": "uXvgq0wclEZ_", 1088 | "colab_type": "code", 1089 | "colab": {} 1090 | }, 1091 | "source": [ 1092 | "# Print header.\n" 1093 | ], 1094 | "execution_count": null, 1095 | "outputs": [] 1096 | }, 1097 | { 1098 | "cell_type": "markdown", 1099 | "metadata": { 1100 | "id": "QcQf1RW7ffzc", 1101 | "colab_type": "text" 1102 | }, 1103 | "source": [ 1104 | "\n", 1105 | "### **Compute the support metric**\n", 1106 | "\n", 1107 | "* Support measures the frequency with which an itemset appears in a database of transactions." 1108 | ] 1109 | }, 1110 | { 1111 | "cell_type": "markdown", 1112 | "metadata": { 1113 | "id": "mwjsbXSKByym", 1114 | "colab_type": "text" 1115 | }, 1116 | "source": [ 1117 | "\n", 1118 | "$$support(X) = \\frac{\\text{number of transactions containing X}}{\\text{total number of transactions}}$$" 1119 | ] 1120 | }, 1121 | { 1122 | "cell_type": "markdown", 1123 | "metadata": { 1124 | "id": "rdoVfdc_H8KU", 1125 | "colab_type": "text" 1126 | }, 1127 | "source": [ 1128 | "* `.mean(axis=0)` computes support values for one-hot encoded `DataFrame`. \n", 1129 | "* A high support value indicates that items in an itemset are purchased together frequently and, thus, are associated with each other." 1130 | ] 1131 | }, 1132 | { 1133 | "cell_type": "code", 1134 | "metadata": { 1135 | "id": "n3E8jFSelMRj", 1136 | "colab_type": "code", 1137 | "colab": {} 1138 | }, 1139 | "source": [ 1140 | "# Print support metric over all rows for each column.\n" 1141 | ], 1142 | "execution_count": null, 1143 | "outputs": [] 1144 | }, 1145 | { 1146 | "cell_type": "markdown", 1147 | "metadata": { 1148 | "id": "k4xq0z7IdwmS", 1149 | "colab_type": "text" 1150 | }, 1151 | "source": [ 1152 | "**Observation:** In retail and ecommerce settings, any particular item is likely to account for a small share of transactions. Here, we've aggregated up to the product category level and very popular categories are still only present in 5% of transactions. Consequently, itemsets with 2 or more item categories will account for a vanishingly small share of total transactions (e.g. 0.01%)." 1153 | ] 1154 | }, 1155 | { 1156 | "cell_type": "markdown", 1157 | "metadata": { 1158 | "id": "7NNdtDOXiC8z", 1159 | "colab_type": "text" 1160 | }, 1161 | "source": [ 1162 | "### **Compute the item count distribution over transactions**" 1163 | ] 1164 | }, 1165 | { 1166 | "cell_type": "markdown", 1167 | "metadata": { 1168 | "id": "Aey6WvpMM_26", 1169 | "colab_type": "text" 1170 | }, 1171 | "source": [ 1172 | "* `onehot.sum(axis=1)` sums across the columns in a `DataFrame`. " 1173 | ] 1174 | }, 1175 | { 1176 | "cell_type": "code", 1177 | "metadata": { 1178 | "id": "q87IRIx0lR9U", 1179 | "colab_type": "code", 1180 | "colab": {} 1181 | }, 1182 | "source": [ 1183 | "# Print distribution of item counts.\n" 1184 | ], 1185 | "execution_count": null, 1186 | "outputs": [] 1187 | }, 1188 | { 1189 | "cell_type": "markdown", 1190 | "metadata": { 1191 | "id": "fWmrboxOhnr4", 1192 | "colab_type": "text" 1193 | }, 1194 | "source": [ 1195 | "**Insight:** Only 726 transactions contain more than one item category. We may want to consider whether aggregation discards too many multi-item itemsets." 1196 | ] 1197 | }, 1198 | { 1199 | "cell_type": "markdown", 1200 | "metadata": { 1201 | "id": "fj7yQ2DqiQkh", 1202 | "colab_type": "text" 1203 | }, 1204 | "source": [ 1205 | "### **Create a column for an itemset with multiple items**" 1206 | ] 1207 | }, 1208 | { 1209 | "cell_type": "markdown", 1210 | "metadata": { 1211 | "id": "3ue1byfs4ejs", 1212 | "colab_type": "text" 1213 | }, 1214 | "source": [ 1215 | "* **We can create multi-item columns using the logical AND operation.**\n", 1216 | " * `True & True = True`\n", 1217 | " * `True & False = False`\n", 1218 | " * `False & True = False`\n", 1219 | " * `False & False = False`" 1220 | ] 1221 | }, 1222 | { 1223 | "cell_type": "code", 1224 | "metadata": { 1225 | "id": "immnq5stlWaf", 1226 | "colab_type": "code", 1227 | "colab": {} 1228 | }, 1229 | "source": [ 1230 | "# Add sports_leisure and health_beauty to DataFrame.\n", 1231 | "\n", 1232 | "\n", 1233 | "# Print support value.\n" 1234 | ], 1235 | "execution_count": null, 1236 | "outputs": [] 1237 | }, 1238 | { 1239 | "cell_type": "markdown", 1240 | "metadata": { 1241 | "id": "VHlEhjUuikdj", 1242 | "colab_type": "text" 1243 | }, 1244 | "source": [ 1245 | "**Insight:** Only 0.014% of transactions contain a product from both the sports and leisure, and health and beauty categories. These are typically the type of numbers we will work with when we set pruning thresholds in the following section." 1246 | ] 1247 | }, 1248 | { 1249 | "cell_type": "markdown", 1250 | "metadata": { 1251 | "id": "BvoKwShnjC4z", 1252 | "colab_type": "text" 1253 | }, 1254 | "source": [ 1255 | "### **Aggregate the dataset further by combining product sub-categories**" 1256 | ] 1257 | }, 1258 | { 1259 | "cell_type": "markdown", 1260 | "metadata": { 1261 | "id": "vHIEvm0zjLk7", 1262 | "colab_type": "text" 1263 | }, 1264 | "source": [ 1265 | "* **We can use the inclusive OR operation to combine multiple categories.**\n", 1266 | " * `True | True = True`\n", 1267 | " * `True | False = True`\n", 1268 | " * `False | True = True`\n", 1269 | " * `False | False = False`" 1270 | ] 1271 | }, 1272 | { 1273 | "cell_type": "code", 1274 | "metadata": { 1275 | "id": "qLGroyNZlX1U", 1276 | "colab_type": "code", 1277 | "colab": {} 1278 | }, 1279 | "source": [ 1280 | "# Merge books_imported and books_technical.\n", 1281 | "\n", 1282 | "\n", 1283 | "# Print support values for books, books_imported, and books_technical.\n" 1284 | ], 1285 | "execution_count": null, 1286 | "outputs": [] 1287 | }, 1288 | { 1289 | "cell_type": "markdown", 1290 | "metadata": { 1291 | "id": "9E2CHkMfqHx8", 1292 | "colab_type": "text" 1293 | }, 1294 | "source": [ 1295 | "### **Compute the confidence metric**" 1296 | ] 1297 | }, 1298 | { 1299 | "cell_type": "markdown", 1300 | "metadata": { 1301 | "id": "vcPL0Iy3rY2m", 1302 | "colab_type": "text" 1303 | }, 1304 | "source": [ 1305 | "* **The support metric doesn't provide information about direction.**\n", 1306 | " * $support(antecedent, consequent) = support(consequent, antecedent)$\n", 1307 | "\n", 1308 | "* **The confidence metric has a direction.**\n", 1309 | " * Conditional probability of the consequent, given the antecedent." 1310 | ] 1311 | }, 1312 | { 1313 | "cell_type": "markdown", 1314 | "metadata": { 1315 | "id": "C2JLWdbnr8Nl", 1316 | "colab_type": "text" 1317 | }, 1318 | "source": [ 1319 | "$$confidence(antecedent \\rightarrow consequent)= \\frac{support(antecedent, consequent)}{support(antecedent)}$$" 1320 | ] 1321 | }, 1322 | { 1323 | "cell_type": "markdown", 1324 | "metadata": { 1325 | "id": "RC3Zc1uWHsm3", 1326 | "colab_type": "text" 1327 | }, 1328 | "source": [ 1329 | "* A high value of confidence indicates that the antecedent and consequent are associated and that the direction of the association runs from the antecedent to the consequent." 1330 | ] 1331 | }, 1332 | { 1333 | "cell_type": "code", 1334 | "metadata": { 1335 | "id": "US-Z5hs7qGFl", 1336 | "colab_type": "code", 1337 | "colab": {} 1338 | }, 1339 | "source": [ 1340 | "# Compute joint support for sports_leisure and health_beauty.\n", 1341 | "\n", 1342 | "\n", 1343 | "# Print confidence metric for sports_leisure -> health_beauty.\n" 1344 | ], 1345 | "execution_count": null, 1346 | "outputs": [] 1347 | }, 1348 | { 1349 | "cell_type": "code", 1350 | "metadata": { 1351 | "id": "oRacycCMtKeh", 1352 | "colab_type": "code", 1353 | "colab": {} 1354 | }, 1355 | "source": [ 1356 | "# Print confidence for health_beauty -> sports_leisure.\n" 1357 | ], 1358 | "execution_count": null, 1359 | "outputs": [] 1360 | }, 1361 | { 1362 | "cell_type": "markdown", 1363 | "metadata": { 1364 | "id": "QC_SuQBMtRsa", 1365 | "colab_type": "text" 1366 | }, 1367 | "source": [ 1368 | "**Insight:** $confidence(sports\\_leisure \\rightarrow health\\_beauty)$ was higher than $confidence(health\\_beauty \\rightarrow sports\\_leisure)$. Since the two have the same joint support, the confidence measures will differ only by the antecedent support. The higher confidence metric means that the antecedent has *lower* support." 1369 | ] 1370 | }, 1371 | { 1372 | "cell_type": "markdown", 1373 | "metadata": { 1374 | "id": "iKm1vKDFldpt", 1375 | "colab_type": "text" 1376 | }, 1377 | "source": [ 1378 | "---\n", 1379 | "

Q&A 3

\n", 1380 | "\n", 1381 | "---" 1382 | ] 1383 | }, 1384 | { 1385 | "cell_type": "markdown", 1386 | "metadata": { 1387 | "id": "kXwJcMyViCcW", 1388 | "colab_type": "text" 1389 | }, 1390 | "source": [ 1391 | "## **The Apriori Algorithm and Pruning**" 1392 | ] 1393 | }, 1394 | { 1395 | "cell_type": "markdown", 1396 | "metadata": { 1397 | "id": "h7JGKJX3wsYK", 1398 | "colab_type": "text" 1399 | }, 1400 | "source": [ 1401 | "**The Apriori algorithm** identifies frequent (high support) itemsets using something called the Apriori principle, which states that a superset that contains an infrequent item is also infrequent." 1402 | ] 1403 | }, 1404 | { 1405 | "cell_type": "markdown", 1406 | "metadata": { 1407 | "id": "Xru6-VBAwZz9", 1408 | "colab_type": "text" 1409 | }, 1410 | "source": [ 1411 | "![alt](https://github.com/datacamp/Market-Basket-Analysis-in-python-live-training/blob/master/assets/apriori_algorithm.png?raw=True)" 1412 | ] 1413 | }, 1414 | { 1415 | "cell_type": "markdown", 1416 | "metadata": { 1417 | "id": "-tgWgdJozS3g", 1418 | "colab_type": "text" 1419 | }, 1420 | "source": [ 1421 | "**Pruning** is the process of removing itemsets or association rules, typically based on the application of a metric threshold. " 1422 | ] 1423 | }, 1424 | { 1425 | "cell_type": "markdown", 1426 | "metadata": { 1427 | "id": "O-nGUl2Cx951", 1428 | "colab_type": "text" 1429 | }, 1430 | "source": [ 1431 | "**The `mlxtend` module will enable us to apply the Apriori algorithm, perform pruning, and compute association rules.**" 1432 | ] 1433 | }, 1434 | { 1435 | "cell_type": "markdown", 1436 | "metadata": { 1437 | "id": "RPqHxNBczJFD", 1438 | "colab_type": "text" 1439 | }, 1440 | "source": [ 1441 | "### **Applying the Apriori algorithm**" 1442 | ] 1443 | }, 1444 | { 1445 | "cell_type": "markdown", 1446 | "metadata": { 1447 | "id": "_9_EnUE5NSYC", 1448 | "colab_type": "text" 1449 | }, 1450 | "source": [ 1451 | "* Use `apriori()` to identify frequent itemsets.\n", 1452 | "* `min_support` set the item frequency threshold used for pruning." 1453 | ] 1454 | }, 1455 | { 1456 | "cell_type": "code", 1457 | "metadata": { 1458 | "id": "oTdaZ39VljgV", 1459 | "colab_type": "code", 1460 | "colab": {} 1461 | }, 1462 | "source": [ 1463 | "from mlxtend.frequent_patterns import apriori\n", 1464 | "\n", 1465 | "# Apply apriori algorithm to data with min support threshold of 0.01.\n", 1466 | "\n", 1467 | "\n", 1468 | "# Print frequent itemsets.\n" 1469 | ], 1470 | "execution_count": null, 1471 | "outputs": [] 1472 | }, 1473 | { 1474 | "cell_type": "markdown", 1475 | "metadata": { 1476 | "id": "iQ3gYEK2yPCi", 1477 | "colab_type": "text" 1478 | }, 1479 | "source": [ 1480 | "**Observation 1:** `apriori` returns a `DataFrame` with a `support` column and an `itemsets` column.\n", 1481 | "\n", 1482 | "**Observation 2:** By default `apriori` returns itemset numbers, rather than labels. We can change this by using the `use_colnames` parameter.\n", 1483 | "\n", 1484 | "**Insight:** All itemsets with a support of greater than 0.01 contain a single item." 1485 | ] 1486 | }, 1487 | { 1488 | "cell_type": "markdown", 1489 | "metadata": { 1490 | "id": "aOawxLPlN0O3", 1491 | "colab_type": "text" 1492 | }, 1493 | "source": [ 1494 | "* Use `use_colnames` to use item names, rather than integer IDs." 1495 | ] 1496 | }, 1497 | { 1498 | "cell_type": "code", 1499 | "metadata": { 1500 | "id": "L_MrF6Ckllde", 1501 | "colab_type": "code", 1502 | "colab": {} 1503 | }, 1504 | "source": [ 1505 | "# Apply apriori algorithm to data with min support threshold of 0.001.\n", 1506 | "\n", 1507 | "\n", 1508 | "# Print frequent itemsets.\n" 1509 | ], 1510 | "execution_count": null, 1511 | "outputs": [] 1512 | }, 1513 | { 1514 | "cell_type": "markdown", 1515 | "metadata": { 1516 | "id": "jHkW8KmCyp0h", 1517 | "colab_type": "text" 1518 | }, 1519 | "source": [ 1520 | "**Insight:** Lowering the support threshold increased the number of itemsets returned and even yielded itemsets with more than one item." 1521 | ] 1522 | }, 1523 | { 1524 | "cell_type": "code", 1525 | "metadata": { 1526 | "id": "lT7h9l_Glnf6", 1527 | "colab_type": "code", 1528 | "colab": {} 1529 | }, 1530 | "source": [ 1531 | "# Apply apriori algorithm to data with min support threshold of 0.00005.\n", 1532 | "\n", 1533 | "\n", 1534 | "# Print frequent itemsets.\n" 1535 | ], 1536 | "execution_count": null, 1537 | "outputs": [] 1538 | }, 1539 | { 1540 | "cell_type": "markdown", 1541 | "metadata": { 1542 | "id": "pHmgv5bqzYmN", 1543 | "colab_type": "text" 1544 | }, 1545 | "source": [ 1546 | "**Observation:** Notice how low we must set the support threshold (0.005%) to return a high number of itemsets with more than one item." 1547 | ] 1548 | }, 1549 | { 1550 | "cell_type": "code", 1551 | "metadata": { 1552 | "id": "j273yq0Alo0H", 1553 | "colab_type": "code", 1554 | "colab": {} 1555 | }, 1556 | "source": [ 1557 | "# Apply apriori algorithm to data with a two-item limit.\n" 1558 | ], 1559 | "execution_count": null, 1560 | "outputs": [] 1561 | }, 1562 | { 1563 | "cell_type": "markdown", 1564 | "metadata": { 1565 | "id": "CTo4IKmy0BXr", 1566 | "colab_type": "text" 1567 | }, 1568 | "source": [ 1569 | "**Insight:** What do we gain from the apriori algorithm? We start off with $2^{71}$ potential itemsets and immediately reduce it to 113 without enumerating all $2^{71}$ itemsets." 1570 | ] 1571 | }, 1572 | { 1573 | "cell_type": "markdown", 1574 | "metadata": { 1575 | "id": "kBAjlmz-zuWk", 1576 | "colab_type": "text" 1577 | }, 1578 | "source": [ 1579 | "### **Computing association rules from Apriori output**" 1580 | ] 1581 | }, 1582 | { 1583 | "cell_type": "markdown", 1584 | "metadata": { 1585 | "id": "E74Qv6fTOARv", 1586 | "colab_type": "text" 1587 | }, 1588 | "source": [ 1589 | "* Use `association_rules()` to compute and prune association rules from output of `apriori()`." 1590 | ] 1591 | }, 1592 | { 1593 | "cell_type": "code", 1594 | "metadata": { 1595 | "id": "AF6jhDkmlpM8", 1596 | "colab_type": "code", 1597 | "colab": {} 1598 | }, 1599 | "source": [ 1600 | "from mlxtend.frequent_patterns import association_rules\n", 1601 | "\n", 1602 | "# Recover association rules using support and a minimum threshold of 0.0001.\n", 1603 | "\n", 1604 | "\n", 1605 | "# Print rules header.\n" 1606 | ], 1607 | "execution_count": null, 1608 | "outputs": [] 1609 | }, 1610 | { 1611 | "cell_type": "markdown", 1612 | "metadata": { 1613 | "id": "sz3aVycbz6pt", 1614 | "colab_type": "text" 1615 | }, 1616 | "source": [ 1617 | "**Notice that `association_rules` automatically computes seven metrics.**" 1618 | ] 1619 | }, 1620 | { 1621 | "cell_type": "markdown", 1622 | "metadata": { 1623 | "id": "3_rM_sYn0nPa", 1624 | "colab_type": "text" 1625 | }, 1626 | "source": [ 1627 | "### **Pruning association rules**" 1628 | ] 1629 | }, 1630 | { 1631 | "cell_type": "code", 1632 | "metadata": { 1633 | "id": "jejN-n9Blql6", 1634 | "colab_type": "code", 1635 | "colab": {} 1636 | }, 1637 | "source": [ 1638 | "# Recover association rules using confidence threshold of 0.01.\n", 1639 | "\n", 1640 | "\n", 1641 | "# Print rules.\n" 1642 | ], 1643 | "execution_count": null, 1644 | "outputs": [] 1645 | }, 1646 | { 1647 | "cell_type": "code", 1648 | "metadata": { 1649 | "id": "_JhzujmIlv7C", 1650 | "colab_type": "code", 1651 | "colab": {} 1652 | }, 1653 | "source": [ 1654 | "# Select rules with a consequent support above 0.095.\n", 1655 | "\n", 1656 | "\n", 1657 | "# Print rules.\n" 1658 | ], 1659 | "execution_count": null, 1660 | "outputs": [] 1661 | }, 1662 | { 1663 | "cell_type": "markdown", 1664 | "metadata": { 1665 | "id": "nsSaO4EU2mwX", 1666 | "colab_type": "text" 1667 | }, 1668 | "source": [ 1669 | "### **The leverage metric**\n", 1670 | "\n", 1671 | "* **Leverage provides a sanity check.**\n", 1672 | " * $support(antecedent, consequent)$ = joint support in data.\n", 1673 | " * $support(antecedent) * support(consequent)$ = expected joint support for unrelated antecedent and consequent." 1674 | ] 1675 | }, 1676 | { 1677 | "cell_type": "markdown", 1678 | "metadata": { 1679 | "id": "mfYjXEBTIqj7", 1680 | "colab_type": "text" 1681 | }, 1682 | "source": [ 1683 | "* **Leverage formula**\n", 1684 | " * $$leverage(antecendent, consequent) = \n", 1685 | "support(antecedent, consequent) - support(antecedent) * support(consequent)$$" 1686 | ] 1687 | }, 1688 | { 1689 | "cell_type": "markdown", 1690 | "metadata": { 1691 | "id": "b9AxLt1rIqQU", 1692 | "colab_type": "text" 1693 | }, 1694 | "source": [ 1695 | "* **For most problems, we will discard itemsets with negative leverage.**\n", 1696 | " * Negative leverage means that the items appear together less frequently than we would expect if they were randomly and independently distributed across transactions." 1697 | ] 1698 | }, 1699 | { 1700 | "cell_type": "code", 1701 | "metadata": { 1702 | "id": "6Cjpf3B8lwVG", 1703 | "colab_type": "code", 1704 | "colab": {} 1705 | }, 1706 | "source": [ 1707 | "# Select rules with leverage higher than 0.0.\n", 1708 | "\n", 1709 | "\n", 1710 | "# Print rules.\n" 1711 | ], 1712 | "execution_count": null, 1713 | "outputs": [] 1714 | }, 1715 | { 1716 | "cell_type": "markdown", 1717 | "metadata": { 1718 | "id": "JFSSJq5u5qmQ", 1719 | "colab_type": "text" 1720 | }, 1721 | "source": [ 1722 | "**Insight:** The Apriori algorithm reduced the number of itemsets from $2^{71}$ to 113. Pruning allowed us to identify to a single association rule that could be useful for cross-promotional purposes: $\\{home\\_comfort\\} \\rightarrow \\{bed\\_bath\\_table\\}$." 1723 | ] 1724 | }, 1725 | { 1726 | "cell_type": "markdown", 1727 | "metadata": { 1728 | "id": "mbqWXtzR0sif", 1729 | "colab_type": "text" 1730 | }, 1731 | "source": [ 1732 | "### **Visualizing patterns in metrics**" 1733 | ] 1734 | }, 1735 | { 1736 | "cell_type": "markdown", 1737 | "metadata": { 1738 | "id": "jdIvXojWOphd", 1739 | "colab_type": "text" 1740 | }, 1741 | "source": [ 1742 | "* `sns.scatterplot()` creates a scatterplot from two columns in a `DataFrame`." 1743 | ] 1744 | }, 1745 | { 1746 | "cell_type": "code", 1747 | "metadata": { 1748 | "id": "JiA_CqVLlyss", 1749 | "colab_type": "code", 1750 | "colab": { 1751 | "base_uri": "https://localhost:8080/", 1752 | "height": 356 1753 | }, 1754 | "outputId": "51ef2101-bf5c-4f6d-81fb-a6c0745f12f3" 1755 | }, 1756 | "source": [ 1757 | "# Recover association rules with a minimum support greater than 0.000001.\n", 1758 | "\n", 1759 | "\n", 1760 | "# Plot leverage against confidence.\n", 1761 | "\n" 1762 | ], 1763 | "execution_count": null, 1764 | "outputs": [ 1765 | { 1766 | "output_type": "execute_result", 1767 | "data": { 1768 | "text/plain": [ 1769 | "" 1770 | ] 1771 | }, 1772 | "metadata": { 1773 | "tags": [] 1774 | }, 1775 | "execution_count": 130 1776 | }, 1777 | { 1778 | "output_type": "display_data", 1779 | "data": { 1780 | "image/png": "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\n", 1781 | "text/plain": [ 1782 | "
" 1783 | ] 1784 | }, 1785 | "metadata": { 1786 | "tags": [] 1787 | } 1788 | } 1789 | ] 1790 | }, 1791 | { 1792 | "cell_type": "markdown", 1793 | "metadata": { 1794 | "id": "v95xAd8803y3", 1795 | "colab_type": "text" 1796 | }, 1797 | "source": [ 1798 | "**Insight 1**: Leverage and confidence contain some of the same information about the strength of an association." 1799 | ] 1800 | }, 1801 | { 1802 | "cell_type": "markdown", 1803 | "metadata": { 1804 | "id": "S-BoO_JMmkdV", 1805 | "colab_type": "text" 1806 | }, 1807 | "source": [ 1808 | "---\n", 1809 | "

Q&A 4

\n", 1810 | "\n", 1811 | "---" 1812 | ] 1813 | }, 1814 | { 1815 | "cell_type": "code", 1816 | "metadata": { 1817 | "id": "j7v4_LSImSy2", 1818 | "colab_type": "code", 1819 | "colab": {} 1820 | }, 1821 | "source": [ 1822 | "# Experiment on your own here." 1823 | ], 1824 | "execution_count": null, 1825 | "outputs": [] 1826 | } 1827 | ] 1828 | } --------------------------------------------------------------------------------