From 936e8856d6404ec1f2b5f406c64e10337f301114 Mon Sep 17 00:00:00 2001 From: Martin van Rongen Date: Mon, 12 Aug 2024 10:30:20 +0100 Subject: [PATCH] 1208 fixes --- .../execute-results/html.json | 4 ++-- .../figure-html/unnamed-chunk-11-1.png | Bin 27042 -> 26834 bytes .../figure-html/unnamed-chunk-8-1.png | Bin 48878 -> 48893 bytes materials/cs5_practical_model-comparisons.qmd | 1 - 4 files changed, 2 insertions(+), 3 deletions(-) diff --git a/_freeze/materials/cs5_practical_model-comparisons/execute-results/html.json b/_freeze/materials/cs5_practical_model-comparisons/execute-results/html.json index c9845ef..26396ba 100644 --- a/_freeze/materials/cs5_practical_model-comparisons/execute-results/html.json +++ b/_freeze/materials/cs5_practical_model-comparisons/execute-results/html.json @@ -1,8 +1,8 @@ { - "hash": "7b0974de604b85246fd1ccb22fafb1ea", + "hash": "a2a4e1c753bbaeab658737ef09621db9", "result": { "engine": "knitr", - "markdown": "---\ntitle: \"Model comparisons\"\n---\n\n::: {.cell}\n\n:::\n\n::: {.cell}\n\n:::\n\n\n::: {.callout-tip}\n#### Learning outcomes\n\n**Questions**\n\n- How do I compare linear models?\n- How do decide which one is the \"best\" model?\n\n**Objectives**\n\n- Be able to compare models using the Akaike Information Criterion (AIC)\n- Use AIC in the context of Backwards Stepwise Elimination\n\n:::\n\n## Libraries and functions\n\n::: {.callout-note collapse=\"true\"}\n## Click to expand\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n### Libraries\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# A collection of R packages designed for data science\nlibrary(tidyverse)\n\n# Converts stats functions to a tidyverse-friendly format\nlibrary(rstatix)\n\n# Creates diagnostic plots using ggplot2\nlibrary(ggResidpanel)\n\n# Helper functions for tidying data\nlibrary(broom)\n```\n:::\n\n\n### Functions\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Calculates the Akaike Information Criterion\nstats::AIC()\n\n# Performs a backwards step-wise elimination process\nstats::step()\n```\n:::\n\n\n## Python\n\n### Libraries\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# A fundamental package for scientific computing in Python\nimport numpy as np\n\n# A Python data analysis and manipulation tool\nimport pandas as pd\n\n# Simple yet exhaustive stats functions.\nimport pingouin as pg\n\n# Python equivalent of `ggplot2`\nfrom plotnine import *\n\n# Statistical models, conducting tests and statistical data exploration\nimport statsmodels.api as sm\n\n# Convenience interface for specifying models using formula strings and DataFrames\nimport statsmodels.formula.api as smf\n```\n:::\n\n\n### Functions\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# Reads in a .csv file\npandas.read_csv()\n\n# Creates a model from a formula and data frame\nstatsmodels.formula.api.ols()\n```\n:::\n\n\n:::\n:::\n:::\n\n## Purpose and aim\n\nIn the previous example we used a single data set and fitted five linear models to it depending on which predictor variables we used. Whilst this was fun (seriously, what else would you be doing right now?) it seems that there should be a \"better way\". Well, thankfully there is! In fact there a several methods that can be used to compare different models in order to help identify \"the best\" model. More specifically, we can determine if a full model (which uses all available predictor variables and interactions) is necessary to appropriately describe the dependent variable, or whether we can throw away some of the terms (e.g. an interaction term) because they don’t offer any useful predictive power.\n\nHere we will use the **Akaike Information Criterion** in order to compare different models.\n\n## Data and hypotheses\n\nThis section uses the `data/CS5-ladybird.csv` data set. This data set comprises of 20 observations of three variables (one dependent and two predictor). This records the clutch size (`eggs`) in a species of ladybird, alongside two potential predictor variables; the mass of the female (`weight`), and the colour of the male (`male`) which is a categorical variable.\n\n## Backwards Stepwise Elimination\n\nFirst, we load the data and visualise it:\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\nladybird <- read_csv(\"data/CS5-ladybird.csv\")\n\nhead(ladybird)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 6 × 4\n id male weight eggs\n \n1 1 Wild 10.6 27\n2 2 Wild 10.6 26\n3 3 Wild 12.5 28\n4 4 Wild 11.4 24\n5 5 Wild 14.9 30\n6 6 Wild 10.4 21\n```\n\n\n:::\n:::\n\n\nWe can visualise the data by `male`, so we can see if the eggs clutch size differs a lot between the two groups:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nggplot(ladybird,\n aes(x = male, y = eggs)) +\n geom_boxplot() +\n geom_jitter(width = 0.05)\n```\n\n::: {.cell-output-display}\n![](cs5_practical_model-comparisons_files/figure-html/unnamed-chunk-8-1.png){width=672}\n:::\n:::\n\n\nWe can also plot the egg clutch size against the weight, again for each male colour group:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# visualise the data\nggplot(ladybird,\n aes(x = weight, y = eggs,\n colour = male)) +\n geom_point() +\n scale_color_brewer(palette = \"Dark2\")\n```\n\n::: {.cell-output-display}\n![](cs5_practical_model-comparisons_files/figure-html/unnamed-chunk-9-1.png){width=672}\n:::\n:::\n\n\n## Python\n\n\n::: {.cell}\n\n```{.python .cell-code}\nladybird_py = pd.read_csv(\"data/CS5-ladybird.csv\")\n```\n:::\n\n\nWe can visualise the data by `male`, so we can see if the eggs clutch size differs a lot between the two groups:\n\n\n::: {.cell}\n\n```{.python .cell-code}\n(ggplot(ladybird_py,\n aes(x = \"male\", y = \"eggs\")) +\n geom_boxplot() +\n geom_jitter(width = 0.05))\n```\n\n::: {.cell-output-display}\n![](cs5_practical_model-comparisons_files/figure-html/unnamed-chunk-11-1.png){width=614}\n:::\n:::\n\n\nWe can also plot the egg clutch size against the weight, again for each male colour group:\n\n\n::: {.cell}\n\n```{.python .cell-code}\n(ggplot(ladybird_py,\n aes(x = \"weight\", y = \"eggs\",\n colour = \"male\")) +\n geom_point() +\n scale_color_brewer(type = \"qual\",\n palette = \"Dark2\"))\n```\n\n::: {.cell-output-display}\n![](cs5_practical_model-comparisons_files/figure-html/unnamed-chunk-12-3.png){width=614}\n:::\n:::\n\n\n:::\n\nWe can see a few things already:\n\n1. There aren't a huge number of data points in each group, so we need to be a bit cautious with drawing any firm conclusions.\n2. There is quite some spread in the egg clutch sizes, with two observations in the `Melanic` group being rather low.\n3. From the box plot, there does not seem to be much difference in the egg clutch size between the two male colour groups.\n4. The scatter plot suggests that egg clutch size seems to increase somewhat linearly as the weight of the female goes up. There does not seem to be much difference between the two male colour groups in this respect.\n\n### Comparing models with AIC (step 1)\n\nWe start with the complete or _full_ model, that takes into account any possible interaction between `weight` and `male`.\n\nNext, we define the reduced model. This is the next, most simple model. In this case we're removing the interaction and constructing an additive model.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the full model\nlm_full <- lm(eggs ~ weight * male,\n data = ladybird)\n```\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the additive model\nlm_add <- lm(eggs ~ weight + male,\n data = ladybird)\n```\n:::\n\n\nWe then extract the AIC values for each of the models:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nAIC(lm_full)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 100.0421\n```\n\n\n:::\n\n```{.r .cell-code}\nAIC(lm_add)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 99.19573\n```\n\n\n:::\n:::\n\n\n## Python\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# create the model\nmodel = smf.ols(formula= \"eggs ~ weight * C(male)\", data = ladybird_py)\n# and get the fitted parameters of the model\nlm_full_py = model.fit()\n```\n:::\n\n::: {.cell}\n\n```{.python .cell-code}\n# create the additive linear model\nmodel = smf.ols(formula= \"eggs ~ weight + C(male)\", data = ladybird_py)\n# and get the fitted parameters of the model\nlm_add_py = model.fit()\n```\n:::\n\n\nWe then extract the AIC values for each of the models:\n\n\n::: {.cell}\n\n```{.python .cell-code}\nlm_full_py.aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n98.04206256815984\n```\n\n\n:::\n\n```{.python .cell-code}\nlm_add_py.aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n97.19572958073036\n```\n\n\n:::\n:::\n\n:::\n\nEach line tells you the AIC score for that model. The full model has 4 parameters (the intercept, the coefficient for the continuous variable `weight`, the coefficient for the categorical variable `male` and a coefficient for the interaction term `weight:male`). The additive model has a lower AIC score with only 3 parameters (since we’ve dropped the interaction term). There are different ways of interpreting AIC scores but the most widely used interpretation says that:\n\n* if the difference between two AIC scores is **greater than 2**, then the model with the **smallest AIC score is more supported** than the model with the higher AIC score\n* if the difference between the two models’ AIC scores is **less than 2** then both models are **equally well supported**\n\nThis choice of language (supported vs significant) is deliberate and there are areas of statistics where AIC scores are used differently from the way we are going to use them here (ask if you want a bit of philosophical ramble from me). However, in this situation we will use the AIC scores to decide whether our reduced model is at least as good as the full model. Here since the difference in AIC scores is less than 2, we can say that dropping the interaction term has left us with a model that is both simpler (fewer terms) and as least as good (AIC score) as the full model. As such our additive model `eggs ~ weight + male` is designated our current _working minimal model_.\n\n### Comparing models with AIC (step 2)\n\nNext, we see which of the remaining terms can be dropped. We will look at the models where we have dropped both `male` and `weight` (i.e. `eggs ~ weight` and `eggs ~ male`) and compare their AIC values with the AIC of our current minimal model (`eggs ~ weight + male`). If the AIC values of at least one of our new reduced models is lower (or at least no more than 2 greater) than the AIC of our current minimal model, then we can drop the relevant term and get ourselves a new minimal model. If we find ourselves in a situation where we can drop more than one term we will drop the term that gives us the model with the lowest AIC.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\nDrop the variable `weight` and examine the AIC:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the model\nlm_male <- lm(eggs ~ male,\n data = ladybird)\n\n# extract the AIC\nAIC(lm_male)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 118.7093\n```\n\n\n:::\n:::\n\n\nDrop the variable `male` and examine the AIC:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the model\nlm_weight <- lm(eggs ~ weight,\n data = ladybird)\n\n# extract the AIC\nAIC(lm_weight)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 97.52601\n```\n\n\n:::\n:::\n\n\n## Python\n\nDrop the variable `weight` and examine the AIC:\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# create the model\nmodel = smf.ols(formula= \"eggs ~ C(male)\", data = ladybird_py)\n# and get the fitted parameters of the model\nlm_male_py = model.fit()\n\n# extract the AIC\nlm_male_py.aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n116.7092646564482\n```\n\n\n:::\n:::\n\n\nDrop the variable `male` and examine the AIC:\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# create the model\nmodel = smf.ols(formula= \"eggs ~ weight\", data = ladybird_py)\n# and get the fitted parameters of the model\nlm_weight_py = model.fit()\n\n# extract the AIC\nlm_weight_py.aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n95.52601286248304\n```\n\n\n:::\n:::\n\n:::\n\nConsidering both outputs together and comparing with the AIC of our current minimal model, we can see that dropping `male` has decreased the AIC further, whereas dropping `weight` has actually increased the AIC and thus worsened the model quality.\n\nHence we can drop `male` and our new minimal model is `eggs ~ weight`.\n\n### Comparing models with AIC (step 3)\n\nOur final comparison is to drop the variable `weight` and compare this simple model with a null model (`eggs ~ 1`), which assumes that the clutch size is constant across all parameters.\n\nDrop the variable `weight` and see if that has an effect:\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the model\nlm_null <- lm(eggs ~ 1,\n data = ladybird)\n\n# extract the AIC\nAIC(lm_null)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 117.2178\n```\n\n\n:::\n:::\n\n\n## Python\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# create the model\nmodel = smf.ols(formula= \"eggs ~ 1\", data = ladybird_py)\n# and get the fitted parameters of the model\nlm_null_py = model.fit()\n\n# extract the AIC\nlm_null_py.aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n115.21783038624153\n```\n\n\n:::\n:::\n\n\n:::\n\nThe AIC of our null model is quite a bit larger than that of our current minimal model `eggs ~ weight` and so we conclude that `weight` is important. As such our minimal model is `eggs ~ weight`.\n\nSo, in summary, we could conclude that:\n\n> Female size is a useful predictor of clutch size, but male type is not so important.\n\nAt this point we can then continue analysing this minimal model, by checking the diagnostic plots and checking the assumptions. If they all pan out, then we can continue with an ANOVA.\n\n## Notes on Backwards Stepwise Elimination\n\nThis method of finding a minimal model by starting with a full model and removing variables is called backward stepwise elimination. Although regularly practised in data analysis, there is increasing criticism of this approach, with calls for it to be avoided entirely.\n\nWhy have we made you work through this procedure then? Given their prevalence in academic papers, it is very useful to be aware of these procedures and to know that there are issues with them. In other situations, using AIC for model comparisons are justified and you will come across them regularly. Additionally, there may be situations where you feel there are good reasons to drop a parameter from your model – using this technique you can justify that this doesn’t affect the model fit. Taken together, using backwards stepwise elimination for model comparison is still a useful technique.\n\n::: {.callout-note}\n## Automatic BSE in R (but not Python)\n\nPerforming backwards stepwise elimination manually can be quite tedious. Thankfully R acknowledges this and there is a single inbuilt function called `step()` that can perform all of the necessary steps for you using AIC.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the full model\nlm_full <- lm(eggs ~ weight * male,\n data = ladybird)\n\n# perform backwards stepwise elimination\nstep(lm_full)\n```\n:::\n\n\nThis will perform a full backwards stepwise elimination process and will find the minimal model for you.\n\nYes, I could have told you this earlier, but where’s the fun in that? (it is also useful for you to understand the steps behind the technique I suppose...)\n\nWhen doing this in Python, you are a bit stuck. There does not seem to be an equivalent function. If you want to cobble something together yourself, then use [this link](https://stackoverflow.com/questions/22428625/does-statsmodels-or-another-python-package-offer-an-equivalent-to-rs-step-f) as a starting point.\n\n:::\n\n## Exercises\n\nWe are going to practice the backwards stepwise elimination technique on some of the data sets we analysed previously.\n\nFor each of the following data sets I would like you to:\n\n1. Define the response variable\n2. Define the relevant predictor variables\n3. Define relevant interactions\n4. Perform a backwards stepwise elimination and discover the minimal model using AIC\n\nNB: if an interaction term is significant then any main factor that is part of the interaction term cannot be dropped from the model.\n\nPerform a BSE on the following data sets:\n\n* `data/CS5-trees.csv`\n* `data/CS5-pm2_5.csv`\n\n### BSE: Trees {#sec-exr_bsetrees}\n\n:::{.callout-exercise}\n\n\n{{< level 2 >}}\n\n\n\nBSE on `trees`:\n\n::: {.callout-answer collapse=\"true\"}\n## Answer\n\nLet's start by reading in the data and checking which variables are in the data set.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrees <- read_csv(\"data/CS5-trees.csv\")\n\nhead(trees)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 6 × 3\n girth height volume\n \n1 8.3 70 10.3\n2 8.6 65 10.3\n3 8.8 63 10.2\n4 10.5 72 16.4\n5 10.7 81 18.8\n6 10.8 83 19.7\n```\n\n\n:::\n:::\n\n\n## Python\n\nFirst, we read in the data (if needed) and have a look at the variables:\n\n\n::: {.cell}\n\n```{.python .cell-code}\ntrees_py = pd.read_csv(\"data/CS5-trees.csv\")\n\ntrees_py.head()\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n girth height volume\n0 8.3 70 10.3\n1 8.6 65 10.3\n2 8.8 63 10.2\n3 10.5 72 16.4\n4 10.7 81 18.8\n```\n\n\n:::\n:::\n\n\n:::\n\n1. The response variable is `volume`\n2. The predictor variables are `girth` and `height`\n3. The only possible interaction term is `girth:height`\n4. We perform a BSE on the model using the `step()` function\n\nThe full model is `volume ~ girth * height`.\n\nWe perform the BSE as follows:\n\n::: {.panel-tabset group=\"language\"}\n## R\n\nDefine the model and use the `step()` function:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the full model\nlm_trees <- lm(volume ~ girth * height,\n data = trees)\n\n# perform BSE\nstep(lm_trees)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nStart: AIC=65.49\nvolume ~ girth * height\n\n Df Sum of Sq RSS AIC\n 198.08 65.495\n- girth:height 1 223.84 421.92 86.936\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\nCall:\nlm(formula = volume ~ girth * height, data = trees)\n\nCoefficients:\n (Intercept) girth height girth:height \n 69.3963 -5.8558 -1.2971 0.1347 \n```\n\n\n:::\n:::\n\n\n## Python\n\nWe first define the full model, then the model without the interaction (`model_1`).\n\nWe extract the AICs for both models. Because we do not have an automated way of performing the BSE, we're stringing together a few operations to make the code a bit more concise (getting the `.fit()` of the model and immediately extracting the `aic` value):\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# define the models\nmodel_full = smf.ols(formula= \"volume ~ girth * height\",\n data = trees_py)\n\nmodel_1 = smf.ols(formula= \"volume ~ girth + height\",\n data = trees_py)\n\n# get the AIC of the model\nmodel_full.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n153.46916240903528\n```\n\n\n:::\n\n```{.python .cell-code}\nmodel_1.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n174.9099729872703\n```\n\n\n:::\n:::\n\n\n:::\n\nThis BSE approach only gets as far as the first step (trying to drop the interaction term). We see immediately that dropping the interaction term makes the model worse. This means that the best model is still the full model.\n:::\n:::\n\n### BSE: Air pollution {#sec-exr_bsepollution}\n\n:::{.callout-exercise}\n\n\n{{< level 2 >}}\n\n\n\nPerform a BSE on `pm2_5`. Let's start by reading in the data and checking which variables are in the data set.\n\n::: {.callout-answer collapse=\"true\"}\n## Answer\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\npm2_5 <- read_csv(\"data/CS5-pm2_5.csv\")\n\nhead(pm2_5)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 6 × 6\n avg_temp date location pm2_5 rain_mm wind_m_s\n \n1 4.5 01/01/2019 inner 17.1 2.3 3.87\n2 4.9 01/01/2019 outer 10.8 2.3 5.84\n3 4.3 02/01/2019 inner 14.9 2.3 3.76\n4 4.8 02/01/2019 outer 11.4 2.3 6 \n5 4 03/01/2019 inner 18.5 1.4 2.13\n6 4.5 03/01/2019 outer 15.0 1.4 2.57\n```\n\n\n:::\n:::\n\n\n## Python\n\n\n::: {.cell}\n\n```{.python .cell-code}\npm2_5_py = pd.read_csv(\"data/CS5-pm2_5.csv\")\n\npm2_5_py.head()\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n avg_temp date location pm2_5 rain_mm wind_m_s\n0 4.5 01/01/2019 inner 17.126 2.3 3.87\n1 4.9 01/01/2019 outer 10.821 2.3 5.84\n2 4.3 02/01/2019 inner 14.884 2.3 3.76\n3 4.8 02/01/2019 outer 11.416 2.3 6.00\n4 4.0 03/01/2019 inner 18.471 1.4 2.13\n```\n\n\n:::\n:::\n\n:::\n\n1. The response variable is `pm2_5`\n2. The predictor variables are all the variables, apart from `date` and `pm2_5`. It would be strange to try and create a model that relies on each individual measurement!\n3. We can add the `wind_m_s:location` interaction, since it appeared that there is a difference between `inner` and `outer` London pollution levels, in relation to wind speed\n4. We can start the backwards stepwise elimination with the following model:\n\n`pm2_5 ~ avg_temp + rain_mm + wind_m_s * location`\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the model\nlm_pm2_5 <- lm(pm2_5 ~ avg_temp + rain_mm + wind_m_s * location,\n data = pm2_5)\n\n# perform BSE\nstep(lm_pm2_5)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nStart: AIC=41.08\npm2_5 ~ avg_temp + rain_mm + wind_m_s * location\n\n Df Sum of Sq RSS AIC\n- rain_mm 1 0.351 760.01 39.412\n- avg_temp 1 1.804 761.47 40.806\n 759.66 41.075\n- wind_m_s:location 1 134.820 894.48 158.336\n\nStep: AIC=39.41\npm2_5 ~ avg_temp + wind_m_s + location + wind_m_s:location\n\n Df Sum of Sq RSS AIC\n- avg_temp 1 1.758 761.77 39.098\n 760.01 39.412\n- wind_m_s:location 1 134.530 894.54 156.385\n\nStep: AIC=39.1\npm2_5 ~ wind_m_s + location + wind_m_s:location\n\n Df Sum of Sq RSS AIC\n 761.77 39.098\n- wind_m_s:location 1 136.95 898.72 157.788\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\nCall:\nlm(formula = pm2_5 ~ wind_m_s + location + wind_m_s:location, \n data = pm2_5)\n\nCoefficients:\n (Intercept) wind_m_s locationouter \n 18.2422 -0.2851 -2.0597 \nwind_m_s:locationouter \n -0.4318 \n```\n\n\n:::\n:::\n\n\n## Python\n\nWe first define the full model, again stringing together a few operations to be more concise.\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# define the model\nmodel_full = smf.ols(formula= \"pm2_5 ~ avg_temp + rain_mm + wind_m_s * C(location)\", data = pm2_5_py)\n\n# get the AIC of the model\nmodel_full.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2112.725435984824\n```\n\n\n:::\n:::\n\n\nCan we drop the interaction term or any of the remaining main effects?\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# define the model\nmodel_1 = smf.ols(\n formula= \"pm2_5 ~ avg_temp + rain_mm + wind_m_s + C(location)\",\n data = pm2_5_py)\n \nmodel_2 = smf.ols(\n formula= \"pm2_5 ~ avg_temp + wind_m_s * C(location)\",\n data = pm2_5_py)\n \nmodel_3 = smf.ols(\n formula= \"pm2_5 ~ rain_mm + wind_m_s * C(location)\",\n data = pm2_5_py)\n\n# get the AIC of the models\nmodel_1.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2229.9865962235162\n```\n\n\n:::\n\n```{.python .cell-code}\nmodel_2.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2111.06230638372\n```\n\n\n:::\n\n```{.python .cell-code}\nmodel_3.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2112.456639492829\n```\n\n\n:::\n\n```{.python .cell-code}\n# compare to the full model\nmodel_full.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2112.725435984824\n```\n\n\n:::\n:::\n\n\nThe AIC goes up quite a bit if we drop the interaction term. This means that we cannot drop the interaction term, _nor any of the main effects that are included in the interaction_. These are `wind_m_s` and `location`.\n\nThe model with the lowest AIC is the one without the `rain_mm` term, so our working model is:\n\n\n::: {.cell}\n\n```{.python .cell-code}\nworking_model = smf.ols(\n formula= \"pm2_5 ~ avg_temp + wind_m_s * C(location)\",\n data = pm2_5_py)\n```\n:::\n\n\nNow we can again check if dropping the `avg_temp` term or the `wind_m_s:location` interaction has any effect on the model performance:\n\n\n::: {.cell}\n\n```{.python .cell-code}\nmodel_1 = smf.ols(\n formula= \"pm2_5 ~ wind_m_s * C(location)\",\n data = pm2_5_py)\n \nmodel_2 = smf.ols(\n formula= \"pm2_5 ~ avg_temp + wind_m_s + C(location)\",\n data = pm2_5_py)\n\n# get the AIC of the models\nmodel_1.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2110.748543452394\n```\n\n\n:::\n\n```{.python .cell-code}\nmodel_2.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2228.035595215867\n```\n\n\n:::\n\n```{.python .cell-code}\nworking_model.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2111.06230638372\n```\n\n\n:::\n:::\n\n\nThis shows that dropping the `avg_temp` term lowers the AIC, whereas dropping the interaction term makes the model markedly worse.\n\nSo, our new working model is:\n\n\n::: {.cell}\n\n```{.python .cell-code}\nworking_model = smf.ols(\n formula= \"pm2_5 ~ wind_m_s * C(location)\",\n data = pm2_5_py)\n```\n:::\n\n\nLastly, now we've dropped the `avg_temp` term we can do one final check on the interaction term:\n\n\n::: {.cell}\n\n```{.python .cell-code}\nmodel_1 = smf.ols(\n formula= \"pm2_5 ~ wind_m_s + C(location) + wind_m_s + C(location)\",\n data = pm2_5_py)\n\nmodel_1.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2229.438631394105\n```\n\n\n:::\n\n```{.python .cell-code}\nworking_model.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2110.748543452394\n```\n\n\n:::\n:::\n\n\nDropping the interaction _still_ makes the model worse.\n:::\n\nOur minimal model is thus:\n\n`pm2_5 ~ wind_m_s + location + wind_m_s:location`\n\n:::\n:::\n\n## Summary\n\n::: {.callout-tip}\n#### Key points\n\n- We can use Backwards Stepwise Elimination (BSE) on a full model to see if certain terms add to the predictive power of the model or not\n- The AIC allows us to compare different models - if there is a difference in AIC of more than 2 between two models, then the smallest AIC score is more supported\n:::\n", + "markdown": "---\ntitle: \"Model comparisons\"\n---\n\n::: {.cell}\n\n:::\n\n::: {.cell}\n\n:::\n\n\n::: {.callout-tip}\n#### Learning outcomes\n\n**Questions**\n\n- How do I compare linear models?\n- How do decide which one is the \"best\" model?\n\n**Objectives**\n\n- Be able to compare models using the Akaike Information Criterion (AIC)\n- Use AIC in the context of Backwards Stepwise Elimination\n\n:::\n\n## Libraries and functions\n\n::: {.callout-note collapse=\"true\"}\n## Click to expand\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n### Libraries\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# A collection of R packages designed for data science\nlibrary(tidyverse)\n\n# Converts stats functions to a tidyverse-friendly format\nlibrary(rstatix)\n\n# Creates diagnostic plots using ggplot2\nlibrary(ggResidpanel)\n\n# Helper functions for tidying data\nlibrary(broom)\n```\n:::\n\n\n### Functions\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Calculates the Akaike Information Criterion\nstats::AIC()\n\n# Performs a backwards step-wise elimination process\nstats::step()\n```\n:::\n\n\n## Python\n\n### Libraries\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# A fundamental package for scientific computing in Python\nimport numpy as np\n\n# A Python data analysis and manipulation tool\nimport pandas as pd\n\n# Simple yet exhaustive stats functions.\nimport pingouin as pg\n\n# Python equivalent of `ggplot2`\nfrom plotnine import *\n\n# Statistical models, conducting tests and statistical data exploration\nimport statsmodels.api as sm\n\n# Convenience interface for specifying models using formula strings and DataFrames\nimport statsmodels.formula.api as smf\n```\n:::\n\n\n### Functions\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# Reads in a .csv file\npandas.read_csv()\n\n# Creates a model from a formula and data frame\nstatsmodels.formula.api.ols()\n```\n:::\n\n\n:::\n:::\n\n## Purpose and aim\n\nIn the previous example we used a single data set and fitted five linear models to it depending on which predictor variables we used. Whilst this was fun (seriously, what else would you be doing right now?) it seems that there should be a \"better way\". Well, thankfully there is! In fact there a several methods that can be used to compare different models in order to help identify \"the best\" model. More specifically, we can determine if a full model (which uses all available predictor variables and interactions) is necessary to appropriately describe the dependent variable, or whether we can throw away some of the terms (e.g. an interaction term) because they don’t offer any useful predictive power.\n\nHere we will use the **Akaike Information Criterion** in order to compare different models.\n\n## Data and hypotheses\n\nThis section uses the `data/CS5-ladybird.csv` data set. This data set comprises of 20 observations of three variables (one dependent and two predictor). This records the clutch size (`eggs`) in a species of ladybird, alongside two potential predictor variables; the mass of the female (`weight`), and the colour of the male (`male`) which is a categorical variable.\n\n## Backwards Stepwise Elimination\n\nFirst, we load the data and visualise it:\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\nladybird <- read_csv(\"data/CS5-ladybird.csv\")\n\nhead(ladybird)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 6 × 4\n id male weight eggs\n \n1 1 Wild 10.6 27\n2 2 Wild 10.6 26\n3 3 Wild 12.5 28\n4 4 Wild 11.4 24\n5 5 Wild 14.9 30\n6 6 Wild 10.4 21\n```\n\n\n:::\n:::\n\n\nWe can visualise the data by `male`, so we can see if the eggs clutch size differs a lot between the two groups:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nggplot(ladybird,\n aes(x = male, y = eggs)) +\n geom_boxplot() +\n geom_jitter(width = 0.05)\n```\n\n::: {.cell-output-display}\n![](cs5_practical_model-comparisons_files/figure-html/unnamed-chunk-8-1.png){width=672}\n:::\n:::\n\n\nWe can also plot the egg clutch size against the weight, again for each male colour group:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# visualise the data\nggplot(ladybird,\n aes(x = weight, y = eggs,\n colour = male)) +\n geom_point() +\n scale_color_brewer(palette = \"Dark2\")\n```\n\n::: {.cell-output-display}\n![](cs5_practical_model-comparisons_files/figure-html/unnamed-chunk-9-1.png){width=672}\n:::\n:::\n\n\n## Python\n\n\n::: {.cell}\n\n```{.python .cell-code}\nladybird_py = pd.read_csv(\"data/CS5-ladybird.csv\")\n```\n:::\n\n\nWe can visualise the data by `male`, so we can see if the eggs clutch size differs a lot between the two groups:\n\n\n::: {.cell}\n\n```{.python .cell-code}\n(ggplot(ladybird_py,\n aes(x = \"male\", y = \"eggs\")) +\n geom_boxplot() +\n geom_jitter(width = 0.05))\n```\n\n::: {.cell-output-display}\n![](cs5_practical_model-comparisons_files/figure-html/unnamed-chunk-11-1.png){width=614}\n:::\n:::\n\n\nWe can also plot the egg clutch size against the weight, again for each male colour group:\n\n\n::: {.cell}\n\n```{.python .cell-code}\n(ggplot(ladybird_py,\n aes(x = \"weight\", y = \"eggs\",\n colour = \"male\")) +\n geom_point() +\n scale_color_brewer(type = \"qual\",\n palette = \"Dark2\"))\n```\n\n::: {.cell-output-display}\n![](cs5_practical_model-comparisons_files/figure-html/unnamed-chunk-12-3.png){width=614}\n:::\n:::\n\n\n:::\n\nWe can see a few things already:\n\n1. There aren't a huge number of data points in each group, so we need to be a bit cautious with drawing any firm conclusions.\n2. There is quite some spread in the egg clutch sizes, with two observations in the `Melanic` group being rather low.\n3. From the box plot, there does not seem to be much difference in the egg clutch size between the two male colour groups.\n4. The scatter plot suggests that egg clutch size seems to increase somewhat linearly as the weight of the female goes up. There does not seem to be much difference between the two male colour groups in this respect.\n\n### Comparing models with AIC (step 1)\n\nWe start with the complete or _full_ model, that takes into account any possible interaction between `weight` and `male`.\n\nNext, we define the reduced model. This is the next, most simple model. In this case we're removing the interaction and constructing an additive model.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the full model\nlm_full <- lm(eggs ~ weight * male,\n data = ladybird)\n```\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the additive model\nlm_add <- lm(eggs ~ weight + male,\n data = ladybird)\n```\n:::\n\n\nWe then extract the AIC values for each of the models:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nAIC(lm_full)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 100.0421\n```\n\n\n:::\n\n```{.r .cell-code}\nAIC(lm_add)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 99.19573\n```\n\n\n:::\n:::\n\n\n## Python\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# create the model\nmodel = smf.ols(formula= \"eggs ~ weight * C(male)\", data = ladybird_py)\n# and get the fitted parameters of the model\nlm_full_py = model.fit()\n```\n:::\n\n::: {.cell}\n\n```{.python .cell-code}\n# create the additive linear model\nmodel = smf.ols(formula= \"eggs ~ weight + C(male)\", data = ladybird_py)\n# and get the fitted parameters of the model\nlm_add_py = model.fit()\n```\n:::\n\n\nWe then extract the AIC values for each of the models:\n\n\n::: {.cell}\n\n```{.python .cell-code}\nlm_full_py.aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n98.04206256815984\n```\n\n\n:::\n\n```{.python .cell-code}\nlm_add_py.aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n97.19572958073036\n```\n\n\n:::\n:::\n\n:::\n\nEach line tells you the AIC score for that model. The full model has 4 parameters (the intercept, the coefficient for the continuous variable `weight`, the coefficient for the categorical variable `male` and a coefficient for the interaction term `weight:male`). The additive model has a lower AIC score with only 3 parameters (since we’ve dropped the interaction term). There are different ways of interpreting AIC scores but the most widely used interpretation says that:\n\n* if the difference between two AIC scores is **greater than 2**, then the model with the **smallest AIC score is more supported** than the model with the higher AIC score\n* if the difference between the two models’ AIC scores is **less than 2** then both models are **equally well supported**\n\nThis choice of language (supported vs significant) is deliberate and there are areas of statistics where AIC scores are used differently from the way we are going to use them here (ask if you want a bit of philosophical ramble from me). However, in this situation we will use the AIC scores to decide whether our reduced model is at least as good as the full model. Here since the difference in AIC scores is less than 2, we can say that dropping the interaction term has left us with a model that is both simpler (fewer terms) and as least as good (AIC score) as the full model. As such our additive model `eggs ~ weight + male` is designated our current _working minimal model_.\n\n### Comparing models with AIC (step 2)\n\nNext, we see which of the remaining terms can be dropped. We will look at the models where we have dropped both `male` and `weight` (i.e. `eggs ~ weight` and `eggs ~ male`) and compare their AIC values with the AIC of our current minimal model (`eggs ~ weight + male`). If the AIC values of at least one of our new reduced models is lower (or at least no more than 2 greater) than the AIC of our current minimal model, then we can drop the relevant term and get ourselves a new minimal model. If we find ourselves in a situation where we can drop more than one term we will drop the term that gives us the model with the lowest AIC.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\nDrop the variable `weight` and examine the AIC:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the model\nlm_male <- lm(eggs ~ male,\n data = ladybird)\n\n# extract the AIC\nAIC(lm_male)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 118.7093\n```\n\n\n:::\n:::\n\n\nDrop the variable `male` and examine the AIC:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the model\nlm_weight <- lm(eggs ~ weight,\n data = ladybird)\n\n# extract the AIC\nAIC(lm_weight)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 97.52601\n```\n\n\n:::\n:::\n\n\n## Python\n\nDrop the variable `weight` and examine the AIC:\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# create the model\nmodel = smf.ols(formula= \"eggs ~ C(male)\", data = ladybird_py)\n# and get the fitted parameters of the model\nlm_male_py = model.fit()\n\n# extract the AIC\nlm_male_py.aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n116.7092646564482\n```\n\n\n:::\n:::\n\n\nDrop the variable `male` and examine the AIC:\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# create the model\nmodel = smf.ols(formula= \"eggs ~ weight\", data = ladybird_py)\n# and get the fitted parameters of the model\nlm_weight_py = model.fit()\n\n# extract the AIC\nlm_weight_py.aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n95.52601286248304\n```\n\n\n:::\n:::\n\n:::\n\nConsidering both outputs together and comparing with the AIC of our current minimal model, we can see that dropping `male` has decreased the AIC further, whereas dropping `weight` has actually increased the AIC and thus worsened the model quality.\n\nHence we can drop `male` and our new minimal model is `eggs ~ weight`.\n\n### Comparing models with AIC (step 3)\n\nOur final comparison is to drop the variable `weight` and compare this simple model with a null model (`eggs ~ 1`), which assumes that the clutch size is constant across all parameters.\n\nDrop the variable `weight` and see if that has an effect:\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the model\nlm_null <- lm(eggs ~ 1,\n data = ladybird)\n\n# extract the AIC\nAIC(lm_null)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 117.2178\n```\n\n\n:::\n:::\n\n\n## Python\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# create the model\nmodel = smf.ols(formula= \"eggs ~ 1\", data = ladybird_py)\n# and get the fitted parameters of the model\nlm_null_py = model.fit()\n\n# extract the AIC\nlm_null_py.aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n115.21783038624153\n```\n\n\n:::\n:::\n\n\n:::\n\nThe AIC of our null model is quite a bit larger than that of our current minimal model `eggs ~ weight` and so we conclude that `weight` is important. As such our minimal model is `eggs ~ weight`.\n\nSo, in summary, we could conclude that:\n\n> Female size is a useful predictor of clutch size, but male type is not so important.\n\nAt this point we can then continue analysing this minimal model, by checking the diagnostic plots and checking the assumptions. If they all pan out, then we can continue with an ANOVA.\n\n## Notes on Backwards Stepwise Elimination\n\nThis method of finding a minimal model by starting with a full model and removing variables is called backward stepwise elimination. Although regularly practised in data analysis, there is increasing criticism of this approach, with calls for it to be avoided entirely.\n\nWhy have we made you work through this procedure then? Given their prevalence in academic papers, it is very useful to be aware of these procedures and to know that there are issues with them. In other situations, using AIC for model comparisons are justified and you will come across them regularly. Additionally, there may be situations where you feel there are good reasons to drop a parameter from your model – using this technique you can justify that this doesn’t affect the model fit. Taken together, using backwards stepwise elimination for model comparison is still a useful technique.\n\n::: {.callout-note}\n## Automatic BSE in R (but not Python)\n\nPerforming backwards stepwise elimination manually can be quite tedious. Thankfully R acknowledges this and there is a single inbuilt function called `step()` that can perform all of the necessary steps for you using AIC.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the full model\nlm_full <- lm(eggs ~ weight * male,\n data = ladybird)\n\n# perform backwards stepwise elimination\nstep(lm_full)\n```\n:::\n\n\nThis will perform a full backwards stepwise elimination process and will find the minimal model for you.\n\nYes, I could have told you this earlier, but where’s the fun in that? (it is also useful for you to understand the steps behind the technique I suppose...)\n\nWhen doing this in Python, you are a bit stuck. There does not seem to be an equivalent function. If you want to cobble something together yourself, then use [this link](https://stackoverflow.com/questions/22428625/does-statsmodels-or-another-python-package-offer-an-equivalent-to-rs-step-f) as a starting point.\n\n:::\n\n## Exercises\n\nWe are going to practice the backwards stepwise elimination technique on some of the data sets we analysed previously.\n\nFor each of the following data sets I would like you to:\n\n1. Define the response variable\n2. Define the relevant predictor variables\n3. Define relevant interactions\n4. Perform a backwards stepwise elimination and discover the minimal model using AIC\n\nNB: if an interaction term is significant then any main factor that is part of the interaction term cannot be dropped from the model.\n\nPerform a BSE on the following data sets:\n\n* `data/CS5-trees.csv`\n* `data/CS5-pm2_5.csv`\n\n### BSE: Trees {#sec-exr_bsetrees}\n\n:::{.callout-exercise}\n\n\n{{< level 2 >}}\n\n\n\nBSE on `trees`:\n\n::: {.callout-answer collapse=\"true\"}\n## Answer\n\nLet's start by reading in the data and checking which variables are in the data set.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntrees <- read_csv(\"data/CS5-trees.csv\")\n\nhead(trees)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 6 × 3\n girth height volume\n \n1 8.3 70 10.3\n2 8.6 65 10.3\n3 8.8 63 10.2\n4 10.5 72 16.4\n5 10.7 81 18.8\n6 10.8 83 19.7\n```\n\n\n:::\n:::\n\n\n## Python\n\nFirst, we read in the data (if needed) and have a look at the variables:\n\n\n::: {.cell}\n\n```{.python .cell-code}\ntrees_py = pd.read_csv(\"data/CS5-trees.csv\")\n\ntrees_py.head()\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n girth height volume\n0 8.3 70 10.3\n1 8.6 65 10.3\n2 8.8 63 10.2\n3 10.5 72 16.4\n4 10.7 81 18.8\n```\n\n\n:::\n:::\n\n\n:::\n\n1. The response variable is `volume`\n2. The predictor variables are `girth` and `height`\n3. The only possible interaction term is `girth:height`\n4. We perform a BSE on the model using the `step()` function\n\nThe full model is `volume ~ girth * height`.\n\nWe perform the BSE as follows:\n\n::: {.panel-tabset group=\"language\"}\n## R\n\nDefine the model and use the `step()` function:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the full model\nlm_trees <- lm(volume ~ girth * height,\n data = trees)\n\n# perform BSE\nstep(lm_trees)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nStart: AIC=65.49\nvolume ~ girth * height\n\n Df Sum of Sq RSS AIC\n 198.08 65.495\n- girth:height 1 223.84 421.92 86.936\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\nCall:\nlm(formula = volume ~ girth * height, data = trees)\n\nCoefficients:\n (Intercept) girth height girth:height \n 69.3963 -5.8558 -1.2971 0.1347 \n```\n\n\n:::\n:::\n\n\n## Python\n\nWe first define the full model, then the model without the interaction (`model_1`).\n\nWe extract the AICs for both models. Because we do not have an automated way of performing the BSE, we're stringing together a few operations to make the code a bit more concise (getting the `.fit()` of the model and immediately extracting the `aic` value):\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# define the models\nmodel_full = smf.ols(formula= \"volume ~ girth * height\",\n data = trees_py)\n\nmodel_1 = smf.ols(formula= \"volume ~ girth + height\",\n data = trees_py)\n\n# get the AIC of the model\nmodel_full.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n153.46916240903528\n```\n\n\n:::\n\n```{.python .cell-code}\nmodel_1.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n174.9099729872703\n```\n\n\n:::\n:::\n\n\n:::\n\nThis BSE approach only gets as far as the first step (trying to drop the interaction term). We see immediately that dropping the interaction term makes the model worse. This means that the best model is still the full model.\n:::\n:::\n\n### BSE: Air pollution {#sec-exr_bsepollution}\n\n:::{.callout-exercise}\n\n\n{{< level 2 >}}\n\n\n\nPerform a BSE on `pm2_5`. Let's start by reading in the data and checking which variables are in the data set.\n\n::: {.callout-answer collapse=\"true\"}\n## Answer\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\npm2_5 <- read_csv(\"data/CS5-pm2_5.csv\")\n\nhead(pm2_5)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 6 × 6\n avg_temp date location pm2_5 rain_mm wind_m_s\n \n1 4.5 01/01/2019 inner 17.1 2.3 3.87\n2 4.9 01/01/2019 outer 10.8 2.3 5.84\n3 4.3 02/01/2019 inner 14.9 2.3 3.76\n4 4.8 02/01/2019 outer 11.4 2.3 6 \n5 4 03/01/2019 inner 18.5 1.4 2.13\n6 4.5 03/01/2019 outer 15.0 1.4 2.57\n```\n\n\n:::\n:::\n\n\n## Python\n\n\n::: {.cell}\n\n```{.python .cell-code}\npm2_5_py = pd.read_csv(\"data/CS5-pm2_5.csv\")\n\npm2_5_py.head()\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n avg_temp date location pm2_5 rain_mm wind_m_s\n0 4.5 01/01/2019 inner 17.126 2.3 3.87\n1 4.9 01/01/2019 outer 10.821 2.3 5.84\n2 4.3 02/01/2019 inner 14.884 2.3 3.76\n3 4.8 02/01/2019 outer 11.416 2.3 6.00\n4 4.0 03/01/2019 inner 18.471 1.4 2.13\n```\n\n\n:::\n:::\n\n:::\n\n1. The response variable is `pm2_5`\n2. The predictor variables are all the variables, apart from `date` and `pm2_5`. It would be strange to try and create a model that relies on each individual measurement!\n3. We can add the `wind_m_s:location` interaction, since it appeared that there is a difference between `inner` and `outer` London pollution levels, in relation to wind speed\n4. We can start the backwards stepwise elimination with the following model:\n\n`pm2_5 ~ avg_temp + rain_mm + wind_m_s * location`\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# define the model\nlm_pm2_5 <- lm(pm2_5 ~ avg_temp + rain_mm + wind_m_s * location,\n data = pm2_5)\n\n# perform BSE\nstep(lm_pm2_5)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nStart: AIC=41.08\npm2_5 ~ avg_temp + rain_mm + wind_m_s * location\n\n Df Sum of Sq RSS AIC\n- rain_mm 1 0.351 760.01 39.412\n- avg_temp 1 1.804 761.47 40.806\n 759.66 41.075\n- wind_m_s:location 1 134.820 894.48 158.336\n\nStep: AIC=39.41\npm2_5 ~ avg_temp + wind_m_s + location + wind_m_s:location\n\n Df Sum of Sq RSS AIC\n- avg_temp 1 1.758 761.77 39.098\n 760.01 39.412\n- wind_m_s:location 1 134.530 894.54 156.385\n\nStep: AIC=39.1\npm2_5 ~ wind_m_s + location + wind_m_s:location\n\n Df Sum of Sq RSS AIC\n 761.77 39.098\n- wind_m_s:location 1 136.95 898.72 157.788\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\nCall:\nlm(formula = pm2_5 ~ wind_m_s + location + wind_m_s:location, \n data = pm2_5)\n\nCoefficients:\n (Intercept) wind_m_s locationouter \n 18.2422 -0.2851 -2.0597 \nwind_m_s:locationouter \n -0.4318 \n```\n\n\n:::\n:::\n\n\n## Python\n\nWe first define the full model, again stringing together a few operations to be more concise.\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# define the model\nmodel_full = smf.ols(formula= \"pm2_5 ~ avg_temp + rain_mm + wind_m_s * C(location)\", data = pm2_5_py)\n\n# get the AIC of the model\nmodel_full.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2112.725435984824\n```\n\n\n:::\n:::\n\n\nCan we drop the interaction term or any of the remaining main effects?\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# define the model\nmodel_1 = smf.ols(\n formula= \"pm2_5 ~ avg_temp + rain_mm + wind_m_s + C(location)\",\n data = pm2_5_py)\n \nmodel_2 = smf.ols(\n formula= \"pm2_5 ~ avg_temp + wind_m_s * C(location)\",\n data = pm2_5_py)\n \nmodel_3 = smf.ols(\n formula= \"pm2_5 ~ rain_mm + wind_m_s * C(location)\",\n data = pm2_5_py)\n\n# get the AIC of the models\nmodel_1.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2229.9865962235162\n```\n\n\n:::\n\n```{.python .cell-code}\nmodel_2.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2111.06230638372\n```\n\n\n:::\n\n```{.python .cell-code}\nmodel_3.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2112.456639492829\n```\n\n\n:::\n\n```{.python .cell-code}\n# compare to the full model\nmodel_full.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2112.725435984824\n```\n\n\n:::\n:::\n\n\nThe AIC goes up quite a bit if we drop the interaction term. This means that we cannot drop the interaction term, _nor any of the main effects that are included in the interaction_. These are `wind_m_s` and `location`.\n\nThe model with the lowest AIC is the one without the `rain_mm` term, so our working model is:\n\n\n::: {.cell}\n\n```{.python .cell-code}\nworking_model = smf.ols(\n formula= \"pm2_5 ~ avg_temp + wind_m_s * C(location)\",\n data = pm2_5_py)\n```\n:::\n\n\nNow we can again check if dropping the `avg_temp` term or the `wind_m_s:location` interaction has any effect on the model performance:\n\n\n::: {.cell}\n\n```{.python .cell-code}\nmodel_1 = smf.ols(\n formula= \"pm2_5 ~ wind_m_s * C(location)\",\n data = pm2_5_py)\n \nmodel_2 = smf.ols(\n formula= \"pm2_5 ~ avg_temp + wind_m_s + C(location)\",\n data = pm2_5_py)\n\n# get the AIC of the models\nmodel_1.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2110.748543452394\n```\n\n\n:::\n\n```{.python .cell-code}\nmodel_2.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2228.035595215867\n```\n\n\n:::\n\n```{.python .cell-code}\nworking_model.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2111.06230638372\n```\n\n\n:::\n:::\n\n\nThis shows that dropping the `avg_temp` term lowers the AIC, whereas dropping the interaction term makes the model markedly worse.\n\nSo, our new working model is:\n\n\n::: {.cell}\n\n```{.python .cell-code}\nworking_model = smf.ols(\n formula= \"pm2_5 ~ wind_m_s * C(location)\",\n data = pm2_5_py)\n```\n:::\n\n\nLastly, now we've dropped the `avg_temp` term we can do one final check on the interaction term:\n\n\n::: {.cell}\n\n```{.python .cell-code}\nmodel_1 = smf.ols(\n formula= \"pm2_5 ~ wind_m_s + C(location) + wind_m_s + C(location)\",\n data = pm2_5_py)\n\nmodel_1.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2229.438631394105\n```\n\n\n:::\n\n```{.python .cell-code}\nworking_model.fit().aic\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n2110.748543452394\n```\n\n\n:::\n:::\n\n\nDropping the interaction _still_ makes the model worse.\n:::\n\nOur minimal model is thus:\n\n`pm2_5 ~ wind_m_s + location + wind_m_s:location`\n\n:::\n:::\n\n## Summary\n\n::: {.callout-tip}\n#### Key points\n\n- We can use Backwards Stepwise Elimination (BSE) on a full model to see if certain terms add to the predictive power of the model or not\n- The AIC allows us to compare different models - if there is a difference in AIC of more than 2 between two models, then the smallest AIC score is more supported\n:::\n", "supporting": [ "cs5_practical_model-comparisons_files" ], diff --git a/_freeze/materials/cs5_practical_model-comparisons/figure-html/unnamed-chunk-11-1.png b/_freeze/materials/cs5_practical_model-comparisons/figure-html/unnamed-chunk-11-1.png index 0e9a8c8e8e7c41e378ecf3d8e72061a0c82639c3..0f041fd85014e43a9f6a0286ca1a6626aa595fcd 100644 GIT binary patch literal 26834 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 literal 27042 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 diff --git a/_freeze/materials/cs5_practical_model-comparisons/figure-html/unnamed-chunk-8-1.png b/_freeze/materials/cs5_practical_model-comparisons/figure-html/unnamed-chunk-8-1.png index 1eb7fbe5af965514b0ef10569372e62e2c279f1b..81955cb84a6a989a8039c9beeb1ac5960e294074 100644 GIT binary patch literal 48893 zcmeFaWmwc*^ezk|7@&dyD6KqL2&gm)jERVZA|a_FUDDEwiiLovgdof)DcvPy04mZU z4T91s-S651sN=)`oG<6Yd(QQI@VZ83X8(4qz2aW?TJu0&R&o;+BNZ7L*(Ry8r!JC_ zQDVu+*5t2W3x65Yt*R#@qu6Y4@}#`cNy(FD#%2}@H?C^yNa~pCSQuzulsrL3ChXy% zsG-lSxLrIjGnwn3(%aSH;ZHU%2s}$MzF2Xmp?g6m*`(>zE5Q z*e|~QIPKfWwx?~2YH#=MGK?N@=YEwU|BB-FzNzvV$(NN38~QT&lHWYdFv=-zn(llt znw*GJ&y@Q#_r!;eEO4Mbbu^JRnF~M zm$cK(Mjsk)%XuXqa@yXyCS$_yfQ9e3d$f4P?@d}==+->zbN~j{AE28?j9&PLGo7QiSeJ&h4HJ5r=>jjmy^Tih%J84+S+S(6r zC)iJNuqMbD9JpWXp{y@h^z;5yMkl>4#%YjS&p`BRxk#Aq!{Y}B-8+76QHl`%p!_=6 z@5H&K$d>VaN%QLcg3L-;fox@H#*ztM_ZR~(7nM?eOQWD z>dEaX=G{-fAKJMqg#F3hPYTx`U9S*5w^^XbcemyB(aef!J93VTcp>*}_io$cg$sJu z{o7K?3eMq$XzR-A%8Wkyd^Ob+buv|Ue{)6&|EAWm$Lb$FMni6^j}6s97G;a?w7R|~ zXmtsxZd_RByvC)kQ7K)ZkN=Ajl~b0P+6T!|G1=?lVcd$wSCd0tT^3N9!LSvRIc45_ zvtDnl+T8caPZCdzK21Jh+vC#F@?HE}sU_Y5Z{F(qQKOB=Ld!zSoXrw1X;^JH#BVeh zACgGbY2bIE34cPhj{DfY>uzH2-oLvpE!RzV_s)i^y!JLi(c3&2G~TQ&N-(<~?G)q6 z@Y=H9G$y(Bo5ZCvzH9e7hIb6{t&uhDxWgeOv2(YZ$s7AS1LNT~&eCEH@wh_E5#wW& z*BrGR`Ng+Oyt{FGXRCYeh5nIhi=L$7&Fzm2f>KfgdLO?3^u6O6Rs4|y^c#QV6ZZ9G zb-!V*2;ZFQr~iX2!QqJTJ2R<;d4@*2Fda+$TH(39M<-R&L}=P#)|Aic7Yn-Tb>s|@ z#fXRBoVa*%?}uxx7~z`R@82rRF_uNM^^L3DH05j|t8>iJT%4V^cN$$&-Aa~0SX{Hn zd6T+8yS5kDbcpqji22OyZ+ABeEHDz7sK?s*WbTG@5VuX;W&kl z<$~3g>V1lBclNCNhUq!GMSvpo&Z|r0OjjP$?%F_mmVLvWOG%5Po?U9mSBo7#nc8#( zI>Z^(?=Sn3Jv7e~*xV}Hb7?Y9!GAq1JJywq97FNv3;ElaAfp7itW*Db2R@5Ck0tA+ z#{K;r^iBXBt!r(6dGC(D#v?ufBd@iF=@KmFbaV1i0AAV(VYl941}v(!(eSxocOOLgZy~a{ZFcv7TF2 znFu@CxWLL>|9l%;LbV=iWTS8WXqAcJ;?_4PwY`oAe)wS9-n0QJ<{px zTlZG)ue|qQ`D^n3;Igu^&axT&96j%SMpkVDZMQx~%_LQEBkQr74+1#JG$35VAkf^10}n#uGk_5e{m=KFTr9* zjr126=0nudOu<8u2N1wW@Tp*6#Y`uH9-STVb_WX^ds(mj@+3QtySiI)9Qv5QT!8(Q-;Eo~Nw#2e3}A5e)gQL@A+D_Yetx#y z=(UBp>C0x7Wqi&;G2XbEO&AI)&Nj}oZj3x0oU80Afe}tZK-F-=Dl)t88Ay@*`>@2- zMC=j=ockGR?$!3jZ7Z!SyS~kOehy2f8u_hKWi=s;+CuB96cV=TWKL{YkEIq+XO#ZeS~jr;$$b|uD)S#aJ7A_S-&0|U2$>M$-IPZ`|l9{4<8~f&dt!o zvrsljRKPT=Cw!_%Vqr_NUYVzdP>XO{-8J_eqE`AL4lYyQ?wQvpDhp)ACRyN}CLYK+ zwr}$}jbH8T_ua?JP!i_Z-n zEdCt<%9?hZrg`%dYy0T6>KsQ)C<*Q%DtlHDelP?Zu&vIs15)p2VYjY|a^<$oSpxvjgc` zxVy3nt8IY36hRkLZe`si*l4^BRHBj7)a9Nz*`ou`N@SlO;cS8RcYlr7(oqOiYpY6m zyOyasp6}#px6fpK^?5Q;l5F3bXp+0&Bj! z5aG+R9SU~hw>j9inz7mEiB{*~T^4jyDA;9TI%BHcJ-NhvU1)sHgz6W(ghZ{XQEY$7 zh;6gA^7%kP?l-siV`o1r=WccAPn6WYXPUs1qrRUdB5^+pFJ)}cXN7I(>R#HL&^=i@ z=Ku6_hfLJbhla~{9Xq?>;LPZkn9Iq%S`CfP+!ng<#&&7;9}Whp88^Od70T9KQ%=p3 z!Cv@i=eE(#lH!&*=b4^}B29;Z8nURLn9#3UE@I9LqxhoFT=6e*Hum5b=k!9o*yg(> zN8oe|_D8&^ypmVIP&q2ebvtn?twgZ#U~g~l97nqFBOQ3ucUpgbgNyTQk89P;a=L4x zl|6Hwt!Q@9a4gkHhE1oA>T;z%1ntTqO?dq!HbAM?m@ME{@pk?2^!E{5hpMO_3${9r z?hw9lB}eYZG`?s0rNs0nxugLDZK{J+HH4ne6%`?plJ?$}8>H*KnhntHb<8)gHgx(_C(JUw-G#ktG=0NOEyFd-J2PD=&0As` zEq67BXxO8+bytQ-&u`|6NjNcaFLs7bcSRN`Y0swTlp$MekTta@$MPM~1)HWkpzIo+ zZ7LNJunEhxub4Yso!Pqj!U(M6!;tgjn~cG%zTM5N`0z2WvNKF3)uGL%Zw7odHi%w* zcc))ujf|Ls>HAGW#y@v7XIU2qU-oObx*M)7u9xCKYjKt4{*B`~DWVcJOB;Zlr9L>b zPD7$BW$~syIXR|aTja4>%ZgT-=z-H+hPL|*=SzFPRZqOl zo@KEjv4syg<@sRhTu1lHzSyC)IP*1Rt2&S9cAx0GSvK>welF9+TDs{G5q=z-z@Mr3 zY3%&@+5Y-2@E-J(-JN6dsa6|PGzD9tPCheMC0FD$+05W|?C05#wlaxD$28~p@vrf% z3;AnkPT4EzQ^_#}Ixo()>O~8+-0Ub6RFhoo>aJsmd`@QdRl~L53>6y2(n$-VIM9_z!Aj-s#ea(rdtv&NxZr>dR>?=nQ2__t{!+{7&AvSr^i zF)MH1ZY)0i{prYuZE_!A1V-ex87CIdkHB>~MJ3$V+k0(l_*-JLO=HcF?eN=mMIBxe ztozx;+V68*gCqVTUMa3!7d0?xI`(|Nfb=o~KTW za=b-+B;G03WCJLqfEEe?i|-#ZraJ>WX8Pj2tfU=h&Q`gSuW6s^@bY?j@}6$7&tj<1 zaFA__UA@V$P_vbSO^sgGPd*u=xJ+Hg*~V5=T7RX9(dTHD54j#MuoEwgm&;toO;D?S zN1p`K&HKbVa+Zp8y-?BdQSAL12p;9{J;7b0M$@?a5`4MNJU1sTtaUaVqCYE4znX4xZW&f~?!YBg+|Rj#_x1vC|{Md!aS9Glh4*SzTlJkup+ z&1hGd7tC)@<>hteN88`KP6jKR}*W?_-!@jg0vZI{(Ak zXKWlCSaDs!4sitp{xb9G6^%u_!EkxjV;fyIrVuy57ncvNGaDG`Qm1gO`CjErBRUcX z4O;{OlTA}%#Syel{nI#QEvM9|5JfeunzwY@{`4#Jk8GoL<>52jOT4%f+rbOhQ;djD z%Z<9tMPh<+I(yj3G<2(FiHc)je?kGh+9m55!@g+IjB6yfNktc2Mx8SQr_ipH2V)w| z@|=tl-mc9Iyzya+ zJwU<76o^uy@qS4``3MAREG~~y9-|XdmAcXuWa}AdmMaqAklR%u$;QH7$ib*VFG_N?#puc=@w`Tn%!J2rN z$G~GBDLn7~rzoy$>Bs%-WF;HIRt+rMAw+N&(p5cA@}#9bffbVL%kI-5*`eh@x645k zkbSs{R6>@QV*#P8<%#_qD--x*m7wh~Wpuw((-&h1=n@dY5x^k!dD z{Fgub=h(OxFz5^U&mNJUAgd8l|9zmO=s_)#WMF!r;U z4{|c{U*#S85+G1Kc~NWYvS0I(QhciI_E|P!0Q!;lknLboj0#ymtMPMXo1RL}ESmww z`PoUW&Muo1@Z{|p>`pYX=Zkss9G|vIS4rIIDDv{^sfs9yijHGMagUDBFWhP1!0@+w zY=!;x$;pB-3Gb*XavUaYOuU}LLpM2wCYSD`i)n!y36PRc%&-O(I#=eZFSv z6w%z|c@w%NZuEFbxx4VnEYfP;{N{GpusZT)Uu=5sWaEwZn>wB;$UfM@apn(LNuLJy znRl?K$z%Rl6|0GbESj+t!Qw|3?2A&PGr4~1wO*vm2q)JgFiCuIx(vmQ3yBkR^FuCP z9G=3vSpjOxm}oFcmN?}U^N}=!-sk3;p6_?f-}(vcck137-@PRT8J&3=s`}#d#Lsv# zXLcVLC2_6fkATZ=1QzrFbSyUnT zczI8<1Nnr6!?>}vHHP63(}<*z0@vMjFrcTHxGFK!_gHV7^l6VrjETKs>bMNsCwh|j zXI}uglKLFsIcQ3>_gL-qtswQ{_u(8@>~=u1x-4rBkOcU+2Jl&HTl{;sfJ1Aj+4dAa zcb(Z~ZX|QYZehBsh>9!bakLV8@3-Gtjl9)~!b@IA7^ragg|P_px~umD8ozpTNERyR z&D7``8UI7#`!>+SLnfwrS5+2TBT z+o;MtCC)76eMBfKrM>UqMF_tDIpW4&huwX$DPxc%h+Q%)`<}v5&xgdu|FQg)Fz_6N zq}=tceLTM&_v;1j2t+K!{0%eb{vELp{(Ibio4F)i$ff^JRQ|hnzw`#Y_)n|+r!#+> zTH5~%(CX&Zid#W%e2H|iVvpBbQQ%%HL=;lpm9~z9}o3{jnZ32rEDFsky z?e~PJF6X>xbNT1){n@ z@(_8D=7l@;KD-&qZTz6Av;uT~<~XGL#lI4^>R>44anE95Ad#BF})X|tfL#tZN#*&0)>yuCHm*t$UP zGWDMA+Pga&*cweKSH`8MxHtvbRp%qN%9R~=1R*8WG)_f~MeJZ3N5#{STZrYueARR? z;ZtKWof(gJVW|q2DOL(k$A{mWrP*~H2-{F=8Q;6QM(XYH=n z!?O(KOlsbKg^~nk9_`p7$zpveREQ9;q9Iau-vDMr5xtsm#WmYXO9{wfv8Ag3b`Puj z31Ty<_L}�*cNr&y(u{IvKi3gP3|A-p!l)!COMFX;~s*4sO1Xnl{JEew@WXI@SH? zU$d^_W%Jlw{?0fl4ABGN)4mW-d&&txmR0K!HnyV<-sm z5@!rK<1tewu7s|5ejY{cZ1a#V?~%_P-oew)<4WUoRp)lTtm%*bi=XokVy#pu1`g#d zI#0wrgP>Ym2`*y4Vc9@hBTwb~@T#%l_cVHVu0^|%0)~#B2z+TvoDk$!yQ?DP()Np) z{dh;s`(=WSPxrh{(`RvUB3hA0IWykpH~%g2=lp1^8e?hLy6GX%B#K%WS~D$6=J;x8 zKWtr=r=WsY(i}vJg@9JO)YOup^D_T>`Z#9JT6}CCmEu zw>`jhQW*Afo^`k7&uN~Y?!tSy^X3XSK08r)I^xsQy?X9WvlALt*7J@!PCqE6#+m2? z?Rvueu6=vw<{mr$^;*^~ev?267w3@1*cdS!f9L+G!&~-6V}Cg4**~~opWO3G!H-9y z9cTcL;C5I zt?Yc+EMdfj!G3ZuC^o8^J2xlknB&y&*{ep{Rl0#D^aifsvOx`Xx_yT7>^Z6SAMS4v zsN>VvT`r30akyr0EM;$MsX)xlgElu#5XtE-J>{BTNo|}xQfOYU@gzHW)_hu!%WLJW6>HJ~mfAHh*&<^{Z$2 z!Xd@x=a*LOUW3+^vF-}<{=_0(ww}x$BIc$tfe~<^>;@v5|NO-uo~QE#yv|#Y6_^|G za(U#=leMo>TDX$80i+BRppf0TF6UH#ZLC@{$LMsKOYWz}9hE-#{rVbnoYEz%<%K7x ztw2NN&i5Qh0}YVnT)&YV<3SxNaVac%Tm}r82X@A;+cs}j!)ADl?=fDwp|Jh}n4xli z>`YL?PZj*wefHMdObSV!AZ{|$mv{mUvR?h*20D+@4PQ0WOySjs1|8p>LGmh5_Yn>LhWo&KYh+E$=ed zVPMxGrHmD10`WdeP3 zJZ?6cq?;s^5dFS?FLi3N%HO@BWslnPTP1t(jz@yQNf90^KdBuZoAwa#m_g8e`p=aD zMS6$0kOgnU`V7TAv4vvB9A9+4<{Ubvl_m6fQ-o5!~e*&VvWdoBj z5lDTffqEUt^292vn-@q?{l1ex4cEo>1x-(`9kgff!)DrMTE;2U&#ER9J=};7cbV zr(fN=Mlli06HnHsl{j!|gzf72+{2V?*b;P$aE=&I%u0@(eE4aVsmt|8O#xEn4(lU7~h$ z)ZaNE5(1hJMGKhED9=l)WQ&R~Vac-2X9f`|QVl1sKrS9WN~*8xMVUx+BS9EcZTll1Uv%907uUyR^+t_+ ze=1i9=hW1F0R<%}nbx1TxZq)$juLslo=EXI}-enGONmFGb{ zmCK`XB8~8ulrFtzK$%UMn{qO~qxi%X2wg{DwKp!m_$;#Y?o*6qSE-3bAPS|IEs&uG zOt6n5#%18ZA%n`$3?NcBrf!mzCAoC)@qNjzYHh{GW@i5N4p^WM|;16N#lwm-RX?wIV70SwrN zfEved)LQy+9|Y0<>1(6vu$$9A{5l?T#ofQ0tXt6b_O|w9v#po7(@e_9bCzHvEa!~&_&L`+(e$V4rmUxt1D=o>l8wm%?ixp zdmhxnb<+vr#P?8C`fLP3zw)DiHv!;*RkwV+FddJa$hqlJ?aUv(#W`Mx z^MF=^b)X83=8uOem;Qp&Jrxo_LeONskxzaYf>f`Z50SP*EhA8f@x#ekTr=#T)d zy1R*qzI9TW-#c6j=)C3^rwsbV)3VAkV=VUmA2& zFFh@Sf!V270snC9%NUKs+@ZAqnxXP1N2s#!jMJDm3}#Z<1@hvH&9|-R#3oZC+2Q9M zZe5&jJq+06RLf*81E1~}eR=iF0rDD-fL>ah=d0*$wVt0En$MfPjwU#*YH>x}3O$7){UG^ys zGLiEhR~0NRJwc+zDd~iv0wYAyi#1bq5x{y0<)Gb2DpYJRaby}cwE(jq9Z6K%w8VPW zlbc0CX-#U*Vv5hPYt&3bDbs0idY(p{PtS#XM{~VoST}%PufG%)FlaG%s2q!wzj z&MHfxs8l9P8oiLAf(>p55{3Q_Cc?agm&d8N#(pQ68uCShlUKApNEMWG&&_mANO zN#)1y9fcydID?@1jJA{s$J@rV8Um#L3E-`&k?qn~0RQ4utc*=GEh*jy)B}FakrICzA0$ z49&8rtRUZ!X-EeupKuV)Bk56!Gs$6LcTt*xKs5~ngY)r-RZP@22bq*-V7OH8UZ|BM znb5wNe6WM^ijC2+@x5&i(Jo?P7s=PjJSE-5V;E`%o|vfQnp$P+8%T-lBfzn_-VXmn za%}RfIIyD$QKd>NB{2k7m?UO%z#bCU3TsD!jCWJe0F)8-Czpw5_Mu7}!m4)$dzCT` zuucRdS*9*N;w!xmH?NE6yyKGATX9QEHb&#A=?~tY9_=bhF{o;Y-cb7H5oNd>KKD^s zw-s@M03FZNe<?^$P#}+bx8{@ z$mN%D=5GJF9uQbDx#x_a))Ilcxd2&~qq8?hON2P)2M^z9!=`8Rc9`GDnqWAK^M4UG zUv%|yD#3!XyOQE1loSc5mi~3WpzJ5LM#+8bD$$1eQa1TDCwY?+6PNV^)d9#Hcjp@j zl3ZJ48bP4BAy20!c#-HUk%$R+H^6%IiMWU%(8!aKv!-Zab!veR_LwT_ydWbT%O_bAUI!`4L1|ft^Ru<1Of=~t<5h; z%a4`^DNlmg=y1@jHks`Z)vA``s*Fi)-15Gu0&OtOIFz&uZdqI20sxL$^hUs{=v*<( z#@FK#>HL@GEH96XqclnXbD{|wDUftSl40<+ZrwXlgS=ZR|8s5a&-P9D;$$S5a*zS0|IiFq9WG6TL7EMt~d|F1p$xOW&z z#ZG4(nY|4ct8OzAVMS#P0qPSHX%$G0o~h*XVWp2vWswGICcN^>%6=NJMSy<_n*Hro z{2@2|w!N~({B!5m$rJ@2v$H@&HA$)jcFij%54G2a&FN1mQC;r~uae z*)iu)-WOa{6iRDc_URj~eyyP0l5NLbi*hX}rar5DhnRV0e@92ir6QF(EEjcXz9o3_ z^_Er)n|i?VJU68~D+nz)raFc4b`~*Po=>(m=z#bsuqI7q%7wBo zCRuh4_!D2$;ykgtC~}A0c)w>+WzhyzeAIz^rxD&H`@8&&pn?Hw@AdZfI)>;9RcS&H zB`egJXTWw@rnVzKg@UXI=gh=Fqp?#9*J-YGQp&C~F6pnnS;nrn8tgyQsk*aRrbrPjv~i+Z0sB4@8QOlP23u-jv3z@X#a^``9>^(%l0xoZ`v)^1|l?j=5> ze+&rlharqXVW74fozi_2X5FP>V@0X@uxcXXeoBIzJd&4^RC|Uab%<8h#BuSmg*%i+G*~=KR_t;tOmt24cg{rqXih;fNM6vM@U&i5GX; z9ZL*F^OI2V>ro@Um3U-H?>wP`+EXNgYLzX0$Y3-m1J*gvH`GsZf0qw4#qdlzXX@~LVADs9`bGoPZ^<--5pimA2w~unAro- zWu6Dy!tlNEVgp^sshfk;6wv_hVr?Hc>BcN8@+$_Es$yhLP%O}nI1UXpsYYK>!v-fN zNl)hI8a?%4(tg6zEzQ8OmbW+HUVq2A!UXS3r#Y5`=d%_1nd79 zgm_WKWqv$4Ef?;?NVS5T&M0c7;B_B|dkaYcR7b*uHlS&9MY$@eq}<(7gHbtvwMNC*5)+fI^`HMWmO@Y{yJkj2(diD_o^|I<^$l}CanorX8-f1Q>Y4%$tc^#&s7d(PGL;KS z=F^jd&3*9;O@N%Vql$>yPKmj1G~VyZq2~gJ8lp{gNGx{H-=89#C2*U2sw?Ypk* zYBSi>%kWar`dlCB6^FRPd8P`l%RtMmo{^AC1Bw1esHaXGTm@mEwRK1=j!N{UKS#2S zbJ>uhHd6;67p?Qm5tJNRxj*oNn|f}pOTue$a&bZHAXM*UDXT7OEskqlrp@ZMCzkKf z#=1~;b9f!w`gE^c+~+hfeidMD`st^w)aLB_VwGzaP;BLsgDA zi-@=sp}q;8du~^GZ+bo+b%{up@H=DXAy9iCk;$N5XeR_AbCt}WbN|}Da*S=0xn!tX z^XU24gRpOpLOewe$Ynx6vHsZ!LbEB(Ox6~;KqrH$+@GO-5S`~tNODQg5RH2n4p6Zs z?^o}F?ec`0HRV8`I$A0DV>%dddk`&Q1a$&|7BX}&6^kZFqM3uTJl&e>#FqpVIEgb} ztSqQq&Lc*Fs0I2d^Nzv-q1+JE+*NAV=dH=_;axc3Pu8p#J9jMO+A`p(mnmKWGocEhq z9K|mlWRE3{UJ>rC0#l3@{V3WOqoA0BY-M#8HhLWaJZ)3t5_*bs`cL&L=QYG=Wnsnu zd2ok|P_R?)1@fHO3!q>O>oc>%e+I~)3Oq?JXe!`v{~%Z%*|UJi@t(A>K7v z=KKB@#C=cm!L6t3IsLXo24Tl@Ws7rimYit_oOp(bWpuR}Xb?c`rj0+J>ji(>Gy|bN zw4d>vJRO1PA!^LRH`-oBmylX<+{Fzj!|G5}_+W4Fj-EtwcUgmJ)YS@Q6D|f3`EZO> zDTZVLn>D80tHH|5Be45@vOtm*D(r%070*px_XpAgQ1aBtQf{`U7}V!EV7lPK-TH%m#0W&k*M+?wv!8%Bubm+~u z3LpaU3&)?I%o_|MbQ*!^Sk})yV(<+B#xE_*5`ZtDenAM=xa{$ls>dZ!10RcnNJv4g zOn}_15UN9*A3t|_YLAR`nhpY{kX7c%8LPYrOClzSz#8l&c3RQ)5NHQZw+AAelu^l$ z>jm81xO1yetE1)o23tr%%|uI9t$9(EyOL!2B>}`2m%u2H>l@}rUI`S`<)33mksks+eo|s{%wM;C*=2Iam~3^mfjYd>W20Y$ ze}3dZ0g<<+#TaZ!0fNPmfk@&KucG!Mw#5M|F%!Q97!2TrDx+3Tj3~7ks{Ncqo3Ch3 zKpbIsCB`HK9YaK^arqH=&-)z0_2wU*(M5?>;ZA>T#`T-KCP+w{l%*ad87 z#!hhjB>~Hy@bw{DGb91Pgo-wFp*jO_IScT^KDAKf0XW(7?iKvwt zDAlj(uT4l5^YTvUU;M2}!DAP-vM-)RgeN(Pc`MZWXapWugnHNL1z9VN4KxZF)d4q* z4FYygNFZ?`)X7J!t;mCkp>?WID8M-TkL2nfJFhQ`900NAbfdFkT> z)X)`)`Qrsv6Q@Lj#Y0B4zv=xwnzEX^5E~bv$V}sKfa%lt^C-QALMAmUO8wIX%T>;# z14V7ouOYK~dyCRLxbb;7WPyH|7C}Fzqz1@nzJ4nXWy)o~Kn-a4pZwGB==&)~U*i&g ze&*8aa)Q+C&leKWb`$k_$z}f=J-F;Zu=^2R+(*bkvS~*&xx*ly^h_vIO4M~ViW4%_ z03v+SBs}Y^GWq$xxc5YDmb&Y=HX~FB=AZ;DWH^fqB7%HPTEPWNPX7?$2AG$h!hrF}^|Qz!7>{U#>|<{{s|>Hgx!GSO03#-B^%Pre&aR*JJnnny0%q-w&HFG9J=f{9N@Az{wH^iRfIOiLEWt@hUN4&`Y6jG9sC;*W31Nsk(wZ+e_P zIiR}!;01y*Kz6>qaPe}tpw^1OuNLrTwHO1w^9SVf-Cn!tbLrH1nq#6f-60((*=FP; zWOD(&GKWQefC7juY;$evI0lOU%1kU>C)^nddrq=gtLvb5&7lv}rIx~5l+;NM_Gt{? zV~G8eAPVfP-nV*e=Y$bkpba&=Cr87dL{y(RLkw!J*IG zhPCRcCDo)n2%I`jQ*4b@1xGH(QAKSnJzO=dl+O;tJ*P$P5HqL`Z_|4hFQant{+ISh zZM*=^JF2W!jLIfSUXbB9sm6MD5_)iF5a^@b{^5Z)kBQt{y(}Sp)yk9J;t;D8(J8BM z0o|m2O;P~q5u63JI#lW-Mvpa>#8FRSw^z_i@+QLa2UU#!B2HeS>-Hhz5Bgz;N`#OO zX`OAEyas*~D$23yJ)8Ax1UYMvHWWfAmG!h+dexa0v^CiMlwc2Hg(3PiWNbWK#JmmS zftc5^XGnz$9rku-R;V*S4BT0L6O)p`j7$#!8D?B1M~G}(VkiqF%a|)!oXboVPh%8uzkgDN-uqsYT-}%(>|{jBTK%yV z%@Yui&vz;>6HeaStno_8P(kGA*r&aC^=l5BkjxSsF~Gr%HIg4si#O_GBys+*uPN;L z$z=4*#o;RKEC+sr246MU8sAhWpl}kn2}Ef{ggRY_Y165$Fh?bq&{nyh^+s(lOU#`40OEM~HnlZWFE+ z8k+Y82y3%D4qrRP%Ur=j6221pF=DK)anPZ|{4FH|F;4FhC!i9riR3Rwim&_TEsV!^ z_~p&%Ks5!^KpJvGt@d=gk~bgS1>TOC2h^MtfobAs_Tmqcv09v;EE1b++NP{wtr&X4 z2IAC#A{nlpgEi0`_mx8ZE3-lmroChu+Y69Z8heGMItq4ZQuEj?4N~EA*#gqb{}!rm zWb1Vv0eWOS5%9UQG$>HB-A7sTlP1@q6z)3&GW7$lBd}ak8VMTFZbBU(L%ZGLdNTIk zkdf#yu10_b#IPD7j>n*zWW9aX+yV#N^jQbHBA-oyb%YMJK2nXbWJb52LYjkr0^}9> zOh?}w$q6SMo=-_l)!B8OicUd33v}tk`Wi&a44QskdQ1!;%*Fb2Ws>{8>~;CZVdE(Y1}fa#+=zmzE0H7iWgVO2p`#z}0T$GB zGVC5-7@1YYIzGh~GoT%0Htzom&mhj9kb%izbe-TVrh(eSvozRqlk6pGEnv-KGPLJ` z&eVY-zF@&@DA~{*M>P^WLGew={AOCK_ldiUH2}q_5(gdsGJE%TXLkk|C1s%og*h_z zTjxQAF@QRKfU1rbX7d)0QeUWg?|-qr3zRgr8F>Zb}tYG1{2^Ni7pVnnt#tDf;tJ%JRH<(hAZ}?n-uA7jd3iM+4<@0~kt!;cOyQjT3rt1wS-{5f5wwcHo$o;BstJemJg%85pg zqQDp&@{}?=m=J0-J3%oGkcp0Uk4vbPU^hY>R%$~NA*M_-(_7kx--?5%)32?6CQ3FB zu=a?*jzVG}X|WC}LM$Q*C4xmM=}Zq(?BL(afX}|6%RH6Sfgs#raVo z{QLvN0Ysdsh!+;;fT?JHIK-;63$Q&~G(av(7hUc7|k=(Z~=q|h+Ibk)!d;{MAp(R##@np2! zDzKfB;6&k-Qf|F&;E!5j?e5>6G9i=l+%{KDsBRts5Lz-zvI)w#n)~0Lk$%+*;X=|L zggVf_urUVgY*JG6BtQ2(W{a~$2mU7wx7{y4BI0-$pLo@i;0)yA+J4Fd->3*;1$+&v zvjlj+_WC5X7+}5Hh~DIkEagPRO=vt-QNJ@xV^Dt8+`bH#{6jK+u`n^QxyYo0DhY(7 zthzqXL5;9Ji+dJ>k$2flbg6D&0H5=KA9mP-8oL$%Z|&&#V(#pqI}qPQ z5HutEgXqK(H6R)Ry9i{Xi84DO#5~`w)P`Dt+jQy`IY{t|`lqF(Avd=jxnC=;{E9Qv ztq0jPXTfiG!STbrq7J?HRR$7&58j{M)h)F*DCL6<wyyKVRVSxbqwGYYmXr?CaA)Yh3Wf>sj(G!l} zKYEVlH*PizMt}1cAaGLaI%P10P^-n>5@_v8`I@K$$Hz2nUr5oxX zEbjmk$ESfJln_Ub4*2PN(lrr1bbU3?FnDMmkdHmPR&^zy3OJw7IV>Z%D~p(Xk)~IH zl9P^!Ml&xMOGq4A{TC(`^Dy-|9DW39fNVFLr2%Gh(PJ>%RKNoMc)vHIgI=p5%yu?Lwf zq6%aDquN6o_<4q*^F)CggXRuY+Y%8JO3N>nF@lPJXNU4620?0LoDm})@U3hGH8U`O zTKP^3eL{UhYU{DHvv{(O--)S&`&cS04KT@0pUdII5<>FB{4^Q$@J=@1H(4Jv)sp*0 zgy`_oU-TN*lmlW~h??QI6cX?Kn1`!$+bk5LqRsxLN(uj9&<_Hj+@r=_ywBC}#-DQw zlX>yk<4aXCQb0<7*2Y3wjQ(){4HT?{22)e$0tL`A{Jl3Ik{`keY&-~_gGa3=sRR57 zgH&h9`*VIDzcTvPW-Ba36G);p)c=Z!To}&EImGLkuhkb*Z9u%2F1S--W`7{h}-gODx7qv*5w6+4${ocP!`kytrDiT zHX0B&IERa!Y(PWH;r9W;pK)8Mn4#unBwB0!fD-f(Z>k6@{yv0q%r^BpmPB5lE4Fom zFiqZ23=3&B{JDP;AjBvDfN~46mQ4_#jDUm}fr?H_g46cZ54{Vh3A8nbHp^lz_CWLe zL*YwbU=Jd<2NXg_LOPLYsTfj`LLH+;DY+`1TmW1ZdWVHEQm)F<*5VF;T09^eMY7S$ zPurIUOoqDAh{<1@^v8=!z(i4cd*L_P_xBXBiEz#Z!4f$n+qJv^!b2F8%JTrSK7U9r z@!Jo9d&)gA*CY1FVt;*15t#OhH!hK!^YX698-w^IcF7Hq$m;ThB6mX}(5;ZA9(AOT z{2%sr>5*7E7?h4#@z(_Yc(Gj#SVR5ORZD2m?>k6*WEA?rnzl%ikbGtFsBPf2GJFe3 z{I;@+(=h0NM@V`^#Etv!2>-i<|JD}k|GS0%DboMT6)D!pM^sUa9sMHTSqaF6_26>q zQKUHIhgDNkn{{n<7!q^wOEW@2Ju(vycR$XhQSya?f!SjUZ->E!!7)-Iq%XC9YCfS* zrZI2>wsF6`9_PHa--34_&De2&t`cTZ1=u>6Q#IVIMRQxuPSb z)$Sw|qkj_`e_>6)Mm4U<)$biq%(pgh(d-r*HLR z%M{c*(l1V!Ez*O47_e2N)EjE_h0t-H?BRDP#%k<~A+eiS5#$eg+VK;MA0l_(K(IP6 zXe#&5_18H9c#{YLUJ=xB)+N@7l05qv;wRsd;wM(dcB@{2AO5L-j@L+^Y7KCsW++6z zF9bi)rFKza{11N!Uw;YVqw06|9t-9rg_?B6M;rMjn1DPH1N zj^hBDh>qj#Gtv55`d17r4s87ik<2w{v$0xK(3U$o?tR!SPW8`S#}bagnf&|`=8bj& z>zNN-^(@c5;fYFj`s#3zl*m`Y4)qpyFPE=Fm!Mk!2bUrz&gpAoZd{NNX}=aH=!h_2 zX|WE)&A8m{2(#6Oc69a9teK1W&T3VVJil0%Zw8D?x91PLQ zq#kDhy*{_i*bw z8&VWPw9(-vAYKH7wSmVGrA-ohF>(e(F->wpXD`Xwm(O8%aApf4m8;d-Q!oNxBe-6V zZ#9QM05vX{vkbjQGT!p)`1ipf(U$72`d%JH5z}2~SL+HutB<BnYDr{RO&sj;+#)fDE@5M&0zTe$`*+>4f_txX9c?1X)P* z0xV_|s6(bZ$*cZaP6;n;`F{ub|NKGfo7_11FDVyT{{_l=QKhgj6!0MG^?k&ofJ6j- zhls`XO=?C&B1bbFz-G3TCZw1Ig$2dMZq%=^XtYd%4MA=2Ylr)Z%@wTQUS0)aA55PrL8278Cow%SWg0g1oamPY)ZI~=32#Z(olqaIYDz2yrR^4hi&l2I z;V)L)M+#Z7@oLoJ!8g(z`qdYr8U)U?D&l2gM7P0IPnzUe>Ru%k3F zF&RNc+wn_3BQ^FIG{HUgfxigq{{Zt5hzp#9sXT}=9xIcIZai)+X#7ot`a8?2Vp)G# zaSj9YXshU>wgBeuhwoCC(O|$$CLV?4kX}pN`75BM zhv@+rACqPBU#L;{#Wv^y;|X*++sj(7r{Wi9;%@?#K-sR3*xuJ3wUVHYw2}I)s$k*s zYFD8DnK}IY;|ByctKWz2szqKP0H`W{1r00PkTTH}*G~$DfwQcxpadYV(d4lz+tR^TmRG4~^k>YQ3Ei2nQ7WeY8ZYu1)Tj zKY2Lg{i@2`7UVBC+2$WonOHiw85LMxQQKxolJza?>sHvY+0q7Y65B$+Q#U~dXawz4 zA|!y%*k7Cjg7r2;=RsXk=hX{`;S|f!Pgb-fr~bv*d%OWa-vZ$4(jrPJ>Nx=E%sCG5 z>X{I8Y3}=8i3f=DTnhhDCEgxt7)KME`jF|BkIIB>%c{vq7&TH$xQ=))eBke9|p>*)nz|r)W!J+9oN$J zS=E$P?|#f`bE)hIRE^jNEYWqOq3n}~{Oq4)pYX75&wRjZ`x+df6=3vou0xa0z|G)OGJRZvR?W43wB$cvNPMt_3QqdTtvSo=Akx7xAlqO{u%xO`IRE8*9&Dbex zk?kZDSqEh=rHm|ZecnGie{~G=JkR~y_jOk`SS zMmZQ7+fa7_n4=XDkpL=D4d;CyCB`BLksjNS0SJ3J!1^oci1Qj zB;w-v5QEkYI6S^^^xpln2T1%rfC<{r4UHPa89?@#h+>Bn&CNhICZl2VoN4J0r^ZT8 zbPSULzgZ-@w8{j6sYEwuKsCf>?Jq)SSA7SWYZhG~6TWe2mzFpPspp2B90ysY5wFupTgfQcb5l0LnWO>JLc&4O`Gyd~XrBtXv~X@$b^4?G^b0ahj0 z5M<2Um$O>t6Qgl}Z*!@NUlq06EaQkPZ>{KP&xjtvj;VC5ZK zy6ShDoN9wG-?{xgV(X?zcamjwSJzb^V}-%Pd1LqNE>}&STda*qj3y`b7U}!xy$Wy$ zB2oXSSix>h_vrHvZ4Y&?a;(!~z1M!?E&iaG;!#zroj3QuqEn=3*D z8-!O|d5(h)tS=JF;=&?So~nXiN-{-R4l_oCy$u(dZM0Yk#J)}HBnQreGWrd?xJvUK zkxT|Gu|klO{Siw>iG%V=5@X;@+x9_x++8S#8Q3KJ>?2jU0ijumT=JfFp`^A}&x6}B zXK@8=4NIgeRS!gr*L&s zDs2Q7VFYc&*AXRWo$5ct4&H2^gaF&}BHTv*jo50r5OOZXRITQT=2RpmO8Dg%<^Z&^ zPKI_}hQ42jHEpV;ba(GfQXJ5gYTEdXE*gkfWJZHQ-5(Hm_|w&}>$?F(7c)Pk?*1}n z5D0DcpGLq;UE5ja4HLod;Ua$tHZ4*c0uG}U5ua9Td=}WQg-GGP%_JVkl15FCbKGr+ z)XM=e_D}y8A}1XZ9ppxJ5%wzcM?Uh!FUkQkWLSgvBnBR!D<)Mdh53UHT!*q^AbmVN z3MIH%K^1KQ!KUGI?CpRk6bALFGtNdM2;CFi7J47?fs)LN3h(MDtwHeAs5)>^zhPFN zYJ)iRMT6fzD%QBnECo%4YK`x_6ufLTKEu@*T)chW0d((qwJFerKaTd6mv?N#R z#hNboI@Xy(kBtBTxKr4ey$Z5&n16`yKb_Uhf^$8&w-^A1@GwxmSislwt6?9LL^q>vD12Gc38Rm0_EFliI#9-|l~Nxxs6aG_?^W3ePDE zHb1E_&~Ba&WEd;UvIlFByv_2=1cWKIUQ5b2_r;QE1k%d+L_SaXLxv4k=_Q2WH2|!3 z5VSsk>PKB1bkWS>z^k>jwMft2HDnS9;iC63R659@`XsRM1ed7LS z{&{!|lxejv7==0O;ujz>ZmLX~RdAhHJz4t2-VY-QfS>Hw3Pc`rg=y|wj* zv@f)eq!8Da=AE#K#q z!>q#xQG6RXDj*qZTcuAx20VW57z@HZb!*{F`0bINMnP2Y57u~(bZCHB5j?_xnof12 z!OSLqdoDc1xZ=P;U>cDk`B04!HwGpQ+W#UljElpI4(mN#4G(OsK!P$tT%u9}2s58g zdpi?^FdPM=>rwXnFti`S>GS2`IDQnUJa*l0De8A^Pshz{Ycot?9xy{(#h}2gtiKpB zB#`=9@NjCY_m)DaKAP$u^O-T(!#!Yjj0}tlBAjus#tGztR}MP0M@HoA-#tNNZU)kH zM;cg0ebeTax-wfwIXn7+961k23ql}zgv7utlH7^lC3h25Xw!j|RM5dPef;&VNqb1O zS^HRTTKR;{61UbBVb=g_uh&W~Kn13m9&)eS3Sa}o5wts2`q85_q z`~^z|coFjfQF-dlsQRp}5xwegbH-m(gprv4sEFsK2D3^dJw+jJA(Q-*{nktydz5Q7+AaV2R6f+9~30+LkQ z;xiZFn*Lhvky{_)@W9iBYO5d*wSKlo;IgIg{Haxx2CEx2HRC*$r4iR)aqVf=6LMAs zg~26F5EWwg=o(qemqkEdLMj@84zu(_NuhkuP4%aYp#Z9kOazYPmoKRVew_&7$4fY7 z&$vk_Wdcv9e{F&=npqx;DGNom66#!ckdT6ZP3)9y;AET-L9N9+AIi@4hoH$Xp z2=VO`O120=yXJV(_8GBeUBx5xHrrAWf`(yAS}t}Fk*$u%0P_EBJZ|fd=n882nnNe}CPEM*-6}v#u|y$2 ztw;ovi)|egX+P_zli!Hf5ATmUg6~zH;O2~rvFs2)H?^NuTl?9jXUwX@$N$%g0>iaG z-!H9*yw4|$xGEX*jg5_qcdUCfBgB&S!L;Jqfm4`si@?A*5mHlUg-X^s3fG0t_Gtx{ z&73_Gp+NT*L?@B0b8c9h{oylR8Z~9ca-4j`YS`%#R5fSKoQV&YY=nAEHJ&axE!<3f zM;{cAzE)PvnFsuS#NTi6|9_%Z80(lj2(Dn6eE`|c&ffeOq+sEqTu8eQS(6+(0WFxy z`i`&!_tBz%Dp<)I2)IM;vV#8SR+R4|Jzpmw1ucjv)Q!4B+V4U>j%=zE&R+WzDPpt& zz$7s#ZBA?-!(UmmfhmbelN~WK0fkb|B*=scw)mqkoX5urB9G%@$oa&w%N^8S5FIk$ zna_gB)k3o5+Xc)^u`x=UV#|;=5|t~h#t7Cfv zQ55X~vC2@)1X#6|;4*Lz2444HOl|w0)!L)Q9OQD@7(u0S$+p*Mha0APdaVOd)17l^ zwT?j%ydL|xZu1-|EkhHMmD~r;muBq<=7J@eQEfaSN1ZlB`uKOeZ!LfUE2Qt=!x0RokJ5eAFSWW;o;8 z2ec*jK#EUv?7lV?dZzt@aT~D?7uBDf*d1pEs&-d+u9o|X8)p7^VuK|90hynewbzW` zJo$_N>5^(Tzn`6c%_4=x!@+;k6`aY7)5 zlp#Du3mdNxN`!B#L4X2DgYDcy+AU2Tpy`M7CimzBr6R?#;0mcwLgLUUYrtP zoQUD9_Tf~s6R=rThueA(AORtfSmw&5tw<%O_$knBJ8Qo9m~6TN1JS+$UVqp&#YON| zz1O3yTL9dNvp`M@`H4B#(fQrWphJ$VyrmlWW6Y4PrZgB#CBYk971J<03BPAN$pb#H z5Q0CazeV7wr0l42H6}E2&A|Bm#^M#5PW6fN;_&K$F<^y;LGpp*6h&h5(Z621qU0z9 zcHc>^?;du^6^qQ5oASQfKUo*0}2W0T835xiZFF7 z@*|{VY2QI&`{1!-4Q53KlY2hDX}HttVT493Sa7$S6dHh!v~GJ-reRc6NKV1(w;N>~ z(QT8}NGlf<9yn~I6BbsL;DxlTuVPh?^tYiC-q?{mjPl6WH-d;FkjeWFW+Z%@Z}8W&Zb4P(hR!TkHYQjNVGU@L1}tUL|M`VW1u%Cxlv zRn9tT>o4VDq6rDifxb*WPXJ=2cg;)acX^b3*o(|4L3G=q5UC_lMQ8hdHp;Tnc$9o8 zb8|2UcH+5xcChC54=#%5_AyEdcU8~=@%FFJKnf3p!$;wukzsx|st+Jtl1k7QwF-Q# z^I(?@=!}@l5pC2&$DvL9ZP%9v=ggqz+>zS!&{6Ll0rXW4613J^4JRX9S0P9@^CBr( z=f(A4ThiC5S-ibOl4jG(DA?$;KBO`@9a)=ygze-8Qkc^Q73ybTp!LwHoTe@4e6bhI zg)H}WfQiQj&U}_K{2^hShV05+%uOsZIgb)U4XK_%w9_!7Ve`5~iTfKz0w2 zrJjhGUSW+<2I?#U&3#>&;ay5sz95S&_Nl{)6GSO{4^rc>4-y$=xSB-98B3rgg zj0+15{r9`t!!OmB>RAVeriPYP9CFZGWbB|Gm=N{tT+{itrS*m!C3rfKaHj(%I2jil z`ge`6^ScOIqTb*TP~$g(oYk$gz#b?P7=;IyNoWNY+!Dp+WJ@`=wSd`^*p)Dwr8bge z3kV-Kk=F0?EGG2oaZ#BXf`}!A-mnZO(vL?PXmu`cCTJC;AhwJba>m_Qm zI~-;F?vdpiK>w^sOm3`o2j-6$Cu}9*k1FY7EK9K5GvgppS4j^nL(WhA8Bi@;)7Pno z5^aVni8*%cd5bI?+KNcN9AsBlDS~JPUY3dPw-|ns3ka3-jT9m#WX&{7TEJU%3kC z6{XvB+NfK3N)lX%5;~@~Ysbv)rnAsQ5Ti=B_$hfH!-r0WQ6!&}b5=ZtsI8XEuRX9w zhv&EnfLz2v#DfET_u62@v;v!>EMPx+(6%U)`GBodHe(e zjtcyc>ymj`Mg-4!o7>$_%}moU>BES~>$yW1j-va!iaw&}4fhFyshG>smSEh;QyD9H2>c5eQRPF9f@`Om^8~qZutB1K%Nt@85J!l)d=z&@E^gY6&96_+) zPTCA-`9qAZrGbuL;1hC++E;QMSl06mXKf7OWQpOBh9O1kbFo2LEfju5hR;EL!&0;z z=E*Cyfzm?}mYI8Uer)r!6`(5}rHdHV1RUs*&a`g82eboz<}Su_9cQ5UH7y=twZO~S zU=oJFy0QaG6dNqr_1xCXa^sdLX+;~lz_Z%S1eV?#tdAt5GUSihFB8%?1XYz&PY2Y+ zIxhBGSzM+cD(Cl%e1h*}?xA9E5qHX#YVl~=o{BMXsj9K^Gxi8-c$MUUYShV4(JN6% zDTD$z>GTrHh(#n%58eJM|Ncl<*GOu8TThGe~z%zVoJ(xeYRmp)w0LV z={8$*k&m@f*zh3oxMm+Ue);WU@=m(My)0_nkF0c-pw@d2&OP&AhfUDU^um8^qaaDv zx*%?POfb0! zn>Se_PLY~5w4g9?wuC)$;ys5djlKL6oz+W_vn=Mkdu5lzzy@4uBT6-R+rc-aKFtT| zj6;mUuW>U*cr(jDcZBM>Ewwlvd#^_6+|G6nv~Z9AGS z;QZwfFro3bu?XKQ)V*oIgDQ83S-3l7gWo21vRyayj zJd$0nqteAGhXTJuEnLAUywi;(0Pe8}G`PtaUI}7`dSD3kER|QT&kDA-E+3VKKPQd{ zPy9J0c(!XqSQ^KM)C6@@sR)8*cxmU!+f5ldR>PcUGP!j#%|3%A=_{qLl(8sY`6l;2 zF_*=AI{c|`+P=YSf)0Y!RG%auM;VZOC@3rTMg)jZONyj{K8f(%s|3(l326^neE70J z(B2QHaJ9WmawWtDPpl*DWRG8 z1%=2`9YLpgb@qJUPcc6Z^0Bwec8vjopG9K9f8o-`5GyAOIqj|_Umd6N=S(ZAD!n7H zxGth8gK1^qK|g1hd1q6|;$W#bCiqeWkL{Ch3d0aZSVE_O-Q3FTz4Dz|7WLTi*aUPF z4#ia~4w=Feblw>RR2&9KrD-o6Ryp{UIUwOwE=6Cf=3*1QmS~?)kaD%9o990sv z5OXB7qW*qSs^i3d?4srcKxW@!*>C=2xJ4Vi$NMQTQid%dT)Z# zV*O3J^yG>ASJ@q+$PVa)*hN;&$uNAlICWJ*{_s@sR972O$X|k5cNq6+IP3Z#h7S@< z1X9#B6trcWKD~MeJQ#BzVtk#iTi1;gFHs4YWy;x|X_uOAz>HP|m3cVf{D~x?T@gD5 zIfBB$kUKdHKgvFDE!OZo9JsuZn?aq9aSIHGIXM2x061NnI55S>3LoH%^^oWs`>4n< z^;|%r0!%lu94C_s_v%-F zyeIj+x^zg~Wv{r%DUH{D;`;kEzMpAYx?Ei4;i3bdBMuEbe8roan>HLq`{#oRcHq?z z6C2lwP2l0dQr$bIFkw^#c~M=38&|jCuc#bKLRwUO>3;Q@%Lt^!H_a0Q0;@<30E$6F70+LK`X6#*x+mb72i zZkv6TeWaP{DOW7c+WSl%n0eQI0*DUk*z44rvI2M(Tr+#=@JT%cs93rNsT$yN`dD)^Zcmz3z^gk0gk zW^yZ z3+{n`^pYZ9VJXE9R}S8DTdD?n_aVbCx5*{)mu{6A zd~-Pr3}qLAxiI(H_|p43y^@oY&%jlY?KWQBgtS)WU2MS0Ee5CZ%LU4sGtX}Uv9)cT zjTy2g*@PW0SH{Tf@`n6&xDU9j+Cf@2Gz5pdInGKFuzrhsS5V z?U7>OQM^dDDA9Wh2^V$u%O|o=Zwf2Q3r34z2y#~*Wpw?L-13H-*yj>w`_+N1=c*vbD3E0{z z-*%ed|1>|aSl~<{IovSOM7`(B&0EDqx<6V11b3c>{3_dZwY%J7$0FaJMLzepAF;@3 zIsSFZ(>=TcnmDn?=u@nnZ(j3THHyv1FrlLcJS;_w%Ev;%Dw>LGg;^sUszeNKV9-7S zZ+<)#V`|>GL#caL%fkaV+)6v9DxR^>0yft2yE+xOqm@Wz3EmIDS@&8GyAKuA9ZrH_ zTLeUc2uMV2WT|K=q(c#oQXV^gy=SS@OYx6FjB_C^;|g?{xg(+>&|TuHHiFYSQ_ywWSTJQv@z$)DMk& zOS7Je4<0efFmqBA6N}b?ANk$&z1Lh#f?U407Hk9UN?3STI;CM+q059r>^xcd@IXun zgwuVn0$;%EO$ltwAu39m=Il8HWx|>QsN-^1R+wly^2_SC`}-$3#e zR=f)Mp{o!jC@X_ukuEC@-k~YDuHaiQSdiJILs?;QUq=lWENe|c!ECpo?Jx6^brFH$ znRA!%yDXP;!<{X;9@Ze^Yz=C;gq_x(hj%#}85yBh9$7q@(!z;uIcGfE)(wfjjM>Je zNET~R2%(W zZi8pqYZHz|15^6i7B%S01SLL(0lByB zU@R0kdYZGjzGK2KbT=;EdMy1A$pQjG<3|tFWMsu%~i>~e2Ch&8^ zRXzz>%t zpgEmcuRw$1iVtJ@AE56;7Y^SKpKT<3JT#|K>I;~-FAfqW4^LAQ4gEv+A$-P{eKrzK z_0w;X^)&zC8QHC`H}9g&(acc}M`Y|Lw?$@LYH|Yl16m+;zvBa&sRVA?edz-I*!Z0q z&s^iCfvi~{?kr24nzz%39FoAT_LPPHdIor^jS}!#rJz;)T(`rI^a16oF8%xILE{kQ g6$Ade*EqV6Oi6$5k8?A4{;IrQ7ae_n>ypUBObeAy|1|e58D?0v@;!RkN z5w^1S#;Kg?W#fTlWm%G2ZQh>~kG$X4X^2_cS(>ivMSg7l?WV@dGn-1pEuOG-Zhw=7 z(byeMGn!r%a_`VB{gb?$@pqO=T5fIZVV}|>-)J}5;x8c*o5Z!R;^aHggiuBH+Jfuz zp4lhc%u8CXD+Od6bl=fI_F^iS+cxOyP1*>xZ>{#XQus|XN@a~xHKm4hfC#EjMn6~4(v%@Qi_hrK;7P18OpHMk?s65%+O~Zou(#g%2 z>N3sFlB!_JeXGJx!$h?F$E}$c-MfrP-G}*%O~o3kk472!9OE7K?fS7zJw~cTBQ8An z_@X{v&W%^g>D%jctZd2n z%A+rtRi$zfhiN}oeXcTpAJ}N6C+2RY;hTR-JtDusuFw82V+J!m`?t+?VYXGvul0Kx zQ}ufeYi(ZI=t1T=(4w9rG9dgxoytAWTDwGcTvG9hR1}|@#ifkr&oo8U=SW#AFz&g| z`IN>Rv=_cjzmvXi{%-m{>weF!_HR;OEA1j|BWyan-s*ngx7D}Rw_&x5kTt8jHX>|3 zobo)4s@pX9Tx-N}tMMP8|Q=Z$|hT@r9{Je)x1N3WZ|p*+?4N`iZ$ z7k!-FpjBc%eNTsP;km)FI@`YVimjb@Ov5s>Li>H*y!+O5nJVQF_pZ&~i}9QT zdA<2epQ5*B1)F@wq`DqD^4j{$(jtA!wJ1Zohz&;;4v0@{Wgn&al1NrPZ&D%ZW!zOT zf=QH$cAipkK2UPGgY-!K^*66Hlo+ZKSO+Gxovk?9F`wNE^p@urUEIgX>N+ql@XKV& z9M06G1`QRUAdVPbIAf%sfZ>MMlo*nmrWkT~MFRgA;2#D+7`>Uj z?aet128%g!;+U#4$za>27rM1=(xdwKAG6(}B^NwFDR@HWY*MwbV5AAp$v6i2`h?7s zemViZO=>i1ff~(b30g8APZn^*Qob^`s5ZIB@T^3F;|g2t;&P)^mHSAb_>%`uTt}pO z+#1H2rUwfe^<0yx@)U;`+a>MemX|qpkdjl_YU5Sf*h|Vp0(lBn(@#RyfAgs#83J4Ts0mxOj2{4$idY!SeX+!zHs9@6QqsR zA|WxUS4_gKH$^tgq~zKqp#ib=RFv2RN3$(=)|&`P>Tuvq(v+i|e(SM$Dv2L&*~i}Vq-2g9%T)Bj;J9~QNWXIC&D%Wt zzU_TcD`Rq>!50=v)$r_;u2QY}(8ohUdX4V0$NbQ9&*i0xIzE!#LuosUYO@;k80iiu z@_K9(*|hS_RkJbKH~O4)@ieCS#9zkLEmrxKIv%s%j}8P5!)Mu+Ni&Q-`pk~^7&8ym z#wbnneqvt^YmoVM7+7{3jr797?hhdklKR^6of0!^@=IZ<1YT|N+T3_5#iYzas<(cKXLKZ-xO(A zzrMB*?(5l8#HjwRgkb{-=}wL>dr$8a(G?>+V9kbOxnNIKGV3_j+tO#`BfgbL$En`)!esjFuT=(Z zp}d7Or`1;eiQA8NW3QptDlng zM0k1(=5%<-dq>34DM`&<*~}^>k(}Edx^?Kmbs{B=HKeA*^0+Qdgu_(T*soSePM16q zG|*yJ%41r3%N}s2uQnz}tLhZ7IZ&ph_1g898@l^A#htsw9WBn4>!)5kw$Ljp%^jaC zN31Kbn0{A+q7l>mQZU`_J3mrX)a$WOwY;G8$wBR})d~dHyo=VWVQPU<5_ZOR@92*T zf#AA;rVQiqM9mDjW?4g`dBiG!-Lb69KSu|uQ-hQz<)!Vr#Xk7-yZO&JBCBGi1ZKn4 z&Z-1v_BO28i-hd*WW9z!o_>o(h5~5W=e={>+gDpr>=0NdbEjdyCooR#w%&#$Z6=4h zb0?>J9vS#^6CGfR$7Dj2t?|^SG$Lz+ zPbZJ($GG=|Id%3Yr1&L=)RXOX@=*_Z(AQ$N?Z)r(- zRk+oOWt}ka+ahc|Io`TpQvJ!b?hwtHYsDlROK=-mcDv6{`IWP{@_H1uQ8 z_*luNFtAm8F!i%tmE>ddymxtal}8Vl$Gm&*DG({7c)nW9b!xC%R9hBZ@gz##3#s@^ z15b|H1-abSeRIlsWgSO%nk)fL|N>(jKk1d}eXHD83IX;vR_upOO4E(!FwL#OE*|;aT zEJpO_aorWd?eL(&+KF=I$#`LhDYV|V%Jn(dZ@_cCIEyoK5pxqG6OzQ3zP-D*NuZhn z|9Vlnc2TBQ^NFb|H&^OezjV zb!5G|Heb!+F=~#X>F)xbN5!dyDV`QBFOFz$!PW}&`qB&V54L|Z7jw+p?BOTUV3OWW zP&Ju+cPqaLJPem~o#W-ZIP*)?RqtT)7)GB5NWGuS|M8wD|5?;!BSqOwv~PW}UpH4j zY~(YKYsO@H)fBi+ADQcY-UZ&Quk`Y4mCfw;VA(tgsX+Vgo?Y4&pPsc1=Z}PkZ4xsm zyE7<7rkn3*nQi4V=O+JsZXl&b7HCe7*sANo!uytJ5FcTPB>H?UcbqHejhM=E&I7F5c~>1^wcLd~`bnugX~JKuJt zlj{lfkG;ww#$M4v;`-OV2hNloF5Kq*C0)>FPF|ba!D0FEH%6-$dtLioU5=Ky=Q(tlKvobnEW1%No^jeQ*QY^EfqTbUbe$xuU_3 zMKbS__Sf{8cMlGfQwzMTPL(PM5pyt$6gqMK%rvdq$_-jQY^(%sIiKa_kGb~9a<0#A zGhc6ZJ-x}|BeV7BU)dcV^Pe4CEW2iVA_8_?ZD?#PKemy1hxo`#yEh&iS)4CQ%zU|i zkFi{FH;eSoi&njd@t*RT`f zr91X#++3p4r<%>nZyyNX{pKc3RS@-ZA6UzUnR4k${_90^{RtTvQneuwaTcksHjE8f zd*+|HsP(x@W4#^cmO;Bz()L_7;7I2!_D*yCd94pmjtaGVE-!w*`ew^>r3fj$$}%6G z>@Yzwe;+3Oautsjpx9^v{cLa#&1gLSOZs_2%%Niw(mU6P^9% z<9`Nt8|Z}*)~J0dwBD!>&x7lts9;Itw*8vA@x;mxRwai_)o#!Lgb25Fl(R!(WQ0?Pf&*h5(Us3+QFaCdO zb3!RUgoz*KfAQt--2lH#jC4q6Ll%}0JTA?TSgTa6L0x+{oY-;%{skp?HHU8AIY8}p!e}-zvT9W`$|rI zW;dz|Z|i)^UocS(^ww70`y?mqBbM=1;U3nHGSbyENJTD5 zU#_Kp&8Q9F_b2szCS-*_QUTBw{6F(Ki_A}_J|;29P5rFpm%)Z6Og`J z6?Ssw!0@flnjw1&D|-TUcl1yQrt@4Km$;~jwW-jVu<#+bb z+4WRfddQk1dx$@V#WZ8TZXvdGZv%?|rl7vu;XduR!@h8FszpIe)VT5q@9s9kVBJp0 zotvkBBse3&;2MZdrk)_iQf>EMea{tB!tB)g$xOe-aO@_t!wY#GH1QusXV%E2JXTh+@cPD%arE!7IDppMZ?1*7mC#O!z)# zry;w(nbf*))`-b+|jKtS8>%@VZ}t49lr>9JPyB% zx;YM!I zsgVCIZ#GZSt@8&bF#s|zk+FH)$W_|~Sa#Ntfig5%L)z29FGuo63di81S$Wem9;4T< z(k-dq{_U(}a#d#-SIvwpFO7%}L{atiq%1AY)2nH4fZtK~3>=?b#%+(_&{8*(7A;Mt zJpcT7AYhM>(H{Sc^eavhu8edetJ~GHj}Gq5a~NoFc6cz|u{iA1HBqZ%onHAbdEujM zb?)-xv(R*LppuIKf=Sfj3%@~m<@?2(4m_c)jaKkYfjf})Y6Ig5$SqF{wH)3mFfz@-tX5lN1 z=dGfJ?*e1s&X*VC$TIYsW&IfH`=d7SiJFkX@bSuQZ8}8{YanN&5}&Y!s@8lG51AiX zmTQ0I&)T^t%W@|q=b4?2kdk!WE$i~PUfzMW10!LF%o`Gs=h+pgq4#b|)4)%p(_eh} ztsafk%*8v*;-U-NBR#&WV=H%Ja$VMy-@%`Yf=4$4J* z1$Wl?nYl(zw%#tK`4!nGoI)r?eD~o}`-bk-#D)fK>w-axsxYVaqcs9UajmW+1x<~w zJ;Ocb`jC5U5EZEIlTjrlt}+uMXVwM06w~bGp`4EJEbY(bD2rDYkDcqPd3%q&g~>zA z+ym$YmJQlLRG{qq3<4xYMVn2YAL)K%kS^^OC9N_9DbJ=P`IaA|xha zWG2A7`0%XXTyfwx~@`m37HT)+sXP(O3%vLoFX^atCkiD~eTdw<2EO#DOK2e%JuV~zW6u?mDeJkVp zmCe>kkRasNp76F0I4SB)yr<-3yy1GZ#+(n^Z$YAFOlv);h4qNFUc5A7+MgUe}lSS_Lpe>$E$#FPFUbwinYzN`uo&K4I^`Sp~;7D{$ zYf`n3WfX8h%2_=n8g%SFo>sc4RD_M0ci+0_&|k=`ZpgHk&Q+~hlzGgPkeDu)orh`D z3CrZSR63S$oNZI&@?Ll889g>-J=}3xEsF%ez9yD0rCsQ+e}bJ`mLUL6{&WP2MPJ~1 zIDVGLR(Yo7%&qs({a~X*+Y+CU>@!j9KOwWUQ$uH4u&$%#R6wOSz25HY8)^I}@R1V} z(}m@%4!I=4CJeJPS&_^$@?@-oeCxG z1u5Lba(#<+k*+;^-z&$y49&gRFZ!f?0d{?t?#4w%1TZXXPo^*|5fs=E$0*eYW3#NY1we^c`bRxfNaK&lul| zt_TEW@y25I!7^8(l9Gs3QtP#zFg`1(zQ_mZ`bXxbhFXAG7B7FX^2yOHWDKGf7Zy6{ zi%bx?3uj1onkJ(K_-j7xvoE^*ea9=sQxHEc))8l)YxwnPK%X(Ybg=6D9Y$7QKyT-i z5I!^+XIvF7b$wj;=-hEH>`BTUipo0SY?)@^q#X@++=uNVD&j%w7Cbeh!k*_M58J}H zwAg)}M(S<5h==XMfq@Ii$-qs~?>=}D>jum%fqtxmgM-arTKTS@mhg|Bi1i@Q5Z>@3 z8p4f=e5s=j-bHy)`gf=efeldE9xdb>%Hut$ZIO1;?r{<#eB-w6IBk4>8i#K*ZV@*sl!IWYgFfwF3wK}0Haa5hA#0jPhWU`S9w6d10|{4+>Z@JDSNCR)j~(# z-JM(SzW!iZ8*Ml}(+W=AGyNiuE$nh%dmI{dgZTmw6=V@?B2yoIKceJW6)jHf57vmj z$yoq*IqlOaMv+#bgiEpnh6esTdCi_#f~R_e(driXZ${HLh*6YL)yM9CWS{8gi`NzV zg0B++Kv)lo`284#SKV)Dq?u?WCzP3N-|kHVSF=33#fq^?dfCl!zp=Z!I}@m=d&jGe zpP`YPLwp+JCpM>^0Q0Mbyx?j0jLFsA-FuE8trV&q-NMEB9rrM5%4w(kJd=1B4{rTp`%RrJR zxD2o}pSxv*YC@j%*}k`bHxDGy`xMawi5ZIaLs}v^r<3s3XLMKm%~dj?EQO1w!cz10 z{djA?!Pq5GrKZ-~_uA{LT$b@`d<>*Hys$l+j+Ca24>E_WH$O*UwPp*Yb`v?@zxJkA z0?@>sCh-+lY1NhihQ$jQmhr`pt0|Q$AE>?t9(rYl)0Kbi2kcNYfJ4od#i2w;@N4Jr zE00-qhOkIVtaw%Xz4g{%VhrmLCo^C7fGVL(#WB2q zecg3b!a5u`G)VmWU`a^B4zOW{BwS^QqL7t!gn_3$v^nwGdK)07gijvdI`ngmuwtVR zkG6q0=^!L78<>+9%#*UjQiS}$OJDWeq5WSrS35qhKZySJ?cBwh$TNb7GzxlY5SVa+ zmrHK-0#G>!{?OP5p{j3b6?4QfSjAp8jP6#6e01lqhMSNNmjgB?Z3RES&wXVXw%owG=_~0a zuz4OTUG(0m&KZ}MmzVd;))Oua+I4Pyh`wg+OvnkU^hPmImY+SOoj4ycr)u9<6XmCF zNp$R>K_I*HnzxS~oepm>wklk*3x9npcb?yKf3f)9yfqZ=LJ*JHaMl8X5jeC7X|J>f zE%U6VW}vgu!l_t1o>YZ%`Xd0i_vi^_5`7$mC&XZjJQh1a9p9PAib{t~Esa>3i0K8g zw!B&*(apk9fq<)j{-=+h@WuRMq)bsZVPW*9^d0+%sz7xuE|~+=!HrK2kn@ojOb0s02rG-dXs{5G0 z?+sn`!ek@5j(D^Ce^!U4MmQs!8zmg4AdSm0qVaydixr1ATS(L%{QB_kZ=o08WPsup zaIKnpWvJEfHX}@9YiuaddVYO?jTJ7r+lT9VD?+krs%+I;kp{rl|FwFwl@H9qk#rld zO#HpxLLA}EY_jS0`+1?v^w6Tgf zs4)@WuN1Bmc3p@YZAk2HT&`V@`dNL4hrf>tn~TVOyXskRr$`a5usjp6Y?4`~{jUwg z`R};8$xYTwd|etKGia3|Wvh+r*6^{zBbeicF0468!W`^l;izSDnb*`AKIB){*JmB? z{>bAl>x!fj>r8pynv`^i^PovJ{>VhNOv@N$=uZV?Ngb*GsOo6XlWd-N!kx*bo9SX* z-c7gv>@A?wvhCu%K#PzCWFu@41P9<#ME+7gEeOpIPLPSN#NPAuloJDu0tiKk-xGi% zJkgNqL#T*6Ml0leOd~m^{r%#koOT8cy=#VNAB*zs0%AY-S|2=;r3X{rJWEbC@bFVC zm+X&y-Z@>g>`v#6Y5}2ELb?QS%H7~CTHVi;IM) zIeq#v!_u%*(Lg)C6bmsaRsrFXE^}Lmy@vb6!1reXPuq$P=;eC^ty*7*4)7^?!ya?j z>Dq$hF-j47_KPY!(Hq$U|71(?44?|? z5Bip^HX$UW6}+Qk<*c%K8%?+jhg)-_R0ZO!T>9O(3^P88@6 zAA-srWF}D9Tb9u5Rs?kz*_y_hJWS4Ca3@DX=L!LGq}SC)1o+j+;Gd`CZx_=;HOl^q zB)-keV!{o&PHheGyp7rLzlhIJRa{Is1618;CU-R6BBhndeupS_(?DaO;F=Q^}sA==dg34|~B<%jYdC(YgI zn2-RQoGLzGD8#8w96}9kVsaaOWrK>;Vx%VHqBayk#Z$SOhHfCmeR)fZn4M5WaXGSh zaNZ}*1mRX>9E#m|xV$6KF1MeMne2Pv?%d5*t35J8A; z0M^;%yNl0fLUjs|vE16q?6bz#tO{qlD@55`(X6mgZA?dO&2UPTQ0sBz7memUJ!rG< zRZq7Of9R)(R{sr3iDGxcdWI|3jU>2OV~L4@jI%HZ$z=!Kq9n*ka`{3qP-rNzY#}4y$hnTn3pKb>hE9h3BP&m(?$Sb zm5O7`CqKq*`*T*DkBgxSgca^Cm$oazJ}g@&lqKEiSenWawCnz`!5`J90mQl+`Cyf@&H#>Rm|pi)}*$H!8ZA%$WM9{@xWZk)1+1v=E1#EeRxiMcCr zK(;^tZ#Wc!Jvw4@c`&_#KO*sR2=*g&r1aZOSo5Wpiy;^Z3XhP_gKJJ)j_$?xAnnV8 zpVN|tCs5%O)N<29J(?bYOn|*Bp10Bq0CY?zn3z)SxHS$#kmi@nT16hS4y2LzUyi7U0SItCX-h59GmtRhw8IifyT3NNSF( zF(`}+R@EnzKboM>F5Qpsr$S#DAJ0n)d@PkSLy0dseK_hh2yv(uiaXcpXTiPQm~5In`rtcY(qNW7UxoJ@K4)oasY?YLHA@?_8^zn08p^o)*j=JZ6Gz3Rr^VJ zB?Rtu#)&jsV0X=PO_P-Z%k(QBM47o)xv|XgF<~{>{7o+bys!b@1gdciW$Hr0puarV zX!8ZPv24U+I{yM-0go+mRy0}c2^`9zfn&i0#f4^B^X#YY+(LDXNeyZD(1LyF!Sfwc zHzPz@dni!hBB}*Z`D)xH(+YJWX<&59?{mmAq)e?C7Ug@SWE(c$5+8oSP5{4_W&N4< z9By|uI1^lv^ZC&hw3~M!yme(W$Tk{;nFI9=9pd5r_ zAA>ls?1fENCyH1S)8BKW>a;Qz*THQXx(;fs0O@=J(3WcVZGNP6Y@tS1|EOJ53_L29 z0XH`{2Ze(k=O&!_3uih}t(9+b$_l54t%{WE3lr4UPQAC2p7et?*YAVK)GXvo7g9YG zn^5pI26v3Ut;;^T7m|iPf4=<7|K$Wfo_hOFVCLo~;P>T!GjNAP;21H0Tf5pV_}!v` znZG(kzv#YyZl@0q83_VWY3qaO}C~5}UG2_=w3q z_%x8}v>VgtY1NlVVMkDd+gUYh7%Ac`bK1qH^2Y z2gMKr(<7w!2_XMt5P6ICY2_*P&Wv?+d68}XSuj^|;7iZ_@8b!91wB;}`aCisifEH! zv2ai>N98FhThbk8A&RebR2VNzJc-Fmv^_bjL5W2u>%M8_q#BCu$}sIdnQBi`X6{ix zYd3aOGx~nuQrbTL3^5$jokMj=ED-@){23J+J6Bb@b z%4I$_es-RrC(ePyB;4q^cVS(9{Yk(EFM|(e`SeD8JwhqW9-r&#qr^=-oQAxxxT{0S z7}IquAN5RbWRP*uOxpalXlEV~bOG^Q6p$9&Z`|iRr6_)RFJ`FOp=sn>?x3qQcShK0US8*umi?nVjU_tb# zx*1AxB}LopYqyTvBqQiQQ?QjaFYAb*5(YZwrP-b?C|1ACbv~L`gTcWKLi5U3EMh%yN`jS(e>FMT3Z5x#}K3Bs}up7NmUvtmQo z?y}iaFGg;yfk>O7I?h35)RT&7bdx6r~Y^fh$KMkWZ2q4q% z@l-Rgjmc4q?{&-;&9a3=VZ?7|ie>Kp5N3pg$I2aIGbRNdsUs73orH!iy}NOs!vvBG z=lY+~1TE<|L3s63$wv{8!LMfrYChC01w%I;CqkP3*W>u85}{Ya*hg!RjM5=d+E^nT z+Y8i_sO$3++hA9G^80r(T)X&-vB) z6q_X^?LzX@!ej;7q|>QrK5R5Yfomty&PPeZwtK-u6UJIPmPApa-gzJ?N6h$}|C$>4 zX4=nCjoAfxTwlEc7ZGhc6c_@m#RDom#waH^??=1qh@bt3LihPoRO<87BN1WVi>-E5 zfz1!+(Eg5E;~b%mbaD3*REU-Z7fwVWB}q4E(^XcAoJLtzcY7wg4}$lW(vE+` z-$Y|zrIByFmY*6?3}8p*)2V4!a*w*^j6?T_c{$ zu1q#1+nVmxn9c`C{5U!~GXzdhjaOZ!d1iC4xal9;&M{REi$V?prZ^b}qoJi_9r?ouJ3 z8lp`>EdM-|6Ej%5-C2L3I6GLl_4nP4J&sG?fbV;__`2Y(S$%tVf_KFB z4Ax891}=$EBNBQj`KARJ$`|A=>(v}mm2c()q~BrXhokxGmaA z20u}FK9Dwh@N0Z4`15(8VF?SQ+$~;AxI-z>2zE+Mf3Lup>MDXm@`RFW%~rc`*K@eoDP6)BEqfWnNR<7Y+eoW{n-1kJYttPolNmxc)E<(|W6*gesIJ4RE$^gQy|nJW2!3BB z8d)F<{IO!cuYKxEbf}&SU985_OFH5HNdSG=pspuP#u3Z_p8WVBY^aY6-P-S(U0@4# zIu{NX7_`jnj!eU|JJF+E%wGxFuRmKBr!?`6$v@0^AM;>z8Av;K|Fk zke)B|W2A@f5S4Q;n~WZp0*z)DN*SR{*OuU7DA1SmhiVAJJ;Cn(o(uei7FMAT*pB40t??p~78(_Toa?}6SR`iTB7XxW@O z(~wgbs8EHZM4({ee%yLh?q1k;Xw#~I9Q8=j)sYFxC&ngIJPYc#MhRh4U<0A?k1WEc zP)J}j351+I2+;+8%Sp(9I~tiJY*~|N`?bF~BXXqw03&X?v{kGZZ?rXMA|7~q<-in8 z7dlmI_`@55oM5C`vwJsJ|Lyau&WhL~KisF>fUyVG&b{H55IIOS`3xgQVOYI;cZhN5 zAlQ-!i&+4lOn)`>_}9_;Y~wV?XlZEBnZZm&TJ+^U>Y}ZRDlm62bpK zpkEY`L>2VeK8rkEzt#P!lfURZNdha^j#AWI-_7(coCdec}FAv2*GDSXDCPMyFcx&dc1@5_faK-}~da{;|*)od0&t`8{}q(rW0tXGJc>T+Gx+(MyA} zDnq5eJCK2F{s}~_)ijjC2apCSmtL|t`{YPkuEEX%eo4M1h_G)V{-Ccg3}v@;Lh~1YU;aE!sy_;Am$)@zlm2UB zGniv0)TZIyZ$~SumZ32u-N-DSJ7ypNqC@Ohe7}S-vlj2 zf!e~0&N=dd;`2s57gHUrc{ z*&M63%MtEVrrBE{{{Hhc00xgz)P#gVl9ea#9oU5EUz7-J4`p58d@7L&tjFatfAMU7bkx z%WC$}ECgS%r6v7`sZ|zB`j619P|lp&y?^g}v5$v)nxpe0=`(6Q8a7_aWZTmiGGDe} z(uA+u_pfi+^qzH?j0unF8_sEucj>5NygzKM zQSXXy>rB(yeG0Y{U#`=XA%6&^Wh-aS(y=hRPkbWuTK$h9ihPEgMmwkg#m%Y^vL~4*Tv>5fPg3frJk?*c;q+w}oeYxdu z>%qeLwvjS`IvEF&^R4W1>CtW|>)@t5EBlW<4(8L|)$_zo(G6-eO~XGG457F$_XVIY z8Rbwoz$y*3m+71CH#dy0ej6%kDK1dQmT0j2<067NNw}_hL;QHt@A6pk5Jp~MSFkbJh z4z*bs@~mTa00TOS)1$#cYk;qboBDXG?KNGE<>SvE6`z2_aerdo+D+Ph`3KO{78%hUU$I&C=kWW3i=EQ8#1m(ke(e{2KR~gesm)xg_ish^PSVEq zag3hq#fu^nh+W(y0XEqN+H;mp^wkLszrQX(0yHiq$~ zo;zJclY2{d`c;oc;g7%znI`AP`wv989RgN=GMId!%WzU~q;Aiyg%Q-wFWrGO9Xq7z zogxjG(F_xnaY&&2p<|%>SL2Ees58Oi3nL)gR+@t%#A`6ofFv%zAEERlbsvS%$IzYn zOFx3eCBH%7*o9yYZ)$o+EsZr23CTBOf>2WJy^2tH=(8DbR)G+tO41}BIgZu4Ec_CZ zZ(o-wF=%@P$-&Dh# z0vJo*P815eXtFJSo`6p5vHb_>1lkYYJ6?^Noz6`=37!zT zOLX>}PocAAwY`xN#{z1oh?)qTMdXji95XfY0)7)mhB9kWzg)i{<1LbKftpfL5IFXV z#^a#Vt#W_n$J)tvkvecux(LNy0W@x3$k2_m&#SdpUxtXKIca)8e_5=ih@v8h&pf9R z&aG=VAb}`@In~8%$2Uap3YFdOjfXlf=g2+RYxg{hYyTw6 z+V-+=yI1t6T}r`}8UIfUrT!8dy2%6d*DYu&o7Q$6;L!$~R}}P_`AYyjyjuz%;ao_x zaGUFkA+(W1oiC%_3ayeIz`V}lg&P+o5gJmB(&D)?!T>8LO6dM*w~c!_{XHkjrx7k# zFC)(W#uB0v3>JR0)V^zFX$x(E%K)FAzhIeF-<)ja;R)u$SlUH|-hT8l_^*;&lCi%Q zQW+OZsZmnpUM0CCkpDZA^M`#Vrk%K3z&lBI6?bZQ_MYZ)Sbaj`h}q(M$8aLI8ZSjI zN9Pq?Y#Zj#@J>zXSPyuE=?>afxrTOOD9=z6b>Fo6D6emuK{&Y_M zk89CYH!pdM;O}Rs+C9#gVo(dkWEO0V{$Zc;VuHd69QpbWomjIw!pfSi$X^T029VEUyFWy&?ABT7+o>WmZt+wg9~f0x za9c~#v89rdYb{A%`1rLZ;L?(G(kZ#HbjnE98}9sE6($YItc9u#l?{Xq#rKf*ZPbl0 zb{W1P;0k$CL6yEk?CI6VvG~OvZ$=2 z3Ps!=P{{z4)IrD|DU4j0WTz;23Z11?Qh&SZDi zxIXcKGB?g%NjE}XP9##K?`)`ZCq-yz zXeS(Bh0%RhNf-Ns4UyVU-M&)m-vS?9X{Jf84AnFKwl@#Y<5l67-xh%Mpg?J@k~A|U zBlQSWLYQxkxGg|a4x$6|vQj_poen;hty{CX-So_{c>P_?{mu~K<1SN2W=z#;&h%MS zgAP0b%(J3W@VUC$Mm(JCC#9a24#yFLcUW1{C`e0|oHWgz+TmdZVs8T|tkLw;VC*;~ z%Cse*K=|I@l>kFu%Z+#HaCcJA2JRSt4)jWeiPzo4QXN0v8^S`&BQ=r0)##9V0vuHa z?RK{Vl;|T=dE|NRsL+;4Xb%wN=N!t(P7%Wwj7Y>ad!Csd1tqGT{NoQ}?~m@oiEZO7 z-GfKnybw8xJpzCTREIM3!#e%lenGg;7Ve?SU2vOk3!k4yArz!)+^3MI8yRx5_P&v` zlJP@=DkQoou<5bVI2CfdY0#AL>^VaykUjJLyKNOvX{`9=Gqj`U|IvdI&M|PJBx*Dx z`tAkUk5t=Be*$`#Xye)-hj4zlx$T_5kAe2#<$wv*^UVq~Ud=06go1|;``-fGaF~GF z0_f>r?kTz+Y>z)e8byh9y`B*l$Ax@_!B33y88oZKV?|Ep^zgzD*d`^TcCGy7j|f3@ zC=4vyPp3|}uKweS@75~F4U-bQ4~ehqUHsyTL9p2)oUXZwGD45tTgPBBC=|Dijs zxU>I@9*K*7CUSc9B02qw!2x1HHIOz8ksRn=Ri~0d^k@3HaKO0=Sj&>*8Gjs7Tn+Wi zYt6a64aW$3tZW856L(Xi=g+p;>*C=jZcy;*?@?(r%0JmU?10CJ zAU@!8bH>=VQShyAEVE<&NE_B12k2r61a1v^)#4Bdag3t22R2{5>5W=gJQv2&fZ*(8 zE=>>$+%WYc^0;}&?DgU~{1+JfZ<@Q^>zzThJIsH2$YKpsldu}>D`0U_u(Ewzw~AmM zMjdWxTDN58Z{TxMOJPIT;3+>xorY1{axw^2Lu)0Gf*xea%}Y37Jy{xtQS+^h<<}E# zD&S}H&0tJXgN;8&@oV@t7}c?(GU(s$fCrD7T8xs^NUZZc@;m`3qbLmHBl2*5oe}2? z(D`4;BCoACsy!5IHM@&zZ~r6hD|d-a`6_JrtBt3}|20n-skabD{ommrC-RD)o%HQQ z`3V$aAa2KC8p5KWgBzo17y<9i+h1Lm)o->o9L?J9Jk?~}h0Hx_8JD!x2Ap)<5jm@{S z8nhDn2|u-hzXx~5PhxJ4fQA1a-kWx}g!5G>{AN+h`3}*U$!4Y_ssH0|Y?}e&uB#Rs zQn^DClKRxOR$Cy;hy4WOpJd%TM0C?}H)sjH@ez0ldBe<>j_By<7tl}dGV0x*<4=gk ztF>U!&2Kcmt|%7SYd`AU;&Eb`0SXHPf4zc?OCQeG~XH zKD!7tpNJWS>Jm^=o7toFg^eJ*+S#_F943k70=*oy`&8JUeTEIkrEfy5_wN04EP6w{ z2XV)p`6p7%He_;T!#8!mysckVHo7Lsi2%-=o}d0rbU}SD%E}8`Wh$=!=ku zq;>U0D#&Z`_2;JRjXH4_c2P)Ld+k+1pH;pH`U1C6w)Wqv0O1XRQH?#a*F!q-#h{`| zY5b$tRs2FQYSn@Tah2rHxnXfg@v|@~5Q)RDox&p=D15eQUAK!ADSn9~q3dB?*nip5 zReMhXYN&3YZ-G_7TanjH zzj}YjdGun0G52l+y(mXvzi+NyTFm!6P&I6=X~?d&o*MMR>VsCAmut6KPua)jf?Dn_ z+4|cHSoPw+FaAHiIe1+hqERYBqm)PR<3Q+FaZtq@;`&@}&NLmeGFX$-c?%Z5JB||_ zG){^RwGBh$6r29Im@@G15WJcOg8oR#-357Dgo-Ih8Orc8 zD24*i9Z+kff%yAvRw!465Z7Qm7t?%)wJmgak{Elb|AlUa7dC<#p*_6^7ZQa>p+e6W zIC&XA8i;{p+O=5`=-C0uYSwtEZvo2k40RM-Wu2p-eRz-&r^7$+$4S1_u`))dII{nV z55CzdUIGo!5{65_!_#&6AI}p!+JlATVI!*b(e_h4dv7wSs1Z6Y{<%;1G_)|uB^QKb z9p6NN$>0%*Z$#m@qQsJcxVZb!mD4vT*HY%rKqyc}z@v7^eS!STorw#8`f6t-px_;K zxhA8Lphds%m*CL;dvgdca8u-=&Du}Vj~$XzP6T4br~!zgA<+6!0tMoGTU1wx+Gk9v zJzyg4_tCEk{$mVTOcRojeAF}JGNcJ^rx}zR>7o+wru;-tf@WITYh^OXnl)nT`Pb7k zoHyXGc6Z?kuK1rl`T5;CEIf)#HGf@DU^jSim+xFxCtljmF9N+O8va}4e<%6BUR+~oaEO42 zYUWXe!)3_v`9gN@C@_N)QN5SDJ(j>E!=J}RE1Jiyxpi{;?~+!MZ9T$<`q8ONy2393 zcA@+kB6V6p=>zHfRVkEv-HL0~PI{pSlASyCeNY zMass_yJ-~^6q=rUdg{N*-)w@Y0uz4&h~i4}iJvGy#Cwn<w!KHWTF79hvO45e37rU?4H1lmMoqSHBJQYS2(iIS_~#2B=YJvR-J% z1B2!un3&&RkoAxJ)Ij`Ge7E2?H%r0wWt6$Obx65OUVl!-4cZP2r7AjU6hex~rt)Y{ zN%UhY1}JOs2OVDqTmT06-AZ}XJfy8HX$Tz|n=JGRy8euK$?y465k-Y{d8Yhym1QtI zLmX8k^5QM>lMlC}OcJX2?mJtDI&@qMhP<~gH0>+DDZTJ@ru%SFlg=^xE){2m-LLVp#bR5 zV-?F$IKKF>=DUID;uD{<@L|mbKnxH7F|Iha`R6}_3ZM@>wEs63S#dtBVYtBn&HsqA zfZQa=Nrf!Q8@E}do<*I{k$|rLHj+c4w&yPpwi@Ogc_bbN6%a2HD5Bw%S+{S=P;!(h zng!DXMFPo|fOD6pC&#p}N}+Zk0Ic|&JJEd~p@x0srbm%tJN~RQOfsK=9qNnvG7IuT z$cr=|we(sn6pW>ibssSrARETGw&$+~%C}e@EcN-vG0~h2KGV-!=+=~Ps zDe0Jr@pYKPdW?;cKWS$C*~~q_@5&~D-R1iG>_&F53i^wk{c;Y!jnY7lT z1%1oAG&Aj&BjfAhNnsMtnq_KaP#lw#k93$k0K7@9J0h&iK=sdO=G5B&mNj*}E6i-I zkt7Y+nRRtKxH7iEN*bE@tjePCIqAN*uAA{eYQjCM^jf~4{kk>Q7;1X%2zu!s9H{6o zJK?eR+lm2N2f$kYMk%DPT-B`jN35<{0n_J0#hpEdo$yBnh<5(4dD&U92x5_dt@`Tx&CS@Lnf&NH`6+$s z>c6XJr%ueLr?GvYtEoR<<-@tm@;I_u!Tnnmm)26agN! z%ugmalo(BQ1df>u$GrBWgvgs|L+Gg+;Id?;IcF8<6qT_ph{$yv`W4ZGZlv5m^ijv+ ze{8kKLHqbfm!K{Sc(eMUr5{8(QW=U@jw2{Pa)4NZFhzSb6IJ44<;*B}%PAUxXiM4;LJihK76eQ@FDy4badcXG1MS5QI+AhFxTJ@cm_qus>&5|t zmoKWb(9Q+5em}*6@f^u+GWI*aGh*vFSP%{&v6|*k&Qc~n*gGg~{1XAZkSEMR*ByD5 zL2W9X-8_YMB;ryOuu!v4O$2{k$Jmgbyz}Q}8|%UWCq&gt-_lvI8-R=|398bVn!vnzOdY6by!l+aK4R!4=}KXk97)YrVe z&pBcJA>k7Wx8gR({$b8<)X}|*p({x*urAuOlOkseV4fsf)@n4R?@;}S%rb(Sr@kc& z=o_t$*5LxV|cN?Tifl-5JJH?MCnfW`s!=Ugk_h{%$w%1X@kGBTaq7#luT`-ow1CRdvy zT8p|=C657Xun9zPoA3>AQ9lh&HPnWquju#tKd*5hN!tS-9ymr_)UI##YnHA9%zn*+ zL+0OOzmR2bcK*sTy<~aEg=)Lly>J8>pP+PfKmTQJ1f9GjwCcHxG=jjEK-n5gupuB% zLJ_33x%A{m7Hr&isN(pascofiTEIb#n!A8wS#`3@#?!)DN19bUkU(!}jPP$p01PH| zEZ#Ac&sz%*(Dk75a^vs7##na>(p+EqRA&ZN`+#bmq2IC)BqNSAfY_CW@6pEn02A6% zzJzi`#9=4cP@-Cay^iWa6Qe2GC4BKti$s?y%*-LIw=W0*nbrm*RPO0USVWV4}1{8ciD@;Z`da*` zn+~1H2jBQiy?Id=np+H2(0>6gec!Eoz>KjY^H8>xqKOkKrzKOA1k>Uk3Hw7`MsEB1 zqrDhJdi!a^56Jg%G5Ym;Z9r_vBUbV(a_3fMfrtd@nov`VWaRk(m(7s|%|(y=4BRav z-)sXUkh;nQ_=JQk$jvJw2{vLj|Kt+);fH3~Mchs~aQh%nLkS7j*9Pv?`@r^v?W{33 zLDIa<{-Z+}JiwEiFW8X|eVOWkY8{CRI@`F#gGoFI2J5wA12P({l33{QBtr4-iP%r0 zi~ycZ0Ov|tT`bC7_JKfoA0k&;^DJ`IV@~G(rog_M zj7FQ_Z3*a*Z~?>RzA!Pkf}9X;<4}c4K9>rxa|AL7P_5@N*8sQ z3w~4|p^j6J{Fv4#MGk|BRUOdAYr$&)PZ_%c)T@VkKXynj@mUJggvw+K#+UFy0QzA$ zZtc<0tc9{}`q$$+VVj@g_k4PZeYYu61TR~ko3!Ww&fZ`YofeCT-zi8!+YiRbE$W3TN zhx^=0tNF%8Y>FQN9`84(P==6E2&?BGNdlvjslUv)M5NVUq2)%kAR>!-kluo?7R=8H;4+m6fbR4O4M6l8aR(7BN+M7NX z2&V3?s8Y$ijK0)#2fZH%6AaG%$Iy zQuS@ldjJH2m}_6t+9(<1js^=Xjz++355 z$UZKJUz9TB93=tbmcZ&-poH0t_-jc*b;>eqaEvrt4?}_^>Ah$>QLzDOu1m(pvYV!o z3a4X;;(#7#a=Ji>)U?i`#q^P9CdsH1;`?*Nv^juUn=!W31dDhO>XIQDs9}Tm;Flg$ zXhyx{UIJyux%xA3;mS*!KxAS}mbGaX<%i*t&jP9bqzzYAA}5mjDsOHnQRHN$!?582 znPEL)FQaP2Gq)DOWVo<}#|K1ZG1$xg?ixaLDC-`Y7zMrXA3$wm z^!e3awc~7e!TxOAj-t2A(BAs2RCZ;nPr4H78GI4(*tNpbcB8pUcsUR;0@4N`inqzg zL7ryRk4P50W$C(m6Vc8D5mfwzpQ?`h>jG}KC)vR-2*iUFnG8x!3W84~D=`E>N6L6+ zP+MMKkQ0Sl>SrD81j3RZV$}I}J5b*p?uwxKI|dAg`MRQr2e3dKpybi*{=hOj7h}gc zWA##|gYzbhGt2R=IKrL?ejOmgj@lGVL z^sGI7<2uXGPM1p~Uk0=CZsU~wet?w2GImP=)U&_hL3gp7lPUV-AM@I>DuW~r(wAR>J{TC_RRFamwlil z$9Kt>xx37Hk=V3=^$+@OtL6ws9jQ7ouP9nv2mnJ(3gXGwG!YV7fkGt;+|{z;*CV^Z_LvZ=+$OV{m) zFne$#H>eEwH@n?SqJXMh_F3~8JeRy8kz(#g`h0o7=>6RV4}j9(+k>BG5M>4)=K+L8 z)T~Q$e^gL&bDi`)iXDqoWv~x0z9bM3;sxw&QchO@yU@niP<;jPxXcFzU+)>(8SySO z-5rz)bebYkJ|IEF3*Z3!V@s~o+?IZQ01R?6tm;Uo!M~*u)OouaX2gd+0koN1qYt=P ze`}tLbEUe{oeyLs@E66VpyL)dXb%EYe531Tj)Dj|8NRRx5IT|7iopd0oVX0duP`tg zh-u}U5(Bg*!jldw5{n7(X2Zb6r(64=bCjhxR_2~e%?coNPj>bjg_@K9~>_P zJl7x4&0{U5vZaT%<_;1+IPJpQr?&t}H^M9G4!5lWH(WRA3ct9rSRz48{9FXv4aZb` zS8R(26p#nC@c?siy%oc2Q2Co;;KW~!CwEPK7zb#g z*u=kJgjBU2dNOcFcJOhhT`{<|-v#QU&ZXGfoTE*7Y1<+h;eJ57Pqx_lI%1bQrjj&S zSsP3%oEC^rpx8e8`kwao?x68b{q3Fr85R%LGQjs25Javs}i%}_HEU#e4B*uK5k#dqRcc7 zrL`aoIUeHxQaFpW@;UqiZkk!(u}N9kN5SB{j7i2c+rM0m_1m3cVkpf@GKZb<=Gyho zY4Tsvwd(PTp`d3~b#Mr7N88Fz%;AjGUeDzW@X#+hW9_5fiWj`F2%`b-Sw$W$O;B1J6`jXs4B(@;>0Z=9=9;G=A9 zX^$+4StU#yL>`(p(R^sKQ`(`wBI)=^;!5%yBOWH$aXpc@-$KoG-J`aKUMDr5_20U~1$ zpi!h*tLUq%K4@DVNvEw~B#C=tLI+zR)FjJRApMMgcUZ`AlD)H=vFM+^2Py8)DKaV2 zI@CtPRI3L2pf)6nuw=TyrWdp0u(I?6;nl8C%IBHs-aezyjl~=AH3x|d&b0F7D(i^UGD0BI+0V_v`f;JV$3*xA)Wy_Vk$xKJSF6@ zSqi>eC{R$9I6zLnmfQr+qES~lAodB;?1?9x0JMPD1x7~Ch>FsSCsyK3bNhinORx}1mXco zaIpB}W9D{c#53ncT@W#%SaC$@8=$OZvqDDwR#1i21K|bf#@!v?%iO>&Z+AY zsHH`=hMN4NqhGsmCoi#_tCUfIWhugag?757_5f8J+YG(l-%U2sH#o5>`Fnb+rJjOK z9($WjVKajjOi?5gF}Jo8ym6(U5Csx7s6f_l$u`{06jyA_gvJ!0BguRl6gDrzGl-D_ zsErTdZC%k0d37$J?5L)Q9iV7)ngvy(wjH(6G=BV<;8wz4tId<~6Mox)B1(_5Hy@8a zAVEtZRy||85i^Y7d1;cV?sIZZcOkWql6_vGX0*11@>F4E>L>zqKRP+wEE_>v`O$tG z&i?gV1nhIKQJhfSX_+;p5_*fjr#(RStL=4oLD_Wjx8l6EZ})*=hG}9wFMQJw` z-Z-9|Gop*hQYXcoRRzI6aXzgUp3TaRY;5@Tco&16+U}rZMWgWZKj9kRa>TK=>2XW zvC0{rkfLP71gxIfJAhjU*+mCQ)6jX_UPT5I>@GU$R!Gh#Dlye?eQ{5h1cBljAs8Gw ze3=T7&`%ffAO0}3J@Mb~f2XEGZxIUH<_8Ye_xGpYg|zT%K+w^f+o35N0au}2g2l@Y z{T_2>wc2h_yWK^sdVu>~M##UI7+<;e@+dhuw7L0P#OM@?Zjd^53+nr(P~6j$H_^(1 zlF?pmi8#>DITPe^1Sb!VA5UK+P&0pZXqF=D%$!u zdMjy{wO08;*!&6{7S$;)D&L#g;*lIUcZ_6H1p3zCc%Y$A6r+;I7FoAZ+YTTB!5(byb{BIN+Fz6JxGl1zGVYXs!4dk8kGvWLAGx8kQpTLwk>tCr`52 zpFVxMvb+XbA`!k^<7@-zYXL+Ul_s8OdZCX;7Qx=0o(}%bthe*&^IlJ(=g|Azp4Dy5 zLBp5VHwx>$*kEp9aRM$({b^E?N=D{-F7bU0yLb!VT@Q0xqkzzoMXwHuce9bKMMf>x z$!R5A*tlKJgZs1I#BdiYK_!9(x~g1)t`oF?7t0Raer{!@p`j7dD|VX*TzQtgs*!8% ztmj=f(%ry%P2PNsicu`rGK2Z7$;QO4cTH*Ux+fqI$xe6lw#QS-WkmW_H%6mzkNfRh1S=x$0EO5 zord-s+8?qUEV!g$VNJcg#qmmp^T1bQrfLXb2v^0kn_TCgZ2_DG>lgFy58H6V-E2vM za@ernR(S9Hr8o-TjUKJw)g4Z3QH?x0raJ-|hyv&;QwRq?_b)!rVS41m8et<0mu@{X zHOLX@?!7>?5w{0)`u<2!NFZ&n@$uUq`DDIQ!DfKjh%eYSv10xlqS#8 zur_y0FvSTtY5mb-S6z4j+BA(|RbaYl{#e6oCF`VhLo;5!JZhrl`0h#gvRqzo zMw9y0F7TWN-O8`WyRF$XW92&9dr3MiIawq%HHo*?m%Pg7WC%5-k(WF)Uk}7}!Q_~( zyLG<0*c-O|vr6glG^k<`T0IXpr9@820I5e&<1-8gE`vOeh=%I+324=kL5+$R)AaFU zZ=D#VJ&LarnLj&6D66M$#+%I#W2!1nEqmAdL|x9$b{L}$Xk&oduORmM7C`?A#GKdB z2_07nm-IKN8{aD{CVm@NcxU~3tNr0@t-f9n^M!G20VIc6J1iXMk0kf|j>h3ey{9rO z0+TnnLh9N!sT-OW&_)5{Xg54_{a`nDj$@aOOOi=~kYNc=f}BSNy#z;pyAoMrnVPcv z4CcRWW+PTmD+zC6T@*zG+&o7i8EE6T{CMSJ3>#{8DHPsbTjnk2K5p+4)j@`7qX5d& z=(W3$%uZ${&_Nqg51R{own>N* zs%mO(Th*m|!5_vUYbNP!?QY8Bg~>74 z0NR3WDJ?BM4qY!RiO0goes)pP4gzaHn?Lqo-gt;*V)?+RgV8%TU;UfZW(t$ASyz`~ zLtY-5d=Pchp@_+$o~h?^lPinwEK|lWFzT1Y`FytIBg%2 zjqV;%uz(kCEJE6Wg_T2S6+FXrsHb>k_=@j$H4AemFE_(5s%XvptzUjm9tSVctJXhj zs;j;F`}^501O)`7cB~(r9J9O29B7d17UJky#1q>92Ylaia8`8zQ#i&00zHr2yXRko zAO5jVoiQVyljcRV{C0nTj6eF3%Wm7&A1lA#KF0XNTX27{K>P5wpZplPj6py&=HtCY zn1{hBz-K32J_(`B*Y}H?d$^M@4@{mq^=;+(;Y@d^;o-AgIah<`l9vm9=RaH{qp81v zWZ44I!`#7l&wu0MGeIA-J%v|D;Xt_Y{PX|em=8b!653R<>Zfafzr2Ug19;Bz zlm%j#x!A4*P