caret/0000755000176200001440000000000013213314354011347 5ustar liggesuserscaret/inst/0000755000176200001440000000000013207340464012330 5ustar liggesuserscaret/inst/NEWS.Rd0000644000176200001440000033057513206666375013423 0ustar liggesusers\name{NEWS} \title{News for Package \pkg{caret}} \newcommand{\cpkg}{\href{https://CRAN.R-project.org/package=#1}{\pkg{#1}}} \newcommand{\issue}{\href{https://github.com/topepo/caret/issues/#1}{(issue #1)}} \section{Changes in version 6.0-78}{ \itemize{ \item A number of changes were made to the underlying model code to repair problems caused by the previous version. In essence, unless the modeling package was formally loaded, the model code would fail in some cases. In the vast majority of cases, \code{train} will not load the package (but will load the namespace). There are some exceptions where this is not possible, including \code{bam}, \code{earth}, \code{gam}, \code{gamLoess}, \code{gamSpline}, \code{logicBag}, \code{ORFlog}, \code{ORFpls}, \code{ORFridge}, \code{ORFsvm}, \code{plsRglm}, \code{RSimca}, \code{rrlda}, \code{spikeslab}, and others. These are noted in \code{?models} and in the model code itself. The regression tests now catch these issues. \item The option to control the minimum node size to models \code{ranger} and \code{Rborist} was added by \code{hadjipantelis} \issue{732}. \item The rule-based model \code{GFS.GCCL} was removed from the model library. \item A bug was fixed affecting models using the \pkg{sparsediscrim} package (i.e. \code{dda} and \code{rlda})where the class probability values were reversed. \issue{761}. \item The \code{keras} models now clear the session prior to each model fit to avoid problems. Also, on the last fit, the model is serialized so that it can be used between sessions. The \code{predict} code will automatically undo this encoding so that the user does not have to manually intervene. \item A bug in \code{twoClassSummary} was fixed that prevents failure when the class level includes "y" \issue{770}. \item The \code{preProcess} function can now scale variables to a range where the user can set the high and low values \issue{730}. Thanks to Sergey Korop. \item Erwan Le Pennec fixed some issues when \code{train} was run using some parallel processing backends (e.g. \code{doFuture} and \code{doAzureParallel}) \issue{748}. \item Waleed Muhanna found and fixed a bug in \code{twoClassSim} when irrelevant variables were generated. \issue{744}. \item \code{hadjipantelis} added the DART model (aka "Dropouts meet Multiple Additive Regression Trees") with the model code \code{xgbDART } \issue{742}. \item Vadim Khotilovich updated \code{predict.dummyVars} to run faster with large datasets with many factors \issue{727}. \item \code{spatialSign} now has the option of removing missing data prior to computing the norm \issue{789}. \item The various \cpkg{earth} models have been updated to work with recent versions of that package, including multi-class \code{glm} models \issue{779}. } } \section{Changes in version 6.0-77}{ \itemize{ \item Two neural network models (containing up to three hidden layers) using \code{mxnet} were added; \code{mxnet} (optimiser: SGD) and \code{mxnetAdam} (optimiser: ADAM). \item A new method was added for \code{train} so that \cpkg{recipes} can be used to specify the model terms and preprocessing. Alexis Sardá provided a great deal of help converting the bootstrap optimism code to the new workflows. A new chapter was added to the package website related to recipes. \item The Yeo-Johnson transformation parameter estimation code was rewritten and not longer requires the \code{car} package. \item The leave-one-out cross-validation workflow for \code{train} has been harmonized with the other resampling methods in terms of fault tolerance and prediction trimming. \item \code{train} now uses different random numbers to make resamples. Previously, setting the seed prior to calling \code{train} should result in getting the same resamples. However, if \code{train} loaded or imported a namespace from another package, and that startup process used random numbers, it could lead to different random numbers being used. See \issue{452} for details. Now, \code{train} gets a separate (and more reproducible) seed that will be used to generate the resamples. However, this may effect random number reproducibility between this version and previous versions. Otherwise, this change should increase the reproducibility of results. \item Erwan Le Pennec conducted the herculean task of modifying all of the model code to call by namespace (instead of fully loading each required package). This should reduce naming conflicts \issue{701}. \item MAE was added as output metric for regression tasks through \code{postResample} and \code{defaultSummary} by hadjipantelis. The function is now exposed to the users. \issue{657}. \item More average precision/recall statistics were added to \code{multiClassSummary} \issue{697}. \item The package website code was updated to use version 4 of the D3 JS library and now uses \cpkg{heatmaply} to make the interactive heatmap. \item Added a \code{ggplot} method for lift objects (and fixed a bug in the \code{lattice} version of the code) for \issue{656}. \item Vadim Khotilovich made a change to speed up \code{predict.dummyVars} \issue{727}. \item The model code for \code{ordinalNet} was updated for recent changes to that package. \item \code{oblique.tree} was removed from the model library. \item The default grid generation for rotation forest models now provides better values of \code{K}. \item The parameter ranges for \code{AdaBag} and \code{AdaBoost.M1} were changed; the number of iterations in the default grids have been lowered. \item Switched to non-formula interface in ranger. Also, another tuning parameter was added to ranger (\code{splitrule}) that can be used to change the splitting procedure and includes extremely randomized trees. This requires version 0.8.0 of the \cpkg{ranger} package. \issue{581} \item A simple "null model" was added. For classification, it predictors using the most prevalent level and, for regression, fits an intercept only model. \issue{694} \item A function \code{thresholder} was added to analyze the resample results for two class problems to choose an appropriate probability cutoff a la \url{https://topepo.github.io/caret/using-your-own-model-in-train.html#Illustration5} \issue{224}. \item Two neural network models (containing a single hidden layers) using \code{tensorflow}/\code{keras} were added. \code{mlpKerasDecay} uses standard weight decay while \code{mlpKerasDropout} uses dropout for regularization. Both use RMSProp optimizer and have a lot of tuning parameters. Two additional models, \code{mlpKerasDecayCost} and \code{mlpKerasDropoutCost}, are classification only and perform cost-sensitive learning. Note that these models will not run in parallel using \cpkg{caret}'s parallelism and also will not give reproducible results from run-to-run (see \url{https://github.com/rstudio/keras/issues/42}). \item The range for one parameter (\code{gamma}) was modified in the \code{mlpSGD} model code. \item A bug in classification models with all missing predictions was fixed (found by andzandz11). \issue{684} \item A bug preventing preprocessing to work properly when the preprocessing transformations are related to individual columns only fixed by Mateusz Kobos in \issue{679}. \item A prediction bug in \code{glm.nb} that was found by jpclemens0 was fixed \issue{688}. \item A bug was fixed in Self-Organizing Maps via \code{xyf} for regression models. \item A bug was fixed in \code{rpartCost} related to how the tuning parameter grid was processed. \item A bug in negative-binomial GLM models (found by jpclemens0) was fixed \issue{688}. \item In \code{trainControl}, if \code{repeats} is used on methods other than \code{"repeatedcv"} or \code{"adaptive_cv"}, a warning is issued. Also, for method other than these two, a new default (\code{NA}) is given to \code{repeats}. \issue{720}. \item \code{rfFuncs} now computes importance on the first and last model fit. \issue{723} } } \section{Changes in version 6.0-76}{ \itemize{ \item Monotone multi-layer perceptron neural network models from the \cpkg{monmlp} package were added \issue{489}. \item A new resampling function (\code{groupKFold}) was added \issue{540}. \item The bootstrap optimism estimate was added by Alexis Sarda \issue{544}. \item Bugs in \code{glm}, \code{glm.nb}, and \code{lm} variable importance methods that occur when a single variable is in the model \issue{543}. \item A bug in \code{filterVarImp} was fixed where the ROC curve AUC could be much less than 0.50 because the directionality of the predictor was not taken into account. This will artificially increase the importance of some non-informative predictors. However, the bug might report the AUC for an important predictor to be 0.20 instead of 0.80 \issue{565}. \item \code{multiClassSummary} now reports the average F score \issue{566}. \item The \code{RMSE} and \code{R2} are now (re)exposed to the users \issue{563}. \item A \cpkg{caret} bug was discovered by Jiebiao Wang where \code{glmboost}, \code{gamboost}, and \code{blackboost} models incorrectly reported the class probabilities \issue{560}. \item Training data weights support was added to \code{xgbTree} model by schistyakov. \item Regularized logistic regression through Liblinear (\code{LiblineaR::LiblineaR}) using L1 or L2 regularization were added by hadjipantelis. \item A bug related to the ordering of axes labels in the heatmap plot of training results was fixed by Mateusz Dziedzic in \issue{620}. \item A variable importance method for model averaged neural networks was added. \item More logic was added so that the \code{predict} method behaves well when a variable is subtracted from a model formula from \issue{574}. \item More documentation was added for the \code{class2ind} function (\issue{592}). \item Fixed the formatting of the design matrices in the \code{dummyVars} man file. \item A note was added to \code{?trainControl} about using custom resampling methods (\issue{584}). \item A bug was fixed related to SMOTE and ROSE sampling with one predictor (\issue{612}). \item Due to changes in the \cpkg{kohonen} package, the \code{bdk} model is no longer available and the code behind the \code{xyf} model has changes substantially (including the tuning parameters). Also, when using \code{xyf}, a check is conducted to make sure that a recent version of the \cpkg{kohonen} package is being used. \item Changes to \code{xgbTree} and \code{xgbLinear} to help with sparse matrix inputs for \issue{593}. Sparse matrices are not allowed when preprocessing or subsampling are used. \item Several PLS models were using the classical orthogonal scores algorithm when discriminant analysis was conducted (despite using \code{simpls}, \code{widekernelpls}, or \code{kernelpls}). Now, the PLSDA model estimation method is consistent with the method requested (\issue{610}). \item Added Multi-Step Adaptive MCP-Net (\code{method = "msaenet"}) for \issue{561}. \item The variable importance score for linear regression was modified so that missing values in the coefficients are converted to zero. \item In \code{train}, \code{x} is now required to have column names. } } \section{Changes in version 6.0-73}{ \itemize{ \item Negative binomial generalized linear models (\code{MASS:::glm.nb}) were added \issue{476} \item \code{mnLogLoss} now returns a named vector (\issue{514}, bug found by Jay Qi) \item A bunch of method/class related bugs induced by the previous version were fixed. } } \section{Changes in version 6.0-72}{ \itemize{ \item The inverse hyperbolic sine transformation was added to \code{preProcess} \issue{56} \item Tyler Hunt moved the ROC code from the \cpkg{pROC} package to the \cpkg{ModelMetrics} package which should make the computations more efficient \issue{482}. \item \code{train} does a better job of respecting the original format of the input data \issue{474} \item A bug in \code{bdk} and \code{xyf} models was fixed where the appropriate number of parameter combinations are tested during random search. \item A bug in \code{rfe} was fixed related to neural networks found by david-machinelearning \issue{485} \item Neural networks via stochastic gradient descent (\code{method = "mlpSGD"}) was adapted for classification and a variable importance calculation was added. \item \href{http://www.h2o.ai/}{h2o} versions of glmnet and gradient boosting machines were added with methods \code{"glmnet\_h2o"} and \code{"gbm\_h2o"}. These methods are not currently optimized. \issue{283} \item The fuzzy rule-based models (\code{WM}, \code{SLAVE}, \code{SBC}, \code{HYFIS}, \code{GFS.THRIFT}, \code{GFS.LT.RS}, \code{GFS.GCCL}, \code{GFS.FR.MOGUL}, \code{FS.HGD}, \code{FRBCS.W}, \code{FRBCS.CHI}, \code{FIR.DM}, \code{FH.GBML}, \code{DENFIS}, and \code{ANFIS}) were modified so that the user can pass in the predictor ranges using the \code{range.data} argument to those functions. \issue{498} \item A variable importance method was added for boosted generalized linear models \issue{493} \item \code{preProcess} now has an option to filter out highly correlated predictors. \item \code{trainControl} now has additional options to modify the parameters of near-zero variance and correlation filters. See the \code{preProcOptions} argument. \item The \code{rotationForest} and \code{rotationForestCp} methods were revised to evaluate only \emph{feasible} values of the parameter \code{K} (the number of variable subsets). The underlying \code{rotationForest} function reduces this parameter until values of \code{K} divides evenly into the number of parameters. \item The \code{skip} option from \code{createTimeSlices} was added to \code{trainControl} \issue{491} \item \code{xgb.train}'s option \code{subsample} was added to the \code{xgbTree} model \issue{464} } } \section{Changes in version 6.0-71}{ \itemize{ \item Precision, recall, and F measure functions were added along with one called \code{prSummary} that is analogous to \code{twoClassSummary}. Also, \code{confusionMatrix} gains an argument called \code{mode} that dictates what output is shown. \item schistyakov added additional tuning parameters to the robust linear model code \issue{454}. Also for \code{rlm} and \code{lm} schistyakov added the ability to tune over the intercept/no intercept model. \item Generalized additive models for very large datasets (\code{bam} in \cpkg{mgcv}) was added \issue{453} \item Two more linear SVM models were added from the \cpkg{LiblineaR} package with model codes \code{svmLinear3} and \code{svmLinearWeights2} (\issue{441}) \item The \code{tau} parameter was added to all of the least square SVM models (\issue{415}) \item A new data set (called \code{scat}) on animal droppings was added. \item A significant bug was fixed where the internals of how R creates a model matrix was ignoring \code{na.action} when the default was set to \code{na.fail} \issue{461}. This means that \code{train} will now immediately fail if there are any missing data. To use imputation, use \code{na.action = na.pass} and the imputation method of your choice in the \code{preProcess} argument. Also, a warning is issued if the user asks for imputation but uses the formula method and excludes missing data in \code{na.action} } } \section{Changes in version 6.0-70}{ \itemize{ \item Based on a comment by Alexis Sarda, \code{method = "ctree2"} does not fix \code{mincriterion = 0} and tunes over this parameter. For a fixed depth, \code{mincriterion} can further prune the tree \issue{409}. \item A bug in KNN imputation was fixed (found by saviola777) that occurred when a factor predictor was in the data set \issue{404}. \item Infrastructure changes were made so that \code{train} tries harder to respect the original class of the outcome. For example, if an ordered factor is used as the outcome with a modeling function that treats is as an unordered factor, the model still produces an ordered factor during prediction. \item The \code{ranger} code now allows for case weights \issue{414}. \item \code{twoClassSim} now has an option to compute ordered factors. \item High-dimensional regularized discriminant analysis and, regularized linear discriminant analysis, and several variants of diagonal discriminant analysis from the \cpkg{sparsediscrim} package were added (\code{method = "hdrda"}, \code{method = "rlda"}, and \code{method = "dda"}, respectively) \issue{313}. \item A neural network regression model optimized by stochastic gradient decent from the \cpkg{FCNN4R} package was added. The model code is \code{mlpSGD}. \item Several models for ordinal outcomes were added: \code{rpartScore} (from the \cpkg{rpartScore} package), \code{ordinalNet} (\cpkg{ordinalNet}), \code{vglmAdjCat} (\cpkg{VGAM}), \code{vglmContRatio} (\cpkg{VGAM}), and \code{vglmCumulative} (\cpkg{VGAM}). Note that, for models that load \cpkg{VGAM}, there is a conflict such that the \code{predictors} class code from \cpkg{caret} is masked. To use that method, you can use \code{caret:::predictors.train()} instead of \code{predictors()}. \item Another high performance random forest package (\cpkg{Rborist}) was exposed through \cpkg{caret}. The model code is \code{method = "Rborist"} \issue{418} \item Xavier Robin fixed a bug related to the area under the ROC curve in \issue{431}. \item A bug in \code{print.train} was fixed when LOO CV was used \issue{435} \item With RFE, a better error message drafted by mikekaminsky is printed when the number of importance measures is off \issue{424} \item Another bug was fixed in estimating the prediction time when the formula method was used \issue{420}. \item A linear SVM model was added that uses class weights. \item The linear SVM model using the \cpkg{e1071} package (\code{method = "svmLinear2"}) had the \code{gamma} parameter for the RBF kernel removed. \item Xavier Robin committed changes to make sure that the area under the ROC is accurately estimated \issue{431} } } \section{Changes in version 6.0-68}{ \itemize{ \item \code{print.train} no longer shows the standard deviation of the resampled values unless the new option is used (\code{print.train(, showSD = TRUE)}). When shown, they are within parentheses (e.g. "4.24 (0.493)"). \item An adjustment the innards of adaptive resampling was changed so that the test for linear dependencies is more stringent. \item A bug in the bootstrap 632 estimate was found and fixed by Alexis Sarda \issue{349} \issue{353}. \item The \code{cforest} module's \code{oob} element was modified based on another bug found by Alexis Sarda \issue{351}. \item The methods for \code{bagEarth}, \code{bagEarthGCV}, \code{bagFDA}, \code{bagFDAGCV}, \code{earth}, \code{fda}, and \code{gcvEarth} models have been updates so that case-weights can be used. \item The \code{rda} module contained a bug found by Eric Czech \issue{369}. \item A bug was fixed for printing out the resampling details with LGOCV found by github user zsharpm \issue{366} \item A new data set was added (\code{data(Sacramento)}) with sale prices of homes. \item Another adaboost algorithm (\code{method = "adaboost"} from the \cpkg{fastAdaboost} package) was added \issue{284}. \item Yet another boosting algorithm (\code{method = "deepboost"} from the \cpkg{deepboost} package) was added \issue{388}. \item Alexis Sarda made changes to the confusion matrix code for \code{train}, \code{rfe}, and \code{sbf} objects that more rationally normalizes the resampled tables \issue{355}. \item A bug in how \cpkg{RSNNS} perceptron models were tuned (found by github user smlek) was fixed \issue{392}. \item A bug in computing the bootstrap 632 estimate was fixed (found by Stu) \issue{382}. \item John Johnson contributed an update to \code{xgbLinear} \issue{372}. \item Resampled confusion matrices are not automatically computed when there are 50 or more classes due to the storage requirements (\issue{356}). However, the relevant functions have been updated to use the out-of-sample predictions instead (when the user asks for them to be returned by the function). \item Some changes were made to \code{predict.train} to error trap (and fix) cases when predictions are requested without referencing a \code{newdata} object \issue{347}. \item Github user pverspeelt identified a bug in our model code for \code{glmboost} (and \code{gamboost}) related to the \code{mstop} function modifying the model object in memory. It was fixed \issue{396}. \item For \issue{346}, an option to select which samples are used to fit the final model, called \code{indexFinal}, was added to \code{trainControl}. \item For issue \issue{390} found by JanLauGe, a bug was fixed in \code{dummyVars} related to the names of the resulting data set. \item Models \code{rknn} and \code{rknnBel} were removed since their package is no longer on CRAN. } } \section{Changes in version 6.0-66}{ \itemize{ \item Model averaged naive Bayes (\code{method = "manb"}) from the \cpkg{bnclassify} package was added. \item \code{blackboost} was updated to work with outcomes with 3+ classes. \item A new model \code{rpart1SE} was added. This has no tuning parameters and resamples the internal \cpkg{rpart} procdure of pruning using the one standard error method. \item Another model (\code{svmRadialSigma}) tunes over the cost parameter and the RBF kernel parameter sigma. In the latter case, using \code{tuneLength} will, at most, evaluate six values of the kernel parameter. This enables a broad search over the cost parameter and a relatively narrow search over \code{sigma}. \item Additional model tags for "Accepts Case Weights", "Two Class Only", "Handle Missing Predictor Data", "Categorical Predictors Only", and "Binary Predictors Only" were added. In some cases, a new model element called "notes" was added to the model code. \item A pre-processing method called "conditionalX" was added that eliminates predictors where the conditional distribution (X|Y) for that predictor has a single value. See the \code{checkConditionalX} function for details. This is only used for classification. \issue{334} \item A bug in the naive Bayes prediction code was found by github user pverspeelt and was fixed. \issue{345} \item Josh Brady (doublej2) found and fixed an issue with \code{DummyVars} \issue{344} \item A bug related to recent changes to the \cpkg{ranger} package was fixed \issue{320} \item Dependencies on external software can now be checked in the model code. See \href{https://github.com/topepo/caret/blob/master/models/files/pythonKnnReg.R}{\code{pythonKnnReg}} for an example. This also removes the overall package dependency on \cpkg{rPython} \issue{328}. \item The tuning parameter grid for \code{enpls} and \code{enpls.fs} were changed to avoid errors. \item A bug was fixed \issue{342} where the data used for prediction was inappropriately converted from its original class. \item Matt (aka washcycle) added option to return column names to \code{nearZeroVar} function \item Homer Strong fixed \code{varImp} for \code{glmnet} models so that they return the absolute value of the regression coefficients \issue{173} \issue{190} \item The basic naive Bayes method (\code{method = "nb"}) gained a tuning parameter, \code{adjust}, that adjusts the bandwidth (see \code{?density}). The parameter is ignored when \code{usekernel = FALSE}. } } \section{Changes in version 6.0-62}{ \itemize{ \item From the \cpkg{randomGLM} package, a model of the same name was added. \item From \cpkg{monomvn} package, models for the Bayesian lasso and ridge regression were added. In the latter case, two methods were added. \code{blasso} creates predictions using the mean of the posterior distributions but sets some parameters specifically to zero based on the tuning parameter called \code{sparsity}. For example, when \code{sparsity = .5}, only coefficients where at least half the posterior estimates are nonzero are used. The other model, \code{blassoAveraged}, makes predictions across all of the realizations in the posterior distribution without coercing any coefficients to zero. This is more consistent with Bayesian model averaging, but is unlikely to produce very sparse solutions. \item From the \cpkg{spikeslab} package, a regression model was added that emulates the procedure used by \code{cv.spikeslab} where the tuning variable is the number of retained predictors. \item A bug was fixed in adaptive resampling (found by github user elephann) \issue{304} \item Fixed another adaptive resampling bug flagged by github user elephann related to the latest version of the \cpkg{BradleyTerry2} package. Thanks to Heather Turner for the fix \issue{310} \item Yuan (Terry) Tang added more tuning parameters to \code{xgbTree} models. \item Model \code{svmRadialWeights} was updated to allow for class probabilities. Previously, \cpkg{kernlab} did not change the probability estimates when weights were used. \item A \cpkg{ggplot2} method for \code{varImp.train} was added \issue{231} \item Changes were made for the package to work with the next version of \cpkg{ggplot2} \issue{317} \item Github user \code{fjeze} added new models \code{mlpML} and \code{mlpWeightDecayML} that extend the existing \cpkg{RSNNS} models to multiple layers. \code{fjeze} also added the \code{gamma} parameter to the \code{svmLinear2} model. \item A function for generating data for learning curves was added. \item The range of SVM cost values explored in random search was expanded. } } \section{Changes in version 6.0-58}{ \itemize{ \item A major bug was fixed (found by Harlan Harris) where pre-processing objects created from versions of the package prior to 6.0-57 can give incorrect results when run with 6.0-57 \issue{282}. \item \code{preProcess} can now remove predictors using zero- and near zero-variance filters via (\code{method} values of \code{"zv"} and \code{"nzv"}). When used, these filters are applied to numeric predictors prior to all other pre-processing operations. \item \code{train} now throws an error for classification tasks where the outcome has a factor level with no observed data \issue{260}. \item Character outcomes passed to \code{train} are not converted to factors. \item A bug was found and fixed in this package's class probability code for \code{gbm} models when a single multinomial observation is predicted \issue{274}. \item A new option to \code{ggplot.train} was added that highlights the optimal tuning parameter setting in the cases where grid search is used (thanks to Balaji Iyengar (github: bdanalytics)). \item In \code{trainControl}, the argument \code{savePredictions} can now be character values (\code{"final"}, \code{"all"} or \code{"none"}). Logicals can still be used and match to \code{"all"} or \code{"none"}. } } \section{Changes in version 6.0-57}{ \itemize{ \item Hyperparameter optimization via random search is now availible. See the new \href{http://topepo.github.io/caret/random-hyperparameter-search.html}{help page} for examples and syntax. \item \code{preProcess} now allows (but ignores) non-numeric predictor columns. \item Models were added for optimal weighted and stabilized nearest neighbor classifiers from the \cpkg{snn} package were added with model codes \code{snn} and \code{ownn} \item Random forests using the excellent \cpkg{ranger} package were added (\code{method = "ranger"}) \item An additional variation of rotation forests was added (\code{rotationForest2}) that also tunes over \code{cp}. Unfortunately, the sub-model trick can't be utilized in this instance. \item Kernelized distance weighted discriminant analysis models from \cpkg{kerndwd} where added (\code{dwdLieanr}, \code{dwdPoly}, and \code{dwdRadial}) \item A bug was fixed with \code{rfe} when \code{train} was used to generate a classification model but class probabilities were not (or could not be) generated \issue{234}. \item Can Candan added a python model \code{sklearn.neighbors.KNeighborsRegressor} that can be accessed via \code{train} using the \cpkg{rPython} package. The python modules \code{sklearn} and \code{pandas} are required for this to run. \item Jason Aizkalns fixed a bunch of typos. \item MarwaNabil found a bug with \code{lift} and missing values \issue{225}. This was fixed such that missing values are removed prior to the calculations (within each model) \item Additional options were added to \code{LPH07_1} so that two class data can also be simulated and predictors are converted to factors. \item The model-specific code for computing out-of-bag performance estimates were moved into the model code library \issue{230}. \item A variety of naive Bayes and tree augmented naive Bayes classifier from the \cpkg{bnclassify} package were added. Variations include simple models (methods labeled as \code{"nbDiscrete"} and \code{"tan"}), models using attribute weighting (\code{"awnb"} and \code{"awtan"}), and wrappers that use search methods to optimize the network structure (\code{"nbSearch"} and \code{"tanSearch"}). In each case, the predictors and outcomes must all be factor variables; for that reason, using the non-formula interface to \code{train} (e.g. \code{train(x, y)}) is critical to preserve the factor structure of the data. \item A function called \code{multiClassSummary} was added to compute performance values for problems with three or more classes. It works with or without predicted class probabilities \issue{107}. \item \code{confusionMatrix} was modified to deal with name collisions between this package and \cpkg{RSNNS} \issue{256}. \item A bug in how the LVQ tune grid is filtered was fixed. \item A bug in \code{preProcess} for ICA and PCA was fixed. \item Bugs in \code{avNNet} and \code{pcaNNet} when predicting class probabilities were fixed \issue{#261}. } } \section{Changes in version 6.0-52}{ \itemize{ \item A new model using the \cpkg{randomForest} and \cpkg{inTrees} packages called \code{rfRules} was added. A basic random forest model is used and then is decomposed into rules (of user-specified complexity). The \cpkg{inTrees} package is used to prune and optimize the rules. Thanks to Mirjam Jenny who suggested the workflow. \item Other new models (and their packages): \code{bartMachine} (\cpkg{bartMachine}), \code{rotationForest} (\cpkg{rotationForest}), \code{sdwd} (\cpkg{sdwd}), \code{loclda} (\cpkg{klaR}), \code{nnls} (\cpkg{nnls}), \code{svmLinear2} (\cpkg{e1071}), \code{rqnc} (\cpkg{rqPen}), and \code{rqlasso} (\cpkg{rqPen}) \item When specifying your own resampling indices, a value of \code{method = "custom"} can be used with \code{trainControl} for better printing. \item Tim Lucas fixed a bug in \code{avNNet} when \code{bag = TRUE} \item Fixed a bug found by \code{ruggerorossi} in \code{method = "dnn"} with classification. \item A new option called \code{sampling} was added to \code{trainControl} that allows users to subsample their data in the case of a class imbalance. Another \href{http://topepo.github.io/caret/sampling.html}{help page} was added to explain the features. \item Class probabilities can be computed for \code{extraTrees} models now. \item When PCA pre-processing is conducted, the variance trace is saved in an object called \code{trace}. \item More error traps were added for common mistakes (e.g. bad factor levels in classification). \item An internal function (\code{class2ind}) that can be used to make dummy variables for a single factor vector is now documented and exported. \item A bug was fixed in the \code{xyplot.lift} where the reference line was incorrectly computed. Thanks to Einat Sitbon for finding this. \item A bug related to calculating the Box-Cox transformation found by John Johnson was fixed. \item github user \code{EdwinTh} developed a faster version of \code{findCorrelation} and found a bug in the original code. \code{findCorrelation} has two new arguments, one of which is called \code{exact} which defaults to use the original (fixed) function. Using \code{exact = FALSE} uses the faster version. The fixed version of the "exact" code is, on average, 26-fold slower than the current version (for 250x250 matrices) although the average time for matrices of this size was only 26s. The exact version yields subsets that are, one average, 2.4 percent smaller than the other versions. This difference will be more significant for smaller matrices. The faster ("approximate") version of the code is 8-fold faster than the current version. \item github user \code{slyuee} found a bug in the \code{gam} model fitting code. \item Chris Kennedy fixed a bug in the \code{bartMachine} variable importance code. } } \section{Changes in version 6.0-47}{ \itemize{ \item CHAID from the R-Forge package \href{http://r-forge.r-project.org/projects/chaid/}{\pkg{CHAID}} \item Models \code{xgbTree} amd \code{xgbLinear} from the \code{xgboost} package were added. That package is not on CRAN and can be installed from github using the \cpkg{devtools} package and \code{install_github('dmlc/xgboost',subdir='R-package')}. \item \code{dratewka} enabled \code{rbf} models for regression. \item A summary function for the multinomial likelihood called \code{mnLogLoss} was added. \item The total object size for \code{preProces} objects that used bagged imputation was reduced almost 5-fold. \item A new option to \code{trainControl} called \code{trim} was added where, if implemented, will reduce the model's footprint. However, features beyond simple prediction may not work. \item A rarely occurring bug in \code{gbm} model code was fixed (thanks to Wade Cooper) \item \code{splom.resamples} now respects the \code{models} argument \item A new argument to \code{lift} called \code{cuts} was added to allow more control over what thresholds are used to calculate the curve. \item The \code{cuts} argument of \code{calibration} now accepts a vector of cut points. \item Jason Schadewald noticed and fixed a bug in the man page for \code{dummyVars} \item Call objects were removed from the following models: \code{avNNet}, \code{bagFDA}, \code{icr}, \code{knn3}, \code{knnreg}, \code{pcaNNet}, and \code{plsda}. \item An argument was added to \code{createTimeSlices} to thin the number of resamples \item The RFE-related functions \code{lrFuncs}, \code{lmFuncs}, and \code{gamFuncs} were updated so that \code{rfe} accepts a matrix \code{x} argument. \item Using the default grid generation with \code{train} and \code{glmnet}, an initial \code{glmnet} fit is created with \code{alpha = 0.50} to define the \code{lambda} values. \item \code{train} models for \code{"gbm"}, \code{"gam"}, \code{"gamSpline"}, and \code{"gamLoess"} now allow their respective arguments for the outcome probability distribution to be passed to the underlying function. \item A bug in \code{print.varImp.train} was fixed. \item \code{train} now returns an additional column called \code{rowIndex} that is exposed when calling the summary function during resampling. \item The ability to compute class probabilities was removed from the \code{rpartCost} model since they are unlikely to agree with the class predictions. \item \code{extractProb} no longer redundantly calls \code{extractPrediction} to generate the class predictions. \item A new function called \code{var_seq} was added that finds a sequence of integers that can be useful for some tuning parameters such as random forests \code{mtry}. Model modules were update to use the new function. \item \code{n.minobsinnode} was added as a tuning parameter to \code{gbm} models. \item For models using out-of-bag resampling, \code{train} now properly checks the \code{metric} argument against the names of the measured outcomes. \item Both \code{createDataParition} and \code{createFolds} were modified to better handle cases where one or more class have very low numbers of data points. } } \section{Changes in version 6.0-41}{ \itemize{ \item The license was changed to GPL (>= 2) to accommodate new code from the GA package. \item New feature selection functions \code{gafs} and \code{safs} were added, along with helper functions and objects, were added. The package HTML was updated to expand more about feature selection. \item From the \cpkg{adabag} package, two new models were added: \code{AdaBag} and \code{AdaBoost.M1}. \item Weighted subspace random forests from the \cpkg{wsrf} package was added. \item Additional bagged FDA and MARS models were added (model codes \code{bagFDAGCV} and \code{bagEarthGCV}) were added that use the GCV statistic to prune the model. This leads to memory reductions during training. \item The model code for \code{ada} had a bug fix applied and the code was adapted to use the "sub-model trick" so it should train faster. \item A bug was fixed related to imputation when the formula method is used with \code{train} \item The old \code{drop = FALSE} bug was fixed in \code{getTrainPerf} \item A bug was fixed for custom models with no labels. \item A bug fix was made for bagged MARS models when predicting probabilities. \item In \code{train}, the argument \code{last} was being incorrectly set for the last model. \item Reynald Lescarbeau refactored \code{findCorrelation} to make it faster. \item The apparent performance values are not reported by \code{print.train} when the bootstrap 632 estimate is used. \item When a required package is missing, the code stops earlier with a more explicit error message. } } \section{Changes in version 6.0-37}{ \itemize{ \item Brenton Kenkel added ordered logistic or probit regression to \code{train} using \code{method = "polr"} from \cpkg{MASS} \item \code{LPH07_1} now encodes the noise variables as binary \item Both \code{rfe} and \code{sbf} get arguments for \code{indexOut} for their control functions. \item A reworked version of \code{\link{nearZerVar}} based on code from Michael Benesty was added the old version is now called \code{nzv} that uses less memory and can be used in parallel. \item The adaptive mixture discriminant model from the \cpkg{adaptDA} package was added as well as a robust mixture discriminant model from the \cpkg{robustDA} package. \item The multi-class discriminant model using binary predictors in the \cpkg{binda} package was added. \item Ensembles of partial least squares models (via the \cpkg{enpls}) package was added. \item A bug using \code{gbm} with Poisson data was fixed (thanks to user eriklampa) \item \code{sbfControl} now has a \code{multivariate} option where all the predictors are exposed to the scoring function at once. \item A function \code{compare_models} was added that is a simple comparison of models via \code{diff.resamples)}. \item The row names for the \code{variables} component of \code{rfe} objects were simplified. \item Philipp Bergmeir found a bug that was fixed where \code{bag} would not run in parallel. \item \code{predictionBounds} was not implemented during resampling. } } \section{Changes in version 6.0-35}{ \itemize{ \item A few bug fixes to \code{preProcess} were made related to KNN imputation. \item The parameter labels for polynomial SVM models were fixed \item The tags for \code{dnn} models were fixed. \item The following functions were removed from the package: \code{generateExprVal.method.trimMean}, \code{normalize.AffyBatch.normalize2Reference}, \code{normalize2Reference}, and \code{PLS}. The original code and the man files can be found at \href{https://github.com/topepo/caret/tree/master/deprecated}{https://github.com/topepo/caret/tree/master/deprecated}. \item A number of changes to comply with section 1.1.3.1 of "Writing R Extensions" were made. } } \section{Changes in version 6.0-34}{ \itemize{ \item For the input data \code{x} to \code{train}, we now respect the class of the input value to accommodate other data types (such as sparse matrices). There are some complications though; for pre-processing we throw a warning if the data are not simple matrices or data frames since there is some infrastructure that does not exist for other classes( e.g. \code{complete.cases}). We also throw a warning if \code{returnData <- TRUE} and it cannot be converted to a data frame. This allows the use of sparse matrices and text corpus to be used as inputs into that function. \item \code{plsRglm} was added. \item From the \cpkg{frbs}, the following rule-based models were added: \code{ANFIS}, \code{DENFIS}, \code{FH.GBML}, \code{FIR.DM}, \code{FRBCS.CHI}, \code{FRBCS.W}, \code{FS.HGD}, \code{GFS.FR.MOGAL}, \code{GFS.GCCL}, \code{GFS.LTS}, \code{GFS.THRIFT}, \code{HYFIS}, \code{SBC} and \code{WM}. Thanks to Lala Riza for suggesting these and facilitating their addition to the package. \item From the \cpkg{kernlab} package, SVM models using string kernels were added: \code{svmBoundrangeString}, \code{svmExpoString}, \code{svmSpectrumString} \item A function \code{update.rfe} was added. \item \code{cluster.resamples} was added to the namespace. \item An option to choose the \code{metric} was added to \code{summary.resamples}. \item \code{prcomp.resamples} now passed \code{...} to \code{prcomp}. Also the call to \code{prcomp} uses the formula method so that \code{na.action} can be used. \item The function \code{resamples} was enhanced so that \code{train} and \code{rfe} models that used \code{returnResamp="all"} subsets the resamples to get the appropriate values and issues a warning. The function also fills in missing model names if one or more are not given. \item Several regression simulation functions were added: \code{SLC14_1}, \code{SLC14_2}, \code{LPH07_1} and \code{LPH07_2} \item \code{print.train} was re-factored so that \code{format.data.frame} is now used. This should behave better when using \cpkg{knitr}. \item The error message in \code{train.formula} was improved to provide more helpful feedback in cases where there is at least one missing value in each row of the data set. \item \code{ggplot.train} was modified so that groups are distinguished by color and shape. \item Options were added to \code{plot.train} and \code{ggplot.train} called \code{nameInStrip} that will print the name and value of any tuning parameters shown in panels. \item A bug was fixed by Jia Xu within the knn imputation code used by \code{preProcess}. } } \section{Changes in version 6.0-30}{ \itemize{ \item A missing piece of documentation in \code{trainControl} for adaptive models was filled in. \item A warning was added to \code{plot.train} and \code{ggplot.train} to note that the relationship between the resampled performance measures and the tuning parameters can be deceiving when using adaptive resampling. \item A check was added to \code{trainControl} to make sure that a value of \code{min} makes sense when using adaptive resampling. } } \section{Changes in version 6.0-29}{ \itemize{ \item A man page with the list of models available via \code{train} was added back into the package. See \code{?models}. \item Thoralf Mildenberger found and fixed a bug in the variable importance calculation for neural network models. \item The output of \code{varImp} for \code{pamr} models was updated to clarify the ordering of the importance scores. \item \code{getModelInfo} was updated to generate a more informative error message if the user looks for a model that is not in the package's model library. \item A bug was fixed related to how seeds were set inside of \code{train}. \item The model \code{"parRF"} (parallel random forest) was added back into the library. \item When case weights are specified in \code{train}, the hold-out weights are exposed when computing the summary function. \item A check was made to convert a \code{data.table} given to \code{train} to a data frame (see \url{http://stackoverflow.com/questions/23256177/r-caret-renames-column-in-data-table-after-training}). } } \section{Changes in version 6.0-25}{ \itemize{ \item Changes were made that stopped execution of \code{train} if there are no rows in the data (changes suggested by Andrew Ziem) \item Andrew Ziem also helped improve the documentation. } } \section{Changes in version 6.0-24}{ \itemize{ \item Several models were updated to work with case weights. \item A bug in \code{rfe} was found where the largest subset size have the same results as the full model. Thanks to Jose Seoane for reporting the bug. } } \section{Changes in version 6.0-22}{ \itemize{ \item For some parallel processing technologies, the package now export more internal functions. \item A bug was fixed in \code{rfe} that occurred when LOO CV was used. \item Another bug was fixed that occurred for some models when \code{tuneGrid} contained only a single model. } } \section{Changes in version 6.0-21}{ \itemize{ \item A new system for user-defined models has been added. See \href{http://caret.r-forge.r-project.org/custom_models.html}{http://caret.r-forge.r-project.org/custom_models.html}. \item When creating the grid of tuning parameter values, the column names no longer need to be preceded by a period. Periods can still be used as before but are not required. This isn't guaranteed to break backwards compatibility but it may in some cases. \item \code{trainControl} now has a \code{method = "none"} resampling option that bypasses model tuning and fits the model to the entire training set. Note that if more than one model is specified an error will occur. \item \code{logicForest} models were removed since the package is now archived. \item \code{CSimca} and \code{RSimca} models from the \cpkg{rrcovHD} package were added. \item Model \code{elm} from the \cpkg{elmNN} package was added. \item Models \code{rknn} and \code{rknnBel} from the \cpkg{rknn} package were added \item Model \code{brnn} from the \cpkg{brnn} package was added. \item \code{panel.lift2} and \code{xyplot.lift} now have an argument called \code{values} that show the percentages of samples found for the specified percentages of samples tested. \item \code{train}, \code{rfe} and \code{sbf} should no longer throw a warning that "executing %dopar% sequentially: no parallel backend registered". \item A \code{ggplot} method for \code{train} was added. \item Imputation via medians was added to \code{preProcess} by Zachary Mayer. \item A small change was made to \code{rpart} models. Previously, when the final model is determined, it would be fit by specifying the model using the \code{cp} argument of \code{rpart.control}. This could lead to duplicated Cp values in the final list of possible Cp values. The current version fits the final model slightly different. An initial model is fit using \code{cp = 0} then it is pruned using \code{prune.rpart} to the desired depth. This shouldn't be different for the vast majority of data sets. Thanks to Jeff Evans for pointing this out. \item The method for estimating sigma for SVM and RVM models was slightly changed to make them consistent with how \code{ksvm} and \code{rvm} does the estimation. \item The default behavior for \code{returnResamp} in \code{rfeControl} and \code{sbfControl} is now \code{returnResamp = "final"}. \item \code{cluster} was added as a general class with a specific method for \code{resamples} objects. \item The refactoring of model code resulted in a number of packages being eliminated from the depends field. Additionally, a few were moved to exports. } } \section{Changes in version 5.17-07}{ \itemize{ \item A bug in \code{spatialSign} was fixed for data frames with a single column. \item Pre-processing was not applied to the training data set prior to grid creation. This is now done but only for models that use the data when defining the grid. Thanks to Brad Buchsbaum for finding the bug. \item Some code was added to \code{rfe} to truncate the subset sizes in case the user over-specified them. \item A bug was fixed in \code{gamFuncs} for the \code{rfe} function. \item Option in \code{trainControl}, \code{rfeControl} and \code{sbfControl} were added so that the user can set the seed at each resampling iteration (most useful for parallel processing). Thanks to Allan Engelhardt for the recommendation. \item Some internal refactoring of the data was done to prepare for some upcoming resampling options. \item \code{predict.train} now has an explicit \code{na.action} argument defaulted to \code{na.omit}. If imputation is used in \code{train}, then \code{na.action = na.pass} is recommended. \item A bug was fixed in \code{dummyVars} that occured when missing data were in \code{newdata}. The function \code{contr.dummy} is now deprecated and \code{contr.ltfr} should be used (if you are using it at all). Thanks to stackexchange user mchangun for finding the bug. \item A check is now done inside \code{dummyVars} when \code{levelsOnly = TRUE} to see if any predictors share common levels. \item A new option \code{fullRank} was added to \code{dummyVars}. When true, \code{contr.treatment} is used. Otherwise, \code{contr.ltfr} is used. \item A bug in \code{train} was fixed with \code{gbm} models (thanks to stackoverflow user screechOwl for finding it). } } \section{Changes in version 5.16-24}{ \itemize{ \item The \code{protoclass} function in the \cpkg{protoclass} package was added. The model uses a distance matrix as input and the \code{train} method also uses the \cpkg{proxy} package to compute the distance using the Minkowski distance. The two tuning parameters is the neighborhood size (\code{eps}) and the Minkowski distance parameter (\code{p}). \item A bug was (hopefully) fixed that occurred when some type of parallel processing was used with \code{train}. The problem is that the \code{methods} package was not being loaded in the workers. While reproducible, it is unknown why this occurs and why it is only for some technologies and systems. The \code{methods} package is now a formal dependency and we coerce the workers to load it remotely. \item A bug was fixed where some calls were printed twice. \item For \code{rpart}, \code{C5.0} and \code{ksvm}, cost-sensitive versions of these models for two classes were added to \code{train}. The method values are \code{rpartCost}, \code{C5.0Cost} and \code{svmRadialWeights}. \item The prediction code for the \code{ksvm} models was changed. There are some cases where the class predictions and the predicted class probabilities disagree. This usually happens when the probabilities are close to 0.50 (in the two class case). A \cpkg{kernlab} bug has been filed. In the meantime, if the \code{ksvm} model uses a probability model, the class probabilities are generated first and the predicted class is assigned to the probability with the largest value. Thanks to Kjell Johnson for finding that one. \item \code{print.train} was changed so that tune parameters that are logicals are printed well. } } \section{Changes in version 5.16-13}{ \itemize{ \item Added a few exemptions to the logic that determines whether a model call should be scrubbed. \item An error trap was created to catch issues with missing importance scores in \code{rfe}. } } \section{Changes in version 5.16-03}{ \itemize{ \item A function \code{twoClassSim} was added for benchmarking classification models. \item A bug was fixed in \code{predict.nullModel} related to predicted class probabilities. \item The version requirement for \cpkg{gbm} was updated. \item The function \code{getTrainPerf} was made visible. \item The automatic tuning grid for \code{sda} models from the \cpkg{sda} package was changed to include \code{lambda}. \item When \code{randomForests} is used with \code{train} and \code{tuneLength == 1}, the \code{randomForests} default value for \code{mtry} is used. \item Maximum uncertainty linear discriminant analysis (\code{Mlda}) and factor-based linear discriminant analysis (\code{RFlda}) from the \cpkg{HiDimDA} package were added to \code{train}. } } \section{Changes in version 5.15-87}{ \itemize{ \item Added the Yeo-Johnson power transformation from the \cpkg{car} package to the \code{preProcess} function. \item A \code{train} bug was fixed for the \code{rrlda} model (found by Tiago Branquinho Oliveira). \item The \code{extraTrees} model in the \cpkg{extraTrees} package was added. \item The \code{kknn.train} model in the \cpkg{kknn} package was added. \item A bug was fixed in \code{lrFuncs} where the class threshold was improperly set (thanks to David Meyer). \item A bug related to newer versions of the \cpkg{gbm} package were fixed. Another \cpkg{gbm} bug was fixed related to using non-Bernoulli distributions with two class outcomes (thanks to Zachary Mayer). \item The old funciton \code{getTrainPerf} was finally made visible. \item Some models are created using "do.call" and may contain the entire data set in the call object. A function to "scrub" some model call objects was added to reduce their size. \item The tuning process for \code{sda:::sda} models was changed to add the \code{lambda} parameter. } } \section{Changes in version 5.15-60}{ \itemize{ \item A bug in \code{predictors.earth}, discovered by Katrina Bennett, was fixed. \item A bug induced by version 5.15-052 for the bootstrap 632 rule was fixed. \item The DESCRIPTION file as of 5.15-048 should have used a version-specific lattice dependency. \item \code{lift} can compute gain and lift charts (and defaults to gain) \item The \cpkg{gbm} model was updated to handle 3 or more classes. \item For bagged trees using \cpkg{ipred}, the code in \code{train} defaults to \code{keepX = FALSE} to save space. Pass in \code{keepX = TRUE} to use out-of-bag sampling for this model. \item Changes were made to support vector machines for classification models due to bugs with class probabilities in the latest version of \cpkg{kernlab}. The \code{prob.model} will default to the value of \code{classProbs} in the \code{trControl} function. If \code{prob.model} is passed in as an argument to \code{train}, this specification over-rides the default. In other words, to avoid generating a probability model, set either \code{classProbs = FALSE} or \code{prob.model = FALSE}. } } \section{Changes in version 5.15-052}{ \itemize{ \item Added \code{bayesglm} from the \cpkg{arm} package. \item A few bugs were fixed in \code{bag}, thanks to Keith Woolner. Most notably, out-of-bag estimates are now computed when the prediction function includes a column called \code{pred}. \item Parallel processing was implemented in \code{bag} and \code{avNNet}, which can be turned off using an optional arguments. \item \code{train}, \code{rfe}, \code{sbf}, \code{bag} and \code{avNNet} were given an additional argument in their respective control files called \code{allowParallel} that defaults to \code{TRUE}. When \code{Code}, the code will be executed in parallel if a parallel backend (e.g. \cpkg{doMC}) is registered. When \code{allowParallel = FALSE}, the parallel backend is always ignored. The use case is when \code{rfe} or \code{sbf} calls \code{train}. If a parallel backend with P processors is being used, the combination of these functions will create P^2 processes. Since some operations benefit more from parallelization than others, the user has the ability to concentrate computing resources for specific functions. \item A new resampling function called \code{createTimeSlices} was contributed by Tony Cooper that generates cross-validation indices for time series data. \item A few more options were added to \code{trainControl}. \code{initialWindow}, \code{horizon} and \code{fixedWindow} are applicable for when \code{method = "timeslice"}. Another, \code{indexOut} is an optional list of resampling indices for the hold-out set. By default, these values are the unique set of data points not in the training set. \item A bug was fixed in multiclass \code{glmnet} models when generating class probabilities (thanks to Bradley Buchsbaum for finding it). } } \section{Changes in version 5.15-048}{ \itemize{ \item The three vignettes were removed and two things were added: a smaller vignette and a large collection of help pages at \url{http://caret.r-forge.r-project.org/}. \item Minkoo Seo found a bug where \code{na.action} was not being properly set with train.formula(). \item \code{parallel.resamples} was changed to properly account for missing values. \item Some testing code was removed from \code{probFunction} and \code{predictionFunction}. \item Fixed a bug in \code{sbf} exposed by a new version of \cpkg{plyr}. \item Changed the package dependency on \cpkg{reshape} to \cpkg{reshape2}. \item To be more consistent with recent versions of \cpkg{lattice}, the \code{parallel.resamples} function was changed to \code{parallelplot.resamples}. \item Since \code{ksvm} now allows probabilities when class weights are used, the default behavior in \code{train} is to set \code{prob.model = TRUE} unless the user explicitly sets it to \code{FALSE}. However, I have reported a bug in \code{ksvm} that gives inconsistent results with class weights, so this is not advised at this point in time. \item Bugs were fix in \code{predict.bagEarth} and \code{predict.bagFDA}. \item When using \code{rfeControl(saveDetails = TRUE)} or \code{sbfControl(saveDetails = TRUE)} an additional column is added to \code{object$pred} called \code{rowIndex}. This indicates the row from the original data that is being held-out. } } \section{Changes in version 5.15-045}{ \itemize{ \item A bug was fixed that induced \code{NA} values in SVM model predictions. } } \section{Changes in version 5.15-042}{ \itemize{ \item Many examples are wrapped in dontrun to speed up cran checking. \item The \code{scrda} methods were removed from the package (on 6/30/12, R Core sent an email that "since we haven't got fixes for long standing warnings of the rda packages since more than half a year now, we set the package to ORPHANED.") \item \cpkg{C50} was added (model codes \code{C5.0}, \code{C5.0Tree} and \code{C5.0Rules}). \item Fixed a bug in \code{train} with NaiveBayes when \code{fL != 0} was used \item The output of \code{train} with \code{verboseIter = TRUE} was modified to show the resample label as well as logging when the worker started and stopped the task (better when using parallel processing). \item Added a long-hidden function \code{downSample} for class imbalances \item An \code{upSample} function was added for class imbalances. \item A new file, aaa.R, was added to be compiled first that tries to eliminate the dreaded 'no visible binding for global variable' false positives. Specific namespaces were used with several functions for avoid similar warnings. \item A bug was fixed with \code{icr.formula} that was so ridiculous, I now know that nobody has ever used that function. \item Fixed a bug when using \code{method = "oob"} with \code{train} \item Some exceptions were added to \code{plot.train} so that some tuning parameters are better labeled. \item \code{dotplot.resamples} and \code{bwplot.resamples} now order the models using the first metric. \item A few of the lattice plots for the \code{resamples} class were changed such that when only one metric is shown: the strip is not shown and the x-axis label displays the metric \item When using \code{trainControl(savePredictions = TRUE)} an additional column is added to \code{object$pred} called \code{rowIndex}. This indicates the row from the original data that is being held-out. \item A variable importance function for \code{nnet} objects was created based on Gevrey, M., Dimopoulos, I., & Lek, S. (2003). Review and comparison of methods to study the contribution of variables in artificial neural network models. ecological modelling, 160(3), 249–264. \item The \code{predictor} function for \code{glmnet} was update and a variable importance function was also added. \item Raghu Nidagal found a bug in \code{predict.avNNet} that was fixed. \item \code{sensitivity} and \code{specificity} were given an \code{na.rm} argument. \item A first attempt at fault tolerance was added to \code{train}. If a model fit fails, the predictions are set to \code{NA} and a warning is issued (eg "model fit failed for Fold04: sigma=0.00392, C=0.25"). When \code{verboseIter = TRUE}, the warning is also printed to the log. Resampled performance is calculated on only the non-missing estimates. This can also be done during predictions, but must be done on a model by model basis. Fault tolerance was added for \cpkg{kernlab} models only at this time. \item \code{lift} was modified in two ways. First, \code{cuts} is no longer an argument. The function always uses cuts based on the number of unique probability estimates. Second, a new argument called \code{label} is available to use alternate names for the models (e.g. names that are not valid R variable names). \item A bug in \code{print.bag} was fixed. \item Class probabilities were not being generated for sparseLDA models. \item Bugs were fixed in the new varImp methods for PART and RIPPER \item Starting using namespaces for \code{ctree} and \code{cforest} to avoid conflicts between duplicate function names in the \cpkg{party} and \cpkg{partykit} package \item A set of functions for RFE and logistic regression (\code{lrFuncs}) was added. \item A bug in \code{train} with \code{method="glmStepAIC"} was fixed so that \code{direction} and other \code{stepAIC} arguments were honored. \item A bug was fixed in \code{preProcess} where the number of ICA components was not specified. (thanks to Alexander Lebedev) \item Another bug was fixed for oblique random forest methods in \code{train}. (thanks to Alexander Lebedev) } } \section{Changes in version 5.15-023}{ \itemize{ \item The list of models that can accept factor inputs directly was expanded to include the \cpkg{RWeka} models, \code{ctree}, \code{cforest} and custom models. \item Added model \code{lda2}, which tunes by the number of functions used during prediction. \item \code{predict.train} allows probability predictions for custom models now (thanks to Peng Zhang) \item \code{confusionMatrix.train} was updated to use the default \code{confusionMatrix} code when \code{norm = "none"} and only a single hold-out was used. \item Added variable importance metrics for PART and RIPPER in the \cpkg{RWeka} package. \item vignettes were moved from /inst/doc to /vignettes } } \section{Changes in version 5.14-023}{ \itemize{ \item The model details in \code{?train} was changed to be more readable \item Added two models from the \cpkg{RRF} package. \code{RRF} uses a penalty for each predictor based on the scaled variable importance scores from a prior random forest fit. \code{RRFglobal} sets a common, global penalty across all predictors. \item Added two models from the \cpkg{KRLS} package: \code{krlsRadial} and \code{krlsPoly}. Both have kernel parameters (\code{sigma} and \code{degree}) and a common regularization parameter \code{lambda}. The default for \code{lambda} is \code{NA}, letting the \code{krls} function estimate it internally. \code{lambda} can also be specified via \code{tuneGrid}. \item \code{twoClassSummary} was modified to wrap the call to \code{pROC:::roc} in a \code{try} command. In cases where the hold-out data are only from one class, this produced an error. Now it generates \code{NA} values for the AUC when this occurs and a general warning is issued. \item The underlying workflows for \code{train} were modified so that missing values for performance measures would not throw an error (but will issue a warning). } } \section{Changes in version 5.13-037}{ \itemize{ \item Models \code{mlp}, \code{mlpWeightDecay}, \code{rbf} and \code{rbfDDA} were added from \cpkg{RSNNS}. \item Functions \code{roc}, \code{rocPoint} and \code{aucRoc} finally met their end. The cake was a lie. \item This NEWS file was converted over to Rd format. } } \section{Changes in version 5.13-020}{ \itemize{ \item \code{\link{lift}} was expanded into \code{\link{lift.formula}} for calculating the plot points and \code{\link{xyplot.lift}} to create the plot. \item The package vignettes were altered to stop loading external RData files. \item A few \code{match.call} changes were made to pass new R CMD check tests. \item \code{\link{calibration}}, \code{\link{calibration.formula}} and \code{\link{xyplot.calibration}} were created to make probability calibration plots. \item Model types \code{xyf} and \code{bdk} from the \cpkg{kohonen} package were added. \item \code{\link{update.train}} was added so that tuning parameters can be manually set if the automated approach to setting their values is insufficient. } } \section{Changes in version 5.11-006}{ \itemize{ \item When using \code{method = "pls"} in \code{\link{train}}, the \code{\link[pls]{plsr}} function used the default PLS algorithm ("kernelpls"). Now, the full orthogonal scores method is used. This results in the same model, but a more extensive set of values are calculated that enable VIP calculations (without much of a loss in computational efficient). \item A check was added to \code{\link{preProcess}} to ensure valid values of \code{method} were used. \item A new method, \code{kernelpls}, was added. \item \code{residuals} and \code{summary} methods were added to \code{\link{train}} objects that pass the final model to their respective functions. } } \section{Changes in version 5.11-006}{ \itemize{ \item Bugs were fixed that prevented hold-out predictions from being returned. } } \section{Changes in version 5.11-003}{ \itemize{ \item A bug in \code{roc} was found when the classes were completely separable. \item The ROC calculations for \code{\link{twoClassSummary}} and \code{\link{filterVarImp}} were changed to use the \cpkg{pROC} package. This, and other changes, have increased efficiency. For \code{\link{filterVarImp}} on the cell segmentation data lead to a 54-fold decrease in execution time. For the Glass data in the \cpkg{mlbench} package, the speedup was 37-fold. Warnings were added for \code{roc}, \code{aucRoc} and \code{rocPoint} regarding their deprecation. \item random ferns (package \cpkg{rFerns}) were added \item Another sparse LDA model (from the penalizedLDA) was also added } } \section{Changes in version 5.09-002}{ \itemize{ \item Fixed a bug which occurred when \code{\link[pls]{plsda}} models were used with class probabilities \item As of 8/15/11, the \code{\link[glmnet]{glmnet}} function was updated to return a character vector. Because of this, \code{\link{train}} required modification and a version requirement was put in the package description file. } } \section{Changes in version 5.09-006}{ \itemize{ \item Shea X made a suggestion and provided code to improve the speed of prediction when sequential parameters are used for \code{\link[gbm]{gbm}} models. \item Andrew Ziem suggested an error check with \code{metric = "ROC"} and \code{classProbs = FALSE}. \item Andrew Ziem found a bug in how \code{\link{train}} obtained \code{\link[earth]{earth}} class probabilities } } \section{Changes in version 5.08-011}{ \itemize{ \item Andrew Ziem found another small bug with parallel processing and \code{\link{train}} (functions in the caret namespace cannot be found). \item Ben Hoffman found a bug in \code{\link{pickSizeTolerance}} that was fixed. \item Jiaye Yu found (and fixed) a bug in getting predictions back from \code{\link{rfe}} } } \section{Changes in version 5.07-024}{ \itemize{ \item Using \code{saveDetails = TRUE} in \code{\link{sbfControl}} or \code{\link{rfeControl}} will save the predictions on the hold-out sets (Jiaye Yu wins the prize for finding that one). \item \code{\link{trainControl}} now has a logical to save the hold-out predictions. } } \section{Changes in version 5.07-005}{ \itemize{ \item \code{type = "prob"} was added for \code{\link{avNNet}} prediction. \item A warning was added when a model from \cpkg{RWeka} is used with \code{\link{train}} and (it appears that) \cpkg{multicore} is being used for parallel processing. The session will crash, so don't do that. \item A bug was fixed where the extrapolation limits were being applied in \code{\link{predict.train}} but not in \code{\link{extractPrediction}}. Thanks to Antoine Stevens for finding this. \item Modifications were made to some of the workflow code to expose internal functions. When parallel processing was used with \cpkg{doMPI} or \cpkg{doSMP}, \cpkg{foreach} did not find some \cpkg{caret} internals (but \cpkg{doMC} did). } } \section{Changes in version 5.07-001}{ \itemize{ \item changed calls to \code{\link[pls]{predict.mvr}} since the \cpkg{pls} package now has a namespace. } } \section{Changes in version 5.06-002}{ \itemize{ \item a beta version of custom models with \code{\link{train}} is included. The "caretTrain" vignette was updated with a new section that defines how to make custom models. } } \section{Changes in version 5.05-004}{ \itemize{ \item laying some of the groundwork for custom models \item updates to get away from deprecated (mean and sd on data frames) \item The pre-processing in \code{\link{train}} bug of the last version was not entirely squashed. Now it is. } } \section{Changes in version 5.04-007}{ \itemize{ \item \code{\link{panel.lift}} was moved out of the examples in \code{?lift} and into the package along with another function, \code{\link{panel.lift2}}. \item \code{\link{lift}} now uses \code{\link{panel.lift2}} by default \item Added robust regularized linear discriminant analysis from the \cpkg{rrlda} package \item Added \code{evtree} from \cpkg{evtree} \item A weird bug was fixed that occurred when some models were run with sequential parameters that were fixed to single values (thanks to Antoine Stevens for finding this issue). item Another bug was fixed where pre-processing with \code{\link{train}} could fail } } \section{Changes in version 5.03-003}{ \itemize{ \item pre-processing in \code{\link{train}} did not occur for the final model fit } } \section{Changes in version 5.02-011}{ \itemize{ \item A function, \code{\link{lift}}, was added to create lattice objects for lift plots. \item Several models were added from the \cpkg{obliqueRF} package: 'ORFridge' (linear combinations created using L2 regularization), 'ORFpls' (using partial least squares), 'ORFsvm' (linear support vector machines), and 'ORFlog' (using logistic regression). As of now, the package only support classification. \item Added regression models \code{simpls} and \code{widekernelpls}. These are new models since both \code{\link{train}} and \code{\link[pls]{plsr}} have an argument called \code{method}, so the computational algorithm could not be passed through using the three dots. \item Model \code{rpart} was added that uses \code{cp} as the tuning parameter. To make the model codes more consistent, \code{rpart} and \code{ctree} correspond to the nominal tuning parameters (\code{cp} and \code{mincriterion}, respectively) and \code{rpart2} and \code{ctree2} are the alternate versions using \code{maxdepth}. \item The text for \code{ctree}'s tuning parameter was changed to '1 - P-Value Threshold' \item The argument \code{controls} was not being properly passed through in models \code{ctree} and \code{ctree2}. } } \section{Changes in version 5.01-001}{ \itemize{ \item \code{controls} was not being set properly for \code{cforest} models in \code{\link{train}} \item The print methods for \code{\link{train}}, \code{\link{rfe}} and \code{\link{sbf}} did not recognize LOOCV \item \code{\link{avNNet}} sometimes failed with categorical outcomes with \code{bag = FALSE} \item A bug in \code{\link{preProcess}} was fixed that was triggered by matrices without dimnames (found by Allan Engelhardt) \item bagged MARS models with factor outcomes now work \item \code{cforest} was using the argument \code{control} instead of \code{controls} \item A few bugs for class probabilities were fixed for \code{slda}, \code{hdda}, \code{glmStepAIC}, \code{nodeHarvest}, \code{avNNet} and \code{sda} \item When looping over models and resamples, the \cpkg{foreach} package is now being used. Now, when using parallel processing, the \cpkg{caret} code stays the same and parallelism is invoked using one of the "do" packages (eg. \cpkg{doMC}, \cpkg{doMPI}, etc). This affects \code{\link{train}}, \code{\link{rfe}} and \code{\link{sbf}}. Their respective man pages have been revised to illustrate this change. \item The order of the results produced by \code{\link{defaultSummary}} were changed so that the ROC AUC is first \item A few man and C files were updated to eliminate R CMD check warnings \item Now that we are using foreach, the verbose option in \code{\link{trainControl}}, \code{\link{rfeControl}} and \code{\link{sbfControl}} are now defaulted to \code{FALSE} \item \code{\link{rfe}} now returns the variable ranks in a single data frame (previously there were data frames in lists of lists) for each of use. This will will break code from previous versions. The built-in RFE functions were also modified \item confusionMatrix methods for \code{\link{rfe}} and \code{\link{sbf}} were added \item NULL values of 'method' in \code{\link{preProcess}} are no longer allowed \item a model for ridge regression was added (\code{method = 'ridge'}) based on \code{\link[eslasticnet]{enet}}. } } \section{Changes in version 4.98}{ \itemize{ \item A bug was fixed in a few of the bagging aggregation functions (found by Harlan Harris). \item Fixed a bug spotted by Richard Marchese Robinson in createFolds when the outcome was numeric. The issue is that \code{\link{createFolds}} is trying to randomize \code{n/4} numeric samples to \code{k} folds. With less than 40 samples, it could not always do this and would generate less than \code{k} folds in some cases. The change will adjust the number of groups based on \code{n} and \code{k}. For small samples sizes, it will not use stratification. For larger data sets, it will at most group the data into quartiles. \item A function \code{\link{confusionMatrix.train}} was added to get an average confusion matrices across resampled hold-outs when using the \code{\link{train}} function for classification. \item Added another model, \code{\link{avNNet}}, that fits several neural networks via the \cpkg{nnet} package using different seeds, then averages the predictions of the networks. There is an additional bagging option. \item The default value of the 'var' argument of \code{\link{bag}} was changed. \item As requested, most options can be passed from \code{\link{train}} to \code{\link{preProcess}}. The \code{\link{trainControl}} function was re-factored and several options (e.g. \code{k}, \code{thresh}) were combined into a single list option called \code{preProcOptions}. The default is consistent with the original configuration: \code{preProcOptions = list(thresh = 0.95, ICAcomp = 3, k = 5)} \item nother option was added to \code{\link{preProcess}}. The \code{pcaComp} option can be used to set exactly how many components are used (as opposed to just a threshold). It defaults to \code{NULL} so that the threshold method is still used by default, but a non-null value of \code{pcaComp} over-rides \code{thresh}. \item When created within \code{\link{train}}, the call for \code{\link{preProcess}} is now modified to be a text string ("scrubed") because the call could be very large. \item Removed two deprecated functions: \code{applyProcessing} and \code{processData}. \item A new version of the cell segmentation data was saved and the original version was moved to the package website (see \code{\link{segmentationData}} for location). First, several discrete versions of some of the predictors (with the suffix \code{"Status"}) were removed. Second, there are several skewed predictors with minimum values of zero (that would benefit from some transformation, such as the log). A constant value of 1 was added to these fields: \code{AvgIntenCh2}, \code{FiberAlign2Ch3}, \code{FiberAlign2Ch4}, \code{SpotFiberCountCh4} and \code{TotalIntenCh2}. } } \section{Changes in version 4.92}{ \itemize{ \item Some tweaks were made to \code{\link{plot.train}} in a effort to get the group key to look less horrid. \item \code{\link{train}}, \code{\link{rfe}} and \code{\link{sbf}} are now able to estimate the time that these models take to predict new samples. Their respective control objects have a new option, \code{timingSamps}, that indicates how many of the training set samples should be used for prediction (the default of zero means do not estimate the prediction time). \item \code{\link{xyplot.resamples}} was modified. A new argument, \code{what}, has values: \code{"scatter"} plots the resampled performance values for two models; \code{"BlandAltman"} plots the difference between two models by the average (aka a MA plot) for two models; \code{"tTime"}, \code{"mTime"}, \code{"pTime"} plot the total model building and tuning; time (\code{"t"}) or the final model building time (\code{"m"}) or the time to produce predictions (\code{"p"}) against a confidence interval for the average performance. 2+ models can be used. \item Three new model types were added to \code{\link{train}} using \code{\link[leaps]{regsubsets}} in the \cpkg{leaps} package: \code{"leapForward"}, \code{"leapBackward"} and \code{"leapSeq"}. The tuning parameter, \code{nvmax}, is the maximum number of terms in the subset. \item The seed was accidentally set when \code{\link{preProcess}} used ICA (spotted by Allan Engelhardt) \item \code{\link{preProcess}} was always being called (even to do nothing) (found by Guozhu Wen) } } \section{Changes in version 4.91}{ \itemize{ \item Added a few new models associated with the \cpkg{bst} package: bstTree, bstLs and bstSm. \item A model denoted as \code{"M5"} that combines M5P and M5Rules from the \cpkg{RWeka} package. This new model uses either of these functions depending on the tuning parameter \code{"rules"}. } } \section{Changes in version 4.90}{ \itemize{ \item Fixed a bug with \code{\link{train}} and \code{method = "penalized"}. Thanks to Fedor for finding it. } } \section{Changes in version 4.89}{ \itemize{ \item A new tuning parameter was added for \code{M5Rules} controlling smoothing. \item The Laplace correction value for Naive Bayes was also added as a tuning parameter. \item \code{\link{varImp.RandomForest}} was updated to work. It now requires a recent version of the \cpkg{party} package. } } \section{Changes in version 4.88}{ \itemize{ \item A variable importance method was created for \cpkg{Cubist} models. } } \section{Changes in version 4.87}{ \itemize{ \item Altered the earth/MARS/FDA labels to be more exact. \item Added cubist models from the \cpkg{Cubist} package. \item A new option to \code{\link{trainControl}} was added to allow users to constrain the possible predicted values of the model to the range seen in the training set or a user-defined range. One-sided ranges are also allowed. } } \section{Changes in version 4.85}{ \itemize{ \item Two typos fixed in \code{\link{print.rfe}} and \code{\link{print.sbf}} (thanks to Jan Lammertyn) } } \section{Changes in version 4.83}{ \itemize{ \item \code{\link{dummyVars}} failed with formulas using \code{"."} (\code{all.vars} does not handle this well) \item \code{tree2} was failing for some classification models \item When SVM classification models are used with \code{class.weights}, the options \code{prob.model} is automatically set to \code{FALSE} (otherwise, it is always set to \code{TRUE}). A warning is issued that the model will not be able to create class probabilities. \item Also for SVM classification models, there are cases when the probability model generates negative class probabilities. In these cases, we assign a probability of zero then coerce the probabilities to sum to one. \item Several typos in the help pages were fixed (thanks to Andrew Ziem). \item Added a new model, \code{svmRadialCost}, that fits the SVM model and estimates the \code{sigma} parameter for each resample (to properly capture the uncertainty). \item \code{\link{preProcess}} has a new method called \code{"range"} that scales the predictors to [0, 1] (which is approximate for new samples if the training set ranges is narrow in comparison). \item A check was added to \code{\link{train}} to make sure that, when the user passes a data frame to \code{\link{tuneGrid}}, the names are correct and complete. \item \code{\link{print.train}} prints the number of classes and levels for classification models. } } \section{Changes in version 4.78}{ \itemize{ \item Added a few bagging modules. See ?bag. \item Added basic timings of the entire call to \code{\link{train}}, \code{\link{rfe}} and \code{\link{sbf}} as well as the fit time of the final model. These are stored in an element called "times". \item The data files were updated to use better compression, which added a higher R version dependency. \item \code{\link{plot.train}} was pretty much re-written to more effectively use trellis theme defaults and to allow arguments (e.g. axis labels, keys, etc) to be passed in to over-ride the defaults. \item Bug fix for lda bagging function \item Bug fix for \code{\link{print.train}} when \code{preProc} is \code{NULL} \item \code{\link{predict.BoxCoxTrans}} would go all klablooey if there were missing values \item \code{\link{varImp.rpart}} was failing with some models (thanks to Maria Delgado) } } \section{Changes in version 4.77}{ \itemize{ \item A new class was added or estimating and applying the Box-Cox transformation to data called BoxCoxTrans. This is also included as an option to transform predictor variables. Although the Box-Tidwell transformation was invented for this purpose, the Box-Cox transformation is more straightforward, less prone to numerical issues and just as effective. This method was also added to \code{\link{preProcess}}. \item Fixed mis-labelled x axis in \code{\link{plot.train}} when a transformation is applied for models with three tuning parameters. \item When plotting a \code{\link{train}} object with \code{method == "gbm"} and multiple values of the shrinkage parameter, the ordering of panels was improved. \item Fixed bugs for regression prediction using \code{partDSA} and \code{qrf}. \item Another bug, reported by Jan Lammertyn, related to \code{\link{extractPrediciton}} with a single predictor was also fixed. } } \section{Changes in version 4.76}{ \itemize{ \item Fixed a bug where linear SVM models were not working for classification } } \section{Changes in version 4.75}{ \itemize{ \item \code{'gcvEearth'} which is the basic MARS model. The pruning procedure is the nominal one based on GCV; only the degree is tuned by \code{\link{train}}. \item \code{'qrnn'} for quantile regression neural networks from the \cpkg{qrnn} package. \item \code{'Boruta'} for random forests models with feature selection via the \cpkg{Boruta} package. } } \section{Changes in version 4.74}{ \itemize{ \item Some changes to \code{\link{print.train}}: the call is not automatically printed (but can be when \code{\link{print.train}} is explicitly invoked); the "Selected" column is also not automatically printed (but can be); non-table text now respects \code{options("width")}; only significant digits are now printed when tuning parameters are kept at a constant value } } \section{Changes in version 4.73}{ \itemize{ \item Bug fixes to \code{\link{preProcess}} related to complete.cases and a single predictor. \item For knn models (knn3 and knnreg), added automatic conversion of data frames to matrices } } \section{Changes in version 4.72}{ \itemize{ \item A new function for \code{\link{rfe}} with \cpkg{gam} was added. \item "Down-sampling" was implemented with \code{\link{bag}} so that, for classification models, each class has the same number of classes as the smallest class. \item Added a new class, \code{\link{dummyVars}}, that creates an entire set of binary dummy variables (instead of the reduced, full rank set). The initial code was suggested by Gabor Grothendieck on R-Help. The predict method is used to create dummy variables for any data set. \item Added \code{\link{R2}} and \code{\link{RMSE}} functions for evaluating regression models \item \code{\link{varImp.gam}} failed to recognize objects from \cpkg{mgcv} \item a small fix to test a logical vector \code{\link{filterVarImp}} \item When \code{\link{diff.resamples}} calculated the number of comparisons, the \code{"models"} argument was ignored. \item \code{\link{predict.bag}} was ignoring \code{type = "prob"} \item Minor updates to conform to R 2.13.0 } } \section{Changes in version 4.70}{ \itemize{ \item Added a warning to \code{\link{train}} when class levels are not valid R variable names. \item Fixed a bug in the variable importance function for \code{multinom} objects. \item Added p-value adjustments to \code{\link{summary.diff.resamples}}. Confidence intervals in \code{\link{dotplot.diff.resamples}} are adjusted accordingly if the Bonferroni is used. \item For \code{\link{dotplot.resamples}}, no point was plotted when the upper and/or lower interval values were NaN. Now, the point is plotted but without the interval bars. \item Updated \code{\link{print.rfe}} to correctly describe new resampling methods. } } \section{Changes in version 4.69}{ \itemize{ \item Fixed a bug in \code{\link{predict.rfe}} where an error was thrown even though the required predictors were in \code{newdata}. \item Changed \code{\link{preProcess}} so that centering and scaling are both automatic when PCA or ICA are requested. } } \section{Changes in version 4.68}{ \itemize{ \item Added two functions, \code{\link{checkResamples}} and \code{\link{checkConditionalX}} that identify predictor data with degenerate distributions when conditioned on a factor. \item Added a high content screening data set (\code{\link{segmentedData}}) from Hill et al. Impact of image segmentation on high-content screening data quality for SK-BR-3 cells. BMC bioinformatics (2007) vol. 8 (1) pp. 340. \item Fixed bugs in how \code{\link{sbf}} objects were printed (when using repeated CV) and classification models with \cpkg{earth} and \code{classProbs = TRUE}. } } \section{Changes in version 4.67}{ \itemize{ \item Added \code{\link{predict.rfe}} \item Added imputation using bagged regression trees to \code{\link{preProcess}}. \item Fixed bug in \code{\link{varImp.rfe}} that caused incorrect results (thanks to Lawrence Mosley for the find). } } \section{Changes in version 4.65}{ \itemize{ \item Fixed a bug where \code{\link{train}} would not allow knn imputation. \item \code{\link{filterVarImp}} and \code{roc} now check for missing values and use complete data for each predictor (instead of case- wise deletion across all predictors). } } \section{Changes in version 4.64}{ \itemize{ \item Fixed bug introduced in the last version with \code{createDataPartition(... list = FALSE)}. \item Fixed a bug predicting class probabilities when using \cpkg{earth}/glm models \item Fixed a bug that occurred when \code{\link{train}} was used with \code{ctree} or \code{tree2} methods. \item Fixed bugs in \code{\link{rfe}} and \code{\link{sbf}} when running in parallel; not all the resampling results were saved } } \section{Changes in version 4.63}{ \itemize{ \item A p-value from McNemar's test was added to \code{\link{confusionMatrix}}. \item Updated \code{\link{print.train}} so that constant parameters are not shown in the table (but a note is written below the table instead). Also, the output was changed slightly to be more easily read (I hope) \item Adapted \code{\link{varImp.gam}} to work with either \cpkg{mgcv} or \cpkg{gam} packages. \item Expanded the tuning parameters for \code{lvq}. \item Some of the examples in the Model Building vignette were changed \item Added bootstrap 632 rule and repeated cross-validation to \code{\link{trainControl}}. \item A new function, \code{\link{createMultiFolds}}, is used to generate indices for repeated CV. \item The various resampling functions now have *named* lists as output (with prefixes "Fold" for cv and repeated cv and "Resample" otherwise) \item Pre-processing has been added to \code{\link{train}} with the \code{\link{preProcess}} argument. This has been tested when caret function are used with \code{\link{rfe}} and \code{\link{sbf}} (via \code{\link{caretFuncs}} and \code{\link{caretSBF}}, respectively). \item When \code{preProcess(method = "spatialSign")}, centering and scaling is done automatically too. Also, a bug was fixed that stopped the transformation from being executed. \item knn imputation was added to \code{\link{preProcess}}. The \cpkg{RANN} package is used to find the neighbors (the knn impute function in the impute library was consistently generating segmentation faults, so we wrote our own). \item Changed the behavior of \code{\link{preProcess}} in situations where scaling is requested but there is no variation in the predictor. Previously, the method would fail. Now a warning is issued and the value of the standard deviation is coerced to be one (so that scaling has no effect). } } \section{Changes in version 4.62}{ \itemize{ \item Added \code{gam} from \cpkg{mgcv} (with smoothing splines and feature selection) and \code{gam} from \cpkg{gam} (with basic splines and loess) smoothers. For these models, a formula is derived from the data where "near zero variance" predictors (see \code{\link{nearZerVar}}) are excluded and predictors with less than 10 distinct values are entered as linear (i.e. unsmoothed) terms. } } \section{Changes in version 4.61}{ \itemize{ \item Changed \cpkg{earth} fit for classification models to use the \code{glm} argument with a binomial family. \item Added \code{\link{varImp.multinom}}, which is based on the absolute values of the model coefficients } } \section{Changes in version 4.60}{ \itemize{ \item The feature selection vignette was updated slightly (again). } } \section{Changes in version 4.59}{ \itemize{ \item Updated \code{\link{rfe}} and \code{\link{sbf}} to include class probabilities in performance calculations. \item Also, the names of the resampling indices were harmonized across \code{\link{train}}, \code{\link{rfe}} and \code{\link{sbf}}. \item The feature selection vignette was updated slightly. } } \section{Changes in version 4.58}{ \itemize{ \item Added the ability to include class probabilities in performance calculations. See \code{\link{trainControl}} and \code{\link{twoClassSummary}}. \item Updated and restructured the main vignette. } } \section{Changes in version 4.57}{ \itemize{ \item Internal changes related to how predictions from models are stored and summarized. With the exception of loo, the model performance values are calculated by the workers instead of the main program. This should reduce i/o and lay some groundwork for upcoming changes. \item The default grid for \cpkg{relaxo} models were changed based on and initial model fit. \item \cpkg{partDSA} model predictions were modified; there were cases where the user might request X partitions, but the model only produced Y < X. In these cases, the partitions for missing models were replaced with the largest model that was fit. \item The function \code{\link{modelLookup}} was put in the namespace and a man file was added. \item The names of the resample indices are automatically reset, even if the user specified them. } } \section{Changes in version 4.56}{ \itemize{ \item Fixed a bug generated a few versions ago where \code{\link{varImp}} for \code{plsda} and \code{fda} objects crashed. } } \section{Changes in version 4.55}{ \itemize{ \item When computing the scale parameter for RBF kernels, the option to automatically scale the data was changed to \code{TRUE} } } \section{Changes in version 4.54}{ \itemize{ \item Added \code{logic.bagging} in \pkg{logicFT} with \code{method = "logicBag"} } } \section{Changes in version 4.53}{ \itemize{ \item Fixed a bug in \code{\link{varImp.train}} related to nearest shrunken centroid models. \item Added logic regression and logic forests } } \section{Changes in version 4.51}{ \itemize{ \item Added an option to \code{\link{splom.resamples}} so that the variables in the scatter plots are models or metrics. } } \section{Changes in version 4.50}{ \itemize{ \item Added \code{\link{dotplot.resamples}} plus acknowledgements to Hothorn et al. (2005) and Eugster et al. (2008) } } \section{Changes in version 4.49}{ \itemize{ \item Enhanced the \code{tuneGrid} option to allow a function to be passed in. } } \section{Changes in version 4.48}{ \itemize{ \item Added a \code{prcomp} method for the \code{resamples} class } } \section{Changes in version 4.47}{ \itemize{ \item Extended \code{\link{resamples}} to work with \code{\link{rfe}} and \code{\link{sbf}} } } \section{Changes in version 4.46}{ \itemize{ \item Cleaned up some of the man files for the resamples class and added \code{\link{parallel.resamples}}. \item Fixed a bug in \code{\link{diff.resamples}} where \code{...} were not being passed to the test statistic function. \item Added more log messages in \code{\link{train}} when running verbose. \item Added the German credit data set. } } \section{Changes in version 4.45}{ \itemize{ \item Added a general framework for bagging models via the \code{\link{bag}} function. Also, model type \code{"hdda"} from the \cpkg{HDclassif} package was added. } } \section{Changes in version 4.44}{ \itemize{ \item Added \cpkg{neuralnet}, \code{quantregForest} and \code{rda} (from \cpkg{rda}) to \code{\link{train}}. Since there is a naming conflict with \code{rda} from \cpkg{mda}, the \cpkg{rda} model was given a method value of \code{"scrda"}. } } \section{Changes in version 4.43}{ \itemize{ \item Tthe resampling estimate of the standard deviation given by \code{\link{train}} since v 4.39 was wrong \item A new field was added to \code{\link{varImp.mvr}} called \code{"estimate"}. In cases where the mvr model had multiple estimates of performance (e.g. training set, CV, etc) the user can now select which estimate they want to be used in the importance calculation (thanks to Sophie Bréand for finding this) } } \section{Changes in version 4.42}{ \itemize{ \item Added \code{\link{predict.sbf}} and modified the structure of the \code{\link{sbf}} helper functions. The \code{"score"} function only computes the metric used to filter and the filter function does the actual filtering. This was changed so that FDR corrections or other operations that use all of the p-values can be computed. \item Also, the formatting of p-values in \code{\link{print.confusionMatrix}} was changed \item An argument was added to \code{\link{maxDissim}} so that the variable name is returned instead of the index. \item Independent component analysis was added to the list of pre-processing operations and a new model ("icr") was added to fit a pcr-like model with the ICA components. } } \section{Changes in version 4.40}{ \itemize{ \item Added \code{hda} and cleaned up the \cpkg{caret} training vignette } } \section{Changes in version 4.39}{ \itemize{ \item Added several classes for examining the resampling results. There are methods for estimating pair-wise differences and lattice functions for visualization. The training vignette has a new section describing the new features. } } \section{Changes in version 4.38}{ \itemize{ \item Added \cpkg{partDSA} and \code{stepAIC} for linear models and generalized linear models } } \section{Changes in version 4.37}{ \itemize{ \item Fixed a new bug in how resampling results are exported } } \section{Changes in version 4.36}{ \itemize{ \item Added penalized linear models from the \cpkg{foba} package } } \section{Changes in version 4.35}{ \itemize{ \item Added \code{rocc} classification and fixed a typo. } } \section{Changes in version 4.34}{ \itemize{ \item Added two new data sets: \code{\link{dhfr}} and \code{\link{cars}} } } \section{Changes in version 4.33}{ \itemize{ \item Added GAMens (ensembles using gams) \item Fixed a bug in \code{roc} that, for some data cases, would reverse the "positive" class and report sensitivity as specificity and vice-versa. } } \section{Changes in version 4.32}{ \itemize{ \item Added a parallel random forest method in \code{\link{train}} using the \cpkg{foreach} package. \item Also added penalized logistic regression using the \code{plr} function in the \cpkg{stepPlr} package. } } \section{Changes in version 4.31}{ \itemize{ \item Added a new feature selection function, \code{\link{sbf}} (for selection by filter). \item Fixed bug in \code{\link{rfe}} that did not affect the results, but did produce a warning. \item A new model function, \code{\link{nullModel}}, was added. This model fits either the mean only model for regression or the majority class model for classification. \item Also, ldaFuncs had a bug fixed. \item Minor changes to Rd files } } \section{Changes in version 4.30}{ \itemize{ \item For whatever reason, there is now a function in the \cpkg{spls} package by the name of splsda that does the same thing. A few functions and a man page were changed to ensure backwards compatibility. } } \section{Changes in version 4.29}{ \itemize{ \item Added stepwise variable selection for \code{lda} and \code{qda} using the \code{stepclass} function in \cpkg{klaR} } } \section{Changes in version 4.28}{ \itemize{ \item Added robust linear and quadratic discriminant analysis functions from \cpkg{rrcov}. \item Also added another column to the output of \code{\link{extractProb}} and \code{\link{extractPrediction}} that saves the name of the model object so that you can have multiple models of the same type and tell which predictions came from which model. \item Changes were made to \code{plotClassProbs}: new parameters were added and densityplots can now be produced. } } \section{Changes in version 4.27}{ \itemize{ \item Added \cpkg{nodeHarvest} } } \section{Changes in version 4.26}{ \itemize{ \item Fixed a bug in \code{\link{caretFunc}} that led to NaN variable rankings, so that the first k terms were always selected. } } \section{Changes in version 4.25}{ \itemize{ \item Added parallel processing functionality for \code{\link{rfe}} } } \section{Changes in version 4.24}{ \itemize{ \item Added the ability to use custom metrics with \code{\link{rfe}} } } \section{Changes in version 4.22}{ \itemize{ \item Many Rd changes to work with updated parser. } } \section{Changes in version 4.21}{ \itemize{ \item Re-saved data in more compressed format } } \section{Changes in version 4.20}{ \itemize{ \item Added \code{pcr} as a method } } \section{Changes in version 4.19}{ \itemize{ \item Weights argument was added to \code{\link{train}} for models that accept weights \item Also, a bug was fixed for lasso regression (wrong lambda specification) and other for prediction in naive Bayes models with a single predictor. } } \section{Changes in version 4.18}{ \itemize{ \item Fixed bug in new \code{\link{nearZeroVar}} and updated \code{format.earth} so that it does not automatically print the formula } } \section{Changes in version 4.17}{ \itemize{ \item Added a new version of \code{\link{nearZeroVar}} from Allan Engelhardt that is much faster } } \section{Changes in version 4.16}{ \itemize{ \item Fixed bugs in \code{\link{extractProb}} (for glmnet) and \code{\link{filterVarImp}}. \item For glmnet, the user can now pass in their own value of family to \code{\link{train}} (otherwise \code{\link{train}} will set it depending on the mode of the outcome). However, glmnet doesn't have much support for families at this time, so you can't change links or try other distributions. } } \section{Changes in version 4.15}{ \itemize{ \item Fixed bug in \code{\link{createFolds}} when the smallest y value is more than 25% of the data } } \section{Changes in version 4.14}{ \itemize{ \item Fixed bug in \code{\link{print.train}} } } \section{Changes in version 4.13}{ \itemize{ \item Added vbmp from \cpkg{vbmp} package } } \section{Changes in version 4.12}{ \itemize{ \item Added additional error check to \code{\link{confusionMatrix}} \item Fixed an absurd typo in \code{\link{print.confusionMatrix}} } } \section{Changes in version 4.11}{ \itemize{ \item Added: linear kernels for svm, rvm and Gaussian processes; \code{rlm} from \cpkg{MASS}; a knn regression model, knnreg \item A set of functions (class "\code{\link{classDist}}") to computes the class centroids and covariance matrix for a training set for determining Mahalanobis distances of samples to each class centroid was added \item a set of functions (\code{\link{rfe}}) for doing recursive feature selection (aka backwards selection). A new vignette was added for more details } } \section{Changes in version 4.10}{ \itemize{ \item Added \code{OneR} and \code{PART} from \cpkg{RWeka} } } \section{Changes in version 4.09}{ \itemize{ \item Fixed error in documentation for \code{confusionMatrix}. The old doc had \code{"Detection Prevalence = A/(A+B)"} and the new one has \code{"Detection Prevalence =(A+B)(A+B+C+D)"}. The underlying code was correct. \item Added \code{lars} (\code{fraction} and \code{step} as parameters) } } \section{Changes in version 4.08}{ \itemize{ \item Updated \code{\link{train}} and \code{bagEarth} to allow \code{earth} for classification models } } \section{Changes in version 4.07}{ \itemize{ \item Added \cpkg{glmnet} models } } \section{Changes in version 4.06}{ \itemize{ \item Added code for sparse PLS classification. \item Fix a bug in prediction for \code{caTools::LogitBoost} } } \section{Changes in version 4.05}{ \itemize{ \item Updated again for more stringent R CMD check tests in R-devel 2.9 } } \section{Changes in version 4.04}{ \itemize{ \item Updated for more stringent R CMD check tests in R-devel 2.9 } } \section{Changes in version 4.03}{ \itemize{ \item Significant internal changes were made to how the models are fit. Now, the function used to compute the models is passed in as a parameter (defaulting to \code{lapply}). In this way, users can use their own parallel processing software without new versions of \cpkg{caret}. Examples are given in \code{\link{train}}. \item Also, fixed a bug where the MSE (instead of RMSE) was reported for random forest OOB resampling \item There are more examples in \code{\link{train}}. \item Changes to \code{confusionMatrix}, \code{sensitivity}, \code{specificity} and the predictive value functions: each was made more generic with default and \code{table} methods; \code{confusionMatrix} "extractor" functions for matrices and tables were added; the pos/neg predicted value computations were changed to incorporate prevalence; prevalence was added as an option to several functions; detection rate and prevalence statistics were added to \code{confusionMatrix}; and the examples were expanded in the help files. \item This version of caret will break compatibility with \pkg{caretLSF} and \pkg{caretNWS}. However, these packages will not be needed now and will be deprecated. } } \section{Changes in version 3.51}{ \itemize{ \item Updated the man files and manuals. } } \section{Changes in version 3.50}{ \itemize{ \item Added \code{qda}, \code{mda} and \code{pda}. } } \section{Changes in version 3.49}{ \itemize{ \item Fixed bug in \code{resampleHist}. Also added a check in the \code{\link{train}} functions that error trapped with \code{glm} models and > 2 classes } } \section{Changes in version 3.48}{ \itemize{ \item Added \code{glm}s. Also, added \code{varImp.bagEarth} to the namespace. } } \section{Changes in version 3.47}{ \itemize{ \item Added \code{sda} from the \cpkg{sda} package. There was a naming conflict between \code{sda::sda} and \code{sparseLDA:::sda}. The method value for \code{sparseLDA} was changed from "sda" to "sparseLDA". } } \section{Changes in version 3.46}{ \itemize{ \item Added \code{spls} from the \cpkg{spls} package } } \section{Changes in version 3.45}{ \itemize{ \item Added caching of \cpkg{RWeka} objects to that they can be saved to the file system and used in other sessions. (changes per Kurt Hornik on 2008-10-05) } } \section{Changes in version 3.44}{ \itemize{ \item Added \code{sda} from the \cpkg{sparseLDA} package (not on CRAN). \item Also, a bug was fixed where the ellipses were not passed into a few of the newer models (such as \code{penalized} and \code{ppr}) } } \section{Changes in version 3.43}{ \itemize{ \item Added the penalized model from the \cpkg{penalized} package. In \cpkg{caret}, it is regression only although the package allows for classification via glm models. However, it does not allow the user to pass the classes in (just an indicator matrix). Because of this, it doesn't really work with the rest of the classification tools in the package. } } \section{Changes in version 3.42}{ \itemize{ \item Added a little more formatting to \code{\link{print.train}} } } \section{Changes in version 3.41}{ \itemize{ \item For \code{gbm}, let the user over-ride the default value of the \code{distribution} argument (brought us by Peter Tait via RHelp). } } \section{Changes in version 3.40}{ \itemize{ \item Changed \code{predict.preProcess} so that it doesn't crash if \code{newdata} does not have all of the variables used to originally pre-process *unless* PCA processing was requested. } } \section{Changes in version 3.39}{ \itemize{ \item Fixed bug in \code{varImp.rpart} when the model had only primary splits. \item Minor changes to the Affy normalization code \item Changed typo in \code{predictors} man page } } \section{Changes in version 3.38}{ \itemize{ \item Added a new class called \code{predictors} that returns the names of the predictors that were used in the final model. \item Also added \code{ppr} from the \code{stats} package. \item Minor update to the project web page to deal with IE issues } } \section{Changes in version 3.37}{ \itemize{ \item Added the ability of \code{\link{train}} to use custom made performance functions so that the tuning parameters can be chosen on the basis of things other than RMSE/R-squared and Accuracy/Kappa. \item A new argument was added to \code{\link{trainControl}} called "summaryFunction" that is used to specify the function used to compute performance metrics. The default function preserves the functionality prior to this new version \item a new argument to \code{\link{train}} is "maximize" which is a logical for whether the performance measure specified in the "metric" argument to \code{\link{train}} should be maximized or minimized. \item The selection function specified in \code{\link{trainControl}} carries the maximize argument with it so that customized performance metrics can be used. \item A bug was fixed in \code{confusionMatrix} (thanks to Gabor Grothendieck) \item Another bug was fixed related to predictions from least square SVMs } } \section{Changes in version 3.36}{ \itemize{ \item Added \code{superpc} from the \cpkg{superpc} package. One note: the \code{data} argument that is passed to \code{superpc} is saved in the object that results from \code{superpc.train}. This is used later in the prediction function. } } \section{Changes in version 3.35}{ \itemize{ \item Added \code{slda} from \cpkg{ipred}. } } \section{Changes in version 3.34}{ \itemize{ \item Fixed a few bugs related to the lattice plots from version 3.33. \item Also added the ripper (aka \code{JRip}) and logistic model trees from \cpkg{RWeka} } } \section{Changes in version 3.33}{ \itemize{ \item Added \code{xyplot.train}, \code{densityplot.train}, \code{histogram.train} and \code{stripplot.train}. These are all functions to plot the resampling points. There is some overlap between these functions, \code{plot.train} and \code{resampleHist}. \code{plot.train} gives the average metrics only while these plot all of the resampled performance metrics. \code{resampleHist} could plot all of the points, but only for the final optimal set of predictors. \item To use these functions, there is a new argument in \code{\link{trainControl}} called \code{\link{returnResamp}} which should have values "none", "final" and "all". The default is "final" to be consistent with previous versions, but "all" should be specified to use these new functions to their fullest. } } \section{Changes in version 3.32}{ \itemize{ \item The functions \code{\link{predict.train}} and \code{\link{predict.list}} were added to use as alternatives to the \code{\link{extractPrediction}} and \code{\link{extractProbs}} functions. \item Added C4.5 (aka \code{J48}) and rules-based models (M5 prime) from \cpkg{RWeka}. \item Also added \code{logitBoost} from the \cpkg{caTools} package. This package doesn't have a namespace and \cpkg{RWeka} has a function with the same name. It was suggested to use the "::" prefix to differentiate them (but we'll see how this works). } } caret/inst/models/0000755000176200001440000000000013207234053013607 5ustar liggesuserscaret/inst/models/sampling.RData0000644000176200001440000001072613153613153016346 0ustar liggesusers\kp\G%;vlyZf,K#?bGlǒF6Ƙ4˒ciX <֩,Z *vymH` Yjeos9sW#Ml;sOw{Ň+Tyy*+חe?GUsScّNe&Nt(RUFڪxfHW(eN֋Pv89wJˋZ(5|0-;3HEږxTzxvxf`f8Rɱ+Ye@䆍ln"68zf$rcdDvt$6L#MIU$ܴ:Y_x;=VXQCNNd }eÖPHdDf䁑Dzx8L8f0ǧbd gH?:ŲNOhdD7W&68)r<ũۊ!f#)Ӻ4H3ĤH"=>ՖZ b+NfMV߻3qTZyS^V:H)д$㣹y&=9u2x%u@EtU$\LDQ%-c'σk${uuc[12` NciX]fRf"rBH籌?ؒK\p:'C֞ԁs"8Y WMuDh;oZ:Nʱ=ݙ32XWc\̛N>,+/c[O({bU@+?Y0aMԴiT%G!_ieSVqc\o^ LhAt4q)]ᷗa`۴b/{mAt*-Wf6{ j40mnخAtGoa^MQ~A^}~, o.)FKEe\We~}'_(oQG!}cҿ76 ([OJ^ |qZZYP-R_(6ַJ|;B;?]o;C.odܥθOG'~@i}7+}JX/w1Os5k!ۀJc)5(f@OJ|Oa[~o~3 gї4?<]{r1@uZ2{ctz-oC%3_%܎_VIJ|or^~=ݿZFXN؋K1'MrFGݝZ؋33g' RS72n -odV@>z^Fiχ؋,p7ķPV@)=Z72OkKo~'_ޮ>wJޫA.@)Z`}7{%n-(gTiy @Oǵ(77 MP[ (GkKFy| q'-ϲ~Z؋g͸9-?d};؋ZoyPcO=Z_K~)@TaH=q%P!!_eLC^:TaP4WF%__(F~ߧJZGN-Rg{k'c|sGs*p Wr;?,} 󗰞r8ˀ~/8j<~3TH 7J|+(Or8 x\氥~~sֲ1@OשK>qֲPʿ&^Ĺ-c~ 8 |P>b/~<6(/b/7X.e0ss^oVune}6ak [:-KZP^KJma}C\>'R>p~#87K{^8X (WK^Qʿ_ͬ؋-=q-m|,gڿ=:@_ڿ=l0F-Qݣgvk‹ׂ}?F^K?#8~赖sb/gSk)'&@韃Z؋ 18H 7k؋oY-'Y P>'-#? y|tQe ߡ%rKr)ַu7 |=?{%Px#Q@i7_(s7 ~x{XvR{)=f@Nj+-> Zcf@{|b/-ܯo#^?|+#?8jywJߩ}{.w3n-a};_؋XuJ< >Fp>|_k`|>(?b@\J|_C<@ceLC򸅗~@K|rqaP[=(%ϓZ>,Rg{ ._f@?O,k=kɞ¼< /sIPZLoob/ߙrQ{Za}%_*ˡ}9]({W1KοP珀cSh~x^OXP!RXg?/x`@j|ubdfS,kSwɿtv;;:Uɱq^%>`=Xd1$9vWe[OoT>AXxS d6D">ulOOwb A%eP\t%wM7P !{lyi);0$h[љ?Uiy!ci%7Kk'ft7E`Z9r!ߨ;y#߃/O˴Ѝ*pg2(0UyZx[2!;r%xJDXU!#a\GGURI`ZV(ΗN(ނaU#I+ #6Cz3䔩WcRJ<9a}6]+V#3v~\ ?餏0Z1?C>bt"1MД`n=N1s}Y5HbMVtP#/Ŝ, jP 4+cLG'^љr ܰǃp3bº0U$<6',K1;8Jд*80vҟTY^X)OZT3WL{rp݆G1ie:}DSu? K_N[:ntHL5UӳfXr1(KᾹ(f|{5ϑU%{5OoUi%{5yU7U%{5UJj~[KZ_*+sjΧZrp&e;U'eXiC~t7T.Q=y˞#6&٘z)ڝ, C U` g0z1X68ZY;miZK~uSFͼ*<[yYQ0\#j++$^= f K)?J0bTxhccAU^^rJQf6PfeJfK=)rIf垔q'%z5)g{iӖ% uW5Zxǁqjs kz-_Mu&?è:ruџ06Lοf07A1[;8zm19<'!xkWm;K㏩^caret/inst/models/models.RData0000644000176200001440001150777413207234053016035 0ustar liggesusers]xi(XE" ^D/%a .qIӻ{OW'NOS91}̜}#aH~ٽg}WjN|8N(rC2/9ag`pwwP>0IA{b@ HϞ/#"LדTϺ@&LN_DUZ%4Xfe; :+>O4-V*% - U'zcXRjcz{NIoIMĤFu#bqh_)@Owe$VVj'ZZ5𾣦lIVw!6O@WĀD'*7kzTЮOt TII՛;8tH}*L5\ XO_l0q]E3'vZW;q܄sPOסdʐXbOul%%]u7Sft&1ޓQZԨd/e7usGk|tLJuh=BfQ"bs~O?PIuZ5kraЉ#I|^ޚit$n.3P.\}cyMmm^-.xH1pbKvk0H)ĵ1~<9V" @_tDy[ҪLK"=Dr܉rӎ Y%%EsY?:G}u] 2V%`[y89-4&WY1kfmm)&;|Opͭc26?|7!5olhh17e;:Qzg$+E$rɇWeiT8'BU +G4K{fu=kyBWUBMJxb ecC5tPMjw %V c-6N;Q'jBW&eW@o -m6n\oEf 䡯L֏ 5jlreCG;G|uN-ZҤKtGPIBv7 Әڡ{ SE*WWN̞j-5H/c_ XXo^7~\J@5+uɡxzifYՙYG;n8cc rzTb$t3u:SwffBtFhCzs:unf3x;NF1x]f<nobS0ls7L&yb.\&vP;U3MSھ=>m4)3u}{&y)^W+UсDl[7 8~?u{hȥ)gp,t:\@l$d!t'F2uQCk9.fֆ:|gG?p\:fԦC=]X0ym߾3w~"MiqI?,/ܼm]ɷCN 5q`ڌ_"jwrMc86KLNϾ>ld| }HqyʧnW8ѻ,Ɣ_xW8Q_CG~OR,R݈ys= P^ÚTo_>o⻐i""%g{7TKE.S}!_`?GOzNYWC _-!⟩|c]FSJdBOSg)olW} !gs乜rB䧂JB R%/9qV 4u7AskG~눟S{G\R5_KF w+&+kDc~=_@|=!7sb7"U{_L|<?KD~>!o 7+.'m"+TF`+,k#~寝V^ցd0XxkAW"!H|-!귉zBoV7-"{+h_Ϸv*P|;Dv~1!)r"~ !厹ҷ&W\i/Ul#{, ~{-k')+a 7JB؛mAx:G:_:T9~D=_G|""C D2ѧYJEO_O| / r< ~b+w#Mķ),r;Nj'}O "~"?rKgKE~2BODO"?W}!? 0_Fs ~`ԏ-e~78gTSSy<0/=?D| !Uo/%D_FZY骟'GTjۿԉ7by9b%~Iq}#3RrBy"E{غ|"EUZĕ'yZ?J:ō7`Θ&Z< d/.Q6B<¿u i(Bב=K(; RK$.B]&[.FOܳ*$4ܜAkν~(|Uo*UBל-Sq#75R?'˫WlB]_=\ _Mɓ9+oG| ,3?Z}.y/%DەPS*'"J'se:O#D[+iG|/V׋lT} !gC=oOW ֯ݢEo3?3$ W"b ZM|BķfBwU_HgG|WHq)>"W6u["Q\-m!g+!Wb'y~$?D|"iߣ"Tm{fELO!T~!i"/#?_Lg{F=?esD̈́{[XW}_`/j_J'97xؿROJI$~Ʉ?'ߥxQ%?o$؛7_FLBؿrBؿJj񵄆7{w__svȻ,<]dDM|/!D|#~"ΏM}Uį"47|HxC=e=eʿH#ߩ"B?Yf1O~bLyyb?A|"7L~>)iW"??m){Ⱦf+Ry oͿ`H Eܟ3WT_I؇-1~U 1|FE?|]_@}fBS䇪_H>oYx._Dh86-|JwDVBR|lGZ}3/\OU0/՞y?"MG~!KO-ϩ$ /K'?K|EUAX_D?Zx[Q?DO=$}`ԏ-'D|TH g>!( Gj3xp}#??7}Xk ct} |D'P׏ EdiȿX)b0]b~b&?C|We /u?jˈT򋈯#ϟL|Ö́OrdG|ӈ_H+_r?^/"!-_<1 1_J+%~/!~*l"s_7>*,<ʯ MNm_ ;_-p!})A 1&BoS T%D?OɭcKTBXd/!~1!WRR {W~ !2["m~!nWrVSW_MzEOe䯵(-o&DߢHNBķ'{;KCvW~;*/UT+!Dv_H%o"DX#SwZ̈́߾{E_]ķ/Sy~B䀅G~!?H|"k_K%~W䰅G|~#!gx}&B8.mK/v_QyepϵP|gȳ-xKR~oyK1Uvb|&T=ʿ:DFBIyT\BYO'؛㙖2ڟj2{BB\_@y\pS.y~\ /y+ޜM"D|Qa/\|g{@1Ǽ$秷_DmOQ)?N;N㪛EK}$ل7sa+}W*6K?L|3!?B"%d1[ aq)!O"~FM>C|'!?'1g 2_RtEz>4ߜ~b4.S?WU_FkoW9W^Ktl3moC߮"BOVS$cO#"#5(F"gOE~m/QiBh/,W/\U_9[ uٙ9_}P̈́w?Gb {K_HL| !CSEt*a~a^uDiG|'~ll7VB/_D<  A뇙C|b34YR>b[_ʳ/'|‡}g+o!#U?M!C.xg(<ճh~Bbsk{ڟ.#~/Q BAe*!3ŞBŪ/Whr;*E_ 'mj*Yb͏)PǡYc^R*ԿA?*#X'Tx{CѨ$b+G=2Rz/PUt>&x/\S̈́>j_Lo#80k52ׅY\*v&}'ϣ54_yFE/"o!~orXdpWZxJ RKlfE[ArBĿR£o#DoW#~5!k 6Bݿ6R)% W+o+D~]b-R=!Ǖ"W9aK,et3O$ BZY{_Ix.k n#DL#h\5!]K|-!sqw8)_q3o:B7H|̿[s}oΗ?`a7cg!>:{G}~+?O߷ }xG+\q~6!g̯#P787K/Rl#RWP>-g^j O'~2"N3w|uxݻ¿[,&2¸QE|>0[jB+%;,²H E 3' ׫~"? ˘ oأzg8=:O\՗}dNo\g;=UQlT=2U?ӂ{L8Y%/;!'z%㪟F?]"="ת_#r2E_{"uEQ|B/"{wx|7|Şw B;hO _O_LcO%Lqnh%|B.MqgQ?T_+9oyD BY$x'Xc?n6EvKlKadK~ ~1ė+ܡ:Bb ^y ?yf=?EsE{>트2Nj_KįWFD䥪NN[Kߡx9r.z_+Cy$D|U=5{ a:S~"KL_fZDhch~,w9|[c_> y=|rȇU_F!ZV,?"1Wb}4?F|"_ RӪ_@T=R?_>k/[_R׭a/{}[hK?9o Q]ǹ8x OSH"TBI=O1ǜO[u#oKtpn տ9:Tl⏄D"_xg>D"[?BE?>=#~b'?^d"?|:1\F[h'iP Ϳ ɪHG"H'_H׿RB_ʊ,4HDl"3T_CWdz= ¿O%_J|")'~"?arX2U)Jc#_kz}>gG|s_7Y엒pf/#D_xk / xo$_a7|ʯvi{9Ү_;3cTkCQa)E:U_9EdNlP}!WM{zE^6ZyDZNmGDy/"D$~2?"D~"ȵrdk{ĿYt-"‘"D2ZʧgsWMqK~~?񵄺?t oޯӼsҮ_#D~"]F!7bLEyŞ΍m7ù_LJיJ_*m<yu|%D>iG'~!@n$AZnc?>$a ,B%pU_H""\s3>-b#[= t-Yϫ_H"_+ķ+_'~5!{_gO 7}oG}{/T\NUF"[oW ?"T*E?&~ !Dկ%i=x/$'+buc7~(g"؇,gKq}o~jDNZė¿9+1G,w+ 1C$*B,#WQK~|$忆POԱ_goD)azJ_D?*D[Q~-Ş 7O@\[E/P𰿈/E~~v}Ld)BTl{L E:_g[F7*{=O#~"]??* \-U}3!oI=ZGs/~暺Zy+}-?ZF=ܦmN \SO"D|}Q_ORBkRw K;GۉJ ^)ҩ2Bg{3"~!j+izWb:b'J_`΍ɒ?T~Az~!ɄhO%bΧ/W4B.{w9Ŋ~0k"{T_G=7(.#W\/&]q=I~!wB]Z?GZ/$kZ[ג>#_G אAs(kORq 1>n&~EުB[/%u+em!'؛D7Y쑿'_SU_K=E5{*uߜޡzB̿Oy A?bDϤ<\竾?O{|*D{^H-'D/"yW"~s =+=r=]΍o!+-kٿjBį!,c ͖ߪd^]YR/I>kPwa'z>_DaU튍7軉:Vm׶m՛TN?2/M}xߪVl_yӾm`*(LPm;Qbz7~Vl޴m&?9mіU>ǯHCș^Jm޺möC7Ґpٶb}شmYd4yԩi97@Jυ5]S<%N9G+4n:}<}@@W_)u02V94mZZM<9OBdW]F0lho"k jK&)#oȢi*i<ia1nrvlNa|&zNg 7ؘgE䧵mN9\՜&H>ͦ6 Ӻvm.ivUf |˖O:v 1s&ۖ :܏ei*2N1ǬQ:(wg]~$9T^߰:kc3S1qrz+i4SZoOwOf*cXm[ 1~ޮ@=axf>{;Yt~x=14VT0ڟN/Gu5='5|㫶meGM{l/݉޵}UV_90y>2ߟ۪/f%c+zッ=zC=}` >^sV۳ >p.+xw<_Hю._GLzn?:ky(\w40CJǏw' >K ;zHd9/ƕT~?xtrp bDP@`3lo!UoX`9m/ȬA^܃V & 1sXch]zDfD:/Ha@Y+xf=d{6GPoˠe){q6pY-*2 s'.=*957w{C}Oߠ̗sN^z>~}<*"m{i@m8< s\:D"eΓg33föa{Xo#*o+瑗l'x[ztg %RfDaF_ pDwOWd\z2ɂ1+ϨHํ3ce,ne}3lcY:23)(־: ?lKMYq@h`Fh0V3y ȧrƋ/3:+)l=^]e>.N]cVi[~&0 /gj-^ZFqGfw'\#޽kČ\'KB!tQFFӋV7ƹ=ׂn-1%x5:;6{=Kܐv%v%=ܮޕ|w6dFF̈q,|f_-L[6Ty2 [FL`F ǒ!jドFꢒ>8!pO=ly V%CGmDW7l?֟z9Dgu8{#i R:('wOOA3N.|TfDM-GϺd?U̟V|H|`0aZI<'t.3F,V哏 $x8G쓏8#)>?'K#2;?7N]JJzJم.|2h\a'_t,T t9z'z}kz:OR|bp^WOMy-^pnOZ eZRRsq)-3W7EMs3NRy&ȷ̙aߌp/y0Rd/Ҫ[U?>gԓz׉.}KO<풓 0;DIFׇ3~2XWv=N_kNzF}}|dfJXĺR! paF r='}!?ɏl&LrSLVZ3UM&9:Bܦn3goȰ0VHRI ||}j(f[dDZN(YX[vru DSӞGҟϦ%u^nw"Ҿ_H3^ֿ:JI[俓'O' NlŠʝ;M0O|&23Ɠܸ<%(f&^خYBz"\E'弦]VNu)]^gEH8-+%ZqMN+7XeYo5;|_96HӐN.e> wt3ϥ}$mfJ,eTٔ6%.Uf޲?9'-I3׺cmɑI}w:Ӈibbz?rN6Mdޤi9{-VOui˜£6KHx2o"'ۆڳzVR~A$uCoJ~$SUe/'3]yҡg$nO_Q͗ECto`@scZtHeQ7>⊔.b2gK F}&\MWE LI^;*_ )]^W'Luzo1צt9zݦ^ s[JN 83*1fg#>hM|eip{4+mx_ {{UYMx*v3jo-a-_s^ oFץ$GՓAތn^7N'}3!bY_7-e`cbro3:)hkہ@dfVVz!޵Im679?EqcJ`nOKt2-C?sQykKXk#,|q v3mVbŹzq*iNꨶ(ɧ]/Hx|)NO MӇn[@.wRW5L\/qfѧ2{_}* :U:oKn 99ם0}__H(]3mԅ$O%'qxw|[d{A`5iI~M)uА5{KYAIQ=C$Sߌ7_LkGgmbKjcfPlXkė|!OU*JR *L%,v_l0\!ɩՒL+M--a%mkL_jqK^c x8|/n *VVkmܯ$R_A0 /FR_-6Qr5(q &H~5HlQ K^EL@/$sTZL{z"vw$;hOҹ4s*dkj۰c/oݓ=R^һY?YޞTҪn[7CΞj[(RK_Lt?{vMF޼'WX@yM;ut%Jň?& -{!1_} u*ӁV<H:64$m|*ߌO{Pρ dZX7H({1HrEEcTopk<,y/9t'bM1SncJ# xcCCML7 rIjse.A!M×ZdQ@ 2ձԘ3MpyASa I2sOc;%8 u\hlx›rii;56>3pcO?tvhyF;ƒ|F%Q CwXk/6_ב<PcimeѮօ@bVM}͸QVC2 X2w_wtTۃKq,YӮdM᣽qIo*duNnչsDcv%g$w|ԋ;i&ߦW؜GVӧܚ:c.Yf\fM6;ܩǪ*R;\|x~+mí3}fiCN<2UMf{sec *mL3FF@cAw5h3.-m?p+2vў~JǴ9g~ژ)O 6xw9>`~k05H7ovVrꦾ̽qoMbuv/uly2AjlC7gx^}N=eu&=2%,}Z{v=GK"F$qv=ҜK!oaaF#Ԟj-w6^/){>oKPv@wЩ]3&',fJŶ9z4ynYҺi,Kku42#87#f=#pbFDFwybJx#̭vԳ[Y#KR-N;Rԕ<ОG}'O ~\ܥg}]nŗ\Tj3,:rX`BS&NR|}5s K'!jw搶a0}ԑcbKѸ?qY|9Kq5W#b$o j$8;o3LNѾk߽g>FԆ~딼k?s'eEܻ*ܼmh퐓yXO5 jF*r>8#SW:S~BN-Ɣ_xW8qQ_CGv=G},E^5_G4jZԻƂDl|߅O#D|? D.!=#ITC7?r Q{J:?]O`,'~寁T>x/)%~2!ڧׯթ3RE,k/'D~*$4i*~5LhT?Uόo4A=[GtŘWj[U,E^L|/ٿN<7\Bo5T-%D`_O9 @gf7*8/ % ?ZķQ"?V9^7W}5!꿚B5~k'D\`DDI}{# o~DBBoQ\Bu:gW#V@gcG|[_Jmߡeƿɯy ~w\w.o!rKVjB_iido85lto8ASXMULŘͿ׊w:BoPxyrnH 1 #!*R|Lj_FߦwIFA=NV=⻁UkoY?o -#VzBldo8cڿ6 ^ɄE^)OS,V^3{ȳU??K{ė(bfs Dz.UT牼@u/"={ -E|B[凜7:S?b Gf/QD^?_-1= 1׊~:X& &W(=j)~.n% [ov/Dx_"eG ~}i_A}Mh7{wAyW" G%Nf`73~L'E><~>%}=b)G䳪/#D|F{,y|N "koe~!%J|E\^[~|%˕7{ogQ}dF-Kpgڿ ̤ȏUSyT~_ZėODP})!{2BWE__xv˯E~&B/zQo_L mߋQ!=#+W?9bZEyϩ2/oPLyXX*w=?LŝodoGU?7~ BأG@&#{M|B]ѿ}" ?^sF_Hh˵Syc_  1SszeB7Olf[2*|@o^3 uM&~"&wStlB]j_XO $Iq1)QBYĒ_:3\0 G87{F)!W;) O&DJ's~O#D=G=[@|"ʓ=m"}"Kt~n8~oj.t6g"49-CUȟ\KjGW+6Q|OVLֈSBB'kf=[G"ԾE6`_wlUFB-Rm"D;H _o$D!sUG54*+oH\K Q?Nr5[}R?:4u/>}7}o"DP[(83"w~%!Kį"47L[_BŪ/"Dx%?}kOd{fj7Xk/QkE^ Bu-3"D$b8.ռ/yoy)b%byo忍Zvw-NyFB/"I_y"|bK"BؿOco!4GD/ }D R KE>eX"ޜOZmy8+q"I D>ei}pnYEsE/De;9~Ek_HU[׈_D~]^ {ɾK}K;_Fv=~ܿO[N?/ao~?2ƿ[Ly̻a /Sq}/{__L/tos>%"'}7Y߃PeE B?}H|"1O7b|KϜU CbE^GɁN<~nCIK 1e!~*į!DONqy6?ks7jw:j|wj| ]~ov?.:6?~+?9U^~?y/T} |k-ńh_,)^CkEYTc83HDZ῟ي .,21L X"Ɋt1f[T?yB|b*rgm"Oė(ɴDJBIj-]F|"懰po&D|wP?[gZڇ BB\[1=&Eׇsb 4f~yȝ{bK,ޜ/\sQK/W#/#x.oPaWߤLUJ{j).'/'R|Eھ7Hoy9Ȼ,g(-oyg"?oyN} ٿ?(o{Eޯ}"{T劘MM|bC"a/6)$Sc^{t)S,3+b`9/>8y,( ė*b7E E<"*Ef}2ģ|fB_%~^'_#B&|Sk!-=&k;}Nŷo+o|"OLO|!"?Q|Bco$rGBcKlq~b3~?'~9!7ӿ(dFE|b[W"[x{_C?ƿ?a+oZ 1~!~ e_f) ?*=?I|ϐ 嫾P W6|?έ_5)_A"_~ؾZy^~BD&~>'4^b_@L?Q`̈́:>B/R\!C!ӆ:,o1K~φ_Mh,jR¿Bm_Gc{o|'Jjmj' B눯#D' I(c=ߤ|Wm%m#~"/|{ u!r$~b+eo%)j K|#!M)>sWBϫ7?|?W PNGZ'pM=ʿ7?|o~GtW "GU?gH?S_o]T_J_XMO_H< z0v o&B xysT?E?bO X'`_O=TFB?|F۾goRl|N _L|^>=%픟/|Y+ѿ`_&Cq7_W m$>&B7s{"'T9}Yė('DH{EX䧪o&D~~`?Lϵ~ƦPQ|:K_ <گ^:޳|HO"Q}1!BtǻGY^p(|T7b?bA|\OGTD"=?B"~3_x>vEEG{R.'Q.'K-r/}!7YEjo274 ˵\VS4l`k/VӰe՗\^k| ,{pkuȿᅪOPZb'2:BV)> /WBBe"{ķE{fo#{o'D+_$x3b| _G^q3ŷ^yo?I_,-I}!v'Yxժ8ƟU#WYRɏ=N*jR>έ_5!&PEd*uP4Ez-y ~"=>(ң2B!'Yῇي؟ k>ާWOs 1G|}S\D]GbB7@|"M~E~!7$r%~"M_/r\ 1yIq?aF`v.|w{??"r[~!~lISt.S ߧnG%~!OI"bw,B&p_:c0'/WUr}RӪ#O-(+hϪ7gǵ2/~9!1|ŗ?Fb…?m7wDM G#~3!Hba#o'!}< \[ߪs?S4X_hڴДpQ~a;,t}_N"~"_E{1ofa7]HKy\07\~W9ikH>Lz<?l??_57 鏑LS*dGgM/!?r)?_M]F|bO&~!@q)O#~9e߮Q%Au$~5"!g^tFv9m#21bؠt?b@ :=_A<ӌj"?U_m)έ_#)ߴ|6ܗo n@g\{o"~"H_,P BEHqo$D[~~&B_fl\y')RGrPLŘOY/";,A|"i?5'DXliF֫Y`-3e:S4#:lP~v?UyAWhwF ]dȕ/&UdU{t?bO y(SG|"E#.l=O|"t$TD"Z?A<C_BboU=ES*BSik_MCy:ϑDwT7bߩH"S.B'qpn.'-W")I ȓo&/R\NyTFT;,iڕ#O"al -su~ݬA>yȋT?EG^(=bE:XN՗D{2EyU_C{9ut>ykT?{~.&/ D{͊_H|1&K1w:iS ~yI ȻU?}W=R,⅋|TXM~?sk)ܭ:BE>lGw_L?dч)B QmO R>MdB\#5OQ "cYX爟XIU_E{|z>pn ׈%›ls67Eit~O{-g(o|Weh)&T/J Ⱦp~ EnTTBDf~!;|Ac\RBH2E__EWt5T?P痨9_lG|@E{7B)sJO%LqnXFsԜ5prΘCzTŊ:J[F,o`gc:DM Y*-}%p/Saz?77U}!Ɵ{?zE:6W}3O>B/'Eߢ.-|At)1,#~"=_X_IMdߡH#{:1\t+ WQ&B( a~F_{yŞd !;[g;6_S,/W`ƟV,B+Dz-E:٫يhJC{K|9!_%r+1WbOU_]پjBο 濆~5d/\tHuz#9&#Q"B~=?B|"^g3ùMC͙t&)}x ?,pn"t}}ȭH[Dc[HD2BEe'?[E BoO '_DP}3!K|pe9~;0WBa/{~ThKU^'> WYxؿJ=Iʛ5r5._J{ߧzzܟ؟bE_sm?V狢w_MZz %1]w5ǴE>>1n/Z?]߉~X䣪/'D>"y= E61Ѿ'~"b}={))i=P|+Ѿ_+oD"5O'DoYkPE7T_B`߰wE2E6劸g奄{=kE~&Bo?ObJS|K [귔ZkگA_~% ߨC7ǃc^?gb~o~Ynw;O%7y!՗لIB߿ D$D;{QS5_OA%lR>pKڧ>㈏)bh" )@|%ODQQ# '-FE=_5W"Bo.#o&-Tpj)1]0bHǂ"=s[ALԏ?]V{ L'I_*@YE)أ;,}' WP&Rw>"qdOs,ar|]ՖpR ?0e7?.S 1~d.*i?#+8,ł#D! bV/'%J|z/ @mN&ŝ_Tj"UZ?_b)ب!7ߢx9٪+1?m {;nBĿSys7In'b|!~"f}R՗b|%Uė"?CQ]/'-ɂ,_OoP}-!'Q1= K{뇼/b=7('Xy}[@KBBNA=ʿ6?`o#Ag>8F?NJB7XJBwe|-ʛ_@+xyw.svdF6EaGNt7 k۶mM 'ח>oՎM+ݼiߊ 0 W[L&ɶ(c m}+6oڶSB˶h*mj!h/@6oضa[fsiH8l[mu\lڶou,2^ { M JOC?e#(=tN o,:8_]}ݧ8=(cXhOДw PΣ̞l횙Ӡi4?1[`7gQ#%̢a7udQǴE4GԗsX-u=;{2\cyt^՜&H>ͦ6 aXU)-31M,-A+u,;C}jr)l:6lp?j6nͳS94)p c=N`8K;R0rⱈ䲽 n õyX6Yve t(gí~*oXCOuW=,*u g/ϛ^@ώKnFwLeOw*:ҳbkqM6+jV;M?uq4K"HؼqcǦF\K~[5ԽC,#&grTUm+.4>3{Y?jݡQY.2ٰf:wu+.xk 2;h{l]ΩܕRa]R;T( wܳf L<#ywghz|KzoGC)gx;k0b7/ٞ+~l,^e2r ݮ-u׊.Z݉޵}1+=C:GFz`[%ݱx{P >Q/?8T⸒xw|`hɑ.]]qu λ˒Iؖ[ %ǻGe:Ϩp`z="$xˆuddݟ>5?tؘk-1c%g&[ý3 Ё=h`;35f͆aNWd6MءCmOߚU͂wmnh ieq% ̩03R2G9Px՟vG]SOZ>33YGFIn ]K\25d5 81-銛u*m‘9Cdѱƻ:<9ʃ>sIyՈtg=]#>#a ff1p{9Ge̔y'#<Bt0X%&,K_~uF)2rDf;%pe`'̹i̫B7=2weۦʌGFE˘%2SQVm>h5LS56d=n q7ޕ1oݑpG`2,Jseζz{@'9tgީMdžHrq 3%ߐ_9!$v'PC+g,3z(w"uO` ;po_74;ѻ.".7 .9z3\,O܋ö[jVɘ$I'uQOo ϩߕqO}O9'/p >sQxC4o23X7yD7wHvCc=sFuMK>0/c|r~|l*s6aY^{m#5cqNtɺ_DE{9Po^[<΁IdĜgB#ױ:t/3{ߛOf{ O;@fK(μBCFzzs:pL\R2oanY`ut2U.[y NQrͨQyq.sSC0Me@~^(s;s;ʴ6: c>f9q]ÞS]Jsts22GxCOM1[OcEx[ygL|f7꼤<YLt63puQIG`P\ h{~W'Kd>kUсDl[7ѕhfɚx_ gp\*v/V2 9@x;hR3a}#&5Ay&є}0_?8qp@4kX}T>28v擏tє.&ˬpIHHއRv!=MװHa$g^H^z}^GsZ&*B R^ .Ky%'TsuRѕdddLR}]H:#"'}O?;Do 6S&iٗu&HөzaD͟飥j}?/s8"Y~o'n\gK ,˔M)e$2G}#d!Bz_1RZ_WOu }GO8-0 UjhnZg -ﵖQ2Xj6?j1D7.gjب9>|2=2v05veƒ&(&lٹ {Zc̈i/WKy߉Iioz/;?, +Ovp4'T>Lٔb>1-[gi7[XI4-ɓ'vk|e,8f]wDd4'5OU$a=Oj^7'4,XD#CW&{ń~YtLR__NC/`F6Whϲu5~Vct%]y2}ɭ-{(g]5swNbqJ7+Zz^FzI_[WqZuvt+uיi~23k9WU_*TZ^=l >gi^rڨ ~1%a^to?ȴ͋Iפ7W5Ӳ1OrDWn?0̹ch;'ROkudV_ʜ̅l:_hkt-y캓>rh52i.^)nld>C?3hu$[ypw\MJ_O$;5v> @9Jg+bsL8"|1=p>%'7;8zd}^KNoA0RlIH i vmMѳokί?޴II$}=IOeoz)k>XM9OԄ;_Y_7~~^EN)]^[bzU=u8gH)]^WgsӰ:g˩!k2IanԳ^*e#6zǼ~&ຫ_x ;+T=o@EXb2_r{,H3k k}k#\)׻Ҝ.SOg~Y^w: 9{]^ deJN܄q֠}7FsWgM~7(֝m$woIO6o1/@g\}*TWWo(R:fLb;N}a4[3s;:?(i"WHLzE[Pt_>OaBKWSWXZ_6a͋x2C2eO_|&6_?WjЯ~+"ҿG}nrꋶk7D1 i?3wi|JfLwi2;GYAI_=C$S?Qo:#  o"Ɩ̅GE1cA -]{5&]N:+c7$9Ziv)%5āD|τY@756xWԭ= S|U/K7]8E=$<ѸړشbE<{nHA{ @^3&ؓ*hVZ b+&~`ѓj'zQȥ"Ok-ɑ35|ܖxR>\}#|WM;]mr]% vK^v $cOnIľ%RTOo(]2X^*өw<%I;4?(-Tf$'7ZlA6KvhIB@p<9/H6v:ZPesEfitȔI?[UQ"U78,y#95&STYpqiH 9)}!n͂mHm$IBcCCML/&yyqe.A!MٕqU.B9$КP%ńՙ.s,84jbuuu^ݱh2}'*29hmmyp)S o]5SWOj쎺z_`)^f7Rvᥱ$NKKڟکn^%QֆnZ*cYk93fCwc 5_uGG=)E`֝5RB˒N <9V٥3q.Н%eol$%urVFӜ}9^jvL|aCmUfY消o(KEꢨeAx+m-~5}f9;4/ kb3V3x&[H>cd>xW6Sg3̏Ai'ln_Ӹ&uM:uC̥kF1v^͜,p8?2fT(K, *-CdqzEՍH@{9Wj2G܈h=Zm3ȑ7?uwzSZ7~3o\ wɞ,)WgrqYNfIuHdeT[?l\!*͈Yψ֋lfDdtG',D awN10[hMl)&}`89,L|,K0EClz!u€~;<;.̻gY/pL /+@˸nc,Xs{9#o[{jCތ%˽qםKx^ vd:6jO'rݛ<5pQYһVWp>i{m^o&op} y~w :7o[{{3|;':mf#y9_x|8#SWCS~BN_-Ɣр>U%>4|Db(xZF3R@t̛$4rZcM*V{7Q|ޑ[܅O#D|? D$g*Ρ_L儨a=_F|bB'O i?@g*r;Q?SFTYʛ' f 3RE,k/'D~*$4 Nׁ9qV 4ugƷyb?]1sU?KQӶ_gHtQQ}!D|b |k ?أ"EN{a+o'b;1TKk=/%~Vm_C`+,[C*ZBĿZy*_;cU_Mn k#񵄨& ѾN"mW 5ۣ[oT\x6bN|<K`&Дo汏k[B'D>B"XS*'77U߬?!EV_J?'E=<W/Xyg{UKį%/|U`J| ك7ƖIx ?_y~,?1Rc-Sg+U_Eyd_F~`ԏ-e~78gTSS69["T_J?`#pyU?GO&W_Ռ;.@#/YQS\x˓/&)[ۼ PG^H^3.BWӇ_+O. ɿw`Θ&Z<[w d/.Q.B~ !{ķ_:4\MO G%r!} [EdBo5S dNdN#u+ͲWۨBφ{h)έ_-!E49g";)bf#sq"Dd.{_A|"g&'D|{o&D|W\}{wS:įP@E~#!' ="ת~7!5%~Q!D_ Ϗ7o"D9yhElGLjg"SRBD=?kȿcs=?;m"OPNBKxdj])_  y,WCDREOa~%!GG_Ehoٳ*O|Z2׶g}F{,1E3T_I|=jŹ"_U}!%J|E^o{%tpw`H¿~g!oHǪS^櫼E~fG|?&Dk&?y)|FU_JsVW"Q4K_{g(VAW}~'{xԃ/'oR?Y ߟ>dG|&~!e{D-|sv_-< O/&K}.a(Qyc{bI?GR&my7+WR~#򨅇Gɾ;ii7K? U:懕/J{?D3<W?O O)#_D?_  Ⱦ%]~2R,@mjV{~Կ o9!⛬dmX?M?3|@Y1/&Df#o=RgnBBS\W(uybWRb {򗫾P׏%O+K-h{Ŀ|pnCmU~Z$6Pv?E ~!{%~ߦ&į%DįWA fB-)kIz\QwWB{o?tpnT8U^yv&B8?0 _L8gY /Q\NQfշ~7įPD2moTw,<o!DO$~N)_NJn+)OC{ `ﰴ^E*B?{G~^˜Ibbo{B /\e}ײ*XxؿF$Bzq.%low1Ǽ$;/"Dy'S'ysmwa7]ė2M|)!g}!P"_MUl$?!~̈́8'o%_!~-!?Czōd97b|NB\?}QxӟM)T#"_UtEz4+"߳;8qϯܫ2B߯|b?[g&oܧ B|:4\FTy\k.~ R}!c'+?y@aS,os "b D糦}~)kW}~`Oϟ.OV%_?(>|BBW[1&͘*Rg^S{/g*&Xg9=9(?ė+֑G/" ADŽci.ߤ B_HE"{-غ"?l_NhvG_!ST?MοBE&Y_3fj$PįPɟ_C+{P'~b'_`$fo _C 79oT%7#4M-iW|BcoNuhG~!o7+ԯe*"~i א}!_K!s1=9,үfB{'~rǽ>  !Kڈ?Fk''7{"BFU?EY{bEO~Uh[Dl["D6BO|b?M|"|V ψ|b%~b'ž?Om!~[˔h(?xFB7oR7E{- { Q)-~HǪ&D|أ/؃~J7AkY7T,!+\/%D_XMO|!/\!*b~4?@}H?_y_B  9MrDyur^K_J틔_N[?Pp1MDU g?G'<:B/F|"LR)lW^;|ȜoM+,<_Ak +_OhYc/tgM / U?#~ g 'kyI6·’\՗¿{.t,,sEx y?R~= ~|ay^۷ߤHϯ:HV +K)?2~!{_N|oN~#!2;,H&B_klNy"Eg6~bq߰gė(٪zB×[+ t}&C̈́{a)˵~O*j eK|W*c -|\[7HEP!= ~" ]Å_98?2J;AFW׊iG7(%EUD}"O?S~ ~ !ȐSxbOK x4( ^䘅cd+q(k 1HzM~U ~ Fu/%D~G-:| z7 FIO`oS~=DỈ#D} &>{U="#HbFUN?@ 57wSb||^'T})+7OƇv R}!牟L/ܧ)3o磿!I{eg93WD*BWk|pn2ӒZBcoo I"E}Wx=[QXJCYGvg0O|!__sT?OskT "_ߪ__F,߯EbG|!~"MVAo$;?XA7)n#o#?P| hv.w 42翊#~!⻄銚ǑIiT2՗|Y#,eė))"Pdki\EP:D$W{7t)̰䇞/1VBؗ?x3Źcs>J*_09P}6mdG Sjn%Pψub1HDj-aG#t>kH uY`-/R\FF~9!/ eʯW{%/"Ŋ+(>/ժ_IC≬#w(EdŞ/ ٢?/67nGLN-NB_[}<셋\-N*\dGs [Gs\DhʿIc^}4YUZ'mIt["DAg8w5X3ol!!ӧ< ^8 _NZ jo$Bw %?﷿U7 3?=ɄDTE?S/UɌ_M=Z&y _NhxloWyGK1$}?,)=E~To&D~>`L~Njߏܣ8i#U@Whῤ[7w_ 7,u+Ƚ{ohTsu~Ko_Ü?[Ź;"S}!Wa=y|~}~ !-C[G{^BM{1OD~jd?x/_H#7~+g=|}Tpn.'X7ۿ D67H#"G_cΏU}!R:?J|"_?jy<4Zίە7H'"U{H|"F@ڿLė)"PO{:E:ʵT2'De'^( E߬oc;ݴ\DKU?'m)3c"D~gK7>Uz`7}xQKI_֪cXl&u{΍7jR ]E/\"B_3 /PP=_9-X1Bm#R ׈.U}!Gk=/Oέ_5![+%e %׼"E:?^$~ Eeb?C/Zݠ2B=o ~"n$P&kq}m.D~.!{ķy|At; [q}m#{_AI{G{w9+u{Tn{C&Ez zŞ/0vB,NE~7s~w<%mΊw"pku^A}"GT?U/ D,<~:^DAzK|tpUS99?'TM~N`/7jw+I{ x?9NDoy"[HDo#>ERBg[Q'_듈"dky~>!旧aG|O#~"Dnù-!}%?|9O%LqnXFy"r ) D^bE/BXA/S3 1D{!揗ed?-+/!-/\ /S %\s3^'b^=t}țULɛ/R oy__=_}71Ŋ|A"WJBE:~b#E?|An7D>MG!~3!?Nba o'!O'x "!~gg;h|M_qc7,U"O,UK|>5{U?[M]{rB79#9ɾ;W)5?_ Fr) )\ѿ&K=9-{>%7Z\%@MNy+^8wQd}__<$)_>b|/#؇,g+# {*E^Q}3!{ol3Gk/mPG8q._{UI;/DR K^_f[M<'F)_T?~bUoP FTBݟ"XV洂:՗j-(%~6?POl+SJ3U`b#?W)%U{k87&BO%l_|B'kO%D4_#גT_FOlEz`Մ_3dBo z}X עCڜA*"?},WTE\?-kBA_NtEzMd ?s>b+P }W@ ~"/LWQBBS Y)]bOV}[C'h;*ol١h"{,8_3)rKQ]|6\5/S+/WWS?/S} !/C{ZEٯ&BH?OwY[ɾ[J',[J(_7a~ ~7gܓ(y `?ߣw"(/l'~ؿK"T} !/%?ErB̯ǯHCș^Jm޺möC7Ґpٶb}شmYd4yԩi97@Jυ5]S<%N9G+4n:}<}@@W_)u02V94mZZM<9OBdW]F0lho"k jK&)#oȢi*i<ia1nrvlNa|&zat^֜&H>ͦ6=6:66l.iõ2-c0I=~ӎtԖʨ&T^eygz >1O1]džmGn5ۖN>O vs)=#܌pcyIv6|%85a[x,qͦr8d*{1+wԮ,97p]zq 7/NeY.T>&^17OIY~=ct<9=`8}SYcruJ. .9M?uA7|ۖؼqcǦǙυfsWjsj;wԆosWjN=gG/ ]62\UW}(™>8Ok3>kj%-{dv'o粲A<<;K7D7|Diqn,u.݉޵}1+=C:GFz`[%m%`k|='y]A+w=1ҕ>ۅ{wh_PO?n,,Y4miAEZYX՟8Л&jBđC'+0/y3\xF I8A&a9A5YG'G``FOt 6ZFKX CVᾁcpl "t y=sZ:4.p̈fPu'+2&rPOס6§oͪfAy{VsFxwph"i424Hrgq%.U2R|g(L ?0-9OKݬVrnhQ|Mİ j{F3fLֱf:q$c.^.*Y97e+#qsɢcwu\ys}B9L,w'29>%}G'zWϑ?!C.Pmbf1azI ɫDPlӛd;]\Ge̴y'V2y&(tMĄ ޢoFa1\iHǕH@d#w99%ddb\ɳ]tG W*o#g&V˻f7XvƮVq#'er: Gt0~Ho0Mؐ\#U3}뎎 `2,F0"7u #T6ڌzI!\@ϐ?S[ ed0Y&3%{!rBrG9п?sΟ0wz(:X?4up{nQkx߉ ב>X_؁{kެqTEsn{Anst f JYmwR6l"1wsFOڣ" BS3#.cDx{f9yIKtsyўw M}=}k(pgΨ{h#|3 ΏMEY6p0aga ᣽q 5Qכu v{RM2:c`#]K ;NFݜ'9qヲ2|ϾxS[l׼Qn52gtwc3.˲uu{zg\pޝ7{ܻQߑ2n@+d\z2l}c#<Χ><:g[E1 1~l qў`LkLЬkc=C4xwtGcTƎdı=cHۂ1!Edž^uȽKɸ+ݯ̺_^1谓o1huK&ނӎG,٪hZ14'ág>O=rMs/^8&G\.)S7<07<- [z`2Upy NQrͨQ-qD0sSC0Me@~^(s;s;ʴ6: c>f9q]S]Jsts22G?{mkドF3w.*LߛJnVGKdtުD|@"-ћJ{(o4dM38h.;Sb+e؎mc6e|;먿U3at#&9Az?)Fz>t.[Z_R83)˜zz'ɕhJI,˔M)e$2e}f!Bz_1Rd:ERNPOy~B^''{}? nLNb4+HWIue\}17iG61d{XivgQhC&Cw e6}&V7ZQ|PsQfZ4>\ /'g$-δmĤcj*wɂ!op',SEfI*3sZ>zI/ 2/UKdmE_Kst'}PuqZ49ے~Z4@itZCGIŲf.I]Ӻ5ya/̹/&,X_/VS]̔j%k-K[F66RyM2nK'?|2d/'zd1a1uF]SOWT_|Zz&1IJMU{--}*kWB41 #@ETP@TEnc!. [HX-Ns^zO8ޝ{=E8~÷oϙ33g1j,֝ lM~i'FzܹdmYzYyTŌ7|]o-tvNFErp'ɻ=v<J{vZ&Yŵ9^\Z竦&ouiaDkEIAEykmRMzݔŪI'VpTL &VyL[̉争uB-.4{NޕX&ZWykkFyIVkyе9N0WLV3'{7𖕙ݹ3M/qGqe2'gsE$C8q㯲C:n)E}nrMTR\M2Sk\7iק') 9uK9N)QFOM޴Rsv}<}ᥧ翺:bSKy [_ċjyܩSt+Q(b-{N&Ԭߒi~K‹S*մڄzCWujױxqyj\KkX \yy,Ce ȫ=@2Hyi?KL׶*:,cXr_tn YnI9{˹4Q^]XjkCgEdCU-a-&ڗz}6oT ϔy!OU&E^\ZT`F3wqc:N0r4>LqC4!Kre67Q }fʧI,+^p>oxlz}o ޅ(2&XmxyϨWrvQ_<^yF}z(5^\Zfnֿ^z'>5[QDk*K>֕Y7NUj\kg''s/;O59G"vLB>!+U\ vz$VjIRŬUUr=k lޭ].V\k#yk=W:JQ/j,Py[t;îGEF*KhK4=腼MxkW Rm"<`t[nNz=Y|,$ :-'znjP%oEp^ӿgY)>q=q(AӒԄsR|woް u1ccc\g`L''/9oܗ䙹j%!#E`FtO.%/STЯRyA{ӆW'$$ۯNeNx%u,rLS?~hg;{F43"X:ZCr3k3WHfEl@.2ښ2v*HʹHFoDd?UKOq$:_PoѠ*xWcN*j2^UnLg llζuFzq+ac355l79%U6+6C:TB .n|OvU,vɁ\-ƢLuޜ ǫ+gr4)L{&Ԧ涌g̘vB.dLfj2zԐap!SН7Si G1[A) WzEw}5^x^IݎmC{JnʌA޶qa8`n3TV1US=}큓"bU vz_d֜ƳWUoMkϡE]v-6am!=@C]&XC}gɹ3ҶT=׮aP[m,1_qL$YkN*2k]v~*yq 9@eZ<3F8C:ylnZ=dyܶxpb}ώebj2=o{'̎vI\7 ~~ȝ;];G.NplTnT.A4_q y70H 5?@oMXE凟в,'-)}-7¾e7>o/!}6<[IA7X6*-EZ?T?ۉo$D ~!!g}P)Q?3W+n&5su<_cPm%)?Rgd~H ~!!G^EY<"ߤO^?wj BX/ X_hIIb&\K 瞗%#?SQJ"D„/[W+ۿB/&~b5&V a3}yZBu&]Jބ7XxB7L 7_I{3H-+/!WWJR ~")w. "u߻-:]Gp_߯X͏ o>D|#!>??lG5~!#&|"?J|bO3x<uIM!D|&A?k@巗N/3 y3pFyùCw\ZN N~J|j $BطZy<7kLXYʯW~O ǭ66?U1mfLIOل_Fm!D?;G]W*VB~/񵊍$ !%7B*.'k_AįRDo#oQFNANB?Y#Jw\c&"xvOxA_N0F^]O'y#wy񥊴~6WBS,Մ(ק4~>!ʿ7A,AJ28Hi&u֑cfB&i[_B5~)!y违e|_mc5~-!1 XKh}C8B,OTJS5~!)&<"O%/p K>\9Ao3H}~{|m#Oo%NEN&B9HHz C+!gHpi|"޿HjBkLxג|vj|h›|7p&#?"o& P &hLB[8{ rBMxEܿ"REϦR&^q_^_N?#Y}*?ME?9Z~~>D⑾Rk|-!)6QĄi|3Q>eG#~)!܄Oj| !ƧO},H~"/go%sįU\Oބ/jByE7)n%LvB?TK}ńi>Bϯ <W(UyZηo?!PsU󓴿?xgh_@/Tl h4wy+WBMƯ"Dcy%}G:s@'7)n&l_5~ !K<+w} ~!'&e !�ONc+r:g#oZ>Ӆn|PozDHe:(3VOX?K E/R>GL8s Ghq#Dw%CqK zBo"AqK|1ߧ#u?c\:HdB͑?*s4^NA| !&k`~)xƗ¿K<J?㉯U\HO ~!Hbŕ$$Wb~d(b@O1ƣJO#~#!0m3ŊKBME !HA>lIɾmC*q>W?> ?i)?N8~!Z~BI|~YKH I| !o?m 1oy]Ku~* gpۯ?A@|*#~ ( J PA'Lc4~ !6AG|b?kfBϑ<5hKۘoK?MQv5PA!0E|9s*4 i|țv\8„|"~Ic{OxS-?x`y)D u(kx<_B|"?+gc5/ޟ bBI7 o //_BZG<|ƻ?o|;qoOpֽ\m͎ح7=غgO8&,{N|pþk~pmVTTVXDƨȞ}k]={w\c|a%*}|M f9!?OE_. O&s#-2 BNؽu랸u6SЕ*ЕǢ2EebZbnAy$jfXczŊ cI쏚{ڻq9ƺ%סF17I&((b)UJԎJJjϩJÞ5$jޡ$%<tģLl䍖J蝾G}ï!XgC5L* Xh!Xbk96t)VO?DopgG(9yCg0FvgOs!~tCL):5u7G-:)OG4:\Ũ[Ğ`evzP O#8/x=]tHO:A!au_1Q}$ɀMa=dZ \'.*ɭ mt%v( m w)l9wݬDŹtcˣ~iFEFY3xzS缬s/5 ds6>)jkޅ7*.{>$Md}-uzY8Xǫogr‡&+: [8 +C}9NЕU_I+U + ̤{k2iNp(r̓"m$HSz,XI+*P9t‡8aoCRr9n}Q7lF̯Ԇ6Sǚgl94 qCkee{@Z_ Z}+3Ge=W_s/\sbΊylx;5{Z 4 -KӜZKp%%`8Gqs/GL|+#(=fz/!ILGJry?y{FuuvnϴvwHlu`Ƈgϣ@(Z#܏jH`jaQ7mR9 9K 0+gIa;g%$?IFiN 85GcJ"$r7o?SCzzyQ3TZ+ɬȔexi=/-SwϴmU>]I:*MʸPhPy~EZ$_wBܵ|2㳆355l70QT?\✻p{x2cr+TI&&SWWWm6&өg?) ilUMFul'#ׄW.UY'(:y=W 8yJvKK_dKUSY5(+lUMxc>Y*G6^go=PeGP<mshe{f+fF|XitTaӼ<7ET{kFu'= ?`+ϔfxc (S|蒗'arwXǸyuk,o'X\L+u~U#(#"Ec12H⧆QNsO%S$^9{qk#X㕫UU>_}?M ~"NK.t$~!웘 &)_C)K/!}%OS|uGH~&!쟮|Wo%/C4BB es/UOSQi|n]%}:-Q8?(jG8'|ZLB_=**;z(?Yl [H|![D|"NK.{8A5+_9i}ˈo$}ˉ_*_IV&þUʏTFF[K|#![GBŕdQW7$þN!~3"[7Mw_B$]&j|!w7sE^ a^B +!%UN W_K(-_ gY£~%M-dA¾_&th:BߡyANQI<%~>'c_I$jLru* c<=T> Q',{y$'`?EB4S3N>ϘSM9K|!f"??_CB*6c_@Hq1I|3!@R$+!$W)n"FEq?g0u,~x?NC<<DŽiTE&|"精#T'=߄5~?WW/$x/4E'D_lK5yRqZ %&"$~)! Bǫ5[o!3b"wL|%!_Vޮ Q~o3yvQÄwirB/~NC_Jmo%{ɾ5X[K/+n$>d‡5~!ҿ/A GN'\IOY/!D|Ƅ[OUI?gI}S3?K@EMo"~Ʉ[_MlW4~>!+:So ߳$B_+q %31W7k\BߠL?TDZB<_LG#~ !70Mp?i >F,þ/UF!HͰȫ~rEҎ4A *HB~ 5G%Ch .!~)8)7ekjƷ|?Za(Q/3ao&%5фb$R;?D _YxYBoF~Ew~Y/"EE|!O֯ibB Β.=R(b~c%]@2E<NBo T#Xz ?R?C%P7=LGz YoQC'Xed>ūT^_xǯKI:B_җSȗP,T^II| ?YO#ΘPFi}\.]k}e#@]ץjBBOy<%Iq-5~!*A-[G|-zB؏g8o;~_BYH4E6}]zlD4?PLJb Q>#D2}UzWBgy2?¯p¿π~ >$\A~2~g(Ϯ,?Gv:p?XzoBI1U}ţ]$yՁj-Zs8rBtG8衐_ ~(mlQ_xT$F}Wdv/!s=uqјlwT5]mG)6LIuFpw̹AS9qGכ,%z*Vof̕}6c:,'[UZWzCK uw[r5lTsAi Z?JLPiǎfeN=phߗ%JADwzY=]:-!v.645;sDգpRfؤ!pAb86򊼭sj=zB>2۠m<-X $IGӧ;Do*h>zM\}gV,˃I{ĂLB\<$(唄͠4G`e@++@ ۗ]'hئcz;ec>(ziT'_^D, G>'@elP3 6r<7؏pHvG5WV[>jx+?U >DG8/ Mkni~ | <a:(:gv4%>ɿ]G$;}$>5thH΅]t.lFݕ_Y_6z>)m/'8]^'x!O95˼p&W}ٚP +-ލeZD; } 6?`L:;I-BFD,96ߓ>N伵FXo˽/zia|k8Z󋴵݈e˝ [ͤSFznKB' G|ɉ?{6?kR^8a2Ҽugĩsnp+~RG =&^VӜY3𦫴"xCu|gh*^0q=7AN|L[lo#s?{<"\xP_$nl__ ϴXGf9Fo?Scun%UfHNK0`%sKjn3ɴos>nphZGnԖuxtB4ڨ:6phNNy9r[p@GewBùATTYYe8\]#ɭ@,*_<Kj]G*!eϋ=spTeon_bL^PA=H|5KmjoC)qrP}OteM 5쉮񴽻7Eys;/ks Oci bi:!JtcnZ*N{ͨbዙL{>q+;x{oʎC݇TWgZu:ZohS6Yieґ-CTwZeGOwoOU9~*QN+'GR\R~VwX_wdaӢ0/P[Z\h66.z~JM1# '괭754[AOwwOnsskk7nO:McI!i]~oAIkZQy:]&oMۜ:{ۻf#2 4h;IUW8u%&cFlazU6pO]G{WW̘ZZ.3:Dk. lV'\@~CCWCbas3g6ZtB9mb@2}SΊAw\Us`ax;_s/qF{9-o'/SyJMIEy/"k؇RI0cOm:s7G+W<|I<¾ P,#.#say7I'c/!}%OS>}?MK}ӕ/tsiLSg¾ *'Npq5!OE!~"ʉo"}so&}_B*4<$~:*{=!:AQq's}zgKvo7!_'8'g 񍄨/$DȞ5~!g+*aUN9+75WFY ,o#fBؿI"~NV Q?ۈ_HxTDp|'MkhZBow/_A\W~L,T~WBNڿWQW^X&0%,i@9gX:rQGC9>_N;G |UNp8仉%^Ɔ(/e}„,<&_HzoR>b_? aIW*>r{į#Ng@(899\H x  6KE"濷;Y?K1,<쿃2'tN[>vG=@c>Zgq$_M2Lc~*U,1]wVkT?Np3';Yƣ5@SLxEJ|"ϿF|!L(U0 _B(K;K g;YJ,!㝥呾pwk2”<+}㝕^@<!owR^{4~5/[ Q>/5e_Fk E^dQ$ m Z _KQsE/IO9£_wh3F bfyv}'ޭX=&O+r^;g3*GLE>o9._[ "~>Zҿτ8s ߲þQ'8Ǚy i_IįR\M?a'-<[ ~?e?MZEH-(9;9#/.B%(^AW¾N>xg1KB_K_wsx"V'8Ǻ}"? ~瀷xnEa_F ?SW($?3NQkA|F*_F [5wwKq/' }&*kgA MsxB"SO9O>*&=Yx!_Db o8iƏw8{,*2}Ʉrr?*4^Rӈ/!TIM'~"L 3gLB?SԾ˂s+#~ !CTŌ׿yFOߩ gt/#LyY  By& s,5'|-񵊍$_OB7r\L o&B*.'&WB~17!-H~ s}~'f~-e a ڇ&ix?eSR7XNSfN&g =5*/S }m$^޿99Ka+97&6Tq7uڦ+ 5mį"D_p! _;'kY,e7~-!oo=7&U/ϧ5{*AO[ҧEhUr'?giqS;/Qss:!e}9yXK9"/w:sP;/Sb7y˒~񆓳hs)r|C,̈́T~,AK-3-9TKso!|dh zz5$y?g aߋ8"Oo\"_@_FpjEKuMKI+LxƷ¾W<בW[y|z 7¿VDHq*vg7A?}KJB W;sDž_+ ~Ea߯pį"} UGgtܳ HO TfF;a?oUdg)a߿a߿ b}HRo&TsoU瞳!K_<xSlIAϊ2Ɨ:L"QR~YilEѶ&s#c~-!꿓zB˄no Dp"oTUb 7i|!; 7߬pJWO&C)K[E7[Oɚ$B+CpEL{\uTN+4 >.$b~dg(y?~ ?O>:B7(3o&_J!~-2y.Pd| >ɷ^@Bw'R/%DĄYaK2(ߗ'C=W(֒W#D:A_c ~~;^O|! 1>Ʉ7[xf_@(-k;I?ޭ<<ߣ% FwTWk Ϥ%?#~>?&|#LBQ}d'I>E|F 7YW}}*B/%:h_$g]L?&|U/'+&|"*Si;5`ad)vtA~ .'(t|)B|9!ꯄy R'.,(R1o?7:wc:BoVOc)r<@?̱ ZBT~U/'R?>*_+a_?Y /y o[Og|oڣNJZK%~n:zr&y=ر^ps{6#僝*9"1\˲D6ċ џbO!p6@ϯDeXq/1=kk"ȡ6o޲~_ӅXTyVNݐ 74Ddsγr.1ar1h۱zp5!j>dkNa=4=d|$fVPQ>avM|3فᗃ&癚 ewM=p) $i\d ZPϐzAٖgK~N50 O3|Q5l]u?"lspC)~:m%M۔"qf/' 2?LFٹ~m[+GNhVp.4ٷpι:Ote K2; 5Ѩ9c#Q3+VDdQK 84A&U,hcuR.|j\,HHktc`E" !p}\$\Lzh=6r0mb3,Ԥ!^낋-9\(X)*88t_4n;ʞ QWW-bpИh!NO赱Btb9o,nxuA5On#m>_i w!~tTPN,˄{tR_6&8C"zU`xfWwPt}^*5.Cu%Gθi'wIX}l9e,s$Fډِe dS1 ܉'>1J&6cO:qm13Q8;qp>xMOlh%$XzcD#9yssrqp{^''P^rN:?.=Z(hM h'܉4;}HQ(GU$FB%>[Rro>*m_v4 vv4R,RP_dn t;.wӻn%mKڼIOyȯqqJ=Uf>s=ғ+0r/;վV {qNxQ^\Z+ 7C{9J)Anҡ$a9eKP1)jj{T%> +8 )}AJ|ƜoOB5SqnԪ9Vt:,Իg +eC/ޟ)`)=2FϾ8֋>^}dȽJ.>Ҩ^~{Ml%ѳY֝ ֢ Ȼ]Tx_}:XƸ6L[z+]ozm"I,v1 R8ыS+,[ktb˽skN#YdՀMv ]{G(-v=M+/{d'U޵t}^_xL7_D8ޤ 6S:bMa=?o_X3\_ yf/~7}뭑3rI{a_ Nm7yiN/\pG%;rzMFY|?r["7CW7K}Nr51.nUeZOe{ۏ۞=ޕѯ#7vwg"cZN`f=n1?gh-E(š(َv`i-oNRJ5sXW~>4RAZ܌lwf_w|G;Kv=֟Y6CNb}..>wܹ'$_'i $ ֱNԑ0g~E~_iA?vP}G{o{_/:o#F,GXndVdle5U1'-_H)ëę[M[7kTܵ,~殎ʲp2VLbg\EEAU iL5 ɅiuqI\'sufOT?,2Fk ,n]3*XjDb-[TEІB{ LWɜtZ3 RyB#@b=S=' R&cJU]6{59[n5d2י TYkT.r3z_2'96 Քs M [R}eI44M0M,08cuMF7ʷU~mj56\{Tx@m)W&jrGVE4(bk*9%ܔlw0 z SL{M.prmwhg_U虪#dxVbPa$:ۤ}d*0uvavWݞCc{mwät+ \Usk\TP tf1#{ŒkMC#Ǔx5~]jԞꪚUCȓ7vڿ6Jnp?Zݵ֯GSsǞ"~Ǻp' F卜u2{IBFb3ITᯣUD1"/y>?^2P#(s <_=ZRq??5r%xTB \oi_ݏRO'}XF]Fz¾ oD~ ?MqEiO#j_aľYė¾  ܁?):)yط+~lVi<#e<"Uq#_x=I&B_ ߬˽m)A,巃T?; a6/XFBnú}ׄ."Oߤ g4~!w:AAqq\tB W(^G01yx N'<~]:>J|;!$,iėNt' Nx~{;6 ėೈKM|!K|%!G<~6UC/ Px7(H[ۄYxϋH~!{1}/%~!{ѿ܄WhzB= o yi{2FomC5k > l #D˯5?K1G_g›-ė)|`›4FM3Wj.hOvީӝ'^;HTLWQ?6-/ՊNпzB/%τjBrH4~!!e,<#P7)b%!>K?},?LZ^Ok| aJ/'D|„OZx$ɯ D>e4$^/i*B/~9[ aM/B_IZĿB|!/ D ﯛ˴E}E(o- o|!7+.!3;-_I? ~"o%#_E~JG?"~5!&\[ S ?%5(Yg҄jzB'CI~!%}-9?Kw?d_4~!ga}!JB_MH*Bopw&,Y/߿\C*P^1d ԿF<$þ1$DO/C~|d~'I>jd.5Iy̻CXgT /3rK u2syQS?]o)zE?SW\75K+ Lԓ,?*E u7(6}f>HbBgS-򰯜fB\g<Pwn/Ul!bc*_FWmBq5kQįS?S5&þķ) EG *_S&%/!+ ,y!BK=}.KzBo 񍊘I֚>å:?J'~"_⛦R4~)!ڗԵyE<:Om( пU_In'~-!w u~i^@7manH{o#DSWYx_E W[o3_K'_/=~R񵄨1?;lo"fM"Щ̈́̄~?B&|">C|-!Y>u(%C-%_=!7񍄰L/T4yU(~S|ey&a~G7"NXH)eG>.WNOMƗ>f/,s:hgHpj|n%s W&CoHVg}z_?_B(R2OUgB ? Ä́h|9! K7˟#PH`?]Ӆ&lk"31HE|a)=K"~&Hp-?P?=Eǚ0NEv]bey?fB7_B{R%}/SZ~St1Մ:L_N|"W~S_OKaT姩}Ӝ}z񵄰o&4M[N/ f+?])W¾y(6}J u|Hηþ*(6j<_ ۷S|_@|B俑ZEcsz/ DM[J/E/Td[B7+?C/eW"ˉXOg*o DWjoTkEVo!FoZM_ISzc^gBE$~9!_o!_Al'XYgC3Z~_}%:MQaߍVfG! QLJLńzM8i}}7+~<_ηo!e B(.&n5vo&D"o'~",w}+G+?G? N?:BNC{ wi|!DlwX'Y?[J?Er9_?Ägi|-!Ɵg&#gQ1?7G;U7; 6MxKU^L'b|Gyہ=^{"Qy/W8&x>{= o s'<ɳsDo__Jn6Q߿3Nl.8 F~EYX?k`%Cr9D䡿fEoo#~9!zW*ri|`Ư#lL},K3M ANިSQǻ/< ۄN6-o/3H>jB„y迒4-ʄk4su<_cIBu[ he_XN~Fq&ܩQ7)y迓"G &k@.K}prE<ߌ3SGx Ot ozMpjE~K|bLx݀pE鿀K^h‹40w&"/"~ZbT^Z|*7< iuj(|;<;6-Y -?7g?Yy?>,?&wmBλOKtC0}bËuv< PѠy&)*<5f,u|SP1!xҁ'l]u#*h![a *n{(}Ч&D=<ƬCJ4;^d6G)!Wdx'Ԓ%xW[H{7 C C}s^k(W Z1xPjn5@ErauV}g|4l+S^@8R/`}_͠p~8! =]mGz4"Vwuu2Bj?B/fmSÙٓ]OXk"Fvum=WTݝO+9)lF_lT"Ց ek:tvwt'ZrIެnf̉lo_Ԧ1dh_: UuޜHȊَCG+r߈)ܭ+͞HmYΎ:H-FD EFu5uڕ{]>9/Vyp;/HW\sB.hϹ(0}h4Z5UlWs9yrՑڏJID0ApeƋL-̠gz;dw#rr0xg iP )Zm:Llr1'snJ~'xiw~hw+{*VfNvi.XН#; :dBCowkbn:UF9%(Bj-啚 G7}+)OsFtf}}wQ۳PPۣw^m0~"u ciw{5ǗpkV18p 0$`@}$fiΉɁ!>H'y {#Ofwv>rW6tƪjdw4Ww+keoc6Dv 3Fve L\!:hFǀt)H߱m a#ܹy琇&#zOj,VoKkL,겴TnSG*g]A?ã[3C݉kOlCZGIDˊXbUՒ1Mt_5=&GbBY&7+e|xǤ 2GOvv<ۦZ;:'2k6N$FG%?~i%uZ=hAĽ*sߣN kf}u29^ݘvv#5"E@or?f^r.ж4{rܓ{d+9Aa{''\.VZ6/s§U:QNq3'zahZwOc6u^E" {JPX]ǢYb,p9>p$6*+sA&O 4_*ʣ |f:R΄{I;wmwJ^/u pc~g4Ft=,!'ߕy*'|Bz'|Fz/\>8(W} wm '8>ɭ+[LW]M3R8/H58BtGj>լߌ)/zk)=Z1;\8BTZ=Wǐ[VGAoHemˎ|4'8smF,s,7ߍy'|za o3zqyjt`.[ ' ask%|l4rcs] fN('ߋtS.v§yk\ C|!\|Ֆh'⯽|?WtfYK~{{lfM٬i}fNw˴v:ُ 9 uy*qJXŝxOO$W9.9wqd ]#Ǟâl0S OfsPrzmGZss(+S<#8U= P {GD(gxƋNwW꽯 K"蘫:*,+ɬȔ aFU&Oh  HC#BbM\"hF.J?DwTy._VM⚒v{Zf_ՠ|U:7e3LMlM+m"cњZ):WU|8fKJDFE3s_+ThCK1 _ܖ}˶-|PMxd\1 ~֔ Fd$jefweFx՝\W&&SWWFᦈL~Uy*s+&+Ǐ=D/F{Ov P%ZKTUԸuٗ(lbSʺN6 \%qnٕ{qTъl25CFڨo?qPjkYScɮ2;1lMF6YgjS척cavTq Zkޢlڸs(M6=.X>A.U80C]i]hXOo_79S~f<0z @g{~0[cў^َ#3HrGw`D\)3hߟV_x6VVltgnݞ1LP6Օ=9sf~UltPt:yΎ#*J̀Ovs/$Qr 2St<[vO&&>CsǞǓ"~'E ͐m%K1N'Aʉc/Q~㭳"/y>??rDSw]#(#<N8/-G?5r{r$xtEB 55^ZaXӎ"O_컔鄰o3qwV¾ oF'JY| !+!~b7U#ՄoZ<웮|]p`,g¾ E'0N.T2t**?_'ފ}7¾7¾yj/!}FEUTq5OJ'eaVCF8n-$巈(&k D qQ>}dC%}O|5!Ox(b%?ItE/d~{ ϱ#[K>o5v$Df³,;UuNп<B/wPxKmc,<PvX"3ߤMx/!y'4y"O4. H$,do-<俨x }_V"?:*u/xABw_k,<$W~7!?׾?'xhlB??%?!K+I'oUl$'~b#̈́K__AJq6B-H_o'Dowb|?g.e*sbEj)sRiGb;"h_yHe4~&>?Kϧ^ueZ^@K[a(k 3K:B-_ l?֒~))񍄰 MLG_ijƯ'D65"S@M_>JFBj}S,пYN𣱔|jW)b|]D|Eܲk"~Hp _Ko&NRwK_D{j)CׇݾS5~5e 9k7}LVUq;o k5~!yطY$~?ߤ7YyA?͘ڮ3[b⑾Rg5JE_v[Qn}&\ y迒&E\CrB~W*!uV$~-!&\o}N|6|ڕ//vC%?B|"o5ᘅ}H~!$~b+EZBwN)6þDN( g~Ni|B')bVs'~|M 7/yù)#|%_ℾHItBܹM%Ds}=:B7(S7Bi/Ul%gPx;=d,mQ&6BsB(y>J=τk+ L!%n^LxlrJ<+yy /:B敔zB|X7*3uT/_k»,:+¿|_o5n7Yq'&ޢQ>oNXE-g]T^i τRBMEߤ|>`‡4~.!&CPd :BGc~RO<gGI'"_Q/)g/AZM}B?_%u;[yf_F:si/ "$Vq!EW_MįQw [x$C7b2bE~j?3yGwSy_~_oGI|"_#D:AcI)KoT&U*#_`\ǟo#D$4& ~N&[w| Op3_@[lGT^Ɵc4P'=ڄRF&Tf,K7k|9!:>kG#e|"@Si&Ӌ,(W+RzE֏[Hi7+?[g~Ln 5)ݜg2drk1僧ƌoNV9HUGvҺEX}Pک̹YyU{Nư*a7 Ox8JxyFD|ᇶ5C^FóhMb?5 U/qV}`K5Q?C}}3!fFqٍ^S2t"Dj^4yzh2p _$P{'Iu ;Nu$Ɍ®*r5tB)w= k ''QlM䢄>'? {GHʧFc Q2V%P)6O6Nw֘^"";Xh-7DljŒ&j%nDvR1p:H!;c/T1ޝnsR/{)[}ƍp;ZK?ILhhf),-~\h$_ aЖ-wkb:UFဉhaWhTmwDrӥCDCl!qLpF2l 4GS!+\Rj$њ g9tL>#V uM] ڭ/|(!8ROƏȩGu"5{H]EԲֈ`y~u'UŐ3>FG=#>Si1^>p(G fEļ`3y Jp?'DI;csm2=or8*{$s{C7ZKt^uiXq5zlS=?ԔeNG_:z8_MʻG;ǧ8^/H.?|Kv>yj" zs<ҫIU^]m itR{ek'= {A{y 5*3>Pc|NaT'k<%\6fB[z]1_N}2'* yjw$-vL'ug tŊ y:iy5ޕ0]zNQZV?l> [Mpyc.X -gt$sl‡c/qe;;f .avY E[N?Z,hint-wIލWv jaNٴ %`򪯤iFKWp&3B_k _9hR/n.۟(Kgx!Om{`KQ_ybMj8pJ3^8Gc  `Utl/ τ׿;AE NV3>>X L(6 Ӝ`[9Y7L:4M٢V29yiBcu?&|_kſπK րkq^c]]IZ\b+f֓GgM 񻷈$Ly$E)E(vެvaw#R0N|t1SYn#aKa1?!>Y.IVzC녾PuEks%=F]J!OMF:ml#ZQ^ϴg/weDn ZXKK{JxlTMF5bB;x]*eBizKA5?k2rMs?XhɄ9LdC]dJrp)[M/aBMFL0!}척cdvCTlޢlڸs(M6=.X>A.ː\ ba󦞡ôrKM4/})vd ?#P1w~8S&|w?Z<@ÚĝZ?[5u/LzFFgN#Ovs;<9eyz2sZvOji!&#wvRqccv6=tnH.A^q:9?8 =t :=x9e?5~(_yAG+W<|_A@rpO'} ,ML}/pAS/!}%OS"j~$MK}ӕ/Ti#hY#/C|Fa9_M+3E!~B&B7fB7O%BӋþJ*"W~>kHḧ́)M,]巅/R~: zвHYJBBԏl\~d|E/'Ig=BLUįQݸu6AYG9o+!ߤ|OQ~HFBBvHxyT$Iqk٣ пI&\~L,T~Z'A_%:Bze..__B?Mq&ko2BQLj/'#WB*$M|-26_@y)&dQ?7BBK|"_NNRq)h:ByxUo1f b'jNF1M_kG_z B&"&R_GXaLS alR<<컓K~`]Bzb+Am)M?꧍?_ZhR/"b %&>^ SZ/#~!!܄{,EߪXė~E4Nۄ{-<ҿg(ڇya?}'?踇 |2B??(!1+B''Ul$O!~b̈́qJ%eK:ψ?-|ϥ N#fhc4,CXg)b}GgK5J)8+68?xoN5h|#{X,x؉WA_B{j"-|2se 򰿘 [ɾ¾TMk*zC'þR)^M"~?!@կ h|'!ϴTE!ngC="?O+,$_I$m#$*S%~o_h0AyA?M&,Y'hHf⋉GKuh|!)4LJ-:By SW'C+MX_YGrBįT\C>#I¿Xl}_F,~B8߾̈́(-\T1CA|!rE22a}I~!C|bẅ́J*.#2j &儰'j }J\g?y=_1ɃaR$ U-!o8F&"7D]ʳ,?N ~:!&g(K׾~ 0|i>_Ѧ?GgS!~>!Qklj_DOXq%Մ>ME]rYG7¿>G&B?_0<cy uM-(&㏬d}?b·-WP':B}WO߱FEoTǟknǴszƗ/'~.O)#D_IsaWaʳ#-δȣ|Jv_C < ۷3R~,?[NCR$D#>XA#:k|%!꧒*BOՄ_55!PZѾ{WOa_@[@RBB?L_n?fzE7BK,>(oZB,\yI4N&J4B&:N3wXa:Kpf.ި5yH|fo[5~ !cKn/$DvYʏE a_HIń,F/A| V}FtE]wvp]r{ Oþ;wӣMxo"D U~6 &ܥQOL"bY>I YaeI?߃YE(і{p~z Ç4?ȇG@^uzCyyl>j>u֍(¢{n\7B Ne0MTap!ӝ0Tl# ]OpYm豎&%k!휚#>Ot~kVy<@=m#a|>Cۚ}!/nB>o'~]XRi0i'2- M5"~nlױ5C[q> 0vnx~?Kx$aߗݸ;I:~8@pgvzLّxE38nX]Óo&VpFI[Ԯh2>)vGxqyT =1Ҹ$ne'6p>!=֓hz2N젞S%Ŏ nł*? 9X2Lnu/7r,x*沃|4rL|LmLgqs;S>~ub+o-m#wvEr;q<8/R~USʓn{ZEގѬ!`L~g FDbڋ\;'v@!7mHqrTP~᪉xHiX(>DU'1Fk)wGaƑq~4~4 k,U mE-y :\ӏbnb|RU 9ハt#>#9|1X Uن2 M3b=h t07ph8X+rywƀDŽ d.w~?䑤|&{V90{$xyG Fr>=$OEIJsnN ۉwҗ]'I謑(cz;๎(ԐN m%mKڼ r|<ʉ1}\.VZ%/EzHGUknY-~ 9f)%V&_>TJ[0xtYq-~j?v,|<á`NFכz ]omtͧƜzD$W; wߗԂNel9.oMx/R'[l%wiZ'8 `YPhyYEq|l6ʞlpQ>'8#~|.wK\0\K, Gy_9jv⧣9|``>F9rX40VA_ ~x=@[t$Zɿt=,Qx-[htK"⼵F7S{{ޒ>vm|dWZ}V/n0 6zitMwI4 o\/DLp >:DBvg9!cY^JdKnO®lQ[N 4!_D>7cz~!KZ# ^/%aOdMѣ\?P${zPm+dDxI햜$)O8Öv8ޢ8Rh$~c|Z)[ݗ=~+~?4 }r||y͓񊗩|E?10/C>-ՍO #y: [x4*5^ZaXN>?M ~"+tG¾ oN>_BJ8C"4 LB?]B'8E| !?7 Nz,sieT!T[Dj]JBon<#Zq)_-yom*_~a#o)ەLB"3UT?ެՄَE7? .-!-%IY-%OjE-'~J_ٶrDLUWV"~DF Q~_Hks~_DwYaWPv5~%!o[ǼSxE׽&|"精!T1b{x7~"S{sė#Dy7yՄQ> c qk ѿ|EKȾ81nRBO&|">G| y<ϟ@$D|ՊkHMƯ%DyKIpQg^8i_(/;w ė|xǼG{OUIop"Ҿ'~"~xK|B91QyckaOL~ ?_P-pR*o(߫x':Uwn'/p WRǛ\MtB?CQ/935~.ֿSP A^}#_J#_K1s+bN{ #Gٱ\(M|B䯂ZŅ$_E"BWXq%58@ڇ[x=o 4(? !MNfn>"Ô{%D5'C+},sG^^|!/O7(tj5῭/Vyo5uZ Q?ka:K/'~# BS}E7+??Hm'~&!"~w:_IE|!n =(֑> QW(?Yڑ_2z="E廟)Z|) f"E?*z _w˨,X=ǘ儨ߣ%D#~!꧓JBߍ&*BO =yqn< ۷sR~,߫Z?GQ?/UOw8^+q% !Y)Np2_BE4B?w81ntBϣ< }%D 'Bq1.̈́߻I5T*%iʗ8#E<ϳďח8GD?9h#|4w,{f_ℿo~ }__]<#f:#f3G`0n\tS^H¸VzXZ)N6:kfHG5 {Ѓ}@el耏GJ!>z&du=x-~lX+-h` c0>XйJ0R"$7}í'$x 6Ɋ _A7U|OD(~ÛC=`ܓY VxDM_*'I aX6M@CJ;j?-;0` :-}ɝxs6(Q1yg1~m%omyrnd{c"o\ icIFLny.|o'73 rsGFPxV;'ݩWrNe'9uϯuGѯJ[8nG,@g|T2\٘CۺVr1d1^2X<_BVrVڏV.h Lc'=k2]g!gCilY0`l5UهO.{]Us -C-ެ;8 J9{TWE6ε$\u~; -׊6*`edЮFͩ MGc,BљHi>9 j\&~*aij灚2/emv=T<먢nWvbcL0 JwؕE l( kpYn͈;\V =6{~{ qţ{7VXv]O?ip3gEL:L`1y53g3nqfNg;_Z+ƌ:}ҔqmbYq lkHkQo#JhΘʒ:2p&lw-~ޟCޘwsO?tX+,O uv7S*ϚKhqU:Pgw\:k&ឺvSGz{/INPuGOvIߙT~sB~wsBEW!lIRs>,1u%Е=}Z5miFlǫ2{+|Z,h nQ0*nz ;?qlzoI1o<ܪ\M<wB% XPAI챫o676UNNr7ӯ{|)`YuGj8qn,Z371e`;z#Xol,o7*ud.8uTgMWfϳy÷&V fLNX9Y_)V:ɶwS?Wϔg tgp \RXsDzy=f)bI6𪮧nMKUUiq)ZN?85RօG5dvEDϣ6ĹcaBgX^NS1oʹn?af7=':}`j|e&]Ƶ7dOfp}BGʹvtdO1]=/,c'>3. 3 F35½ۏѓ}ÙCg3wv__#ʙxaLg)FcnD{ ^*um^\y}x &JEwSlcx-$Yŀ{sN'{N=S'_Ӌw;"繼9sٝ[vw&e3i8'ؗ/Fa-uC̌h"0 ?O+)z8|a]k0q&u1yEz"sӶHf>?Ai~x<~Vि:un\N{~<~:!O 'XcN{~<~ !B4BT-O,# ÿė(rYʫ Q!_JdLeKw~R9dӇY-!w !RsDg~3K Q?uk~*C1]kч*~|BLBBgEܢXq|k#DB7}SKU}_j)FS6:{~VLYM\BԏMu*G1â?_^kQ !}BP~6KⷁTȱG Q?KqSߣd~CE%~R~$ wU>'~ogTVBOG>wZʷCmICZ_RB[yCk<?{w~T^N ~yW!+ *B#w'4=oTlQ& ¿[I/Slwd}"DzJ>576==o85>qߥcS}6X?qߕG"DQ5ϖ:=N{ o~c*#ÿ_O哒7" ч[o n*_#!쿐fBw*w$s aS>㤿'33~c}%?K _ B?H|rK!+įT57¿IQ_״o|;!ƧC7/!} 濣Hz=g:~G-C;Ӧ}?1لh?EL|b5}ϹO ϟ:{~XF'=@)? KKx~_÷<ԟɟT^G}KPD|"?;w:!%~"O㿇y ѿAN]B)y#!Ik'C ICŮ.|1aĵ>!S!"$>#AP_F/™w+ZyJB/Q\ ~;!?R{'h@yw O 3~Cdi*W^Yxqb}7rE:Nhʫ a%KI)p;Gq_Lc|Tۑ¼#CW_szWPʫ Q?~5N{R\5M:ރE5c@?ӇX_[ɾE 2BؗރԇF+})k~$}YkFXavBV4R?WzxZEį'D-&~RwzWRJ_KJo9{ RXG!}nk} u7P FK -Կ: _K!7";o!D:3Be?I{OZ|п20yR㫹'=7gǸ ¥ԾAxBٿOp/@~I(%'ˌ$͢_ꤿ'ˌ/]N]FɺF[,-5N{L&-<8w_zN>#~1!u }s~TK#.FD3Sz '-Q_H{o Do$~"orRZJɷC-_x9$w¿'G*?s~G~BO jWT~k/&B[?WTNIo{zS}"| !]_B=M/B_J?C2EL_B|;!RW+b}c$ݯu}w?$~;!{;L|_-5 D\Aoot.m~ ¥Ic}s$ /\jy/vο#!/I䃒lч?~9aIsߣG?H+ѿ?*3}1g+b~7O}%:3WBZ#~'EK~|MyW}R_6COqпK=xs诜}YN{WH| !֧?SI?S9?T-ψ/QDM$/U^NB-Kg)">){W&~E!Zη#<Q?O _7]OSNw/?s)*"DK -o_ӿ'͊s(ɝGFB?< -cXs[IzD'm@gI[a\)$YgmF^Ʒ PkS.!O4>ʗ:iQ)ktg*?UtE_HWtʫ F\> FQ17ZJ|L+_ 5|- ч/Ro6 _%mx~@"~&5Z_ 5/kh7ֆ~%7R6~7\Kc~jIK*Bɞ(NS %OW黗>Xt>ʷrEm,'ksL΢*'D чi~6B_KͿm._%}^c6Yi*HsTRZ>L 8"iu*ˢۈ/W痢JڡJB_׍wZ~&Tޠ/#YV?ϒ?m&Dmfҿ?߫OX|/t㏭ o^IzE'\+U6{E>쿒 B=?h{2u(i?F%DzOXf}&/!ķ*rz|9![%}ĢF B/l>6E~쏷O+IK_ ?CQLu¢S+㘌 W"~b+Vnчg+Ù'į4DgZ(?kb5*/!qZaF9}Z?.֤ QuW)b|*޼~OMZ 6})o /{NO&DYLBKɞ5ZS\kUye[QVMZ;BhCa%Z+lB_e&J_bk%Wy!گ屍}_O|"/6Xp*_%KɾqKIoL;6(opN|Bҝ}M|9!|!گcwXa/t1&{~WUn~kuZB]"$u!&BwBwyKҵ*O ч*ߨqk˗&BG|"OƮ4,oEdТJC2Bz围#97ߢI-*_H)vEB"E.}.m2BO /п]/'D_?"~VYIW6Bυ-F(~/CqJ¿#[w/ߴ/濥w~OT>%=lч?UТ_B~7_K+ Y{$DI^T^߿$N+IG-[X<&YiX@?| !XaOOUg>bV B_o᤟r{>H9-Ty"lj #*o&JE_79ڇ }yM>)(}4C꛳ |7(8Oy+zl u-ԿHyn'KO'Kdg(?)P &`*F|!7&EP0/%~bljo'4Պ`Z`GgzB *Hhx{H eZNRM'"5OQ7 d/VP8! ,(_edޢO7Uy"6 or@dXӯ D|[ ?W~y>s )ł*ߌ 2^l#ė:=^]H{)Xل`E{st>V*iѿr@bYJ a=DWD'f|[KrBooSy}I_-بuh_BFKy|bi2eDchࡿKo7م]F| !s3ɊܾW}ۢ_[(U>*IXa?ܾt@ h}?@|"襤C*_Hs0DYk,e[o OwпƿI~P6w|2!^t&IC;wlY-M}K}Hz+Q?wHzEKlE$~!_|Iw9gwz>/чw?Oq1"y !UqŒ^6B^IÿD/t7,DO燆+x7fmJU^maդ_m# +o[%]2{IzEN| !I' 41s뻈/%^d_o#s*_Lh볒jG#>O%h_% _"h__GG+2ERׯ IߴMҟeEwD?_ ʧ}@c*NH EW'?"D?[>+y)s1:yTKF ~!}K(s5K|}J?xoyc9!o^ְ{BS1QҟU>K$ZTi7U/߈W|>!Ɵ?_j+}P9.|=Bgt=~Vp|_JEƨ|;! +H9 ϵ}2x&J:> '_)U +cz4>BlF?բH{ʛ0tqӦmR"DgPY ?T(cIYϯӸA7߳) b.B&>M|xuQ(c@aE/'M 9??_AFK||pT^Yfk5eV8O-?V-\cG󈟫Ho S̯ Ba!W}YjBؿ$D_3.'~3+ߪU U~!}neįni4sTBG׫}Xy qB$ 97]K wT [N㄰/,[ *cчˉ/'pI!Yп+Sy"W_CBR[1>cGUSA/%DMA)%Z&D&D7i7cTBoCߩ^h?W6߿yR-*⤝o駫|"g[aė*ɾ9~,oIʛ3z/w> MۜC _$/V}@^< }RDBo_v3)^K4EOuS:bx=q~`ֆo {#sI#[_F BÛۉ_'zwZx{4O"~!owhhʧ*bd%}բ DΗ ? C*EXaCW(#Q>%1OH'CaS/TT,|Vŕ~/ !+gھv*o~C{U> S oߔʧ*‡$}[qBX/S+*C~'Dkɟ+_-!B B3LV~WF|"E!h@Z͢J'I-/pK XC ſO#r^XAgQ$æ1U۔O悢*H׊d.)jчsTkE*#D*lч+r˚hW(DP-%~!g++בrm >KZiч+ߠH׊,2'[_A?|KN*b}nڿ*֢;/Sr/m*&Dˢ__{ѕ*o!DW?Oq 7u_U!V߿FA|":%TzBd>;hz,ھ(oI}*/QvtE/%$ |&O%qB% Yx~!Ƈ-Q %>0sm*PߛRfIZxؿZ۴w&(yiL?!+}Pߧ$}FQOKE?C|!ϫ|6!}%_R~濢T3о&*?΢ \󓉟9?~H啄7EE"JK-}_HwWe_U~ !@ҿ,C*R>,*_FG!cW(uÜ?]ω_Oo D%QoT~)!7|!~;!ߩ|'ٖ9_EGeX>&' ?Xg?Z9^A?> _w-go8^IK hCBX?T xʧj,>itI2E$IjBgB>O_Mp%*Cx u?%V,'si!>_I|b7c>^I}G,E?M|t"CajKt~e8|iCs:õc_¥F>'pSŒ݃O#!KY\/* D%~"o_K'^o$s-z~P|$Y:j]뤽_6IOVy"f|{-S$=U %cч_$=Cu?.Y}gZMk"D>ŅdIw|!$~RIw}ؿR?5\F`^mI_>Ioė*rITy-!+$ޢ$Nר}u>ƒ 񯷔7j|(I_߷|",6ܿ.*MC',N+L9~k ?!'s>@?@|"njQ#DH>%~ Jʧ*b~0s/Q$}I啄h_ED|"_&WoVI~fZCZ?:gc_w$Ȣ%T1N7?Py!}%^ Wg)b0W*I?Sy-!SIXψSl\/U>E>Ғ?G|,Z}?XxAs/?+u!x Z?DBo P_y8?O_Hos8\Wj?PcWj_M#sĘbrL}93ƢOKy5jg럫֏A|Agxji?\$iʧ~$1}7j@8ic&| !q>O&~d_|+az>(?\HUBa%+ɾ1U*o'}د"~d_:!D ч@C|/#K}zh|GTBOWcHZ8!گŘ5}Hw|I{>m|R'D. чUBc ge>}k4~F>Ue#SQ?o|N儨-" BgKک*B/xI=}o'Պc%r|I:lчˉo 2R卄vKkч+oROX^o!>Ւ|1!OH#/Q\N;,I[A ?LFw&6ݖwvB/ֿN;;DdB뉟w+͘7ljE@lE7IEsǼ֢B|-!ϭ:B$=ŢO"^ׇO)_!v[}}gXx%g?_珦#U*o%De;_N.mIz"KzEQ?wIz7">w ߬x^w)3c^"/'D|_f_N]Ak&YIpcު|¿h޳rU$g154 ||v޼r&M߶c[TT<ׯ'_kK[ooXUuEeص9c[٩;v(bY[]ǟ)zndd|umvdq@@eצMie)MseFG4FׯɌWm#=ӑUxnM;VΤ0b> U 3:80U&}cZhˎkW!SmX-D:.dJ`^dʡ4cڜp7 G9BUdjQ5@՗ʓԙv,NJ K'3WKh ba$l4Fd7yfs-uXS:Ya/<(ėӇu?`sʕ-Dli/BTwACiEDx\`[;qOkq͛WoeӾ^rnVDNGȈnyf8~+t6Ğ@4=q&%Z aw3Bo?j;Gel yY~5xn-WFíΎYtu$~Jpm Ue~f;׶!ru9>4mYwc6H}#T ӧ<>wF\ |T֖A> romOߍ0=,S<ߍI 9]xٱ쉽>+BxVLO%)Z*wߓ#꫁gJNɴ)6"WFkZ0Ep >Mɾ&?sRtYՔF ɳ ,N)IY5 O:SGZԩY=pVMtAi*hsTpϮ4qJ`F=ۙ^sWѥɁzw~Tād7Vp^ġC;t'˓ázAHGoOO t_ޝKvu$šN¸DHr0?i\gb0pa΍s/ИdUXaTu [S][3t$+wږad891_cyfޞ׋ıTG HAOѰJXfTQAg7v:2 4ݰp~CK*Y:qmm 3xd"HCtW\ n뺡P $ 02*Ȩ`)!`#y3KTSN\"97S^#}#xF`x6^inȖ cOu':2t vnߵ:HefڒHdsOoAsnN^[PdOPkIC}fQ v fff=NmiŒ`xjLξf;5r&G33+e݉׶c x㣬ߵ~?4Ńz읳ջ-Sum2w,x;d[EKf͊I]=Dxď&=V] =Cݡjy&er {~(0VZ3$3̞3̂/*Fav4t١ akޅCz!lv7AfƜC7g4z~`f.w,73י#1ڴ`C8{g*܄,Nuk?pݔe ߥmQ ͣ%ghFXs&Zlڛd?2d(nYe\jDz4-G{zLgy(~?6Bg=Ngwg=jYiuP9GFG@E;,ټPC /lm8($8u~qÿכ1dCR-;rƘaG͢$;2ƬCgQ{}k: d9 .~7v[& =#DOf \˙wY3 s&\}<o^upX.ǜtk):עF-푬2BGtۡ. &e8C݃]dOoL_ɸ@s|ꞁf\5_L ';Ɏlߋ&_Wϡ+..oH 3#֗̀Ɍ%7Ywm2;x8Kt\8 $;ǯOt\]:~u9C RDX:z8#&D>А{Җ'[dc 8YGFF*c2e :6ЇGؘ=]Y Oa?=0ׇF 727z|_ lq7] 8(C-ȢErIo{ts? Ak)>Z^5L0 U}N5kbW/&z_>מU&)k}.OcՒy=6o%v 6ܼ v^IyZXjNPN7Y۷qe#ɤ 抨ag~~&ɖtgؾ\kl.I.˃Rsޮm'#߸Ő 1bGu{ %sU~)9(F\֥$k6b,RCBez9͒li N0Ѯ k;Yĭq<'Jڭw|)2\#mFR_?ZF-*[ǩO52WFҼ-e_K1Ϻ.-ϫ)9Zk~Vshjk)y m:]-ZJ<%&4o3,'}=9ӕiB\dB{w=W{Pթ7z4OGX]``r d7>d kSmn,3N\, F7IkU!eP~v`J66L y7ƸNWwoϛl](6mweރE i*謁V;@Pm\dOtu:dun*֗͒jsʛڢ nu~ޫdp~^/*[ ~^Ejd(8ٵZm 5ڼYWMWL?_;%c6@G1Fy+m:Ǵ0u A0N8 Z}WSRS*G<}K9u[N]<5I78g?eܺ`#uһ@+ZA"Vql<^ b^2o{Ԓ9y甴xX0#a-$ أI/?2nL1SWa+cqI]۫ W*AHAff;w0ucN+!borSV%8a7~wWw.qsi7@@;;Nک {μ&ՒA~ 3SLy_ LXΪ'.RLx?Ғi'_@矓,[5| K~e7;?*KZYx~PGFvm 9 ? ,YJ/1z3p>܊3]A0 Ɠ3O*J:+ǕRwץ'5RoI&FY+g??,C?bai??$WftWJ?&3h rse\j,nj۩ٌQ*z 0ן9*:co"`P5j܊&!0淋){42g'=0EEGu :Иz(FCO6`/$uqsO:xke.\Ȧe-PПk1ܿ'14er./ďUb3AwaE6ނcL/ۯCŽ{өljLp[w|۹2VM]L^ɘ/X{R?,#tۗ{"x#L]%}ĉS/0 8c?=smtMsƚg@}Ԟ2mm[w; )J989s~usI!9OғgX#wLsGY]]ǭ U(ٚ<>O?o~ʤtܟH?]qZ{IܸZ9G|/O'㉟8V¿Bc¿O!SFkÿė(VQTՄ(}/%~"+4R,[B|%B_|=*꧖RBOq F!D48ZP7_8k"~>!k&~!!37|! ÿy/V\A;Q Ba%6PV~/QPW1EL ~.!g|iWQOֿ]yӗ&8 Pg?&g8~|g[xl/%Q~:"$~2!{S?~<_2rB􏻈E&~6!_D|%!!ZqK|-!_B|b3鿌BG<rB/V\J"&~:- :7*n&7o#4ofL**}M{-v~L_~w3Deɿj8 ~@p'|$~b!IQy!?,S} Jg"> ч[|ig|V>s5n:yI_TtEL]}A<>"񥊈Kg)/?[+ėzBWo D&*o$Dz>̈́o&~"]/!=[ȿKWF~ G}Cב-HGzBʟq7D9-(/_JJ-/V\F=BrBW(=*w*_G6D [ȿ?mە7?IG&b;NBʛyTlj_@ ~"'n6sw?O;M7spǼ3^녒&_BSDlE~B-OE|"O3#m}7RE"kdg)NlE"%ė,Wy=/RQ~YETHGe7~#o!!_I/%/O۴1f!ƟUʏw׿,pOp)&I[,N|tITBBF>?%z>ߞCrBoC|"O}!N#Dzn>^`e$B(?9C^mS~ %h/^ՙ~IPtEn/>{ܾ_)ՎZG ڷ9}E_M|"Hz^#I۷9})Dl).#̿Cvn?Vs.5?I_}HG,?"JǧJag!sȯGk(bmG$=򥄨߄ÿG-_JcZq'0>Iy #H5WL1RBqU?>p'T^Mz| h9Zh:/ P/ZH|3ѨU?3oTQܳW^Qk]GB%~s%ݡ9y_G_@|!/ky~ݓ1?_NR4EOq>?84哹*:EP~-+Ῥ U>-]eƷB '}*:kчė+h+ _+-_M|"FM kU^OҖYaEz/j¾nч+.!2VDU~ !7Ibчf*bfE^Fmn>#~"wfrtEį' Kߤ'>GQK %΢-#~;!'{hwތj>7s9!?믶Χ B_ohiWnBj?I;+ ҿ$hC-=g:v5^hW9=_MHPy$uY_eX?)ʫ d>_Mp!D:Bk%u[x&zB_!Q&}UN1>HL$ | ! ч!KE|\gwKz+ Ѿ_(5}=UY5oKzE%FD_bѧ##e7(c^蟯Gď Q̿NGql獒ެ鄨7Izo&аIoSy9!U{,6g)bivITB!NKsk4& >8B9*7;}iz~,%M?'&W~?O 37o|6!_[a[W*mIQY!=>zF]~#k"D~ŅdaI?V"B(D%K$B孄h??ч_XNyt/;IWtE}Lҿ,{KL?(}H%U-_Bak(?;/>:!|D37&c[վ!i|cQINނwL2M~?1ĊoĊBaxNc7"soRI|}%~h?/>ӘtOu{h9Vmчė(9&X h&c}/%kHԟI|#8͊4d]E}7"+-cZQF 'm=Vis-_O|b/Ě{3eT}oO[Ŗ|"Ӿ_Hwl*%De/k#)R%*K/ч%R&YZM "ϕVYxR}6';Vy C|"!Ʒ qP-*7H6^J|"c%] Bg9JB. %Vy /cWHcG|v:eJ>/ Dk_\ISQ?O#DtP Q?IIOÿė(VfmpHRCaunI=*~4 ~A/"}$~JTq}?Nj+MnQBCa@C}^BdeH_M}S ~NtE{gkIw|=!?! 5d65sW>(ߣ3/V=<)rgb+$jIUy7ck$ߢjE?{7{wZa 77Jz 1I[-fX[ɿ,ay[H.~pO OflGRO&DS?.*/#Dh$~!)qo ƾ9?"s~E|ƄcO:BOs~e>zE^_}ɢ/MBI\Bq~g!IQ&~9!oSeWUOү-(@Ua>?LfK?%~"=[xsҿ%>~5 B?bi]AcԿw-I}Q.M܏T?M{sF~O?c[lZf;݂֯W$]*݋ٵ}[ySV"՗_cwܾ};=;ugNE5ku53:`BxddΝ2lݾmӎLy^0NH̯=45bڲks W_#*簝 rW]1F>бdZ<ۋ<b}c0ewPtw>t.;T 3;JNrGtӝzM;V{y}9ǒX b%eܭsI6K1䵬ͯky]>8MCiqד^>Iy:vʣYS9p>Eچ|6sga>a;==a }cZpdF8b@'5A'?UMi9w{tzǬg əmg0XzF~; Guu&&n_,@?ˑ\3\xk4cWハ]M|}^D']xiw:@v'$ꇙ';۶ tj,Ǽ-wwO+.O=T`x_2sE%a6Ǘw'䒃]A&p0/џ8L}יL44tsc= 4}s|U>v#`oY91_cau`ct :9ԏJbɞsBр4َArZhshEnUgĵ9oD *\Xe`3Y`P8.ղ)ȰkhhF'r#ƘuC]q/L Aõh] a =wc2p#ό!#џDdK$R8A2, k"Rf;;}$h04Tt0q;csHW;#cM:Ԕso*>:tx0c,5m(bʽnvdᴇ3G5EL_#rLj +c(+I5BP>v`@J'#";c R>>QGv+-okE#_3ywk7ьOXauX\I-;i-h-w3_`L3**7Q' q~obkk& 2hYe7w+>ѿH_Кj5)^ϲ_@EPOGw_~i:p=o(, 91 ˂HRCKp\1G{dO5'Phv{Bÿmv Lt%Ki?1dCR-;rƘaG͢$;2CgQcur$(, ZZ 9PEbqH2ѓ-rYr>%T;;0cE[g6[OKX-0Pav#GGdYmԹ2\oYЍd:_&$tN.t]d3'%r|G_wWOr ꞁN7%g%dbp?ߑNv f;:|v~qy[GGop ޞH/ww#8ٕ02 vyd6<%:MJćW'z :uvuhZU?5?8}<ݛKG'{ĄSyÛr/\2@Cvl? =Xd #اYV.7l3n cFؘ=]ݡ0DOha>մyC9tܾD@r`:nJ03qPJۇZ(VE A߶oE'|k[,"i>^fDdci~E1Ӛ߄dczXWf:1ZZO7y}LgO/M@nǎTq'eJ{\V/_/HW N')NpȬ[PD[ZW `+ _B|G?/k2ZG4لs ;'+NA;{;~'E$3b}ÚËtoT*ߠ pk~q+v;F8 ) ,LJKճz6>S,0p@o3u|A||Lg8/Vy^eFUO/ljNn# Gd)N';맜:d$SGk$YJO-ZF6OՆ ,G\4'mNIusu[xiI4{рgߥyNۮ'9۳g:?d Խ+w.˜7H2W6:˜w&ff,z/wߢT|~GZ'j'bx{PNAEsͫmcH6M?s @@i{ד]۳|dlEVٿyOA@_q&q_ k?'/t}~>}~}>h'[3| ]kΧ8~  k>4YͿ1\o^''q ?˩͔;'1G,oYڔ<X=Yg^J݊'3SޜLY𦅰8|_$?^mVoiojnI.68oojjI^Ƽ69o?M`V@wW۷ opiQ%[9GK΍blt #D'ү>3}߂Toj5~JfKcPUtxP7ω;v||Ch&iţYG:2ķ[?Ou_2#ǿXk?MsO=[uPm^r<3֙_/Sz֥?P =Oyp;R1ߓ]ӝnN$/ϩMTCVSO$q}OmW;4{$i chX&m-Yr3Q[RV]\*pIi.Yx'/5-f8ɱh^!TEgW@M>ޜC1ڇ,.~P:GG͉7,_Ԅ#mfv4qəjծ/[d+J5C)ɇYε턢ߌ.mW(#.@B%]7$]ɾDs]bq14%-Y3@a'Y 27LNjptPMU^/%_ɯ744m,X~uW`kQF́[$vġ5ڪo7x3ZMGl!ZZiɢTW~ZTS3h*͡YZYB]txzqo=I_gkހo+{U6ku]{V1hv=IdJ %gMjVuݪI9 yjSC2[e=4ur֦jU`-6 pjsUu:bAflOmhγi7RSu) l Yvo]`b&LP=9ߢ:H)I|b-|e"OeLYxw}.Y^TblYS֞WD.vܙn_i7}XKemc, e53dzc.x95¶)+)DځNfmݱ ﰭ(`gxNЯ1:a]'dRe:Ly]m9*?qO>m76yŜ9sihB}/"iN1SѼל+yt6 ,(ֹqÿs:ޣp^ƿ N?"~g*Φ/\JBR>_L|bٟJ'GR6}؟n)_=B?S=33) )~4U~)!RJ)i5F!D !QB` 7RB7"3mn,TB,o!sɿE'_HBHZkчK_<\me!v dߌeT=DWYʷMEZ?~6LL\B#Dlu܇[)~:Ջ.(}A ud2ǽj Q?'~o!߫|Oq~& ~.! T$~*tH Q![5Usm>w[ʷ^6Bs?/%DV&1~?6|aB Fg}xMW$WB6kQ9?zBÛ)7:C9oT y*%O#~?ARBL);~}|!׳Cs_CqֹC>~qѓ>7mNIw_j/'D|^%}5+HzkCauyF*_{u-fam_b l̿S8 rz| ?+>쿏q~~ +b|7?@lB[x0O<~(iOUS/QƴHg*"~?K|"c/!W}JE__e7[$}I,7W$}UMUK[3/$/VHҷU+D}e%~5!kuj_ߗ7)nv(n)(ߥS|?#~bO~.*Ob|E>%%p:~ya>f䥊~H%Y ѿ$#}3_$M5*}s-1ܿU^OI|b3-h?[GF>0ɞ,va,|0_ RH{REjė)@Ah}}5x֢?[w HPǧD(b}m<2U卄_JY}?&E/&|1aĵtPKDO&>׉Zx藒2BmY?n)? AWwGA+IWY-hkA,5O&Di&~"}XqMۙ+iE#\nj-,Ty5!ⷀc}_hɟE?P%_b/S~YKE|"/3>I[\oGˈ/UDMeiSy5!gA>_ô7&N|"?F៬#-o [ɾ"Ue/z+ 6|%!Z5rE7N\C "xy-vvQϑ.SB+D_F.+ɿ%W䟬#T DY/A>~Ҿ~'B'-S$DȵBGo"D|{o!Dg_%D ??pլ&7;]E.?qe7c* CD| ![$=D7mK/'^BnBR(^E2IYx'q'WR\{$|#{=-SIho& %}ҢDbB͒b/\*_BV/!IzRBY/S=ķ"%~"7O*_G ~6Co'&~"9G%+?fi?W'}&c'xg䧎Ie_~F|97g?'~! gBWWBW+!_KGWl&BLj@BBŊKIķB//W\G#~=!NFͤOmX>.qmSq>Z߾:i}Ec,2EI*Ty%-чBKď$E?J:_Sg}˿Y(^g;.ÿ}|!/{h¢_ڢÖ́(˴>6?H|!JEz zX5"} I}*I7Dg|GǺS$oч_s1TIOWBi!t9O$=GWCa9ܸ)*_D чDq%ٿ[ҋTN/ чZJ|!KBa>}^BrMߞ{dW?5Pc6i&D}HX77ߤH蛈_H7XJ|;mįVHKzGߩYLRDM#}*/!D|+}>6B>JB}Պ|Ò>FB#!QKů2~V=A? OS/J Q_"~"OEL|-!WG@qRߔG"5hRF r塚Z~لBaW)Ǐ%T })M~Ar)XQIuxHaч# u|.E!?.&B?ķ*b}eVT JB4K|hml+|M) ،-`/:ߨKJ:daZ.Kg_7I?fspcl}].m}KUnGY#ެ&IwZaf<"6W*>F|!ɒjч_}ߞJb41'ϔl/ DyV>%~ RߩϮ $ݭ鄨$Ңw_XF_($gч{KzB3L| чX}TZBؿn?=BUZ.5hooR~ |ϬF4BN|"O; B;w_KzF/MBhx36> {|'}AIVy"?$}TG$}L JE?F|"oI1~~Bҧ-Iy)>>M5~?CRE>﫼{~bч_sUB0D;?i|:>_|"~ +r~Dң*MFҿ-(3Vc*%D]>?F|=oΏ(O"Bgq~o7P9wG&1.(PT -jz|Q 1.(Vy%"IXa*Eԟ]0FB ߬Ho)*SpN>;"/ď ~;w\0Zb DDĢ_K]LUy!?%DZ U>K㇉ qɳ ZB_椂J>qk.!_,S5WIZC^B]4)u!x'V07>W~ʗ.&~*!+ $V QwF>kUUgPZrIm*_Oч69w֐Ւ5>@!.P>ߨ[_ziTiK/QQvIWل)I|%!ⳋjB%Vy Ǣ&~" pM^KX*۴~ +B ~bOg$~! CW"~]Uy7FS-ϵW+.5>tKQy=!wDҭ}!ϐTH'iߤHg}:3BAQIUtE'~"`ѧyy DR?+HVN(mį$4>bi_tp^m'Y?Cy#'S1}?rB;E?ي84_ n!DwIEZBJIvo ^$^>C|"/{/D -wXp-}, ?L{7!2ǜApi/ v?s9ywo7ܺI:g5;ر~$=y/֞^ͮ-;oݲmTcUUqcH]Rk쎝oݲcg.;yk֖jlg25i ?vyndd|umvdq@@ko`U5Uc$=td]zӎVP,U 3͇0Zڶmknٱ9:,VuK.a.F2Sdp8#D$"NnE[ϣ]F~I!E!U=c:ddu(D}N0Ht^KmkMߜvvPOJ 5bKhnhI4vT)\$ywV!NEkFq8fDYb<zř5ےjD˝<:>#={U]Zww Hu,NHvmU+%;kǺt'㫺:t$zm=]Ы X-:П?<<jHgckT+ ^`B5%ۻ]:]=K'$A:+XO;)LO&C]S?ԓ=h0gH#ԇ+w Ý_sc0*xTڙ?2P5+Ao#:98aGȱ~xPN fmEO:uʍkQ܈1Ѯe(u 4 ߐ"c = ^ C"Nz;z=_xy՘aVdd =,{Б-+ں`[d:ܛ Ssi⌦Zg7VTӛðǑıT lAOѰCuQձ]A+uycy5.EL&B45ua|#sQ-d[҇hkk@e1-slf"whC=] jel y]蘖DTit7EF=f\I fL <>΀E#KF`qTW@H_w$Q!膍W2:X)':;Ztg2\y3jmIh$~ܜ締k3|`wG3Lajqew@3"]ּ2,qxt8FR7F{-yE֬j Iz ])spLS\[Mv:ߕL:}W2݄l`@ƕda=#f9 | ]]5P2#ٝzr16us(::}@2~w}ήG135]'y[4ct2*ƺ q,sϰQ;3r'of`:i6%|זCNV :$=8qiPX0,kGXBV={@e,?x ZɘMRwp(5kǬ Z&x4wl 1oCz͆wQ#egxiE:ad?dƿ;}|t . J# )zfz\~EY0Ur$(]> 9oH:ҷjMhr1Gb<$="W5pi.g>sL&\}<'%,(G{$q 5无0:!BaO`2cE"h+%#ɵxd/qmPr >48z?su]\թ й\]CݽNtpGL83ɡ!WQwz˲r$Б;vy?SL,w&Cr8}EѾ =\ue #Wd&et:,qn(3ؕ,3caj!(цaz>_zHc>DTn$W< z9}bY`H.Om;vny!}^t·8hͽɝE5պl5?Exp =3T\f:Nqjl<[sՒ~Nm]ez0PA,4%//\9#K~% ͪN@65<[l#J J|\9k+~g GQO/Ӄ݋D}3=?\z]ta@LJڤwj,&8Yx~oKH&VU>pRY?/fU0*O-\l=0i^kK.07e&!3Ä&Sy]wsfdv 7Ik<5xx@cG?9~]<3n6檍%Oėթ[dy]^3iO56U}浦ʅ_GL%_՞V?^Bk|.~D88-^&d=j[U2`fzrtpέ_b`..PevWHS-&[hdqvNh~A< s6vqC-Yn7xemPHWz7k SMF&{3LLnuw=WWe1!ӄNܾ񭴺~L&MPܳm0 |XdȌ2n_4'eLQCM5}:5FO1SNjJg5{4W:V#}ưy7ؓDKĚx7դ<5rjT/d6RSXYy!GjmWݯU\zK&箃m 4V#`[pCw[ߵ y6MFJ7}T].EAwMWe__H]ϵK*bXr N:j}IZ7|L/\>Z@cөZjLYV' 2^c5g,tM],|1aޓN Rn_MDÍ0u4_0Cjf݆555ޣ8c8smt-syfk:h{i_6gC;_mR8s~ֶ_ְݮK2 )yM1LbX)xL&/T}voEz7?5#桖1OW\|^:7V}wQ{*w xg(".$}7A1x17)o QS<~`PM'Dod*#4k6}/_G|-WIU_JUW4G匈r>C|\ĢQ_e}HbTM{|n#D6~%6qnl+ Q /Xψ KK-L?s[vE/#~b+oYF[mʷ[|Ư(7"~Kmty 7 I>L|U-tm чmWʷw:"D ч}įUTsE߮x!w}^OBÛ訤c#q{I&>B͖*o)?񿍀TIOi_JX/u^D=Ʉ9OU;?%*/#DrB?IlB?JB迀j97!ͤ-1K_HXq)G|+!'~ ~=!_IFͤjmQiW}$IqB7JzEQ?D|7}͒ުJB}%Jߡ3{I_&Hzq_{%}Ӣ#DxKzP奄TjHAIÿ_OXGU@$D?jɿOP a7¿OK*^(}Y)b}jyI_TjB fч/IWTr>ŒZF+ _濩Ƿ%}GSf_I߳wG>q]~ #+bkM?I< ?_|"ΟL9~F|"}I#"T^NKg)b~5GT^GhokI#Go H 1=J>֒?S7Y?jBD:ϒzB}W/P.$~!uM߿%Py3!1bч'oQ\7T>/o'U~ ߤf Zqa1kl>A"G.чԾ'> :~3 ƾm"Ǻ <'~(ȌQ?SF4B"2֡F>Pǧ,Ģ*WEt5oGO##_CW~/'#u*kCaNd1?w~s>\IKZvB!0P?DWKBg"ˉNz~mv}$R[Ӷډo or/@ Ŋmvˆ įv_7){& D Q 7&iKK;3Qf|!i+ !jEZDFTy#!ʿ;D}&BUVެ'(IB$~4㠤稼wYt9L|-!E|%~!_{_AKJEI#בB~h1$K%=Ӣ?C1I7|6!wJ|"T^E6~&G|"W&~  {9sQW_KzB›=tmC}lZIWy"M-(뉟M M*%D(}u?g%Us Ѿo%~b? BwߪUwIzG&Xc"Sy"eyՄ>hag"~-!?x.I#lj_'I<~ N%%?~yI߶/Uj%}YՄ_EL| !|!$}ݢ_% __!7,k",eZ3J1q}O -}K1? T'D2EaI?Vy%!$>1U(O$LՄJEF|b-EKKpT?Xfy(|QIS"B[G#e1_JIR2Bԯ9EDrBϒ_s>w>6v7>[ER>?e8/~k|?|h|δf8Ͽ:B]FˈoPOB?!ȿXZmeOt~%QlBJI=}C|"o{%]:B$]mчWAtEk"D&oQNIU}%K~kUJsM>_kZ.}0ߧ-c@Ґʧ;o] J͢Cė*MzIT^KwT-}?F|b3\ҍ*o!D|oч-2m_ܛtGOT'}o%kчw>>M3T>}{, PgJzk ?&7k;$=C@$Is|}oX{}T)op22IgL0ol/JW}B-JPf~񍄘_M|":/"D6D"hoVgh$I?A{Yaė:wW>ے?o~R1~~+(>ZB>nG$N%D?TIZ5I2O c]¥֏F>WWUA^?H<B&8C~ B9os6WU^C9E>sy}>/H5~ď<2HGDNB/FKIv{S@ϯDТ~M|'7g[HzTkQ߄įs cxEP^7HѿH_Cao/QӢoBaįVҷjEBվM/e{ Xf5^olS !~"}&v^Φ~OJ,|M7^E*_O])Э!җc8[@S>O$3oQ=4ʈB)'~? \儨 DlyT_Is1GUF_qXjGOڟױz3|& ,_O|!ϱ&7ϱ>7;tk<-$D[H"Bn~hm8~}>5k hO&D_ETŸScGU^FrB"D?[ƾ9?ݤ9ߜZMksK-zEZ_ŶYi}d8Ͽ&Bv[ Ke/#}N9q~g_u*o%D儨}ķ)b2KJ|=!ZREOs@R7">!IfK"~!aw)^F% ! k-_A^K`, &!G߷>x~_+~4uR7*W~O?Fc[76^sێno'w'_kK[ooXUuEeص9c[٩;v(%u;(GKFx(6ȴāpZCJ\cy*-6g)p5rY xh4d{DktOtInM;VNS4VU1|nX b}cZDhˎkW!. ׍ vc^$ř5"gD <:+')*Lv9N(>:L]9cֈ̶Ƴj 9;ιƙ88;'7s)ZΌ—?;.Gr pON?sSO]^rz@ݼS?Gd{#4 qy]X=b}hSt<>>m\X f8v0;~yHo[1xSw>=zo= kg x $ ;9D#ǃXw'h%P`Ug4rgġ srqXワ<$kÔzo?66^E9vc K|>`!&ı@N?ÆkiX\zGsɛ̵&Ҭ>cur)jA1⹇{n^؟<< K6O&gоY+3[*5|N ?6|}>E:?whְW܈F^PeX8΋A,N&:#IfSoxw󰋲">_7ɶUraEBX^Qkw(ݽ>KWYge ]GV -CnH gd'[ .gdY[OKX-0Pa{G WPc~ sl]SvזH [Ûut$퉁drw7dFd90dwp?ޗ6q(9Hv_=؟깺..tԬ~uhZU?5?8}<ݛKG'{ĄSoÛr/\@o>gMqO Np5I:dz̖̘zG,b9j60fn(3՝R/cwJaaycf8DqUfKzǟIiFs;J);zP *h|\ҟ<64WN7W>/:[[tv{݃:b5QITTgE1ĉ*z>oϛfE?|E~iRJp=vĞE6Կm'-m\'ݪsݔ7.se#"nmhM^r|\ͷWA>QϤktқN ݾ\kl. ezfq 7o7(>H?pB)a"\uןRV]N ` ?4?0/S>H @Uܧ[3/'cV{ݙ\w8NE1_};3HhYG7̈́Լǻ<Ɲ߭jkN،wlΫylOM:0e]#m~mwit7i56Ɏvp2Yq|3d _)ik聎kd=02/MـT֏ Ƒ˘mq#sN.sXt7BciB>b7Amm 3{)hzp?FF0=B^̥O/`۔u. n㿹b̥7:i!lg=f0>PoOrܟ/Or_jj'9Wm5+ғWZ$7Eھmt~Bei;ߒWN"{,-qs #IOg-u 4~M' %8σZړN 1HOCȌ;wQ[FuddfO fii_#8w4KqG}&_Wx5݊@65<[lAz-_u\+/IJO_3to2I˞~k{I.S6cw +5pFF9C;H{1cM #GL8)ʼ{Eý^m>0s}8c;Kev=(=$v(3r0l(-,Қkڤ}m"'m)F5m)'ɔ(;1gY9Js͌~Xq׀#chL=>,hn7 ( =_}'>nN$/ϵVݬx?9KK-x יG:q%WEꨮOU]*TĦL$}nj3_^gm&*Hlfc}^i bwnŏŻeՠ5wb*.8c`525B;4h]X_T1Om]GVS?涧DPsmd\]ĘL K,8қZPw7Pi3:nk޴vu |-=MufdZbF~HWz$*7׎¡Đ 鉞" xA7ܴ,Xʒp (-&]  i$N\.y6Y{DlFGduP\0̮l#MwUI»t%zWaV\.ګ C AJ5P<`Fm;5f,Yr @^&=9D? 39o+*25;2:Eh夏sjID?H$!]ٯu'L-٤_]ldJ.q1\Hz+FQc5xlyWDdvfx=9-F2҆Z|•upykZe5Ais>y(dz.];:#u'c#q 9HvtݵA=Dgjw`>fl6}]Uޕ]$>2;^Sqi٢;YGRA uok6U{jWMLzo*)ʺgX2%ػ$_/-[ps{Tdfi\-Se ]ʳMVx2m0T}^{Y/|l'kn1j/]=DU϶),f] c- 0f ^-urhg[5SRz1raɥݥW$pHU8OxtԌz ɩGǡ#\H;!O:r@tebt5Oq@xoi6Rj#uSb^[ _9.NCY]R){9LG<%I'xBԅwa=/']q_㕑o$DiчUm$~-o!_|֏FM7~6?qhQ?[;36+R{uw|!ʷ=DwB2}ʫH D\WXⷉUX8P?WLI?cIT$~Zy|Ca/%=*N6D-N|/o!9xj; QAS;xzcO!D'~ [T^NYF̝7_Ao&_Eۈqgzd oϛbsZxSI.!{ ~)!{&>KsT!9į!u!x:QD/x`'}<)X_|Iw|b\y_ >rE^-E*&D|^H>Ȓ?B^ItdEL_*>OW|~X}ė*jR^B%}Ȣ ~"$˫KZ#>{-ufuN-<_O @%%[H![-[A¿w߮=o D>N+`rS&[mɶ{c!ɍ@ $!=C!~!C7wYtm͛7{&~6)|'!L>IϯΟΌ~~?).1CK:>Ǩ}84_&yKrϤ@ץ|Sy~CI E_&r+1> >K|b}"?M\E>_wU}I9ׇ%~1!? *o$IyȢ'~A)gķ(KjBZڷ! ~$o&D>No<waw)&!~!#{Q' Dmm#i|'DYj _G<$c1>#, ^7qE"~ ; |%πU_]oU\O<#}#~V/ǝo#1>쏱ď/ vBT $B_FH|"GwH$Dȿo"ӈߢkC-/pH֤V>'~ 75wYS? GhE*/%%$sUhE/"~"O}2&BKT^Ak Ї%pn* 1>[&4r 6jB:q^%|"!oV\b| ~bTy3$c%M"?v_Lh%B_BO,B_H|!/"Bq6_LB!Z??_q!#m/Vl"8K kINM9 1~;Jo.ῦ&z:O-pC?F;ޓ0I9"B-L7Qy<_$Sqk&fxEC|"K17|!w-3?k<_U7/ÿ_M@*!D_[!%ԾZB)RnP/>.T} ~bI)Y>bBR>B}~^~WJ#ǿ/H /CwJ % %}w7x K}nK2+ė+VQٯ+EBooqm]}ؿy ȾٿO qeogчo ٿC~_DX=jbBo/?HBC)?7&N 1]17:>';CtɏA兊X{)[aTu3> 1~(1>?J|!'>>f5>f'ߕǼq]t'/ 1Gx͟ 窼TprB 9_`s5>LY߰ÇGP7E|oxEpi3Ǵ=P7<< o kNa2`/k6>$Xe+" o~18%QzEL0."C,@+?C38C|!"FkU^Oj_3տTo5o>u?YkTP緰U‹-K"> D4*G}_F| !ڿ:EgY 7"[l/UlҪXakj>]2:Bk-[G(~ 7Cot~+r'#?ܱSb }|):cHoGUa{K Rޫ B}kO,g~ƷDyyW?DdP/f*Hˤt8o+N)*/&}|آģTRHu'a"@{-ÅTy"fmpZE/Q)U@QX'-5Qs,%Q_|$<)/_pᗩ|"1oVF_$_Je| ߥwWIQ3â7s$kN%rE_G< Kyʫ ~xC>쿑ZEڿ $f/$D%@o-22{{^)wsct'>)/TA)[aCė*ga)Sy"רp!~"G/%&D~|ZE>O|!}iK|hpigiꛘN WuU.q'"~_]S*6|~6q=8׫|!;#p4LJ_C=@|"]B?Hb+ omH|"yHʏ- Ї-ù%?Z_ӟEoLʓ} M/ǥMJEFzŭߥS?-?3$7ŸR $,%*/ D"OV?"kHʣ~JiW)!#,sH>1ȫ"(Xdʛ "cǒ,_ASl)mNAϱ7r=@D[}?"E_Lʱ02IəHE'_XGO)*'Kdr>O!~b/k 7}؟A|"C)"PbW*䗬5#TUfY⿉ K3?[|?Ri/;rEk0?E/#sU^J\\lчRidzark}_@|"3wZ)`@ȿEY:)R2)-}_N<|HE Y򅄦­ 񓜎𰿊{k%~_K[LSN|56,eEo!Fբ.r"ۉo D|wHia'/"D|w?x_@[LB}󇟿D'sL'HLy7CMw ]?'Rw,(xHe*c,2g(Ktw1?vHyE;/SHb|t~u ~*o }?LbE~8#~!ljoV9^)j'D^ğ.Nˬ= /Py ;1 Xw(JRnпA͜4ZyWpo#Hoïz OLɄX97x䔩fqmV}o#Zq鿝(H]7ެ M V͹{#%Մ#~ !k|~!)8凉LJc#RnWE_|TU^FrE8<~BʧT^C|2@?eQxćo'^W"y-V|â'IW"_r"_U>Izŭ]Rm%Kۈo_x{U>[,?t}#)8&FƢ_/ߓʫ1}?@$F߉|!(@L|"?~F|!?'~oCR~ȿ_ÿ_ZK3;ͯŎί?Hʧ(r~=//T:^~=**/"D~IS}3ń8yL_,P_No/S~ "$9A{⣊:Aa+W<لh_-6PC"_O9昸7k5SלE*I13Ţ/">J&gʋ2,iik8׿rBo}ߢ3ߙ@nUq5?F>֗~ʯPAߚLTB n{U^JF,BvWvI9_啄ȏ\hG|'~\E._H#D\d_Jퟕwg+T^Ji#~cOB/N<1ՒAѿK2Mn=|EϦ:t|"k[.1tKB_}ؿJE>JWy-!k.Jb|#^s_D< R/"4w w ?WD29RU9?7@]KjEߚ|7b|M"RzNh#܋/"///ѪA^)*/Tsb|J,jg*X΍R^2BHyE_K|"]?y7KfU^Cqt--$oėiV~T^N)Xa]T,%f*E)߰{/#|_fC*&D|P,C(mK¿G_'|JK 'aчOL[xs}ؿR*g-}ù"k1n7b[w8e)_+W-a_ߣw~3wU>U_m)Ya~+O"#"+g}Eߓ_J"~?o?ė*OUXa7OWJyXE'a>?L|"L^#*MXaq*_T^K{4@dׯC釜ljx_]-߿QX[ B7+o\0o{RS=E[1Opi|u\ɑQ*N+稹g[a312sǪP/wL>쏵O [REM/wHJmGG=ɝ(ej$(.$SLsR6?Ŋܨ[9&Ya?J Eܟ`C:D _b5eԾ5_n_~g87-|%senʧ"~uR,_O E_+U^L Їy| S奊<_K$w7JnGKRwz2'.O_ˈG}ܕ*_H+a%qij. ̈́Zf>%Eqk"?K<6SVKNowڠA_KP  PuU^LЇ-.K/%EnL> H/rۈ'^rEي|;$2 ~\i%GSi-*>?]WHSlBW}#~"sQy-!p>Oså4s\)?ɳJyE%~b_gяpQy"}>r>)7LO/"!D^/U}"q}ŴR^:B%R^nч_H/\"^ai"oo_Yyt}(Rިt}( R>aч7_ߛܤJB|̢7?[E[U^C7KEJ||ۤ] ?HyENBF~#鿓[BϻoR~"o?>D?l_^_|̒_Bwi?V)PQ,3gܡrBn>A|a(JO啄Ig+֓ESip_M>"y}|ULu>M|"$+*o%D|9@b>oX$o !wZ~ǒ?c'i| T^@?'+b|R~i,G*R~bBOay}A,B,W›Mfp oi8緢?¢~G rٿ+ߋ~E@|"Gf onH<ߣROÿ?ߠcRb_L/Ql&.*o!fI>'+P~KT}?I[GOY7ۿ U?/lɯkoGٮv'<#ycU>P7Fʹ}K|T؋YRVy !7.@϶_BpyRmX&JdaX (O>H<,_HLE[yf[a&q`>+Vy%B}/&~"_tU^C( ЇrKhpieJV>ЯW_]*7H y25Zx7yNK [oQ"/S.O;a/VQ>Vb/+% a}؏)Gy~\A PK7N'}T~{}ҧ}_d+o}3I9ʛ= 81yO&~>S 1_ zO#~W[*Iy}/ЇHq7ޠW Ys㷋ߨ|O^OdBXH(*/&DB/댼7_JD|!7Ky Vo#{! Y;$CkG%g9pӊ-1۲cǺ5U?ӫ'&w+w۲yʖPW[TFʎ]+Pc6kԎܲyNNՙ3zS 6Pʴ Uھw<6z>֯ A#ђFC[lԲqG,0ZI225i,#WA^:=yu۰U*N"޼kS&5N6u |jUX޺qGD?=s65ٮ^NC?z an{UEgѡ*T,{ !_p#tiNOκ_IIΌCvjXB|ڲrC4e{״ܻn tRt𺘱tIžzh0ۏpuRgۓ8f 3$PӲ;%F'ver˦MTNnQ}:?N~35y&)लTK.2 c+N=l[Idgre}bgEO~lV3p]e}ZxӨAiͰ.se}tL/i{٩?yy][y,?S;,#%~g>;QtTwPw]fw{cWG[oo?n2uEwhCgxDGXq΃mGr:{:9梥fN_#{}}]A^/_ho+}_LftO7}?9` Fڙ7hdy_#ؘbPfZ ;J:}SvH&- vcBxpo<#zxd ';۾5 뇎%xJcƵ\TK}N"}sO4F&XSٝyܾ5(`[fI5+ϫY3h\wŇ fP:{:NO$sP=鈵XjfO;~oHoo%z 4-)aCJEnGc Wg07T"FMG1<#i+G~ptػ{_HMM?L!]1ˮI&p-j|^"9A*OY͏#d 3m8illԏguvw1'4KSwo`f>=]CIFc[w?^`,С)~!6 }#XPpr{G}?r_{Wwg{#OIu!6`찜&іރ}x":@rgL?AM;WIӶ'R2]f = j X;ZR]%շ{bǣ=rSvdVugy#8wuSL}A@/idq2/_HKKV8|yU<Ŵ%c-8W"$F#OY  G Ñ VM3#GyJrwx_B'm_zvhd {O13[eZFZoL,;;`|q._=> _6E%OPz=ŽxSڀyE^J BM(,l ډ#w еPA+;ɕ33%2,|^1II9]tO:`+r/p*}N7渥Al%h2Q^ۺG3mUEƣX{NؑovG_ }5xtU?.ۻ˥*tS[wǀLZu)x2Z;{T+outD'x3C76me3^؋}xFn pg']|NRZk[ګ/%{@)>8@7b}t{W<{Zcm}~As"KFuЩDW{Or:Or{:s23j`f0a#{BxVqCUçC%vAYOQ|IW60\g qZÐW|ŕO( 6df>sS/`1w[uXxf}m`{ܥpnG<ʰA=):[e9;:];xf%{[MAD^Xol|a;mjuz_&W@ R45{p|i]MNxsKPȢ`j (> RPJ瑁n(/UE..LKESG4nBs9'EhgK~shH\xT}%'گ8&NRU'5"KUhxEyqUǣbJ!}}>q:q߀ޮUG;:b}Ᾰ7I(K<=:m?nb% 4T%xb;RyX<;"uG;g:mLynq4z8yY5|M.ѹ<MU퉵];(F+/uiU.5. 5\M8!/8X3,YAMw%yUȩ)oL%q3ybp;Їr]wo6w| /?ޟTn2{T|1_v#݃Y`>O?vL~s y b >N|Ǽt0"ߍԲp5=29!VOdk0浕g+Jʲ:^gjsOPMd88ssZ)N8 J_49y1d}h~ ">p6=*눏v)5S?ԿGqũcN6sɖ%/(N7G!ߎצ%4-/$,XqĘϤ듖BɿW7[u"9+Ot oh3%/Ֆkg'"^vz|Awfs`Guy=}@7My EicmU[ f=&h,ENTK5ĬQy:I-jeiuZ:ɗu+NOʲZ V 8k%j6M.jZ2P?/ԿKZ .ϋﲬ%@.?%GMҲ|vg ).J/ X]?eA~%Q@'~ϐnk!!_܈jĀ4eӪrdmuZ0X+ɧ$Y8ˣ)õ<2g𯴜~4 K chcq9|ߖ;]0`CkufALeԬNSK|6-YNAP6Cq= 呾[Ke.꽐i DI~WB'(by.~;痃E+/ӷZƦNJo>PxAħd[$텰6H5u4_*fì 8Ib,s7c}IޥMQ9>6ngg=qC 5$KV<'u _eiuZ1ȫr &>dx¬ h.Vz{ {,+L<`^xGЄ0.޷<>^Aʺ﫵 nϛꬭ֨:'yZXwu(+.|oy$n:y5HrϲdKE)uoM8~N։aF}ѵ:WSz^{Jxi89 ֓JLfìiMU\vϳ5kYKA>h7$KVyf~^/*o bYP/jZjݔ,YZ] ciquoUƞư쾛>zy?'R>ǴHױ.p.Z$7[G˓"1Eϛzz{yI Uۜ,` ㍓䵖UVyk_em\%A$YCK\b6~؟9͊JϺ9&tO^'#)z?hϖ8): ECPNero}6'oL?mõ3M@lGo'b*J;DO{?+a3O~I}Kg[ɟF%śc/8+b/gDw}>1bbmoi|5Q _ZY19ɾE+c=bhپC~%Ч-{\uWR\qWb>6d^H@;JOU"&n]+ȹLexˤZ>#v񟁍q[{eZ}kp 7T ՅFD(|ĉOT?%3L'ؤLgdͿ5qSws^q];V{}dž&Uk~חj#6Ơ|MQ݊D@Kbqv4O SWcEC0y$[froUY-+X oNC^WV}wӗ%`^E+ H@D՘+fn %vJkFũ5vAV/\f젓[*HNJ+^Z`oű*Yo3MewA]^E}rN2O fqUfDTHUQ56cf1!{N]YLEsr>3 kVE" E)8VZ"TUܿc2s;fS"؟_Z46HLl3Yƣ@Ԑn+qmaa˵2D[:XțyC4dcsӶ3hrO3/1"JUC>'% ۿL=wYϲ0 (᪨>)ZxzTMRʴZOqS)U}A@&B4WeKEGӊGY&`F=aq3Y[i2#3ʁUzK,-db+EXhG&VƚU{Svt۬-\ױ ܵe5d0&\5Q/1"l+XW[ܵmf3d5,90(=)h}ⅳL~\g{y©묄_y"c4)4EsջUZIYgd{H+ʞ[snֽU~$L$U%F\.,cH<1fEtGs!2b*ܱ +5r>U4d iD(ٰG}薮eic.'ݻ?[Q}lwmӟJotD˻${#z(ǛU˿;m.1?غeǺ K*y? jx߯hU[ݮI1,ݱI0*7QDG-ߦˏSϻ&~!OtJ;&(q[& L&?Uqy֩O%9{I3LO%D|!Iׇ%*Ρ17qeJHIMXH| o !U>W'WہG B|⣊os|gJyE7?Gqo1 ĪI៉y}DbŕԿaU_ˉ_ ae>"~6n'}sf_Da3+%Ɨ*k{>pR 7sZ"/&~""/rE%Aq9ϴuʛ ѾX>#~obe?@+ -so!\?#|M|=!y+|>!j>#~bYQRBp>Q~_)j ЇR a}'_/*_/V~y}T}ؿI7TotR:=>Bʛs7?S7YV3%F߬J|)!e;sH]WެM|\[?G{-<罤?o"$~"O>$#*_Ep> >&cWD~U^@$q~b̧|Z3ʛ|U}i)>I]g?և-3&D>'3O/HS~7sXQP%_wI+ ?w;y%g+b|8|_BBE͜U)_kʟ߷"_C'T^K-~  }fX|>!Q~>א}MBnjYx/"D?;ޣu_?WkR~ȏ_IEHoI!;A-Lү#tyB/&D|\$_Jh,K~~>xco~޴5nkjǺ.9@o_>` ?H2B!)rB-+ɿN[ _k_ zHi87?}y7IY?_K]I|"] c5*_HZʫ->0'I7@-MLӿ/rGד*B"W+%^JzB27¿Ky Mȿ,_MQbǴ}o 9{7|!MR>bчo&~"ίL$f{85{K>L{) B}wZxN_AE*{_KG~!W*/!D_Bo}; oFNs#RUTP٢% ɢ? Meq?x_b|E' 7Oao򩄈Ͽ%Hi󤔧,%hgB2B/"Bq67?KV'%2+.$fBb&_IRB"Wkߠ{=[ u}siə|EZV9*/ D~m!~2!?+[S?F*/#R.;8]/'Sy* D|vyùMh7sER.Ňw_HׇKD 3G[a">{Twi>Lj_K9fB?,k&BY/W̉OOq5<R~X[UP^!O啄^)-GlB/">a9)9:(_uR)w?OZa*Nw׫|!Bg*b~1R^ BH }b+ Hyg^/{o!쿒jB?^-cVq/u3)Wy" ZQ~5{uXX7Kyb)@B6¿[_B.*o"ЇT~"7¿ߤL_UBJ6?آ>H E,!>oo!˴e ~!!I)6i/%Do>4W,+H3JBv˵>1< /ߠE)wSʗ,.:ޛ`n>ϗȿBWh %_M#}M^_=|Gy߸V9BB o٪5.Hvė:]1p b~ uϟ?3. h_@~MbB??ʛѸ7¿GoRl&$1b|Y}+y~Eɿ _?Gʓ}񍄰_~#?I-!DRZ]"aj#)-"瀑Ocù#41&G\EߦmR*o$D|K~%OR|!`>"~\.S }ﴴo#=M%?YWyܻgp:簔*U~pG<ߢG/V1)W{\ʵ}ؿ:}ר:@@3|? 78ǿKyʧ(s%Rbч_/ˤ|Y3?0JWBѢ^I|bURnTy=!oZ>H\BEO%"^giHc(ߤ"ǻwc)oU Bf)?Iy 1o'RK{T^GЇ?W?f}~`R>fBχ߇-o&cԿ+[~snq)理|Jˢ?M|bmRnWy%!3;s|As ,yB e翢o6<֍/\b}i{|{ʛE?M~Ʉ?U0/Sy1!{ė8'~! ՊH'_L|3!~B E/s`_fjBω_K_ohrnïBO&}LSJyXeo_dG&\~/'uX۟}u8?W"*o$D|S}+KoR?_7" Ї',SM’ot*P󇜈\t{t#rα~.Ŏ#cEr9}؟L|"49T^BK]9}؟F|_trfPW}؟A|"]_ˑ96~/ }/!AGd>)#P9ģ`̌ *_E Ї-_E|Zx9%gʧ(r~Z gE_HǷ鋜"d嬷~X/"~6!g1U7su iVy5a(9M*9G{r%D~.#X/'Uяt~BgSr֨:@/]_1\Z~1QYfɟ-R|:!k-Qjv);U^DЇ.gKq /S]΅Rv0s=}ԿZE>~^l/kqgO~ ByTz.7Iοʛ9y"όgb|]A|Tof+* D_IW9&D_XCG%D~#~"sr ῜cТ^MB窼)Ya/%k-KI:o!Uo&)#o&~"GܬB-R>`ч"[ܢea>5N EEߚӻ£FB{-XiV~?**1)_lj%)b~O[aS+֐[-|+\*#6*b}h3Rn/\]*_Hhs;oPr>+N3/ZQoR\C`_C_$Z(>-ݖ`KkHU)_WLŨפ΢_'O,R~B?ߔk*HWU-^\}RW+oEOUI>Rjq_XI| 5oe|0;kb9)?BdE G)R4B?*o}' q~gEa/yoԾ2B;X_Sx'@O<81D\>{"OWS*/!D}RBN$_ƫ\Y _3/7GJgRAX>#~"IsM;G' ЇQi4۾%4.?Wk=[ e#c:BBOzt>,ɘɝbBoJ>OOgy*/Uė+\Y3험ζ"3_sBB=>X-~) ?ˢ@e"BĿҾE/\n!Q5cF+ Q xφ'}H兊X_X段"g"$VK@䗴9wE_HǷ\YS.sR}_F|e-RUȟ>7\Z|_gI MAyWC-6]lR&'e4wT>ErE#P/B"?.rȢ_X_KW܋\FBg~>%wʗ". Ї~pn a?no3/ilV~r$SJʧ"~]R[a įGJʋѾ+aR?˽N%t$eؿ4;*Ǥ<ע_HO^)jWՖ./_Ey<@׫V' / %o|"!޿.ߠ6J5*w_E奄?蛵/#D BMRnRy%!_orEيd-zҿKy%~۵ ϻLy7S 1>#}*Fy[/Tǜ_U^C @?H|")SFBh>͊{'ܪKaS+*vHC=aKy+$ O&D~}zI/KyXńȯ_BUK _F )/ߔ>w-)W-5oKk Ѿ|WuhwȢK|=!*,ߗ*_Jh}#j2B-cXǟS.'D"%o(?[o-V|7*&?E|γ|6 O6sq[6_c6޹eǎuk6('~W?OL~y]W\eޕ-)(VVmר;]e󎝮3ig]7bm2:,bi,߫}y ƙ=߼knm2 HD0=x-7lܑn;/|LL fHU׭NA+ܺm*{g8@8AL6ڛARɰL01\rN?o25֯n?O L,Bw鷊|6<φd0=:ٺp|))/.f,GC;P NcӐVOo2g,xN9s[[jƽS?}1[[VnhYs;iݙw5T!q$N 5eeC9Q69lMOj!8-ϮgdghM6YbS!óEt5.zv}v}v=E>ݮZYZu2''C]K_!e%=+Z]di}{&vODy zij;F g<)|/+l8Y?8;6Yz3zӣm6C hf׉Nٽ?ޱ@ MɁzG{_~U܎ؾxإxEx=mٿH<=~7CgrDGXqѳz7ws:{9fEW3xOܯj j1iǁX&Г^/UXo34z?VsA΍r3oИÝ{HU9 >䶙4/Ah_wëޚY\2p/]}k$}KdHţ;㽝]fѵno>Nyb*hjs `

tƎ}{GZ04eؼ4hgexL((XNǫޠfz+AW=*T~,% z7Ape?v-tӤxB :=%= h_XU}#~$m~ptgko4ˑddgIz~pW#ۻٕ`YܿcYMfzbi4d m`W94Mn*u04LZM:aNHxQ2MIJLs!8=-6wT;rG7Q3rhokƣ;o?7;vG7EtuF>Y Kr{ǃw5h3-sfzWy*YR}mڥ{p"Wz<ΓoN3|">/:Y[췖* LH4ӉwWbާp5=69&kתA)(g%eYZVNMʲ:CZTS(\w7ax?̡dʄN $Íy~^ Y@f.-;¾~M8>+눛ww6F{J">T7^N8وOM$[Iûl`y:I qL[9adc0L>MSGpY?~7ELk>4R|"u+qf3YHf͉S2 0CN"תyI|0~Ĥ LƎ !Oƙ =׌B)J3Z=%eR3&4Uj=eZMȧ找B卒T[iC.T_q6F#p %(1O,P,E%qG){X87d {qعyDjy/ܨFl6Opb4)zT[j>oϛOxp)nJfEq&9*/j-y)^eiuZ1X ﹧d\"[gAAKD?Op=̅5'kMklAFa_^TV%YEAXbiRv I+O6/Lr_WbN ad/bfj0 |g}0;}:`&Cku~/f'e 0q& y ݝ! ԀL GFCJPo=wkF'ug~Rb:23׹ƃ YmB) A KckCRv F GKVt=YOP-{mdq<1sK.}g?~A:8Ӷ}<[K^0i-uR_SRej*J^ji9ݤ/jZ2djZ2d92q'ߙ~2BwfdS7<]s\9oߧ9ײ ۜh?j!h uzW~3_rteTnFOi3%V'uzURx67ySOXOziu#FQnjdp~^W?ʖdmu-Z&eYZݤV 6;)YY-u欭nQK8%YNqd-d#ўC2Ws4߾?&.8N5Ggyebty⊿ʋ30zk0ew/zY|a㖣;uenw~{ت4&ڬG:eɕy>kԒ*\'ҧ`4ctoU83h4{`/\2N'7M͢BrZ:OsycJ̫?u(֌=UA;:o\)Xam_Kc-o% AƸԛ!M#0 ;YfܬT !B 0WZ}3nQar>wol'b]+?ĨPRXg{J_bb)M~kxr2`ڻ;c@3?|I8M xCZ).u訐.?*)M6[J[z&t*Q>y#&$ThaLg$9]9}mE4]ظL;d-F|W5htN1<`નN[&_ onyYAQ-I~'Ө+ss0+5xĜ/gEkˬc@ l #JLzdSv*5 j&F]$  m $ Dl&\ZO>צs&Ot8zR^ WW˟UF6eNjw9&~!Ot"[L Ї8ݪ$Ʉo2S+mjQTҟA)㸗CSIdB%~*!ĢD&5}_B|b9A+ѾY_FldlsTH9Ha}PZsry D'>XIc.D7|6!hŢ8[DBxB7jR BgI>kR>OKzBB%F_J/$/'W*!K&4_xGH!GFo?M/N2ǻYg.Crȿ3_IPVBypCE;ߦxg' ]QGr]= mS|[Uެ&(S")QME_L{.%hߵ"/#PM/$~!'Z_L\B迄 Ie7B/Vl"_JW\q-鿚uп Ho&Ds $ϯX&)7|"֟nwϛ/Tz3*A V)ÿ[&D.*!D|_C{}^ |P/R\E[-QWIЇOX_CԾB o8219)_PdBrE@(E?Jʋ2mY/[x2[h|*opo|"Οߐ}>"g)-)Xa^g)U^Av>o,g߳!rXߏ`ThLhxNt D}SOɢJt"3).}E_9sC2@e6{DU8~Ul֯K)~@[G,@S"BgKcʛEM**AoRiч?Sâ_J…Po"ƷE|"֧-8]s!Jq巹+I/ y_?IBEń }5c[O&C թ|LS#¾> H樼3;@Xpnf~%>_G|"\:4_5:#ТU\@Xp*oPgvMd_jD~)'/<8G2ׅV|= \* 2'֨+Ja d* uRb}_O|"6_OұyM䟩cʗ?C,o 7}YJٮ_a~>m"4x:OE"~SO9.Q2h>U _ƿR9ޓ`>?胿7|5zl"폅\oч~dN߇Uy !Xa(񥊸bw1/IIs:5s_xC$x_OyKȾٟNMkQu^}o_r.8>T+,2([ I_Ѝ*ɿ/RY{WYx[5>S }?137+}k.m _7ߦ4OsRo x._EtEww;Nr"}eXy/5hS@X?LJBÛGoU _1 b| 7s'7LJB/|p9O=O?I[Sj?#¾?ӢA|"?+*!D|>O 綯ć&^|"ע_%Ie5)P:BRmчo))[y sO>R6mi?ߥ[iOwgEr𗨼q07?VyǷIE"9d'}^ ʫ<3R~fBC~G -/I!_ oWgh o<w|N >"E>GT^A'-u^ }H a}+Ms|-84eMȯÿX⿉'- ͯE6Q4E/%),j EΕ2B奄_q@z> ~"] *ks /1,8>&Z}cIP/||T㝿+eʫ u~5ϾODki-oѧ5Å1/$4B SHG")~ ~/r..Uy5!+.Rk9,_¨w!![N|!kPJ_D&~Я-&+\_?<4.Py7C_oo+BB=H8TrOSq,o93qgY "(ǚN> -nua:Ņd_*o uŊؿ5ez o&YQ"e"ÿm'~?O {@#/C7-p,rRW1)mmo~!;<ΫC_O$D?+_xp7 =OU,Rެ /b|_HC_8?G_Lhxslʛ㮶դb|'cȯ '2|[T^@?Ʉd?/OQ \2B[/WER^BK{9_a@|"_%F/V𫥼բ7xD_#u*_GVM}Fo#D|oԿ,g| )*H9>쿛BE6Sy !o/uKʫ1} @?H||o?} os$M8~|ekopT}w%wXi~vk__rʧ(r~)}ؿBŨR"Bח<`ч/_LHp{T^Bh7&_#T/M|.*/'D~}c}M_l!JE?I_Uȟoe?|m|g}|Uw~cR~HEQϤ<"B" ?Ekc9o] %+};-|{/?WA$1 T<*ux X%o}wf/S 1?I?JB|>]3\¿{wyr'"Ji~dE6o&!⻟"B7.ʋ R.<{ȢqHD{|!{~>_8Y'p*B?U#G LjI;.*'eJ)ϱ/"D]mXD_ zO"D^(}ؿr">KCTU^EL+-W"5jh뤼AKyE@|"?o&o&!fߛܬbB-RlfK߷ZyE[>O"D|+}||E7 儈|D|ܢ?B|%!Q>??5ihmRnW$B3R>kчۉ/PJO%ϒ|$9-R򙄈mG_$>Jiя2mo|!{,-  }3\;*NM Yd~P %Hg'}}rmT>_Za! ~a.O'D".W~KB^U过ѢO|5!}>>QkǥMJEF|"-E鄨PO<_L'x?_F3 Bz+ rKhG?P/\lҟ~9|!'b93,_H|"t>,rRI_D/'D_If,&D+,se} o g?T>e}د#~*![/e۱i?s,< E?ߢ%__c9 /V9_Y:BĿ1@/įe?s _ˉOkB 2sZ- Ѿ}p ViV9A&O!&7K٪iȯ-R[a+dE_0_ !kxyR.P\B}%~t}pn'D~]LBB){U@D>>K"BR>]6\¿VmsHe*Doaчˈ/ -t}p9GT>E$ң鄈?Ϣ{A^aѧcùEu}o[G_<;.*O"D\)>_E|"s|˹^3f9+:>꿎B,?e8׿| @쿾LJyE_F|"_ܢOyg*F)7_LWZQ/%Do_@ds_&wߪ|E<O|!"@?` ٿM*%+6}a įT%K*}_F~!&9!~2![OUoʋ _BhmK /#aWrB?@>=??褾 ~$?G>q'}緓x~dcR~Oq[טwmٱcݚ*ʉ+'&w+w۲y%rhUٱkjlFڱsޕ[6ک:vFkbm2:,bi,߫}yLS]z![ojٸ#v_-$fr3 ɟP:} HU8Gxf-f vsZ7hSAJK9N*@ԉD&[ §6YN g%q>Ŝf:bMZ71Of|:Js: 9 εi >)T-[[VnhYy5;>V8xlz}z,~zc[>cקkcIf-=(ZOF_:gg.mp]2ـej3Ȅx s:/fC۳ggny#1\4[1l88YsϐY3`7if]_Ɯd[F)0|[_zgH=ٳYu3q]fs^l, im9<-n?n#rbg㽝q5]G{:]۟>};g}HJ6w'6-;'Apö2_Ǽ-rj/}-]b5ͱ_S؅I-mmJYFO1ݛ'=FNHt_|9 ;SɒŰ~qL_oہ9C9BE-ϓx'ߜfDs}^t³o-y3@NԟH~/1zAݧh.'"I;s{,w8g-NT>5 j:>o&Y?zy^kj+V{P[Z5WN,QKgYUK+s=6kg%K%*sԒA~/9ɒ jɔ9*jZ*Z,YZ R{rV)>$Ь}."If ,2|Lp2'痐>_~V~7g' 'z[H~|"y }JlvR [Or"سe i3@~^g?P;nҽlL+N$Q˷8X8rB򔯗,7QISEez Tn]㛇/OT^v2 逾>ϤVs|m @Oz4+Wܦ߅Y[xy>IYVyd9;q=,=h:g/^9 Y Wi3$eew]#D6_Y[ "{^V%|Ʋ YP-|adiA-,%wCVy.J,.VKy_,YZmTK4&KV%Z,YZר~MY[] dr{=dj~L?Y[mq:%Y^Uq],YZ2Yʯѻ*Yi5kWlbĮN,_ݫ5ɒU$ﵧd#x+ͬ\B)@?I}Zw+49H+T5pH$4Zo2́WTUE~7ȇJ\h3zMbۭzgU&ImUQIc2hC[~% AӢښa&U%S/_FUBKؘX_MgLO*U&!5*JY"FmH UbIC[k&[{ *2P+,M,6{PW>i_T"j:@g!g_"z&~\q`O;\n)JRi&X 5R:ܟWVF&5՗H?Kӫ4Kp8<ڝ\Ftu7=m`z16_ÎUzi˞]wIR#F{( |q3V] L&?Uqy? B?Mǽ;5ſO&Q"49w I^E P(SyaHf~*+}Մls5~ZWC Bįb%ůI^M"W/eE%~k qXMkl5| !wq>7Z_CRjZB24~y>s㷂zBo%Uoj-5 RL[ש|!6@Y_FFjrBo#4~#|F|=!ⷝy)T>)eE"~:yR.PzB}ؿRzwS6N:о"*}? 8S7䣎w-?H| 7s!K ;eпrBw_8&49vt_xw.# ¿^8+&Bwew?cwGu4@#_%J)p|Ex<B5OVs\QM>>W ,Z)>Iy+Ϸ H6!w:E_M_,*)?C7|Wr)+T71@BB/$~"*)7| !{wYߍ7fN}Zx迖b儰F)o&o&7~L:BoPx6)oWfB-o&p-n'=ͼ៞WfnwoT^s1 1~?!N@理|Zy*}ig(Mx g #߶7c'!ps'?>7rb>!Ǹ}=x?o8xɿ_IoT7a屮}=ȏG|sʏWx/> ȟlju_̛ob}wKѾ?"&Bq6?ABjz?A|Ņ~(D|ģH?xF\q- ~!GAq&~33$-dkXї|ؿ:s /T:]>x'Å櫼P74bd_bhB_ ZQ$u~ X MQy5!;9@X&WCN|!3}/ GS)3?s\o&)QPQ5ƿR9}WIZdEsITd1OsN/$DzI|fL ShFF>[;~*? ] ?銺dMR1>W_}S}- _GE|bٗ]JB?_e}ؿي8'c%[s n+Q)|)!+E/%~*?5&孄}fԾՄ_ u| !ˉ_A|1IuY7 oM xXy ?'Wo_$].߇CdB̏%~xw%~=9hVG/$~>!'~21̈́_B EߛR^fjBˉ_C)fI㗉﫤ܨBBReч7?]?3>^#uL% }劸~g{7I-}3 MRnV"B-EB[Lo1 z 1%8~|a?fLO AwaO#Ho~L)6bO?ϭ*ti)YxG gx#~!ȿI"~-/$^_THQǧz%X?IyL ߟ)~#/ߨ|=!E ?>uėb|J_竼G~z?.~~I8NzdEI [M+ c6޹eǎuk6wc=|_޻z;mټweHyEEeص5nFع}-wtTI;oR 6P_!8:;7mز}S鶳hq'tej0XFʯ8nuzR'pa뷫U8LݼkS&s15Dԯ\cJZvaAͬ;10 (g30>C"'|wk -k06ػ)2PΧva&CY ) v6yUW٨}ޱOcM8}b:1p.NOf TӓA3)}3d$P8BS闏r:çX~gPvÃ&}7ѽ)Kga=#bQ?/Ռ_dqsmȏXLn񭃆,)J;`ڲĺ 7eCϙL+=9ʵɴ~#!wm ӅU3<ݠ/Nz]<$ޕ} +ڟoN%ܓ۴m3oAbPE+] y bZyN-#NfH}=GcFp&2*)Ҫ#иdUo㧉WGg&l_ Y@&ǰ/ gߣh'Sѧ$c{9و[Ce|ިL)iu!a!=ֻV *pg=%ν7> %^&%*HkX}"׌|+w/۞m])<)|si`:>o&Y?[a_ng8wgysJ򐟲y;^<4}aYk$/~~y|ObRLS5 ?Ǐ'Ŕ<{LhD?.c=!D? j0$?Ud9g~CߏfQ3~$I8\{RybA#?a :Sqw8O/{Ku$#iu榽 Q7)vøB޴p.}e o>/vA!qw8YI̼-q˷O0IK=W${@l5~5}$흏ܴ9C|LL2=g1vE;{q_g h^^>M׹Nw~Ȱ_/ac=ξ~pwTi~a$ +11t}SX"U6dPKJ #2{{]F#^'q=#a@o.bEU'R޼+Iu]K,sH˫2{WdybWE14]Ӎ0RM{w-һ#:  bo1~'ֵT Q}d 3_L [QQhDgG :{:R_}]]]U7k3ɺsV jq}&tqMBlRjStN&V/JH8͸olܿ_0VKk.u*U}mn JU2Jot: FfF+vv0&LD:58u#`y ޵?~8tP{ۡDK1nw植;D f57P=R՞T:vq&jMo$/Ʉ26Ns&/̭'VV8^asP|Uw{-njl\E5gqIeѹ x? sM:yد1qXGc訑nٸ55{,~9mNJtѣʥ)z1sKݷD- 0'fVw=e՞7g-˝lD^$Iml_mZ>ݲ㖪FrS*0%ձRm@hojHxqiDBz nCE:m$l$Q F Ӫ #Qh HXf cbzհ&vO-@:ۗJJ#d7G/Z7$];:*dRP]UNl]M^7U'i=Vey#&NLQQ\3o9o'(+=t>&m$Ɏ9V5CiXKbr0Sm`D7ꥦ٥nh=5VN<ʫk=*Rcbwq8FJ~l>q/!}7s7TGUT%ajЌ VӧՄ3+Ю;xG3B;,c 9aeu ;̔,Qa> +n@a|g0 b*7q8yj\&9'O z-@y}}=Gb1Y$$;X-OK*8V|tՖU`TG76vImڻ-mm91Z)JgI *K({}ݻ?ދت1o[jOwiiD]wurR@4_W!e%nkyE]X7\$uˎuy;Wԩ1~z'5zc{l@cˀկ"ΔQILqܻh8Vщ;#K-ߦnsTI^VsR_lчO#~b7|!qf>G-;ńTrl O%Dzs ǯ/T;L5Djaيɾ|7|Ks㷄/R>G'Iyy D,%>XILJgKڢ7Z_@V@͍*_D̷̓Z_+S7Uy3!&@Bqߠ37"6&Kg D)c]#~!|'y'D7- _g8pʗ}abגNm Fsi>,[G~zBW>O'?.#~!ǼS ?RY' (~faڣh_w>\q37^VBO>o (~[ a::6BZ:'GT"q\bB /!4fBK ėBėB%W*!_MhxN{9s7~,<ҟG^IEjߍ/S\x)S*Bk_Mh$ow Ipxx3f_$fT*o-Rnч7_뷷JE?և[,3vҟMSCN<@?^OS˜_Gʏ-PI+ ?C>x?ˇ_|1!;,7X1)8/!K3wTLt>Ҿf¿*?Z` #DI\Ņ?wI?wKEE{U)_o{THRK3u)T2B7?G$-=7wULh7y+1|['Uhw,u?:x~{~4eLy̻MI.1?Qp/ߏc|4s%8߿;OS5};g(eR B;+1{ZB$^GY O'>3ߏIńߨU,<b͊)&~-!+n"OkQI3!;<\~ ⅎ;>Ba]E:?"  }7d} %~.!wq|s`#o$įP7s-< P?4D)I9!;?ߢ?u47(/smhGI !A6ŝ_¿b/PN䦜 '|7!4@ϲn+(?/&J'&||%S>C ¹G^P|NPbOJhxOu02q^ %|"!ŷ?_9*7H/5O&D%~bfިbB//Q $OHR،s5Jٮ򩊸~'럐-v+FU'Ǣy*/R{ė()ģ~B/Uy!{>U~T^M0@_D|"?{\y86t}#ZQp*_DLj_L'e[_m? g!{U>bN- FBM?o&DJHU6BX^1p1Kb~'yz1wXQ!G\kчGqLʕ*KhrE$Rd*~ҿ/NRB:K P~$ -/"~:.m~e:OpRrW|bTy3Jʇ,jyQkU^AzXaW*b5:k'Nׇ͹~b~yc>{o!~9!UJE孄ٿ~EBjEM];U}ĿǏZO.-D{֏N dBcRVBOS93rʋQiGn%X;_&uc)wR>gчw8#_ù'D~|'!"~2$"B$>+ַ}_5OW1f_Y׈*D|]7U> )7/S$rg%}ؿ9s}/\g* O|b#TW-g=>."4yzA[ aP Y @BZfɯ5’J$ b|UU?f_}2oQy9!â_fO*&}񵊼>|!!}}n2/*3OHyRQEYR+9}bB*yKiB^BWFK U?G*/SV3K|"濊##U>Pﰴ1<ˢG?_G( M|=Q#,"+Ȣ"Uq#ٗ5Xx7; /3,?mf?GfuP8ߢ?Oo-?kpw"~!D~NGSF )~tK KKǗp%,?\v'4=<[yCwV|o)c1<_\0~e,WZa>Sqmڶ /RËU>P?Eo1thzByKȿeRUDX-m"~BIT ޷?ߨ4OsLo+6(F7svɹCEȿ}3$E,BO|!/ Bq6_DB&Z??_q!_J|!c/Vl"6B?גB i9NfBˈJos{_.)=*Hn)WYF壊_ )}*/%DJ9nч>g)berD}?b3wxᯕ?Y?O Tϗj>{3i!B)/R,Bؿ^+,"?/R^/ j_!`p׫|6߬n$f)Zү&?^wLIM*F{[a& q9y| !毛aGoE q||'4w[xnү$Dx迟'Dyq":þp|_Oʃ*_F/} W\ ,yR~7?[>bEI+ _HEIlŅdW}4\V=Y^#NچR#TE_*Vi?"N៥F"7)bU>Gro%M$5ITFB߈h>I&E?\v)2r?ҿ̏[?WWwW1[&?SLS9#廑*>F|1a_d*/"}k"}؟A<>4?GdN.O4@,p(*2E&MWSXWB _i⫨j u}bͱ@/z)sG:DJY`ч󈟩8Ϸ"}"T^F_HǯHþpfW++:EZE$&/ 2FYQ dEe_o)d_c;ࣸg+₍,B #ѫllAH  K†8v8Nq{oTg|3Y. |ηs=̝;̽K<#_g6>'~"Z/I3 Q?fLo&g)f>/mZ?,äNI,iWZ9 s GiV@V3įO{~O*_y+@ǟ/HA'+C&u<8iM}E Eԟ):c&a8yH?xoʗb~&~"dՄX_#Uԫ &^7*Ϣ6BO7?xZڗh~+t}դ $hۈ/'^3W(?ޤ'|2!nY8?Ѥ'd3-dg(Q>Ť9D=5Bf6ߥzE_z񍊼ä;U=d>ܿ !%~Xb}|׬ܸlv wId޻m?IׯgҋU>/2}b ?/1e*Iyi>̒?Ϗ"W_K}Ir\+L_IB7}w?Q }?$\*UDMQH&}Es Ѿo!A3¿դ? fһ-*bݤw| !}%%.~/S2F| *.ūI*ʤϪzTOP*gK<3\*?FB%HcBU'<;c\o'JEM|Rǧ}bI?#XpߨQǿ㋴ϏMʗ(.u [?~~J_L|BE!.1AH:KN#~ oưD2ү~,|Ri(aOSLZ/oч)Wj&XH:U 8aч$Պ5ddvk aJ D5̈́›y"1x+?ZI$>%~"/Im_#a%+vBoFyow)|Q oRD3k]s knl1}5L孄oʛh~ˬ+U"BWZQ8|aR? WR[ w~Z?͢M1*C7EfKtR8|W+^xv#Z#S w& K"?WL<]c>/"Fÿ}ʯPV} A1&:LTy !P> XG_?̵T¿}<0Au^ 'MYS ɤ}ؿi쟲lcgfP!Zo&n!x7\vU[o"LzǓ~]Eyd)&=M?$=դZaiOVMzgb}I/3VLS>IA|"/&x'忈.(2=7BcV_`i_ߪ|/6*/'DĤ[aW(N&/O&}%^)ݯ ~"dJ^jB7\Uė>x%ޤYXKx=uo-<쿑,(&~o5 T_L ~dy]xȯ D;{_g;~JB̿$~"oȵgb|0q-Qߤ?NbBį%^>EzMʗ&}£?C 1|y<Mʧ*bGǗLE}I_s2m_5,5k>n7UD&}ۢ$Yq9E9.Tr$[qAƗ}O=*?#Z ҿRq/c~kO"aS"0W*O"~G'gi򉄈?_NK&= EIQ,BؗZ_Q3oN)~?|/K7+4:"/ukh _bW+}ZZqUPhX>E7cx($).ЇQw?R~/-47:;(6sz1tPl }/#~"]?V\cxEˉVbsq u*d̉I/$i$~"į Sq5דf(QB߬}Wc ϶?_lU>?rB_直Jtu"' aߴU >_DtE\J6+^ل%Ԓ?o!쯴"~.[L_'=LT]g7שRCf-[iG눟;kU^M1TaчT+nDlB+6;]MѿFÿm/P\J ~9!k'~b ՟ˋwgdX.(nmU*JWY;_by d5k,<_G~YzKa;mU^a|!ņ;bRE?m 7BcO%ko*7\-*O*Nw31KhҀ &#*aI7q2BoDi*D vS|&}OQM/W|O ~"OpO$>' DO69})W+Tgb{zITBB/~IwX3_?ˢ "~mΫпI˿4*B5I'4<^Ɋ&Ң_@TBؿפT> MzE#>IE&CŤ?K,K"+,o⯩|"d{M^mkULbG%~:WRBI_/SlIoRB/sMzEDZŭd&Ub}+wYpJB"Mzw"IZB(C[|1Bcʷ+/&~5!Oߪ&}V 1~&B}6? DkPbWh|_]br"ؿpTx揉pdw9SW*OLEJT$I>TO~~NIҢO"Fq3LQy!gr>OOH-U7+!REQ"14Ϣ_H/J֩|3!_REߢNXR򝄨9_oɟO…<2 @Zu2S%KU^HSY˖[a)S|ԭi˒*I7z%m}_A,E)YB_"a5MȾJ֩|1!쯍ЇuģqBbs#1l"EQW_K璭*BZO…ڟv} ^b%{T^3n|BIE?Y1e %{U>e#}K|^?TrJP7qVY~3z!D|'X_O,ҟL2K?ey/?)?~=&| !I}%~bgҍ*NЇ-O'p%U E'M&Ry^lc,<?Vo򂼾zd{W'Mz+eLzʓDaчO"~bϓMzg">OT9LKK /s[L[啊{! /&~9!{ +[^jUJ{IÿFq +Lzʷ"^O•Q ž_GB̿7~ ~;!~Yk'-gmڿ8U=h;U>I_ä[aO&Dˤw[x进J!ſdp%QyR2~|>Iaҟh?ߡ|q䓆Aۤo})Z?r'`gLg"ϚM>9y< 1|zE?XEX_|ɤZߗ_HKbѧy-'D~p^ DkOs^|"ƕ ROWDKZVDI|Ф|!GFآ?&^OL}vIψ_ܤ_|!&ڢ$~Z+>>V?|![o /$}HF3&B_Bv*LwBR_0{ 1>!ZN[I(-RyX'A ̗jT^_Keӥ`׬Jg|:!Y:Ǣ3RDHM+Uy!_V*4>'Aq!'1ԨE:?f>o$~jd_M_R^և%*kYߗJZa S a\K.W4B~*5k}_N|߬JWZx$:?"KWC*V:k5sqF/ D2sqA>HBE\KtWtIYa + 1>n%;Tͤ}促MdݢN;ɿJw)t{ u}Pz*^{I{-B$B%~"1jBljI g"~>I|"IQy!I_~>C|#!gMʛI_oV\B`"%KW"~fi_}?|dw/'D|IhWdO}'+">d|I?Vy!}1ML[a (n%6TC|"Τ?}}xO)BgO8儈?IQ_*B?A_W~&~o3H5z8}?ZE쿘G*Kex>@KLFBFwXaM8jEy-$5ńIT_j}?-d2~ _NjoiVҟ@HZB]d/"Kbi/!}r%gsJH䗊|w1fo}u׮TH:ѯH=mkwov`m6kjk,*cTeמ5qNkWXmnN}!v p-׬{ug2u~Be\|Hϭ_ɣ@Pp!.AYw\uۮ08ٶ-`uU939lv=s?m{ZE{;"(Kigv3r+ZurVVy#CD3Aj*`~Whֵ[[7b(iu`zVht-esw>l:K92֑.Gd28TmnX+=uܹFYѾqm0P3̾\*1k!K%mk5&A_ʡBPsp9A410? ȳy|bϘ@l[T8.U6bD/dKdw_rux4P)do3b";YQYf;lˢa7oSGox>2<2'n_ٺ}f)~Lop#V@j#?a<\py]ҵ;o_fJs)¹Ny_l|75-!a{(Q@:nu\}tP=]iՉӑGU?$9G~D~ NP/1xD*w.2u?50ø=+;;Cz3Ɣxj0?iLW`GaiQ5NDeLS]Gkr.Eq?wFW<7vN!<Yjwr=.~ 6N SA$ޓ LȞ| %ΣA*q-c`>t3bʕ!LĨƚ!+2Ԣ`!bQ5UJ91F^|+knP ӧB19f p `eY(2{qWGB[ 62 miū1ƙ8l!A=p#܀%7:c,כ# Do͑p{%uhl\qGO_pzVqwoW 1n⛏vPq' z+R mlMaBs(`p݅*i2 f]/J{vBUڲͣyn .륶u".M驅} ?=v+7ek= Ǹ}B Ju}Y:fv+̹#h7QfCeWüz~U4Kξ)tCr<^ޣYlɞ޾=hqgGOWޕ҆VGeC7K;zOG_kƨz Dtri`*uwg`KPy14]Q9#zѝr2^ ¼1,F|l c_Ybw| _IVoBsEFWi}`(r|ϺȵOXy,:Cg>  kJc|8]P= @Uuxwd{=p#۵m;\IH{CЫ(F%Q^QLj:;9sN:'L>'Ϙ۫ܽO H弜;2HOvFmH5F@ N^/=˳j(ylF.ODV圃CT!sh+'!ݜo΅kweZk+=RO=@=/J!0B_- C>o-3u vyqnW9<^5V9+o \@g_O}\CG߶M ue7Xzja!kA3`8;8s58#qAsg] Sog}#TGv1}_TF .PO!kakȪ#yLJChѧHoF0>Es陦!MAlݻl♄g$j*{{Q椯]ڝt_PlKF +ŘS@vjQekeKKh ,-)Q9Q2d]\uOId>m7-;NjҀg7{ ku & zZܢluZ zZץSVNuZVn"KtQq%kA jW\_nk׬UQ'|y89bΣeaתs 5zz}:h?FSV;a'sڑhZL:ZH:@x8Z5eW#6-D*UwGQtIGs}`jS}PLj`)$xP?ԿS#ҏ08:{r+\d; c`Z < ρp]оIgU#qAsIO)ǝpT<~Af}f(M3a3}/ewψtԦjs%>w8 +pw2.Ou? .K!WV?=28(F$-{m_G 'A V?տO g օȧizNˋ/  w_`!c'dGGETH?b/}4\q:5ћ}o;~So@<UO\4䈂nyLfT;,.ߥ%w5;ӕ݌Ȉ7BJxiƍ6JΘ ТRl:t@ CB5q&PnqЋ=&wj<=xΎ`cF9Ab F l,VKÓ+&墧֭dU8p<Ƭdv9Q mUz6g_܈k50"l(_s^> rz nMmcpJdOdu^$ Zcp2\4p d5,é&#,!p;wrP")Iom,R76̯O6,vxdPe>xL5)G{Yg^銩Om2:N%w5o%'Fd٢Fs2pK=5e熊)> WOv\1`V ƺ뷮ܓpM;71睜"Auz\C93̓!Fbz{M64b۸%eסoٲCY1pcT:73-T'N`G}r^=_<0n v` "GUDJnvl7x>e KJO^[m s™uI=.13:dI0%S:|uVT~1ޤ6̙ahzZ:m 긇&gΞn_}3WtE IG'g`R>9@~l)qwIf*{+Mr\+[KZeAEϝ&ꐡҖU.^^׽?#bGY5ճ_һLXZz)NkHuֺcˌ&d.(/yRE[`:]CbOɎƾS|- s} {@_%ӺHs@;e4XD߀Yw'L}w:AH3Ǵ8t9K>&ߗX7I\ U&-ÿQOU$~b ,C>j"_`#WO|3!K|zW¿}פ%L?_qIc%1mo\KQX}M_-ė|OR<ʫkA(눯&뉟EBusH s FyK]ovh?PqN BUk?dޭu]7E'_:ik8M礟)O8">!\qu{A>i/c?ŤR/T^gGO#~"n3U> ^cчg?GOY/ DEKȿgtʗ¿;MzEE2E_1n I!"~jQ\۽x>y&}IRME=HTE?aһT^KNjчw_n""~">/%5}>)b'~>?ЇZ%~=!LG' oRB}mķ¿ϘY >K;?gi?!> %'/\0/?y[ʣ߂p,p_- >¿+ 7*iP7ʏS _rB׿0xʫѿH E~">D|!߿{e_M/=fpEw(&ɾ*EԏiS{FA}/_ZE\cqiXA}؏?WqOX~1P[<~bol4k5~=~"ObYxwo"]lM?w3!w[_A6T $D'Kj*XP`KS,i/wwXPU8!IcfL-~5Sd"N׭E}د!kb>Vg_G3&?&D|4+l< ~3!cI_1FB1s[i ćYŮJqD\ZT>PߘY3ZaEԿjZ!D,ۢk'} 36|.!׬Ec,}Ȥ.$DwFÿ.kT̈́(&S B ~9>zж@o~9h.- ;XoV~'8[?X+ʛ̔hʧ"n#Pen~3Q?O ~!H|l2s*6ӈGߙg"~ 6+ '7sLߪK|!=ķ ob/|Or2ؽ&ݧ EB;i?E'+"ĿR?^WҤ?' {q Dx MzB&ޢ_I"BLz^俘S"'~!{IoQrB9B&=B I,C^<sߤYaW(&-I7\7*R >LLEISlBGME9X7*o D|¤OYa7*#mѧy'D|~X~Τ[x Y_ɿ2 wV}?>rB/?Ya S}jH/\8'~H맢I*CCQ¤K,ȿzEBh ~;c,?&Ejߢ}j?<j-k)߄T23>'Eee?_GϊʕǺ<'~~SQe1?Ey9?7קEӉ$Ӣ*Lߩ򙄈jg)b}!1BoMt}WTKbBTߢ9į%~DBzE\I웲5Xxo&D|6Pߊ̵p\a:O􅢅*Tド}xdu"D6u]̢KQ'K-?+~)?-P?fVԪI>õӢW*V}V+ZKE,jEXޢO+jS\EϦEoR\LMmQBobhEo!~b+jo%mB[,GO WtN\IFB]2iݤ_fL:kU|8_c)'LE_Z 7cwaW(b} יtʫa_ˢ'~{&v0B;,7SaUQnPBE/&dч_B̤*o%D4`чįQ#tB Q?}’?] *?7QYSӕqXXO&DSU>evTQp7};uR$ORy!,3dҟL.7b{MX?=fB, E1Ad[Jy*TDBI=ߤ{̱3 LϢ%~"^h},BϋU2+">Ԥ-e7*6J'8] nчWPQ*^hW>쿆e>yIWBLzE_OZud~:FK֓[,-?eڿ_d1{/'&}B[B' a&}̢?@tE^|Ф|6!CaK>FC/s&}V啊|}~aG%v??gT^MI?GU?Eg /_"^m}٤|!淯Dÿ@q) ¿oR[&}G孄o#>kPפ|+!{}K[o!Hgc߳O~m'|!OJB=*^j%>IoM+ʧ{1c} rN(ME?k|O&EMh?G_,77*_3!R'kOs^'/߮W(N1|LѾc5GY?*E_E&%T>PqAĢ (6b>՟p!S|mfY"JLOSEMSy !}G<w2>ůpNۋq"}/P\A0iWf[W)'->.rm DTMOV&B>WF#/ }Ө6~?_ \N[qZLu 5_a)/HK\4|" /~S a_4|!)BOBſ$.UUJ|3 u/6E@\ŗؤͬ,o}VtR:?W+-3g}oVBV5eos_oz_N@L⡿ڷo1coL_ߦJB'+]ݤ+k7\ذӤ}w%{E'yjQyb{M:hGLךt}Eu'?.\*_H("~C&u|"_NY+ a?e"DGWB|p[TJ(ro:AI}*Hk)>#~&F-ON+EJ$vog?uC-Կ+,mj%뗉p/3PtW*Ni&̢O'~*!&=K_4%}IE?aҝ*>E${8#sIw}ؿے-P1??95>7¿F#,K,4f!+Ǿ#x۟,sTdѤ7[xYenOަ}ù׈ Bσ盂TC%!~*rm^ⓊO~IVy-! ~6!A ak粷Q>fQ#/R/%DoO&i5*@s&}Ѣ},Ip| !_"~*!٤|!I_#Tk}  ) a&}[s LEEEϾK-&{g_F'k~|[Ʒȯ De`| Z_2~ B_#21ITB}Gȿ_NIX_դߌ8>;1>JaҿTH3BE|bo_,kWJ}/.PK1<1JKa4BGLqk*Nw}ؿ8>?N_m2ώWJ_N@$EIݙ(¿ ;oٿ)ė¿ORx닄 +U^EH?Pt ~U"7!6 !-ae},k1RGSKIZ`ч:ci; 3%07|fM@M:%-.g o/!Fo)!ڧR>oRP3"~PKp^ -+py}VXKw>2Vx+kXZ~ǹv]}͎mm7>кkmxc hlӶvmֶnjƢ2FUvY錄F}偵;v;Ϭ:LY e~.\krw\uۮ08;M2 Q\ Zi[ .ڼ!\hNm{gݚoq;^9D_5YPb{CYE9Uo_vh`6S PjjA*`FWhx0ACE}Ͱ?8ɵoKfnDrF`i!v(YO0޺vkF_Jvظ-*3[ka\yg05l&g]2mCy?{Cþ2mPXKenL?S+zq[mׯj;tȘalԳ/Gy+ϣMGԈКu>U9>^<}}]g93uyW YC=Fl/Y.LOeFsM瑺yLF16iҟG }+ճpɁzO~➎C+QUk:N;z=}UR}DiOA#7R31xD*vQՕ#h1':;SA1] *hO;\3`5QYwJu {x3刚٥&w5>e]0m'wwM:|s^SA$ޓ LpB@hPJ\*Ik᠛BʕA h?5x?Tx/rQ`{dY YuQD?c sGFQȰ1|d06~$n /T^t6Q7Ȏd!~;bMQU?q*!E+*!D#Rb2YP}CEӕOu t 4=z~Ht+xC?p쌄Nr*^f[d/!; /Sd_^[} ՙ19ws{0h7e+͞Mv1˫pj;ohhB⦒"Tק²e䐻 V`t@SA ҐKp9Y 4N;Sܯ'zNG&ġ`GdE19J8\y_/Z(ϼT膈j7#snrɼA 2Q}=My}欛6POTWwg(wJ{S7-(@4ᣘ7<ɭМ6~2W9`W‹td=lʜ{m@1ZC۹e%`=>s̬1T^nhٌ62X;S'BWu9q&?SEO:F&N{OD+r#>xΑ.}*rFKq6%\d!e2{ Eo4QK V47?̰peGK!UBZلmsy=fDb`4Ǟm \WleR3geW2d??K{Pui 'yԳz`~n׿/h-hKK5Zj=baO[-Y[+x?IK9^?WyY!% vZ٨8Aa=L$W?տ/+jI< :~^/jIp~^_1"ep+(l2͵Ȏ穙|w=%1隫 ѷòljCUC̼Z2,L:ȡNz(e*|6cKx3}Bmy;}n6^JNNO(*E? Z2t**Qp~![,#I[TK:L v(|Ia{%SP2:T/_6^!Aʹ gG&S$Oq*V­G9 _SZijIp~ިO+jR- nϛdV%yy=`UNҩ@!ˑ dNC:8ڻeuoc pÒ.Uc4r%g~eXU,%OZp?j½Y+Mh3PeԪ[C~KrS6r{"[ktig{f.- 2f?Qqf:hu@YiYVoSN#0`tћ5t,-{ۗ表V~&oX3.أl"8&[Y޹Rpwl|+vE`uN滄+u[ (:{DʿFyƬ8 3k@{t建_l1ϲM<34/fλ#1:w*f/cu;ĕ$y>?{Yo49oK:3 'ԃ!7!M'79[GdTެdM1^|[|ķׄMʤ&d`LyxV-EsCExaYYJ}_`+u̷fz3]Mr`}yu}.[l3s)meҷj՞s3Kjgb'[QaNn. ~dP/bzrme}vZRW{Rggղ9{fr0~c?WsJ)rg@!M˯Db%g?mzwWJծ\#^gFWӿؗv[źdGW&m\@w Nv$$/dmK]6C/TW5c|ta>dtu׭،s,oR{;z 5>s,;N'WqSZ&3b{YkHz*Zˣ3F~"IU,2.yΟBKpc}7fδk'D>ZVfF׏}?cKwڼ[:25<6׸IJn.I_Qu3CIFy/wu"Ǹvb˿i]ǎe_K_@Zax\[k_^oYy|\N &_NʉUhyMЇ'0FTB$>X'g|6!I_t ('_HfXo!j"_`#WO|3!K|ŕl4|!kЇMʗ%L?_[䤟*Qsos%8}5D__NKG=4"D%~Kl#'~!7_CM)!-%^V)/uM!ȣ}|BFBe_;+NW)u{"vEoPUNRڤ}KNk?>!~!Z+#y'!]>oda?ߩ<P#O$D_pv?D@|!3QgBY#BFB#I(."_LS/U\A!~%!o!~&ҿ̈́пIķ"o'0=Ѥ8O./d I)&ڢ﨟O%~"O{IT EbIO'~3L<*C,;LS l#;_DˤU}ؿےb-!D|=e^SrB0BGJd%&L-(K#aeO&}y$(¿יtyoR]T>@yfƽ${'񕄘_EE?ݎ$D?D,E{o DK|"'~1!?@RVk 01>#&}£?J #~+!OǧgM'?E|9I_Sy">*BI_#~"|ޤ/|6! EK<7jsq}-äo|"SƂo3>%-T6*o%DǤ[aįQD3*L~>fl)??-<ڤQy"?~"?OVAפߩ0(c,;g*֒[kI_|b79[?Ϥ?''DP&E^Ť|1!"ay}*d /\}XRi WDBXdXIBu)OWIK,?~"9kg}?H}dإ*O(q8f+Ƣ#mZu)̤*_A}ٟ^hG_IӶ¤2 2_E[0X u}DF-T~ٿ(S}?mmԾSuw"E~Ғ? 畯WM{jWK5QI|?!XE!zŃTRwF~%⛩|a%iK⺋P싈?xgRb|4kr>_J| ̢7+,$~!_m_c?77>Yxù8q&gb-d iRk-J)TfmWTBm$!vvZx$Jg(oƂ*!D__ jyƽ}zq]sD~!grwPǗ\OƎ?QⓊZ?ڡۤuuz};FlBzB@>q}&k&hQ7BO"% K _'_NMzy%~O;riZ>c9;4BDdɤ/1|mOUL]3?75};Մ &=I3 Q?O4)}i"d>?7T 1=ägZx&%gߨ3wJ/&DEBs_J\&=O=&̢?Մht[w^lч{_GyIYxG Q?//=/@/?ҿ PunėuB9 7+q<ߪ~9?߮<}]Wb{7iIe*JޫͷM!ʗ~H<'#')ܝ~loT^E 31jBψEABg}߯$ 'PoSyK8#"'\޴Rs'z3^=v ڵy#ރ}>WoD?gVpٽן\_/\+O>OV@=Jx|k ֵ[[7%ml\<5Kv~ԵFYD+gqУ'lQWyCxs֯`GV3ׯܺ<(5tβxY{>nt۞F`Mx6c+6F0"#)bIlؗҹ, }8坹W\äv|g !2 \> 缑sGQ'bP,n n΢A؇șgBy/(^By”g|wM&F]T;GWy|PDeN=)4QygD)8F9餮^Mz:(z:$}NP$}NTIΪyJg\KeTY7eŮۖj)xrdPP8?A(d#ۋa; M Nj1:HWaFB, qr򕲁nЋa1~lO~gxj>˻ca{Vz:r;KCY迬<9<[ -!fM#[g6O‚̇d>;׆Ca{VV.ؼzwG?-k9ڬm8Ky9;_EW\/ƹW7]8-cآ|xCe"}O.dq?vpu; WF@ Q*th'=yZ w.jۅ';^k4|^e u78H ̻v~qV?-s#_RO'dluC2aҸ9!<]Plqy_׆!^Ưo[#Wzj}A{Ϥ5ֵg(7#^ʑKdT~8޿"}QYdzcIY53rߗܛ?(sQ?@o.f |9xpOa9yIW4\r|Fo5'91R\aÿWfl;_sp52Y^#3Qm,*52߅[c%j.5&.5&Ly°dޅ{KFHd]IƜW^۞x\\:W /g]V}7V"'}%+ 88Ħ+wW_JlRl+?%O*9~ogJ.o\K QX:ޱ|9!J\x_쎽΅<}%cUI??J|s}%ͤ}%Ẁ +{ + 'I+?r͌aWb~yS +Hs}%_s.g}s}%2 J\x_ ۗ +_\x_ ?Т;W~s}%@߅\x_Ipb~edpWb᡿ӹcr'}%b;J|ұ)N#k}%W7MNa+~J/r+ux~\^<9W"EvQz\6|9!O")x񾁌0%}l'+">eÕ7wEsov>"VBؿ'BGZ=d^'_E~a>g ՄssrB0j'> ^CS kGߚ ė;xo@7w}ITy!  ~o%~!?~P5;$ gw /|WoWGkE_$9֣Jc=Z;OyZt0#~O[ڱ.|;Lfu`4rP$gw(l"JמW߼~??jH.`'its>!A۞Ksr9!>k" WdwB2x2E ɭ 6}7V"'doSȿ Bwy>|܉>!|9!+'mRl'$J'?; ɫf9 -}W 8%xB BG 8OH^R\pj!k%>8OH?P >dBo"α ~.7vB2¿6:G ~S 6} /ܗ_;˯T%p5I6z¯_H't' _iN 1A}U8BGN9dЋ ~'XXg &D2鱎r g)ܳ=J?ٸ٢?U' qҧ(>G)A}&~b/7?1 /c|# ҏz_do^-Oo$ ,|~ 'w}qVNx+mX'D\6O&D|>Τ7;5DE۝)"T|Iÿ'?USINe">lk-y~*̈́ϧ?_#?IC|y™g "NsWb}yg/?_"~!L|"!׈L ~!IEmB;/U\A#~%!OjMC7BGoUN?!OF"__8SE^I/T篈/#Q? g 7'y},'(Vu_'}pPل~OAB#a'*_=!7¿w7Bo7+j|Ͽ_Ja+bJ;㸧BUAN1 [7I?Nm"qOEqٗ4Z Sl4e"mi"?'P=AEqf|vO8LB_ g)bFw" (_9M!'/Ul%)į%ޔ=AzEr`sA$̈́PZq?%E'$+>.#YX_@gj#axGtq Έ>7ߤ-@oS>7[_L*#/?]z'|)!wi?'\=|9!o i}3}=!8#5?UeS|o#S &Ⓨ/WbU^KB|!VgmBB;oRv'}pG$J)bBMRB'8:'8 |BuOk$D4ע*L:Xa?Syޢo&!砥|t=7ߠal> ??''wܤ,Ɋ"k>'}Bty=DOD7(5TOFMķ( "o'D?&Bo_;Q$S\ۿ{>7'qO1v卄^^aчDfB_y>!9KHؗp^}_i??_C{- _HH'#7\OAGy*t'a Np0\:N~[~Fa T#O[6'Az\b]Ͽ0al͜:2N!|$;N>xƝo$γ9 <9t$OjST8gckzpIQjmGl?wSH=lpf;4bʕ!LzXyTxgR>]ss=f2tbB~ĞWar]ԢyMQ?ŕ>2WA\5c4(S ϞN)R'XsttTgOlҀV s8stб`CD͞v4txOO=o-o{0GP++rs>v\/>OȢ=b 6ܖC{cq;1nOwF9i52ŋHs>~"tI9e;~s~^ YD gߣ NOL':O^GHQ1g[?W%'|TЭ{ާC/x.g Zv2w=Mt_㡁ҹ4?z&ⲵi֞q2ٺ30[OV8o *9^+l4ٓQzp64]y-?>Er'lk2ӴsL|Y M*3 Q銷 ^.*~fhK2|Z ~Vm?W1u:,!}$Q3!a9?O|'^+ zZp3C= kepwFƑtQ*; zQ{2**B'p,`#llFҭ#ͦqҢF:{C^A0t~5 gF]hwNK+Ltjc^3n-A]UT͹Cm;kLˡQ-gH5|m*3}-Epmgm#j5'fѷU[\b᮶j㜵^;oɵj=$׭sˌr ꓽ' Мɹg͙>3@&nf+d/_[&~â?>鑼^4H[Ka2(}vٲ.fJ6=ijO\TWW譶sMn7dwƕ1ʍ#Z3f1ѝ4?nPF%zxݽ]SG;UR--׽MO>צ>\]D+ljD#}^fӹ D^V25  "\ {rZqgsD n5ӻL>ִQ3xH^UztGco 7:ƢKh~\lHu O%wzR+.l r딬' a|i|g}_Rf`p~kHA$Nco )9eїӺe/֐,_B<ErD)x֐[CoEN[C<#~ !2;w9Y'~8JՄ(Y>O ~"jUHTwݦѩy7OS>ߚ2rBO5>rF啄h1ϢkSjck Q}؟M<,%RW*_FiЇFKyT |1JYB|Rgf>_NE:& ~!![IbBʤ/!iA}BRԾNB&BFq=ٗ6|!gc>oo[6m;ߚhw|!g~EP&~"垐~W|WEķ(n"x+7}Eum&BP֠. >)}و*_@9bҀE%~Vn' o#DnЇcķ)%&=k>}Rkx~ [4ȷ&ɩq3&C|~k/D> 5IN{E*'֤{Mω~k ?և,3"ҷ5%~kLz֤)>S[^iҫ&ʤOZaI ?&B/%~㿝ΤUql҇opop7R%+D7Yx/#)X_HTVR /!{H-;_E&H!nKCN}/g=!Q/a)nq|GI_m/\3/QowoOQo;__rҧ<~}q<V:oS[o&|7 >:EoH6͊o6qw){/v2ފ$W+[5CW*TGf^8~q>5~NB/DK' E dK_w¿|;' ~O 1>~I_8B +U)[_~E|=!a~ܷ %c_̈́R*n#<eP/vh~tߚh# #W$ϏDxk࡟t{7{s/q2q~yv ʛCu =VCOqWbZOWJ EZ߸oYO#7;ۺu9oro y3+K7ߨ]/o%ٮ [_dUKF|#_n/!Dۈ_)ݷ|9!=B$YAC*EKopQkHs-Q}o!DwoVB~+FP?@6v_%!ƗQW#jBoÿ.">R&Q5b_I}?BדI;@R !{-wo ~%~Y)p:~_N`N$"T^oCmW)+׷x'֋>N|"_'@"Mo?}($NjB [q}'L}I[?#oEA'qn?q|ʷ">Ї,_T\K%&c^0e"Oq7Q/voy!%W:os/%~beN%"N_o| .z%񵄈W?[3RW;M1>Ƥ[koTO_gѧy- D|o&3˿4?@ї ?)s2Jvޡ)N[d|Ф/Y;O*VSӤw|&!]&}&~V;!j'oч?|E׿}|+M>@|V;MQ>0Xylاmz@_ֆ#~)!ܤO|7>OS-'D%>X,Lp7֡He*O*ٿEN 'z}ٿk>S>ZEoٿb}.񍊼>I?R"B#aGO-ϵ&RFIQyRwI6} U?&V3QЇ_M?XpEYXJ|?i6'w__;1(+P:BK-įWFi*os2ߪ({2Yaaw*&g SBq٢E_틮_xoȢO W{_G&|?Ƨ=fG$}c'c,OyuP痢qk3—#k2BoMʕ"Cm~PyoY4N4"35[axof?PoQ5ӝVcւE5*IOѬ}WCO8| %;t:P?M|"G7ԣc&lч~ԧE}#~"ߤA"aRok%Sd˜;XnS9f<%k'Ciчۈ7iǙtѾ7}ؿل &=IsQ?OЇ'YCS-gTe)/HgEwtʧ(YsLzE&>8LGՄtE!~"?3*%D??B_`ɟ>Koh~_f+T>E&=dчWq{IVy!UPCj^zBƤ7YkKΤU@y}>oɿ7Q a7+?j*_e{[>U&CiU)D9{3Ik\߇M'"~>BE^|Ԥ|!?fg,0U^Kd>%gDI_Ty3!עHk/}>Ŋ^Ue|ͤZa/'7 iM_A([TX}R}Wc ~ ! kkw"_K I'΋ -oJIGҟddߘՎnN5_rE_I2ZOVL3|:ڗxE_틮W)bl"*##a?aɟ_ HsqC| ~ۣMo #d>tR8"q/&&x)sD)TW4AS &f}7xD~.=ȿjEIO$ يXJM&~b37e\៩t>F|d?iѧp- m_ܻh_wVS Yg[ai:>sU>!Zq&ٯ'~"oB(">} d߬*o$M&ͷ#f9~Y9>-Bm_)[w(~t|q{ry YSZ9Z#ު򩄨Z_+Zc*܀_G|"ؕMN Ƈ6_g!*_Ls3Kq}(}s uTަhݢۈߠym%g|'ۨo'DU߫ Q~֢;אk,אߵ_CⓊ?aR݀?7tEI 5H|!ҤU>}S>zB-7¿ǚtʛ ߭6+.!n'~!{+אO4*_KLzŭӈNN+ ]όЇϲ.柣\)15}IBtʧWYa^/4E_>쿈x^Ԥ|!erKhJP2m?<*Ho0M*PS7A>쿉ɊX?I٤|!-&ߢo%׸xRm&=E9j=!#- 6=*_H(BR?tTP0AmF#&}LX|ԤOXacٞdɤoU>U'I}銴o>d^;zS&}Ѣ?M|"_}Ƥϩ9KWfῬפ|Sf7,<2'˘N< >!+ <_T>85+ 1?)?38'sod&ω8W%A|!K_LT›rKzMʗw&£O  ~+!/vk2E?q[H ›Y޳yأBIW,BJ.EQ?ЇY/W&Bs`@~qʔ?7X~Ɓ8>\i'ab,1Jk5?uXocMB|m#O\[ʷqT a2K|˜'~"/s-.1_s(v7)q #KSy !گ/I  w1KM[&D0}俔}XXh3&%Yai~H4i1Ї7)r3uXń6BzFW* _fتoK>Jf_;w*k7J_Ckt-JUҿ2~0Oe[yKCpe?'!~2!77Iǖ tg9>ФZ}OU͋Lzgb||IK뛗r7,B_N|A`U&F ax}zWbp?-x>O7o0M*BD6v_IFn}Tʯ#viч_1EaO0!GwxC=![+{"e?><=x,'t;o迟#P7[No[q*_0K*OMEu~_6*MJ>Ւ?>H8||is 1~q8g'*=~dEI?Vy5!G&Ӣ?&~"ogb|)͎?̤_|!ƿGÿ_@q)k¿B?&V孄5O}[(Cߙo%D>B`ɟ' ʷ}[3;~Nj_%ډ%X*,|"qȤ1}/?Ppq~1O!mq S 7Rt??C7~.2 D -T{IP$B?f*Qy%!@EH͘]|g"kL>7jE+MKd|)S4oMY[4'-H:Poq~LПE$_{cΟF2ʘ[q3u]+W}?YԏW\^dGH-t]*oVO_|uT~G d 7}̵T\_z#7sqrPO&;-9%kbx|QaчU78=ڤV/"D~+KW}VTG᧶;>m&~!Ƨ-oRl2k*AEÿTC5!I5TZx2*>M<c?B+ޯ򣄒.nBkҵ*Pe&B_K5~?1B[] wj_*V/>򩊸~>%>I.|:O~S}}?F|aLwZqҟA}WBR?&\U>KA~InVy#!ϛLzEL|"21*_3NtECrBA, uֿU|Do lч'QqE+~ 1<4 O#+ O'~.BQIw|?!9&=ע&zd,Ip!~g-f B-WB]p?RyCVlr=&Ö́_k,}S!~>e_>$~>򵄰}Hx~Vֿ$~ !ֿM6Ee})>ߧ#g߫xy'_ "=_REnB_2}eoP%_኿>B_#!ݤoFBoD#oꯟw-@HO+1~Tysǿsgd2G'>}y?-M*dɤR٤[a/OUL3ogܳ-#DKy73t, ۢ-~%%&r`5O"A*$DHXl'+̏%fV2W卄(}>%Y74O孄_/4i9}_|ϐ-Y%2>ߢ/UyrB')@>3loO%oWm'?IQW2*B;31>$w%1~6*ĬKNXQW_H%Wt|fYrE!_ku*o$*eޢߤHJ[p ?_LLRBia>"~E s>?&+Qcį$sI%V ߍ/!}+9|ŸJ]"4Y ijKE>;6Kv]}͎mm7>кkm*JNW|`Þ7h;uT551k~'5z+Ѷkg;k֖پǟ/4< 4 % uǕ[ . cI۞m2Q\ Z[ .ڼ!\#~nس8J&IG|wFx|? rQ۹ # 7§gタ}+ճp VO{s6@tJ]&TLu%u:%*|>`PG頙XgdU#T9u %OHEUWz#}W|pwg qHoƜ8L}1pX(F{ڹ`߉$jzOq5#'>D!ncw57t ȿnYswd\n?R 8+Cx޺;ݒǻ{B Ir NT _,{䙪ark;ۆ[iW_CgGOO3&a(ᝥYO FNaS]fL|rp$5s MwgQj}Cw(J{S7,(^[7G`lֿQe>Uprk\"`{\W i=ơgi{50TEzLnͷl57BuCKodj.nu_d&kmސݣG&TNH\e$J${2zTNq|8 qQ9}oEUDx6+gٮ,klwnB [ [jz| d mAo@忩 xvN2,l 3y.LlȥB.p>jB F~6dV版ȧ;M8 :|_zHD6ģcaW&Wm>~{0!1x?ܕIuiB`a> /VcBR7H|@~H6O}+9ȴ>B':Rdq)EűMKg,Z0_bҟ:vf|ϋ3AkG\$";0nXKtҴ^;v&=-+"J zZ'ߗk5PNt8:[b6KI3N}m-9y)dm(\5>p6=5,ئ#Rcx?񘳭+ L[I>D\lވJe1x6WtsimɄk˳:V[@kMF1>pk=>YZ{% ~x-,)q-Q^_'(hX%FTx)53IxB_y.:<#iTv^[ʝo|ZV "7п+FG"vǟ ![,# Dr,=ImI^=1_ P^Sse ƌ]xP?,4BpM#jmzhw*- yjgYjLfj6S%ШW/\ :A- .ϋ [H@'H8ՇkIVgYrĠ\w,ߝZK_sYw.^|Fg`>7@ 8C6YdY*fQaڴbL?HߺtғJiYKy }J-۲dlTweZҭ4G?QNSKVVդZܨ7ɂV%A^BUSVR9UTeZڥws Zyw}VԒBPn(jZj|n,jZ͘ti cKӂƦ͘>>_K{"s9UX늠bA:sų=yi-bڸ0baqD[35;- ys+d FLfظ*Ŗze#@ l~92:. 3t&*LRKY5"#C^ ׂf뇶6 XoKp}̒glׁ||>[QJmN&L]ZkwDy#r [-<ۙ*|޵DTm>7򌿀_k~-!v#hE@L]{-}1>Lvss`za{{h Y>Ul.o~̗Yt d[:'=Ք)O 2'aaZVUnX]huZt8¹*tN0\ pO`R]%%ʺd[C^Xpd~ֿl>[f@L.q“᚜yj8hjhвgf{m2M(l6o fɰRw2d;f.uҡ)أ{#PӼ'a Qxq"5`CygVT&йsGJmyvܮ,*$ūҩ@-jiy#%-+&"I{ӈ,y/A򹹙"XىX7IWɴ?"[Q7Q7QQpRp:<7e#Eb)d[֒ւD1[<huZA?ߠ^(Ҳa{ːYVG~XB7NDO+DJ0I1N:s~D"(mq8"lWfp%eYY϶9 yyl2+ =Pk~H)&W#dDD{,U\4n*D9;I]%y/asϾ‡|aZ毘DchS\8Aye7dZsIKI SpIz~tQ*rh"B;U {ݞ(Oˬ'+9;=2B*3׀sUΜ9pD|:gt-^zvÿ.a%GpHnqЋ=&wj<=xΎ`c׌CL%Cm,\17)^n$W&>se~gRd ut6(~%6Ɛ<ܵ/FO}V"np#Cj3BDw@Z iX-sW*f zO&X}M3~Ϝޏ;}&Qy2U ҖɭiЯ}%=K#Kr.r-<<8P%(n2O'Ld56Mqc8@MYhuu4n(tEثZg zS%zK& ?)wdmi㶞2CfsKO[3IQ{ M'P7.vSGZZ:wqr>:tȻN5/sP7~ uŲY-[FyN4d]6N O&,xLK)c{: H=p >tgQȥXzc5kQ#EM,$lDzɣN@1>$s +X2F4zx\?`~%s\{;Mg1jУLc *?\3ԡM2n7漃I"?elٖ;&_Y}&N*"=6Otp20)sόv]PP:*-!II4$9˱G.԰y%ذ+~{..?MqBu+ mg=w3nF8N(eϽcd.c;vmo5fnqcC~xÕv\(>eu qF1V*^NIE_mOz%@=KT~y/6q>]qLr=ZT\|B˂r/ `}^oEw;_JB7)TB$g}7i3 *&D"a *w=/~|OK)w>\>3/'DT?#ը#6Y kl|u?xYJU-#~rB?_7h%'}j~ _oQO ~!![IbBGxV;g}*o!DЇįQ\OQM*@,@V>>7}v?#sn/ DXn*c*_E]WߢSfBϾ}ؿRB*_Sh. >)}Y*_@9bҀE%~Vn'Оȷ|7D1}YP5h}?a)5P]KN7*}()e-<>rBOR_͑חUh?Pex "!SCO!QxY;!{ "~!Uk?~m]*_G3BEBѿŤyRv|D|C|"גLzۂVx|I/_?Fk}i }󙡨y'O\H_f+T^\ܤOY+sWj}^e'-jg+681yȿיt¿כ>>%I|)/sMz}P2˜⛉_[LzW"J>_j %dpP|k1HӤwYx#Dmi :C'~7*b%!">?L6TQ >Jm(ǜpj#}ydY@onc39w|q,{_ O%Q[g+WL+yr>S1~KITy-!7 }&u{"myISbB]lч#~ !&C_|)!ƧLqI?c_ISW+Uo$D͊_k M oߡx%[w¿"/I?s*k1>!B __ZB/_ ΦzB7(b},O'.[/PD;c0ńZ>]_/=~%_bW+qk KI-!EzōX7¿ߪH#vIXxw o']ji?⣍3xOA\S TxOqy7{}s>uÂ?¿Zq]sD~!cNIwLLL_dG ~bR?3ZT>]Q*g(%)#U^Km%N㳔ߌ5u*KYߨ]oƢW;)&*.o&xoN/!DT'R~3T=BHwR D^I*Eo1Fo D"~#!o"DoT3ע_G6v_%!Ɨ߭xw_M:> ~/!I]*PKvtآ]_x=OY'BK T ~I⣃}eB _IM;{iIe~Iϳ-W)XnSy-!KZa61J?BoRIY{nU"_W¿ߪi&=C QO7.>{~Iw| !Y%m%Xڟ ?柧=Q5<~XN7:J>+"k?U1Ib^%&oG^J|"w_/#rg+bE ^Bϯ45}*W[p ҿ!g;㨮glcr,w[.&" -˲-[$ |I$!7R $@H#i$};윝}#ֲM3{{:#迗ě.N0flyN_֔>x/B? >q{I<Ò>鄈HE?J|㽔L'T^NOYaW8ދa}^ * ]Bw_xۄ$}ސ Y> E…9&9I:o |>:%y__>%qh?L%u|LoKzԢ?MT^B1ߏXa!K9U^Ea(aI?vD|(@l)=b_4KIv׶Q_Iz̢&#w*F6@G|!hO9KI矈/S,c,/T 3FB#~"/5PRB'D\>ג'%ʛ(> %=-rMӇ^'-|#-@pj?,Q" G ~e?~?6\2v>ߴ6\Yt1k\Bc_\xOOpMaYӅ8/a}؟BDE쿥O!JTEMX.RtB_%|b:BWJ y䟉 @Gy>/4\@Gcy{:{ w>ןsPRE;o DԥYEE}EG*_D?[ʷ~ńf#Dt17,Y߇tE&>_o#Z}|>_K|9!N aK?R~oϵ/g,2I7|"_.}ؿ"7$BEtE_AtE^)Վ.W-sl)?; %I~o1>쿉x$fIUy!!-OSyotE*BޥjB;a]WC%NQnW\E?.v8G;$}Cä+TSҧԳL%}4oUOɊ>ϩHE}B󒾠RBǽKL+#_XKT^G]o-> Q~s{g*b}bߔC>OlE:?K*o$4%}ߢ?؏ Xx!K>XHBBcI? /"D?%~ e _\/,</%DҒ?tp_f|k_H21g?ϞI=?។/O"?E\>qoIO|*!?%Q>?M|"ϦO r8;'@_ݴ"T^3>EbW+bfts$TLB7HoGYڇ_. i|P_m&$Zc \HZ I_xO#D/RG< \SYD&_XGM̢I_X>3d> /ǵ}q׾R*/ &Xa:So }n_"*FK/RNˈ#ԫ~ >LV;d_ƂHk៴I֢rX9>jɿ< _kʖKhFC%wos34֊uR$2ǗU" T^@NdE- {_}/"Tc1%x>Ė9^x1!.\3869ߡل:F?GCwV$ϜQ2BjI, W}z>pI3BQ<:! XV83`t9$I=aI/~qE:ߋxk7 OZa鄈ė".'ԯrBw_>']I|5!;N|-!;!j¿PC]K|#!Kȿ%=Ẅ́}\)!^@:BB+nt$Xo Ї/&_j̿\_=[%RB,JO%D{Xa5: _+u7 };Eҭ*'D1@oί V̿MϾSwKMT=m+bd罒ޯihIEOJE!YI_7U^LKTE:_|AҗԽG(>>%?+UK5G˵U~ߖoƔ >fLn%%0򱄈/?|띔F~J$B̏?YQ_τ?I=N(ŊUoW| Vل5soo&49W*o/_E#kk\E:?qNt~ /!Wmx6gTʋ aO_7ǜoSՄ'a?E%4~.$^J wQ'䍄Z?Qy}otLj_ѕ>E|% Їs,[KyTa|K|ʛ99OΟI)q'9Ee̋-?xǴ(jѾ-G|"/㿔9:Q Q?a%:6\ZSZBW4DGUy!꧘X_KD{}?Em$VsU>?Gҥ}؟K|"QKU^Mo^>'Vutf}_L%&q~jvLϷU$iч+ YtCW8uIV9'ğ읢G-MEdǢ^ń&]NB_> }Lh'x_ILw[QϑtE_CzŭdZV.B_Jm$=sI;!y/'/AE_b?O&6s "zXpm+|Bo^%ǝ[y||=sÿ/P$A 1>^ҧ,y}s[U^M}ؿZ[[$M a6x}Nb.)Gb}nI|5!{O>H>@fTKC; 1|P҇-w)vY;H_TGL<E"OYwi5g"?VIZ7XFMIRy9!}%r=V~X! 1~qbvgy^CI#/P$DEhKzҢ?!~"oėb|yJ:~&*'h>93"~!5H~#w*_L-w/Q燢G!D!@hɟ']}sgbfjaJf_%ZK rzE DE9O} ~b~'6!|ſ/\\Nr$~"oQF[xMy\E/?_8YbI*R$Bw1|%>Hc2'4B/seТ|h'PǗ+|L"r>CML"V`ч O7~7Pol~~!|BO#~"_%c!Ο1͘;A1™6'}KWhX"BԿeʢW?]WZb'[9U?ޟΟ1RB-Ϸ#6cfD S~OSҌO#9+˴y*"DK.<X-P,B]Ěad_3֬򅄰$@_ W*P|,Z ߪ} [ȿuo%-oSl_bU&>@|ѢmWABc$}}%+HvÄvX ?ߣYy|R(b(>IG-A|K:򩄦|fluYa !]I]Yx"ihY"BX UŊ%7^N|"ߏJWy !>IX?t;&JQoWHڢW?s\ ?UYj(.]+z/'sZazW('7Xid؋UJyo D=_ ,<쿀7">_HbMEq'enR.B%EDe'}b7!$DRҫ,<쿊; Q&~ п!Y/0ߪYSL 4-c]%֏KվA. |GLRݒnSy"/Q>8!WU>$aч_H-t 1w?_q ٿ[=*o&=#YՄX~X?%}Y¿/ÿ/Nk_FNEz$vo7$}ˢI!nE}O=MQB@wT~9!σ;!}ߣ%}K%M?ӌ1~?<],pv#(q/\' 8_\NnqIQ$E', dnw}P=\B?}#7_M Z嫽7D$,-S_cML#~ȑ)Q$B1ۢJW2?*$DajdJR~u>ߨH{EL_B3-w }9ʷh> MOT]3,o!¿EʯW[JxBO2Ry!!s1~$bBo/s֩P/9_sXQ/UϜVW|9͢W 6FI[,ZE٢O s a*CKeG;HrvZ#D\fi:2\{o"mN%߅!'}`='w7 |Ls嘠ڶnie7^iӪ-*v?ګc/^y-jĢrlڲ9.@FmڼqwMv*kfm^{|Mf|xn 4%I/(ݔn;/#$-[֮M){@i25i]FJ8jyzeݮgq',LxT˖u4\P ή~Y]cʲWAm?Zdjs0;C;W9uM8~X (gYSYL~ewauq+0lڽb*z 33P:ѩ43ch/eߑ8sY,X"8XW<6bOo{OS|7\G;Ƶ]BYN3;2L7lL.Y'Ė8}) ,ˠg4#&3Xjbb? S==ml=bL=ܐ?y:gzgzL萜^E jqp3Z r± DJ&x18lS۟!> bWd4Y/9cKQNIig}0><' CuӲE9{FNu8<+;k!/d2,d=1ܝe}O?ؑLNXc3؉iDܚp]%h*]`og׌@o>#n7} N%nŃ\hm?)4wj nZ 75t1Ejom"DtKUziTuP!J(AC`ёDc~inߛ;GFc㜾#GۆڴzJ5z;v , Ru^IKcX!r3V֦ULi;WWt8:yBTZg)LF$۲,L a۷OA]9%4׭#{@4h2ӓ1dy :Ѝ;7 rhyF=m )4 tiX|8V3cz B(sSG:.lζi>[jS}]y[ Uwg^gHJ2*Rbh>C<{;:1T;>&p0/ENxEzzNZӪo1EyـY봕"Lۑ2dk`gb c7:ˢ IZ{{YTWW+aCh^W=xLOi5:IkZ'̧CZ{+; [{C&]k%uG'(ғcr!Fkֽ{'{Gg$cc5$Y&jPC]DcUb>Bmzݦ/Ej^/ji:^ʲ:A/'qo*l=4d&y1"1n5]Nj a2Uד\t)@q^6BpM!jmj0q+?jɦq[)?5kQ ̥cX O!}aN"ue'(Nre/6z5]t[Z>Oʺk7,B+T>9kSԒR.SWKW jZ2KB7eiH-9SC+*&ޤ+Z u~jZ2ؠ :k5jr]Zdcjt1M-Eczz]_K@߈{4uy}(*]k_KdmXt֓ nx H@i׳y.cc-H<6d*,+r dzɋo/6.@w"րN72ݧ^'G|l(N;q;t8MYZ-VKN?I_і ׊c|/q"ڿ XXfOڊٗ_aISy5Zop^oϥ%XHb!H,"Hd [A[5`7%`=餷t[V}G2eOd^9vZ37V ~M,hXʲ4.mـA{ 33wUʲkopeYZi*,KՊA^Įvi[-bl,=(sˠ]n[.k) NOO}ր){K熬;S?*v'< 19IC ʣ_+RUa .Sp9dv$y6Ak;/8t"'Pzy 9iuㆦ.sOKbBq/L< kӂ Bn`ݜo`}Qp!}^u-v{.˝DZNC8!'^0B .ﴖ>/κMqa>$YZmVK!|ZZzƒre2^ ζJCasSረS]VfC>Kln$ u~^{*e)h=c-#K C?O %]Ol&~8KZ+{hv>9enbXwc޽?J9,ߏG/+?+AS|b}2\R޼I}k*}G{m*p&*!8H}G?WN]J@t¼Q43Z#C6ֵַOt|)rTxx5)װL20'O|* S~ep}"'I?'= wh4ߍ('F@gc{kz;k ֘ȁKFy1WΫ4Q!x!ae\5i3N{iO$TݿPGKW2]ՠk ]'MlJ7bkҤ?ͩ#@fuZTeҗN[s= kP%QMD~Y:g &H=l+"fFj*Su[)Z:Vt`4|xQSYklY&mu_uRj?&^b4')5>&M6Lqio0m,jph@챑;w&"/ܐ vt1Ql1É|.hߑXZ-ػZ!Y ꇚǎdfS&d+m_qgV7 TR{7yeDtNC}i" _[_e{sreZ:B<8dJm0r0' .|m鉲PQ^;ktšzbGݮʸ NUuen'2$wÖj%]3i=@Kn@&F&ӰERԥ%u?odn>qcYd#w+݉Nd4!4*ͽ߬\3e,zÜ[Ljt]&;MfTE@uyLfw3qn7#Pef6s[EbT?TjoVYי" +a5U< xKD:Qݬu"[0RDJ#IwT`[wc(-_]`v w 擔3|Jb w euN'g*lDT}^Ȩ[?r4ӥa"LCZ-4]/P w؄ [n,;%,-rBD;Ⱦ|y}G vp#:lx 39;eY_?5T-sQLՒ>Rqc2L*y~TntϒHċ Bx[fX+^QH;>}Jܯׯ4_d@>&n-~^BqqF?uUz S]9~FI3\ѮI2 (yz`hcъ*NN}oWPKp:G1oчH>2?AT ;$?5|T˂rҭW>|INoIo QBqY]LiT~jq*/"DsaŊd<1@'YWI|_!|I>3h"'}̓%*D16-|?c\奄(_Y>;sɾ7}aRFG8@&3b\/>Z<+go M& 鼨[$¿̪_-"~Bj_Y~3Kא}pJ% d~\o$D| ЇuH|+&BAyo uhKA*ig/uܟm6w|!ʷ#@wHq%2U'@ۈ_W WfBG>f;}Cʛ5L"7uhg:gF>Z/ ? c*_K1[w㒮Re"@"~!T~m>_g?ڧB!"ZoOy)*oy` ?/'~7뼛/"bB迂B迒2 5U7k_XJ£}n&u7(6o ~>!͎o&/%D|D Bȥc1?Fmr/ ďWIr=7NIw_x?G[m} =m/+hQoF9d37{;T>IS??X(biC>2Bχ%΢!\Ɨ_Kc+">.*M>!k}IBS>&3). G卄!O?O#ӾY/ DM>,ٟk!9dᾬE&ӞD㋩/H/RBKa/;x!~b|hy b}d~g">E|"-A!D|= '} s QߑCH_U}| "BSGklW}~A|b-/%ÿ_~!k'u} gwsKh웵埔Ǽ\{4. _&{gmONMT|7R 'D?S︤B7"ejB}ey B"ߤ8a~K-~v%QUįQl!eȿZ7(n&f !I9=4[;lK s'!7O XN[H|%!ʷjEҦf D˚6բԟUCU>[ˉeʿ&B5 8^I̅Zx俖 :)rh%~!@Ed,mo#D|n:JBK x >%_cw]_hXp\ /\Bzi<>~Gǹx 82򱄈C~Sď'D\I<~6Uyv98ר|1t%/#wH0J'ߴunPDEܟwzIn ~b\ϕOU'?M?x/\3*/%D2EϦ/bW"~n G/&F)K%ݤ3/#A_C<7oPB?Wq%!>G$Yq)77|!35 T -įTK;UJ{3?BFBo&Dw| !OXQw"Ofz; 1~^¿$}ĢK^B$}@ƾ_[Cߧxn?H$: ~wXI;DZڏ. IKO&}¥V\J>/  ƕ7ý~jч/_%}%I?/s#B|5!:P 5I|!ƗÿDOBB-+b|5mI|!I?ÿ_xqEGwE@C]Ko !tpiO5)gSs'T>sIWB/Ks6K ~O%DW> ~4[K _#\{ITy5!?HEd1>=a3 [g&꿁#~<_%#^@Y_C+T7OgSJ'+8/ѯW,yJIO'D<-}?I|"7F*  }ot|"8bѧ7\{Eo~%#~<#is,$M j*_Fh{x4 a_U>|^>?9BU&²_ڇ/&~"o'DK_ 8[7<җaIo?Dq7WvB/}5\`GPI'[wpa])_FqI*M OCkƗ5K|1_j_a?y1T"oL߭ĢOS,&2T^B*Ȣ ė*EXW4<;@_H߰&"DЇ&K|pimB嗱4BqEe, Xa񅄰RjO#DWjφ _bEL|'L/[%mT B]e XFg*q& u}L|E%6ޜiʱ@}kU>2>_KD'w0:^OTE?L y*Nyė( #/"~"o'D|8@R|gbB*2/\ W/_|1@<6qlj6|*!}3J4BMO'[/&[/U,'_Aw_XG"&~,ҿل/so"_?H*BAua[>B|+?&"'oHTdE: J-MH_.IQy!ӒgnI}ؿǒ)Z~*?W_5Ov>Yak#%=BB}OSU^IoJzȢ'T^Mv>?`ɿ|5]q쯾/*p?G?$~ #I? -#`gӔ%7*S߯'R`ч{~ ?#GBjч$L*/%D|)@T2BT'$=:B?΢$|"ڿDEMlŹd) FHh7E?fч#4c#! K'4:-p5ɱ/ ~!!>m?"s_Bhx'#؍tGRBEYbK|\&<j|EdMdaO-:~NW8'9EW8iKF8I||!e̱ÿⱷ}U>MZaBRiH_eɿx" *PCjNr~HT9#A&Ϸ K!򟫼r u}$b11Sf,Ry7'cIdE-"~"F[peN8o&Hg)yþpu*/WԌˉR#r"k,3g}Z.__[x۷UF;I-)ܾ,ܾE:k#n-)N'G< ٭r=ôė+Vmvmˢw_Ӣ˳}wp{/ߧC) 1~t) Q$ÿOQs| yʋ?y~7#WH%R?fpU>gs?4ss?  oc/R"WH:eh+%]eчlj_쟰&ȿ5X^M:E<_`-(uoT^sUA-_HDgѧ o;!_B7K͢^G|b^-N_ }ؿBE^Qқ]u@&K~..W(mW+bk֯oN'c}Noei޿FD߫Yb{շ(C*/ DCG,COQ,'藓px 1}"wA>AҰIIw}Jҧ-N(.#wYɿ< o;甯пWF'D|}IңvSUIY׈u>ǗpR(!oJgb_}-g*b|1o" q~dTI߳ÿ_עG#}K#,5̚>K\ Kg Ac*x0? -q;E|IҟU^Dz\/3_/!D|2Bߜ?rB? jB/k 9~Zu}43hFBϼG;W\HPF?)!F"~f'J GUB\K|n!K`B ѱɊ-82DLTBQYE,?BEZFe.櫼?)@P̉Q]OTKh2\Z2_7[~$h Q-_EdE<e'cENqEm?s!Pꯖ#::!گx-V}lW}f#ٖ3%: s'ࡿHO1q(bO~f=ËIV?YcƶU/StBjQ&v_M%VO?GZLo&4#xJs$iGo&U-į!{tfivmtR'$=D,M|"=.Wy5!}ؿZYd_*Ma *r 1]E"E~ėikT='@]C*uį'7ARJzʷ>O -oWD_`ѧ.b"O ٿ /w'ҿIoW|"WJǢ"Ͼ2jIUy!k$mч?]G͒^2EϘun3No>ot-_EF+5<~ET>g~EFEdE/\}*_Lh7s;_B{w[x77f}5C}TK Q'~"'SJ[QwHE[-[I_*Q~qNˉT;1>e;Hn=:>9+{o~Ryt~X|EwM$ݧI<>~]}wU>7%=fч/V"%W|;@ Vǧ$}O a=*/ a)A|5!q> k=JfT?K$ Iÿ_KʢAE7Pg*DV?Y.n5qEp3:o#~"_%c5s ?2 T>|Ȅ~Hګ"B}}/k~EuNט?bOY |)!Ao;U?#kݘs$E?ݒ:}ҌO=n#+˴T^E>_@KB>9W?Gq?!j/$aj;ӵ/'t+|%=W oPBoSl{|/!Ǣ^L|. $4>8R; aenR!B/G70!ƇWZ ?YZ NAU^Y"}#qBؿUқU>7IzEL|!!woV 4B,ۉ/",Ck=bE0{/S]3>&}*!^IZU%ݮ9؟>lчۉG;,< >d?LeTIʗbOYaįP\O?ip{x1IB]>maӤ{6?GŝT/Hw~(+}%/SOlOWBW?H[x:w~#~ п!oY/0?CM 4ʯש}ؿ]( FE SI?sR-#`ч?#>NJʧb~Xa">~)W"i_[g_D[rƩD_3rZǛ_1IZ+b0gIUy#!Ɨ_H'Ǟʛ a$YՄX>EZEiO'¿M*ˉ%~"=_#13B坄:~9,oH~7 3F=:~CQB7rB?9#CPsX,8?͚a9Ǹ `/V=TWxOA_TI91uTINr|ʑ:˩~q/}(Cb߬r Q?7xϤO6~ۤM^'lN~3‹ "͘x/g|,?9d2巨ܠL?Hg583cUE:%~:7: ?[/%DJڨ2B/9-ė+֓M} DloUmlg >;H3V$B9ÿ+sHګjB-@_wH:E?@Dq ٗ9/Kk aRkYG*UO?FDE+-< q/U.¿kqT^Hi?'wńϓb|I^@|bJQU(ߋ$Ţ7_M_,T^C%^fч!VԢO rgJzWHzE,HbB auޠhGo ~rE9鿑[A_+H-+ QwX*.k߻-ߦ^ەYK;e;rm^n\$>Gٴmݒk˖o޽xӦU+ZT8~WǺ_޽|KKU[v7/^ HIiEUٴe r\>ڴy-6'Tfc' 22L=3C*Z2D {>dunJ|-kצ=4̴.#%WC^< Rg nW۳8Y&Is 5^rO9O9{?sOd>h^C!}NLPV]baNlAن x,(07gۑǟgx)zNTuKbNt8^<55_a4vUy9P|v:Q+upuLy{n 3׈.gqO1Gob>K4ѽNZսGUz@_C>2ն l"pIOO_ǾގBЕ>]{{zOCSxDo.ю_/hG晟[@oG__gOwc +;zsѶ޶#}~VA΍Jjg^%G{園#mu?hIk7u ll1֠v3dZ<⫤ -XicJֵOtkwtɦ݇t ^~ Xwq_q~_'ȅ~BZ`ÄƠԹfpSOwiYDzaKGֽ+2mhJ% czzztJ3*DR%h,:Қh$ -D;}̟k:tkRGW_r̨3`vhWPFicoѮ)*yeAѾΫ4uauԲZ"/{;}q,eLkk;tz,3 Iϼn.CWZ) L>eYbuFDMl>`dO siA7I2x|rMPZ:pȤu$S4jgT߱umsEG{5iMsHݽ=W* ԉ2'{@Se@p:]{_b"ebWdi$;ISF RmhWPS_tš8XIևt#E)#S9}f-LQ` &_;iO@l<,8HfW~YͫJ䡵goHuuCK{tP!ͱԳeN#d*3ltnͶhGw ?3<IML>pl&? @80pc5v6kٯlۆB3&= wܫZױ/4O.8:" _<lqa3Ch_Oo6+;oOホ%C|rPU38d<>Gz:AqvS};:{G=IZ ->~^@B^D׋qm\fhވrhU;4bTj3߯>'_g$:L!nyHj_pZc%:ƜEǒ @[EƣfszreKOrevy9YUy-;E/"uo?ɞHDLLh'Ś&gӒ%/ԙ:|狳 c5" ylVy\ܬS |9seYZW+|'9֜18U F\4N?)x軕*&љr^1?7"M< zw|2%RW*CF?)a\MM[&5'B-4n"姓b_r2Frm5b-TC,x`p^㳶:A-׳󄬭NTKwnAPtkW]\t_!K*388`w>ghzm|B%Kv9 \YK*^Mkz-]떁A|j%lYqz]Y[ yjV%,NWKN1ݕeiRV,T+<3k j`^熬VKZ?>-SxSRV6%' nLz=G]&xBF3T7YS!} d]mo+6.@w"րyV$tXCK %"38[g璬%|WʜV6\ |/qrڿXeOΗ_aISy5Zop^owgʧ!0Yr$ y$l۵zL x >SUOȔ`zT5̥UYGPFezL?WDPKnp!Li KZ-ep^ϵհVrv(%)-˺MkN+;I'i>Qx%f.K6}0Yy6m|c|E;1Gd2dhiͮ4;llQZd%eӈ!;:7+Ѥw?VH1IɅzRPZ) JWmǺD_ e2Zs7T$Ӻrj;`&I'/ +m?X{G{ZLֻc @;vԹ+8%_VΚU!*:)}8B\UOm}ɥLi`jDzЮukZ@A23#:* ᕉիDɺl{LDZMƱי@[^5tiu86$M @إk4AtfsIS2,~("֥jVQhm}ӈO)"~GHhZBBO1Us %R %Xh\E?BZh]uYQOVq(G^^C{OSzpT^JA|b%zʫ 5>ղr>#Nq!MFd\7| !oI>7[ʷT̈́2$`/(W~_I*BBo>v">>ʿ:Y7l"~!Ɵ7*'̓[UD.qV')|!owcn{v).#;,H'R夿o!, XI}+1Njɤp<.G(?rI}*w_Y^RB1I/ė)]I|5!8 7~pygb|*@]M&Z¿_zIU2B nÿ\q$@ ЇX_MT5b'א5G:޻i7z4񄨿WHz㽅 y%y7O%{}Ւ^x/"HzE{-> ė"^G<$[E3 ~ IZ-8 i`+@x~!FxͿVKSȀwʥa 5{T>YQW=ۈ+){%_ ?>쿟b2>rB>dч_XCpN^~TM?"c*C?*}1*6[Hpw|߬M>IBBT蛵ɝ.g>8YIߣ9(UyI_Py%!^I_R'_דRLE&~LlFI_Sx\nlO$=)7>T}Edg~hG%=fч_XN!W* +1?o%^ -1K2yʟGcWIWy\QO!sm֞߉/$'$=i(?aIo…PbEL|>M|"GN T>PB}&s2&~/C1pc,fB~}CREڿ$(Q\P(ϢoQ@ B|#! >K&KyKI_Pʷ. ~;!쏑twj|. GBsv8K~w?k?6./g:6%4(鎷x@qn8CU*@+c|hE8o5SkH[1̕O''T/Q!#85Kh">ÿM%o">)*/\%D5) *V?Q?36˘ZrB6@S"`>B"3/cfh ?6KzEm!Bqw o+ ៌ա*CdÿU\Dc]*_LoV\EHګՄ{_wH:̈́a6g !?y!h%|&!ڿW,&~IW|!w,@ ~j1Rҕ!aj)n!J^ Ї-w ϣJXm:BA|&!$bч/%Aq $ݤ(a&[WHzʷ+aUTl':#D>o 7:xY#OEy6ď'D|Ûɻ' ?&~7_Do##'^ۉ"4Y{Ih Ba'#~0 qITRB''_Nhyw4kO M">>CxEnI|b\y/X=*|$ݫRB?և{-3/'D}INꋚL+Ɋt&UmG_#>klsEgw7yh){A>rBoV%& BYA Ck]үUj&G,B̿?=菰#C$?&~B<{(Lң G}a{#/%K߯$?BO|1/p7/qW ~+2@ ',/wAc*_Ec>?FE/XxRu_ !ai?_#)MlUlo$DI!?iO7T_@ ~8b4\r[s,u~Az$|1*cI}C|"n}$QWX}ؿrE?_Gp.3gSe>WB}7F$¿|dfBԟYܢT_SB&D~!k7}Y+KT8@K,SNWjjw}jMTxX 7Y=m?5[Xb.ÿ%D^*ipTHv)6}+;-<$,e/R\NFJB^W+#%[7B:GCT}eP| D*?/8?2';F|"WH:ل+%lчljC'$]򹄰Zaj|#Z/"D]Dq%ٿAT}|>y!jB"*bb%o&D("M{Yx2N^NNF^A|^WW[w?7S8@N|sg)rҿo! S hI*9#oSI}ߝQx.IQy;!3WK}9'u}ק~^לmbUn}s~\ /\D;ےPbB]q_W?)|ƃy tÏgWeS 1&B+Iį"įqwCI[ѿI|+!ތ&fpo_v K'+īG[O㊸,DT^D Keч?#ƌ䨼P' ЇKďZ|FLx(ďW/4V/cNdE%>#k*!KY"-G|b)2Bτ}؟hɟ3\z- Zド#(lBc}?[BKpCg/0Jq䑧8_$Rk+"uÿ*(HE.RbB_K|b%ٯ#>x.ҨjEe N˜rF'ߍ̱#YVOg[YFm_~_&|<j}tYD|"ٓG|!Yr>_J|b9_f/'}"T^Ӿ+Q #kT^qV?S33&x'\db\K"E$#_AH >0'{}Z%m įWL7Zm!⡿/o1-MDj=*HnI㊼iԮ"B"~;<"> A|!ʿ_A3r @$&u_KHQy!Ї=Py&Ņ_+T ЇWDqwU*('?Gu}w /!Z|pI~Wެ+">MO|!ȿJQ($Ģo$~lb>߄ܤN-?o֟/r7b|~7>W??*_l.~^+u*͒cч'zI|*!7HzEo!I.%IP|}|h+_Ng}>|B%iч?Yq㭿n!4{?M󇩿;L<_C0uܿ?&*Cx>~obBVM+.qcc Q*_J'/?Ws>Dߩ鄈59^@*(}0蟦~$'*FZa')b~7TT^I{$@F|LoηB/aWe~A>|\ש<gތ|iOPkU'}ۑ[߉'$=餎_G>?iɟUSaj F_c{"G)_4")x뜔绢kF7(ɾ!ё#-+_\I|CI(7z U^D#¢?:?E/"PW*beF8s%?S #oR\D'mń?i4>LRѸjN Ї%5 Şk/gy~1K~%Z?Uڿf8oJWDELߒXε~=i?'%\X+ Eʷ"EV_Ne 񕊴ԢrN!7բZ8쯷#Vo>!K%뿉[Hrq3Jڮ|E?MREm'wHڥ)wJj..C7O%Dcۈ/$>Kp| }ʋƏė(_$u|!AI/#Ng*6CT>KѢ]WѴI=*_JGw>\q-ԯuįWxϕo!sɿVB?WIƢ&q?Ǣ>_Mo^KABؿN *$D_o ~+>!Bo/!ҿ0!_lI&Xg%ox ܿx9*㤜Doto8¿(s.q>cc ѿ;SFۈO^'*beskU^HOS 廝*3 !1v. foQ(.S?&q_N W|S›#4.IQ OKE}|E^_-O#D~V}ؿ"E:~Nҽ*$D}>@%Zן_7a+Vm׉sMt- I}wy~GIyt>/qR@?2ND+OP$I}5N,}*`~rB#3Ktgd*aa_)I}on ?|FEE>_{L*/"DIG[aq+ėJ:?w-@|$?oR\D/IO|1!ߢÿ_kO'!_C;nZtfH#c,JzBLʱCl~Y%Zm1B+6FE*Hk %ME~dMk?'?K|!hoXH4E:_I]&[x؟Ly@#bb3v\ d,rnt'+Z"b2T>4Ӣ_H_rB_bW*&&Xu5s֢G=ZƢOkK7R?tfd7Bě.fΟ1ُŎ9EY<_bR >O|!싯*BSXE'Hb Ť?L|!![_Q)[l%%UVIZjB?b}俆;CԢل~ Ї*.$$mR"B_?.!~9!ƏįT۬bJڮB-@m'Uq 2)QԦHjÿ6tkѧ3C}3~*?L?@ ~?DEt~7 &kSC6u2c5*xI7Xa dZI[x_o s Q?W~p.?_NOenпI=‹ +ǹx 82^;VՎnm/ O$p ؟%GEn%~:7Ǜ/&Dy3񥄨Jz1>M;-_XOaѧKK7.K{_xFG2~ > >x}*/%D|2Bė|"gդkѾ%Gs~kW=\{瓒TD{ 's~M>N'+|wUWL>>M|ob'ݧBg/%Dy}>?O|b-'D}ؿ͗%}U _ Ї_%~2郿ҾSgѿL~[҃*L@, >|*/$D ЇZ9ʧb}C1>cbZ/S!?אp_gb3IZxgbsK/%}2k 1^ykG|,!cݯUn?+OW' DI|b ZBdzھa783:~$?[㗔/'D|=Z9_ ~r"7)#srTL G9/S\AGIZ9hITb ou5HsrO3h?YLP$BY`чWi;nՄ(}'Vq1ٗHT/!x>O%gɾb!_{wt/cANʋ a"@+/UMeȩSBد Ї:/%2R6BoЇYPӖKQ֋9-*GS}o ytޢO׆9ɊߙyqE/SRޜ*/&D+-3%eI[U>/Ǣ[I] k9;-YdEw_,|B6(__FA B~IUs@RE$~"Sa|a0nIGU~)!'@Zo6Bm%\ BǗϑtMl!}ؿ<{G-:I7<[, s%=_ϓB>?)Ed"!7"Ka%^RB?^nG/%L̢뻗Մ&k on:"WJz QWIzEsk,sH\B-cYs.P7HWKoOvb~ yu?ÇFׇ/"D~bB>&1s _)#D~R]}ߧS,$wZp9H|Eog$manϵh\<+*G/[a)N$_WTW7UI_5ϵilSm#D|K҃}6y\?X~;z~CE$}wI?_g@|!G~jчObѧqBb*b}`g(Z_hP-U}Ǹhc 1~7~ޜ>|?^Fâ~R.Γd3GώF>&9ꌒM-YV?^l݋7mZEEюG{z˷4o^ewPXTQM[ eӨM7n^߲isNe6vp-Ӭ-+}`ޞB߸nMGJ.ɦ!auq+D˦+mΠFSZj!:-u*-qF& P4RZ]C]i͒AP z`xUk#t;űw UG;]▥E wlG&4h)d%xb!@l30ddPepgr?/Z,?3kr6*ϖ[€܆V|-kצ=4̴.iq^< |Rrtݢ6{'[]vl:$|gCh7.>_QTeXq>S7òyJχe/$gp1n}Ӱ?!?m33'4p t1!)~;->?dmK6r@w l,9M=l|:,;g&NkdȍT]Ssd4eF4od}8'vjHJ/B ,~z–GMxx8S#Y =C_>J/^H c#$Ϯ]=XtVM :.Ni0,[KYPdwX?: 33Ev@1Q-=w*O+x^gW93x%%:"8S ؆]{{zOBو`{9GN&2]==GC@o>[3mlDi;k~WшDSV+;{̼k$t<:lvH |рƜ .㨾c{MsEG{OoQL ۮZޞ+ l "?N-<+utHfC'uv@T7MʃkߵX}pSFŲv5+i}sծ<_A\>2-#kp0g{%Oxe9g_[[޶#U&eˆCn5Āk"|ZC&ҙ}M%h>sg{ sMs2x+O#K/ riDIj%P2hA3n*#sGv;Xm JۥUs@+}]h^ɴULܒuj%d߭o̗\p9R56vN%Ytu>? r!=mSh\ lw3բ79N_7x )UBzA @ɾdQZ?UָɋzwL 'iȁPX!/OӖ=07hֶu40i`ȑuIGGnXWG_cWb-7nYd-|,?m:z u ˥#G#.j:TZvjkOh_Uiܵ5XIXZ e8Y!/e؍wj+XbUͮ+ҪK֕~9fko4ˑj%G; h{b34Aٖm'LǺe b}nfXFt 0NJV,sd@fM>Y:yin$͎6'"ZVYt{`Ce6IҎ:yҫ+;:O?ֵ 5FrInC39ȑ_3jTp`H~_O얻4&#\:JO*\eގ}OB#3Ftw\i~yu62v8uSMh*luUw n!#Gֆe b7UP?xks4s kl7z%C)=U5\w{lk.Pm}Ǡvaiua݄D_@F#r Me8yFOarkĜYѕ3.Ya(emJD:~(1>y4goZ69L=p6V-F3?YG:$JRw?]H<2۷~_m pQg{1'JV-ӳPG{@bk,13@.iEN E{;:u싯ċ 7R]mz;::~"w2pYw_Ǒ]80pe[>ξ>@+zy| z w7K1[c!<ӛ9}ژ<ÒJViy𭘀!~bSON}62ɒ=ӻ/sUԛ:xC;L-2xԪ3y@{zܽo;M/mۈo )Tm2hJjV[5xORyȭÌi7|1_۾S1BE-ϑvl;O߼|_,FfhLE@GJ8_7爫9Năը-UY+Udp^#:R-4ҕeibp^ ժBn%cwj 5'.>)Vf^̤q9OqIGw'sa;p4eLLTI֜<+:$L^Or1t~ڳVW <U;<~k-Wx4n"姓b_r2Frm5 QQ\<*sђ2j`^7szZ2KwNK' 8?f=A*ҟ_C,͵|w/gb\CW?>}R:9xs]}uW綤s7x8`>ghDzm|\S< qiƍr$قLjĶO$o:bمˍGQRa`s+y=2ٚq7Eʯ Y?ɓOdʏ&2ΉxsEr2cSwʲEJ] t=W sfăEqr97bZΗ\YV Ԋ<eB[:̪-yj1sm+ux9a9}uQüW <'}-1ab =2 -Oi?0_T/p6[˰8 <82ęO>5ys^sW'dQsgÄw}Fqܸ>0ŝ||huۄ.{!DSV10>e݈wF28_駥i&pUG |5HY wI?)ӎ%I'eOmWR-!rٳÕܚvb+~I.ckʬ*A?WemF-vRWUaNІ(po~* [x띊Vu^O xVKkn:mq纬֫%zݪ볶:C-Is[=$*uZb}qw},(FqrF0[7F>ЙeڮpWܲ|lݲ)3@ Ӗ1iÑL6{I=gotegq4$\I{<7eiI-pR&WU~'J0! Ǜ(l&Jc`ڠDhs[oVǛ)KԒA)KKy KĕeiuZ1wer7Esorl}LI&Id?'!<ܜu-ucT]zݥ(B/pCN`bi14LH}>V;z]W#y'CyeqI-wx[ëA#>o{Z! ckݔujLם6roŒUIF'TSdNw"0'cq҉u'ZvD+z~^*M@ToyT Ty8BsM|b/#NKJ'C'Xۯ~8lxGS1a1}ޘqz~ޔj 646hFe{$OƞDOK6Sg~c8Uo|`Rt7 <]iڵ.qek<(&,ϗd j;[ݔKՒB.ϗfm>[,nWKfv7eiuZepAd:7d.]y}jMғ$K==I'O>|Axv;+o緎ӋB}07ߔ/ݟŎ0I6utuw^77Rԟү?c9cfI9#L3qxgw|7ߢ-}R5Gڎ?xloM{[oGSƾT9qڨMm9)Mn)^hBȶ*OA4KJ2ͤ2(U[$\D-5AQ:֚t-MuЭ4H׿F$WRϑm6/o"QEDz45]m&*O+P;JCmDqC"0/*5Pβ@Lt;}&^#F-jڴf{$5gqU_(@I3I|ѹ+^ؔ_”pI[G1\)IC惘qmm)#QV!0P]vdSv+7@r/v)-cD[$ߘoۓe"ɻ. kP =1BْѣHHe\\I{o;.Osɿ "?_IԝyN;(!?!&ל(^2M4`)Ay"1.^9G/L$EYo֋ +M: BUjKKtv:{6gOdWa´FRte931b^^Om=Yw黃B,8^PU9pTmY˧XAR6kBv X*(龚2yC:- Ӣ4[ueݾ!d2 MXf\<%li@ ı!u~ve_;A _[_e{1eڬ p/}urkT2XYw'+֦MuNHBȬtM>:Jh2dMH&mgRi[m>liL#!f~DdPLtӤ7RXi?f <.ݴVC3t4}Vkw{Ry)|/ԍl;7\N?|eOO*B?EݞG3h"'*NU^jSy!!ڧiŪo깄BO)eI<qY"uP򉊈s.~W} *?MQ˗:' ףRB +9Y*"D|4#YtUT w9k,?:َӧ T>7}sݬ%$@__5TjB}_iįYC*-wy!o"D6_C1mUy-!7AuZQ)rRb|F||<.SMĒ?/!; ?_=^Co.DV{k@ORW<|: QhK^Do.>w X_z#񥄈[/wf|oWb|~Y[QIjџIo#owQ"OrHKb^4qlڔnWdEݿ%HEN|\Qg|:!I/V,#?,*/'DD-Q+k,1U^Xf? g*&tOIEI\&E w3/$%ݣEF߬>!~&郿o ߌc_}XʏV ϗ%}U儨HEJ|b-E C+p9dW\BMI߶#oTEpW"B/&%=%#o }ߧk&;p󈤟[agW(VG-դoVPE)*M%}k(##}=DG/ D|!@qc`8_?sM)S*/PxϳSOU,"OEMȧ}Nh7_KŊ+!J;?r5>>a|3\Z2ʟOc#"uнP>_D|!!_,)WQK|![.4_ŊQIL+s,kd Y#-23u4PuB|"'~BfB!i,>+$~"CV*_VyS7Rס}؟N|_sBPD[aM2oԩ|!ꯂ터oƈj D|V#j[H|NBدϰNgQ|"%4߻HO9 %4X(}6^+$RBߕ.*'*Nv)kH[HRE 1 Ї-ė(bi@|!H EZ?O|>!cs>b_:7\dIܟ">v*~/\%Dݿ) P QHTy9!;:R>wBM|\t ?JE]N|"ƿ^_ _+T>?}wsQ\)} _9UjBؿ&@%~&|3!?7@G%; %ݨ/ Ї-P"/U~ƗAu%~!^򙄈/s~> {ת|!}-WKEka  7Iz/!7[Tqw}}ڈ^BfnpY#>@|!vg">(C+ I_ߠÒ>xo| Їx/OHJ ЇOSZ*G Ї߯xNҽ*"D|}>@ﵴO_?B_vROFM]qjc>o?Qql۲4 ?ك_L_B_XA? fCk7g3KGg¿ߠH(=?s/%D|=NrB/7Mt7kIU$X7'qpEEHeX OUD 1{mŗ9Xcė?IzCq/#D?JB7I;W; uBO?ӓx[ESOlB ^.MR{3pP'|^>O*E_MH/пj2/9J+o ϳ' Bc_$[ Q~KÓ-7[r54~&g hė}G>2ք[z+5O HH|"-. &Dmo6oCv(?Q M&RBM^  Py!v a_ _AoG?$ b9Fx٫Fx{ ⳇbǣzU>E1$%]aч*8'K Q?1K_A儺 ^1gSDJsT>YffleG!>ik$ݩBBϵOSN]'("M\/}w儈JzH| $h#*|Ϭ]_L,B#e*MOXˈC_.& H.!GJz̢N|"K _\BWS\H,<~o)"o1!͊84W}JjBon9_bk a$#D?7>BӾ.1W._׀~L?848I#9(2R;{?4Ddr i>;EKD.Py)O*ț,e_"c%\H|"Eƪ|!XRE%~.gD22C_꽑P?G<&/{ HD?E$Qį$DO!~:_>GZx?[!x~7-x>cqPǏHi>/v+)>w|UOuK`B:E?GdΈ4|6!_>o ~!w#%}+lч97*bMDlE|!1@Dq%ٗUhR>Z.Y R*b}g +DmYmjNSq7B|![O|bVIU!@o~P8@]|_yN|-!ʷzE"|!.IZe%}iH a.>?OGJjo'}/V\F-"-<$儈NK!~zjo D_N&K|,<#m;ɿ+'~>'$]vBUjKK}(uOsK`%yW|'Vω@ҋT@BIo?K󟩿%Ds QK)ˈ_Hń$? /!KRE^įV\CFk-<{-%D|li?.?}RG~^%4c%Zx!'P}sObBwxs'ʛ]ߟ&K]G>C4BnB 9KI^+HKBTE_%~6!F\M Wį"_ A[ o殇mxѿ'*9_|_/,MqECI?Ry!aIZaGO?SsB$@jɟ.B*=DTG >;0FѯH|b?&qO%?Iz¢_7},*/#D%@jɿx"Vy"WlW+b|0'%K ?XQ\׳E!`Q"ѫM1bB’0`%Nq$Nn;:q|ӛ{1߻윝y#QguΛydR?|s>o\LRBBIx6kT/q|~7iE_4?]Sy!E|b MDap _Aotwƪ|.!q}?yŤ?h'hju},~jվ Nj/VA74">}?2řdE.ޤEJ ^?Ɨxg+.%Yf_O<3\QuW\+_CxmXHTcbYoVAk,|pivb#x7R[& -﷙/4iʧ*&nN}_L|B7q/Sy!ߴxE_NJB Q~s_򙄺ÿ¿5¿7?ӦUHօÿ7)bPD"B%ȿ-&mSrB5Dm#~"6Bw1ĿKLL[/5iE]FVŋ}.%K+}J"~!N|"woI=@ä}&yd?iѧpkT@Qe?@bEGL:"E2^g-bEpc&]x{@MzE'e }a)&eч/'ɤ-:E_Y<E|3!sIϵ\ҟC#~!Zx!'DR-\}- /!~"֗2&~! ^i+I{p2zŎ׿d[G כMzEB< Sy !wo>gɟ_ ѿe|JE|0]64}.q"IUY3!}%?_R_O4*_FȤOX_NĤh>̒ UZ -4;޻]h0.#`sORM?O!LEŊ EIZaKė(`&}UՄW-V,E:CX}äo&ŏ~~}!>s LTc{6Iÿ?]q '&L[ OCagK-\{w'q~iX֤?XawOw{ܰ{> u}玟$JqIҟh1P/k(v5޽&XHK Z5Me4~E,4>Wd#&y1kȾiyIP,#u~X _1iʧ:3}K<'DgIPy!$oIS̵7?L>yE!?ROėBRIL[+Wy1!ktl>?Uqڗ$|c^%XJJ< Q3oT чÖp"~K|X5@c-'[yכOq[,)OSL}nпb[n4&ݪ)x hч[xϨ}fҳT^FL^oчg_O&~&!_o7yN#=7D=fE¿Dq9N^BE&mч/&i]&$D_jɟ.5*H(M?{ ?sJ^eaU_m!:޻ Ť{U^ǤwZa^ Lz[I*G涷?;,M#{z"Tw^ %}Uʯ˵ _"Bʧ¿?UׯrQ>?RBIgG>N|" ~&!ƗO_럇LFRg-U\D?c_D%x9K|2_B/_DےZj_٤:޻iV;߯=>*ak&=1[}!Ƈ o BoZgo_BZpy*/SSy'RQg?~&BEfŅd1~E#NXa/VOLWb}H/M7BaoVxoIw_ITU`ҟ-ķ+''}K%]  a&]坄h G'/ՄmiW jl 5p7:I]W%sm?J>kUoR~˞xB7Iy컀~ψ|)1T997?IڿK/rw o*7߬5,6K2^Fѿ$Lڢ򩄈^lч-OSDjvBa%Z O奄:_B|"R.Wy/3 >jzˢ_OoWy#q:7MοҤ=~3ćۉ/$}}o*b~;<5пZ?O D7)Y^K|!o/Ŋ_ϤU^FO|9!#W_G|!ڏ_jB&=Ţ\OLd>]s%~[~~A|"ϭ&Feۈ/W"DE|!{;?"Lz(u9=Z'~6_ń _x{hwb">/ G/&~R^򵄈Ba&}WYFy3Wo ~!/"Dɤ| !&}ӢB|b?1>}7( CaįTCm{U~!'D߫Yg`5|&!0D?D|">j҃*_L ч_x1IR%P>ϚywBaXq!ؤ/|!)DLmdk&=rN_ чG}࿩[d;xE?G$B'~K1~RB_?$yrB\2ʞ\!!s_DLE9i<}`ʧ*">&= B7FE?N|"/֤߫g?,{ ?'!Dh_,'*.$s 믖bBTҿC*B'_C9ajdy}_t< ? jR\[|}؏Mo,K 5#Ba|2B??.# -8_.V|.%s]`>Za"CϧHń&-~S B>Pgɫ`E,#,e?+'DK_If.)^!TiGW+֒ >OKWGo ̣Z` ؀ل(oRO-pi|l"3SbBό ,?x䳜Ϸ/'_ !ƏE¥ Bg)6\e|¹㏌ E_>(uxI:ίAKU.Hǂ-O"`+E~,0c~T^Bm;񥄺~,A|!o'~,0-x ~T~!&#~xP+,,\^)b}h֏W_|Ùkт,<_E~r' y4/"D|iчOT,"- \Aʋ1I|&~"/. ]_h5>kMSE~9>} Wy":+r|t1/k|Pe Y">7T>LDbE Wpʧ)iPF#ϰ /i|v+6v U_O1 t|B/~)/C W2#eqs2F0u|v "wZ"eWlޠްj=-۷٤x^.Bm޶e`*sHҺe*ش}ϚU;hfQ>ԩѓSЅr0鯨 k&?<"%F9WLSF6xV{IEWm w>Z6o-ԍ~gve s-lX" O9-8 anZEQOk6q40O[˚cgprv]ɋs8rjwjN >ɦ6d=46ףm͜YF%oڹqZP'jvLѹ4I~ͬ fC^x٭rzV6m=sdGl;6ǿj }n~rgzc܈~nDϺ(v7Of6Py Newy *5=Y+dX)[l >mܨ>/q.;2}AX FٗjߣZ@_?G|d^Wd%v{duN]C UQչJ#4ג9KwM>Żzz3HwGgO߇}~ۑ,,.\g~fC4hgwwa0(,r,P{;ۻ;~,L3_61'$ 8^7=aNE_iҕ>Я97* #b%t̝X_О} 35lՆ>ٽ/V;;Fߵ<}蒬eՍ5;*i~w]y(nV>ecPgI#3ڣe N.g?^YFko~(=2e9<~o|F!+=rcXh%d]Ed5ȴZ@.S֮ؒ2gN:KO̢Lk×#*S5^RAP~Dej PW6yK0ȡdogGhTGt40 Ȓz—p|/u^=&Zm]yn;L.Z x}$06G%1 tn s!/X嗈kE0sUUpv<&ʹAcF܌>@hc|lwqq;0'X@6^ІUZ!8\w4&X_fѵͺ# (/=ҕ~h\4f@|Ƕ¬nq̢:P{hTVחȒޞA@ V`3@Bv1lmg5sYuzwcmvl7PA+-G#P+i&;6l`+ӁfM0<4ܐvcP{x-3dT"lRZnGI+]'~u!B[ 7v?Xֻ^2=su)N0T dڂa,L ztt$ V%M!<ӛˮp`P G{@+&!f2 }Q!;MC[,hO\"2PC֛1xdWh]yY<ۙ_;5Ἵ2mKk,K,CφfGp*?Yf)x8Z _ nnr"*O2̚?H/Fz;w06 Tdт|~϶7/o+%dQ7)rvb&UV߱^yladp6V[˰" <8ܳě8Ʊ: EIldoy [P|W [X`-7Y1_7I8s7,vRNp~ޡluZfFQNIu3߹^L>tԣLyCni 'յdgY"%; kِaWDE+B.ZOdd9Zgx~m*V8f}N`-m5C?O xCiXH/ϹZF9luZܢ+rڪq\n*ڤk5*_}J(x͐XXmuԡ<$RYX7R)GW%A<P_j XH>%ZxON-3'r+7}yez?M/r[ޔ^t_08΋('K[镖wp#ooCScx'z+uYBN}~W{ 잎G5i4=>=l,eax<[f蹤"q]_JMS|7EY>Ӝ?d}].sҾL1Um4K,MMĒD$T$QT<&z囦ɯsoIueUA =r#LYY c-AcacU҆do6IN V yձDWqL TD2 դ,^g_޳[FVb,.\o:fr H&K,󇛝5ȫSqs.&E2Q«4nim͠#klJ={s|BqRҫP=nu oXl]^#[y cD/>!iN!Xfo cջevD^0!y# RoFүہjPffn4 TVmA2٧khjoư|j7oڄ MBjޜ`EC7oٿzﻅfd9Y.(Uv4]M)H5ݦ-gΪ#kԬGjݍl37>q3xD.M9? R`/]ͮM煔|]ٌ!qF0RS~KYiїSi~U>·r>˰j_- ~r&Fr~S땏kYP֤jՇ:?%~ B[BƅÿǜD7IoESײYx_DNy ?%/RI,JU>Rzw_U?UPUygK-oD??9 O\>k ~b+O+-}o俒TUyko|_FBo1M!~$A]hG̤߭oч[ F>BM(n;+Pg?忕Ɋ 럷 D<Bg_J=rBN|!K|LҿY>񵊍BgBNG__JB迌ekIn +n$W˵\㽴KIoT$")>@|!)gU^I&?LLB_C(̕tk {C}¿H'äw3Dh{_JGrMz@孄!W)&~=!(/k1 ?F[ oWIIRń_#O_HC}7aW/?2Su}/_1w*/'D*X__G=B|"_'~!AX_}Uek~!?O<&=bB&Ƣ#~"OL OT%?7*#DP rw"_I&HbpKQ%T?#~!wkH7B_U\J!~9!įPHe5¥WjD/HCn>"/&dGOUᦑ*/'I[a$?"=Fƨч17(^B F?WQ7ؚ>A~&ÿBKiBt.!D'_ t tHʫѾJ&)%~&!WF|bW_OWH( \d㗴?3DjU^eŢ?UqKަ,F'1>#ė(C#E3*BW~Cg)68^OlB7+r[hb3ÿO%},| D4iʧ"flj)}H1M%(}o_B"P22E⟹lQya$fYV>_.r E߬c"ۉo"^&𰿓 | \l_B|!郿\ۗO(o4pC*D>7;O $X2ttDeW_N+"D6ʫ >{L#>8_kѧo5~,c#OPn~_DbE#Ry!)#7?廉ZzҿBSO76Qq¤g?OVg.r">$~"EesTJ<;D?UkLz"~wMYߥ}2r'M|!&^ DҤw[߫/vwaj^:B5!Zד7&.o"~bٿǤT~ чQ|IPh;,s+GyiSO"Dz"Ed|ITy !ׇ/%a_A(3oNB ܤO"Bo0S}#,~4\*/swP\?}JE>ka_h?᱃E{&}Ţ_"~~|-<.u+N|銈k&=ba/_LVewT~!mgч?wZ9>7T}mCo:>bmwSWH^p @Up-5L5Vyr`SCr\OЃwl A1wӍCOqLv5 5r<:$Xg߁͹OwOýaBvv M1``~ kuϑ*6Ph}U{ bJ&0-~WbZ%NoqFŴX 1mߨ{ʑ07|@!3M&3zx&w jOxUGL7/Bg9׏Kb]n[O~u~ JpRM#?z!0h_m uʓwl4T?.\P?oG%X%EvE_k؂.So;yE`Xڢ1h vV0[,з#o̪U8 ~8!d~q<ŶMzw.9w2Ztosp-B@4= :Kz d$x)`I^V\`}_IR|h3q|?Pj: cd=z^O2FCk #k;ԸK:,0郼3L">G'nPVw(ymvW͎`W?Yה~y !|7p=o8X~A2W=]}Iwޯ:CކskYtv< o׋OΌ򽃁^+ʄ~pԬ潑`ޤ7 Ѕ9[~O{Pm='sD-V_|Gف;'W~v`\sa?lxt?o/yP(PQȖUO 'RV';?@ɩUv R)GSN`?`S_;M?(rL!|sBnI eo9ici̟;$n);$mCҦ,IFxs'ewBTvLsge;cgm D ?hjt-pdMtsjocӾq'}l(hmS Nf}j ۘMؿPt2P<ջ_D/H/ ~r&OMM q'ԴZ֤jՇ:᧦B?Uo;ٝfӇ㕏9᧦D&_8U|'SӠ?OQ>~!K_XMX|&!/ ч9᧦FO8NMlitΝʢ9NMo64q?[n'"W?ysԴ-#~!Qw;gi(/4 Q[OM{4%h"{6п B?*~jY>4 '͎4 iBe/s짦o#+_OM˵\"ڗsNiWy%!盈"Dx33 ?B| 2W ~jMG|=!{;~;OMÿw?WS{/K _{3i6}א;D#!Q IphmկG0 JY"#~@}|uWOk~_(/T;S~C$Blj/rqOn =wė:S~O,B:SD|3!L\'x*__N7W8Sn?,<_MO8Sq9,T2Դ -SdjSlj_t|<,Oa??D op"Pod4sdOM[L㞚fӇc,4B'(/AߔS4'x*dNT2g 'T)W;SɊO%J|CT?R/sc?UԳ df.BO%[F4'x*rV8᧒ K%NN =l5eNT29᧒`dE_O%[gѯ'}åOEk$}qO]D(=bcML(N]LJϿ]ۗSO%Dyk"O%7P~<%"x/&BO%~߭~*Y/E>~=*T#ė;Sɮ#~!wZ'x*qQ? JnvO%yNTMֿw+?QD_zѾM|"_2>I$'.}RBo#y?8gva}/:U}CW)b]IUy-!=+%qONsA>gч@X=x1"لX}ϟ7~?oHL=LBK!_5g6m9}"E_5|=K ѿO|! ^~NTH#=,Զ;SOd&j3ùMr b},?'R3;\a_hṓ#wOm?Zaģ ?Xy6\Tb1'+"8SCN/VEϿdSMDE,fXswO]g>pP㞚6ʢ#XLGZi=5 {'hg(b\|?Ia|/8ީd_'XxOP}}<D'*q<'( :~O=/= }}ϟ{TNdGSΝJsѹSlϝJvvTTs[;M%NibN;ibN;wqM}9wj۹-0d41lS;J%?w 8Jܹ`%;w.؀8w.ؠs X \*,?_9A*XD|v\0[:swbJu6 6\g =:g |TvrrΛ6D_:3v.ge_G{?g ݫSw3p4EӝYL kR)ـSAOyPqqb2R?aѪ:81lV?O(TԟKhB{) rjkIT͊{`=:e&hJuO&;mf:9Xӛȝ7b0c[7MX#:Ʀ"u\P3nI{xy2Hs۬6pxX7}:NmC@ qQN۵NN:{Rcʺ`;z8(u)5):HOqw<se>GwIl˿)4{~Ew3P<_EǍj_V@L9iG]|G,'x|¿Ïȗ">Bb9ˉo$-7)9;W|1!k ч+/p%ߤ[,mhC'~/o'D(gy|A$Bo'ENً}^B|)q)e2+JB_A|:rG:9U^aϒ??I8J":VS1NI>iN9#>Xt)N,L>H|y|&1L|q{-&=]sLJ<%T@<>zΦ[g廕B6[WtRg| !:KׯMZB8|EF}{>?גϧ#Gk7P^L&B.(^J{:W"~/uRgˈ{:WCawj*k?O'%{񭄈_&'u|oчoqo }ݯ6B9pt '*_F(: /WDϤUXį"DI_QjB/W,o !ƯG-eߦ߷Jm+^L'u֯G%KL _I~HU{~3* D(D CG?wo $$}~do '<[HOc}᰾.등{+J\0Ppy\W}>?N-OT Mʋn!!Ouܳ&3}[U>3,ۀ>d6~.'A<׿o UB#B;^W"'u__LZd.z m )~-+}9Fט:Oq Q?uܳr:);s~E^N7[aW(M}no=quLzENtE[NuUT?$~"?a9K8Ik >$}ùT?ؿv_cN^'gPtRlj/UG'9S5S)&';>=D|)pr+_@/Tk3/#goQU/|5!9~}(#g_G_$b|{RK25Ǜ -`oK9'o wO$D}I›v*܊|tk??01s:Y}1g(AGNDӈ8DbɟS a/T&=:B8Y}z9d}WSD/T\LүZk-qW/=וOWL6-9>zՕ0|E_n/S-qAaVXa?F|"=?Hk4&E>'XK៩8>AREsG| 76s?6Bؗ1*_G='xEXgKi~pF|J5|_q=G|!o ~7"}?E2o: _fEofL|!$DWh|BRrqC3khg¿}_7>:U:Dϔ5ɼv)ktE_H_Ԍ*/%D_dRE_KU^' Yˈ/#/g[oV-Ҥ*_B_W[Ⳅ6K0^.7CPo}%ߩD>wӯ3U>}J bM3oBBa%.]:poŇo"٤8xRn1i*_D=դgYӈ_tnUy+!}ؿՒ+Ϣ$gS?_o'ՊxV.7"߬þVBB/$~"D aVBX__IXՊe S=wmч'ߨx2Bmu+}M+y#EM|7' ч%Z? (?)|UlI,<ǩ>J̵QPy\D~Bc|~"\YĦ?0ZĦ_8CO8N<} T韱g|*6~97\y~7Ġ#~UUDq756 )sÿ:HSOfBo0iNjOP濘ul'~D_[Ɋ4߱*O¾R>?3sElʫ!Ȓ?͏¥ˇ9-3i/>ZBįŤ *Sb+U3sIlE$~"͏1ӖckTJч5i~.]WE%o$Պ3}!U}+:ƶۢ[1=CW~tEwrGlI|?!wq>_bɟ B GǗy N%O_o>K%*"De}?@|bФUHۘwYajg;5}~.֣Hu_M@| !oU+IQy!a>iч!~6GMzP I*B!/V D>K׿?g-<<%D`i{IaKcڿ*/'_3QOVSGLE%X󏴏MW|ä[aW*62;N#ow,7}Kwo~Ȥ|*!c~eч?M1A|!}%.;*__ſߘ[ %B ;b;G򩄈LEL4E_Lg" чY *r|E|ΏԿM~?] x«pь'h#uLu|S~ʗQ0=>i:~/$>Ï3iʫ}_M(I_XG'D|#(nbys֟ nLT>Iqnqӗu}SN͵L|?xEg_BeL奄oi>_HqiC*"DBaR>Z /uZ-ʷPHަM*/"D|gMOQӸu>Q9!?ג? _ib?]1A"D%ZO܌w>_B|9f/_Fn-->Z;ZC"@77*ߪrAܟ"Bۈ/VDj;T^FrEI⿇2E/Lګ򙄈}EgNs/}!$Iq?hNJ;CajK_{V)/^U>Y}&=բ+QIGU^AΤ-JZLj'D{ڿ.?柪ZվyIYxߦ<糕G۵|!s}_ת\/;DyEh?/6%*BsIÿ_U/5*E,D_N|bJ^%}5איsׇ_$o6'=Tդ&B-u3!7^_D~yIWy!ėb χR(?bT^G?jw,Lj'IPy_nE?A|"g[>iѧ;]"O?Wq>4þ;{ (~%~>ϙ$D}>Dzo7T_"~5!_C냯5 Fk q}CԾ8!>ߴ6u(w-W1'"l<'Z'ė2BgW¤_F?jG|~E|b/6q|1}:B[~zB/o Dh2L b_.]&B?,¥맙s?i:k.ϋY?)/ W,t+o$ "~bI&]#Q+|K 5yc/'㼱&v/T{8&8<:>7bB7:yU>P<3MD)b2c$ 7\%ȿRr?baWAJ|b QCbo&)&Br uɓ>Re!D&xXuھ7*/OڟE^ʋm&y,DTER6Sּ*/#D_Z-?rB?Ϥ* DчW)Rn15ߖ_HORYx俌g}/ć*M &~Z.og~Z+oE_#U^ARI~ D6K¹{ žͻLy+ࡿKO WGNog|G'#Y|̽|ջ+6Vޱe5TO;܋ӆS_޳zm7imI.R;W U[鯑wlӺyi;5g(9/=k l`^{'[-@Qn޶e08dے5mb7@m[ A]uؚ ,Nnii]߲fi5vdmfNa͌HN;9+7ZjU鯜52Lcvn`YXiC.ior'Cr;ߓ ZuPN#U$!;]CU 3:rO*@tNޢ0`H sCn i6'Abi!epU;|I4uݐr.N}7n\ 8gh:&9YH4I,sZݞ5IT7lƨƊSQ'Ei؂̠ms6 M+g[=>fz Tl)G;WgԻ d>OU6Y0$:M'vtזOjFqvIzwMg#| ݽ9]dF^0T<=ι63]L^ f:f9UC=]m{T]\wuHjߛD?tnJdwG2{_ϡd_ j|6 :[-(9RKoFJ'{>^_0F{W9!+>r(g%Z:؞Jv'%&uve}~#9׏Kb]nG~_` %ZhI"7+ui1dOwӁ,b=G57F/_^G{o2mvBt{%` ګA˜nh}uۥyuSMe_u@JƳ}~Y; Xu>r{ږޞ˱:kZhh󵌃.;x΢)Uʽ :}xr 4ԑ27δC~_+o`reOn"SX,5k>f:ۄ/7*|YB T[Zwv<+qiZ'KݳB+BX {SYM+]N/G.^FQK`qii< ӇUhA+[do#]*YOmiA*\ l=>`_R 8>t_{|_?Fn ͘2}9?{WIَʼneSB:[v0m`(^f*83t5kug Gm9Ⱦ#{] ~Cg׊ "EW>6r,[?iG:%LwI%3㞽W';k}=C@|׌G%J{u7}(ї|8Ф듾VqXW7c;tkFlr}XTрbK:gru Ct@,}a.t%ם1E]@ ~:`,3Yt/Yaͥiͽ&6={6p? :ُSyY褱@FJ߰Ű5*؈E%y$|+ՙmFɠK<,Fgz+}`X.;x6y{=Nr0vVs5P6l nsth"Ym.Uaw u}C ǰ:x/so!2?,- KAk$?u0j-oە2rK%XPd/, /橹ݤ J{`l*32Hl.#KV8`.CQ\bbٟXl?қ=pQIKGGp_/$ qߒgKB]-R_Oo.7נy=/xF!\cYݣ`k1id-`3̦'>pO_w{Kg # (}̉\|7߳')>ϣOx+rh~;Q;fWYдp=";D8i /PDhuZ'cjq'(H8: 'ԫM],ϳBP@=F}I8sGisRMT8RDvrQ-yv~>,]49L9a)/W;14gڂ`1a1=XL=攴>ohT[rnB;s|V'%r\O*ϗU>,*K9Pḩ9[M%yj r~V%%y]U!^T)[mC)WG6|V~eؾ|˫l;aLMyӉ`>:K>aHyϳ <Ʃv&i I9ښq8S"$XkNQKuNrJzT'>Xu`za<-Ҕ3 11OX.y;r҅l]5hyb:ӍZl5C? ^F6&F*ijYzߚ2aFl^^NC [e>.C"S:7^?Wy,C^`w!96m̜9^Y9[WK-EjZ 9[mTKn1gMjIRMt XR9ذ͝<2ڴ{Wھg-KtxJ?_AfoƵ@c9AدsylM(=ٖά ?"Uz,˖j-Ruϳ̈́99ri"sS)GԒ:NjIp~ަ$W?տluZ{a*huZuFB~ֿl/y~YJ`~Auo~ɩφ/2Yji ze0P|OH\!"+b&ômd[` rw/p%\!Os}/+wk,-/:- OCs2'( yW ׆17GNj婔Uw)QG㍍9Ցmg<Ƥ5i4֥m G9l3۟*d /ֶ*-9܄(VlMro7fV>ofΦ[snU+% ne*huZ䕂>jIWSԼx= n^O0n tf}:![xN73J6>?nߘ`{0ik|n@DK+ya/rXX!>EhJ)k,J֢}k䎦d_ OJ%rr{}Ó)T䍼 ՍjIp~o&$țR mҜj{4q!p6tPWSKȟl.@ '3]ߨ+7/^K ~mUw;~7]pv4ziUyeG)?G3gS]Zʚպ#&DˑCnz;I%Vbt^׺m͕Z}υ"UM}7#15eb^OF~R_@_7$QϸJoY,˯dS#;nu mBČ-dQʌX&B'֢8q?!oZgC2'lrI"wrQ[%nE|7EY>U?zz}6acX~1gbqmB~X$$Q2NVG˂mCǞEߝfrVm[2douT_Y JfTJ]>\YH}jJjL[_}pܛ<\~eM)m-{[ej zJ~%5 <\rK؜mRh6 Sv6k7&MZYz 1=mnINy f2x=@q+Mɉ!EshX;IsRי$-$v撩:AS7?TNKvC̕#bk*ۗTH/}8}p*W=Zg2JKm(2)kpcY&440+]3ZY-'kJ:,h;a2sk7пtg爞L{hp 6,^ئg }WK饦U"ت,ށWj~誁ۗ D{ ^UI+ߔ[Ma#lU*H[K<+ M [U Յ \EANy6{j調 rݙ#,z")b7kmp`m?pt/wfW&Bqnn\w'cs`@hՉZƔn] U_fIP<}'վə{#|\˂raM*V}7Zai:¿OU,%.$eo\>|I?s\DM$~!D|TE4B?E9t'¿Eh34q;I=-ׇ+΢Py ̽eӇ K5WSj i4įi_= j_ɕ+~6%D]}y(~[Mڮ(߶}N BX]b .wQV+/)U7~ډo"Dm}*o&DttĢ?Gos@k Q!@y"r'޸6W~ ч^_H97x@_qDs3EފHoqR y !S/%}F|!:пJBF|,+vsL£~n'&B\(.$ ~1!{>Kuq LS+ Ѿ^$~5`ҋGCF/TDk%/%HR')b*}e&ݭ =ܤW[ė(VR|^aҫT^Ec}%_M3 ךW'uMWDzި)X?J]?XK9d[T^EyI[Vs1Klf>ަ9&}ҢF\ۉ_D'~"2&äwZxN_N.W(%~!{k~o,<'Qqaw¿onI2B`_Fph_|)'7|#~6ؗy&=&BL?  -ʏ7|_#~"GL>jү-U ¿oDLG&儈w_į"5?`-^x/y]ʧ(oGޒԇ!~"O\qU',j_iDo ?[q_$@?YE&[_~65{"EaK1HGBG|"#c,<C oTL#~+!OvE -<+$#YK Q"/Ls4QV0D̵ndEgu4/"DBa%o!D_A듈"u*oU\Io#5Ր*B֒?FHzBo67f-iȿ7αfҟOk !ʿ@q){.r]B|!ʷي~M[|!rvZ :T"B5DWD[Qķ*iJdGH=!_OFE?7m&~"-DZxYϝ>.&NX_yù;,$SJ}å? -#~(KoA ϶qZFy[B_hݾOa/RE^|ODB#OVL(/k'S D>J| rRB8п B?*ř3񵊍TgBi7+%g?@q1?%גso#įWH#~!o!]+p_b{- oLȤw[拝 x]&eһT>%OW?rBe&Ƣ^N|-!It{W+-*_=!쿖FBzxD6kB&ݣU[Lߢk[U/Dj S-,wkx/>>_|NA>Ɋ E?A|L%&CėM~gS'LzHSIdчO(|>egT^Fihч_&}^Uh ч["3%/t,Ut2_r<5'9I_WB?j,+&7Lg7M}%UT?6*&D|'DkɿxE~Y:{? NM${~keU^EO|㽮@dapA_"IqIU|BnG%~R7R;7SXb_ 'F?bчP:}_xPFVƈL<.{ T<~(*O;, ~#-T¥l;5~/"~">_17Oxk+ZEMDKU>U_Q3'FgZabٗT1khE+rVZ~,3?S3]Nf7jz%῱m~=37X.:WՊM|"Ǵhfҟlj| 7nX"]?$o26,&u]E~.3iE/'\[FI*M Ya&E]IBBm"~r*Uy !ڟÿįP\C,t}+\ڿiO3 Q-/Vo5i[Qm&įPswk Q/9 Q]/V_aҕ*o!DwtE_I E.>*o-^D}S?ex tH?Sh៭yJ?פ;T> /ė>ߤ&=hч*_x$/2.WMzER^dՊKo$2/7w m,/UrJ^ _ чW[@| 1?^*_OIL|!u}{LOM}Ք~'&EiһU>W>{}B|!~gL[2#*E>?o|g㽚_D?egT>81|ڤoYa3;5*/%DI߰/S &=j HhR/_F<o Dي|L&=E#G,YD7,k=R]o}՗9{ߢ4 cc1j|b}؏Y+i3fy*_K&My/VDJ$v5XE/ ~ߴ8o%D|. чq_h)?(HMIoƤtǻD|5ulE=noI%*/'%6#DKTol 1чJKISx7$ (o~7)?[xL<'O| '=L=K%ė*b}c)x^C|Ul"7Bs~ u ~>?$OU_I ѾVPnu2ۤ'fƢA{v #~?1b|"?1s-ۤ Bؗ25"&mUy!%DZWO;-aoTR.WE.3iE/'~"?Lڭ6B :,u[+MJ[ =!%?:,g~?ŷ߬ ?טtHńOI7[aSy6 1a+tDuGoP(1b|?NxB)zOk|!g|˯9\?H$B߇g.xeϗ>J;s}||eWlA!7ZcOmk6h8}mB{VԺm=-3FbUQ} j+5rm{Z7oھ#mL%dbm2:be)C{ϣSHkEpв|΍4k)OiݜlGŽAL6oزa{v_eIG5m,c7@m[ A]u{N9}59\v2C/@UI7✆4hn޸q&qgL:g%쇝T7\Olii]߲&=nھgͪVN})uo[V>iʳd6yMkO6=\L}#d3dg7[nf<Ƴt't{8[$ęxe8ۮaj3tOt'UCXn;YNWcO<Գ/ֽGŵɁzWg_~Tȼ.KCmIھk&%Zj7ں=݉5>]{{{-m+C]==JqY֌?kD: =sgG{F }_ d4p{o!S>v:,ߑi}Qu`ʰhBse֥}&ȡdogG&Mh|d{}{QZpWg|{O9!ʦmuC%9>Њ U@o>F?L"~I+78`Kv䗈kE܀sL%K|d9/8:fmS=0׆ (5 bxC]CchM5Dkon*WF!Ȅ7KKSzt;c)zb:}y _P1R.!)U o)mYP8 hOjɺIZqwE(IMCG<WHQgHG!/^x7[0']CZSX,5k>f:ۄ/XY5:%X7ꯇo˜P١a7E|ko'_;݄;OT-Z X;wۓy֫k֠ˁĠCBqiiⰙ 3v%͞d灃"3Pf*>se^2 25mE~SH\j(3({uoe~k`U:^/f6-8ܛّt@t'r] wd3pvIgwLE23naU1L͕6?F5o{_"aA~voO-q/0Վ4ײ|4=CN7@{ \v sbkg٥?{(•FH/9UM&kW%%6J{ Q\vpWgGgbuHo2=5ȭ%;$ܻV]CxQIKGGp_$Z7`[Ğ}ލ@% q?dKxΖ";[5Do:tEsї\)Ú?Y[ූMrn|G޿wLރ/ムw)rR0Gb'țOduh'HSNP+ 44o;A9ER ]DX8Ԝ$?5db!}@R1L™#~FX޶t~\cNI/Ш#">A?/&YZ,`~6u-Ȳ{_.N}i3lnHKNdQ_NM.O) wϮ՜_k_R/ń'mu)yb;% #!HCh_HJt -}g=|WsDj"d+ؖھoc^ K׌sF4Yl53ؼFy}H7g:W-[r/q-G3jR㭭r﶑!+́?Oۗ|yy'zII?o:̇}bY/9l|{E97.y)dťy=%gjgU&9ZNMNSKuNNA) ;G$r4[ZV=>~;X>ϽÔ}sl&A4ykw9cVA .O ܡۆRpҽlL=ղrL߹Djk%m#_6 _\N/g7}Ĵ|9 eؔwUx2++䛺"Mwz u92򹄅wNb}V S2ȣ[T_a^"=@Mc>\Y[l'";}pmZµۓ2ҦTѪ̬B;R> 4:[Zx{m-xyU!9w8vP\͇bzNNZ0\:>i0M2 J˹k;FT:]!箑Sȹk>7oT Zߍoɼ !DYh8DK|1}u5@߷] {|Aj-)D>!GR=Td>|< H.Oeij.o{'l^ooG~Pv%5Y(dR ~hҢKolМYw~ܐh \OV帪sO8z-'̿LZdP޽֮,N^qA@~giڏ?xdo}G{o>Xܶ˴FI7ŵ y HbIm%x 1kUgU%n,)6ZR iE#<̆o%}5eA%SUr#LQ KKz$>閞Ѳ KX_|TIIt%Dꇰm>$2%=<_2!w#|̈th_MRkjuuu 5[osV…;ueQ7J:Gx&OIKcڑU,\wdL".0+->.Pg~}^,]AԌQ KUǖMkWeƏTpݙ̈NZ2<Y7Q/cŴWeKSng5"TuIb|A$LSxC^A}1(^U:o|3gZa?x,uk\Nut rci~"NukYP֤jՇ: tO!cJ]Hv"~Ho<q_H(a>_D|b=Ǎ)7tzæS,k ~ůOW>wTP93O"D_XTXxWA_q/o_ Eh?ϸ#{s,bYTRU^Cm чٖTQ%D*s2N۫i~!ⷈb5OSX򙄈]lчKD-#~![N[|Wo3o MnWRBm!oY//#D/Q^pQ+/R&wtK~$P=ė ^+ A|=$ػz|s_'sqjw _K[S=*_I{_M(7tIOwRBERr}D >d={E!>Xx:g%FWs̤U>9rOUqkE>׿My}v?l?'"~?Y1x&}L3Q#K Q_N_A;r'bgB.kI&ˈoVKw? ~bKj)%F^q#鿁M?oT^ q}"[LOŊX& C4ER_H~ a}rB/sL_CWLzʫ a!g)֒Q?ч/$}¡~ G|_c~xE$S1>=DTE_w|IPy9!W("~b3|%A牟G/@H|+!_-/e >1T??b7T^I|bE_H<G*/%D}2Eˤ屮v>ud&@s? S%M1u}rBa_8*Bg8+!~!)oMG#iʏU3_/"DIWBϿ9}Jև'X>+h_ ч9go!wB 5~R|do)F|Oʐ1ީNRyO@/'Q` y~gW9O嵄__ -?Mu:>DL\zBӟ"Za1X>/¥CK#r~YR?g*E3L~,BtK ~ė">3 Dn+ _F>SN,_FN>.ή$9J⢝9\#~,LA;S_+ :N?gsj@m#NƳkgSeQ#_پa P*xn?<֢^rƏz8>w?ֿ?5g3g{Q 0#HmX$xC5mu?)?|_fFbѭ715x;zR-J0{5煜, -XgS4YxiXnbVmOL-%OB~eix| 0;y*7ZZ6'漥6$%wu_qEu{2[M|1ݒL̥᪔}qR3lRpe(Xv(l8}nqBʳn/"mTG|IF.dsU`U4IVq5d^8d,8MΰzŒUC: `qyТCje.k{/Q9կ%*=qF0aїSi~Ⅺ/?DYa?əy ?KhDV}7ZZ4Z4?U?ˈ;%*#Bx^3IoL&<ӉD^3CZLEo{-E,ч ~~_>/$ԟո?a,K_G[D{OQ?'k^c{}?xko{~6X-V*BgQ>[|cr _ xm"o旯y_k>[|k_F<^Fk6|!}ɬ߬@mQ- kv?I?ڟKRm B"ڟ+vZBeC||U&[xO;^xko{ON?rڟ! \~.Ѿ:=hUڲY; J(/I:ȯ_XIIhD|z?և>KDni yu( ORcNB"G>wRv#뉟W7^iчVϒ{7?WDo1i*_D^ׇO#~2ķ¿gߪdݹ^{7KS|KSy !{Ca}ķ*b|?@Bķ^<0#!~&A¿}q_'I;!CN¡} g`AI <-x ANWc='=UTǺ<{L>~>?X{vO$Dwslj.P B__B//%D~E|9!C|!'xm;m=񵊍GgBO7+%?%NBekI_ķBįWHO[uJ/$~"$~.#ULdWӖ"hkQ)!_l ө|~/1NyA8^-~dڢ }E>aI, aH:/ N!f,4;bX3m6̢'鵧9&Sy!ڧ-Ģ/W^7m*PUh Ba%*X2i)¤|"!J$E?1}5ZSoz>[M|b웾iS B7sadEۈ/Q1kW~ևKtAR_wnjv'(~b R?󉿄!TBm7@v${(&+N6i4ݢ?C*>ן"T^M(/7!cc񓉇}E7*.&L<.ң؟ ->ttW"WtȢ!~6eѧSM=~&*/CI*C#o~? Ĥ*$D|sA}?J|b=?fs?7h|&)/&nQyl, 3=բpg|"R?O'VAyY?ä[-Po#QC:M?Y?i MzKy}>dG/$\_4*!"U]&TKa%&ޢ/%~/L[ #rD^wYq'IQń^b_OA"lŤ{UHc{-^g+jPxx+-*P˵+/O}O$DxI›:)r]D&}V BI[Q?CLχ,0dJE޿Ik&}ݢ_xG-gEywoPq1I߱үߥZkT'Mʦ+&nj~ED| !MK ~?Obq.s~*Bؗ}RjEz>*k 1>&E7w*_B~k_,w/Uq?oU!GK<ʷ_Ohw,'u߿oPG>m*o"D чO(?Cx/%~6߬W_4z+G>~'GG)_"1ig¿ BX_>S F͘-R9t!jd>Ɵϣs8iL>O%LW?So*VDN,E&/#ϠQ%V\H\T"BE>ć/.P?h)__noT}0ڬX'u <1O D(_ 'bXJTE]_ɽ~_hˉG؉_G AFW?_Bko%^ZW)}m&:o#D]OzBo0ؐU/AZG5e;{t uj*/o;T^AZ(zEA<Z8zCaKtRt a%>+MJ 1~Ǥ.>_EbE/oI*o#Diч)n!_[ d>俕NKZnmUc_kR'+k-G|7:"GLzE#LkQױ}?N|b3I7|!}ؿR>~._柮W<`ͤU>}&1~=ˤW|]m펷sLۢo'kpڟ>פ;TI/7LzE ~"咽ϷpfdNgD ž̟/&~ ] _Bm%D|~ZIn+_WIU:MƗט6>쿖:^|IoPeh7^>쿁 hқUyS>ْnﵔQ| -:>T@1>ˤ|"!nq(A}IS Bפ[ǵ%ֿ ya*_!*E~IWY"_~eK}q'LzH ?Y[}ҤC7b̈́M|ƤZx,!F?gć/Q -W}R^/u xB\?~Ky\7 O D|뻾_Z c=T\?xC^?qbWy !O/UD"D~F|(w2o&=aGN<&K,TzB?anoTXԤ(c~Ŋt3cd@mXկįSB>}eɟ B ?NS#MT9$([a"%ǀ6+Ry!o\lEVl 4U卄kt>O%~"q46͢Op1='HWA+%~Řѱ "D,GW>x&Ol&ku~"~-obfYx_Gm_M$db.Uy!_bҕ}ؿxs-ۥCa%-$DCbE H/!oi{I1\l;ۆOcO1&Ovgѿ5h}ؿbE>lSU^AsIϴSTl f3TH==DaɿgZ5M79'{Iw|*!<^lч;xϘ7*A D_h񆋽\奊qx~F{I/2//6++Mzʧ"2}591ul }m>Β?p{U^}I/l[,<쿅 -9 6п_eM4P#cǻǾxB/߯<ϣ!F'q}'׾1*"D(Մ/&#~&! 5ͤ  /6$~>??) }¿OTq9Y[?>G|+7 ?*sb_4K*I?|_">ӗM+Q_1}*LzT5I?">_7*#D}#DI|!wLwI=Kxo6!h?.PTT^#i_?[>銸~ ?~Cq}/T^Lʋ? -'*}~/F>rEIp2=ߍh>iҿU@}71' Qb[Ÿ\-Q8q9>|7s]Ԣ_W{c+^b_b|TyAfW|"q3W[abٗ:JBWZau*!D1se|E눯UXoTy?}o$~"W3k\/$F'آs_B,@+?K|pKˈ>h_@d~e !fz+!Τ]}_OtB6o%R0b~wŖp2KOd!^ƯR~^m~V|NQB&]kчk/VDvԭ!{(D-'V'}nB;Ba#N$!WQJ"Bˈ/Vm_n҃*/#DM|9_A|!J>Mz?{qW$ 2MHU*QDwBw''N8=qz鉓8'N_z{wbgnw{o>W͛7egv QUA{|+Uzj*^kW )zA~+.o"D#~Jz눇~E.̈́oE6ߤ[$#!(-ב%|jʾoX?/Sˇ^cN|pM۱S3'eɇ6lױP[yHEeAdݿ%樂&ݷPν=RDE,MJST*y[+u~]ܳu^O *i[wAn=j!~?Eܿc4ƥғ⼚'Sn5Ҿ}oD#{Vu~"!o܈nC@O]qarӊ'> =b$È'h8Ǟ?b HE1chUxN9vBV$qF ; f#XrG Bf{9KsF.vx\;;0&ˋaZ:Sű㍆Q( u,~wmk {mngak?u3M'a3P^d i1BG`t`ў4qap, 3;v))Mb [5pzq=ۋ\Cý4[/A|W2.ÇZ@w*.Յ̛csuDͫ5X y/&~/x`4hNoׅxL )˿8eV荺"Fi ޶OO>>DwhdWȑޞtFC7q$ v{2=}ޘҞL%}d2=I%RgO&Rr^dHF3gO&:N&鞣=] ]@K&$T:sϚzL24;Itqi%'zR=RT]ԥ+P7pB v[~FEC&Dj{+FX۫uс.zBgޜHoϫp(N'^6-]C1fGvվ""GL3N$=?mne8==Z_[{X2>sz'[doyiQjvnQj}CU}"'g|g ݼ=gx*G{2^έgΤyE04jx3'fG]#>͑ZQ=aJOvr0l;rp))nCn|^[\8 U;.skצ_Kt*87 Շ[Sy-˿7 [>UV,< -4 \R1='LH/ ^|ҿ~^˓UwWZmf WCmkL̹C֋5#bT^?3A]o^7 Wr(ab#k ;PT4 =øsD݉vahG⁾ޚ籶m{|ޘ#gS}{ߞ^ ] ֱC-3ػӣXPe='2C5اRc<7NwGnWCw>[Ioޞu՞JzGzz!.N <'RɓN[Nl喜1-|!xh]OgEo{`+l}VM!ϭX!׏=uZCv91,'NJ?MqebuJ*ym>s>Axt5{4dp}v5U%m"D"V=XhՌ~A v^Z/-g j} r__:Ғt6hٯTmBKym9_;=_LP'51$>%0\=>]WS^hr4/s0(QZMoessbޙkE]RR{^pNӸOߓǤGGЊۅ[)%lrZrn!#n95ϲOi7wV:FxwʱqV.]Ԃ2x}YZ/MK+^nNM+RVILzk-MSY2zuh/l_"K$?^I#vl Z.4ʠNc0¡[2(FV -8Q2OYҹb,s_ۼ˰M)>gZA]Mε@3Ez9gIO@,8 8\;H =D3zxCɧaz!{'y-)9`Ng?rJjRߛK;F䙡d!)&An|eh+ć_q]Q>2SBO!xW2:Zydo-XpaLDp+ &z Z%4wUZ[¾@r`z@ZP*(bPxas0_7DY <Mq?qf6ayBo7A.rق5vy&x,B)OɨDǺZ;N4i*[ﺂ֋&x]_Ѥ ֺT4-NjmMkSZ&<,SZyѾNc0ڣZ;g/h,3vxQ;Ky$Zwr+ߙܘ|wT6sCoxk؍bmV A5Wک@͢I#Dv*PkhߝnSZ_FZeu1  \f v\ϝe g2q'#ty,a&/GLf-e2Co}qD}JLg?mz+`~r?>Sw6!Z`l@F:F:r2]ݺ&X5݀_yuߵ ^9&d8?)fOBggsfԬ{?sI˂T1/{$ɢvA'gU?O"<˜hBrs⌉r) [3Y6fkG9!WI@fEJkoS|(P5Gp/VK&=*ux2Lulu7ه6/m}TU RXlh%is2:gN&kL%ZAТq[tJF)uX\#zDz O 5_wݐQȐuZ$+Zcꂣ7ѥUHH1D`y} T%<T(8u,1QU" w95t&]mw3Lu}/Ru &Ues~[y*vnu ԕ;w^,4*M'aP[+7WF&VfR)Uw^3t[LcO9ӯYğ24roh1>=sbNƬ+ӫżE6?c1f)aכ8bL2;<`Q =RLA=?+{W~;To5Mr*r˻*UU} !ڃ+dMNjE]Cu,Ͽ+zJ^E2m1(ۘR=Wԉ5:✢!"x:(v]_u6?'JY*n5r4r&|r+0"* yzЙARϣR i=ٿϞQp๷aї_WΏγSom -X2SJ; י4%y^GLjkE҂ϴ+QDRk/ʳҩb!Jjhf*-jV6<2G~H{afr!v]<+Fz9gudܱK+doNhu:\-8o[Mz?o-TU?BgoR/PVu'j4[ Ѭ ]HͺRUۺQqC^PWrCdM? PpVC ؃YNWa;*uAWxQM>l9t]JB7 ȾHo9!<@M>b9 ~&!IlK]gx?aᣖs9Ǿy$}1g"?w /nyaK+}t[,JBoao D$o$DQ[}T7n7cN co( BjBw;ke*=M7" F&ݶ3ԡ^_dl_S>Kd!D|BQɾ}~,7>?'%?EyI)5JBg-Oގn}Ux6?'~L}0~ү}Rے?GSXj}&LQ{_I]Ǽ=-7ORB_&OCB#e}*C^sՄJg*CI~!/ /o7w%~`';~oQI~'!-Mi_IBՂZnJ nS)sC/'D_)s]L(,k%C+ bu]":PנFy/"Mݭs̈́R;%dQ$J']컔]o*{aCxw9% M3_iΉ}C~g~2{%2 y <[CW\Rɿr62ypEW-N6k!~!!Wk\L_B6BeID|jBBwNp o#ۉ&;$DI.B+55F_j, YXUA޲Բ_**:2BU՜V !B ZkQ5J~-!{]<4_Ka_!'o }Z.FAķ[Q~;R¿U7Ca *JfBy5~_OiQ,^t;&_*l3ϲܗ@Y|z-/$~?h&t5!z ?WO}zy1AOǟ~"> d VۯJB|_Ԝ?S[BCQ|&\gZ;n;Uz!TzA=R}@I|B/7C[K>/V饖Z %RCt]sX4]ZAY?d}z^Ecyj_j_chĿڿA+,7~cǛU3(aJo2BoSyv ."0/"yŅ# E| w՞w?xW\}_Kw_'CBHJ})r_|@IzB*} ?D|a7#3SJ2BJ6C'')<ǏB Bg,3~Ņ(y[HA<+. _-KįS/UHEQWoEfE_'foH̲2v[*}[vHo &LGYAG"AAgDI~!J0Cψ'y_ V+}~IAЯT_ [NWxxER_jܟ x$o?%?&8%7ȣ@'/&J>f_"?* J~ ?\/ ]_B<޺s-Up~S6P.R /kYMq7j^yx<i~OPi'V1b}o9< O:K/Y-]ˉ_CO#~ /au=B7gaķ "3 H~&ٷPֿYR?s= /1r7Oy{TVk'> .3??Pj Y!YnSsQN9Ak&*?ɏB| B|A*B? w17b^a7LC}H[~=U?%~>9hhӜ E>1Gd#j~UKD3 !xgdJ$Bψ.27[cdJWxJD[5#j.q(_uYg?P_݇K,݃{J%!RA?LF Vy qAMI~%!X2C㈯'%P'dwb}⫈)?/1V?eRˍWZ/Qn<u*r}nowGi_k@}W郒NTz $~~!>"UhC<łu*}L >m '>ҽL |?Mk!D}ՂxL?O|+!_ M_T˒A}Ioa*&{ `C %T}7RZ!mLXkawI!=C!H^.F>J?YJ2Cω/_+_DJ0C'o- &@k(?Ŀ+,9t%.!7c_fpP_?glbɿQ&H|Bot|GK=K^2WI*ߣqe. >fϠh^j%*B-e ZpWPį\e9OT]E ZJ = /zHWV)mŨZ G%+@_*WwL_AoWZgoPW _sNBIד|ڷP⣕OH7RVFVg ȿV6ɟO?&@&z*}r[jOGғ% I*= L|\zyJwxaS k*=K Lfg\Ds%sTzAK| w|ɯ&D=F o/J-4O^Lh 3 -(wRNɏ"~j_@_G|9!SO"BO/Z&uP ,#R(R}h>DT+d~Z$X -">V@_ZkI~)!>ҜS~f_#oYFm&qþA90?rO y>g^ձ~v-v:jokvl؉OSO޾iߡֽ{;6wJV4yd _O>ig۾ZZG**+ "Ed (}75a=vv詾z&u(biR:|o U;?G,r)#x_KPם{vn] |LJ|H-wl w v\+:-f;bxsKޝbx}Vh=V)_|Uxg@H" hI  nC@O]9arӊQYzzHFfO{鈍/#×ƌ OV999hB|4 Y]m`qD*;{4Þ2lخQ*. p߱0jmֺ)s=͒c>/x; ]񸶝;vw!>R1-.)|NʵԹ\"a36b-.FyjZ=lʋBjѿ"(Xo5Mxŷ1K |d xd z6tGSV9^Ga"S9vz J磼 .q)>| '_K;fw.e~jl4yuT浲+^ay<5`4`&>{!-`w/s/nXշ}T]&Nv헌9 ۓqC&${x[_wO/Sړd_W2/LqrGոޞ#DWٸD*s6P.+hɤW"T{RtZU"Ȋm uўDOf^D2L6MNdG5dG: M88ӝ<9XK*NuzUK{!S&T PetZ?cx#AlԊ3m+3*b5]5W&zT4WAq{x˼R=^KA58t+:͉& d"u+Sצkp ^3s5׬WDxFD_w-;リhbp7 Wu$)ȞT @mssP3ӣ>6UW+w:ĭZ${θW[16Uq:qdo\pKL=DoN۳=H8'a)J e([R #"w _;J<_=q6:ΤyE)wfofNNyRG|#^=EubUk?Ωܑq֔ ֡ro߯U1kAje'7;m;U*`hHl>t1;pwˤ{Ο%X_C rP9֕IAߐ}W~|FnPa(Nuez}jϵ*ZbZ6^]^g}1=`,<$F{qG!yڢhs/8Jt N(ScR,{q;9vWh>FM1}Mógp\}0R*nocOC̸ oNT^|{tv'-M*ۓ]!_lsaA7j(Ƀ,Hl9d*ӕs|֮M=ח<͍T$=p$+k1㕺oLZo|~ |Yy?SVX3f dd_:Q(I"lrzyeH/OV u\Mj])\ yO$23RC Y/t h_!(zR]N>2\|u{߀^9~ӿG%}ф&1b @ O%Naг:1::Oԝhzt)S1]Ioޞu՞JzGz*6z"z,<8Xp;%K2h!cZB*82K]53=x~bC` wt;GuGh>$ƾ_^olHݱz9x+4qB]WO&) dvL |xkWWd&kSEĮ7, G0W5U?BnnsƂTw%lܨT/>gGɍ]-!;'S]G{TpĖ82HA}:%'ѯMKDoEGѪK&yjTh!3KG{TR4>@LiI:MWah%r܌6Ԝ/&\LO(r''Y'uiIrֈAVp:fCh_nO -/Cotd7?m'AW_NgJ K{:YZUOI1ia #iO o nֶ:yR6-3Q,y>F>o l\7J噢cSqe*Yy#pOomtwqg Z"E_Vp_.qo//X4Ѥq/uhX)Ǖb>g#{ܼDFoNj//_T ѤqskJ`4E,wRP7Z9p,!/Oe2sŠYn'7q砿yaեX'dS"j+%G J[<8`3E]rKYYIc߳ :[4iZ{R˿Z)C5;Bb=t'ǧS<0՞-[=7bMyt|廼=7(b#y-_!z6 nԫѳ 3 F6qw'C^C:fyFZ]盤>)p,֩A{J![va jk<\7kdz . _7_ϔA:Gbeߋ Ay[wK Z-46q]]Ѥk Z+j=ک@uI#43"ֲܕ_A7cV|C߇!nLq/h>И3# 3{zky W0X?WJ-1kYh_P $0aFJW/呔k=yAȎ r릺=Jh#rx>|falt`5^fu?u'gdJ:[utb&:8x+[ەą1?iKɋ 'VgJݞU[b"/-XےL%cӉLr8I1j,SiXx2f?|;Å:@y'z2d2}VXL/ƾ}z;RT+[0~^tl@ ti58#0dHP¤ @gS1G|uI5$=}TcTU;:jNe`SJgp[ JWнeTuTjU;e -<,ccj5z<f\ʰ*]#a&fSd]t:םS l(᎓P:A\Be'bĩdւ.^ n[/Fu?Fw\n:ro~IF:ySe?~$mmNDel :s:)pYmnD@[rjV+}tJ]Uhe}P=سj 5]VL?^\.㾯әvJ| *c*zϦW)J罖ձ.`9\-}LKUh6ٙf3ձفFe2ɾQ4FcXh%̵8`We}u:\U*c \Z n9f\7A=!꘼*P&F增P~ ˭P_?d1nC5.IvW󙢇ꇻZtF6پc_"oϫֺc\,J;+і{&x.)g U?ԄWTK) %y͝mN`Whǁ\հ >w1wۤcbM˻O*ݵmIH'NK&%cv40-{ˆrOuU7,lCQnp&䡫`Ą2'AbTPcF;Huȹx?r j̞ jdW,:Ml/EEUl5ҙ~GTzN%piI+D.=p)BD\;Yv?Wή&~:nνW;{?3k[O5^1䓴"~sJNl #,N~bVQA^a:%@,=y%[1C1_8Cߘ#~V.YN#>*uAxQM>l94t]JB7dew!!<@M>bW}3If?[pPJh/\$/P~o8|o [vڎEkkG|~S!W}'>UϵAbig 95y&>.k3u[. O?9 uWDwe?y6TMϻ5ZsSMyH|> +H[IP?_!'H|ɯ&D, п&ҿ DȾ儨zM0>l$C;M⿐kIm&fB-Vn殑Bo;~׸꿇 B/U5T'ZBm~FJ+x|d"у9lOy1*4C._IE Iy7K~ !1n0Cqky1s[IP?>?)w徳NKlAN<&~ gTY+~gUzAo&RǗ[o$DzMk_K?:@=`ZgO*TOF|ta$_b%rTz}W]yqA^ҋ%"a_%Gk /%^^LKrBOwþRC*¾W*^gxU-y:Jo݄o7M[~{$wv/g$>!J_1ÿ!>.Ig$D|łK~W鋒HB{4e1>JńUy8bZxa_Aғ%%!{J1þ',)*!h7 &OW陒LChMs  o DFATz/'DXaK_!t'D^ wPFTU"6B߫  a녟ooy3 hHyJoehA<;M>%QwC(I.B>CvAnBg r/3 Ѿ$ޟK$/ ٞ_N?K"B B*%$%k5З޻J_5h|#!M-d}į&} ~ t~SoIFB[o"(_(mZ"w D||x]c}W釒?O0&;J?1ϏTW?},?6OH~1!3x/hEJ9X_*yy+qF*V>Qs [[3c_~G2B/'~9!JJ>d}"~%!?|3!__EPI _į%~_%u YO(o9P?@x"9(< 'PV}(}\C^q[IyאBZ,[?D| χUJx =hǫȾ$¾O-7#"CI9yOx?陟|J?=b&xȟa徳xO}6~J2CcE+6j,wAǪx+JQ_hc$h'C qBa?ńZ^i/&gI54BǾx+.y/Z-'~ D~ckWZVd'D|8kW{ !:BW .&7o"FBRBȿe-ȿ͂I]į!_'&%~? ~!/>"+ <}D{,Rq/>ҏ muRAOlIc*kmb)ė '/%+._LIz3{@ϧQg%~?E% _$AGz| 1|u|Jk*' Cv{7 >;I7 |Mo'!s?{~]Oy]KI Zh9_rF?SpOBK Qþ__&#z7?k~g\Lk[q?JB{?_F<+./_n_'א?W_K (įLfL' }K uVwPC!>^䳏hzၲDǼE2?+G=x7McjL&~?WPz}_/$xmXJ|-!w}O#~!,JWFyU -@W1#2HPƟl#ƪr@Q1I,AZD橴 bė bOeψUFVD뇈nEVڔпZA"K,=@_ K_!Kt%6d_JK%eyط4G 4k.z'DM_)x=_N|п?9_2FG~ *m"$Լ *Yx>S˫:G- `dA?_w_u" пP>4o !o7w_CKE#z}rGg"U+sLD9#)VJܬTz J߻TzA2BJrMv||J3Cb|1 'D~qBȿoE+1zx3~GﯿMk ѿު (m V Nב^_OwC{ H# ~;!Ƈ)x%٧?"Wb|JaGZ0A0+.iOc!tw">? %M3&S|2_k-·XT7TAI|`߯xA?PO='*[gQ?P"I~ 4WJBďKC=~?_ZE%)!ƚb<((z&|NBؿ(@+ wWbk%~[g mX뾥|`FcH֊. B]ތ2jW bƌh/!D4 W Qm%*@Wo$~̷iV5*mYt' пRA/ڿ[Tj>5Fo6CV+q}cu>n~Y%uTiA"rA4/M(/**_qф'p%񭂛I^#[>k!<ʿBתtCo%uiVsNjy5Dt?O&|?Z):B3CzAyEo&B-*_qSs#7^,;NBP)cG}o$DtC$ɷ"~n2N&B2X'io^Q2o~^1*=VbM'ėY;оS v y+._ (o)/UzWܡ (6y$)!?I"YTv5<^`!17P^,/+ 1~.@?_ȃ zM4M׉Iwv7 <&ɗ¾&mg¾?[P/Il~_@ ~?$~!TWbck~B|OU~?Sy9񵄰*J1RW 6_y| B-k*I?<y~ ٷWCl!Pw$~+!⋯K =d_$es/y|}wɠeEg?t:jokvlع]}ӾC{vlh>i|hζ};;nh 2QD߀w_smg} g<%=;ZuNpoḶ;vwAɑZP"M瞔:l,tߑ zկJ sWõ<1vȀ6Z(M)#o=FԀ8pGصŹ8dTW_ YK}6`HVըFi^{ {!j=R@tپaC~ 6<Fz"~^Znς&~-xy5k vx`u1wmk݌sxT{Xj)MIf{KoR7bDq{|уTձ=}A7:Lg0f4(IGG:?NdfplT'bĩdVsJU' ~Y5ݶTv0ƪQkz~=#MSJ??V@Z` [NcLJ>X;ysD* t=88rx`@ecl;g)0֮ 50`X׃9>kw1y_ eΞ<{VKgɄnL߂4#uLpmEY*=.UӏגH*y2TOW!E[$S*  :ҙD_W2W3 {%:D{ d"_ĵi`: T'IV-MjّarX)iλX}aSCpC>gUC\TΰWlUN8(om>7טNwM7`8DWY_㣲ֿ@N1_wbidoOW" g\ ?Gd9qt&+3{|-،7sbvݕ?)\ĺoAwq5 @W_H79)`o8Koo<Ǡ*3ЗR_{-Ùy ]@C\vDz+]Mo績i=9xukw'3Q6Į3I bBHr.ڗ?= \d< ŽGCug' NHUo E0i:>x0 {(5I!KSTSJq]9XfT9xE7t<oMN39;1zN%T00zjUmsȈGGo/ooFz*Z_tͷAǫO5SV!n(S_H$zO80Ivy|@ofC"e)x_9?;xx{_:yBUi]եe_qgOϞۗJ&OӗLby쏗dՓmJ&2dlo7*XtOkc,S\WrF#WnktFi#+Bk:Q,!;'S]G{T82HA}:%A;/\lu~~-**;bE=XhI~ePDpW)IJ9^)O)X륢IZ9^+_Z֩IcWS zhҸGߗuh#4+Pkh,ȴzϾ|JүZky#-Ii `seWcȻ2!`hcBW&JCA}[¦ qXpNzNpB$%$` }bpc}|V6By'&-?,ύKYS]H S0F=n9r{FnhиSw3 :K4i^guhx_)#eP4BQ}^dbI>)Wގ,DG%[Vc7 0c KyC 'z0̧lo%TJX2a&+}lz0H%öeޥˍlףfPHS$S(#Vd$zq#ɧ}FΈЂ:q'nr-6E4od .ö3-{`u&$I!Cs2S㕃}W>z&;^M-/yj-b˹$miY07#/  r|@./њWS? %dyNCβՠo 冼e; s=h]$tHI~ŘD DwV,q0gv#,c\3ҲV%5?l-̳OI/f Vy?uV:FxwZ_QOv S5x]SVF,`mZDFl͐Ƥ#,Ep_+Ev!W[1ۯqUۧh-`+cራwE\CVN7guQ]6ru1_ ' R6`in ʛ'Wi $upAQ0\<, Ѧs!y.9ι:7<[CXC7ܺˤ55]6& xTIdn_YѤ1&1eLӲ9g3()o$I[Oz11P}>7Xaه1{Z+ӥk[is#sX {jAA-S;uk]/4bnU4I{yj~SDp :v1nY+[JrΎpsq \gd(T#C^ YhGzaXgV(yT-Φ팛N54)A]xZtZ?}k*H6㈟qrTsgЁKr(14\{0LOY<\VM6w5wR.۹+49}69@~yl>m~|]=\NlcOX_7'ݕ9ӧԪrΦ{ҞϑuۧRtK]#XtBuBxb\u\Kߴ@w]&Σ074-ǻ%K% "u*N$8RוH%3uo2c\Ё3W9/NʬCbkb9)cWwd 2C+*Z?+;*=p%[*Y?īxnk -1WeW$~(Z&D įAWw~wvB;1_I[QJuqKLB g ^W, @o? ~$儰&B>M|!3W .!Sj^?s:}\ xYo$}7dGJZ6ˍGt" o>{.]Uz#D?A/$">L|b)*!Ka*  % tk1{Jϒ儈gC_)?WI~!y~?/$m$/"~`KF;1ޥ <{9w; Q%cT7{#r=mgߛTz"ެg -B[Uz7BT o'~ :ޡһ$%!y-<ݭ$#!7@G&m*}X"~> 6P #~'!^>i$.s7!?g!HBKW+=iiG Bo?K0foZVJ"'>N[/ D!]+_B_#@?"~)! ~r +!SWω_C_Np Bm;Hw"G.BߢK)b=U_*3_&~ _Z/*Mjym_UAޒz28A>N "~u'/~vH¿<4!BCPߧXT%O(DlABaΟG(uW^ײ$EJW\h/lF7Q{ FBi?ˣDM>!wHDKUL  + (2cX]Rį:?4:AOtcģ._WW1Be| G_A$%! 2[W~5HBW<@#y |ėlյuhK𐯑Tkc2BwJbg[b%t!D|4_*#-TB+ rるI <]?k.Fǟf%jjo&D|<_MK _EQkLq.տU6ɟ'G]+5ȣ6_tԵJh [N| 폇6'+.t/'D|m!~!RmyBWk._E;kב*}п8Ƀ_+ "sPRo?${׈O? .tDn/Mo_GWb_/q_&TBG_.}Lj +.tVW"~{_CߠR%D| {_O*$2@o"MgT:% b,cXo|!61/ ]"FB|!5LW>A|`{J>g ߧ ç |%Z>K| _?|N/H~3!TG_ $e~/m3G% ǟ+<:qA~O%r_77/'D|}_I(;ķBU"C_#?V駒y)q C3+ٖ,"_?Vx%x^w >&R/_.zzA A~Je|7 ߉ +.{K $~ !/ȣ_Oُf[ 0@^kYopD"D(C$~H,?Y73%× y|~~EJ |+s]Wc~x|ǵ N!HOI? O|$s_ɆkCy]v-s| 5'wKBBz buo [J| ݟ /#~!䛈ol%ķj^#vAܟ,Vn1 w>fx%UsQxA'~ OǯEM䡿 үƂɯ%D7CC_G(v)⡿ڧ^1b =O<$~߳*(yqB/ Fe?Hr$ OJG <7"By'UDc*X/nozn<ң 򰯇RyuoPW}oTA{/;P_ ~}O| Jo"П1ԏ_4Y!~ ?_J1~~ń7%o_G?qg⿣7LSWy_CCߏCk)o!VT_+FR?QNZJB [{H }ǩ a+$*(~t|U{JKXuX-儈/$5EO5xB_C\i6Q}:(u2~ET,G H<2Z 򫅯zg"~Z-?Z4Mh6"~6_NWcE|?or!/>;dВZqΟ[^Ӵv򓶷owuގ͝x=nIdu}M;u<|>RQYa("{o@ {9Զs>GO3QU-GKep^:w1DkqX^ϵBQ%.A]wѺ}_w'LTxr*חG*mחc|:G`Lxx9Rq ~]E*M{3LFhEjmֺ*:܎6a :iXOZt{{UgZost xU?mG5a^ rn\+M5TK$!cWkP ?M2_7 LyGfTy}zTjYl3p-øί 0̷ '/\:,?$~y+}}Z tiSr>dU(x% \8R$_5:M(9%t&ߓϻ']ӨjWKn[a0s>Axt5{bj{̓k>u< 9j`&8ynn;-G)Cx\d^ ?Glª/ֵ޷VβܯGG5;x+ot;X.vk8.]}C)d;@εȴzϾ:$o(&4:^BerU9ڝ(Þh l'Sod MƠ-kx/F|ZBca=c,,%cZ{!~Kϵ%j -\޻vct ϫtUW:,v4)7وwi -N[EO-5.r?5G2;Ak\n/Ɵ%#nvЗIn@Tn _HkIG+x;R7Aos6ߴMMwI-2r ;AKqSP(V Oo8Nc1ߟ%l9sU[䵢nZuʺ3uz2u%RLtP}Q E"M51ӥʬCbkbqqk2'c>~e NO*tRgUvڊ!$AJɹ̓$D*+Y+cqƫcǫ k*TD6ԲSɓ"twTU)--טI>ms;m0쀺ں8&y"6T-BXo)[--_\t>MujHCKXP7U6dvj"H>UYТccM quJt̚ձeقe a U\)Y"P b]hͬ&֘~xi$ÀI#qGP>WTxU*TeFS:hr*}UFO8ٛT::roK;cߞ*f{nN•o R/mVf]4|\9:@qjOYWjت!˷KL$a"ݧ0$Q]~N=LuRK31RձZwXg2Iu~?zZy*vFGe“4@7[̪r 5̌R83tTg*uHӱ_j> sKs8XmuC+ey`NɶFU=9ٖE+t,[J 72j N"™+E hթD՜ UC2>좠.H/ N;(ݹ Ou\8Tjod)莔&kóhr橀SP -&a<-R/e𓡧{ 9әpgL?r.n[q¯ِH'aiE>nK'OMlZ$tvS2H%c{ɬq'B5;/եz|:֦J]efw3c;zϺF{VeSݪ+q} :/ݵaչ2罺7wc_ |D' zYlь۵so&YqόJN5 =f|V=9.Sd㊓4F1Ihw _"xP)Rl9)s _L<MǞ8gqx| CJ]PEj}[o|mߥ!}ScQV¾a4#s?&}$LB7قo/g|!#|TzGLB#~`O\ Q~<@/HHޑ_F* ¾J9^" ?yطDx%h| п:ү?0,e<7FpwJ~! ķ n'w!o6w ^CCL[$ZB_ybZ5:@ A?w?_=2Bįyؿy?s WI~{z*.Z9N k%Xrв?!=">WGGCz\c(o5k ?$s7?xe$o< 3l" tZ~4+H*=J7B-(7 ^Mc%B-@+fD,-y2[I*=M7"~ Or5KKV<οz>{3 /&~ O]Kl~Rjyˈ/'w $Jp ɿB_'rϯUu:o$}'Im_MDZAoV魒yV7jy=6]rJ5U;Eg">ELAz,JwK<:ߣ n|}^/>g$:k)DOQɟ#? !LPꗝ>'$qujOOv|$_>E"+J*B3þϩyϓB/_#XGe*ȣWO}B /?ho_.'Uh{< !}~.K~?P5Sɯ&8#kP'_O1(')/&5_JA2A~ү <~6rOZv|j_F+1Bo*>Ņ.>}t|SKBBdʣPxOb빂}CIP>P e}̳^^kΑ&:|1񵂲@|ďC~ /TNhJM}S OSsk!!YryC c h? 2(_q&_@(G\w! ͕ B?!5 (.񕄈O"DԚ23#ńhY>N|5!ScE¾E2zy ZBWi(嫈Dк_A!YP7-!]MS  OCsk !,$S_@P/B.!}]ů}.]5oXCr^^q ˿U&q]¯/as_l:矷k&M?ZK뛐.c`yܩo o'e]*JB/UA;F8!c?傴~]Ւ_ER)m}WX_ɯ#kU7C:FB=M_7¿G_EKnI~5!OVp=w ȾTþI~3!Ə^Cm&~-?i-$ 29KCg/'HG7(ɯ&D1N<5m!%P_'XOoSK oD'Fp=n7(vo%w&{:[a3*zyJϖgggwR|v~^Ћ/#D^L|L/C/QeRd/#~ TzW~/WDK!Ao:^ </#De$&!fgQ뫷#DA|\ީһ%?f&R}ߣ{% !ww<Ao D?H| O <0/'D~ҜDž B4S/ D>MBA_gT/!D~Va爯&ϫEɯ!/u<Zzѯ_W$r<P~_-%DG2As? >"~O6$}ɾA~@6A*= a$k!ʽ>y\yyeJW<?+1zXqεr_ xSqm } !_?Z&u">?k,?O?P'\D,yNoc&SG|P˫uDx< ~ /$$B~2񕂋IBRkH2Br .'į | ͂I~k!?u[H~6C6$?NB2wj^][U,EKLp D|- `!;:+w8\!_eA:|acW?UпP>5ԯk a:~Fɇ8uyo$^}Dx!Z- ˉ_KU_ 7K:Bge<7_GjC_G-1-`jΏlO;3qy5Xc&[Wm=  / WN;_DeJ_2wD*9?ާ5yط2BR <6g <_Vk?t ?GAOq b|K_AGT6M3 |R{* s}{TAo L:nTO+S\/UX?w2QŸ/5ƨ78R*6ȣ4ПQIX? }, 3+~sWbz dTz7[aߣ_d{'?~儰#J *=I?Qaߓl"O6? {K1Ӊ }Tْ_E?Ka_,@c\o)!H_F R_H2H _Ew} Q _%r/ï&>F WmkUz:h'u!o09o~mΧۉVo;Tz7bJ2wTןVn_AGnW '5ȯ'}X߽PVo!c*k((^Hr^^qB]{ <ֵ!%YX={U}J A| I~ '}O"xJ_Jm,C]/qBy} *H"~H

| ~J|5!Ƨ_+XO\_Z׋Vė¾HOW鏒TAjA^? ?} ៿` W bF/MyK>1o8ǵ " #ɯ"U*2ȋ}Z1.59>NHwwė RLa%/]R<4طLeReV.RB| "zz+Q= g_)Hl<4WK di}OBz˙"ʦH7Q"5y_NRAZELBW¿*%'S 6Ϫyo!C_mC/N_)C7$B/@!|Ocߑy7CL?!x5J?k1>$@_ȃ-!-i[gx<;r+qB?/'D"Bzo_A_ <7+?JBJ2ig۾ZC4RQYa("{o@ {9Զs>GO3QR=GKe":t^Yɝw ƊWQԌbt 9r<6<;e]pʲg`C!Sֶm-{hs7Dwh?f5rdA'P,MI]$1gui_H*y2yTOWe Ȥxq]ʭ#1ăk3bA,=}bll۱bjFݎ'Mۓ<6ЛH-W}c[F}g،S\c䀧TwXʍx& cn6vSCp9QoZ! #jJ'7nY)İ8):ڣ$QIA )QW_9trfCsZ+M['2I\d }{0"M :h\;L9 FZN-2-Zx7#/ 5kǰ ߓ .mϒic*fyz|5cQE8[B(ykut[(o9BsX_Nrϙs.ղyXf9ZFa%t#[G+F6|~ڲ~7:~`k }W"{I6 Z:< y4ѵCmZfx#dmNڸ }Cff p>%4:.a~3Dq~~pnA[xot)EPS]yw☕uZn`o ͷ l~P`o`iUP-6r<; 5?d:!s9]r1hOQO ."\D/VngXqk~!v~QvAZ˭az+ j,V3Zhsn] ӦNWognli"4pS1<_ȭ6sk 9 8{tc{rr!+GZ+5Hv6= icq3a,EkYw.8:H!wF*x?R"+PZ+%c^.i j,iz"{A:|Q)aѻhDz;%B6OY\vypnv*t0x@`Kr-H rt]."@a|}l}QUʻ0AwKQ,hۚPɸQ?e@ynޔc|˾)cOnپĉXSɁTf7uMj=$O<ѣ#iODFd:CȊ@mw,j-p{"1sjƟH,s4ѕOY !volF0lPs/ݡL`︪|Jʉ1UΏ$ʲQ÷ >P(?kEy :ոuz2u%RL@Q uckꚘ^e!59{p b{VΩެs9{l+U*|UYBEu :uˆMV_\?^sW+ 8fzBE|_euh2E5U5,lWj=gԠЛ Sԁ?c {TR+IP)ret.t`Y$OEyo-^& gJX/拔|A#~V./BǗD鋚ٺ=Xm(& !ExR¾}y7Ml:#/~&!IlA|7*u#ay7Gnl¾yė¾1*ˍ/}u D+'-$~![$vBþJRT> [IV/勂ٯ_䡿P?_터Ebk|q3>+o D4H76VK2BA W$FڣHDC: n!,{[w}~o&m%[/)v>;o$DtZF} ~9'w$[ { _i_.rR\ W귗};!_u~Bz-V_IM?[pzG+$?N=FB-'7_A^|5sC?uK׾>Ms7¾M⯶/CjB7@Z6ˍS* -*ݬu\] p D|JLֿV6}Zj^cTzAF|\X/>g ${Ju AOu?G/]wQė JSUzW}; t h?<:B/$Ag_Fk 97 .z.|JwxI+G|` J/2"_E/&~ˈHE&A"r^)WWͽC~^bA/tH|#!&~Jo1-$!9^^skB_}c\1Ik-מ'e,y|J9C5g|A}2Aޣ%c* W V[n||ZBǽ .#>ҧ%}Jaߧ_.>'̈́C_%]/_V+7Qpw[a7JOeh?~c;!]ᧈ)!K QLP?o!Dز J?3ܯ%5aH9kג_K$u oL&IA?xGIDn}d_*S" iC|^Grg>$w\B(^gy[!_Lǥ?+]K 5(.ɗ2/.w/k_oc«6׸S?P?}qB>e8B_ABBW򋉯\L/!| 5 $_GRBLp9/%~!o\MMį!r n!wBm;H~2VPַ!5W%Wi!mH) mu1˙Cm*K|BįZ䡿 tD| !fEHUh$}BaVא~զZ*tAwb!K"vC.7B^K~!o_<7ԏ4o#!_cFڷ?(tVQ(A|-!=7w;@'=y= 57I\AJ2CM?Wf$l l q}%=  |gQgڿ =FQ+'}؟cUzyzA=RODf'n'tW} ʧך =[Xu_+_g,+}$</56;WB*C5b"^"eZ^^ %\H_j4z/"Dw_!CBojAzz%uU*F¾W:< MzAב}3 }gYݹ}߬[%E}AWqwI"B+kI;A<+.Aɯ_ﻉo\Aߣ{%%![Q{o\Og_O'fJ1mG$\ K~ _'A=?}VK~#!ُQ_&/L_%/_O~YaWo]x׵d@X@+P/ "p/kh.Ӝn;:=S{^zuӫlj9̿3w"ls=sXޗ8+y^~k'kϗϷO]{o&DEzA?}[J~!o%]pA~N@"FuD:BoD'~jaOILbį"}QW¾_(v-$h@BqgTϒ)DYEbF'~!ȃ*K7by/y5E>J'OEKB?SKyONUi#ã%Prt.@yBŤJ3% !_ҥyI| oы:ye(Η A?s^U~[KX~}ڿ/"~_Lņd%o STX?e?P毨y_F| \MK}傈m>?|FĿ6 򫈯STEk%QkhAko\G tSs} e~6B(_T6пxjU,FaBy>;H?I|1PM-_|']%:v[T:b/1\Vr_,_]C<·t\FQT~! QUF Q*2ȣkOۿO@ 7 6*J:BoO<o=!64gǟ3g" ^!8ΟM O Lq" 'eFoGY!{,Ղt48 !xW o%Լ{D|fwJO6IbJTm_D?Sam/DuJϖB#U~}ɯ$"/0ԏZ~=jB%b~~J/7($_GWK5,Bqo Q7_—IFq7s 1~BAvaQ;H~!!>Ed{_HK|\ƷKO2B/  傕$a?>B|5!Ə\!DJK >J1ȣ}>EA:~ W}~C_BYK_~^~}~E<<kH 5$-{1?v~U,oJ_BWTA_~C[ ៯tAA|&M&L~<~I{`_@(CY_"<xLΟMs%~.!Ư/$D|NK|B<=E#TU}?/T*BW*?_H"E7?χ <{㄰oDx!oE6PHlA/"T$cbf-? O;͹Xs%b_I(g>|o$} }/y%7+TfVe?/&uE:LU7okسsS~(4u~ks˺Zt0V(5L6]=)Os\lkct&UZYnd+1uݱ{{˶/ ʨ{HmU/c7";tAhm5av%.۞Mke{X&fhb;6fQKڷuG4͢ 9Gi}j+~YY覬gp7 \ 3R* 7y[o.Ƶ#c-϶IfҒTZb,ͥ~5bx?CYDKsWôq*x?<]BN*ugK֖MսS_N>(д:ioiP=i߹oz|N{'H-9܅ȓG2kQԔ{-dr=P2k+q'IȌxFC͸- >%; w2;$ou!;o/ 5{!.)]be3ހ SݷYbl#ntzGb^89~ou͛Gsb}~<=腙(1[Ck71Effj67dP("i082LOy kU~M[Px@&]ʆPO: D-2fN RS]=VX~W˭Y3FNg&®wt p#*a:h.{3*, . ՝G5_:BRYG^@^- 8 N/E~{ \ٗ:p~?sFрJ>_کF]LLTa“וFmV㟻 #G|gj V,&L$ a½Ip*l FUR_۵xf6ɆycvG&ռmFyǞrwNZ<0H`q#0ӊRQGrp_u;!<4=bcWvxߤ䣪o( zOo~ [LVCoQ&,y ?t_08 똫6@? [oM' ,0L\PB7\l?c~qV5w nnUw^DuPNy =a^F~/oq~w=nj4:8m{l9{}EL_ C!` 32DˡTo}z`t_gɒe|u`ꠧs|}FjӶگ9hs"/'\NOSwO_?M?[ϖk)Y4y޶[tFֿEߋ3m#U#nU.}cBa=noZ/23G'&?6Yhx]URB"n{ r[QHdF'mi2Ӥ숓FH"WY[{fN>ov%QV; wߗ7NXRfR+= ^Ksu9N^ZVo!ŝ~m9O70ՔW'^#cĽV>le^(9;2z8W>㻞W; uBq Gbl"l>s `q1I9jge|yN:A?tIpR^h53=vˈ78q&r<>LzX]xC_zo ?7F2[7zo$\|Jj\R[N/n9Es!Ss,e β8 .-mk_BMeZIwl+wOqAٿ3YP^C }yY5jlj 1rM,X2T%'rlV58.+[+OFc BgM5a5~j"#oͧ ip B,NsmZ~a|VO&Vcpϓɞ#ZN Ryeç&KS8Ѫ^JL$4c4w1I<J/x݇ӽǼgR5fU']t2=>Зr}@&Y #]ȃR.l{ TTWC,: '{3Hx<.O q -&sR{LG Hםw1,NV} L`MYxX:6{~0VTWtae20Y8yIr@6ƮHۺQ;Ѩ䍱j$:qTФeXf5f7;=c6=+8ZɓΣ݅8"0{JY#CCZ۷=rgA!}/kdb}eʼDS)2zS>mȧ^QdݝWG=ÖM+flVzAH-.-cVT,A./~]S+ mwd]~"O=_/iz<Xy~-$y_`?\k.watᣖ{ίm|?$~ ^'ey7K>7?%P^ e׵B_H '[D\B'e.?}G _$ʓQ!пxj_&MZ5T~y_a_5JI>v{r.SO|\GQ}a#+Zm*aj aZ_E.7þį@l9eB]<'Up h9J!Fv=_BS/#!II6y?DC䡿ҿKnɿkwKJB*]oo\ONKC7jW)iO?$J;dדa'KL5hc}4$h}6<"AG/FOJ~;!w"DOIrү!"7an4!?6Do~oW[UU;I!+$OU!i!t+!^sϑ v+s^閜w?B  z%bjyz %/#ˉ/%+/\A"Pzjk-o4h;I&į%}o ~ ިқ%yf;wk k»'so#~ 'ϼ]wJ":ߡ{  ⵳?nO?"Xm(rB}꣎@I|ʒ浮*\nG"~Ϟ>G%/%1k1|:B>' I~ WN5þJ7;o AFAe9g~"6B!Co$JvBo$F]z`tnB/]دeMTjnBm^?j\poMEįzDJD.u__BBi߈sDfx&BԿV6ү\y|;!Ipw]Bw Qkb&DCab/CKx6W>v Tu-x+^qc"BYG^*Q >^dqD"6þ/@FՑՒ DP}1rAW_&XiyD|5!k tQ1Y'a#a:W C^qvo"E5kI#[I`?˷^GDw)Aۯֺo%터;w};CvP5E%*BCa!~Jsn|^M]!L<9_M]C| ǿZKFK*B*2į&D^RC^qD?@Aj^o&SY 9o"'SJ}vBLjC JÒ!(DՄi/vʳ& QJH*BcUzABjBTz"O&B_#DdI$LjLzA:P?ۈ!l¾ sUz_E^<!~8_Hy5!"/qʳq%eį"D^N| _$=!* _EAܿwJ~+!y迓vAė$D@VBUzGo"mwYOMȾvN">ah?97> D-,Gty? QF#:%!C*} ?L| GtI~!y8$[QOi>cQgH~;!,;w}'}/'җ <_A Q|\I[CW\+3B_ '!$~!I|` ?D|-!G\G#7|4Jj$G|3!'vL$ n'iwJN'~'oT܅*r J+׺xI<QފI!(hZ6]+,o4VF|x_MvD5ot!wȣ]'Hڧ_%5_wFJJ~j}*dk_DW))qB:n0CłX_i+~=t ė AACW ֑UzBD~<#AA㯟[Col!* KFB?I<&Up3?aL'ɾNBS$ M*=r?,W_(ߞO|(_qH Bw_N{J/ Bȣ_E/S_M/W_+HwWPFpwJBy:_4֐}o"Ag*-*_ ѾwJ瓺~oUm!ۈ(k7JH~ !]w^ɿC{I/[Dį!D}fA>%#!淏I<8;I' ;Id.BSǥ1k QND?%J_6/&HWEd4MER*+U? GQ@#>E߬s%W}g~7?~/29 ~ l헖Jb~k+ Q_-HZO|+o3_G; _"~+__(˿oa?_ O/?$H_O b}_/ +.vW"~F}s&EB|-kZ&K~˗CdqWsŦI6Byf(iέvBA!!~%Txt>Sc۬{tC<~Wy1j, 򰯐q6ńOQ^ny{eV5b/_wLBJ e} 'IA$5U_+GF]FBħQ~׫Rb|kį#D|2d!D Q[;~+A">ׇȣ m!g+ֿOqm/" ?~>c;Te!Ku"alX~ >Wo~/gh0~+[c{h>]K|z}ۯW%:Xo,$~!w :%)W #Co a0-w}Kt'B#o&aJ_ΡP鸕yo l<;N|BUEh!n7C0qA'T:- ]Nة%N'+.tɯ#gnCQMį $!E'qoW鉒y?귓B|x?c!a]$!?SV]?WCy8Sޡҋ$1!*} /"X^K%)!%!RK ~xJ4%'Q_.(/{SJ~-!Z1~zB_IQ7K~#k7n1!qɿJ5CljcyψPS_H|2D?e(W,B < !8{}g~ٷUJɯ2~0Mbx/qA/KH~mCrBė V"DB~/E@g>J?6EZ D\x ]|Fɯ!uh_$?t?@qBGkžZ}%"A'I~ !/%DA!yNs=~yuy}=y|5GɾB^?$|F_M%~.O4 eΛ҅?P'fa߅YBW˛L/'˻(DgʧsWA^W\/ޱ{{˶/ d;f0[_JoDv#̉+ھkFs8zGm2戕VLneR׌lD~l}[w7tM|#5&pG]Kf|y|smܓ,s#7műf8\/mgv}{"ҺeӺoj߳kOό{>Sw瑦1=.;9MjylxbNN\g YL)is9=Ur!WH?6-V&`Fzxz#js8l\g5W@rlFqMsG`x!ZKG^C>4. k󬭲wHdAg"4a9Md8$O'<4Hzwj\j}>>gǙMu dA/=4,# 9/y Y>w'{z-'{T!TX+ub0٧`bHNKLkZܫC%t]J 9KDzªIC-xw`J]J. X3Xr0y45479<0㦺WhJq_Lj&"rAXԅ^0p7տwpֻdz(}/rLMvl0u,Y'=D~3=a0l$M.}߅05.ƅmFr9p꠼C^<ߣ{M~N/W8jOJ%{eiU܈1}ofhsOv Ձ"bǡ#t5'{+ّwr k%6oLaJ]X:A՝?PxXhech$jD2nL/ ѡ;Tߐ;=fխVCzUP豾PH? RW_'0۳0ἡ qEHWi` Ӥ2Oh:0 Eb|GCkWku9xVYymFʾ@E?sT98p 9VYYwh b05=Ty49<> T6+Dٗ)1jy03<0ZlK5xo@!gBMԓLcMM k~]q9)|ە%Fe9awtzطo,20m ;# 09pf5XZ@JǂsG.}!x(}(vtsq__mCYnFQ N{ /P:6Md?M1;ҁfr^8`N'(O[B42 U~Wzܻ*Cw +^٣{7!NU m^a `cK=oN۸VcZ eY9)¨\8}h`/3p #d2HA}d0um˹rAs#}^5i[hs~CZ1yq{y5FOGժ_oziN^ZYWKFO^:ޒt5b9?ڢ>ϫ҆ ci9{|xXG> ωgXޏʏ꼳l9\퉬~瓮5I[Kk~qi51J{KmmF+?G[H߳V@ZWa=t^d9Fv|Rg!ײ4!7Thl{#qj9ܴEZfX,ٖ,?ea,RV;uM}]Lj|~5AL=h؜z?Zu-y+}F.l\ Mj'N{N{|~nZYoRǯfsRZ gX s:|p彥x~Z-wuCZ'C-o36| [-]a?ϿT2Rl%W|j̕4-Sҭ#! ˡo;V`4*_Q[tߍQ ,EЮh}^D&_nwp'">tx8իszG }b{O#ۉpWJQލH=Ћ'LE<v oۍKaԠFSN%7utEQQߣvĠ-rD4zC!LY/2^')t3ׯCz- gI1+AQo‡܅=M.9ݥ6ʔwB[}gCj=]6&Vp#x ޞ>R}_Ha/$_N+ViA-!~`WB|![J|#![&vUTþ7P-h!пVͤ_nncևI $ ?Ildﶶg5h oTZ++ >MyؿFf{ o$C[ ~mF7 /km}_G鲜?/WJ*F_QX/sQ;+*^ ƅTzAbRTz'7},o2I~9!ƧTbJooSyv *cVyJ?0C=į]b~7X?kQ&+ ת>WS߯%J_1ȣPqC*}L~V#?B̈́?j(?FzBI>e!)@?MFMC|'!so*}Q?"hۏ/!>v~__^K|5!-k >V;Z<5㇟ל^֯F?xTƿ DB F|!_X guo$ /Cao_(Aߪ;Ob|_}\n_&W">~O| :>`9O-y_O7'"M~y6SUK:BC߉ FBQD8xOsfB_$b(o!o!O[ e|mh$?c!nO@Ny6{׈._I(Dْ@(%엇}_)(秶oX# QKCkį'DBWc]dG H~#!_H|!/VC1ɷ"N˨};!__C~o|2\d9PHwC^q+̔wIǏZsDVxȯy="}kǹx+> Ѿ}c~/|ti'~.!ⳃBGeo&SY Ⱦ!}]ϳh^e#jEbB;/&%*"~ !MRB!~!/#>! ~!$B&{\Io$į\KL$7|񝄐%~v?H|!ƟC$i$x_f[aGD>M"Kq0rҿ?}>|L _4[/!u\!/!CP>OjέRB?e˟&ߛ$LGmt> 7_.=F?VǨ$ BO'އw"ɯ%y"/.2aˉD|BWI~#!J>l}"~!j&A9_|nG[1>P>0VB#qccO_KI9?g$5.__>agog t9׾u焟+K_)D}EIB*} FZuzQ?E~,1~̈́__O\9PO퍢Ǿ<jεo!/|//#DO!:Iɯ&DOt O_C ܾɾZB?g| <}jy7_O>Bm^ޢ <ɯ$ 2'?dp63$>!ƧtAA| @ަs ;Kglg| !9Y/S*P+ wb<*A/2sW\UW/Ue_FMϗxȿ5͂mTתzo'_ (wv7CE&;7}Jo1EE|3o7!ƿnG7 }x+لh~ _*?LjK b|OXV_Lcm@"~!i+,,W #0"/QPJ_2He7j^/:+ae/?s #N;F}?OUۖ]a K5ȣ&~ /$9!y|/o! 1J?A_Dį@JB*o_QTגI*Dm(ɿ25RUYޏjQy+E?̽ /K K,'AWb'o P<~اoeb_,9:6Yk žX~اecJ,o}Ӊg¾ G}E=o.6þelA֗s[E\"|_J2B A_Ԙ+jB_XA_C ܾEd_-!꿀zAW?NjB1k7cWB(_lI\4C#E؟jߩkBc*byo"~)!A~)+.A#kXo}/"$y_ UT$k Gm]۩uyE| _mXgCWtb$0E*WX^ UrMdˣkHgo%ڗ?aoJC3 JG qańO:D7O#NHAė~Y^}*JB?T2ȣ#e !wq? 7fݬǾ<gulB[|~ _ky-o%'_$k⟢̳uJRB-i/#D|>!Ln2Bm*= N<~Ag}uhNڧ _HyqA}^ݒ D2BK_NrBȿJBͫ8jAOիTz^M5į\EՄ$k oT-y&777[ȾVB.C|[w|5N"!ۻTz?[oa{/D~_s{_<MC*}D7BC#7H~})_A O_!IBy+|ͤ_EBC+oA7%'!7BW%v.qYW][[A4V(5L6]=)Os\lkct&U]mϸ.Dc-sVh j u-ۺs`20J[aވhgG94w"cnj?^01=|h +7x&ћڳXiEiv2|f=ҹM9z%7/i^7˩5m5՝ӄx([抜=Y艬porc-sb'purGqۙ]P4Ζ֭-0wuԾ'd:.m꬝l^mۛdoCQnDn(ۭ}I(^U?K.?ˇsG'`> \ωxme 9uaO{n{6Nef| iGGG9!r;?s˹Б$ d0ۢs?䲇>c٘qwXYXs>< }|n"&N'`2=Ytӻ ?ۏ?6@odDV' }aII}>x[?)dO*~E*}pW bHNKLkZ|$5{7T2o̱_lfqk_rh(}03zӎ%GSé!idAMyc+L)K=Л, 3)dkqrztUSB.?q45 uK֟7+/,ݝ:t/9nN0#c#C^}S͌Gsb}~<=Ņ?:GaL~6-#7W&>϶LMUMO/~HNM}yHɲRMMf ȵ9訁j~ ^SmpRp;怰oc9⛇.ed2BAytBAu5ڭ֦pv2ٟKD[F~YDkGdqCzBm7'L{֎t`ܟ:C'2-qZ1oU#O04۲7,8p}Оavel` kSS /*捍#bo1sס'X%| Tƛ`&n3PZc!!?grBt?bHM{ *9ЇQtI?;YI=.fwEƹOMeԫ^CY|hr41<ϖ?a|zheOwQcXC3{]-ɾ3CYj^TU f3pSbR|h}lߑ17T rlT}`wO(#~ ߢ}MirЊPMς2.ʅӇ{R=p1Y RP.Lt[r|HWxV9wl^O_cP,&[;Ɏ\lĊa$]:v.QTtN^Zgs,34>/"NpY[ޏ /oI:kQ-Dks1}ύ#e?`re"gKܬB>6\ h@XNs Lu?n`;@-R^)wsH^d/ϼvv HGX* 2絴}s#'О+",AWڲ!3I`(PMԌ3څ_%t FF=b SB"-?Em=,g9yXSs'}Bmy;}Ʃ;W;Y9ݢQVLx?uaaZoM.0Yk{7qQZXo 2c؂h,oS-36|҂ƣt 22ߏu#:KYsmÇ;8OIĝP?g!&ё'>Yd~C}{SS)-?;i'o`Rfib?ݺƥ8faX6b_u4Ը;gpfIxۢ+G$v3PKXkq@/x>ɓ1H#Ь䷢!۪&OWR{@UOr05\!dR\wx{ú>O-ǣOhZ5MIJn'WG^G1&^5J]nUHx;u컒eIu:tEW@†i!16$,P݄_i>]R^m\:{=YdkAKa9̣1h1ў|fL{"CDu{H_I[H8z- Sgŝ19+AQ`ŷ@ʄyN<םڧ.5?I]<Qxݼ:y_7k?Y>OzaW<.|riu]D|B7x|=Y¾KBa,cGd¾ }>:9!+ }ϳGku#4¾8qAاK?ڲD"U2þ%įص}%7¾7¾eb_Etyؗ ~j2?N9"}9NʜC~H|3D^p׋%D|!Pp .ń_Bx%fBėBW㉯ Լ@|`OTI$#} D=į͎ߧ o#D|==D?ˆӶmW"f*|JHBdzky_' !\^e#~` JwXރ@J/3C/#^ҋ-QM yR_FKB I^'?Wb}Jwx迓+ ak`눯~oPM_O{Jo3Cony*eykC]y|կ#k}{~Z%~ _$^W#yKTÒ >D<P>!y0Ƨ:U_BOI|A/O*2ȣOHڶJrBg,+)Ay,+-ok 1x? <%%ZH|jT7_Vyjy]M_K}Mx:7b~|& QUwH~!.7Y^NBU㛎#"D/D~<~i!>Y3T__MZBoUIN ľ 񵄰 JϟT7Y} B*B*Co$;kZY_G>N5ȣ_/by;0" > Fyѯe]P0O~HP#NSfhg!?Cxc OD.!P32:zl EI~aAv5oV,uhdˣ_DH?2 2?FH_B򭄨RC2I|ڿ ˭k+^{K-u%x+^ΰ)^l_"BYFO"z zkiDDdiD o >׾Wk:OX| /9jB/Nǧ# Vdo"Z-þ$e(w_VBWo+_M5'_#L<˩}#$Z󫎿*J~!GyKJAt|T:$ Q!5]_O!ߧQFBO|!WiC ɷ" IjBwJ}6y#ՄM ㈞+?Q<, [Tz"J~!W'~ !'x"ɯ%do%~ OķO#]_|=#D=-;ɾg==Ws <._I!~$;(>"D_(%>+~/%{5\Wxا$W_/SW_MjcG!IW:~TuL6D_GzA7JvBެݒAE <컋7~o5wIߡ; =9~K ?,?RBJ3$LG^RAg_.HϨwK~!b : ,:[ Y!?P>_4?_$?Ox1_b/Jmy_LAħR/u/!~ txFɯ D.#Ro@(S4A| w+$-aĩoTr W,|Zs}2F+oR׽-w}ʗQm7!R 4_Adߕ*O_C|_K|ϣ͢ <[Gxo4?ۤcַQvZ^.}ݿ\}A;/Jۯ풿Dϧx>Kmuzw_AA|!w'5h"vn]@wUJkz*J~#!b>z Fk%I㟞{6C7 '/FPۯmNCyOBy@Hu5!_+!,&tC(w~7j^U:!(P!H~ !ƷaC,t97~g/rcc%Dz Uq-*= G| _> O4ڷ ~O!*+Ⱦ _C?] įl!4sH.BB_?ZBy 6}W_E_"~اDI~5!KCe4]wJ\B* $~!cG򊋾_ wߣ < ? ?G !Ə/@NhY#/LC?_& Ֆ񍄐:[Hķj^%]J6IwJ=2?PV.Ex>ҼUb孿Sǒ_L?Ry/,ϯ& ៟C /'T+XW|Eۯϯ' O=>wį@B*  ~ WۯϿ$COyWCSGG5ײ._$o,R/!Ty#c _Iį 7O| ַ1J~)!ob__:?eo+, }t¾!bb_g_eRW֒}*b$P715&a<i}+4Ys}"ˤ@?N2B1 c*Vc[MX-3kAwWK(O׿C^q:g{zBBmj-2(WjW-<"A_N7HB*} o gg|#+1xoV.o ywUbF޿2BW*Kk a=!]W[#>yO A_~@I~!?T#y!y}a*|eO*}V QϨ9<, ܾ#j Q_/Մ_#Ax}&-"ϯW7b}{/񭄨o#WO|;!ֿO?ϵH$=Â* ?#α?Ub|J1C/_JA~)+.;_F[q~⋈~,Uzxg_BQCF_NWj^A^Ղ8svxo'¾]į\Eu5UR"Pj<쿒f*Fk%D ZO#%K;@|!!R?׫ҭyؗ"ώKAK~!(D 磒BM r\!_A!?D|:үϗOKzB?"_#kl&|1oApJO蟏' oa}z ? ݒ_LqK1~N| !,b|yJϓRB=WJwH~!^g;$/TŒ_E_ҫ b /!r/'ZB9{>^M#D?_GSOB&C sk%!,~ȃW\=G^Οi-bj;o%Yy;.jӹkk6Ji"}Fؾڽg]{\= z΁rPmmLgRHzehybyцg)L)3li_~(Q0n2Vz#A>9d 7{,zt1m0LoDwMX_\#0 <מEJ+J+%8a%m0AY=Μg;_dT38tsTɾ :І_~m% PV<}v(#„x([,\~sӹp5W C=pz{snM.pCc]t\z?SΆqvnmلO~WM{L eKj]IgpwlGfe>`۶7Yl8l' ۜqȕdlGϲ.N~W[N[Y? 9$dB&s<Cs{K2Nhlpa{n{6N!iCB999uN~+ӽs18 )K Bv9C@.{ =w7ي5W##PǙq{?4w>?H9x$9CQY΢c`LS:HFtm| ޗϑԗ<,V)dO*~E*}p7rzG@Tzp|@ߙd_|kj?W Mr& &KZ|D >s,YڗJLJO;LM :&5杩_8&3/y@o4̤'រRڛ:4JO.Iy|z5 ֻ`'H?oW1XX;uD_r0}j;.fR\ZټC^]<ߣr_>rƟK7̄Tr_&XVZ1W&>϶rWd&K|ҙBYUfÁR{0t積tyDy^+6rG`>x?Lδ/ɾ1G57[enȶq ,U ln+c`X?l7RS_Gb]]>scʶrSi.D1N? XL=:=: At&/dѳFm)݀& ax<'g]qR22{\qzGS(|V< qr4"c x+r< 㣞6V&t5v5<0#ޜbqp?wf(=zoqVx=k/*vn<ǷEnQzi7CEgڷ[eFʡ\NmJO_c_4yPMO2.ʅӇ{R=p0Y RP.Lt[r|HWxV9wm>\qj~)0yFGժS`|NM:y9j-Z4Αs*)[~#`%4kr~Qp}^>7PiN"cd{ȕB-r/ۧg ڤVsa9r{j΁0M^&$s3$gZkv4E?.pNEHkg_{dkuЭ e?0b#2}We3%)9ϪL巌b$Wʙ70 wwZ/r8G"';m}v6^3potX9~ t XVh8sؘeilibCijޣԛc^pJdYފ4>"D%;Md}uԹ&gP."+0Pqkl.F?2> VGhRNXs7R^|61c\}O*ka=C-kyi8%_n@}J}yycm>^ J3㔿LA_=e>|Do;%,˹eݘݗw'{ulLXwnyOIrgd~\U][Ytu>k1 5?=i(}h2,&,ovFa2 s?Ra5ໍsþ< ug[8E9og|\]9"!Eodd_!GT}k"lm\{m{@:NhnN[QRuِTUG0=q'9r eȇcc q !x?0Z(C?0TA=b4q <(Gm  %^ͷ (3<(ڝ5-:sۻ9>:p<^ڟ.21b:Yx__eGŵ/lmd!AҐMM*+}5q<ޟL:Ѭ?wXjsq)TP`v™g⋛eqDwƒ֊+"'u}]=&5'*5_*[}p[.ۦu(jyn%{4mq2˄^{+j3E&Yz̥ ҾHN&} (iYx:'nTтOPW=l* -{k/wI  g$a XrUjN ;!g+++h2\eqi<6K1 8;0mJ쿠6P&&Эsj g/&3zP[\u /6CzħS'l8z?ix4i')= _=yXx(%ve/ع֎gM ,; x[M]tHbdMfSf?- B؄ =Ѻn j7!Wf!O-cW.NެgBO}jj̅,bs Gc" b= ̘(wWwo8DFMDY|EG W9}q2Nj^cG)*Yfj> hkP;*M[O8_(b}l_P;7"GEwfohZRC(Ø>M{~eieʼ1ʉ#3Se쬩,>kȧ^Q}Dq9y{Vo9yN5]'W6e Brn2N d=,qOk} mwd]~"s|ɿć.A9r~^&F3 S/xyR{atᣖh["¾/ .& K(a, RcJ~/K_.XKQ~m C~u/$E1h ˨~K1R, [ABBWN|\vw$9!G߻>a}Uį#o }57¾Zi/ 򰯞Ղ}H2DoL,綒IkB-[wdnB !bnۨ} aj_c'5h- ">bv_IߦҕyؿF.yD{ o$'x!VBe6B>G| !Z>z.LJ~=!:a.jXz ^w vC*%!4 ^C~G="#8ϵ?he!B?)^ >Ϗ7?s#񅂋nRx"~n&~ Ͽ>BXBqėBė '_Ay=?*AoUd#}O!A{k aӉ_'(P6o#D|=3DF|aĉ Y㯭/JD"a>*K #*} %~!c*}BK C' T!kV1?牯 D}A/x"W¾/Yg/_-ǯuɯ'D}M7n*+]!|^_~W` kݧ> # J?Eq<~i}?%X~/$?Acy|I >Pl398?J8Ѻ# G"A>? >WWįk 1zAuJ6(_q$%_3!Q]wo"D>^hG'~ ?,Z%Dî4Oo&/C, ƨy͹HX{$1[1inĹ""ڏ/͹aOHx}``%Մlk >jL\jQ$_GاG5:A_DXY$"j-i0Eį@*K~ !v oD|R{m{7jj /7ؿ 6BJ| vBڟgW!WZx+.cx 2x+Ξg~ؿ_R 382GZU맋D^#l4G:T 6PP/vXl2B3k п_RdWBHA_)jNɯ'D|5bC|#!+_MJm\ma$khu$!~Ns9>{TJI|A^m qPÒ DR^<&L4Մh뉯D9RG*%A֟~I~!? (k_[Puy"~ h$=E|!*$3*`a $P>DBo1𐿅>~<>c!!>YV/vʳn_Iy:Ղv|>C$L^i}RPw]gKjBY!l"uGzBķ_A a o#R/%vB o'WRv¾W  k"^G| E^%fo$A7o"7%<5<~ޥݒ{km!iHsT 1>|W% s/5~ye7_@Ǿ <瞿x׳ZF|DxLY7Rxy}{?"{/JV ??  </$~fw9?O0.>|в_ńI|1g;"~ !"N]~G#'|#B%dWT !?ՂkI !!7EwB~&[%wwj^ *_2_Eѕ?P+:xNWqU1-yzU}*Z$ńЯbA˺BFI~ !0Dʧ˚s뷔%ė~՗ /Dѱ?A| o@5y_AJBدc~TCFk g[`WJϳW}>F -yv_ пZ^_%_"5f [GQ[% A:Z#)AOZUj&ˆSߨZG7a;h O4ڷC~}.񃵉FZ?EwbuRyM| omJKA#%*J~#!ӣ 򰯗UJC$(у* ͂to _41<_O| GT3#5QZ  eA a Nxȟ$B̈́s *=F; Q^dQM$͆Y1 ͹{EN}lu+_O&^)*=MWbxJ0$H[ѧJs}Qg @꿀l QR{Jϗ5T OZ<;Ⱦ _(_k_KzF*RWWW HXETuB kCu4<7w?8{W *MVyH E${$"[Ŗ Gwx7[?W郒?J6CG2]E?!p#/$q' OZ J5,B?=w|^x?K+W/_ b& ,7q>ײbÒoLC?&Ղ|= !}W JyUo>OxG$Io%Լ^Tǭ̷ ?<;_g(WJ|[W*F * %e~$9!sէb_KþBb_gBa"W֒}q-,Vb} : Og͹" _&e/#Dŭ)eO~~- >X'<_$HXJ@Mm1CKM*m6L%hN,eXkvH~%!K]yA| y])_MuCo"D|^F2!%o !͂mTkTV _muy-.ҿ Ok.vHw¿Iw¿T1C^⛉!nB w7A-e W Ѿ_~Xr{3=;M@ A_|PK~-!P<Ֆw}x#OBTӒ_GϧTA}zA^_~ ϒ}FDH2BK'ye*ՄWTAxN5<ɾZB ¿"~5!mn>Oq{B!{yJG|aDֿ|' ~l?_~?d|7L[~',˫;qS=JBϿWOyK 䗒be?&gkjB|ЯϟJBoclϟ2q~y E$!C9;>,。y1&YQ|)y ?", Dy%y_H}L|!?_$K-Uje+oK n">7 Z!C?jl:)6y~L}: c¯Yee~x*NuR頕y'A2BO7|!_Iy=6\A| 'wJWx*'}Wrw _CدRR"S 7[ޛA՜k_+!k?(j?tw=s G/$֧R'DUv<'HST:.uy?N|&үϟOJfB?"'ogX~}| C&+[I>_~B-!8HI>~#[CoA3$'!C<%~u.B,u%y%Dx>񅂲^/&D%^H| !"b|yJ/RBTwῗJ B*mW_I_k$Z75W$שz'ZB9{>L#D?'DF|!{͹,^+A9fX&je}^_g˞ھq6i[{Ǟ-ݝ$+/u^|=۹xe]{:wtomXi 2MD/ۈw_Sߺ{<=9mцLgRu{r#sYî˶g\imζSP`eg';vooԝӔQZw eFdk;[ZljQh!i0~9 t\G=<5^j? gL4c<]6i,/VZQ])L9w s9/O@G{v-/i{<ٙl}[w{γilgQiBfs;=;c TM#屬F\᳘+'Іim,slr7hJ7cޝs=} xǤ=r.W;ŀy p\ _#qAIf9Q,b垻ɿay0m9MxP- rrh=ˑYm8z iGGG9l"r,t,f4مO+&X6.k]d+V\ Baz}t~>FH]7i_GEǾ9>gI'Mu dA/=4,# 9/y Y>)dO*~E*}p7rzG@Tzp|w7oL'{ljkj?W "' & 9R, \{׽w>s,afqk_rh(}0cW3iǒɣ_ǴpC+Jg)}ɣza&?CCG=14Go`l0u,OM {B3fx#3?SN%78>Xx(7;;wV `oKՈGsb}~<=?JkBJFW\!Y&KMM$r_שɡʣi?c1fNOV&3\jNV_0C=ɾT쾬_ZAU+>V5EL ̘5nڼ;xϩΌ9掌671z026p-jLVr 6==ZS/Z9:^0!nFMh? w>f?p[X~MEOxM%C;̫{23<0vE@6pRϝݰ?4ZX {BX,1f[F^Bec ԌCXL<g0LjAֳRc+p۰X;fL pafNl%C;p~Y&OKCD.zm04X젷!${sR-;yyjN54*++.vPY,'`heX`1CK _ 8;6&,s9`lfݑ@kpIn@y]Wg1*$&1yMYİ<4Nȣk ڨ80xQ' C,tRL6a6Md?O:Sz5ϟ:t-8|1N.<z< 2*g[8_*R k67Q0MM^T6]F/#@1cCGݹ{le[j岍Xu~rXю3AA9CШ7fG>%wds.s9T 6?=i`7z.77sK=&FXt2=JвrRƅQp`t_g&KA %n_Ε:Oj6fGk-WOO;Ɏ\lĊ<4ծV ֩Ic|uh%4QlѢq|#V՗PI'd:X{-IY#*nfwsɽBK"6];ENj>ůɼ^{=Zow gPfiMTZ\LsO^~fdFZ!Ͼr{tV&ԑ5Q_(/'\NO9K꿻s_xNBy%(?e:1M8 x-{2<ف bt(tuk%v'E+熢)B,FMun"W~uy}QZgKTF>_#bY^{s ow]tw~x(9/a1Jgi~TCw%L j umºos|6.F'jp'='a@x|`|K[uhҸA>o嬵P4-M/,trMKsYbѤq|^(/Ykh*2N:6ey ڼD-~M#|޿X<ȳKry~?Z -2v^bƼ%!oT?Bv 1qFQ#g\>?9>]Fi]#>ԲёϘ?shx1'/El+V$E@S>wKsֺL4Y 9y9j4^2~zx~9ExF}}/1Ƣ |Xuї~G_tWDk#Tȸo5oY,'^ B+~@.Q#hs;Y"wKNTAN[z_)I!cjK&Ç<)DHU@?jloO_~/< 1G >o]=V 3wɞQ8~=6Yd1Kڢ+G,y]-###ߙ 'K_+^SO4A^==.I~+J.R=htաz*A*P|xhs."""a;$/2FIHU;OO#uKCԕT8z1[MB*>v45ِCc*fvZ<~=EȄ9FӶS UTIozp\QXjVOVWh0R㕍 eZ\nRv 6LI"W%VU?џ>~"plJOԖLJ84@}(B\Vm| *Vdf'FP]c}DmgPcxy|0u/٣ԿVqWCʩiTXњXqjTX7.+m P W;uxb uUQb -P&ir=>lR+0w sU6mj΃JG:?${`k%龪>M+/vWnCk+gD:9\B^u2(aVj/RZ5P^kFpbPC95W,=8VߞußTK^rykb݃'҃=é!wAuֹ#ԱgcMKjU d){84ZcO%sT Fx &]v-l]Ӫ Ac3 cbв>[-n:Z?!~E%hkHQ~tQrG}giX̪:@eOR5/`ʽbV*J#̎Ni  Re{e[(w2GHƐyDsqh\M4+i&YdLydzi I!solSu< һwo3o9].>*WM5Oz_ C w5iVV]ثMsjTeܥ׻sac@6q+ġr+7v\QY tY/<#DaAА"+{娽X⣭69<9RFA*SCq>O 4j(5 g,+w?f ΣSI}Jߨbź]Nx`3f j{ RլH͌4t5]Wę鿳q }e좽sQ(:U9ф̮h8ږQD3g&y7|mS'0>*̏_}!H%O;՗r~#{-==cCV5#aC# S;vcӨ29)XH>~Ldr{d®+ŃJ舫9 ${SSi6vh{IM8WH'.ie<2E_e?U?c?r=Q{|<;;t ˷2^,Mj/DžѺT#t f՚n;.?CbOXK5?Iɷ?xDka|K:o'Q!п傫Ibo"R"K k"~o !/>r.ghre> +Uq _!XGU@jo$}z_EtY 򰯞Ղ}H_"[Hn뵒&D귕m}&I}ڈ!D_G鰜SM_>T676::!%DAp3ﲜ$e>;B~w=KJk>W_Gr~$_٫!<쿆}^w wm<'~`?R DC~;?DING1>6BUzw|G3]xOHPu+.2C7j+s_G <_@򭄰BC CEsg~׈L{_ bCE %`\xQkB<+$XΟ#UZ Bcy_`($PzIZoj]U1~QcE&D|%V~I*B7S  U4$0`d5X'%($_mO| #7m?IHg;㨮gw ` ٖ,z$Kݖmc嵭 KF6$FBB !$!T 鄐{fξVkɘ<螽}ufw*(G]CNBBw)^DgׯZCŖC/N {q̈́(PAҫU>wYOIk,< ݦot[H!VK2WH|"7&$*_CnЇo&o%o#~"߷K#;I|B;,s>鿋s'!v.i~B_A1o9 򳝤нSDB'OJE#~їrSɊtϪ3#_ݔs>ZByKtg8|u_zB[k'ohbD<<pM wޯUB!пDd2$q¿Sy9!Q+}'J|!֧?N0RүDBIE+KQ~S>;[W> Eԏ_k}S'>ZE:ѢOۆsk"DR>:?5\J2wmb/OV,{Rs-8h$O5h~EG|"Nuř^r"?,-|涒 KqOc@3FdũdtT?kjek|;JEܿ6e'L g~Sx/߰5bEx(KT^F%V«,(1?XJ|-!k?|f*o$D,Ї+,l8~a576'8 u}^++ZgEtxg~dcG;MHPsuZC*\B[ڏۉ?$W2B ЇZF|%DO0-ʋ =z-x}.R"~PI_I,񵊴? '\ZOWlvs3g%=_ Q~3ТOBؗ=~*K*@_`ɟO o!~-E^U@f|P /%D\m} )_)z%*IğAҫUjKz-o!fKl ۨ,u)wXMxc+Ûaч7 "U|o Ї;$AÅxߓ4߻S_?tg"%~>Ya֗&~!aHח!~"JzʗOҧ-/#42ΆI* SH!D|P',CįS\O|!Ga|ʷu~Xso!%~6E ڿM*$4%屮}.tbo[T$B%̢?^S ?C|㾪Ӎ%=*BY_~7@=B|"ƿB~HLEoߏ$=EÿG-i2'D|<ʷ2EĿiYkG4@YUJK~5tY-iʛ2GYa-|1rE ٪z/P\D-~JShk69+PI$G%hчė"~/t+\oч TE/tE_GO#_FB^IT 뇎}fBw _KT>=/@]t^L?C'#JS\B^I}GJE<a3Wy"Ʒp%~"L?G|%~ʿG/ H">l:3\J0 m9CVDBߑE&~b E<)&vؿf }I?Ty57k#_HJ嵊X)r|TUL_ZωoQ/,>%Wh1W߫|"!?ZaORECU>'K9>,/N&/>x"OVOs56OIO8kOIzҢ E}n'ɿB խ"BT'*YQI*j˒BVE+'LqٯpYu*oT]&f^߲L֪|!귆ȿOu#e2ciD22eMWy"Yk,:X_ߤLY3U^ߴ] w) KGeRLB,g),s=W?#/Q\Idf!/ ЇEģo M;/>eZs  KI*K0FӜbY<<7h/V?9k#%%]u_c*/VM~>N|"ˬU^\G|)_}*IY?.t&+@_H<=UF8@ۉ/%},~mW@_пB ߭c '*/"D?&>$]It,눤c*QIWY1~6w+T^O<@O痆s7_`ֿFB m'1)rVKT^Œ#_H߳^*:W}^&m}ؿ*Eb~x -7?RNٛ?}w=&0&+.{UJ{7X#a-nS:B߭%:3\[T7k7g^otI3!~Y-L,ڿV(o;%ݭɊ.]>`ч/!D[{,.^$D|}"@?OQft}vZ_H,ߪ)?SO|Td@ҏT^A(}GW*c 1=J|,*~لD~Y? >sy}s>/ȿE篩B7O&ۜXJI_M O*Pj?>Պh?%Uq~hߤ_M<.;ϿPGM.*_A#a}dį'D|?IFs?|U~!ۜo?mч%|dݤ/\v/"p=jPa_Lwv(@_7.gSj!x[1V)o'3GT^L}%ߘ16Ry%oQ,,Lx>1\6բ9.$~"em'|%!꿈"/HoR<~ֻ)T~Ξ$6~YvEO%>Jr]2BݟduvEˉ/'Quv~%WUYgj+ _gJ.{GӈSol=]M͎;?d7ߢ# \K?_W̞5:?dG3?Gq3ٗ5GL|%9 e,rB/3;,G9I*B{0@;#}]T[=RCI^l 2Is9%ތWϗtE]I|"}t29E&~!_#E*o a_jчHZI/17?뿔~x} fB+-L7P|BFg*ΦIkU>Gq.k$٢_K1g#~!{gE??Gq ?N2BÛ\9YxH! oӶj|mu IO|"֯qrβÿ'/Q:?2E?SW*6;ėBģpo\jK5|?'KRW~v>ߦW_N>k NqƷ1NWBė>qa,mrDs'jM$E/X́| !VT>D|bWJNQ_bɿxr*U^Ah7e_ESna ~YZBrL :'3E>1mPbEZη#zK 24|*!s-H|T9iVy!^0gEVye93U^GcF>$~!C洜sI#IOsd/IsQ?Kkb">Lr/"4mdݖ/'~2jsTJɺ9gEۈ_NeY(}_cɟs˷S.oo,Կ6KR9~٥<-߭o_ϹBK=|x"{%Sy"^nч/U* D|2> AIUy5ߌ#V{S?H:iFߴ]>?D|!ƯnQÒ.)O'4MZAùo&G,G8rIWlBԟk-|¿+G{-<_M QXT?^lo_f_̿\yʟ$/^%O%D^}ؿ"i%ݤ B%z~p9oRys |Gέ^fB㟙o>-?yE _# 1Eyo -٩N:睒V$E_KG,7%XzI{Wl '7"Xo$C3]ת$ oFI')sr>%3*%}Ѣ?C|bg%ݯzBa~K<}7FBo".zI^|M7T^뛯KEREMSҷU^I[aW)'C7(S|;?Ї%~|/$? ~2J[ Q? >1iG%T? ЇZ_Gp9QBcI&BO+ "̈́זeXo3?[yܿWOV,VޜEҿ-WKQ?w BA|)!',Ȝ?OQE=_O_/S?_ %" ?=8aVdB?I*/&TrHߏ&>HIy* D&}-uyƿ| u|- Ac$ل>=M}w:sPo8K,"T ?ěK u.ƕAķ)ɹU^{ɝgчVGJ,斪|Ln ML|M!x/\/ D|N%~"J䖫|Οeȿ6E~Dn oT<36T~!۔qEn_oMPEm ~!K[NW9'st7>T?3&s,/&LVW+b4:EXF|_*CxȔ_Jnʗ Gm/W\C:%x@&BύoQq߹\w"6ÿ-ė>a\ϽCse;}/ ~b*/#'s;,o7労~ʕ$bWŖ.k M27#Pק1I-<'i~Y 񍄘'rmX.I**57Z7hIX-)UudWR aO-}'~"M H:?Q[KC ҟAO,E?^E_Lh">_H2Bߵ^儡D=Xҫ-(K_SjBenuį!/J%D_俖|Ծ,e_c:0ۿ"[-7 2>0F=I½Yy[V};b{_uLcNITyTǿ$}ӢI|b$[嵄ϻ%}ݢ&{$C_O|a(Q߹#Q>Bo{$}¢?@ B_$~!aIҟMh웵G-T9^K'OK>#}, _J/Xx/#D}22W,J_/濩w|AIQy!C~`ч_kaIn>?bɟo.*WOf!|~#I|6a(O%Ԣ%~)WlgD11no};N/Ung*O/S%UMHz¢%~ o򙄈?,$ KRSN'|Vy٨9ηėqC*JhdOr^E_]g#/#1/?g_N)o-_pH凜7LhoT}O$-?Cau7l{TC'7RBW "gwdY:B-&[B|b/#~:yķ$Oʖ)>gϏmZ?L^6oEbŨ_yy稼'{ɼ}?rB/{ * DЇ |p)g~_$_y;$)?S|z>G|TοΗt+ Q;%Ң_XOeۭiYa7 -d"I|!˸wE/&~<.C a_}yW[aʓue~/"D~(9#eޕ*_EGjBsqؗ67"o.|LTftԢ}o'_Ҁ DG-ATg+-IO yGR</Ie4~$ug'21^-*/"D|DDE I7>t(Isk>fɟ.-*%Dy#otI!~Y-7*|ޮلIۢo'~\;%ݥy%f|7 >}3w7@Fqp$~ϛg}XG,< -ǵ1~<)><֭/\|}k1~ڷ~V~x/?0/_pT^IUf~2QߨB_#~&%?[Q< IRB}﷈_H K "fn|Xx߀׀t﫼T'W}}1~~ *VP-*68#ˈGR卄GoRDDT>}3H/-}(o:NY*/"D~GDPŸK')QAҟT^N[P?Kʧ~ЇXFߩ| K?oRM?!IU8>?IB$W QO~EK"ŕdߜWy!?-}?N* ^*H WF7%-&Bϱ&?$A}!$q&8B _A:Y~')b~ɗ_lч"K+Ⱦtd W(o_eNȏ|"\?ǢQaGw2WP3ߴ,>W_H7¾`чj+b`G: D|~%?dL6?WW*_DS>o&>R9W*o䕿Xe84'7Za1d_ZT^C|Yk寷2k uJ|t_m*o!42OX֢ۈI|sW[x&Y_cZ7Ki7j_A?HڦI<~nmчmė(bovI窼I]}?zE_IکFBZa'M H %]9/"~"3P{_C> JBgR~1>m:-F]b[ʿIK%| !KYaR(򏨼Ї#i}oT^ˉV7x+I_{x_H*o(" ':U _)q^EDEO^ҍ*/& fGo$DWb|I,1>jiԾHM 蟷#,'\[TޤӬH| !Ɨ7I?͖gXڏooIo'~6Cѝ;3iwJ[QEM|/[W(b}dݒޫB{$=`ч_x>I}ؿ|!!OZa#/Re>hߏ-I*_!>W+ϟ!~!IM-<6Y%&*Lh7{KEA|bEGrB&BPwT>XwoPkX#*Nn>?bɟD-5 C(b}hGUǏX?J+,OH.*_?A B_Jzc_dR'Ǽ?뛗 O&*BXaė*F}*/#D+@O"W()|)9?}Z(DТ&~"f~;.|HujŹrT>a?)A1*_NS (8Ӣc_G9UXK?ʷϲj/)EڿS _\TPIt~Q`_k,_BͿKyZ?R o d-\E"~?Q2,Uy1!e-8ע_BhMl-MSa_b`Ki\ cUJW)1`E$^KEU>XTHwk$9kaKs@K-BP#gmG a<`$8"Ez>@U^HG\(2>M|"(H*!CIG-1?U^G+WRp-Uߋ%TՄϜ?΢^J| / dYpu_KˉWD6xXpʛ C}-:?C.Is ?^7Yf*!ʋ10s;7_HGE*F?~.7)tVpXwKϢ!TM|WU^A{{-~+y~GU^C@>:E:_+|:!1Kk_3 MfXp ?Vu_U  7s/\V#@bCߢr>BdB_H/|_c*$D*Bo?$#k QJ[Q??%^?sk&DRjԴoH 1^U^L-ė(ʜI*_E9@W6 %SaO_T>}W$ǕA/c"O"E|"wҾcd 5&WQBm19 -э5pWc%QZB-ߘ}?qgH2ϟI3}?W>/3 loW=?L&~"!ڧɊX?9Fbj2}_AR+ Q?S&m2vku=F|آ V# Q> ̵~5MߴAʧ?1͢u7+Әz>/o!⧁y/iQ|B/>iG-/P\JgXLo!g}\jVB /1 -Esw![b_Ly^y׹*+,2V;K2%~0q_ٶsM1VmӺmU;vW'$>gՎ+ݴqϊPXT Teێȱm m=+6mܶݵLɠfm\s|MF*9χa(%I-Xu 뷥OqIe(MӭHk ]Z_FrkdݬFfRSA~CCƌ ?lrDHmn]u50g=۶QɭSkoHUԴu\Δ &ah/ZN0(h  w#P9(4fL 9&(ܶV̆Sc!wrTҍӓ2,\9k>WZ?BS;:A)2eмH>ϒ*͸# 2gUvrJ춋̰%29ҳ7R=G#I\}޵G>OP{z;z}!m2:21[uHS#:)XC~d_NNO}˗gZobK"`AxrTiH&OB}3<ћϒ'Gebӆ m1I Z?L<9QlNGȰnf8~+t*Ğn-ӴEh&-0lŶ>L6 lOR@Q(8WXCxbj;"2XB7h]'HZgkCd&rYT\5YUEr8Fj4A|1fH>MiOeIMD{CYb{iOOƧF{=n}pjIS .zfs1C@Lu` qp3:Yn'#FȰ'S쑎Njs'\䞴4{s'gz>|VUs;v(Q@X|;t~c$`yvo? C;sr4'zJsOdw,gƧw7N#"ϊ74Z\yֳhnF$eV}{T^ԨWԻ::T#ƺ.֋ ]G{;c}Xtk@o;pWgw >]{{{/[- p̯rrϥ@WtGwv|t z>kooo ] W}w;VT},Dv)}.wvvVh'vgCXzWg@Gte'\Yz;]?aa_?t_u fhA.I8)7r 'Ýe8iJ:d͊u|:}dr#:T鏟C~_q[-Ŭ @/X`;" ]dSP㢩@xp e9ؓ9=4nUyڏ;b`du jT˔&4}?":Shnwi M7͝n!Bp1#]A:q^ا2:Hn]NbJ KH_#Ѥ)/92dOy$Of jr?PK!tр;M~pW }4}dm2wwdmߺpeڂHY܂Nn"(˯TFҀdQTGlgE+=)NKZko5;{Β,g0qLuc{XSw59zJ-7{}KpHD!ԉB+~3 pwp`%gʄ}NTP))?'|(fuGA4=S=qIf#H r!#J)@/RPI϶Y$aQ\T&m_Sr?S) Z'bGpAksoˑ&%㣬. ޵~?sVwmlRKb'CU$"zXj1m,X灃^R*1{+idC87ٿSA8[o=܀6HR)g=g_r'JsU6iߜKolېa)%:wN5~C])Pg{Wuz(x1= yޱF9ݻi^ۦb4`Ap3pd).7 黭w=-tG.0qa86Nnu2'6c)=sP#9#1l 잉V=vG'6N[JZ66Cf`FӸahUpNvZgAyopOw_Y:VwGOAa:˵%,Cζ> lʑ^oD)܅80 Gٔ쎽uEcY!Iw9qȥd~޾#ް l=NY۪g^Si>ȮnόaW3 < ] ^ݙd}n)v}gI\̌W3iEIY tg*Mz#;izRy7g}'|39G{z3RnwOA =]^SLΎ?J7tE-3*'a!Ә,`._Z'2QT]G9={HYeiH}@ǑҠ:/l\;-#U"ءeH ]u`~T=F_,?޽/z}߾%A''s)cXe#sVްKtkuY:S+_mdV (mSֹzS^qb$o:m*hKE?/z!z4j,zs(v%8X!Z^]=]rށjwOwlQUO"yɧ/fE{ai\f S>7tn` &H{'`b+Ɓ$wSPC鏥Oi})LkLmJD􁬪6ro>pݒv{ gdjg8zli-AKAbܒh|2g5F*ewqA5jCpIrLV@7de&_=u>(_d8B[L ; @]a捻 _<-ccՒzB3Ԓ?睰p4YRyRFްgd'L?8SL3Gם$JF-"YZzxZ:9j܆59 s]~ܛCy>1 A[H a =q֜ i^TQiYܲÞ2iĵۿ4+5 #/PC>xؐN^)Ij}5]auΉxDIjh^WyU&-ǽSb>Aa=1㘟gWQ)Cj,glD-8ɫSZ-UKz4cSR⛚ehR\׋Q2w]\͙)tF^C8W'JnџJvgYʊ.܍;ϖs-eT75\&ff{juezLflL-ܠﲌ%z]>*q|ؽ=z`$yAFK~ia&Z>ǵ= 3l*-s;`2Sz(kTҷLl=fB?IЩZ>z@[j3f:F`^5[UKڌ֩%| 6%hH b"i^OSyKVg%z=#c] Y[XdluZ:72:O-,"{ި̋Ǜ3x^^0oiAUϮx١k'(twIb.>s'ё9g9g:l@y~,cG z3۝Cme|~ʾ&EnҚɧT#4}9ӿ+8w^WYa\H+tkA8ƃu:{ YV[Fք,CԊA7%(N2m*cԠȦE.f& ߋFM;8G򍥮5r&@V7W샶)s a =첻Vh{l6{ɨFna2]7S.uwk-\[f};C+ _\H TKV&dZmHQaiÞӂbt9i{4Πw N\l~3+>5ݔ{V9i)?>-9'[U+,K +3Ps&)uݖUjǽO S+7F]kBoh( Ftg_I%l砃F"t$V 2^^ޫXY(G#;i<#@4U%î"ZmV[zvT7񰇳SY\lKw2Ϡ̍#io?}E`ĭy P˖$<[Cޒqx֌nSK;; T+Qޙ]j뮄,CԊA>:H0&"b;(bGrl;aΠ`f@[{A oOQhmU;F_Ey &+[. >zeIuܤBWdZAsHJDS%%޵ǡ z}nVSK|QHӉ;!"qX D 괍[Y`nzfl$lwe:4$/L VKJޝ=jyN䞄,CQ;$Fb}8^ʁ?ʡa/.dE;A>482ʖv.=c{'(roBՃjLjZ2XwN.p{t3˗G'=N{ zN䤖,7--wO}Xi*[T-3K)Cj ?ޛH0^;̨můI?[蚿ogYϩmp,ՌgR/Qܡ;2mfVb\cI+1\_õa5d?YcD?!|ԸF &mg'MDtIct󺕰ϸ8^j2HZ= nrGq$RV/WKy$<2zZ2_"2zZWW&RVRKM*c/PK/H ^^$S6!ԊA%RVSKuW%zʌJ-WJ2ZbU6Fa8̝k}~=%p&OR։_w'+-}>>=xTƛt_.{ *S?VfG>mUMүL)OCKz"-Aa]!mÁi`plF0[OyA<^mEy[νf~jv'~Ow_옫_0ŧu_ޱ`_ZO9w'Ψ\*&EKptwvnh8?ʎuڸ\zaQgi?;Y;ۨic(:_8VZs8bM}ҍvtw ƷvTOt~8=Lg_%IVw0SfĐOuԖ'hg`T@#uq54DkƵ>bпxd%Վbt;m=äb\:7U+6c ]bS"'q4ly]YasN ȑuۤ}>suX讄@9Po3չyf^7=&رNiE񾶶e.ZQm4D(}\)2j}f})4ٽR$!zd+.HW^]`]AZShopW{ ^z?LQBk k )خ}f%+}w]^0b ٜԝoGx3wDߐ=eFkjR}M:- L|rFg>jGb`[3RzY{ձDLut˂tiڷ<.mѳPmA9ु˼2c70 K AQ)۹w?4XcN[tUzk`^ٓsITIA:x7IF϶T`@|uߴ/]x̥1%bcӂ>f;/$Vё"* wH(%tՊԼ!X)4@/q]cchYX~k1)u1EZ kS9ݍAWuH;jM&V/S ^1/?St4i fw;=qݷbmzړ+u36#aTa~]:)( hi:Ԓoo1؋>7f xߺ!"8fcXo wE7^--Jn]P(MU2'~]wtj6_ \@%=Ghy[Fn"G΍-c[͛==#ɉ1~EVB:ݸ1u\8տ#cOS ^R'Eېuyɞۯfǝ|hx_Xa?xz Rܾ!\'%cډ|,峴,(l6$ժ(vg_L?E;V¿x#{7*WDDB7ɊSѲN2b>SSHO&Di}diN$> Dqij7|U_M

ٯϛ!j>OsR˷&َ x9>3/%D">XGc\}8q.gM?Zyj>[D|%Ծķ}_KoU\CM*_KY+-[Kjss} NYO| !g3 >g}69ofg+.$@z|[a!::By|E_|O}.&NLB^'\m |CǢ?[q՟+p@+ QU}."D\]"BB?$ߧ㫑&D7wBpGcO$D^Fd2E*/'D^A|7s$W_M_CSF/$f~g8r'd$D|"@UDۚ'sB&aEďS1?3ՒcG7?y.f"̓w[af*_1|R">!~"$}HSʛxY߇/Wa~BHWSOJʋ7+>ZxϪIgWD29b~ByI|!/Hgf,<7T>7i/K"~B>*ٟiF3>x=!mo-I߶m_L=hio|)oķG$}H9!;? ~c"%^ϫ{O$L[Q? Ї?sR 7x|cv73@| !ƿ?ɥU Kʋy\>+aDk 1].g[a)S<>I|!_7+|'U>[.'XߓQ\@#*_HO<ׇviI³fK Їķ*b}- FP#~^kqsדo$oVBI fiPǏJ(>BLK|m#  Q?ʏM؋#$ Q?H!BST>P7$cEŢ?_oH|(ń(}؏Ti_AjB/U:y_M o'ӈ?W|?Gw"vBq!po.i3ļ1@yk//OT>Jh'E/$cahEW? H,6|"ߦF啄_}俆*E̿|u*%D,pn,'4Y꿞whxBNq/RB|Яg,ǍxK|!wK}1 C:';@|!;&U'.B-C B&~%~.!_L#/U\CLj_Kˈ_ ~#!LUZcPΏBW "!~^/s|oΗ_nw4._N˜/T(Kay|9_A|5!U› Zo~7Hz1鍢_oч&J3>$| Q!Z7B*|p_^' */Veo ^b{@MO#4wBotQH~JC譒aGwL$CBN*_ETi.ҟv7 18_7cηߧhJEį"Fkw9/?>>d?f_^?k?ߧl F?#s*/#DVҗ,9 ?W|Ї/X[c*RS3|ZE5哱=57_ >͎?_M~#@ILYdAIQlB(@C\E/?"*_JXa/#D|@ҏTJa>Ȓ+?-'ZڗǗ_PLi*R FT>EϏXawGy3Ty=!ǜ͢$~!U@s>?nɟ翿Y?~'*?WOHzR%?1OYaI(>OO%I+2_k?2gIR*oxLDHVy OXƐpEXEs,Uo>skqT'G|bW?|I H?Mg=ˋ?gH:S$YaL+ Q? OPyV}؟`ɟWpk~'_Hװ [x/&ID뷘bᩒ,IZrN> Ї ~MbB)X/\5YKXrk Q~˄T^G2@,m8|ߵG "~Mm x$6Iڢ*B/%m-W+֑}.6߮|g>QB'劈%">ZFۢE_!ʿGr-A^tH$ƞIX>OK)~+tnIq2կ9ay|Ԣ9?JSf#\_/k 1[QIw,@/S,U~8b~87}CafgV/!7g/Y1Q?|*/Vۜ~΢^I|"FW(}=U<@|)_gT>jkomk/&Z*/%rK>U:/&o$~ !{7ެ<N6K ۉ:^wJKU!]}wՊi.ni9'\{$}P5($}آ?H|"Ϗa Z~?9_P"x?x -p֋_MO$D}Cҷ-M')oYKI_UU,sA+qbLJ$=i?#}0 FB#=K?Zk5;޽nJU"SC_g#{_=3T>ID|1!Ɵ??E9[z\*"DjE/&J|!7?K?_ ~ߦٓcQ!ߧie\F*߈`dE_3._uWD2䨼L3\$ E|?B?M| _-i&ߢ8/1)P|BmH~>/ ~b+?]*_Ng~êg_Bϲg+{PƿqI[F"BD'*NIDU%'"bчė)HE_.RFEO#Fֿ> iSy=pMO:ҢfBį\GZ-ȿx2Ff}؟E<'cߌm2DYx#>yY$iʗ"#%g[ė6K2Z\ r8Gz+rX'ݢ/U#3T^I(iE7_'fI[U^K[WD0c[u}9 ȿ$TBBKeч;__`ѧ {yci5L,$udC?y:W|'yuHR~:Oz/\|}h_NܯT*7+Hz>q>dn WYx(H[D^DdBw-%SɿKz/!(!{տNUė¿WUa֮Fb|:BݿDn H|"=蟯![U>-^gGJLE^fȿ(-oT~Ao!~"!O&s;.}-ė(b}mֿwJK hw]pn QV~R'Ʉ{/Qm$}J啄_EՄ_K1IZQ'^η"sK5?i?˴} r|hXFyI?Uy9! W}H|%! Q_UbI?~J|"5IPy#!uIXa7oJʧ"%!>fEG]e:eo,Żbk!3lg`a,l4Zg"6w5g'gU*huh|&(Ohw2ާ"$斑'+W ?vTIi,e2= [Wk]MDm{VmOڒtp++'y=62 3Nad~6wQ1;d|aRϞOxO4JDZ #aGw&~2OxpOF.]mk3yff?Lq 1C1T׍Иrv|DN잙:I'#0܌HAxN8j+vQAxQ^9P+C>2}o b\v7v(]k>q;V6 vumo*<.@~,3>jf_v8upAV5v7&>MCXoߧ}M \~rjkWѿ&"dw J߁CΎSqP !J&5k:uGwtwVHaMkGxGW+뇮?߁}~7ac~e~I+78hnqЯSn\ -΢SNj. ?y~ @okP} `s /^SR*+3XWcdhn!᯵,]Sº6Kx U!z\*]1$Xx+sȴj=Ze RN 'jLʌj?txFO*9}w7Zl;ޑ2fmߺ-ȏS4 `+n{W*sdpc} 9AC!;5sbSˎ/&R>;R2eޞ)#MMMjre k/Qټ nF 3:ўCCbץR͝_^7j<XRHSZIW'eA6:>2Y$C "[۾s2UmցREWÉ{HD;"Y[r U9Z-tLHӔ9M=R 'b}]~o,Iʄ+N2!ܺI *.(L!i4\J64O̼JGpXa7XZ#l#4ō׋{c:;_3*:SVuݱf,I]gNRMZ&S?(N@28$H c:+vhwsOPaH,c n?|2ym}"e \=qoҚs+ owI&Ux"v;i]{t KciJoPM8mW16?{IA1-b`YmRоLv8{złց^['ss6~w@N9! 苭4cu&%}0۱+scW,Z0#l˛OO>K{%yOL|f|߮WפU$^p<])T7 'RV L#$dZ$ݸކ8JW{{_g7'w8!-<nďD]~x춈s>,L)%vPj iz= ŬR6싅zz X$~ޢX8~SMwH"-VK^mLJ8w.}n]/ jJh_QɍgIHiY j:a굄vVOט0~_|:auGKR㉿vk[۪mgS\2ϔ">w?5Y?ţO`Zq:ʞx.N'9* cFc;CNRHZDч2:I~(j`r"eh>Iw?~(ހ0Q)L}spʊpƍN85z!+ /#)ͬCa8PCTqq"1q)>u'<66q&K&҉3j2'';ϻ/I}^%lg؞ /b5_}_K=OQ$??pL@}b`F|ZfX }P cubzqp4 yWGrЌ7~g߽_ 'R=zr> ڏM?p`Xăy}6r`_q]5_WHtq܋r\݃un) 4FKɶ &Zd-l|ZNtI -ABA&Y$N'Gs#?w<MMMuz`OKZr|vrKtec Q}?l2z=1%JAY3>@e@w7BiPJo3ؘ0TT-Z/ޞd-D&/fYPu:s[n,ZvG#C8lYEC5 M#ĦYJB:/KcRsizFY EKo5d^*vIڃl3x??H:ڋ2W6TW_T;i}󖵓'j#17MWǼ~ڃ;mGelõ%׽#1/+c5!jU F8sOVe ؚ:ۮ !fM֞,?CI94ѴծN2VO (z9ę@V18_/|qdq7v #~"zx^2:BwV>|qo[M]DB7Ɋxw=Iz¿X,}"~c M%E*jIPj>_DlTzʗ|Ka)א}Ӗ+U"@WZʷT5hg=-h $DXجYhMN)37Q#nSfBok>o#~U~1!}?REN:x+o>'}cOV,SGoVa*/'D 蛱 jB_B| !SF7 =OWÒ.hKI&!%~Eo%:c*_I:_!r4z6 b'|Y  J':J*U $]kчW_x~"~^H>Ȓ?ג~=!%~$ֹEXLU^Y_'Q>9X|WJI?Wz[1@LBwT>Z}}w }3Fk-<_Kso&~|Yx7'TؿH_ ޤe7JEVBo%ݡ(ߛ%[H!ﭖYߝޥU&"~7"KV'K_҇-'D|@-~?I}!I_ '_@0"D~Jy O>GLBV%}Q? {}E+b7/Yx_&~)!M-<7_į%D>H:EݿCVFBwÖHоaN挫ؗ3n_eϙ$_9gEߩ~A:GR/U%Q嵄pާSlr̈́??Cb_|!?[S>\?Tg?_ ~ʗ+@ ~"S!~%!)Wbo2._M8Ki_COc.>C?ouGP[ ?=_ %~O g)dBg|>Ƨcׇg@ghB/&D'~!K[_AO"/ci#b_EK_x7/JFBW&ÿrDOq _C7?ySGf1 u MWx -p3! ͷП-R"/\'">ʟrt~j#~"!g˔7cᗪ{ tZK| !uX󓳴"MH,6|"ϙOb5tE)QE6d=M >o#\cObsU^C!ۢ_Kyv7#{.>$QqٿO盆sIيI*O/vǦ#v(V }įTo"D;HE)y=w]bMy.!Cy{G]H'"BQH:jQҏv;pSg_x(Ւ^rEܿ05n R"I/V4Bz>쿘E_"e*o&D9r>쿌9d:97 Kp)~7k$ݬɊ<V}ؿ)<"6n>F|b?ķ( ޤń7ÿ7YR;} )q).'!.>Ed2N~ z++)>&ZfzXxZi9oL!?$#*%>,}t1Iߴljs_C~&B7+[Rҧ* Ї"~b/%#UL/ *_MZ_,T5K⛖cܷ2gy@#~$2OG<~Alė*F~ G*/#D?K>#1?1񵄈GWDDT>}3UdߜYՄIs-gki"}+ -do7U>SQϟgW ~") /'DYį KWbd>ǒJGk#X8pXR7H7)\K|3~QwiƪP/|q}Kx`-ٗXxῬg[i.pr(C)\D,!ؗ11L|+!K[|9!$@X_N|ʷ,>xTަj(|۔_lq+cGuoVFWb&ܠ:e,ϰ~(^L^.<]:a%vgPfZg/ϡ/tx{T<{d/^iчėI7]D2+ _% ޫjEL_ďzxg"dآ?Kq7}c- u}>ew *_Ee/ÿ į&4&/wGrxQ?y}俅ߦ|" oWNBmݒ?=d8|"η/=d8vݖES|YڿޠؿR}6|Bw ɿ$]E?/xgt3BL.~'^?e*/s+/"Dx *Iz Y@|!w#UпjB迆ZzҿiпFҿK7?_qNbB这kHį%įS@o'~#!ϝo&4;wID"h%=* MjGL>BaC[(o!c"JO }sf| K1>}e+ɿIC8/}yW)#_es[O{BfLOʣ_BϷ}_!+U^$};ńh?8Y+UVEo!M(ߏoVQB'Wl%fs1 I_ZBcį#k[N e J')|~8B>=8l3VY"QH|"6'KGEƩ|!qg+b|1|1!o/U?%=U}By>)9ZE>|#o&,8-=Ǣ?7\$K 5H~Za?ʿP?|kŧ`$:BH1?o&hFN ЇS|>qCF>w&s}Rs?_K|Mƒwo3RLDB˜"I}S"So}YKF,*eh_S?b+RzB_Y>[Ws7-5;޻aDΚ6q~`G@V' iVy)!e̱f:^@˘?Ӓ?0\d MǑ7ތ$ͷ? KBӾ|I~K_IZ)_Kn}}俜(!_H퍁hYDcч64&诖VS a_JK,s$Ty9!#Bq'kF7Bݢ6ߨHsd-;4@}bɿTBALEz"r*Chw wv>I\B?BI-<&ƾ.[;"_u/t>O~$D(>Y'Q 5ۿQ]OW}&~Ku6\*}߫|߯K:zBv>Q,~q1IWNg2)bh#3Is 󉟧H#@>W#(oljQ>~} X^K|"D^,*M^^L/^_:BJ9\^%"zIÿHȍ}o1!&g9ڞQ[oR/nz#}z^[T>{; ެ<{YZo@V_bKo|wgK .'y%p?{RC#gKo(X~\iN򳉼>W}*OJEG|Tߧ$}VX?#&q_v玿!>J<. #9+./ *o%D|>37銼|!Z>? 6Ao IzX 1>|G#}0sZ?B-!D|OZ(S'}S(.+sB\)~~7:~,T *Dڢ$>J'IϢ_iчlj/W"7;[_EEF|"8.*#_8'T>}5oIQ\BK<>7&1Lsc/&4*kF!~)/LʱCukoPW(Ng!~9T?K:C~R|>?X3- Կ~ ߤq;k*F%cFVԢ']\k0.G) Ї)#>J;,_itǺm%*_$2矋,<s Rq<[O D|.ݟT~ bm_J뇬G^ZD"_GhM'@|!7Dhx6߬HjQ[I!FE;Ou.<'KR+#@?u'}@.'*tօ.RTB9`EsQB=U^F_ˈG+'˵_נI]Q??03KNwʨIQy9!wK:fG{ D$?ۡ f]*ߢW)6>~#MhKHtB_fֿ\ھ@otgʓQHInOZ+,K aUTBϋ$ĢU%/Ce]:BR[ˈ/%_xߍʯпQw_$/eREt=D{7XW(mYHMmy" oo6+r|!}X]]*UNq~dėI\B]ޭyG&~!W#~!W'~ !GU} @}PywV#>J4B1Q>|^ۛ'߽ʯU4goTC}V*K}w?o).*G+l.j6{BBR~p:oO!K1>,_Nb\#bE_'q>><@ҏU^WGėb|y(O$L?~FB_1¿_Iʗ:@R/\֟Tķ*'H|)'K0F'@(9?M*77_IO|2!eч/VBs\K }otSPTBc_G=eJE_?3Y5F/Ck cO#I5+I̋_#@CپD巨 %O$!{ 5~%*/&͖Xnÿ(%81%k O'DadߔVa&@kߤNe-ݨ h7Stjol'?mxwe.ʞg_Ahe~7{EZEoeݗV卄(9Тko"vʧmo7Za=͊`ѧ\"~60ls>I7;T.<>AbEF}\V"ηwZwR$D&Ŗl#{)WKdX.~yKstunJߏ|"!?ַn۹aטmiݶm*ʊ;܋71'>gՎ+ݴqϊPXT Teێȱm m=+6mܶݵ(TU&-su5z#(PJZ(릭ZoK ļ1=I`uUU<۶X]aDi!>wQM.DjNP}:MnSli?ȄA.kudjJGok;(v(f'ح2'o96"54R}!ʸ;VCT xvY9>S9jp,N5ԌxN#?*pye3VĩTo,d@MշZqD {ɘN0}dF 9 0w,67G,QtitaN˗gZobKZ)9Ejd'>G#Ӳ}Éh>K>`᳛[Wk]#n41X%7XhۑY?{' L+JNPV>;i(?Ԕ!!<'õjT~f+' :gR#i.ӽ)a_]:2!?NN =#3sLwjz.Nx:Mq2o# œ }t*مHmGt-}26uÜGi2a2Es\'@lmc#;;G^QNtnI7fc4_?Գ/ֵ{FrׯסZվ7v^V/S{YrlhR5:{5 zۛ:_9SP#&;ũ j~ǯ!R`'˻z;;+&C;am`'kViMD{GW tuEt Z5ck΋u8]hl ;w9t̯/tź(BN__'ܸX+7;L^ا;,"=#Hڻ5qE8'D9-)Ep/viAj YC}4G@Jq+56ō< !) RYMͳ,NE~AsGٴ/9  ށ^XȡΔ)I"(F2rXʧ.G1zAgSW]==ItY˂uw} Gj;FvXGoo Fϟ}ۭ4KbܩHiPHrd+hֈN=[ 썯s$F_ȜrS\_L+>?a\ ٟZP'JM]=}s\i4lɠx+Ek 9uؕSYtO(]_>YDx-kL8DS?-ș+1>awiug+AH+$aV@Z*~'>eLR>;eS ~̱goHSS;CB.Xb3Ob30rזZECk+-{7#ϋܪΔ5/`IJ qOӢ5 ȁq(k)X)&?;]:O,l`\"')UF2TZk xJȒVwos .޲gZNw5#CW*8e >O|DN)YX:XM.KYS6?wÇ>9ӻCX<ch=2 Z #p=$igvԻY§:Kkm eīgCWKcd<Ԫ09ecRh]EۣGblߐTZ K{%FpN3a ʳykD5h*;79.x:^VM2deh bH3k鳎SNDĵ.sbps2iq' z^χ, Ҏa_yx0QBq-2cN'"-NX xIƒ7$*|5>7K~,ǟ1%,?y٤v(eM1a]3^o 0$Ѵb a =t̘4o*?}Tx8+hlEPFQaI $"i k3:[Zg<uuY5czӿxdp^տgluZ2=!2s 3sޡeluZ*=)!Tbp^/ҿʘuR,ё$YEv ]&@>1$J:\!ӵo74ְn-q?wS:.Ce+O*ىjK[2q(׼*Tv~گ2f,B{rƽȼHqʼndp^uJV%z=eTzIE[QiUN\6 k Egg#L^iJ}@+%) aJ%%kuzQ HLA ÞF<`Gk,ՄkJҞ8}tU:: mN6nӿB(.*Zݰ,-aY§ O3]_a㧥S)hLS}4{ h,?Yxf4D$ẮE7Ŀs(ڜ`uvD[vr>ڏM? Q4wzG{ozK`ͳ}6r`_TZbtQcԜ+$8ZFؖIh?b<u|+l|jaL/:BMC&Ը1d+O؏wTCA03!}3h1c5uUf]<^{!zYC+֍*&~4tF͙PHXk/@@*xJ}Kk[37^E]]T ]5_+q3 L5V+4Duz:<^hڀ0lY4BR9yRh_C"@M7Dߒh655աV<vkIKaPsU*=be]^ʞ>w01WO=Iڻ/V ï|f"x!W+Xe"Lxjn(,NcZ}B555P`AԎ6"Õh|>p)E6=i2bDJWgUk}k㎴騍GC>RJnp^mfOg:Bb"tUцM۸9OKCkŶbDihNnN|TBf# #23P]+hWvuie w4|%@2nnVoS]6-,= o7`UnJS^]R9wJ,Ͳqy{_l_bqY싁¶vtˀBT:̆߿=ew]:oQ辤(Ncyck<߬\6ޛy׀[M֞n0s;[`pL[:$c3_FI 1)_$ZͿ ]ǡʙ_$6C9*?ˇ}!w4d%~R27;c/q>K˂r/aC^oa=*t7A|1!GBߙdwׇ㉟XM7m8[5ƾS%'Qj Q8=M_) QS3qu*yWF\,}-ɿj'¿'}MWy1!״M_XCkjTy-!dY / D K?o!!|ORBB⣊u>n}sX)$?-#~.!3wW|![$3 +hR2Bo[>쯲俌TVB9hNB&g6KڪY-N)>JlTʗKK?ʷS\\_&w3 Q{$|!bI,يP해OQϒ:PA'%:~@֢A??)|ÛksR=RD_AhW B#]7<}g8|IWZxϕ?]Elч_c>zb|y-لƾS,-o!9o%~!]ҝ$*.} QwRQo<-*_MO>Wo8B_kHpfp7Kƾ{?<"E>4?-w~V*/V9IYė*r/ ~aч/_"D|"˒9+~bч_%~"~&*_@}PM2BA?$;WoS\M}į#?C ~H di?^?uRs?7!BB(~ \h g7c״pgqI XWTB_Iǩ|W?Euq /Ryo._NP B-_(L|!&~6K4BaOC,9:s ?H &KאxB7o$*"~Ο!)k d MQ$"?CҧC -NO%_/!sB T^JJTE TB99:ÿr Q~ }7~+aʒT鄰_G| !LEķ\#WR/!~%͵~ ,&Dg,K5[ /qY|"Ćr>/#~bZ/\hqc a_**/~9;?@w㟌i,"g|f)cahE7_*%D|n Їka)?iRЅsxCH*/&IZė(F~c~m8!/#yW>w_xmC쓴~~KtpnOSŜG|"_Y.t~X"%>tpn#DʟxY Hz+: u̻RB2*tEU*&D'~"$x.7*^@|,|6!Fҵ}B(. /SùYhNT +In+/U$tʫQ?tE'Z`o -3$ r,VD-^gч[E_*Qh+b}# ha_do1sB!)[oUl3YOvBo'DS?NTeT$kG$BgwIzBw?Mf~{7#BW|B̏%~"G2BK劼GUIFq=EΧ G /:WhV~N)$IC^}8 = AclJ%I_Qy,[}+ė)bl竒JBay|mEޟGwUD}X,]+&X|p|"OEd(XPZiNu뗒~帿OQ1?ۢ"kIUy!7?%RNT^K>:Ez>&G[1ϒńqIÿD⯒_ Ї[_T ƾ9[zB__"_|I:}\2,}[տp3i|\!7?%`WnR|B|ƿ%(_>1ϐtʧ¿qL_> ϟO,,{0It8<ݢS/2h Z/Uyn~x$=_0ðGzE/n9 /S +G Bi~ 2¯ńh}_o7ZڇUW_e?Kn5w.M(y7+NB+į 4;vߦfH Ck WW[_IzʋQ1'*_ҥ*cHTy5!cG;GߡIyTD$@,CùN-ߢ8484sk,?@"Eė#|-!,s7IB[Q?_C[h__x? ɔ%^BK%Ƣ/#~QP?Izʫ1<@_A<%ݨ&B |ý *q<_㓑M7?ߨYۍWo!~"!柷?Y;$q"mW(bo?廓FřN(.!_F/Wls=kQ%U=e/T烒t{?@HÒ>x?m矏Hʫ a>eG?F|"KWeMO}7?m -<|NU>_%}ˢ'~"?_(}s7_o!D|9@bɟ珯[~ -l矇%=Bw%֢?EIʫ1|?@@|8XOT  Ї߬ь?'~6!_?WssKIRbBcWo}+G1.u4 Q/_7u7^?/'">*/&D|[-Iqc?KmD ЇD |=ڏ8jF~Ĥ#d~O#ʛi" H9ɎwF8I3T^N9 B]D"3jB_""]IY#-"kq~n<ƣ|2'G,?&B/}%2E tʢSo&Dob/*~ 4w Wn· &!ڷR5ù3'~6!k?΍9?I.[Ō5YN$ ᖄ #[f 7'Ƭo[}OmkWo/ƎƯsNH|xϪWl_iEjjk,*mrض߶}6niNY}ɻ<*0d?CC#S4krBzG֏ R-8q#VC30>K>b:2@0 #%N۩=RS9tnX &G~h< 9~{LVq pQ4l3Qw$ aSU-7X׺5q۞mehO͍.|+6mж屎gh.9F9Qr;jއaF;uQSj/`|^ d[2\kPSl455+ tӓ^u3 v#[JxU<3_n 7 AWAv *e"ݗΎ(67绯MoW:% XܟƭnCtw 4>Au4L1hrK_ 7U7y 4k2ԯ7C6jJ<}m`#/Ywrm+^$:6CV;Aݟ)t:t9b2;&G%S|Lix&'buIS=}P^uv#MiZ}%oJu/aLR %-?$+F`ztO|mrZ.e^\#)-o;.In{ʼxo=x=+AK{kwyYNwR5N 6e?xPy[B&\7}&Β^1};zc+"Gzc=E4O%㞵~k8o~||/t6/! ǤU$^?׮UØ$L~~BձN &?}q)W'nN&?$'m|p)x=a=q8ɯ+rWJ1'ZzZB%W3Z\ٲ<ǽj)kJaԵz2"iZ }[j};}|׵(B,BP#  c,2B’`DZ89=qS8%^z:1{f7iH.7s=LٹʭZ·[M<^k[!'J,vvRFV:N;x'6=Ms^dnS]NV7,tjphጜbg lu1y锣N'biYV-pl59Ri F8(fm{zĊ= 4}9.5H6W&zv>nYJ ])~g5ΥN89W caVg9;:flu6;Ơ#qS=~n?-7dcv`Ph^#g ?#`m|=/=K"]"\XNDteʫ2(OrjJ|!o;=.ydp2Z_j;^bx_4xS{Evq CHsW[γFi;umҲG0J_(FWO>"JSV92y]Nch/ҜF47Fܴ|ωmg̴ݣqՍܲ40-3Z Ϧ2xӚ_7ᗍWz.t? 7a}uYHdK_j`0y\2-}g:pN <&俔u_؎CoDkks^]{dڳX85 [ j&]?!9tgUpCw iVJT]o5?LNR_ WV =ؽuQEΟd_r5L9yXӇk:S55i F>lIFrҤSVJ!Y2t1[mO1U^ DA(*v4O<֡*Q~t1-qrXa9}wG?s0s]N5&{z$=%0zrsG2w^Cqq}+]l?U~i6e>Ys OL/˻_?_q⛴do `U^oq/N¿i/ DCn}} DIͶÿ/Ty ~m >_jɿTZBZ Aꯘ"B|QwI;ÿ_BJS-&_LTh_i}_I|R;xʫQ}_J|bٗ\ }_f)T *is}/!D#T;HWƩ@F>@|"v>*Ӳ_K65:ǩ@IԇM7(n_G4Q7G~ ͊dI?>B}a)>ۨk?n^W}#y]5hL:lчV RfB}ؿ-;A|!}?d).S.k1W}m !D\g>?AZ+I{ʯ$DNF~/& :BO>XwgN N7:^ߤ<ޘѾ_u /O0x\ ѾO$P劫#~>£}E ߳_\7¿ۉ߬y&@_ϏЇ/ PeGCޏQD|M3*Kx)EX_J,̤|"v|0N>9y&JUW_M{Ivחsq}#Iw|bRy9ˤYė(XMzʗ}1'}Պ?HrB/o"~"gRo6m*WL-įWJ++}MM(ۉBBoSub]&G; ME]>"#BgɿPvb|OZo{>L|!~+IS5>Q7*}%k Yh ">O6B߮&}D |_W^yU+SMzB;o ^L5{ Co$M&E/RcTD>d9>xx"7]g7K1/uX %C|̡T&+;`E/%ߥIVy!Ƈ?Í}3Kk?>B2B__M~F ÿ_G]WioD'D?D|& ,FfBNyX"B,Sp@$8e#[M!~G"w)䮣ENFÿiU7LVh+V`ҥ_J -}-ϡIU^h"o>Q$ ~kB7"͘[gч B32u\b*o&|V_4~9o#DVXgJ+b)y/%~7!꿚=XIkX¿}WGeW+$ZE -kc-<_MGk,C;C g < 1yù u}ۢ  W~g:^'K2/"D|Pel?E|!w= W)Vku+I#kIqį#7(n"[o$7)$'O"~2{ < rY*_?>i3_Lg!\*!D|>ZBO1v~o'~9!|!0B_D*E^߽u/#AäW|3a,N*>{M-ds'%rBu_xˤ׫Bn`ч' E_ C^Sd-&M5B٤Կ ߻GP=5R"Hh{_w~IRy!}W*jvǷOW(aB~Io%^}>F|"|>n',<I WϘʓϚu>h?ϙyW+B?O:%e(#a+-#T 7 |:=?bE] ?N ~'LO? !uIį!OWL?#~ !ωoQ'0KN)qIWy;#@L_WKEr*_FЇB$~$~!oV(C?D-hp^n%BEOSD I'q}no\rB+/"P'~1Ui&MWRB]/1iE3jUdEo5!ڧR_\mNK|!ڧbBqW9#G/^aчO*q#_%)n"f G~M;Ⱦxw}د"M웺ïߵ_gi_AT^bPk-_+7kA/&D|'rB+ ?M[7| 0U}fk673s}|E_FXߦߌv>o#~!ڿ:M,wZxIži.)mDz_;ci{}ywͼwv4{=mK!FvZcY}kEӟ*m.I'c(Wg 5HjnFnO1ɮ炒DO7hp.nP'?- qxCC@wӡ,I}2}8^ǹ ]o3^mTr#/ }_82sYe k ` [?LBbΓ(JNApdGsNeOqfZ6nZltw.:n;dlti݊;sFv5xq7~?$xm8'-Wm燨Ϝ8 /w|Y?Hy14g\„P_B&Ӆ9۵%Cg^h`eWP;K Qfh4Kf^@]vKo>;l97=d^KuK\װ i6< E?ݛG~R'Q95ܒ.cr7Y9:kϔQ#÷jndfo'Y~J~u&-Z=d+--7;-{eUlI~R2ܾ%;\zYܓE6Cm M Jt-<[Q<ށ3@EJNvLwƛ&jݽd%](O㫫fNvUi}R%}Үсk,wuT ;Dޮnڦ/J5_Q++K*|mv4lۺCtoSi_deU>C/7$ ׍k3/݁dZvZ`kG\1vYz^9b;f1mC5δCY܅lDł݉OwN6侪`ݽ1Gt{Oo4cLATwM9'Giݐ>vWp$h+bҍݷ2{:3}ۄpH)W*鿅0ݛflFƮ)S1M&.Oג?Z4zS魐Sxa*doOToY:y̨H(֌SkݐdITS==vq37bw%R]UaYta.lZ[a%'Û7[*6nޜdGVfdnq.Uzÿ+j/M%~.!FZ-<[LńL[OZM>Y*o$DlЇ7)n''gE)BXG8t9NBM|mj}v椷T Bn'oPRoޒ&_Ї7)n#9-DJNE!~">,'7;LjߪFs=*M9=&ꯝO9x*=(-x~9K,B9(.P^e Vy !&l8K /&-ėBV+-]'Px۟D|2ǟo3d_NBJED4¿AQ8sB3#o!y9^G(b}.xnS>W^/礷 #_4'=U^L{!-nsʫbF:^BRBNzk!e%j_I!W_G^mkU\kD#F]Nzj7~v@aķ{6lB FK[ '3~I rxY},^g+&X/-1>_D:m:[D'/" }"?M|"Ϙʗ_#_NsP|!"X?oɟ/*ŵ2 :mE-B}N߷NMNE]Tw#/"}jH]'&LŊqYψ_7IoS-E_8-K+rm]y!_;6!} <֢ȿjB--*?5~wDOhwݐ>DRBCpEH縴o jUbڿ-W*VyWy nsE'V,򵄱=w-?u5gnC?7j.[ʿxy[Do"fNfBo9e-g~!//_j?~.5MyA\SM+/$D'~"OƧʹ+Tެc-[_ cwE*/'D,3+ cN9E[~U*Kb_bEW_H/w}L_~ ?yk uwLnjLvkY+.ÿįUl +"@fnԇoTl$X7¾nԇz1>1M_O[17ߢohFw(̍_S DM "5!F5ג,1I=B_'m a%^.BwX⿋/u n%D^M2BA_N ?80yùܻ- roӜ s7en"B=ͨun^&;cnLzE"bwm]y9!Ɵ~kч+-%>%D|&~"g}<षhÿį%DsmC<-u70MįSLO?܂/_7OZ[HY-o'D?x>#xgl3#Sߣx9t$ 5~rY?bx%~S m/cr)ߋ%D^L2E86ݮ| !E3wnoثU^Oa7*_O?뿚 NR#Nnm=*F^!~b;&¿7\-wGo%+oN+ .'s~}eOApwr@̿P&xm\?XxùןȻɸnq^(c&}͢'~6/p[l?۟Vy)! lG&~"w)grBg#aKtb D~XW bBR8}gi?RUCpW$ <U>?$G#%{_?vӜ-P|Bї{?%~!!3B/&//W$_!~e=+W_M%~z 3_o%߈ߡ$ķ!?Ycw"_ON~| 'X("~n=N x^>쏳俘 Z>6*pڕv2x6OU}ؿ"EfMm h?_ޏpȞ*Bl>ARBߌeKg B/OWCs#N㨷~MFޏ"kb.^nч[KelW/ЇEi(W" Wi(R^i+wl"Z[aيI̢$}רDޏpWj/k~v-3c}|g9a7pwqFn##oQrE:-<& Q.哎#E.I'T^F_gI>?A|"Ǣ?IUևR~9/TiФ3*_LOG3\Is} B?IyCp\3 QOST傳}EBϳ/R*kt9ay.$~; Q#^ B>EW*.#/%<}^j?ֿCE>U"DIB^mkU>mч%k?r:Vy !W>M6.ޤ#}5:6ޡeG;}YqQL_Gi?/sD:sG>>kчT^b@'>d*o%D>+g~?nҧ)}T|Y?$(Dp }H_&~"o߾B|5!*t+uWBįUl$oD(\~fEOcw-<绤JUEߤ~cG?$~"O/&D8BB|׳s~BKKj _-!m ~W^br"_G,B??GC6|K~!~"?%(߈GZN ~M߬5?sDk j|$W;eq&WyoB|mG㉟H#a01I#aet"HLu2?O|%ĪSUDӉ_A+ Uh_3%\T卄h}wM_A"OP')bBIE꿚yߌ?:W߉ }د#RӬU+TVG]+_7~Vu%c97Qo=o"D&7\E半xJƖ7?c+ha fB# hUy ^&UwVK2CG| fRl%vtEۉ/R=&u|1!^~eIߤ+,<]n }|.T_wwگӤ.'9aiч.=k)"\ʫ6'F?d~0W"AjG| (=kҍ*_O=gғ,# oVBLŢ7Q?ޢ[ȿ̈́[-LOۢ?6[wriFE3u|Y /1v U_(3~_{;E ?~aһT^B&Ǣ"~"?o1!ė+V9~xEK| &}P+ }įV\K?lGT^O?B?biz?N"R^H?9("d|/B_HK Q_$~1!&}Uep_1}W/WD_3*_J}ݤ[aWom~ˤZa*$߱({į!C%?0}C7Y&BO,NḦ́-R6¿Y-?+N|/>6<TOsw\knl]7f,m}ra!شq+0}YTbf['Qlj:.dJ`SވB`W?VYfK0mlQbZR6JU3 oc+ONSgnCc!d˰t!s讙.l=vtSAQdˡy"̶>F44|xՂwoDAZ[{5G4_גA#Pj9/1G|Q9Gx>H.&z=-ߤxҏc{V}&(=Yr,3(W#uoQvw|.XFX\:| ]fݣCV~;>m_tA=q=S=` Yғ:}'=}w0sn{ Us{w uE90$?x<⸒G:=":ASd1xT*1s`hwW`w_o{NuwL 6&>*tT'zW؄#cTKJzOMe_i㺤ٻ0TwW3wNL+k;rk0ŭ([/rlXW#]ptoG٠~\PI t䗈k `!Ge{zK:lzzR.܂Hâ`Wɠ/~x2kgmb'XĠ3Ϭ oo W@h>eF}/bdYEH^o QJuj#ްI#afH7FLGͤ7V4]ze-lUęcF!2DLFn]~zb OGj ]FѤv |3d "kkQ]#j_&zG0߾v2G+8S)l> c3C)ds cC/o؁Ҷ8c;A(ABhl>z^<6kʒ]{twQꄪz"±RN?YNY_>½rrrɩ>}ǔWw4G\reJƔc]#mܟ::,FZ7~`cJ#/4GI@j4P:e'w6S"SSG}?gΕ3L5}kkҏc\>>G>~G>sQ-^;מUa :F)GԒ"=^O$7N9ZH- /JNUKMAt4's;XiiYV MH ‘Z =<$svlެ$i!1=g?dt|+(?8 \}ޮҗtyF`O(r|:o9BhDG^Xh)0vZp,+mvO7msiN#߸Z2u @$.q=l^rʧIrqgV[O2XϏhřQ5~|:*?|^>**lYqxVg:*LƠe1pˎx>ȥe7њ^l֔&ORc>xؐM^y-}+ocuOl'sCل si֞twN:EmѸ@ 9#0LDY-ֿl5,Vs)GENFXꈒb's>PHaeS\H͈Σuƫ*-g xJ|9/9;HTdnhӅDhue锣qcy:ɟSUT.J5YWb*k}"WOl'ޜWV2~2/5v**0V=Kh&MJN/*kGRmԐ 5\`a% #*P,81g eVBr@Uzs90XAP6 m8?6n`7pLv';ϖw="G*vp_3Pܲz];KP6-}sR=v:{ϕ(W w@)~ZjfqĭLi9fiKUr͆S^QUo;=?.<b-d2F-xkC]}d][ ֶnA΂[s>":Jڔc]]=v0$bI|B^J?"~b7[#JB7'BU>O,"_L'< ΢Dį$_M"_CH->VBOe>/!UsZ#}د%2k>6fCɥ4̦+-w5>ʏӺx@|!vCn"Do2iE7Zq#՟<8٢M(_S>o!~3ؗcmHj)m2r->C|!g/ >U#~ԢRGb o&D.Ї+ߢpd]~Bؿ:B*?^E~ҥh??#mC:DJPo G,B)(.P^7xK?/$}[/%/&Pxn$ߴ^&g>#fW*֓JE}IORB#o&iٟlI_ >.">F,y/tI%as-ė(Q<ˤ稼la9.WgҧM"R"UQ_hG-E+j&ThtE_J|"į%r^aᑿpoUy=/į#D^e=*_O4 wckߠ&ݥFB?Gwn_G o&=@|!&H !ƿ7;~.oOV1>KwJ){I={S?Z^¿BKϤZxA_EO'p<yd_3fns><=}9Z>7i1~~nwV yIW\E?`E}bE2~|/aED|"L|!+/W\C}դ|-!Iÿ_OIߴ{*_G[įWl 6;CkG&EoR'*ۍco'?Ї?&~^g#?'2+~a/-<%_EWN8~"R| DT'/ Q#~"SO&E6}+n 5*H3S,w7}Xx Q$ŷ/b^ 7XsPO<~'!3}Ƚ o"M.ҟBF]D|"J廄lM}?!?MoB:+#9!]GO󕟖"oRį"DJ_Ovo hчe3FQ7$QO5N~7~Zgjڿ7cylw¿o%{/'%![KEܟ6Xg:?D_o?/B~}e_ u}ۦI=h7(/sBb[&D|ZE_3m&Ck #;{u iS5}IE<ϤTy)!&}̢I"E_?d*/'D~8BOo Ohb0x៦BB3R]=+ 0{}9d_~A a_~͢_ DϤ}hҗU^AR>ْ}[KW+b}"&}K 7XYo[ڇQ!DM|=!7mBEhҏU^L(I?ÿ?_qE. /&D?#Lq9þbP E<įV\GeoTڤYooPFkF# -}*?7оr*/&2}3}b5\A/&D#LBapҾ ~/wϫ|-!{,<}mH WhھEe|%>Tr$>O ~; 'Z}bB?2ťd þ*Q7~1?դKTM%įQ@[p@WڤPg)q< =%m;>_ Q?& ,>񥊕d?iѯ$}şG![B|"YčE*_N듸6>_D E\x/&P2RŇJo#D9<^eчķ*#K,~p &Tb- HH/#Q3m_B_mч+ߪ쯲p(kSʿ(\~TB[}t}opm(I-Ɍ7ۈoRDl|IP~'MfBN\Zx¿KԿ@\NzBw7WtW~#!;BOp-wuZ\Ӥ&MKR'~"O^~B-Y>?AVŝdǤ^"& Za6B>WnBЇ-8Hk'Ӗi'T{Ѿ_+Ҿ7x*"y\?A 4?֐>xy" o8νS쿂Պ dN^ WGk,냻6ݖ~_@\_My<}ùϯD~)!Aw+/k'zX5*_Dq}!&D>H|"=Մ0kI#7 /&%Yc&}£?NOP )?ɍ?JgM/>{bdsŤoU^F(ė+Lk?_4}%k1_6髎;Y +U7o-7}߲Rm& = 5~dΘA#C"IY`|B*~C,B?%~Ʒ~g-<=?(_ "ƿ;>U^N+Fҧoym#MXGp^m֟C|郟ô;~u|M,P <jLB߉_|i|MT?Pǯ"ćjD|4¢/RODKЇ:K>+_ !w˴QH%~!ꯞx=o=!R_!r7b>t, AK|!'S/Q>fᏤ{[L֎>ܛTOsOu\knl>ygs˾C[T:{ _ў>P}55z',*Tcfؼرom<;U vƠr0mi. y|Lߕq^R""h͎a;#S}Cvpɺ?zwsÅ1˭C݃A nƹ+Й=3(4 p,i;V76ؑؐ 7&vT>FT8R'# HPjkC!g##O-:27We|PWzUEx`goh4+\ tu+tOU ]2Qzo3+`t*ƛ{/>6qk#}]==Q= z,'Gn4Ey}o`sFz]?՟:ݕl{K;jߛAV1h8} EuB:YL3l(d#D-NufV5-O4}Ễ#XIO ]}=Lgw,MϤEdyY$3-5<=D.9:%6*op.<sĪI$C 9G=|O&' 2@j[y(2N뉓vNa "SSG}۲9W|0}ל ZK߿uy#p-ߴߙNpN7zN|l #_#w)P%9[dq ȬϞ~r c7#|5aHs4㼓]iz:^k!hCBx%a%=1dJ[8)-񿿂]t5>SדA-y2Η_v6?m!kѪs6yBCw|%D*"tg6$XDXD5<;{*^A4aq?F+9aě+QS+[Xeh/pn.8Nd7Ngi=Yt{-Z U-ë(9; ^oS|{f݁Njմ9Hɫ!S_%AW<U[߶]2&c rYZՊ086DFǤvVCoj̯YffLSmX#q,q&zZш7WFū% {%9*x7R"T? ?7}n5Y~kh?ەKnI tzsj針I{SS@w:)Hj w'dV@Tt]\VxiNOY}ۭxu;2B+AO)2^x+^U]u^[5~EdoFEsP4g[?j_"pu9.EijL<~pkOk@|بU[$/M'n$%Ys (-LiGk:p[o3)o%Wϖʫ&ɅdzzA͛,9u>OF3J_<{}폤U+ kӽ'znͼN i;ƽ~lɸBWxևkBzVk&)H/.yq&QrpN(NV$'}Ƣ/vu=b{[]~*@R>bj_͎'~v&V#r"F ^ܲ[XW>|nLVT¿iS,!.! }7C[H]z,B79ȿZ/&s"\,ou&x|1!KTp[%JBğ!>[H_)+ "W¿?l?ԇįUBSA~7}*#a [>nB}~&!~9^BBq+eC!hy`W}i=+x7|"a#}yE孄h}b)_+[mkg'uh]/'D9xv}v;M!}NJT*o"DF~͊e&]>G]F aj'sC:擟WPU^g}SQ\`>jP%hc/$}_J_LėB %KRBen#FqRקL£}' i7(IgUuC>?K| dҍPīxYQfqNz*BBRMUKٯwZ^ר|/J Q?2N wfBv_k]j Z՟ b}"z"!~"ǟ\#7Bߛq bߌλǸqbVr^1>Otǧ{MOsy|EG|"g4C*/'DaH?D|bLJ_Fkɿ1¿>7}V 1| dS&}I#!g,goTJ_ķ?O6 &}#/nB%(#Jek_xM }M'?Մ(wHD|KO BįRD|J|Ф|=!G&âL|!'&C__|!goTDn/,< Q"Io#D;?~_ڹH¿?Dÿ?[׿ߟ+IoN8~?(>!?x.c~ qg]@1oxZXxùOSU>'6COs@7]y\;$_rAK,BXs)oc8Vl1ܟMo!يIM5x/ Olx| a,m[|EЯ$~1!_XIK_BjQu_K2BBq/'~5!WVq="ߨJzw("ķk P1Sq\kr2_);̵TEI)?wlI-*_@m6ۢ-ė(/%DF|jϴEl?3Z*6}3Tƕ}o#~#!̩=*DjЇ=o&}V]&B}ؿR>'W[a*K)m&DQ~̴܋W"~UDtĤ*_CSh ; ߗ*/+wʤ~SS;򵢰>TuN-oi)\?GrB ֒?_.T~o-tحHP'?9zI/ÿۈ/RL'T/ l>?EߕyIPy! K.|/QD5{Վ<&S>/ϷQ!D/&KMl b*IPy1&ʢ^A|Ed}zCkTI|b-5þboT2E_įT\K_g*'wtEM:-d}! -}g+?;оo1m*/&o5}#[} {"w_XME|!o}*U_=/W\MTIZ_ߢ% -}ھ2fCʣ߃:>$z#)OIPBBMERJI~%.gUXK~E?3&=?bџhGBsY}XTϛE~`җ-oUl'_跓ɿ=X~EZ~A_BoTl"ewTI߳߬HcߵEek~B}[տ$~#!_ٿ3*o!ЇV~'; ߃TK߇TAR> lj_CįUDy#MWD7c>4>Yɴ~-).2'ڄ?0>O7J o*XxK\O/U&T߸)^%h_d Co"wwZE/F(zBWB!/YO|!/'~6Я@%d*7nm\;i_S'e*KkΤ}俌"EZǗ[i/\|qooW*">n"XaGkU/ש|!G7Xa+z> FBo$C7[xL a-xA7si|w"~F#mMjB K[ƀB_+~{Xt~)U J|]Niy!*-yI/wIl-uߜ?HBEܿy#CRB]&T^K1ESQ|%!;lj_@Io DDIKH[OrOd!F\< >LB́A[/S9`}$b}y<?٤|!)/VO%{6 WBįUl$gD(<[͊~sM£o'VBA&<._r%*/"DZKRP"B"aWtʫ Q?Ї;-oVy ؗu|wM#{H9ؗ 7k3?ޮ<<ߩ%(߻;+~M"q/OnIYx*_L>B|RǷ} B/'*j5&. DWX/Z>'P/ǿ`W_"WUͯ[W_XGfѯ#}劘L;ĿAM?~o-~dG&~3!ISy!&EGŭd-[Iȿm[珨Z 1~ Hϵa|W["IՎT_D,B_&~!/&Ms _uM ÿ_[8T}0BaɟTB߄<1#i%_8槄^O¿ ת훘B,BwsO!D{j&P4P/q w960}!QfGSW RB9}؟E|5!7B*!1a<1ϢsG E}z@8ϿzB|o!⯄:~&Yڇ !+'W}Kߏ zAWs?0ʴ|ȧv:ܵy76eߡƎ֭ml)|mfC-ۚn;{(+/LRckbǾvuT+dWa;Կ=<2M@I…eݽwWΎOdHSee(MDM[[U9ƛZdpꗔRo/ZՒi2i ּzJΎG_2e46N݈qgGJU11ܗ8,s,aֳңp}c{|A%>Øu\V3.~]Кº{d{X6I6,QV:יFK$K_`CUcY,/07c0d^pK伊Fkh5vF4* ;.'X=ր>:#ldj#JjiGVo$o8yHѿĭHRQL&IǾeWc8>0Jw776z$F䈞o y27ɠ >lNzZDo;J/#yd6=z+KhVv,秷Rk=)efx[O7Жr+Jg o閿&Nu3[‘ަQ^ k`D;qq斜Q\کsXg72<흂c炒DO7h0OF(~4p+}4fxCC@wӡ,~ar~4ay?`4s])*TeQ-T n9.< O6hQg1D4J/nBE кaj(e'7*4, MÕ6#(_Pw<7\(ڼ=኶xl;I lsې`{0OC.&Wkgun8wKȨ Ȗ|iCP{b{{hVw62%:{En3܎ܟB'zgp8ʂ,p^x=sU3#18(f}GO?ֺ)#j˳;79h8OvQRr/9j`lQl"Rqx9J^/-|v!F؂Gr .xfpyGwmwWm>42z>κ^SubMIӑG^fLh5euEx9c"utx݌:<`c[k̀˟"k@B`UlUɽl;V \;ޞ;rRϓ;ޞQG>l[j-&k>N6>ly{(&uASrl.kjŃrхpq\?yt.>h% 8g$|j3*0`{6f=zZ&ɟxseT[st'(ihE+EX[w2*E\##~! $j|oct:;TQCѾÝ$ߊ~ϻk55'jC$cp,`ػ6WGl0 Q5;{ShI;%S=.##׻5\Udݭ?)S#k/dn75I"hTs(?`dٚc&NO ֤LNm4{?_H_7w I6$K Dq𺴘;r[rUI}.ndjfPӽ:{NdTaIEM3Tqf2X`&==~{@mZfyvT2\b(uf Voget.8:xΔ݂suh";H֞OhILdPv]ƔUk q8n#Rs|Qt'-L$KS%=fv6Juu=qrUq[ww^ wtwm3Tkdꔈb\w|8I(['2(?ImE_JzŊ˗*@ǙS>nч|qPDJ}<@٢|n`U^oqǻ[[/`K?O.$# oES~!EEleńoN>|'H[yɶ+_L'+?W^I:dч _f-"o bCk_ԇįUx=!ڧ2BAj7B}nbӇZKZ_NP~::-Ӻ_GYKrBO8 YzW*6PFo D6DF7)n#x%VBOS>oT 6}:B.}ڜk.@pۉ_JǤo'DF~;/'t>G]A+ aj'sC:*BZe-1C#"D@yyq^}Pel>N|)!&~1!O_F+~/K eK]2z ¿~W*֓į'ߠr%fΘtV[_7Do%LJOg:? 6;@RMUK?ɒ?>~?YT4X&ȢA|iҳU^AyI?T9b|y.u~|MzG½UkLz> &HQf> E_ƑtQR /% ?^fɟ ~!{IQy#!{IwZxؿ7¿W[gE] DM.ݎ^oTN}O>{nvC|!DߪJBW"Z&ʗ+% >/ᾧ?#{? Q{oT>fB/XԢ?H| !?Mʷ"~>俕R"~>d7T"~'!ķ)^FP儨Ϛ%>+Q3*_yK*Bߗ':񍄨oߤk)7M[QoEo;~W>x~򭄰N  'yP웵Sn"%//"WP拋U_?1w*:>ŊXI|I%rB:> jǏ%/S̿2Y"_A__WzBob>;(wi?y *@}'7+f<~ o,F| bq'}'ZNp6B-k#?O8ПD;u|Mҿc'!jO֟t~}fS@RE_L̵dlʗj|LÿYį D½ ПtP7$6UԿbfkU:?_G+fc TퟌЇih5">YQG[ ķ*b}#gb)Ve"K߭%~!#2EZL,P/W}Gp^8x.c siNz Iyo8G7{_Xn᡿]5R7{K">?{A.#~!r(.PYB%*/!q% h* YLp9dR(Mך>ꯓyIؤ#*_@(c]&=ˢG/QDHL:2Bԯ߾ŢLj/W&T^E(}vE#~2¢_}a?eRM#~ aOׄ[GOߠwgFw:?߾ÿHqi#[(>w|NIUO2O!JŃT4 FŞnא,?ՑyI/PyMzE_@"EoXK1>Ȥ;-b;J{k ѿ^j-2W;,HjB+,[MwZh].^9<mһ-z)~IoTy! &Ӣo$\q7_CfNަB[#,pc>a:n0 }&}'~!kџC}XE(>#~}>hZxO/l'd̬bT|E/}¤Xaė(اL 6,+@W"~ VQ{3*_E"_@}7*bI_SVBWME}m_7*G}%}ʷki?csoT,BLg~~N<ʽ__IVB/ϢE_![+R>"D>B?GD,_{o-!blY>d~߿} KȾ}H q}O_hч/U,# Sy9_:n_I*B]_Ư"~"=ߋK:_Wcчo }{1[)~ȤNo%D\k1>$~*a|'!_W>OʷuR?m]Pg-}Plc]p_qgos, su[O(MM|R>2EܿJ|!{>ݤg|=!ǥl3WCp?$D(|2dˉ/$DxH*/&4*_@{D_֞w{5ZBuė+V/!_XGo ~!H UfWB-įU\Oo#o'~6';w{o#Dy /o}*3g{k x'p|>!'aWBC&}¢?L|%!ƟMʗ>OϧWE$Մ3&=B6B?@|"_ƟW/_4*H/U>2W,|_ !koSNiҷU}m H$߃W^,c~Bk $Nq3gPbʛuKL4iEM"~N?٢O_%|!6BؿuT*nB4(Aeߙ_xy31(TABK#%o<_CK!N"⋈y|ʔRT^H7Y›뀄q׏/mTv@ؗTcч/p{cJ*WD~%Z o !Z눯&;a9_Jׅ[x3cQblo.qE&XgIݛX^奄h3V%YaE??_I*E\I4:*_FaC>H ŵf¿&7Q15ѢFBԟ;-͊~Ll5U;"aՒ?KQ.B/}g ſq3cybݤN-{,N>K3 J|"ַ2]ea> Q~\8hJw ||?>.qLIǿx\Zx?JPڠǤ|!InQ\BK[&ݦ"E$kч_LO6*O)&=ӢO%>Ii&=C餿3,3/!s,o}*/uk4/_{_3*&D{IaG/ F&X ~xQ>쿘Lz7r7bx[1~I|"_ڤת|7!ƏטtEvBE xJ2wM^BIoPy!}[HBeWRhwPw}IVaBЇ.qʻ#Q_FX[{kK]/ }?$U Մ˽_GW¿?JgĿ%~-!Ƨ#~!g6 'sCWoVy!!orw~P|B?sHⓄrEyK |^8|%j?/A|)oY#m6-TWSy ykU>P'osci?&sq(f ͛Ͼ?٤>?Zyf7U奄:kȼK,?xܻ_JYi})_5!g||T8jY:Bo2.WWeчį"}3|5!ߌyI>FqٟoDC4"o&W˫TyOJBgy&[x_L̈́~+#~Я٦NyK,URlwkb-V{M歲~-{u})/UTB VGgR@뗼c\ 4X:rb)g"o~5I^ʢ[㯉*/!VvXۥRB]?Ї]/&[^;儺~C|%!31ɼЇ_XK]N<ģƿV;̈́"KeN7b|?^ڀO46"a6wt$D|>-Bhg+_U?|8o.&ÿ~1!{Կu^F,Bws1ȵMK ~!^_潒RB߫_L&VeXƤYQ%~q}.ΤUˤ[an Mzk1~cқ,k aZWGy3 cz{IU Bvީ(;LzEU,HzB{,cZw=i DKB?hOzU8/7['? UdPS\,AmwveZ>Uܿu׮+wm޽SeߡƎ֭m؂=u >P}55j̢2IU:oF{诉jֱϳS`g *ٖr^<>&Saz 4% bu];;¶s\3+~dHA̶76hڌs:mmޗEfP>#Յc̝lgqSwv4{S?pXÆ~+l#) )W\G`9> U:I58z.0LF/#џ.·v6dR!To=1̀5p)6vy!1\`96쀘}aM8x`faODõxȢSpLܼ9z[a/UNCPGB>FN07k1 ѻ2|%>V7ASj\szk.SDق,#%Y'e|_]fŏ+ѹepk%ra7 ?x$Wa Fter},]i u.'ݥŨcvFs \/2mG=2Gs|x_FEG|PMwo9lF,/%i';i=ڧz@{`Pcr\OT=,}X*7u?50כ{x=dG'5h%P }\t~ѾÝjyN:SJ|G"5'<L'>*tT=Lʱ(Dى(o&t<|;"p9r=:%O"k$|NX!ډ-ݽ#2ld{g$Z .VFiԺN7vl0 ܜÆ'843?Ub}=F3:"NB'ff}#L>5׹u59 K xqVa8>7K8y(#GzFS#]ٷ7ZCm37ut<:zw]Bk!+[g`3M<ݛ[x:3[JLnSGM2D@u5E÷aʹ^݇VT 6d` >7N>7i;錒ݽdϔGj.N9%-=yyS2<#{sIFv:G/z(#}bt0Kt81'N:m.ƫȢQ߶sL݊a59[[9q9G>c*ʧ'c&m%JO%;xYTgPh"XDž%#<{y)g>>Ҝ$8?hڢZ"PP;5^IXIOȹ'j OѨ(TA_d.gzwϧ~/8glSzbҽ,ܙ޹E|߃UHTߗ~o=OϻOϙKriXKE`a=^%[\W|D4KtMat5+F=h9eY+Mɯƨ# 5$Oe[!s#k0:iA.-!3߄czF5z|=3g<`AV/U zܠ_UzԿ s:[- 윭UKu<7-*z׿c29ADN6]B :.C.1w{w/$ov;N}6L^B(Sػ؉pδ83lp 'eT7X6!ǵ.(,l]Mޖ\B@ŗo]8iUv١;TBfQ72Zx;t'ps~7Z.=w.W}FDmDT!jR/<Ҵ,j s9jwߥ9Gdbwߋrܝ,-jg/48qEZNQ0g1_W+ :={؏s^9ǃO.絕xnĸ@@TVe9D`9[PKx]mhu7Ғ,GN6۸..8f]:K!H)[OGsn!cӏKk-ZgtQT?^s7XNcEo=^E(PjfP-}C-s#u=3pސ79G&գb̘x7-`:{Y!iyZUN.k18'V$9W.K9$wj/\ ?cR1&GP5k[Dp17t˨6 i3x%>kM. 4N82¿k?)\~샷Xӳ/ Ub_!(1;'z n\87J\7/.B \Kky/+wŸ+|q_\ ?W_m{6)Iu]r%&Q&w $w w@@vqSOw vQjmj oL=}ڭ9x?^Ѩ_ciƚĮƻiOQ( 1eaO3vN6m|T5eaFl%%/d|C#U]u^9~Ed?x,@t/wq΂JԁqA/JkJ9yXӇkԤ82mޛ\}v&~iR I6$K0XH{VO2;'ForOn]e~(Ji(aQpqzaJxijyu6QQqe^-a[2SxlU\U'kaU2If#IA$&Ly6hml|-?t撊M&#p5wzP2MiPrYUZCɺ519B lޜ= 3E4D~g)lKQ+˲eCX daDiфaN&eDbt6u8oJw3΁Cduu dd؀7m4-=`y#k6vs~[7TKNb5Ƴ:z=Rm^۸-}RT=vmwUy]}}=%~^ U+UR 2,*φ쬣x|I[9b=2`ʫ$v!pUǻ˿ 1\ggvҮ6o6ܚZfVs6eU[ 5oO sm}KO-6=dZ3$6d;QXZӕ;2*\KQUd#Ym䑾ΞrYtRfZnS͠48#eA]UR9g& N]J`3u|+T<$%W}I6}ғ*QV[9ΚǍ( q E2$[~,+)JMjUK7w$wIe+U=n!|\g"y?VT;]Ɵ=wCo9-'e{+'>qrqa;Z.?'5<9doޮkW&)eH/8I''+NQ~zĢ/vu=bKT_~%gʧPxy6{آ6>3b'.iYPuJ׫UMV>x7ſ%ӈXB]Bv¿o {ᾣ Ef?Gy%!*x/o¿$IE'@+O"YB(.'J_I-V?Di~A}WNZ->w3!ڧ2BUq7ٗ*o'i5_k)_;˩ʏS_ih5}#}}W}i=+x7|"a#N=E[,AV>I|!g >mN:^]h}NJTk*o"DF~͊W}yH{ʯ"D\WXwNt|s(Zy~9B,Bo9 [GaoZ^B=FBBї8ń?A|!{P\B3 /sC5˔>es=/'įTG$~=!;ME7~ϘtV[_7DķM&h[T #>Τǫ|כMzE?y_n1 >wIϳo hm}ؿ%+SMz$EӉ_HesT}x|D1L3bI52g)%^j*T^e&ʢ D&R儨WH&}I_?*EZR\Eu&}Ƣ"X/xIz>eч{T_Iį&^2o2 A!?([M"v {:įW@Nޭ򍄈wM-{H-/}*D(K{FBMZEP'W("}>jU}q'@pp2>=B_)q2gY׈/V,&}S0ZaW(Ϸ#D||kȿ=%5}=q}*&}_'BO&E?"1[[ɿ3o'?Ї?#~^#"2E\k~coH*BZڏ@q=A?R? u~q&] 3-7]Xx.SB$~&/[x?OZ!I_t=IůYz6B+Ft/Vo|>@nd/'SRj~c&c[x1$MAҟNy !ggп40?Y:?y _lC㯿 ,iիBj߅N:"{#aϒT݄?`z~(׾п#BMK*QrjB*`ғT?1B?)?)!?MǟBig\ sO*&=_奄R>?xF~:}a>Ȓ?.T~ ݟkT^Hx$?N^Iÿ_$5./ י&>E|"Jm꧂}ؿǒ?!\*_k!f>ަՄTF,-׻'&=Y*b}->Uy1&gч?_qE.!/&D$L'þbT2E<įT\K7*'1}Q)n!o!ھshϘʋ gM/>?@|EnY} "_BapoF!%)"_6*_Mb-įq_,|D8ϿB Mm_ q}C{:>u"E\7*_HI?#_XIdѯ$}WJ!kqS槟s/'3¢N<%qO+~򭄨_;> ZȿX^"- ֯R#~!'7;Wʷr}W)YnBAi< :7*Y_ *o!}_t]X+/>oD&MЇw/T¿iTK]y!f(TqI+$~!E&Eԟ_fUy ?q3-o.[w}b"}/R>F'n+@ uOFKt.WvB_dv/CP^%iߥį!DVVG:o".0@ ߊ,*ZX5z{tOPy!!g=| Kח;?ЗU>G7uoTx¿]T~mio D&)6B2K|o"}s}Ҥ5&po ci&t2׾"c&#)S>]? ?2E?Z+ߝ&uؤ3}E|"#&U BOʤ}?JJE~p 1wH(ǤOfB%~"ϟכ4݄}?`i?PZ2JFIy пO/,uIOQy!&iч?O1j3T@9/4ѷpO#?_J&5(sL]嵄(sMzEN| y&@+ #aįVl /6*@}I>R>/Hq!n< >LBoRDY_X_yC/ä_|!/VE|5!nk|į&VO|𲶿fE\&gQ~+! !~>׍/AO%7*G#&}ܢ>J|b1b7\*/#em yIvb?2+}ikq$ƤT}zMd&}Q卄h/D-p|3!7|_#~ !0 žE|9. !G|ƿ-fb7S_"IY`| By~Y?KE!7oIA*Oń'|Z~ ?J|!׿_INT;3 GbEU_mwNՄh}دOqBTV믖Go-sQ)w)Τ'$!kPm$~!L7?%L_NRy !w u~I4_Jk!~1!k*/#mZj>o;劸͚&KK Q&]fч]W6U^CqI{-N|"cѧO'DwXG :Bį'y}p^7¿dCNp߯ G҇򽬋Z&QfTOs֏}u\k};:Zܩ ok׺PSN&,*Tcfؼرom<;U vƠr0mi,Uc2o6ϭ@Pp!.FYwո#l;&ZbF#Jl2Qvc=]@Zq%pf%ěZ>l<޶,l~z{F,HzzΎG_k`2X;9Mbd8С?A,˞K?4)"* K\(\JZs?D×ӣ#x#k؉"Qrq(1> 3:C ^Ӎ݅ ,v4nC[j& M'ڃ!B] 4#1G -ְg, ꊨ:`+(j1d@pW|_a uRc2cX m3{[8GδvQ=vD vc]Q:Sxc(&zE㌊NP5cS,%db:{7AřOGR`ݕzXg7Ouz9{  %To`zQ.wMud #}FW$Oڎ8õ0}4Tf*TFR&:sb.PNDp ܷ@ O6:Qg1fFA,udϛLK9B7inK[ۚr`\qQlubWuՄ3ki+"h?>zfbܽeXr{ȒdcCHHB:)N!! !H B Fz!߽̜}#6|x={d~gpjf>f:LksVuʨ= s(pشbobۅe)mبJFIm˖2D+̹)+@7Q񑮎+DHIVfAAz;54<"3T<=]:~|f=h>YϚֳ7z ;d׾9Kd_wbq ފuP6vv/ȵCFdnsvpQZr'coԑڊ`IWJ _>ȞN \fYf,=%:F W~dE6$r;gCAl(]_7{;S`KprGdāЏ&QGa+ݛ-5k?}9[g K{58s?h͟4{{ifIv(̣ٗAYEN=)zH]/j ,z˴_x1ޞ;:{c+1C +=m}I~s~yΉܰoHZ@?,_0.IOx'rڷ ^K\A./eaHCҲ<2_!U OY SA:2^3؜48+-<>$h|f+8vpCo"N)D-Vt}ʜRЌws2Zo(vZ /xv 1xƩj$[`n9; N^QHw1}nG,_3MZy߃D^k LNC` K-,и9,;nDTMAP[BAA fs++,wq< FÏ0ΧFgW5y-}^G 9Jp="8e h<,Yck򼭎2]f8*-jVʴ,Onyc:'5C^?Df6L[XdgFvq{ڿ4etzvfcݨ5&C?degx(NR#JGr/xQtj9c4)hSy3Bf35-5'B#Oz'sU~jmڏ_!M=j0MRγl+X7:5,Cxw=q7_IywCkjߵ! ߕy#˽NK凗zn̥b3/绷wkwٽg2;PCvk[{Nf-Sik]y"yol켖;6kyukOKlqɫf96P\w/ }w1Q4bGT&౺jO^$򦙰;v-G6AmrU =1Wcxc [NEdT[cf {&8:t5{F DDBoGV4ο&u ^s6vsk?;5xK/ȭqqvgԾ5ijL6ptmwԪLBLH5ˢʳ07#̛ilX +[p}%@Ԭla #G>=f7v?nZb5=?u`M^b0<#mµ)[tDwRgv-5)"2M9 ы\ZkU1S֣2*7̯l_Ń8nO]25QZt7,Tw|oٵ+9J799ݩ'OU:6]8Vŷ:3:&{kU=)lzuߍ7:X=g6qlGV@;jkwێ֥H]WveNJk[*u4Yؗa/Yiԟ}E e8/hV%3"Jr,qQ;n89JCq>[<5$,6!T^/ǡhޯgϏD}?}ձwqReA煰>]N}7+K?ް;N"Fÿ=5FG¿Qď1%F[yT^GDÿz-~8}O  O"v;$N'I&?M1?T>U[~a}WC\C?e >u?ɾ7|&>7;ʷT "/xp%B\}7 B<+WX'~? Qņk/ݞ*_KY[KJu>šYG| !g= >t[>k;3 Pim5RBoK>o%~Ed|IbB|o!2?mk}_j%p>G}ď10^ϵ 6{IcAS9Մ$p*wϨ 7N3^+< ҟNziG|Bw=*ɗ"ЇLj_AWKǼdP}{MlX_I/w#?3$=J$~r{ S gIzg#a1l#Kzq>Q<~h?_n1 ~g&/'DQhH kV}wx$5דopͤϿAEҗ.ؿh$&k~MO0D+E[M^K]gV y}6gby; ׵r1B_ӝ%D)}&o%DwI#cyا }n/"DK>7ou!dr6bB_ķ~> ?HK1} C_u~GL ">I Cğ}_>Ї{Mj:~x+i.5aX -O_:X<>}]C&k7G9CO06y !y}ZC|Bwn8|.!?:o5T~d??ЇG-O_N?BJ$k#/_g5o?;~+w/&DxG(?)b(߉ehK*!_&O|<סEBԟo} L_d9 'HW!W]_j"]*BƿS_ +Їo4N #Bw @,"]g;gKy !Gg?/4?Q6`Cpp/hI^z?u.AjǾ35t>o0\+OA ?ӈcƶy3Ɛη .|Su}~a5>e-Q_YK<ס;4]7]B|lov!JʡډkK.g򅄰WQ>#~!/)"G%/iu_ϯ{IzBHR7""aۑ{| aQtP9}7BJG|l"(6}6(K~񍄈ko6M~ϔl%ϊЇOnh|Ϸ ՀEŒ^jK$Ї"~_&FW"~o>HdC=~<}E>ґ??*U~oe"OA9&/'Do& 'ʿQҭ&K[$Ї?0A$͞p a6Iw8aWW-P?h#a 6TC_wh;%eلT"ݎ^jFn[ x$=ѵk!ZAO T}]|@҇O4L?ПL|SG6l&%x&f:~}s'$gVBII;}vH~w}F|!7u~_|:!_ >%@t+bkOI3JBo%~G*dͤo !ֿ?ʯJ QĐ˯0JB_ϟЇ ~O>?Em$D3~|Oʯ|!o"&|E'2f 4+}7D/8Q&~ !N:-9syo%Fÿ'?E//$_l%&ulW8VЇc_iK&|=!KĪ? bR_ o$g,i_M?Q?H3!ڿx-Kھ !D6?GOX<#Kh>4sh_g3M^NO< y&_o7C\W^"fЗĶ8Q6'x#|2ǖl!>/#ʐ/1髱&J_+O%^Ͽ7K:v%g5>||¿T7 ~}!Jh⡿k!!w'_@bB՗q"IxSXw]^+:v픴ۡw?ΐOKR.vՆ8?ѹR GQ>K|!>IM>tСiH>폔[D6B_$\CB"~!ϟWH=ȿ></w,u)#Ex пO/A8?NsM>Iotso0ZϓBWbŞO<}^@x )Bo"D_"e&o&D_*u}2[ g7Hzg¿#a6\@_%5&_H}u>Q>[DwhcB[uW.u}V# Qo ]a|\cX_MxC%W&L)8^ QwlHc%~6!G\6K ׵_napa0&D|?&^+>L>'%Ї?p C ɫ 5]<@|!Y/-&I_w#l9I_0B#a ķ.&_Ѿ_Ї]L |oIz#I9׵㷉!ߣ_A_F<dk?1<nK# Q?oa_c?ch35~?J#JB7>߅bB_KH&?7bw*B4\aU S [P~ 5醘g?p&o#'G9/!%k򥄨s$t/3\IG8WHooQ>Z?(jB?c/#}hAhkx+ПdO# ǫBKXM&W5^G(BSk/ _R}H8C_o7}#aő?o ;ffď!D?pOy;x7o-^po.oVxmJB2'_N|!oSטN>o 57y!ʷN}_O|#! iɛ1>nšo6StrT?Ŏa_@v9w{Ϗ>x2_?ΒL^wz6U><=kElkP[b[W܀o'G{ K޸a6 jPSٺ} r\uۖK7nغͷS`4TU&s-{g2?a;2$م8 eݸe}ۺٶPq $g%f=4̵.WC|S.9zEÙ[V'ԦVg@]AG.0*8I?q~}˟zp5ݟ# b9|")\9oNV9(Yœҧ ~8wtkl<v_x˪'5w;|ON w<&ɥƫ:h'mUW֒'0tK<<=q9=Оă'uB{f'xucs2}$>U3̩N݀.\`!mڶԲa˷ Nג r+_q6|Zv; :}r;"ߜBސ9IK%[7-_ ԓ1G -ΰ9}!tjʋOfPFWBQStq'B~]6Al~}o5!2 ÀlB}\E𻜣_lG@k}傽Q:g[,ߨ } fQ<?/rb_:w7AYJ B}sRQ0l~$ޙ ,Q/ʅk=7‡/Ԏn=ۑ'x@u;Y B*TFVă7Dgɰd> :gV s'Y_iuD@TPӢb'R yp0kBB}813ã2J5ʳ{%yV} sD Jݲش .md "$مWg9V8ʾް(5g}3y4,+gEH,*w}Urd/wU64xsvR.J>2j*4xe}pi#{0z}V):+pWCb w2]z?sr;2`ZRi/ϹjC3kU+"l4}?zu-D`} Qu0B=y6Og|Q{^u)PiŶ #R2}Q'ʋۖ-_ieVsKV,3>n#]W^91ST˂vjhyDg(+x23*{ڻ$u-p#;zh?|3:75g5nfA=}ɮ})s]ɾƽ흝ڡ*m^+Z':pOr_Y|H=)A¹͚2 YxKu;" 2yela ٻ] GvN0VGNn3vwƣ=5z䎮ɈYMj9:ž#F67[j-~ %r48RO&%kp~8)S\;?ivϬ͒eQݳ/G{R Z0Ԯx!Y&iOOca={wt&vdWb"Wz6Xcϳak+NGI)|\Ye^z]֋bKNoUS ^\!^eyZe@ /N'(tpe* <8g9iqK(WZx}>HVJq.EwSZFT<ו9rY 5wa=$eϵ O<4^A*Vo9Զaىt 5o ͎j@6×=[^Y eAd5~h/xcau>5:ĺ>k:>oΉ8TMyH/mV@i\cmud2QiYV+"UeyZ ?e 9J;t +N<ߕSn8&NC[u0ˍ=UQ'8>#d6S3MN]s";Bpg|>\Y9, [{ZbUO^5˱₿{i軻q98 ?2m-^Eԭ[4յvt34[s>q>љ^OmYAm\~u쯁B*wYi/ j[ִKufoNՅSk͸;kzg~},Ӛvqώ-\Q-˴T.p(mFGMx?! dڜ-JCʾt0<*kO'%]O8&sפnN#n>bk㪕*kɏgwbjKj:^ƔkS} w)|wL4(čTݳ,;kwۋ⑮˻܅7' S꘭훗?p'tS~dƭ/ũ?^TYP!O׫S 3>'I¿ď7$!߹oqϿѺQoc '<*BDÿz͢^7}O  ^V_*#Di]vÿIO5NU?M&~6!b~|!x!}"a*+ 7}=o6fB{oL;.}ovo3өE^jK-hO'DM>3ևiO?/2BBoa>/"~*KW}F2GVo !_e|Oq}BYOtB/O.@^ЇiOcqɗ|["a+ %]h >DO a9n_ k +Qh$c +&$D ~|*BAB_N|5!;5J]7*sC7Mӌ׺>, ¿g}'G_hhߣ|!}M?@| |^Q G7}钮5DÄϐtC_K|a53%= ~E>?ۑ?ב~!﹒׹Xj/&k}O0Izk >KzC_L<~믗?KMU/tGʽs7?{כB+xn5bB_ ķ~nFo$%nW]l&j*b}w; o%~!$#B^f}yt|=pڗӻx+'yUݻqoqz+AI6X/Ƨ O0#>fBߏ?fLj5l8 ~\>eVBw:ߧG_} 1| g$}gI!o3\I%WLZ W$=͆ȿo>!{ /MI|!ƇoEAw)>w|3LO3Q?I|>!Ї3I?wW7&_H _J_~!Y7/5\A{W@u^_z[δOo4W+¿N߿KG ]gB'4?7}20zֳ2B)&x ??fQJW)8Cl@wطpGZar1"/%~O8b'\0# ?|\ܠRM"U?0ac7yj+ ҶDkL:B*5u@TB7`BO#~ 3 gtgBs ,B6 W\WBI>m)X@&B[_OXlh`yk(O!{^O^ IZa BrI}_A|!״$kM?i&CdN+Їkk\X a_m\Ї /"DɜZ _"a3Ka_֪|)!o{>()2BؿQt}J9}?gdZ ?{o6DJ'id>0WD;, qT>1*[{O|]WW"|j>!~!QO̔~Їc|Q3o<Ο rN(3Fu&KgKzC]G8 g B;ayWz3>2䵄hD /\&j+P 1k|L> d>ܿ_I?VB߯ M^o I١^ODd }C[M>jf þpo74C&g%Iz\fIou#?pٿݡ[ɿrvk^n;%e Їh{CWw| !jF/þp6y!ھ!~l7B>It#?p1C1+w1~񁟵A$~!$=`I%}ơ ʰڡ_G_&smdC>' &NCX/"Kķ.Y҃&_A9߃į4DD_#6buZq Q_d|!Iwܐ ЧE|?0~_{-O_Hņ(="g¿?S\Be7į ;~G+ `M2ϟ_DL|!"o&_AfDobȿ=F|!翏|!O>{*/#~ pK_0|++7T7W_տ!ÈkUΐtT?;g>M 3񣉇4ПO֟AbB՗gLϿ/2V%?ȿq?sDvW|BǮ">46bMD}俘fCObKM>#s}lC?Ӑ-s-"6B[?VKZa /!/3|m#&Gl$~+ncOg~S)sm~brEj|푴{%]Ї}ď7L}&0/ߋ'~!״}?xo DwDwJ2y3!Hq>"ݒ0LBw8B ~'"~DQG[DW9O8r|?x\7}R<熮_o0Oj}y=c |1 ^DGM>RAߗH@|!]_لs HU/%T^?5^Q%Մ_K>2Cnt(}w Ѿڿnt'~_m@o67~osc&BC;o&DI4BwKzG"jp_F`<%~' ރq爟@>O|° 7=kѿH|-!Ɨ/_GL|a#?H|!Wo&7eI#G|x\ã}޿ '~*B|2!:bBo!}b7tCO?p?S"|}SG$K Q?z>K>e+/+I*BT 1~{H ׿~/alrE_'~!Ưď!xc -R>? ;K"7Z #aȑ?k"1ꯅ: Chq=~-iI?A1~7-}e5vwVS\tW}G?h~cBh?N0y5q}k U 7|R:>WH(wq>Wr}A9߿VB|_G776~C8["}e<&I%c]^~{=T*۞K6-_mw֭Wnv v#_޽bVoܰ{inxuMCelݾ9.L ٺm7l۩_s*Z3?ϟ0ϝ_DJQBnܲmly~a82Q\ Z!^]alSnWx SS.ZՒi.VAy+m]k|<:yt0YIpUvnK9,aγSp/c*9<Ƭ]泚vԷI)k';XllU{imh̶*+A Ǔi2O%^ŝNպyhF;=O~NS51\IV kɣjԶtmJFذuSOܷWidOfQmrSzG~Z;N/]#z3lN_ 8 ڨ*S(j18_ Ƀ>ԄȌ,{!(\2z{o8r(5~˯s(4J3>5Y Ft+x)RxOm _ME7v Nb(Oz &o ;Zp,_p<,w& ur8(OJ5xXcL B"4{4 ^հ"p4sUY_`uU _EDX%>lxKs@!ׄAUqOwFEmlZVh{lVKh#{3BshHB?4Pi~񓪞s<)"](z}nU|G_X+zò\ѬpҗgEH,*{a23\;CG)^LYeUgaZK2#4sITN.u`[j-/W|t=7Fr~!£P_ΞG`fIv(J} ϲ(rݓG-zZۛ\;Y۳wGgroaLL%&rh||'?oo><>9X>L?ן^%Ses]֋bKOoU,CҴ,OWqZY SA: 2^RklNF?'hS\"Pvj.ͻƇx/C͇eƇyca'[#|-0KH1[QHw1}nG=-b+ki[`l5}^Cuy=}`3\qT7/Fxi) y^I )OGeyZ2Ti5x2/xޔ20M$nn1Ľ>5M}Uun=}epyc(g}&}^lrLL ]?.;|Fyo(7NyZept:1*(gfj[kNxG&[Vg\b* / _-kiYY _zCz{6va#L;q yXIyGUIkZK.+G{#' FwKw|sg(_wo:֠ w={1=>exwȇѡ|7:פ^"{e̚t'%wUTߵyfe^8Ϻ NqU Rpcw(.Kxc9N^=F,M3a3ݐw,4z,G6X@mr,UQwƈ{ݗ{]c!i^cxcΦxKɨR.理Y ǂ /2o ,7Agw`toW_ʾ<2/J/7١YJwv\%ֶo_G_dGz;$J {CۼMrRc K̒8WKodgR$"*.I~ CܸQ}@TitpΊd{ߑdbkZק CF'wgqnRu³]+;qm}|RO僗'7hj+=P}iޓkJ_n ?6a=d#LTĂDe_k]Y9W'8*[yB:?̾S] M ZƗ{N~mFKZڞu5wmfVQ]l: \M9V8^Lv;R&pMS(dkDHݕ_TĊu['Mʥ7.=\\I=v~͟">}svM -MX2-w>[&yh*/sRw$}Yr_][#PٜLAte_o}i@' 3\r'yőd(J%;z-&=Df޷琚L &{T~=00e HzV9^EojF}(.\s\;Tߎ]D 20#C>Y3Rkss@ۻjr 9.25+gʗpBXq==CqAn 5;?'4.IDeop_b(Rn" c5/KxMӮM+%2ot nEnԽ5p1|g340j\Lt Ny~`H0l!֫Omy2Ad!!24$o&ڝ_1K" û*-u&mK-3Q4wYҒˈn\E[ww&ٻm؆B"8;/hӝ'g`ڮc.w |XΧ=W^N5- gʠ\|PªC36vwKI,YGĶhw%H/@QVIJd_{ѕX$7jvr/]1'0bz $P9Vէ?\'#Ylգ=f=oqo}ZݽG}iV6˸CwIʲ_Ojm`E>eY=.vMy{O]T^GC%M62ӱDtE˾Pj6I@e؟⎞+N_ 5 UWAȒf wkItlY[կ5GpQL}U&(5X񨞻W;'IVx28_2}_M-K88cq߽[X_O{fwGEFL4d9btᚶJ;O:v@5R'"&QEY1]>P=Sjt+ev^]ie0rL6ݗq2zzۗ=T}XH$ۦfԔUeС.;zHU "92uѕHWGHڛbgƄl5RG-"֪=PN̬t!^)@$+} 9@Cm=ɽkN=D$i #%{ߞZ{?:T#2_q$ĥE-V0tD:Gό UFDEk$iiKS4KL\K}X4#UtJuvsWLjb1M#r˚NrR2|]"?$7X68/ _(9uy Ag}**R׿۾̯,2Si؊Sy j`X]@2"5nq+8ӮLz8MCҨ/JSxCS%oqi]?8 N EBЇbqJ5x2 ,(֧թ{%z¿ď7$!߹oqϿ_Bu(K\Seҟ@_hH(B ~ !ӺjtIď3KbG65(}؟B|\TKa|9G/)2^wBB >B&#D̒Їj8CLB7لOj?}7}wLF__j/"~F2Go!_e|b:[>뉟N;htCo"~͒|!!ʷ%Bؐ|I|-!}ؿQ>nTNK}JBs)-hv}Hghۡ?/!ӻL|!ʷ?Bp3ٿLRɷ}.ЇNGM{xm(~ӄ=F(BqV\ѾW?Pu|UBWBZk o T^gwbs8xsH:!{.3 [ɿ?TP&_FzQ>^"u:1D| |?~ D|@(C/5o O4LrIqW_iWJzkQ?"X_ȟא~!&I7-%lX7HCLC+_j|~[M^KEG+u<B/?Y&A">^yc[%Cm?3\DN$ń[LP¿{_jį!Du6?%}"Frf^9?xJPw4i.?}Eu}?[~O[=W?+&ks>N,[} 4 K&!D|Ї/_ke _!~!5!_w׈K_[ a~ЇghTo9x=L|r]Is=_A}GVV¿ hǩ_|+!E>% w!~!- PN<=%Dˎ߽'Q?Sw Q?͐?OT>_qC?F\B>Vy+!G>q3\ /%Sp}冫TlՄ־#N}/vo5Cį3o&/8=m'D#9_O#0@ ~B(G'?B\h~9WX?k|-[.cZG9xQl/I[h_mF"e,l">7?Pl/h5Cߥ4{Dδ 84'b}5oLfDLGQ/_-!\G~+u/PGב"k^|YjuSu}~a ƟCM^A"aۑ=V+~ӧn壽גJIr1y/(U/ ^i hS嵍1y=!&}w (%]kFB3"aZG?DB&nkE#?'hP&_N=+%+ QDKst/1 VL>ן$m} C[^FO6DGo s3 ⑿p|6!Js ~oG };YQwrBNG&)n/xZwIzCM|%!]5$B=#^߾WE#~ !Hi!/|HGL> O%}̡>BXC:UXi8ՆԾtѾ[w#o$zɛ 1~K=}3ɾ~}FҗYg}ŧrY3Տmolwe~ƙ|qCL|6Dտ[ЇW"~q&Bc?jCx|bo12*L>X"BU?S#&_OhLZ¿}Wko寶o$7 c-&Ih[LtbY4>'D0~bso$Dl[%79#[[Ї_`FYlɗ~e-ks""tI9߿Մ8Gקo !W?x?a~o /؛!>^l񼷣}l&oHI8V^{ćo*BvI;> i~E&!D^9i_b{Wڟ%=(GqcmC糱}{}=ҡ?ްqC;dXKwN.ЇNGtGX 1|&C/ I&MzX><^I?s'e K 1>M3 W;y|.5\ϵo0L):ב~Oo> %]o E^ЇG{zI79aWbW_&F7bpC>H|!^)&E}U>Q>?79[M6^Um&ސ$}ؿxݹ,vO"DEһ;U*b|M6 N|ʿ yqw|!}.GrY{>!׺AqUC_W\ ]o|<+~,c ~ qEL>b7|_"ِǾBlB?H\6K ׽׉_n}|CC&D~2g<ׇߑOK(B'&}%Sa~GH|!_Ϗ$ ~' D8Bȟ(痯-<>JoL>װ _KCC|Cėo% Q>5?H7~Ї?:_gTeSW6y9!?ď2H<b/&QYQ"i=~SgHr#30&pZϖTЇ6سUBhK}Atùd_b9>䭄_orFh{|K ؒ6o=!kB>W:ڟ*~2bM1/R1pCk{ėGzW"?w~=XE\7yA*m+cA|CG}YR~ 7"9g7z4h.> 6eЇ#0Чr%&En> Q $-t𰿐}"'%Ts QKަ)T+%ׯk5\k\ŷ|!w Qjc ?C \B_[C<aBh1o._;"tq/t y|#iz58{%]Ї`IIL>~I)?t ?:"a2 gCM>"av*5o/ qo&_C=:꟮(_m%@*nu3x_2/\j}? F+JzM_Y /2j.VHBKBa?؟hQhW?ưR_y Wx}!~*!Z 눟A?p!LbBe%ˍ׽-nu[I!Ǜ_I7˼2~L^N+ w|!.&BwHǡjC?t;#a.GkؿQ?n1JotO9a7$} Q >5K7~>u俙O8~W>oцt}#9I?vǽ?t}#_2$BԿС_"ʐ_,AbJ>?H?D<[珇O/4-~|!{x|!$ˡ?'~a ~e B/%á"ג~/\QO"u[ PNL^M=d?J,&'D%B_Ѿg?=;+.x563~ 㒊L>P s._a KM^AhWX+p'b& q>y)l7%>?f9dC9~WPjU8WM[|ߋG~G/6+b1ď3Ʒ 7y!- 눟B]O| !o&%D|lաL|4š? >gI}.&~ !g }v ?Uh]O6Kk(n HfBb')U!gm|:Q0!r.tC/')MCȿx LLC|! { +sվf"~?L#Uį0k_KtnE3$]PWL+ue?A^dq~NJzC_DDC:+^KL>Œ^Ї_mH _*7,BopOg䍄$ɐk<~z~{rA}ؿUd_wo5dB[$}ʡ?M}5>|v7"~"};񍆘ux|:!{[>쿝xm|GS]&_@)=}ؿ}tɗ"8_F{|`}]A 1b( z1Iw㤿'?_?`wXi}VM>_i8aď7/EI;aKO2OM>}C^_]C&NF>?(tv/߱[iP}_M>Ɛwo ?Wb;a'W@~f:B#~Ї?Րׯ?K7~tW 5y!Gφ~K ^0NLF=#?J(/!?WWbk 7xwIp?oxE:-,|<_QLW]`OHڸ䕄EE_ȟ(W4UXJ/J|!O-0Ig|*!*>?zCZ%iɧZÉi8쏐zM##axb+Ƙ3ZR¡c_k ćEq?ޑ T>ð_hߕ_ESXZm"/c$Z? ܿM^I5D~#_m0y!iW{o,P~&J˘^Ρg_o/\4#a3 gyx6"#akKZbńkE6e2-79#cY>/woo!v/u?e~5+r,iHȡ[`KE盼;%\ѥ&Dhˢ"E~g?E/#%M^mh竩N<~I<#2_k"Jc i_!C/#~uC&#D|uJu!Ka7"#a#Z+U~X3~]~I ?KzC"~a_OpE/6y!h^CdBO羧KS y~zg|*!ZI/tÿg_o+ZgḮgKzC#ŐЧ|"(!d=zP$h t}Iw:aF+ 1>i\+M^K};J $䍄jI;a57Πyי|&!&Iop눟eJ_o%7Xۼ̳C^)B?^Nh_^_/`"-3G*~%K}ؿtCѽcjB- }5(zϚ>I6ya ~I4tCO1$} ߇%ЇfJɗ"~>wyo!Q?~+ Yl4^??>1 "/x SI'X~F| 2؟k+"Cن>J~-7!K<$mQIw#?*>$/&_Es>ő*N[Mpjw !툯5+?eY,kbO$/(>á' q!&Dh+.Ї!'/\9&l31U};KpIcxEZtX)}?iNhWdL.rh'b/w}G<_|*0y#!#rYk?=C+#eo]\k<%ПJWo6+B4I3d髽>xo1ߒXu]zғ«U>j0׺W_ ql*c7vڝ?WϥɆn>5ί/_uD;6mfez9>>A Ԙɡ~LpgUQCLgwBO¬_h"aPӋsĬL]4OrSJږm[ ݰuvް-eT"rz*4u*(^]5p^8^40!E 4.<$\ͧ"b_RQOOȺdޅI;ڶdS?Uܢ(B0OD39 ']`qz8j8c_4 2'4~2X=J(5RO/ZꄹnkNb߫vXDM7{OU\55;+Bhw7Wt!T<qdݞ IsZxSuSgk٧S]o?1&ז}d-,ʜ 9߀=g$ȓzboz 5I~9/*3I jm_2'i o}*zXntWpJnZtuOQ,>c}T^yRO){߼<<|YciבRCwc` ޸_(ڹ7ٙYjx{_(ګ݅!՝:#}Vmln8c3ڍ+}Gz鯅KX)a"=ޕ?ҕ9d~$ޙ 7{={f1u2wtP4em'&=סʞddCZyE^Fŕ܀X*%g|%,`<M0\ ;T.˅daoPV|`E{eyf=4drܑN.%Ct&dMڗH $:uتO\L$RۗhO}ԊfW_{,eOkLlM&˒}b+HB3wѝK)zp!wZ}j؝}mg9> HPYU72f2^mY}p^w﹌v9Uwo:#K!FUƾ=d6' G;$ɾZ^_-ѕlyJY\Oz"K6DCUȉ<.|>7zPtyGϩlVt_o]ghG 3+k> rJdKzw,`2:OZ ŕ;wV=ka!$7M RNYaޚJ?'_JK-9yc&z^*:d9]]7t{__q}hm5,Kށ䱾~J*`R)5|C\;.d`׼n mpEJ6Q: mQ#}OU1O~*a&T2->"꼊srVE]}A޾Și`ރБHZ(OuOޞJڻMAt_mO:rhhHWG&7;mLQXHK;[ZB;8خdfR/KiS{s5qeGggb{GgbOroޤzړLKZ>r`@O{בZWHS8T#}8tD<~TKt&-VHӫ.đeՌ6 [Ed"uWIpQiK7ut]ZjKbڥU#>ЕZO"KgИ}<*䘌ץ+%uxbo\?|>\4uP+0޲ݛ\gx:e|1f_۳wGgroaj%&rh||'?'ͱҟg9'ksҷ,Xq;1-0.J- \A'x[UF7y!Ґ,Og:\g=Xo{r*HAJu6'M#Nx7J[y.dm\V;B5^GXGɻƇz*nƇyJa'[#|-H[*(8{4kAo/(rO+SiY]fN|g6C/6t/ϥZBm߲S?/=6a&~]yf%˳Q+*Yx~G{#L^O 4_kZ>N%SBD>'>uEb}>GmuYRk#|9,OD/2qiYVjs]J>o+:,)βϳIy[l9伭N1KrZfMxfy8 34 bv}Kzcw/BO߱ϳI>8.;2γHP\dmRMOKW2NJF?OX_(_&Vk!ӵWG=X9J}bx7ƴ]1fiL(Ƥi1̠cA١xswAIcEtM?=ΟWkYp"58aOg6vg &G3>d<_TӭC6y< ƨ$[}SLcRJ/i֦eo)v7m+>O$ﲆgk ߵy|KB;|T4\fOM:ݬ(mz:Qy-(:<㎋ٮ~.b-; ?5 [NKSnzkky]7 iif/{l>USIviwa˥O9:x]pُ?sVy?'2>GlW:NdA;-Z4a0-,K^2i!lOy龡XmE6=/'y&W8V 89ζnҳ4ndk;]&%04L&Lo{pS:iuYRĹv9o[̒b}n9sg,nLw*pڴp6{<;U gD>@'Ý<'q?IOm&1$`e(cTVÖD!ҧS{ϩ:k3}ig<2? ~?_'d{zr?d>$!Γ>щPT. YRqd|h.w_Mqp:7!.l)q"dPo_E{t%ޞLGKdItTy_6)q}j'Uhm&6iaFy^x ,UM|ĉGdʿ>+yy_ .ΈXhj+P}iJ=c)&Wobظl,풘ߐdz֤*$ CGoZYl`C{k*=>QC13*kaa^?AQ}kMÎ ƗW:Pu}:y}-FKT[!{/wn-!:;ztZ?ٶtSbͱzNDOʡ zFm?gsֱ [>ҧQF퐪xuK捞Vq6Q\[H5]Nsٽ&Bs1oj["$E*']ཹ5`/e!q<٫e7+YF "xaB][g#tC99l16`Vݳ/SӠR5^W&pP*{1Fk})Mri5fB2JK;PWZW5I^jT#deӾ}ez雜2)k]&in U88>:cGǮ]Hz}t_ĔD)/1I߾(Y" ;SCO{ezq;+dO˵IdwP~Qhll *w8陨uODUؓ蒍M_I{&^nLTk_hJ$Xqgi zM]kROܨ1ԨlnTRx9Yʳ4,lҕkFoo_*,NCN٪>=29Xo5͌ODdEDUc^1@|Plި9.-+!jj%|UA<5a]Nz ju6W&;ZTKv5ҋ/nb&ϭtq2.B1qXCa P؆np}~soMo"$V$[7DfuYDejO7`l`kjf8pbXܤ_`:Ў/=wpa0qT5`21m~{ۻ"]ۻd"C>V2%>;܎`U\z4^Y z /J0I閙xo{o2X[`D=:;%RVR YwH'd-y[/DИX?E\:)];tɎTaG׾1+HL^=Rc.jhJYnɈRwޞّh_vq{Sp2ʊ/nVKoY`VIU1٘:UR')M#δhJY: l=zK#j߷O;rD RC}zvvS=% fJD6{$$UZ*S;cp |ܔ;#>E΀y+'']P9Q}Gi7V;@R8t>'#72qm.Ihw~%|_X P\Xs.y݂tlߡù<S-p9-}Tqt[~Yx[眵7嶒x3^>ۓLv2'^}mpjoKkЩ>W &u9,5w蒢>aRߠ/X^k^ؒHң{ .^WJQӥL4Ozu]dsSs ~WhS$;*3M pW.$҇>|<ၣ=#@<_3bcA%fee1Eʤ2WȂ_Z9]N ԛr`gBg[ސRӒhHgQ~SwL5mr)y9{K~딥z8ejpzv zఏXvd a=u(.OY#YQ[[~)wu jmz`س.\d\p9ӑ:H1x1[b4ZdT?4}8uVU̿)٥y.OpUhj6tjřhۛ# v3ZE-{ij9~+`=xL$/SK^Tzʻ#c03/{ƴ'ǶEw/m7! Bg7wgDr9\L^jrWj`!++ m߹Dj7(̷;{KPQpo6TWψZˆ[pPV!cvQ.z*%^Jt]}eqOK);OS7}nDH%6n]}Yq>/N3<,v 7nqkE9n+0q3_є}}j 3@n,%~B ,(֧թ_g? '~'~a5՟=&%!D#a:ùd~R 3k%~6aXKcb}t,yC/&~to zz?&>[N\EԾ+U&_L__b쯵ՄuQo[C7_dDBO'D\ " D\(iC_DLTKi(ߎ}Ib5dv%D\%~:B4ڧ8>ķ}.#~:!rIL>sC4\K&_GuGa7^DV#&G廘cT;a9l|UNBuy~}&Ѿ"~az7{U_sB_M_k8_D|o2f%}^B KiJ@|Bw# zA\+M}JWՒ^-{x4|S  D|D(C5Iz'&x|[ WfIFaGJu$}K E[M>/_.}V'ZηI5hKC G1I|!g;%mY.ItÿMwIj:W#^ʽs վwjI3B{?G#sI6LP8mK~>,#?BK Q:ڇ?e/O!~b|Xi|>@:B秉` ƏHɷ|Ї oCǂ2B_~cį~o?7q"_zvaohև!~!_ߕ}9'?$p#I?1lBcIrÿ?戮qWW&Kgķ. ?  t"~!/Z%~9!wį4m*~/Q!Їp g¿!Z7Fb|?B10{'o"o1/P|6AL$>?e NU>l ~1t1T0tԇ!ķ.#wY&_Nh[pf>(rϡ[A%~!Үeį'DGFC̏Zw26B?*B&~8w¿_b@愂O$=h#~${ _C:4?yz1op ߝ,!iGj2Z`Cg?P+d(Xb18?-1_j*B ;+ iy !o~>/p_Cb*_-!G~X uK`H/D5~״# QXMHSۈE1,sj䕄 dHK_MZB[Huxe_KhRW v?0A/2<ݡ{4DhXT4y5!wbև$5/됂ְw@귁PJܡ;o4F/sr !gΡK1\B I}}!p!u[D?h_>? Q?ljo#4G|;Z; ^Oϯc1} /WOj<'ď' WQZC?zb7}G/&G2I/7tTi8#M# n2B5V˯ۯ6BB"o"}7Q,"D6C\fI2jBį!u k Q[_ox>mb %ߡ >v/!V/5CM&K.}wN' 1)n>쿓hw9w9鿛ꯓq_'鿟!?_IpY+{Їo:+˷h@c#5_Oo5(BO% Q??+ ~?KW"_HC%?h|Bׯ37~gFBϿ>MI BǣAI?x)1Pu7g{{'R!_&Oxԕ׳~CJBx}@!cÿ@_4/Ee~ň5+qK*S-c2ǚȿx ŗ>Q;6~J"aYd$7.:aL.!2Fņ{gb2upy;Q`*.6 zw6ka_K! h*v5^%.5VB}/\-M~MwxPW0^6=W[W_Ih_>'|GL+Bc֑UO%75O#Ӊa8%~6!I\lB:"#~z^H&BĮ^-3mI7l!?2ˈP.fW"~o$?^.&!D"B:C:FM&o FM7b $DنtM썒n5"B-VH->FWlum6? iC;M>p/>' I_wIzɫ?wKzCEdC{$5{#aݎy}>Gx{^}񣼠>*&KIzС>N<8A?!>W'%}֡_iϧ$=`ZB#Z⅋}S 1>s7b~yI_4lB?G_$3"Jg_h?$[&7%}ۡEDdad.=O!D!p*.þpGL`/O| I?2LB?q#?ːϯ~Oȿr/ |< I2XCZ_Jzԡ"m_K'~~#}-S yC;gQWO w>ss ɫ 1>j:C[载1=~Տe_0 xW.5.F8C~2ƋM0/4ʡd1y 5y!/_6B$⑿xF\C_1~mg6T7 Bْuį4\Kqrm~W$}E[c+B뫸A}ď">4[c}&W|!}_Ex#ؗ"^mJBip~5HԾjh}دs_Gpi&7%mo$ɐ_q[L>5S>o!4GpI?r6^cg4eL7By:a>[i~/p\|ɦbc"k 1~nɧ">ۈ7J%|&!JZЇˈEX_iلhґ?*B_K|!w&/6liK WSm$x'\|~7o!xF[o o1/BËl_DpKLA^B'[K|lnOR*wi|)s~\rI3y9!I(B$3hC\R.I` nIG08{^W}z"aב?G| aJG10WIz 1=t>?&ÙdL.6)5?VdZI9xؿs~,~q %]oц_/tC'~1XM>'AJW; 77Jz /ЇW8wD!$^6E̿:.B9˨~otɗ~(v>B BLS>%S9;; \ÆtGb|K=}ؿ^pr'H_L^{{L^%2>?(&h>JBħ+>x%}5 I?t'؃߷>[׽姈nA_ҧM= }iA9#Dl>Α?|ʷP8<|R7F|]Nŧ?d!g#&~!6 ȿHɗOſʗ?2T&J~c;d^p EС"~!?W/8%,}+U^oi:CzC\*?)h?ː~~ݽG'Cϕj +,1x{ӽh?^pou4~f?xܛ6~+?+Pd3y9ga% q}JNbpPSC3 t~> M^e=;SM^OhYXGg}?rH+\V/(l4˼vLwJv#i'_⵰䕄hO2UklB_pC&5{a >s#aՑ?D 9{!_yK |a%W">~?x'\&B]N|a-ٗP*B_2[S }VKZkFB DZ q]IL 1B797T a񣉇 >uƫXCć!WbI$C"~,ONw_kRI{L^OvI h암4y3!_>'7Bď%4>$|wh m|_`S? /T}ď1z&O*/,>JC>UxLU&L9a*bڡO 2?5 t+k YY7bw|!I7:a2C|&K|I/u o5{ %]oEj_ǞEy}R+}m49o/w0}`p Z?/fI|!%ɡ?ڐ׿:y+\]&ǵK/4n#ڰY&#o6>^C~Co 4y3!ۉo!DjaN*ڷxK`nxoGwͥ^)e^SHG?*}1G} W'I'&`}vM^AS~Hp_4$COߟ%~!ԿI/~r㗇+jQh%}ݡ_%~!~~ ~ ~!Ce B7#/#} KCnI~ W'qW 6}RRy:o=C[qď%T^NHxC|2!???HfC}X߉M?װERBl12XKGWbyvS$P,/Կb M>pCS]0#W$ڷHhCK1[PP7W4D}J|Op' 5^ :.9h"~aAڟ"E&mHkEE5&BjCZSMHЇ|R9|Mo&p6?M 5Mٳ-v b|պ)iWe.(ZЇ#m"e/[j̈́3 g~1o_b B"sVzocG.qJ"ˢ5&D(Ї5W|P֛׺}_O| /mU3 as>o!~![v|.'.tW".Ї9_R.k< h=ď"WRGb}2W7ye.(tWDI&#DЇGt_Q?E|! (g||!և$¡?witUh+%ЇcO6e?lj#Dz/Xh]ciOЇ?p.w-3_`OVu&o#D=[ :CL}# WR'Tx ?;\/_LK/u&ot?xE_Z1XtC_K8BM^:Oh+E'~!7:7i򄡝ߤƏ[dH$&'D|&>3 ?|q{>Ց3wP{h1($g(=ď79;K|g^O"D >^ y|~uO|!> C&I%}ġ>D,Va>]Wo!磎OP''C 1Jxu?pOکxōm+/Hɫ OEl>KW"~ e2y-!+EJɧ"~*}5gϢ;rE5\BpJߔb|V>:/\яLϯGbe^~|2@d=Ծ?ɧ}*}ܾ?ss W;%DVB_|!Wב>xjE?HW~g># 7?9BgRS"o'>?F|!ۡs! 83 cq bB寺>p ُ;pLGqa_ P\j?K")3H0?Y+̟m_eϊϕ4 m&:a$aLR'XxX> E(IןdQ ư׿k$X*^Gf8kb򹄰/>9a mŵ&_By49aȾ&_OD@h/_h?ųLFQ붕E)G;Iik 1~O4]ė=i*B/lXOT7"~#IpŇLdLi8?UH0y+!/%]G3e}^?\N;C.#D8lI|C6jB]Ї_c{MsO>3uP9Yw壒>n򱆼~o:aOgP?!>O&DR7S 9|7b?B pϛ|6!.B?O\C%b2 -~|Xϗj5#Wo8ڟoZ|wmI5hC;Ї?0=I?0y!~Ї_I|ᇒ~/\L^EK)~~"O%D|c}ٯt?#~mi_EKe/IGObh__}  TJ+QEW/\I 1>j?FC-q7bq y=ЧU9߿2o"Jn3y9_I1m}U"kцtUKz?e%V%L>֐)G`H%ح"D\P2ӡclHK_Ghgx 1Y"y$L>ߒ/A Cd_ SIKMFS }WMCDm"j#aΑ?_\ u=ڗ8/i$~#Ϳ%2f4;xo&MQ?g[:h"/˔7CDbdC?#e*Yࡿjn/qGg+Ye͟c ?~J+I0˸DbcIc zK%Ob%J6|!Kv:QW:B/[7A哹|$EvI:2J.p#DQ?tr~'.69?>b-eWyK%5y![_%oqWE%^.yk ?I4O%M>+Ye}wtIIC*Wrj;VBeyE#.Hp%GM/*!~!u+W*k>I;__jc2tBqIOsU0ڡ+\ɳM>{ 񭄰tIך|!ZHp%/2B_׾Ȑ/*y|%!^G#~f|f sYE.zӗ~y|{L>;a i[rC5"eoT gE%/ tCKkKH_[Mu/#K ?o&~郿jbc؟wH/!}ؿ*Cot{M>]>Ї71]5 B=>Ї{i[{M}#EʷĐ)|5!??FZC&~$~-;`LG|$d+rIWL^aeI?uW2PAI_3y-!~Ї_G%}C_oP׽C7㛒6LB׷?G:mҟm|!!Gr}aԾ?KW}!}%񕆈-$䵄(#a7S|G*@|LQI2,B> ?;y 7 38C;IKaߒ7D‚t}Gc}! =o68g/r/+l*C_m]T P:34ɡ?绚0Ig|>Jϐ4ѡgҳ_dH5JB?.GpD#ɿ̈́-=}P: m}P: wy~tcIB8G\BwYpnҟD9OKoվKkǹxVo^zץ͒|!]*m4ˡӈ` җJg:xtg~g|qk\IM>㧶M+ U<ˉG•.5y!ƏO66+]lBϢ}俘r/\Z76S-#~!_+]iVB2Vv#3m*>_+wk c. i.u}ɏzXTzEvWv$;tiXc&WD5IBOVsI2y ! 񵄪A|!wI|!![Z8Yqk^'2|%ķ2az? #C*IyE_e&WMď&:Ǧ%lVB}wO37?FB7Kc ?3}w; ZJzoЇj).!wF]_c+N&Jzɧ#a=.%A/#D_aDL~>!4B?fӭ|-d>I|!ƷOE>X|:!Cď!D >˒~l*B?O!D|Coj2y#!8QDSo~̈́X~Kw0-t}}_C%D|Q>@J}Y_kψE9c +(~~!0W~I$Bϯ"D)Jɫ U_g~'}1N?{Tc}#Ob&B%͡!ِKȿ?&Cq>7s 8BB Gr~/"CRC83^ِ8.<=*?[SzWK6[b[W`=yd˻Wl߰tv/m[xuMCelݾ9.L ٺm7l۩NI|=LZ%|=?A%.Y(-mͶ!Ɇe=4̵.WC[" 2gͧݮvgO>y$ pRPCvrTv|53k__n0ȵ^^Kp0dIH0{(:e> xkLa^LO'6,"UjsϜR˵!zr:I3'kyv'y mxXn{6u||vq/pi՞5V9N?^k_Z>__Z>OyP+R?_ÛG95 ( 1^~>;"/yy[y~T-r/&oM?96S/|@d{t0u|dp4c_A G]UcD22[s` 4+Dx8z<q*{ebZq@'=":2u daX$ ^V?2$بg.fWl)pO̚cxx$<'MtK:׎$Z׎G#9_= LģY Oݒzw`գCnJ*Us O\Vٽ%ثl1q~C3GUN;}g1ÑQBuE+ D$? Tywt3Ag65ׯwfQJ 6.ݖSˡ]\YX,%cۼɬXګ 2)@[K6pr *b4Նᄥrj HGƆ= \Ⲗ!&hHr&U⑱p۞Lͳ$[Q=3gSU}g~.'^;*m|lX/F"d˦OڳN%[V CV3ACYibwըQz8 teoU5P Is[pJ&qEIg\!5to={OG3ԑ52rΪl23=4k2=\;U&3mĚޭҳ_ 1s?u$h?%CѓA|\ɑHt0J,>*ׁѦ`Of ǒ'(D$eHy,*w!3x$%37<)="DRBu*!::9LH\M)F4S`lthGS&Rӂdd, #AZ4%#V͜Q2b@Q mdp SF"M &xLI єw([Dd >GTgauuz :`lL]f 6j雧YFʠweҥۨg5;Y}EbpNcyg2{WkқpNPv 3lOx1Cmկk Smr9sEd 2]IϲU1UMPSE$Hp~h ^)Jh{VQHK$pMjOR?NH&kWh"8b240>2r&;~cFԺAŪ c:&u@d0FU^I*h:i{F&0[&:.8ml*OSo=z'+yFLw̹]xE 䌺tfhכS.5ˤ׉{~ ɐh2hWQ~x"RS4^Y_;./.iuˢ xzGd7K?+[Fdž3^;e8`:mw4\.-IR$J쑻49G:,kG&aԻ`Sr<W?nꚪSC=>5ozIapP= D"`_N=F׬1wUS*{_}Uu?yHƑejVm|'2?9˷eLz'yQdx޷U^ۤTOQ!{RV=Ԍ&]pRm`E#ή8p*L]8 ;|'^UK&[ Bטwp~W-lNjv@&CCOMYHN^D G>Yc& l.wϊf^2_b8^#QwЏ͐vOFOccr3T1GiD}NGm332xY[[S\sꜹ U(tvbS~6\[ZU(p9if\Zgx5Qγ< )L70`>3nb)0l?15p\Qsգae-x?>%j0̸s<>^q&_Y6&8cq2ZԖyΦn1\s^h TRhee{Ƴ B?seSR]`Oȧ7X\OrxYy&f_pfh-rI8F1Q!wvE UNK),`,emM esNy79 ;[땬I+:5)ǻܼcMWc<3.OY>>s4 {,3ukWsfGtR*=qY[nNss<|Wwv56XHk9|W;Uᵻ-zBδs/~.Ut7]pqORyR|歵5) qȰyj]̚)_JTeKJ3.OI:>^ǿkZǚ<5ORՆSk=kjzykmfMm6CZ;X#}~aǭ{cZ& |ukк yjbM q;S0K0 {ϫg(5r9}3So(rlژ/&r/zj{!?+= 6)SBGp ^-aY3.1CZ!OA֤wpJ\3MohXj{.ih) ӄ-M׷U r3c24B˻Aʋ2Jgwq"45;o*9X'Xg>7"гN>IZI鴱] XU7ŅC _cyq򬙇Bn!lñX2$k-*}Cɻ^Pc&;eQ3V>nuyk]Ϛn{ 25 {s&7ιq*?`,v/搎_ >-,ǨlZ&^qߣK~hb^6U&[$I^wڃ(: 7FLZjgR;ԶvKiadfqau&ocxJ`.#I]r.aqwu'kRykTdKU6[͸<e- qA| S}*/t>\>=(^-uV:< ~'2;aRtD3L;?KG~Q#lg| /ud66y;q;^>=yk˚q ޛVu]yk=Z { yj=̚ntҹ=p5\\U,#,g~t|3tS?AUץI8|uݛW0kDWnBf\ZaM3n |UZ3hY.O\-l5/r>m={=.M" ոrЛP>pV粦<<:eEV.")#fwW$Ŏyw8 sRkfS+^I*7(\@Zq;A4ns͸>̿GcM1.BƘ:ƚn{,o7&G(yJZYa/&gyNs%s.-eA[XMt*^Sݗf/社i\2=궧]~+oƣX4^u0H\͸xgw;ܴywze >^ÿLI+4 {锗5m}+&ņ 0^-$|/#Û߷OFsOő (YtT\ao 7&}d1=g2EYiI.guq)lN2~>txyy>h_bY4x7nonsH G uKy5/9Lk<P"VQ£^ßRmM`$ퟐŒݚپ3fr>Ӝ0%JٳgHf݊a(%X8bC { un3U&G§ǛH|bzK"]G@t/P YBoWT]ܦ2rr%3i5rZYSCvm֦7:QӭKH]!{KWCi6MF^)/3qP Ҹ=wR3grΒmJ 3 Ȩ<'RDVntوD-QxR9X4{IɄ)ɦie*o?*)-^j%;cRP% AQDTbrDjrj]HmRI#c~`%ڂ19ߣ<2HJ{ j?L4@I/H67^}#QK LJV*CU*麺ifN{)RWYSR2)_CU'5k$Fb1ƻLLr] Ǭޯt*C?3z͟bN?jUo/ s:tyKyxL(ZxK=+ˬɩ\Ϝ5ΐqChavf7[ꬦRG b@޴Um͚!r z]n'3 KamjJoլGa)xbm8fg&UrT6)CaK4/ xaZY2ڬW'L +/=z,?2A@jL'S;2Xm:!{6dЗz{w~6L[Y 9RFf7L՗?Ix"IU?Xz$=L펍;H{[[#pt8g%uJ!UTvy[T$QP$ٓ)eז:4J%QTj~)s=,hRIFJMSPxpl%"߫'DZR87sn0g Dv+r:+ҽ4NNJZg[vIҷDM3GVr.ӠA.%BMzt/WTrx)a49ZG<{%n>C&yzk^s""`dΫ|aJi(\ctp8MQ֣s<H3d0͗@#ᓔRj4ͲG^66u I lcC*1R1j,ڕ)dʩLJcҦ>f*M*6kSY71vӮ6`~! Ky[LluEbћFJV4 omwn_{yW"^q޾kKϤva Fu;I$r JeE/= 8+3/c~FF 5o)k簼z+"F^{mVGz7`1 Wc.GZ"rY[`U+/ɼ߰wWE/f,+=%s/0'Soy~o𥌋pYK5_ K%/4Wo) %AK-*9~eF^_ |c-ԏz f LJ|e_l2y_)~k%qq9~VPg%A:6|(/(0pKہg\[ |v@(Pl]#/[|_yQg7R?{_(cR?{ -Ny/m~>(!/Ĉs5k9Py|X?~;%/)v1[~9nqsJGcymk~!_ (Cg T6@υ&}~j\g*) sS>{ k%{_K/ryjEˁ_(G7JJ[}>U^%W @i_(Ku 7Px7Icߍ 8g"8?j [Siy;E=1~Rk_(~/3~‡9~#}y߇_(WG(|CpV#/?|ca7|ƕOPǷJ>I;yߧ_Ÿi @xȋQ濪_~#wJ/kxI P2vA@ׁ (ojx7A~oio+Nc7_@)ߏ_ΈS)ǯa>┗@(\Ë~k}~-%_ix+_(&(70*-b?ߩG ?yK N^_(?4Pyʼn^(1gEc|p>@/˸%`~V °~}/, /X~aQo3X˺JU v@q7P䛀ȸ[Vw1r>_W9|k8 Plۤ7|*Y_̸԰/5k >i|]F#tR~hLhE )%n//nȋn+c'Ql 4z@ex5_/w^ Wk|G}a8|E5oX;e~Ɩ=%Coc=B(@!GpJ&G|E?Q}&MD~/e~Oo .ƝWSx Guyk͸V# ex=o5"&h%-?a#?Sx'/f+T ȋwdEwQxWJ~7iE{fʿ?~?LJ~פ*?a1O>EJ? @P/dg)|ްk9 K?br _ @E _ȋ/_(㋪/S*/&e6706r4|3UM r|;[`?555}Wig/?S_(O(\#/ L#A,W2r~| ~Ia :V_S-/PF^[WJGPΈ뻿R;ob<%q7'hxhk%n^qy) S韠_Ŷq@'gi%Ӏ Jv:_!/gj҇RoZjB>ll8GË9 _(Rc_ |#c ؇/Qڟ*CF^ P/URg5vFS__ky/_ϸ)TpV@Д?S˾Ahzn+_/p|؟\zo^ٟUyܿヌ2~)-Q'e/^_ WJ_˸ X_R}`Bq)ޫq̫6 ow?Pʷq})|%Wi7ww]BG4\Հ?{av|o/-pſv@|c'~ U;6FY߫j hx5 (u-+ؿz­?P@!je|TG) 9 AF^Q_8 P!/47?k'4A(rMF8Q5>S8#cR0݀by?N^P M?)?g%VThApp|g'i%^?V#q8Ѱ7Rjnx[-5~'q&@'BQ^_̀?= O_Rxa=i^|a!2xg}\P3el5,ˁſ~#?CyPƧzK~=#?_HPC^.F_R P/~Ն/JPW_ߧ_Y˼B(›8~#SF ȋ7goVw4W3mWkSxF^FFޥE] (nMQ=̇/UP7JA ȋ?a?(?DGo}^~5w8~bO3_u~9P _K_%<ڗ879~+}J /Հb߯_ (׷WxpI ˸+e_! x @OT1_P/b$K~Ơa߿;#}-|a?-o_O\[&*Pˆ?PǯGyIOa8PC^ -]=~2~ rM?P!y_ŸKsJ}2/~-`ZѰﱘoOe:'/X^o^_/q_|3+A) _X4ɦq| W2K6([ |# /~%WqW PofƼeZ /.@n!r[@*P#m}[ʸ_3뱀OA+~]Ю_;V*XMb&}gP;;@_@k/N: yѿuS@Z/ȋMdXR}6{ȋ-ߥ)?` y^_(e?<1 ʾ>F^/{\S@zȋob\ pEߪou2~~#ojPpq(?ؿgѿn0 ѿnpF^_4lr@Q ȋ>sS0Ff /J@;W'Aakſ?A? u~Pnj WŹ;V0٤2ym̷Iտ_}~ob'SxF^0~wSxǗ!/Ix ^pQe߳)<}{(T˾?yA)7(|2b}gkE/c,{w8P$?K#/|%UR^T?%?POo)|?K_$?M#/%+} ~E|ǷJ~M|ǯ8~5Z橜%yF^;9~J#; }_8~3ϟ=E_j(!/N]ſUU?{Y?e d- /Ti\.,/iiоJk?O{:iBspb@BiE Ka,þFPV_|5 B3 q| wa_|QOUw&[/ ˁ_ (#[J-Tik|y!٪VË|-ȷJi҇EY[ (o4Y(k'+?˼Tx_ r 1vy~]IcAV_ ( Zпv. yѿ:@_k wr2@^?vSح;gl4 (GS>[Aׯ򁹀_2/>EPc?&~\_Sm; |) _(xDa}XP7|##o O(~9 / o"^NN#m}]8B!Ka}]8Jy xIׅcub_(_(O(j9P_K_ƈ[(<*OȋG_ (Wmvz# Cq(|8>=Qc_¼n OXOiePOL{OjE3g$ϢpWJ=C^[ Q%P o!|/p/ǯK(|D#/>΅/Ao9~^a}] K^ z@WQ7J^My; }8~3k=Ej3jPC^.|wpn@{ȋwhwCʿ6=~QG}TQ~MOjG?V~ ?G P~_~ #_e_+2ՀB#}?!/>ĈoP9ǷJ |+~9q|ߥ{Z@Ë@P5'PՀRj?O~(_3ScAYy /Yr O\]eUCd0iECW2JQJa_yO^'(+Moc 8~- oCW_ 4C~vh&9~ #.0O#//^YgQԿ]AJ |c 蟣o+5G~g;6W0}h_S#//@?8ǢEvhES]DcaR_ (Ke*ȋw0n)Tp|'wФCY cQ [w@U9POiKK=MT8P!/eOcq POcqQF^:cPԗ0__I? |8_q_(|NoT3E[5o+ m{3yOyȋ/eh?J2ߧ\GjNw:C>[t>S[#/԰)Հ+xF^| #ORsJ@i( iE6FP[+0kǂ>=E&} AJ=P([POmv?VF_(0f}/!/ǀ0%I jE8}Bp;!/Okҿ[|Gi={P{GvXJ8ŏW)4g7 aŀ%Yq @OxȋOjү9>(G3!UQǯyI d)|J!/I_}1 [ {u _-a^w)|KAGy}3C8P~?q~ҿC^FF~Y ?Ҕs0㨿?Q Ǘ2b0s4//f 7/_I ?;r2@PxX#/ |=c_f@{ȋ4@Ƿ2óddX_m- PW _Exv5{l<Q?435o&7pƿ`8#?^G*_  @F^_F), @yѿP~9Qe2JP4AoӜ'Ш0wՀȋJ;e~Kepz@oѤ:(@ѿLc /쟽+D$hȋ/aDln? tr|% WJAuXEzc%syٟ~}p֌#yR ?Q`_T|5ʟ[hF;F8J)ܤQT)D8P7@aH#/#2A<CՀ_'4[ 75ؿDÏ1_n%p:pF^'tRp~)!/?IC*EǁT{>I\ü&1q!>eWg(Z#/,Kk?Oyew|+K`l}W9~+~}vFP|_~-&(|;%RF^6ߡ=(]y=M;!PHcn)N@ƿv/5\5}(Oy`?R3WJ!/Ix/6wK!F)SË| /+(]0/"?Ư ?sB(.."_jd.o) s](ȗ*~_k|9|wqR@/cUuKsU_([|5WykP_r| O[(ȋ}Z_/kaQqVVJW1G|5/Y˼'QxeZoR@Z߬md(K5.x _ (!/0yW~ˋ9@ѿC^w3f>l/_=/Ǚ?O?!/2ϼt>@? A?Wqذ=p@;=Ec4;~%O`>uϓ_(K {|s8PW4>OPƯgRx6 (/{6/ayo2/4 i:d;쐊BN.4\3wݞ{w󯙻u8׽ #|< 8Ƌs,dLg"=*I>y3IWNo]ۥfݾ9Tz=ix{՚({)]eM OAm9C*"C8MֹMȣ΋Olgy[[<|-shH>'ߌu+E=e|α/?& =ӛ9u5sTqHBgBX^jAץb/䘖nP6iPe=۬>|xf] +ϛ摩sNsyTsg[^֝.Z׻mKwM;@NfrzĺՔ-2<.g_D.MƦƦucl꺧)[M0]!Lau&N̬%ϻy@ϛ|X1HpXhw%jߏɅ\߳ͫr"p ]\9p.E}sov͞ⅪG>5N3{E65cLxܭ~T3.:F'G}{rT7ʩRr/"S|5@d{t0u|dp4c_A G]H<<%2&'#=*x"::ܽw[__68G3NECOXl)RnSuhI&όE~^V?2$hW.fn)pOs͌p<<IF gf AE{en%{wQFr/BQ*{^;:>G=>#{&N }5G+8 φg +qw);):ft@"p*T*OORp,…TmQFg9kyA)Lh ")TǨMGG55cTraXx:Qfhv0SSϐ&C.ު,M{iiN Ieҭ|&b|n ww/!>8Ddtm!D?83Gcc2sFJxdmWLT+BJ> Rsx.ϞhJ*=b c qyԡ\wX|2==o` +)LWgƝ:[ϚlknU7}ַG9_?kIVKR z׈}_OIH{ڙp{ΥvZMMm̭#أZ$]!N9vXq g|lQ38>Ww:P`{e9R`Y8njupwn8=|Y;J W) q_ֹIA>>ȿukRX{^Ze,]@a?Ժ5( q/[kkZLa7yk]ʚn{iZYS0wðgywM4]8{W+83>^z;z0[bJ3.0Gx)5*:r p̻2R>>ǿZ͚UdF֢Wf~^0~>//ZEbO M19G?vGĞEÌaf?eq_Bf:ﺯVx _ÿkZ˚(tqMG-3e?QTzB[[ڳKVR84yAq)t7ݙEbu5z;ok0q,ұH1 Uee{kiUǔ0lǜpW1F\J)sM26qyx8rp;nۏZ6b<&;xn[rִ/[kkRWﶼbM q* S>c Þb*9!5NmdiKYn*uCOƾHya0\8Y7 il߫n'j2z#}!auk`E0O0֗WFGӭ{sJWyI򍀍#o˯1~n>a^c^䭵5){wOZQ/!OIr^!Oof/o 4!O}a>3kR=3Un H_qyj(\`ط\o)hj%1P3M^~wm͆9W3fS֤W'[֭̐i#[0^!ðW'5\ZLDyP #Nbu7Ĉ:TOV$ղ:k.'gY/k",川L7ӽ _ToyII&ξx>ꛭkzm}ѳIFo0<;+B_~Fwz˫&e[X ixhByls,T{dW{k3YĸLxLMʱ:'Ft{tiųjɣi!{C+{4rav~?rMΞglekiz־&}8׋ye,Հ`ޓ֫ sp'W{5yk5)l&}Leh{F 3f߷0sV8='Ks'usY=l r}\6q&mf-h}cs}7xP78q}68Gk=x=|ïvwKkG'}6BM9 f;pM'ˣ xA3i#c©"泡hP6)J8  ;^=JgjbMw'Eٕ'颃H.z\p}1#x)UJTew<wxӸ)gbnQO/\r> >"g.&G§ǛSnj6_ݬNy+6uA~P e+?nJDs&5r:M$_Z>K5:? m: Z'*6Uؽ)+2dśm-ZRejkZjvF*ԸBm-@wN747* LՉd]P^L`H_l< >*C  %UNލPu[P}Jqg>S >4hUhi:hR-Ѧ|Ęus4&T@)Sf9Il!h!d\[~_Z^q|NR%_Nm8DME"ѡTn)j4ߵS5k8XGxKtVՀ/sKj!ݙe- gxb0סTGτR/ qu.?F v eJd]:tj9>)[=2l)vf7[,1u,ZϑFf͐jJG{ߖx_>_䯓P,n)&/‡%wU𵬔8eg&UrT6)Cxt&1dY~S!N,֐ɿVa=]ZG&o\cM\S5mwsu)ynؐAs?F٠DNf5NӻX0MCZ:&næ1GU\5}vʵR-0WKa cSQ_uriM*ҩ:~ l:_WkRJJMqWPxc!^:V)K=v:i^0h8U NJ,MJT4O-2Muu&I7yDB=d4h{:s ^zܤJrAe-yR7 A>Cmx&yE"%Ks}C9K8[FaI#sxp-<.,=4Nâp|4|N;URontR^V:,u՗b5ћFJH3 5$:yמan^) E[/H9V^7yaJ_ Jf7VJe7~o𥌋pYK5_ K%/4{ POٲI#/GCRjy_2Яz_cnהo M`f拸~R?+_( cԏzJ;/YEa@#/oqo5m%V8~5OjF^uPPwߨI=|~0`)lmPbn|TůCi%oc\Sp@yߣI|~/f;w5bk_(Sw^+~Q8_|zw{ȋ#? (Fz^P ?rQo԰xu|a4+W*y56_(Pǀ3É|F@ū) |ahKq '5I_(;|a$Fwu[`؏ʼnJ6~LPQۀ)Ѱ{Zq s(0Ic)<2W8 wi%'O$}Cy$M S(Hބ̏UJQiޢF._|gq|3)I#/2Fi_P{of_ 倒RxF^hxȯBWPWË{AP `W PJ73N׫(_!/Ocm+N PpW++Nzү3/s|FY廀H}Ib}p"Fl}/aK)|C>>DyaJGo(M2>?FPw?oi%~%/eOPǷJk~=soy _@~of%_~ _𒿯|7߯k緊 (nyũnx/# /D+NofwdM߯(FËoX^nyW / c~ 9~m?~!cа4 )ǗJ27R_(b\f˫,}>[A"_JU P䋁`\Ӂ_(3ȸ/P/~@nj `<~$^kKeGٿ|$+f>/f\jXGir|PC^/ԤwaiO*8QOu磶ȋ ס~ԖRD_(Su]#/|J5#uufsr|=P>@']y)_k~9~-Go֤Pu%m9~}<%v1-}Rb_*S#/($_=EM5[5 5nns ;kwS1ҿ~'TT:z5R~pO|}PRпE?qk9>(7Tvz@O]E5 _e3/]/sc8AQ 51K?!/פOBEogg(|71ƸW4k4P5K47^¼BpJxe}PcRF^=2)k~!/I~!@)_Dg~EAP }Q72}~MQڟ?~Cy[~G PGHP~=W byȋk//+g} {B!ǗjxF+Y_(T~?K+h+e|R{/^ҟWr_˸ Y_C^ҟ*\@&g澳"?U<@)|)_a_mAO_I Pf@ѿNc_|+c;#N`G]DaF^wQKw3 ('_ȋ Bg9~اC^oפ#[W1?r|@O7(\A@^RV#/rF_AFF~_| ܿ)MR(/ 4 (Q Ƶ?L38Gi%~eKoW1"2?|9>q[8~9 W0pǯFyI&3?JaQW .@$xa8S Iy)A^[4?k pv wr"^#Ay'Yc(<5qohEo4x4̀O¼Zþt F@韟AyL@4T P{o=s5.ȯTU<ુ:/b>!}_J(}Wj%Ĉ}FKU}_M> /Հb_ ȿ(WxpoI@Yyww\w{2~ƒψ)|Hv(|M#/ $G}G8PSF^F\_|yȋoa{ioOPQo5~—8~'=%_*UKI%d^Rxа% ?"#Wu>PSe].ZyRp8|+P23g`{+p}Ge+cR?ȸ"WW1n PjofƼڟ'ix@ Pǿ(WfL'O&~1~Ϭg  )Ls2BY@}HA>E?IʇAg3Wp|#Ϩw,ȋ+_3TWr|7؟y%;{!'_%@S~}K4bB[ { e~||F^W_(gpRF*%2US |>q([ |# 92C^_j REoO+X| ?+HyKV_wh쟭+D$[ld˂yѿ xw!hE6-?4&ȋ-W`y vޫJ_NUCc]A7 +4Ncu^o{5_S`Yn0°?_ɼܣ"AkЂP (K`cs|9/!/k/d 59oB}nKQ[W5W ?ƼB?(5Y^sy}Q0μ+yRO?Pi) P4ҿܣ$(_({'ՀByQ+%qC^FPSMO (3JRS"ǯT?h|_~%ϴs(|_k_( 8~5#__Q9 Jyop@)\#/FNnߤaOP[A2nߥ}(!/N]G~ſ~!/_8~_h | k@_M~_{?j?Y?suFK>ſM4!=P_?U$?_#/PY}_M.gJCGo!)(-"[- 뿰\fr| 4FKf PWy^/v@n4_?Og___(.>TS¥˼Tx/kr̿|57> UkThE20ւ~6r|P6J#/Ja~VO6 kE ͠U# !-+4kU`V@oؿp{.e'o([c&Wہ/ua_(jFXPʷFF(值,G 9~ # PF^rFX_^M_(eRk_|#_!j? a}VxF^2FpH'LaD#/_ (@y>n@C^ߨ)O#"¼?N! ޤIˡ)2ҟuI oȋSWJOSxȋ[au_MG (v[~91+e~X KJ@iSxǷJ@e PD wqjFX_>½y]y29~)^wӰS)<7- (_(aWJ>J~oc>*@?N^?>>IǟVc?p~%@en@Y|y /Yr O\]eU9>(5??hE4gO(ke_} J%} +6FO~k~!/Jw!+ן)/a_([#/rejE߁o`lȷ?5GlpGퟞ%h E#/_Sf9"¢&xWK\-7*ƋÌc5(Ry\%@f@_k ߤ?oyƪ6/cꟊh*Zm/eRE9"+hEj1v;9:9B\#/;_X/*ՀzhL#/_"omi/ڣہocI[Nþv,(C^ԤY[( ([PʿBD#// E(\m}x g)5bkS;!/oФa(׃|w# P`_7QaJ=iQǹżB)2FNRxF^~)#O)b[3^_i<+s8PQ!FٟPV oRQxF^;+q~ 5RwzȋwiqEurG}odjSz !o0.|9q~ _ȋ>RU Y372ˢ/Pǯ|>ƾ믇G}ƒ_ʈ- ȋ_ߦ]/w(M#/ |G P~? C ?f@yȋkqEVFwsW2n2 N@_P^̀w˵C?{l22Q(YK {eƿp7#n?{W)=dF^%)/_(?I*F eA  Pj%- sj@?y?F+ݪqz@o`Lzீm5s%yP췐BP#/K_b QR2yѿX>'qZ#P| T_hx9O_o_(j;F^׃|oǼB_{:o~1#K`%/H`F^@v#&0VyȋvM0*U~ez?9w)DaF^w_5A'.p+U[Tf`>a?;8Pw;}yeH[~4hE.[An<{ ſz4[ ~_1_p/aׁk)ܢ_():@_Ǟȋ/cl=E y@1 9P)iEqW3[ٿB7PȋAmwrG4 (o/̯gO/ȏkOk[}`^!np;Ǘ1(վMEy;Kk@2 41}=\{8~OSx"ǯ`B(ܿƾOKUjne\^W/xbgyť=Cs9Eo2u"_'y\_;g04~~! _W0wx9r|) oi%sZ]PQ^ iQe1ǘ?f/Zŕ̇;:EC^1yA?fM򢿙~v~S8~'_!/ۘ`^Os (xȋG8ZX; ӿ+CO_(b^e/ R@i߻)p"@i*i%=1Wo/} P!/ū9Ay|wP='~N8JQ?F!R?a+<3_(P?!A?ʋ@7 O\(> ?j8 8:s,TtəWeDzjU&4.}2oٻg϶WM6)vnչ]lFORTq\9&XCԖCgq>`OPߠ9}qn=Є~߭k?LPWGt:#=GN{Ҁ{ ƴmLQ7Nb3*Y&<:>B:[fxjWbƋm>rwH9b2׺unݩs{$ޥ)ڹn5e"Yg"& ,pil46=r;Kcӥb8iVLW+gjSe]]ɻ1kw.y#&09tL.=<ڏ@ɺ#fer&/+la\jC׸uqN74KqQ_ҝ]JExk?47N~L1iEp#q\뼋bG"_9{Åd^&;ff;13}$6ط &| 9ȢȰ`Yh$v DѓVp< GG# mp(.g*#RñؘSP8ђ,L8%|^彬vd(I$Z\̮2S$X8ѕcxx$<'MtK: 枿~UܵOģHBQI̫ݪj$]t0ɞa(p>mp|_դ3NygLpdԩ0KpS&PVY[GL_!E+ظb&u7с&4$"7{koCI6rz"ÉȄC3(>>VCS&g_T0uyh#Ӯ۲6eMy(Ѥ3s2O%θTi']=uIgTwi.hjjrxh' LyY0T'8*tVӑ\M4ew`Y[u*$9$$tUex'0\Dgؑ9՗{JVGG{.2mV ǼH*z= 4'eL#Rs5rhj:o{8"G\Lֽ:ȓxXR vHk7].Mk4}##-9OX KV-r`3+hC)8pUϬp$i'tw, #c7z3s}G@}OLQWZ2 [Sޔx)SEgK*ϷZ.h皗 YYc&8eՙcKM'|;8ϪjsxW1+[^u9nVJ4^8nKyv S\S۱}&'AO"c>kvѧW=n^l.ܜ=uֳ2r\K2KAYn)h1w٪d -9 Hs7ם9d2JS<ٕth,i[nMK$=}T_ @MFIMp$<:J|4PwPjI9NRhHhDp0f&emD6(*r:A 7F)[Xw&x"4i$e:uswƧ62Dl x*:< G#DD4 )Pxxt|8&([9զpp2`x|8ِVqIJ#P[[0JWԲ-1h93Gћqf"?dP+()Ƞy"uCq;>kkpj3]Iy_>^@GǧqL\rmiULa~ڼt3.OX|<ϚVW|W F7T{0?NuC>ȿ[\֤ܼʨ'-p~Z!>yk]ĚTws|YZ&[x+^V&n< =܃汿KG 8wp{>CNj@":yGi%cIH# eq._!s1W(8KN6g0!|4v8Lq=inP\bwκlbKoBWe:zz i䵃s .f0àzB\l#gwJ}2oUݡҭʌSkkQK3LA-^`vx-ݰ'.8q#.٫-?8~fVSY7To jk5:o5IM}:CSQu{S7Y˜8 a ga ooectg~E ]ޞ9`!MF,U עu{B\lxˆa{\}̈́-uR J̸^ο'c/\ȥ6W)ld 26&g+2b#7{uޭZTK^oE:̸n:2 ȫ4cj+cwfGK76-0{5F}Ժ5){ڼcMy]g) jðgrjl9P!y:ó{AM\&É> ߦ9w.jib (cDL>׳t'ۈ+41qWgj+j\8a>8v:;^&f_XƸɌ-s#7Myh\یѳӌSkkQ֍#yjΚjW]yj7ykfM݆=Cyk Q>ykŚ㣆V@v!O{X|[kkR&O5CZ{Y|ܰ.չπֺ߰p yjcM}k!OXBi!OruFzzЌSE!^ S010I^cNԈ;fÜ+f3u kR-fSVִՑ׭fYaث .N&qu<W'yyE:QbI^^vP+jY5pB5`+ngmztpDq1Ζ9^[[)ɽȨ=ð{ PCJ4KSYʻD&De<[h|<4k09iA m2z+/,[brxq&^ż2VKjj}0IՆ9T7/\m<->|ȿ[뵬Ia7kd,:ð'^yM j0ET?u>9Y;1^OO|lt s}h5 ?c>Lj?޸ PK؍?aw(}\vq·wg++X:+coGD~۰_^~dFLJvcSEqrqfoa{H"oGZa geyT 3?A'M]DrBrmRrҟG~TږS̭Ea?b&p;W9sQ|0A><><M?ޜvPfLs"]G@tTF뻒FꝍAN߬ǽk?nJ]:{lXP A$D6 ":BV|JRVr3[۹ڜ")Αi-z,gCgh@H@eG뼬PASM|V,7:q:IF̆u`SSS]P^^g5kRNSBDH8(Lj:(e2wzSjn^N\tґkJ)ni :ۂ*V S T+N&Ȝyۈ1ӑR&CuUqX V7$HzO9A7&h2js ˠCO[9aMs:OuKCt=_(v9GoMVLÝ;X)Hu~Tr&T2-}5~& t :L5׋ ?oa<G6yߣ5Nc4ǼjKs}> R/e\lhxI) P7 mar 4g?PL2 xp|9ϳq𕀒_ (P|Ȱߪ(/P_|#c+ȿ"/+Wˀo_ z@w}wkŸ_| xHᗆ~.a3q| [_O{+%\| wN1{p @I>JK(>y~Mmʷ P} 5b_(8Orz@IO2?U/T> |#s73Jy _/xKe {}U%b5 V@SxP#/ſG}Pme{~%{K?0l(yˍ +js_^ P+ jon.#oER~1jN35J_o-8 v@; O_ocOͯm8yC (w0n7O0<̓O.sŗ1+rJFGY|5T"ˀIRe'僩}n!/Q*}jO+8~WWɸ?•7C^_IOqVEU/ 5"+*ͩ|9~>o) `:Up|9ȗ8䔗U/z+xDO֤2HjEG*V|(]k5~#͌Z_ /Tud|5Z_ 㾁%ȷ*^iKŹZ_=ǰa& 5ofyƼ‹WAWb uofzC}͋|wr0wPh1a} ַ/'wWJ_(j C(3!/(?9PwF^Q_B;F=EL~'q(f@O2P$݀~OQW4[8z@)y-*n.w2/~/?G# S _e}\=%bd Ovs|PJ4J|c?f@g (=īha*oϥg { v|>r|P_@ey_(E^R{ȋhү88 PO~{95>3+(k (+)ڰb›5W (k9PD ȋjدTuy? P 7E-5B,ocyŕJx'e)װQ(§4{_ˆ> &@SF^f@)|[?>Dya[?>G(o4ƾOA>/g(eBs}/?o/~=Fkai |/52.ߤ oQF^?|2>~C^fFUPǯ|8)دPLc5@1/~) g,x8?+?Po/`?9~)y?2W!/Ҥ_ P*@FG 8~Rw5򜾒FV۾ByTr@qWe퀢yy?Հbe8ۿ p_;rg{ȋ9m8m>O%K; ~P/0_ E)@"%EGga? ?/0Y2[ (-y2_ (kQU*@ | #?T6;`|_UBm߮E]5 c)KOo#N /,l?OVe,wZic)|a y|)ڿſ{)5}1O)z@)?|# 8~#C^_|'cW7hw0A@ɿ_{R/QUc 9 P? |5WǍ}n>J5b Ҿ( nJnqMؿCNj򧙗k }? R_Xh O @c*@ߝK_ (T?HL ofާ6t.\މ@`u{6-۽ξ=1y<]{stKn- jDfH͒}kz߁G;`iz(bIkΫӝǠj r~~q #)4ɡ;s {֝ 3(ʁ{&Wt]q$.B'x`U]As{;ܾM,wt6L^I)R҇᜺is3ݖEDucB)jL9yiQYOww=yP9:ܓd˧wڗZ.Tb"]_.guv$IrYZ|9xn}i'@]#֪㤬=+:BObc;nu.;g.Lv^n?YF>2D\Z}!~sz>>H9NtKt=^tK]^:g;_,'9N4/moȜ9h&:l;"u+/?|ÅL{+^Fr:79$ŻJNl*_?0#Lyht=Ĩ<9rHStkۓ<1~ynO~G[;ܼ}"~Ҽ)Q|h^֝*.O902wΧ%9~r"GnZ[Uy; qyju>G]bm/[F~:OgrK0ME0즒?aSv}cj#lg:w֑SsǨ~/Ȼoב(-4G樥S2Z_vMn8T'\2K0 =3f 1R3r(5HTǬ2+j%,3H9o6&XjmìCD.旧m3Icq}Jތ@+ ecqa?\9YY7/g;0e]+x#Wז nA癛i\ia!j<MƆόF.ݺ$6þcfCEQ͆BegJرۜ*"͊rCUH~]"% G(d-**Uxdl8ܯ~p[&VdV255[r9|M}Sx>]ϝJ&$N$o &ۙ2Νƚ5:M Yw}ϮUr&=~@,ir*U WOjԙ%*268(ֱ_jzI֣~hV v >+nmF͆dLt۵ɩX~ަSH ú+D$ C GνY'v|a}2!4.ҴJ#`GMk旛k|AA^Jtґ8$,;2 7؄ԭ!֝1=l#HsLGJrWI]T_P)D284[39.2g87]4'*&-{7ۓ&nsu*Ru겺rKCt=-vRGoMOSͰ8?]MS}:yNoRU{u_k-/Iý]g Lִ_/KP/(p*L71%@q&e0̽yǔYsX^YN-nu 1 8\eZtxV tL}oHxn,Rl0doX{i_E/f7-Do Jy\ XBx/-Pw!R䔗-ʯp|PʿC^/~cWo5&?͏Ny_i˷Z@-u~E5J4dQ P07_ϸ|v@rr_ (SimKV :34`S)ebgΧ]\ E%"9 FҀQxJ<0/~#/PQg*SWJ^B]y߽*j,|)ixȯr0JT{8~=ަ~&PxwJ^!/_@)IË@~+7k_bIqbm"v]@^q?]Rw32&(3F>%{Up|;Y_ (5Oq@ǁ_(>> CyIS4ȷ~%W|4o}QS?(%W(j0g^q8>8yũG1ռ;˸%Ƿ_!>e2H}<7ǿS)/2qd 2/a_QLJ}sʋ__Lj/oW/g_S-ǯ 4(; "p@Z@G O P?k~oePw1R?(wJ!/;{!~?`jxI,_ \k+5*rS_ eDK}Yf@.o:𭌲*2۸oZ<.~%~@n_Y*5a15+9~=o߾}~ >3}8 POkB /[|Q~݀>^䗂N@`Rq*|c|yCԵ@}˸)g/K4;o~ #Ϧ/0ˡԗ_ _(gC(9~(ᖗǁ_ (6@פWʷ P ~~ 6JPҿC^^C|#73W1)Hf$rF@'q)o |7eRx:U?@34@Rb[\7J&ƭSx!o‹5ŸH#CvJ_U\~/~#w^%̀x-/P:1F o<%7CQ8?~2 /ĥ[P^)~piO> "@ߏQO5a~[WJ1kT?MRˆO(?@ūg(#5kxAP ϗ K G  TKU KQ*_MdR:Ռ2>eK~ ?/RǷJC^ҿO P ?ȋɈϏ(wC^D>ϡ|݀/e,e^!\?9~>/` D/FWA F_e7C^M~5bC  |3c+ؼ5PO=?M#ů ^|"M`8} //b^ތϦp+Y^֦o V$-Vy#![$iEߤ7^(L-h>̒? o9!g+~0w5k_̽Zp/&DZ}: IF_sd!ƿ-#C]'DlO^;w~M鄨#v ?I儈]WbJBo7U5!~!ou_:7Lm?~ '|8I.Sy]Z~ rITVDwKE N%&ė⟃}Uy"GS~IT^CtE"~!簤*%4;"J>%Nfn;fӕBU- k\R>-uoڼ3f2IQ7Hzʧ(b|yFI#?]E^BNj%ʢ/!~!I*%D|T-3u/s|[@R>nWYhh1^"7h|}8_9WۈJCyFr7|"ϛ$gчo&k34Iws[an+IG aoч{"DM;T^M>(Y[{Tw>R>^_ꯑ?`FO˴i!!#.C4~Zt}Pr>|!sOT|*A/HE}"/MU^L>?hɿQJaė*ߔmW*oIEj:HzHs QߕE"~=I?Py!_ү,~~(*o$D>E87~h-w >UxMjT?x.7oߨy; Q?NG?VB?9gB_񯔧ÿVIIQy1!)}% 疯Pė*lU*>eGW)bjȈ" -h +ِy?Ĺ窾);?âghmꈇy6:>&xrt>FDBK}?P;dog| wH| YL*bgbCb5TrN(>_:P2B/ч [}cF?>_cv}WiWQ/ 9 \ZB#6m/%D,"}%|6!  YrU¿}_nɟǗUTBjKZ嫵} r@DBFqo&o [M}7_BB|)!_b=I@o#YO8/}둀׵y_{&gI27-Ƹ#[_7KV޶u ~Y}6W۷mݽbS[6ΰ~m~ fm.ړi=^2$8eݴucˆTü`8h&ݧ4̴.CeWAl]ZopՖkY!~8ݶ}c&5 ɵSߧOԒ4Mp TgpG˯^jCoʰއɨS`qƄte5N3.[(2374hXĵ[VoYq3}UhOr#gH#%Gr="4U7Btr:c2C3bc F:IQW<5GKSې̛ю4QZT-$￿Ce>|L"[!m{̹ٚsM#9[Q3 㤝Yϸij%b!g<z^HN0&SVjCϱ x+w u1~&ցX(I?X*2YhVyz~ڵ&+hY?c?G +<:^ ?d?(\gP<Эof\N|q\H"@wbtk=%ur׹-^pGe~sHA9h< Pk͙2_|NA"$W:>y 4wwdu#>]R\J#ƎZ"\|Mm1)?5U8@WSʲf{?b[n" Gꭔr/g};Q3z eqZn|Wh~EE[dС';$)=)Ք2"HR4q{H~k1W+wI;n*DIRRķ:6mxȳe]ߕ.W9ZwlioON ]>ذn~̍gD3m|O|Y.uztzt<\_ue0KLT{z&{|)AnLk2+~^Gow}}͊ /HxwIn8]dh}rj,Bz-,_rZ-Ϲ4Fw6uD{$.ʹψ:qox@d)7FvM9iR:hOrdb3:m lΎ",;9'NFѕfҍbӞ zaA_ޮhGAorUdт/7ajrxZZ|2s5۟yN/ҮszN0z<]&﹟ Ӫu ωY^=8AcI;o|J[4264\J;=5^IXI ;$~tI'ADk|~^L%j;31Xg/L9Ͻ.1"6?|mf3sqe0 B41^RRhdCn תy z^gh8hI4yiy-h"cgx+(> 9VQ{UdIQ'IM)sBr[ļz')ˆ"fV>FܦgS̈́'_(T~VqD?Vp?1߁'Mk)wLK6s ^z^)Aߛ)~'qg4I~d'ѯfxp-=m1:I~yx#Yal?x4vVA3 v_s&Ơl7uuwx؁}U*̸lV/@,t/\,Uk 5~ôZ$LyE<¯CWV<T&>Y5t}]J^ƯI~y!]4{xvIi)~6%'a {*=V/n$^=뤴%n!K,}@\GdiOgfSO?qOoPVn0Nvb [˶70'ݨP] Ƚ |l :7)VĔU7Nv )ov=R'=mGd~&vtU~*ěz,S؀d{A$nHeӵ~:^1_ň򘷒߁h8x8j:\ܿz 1fyHاz3tEzE˻{i.R{ŃzsP)པ]n#9(r 5ثb5>;>3SRrlD3 Z"^05y͂[hוW(Qz֑z h-K@B5V zAXr^Q<vT:\k=Cw͕!H&#ӡV*='gXZOvJ7gSaGc.>\F9JAsSy=Srq̆]>uH LONxԯhMl*< EmėU.̺͌0KHjR3oa°ZeZf9ZXb\{'y%g.KtIC{ٚ8i OM;؟NA.u/zjW$}s6gR~ cV~?Тomي窾9U6;}!'AsKd4?`vC.:iS>K˂ro`U^@ !~ !C4EF¿>o!}pԥO$L y>BT2*?~:(4}؟N|b#7wiUD?X;o~|MėR-"eg9Q\~:!ڧb9(JBOՇs8%@:h7o֧W'Qqo=5}~%f⛨|-hEgke;\-ӼG3yP|Br'W ^q ՟*_J[-/%ʷNO_GDݒb/-! ;uvw)o 8A#BDB'+TޜTvUy!꿓bBoE/!{/%~E|lҿjBÛy9s7u}@RG=T'֧o#$}s$=W^ta'._$nJa#ýA5kuWBB?Oҋ,z QϗtʛѾ/ч,ETEDQ565_n&UqenQfBr} [/ ^EEPDy3׽Fk-<-&DCp"c\$D蟦,.P +o[$cчw_%U儨#Xjɟ{H%}ωL)*.I߲#w?]Q^W}#}/:>}"O\EM>!/ > %ݧfB/Za>[WS}TU7c>kчy~I'$}'I/k7SY,zBYw=_rR*H: __| h웹ʣ6ƹP br/ra|49eǏKzXSyXOW㧒~ BIz¢?'RBүT^MEE|"o~~-'D|G?G|X?BHO/R?K!(?4>r_T>EIǼ-U"~"wgc ?O;8 Ef\~O @<A]|B/rR?d?[ța_ >Hed&ҟN7+?Vhۈ@?I1 |H3 1_@|/t!ń"gBI|b%_BlB&Z#%+. N%Qq1#~ !Lq-_F|+!/'~F?@|!Ɵ7"pPW 7翇T>I<lx@?|=> x'^ޥYė!(sɿcy#Z\>_):>?#}чk,- D<Dń(ߍ^%>Eʏv58{)Մf($ݢBr}wNR߫M^C|b-k%^uIˢ^O\߭/$o Iq)mP2BntEA|JFJҿ[E&K"W&~"?sv'DoGo/$}īDx}^1npY?x?q|RO!D|i~[9ATkK0$'xT|') #TgBfч_5'IQ,Bϟ}a/g7*_)!?A|"O?s/W)b4kG"~bT>g~O~E"~!Oh7G㏬jp~=K?Z?.~ϥ/ߓċh t٪oTF*q<` ~=W<屷3H'p ?(PgpŊt>NlBoՊH& _Dť_B|3Y/W,<꿌WjPUpm!AS9NUgӜ{銴_H<.تYhZK1>!cEpk>s}fPB"."W|;R!]!D]B|!ƗKǙs"߂{$ݯ (_?;%uoC~TRE$u].xKMf;@|)a OGsT^єW*!DtE]ABOK:lчuy:xȢBK|pn5B*Rs}&ZUD!!ǵ^cb~'*$@>^/}|+r|@ҍ*!D| }ؿ9^ZBNj$dч_>MBK-{~_+ϫZb'4z+:yUyIq&OqoC.}wq%I奄;%ߢo"LY]*MotE"s[GlvITBB;|a^FBIg_ Qq ߯1OI8 ~"W7糟U BFҗ-ćq~iǜ~Ań,e*1x$ܿ4}UU^S&}u~![*KG--). ߖ]7w$̢%~!!!IWy#!|a/R?$DGb)2\*_EIįV@}ႿQFBm;G<!K"G-Z?S$އ|!OTǜ]3ogÿVbB?}a_yysRE Py"?!ʱkF~.()dg>/yNt>*зyy蟥fO>Po6:>7 &x dzR$'Dh2 5Cvʧj|dMÿi??CBa&Dg~xR/e_oQ:Oj U~.$"B_lmԾ??xbΧB%tL뉟EKė~/@\ZrNȿIRE*BŒ-чy|i[W*_kZ'}[/Ӿ$bByH|)!<I@o&YON`pI'HMEsv6.?:_q&pUnioo]ӆwF>>~VlkԶ{Eš2(Ui߾9Boۺ{ŦmigE4ku3: 8ͅoz̓Ν2lںeC{a^0JHk#SL fZ Ґ?6X߲fL^ Y>5>Iv{dk{xCp4mZSk ٳ-#֟g(;K!NӚ=` E|KVmh_^r '7:pz #)굾0.z\'iuF3u6C-_I f33bd~gn'?5vxSې,Å['?S3w̷(ڥQdk7t997[sn߰i3PdboiĦ7M?[^a\6gtC: S{{t$_qjT]|w/9Ϛ.Oo@L08? #U,A- nJ;Xk~7̍gDþm{O|.utαt<_ue0uLTbyz&{|Ƃ%AnOC\s~,{ _ƻK*n"cFS[fճ/}ma5{&)Ϲ4goHP]ilkIfȾ!S? o]vM9KtB5ù?X FriryN{8G@ztzc?dR҅AcoWw *h|\ݛm~B\9\ds}^xH%[!VZǓb/_>gj3f{gB*? }8>2V>bw:jƞeVd)ƏlD:9"AޗOs?2D"v'E.<<t9IaGD' ďALUs4lc99NBWc9(HRZGksvqlyq'Y6 Xۓď L?)l-Z{ctB'i'%FQê4xhrpgAxFxC{H-=3(a'HlVJ,tf,U iVp^O' 'UOUxL||ϳ5k|=m=U ,g7hOpo.:)-Ҵ$L=#޷}O\ת;KNJ ۞C2YtQ i$˹z(>.꧞>ONq v$ vҰ]^oܸۖtCc:T^h3S{mbw9LFS77Nvo)ov=R=ϦS =y쁟H},%f㉯yu&֏ H87F:wl|eh^'̨#*9;}'[3[y pu ^Qٸ۽?r`wtw_dh%"GwwFa]rABz8=~<$/1@qTAvUPXhVXTӊFz:{t GNמ8{chx>*hƮyģG}[og4u[z.fR'I}~S]pq^+;~>(=H}\x՛k l%sK7#17g_C{tDs>17$mFhp^\68*$$\p(Oc@:{+ͨ$uqޯTũ&J4J+/wp?ch,CٿH` {2+37 Rq/zMU޵uIФRnl|NnzeHutjۡ,V9en5N5.(?Z>V<Xp#a<Uiko9R5Z0=LRƦ.`wSB뚌peֵ֘DhŚ:hB}IdnU Ož}Q.We `rGH-&ko+4TݑS0=( >)G]VK)KMm[nYvf\DjQ^cUy[ <6v$Y.WTyB"cUMoz*gZͩWr;uP:2_`pX 'QI6Uv%=ڳo`y|I^~̭Y6Fhӊq*~s+\==탨. C2C`Q8e=쐾c g쒡?ҷϿINI7yI3kh8ZQx$!`&חHt|Ykm56֖ 8{ߞxHjͿ*flV@_D)ܒ(" wFw\0}pZmڵb5oET9Qp͞ Bq}L* +JNYu9 :C^ܸsC+J+ALH*q5' 2qy`#$!hvf;k:jU30@,枎^pA3eؐitR[Eo #˻Z񩩎2ȮX)1GtG3sS9Qo=pkweTodT-qsnXW g;,U+tX6{O,PNWTqOvTC"og_leC]aw4XoJ Ť8%} *kGbɅ'?~cGeN'+Z= 50 "}YKFEx $ɲz2Gޢ>Gi~?l+YK8M9=syA]q'm#7GcZs~*nJnz{xsI! ~tvL1<ڧ$gNAw~9u G+?*VZ'*1g+N6Gc=hlEs}ޟyR!Ih~O<~oYZUzÿ僎{wS).`ч9{d.]~"!HdB$-Oȃh_ܭÿ)OU,#e1y9!?G_HM]P"յM5_J~,g9áostBOa jsv+ >5n9VG_Oo s%WBBgdчoTl'B}o ~Foza>/&~Ed}1!7~Z>+ɾm5*_E}a Cs_lч NrCnREf8I6ۉ6yc ,}! ˨LYvGw7uun_ARAw*i}GLR}.B>&^q=I*@~/mȾ?KaG_IfŋՒ>?W|?v@Ao#D|>G_$?&o'9'xߤslKTyC >W?YGS|HEW_Lhs&RB迎2B连 ٤ of9s7ch;H!{#Mߛ_LLRE?cIw|%!.}7 ٗU>~I| k ?Qq>IR Ű&)}.ynIQy9!^a=/WޯB)%}XS~7m!EZIUy!>GTD01b|8 K '$}٢>I|!'􀅇/Qʴ$}Ä́#/XLZ߃ʟc?_' )ꛒhoIEFBGOTD,<G*_DGbť~ߗC/#Dc}CdDd~€įPO%H!sK/]E)~V">Z">O|"S?H$FB??zE&  BwǨcƿD$~1!{ʉ=ϞÿBӞ.i!u yu| 1~ο}8_ρ|3FU}4?$|"Y9OW< Uy92eчW(8n|_KO\Eį_:r5?Y Z*.&j\a_2Pcч/Ul6 LSy T}؟F UTa~gJ/ k@GŤA+#~3!+'~vOb*Pi_%OC`' ?_tg87~/$DS~'~_ԝ%E*gDʵv>_DbBԿ|,.\KuXJRed_>-<7~3!?/'vR"~!57k-<_K +[m$"E=?w'!{>lķS|"D)?>_ i(E/PXN/"DKY-'i}v|!w>&E'{_EwFiSR#('{ߨ6u]F|6rIuvBK|B bXK;D\B0qǼh>.o"DtE#~!JǼi7YC^ńCťd߬q /#D>?_K|"''|*//tG7&B#[/&|B/tVqUR}%~x|s'! ϋCFB/RmۜߪfBĿ9Ӣo%E㣩?s~~Wnч-"797ۼw(Μ_q_Cߙ,+;%[3 M.I/" GU^XEISy5!㽒>bG#Fgη?:B|ao.!}a?蛵Ki2 }3Vsx\pB /\$' T_5 c#T}C_!#OW!4t2C'b)oΆ~,'$^AVH OR +oΦ~8e*IkbB;K (劕#Պu'BW\@@ߨ ~ !N>EfBۛLso I8> ;q?OU4G0$)[E,Ic-M|"ݟ4oM 橼M϶~񕄨|Ig̏<(O>'/cipE'?Ui[j?bi y*@IDEϔ_b1X򩊘fr>+!oR`~) eY"*bJLJ,,_E|"7MʘЯg/NM2׫|!ڿ %5|*% }Do&k+c"W [>`Ki&|W¾upEO| !I|!B}ؿȒwRj a~X*˔RI{Tߢ{o&DtHw~Ԓ |+s6EZBwT kj*V{l/'1s〤#}?D$0?lp稼q߈"}{Zh(op:TVw-Ŋ}竼7XaW*|ь/t%x>H|rŒnR BIMįTJCf_G IJHUm$RBusåkroF|Sқ侁e6oч7-Oو]W*Dw?x/\*%D|:EoMv'D|G]į%້_N+*Fx>{/HʜۺyO|"R>?ic3n|<@T⑿p">>C|!&D}j%}Q fч_$~!KTy!>%߿F[HuQ"~1!/U\$HzHk w}CʗkS~HBB#ѿMX*_C~V|/ $~b+IQ"Bk}+3H%?[c/T\Bd_B&~B|"=Q'ߠ| !IUoeѧ׆sA?lmNA炟O9/P B*_D%e[W,>5jB-(M(-((/ F~!!?Z9})^J϶_JBU0O|#!_H"ey&:Q~YK&[D[7I}zp Q)Wko˚%4SU:>&_SI|g}KuV<*dR'*[%*4B⑿*/%M2ELߡZWq~hE?[΢?~/$ ͞dѿZ&q<=#O[_|kÄV?s%K^,jė*ZC| !ʷx$ZG|!ߨB_Ahx)GU/cEhGo&VB*dLo޲PΗB%]"fn9_RE]@|"/d ] B)+,1tDhv.|)t=*_Ae. W*RCR~'#Do ,Z5į!|[/t 7ÿ>[ڗ4~)o㛩ߗIEEKzEo!XBҫT^IF>쿊ƨWKz9_%^qٿUm*_L{>f)bH? zʗ}37E2B7b|{,<[}3BNOG{u:xO#O߳Pz'z>2t ?JdE/dUq&D>A*Ŋ3py}go7G9x}MIVBB߷|a7*Μ~_+$Ң'~"~ ?$u(ߏ@|J _?wk#,G,4~7?HzLy}bSa1Ê3?bE^YN #w|6!wsw#D|<ᣏN|"EB&Uw?*o'D|<C|7\J2YAZeIUyY,K|2er/ТHU ,#g_H뻬1ƪ|1_ֹ>?R>Zέ%i}g/%]d~LhxWdLɚB_dɚa _N뿬%֟I|!/6c8B]f+uxW~f{o^j囜Ļ:UGtB?vpu}%uw DO|ϲꉯ$D_XC Cl$P_Yuqӿ$|dǝ$-eOUWTr'+$ֲXa9NΏYZjEԟgJ(.$V_I<.k QYT ꣏_I7R,&6KҾ̷k,v9_҅*sn>_HTE/CE%]fч+KT^JG/!\?"C o=Ya;%E-<?/4\J2߭I|?L+ $DtE HcS}T>0._a>_XMYI0WC?b)=nX6G1:?xBuϫ˜ĻkpbLOU,v닄bg)KKMD|ҿZBˈKIǝکPWJz')*Io_MTE__#u* DV[-:+y~}T^qkH+GeE卄v;$ݩrNh7#;$}oi!,Zڗi8w`jNIV4Bϻ$}&~b^IULB=>^K< y'%A"C>ل(%}¢?B|"}?(>ISB>1K|>:EWSs)IVy+ϬMc}i_l?Cd9}PqgƯ/ߦx>EI_e/jXA_ O#D||]C}ߔm$D||GmɟpYXS#T~ @N$آH|bELZV(oǟK'b|YaO"4fS?[O%D<"1>-0oΏRBϣ>{K?F+#DD|"w~{€J|"o5Izÿ'H-[O1&}Xq]xB)Bԣotc*ov sHlP/;Y5{_ėj>K9* 4-\>+?nEOeWB_HqėeOPy3!WH|&þph"m$ˉ~S,Ӕ7g\yL'"~Lgr,O!D:XdчƇre>_N|b#7m\&Bدчjhg} 穼&dB>2 B1<qw|5!DRĢwFq3ٿԢ#BK|m!(VB/턺?n8m#n=ʛ>:Nǟ>'b'~QYx~;ɿ %*ccbO%_q WUnioo]Ӧу}qŻWoo[uS-*+/Rˑ-W~Wljkک:vQL\Wa?U{޶}cu.ZKqx~\A[hES+l[6m Dː fZ N&jˈU,N64x߮]$NSa Nedd8g ~UWWaxrxkgaϴbNGeaCA >qfI{X,;eHlpgW_o2Pff 84ϐ @:+gbOYqs)Pf'wŦW tCZ|X^r*YMJČi2de3m\̧esˊ-k ik߽fն *HfDC!EI*J|5BNJ!W'z6ӓ 랢SMCGrWt:8+3?Z9R:߼}hR%꯾6]lʉ[`oaLLѩKq:xƿ%%7_+gXMw'πVC!U}@P_[6G+~o̻xhpW62uG:R!keOC鷃6aVMmZ1X &Z,ew[ln uX#fx"wI Z7vswc;i+;DZ6u#!Ch5U8ϑ~,;'H;z8%d=-7I6Fbb> pȑ@ۗBS&qN&+ߎy̛kA׭ tW/rHvmwU)˼t PAўh_O.?2,td;nٹtõt .3D)AHZguפ_$OAsVdd '-f^ W#RG닓R_n+DA,h_A.8pp=v}̣Ooq-׷2.EdƧzviU&i{uٛ1Dk!.eI/ݦ%ivd!l 77US3_n٫6u}SOj9c=':ќa|Zs6TힻXii)}oA{uWJ1VJIim*5eI7"sv!pN3}IB^ 8!Lm6-}A٬<ۋENwQݻ=w3 [f ֨eÑ"kÌ92ZG} H>-~ Dzlj)..GKuvUX-̽5ȞЗ>9bmaӻhGJŝqwvѩ莑8*,;% 7)6ENdq~ 'm9fdgu-gnIL!))mk N#e? s>< t})oEyhg8G_kaA Z= a" :«C}Q}bHOeKg6xvo_ b3AA|@[{n>GPƃJt) ^XױK¡ NrUdт/7aO)' k^kgvb|0'~M\c[L;WߣzNpLv8T $bp~OUcSNxO.o$MjN&;2/mDgF|p)x%a%]05l\|Is]@\vb5>^?/&މ!,vA).6?2Xg<]/12L[2ս IaכzL2~7sTgvt1;p*=Vvui~b~^muypRb$bȣe&_츓'xj4WeKm/0aZ[atFimⲕǓ`i}߼g򶧼/ؿ~78X'6̳'=yom%M z[W%"LVh~fˢy*޶"ǞgxYK:/%Rz\^tܳ} x1C^޸Tc]Kuy]Up'KS['b+iD:u2Zu\eYz۲^sVz8xM<~fd~z~'I+]y@*1zwGBaZ v{ݢ[y'e.G8Nb.VX MRĵ}ɓߐ` t肇1qYMvKNӻok5kxs*ڨ4QZµwn"4L j цxՅjr\^xR(q}tXQlurI岗gͯ4%-V +6e#sr3KǛ::iرo~qPq~^/UL?/ӿdK$S$Z>2kI~(Ǿ?|{l7Zԉ?Ktov}%}G4cW:q*_y"L;bǛsef hPlaZeKa[IiVW%|"NBF<9N{+N{CSi:wZt}.Ǽ=+xfI߭A'4&. >{Ssj$ ;?p"ԧRLY1Eɂaca |Rd|l4&+v݄\W{.4ߕtW%Iz˒}_"hk|#=ԇߓYN~3ON3i#B9ɏ_:}CJ J2Od?Fxc@w$5H=5zzwHJ{j~h/RFL%;9/qor^\}א .:\*.BPj!`i/.0kǏ'S~ُ,s*|Bs+5W͵^/JlN;@}]̉jy̱?Fl|Zm4$ /*$$\4X+S:Ԉ"zEU"*(U Hq zg(z^蚸0DbC*w1eʪe)TjT+s!`,Zr-|UݙBJ5_'.{ޝȮׅF;׆*ܲN5a&#qOc  wG{Dh" _ gB60Risko9R5Z=4`<<%v$u1ɸ4.MQ 뚌pe50csn:/;bgO]uؼíȋV"wz{R*,|僄䒰yY"Rz2-bwrj)NI8IHVth3͕?H^(UHOi-O}AFγ13r ř >VoD+R9o:^vH̄)S2S(ffI #Ltί)Tki%wEZ`͆}iSQ)?o"39}=Rnl%&HwKbpɭutFKR)̎]Rt +2/ u"5JbF)c6}ǭ uTxJ;b5 hWIm.1;Ln5'ٲO/Xl ؋0U}K+2[R9*NG4LJ '^Veޅ%liS\VtuwKF̹eޑhX^HZ@{d|Y^{ ,&u ֻ7>@8rhXtw vt=p\7MI12Oc uGk­|EzѾjp]hz k=ѣ=0{|ܦ,9wee+}\+bK-.i:Va a2V3%͵+4%Y&˜eZӵx1*e;RW/_E/p8VsCz]\ƹAgmKvǎ6N"crU+k~#QzD;M4zH 0V3c].#*ZHluoK4ZaUiXlQʬ45A3:Ic[|tPH$]>Ӣ=1F`oWo␬eO]Iq->,/ϞC_itsm?#/&c<f4&pwl:X(2K2-?只𼪤8s3" o{=\!s6b#C*@9*Co]?̹"vrg `uuQHc (гuldzWݲ4dSGy,p-D!qrp &r$9st@ciOk\'7Wf=MoY.þdb/.Õf,+[l L6jWzd=6r1؊٬;k|-Æ+^^F&ή혷+6]Vx ?ԍvgIyCX[J 'o7\yǞ-gYc+q-ږ̧gjv{#ߪ%ݏ8S֛PҌiuWSF^eT`7^Uhb=rP GcC82 TC;;}xXކ9g|,O{?11X?eʀ/tgOGh'֣KY6?UC/ ʠ\+,že\\;t`3}Iqc^&%h˜2ŌUZORuzV`gꃐ\ǔG)2pWK@2᷄O3=5~ܤY]=bpؚLK=Dvh :Z{'!9cIܿ=sMǣ*m#)>Úf:|S9E)o6J|q }Hy-g+ds&G3-bGvee,bC2J*g+^Nج=vGv  5o3K30Ƭ&ϏZO9%O߬ݼB[b9?p^[ $ctO)s6@z(V~TZͿq]Ur'ݟE'}!_8;sR'=%P,- xZ_A}S¿1O#DKvƒ8g(SfSy !__8OrWNч)U?ꯚP>)&~"!ڧɄh62O!Ds-eTF Q }د$vɾ9*o"DKKS>q+ڧhć+}5,1Ԣ?[qzBBgޗҬϼ"|>k&Q|^儨>NGٚ U}aՊ'lN>i7_ ʛ9r'_;#D|$~".IUu,7 ˨.G̈́(_G7ueC/ D2rs}r=K|! >WHW|B,z>f1zXQC>6]dT~ !_W)uA\I9aZ}ؿKA;?/ч<}{w<_[Yywy} '">_Idřʛ^%)">_M|17_B_K|)!_O|!o%Bq6F|5v(UތwHzG¿;Wl"LbB*xSJB>_MhM߼G>1o|'">ADEoLyw|bXy>>7E~W{U^Ny^K̿+ Qs֋AM?$#*aIOYG/I+>o>xlj_L~*6)¿OJzТ>ErBp̻@RyW~Uk>/*_K>|kꯕ}E>k}A\B7Sߒ7}-7}]I|!!I߳o|1a@>K0I?Ry3!#EǤD*_Nh7SW*[x9&D~aiھ7g !D=  ~"ϦBB'V&ƿHF"Eƿ'$ÿB?< Js 4%Wx7\l~;G׹O%8Cof[gEb׼ܢ򈟮_Ɨg*/''}/ Bj|"~"uI g`E!I~"6򥄰?Vܫ_B7^y*_N+PRq5$~'P_@b*0#O#~&/LB7vEd(/ !R/gS^DRܸb|4ySGEߌo2W|!W|lį$D˞,C_^E@א}ˁF dNq3RMYRG-!!_NŊ8?2"~7![M|DI?RVw"VKt3JmT~l<b7B;a%NДό|m}E9?KŊUNT^MIo#ۈQ7w>ђo%DR?{jfg_d웾no}B /\|<$2!Ioǔ}.ve?ṿU>I,0>}Ɋbgw*/"D|bE"e/_AhxsE'}**$5kG}ia7}CҷU>SQۻ~bE>?ӈGǨ+1WT^MyG9~ZB#IS՜mI~ńa})K7_Hʷ/}aWķ+!H;߿чY?Pt?*obXQ_?K ~_EW Q?wITy-!菲$NΗ"ۿ_{2O3ÿ#1y3oA7˷(`Os[K YG _+!s-GKùe(>1ˏcSA'|bq珠̥}؟@|"AkU^N}؟L|"\B| p*@<&WPDfPWD2BWL|"~KU7KREZ#ur}دWE[OՖ_Oc~7־~=[8iU>'m\I(b&kB+d,.RLB/{j>ʷ"E/M-&Jj*fX .ÿf(֓>B K, T _CDͿq΍FB]%փ4iNb}m'ܨr$<_n ^mч+PIڬYM^iчė*V Uv>?[qfѧႝ*_so.x>͊+.RJB}-{T~>w![A}俛fbBe>ߩr^IU^E'2>'ZǏ.>A&~.'Iq ԣ}C2E^Zy}*\"~ $ |!GDPm DrO1O|y+Up9Qy!jIZas-M/\e*_1uIzW%`G'~.Ro%D|H|;!PҋU"}b◑>Rm'}_>2ėg~}^^V t{ zIo#7H]%h$cчۉTy%!?oч;RwfIws>m)XkT *$ݫ򰢮ͳWwKE%#}*/&D#??Py"&>?L|"4ˏHbyYG_>FbB_>NRE_I Do['_JҧUNQٰaчOQq3ϩ| !JE?GV -3/Q_$bB7/TB}o$}_I_;6.B?߱. :>]Hh웵ˏǾxQNsgx}ߚ߫|!G}/Sk_GD{RBϔi!_ x h QOyozV~g9n| @ ?I ' T>P/M|_C9shBs~>E|b%&~6!"Z!~.!?_q%oT\L/!y/S\Ko%$+n$)ķj M%~3^yfxS$VLy;/R\r~'TJ ?dbI>;Ȕޢ|Xc[b-TB,_M{B.iEm#Hw Ļx/">_@|".p)3CZjO\"R'qv 2ֆXaRqFWI#J.OU>QVNIQ Qҟ`i.$[2w߭Y b:W=:o#$?DPx~IT^BIWYQC"DtT奄G|a%R⯢s D^#%N_t~VT>SWIG|"׌Kz ,A">_< /sϠϛH͒^RE: L;,?cEU> >7+%Zes *IoÿW?OHz"^O S o#~e] ńe;_W&,.WA,wYq'?IXxCd4~LT!!{ǸsB A]?W|'2*_A^_/*@ /]蓒I$}I>$}Ѣ}t$ISy !>9K<|7d2eߍ_5bUI߰׈C_!}BcGf|&oI~_w9~8Yx&h!OT ;|&!k>)EIʋ ??ч_X.g)0B!\gߩ?Y$8QIP\B>K.7Wk?@/8/$*Q//VmS'[a_/SKCW }Մ?|">O(>'~Ƅ}c搜wʳ}5>B,/!/fA^N-ч2Ktd8|&iɺ4k~XxؙG#sI'D\dч9~j%uv]GPQ"KjPy3!>7XL|_ !/'/V=#d|"Ο",BTEo[.i+Ѿ+$J+ UYkT>GXM:Ko/uiR ?ʒ8kʧ9g0Q2gaчć.K U^B26>_H,Bcߌ_Fhx3\L|!o]*$Dv)HZ/B|!C|!Uy%!чQ;{_ 2K:򥄺kч_XyKm&DT~oo1!KK|%~!-u<]'z/ D'}= -<k&DoP)OxiuU[ģY/\(߬7XK5s Q?_ZIW"Bчgw֢A^_IU>ϛ$-v-B.Iÿ&'$JzE!HfM;T^Ay>Ò?/e_wu/5?=ާTGZ[g5.0<>'c*o&D-c#m o }>6E̟f (OYx7ZRZk\A_gO DӜDyPWU>_m>*3~35IPy)!> K }C|%w%=da!ҟMg_>Պ^Qo,c}1 Ѿ?S7}EJ|b33IPy !ϟ/GגQ:Bo|aK~گY* bhל/?򩄨~ТO?ML._*+gy~'ӈG+Ѿ&~b*K{G?0\8Bcjr7cf⡟ϯxB-_vh~k;>>)0{ \{gjd%Tl8kQ*. o [H+ /ȞL*ŵ;fK]eOJ=]שBE:_˖]IN4:>gZ_1SqѴR}M~)%؟M VW('_57(bd|#~1!\*qq̕o1XI5_EQŲ|,o ^jѧᲗ7$_Cߢ+ٲnWy1!o>[aù+!4w w~eVy"g EZg./+{$u|"hчN*b}e7*iʋ{E/V#%]ل]-U dr~ ݫdbaʿA7A: ~!Cb?,q_>a|3sQOU_&7o9Qy5!ìQ_cG\C|b-s%]:BoJzE#~.!y#| F o$zB! |iDEȿJÿI,Lk!JKpٟRrBk_5%cc*_K{[ķ*9ξ]mmчۉH6Bw fIo-"~"L턈{?_bmnI!AIK%}oa?@|DÒSeGY2?NrB"D1!><?F^B[T _~jBW!_@A|#!&BW"~-! 7,E=Ϳ?P]y ۔7~"*MaϷ}J|,&*U9 KEAz%d%/\*_JO/#DY_,< 1~EQ?͒, qԿr|!Gc9-REoWs.Py !> Ⱦ{N7}I|"ο_.%Y_pP:BGuAq+mo+bhoTP'9WÿˈTq/ٿܢɿ}_,Z>_(o9_<)ܿ ,:QIW_oч+ߌ!WIϵ(6k,/\TD%~R񳈇Q\n78I#Dx!1>qr̥N|7-Ӝ(Q>${7$ݢيh_/dGB|"֏&^!U*_@{wZaU7(r|ZkUDHǢ%~!u/&+KMNK a).z+_o&~Z-.o%nKq:Bo?=ecw8^IWlEIEO|"6IR}Vң*o DG@| a1?1Y*_;3E-q[qo﯒PBD?hч'_9?GIFNb~~"~!$=mӤwR?Ki泩,|Q'i͕ي4Hjhk5>rϒtj|-iE!Vq>#i a\IM}KE_23NR 5r~!5~r'Jd?"ģ0?;Mʽ35: ~-!NqP?M_M˞-qPGs-2 aAʷ9G+-S7[턨K~-(rPǯRM嗾۠K > |_]J|!//?7Wy~ȕnn++T"})wk/})wE!~"LK_]򹄨V}_gɟ/ݪBOӹ-_h fT孄&IzBԿ. o )Y/oSL'ܨ_A#WXa?JvB_I~/Pit/&D][ R~毠-:S~~;,g+툤[,E^_t QWJzE"~rIר|!_-%}ؿܿ+:!{>_G|Nb}>b};/uI7Zx#G/Ϗ/C,_foܯ<*IQy9!ՒkP"zW$Ѣ'FVI}ؿ͒?o%D|I|E:}U@Gw[{}3}7ߩ<|*]$=~}ZB sG_D?JRd~'_Gh웱›^cE廕vHg+YI>G|%}Q q>zE?_|<_eI_/V?_U RB,ו?'|.ے%ƾ?G,]*E7rVB쯿OZB$I_O<[G=_s~k/!DG,/UEWT[~'Q ~+!ǨbMǧ^{ي<>SZa_(ߒRy=!Ƨ'EE"~"_#WӢ?ڢlj_H'*_CWF[iMń:?SRǍOOWùKI|EZWB7GZg5ZyCόUOD5Bz~#񍄰D|!/"~b3_JrB_F Bo&~6B_I&B_EE!Py]|[W_YmP~@y4IY6|"oyR=}fki~˓2絫VIZa4mtWvI;->+y~@E*_C>_d ;|k a~h}ea~!偨}*/'Dt̢PCyewТ_XK#ͼ*#DuK<%D<H{Vy!;䣏[cھ&Y?Vx?W#/%:pI{yb/q¿*o|&¹?(žrTGo"T}Sk7}v=.~'#OxZ^7( $7?ÝOVY۾q T^Df+U߬}BlB.?o%~R̈́7k\qfoIwjB_K^cu'+*8I̯}>{?Sb9_ʋ Ѿ|!>E|aI}ؿd>zBؿG?A|"Lyń?&~/y9%чS9Z?+ɿ/_EL|"{PWUPϏ"}UYpyRy3!-k7!E_KmO|C忯 r5*Hh!Ò`ч?Iq? DZać1>)*/&DGmɿRJ}v~JH_TS3> Es?YxZh_|"pYaOUlל>"BE+}bEԏߜ>ل}ǢO_H?[i}jj|m#D|4ǢoRB!}!qч*K[Cۦxob|OB|$D|I/#"TO%MXoȿ/%D.)/-:>^NPר%{}_C|b-ש,gvSƌm/P\BILoQRB̏%[):E׆sek=_y<](b Uߜ]-.1n_?.U3:&%_H7o$ˈo"ˉ_{_KAIo7j@~/TB/aIGU^#n}_X$ƇcRy!Ƈ+%آW?We? >W57b|p7/q=yʗb|{`o/^li_oy/vIEՄhߗKzEo!F^:B+}aUy.*_zIoPRBJݢ@2Eo~;7¿Q%fIwYxߥ&F 1Uy[6nׇoWgM|!{&?G쿟B a7).%!#?JJud~7'o#II_7k쉏$}£}?/">><//ӸI>?}o| 8TB_!~"ﻒ~Iz} a{?S@ҏT^I>Ȓ?-lB~XgW"~!?+_$)W~)Skϵ#?]IS,BoE?ۢ#TSBU7}a/7*|Ì/#~)!Ɨ'oVlUޜ]?UG [ɿ'F"|K#wb~Z}wK&KMoQAK#lK35J5ZS*EG?]QӿF%juXag)b74VՄ~Ε4ޢcQl$,t>hQ&B_H"ťd꧔jEԯ }a?elT[xWʿ hK|#!kчE7F,-k#~ƷyhGU |ϭ?߭m$GE$u|"3?tȢ F tJګzB~>%~r/kQ]*_A%Zah?S?IVB}aے?_-ZB?hz>p)!mەI:uTҕ*&De>_I|b-՟U^G}ؿyo3\+~/"_B'~b 鿀h_IBIwįwbI7|"ϗHӢE~^*e*GY} %B[|a7b}"QnTHh7k|5V/&Dc}+oobﰴ/wjQyԾotѾwIzE&~.!$ݣy=/ܨ^&IBEƿwI_aߣ{@ZxPO OQxTǏ7EyGy">5X<@|")%}V ?[goTl!跐ɿ儈/x/ΏovO kc]oF^J$Cߜ.v $HS|㇒NǒV B?g>?L|XOU^B?EN,2s+}~_N#T B?[OG?GR5?e"PdUtBcpK&d[Т"BÛ,iE_BY_A[iW_Hj݉@/Ǹm:>xB$~صdn.Dn M ߥ/Ul&BA BQIߓ2H_t'?Q].W B_& >rÊ>.ԣrB>XU~|`@aWMfpHu}dc*_B먤,t~\pE· Wp"V_M|~_. NoBOUFs[-Bg(:bIKH7IY 1~Go&II߷+_{W|!ϫ|߫-Yڇ[߭Aڿ.*0[aOUE7&IXaė)b`p*&Dw[R۵~U^'>4(WQ~WA>Kt0=ާ({}a}g/\GU^_WptHT=ʿSKʧ~?!s}$~?%*I}G?mɟWXė*$}IU(A>Պdz+_{yoYxKM#c]F>=o a'b~)Sy}3Ꮹsgb K $_ og7G|!- Ѿ{O"D|>*}8pVy)!2J''Qy"o/bz\T>Wϲ#?Oc3>!*_B>ek%=򵄰>?E:do!}R[ϢJٖf:A T>Pwϵ~u1l|alKEğK/:~|Hy4~:ݭ ($'*ySU>S$Ͳÿć  3 u|-Fϴ ~آOkùU,ӆs믒W?ԡy.h5JShYKbчUOWOL|Țcf Ѿ5Te]BJZnчuR 2JBؗ1stE?+k *"D-чK1e*Qd"Q83c|1![B)ٟeYڇù ~!w5*o&D^-բߢJZ[I[3#$wˏha#O--?oGoSx蟯GԾAM. ~*!Ɵ$uT ?;$REvJÿ]O'K$]ݒXaRÊd?bѧC ?Z?z})z. -|Sǜ^IWXx_w# P.?1~}I?y) b!W?Pg!~2!JNS1_+ }wS|*6>OU^C_'V(E*o"_$fo ķ)v[$R+|aw+^G_#u*!,<@u=!MO85{' o"~"y½YU^D} ńFߌw_BRBodg]"۔P]Uy&3w[7-h{;#}*J{->FP 1Ⱦk-Ag(Y|pϏ_N2__џ#TG¢Oo!Ka3>`G#~y>o-!-m%DB:BÛ-c?s>wG` Q>b\6nOX?fE|8K|6?,ckYJ_q WUnioo]Ӧу}y|ݫֺm P YTFJq+}+6osT 0\4ku3z3GgJXmߘt]R!mxIQwnlОj{<6 C6i]ʮ8غ: g-#nWٳ8pz}^>$8M ]d;7i㜠 \zɪ +z0T4l3!gY3QgP_F܈G\K4J{aoǙeoU]Ý|@y2%[1Ýraxsˊ-k0紵^ :X2=PbDZXx$E':tOCzjIܽ}='8&n88:7 [VoC_O 0%eM[A2ٰ|yXs[jThmUE=7ra٧ypϐ l6n\նm8Đus Ĥ9}2U #h72@#-'_n Tɐ2>mFeGE0=I3Z!Z/Μ rFD\l>c"TeAF4٬ WD6mhtFxs9WӲA#CaF߳9HNn:;3b\73Yq:? 3Q7;TS'>U8fF. O=%=}Ϟlw31x:ӄ/12>N?}柫 쌽wLO336ɽ'qڷu]a͈;rڇgGgG35֝!_":c3dp zL67t̏_gw?͠OGODϐ3S|彿mOL9{/x=x*zę:5ɹӴNg*۝2T Whm}HJΐG%٧;Q^ryiG3h#vfj+NѴ6Γ|_.uYJ+IC}@_|x7@oggo/ɁzwW~{Ȟh7%azQ@oH@WGxM_+3^+}Ec,kO_\7}{):}ϥ+<8v0y棋FEz{|}S;" iu09{}5sv/FJ3GLF:LQj:^[PֿȾ5c$]={zz$2S޲}KWs@÷q_ʊ*45_c6FIcWC4 Ѕ2c`KHwoϾ٭k7쮞("mJ,S7%.H-cZ;8ַ8Y:CWDD722$h`\d)B~t\;R{ߒ9B4*ow+h"s=ѾC]Eಳ́H_]d<_5Hѱ?qLp^HTŃ2E;͈TGtG+=JȍJwo I߅St}#p#H57a*_J72./}K>Ae ۵oRo[)˔Cuf`6rҎnX% ~!zRzdA5;o\բ=ݻ;?I oϊLAS'L[ sՐoIjI%)퓗C߫q5}}J'ߩgx,>4;ia[9xf3}W7rЗqn_dZvM; r쩩)z26u֘-_}{C\$6ڹ]ob])ܞ3#~GևRVA]_o4^3QQE?oHNq(e8=Ƚ5Sb7v 2]"4M7m-},t 5⬞$wЖۂn`Ve[ࡁpW82님sehQ,(:z#3Zwٗz—%ܵr8eaG#H[Ϗ݋|ǷnSƽ_1^2q;%J5Ȏ9"#qVN 8^>׻'G6]Q-^Rn+X!6D'&`¾m$rKᐇ"߶XHRtv +{S׷ 8N2wz-Ca{54pC F{i6^ݾO?'댙-Y3|~bo2f9[z;ys:S3\eisirD>T4X$=oj Խ_S:[ԓMZ𽕞rә-$یCj>3IQ{J<3Xf޹-KƑ6ˤC*7_3عofу3o_zk3~jCy6x{<?r8*Ktq7>t@~ϝ>V;J/}61U>>{3 ]0  ǝ]ʔQE3yʖ= 3xg8f ?*v=^>)[+ن̻k0hgwzO -Z Aqy8 'gƜ;;p4g #Z(LQnľw> t_`a|9[;qi&_W 1O/k /uzy| xYQEi;hUOh[SdF;ڣюo{+jwĿt*,Cd 2X8ى(6ѣ]{#>s"CgٷK$zN޾Ψw153 =ی)Ck,7G뫝8돮4Gt<%]ĸa^{d,Z0#E&l;_9\ds}^xZvWAE!B )ƋլBCqkz\qIl:=//N?'93Yd;y~Fs[ PaJ>^'26$ӎAW߳Ү\sUX>wJj\nW1`άq6%ۂf2O,%@ ꂶ!{47Bp RB:gS}3pڶح6km5ߘñ*0tVN/HBDX5)d8`1ՖO{#E[!v|-Ηy#+x ޜbi&Y\Kr:#YQ;{jNMNY;oA=󦅜>jG"D- (ӎG!A)`)(~ذzg+oe.eKx4m9l)H\X4>nd$2 gV F,Q:f\$Ab][1N3$%'ʑ_x9mnO>'Ƨa庭YwL.K_|!/bŧk$KW#Go\ݷ`J{xWm5̖km5-w287|W±DjBsnB̛<kZ> &Z^J&2],/RRnlU1IUU BΪ$.&Hs /cykZM|mgp q'w^gJp']EY%|\b؛iZ]ɖVˬ,Mlp kӶ^{MVZ,_zI|ҶĖwn)ml/ V ѵn)VFpi")vjK3N)m.zx 8M%FF{e-YnX $B\[)Ml"JSû hTIM,L JJ%́']Rj%NJ˫dln)왶}d5L kDXwՔu5HU'4įW$&-:m[-H]!r/~U/[=|1^8(@Ɓ[C8J8]vn4 scnΖ9.MC>q /0r8f>ڿ6B.th "B.Uv.UN'50ʓ\sㅟ;w\Ըs-&%[Nłg~`Nn~ -I-vvtdw.D\b"ݰب<t&_cL\m=En1EAoԑUKVJӪgXwY4`KǍċ,M' !>!rJS5 -.|| [>.b)iSYU65w P|3sµfkI_7z CD` }(h8lX=p+om-p\3X)Mlp{ӶcKQ>߱%}|KtrGգlS2"ꪐ Y?[#wAoH3YjnrˬU -MY`gmtuƃ||H3N4: dNWUdnB8avs}WkC₰t-wn#ͱEf M4U>F _jtNbC'"Ů1k'촋6oT7:׆t38>xaͭ[i{H-YV!4CVJ0["ęfJS0\axg+b l=/I0_ ǯ^:3GҎft/f[ﱴ%B#V>BW>2+oi&I=sa=k#3WZ4Dg~ԕC[+ӎ yF,YVϖ~󭔦իF-YV_ɖ1GҒi^BUXpG׹MuCI~aQ" /KmD5i[}1["[i zȵwک!~}jlfl;ldL>*]]İf%-KҎsnӶz["rҴz=["r`x{ S[.c~})_k$vJ]]iGM7&+MA4ܬI0_vʰrxUVJ]FݷW[4͖#|Hua8&Ne_噾׫S>q5uO~Mz'~D-w3u㤚y=I-c'w[W&[ kWp+}kqBܯzҴz[zJx3<%v&&=v>ؕc ` }GڭF)a7oLa=oJlIsJ"c X0UƽYUHXx/)j5ib^횃$kgXox]>K>0?C.o= ӶVDXDž[OJVOAfkn:G׉;FKsnDXа~h(_ブ,X?-Lwy ?v>Q̖k [)M%B򈕦`|~aV9xo#zW^r(ǧ&1ȸ3X;2[RX{$amM2x΄'͜O+>ӰF;-ٙQ.A ` δͻ pwm=lFX4~bKkjm>}X1t|!O9?1qSOLl`;4c ']cAҝ.rr=iG{9b~D *DY+H84{B*iRߓcܤYyeJ&LI-SruC =7,] >c> R}ؒMDtyPX8{#x  ÙҪA83e'݊:L9^nM׊seCszHtD5OZOaG]IG3+='Wi-+.uGI']Gb0!wŎ>4Vo\^f,:bxYu즣&>DWp _(d+F}Q)ؚn,sdwg,ܒ ΎR#Kf!Ur+xi'SΝtftbN!BAt{QPgT~@DÕ=ёXJhibj17n+K oyw]2g}zԯՉ=%yNy+&@rĖ/-5z-3cq=u3Rʙ0/.͵yhpSZ!ؠҷã{R}ӹyaU "Nb|"iSrM`+nYxRðF˭S[ub#*K z ]1q&e(ѕzheH-d$62b'N]{ZJ竲 'f נӋgKTڎ2yv̯ܶZg:4rĴSbV XF NN!e6mڪvJlU+4PrRՊ]#v#[/p_fJ'•t2m_45LT+H_y>\-B*[v7q4iH?0cS)Msr\s5˲b΅cq*uQOXwؾ؈14X<9UpUiӤ~#ZQYja2^V^Yfo;+sjfoSU}Z;|LHDXRUEsJ ͒ZWGbc!5;2+X_z>?WzNe ,y nBh863:Tx{nlRDT 5c)$tR)6KGGŕ sd WSQK,z1Z;8p}\Ư?ha0}[BCk{ZS]9z8C S>tl$/5GK2)l[72?U֎ Z5ǭ\"2ijkZ)tZ[=プ9Noy|&ؚO5=om2/qWܧq}`'Dwmla+}d^+D|^w(ʹ001f,F5ҵYTi,?υg~Ӏ]u=z<ʼn{3_|Er^l惆}Ο;<1nwa?Jl~*]~%ҾX CV Pڇ<+_XU_ (U_(Ri55\n}o57Aւ^}_ɿ z(f@igrerJ5_ ( @?ȗ |-?XPG_i|Po+Ӹ j@JTiWJ]`XGve4V@>b&V/-Rܬ# "@/aenH( |> <PP_ (qKWWO?uqTR>7/357#odl6Y(5/Hb ,FߨOy$_(AF/_|j/=|) 4V=_hx_(w2п֩ Kz^_o^OJ\ne߇M~+_¸pUZ7/a~67۰4l@V3 g|MX (w;y|>&ENK@.WW0Vq |u E!ہw P]fú^9ѣcyPRF`?|. s8nh/\>z-Qo)z^,_(;叩%8aF~>ҧX^(IQ*}%R_4GK\s߯5}51k@ﰼQ3D7U, yV}I3O(#N<P/$OT=3b,[2JSB_P>bW -PNS?{e}LCfyPO*U/ |%c-Fy߿_io^5~4i t0JU}O6K}4 ~ D4b:`˞b&n}? R@^f9WJ8p.#~ P;UWj-8嵀_w> :3[|Uk?5w@b q_ч'l6uŗ_KF@B E2J#Je>JW}#x8/P҅,Ea*u,}Ֆ }<@?zJa#._|oJY^ (ݤRF_ |*߬ч!YQ?!j6|=_J;5 g~3[of WdNo/ujN" ?K_k󄲿@_~/fg>T0|@KX(wP5b y5ǮC*fy)oa.~%S/e|~c=S(J|їjg=kn%/qJc,_(èJ4b Ō9`\ b2@ʟb8ֆ'T!>I}J@_xey ߨ<r*( Tz!˫~VBW1ցi@/K_xJixѿsQȼ; /3H~>W?bbF_ (끗03Y^(׭16#Rہb_w H< |+Oҵޭ@~ W)xxof1gl@Q7(~P!5Re\ ߦ-モ>kw_ws|{XGY P(?KE_P=*=u(>2J_K^FT ?җ4bC13@_/?|#^_~LOPG_zF7 '>YPs>5×49oe5Wx7uJ>P[*_b|X*F/}ғ,/J'/bJ?byP>bGW1b|3sJG_\S>\JS/BPK /3K' \wa= \ߧT~/3G1/‹4I+8ݵrdr[ ݥ-xJ?0 >OPw5Հƍ &@^ߢ[PE%^ r|ϠjӠ=,F~ |1#/*kſ\sìO \O|ca`9KTkY^ (S*Fy~O1\z@i}ɿy1'7 }p^/@Ƹy;T_g%V瀾k5|=g p}TkXPw#e'^M,_(TjM/g C <PG_hvR[/$>Sq*[5 E6Mv1ӥҵ-s(5o*bRFX/Pj *a @ikÌ> ^E,/{UR//QO~.ViI2Ǐ}>b?+%>.Q鐆C_(_ |QޣqyV^P:@_cPJΧ'IRqq5Rˀȸ rX(WiT/ (4f@)gPAkǡ#&[W+y5ca^-EZ>!\_|/SZ8] ,_ʈ*=n^NFnfy>M*=7_(+Tz}d$e~ϫ/aWZc"}^}:#R>_UË[ATmqvſ7j*Fx#xJP{_( Z@T_ËA[5!(=o7kr-gH\_[|!/aFx~!>|@)c>b₟`y!#Os0%p6_*=*@18Ռx}Q>l n?˸-pַY^qβ,F~Jb"FYPJOkRưU+sh}WJG_C?Ԕ~W1Hx~>0b2F?UJ}O6f{U 7Z؟|!cا24UP>Z3/gTsXIVJ/_ø쟣ҹ,_(T/wJ籼wh?Kub"T6@|yeGh[Ԙa@_jH/~'ԟ,H]|h~QY^(; |!#ܟ{0Rq+A8؇WN/IixRX^(_/{ p;t F@ _BW+[Hx>9"^ -Q}2M] >\x F?4Ƿ 䯸,y9שtWJ^/|. %O8?F<PZ,BS,_̘ zn5]-*I/ |>#/nS ,_ ({&F]r@~PGJ\\QGjJEYP>ޭߪ҃,oF_?|c'C*]Roo?@vG5OcnkAh??'̆y\|1#<JØ?'5RcO gU<˗1TF_0#}A/P*=_J_ayPYojWdWUw!/__ xŅՆFio[Ko]cw~}Ro#幌IGY^ (R}kKe?<JKPOҟ4 Wӟ5_4뛿kodGHϧ #cF_>QKo 0cF퓮͗1UR)_ʁ} |+cs kY,_(3}%YeEsslqJ4?[9>3k/ _F}[A&_MFjXe_j.(/g C<Jr}~&XQ|F)6g6H˸~73i?ZeT2eHLیvoPƇM˳+}U{dPgߢ?elgyQOUO[C^oUikoQ(w_ Hˌ]*kt)QUaFG1w!߽*]b@ߋT/a٧WJY8RKU:Qe?R/[}{|~&@Z~(4^|'`T wJ4 #D~㿝yBx3J'YW` /eWjq~>z#e}|@)^WZe%VE,y& .:W3*Ž5>$^YP揗Arl/2^M~&ܬ+4gkWq|ӽ,@*?kyAx=Yv^tקoTN#>}Jo;_}Jw<P.}&q}zE|~`y*=ї~%\Jocj@o~ cXGYP?/QǹR?QC}^eN>6@|5!(_;}Aq, 1_['Oi/fOU49>R@iϪeey @//jU˫a}9O75Si!7 TZ odWc^f@}~&/5EKA_~-|}B/_ dQ˗3b:2s8S3+XPC52/ )-fT?ˬ>0`dVX>Y"@[5_ ŀ2SZ /_51J&XUZSg6i%W3hPi#l5@]bqh](.]?[|!#<].;}.W|yJ|){U:QS|]~JSO/_.ay1A} 𥌰U啀~}~|ؿ4Qn?ME Jq3/E_q(K+μ~=Fm&={LË1֧{ ſ$_(<#brB~>/~ kaMk J^ |! 2_|K/J׳0`yJ7j~7h1n}n꿂}5/y-Ke|yJ|)UzF_FٿPܭ*6@)m>bv07t'{|_V{Tz#yD_rP}2Pŀ~)}VQQ#}Qib.@)߻}{? W7rJ|G_U>#\$_(?%G/$KeDT}> |>PybV_PI/aSK*}RV}e#WT+e'4bkW1S5D@ohʇoCJ}4'?'p/?W\ϙh[\;G%Ϛ&sI>;;7ڶPSwwG{2b'Gxu=]ͻ;vtjn.b,V޳Yrlٽ{ס]ݻm;Ϧ4j֚Ju1ϟx I8:C<:7WʰcWgn4OpIlߞPvҤj0պ _U~M8tLR*NMТ }ɿ v+Y,%θ)t'P2傉s@FS} 7lӂmrsɦ9WVMꮶ)12x>>g8~?5Z~&;LA;5J]݇[wOXg+8fvp"O&&PnuٿŪ[*g "*S$6YYҩ5u{wI>K?HL>,kR;a/䓵_Ks>kk`xf36Lհ3Am4:*r ܚh&h ?=]5fjݞhڥ]Lfh91<&3'g0alLK ɈV\̐_?N=KA4Z_lPNe/,\2Us^sbN9[Es:+j:l>>;&{=>eA`#i_uU噌t]CE?j4ow[>).'i&姂δޭgbwlmh?QLpy|gCr g^95>#晙R3*9Ν'Sw,6$=# ᧓7sM,tn{ֱyw PGG8P"3cnH<: 7F_ؑh|h0=jIyQ_1R9yO65G)}X:p[5b#nfFǢ>ik^ŽTXq>fPRaf@l$ޓz5?y;Gz{-)MYgs7>C-v p­8閄cntcυi*d{uk*@f'S~N;hhxR gVFݲLkh'Tt̘WAvc9De߆4uXː]I:9(p.P]{Z}l燇U-ɰ9G:EyZov}8YIȄsb=1X{MwNv~=\t$<^s2Hç KᅵTƎFuE6? G{{cGW(yH_EұLjbܧ2;>3:5)-Y\X>q%ͤg򋇔=\x3ۚ<뫴y;Fy>V燛cGXyx,<:DOF?bvW*Vt,QkhvU]c`ŕlQV#ZD{bXg4F cCa8Y3 ϐۮGco](53KPlwVOّ pf^`5D{ciRwsǤTKJ(#H]GF8:yNJWX)'pGy=74bf-5G)NtA5WgK1w2kDdh_3Nnnb0Cg'1MX wt~}Qb/q O"B{ %=%t;P&g:!s$\I{7~.ws_-8o,Ƕ/̥tSq=X[f=1gi9A:g= ,mtK/tz:m&g}y!`|=FB3s9QZpڪ!CZ5k}d@ =mX/fm&D[xoN8cmrj'N{vBߙ]ȘuUI9\%|\չli+Z)Ma7Ӷ-QZ 4ϖ[)Mz>^/JDXu.eK|/MFp(7<|!w5|uڱ>tgDzo>dAt/]evig5W^;4ycYu>yq+~W0?^8p}WkBT-Dkge x#K=A8^yf̐˳mei@ k7>i[-`+y|Lɸ&eκ-q JM|`|_|M|9+Zzט`"6 B)i\;iȘK]q-u[_7yÁ']j7aySű9&m2تZXdɞ9-wQQ̭D.RVHZJ,YV#l%¥bXi bY0>((U d$.k`pș!Ozc_}mF).5ъ[)im<6 g*־or0[*ʁO2Ա(ADEBG9:&]r<0tVWrq=2mlp˧$"eĈJD Nn|wC󹄋-r$C kڰb7Xeζh 7ՀwUq]E(|zVW%‹b{UVk!nXi a8kZ^ x_pܧg(լYe.ԌgBod{md3KMXktb=~hG ;br0ZGSΨ 9€2h`]v']cXp5פmw.mwz+iҶ-mtF+i-q+ݘMl/6Y)M#²Ւiq;ݑխlPrִv%J>;ӶŖv˒i7+Md-a8uZf2}\"Ni&qFO}ğ7^>ޣY<4uq.EIkDop^(.cx1sh<(I.&#~ѷwTmҘϠ'vXn0kkִ;|aupn>6tҴΖnaDp'= #YrBQ)=B{|(>hlU @HbrD8p4v x8oG4%YpM]i[ޑ՝ligӒiGJ>俻dea8ŤM~{Y.{4W&LՆCvjtDY8ϵ|Yԑ2iU^ƽV:}cipWz&vxhT%u+p-/9_~]ƅw?#vxqW^/oV^;_#l0$=9btw?k=6> ~y3H2>IMVyp{lP]Pߔ?הw#ȦRBxJW&e~^wd\FCL/nsb#7y r:7EAQ՗*U$T?\UZo쪤*&ژ&6VUK azKY! S?_//>=?ʼn(2 v_X|EʽʅVjſ )r;\_Ƙy>C} "@oK \K|ſg}s'[[r@/ |p/eTWiſ|W2րE G}uM>f@i2}N1gu PW*w2^ k^l}~g?LL.7_(AmM5Tڮclɶ|>b̀d鉅-^~3_|͠Pd~4W\|5.k}}}m>xE,ob >b 9&b?R;}W}>$G[xѿ_μC^!3"@a^+v/W%~F$}[F/ǀ/cqK F @inJyZxjӫTzye^|w5y1*]@ _w:3Qk—*lcy6ˀ_ĸ)_,_f:nX sJ7PFM^җ &QTWZ/e#Fj%gSJ^Ok-1Vr+e| Ռ~vޠ%5|oT>ߤҝ^'^$ԏ |=_j߻T%P_~>2>ݯi+󳹾 eA6k|-w:@s\@=2U}^#,| Wc,_(@jxɟY^(!3ra>N?ki?i8~扣m|yׅ/'\K{ |_Q4e}B,_ʈ dW_{2?R}CoPA/|)#^|j@Qg*S}}OOXPrl?TG^7c71JvÉ_ko~/팻P=2! %7/'?WR1.#=*@)?_(?T:z@aF_? z@?2hxu9A70n!^y\ ? &v311vj%9P? wPE?穴9 ||6@)"YX~o!j Y^P׌}? z@i\4q?&y>15y~!7JiGb[ˀo_ F"",(U;j(Oj /?j53G‹gn^q֊Y 41/FE_qCWs3Ծj, l𢿍ż /3HP[yԅ^J\FC42_,>PŌaUow<==~EyǁHeW[oDU?jyɅ_(3BEFy(ǀt e9 N@ k#A XQHf>aI61W"JP{5bE1>kb+u_KTU/u>_b*V/Pznd&@|oPU,o{|p8Z4BJoc>p޼ZF#?oQڗ]T.o/^WsqCg{H|#_f~Jiہ3=w %V}?E?һX^(N}.Mp8Ow 2FT/ay6C/2a>²_*}Y/}0\<PThǀcK>W,/&R"W2JUǁaT>~}p~2Z@+5o6_i,_H~J~c!Fi{,/|1c.}~J*UkUſ'UF_k7jq||}/YPJ_W}l_~"@73Fo^+.7W10ց?'_4_Ǹ Y ekqܾվ?YP5b0OXi} P? |1#/=k}F#o0| #o0R&A5k%L1B{[<~ekܾfY䟺 a^uE.r#a\=6@|@TK /`, 5e3N{>𕌲AU栬Iky}TsjpF__ jF5@^,oU kſ0jpFO7\Wp e_@)(ey hF_/q;/o_'0?*72bUn _jpF__ |+#V_uJ=MR05ſF?M_3ſ[?KMËm(3 @o;7C@ P|GXuP :F;$x5>` 'K+μƽiFUـ2~ 4v);}Ks gtEOh|G_Θt>ke0~J,_ (/4^qqW0+bX(B?kqM4U_EyDSo$}RZgג}_5F⵹/"K/~p}|F/ ņ{1Y2zKUzaFrO:n`j@UI/o7j8ۿF@o PWj /_ koa_ҭ,({}vhl Fo,@z3/dix?{NJ<PA>1ަ,5t |Fyˀ+P.*@)Uz\/j{Uz嵀|c1n?ao|k>G}c'ݝ$_(Enf~%W ~ :=|BFڢ1>(Uk@;w_|3 tm}[?-=4@PoNJZe1۸H~Y(3~2Fi__PW,/Ō`*@kʇi8$g|~ϴw /kA,ET<~ %ng}"B@._(nL#,'3/#4 xOBU%9P?J0<1f,6^l$}rZah! _t~%7r#B@ߛ\[3XNkej~ ėVùw-("S/m>Q ũ9'v}ߩoUJ^| _ J]^a8^.E.f~5վ_(]ù =| J^ <{({Ucy11Nhk?%gyJ#}>(_R?+e|\Ao4p8ۿRCuyL>`z@&>Q*#i/BW3W[8c_jg>@מWXrU̿}wwnޱm.y~İquu=]ͻ;vtjn.b,V޳Yrlٽ{ס]ݻm; v0jiRyx vL8/Em)#OiۜigH+ucWgn4OpIIZwSPU"vy qt ^p*}c{OR/Z g8)nLS[w>b1Q8JO5.&㮻!"`Yҳ}'sYj]?xD[ʠo޻5C`.][?p- 3hsah,:siȵ<7e>6t'0"|;VRt7鎆ie VW,yzMMS"x2QX O8d'բ) ~ :m4:0_Und4~<ӑ=ݻs!|e*:)S 'jWJpwA+z ?44q04ꋏl":>6eKϙc`Rˍ1p92tc9DUl79y&ڙ DF'3{}g%o%ʜbZQs+Nv YIEO4SǺYOjεg6$繦6IǼ^ݯN&{6{~g?AO&Mߒ#5OZ0"vx*OmsvlPȐr*OVzf:xj?AX@EUʃKQ1lsFGb'?T t'Df9ywpou$7=XǨѱ`a;vEHw$f<ۮ.Wz=/@gmqq`8-9:~ UwZwy9_ |koHs6,K65~F^DxΙB>nRwp3&yI}&mJ8xJ!|kΕД&({-b[k$~1q%10JDU"jsĭږqZN[-Hͤ?urPt<-D0.6F;pv8.>\ Jo$~,p> :VJӪYK,YVݯThҴ~ iἴdJ6|ݨOҊvvj<ܽ|*ŝ1a$s+Cz|\OԬm.do& 3\D/YI']j4OfI=MˌįeVwG'g+xX'xIi[OxM`O"k,krOR1 ҕ{Wg+/.H|sZg: }Vwuڃ4wuT;2> w'w`]~|ݾhJ|, SdR|7%9n~;;\>,veWpvyxἩLL^Ut{2t9p ]>%tEZZ5YǗƃOaDqQi$15l8ox>[TI/.oʴcH|+mjJb?+Vmł=5F<2s_Guc.oS$7,eUJgo jk)$%rڻV8G'  p|sݖ|xxK)u7s kCkG~y>:k:#동w~C}8OF]F׮ |ջ}g"ZUZ:$ˬYRΙCO鋚A!d8;Q|!aRFpЧ0sc swpwKא]E_$T]s#%xӧ)>gηovzGBt{QPgTJ#GcGWDGbcct/n446ۿs 7TiBygɽ{&9{* +tIn %v0lJGlmsUD#[VIIG ]ygR^ڨm"ǹtՐ1$7򾦖-giooJtkȨnkZ>󏆺 Rnҝ\/!r>SB .KL™SëH{JvGK¥yD]~f22hSI:o,OklΐyvwjF Z*_>m߸UYkƠU^('''#%' (KS)J&J`$xhmK`<ڰJ(}i~a3,u{6n/:>x?NDOyѶ'آgpY܇]XnիV_|аo_~s_ (~c7 S)4K_(-~ |>˺E}o) ~J>fſ0aRÉ\/JQ] hſ|W2րEGF_+~|JY"~Jg2Ơ)oU>bi6Z./7~~D_zni\nA=ӹ.Χܩm| G 5kF_o꺍|>b ̀dڒnniʇ(`^>WJPgJ{ fυ*5^k 7>},o]/1?FbDKY (K,?>RҾ1}?>C-b2#q^x~ yyZ(;~F_(3 \LjI<Pg|@ҧqE$ŀ%+AyWOs)+W1OcUzyW_X@72b^@k} H ϗCqZSg1J|Sx,EXT+S<ިҫ4M1ʧة~nV,/ybJF' &t6S/5-UF_\>sUY^ (sJ_ہ/cAWrkeHUz{kϝYX^(ߥ^'~ y^cy#[?ԗ~_gOjb~.7!^?< |-#J?;5OYq]Jfy=ޫ%>1>F@i/k:/ *@QY>%ρ@iOn8*H2/O3p~*-uHkOwT˗2]5_(3QIJ:ܥO_ʈO?P0~OXPa>~|=OU}~2 `*RË_F@鿿~O|+og3ҟXP'3 n@o_x1Ue_?@_O3#V B2J|Xkh:9}tmq#WmF@AK5b&a1*0[Ël | c+Wy47J5a`}D:7}:gA PA?oQ7P 'Xhay'/q^@o 3UcY`A@m9]#q(+.ag8lɾZ2?ϰ‹, 8s }e}I˼ /3g%~q%~_b8?'C* kxW0[䴟8w Ōaimr y.'$^/S0 _ (W_X /~_j5-u16ˀ(/q _|6Nп .@n~' ;J6C#Uz-˗ 5*}HoX~/c|J<P*}@/o>QP @__Xݮ,_ (Awhſ;_ǸQ;YPI5bNެ,(uؿ̀b-*f@|!kigo+ap,v ϻ2O׮Q},_(G_+E_ R}T|#_fJ_fPS,/J_O_(wU,K~?/??)?_]?p'opJ|9?_}+}h}y|1c?lžůJ*hEb\պ'u⟚4R2n9}'/[ï95 Gy˸. jF'UK 9nA5Wj%Re`L_ rFjr+e&ԹA$-}ɿՌrNuS|# 71*+(v~5}o5;~FvM<.?\R(o˯lE PʯBI/7θo&@)fr}FoP|#J[Y(PiF_ |;c'ߦ_.MR]73`J5ſ= ( ۯ /v@ EF/ &@0*}zT|+/ǘ/fǁo.\>%_˿+oFobDFUgy7/3_nNP팻?u)ؿ2WF@E71b]ҵ,o^/]JoˁoQUAK7V@F?:^:F_WZo Xm|Z+A_x 8{ Kÿ*'T ˳e}u'O7#qo}1ߥc,_˜c8뻻UEޣї r<gy>ؿOk0*=5^qw\?ӵ;b#(>VQ7@(_ߩiP/ 65~ !~um8{Ҿ,_ (뻏189xQ>^+.]3*]?}2FO)UJRok%O_(/U,WJ|Fkgei_#_ PV^7]o|>74߆6im}_/?KX/Q|/Y( _1~oY(:/ko_[Hi_ (J6_\a٭/jFy>Jcy-W}77U,(|OC5}<'=ߡܰxџG|! _h\kX^c$"tKy}Ie| )_B,/ e_Iχ>( -P sG$^# VF8R+@P' 6@Cjm2>W 9RTjW2كkO-@'Yڟt+|~DS>Xgy% ߯UWJj_sHe5^_5d^i\(F%nM_$_(kro~3l)!<j~[_OfQ}!UK[A9:0r@o'ab.PjJ|)/k_|%WqJ*N=,@|@^tH/slFDׯą<PJ=,/K=1V^~5+.4FT;p#*Y(uT~3J,o\AhA(;)Ο#P2~jǀ}s@_b^J~k|q_|= q|}1e%_|XP*ݤ^|{J׳<({ؿ^?7A*~of^~3R>p*NË0z ?ؾP{Ks g~CX(Fe~y~w_(.ay1w=0/J{r}K[TzX/>(߯,*=_;JMSzo=#c]Q(WG^q t}s:y/[sI>_}qE[vjhN ˷QZ'jռcGס*.)֨b=% ௙ݻwjս۶S`g * +՝`,aמ΄]Ԗ9͙|[عR';vu6mNYޞu'm0պ _%`G G`gݮg, ;VY*P->~+NYi} <=u{ws/~Sltj"wA4A,Lg' r6Ѿ ljf S^==ׂ&'=񥡒ṘtV.;ŢZi v.δIRf₉N4Z'i MV| R94O-z?!gRL&眝kIp\?%Z1_DNxF%ȕΦmM}udr6-nϡf_59AO:8-ޕ gMB=#O׆ԅٹ)}6o?A]^u|EM|Ɲo y'ftbA Q}%.2==6Gb#n 0}"9mW|/]Q*u~W w rWG#'Nˣme:svŎFG3#с*˨[ >*iV.Ưy5I3'"Gb3 jfOtSHlطyʓHǷ5n '{mLW❪f8u'yaۓWyŝ#щkϷ<GF̐yK8tKBA ]\6r-Ϸ}`f . L{ fL Ho'.eʝk֫ݧkگ zٓ)r.쪉ܵW2RI߆=d:&VOadstht`WͿb<%"Vjxt2vw ]iT S=37gtʼnSnpzB {L6cn3e:sf'g-e.{v XE"wۃXFthLrl qc#Ѹg DF'3{}Co%ʜZfZVҳۺ#wGvuO8>v424f/'&M*fqp6kji2A+mU;2ޯm$r[pw :񁊪$K -y&9y##Vb򳍿@X'o2:<[{L̝;15=L^{"=~bV^f4ѕP3ۮ.z=/gmq{`8sq;:~ګ 塻|2|%tg JnϨ\!$.^8;᜞~s̊VPZB ut,FekV<2hz0-5nGh7I8Ψw_SH:ۥ~WC#4$JbۓGk,e$"p4B5|ёZL 4E-1?M2slW̥tSq=X[f'0y cqކAoǣ_0/p ߳-i#xT1+*i%K*Zvad>4 Ợ~' -x%OiǠ9i9\ϱdSP MWFygZ d,Kէe6۪7nS¹sWq'KC9ۧӚ=4ʨssImull L%plR*QV}j^9VVZm˸d-fҟV^ɫ(Yt[5NاN; vϠ$O 9lG +̫҉f8 x;wqkgiR /JoRPxe1.diZ1e8I2#kY,YV︖TaҴZe$8pt\5%cDa8k]7t7w//eJ:o,@FB'w27۸DžN"kѦCxY3#ާm8߆f\n40H͸JiZ f [i sVrͱNXsvD>֌럏ßY>J&Iyj1 ҕF{%Wg+/|sOj|#*ȝI &Fp;B]V/tE=2{ .·ަN΢ʰ|Гy3C߮81^= Z/Պ|Bp]XFojd7<"S20l+T2rǛ{7Yٿ=}`|>~;;\>,veWw_}|LVL^Uty`]vlge8_=%oUeZ5YǗƃOaDq~/tpcl]&r Ҏ ]k$61ҪMXGvLW$9Qݘy0I^vtpeOt$6Vi=PIwGmLFpCE+1+$!<5M"<囜=S%\{Jja65?am9mk R)eKfĆK_kl[(-O֒?kci4w4M"ɳ%''A%G/(̟&e}%r*yUQ*+W[糵)Wdn%[+[%ղ&eKW0CSaz.%Nd`EJU0DI?)Tˀu˙Ʈ(YU4,/I5˄u,vcXK_tt<(<DTg'*A{6qTٿ')17bdo_~P_M[vuΓ^ScD#T>>^w'K̇JX(`[_ V+`'fȯ4>6mܳlL͖tlېaE\npܷ𚀞_BvW`WNXlçݪ֞5'31lS?hroعQZEs[57Gvhjjם=Ⱥ34և?6oJI6NV#YXOxC-  mpf5;fGUF}@Le)Mebpy9WS.CjU \b6T<\}0O5K q-|2/pE@s8]ǟ('%' Ri*Eruc^xc]WlG? / o>gvt϶C/giff埸# OO߹"{k瘡l$~qVJ]zTٞSsxc+%3f,~FuZ6?q>Ӄ@2繐x4bCyӁ_@yp*3,R[f34pz_Ƙy>C8~@_X-P[/-e>ðӣ*6P f,5"yՀF_~%c W|-W|W~|-Gykſ1إ,w O_|&󙎾iniWPWj1Ok$ P4b:W>Ӹ܂zs]L7\|5&k%>Jf'_43uPTm,(kmo$Ԗt#r (MS>.@3}fڧj@iJQiܔPF_ |-c+E*cyb}4%*]V@G__,g9g-},o>Wqno?;3"@Q02OeRk@y?>-ǀ/_('/+/e\ xN_(+K 4 @PZzE7J|]/x_!ŸPk`y6/b\4ޠM,_fF^o>f^@W/_W>M5*=a8?`#5u*򥌲~zїo~9#oUvJܦҗ4bvP=Հ2FY?Fޤ%bZs'|oVJwt|=70nWX(%~ׁ}(ӃAM_ (uRN /q$i߭҇Y^(ӵ{5OYP}70b?X(~%z A_'c,(翀oJkx8o:>Ji/aߧ_(W3J|R>49_(y#q^G<Ú_ɾZ_c^E }%\ <`VoCZg}BX*ܭrFJOP.RF~Հ?q-#~uߏ H%~4k70nP^7J5e}J;[|;#_ߘ}ſ?qWwBƋ~?4((ķ*_ | /QZCA$_Ouk jL7}u X3CcT`٠|3c Wye~a}CY^qRҾTjxя"@Pe^}řo?G\n8RwFs`E?/a\<T0/`~Z% }1d8j^kدW ֶQC}tm~/T幀W} yr׭WJ J:v`Z@ *C/: `*bM*=w(ff&@|ooQ~7J/הg_ HSxhV@)/Yby@w_e8"]ߣ 燮{}_q1MIJg2Fy>TF_0Jby'UF_ BFٿ#?g ZR/q.cObװ<PUAK}M'XP4K>~幀b*}_/|Jey)w|w5O?fJ~řGe~:@P/hk營A|=߿T<'\{*ְ_e'ҧoTF_-+ 4|"q?PŌ`g/xՌ@ן_͸E|Wї|ἄL]?l  y#v}l^o0ч%."@? g W\bYDlqا4⟺ K3_o84 /[ß6At˗UZwFWqAJY3V^+YPd]*5`_{KY^(9 L//~ἘOha8ۿl ۗ,@ 1/_.'BsWm,5~\\їKr2~+.*3J|P_(7 'A5'_ї+_(T7U7>X |?򫼂b PW\Vθjwo' _'=RVP/4#;&No.of>O(m7JہoboQi+*m[og4w2_/Q/ Pʿ fF)?*no0_n.~3FAW逆~;w"OF@0MRQ)6@ɿG_1_(]|#wJ,o}ſKؿW(Ĉ46@oG_g#$ ߕodl5Z˷N1_ /~+"3QZw/e~%G(ˁ_ (]:Fiznd&UW|ſa~}g?r4, )7WO*}ـ~E˧*E61 c8UE *]/y`*|@&ޢw_`8*w5^qY^(tpU6Uz [P_/jw/@|mG5~ nu(/ԾU1/TF_ F}FoˋeO>|T/V+}b #*}~W}Qkc}~8('oקÙb0v_PK,(E}K뫯@gkq|SfR4wy‹diRi8ߐ7_OCJ@4b/3=O#~j8ք2?>Qߩ}~2%B؇<&)?eUR_7kWQw,~/|G֔ߠ5맧8l 9CY8/ eoqOc~<;Z_fח/cLhJY^C"FOz^vb@)߹W1'ycl7QnZ5A'm<\~ἄƯBY(,TQW rY^(3V}j"G~ }~|> .啀dʀ%1> x_Oc@?0/q#"B@):Wvg|`E2~l~ #_?Gf /o3l)ar@o abT_ `y  2@;Pe@%ߩ׭nj}OBj^|ؿX,/tP/W>~0!t k7}H(˛%.U2~3X^7Jԧ0F߈({DS>?/rM|~?Y/{K^ǹ|!cŭu,'y/K%,_ (^>QoZ{PkX}ؿF?/UJzz_(w9O7tn0w3 3ؾ~\Ù^#,}2@i[/Jo`y1߷v/a_ @)U_/|PSX^ (UG/ ݭчcWSzп[o!M(qvoޡOH| ;X>ɹ a-\3av_ܹyvkֶ݇;ڻ,鏅ɇt5uiK5*X{fɱkf]wtu'ؙJd9Ju1z6Kص3Dxx>ms!%vɎ]Mۻ׀_LC(=Y--]k:裞Һ)Mג&FQnkڶimuΰԏ \ WE)ÊcAϜ4=v%Ѡ_)KަN Sqlphd5⨏bE/@[kV]M][}ULոZp{+-܆kji⿓3h|*6uKɹbNHt:t/ЭX]VGr%#_̎ \/~KCho1h/Q^/kY$Ǣ#T%ԌS'vp>}x$I} >m{c!4æg^x6.5o4g3+8cX]6Tr{yw'qa9 cVXtķR(JPkc1*_12YOx"Rho=/nNTlzÝomڛ 4Վ s\we94KA,|/=6o8NF@BHFc-Աo1SJ81'zeb"N9{tR:)מvs[6MAz'~?p) ϶BOmuLIs,YVR &k}y! _7?ٜ(-8mX"PmQ+x|ڐ8O;]5^XI>װJx%g8w{;_ `Y >m(y"Id tm=+G;9X>֞֔DQF5Olf3ηdSe2.eRP)*j[%k9m87,>jM^Em$ˋl997u/orR˓i!'(pt|/:(hp q'wv&*N& ebK# YEɜ.3Ÿ̒ihI4V2wWNɘ'nZ&h׍yw-c=K렯[ܹrn sݐ~:W^;50:Eɧ W`%ei4p>c͸JiZ]a$~+ !RƯpW^\~JK՘,ZGU9MK{Ύ.zj2f K7iޘ=yB81^s=>⦽v} mMwy(m8_GV ?^-2 ݔܻ\jm. vpؕ]|ve5g:?@g &yJ;6os)M|oӪY 80ĸx z' [Æg-VM`&Xpy:pd]7%XH6bAY?#ĹHr1iwNě-ro=x3eP[Kt')g!޵9 0~A*OY;x{Or%ކn0Y}b\WMuŎDbx R5`,:b'jft6uwk`;U '{KT-ܯE?'4稪0wmrG. \ J GjnWZ)>7fp"KRϴyMm#7,ӹn/ *<;:~':;s6 y[AspCE]+1+$!z|wN2Hak\s34#2%:%~JKJ(> }2|<?r~XA J;8_*Q=(`ey_|23m9b GU?Jjy~8BTªFgէjVO@ٚ*nV7. qfe Ƹ-t\Ud~HlmdhJDS/1G9]E:êUx,&?TL饪x&\zS ۼp䐧X9Cۤy`D`K*= 7 :ySh,4 ̔$u͔gt c ,3N5?3ǂ5niAPL"^r5Uã%jΊ 䙂U!7>o<"e#=i8R/%hIc?lSxlbedx3μCx925 %' 90j/$4NX-h*76H͉] ҡѱǏG+G#j<WWVVRj9RƢXEd+Zau ;Rə.ezहtj՟dͰxaQ%NVXo*hǤS52WNПo# 2#lH#qՄ:J}okjUсxՏX*efر`~ib񞄳&?;0qZ=%cN%:66"248j khj-4@F^Cp^SOOlXM"rÌ!jkR\Z׵/Ts :M\Ll7wnx߰/;wtw\do M33[td`旵N뤒L \!ٌseӿNK2gϘ\H|&i4e6Ӈզ8qb63,Rv[f34 tKſy/c|@<}o!~0?GuiſE/aCR^_g3% ~~ _.W׻UF_>Q>KiKpWubH PR@2327d_(W |ʰneZy(G\m_X_ (~uOcGſk7tF}tW-06Cvomڍ}r|Mg_ۘ}wPʷ%*<@]>n ^KWWOc>+ &1^e(] FFn3J{72Qɣ,_(DjQÌԎq %>/P\tF_>HlТw@i!}? |c-ا{J,_(|8kq|:ҕ, (qG__?NA4#,o$}{/Gc&},^Z}a8^_/U}eocd4\Y(ؿR?7tA@iWhwoMk[͸pƏۀPƏہx>6}K?|OQ@)]׭t-1 ?ـR1l8 `y.R_(P ~% j7E=f\P~c A~c'?|T:ϰ%h|JfbF$[R}49r$s*}倢y|*7#R_?W|bkWOM0J|W }elJ5?"J?(OﳼP?>bہ!/G_C~N*ꟿT7}+35a',c9_(4gi?rep)J`2F>!\aF)OJ|>}O JY^(? yV3<ssH 8EīuD@XrNqf>OP})|s}USi!  |BMgC "MbaX,cyLJ+4b𕌵`F/3ב$c\k/S jx_'K×p.`^\` YQد>PWE}}_|#o\ay Wkد? p/~4jX ⟊Fxml.fgv@_>b&ou9B>4_ UHBvJm>;Y_˿mGſW1kڣ)o _‹3Ai̟rK0KP?/'5>yř" a}Pip^AA!sqViWr쏪4ՀbL5bZF8fK,@i>b-`_]NPy>b|J]m b8xJ/aߵ>K4{/s.f"71p^r+_/?W (?ՌuT21q[io`J_cyWUF_ ; _(󄏾&)?߃3O(*9R??R}c1F~B@_~/|1#/U5#bW>bW1U_ (c<ҟX(G}O럿rܼPe^EE<~|!߿\[4C/ fQo̴^94_3{3?7%seQsT _/P|c%| XWT1|pM j. .fy.}i`1 "@?54b?xG?kP*~a .X W2OBM"_W5CPvJn (iwA.=3?~/O 4ݭ /Ky 5п!@}jVgip+a!"l@k_:/fkUz)Àb%*F/\F/S: ؿbF׫t##75cW (_J V~:W1EX^({Jwjmg{Jw|#}&+.6ob_fv(]*-RUz@/|(*R4(* 6h, ?.!. /b}Z/{BE_q#c_F~9o>Xl8U,/rq|/ڿ3e)i$d6Kv-Wd$L7v D?QATTETpAT>EA}{4)?2o9?P秆?n <@m_"+O ?A@I%>FiI3??Pϗ!c|Kɟo;(W~,gI3k b@w=A|~$~"I%@-h|) RQkRa2X@)a `/6 S `1P7 $@)@+J8{Mr@)@%&SS~,/ͥb/^qkC|Z3b-_j끉1'Pf'?P˷`M^crNX@-_6ث) V*= [|/5u,h뀯7׀}7CI2[c|g5ث 9{K7 PwZ ,}P˗,%{M!Z >H|3%U$kD?P˗lk  Ŗo1؏{D?P_A_/$@?kX^PI5-jm5cofI5X@-$.n=s!@-=OKOuZa^|=ogK7r^k{>Ijvtł8 8tC||{/򽀤O!@-^{M @-߸ǟɟbKE?P Rq`]M*@-ב^ՀZW`@-7q|7W+ɵ 6 u{\2@-wizy6KQ]$75j`$,ߛInX@-|`oX |`7 |T NxQmj}jN xFq=#X%jMr^bA +R@M EWBkj}k{M>75oH-Z~|` | w X})=~|%I~l>[_DScj`?*-)j#j=N^ bA' X~#R@M V/^?P=0ߑ<-@ߓ`? |- sK5ϒ]cF;łX KY36{@$Z@I^6k/?P?{_HugG|'_N.g$?P7P~r HF!%A?`_9 OXI?s*ioaf(&@LS @?k9D?PTD?YY`?Q[*cEeS!YN^W?POE}9`_"U{&s*}_)l9? iZ~\3P4gjM')ـZ+g^ӟ yjP˧)?$狾 Pσ^|?wYWy7k_O9j/Yg֟QMްl:+Wm߳t۶W#{޳j[6mܳ|iUUbm2Mqp{oڸm{O+gK#9ʢ y1}Eja.-R;E w KoKFP.M-4S0$Ʀr ˠ?ک;6SG/+W D'`W|| YrPeUzACLJY~ʡ׵Q!c{1PM6ܨؒUP:xV ;a,pu shj>y] M5ןC?ϴ]^n ~cZjl&ⴍnHƅCvd4wǧTc;Q;ͥ>Y \ j~Z0``'\>pla|EPdE%8ub14ڥ uc )cmsXZdEv<"h{ZdEZ7y-+N.k9{,^f=|p`xzs®HgK[reyg/.׾jTv\ԅ6F:HpY4 wWGbpgH[p}4 7p!5s q; m6i፳I˜B[#hw,ECi "Ho;mxi4 YᾴGZVmiSCTwWh[Aqwm;:#1~9]/uқҤOL7ua*N7(un'pW3mdЏ4 ZGX5m ?=@pLh[ׁW=E*>!'{2 v׉Phow+;~qN_ȓeˉ;ҖJIN FHO/VF3auG}ݽTIm:qzܥ|۟}j8M&9UA÷ 7Y{~/o~sR> 9'ώHL^Q.r=ZG--GZz-\p75EyM"BW6nG 6WI"rZדduݓl)≱r~[zxb7ifK^G'~T*Y{'{\^''JdD<1u]2XO]1>1r}r=Q{ܼk-s6tx4=y5\u?۳xW\5MH'S%r~FTKƬ6YΏ'uݔWpi5KC8XO%Kr?:#k3-GK\gڒYSr]/lJ,ٶdu,#[:r~0h9d"sےWt]0%oJmۏ.]u*+{&XD֧uWy]_ƯK#Wo,]_\S<h.BMpWK~u8aJ#ëPj}j:E$cGߪVoWr?VmJMe\69ѕcG_B/Pطd8/4Q'5vEtP ǪM`C||WyQ1挤+ZiNT<}Ivu귭kK/&jƕ Sӯr ,8ˣȆ꫽^뾕yLDI_).PKtZ +h]PJ~AWJgbF B≚\qƏxK ]%/9;#] .'9)2:_xNF۹WKZsfY$j  ZlMkG|6!W5]f+)kI55Qb%1ۉQ?:>S?~ldP+9lµXOTVL|;&7qγ"=lE 6+vC0§%4 vf[jJpTkͰkX.;Õɯ՘?e |e4/R>Xo`43 Dd2+)ϓ,Ӌ|G)&6;uL,&Η S m֔OU{)Cfb2d_Fn_kVTe?ԯVqt8qm}:T0$뺙`s)~6 n >{2~,9XV]0v9sw)"h?ϋ}!)º?=ޟ(d? D@oA,N7`_>`%O|I+~7 x#M2@o9_+IOeQ!B^Dr?:EՀ s?jSE?'\j<jJJ>~_3` ٢}65O~&7xc)?/a->O˳45O\q,+DP[a>_wŷf@Z_wƷJW~//o^Ɉvjv7e|$D{&lcYWjg?Pw_ǽ\(h9$l~`?PLy_ 5,Q}{P!A]q^ d@5  R>&]"ɟE_ ! I+2@a $J=- 0G ajGC{#C~W j(jgWy޳1z@q+W7 $Sk?Sm9ߐNjW3.?K:r)kܾ(s$ϋP^?dA=_I+IQ_Cؾ_2J*<#_o%>uOZl~@#m/m/,MXTTS A=b[ZOFP۠^4_ }NPg |rOl@4(?O~~f?_lh?h?NxG}*Gm!^ C׾I/}{M 0?2[*)mڌojNP0OcFbjO1 5V~k<!}z@<&i_o^ӟr@MΗKƷRPfVp Oy߭?} <j ~!Wc@-6KT Gx_%|X~]6tZ;b|?P7 nяw\iQYvXvs#^||_$gYۉ~Wgk'o2e( C|{H–>!EZt{r^ՠg=q, 2$6Yk$j yP>ES/MߺI.$ Cr^_|Po/I\~HmWq+CTIjW[72s ..$X 5>^`] "ug<^&ڿ.W_ ?ͷ+$o{ge9ϧـ<5 6oum'I)V@; 0A㭔5Hn ?n$^| In}iW_)(7Ѿ?Drk~>ao~vݐ?\i(_?)7AxFm>^DWCEяgdk/{|_]o}rA+$xJZ΋| Wo=>Pן W{X?Pw]'~'Y)Ϗ~D@_ |/MIJd@?EP_~~ |g7 C/ ?Wp)?r@y8+uW$Ox-'PLJ'_ b@-?P' 䏢@WW O$+@-g<҇{%5 fs$[ΫA>ھ|I[E^ZI^@-=Kq!3,"{GFhD[E_ (~! o~W'5L# p9io\,7j[` _)|ܟQ[/}=4Wr|Ϳ`k׋~ U[M5`?&z(Z Ks|0kۀon%οK|~6$gx=.(:~v_~kpd|5q ?"Λʫ}̯S?ܻ@#*9$&8>v`ŀ/w$~2=$WO$n9Wa7 C!# {ث#[;/~οDPREPe_ G ҾxMUkT^c'.;:wx=рZy'.f@\n ?U f L}P׵޿Q4^p: @m/dצ~Jyow;^_7yI:+u)E_ }v=?MeяE?P^nq=oǐ>5/ | # ~W_ +< @-|`~NX2I)-Z>W4o| -6?"[Ώbh %p??`-$Pǯ_xثGo'yB3<S/7/-~ߋ~ yk|7??g}ؾB b+X<'r@m_'{^?|P/|W{>}Q>^_$R׾rh_/@|h `_#翖48wh󲇽?j(_2VHgk?'/| !|͖_8U>-"w*es-Eryث Oƭgz~y |%8ǁd@΁OT"?q[-c\we.hPY* ~93~!W@|E~i36VkվV9р?uj(_֏# ?Cq(0 2?f_b9?79$OP\' &0xܣhso#/ P"!V4i~iX!A_{9V ' !@{jOP`^J4Zkz({֐>/ l}ߍ7 N6? xPo%<#ܿ 9Sp*p{&p!p9V4IlWg?8$-goEz |_쳜Se^}߰!}|\~m'9bW7M'^bUIWj1{  >zHzEPאF@6G~7j^V3?]:?] ق-^Fr.sus P lZƷٖ\o%Vum$5ثk/ Ha`WZPor$^Z~WoCyv IIn5ث/,LrCzث[ VM]pU$3c`_do+<#$yTŀZ~.'I*ߧH>m9v)H3krAϐ-)$=(}|7jǐ>{!Kʿ P7iV;uE7P\ jW2_1 W]Wv{$PO{#{Ma nG!-?f_dc|G I0jsݍSPy'.d@]ε?v?-/Rޏx2@]/AA?[VN@Հ>| |-YFF@m?,$|@[\n{-W_B@ݟ?{" ?r@-ܱg.Y~+~r|9ϣ'' r /B颯d@i?9#(sՂ~Gw Ik5S*+t7i${-ӁokyNgKr&3Z*gwWaҟa~=˹Y5 Moj}IZ|XA@|`r@[ XVK5w|Rc>Ar^b*)= @-Ok~nj~7Z3oOQE?P> U=?_&j~r@-H!$5o_M=?I|-?E$?X@-`| Ο?2c|?&j*@-GH~&j@-ߟ*)j$yJc|M[ bAx&7{xd|%Z P$$@-ߧI1k>G}쟑K5|~j_{<ł%{\΋/_Lp27E!UZ/_/Pd3k/?Pm)JsY E?P/WG!łP# P"R@M$a~=")@S (;tJFRdOP/wgm)ji[*Z~Tֹ bA2=q!їjA"Pc"ɀZt[c?P`ϗ0oOQ͢ D2`/fO}&Pӟ|`% | l|uk|u^ӟ|-|}-/6K5IV~,sWJVsK55 |- Po5Z4n}-`o~*&=[$-?Fݟs|yj||aWg?P]\|CI6\ӧy,w!Ax*wI[=56C53 P~gjEIL@?>54GmmRWj|H^oW'j:Lr^D0/4{%u1͖Ӿ.#B/0<\~fjzHf{[ `?"m)j^}Sӿʫ=q>+Ÿ!zFA2k[![E?P$5[/#>?Brgj?ao~Zɝ_?aLIq*3TWAp9=_WJ~%%ϒu}8@m__~̏|>#_<>|%σOMD_߂^!?JrWcxU0,ТK/Sp7mݰttY~`dڒ3ui3LR@ݽJ>,@Ez9߲*Ph-fj\m4AuvT9pjQ;ǹBSZLJ;63 ո͸_~S46@U 6+ Qx|sz"Y$C3 >|ӆ +7FahC5RaxAlhu^ 5d;L:ϡ$2s1z6$L[w 8Ac?R!(ŌFvʵ'zS'`˓Q %vVeW: qLk=cDDʝ#}[\5 8#KZlYfE*rP{AϟWcEq|Jsl'ص\ɞJs^o@ô.=ZNϐ崆3ó1mg*†hI&j=,u=?pV4ӆhBւRL}v\YѝlL+%CEO8v+53parG2.#qwͳSl")NsNwW Ec]p#|ppi%.EIEEi4*rP$ڱ?Y|*؁N|`q/6=LV'U"siow^ۻ{tO.hvQnSB:/ 6 bӀ;=iM+Ypm aFˣJ.f f53Gb~c$_]Sly;~b-[c0`4>m:[Ec/d;1ό#Ѯh,BJk9P@ ش84gNFڢ *ʏEasS}a߁}NøM[k7drGxjޠ3[ie~qZ黛ZvF;; v{@X+:5K³x7Ghx0mI6}2-pŕ܀X@i^4^AbiK<ۍ{Ջwx4ӸÍkro4~sJ6<=N7$<`Khi^VEh_1@⽑p֛fX(Z@8^6ۣx!er#TÛ^g+!Mc i0GOoH ' h^c3ĈD @8JOkh[ׁW=E~T|(CN8W:UNܧVF{c]JD .rN<ܑN2gFczF?'Zr+x=Vi_wo6O)M$i!4Z>W}<[˶|/팴vhJGz#o'''_gnop6sȘO /p-vWFhїٟ\Z^z\okNǟ&HW6n 1K#lH8Y'#zxbpֹM,?i?U}#>=vKY*q-߃*iakz]5,M_lmZۂjmӥ&NuynsEp5=5R'ƈss-YzOkz],6'ƅrPn4Ĉi C?kY:"J#V>#uVy0N\{ KG9:H[+J񊏱x֘/^"8e?^]cThNgdݗ_ʹ%K#l(׍쬽Os\^ؒ׹duxb'y2i۷,g˪V փ.=I/qzVQQYoHsTÞ/gRrd??x2# ]g|3欟Qcu<]b*8L #+La#Yw;zX^C/G.Css!ƈyYS"[w "bn^zLXwC'"^RlA9)G%=2-%duxbr{i^'F%ܖ,Ox–,Or]!*Ul+47,5dEz1??8t7}Ӈa;s&|c{#eCХw}؏zXҞ(ۧvYa Y b"SﳆjC4QgbJF5:s*m&R%ԯ qj{7ڲIJ .SzVo9=GoƮOp^|u=7=q/ ^{f6׳ YF߅wj}tEzJ*wSP:eyp3hq& 4<Д׳JM&D̗=Guoc|ܢ"Iw{8cgsQT6>?57O+6}>[K BDC5~/)OFrZ Qv\lP,uDW!DsGv(.g\(/rAuD4dy!;ws`ĵ46&>Sv@ZP'R$6c$U0!/᜛u"P:(ȅuMА,-ǮC:{*9H ΋ TNu|0{; cmCx$+j#yhrL!4;RxWE$S #M0?BbQ)U^o)..Zl$6% )fO%`IvW9%YQBd5C9B|_r yΑW+iRɔ`o+6?Ϊzť1N9AV8SB0p.w=U&@~usՉ%_U⼃:]4+a +l/CBn(&kLՈWѼNR3Ud3Yy&%wqKܾ?`W_iڗxp[04.{hIKcb#z0QZn+ H+u9|TײhCpc7ҨS)5_' H7;-vvr.h3i;ItuV;-k]!P>-6""%#}4+v>%Ƣq=J|LRxx)ϻ ^ yJF#p׎+{>$e}FU|[cp춡!n2&;F%97j^i;n=_YEcE$G/W uxCm+ܖxzہ#A: pX=Em$3#X:I^%9:JlB !w `|D=3X6]rX+|}h]P^+൦#;W;Ii%i<ы]J"~Zm[Lɢ ?6u8Əx$W RBbC2ͮz3qlɜk2JVf3tlPe/ϼ38j۝iÛ T-8=W:D )03N&i&̰S|W,9{fDe0vsL~ +:rE:~# [{$~/io D'.HKڻ8eݛ7rc{jEQ&}:%;Ч?H[e6:O[@;K~(Z%5K(96፭jV|0tXr88N>Pc%w? v~PVLs֔)[|8>ByӶH%[)Oa#ӞgKށjDIY9Y,p,6HȮUmm)=˳KAs{~XY>~ ϑh.W7Rx|QM2}T'j|/; jzF?I?d'jQ:w+jqxyvynC~!y{H'j@-B|hgH}-ߍ$߷}Nf[D?QP_ C{M5*j@|`oFP#7Qu}Frgj|#^ـjgE?$wxܧE?s?r~./)5i g _ s;ˠ|>Gy?5`/OiY뗁_%/nPW(rƏ< {kXk+̹71S$m}WxwW4B36PǯZIM _?&yDqsn{q)E_ gt2ث7jxfY/Il@1 +' 3[I .&y~GDP/\OPmѯa=z_3u, 7?PǗ[C '?Fl/{ fAlp_,3k/?P%~.gdl Jq|{RڨP+~yeW$(U5?@#&A9oV@M?@|`J?5}'>@ˠ$ڇ\󣛯߯P(y[ytRd๎]b9V KcY9}g|M$ l_N@{iBOߴ}%$ L' Gcorl{?ǐ~5!5?_ ʿI8^ʫ=q֏[\Gnu=#O6?Pf' c'%ч}lBΗ|ۀ| }4 4) ~n_g# r>Z .2k|`s-r@4VnCZ>\~4f PwI^i⣱ط_5u?k}ZlGc` 8 G p\2; CO%Nn~"3[ PpdY~)_ s)?b_$tP|~}'b/ Ş ׋\P}:+aR5}>߾GՀ| >~~aFA?Mg@~l[o^'wj~o9בC}^`P>| R5_![-PP~7#͢?Pӿ{%s?:^}߇Hn}+aO5[oD$m ?f?oÐP~jICu}tg '.m|E2~^e,g&G >C8O5Wj* k7j&A?|Su|M. b@;/ .|_+G}W ϧ(>ahH`.uC̥?=FxF_^83E?PW$ϊ~<OwڋL0k߈P/{o o;k|{?PId|tG=<\2>1 L@+m.>f=?F<Ǹm N=G@S`?|P J@_%篷 `_c9?çeS)j?JT϶IIڗ @~{~@#ѳ#~ϟkW/\ IFZϞ(JSO6ثP'׀=q~;[9ĝZ@Oc_}GykӧqO]c$ 6/xg2ث)x6R"Z4 ]{~/,0$ +Z~3^P~m2~@d2?Ն%ǯb_/㿶AE⚄yCyK)MQW8vZS~<~S5ثyO?|'rJh4[Y+j^[ @_ CcM{MM~ZkWP[aW?r~[X_/yyث o>͆۠jHP&יukZN:dja4ϕ}f4}KjO\-?⺿~u.;x:W k.Ā @_վ)j|`-~*^? P?Cp_l@ Re/\W~=̀ .<_%D'Z?߷Ut}7?!`o`$\'J@mג`~o8SՀZ~W4ϻ G)_]C2(b@''2D?Po$^ x їfWC$PVC5SSAPo'gj|w@q_b4l??Pӿ y?Ckvc$]o>Gy' N'=q/~ E{/^@zחoBrgj||`,A<_ Re3$^n={*6wE?P;$7ث?Eg̥ŏ|po$ P U`8c g[ yG?&R@u:('(ySܠ.ߒ^*ߑ`|OI5>k*({b#k)9:?>\A=P~J(<+U~Jw,ׁ|z@x~"WG-+FŀR?|2O0@P;[$96QT@`/m/,$GQybn{|`ScFP/PaG҇+ .:A&دI򍂰 Jrgj|^?  d eW,OˠDeVe{_$A{ A?qNFPO. JOY| T~&߁Z_ ,@?͵*a cBy &/9m?O# Z@-fjӀ Jo<OePg 9a\X$}jxHH$>nKe~+U05_2 tXg8~YVٟ_`$ETH0k/1Hma d@|,u~vP$.g`O\ "ق2>%=\xU>Sd;=@Gi9gˌ'`;׳#GErƀ׽?0Mrվ^z@/I\ ><ܐ><\20̀߅$~ο<_a_ P\.Z`/~ɕ_ Ґj+1W/WK{?JrRm$o7ثko9{d>-zOT$[ʧVxF\_}s6R KG~E_$W VH>(j@3}{Ak˼f@9| |D 5[I>n>"A=GI>&?oW3%8SR~Swie}~nO?a L=/bI$eZzk|_rOW>i__:'7D?P{^7g$?{ی~y)%8Ǣ#' W OH~&ZAm?xx\?J5A b$~ cYA)|6rO d9ϰF3O~Ogc#?'<>[?)<.-,yF?GxF\$b@i$?rqJHrE_ (#r R?l, O0s+uB8*Apl$#E_(3g5? ??r Zγg|G/;rh `|P4&ч_!jS9nS[)5k|jLs&Pg`HW%˄xA-,s*E?r1O\P'OͶdk?}6ZjO69 ~5S~ T(CN |<+G~=!%s[g?x cϸoӜ(9D_.W#g!Y/j@b^BLujOyYc_/n?Y)&@-!&@ W0> &7rbFx@-O9;H}y; g>$r"9Gu~?d^-`r~*n~> T~?k#itA7rz Ys?FE?粥jN^Gױm?S?Ӑb%(dwF}/Կ%gEhI,|-~rя`/~ 0RPܾJoE_~^#Su|&=\#&@W jીW@ ۤ~ϸJr)R,练S-织~Orjf#qv_|T:~|2n!u|a^yr>. A}A=>FrWw} ('I8@O|`~ ߧ X|QZLnϋPs/{˹OX?EK$_1+`_d[)JW}=S 7 ۮ+jѯR~*Od~?TP˟F~dYyOO{&Y`3gρ+~9 7%+yq8ط+ΓEؿ|/7I4{ ;E_{ iq? Pǿ?^ f=߉ ~ M3YoW?kςj7*xl@My{Ow >~I@m/zث #ˆ IHŀ>ssɥrGY݃\b BoaG҇IkTG,8?d NsNn`@PW._\W-j {_ Z?9wjW oԐPE>$弛rD?^?R[]dWU\Z+Re`kAsE_(WnApo"&^O~o.#)wZ+!>;W_b._$k弛WZ+%b@eR-ό|i.sW>) *|"S-]a[ "sMT _fڟM+Hv~o'5 ]\g%J@3Iz ,' D9Z@?_'l%'-iڿwyk|!8 |@/ B%P~ԷrDP˯<2PV:@mÐ:= |7r|$2 7j1C}mK(<#C$GD?AP'wr?| υ$xK|%bܿa.&1~\| }E_J 끯aH$&@moWo2ՐbMokko@u$~" 9^ Ir+5wl]| PǿN_7W3e5?Kp3o>K@ m.>!wQ=*ۀ[׶DŽ&6+P$wR~{-;3OE5>? | k> A=d.^yq7H|@?a|-+O\_(W_~ Y?}>ѯdܯ`k b]uo}`K\D?PT"j>aZWGD糏X0EP$?6k?~#=_ Och&b{8䗢?J^JzFܯ!?Ij&^ Eo >sψ~9P_ i{M{埁5xgX볿C%N#9jW P?O/O?I^2ث $6jo/y?ڿ|P_6/D?YP?=W 6Yoa^@̀L6Kl 4G~.2+7ث< .u?PjW/\ O@$C?P_F 3.ƐR@/ :?Rɛb@ٿM~|^[e+\C/?jʫd |o|O_B\/Q^`Rle|ϱRO(y3D?Q'h7`g_&̛m~?s$i-H:~OӼJWɂ|  2jYa/'.oV?MPO9>Zk浈~_3k-EZ=KWl7HRcz.oݢm9;]Wg ϵRng Gj{_-1(%?a@[]#=?' 8@~?-`C?:)n_]Oŀ=T %_@r' FM VBLr'j{ SoVgHnl@1{;s;_'_"(7>Irjwq}YC#9i_'8^яGE ^KӾDїj2 +?}#=qyӧvU5D?P!>! 6C"jy^Pp~\Z"6~DїjQ eA#$?}9gˁ'.)WO1_g{I+q}`_J/"<#~G jqz/WO?hwٞ׶ ɲ߹Q,?M^DAeY{M|$/PE/2ث,|-ΟNP??_&4@zK|lgUJ|9/\_>A_ (O{ _>|ڃ:@i!}xES;?M2J2Q`P?Phm/!<#|Z䗈~ <_O{_| ͅe^g7q/T>d0_-̟<~W~tCU^W}/~+|jc'~D?PT_o>(GOsn~+5}=^ | Ӏe:u3 t?K3e}Os ,߹K@_fKE2/&Ǩr=墯75W j"nE_g%I*5d^[ 9`?"N?P'(:>m7_  E[_"{M/`8`+$7~ $wM In}/ >HJA8_,ɭ0{+:s!MZ?WoOYP\b9ӝ$R@?'~C@niϨ/=$_}?qɃ{E' ^/PǗHnW_~9/Z@myث 5siGA)KJ9+ɷE,}6p>[P_%y`| ?}?~ /!ɏ 1WG~.q?"b@m~%yL$0k|_I$})oD_&/.'H~-j@Ozk| WkP>?_ |!G_.z&' -^+!A,gI.j@#^Aܿ=g ?_7~?* $9/{϶IRPֿ<>0_U H>Հ,=RaWBO 6A.siDi_QqИZ} ){TP_\~f +D?PWuTW NZ/6S|J+i!eM/GcJo>GN}9E{?? g PL{? A, E? P<{?ߐi/2/K"@Nn j""7 V{z/7nc^oD? 7l@mI6ث-W }k+s|Lv3D? Pw!Ym(?wJQ7Z)})v |`&i}9o5_Ʊ߇ @m_!M}}[{6Ku~a~j O~ kϐ-nᯑ16/+F@E{/͂KWHR@g<(>at/W[~Y4%#?P (0sj:J@-?PϟTUlk7>?}`S3_P2ث_?Ju~%ɯ 1 |sfjyـ)ߊ~5?Wp!~![iC,?A/?@wCZPsO{+|Ax93LB&~T򶝽a٦+Wm߳t۶E9+cYc-6Yt &#dێe-W[,ߴqldZI>Wc^"_|0?2 hN3qu KoKFP.ק#7:̴,U߲*RG|-CVo8J.A]qdž~*n9P ʮM&u+o[dZ|.%=e$4s 7dWB2Ȇ'µ;ʫAmV3eMd,H'Q-:j* 4xTJZp떮(o=WnϠ=)ci'T<\-07$F9G)-/O/HpwU3"~V_'E͏ tXozީ<%vL;22P8cPm== =`P ^.O砇 ~k'z`ƺ! aKb9S[8moxxxmמei_ڵg+&sc-:k||8ÇQ:~f׉16\޲t!z/P(=dU}o'ȸwBHN(C2a}j>sB-\u isN5dCְB[wvEǫz:wu ~VަR5/󔝧Bn[IK>-OF {ܥXz$ t{Y8dV¾; ]WcHk{asw&B h 눧-Wrb݇<"-9δ9n9VH7vKhhhpBWT+vwñ`Hoh<YmkxZaǎx΍źLf CR$J؝{dȗ$܎sƑ)vѰxg?0c4w0@xvYܚb@gWw^o۩mH+S yoCO{JryQpI\jACxkw;x|hY={+:]:'oJP()!P` Na-@S{ƙBN5A5Yu7{eXFutڔpӗ04vw.Ne{w6 u%l ǂ"}`;Z#AZXFVZT;NJ;>bldG뉴Fۣ(GK0MKp}x_/a+ηhG4 vvrtT`o@k$a=BxOo4o'WxP$>!yD">b"%`g#Nhf{M]uQ[s"h__"zcx/i;%C#d#muRip츈uǃm==hCN h,!pYtuEڢx2>vuFK;bTihT vhUJi%Fqtz {x`e:p7gUʍm֌&T1/1-˽p=-i.lBCM;T3[{.N H P)-#{;ߍa)4&g"n WSGWqip o<w:O9ǘp[{j;u$ؽP  4΅ۂGH{b%xqy:l=ivFIL":'{W:E:?,jv( *#F6ӗi=4SӼgp)qU4mlˏE"qsDsig<v CoGU4.H$}:|]ɒxύњZ93ۊ+)gaz%d94-]mx q40'n<=#Ob̺ aԛ.=xZz0Jr 3e ǫs}4DPXGó^Nf:i8QYlɗesp<7y(Ђ~o"gJxPHtF׶$ W$:ثw;^[0:fg=2+b0Ζ.އ󌙩á5_=\+AWix>X}!!V-u^fYfdN 悾xo_Ogs<`7x\>aF逵씃X9 \ydK4웚*}x{K,ŜH22CJ[uZ}r%Fz5=Ma0 A.Ⱦ$bҖ?7Ӟ=̙M6+A>&dq<5,˽ϴr0do]\XN4m"O-,:l8-[p9B]>t3| 4A~J z PWY3!4.@?uo>ƺw̾I!~vo$`o'%?;:)z~6vk_cJ>?ǏGCڗh~~5q;u;-`/H- " _Nػ^Λg M8ڷH`9IE0 DtָD"Ob`|}B~B<ܑ;РL4*RG1$y F??86$}W1l`_S_H(xyi_?^%~ȾhgGW>2Xyp=UΣKGkkKbrU.!j lݱ^fۓoQE-%pT?k?Z[g$?5nΤJKAWHHZU' K}="^aJ=^#ZqԮs^~TJ'Jk"1]l$&`0V%＀UȑN 's([7* ﴣNi A ` =*Np4EƥrT>-k'.OhĸNߣ:Fc$}W2V.wԱ;mp> %*PMe >RzRN9RKnDoi \HrV%o_)d?EWM-"VblU6n0Wo,Y z|ɩmbǵp=j1Lv(}W=?U3OR+:?9N|ָ8 w)a.Iq0^d񀫎eUnpjW6ng 'J_`j{b^KSd\}0k!Taۆ"ĸ@SeZWY{Oz\fU;HTe^<15w}^爧Vq",.O˥lےi [R<1Jz-0lY94othX a8q=}-F|ELK9p]u%JbR[Z&ʤ ْI≱^IV/8˿2õ6-NIYfgz,1a ~7.&l|=v< (7WywdlgL%PmZdP2r2ޟUG1+D bӴ]jw6؏k݄\ W9l'Ò-:xԎ!GzVH{S?e8׾:vOVLMS &=++^Qjld=ϵa}eں,.Oz`X&]kZ3q z1q7zt 7 ů=D1+ܠeo>}u/glL.J^]-qB85x9f0q5w N2Zuyl {o ˊq%K#ْW-;M߭Y{Bgl-k[ˆ d]MV)Mx0 osLۏ[:Ȝ{X^v]{Q"<,îe9[J&CO‡gRWƣ[Dž%%ں[%BW4f:. EY{X<1.%K'F*%dRĈR[zxzz r ,%!koOm#ټɖawZ3dOM7utµ.`]ɹuz&1m$d!*0DƗd%?uawR¥7$g\|\WO/˺u_. ܖ,^!py–,N<1%KW'ir=MrX z,:lqwo2wk# ײtu?Ԙ, SO$ɁqSN]?cTc:uMb벣 1t}ڿ{}k,{8WW Ś>f~7zF }DIaIUz>ϕ/K橯ӻ<[-F)^"u(Z}jJy}Fxwp35Su Kn~gt_oWK =>"Y7eHzPݝ|cX=Z``_RW_:g=`CTBGgW,wiuJ_6bk7Bm(ε č='uQpgp23}ma"?eLrhF[+6DsV8*/KoVI) .sb!>4G({ȗ>̖DL҃m(*wQh n9hSKGE-nnS(`n!}}^(Oz/x?>Zr=_C5b] g< GNT;>Jt`.צh v9VLzlܣ*9XV_ULmUWɩp]H]3#% U]ڤφj>ZSj5Hh1@NpO86Չ*4"T7!u9 Hf k2Qz)xnu=9'Qd̆`iU|jshMov}uv'*9H ?AlCCӞ֘b(O=55KcWtw FD̴>`cIe4Tw=`O/"nM[:nr.h=PӰ:o囐:FĞD\hj+[i  0**QH+B=itK+CoW 5j L_}ZBh_4 w6y$KF|fihN4_uNߴvM{j*%vO&ie+7Fyn6K~K@v&M7gfwRzKzYkޝAYo*eX,SIf .d>5ث<^o^_kHJ$RJw[uIh |/1>{D_s{k,g|y/M:i3 (H>en~ & ~$x+T~R(ߏPvW ;EP=5; ~[5w ?Bcs7M? PI ~!^3~HrW{~&K#<@k@pHb@-`?@yADP oxM_-Ch+5@+5|*@aChnc7j [YN~g)/ π?P$0j ? PǗG /w=)VzB'6r:?*?+Wx]7(!FWKu73,q(2k|_&/_Iu]0ث;7jyfA=y~<`ق>}v㨇%:S}Jy JNH~9yL+?!HG*@ O] di? P˯i? GYe^?5D{$_^ӟZ\cnuŸ&zF8m~O{ij5`_ott |1wSh-o}9OI |ƿ ɀj.S~Ղ`~*^ۀgg~ ._Xp w1 n7te}#J`|>|J%F] -;NM% e%~Anїj=$@yn7XoUlyDb+ %7jo^_nH+!MA7?M'|o"J||Z %Z>W\#[<5-o_y5;He_c,W}$7/08߇DGܿo~2o"!)"fްGI>cW?APn#Ceo'`~`9qO>N{ C!2HnD|#GAA$?1ث{/+@-/`VPH":~^JuѯF}:eؿ<@W~oT|of@m1o3o ?l-`#CB'~3b/D_'%k׉P jZ/_/}/W35}`YZ?/ۏ&}ll9?9P_"A=c߅$#EPa~x l@os-%Re_a~<[YPw9vJ !DR/T{s EZ~4_ (?^ %PWLP7Xef<5j 4D PT_Wu7D{} ھ$]g~&tcf~{X2o>\ #WjJp-GmѿD5  nK c.V@r ɧ^_o +ε>pdQ"r@)EqIx-C`0 Ixg/$>(#~nc5k|_!#H} $7 u$|@+=_ #7\%UIeWWZGW[~7kI3: mwAmT {gHn}on7|`o^Er7|H:~ѵO>n>w~*_'V~:xk~o~5w"8'D Pǝ'wH)g߸|?GrBZ'^|` ɽT_$^ TA/|EaL$_@yثo@-T4B'c/d{gb@-P}rm)ju _!z=$ PǺ{ʲEU o ig%@]=2A?y}$6ZU@]=K<ϗҾ*CAA\=G ?$} ?n{/kq}/~>߿=/*@eaWG_-;> 3( Y ̀ҾmP~[~~a\ZB~3P}h AAXh } .0 >q*O| K@=PG_ LAX=P| TJoQaU{ |)3.e ?%{| $͢TM$ Xt!Z= g .0djWs s[w։~K_ %sݯ Y#:R_ 2*_(jCh"W~o#e}$ W-~`@-~բg,,u8aoENk,.> Pfy~ϽW`7%"A?h#ixA?\ho^Ϧa Eo?a_+8t^P˟3p>s Nk E?P?Op1o7_a_|-+Y aC"Z6_㗉PR7e .'yz6Q^ΐ>ΟG!@p}&D7Pfk U ́I}#-CswYPw^] Ahx;;E Pw@N_aE_y A]?uu}^ LכH>(8LE zρ[H>,I~?Dr^ VXٜ6Y)j(]{M6hc$wX}Kׯg_x> ψ$~WHjW?r7ؗW%>GAuݣX~ \?"/@]_> |`/@|+ɂpS5?^ PO˟E~%yL-4~I^1K,g $OXNQW$1ث'׹חOF5*| Z5}>_j~ /|i/4`|g _ ~oRח|K|%x}"/P/{!}\_sC:? A\_ײS5/}^? |q?wm~WqB(} |\ed(!]v:MٛMۤ6&! m "(.(T\QQTwP w\pCw޹y{g&Ӥ-~s{λw73{olҧŪoRe0ي <~B?GE/&R^9_HįVe,-EZ~񕊴?l$DZ;8bڻϱ7\ _.r'5!P(\U{䯇x=`gm3 #{#MEU?Ӏ=ZҟG*|B?j_Idjl%~<υ|[ / Dd3et|ȍbX쑿+&U_MKD$DyU_C|]uswȭ"#@ՉWܮ6B6Xv)RU_I_eI%"Z_G| كo5!7Xڟhc_ߢcToy5ߙ/YoGڴDI|6LϯybG|"=7b}^y}>{Uς_A=w/~--<,Z7"?RDE~(G=Ɋ_>?~"{= EԟD~JB/ǻ!5"Q}-! {|RQ̭&}6Xp]~x~oXxG;ycx7\я%<_oQAz~WHB/wcf|Xx_B!B5ϥ&~!w6Noׁڿ$ͼ{,劘MJ畩~.!w=?_q;n!OrhKiK[U@S}?L|ro+Ug%/ fͫU_c/-OgߤJ%橾Pϼ>?P/#D)o|QqOP[$/yT&D[F4Bc/Qr+Q?+wxu|Γ6[JBZ1o*E<7`z|˻b뉯' ~6lW=?Fͪo$ Ido&ɉŞ· b{U;7-߱v=64bR&w.C+ҧ;Yy1?OE4i}ն\@Οr6[PB$gml۰=w7K< e)M3ʫY* ߜ[ݮ'ql"z΍Vbb=<ſ2,V |UE-f; c[Vnؾz"DU#ءN[eW{iC

Oj 4Yqv‹flv:5 Hчk[294Q1111DƘOͳk9#I"xbQx2?Di#: YFo8Tow;pyGsssϩشܟ:vkj!U؇,;LG_f-+me>lvgui)ld-y><OB :i7˒,lg:fQI]>b"4JEzEvQENK^90@j>u;2Q1+wk>8*8p75 tmTx[@_vegGXz(mk?{T}~2Wμ@]+RX~h iːa y݃"}|GLXc?c*7v>tVɄJΫڂjO_I^"{_;ܓ%R ! ey(iI{:e+l7HΌeoƤC]I["w hWNJPg{HαsfM0{GL'.8;VtT4L#͙o7GsSa4bOlO?< z":;2ݴWu&cAw䰙Qu!4˘-y;lO f8eD졭K}Cͧ†pD+}r_ ʒ\G#x{T=X ؓ|ۿ{^H*r^%gfma b3_y[T'Jw ᎞ؠ16( o2[im@-26y4nϤb-mgI:Tqdޅ%\I(~_p,!ﳻx}}Gy֝v(HwHOgiM]]ImoZrۻQ+wvOx="6>[מiTtK@l QşEzly%%BCXik?^? iHh YUy]]XJ+reب8~`_Lt*/;nXò:)v *>0 mtE:R3&)D{g ^7x&җތquutRO_640o_8.kGȾ~P XT(=YTo^ꏬ0[tyƕsƒ=q Te|/?{Ds<ϕ9EW.sLrjJ̙BW׳ԋ2.g իsSJ7 衦ddq>vit] iC%cgΤυYxְe"H8%h-v=K>w&a'29O聁T~/o3(%O|Oh'ϴZ9a9}rżr܈37՟1"чq7*kDJjªNF>Ot%Ei9q1Oʦ͔kz] t7u&-j |N}RF1Y{ Nyl^y{4k[z~>7k~ء;sY^ǩ'krd\G3'ɪg|BHc =^羱o'wjxϹ¶;Ziݧ5 4 e#~@qzۈ9W׬T_KjfNOgkl9܋ٍKl^'6#RiPc),Uik.p{bu\~fR PQv﷓]]34)0zyr# \0ŕ,ԓz]?:U=l6dONz5y֛]NNIwhSIvRg2RQI!:[}<\?^9dgU_/Wwu'aT)f,\ujp~dGWڨ J^STɕ,ROfգWcNaO:$#7v6SH^Ky^KyF'Z[|VW#C+9iVY3.)yN^'z[ guz2Xy^^'z]q/?~W3ry&Y(xt|K0Zq~)?9줷bU}C_rS7|{ep^/ϭ'cߨ昉Ԃyt=9Qe=I9m M^5}bEa___B_3?J ķ@N~}Jq׭=Mr_V?ml/G<'GR7IA9n=>!^I & _6d~=;,0^]L/S5_/;~3>+]8|8@v%2U+4l/bcYm*OntTECt#[5Yq>5Z'ԡ=SVkXw2WEĝ2VX%($7mCJ| QmHo(qX6[P5E)5ԋP|:"2doաЬx|&9mE-RƘX{ eUgx9@8ͷ ;[i}Kvܠ3U:',>E+~Chv]EO3ё&jk,I2kX_I& E'X >ֿ*1~7=yb2=O&(>F&kCtG#=:C[2L(BC-ǡ]MڽlWFJ #{#=+EL5d#[#C!և!0vg#%*Č.Gf0QȝizhaLwȭ]iw& szH]*ԯڼtƹ):[Bk},^--C!ӥxe&u2s,miFls"w4N#%i+zGRnkN~*/0K D&~c9$$+6|EljmyB'\k@G$s$̥gGőj6[GK6HNż澗}T_,>?w /4ʤo Mv'ͪy=SGvEįHwO5>+t-G*L>_Xtb~}+E35:IN=/aIx* آ=r_@ܔ_k|[6o_{A'=_u\W~&1~G }oO3Rb@?:[(勣uF ZͿm;gU~_ľbO{Կ{'b%w!W#DZ^_9NbEDBo4QgɄsH(Π/~:W(=K|b#On" ||MOEOQ>׉}f4hiď#DT?3]+W DxJ+"D}&?InPBBO=7XʷYTfN;*@#~2!g>!jj^PD#Ql?[L}DJ|3!;T?cdAT;~ !w=O|obկ%D-CT|m|O#!c*g}[Q\M)r|įS fQګ}h{ﵔoTBp??k5?YK;x~qhcOP;keJ_0!:{C_A?JBؿju7kߠ뗀EnhȾ{ sR^J| !2(.w{ȭ_Az=+" oC|(Ԥ?Z;"> ~"&WĿd_ gxy"^#:'E>@k)lɞBSg*"~M"߶#{i7|K>o!B*v7m"#o'ȻT?N{%}gMKWK Q|b%ȇTF?dIPGgBOSO|RQ?|b$~)T?-=?@6BgDTvBg}AKۉo!?dde/-w)^Y ~MNS-؉`|xB#O h~'3OTh/CO,cOUD~JB>CK<WE?~'~e+'T?I{ׂ=tj߈N3>9n_XKU_OhxNmH|#!ϟD%l)c ~zo~!i{~?nXg''昛(|Q Wg1'+Xd< >KY{_BtEğɻ|ia?gQ.g{~p֋AMdMhsGLgh bz #RW`lo>gQdhQ}3a{䯅ل:?,_BsQ?K-gVGkIZBJ4_%#dHo _߼3~AڟlSdEڟd/bۈьWT}%! .N_ T_Kh88_"=_@|"{ߋ(̈́h]KQOuDssSZ1>EV"{=ҿR>~+2BYneĿ??c78>{U?Q9GEbG>F\E}#:>|\ _DydB!~"+ Q'~"M|}A䋪_G=EK#zBʗ:$͊h_S>s>]'k~|G؃yGL_lηW G|\o;rB߬=~*|yŨs_~"/{OVW?%-{jE ĿW[ߋ# ~?<Ŀ=?I|"ΧLJ|+!7b|zJ" ~%![i O*BX]Mqc槜 Z9y"w)?LU}3ɟms K/HD 5>sL#*Q"g~1! {?mTg{+ uk8LWS˸SjᑿR_CkIˈ_Ge,Ιha?j|[ڏ.a'O_߽ ?̘_JWNwþޏ)~Op_`S|N}ڛ6CUU~5~~N|K,%~!⿕ S7cu/#~"?JB u#uk$']ȿiK9T?Aq[?Z1=od'QQ~՜, EOL7lQ}a?g6=o!Zoב6_=!g|pI~Xb @vVEnE.n')v.U}%!oA=_J|"=i'k/8_1~6!=K?/`H">EZ\&>Pf~-gٗZ+~BN'Q\)N짃cJU{"_rVU_3Ǽb_{oTŬ]'rbz=wS^DRBķ)Q%_MIV=(7L_c/[| H~uG{;U?:'*bp'~b.7:ώ -(+b~0u7U7?S{DޢzBϛ}쑿X۩~ď#rk"]Ժ)SDޫ :Efy}Q~6!c"XljCfmu=Ғ\#KgH'|^!շ"_,J-WLS o~"!"߱k*~* Ä9|ωb} GD#_XKo瓆qjc7)&?bH\B7?Qߞm$DR?>Za=}TRqfW^&TF\Y`o_ٛK/E} !c8Wznc Qk<딯r(Rm"Nf8yg8{sMm%>Lh쥝skPo; a?xLB_H|b"~!/&~\yCo'~1!Tq #~-!#įWHDs-Z˄/vƥAڟvt;Ϟ0>,Oc83Vc?ZT?K|XKB߉}"G-_? (ȕo$D.N{&}ܫ33mxL QkDn#c/!D^K Q|zKt`XZ g̉"7~ !FWY&*n"/y7"Yo!DLJ_nI+QFߡx߬_M)'kD^kd?eo57U';-"[)Nx;T_Ax{-+wI;˴߻|ݖ̿_Nyxb9NpQ?N?"1O$GElG>F|b\~O%O|b3l<1IO){%j}H58?4{W瓹"c{_n.W_@ׄ/׼)b6Zo_ho?0ADWDE쿌E$>?ҟozopߟLy{3C؟/U? YW*|DP}=̯E~o'o$Zx%l{QDVBL2o"WBS>wK׿,Nq>kjoh7x~/`xrbs b E{GtEğ)/gw/ɉ)ߙ"U?ԯgcOQ{:2\zMwp Պ:8V\ }/1{RB1}U?ۉ/)~sTogA2՗$~ΏAsO+: ֨>DҧM{俆N%GƠ`+u%}&*tBeo&R&98OV .<|= lUOc! DZx_J/Aߕ"78"V?+{!Տ'U?A˞:^SaNd[O|+sUp"6&KS.x F,Hb7f~5ePGK|>կ$Dw>KVo!?w?_Nk5!wY'RތIe"}3~]!<=_|?U_J'nAH+?05H|9H_1">_OJ ߣ>H*1K1G{SXbcA~'F.;w8|"W} !==ߧR qU?^O|b_'E>$ǧDjOwL= g* MT_A<ҟEy}ȗTE{%K,&aܟԈ>&~!yB1?<Ʉȯ,#OQDU=c"?OWŞ9kZB(# ?":BLa3zB-_Q&m&fߊ^ ~O{QRV'>e"QjB"#Fq#~# |ZOwXxo!Dei& Gi2oզArE,_cIGWC aFiȓXlQD|+-l+b0y/QpsoUD|G|⑾~-!wPeݟעE>Hd~_FSjWhYA?2WI$?kHd?~l! 1&Z'05H'7KDZ'+b~5s^O'D|^g(M^HD?FŹeN4ϝ> ~9D"B__#rW[쑿+l"}{zpm&DXڗdžK/j=A)!֟(kvY;]G|9!Dk sBOTY쑿?YϋDnTtBb7?CM"7{FE?ܪyr{?/VsȫUU"#&~";-^CLy-[wP"hG-O'T?Ut)T_Ō?@|bȃEhg6$s& "YxfmEKxK0 R - 0~D䧪HW}OQ'B"?#?U׏<9~L!XJ|!?~hotSxB߯oΏ! S+{Wb~-{g*".fBϟ, 9ؿyySd?/$DKxSo4. yOWt=/!EM_D<ֆ~%r6>&[ u6 u;wSy/!!ߜY쑿R(#Z}/B/}#d?g?!-P| }?4Kd~e>ίRxe7i'/sYagiɗ5M~')(b5R'_٪$D>g_oLeɟFB>?YɿI~"{o!~!RTq5Md.YiGVǯ{VR6~VUk?_G_/Q{7#-G[%?۴mU /W$E_R,>!Eݟg)]H4Ez9"U_K{٣#_S=o$D\c{,7D7+)%TJ\?`GoS[S"9Ϧ*?:}2W)tt"vH/!D^a_T*v8kb/asD:=?J|U"ר~?HuT3/۔7ˋDnT$E_^,ro$>M"7WXf)"2{Œ>O۵~͚ФogR*.+Ev~! "w~"=G,7 ~oybo&>8Em FtJSUw;-b&k( {},_O}g#_fN(%D~\ykpR /\|<՟$-bLj)w׊\(u>% Wp+1~g*"/V,B_^$r鿘fE^hM2 ySJhg1o:U'8O+/'sWA"wZy||ȇ,߫)xkU_G|,Z׉ܥfBߌy"~6!Ƨ7?%zț-<3#?_ńX)yGE+MnKb,OK??Oyo_ ?F$ũN<>.rÄ('|~Ka+xH:FW*3"gE>oGߨ8b??O+i5H)!/+q <ߥگzU_Fn;|WǪH<,=ՇZ?U_SyL3 cb!YL|!槟 o'"TDE>?cG$~"'T?km'g 1A:gkI  W/#D|~fΟ|߉AEJj U??Sh0G̈́: -cg+. d-$)2'B-a1ut~VX"rjG/؃^?.Wޠf|/1{O[x.i. ^*bG?UB),WLBD{/O +T_"Pׇfa ie gPhb=rݥf/ f~"_ MZ,H&!EzPBa+ -UɿɅCRWs-Hے>K-g~oN~_~e=_xߨ?Y^_Ye/"%IapW0 Q?_BCc{KY+Ⱦ\6BϠ=_i6Zڗ5~P ' ^hD^doPl?O"Dc7Xp7~"7/&~"oy}YOy?oV7U9&c;t|w+Wy~IB?"N'S7ܭ9Q=w7siZ&=O RBߛx >E?ҏ c E׃ OOV Q/Շ~{E#?]oESLB#F_ ?,Q"~?c%'D𰿟'oVS~{@䛪_D -X}ń_"~-!,(Cį#D|Q˪_O}lI=_m [i ?e{z~qy㪟9{T-?[aB"?ULBD{(r/T_O=’>=0\| M(9g==͊ȟT?(D|E~XST%N|2ʟ9}Z #-O7 kߕxuS$XM>E9"gZ5}c7+n((ZEy>Oy"_H[Tc%]HT! eb织P?E>4þ?Z| "kB!7{14M!7~,!wgU_zXɄ.#>(SU uQHLBZ&o&f?G+&EW4£BoSg!񭄆sh|<׉E/#D/%~"V$i-SBطأ~R2T B=?5TJB_5Z@ԯ7Ǵގ9 χd.\ Q?HχlS}[E.أ|ۈ8W򢝪$DwNK?7\nW%.$P?Ek -WWv"D_*rb7+3٧=ﳤT2 y=O R+r'*b`W}D#O#D|\ €E_*:b+H{.zBQKh`X5Z1~]/r\_j)E^"Ϭnb_@4BȋU_AyM{1}nsd?7kH=E[GZ׫t>V '+r]Շ ?^):=ҿimN|yȝ_Fz=iIG_?sy}xxؿov]<_u|ǻDO劓x|[g{?(~*!ć'r a~[쑿{I@C!Dȇ-!k}{z?p5">b)_#ꯉ Y矦>)i/"D~J{i[QD>ńψ|b%~bbS~">C/+#= ~|_">c{>*^L_LQv~`)n St|Aye_Z1~Wb_`__9Äh߈}K4E:.T?/=BET}-aŢ?|7ޜY(OC # ~b߿_J=M|>_#"c=ci?z~dX|'T9CKo @yRxE?%"e{E|"bCR}PLR=E4E:)-rgs,| 7HgRH8E/ /y*zF˽{o2S>DW_,{OTs~b""T?op-n,ÄO9^i87ugη窾7Gb_HS9^ZB|{_`I*_/[XKj_kX;#k5#k{_CdE:?)x+?2oz+VY+oR}!w=oOS%Z7: 4<ѯboRMNGþ];xc} x }~cc u}T|kߩͪ7[3v"~/WD| 8%S}!Ƈ^+| W_C_8Mhx3 ?WG a ;L #ķ(.]ERBoWFGbĜ?T /Q?N?OO!NJoأ~n >3Y/H3Q,}_B|5!W>\_2'F-"VxBˉHoM!BؿBN=wS\"w=aIgR}5!o!׊Ⱦ~.(&"D-v=fv'?,G-KbI/oYwkޢAH Q?|JywU&oG?H4EoȇU_Mh>ZTE?bE5}?f)_3O7?\\ =+TRD"_#?M"/Y!g*r|b%Kϭ?X}]y+xSVoɊ?#Ä?L4E]DǟGDe-/#eG:<]Q?U.xR k]ܦzL|߫~D'߿<=IXߚȟT_AZOOWkOE5X_B|!O@߉oRK3R߿_BKߪϏW"kmR%%y+o%G*92B")Dbd^ PrE|HJ9KZ%gY+?7_I[iErJ7t~R"񪟨H'%{o<q>iWƔrO'DK%-_N E]ߚ-+:B_%} \SR9ȿeR=W?WgSR%_HJ[wd+~!_CJBWGBOꤤIk .EXQ&~fPO%%s,Œ>_c3SU;u}Wr"_ |Q%/WK=)A=C4E}.٫:BK-zEfl ~.oJ?_q?"r@-X쑿/&s%.dO%KɾJ+[ڟA'(|׬^A:/1ר~"=/1k{, 劼3}:O!D]+r#>_/|O#D83A䅪%D_ r_H|"X"UHx=hIxJnU,E= KH\ѿnc{r_ao%;+W;by7;/Kߝd5BJ[nKcw*o[EnavrD1Ky<{w~,!=k^)Zw%$~!Cė+D~ B??Q`pg"O_ /)"߰أ~?E|b3gT?yb!~!"S\B߃>9Ktb~"ofoE)JɗDUߗ7XZڇWAo|W[+n'w}Oʿ^7XO*o>Mɿ9W|įR㪿ߥ+~F䩾PLJQA{ol 5~P?H78n0Hcď#1L'(bk>KdÄ?F&~ϣ&s3u|%kQ窾Pd4jw.U%kQU_GI]x QR哱f$70Jbf=ҟD|"=?5bObG YS_@M. Q>Yˍ ).%{.VB_}[ɾ⧍SG2Bj'=4\, ď#D_HERzU&Dh!~!b+QKAhuHv/u1j%D|I]ZeG Lq_ip֫\q )8ը5"k-<%R ^MM"[T.!GңY e{V==6ܨU?AN$ՏeFK-Z?(DeM;b՟K1s%{2)Şޯ3ܨOUD|C|b%ϥ"ɾwhYy _䠅A?@=uaHя%ʛ${T>``u6?l`2AG[N 7.ۼA?lXjǞ׮ޤ`Ho^uo޳j;n޴gyVVUZLdeHqVT}Ƕ=7oھ#6?Yd-Ӥ-Ukr\Οkr>[oB QBn޶mdYP,h6ܰ!>au[y59kW%WA∟r밵$L*LffNbj>d)mp+#vno:5vnԓH/<]pSVo ˉKC¤d!AvKmcܴ}H4UC&>i:fYtmVqRc ,<"ϴyrneEF첏u'0Fgʧt=!pk8M-<::9;e`;rulR37Աw8C=ĥI\@K9Lr4/a;jI)rV7,Do5β8Nh?Oz,x>*eUtn)T}'8>d0>pfZڕig,'beoӰbrrzz{|nX,zQ[$#pN0PrȖmYOޢD=Kn8sNSy.vwUCs W$k~e=Lax9[y3(|7d+iR='yy>h];l߲rڶ 6H95 4|2 ϖΰ8#yz26NU)IR?1f󢑞Nv3 s,OOM#u2??z@&렗4z#4R2Xt9w99};&~1U?}s$F^ٳJw437OtiwܪU陼/N86O鳬;fS}rZ<=-FLא'ܧ;,?ރDe0'Cx$!;?cf<^~+Yg^ރ핾5Z~h iːa y݃"}|GLXC?c*7v>tVɄJΫڂjO_I^":y[$v>pԫt{䗅H{_AM~dͷWcfǜŋ=i\'%/q!r(e¨@-<,\XYω8TyHW0&wFr6Tt4vߜ'4ZdX +Ufk^ Ic Ł[7f WJMC/2ns|KS4-Րґ|MP["E\oĥOصw>IŴ5emzlzg=\?7zT[+#Ac4gK3dT_D2:QX/L5K3tȪS1C+!3<[MsR;Z 5q8̠ $>eKҟb;LlPWohI?w<:SyuҒ2m}K9A8ItƑ88)aa@,LXLulV#l7ćcRe3 g84{]5UpREn{Uop|_ّ"0:ݑfC1!9ahJ^yrh8eyʠ'Y'5VR˦i;G .VokȔ'=i=bH ש3Bdz"R V_}FYTgHo^~#m§?a</)|+!GrS)YTQ:H80fIKf5&sު̨ B3)*;]J<MiF3S"@g78N@\ٙݣ|JǿIxM;٪ȋydFW'mZtG2J ]'CX'ix>ߵHpil\ΚUo@DaGOW 3~!=%4MB7@D K~m_n=l> &0qR{#? e%ia*hY&go%IO?KY ???z.S=̍zT_MV|qUFnV:߽D9 I=ͺ2LD7ݾvFSv˗? a#n6_CI8vV_oN`ӽI5 8!:mz^U(i m4ƾU%hWgG@hU}`/t b1 M/Ku!ߛKӞv{sD^O߾?$c2'yH^u:Jz|AXw ܩo0{,τ9c77:(t+gyƕs0u~Ӌ@U+ϗ["㾝wN4w>^ϣx߽s{r=cDr3LX"\E \NGgW#"!.Kԋ2.{9)D1G1ꆖ1ǣ!,^O. =5>p&}.̺Ƌ ^碬Q"z]QY{=C=;Qzz2ج쬽 .QO2<&kcxo[ T_:"\MQ ucq[\/{:fQ~=qa9>׻esVǯs>^|+i3sqֱRc zA?H҈tNcOp5ntgϭNZS,Ѕ{3NR'e)_)kGJ[L-rnRпݎ O-%-d1ic<~-G=ľ36@D<u$ 8mt=Y|$Σ _d,cBrYݖ&USMkypZyFb{Z{L<:Z)23_!1e*w +#7"cVˎZ՚'fӬכ,qc5ߘz2['Xnԇa\u;!Wikz2X5NlA:A!q˰! uS3 gk @F'@}ȑ7\/J ]t}뵖)U!f^+]K׼/|iqx[]G (nbOmYJ?CUo}\ӚO<_)룋؉)Za<1X؋3Z×yNZ5(%LetfD3xwy$.Nk%'\Og=;pVުWduzZ$nSV,S/y˲Ε,nPO;=yzz1ȋ\Y8EzV^N1H`>@/1\x7O>+k1 YG**WF *V;ɫuХVحy♴)M9a9}rb^hKܣ{i*CGU=oWx g& Ϋ{xEn-ӫ5r=SAa}ސuxv'Felb;\A; 2srxS Y&`<iL#lod_\SE,}_KSɄKE[Ğ/duz28׃yk^'5z]HaAeIMV)M\<K9wTMtyu$4;K q_l2Mdݩ.t)>ާ/+&v~w^/QO'qz~rub&GFdB:N|U|ƌ'{Ҏ݉>{0e+xJ15:wB|Uirm˻˸.ゞHH/:n]`^7=Y{T=\Y{mWO">"}l;\}Ve,}+]'J_)ұe;y齗Y||Z-',Cݘ+z~>dp^F$0q y$8ēAm]"dOy#Fe*Swgݒ=z@?dW=l6ܛ+^J^ԓ}#fUוXGne]۔J_IW |JYTSlk*ۆ^-^;r zm35+9q/}ؗ%5_}8JلU7o/q2xC <9k%lWe=T]9G_W,>_J^oPO7h*J^_ pYWBt^_zz1/L,?R̪XYD]^kcZ^|,kתoՍ@{;N|35~~K׶o@H~k`9l9!}g4+olAi&&|mqs u~nDz'y3@Y'&|F&5R~kǑm˶~-Xr>@e <1[3e|JCoKɗ]DzDQ?5yR.E /EI8}13VVf_=`^e`^WHǂq~;/_O b 4)^Ŀd_s"c,=9k#l7gg/~(zm*^oUG,Z=w_J^TOy}+#_pgö61TMXM_u;Lk^'~+YzE=$.oqu#^qogDz]pK8>ߒuxqg, [q( T5>R nwYzd4 2İLOXVhc[(!7b"ӄ-zCM8%eh߮\w$=|:EQK'7)u&3vܩ`XI= 9o|+YzG=J|O^߬#2M#' *lӴm$m$Jo;;;.?Tbu.h;= 뉮so_{~3O"!'3UcZ?Or'@fM/#?Vvkȣ<9o8>= Uƶ۝Z)՜1Ý\^]\1-1xEgtG?0PMvl1j:ט\/;.|_VLpo4OPTNǼmi|̽y\T4~pH }C&'ȇcg޵{B-u!^GUBBC?.miӍ{۱['[n-:]2cQ C.%1(޲U1mC,K=1/K3kx^bڗ|'nVՑPW&8h<{վڒIu+${֭-2$ [___/wZd"sU':eՑБɻPPw}U ts.,?\ UG%%Y!۱U]Bn_ uwzܠdhVNYkKE 6nڴЎSM}RwG2m[<\HSG*Bҹa3||F~*4p0rH~m*`߁~Si?w]* 5C(tNpkjUL={ۚn,%WWlN+zc㗉T! 'CcjZ5[e ;[h%d2z+ٵ;>yvs+2t  InW0Bz{vvH=,cyrug!䦹t;S2plD6l-yv?'֭W=s0wm7u-@1µa3Du=]nT˜oV )_l~5Ѳ0n'C5ms#AJf7^ Z P`__{O%c+C޹Wz;>nFcVILYnI5`cœtEn'Oro]ٙJ!V'[ ob)6؝j@t7#P&Y`7K+=w5>Av#6`eS]:vnقJjxM/䳪N>lvldf]attt Pt#)[cYdEdi? 5RķXTٳ_f.ٚGC#Њ@{gWt>[*ɧr,2%%;gBă9s G' Ӄɦ(=y/&Fk7FC&;ҳ.V_߮;Ci0RCe 8]ė)eoT ݗwN<+'|A]nas#D'm>ĩr^;6Ϗ~p"9oFImwgmvLS3􀵼8#E. sb(勣vXͿm?Slr|՟A,O<;F̫0O CZ^_9NX&g?M<0L;N#DG(^"%WF8Bo>Z O ɄDN*7q_ Z_Aw UF|b%U"D g*. flQB€r3}RS-"DsbO@4?3b5Mn'Ec(y '`#WXA>Ba:lb)jQkr,9.WTBϵć ?廞鄰>3aU3E)6"MVK7?/%~b BbBؿkį%mįWH$~!|?ī7c *"\ש~"֟ڼ1|X_|GU?{S1޼zk aoޚ|:BM~7[ү'mTB;M;EޭfEķ[鿛+~#>կ$DW>=UE>Մ(>KWn _?Dy?I,)+-!7UV˔3O'ϊ|Ⱦ^g-E}m1>"_UdBEQ=U(V|C "[ D~S۪$D|mISKT~&#f-Pc/F,&c7+&d, uӦIL,?"֏nd/X Bğz`?]LM-"D-KZ|XzWB`')r^(b)r^#V5",鄨u{_ 7iN>]䝪+#Dw?NU?^o@HIS"T&D-ixcbKT?/?xU_ߠ3>wDT?GH?B'YG|'|B%~r$n!}zDPdBc/0+oGW?EYihь/W+b6ZdP6"~$VW99?"r?J\B*k%ѾW5'_F QD^lG/ ~9!ŞO/t?jg־7Nq+%"/U6Bf[KNb_NQY۵]Jh?&*ѯNԷAO{ xau"w~!EhGw_,< xkqb+&oy"bL\E޿b׷R-۝\jߩNx}"V}!=ďsWHe{%}z~bNko 6jIO; "c{i??@?R-"DZڟ?g(>[ʛ+SWD)!'>>|U{5Ê|uo+ILE=DBEwoTwEQ%}^_( 7s 1\H*Hd^olc|X=Ϳ9[9y9SdϢ=M'X~!!osxEZȘs"&'lGeW*6:#/>sB{@,ťT2VLR}+!'Yo%>d)?aߐ!'>̹] Qė6GX|z7ub$~"=?̑1/N3_DN눯TD1'c^N ~ >hI/˙zM|^.g"s#S-|Kp_D[,_LAB5oR,W]2{ižy1~ixjo$Dbߤ{l+g oz(.m٤ȟ=[xn٪m->Ւ6wP٩|X/쩿 G\G٭儨E^`GwBq-DRկ#="[R+bdڧ]C(9K"X {NU/bCH; |ے~'WP.#DߥwABV/{*'H%?TOYK|pIg!'~~RjῤwԿ߯*_F⿥|x <ğQ?2<"SՏWDU}/c=(DW}!>%}zoXO,?%R? _b$Aq~ GSOPF@T?Iz N*83ob">L?U?k_XI%b_lVլ/C|!֗%Y+ńXTqY<į _&<կ%cX_:B-n jo·s9[5h{'`~'7XF5q$ՏWo.Rn'_߹n ~w=pkD_\$D}NGe`f*}RYX:mf rol՗+sZ6i;b#\"W( w_܅}_3[yKDZU?^[Ƥm{o%\Md"ebW(b~0%caj'q TUWWSM?koV\@׋lTBB >H~pI6m9HoNUXqȅ{?}9 {'+^DTE]%rɾ_3WytXxwY!e~^߯XBW+?_!~"!Q_8NG EM_O ߨ8$~!@Rܫ_Ek~-!1N9RE>On՗O8B r+H3"/أ/"Ro/I}&Kp5,ߤ#&ܦz"omķ("L.r_):=A:-WܩW:Ko[9,|y 1UN&N=v*֐wXy!\{U_o羋FE:}{TJ?*?#qjH^y}AT?IQףC"_#H|ԉ?J|b#c"P}!族'ov}?%}!3?H|!܉("~#! >CH-W5+oS'*b}iR^{3*׷E BwDwEBK}D{uN؛OVo/'7({ڜ108Ji| L#OМ~!ߜbW(KМQ}-!Ư>zߌ!T?cSD|z[1<%:Ey"nG^`[ڟ4(Iܢ_/b_rrW~*!V- ÄwMv {w~I_+P;D^JB׫(l_MNV:T_Ky=e_.}Ggwh<*Ny_?-O"D|Z쑿?Y1DgO߯-O%^'&ٛ} B}"aNho?lj/% >*E?XȧU?0#)X?`_LZ56(oǿ/|j/(u-x ]XB_?T~ bb?ė+">{O' Dz*BD~jB"?أ~~HLYG{z?p5}~b?} Wď#D '}~#{ė+|ѬO~'%Dc ~6_Tc!~?TcP~<U?c%~"/ɼկ#Ty{olcv/ ~/ϼ|{/k}!_Qw&~f;[0sFW+Q?cAK%$}Q ?}~>+7Wxq5IK/̻#Fя~_[~e{%Vڱm7*9ۇ_to޳j;n޴gy[짎s+*-&j}2r+}*ھc۞7mS{*Mp4,*2XwrlkBT]rݼmcۆɾX2də:̴NN )hg ϭC>r֮J,%1ьBڞ WO9S~^GSc7DM(jEvnL1 ׸͸T|ƍ+7_eaaKmu7m߳zk3 *mHU ]DV&5Ѵ`׶يr-2eP/G:sd:\RP#gʭ'fufpd bÉV#K^z HU(rBቬc*= kHS xDq=Rk՜`>"d =I x0P')tFv7.i>q^g~YpAA=JIy$4pʓy0ڲzPq"i}Q c N^؎t͝HpnGU-O ׶{L&ىs/FƩ N9dF7HC4[R';#|A!찞HHG|"}GH3 XH}qRzІe2ݕɗCx8yr!qNN[̾{޿W(:Գ/ҵ{*rZʁyWg^=  EB#]Ξ0\z*wԛT~x f^MЬO<7,G{#^@_ ovegG{B)=7&妸Pd S\Qk\Q0N8()-QaK3muz*? oG^MnW0eDKvL<5ߒP䇻{#;{uyl[ʤƓ*agozoW r:{wFg}6Wo%W{o F#hԼHTxC޼ī'֠^ʗ~q`_օR[JDbV[aܛCDhtw 2.k!ji#!PG`׾P ˔նvy/$Ն{B#]]«9b/C89$wtuyR(:;Ln z.wݿf: aO$~>;z5 Ny ={/U,fL?ti=Urd|SKY)Suob}aMfC]GӶ^m!3MwTI#eW!}{;{uwJh)<>(_GQ,E, k&Ok(Oq4{̲7֊ejnjk3Xl 5e\SM`Iӊyф|4)=7:`ooV ˺x Gs,ŽAέ|u'k@|՜4&)lp,PJ6{;.7>0Scc/=nF_N-iȩ3p{ҵUΡ2#H wu@>5`Pl67hKmyts( }nc: xY .ߥ#d|K(UtSn`y)O F8J>65IUU.r|+`_O}G{ƕT7VڿEI*K9ӋZҤmxJYfo9ūX/#Ch[L:V-搆p{6Mz蝴N5"evYcSar8evi]j>%}={"vM^CcsKDSҚ/x*iд=+E{{3_^$;j(iuhrt}.m# {@nKO,t<)ןefR ά 2o O)Kױ{_ǞdI-}eU+d-tt Z";wڣj#wg}"R]HhEd+#Z__nv9{={[w33/͸纾r\ŽNW,ruNW:^Oz#]okNN~4)-hy5_\]?RJ^Kԓz=]?duz2x^_Geldp^/ggdp^oduz2XUyL^ǪJ^UO櫿uuYzFwuYz-+wuYzUO[E?f^=07dI=׳sS^ՓjY{ v%Ksԓ s:W=,2eB5t=? ַ ̚ sH{lDF!3uF#Y* xF/Ў\_y\7PZ>~_M.pl1ݮŒDsR"o0cNZTo=72i~oI]];~7]OR%AO/8VުdGh! ]]^2cq_YEڙxN=}(bŏL|,~Wʕ9s/r%˶oѶ6Q7:]Y^e]DTk_Iww^υx?x~y:PMLwO#_u(t}ZCYrr<֊yms3N6!~2\і +]I=9[M>:^V9<7r%KH~^9KRq%KՓA~k,nPOy臈Xlj#S[YIhH4ǓS氒L|;Ncmԥ'8_v:\u9QzT̊}b=aooR-y^=w+ݙɌ(gx;[{K{@g{WhC e6Sf'mrypT*__/EүA1Cs*_݃"}dC2(EMwd7p%|LtqmO_JFYNR՟ ѳ迿h4Fxso7 ;%fi89pppoC@By?G>|ǒwZB0Z 0uJ]1uVrU|rWGUebWVhYQgiѪbzףqOK=s_zȏYTZlc)1+UGjCGkC]nTfRh%3m_ ,Z0CuVfhq䊪h~sñX:NhHULn=]UGKjC}ޮqǶ+cY*fI2(}-)$׺j*JtPjW!m4M[_}&A&鍳 _HϚ4̐9d?"7kl={XY{P<)_M/xCmN0f/0WRFLBɷz# GXu]2*l;$U]MT uۃcefUHD,(ֺjGJqb'M"~"!7Iaw!w=7F\'4#r$WF8Bo') G~2!?Q{*)ď#DBO DM j-4k} 3T_KP>?Ò~-T:BL4_= Q ć\'M+?=?f_3s#D~>!7qGVj_kѾ |%6S}(YD[N|3!<^ل?sʿb"~"}ZKK@[Jۨ|_DF|3!ϼS Q;DvYQl;O/#DcX_F.*rBIaG_ATy9^G#~!?B'ڡ͵9ÄO#4f>H|!I B_N|%!컈V!n og9W >87\[A8wYWQ Ba{ "&6ru\"kYNecďS"׫~bHy׉b_O|Xy"7| $DH(SՔF~"&7[Kr,2W}^*&=jz'>B|#!Ɨߤ"~6! ,m!4͘z+-<_Is  ~"i;E^E#ZʷZ k!{yyÙ?My5xw/SI|9!ǻEp=q"OW{}OV~wO-|FB?K|D b}KGE>1G-q[ >!rᾨ6B'$~JDP*B"_#_Mȃ_CY{В@[K!K_ɉWB*wP& $Dc}wSMB;ķ+s]-<#hG1''{á ;1o83~'<]7/pfwt&>(򤅇j'@c %DݳSю?O?!_;xR=#PS 1'>Ls[F N\g>H|L')6}a_LlŹd?y?-d a?k~ 7})UެJ6T\~ 9=PEiDKw|.0OS5>jLvO%DLG!¿\GF_A>?Wj#m ͔?+Z& 4#QCbO@bť_bn%D|6#ė=ym|_yf5F?I?f|HZNo#~"ô2 Q7*y_E6_Cr€ZW*b|3c:">6(?Ɖf/'Dnb?IgW֔Nc;T#& \zB{Rz Q}!Ə7*Φ]B|)g!ROU~r8qCÄN)2kQˉSl&C&}7s}/WLSD-<꿟W"_ChyIk9Z\NOÛQY쑿/Wմ1O#D^#r_Ŀ>Vz'7!@u>=N:Z_c/ ى&)ˉ-4>U\O|*r+r|Bm{r"w~*!"oćy~xȝNx=I|%':[x xMfmwՊo[7RM+-,[K[,4~ʜPNNw~!]"ZOV Q{U?{% )"LJE}P>7H#{-#R 1mqNO/) O3c^{x9k'8DɗLW)WP}!kWb}ug| VE|!7b&'jM#"WxE߿uj=ė+j<*|'#~""?T}%!!U(D~jB}'+7A|"OJ %D-g=y(oD~~+=-%?ZGϗ VE +7PMH}Js,Ho"D!/o&DSi=--^3ACN]o"_L;nOϳ?ArDlca-Gq9-_BxBc/ ?9g`m?(gVE3/#PlNo 9?ƒ>c~.O#Ipeeqi$~?.șSE8B]TkrdȩuN=_ƗsZ,_-劍iP}!_c 7+%Df~!7l7(^BeNY=>R{o_m)o#~!ub֟92DT&D ~sV_AYE BOfYJBV9{-uW)5E66˹b'De٢B_ ,FBV| Gw,B;-K +3!BK'g6!ʷ9ߥb5;,Cۿ I<п.#܉}/n].rX."~!꿛*BgH u}sȀGLYb3@k&D-Ŀ=x~_^;S֊w85لџe_qfaɆvi۾}Mȑ^|uX=vnZcM{~0bR&w.C+ҧ;Yy1?OCGlMN9ʢ,ewrE!Wrde-D3w&ʰyƶ ۓ}gyCc;8+э1 ""@]B c,@HXωӟSb'qT;7%N=qK{oE`:ߞ3gfΖ;cI̶.S7Al[́2ٺc&{,%RnϦ2{8gr-'*wۣ4w94aNWp>M`8l"1Pα (9<|0TڱoC+eJ1):-Q9EY5~]bo<^*ʜǑ1/YW.gݬwNg9/vFp*kǰzjإ=x[-Y-m6r~o;<߱7Orj2#;bB/W2k H-V| 6곎fe>,k Џ,.ŋ"*3!c">; D=9hYޢM3ư5ھugNk{o,3x[u;,ņ4֓h5@~,ۺq%/V򋇛`WbcFbp-{ 98'sB'Xu95njV-_ pVhMamaϷ:\R hpN=g=zi)P~&xגrrƉlcM!<Ow%¦+Ndïmt7:nzmT%] iZ˨Ap+a+Mzr:Xͅw8ٓ^sln͞mR% .qnKCK9?%{ r^ &])P,RVË i^:#0bq[C k5˲:ƶw *LN;YYv=kuQg `9[ & ~c_tN#6{4>$Cy;yW(9z/{?yc㷆?d's).xcߚ#-ۻ'3sF{bPjO>q}kNOZ^ ã}&=BGF| 2 LKonl?}g yRAߑrN>12>#;{(=ptTW[ \-^𶣟d8|"B04hʹ#v>Ŗ=w-M8;*e#J+ҥ^#w j˩aw>sJtV2yV5UioGm+js0S{V-6դe^2SeJEZrȦz7}ЪpF1ufhr6S 3@Z []5X7>*kҪ1A}cWip)*V`5%b+wKG\?_ *&Xvzi365y̪!ʹZ5qZ}]|=-W=Ēũ;y MU@E|GԹ-\H &9x%6:9}LMbc⼻T*ʌrV+/3?)#LYرN3ADOAV_оpktgL%|**>y Ayt{,5hnA uq)m&c}7ӛb/Yrgm{_vcE4q{˃i]ɞ=diw!"+^>AZ~޾ ngs10>W5vIbtBL).ҹINmEm&6j9{-}DKT_{Q*B&>",|7n6x,ج|^ ^oItI&?K i]n1!(rN?M#~"Lea ҟMg*C4B&~!Obg".-E}dq* l?-(_JBB=/.lB_5ir{ #Olчu/RĆ/z -&~)!k 2B'nÿ7*[M*_Coч&*z7}_M/:T, > FeXXZB;h9a}ŕT;>Fi[Q1Aōd2Py!_WY_߫]hcaM;"En.k 'D@*_L?b }M|rǙtL+Q1UdפTOuoTd'caڧot2^F@3f ϓFy231|ʋ ?O%~˵iė_Jg_E|%2x6ՊuN0\ү'ߠD=įRĆ/4#D| ~=dҋo.I"k; >Q兄?Mc嗙t(x|I/V,ۤ{U^Fc}ؿג? }*s(O,1>TT_qG?[ 6 oU^NySX_OB*'_@| !Ɨ7_{IoQy!{mJևo!~o j,A|-!I+.qIQRBϧo> Ѿ5s#FB/'/e _&W)ru&Y孄?-ߨ| a_O¡}7B73? U_ <o (7,+-{$*y xEj_/1iE:?JLtMqq ݔog*>LlEM|&=S#+#ML5z>_ s^R u|J_@9;Bgʚÿ/Ul5u&BE1?is_Ks,wHmeKWy\wIW|5!Ҥk-*q7{u>LThNK~)E|!۩MVVBw$Fu]2W¿ģ:A|k/_C;akH>B87\)Νy;b~_c^Xxù'|<~TJ([sM7"~z>/$DiM[%q;ń/s;G 'e Ie/"ˉT%#=/V\B ~)!_I| 5+ W;ojmп͊zAJ/lۜwNpe,g8pz+;ɦٮ|!&D~IRB;cK5ba/zAӄ_[߇LK ?iy1>edJWEZB*!DIWy9!9hч'~b5EH_R~Z_#E.M Qom>& ,Um)!D@\E}Ώ,<'?&TS~?NC7;|!u[p2L??K+?;Nb| 1~H*Bo(/%?oTl&B()G?ķ*+6x|Fx|6Bd̈́dm< ~2OפhO6~l>M|"~Iq*G4dE_oE* KNчRKI&MVRBo,?e7z]ME!_CEg~W̽3etW^H+&~ob%9_s o4Ȣ_Gߌ)2'D~%/- O?ӦW(ba}D_H7$ͽL^ _s/\cчz(oMBHK_H3'DZB' W~ !o~paڿ·j{4V$7|.!\+,b2o%vXa0*#erI;-zdE$V">;_L/3 %D|\jBؿҾ?4~d B(77ȧ~wa#Q }$n/QSLz+~Oч_[Mzʗg<>?e<|IQjBca9y<*BאgE_s4*/$Diit9A&ʢ"Xwt~ч{-UTjyZWy"3}?Պ<|IoPy!&עo ~"hқUH}3y6vbi;I.Kaڿ2>2#*I߳GDŽq/$m>Eu0S*'r}I_ڢ?C"D|~5kL[}%[|Io"D|-ە3C&}C;_ч߰Mc=o=Pe~#1}ù~ۇCϰϔ/Q9aE Bdz߸ߘsB- : Q'GrB?W>/T>ϿhY|mA>gg:a*>)}Ot}ώP?L|jSy1O|ob,5N al>#t%ٿȤU~ƟaՇ-w})/_Bjw~Jݙ{g?Pgj&GQ?Es2۩J ^≠ZgG/S7MYS3eM<|&%e3Ufч(6R~闑K?/#LxsUH3>j-k~E ג̈́(_|_O| !7u:B릚,V6ho#&o!rK|n"U Q?B(^í-dvBj_X.c}0d=Z&ߋ%zE>[A#z5wtmgqP`g3N(dwQ}Gr_sz#Sl7G+)a| J-Dɶ[:s^Gof[:ZS>f<ˈ=csͦ_3BqG :ō>Քr%|攏'lonܼQ[;mhE\ 2[)f|#a#%C4Bӟ 9e;ʟQq<΢.+[`ϳoD{+pqeb>2-ӣ|?#Q;ń~{A8o8bdןR6PR{JRX[M\VTulSe!2cJ=(rKNUsi񶽾JVB'8WI˗ZK>mh|֝ |inpbm o@&:L[踝걛(/]G#9%ʃ; 7loГ M |̚C6}٪(w\ W+>j~/ϡdy!xGJ3NpQVë,/Qw*(Iv_MW50:IKmgмI&?3چ;l;;jJcsf8z^(ʱ99Gv\/0WID;k8Zv*t9E^/^cm@h9{ SaGjjn\w ;3?tUI>  -}p|u=v0.u%Wm Z +J0]J4])FFd/G>RU]"9s&!%??aF-wf<л8А)懽(oBxGN>5P'6FFZm1WT2B+w1-#-~nNׅ82zeᯊˡ5 F5h2_Y{MiEԭꖨոnY=~ַ={hcs{r FKNWoHAFܯCx5{S;4ʊ>nG-H?ŏ[Kfk;lFlRNAFO`y(GFp`L@oHԻڢܞe8l 5q;+.1]c뺲tUƇ]A9JSdqsZ}}=߄S]^i)aupWeY3A9]նi%ʨA=B/<Zy`1:<}}hO=31rZʽwm~|P&Ls3!Gov?99 Gfתv5IbuBL1. E?#NXe^x ʏsR/˿vO/ (O }E<` #Y*{43Qw*eA[BXիUW>/xUbg¿IR,%.!eor>|D%ԥ.}~!F YʏҲΰ&3s!~!K?'|&!O[<c<-PvKWI[|_l.WElB_5ir{6#O/:)b R=@5|![x5ߨ%Vca[ȾlGZ턈U1R>ZBP[ }}6_KH|=!ڧ^Ҷ}dy,3 hyDkчįUDwԡ̈́h1a)f/B/W~P!s5hhm gчoP֤*_Cu~*}y(vX[ >ba|[6B?dߣȷ˃:<_?ѾpeIGz^uѾG(rmBпRBD|"ҿJBx`~nh[H=&į O!~"__jU}t&unuб?U>CS?ˤo[E9&ݦلM>FEOg טh Pl wb/!_Ԥ_/'E 1 )^N_mkU~!&F_8md&Q奄}#ud-&M} +;MzWbaįQ-~o$baoRI?h҇TA3lߏ caė+VOYgba).#_0K*o$/_դTLba!'s|>xx|1?d{T^H{OSA?7*V^G?0a>!ŊG&De?äߟC)EZ/x>$IRL'_iG"~Ͻڤߪs8ݢ%~bOG| !槿'ɋ?ѤXߟ_&U卄h_-7*_!?7/wńZb(|~)7j%&X&E\:'UZ~f?V<8_K_ob" Q߮w?eKLVvB%1_@/ OПLL9(jC?j_Ws/"/a%r< ~bB#@3isE?[*/#D:>hчė+S^D|5!⫂Z%䟱RBgDEULq9o#x?1_G*E_)([1LY*HÿF7)n'V$~"od|2eN5_A~W~ Ǖ(:/XKH|=!F|^3uآ&Bğ+Z+!+lS*Bok>o#~"Iw ~=!״ibGI!6E\_Ŀ+o'W1j &턈NR| ~9>20o8wkh!?pOqיo߯pN)jࡏSC qClX&[AP?nB'DIRB+c/#ךt a}ؿE~/k H|*7&D٤Z[_뫔&]孄 o3};7wXp ﲔ޿ Bߪx!_x &}HQ>*!!݄(G?x¤O}) Hguk<-oj}%t Myy7E$~&![R˽>U>;/P_E}E}ͤ#[{ߪ<I[xäF) q8H0<_e}kkBN儰/Wiч%0KITy!1G+67/'D5Ff)?_Q B"~"O7}3;Kb?G~\;?P'964>+?S:~xtIN"~Ʒ?IsܨbBd)\~QW*֓/&~!KWtAZE4',<꿈j$gϨOR_{EN5m9}7/u@奄/uܢ /S"*&}I-_N|^' /#D|,ч א}V̈́hߚ}دKUPǷd-x~$-!x_J/_NNk'2vM!آ<xjTBߨl bB BģoTG3O^B6b|NB&Vy9!gI[Q?_XG/U| >WXR~,yׯkFG B?ך_3 >&ÿcLRy=!0FoPw^,8' ;Fg)͟믍(Iڧih~g(BO}ʋ >'GsB/ D|כT^J({ wIϵn"L Lz+ Q>o㉯"Lxvi*&Dn1I*!DbGO"V?٢Ok"D~A8"~A Bٖ]AKfo57\CDs/- ْ/$o94-+Gj˜ m+#9hK#\y>cFa̶.a{t7gouLj/qIbu?lųٵ>y[:ZSa3"̖^έzr,*XSQrߊ4-7`0c߆V`1`1,wϩGC }"g@E\=Q=}mwB!jȟC؛? }[ 3%:#Y{F(S#֜éT'ޱbRXgD͓8beٮ ΙӚq2Hv sRxi8n Ijd,|OWV.ju12Kʉ`8'`g5scאu1ғ-5yρlKo[>u'lpР-AG[o'5ǎ T2-Wc_&|0#z F~">x.:2c`&1qtFJq(o]Bh:3+WFr4" Vߎ`P"!]f=ve..;{ Gaa؛GvΓއY\0[>h^ej"|X'Oh|w Ÿ"ZAxCnɞ}^M{n(:#tɻ~ (r汮SaY ۏب Wh MMGM|1_&]-v"ۂ AERCfSgn4t̍auIH G+5YYa>k'ECeL`-.4Zwipf)Đ3l8tyDC Ŭ0f8S,W YEm$gO(|w/B&*#V,Ubo*rln&I$gliic|c@ \FȢӼ|cؚw=8{&}p@c,;>geU&x[xixVg[TeU)nO ܻ>#r PX̓y$jGQq8c0˗l&MBMjxNp+̥P&:L[踝u‘ j;v R+\zNb^A *Ò. _3vFθ»O]`vKCA2Vԛa=t'|5pCgtLzV~N 2 t{50.tC~'{!F{f^~/4xȩf9jy`)E Jˌ._)_\yqp7K"Ybʔv2; ~2U$t| | 'և?>}_%?;zzZ34ٕ#\:&uξڿ Y} t;'L0ƔIIi0w&cŨp~Y;_L?sp>NcP灁>'R7}>6~~2\,.ܖup'd"P~ ZWu-gΜwL=~⵷B$zw7;OW8rrξjA{N2;\h&qs3:QV+7.}Uv p~|f*.shZQ8_GE*J|_8|0'$(鳖2EL]וTk]ԟZ[cR;F?&zJ&3ck .i=N,ܜN:hPzo/ʌiCˌ6TѠfj_ε}Rf,lf"_?[& 5daLW(i%q@7H2HWT댱jfQU4'#/潁$AjYSmUuzǵ7i}elu*G5ؼQQC%n6E56Y^8܀:]r ~i7\{{\O~E_3/5B?f?vDOf*O);]rB*^Ֆ~Hk͹yf(1DZ~蕑tzHgO:}du ɵ̙Y}$bfxYit[Ӓn.؛I#?{}Ooi3V懎~ej}=z+ۯQNGrGvlSt=gI롻_{x[˿vO՗d?_dF}E<` Ym43ݯn XGpyݕo aWV}7^?:坓$V¿1o)#HJ]4B7ea ҟMg*^d7i/M r?Yp"}?O|O+%~6!+#>x}xz̥ZF 2BWm>!Qq5OO筡чz*%&B_ˈߢڅ+U~57>JK]MjYy鋋[%D'AC *Z>o#Ak(k ˫-Ffj9g; ~ؗkw~">vYG땻o=!;k{UAG{hv/g!T^9>%D|"s7bBnnSZT;Lj_J{MN aD>_GFɾLGO B}?e+JBؿɼ~z}U(g$"~L Ź˱wvʋ ?O%~˺O#?пRB?rE,+ u˟M|bߞcs-<繤_On#A'~!{[ ~_h*_G=FA|+:/vs\A$w:~2BKLKsK<ܤWX]+Rmҽ*/#DC>kɟWBBԟ/ǻ,T5&ݧ򙊘?koO>يZ>wߤ׫:3<'~b/o S\Lɤ٤[[_B[MzH)!ۉo$wn &&B+1?}BoUz_cU}AKo$^8o!BE|ZB/VDJ||ʤϨ|)!&EehϚ9 ϑ~#!yL/ B RJ:q( MooY¡}7|UN7|?"~9!&={>|}I?W:Bg1s+_o%D:Fc)?=6By}慓|P@(eq]"/R.qo|3=[L|"]I9VkCw)2B?wOn>"\R-jBk?S*_BXx*o&UD#qQ>O$~**%į!D'P焹JL*[7ӈo#ӉLL'fZx7jMYo ϡh'D_'HCwL5(|S򥄈?cEL_RT[_[̈́(5-h_SWZ kI!#~FMo [i2 ~;!~t}Ώ(J'y\DH_F%I'c:Ѫ5?S׉.>o%M$6|-!웱"aчķ(9NlV&Bߦ}Lo"]Ѿba|Mw>sr&D_A5:p#A䝄}5%?x +i'_GoHG!97\(Ν\P1o}_ ,W|mSZIy<7}9M%D<>5S/$D!IB?2ŅBW*֒#__HRBN| + bW+n$;o#K߬N/'~+!]o'='zb ?JZŊx?`0JKeUxNw儈&ݯEbWLzʫa1&kT[_B6) n;U0G&ۢI*'"ˢO&ZQ?!US)o!DOVŝAwfL|Ȣ?H.+}z'U(w.3?'~!! +L'Mʗ|ʤXoT\IIS*BgME?Gj-d}N틖W}|,&}K 7c(> HWMM!c}ù4=84?tOw2K_?KQ_">ME_!-5|}=K IOķ />L|"l/&£Jm)?Cgտ?MʋQ2c,RDIҕ'DW*52)_UZd^>[WEU^MWr,5>/ S4j$'GX&S/9i>Mn}rʋ 5>SyR|W*֓tBU_DBYįUlu4cmrG!EN~I~vƢ?K_RڸL Q1_F|"?ӖJW1_i)?%U^MWK=o9!f߬lm_A_?;LPLBHv[_ENؗk'I^zBw>_F|zoe{Tч=ķ)^A1Z_IbaZhAB}"!S>x!~!⫗"E<_IOVy !:O|bIWy%!?e-}W6FWb|(&>Ͽk Dl)_BDK>ߕ9EN4B?Cʊ ~ ~!ė~EBc{١ _onS~<[\MdzE &ݡK %n7m}*E&DE>쿄Y/s;MW Qr!DxIw[ˉO+'wYB=ė"W|6>>쿆<֢}_5!~K ?57_K(^ý<zƿBї]ʣ߁{<74~p2 }K>|?u'qt}_&ϾD~'ʹ|jw!. bsGbiօ==/0l~Tl;l%ml[ CuLjM,'+}6#?/ϲT:uKGʣwej?V=z.0w.v8g3dݸU9>G ~+s7lnހ Ĩ6"D2 3/i >wrQ 50z߆ur.94BkǚdW!_;?Wsضm[w x?J+m:M*k?#?d{˦IMcT\Mh zk7@]F 0=9s[?C*>,oK›-ŷfԑ;ynw¤&8qM36T_׉آC bOJd_k4V-CU|h!]-0o"4MoKRǺz7.:/bK˓݇nfZL\t$TAtl;D~ S]i$j+QlAm.hW{: yf?Nc'n daU=GtNkkc7utH<1(~mcChl3X?LtטN!3de#f :AѶaY;yTep\MFUUUQ!QMM"\Aeub<0QtۃTn0X`k!?2m:`ѺaNX>߇'ҵmӳ•OlA2b+7" Uc͑b^^ņKC6'F0fs8{6ŝ:)S܉S,7 l4>e ,^s&?a o w/peYjw r.TlUY{C\~3{LRkrl:֝`A&cϨ^VިzO`0ZE\tL`1l{@aߒ`֝ \jSԥ%CUf N˥ц&:L[踝 j;v{j])Sa9J9 w%Iz'>3?xf KC}m7yC}(t'XdV,,`p/ar|_LPquR&3gz "`GZqFf`=Gւ{{\)O9)dx]vL`yHjҿvo?4pzrЁ<{nyNs2Ϯ1TxQ.9M̙3qO~u(;,PMG;|$`1˹a/Jw6-^}{:?(fʴ|VVHze8X.y] ) qSKyAgtz4E/7eAVK/JaySr?7b\GXiзxEQO~4֨<.;]"}MEFHj>T}446ڋ{r@>* [xTP{K-4Xc"ۙ7 kub'c陼S7JlT|$9Cuȴy*YSxݛ+ \m?z֎Y+*Qx"|#P21tp? 4-1_ustف=\2tDH* 8\Q:j7pk]@MooWg eD*]@o@_]f/F EqízŕgMvm&lVՔWĺnwy2dL>ZSUS9P;.޶տmZow`ס7m|:rm=HJ1|U֍u9.xebs uľΞæf1}1@UHw8q2Fu9螝ըF:yXLUpʹޝkVFs?:җOq?0~ryNbtdў{2o8X^3|(o>:;۷u]߸rȼ; Gr/U;*$1;! %_$NXmvx ʏsgVK-yEDeB!>7XaxmdODw1cy5iYPVxjՇO:3>ކB oɿKk2R>?M#~"sm5D͈ч3SisY2g¿4ir'Z_"_Hgч_mĿ|¿ȗ¿R/ʈoT\GSN~}"7(n'Ul e:%Gm_c)v端N6ˈ%D4_O7;+T\և+oP\I'ǫU[_uy!ڧ%FYFM}Fg hv >[/Fi>w9>N|Z?|;caVd_ȿB}.ч+,廌=TNt|E~^AVyK2__?E Ź˃C U^L=L$~rC&}D+߇ME}1 }>U>Nj5d&}'ISYķ( Q'~'/%¿/ÿ/M_NFWS>d-<:% '?{IQ"'XC>u(_O7hҏUDI*_A)+Ws ?'Մ_Xg_߬7ķKfŭLG'mPE_B*'5*C[>=jBw^˸>C}Wq4/s.VN\t?-%Y[kFd0R}St}~l%:;@į3}_O|"I@|%!F-U9]bEm&Qq%7sV"}qEg*_C;_KZL-1|O8USJ_TNM~?QgA|)!чB}ݡjTyA_i&|"ޟJΑ G|Z%~M:dna,?O9'/#D^-E"gfB'$=N[ѻrN(H0'/$MݢB|b?դ|.!?ͤg[a+ }nчgX/'p|"sR\6?G#Ey;2BM~ؤɶ Rw2's pOeRÿ?Gq>E>.q"/U!_H<.q|UƯWߠH_iҫUD^ek-/W\G_ckɿB t姇 &I MzEDEn7[} x"_XEF|!o*Q_+.%|*_Fe{-7*!!m_ qCAf8O"HGL~>j',cė(.$/$OE^'VA>}ʤϨׯOK,3/V\%~5!#Yy/e>"/Yɿ~EZ~A<(7_B}Ӥo|!-.9M|"=O|ǢOׅk'D|_RkQ~y6c~bOH!{XYN/_M~I|"S?27*_Olovȿ?fEO&E ߟc_ W¿߬|=!w>iOpc_2I&B/"~d΀+ T1\OWoxQ&| gɋb}Ou/b.ikkןt&ƯbO'u*ǵIsY7j>7x)&&^sU6M$K-?E$I~%EKVRO2kq B"?WXg+  Ӊ~*B[PgR_1QsH M*I<^aGM)IrEOKVy"Oص SW5*&D>_C|"OsMH|1!gI}o!AJa|VfB$Lda%įSe'|!w[>nimwPZ2J /C*?W J|ut@E&E?K1tXs1]ģo!gSh#WkQc&#**Ǥ*o 1+~I'U;'-{o5!`?_@{C7~Qz2&OQ}r~&3 1|O>ۤ|>!9/PK|!w5~9|B7*6ķ oʑVE?E&£_Lm^\]˝&ݭ"B]&΢&~"W=&B Q+/U$6*"D&F_k) |(|o 7f LubB|\[bxƗȧ| _O#!g( ?B GPȿO?}bo|*/#D _>KBB9⑪H W|B|RTj|jC*㯙 >! nWy;#D&%-d}0>6}(֒s盿Vy"O#~'oULI#ӟc~jчNqآJm$DR>~ꯍ,&N)_<xE_CKXA_M4B_! >_)}Ot}H<%MSyo*y-_>NZ1hPKM ~֟Es$됤.bO¿Iת훚J4BW@ Ź}J[:} Gח4K~Ӊ_@?%Ry))Sgj>oeߴ+ Q>ܢiῩ꥚Pǔ|>#FHX|Q ,k"r儈į 3Uiiz>*+ _%>Y. .c}0 z:X-˳K_,IߺP㷴ߵme?ˍ҇~lǮZmi7 9Lf[yCNyn=eD 1eݶyKGv'3$ZFcJl2Uzɶ* ;Fng [wRJPi-jɴ0i ּzJ떎V s²l\j(wAU<>WGJ9ܦrM_lPα*]G ~8<TF #VsĻv3brʐ#Y@`ָͣPuQ#`⺎+uq-V ;*| OvV g1 R b4ME jep(!]7tٮ6N.C56(\ȶb H!{neaVCa/Kic]",]#6U<2:lVqıQD'Rÿ 팇w )45I\N]8Fql̃ X{lY8גWE΋~gpjf>zE5GW\k}Zn36'Nǩ v8/7. 6(6_1MtTQ6S,׼+P6ζ2T%>ޒzWvFwxWG.hihW;Eos\v5f'vr8Z78Z\;2pkmp:8[{{"VCeJ>YJt~9$98= 'z샎Ckȓ-sdO(|w7 [hO37^򨶿kt#Ə;pXׁ0VE GSe9sOx)/;Xk [Q(/uC*QF~JJRgOdoU{ d9Z@b/ jg({7ۓ)gW-x7BӆE1 19X'sOB'Cq9NV15>UWlZw89&5t<z(Z;g "0U`(`=Np2w*TA`MԆ"`mlRžLKr"D+y1ysQCѳQ 5]q'~ ukMtq;ocnTT ߓsSZ x()p=Q.jxeBOb's=DbO*wN*s2zvorvx իW*^3R_ׄsw;3A ϓ행7M3VPLn(Mwa3܃Pqr:PqAL#rz&7|w[Ȯu^ r,(lWӴq/!ҩﲜc\ ,?'KoqFN5˱YIՊ{9.qG9CExa,Y5R%N$C9Bx'Xjc!ڌ=Ҿ%4Fu6ȹoY y=)|x /46 6xseT[3tG)idϠEgcu+Eq^+$~{9L:e3n=~GC>?l qz8Ҕ=ULq }}tl/Gy~ugc0#DRB#5\%g]3_Li|b's[j}ȯ=8޿?hbV@\{QRsՇ_}k{-\-ob3mKJ i̭tPaYN ґŌFl٦S*%ٜu4 k A7jArϚQKqHR+^feoUnPėGud2*xAYv"}CEXW*2}.M~^k6A!w Z.MM{,)ߜ,;=ם*k.m9{t)x(Ɓ~loR%% c_/Dn}~6!ꯚb9_=',E_= o1K _ɗ¿%ןo)k}Vʛ Ѿ1dɿThUʏk Q-}z/&DW[,= +do6"Dmч6KB[MkW~^@ zBԟܭń]/@D&A2PZB1%Nf}:~|!Z+@$~!꿋scy;'xiD&~}BMB%Lj/W\D=W /׎^{¤,<:ү'}7(6į '_$~OtZ_į'LѤ_;<@5ɠU#'viH,?ޤ[T>G1LzEB|"hғU^FydK?f=wo+1IPLE/V^jG ~"/|IVy!Y&Ģ&\ Ɨ_C /cm&=#Py=//V\BnwoZho'uK%c^{KX'}.Wlr?Ry"ros/(&} |IULEO7Eي:">7}'yFެeM&}͢L|*ަՄVdчK|pįUl%e{TۤX{@{I|#!baKZ$~V'Qw*̤O|7!x>+%>M>B;:A|}֤Yx9"D}މw s_v }90 ߘwǸ aP`ᅓD' I|w*JM!;'|RP?nBBߟvlT\B?%?; OB_ė).$gT  U?$~#~)! į$W+n$qķB<I"jNL$~;&!!sED_B>Cϗ&M!HL{'_@C8Օ!M\J|PB/OW\Bߴ}?yoʔB؟_ss$(&Zχ?{,ń O7FJ-o> MdEKt~ʈ_웺Hk1ȿ_-X$' ¹GS Q>3VdaFP7$D"~Ɵ;HU|B5/PD|Il4_E%Fu/%~+ͤ„F[1~ʻ;3V&6Yx&o#D|m&~'6$D6qEo#C*'s C;G9}3WN\(e1|4ί.BWk2~~$~!~g(Ä)K⠅GI6!'M4B8g"t\3 _Y _tBՄ(_o> Vq7[ _1R>?ί/4>7?xg(_`ҽ*/&DBŤPo=դ,_XtnUy%!&آ_EaҳT^Mi -,k&PsMm_G(elz?z>+_zB׋}|/! d.%nKN3owkC^(ߴ}E.pFl5 o c W~an0Ų@3SmKd]G~{pxlm, *l==?uFd2>L/ ':+gg5|uQ5]<ܜ‹|uB{l5MSj9! ȭ[-މ 6]j,WfPpNڇvF$~eھP~&x8֔ Vݷ.&%NwDLΥRm'NO9v38ї/1*|!|{?tx1xТԞ\uxwkȅ?;N9fA׈9-$2UbrtS7\3KGegj1ܤc_s<ƃ-IM_3=6$|EڻeqUC]]}]L\(LLlC+^gR{b\ahA{\FڄDfkwԖޞCz9bH14Č'z:]}-]?#\F`ϸ-yʭ[AmT g(:K ʞnds]J˂~X׳8Gڞ-$`{`iSRܿ`mbb ţ[ ,u NQ5=@o7Nx}Rse|ƚTY:Fd_O) 6nNX7|3+kJ_E|<}kǘ+6]b2ɺ?k:=XtPn6[ݎqȯzߟ(iϼi[y]vj;cvܐ%7ѧm*47 $ߧF~z_΢Mm{n;2?yӘ7a!tUpi? Or ՘P+je 5b1y{ilZ"8gYl.䯒9J2['Kr9lJ;*/F=w 9@l+0 -t>=pCq6b\UK̕d 2M ]+P.1s~O B2I4ێ8}\񘡣XWhƨ˖Kf!\/]E$0%S˿vO'*^D2P|>" d4u43Kf<~%1%+,8.FW>.1Kf,E7\2MчSO9Kf4B7g9Kf4B&|-#m@W? ,OWI[|d&DUvr[2Ǣ눏[2|![LRB dZ>[J|rj_%WcaUNtInYff$}_m)_3kG9%7_KH|=!ڧؗT.78%8Tjæ[_pPF9m>;caR6/D/W~c_{h'Dr*%1q}MTך_ Q}O|/s(F[MGG<{t|Q^оO#Do[R\F|"OxN<$we}Ӳ~!KoYjx&K_9޲"_F/7U}ؿFBݎ{O>kɟsUPK~5~$k-<쿖W,[g5½EkaN4>אpfB[oQĒYRw8޲aI]NҒY<>0?m. .ğ7$~"?%4*V^re;K[z]_,3q/'Is(^rgU>Xr?#?[Q3 */'D|q_H KW)֐_6*%_qe)So0H !׉_DxZy6/'Rq=H>8A| 4h'D0FR?LLr!!K+Q__E.pgT^Mv-5N4:w w"/Vwn O1g87BcaTa?c3ʻKrt|HyA_M Q~g(b]s=e]l9}rآ?P7a#rGx_DńZaYbI=IHLzm)M"q!eKGiEKvOSBBOa}؟F"B_%W!jEiSY;#"ү'. _JHL,Ȳ#&BO~KvۗrBB/#CJs/Я ~wA$'2$_Dal\^ 'X'c0zY5V?[W3˲ݮ\+%_rB"T%̵"Nuό]}z'XZkEdoWk}>o Xr?f#zGxo& 񫜌%]wIsIZB[@/"D_E|"[{;.[ч{Wl טtʗ>]9Tq9te] Boҍ}?@JE}A| !ڧ+FˆGx?[Q[7P8ޒ"H5E Mq'u,+ D~%OQvE7R&MMOHI.'<3_¼뛼( OrxQ` >?rAzx.{g"dZav⋜%BߋbaŖR-߹Hݭ<냇%9"~(*/u%U#OWL+/Fs`{ -@(<ʫQ_ч/Z_&_K2*WD|kJ1/S o~m-{|!}%Wdb_1 s~rN_k>i+~ ʋ}?k-< ,~+/ϧl_U>KO'-Wӊ(LK>ٌ?{&[e-"g>; {IcI*/$'?Mwɱ&'6JYxi?$%K,4,SB俀RB/%xؗQy"7ʉP!$䵄Tʢ+#J>=hrS$T69urEĢkd"eė~#þkU^ En_s/\ZBgk,uڢ+k}ynMǓf.ܠNЇQ~3JnJȾInR|BԏIn&(V bZ?#FaI*Mwۢ#qs.yKqeM_hI;O{u<%NZPrIU4[, 1>e)9N"~"=N&~pǫ| !?/%CHχG_HϷLQBqNẌ́ko&ZB}u( QoTB2 QMѢOoo%ɿmD?rEG6k #^q|^&iч/$~f'ݤ| !}%;|/Ug"DC|"5*'DчTD+ k%_Hᅮz/!D.F>&/%D߬|1;U#F3?=!̿OǟRYRoHxvBϗ>xܻ#Ͽ?y1K}(%I}̤O\6lj_ė?IW?E|2Y>FBb-C/ i濢_|Y2Pr偘~[y}ù? ﻡka+/m:EO2~?~B<-q$U>S("~d3Q_Hᅭ$~)!E|b3BooU/?Iߓ~!o&^V2Eڮx(O2_ y!!O#܇$fʧ;G?S aF?aGI<?T^Ew>ǒ?/_5O%-)kqcO4Z半Q(]B3_22},5NmZ&M87)n'낑"AYA$KB[` 4+$7m}؟A|*!_>R /ST'~\ǿdܝH-! o)HbB7Dq ~ ^R+_2R-<5'D|!~#^Rf3 Zg'?]RO#OڡtIm0M afGۈ/UgƴW~6KQ8vKkan7*gI}M E\f*o#D_n5}ؿM+Mڣba%~\c)?T|9d~tE?K?&U|B/чǤ*"}?A<Go >@RE̿ wҤUq*F]oG8}%6x1.-:~|*!WXש\??(/&ݮB3O3_@et |>6*,L8߿zB ,+_Sdz >wV_iV}^F|9!/$D"B!{/񵊸4*_N7YQ&~!5&ݧ򕄈ך:>G*ŵd~ZBy|coU^L,ѿ?G| !/ DI_Vy)K&ʢ2ex"ŤI[akWLʫ 1~|ݤoYa7-5-m a_~_ LExN~[B}p~/%DJ2BH~m_['s}Y胗R>az8}FbOre;l_ +Һ~׾掎 [m8?;y[[vmۺ_ >UZfۯ~t^[w_c;vײmk.N#igaPr+Km?O! uUc=2AIn޼#j;Bl}TM8ٺ=Z9?dVPVY]]IF 6dh3l1bݹв l/kCt],uϡlC22aCzb5egnh*\uTv:t~.t%L[x]7t#%' h"#۸㰡sc'ǛYUH;r}nB gEvC+©9?rOc谪י-7&v _믙}wӰ )ڣ]AVss䬮:Y,;?MT d>H}p g3|{sX9À@sKLMŶM7%X׹/i~ɞhZ> Ď#p8e:s{q9{x't!fT_ɾK:هhuGƮ_?h[t m ,ܶXNUUU+!a0vQwUn+syTpE#[ԉ7F.Uz} oаGm;[)[; sCS}qlY[|gؐh{kFkaC8ۣ ٗ†#q0ls(āc[gY~EbU݃*߽݄)i^ ]ׂCvKs"wqd޾'uK0 !*:_odǃlOfK:Ah ke6`M{t;W51qڴxY&OOF:} )ׯݑu=_]ȣ!PoZ%AvgYO:CvnmA66aM1&y' F"-o{}QCc7 =^̝O Dc]68aܱf!t8 hx?X޵T:n!xǺtwu[tGױ{ӑۗ˝q+`WSdF3-0wSt߷mNl]뤷:qbROwPi"̏2u l;Μ)g;^Jּw.坓sVw;[1^ꌓl Sتǭ؜s2wEr:c :\'^pe즋U )go]SqyzҘcY$w)*87qқ35k|~ gm^m6EzŵpN⥜swL'8ޚ]=YV/RK;n*D$'X@F* WlZ-$Zlxԛ2dGdS`EE1!+="g2It&=nҿ'HB:Nc6H,%}Ư/R$ ilZF,",'2hL6r=\IJ8Ar-cnQl]\K(F߱(2eZ;-$> ܨT6~u٘[s &:L[踝uj8&TKsNNEvaV998rv\{)GM gzSyۄbO8NNiV ʼtBL œzm d$1B8OIo#f'hU.Og$g0 v8 4Sg3O+m'UܶA*'WѱV`t* T: 3 vg:6f{ߣN EʡN) )/7\{[!ܰj1TLQFKKw M(qgD01ǂ3Vpߙ3g)#~0Y@yc;F ~J 懽(oFՇ_}kZ^gF3ʴ|YVHze$usg[5]ޜ(XY2ZJaT*EWщ8bAysC˳ߏC썣ePڣi~NQ2tE4M43⍥Kw=e&6j+o%7e:Uیu*CWGe^+kS4S_9't^E:!,d쎚lekv-E_ CBa|Wd%{]9lVe-z5ʪ1{X*x,2Z`9eTB͗ Zmu'_8q JV|U`SGCϱ/ ӨQLĢP,.2H?HWUU曉+)/i R>hgPsc̕OȌk%H߿.zT58SΞ_3rw\ʃXjS%3Kt7hgdlyv" D)d)oV>];ij⧹eLrU׳ĭ 3,b?1?k1q)-?l'O7E3\Eyk655uG|8ySSf`Xb\ykOES]}rso7ohԦf̃_&K.Mu jm8AQ80%4]JN%Ĕ@_Wgwacdݭ{˃ёG0'{f̏9*я<[xgohl6s g8>E窝vlXSYʬ+TnκW'18^qܢ:k,|#fF|r7(ApOD W< ֽRe_)BXիUW>߁?M"~"ӺB79FMQ>ox/aKF?Cq򣴬3,WXH  hv [b/&DK7(w*_Eч(n$ta}ؿ͊d_jwчE> 2XE|-!h&u|1!I7X7 T3|Gca^SB?ߡlʯ%DчS}: aF'7G Q+/O"~!P?L;G@SG(r%/ ėBė;oW;+=ǤZxsIF|b|W¿vjq}Iw|!}Keї "Gw2?rR>mG/#~|'^n*_@ˤOZanKyvIPBBؿפZa/"ҧ_iҫ,<_EW_3u*'EŊ<|IoT2BIoo$Dɤ}%&{W} ~!&H5!~Y=YMph5~'kH_83!A[Q?bG-<[ ǜhpO q}dsPy!!OSL(ME}bE>MQ?_!Xjɟ~9!ﯛNzA<Ӥo|"ַ .#o?[Q1*/'D9\bчP#_OI?_|1/̏oP&=e(OLE?L|rjs DY>UL_'>Eߋ5*o'D]>ޒ;m%?[+ F%XPn!jBϕ (P^BDkuO$uy'"e>#~Ao)"?D(ysx>&֏$Zx%nBm_#x*P&uJ' 5$K$~ )B??_@i':~|&dBtJ7L @y!Ⳉ+iʼn9*!\S}?g*>/mRʟCߦ"!!:~)+E \7&DBKw_I廇,RK:K|~?K" Ώ&8Cx>2$sLWtB g(b$Ҥ*8Gy.ևKƤf f/&D-#e2^^"8ʿ6R[7tТۈO+{bI[T٤}B"'ډ#ńh3WHl;7b|ARU.¿į%t~ !Vŭ¿I\%qא~!{pcƷ{/$78<xwk1y'\yA V8KL"B~K{LRINa׫|لk}w=q,97?ɢ7_Xw5"Nq 'm/%7>>{-&=I a_웹Z*o&tEJZBO3WK&_kE Qtm=۩}\/qw}̜,2>^dKTca%w2*erK|]FP^N{-9鿊^AQwx\qb|yo6*o$DŤoY[oR\Af;TnC}גwnLEM:B^ }%>_GFMN?0T~uN}Ȥ[x¿]'Iw}>a-RK)>k> #/X ﵄%%uBIߢm'{\!_L/QLʗh'X_ؤUbXaa(#?5*o%<>0KN 1M|;k~vBo?G%-H!Gd'NLNE/f?Twۈ>)o_K}%k^8|j?oO|K'1ԿB BxO ݿz8 äMB>STlчBg+!?i&a]BL[aq)T^F+чYp3_;U5y&KU>S\-_Jl4ٗ:\R=:hB uI.2Cpu*G(PE|&{dK &#ZU^AZl~=x-o%*!D5K57Rj u|O6r6^!ZKߪ}R|D8}¿K|: E3,Hmf$o6V\ < Q` ~r,jMHkZ $D{5}ؿ"E~/iu{T>{U>?k|5x> 2FK|t_ V~ʧ2N%PcOWL+/㎓}z/&}#DN?}/ ~?e I$JZ?M|!o ~ҿ/W_I'Zq#?6B?͊<˳Nb?韷L_=}St}HqO2ܳLO &~"_cm* |}EF|%!<^*BcaWM/"Ĥ^mw#L/7n~2}ؿ^ (1 K5g_1Cy &I|-}[if~ |ʋq"'   Nt2޿'cT6K޿'k,>ӊ|IBħ->&=2BcaAK|K, d`R?Mw56@ΤY/RL/%%/u>b2j/U}__NQ"E3o_W|Ӥo|)!#o" K,%{o"yBE\lÎ0ןYQ}/URBþTy"2~ k~ZB'_oG%Nq)E_'U/&j?,7⑸}nVBOK a_K嫼\?W(r1|B嵄_@*eEEWh}ʧ37e!SlB?֤ }GEjx>pU_D|)!O$x7\ rEj$+}S2imW lREO!Nq9ٟj_N_/ =MkTH3mR,_Dlob!5G Q?F'5עs_XA ҟkyZ?c&TgK}/#~o/s.UREo};?e8STJ/Z?RR W<ࡿXԾ }j H̵(ը\*Y#Hϩ*/sb7PϟmW?xo^/!mjK žj \CrT&| !wI}B|"ݟY[8߿ zQ67oWAsS$D͢ۉPo_Eȿ=(vQG?"vttE_Nad ҿP/RW?xo9I7{< 6HE1L;bʜzE_Lۤ*G8^dчė(c&l>_"N_HL[U,U95`)o!D|чSިN0?{쿒E?^ekU^{WH/ %#RՄhUכF7hPH06mEN<U {;7~O'8A`gb(q(>8y|>!/P_>A|!Ikn/%goTl&B()Gķ*ܟ}/ZxI%7 /﮿bqN^~ 5BBCO#^nwo-'ڷӤ[Qo_Jmmw;1y>`!|6cVyO`ч_jUFIωߤIRB/caW뷖3 'j'㓔&]E<>Y&K 13FE_F|"o#77b| ~l+\vt">vÿ,O߯ 綯)>U"xSS Q׆_a7\?C D&HQ#& M|B\GBQ_MUy9a#Ǥ,^*}z~& ڧR?m%NyMϱߦmSyB"n'~!^hJ>{1EN KLzʫQ;ca(LG[>w=k'R~2'sh/RuOz+_DH|b5鿙B[#L2ܴ@äw|"=?{I}E|bZſw>uw{/Q7"⑿>B/QoT?1>Yh4)jy~IOW߳'/RC>egT>p0 "`{˕_+??4*E#~aч?[1M~O-%pyvokq'/PL ?~m,7/T%ג:B{r_@<_`ByA?,<2gB+xȧj5](]_rA"~PA*/&?yz}G| xj݋U^JgDYQ?_/I&MVy%!wIu}؟L|!7m_jB|}/ F?R>ŷp|F2B7sY*o$&&X,l>%i¾||J%Z|+n# ,HNˈߩw{ +ߧ&,<"Ֆ?@uԿ|w=ve4>";B; ;V'8n#wѝ1޷#"Xܿu׎+n㷴ߵmVu>}wz'[{kˮm[4JJ-*TcZغ۱k羖m[;vv*I;d+ CMF2C]YPn;yt~ im8Jx~Jh=eG ;umg{󖎨OgIo5m]Jo\_r۳MfeեٕdlsH?#m[ 9eޚ"cO =h-:Q,B /&3d=o9Ov5ngnhL&F~6^1yfcXk?Z{|dٹpN{rs\gҽ9N[cfO9}<ϲ%' DzrL]>?`J΍KğG*t·-w.b6 ;@H,hَ`?V/0P\YO6 ZpܲyobkǾ e'7jrޣ(swq~.3 szs>C !3?u4/{_Gq}7!w?˲%Y]r{+#϶,I.@$A鍐{!=$! !=^7ݽgYY2/1}sgNծm1e]XU|<Üpp_L/U1=\h>F̹,*\==jx9V}rq8#ڬnt~߁mpm7rV=>Ao]eo6z,cc{$XG|LzqDfLOdJJwuQAri9PDU,j?LwJ׭nKJj<ܙ-y!+E]{{)*uYX{^~WOωRC'ןH5qS;;{}OC'F2ux?nԡB[kgkqǷ菭QrC}\Pt瑣}ٗC*){OKʻOOvvix7ǖJ|C< $q&>,Jw ؅ G:Zl7" O8]s9y;#e 3q\)7N/t3qehA` 9x '7fk$y8tf$- J9?L}c2\{ޠujͦ)V#sAuT4rh0)TZ:Et>qgMh=v0{d1H 6c%NeV~i0鮾y^H4)+= pÂYDrdڞ#c?~􊍜Jq$.R͜~% 4XJd@A Æ=irp%{֓}bܙq#yaododˑi#VȰ~n3NiK5 ͕lX8ʽs0b9>\ g&J.|.z:|*O8-ҭR'*B\q a_4lhzm߶CܧP֋Ǚ.6dž܎%==]^EƘ\PY KaÙ ApnѭgۖcѕD;uwEa(yT/VL@LKS"7X~h-0mhda_{$~̌p4-:{dW{(̔ªc Hݜ~6_p~^Y\.F."lcu; WrXヮ, ~$/,wJZvDWgGgj}do:;ݕ}SN5]stG$sN/hMk屽;&ձ %iȥsۖT޾#k*H˷JHzOV_Yo=n_l 5Sqbޥ19~148[,=QU%VukP7}$\]{vSx (}I uV_zLb2NLꉣz;wt,Z0_hNMl;Μ"g;^HNjyy|;')w돋5#\G=Ngڷ*L:=^Kr:J-szZ3%C>{Y)(jNƟuX'Mt< Ċ;7Kh6V&"l%5z2.1EpH EG5a5st|\j"E <Ĝ|z{/UsR-SKX\v Q]Dhp .#`F҉S~>?#or-qgDXL?hJr,}A.8IqH_9N!lɳh|oүNC߾1ZoACz|Hr: *=s:A- .{ˆD8N89?]f\=_n]b 0 9z}~}~/zmm,eq~E\붥TE[^yH 1R=.Uym.b6:DǛx omgRGPvsP7xjIpߓs:E- VqijIVu*_ר*gs>RVٿ2=.5#2_g:N0_3mm$z׍S?cD9ʫl.FɁˉNFρ&]eMn8ÿ {d+qc#)<\gn591W9u,|ǁ}?: ZoPNCuHOc4+BNe&iu,5Urm n]S`3f]p)SSw6P ^A8N}NŃ0861VLtsWYγF|Yii'+6y1JŃwSԬ1f/hE- eDQS{=RT=v4= 4H w*6q?[&A\\;$ֶkx^0\%B>Dz̀/&ʼƄQrbTE,2S0R򦙰~/ʹ˕P"]~rx_'huZZTqrʥ-^!8S< ![=%.l)˵g(x>)s6F.DzwQTk\<]\YK>IW˝}Ovϋ/Ρ{Pj6 )[!iϕ+";rGu[aogt=y}{A˴QSRKRIUnʭYGSEī;iUAצQA6F\u%,Z熈ÂU@EVRWEZUQɜ^ԦMuP6彇Hr_8Tg<\}4.s_ӭBc_nuUNե\kS՛TR򧊾vNW5V:oh2Ԧz';<[{TjHɲG`D3G9MŻje6)>eW-m*x5^7/r;ݘGlM~J V͸^[) j%6>OvuU\V c Tj֬eʮ.3zSGf5kt0W^2K8[3V'}Mrwz?/+yώf!=6v+B໶hjY8uw_}&9nR!OFtLF:q> ̜`'ϥ jS-LLvՃMYuzUnn_"Wjc6jUĹ;Y½41T0pcT?ٝdZ>~CġnTH_]YuW Cf`_mm!uŃHndFpm;4j|v}kg՝c ǮMuv]=Y`;ȼ,vkAț}? 2}'i1jFi{e B=$f$S8Ӂ4[+6vw ِp7-ʳ1>of:paZuԦ}fIe@nIvgtoGD?6%=IĦV̩fD5ujT{W|ZqmwT}8lSzQ@ UgvͫlC3;&SM^;}#Ӽy] }^)kWWNߕ;UVvY4.K5hUb}38fQY`MLVP0{wx{薭q5keXMiIӇꏧۻkSeβiaПw(껮J8MwK Z=ȆLWNVN5}2i7+md Zw]$MZYzS;MQ+*U 75g]vzs[g*ntf;YSfFWYg Tfp<‹Z6pm2MSeO)Dw'PgdZ&69VyZĨG ~L1ug{۽fwo8,t{/()]G$ܺC̜'KE 5jQ^cݦ{ŖD^"^qb׎}Qg/ڱ}wc ~'1g8:r[GeW& br8I%&wh )E_mt}"ű/& U>.OZaxz#kqLLqg|~bZ9^Zh哎?b¿1OSI%o\>|???M$~2!w'/h_9wEM!~b%_dU^EOчU\LfPWk]a|ϡ[B+w7(@?SK|JGZAs >W ,˨SrBOK>|W>ÿE7¿ķ(.!--чK/T C$"Eq/T[@}lߠUQ\x|BDBo+1[oy9!w;E2|!IB&{V!K#^2uIH]_ns¿+J]ERBk 6%DчPo4=*PE8޻_2BGNXGK<1ˢ_WIT^Ec}?fɟ.ҟKu[oSI*Gיz>%~"/gO#KZa$Պ?r)1&I/kT>]o+-mXx?D"E_&=^KLzE?+&=Q+ a &=բO$~!I&=E ?O俚xឡb_fҝ$ h[A|fg\o!D<'FD !]qEb~_bK-<{)%D_D^RBʉ?pyd|@b_Ǹ Aek?M6H1]*;ME<ۤ{LEK|"#~0*_H5}A).#2>/'}>G B􏏘Q }>򕄒#~Z~P:Bq>kG > чOY@g| 1~}Ry7)N;wSlWU}%F}K"AՄ_-mI!;N4p?iB4 }?qa.<1/YJc}.˅* /%>l_-<% n}RB߿CaXt}H?P/GdEk*/'Gbg)\#|%ƇԱW0yB֘cǐk%q'+bD´w٢'>?M1EM}ױc^>DE_*$D3iE_ R}iS'}ؿ:&_fo"_3wb1KN%~!w1Jl1'1ÿ:ҟE ~!JPF%~"-ג^Bo:K|]HbYXkBOVkz}_H47s^U3 fчV QZ>C)"D/#Jg+ݍ%D|!V7}!uDXo?mc~89^PDJ|^Ew_8[e|5kn!k,JEԿoZR"L_I'#D^n zBߕY пFE?v*.tQQuRB!K/%#Ծ1?]? OkW^ zU>yI~/z/>g'M:لhS14t-qMF[1f/%Dn/&(bc] s׿B <2BӉR^p5*I{&儢/kg?{6 \ByW9[kBHE7Bn). /%~ /'~!_A ō*j7+n%u ^ oٌo%uM&E*n)>?Uj]*N}3i4vQy!a, Qwn%D+Fmɟ+~4闎7)b}.6*Ot1>H}2?Q,BLj Do*Mx>JBIQy!:F?C\E>O|!oQ|/|9!b>+ג_%~=!q}+u 0}M)"߲"o Q?!~ed&P F2X_\_jįJoW2EIPEѿآ@tE?ǘG_!l_U^Oo>+ (L чXo$T&B-*(hyժϷ*KT ZI3%G[a꿼3Y6B-(F-?7_d_/1EyAIs}㛼.yE'TNK-4 ^"צ&ˈ$}3%'[x؟Le~T1!i<9S;HnH$Rė lSyYN<`Mo*K(0)mXmG%}3G&T^GOc}د|578 uN?Pd 1~f,M6|1!oч/Q\I#~"e1c^rʷ¿1o!;_F~?s\ 1>XrE-'b_aѧ"D"Qo,^坄#ė>6?䚢P?ɭcr2/ü*d\&/5r Uh(Oy\7kO D\ڿ _|J)'_BM?MW26_ل_?G3|7:kС"~*&~ 2vNY0: ?zLde\{oL:IN~ڤX1Izh82ܤJBo1>*fE.SY:O"DNd„K&=OS໽X_aҝ* >w'Mzk QψчgZs|u\KoPD|*b}$O_cчoUFW_5~E_LZMOL Q?/чYL+-g5Teu Mz\CM&oч7?]ԯ/Me QQ>쿍9t 1#F!QqIUBBO>쿗Ŋ?!{_C_?h҇U}aK#g~/O)_}A_K~Ԇϛ&D|=h_, #U&}EՊe ȿ/?xoTEx~Kk&}C+ _G ~"}ۤ謁%~"/; ?$~"~~dOT~)!&Ƣ~BexXS~XIψFEKR40!KGGK:Bq7\:CUNp'X=d&'egH<yU>I P7 F -K(Kh嫵wשNf||kyL)5X+; B:>?Pǯ%+oM?癹.oʛ u|͛?Oq17%/E2ŕTGpͰ'm\mч_H<yS7">gK/B؟ki?*\$osOeiQ*DO<ͤ1kENc?yfjчǵ[i},\ 'xφ`K.!YQÍo[ՄeT~Gd BL^yP'9=DY QS>=MڨrB蛱0oEo$xt}gZyU^K7}!oE76l"[,ca/${-*ߨD\aҭZ'S'Ϥ*r*n#ė+b~1kɼkT^M2kѼXa*6v:{~&~͊~Z6[ 1ca0KWN| !_Lj_7MfB̟=oUK0W^gRE>gGU'-{韡O-co%m?Pd)f/St?I&=Et?&ޢB|"n3Noo7}*NTؿä;UBO3}ؿyXJ<ݤg|)!3ba/W\KcT#~".+^FȤrB߻MzE+Xe9@WY̿IpKbmׇxCw>@鄘exS=I?+ާi?{dD"I{Iiư>߫w|uއLOUamч_=8I?f-?SM?n'T>0;}5}?iҧUBS1i+9TRB|>?HrEodk 1~}ȿ5o'Uaч_#~u7-P\J.&I BbԤ"}&D#:AIV1B+hGM|!7&N ocawG*_7!RMi|!G"?Ao/\:?OΏc^"?)tUNk&UEcRE?P3IT>P3Is,?#RW!_b4>?[Ds}؟lɟυWMOtki.̵xv#Y'~9[|u~Mzgm__WXx/Pe-V^f3_ϗ|!gir嗫\L&~"kZ */'D#~"OM?_O| !ʷ:o#~!7@q9o!~%?o%~^f£zBo$]m 'cY Z&]iIWZ&E忂Yt1JR\BϾ}ؿʒ?_痯_Z+??ˬ~E+tTQfMmчįVHwtLmkca%6-g:R ߧRyAOtF&mч3OU&ݨYLˢ7_HWc*%uS>L|5*C]>ޒ? 痯l~0\T^\[ZBQO¿wZڟE|=| sW"=>×|!O|!ec}A+(>>d}*Ip>gɟpVy9ؗ"D~ܤ,AdoN/֟!}֤YxW~?oix~FE~xs$EI_U4EI?#R,'_3N`"u~dчo_A&m}k,<W"~oǯYhȚPgʣ]Ckվ % 68ǻf[~i3ZO)b|&IuhG[aOMa/FȢ% Ѣ~f?TBϳ?G' oy>GgI!Ʒ1a/_?u*ȷ"/[LbK1E 5eϣPW/CeTwYD.ɴ~(u E3VywA9 7f,.W$EݟS`ڂ9*O¾k j-3i*KчjK"_Bد+dMς&&MN3WEP`z>OtE/0}`+>"g+b"m Z&ǿ.Xb27U4F-#~bo%K*J?ӯ ֪|!,o-7Q`6"K|pUP8/L<[Lja+ ,-]g~ r̤+T>Y/7>_ATBϕ&G1^EtB,? N;~?K t!/io>Ʉ?LIS_pljO)hAI'T>tE;A|"?K/񵊴Y`& M:mч'_JOY[I4~_J?xئyepƕ R>)U37}+h?'$"~h-$kLMM1=%Fo#~RIw|!?-F$~"=UL"EzEl-91#&^@^BB/S<@wIwB>v4E?M+xcK?B/3*?J1_F_MIK$['oCyA?c^S?JTȄ¿ͤwo7}g)&.!}?EE|bMz QчZ 5i }ܯ&Eȵ}##&}GI>!Y~byr=jP4B杻rIULBƤ/Yg/WDs&=jBcaAK|}mo|.!Ƨ/_CI_Uү%5}|O%&}wH]Ko!D;;)^G&D-'> Ud&L h3}񍄘N|!_LXxo!D?`?#k)b߬m <<[ |c  2{TO(>cYVxOÿW)b|>_T|B N}gR¾YC^bч):S?*_A](猳~1+ 5~ K_E~4 5 /4" /"5߅[Sg-_-/[G2K#ɖc~Ʒ٧j*<xϤu]D~5&Yz]^˝B3|dЌe-BtB7}pgJ<[hjaE"D|XC$D|.ėB~hF*P܌+T/+MZyL_.gGgi ש|)! /:b|YO F6|a«6X&7* -;H o%~"ߥo 1]$ Nfn vՄ=/?@rKp~|Nu|1~]}6WJ'cIת|"ݿ*4}ؿ)̤-VK Q?)o87{*_Կ &=C1/m<ݢ<}ù|!CW\p?6*b)k E?JlEs5(ӈSGO'~&gH㳬 iҳ,GrQWLB?E'\IPy!}%_s*&D|<>|i,~+&}M1I}դZakOUs n7U^AI߷7XEˤ屮}%.R~ۡ =V)Z2BOT&sO'LE3~aүT^NI8ڢO!DR>?*#e7bIgo$fBonxYҸ?Mʧ+?egZ1S*Ez Ez~*!T}SȢ*EIU>P(/F-p~~1 5~L?+Ȥ1*_Cؤi}??R$>WBEL*x7*n',IpEUSQWr(#&&*BD*?#Idl߫F7§, bIQTE{fN+Zjч9P,'f-STY $Z-_M|"=\dzQAQM>_Ck 7_E-7G<).roƊ/ ń~-bo/K5~䙙RBV(yxI|"n3}ؿ>xIOS,B&=ߢO#w' Q0IsaYW}kw/R^ǻMzʧ)bhч"M?.zIoPLE_w|IPlB/7u} (&Zs 1~*F_mɟ_GKY7X7jWx}bT>M&}آo#>XAn=*M(#kw!>CEIӤw.HǤ}%ﵔYkv+/Ho>j*Ho>f,?,q>*B&΢ Z_$קoqwh¿OY/"1W}Y+.!3A/%ϛU>?H2u~_0K*_Ob>ɒ?_|ʷ׈o#Mea[|*MB1o$D|MEq&\; >?ч?J[aס 0?N8 VzO}AdooO%? /T:'s}'QTE^qXAC!Y'T>PwY}_t}\qN`8iR+ a?Ϥ}'J&bGT^KBZa:BŦK,}ŊKɿn¿W*&| !gg,[wIo%D|IK[7\-*Fo'D`ҍo$X=C(c-o?柨vɄhߧ\O!DA4EiħQwt  W$6OYdx,_5LS.BR4E,~IÿO)b"Dmһ,b+RKLz^j-2 1>BJ^FB*F&B迎E2EH|"go2Wby~W۩V+I]c=ߧ~I|*!&oч{F MgGG+g*_HIW~¤['S&}FuOgo D~ޤ-<$FB[W_6*_I#į%D&ȿoo"D|ۤXwL5*B/FOVB,'Tm?~jmsI:~Pd(y<GoW _1o*AWcчR7*EG>Ӓ?_dg+HƟRD5|B卄Z~,)kMW4)_孄Z}ϷO{•\%>p/#dQPOhW*abj2 ?V)~K&tgJMjчKO)RI*E,S WҨي%ӈR-1e)A(9}"I%(w+!_,spʗ(rV+e_M s_A*aڧ7j5v)%-ʟpu!xϧJ-"}>1*G7>L,Sy9!u>/#~"%>L]TBNJ}_iɟsge o򲇷x׊|J69EU~Jl ~:JvR7/eQW}v_M(fQ(^kI2~ߤ;JRbBoր%i>*[ _| M[aKk,,zBAK @9l?챍WEdBq*bZۤT^A!~6!sQ?_E3ʫ Ѿ&~N?W쟲7isRf'}n!~2!]xO!D<Τ-OUDVB 1D+n$O1vm1; O3*чb7IQy!?;FCuB?1BK?)H_#7~9~_NDB+/4*/'DY_^M|!5!DIoPy%z>jG*E/o4*#Ddҽ}3-&M &עo#vǤwZx'7b.<~B}ZH^jy(O|Qcg+/_D Wiޡ|'\9Xvr(bY[Ϋdj<5`1.ZkrںjOeIݲ%1`Wy#ɶ*)v[hFtm{fZ9A%!˺7OL gMSmٽ""?[!%BRQ|r_/!ck/  /n}#4V ~yj+=ChlgGj!!rWWLb260<#^ `{\xԯsݍr+S3#YGZM9%Cȏ-W[Nʶt-癥dCm˽}==݇p^YM[oYeu.:\'56><#r}l{U\R7oOf\#4;Ǩox-mجv%,9>57l -a cY=nKA{Zhg/Wm?眏ۯ\kydT\6Gy@hĶέK^Br9p#uU{>{ČC~lGهkS2#&!u7fP797"}+ǹkUlӨ<"sx1L^9> ; {#ŰWN6#;>\=̯mz9 щJr_=&=]m݇{T\ZGԻ:8Q" .Ӄ]-Nq^mJQWv Otk_"VItĹzAE_gOw1k);;ЉN¨޾O:ι_;\TsDepXtogGlI-wa5&tw_eօ?y(lpgÒtw`<Ba_hX\\mča73-&- b:E^Ih/"F @0/}]F)wFW&Xg-oݠCG Ovw^w2VX:ZajyCd6]= 6hSev~<{n]==&2F:8 uCP0G$V eщPLÝGrkAh_ uǴW+*~XNKNtF}^0Q؎4p l"C5Rgr$dݷs[j X̮HWX8]9W__;~ 8X(%};{b5ì}?Z[:;֎ aЬxDˏ{]-3kf m5L0J+^hZqDxuTvg]>R [}omx".늂'co21YT;shJ-KD6ߢHz[r=7@)*@]/zPX.A2+AG%'ӗw /3X ;y<˦`Q1r}tyLe%7P[;8) ײ*jH K<ܗeW5YxNo~hGk5qzȢ'zkuV~zEs_ĥFyd̈́Y;7ϊx3Hq$gǁeՄkru-S 11`vM푋s˄Sm žצ;"SJq\E ]^ӓ>[K} ގL{O<xh/Fn0HP-[wۑeĆ-;sN^Dmu_#\\n 6EWEkWxPLlX2Gw H_ N֊ V7YchsЄ̚n8#Oߕ;[Vr/\s.0첰b܎/~}t^=Ӹl L- ?Fp<7q4˜3DC8rNFnf~S``Qycg!#GӇꏧcOUeӌ~(s߈ Xw{wt=x}g!W[v°G$b_d99[RKKʓh3l#O4`4j'Ɯ[EvO(iDZYv=1Y5Y[[l{~HMdHO'N> M:'TpD"susP#9\-ɪ;u_Sq=60 Λd![,'2^x=2}<_㼗EYGE*`0FD;Ky˫cN܈)1\OXOW5;+՞l}q!l׺u{jk[hh+RZDW7kGb.,WmZSJ1p:ri|b|qZ=[c=3ӆXN?+ۼcko:ܡ;^l=w2rU-]d[=YVT+)=N+G$ޱr`~*kҤ b gl 3dUFB!ٚ lݦm ,r7R vqޞjR'si'jE]xX F!ؘO2b# ynes]/K, \@w;oq?ᦝl8.䐣Ak zYꬅ~̹v9 4]^ڭ1(&<ߺl8Rrr=Vh u{ψz&Ɛ{f61z9V`<( .>[vG=ƀ }Mz=vETū=Y;7uV I~i|85BJ`5R9[F- q&gՒ ?EpK9ZPK̫OUnF}$gjƐ,GQ+sxiS6 vsmqRzMgC] 1d/tSNM_0,[sA9< p7xV;|^vTx<r?BB;E]^66^L7L߇rVKxNHg8ƐA;^gpk/IXO4rQdh/b3aMY-5j@W9yEX+k4bݙsx_x!-\kszL- *RVԒ\=rz\- 6q>nxWeݞlNt81LÆYwA+Y}\tδ8;Y˲oz'a(T(K5Tb8Ɵ"3S̷z %zD_^$Ͽz)G}jIp}9[=8'=YVW++x>g7BVoj2r`TQܨƣ SOEFG$yyc4O58G/$ZgtF5zɱe!$ZXĒzK,9u6Y |S7fe^6A55dΝ\+VKx>="]< ]bq3~z^? 1lΝa,5?[%5Nis2x91ˇxnx(s$KF0?Ae~}e_zܬo2ﰯwRK} TȻCDy=r-8_ gԅ۱01~;k%"\tL=E]{{?רnN}mxx/oa+;S3?-}g3%e TmKKA1zرnt1n%1!Sn㯊桂pGPg_{w*czߓgpݿ`:xf~(CIv~NTcH ZRmR]L}jUYgD')_w66#v]Ur}gϞOLPtK̿(dyG&&9 EE>ӕL7?z`CCx ̾L7y6uI-KcUn-}~j:rG]^>]*(D5d5ɱj~kUUsjS]3z_D2{vsjyqmJXm=M>;%Z9!ۻѧN)%+nN S}Vu}uuU7`<e*5K#'{kS+};qX)}ۦ3]S'ʝݮ#'MmkzZl(?ѕ6u]USmBzK UgZkMՙ3:ov5VMjwyϮc"?ޓݦa\;4׽lEsj@Qw6sx5zYL*=9@Xtt8otP)Nu7ɧ [__t jm 3^p57;\E)fGtjr\kޜuϛ0P3M6+lЋN*H)CQd*˟WZ#tQ1`֦&f]4iٴFWKHzVo.fS(獶g|FUjCf{ܥVhXy!t-mgQNվ}~Uݙ}MkWڢڸdӴ_!X"Ȳݽ]c>Yg,qaTcBgZ3\Ѧ~]#$V/)ƅz1I*0Qqe6ZG9f3-o)U}y;\|\}zE S[њEOĄ_˂r7֫W>|D.&~ !C4ro,ٝEÿ9־{ ʈH&?YqZO&7< ~"!K?7S+_YOUQy!7;F?Wq1ٗQF孄 ~|S-! 8*@?3b5ĕ%D,0}o b?*_DXR+.]xw B_+_vfB_kߪ_|/!sc>Yo/[}.%[F㻴No!DVD>/eI[^+.\(e19+7}+*o#ba?kYB- -w)ijae-S-Mhcķ幽n#Dx7[73A{H Q1w}YR.B?ߣ˳:7*B 1"fj9?uՄ(.&Bї1&?>fB/ķ"I#^>}&?>b_/V5C*_J Cd0#{@%g?JrBL}X[Hph)'iIpR*B/y~5MGTk _$~!I?VzB_6;*@bW-<[*o#D͊[ n7U 7 -_O Co'D} '(,?$~DJj/ܯU[׍N^B/L_e/_k D1%+ d;'ڿY7>??+/{ՊN0fB̿ ~!O{.ÿ|Bo/P1Wz|#H߬DRq"_BȋW]>*̗M*%o2pXE> >U;Y7֤JGӆ2Ews͗(Ut~LL0բJ1^K,V,BeW(b}(Y3xB߬e)>L|=!ỏi*o D|Lчip~ a&͊0u^lj|!oL4[lr?CW[a_)cWscaƒ*| aR?I"'wZo#/aƲ  H_l_̷jXyA?5k OS鿦}_A|a"Z3 -]}_M|"f͐XBkcaMKF6|!&Q[Ⱦ][ a[>o'v.'fأ+aw>!~b웵Pv1c}}IPy%!_V#M:zBчC7*:UJh>wwg?VyAI\gRʧ(Oפ?[a銴7ʫOG>"Z' ɿMQ  &Ӣn$~bnVy+!}ؿ%?nq ,/%D|?劫'$!O4}$*n O66o$t>F|!vP&B7osTPo!D=ӤgYxo%϶/?> / ~N'/"~7!U&TQZW|$jv*k D^K|Zu&AG cVf{ [W<'omvx 珿R~gF*o&DO/)_G <Ȥ|!q> [w?#~!9*k&#__YڏR|#/x.ceVo(em7屯?ǥzRY', 6_2_yB}> , =?/QuWԏOB9i$/"~|@xg\w%_ڿc/' Í%~!7لП@B_S~5ПH|bO&SӉ_S/#LW(n$YķBN% !~d%;7׎I9G֯5.'RNH֩|"yR|lw쯵Oj7Y?&)1}(K4k.> )EwZSoe*/W?w?Z%yKI_3YAIҬEU>I)GrSH7"xo*M9ܿԮBѿpט#vaITLc}?dɟ4S_/&%Okdʗc1Kyi۔, uW*֐&ϤS}O|b#?io$S_!SS`Z#Մ(cQl d { Q~Y-7)."p Q+?M?W$+ Q'_7?ŤU>6mч@_H| !nчTqٿӢN& Kh[8}C: Mz7"#PJמ@\Ly[CpVQWV~g8|=So ~"/>{IRlB盈I|o!QoFBB违ŊH oʑ|'q}#2no#D|̈́~yIwTO~o9 ,˵Mʱ%2>!E忏JE^|Ĥ}%x@&E?OY/V*Ϙ >/ϙQ7}M;/%$D|1Fd'_oPZoiT^㓔&}_S Q?3}>1I|6!ƗTI?Sy=!bagqRObwC:>|!T.'FdB?'~"2* DلEB"D=2WbtI֏\~^¢LIP'/R_| }a^  }FkW\naGwA>lovȿO$ǵ ~ݖyU^N7x_C]B|b O$~!'@q9O!~%_Z%ټ?jțAFB]䙺ΓˤO*%ij'so/yO$KQi'1Pd~/yC}JEj=@}دOp~aR?H|"_X7Oigb5oET/yZ5oQ&Ya!wZ=U; Q?caՒ??T~cAAS Q?]aч co/y.6|6!Ɨ}D<ǿ]-FߨQ.b|MBEܿgI|!co>R'۾2ƌ'U~1.?E>wMh TVx#OVIwI<0?]K|!s_MQy%3\IYQ?=W)'LUy!wIZaz„g'ϤǪ7 Q&lGo"D&P&`ao!7Zk!Xko(_@ld6υvKa;A2_OZZzO~*e[ڷo_[ݻ6l+gN߻m͞YyUQ{jn'*ٽgׁ5۷۩}8팒7Ofbm2:*2XΫw<dUƣWSB)C(x1J-Eڲ;j;FBlǥl f[y7Bl[ $n簵ۍ,Ej%nZ+*kϵ8ʴSe~S USִڒM 6 NƑ~C&^wu(ar)9dw=$xGo9oH}O7v{vچͲsp3g۹ P#{It>5\zɢ4ur%|k%'h^^ˆo{r.*+ύKğhl^Rm dQ/Wysyα%aZ!`3fQ>}'6ZӼʙz>/mأ/cs[#ޛ+ţ>9^eݐ?܍x%cO`G_ZGz {eA86dHR}=N-_ɗ.t/_ k$:v=΋1OЉoF4* js%v*>6WQ7N)Ƨ.ea},Ugg5[L}jus&݇/GlåH 'Ka>;FV[|D8y8fe!ALG Euҁ"1WpSs-W _ }]IΞ1,?xQ2 aۻcMḔOևN#h[[Ig_a3p?s' M?g0ddA@/r {叜j]\P9IOw;vw9{ڨ򃝧e=ed79=񫰂\8~,sڻk ڏK_Pf)ݽ=c: 8hzHcɃEqFD~_ !j7}=:ٵw`%|t,=w,;YDmbmA/cL^ߦ a鰱F[pgؿs[u`{9L p7Wa(dGopE3HŎ`B3{>e1dTO͟ڇ'HNTz#=þ7hl\V,$GwvK3qsL-yTHW=QVp8ͰZ&4Kj3->`:Ҡ#Ot;ћ>ّR_dQw4:%}':= mdLt!gY/oC!)!nئr Х 3Kla^03=ӘY 3#/?hX6 %w&}!='Dݠu_b,2M*r4 $Eؗ^+-8y)Ĥ8pgW7E*h|97}8;s/x!/:X[m𺼼]Α/ ;яïŞ^Y'l6^VW&H%,Gl,C>{Y)A+jKgM[q/, c2Ts k|2QljB'HB/<KI֤v.WG筤U8?Ot6s<Jjd/h?zJ!wnF>;5X).O!*8p*rV2'h|^d~LbOձNRʜbGd8o`87g6u/DXΙ>'#|WޏPǍx{ lh`G,|+oXȼ>ۚ Weλ{5qs2"l& Yz<? &ph͵7MMTi^8Y'2|Y8=oKyw '9~[ɶ&:L[x+ocJ7?T;wYCbN𱏉9[d~ >a1)g*Nd#0|#'X?A5Ֆ~=a>nP6Cy mdgx;Bb$6z^(6pIp?ϙ(G,%so1|4'x|WQO3ȣu~f=#^r2__]Nl5RR'xIh/ jNwGL[lsWYγFiS%>ǹ2OglmLx8 ';־~ F=;^~*/h5BR'xAh-~u'VNH[Ѱ-]Nrw_JǑs |10^K9~D8:?ѧA]zz"t!jFVח% / xsT1nS/|;!B/G慛4q, dHcfQ n/#~ACOkx jk$kwɔcX&oWG?jcFQ.hg"x#GOl0a@l}6 aϬ7JZZ?r+$,esƙӮe4N%Nn9tYKgTGUyfצʃ.֨CAUr~F-s#H5}+sAiEϗȜ[UgjSצݨ˔ܽtMṶ;W|_!.0P`hUwKU{_3Z]/]'+y !`Vfԛ>}V6@-9[!Ԧy=xC{r+mF YVtqKӏCceV ^o/61FAT>Z[#ݙF9ǝDO }Ug*h]q?FmɂP+t98Qkm1@{9GZr,F،V_,m-+}s*Uug6_,["̓Ǻ{N] 9XN;%*s!V}O[:,vlvywg.8a `SˮMĔB][y qJ<G+^(ǻO<U}zjDžP`XD ~lH>?)cKG\9kYPzjՇO:NqS)/Ժg8ҟI+{?KH&?Yq7ÿɤ?MQ>d7/EdBğ,O!DiE"~"},0|cadZϗVB|xbn>XGί%AmQB? >O)VSȇ?|.!G[BkcD'\RWKUJY*_:#$"Eq ڤ*_JÿE!6DڈoQ\Nɇ|!ws>d?o*Һ;=(^';=R{E_Ǝˉ W?$UW+֐ /c`Ƥv i'Bww/Mr5N|Tk GbQ&]kMO "2YeOT*,+*R^Ǥ~>?A|b%u&K>Yg9WԟxឭVB_/!D<ägZx&/%Dei6^82B?>u^TP#w"ީ򕄨MzG½C/!~5!IoSB/3*_K^n+,<*_O%79Aʤר|3!#א-*B[ Q?o4MDQ7[ڇBj/;!݉뿃^|N-wnca=Pe^>G&}C~u?H|h8r.>`^8YP)ؗSch/8Yo?ϛC8_`}# &}Ig8&͢DLE>qק_6*E+W(XuBk&}עN|=! B7ca[yTFB͊ ?0G*_DФY_ؤ|!Ĥ_Yaį$DI?W*Bg1sKo5!R?IwTk78A=m?Yxϴ…{|O)NGH2Ƣ&~"_$Z@TPq<16BS,7+n%o#D>EBeIpgJD~2B׍OTD| G^gB_,WNrB[LzgчYE|DkQO13q/ݤ;T>Tlчw?U?ͤ|6!is-taҳT^Iyf>?˒?]痯y%/4E*!]1Eb~ _J||e&B ^;$^nҫ,/$WZiA8߿EWߪΤ7|!1 ^F+?>CퟥNN!K6野7&)\{MzʧϤo[85c} Uhtʫ ~ч,7KZB >:B2FBD9[TAdч_ ~1!ѢOk%D|LWao= G:[j _dO?S7>B/CB1 Ds1?IzB/7*o/$߉_IBeo_įSXd?o#D>DfBqؤGLvֿIyyyOTӿWIyآ]XC,p U^'8YB|"Q&]ZT~GB՟DH] S<ߌ'xy𣼿MX+9i|IBo6!JڢeQDM$'PWrR>O&1%9C az> UQw2%ˉ_A[rqFKʵ5;Fͱ?Eڟ/{K uH+?%CQweoy>z^mɅ*BeD|Jnÿ#q|JU fLO~+s9L1FE&VBBϪ}_m)τ/fh\?G?K-vRN6L2i՗c귋VBqzTn~KWodW"^W~~? !mYKg8^G[H~,q&ݪZB}w_Eȿ'?=Ɋ3f[U^NY|*5()#Ӊ_IJB>I>Պz\O69_O|2*P&d=~&ɢ"~"_/2Ŏ>'?ч_Lz_ Q~+j"~_CBE_JzIW2Bb-Osߪ+J!~2!Nq /.> B׻M9K|"Cߤ{&}ҢBM 1|ȤXa7)}>> _ G_H#xؿʿqK> Fy`  _ ~"/_4/*/'D||Y/_A sQ_39?>}ݤ?ZQ? J7MQok>z„g'~B&}_卄(LE&Bo&eG&IP7O,Ϩ?R5|B7/ _s!!_'@Sw(ϑʦͱbqk.v_uv|[huX{wۆmxa}~w{Ӷ}ہ5UV>k?JUv]_%:f{|;%>0dʡ yնΟ站Gp`1.ZkrںjOeIl f[iy7Bl[1'n簅,Fj%nZ+*kϵ8ʴSe~YAzA;֭i[%lA?,myu[vOɭWZꐛN!a\qy~{nQo^fζs[P0Ŷ`9aXT>JN[qyɝG`W°ҝa^=o~ѝPu-\U?¯ Y!PZ|۰ds.yJ*,g)璑b7 )5 ܏b(dzp,y02g\s|.lpd_ 7+A"F|Ӽx/,+p 3MԱ|.,|.b>\aM:bw ;ȏYqGiCYk&w [,Ͻ%W"cmM,Yc/{mp|V3HEao+o%Vu[!|NШYt2ub|q!&7çq%p|է?rzt -ev Oׇ|% $®-bݠi9r|bjZEN[q՗^+AAGv';zN=TdOoNMl+)r濼tl`mqؚW|r:ukߪ0Gx+R'jUxm^RN / 2^+jNƟu?1mJ5z6t?ndΥ%9xeN1Q#R nc=^J&RbYwq+x%+'8g97ccE m19e`?{NqbuzfᏭLC"ߪ& >Q g:/.sy_8"}_58oMᾥ +*/sɈj服7Kp8.fN.8-WxGi'8_yA-:|i$'x \ZtFot6=ER A9/DFU'X5*q[f/.s}˜UFf7[-w֗Fz&=-4 BxM*p*r }8/o-s^2"-^-4^B 6dqeנMsw湌WHggy~f=) I_cՔ2;)/@<'sj8ҮR|?ENvcDU{Jm~fsꈴ jcĴƻ&Ѱe}h n?!Ƿ:|er487ǐx1o|d;-@M"%sQٝ1b_#6Y“3`o : Gy5Z^*vp~d'xOpz_-#;FǗq9_??D01^0=9zΕ`;+'CIzL$t'zos-' o$Pm麾xg{Wjs;ݕڕ>rԖt{_ju'qpo޵e'fMx1t0:D3CqaϗsZXF> ;$;n-{>ѯBw?ϛEGwV2 xWU]pWU=ٳdOftEsW7?Ԁ'9 EE>i8k -%ԗi6f cu)yʭԲ!Dw9IEiN-KuTKؗW閳M7\U=˝`e_*}[ aԂƫ5T֦*ύ.Ϟ1C-jhyCtj?Q2v[u6u}m+ݍOyoS)<1e*(D5Ks_.}D{zѩ@|XUhjmթ6C7?;KPv~nMW6e0P:)P76W5V*p{|n#rC[Su}*uS:XLEV'uƕV,IDJ5Ī=d ZhmBg3YIIke1EP}>8I%ߒyЁ(?vz-o)U}yǬ,# U>.{sOXaxlf}-"~R&;wwtײBXիUV>e4yH¿1O#D% Q4>O E3_/7.QlB}';fӇK,&~o!wyܖDB '+$R!LҟNʕWC!~"!$~2!W\O!DJ4Z\*VR'T^Eч:KU7R QMh8̑KtBSTOXs QvҢ_Hdp~>![BBB'WXEO64,o9(J'h W*(n"*LY-L|BIBmjm7}Ba.#DtwG.+.*_NчįTH+UF"FTi Mh[>0a#DVu}ۨzʷ|Gcad_խCh1m)!⯣K~9I_SO)Gj'}o$~L1SNp Y/됛 ?#'Z@|z" N>yIOh'~ !{ 4v¿\Q9&ݩ򵄈;_O(gCY[M1ep&~"=|bJytE?rE^_=ߤaaw&}|lR2OQon:/5}2+j&RՄhWn>쿒<&B/&EQ&^kkI>!_#Mį$o6- wWJjBIov_C}ֿlj/żp#o~#%z\Aq}%"GO~GM_S|h>?|ܤOsXbчO_XI "Y/O 6,S?g҃*o%D?oҏ-A(b-_ч/RKį%D~nҷU i7I#!-Km7"} fB?_ BbOj~ KW&Fz ÿ[~g/ܟUJ/!?8-0$?Yg?\q߈_C;x|#!g>w%~eA ҿPG"iI B/ Oa~^Jo"1o'XZxù?dM~bD¿)< ^|Obz4R~֏ď]Fe?wwORL)_\3 u|q_Nw2F,BلЯ!~!k_O| !Sl"& L<?ПObťe_D ōJ|!Yq+/#~!rw5$?9xs¬Ui/_kH0a2˜>fMUdEK6}2Q3E_o&Փ|Jq6o&}%vRhfk 1Hb}IT^Gsbݤw~!c'EoM>RKe7+ďTuI}GBū~I8q1%ķSJ-|Z'9"GMV\DI/OUI{̤*/'Dv<>'~|wtBU=&ZaՊd:>o/@O /C4񕄘_H;)ODoч7*_JBXqgҭ*o$ч*wIȿ'_IB|"wIOUy#!=F=U2,Ӊ$ Z{IVy#!Əgÿg?/Կ tD'"Ȥl"ƏIw?E_J<7\*Aħ_f+T>} gMz+a51Z(@|!7(j|7 7L|"ַ¿Ť|!!j,(ۈ_MG1~äwYa+!pk ѿm)Z:B迟 ߒk{ME?,ˉSq/>>K Q1~>()^E?f~B[?-)E<#3|:E\s&}#ϓ~3!P\¿_HU&B}u[o': 1jRo8w<ؗ+JЗ՟|!ϕr|dO!Dix~QO~kr&;(b{ Q?ߨ"~!!LbUW oʑO1~ݤXx?HO7b߆>\ȟ!&T>I'gGC|)p U^EL_+gRʛ}1ȿd`r[ ~%1?Ro/!#yKqYRapI Boc_IG*BߓfHZx_J ž_J<'i|ʚu7?Pf+~[CmI;T^IˬՓZQ;RP7kn|L:dчkKU@Zr>_J|"/Yi(B/"}sZ ῌXķ* ,<>\C$D[g%_E_M%x~w !;f_(7\g^P"^$;eo@|[m?zřk<ÜYzm`x i G^es}⃼C6m]+GϽۇMkց4,-(9#g =+ Ϝ}TYD.嗶ʏo?JN[q*rfeTzS/ڽcݚUzyZWO"VpIs|RXf XCn}`:Q3"Z6,uTx8ph%?G<✚>Y36ڻ(hvlVa }| x09{ΰ?У"ob& c9ݷ޷/_nez>ec 靻Ў|4mھDG7{yAyzA_`5lHw~onEg/l3,,ڢ/κ/…q>D kx;19q^xPb7/Ou BaBMȱ%/;ٙd1Gw0ǎVPVVJ[H|r-yxi,F75ݹ}}t=p; D\31T: Ci臡͌oJ)җfGB{aF<}b}aY;OYSaY;,;bqƧ̰$ӷ3̏y?5oB|yx\,fwzt)[J.ae?!wmesDHo2μkrVm+#_q^PW=e˶.E=\qFKÚ!aawDG6"}{X^A>uaB9tZؽ_1ñ:1NV$&+6 l)kC3;sEߜ?h=(}*ˋ]Qنa0:UG$BY/揫@oYPHxďO+ex_zDrƫ#_!_89QHEM5sJWrŎ]gڷ* _?KC>1N+cS6_Q] YLQN9.\]s_X/5"5ίv+Fk>ʹ̳Y-Ew*~'VBi r*r}W|)^Fe_h!lZ[~WF묬hïS~z^.ԛтq2eFjkQ"v֞ ZGp$=Dua_d$'xUٔ\Zc٧7f:B[?3#R AG9)ujxɊ'G?.UF?oc) tNǡo{!g(}n/%c#6VdWtY-xmOkVnj>k,KY%]./>!s/}]|wahH_QCٝQJBF]'tV~A^FFp9 Ǫ\l3{R'i#28_^cpʩfypz"W̽?#x7ǿ_}B> *\PbLx'aH d'ƙñ\s/ɇD}㧼>=اj?$-/^bjw2cUd2%# *n)bb'ut6zPO/y(9:wxPq׸Ɩ;%t{RMH6novߔ+}F,̺L~m oҽ=A<,kˇej_̖ײ #G)tr8/zxOw9akt ݯɥLTERuhFtռگ2ۃ/_bkG aګjjL]]U*!KZJ )F&.˱0YG@@U7x:i|BywD)%jVSA>3ym[|>6tZu]޲ơ~b~=X] FHy6ҟ_L|^E_mt}eƪIt U>.#}/$Jx5BIO<^ɷK|'CXիUV>~Z¿1O#D% QHo<3jV)]D Q}ؿJ{^"o$WkW6}؟b)_#ө g?SAdEz[Ws,'~}9"~6fKӇۨ6:O&B2#Dk%ZeW\F'R Q+baJW*n$r>WKRm"9O!sB]9񟮗Fcw1g)ğO;xߠȯ$DoTOhw  Ѿ%~t̒&''~:V+C'_I'_D?]uv=wXxBF|'=Nt~Y1s/|zw2?]O8xE#B^YX?]y>{svϿrf~:/!~b;/uϻIrOǃoQī%?x/{TVB"_B{u> 2z7bxmɿ7:E)F]ſ!{;V^w8GBw?x d҇-<0/$Ds2x 7\LJ 4q?ݞq2?-n8iB3NN a:E>3+}ħju"#D~!FhɿxᾩF_*͊_d}~]שXO$Idph;gU3 xn1h=*D5>}]3˩⸟g_xGI?W\B?և[g_K~[7)o"%cou #Rk>q2$VD| !??_׿W J 19߂߿o&&~!uyC/V⟌'g_H9M>j$N k*tXC>~~ ~KYx~oss(&BmoQo~'\(,,WaI!?>/]EO$jǏӄQ3cRbʯ%31=FϰėS8F,+BW0_㳉w~JC^1j_; O'Ǫ h|ޕOS6>O|J懄i|+!cZyD_XOX&w o|bEߨԏ9N,W2Bϲ}_nɟG[N_Me|1c|>ÿobi|sOs|tOOsOs)nSt#q?"~:q#)5NƧfBs2?M/c|GK;Oכ4=Kf?M9ע&~ j?s~%!}o'~ZCį'DH(a|+o#D9'qÿwGxwVBKm%^m߯Qjit=&Bķ78ާ<9 *Gc{7eE7:>Ŋc|9!?ΤWYaįP\VՄh'_#7n#~vPVB긟ÿ;FxIwZxI >~%/Bﳉߥy_J{>+b/R>B }W^dw~Bߋ-'Q&rKp~:@W[' kzop27\#]sHeXC1NW^)sd϶Un!ݟD N?1|"|>yD1OdEڿs? T> +i.I>򹄈OgH9iMR&}QytD"_}q??k>_9WU.Wo!5+oXx _HORɿLG!'?$~!_򅊋( ~]䭄>)K9]RB{/#?7oU0%+y#߿QjB_CYߒRp|-!/@zBԏH!gK__BFn? H(aߖ ?W^/'u| 1Y듃c]/,s-%ku=x~}~lgפ~ ~՗ON+oYn}ùTLҗqcMʗ<<2B?I1 o5g*I s}[H,BI&SCۈRKO%w_DwL?Oq?s_FBq#?6B迀͊[I.b|y;qb~m^5IP$Eߙ8L)|eėx.= D!Lzg^_C<'IoTY!!FHEo:BߠبýͤϨv¿äw|!!1}/RD{IQ2„Ww>>쿇k{-kH}ZB[ʷ?H"~ٲ}&}G{qw': u@T  61UlliNO'NN/N$Ӝ81y{YtH|<͛7o6ߡ׏~o߮¿r-(v/V"Oo;Hq%~YKJ*jr׉_D S5d7M?2ymX䗐wɾϝ7) #_Ia<Tgb} 1ot~߯뗠o_ (F>5!!Ʒ?W~ߠ_AJNFBeķ)b}!?M6B׿NJK>QDX)⋉WKLռo"F|ZW"nR7j$(HIP!/&yKku|x|Zl⋉~%fk:Bpӈ_OM'P}GgbG3I~7Lb!?[Sbbo#CL_g~OP\ x[b! u|K,"PGBt5/iE3m;QՄu<_5AQBC<7Ao5RBy_nߥįV~@%~6!%o|O_%Z-h/"&>حU̹r"&>ؿǤ 53k<_H|!k~ͯ'Ϥ-п&E ٷR?:? Bį$~>~kU%>Y,ȃ7\|W/lVɾ qs$,Svmwum[Fpߵw߅6޵w=oіj<޼*f ^fTh"j٨ wuxdc@ '~|}6޹mz2@Mn޺_k-mP[ \ @FEɤ]wѤmKTWs hݠ7r֪Zs#ԍ"!3ZW?qs:Q ]az֙(c#L]7Yo?}L gp|+F4%j3վqdfCcΚ7_Q+Yh, G'‡DX@W{:lNT!C@={m~1xCC6*=кrF~M5}pZFٞ_틇:1v{ЁpfًL tTYOFu#voae_͵ˁ|VYR2Џ/CQMԽbQ~9J$8"8 G=$#%Sye\ p|ЕP:@F|q9}=Gjb;QNNtFQ3䐺MȠc A @̺_ vߘQ1q+4`s,Tx,dRkGڿL/֛"thx^2S/>:9DWT>e=!SУ5r?: !25V_6\elcZ>`<6\ήZNs7BGvg 5e{&pHs.Qw. B;*?O5t\W]O{0ױzrR8i6a_ZuLx`ia{@x/D_HWG=ݪ>wГN`îLhgɺ1dl&V{9U *H#u"t$چF;Ԟp؆)h?:s*tWwgfX;$sw"e?^ 3Do_!l:\9;o:xm?Gbda̠П$QP݃zήLG 4"!}N_|O,#^AW j|||yA߱eU.t=Ӊ)dѐq|v{Qq|h㿧jL0,ȳxⵚr= C6u6rv5szh _b~|`rz4[7YJҨNMb =|8_饫< d|Y/od/\dԀas;o0Ud?7N6sO[fbgr&mܣlsppEǛ2" [P#ug_O#>-qA+*?~h}zӟcZs0VN$IvgzL\IfoI\^l+3ŽI./r3פjeG#smZoJyMI%w#LI5]`~4?ejtDJϴHjœL V(\è%6U<^Pv+QϚ䑌sh;5&-ls뎽mh'Nt_lO^>>_:zd7ѕRJ֖טJq]C%C11#}@l)7уyt0'TŎZ9JVl;~Te 9>0ؗItgt2c{11,\l7F/$d#"'uz@Mt8!t?suOu=g0Xji99ƽ޻oe@)18%+ $:5gI{4)]ũOv;?˿YY*/;i0^ mX<+c٤9(߭ (_uA&W<웢|vvrǔǗ¾iS y7C-_zlB7E|HZa_I<+Unu¾ė¾$IŴ_K"Wk,oՊKɾJaBW('7})ǩ}d_ 񍄰kȾ:'=!o&}AطFBDRE|wV[d7%P &V:yk4$-!߬4ل_+%\cC+_@($m/"!b5ɟO|-7_Y|C!ȣ}vRBط&d aįUw9%fdާ{#a>7N;ٍbǿCMʟdawGD|\JlE|WNʒo]7 &xo~]i_Jៃ&!sR>WbBIr,ERGSK1G.<";|sK}d!{;w9~|I ޤ 7Yxо{ N8pf^8?x( S۞<x wRwMeml>פ:5,E7酚_&}"^H|"/Oؤ[,ӊ _/%~ !e/SrnU&"n&~"?+Mz*B_M:VH6B7F H aߪ-m"}o7w~C|!{p|!yyA Gy0?[xd}s26 T7/aǺ <䅻Cg">XPWM%_A (W">E|wOYNSO#'w}/Q<})&IL}6*(?"Bؤj~!+m'<"~KkEME"V; 2%D+;~ Iq7n &?8ao%yоQ?>!ߡ7/ DN^ŋ0/!~'ߗpNW^k~"ߘyy/?O1I/'+爱yG|W~!?jPQ_L;ߌy|HPC!5LK1ǹʟZ9VѾ&fb+-_J|"cf+E:ƌr<_XW"L]bK,_N| ț8Vٿ=D.y8C%"ZgEB>M|"_Ǫo"DBR?A}u$LڷPRK|pd~ 1>JZvpIxcklE[Ǎ_'_Mڠ oU?k#m&~"C3s}l7Fþmr|P=c] s׿3 X+ZRg?G1M2FX _AA~WWħ|Մ?B|b#wG_仈_A_LķB8|/!;I]?ʟ /uu93qRE\_:I|1NNb/O*H9njݤiB?Ƥ'YQM/&X'pyw@qxKt~&WB#}O3_OGȣgߨ?ۤj2B9\I (a [P˘8C2~RB ~"G?ovJ)b&U~&Aǟ#~b+ɿķ)bs7f ">BvB7[x{I Giү-?W߻Lz/ Dۤ[=W*M&ݢ5hEC-Q~/!>&}"!Nbmb&B"$o9!)KT^W4!爯VT>o4!|Wħ aWVžuo"}_}_W~}&~!)EO&}Ocrbw<񍊫H-HpkjBC(n ?">E<꿑R7¾oS Y? 3_Zo?bw=?M(mc?5"?E&Y'n&\GsIibB_">K~;կaSK\߆d"]Ǥ5Tq2ϳȣqc_I#[RY_H8 u|'QEٷ5Ku}_EDB7SL:K[ Ῡ{PEE\?6?ۤiP/~N݄br< B?_m=ėZyڿʕ7+4D6x"%L_WZxW'ҤMyo<&~1!Ɨ5(;lZo"Cz<[Krҿ"Oy%Dmg-o"#|%˿=Y΍J?7̟qs.{:;8>Xߡs.ی-e/?w"Ob\`!ɗb|b?%YoK4R㇌/__t@.3yzEH\n뇃_˻6$&]e#įR\GgL: :#_Ek%VJqo/#v劸^vטϩQ~_]G2BwwI7jzBwC#DR?>-zBOھ@ o1O!Dd_k+EC|׸_< \"iBŊ~Ǘ IcbK<'jItM"L_bR+%E(,7yQ5 iL8'BYo&~, o(| wz<_?+Y$X䡿EDu~N$#䡿4W(ZB'ܰUEþ+!_H cKs}Ay`_MU\N߉gE<[/ȃ7\bs/L*E:?N(XkbkS1C~oV~Az>6xF_œ&zg)`E4c|Ya.y|m:,a&srx|!O"/&} 񵄰Rh~!,B Aq ¤+5)!ϡy:?.ѩm=ٗ!x4~e滛{ub o8k H|t"~5&<_G|"ONt,Q5>z,IE\?g4R6xIOȣ'_E( Dd!$O d,IӵeOw!< KLB9+A(^q/KMė"~_f+4rn} ~"_d٤Wi~=!y;HkMz$EC߭Nd[40!ߛ#-&>ʷ:7 !D㋜[פYx>/#}(g6 a߇/Q,W^>b5Q?#qb|Iro1>~ҤYORi>m&}"!5W-yH[_/!%}>*)!k>QoDki&=儰g:ﷄQLVym_ݻ/骴MS? {l8w;[w .ƀ@k8WaNKT݈ax5Ѝ"PI̧=n8s]{8&!m;O4Ri >Ԃ7b.S^ `> S9Ag4.jF#h|õXV$jG:MYݕǨ4 Ly+G{Z7no݂u]{miC]wzHN9 )au#?9Xp:=2'6yhQ#y.ҙlV3Μ]?+3 ͧ.z! Pncp8p;F,`Ly̌K6᧻[=SS֢O\=嵮3u*BצGsЋCӂwMrV9Gc9pl]#?l9ڝI ]*_!L+eVQ}3#uBGz'ȫ*uREL_WGvWO,0tu *m+;]Itgz dL2a|XŴQxWg\񖖀0CE$z>1t#u`LD$+\%TPXc;YH⦠m̈ܔGWҸp+;;JxWH[!u'CGļylx=wO0k)f-<=}G.,Z9L:H]=GC#Ⱦ B-QQt/q[sO`DcGN:N5E"^]"k*(쪼XîZ1vN@6z-&*jXАYMx*DakIݜ,򛭇Z) A1ϗ(B n޴(Sq| ?xD탙dog-p]8ljXh6|]ћ 8h\\!4:h^gUsoi?鏪 "ڎVXT1@Ѱ3;*1bGWO/Ks+?m|9ܜi$f3CϩFQ>hMnh/n9!Vf)t(gd;nrCC#?fJNLIfl90N2{'4"!}N_|\,#^AW j|F7)oȐ7SV Nm\┓h8՞VI.=b͟ZֳT,Y42=E%Ųa;wiIfro=0m~WUȋhCBx|1b{bܣߓWxLLy-YMSٿ6{+9y]"k)\¹ki3%RSi Z }[j};j Tr+ͧBOy~˅ZA*[Ϋ9NK捼٧hn,Hs irKikӳ@&A~޹TN7ً3Ƥ ǟQ ![NywY.]Z.ߓպ_:L/*7ߺ=[V֯X-i>$_ssHFFϧ~Ij-菔α`~K)o?.,Pax4=[wC-Ty1`l1=J:B5Mj-wr?8?DW^'d Z~HިΦ1BI!,G<Du#<ٻ^'96Cr 5QG,wCОTJ=.ҵHQNEWEuQ\(w#QQdmAjUj͇h=6!,F 양;otN:֍jvr$u   Nԑyj]侗vL:qOA:q{y<{1 '1d Ժ,ټ1h/"գ^4bSST@KKse Sӈ#(jj!\ czl#يYCyOErvPH,ᗹ59Y:AaZqxZ)D4آbm^4qyt̒gS͝^]Bk7=t[Kݞh侞_a43%6NC챈~5,{_$|S7 do.f8=OC: MfҲ`dNDmg{?B i>8*/kGWNyRC].ow(PO$_ԚwwF36di|NζŶ:SKl;8 NZCkR۝:IʃuwY_ĩB^!Yoq\a7%AY5tV3՞nd IeNtwȟ@gH,T#WzEVc񂙰8$6LhFeيsW{C+X)I]b5&-}nw5tAwcMMpMл\Ai:pvzFty|W3p߾n&;I?ό5Iqd]]JlZmի)7Dw]YxD&O::AF!'TPedz^%"X rbI4{ǠnHWAKxXm]ܧr@[:pcGR0;EF0RrL:~kl1dWOR&%{Y}'jUjpTFEmDM#[G?Wx>&:2f--Ɇy0';r:*(?'壣勴.dj}S;~Ww񥄰o+Ⱦw!;7BP>xKMf_>i]K5!+}9MGžė¾$IŴ_K"Wk,oՊKɾJaBW(6})ǩ}d_ 񍄰kȾ:'{Y }AطFBDRd^lvGW]aJ'!~x7oV^RrZOlBԯrq5nͯ Dn$~Kln"["Vӊ$>KN|"gm IK a.?b aįU's>D!Po4"~7 "9H~7M?[qt߇;Gx<`ҕy9U䟃&!sR>Wm[~/0E{a<ɃfF/srǷ /x(o2cUw*͟Xs7?L?.[Lz*Vk}o#L﷛NO"aҷ-Nӊ<~?_"ARMz/'}1y^W~Y˿Ϥ[,<$e~W)b}%}i~ !IZQ_KIuZ_GT_>a/ m)n֤kByyw)#HE/Qݍ/e Lr !A.8~0/OwULc\y~-?}n/,<Ӝ)ZywpwkLBA|~'g"~L|"kZͯ (}W">J|ySc_|O%~ey_SL/'=`~εCP5W¿mbX)ELȪ5P>1GUz|bOXHk$1*bƠǯ%M"~"֏1baDj&?ڷFfB3ߪE_LNBTF(gڱ++@ħE DKė+w#o/$D}W)X'񍄰(Kא}yB$ گ+B]e/qm?Ys 屮yù46@`}VYjb sn$~AǘA'w=_H'O$>oU@)*6ӈ_BLq9?a?B?u[Io# vEbg;؃KtQˉ/U_ x'kp[4>!'SU&FӄIoȣkMzW[7QjѾo&ͤwh~=!!A|R.ޣQwGC{/&yP5Ʒn"_(??FM BF*V, sߦgI7v N_ ~;faxڦٿ}٤jE?r3!yU*b~Ih߯EA|"|Ӥok~ ![mK/]g4ߤY)o&co"D(Bl)o9!s窼Wħ ѿM|"֧~ (wS컇4!#Պ dߟLW aߟ#a߽ʗ}@7¾R$>a@˖IþoT\Ee_EWW_H׿b!>E<꿎``|ŋ4=ߪO(iS/ȏ5 b7+O%0›Y&!"?El9[tEO#\G3] }FC K~Ϋ_5!ϲg+_C7]\]t>n;"_xW}-_ABEߌ/ ~1/Jkq&mtƫ4 E򰯊eȾį!}ķ(' uJ8"ߠx>+㍚!pUPKݛM(3+,< =ſ,{o?k/VN2ϷCF?Ljo#y⟃L|!mZnO*;x$߈vC.ewyoaIB&RBw s'BĤ4!ʿԤEJE(;.m|H~¤v<;DrEZ_ůJ8ϾՄ过-YMBw_BۓCOd2ɜk9Wt\qs&ėBI'4>!^,$!ƏkL#rBY~ B_gǿJE2\O<G`c4O}y"sIX?<6B|J/$+ aMzEB*E-?դkzBEC-'YTVBʧU^P_|b|{upw/4Ś(BXj}/'~!{א}7*o&}}RZ¾H^ORE>IofBo4-y&[ד7[9~ J2 6ޡ 1=B心$]M?/!o4͊?_yOy !dnE(QxW6^e}Vx}|Iur3&}"%L1Iev -/sF1!%MDՄ>Jl&m1i¾oUv_Mv_H߉&]kaߞywվ_M."Vq9wIj BK"aߥ\cғ-G"BoҠW""4!$񼇂ZBwI:Bwc<{ ^꿔gxr2B7¾Xڟo΋儰_gB")=qi??Gz^sהmjݻwۖ]R |&hfCڸo]6h*Ue"{o@m_ݻ/骴MS? {l8w;[w .ƀ@;WaNKT݈ax5Ѝ"iݸuKٵЖ}y[TqW@Mr=5afN8&!m;y{w fu aU aǎ ,tXEY6(N5ض]˜wu'tuoD4Lоj[q-|mG'Gdt "І?o9j9#:E:W6U /)3gt;>ƊL,H:_Ȯymp_!;p;F,`Ly̌K6᧻[=SS֢O\=嵮3u*҂WQϹVSEoVi[&=ً\wwT~8 E̮ؑiHq`M@̈́}}/G \"ZGO d򓏴u UIt̉butJT3x<i5{ťbNP_Ѿ#!5=[Ncsݙ" Lߟi8ni1"&]A3s5[ZèD{CQ$!߸vj}3m ;hņ Phbc/.$ )Lw cڐۏ莔53ԣpu]7?jh˜np[P̻)cÕ 35v-j?6nsh(0pRawmPP;l]huGC-r2|!&*%5zˉyV̵v1S@0s;=Ҝ :HV3o$=x@_ S3NetuJㄞu2g#ͺ CA󃎍öM^/mg*LW>Q3"+dlp40ؓ{0ԅ#ShԽްcY; vG.vF0E$GY rh #[cYX^7 Ə$%Xq``נ- 7{5vLMxǠ7 *uհTk݄*x0#3|G>:x~ &Z%4s_( QjFPoxj$ˬfVEC 7*&w@cI,$q$ي6xtT 9'Nt_lO^>Iv&˫3 7ʅ1z^mmήLĶlr> i*WH;΢wthNDnh/nI9 Vf93t(gd[krl6,z,7^0sb/~3d8fS΁q=pJ_Ggi8Y)otf,#^AW jn||K1y1A^;ɾ|KrKNcUl'yj=G߳sF5xX6 \iR n6Ғ$8d_ab5߫ц…1bĂ=>I=,OuelSO3w35&9I:Opc{[|\)%PKǢZW2p.=bxZ<gIb<x0M,@\+~5u:*jI[O~on fi&{|o]+ӝ(N+1,a,Hչں>܂PMA`FZg&ݢ,X+y׳IB 9?SC5j-yW\>ulk⎷aqrzS<=^=BIa~QTܲ~[lO#u${|{$Qkm|~;.m< {/3 y)ac ˩F7Uh- Xp;='1bAcYZN'nټ;z>`D8?Jí?rC<`K)] wpe"э /GK{Vиϐ܂`|FMn17QEi=}t~`qI"';EGV|=nbU6o #﵌DE)JU5TP QxD`7KFr|xZGkey;9WC\5wca2%ټwr___?&_NAsCW3j҂=x>d>*Pk+3/c^qLͣ^e4bRh廬[@^D=?5Gqy6A 0-8-q*n Pf͊?Z~*b˽Zl&wF]DsOkS1[i ~LgkPjˣc8jJZKJD_?D˝M%MW-yܶk`E,S Mŵv~l0%P~ V]*[ !{oAvm7^bNw,{{ѓ2#}bѡeC Aa(m!QQ6g&|m tC9jEN3tk)b5~>n ǎ ZQYDnG wnZ/\x^gt6) )!ɖd$ %Q , H!>Fz7U*(j+Ƃ؃Gcw:౪JC永 9F7N$IvgzLܫT>+VOn͜HfNh9R'B)Ք۟&UX[vt@1?ҸhMMI+zϐESR}=:.h0?O^ֲ(RI4UMJd|kV\JԳ&?i>^m]&&ݚu~WEmPGչ#G;5{œ|亁 1ymU5I7uu~[zwoZ:cXM_K(+.Q^|C!ȣ}vRBط&d aįU's>D!Po4"nw2_ ^bҭ=q)9Ik|ǿ[Zx&]i_?dxMz*r}Iþ_KE&DS/6B=N8>pp\;ʣ;\lᅓYK}ʤ,< EGc~UOLEJ|J?bLKkEME"V; 2%D+;~ I'~oM[ pJ¡}~&|BCq7o_@Sa?-<'_B(ɹN8/!yj _)&ww9R gW"?~rBriqWeAH~_I~ ?k#v 5>bg_@=7j|:Fii?8yA1Vj|EćJ<_cǘY341+"eW)b9VՄ?S<_C(fZH~%>_og(gkqw.<ѿkO#\Q'7כA[#ai>F|#!LREćg6o&Dm},ء7S9c{Ǻ< g7>W@Rg?JQopr_@Sr+u;HB BJBx<;&kH$~ !Lq9wWtn[!x< {FoWI}"D'~-6hk9i"u&ݠc'/W#w=;z{/$DH":>d<, g4}|L[B aMz7B(įPD|b|z. 1?Ϥ[x|o%/ ~"/6饚yRI+L[W+~7KuQ5ߖy h?OS揷9Nb/$Dy;~~$Aw&~b+ɿ}ķ)bs[LzO_ ~;!~hcGLM!O57y1*b~>n'5"_$M" ~.(pl@ϧoROo!D!?Rn7鋚_M_/*_<+/"D*)zk&}Ccrb-<񍊫H7-H^w Q_]FBN_&D|"G;I?&BߟDR%yJ ~"/g> _x0ͤ?~"Dل›\&ݯsq)2^OBMEK|"W ~EC_-sկiO|-!>ui8NA͟CE`N7ɫ"H^qq؟"TП"p)P7q@| /f d }g$ _b9&MyGt~dGӉ?פWN/o!hʗkC/m0[Bj<&}qS ͫ (<ͯ!/ ,o4?M]ⰻ3?B_@k$J*bU3s`< EL_7XQ~:?į$D3Xx!Uj-&WfE%}VE?FgI7¿(>Y7_aMįFQBߦV{M"[؛&.6_L.~<)/k%bVnJ|roGwk Bؿ&h(rUI߻XvK|"t7¾"}@wiBwjťd&]cY_ť_i}WߤHCy:γiWOBԿ:E/95KWb|9!(Ӥ[a߳O*mo`d?Eķ%>I<7\_IWՎIB^ _!_|5?/'>I +Sd&JӄUת}@:¾s>?{Io!Ƈ7<{if|ɿk$ު|ֻ.>$>I?+2ˤh~ !ƏwGP&IZB#>fҭ?OǏYWY,_QA݊:~|Τ5/!&kGwO"L_L!1R.!XƧKHodׅ@<}!o8opPe,&TWy~^{cf0sDbTǽW@w 3j|& \T~ bmKb6e~H!>D×kOj'JOs_L##s$ 8o83'*,N|%~ƧYLqk?[xùg/ä/k~ !K&}"_&T7?_1k_Fj<R>/ ' -Ⓤt}*mؿ<.U"?pw= |P?h[g_Lg+z7{/3 1>25h`|= 1>M| !W{^?qk}$~"gd~I:1s跷}OrOϑi콗ܰ{5eG}Zݶe>9y=6۶{ס; JUYD&Pbפ."^|Lcyʘ#^Tm.t*16QU~fGτi-p~a3vXCT:$e_e,;L =#CɱLGEn?=Ox:'ݏNILo잞LsCOΜ]x9:;cqR7黐jL7$˄s- 6{!gtgʬEqyLk ;eB/eM 37xL^tZ@@Rr\wL7 ej]Z1]=HᢁOd’fez{"%'hk?'ih:˴w . DMGёmnbW 'vh+Bu O))/ ][ ?wx?`8wA:;sm]dUsdO_D]]]2_!VFA? sR{A ybKE~-yO8ї9ՑOtmsWa&d93EVᆞhթZZ7:04RW& d.juag")#X RDIX֩rx,ࣺFzz20eԐ󀥆mȐʚH/9^>S~ fg~"CKPr,{{f5pl90N2m{;E4"!}N_쑥r+SUAmUV1q9F^#/aLÜ Y)'t*=]S&f zj8?+F5xX6 W_x#-IҌSNE2-Vj ym-x|1b{bܭwߓxqLLy-YMSٿ6+9y|E}5kȡZJj8p.=zZh{)cRR#Tcڔ[%l>r?_wG[A*[Ϋ9NeS35K捼٧hn,Hs irKik3ӳ@&ݢ[IY73Ƥ ǟQ ![NywY.]Z.ߓպ_:L/*7ߺ=[V֯X-i>$_s2FNg$Z#n{Iw 5:C..o7yc7*h MIi[qǼI/b?nZgX ~hl^v9Ae ߳ %YK߫4nZ˜U!e Ժ|dd6 NAQ0jlد\=~*qa_,&O($F\vj!Wke'Kyj ~?:&=8Jw$+廬=>uNwf)˦1NO-JŋnX, u6y &C7d(Q}'‰^Ko\e/z{xܷӟc|OoO/3\E]7_u{mb&?YK'W>Үrnfm4Xv0EMR0#Z_ d IWš-6#5%5B[N&=WGM3u_xd:MGNVHv:)&;z{XML{Oz֑^ɱ<ЄK[$9!2dOqmBpl0suOu=D9,pOa]yo9?gmxkNxmgD݅v|(Qtp?q&eQ>Pxw?dN"/vfe=*l@ǙWY)@g>W__oq;5!M#~b7. }Fþ'o??)لo6%O%嗐|!/U7ل/I|bWߋ Q~E<_8ǻ?4/W<O*¾ń{EU=Kɾa_-+[uNo #a_վP׾e7¾&*}%}+"aJ'}5HZ_-5-^ u7TloQk]# JlBo8y)W^~o՚_ANBW/"n!b5_H|-׽;]/£}RBwMɾKo&}Vqe&]"aoV&]{L:f+@RǏv">P0_N3 DDþ⏑},V^!3"DO?G1ޠh>+/ D_Hk_DO).&뉯& *6c_B_G B?U$D[!$)n%O%~N: ~^Y&=W)W>i_x!~)k5RB󈿌/7酚yA<! %&L FCˈR0's^hWFCCCvYr.8CoB|)!Ƨ?OQww|zI_hHyu;oP.WBįRl%oSD-&'m(/Ŋ&}T¿1syQ)$~?fҭxM#(%eOf"߿FlB_o8 _A& y~Մ߷U\J%~!$~Z> ~@6?4Go&DX^?3.͟Kܤ{,(.)rI/#WW)rI:Bw{K gͯ'D# ؿD|1gjUϽOyٛ? '!_ħ &~1!5u$_ Ѿߨibk)Lq/i~3!eyE^Gd=P#6NDjd CK"Wu?V&bhvBmG6:WwjM7iE%~ⅤEBI%-Kq~!!2v/Ä\Ay?Bu$-|KPKل:~/!DbK5kƪZ<[J\Eo2>[K ៦y_N|oJ[!k,8yW`FuՇx% 3#?:|[>}'Sˆ~< GLӶ׽O >UX}uu =hUSAHɈۆi5cYy{ >D:gz9s(yXo?lZ4,ؑ~nn*&y --߭<'&цqqdEHM9xG +,2#Ƭ(ay2j|Y"N=aa:zKAc z|lq8YM8/(c8=sIҏ#XzsU._Зx넜80%';9$Syp}5Wo~,j5yZoo+Q|r!EeZo2I:M/gV^!)j|kzLW:M0YrzhhsiGizi2xɼ/O-+'51gaAt{ #;- pHy\Ӡ:kҖCo^H!Nxm/qbl<~?̕hS556"UQԁUtY 3nkÜ#U}V15,+Fo2JzӺ_͞ h9YC*}\X VPMs::vŏKet6٘~^=\Z ;d:o35u*Of{f1_m+3UM"60pmFflixhV!_զuUH4<(WZ 諒]=&IwCWβ@=OijiUa>aƐfpfDi}5|n s o9{aM(NZyՅXK|'~?Y"U?O1IN 5P׍H,пx 7Q!+WZ?E<5W5s_C) Z䡿x`#鯱7|-ٷ]G2E<[#D.!UQ_s+YxطMkVfBo[7MJ_G}TToa+':W#{?ɷ9żp)/|(rGC9_٭+,ɂ ŧXx_@ _I~? 5n|\LbB%(6:ǃ<쿌 ,n?慓xͨ^&ry_Lŏr/"+="LjR.'X5IUXjkE^Vy }c᡿Y'_lj${-+ F}'I{$/@79H\0>N%b4!NUdAy%_Rߧ?g:WhgEþgװ>FB|Uć~I/fB #aߋ,xEc] ½VgσU~Fo$~6!&KovW8Wa[=y}$/y|z_8~ﻕB|!~ⓊiL/&>d_"ZD>B|5w}ujO^vE}UXKj'5=!IK뉿JS7H}5o˜Ĺɾj-(D<^ߗM%!_oPT_.ߝ/ur_'}U5pɾJ-(@|NǚQXM_K(CJ|?IhRBW}LEZō6?@<5>`Vq_Wr_k`b_Lw_WdQbua,w_7Q ȣRI;I$y0.@2xcѿei*,iK꟏%Zu78B˔>aoV?*8:y k %LBԯ_G"Bȯ'>fԕ@|5!7_|K!eI~++!UNkF]ķB~.B~7xN] F[LX92c:'"'5_x'kpc)!/#i|Fyojy՛!+äk$s$B3!yǨ}; ae`?_Iקc^O'=q՚G"ZǏ~Q_K B_G*V@|NwmxIcH~MN(6sQ\cW1H='i'5v|Iþ'?WQϯd&2Efvr^Ipr_s@n- q&=[W">!&~b+I/ y_?_L/!~"&\}/3f<{9y|}EO^WWHCGѿ^c>1\M!}o S*ħ7Q_Ml?W,w0]yAcc2?&^-c4"{ME>>b_qM/&>!OOWM? O^+33}ʤ4TdI?ȣۈ/S3&}N+ >5y _Lvk/t/!ywW}_!~ !*-_3J}ݤ;-oP-M ߊo[Nb?y{&&CH~!ſ,#K!gڿf*/&ZK5_tEM\B7&C$?Pc/#}e_Ir?HEߋdҽ%Y/bw7BK a?q?qOⓊo_@eYQ_/&kQk)o"A#þS/W\ہC}y<j-Lė/d97>$Լ9)&sIO5iEE|!O:~M gZIB?f=?C\/'A3 ,(oJEf|!JL?6]joȣ/S\MM[.k$"oVe~Dxy:"'fL9"qwh"~ sh 9"'_3휘dͯ&IHUyB<6U_5H󟼿*g\O7iB?u5o#O"~nϬ%P?a,1"J@q?/'y%hER#bB7cQ"!o!y UZR6Z¿)(74CbKbFo4'Mj:?h0"ėBYK&i|B]$L_JC2Ⓞ:'XXn! +,J+!KJE~h! Zk2BfLH\jGoR[Ǭ5Ϭy-пBo_H ;U߉-(+гo!ɾ av*bC./!p5$.?D>tG8$u%~$K)>X:Țl藽+_!o8o}j oӚvr/&RgQ-2$2j -VU>!o8oj'g7qҤ,K a _]bo&L"y1-2_K4B_f)-7SB+oU&V1myZw3 MzE@. I-Ⱦϛ-Ko#W%.o'2v;Mz&IȣwAۤjB=&bQ"y]ER?\8Wb0_Wyst6)gb4%hL}?c,U&{ 3v_J|>Bo'Iq ä/kVBߗ"˖m%kmkԓ}M| !;U߾k4s' 1?}EO)P|Ф;s[-#~m~L|!OLsBIwYg7(_yγ~M$krBo,SAG=&Dr?~WLBϽW?!~!WU8?""ǧ߯?W?z%0X(/ڪhlꮈ.踂a+ib0:EMc0לDV>` X,چpWW^(F#񇭅1Zh 0?<r@:x֍[҆*r[so^̧}~ 2H#>1pY߶9DUi 7ȟ(;S*gƛգ57aǎ ,{q.jiQmᦁ]˜=˞sd0Am}oK>:w 9!bdvGԱyt5]czt 5}t ꑱ?=n>4G65Qm].K1XJz^.BGτ_Xd]a8:4ENf֐<0eRBHgaҋžF## ~>5E3:^]-џ&)ڻ{g'aWw&'k={<!EVP:Mqڻ#8G9afw!3m҉~=M0~<P+bpY 5h6"?i+wI{HXl/>'z{#$[&eG =6_:#.*7ߺ=[V֯X-=8ˑN hY 4=B:A?‡R5A/YQ.G4 9Ns+{N8 `cc KOQ~(.Gѿguj ̦"Bg+"g :z,94#KG#TM塙ֽ*43$ ̈́wCОgs`"]U~kP 8yYyG"H>k(B/p#QQdmAjUjBGZ\aP#qD6s!"+Y,JeShĂ[yubŲl*P|'&Hyj ~Eu6A/`ESP 9XK/ &~NNI)ϦV8 " ~ٲ@i'CX=+GW0#X$E/,8 s+صXMj ~;ljLb"uшVDluL5! ݨUVrx`$<0=]|_KKvE~+l }z'#s;'GizizC-a4 XRG~)?+wc_P>ϝ`gY!z#pߠ;ȽΟ=yhJ5.˘pI^5p,'f3+;ݙɾ\(xɨ.~3}y6բ $y?z5ܳR}p~L;.hEe~-돚 <\ޗJW/UdsmR)!ɖdEZ-*OEޱJǕ"׆[$*7ԫ9%$bFgɅ+ 44ok(]85kݙ)r$$n\l3j{-z$8îSMKV)ՍiR3&SRnJi)2{̤ۏΤL(cd:YlL/t cIeNtwȟz:YWlW#R<,Z&Ʉ-'66it۸A{۔+X&?՘>$^LhS556w{7H*j:Cu@ mC!ܽ7̙ŗ m8cr =5q|Y ƓaN丫ۘ>KA$}/k&,fu )kf,>y&%ӹCrIh7K qW+^%$gݮћ$]c7l_z4~ oi=P*.5h<(+Rz#sb ]mΦRwJ6^؜i4qT'/3 $eaMSYT=8)`$칺ܽ'z՟zwQ+;a.ƻn|pSv-kElG]h'9KtJAIYO'(NU~[egTۙ|ns(8d<'b|[<~N.ʧe;Ii]P-*(wžs/%}ӈOo/!f(pˋiq&}/Qħ勴DþRFO|!KTL;~?$1!¤5yطjťd_%Mo!+[})ǩ}d_ 񍄰kȾ:'{F a_}QyN͟XSK4dس=ägi~"g5<{ems5?E|I_CsO+r{'Qq^M&}"^Dr5&T %&}"/%EqIr>mWf^i!/{4ӫL^mһ4Tט:Nך<{;7鍚"w/;578~+o3NwX$~3Ƀw;a_￷!\ o!?D>!>D|Qw¾bM£[I '{I^8'!_Np!w w8 / 'qbC^8O-p?w7o+bK&CG*[vtC񵊍?y>/ٷ ?gP7'U/=jp|Ƨ#6HPDBSߦlwGq'y?} k$_l_;_@W8bs .R߱<%~b|/'3sR" ͱr r_@ B*U/&D|Ql %[xؿ Q.~7h|/Y95i|Eć3bZ䡿 E\?ߘ5Ql/"7¤=y_I|"/2iW"9RlE_C(fJ4v!D|^dRE/&/!~>!):>mbkBByw9Ut}*vFBw%Kא}펼3L;!:,PǺ< gw<>*7O,Bo9b"%P_@$~!!o ~!o$>/;MWB:[%!xB /S\NO"~!L*S$J| !F:ŭ$ BoWI&~!sC(i o|䞓+b}'&H)_hk,NN"J|ؤj~%!%&"/%~" O?/WXO*K6]ޤ; ¿Ѥ7; ˀIþ7?_o1mb դw[mW8K>o7靎 NKtp;Ou}ۼ:E\st7¾XBZ[ڧQ/'D&~"Wiqo&D}̤,(ķ($j'5 By|Ϋ_َE!Q;G%I?þ?W1Ij5fw-u+}äoi~y|_PI|"$~g49!>QH\ CKq_AJ*E>?7BˤYQ/_xK~W¾_EC-_I~_X{ rg:/u/Ť:}@g,uBC _c_KiB/Kܿ i~"_׃[^&BwZzZ} rB-?>4ō4P/n΁XQ$[i5l|_ADCTK4? կU//| I&~"_L<7\F_D_XOM2o 9gWZQ~ڿM*%hd<[ʧ#귔PϿ o"}RŚyXyi"?{uħu ^ObE\_f84H|-;x)9qx2]Ϋ~Bg~"BKf˔"eE?"D_iRG$&VxFBIRԾGML"_B<įWl?A6E5/!W/'5Bub/ò)s<-CpG?1|m/i_JydmL)/$,)+g_G=Eߎ?>[Io$^F/"MQy>%b^b6BKN( i'٤W9ؘtr4y*0>Jڤ:kfh_}E_Kbu&A GC,͖3Vo_[)&?'w]dM(b|&"?$~!G&Cp{40OOSbg&ݥ)B&"">XKa%yq_HڤXx /!D?,;<,=`|o{MOK:~E߮/S,wUy;HtZ&ݯՄ!_Gw||B!~ !&=hQ_Jwe꿄ToRm0Hh~ DܤqyOd=~_d_dD/1̈́꿄1CDB/1L2?ϲ?˟moZ _-{͟H髉<Tė96fHC<)Aؚ\͘Xb$ ?f,ITXxW|5*6ƦDJ aCuy"nBb v"D-jK?+WՄ_oj_B-%qcY&Vj&B"B寴=!\(oaYo'wopoI[-п2E4ah#QMf)!KvsxI67i$"}bCp}X2~!VQ_C^/S&'.54'.3Iy?@!K|x"WT:dRc]WZnBq-پeKMЌ1|e dIH2!@H#=WHH#=<4O/<RxA~wwZ2&?o5=g̜);;CEۈ%pXaX0?3:EhĒ"⯡-&^KBݖsyc/X_G-x%&?"~=!쿁 ?MD QO&x?IϏnB-aW_Gho+5A{j߫uxħF5:aG%`?oMHo=yMK|ެ[%~)!["/l&oy%?o-!R}R!Uw::^~"~A~DILBTZaLj%XA???-7S|JX6sD?×,9 :#?_{,oy[N^WR~< JBUK+o/A~ͽ7_+(7uo#D"dym?omvB=͘1]GÏ%kx>fƇ[<1G%?g_OEF|#!Gs <0(/uҿ5op ,o~J-EgRHl?EYY/c/0*B/kEF| ocu#.?|"$~ $~-1f}y""~&E?ɾBihBCF6T-'-|B RN(O A''pħ!S,\y:LjB?ђ>KAin*u6B؟_'3 ?7J]oV0о Le*kHj]U*ݬƏ %7[|#}1F~/'7Y ?/O:BϺy_oIM3Yw!GVwCQ":-п<*_=K(_Ew_{LؿSU\߬_%wpE/&Np߭^_L(ykI1%17ˈ_&e3y< + !ep]?ǽ4gaZ6yw'L&~vn&lkټ={Z쐨dd/Μ};6mݹ =6 Ŗq{>q={==z3*mהPǢ¥v w .sgV&#r| -Qu#㭛En-[tVA7ړx (UCJƖz(!?oٶ+TT3UgpXl|ZJd!\`y0},5+rʡT]VxJG#Q1CXtgrZ.wֆ:ŕG4 t UqyN{ 8`Yݰt hLGO3'2O(stoܺ~ nxv9eofe ڻGL%WpM;[=[5Fc|8K~4;qY68dae-.%}ۆ Y]1Tt{3831f\9[Uɨʜֳ:[9[uƝ۷kl&Ϲ cdpk;ZF.)3 ܓGzY.Q[3;oY`ϢFїG޼_wԻVC-n;+Y{|*01c=3]=_]'W ]rce6EmŶL[_jwH_;ushjC['d2pm@uqW硾SA]HLP ߔHm}m2mm*qt돵JwL{W[(qǏe:#m';?qءL_#/s}3"P$u*q۩`)Nc1LwPaQ&k'j?)0UD$v#|#hfxss@vա$=6-'xF0VpYG`tgL)${";ݝXv+Σ=]򞱑%bFezB=W|vd{wkʌ""Hpzzzx)y&eߗ= K2?9p/} ^$Kl+쁈BfA=|4 3Y鏶2L%w[k;G"O )wl"+2hkEɻmRItt<@0n3 +s}^dj 9ޙb9Ҝ?f6 s6Q#eh>zLO؀ّC!g>!NcNE*xTw@P&ߛi =:Kglʧ/ ?fqnNx870{%{2GtW؟򪂶k?6y2qq{4 r0L6w sPXip:tc 6TOtDmEOSZn1czY?c l&-L0YMoXånSgגerL{2TEl`TCҐoLQSXן9q9n0+'_Gf=>{ מHWDhιFYxRpttDrU◠Y9yOqX\w<ݞhګʨvo@;gG_ϱTW[}CeX[W?[šғ&c3-x Qo]zanr~]ZЖA_cA;foo+Y_cfV?V˹.ǁg~I䴽X۞scUZxh;!G:%vFdݗUlδ F>t2}C?$zz?0) }k^COQs}VrYf~{V>^&n~cN^ca=s.v*r0=&D\bTKs5ɃRugXXnJ&LTޱ.Vu\@\D.T@/ \@-I \)+qR-%>tK|\&i٣C)#E^%̣a*5EQNXNH< u=aTW;aTibՠ{9]o%t .k3W͛nt\oQ^(S_%|J|n=UhnKC$nȘi4}~:Q<>'O,X$dIIk, P)j^-O R?L IWggenvszʛu3TVKb{JrlM K7ofȵe[kObkr5&oN'ĶEtvޑw* j.yh0X-kUr}]Zir}=`[@er\_&3Gσ+P v[vh-E5tuB-1c-?= bd#^PoiZI@%U&\U^RّTZU?6.-t.׭Glܐk |ŠfpvȀc(<ҫXУB-:Vهw>]I#164*Xp+=3> nSn(PdU[9kMB`sE B{nZ&z=`ErB_VlkT]1~ ܸUهa 0گS;u#5r\yL3Kc`>CՔ60ؗXG~2eZ}{ru%bVl0\eZ˶-v7~;ͪxXYl)Qz~nkAsjGbOj=Zo W/n-[l2ͳf91y:{A9TZ`(׍_W&dE[廬.M }rOuhZ&XD/U ֺBe]W5x>s{^Uĥ?yL |b, {b51o`׸LTsx;0N8'6Kqƫ~$>hIC9D . Jb`+LɬK z,7a |啝H pFVLBsL- [IF#,!ezТ#x5Y\ċ<)#Qkkg(܍#D-~X6[ɢQ&1m_[qt|ků`NL:>ҫ(gsOY_k2X*o#*SLEF{vmc?,RU,;֌\BS$]z6qDQ 'Xږf~>^u}!^'rR`~;&hEeþ~ .h:~]w ͯlEбItxAVץˎNSQ;:/UB uNoM5?5_MXQheuXK?E1ؑ :v{w4458i7dԩTW[G)kSFPg4>VY`3RXiDTN֖4FcMKo޴Z'lv>NեҺ:o01o;?*g]:!K#zEVfJZfDf-9u!SxԦ-dZ|7Ml&l>GE]PG:WsT Ԓf:Gq sz7namkST}}}VTLm!U6}|ZN{swHSÏ!@*W/ٴOf& ͍& Her8 awƌ+gKlOZ~4GNsvRnr#GO!;Uuka[u`zwpO_`y0'3Qz|q-p?%ncfzk!rBHXjq&)jSk>uC"5oԡyBgVMjM+,"yMN©!֮.GYst5ŵ̇^j 4\aS_o:`Ұ}6N`]NQ/ +}ZMHq{4vԅ-+[z jS/r4h/^nDžN޻#6B7E*ǫ7Le1Oj/`JfҖԜftAUe7 T79{aL,~SZ2ϯ,놬'-镯m 9kr,~M_w [oNMCje+r|맲+v{YM!$J_?O۝=0gV^mt6=o2+,S1 gM`ސ4=@_R(- ᄊDwX&~Y1q=YZsh{Z/ߊ?rɄ]ɤ,^ s"rs8ƹ+eÏwrƔXͿǟ'8Iͻ6f=H'cS,_Da_)a4g#K~L|B7#B  }ERħ9R&~!Bio.5ȾJ¾y/l/v5(yW-`WK|!#~*-XC_Ghx6 PxSۤW<;3UgM͓/c?S,HYȿ:%c"ħ~!˵7]:Hp7HBBciG/"Dzt8)R*kț~:þ>"々ɯ YI,7$pAdp0&O7._*8CME<<^ eW-B^,ՄpE_L|ZKo D{)Mɾp/!}/Kyw3KW[tUWB+tEo%Yp*>cW5:CpBONJ(omyFߤ[$~;!7GC[,o'pF1!:C;I~7!|Yo&yC!}*?,~ ^{WIW)>]}8BE|cw¾`:m$C 7^BV^7! בпB^HpyÙ ;1~~]x{v0?- o߷. y= S ? ܟ|"~!Ag5H|!?W_*BCħ 14s߇2rߕ(,SK-(??S0E_%~oї%y+(S~w"DM!('Zrߒ5F*ݐ8ȋ}[?o!T %qo!񭂘GB|w 뿝 '>Bc -K,Ri_+~c:hrg H͖9~czL[6(_ 9$?_A|%!y'?_@&V7>$DÅF߻b>Dg ~>#"KS6zN[. -aE_%7a=RlEW_Khuu_G}il5$_O[kI@7 X KΊ_&k?ݗ.B_MmjFLa?I~?-?E4إ?yy返x|se2g/'~O{ؕ??B]I| =$]M"Ud_2[!Q"a_|?:gPkǼrwj Aav@_J ~myWRg* z+e;A\B$! !# 7_C'_j TBi/\J ~!I gLV;@yķBoN/$~!ϋEhx]7h^QNuߙ2nx/yid=>%?oV$B,+mV|@ϫ"Ֆ͒_/mOޤ=ۻ & K|!ߪ]yw;)6!s:" BcS?tyW<ے>b؝ Ϝ{_/:!KaXA-YB]TK G_MP&#O,xn>()Kk8/%i_Ӕ{%/-xn__>/#C<컏r_9Um_!tħ Q?_oX$F wt/%}ʏwI~_FD A~~$S#F :Ba#&A_H}^S%}Q?+=I ygS߬>,s߬E&BۗYħ Q?XxLk}zAu_yu¾A*?􍬧,Cp^/%c_.HW\q|į&{y?fAz?Ga߄y?ǒ>OWbJ*mgm)>C⁘47rAZ?O'x?[F|`igI|#!=C"gD(+>[99Hy[D(_y/!}& $~)!HRx_M(D麈_!񵄨& oNUY.g~*<˩|u\|į D/WW[ʇ囉_-NNܺy_O|*+ Qt"-ķoެ -$!B ^Loa&Z&"ψߡ.K!,9yG{-忏/w}› Mq $m鷑|"F֏a_QѡSrZ<$~`3"O ٷ"~` 忇-/h?frE~ ^B7'%RBy?I_ Ƀ7f3Ky'CuKלi/ DX??Sx~_Fy3J%y^@|An"/"Qַ/!~!_J $r7̍n&EP}J^aQ VB׭o%4Wi^=__mS*k:Zn}txħ Qfv<dux|!o-gRsl ϧ}=*|߭÷-˕="{uW|G#_Khk.bG|:BQϏp/"D}BY/&D>ç%~ !SiK|9RB/k/W"k|I{-<컗7h˖HC[17jķ-<k,7-,oKώ}?C-g~~Ï,<5"~1 >~CT$țg:" >-XGn#y# 1w_DZx}R>,g%3_Zg^:&<&Z&Q!iB}AbE+_@m>Qi!_I5$_'HMHE/ ~ &- ȭ FC%}Z5d)>p^"D-!Y;| mM#oNmI@n!:B- ~o'!$>,JxMfb$D]yJ,AS~t!пÒ>=_3\2Ohn9}a$_M(}ėy%HAܿr}:\iJ/!g봾hy?L| ?HlBWOCS_GuF) 0E!JVc_GtC113w+>z"䡿ג") /!R~~`8~>ErAz~xOMHYKϗuNzB 7x϶H$ˉ-JQݲ>oO'^OǤ;r̝n7 0pħ:f54+ux/ *B_mIoQ8@,Vho4oSdMޢR$߷pEN<.x~6ޡ.][/S?|.<&Az#'K >!#~`3wJB%?E巖?b)>n»x_f 3:|^gBs:<`}'~`%s o"k/S_^叝ʿ3/o"7, |&?_Yҧ7_A~K;T?+ a/j._-k.~@ZAy~̟Ï%~!'#Y'FԾ"SHR%2˕?>J-HA "%0!~_-wb~ț1TP_kT#-j)/ 78%ST?ϷCP GH,_EePZEjAdB99" > HIZBc/Gc-_D:M"ǒ}-,-KG /,R4>''VJ&?Cɩ:\ )Bțr<컀9-mN®jBߴynIW%k$~ G47:Az}r&y"~ =H<%J|3!WDrEF$+-th8Ͼ(Dbmi~eQgu_\jFg U}Re/EN93) i˔ WwPZ+<?$~`JyGRErE7_!H_/Jny>"[dz/"Q?%:[N)?Vo%wWPYϷ{tC^Sxɔ* ֟ b^<_Jg|: US:<"7_{D7p7!7$HKɧt_J{Z3/2Â{[$Rb_+H-D7#($ OF }CoI|!:"E| ?H|!<&AZL~OH6B#N"F9Q? ~ o/u}"YA7}=D4B[gެ N%{ys+ Q$~>!uWb~-EW:]ibԃU_Oq7=o߰s5a[ӺeD%3'{qT7۱qo7DUuEdٷ)\L۳w;wwYTiR?E.P;wo_mOXw? Ę#I2|[ho.voآ ўc5ط=GѯTU5tЛG dy˶=-g_̈ t<*? 7Ƃ&֗`DR"'ˣ'{`a9XGV¼jS:0#Xrɿ6Q.w7!^`=pVlzrV7سUQQ~C8sGm3Pˤ#KJ6^;L ~t0XLWkwGDWɕxWg\Ǫ䘮C.rb[gw/;s/ӝ:9p4D[ԞLW}@GW@6P_[ߩ⊮L[o\rTo&(tNoH޶cL_P~ᶁCG8O:dqUNVE;?上2}ڋ~VǎK8~P/ӑ՗9>(STG:8T[b'SDW;0i(  U*r43[c9 ;Phvӌq<#`z+ ,kn FD#~pSue3g=}NGj,o;IQHyȒE1 2B=Y +>eezC2ɽ eF^$Ljm8]==ywRXE/%6fzO@DMq>?~șG[k; ѭ5#Ȇ;v5Tf"ݶC$::Oopb?7ƙ]~ٕ>T/z25Lv iNGG3z 9ꨑ2YIuR=[Ql PqEL3 '| 1Q[?spg u(ʹwvtfi%3Boo~SQQ}3捂8N]pq{L?r,6wF sOXoãih:t[ 6TOtD/lERn1٤b:Y?b k&-L0IMoVånRgאer{2TEl`zTCҐoLQSXϟ9q9#ӕ{o #K+j9{ מHWDhιG]`x^{!,le3t zEcDjˑcۛ;;u7Y=Ϫ`a7x.(XWq!ךsS;2éTS,tg;NiضkLoO#hdo:q$eu_V96p\3+Kt Xݻi9/YbXz_ޏE\~Iy-?tJ=ꆬ;:u+(e:|_//qA_ۊ6!NjoN E՜jevm!l]ĠJljO fsƺqj=W,Rj z sٯ{KɄ)ݵVJCÅ1( 8)a|87BWxT^MqMĪAL)~fzy?x2Fj侜v)xZ'H>{¨"=}!k^Nz85} ]BU&]/1&uޮ?C)m}NKڡN`] YH*mxox#?#SC5j%]9ߧ h26kl7AJ\5f|[w)vKyšrCZ&r*)X\dp\/R4P/+ :_4);kM8DV5- nʻ*Pk@7@Tဘάs( | nZ l{+'rmuԣ`:#$2=s2tqS@ZX2-\-\Fˏ*E@ȂA 2[=|I Fz{nz%m>sSpN4'ڞdVj W%ne#D4mف4r8uXBܝKZ``\wk]( u`D9p\k].x ԺBe^W5xw_Y)8qXN.PkR埕<*?/JÞD w3]wzu8wt-c3g`\*gI-`#(bp}4_:2۲/) A-o  .gĔ2״u_a˼8bALeEGn=jx?5xR!G+WGPFbۉ틲|DsMeDIo , M.Zn$M|ů@FD >nKGllg {2ّ%T_sFkK~h3;(˥X6ev',HLYd#>.5IO"=IZ4.X4BOX꣮vLЊʆ}څt]6>tPC̫W:cmߔZ]2oV;jNEm nV Vh.ÿ5M^įׄ7b-WHe\a-Q1`%؝d(ݜ{'kSjS]ni^gMC\d͠ΎjHAb==kP;eS\Z[RӔ;6R+`/bjwjwWj]d:UjJB8Ƽa4Ӟu%V,0JIT[m3#W)i]К}օ`p֨#~eQ}Ajud)'l)wLZ`M uA\mXR1PKjtŽ'A:HN ׺}i0 TH_b=9^v}Guӿ8Z}*WSZFڮ[7S: D6o s2eW[&f "g/c6gr6{k]9(RKnC,qrZJ/n!;CH^ht?tӢ#n*/gyV,j,1W}$WKb4ly!XfSTK;pJ8VzmӁO6ܚo2)sK[ WԦSsUAudcPa-셽2Rhm),'f?O s-XC_Ghx6 PxSۤ U :Bߣu$o8}W>7\p|apf^*@_ﹲ]8OK,~»*-//KNRC~G\gRXEˉ)":.6[J1)VoW|ocs,<\B?OP"~!ZF |!R~ ??&+)Z{-5nNWJ=P|<G| _q=oBy@xSw)A<뉯&x |it]įZBOu7e*,~N\U|3Bm|E_BRT:.\WECrK+_E[I-į\C{z_'c'in]<'Ep G(M:\j[ ~7oa!/&]w~-cGۉgDa%D]#GR^BҾY LJ뿦?_MZ6 H>M_#H ME˨~) cn9ďpEwB_c[CwNCB俗V]ʟ\C_L"a?{QI}"BOWBRYP)c<5o σ`eė~GLA?37}R$~!?_P_!ߋoK_FBy[{/'~#f[e1ߧo o%JVByU[u5:ܦ1֯ywMN7H|koC_ HQ7+} MfK"F~+yG#%^PwK"B'tEMbB:|Z|>!G-%D?O2A|f"~5!/Fϗtþ{I~#lߍ$7$EJ|+!k:|CI~x=~ 3?:"? ~&!:C^sI,˜'?':<$)*Oux@ ?~/,ӂu:\7@s%M(_𠅇I~!!-!~6Ƀ?_b͔Y?ė +T"!~ o_AyXy C߈+H?%?" E|#!G_Ht,%~DńR~6b $H|3GJ[an Ey 8G7JK%~3_b-<'-,G!!oho.Ծ/=njDvAmbEˉO ֙hG _(H mKr+_gIg o%!7Yʟ6WQ~Ko)mkn&Di[,H%[Si[AfK;_GI-c'oO7KRdMfb$D]yJ,AS~t!пÒ>=_3\2Ohn9}a$_M(}ėy%HAܿrxzWZx迒K,򏑣!g봾hy?L| ?HlBWOCS_GuF) 0E!JVc_GtC113w+>z"䡿ג") /!R~~`8~>ErAz~xOMHYKϗuNzB 7x϶H$ˉ-JQݲ>oO'^O+L O#4;ݬnA|aoVOB+t"o%k(iWj_@xU<ڒ>nqYʇ_/|>ߨ7i|#_s?E%>5Hon<ҿx]m:Ce]O, KB=:|"E<^~ý;g_;y迗G}D[oX> +:|M!_O o9!Ƨow~Vg_?\'Z׬]ҙ?PK6B#OG?&,O,}m'D?'~%TALra<Hu_?LWfPoDFCEn?;|W(mzܭ^{Be=Jѡ"{O 'S~g+X6%{-)XzΗBk e*ɫ-uHq@>ye<)K=F<ڗOEyAjB_ۛ$oxdVc?},^2'Rijd^X)?"Yy迁j#Q$y迉&AZ_J>UKRB"BsV+dY}ė)ߋt"/&~ ?L_&5yߎ{[w8q6&,"EdϾ Hbkܞnܹc^OO̢J5%5(pݹ{m{º xm@ GɈ0BKT݈xpdxUЍ$aǾ9~eP;i k?B-'r8dEU#ҁHTDzKrq+ ;"]vCcCqļ7gfV7l;Bn"~!L2߂ޢ{niٛY99÷v~9g6O֟f41wgAG9Y;s?ob9uoXƍF҈35]f]-O\#>iDϖux\pM<C+D~!]ŹB󚳤ضacVrc{ 9 FkYN9[UɨS:[9[uƝ۷kl8dLsư^BWw\j#SFgh2' 9Y]v߈=fӓE:/y;o{Z&_V*`bqzgZ;z$"NĻ::V ttmmݙ̑LgOwDԞLLjO+>+ [\yTPwqEW?R.9p7:·$Rr|o[_۱@?(?p@[}Jb'cm'Jr\EcH{e?j{cǏv?v(ӗHlH`*#}vv-X Aة`L+T4G Eڇڏe*iQ9W1Bu(Dq4pi8`la0A\5_7#"Ex?)غ2]3S ~xwu#5튤(dw{OWgldɢQPO22]m!Z2H/cD6޼;n zɬedcA;Aϡ|?i˴wv)j}y'{ ЇYPa ?U5QɝΑSdCʝ[Ȋ *3rbnۡTA7O81̮B\=FwXz4'#⁣M=MuHk$ںOEӭ(6`vdP`șOȅSQ娭J9u83:If;;:3CϴΒ[gG{7򩨨r> HF[.1M#^g-돵 u2`tgL瑣R9>9M4[ɾG9fdADEzzdhavz`Edg7+rrP؊u"&{ݛPQCXg34XwgN`|tzLӡZд}'za+zr(nCM܏ M&} ST31o`Qizۼ.p ;<+v4[P/(3Жcޓ *`Φl~cuv*:dw_ωmѝܓ|SYZV͹խL@"Bs7ó?ؓ 1jgIGg@T.#K뗇,Qø[\}L߱ީxwɢޮ }Ve@McuA& 9̝ڑN :twfLWX{^cW[Sz55ݿ׃3u[u$Y2k<Err{إi 5gO Rh\n⯉{9]o%t .k3W͛nt\oNQ^(S_%|Jڜhv۞*^4C|7n%f0֑cL4a>`_(cp\'uh2$MNMY\)j^-O R ![kDqukzV6j7Km'P7Je$$=\٤y$*|hvZI_\$ƿ+L \c6tzyk+]_D[z]oz@vK nr]-_PV^%Wߥk& ^-W u Z&̹-%?sT'#u%˕iRXO^c 3Qk,C !ye0ikdNZf3םA<D{RIf5paZQ6LD*~T6}H#CW%wmݩ9>Tp\ Z/ vu]_օ`\ ֺH4 >_\iy@+T?}EZy*k ..UQͣ2c>KHq7uGgXs3:/N26s. z64]В1r"[.7GC#-m^ʯ>4pFKL)sMKY>#fh \D-"~ ![L2Bط>Rl}ˈ_!Z)Q+"%M7SZQk/+r+ 76gl, Q~Ɩmyؿ%ܿnQ>wa#sQ?/!R"/#~!o&~>!o!ZpJ| !_I|`ɿ m/#_!@|3!HZ IķB-oN6=X N#315~.g b|0nKWb>)?7ctW|!?@|BSK|!(B?L|ZTK|-!cqKH>#S#(͚/#Dt3~t#D/_OK| &~!#~z* 1>Ao3nQ_'VB77O\J~['3OLA/S!xgK|%!v{:@QߏG? Ap ?(DCO/!y/#4 e̴__B<`}#Yۛ"?4 B+!DL|"+ !0Kא߉_G7Lry#$_Hhx3~T_? }?%L۬,ȋ}Fg bg־ b~̱=~ ڷgd#q^ڷAg|_l\<Or5_P/v^!WQc7)G D<&??Ee5~D{i8{Q%Ɵ/EQ>Zu:=LHЩףkD&],Q8:40^ɷ0߲<3}pk8I=u8A:]7n]߱[wr9BvMyE\#uz_ڪˣVy?ٳm]ٿo%n C4R#:k>>obBsg֤Ow#9,g?K` _;77O$bgf}mI?/ :/Xd/J~rp{h+Gr.\d~= F|1~Cߞ}q]OqM$|z/e>b' }Ȯ}{C/9# bB OW7|<ɅQ{NNgRmB͋PWYs|cjj44~\,FWuN_W²ӜO鴷c՞ON:亰.L瑣6*jgؕ"_V/ɭ)uS*M[l\Tй 0Uri"_:MYŦ8zoE-)xkczte{"&UG4vմV= 'RMI:7߶@ꖦCN" ;uy˖lRܭb7-}='Uf"W'aJតfϘyl:6;-NH\L {yo+ Ny则)o" ?F"Ec#ӢOFL X@Yeþ UNӢL _$e1#$?O>"wZio"}e'UN?N,wZO+"a\(NU"}ħTx'Csm;yWCm'Z¾:z*?%~!ʯ!B5 _;.&-!~ 5ΖKjBط,B->j'7¾fW$~ | |n}TvCFbD7 oVGNw?k%޶ӝKEt򥝳S"JBؿIm]ħUx{oP*w Ga%/Q.#~5!컜5*-qt?B_)s;ԡMEtwrw+ C)ډD5mp_7\s7-O#4yrwC COLYS$oK| _}EjG'>%'S~f)/ }"(?"~ Oӣ%4y)3h1?ycy%}AM̏$~)!ǿ&~ fɇo<{fA~O| ![[ɾ?*gG'"Byg +gG'~'!"*;MfQ*O Og'DŽ䘶ȋ~g'G)AjN&PڧcE+H $Pڧ$<#P2`!?AyHhnv_7N&~dEO-DKD.W^svPڟ$Ղk(z&k y7[Ⱦ2[ a_9[}睝"MB7+B&~nү}ݹ4{pvC}!;=rd>mT.b@cy9)/[Kh"7Ue͟'q*{ݩ*L?Ŗ_&HJOqE[IA?9;Ai @?SnNLAu0S?W|ٍ0$-YK ZBϺ-C!Яzl7^D%ov BFZ䡿G4>=:cީû,<]$Jnb~^~.e_9_J<^pOCI|BS[_%7:|D Q>wECG,q_!R>,7M~>_!ی><Ղ/SJZ_$%|1Z}T%7:|S Q>Gy&3ѿKIm$򉏱淆oO|?X~m0x O_M|_|,o /Sv/cͥ/ oL[Q?3"䡿̒?z~o8.$xxP?sA$\Ϗ$-$D'~ "W_'@ o$DPq3u}JoڟN+$w@GqV|EDlAƵ-?y_L|`-ٯ$4BYҧpf'DAZ߈&~6l)_J _u_$Uܼ|"|F{$D?n-#U\E_ChלKǯCEz9S|رM|=!K,FETu+ Q{tC^b6>.fBI<_JZAƾ+tR~S,% n'8AA}U<O o'![ʟΫ](#ܧ/%t- Pvpþc$a]Ҿ"$DYA?n?!|oBwtxOW) D̉k<5?|Ce%|G4BoK AW?OE=>Ozഏ㊷n8*d˶=-3aT~GY%*Nm/ .v<,3%!923ԊYrUQ;{8:O ߄NZ8;'RZ-bQsC֙woកw!S^,rOlrx]TyҌj+I߅ZiLPcdg$?h7m#!{-EIyy4ٻu2Gbs_PPJ|[ TݐᐥDE*-<0Ӹ|s`X82e22fT=F=n,|'<{cf?ɌYNcnnEW,QϽ7zmEP)Ri]vҤxFnӕ0P手G*7t}]omtwȵI'^Gej.{psi5(P2`,Y9n(P*{Asݸ,Q35g`S/n+*ϣt}\I?@Zs`۰u0;PS (+Wc ƍ%?t=`.r;-dTbu8>`?6(u>-(tL\Q٩l;eK~ܪZg1WnM| =%ٰ{nڣ"QJ?j.o7}:s+iqg!O,RL e7ŜY֌%q֨ԗR]P}E 16,cW WFK);9#5kٮK_YʿGZbm)"屻Wxvon1YH[p XV"X *QC M\v)PkpOhrCZ;E(ꂵU.0 N ߷܈ji:v\OGw|:K:d k8~#wUiRm"R6n丵dY--lCe%6"x͌!t7ט8jFbt1qe"b-߹ hwu+z(0(";T8!PШ:9p4g {Sw{2]wA1}=F?O,\zi.:L߹T~Tk1uò.WaOgY~ۭyT_ʴhW¿ۼkڋ7?,=~!F A9y:3g,B_&|RKM4Bؗ"~ s%~>!үs|NYY`Z\HBs"j_%yL0N!/o1Mo orU4ka߲yط\b8`ja_3>c:_C(|:{a:]QXtM›)ܾ.$~!J Ga%/9Lƾˈ_M.'~F:\)#aoܩ*]~"W6?@߬Ed>DGþvR&DvZ_+L,_J?]0yrw~ ? ~!'~>!O_-HSBHI/$M/\JO!~!J $t ! ^H"&~v.;#~oK^DW/%} ^{-J| 傘_NR#/#~ wÿ\[$7<컅:B:R QFC+-_!&B: H /D&"-(7N<̈́:M"GC,>[xJWR}|@;$~ߴ!j$_b?&/b9Q9gFK ?$~8)邳"E<,sQ~|>$y%JHG_+<^CϽt^J~aUGqkk}GC,A?÷$BkW b~`"?6u~B;:" M~WKrB:|O[į$#_E>Yg$,Nן$uo!}$U/ƾ_1! {}o%Bχ"aoU.!pK ? }a5B?L,o`g_Wn4zm֪/sEA/%#\ofmجO ~((?W:9zz/y6cxsVJ֑4?N7 .$f}\_Dy=^fY/\E{&PYjį%~SS$~l2?Œ>SI~ RJF|V_2F(/6#BYg|fSϬWJnB77BW?WYi_J,D :X|ț{) ^לsl|X_.dV_Fj&~ !4}-Ѿ?_Sw눯'D(H#/#&W'o$4Gl -X1}Zx+ɷ¿/"~+̏cŞ Kl$忓ir>ۯ?m-GBn+-i"WK$/B/O@WXʇ$?A_!Z<$~ ˔:VBG-w:d$bByX%_K[bᏉeL{urBu|j>g 3c֟Kk" _Da羓{9a ޢí_F|o[/p^ë%{U<&6^/uzw7?Ls@|B/w!"d?ˣ>DgXTSެ[Ay_,xgɍ9&<.|u>q9ۏ>,?q'Q;c>Oɻoܺ~ *hǞ[Z摭lFeϢd8i5<|89S F8S {Ft#octN7Wԣ"(sɣҶ{4g8(GS~}w)!≳8Hg܀Fؕ+ahT βsa9g=cUrW#Zv*\L3iOcb B3DϘt_9]NRV|G*Wgxc.]*VD΍/Xk 6`~Kq :Qe \"8 uWR~q#L+-ߣ*FWmQuǿ(v;@􄶏?6#維w!q=NJ޾>V{r|wDO)Xk!;uTZTP}gm `8ϙOjbnO|n SlOm7wP}g7Y͘ݗfT6ſΎmGu sSڰ|;qx\OQaINXiʵ]v+aҦÎs:>ٞl"4͇;ya%Q}=0y [Q1$6m=p<;ݢln\YkJS R PnS${"ɅS;yLu۱ޮLuʦFhjS}ޮvZҹwiѻ+=nxhfSMǖI[itںOU;GV=}=]i$4xTDe)JWD.>e~PYR4̸&".9ʕEIuvt*"n~|}ګ*;vJBmng=.Wl K&IHZ*b~ye?3J'{s9veY4z ܴ8UOXܬf^mSmJ`q>Yfﵴ.tgvAokgBf=$j|훾pڦiF}UF{IWg8@=Qi7sR$hx8"Ecah@lIzSeE< |\Eneo"3U + ay7E@¾i'? T{4Bؗ"~!o7P/#ٴE%\t&.K|-| 7*wC1ʾi+YaBkTxE/!}_& j[7|Fþe)靖o"}_$ bZ_MDþ+o"}_6Xw3luoʮȃHį'D $~!*y}7s zg;𕄰/ ! U o~9u7}7f+-̈́BK_D wį%4|^M<7ߋ,Fd_g?3 NxK!o+q{7_N7݄ė rvr7qþ?Ki_oW&&d:($>-(N. ѿFA̿M}WXa_&_țfB7gy k>P&Aį%D! rr7o$#Yķ^~&~'ɼI>!>Mł}#rBy ^EH?HTWB*W~!Unm$o`L|£_ya~Wb gI<^<HXxD= 7Rr6y=G bb8rt6@_.SmzZg:-ß/IR_@ț4J-oudnpn QS"%zK) ?&Bا"r]$6y+G/D9(ķ|gK? a&NB"BZB|_O[>&+%gnc ?oڧkcH."klWb}дυ#~3A|_*/I~gV)5@X79٤<$O "t_l6iw+ ៺/mC)#nدz&ip3Yʗ?ݠbR'8@ޤS!IwH$\0Ew)gu'~!_eyM| LQ&N|7BYҧC3;55}5~f+tR¾T~,$~5rBFJBuxr}TeoPm?e߀:tZag rt"b]?_C|!_K|)Я9 _Ljl$݉o"}==({_(_g gxWj~K)Rr6i֗ ޟjS oI?c|ykIMZ~*3M?CgI,Bo6EElAg[5g6@[}o{r6|//1u^Bho%£_I3]C10 M|Jp:"o%~ ?RH| ?9Ѓ_ H 9gwk_Fhk; 4Uxn:QߠMCįDd7}-B\!6K2o%]2A-R}@YW?Pe? N~b_)H&t"!>-Hw>J|!c/u[ a'tEM̿>ç%~!SiKۈo;oo>/|_z"(/('ޫK"Byfk7¾!~ O7%~)!!'!L}x}W:ZcA^{PG,kI\ByJA?LV?H|Z寯c#F~O|%H~=!7 .'a_Ak<R>+~Du_ "o8G@OT/xc_@(g>z+As1NY>OK$~g| D I7 Y/#TW' Hhxx)-x>`|;>£|+o|[ >}6GʼD֗⺿7K|)!6 }5ҡF țߠBx"%J'D̋ip^|X&Aږ8ǵ*<7ZeʷQJ:-пwzL/ Q>#%_n?|K,|BRi8~͘0ۄGO%D30~-|g D}rA<7uW? ~!Ƨ;OՄtħ cq2Yg~>G|J뿦~>w%ӄ{_@$%Q$:|EWt" Q_$5a!~uX[aU.O;ϣW?luM#7Nt>O?| .e?m#VYӚ#آFf[`Қc'ұJU/q5ZcO0|2"铞p{aTdR VY w>5G; $2A9=0\zQ9xgGlCI$M.q_ zrS0Pq72.e"sI,@l )Xȼ3REiQ2E)QtPPq:Mq #(g vW?x &uv_~:M#=c8`&'F}ݝy,wG3 |NN5n&-@lض}o}*rh,#8>5Trj(#4NүE~Coвp7~w MPodU ;CIҜHm1f|U䞚~Lp<# $׽Es=1aCڎ=+8Y(Qb9mzHJpr-ohU@U:O}>W&γ=SWiO/n%"E'}_9,z]/js'lf~c>NġC9Z[ﱮ\bP%cqY0΍+Py*P0<_ObdmnJ&LTp.Vu\@\D.T@/ \@+ăؕ*XR! 6p%>UWS\h*t΀3[$g)^"ˣz4߬[|Ôj9a9=*U`猊w?avRw .3:7 `7XD>J뢄_^ NW'q/FV6N;:: j.{b~;IeSÂ&u>MvCZ\75}y 7%.,s ԚR[ݖ(kTZ p1Q2Zz^*.û`瑇YHAN_$;ͻ,#suBK[=0& ϩYI\QJ/pCZKU"kO(Up\] =t{w7ygtȻ`Suy@uTpwؙߍ|LIM][p͸D+W5o 7*= K)v]bZp6$sWZ~g3gK^HWO=On(PkZeY;ӣ⥼&:[X{4hz1#7ġ25n8{W'@̀58L)Kڑ־Ĥē̈~ĀG BM =<(!ә&b3iYH[]$LܵtQ~Xv.T{׶ml~~_p3/~>q;)]ҝTcmm];Rkv!7ĕ՝)Z6gbګMq.5n(NK&q‰q[w[:婣%# Ցm'#CEĚg!K#,,tG#jGO ׺8m)5T}}=`Kt%+WvwnTFuiWM*U]2zx6%o 醄i%6DeXO!b94\SRn0m=_gO6R8ryyiǴ)uJ]q|ݟ8/ct 1'X{uEH7)\V,)k K[@dKC3vrǚ qf=dM6J{Z/EΟNpBЮnSm'Dd\TLw;Q~7w:ŵ*'X7¿}ZIߤM¿u)n!֛Ԭ^y6}d?o6Bx$wYQm|m:#v%/wIv_Lw_BėBr6^+ -W+pOh_G&^%]GzEIdr:?BBEğWI)"1Л,"~ !M*/&DЇm.[J(%z/QIN1V_-ȿ()'W7G%.ˡ|U1sI%FSs&?oϼpdSIW?IoG(/&D?ҤYaQ)b|mcT^F} :Mz+ =/R-/&O2|O!~*L&D>äZ3o$2½@k 1~<&BIϳ<_G|F ,gN}/g=!7+ax[ y%m;}_ekTu>;./x_0xRsL|"ߤ|o1m*_T^{o5]}6pMzQ Xiɟw2BOcGy|~Iw|"7;}' Q~)L>4n>rB_N񕊸~?jU}̤[ljSlIRj˜'ME?EE_ߧMϘ%>.> E-o KTfB~Y+i&^8 ! _ 慓%Vkb6<%xPej_P?'AӶ}mt*.rsY=/V 08]K$X?27*$ME*B&ݫjB"a^K~#D ER7&D딠>kד;VDac}'̈́9xЇXQ6XR??-W1K0Ri~vː/T96ˤ|j|f;>_Ns*C|"ϱ]] C}WH|"&}Sױ}_@EJ:%UDآ}O^w  QoVDK:}wJ>+%T5Tkf ;S !o)@gb19H3`чkcicChd]ÄhffmRQB}俉xԾMcœT&c~B7dzӢw3!71e/i%n:,ńϗ_DR^%E#_ekT^BЇ_F: _ٟ~k Qo4]}&W(&E b_&͢o!~5!բF!DR5.FB߻oRLS#>QH>߃U>\K|}yOM& D|}E?sǟ_EE|"'_ ~b M˵痉oU+{3_1Uo#D||M_&ݭoS>h?o]/%D}'BK|b%I?Ry!}|)\Wb5+ɿO%BZGO Wj_N|"+'gP!D ,q3x>8>'?-ukTy!⣐rB<|P"W}_篤nX߮:B_DJE oƔR7B_|\nG,%~!C+Ї2K+Bد Eq;ߴEF;Q~5}_CNBߴY˴eޢuķ+%+-{I$DPWVH]T&h#_}俞nBߴu~%D6ɢ-ħ{F~o"Dl)߃H+M?UkNCT}[g)%A|!=sBXSG|Eo2w_:B [ɾi *F;7XGyF+?OgտQ⹎>)+;3ʋ >lj_J%IW"^XQ'"D3ʫ M)k"~E'D ZWOgV">Zڗ+?_טۈ50!ģI\"BÈ_By8ńG_BI&Ys;/u2  Eqľ_!KqtO0dgo|gڱr迠ߎl+E{z ڝEv˭_QǗ.+O= {RsԸ#GGG |oL=Ji4dt`=/ogQcsmSZwv^d{YLݗmG~ǡ?tq ~ͼ,j|?s͵#_^Y(k :Z6hي1zb{硭Hf+E,"2|RV]#:~ߣ&%KNaEm[M&!%i]_X]~_nFNwjfL$~eپazg3<1(5@`>l>[ȣ x1u䏦^_)'n3]z֖m{?9N\>6;$zS}A6Á\<$1|6ؗG_ܡ ;^{F,Y'Ý+%H FiƫD5T`GLÃ~e{wQd+s,Ẍ[P!B!_n,MNp_ٺeH=q[yx&_YOv⽾?8:JAK_A!~ 5r-߃sh:ﯖ <7Ǚhqvh0(.Bg>7+©',B66zc7BGtcGPe-:$+u$-35rkO-'.)W4B۶,p,Xm~8DV ڿ';қ3>(ʹnh]w)LgTdw<xښf̏m!BOvokv\kϪ0|)锣K%Ss|U Ҵ,G3+LY m/Ĺr9E~g;!)OiB$('O6ՑwBIrb˅ 㿾K}.2a.߯~K%ަRZryXK.J77u74oP.{%Fm0߂]]zN>l?}Hj , p/ߗmI2-A{%O{dk0.83뇙.\?w{dYdR VO4JNH%NzQ\]窏 8}k 5T]MLaV+ǐcQ[!/vX, -gYk-6 R߇Ҋdifo)>;mo0 V{_PEҿO=@=2 ʣ{9A3"/:54s\&VGW9y8'N fH ɢEv9]p#{&pwQ; m #ŲVM6{M6yLt\يطN'&&O66ù%Z{U&wPL=i Kȉ!ßl27 T6d{œF΁`s96:쵥zRF rk5{vMҌ}h*J9k̈T.u0m`f0_&.<5`V>ԩet1:^k)|9/Θ&:34[ʓKҲ}=7Npʖ{6F Z9{l~GEVRbw`lw;hψ9o@⭩MReѓi2YTMd j>}Sqzz\9<<4wta].gXMdϠqYt5Ξ0 F솤OUQtx0'@Q,iy4ڃCOKC}fِ%%ɾ̓zϋdcO\ve"ng! Gdz6*0Ӷw;)yqt}Ó崩wo&|_y{mn}bRζkCW>V2ڵIbyzDQ.94%4Ou;8-}++T}y1oLt2P }؟H,E|F^7~Hw2x(^TeAW"]V}7M)+#3_ei]n !2BR>xER_@ /T\D-kGS>O B$'/\y"'Π>_B|E[=[%/S\Ced[FB}QcӇ5_EW+?K_h'˩}Hʗ}䥥}@rEoo5o OI V>k"~b >B7YqH򝄈MR>zˡvmOI|-!guhv'J$D6Ew_Kq/.mDF~'͊N"o#D\ZF'iL ak >]}8Ov}}zv?s\ Qc=]d_!}ﵔT݄CPITxQHy<"9 Ѿ/T\[uEh[_B(2w>bB%(IW /s#V\Gh y4¿ۉWl$K|!{79~>ޤ'|3! ķm?ǒ?%e?yNm"/4*Ȥ/[_s痘2}^j-2)rk 1:BJި򕄢/cLz½^b_5įR\MZ^5#X쯴':^|-/؛_Gä7[x3'K[oVIvB.mᑿpSBFCNB{MwISy;!{IwZx'GT;:~}Ф!~"">N5OI $k QOYڇ?MN/:Bؿ  /\pe^8o6הǼc,o?ݎP><|Ǥ|"/uFP}_|ߤpEH|b/?"ˏ_?1g*_M~Zgį!Dܤ{,< 1>Md&H!_[gAq#o&D-%乷?1B{ȿIF~k~n?,<_GN8~x|(/S{%%)Km˴4Yc ܏N7\r%1i}3]l餿P7vֿfE\_`o%D_IVEo5y,_ }ONŽ_\V5y# 5c-s=/<@d`~%)/Ob P_`ޝO< ][xù׿W ǿ?%[c ?I_}ù"MYؿ 7*?S3qg=s?T^~IPbB/-Gl#KQM/%~+%B|2FrB_XK;_AįT\E7B7kHx6G|!Cq_C|;!&ǩ:qTnT|BAZ ?)I]*/&#a˒1G|E'yGY?4_)'.|/'D_4_3Eʤ7oЇK~+jB yG^%-Vgkv9J2B#B{ITy-'Smч$~bEjBk/'D@|b-'Ov7Q'T>2ukS,t}'_#!4 .%29*/!D?;B?/?_ǟ9z+q< sm(냠+/PyL5#D:>s܏^G>x=U(QM7B([D(mJ|"ov{Io~! .6W?8ǦK<~LrME廓Ŋ,IpROrm!kŻ6*o&D~dL hO:zGB|q?V}>C|"GϚ9' I_?h~֕`җ-E) _[<~_ !g? ~5r-߲-_C[@ / 4.8*~h<>%}d*"DĤ[aW+g}^1%V}_K|"o$xs=lFo D|DÿO8o}o,BqF Qˠ~KTkp> Q/^'1AEkG/'D#R7Jq=H|326"~"a,<꿋"Q$\Ud\Ə7!D'{ |8a҃T=& ZQϿJɤ*/%qפ~>$LYkH%D ?:EO27Po&YK9j|?u:GPs7m /k\>( y}0򥄈l>?x$?ҤG;ЇG_į&8ɿǛD¿'Dÿ'Iq ¿]Q_Oi&=CGÿgXگg[j|*/^y/4} S&T /1})5de&B嵄rjчWB+Mz _ЇW@K_g/w| oYįU\GTF~R{+B6Kceʗ9gҝ*_DxI'7!/!D>OVK1KHx>LITy !0}IkWS}% Ym?'/ j_߾D|B_1I _3wnҽ} *MVRBLE&DoN;]ky 1?FfOB}7)s¿{߮/L;ѿ~eik{?<<| 7PyZ&Cߪ/13PK8 ^|6">OPJ帗ퟘBBBmTⓊz$߉i&Se?Ӊ/'_ysD.'Bg_MI|-oT'_M&,1TSIkn>IE< c*/!D2ˢėK~0Xdчė+/ТO;< ѾIkxNk )b|rr!D&V[-(r QRU*_K19Qcч*~EkȿBO_nLlVFB*7}gD&~ !g|J4|+!ebEo"~N΢ hQ.B俁v=d-~ /!g}Xs >~ƿ; a['n3M^}*_㯱8iч}'MFń__ɢT|ʗ¾/W(֒}>rN/}?H|"]$d "a%|k a~֒q&B蟰_dOj|F<9eҀ(r|l-?@|R&Vy)O~ȤZa4eUdI /k&=آ}L7 [HObV`KJFQ&IsѿM|vIOÿHM<Τ'}%%2BS_FIO4_Nn_XJ>ˤ稬l^jч\B3}>גXy{!D{|<.#2+n&^n+UJ}J+Ik}*x-;uLzד~3|rq] s?E>T~vK|!aLG|ǿMyo?w_B eQ|Ĥ[Q?%{ojc}?>N}>a? IE\B爟y$! &}Ϣ-?yI_UB+U8o;o$6:A|࿧'لʯua~1h_HI?W9?-wITy!}%5oL7o#awķ*^C`ҟT~-!1BD}d&]}MZd_o/|)!'B/_ʷ/!SyKD}5Ⱦ󦨼'Gw(!M\݄ڿ.ЇgjQBfH;* !Pq͏yܼ&jΛKB /&D#P3yk,Eė)yIPJBE^E".򖪼P-_G_I&B]5Xk_C5Z797>xe_=kYe\i3޸?w(+D>[Eyݮw_vnwmk;>p:w ě>Жn?e'Teҹ#rlCMܷЦ<;E CMFG2C]e[y.y>SFQ(Ij SICD۶ s v՞ť+HmJ]ôB,igy6e op5k>6;;[XeGcb0tlѲcC[[eGfP]JשVǤeC=䶮z//rmun zԨ43j,Qf>&Lq`YkPqU0uDq籺_0~155^;BTѶш_K\dPӳ?߭.:8r̡F?`h/F@.ͦPۤ_Fv>6^5]:pV#V_\u45c0ہa+~5]gOW7-5:ߧ "#c3N94w3HS9PXYu$ v-uxhrg`O_άؙsdk|Ҕ^13R3TP-O'zyCO"N//bF.sʱ!> k0F;QX\'OI $%w_33KSeWEA=GN>v["(t\P?v>(I S]':ĵ܊XLu#e?'<4M3#[W*`#OLr(*z fh(?=BCG+7|/W# yAoʪU"u`SZѵ{n \ۡvHۻ5[ -52ւ<7cXPпl e8tfoLPgˡp;v  YNTUU+No>3 t5R΋7"h.s#fUwz'-=ԗ:+kP>eW'T~!u@ȇ`M;e¼7urfe._7ؖ&f;>t"(vx;SgZ't{Op:y "F"ILQ]mV:YU}_#.R~D˓cǰKfmL,q %/&t鋼> BPC {eį܃p /6WS*;{~kI7ޮSz ǃ2ݬRǫ*it1]ɑQLv-JetY଼CȈ-7?{&t6ybAy8RiY_̹&(Z"z'שׂe}SAG莗G\t=vx Dp1T˺*|ĒG^L0=z>87V7TDj yC]=}+N֍ÑVd`>cĈݱSxɣjkWUQK(lvN |nv]b{{x3ZS'9qtizGXPk|Û3Fn/*קf=hŨ}]и2[H.m) S5q %cuz Z(t\0c^sgM#4|˳:I}@q 6 Oۨl6llAmbO%|!ݺrI1՗(/[4iMLQվr,=9Heotwq8 w3sWjd ;LRKF=.QU֎O95o^q&USU3_'ϻ=y=iyI^;"ł,rEA:^D ; ;w9\'sӲqM,fN5;"cR,dX<ְmR5̧ sny"ҼldGٶI0XC9޿lZep=?V`=>/VY_aZ^llZBy^s nYjpc.FܮEҠIK&DzA ֳձNpXg⒴OgKr,qU,GOb"! ^O9}6Qh`>4V)V$gN8KsZd~t{bY:C;Bx\GMbDzf{_eƱ½6"/98?^l(9OP{F JEI~fTr쉞U]׊LؖWTpҲ'ͶSn~'V9FuDT>RR1GRԹ.{]nˑRIP¼vD:՗3Z bňwcϓ{%i [蚺 1,P%4և5)F\eipsZ7RT TեKnFܢ 䖰"ws^3KL\*s_`ot&=ʠhzH֭MemrySm>f涤~iuiϬ)xٹrЄn%踚E[<"MWBn"[ tѭUrkkl5Q,^з "TQ 数o\ 3qNdDqVIMn2?Jxp , :8BEݖ>R?>XOt wKzEhǍdͿ"q∣оHwJ eF!6?IWk̋rݘ͒V#iaWkaseݨ^h2J;NƭHKu HBfH՞{v\.\z/3M(SEe(vX[zGsfa{EƖt$;͒;cò+OVnt7ɞk;~8cwg۵޶D!'^e8-t|k&Lw'iJcOu7AaїҺd3U_*2O0͢$fbLL<,(Vժ)wfſ+Gf@q)7¿+#,g*oBq[HE?VuPrq/'V'D t+RGR OMR_U^>o~_$K<ހf>_W-儨:>/#B[*!i+>W_XO,_M"D|XʷV|k!~=!O#Z[ ſNV1C_`2/IOR;h&|b{~y|yLzX7p/VlB ߠ\傼~9W_[wJ^eU_ '^GBBzⓊO &I?h',M/W# uTo1m*_O{k>{3?A":E=&OM}Tf C)6*N}Q'_"ARy3|w__ Vy!/!}G@|1!"%2 IkW /׉V\|äoZx7I}zF7¿^qwM7"OBїys }E ?6ة9_OfbI?W"?3W}sK~1*/#Dc}%EQ1R^%IW}{*RNy"O*/#DQ1"\G3Մ_B|-!?j,<7\ k:B_߉'Da|!jqpW}!~".PS57X8" utxz ~#$o&D&[ڇ_OQtKeo!~1@u,_y ?GǏ|y֯c'EX(3|"/13vXBaƗcU^F+4͢/WE=PǗkW:96jч%įV\GG%Xa _[x.VfBb#Mdu~o&M?Eg:w}WKqǷbhB*B5WZ ZoP]J!Xo ccCp*]J|\mҵת\'e|Xg"n \_+_6U!DT^c&ݡń_D'/!Dz_J/!~/_N~+kIfWBHB&~b%~!AqB|!o%~.ҿvBAL=yj_G(kz8cv.7q{ yXw \*/#D?rZIϰ#'_G&=U+ >OЇZ_I3|g@cTύG#Qe|{!̈́^DF-ߋMzʷ/1}R)$/$~ >xZ,B?S<ߠ.@CPx>'6}NEʗEE|!nky~/ k[HN7 / U\ФYxHawb|_|Ee>IV\_#S&Ȣ?M|EϘ9/QD|_c%~"_E|⑿b?Py!įvת?%7">DFmd&}]m}:;uv緈My7W+/{?]_CN>.I,4>/"$~ŎvR _~k|!wek?U>8MʓnGx_ٿ|!Kp^?,T_?(u7a(˗9;h+nN|"o&M d\'YxOg~_|yi&]yL'nRE/#~"_◛4Cń+LZfч#vt,O|&:į$~b}~H<_+u|ώЇįT\C%~b3՟ UB3m/ÿoTWf_ڿ #a%zJxw}ӏKM(IX/𰿔;~Y/?ڿ9UTr-`*}Ƥ}د%~>!jCJ4Jo.NIŎ?~!~sMoDs,: K._gǬU>m&~""֟b\ŷ| !7׊N>ʷbEڈ_Fe;H+|w0/n5-o~Ewk ;,C꿉/$^u97>*5~>biNo"u&P|E_nޤc}I7:מsOG,#IBL:lb|G/"~R??QŊ?d|9N|"ߥOt=x5:Aė 7Iߓ&|!}ȿ_jIU"a5 ;'-P'}6#`jч_:uo*P0Mzo D|?"B?vCQJ<OcoFC(n|eh~YK< ]xùuF__Ԥ[x\eNE^B~b}W2#*Hm>i3.PEߌ.Zo~8GKe OZ723*o&D:BI_Py!>B@EߌBW7_5*}u>oYok|6(6{ʯV^&Xs9~8}c"~bϜ{{>F >|s~%џfч__XBK~RB߯"aėb}.ZxKP,ß ?Y+ Q?&_>+P7*[C(w?ѢFE< ˤ|!ogч_0|L 'B_n(L}W['RWXɖo&~B??HL(/HGf- I_@(Y%bu{ c+y">K,V>/'~"%*_F{x=:0U 7Qj_#[I:f?3V'TB3cubE5Q/?'U&B-E(mPτIX7Z⯃VK3UWܿL]%vP$L]%:-9CJ4nk'K\"_eGEo5!9Zʯw2$LfFN|!;DE8L|R֯.U1Ϣu_Qb|I_HL:zX:qdч'_H=} ZBߛ,C꿉/:Ҝ}t 1`xG:W)ߐIgTX/ڤWX~YnQr M}$_y⋉GKLc)Mzʷb-B?D#Lzʷ##aQoT^Iy,?#~Ώ&=Q; "ߤ n&JB4)vP=ݤg|!3LzE=WgYiCċT~ p!ZBIWuO6" 1~ⷘx,п+tج 6*_kLۢ%X7gU^XN_gҷ,zb|yIoRy!Ə7 >쿉JZIoQ BI_[S\&]卄oЇDٻLzI!&}Q[ Q?wP6BAIUNBїky>Qw)b/̤OIwYa!4*K*B?m/wQ: asԾ;,`h*׿"Z>e|`[ukU^5*'LEOBBI?rg灱ty?4g}IBoOH1!毟Zg_D_Xꇯ 7EŊEWė*bYoV+ ~c'Yoǽ;HΤ߫{~¢'~!?Aח2/*J͢B6W~CN^>b}oS<+,<@7jw}n?yy9D(>Z):H!#oW멼V' a߬7-hV">Mۦ"BdwEDYH;WNa)_ΫemP~噵d3sy3sQ5*&#k_Hdz͜wƢ5FAo0E_XAoWT^I럼W~I*&GLJY75+QJ7\^ 1Wb:Njf_=&ݤB?n"Qn$~MDg,s6 пMn/dm+SLzʓQtE?%eHe(}o-?V=q2'O2)OQ}Y{"D?]y̛L_E>,'s*]BBO^H|E>yIbB/&~)!/!RQ/7*/'%~^I2dUjK)OG#i7_@y񅄘෨|!&eчo!~"oe|߮ BmvLzW#a=7:a&}@Wk+GLʫa1k7Oi|*B?h胿KK[甗:% _&P/_1*/"D~%_F|1!ėӤU^JɷLEw7eX߉6*$Dcү-]Lʫ MǢ? Ck 1?ؤXx x_GhQ8}V|!kizUg?;߂>x1 |or٧$s,ݒgCD~g:۵qNk-tvmmWQ^)|zvC[o׶ЦPMZTJȱu5sCvwTܗv&lb]޻egwBywx+'mڽkWk\j9D[9rhOb )( \we4WɃ MVޏ6B< 1Uk%E`'fԅJ6T\`Ece7sj*.ƁD>1jVM-*&=5Э,Ұy:A^QeYEŏ2g먗׺ה9A%&1rQsщ ,dc9c,RG˦-[1Ll< ׹2kK>X]v\ 釪)Ú akFjڼR fm2ѱƤ^zkБUl3OyRQNBRwdj;Z:)]tGd#-`鈵u s#sA$ћ ̓mQ.LLu tL,׊J cA73-׭ `:E4zG+f-cWXm0.I]}2aɸٞfFGQ͔kòrjf13؟IW`{jt @Oɯp 2'Ǖو6@hOw6]Il ĤYRuu L=ٮAr ip9y$]UP ;FƕZ)U#Hdu8#T˰ IEnqnހjNv u ]S!RKTР]ZZl3]Xtvդ"~姻[bZ4#n+T%1}fњ?c3'?y\k[P7,bTN`UNꓣXFoJM :Τr;fC'Q-S M<*f18īD3S ώAuzK?RsE]͆ k$ٱpE`Jw"h^f5'zGXxwGq 켬kj-`Ä!y;?C&.nEmZb'^o!B_&H6GiVZR@2V-+sjK+x, c_5.--?":qlMm 閖MV M֙Bm}aFx]t>E$+'1Ui8Dq:ڂ%?U5-rZ<8bQIyF6Z9gz~$2i%^Lxp]sʇy*rZ- q:gk#Ird~Kt`(a 4lo -t]gP'e$:~HCW<_\R>O(?Ϸ+czxCg>|רA̧sƂ$[N9ZmRK$kJWK[)x}ZխjE0Kݭ4 QL#-/ 9ϟ\pA:. 9ߠm Co9MH~_M9[ݬ>{sV[Ւ!=>Kģ:uXOec,F_RN\\nq"C[[ )MaobGs}RqGZUwxSKXKy'Ns;ӲQKߓN0_FQwmm DVOZl؝ c ]c k nMwn'lues=l%8N?Y+b`b'cΨƟt e;u:;+x9c+F]<*ijdYdic"29< =~iu/ 0gm A/P}\Tww ?SG3mL <]齽1Tޡ̭dQ0Txi2O;fZNcKqYYe̎RZaa V]z#VFs+mYzY7L[yuVMqO8 Q K@=b3#^d頻$2Vjל鞯-6hErEE˿<+;+0;c;œ.8Bkʊ渂^@:IDfg0R.b,6[8zBV8xzyrdU=*`O6^ (KmI>gQ,Zx[EaͻS+PUDJ8ZfL&Y)q{r7b dxjꮁsⰧ|3 $]δ҈Ok'wF?z\-\ wqIMq BwRzt}ɼSd]^|?C\ϸ2UͤݝmzW?̭pZЯ:d\(!NҔ4& iӕ7`їҺL՗gʯ rq}؟HZyj-Ї)!2-Wy#aLeRF⫨j'8"n9>u/$D$>XN#; *_F-uj UW?}DōԾ Oo"DЇ G;ɾY?"a|JN)?QGg'h]}$$DM}A|:?ש(}$YqٗkUF&BT Oh}#D1W}M+Sɦq&DEq(vԫ#h"aR#Su)'sA_'Q=)ghs} -&}DEh[_B(2w>bB%(IW /s#V\Gh y4¿ۉw'/co"#~n>ޤ':6@"ߢ&=b-T*^4#D|>&P7g, {ƴMka<|>x^.B/Ew /!Zڇ_F1œ$*o&65 ~ƴ_K !LzʇLzG½[ >o !ITYB&_!ğWU\ަ"~J>?kNg>wRFei7^8Ca}N8XNx{a|}(!χ,/Dyǘ+!D$s?3Ui1}%(g_J_B_HrBJZ +UW*"@oFE:BMm]w("N ~#s(s%+bLƏ3SԤ[g/TM;>rBK~e_E-/#w3{_~3 ɑ%sQ?_ISbBIE߈/"DI?;&%D?pK/_B*/SDy/pX_]+kt:B䵄Z2,?_W*b0=Ya ʴ|!7ǮtLBbG7o\7}^"PW&[x'b\GĮ"xϥDۆgyķ3Yx/"-?I6B_Hbo#D.?o1/o+uWXbkLSEoKk_ G=AK V_Sz.JB/s5*"DЇkQ\A5#~!3}9֬B!B5+eT?f+ _+ՊL_mSJXc[MnчۈWl$m}#ZB/ b}+M|!A|"{Lڧu&%~.vX{ ?ߩx=jo D!F#Tךtʻ ѾיtE_OQśMK C0IBGWh|rH_I;F|5!&¿g3$ _$~MYuS&=ܢo&~jjG>ʑ!D#a߳lB3E %~!y/PDw/%DE^H|!"ki$R(ˉD(_A|"֧rJ^eQ"6B׫A(^ky"]^g̗y(.rIoRyMzE{}^.(bEMB|"_}IoWy!mT~Go'Hhwo'U?{IWJEߥ~>jU^O}8 X_)b|4͊[?K[ _ЇwYg+}Um|ECT̯_2L턨߯Xڟ3N7M|՜!߱W)۷-|}&?Vy/k=oaP/%?k$D&Y:s~̈́{LEV]d}n?~MnBoLߒ~!w7?P!Dc`8o7;ܐO?~<_j֊?_Cq'+o揸l/D?f'Le:Ң_Hdj'Eda4u|O'~f2Py+O}w~hSP0?'*]U~yT/|j*u'x'u}Z>~A%֯~ʈ/TDKlHݮ"B2(r|W*֑~+ _M*_K|3^WQҷ/"F۸K |ǟkU>W㛌OwYZpOz/!D3iE_W#a*Ećf ߭7(#L[ŷ|=!ok>f.>_0i:7siE?_1Ii~/&D3E_HקMVK Dė'nH,< Ry9oƛA+bDѤ*"D|"X&RU/4~*zLI Ѿ2f>D/&DЇ>K7\ʗ("$/Q4ʫu}2E&Z쟱7Y/Ÿ[  ,B?<O"=*GAە_rAğϏ'cO*㉆/Ry!Iėb2Q_XEO#tk 1Y_?IUbE1}s/V+w|ш߷->쿃"/xIVy !]&}â&TǤkW,>MW&} A>UQ>ŵd#})\*o"D#~b 8' 1~͊d3&ݥ݄?GwYڇׄڿh B{H;V~Ǥko57}I5ߤP'k+>2*#~Beo&cч?5g?#:B)\[?c)?_Yh.uz/t2ߺKw=&I Gaч"~b|IUY !/WK?s_T'2M ,T;ٛ3HP?7iE_틮ǯ"O4Q :~'L$&[a"idѧp S,ws|/~oV" o%"B ϢmSܩ4lNhb9o u|>1P u x/3:&뷠~*M_HׇR;7 +̹'ʉ_J7eė"_F1mVy9!k}O5NƢOpuhcʗij >k/$hR}Z2qSXؠ*B}>o Fq#7lj*D"a3א}3V$T~-!oЇ6W#fIwE~;7+>웵fS'I#O6 Bk"aZK|/$7(/}z"t_{Ttʋ?_B(ń%_d]>O0}_et}xI*$Dn26>_EOԯjB&7[aENp?į&&UBƤ}FENp ?XڇǷۨ7!~3!W΋VBi_i9ro'}}:߬'݇Fdo p7 v^k״[jlڎ٧ΝgO>e}mmj DiYEet߈[_S:=iw{>N}ig5kё PWٖr^K*Qh2J.(ZvvmxT@@lrz%Mi߿kR5fy^Qz2,jgԕ9b4xt ~ iMGy1#{X81T ' O;M-ŧW#341{NL)/G>cd'qDa鮮s='OL>y$5?ܙ:Cz5?u_vU$@<>s4d|77t\P?v>(I S]':ĵL3cIW*?Xj 8AqP7R zHcḞZTqdWg_nr\Cı`/. eQ|gB!nFp;Vt  YNTUU' XOQS{tȈ Jx#5EXcX|;w~Gcb1׭ jsq@d< c5ن[1^n yfA#=2)F2{CJ.lUw9?4sEW,E;T'CFdқ ?сa]@8C#*Br[=5:x /'R0(2x IO-c\ȇ`Tpyc:n\(tGmca|d3u2k<ЈWՏ#3!b-ԙBe=mIHfN'Nb6Q2yAbRi6:&w 5"z{pMރŵðkiSCWw M 1u龞OHr gaҙ'#5nwmboשS#z.n4E^hLK{b#k*p7E9.5SVA2Љ8ʇjYTPea$'9nGO28IG1X%LhB:>Ql]*ӗHb850Yw]t6g(w?Brw_ 6Lwrb 7gsO8\_bG+7ԪZb\t6B(N SݓTdт攁1߶xښuDYw=/ Sq3X~Tpy'/|ޑOf)5OeKi7ɏ\8\Dj6:N;x'v=|(q^T wSF[*jCa9[d~>4?W:-gӝ̏+NOFg5xA1>Di)fQ1 6]OhWF2tw@ tSx6"d:tU2L9CTz6Cn5}GЅ4A{AgǂN[7a6qԞuZOH؅p]['.da"s`m8j03ܠ)-o ,Yh;HNjȣxp=+$|EzIV:%WN0DH0D^W9_9|Z񿇔QGSԄd<ҰG#ѹrvPƽoɰa1l5(qTfG]oBmy9O{+s*FcAV:jW\N9Z]d~#t8HSlƆWY]\f[{8:'rDȦp]Eްgߋs"'+ՁM:_ 9[ G7_Q;=ߘ^S< {ɗVw[S>]\ gJ5O4|p O~eqwgY$ S~{u xbi:] }`Y~zgDHce'_3Uz}>dӉnYo,j "5uqpѼ$zxy7Rz~ ΤR}噿7p/FT*reC]"Aog Möcatӽ]=IvxkzF$FKO#2~䪮m) #z}PYzit}. A/>uxЉGM< U ;D6&2'T IKeE!V Ӿ)4v+gKw5veFtQ96~mTF)RÙJ)qߛ=ٛAO3%l@+{e*+>#*oHU?(Oye6zA!l/D! GVeeƛde7B۬ܖ v5fu>ɫ"yG_YoΙ/|kJΉQM40'3ZAefpHGoIGɪ*aמ;8xdTD`ɮseMFFr;_]1Te*θyu] {[o7ދ2`J\+" sL|I}WmK[xBB_)Ir?ITΈse/W#_O*o R*_M.ÿj(sr\#x=!ڷ6BWX_O|=o!w&8k$:B_#򕄨?)f>_O|"ןE Qbɟo3o!UZF|-!o;u7Dɧ;-Trܡ݄a7TBdoпF!D_ Q/T\lhүU^D?DBїM/&]ėBRB%\q9#Px'_By&XxO¿_HDN^Q?ƯlO|3!?B"~ jCW ">N_`yƤs`RyGTۃ-E s^1Y~n!XoI!!&{֋ ևRSB7}*jS>h}e,h)sR_E1 /scMzG½X+O|!'{WIRy=!{IOOg|ؗ~8~?դ4~${ʛ%'MzBsLzBya_GC7pp7/\1/o 8Zy /U>GWr'z㤯a(FP쿕rErۈ$v 0 eb|y|6*_EǤ/Z{oP}&ݩFB/wߤ+! Q&~#!Ƈ o"DԤYx1L}ܒ?-ۨ|&~;!w*"?k]E>۟C|&p|pyd/Vx ON֏2߿I??\y[C__|6!뗁럠B|}u/_\_ȃ I \FBw*&{U?/"Ϳ_BMRB_ P<~,NrB'T% į DW*"7B kH? Hr;wL u|]I|ObY2e'E\WDH4/ޱw.֭%rńb/!O|b g[ZBo^"WQ>#aȒ? o%!⧄UrWHTZB_+RJj?2BeU䟩Xʫ cbb }WO|"*>_WGY,-,ǿ o"~9!ʿJEJۚdE+>NU$$3\z#DHzE?|o%D6P1snl[H!?7¿o!CV?P_'o[ ~jFJƧQP&\Gi'}s翫 @]Ǝ+?Iϛo8w~J=(~ *?GsӱS#DLȄ0./%D$D2>_E&FWgo 9(-o"^[oUJ~v}Ma"BBf\8)?2lG">{mcUD4v*b G@_xzB"oP@?Ť=դXaiķ(b|n3U}%Pa'//ECA]2IJ/&+LzE"EįLzʗ~^俔QJaė)U{IwB7tEA|b-IoU BOη^>쿕:BwN $zB,paN| AByI˜:'Ǹs&D~&0?R~i*Ey % i*ebWH!! :ɿo}"On?Ge?M|9!!~!.bjB_KG_b *CE?̤{T$ME{ ?~aүT^D2Beɟw TIńX:ؽ&G奊_7*"DY&DɤP7I_UբȿUh[ʷE@SXCS`/\><9"_)ϸ-z<G\*BWZa Մ_|B4.tk)>Y)>[ER>j?Blm?:?((Cb/H'D7>xSxR9~_>K 7$>?%*/!D}_B|2o8.'}c+^kч+Q?F'^JBe_N|V\lT|5!2B,[M|-B_a.\o6'D|7*&?-];Yh}h*CD<~I[T&ÿ-'}$s-oSB}o俄T>N2oI{TL;L#=W*KoITiRE_77&5į&D\k*_C]>_OZG ƋRfBߍR.Ry+a,}&`'(uþ'T߮x?N| !?ISȷ7_ϐIw2y9M<y9c9/"YbчO*sޤ[UwK>jɟǟP aė(pe<<¤Z#PU־2gG=ɤXx?EeE< ^_|6!Ƨg9A(_rA?BݟBBLz"_l};0~Ԥ|9!}9񕊭dU&F[a)^O_gT~K j/w{h_i_Hu|;Mʋ "~)nKQ?!Lgҝ*_NoG-; DIRy%!`>Ȓ?/U>f˴}Bg/T\L+_Sy!s/!D~x^@| !K&}E奄2B 5'۰pw>e&cyTD~g3>>mg}Z:;۶aҹ#rlCMܷЦ<;hzįݓwE!z( ]2޻eggv'L5$򾜌G&[eVm[U9[Yj>Bo, ̢2Tf_&۬l}6eY/1vm!6("k* Ky? 'ޭs;Z6hيA`b{硭hWf#eHcery3&AHȥѲ'vFZJPc9= V!cT˂q լ:dF<źľ͂!GG"r#wQҾ;{l͹s]^ (m.ph:jbpҨ{p ={_ϥc9mTa$_~iR]D(_ؽ7#xnt֦J=r.@XYPldU>a䙝}4%Jpź N,3 >ˎo;Y:dKf|' SϹd(ˈy jdX>J\P?v>(I&ʅu&"Y| s,fuLHi)5QM~++n6xn)XH1"p[@'UfGWODڢ =]ښ;+ЯsÃ<}.J1`P6-əИ%_5 9 ٨ VGѳ&ߦVI}#'*|XhWp#25£qKA4IUQi '4yq~&'4Bh`xՕǑ;d|^)hq~c)(}) aGa8\,4c <Ȳ3RT#8lݱ]:#2ѝ>0 i.}&KZQ͓hY$:6̄!e3uv}lF^&kaQɷF.HhT>:s\Ym`>6'֢+^˶>6'}q9++2;7{qQ,QWG3{uOXz~:wwFGeh0Y }n@|帻ܓTd;r@ǫ/dx_Ƈ2p =!='hU~*˜[+^N< S,O.mNf]p|g"x`_FsOq2?0GqJ:COuS/gq֩%'BIǚ6/-666qѰlD@*o>|{ԕY ~_ڸ QAmRԅZ߂ (gM!~{5%(﬿*iitw.:ncdst2' T8/9FN+߱?CMh\J=qYP۞ƴ<}~Hb"_<-rt:@%} .@{G xƯA9 ̗;KH r:|UcrnV/p:0ơr& ['<@{y:2(c_jvR !}t&a' oj k9fOH Ӳ_)jE K)G׃w8N~zgNu?}#0ᜭt~7 >5"'[*do809.- /8?2-ߣ.g|]Ѹ-0q)Z@ dX{F̺9&z:^h?=wƏFR.˥|Iɴk u]ΉUzfh6b.w22 S>+Wx4Z Ӥ߁lо̻O.'5~V ܻ{Ở޿N/{f9MK<<3t"{dOWo2a.34lc畨gtsYwm{KC+ҔW}rFBX 0n3 H-kd( =lhFa .;"S~-_NҾx2 WzҽuA{4lʹ^W4d׹&6O6;T~ƤZy fژs2)O:\NQ;H%?"$<Ό+gbN. >\a%1~[yrbiGV$K$gyr?7~9⊤3ޟqq9ԇNx|q햰yu+;W<_Mw[ēl+BXc$QܲtLS7V$O*u4i-)t٘IXVVh'++iڔchErߜoS-)OoxUqݰUAaDS)_i[D@ToWozHrmMYe5e+(=Z5WkZ-mф Ü7zVG, C!Fz'+ɪ*?ס<.+;g\p^StE^Q@yQ칤Oq6s.m vGI%ʵ/(t1%+УxS4at+< cAsH͠[ezy90p!Y%Puz+etb)C'%Rٹf9G^e#V>Pf^<;&%n!nP  sYq18`YzE=ut [z T)EW.> *E0#E(#j1s_TO ]>l_{6T>E-_R 6Mvw1 Yqoyaw>w?;ɾW>B}o}_K_̱_K:B!Tؤ-zŭT7TQ}?Jv/zTOD~񝊽d_T~2B,w}aɜC?"'D(/kA ?_Xyw~ڕ"~n#~ C#!?B?RB?r(+ u֣V\&=£}Cu+6'=?~hғU}dұ) |2^rB˝]>쿂e[Dvo qF\׹A/%k u|qϵ_Ny!ʿL\jBZEHjyQF۫:B_c+_sn^kѿNâoT_̥*_GkЇoP^K&Bo:?ƌ/o!D>`J5[gwQkm'D}BnBf᡿;,wN*BeD߫\W"~!gƊu.vZ5_H,-_EA>?H|"_ca7~Ea&{)zT̤'̈́( KCE_;INEoϤ~ I甥Ik7!,.c og8u3۔ǺNű'{'ń? ė)֐2#*%D6S}WbIWy!cqK-WOw Q#I_TZB}Ev\J}RB5+ɿMWqIw[7V%߲ג BϷ'~!+_?4'*SpW 3\<&BNq#go&D~NE1Ne9h_k>%;_Y^Bo/ PO&Bķ:k{KZI?Cq7Eק%:Q)?W?7"~3!ob.Xxw+[^U¹K|<+/.iw" ~Xu<}пRzX󕟧yNs@ԍ;~ZK u|'D㿱_@|!ʷEZƓ7B1k[H 7ߪ9%_BmRw/.3pX _ܬ*3S 'uŢ*GP6mUE}5K$_C|⑿U^AYA<ʉQox+#= ֊77[aE7su|ʷ">"a%f*_!?xo[4>8=7O|!o;j2Կ ]; Xÿ])"~͵XCK Q?#aÒR;|%2EſMV?_c1>j_g <~I}?@|! į$AFYx?Db[aB1| B΂{!Մ}q~E_B|1YԢȿUh[ʷ_E@WSX_CS`_C?m>G/Ѥ;Tk/2} 9>l[U^ExI[&o3*!D|,k9>ixnKg_[@E!xDc%Q?7駎Ԓ@|ҤO;kI ~d}i*bT3&x/e&}Ϣw_ϙ/'ϛtE@|!&}Y啄_&ZQ}J\ՄG7,[MTkaۖ ?? ?Vq ?3ߣ{ _9h__1w*_Dߚg>IE/HkT}%%WL!D. 7}+q%O|>:Ud?Bؿ`i}/P'a0PBx>'_7#1Y "a|Cy+a,'oQA忌:ap*IWKٟA|?Bϕ-|| _OǦO\ &T>P/EfIl!&ZbⓊ4$qXKQK"aؒ??y+&2KiI1'Qe4$q֢+_'',<,%-|2q3cMbj՗2"3Vy\7:gWh$>oVB傴L|a,?h%mƔ6#D|o5Z>F<αͤ*_NoЇW*v:TwG~~IU~=!Ͼ}o뉿!NJmJj_io$ t|!U^L?LRBїx^~9GM:?eREwxnc&;=y|UNZ3(hA ѾC*.ׇ8{G=CBYywBԿ>X奄пg}σ~~3oG}nsf=7uK˯ o}]u6'lݲPKggv=u^=;}-7k~hSuDiYEet߈[_S:=iw{>N}i'"Z.8xti iߋ8>Ҕz( >%rZvvmxT@@"({Di5m]&Jo8޶%\yuϘۭ,.KߕMk`:6zGr4\2:AYR,9Y%2۬lo"/"R !5p_]j~#&ǡ|8k&ƃM>>'ź 5#rX8 f8\y0;|Dgd|A3'Rg2c,V\P?v>(IB-ʅOu& Y|X7s,fuLH cR`b3LɞP$`F0vښ),P騶P#9*WIfd u]I.Ɉ6o ԣ ,擈h8uToVt34=ԩޮN޾[]O8ܩls+\ξiH:T4؈gy)p< pdXPPCAw:7u&(3p? V7Mu6k* [w V9< 8[BJsdVfqFxAt{4YMN5Pz!x=JYÛ رT(FPe qx85:ӝ}o^n I}2SOquB;! _r$҈+XwGq]mb@!D.0!V,$, q8ӿދ'N/K͉3sޙwgHEq~S pg,tU*8 *+ ǹKY&I}';:{`>NE-/0v l9r\^jf 6l{ٷ"=R9goyz';׾UINp2 xOKj /𬆯>@9%0:;HLnNf 8oM[ey-d1m(\_JwOpO-RF';^UjL@jkK/^]5Ym_we_[|.o/gZ'+u6Gѯ6PQ.1p=( Jd_x )Ndi5(ߜc ڢ[lZW>o}vo%zQ&ff_d]G\7RAzFA*t?Bg2v3!C".>{s~2R33 gJ2ȫUJ;WS7nTg.qҒcXۥ' 7ݖ'5\?h|Ѿ #Yp!}#yy1!ܼ9|^B0/o] `Wy[-vZK`97c D^>yW<<u>Te:zKxϺ졿lA煱!ojkyf-R'jx7B'=3r'{Br/i53"zB=;󊧸;7C3!A׷ {w/R=΋`Qi) GaM>v |]`W%7Z`R.3Y'eȲޙ;z9~_dK}Ezf8#~@ m}}% 9Exj?xNҫn|1iI-Ө'y'Ra9컫o`bΊ{/EiuCvYBo4,]Ud/qǦ;٧s;'US~ {QZ}mO;{erP|]՗m6MjCtCeZ~Rq+$>= %pI:OG Օѫe0g¿)ΨR0ՠ2ܵX^S^?7< o sp.~ۣd4Mk\E|E兠{i ir[W}/hFaB+s"VEzl~ț"w-Γu^i=g/IEqCtgwqtSUAnʹL+f25b#]+G1TnI˻8~6 v }TGTIm:t͠Ccj,s1^WH-pGZ7J6bkTh$bJL&-r@ЫZWUFW-+7XY`HWUU}3R=HFpv*?]Jg4,c@'z@.&K) r ˡF9]qcS3x/j˚63)lv(֊5At1ˑ5GF%e :qCh]S,i3$Pʜ侍8xU6o𛑾a k1f <)bnCБAed5x('W^zʝKCo'6 cQNnLmqʺ ?U|h, UՒι`;.rrYƻq{γnp2e_kӕ}gg}'^U+Lћ N$m#xO˿OUT8 XY(|>8RHǍ#~v6ʑrC8jc(W ^oI/]B\B78e.!c S !y"u,}gkyR!Dʵ -o.qP4~%:rF8|8|dʈO+SIZrFԟ\{ҢL[F|! ~5!VB'-};y!&FWYq;ٯ#v"~VjKv_OS~X'8LZBO(h)SEo!Nq=Vo Dv7* n$Dчݖ$ꯉS@ۧ >}_K̮PJB7)ήVy!wU>_M+JBϵ1R+?Nw!;xGIO)/k$ oΣW9k`}$ʑgub׷>, tg A'O| {|D|?jE^?<٤| !o=ۢJZBԯ{ ?"@,EO7f/PL+/M&ݢL|"Oo1m*~J>͒?o'i>ʼ8QERw^U|~}^|>>rB}Ku|r/'D|E ŕ߇L[u&Ƣ&~QZBI=+Jc&}B_чOXD|>CERϛEo'D`-PCI_Q^B1K{:- >M"IW5K>>G1Zx%DD1E<_~vBOc,k'T'ah=A q"D#Uh?gbx0Wk vJB>:Bip|_įV^M>ٯJpn9E@(Y''o Ty"iR~7jdiK|-G['_胟T]_@ܛ%.U^s/վ Dw&S]$Z0!k)/H,]lj|"oDE!X7 c31_ڿ&DET>O䕄@Ǚ>짉R+&-RJBOI>/O#*cϯ&5:&N7HUB~?k,|T9>XX.ϲq!a*NBď ϰ:|AڧjBzkiUbW?3V%:-oukɾY&7aч-ģ_~[Mڮ m1xf&~w?vMګ&BϬf-hÿ"D2k> }P7D%ݤJC=H|b  D]IA˩̚3qXW6͢%!ϬG,̈́XQ*BդGZxHJfɟEvERۉE=={Ǚx Ö́O3?k!bo=Capd1Un7}~{E%&C[+6o8$D|:_X5ϠD/&@,B?7f Lń-tH ɿw_DIlŴr.IUۻ/!RC"B^B/!(.%_F_XCw!~*ҿՄkHį''ߨ?M|!?CnŽ9 1>}Bܟυ~٤9n+;vJ|!WENuK ABoQ\N}ˤ屮ۤYw_A&}_嵄h-Տ|+ ??&~!į!DzB&R/b/L2j?7go_XEΤ?0Iÿ?\}n??+_[SN2BW*3yvOUy!W>WY`7@|92EiǤ$y&wNW%%~"q޶ *_Ok&Zx7(n&,I"PǏ$K[8j'/!~"=HVrʛ}?!/G63u<-ПF@8~ 맕nxW$mD,ń2(Y+C|!WNrEZ$įUl$* oʑ&~"G)YcQ5DZAnB]$M_Oޢm ݿ$M]$ר|6ҷL]$[)b}#:K6|"?mz+b]G<⑿T^AYO|"?)sT^G7Z7H&T&ۢۈoTA1%S匈1Ӓ?n*_!!~gk|b,HG%ԧ"B!g)/7J/$&]kчW_ʤNA~чÖ-o !%>GͤvW8V/MۉV!'L:⟔ÑSZBSį$emi,yw쿞E|?$k7Xy|{#&KV[VBmK,oeߡ慄6-R|Nv"LEbEy{ʫ4}ؿjB/χVrBLJME&F#}ѾX K2)m?~I$?|I5>lIJ~y/[)r|Ť9b';~jү-k;~ol !GEI|R-em~fч_AIWy%!VC%dOT}|kZBm"5=G\h,Alm냿e/"Dxg&"Ԫ򹄈&[_+I(F/'Rqٿʤ*NWaw*^K1%D9,wvjcԾ?I<"ϧR3*/%D_ONnP2BƤ,kR* __>[&*_!YWj rYhG6RfU^B}Ѿ&`Bq?~OX':>xy~4iGOnꀣd;𓽞OsZڻygG[[v4csgpL5o9شFTY̢2QUZmF_Z8e_sANi'"Z.]ǟɻQ)~/xsKQ(ISQ}6iƁD*{Lir5k]nxXC(hiܲq6hn=c,T}kCYae\µkˢ%Ch]l;9o}_~m{Zo="|yma#d\@1>Ča@j 1rPγ9//~hМ7J7(0v_70a#C"߁{50ԤG0x bc348~mXm/L X2?;Phs""we뇝#u9 W睇3~9F>%7-|B:.,]3ΎwudϹc#s~H{+v_Au0'!} 1r,Iuut 8 :i%Ww?iN,!caBw[U[V s?^gGjC¹Ź<.Cv'ׯg;xGZ!1mIfo>Qűf 3qCFtg$@Z}Rby L8Muz{wʌhEk#P~~JD];[B1rw$*{O 'zۺOeSqp"wB?$V\#vfezfFL1C)hp#av$HGLGzuA:QT=ZGɚ.}FW]==gnPH ɑYuW+:n Ƙ5fdڞ<[z{G,UT*ҿeK"rD?,#2K5]TKz<t2UZ=aܰ+zxDg{]`{=qa]ȭ_Fx9*6Cxl1{!C>\a/;,+ CJ1t[p~grqrq= >-30%dlW67~espn}lZPU=?? =]f똶ޡ }bsC\A"cS[򜡳еpܹ*D1E}{G cEQ!oo;5璗x{;9]bLQTb}x",r5Q3w2@ @2kƾ/taR/~ TdтsIog)WΕ+>kkkּ./ۊ5If[Lw+xqNQq^jI oUR]'X ,O:ه*^Y _=}rJxu Ϙ>ܜ$ph}N Le*IG׼JDS21$ɔ' Nկ結DpLZz)R{B-=>Hq'a#Nkk^Bv j!xR2m#4?wT'uFuޕ㰎ȧ,/3ӿ澘dHq'p ON%ٛɂhl& qH7jFmbKJ]c2_8z&ϧwy^VRGTWhiTaM}Ew=y/}nO2T{f}5sS >p`EWpR7\1WcѲp[r@vu"y=M-ԆfEONQ/ ] M;2G 2z)O xyy[dou|/B/Bp/+ ZYzsVgе]G8c?⼆+ò{ؙnX3E޼/MtfAG!ojktޱi'jx[B'F,o us<;[Dw{iz'oޙW:S\xYRS«ƕF|q-uMsRMFT_G;eKω==ק[st=+k#͂jѝVo3 )p(p+;Cf'm|f?rƆ(>gt۹Sם=^_YT-re( fiO2-ooe IO %R4}UL5_[ltOsԂFs@c[T#^Z_n%KalWX?t!fG-3eY_V.RV^>He36l\E|E~ 5,tF"+s<.]h"Eb}'?㍓ZnvoMƶ^v]i׋ӝݙޞ'2˫V.>4}&,}zEytwy|ӝ'3(_̓7S~ɚ~X 6k ސ1UW,u+͇-7+M25bbiT`s (Z28{KU . ml#j:[_3]RiL)e \8.Oo*<6RtE*l>WwxC $ݝ*tssc­~騞 `qMQNWj\x꽈Z_٭f.oGKJ s ,@C`E*YʨnpCTGaT1Eő`0.;}}wMrYOuey²o\˾֦+xgSÓ~5MUuKcJ1EWs8I<ܿSGOqj,˿OUT Ք,^η~xXfq8gg U ,keA׆«W>|?M#"h]n)!f(r$ KEf?GQCN v:#9_L*?o_9T >RB_)?q¿ iETC>ÿeN-WA|!$~5!rIEU; ma}}j_o$DчZ95J'a|tҜˡ } $XiM}%DlVD#egч[S\O'e١ (}A&ŝd㝬'&B}c)_vi Ak>%D\nҕ*_I¤v>:EL:(1wr[ >Gca|ķS$Nt|mDS^Z/]"D&~|i+|6+$JѾ=/"}_Jo ~ !/#~?HF+ n"Zq=y 9O)֓ BEtʷ"o#~lң WݤǩH%ǚL>sSbBLzEHB$4!1Kin)? YXZ>?iB/$D /Q,#wbgaE&¢/&^h;ca@C+->̿V@ &Ix%MzEDE_o6*/&DŤw[a/ o3*O&ݖ3^_`uRlE)Ahчǫ?Iw|!&ޢwV,%1/&s>CErҮ1>n/gT^N(K?K1?KҤO2}i+ Q?5{*RXI_Pr„I_#/_CI_&_6;Y+|_5*_Er|ͤo[aį&Da7-|ڧ΢mKW}!>b}'?X?6'?!u(:@ABL7"_#8k#…Of/dHHoYߤ|3*_V^o>%X%MK >ϑ_[?wpwY"~KkŊ &RS@m6>%~ƫrՄz|b7^q"|"o"ג}HLQy=!xO,)mo $FPǧ fZx.1[卄:?' ߬7}91Kdg>t< ?oQ!l"VB߉1/miz>$_ a|-#!7%^{ SI|sbʫ _sbIP7 99? |N4|%!3u Wy7*W)1mXrFZד~-oD cƚF IDSko/.k si ˤ=*C(KmRE?Wp#*O;x}/R+w_B$Nt)b|8eR+ ?יcGW)r>̤.ч.K~=TXo P%6-O_ ii|;!b7+u=x5Ry"O?PL{/hnW\Eǘ>bEkU!D|=ΤYaė+"~e~y"I&=EߓMzE=Պ?}IOWy=!O3E}:3Lz1?ӤgYx7\*_OߠFBG,IB̈́wXڇ_DVN_wDz)R̤Wa'U0G Q3?N ',$~4Bg,%~N'/E(ߗL¿/ÿ_ _EAakiҷ,<%D}h|8F;7\']_w?S27|J_˜/5*H_&~g'YaSw|IRy !Ɨ? }6*_BK>"߿äPxyO&{Mkg~HчXg>ү%DOPsE_틮ϯ&TI!LQ>쏱X*_X⋞ o'i)r7$4C3ڿw.CP߯4P;yY,g;1orE:&V4c^*_H;B/5\E(BBK_J|Fq)/!~!ˈT!rWB)+W~ _IZү&~=!Qq' VKu7"P/$M_KbPD߬5;.7!;눟$/$!\ _Ho4٨Bߦ}H|)!{v/&m12EoR{T^;B~w_ė |Q{_EXJ|5!ʿ/F[M:zB?oPw|FBWEqgר|'akY&ÿkoRCX^BQljOߪxI'U~9!äZIPJG(D-Fe&o#Z?xù뛹N!('T"7~e(C+ Ed|~ s 1>x 'IQbB W|o$~"LjB迅6 oʑ|;~{wN '7"ޥ|'؄׿5*6/$.I/"D}REz>ˤ}aGMWч_H?I*a(g9AsѿH?&~|'?1-<_/&?U>$~!?(ʳ_W"_(P["$~"%dxK&~!/ė"JBME_a,QuoW|K-o>ǨR•/'D0|ҢT¢_CIo_*e)!~%?5Nwy!31UZ&[DW+֓IzҟL#g"c㯁;›T%ד"??/sf9k~~h0d&Vy<%" ^w>9i϶66hf`șGjri_- LEeڌ&2-Ki_10ºn7sp!\؄>9~t\|E9>p<+ -j!dyJ'\9k{4shtsږ-w`,hn=cBc2wp#׀9sz6"y8 W2DTplc'u5w"sub ui9hZCR``G%&" Hn0Fn~ AP?dhaڍuxp\-!x;d ]yKra /k7,ͥՇc3N7/G{d݆uȱ__zSo0`< =еW8sޑùA/8Z7סnlDqNveM}aX,rYecpbprFUUU-,Y_q NNlQG=dV5OV4ŏJ.ȷeƩ'u-"͝sa\pgeXb=='͜'Pc +H=?z|(/9UdTѣG|Fh ֱ汽rjadX`< EOTǁcb!瑣'h9e,Z0_`.8v]9W> [󞧹l&qШݸ =ԀYVoUB'82 hՉNA|NpļNINpH伭NqU<7+t /jx[>\4\᫧PNEaYI B~hzLs$~;脮A-!++j2Dw@.s$h,Ml ,uv ;MA/[p/Djk79Y׆+f*5x`/uɯey-d4X 0DŽR¥;J:%"ũ,OӜ3$iy[>/ _tT:uN֫U"i ۯ5{`oo{,ƸΛ̲?d>kkhDؐ˵1 *-y'lh蒨G8vtVûM)d;xia/r5ޱ};8:s)ު=F>o~,Dz[/t9}̧CG8TM6Y{i91{wټW'G)H=ÏNNf QC4]y7}CflIJBBλw+t]J?j.ӿ'B~U~usN J0a Mi ޻ؐ];׵8uf'QPwk(m.> t^rd1kb.|LLƅcOb<3 Y8W<1LAoV+{ԡ̎_ z,b(0:+?gIoܞxD'>bz<}R9qOo:)1@H9@Jh%(z{;!cbdns2Ԕ$:SFpZrrYq㑷(kD,6b2W L6W8AMO;\;6Ei>էUގj;jylۗm6}NVo2-f IO\gѥ?혢mZkͅZ Ŝ5|WDz %ˍ=St:|v{LY9oƐ1q&Sto`PVroaQ2$s"}"эO{oIպ鍴WA%Wu4W5ùŕۜ~D5̌*_HWUU|)֞>[^?vrkl\L[L 辌.O7 e 6HXJΓf׍JHˋ-{Z!s}(b;AWحwP&SGO_j^fWR%-/ X_/,2&rOD1'3b9D^Nnϸ}ٮ6B[_)9s#}k/\KZ/u/A}DU ZR5tUr9uBZ^>RLsS6=Um]]:᷷Ν1<}YKEE1{z bwu5xO"/D/jmޘ.ndG?IY/QU6mA[YȍCh56ws;l\YSClԖܞx34x>ݕLx tvu@WW钦 wHvtu~kr[?^+2 oYڥ0Rr+ܝx M-_cdlb,ٳzh}xa*DiA<9w!j; ݶ8?~rKc}d\˾֦+{o~'e8)טuUBLsNݰ5 NRD{mTKU_k0 kiч:}?;eu5zn- ] ^oI>?M#~"wuoz>|JR>?"~"uGsHU~˟g¿4sq]_%ȿ$F/R~'8+#eO+;ATC>`чˈoZe_G*_Mo|!&mÿįUDS"Fkߢ"}_C>Cd__ ux>쯷o7*/}qb6kۉUD|HYzM*_E~Zvi}|3!ʷ;FP[,<[H!o|H vBHq>Bs5h%DY|GT#g#)|Uik 'D17*$r_ʛaD>w[q?ٗ3h}ڧ'|+!1IoWlq)&=M O53}u~r_E| 3Mzʯ!2N>{6Gۨ~cT~}'O"_G#F_d)uII_4*by%>"~!&F{ >c-57+{IWy+!}=$o2-*}|Wv ;#= D&BLw}o',VGA>B}y}Qh=TW'<ʯ$D?W^Ap L|!+v`~ U5K1}E(7_Lo&>K2BJ+CW*"?!~bw/o"/߭E|3!ķ /k:S*%U(&̵rsD@q1_`ѧ%| !_H|!_D<.I劘&zcW8]A7&6Xx:NX5(qEVq_f@KԨ-&UPD5r_kkHI'2v9=Qg_G{ *)}Sz s%>" IN{@NT^Lj>o#~"}KRB俓2Bo"x7\&BDWJ}L<~Db-&Za?k7Moĕ*߬K8SJ\&B˩ J߭S6 kH!;B<?fR6ҿ%>R8?,)ӕҾ3KswM~ŊdI=*_L6>D쟱W /:B9&%d-_g?LIXxCW¿I>eaS-!Ӗ?Gw_D< 5?yW -,y}mie~cч_B=~E_7I>R2C~ !ȤXaė+/_CUl ~jṲXωߠ+&"~gɟ?ʷ?_CXI|٤|!}PC?4DsT_LP2Bw_>?.1ڿ 襤 */&'9ޤI}؟@?ѢOWR*Et'_ibR$;x-H^ՄЗ<,R~09Sk V}؟iɟ'Y7?/y*ߠwJ΍GߢץL,%*o!DI.~ܫ%!_,+~?; r3j'WeRE_oE+U Tqٯ%x7\r+M_K𰿆 -Zb'w/"&擛T>[?N&vIܢEsOK1>N3V| !o#L+'wo,o'5dɢ_CKSyJ՗i7u|MҬE*_GȿY}^7cI7+tpߪ꧕#E2>"~!$VWWU']M&Q%~YA3O}ba$ҿ?yxI]]o} o1\xo< "򙄨Sa~|9;yx.kÇQ/&s3KXƗG_EBrEz)HWB6*6B()G1oSnc-IE?)>mIF%ߒ ~\@<O+̏_2*">L|9!槯 *:Մo_KIQ:Bmע y>}'LxI?ߠHm!DR-T[ >?\y|.W"D9hߘ;'xvDOÿ?Oޤ?C>劍d/&M a17*^N*b?ٿ2%}/.8b$ojl>'h|e<{>ʋl"ůlBo(.t35ͤP7u)uKM'3xu2sjʌ@_RfuJZQ/RGX瑾R[U^ןy/t9DLJ+S T^F56S-Z6D+ aL-~ u֩*_ETfчįV)ĢOp _K֓2 _oR_ˉo"D9-U]h&mZw+RShB.FW@ޯI{:_Nчu._WFK7S+[u|Y<g2դ^/ۢM)]b7\_iE2!~"T^Nj6עT췘t@aK[a Q?&RBA!*n"[7_#!JKh#_ !~"_1}LjWy3!I}N< N !'\*i*}ؿR>z-_ a?~/B ߯K@M&Weoy>|E_{bnѧ/¥^NƗGV瓩[Lz_ >$eNgfңU^K2}4+ Q?1*#Dn-XW)֓Y\8߿u'XʷL@7(/O'~!ƗgLhgtE?&E_cTL=7FG|"_/4E*?H#F_d)A;D/^_/1u*P&}֢#H㋴Mz[D[a'o2-N6&͢o!~"=_NբOϏ[L{;e.ޣ !I#_עG_Kwa$2#}aג-kI#_=!G-)~ P#g3/ss 7C3 Q8g_s?>xe}^{SL2eE䗈|RzK=۶<ڴv;Ffz~y}G4̧2ezh3rܶz-[v*H;e,CMF/F0ki.ruyVhAZQm -x8Zة}6iƁ$ޟ\A,3χ >H.k9Uv3>*~Mۣp;mtPҡ6ZjYnZa_?bASG_eW-jٶu[>Ղiq֣;/7?Ga1_ң/aMhFb $}A‘rGjG۫r~xGK[Cd4!)z0K1Cv<Ggcl4xݟ=qƳ{d"dczľQ>:g$2^\uNld\{qEl.jꇚO'@KCGeeiw&S曺O Pwu`D&Dj;v~̇׃<{><׷9V#+Ѕg:>83mm;;zOU:r&aD{2Xp}%S},Iuut }mׅu JĵL2#B[*?\^&cK%=D51d??oޱQAdgإ "%w,KX ~3d݁xr*\苦 s/0y2l&}>n3ű!c3OGM(i2 "WYҰWEK4󫻠dGW_섖|GhٳA8>xж~tno qv=z n|M"ej@pP Z"t}~,ң1@|oЈ![vTL tw.D\pWªSKzHߚ}Y>9qH8ntU }x\bhLn#S1E5/"ь q'zۺ ji{{9ճq3:[wb1F3%.[hgz;Nt羖3qŌ/wKF6O,Vg {]OH1u\,VBmy.a2挹ʩ/u'j)12 ww١ow-*7uHOcKdN(֛Yἒg:;;v[;:jU>)rRӛϳHOoEiptM!9&n?!~s-fbŮjA_ETtUz8kOC*Ъlđ0 h{4'rcs.LꅓzOvi TdтsIoʹry@`mmؚgqxiʁ-LDZ?Ĥ 4pۅT *;Rw',VԀzH5E}Ew=y/}nϒO (PZ[I-ouV"qo'{)OS3 z NE'NpJqV'*.𬆯=Si'؛{30p3S?#Y~ntu-y}ce'pY#y,U%ZBq6A|PK䋜pK:>NRVg8c^0FsÑ c\ld^Osc6vy9.IVZDoljt<rMʫ:dTq " Q|k-OIy'`5&#HQL]EϦϵ oP{m_Jrlsrccs~K%hfWOW5ҷŵ.)PhӴr}UAWA06ٲ#ęG^ 5r.]d yp70>© *j`B'8(iѨ̿|y׌0aGXosLkbFl viNpΒ[R9ΎNZr9M ? >XN%.t}+m vgA18W k[<]{*=-J]m\R/wtt24ҊaP2Xaku WGF mF=*~U_${_z {=ɛ,dJ_, 2iRrh"E?۾* "K`DȾDpMƺܒr0\ }ohDu6}1sJd*O>)׎ {QZ}qsէ:;{{1Z˶Q*8+P 3nקK(PKp}i:O;hxµŖkM4+&jI*鯮\:F'h/7 ~T~TۣVc,v*+|ks6?+*M>,*Ös鮎noݎTK4$'UoEZ-Hks/j9_eke)ߍ濶t;tUUUyodl;~^?vrkl\L[.O7_^vMלZ,UcvԥhnV労~22<7ۇ"vzz{ e:9y$ev%eOظ[RI}Xh=f$ߡp&Wly:hkWJ7uoBw&o`s-Zhԭ,MU90h1Je 2&h朩s^붅|h˥~-,Pl!fsFLVYZc%ށ[Otc%^Hf;:%C~7fWZ2ծmKpͰzuq/X{=ϓ; l\bh +YׇV$mѫd}MdW@ͬ}yS*KK僬n#Ff;Ӓ9ïes;{¹`W E5kci6yd*‹qg;{<^.㯄T>ASE?~ݲ|5e_kӕmdg31])$'ǔdޱLq kѣܿS'+?-{aD_t}~⥪//PʧPxyyʢXڗ?;85'zdݷ?^Z$_.!~.!F|E]=FvK }7CGsK],B798@:#9_L*?Fo_98R>/KI>_X]ł¿ ir'yʗ"M-#vptj_G*_Mr!ՎwYX-'~&jW䍄h1_K=dP6s}Kꯙ7(_SuD| !ڧZE:=wW}L,+*Lmчo%RWrn ݤRmo;!oQ~ϸP$sZB&]hJݢ$N*M Qca0wkM:&B}?f)_Ta=)_ENy'KѾoN/eU'x!~<~RBKG|!/w/a#Ä&=Q¿'>{"Gۨ~dST~} 'OL_G{F>?R_'!rШQ"DAB%DؤZKoV<@wI/Sy+!}$4*}|WZ auNv}ޢÄ(B{X-˽ Em-$~b w[F/$DB!~!^B/!(.%_F_XCw!~*ҿՄkHį''ߨ?M|!?CnŽ9 ߟ'PMeޒgx k/UWI?;WO+b" FC奄߯=>Ŋx>#ӤoےY~(/4k*/"DJ,9T?3*K>d&J aLEE|b&Vho- eR y&c}?>k?g6erŕ I]ʋ E(p|LZ?(.'}z>&{/%"E|!!x7\D劘% >_%yLP Bi>@|"S&| !oƓT>O&~?Ţ M?EQu?ͤ*AWR*?#d &EmX(/"o[ɾK,<#?-qED4' %_uב"/&D(~ f,*_B_Fˈ/"T?V;͘X&#*r5& _Cu}د%~&Ң WfEBȾ [HrB߭wPY&:*$!>7_XJM]%|1!ŤV>'~b?`ѯ V'Vy1!7k,5 y|;lp6)b*sx)kkM:ja(Y6Jo1pR!sׇ3վ dn$~"~7ӊ ]&ӢOHnnPyFo=/Ug_D<7\*_EՄb_> /sk?7gMI卄Ffч7Y/is&=\;?Λ>?{oģTOEeeդT~9!GRYF7[Gx-&=C !{*'O4ID턘lv BteLXN~6+!~"_&=_f>>7:A;TB^lч;oTI_d/W.E~ЍW N^c}^Jg}2¿[*^mjҿW)!3_O"`kIG ECpYS7|¿[9C>Iw9Die~I?]ė}ȤU&Ԣw_XF?b=*GME!\H|B/'VIRzBI`ч"+&}V{_чZ_%DfF|"G_7*_E}#F3/&DlC~eG1ǡ>_9N3*/&+~kч_@Ƣp*/U/#L'L'/UohҟU2}g1o*_Kk>͒?/I'@}*GݽO>-Gɤ[~-j_t}~?L4V11?֒?}/_2 ?O7 :ĤKU^L/9MKևK_H/9ݢOOe*_Dg__H<.9W啊U߿E/'}3&Xx؟C~|~ڤVoI+-_BCKߚA({dx<7 "Iz%ߨ|Zi'm%Sr;Tƶ&=] ;$v"Dv\OI!~5!VPx;-oSq\<`QHJnBo6!>3%HG$ͽhF$~a4*_m5*_BM:nG!L/ 'sm>_Eq*_5![O_ISZE]?;~>_G|"KӤUDI7Xazw)]&u|?!t>w[ 3O[ho/q}0>Iϛt~n,3;1I<¤[U-1+e21*"D?:Fc)d0ϓO;޸O Q懰ӕ/Uy䳉/&ӊx>#sMz3h_N/%D^@|bA|5!E(b|^bKUik-ߗ@zIPz„9r^eчWAq3E3鿊By|Jy%>X KHOIYg m&#~1!KԿ%!C,B^"gT>~lч ~"/7IRy!wW>力GL vGca)#~TFчO)_+s~ !1P@<{>(/:39A,B7dzN0~'T^B61~~xQ?%~ 2wmZBBO?4*ߏL_><<7\jʋ8/tMFf/Bm[Fs?ѢA|FҤ_|%!I#Dڤߪ|!7&ޢ%~"o{o=!6Mۜ_ #gU.BϿ~EKnE<_&ݧB?1SS)_NJ}эί+a\AZ:,uzi|I]bҥ*P;5Mw )E}zHTӊl3_Sf j|LYR}_D7_HOR&R[U>oکC}J<G&> ~"=I|"v_Fbc3~>G|rb_NɿBKԐ!j( pWY¹+Ff-;~^Sq,ϞE~ȧVdWݼlNڳmM;uǹ32yw퇚l|tKEg,SfQ*6#m ݲo⁴3Q2drh<r]<+u4=o>wv"<:GI;qOkvL4$\ Zʋb{8Se7h/' 9ٴ=j='_@ *+lvK|Gi*Y=`!jl! 4eqtRvbm{ZS-6Znhn=c|,}cq#!=kj;k^c$!@"(!wyTIJx  'yxt.s`ea-ๅ"M'>@#5ȋ=G0=3}8׍(x>#b +FwaPS?HoT1~i&&% P9 YG')YG-N8qz|4Xuš|`1c+zgfNn_93;ǺKCD* p߉ToǙ87&Yq$VaGq2X- U 9BWcSqdطĹ~|X44 C:q%|Wg|{bel,s7ؖ u?҅5M}aX[BHa pY8uJs$/0y2l&}>X`86vlh :>?sC C#Z'އl'N*`9jɞgqR*DUTo9ݑ5]B&Գs/r0[p#72?OSj)X /WMiFb#bk_EFwNTuu4fGDžMCy;Gvl}] 6b9~w#]h1gUN;ё77HoU[ppM"'?~ssoGC+vx?Uk\=εYŐïđ0+P<*s{𞤬 z᤾f,9U8Y`\q2ǻr\yy5}^3X[=8߳2d'{.ĀqHYe{bcl: ]]pRkϻn>YIYj!l'TINQNp4ꤼNqPw#^dYgP^iNIvENp2޴^dVx:>5HqF!g:#F&s3{{9<͵O g7:deKvH#[=r|R[J ˼TS@~o1hb*}6}wzk[cN~)6;@˱ˍZk [WPn!BҠ[i'{NK Y_#Wr}^@EfT3ޏ~7{>xB'u|aVK콯 `/Qxk,j/G##ޒu=Su( ﭜvKGoX1Ƅ;%hnOCU~iѧss1Uޞjl[1UdcBKL] ,jx3B'\oiV[:fFe0 C-v-?OמEOKRy?djk[p7W]?ZY{,xQ Rz0E^+/BjF橡\썂7v2ks[m;[EΓ!ǻ=| 6w$)A?͕iW(^6"-pĸaK[۴iv={T;\*Eϳ^z[U]%㷙ɔ_=_ sO4y#wrIGڱa/J>vTgugWvW{_W˃l7?H7Tݟ[!钜|# }Qruv5vG5oVr#nϔx="]vr5-gN;Gb[QƢ%zmWęs鮎n#+Ri|G` H#*G2K|ƫ~񦲦"6uܐHWu==^g>{yLnI[O̓Bqy>{dS>)ճ|h;g>,kx]n͘[/:K=/ #Ru]LK(XqQWD2i4n:濶tiܪ v7m$3՗>Q\yym!pRe޳n0U_}<._Sen0u{My|_Lg:rq ~֛2*f-t[;ψl`CZ%h c/BU'SHu~;f7Z2!ڬ:a6"*al[(\KEF9푬tR T:W);ΕkԞ)Y{Fl׾8I<ݿS'+?-E_t}~⥪/d_!^E #=Tο[ r;x{sD* ^oI/d+3\B78e¿1o)I],B79l-ȗ¿91oc&)@|1!KV8lʗ";}e8?K+%-&~5!#Z!e_Xe_ڧn$D,чeoQl"=r"ܳ0mR]R&+u7YC| !g-h9ۥA+ >rV>o Nq=՟|ި (߆}H&ŝd_Ʋ*o"DlчqEw*_Sj=}_KivW ]h}BX_-N|!w F[ߣx-ٗ7TQB1|G?Lv5NGu|y!LyYK/'E ~BIG#%hS/"}#w_F.HJBen!ZqRgL£}n ZBK|b=O|!;K-N7tN[ _7so'MzxsD|M3I'xYN(ֿt8K<>Ҥ-6Kq~ϣLz|E D{(Mz H!YH~1>>'m +b}$J^&B߫LzE]ǤXx迆~^K|>haBo"To%*Bۈ?x &S"i^=Ju o '㧌b-cXBM&|!7Ģ_XNZIp*_g*B2%[x؟NՄR>H̰$.1O5EJU俔q9_hi|^ ǧB =|GxnxνLBe z/WR D%uLT?GL[%[x俜 տNp~WG|![ElŴҷ͘XC| aBf-= @B'>7T!į W*"mį&v*6NB;I7MCnŽL|3Ώ}ķ=$YJl*roud@Ƨ&YOyNJO3rzU^Lx~)&]d]A^0q̢&9ʫQK#%^JBRM'_Q1&=Ť|!懧Yq'Lw¿gG&=WKK|0e GI/S4ǝ/TH ">^N|"߼¤W|)!1UW(Vט:Wkcau(b~y#k?o"^qfު?b-oRFfFo'~ޡ|ֿ =IjB(֑3*_Eߤ,įV\G?hѧ5R~_p ٗSy!=1cTڿc] s׿[(BWa/) qޟK|h?_Qw߾ab/&M("$>E|!m+w_MV@BM9?$~"I?~!'&O ?܉OcU^D7E&Y3*_B2}ė)oLʫQ?чYTjB~X(&jUVoF?eчߠHߟ&aҿTDJjDE.^,x"g>E[hjc= 'SxI'9B>O$~"7S?I&MQbB_ca ei&MWy}؟n)ůpno3uIVxI3 Qy!_4ORV[x5o'D|-'~'?Is/<6'iʚlUy!꿎Y:$pg+4cerʗ¾Y'7ZQė)r3cuAUu1`ɟF*_5!o7_HOҬUTz'դ}F<柤N7wlчRl!n'DчݖyhTU? ?t~0a}ؿN*|1!Ɨca0eךtLU4F\㣌b|?AjEz.aI O:B)Kpnʜ2cC"I!4/Q ?C;GCդT^NH>ҤG[Q?TqE?%Doo챙o>@"B_J%-6}G(Wɏ1W|U>*Bq>jB hчO)k~IY_A(sx~"%KUj(׈#ߴ?=ΏUK3?٥Ɵ<ӄ5}S*3~(caʗ)/ڤߪ|;!71PZed/ ()L{POs]dgG[[v "sOQy)>?˃6@[Th{y GZ?{LMi7b2=yJ>ut=ͻغ>lkZC (V#BrZ H*H6T'r\~NdBdaf,CW:ͷ;XSs|iÖⴣ'68+'tئӜx'uWLws!zNX##މBPqͰ5ka·ʇqaaI;lṗq.x'Pu bKsV'nf[L_t$TpRt8/9և-pmsN ̑/>F'qC\U*|jmlz~E2R>qKH0FV04X8%.WS;#"~/:v.|u&ryl7p_xVHZɾy&HAx)El1iXH癎h|S_X6֝#Wvu‰oUUU@ zt=2O:(+.hJ2dKyUSF&Hx:~xŏpt^S%}<\,Ӿ~Լ**3q>gWEt%\ Ar7b{@g\9֋ˆoﬢFncA%tY8B=ɇ$ [q|&)p>>i;=K 8rڷ*I~>mp'jxBũ^%Nn܅xixVWO^peOnNf 8/L ey-d1d.]W< R$BOH^-}xT D5Y:x$Pݑ%=J#+  *|jӷ:>M*Nd 8=* 5hF-,|_'Bζ'Fϕ8Gs6#>[j$Po&>{^ܬsPZ[yNnۅNt.t=gmBX~yQAyťmyb̬~~Ko.G #Aq(~zw7KLGi=)yмC>6yTcQ]j [6-o՜ Uhu 2G(2BN9yN_ܼw,t](J/!ыjuK=b̅zssLk,Y4va.d`b?3N8xZd(]< `D)҆(ͫ.(o!O$'{?y%^ՠ+Y*KVZqFf hiN,jjOagLqÛqMxd#T%sv9I٣>sxEN\%G~m1"/TЫoE;:?gހ-C͔PyloGzkg_{otcw[ξũ',>5LsO:Hu Gľ:1vMC`K#bpQ]{5YgYof媮ІJf0b2G5Ec~^; 'mb{Q9c^V3q^}\no}6 `Hmo1*rƭtɠZoJґ=ņ \b˕?/\UJ=SePU WƗ{X,i4nunXܷ--#QWcs鮎nTm{U}s<ڜ jfjtMKT݌QgnD_^HWUU$J;OfϜ+/OKKYb̕VZb>jr}/cr8{lW[׾5]UR^֜mMq-˪^vJW#jgfT+ӻ1K3y(X0 ̹Rcto6j[#d1YR0HוKbF`tX5&돰3W)8R"{nΞ2[n/D>A:w?~2eMX6kt*pϞ8IaƚnWuKcJ1E'kK褭')NV~[R<_]|z:EaxfFcʏѲ!ժ&)t/*j¿iWfce¿1o)›J],B79/вαʏq[@,B&~!Ob".-ihwc%* F^>/O|ʏu/xwy4ńjӊT!X//Q1Q>_A2El^¿į&u$_Cŏ}[}Vʷ}~%Ph h8aR!Dm!U+к=}:Tc7v~% m$DU~߸P'wZB_ITwq7C)ܤ+UwE>_i|{ a'Q?DL?<"Dw?G|'q@)_J;_B/#~HJBe!Zq̿gL£}n ZBK|"o gߠE{ITuS>?L͎{+_@Iϴ-ħ1I;J2B#$DDWGh {ʫ N} o7q*%D?c}8_eOdpOSyaBIį&D<٤Xx !Dji5 [Kr/5 ^1D|"B v|!!EėE(K_L/#>H: ~!_I|b 鿚W*"#~b鿁#wo"[߭F|3!ķ /c;GK.t,1~ۤ|"{LEQ?KbB_Wt+Aÿ$D?d*"D~8F=TjB5&}J嵊oyv})(G3&}NQrPW,9ϛE D_Ou7 _濡c?mwU>Poч?[1MgOp?Qy"ַ?@bBI?c/??@H̤_|"I9~NE<#%|>!/V,#27*B׎eXrE?Y֤߫|5!w1{K~o !?_s)߈H߉oT^&K[ ?cJ#xoe繑[ &Na}Ot}F,?[G#k\_~,M? 1"!郟[-xg|s5T>z~C\Bm\+[wfHSbB߉x(&[@rEZ_&%įUl$RoS@£HQ^L'*U>+e\cGWDI*_Lчė).aL:W+caR>Z _5!_߰:;3%6?cs&T^BL"EKl!~!ʷJZNJB ~o"~!.7+*£vB^5?ZL:y&#wU&r<12EWtʫa}ؿOuk_QVyܦ̈́hc1R?Ai)g*7~.q=ń(iE61*"/'D!~)!w *%G|"OYnR:BIYQ7@=gU&=¢'~fEB-X8}emA'~! 7{IUy)!I/&D<%!D?ͤgteG<=lKsL2'{~!>w?KDs >})~dӤi>쿌:E(!_򭄈W-SN"mPYh7?G_|*/!DE?o#v"U^F( ˤ/XQ&>_{ISy%!^>eч_EoU^M?`,A"P{tIؗG,qqKo4us#_ZEh.0 >YDØ}6Ev{72;? Q:f0׺Aj|Aʖhaat7]df>tSf#uCxaj#Y|ZgwxѝЙu#}_0Ҵ99oU\O]5y zx \89|yY{g1̓bv2rD(\~";[1er>:h,w-??N-a 75{w b;+r:I|bę#%YA$ڿg92gb9~ Wϱ8;)AE1ř$QC/O g)uJ/?OKsl(g1N#KYkF1R[GNIy[ GNvN5} Bóں4?+ '`kzaK;WA8O} =i!O<$K^Hev=Ņ_?Ř@y+]~~87N̑TÛ|? w.w):YǭPgM݅]=rJ֊*{:}|zOgwG[oNٹF 4 6گ3Gܰxw _W8N3v f[/llA|l nٚ7 ?cQcqK9wC8y4:[@NPIwOwGP}Q /\yS_Dڽhꆊ WwG-滭6ӯiң.Qh &<}J5˘p(Ɗ҃6~_[)zUdpͽ $G{-%o(TKU?3`ʧPx#-_@<k*<~"[F ^oI'~ls 4+⧤c쭲¿1o)'~l,*ńc"i[F* QKo WM|yhlAnV[ Ѿkca߶U6T7kmh ΃oT4IQ;caɒ&P Q{V\;VٛQWS a'Uv#C Qǔ;}lQmg/"}#w_F.V+ j'_Kzs[eo gUMS}Uc- iEl!x+K $B㇔6' {!}hܾ%D>.OP>n+_D?Nt+秙5'~+_B{Qg&~ !C|Ɖn<BW:ѭ_H BAJ'_M։nRBeot[9&B迒Nt+WLh :nںr/V  wOᾬB盈_D(e{IoUy)!-1/!w.;ca]ėe#҉n,[YP+Zp*$wYWȿ:Bχ_MQQ{ߠmN>-(ǝ`+kև ~km)o;!iw*"sE1 >xп¿揰הgR⍟|ho?_Q;?}Gû*@L|*B/Wį&_H?!~ !gK6E~mgQ?#&BωM(~i>xw~㭪g;KLqCÿ?Oi:VՋѾsYO|"GNu!1'ynWQч[G[`n Ư{_7XڏNvGVճ)>ܭg[վy4]Sy)NuEX쏷WE*"kW+-w+2yW?Gq﫝`+Ba_C|)!Kpl vq+ڈ8͈㎷յ+ Qvݮ9'"c Z?MGa _C(avI!.?zh3/ܭ>+ Q~M4S|"??~ ~CѺߊs"xh+·̻+ C[q^d[q>︠<|xm6r[o][%>Xvw;֋h/R{r"ub^p?[Z1xgxclð !wCN &r4p8͇6$I[ug2̝U/w 79 ;an+\!esb37nU7-Qv{l*l2:[ϡ!U%ŰaWq%& *ˢ_;侄nkXl3,͹{>G_G[bi:ƝwR;IcFT#Zx?+Dz :j-mX4K`ޝo;`=q ;`Y"~|'xvڅE.I 3]z *NRVo:[gS~wP'kܬL(pm3]Ɋsgr/;^6=l [ֿ/>d־~WkNNq[Cnu3.L؃l8` N&l^m X܏[6p6lٮ=m;z3;WUc67Zb⁎SUU||xG\kKqX䏄)vv8ѝ>in{|(o7We[`'/7ne` *ұzml8ۮ^;vzǕfnʊ{b--|b͋Γ(D5b6'ӽj.MLR^^QLi-i9J0s;yYW3]&M=P8.W17Qx5 V 굟tnTS`iȧ Dt,-'zۺ24Tvs)^!݋D@wۓ%_Wd٨dБZ6#m9u^HטQWn3qV ^w>r\֑dD{^x5\Έ=K=;u;o>R5tLJƆc2N{q&x뾆}BV*Bn*eч'Fkn{VxjՇO:\B7]'{_RB7=FP>k,/&sk_|5ES,X !ʷ8FTq-ٗAm w=MYWO|:B_|ܾ}Vv&򾄶}7F',5˜辉k훸x۾RW NRW-}7UΈ-o$~3o!w}v_Kkro9D'{cTGJ7~%Tx95+%D]iNW9ށ&^M<=Bwq_ʷч#ʷۜ 'tvBOy$~!aMߔE"Bї4%?Cm/w&_I(MW;}e-"FBv„ږ72"kKG">M,E$.pxݤ'Zc/Q` !,3Dߓoo5c)SooCUB>?~ #_K9aҳ} Q~g:ta}]\l1<B\϶s E^K(e̔}_`p/qM!9Y&#.Xk?/"XZ ^WP8{ ;ތa_A QWZڇ_E|  NX?8 koo0#̈́N4X N47/[ǼpwPc\}"EܿɽﻉG彎7d}xEǗ}Ay|NyC&¢&\Ǘ"+Fh_=׿{wﻈ>w˾TzBчO)ۛ1C_/|#!ƷPv 9L-ߪ}u}L|!+mN_5*o&_ч_'Er[_IMՊG~{CFx]ҿh\K!>BGN4p?S'pyd|x|C_8 -p>Xtx{yMSyCoC|&!ߡ}Os}~}jɾ>?[1oUVBBܽEZ>w# ?%ПH|Fq)O&~!_XCӈ_3_@į'eoTIo"lⱯ^ҟK|3ow_C-p5=/T{iI%*Ҷ&do)>v4O+e\fч/e뾃n~ƒe3_;]]{Mկuٻ-+O+kp (}L"_G|Pe_C*/'D'X o*&sM}WOrEo):[ѕ&D7zKt'\b*b|m$~!oZ*Hoqܽ#+S?s۸C 1lчTGwG-1RQ1~%X?78w_p!K9@:>T^&>OEcr_m$MÿvKѿN8އ}#чy|È;o]&= ~ݎ+s{ bT!~"_q>t 1K|Jj> Yuh߳į"DotGw|5!}yfK1e_d=HfңU>WoȾYa+"~emnпbǩtxKo%z>x >yIPyZq!MzE?EX?H<ӤgYx?bP,o+) Mz(b$ä{,"+ؤ;U%&}Ģw_B_JITy!WÿW*?[5ė¿Τ7>FA9b-ė¿?>͚Ж4ML4[tJK6Mm M$( .(Ȣ" .+*BΜw7-~>sw޼G|bISy3a UG%}ܢ>F|y;cѧ o*!sZR*)'D?M$E.g$}N̈́??iEOkPd$}MUҏ,5']7T^N- '*盒Ry%![>Պw%}_卄-k$aK|ߟJ'veG%=eч˔SyL'W/RO ?F'^Fғ*o"D<ᣏćSfGb}'G9}x <11(_<^)?Q?_J_OPb/8WEof~fBķ*ķB e^ LQ$6.PW0B*Be\`oBHIǪD?AJ-X1>Jt+ ~K* W)b)}h2_A:J Vy1!;xm'R$`L.wʢb#qTZ9&z7)|PaVE=3OAu*_H>#,|4@/69Aڿ,V:5)k-ȿrj?YTd-nч*i.x[ M 7Ɋ}P, D)iE"Mq?[\&0G?7cB ?/"~"?7/\}/G-e%JBcp_N?JEH:No>G|-!Jfa~-ՓK|IX [j嫝DžXxQ}фh?c%G|6L`g}PV1|FOֿA3|V1B/#c4}I(e7)N%ˉFW?Cq>_ABB_EbE|?eֿtG$^CT,nHN%V;,:˜o0N*$D^}ؿxm^_Aҍ*o$D7߬7KI M}%̿C^z'~2UmNfo D|%.>F|K]ҝ* Dч;-W/\nW:1(bk{KE6A~kkP IUߴф?<=xJ#Ci*7݌_$~ kTy=!%}Ӣ<χG{!!Rh^ȗ^T#/y#N!Pz{%7X 58ȻfUv ̯6.S-,x*ar8TMc4F&e/f_ė|i`:Ws2*ڸnْV?#>/֕ Cn1z֕k;\; q?2hG`UqD^?.#CSH||΋3[r~T ݾ*psv$^~gn/ KͩAǐFZaz|}qp8chCsr %Ϡ[pGM~:mTy#~yg{ sĜ"}f^^Wwfy1*-\8~s_^_h%]{L,m?=/4#W +s^w{ mԫ¼:{|K;wz̶7ϣ;,׼Vz3vr>Zz% a` M4z0hn͛^FSjWNikyJq9 YpXowa_WIAdoPehy]fo-HF*6~=dМ<zF$N*? 7"2>62i[|e~ٟo>PC6ɭ#}+Nyw7J7.#! yơb^7H-*H#JUܥH1{-RQg;}إ{2jtk M?%~ qkH畏LЛu3 ]x[j2mҋ%kQMZhPFz_y/|E_)ܡ#gMn]ZL(/&r`t: e1qHUbCYH 9 ϼt8Amz22=,H~ɺ=yi[SSs(_jz֋Ls^zl_cgg,a{1ȢQ$ߙ<\ls}y0cmZ*kc0N #RzN蚃xjFdôz2//g vz&j.u%?I<^,;wDjcNJ -.FeglTK1Zfj25)my_yHp"4̲>FWtF?[g"OG ݞd8)id'1ccOUÓ:8'cϻKm ѱNeö:~>de֒l~^ |oV=Y((K\9Q޵Osw} =fm=`~nskaZ=~0|)tZ&8oȣ_l#@Ê]f -nӮ')&BW-kYjJf6D_:).=K<sSn#3UD'f̣|keUp[D(=CkW#]'Qc̣[a[>T5laN#0z0  zަSbi.w@~,CUywB1'acذb'H#RLCneSxW߲+zۂi?-{PvKG~w2xއJ}zq.iBa[>㢞V~ø8Vp81t}'۠k|a!m82T:,zNg7G8w2j>>7y|6 -# |6Ë~[M=7|p=|(&l J}aL?]QY]ݥȅD;RekC3,(GRL!Eȣso;}t[+ȎS; e+}{bwO:^ɽ]QѬH%׈ȎR!X4VEOϺY.&L$OZ=ŕJjOt^A?~u=ٽޏGg h7H (kV oYg@/:è&vwdʷ':gDTNM-^̵U-dhӾe-xKa_(lܨ6Vmmr=cuɀy ߘV9t\3V?}mZBs{媎:9D뽋&rMdFQ1Q|(WtRy'֦F f8IqPXW"&2ؑ gƵLۮLxo]z9=d,YAdAbk%;H)2# CxllH2MLĄeK1קC<3 ;ot4]/mng$Qޛ6ڍ>W;b}i9ݻӾZڼvCy#3omltI)T]RzR6maf/%Wk;=_btQ]6MKnW Og2)M]N_25]{1_Lgo+++6d˥rߕmHUخ/&tum*[WٯԆ;xWԏA̞"u?טv8ȑn-[O tKFwOWti@iKlؚGCfCJZ5}OBUrۚ6g"IiE `1ZK_/Sz}56|;,#\Nv[~Tr`_{_qL\#& t&u;z$U&Vgoo0޽ V.NlK#kޟ/CBN|4$5)/www]az~CiEVY[oo0dmUntz!lKYɩXgw@־mwGO n[)Kk3hIuWWO*z{, ,0 vM¦F;uؐQ݁L;\4SZ)QNlOJ&2Td6T׳_q XAM~v!RC={z;3B{WOr? W|W%ڻv$D(:ӛYu/߹'$iĞ^1Wڴ3tOJ : 8""+/|iqO;l1V{Έ= :ͤL.dG-:ezzr&+QKfYamxfҽ[JߗVrל'~=hl<R,j=9.gkvR݌ 6N53ʶiO-- SF@նLC4K AٮolS^{CD@=pۯ^6\e4j$o].Ow{uk7<+}U4o^c~wiɯ7U Iq>9^=GI#SM@x᱊)LNQE;=OPEZ>5d1Z}_G|b7TܬfBoUAϒtal}?Gy7Nq FBa>os/*o%;Oz)RBN'] KJ¢یM=*¾Y;^lч+N |a?A|3oI{-<~ !>K/K8U>G_< 3Jy*K >&~!k%]rBk$}̢%~"OIzʛ Qou2$QKaF}jMަIV}Ms;$Ss a}iy};U^Ew(&wIz{}a}J?$nO#D>d_7f6?dC>41(}ʟd~+?sďWo˖*@|%7W/_C/_K_8J|kķ(b}hKz£~$OWD6}!+lߖ]/%D>. /XEZ쇒Qy"'>?~$'*w ~,)> EL~*g*o D=?#Qq2U>чljHzR QOi8o1m'9Aa1YKT^L{qh?}ET>QU޴#g,o|dcDA>Ӓ?ϐ~!׿Ycq1))s*/U_΢#\kϧ\I Q?5}o.K#$P@xP7u B2o0guod<.p+ ٩90W)b~2d|c(#c~Gdp*'4K; H$Bg,b+Pe_EՄO5udXoaߴ*o 4w~2|"ƶ@[ >o"K LQdBO Zxo%}Fo%֟B4B'k,O'3$Yxo#o%֟ELE=H/ DG"E_)kB/#DV`E-$~!#:ITBoK,RK;ԾaTKb4F=]y384_E@|y FIU>s}x<!,ηYO&D;1IOɧ~чs-pO% l%~!6IIJ[!.͚DCӾ.$r *Iu~(_,%@Zx+>ǩ㜬? Bw,ޟ@pY#//\reXBc7ڿY;H|o~ʊ 1>E[U^foq;,#Jmޮr͒nۉ NQ;-6KC}ׁHzKiK,^q`>IPy!~ѿȢP<"߇wɿ%}T5#ÿ_Kc.p8 d^I ҟDY>gN6E?'/?Oq!w? ߗ_I_U B|W-R<f)Qw QS&ߕ=  AUؿ~jE/I뇒#/L<"*o&D~?&U>J4Bg Wy! I?{̒??NlBIOXx?As}jtKoi]']'{4Uf**D7?΢N|#!?$=&@N?Ң߬i|*!Ya?OSIg%=6B}a9g)Z}!yZ : _D7gQBYK%ʛ5a"/'kHd<38 #Ԣ_He?Ğ+чqidt2cNfFߠKBįxQ?M|`?6`чUW+bh'`}دOӆK|Ưڟ[HEO'KbpN!TI*'DZ5xE AY*o"Df,['S|?GtB]KZ-$6Bo%_L,BLr ?hbtCWY'Vvh\G<'zkqcITHQREmRREɴ3$ BL}?KGF#%D2?Ӈmч۔U0W¿8Պ^p]R:m@NO~3&B>}gp3%4/n8}o%>.x-IQDEWyৈP৉O<.~>K|=!9_/i|[߯HO!4[a+k}ʫ&D|AXa[ZNk?3]IOq7{KK$=!Pң}0񕄨G$XUϏ|aǖy}(fZBKI^Rw?Yaqq>k+IQtB_-g'$Vmϓ>[Kt~k3'X  ɼ7-~17Vy"p_iS?"xo7SBKyra9K?{[(Kq~*\Hy}otiŊPTH)¾7TD|"F_L<.t 5c~Ow·B?0Z?O E_RRy O!YׇNQ*6,toug^0gh @*B5Nf@Pʧ"&UY)S)Pg"R!עR\L'Zpij UXG?.j۴~p'@|"}žd!0բo$Ddju>M}oDT*_3!7MT~7"~oVWCT>Uis?fQ>BT3u⛉ETbgifyⷜFBo͊?٫V|"o%?MO#xOf/!DVTg~*_IE*ޢZ΢דQo&5fQL3i~dxw/(o'_bB]vI* vI}A|!i})>OåWE_ChK|qnI*/Qfm#>%LET^M'$~5_^">>ג? S~/S ֧ƿ$] X rId֗|j+¾+Ļ<⑿p|!J (3_E|!Tk%]zB,Zy}q;O |ay}q/D1{ 5M)*oNot'"_-I|3!VE&tʧ+|6RVp|!ϝ/W<ǻ%ݥU#}}דZדȿ h'xHo4%п7? Iu2WDE?LJOU5h>ID⑿p)h }"2sч_P~޿}jBkF&WoVOBTBAiZ7w QoSCZBoKE:z]>}` +\oG DD|"/~,*#D"g}S'G-t5?W~uBq+ Q__kIOZORl!OZ[Hӕb}G-_#/#DJ[_$DF|"o3~]3NjN+!ч;3x̹c R'>$}x7\rJs|iNj.V}8*i'(>laч#?]},|i}>xW/! I:>OP~£ >JBG;Yh F~תksx5:EoSVe*o%D>Lu:'kvo&ķ*9,sNZi$M*[…[T労~2֫|accEZ> o_F[~,!d?Co#/UsX,|37XߙIg3S>R~g_9Ļhs)#zxgч ߨox Մo)񵊴 K[FEZ߬H k…TRM.6y⿊x[M|LֿaZx^oчkSUxEOK@ߠf-A_ ?JEZϒtQ%gч_H}Z._#!ʿE3g8Yp;(v~:$U@ˢORoxE]S1~vR%]ۣYw'~_I%VW$s,$9.>gf zzXB]/SV.X /\sU~uFJIWTHE"~"tʫ'Zk|8| G…Vy=!?ODy=%h?_JAҍ*/#DGߨ B| !RBVI7GݬA{'1Bw+U_߻$ݮzB_IӢn'Aq*ٿâ?$">V~'N9c 1~|GDyy_ܮrjRy1!ǽďS I>OvH'(b}dƟM>xWC%}IՊX?/_wG…ķ)ؔ˒P\B+>]uK&X ;|ߕ}ߓS>>_~H|"#"ÿYYg%_ ͞c.#CqoV>x&RBwOPD1gWO9N*&DE Q?ߪ8L|!&~"+K o>F2Ec.$D' o~ky/<~G:"?N|yN|_A*';" YվM -0\ڿVBm0SѾ g6B}?6⏣I+K ?㛴*H$iELXMG[p*e~%A盦|Җ#%*oQ1oɊ迒Od ?"*_L;2%t~02A_YD&ZW+'?@@<+)X _n $iʋ F^kDL(b6V"*¾ >o%RG"Ҧ"SU@Nчå7,awj\ bm^d'*NZ-Ң)G|!@r>/$Qq /}5DS >Ē? S~WRZU/P'IT^HOFJ:?6 Q啄HE7_H痑MPy#!Ʒ͒β7)ri;Jl+(rU>g>??.qR|";R "Sy1!)b}nx/GeЗ#}} XvKUK~%x"US&4,#ZxK5%:B]G.tzO^"D^&2*j$F#ˈ/Wt%Bƿs\}1BW_EJҫ-<쿚 }7K;M/#Skv}tH ėoi'bE7IzK,^>{ 劼>IT^Cnч_-.r[ AdE:?"V NIw[ķ)"%v&DGo'~.!%C=?E%}Pb>%~t>at$DCKe^N?S @cď#4ٻ}REw'z+ ѿG|"/f>(oVF?ߦL"B8 K+gį$ MdD"?N"YQ_Hs'$V?EK|"J{(ܟ$=6Bߟ}Ӗߨ~fߕz5sH'"|Y>7".\x*oPRN[~s?YӴσ7.zj_HsѠWj|!IQ>Zq=ُXד~@#ZD|?_lᏧ7Ÿ^ =Y"GhxQˢU^Xߨ!/ }_L|"Eŗx7"%>?ޒ?O.]I_nOT~ E%*OTttV>WSh'"F6YaFE: *J~%:_3\NoSW~Z#ڦE:\=͢mė)\TlW"jчW)\ty*o$&{>#IwEo7PB+\T2%DY꣏YG+i8'6cY 56[a-. * DK<~ ݢJEϘ}5MߙVy3!Yε#oQl#Xi}ec-ɞIڮ!]n>o'RWIqv~ܒ |Hv)}x ܟBЫ/SA/0@xBF_Yxo~w /U 8z)eď'DyWrIZ+/Sm֖*7|WoV\H_#j/"DGR딿L2Oq=B%ݧ!WAMW">o&&IoSy-7c[%kGF|,*o"D.n>쿃fB[UBnķ*N%6o! }G{U>K-ROgџO'}}R>~7G_Dhx3wciܿ?a韬2&AM,%#TοE_E} ŭNf/|!>Y˕<5I* KGч(J M*?+w}s~㄰S}TW)op3U~!?+j n$OH7>[TJ'Aч?)WeK7PfB>C7[ҳ*H?>C:~\~A_'4>/!(L|"}Rt+ u|*_]TD|-Ƨh|vgXEDqNPEO%Z5F7ͻtQtT^ITmчR)ɒW"ο^h').$_E<D)/&D_EX+~rI| !чS^ymd5*IߠA 7_ 6[x俙 >/xMkߢ bo&C]otR7wpq1/.?| !ʷ3{/P\GI}4:A"̷ɗ~ʼn~b'ag|n~_>tHE.ZӗA~2wkyVGplxi@_Z=>tHE~!Bl !.?^pPAߺ{Q{$y|˨[G]]w𦍣fC%ّZߊGYB\K>f0#wك3I?9Pρ:j;O?L>~ pDO&޿'q{fs~wi@ =:'9.'|]==^Y7y.LkƽW!+bTlIW\_.L[0Ǜcz{Dקcv74s#څ(Zyqܷ(#jl{q+JXbwKRwwb# R(Fv':;|cxL-!u8X{iN%PW{GNM6/SzYȀcR%Ν7K"t403}i1#GeCCg? eyTLƷ:ݽ[vV;z\)Y";%RY^IIe뮮DOV3$x3m'9n$pT'֮n䭝g(bRyVs3;`u,Gr{h1x/Zl-맽nE'V-hT܀ܾkw$ڻpS}t,( $Ug};Fz;9 ̗x7vm_?6E; w[{kqbwc.Rs c}=b]w;ڻqw/C_B_ޝ]3rkLeӠkVOPr*ؘ34DǛcMlI@Df"j)6-ȡ}[ JoڑG,1.mz^H\쭜EG Z;֪Yn:FTn~_jVo|*e]DE%:vJE#/RE rI"3cy.ue6<`,*|0&h,2=!DI 'Buڪbl<[5l'ERaZV b{Pz> H5.ɼ~I:K zKa\6'(*l͏N$<˖%5M4Ϡ]'kWD:9%;U^ Q dlZZz0- |ł']k/H?WIV>Y*/_C>~,ˉy53MJarYJ\f<)+^9 LR= LHɎ9q20!7_S{>dgY;8,4lZZXbt2i˨s;˽\Jo Ѝj*Ǭ8ZNٽz\]poR=#S}=t:թwPD>sLPfH&I%R`~ W*>NgzXO=>5;Q`L?a[mQKs2lj`~ֿ[muZ2ئö:E-SmubjJ6Ls9NgNJ6L窕mdôڮV{ڞ jZ2X#2KclrNmXc?g\?N7I(N˲ ɰSU}nV_(]oy=C^.Q Kt6+ʧ).&]5}@/X3rۏQ/hݲ jZѲ͟綃kW8ZCXCeFbZ\yj4'n*Vp_Yu02~ۆA]r1Yy%Ev?:ny;Fܞ=q~%]`=gHq}5oq5)yf ^iFnp+\FXFUvR=l'WNɎ@Zq2rkAO<<̳h%GH t7sy"}-q2aأ{=z YmoؤkzuF%z r~P3^2H?/ҿ/;_'e4gZ ~'`g_{D`!=,Y;w?$psw? p~;}:kRF'{ڔl&38SOXOv35Njɾ=lVSKopo.%Ԓqy}Q񎓙Uyo2Nrl{3 ,mz?d' .*~aQSdK9';;k+Qj6\!ƣ'3:'dIFؤ"'9kp4D~5=d=(2R?(&'yKUH8E,C9 iFP >;>)*myy7 "$]˺Rz 5awO!eWBy_IFՄ/xwdʏ?o0f/U!_Zk#^/Z6JeO]t'-G@_9eۈjcu}Y&IP`^UۮL6d!޺ݶzqLi+KmV4$/ZQ)]^$dI ƆT,m/PAL,I_/6Ŷw/gcrOuy.gy *~[=vIpW|P_ζuf^'"|SQGqΝu27z{DzMb!)~A4F UW7ympԻMtY姙ɖNnu7ƺ&Qmݮ~/D1X_69d'03/D_25]{1_a#++N/6drXK[qeߕQ4T5ũfkWK]t)LiM~Th^P7ei7Mkr^ԉZl0LpKkKXg֖r5v?ڰҪ}:!WfW?Z7tǬ2S}}z*>oSr#cLo/<2\ r_̝RKK3D̋5Y_Q<$Wgz|s񪪬;.ʨH?KƕzwɯDj6utq~z:6W{fA7 ֥wK &ktt_槓 uu)+>36Śy nV>OK2Lg g߳M vLkk<\AupSh+:BjQ##L)et'٭'fFjۺ5]f9T~ff> [%wmk3|9ަ O7Y~h(eB&홹u[Γ--k9 RFn;جd;D]6'[~9ͺ>߲ҳe^:9>0QxʨnP3+k_0Lik ٕ yBѢ`w͡>_;^Chd%:Su٫ (khscaM?<[7ə9QGΕΖ|mܳ\ XmynƵFN?~K^wG7)Ң_j/~ӷTC6|{ɬǥ&mL,vR_yN^g~KPylj)s`ژ:t7ʚP{.23'ynlӾ7y:9]{20kw({s/ۯ{X5nm_%&'վx!>lSTYYZj͓A3BY4tng p'4?_`χAwUiM//Q1}`Powdd޸b4`VPnQ-vX|g uL[/u!ɃFc$&lP6g =SL {gٮ= z(Lg*sH9;IK>Tb| )0v%fz'x {u;Y_e#͗*,zJM˧p_GѺWu'3<=]LKL~i $q>e:^od8F0P8KI"u}؏վyC%07 I?i!ɇ,(j6jՇ*t?3Jo;RB7 IdF+rpN!G?^qQ-x Ǔ~9!/U>oto"Kxz_|n D1}_|D3XF_Nw_~B}7IyScQ?ƿ&'¿f+៹icUy}7J:)3G?Iq 7?򩄰?Gg?]q!7?pE?G+_3XCKZZB_KWl"+ԌOчķ* f,]6B?G?Kq>_/i}ߨg:' ,}?oO8gh<_J ioq{_fчq'*an}߭!=Ya7񕊓~:%]FB}ؿfBcߌfcC-hqQZ ?SRͯ|!8;xá'*o֊c}RBW? IVy9!ϫ$}Ԣ_MDEtʛ QUķ*.&3ש| !_)oI8' >#Ms%ݤ򹄰}ؿI4}[T^Eч[QM%v!|avIUy5!U N%aO#D>o8d\a'{ !D?('s$;*_Jm}} o'%5U^JE?LDBOH]BIEL|"_"Q'7*N&ʧ/}a1)"gOXc>NV ƟQv' ďSD1i'?E?-k)~"~'Xaɟ~!׿䣙Gk\ b}gIuӿɢK|" >' ?'D 3H!k3=H%~"֯f[-#DeXbч _A,CJm_biJB_a_$~/~W+od%L#EA&O"D()nчoTl!%VB?1oiՇ3LwsT>s>cɟ lWT@O#D*im?[-?N?kxzAM2B /WwIcҏ¿nǩKɿ_]_Ҁ_A*_Biw1 %W¿9].*#D|Zaʻd:DHߧ%}V53~hч%$}C_U^G +6/J/$B[g/ߤWLJtBkķ)|uIZx ! ~B!¿oTqߑ= D>>O%DVv> .!ScN~.QI?O3*"4ωV?ѿ~)}%Z̈́߯|aķ*!'FT>I$ÿߓLBY&DOK_H!_-G_.>Z'?<]y},U_$T$BEآH3(A7Rv1}ot|"ڧ I|*5xd>G8J6B`> ~" KDBį#'}9آrNt>o!ZGVIST^GMч)p"~3U;YO$D9 \gp3U^I|3(cBp Q? %m#E7(.}9TM}_J|d "?PNW B4I,<[Em(jK::I-<דlB c!?>YLTdpϹW~# cmU卄hÿʛ>_dph:T^Aoч7H.]B71'3NI].T^ϔ/_x g"I ߠ?ߧz#2 QKwӾ.tʫ ^.}9hWHB(+}a ⑰3忒B5O&D^%j &)OSA]GLB:g+!^/z 'ho\3BNx u>K?:Kh웶y8}W%Okv2qݒпKj {Թx }|sWn[UޚOC|1!lj/Qt7{{'|9ї~$(}WBB3ģ 9'B7)N&/?_"~ 2m WG@TO'o!#{c2{~2BKEIitEߦGT##y-'sITy8/_|`q+ைO<.[~~C|=!㉇ZSߩN5y?J})iXa+i>ᅤ CU_=7_Z>seߎbB|VK5o?w2gs@N}<񕄨?󌄀ʫ5>!G_ݜi}it a?bG%TC2GQy"FJ:Ţߨ$ceF6P:NՇ㉟AO4Jmω>?ʒ?}`3 w\RE9$C}؟@|"/" URW ߏq/' BoJˉjKp2~r|-U^Vd-zE7uZ/d)¾] t>j%x/\*'D|(?SdO?PϡW(bj'Ty O!'4ۢg_@gY%å=Bsw,(Q(blHO!DKZmчKF_*ig"$jч#-&+,-!D\i)ݟlt~NW~֏A̟~g *6; gs-3񍄈Ry!s>eɿs|̈́y͡m#k'YߟK|"oW1 xOP~vE|3I[O]\\Oo$DzoVJSTEEcB4OL<'\R/!D_i|%!ƗX>OS\K[גo!b⛉sfPL<_߽t0_y IWX$ѢW?^Vҵ*$D^#>_K|!NU^MG_oɟ,g_ "*/UM[_^,)ė+ }Sw*H^dEDB?_ %ݩZB[)ݒR$B];åH/n_??QIGߣo=|FBw͊<|JgU>UO?]L<.UsBKy~/|%!/HߢHi<|ɢ:B/L<7 uC:,7U8sl#/C oKcX?U>.G…U>}i _N0,'c&D>տN~F| !9utBSy#!KIOYc7)Nv2qIVB_Iz¢&~"Ƣ_OmhOZϧ(~3 QW~֏AoS?&4@_/Eԟ_oTSF|5(pq*GfL+U (߿wyfǟUy5!ڇ9΢%Fkȿ:BʯypHP󧰌kሤ}Zz_dѧo PiZӨ|_A@|"ODI'%iED|b?٢OKg[-!!8W{w/5ʯq?aiKF*',cY >7?Q)eUU_p('BD⑿q u| OV~J| !w񥄈ym*/#D۔_~7B7RB'sEx|}@A[B|-%JkTx 1|^iч+oPJOO%4B47h78G[ltRG;o?/M*7HoϖPy1!9ďSs-*/#Dч[߬n&i'(b}rpz-xW_*V[ VqĻ#{T>E|"/4-%D|;}Ļ~%~R m_g(94O%(^I/>+ B/TŒ^:B}2<\sh_*ʷ:?C|OWUs/Q_1Ï}GO׆Ko!T46Bc*:KIc|>_|!+IOYa7*#o$=򩄈>%޿=e)?E-NWw(M,w9}F啄?E?bчgRߜG卄-}M\ZKM%idHPs D>͉o Si8_)RcߪA?#KڮbB ďS'J:Ie7y[IOPДdIcT"}a%x";AGqWԍx IZe<"k9ڦf"RHL奊Ŵ "-}#\%H+2EE,_M|P_*Bߴz _MhK_4X7Y|ƿI/#SG4voӉ/#DZ>bloWNv˞32G奊\%cчs/WyDƢ|'iE_H> 9K孄hHgYG|!/YG6YRg'PlB>h֏_Ej( JZS 1~G- åg%!fˉY9?:TnQ <;ouw8YH\. ]/%ǀq.%o| !w̫ߣN@cq7cs?X?~qcU^I*E_FBo?͊HbB/"4.#~r¿\W^HUݫ%}LńďSk$]rWIzE廚 E:Vҵ*'qYaZy΢ȿVB?E"7HzQ7#7ZGsKLBؿIZ|.rw|"!kwiG U>E>ZE:J|"E%(jmOVD4vE>ńhwD"tW">>Պ{-I}B@ч,r(c-/TB'{cI?Uy"E~"O})et>yTU^IL,s|. I/%ʢߤEWTBϿ&~"=)w*K[};KxK1'm]w9H'*}.ߜS(?|ay.Py"gL5M߳Sy3!ڗ9=hGߢF 767\(ɚFU#=zEW**jHjEGHK5vR??Ǿ_G|B/FT}a%VIST~!Oч)_ًEgGgzhy!|I/ܾ?k1>A2*}-!蛶*Bg5VHZZ@J[ģZ?#{j7|nj Όf[u~ޢkoU,4\ڿih?AH!Yy*o#DgH:K3 Q3%cчg?Kq>?ۢ?!}k)goF"Bo>8ń?Y}N.K_HwQo*w ?dgчW(nu2㧌g>o#D>ߧ|}s{@터G(?A_*?/ч+Wyg}s>jCчW+Oy;ՒQy_(_y%Ag>(op#|!Gߢ_fIPv}(op-UoчەHz]>^/SL|?$no&ʿ\y=UFBч{=ߧ/ ; #/U﷢_Z啄_H|"Gf~񵄈|w?pRW8Y_~UU>A~-׉w)o_ZaW)SoIq(?Iq!m⫈GEE/&D|*aT%h?TL&珉D[7g?dBg_zڏ\~ʋ 'IISKJE E?{} ~ڌO'DчXG._q7"1}Q"чEE!/!TEA}otl#FF|&!чʿFyE#_tU?(iGHPGI1ԾZqR /Җ,Hh96dgGke4MɁzWg_~yHWxyarή.'z5}= }3㝻vKb_չ=ў8͡(va<*ͺsaZ37[׹7cz{D1;ۛw/#^@NxC#jl{q+au%|H,ǿb;l4KkܛzE90UxCx7{`O<@Wu0rlcqTJc\9;>_G׮njOt^ qf4wcfrblu=ٽ]$!Ome![-Jw@wGa ɷû;U1bH`W?p+ uŻP> OnN4f\-Z\nEX_==Ine$]y݃Fu%yrr`z}#qL;ʽ1 q3k|` H `D9) g~&sQ޾E w6s՟_89} 'G7̯^";eyF;ѳ7Tu`W $<%4 Y~GKۜɬJ8atƴ<]}@]97dѾ=]:"[镡,;r oڰyB-3}ڇK{%'z=[|ѓ̷丑1]n@*[r撷vØq0[:urh{!/xw)X{ Mkdm_~Y먨gOogozrO:z][;r ԉ^s㌝_FWl#{z; OJ+lMM mϔBa;H Q~{Y:ǵhO\_;:d:P0Z-9r8/G2Àrbn,BfYKfֽ[Oݭ;1[z1~A#wXPNﴊz}w[#/uqo`{R'w}_R!'s&D¿fv7t[at!lռM Gq8۶Bb޳noo9nNWVptmp̷fb#䂾 \Lnf[ _hjٳou|ofLsvg|d>=ٱN|;TxTEv/zi K33si}Oܷ#49x$Vto{bނF͛pߨؚlpCXΝrז$oHs7ƻ:;]1*i_]5V I ;wN$vftW\4\߷%/-O\s3nuEng[ r}n}nw4gu`VXx5f|OoOBl47^%=Oynq_ksV t&n|Ύxw*,lqkw{4-ٳS~e&cU;;ۻN7~̬ٝc }O"zz%}RI==xE]}=i/iJ+s%̎c aNww>n;㎞x_{[nuQdI?Afٙsly,y-ݽb:VBr} Ռˤۖt)17Us@ vKLwrh.|$^ w 鯅#9SkzO'Wt_pgLgA8j=6&Ai'="ן7bv'v7TKi~jc2n\ڥ;ŠtybҦ[ɘtȥʉ,_y ɠcʜ2۟c?N@W'}f]8ϧRօATd_c^4"Y`>*$;3RW+M}n3fZK5Asd1yYN tB8Xi'90g' jIlVՊb\7ժRNTrZˡꖡdN5RcRC7J8B=695L5?gٲhTra}+yVj"TmJb %;,%<`3[Hy/y`5 ӗrTQ$+ ,~a!yk<&% ݨ3> *s)c׮ƃgnKߔ/7Ϳo|'-τ\i գM=\>\T9=6D-޴22{->mIP1ӿˇmuZjtǁ)0Y9Nfd7Ϲ>kܘ7 3,#i$cmZǂ2rؖ>>}cbVyVmNxƃϥG7g{rufSU2yb#gX3W eƜtjT"L'5(dCU-W*>Ng"8O[=MvR#~ߓmuZ2X)ö:U-a[ 6{ڰNWKa[9ې)0WK=qJô@-uAJ6LkF'{{&%Mje6dôzZ2X3:#d6x#TZ/Lךt^[Eqcݖ)S,9:PAnukmةN.d>SNjFU<}嬷)y5o\^z=~/c6vWt@~.Rz0k;%F5yCC]d6۟^z0,'6gˣheI|R[D(gYxp}ְ޳t{ ysyNbܔlV%ؒJôU-u8 )0P+yQ#-q2KaX^26x)l=hdu1JrlXVH[,<+-޼<:|Br|}7ωy'0:NI5zZvD:2{>~j+{6O6ւ񾌰r)Vk +G0r- y(J-qu^}oMǬsnRŝ)ًlة \Ivڥ5keîlV;N3% ՒA^6\Jôڥ iXW* dF?{H_Eu̲aX-eQluږ MfWTYX컚UzR-Jܯ k7' IEwp|DdZjRO6#Hy`nu};yC]Mouq;h|7˺C%ꍯ>r'Թ^\ G/w&zzaOïpRS+/^ j5N}WdôzZ28N?ӿ:"KԶd êmMBi5-o~x7?td,% -آW]7'Xqp5RvR:VCoX5?[31nI>FV4'~)/U)U&rLC!>#q$E;?3Q~';wɌ.E-yFhFzUϱR VHU Gϫpe.H@ﰚDxX<& .Y].Dg!m!3Trɔta4̺Z7Z?VyֺT}oGhjxj,뻾=[vIgў~bn˶7s\Ld@yn!/кUn?Ի=pmZBP\5'*34UuѢӣ&rMdFT1L0ezNѭA>rM9^,@+rsÑζ}zF::mWVŦxo]z9΋6+hI7XHxTn VobllHR 6 ;(31ק<33?_֥KBM"]zmͷSwMgK4Xu{vCy#bjR,+M iRɳn;mr'ljZdv(ci3ld: yvyl{iw1<@WV])}U.m5doK[q$+3ش ~\~]]f#/u͓Z_] ^YgR[Bz_yRO2{Ԩ>Y'r&Y|s(52Gzh4%~:M'ק] jzN֒;Ln=?ænkD椕0Xc0fK_/Sz}56|վe81]f,w4/J.8Wkot3ϲ!>''X%ϙU > VgJ/n],"(&vS_N`Y$Fj7,詰uaUen.A应 }}LՂ?.ϛ 3Ţy"YJ*nq }ݥF޺YQ!*̳HJ͝u[[ev7߸#-Thj_Xw>ӯjHb}i}3˳G@ L-hd@[_?z37!/Ly4.\.c$M+1lhfᔊ|n2y:Rҝ}Э ѶN,= :פO.dלݴ:e:-wӐi{[.hOwlM= 67m4|eМxt&pטbY8s;c܆DGA {>'>̓z1G5!?1߹vj@I2 ^?hāA Akl#usc;K?0=c.ɩ_vr=0@WajV>Syu8yj_q+6;6 t_ݳɺ{a.4#iHdWo\>e߷{h֭ݸ RN֭^NջʴDy]d28ΧD}$5wgp/x$KYͿSiœTDܗU4|D[a?JeAWx1W>;VX:߉ė¿QOP$N"Ud}7Z~s WL8B7jY[x? a'}pG\Uh<w _I=ҫ+/S1uQ:BGkoPE7I 5$KfLC[hDė~*SM 6M[Y?&XSyÿyW*QΗP}_H$ũde*FK}aEfI=[a4}_ ֐֫zȾy4N@gdog;*y!*?R7N#5@|anoTJʛXE:/%D =*/'D3?|E!~"o:Uy{$]bч^+'Q\$O卄_Go&4XW> }BR>K(~eOQK]#D#W8;xá'Vެ*rRB?IשZIXuOTuWy3!z}ؿVydFǝ'7?N7@*fO"7)!HUs a>ky}wчw_8WU>W O#DG?d_7I~t}hcQO)?#~!̵_-NH|%7KW!W%+N"Dhx:-SAI߰oTBMgoC%&~'~#{*_J]}=}3@x@Y>,G*/SoG$ѢDDB?Sh?{> ELs7~?'Qq2LүT>ч_?MOHy>??o?d' ?lB8EӾ򉊮Mҿ,|Qy!OaKU_q̛2/Q:߫8_09}<_<(Py=֏@E_$?FdBėc ͻ_)* /ctsbP&yǫؗvI|"槢TSy-#~Odp1*'47`DHlado$DF[>x*o&4eJJ,<에dBXTy3(b~2{"h.NrmBoi}WI|-!#m.Я&}~x5SC|",<7~#!O"<4 m&m!he`yw>b?KBoh1ɔo6U(k4C֊*D#{Z>O|b _ i[ a}_DdBbIKU>GZU>03p*ѾWJ:i?ėW[g:kg}S%X2Bė+b2?CҙI1Bw?yO [KjVү ۔/Dߏv?ʼn  on;y"!F_ݒ.:)&Dч9C.k}KMKhTX7%涍o6/# y1!Ƨ%Rho~tEx+$Z.!WIƢ&_)*Qч,KN㋱ti;N&_oчGFIoRy!F_kч7)}7o!&]E^U*!o1>ZB?o }[Wl t[I!ƷwYgۈoRO'DM|"ߌtGwB^).$>@bBA*[|H*_Aa} c>O%DQ薐 W|_S>:BOKEzEo&~y7|ч߬JSQiߗ%}# BKǿPy^!Qo_H'~+)>񍄨Kʛ);HzҢ?$Yg{XҏT>?"7}g?S~~?%~"3s~AŅN}Rc?F>g⿘OX?Es !{y?_F=M|"i7UUҿ-oW)%S嵄?|ay|7?{ A'*:}`٬"#,MՊ$~5~>G,'G*_r㉟H @4e,Vy!w>ߢ8;o) )?2] D.~!7ђ?"DR* *ҟM_m?Z.>zKdM*QG*BO 5XZ%MQy#!ڧi}7EyÕ*N}ʜd ?Gg(_AMgs؍JjB7GWN˔/by Kv2A=KpGT^sC4mBgk=^^i3c Kۤ<ΝC_c-p: '| Uߌ _Ծ쿙񊘿|m**/ E: #Ⴗs3ۉOX@#*t2{X?$Zyr⑿p|!G%Dra334yKIT'=8>?iŊa7ė+ ao_OV '|)'b{+~5?%=mч"V٢OK7뿿(ߦ7 '5X?>#N؂%A>7Sۨ|*I>+y>Ys}:6\ڿ%-[7\:~K ~B!gj̤ HA|"B#%򩊘\!~L%xO(%7χH5~ixE[O,A?L_MB|"}1'Q>YS&Z Bf)ч2KMO9+hdU:*2d5Q'k~NRy"z~/& ZIF[4?x4~Vz3 u z4~4?Kqٟb_@Sɿ?Ӕ)L'&B#Dş >K|Ej?" ͷПO Q/%}6_FReⷜRUO< 2Nu*/&D'~KA&' (>D|{3U^IgZ"s!4%o ' VI*/QC$uY_;eXnCՄ ,BK嵄N}eɟdž)?]at'(b*\, ~:ǔO^+¾+\?"Oė ]I}/R9Y_Ab+i2mR"I¢/%A7I\Mh?/ч- *_3!W)Xg*kSlU>,k%%Z@Z}?냿^ Co'Ӿ7(TKFIoQyMĻio&x/\G*%DIeZeN~n&>L]-N܌>oQ~g_Mn'V߯!=*ot2!"w߬8nk…]ʯv|'>$}H嵄X~P}!-5?Z~<~ B^+kɿOHOu('%}ڢ#^qE0\ڿFB3ʯtO}JBW+r|IҗU@/>2[W,-gq(%5CTo'~!.N;Z_ߓC{_>4>y//\rec MfX/t|7I2B֨'{kIO|"~ÿ'_^dϏ*/WwĻ{⑿9_~^1>Au:'{|h_&fXxү"DտN¿gSD6ߜ?+o>7AOu2ǣotFotڏyNn8rEj?"aKG…PO8&-&'k~ % $>8=S?aÆS Bmc}qoV *B$EZ_Zi|5\ҿTAxkelQs ~g<'n*JyCt:koɔ/YwxKi x~E7?Q7 |ʫ1~I|"O"~"_*'{kh?_BRBOoSy!V}MV;/!qK NIU^FvÿoS _1B*Eԯ[R 1~}K|TE*'ȿiOZv'tI Ə>bjI_C+%ݬbB+UTy!j}w;4WKF>2kJzE!Uw׫Z'>|Xߚxx/\*A^O|"'M F%D|oG7>7[[Z}ŕ;MntKQwJˢ?^ׇ"mW*vIwGiǟ4>2&b.y!a7Q~we⟌lj/%D%~"~q"7Ik2}7|"Uq6BYH/!4;|e*o_% W}O*B_"W|ޭ _"_#~".*w [Qo_7%=zBߒ>?D|"?mwȿVB?Eˬ a~裏įS$(ߩj)$B ߟKz̢AXMiѯ&}Sy"ϏߠkS_IzB-Z?OVD577*_L$KOVS*_EN,)W+''?>H|_lFo?(oǟ ?Nń￉g4DVs*E?dч_#ϧ 7"}վɟ .$B [/Ը[9F]'"#%bчc)c%IqF[axqIT>9GGYr)~.廜"VLPy"ݿPբ/SWꈫJB_Z!rE"\%Qy\ግ3,!ZYD6Xx@Մƾ- K|?KPבsG^o?O|!{KڡREIWXi}KڥB;%uZa񵊴pW'+YD %mR>C|,_=ҫلh=>K\B>I?@q_*?}%~t>at$Dr Ke },!ʛ:*#W;_k$]o:MnT2/\~9?ߤ b} 1vެA|"֏fopD竼W)bbƏ[o$DE|4ҿп6nެCGK{-<^_A>Wbf=W^'{}!I0|.r%G$}} E:|LU^OIljoP^> Z >>IE:|ZgUF>%~t>gt$/*O E,O$D|,]Ej]OT^HsߠHs%}K-Z?|. '+MEQbB_HsoKW"ߑ}>.דYדɿ h? x?B/?7?~ IU^LqyLT^XA_"UU>Xa7*9}FS 3|?3?b/vѠK|.TlWF7͗)\T"Wj~Ut>5\7)8>C|"oX>՟M%9z<|.:J*K'z>??_./q8i 2O Dɚ:~._lE'/чi4\A啊81u_I|bg̈́h_Y -md֢O+åk^˜'*D[T#DIY-B|"7GX!~G3:Ky;CO| !\Ы?_TnKSwO1cRI,<_F.!_??F8Bh?拮Qy)!ڏqE!L㷙;JZFBu>ޒ#|Mf/]ď#D!~"Ε $}t Un]嵄F.2>ⷝ:EdWy!ʷC~>ljo&;%Vy !].n[hEOK7BgRqvKPy!tg|,"g). #}[]H~j?/&4i/d2jKaP&JK|*IW%DJ}w5[ZIת|!>_+eF?izI77(%ot#MʿJygKE;|a_d6IwYQEI|#!/ }q_Uъ<>}BO$T~K)*$UX_">!𲗉~Ox3_9Yo@*HoPҟ-Ļ|>?ZaW)ؔ'~zEOO{*⑿pTń__E ~!7)*oΎ~+w'|Oy_A:?Uj"#~".*w X?P?HQчߠ/_Iϫ|:!>?o) owU]?Yađe'v'ΎM+DDılg@ii Z(ZZ(-t/A[(-IϕW>[V$|>7_|9so)j Gh kPAʋ 5r^PjGOU\l̡cTP[PcM-ea}Ml!㥜y?CWf /B|PA1劘?M߉͂iO#*BGCkuP~ojǺ~xB7ǟM+|7}mqpw;9F>6w#odM3֯\mײ[WoTQnHoT?km7mնl=T1urԸh-6mܺ-adq)Xe(XeqUNV0W;ɝ:qAdԋ)5pկCuL!z$3Fmڲa鶳<`8dBdj0X+xWS!]sNtSga_Qa}6CSYmٲ \vOr+{-8#a@X_~?t䑟nZGsvFlw:ͪKaw+F89ZGyԾAY$\xE͝YjX28yYۺe߸u2p:5 yn+ʇje ECN-s> n^־fv\b)sǻS?ys0qI1ݙu9ܼtvZŵS/#xWדyU!'^)\M|ڛ:9G.k3)#q f{.ӌ,v5Z|Z84Ffs]]>c踚\жiÆ'bQ!.ew}!V!|ۙ:4[w>.}|06w87==dÈj%x݂]?N,Fܺ;#r =^~*oǝ*>p>s_vh|94Kv 5p{uX;tڻ u']~ty]=.CMp@W+t4 lG;½ўpHhOo@5.]=PxA@8u+嚭fnް[3+E}} //ۺBrHG_L[:0͛1h`?s43kh/ڙ7(/rUس)EvGŌ [Ɇ V+͍ e,I<;'w_4s^5쎶[w-w:Ag|W㸐>{LQ/`Uv~0u2^+mY(A dg$ΐ3Y]I҆]eڇF* j|h*aDiӬWz5e538H$㶓WQ/s==sdH9.H+mUm צ AEBN|bdZ.zИ䪙>!w]}~X&:%D63=Ys~_`oNPi }bɞ+ԑVg-Wz)[yс9ױTn`ۚe\VΉJ̍4&6"rϴd3dmO/9iI~t@r!3ԨJ<.19 2>SS=C 2OA m2=M";M;+|-˕~pLnsgOe]];`UJ@$y]GnxH[b/@b(8t̸*_9Kv˻*26lvJCQ`?9 PiY{3XEύy^c]1] H͐ݕRUFj.9aOl0:9pvgJ$.SxAN>|}D[: "-+=SHe׾hO.>DzsK4ށ]}CWs;z"؝ hrvUgll`v3E޻+;kvf:Yz4d7[>wB]s@ž֢#882__&m;ď,6G'>;6m-}ɏck7?N\:Wczc=2:a\'[s}nVSKQ΋˲ZV NZu}1O.I4~v52iH6J~B'mrJL5JUmUR2.-!s\\MXMu'N-VDB'OTr}qوtdҊc/$n)}^!_7}KvDǎY8$#}T2pvfJId{cfRf<ɦ>O*hBB뎁_q~|3硄<9ִXճNJh%A0͉'~ӲZԡU8ɡ5k<4X=v|Plt li2iٜN-%m8x@ZӒyGL)w\כoH8r邻ś'>8y^\o<:ϐϷWl X"eʖ{6~zͱcg)T1Q^+er\x&J܍hi+, M\M&os= y@Ou@Ohv :0'=ͫ'uw,A㿏͠lWeڽډp78_eiFtzƸ,KSK'IFeeFo;NreΪm+)?ԍC5oc)ޫ>(y_L+r'cq888czjzl _XHAY)Dq#ɟ@ڒ=5bjEAStGM5&r9ǎGjkFl>Eqܖ 96Eyv٦ 'o`O}G(|7/F>lBmNL`ama2p~4_)YP -+Sh`ӏ21EA4S%_mA:QI@Wj\oSN?/d b"` ЏTAoظ57LJMԛAD/K!\8DLď,+ %EOdF[,{_ZΙ]BCV  tIt⿯a=CU|cf(wT&~}Ty@ UYeQ~#+f,H*+@SU68tNeV6Zbod%l&u*T7'+e;8Hrh!Mڀ#kLf~|̌!GBNԘj# W$1&4zdHMxWC/ljm׳|AḀث+E& ˩鴖dyMEL/5V%\&UB5qLjCj+x΃HƆ'?~x2t251NF뚴~cMa`ld7}(%`bd Įt6uwM^{\0R\iGmGܢ6U5;ajwحIFtf{@/_8p(lx& weV{wo"h|[Ds]}zVߔh֒!!k[w?H,4֛EP]+5Yhf/`dH]050SfkW4J c/eD&َ˽ռI.p2/>sI+^hyȋط=-ʧFM[/N<Iku&2mȤJhYŒk3([1ʏ)ȱ lsU|<\hc*iO<; >}!Ŋնݫ]XU|P~9¿OS,#%<}7Nyxs>7IoS)mbQ/!:gUSN$B ~bůTa>W>/S>O38 UPyʫ 1>Y,M_LPDjN/%晦F _[5_XI_=a6ɾ&|&y?_@c+KT^O=aIۤTy!ЇW)֒5R:WaCߠ8c67z; ~|_ 웵s| z64~ENj^,R4xN>x}H rZ wz}W(rb|CpRΌ?9OoV~|&'~!O?EY?)3A _M啄_?ևYgϿOhX x:f3#xEE\0|||E)?^\/!ǗC|PWy)!xCY*E[xp3T^Fh +b}*~ǐ?K>x|穼/y;Y9:N<%B\KyHCN&@eM? uMOVm>F|)!2'y>->- BGrWf_FO9N'`B7?U97!5!D|kۅ>)6} NGz}`?KBokd7rBo>3q~jbk樅*E_|,!5d_Ε}KT@ ?K,Wy!g>/Os֪ӷلRXx_Cs%?s@?Qy3NV"_˴m' !PIbR¿OW 9gkyK O2CtBA|)!/LABW)N^ W_N?StЇN/J| !#>@K_8*/%AE?\夎 {c}X3.e態@hF:q^/iN0?KJ'녿I} '~W|"웽+fч"~"^-F >H|)!T$DCoXmcoF+?bч7`h&)oQy%!f?dч(zNxCIyg¿|¢N|!wHC_8߻U^I^;ga>ҟE]Y*"%E'GB~).%>HrB!W(|5!G<|~⹠}%L#R>JB|Ӣ?O|"G|Q5hrE>l͘;桯nZ4.ѾJB_N?tSH4B_NG_sT9_Rγ3GssT^I9CϱO h_!7NNyD"~/U9b3gVyr኉G JW-9M}_B|"9]KKѾK("&vH٩ȿˤ\iч;Gn"~[Uh.}M(! =a!K|~!m_@1)PDE.Q>)XU>]1`Χ/U9?x/\T^I UgB<~ k}I}6||բ?QϿborrBk98ohg+gcBT>Ix>N-o~I^ԢO|!R~rB#K)o!?eR~*E?f|B_,KkgS%7*CZ} s o^-;FWs)*/V9rEM|"/qyQp/ D#~!KWKk?߹Mߔ"+]pGo~O'*b7oh~k!_ė(9?x/ʫ5s~sRO%~:_kA\T>P'-d|>_2\?>ǂO%FLEM|7"KEoVlKe*GJ[3,_Fs2*>_J| !o6">=aR-}fMHkhdt~_5ARߠ"/rROUa3%??x/?Y迭(ɟm7"ׅ߬R.V%~|穼Yayėk@3{ ,E3bR eR^bE__/>>\e?˜RnPTE?_E|"_MDQp{U^EQr'uZbRřRnQy!;,+y}U>s>n.ѾB?oTMg|;/'D"~br;9k"!w>;?냿WsoaO:vߧJtRRPTE/Q?x@]1 B{_[_?H| !|韇|P孄ȏx*Z[M7}cW*΢}\'U^C|Bʣ}Ik0SR>&BY>fEEo._ !#QꯣN]7ޮrt:WZT>㣅I?mUTBo>kUBB}.Q4EOܱX>/!>o6P[]F|'9,'>@<.w"+oQ\@y=w"SR>YRQ/HyD̈́g=aK|??;)O|R~fч?U~CʷT^FSS}劸l屮Rkч_E_3!?GϏ~(*_H>%~|~.wQ|͵_*[y<F%*H-?7AS {)??MC?J'Kʃ>hM\LBOK|Y_Wbϕ!7|)T^/f~xVϴcė(%N^K  捱}:ėjLɷO3}k ,Q s ƾ䝣< <ݣ b6yO%ϓs<3t~GjXϛbE/!s,|N'>c\B'X%UvRgyrCuǀo.z׺+O?0IqwŊ? /ryVy!V1Bo;uI"Bb[/#4cy;oS3#Jz=Q9%g!(~5HHJ _s}y}E^.\ *Psy_H/*W1^@|"Ƨk& J/'D~6E>w|!b)/^R2o !z⫉+)- ,ktBy<,*HI7{[ܩɊԿJ]ABؿMʛ-v\ܡjB ~>eDf[,a;?q5H&*pn)ۉ*wHW{Ǣ_HowCe.̿?¿_K.'uA)VdE>!)_H>"c*/#D?*}t}.R>BoE?I|",̈́X?ME>ϫ|!!s-5?*IU>5)OXaqKKK ox7-)\ޏT^3&CLZI)Sy!R~`G#^ߢ,vRןJ? OIE2E_뻿PLB=agkmcc@^ywp#OЭg{UnO!?se£~[+?|~,1jK9*/&gWn[ORT^CЇ<W}9Մ_cjQgKBsWߠL+-3\¿لȟjq7z-_̇_>ik~E5?_q o/!&o)!>֟mߥķP,#D;[`d!/O_F3N{;+LbE/sa1>d.E!Tq?e_݄hZ}_IMR.Py7{R]E*/Ї?KȾvRBؿCw*Dyd_bߡ0!Ї*op;ٗ}U~D~}؏(}|!w{~W+o*=a@)opٗ_̈́>_5\L_ *_Bz /H7fRWvB>_B_%o%j}ؿ5?AkuV71O&zŊt)v)Ϩ/WȬo *BÛy9p3Y".OS)}.t}(RVy!6)ė+iۥܫ*E\{ ~RˉG[;_NraԾ6B_%7#~!Ak7V򐅇~#!W]?b OHyZ O?I7i,ė*HyD啄z#W+E!D_1\"~s a+ʿDn<.*/&D|.w} *.SʷU>[*Ҥ~w|_m=}/S` |!C 8s⃄ \+ EUȏ_<G5? _C '~XCߺ~xB?ݭI_y(9{g$ϒbdl|>usK6,ߴ^:cUv-ۺ}F冏FVmض}]mC_QYaQ*[/G+/n۲mƭvjN1_brhbL[s*qY&Q=5qAdԋ)5qP?T;l-ߚn;ƈ.I3jG{M>҅?累Jw859+/<=aq*I>1˶ڽf֗A@k34u?qC88vY~'=u)ggNNԑj[WuZGsZ;Flw<ͪuKaw+F879ZGy2ԅlf13 (gp}9r@i{"&aYem떭<]Wn +t_Q>^NWȞ8>zgV+ڗ̎]x?}"a;wK͛Snn=tKNTO,n&zA='xx)ߩs]gV Q;;KY,Fvǚ'c]<'誼tXF M# k9}h1t\M.h۴aʍHњ!)8\v'=vs<]rc;ےq>؜=pzpz˧w#>'"ĖgOt Fv=Gg1߿\[Ó:r)_ RnN!N/>cgOgk/u~0_|:mC{l]2&^0==HɁzW_?*]d^WhO "P0  Gюpo;1'z p8ҿ?"3rtAWdO4=6^<?gCCar֋y2?*Z 3;n9ek"HgW l {Й&C[ːsáhw{_ ɲedj%bi,u&%R'j#}H awg}GWmp)Oӱ߭4y6w5 o1.ҧw* EJ;#u2^+mY(A $g$ΐu2Y]I2FeeڇF* j|h*aDiWz5e5.mBL$4y_Zg1m'o,Q/s==sdH9.H+mMm :/K[!ny56-={hLrQMKǹfNhDR<|pW_1|}k٥_?'6MlC~_`oNF$s<{31eH3wۖ+^kSwhPmܣX'0^^,mIO؅#‡zJ{1ў=iuuu%XI+"Qd:u{:-m͋]݊`O@m2|.欎.9{KІ-!RP;Fx'-eZ VQsc^pxWLWBz@?r{3dwxFf՟3ܝՙ7`|MY)ȝ#<g|tL⪎XtCOIt"Rp eAxrE+;пo(inwGOWDY#);ӴVFC;A{dr;]$_"ݞs<7c˄["ݞW8P ʮ ǡ!C./;e肎.v_\tvuDu%/i:۟ >Onpi?rpӹ ]у} @N<ΠH#ó ׂa tg ::d1:,/m}׋-{7}Y&I;~6M1=,{aY6)[o~vs:ӧHf3 :"ܑ~җQMC6FÝtNWENn Ç͵yo`OL'}aI;pa{tHr2u-IwF5}FC3Ceu3Lly;%2_9˴`ݣenNO,+ tw9C VyM P=N`3->uWd+ۙgk1GCvcQϞC9q7 /ەX= t*yH: 92ţ\yz3WSg(e;t092Z ~%2Lz?hVI>77 Wz^{v*5 =؃M]C^5h67I$u:'}57K{^W E \wOv庯3=GH35@lmZ|8"}DL`_XPw`O80?wJ]6F= /v7Ñ.8DCHрY>,x'^Q+uƞYNꑁPtw<5ufF_Jˢ+s}KCsPgo`an{cgO/Bɲ}ޞW uQ%u9d4gI0v'$=QgwwE$uzD+*5w(Lܹݱ=5UtiT')G5e>IN2%͓2ő2G=OF= w=0.o-+(i{FPRF{2x4Dn_ g;0ð?3{N:q鐎tA̝O n KN/cw1!ֹ;'oղ0kW펼ѯ8>oGWͦ</)#{%:zz*h| MvYlOs }w,imZY?&3.Lo~2PuVeuNg VܬjQ΋˲ZV NZu}1O.I.~v~52[H6J>Hor͓6ytSͷRU|[KKW'WVeS*Fi*9lD:YHEjiű>//gK̾%O;GSLc,MΑ~O(9o_cu/~u\~KBw_PBtkE?6S8yb\o|B/eH}5b,Ө2_R6G,sEb44H,b'>LVlˆ?ڐy}^O7ٺa=ժ̈́F'>S ݘ&dJ?WMY[mVKgwsVg%-E9jBPչji?Y87.%եjizz4.&I=eiuZ[,^ VJQY19N+'uAǚr<:$Ն m?`RLm;ޢsîCz|,5&kW1X]ch ww}!be^}dz̃crj{[y[K2&߲l):33 dnSC-u;I{l]::cnIʺSTruzw]0i]|,k9wf62E'2N%)RzWe'q۰O{N:kFm,KWNኸ,K]j o%KՒAu0^ڭ 3QXInۆSn1ض Mt..2v٩tPJ}8cv2Eq~^=uWy7)EmUTl} dk Xj gR~4a=EY OB'yya\GoLMUU ^m_W{y/˲btzqYV_ Nϓ8ɝAVm{]I7{-׽Ӣģ)|m3y*֢7#a-SL3=u674^V 緋+_0L/Wp}"&+%y|л)Ѫv574,؛[\y[nܸI.x&w̖h˷N}ksMg#'\hL)f7dV'91>zg[@>l5b|ʫ)MqMp57%EڛS^SkTMr;GT}S&<-ݔ͉뗲Lxn#>&JcG-GטKDfN'[* DZڮILLNNwY3sCs:3 IVZ=̕V>&mCmG !Gt 触ħ檚Uӿ=S -ΌȜn/{9iM9?͛_?+<#/W6bWɤgz,=Kxre$V@E3T~LN !V ~ !Sgn_F\m šx\ s#,_L?M;¿<8N+D'¿IOQ|uGSH+$nt7I/@B_#WD?/f3VOʹ6K孄>=a}QzfK?(VQ13׉߂rg)6CBL|!3Zoч wz/#D{vod+TU=}6⃊[;T^Ic}~!jBR~o'*ʴ]RWy"'D7|YaW)9}7b~y&B~)CR>لƾ3? c*Chq!*Σ|>!#cL3*_@h7yI">򰅇I1!iKgo"}ʗf =o_Hʋy~~>%P}s,\yRƫWfч/ \;C|_HN$~1!\+//%:~}S_^Wba"[g%?0\rW*XUWI&EO~ӆj I+!Evŋɿ:/%_x RF}d?Cs7!7WŐ+ hyX-V}ww[F7q[ܭrBۤgчs}W">Ї{,W̿[;^> }*}Za}g< B~v_w,F_|KUJʫ4|DOYGoP61}~ޟ {\1?=/&D?-*_BFW-/Us)W*B/ЇFq/|3!%}}*B%XqH7(foMK,߱_濫ʟqr H1N2~")BR~eчO$?)?Wy!gsK#SRREf劸?gO% J\BoRBO%}ďjLRnrwLxʋA|ɳ}K"9~ }>y꿩s_*1=t% *b 9K9*(R|WQ9ė)b`6VʹZ3? ?Ab勝/GbӬ򉄚9#G&>9DÿaOe*"mW"k9eHPoN%>?Y?ˑb"[a'ȑ5;F坄>X$77kMU u9;D[7OJSCgYhчė(r-s L39_I=Y KH蛱Tzjr)+THIYeч7)}Z N Ij"~iN k)j,,e~=/V\$F)U-{ -6[rVJmЇo%Bj CwisNrnKJEw IPtBw.>wP,'e.٫a)->,O#Ր~%wkMWJ9'i@7J$E |!/E Egr__A娔,<_E蟫-a_MW9ϗ}VεR^iN20^(>\0_,f>쿄"]?yU^AOr^_XK_)*#DJʍ}5 }:4\¿9ȏX7oh~$'9~o O&D)|)oTtB)oÿ7PAdџAMo!N)wYxؿ ?oćF|bRQy>?1>CB{ܧwJE#E+ܯЇ_Wʃ*o#D~OC}dv[K%~kI?fn@hgc]}1Nr`)_RE/&?(}N2?,+*/%D~>&} ABcߜ;x.u"k$D W" k˿'/'!~&!{RT^AL _A~L|"?5C=|WA~A|!%?s}7*#>+?I ?Kʧ8kP\>ib]s,?O)Vy!_og(3N%͕q{ D=,åŗ\*'QWS-L'dgHlGg?IQGcPyvԼg%+?iģT\kx)竼P?CoOo|i ПoxB/z>ȭTF5NI3/&_A4E›I"~"?&E|"=%uW\F ķ^o$~󅓱o3"fr~헶r?nPowVOV~iE?U?++{m>/"\OyKU^C[KS_"+}kֿ[*7%~!$~"; 12Ezng}I3?@<迗IAb~NrXx_CR~׌ N7G|\y1)YljOHѿ%>rE_=,3*!D}C?C|"GU>?ji_ėǴ*?IL&*F>.;}:%j7|IPJ>R)2E{toZQWl!?跐ɿ -Ng=y=%g?S}9OͿ@T<󃑏'k~vN*7O?WfgU^N 31Ͽ_IRy!RcG|E|bEC5k?|AZ{$B\?Su~ɕs|j,LgtTEƶ(H5_d/.ѾZBoY/-p\'"~?E7b3wʃx5s'_NOLBͿ\5~UoPCK-.#yorOMU[Q%K~E.RB?儰/1EEnE7B6Zp "-E uh 02>֓46¿E8o>xRW?ylsMؗ: #[_ 7׿Xrն]˶nm_>ҋ?xת۶oڸmz+*+,*cTeqWm[vmڸu[Nɴ3D!&C"Vr\HNĴz0^7ldӖ oMc$y)S_q59C䬼`j{'~"5XqA:}-OSa}6CS-Sz(CՂM6h}߃f0>jl;ÿr*|v9"q1`:*ӋsY!OG.+)^+e᫄sj,q999U#4g :MG9w-;H.#%/kԬmʠRo;uRVEJrg.DD{s9ٕC2]zÁ]Ll{Q3]}cQLb'IݙqPP$ H_7!ᡷwH&lӛatLb>6Eg9Ĩyu^ArX-J\dIҮv,?ֻherds w<]Gj֘,2m7m :{:B]]^. r[v7֊7퍆;#o cWEҶt-/Ihh+^:^gsmɫ`u5sEr>|ȲC^먻NzsU# L=;b.!x>EV'ƹ&7N_aGOנܳێD;]lr8C$K{{z\Io{D;ާAdTq=`’{dh;Ď {Ҿ 3xI90Gp]sUØReiuZ18Q?OԿתQMx8:ɷm&SsShϳ|Q?[W3\L>/qljȿu5.^:^-ܢ㳶zZ29S?T䬭;P?A8^:I] NwfmI NןK:IHqYVݿ|__R*(G2^1Fa58ɝfVsm5DfѽG8"['z}zTGbVįvqI>USO?P̓b&Lsh"N$`0QL3YÞ]2dR|R|5awoaR'':ɟ.INEސxLEIyu aWLoumprS|,yrr,q*W>oPMs?|<|#Tm'}N\g5YEޤOKVMotRظ..je/0oasU uh~Lq%LJZ@O(|A SYriE+_Rl3h2l׊+iبL~&0/am!{$>)OڄQK Pa(LS&dtfSKp2qrrL$ҬI7X~AB*+$::+A{BUZk6c;s=[ -7GzCݝuFҌqU| TD78^˶@cCribvv,"MLh *yA-F# 3ML~60ufl 6cD$mM.%2/G+5}dlO.Ոj;y?qۭiѼ @eSkAy/bV1c8 2Ypyt[FX1QYIId AaO1)y8\LkhݜAVe?fK2vɖ5&gԌd^j46:H 6sDvx&\ߜ cZp&1'۴@2%'KH_P4rDvUX!L+V%+G1))z0[[vQeGewGO/7S `>֫jvV%o=j1}[-/4cE.ieO]|KM[/N<“[cn eٺzEN&=ӣ!g 7;Wbxcbu, _'8Wͷ!\h<_`ч|DoY@To_xjՇg($~No;bB7i߹d;?]q&||WI<,'¿"j5^K ĺբ뉟XAkbݤJBCVO#-*o%DЇKZo1ii;?K/!D,%>XELJʫ ?˥|ʢۈL ~![I| ![7yoE!~bv'Ex,Їu/S\M7:SQ;֐MR| !oЇoSEZsw%?ja>&~:!%a7*^JKB;a?WS1LJQ^B?㤎7ܧT)oju7b|!YߌߣRV\B﫤Ԣ&Eq yRh5|&/" ~!:KHejKoWHÿ́WKI~Y A,F(QFM*_ACo"~"or/![=a6勴i#ٿCʛTo"~edN)oUNBؿCߪ rʗ=/wI_=a~/V ; a}gh ."a/&>IoO| !ItgK 7z!~!?ETyӦ)mNk (eF߼ ė/?_&_8J|-͹׈Wlr_KG| 7J}/V )O|!;IW}~O9/L 4R~/3(}#(KK?K>))?Sy?}񿴴_k|V X O$DO$EϴRVtEmG)ÿ*E啄ߟ?ևXg_M|4k9>fO)Vy"ίM~Km}oK}4_|FUǻ, ՊL%1 ~sUDq0fBr-o:a x$98/: T>P Xf _HMdpsTJ ">2_β/"DζC|#wʗG_Feoaķ(#nTy+BE+5U*_BfGU/%D~1Reh|5kH9!Wk_A$'}藕OrlaW¿ٖYȃ N2? :̱h}K-o!">2[x/& 1-K-GK%2Xe_B_.%D+ojE@|#!o#̈́oI6!@Կ!ߢJI_.b_@.Q~7cI|3!9-.)-)!1#%DrC]Wka/RU~W"įR+c~M%.o'pCĿ}S~|2ߴZKh ɏIy"rEŊKL aR^mчF^+Tr} I+ }}7}Xx &ėo3\"nUd~&B&D(MovRoC_k7/\}|5^_2n|P^H'Z{'S }3%IN twT^H|Yė(_+ 1ާqW)P~:BC7(;|Hs |͢>D| !R>b/*Gh7{ߏ?_ׯIBOXgOH_IՊkJy£GH!7_ ~ !"Nl||Ic*×=cQ~^L=x}1go_O}FE̟&OHfBٻ>IlE])W|BIEVEL@ʏT>%?6B)W?)T*BgR~nI5! KK QoC;K#:B%?YOOq;߈o D&EOMCʿTBgi_Sl\_|$>EKLj_F7s&6EHXxp 9~K|_E)PXIOҾ3MI\E_/,)7P7G]9,*}T9CϳO hRB|j 6PD?[;IM2ˢKoU;gR/"D_JEsʉo#DgRsLG_i.5hӴ @|=!H|"s$rf|.!WV>M||_96VBg>XJ[@-PDg,!~!ⷔ?ɵ6/$DKaчm/"Dd.Yńƾ/HN\lчU/QD$sUK.\hчvW*&e-Y5u6͊8-sXxԿ"Zⳅ/o%Eg-C7 sʷ")?=^_ ~n ͊>ҩȟ)ϳN[ ?a){-<9z~) _L^aT닉7k*Wʕ_I ͊[ɿ¿C_b*Cϥ?s!_"?nq=?ֿM2%˟;Hy# &ɻ_奄_L|蛽[I B迕դvgB*67BVK"&~BKאo'įS@o&4Hs>"IO$D~}Ix|LU>YQ3>~\'U$OHyĢ`t|!OIʹ >{-o!< R*E1}Q}5>`k"IEB\BU)>?n.?A`A|"!')(?cBGR~nч?&>HDSN܌~S8a$+GU6FT>YL~V?,wOU,^]a|Rfч??-* D|o3oN˜KʋeDEK|"WӾg_9O{?,'M_Bo8k >վ?GJ /gXQ. d_1*Mn}/ ~_x1*K/Ї1i~5\}-0/*I\#_L<),K}_u?E;!O"EX#y~uėR~ВI ПI| ЯRy4?'ʋi~X~%NC'+g\'3[(?/! oWvK1NJyr.${}LE:E=_H:GvR%?m kU{kЏ,o?PREL:,'+WZQ* UR !r>?2Bob'yn D=C_@L*'/"~!:k o/ _BuϗZ[Wj*_ί7Hyʋy~Qʇ-K5F̯:+z3)Fȟ/! IDA~B|!*v'. oEN|"߼^*MorE ~!Rެȟ7y-]ԾB?_o./&;Ӣ!~"kwm>Wb/=C,Cw. ~K-S Iʋy\ʓ}%&'=;لOr2D-o>+Q~ov}1_Om+3UE2nr+-o&s bү$">UqR[K|!_G|ħFsAE'٢7Y~3ퟭ\mA?$D_XGJYzB_}E">o11D(ߢ7XAo#_A,zOerW57ݢWߨEw;__A|"=?{@A KJE?Smҫ*BįC{-Wgi?<_+)VDB(}qrOv߱B|rʧ`ч?M?_ʵ* Ԣ_JN/Ї,"^WV۽E_99Ƚ^+Tdx@h ɝLmNTX^'*L)Ӝd*v';%7[O'D^*">oЇ;,.m**ɟ?N)wYxؿgZoS~n6rʧb}G}}ؿřd/\U^۬/"~"}sOXQ{#Hy }7xXa}7b ȏ|H7{Zk"P _ď}\ }8~9>%*O{XW-ķ*."g|ɢ9)|)!y}RRD[F_gߦ_ܯ0ˢ8obZ$#|KNwt~/ߖE >$AXy&\U^_K|bߓ} 'b C'Zjrb{=O"~<ɉb˓:fZa<<-#S4}/!~b ٗ vk A}/g%WjpH\WɊY>?UGnkT D.oE/UyWĦj'y^3o5V[gsKZDתń+ɿE3¿ķ+n@2o$)uY27)n'-Ik.$ՔB%?/"u+=1ܼYʝN1w˝wy[/v19m%6)-<.oʧLn]H|@X]ȏK}?w,aO"}osK_=pɉMtȂ!)*/&D|H [_S(ӢkRy@_3%I~G&~\$-7O,E=Ϳˈ o^n/!D|Jn*y=}zp W_F<)-!ͯᨔU>J5}ؿbE?@D奊/#Hy fl^롏_H B还C_U^_$eR^FBRnߤgcR^y_y$UgL|_E|T??n ]q=U>?JhoaY@h7yCM4Owޮv'u6)ouW¿{79x {?'DʯS:'G|1!?M9w~T BCT>@|!Ao!G?F|y'~OZxN)`i^ ]T>I7箟'+b`?/ *RjG@|"ϘE)_Vy5!%}~~fDf,aljU![*47Ģ"~R|G'Т!~"塚>R;?P|'X47(oߟK'+_8N~EITE_IʃEEC|"]߫|!o-{k,GotnfU>5>mw Q?oTl!?o͵r<&π_?}LjAp|'G\Eߔϑ~)}ԟK|BgѧKP'%X?e??Պȿ3ڿgyAϥx7;=7I"D'_HKeSU>/ЇS]Ow͏nT 7H|*HA$Ez&ĠRB䷉aEU_8WYU^HgߠflSRBO-QٟdI9eNDE>/?GŊ~hƦuz>C|"O{3|!_}؟G|bٗ.ʛ a_U}_@lEz._*_@CHȗZ~ʗ"?{~}K_E[F-_Fk-zͯouRK T>w}ؿbbTAE\_2N2KH啄ȯ "4zK,<orRg)b~2퐲S2)}ԿE_.e[_)X?M_.U*oVi+++' &~"ݿɿAkTw> fRBu/Wkoo%Dn'~/~~z}o ~"of_H$}_DE]*7k˝R]_B<Ͽ[*LqRQnBRÿ{JO{?Ї,!~j_oXXAԿ$R !`_BT{ _ ~!G?KyDWbi)3YK%Qu}ܮA^U+)W/QA&*IRiч_XOaѧ [7"?E|^?ߖ%_ZQwoQURVBw=a{/$D~Pʏ,<DQ_JT %>@~ſ]p>AB &_FIS,]Qk`E >H2V *U^E@TlчJԾ{f Ry#!Cgm#cAs 1=a>d2?GR/u:}'k}&>T`E* D^`E_Hs+,U,B}_J|-!g+H$A^`g"?=QZKfo0f uQEy ࡿ֏ k/9@w(} x9p態۩NrYyz!ۯ@| !w:٤9?J|ҿe7koSfd>&|X?_(ĮLPIy'"/&~)QdEݟߗJ^AB,hė)?/JW">ЇWZj,Bؿ <$u*HϷ,N>쿎yK)HM[ɢ\. *o'D|^oO秆Kk?wR|'Xj7ۥܣɊ|[;Ԣ?U^)7ӻ<`чQl$7_!*G8)Ϸ<$[*E|EzߨB!~!ʛk3OHyXO_ǴS *C|>#'D~|V-[Y-"D>lD?-ˆKګ^'%dq sT>PB\7 ~"}?oѧ냆+Vy@<g8*sB$*4>TZQ!ƾH }*$4zPxUXgJ9[嵄,)-l~#\!*Z_Ko. S3헜*,VbBGr>D&>2 KT/>F}Z? o#!>Z &Bϰ?=e`uاA?$W U>Y֧Bɩ«,_OTE27HiVy@]#AEYDTQpU^AM|"_J.|!>o!VoE*oTU G;q}ZQp+T>_L[ꗱ\Ϣo"~;!Y_Hh)}BEV/!PlV;K*헺 /ÿE/;Ts>Կ˩}!B_]nKCwP! ȿB﷌ֿ^#*$D~u&Ds'+*ÿ>ҏ-SIU>WD'Hy'+h_̢/ ~*!׵R^i_/>쿈 ٿNKT^F/>쿄rE&>/r+?/Ї뉯"DRʫ,<_EՄ(Y_^#A&D|^KB/7?f)R"6/ DJyEۥA=a y}*_Lh웽ᛉ_)w|9!XQ]ķ)$*_EorE&~5!v)| !}ؿR,K-!1Ϣ^ eXKh~ZG?h֑G,+;|I_?)aO#DJ-0%OKK Ѿxg-/\WU^'֟GXK}AʗT^G/Jy̢D|b E#&Xj]N¯KʃoHEI|"?% $D}Cw}qƾ[Py}b|wIym៥US|q}OSߤCeE\>rEz~RjBIEM,~k$D>C|"H>U>O'E>(nLWC|3o"Tr@Q)* bB?E_HE3TPHr,>?^E/E#St%g~n *:_$OQU$RE}؟D4EO"/sb*:fZa?irCĢ"y~ ue*o"D=aҾ&gZ|_=ժ|"AEkHAABE-@|"IU^AkЇfHZ,<[H#F_漢E*o B}Կ&E=oKGm񭊋r.WfQ/&D~/5\Z~1߮۫AR6|"篱F)"YK.Py!w}}ؿJELl!:E0orʛ v)Y߅V󃢋\yߋ=aK󈿌7O/!DB/S\A#S+ Ѿ}i`c>}9e[ԭ)߲^kчn)L[QT奊qEė)jJ+z+ }W)"MRy-!cC"^Ǵ穼YM"~"ƇjG]yh5W\@kU}-:"B/Q{7~|5!w=k}󿢗NuܠR7Ar# 1/%^+f 7IyELeȏIU; }[nч[\q7ٿ͢o'B["7RBMgKG!/뿍i{u*o_K*F[a~KK#*x{- }F劸f֟P|Ḧ́h,*G[aWc}_?N-$D?aiϿS&Xh~)o'E>?Jũd }OኾEE/$*~JB? J/:B?&A's)??gOY2\3[Zy\7}\6\P O3?wb,OU_T^CCE|Ro?eЇg-[ rBLϘ|'j) ~"_1eʃ?c/#1ėj|ƜALBƜ%W6l)s,9W*bJ9O嵄h߹R-u_d9F☉}؟@|b3?ߢLɿلȟI%0F{ !13D> X_ }>g ѾRKX?HRB_cjT1XN1XmGķ)&Uդ_M!eiX{ 4~ 62> %:B?2?x|g5re=|1Wyϼ1򱱿sc7^aWڶk֭7(7|7޵jƶm6j[ Uٺ}9j\yUuۖ]m6nݖS,\˴jqU31_b?KCB^`vI=߸} #ڊSecہN;}iˆe뷦1KLc鯸ϠosNtsV^0bIu‚2Tv}bNk{?̐+3/fh2tc.ޅ (ԝ:YD1;˙<0<으aO4:+Gnzʠk\ueSfo90FqAsU sY;γQNЩwB{|2ܩ꽓}Eϥ+=gdeNŢ^t)}k _'8pϕryYۺeqq+eЀXOלཀ[| <,橐 #\ ?Q u1mOi S=As &[koa6 GdL1͗?yɨGYatΊ{>Z"'硟Q;8ye"N_f ~N\8}\?<}\{rL9󆓜y_)O}ʭ329_;56/fŒM#T"vyW܊{|~ylTESYex+6mF(wV,ƣkb8:uGw3ܣCVoFAU{d4u*v2#fNL |ƕ6+c+X.)z~[,8ǐ}k{F6p/NsɶM܊(e5tv3t\YMf*F{:.[Fj9Ǽ#CB#]m*E"3^y##Ѥ,Gs©#i?Lx~J)$W'3\0*3<&gq@yy\e `SKe3bnx$rHtlF{Eֺm]---9r>3gYs$2k@A8Đd4yCPit*#gs eCGKYo<?H58 ݬ^+ 8:r*;~Rm9{Wt5JFXY8$A)K>chi029yyfR#CtRJcPl03ۙsgģNQ}O>42ŧN*TZ {Nɯ{ nv&WKzL'#E6|k9NP,3g,1zt8:r~ӽJcy}~ts3‰l?:g|Xij= = g]b%Tu'YmQfW-MwM n˚sQl̤Mh$kU7|:}'r\m鄢"gL=ܩ]BIYNO4$?{4{gw^*gM$WTOGHGh|;,j}!}WnǗz_Zڼx|iiXLE:/4'2L.[3 *z~׊j·K3s. OF#VC\t_g1r,uNpS4IX @5P.I$G㗚[Xɸyzvz7h4ZS}dȨx)zD|aOd:*;P Y~dmʉ?r=' 4VbyO=DB9m&-'GvϥcD$,d*PW'4Zcan"8phKK<[R;PwG)R&xHr4=Oy.FCݣ?ܘS? iFY1r>dt#fʸ7I&ņc2``FK-1۶·N^}ֶi|D=4x4-\S/pl>^[V0:WR MYV|]/U|fpang&JϦZ%ׁ g!VyD\wP=`=}~-tŔ:OK I>S6%-dz%uFy\m|Ȑ0>Xۺ́>הU2ә.Զ'N;rPK =N:MHYw9H֒owG؏K>%Sʭ. V~@H`Wz]u3Ub5SXOYVRJ˗N 2܃@h:V ɳwk⧻[IU:cm*+W_>lqTނH>s}wcGtԑ?ut03,ޟ3qWƮ$1GZQ_Ii!٣2VG}k?\opwn.o8Jp/]YXZ;廒.gK-Fv)+jCi-_ev%u|]wlU訁@=leFnd^^3hu3[Rx)__o.j[>SV~7NfY&ð7NM8#Fh+\?\Ftr,{~ whq16TV njn15|]c[/*Z׻ֲ%ߵ[cKuuf^aW+jU [8cL<[L 8+Xq}9:ŴǦ7ŭ0Wr9[hɠ`7:r&ag6ghQYXO80- ٙ6uPFp+_o d6%Ww --{hiedb:~ &>&=8ʘX׍FS.pc%gCiG!t{Mg6쎶1厍S8p@q)wl<y#: ifvFݚikWuQolbxk{mC:nai7!pT9\+.bw9CՄ< uz%%mtgqɶXt)[Ի*|ӿMy/7L٬Xe꾵[_!t>z[y5|<*e5`}|ޟ=w#\uMq 6#g~h݆iO!$%5תY7v~'컲%l+#7̎{[`K_)〙 z-)l [R(e(p/$.v#pmh(PsM.lrM`*;] 369552AwuHh5>YS=ls\Q挮qFF<ڷN%z6D7=j%끊|;eU},>-,?4- D&gxoBfdhZ%W:σϺ0?l/+/q_//lIa;_WLKH>H'~&6d1ϐnHVWPs>Rp]mFVj3h5–̭dĔh5ʖn4'f*1p_῏l8[R}`'ؒ|>QU@װ%|]_3-CYð-wؾ<G s=hdÏ݇?yǣnƣ|}(p-\Sygm6=THc?_N,bU]ǰ6Î{_qz-ѢۍP8l _lGg9il fלJq1bRܰTo[eK 7{`clI)d{EGrտ*F+ 'eY%:e;b d2ܔOfNC7ZYm7]\\:'sϑ(gͿD{_6 e#Q>j8䚁|xϵgL+f߭טyo797~la酮x,NQZĸߧ&x!ҘdzyK~Kׂ{gr$Qwf ǎ&" yFpxz;L0evYhB^bʀ#Ȏfr _c\7f`\k|8kܩAM FRxWݻ4Q5'M&> IߐY#]gr')a{f.sh"68a~_ϫC1j`hsydGyҊ ogFYZuRM{{#ٳxd/$#X8Ӕq7 ' y:EU$zHtXw5$3m ycu!PamBBCa}4:U!?J9ֽ{Ӎ5SrZ]o]5vidv:16a dnZKnWCYNwvA2qPҲxI)bFPvoYVHFMRBgBd?F'T{ufzScr^}AFS*"&Srm"WBPc!ĦȻMPkK**jTc{SpĔA]\g손ziU˳‰cŗ F2n%cÑAz1bU}-ekU8BHL5cc]EN+*]tLzJ6 MnUwJ%Χ$/L5d/M655١Ss)u"y4'q?_ZV$urjpCH$TN^֥LqR] #[u/m֑U9Ux _Rvŏ׆{#h*4z2h XjBqбKShSdZZIz4 ;5 kk du֡/XbۺaVfVսFs=[SGgF)$U4C'L$#ţCV+lֶ9\IEրi4WWAc&sU{z:I/SMiIa:IeuϷ+gktw5Znv@iT>a^L1dM!DUk7R^NU !QwRxqT}uv1HB\zt\^f >ZYY7?~Ut- je`5qcZEaˊmnNɣ\AMC*N_MwM30 3:H/omм.!uP1#xڜp;S̍LCyOQOؒŒ{/t#'pӯy4ܴ_ORz<>!( JLs2?0OQ5.SgSԉC1/r}_ |R+_f0}A/flc>ert`YZ}o~zJ_wſy/a.UE|liM_)e_0_e]%E_(/f>hXoo)e_E˸>\a|S_GE5k|=~5kߤ|]>= Mo[ (73_dX_ICg%>}g,Ye;N%j;ſ5wֱ|5jF_[ о "Joa 7ݔ|O߬)6Bۘ/Q V@i]mTv@i=S_ |z?W1׻oqؿ0/zC__)_?W2?g}P'J@i}(}^?qoǁ8Ճ,?(s֔P9 /I_@)yOp~= |;#a@i끯Tj|"U W3wSoT|aT?O / _ (|aT{&ſg_*{3?%/?>@ٶsr\G0J|#|J|<2FY_X~|)cy/R"Ì~{1P6K4#RЯS/qaJerJdbFYW槹N}W0r^:@iWQzH/_ |=Uw (ko_K,ouʾ3_O ^W[X~F;e}MՀ?w/o6/.@ہ_(JhxS>.[A_xʾ(4o;P>p}*l20- PG)}+%?F}J|'5;~>|'jYJb_qbyQG_%o"_h%/ (eJ@)W(}UË&@iG~3 JfyojxM(}K?m ;@QjY~PCJ?)Ϗ(XËA2@~j2'}9_+/^q @;#s^'8>Qg%>͍2/E܅PGKuFp+O3?[5#W0P/g },GO16Vo (W6QU_F_+>ɋ>qXOYaF9^<~jG_ ?MRt\Di˷=ſ3J(?x /zz%E) ŚOqV|^(_4W |3 VFY?-yɋ&Ge}S˩k:Kw1[ C*)_(/(U{~[Gu[-RTv /V@)_&_|?(wJ(X[%uPzMn}ߣodd//ϰ?U /X_2/N‹>q)%_(uҩ%"~u5_2WsQe2@?xP~9PO_XPGo8팫@ N@kׁ~~#6? |?~.?n@׿'?cİ_#In42+:F0T2e)*@_u~,e}:X^ ( }&8T?w η%XRzF_?c5>P (G/_|-ҧq"Jbyߋ)zF(^̀J/Q*^N@i;<48YQ RWQV݌r~n:obuocHn}ؿ[So&Pׁ@TS.M{4P >}_ ͂Q?!Jab@0jſ_nؿ`.?Jbc>>( J2h&xGq/|obSaH?ԗ54_)j.@k_lر%s5CJbyWoRF_K 58a̝BY?7oV)^=}5>jr1Wǔ~ @PF_ ÎQ˓Ҿ?\?=;xOǷE=wP1OJl1jſ/g SzH?f,>rml_Mq~0obI|W_ſP/~}6?ڿP?y`|ϣIw; ̷KmX/-~)rOEO?B/i]q._İn!/Wk~r@e_%XË~1_WX1[|%#O~kzJlK16FoJ5|0?[)d9&mhJ2>˰LJvJX~3}J)@_E#P>g,[(g*~z)E4f}h>WW3^A`ec[즴O/Ƿ}f)]%P_ zƍ` J4?݀Դ7?K4 p3 JwP3|cȰJ,$RJhſaÀ#F {8Rq}?g P'8q)JgXаx2tF_;|9Կ:J78.j*vh'_৳PI?SX ({A_k}*42\63~j`Us(ݢE}oeUە%.qV}8?rF9VJYo9 ˠ|wQz-1*k(}O/_ ƐaQz˗Jy=h*jmFoP7P7{oavſ{$ҽ,/| { obd(}彀<ſ2_)l> |1;>N,_ (}C_$u_aPpyJ_dy/@}73/i@J@0_寇|`7 {2?>/1~q_N{<>ٸBHG})Q/@L,'?^~_Pb/g\M,k| ASۯ?ېQJcy9_I?~ ||_,33D?b/^c[GWe>g=9Edy}4X6ѰW}k|Pڧʏ/X_PaJaJa8ї`χ)dy5}F8 X?D[|V^JY Pw}?kJY(}u|^/od t%Зh痣>ʾ{ E&~?CyJer-^Gd |)Ηc,1R'PzF_O_ɈO=;j@4b@JtFË3{Pi4sOD?vۍ)ݤE&W}~>ϳu𢯞}.J>DZ>u?U,W(Z2@YEj"JgӼ~J/QΗ~+|/q%|; re 71Rw@^6@tz/d(G/r B7Pz+}H^U[X(f}e߷SRhʇE=~ FY?{?| }>1 |CbÚO\s,d_{OP˛eIJKw,J4H^j6P1/^xѿ%_(٩kYPw5E2rF9R:%˫%~r@|5Pǔ~ї p>FgPC_2G!Ͽ Pw/bb@i?PzX/=|9jGJfyOb72X݀Дz3g}f6_O=Z}+Wr45*kK>rWsY(CiF_ P?,o<҅}-+r@Z?Q| O\S |^o~6oˁ#=[w/EOO-0o>{v~g&PS[Q*7I}Yݳ{eѴ3[@! PWAs_s9=2͔ qu]=;ܶ a69;>k0ߺ \/bwd}Sn8swei.yC=zꃵ\Aa+d4v))4wjwsyTQX`9&˜sΜcjft.5c`o_o³|v"Hi\3(<ѳjr{&o&YP (p؝dLx̱^"LۏrFa|w7N1UCFY]ѳUb#[} dq^59]" .4lɧd75)HgZJT4ќcLJPSQ&4 XXO}ʄՏP.b>S|1.,'taiʜʙfAZ7E9dTֵv/ IH{y952:e]#_>KW #G®狲TqgL4M FRxXnlp1;$8 ؽ{S/8<::T qL:5|^[?z<M&c//GcH osfX$ӧCT阢ei_d캨gQf E#g/AѠ*zϪDAOwvBN\PS-64c+\? mίRu!3U8v8%hi0k' NqX,2.Ď9̴_ޡô+踌3Qh bPVY*]QPhuzХT/w-zh30xY< }k{[\Alxwyw '+.aY {xǨͳfuѱȠK'x`>gn>f_Qb<V<\*(09Rgg8YycMRI(p9=iO9ӳQ@SS.5#u"yrgNi6ə!g,sQΞriX|\ rO/rĜ02[(sUXxU94fY8Euc^>㣩hV0PcM(8N+x*tl4J%C]YShSdڱ蘹 M/BCĎ'CMk4z[BE'9v %FVWOLÃkP_ӛsvmx:eZC'#P,NagxhFC'L$ %H,cAmUż@KX^jOS-M)+F5kV,t,2MxΞsV[:Z,JH!dx! ,Êjx{9!{f4l?8Pd5[:-u {mZ][nK:pN2NIX3{NÖj*A*>Rl.@rPPϽs^m {eѧV yUMy%C3ӫ-1j}Fװ_,/K;_@-m>k} ppC#NzyOu}{ٯ&ďwgUN|G+쨯lz\Ѭp4XVzϟh0hO4:ySʭnfJ6{3\+ Rg38}XrvQ%A;Hٹ ׻z7_kgYR _Tp?Q0u-=` ؒ|^PUYY,42W,+Ъ'_K.32Hİ`Ο+1/تGG 騆i+F= [׻sV=p݁zNR{-\Nε^ͺ# ҳ/pcr1` }qX ف[-c |˦%e3 {a1+u3<=ͺX?Oc̺>Ah&%cJa_wҸ@KؒFn俗l-)o+?, OԞNӟ#كx&|%s=lXqg^l}sga?wwGtr Nu>Rjj{Y=%ldzaJ`F/Kf.oKZ 2A0mV=Wf֘>{@.>ko ;50_3~ep_Z, =+U<@WVPvLf}̇z)xuVO ~FZh6lSVU珏əzaYAQLj&ugD>uwe=l52Rn--ی",56lğ,a±O[6fikmSyHob,x-'r&EC{]긨< ^Up|:LN3h[j3hu\2.14%- qC*g\kɟǧeb((K/t=wQ/,2_Y?itFɮ ov4%YJvwsA Eo U[ I(|+i||DžX57F|l8VTҡϒfes@A_̚m q)NԚW[_+ŠbG6S9=aP:md|;Q4ז[\w>gDsr~79Ӫjǘn={wMGB?]8<*Vā(;)"U#cG#h|Y=̴Q,6k'BCatև<^Say*cf?BK ݨֺRC5Xh9_P'&M#[֒i0/b|7ULc@ޮР YV.?iCE/)#]ԋxBR;k5S bЙ0 o+P1~-A<@[+IXo)DJ}GS*Ef).r.Tj 5Zĵ5qEޕnJ'C-Om5p/~Z[˜բ)RA愺l᱆,}Zps|dk!>ZCG@4r=ٶ`B^+Լ~ihee}eP7-QkU3#;[%8* XnssNΝeHUau|5tsf.tTT{ܪ3t~AAksې::uzp(<4ͺZIJp}4u86>zJ>!f4-NҟㅬW,ȁ/RbCR_SOK~1c/A.{zsևVʿ _ (~ c%w!ح.30'O4e/b\|1u~a}(Rſ%q}%†S_GZd{Rbz5`_p+XcC_Д &3E>E\iWJbAi5'+W (ZՀ⟪}}ok}'Y(C_o~c?W,({=fw0[~%<~?vJ@]b}^q̫nca%J|] J@ J(u9Qqy|J}[Ք|؏x3,(y`_Ci%Ú9 ǘWk_)[%Ɓ_ (uiJ|tF_? |v3g@)ubzw2F(bbFOQz{g/Lof%/oִϳẀbF)?g%6tr_(7_JcnW*}*@eW+W_g_UWx{5͆ج /_ (.F, (&}n . %,/x;e?QJdR*NÌwP^5#׭H.U(*}>Ō~W K^˗_>D#,0]kGg1WJt?/PWc')}JË5W{}5^@_47MMt|]~}J?@/C3^ ſP)ixg%s]=ck[ſ(o)+e|]i(4?R?ɸ_5'W.@e_C:FߪOo]KP ,[{|ykxo(M?},)4o_-ocaj@֪} 5h.kx''.@^:_˸Zש~'k_FF?U~+zw46jx#(ʿ^ǯt\C_ߪC|^(f~i| o/m4&XPwJ/PS].ayاK_ (Cs2 /:@ˁ(i-;>q,(*a};Bj /MTSBJ?%~OUk) kxoſ2^dtOPJC_OiOAPw ҈Jn(Հ?L}FPz˻S)@/Z@Szg:@ߛ(Ef / |7#PEË[@s5h^@Lj6wJ=kxv #WJd'WvF9P[kOk%w(_>PzJC_ ?U^@(ouAo?4wo}@?~F~?F^8 MOC|h?kd/E_x2N}߿ʼ컅}J4(7Pʙa-}?W?|8Wb~2/b/a%ؿc5اĿ5+N/_ iӘ_:@i?zFٟ)˛E_*oaʿ2wJ<2MSR2>=r7JRV}ɿnF9T}Wq˷+ƸS[J6{Moow_wBTZF`8WE~J~OkmuF{ &Zŀ%}rاXoc2@Okqn|QQBJo;4O+85Qo*RoدAkM/e^O{}I\[2.=*W*}5>rF_ 8?K?:FY?1|(A /ATG~vߐQ}5,Qk_ʘ0˓ҾbD1.b#?/sO_[96~ߞ|#oO/)@/=xI!TJOg2@4J7kӁ3 J:@iߛ{&_rI!h߷_Ɉ(嵀~oN=F'W  Rz?+ezh{aQ o}AM7.sKe~K\AO/cRhRa*E:QF__%/"ifE/S~ FY_7X(딾ї|+#ohq& P~K{^q#ҏ4wJAgC0h_Ұp}{,72g1d?|?4ߟJ|_ X$}WMx(_'ՀxES (0_ e|R#?W/Q|A `drJ|Kj/x_q, _P `y' oC_|9 ?[SYr#.dbFY((hNW"~ȗ*Jy~ 1/q)/f a~ ,ܰװR?4Thb@ hſ&++~F/:XQW}+(b%Jmw>P_ ay3?ف}xAZhcC_?F(_3 Bi< |a!H|lK%)ہ`ۡ#.1v1$ /~=ҧrRJʷJ PD/ jq~".pk>IRJ]Fr //uW@|5hi+Aca(]MG(e|aA(;/51(_`?ԌQJO0wEcOP7A)RIJ7h~ _NtF/O_m?-OkWu5 E~8>?Fo4q|~: 7bA}&+q|>nar@_| /7SzZ@ihoW[)}Ͱ?[SWO酆MFPzF_!!@_/t˗JXxF_|QGK(@>C_|c#9W4ZI^ߩ@Wkj?_lؿM^fM~w?oV/{ kſbo @P=ީ;AP]A{o`lXO{)}Q/|SWJGs};e} |yqOP>~3c?F?m}T6hS2/}G6+AϷ)}e~Qҟ~ cȰ{~e'5b}? P4OP#J?ay =ſ0ZWP߰Pٯv?*|2IU?R3{ſ?yfS6@H,_ (C_{UYk?"cI0`y gn4߄ P Fo9,o18C_ߢ/kah+_DƯJ5b%<~i,cy _A}_RF|'HkbWJ/r2HC,o[/CQqE^ΟJSRNد~ #/ %0Ub7%&ȿPگx9jv7JЗ5_};'S?I?W,Wt=R 8_FՃ_ (SKeTcJgr@W3Fvۀo¸ w (;_T;{c|1qf}^J|~ ?PRϯR/t2K)_(j)by%i!q|U,o;/J,?/5\ n+ൔR@aQySzF_~#ϘF럸I72kjLbkk0Iiܰ[P'G}i_PJfRF8?{n`b~FU)\/|#DFWJj06hA,oT4[#tJ7|3(ݦїoQ>Rg PƇgzgϧϡt[@=\%mO,(}6h~@e_/xѿCȿGaAY//gk)!FY_:JK(ՀotF_ @{ jxVЯ}?8U~%<0cd?G> /:s(!e#^)@ߏ:֧N3r2療/g_(ֿ%~6À2}JF9Q_(+AKU@wkob3R_K[e:e~~xr #߷(} qmJ׿|,_jb:_} ~?Ĉ_u>3wJC_LS>_|aTXP1ҟX PG}'Mˀ'.W2X߀fOMSk%i|Uq%?~[W0ȯY_qi}Q<>(@E3S6XPw~ E_(W*yD^[t!y-j@ϢJS㧈溢}R~F +}i˙QsQ2@ie/*/,jU3M"jˢ7J=~ &EbPcoДf@>|OaTDka}:*@5WJ|Ӻh=ky_D{F_o=rW,oQ[ j~7M?UQ9dE}} | c߬ч]q%~PS`@.ڥїwŸcu(Q`y/A?fFx~F犳$_N@S]Njt%wJTJ/] X?WєB=(7%.:.1.ь?ld O\ ;'s{zml_o2\kӞל}[ߺE鱄ry-w߳HoNQ hTfMc>kGz8`ix4V?cah.CUeWyتQk⿳&LfJ͸+|=wp.Cx|2Ps[U9qMY]ύvܕAQL;yG6i?ON!ZY漢]d#Ms;CZ,t-7ho9a>XސokMe=ވ79ii.n4= #EWγP.fEcR{ 9>i6R\3,$sÀSİe2$+7=EMSLPPaҽQVW{{zwl{־Gwȣ8.ydOb)kcNg;2#|}J%<Iz4=g:iRM(nKpEyzDG䳳GNݢ\u +bsGA9)c5C۩i^̞ç}&=WYG0P)LʼnTo6 +*ñHݻ<ãcN7ZԙS7U5d26b^Mpn9:Ǎ.ofEhH*tL^Ͳ/̚tSzohuJf E#g򯅢AU}aVM||$ z0=w.{xmhԄ錝b3X\VhuХV/-zh3´ f0Pޖ.*d  O[\⹉`t8i_y~G'##lWJ?y65%cÑA!x`>/`2vK#NsWUzBG\եoE{j44y;O`$a#W DNsc'5pegP<K9ܲT*;']AS8;ޛ=hjjrV5dHnܙQgګMrw.˜ni2Iz9`py,wbB5&DfXt0v,fϊԓ  BYuj~ c?W*V?ճyk嵫NGkf>ڵ3uz]ק'S֬=7LK>zuG$ܟ9`z9do B=dvѦWfK 9nZ]Dt(6QjKu1#=NYiw>4rԲO;w}ukWfuё5üpSUNfMԬfeVB!ÕYNO4AOX/ ڐ6x먧cʠ;_~oplYUUƤxMNp%ɿ7/9{:ODCSk=;BLJ#uye(BNE gz(T>{8kv6-Qr!Y@|]_4Qλ/: 90H|8T0߅Nm+zGʾ t` ]Vp鴔[]Ė&:/i0턧V26nfnօnCe@ B,&,RF ;(R[ %7whZ&'WtfaTmN(3붭Zsءga3*)ssswQPKǮ,G_wݬs /d-+ jCYםwUV%a˧sɒ05e 2A0mV=Wߘ3#v̓؅۫m1yz6~=JolrtSRɓ\C}Ƃ T*eC |-U<-CQZh(H̳ _ N40|Yy>!\|>!4ͥ?|"ݼGæU[(; =+3]qZ\o2̮q)+Ju'Qm`{m]xw$|+z>z@=lI!~,cin$ >,*( r}Lt5__xXV${+weo״` mҖ݆{p,ӖYl7wLd yoc^<ה=`6Qf*j[Ri0PV%8.n14%ðł`*EMN/Q< J^z\ң0j}>itFɮ gn5spxy&:CJ=Wė9^l7ѹ/тK8g3Ňmg\Qu Դk4>Rg{B0rh\}kD~E~ ~fͶu؛anh<9 % # ј|A/xR|B>\2b,f/ziUJ5g>)w{|OCQ84' AGR9j>N<9|<:1~y0ͯ4u6jzeh]cH}6]!"=,*/qVF`\=ݩ!wuߥkŜP4:1mGȐݢiC {}x)9f6(,K`XP!_(q \E^_b惆EK/B/S p ƕj;ſ5wֱ|5jF_[h_IFo/7q?b|{ P|1fhJ~%쏒Qe9ɸOe݀RbMʾ+ҥ^/^@i4CP+3>W (~%QJoj!;{}yqoǁ¸_Ci{Úa (njOxO)gYί/="e̫YJ@'_(|5?@ѿ:T/f럧Szyn {&ſgU_'ya?!(l}9omkeTJ/bR*_H}EK>5P?/J&_ :?m/MA^ŌRׯJ+|NJfyϫ(}J/_ |=ca/w(ko_K,uU24PWfM?w/o/>nPbS>.A_xMʾf@ާ@PCP#w1 / WJ‹p|pS㏼HP٧<2nv\z|[]| x|!_K5 qYǿy/|j:X^ (7L/P[d\ }wYP?kſ(=J𢯸|-?~zCJjx o#c@ mR?~;.~%_n@We~ A@w_xaSzW}!?WgCR0>PwU('9/Jf:@rF_7}cgN^XP,m6Oó}Y=\>o׿ڣX@Cq/O}, /}l/2@|`Ұw3J~_A9 ϫ~c~^_z,_e^Dޟc?C_? e<_ (-V_ߪ%[APyy! ~ɠ_=_ļ32J< (ΗK_ (s P2}rM8> HN5 >3|Iq72Oh@@O1˯PU?|c@K,h/qF (* [)=6@/?cqܰVYJ|!?KE2?!@ifWO(~/Lr$}6-/^Kd$(SW®tŀR~ ԟ:aogr@i_(_ P/[qo;E?a*~818B_s+s?kO؟)F >a | (-`BFXi 0؟C".𕌼T X^(sؿ@=AVA72^ħ;j F__@4b1%~4^+X(C_Wh~WAhj aW>`BFX?-}x;`10#W1ڧ r%X(J5P~y 6}%{>Ų57OcK/Whk/^7hn/ٛ+K}6_ƸGeoeyPֺ~xI+6><8n72]ہoak\e?4!(ʏ._w&@R:mdW/)`b^IK07.ey5%.KaliA8X?D2Pŧ0WJ^IiD/ǟ(].@x_쫵 ! /CPq+5,(ЗΏ#>ʾ84|Jy?ɼ+E4J>g/gQ7<(OtF_xIDFn'SzF_| S{kxtЯ}?\_>SS? c_U}[)=_ËY?E˾Dx'.QR/q3_r|/bS{; #odݸy[|#J-퀢:W1n7 (oj&JwkxA o~o%^_UcdN,/e>P 2J*wRװVA.Ji/cOM,y&AVh?|##O?L,`G(}Q/? jnQ{?Ns} 71>~@OyOks#E e ߯Q q~_(uJ4+7bl{r%?gyﷀ_ɈoS.˻e]1df@Yҏ5bAq#>?x%Wa6JcBFߒ~F_r@SzK@5}aGJ62V`O_Q>?WJcy _=߀$R~=0 2~#ćX(s@^? Wr||f~ X)sů %0Ӱ/(35@eفodGo3Pї/ϣt˷}ڃ4b"JҚ: ~}_WY 5(KW@6hfUqPҌo\+u<~3_od9%& k~!h,_(ka:#s+^VEՆA4j;~'w%~<tGË~˳lf^U‹)@?[_~?,W(bw>dkd{(ay-^e~|=o? Mf@5p)Fb!/]AiL/xl+)]0?LiX/P˫]MiP/#/gG5Qqi! 뇪8˚}OxK1Mi#m1es>w‹IO%_(sgoaB9SJ~Z=ҍ^CSoeZ=EM3J|(*@?~9Pfkexq Jx.籼Qʯ[)F/<1?O,ҫ5b/_D6#ii_U/Rؿ epxFgW (u;r6!jx9W|+<%Wj>_U Jh`d> 磁7_f؟K߻Y PD}nÀ>,{&_ e/gDwey#TwQzF_@{4[~ WLÿfY |)(}R/? |Qw~?Bc,}C_L-3@}?|3#?P/_Lee^/k˩? O2-2UϷ)}GK%w4Ns_(="FY?G~z@O_v ſ_Qj}+#a@_P Po{JgJ_-35R?_`)區R?u?(X (G4boJ|V@I_^ }zX@WJ|8}|_XZgi8o,Ÿxg^rOuaL/PyMڴG^=ggߖGzĊOZ`|dݽ>c;PS[Q*7I}Yݳ{eѴ3[<j\ |ˠNw߹(we4m)#T-L)KYճsmfIC@"oqWA@7ev>s?W\F]z(y<ˣB4UD8inҷs ryˣ8yi7҂\gfr(L%7Xk ,Tt& vT[縖 s7ct_*8@ɬBGiZTn) iR2 +z<:MS.h?gq1lCsyP1:4 |8Sp0>clQz|x|xfx[@?f]y=}‡9o?$K7<:Y>xJ?'&3Ï&͹:'kݛ۴~k1 11z"{Htzi2]2tr?,21EuiyΧfEF?k+Cԇc_jdphtX|5Mƣ]éXșh"7x"2L:56,g ǎ&"3 fGF#c1VPEFK3:3uj >/;I&cbTl4Dn7=IDFh"iP$i:h/fYhV͉P4ZYxS4]AUON?蘷'h"6鉯)pag Pjr[BTӅY]$soؐ+UD9=v8%hi0k' NqXY42ZĎ9̴_ޡô+踌>i mPVEgp\butKS^[JyGE4zzvtȥ AٲW1 yU|q22266i[KApdU7y)\4=\{JzƜVڼI"^Wb){ONYQzt9=.RN71ze9䬰lo_̊%F"DUQqYgvϦT™\0{s01sV:bqY(wAtwm_dИmʛ>d8=VUcGz5y ]*DF݊.ۺwA]?hNw%Cęig\֌xYi*]tAUCC.߼k]3=]ӫFW:?#sݚ˙Ü1#eZ{n',wFOl?$>,má05ԉ S|` |C^LjTXX5 cU֢giylH1X7g&kӐ놙GFIOOXm[`?1l6uѬR /,e>]qe*>I9*06DUY6TgrbU{Eu6 s/Klх@qu/%r|9 yA˔pV˩?UŎQmo7є;FC=_zحimgQsd02FO"”>] #a^ e;R#gK gl5ddpap`ˌ̟hğ˨,تecQei'et*(&2:2:֌N?*5Uy>ñO컲Um/+8FOΖO؆%* jy='rc&s2׬l錇=a{"^W E |n(vx p]]p|:Q3h!>jT:#J "YKV?e$3 3MC-} 8k(pns \3N1Y\wڶ{ͼ6=wFϳ5M8s:x j5OչBÛVVddQa0RӴ~Mð{A9_*B/yF+6JwhڠpCaQT6jkւETUpH+M4ↄWA[TvN:q f.횙q⿕ þqztO,2,X=UWxjufumV~۾ʯC<@>o9_c/(%oP8ƧOd>Ǒ||H}ρTt,3KNFCz6Rk;n1DX>Sm}k1+`o^*o*H"c'"VIrO*JF'L(:QfÎd.;fȗ&bʡ-âJ>H.BP K'R*Y,~<ۣ̏"2Wp}4iUJ5 7Ξ=Le3J )]pwwG9؄H[`WHtXH"j6?mV5$3mKjաu! tևY:FXݨ,p^[ t`-~ !|4NLtG2dL%Oۯ1{TMCMtNƽctZsi"u:ޝFr4}0\g`[Y 6F P4p}5 dMT-=;2KnM% EʻC!xM?YˆBhp8 ɪV}=V+R;FFT)GcёXdXl}UGi P&&,VF,CGVNECbáQh|(.?N*=64s/9:J*$zСh(rrHT"FiW'C)XݬxT5*k^_t]Gheϰɬ ^#_`ˬkO[#_>ʩܟGL{ӥMwg5nj=xF6ebqsVʴbِ-\tdN2&60'QG[hɡ&5$FGvPI6̣Zuʊn,aguQw8ɷ]B*n<-jVUf mK.xWWϼ~cl4'!62L555>3b9;&Z׆PS;m}SPatx9J)4{T+r ؃CD6;QSgBZ.'~%}Xf,6]Kf*=mmZ*mcx*iU꬙$FO2 [!]YV?2_V =-QUy;z`QG ]1k"Gv9*Ua CN'Ɲ [jAd4AUx**7g3.Ƌ5goi+ui~)yijC;ܡX<IVSS.05C*%IVj :M;E,\W~=>>IĮ^xgNhf-gcфum+S جKvu^Ӈ_=-+0JsUp8Q #S%UjCNg:s{<~mb?Xt ,uԤ灧(N2+9NfqoگW')s=JrLn42> 0?3?V[|tijտ]şoX_2,ȁ/~Gl_=4~^[bN\)j607P߅`PC_|>DOCA+ P+~B.OҾ_r(UPʿC_W_ϸiy X|OدԔ j An) +}1As:iy=zz ƕ_ _+z?fnh_/;eU[c@C_~~=;fh4N_aa?ہ_ ((IF_|z݆1%(/͸ p}q]b ;/tJ_/ahU̫9|#Q[_ (P}S}kS|؏r?L)+؏3?aX훶rH C_'ŸQKi#s~^G/?yޥB\|S_dP~*a{CPiW*}}_(?j@kE3Wgl؏)*^s(ݢ}ns`:@o`5}|3 =P髸.UL%(K%>nq XY1ļǗQzF_9aF\߾ҝ,y%bNMȿ RwQaZB_T_K,_(Su:JK˗@M,y#jgn[e|y3+ey |VJoQkN^kzn/wkxnQ?~v@ɸ۰>=?=+Nw/c̫3zFO (4+?C^S7XSq9;%>O~2WH~җXPy苔|˔E+PQkwC}P̫3z&no (WJ|4䯸_PwJ/X~5RF_]RSZ@ijGg}PWF"+7'85KU7P#2 /D' S]gůf(Z@O/_ϸ.X| 7 ^F^mShxoϸ]<0(}ix"훯i?8P|_`K#ğo1-Rr|G{R>K_(2ԫݼ/~]/_a' ixCPÚ9)/s<$9J_0w*s/b'U~җY^(%J_/Qo_5J}C_M?kʏ\ =8~0{1b>C}3~ebG~?>( Pbg.~2_(;5~[~o~}|!hN@į2챭ܰ׿(,_(71.;<(0_tҗe`_5bakSgY^(?OqVپ?z'? ߢ~ jVf%_˸.r>n5?p.ix6c,/ٿ 2FX{)|1蓯K4_!6/[)ma^ݿu2~n;4C+a||>^JY(C}?/ih@R 8>О%+e|8D*%`F? $_j|8| 4 j! 'aQ奀_ƈZJ#,_ (ÔF/g 81/NjaFOdy_C_'5c$=W0b<||4XP;u`\_ix>DqV|5ǍBOtWJ|4Ӂ9?CO07[obU?s4j[J4?[һX^ (BO"JwgŔ^0ؿ+4Ky);X^(sؿC?^[(_Կ:WA.JeBFT=}ZeQz9ުoP#Y^(&}&8R_Jc/5b}Ov?5b[?H,0u>O(R 7*'o02.}go>G ,o>/}Fx[ſƸ Y (RF_Ռ5A@o79[˯ΟN@))=jF,5X R1o62 xLRүX PKJq-Fg["ǯfWAoa}/_=%9W?~/燵f?y jپҵ% `2v "%ƥ)bJ3Y /g7+&@n\}| (_|.ÊJ|7W/_i_x>KqQg|-yy.Bx_O(@)_|S?|;ۍg_ S%Tmb+,_(Y|5d'P|o-@N@o~ c x*G>m̫CXW~?W;;O{5EKaP竗P e >/d[z>^=r:fy=F}߭Y[(7kodMVJ,$IBF_;,X obU{Pgߣɿ#D_ʰs JW|!#(k3M0Y^z?pՌ~G/^'.dyoxI~ 4 2 zKCw3n)XP1w3 n@Fxa/X~輻7|9 &ϧ)}奀Ҿg/cT_G,?'iſ'q9ؿA <Հal7_'.pSoez,_ (t_ԗ4MPgRR/]JfJabF]OϦ~+-neys)W/o~9/)G,TZ>m}W0J| )HË@0dyԿ fF8_Ne,+4beK/w>qײPW PNJbU 쫹7/ (:0ꍔfn@7QzF_=7k/}beRor@߷Qzo+~E]PeW{5I}JeAe\^? _8],22g /a}5f>ϼ싄}'%_(%թױ\j}r?e>:e0Qe|~JF~J} FƕEbP?~caHA / oe ~F|奀R? Pǿ'/d/)a@+Jiǿ;JC_N?o FFX㿚u@9?ĈQ7~۳8~K4| a 4 a1*Y38lJF_\ˁ X<x8x Yǿ<}Ba&x1˷}1?.~7 ?Eeq%,7X/-i0F"'J 1>U7i~ 匵_*ճPGAF_/v>F7}4b@^`},oT+-1JSOWP C}%oɸ'Yp ˻%>W{5[ (k>T+|aUZ'K%>h,W0h ng2@)_߮' dy%|n?ڳ 4>;~~'% _ q|b /W f^֭‹>q/wc?|/J2>(?jmpX^ (k] |c (1J53F8 &(XIJjSW0JPS:Rj}tZFY=|?q[X (sx<Ñ_G,_(sD2QߓM >S5T(? m;({43)ÀoEǼBPz3b|}"+e}Ŕ^j@(B/_| <);X({ؿC?+.F7*{%M w'Wg y4]^E5gIQuWowsma^![)1F}v+`J@i{(}P/ |c-wQStޯQֿjx PiGGܾ[hߏQO{˼-w%_(gB9UW_(W/gkw Pƿ~9#~726Me}myvnUgbFߣ`:?˗32A+ 址>?~5#埱|O=%(ϗ%}~+v^Ql%߀@b C`GJfQ@?y&~ÔŌ&J!ÎG̟|I˗J%~F+]3VX^__( ]DmXT@,2H,(/gi YQ_j_*~Χ4]<_/~@x黲?v.=?Jxа֗E4-Bп'E4u /PڷB\J;WoEjYPWaF__"U,{drF4>5/l16 /@DïeZj /Y_}f1Eku𢿞/JP̩+_fJE^.cyVhՀ?2g}=73{)gy;ا12|,_(wC_qE #2r2M+(]-!?ԗ}EYP(;H)J_}? M`FΗ;Oa tׂU2 Cǡk1kBx(|?/ui/u}4ҿTta?;-(sؿՌ`Ind@d}#8M`nby3ؿ V^,Jff@6[/ϥ<_(oc~?o~^D67b}#D_9~Pyզ2@wWU>0W_ (]WJj@^G ,)}L/k;Hn7JD}7M)̀25b06>oVJՀb]5ޫї |FF/ (>Mt{~>/x>\qVky5fgY~E?O,J|J@_ PKW*^]|(Y~1ė:F_~Kkq&;,/gmzKeG|[^ K4w~.a^P>jx!_#(3/"OJ_N_0?'4oKg w0곁y%;wmڳoˁ#=[w(==G{#=;E5PS[Q*7I}Yݳ{eѴS@Zs_>Sc2K*jo@gJ݅=_d]=;ܶ a69>sgF=J|2Ps[U9MY]O-Di|bfMmcW*(&R M%?х>=U}`Sԏ0]a&Ri*?qy2aóP.^<h%7XkW@oV*SH/ƍttj i| *E-B&x'XNO*w q< ?wϮ]}|Srn@ͲI4TÏ9\:: S#8*| `R{n"}xS`3[H^?>O߸/wG>l;pZf+Pfyk#yj&ヴF*9>UܪхlOy~xS׹vezjQ:sMxF201}X' 蛇5m q/;=u蘫~cSar3թT)+J\wGO:eAZUQ@SSNbøk( h/gy^lk[ɔxά{gBStmƨ:#P$ %FPմ0՞K"BVY}hK}3pgND7Zm=ݼfM3/Eq=geVoĆ\ٸ1s8fZ>"a/M9l6/՞UΊ4ٺVFN;+CSШh|( %i0 W<9:J'!Vo J"'GcEOH4O=x2cS{QWTj2>Eሽ|kl9`}ɷ/fŒMoNN{U=?v9*Ԭsyn֓8=+y2d|5k-׻${ &ט^ Mm|Zug5{aoh`^>x4%1:[u1wxy֙s wX":>3k%=#=6.oG:nYL``qzP,d7o'f=t"vuɾnʦ; {-w^ dӸe]:~g.zIrgűcxlڊغɵw窍Ym݉y!pm {:\ }|L{|L;cZrG՛̸h)O&]ѝxiG3GnonJͤRk'p8php4z{0p )Ni~XXl0w(詬Y{f9MLeUvys^?&cpi'#x5A0FS!3ڝ4Et5Sؕ5p?{s&ɳlVu 9MЎ똪yV>B|֞x:sY VFyOx93 "]5}( juѡX<IvgLi  mFRhh :Le{l~xgkhp$.޶ k,OE<(M;\3hb~Z;H'xEQyɵ.L\ G,]qՠ@ݓӏ}> t۱H"ݬv@2n˰L QAj4ZbnIDٶw.Vw>l^w곶5Nk3ni_lW_4friok˪b\(i)+ElEa)_MԪBN>3 ҵ5}&N,'5_,|Fdm8W;5^X*gs ]X>wZj<%\/u [ϖl }Y{^hz⿋vYZfa|򕅴VwGq]Jc" T E`ccX@F͒hv\Rlq?qKW'/=/:Ns49̷w"0΃{uq oV=Nuz_ӳ:jHY[WKq'uʲ@H;_KU0kԒ|=R+U8ke~rb+*J,,K\V=nտ+8,:r=:>Dm+ʑ?5ꎷyv^֠ש~t*鸚m>f) nNzx-a-uKoskg,SKKx=הּ︓?eWV߳ Lb=.ֿ眕ژu(FiM!khmt'-sCscď~},]T f ڍwv%SsHqe<ʜ^g;ߢs XW5S].5Ixs\9RߟGCK=Fc8;7Gq+9S<(m xp MYꬭPKW֨Z'ƕeiNd¼8*7 )SYƔ-:!Hi=PR#ŃG^v`ycbhznm$mɺ6)W+JEs:>>s-Ww~RQsm_0Q_:.|I}Y\9Ym"DʺkE{DVW%AYV)KkԒz|&kkՒ {mVԒ W n: cZUV-=ާjZ\+怜nPKn,nTKMgaDA{rDɪ=Vx[^/#;%O".9ˌ'3OzAI.JLӲܴ2˞_lfWps6ZIXI7g76;n<Y[ݢ+>K-jIpjqSV%A,hOY'1n>;But`9EOn+ n>Sd6FlsqApӿ ") '1`S8?poZr4ps''u{$WY=l'k="m 6ǽ4\mn + SdG8oo9dž3fKK&._reS!oJN ߻w;-X^+zq Ȫ^ DKoNaܪX`k5mӤ _X^B?M^OR?%ݧݖ*1e|{GG{l}Д$&`Io5侠I|k3`TXUJ5P;SGD}LKi=1L6WܦLVVRuSN!?I8uʴJ0ZBȹA/0Md#w'_c6`?_U7% . IŌ4WԹSM4OpViYYE%C!]_gEJ{f27_eL6,*w%z̸b[l%6:|O!~fC-J2Ye%ek7VK';<(bdq]Ŗ!ˮM?dWДVHjr5[%{sI\餙s@N%:K!Keee~Mld.0,.tc ܢs L9;zbP'L\{uu YFz5)#F]]:E+jP^;N$tdeYݵ#rK[i&FbGڇꭶڋ2%-#`#<#6F1OM'oF. #U%q}χyK5i#^}Ar0' ֑tP5edjsCՔ"z:zR dSѐQf#=G-fp/C x я'{\mO41T&9Er0<>+=N.q[GezU wrkc@ȩ7/8{&5Fڦ{*3塚k^ͻيɒ:AJi}}]6Z)i݊ފ}b/!Q` 1:/;3hU{ItQP#]Uݵtk)f51xhAIw6,)$qO܍C5olw1hH,' >Xߞ[Rd_e5&JX O '{Q ={KODzmm{튼䟃N"g8!SNV&I,O )Ez |Cq.F1 ,cї[]]-KT_~#\/ 𹮯iG<6h 3S1"ۋcW\|`W>|.&>M&~bw ]@. ч[d6TA 38G<-, g\BI)/_B|1[|!N?+'>XL[wsݼ!Vq կتSZBom>Y_K|=Z<_[g^_A5_ES?TwZ,Պ?yY M!l5-T5Vhⷃ Bo'U&ܭ儈kчV\G[N{TH]{,7ʷqR7xCMu^;y|?H B?A,!T^@&~}ń?J|!!/v_/CRBe%Ϥ,<ү"W;/D 1W;shM:OѾN7M&ݨqH^)}M6$UtB[LMK{դYm(R|lSU^DmG ~/9~>Ӥg,_Xs_FW¿tʫMEMrB/c Lz IE($/1&C<ޛ2^5ME/+MzQWj &uYgޤ77Zx#o oo&~Voo#~!ۉߡ&K Qw>>{W">6=!=k礷= }!I_a'_EpjB>]MW慓[0}><}QOW=|ل?ۤ8޳WLyIÿ?W/_7*/" }#$X/9[ė?}ۤXx/C*"]+b|}ϤIZs~hҏU^OG!c(bFB>1ܤ_|! ~i/I#!+Kk oLoI3!ƇYo3 t'?-  '_Foc}>f$Or_i F,Gpg꟬<+C?O?D>PGdL4?N*G"jL"~b\ygjk / ;=~!w)?ńПF|ҟNRB Tg_I|+ 9B.񵊫H?N|=!Fq/  ߢJ?o';"1u)ULEXOي6D̵Zd?O'/sFDVZ_%(#*/#D|~%2WR a Bw#ovUhҷW#zzi7"kMhч7s-Y(c>쯷俑T~2EǥNꛛk*A(K4Z}NL8aя"W@?ۈ_DL?_񙢼 E̵J*NyIԷsϤN꯵d߬# >O|EOsIT=DX_H|ʷYb|ޤ;[9)gٟq YۤW[su[d3k)GB'e*/!D_7)ow7E}E'~%!)'=N>$ʒ?7e .eJBep+1'ÿ(?];&w_XK=ݤg8} gs"%Z{IwMzEMk ,tY8Ͽϋ,'/5e*_F}2jsI+K_/oU~ju|g9)[7?[GHd[TW&ME({IPy""o#XQN⑿"Ry!w_]&Gb||I#_O5*_M>a+/EG!D(񵊗3*_E?>lOpiW¿_IWB?3}y*'__!%hy~I_Wy5!Ɵ#SY@Aێf \bm"?0G?Ry6*?qCp{O%D|? R㯝>h!~Su*_Dw|_FeGk ' 7&{wj~3!#˜5/ITlBFE9?i2*_D=&PWD*/#TH]_Hh. + /!~"s-Uy !$DK/SAtI*&}د$FQϒxF#XalFkUD2DZo_ {+?5s]E*N_G Ef.6|6!MY;-9d&/!}ӗ}DRE\ݢ2B}bɟWN,gWB726Pxvnү&WXT^1]mwm7]טti1Ϥ~><7] ~3Ϣ/t&TY!!Ɵ}?H|1!IG,< VB_N*rޤ.~ėG~S|H3~tEOWD4F/ D|Npg|![/V&=Y%(m&=âL|"ϯO1i*&zIwXaiįP}o !|)Yھdmؗy}}ߤ|5!}%!ߠq>-('LEB^>>eg-i[wXwgɿ6Bs)~hK__6+B|oE?/}o"d1~|َ {{|EYx#P_XN?&~!'Wb}3ÿ s~J_E%y+WE?AK ߇,!*~DLyA>~A #GeQ'uou>G-Q L D| чӖp^Ebʗkڿby&~2 ]|E3iE'~"7& en=&4͢_H_Wx|RO)d.U B}wzC1?]B 'e|.6[?Sg>&>Hw9&Bn>ϳOpj/RK76cU}俘2K*VY%!K*~1ȇ6VZBwi>X WG,#*t _Sb2PJo&P19CW"m)o%bT^OwYGwyXꗮKk_\yAΤ*Mo7E?GK:LJ?xOӤT^Lns-KaҳT^J}%R {)yW*bXMz¿)~_@[ZK/ӧLy\׃"JFPʯT ^G,B_OlE?|!!_Dq?bo"~1!դ0{I#>o'~b%EIy%~k~A ?dGQ &}ۢ>BlE?Q>Bc!qג{MaS!i$3 *Cч/bonBr>^ŧMN}o'Ծ En? ~!# ~LB/?!~!!Sg/T^HMzԢ"E>IVy)!+ע&0ډo_T^N=`oUI#h#?IQ~ſ*9!ϖ_,&DF BOKG}[ ~ yً{c{c"X䓓뻌ۮںn[5iî mm[>|g{ [w5okXaQEe^v_v߸mg3^^ӟbp ŶΝG' 8:;7 eضskCK[,OoH24› 6oHA@m1jv=s?gR[woͤ9]fuB8CbZm)7[Oijik:YlQ:˪ϰ]e$2L;4(gayh]:BɈhF4 1b2k…ƌOvb Z- Qym76ʠX>bd=r=*kQ12JQ`p'Teȯ@GqlFiTZnj99kl,势#ݥ*)C,lGc69ٸރCV΁A=ܮ.zPP=yc`|뱮Ξ@goOTJtuo?4Wӓ U SDO3gT_"+ƮvΎA.@qĴw'll/;$tX<}Sx0~0cs;lg0Xw#(Jx Lt>2_YQ_χ;{XOTc0ɠ~TPJ GқM蒝nZt1Ex0=8i@e^eaVQˁ u"rˇ;5TVzቛD׀7tdT 9^rQ`|cݝi]ɯakrX24k~CM/ϡ`yl918&˨t<(1`P8>9o=f9VVV ߬L mV1΁a{w*zuQ RGetv}UhЬ%^z0XWWX!Md>f4:" l]٭k͢@Dn 5`r v~BDr}jGo15܎S  c;;2&/6tcLOq$uZuXXp@mBc EK|Z[λ f6>^ !f#ɑ_{d˨ r;t^h/KGP 51ĕ0~blV!Ǚђ8_*8^EoҔiؕ ֌íKEhy6 J`Ù{DGZz>T?INGo".Ɉb-U>,y'FepK1ێ'x:wQGruV+n2rNe)2ug]򡃞Q܋Ij_h]+Wf5l3D2fN{rQAQsH;}px>t06}9~x ZL['zϘRR)Kuwޘz!xÝ`1;{qH{YAC@} wwGpE3۟~Xz d0:Y[=a\EfpN-\ $˅<榔z℁C]> cTdт&$_>,/-jj"lǺzNәxYM6y}4J\YV'!Inٗ"n3p.vWUf4'ISN;DL]R=,Kh K㲎xz|=D|㿴/?pǫHVw{&I~ l_rs ;gd>G*8zʡlZD{6l{QNԖ"EJ88~8IZE՞mԪMMk!23y1Iig:lg*Nve#pR3o-tB[UVnT ߓnhܨKzZO],NqR?NqeYZ~z3\7v8 UܻBfk8_{w O@^dt;=U8u @8?D0͕0Ig[e[c%oۥv)75lv[[ؖ@u1trDF4.׍5v3lƄa'Jɱ;w\31~uyY24: Sǐ’x?~&+ȓACwTeu3W2hsc |6d? x1ٕ~G$џ+*`E|]F{2o$ac_ Fx]SjvG6f R*̭~ŪYѷՒ-[PաɚT+:Y?U2w.==8 ^bP5{-7c &Ӣ:Mq|I8^0%{qUXXqRz1Q(]ᅿ6c3DYg`ktP0Lj5pxP.glDױB<8vqy۫Vhl*j+QTYWiJ`Ɣ ꮝL1hU;+Քјjq$ _X)j V6fjo%YAYgLͥ;3^':wv#IQAy[/BfO}E۞Ι @t\ƉyiͥeA*+ͶXr1#d#[QZ GIqƚ{}20md~@Yw`ɢbD^zr]Ptrؐ\ՙuwHa$*ڮkeĩw^Hr ,v /j%#ޓz1 h>[q)ٔHZ\ 嚄df/q,M1-$ˤܞlo?Uf;n߻1 YJn\TٸkF*i>_7oMm;'EVNλN݉5Ɵ[Fyٞ㝦D~*h?~@cv]e8P&nb|:F)HA#H@%dXΪH2D3moLI ;:?k\z=CHƐ!FfW]gDGU“?YqgCk7tڼmD|}EAq fNlrg#X5 [¥Y-o^P fLSޛ)pɅSI\*}1%c=ѓz?d|N}=mr{&Nn܍پyw;6/砓zØ2vLR~T|;qƹmØT2,E_muu=~%/<_@s~xmڗn?3#X$eAčUMP>x?.&>M&~](sȿ 38G<-, g\B|=Z!~bjBWK| !XRJB':`чU\K[ _koTLי^[a1DUqٗ_5|7!o чf|yjm*D!߬Fw?y}Eג+MJ aO>_-ߧDD}虜_*@;O007a+_EiQwIOW+rG{N 8OYaZ^nP:Bį/Do ~=ؗ:1 cDqR>S F7)lҭ*o#D#['.BTeTW}>*BLzʗ<äZ3Vl=ˤ|!};'7*?Jw LzʷKBaOP^¤W|=!2D_Emd5&N a!:'jLz a!/R^äw|3!;Ca]Nj>x>->'u[Q)/׆x~>F Bߏ?Kq2V|\2BOPe/ _L_H_?O|)r+&}£~DU￉V#B*BUW+rIPzBoPo2[POuzg4h_ ~#*Ng(XJ5*W^LEBLʋ?I !Ss(d ? +Q\oG ~/9Ҥ_+s΢&~"'W"ߘ/'[}[ՄXΤ[x/*_A(E/H2{6?Po "Z<]~>Em'~"֯?wԦ"B_3'D~oч6˨}"~!n+i0rI{T*gч{%D7sYj }EPw_㋙",<#zBk-~(6Q Y?hR#o%ߦI]zPI*GW>ﶴy5!w}f;N|%!‘w$W¿SPfe+ ߭ n#*Bdg?Ŀۉ!w_wtWbxIϵ_ uh чgYE5"~S~o{!񕄈ߋ_&D嵄3} 2"~,sʷ{?A BuW)zި򕄈LzEZ)~o2-*_E9DBjŵT1NeH!ݖl Q7W~/^ }(G_K}Ԥ|!c&=`ч'?aҽ*_M4;}ؿ5t:)>&B!7*MʷBaT٤|!%DJՊd&}K >߲AC %bCCȤ[xc$?!)>o$?'&ś|_B!Ww P^RwrOa!/Vׅo8o7\\'M?UI¿+6Z|*RE7U#G^P D?S1XÛSxP8 E@"B_DbBO"Hq O&~)!/!T_I/W\A_C*"3Bk7l ?-[IڿqLԴYwJ8OK<;m+˴hEq]GB3sT@~/ D-/ -_so.3RoFԴv>W5]Z兄^Ù6m~5E%T?-GWcrtEW_#>*#D чˉ_7kZ7g,u'h?BaђF7P6FK7ffBg-A>߮?IU>]&n +Lڣhf=`ч=ė(.'WW+7c{ԬY-1i>ү%D]k[%]_.Llxޡ_GA(K& |/zT^@GM.~͵@WпzBaגB|a$kI+H:a,EޤjB\Dlч_Ad-*!D|nч[,pigiim2TO'D|A En4*/ LzE=sLz}?7Dgɟ |`b}bljɼ?xA/1+vR_oч?WCe&R 5>ro?r)I#.WRB靖/Q諉 _EƤש|9!W чSP\FJBf¿6W¿ÿ)_ EJBnב1}*o$ чSX+vRG?D|5!05X?|ĤZxQ_I?OxF)?YڤϪ&DVR?¿/Jq-կ<7rmefч_!~b+E~ 6BʗP?W&FDcTI?_ߢOy5?T?į$DF|F>~M!ʗe?ſ% ߘ;7¿߆ÿ)_x?_C"VD6*_EO.>3_LzD a&=fчGߢ+RkUo&Ӣ'~dI^Be)^w !iUXԤ$b&k n13GƨP ч1{O% K}jb+;-p?+)6ڿb_Rŵ> ALG P6B>Ѿ|Co|5s,B^>P&Kbf[lb'*D-!fB[Ie*:!i>/#WPT?磤[rBWW\y/F8*R_ׯl=k$~6aĭ瘙sy)X15|?#mf-cчV3f8~&b;-B<_9gʋQ!͒]%b_v%迻Lma7϶WZj嫝cTH13VL>*Ěv/p=:_H눟K<7\x/%D9@<=h"A|!ƷW"~fLVrB?BaWȿW¿.?3zU^MzB_6qRį$)EI'THÿʯTV:)ן&O"oUy=!-&=ˢn%~b#ٿͤ|=!?٤[a)7"O5vo }ؿݒ?+FBؿ>΋&BuRb'rB+">>yI/RB}"Կ:'e'R9{_e&B ⟬ _nҫ,įS+-~y#: Q_H?7&"Dh[,M+O}ڟ7;_Ix&W-=!cI}xnC#ߏ}$D}Tjj'!_H?O"i~fч!byo&ϙu>-I_RvB_EDEEK+p^!D*G _?E"|פ﫼^>ߒ?K??>B>׸{F+ ~M|"oUߠ;!x+m]w~O5(ARy!} E3/@ÿG~?!_yLI/}?M|+/>"D_D11rB/'/D뷹~|8Oo#ns.V2 =0O?֩\1>,StB_93B|&Dfÿ|5_A11͉<_rTfч8si!gI U@r _Ư%.g+EW*yc9g_M#">1_F7/^N`i9ժ/k)h+6x.kʩ~ԯW~㿛Ob@|>9눟3XT4_Fm ~ D| !ǵmo!Pxi-7),GbjVo&DFBeƬYs&g0ͤ~O'Dw?Pxvtg*wI{g+M֢!~bLګ%!ג? o)!ć#T?sdʫ>e>>${Ck)fMsX v[a0~#&]Y">!%.Q|Y~m_tB1~Ie9}?AE<)=iҍ*_H2Y}ؿE!KI}E}ؿrjIOQ Br>?xMb|v1AhG_Hwf͟VK5!֒? o)!쯷ć/Uenʫi.wI-LJŵs=ۢB߬rwZau+lSy3!,pig~7wRmN4jQ,Eڿ5@7Za"f _s kM:iчS\D3~I}?@|"ݿ0)rBCa?A|b ?b*_I!=uzoV^nP9'}w%mR"cOZ'7jߥ o}V!DŤ-+s1KfST^@=9Dbɟφ}*HBEnwt |Iϴ#_?âIMۭ _3n U ]~|X7 O%D| ߣ*E蟯">_s>_mkT'D/aч!~"/Z^̈́(BaQ^0IoUB􏷄[>whDIߩUZ?/3Q?#~!&}Pq> }Ȥp>Ē?+_)! ]ߧA}Y?&=Bs/ _H|ń_dҗU^H(6o#~_&H5|_5>2BurB0,M)z,. BogT^Koҏ,)!?!k _G?3*o$K>9/,bqsF~wfVE>9wN;ymWm]EҴa捭*I7nmռucC TcEҶ{rlAk۵sֶ]--)Xg(XeZyŶΝW0S{+lVZCt2k՜ǭuzbƢF+clέ -m鶳sl3] g3,mاrMqx"?Zʈ f.KF(m:L5[cϠMV.f9\ 74ni؈ˏֶvePTwbtjv9ڂ~ p6J sz,8]#<Řm[60Ӑ5jYX1+3=vhmʲ ;Fܑ0_Mly.|3|AG?x7uov$.l2v#;Z[ٚGFΛ>v3K2be(<&L9m'~^YCΰsx o*VVgu< r.RSg:=_eC'zcv#Kmi3.uރC**#]z) ]]``rAkX{W51xhN( <*h`LAɞ`^NWoo_P)G&f੾DP#VɅ]:;;{{ ZVDIS?uDױagsANk wF?I? wuj\thehՙ;[ή”s:oLQ<#XO`dSn4y̳{dК7NCuak%'{;W8s$_8{h0~GP"8x跊s+PgZS:̉,7yvfWxẐ}0(\o=f9VVV 7O>Y64)ƈV3 dq ={ai9aL,Hg{+Jk.`s{\1f"5̗B̠i:F0J"_@Yw`ɰ07 @Aƛbgh>2.Wfv :!L چ;9 %Cr6m@$/3LPZv)U5|>IT /9Yt؅`1Z ]e݉Ajr0=I@)҇~b{23YV* {Ot_~h&.md6X IQZCD|S|kΆ#xNӇ349uweG~aHJ=;==ᐉMo~jnA{퇍cWV=Y+now+7*.arq>v00XXHsH'qra.sE{G13*6 7ŅY CSY'&[ 2EV;c;;2%ɼ3:~LOO-8v vz$Z̮ ^e\!fwsNB X skdu!댷-cpk־ݻ3ݺX߮e6m#j2tocЮ qZm`KI)k ^>qH+| 1k.F9梥{B#9;E~[pUl ۞L/`;sM wf\8MЉ 3c;z)#^hgb|f\nO`"KK]Gk}G'qc+~*17lh- ]o,hK${ Օ' u+ falr?%@Y< ["@o6ִ҇?/.SH_N :7v)z6w1$G:tsi=X/<榔z℁C]>̰cTdт+MMză`&M"Фׅ6׵]ܓiEgzqeSkz4+IV!wZ8gߒ qihuc-7/.hc;vIzf?dP9׮fmhFn?kwAYp b+t|c|:uD9C.ggߋn%Ii˕5銋]YhUNrl,g$]lz2U'DB?VbXHX G3iVZhnjs偵PPr([Re`ԅԍT;8-cBC{ X ڏM1V?X[~[-Ȑ1ҵfΦGZCETV߭Ym2:{Yic\V 㶇؃>5B粦/mny5,oZ|q\?̈́[NmM;N7eiM- ]w[VJ=^n$n: } mqU:_79<-=>m )vg)QAjf)q}hLiIMy|2+ޑ r#?lM5JqQ>^ĎMoK4^x2e~|6?~:}'OSXoxr2N<8ou41t$ݱ ~\oM3#no:rt,B7.1EHrPPpǺsF;߆+) [k%mx&p%kStGfw鿇dog _ə2n=rȿ? hܠ wd#w'GǁTyGmx*ˋ=ǃOʖUgQ<x徧;.d͙EWj3uȓ'ͻoM0GQᅒHz>+Hj1l\h(Ք^veC&ԟ+^3Y)6EzmTЗAUzK}qc5Щ4[lHE\S|<]t$~$eSݗJNݰ8,yy K*4ݏ^xX]iQQE8$8^0%[qUXXq ?Vdl%Y)@YrDڕ2lX_{0&Y{$pSg ϶s\~vZ4^yҔ@_"f0:oL,CU%jJZjjJwFM0l7BzNro^|/F[QoSΖ-zyA؛|LP7o?d [-Үl \$aRZ.SEEd,r=v=e(,Qjx6}uWu=XUm^ב4]loQ26sml`0Q32oWi /y;C"n{{w<9`*o7~0q{ez^<0o]&oұ,1.%PxyO&?Gqw ]H. чS9/mӉAf?;S W]lчV\J\sBa.+>~-ZB/JA>/:B_|ʌYJ\BO qb\KQ?-U2 _5Oo]O֢_귚!_C|f/uJ[a}_EV]d ׆~W*' *Ba\-*_K[BauȾ<ļC̈́=DwEqٗX^aw>_A^Cd*&su>uR ~!9zb+ѿ_EPD[rE&Z)*_I&*6Pcw*_Gu~7 žEI7Xx@Mh51BM;2ܤ6Bc>I6CEnU^֪K}> Bϧ_EsIw|9!&ۢ$Ztm(]! w(^OmsU~%[I/T}4^p/17KCa78`&J[ a!*9C^+a!:(FެÄ}37B}?^VBVP^,'_|>J,K^3TU^@/ }N '_LO_HO_?K|)ҕ_Xş7 ү"_$ZoW¿/ZQLJdI_SzBPe:4Ee*N?PgmwU>O1C>.">'X`ɟBPƽ AHj}*W}s|&Rń_M}%Ky++1*BISrBʫ ~I_?|ؗ~;kk~~o҃*#DA_mH>xQ*ˆǟ_M3_CR?U^GU@(e;&?I=!Y?JEݿHo%-x6B?"pvB?#~╾2GyUo { ៙#,<G¿˞jo5bkWMÿKH]E`wt+fN̴o&W¿YOR&K2B7J/ȗ!y7W¿/vWI#B|%!+$~2?%1cPdE/!~%!oւ ү%DK\ۧE~~%k?"&~!⻂xM,#(B#+C%[_EB+?Yۏ G&D_]Č&|C>xå;J:1Uy C/Q$cvg2b愨S.U}AZ_Fvti}1ѨE]A\E(rʋa*yeh{Tш"ת|%!gq>ZB&]goHBu"/xH:_Ow?'_D?BFBĿfE?כt#wMq'K.BG<741~K>&DN(?/o"~!$+ nү"*?U/#O#nAUN姩X$~!{+d|xIUy=!Ə">.:~{Iw;ݖo!b/ bLw儈ˈP-yIT B&΢_I|"]G^e{u>%+儈땟ߛ/'DB|"&]+^>;5w."~ чwYw9!>ghf8)K_A}*E?bTI__x9&}RQO'_i!~"d|IsyK|6(QV~֯ )׈_N}7LW~iң}- aLWMECE\wM}/DOFmdG&D a!w*^I3*C?ч_bٗT~}R?Êݎ~H|!C)8~|ؤ?Yx'$&)o$KM?*Lo!DatT8J\?W}R_|Tz^Gsu5x菡;,x?|>Wt/2b U_B.U~?U߉|*ݠt8{~4>~O'MLŸc oyK|/4<|qBń_@|_DRB/&T􋈯$~1WRk_B|*/#įQD7B-p/'Pw˵)kJ_U>OOYF;4XFWP'}_M|bڗobmPy)!Z,@|"fbtQ!Ukf6fчf)b*lR7l чK~+&Bn&om&}eiͤ}2y rƤkUw/>t[aZ &|)!u&~;%|Z;jr#}?HJB]_EZ.zC[g#s9j?ZqhIUtBA(g& ;]o֚c*/ }֌dчLj_@ϓ*_Hu"DOZ_HMTE$K|Xf >YŊҿn3}2%hߧ4W" >?vTy !sG>iɟGK+?ϦN??nUtBpO:z5kUV@}}E3*_H$D_jɟ˩|ab*ljk+_&N .kVD}-ӉV"'~/ &IyӉ[5> INޭ|E}=&>L )%~"K<7\ʗ" D_$"IUrB???J :į"$~5!פO| !T>4 ȿ}B/E H[ ߦx %_%:EK^_7T~=DC:)&~!+ɿ}& ч'~fGķ¿ߪĤB}3U$~A<#%݊)~2~ ч+Hwſ_G~O*ŵ?G䰇ח&=lч$~VE+?L">R~_p+ Q%~"'ͤI_?-<[C?|ޛs$"/WǢ&娼P3,z|"?kѧ P|I@rB"+ȿLXLĢ/&~:?٢/! QK/;-忌(t?fRy#!g)D&_C_H'cqv]E믘YV[_fo"o&}ie}_DE?JTKbĢEP[&%^B]ǖZGp^!D('ZEM_-WAB׬Ucu}俜b7ߴU!ʷ"Dk,_G%-WS#D(;|v/_S,o4i8;!)VfG kW6B+}KZJo3`P&ڈ%PObM#+H_IML?tB}!ZH|;ϻQʗ*'X\+Ŏ8{jp>?WsIR'bsačsOy3O%6߯Oej_pO&;f#Nq,1S* wҤ[)g+MzO/$[U^D%DoOkTˆ[ױ_B4n;϶wZӵ~)/HgVسHg?xo؋T^L}.Ki1 _ٿ~(D?lɟ/>F廆?n5/!SW,=ߧxGE"D_ч_T^4*V_!}UL C7_L[߷ߪqi_=' ч#C{ߏSSH~~|o P~e*_K(/Ƣ'A?`o!ߐ[ *\/ӃW$J{Ȥ?|%!I?_XOlѧy&D|:P_A*%I|%!/ˏY*rm?F&DO+Bˏ5?'F|?'jZ߿:B-NI,z dEǑ9㕯8)9_L|"7٤KU_/U~>.#~!N<wf3äY*PެsVX,7}ϙfB7k}؟CfEoI|͚<'mh_L*~WHPG9 ,p^}Og?s-=B״J>/!"g))Wy7!WiW8|=_ei+׾{ o-u1r" gs֪|"i[kG s[ Q oSD#~/!H>v[_7i"M!iL|!L|2lNG-!JvDv?s-Kw}]ג>+}>ۣKKkkU^F#ki.7\M7\rHi͆;ׂ/T~:)߷y ^JEY8T2+b|ˉ/#D^A2*kj1G7ko$ޔ#7)b+6z Ѿ@BoN5x|{I_RtB ^־AT&SoGI<1.ޣ%ϻCa=i^8|K a/u=a>jEO?b,QW*̤Oq>kчONWIRy3!so>ʒ3񟵔/P|Y/i_~AT>K_gmч?Gq_g򅄈7LEI'~"/o3K~?x[/?dnF\y+_A4 _& +uj ժ/1B_F>TBiPUI>_f%w qErbғU^Dbˆ{JBo%erBߝWb|e-iɽ¤S*N]I E1jB*ZQW?[1Ne ܧI}G|!&]}ؿΒ?]{D1|"Eܿ;aa/#(~~꿂w_Eԧ儘_{M#> })*Eߑ z79?3鸅?Ÿ'8b||oO%qk` ?Y*Dvgb||E4*_@t*F.KQg_E|5!M|. ›<7(/ktG&?/ L_ǽg8MgT> 3KMzg*e*/ }}E9 i0W_%+CaUiO8|K a/UMwߤjE}Idz k)o6*o Dbһ-V)`Lzʛ ;,ݖ3>4 m۔椮O?lGU>Ks?b,Q"3*KܤYaS\D?iҧT5,) ~|ڤϪgBaW(֐/%'ٝd!%(WH7+tLѾaCmiH{oW^7>~lOwjM+>~fU^@?gA ?BEnb}I#!ZWȿiZ;!d'՗69ǿ*ux.TBϿwA(ߦrAog>F|"ϥ}6|DqBmu7ŢWyQrTP˟ чw)/x5px!q!?^ ^K'4Y ]>)Z?"OU A~țA B"3yUO7y}?xόyT^B чyp^J _2Bg"~ER,mOp\OR">%/&+όyT^H({ g>ⷌ"E?͚!J奄(f~e\KPy9yfMҢ+Gl^E ʤ*%&#)!k,kH-7@AY m# 7*MF>]Lߣ}M\#m/S[8< NkaߌyW|%!7YU}%dE"V_KLگBo¼v>O:ŭd:Vo'Z ~¤*NiGG;_IU߭ȯ&D{K( <#k``~ W^ΟD w {c֑Z5}Ts,߹v|rw ڮںn[5iî mm8ׯSݓoڸy[Ɔ -*Um:ش׶kmm<;%,i֖m1: _v\gr[woM9/Tւ/VQ9ˠ*p,j.&nҖn;--C44› 6oHAm1jv=sh 5:fԩ{AS,0 ZVDڼ`O'f=Z.ŏ$Y %Yl=yFcYm@O|6sXg=.΋s>dn38>ۅ lU]x[sa 2YP.y7:0°^;V8^ 1<ǁ`{C㖆kmۿiWޥęWY{scV3йXuz#jtsY8|Eׅ$su tekuy1q֭M24w\!!EBt! vyӅyeva)?Rlm2=V|`^.lَv#;Z[Z}(*:#7'y_t.6Y>uQ y.:I 2d<柧gCf3)3K:ʅƅY%JԙD,u~>Pwj4=bF롫#` giMĐwƓ^Gٓ?{0sWUz@s`P#E2@ lL.hMo&O- %1]O )>ٓ <՗*E:¼\>0y}0 s*T8 jkoN &>?>^vH0yڙhlAWDEhN =a\޾c0@b=waRAWp`"Ǔ4lvHgX/ {u';;BM&(:L(8b*JcfᥙU`SxgOE;^ZPʑTL*XﶪΡL-ڴgZA׶tdB+7p`5=9ԏ Jb]J s!oHP'@\ -Z&=v j1Z_tZ1S06L0U{2du繃_Zw(J;Pg kÞ,!xDi&20B+3WlZ[Lv0[VV;FZa4Fg7Fc?tÃi}#OlVDױa ɛD׀WA !%o+T+RD+C#f.jHokvn S1McD58c=郧MIn3H(f֥3"بb'Hk;Lg]gz|ppwo3 { z f4?/n^E"?ԙ֖l]ubp (M^ٕ8.sq1O^rl=f9VVV 73W Z|g{a6:ѽ[QZ/t!c0g,rf%N;%g69~#_@Yw`ɰ0. @Aƛbmh>2.רs8ȶ '&%m heڢ9L]}aR*8Ĥ$^&+q5=kz0IT /m vvQ=m[)`{w3!q;1H-$IL231Tw,K'ۯ"ʬ ha0o-֐St2]Q o1m=jH4$wlM1}DM[7ǡ6& ;ir#;q$o?iDEt;ۻl=4d'Ze{ڏwzZi#لC&Vm{퇍cQ*,c{ZW(K̗eҙ]={ڹ}4&Ѝ ^SyUp,Z-H'qr1f.C{?wt3hhL/̻[0fTt޽0{:s+Ĕ͎јx&&~ g|yҘΎ̷&oHy#GOO8v v?z'/Zv%^ePdwsNB XaḄT`wB_d9yo]f6w+B2[Ӱ{`%qbN}}])dR tGZa܉#GDh3ͥG7zӟE~Ֆk [a}lV5lKOJ\ '59D6dZuϩI'θ.L,qX"Sf %vv S,!ܞDZ{71$%W;N;VTb0oZXЖH+/O*W͒=30>U&Kp v@?7:o?xs q0>?8c`.{.>x$=: ^# S@o6wlG촻ïfSI_ N1/\q-ap4pЫwܺ?X/<榔z℁C]>PƨȢy!߶o|9_q <[ Zs M<#_>icP&m @sbNggU+P4ޕei5_NwHϾ4qA;3<{9IrqVgꢎq-d!u(\Z=F_Bu'hz=WK^ň+;OU$w-E~} y[5;G=5瞳vwNGn"1IvԁU]}?:É?|E}vRwC6s'ީ[ 3*\SƯ؋/y"I3p6=6YqLn[U>@XھZjtrO%kqĕO鑶շ&[?9N '|[kJ hu֖2m*@E>Obfⴄ*7y1xn6m=54-tq oV=.kJp;=' z)جܬSKz\j\- q|tʲJҢZU^jItn!Y!dzٗE&sv5k[ƋarM.( .,y򉦯|:uD9C^I.$,g& q]jq?y?]q+; -I_iKtMˎꔶ5f729~m;262ad%?K| 5ɽ!o\A?퇂6JsS{ ,{ò O2(x;ӿ}@7Rq΋- %:`b_j[;A1YeIrHM8q?rѡMYZ].sSV+Rzb+; c9#^s]ՐKvn8<230=7")kKzU00krL.p9Egryxy6{' gaI`W:]=&*3aRF+pԲ*P>0CHaÿ3uyT#`6ZU~[jJ+gSgL@F?x"Trej|P Iot5MF,x7#b1~6ߚ4@hDŽ4պ?tyF\L3{x~><(kk9xxC݉fT}!{Rd]zԑ(y ڮEbayrp-n?Y~sȱf,wQ.ȃ|Qp94.V.J$^/PGeisE<>s$g%9(b(]&Fկ"OZUX/:^slSuX%U?qT11$~$9:^ASz>2lX|ɒxWw߽*u|jq|HѻS8'!~+ohhik*6hJn Đ `IZI8Y|<6wאBt %'P8nn777n/FM&J½l/'TtNgqJ$?Q2?+f[]*9PF_-æDz.Vo=㞏`-6éH:nHh3DCH<كM1Jwl]tr᠈ݞ}GC7f 3^g{O|+u%PaqBW z jMޒ}%Y{LpshO lic4zq(In96|iO>HYxښxk䟃+pBЯh)iW$!HX2`d'*?q_`ї[]]x-OP\|>-j_$CTm+*e@0qÿ Go_λ|B79E%d](sȿ 38G<-, g\B|=!VWlթ|!_uįWl%o#!{:һ1D[w~&bb W%U/΢_XO񓘴|5!ʷ3Dۈ__y3!_{ߢFeCww ч}":݄]yYk,UO_A?D|!I*_N_N~dإfBh>wEq5_K}!)#(=rF}?nqOQ x 3~J,Ur4u~n'~ /&]B+.%g_J(=M|bߞcs-<繤_EG|bw7 _:Ф;J@+/ixI/SyIˈˉ_J K +Mz߫LzErEԿ25!*BkV%o0Hu7YWGo]NF|"ڗ;o"D(߻Mz!MoVF}ķ¿a >L8UnB70_z(爟w|>!/ E|_"~!LbB"FRBR &W!wU\E#'~&!̈́[Oo%D) ɤ~#9/ Veh_$~"d+WlBmo,~(."Xoȿńo/"D|~p5$MzHKțC(b6/*/Q)2EHί&xo%D:B ~7DzBI|5!+D%~"Ld-Zx_8O;ߦxa=~/!C>v?~2G$ۡj*2ѢߡI'X;I"w=!]7P'?@_B1Sߥ&MU(#YToROFO&DTɾYSDfB"!6~e|b~(TBfw`\-"u|ep1|E_e ,U<Ÿ㍯YR i|HDH)e4Fʈ/ .C嵄:F_GNJT#* a߬"+UkBa%ki|\NfBUķ(nW^WWdGI!u%S\G6!sdчPuEM(3]=d4Ҫ^B/[C+~2믩p$?&1j Ubǽbڧ?W8(wMEG*/?ttEHf(8?ϏCa'yR~If2o;">51>d_TBI- KqR/C!0Պ}}Da!Ծ'?oRI4Qo!DW>{-ğm!Tu>Z|}V?|cC6P_il?%G/!>_kT^D[~ń:FF|bO'3 E)<ۨ*BOrEM,*B5UtE3zBQywW|}؟o5 |ka R>iC-(J>/&wQ[ žnƴhEKoUIK-;Ik#D|-[q/}15ZYFZ +MSy;!k$U}د#aE0""!NB 4~UXi|[&՗E6?fg~M_nUy>!״hEm%~"=5m>]%}nɿ6*_)!KYY9!~W?[Q/I?MD|!!⷗E?!~1!ⳏ"Bo*/&DΤ>NrOy-#DZ?wpRZˤ稼MBO Q?/&Dn0i@兄/mߤgZ$IU^J3v>'0 IlчS/#D B?pO2f 7~%ؗs?+!)UT? Q;&wY꿚? B,Kg8߃>xå~0ȿ=+N^*$|Ε_?4-ۮںn9iî mm[>b{ [w5ok}`3VXThQ*m!Ǧ׸];7nkm)y<팗;bm2:,be)Csѹ)9hJxnJh=evbmֆtY08d:dj0X'A~δ)d͑qhO( oayCzR>…zH=)>)-P [66DkMhBCTwB fm`t:WSҰSV75Y_hIO47k+xL #_d<: 0ň+/䔳}}D:4Hzr08{{FݺIQih/R?33/O >([?OfL|=(%Ӝ2y ? |fŸ}FΣ6nIiv~b!9,umFX|xऑ;H^Fg9FS!a+*X/~s?wc [ɢCccw`}'?U2| K}Wh|m $˨ɑLuay6FE}QWW'OO 3O;_Me};N8,w7t7^x ^3o-tB[xZN?RyVo?8ei5N$aFf5x#"/>EأaDuowM<+߯|YE2IG uT*߿qp+oIHW!o9\j=~,jdE=v:CiʬCTǓ]~뱀g:-䬻%NKKܔwKt:!d\Vw˯L[v>ؾKs4jYS]J/DOͺ=_E8-kLLsR\vVZ)JȪVεXHsw (ŞE,w)/)|Ois^hY`vz%C{WʩqLJ Z'ȳ'g5D*XC͡nr揦WQ:Nh`PK~/µ5%0<(k+wI~%.Mj R#H{ $Q mIDo3;}C2gO7FئT>߲6)i̓ss^,,=`zKywÝG(hO 3j#6FВ|RYO*‡S<-/SZN5]a׳l_1vQ|lhoQx[c)ߎN B7Ysswy?|sԿA"DѸQb>_@lEz^=eU^BJΦ-ӻÒBJ %jrw<~.!WN|]-swyyy{nJ*z -'U|%!lmÿkWQ:"!_Gf_Ö́:DߢF9E1D[ⷋT? &6Rrǯ+Q["D:u/'D6u}ݱۡӺ|;CaͱpwŊ ч=q D_,g7!owo/UO_A?D|!_3߼eEw:o#~.=;]278oþE;7끨c!ğ9A7:x߬O(/k) ) Dy*+/OsoNBї;_L/$3/V\J"PxY{@| ! C} >L8 wʷ|A{<9Y#~b;|B__$~!%B/&W/R\B_#~)!N|bJB+HB;*"_OFqfB-[I'ķ}d}O<}+9/ۤ}zїί"M(o׋弟9m{C-&D|~K)W^bG'Ҽ(~`OE/ 6v%!W8' ~7DO'_i ulUh/SD|2.U<Ÿ㍯H64FUr)%5RF|p޷+ u|,#7"/'D GUį }s,߯Oka&DW_Hkr Wߤc_ZJo#դ!Euo#y|5 B/g7"-|㯿Zx%קq }Ubǽbڧ8{߼">/3}9s+o12D_E|_$_p6D_g)_9񆋼E>xx>@{3ӈhL $oP~k.D6}w` Wy֥W?ۇ8_y>lx Ѿ>BE_|(Lj/U"O$~jk 1}uM>kϒB ?Io'<731wo'|1!դo[Q_iD|ߴTrB%>]+y~VtEH*Ed'*o&D߮g} |CRg!%~i)?S|Yh>og">po>?HEda/"P>?L|"}De}e|[Wb|5zRG$_"DW>{U.Uy=οByj ~KIُ<1XmOt\`~ \[('z1s ~+bK|3A~uR^D?z)ń:"=~ !72ҿrBmW(͌"~^TߝU7.~_Oe"&D~ܒjPB(B_XEBKUS-R[wN/%2KAVܣKߩ$jBg,B{ Q~3 Q 5_I$D¢9W}Y;Mqҿ=@ BO눟E$oNߞo"~y3G79ߞ,WJ(?˱{~;vҿ=oBZ'm/"ńn>4*'/EZ_{j>] ?ֿV| Dt?Io'_@9DBBa"~&u¿=IO#>G/rҿ=eRnv;~eפo9Yo ~!G?M:faW};n_+!FKp^,'Dn!=R?%׾V¿Y?~ LP~/O9ߞ~x=u=a[e^og.|{? ߞ'ȷ/|{oI=64}|l}{~]hïGt ߞop~.|1mVGcq>~1>}sڅos0uay3΅\ݞh_w?ʃO[2mOŸ'55G.|·2Sn7 _҂jv锛&Cƍn\ 7 ߁oz<U j/|§ݟvw?D7/6ef|Ծ8G_qϰT֯_:j>x$➡Y|}u8}}-77D"gga>}k#]#9zt(cQ;J=Nf~ŏg1BRo+txl5r9΍?D[?ױm~17ՖmsY[9k !!_27wo! 9׃1zW[?\`T,tx >{ΉaGs > V=eu!w/w!x :kN;!t&A ԇ5هR65XrE\=AdmjR,-eG\ b+\<²EmzRFoz-fz~35E vL}WjK,L[=asWVrNQ6.dDAY{3L7N_o-;R"Tu}=){n(tC9./=\V721yrԠ>???< ozBNx 8"TZME6XEln鮴֛# H~ݖ~loiuW!c0u_^L .\0^7p`o0כl-yédW`GwwHh_OYP}+5n8uΚ﹡t5`Scko'iYZ<~]@5f_ Cxn_w?']km˕Ӳ+BX*(ww? ~"ZZ_AfFþY']¾B*V}s<͍}s]髢 a_"?iRB_= þE/SҺ_8_O-Q;$ !kT[a_9k7QTMU,6y_f~T̈́95+_A;n+ ?Bz<_M|+}Ʈ῵`S6`Weį 8xǾ|rEo%^ vcAmV髯.$Nz"_Xs?U\ NLBj=_J%~ !#p!*BﻁEky_谅G&zE|^KHA '[_#a[ E^ex%ןaǤj~!⣗BN0s%bRyǓEXD|YhrBgcy\S$Tuy\"_RszSB7;ay\Q~)#LM Q?E̻,Nп"OZBO=𐿓OO"~%Ƀ g!?R?,4'3>/\8>N_b9P/nC^j~",#Ovd+2'my^lG-%+r{I/w* vUCˉP k^I|"rW_E^m,5įVD_k5"7*nM(Ljq|3!-ȾwJENE ۤXxM^K&y6BɌ6.>NڟBy[kN'4H}/ZxQx*i|9'M"ϧMvyL/!:ޮaysė)rj/Մ",e* b:Ef74"?_w] yj/o<{8ޮ9!y<~R~Bͷ? ?~k/"~x##뻿ń_~!#L>Մy#3BjEįM,<7_GH_Z2PGxt;**?Ng'n_J!~ !̅dgy7P8ޮ',_;}&]U(~9=C$_xK~ !ڤ<_C|-!ZuJCA_N(bOTqYI%uY꿞ZEݖg^%l }?kx,ptܝ$!Iþ/T8ޮ𒿝?!/U^[ȃTBcߟ~2v}kw}=M ?$-zx r|d1[.zmwhl8$ʪ9ɅӇݽA!|unċsq]҃}p{? #u7h/pJKDcm=*E"m^?1pLGXL#m<6~3.Fgzf%[gDoڎci{aqbށOCG [7PtD|r'>cyS^?o'M_>$;K qъk6|vfQ>,0ԶcqWģ[teZVugZWNs2ynfoJ{adn7Oh 5Kn-ge#Wԙag+47&Q!v yxG NЏχEacȽӅ2O?9Ͳڭs_oj>O6>3GX=Ha8+FgXv;!z3qoa[(m;ȭ m2 e󌹆E..r狨k.jwwrڮ}-L'8XJOp] Q7$?og:IۮzZ9KWmM-LÈ^i-LZEێKO=/'INt |͟|m]>| t DW4Λ4\-?\D i[8gP ೪SƤGsz>F%'"j [' ',ezwN:EǻΈżPg:wO^֙NᮙN#PǠ0Avsgyh{PyGe\kt>.'2=#o-^\x7 p.!A&چkwͽ~;ч$.ȹϔߋ*Y'EN9cҬDhV9؉޶QJ?˻Qv{^ T'O9j ;$ 52L(ͩ,Q*>B  q).҅O<0x~NW5 RچSN0=}Ks Q'GsG%Y UbI : }'lQkVL,ԣӱo^Wp2_w;2=8-bur"//ʤ.y,({=U彩>sT*+ߛO^qd?$Ï0ә RKG!^ Gܑ/NHzP~`za{C\85S0IMv/;M׌FtW΋pE[flB'-/ EzzN$uL%[{LNz3ڽ<˦62YZ[+JDn;?#.Dwrc2)oiš"Ӏ' [QZ4ꚞ5Ǻ:\џ@бJu4VfadI6ͱ[Bk$A,m:-9; $,v]e=v!-OT&˴іU&9+M=؈{p[_BO,_L0>{ݨ2!JAjcz_%g}vIcd!w%f,Gdwߨ{O}/~Ͷ 8p@_ZMɎ#"T~\2f3ָƟ!kq*6lE?Di5)o{=my2io_<9~G{ػ.MS#2M)o'.kASaHpO?XnO6ĥ*/Oec Y/&}IⓊO]@ğ<{xE-"~"mH~|=![LjBطD5O"ʉ_,4BAq+뵚k"䡿VŽrB_!ķ+@ Ak#䡿N/+ߨ['6yd/!aL wuį DwjJBį|E$^ۇ|MB"mįUlx4N} FCo!rϤIq|ek߮x_>&~H q#qCNf/g!T^9>_GUӉ/$D? k帛޹%gPen,K a/!s/#=W(.#_E(̭O|rN_` -<$zEl(%FBR7(-n̤WhB#a+J(*s6' k|">^K||u&A(&x|Io7_ ?o4͚_Ncy̿;yfϿt&K)EtI"뿋bE ۤj~!=&"%~)!_IW+b|&}$ZB\q aGoTH}̤[xqD>AfEl!}VBw:/e`gM}#=Oz%W¾/}ŤZxUo }4ob7_IE*BL򻚿;&"KMN|Ϥh~!y͊IMI_B/<+ '~ݧ'>PXܤyʅ6Wq: ?jt7% oP\?6T1kD¾*"fFfW;ۤ| >B?bYgϡOU~E_G- ~"Œ&hBĿW*b}U+|o$DJ#17QˉLWk2 /#B_I6Eoľw¾Zw+b}@3u[narK[a$rBoz\#k$N/;ӗ6j*BğXEo$~"gLڬ (_S*b[=o,</&T~|%#%{ۏ9Nslj/!ywa'_LO!\q)e_5ät|v >&OMWBg&"~N|! ~Մ/#WW[*_ !:Bg4"܋@E>go!d?-g7F5Bf6I+[>)/H#7)O ~> &_d}~b'Ip)_kO ~1!1$>CdϷS?{縙_?K/t>1S¿&-o&ŊKH,7\|+bJͯ#D|\P_%7(qQ[uG *6BWE^E?H&^터&B*_¾į$}įRgk4!ڷ,o п"O') >(D/7@o"Qqg͚Do6"߬op}(VZ~A< ~-!ʿu7oM(ظ"ۈoRE|Em#D|9C~_ Wj+zFy!@_ǯ#&Cʗ8 &bE;LzE&~"&e!J  ?FrEE|"7ԭ[~NDn*rG|!;I^Eo2i@ a_<P~%~"LElҭyw <} ۔/r:o DC|&M(cMzE?͊?"ȾVBNk k QN D?ݤgZa3oR.<$C91?W_'Do`~o i+Lz/PL:AJ*b}PWO!|QoEI屮 Xل(gBa)gN_$~!KW,U^^l9+/QW&DZEZՄkH[7 /&E㓬]w-<]o%D|}TKק~d/ L|!𦿌Ĥk>m`}Mj5 !̤ZQ֧0W_M2Be>B,a_I?L"$Q%&Y[ ?O<{7Ϳk! 0lM]$,(J17WojՖskB:X:E&4"? 3OC&a'? 3WJ4k~+!ob.jfw(%U/'Z"<~Z.ooQ^sn]+LJY䡿<3J_Le<_I<91逓4N\!UD(}?DjEį7aq_G9l:Oi1>v)~>e"/cM_<4NSC&E?L|5!פj~ !ICG%D:B_>a'-<乏 )}<>}ʿ9N('}_=_U5K7Yz鶯?S_O"oo,/TMo'D!?VVKJE<2T>ȃo:Gyå}5;NXe-wٕ_"3ܿ[޼g5eW}[iV^Il3;mZjnDYyEdߌ+\NMjwš=m|= zU9̶4*l1N;/TւDQ35\= ȉ`{ݴ=Sw'L6rKCۈfD-ȎntAxo|%.6t;:S<=M->[joy_.jʲ;/Rr]:.} 5ZMa<잇{tCHօ]\d\f!c >gpubߏB_7[(iBvňʮ$J3:>yڹ@c۵ yg6CZpj8݆l{Z +.}A @P}peUar0Їbm&ge /<-Z诏mc?=u6"E/dлyԟ&^t=t G3JjVzŅ[VHE&G4#XGĻyRzɎ` cBGyc/uF$JNDZ3,ur,ꌉ%=}}#UL/9}hӦOu"tVڟ:麒S=Hc+a})%MMtR _k(Gfb٢}G"릸dwWoWϩdၾSdkөT`d9Kݺ=܋x<{^VHdfy<%:uޱ#aMv.N\"ʄnq2KĴȢnAu4lf!aTg\"w ]hf;Gّ`.^W kd8.ډnHf*--'Rld&?d.pG 9e`2R~Uuf1Nd+ Ç_3FDnd駻;:3d]%|Ȏ!* lqNv%z2#&Ϻ-boHlBDwõ'e݁Yfv}}'3 j,N \l@8o;8;u:V u09ٝ;9Q]]vq훞1[fӺ Ά/9Z򨄳u2'(u4M6Q%p_aWkZ]ɟe6agfjryGn + c9\E6LJHe"{ о~R_H*tHB4u>dsǹ@WGorDI]ԱΎ^]=Frן`.1Hd%&,^Ɗaû2԰ 2*#;d_oSNSOSɮށԑȹm]ONv &o8uΚ` tCuYTᆘbO 'B'f&4-ґ8^J;1'N<՝;9ͲHAxsJhw<9j:^s>ж6{0Ǚs&Z΅|WVJ%;ygcUvD˷$QeNyidZg͟6&3`zHy=MMn_om{[+8"߷$Ǻ?{޳a'*p"v#'}K1%!#S:fpED.фm9r,uF[h|s}8g]=]~?/%d_[i<=>?8Z!,%]t: j/^{N}|?- w=iusj:/gtwaw]]Ƥ7V0C).mxZ?ű~9.]kt>.g9z= ԣd3d7]E$l&< {yc$ !shɽ'2#q<* `xAp?$G:ZoYDػ'}#4DG7с.c]GxYģ ިx,inbRox2 6تu48H Ȣ!Jj']soЃUots޶[0,6ޠvN2PЃ;|A,Y4\'؆FixÙwU1QZ8G;f5c/Ҝb#oM5r2)yo<0VI'LRqFv4& cP3`|zC͝7↿= r4+*T,;A?Z VB٢֬y$xEG.CoA2RcQ,?8MЙS2}puL ylz[T!vR-Ξ|EXGqX<L%2Q_VD)⸞7+w9M0a%'gUE?K{wL]%o7?DXIL31ڔ54r5Lk8[sk5﵏y7c'd܀=w7}:Ѳj"dn6}'wLfX wO{MxA'mBk_WŲIzjDY}¬8iiu+7orMQd{6tE^d}~*/qc yO-Uy^JϯVy7E?K/]B񅊘K,iŤ/4ey"Kyb^K>ZH~)! xʤh` +Hp&B/7Q %-?dzM4{agL?K{ a爿B*}K&}þ/u8u$/\b^8e)P˼ʣ_j- b}R#̡́ ?2'?O;CLy1>IS~~f;,s+ >~A|-!/W__C~my"~k,<7=ItH~=!,ߨB3ߪIH~7!;{ E>BoT ޥk?W崌組Z>4 ſ|-/6cS5 'ZBbBI_5Ϸ_W\+$2;?W}^ː?_Ϗ%d}_FI[ė+V~Y?WBMED|"emK֗ _!?%~F_ևa""I_YDCoߩH뗱#~!"Ŀ0i5_!?~WK|\K;@Z◞~mN5u'L*|N< i7 ?P?ZC|EM Xqh_DOw0M|2z7}|O|?,?eXJ7cx"3Ut_QGayϷ\T| _c#ǟśw@?I<ǟi|Bğ-oŊy?ŗj>[B|9!qr $([},JZ*xF&^c*+&yZ?.Rx-?ck|$H_AUi_i/$A ڷ)kL6sF<%׹ ڷ+Qg|"䡿rgʗoᛵ}c:I{7sv͛+}kǯCv _3׈Y'IRImCtCK=y?η{|4.ÿ_7 >ߠ*rl"?ΤCywbEsl_LѿttCa/'DtZG_J_&N /qnԼhҾL"H|I=m-y!DkI/#x_<$Bo&jBߠIg,ŕE~%ɟ! g-'[, :AݤWjBߣGCHmYa'i!X B't;I~)!TӜKcϧr+-/)Ty 54~[7^N.{Io|$NREaһ4y\]*ɽ{'_{IByAȾ{o&}!E&}\w¾EþKʤhBOGCg'yE%< >_ij הOj~I}{[6q!k[1|/&D.K>Մ(_MVB|36S[+/k?39ɷ"~ANB̟exY`I<`}#>ߛt}roF~E#*I_d_-_Hbo$y qANRTm?oU~~WysH,'/Pd̽m"n$?OƳ?A[_H{b IEzJ|>7+#K%}.Tk 3"qK_ob6Z|7(g1BO BO @l%("~^o>C I, B?I|;!XdqE$_J|>/k"?Lyc|?aZK5_cbJ _UD4_Œʼn_Mńվ!go=Fob: 6}o4iEo"X3K$5ks<7[_IV*_!M%%!$E\Ņ?K 4k#~ί{/% iˉ}WFojEG|b%ŇWi~!wI'-ՄjBטtE%Vp}?_C7tXXq7(n$yzC8߾M?EfB?nҍLL7EO',t)oB%hD8?~w7Ӡ}"&}g,˟sҿyK\;M7sUڎ=K%?[?~{]-[jjooֆOΞćg{'ںy_랶CMЉ2di߿WlԾC{z*/54E,MJS,eYZQpEv%|`Jh=egv:|M3uxdc@('&[2Qv [3]>0[.z~~!1:Զ`>YphUrXyz(SZvMFdu@XLb& ӍC)*jX 䜫 uo}No2L>@d'4m߶j"=6зQ]P^ġ 7㳸:ƬuoSΦm7ok?e_H7#s8%9>7O#_ n+vMcppy(,?+(˴+?ns~COq>/Ƅoz4ܳ@r.2#r$r͈7VqٳSc!RzWvo*Ct)ylly̓:ї̓ΨMMqRE褌LL_$_:{;'b(OMĮÜ"RsIQ6rfZ3̹[GY)H,* L-K:ˆ ; $SaCva%a35ׯ:`̎n';zT#2kjUqP(}8X>\ DU8 <0u Dwk(#OuQ-eщFTݑR.FŗGzS';:3F}Wo9C"UHF W/Gaʈ߇ݕcR<7$v ͻ@8o;8;u:]fB3ΜNsМ;&vu RݘKgdٰA"azXi]w_?(6NgM QXiع& ;z¶'6h_Oc #'*rN-i"lVټ9@f/Y6T)czu%[[V҇e_y-_/+KG=өdJ&zS{ ,lxK2`ceV>mw}:=S]G]HLuvJ ?Ywd4zT% G;/bA$ww"z%ꌪ q44DQN@ A2" z:>9ONb -NS;vu9ItL,ԏ7eN9sOx59h[-|]Αoݸ@H87_&:o'zrNޤXkFݴ&yy9jﱕ8K#>{yR ݴUKGz%I;M]42=^:.!/%\JO㓝] `c)N}C|gqʅz|7RzOSg罿$noo±?>es6dr$y*1%חM{:Iߟ@q7;!RFܷd)uHTAJ?OK,2☗|Z~ZsҮ_+[Fb/Dd$ԗ9"ߏN8^ rFV:A;x6=ܓCKs;#Ykx|' lvZyf89kIi' v,gS`wmw]" s:IK &tǀ+ߩ-qsœz۸t9³ 3by}XеIr]~럣OC2'ēG)XTOEd//{ƌ8q؟6csXm|)tiV<;__J?P {lӓs'_SlD3@ss ÛH8rt}|JhLX=#""X[Eu,a"lVIbZu;iySŧ{6uΝtҿ: B\ / lzbI|'̹ߜ߃^'Nݒ1iz}\nr/ U||]8|I~pON X:NF+\6zFSA↍G XU0=qBD r|sh yMfxxme> [Ķzb x7 3A{6zfi=Yý^Ǎ(Ç'uvà%Xt=|H߸#5qs z0Uo:v#lfN*u`r[,.0 z3Ch8DԵv(=bGs':(8޿?jL`ХBf蚞5Ǻ:\џSt^(XuHr}2%3i+!mb˩a,Zy]sVgyIz(L*Z3UM( wI(LmW%Sa?7m微+XȍޒE6OV&U۵^8>TCMFޡXj3h9hK@ѯ4u ƔRdU2MnenL&7ʨZؠNJl.PQE6e&MX@ Y $->)rc W&=p]sHKYW{}>Zj|k,(ҳ-+3C@duuu4۬p=lʙsيY:B[_t2z uBsS0C;~HG k_jv]ZlEϸ=MRA*ݐƲ[44fm :*!q3zslꙟ#t`̈b݈+/O ޤ]VԗL߈t-2mi*;ճϝ.)4[Ȫ[PDV /q;0s `VW83tFV]pJDAog_wy`TDB]VU_m#}:wfCߑGB,?xPi ^P+u8hoy&w$`Sy]FP<" :z @URfUUfU$7*1n=t<}Nd+eؓ5S*Q5􀊟nW=PIɞ)sg]2F[3QHVUl mV3hUGYi }g/vPf29m}H3ؗp'wgK%}[a51|,ٵ!cT^Swwy%4˪_]olO<^YPH[J˄{[ƻSвÔ^U_a&֩Ř (s''i3w0tqoyۓy<ֹTe"Y3C(8sʻ-?x~ksQv.stsٙ- ʽ,_oqǐwu? ~b w)]DfFþY'u?Wvs:sIS>O ٷBBؗ$~.!o+OD-E[]-%ג =_u-7mпRa~i9P?+/&D$>XA#WkRB*,5isw8o- aQ>6RB+K!H!;HW /ccQ\;LzG_OWX7r^k~!SL|#!j${~Xבn!q'>Aj5&}CpBI%QGRϙH|ޤ_Xq/?&}EQ/% _"̈́ߗ-g}ͤoi~ !I߰ Ji>튻 KB\k?o5?!~j}?$*BG&C$5!Xg:w5!!_:dk>Ϳ礏!/¼p2?5|BoΟǼ<2ZsEpW y~/[ yv< kuDZo(6C_GWl~FzMo&/%~of4[¾Yo6{Ⱦ/'}ķ+^I5'y\._EGl%~Ώϫ QOHE|)b$[L}c kߔkZk ѾG,R1Yȗ_eEB%\q)'~!仈R#/'|7+W|/ !GZF'~v$ߩF:lmNE}mNY0?XN"'0Iǟńۉ__<(;-1Ww8ͯ&!\;|5Da?UW("eny\įQB}Iwi~ ! C]o%4nF?+B\P,- }q}ؤj~!/%&"/%~b"$y^%x~%/&Wj &| O>%z{;Wu7_H(bo4=NNo2-$7.< ?[Mz">!o\wQB-a(/oM>IvRDC&"bE1/QM=>B|"o>J|1brBljP¤OirB&}"i>b| Y*_褯|jB/D|"_/U_A!O߈}:BMW(֓}2;};B}Gjܐ~@|5!!\?2'_O&"~B*ŵyzN8߾B ǯ!DC||֤k*Bw&g'~:u$HA"-2g!w1Ƀc_9s>!_+YWya來o)yiqg:EbZͯ"!>jETkjBLi/1Ro R 5_F BmW5N<웫oAȾbW¾+%J4PxENq_d@dFBgI- _)+ QįR E*_G 5y_E|&_mD5d_!_B-`-7e:B*j?HP;¯'ƍ/-<76PxXm# ðK5I}Hy=W#Yռń/'~"W_M_H{į&įUl"o&^5ķ(b}OƾkM:`$JNZ?@2|EwN/ _k_YMi~YQ i~?jpnͯrߣljU~|B7¿7RY?A -|ʗY?~~oJLyt'Zq~e}/&D,%>?c9ͯ&D:!爯u@#LMWBk~/ۣ_OoPcLz"}'X'j|8S/ /p8Lw, Lz)wۤ7Za߳_K\_BǤ[ė9`Lz"!/ N/6饚_!/%A+ 7"_IFEo߯25y9_oߨ%cB>!-7ۨϷ 7Y_}T^4~>. QWa*Ϧ0Kx^Dxm^ovĕ_B).ug_F}*$WB_D&B߾LfEWLJ[ >m?nx3u|Eom)=ˤ_[a߷/R=_DIC/UMW~!?$ZW?1g_O4Bf)_W ϿgV/ Ose$.W̘m!o_J(7q'~" <&D}, ?_je/?+0T.y_D|R#1uXпr}z.\NKq %S'J $_F(4\k/  ؤK1J\NO'}Ym|5LjoSy"}+y'xȷTg?_jikK)juvnA+Gz|R!k __NzkքI5"L"'H1b_IݚPFK|nq"q}%j~!꧇労5sBE'oP/$L: Q"R?߬VyA?HH_HG(/"&="E|EZO<ڤ;4?I=&B\?IOB̝@ |WIy=x /:?ݤ_ @7*nrW@fmdY\N0uWdߪFYH쫳 -BmM BafjW<5C~HlB7M^eh}',_|7;i[N|1b Ⓤھe(oI5]O|ȋV[M|b5ɯ%@|"?0i y4!_OJE7I&o$i3y[-Mį'D|xk (yo\[| M;M|Fߜ"$~!o47!ѱ"mCE K?[Nvu~UL|!!)U\HTޡ%tK Q? ~ !L2BY&"M|"GIh~!^o{w`sMz"g -|kWXi}H8߾0!&FW/3{IþWV?UdB׫-cXGHMfK|n"oo"oO.m0^P㧟wtfR˿DgE޼g5eW}[aٓ!zwۚi;ܴ 2di߿WlԾC{z*/ɲ?_"&)Wٖr^򇝑mwiRyI-H5bDަMPmkٗEm'n˹~G1Q2:zW[agx!5:=f9YF/#`ADUۤ~.".AM#Ѻ;tSsZ3xp0e{vmޜ]es9 t,;CdfPk(ސ;N2'2dgޔ"YC+Lhk}Yw[&?.hPp?u3e{+ùzSg"?iaW&EYoE2KoaCعSN;ճ/;G$nB tqu %;lFqV{q :Lżƒ'am)lm zK시yd7ɢ2f?? |9pWo9mEƉGzz1%JiLq0|9M7FUdvN1Y1cӤǟo9uwTgF}s_I(Om*m21{0¬jTڐCq'Ov[ۓv/, ܡn6>Y;dTGwwIfCT5u!d}sjp6*atK gL;3ʌ8dde>BӳDؗV,Gk˸$+"+[`)|z`DZ g3˧Jv-O^:vx^Vٙ:98lH%uHn $$2V2O+e5B f2CFk!g]|"2!l݁|y="sNS;vu:N e@oyr?t|mmX@sdCNC xr{'8:վVaٗ("Mr:Cq=cZg.6lN=n CirM2Tqe70'8!2ď :yqCq ɾ#wۆ*X?T_=_}lƔt,pgߋsn[K4—9-vJՂV>KcbQ_9pwq)OO+ɮ-Sﲜ\[c8VcR'Nf/Z1 85Fv#(",G\_R-z Ơ:Ĺ:FG:gBM]x4ʚX=}t^ȲmCF+L^֪Nz/S娕㞿Kcֈ z ϋF!=ʓsYA>+˹k--P\PMbq.oıMlҒZ:@8f||CVn _;~7ej//~Vk^o6ctFz=^YZ'}b^^Z79+nRZUу7yi Z)qg- 7xi B =5ֈ{lBP#¤Ä@DOe[zOe1Iyͬt2FxܤМdd#7x^dϲx / Wv/W XJ=Js/xJٶ"+6Ʌ; ;`PUIXoYUJN Qm[BU|羃2zmVOǚ+"B%An3*ߊQf2jL ܶު1S]dM:S3z{1WKLqxdgɕD) C T:$>Y%xpQ2㟶EQ qZl9մSst g- sg/p} Ue*X~WWi IK'񟵦ٷBBؗ$~bB/!K"a"9 ^_LʉO*V8AeC-oг$UZWxϋ%3!W!jWط:BWO d5}kMH|![O EOl٤Mw&69y_Tߢ<4;(v QVqPy9a 'xI"B7v_Jw{/#^+W /@;5N>[x~_A$ o$} Vۡ4 !@<쿎{ޤ4/!I-+^ABa*G =(yؗIqBo e2 ~LJ_@$~b M&Z~/!D $~1!Og/w_A!3Uu$BVW*"GVMzB?IķBqTMO '{ Ť' ǻW1SLznz*K>ͤiE/"tBIX]/"2V>Ӥ5yVKQ"IrBOKRBIeFC/"yIW҂r~ҤOk\BS&}"&~"1s_L(I_C_@/ /}IB,KpE>BbJWMW¿kw,׈&Dn75F<rC˷I|MS^c "en31pلh /VͿI_=1?+_3آ Q ~"D&D<3 !*6߈o&߉b'pw'kͷCįQDٚD\<&qML7e_`~+s-g~>7/TyAc%ڎ%"b>\cRKHb'%VGƪ-_F|b :\:9f"K#e:|hT~f~̽|lJ0m!h!=VO\˜=f,пZGZYNj&ѯ_/#D~7,ߢlf;iDZV u| ~"=?c,< an7|&v9ń N+\M:_Al?K aW*V:'ewi5!Τy 7'E ![BE~-&NKHpA_G񍄰I7:(v[q@',GMN+!A?j̈́zMG[o"R}O?ٷ~~8-IW}Ȥ{->dUSzQ#2yg65<ж}Y&q~…6 *(xt [m:}ǡA~-ͭM6ôImwSٶFm>bTxxF\`j~nBƴ37cPt7;6ӆExQ70N3«Noܰ]ɡǙiWpϊrN<8:W<[;Cooi3z*#Z'eg`|) k}3$oDJZvawwb\8'ѝ +{Ɍ#Q%}$k/!>4J:osͶt8/O>Μ|?%CP$S!Q"=Ԥ ^v̜d8'zSek06G7({g̜B?lˉܖ>='_ɪ[u  ZCHibš3=#>0 cԠvᣏ?݀4v;ޣn[g$v8?G׶,˷pxOvjl2ڳIl 9̮Wߞ͛ygfe4i__|nQL[XƖf'\'cr'1'xtk*Xp/=iJ7 ~X'{)G៫;c5#El>IvZ9?]W楑i m7H/[Q[i6*79{|L{JO\k>8DY"!7 d%N#).x#'`$X, ~6#gGeKG5#8Iv%?b) F.m8f..]n oΫ~Ѿ tjh>iaIJ,|NzK3n"~C)¿XNܤoR^Q'|'xW{NZo\cZ0K9j 4qFN4dq睴sE bt 1TuwF$yT4^]ه!m"ԐfO6w $[zR=3v`w$tjem q ḓ M8<ɓ ^!\vlPGIwu C?gTOU .$N9%{Y--Ga們 `Tjs?:^kUG{=؂B.%a]YCgyYЌ*eM̿ЮLlaYv͐:a;OۍT3NTt*fSV_Yo!٥6` H\i/~?udGj)G5c*ݝIuT&Kc%X0,5iAʷPL='Su k3n3\S';:}WoLEeWII/`)ڐCVؓ] ,^Tg+Hv7Mgѣdp#GM}@!iTIJ{qsmm*C?wkh?pUʏsy5_LYG|K>kmX_dn浑zBطՄ 6ZC6; ayLZ'm30~Vo&["+-;H㽣1.пRķv=ʏw웙_GG BԏWiJBϕ9QX_E|zՎ!o Dkߤs6|~~Cq&"Op웹#8+Q?] G>z"O_'(_O<am4A}DGC|ğ&!3Nz7k*)BAhH Q?QAM"B=RBK!8!x+$Pxhq27{IO' BF|#!{:x6IB]ķl 4s[5à|ұn=*b~)\ $x.a/Q oCINo},/\RB漏!d' 7RJ͟6 $XQϯ25NfXT?v y*b|?_^G|= 6bu,xCMd=fqz VoTHyM;o&D6-w;ކLay[y~^ޯ; EC߭Ȥ{5?!߇#^K1ߕq'3$yy Yh!??LQ/_DˎTNB~Ah|Kug+:>6xȋ ?ȷRG^/q_ԯYxש ǻ¾< IlB@X~j\߬'9Im ~/$DB5LbBo!~ ![$eN| ~9!wRq&~5!ۈ_H{_Oˉߨۉo%>w*&+o#D=:͠_ԓ`4 : LAw7KCK͠fjmw`3(e:wC'79!ʷP?6:'R֏͠NhJBFN[On"DDC/kq/LM<Xʷ&B?cO?[o?Ai[/R'w35Hݐ)Co'~)!n/#!\ϻE| $f+<_@+B\{| ėnQGb/t͘$?؋o3<{1Nf%&It͜t{ m"7+| QW:N{U_q7Tʐ} ~N<=t7k}{ w+_/ JO|#!7(n&>h҇5IEq"?Bm'D?|lFO:Pn~!OE+&y 0_8A_RxE9_e(/"D5u7B;~4!o Y' !/?ȣ|!~"5_J^<r}? (7m-c S ?% B3Y/S&Zk_tEM|"Ƥi~+!m&ݣ IC=ė(k\g5R(bI~>?} B?H|bI儰#&}"%~"?f'4y*_ug_>O| !g_ ~!Ǥ/ZxEN<ƟIb~ !-rՏ5Ji&~>!S8&&P>d|I[a__BICOG j5y9_~eo4ڤ?X7įSoMo&D|.Bo>=/_3!G[1gw}=h_5o^%>_X_60Hh|BDܤey/>_0߄5f0>JLCx+b|YD $_Fd'_XKf%_GHR<_Br?"OpB_G(?`7?1Cl_O(. !_H@!~"')e;!kb5ķ*^NX/'y%7W¿ o'͜;C"Gxȗj($L9Q1kL~_K|b Cߠ !zf}o D%>hқ51!y<ʷN|9!74gN?x*ۤjh҇YP< B1 y%>f8U5d'L~?I<)_a?mo-/_Y '>ߗL/ D~٤oZ+'?⟯5_Do<rE.C_\>]ͯ%;&}":Ez>E' ,-?Qx| +<I˘<Ayܷ;ɟMuX/ʯ|Aܟb|'ENe_Jo,'~ !<ҟ4DOj|-K$~1MgRZJ|!!ksu~)?OWK_U/"WM|)!SCBOoaL(#3m-oE[A|޿njy43}6<" o2"kU\M,t.oBO# o4!dREo"Qq#lK|6"~Xgoo"DPx=?ΏfBfi_,I>;.a^U88݌ޖx=K$~NݛfZ;޺ Ξ|mּuOۡ]MYD&H͸bפ}Wj־SL\vuY4YIӟ)իc1*g ТNl6\{:,xpO42#ґ<F7ͺ;0F Xpi#^fo58Hhƌ*=r 50DZ9pz=d_*Uc u$;9ܝ(i!%w uF]vZI{{G"t`^w_UdN)1xd*{]:֟-*sѮΎA>qX'I 6M>1Q}T(&hrYOٮ^#YeCb\>{&IwuFZ0)Z'[9ȍ6c^n㉞S=Vq㑆]Z?u;uwV^ A$:6wSձaعpN;V8dc?<_"E-ZL_>$;K$NȦ~H5;2\QfōPi"TGod9pDZI60=7p"9~dw\k/@&NvwtfbKjVÕsx%REach`ؾ  ƹfƙݩ>6`8s;;9Q]]vPelLG㪫i'D ݇ycuNAhqdSgD^\er@I,Njh&eՑv^:Xv:Y$CuDgvÙmazc~C<7`p70~5dߙ{g6(;XwƿFdLFV,2&EkAzI(\ȁz$+c(Л:#A8îLMnf ڰe7F‡ݐ\lQ`MW-SK%oQy+8aVO` T煉8w&YtOYy'Iifgy$˱]~U “}..d$eLZ26lpe?IW< 9k,q6ɄT`_Ѻy7r)/8ܹjfqbg_w FiPܻűrFRU}vSO]tGFLnMu O%S)lB3J\p3xO6ôן`.1H*Fְ}ѢֻGÓC`{́~/ w2w4")nޙzǫx@ڰ6٘rN\Αo{^"}Z[\⼓Wp>}W+"Mrzj,j =<])慁+$k3Fz%I;L]42=^:.!/%\JOÂW1'&9B=>[)oj5=7\ XkPYY{k4\=:UV>4ژ3z s)Pi3qCձi%rޫ9nj},3&ZG6WQFDO~=\Sk7h~'737=ssQ@P;(c~sxB+qN63|;W\>cfxY9d v;;Wu /o 6AN9UٮbmuLg 9@^sȼ v.p$rʝ!B#熐%:L[nXŬF~)| kpҷ".p+r 6<]:&[GEM[m9H o=<<,#ia;8𝓎Medvu ^W=eU9A!j//GNoN\mZÛ!yy9j oQz/Ar`Sl=4ۃxY|l.l,rN6kN򜵆7] /A6`FYx%1>~#bM,082۵FVEt nY;/lh#{͟^ϘPO#| Ǜua֎B> {ܬmVNţhbpvǜ+N\K$27xدm}U Ө l$zϒmwd 0ie2}})ӆTwtԍȺ8Hd5kDavy/f6-N=Կ'L:Dݚ;.lEi5FXSk:;S5ޛ5b@qXU XIOX/,Lf6fd%N.Diq@.L;P9SEP:|)oLMQ(-~DZ6ff`_#KocƫOg+*ݩ^85[4?,|o_o*2Y TzΕ˞6u V&FV&+$UqԽp)h8ɨo;39hR5X7BW>*mLMݦph=%rђl 1*+gKlghj͙g 䴓&vR%]񮁤[dGs(@ O%L'OwtJU&xê:[r8L vh쓿ۚS)/cyAO;![O8{Loz E Lػj"2sɜ)+$:5tXA# 5#ef5/S\A_O_DR7?+"aJǩ}`zo uo-+ד}R}ʏWƇD|!k"~"'ڢo^MK7ەd"//$Dv5dhw>/!D!~Sėˉ_Bv! e$%USQ6 W¾kWbu7¾oP=-C*x_M:{ QrOm#_xgϣT-rwQ QA(&}2N)sB|g_L_B[/wِe*'xۉ_NGRq?Մ$8BoTNwJ'Sq7?6BSKӺyIr_ w ńLzEQ;IB_HEK[{Ih~)!ywKIMzW¿/Z󻗨^o藶 Qo!/k56!PS4~F~D|E?٤ibB[_YjBm*r~ !N*6o&[Ѿe^g|+!$DI_q5|Eԏ&}D{ME}_i5㚿X<2*)>Մϧ#3Uy_L_Z$׎nHESD|`"DdBOXT?i"3RA쿍oĕ9'GsH~!~b2Ak$I~c|"눟#(  ?=YEC"NHs"%#!Dzy_h?ȃo1터𗋎U%RA_Dt[EK~!s 1l$N|!ƷyU !gyV_jDk. |8ɬ36ʽɟ-Jra:e8=ÅQK;&N3d.E=8tO&usD.N+\qr?\< ԥ\gVMP3j&\~vj5jǬF 젿dZC ZruzZW[OoE{V§7on©}|qT;sq:v'FϺL) v:?ts] 4I%49f{R|H\6*~ΪegXlASTҩ/aG,&_Hxx O|mM|KHkǯ mi20vI.5x@KugIw X|e}b"xɣTٞ]j7 B.&tM;6rTwI޵̱BR =;o`cP:tT{V{wghym| ^Yx" N4Ts; En 1bȄ5kk&e3@y!*NveN2PcX09,q4猬Gm]5> ɞNr GMgctbҐvNOCLN,ghS}]==5`om՛]a*mi7c~$NNSN%8ctH3jߐQO<=x"&i!GxÍS3ilJ=Me?ze0gRPq+1h3ETƇD-W' Ny4щ[䡿xKG?#qp1x!:Vy7^ =DCx;O?^1oj<&|L%xC?pZjQ~)"e!2llKa_RBi>܃tL~ ߌOs,9gI-q7W$B/3>#~!Q/[x2YHL`Nߔ|:"$>.NߑJB緕sO<ydwsP_C^<R~ ?ԟK&?}CzLl8ϕsI< B/sP?+"&R@o{eUA1);k7bCrLO~Hy'W !d|WNK"'_L4 Hf(:!>5y远rA!>;P9ħ"3i?sLɯDu*#~ ԿJQL*?f_+EPVBE<ʟkiV,|ty7|Q oװ@xC^sɻ(po>zJe2DZq $m:!9+o$DV@#k_J/\K_Ohx]7 @[x;o!n"~EǫȘx~8Y'}mFN| 26^-34^5!UпK,}߿C"{$;DX*_!ﳴ_M| 0_uʏh_cy迎6凹Fo!D_S"ߪͰIhy?d) 3ڷ(_"AOurBONZ䡿teN?!O| INI~#!y?e~XX+<O3vA/?O##if1G+g?WoF3o\D&~1!CU$<by>wXx$Nz! X's_&=./&DB?$ ?꫔ yUW 3__+hׄCk-{կhi͂YJrA^ޢ-VyyN-h><d;uz_AyWԟRY˅/WGtsBܣW,Qg 1y_>"_-o~F !#B/O#_鋒q_<үHc^o{# ہ+(]3iXLRBߏ/W>ޯo$cb} Uh!LK~-aĵ#:"9u* Z-o?J~f}R([t ;8;wpE~ߌFpW6n߳qd\xr+_K_rw@m:Ÿ0cu]m& 肝{nڸj:M8%:Ǫ\F\䃜OWt.zy1vGTƭ`,ҍv1ENm醻(mA#ゅu<%HCb1|!VO4RD.F:Gs iEdtqa>L6x(hX bІ+Cê)'xk+jaA 3021(DcR"86%P4A" 6閟29b||HZч&&y5AzGg8,,jd% V 9lt8?L/R?50C_:3b]XF_8aّը2* Ԫi(E?e|Zg) YkO(R~e*)IZ /RЧe5[qq2_7d58(ttk2-8GX?AYsY._$9VkY:7u-5R~y-}Թ-t]&kw)g׬A/ߗg=悿/.Rm[2*#?/b y8}BU\Z_x&vqc!!kĚzOOm-F NTBMvHO)@ܯIׁ슓j{?SFݑ[FMk8D(+/bP]*C!1LH3\gωcjݕ:[&?5CT:}:bP]IEWr{j Y2TiK VӧghԥΓ]Ǻahqg(T,?pq]Wa qs͂xSǣ^C@a:MNj%ik0Me7-F(]xbovZY?m:vnG@ތ$jtw>HC$-Zg=z}̇4Ґ M(dqH˥1Mur#qq$vsYtcyY"7Frnom?לF{%ɕ_C/,CNvz;WsSGk4P]FCݦ ܝanYaq(<R=gO9XeȀ?{u%eyZokwHG_N#zvw uu&5]n;ν'z"$rcOC;E\f3PbR% >A+XJ-(ꝣx9GbSSqA;a63A8~}; wFu,۷`@ 5NCks>͍5h-.}q!*m*N%/~{}*gVg35noOEmR8Sw-+~0M^&ʹ޸nZAIil*7=ݷ=\ht{c\1W.gY [zv-{޾ĀrK+ޭqs]?Ok u_юZxLbqZZͿO"qȫ@B<?M瘛t 8jy*9NVy7^ eo23 ~SH,BTgy7ق8G|w'DBrTErw6`P,[D,jń1?eK BO%e›G潒H\BO8]M|5!ڧZB&}L厳"AY#m(a_WPH|`3o' B䡿R>b_*9?S%ǡ5˛-J|\3c\) ~y_I"U~_M["k,&p풿7}7'-˼LooS<D3CPӾ;Z|E?W9y_LA:'Z]8UߧSE]MIqi7b~6D@q6q^X@yR?^_ wLYԚ2NWm7h"ﱴ^Os%!UMo&DEQ_LG/YaGo\I1UC^n%3?"!~>925W?"_Beͳ_' X&1![ʍ&E~Qn,Rn<דt$Cw t D4DfifBJ^C7~B›R$ s7{?iiu%4f+ a_"߉&?O">7 bi̋"B0-?1%P3j<~1 _h1Nhos&lHϿ %2Aƹ>Ĺ ʣ"1AgE~L _|ՄI!ʏ' SKo&i!?E+Hgp⨚6B/ įl'/#hM!??4{qPM~+7E+N,%QM|LNg ƅK"ꈯsGukhz塿R>$_ ;wNXǯ"%Lǯa<_L,AӶz΋,ZBi CRӷˈ_@(뛉 }z.6\BاNJ"ڈ_"ܩ&k U$w5+_X)<'6B@᧋}Ⱦ7¾ogu}<;(0?2)v GǼſr8Wr~ZƉ G(w(VqM*'jRh^:K}'%z/B/z/EUq D8I|` w28񧁰rbþ/U~n ۈoc%~ !8b|rb( $?j$N4KԿa_,cps_H{.ZM!3Ojxkye~x>rG ??C" oI3%! 4ʍ ~.!WBWB֑O L!~!!&~?KRB7zr6_>%~%!cįLo!|ww%P8?9qP%Pˉ 0'tⰚ2J~!y!ZbWn;YK(!$DL"KėPB K|)Մ_ bϨ;ZgYģza#-hrKa(})!gn36Zf}[%o+K.l/%D ~JKGJFB5z".GLfto#D{5yGv]j. x~$ Bǥ b7{ao!D]!(0G9Ƀ?|̿s7oNG:C/3Trq" Eo&J~%!!w@-(Eo:}"#~jA_KNXį?ݒsW{(?'ZBA|!? 6_D峉o9:=£K a_!{1 ~ !/R"A<6gLѿfTwYQyjR+ѿy%s ay~ɯ$D:D_C| ߯'97t-$&b}wH"OwγVK;,Ŀ wa{uztEO|}@>:}""BKg~wC-W$7{_+u7 .ܛޫg,(s2N/"4ϧ-g/'y_[$A//!D~YY+ 4b_'_wx_?uȣoٟ~SoK~=!oCoTN?P?D`oS~liؿ~&abKke}5 Ѿ oE1;E| ~u:" QN=yz?C-̈́yﶔOWd{[7: XxirwWɟNL`M67Hy#/'6ɯ$D?y{U'_#d=UH~!1 o$uzE y~% :""a*yﻄ9!\K\K$ w'ywBgzN/vB"j?G/&M%Q+B}NxNȣM{E4gߕWwy= Psuz7__c r 67{iR޻/!nK 1ޣ$:}"G| ƗA>Lp[H^Bp<DURFq>!Mo<f:}V7BgBķ ^M?} !!D^h5o"C׈o\Gӷ[!Bd|v F /!1񥂲tɯ {XJ|%!gWbNjB#o޿_y/W+~# ߯uEC|#!N&B/y= ?X yԏ緿P-!76R/eo7{iؿWl<~~2Aٿ)O7JB># قXy<ɼV}[6mɮ+H%R, ҞZ, ٺ ^4l#E;ZM8ҪHM=V}{.B̻^5 ֟Gz&c%m .j=2bn5RXэW?atČ766cNlܾgcНF-];ו$_w.@H.`ۤޠgY D.=nCbsFA^wi PtNnr[sMQ䆫9(o.Dq-.th3/&/Y)2GM}_>ȨϹZۜrQn2zTLF磿-=y 蘚F tQ Q1,됵9saYrN$<+۷ha?B 82.񜦓Kl["K-E1R_p8<]~l<)̬KV̋ ;5J"7r9vL`É-G0M5'A ==`WʇYΞ[w݉ \^PV}LP]+ }P'z{tmVAcF9rkP%v⦣Aݑ';;'Ntv%2I]'>hbCb T‚uc%C-̯Xظ"D<}$h':&2)4,m ENRX@fݽGo:w*.1?~[x+`͸hP5]==Ao_/ǡ>ẻD{:4psp`m=ht=:lm<#ߥGBzO'̮n^}YvvB Cc*NAș`N'Tgva& $:e *iU֗|opYvg;h8wh Vti r(1 '/z7 u+_$}Jcay?$:|om9@wL^!00 *;hoN5vx.isAߡ])E!6swa*£D#2Rn2"Y=+uK'KX硑}Fpv?%WL+c:{τiB?[gH"5'C[B;f\iŦDkݽ z':O'^B*7&Ntw:څ\ڌ/bл67VU]'e?g? w3gK)se LY}n{>qz[bQ3N^Q  DGܔtaCvHv̾ %"_zع2VsCn^oZ Γ&s:Nf5xԳTRu?5N1(b\%4rO-RߦraM&ZC#.e+.UzE%YZHL⭾ő6M9½2oY6Q%Yb̢,^lbӋKD6EH,:)"Nb1Ud [=i'(żtRRqg(z2.%f)dNIy+Kt1WNy*E'y]\xg>R(o8ś.SYiye3Zd-3egfX_d_Vߗe=+y,NM3yYj--s]:*+/D~kߍ?L7%?}T~G(o)(*p/K{Pr,07:[NYX>W:4F9a9qyZ/N5GH~ɨt0&,'t:9[&%U-KgKjD:*:}ɖvpַd="5ODgґMIh\e r7o-y+}Fyg<3S <,Mqw)euh2V>dB4MBFa΀_*oK3xD"x3etl[dxn2&%UZZ^HZpϼH/#Gɂ5d!jmZ;ICNLX&>p3+ݼ'h9@gCN:Ƃmʬ?"Z% χ窱V& MYjMyҩq(L:-I'+d90İ;`tXFNؤs|dyc3+ϫX$!,CFxV sscnKT#:7NƂ̈́ﺬ|qz<wSZE]dH nRkh2S@Fa o)OY֣r 6&t&Hg/P^yL\p7"w,R퇼 Xp koVlmwsZyy^$ %,q /PYyBz?/F\2n&ձ$A[-,e5Xʢ&2EoAQK:"ݪ^g$Ź۳[%s$kZ֥nR2ѴLHpԺ\4i* *Q=JGVq{q{z(O|[Saǹ5˲?xBjp& ﶑8y]\}6`?Kt)MXRnkBQV>/K7<"ZGa  kxw$vZHGQѤKzHvdCMM9ǂťץ:ke_w'2%Ŀ-I=֠0~M?JuFɯKf.fRh]zo>=w<ާ[k0u|8nЯW=>2oRJS/ l\-z4Hx $lp^(0_AZst2ҺaZQt㝧v;y?1ɼ/9:𣀅k񶆸9bixC+BiM<埌R#9w,}}'%i\ՐzMZ*OZ/ig_[8 :k!ޯc{ 3i x=t}L}'ы6֘RijYLͤ#5HfFA8¦QMwOlmS5{zjNE[+Fw29 q[So;.=n+aWX'{`qinZʜ#_#BPZϠ"AB!t$<# hÝwǛq[:IFߓl&ۚ5޼VWzk:- =zPc}fæ*\shހ!lu2QX.2UPCW4bUFFcuE:}QOWz[|Zw6KZ~fhŕ=7%}.;ʁ=m:<߸bJ3詸xņ7%y'Zvݕ,kD^/iMCG;8~'!9{O/]=g^oaKj{”ޛzN&oIƘR_Q5o:;b.صg^_; kwweIFL=gX#7/8AqNeU"ope=F1 $j -_@<~_Hd_&,|^z]oQ9o/#M&~`57¾!o1crBWB|L 嗒,B_&|Io6%/N|)!ϼq5W} (_.8Ǽ^R%҂M,_Kk D Ýr~"D5[!όyؿȾEķ¾/loh%!ob_&}+o&}m/\A[VK~!["V _([O|3!@"+ȾQMm}TrCV/&y6gm!oJjBS}5ƾ9@W/[QHNI~;!B>K|귉W,_%~  ~'!wKHByO}<|N?(G$E_w0!Ra7wPK ߘ7܃=Ǽ ܟLVaxi:C"oւi!q_ɟN{$p79Tɟ귏?sń|gƅe{5?PF_A(s ~#x!?:D|B_F|`3O!~!!Xp O'~)!䋈_.Fį$| 7|)[!_F6$?2# \%Y$*rޜW"uy~ <aUaPYg ޴Mqj5ZBBE:H"BkȣX,By_f)귄F2BاLd/'yx) o#W^3"%7!"6W*%}!п"!c(cd7C*_eWP/Uė'~<v6?]7~_ aB>Ar$;QttGH[_7 __<Ы /'D)ss$׎u"u I]yM-"D|~,eʿw{AH0I>-qBϧtE}Zxc{ NC焟ӣIu2gI_y_ýC"g׿_B./#D|_,ė b}4CߏB~[I:LWBOCgį_+M _ \J$!>D@|'"[ ! '韒!?B<MB͞n ǗF/U lX_Jɫ ?P֗h>|e4V #n;Fs,~FkN$SE'H't7I:[2JG'Lh7m;U~/$~nOy_D-"/YLBf[?%,_xZy|+F|_`MMe{]kvۅ$ol{p=[6DOG݋_s-v\ m=WCٻ];_H=d4)NQmeCgѥ{܂ct6 kqڀ@Nt-V} y*nb\6{Bv]m&e/ع঍{(6Z58r[O$iNӸv%]rѸe*Yv^cy:{4T!d$;O m4X. ^I| QZQ2 C/1va:!#j{6l.AF⑹ٷ}=8/.ÂP/?B[RhiL0$srIX3ɰDz7gh|ؠ84\ 80qZl9 -(8dh>0pѓa"F<I:띹*gÜvk"4 zAC|{J[j{:G$,ؓ5UzS#1 q /9Rj[[1䈹-^+sZXÇaR t)GZ֙˲9 *%ndp0FkfF_={C5z G89o>#[צM|vjp %gN fLl0} X0ui+ (JzGw68.,paWCҐz^H>Xyx# `X`Ôaf[4kC @*Ğ:\Q)նO c$3nC3jSr*S6 9;8S+qY'V0*iiS\VލѤ-.+zvuP'] M~a\ېN?7Gt?Ͱ󗎔Ӂ!UvK}n̔tnfʁ]}'JE*zy~:1|;wNQ^ii:ARGeuJ:~G4Mi ^m,3EFiICŏ::{l-"P|pKidQ3d$`9qxZS+Iң|Rz49 }>q}->:sQӌ?B6>c#{*[EnjAAOwg),iYk H >*#ۍU%]|#DWHפDzRnדuWC[AG3#s jm'%nޅ\սsI~s|`qh,4v4xRl;199o$oNCMJoCnMZH7sQxn.Z A) m5wCIoG:FZ㘤"r1r1r1Мs1В랋)ډ\ L@6ڕ\1::;{I{n>Ӂ\Q\4<'OtO. Z<웦rQJ~!B墠\["6\4UjB#V墠BaV4'e\4.>˭**T(h@T. oApV(h&EA{"T(h6yR>?_V(h¾\ƼT(h D\rQLj6M墠 #:}zD֪\4=DwăP(hT. uEACiKM墠oP(h@* | !/U(hV(ho!Öc{T. g\2B_=ʏ"R(h6yEAC~(h* | !mzfh墠]ʽwl6Zv/EAEAh%"_ڹ(h(h\:梠墠Ξ͞~EAEAKEAs梠hC -#ڎ(hiGA+92\8hoƴb,d-CUZq:8ht1A˰Ń+klj8hٵ9Z=_E?D|\¢\XyطI A Q]ė~ė\X4~ׅEHh2q*gO¢o$rʅE{ʅE3;U.,2 [7ܻU.,ɯ!߭raC'U.,MﳔϗU.,*-81oգ#,F]X4ț~ P/O fS_raрɅEShT.,Fw#;em/!"6? v !g{< wWP/Wa'~ʅE3 U.,x> 4eǓ/UhqmdzU.,j ywâ ʿUxuOSw =5* -"D|~,e*<,OTh\?ȃVaK|)!{jذh&tPa<\e*z԰aѬ3W $P~X]yquX4NX3UxaL~5aDa˪-hˈo M7~S+(So$"o"z.δC Lh7Ϧu_GgXxA ~so_jgy_DeiE$?g1!WA| !gzE-!}5g:zzɃ\A^Ʋy=%-*9:c.]kr]|'®®®®®{®®] rara.1t xv.Z.څr].<[r/lx φll³³1 ֞lYgl.lr|c'C{Y1-mSSO f ^8rg_ǍHQ^$3)[Z'⸥5xu6q+ba)V8n#ՐqܲkGs {4xFq5УqoK)[@>_g?D|\\|yطI MlǗ"xҎ" T+MZgOⳁo$rg{g3;U.>2[7ܻU.>ɯ!߭rC'U.>MﳔϗU.>*-81ow|6ț~ P/O fS_rـgSlT.>Fw#;^Iv¾M!o3{g ׶xCH|l~r |!zg\|6X_ޠ[ⳁVg|6ߠc7Ϧ){|60>D|g3k3>rW\|6ȃS WP/c|xNǯ|Vlo!Öc{/S D|x$?gAץp~ ]K ?Sg1#Q'O|N|_Mqщ6"/w_#njt x,?FB?QL~!쟤SE/#~ |3)ߴT}ci$0-h꿈[biE$_F+'Ͷ?=r¾ |ekȃkݏ}i*9~~xC\lr.޻:OOOOO-OO]cuE/h\\ c~]..Zr/hxhh1֞hYgh.h~v푋fm\T]82 -lP*,lAZ!2 s*0gi ^MJœesh5D5dZ, LQaFG hs{[R sO-(R0gj ֻH>*#ՍU% ab۽de2\7ZAβT. gRlA&&ݯIHE8wPƜ\ 3Q ]'w%3߮LtѨ3 N>9.ٸht%EHӔws)<pYfxef8%"5 6>{> lۈF4[?M&FڦKiiYs~_\[?%g޼U2 Йhfp ZSc5<8 HL*%L05}jN6-7ۊb0ǤK-RItSivK,܁]ĚM yfXw&9S~6kx|`DM =z˗w==eMcסætEDʸY<WH~?whw{zhv&]qtۜX^g*h[0@kCFZKxCͥ2zLߩgǵZҫf۸t..ۯt .[ʑ&Ug<Ӹ[GЃwY[ Nj9LCD>kg7}es}V`uM!Τ.,6"ope=~h Ύ@Z"cxdD3ǁ/88/O%>z]oQadg ! B75DM>By| !+!Tp*g,B_&| |%/N|)!ϴ\/#ė Χ1NTI~=<1ϼ5W<~!گ4-oVBϒyطT>[E7IjBo{<ۤR&~IkQmk<}Gv_Bu_KhC|%!K|!"Ug okoR>"Bwe|@*]3<"_1Vs |fwvo Lj/Qe3>^KEO_K 1J|!7mtN3sc">=_~3KB82̈́%!!{rygIbBɓ_"(9d/3 O!X?/O#fpϖVBSg?:=C3I{X/ yC$Tc@ _Ehį&HwIBߋuzG{%u(e<uzo }uN*_l&!5dˣג u$7[$;! DI;-ϔP4Df)-#_ZgJ\joB $?.8߉/_:WYoɯ!K9R!?7boX'=QAywłK|FM$*K EvEe?r ?W?C0.YX6HB_AhM%D#~!'#NBf?LBB'_,Lj_.F77Zp3'~ !{&Of; /Mp鏩KL0[`ǿn!0*98ӭ8F[Fb~0u]+ > -Wx6?!LKt ֟SY;'r/VNp('K/Un`.?/SN𮤷~_x&6!_m)+^x^Pѯ׆ȫuzE_C|!7UN#^O|%!IfG#Iϧ̽<_F@<Vun>" ~XG߿k qb{A?Iw#!2Y›=c 3?/e)70^P?O|Jj/('"_O{̯E IQkh_*x&D~_9R ax!Q_Ur~y+~SN='6!yksX"~JLng>?y)(Q WJͣWw˧! xks'Xߠ5,٧E }Z.z4n}o y_γ?4:T=v𐯓{?3?(( <ߛ)?ė?S%7coNWnRɁM۴H-!~ =߉.#~)!\p-ɯ ~=u=moTtG"-o#7Qmk5_; kT=@| ܿFQDu,пIy3sUR`og鶈nSɁ}C6Ku']aTR`p:UAfm٣ yK25WOENkZk% !yR>}?f3o?$_&A~ jUsLy?J|yS|&;.h7s2s#ģ|_M!Ff>N|#!^i>neX_O4`7\pk#=(| o D$Bݪc$ !ʿ-D?Fb=:By~yNOń'T<{2-g|r'o& ߏ[tKk1?ZBF|!vI7E|3!=:O߫,hHpE~[N,s!Q7m?ӽ_O>"{`>M| ! ?Zx$?Nx"Dž}_"\f||YK^%!WG*U_C31;y߷\Hm ٷ]K'cKqd'ϓ Bs~J<'ψ"D\_J~5!֯_hEKkuW:FQ_EC|#aN&Bw:A~y ?$~!)/p~ cݏ漒Ix<6csɟ-\F9<_zrz#R^Z]|0ތh<= +Foqg+&hkuHuaT -Y^}%3_3ظ~d&m۸}FFuMŝg Z}Ⱦ|g FnJ{GYnGE[ڃigY D.zqgzZI4{Na`jÑ].Jwf2ܟ[G|v79^r4\HOܑw3:,H#Je{TR9|7?uʭգVgd(:cmk7ឱ`瞃6M2 Ul1?Tg\75pbzjꖽdtCy}QE_&IwYLꆌ{W~vv$L2m IAD)֓yA3 0`@?O}l,Lz"yf.SAO"Vd0,WPj|B8;RnJ;O8V-9BycKr֞aҮ7GaTA`}#3XO7p>.pe ܐha5 rRHdѕ+èN)"KiGd[ {-5u6'4І%?7/ԶU=g rꀖ0 gn7_䨬RC#?6 ȃa͡ʂz\0L.6 Uz:+aQڮâRdKc 1Jx$BcP&k&^b#$u@0/7\GTJ`q~jɌ̡Í(xgIc;Ͻi|y9ɻB1WԩD Mckym&gIGL׆p|'.}lq~P%=3KAO65(|vD~A4?֋,zC3lЪ4 ͜nbh+n 8:y6=/ W> JWX/k/G^H.#fTr(b7*->^&Z||n`\#l^WF>Krss1At%g=g6uNJ䏓֏P?o^NQGP~Hlzt>oS>["ZuvSgSUqE?~}jZ Ns<ڕ(k9/wSZ88b76b76Ǽe)`=y}ng+[P(< ہD4Ƈ{l^kђ2*aufoCdEkO?3Kn|y^nfp>4jg2_G3;}x peމIɯ^ ݿM[屃tzOCwF#lnޛ:&{32Ib:5Ѥwą%gx_HS8,Tʝ^Fe: ߟӡ`ZQt㝧v;yK`iy>:R}x[C|5]4H|e"1+x?FWҺKIV_x}R%NuvԖ)(P[ׁqu- H{3+Ky6oW[+ezUoOiH ԜWkzF]]Nn߳Ͳɜ12g m{m#a\8.yzN1V'.WsGZ27t4;-{tXMU[{ c#5NXl͒իnKlH\s>(|צ}F[頶xCs[Vj\+oOG [ҷOh'q^3?Cv֌v~E6)^Pl#p lx2@_5MwΗ?z9{T7oLˌl+1 4ۧ 6A}#o tT4u&uD+@IJsm-ߑipjp]̈́v_`}K>ORmv>bՅ?'6Uax:r Elpx_J{)Zci:f \{&AGckmRp⥤AfR92URWJ1n_no5b7Pyl<ٛdwxBMtM{zjIGHǝᖄ[pZl{WEiϏ7Øyzo>p(g[;QDϙho/Eֹ/],5ڡƚ?CIg<4i< zP[4P&Cv K_nxgmzYU:0c/ Y3')h ;NmS{/vx#;X=|M:{S91y(=Cts7mf #<>6pA|ݗyw3k +G釋t_T?90]ĉ3("o۠]VлUy[!w:Az~ZpK鐥wln\7xG7-簱£޾[}^6./ w ͈{xMߡi掤f^2I =1]{Ddt"2i$fu[?}\ k >gùgQ9h<0JN>yw ^RNw硞ޗt{5;w0n1fHU*x-6 iLmdnƽnEItO8#qͮOԚly!Ol,d4yqxoH!DgOOme}h7n$sSN %j}{ Kcµ,u7IZ1XC{f-Uëx{2{=.xvI a:`iyX{z}z}X%ޛzug/ǘ/R߾3/Wtcמ-W{8wAhmH'Bj1Q򝿀8ƺA~95U_ț;\Y$8EMT&rO W-_@<^B\h=^{Q.ֻj}ㅏ*G>adg V}SH\B75DM>_p8Ӗ_BJ/%fH}L~!+ }e)UFi^Y/N|\#'vVXa\ "-΁o!}_*گJ0Ca_b&fB@"AD96eWH~!k }  `b a_ 7}f,.̈́i3<[W-f.+4<_B%TpU J~!w=s WWB~ՄL||J|F|BM[o~$$E ]A*?v =!/F6"X;NXQė " ʉө"#t'D ,S]BSYg$70yE%~!L%5!"7Z_Mq_7 ̟5_, ?"'/%[t:-e}oiy?M|LF"qkyX@| W>Q'Yx$'4dKQ[ O'<L,^jg_Jy_FxN/C/dxNwH,B BK̿T?7:J VRRXUW bl:Nq!^_3?*Q%__ORV$+!Fȣ7Fy'+ 1>L*B& a[uzE5N_K!NK|:Bo%~!o$D}vBC:-QBa*yo{%3!*!oOIB#o'*I⫈~/ay~N_Zgo$_G(sƷXRL~ ʜ*"~ o> $-_P/S_}A_#Q'H(Ebs*/Yo\g(_L _"}+ a\f}coqdo" i6Ẅ́21 .NBB_i=WDJ$)!OtdEL'~z,D$#!گ4D,o$~կ7[)~S_WI2AM83+Qy_?_'B)/|UDh߮ .y<[d~* VYB|9̿&e nH mþ6g BՒ_Cy_M| Ϳ5/"~A|`77JBgw[aFQi_=V"%1!Ϧy,|E*v[Q/\N7Ͽ;${UyA MT+t# 1vCKte8~[Ѿ\@'wK4rP[ ~따įAC",s%~[HC[ƗJ< 'W_x{!?iל/?`Vc!T=Ax|os)6/(T1w# ?ė =STɯ ?`W?C|-!֯i2"Ao:PK~ݡӇ-h?S0N_K$ۗK~5!e:"/'F_U_OhyNCol!y-!eko ~=!oѹyNwZxw'o!N|B!A/\BU/%|5H#~f'~ !&䛈IBn+':,Dg^ߣz-hWFGemm}7'ˉ/'k.zL 1>V 뾎fB뾎ȣU/$_MbB5/!}kuZ/K a:Xaz7. _C䡿R>=_3WVBV~;_EIBoNWHZBԯ#D_a%ZG])\75/%D%~JFH*BS?E ~ =^o盆L@VK DG jr,0e~ _= $㯗ԯOUL߉yw3 1łRN$qNg,(ecBil\*yoY_n%Mo;[JT _h'$/%D>C%ﭸ}J|%!?M[x:[gHig YxN/G {ɟNUwP5I~J` ėb~#x637){#r'Ux`7~o!~ FRBȿkIį'4G]o۽[Xx{H~ !5o>]?C'ywxv߻uGʿco5ˉG/$7NJRBCQ 鳒}F/Z7 bd_>/ [~ >_A>3?|儘N uT?|[7uE EW~_wS*=Wߧ#DxA'2Rw? j ?K q:=(31/t :"EZj_[!>,~K>/y> ?Z"&~A<"QdM~%!K-zzϕ7C~.$߼JgG qA;wyI7H~Jzr%Gy%-&~ =k!>w41~^3o%Dz"-#Rb~i%^(oe3y-o%Kw*<=6g1k,Cy/%p9?8z+{?GoN[aV z.)J?_A'اy,п ]ӵsM<_k)׿Th o?g|"~!wwPtDwb|'t:fG%#yIՄ&BQɿM!($o?! bfg6BIW DEӒw*D&Go ?Avڅ7uz ٿj%' {,o"BϽxk{Sd5<*[Uy> Di¾/ -C^s&:!/!vNgwE]›g3S*c_Cy3:B .$_Lhx%xTG=@򭄰o'}?'~6:þ_<'+w ^A݄~K^B^qmq =J~ !Ag?ɏB:" sfUK~ !yE%?͛=G _6k%s2ˆ[6 |1ɟK(:MKWJ=|~#I60E #yzo8Ͼ?c-O !?,?I]?HIAz>?U2,_&_^?*"qg b1k\_Dp[Z̜]D(z1|#?E~{$ zOFKѾK!H{RK~tZm}ˉ#H?:M?+B䡿R>j|B_C|z_Rkj z/BK >/#{A@ɟKzϑ"o!3#2;-п*Fҿ"H;ɾ&B.KH~7Bﱴ?C{k$ Wt":rBu:Cg O[%9{bA;?$_NG%&!N-Y01nBwEIMnB_'gr ߿bB/aÛKlBHȣ}'>.5<}@+ QCy?.L篏H~-!yR>=_0W:B_a| _Bɟ#H U0" 'z )'ucu`q\D[ .ń("-+I$+,T" ?];!A`?Cye_Ny=TZa_3}Y?e yE<ʩ'-$'s,k yc|o$e<}f9C5/ gA 3 VIBAz[qcte]ׂ, [1ߪmVBcFqyNSw¾K ꟧ J?:=KggY>k?_:Xg¿_+-b|%:L+ QC, ^'UX?*kWZ %b :i_=9+vͽQx!7~[/ ު%VLߦ-( ]N>`w"w^_NxO}_FN_C}ė /eɏ"_'k3 i^ $w%`;:"%$.!7,_G|5Ƀ7>rMk ~nQct,ȣ"O<-b1"}BJLB5yo%~ Oi(\)߶y_i)p7 3>,H C/} JLB:,пYܾ wH~=!w{<ﰔƒ({͂PWz,ȣ/Ӿ^OWb|R5yG*uj:[OR?zp^Y_C{HÒ_Akey?L\TNG%;"G-7<Fh߮^oP s1 5'% uRBoN_.H陒_IyFmWC| 1%?N[>'$MO)y a-|p}-hZөa_K| !yė_F{Noþ;/w/ŒH(D_Lme:BBCZJ~'!5!ZKuCŸ?_B+񥂘6$?;$D*Bw^ɯ&45`GAާ${NCo$.o"^C| !y~BwYK›'Ow/>~{ypUT[DƉȞ+סčW_c}p{zz z;֦?SQéKmIh]wݾ'Uwrv^}{R%Cjt-V}G{&Op QKݟia y!p5kB`@t]mPsMCyOrSy4 y2;MCfJ r-Vp6?# TmnY-ml^d挔'_rl.].s :7fR֤!eeqU/[Ok E}tnO.Jc KU(F#d11_\\"BW>ܬug43}q],#W瞣Bݺm;{]䈯#4l2n:\4vrv^^3ۯi\ѹţusq^'ʋx;;GcrM3ܜEwne2'XG'.Wt7'r&zWh?_~OKA8?"޻3%y˨ɇhQq4Kr@]4{CX~xt{ "9\wO p}{f}K9sjr̩'z铌h[|Rϑy(v|(ؙO ?{S7>;}xTt?TVPqxX=G:zCǝ<Lu;9xaIW ppuX]Ơ؊ޓ]6ۼZuwMG)et݇:9e/Aș`N'TgP0Xj*j Ó9VGT+2xf8)%o=[>w"ظkcO@mgm;maz{;{\ ̄;{WEDҸv؁IІT'M+քR.HWhK4g= [~ K#'ʕaf'w,\$69L*H)t-yzK xW-iGlDπ {zϓ}Rd8]8 }2V( 6u'ӗna6<0sf- '0ehe ݽ;Ott 4o+SV򔮨~m7||cNrnt­jk0tHB5̠)mߡ0i H`Pu;i)W$nI}G6ܧuJkll Cb!QdRd>Z?`RgVR/z&Kkm(gy&DgZ,<џ8ݕ)7q_#-BC5>&8+f)+"ޕ#*Xs)V:{N&ʇU 2F"sPޓ==au`Qj÷$U`+T2AZȽG^oߩ||H 7YqC~t !uڰl%8U#7z.>-i~gO_4ҟ⇽:Mj[^g ߊ~k^˹t oDžrߗ:POg0/,= V>ooh|ʼnDw_sKfKh,mOqI\΁v|&)b-~ߤ6(<ȷdXJkQ4ؐ,paڣ?^6LlC}VՕ70菏`*9MAL):)ܱV2i.6D_8W//=a! v@cŤC7&RvlY. y@#e 9]&9̝iPTӨrpgX |}-qt4,KϗRWj!mޓ%}Gz9yw ^RC=x@oPs]TT౸4smsy1 8lو L8<ٟIyNCU#eðϑ =Z1rUZ=7#]x^Ocs z/7t?1ݛ8|uxIo3?M4<4H٥էb@yy%{~>l+# 褶8 *LE;{mc$ýd(h%3G4W@t`=ĘSC~{5쌙uCnyֱ`|fuh28K>ϒeuh2[>guh2!; Yk(&yYj--%X.Tkgr+YI&M3WD t|h[_V>ɸ /=@WBڐ޳⡨{ΥKYgWO7 gb. <~=9Egi?+Д&G^eUOʻ>I*$tΗˑ.GӳRh`xf8NѩM>IQS; (72ó]Mw迫ܿ#oiJp3-}ksw5N޺\y_>*={.!(2)}҃aM߃^˔ĥ]y)neYNk5gfuh2,YkJR٢`|ng)oK!bY9&<+VO37 EDZ챭M SMn_|6̦Y:ir4R1j,FK?7O>6*yrmtԺL,Sɓ27h(OYyp8ז-ב2+?)b~熽K6=p>#ݩ) EŨ,X)㑱ղM.ex[CʺDzz*t8H1@@AS\-8&$v'pЇәOGv()\=ERm?κ^.cukR(N5w>ݩSZjj~r.~a_ؓ[]'M!)~H_} vyYjMƉ.7/K d磒$kDMJoZqd0.&Wެ>1\zB4R>_)Z͢ Yv/ &ހFa ejnˈ,$bYnf3܎cRV_.ϼL gr!!z IjTGvJn!2bK{Ƨ̭ Dzo'YkQ4\,7(6+QpJ\ ".oͱ gv|܄S]>Tw[~d C =-sgk9)s+ t H*+T$p8?E{[C 0>Li4V,Ybyh'Cv'67 wko G}!v 9[-E>95Zja;_qK~iO))iSTTFl;1m#]#M2Ht8 ł SOL>,axn. f&zw~+7g擒c~Gb_vX2ԭCG:cP %(9mʞ32~QDa]M *鈚2x_H-|>#CGYn4kVT6]9JMG䡦N77#u@ /B[A+v )d`kᮚ +oqyuZeѩǼVhU+Rre@,_]?FV/ߴ9^ * 縜Qxб'}^ 9N:nLUa&S{Ԝ$zq7) oYlu@;9h\ش;㻭z~>8tzs9][o,ۿ$_Ȗs+mLZ9Rn9k]YhcdH4z-5}k->ޟ8e4j= Yb-pTNҩvjpnn㍍'-t&3VuȄz41OO[\^8vlPܝyZ[M|QPa>mؼ Yc+zXbC7cc5C\_wFIIjk;mz⦦;{jxJmmm?'t7Zt*RrTt:W1Wb8ԕqkJttMn&qڐF۸ni*qi^y%md{N,j\Wƛ[E]} _"{mwƯ~)]g=إi7K{fNw1R "b%&N1\zsrkh_qѨ1g*}bݚɍ OP/׵"^5ٌ-EMPVUQM^)>~HcLbI !BEtcH+Q*ljT'NӛSN/})=3ggHEN3g}w_@ɥO>iӊu2~,{ev'b4Gz=/D̲&Ouvuz{cmzc'Ę,Bdu%::d1+Hı뵮2foGLD_&gA ߨY*D[ 딑^uԒˆl2?ߊ9RTӥH,O9Gb%=n?S'F1~L!rt4j#uQs@VwyU_'3zOJ.\ꏊÕ ٹ.֣䏊îC i^N4WH:ZK#ڵ Kpb(Nt'd 1h*)uСi%rc!5> !f,7]e#x&Tc[۠,z{2!RwXqQhꓟhq+ξ vr=O|'3%{UI준z\@IS*п#')?!YW'EۙuɊs}hxcG?o2_R@t -t.?[qQ ]ʔ_(DÎ)߅&D?+QU\@7mw z?꽜glT@/b*o$#Iqٟ5GɯDZKl'!_|qJUE BW5__.qR_0Q/&Dj:WO Bo9kV|6!ߴ&>ʿ"ԾkT^IЇ5W+"T<"/ gC>7Z@&jBY<(Th >ۈ)VPlr"BEIb:*_+(.W(!vRoZBgO>ʷW|- w)(e)כPB} |]E|-!w:=TԻ 7u_FP+K?@|3H9x<|w/@@Bz9g7HI77LJ,&^{E' NVtBS̯&**S$=ˢ?23$ݢrBT>և[,3,_D*Nj1]_SJ]1$}̢o'X7CT^NSG,<+uO/' Q\BIw^Q׿_bkG !#D_BzB7~wߤ2I| !ZQ{JyW}%_KFuOTA{߭xw7rBMiGL[$Mῷ,"T+ w)?Ige^߬~I|+!}kor7o~pf4/29T.xZ ԾAg/"94m6Y I_RlE>%y~DWT^Ns~} <~jB׈QuITrB }įP\C%;*_KߖO>uƾYsW,< +'4uߠiI?R&B~aG?"cI?UfBO- B_E|"![w+IkQ| !*ߟ?L#G/*o~dwO;!eힾ TP_oi/$;4^y?ׅ^dʧ8wAjMПf.J]PǟP %? '~>!WJB/$~!!ˈy"ү ~1!_XK/%~WBUkH)k _Gzŭ_O| !]q'${ uZ-k46 uп.N+/럐 *u"L6HjRy=a Em36# ڢ_E5#X|׌2WvL뿓 EL[G<.tHUn7G>">#}įP\O/tPa H!!%oCq$WK~r Gv /s}>~C嗹8tS῎}?fɿk,gK{rkUya(II}ؿ9~E GK}_NdΏ_xyh눯PÛ3*!9?~E?C|"?Ss|W¿fɢ7Jq-ٿѢOos˷DKhe8 S%=Sń3$nG$~"'&[$ݪŊx qzՊg?x+忑I_TDM (ߝO'GߦY{?_y8H]*|/R>y K, H_ -˩Z{t|A߄ NEk%kч?_o.&uK?ė$ga>/oRvVIoWY!6IۉC Ws#]B-7ǣ%[,(EL V|iF=0/P7Ek cMWI_Xo8J|o8zB?-s 儡TBG&|oxD_o'- o!]RòOSex>ob/W#Ԓ}s_a~% ֯WnO/VS Vńu}د%~"|^1_wsG*BįV9|#!W[C7c~!pGMԿ,f666I*NN PTLŘŗ).#VIWXQ]ė(b~4[^'@_HLKa2KxYW*_x?Lτe.U>[ޟ _-Ϣqg9!x? DI~; |?!};aK w|#!"@,k/}Ծ~@/,p֧SΨ|ç%]oч3t=>?_Dfb~by?o GO$ ~>6>:PJz~BYnuQ ْkч[>p8bEn%ݩyh;>x/Q|h"IwYxؿ -K$cᡏkcs*!W)C_F>k}_LBE=H Q_HN B迃U. /fE<1{H~ !*~7]I#JzH Cė)VHʫ Q,eù[B~(o&S>6 D"o%ISy !+Y/ Uu5B/W\G$~!ǷߨxےcfBw7~"Bל٢DE?S/ ~?%L/$JՄ}5h![W(wh|LTELI<">XxQljtu B?EZHxm5G_BD%4##רBj_ơ8(opQ𓔯uϡ+cBIK,ھF)b|G.jDm#U}؟J|b ٗVp})s¢Tq9ٗbdW¾5}؟IJB_LHu0Rlч">h%Qq ُx؟GJQb O !Zڷ+(~B%~%_kߑe*dz=_2D,yd_ W0"i QiAu7}Gb5΢ ?D<%Zw9~$%,<o<ДF+1!FI|MįSLIoSB̿o Go7o%D|ܯk؅.}b+ofb~x@E烒R|Ez~[C/T"K+ Y>*Eħ)G%}\u>&}8a}^~WO~?ſ^ok(>%|&!1>˒xI?|_%krԣJ.}KyMIV B[~hчoRߑ=#D~7@gɟ?'Y?!?~f4S?1%â?{Wb_Dz9'IQ BGogP6NףʣND%"P?dcU}zG$O Z㻬o_N$W*@҅*_G,iE廐xN)o 46:To$NS7a?o 2eN)[::~X7"Z*5I{$*k2TĦU-"EVbOHH,GZaq>a/6*@,R׫7)oQKﳻ@Կf&~}o3E<>^!ڢ}o?xT#y?Z%𰿋K1~&~.zP奊'; R ~9!{Y 1]!ENꝈ3}tg+b~5ߢ"X#&H|>!jIZa?N|B*QI*/#WI:n"N+y|ԣBw>k-|f7ÜV,BSnig?g/"M `aҟC}|sH_*s%NɒS$jGO%~!!4gHzg~9!s|< C*9W)r|?Wo' Sלib}1.h,/{ʷ:룗Kz+T̡S QW+"/\O#D||ȯTn?E#~!o"H?E,}*/%}/Vb{;$KT9>.)֐w[kH=TZB߮cC>?AgbU>󐤯YQ/RlΣQ/&D?%Jq O|-!2@?Ez-d>򭄰}<dߜo~YGa˖ kQ+Ck/M BwMER^B O|)!HOT^Fǒeч~B|"TU^EɿZaW+/!D-+k&HߒRB~g)=0[:B,_ 2Bo|?=0_ aQKMr_uaW^ڿ򈟩s/*GW@| q'T'~& ?I}h".tg*PdI_oU^B_$}ؿ(YUJ/$~-!B&}د ~b#_do$}P:?Uߤ#sU?+y+- QI%y,d΢J˨|0[귋WvC Bߵ#7oF hL!7[o})!귍h?c>!mǢwdEJ.%*6?y[;!:*>?@|_eA)v-B!K!'x"Dm;h~&D|S^$9qK 1v_OzU#!>K B'%]k/\3Uo>W">% | !o@)>$~&E t7&~3!쟑tʷOtE_OVdҿʷw;0 I?OGO!~5:Bcg*G=?*6Q)&s_dy.+GK;ѿn'~'!ISy+!NI/#2|e/\T~B/'D+ѿfR D.Bϯt{I?D0~>¥^ 鿟"D/Ya3Vxﳒ>bBsyK~*)#W)Y_!~!!UI_Wy!ƯIE:劋7,I_塚J7Ҏy"F?ߖ]!D|d#D@ҏTXaGoPlXOUOaoUC!W*2@e^CۯE Kʯ  Q>#۩x } I{߿?,QLpQh:S o 7m;ДI7s?Iߍ|'ʛ'>xa/d:*~|Iyא_hSG㗿wп&h޼H}-[ZUM>٧R7|iˮ#M;)+/LP}6"=}iպok2;9-۬}L vHt8Nhzp\p;w˴ >Il)pL=۳82\i{fӺȖYd^1z,NF-;5zԏ;GV-9{<:zȮ{N.Gc3}8h2<ݲ)rY0o?oO%Ty؈;'F G9^OGksX͈>Ξ,|{\Zf?fC-3Q}9*GDI2D{+bds_c+}eό|JV{wZ;&\n>n@Ç򨾂Ovp)iFf! {οrZڤR8 s~ٱџm8 T:l_|L>gC㣞[Foe^ϔNt|wo{JwuuGuŏ&Ջ%}DWlo;/?P+}f : ڂ2.(I֬ 8/0/mW}3QkFz{Ok55ΜLd_)%M]Ύζ@goO`'MMÖIi@_ xu 7+t ,l^_i|I`w-XsKBLl_+6hKw 5ui3{!tگ:D=~CG~"v<ӟh5 ]./fڵ>aLgd9d4Q Y'm̾bÆ䶴nq^y:/[,@ q牮~Aƴ!{: w C~"a-|2avzƴ՗8oЉ{ٟ[FVt@j{3 ƳS~Y^ru~YTԀ_8!vͰ; ߂S}'y+3 tU.<+˖,d.AZ&dvvY'syr^q傫˾`xbS@p͇\ٜ! PK$|B<٨@ΞS8;$^9A nNc=UVsH֙AemLM?MN2ͦ2R %::{n.bvHwzE\[¹õmi\e>"c0M󪷍 \>K|zvd Tt@x'Mk5Tf{mx8jnCWfDx%4N9.ǁB13C0yCFS6+:'έ!+Rr-HPLyUGgFT3Y 5tID\GKm̈)MdX * 揪r8~tRVȨ.8#3&wD?Peڐ;;d∵ &۝ #T:b]'c]'1(ROuvuz{dޞl;{bD@ $V.1Y~$z}ݚiK髖V㮋'PIˊ&n6# Fw'g!N\ )N־ߑȸa?_&˔R i:T+!d}2{D[4d7N#C&*=ma Q|3f~T]+!j ,4 v]裕Z錾M]% ZzvkvQ >poB LK PJ+~]g4D=ϖF =gqm]C6{VncNvg􏃐T6\6ܙ@e Aֳz -uHyoC?yL6 u'>eqAE jϠ翬{v#X%#XWdHvAI"!F%~,\XSJ{ݲ4۫!޾?vLvwHlD|`/OGFC{2snZ^o_{"yo޹nƭB#ؓ[cS3e[ek2ҝCkJ96CmF39u37io*+/S_;^Q+Xan+}}}V?qڵq@ƋN7 \'Y݉(w ;c:ZfE+^j9KNwSCZPrBD6"$&O;Y*|di~_7%{%w,mk߄ƶx[{%2`ci'N~2ןdTJ17Nk蔕LI, Tdт|/vstgmZ$O6Giij&lǥ"gֳٔڵj>*"Or:E)#ⳔS(E@ FIS:hz 64\F;}_D'-u'/vuC)ٹy|^!YmR足MD0tBw}{fwrTnLKSp-jG\ &:O-:1 t݈kS90jI[\7^.ZNTfFz]V*jp7}qα;U#*^O4`p Wœ^f8+T$%,dDKY9[fN%z]cV%MzݤjZ*Y-N%_rMr:_ݨU^UQ R)G BՅ2dWe43#|V9ѽ}Oн:mx3]|ަ{ϺDe#̠컨>uzz63it__YyM"/ۂDwZ2-̻E?O/s^^ٔ-K&f]^j)f6? x񄷶Xvf-ùY+n%7|N꟮ӭ];ԙqRWRzx/;њ9ۆڬD|5sscNj6Xuw,gԒzQ7&=j@#׬.WM笓zd QwElk>q\{xee;֗Iy2B @ÙNgCJNg [V89j/:NuZ+UNjQ)i^UycUZsqNסkR夆z'5PR󕦖y5 6zV%z4guj:^luZ2Ȼe4qBNd/Dד%t]orjۚؽ_V_oTsx: -U/CgH4[GzK-^ʣ;~$nN[O)kh).Or_nv|^sZzA>;YJ9Z])YV|5z]7luZ+릔,G[ՊA>ؚJc0j!JrR)xtinwl' grܟ{pxIY{aɡ@4w2!wf Nj)E7F5l u:gkE5)'vf#=K{_ܽmqc4ySQ5\Ȅ}Ͱp#&5k+zvLwJF 迩M ܵ^^qTox~Xx>Ff[gfqq֧Cx8mB7Y nц9ܛ"E#Y`^8B9Zݬ .%1KG v=;,1d;5ZM,X?3U6gLf_X58og>JkEibPO,`9O?g!;B`^;FU5ONXyv6q(Ԧ;I'egJ6:5Ţ, \@yiuR~^dG{9[ݧ >m_*؈voSkVٖu/b+SJf9nTihIZJۢ{\~2v2֕c$7M |VΎrܟkI铲6*%ĵ55dɎ 6JkTˤ|q&o|[Rͷg+%Mrm- ok)T5KB v@l+3CKL'+hV{*mK:2ߝ-woˮȲ"sm 5}=RTXf-H LJ&=5_ߦ:1{+c1xw-SqxŤtEEtqbq+5fMbQSnY}lMiV8@Lyj"3e=6-j+=rO@oWD_jH-M^*k dhU67׌4dI$eu[h2:>CS%WO_gx]In(Krkh0?Y`?6ًIry"Eq%Bc߱dԶ'|`W\X7e[jRS6TWd\kyq8YxgH^rmݍ{Wzs?'c +1xoجWiT&2e^d+S5\m3,Pjf.XJ,ua?9p$XzWjG6{V*$3Ĩm}orZӥoue0[Ժv&50]i4w¥K7[ L vw˶E 6 ޲T r?~,qDMjޗ$o|EP_ԼmVO~_`j]y_0T`X>@ߥ$홚*cUiҨ<\ ;Ђ=RM8sF>lo_=ї|yӶ8(ؽk_A4'?'O80o^F6XP t?Cę4>;8QqI38ǾH͇̙A/]}'uX]31I}يG.RVjG&*vW1M.$~6!79|RB}o}П/7( g)Q>_:#Y_LV>긏7(_Yyꏨ+qRf/R\Lcb+ C @Z$WE-R>q_OU_L-!>XAqR!/ =})|u|ˈ_AՓ|%!g^!hGVJjP&BU>7Yq'7Wy+!g]>쯷ԯ](>Pl!:BO*_F1/y\jG_C뛯~;a Ⱦ|;!go>o;v)_SkC}$sX/#D\>G_ZQo'DȾyqL}:a~ 2B?ᤏߣ㫑$D{Ǘ+:о D?>jxs=(Py !:}3"?MBB?2B_O|}7_Ehx3D'OtGLu(ߓwQ{*ߧIzx D|==@̈́o["kw|:!Vg(bgb9nS\Ř&+y}6K?KST>և;-3<ү ^$_=s /tg+be_,3}ŊZIwRI/RD0~x1+|HzW|>J11U^mj_G7(n$t{IfV}&D^_oV D%@<{)!N*# ?~%DO,(oSߓ[>Ŋ??$~"G}~$WM~N&BoV/%Z  Gm/~d/3cŚNh򗵯'wo8촐s_c}dY꿋Y&a d\:iPXB3HPDV|"֏LC#/'a}/ Bk\P/4zUT>SI*o DBE}o~2e]uڿBaB7()tSIO#Yq ٗ6Ͱ?j ʹo+Q|s߮?F^B<+^N/sQriWχ6ZQR}< ¾)R>X뷨HG Ὴ}_D|"B-QqBou>/8K('3Kԡ*!}俒Q|&4!k OP: בMzKD)H&'s|}" 13/\rx_NchwCߤݎwK\Ao&I:ل?!> H?? T\B}?h.~xQF/\|i}q2&|~ɪN"!~bLy3J G>]ėt&~>!CB$~!!%\qW)֒u/%)).'3į _o ~-!o$~V"-п;Iķ<݄X>Mo:_3Ӝޢ%X>S-NF+uz9ޗ<&~" ogJB?G-(s"Dot}I6=@_M~Ka|/t}9Aķ#_x_TTL-} QKz5M[+,T" :K2z(g$_)of>GLE?F…ޡE<2-/ Jz~g}: [*H?HE'>{>IYa/p+G? A">Ї- eԟ1"F0~~B'|:!Ig8Jߧ$}F iI߱|!H1F?+*G>$}Ih/,BbE_mW+b5I}U:7~}Vjʛ6-$¯ט@m#I?Qy1!ƿKE sy|EBTBBsaO' coU~E|"g߿/%DO#_g{7$ݢ'~z$I?JED|"*B_-[Y(CqJzT >#G~?K{9*G,տPPJ/mga&T[0O1OHy4/y1_XB>O%~"/i}_ a:Ӊ}1W(I|}9K T^K}_DR?ǢOϯ oibge-^r #lPiч+}ip?E}/'~b%ٯW"KT;ژ_Z' 9-u}د%~"R>ǿp*/S˴2)b/\t R#q\MZgxM."E: oq/#Q$hGĎ[U^rL"R|[O<.|ʗ B Bcmį"4[ۉ_'sbU卄ߔˢQq+ٗ4G-[}C6Ed_~"D'R>'~TK 1^fkT73w"U Z |ʏb}qڇUd?Bqv[fF Bc'Ⱦ-<'}F]EVތ)5ex?ė9_T*Bį9_?eGop_,pnCzotm7t3S%=]so ncч_BnQ9'Oϔ.>B|b[U^NϖF>J|?'9"K|*mPZBvI/|wNqOwJzw"Ϸ促QvXR_&{5&>_.*#DP~}5|%NSIW |ߨo+Q_xEɔﭒޮń(}{t)wٜNUIz~@, ENJzIxYa!K7{XGUVDŽ0!xQ !c*"*o D*@~>AۿB _?"+_QEx %%߷|iw&C(bnΖ~8*_@1[_O&D~J|"=IW7ޜMfE_؜!BoNhxvNqz~|:!'g^Z?>Ҟ_$M a#LoIʫ ៿?,(o !쟵*b-叄%Eq&D DXa?JEGd)Py ?߃ׇ)KLPBOd|>O俇 ,g~ __xf`|2Ydʋ+>O'~"?F$&"TPǗ}؟E|k_t"sUVM\K8~KF6PB1~OF>~/QA_Rg!~<ǝ"SU^B_J$߯%~"fm'i@(߀~k\b~^y2Ϗ7/ש ?㿧?{EwtϞ33O$~!! 儈gKz+CrDntEy|-\>-'/Y}?U}^D|L翦}^,*/'DE|!%/"D^J|b5鿌x^à}_N|"SWHzWF>*}_-*_Ky[aįSY5?Z>Y߬3* DYhwJzg%!>n1=ޫjB}/5 I:ώ>ùI?rj?F,Blj/RT^J$8{ͧ_L*ۣ@¿#~)!_ެK\H科/In-G>9;Fߔ+y|RE/ƿ_#x/\{*#D|etoV>6E{1m ns~S'cns~/>"Ez?'3IP\B|W}12K~o&_19}+tO7b|3k7(o" M 7⋈?,4V)W婯 M!}ŎG4")Ibh4@,#^TWNOt< i5LRyDI-kZ.zʗ" S)/$/Z )*k o֤S u<-ПO#-~kTnoRgj. ~ƧYD=;T^BQF|Bߣė"+_H*5>j?Uė;3Y+FkT^E&>_MKGT-1~('2>w=o9!k9I>[2Rv=͙.H{Fݮgq\"lZ++b|{u:PG+rin{*NnޱL{=Gg8.=J{\Ys0 k1rc>7m\2Dv~"^`w] 369J Qno1v+܈FEG\9l4q5Zy |Gc"UM-#r ݍM&ZҌ ձvǪ}j|l[pxT6gruNkly,jom9i]ZG=F-(m BhP9,7b{,xst cڬ~Rk#-簑=ksCe.Wލ+cjæθM![ҋߪQF2q֝>[{]-=*+]z*y].kbzDx=LJΣ}3~;%{/KEz{OfՌ9kڂ7ot%ݘфxwb nB{| ^a|ǻٗubDޮ +;7ؓnymٗb|I`w-&ڵ P@ _ k㒒ޞDO["~ ,Ξc;Oxu_q=m&r %Dѝߟ䗘:;t=~gkt1EwcIH3QxO{5;2# 2ҟ6H+ZS]SHMu}`7&86p+ΰwp^əDW;ӃK;Se29}Wpi`37݉Ap8u?qgƦ&ǡ?N$kF['4m&3V}])?akuP`%2{9hvfvtf F6Ϝ+ˢ@ '$ zfXTWWu"'2n]_=|0X}w]Hqfis۠~zݶNA(3Az}AӘ;Q/i~ψ<v(,p_@`wvYޮSR?[i]_9p672l;6ln^vlgZ28VŻ\͢*`Fٯ N%;۲_AKksgF$NqS<86^dĖDh^d,O1[fƤkqŇ IY7F?_Pb!~sC/IKgبeNK1A}ٛyH? mdMW o םQepc#84Ax**i>9ۜ %b]=ɿ.'vt~kmqA^[/:Nʪm8c`w*c+9 ǏChɮ} >Jk|Df_ǸSCnس9?`90mgCy}섐&38ΣvcXo)HItY`>_nKtxmGz]%g%sz}H,Js}dԳN{-z^, 7d;++9{|^տ'luZ@ibJ68~ 5\q^!ڔΦ^Δ O7O>M}-WR7guz332qe=^,%j^_U^v;?~:=gMzݤy9[k,G\kzTjC.`%io X^׳1~Z#~޷֘F +v~^̇˼۲1l))гk5,m `!=+d^vܹ;GEj񾟻A.d~tN*hX-*xLW^^|d_W- C RZp 1dշ\}4 go6y S>K8O.r^gK5\pE,y7Ɨۖ:p%8םMQ^!ZWе$ٵu6VS8OuW Js\\*ݐ:N/y5topeV-tԭ8\Nt8Ų::P!wT˝_[J/Ϲw +R)G_*t_ZUNo0*J  4Ci sտ_fl7ftO>(d_ ۳R=b2 Sّ,~3~ghp&"ߛ {yԣԓm50gX,}rnnXTS;E9RT'!-Lo8sȄc}~E 2/Neg}& TvtT=5Fv6qSoEȗ[ -QY;;{:c}mئΎDX1uh/۟wv?;)HZE=O}]C3ܨ&rٳdʟ ڿ/tҷ? 'ڛ)ftɁ~K㧗8>xtI%a`mzH 5U1zy!ҳ0Oՙw-x2f ؓiĐ Y5&T?5PIѰֻNTΜ N WfSW1j7-ܼȔ t\fǁ~UѮ#%JjiN}ƆtР&{&ZUoZʖXKҽqr1/5&,W՗f~]GoY ԺYEVz활n89ʘ~`(=͂ V[q2M-k=3ܭCMZrz59ds;9ﴹn)I\Ld̩Yr]bB+DL6 x?v*D]jǯKǎIhXgЕLժMT>츟s7廐ل((.]Dv||S8v|ӉA ~!w'C,-_M|bȊU^N Їb)"=7JI>ϷԯՄ(QmbBO%1 j/"D^OXQ%/V_O3od-SJBޢ-#~Vjzk! +"ר|7!gu>쯱o7{Q ii}6_Ki&Y}YQ+%_|!-@AۿUy>a~-#m#D+k}.'s+UsH1>%bGT*@dv}aR>⏑ a> _|Rެ ϯ'AYKb}OhKSeuRB?E|!O_@|:z(.UI7Zxύ_GD|bf|O"~b%=U_O GJfP7Ҽ_&)sh?>i$ݪ1M<>[}VKyI9s|Ygv_D)Njo ^يX $٢_H|/9>H]N}^,>>E"E^B*B//%~5aHvYxoW| )G/'~z=^ 蟯>%_m_E7^KfBuoUl!^ҽKd67?7_ƾߦ<<ߡo^-I|!ϻ)K/}*N }}+b0Py9!ԛ~} A&IzXQ$}Ӣ=L|#!Ò>boO|#!GoRD?&?N̈́迟?Im,񭊻/>' *C}>@/=B!BVI_'5'3~o8QB[OR{>3U_Hʗ"(}G+b~3cI?UJB'S3Q_+IפH/MT=-_|?Zx'Km'}!>vBoN KBB $y[Upz';ğك%1? @Q ǺB GHasFr}W'oG,y*8qV>791_GR>ДO:vXaEo/@״z>_@XJBcߔʹAE_//!J*_ !⻊d_ A寕̢Bqٯpn Qz(v߯x!B-<ʷA_Oy9!귁+73qB3mǨV o%ㄦ| XqaogG֌*sG,fчė('t$_NAb!A++֡C*"D!k?L%D^e_--eMۏSi5Nw)E!~} n$ ZarE=J+ ѿzV>N m>g)? ?Oi\x_ZcΏoPLBħY#dчXFos1OQy"oW*bdƯ%=H?E3bs,UQk-,Kyy稼{W[a9W(">M>jBm(b}t;U(ߝįT\K{ QߨEIK[KǢEV/t4@俇{~{ aKKZ7N37Jzg??[f&c~oV#DotE{+%> mė"N".ϜKuhw|ﲔg g!쿗ěS~ /j'Jy|{@U>WcƷ%}ǢdCv|fmoYaaKb[aW*VYI_#*Qٛ>A|jIIVBShG&~-!FT,#Tdi? O諒݄(aM,w9w%P ?c>x #>?f|!'/V| !3I#_x(\/*_?"~"= ZoT_I#H{o$D.@o#5-!~:.wP/\`Qҟ@n'3{.OXTS9O4â_BK}؟F|)![WJ…;{2I|"9/RyW؜/#"972\L|vExwj Kk,(_@Aū~*?BWw5!֯jk(%~x|XF9/m­Rz_MB Nspc|+nRLB5}o"~L?NJE/=O T~>R ĿHwY_?/tg*¬_.}ؿ"E{WJIZaU/"D_-*_L&@_kɟ޿0\F#¿IǟR )[%CE2|L_ۉ/$ $~!!.IQy!ϻ{ }s>/"_.pҞo?D|5!_ӴÒ>+}>L*E?B| (p៨|!c/LDo~ ~!IW)%JgT0uӒ>gG?Czd9*NB/9iÏ_IjE: ET^GU7,(׈_H_{ù[ASrJ%5~`Q~-!Rh*WQ*_m_x/%I W4~>lbj*oֆTJ.4i_|ߔ_x?R秦}I_bɟέ_ /",gTqGTb7?& >Zi3Wr9=\+}_n,g~ ¯Gb-oʧ?AGHg*|KE6ItEz?*W~vg$u[~ >$]hK%e)rP*/'srIWZa +k!>/ 9?"?L|1aտ7)Hw|풎YWw}H%UZ>"}/U~TNyWZe+9$T>Dg)#,N` FjчL|E^_=Ţ'"|b꛵ӈ_Y?o"TFB3IgY[H!ƿgK=TrNs$ݦ9 s%Ңo#>+S%=O{c)G BΧ#w# G_'^WL_ E*_KEįWl&/t7_w#}XڇWjP ΗIUlB):I|.!_/}^c~K$Q 7-'^lh7{!U۝)-W+P!]*%DT^K_HzqMƾY[< }AI| !C>cч_HǑ%}DѾ)>f-TJʷ Ї[OQZ}6ſK/\*߮g3|V}/JzD /IE?Bȿ_U$_oPYoSiΎJ I?RE(7}1{ ?S'D_[aė*$Be/,kKלL'4(Ǻ a~j񮠮JjQlB_t EJ F|.!/4ӢM%>HCtKT>+ ЇK,p*g;:2E<4_E|1!/yF[qFMSUZB Ї%%ϧ~YKQ%h u|5Xa+ɾ2z7-+,_I`B:Zoч%7*b}g/ޛ}_jTfB-eI͌Mߦ+eSy+!+cqtE#~E~KnЇFK{D[jPi[t|^A|"QcE[)*uQ|BݒK 1%~b/k*/'})qfƞˉ&4SW_WZx%G5>*Ic*!ES㒮Qy!gS}ؿredn~~>w3z$T*B}?iɟέ!a.}?o鄺ޠ<-ps3gSs->Zv b}iֆ P'[7T 2D|9#6Q,(m[T|B`ч;/U\L0?|I/ R -_/_RI/Sy!sYˈߤrIPBI+ߩxҢ_E廊Ֆ]E#!-s`_QyMyMcѷ ?U3 ~ ~<;%[%hwIߢUd=*.=4Xf^:^^6I7}Og}??@1}P/T6SǷ$}Xsy|{Xҏ-19޻C@G%Т#J7)/sg{O\qW~.4[ȿ9o#}9w(%_"_E~Wh5/U_M"_I_EʗO|5~Mjɛ<<7OI!!_< ?޿+xOWʜЏ|7sv⡿@7ihoWv'*/& 7򪈏)eⷼ/Po+j_D_눯%42|Ķ y-9N|o &s~?a$G\_ou'#yZ Գt~ISLB/?K1x nRբD|"_x'|!!$Kto8~e4++|WϔtEB|.oϒtv|Ї[-&6">?OyB /\r}G{ݒ^򙊈3~Lқ-raITB_j>쿒bE:{EΟ w+ 1*B^K|"ﯗ?*_J}/"}Y}*>?d$C{-g+b~5w]nK.*K{1R9}@ QHE?@BE?(C*_4{JE?D|!ׇ$=l0W?b?d8׿Kߟ xZӜIN%y/}'#F%կe g?:C?E7%T奄o0o R%ȢEK-aGlIi.s"DA|"?K "~"4( QW)x!^LqW_I#Aq PzP'I: H?%MQ\B_(>3")K Qa% _&ėe/6WH?ɟBGJ~EM|"Lv|ďE_ϵo 3RF/%m$rBj7<̳s4]e,ɯrҿM^gGUU,%ʯQBBR>Pίp*_BG9גe%_u_NzB]K,篴𰿒71sK1N7KjO*oJ|&!Ɨg)o|&iB_ֽ{-K'ܳK ѿ[a%:1[2BG|"z,2W?lG_H?W|7!wy>_a7~W:">X#B /\r}qX凝k$u|"䟐tE/RG%Wk-K|Ң_C?A嵄_J_?u<J:߮ GN_D`?7h^U}'|"͒kч'_'Kz>Eҭ}*e80kP/O'V律?C-*_F}K?WG|Is`NIwYay+ƨϗB#D_/Sת|"O&^BBEM^*e*_L-}2+y}rIPB}%^Wh_+ oP}3L%&屯}O#FN߯v只 俛!~"7_ҷU^B/ ~h@U^FAI߰?$\/ʫQ$=bч&D?,*_B#>nч_Yyq*:B'@Y7y>,7Y7|̈́/Xڇ3 Q/냯Yk VBV? CK9gIrwB#;ꌗ}ܸk5qGGkҪh>M[vijHYyEe;96ۿHӮ}];m֖*l5-%2 CM2+1uݵwg}sa'i=cGZjl})pL=n۳x ;p}1<g4ss.G-3}9MYX؎ZY?7/ݐrarqk7![G!tJ)gi;txd99|nXO0[QtCotM-2f[Ƕ?ϥR}m=c 8ǐ96쀘&qXS:Yl7-(:_,:Ȏs[0^X])*{|yt˵opR&7ضG֓HټccGʱ>*=-i{p;yKE0ߣ2QF:nf_>GhhWдkųsUĈz ˀ%q+btFmҍC,m❃G#\} rY|iΡ&hzt.ۗ{jxYPvTuMڌ /D_g[W3p .ܲXoGl'-i?7Ee;;{:c}mئΎD_-1k>z_q=m8JNCgHWo0jAEOڎuKL"t=gkt1EwI`3QƪxO{5;;@Fsn8tpuZ] qcǻOvj;(&(w>!cʱ}] ,[ dE"2PdM`#Ö=qEཙ {21'mBݸdֲ`C>2ݛZQn9G'Ξc^2}ܺz O2j> G#[̨_`@YS{69hrXmAl/15PB,#t8cmHGfEB;E"/՛eΡl8S m48C5# |oɒYvmEײyH͒,B"Z?ux5M0[ 6ʾjP9祑/W<.K҄E3yCNuY3~~C;9&wv%ˢ '$zfXTWW0-4O/.>^ z`\gq{Noq%Gw w̘I`3s >:cL!; f0 fbӕ2 2`9! ϻ+@%smt'mُ㒣Ό]Г8e/=c%Ts|s z"g{ t ziFp{ĥ.wr0ȬG l??_.Kj'cOz#Tu3I}6։R5D=י:{b動'Ukc 5jl;:8Ӂ:u&v<[Υ+c%b:b:$-.?( avhخx߱D@RlF{4qhʥ]!TS*+0Z"wبxR#]Mdu$Fx3-?܏׸#w0rX,Xՙ>|h6: m7M+A`,Eie\ wer?hWa~VsD[YMJ=?xlmw/fq/~dHZlu}񞶌f3Ҽ2ܐ#Ӳp|,<[[d~u, IFo=ڿ":?QpIf5$NZGIeLZ㲯sA;B?#06Yz6I =[d)J39-bP~w4'!vy3\%N̾qMzήD[I/"\D6{x|Jz ֪%ׂ8J cs\+1 .%^jJ""{ĮpN$i^P1iJt~nwl6e)zl Հ)نeLklquY<~9uO| s泰ZM2&/J\OyiRܻf.ҩ:e󕠂s|^Qb^׿/TdVk9[)m szZ0XU%9[ RK>oJr:W\kc2FŜ >6ZcE$Nuq:_ yO2Ӆb6pyv{ӝ6peh! C*٫O.ىi3X%'&K4΀:d/:٦ -'\Nʹ vRSz["d^uܥIV%qsƤcroI2*w/zPDq`ra3Ct*K)-ąr5dk,bX15WЖߥmY4d ڔe.[q$tRz=Uet\Bz;]tݪ'&My(qRuzXsZ~ui `A[;ȩzz ]_׳-IcI~Li~-B:&]1XMd;AW[0=7Q wޏQk[*9eVj[&|wLrzX]S)GW%z}UV%"8J9ZZ-ghWX9EX3n:+ x_Ь|]^(d~ÿT5#//Do&}h?bOxz㗩U).51&N菝8ۜ %bͧWݤ=Y-ӓPiAjU_c)}:eg}mq_! x[QKfv_)p@Y/=;}1ǎ6%EViqJ&ʤgϞ}4 S0sp 0vaW4&j <)JN;~z1K}%o\b>ڟn#6A_37˓d%X?ƚ zb˭ү>ku]f_QU-L",wIeUʒ5)`пdr*cK][fo "K)K*\3qT+cg*c]bLKriOTU l(BF&&Wʍ%)KEl(V+S~Į][^%%kz,ʒAE>O^d3vc|Ä[ˇE'RRRIƕ1}'N[#emU_t*O4XU_i*& Rrz@ufDpd2ΌSg/?P󾮿2V]]kuIK=ӾtEEt>B-0WZ-lNgY2R.ڱ*FJrnh8o-Mjw݀wj$O%3JR5kX'[FP攑_RFC孝96>#!6D;G0halȵ0dئb*o651>B::K,S3 nS5ɹ˷Ȫ7۽uU,b֖$L@A`2*Ǿk6 e7iY4y}'O/9, ~f::/?[Iʔ_(DÎ{ow! Q)Q,]Dv||S8/@?A,9k]gYx? QG%~!#~!o+~"-(|S.Ty%! @\E+~s@RnQ>/ԯjjBy1d=>u}S1/P"BrI}|+'DV3Z(>ʷU}G֫_oTB7:ȷ"~a~[Bk!D*cp k >;SD:|FI=_g*ܧ }GFBcR'eD;hOQ+/)}}v/#DI+mS&Bԯ#@YqٿFR'aRI'}~_RB@y|P {h3r/0~u@'4fRBFBėBf+2U7sS_?O4 y|O'>=5(-įsv ~%Vt}V7Rm9ŊZ|W I+_c*b|y55ޥ_+*#:I(S2Bc{WдHzW"~@c}F_g#dޡ[_CU,<쿍~o뿃Zo|=o7tI#!:S~`"?HRBIzXu$ڢ=L2BÒ>bү'>J ŕd>iapPyOF#SOK?3>,_%7~ _ -D}E7TL}U,<7|_ ~NNjo(b}mOߓc>}/#~ ?$~d)?Ɍ}9!_ '_N~+a< ?o8>1g…ƾ͝?+u xU?kq>w߈/"rI26]GtRgF>[Gl|__ T^N㏁PE_]PABa "(Y&!F>*|į c|y @+ uO*/mha"&+4R~ֿSH_D&E?X4o!D|ӈoQENBo/%J'I~"uͶs !?W){IAh>KQRk~2[G *#G )b}SiW#E7(bmg*%*aXDLoH|Z̈́2£|H !WoɟB-B  ~HvB请'op.m~% Լ 7Uy̛/{PhM2yʧ8U%߫f.JPF/\|ȧ">W(/N?BLŘfnqT>?N| aHǮ'Dڈ_@ A|"?NbBw_XK'_J.).'WBUkHZB[IB]q'"4 uz[eοorҿc62}n*uy|&yOd_bBu$IOQy%!-})WOtW¿O Ї[&B(9~fm}\W*n".N7¿wHzE$~3!GDG B<zU>~ffIoUy"}s&*/%D|=@aɿwS{,a|/|IJ<:= 郎#|"Z/V”C>꿐S!(0#BWy%!#W)>F]i>8+ a>U?Ic}%?3牯% )ƔQrBK(#vI}:B;w!|ߐ-6c }['_C}@($H+1?PO,(ߏ_آB[CTZپ%񵄨Sߨ|%!~gGC*ŵd;*:Bi ϒjB G]L1~:~5s!!gǫ&:/R,-#))_Ez&_mo"%TMȾBxʗG˩'}|㗟_MB V?%axUߔm*fqn[|ȧ¿[}~mʗI|Hل]QތR*[@w 1K|5!귏E:  ~!/%~b#$^N|"wC?D-+_] iKzʧG_sPyGc}/A!>S7HI+a}ؿUXIį%d)|S$=M̈́|OgZڟgi|5s!!(_o7ۉ/"D|)ɼcH r|?_ U^xkx $ɢ84"Iw|!!Œhч/sϫ/tʗ"^w_H=^򕄰}% _߯!~!įWfuU&BQ{-Ɨ oUq o¿KJ cWg>7c?BP~u~7ihW~gSMh/Vy !'O"~1!iH/#_@B߾HFE/IzfB/W5b7r}]7U>S!})|޴߷$}G Ѿߖ[>RE^IlJBaW+}G~zBq>80į!Dy_|!W(߯-g_5߭h??C?ET^D~E8 '*_DEAbE^GU^MW>?jɟù[B#ap *U2D_Fhx+u? Qg ʛf#C<]և %]َ-:EHZ`G_H[bIT>P|jdE_/u\e:D. ЇWL϶.S"BiŊ\W| |K2@N:{>aϤE*K5u"csJ }دO.R奊ߘSKBBć+RgaMe]YF|9!O'lQ9鿫ڮOVKj#5/U7 E֫0wDHEZο#,4-&BFKh6~3&#MZ4ݺ~Wy>tC꛵TBX~6i_9aW 8ń%>flt~6cⷝ BݟD/"D:T&I|/$ I*_EwI:cчo D|H:Մ,5k/\dP?  ![H VB,7(od"&o&!A|?"EߒdIw">JBBiėϐt+~ϔl>s 8[ȳ,.\/!D_?raT:Bma;_o"/ ~!""Iw9޻7@%٢E|"?D*$D_w_HJo$W+ߤx)ש2Bm>쿎{Hz{ oO/o?IE_|w?Kq/-"M|B/!}x[_?HʫQ%}ɢ$UC>bчq52آOW-2BG_N9_>9_W~|}įRg,~,o!s-/Q'!~!g_uFBrҿKU?ԥgi'y[R |Jo}ܸk5qGGkҊI>_rM[vijHYyEe;96ۿHӮ}]; 6Pʶ*l!"ZIsVhjYɨ뮽;w˴ >ICez-3]>Z]oFt{鳨yEY旅C4KϲwUYE8GOSs G|ˍ[wk~ֆTvN:*?ǮF8ۻP'PYEsͬQ#}aDc9P1cimHټǨFcAHشq :uߑ-VzrL8&FF#YG/s܊ o\7FgZڌ4Ƕe <Ώh_Mߍ;Dd?D7F{ilԡ^sXO۱qcv;\y9̆u*0e]Ǽ!t9 R{Ȫ/!Umۓ@}h61sz1kGZ QS/DOzKOG kʁzWg?~;T#G]`Ec:,?J݂Σ}3~%==@hWoINԬi}7с3'~P[P}4u;;:CV`RıJ7Un(̈́xwb /ӄ@Ajg_2eA((K|Y5k3K ,uI`w-З~^x ev'zbz:0DMٹ#c}I1C3~I+78d'}m3)Z`/fڵ>aLgdĈ9M,^͎7kuFg\K`qjPq]EYǩKTyy}Dj,k3Pĵ/wnB3Ϻ O菠DWAYe5,'uc44̐}1@oЉ{ٟ[(l!/o'sXq(p3c°~؈6qEKཙܦS~Y^rqgW:,*_8!9=a9R]]w}v˴rAgs°޽{7 >:eWPW-1/Af- C/ vuUc"%LV`^[/  N[[<wa1Xgucݩ.sj1CƬH94 ?&}ζ'q͝-Iↀ||ѤNFnI2˨Qs'+ѽɻ ܸfQH@gGh;((IaWMEJr9u oOyV~qYeўUKv 4KkobC:hgOr-Iq=ld4|n88\FŰ.cG:6 +fɎ`_fi<3~O-ĩPql92eQˌU(Aegp<?QA.O+c%;& v:0KJ'cMD,u~_nKtxmGz]fP.M#ת/H 19#Z_4o2RG=;+fџ9:\6Sқ9#(B#^TqR3-tI׭zm|M8>br)tߙ.t߽iN3:ޯ9O*V/;/g%N/aQJc0J .[eQ▀Uz=s?y"ؗ\q6]˰7w9O\t!}I0IEcsybX&]rXs5X?7YbםM5~T4ئtp;)`Z a?[]ƲCNUљx?{Xu.SՕ4T!7 T{A]mGH S Cxe*AF{97^m9T|G9[nP-}|Tו՘&S$ Q"Ls !@X͎;v8iNӓMdSdSvӳI6^=o޻O3v|s[ޝ7:GߵEI= nH(mqjb 7j>֬^H'UCu{T'8?mEi> 1.>Qq&ѲWp_14d w}ѡTGE5]#5zyEj 󀑿K!EEsd7|>rlRY.^1H`9Tt /tr|>á]s2p8/$n^cɋ } _#}`8f|}Cdn ]>~"],-ޚԄ?(Ep |VtkG,T*.҅.ϧVނRJ)֜ߘjףL|Tm_|Ƹ&vN6tM]iM̓k+-CZƑ;-˰)~ƿal s㡇9 _E&q!W>i"f'Ovz;zw-9>qg ݬ5GὝX8!Us b0U#ggâl(̉:{9?ӘqEwwΛ1RǧduH^qWicB_ao ۆgv;u}~{A_QxM˦zzMyu)tS6uWzg3Tk`&:$Mܔc#6ݷX߂j[NusZaG]1@1k)S~S*Zc0Z$јQNfnLq˩^[n w"rEk\dST{˚>m[wA&r((ofmlન v6oH<#%+ϙ\~U3szDi_G@6*) FP92I#D1j3 ыuNflm=ٗ%Ϻ)tVb)[3){j9dx jh6n:%tڭWUtLk>U0Ֆaƙf?JA7 f:'{ΥJU/UM-RfrַqbCgr!.mљv1/.hCx7},orY^]oYpEݽf>L #e{6Ve3!LzU1ތ:ݟm:+ޛ{M=sl2˳&en*}O>sxr7]߶87VTȽw It\L-.$8I=ܿK:p.?Xo7_G(-7(.T^|U!̣}"BطVo' aUįTĉ32wu1E6;ON"C'Ƥ_:d@ǵOS<_RL)/ߤ-z⫝I sR>7|BO|S1?KG4Bd y*E_yԤnO}bBȿЉ?H^Ǽp2XYN(o7A1.pt~ PȽϫ$~xpSy|Io E_oO, W)FެiBrZ[gy| "Iq1VޮKaLE+H;Lz$wm;><Glѿ'E$~}IN}Rþ~kia)^I5V_N;#nvm)uSykCpwJ(OOUgS=O%NtŔv~$K@3&Y!DM\BGC7釚?>ZgG$UOo"?_S~ abaω_/W¾_Zq+~6wy+n&+m!~O6&YwbS<3$a|oc]^s?PL֧aRqo3y~79 Bmhg*&%KB%[a"Vo 5 I3%Z17*&K,I~)ER._N;B#%|%uz?f*/?'Lk?x^ /}SʸF+bLͽprjrE$~"&5>!+Fw[ʧe- -akR17Z穊|WI5BJ|E$JOM:s>&="QO;MobVCH:B迃;`}$ O&˧y*㛝e=C6^< ѾO7陚K#ϴKT,\s[?_k nx|j~"/1y)i4)j~r^kS ^+cU̿^;[!ɤh~"&}"o!'ަ߷Y<n;5a,N*֒e?k~ygKiGb{? 2#IȣH1_L4F?f)>I[B%>?U!׏6^we 7LT^bv2!wyù?PXueS?2?ԤG4?MB?'~>! Ⳋ$_7"~I|R'_6鷚ƤXJIpi>IC_N"N$?ԏ_BÖ`G{Ɋ5qT ~_Ix+)1iJduE^YTD|lI4P_22FGߤWvj,zB?QZ'xƅۧxs3g*/3ca4 |!웮|ZKI4BWE 'u*1k6'xW"~?%!DU?Po@~-7O%+-̈́2[arKK8?¾Ug6'8oy}@;N=J?[_cmkv8[9ض{ ծ')ݾvϦmO.MZDƨkPbU{v\c=߃g**Qp]km]cyUYN%cjSBVR{G]oWYt@ًCC*Go߻*Bu",uCWpocOL `Kڷnڨc+8wCqf ؆(@Ȋ1fP+[lEYk_tIǽlt`hq4 SX0/8M_dw0*]qX"Gy; .x"\UKn0/1/:mӚ /hmkmWʶ>}O~ux=jI q>#Q {cwQ.xx)c~7mƸ/fR2^pduf((M^0E ߘBWr (cf1eܥi T}chbTk_] b^}B'w}v&~f$'rȔ~NCdΙj'qy6,t櫯n{e닌C)$|DhL##˸rsN0FGWY}Yq`3!Y'uWJ'Ά9%=]a20ęPu)I'%՘\"$Gu4h( FdPKnH4yxwY> jƪ 2pt_2@8o\u:.rqGtǎ%f:7沜Z"R\uYZGƶQ829 =~FԞ :ok68SV+ i?EEn m{H=6 g%5ԣ!W[׍ SV?/=h[|̻&)ȯRW7H' HOSz|!VZ%9;5\Z/srOn/дtJJxas>ރ0~%I|~ihڢ>/ːӆE1|=>=r9x|osS^Dީ*'mX$>@?WZ*C&SVoUVCu{zT'8nEiuC'i>剆 4;E|^{^[`GEr-$߳;'\{yC,f:Yg! 2cs{2V5hʝ|EkRSL*Zkr'8eE靈! fb;'R^%f\{ثEj[I:jyIlO`F!Er _s*geZH"5݉\Iֵf>oFPvˋW8R;9W5|C0hӜwӼtDHQdG<^a`+?c-?(kt.9+' J5rws.gOC#;p)CCN0X~m,j.K_O]}Afn~{Fѡ~u>h!~5:/]n/C,* -&%JsGiׇe6NHrr_]NWNu*Zk}T'xkh\Nufξ(8m{Z\gs,U=(oG9zg/ ĕ'C=A΋t@.ʍnU)'xuZRjseEE7+ibd_I A*~7 'x[z8*JV,r7怷w$R^ ,tQh~qB_Fp[o2؟vvvtu8xwo=Aa|S9G;;/z5Gڳ!io#=T(X_wGRΥ֞:b;PH9QRB_<ʞƐ+nw)xX^nfvߌC6SnlDɫkJZScSzE-3ʙ&`g^wN:!l>h 6L9Uf2;Bs]l OUMew,jf#4cHkic}Ot};F]Fި gMGzM8-ͅi9}؀  c `]9O"hu:XՉc d6G9]@)}:L xO' Jk٧:^o:qhVC2"Bf>Dࢨ"3zE#%kPe zcTTn܉:fdVQ'z8ѓ&J^[ggIvNv7&.#aOG6ddU2Tͽ'.Geo$,b{i27#wؽs w 5]vB(St)>IDq?GcoS,o''_ҾL'P{FQDˈV+g$~z.{=Cg>!z~þ'Y>Wns|M ~"/(U_@o5!#&+_O KF?Cp:£$_E+/u f?A_ Bğ2csTcY YB}?NXYʧ3\P:Bo#y>G<*Bbx%g>ZaB(|Z 5PRB>`E-!~jj_ժmhe1j)T5hߕʗʜ|Z|!E ^ ?9kfE'EqOߤ+ ῍1пRJRV۔U7_Dٸ{5Da^[wt!k,!~?o/!_o?Hߨ<3a]pфG jB(sE^cnBfk !C|Fq_G('oP\Inh[H~!#E盉}/'}_w%~OtV"ķm&ݪ~po3_ >Τur˞Jq;X~Iwh,ŔO0yՊ8_OsIO4!DI2'jҧa"֯RLG+im,(QMz >0!s`«|Ixq_ez!S5>#CaO $?P?1)M _ =W>?D\BO!~!ˉO;x&JBO#Ng7+.&/!||M*ō$?M!~6GvBwe@rE_ :͟b)>_kcK̵͚_Em ~"Oo4ig !ob%"_G:Ѣos H_[ %S ?F(;כt,'&!5t"?[h!ͯ!D|vC!K5wQBXS@7'QTs^' ݟ%<%JQ/sKB4Kxs]$!S⫈G&͟G'Vi':8ysy Uģ|%~1ZF>MȤO[QG_L&D}̈́+o!} -bB:KoBr~?(W|qɿ\4k֟^cb\̗Jϰ<<'T.*bQc\0)P_ކQnqb"u =M(+p|ۦTXl%[/iR} EpWńDm\H{z"(L=#-Zl׳Nf)2ˆ $lTa^R[4f,mq)(5p,L;niۀ.۾=T+׆ ًio 6 _Zk/Ps/J7dzf1ap>Z-fz!#ΥPQp;&mv C[u`7uh<_ɯ=>X Dy⡓5|#wI$NGvp&Y0@dr#I`(2P9TPh‹I|Nس8!~.SV8hyeʼbk7'՘\"$GuP@ܗ;dSVwV'4G/mwiwD^aoE/8f2JU1iq[a"5~mʼΎeO}7^Op0 6gy#Y2,1yaqeB'6,e9vܳc)=cxJAPDM(7hX_aqۡ(&  lmt6 3w|y-W3ܙ9"wDGDVqŏԃT",=2ЙaQ+' ̆>A#uc5/hj :zO"=CC X a]gb ؓ7AG+#RmX:fȎ,ι)ؕi8 wa9yN,dj:q'Eۉ 1<|9"F'Ĺ$^.XF9*cI: z"C*;OlfYt|mYX`?h=̳=_վVawY9~$ޮ1KCz6|%eȋiC1ɐΧG1N:\qۡMw{t'kwk<ҽ/ kVOks[:θ/ju_8'S-.J`q j<5ZO,XjUB[9Xxt'xt'xcb@gF7jW<0rp׼>Zu%7N-x`0a&TKrΓL?ŶSg8guBՕs|q Ky-l6ɒC\orFB;+nqVY-';-rVB_V!O$xI_ keV>9nWH} hXMZu?uHjpBD?yI],07b $QN$3(^f>hNUr툰5 {M68p{ةC }] ޷ ٟ :櫎u)y/:Dΰm-{Oȓzr2WYN7=>tʨPЭhbi?xHeUTK?7< xWp5Qڌr}TT)#}l\6 2)|;fJ4k5yStckZlK5eR ̯=%_EmRiERX6ebd4g͇rk'0LI(g&hz)Mt?MdS7L2<<>ɤznnUlbSl}$m*3cQ6鷣Z[HsÿɮR2.yOQ&NZ Ӣτ5Cu# G?!c2LtF0,r2g\1};?rꪕe@6O#쑁 Ψ&,Y/ նvHFd`|n*;|ME7yorGˑ[pwrOݟm:%ޛ{O]Ӎ j䏖{?CĴ~>rݛok?r\ᎅ$:.z|#qF{F(8w.S~mý"/y>?^q,4R7="eco-OE4Q-x{^¬W<|(mro3RV¾I1o%|MR|a4g(TL:£$_E+/UJC"~!K?'?e"_3^MI<ϳOoth$蛑}k >!5:~,?yA<_HEz۲| !k&~ !kOܸ"Lq9jhe1j)+~+ Ѿ+/S9iKBD%~!'o^̈́'Yg$PO5]NӐXJ2ͯPB>m[-(QMz >0-y&E;<,!Ɨg_O(ytG½Qjso"Dk5!!ʗ7?£|^ELAoQJ_4/#y^d,$D^lK,<_B ?^j_F|3ɃP8 ^?˿Մ߫LzI{-M$^8Bk.N< e}mD*NM@|"o4Ú&DI߶C(Ⳅ"^㋔Q>aLE}fO)_B'cS/S!,+Q!~!LG'Մ įQ\G}+o$}jW-<*o"Dx/c3!D…IS@(~OoSr /;A̤_XxBRy;C^iBoB/a)? ]WG"~DtŔNلC|5!!~!0s !!W2_@uM$_BBBȗ߬ˈ_B/S\N_A1įRHDˈߢ/'~;oG:&&9i2ז+RJXO\1?K݌L"xvW*Kl3&i~obq-)QYB[-򰯂:B؜]y诲Ok ja_[Q<*b~Kkhį'-B?#u7H,|INKfH,ib)qE?]1E[-)7\bW+bKrB,<"r ZLbO%D#~7L%v:ib!QSo2"7? N$X'c|: S8~s ?,S/j06Nۘr'(פ5f>oGW_wdžkM|ー0%%~ {Uģ|%yh뉯Ul$L:M.4d¾UxIwi~!ǧtEEBEy=d_3!tgh3&? #YE 3yù7f/"姄xΝ*Tx 񕄘?^fsNIt? e}$WZ͟ǫ'c| Uģ|%1ZFzިMIoȣ7P7_M{s2imV֤[5;gy迕zBIk~!IOC7O|/k;LC$P0-q{ !p~4~Biilń^KsAr~__}3_2$>_4*C <Rwa=WwQɿwqK:zz@ljڭc/X0A)sX+~5:.{h1L^[Kۗ_^x/beyK=ϛʁɩ9%=]aF[LҖs5&WQ)bs T9" ÅK'×/a_튞[ŋ^ߋsqxYbHsE<񎳑[Xt0u3ci8lp ˙A̘ˠpYq=:6K9qeSZ$ ZG$W凝oаZH={!/QL>#lWrt6 N3w|y-OGg戜=!ՉN)~Qg鑃 95A@tŋ8}V(F6RYߌQ8!phpEp&ưpؓ7Ig#Rm=X:c莤 sGIу@.~>H{pp"FGĹ$^.XFB(*ɎC: D"C:OĒkfY>O]Neamޭ'Q$ *2E^^Zo![{ihZW[ w| y1m@g~>|{t侗vwE8{iJWhJvzjm9rΠrq-];ht[Iٻ[K:[P]x1h֟WOՒy;/;NS|&>o[6]?[gZ$IO(:':o,wN,Z$'|NIEk IpWj'tz"3cQqiw̖7 9#yKI?Hrlܩ7w ,hqlbw"߅bŒп?곭OPVw/=GkZDf|g%*!{~"Bv"cGĐǴ(. {;>yd9Fϛ*-LQU}ž3ިV^x`0k*H?Zu%TX%˭DJNiO¿9q?V5ɻ>G~~)>?Uzl](p}کTԼdǻCb_VmKh?f3ȵ#V47qplc5tvu 4x[ 1ٟ :KNjҮCAۯi^tˆlltm?znK{kK|OFm6Z-ǚsӈF|5^UF8h ^^srΦeS=]zy6=+%M>IYGJWB7udGzIM oHZAT]_MVфJ)Bڷ8d7M`vS FiS^6ehWגM*T붡W!^+SnRl)?6l!x!#y?S7| !ɫ4)!MV_D_fB',ߢ'>Y+ Qy_Ojō8B?>c~NLw(_Sj7}פ5ϤCy5-טt~CuįUN8hW@ 1R"$N'w#:JUQe =n&~!ڷk~5!ڷ9"/_) $~!%|?$:B˥7(.T^|-=k>gI~!;G|b+w a_ $fջOu'0xoAOrcv'?MqKYݧi,ŔO5y4⫝9.4!s7|N g:/X?Km}_Ho9E<ʿ*E;>?Ǥ5?CyÞN0<_O|32W_hQpoB_{7iBrګ5)!{I/OWj2B/eķ*KܤWh BdˣW$ Pʗq5į&^k,<Q[ڇ@b/ !_w˿Eyk NBB;o&iһ,<B~7 lҧ5 !/%}w> /#D|VE!_A (C0/!"D|ՄL|! K'_LC!8c:; KN/<4e1<ΝǪ~AL45q̟_~MW(-;=,UX?HI4!7"%>_#_LG=-_~DbEO~nO4JB&E+äi*B?ߦ?o' ~io5#!+~ma߯I~!K,[?M[ 1~~?$c!%>Ya/9D#"E`k%*5P?QBbE2ͿPߵaE\M5="&oSO# &MwaDMB\C Jji?_F K||eh~GxA~ !:&IBB_E|bMB!~rG B_M*ō$-![o'tN4IH'C0W)Ra)EJt_NC!Dv?iBh##>ZۿRPI3yI%_ߋ[_B~q0Ѥ'~jOLaү-(į!Dkד~aiB?cQY@wT^MU^dB/V x?}_CH^d]~ DiH ~"Oȏ#-<IUjr)'[$_E.# oO ?O'U'7B|/wIV?]旤Kηȣ}f_k35?Ed"3M[&#)kq/=Ǥ!kb~2?_ۯ}} odOW3lC)jF|;ZrEod%c䡿R\ \u~J.#VW3嚿@۲?"_O(260iJo -b?˯&s3B͚?5B=yLt o6͟[դ,п"Ovvj~!cyi),#\JLO&=yRvNɟBoh~ Py~ ~!CƏNIþ.+P4)!4F)?OyzcR7By%Iq-Ť~_G}1߯|[gL: _CP@%߮<;IN"H E>{IjBדCS!J<ݟ ۷\BMzE忐+H,m$ٷbKi91?_H)~ ak,_ 0fuJ>_^$r[(^ivJc׋K{:Xn<1Yasg玫݊;b ݃yCmT=}#:L<X:+?~@g_hEh)Oyoo?4h4ĵ;niۀlFY\؋6&E4zxCZW9Ρ #x#W78?Ύq|"@^SbOrpNIOWoXgy eʼbki'՘\"$GuAsעVX.q<{<u >?,o6yuO/)$ !""Iq m+9钁Zw~"ra{mt B鬪a FzʞR9#9&8#>jWCqkfNuq:]-p' 붚"-ב sxޘ8 7 DjgGǎ"3(=H`j ؊817 je3?%X4 HNUy Fϑ) BhJ6 q)8ɠڠ]*ĵ {h̰DX rfj _( \uYq7W@xёUvPN\- rm̜Aݱ{7o9q{N0Թ4dd]Fgf?&RHsN}rZc牓X̌,T'%y@۲6o;˴=պ=Ւ_Zv}UiH"_Vx5| NS%$jPK /ːӆyO'4p>=hvr_i; ^=x_~PN'_| Xƥ‰ՎOW}m9:dQk 2a3> >h_V\I}W@NuW^vQ_xWH6yJwA}łCQMiAZXʾQ*])25_WCo|&>o[6]?[dV; wߓ7W;]~p`f-UH[b7AxOT{~8o )UfP _s;=_߄2 ެVu!{=<,_i2~{F~3Ub~Nh`:KpU|S u)n׼EA>Z&gr\Sy~xPL)')š.KC46ߩc7r'x좵V;(wT5 LIstϒY'%==NAݫ>taTaljtk'a>]H\V͈G+&F6|"Cq '1{z8Gޫ Lry \p-rKRY!~ͤ)C_.}t7Y}GoЛxwcyuwuH\w6_m]s/&J/wŔ; ~>,tC>"!5 {?wm8=pԡΎQTZ79)^mK-Z>fu=9]<n9^\ɤ^۩nm=|ؠ+MէmL6S`l͖L;mʻ{zKTWZJԊLʸT_osg@6CirK%-bME/Ғ!M"<3LFo߉3nY&#FEw7uKDQMWr F:+f9ytfq[(ޮzh]&DTc}]>W.xmQQ9556FH6Zj_4HY.m $g;RzN]tk偊#ݝVw7?ڈ;|OנT@f?mG<M)w[pd`@Ӓin}0At#Z%=TYE WЧAYnR o_`v5ofEQrLlVEEn s^)zUy?mY="Z{,`^aeT}F,uTJ?{  R<{s3wM1MGݞ?Crg}>c7]Ȗqcv灼~]$T2y$=375V)˿mckhֈ i ?B-_F<^yGH{&(5ʗj]P!z~þ'6>_A&?HzIo2tWh~!_#WߠLS[ݍF*"_E[Lg)_5Vw'4BO 3ݭNY9?ͯ&D#~"޽*ŵ?i3渏`n?+W#?C7FE'~bJ3f 5_qߧ ~"~'0VqÚ&QD|K5J@GK<_L|!_x\-պaǵ"WߤHu1YK+b|zwˡ~K 5ķ*ݲ_C'~-!Qį'[5!ʗoȣ[Ha 1>l'vl'vt };M""~'!C{4*Bm>2e bʤh,Ŕ__mCy Պ|I4!O;a<"֟r'DFE?rd[41!1-/U\AUķ)aһ4{Iþw^qMzo&DsOu͟N| E'*|*ߧM&D1kyW+V_O">G|:Mbl}_$d/}XH_#7B߈Fqn|Q@qϟh#HgO9ϤhLE]?ME"k5.!{&"'~"`ҏ4>!&"?"~b#wȫ~kӁ`guHC 1>zkPwH 5>\l?RzZe~cP &M*YA7[uqώlR/ /1őw$E塿,Ο+'31FEORi:NI~3W¬%y7ELoUC3L,CLW(&}do#3a2QmkE}n_K!~!x̍G_A3?~,?*_u|N4X{//曵⇗bIKLV-%~"%\R!ob6f}W?Ki_sϜXs 1пR\ X !k'L&Yx_G aſ,b3gI5EomWY3Kk%iRByF2Bط Zg>_v8bnd?HrB)v{Ťi~y|A8~uӕ_߳"%>CsIsLE?X}BGB|^K a LzEe}_dҋ5 F_LZv2CU O7}@"BMz7}d{,ķ(bZު+ QZq#IMhwC,i|m&U~P|&Bχ_DIi~3!#&}""Eq5&}\QClj_ʤhhOCg,ϑBCxIWɿSkO#D3g+/{+_w5 ܻ~B-BB;g#^O|"?C !/"}?"E1 aO_3_Gi<"_^ƟrJ|J 'x K9+>IY)e&"C|"o?5&~G  ߦ>H߿%d/__nG!J?l#&DoC#g(_o$r?Fx&^.9S[Eƌ$KOo%'M$+,(W|_N6N?Wm)D_M\r |!`)'V#?)o&IUGoiPwrjcdng8x~;NBO/u<0_D-< |J22DCOtVWBIOþįT\Kϙtn tEo#q&=^"n[ʧGm 'Zp{4!SBxIwYx迋¾-?k!3-"~"~#>>}P?פiy<+v}/$.c~b _L݄hXƗn9_7BA'wYyù#Yb}z屮ypNt*Lz;T^&¾w+}%74S"~ڟ ˿_*'Ǎ?F)!)lB%Pc!D>N\Byi$B)6_H߬HBeI+į Jq#M7(n#ocr_Og+">u?G_%xdzS)@>KIL/#MEVBnO4JB1K|3rBω_O QٿEMMo&D#?P| ߋ)_oU\I{ؤG4/G[a#įV_-~V@WSq"* DU?SQ䕎Kod_FEK_B9/Sl#į%p%oW(+>L[x?M oKZt\?K_4h EĶe/Yо&KVX!sd %-_GkoV_L/VKo՚J*b}&"~&п~̯<ˀ~%4 3֗C+g~%5?E(7r%&KCfg_ğءyfY"w_oI4!ye)?ί_P0>85>)?/7tOW8hREo$ x0Sk?eNѶuE Wң#7(6&ukBBϱyM|%Ƀ^mZ'xv oo1͟J#~𦟕xw3"?`iOB)gmi|B1R>QBg_$&4WR'ͯPJlK,()W9iTjBLz"w?Ut0yLY6H%I_/&~*)%3=Wbx}V`%MzW(r=hW, 74՚?ëLE_M|<5&j}_##>C{IosBo&>C?zIfBmķ/&D ~)!E2B&JB=&Ob|yI#~!ߤjJBC-p~VYڏ?F|!ƏOǧoWJIm?esyY+#bG#&D||&/Y濢?/]+y|?Xcow_-'ϿC*6gw4mO-*b~|פk~ !{1}(ۏL=Fl_+?%]IF E_IvB"~"&þ_^BזK'ߔ~Y{It/c}j:'8aJG0¹fLPR!?R$ oaX~ No:'~W*Sʞ`yGgDY:x(L|٩NVͽ\t<3N_fG|}fXmOihP|dvGsH(bO#}g^j|^ BďϮ,Neo:g鏥 [7~smio$E1߬B-_p 7kV_Jb䡿xJ͜PJU<5U^d""6? #ɤ_MLBO[!?㇩kNͯ%}n;O+b_ʤݚ_G2Ew_O\^ťXAy~@8߾ńk_Jכt/#F<ʿVB?hp}W"~:,Cw"~ߕ JBwq'| ȃ7\a(=e&zJ%Gmkvlտnm_`ݛ6l׬Ү'p@w{ݳik۶B6]k"AW_wupz)´B\]ǟIU>G䨵Qm-bwҶ*>}OͭjnC;hޡB{}j_\_X5MQǺ[Wa4ؾw[hPqH+wS2F j P[K̘o|Nn~y{#':OfK?Ch{`B6f!N,t啷fAO$K)LõNX܀)fu͚l+&au%>?VE}V/e?L7=k(38+4>\ $o){#e'}ᮞMGNhFry~r ?9PW!]֮éݽ]}u}ǻ{;zRm<_ lHȞC}}Šq>"kU\V}\OgB+9qd؊QGNvt SzpXw6.0&?lpUq*8~pGNol vc񎳱WLM'aLv R{tX Ovr+ aAr][5p/VugkdltC)覉]'b"aʪCnU;q 8Hn?.ь%]0DA[m8:ݽ=2̱~3b?h‰a& |MHnwN>D]I|<1p/ތ1;:u#1,b{NgC !4ǐ2qs]uWCc>K7+7dyb$jȏ2N !RJ;~y1vmOGY9!e/R:h_p[GzcUm\KjnNx᥏=u31vkSʽI8k99 uڟ߮/yλODĹpNY3Dm~sCYdUi&k[h &L0Ց"JNxQ 9ɦzJd}ѵoǿ9ߥ1K=nͼQ?}:Md x'[DRc߶^L37YXHjy;%mμ.,$;_Eh _Ciȴ=X[:)ݳko{^ ^_qk#a.l83$"WV畚  9];q(>q]o;epEGw.`'*(UD?\xb.z3X{X#Ou,<G+ݑHuFp~[9ẒSDȢ8\'Xϡ!F"{yI~8膽'z⪓"Ը{Ax*y''\ҟwLFtKnc׻%O^`KE(X<5tF l]&|5'C\f&^G[Kdm@-w0oޣm;d:2ҬrB !,t25%˼<(yj#/CJe ]ɕwJp |NrŽy]ZI~>(ZkjܢeEk.s%5W-r{PtJJxA\/sKc/jI&wתN' {*kOy!^g5bQI:sCGN|*{p)bM+Y>WX/z7J~_P^b/ZVr<+lEk")%Uk+a-kK?iGPkJ*',GWEZV]1 /d8KEj7 آSMB祋0ZauCmF4eb'pbUgs%>~>wbVebK2r~ _4,/ĤAg\Uc_g6J``pbjj>7@Ŗ1gxd؄ >%I_bGܻ<'}4#:Y:5+T_R\т+Jh)x7Ͱ+XD]0?>n'ӄ?Ȼ彳y]dHE>/KnX@o tLNTyEjtrON/WE(Ж,kjK(leк8I<>p>]^ǯPKZCӜo[6]?6*|rq;s9K^z*?j)H7;5~䄮Yooeg`2דGg^9QӉ[9Ed3g`5|R/Nuғ:=? ΫWSH^^ZgQaEW祋0C b'X"X_Gkzܧ! ކT7ХOBٓ1D.?K S? Dr)5Yr;]teS:q=(/Zk(Np4݂=P9,ܽ%)N|DsY y-پ(nq"_"O9gf!+qNZ@g?H_nO>/텮SpX.|-uW oRXn]ɉoٕ/<%჊f8H%u!H͖Q"T#ߚq;nKja&#=z/~vR𖒓{Lݝ }]9eo6wΞ> Mvk5]4mZxu馬׍cW4nd }]qHlJDa+;nmռRAhA:TkF9*M0i@kVq Lgڐ= GhNǿ pY=$;P&{ GW#O{Lor'ѲvwNھ~Wu׷9KiGܱ{5M@ k ]vB(St9?$PJv.Q8N1sE^md}~DK=(I!^:"ec{ OE9=<_|n aUU>_5}_A&?Sq.7#}badK>]|a4g(T(W KW<ǾYO#})g"9_Avb~[GJV~P's=>C#]hAŤi:BScaӈo'Lxu6epw_ >r'9S)>A4E$iҳ5bJyg\<6Պ{Mz >Xg$?{Isre&H+/4[y"g)^ >/6y u}//%ˈoTlyIBca+`k_H^K|3!:ޠ-MEń_7& 7B/Sl%o5m/'2w?0]FӤ/ZQ_C(2NۤiZBMz:BvY}į'}4!'}Ȥ[x0o$}Yqlj w+u&}Z&D?e,_K|ƤZx#/YsN4x}%ܗ5?!ɉ/5'wyx"{n儢߬}(y <俧 ~JBo?4/ onO4B;Ǩ< Ue|~iB??uu;QyEsⳄ? ^Ӥ_j~3!/2<%-+~ ׎QXC+`~I~#'~Gk ?#ԏa^qyjߦBDwjd/>K>GaHW<%F[x?o$>I2xk{wo񍄨dR)&[xgD7'q-7+aƬto%0 :<ʟN+(~X_E?-&k~ !#k?MKg,aOQa? ^]/ǙtEo'R/wh\B &="w?iғ4yb? ?w-5C ?ˤ{N&"?Cq>)B9&"%~6!ߤk'i{IC󉟧I/rrpI/C#ͯ'D8F_b)x%^ o$&C+IP'*גb~xY77f 7| ! Km&CI~)!_J?ߣ +>~>3OSN$xo$&D0ՄQ͟C?#?J\BIyyS\A_b}9(6}7鋚H( &}"H|b%<}!oB+OO ǭ?:~H&}K"~iҏ,[7+.?o=<V+Iw-?'orB[규D[AwkLwY}~J|Bψ*b~`_O XIFEħ4 !Ҥ?X_TIڤjob}@[Nm?_خOO< _53!`y[ 5 ) OzonpwIcCrEP4Zj&GChK{GGY'P^MMo=~ 9]¾i1?r_YL&.R!_?_ UR+?+uL'~"'a34.!3KC6K/_mUP#b|K>땗%1+IߨoM''I+yH;h?,U fRh~ ߓ]&C*֑:7\IB&n37IJ!DT~ wӚ_C2E&~"Ek4=G|!{IYx迍 _I<@k"D#4t~J9ӔǼw'SѾag(? [2~K4B_?CqocWMQǒ{uH7B/V\IF_yI/KI~=!eo$A'էNJ^X ?p2yj+y}^ysy}Z*uW 7"~@|"ohқ5!M1(_뛷v_Gf{,vy}ޥ[ wY{~C7 ~!ƇO?C&}Do$D>#?B|%Ƀ%|7$&}V+rIߵCgTLQ`"~dy<|s Ѿ_/_K_M4/_#>~?g _'XZoZ%ۖe?5Nb%L$DФYGcm"O46!yo4c;ևsB|ZxOK?/' UA;̈́Xޤ?ZQoQ\A"H[?ku4IXx?Ʉ,qǺ OZևaj>d43u~)C|q]5 j+G\B]7|~/yˈϧ %LB&M?O_-"D[SOkAI> Č%4cƬ 3-PsUG K9s)525q 'oFTܤ, ӊ>qK:BoI[,пzB]?QQ?sYN 1{y&Ez~"O߿ ۷R?hⷐ"~P%;,_EJwY8GE-񊈲!xT;zqtXO \5~[xƐ/v,,/uiCПizmkmlb1uY &I>󂍻9of E. :b ŮvCwME9]+|_ĭN0aqfGې:<t Ώ F1ߺ*n45~+,rCȞDfFK^㣱19mFAPjhvs[5#N?9\s""sZN!m}}_$Pg_T&Ѕ$K$:*:!|^,.̄.=W/)7rpIޒj @9??6tmfXC-ތq|m%W؏kTŠ ¶&Ά9%=]aFvwnX;b781}$lf!<#E#FǛ]پqmSWo{Zn\;8'dS%V!h9ߥezq̄-(O(S/Nu~l;pZsonPJ"2qΑ-;< :=9'Y\r;2ڒ7_cc7-k9=υ gy#IDŽ; ,f 0 XYcxtf3;6 ݑCeXWב5 iq12j_nGhmr::| Q¼EzE/=intF1}]'Ow o3{coYIi"Uh)v SOu-ކDr '"]{&Wo](z:ouwcoH˫j4wvuw7}E=?TĈ}rdlS,"V)_>F˝38R΅I}G{:OĚjfY\u$<]Y!W>}^B- k"]^~*$_~8ʉXNJ;O=_վV7\^^Z'8+NдtJJxasާ0q%I|~iڢ>/ːӆE18;]%NU]s'5܅z|~^Ny+TްCݝ.yO:wk<*v_ε~_׸kVOk-Lg\P*8 xw C5!j2!Ώ .C-׾yhuHq/)^DPܔJ\#sYI[~+T;뙧;qbŴI)r}Ly}ޮShiV;wߓ)ܣ~ʝ:S>`h~EWxyW 11Aq\q>7y$_m"dmY0_GGmm. ( Wzn.dNUC/cQezZv֩7Zm]sk̩|uӤg;YGZg:S2]O<,tnf}+]Y(~9nl|EY F<ˣ'zD=#g- caq{eD@_A7ұ1X_7 ^L$_QXX pʊDMlbԲ˄7Vcqr&6 ^Ϊօ*y7ۂ%,ag1COK9X~V }_>[ 5tُ;;;zR[:Ro9aZ4tY" c"M?>A`}syɸ>9pByUGlE9ޮށBzQAdž5`\"y/P~0~0JZ#Nror^aoنgv;u@jl(;TB1M˦zzM|7My;]s|)>V~4Rgĩ BSb-lxwdfRu&׼L6uHZ)o*moOc) ՂSݷJ{ԦZՌlJU5өߊrJN)\)I4]}Nmr*V䦺o].3vwE&-k}ްɦ5 ʛY*?(*:2~]N<dIsrf^v3Yohvvo/+[rcPn Oc6Ȓw\0cti $tDɌ*yI+Q>(®L٣6v?xOw}ՍV{?g+1eP`#QMC\A c TjΜ]==kJ 2c_Yw N{M̊Uծn;)>l2VWY`8cYcg`k 7V~Ju#ưRݽpG ^,n3oui^=)س8^Ň{¢8i7@0#ͩ~aY¿PYvF .t:-V/o}7-А s@9X*L z]>%r;6-9q&3dS]f{uUu ckOtq\ށήخȦs,];[X]}jb?Ss38. ~(qM F.vmMHȤsXwgzu?G asUVw:~f/<ny1ծH- h NS/.8f,unئR(oUwȑXi#~h?u<~X~tu鮾ٯY7pll96)g H]84LM ` ?\ʤN>H\eW~6^Eu6`o:PwZU,ݲfijՂ_m g;0l{wsd8ntg )3xs[ANLSW3 :NRLse_H'oxܝ1z dYy^ʤDEn﫼 S:Nuȏ/LV7۲F(gNsdS7W99ߑˢ;]r}vܹ̏ck?b~]$J2eqF{('(u߹8z<1-o'xwʧ2͟BGwY䡿x<\iQOE91Ryڤ|^¬W<|o.'M ~"N,u_~I~5!#&+_7ŗ>?M#~!w֧$h_<|}W*DRͫ4!?3Fh~+!NO9щ*_?Oz, %>A4>!ڧޤ y@Eh-5B_f_I,}ʏPF8bRa2)^II[.|Fwe<[|Wo5MEȾ5&Մߵ1oALmO4O+1`G}W)ROy* >X~EOQDN@ M&ݪ̈́Iþ[o!# g!8_L{;Kž;Lz_I4yD+"O2)l-O5._CyRⅻW~gLeY$lY^7)n!<פiVBym F_DŝN^B.B}I/$ЉϽ$/>Bȿډ?H^Ǽp2XYN(Yy!// {_I&a*Nޭhw,C/U\A?lC?b7-?>j,<&e8mO)o'4y)">mg5!gb7yFB__HfŝN_!~!_ߣx5WMG_#kss r}- Ϳu:.<~0/OxOǸ٦ַ^8?Lb/MU¾)O?ߡ۰\a"|'i~5!_牯% OIw8̂#{$>w/1^J,ȫDg*Hњ?P(Ch៴8Nk տ yG|Zb嚟%}uˉSl",M$?[HD|"GD95~WߦI4 |;!s$_IIB)7)nWCNEZKta$~>!c9YFJ W|!cXڏu%L_IlYh_VKC&窼f͖ت1{aK(fþI~9!IFj:,AgE#xM Gnnvr_3n|dҭy这xKC,B8u|rפ?"F$VJD_x%wʤ3w:FVm)J;^'<ֵ!o8w;%;Cmx)4w?]1mv՚?wՄO<93W@Y#O+'_@_//$oV\L/ ~ !_H2$+!bW)n$/#~6? ~'r*rrW89׉ט:͟ZydzSd}R^oM_E}i2FެiBȿɤwXaߛo1魚?y|^?귀ߩ< _g~xsTEϥ5_IϤo[aI|i~!1!SIلysy}IbYEܽOY_J>#>K|Jį&}_ ~"&hҗ5'ǗLW<2X'|?_%~U&}Sw|#F߻̭@j;_IcïWN?LW(;z!þ_~n" g+E4闚_O2yKQ_o$D:Fc)S/"}4ϚߢO1(ķ*bjBa#CyD5F[#,| $G4 PǷ#,?xj?"OG%'i~"Rxk 7$'ZxHS-$OcDi1v`}2#a|0JTQᒫe>j|&?[ؔD Eܛ%ɔEW%~H:BUdC,ĶH ^3wr̈́:'k_C7e^<%Jd|¾įSܡY$ņzIba_=}M_C ?3&[4 !%yBIba_Bu?K?MM%WhM:>'ȣO%yu5y9Ǻ<? J󫜜Ϥ\C~$w)^7{,S>{C/aOi~}Hr?뉟Q?8-? SL ߍ7*HK!I26"~-2!]ML'Yxo"D&~ 7^Nwwܤ? ֐{ME s$Okͯ"DB,o_I_Kߤy7@|Zq!?e_HKަ͊~@3/QV揳&ݪ~,o%,m*{5/v^ >w?0ْ|I zIOѼBIOȣ~O!~"=_|Iw9݁b.Ky:կa?Eď/iEkK-X߈e~_K?פ,?7B+ϼg٧'6{̝v-F#?}3%U"C6[+Oy-!aw./%w_. z^~x|_"o D=>` ?,x}{HkO?J|!3*ޠ# ׯ>D^%W#Zp yȗ/L_|\/| !KįWU[aku RmJEs> Ub~lЇ __Ƞח?&?1/A?;L_?xBп-w}gOr1O__)BB_F,+tAya$ܧI+"~ ##3E9#@gm#نFc~w2ΏD>WM<ͦQGD^J(ODu# }WGP"_K_Dg}俘%_+B~}CDyȋ >+=UEVjlЇ5]G֨VՄhU}_K<ڰ3[@`(i.]uzlj!~ Q}=V_Jڏ _/DRb%oJ{E>K0fZE /񥂘_tjbW"Z7kЇ'XO/Q2sKU2e/gJDH}?@JdJ|!a&9&J0j-iEGU:fЇ# Iw9!G}/'.65?ҿtO'S)=<@k&(Zct?At?rJ Wbύ*=J]ag:>?jd*$<2M/PUY+ ѿ^7Jp=J|!$@o!~ /#~;!ˉ)x1wJwBUӠ Rd}wWо9'~B5;H3?:+.ұQHVk=<"ׇ?@| !﷫ߵX5SSw| ߥ? qN>WWa}/|X)GGT"$'>PR~܃K a!0OJOFTz\; 1~}Q/KdK_&b}y5Q_'\?|Kox6_J!~!{"~@|CDPJ3#D?U7}gw}/E~"@i8uo 7??A[!?CO2jy7!CoC'}o㿅ǼOI\rQVk4W| kT3ˠėJ|F T-YQL>&>faJD^NcUlЇq~JD^I( UB|AڿNSH䵄oz>/2-3 ,/=M! __NL|Yi+o^x6[yL'}z/~5rm$H3Vϻ2A\o"~>!ʷEo&~*_GBͫ]OZA>FqtGo$L(w[o;W[)*fWi!KD>]Qy)!쫵\">ʿ2AP="G{ ' _#_"_,c=5CA/'~u-=(fBԿ~>7aЇįL_!~Ȑ C?J;_%Fx&w ^D|nń!=/PE}w3^I_hпEqBb &/!~' !>B/7/o,F ѿ^I4?_]"/!UzAE,d5*V䥄Jo2k/nשt_;9 7ꇯ}ȫ~k&Լ~6G>`aү!o3?뿝ZBOT˞ -7䈿w+~ȧ}C| ^/J/Q|<E>}!OE?!RBm_]&>ja_NLj/"~r8$S*}IY33BϪc˞ *}Q3i?gG_$>&XJWVo~%cЇ/_N*s >_W+?4w }Pk vKP'ė">~˾f. ~%TQ>1Az|Jy !Ư(AK|-!N?S}{?*=)򅄈'TA$~!_LO/!D|ExW_JOeeerB1?=9_1{ҿrG_  !_ <?S Ynwk5G%rP;g:55tAٟ'G圙"¾kr &i%Gy#ϙ1C9| aP??G+f2~:=[޷X)rj KV>&DsXS'rB>?G5O?0d_4r6Xur|_9 "ag9oMk5Uj6ÿįBRU"Jk ЇUnlvBm_Zw#9 <']~Y!vbJ*F_;T%"A_*NsAw?sJ 3 bwJkD>[Jo4k/D>\'gtA#Z\ҍ"_D}ؿ%+sUIM}ؿՂUį'DTzȷ¿ÿ{)ˈX U]Wަ+ v A?A˹[ 1N¾ޟ~ȏb~yU>5> _k2F׈gE^Lgb~[U_䥄пOė !v%}^>쿝 jw.2OsWG3O+.a7bD_[~EX_}Hx0/&ڟ&~ !柏*>fٿ/o?xg}!D0f >%لJ3O_*OW~ Їk|E1>}h/E_$jB__B< *_O <Q_7?oep u~G| *֠G|`-J?y!*ڠ?$o } <9/$D?~m?+ńھ^Ax+x?!GkI&(IK Tޗ+{=g*9Q W b|Tbҟ`ЇҿEa/u~&D|? 5̈́į%Uk/k_G(kOќS? ee?o!O0$PWT/CXwLtB/~W_Bj.έ,B]>5ToЇjcO̭5Я%ل:_O|)!o4MX^L| uݫ6]&E2䪱(wA/#~ u,WiWۨF> JW nkD0dW]kGk,7wZBB:C/$T 1l2nB?o+$S+R+e:W{ȋP{_"#t}/ J[<<_3K/n'oW阁1eD:s࡯Z>jF<ߥj^rO?C|şV| 1>]CAo}- Qg_#'~ _&OMnTl_IC*5o&pe}+$4b~B^,Y1/Rm}ė QKTUs ѾtAo%Bh_E^C}Y>쿜:AY'"_A AY'wJ_Ik_+{ o!Uu).-"Js&x!=*Q 1?A7#x1Ab3w !Ͻa7&1~jߩһE^$R>쿛/򘠬_CrK| ?x䯸܇wgr~ APC"!D|0@^~L䵄_'@} #q5J| OQ}LgU >S+}՜|Bߏ mJ5:31\_x¿_ڏEB~xwąF\Jy W?'-(훌Q" \>E> W ?/"D9@bȟO5o1!o&x@sC*A_;J*%i"/RTET5~͂;~A'+.o/G^d_]~yT~Gz?P?o`O&F̿|jNɃ| j _H,RƬ"zSk}/"\쫵dL#닼?xFLj&_J _NSy]N |ď~e Ǽ h~b5{%og b\ǧnЇnXJeTZoЇUė ?O] 5ǚ}o6Omy-!_jda"6#[ vikm D^HC4A伋DT=T̠.".1п gˈK(<5cԋFtzޕ"-G]0#+/V+y"!D~gЇVk 1_GWwү'7?FAY%/%Ir&KnI!Նߚ/'$~^#NtmG^\ҋ -y},y!G17az ~7?lca9?K|!+͆cE>DŽ-*T3y~U Rc=L׈|or|J|!TzAN\A^ݡҝ"G!>ԜS[ڧCO^7| =*۠o >&XNߨқE>P׏ޤһ f bK߽*UUh߷>쿕yZ}*= :B!a(?2?=.F>y {J?5ėVP@A~lЇ_%S_&C/wh¿Uȗ¿}>(WWUA!Ip'T7">2m"-> <:=J_FB}U7"AB7&Jhoÿx/ a?o/S?:/y}/Ǻ<%.3kg්vEJ] A^ E*!*Q ѿWO6#?_*8Ia/W ΧJy5!֯Sa>B?O~-!￈#~ͷ ׻kΩB!~!/?W<y_"hƊPw}?ď[A K1O5? _-F8ȁԿ՚%Ag?PWyPW37a|_*򹄰ta A5|>!<@_C>VxW~-!G| _:f/#DPH'~%!oJDD(/6_%JKEL>dЇį%Qu(}o4俎&*zB_EҠ7=m D woGxt})bA>ߡ >$Dߥn">.TϠ#{Tkࡿ+_%Su^%q M]tȗ"r $]IAWU>Tj7ÿV ntX ߉}?l;Bm_U$DS~"8k~7(Ն ҿ׈=N#g"/"D>K狼w3?v'>FA B迚bFAϺVx:_M]Mo[C&C!$Om*C3oWA>쿃hw_B߭{E>}^|}| ݿ傴A>,*B>0>GD^C{8@?B|!*=b"OPp5i>#54@迟#~=!(B}AEEaЇWDr>턈7;1~|;H; d8i?*xB3YFR_|!߯T> ?Jy!;C|}H?O_)Jy=!*ݠH| Is>Ő?) A\DKH!Ͽ_M ċ}9ShH[P'Y~*5~1A߂|FPگ @G\l-G| o) zBJ}?A߂*My#!?)@'\m o4%~ ԘZPdaWJ|| ,jB?[˾o\x|_%'^+r)>YP+RBćZ ,2~-ebAs `ȟ4,NO[&j x7s|2 Vx~o:_gjTL| zlQ>\*JBz #D6_-XK#D ;ZklrBjQۉo$D|R. ;UmЇ]į .46~ʷ/DI,7_D؟wPc"/'D]IBOCWT:,*BoB}a . G H(n??& >Rt?M|!*ӣ}K AOTq꺡łɾ y !_UWQpȯ aF!U&"7ڧ e$u __$/U="/%D|2B_Nwt+e*ӠJAh_ҫE^CJ jk ]*-:BlЇ'DB_=!X߾7S}5=9}|;)¿w#>W\؇Qu:N]ZZO_ ||h7wϥ&޶aރ{l!hTwOO>qߎu{[v8yT#QgZB`ܱgc\ɢfm8t8#\:Cܽy,OHv۶-`pF [_kFtgZYB%3Ade' 3:)_čCDȠዖ!Q`3PβYLZN to|R]19\ Gd:П2 FpGȡ.&' y"0^(Ua9e9IrpχHTl_e6O m|2cռnk&J=7m؛AVxB;Y{9`p䆸gt.R1Jaw.\U+(yJeOI[v 4rU{.Hy+lA7ht[s N-sxr*=70 n{ݵ8:@r{aEÜ-^DEfQ8^Pn'sYy^\҅]r_,97uR':z&l?P)7~#q7,$;⭾16w ^k>písBGW :Ϭabdޖiss_ctAg=jVm<]T{m=޲ptW +*xN z%:^[/B#p)#/_]]8?ɾ^,'ّ8k G%Xz,GjkkǏӇaQ[{88p q9jR^^&WTv|cJz[;ݪ<%6FDSd9ݫ}05V f*|Ӭ[j_תVŭ'J|fY(aʀB{tUN 0eٔݓhko|(ON}5י8ɭytb`sՀޑ8Fp9{HsEPx_O))V@-8t( >\y <fOA^eWl ]s'g"Π7Z^{D766ÕGknס!?׮.t{23k)̞:MٗiMtLqГJ<9M^v'z|| j`,ȉxG9B嫩S^esgyuD',&ζĩ1e+ _!<<:_2v5xO `Z CCt^g݉[ Vk 2u^g|?_YysAAZHk<mk?8 j0:TM] y"wP' oNؓ#GmN/~~F9Ǿ\rVr3p/2jlP@`{Jqv]a'޹o w463VyZ+u*o[tŃZwʴ%َppx-9+1QCfw"ڃZj`^әl'lp}[#_ux|s+u+{K,l|5@NȀ͘N[F7R܃%w%pvLIk{U{"nށ}t#qA<W^L*I~rD'p'ڗJw&=1<\xoWO6?W~x7o|!(y!Bt{z;zN)'ѽ=;]ݘDdЂ\uJ33^k"|8>'ϙRD7V7vL <[/rƊL&^;VuA|[ձbEcck{3SkԘ%eIIgjr6ԜÞG8Ϻ 5^$#R㣤]--ZO$k-EBgmZrFҽ3nKlzlxə8 꺶fΠ]k/#'=Nd_KIםI(J͍-*4YZH[6l2Af̐񠊰 /-qgmuX NKIIbIJ9^)Oޅ,w*Lkj ct\۽.EbS [jyJIϔtz " (EAfZRJȱe@ƑDtfIO5$h]B[x+ot#j.{J}sXi[ڲ,n-xe=>h>wx)Ү^. emO wn{ڈt˿z>ڎy!2}Bhk[eF|3g߃.cHFcEY[-K+B. *9ʭ)@Sz zU-şV9yM!:M(F=:qgGk^#NI"oL{9͐=X{p+˺W̖؜9>"Y[K+YҖeiW<הּ`DespVQ09x>#/|{8.V+RE4v*v)-,SVŒ rA.֟kAt;r|3sl:ߠQv'H zK o5~T) 9a{fpCxKJlYJL;VIUY| Qx=?k5bi,ƖeiQhZqD&r֠'d14k}+,3EO@ԍ :6Sm^gً*"_0"mHClq}fF}NNV:NnY,x@ #* oK0MgÕODeLvD~D{X],Tn9 1A1t|p['vD7C[it[<.AIڔfQ7+6S, ^eٛ8[Vٲ|l3f{UֽkeC4q:kkĒF^c,6MVzٖeiuXcu-~/iF-DeYE~qT4Rc3WsFLNõwsQVn^kF 7-˽tt[50ܺfݫl>|{m-βW4+B^7"-n֏^W/Z!ӵ.E a =8V7H h\.-h LnALZח W+Y y -vʲHk%ǻ-Y[9rk˼ 0D˶C]/(XBޕut\h;,硋dЖ@t -݅ttapu-$\H_u :Sp/wH CloW6e]RR{ХqиA7{G53533iٵRrQAP>}6\3حewvgϲH!xez ;3n\}47:ux_"_ՃbI#pࠝK zH,%+C,KŊz9gmXQ[kŊƹٵv˲za乲r|m1hY4qR 2ǡ(5Ѵ޹=JX3*]{R^kEbi;8+rǩA_S<~!x׃H1Ac 1q W1[$Y'ݜ&I+o uV}+}홳'nLT{ΤpOjJs g2f={>|/o?k'ĒrC>1"=ew=gPߚ*e=5't9s׿3q4b_3omgz:#\7^pR_4q:˾ǯqo+R[C#?΍L-{q/3w/\[) 9Rz_L=/r*L(7q]$)ѩI~M-&;=G?wxAT˄0c}GUmh$ǔN!J߆lR56Ӻ+9s橀LÝNo?O-~ irx(׫zP#}Gյ쫳V_؛j#6vs[:wVU 5MxܘڬjPoj~5:VJ=~8 Zȓ+:*cU7/|җ8t,"L9Lk_Gr27ae oZ1UζZT٧rlhTTD{oUk:mʚhªX}U^:d庘ƂihJ?ݑlh/уQڠbҏ?=C1|cmG,(vVjԇ[^_L?Sp7%$#s;6nWH4B7"JY }@NBB~f}vZ .J[Q5E3,-o!D\B~-r},gy.@!GArw1|#!w8@Y2}~Bϱ}0o?]T~:~Z~^߹\_O?{"}o5 Zhk/#z|:B+#Uz`?B .T}n"/Wÿ_I^H*}E*r_XD|8@!m[ա7b _p%<yz yh{TA@|AY&Ǘ7_KMj^yoV^5~ߪ"_Ly~_oR?WP&Bϻ_-*#}]̈́|W^ߧWE~> P/@8AFBC*}I!!JEpGUȷ|SS}q OBo4"~3g'!g,c_H}^/xw|_/C|!W_K<5_n9߽/uq y'~boٻTȋy>%uJy%!|>*Ao&[kw*A> ?G' <5//!$KJ BA?W7%@jȟA[E韆eF󟎏@8C&ڍPX[ſP(@_ӺMp럎K(kHRˉe~C|+8(_AM$IP?:C84Ek %C ԵPh7|?͂[o#Dg;SKH'!Eɾf x/#=rC^BWzПuB_Cc^}9S -r}e*5x7'¿&qK^kdBWE>ѭdl$1آb>q&Dl!POB[/#D?ۉKW #]'6B/E/%/\IDˈ_-/'*Jw4tHR^lJWa}J}S:LAo{Dvnȿ)d5[[ϋ廚i1D>*]cЇ}ė~U:)2Bω}?iȟ*_9!_K\BďCi~gl "MF^bЇ&~~'2BԿޟ~AG|9!/Ba"CT*\q}e*cЇ?C㻮TCs QtA BW{g>Ґ% ^ }vy 5Xݭk <쿖g{} )@M*kߜ.RBoV~>K|JGUzJxgSz7C2Li%.gbyJIQvާ҃t+uyJ6ÿ)}}m>hA}?, ῚBy GUA?F| Z>a }?)[h7r)2cԈ}eK/U.TA /zJy9!o>9<>~[way|HwySſW䅄(ψ&yKB_o͠~I lBOa7ė VRߋ}!ПE>_BO_+'/!c}'?>KRBwb|wZ>*=%bASģ`;  +qV_B䯹fJ|#Jê+B~ #\~JEGhgK]GGx< oFBz7<Š&BÓ 9ǿ&BTK/&~ZOzDQ~5c}_BzdA4#³Paw~_J-7LrG]U/#D#QpՏ5"_M>_ kwZ.W\xwKW}1G_h_$|įgx[QOWJ^F tFs Q?#׸쫾 2?# 4>͞oUmSe.;F|&; +H8)|r!~ !K2FO"_A k_A%I{J׋|-!G!7įCo0Mͅo>B&bBQKgֿIR=B_Dr&tW_K W $wwBBˈCJxؿo7!|ϒ* Q&~&TrDFķ^J_kЧK4w!H567tb}/%>8wux+?bܿyr$J4[E {HxW}%jdBG=A Vgß"ig bG-+Ks> s(g_ ~`3?N:Bk/AzCB-O>@oxe'"M-t.-0ÿo?CD^FJ0/O_}!񵂋OTOag/_Wį {JFBoo Ok?!Hx?׉' ΢JRb;E_-7>LJkA| w>z"_C4_,Q/zH׷JQ mD4%%t*X<JGYfЇ<#j|B/PiAG_-y.ш&a, 1o2\`/&'2?O~P>+B/"Q}92ݠ/4>5|⊈_MS1aa!(n&C?FL-2__s /"D1>ReG/4s*.R/Uyį&D6_MkQ5WzfB# d|i-!{_߼|z7Pߑ&{x详įQV,f͢ VxxoO&D|߽_)ru%~o"/m9TzJ7%~1et(ߥX _Dˉ_" ~ \DV;=7^R㤿MXђcA*tA>Q>;J A>tLeh߫TΠLj/]CNW~'t}Z^/&}%s#]DN$+ rJkDq:@]cZk JUzJtA*>?1Tzg"ҝ}|*C_q[E^Ns㋈+XIbny!%#[~w[C\E^K-@o7/4/Y-j˽>^+h߻UzA_K|`:lB!+.6Z=|vx3儈{UzBJ\B?xW\!W J|&ۉ7=yJy!*}ȠE|^ޭ{Ե2]Ga/l&3ZBσCTS C?׏qy!֏W\r} 1>=Yy~5b}/_D^?=җ <_'Rޯ%+,w} WM|xé%_G X?@zY/Jy=#~""Az=cAg @OU>;DL5ω/ PW"$_*>*jk~+BJOaD^G}>?=ߡE^/(񑜿 <b~3*a_qѐjKѿIRB*#2BUċ梹"oAao"P'co5zPsN[M 4?@Ƨ k):Q"N(Uc~Ġ/INPc>SU*6~!?t(_Ы!N'X 3_l(?5_}7PR1o~/Z>PWtgWI|&X5FUYu"Uceɠ,q Bo%DB[ooij6$B)7ImvUo=?]K4B:>G75zAo$~ mRBos>Mx Ⱦ>g}IbdJ{E'@z/&q]^N|!3q}+TJh!oJ~Wb|oU)!*BtĠK?O6|!D5_%i?;F"Hs>*)RBė}z/'D?ׯIWb~?}I+i=5"!DNtA!0dۉksD^G=KE^Os}= Os[K{|"Tz7|W}7 HfBߋ oi!DJB^nOoJ0OֿJ+."^5wƒo[{Z~O-bs;6l{yϞMtp4qTl|pqp]HEeAeٷ9n*سwu;wة>vF=bm2:,*2Ϋ2w<2|@ύ @(P֝7o㷝 IC3Hŵ[6 u opZs`رo{o4ØreQHEM K* P4T;t l899è´7bmJQbw<3 7Ūppȶ+ubfeMirӊ4n\rqTfy\ a)oysW4:[s ;fger.|u[7!sw9i *%q%H9ebNmLWQgk(! #8?ӍFτɹ7.i{>\b3ԅP̓CZfrˆ k[yà kGzfX[ΰ=2׹n]4f~ h)cCf> \)7nk,yLy4ѹ(aCZyu/"=6v=22221e6q9l w%:Z:waZY#G;{8T!s:``AxO_{#-?ޓmJt&z$b;vo&=ufQPѻH@hGWWW-WhW#T:⽽[}])ݝ8'UyNy3;?Kz}tsvVtUbREhDVTG{Eei5'=u?c`'Ą]uLtXQG:/ᑞ6;[uy N{%D`ڞ۫fQNnv-Cbi?u3bɣ;i_~ J!k xg[-WuÝ}5*N~ޛ JZeZ8PD LFj^p=a깽AlT;5PVޥDwGէݻ{onqVF@+\> np/N6rS̎ ,f>pTrNug9R[[0 '0da5P־ n 8/I*sUmq"|gxo,6P,g'm &eoj#j]Oխi0H'ժ7ޙeeNzmMtܕpp3hK`^;XtA^:JP=<d:S;P/M^%\"wXOz߇1y"?'A/cS@ߠ=:ԕh2J۫gρ !nz.]dzvڣӗ3tewok̼D[{kd8mlO^g⤾ z%u|;/Ƌ|bw kg0ƍ*Ivwuf>moݭ{]3r6/rӯs[ѐUMp⁢r)PxڏU܁\#7`]DFu=ӻGw-EN@n99~<@&`w$+ ؚw o1'=-ǻ3g6]$رIcUn_`9yHqiJn UH#]5{ T3&ՙKM _}a՗EZaγKJuvKĺԕ|O;z,~$M]oR:ؕrreb!;q:oSNMt*#J줚yf~+?2{oťi/4 <|ޓ])tl W$Q^'ޮl{#?-qZ3_G jo r1(y y^/,);Fi=ޑhƵ} Z0NQc}f>_R:^vƵk;=ù9a}~5~Y|[/rƊL&^;V5_z R-xP ={)d5r_NlN:M:cٯSmHx9dm9_;=5>p]um.eFXgy1CrdMbɱ$ӌkCMÐ4`5lHkȝtLpL (vpTHU6u A KlCe8!+l-E_r{) !/>cLE-in E@x {wWpt_r#n8;J*tl;B[x+otCgTwIy\bJ'۲,r\)dmu zY,KuV|%vrYE;%1vn0L /=cQO%KOκPy:U,i{jV )ypDex r:N"o\<\jZ 1囮l:$o2㽏J{Aq {X.M1&1{zVR'Ȋ4AџlУ@E_ ٣/olkɸQg\"-k/9ֱ;{* W&n`dK1êDOn3A7crgr@5#XrhzQ8дCp8Cye}ۙቝۇNV1bХ8LL[L;@dz˴"NdCJj(Y[]$[HlYVŊFDjfDeHYE@-WQ|O頝[#PЂb\8Vf#bi {qmDVqikĪe#c5>M/u/k}?ں&M^?XCan6E+mY[s, vzOh*ܚn=JX_~ppzUJˎy +ڧy[^_gW>b{4 K_3vꃩGNS RWIaQԏPXWOL·/Bģ޼gC"<ȭk]ˋ|jhW[P=֣[{HŜZ ̥PoB_N"T]U_Q)x &ϴG"rSr$ҨʡWn_ SuGkU]_+:\o\&:AXjbMҌ´NRvOպ:ZjTUr7El/lpF]sґku;Xd h'^9N8VAmI,Sձձ5Ic[QOb׺u 3.]ME5`Zl,u~%^|L>RR>jxQW1u1k#'+~FeyVy~ULUeuLނpI/TgwwpJUzy۞ \cǚXLMv<[mnjQs_P4i5u>C>=Q$b1-2ͨñZjSUUSv=D_^*xB:dke]=;ch6ꄐv.*'>fᵩ:+:;NOfZ6'EcVU6z;.*l\cH{YO&ڏ1}QT}n*-\Wp%*Dj"xgRVR]=ڲW!zڻ=]/ٵ~+?ѥƴD='[XD_;Udɾ<|yrK]6nQ⾇*Uf,ZA? J\%&vɎEL?ɾJzסsΜ)u);uDkg詓6pOwّT[b'bAsk_wWUqNJCl#6#}G+[^NY"l==j:bcԨ3H[`5'ǫޫ{*G*OvgN?*3{WTV*gp&YñZvAs$ީgUKݪ^Yj8]/h=ӍgyB_CPo53|cB7e:sd:isz3:C<\JxnKVaxXݸkRJF zRSU+R=I;/[P]EًgɋX\cWlVOѫbMY<\-Y;EP,K-JLY%yWy:UC.Xǂ-}8ܛisxɡ/#떼];\\&P}?zhm$ic1Ve&GN6h1o7m]vѯk\Oa?WQ+/ \G 6z#ڏj[Ǩ+vфoc'x'¿IoQ=M#>M'~\Ul1#3r<ň'%8Բ_ȿ,@ +ZnU?U?^'~.-{#߫/,#jCjxϕc >@5'iE-&~6![B|` ԲoI@,@->_Óلoe쟾,ZBퟞÿf+~On rj!>B(J /DB6'jr ? ~*!w_H .XL{IyO?Krǿ}*]d>~!9Ew)Մ2kZnW".Ї_BU:ccFxq~#K _J'E^FNr>;I| ϧTF䵄蟧aTAa}ؿFf'򵄰}Bo'aD[E~ !-oKRBؿ9ob^s>C붿Kx{oD'(r!=ϾxN?^/-{ *IyxJ?1ÿ7?rf"i#>쿅<~!Ə/ Wm"$=>{Uv)y>kЇw?_PdxJbBw{_*_|5!? Yp3J Ї*LGD?dS*=*?>Z?H_W NL'~!ǗDe"G|/" ~r8MeHm+~$:~x^b~C_sX?{[߫?{k?uWBP"wz{ҲɄWޠ|R/"Fs>Ő4NNC?/"/ 1B?ڌ× ε6 BmX_E A*BoHn}%/Ağ;j. 2m]Gl!~t|6DS j-ZiЇ%ZkZ[?gY>/7_DJC_%;Ex!퟊: F6[{I}俙1h_Վ! %D~! gP"I}Ǡ_B]"E "~/F{/%z Ná%W .| !WB 9K ῞C|!E>4俌CT1>a_K(^#v<0dG*a؛O; I_qO1)ߥ&#3Mxq~J'E~A eЇ<5"D<;  i&,0Ng&>_GtAلX@| Q爼Pm?[s%t>x!/)a|"KQ?/&>&KTUe}wEY)ۈ¿ۉ/C;E^KzJ7ÿ;-]Wj/"*^cЇWXeЧ9 ~|?9VBO7I&B/9wJ|&!?@?˿KיkoDx<~P|!C*=lG&d!> ="ɖ@!Pg*}H??">f۩G-F?JRm/ UG BJ_3|k>_R+"Br>Ő?_M%!yV黖7D~GaO <+. cn@|3*r*?>931sc_-ي9VTzʠ'~ "D6OܗAj:TO"&JK|L*L<_B+Tȫ?a9_0qKJ8"|9>gA_׺_ 8ǐ| ͍&~ ?ka, ~ ?S?T=Fukt/ؿ(_xg֫_"|񌔬_åď&k_ݶ:v|  iݹė|i4\E|!_%XG7j^^CB%_j3:_J_.L- ~![HZx[e| /^_s">t*+D>; ciVk*+/]MBAğfg"?[D^Iÿ !6_GZo'[T&eh߭ohLsN|,'Dwyn5oDo]'D/&~%*=_ ?r.#OL2?@|9! ~ _I<'8JJ_K,V0k n n_;o$D^%9<>WKc*=נ+SJ=Vy|:@{/YJE^INÿϳ1=xN:y|^E{C>~<i"G/&~K'">o!~ O_LHQ_Jk/ɡ6ŝ/^#wR. b}V^>.G VF׊B*ɠ%~ ? N{D>}ؿǐTd(?J.^#_ܧ"/*=hЇ#UTz'~߮ ' Nm Їw?(XxX~H%kJyF1mG'~>DOB'TA?IxIdS*=*ɄijЇG"8Fϊ|:!?җ Y1J_y}!_&/g6꿔_3ݟҜ/~R5r|~O<_*=aЇ?Zw~ҏ-h.^;H?aď'*LS??U7}SKO'D"@iȟќS"Bm__;P?tCsa ieQ?g b}O*۠&~D>POUao_ 8]x`׈!w~+7ָ\Q:"u~ *#:؝J(QmfЇ #2Y&~`7F^OBdA#~!WydJЇ ?WAS KO/E?+׈Y"M Cvy"" "%8'R'¾QgЇOJ¾|>!~ =_1Xi>SOE>WSsN aP?Ť_G?c,{\H"BԯZFVa ~D'"DrC>\dzvď{&8ʿJ5"IViA!D֏֏y_ LjH3[(>r 6?V Jvt0Bw:+|e+C"(?D?/YVC"G tZW?PG"qQC,!6g"~g}Dv'GU:aG{Kd*:D@T1~ UBB3@ -"^C?5bBIC|iuD#?{=ci0rJ|2!F"MTBsc\ ?nR>"_ HB!*eGȾ}'¾͠/!~!W￾T QK "TA_zmx;zN¿WP>54O9wQ!D!Z^/JOu*_O|~:17ȿKD_I/WțU[sc1z4byѿޭ{-@A11ˍg~_&HD?Lp;JBX>]qI>-C_ ЇOQ F9H|>!qG bۗT'"L$Bo_!~2!?T uQ 7>xť?>wƒu~-@'ftڝx9m6=ؼgO˦xojT7>0>};mٹfƑ (Qٳo-rp!UgvسױS}./bM1dl9 vLvl|Tơrw޼mv'Rx$U3Hŵ[6 uo`#֜c0ihGe"r lpNy:303w۞f W:ߜlolټls0>MNp,A>[s ;fqIqvPry:P1chM؍3i6\֕cp3'kƋ[OYۍ੉J?8`~ռnk& ɹ;ܴ;O`Mai?~/~@gUs4g0yi(W!g{m^;w+ :,AUXFKgMa+XJIpKv 󯏝 t48RAS-+kȂzG{/9CWCMrPIŜ)wvtj*Cc5POnn|Z۫o[^ͨعWc|)Kv_kc!+p3I~*ޫ6h\q=ilѥ/fG_wGz|RNyCHGk0m&=Ga] ,Ij1/At HrH00C\` v'{b _ o=JVU q{ o?_ KFDwGէݻ{o.NqCJviRo +_Km=9&gcrT T2_.}^CQOze9ɱwfGℯj G%=,Gjkk5tT{sj\i{ 8,'q`ކ`l{o pΩ<ᬱmRʽM ]ǽㄔluĶd}mlyi6X5:I_'H89?(#% p"ȣK-3B܌+Ǫ-koѾ_ _O)undpcgRD';,inUL-mnmMtIo]7ؾ <} vdo{w>(gЎzrbqz#ՍA s)=jeng3e/eg\k˽;?I^Hw?D{#.!\Bz3Vg2ڱr ([V7s,k{3SnNX{'T[4|9^Y@j׎aOߣqV 8і Zx omtwȱqv)5Ĭ{$oEr\$OT+ xT;eiJny~0kӬԯNeYZ-Raz-SVg[_EmYVXߛ̱[jJ;eiumyvˆuWVi&d xw _vBϸzq'>Y1S&];W6uÉ3v<1EfCY.MSwlY&OzyP<q 0gZ]Зq1_ђ[EWG䮞MOeOy5 n8q5 x3r|<:\Z+cc0E-F_}fϓhV{۲v]7w}+[\X,SVZ_JeJ.VOUfRYj,zevҪuYa,zǟ#(:j+-XTXʚZ8g{` {]FsW'Z2ܕEdWrϝw& MIw̝gp1ykү"&B|@v nFᷲmCUbS#, >= k_oot_wP^'Ǽ*6zJ}c7֖ Sxm,ezskVVxiuEq pF 3BL6݉nK@{_fE~C5_lWOoO<Q|FȵE4.ΖluO0Vۛg)an)JeMRuVMF3_@ FSA9>rtQS7L+eXx(׫xTݑZ=:q:}7F.lF緁51veBbMҴWc }S'NTsV,]YnUPXWpRsґw-[ bǺkfMfPʌDyEcJzhRuZРcOt%Vŷ˫F˟ٜOo'PgyB/Ws*R᱿9-U*U>t2,՚kO?92[{<~S4NTy(\ՊQ[:Sz+NWA)t}3Lu1SOVI7A2xH0 ?) (}ɡhc*}'W{{ԕJC$CTC07gd/ݘ$(lr q^7 )(7wbW_p@;c]'iOקyO@g㴬=M̈xd%o=-8ˣ䟦{bxcvY! (X $NC>F%Kj6m]g9zX!,+.a?x*GT+4 ܍ըF  _L?S0&|D'lB?I<|®KF_$8Nr_¿b_,¿E?]e"/&DM*>/#~ >$G押P>ܨ\CWQQǍPΧB_1˽܍gkսW/ ~n5ÿ/&_休 sA-%~j_m n&D.ЇFC7Q}W +kSko D#~!!Oxk6>Hb&M*|!os>_E6*jBv_bȟo?o5!_no?(㇖!D_)<#76cWA7!7KX䥄#ėj}=v%?Lj ~UIB빣:˽[ ?hȟ>ԜP9aCC}>,{ϢPߺ|W"/˾G D0FI>-لhOA?M|!F ՄϪy}>7_CTZB/ ?V*}]eZ>D>rϓ˷G;W ֒#y!^>W¿?_7ڿsjt?J4ÿ  I-%DJR3$N?|!Vj>xqw:6=<&S OK,ߖł{?gD>P R׺-a?"~jBO֓Jk(>MsNj %C'd п @'~#4FB?B_i?ف*CfB?Bj-nЇįD7to3!꧈-Lf|;!ڿ$@2vK rf 6<=xWYhu"lGzCA6h u1x+.~3r᧊|r$D|1!w31뿐B/k+v|kzBI5L;IOCq"Hp&Ň*K#6/!؟&iOvKU_c+ _W'~!$Z#D|\M|!W~/ ٧I>꿟 2?I-'DO~tO]O4B bQ爼ln1ÿ?C?zm\ny=!}ؿ*H / Ї-T-V,>?s;HO?}^A|!ϝė~^I\BUz+; _)}kQ>?>쿎ZBO :BJa H|__Y{ %gX'A޿磼~ke?Tm/o?OeUdfhx>39?Dwţ,ӺH nhRG8}:Zs͢A}z LSAvu7KDӹ!K>:PQ %0eʈ~;wz#)v]*kUg[|xg?:kc|gF>7r_=Rb 3?Gg[s(p~@yI~\>`o~6σv|'|?ϹeH3p;32Ep8pWo)J>a8yP]-:u_FvІQ3}A'#.33ܗY&*d{/x|ÀNվ3.m>E렞vZiKbQ.֦[ӭ_mpd68oGOv [ϯHWҪY)48޳3ZlVmL^c'OMGg]_M R>-45=rsZӦW:Ŝ#~o\*77R^b)o増Lg߃u녖iD~8A#FH|ˮ&c3-1C ^.5M7}y NL_7z^oˈEփƗ}Ћh8ʇ2դ));F>_yA)o9z"^zsxplwG"oonO~)sDωDۮ-)H3xUI/ͫxqjqex;ktw/Q>wJHt$ӗ%k!CYA6QEi?<@0kM~NXLc͹jfnmH7ՠ *III v*mE-6qnl2i+J$]8^Axo35Tٕʓwߎ4 P6=]T_!JE#gtAR// ,2bfx^o36g/Y~<{3D v[Y2 }%> ?=q F}7Zq8R[C&ÿI§8O#ӈ/dqG ?ň//"}_&|eA%>G }7x_Lj_J ԩƠ_.ڧr @Ip_B~%}&_I(/HpΤMx͡}YxMo@|!#+ E2 -öY7m ЇmįLwZr-dW>_HVA/K|/!_>_d_J_&MBAT =}ł"D~Q~BoЇ? x?nPch}21{}:aJC?y+?)w{<^K4Bϳ/ϸNV3'P8@7?!%<&k5C{>u/܏0¿<į$/!~x~1Kg_J;ɏ#('>ұxJ܏*P;TzA2BĝV>{eB^E|V5 K7k&Dܭԏ/`:C5ĿWfd,l5b j> B~+cWRAQۭJB;?ևwg]?=VkBA\?=(bA~~">A)_2~>$*B>Hx|/儘?&~ >&*BQ~`Ї#~q}- 5V 4J_4'nOZb|T>FAe`C9CVVDž+cK, ^J5į D|}&>߶,hBww>H|ky3!CtA_|?%~!3+yWg>>_H;y//XCo,@J6o\F[8iw w{WJ'˥.Ox?I k(ǟ~ܢ@~q n杻_I:C*5nlfBP(@_O~s$|-/i͏1/R AoHkP;sƠ_)H&|>!쫿C3 ?jAh%?/!DM Ї/F9|}لk>M_J[eW_F( ?.CZ[!))g=?c>mxH}6YaS$_XB\BW rf%?vү&D!To7oU^+~ !HBJ~J~|9!O\*r8DD|?xğo.y<ۥI3x nW\r?PQ$֫A۫ҏ~xB1%~O~\}wAħ, Z^I{ZoagX 8E|9!: F(OiЇ7_-g[0$u_ Ї ?Sd_7@po_,E—%^J|=!{ >˭|<b|~ć/%D_)ӧ o |w_!CkjBTzР_O| J~ !)'Do>&|J8B/O> &Bw>{@l$?{G!z<e(ct!9|_.H1W"> cCUkQGa t?MBBQ ">gE=>+|_F}ZB8_ߗTG_&Ex<&Q.7<>K?8u x+ι?1GkBj_+_o}CW\O&Ds٫"5O"~Lt*_,+|gRB27Q?$~.!E<< 5 sHp G_J(W~.M# o!( n'1 K.B~_KsqkHm5HY䅄_O# q߇.tAďW})k׹| 0[v=h] !| C3-@QsNZ:S~XjAz)"_DTmЇ/&D \.%}/'~ o龣2\%5}د2o T̈́_cO֯^Y!!G5"n}S5}_H<-i}Vm^ZU]Wa E6,@j)YƟ^".M}Ho'~:;/&DTB{ Ї{o/1BRBwJ].FJ~ _N<_ė[]ҕ"" tȠ$~B7}[DiVʯq6|%~`׮1#DRA#~ ?}_KQN9>{t.ק W*2W MAg4WO^ʯ'|e 1okg7@V~J/2>1P·u-x+.Ʉy H䋨~u|I|1!~ IRR>ëkcw_KzAy-K : 6=į#Լ*G ovzJo27~ !o![TRט1e _ܧҷE^Hiy@E>]oަ;D>߮ (;DN-ZBϻa݆*=~Jy#!*}ʠ"~ SχUzXk įj7So#D<@1oN6'?*3~>E>K0fϩM>R˝Ѿ_Pq} 8_R+"[Jr>Ő?kW~I?[Ɵ/{*Pe?} ?x䯸D#I4b'*L~&r5"+gb5y7*rw7 g¿'/9_hEDo ėnIXKx̋?|2!)ţu|5b~UDF(!HGF<(RBHe'~>/R@|BM"B!~*GBYE. ~YEƫ4'FBD7(:^y "8Q䅄B(#e".H룈EE>ULDfQb+i}Q,~f~!4甯PGa2(cH1`ЇįQD*%D|W~i}6PQ5_k(o4vB_`O_( i}Q}:Lc>q9ޠˈǽgZET[EV:lЇ (*/%D4*Cќ̯b7F5V@D]E| FԜʠ[!H "'oo'Fp-g9*uh]7i٭^"D Vx\B,Bϗ?[_T\䕄o>\u:+eل/N| "rHV[E#A7xğJ{7X}\.OT}"~ ϯ*|.!jmЇ+i8ҫRajB)Nx+.rk uznz^]'hg#zC|s%~6 ru=_E^D}Jafy{J/y !EbC<>).ѿu2AyJ|>O^}Ղ dv~+.z/ /$D|ߩ+ <+.rjzm*¾?]P?g/#}b Ixtݷ}Jo7[![U_gv)ӞD <~Ʉ_~?(|[E>L| !ׇ bs+%}>B|aH?JA| J?BBiq"WB3*=nGPo![}R7Eh?Cχ]y9! se|VUs ~!+ F#*刼PT/&}М_ 4P?Jm>D?P'zEXǫR䥄> ė}&_ND\BԟZD E^A(ߨ*ktASH| G"r|Z&РE5Dg4:ˠ3\NK ?9ǿFBW2:GM_ >CCs8ՍMO>qߎu{[v8{ 2JT[7\Hٻຝ;uTK;R 6=[@ga2 *yYV3%=)ُYy3rW%;4u7S7߻;h`;YvC0gfu\,Y\=MNpZa}6;wψRkvFzA9ռnk&Lܹ;ܴaoILg)mitiHA_< ~#xlbGCCfϟa433Q`Ve ˭َaC]yI? ;0 <vfUigSGUØݠcmXgTY}E"qnۏ{/鑞6oiw&{PS^i$ґLOr{֣^RZ`B":N&z:ڏc(4ut j;Apa⅛<*WHWpAG9V˭-({<қ:H-r<~*Ф g}mòv r#}Gk݊p @7`WMCpCo&{fG8 >M'XUb"1n YNs;Na 䈡R2>T(iX{%wr#:;膶f;$/!|gv$NxeQpr~WO!Hmmœ.nsC`l{o|U[YA~{QuVBMo[8v858l)hhg:.J56-w!_ z)Z>FҴ ҚQ-8ݓhko|Oly:CI߅qF g7fy#rGEy 4:#TF r).p _T!ng$;ѽ u2 H߿z]2mNF`fb-Us{ZF`^IƢlqpDmn .LL 4޻7sC6LxՀuKooWO6{,t2 53\p i=Qr \fMӈe=e(ZoODkW7.DdЂ\uJOk}f>_R:^vƵk;Օ}9a}Τd1~N~3η"gdcU3SkF.(+HlYVZ_ݞ"8N={)dWՊӤ3&#“qyg>{BO _|)orOsxu<{T:Zqe-Pp-$THi-h)ܷE-+I$=y\:{}}sjD=lzk)jlWh*IS&;X~teA3=AYFXFO:+uW9qȧHSYAwLBSZ˖ŕ;o5i[Lw3Awnj[:۲h1LŖNb otTt[+=E-;A%+eȍrA邕l<ВV:Fx"EWfUV٧XemI`,۲,.R? 4dY3~Xo+L Jẙ. s Qd`jQt]4{w,}n9q{RϸT"^W{缅yk9o=h.ӎ!ޏδ܏@r9t^|sk,.\99l#2!hlRl\'6C. 0kotkc1I{oD|fڻN vzuEޚn}-~`pzUJˎ72VoC/ڷ(X$By~`?ƿ@[=Ϟ6{|4}^2~%6$mcjץIt$a<8uuAob%SoTxo/HE`{{籮ڃp\׃ΨXFm-XiMaqߙ3g Ȕ8 ؍xLN%p-IӃ>7Eyݾ^uꎴ?TIُz黢6racX6&G[XS48KqwqO2ZYXUP.1(ޮ4Ci8Vm"T8CWmTT*/YP۞tmŽ[D(N?6SHEcoCk_զ!Vc{\yJ3Sp:ƿS( SxnlllE?mbFSN9YazmSɢu~RxSںimRWԒґ"긾~F4!HI1dI8fދ$8q:=^7{;v`{Ν̵^Kos)?6_k2#Tf.I<~Ĵ. fa]$Xw1MGڵb:n;j ez3gV٬/g@N~ }C2+m~+7'ʊ54'V~KVޜUM j ýKke'kW+R':uv]ߙmYW+>%o۵r՞ٗ& Dž4תvtQ 78Ic<ܿ3)W~[`'vڢ/x>?Qq1GSB(|?>[X~@"~F2y̺H,-  /V}7N /]DLB7Yd[HM!9ÿ_NF*KFė)֑} z{aӇ-$WO/Q>B~JWDh,Zx7 _Y<ɿ¿ ~j$Dx5~kuЇTU"~e;Ia>_H-%>XNgqU>G-7Xr++'+o rj/&>[M&_y\V }_KJōd_noR9#}d)rfBMj]~v_GV/SBBϥ&ˈWNTrB}ؿ>|!}o)R66Gi k Q?G#D;=QZ/@5&]gчLjW\A0S+ QI*dZzU$:.BؿIC_EQy*ߓ#DB?ŤwT E_ޥBs ;:NI|%xN'69ү#%^{> _ MSkѾЇwVqRo'DĤwXaPϗ_F(y :_NzxW(U^mkU~!5#ג,Hj7y">o6-Ic/O!NV^#:ϟP??3N0~}&D E"0sQBnljOO_XK$~!%~"4 Ko"_#~!'~h_"~;;G:A?2k*GU5}G3ao&C akXHQ% 6e'si"EÿOиտXroy*'k WYC ~%Ʊ}Ot}E\_cT^BP>#~b%oѯ$ _/Ud_5!PZM.!~"H|&|9!ό1<ևEįPl&}[EQ~7F|!?/Bϧ.i O&+/H듘3Vӕ("2kb9zG\BW_F0 >[M:dG|? ~; m}%@ď(N1g~:CI|!꧓%~]W|(qBDOPx{#EDzޑ~Ry$o D;t'e^\Kn2I*MJE?"'^_SU^1v>_{ E#>B+kq@m&ݮ򭄨ߧE#ە1Qq,Մ&}Т!~"ڇ&@zoį!.vʷC7;Lz/'D|G/"JVR^?_f+-r!U||R~O]u&AWB +wb}+{ͤw|!veч jdä.!ƷwS(!A"o'h|("QBn'y|}{q<U^ܩN0}|WLE?D</_5*"D~-Bnɟ|WM=,' {"~?Y}ߤńXBG%~RBїE)e>~f/T^Iܤ?YaW<;1{W|27*!*wkG!VEo!!w-_Og /V/BOKf;B 󧽏>Dg^AO~G<sN'! pm㷞/x>ltx8'{/5$t ˑ<=|l=@5s} ~3Ko ޼zS:㐳uu-Zmr향; ϊ!tI{z1ۿa-" KoN08)knO@aq2;l_N77 wTfi對UfA;I}c TzYlۤSJ\?ܨ͝#fK0QT/4qQ'\s\nO +kE|H]NeiXqUڅH- ;[Eh'ѾXQnL o57g^ntv6?Vv x{wE G$߹~.H;{OS?6}rNt(@C'o{S`ҹYɬ"8x[=G>EMeES:BtX(K H6/jаS::vGc+h'6{#IGp1oyq>w\#vjS6h :W Mi ߓWಀwc86ֳ yl> EqdlR0oΈ"*v*Y"'8c'Ϻ^)N~1I:J2=o['CGWCj!h=+yo{3:^a_ԗ5pHUE</y[ O;M3XJr?nHIN5yiE HR /h[ҳ.X$G1~9W;#_qU%Y;IGޫtNo9ޤr`*du:Tz?7t:B؀ N "j,Zm;k8@\j 3yW@F@~7uu 8.IIY:׵{u$Z{::Gڴwz_u`;z;*GX,3_OЅ_`Wщ~u˚g읈Nm.oKOuqޓ𭝭m]Z㭽G*5juHw.&~m./wvow{W4&Cn?c#q(~FSSv4v7>v$8*F}޾CR2ͣыOUdxl^1u*-5U)[޹WCn˼7+==&P_oS{ˊX&P7$<>5\=ir7FX8uqt泉.F=;;84&{xmch߭K#K>ܞ5E~4FK/sK_)dsxfSnP@|o֦:n0ͳ´~(jK$NhP%:eTMeee ī HY_ϩFiyq?~/R4AUZֱז[OurYf횩)hNۆ/XݴL9n ۭhMS6^H66cOOYgOe'˫L5J=ֶc+F}:.O7~tD7UINwlABɵ³38|"~!+$~brk݌ߕ~ė(b{6񥄺rBoTtGTHiUElMW[2/QFCe *"Desf>'XQ玌R* %W(b#Hɿb-B_CbN>e:o!D-Gu>Eh oSDm$RB_&M5U(r'i97n '{(kmء鄨u)8AegB㽅և/TM[,/e*Cm K{]_J=m |*+e E__Wh9D@}俗YNp ~xR3 >8ƅa}o%@q (_[>俞#\ //'6I?06l.GևkDyݧ"BW?ˢ}+q¤*uW(q=#XRq?EbElT*//[ݤc#M>'S|:1Bq'?n%m_x Ɨ9aqaN7OwR.N8yx6ʧ^@|"/tD>w8aia}w'<&/Qy !}%?{bxs Q,<쿊K 1ϳoV}ƛ06$DxIwYa(zB]nKkᅓ5A NQ8ak)H;!K[~~万򵄨GO_q;s a '(]:s+U}?)!wD~$]}=}d&['1~+Bu1|j k #n?ÄXwrMApؘ+_Ns7öW*n$f\&B؟ߢx7 aJ>O%JŃd<}#>E͜nB/ЇY(@w_7jp˰~}Hj7KW1ZBHU*_HQ=>"^q%_̈́(_M>Zq7ac|7!G"('fN-UBoЇT fTqB_+R|27e\-&B[d߬cU~!dž}hi_a(N9AZ.%>2g+/cK3~"B+/&}JK^BпrJ˜]W+.P^Nf0Fua¿#/W\׬bר| !W{>oy9,CعDM'U(!H븇sG>쟰u?;i5fӝfȒXGvq2&[M*jf=̕~d/;B|=!Ɨ?y֌rXY  %ńb_涧Tr卄x|)!{Iϴpr+o"ytJI>HOdz3W9#yH.bzAh">w8ag)>{\ {Ha#IKf{_D?Cc+!֏U^y5̿/${؜+'Dq[Kч_"~"ח9W{0BB|"_IP&BG7,D̈́iQ~!~!!/"Dqs 6R_~츇ɹ儈O"aQK\? D~ ߌP~CBB_Dzq"~3}{+?`-/c >25\8 Ƒ~%?c| /I3L{0c{>]3T>S3/[, 2fYFI>_b}؏_$4)c6hE7(.#M&BWb6>CrB?C_ B~(#~"6:_-ߴe}?Ⱦ*o$}3ZaMhf̨UfB}د俙xe,QB/yg愌  /ėXꇞO vBMˉߩOni&2BU_&]EDÿV Hs~;I$.Bx\DL|!$ ?STnчO!AiO567">Fm:o9! x(~!{.Lz"~7%}1>J{IwXxAK;-p~ *?['XE{%5߫_@ڤת{IoPeΤ7|!}%~|3o%!勜xR+w_H2=*_Hۤ/X{'D{IwYx.C*_Do   ń-oTl7+_3*_C>>AZ߽o%"~"H|?mg,< &D 9o0o8_ %2=<p %*/q'KZxW|*!x/< ?1GDQOA|sq/'gb|E/~M|1!Bs/SG ~>!H|b- ߈o ߉_I|!E 7BoRB4 q2 fR'xb?&|:,c^;4c\$PDF|.!-;yN:>d1 *#dЇqE$)&MSy"wS2}؟F|"ݟ4uzm"DM[Ȝeч/'̙*_ÄЇ|K.)p8?GNTLBm̍ЇR Kc#[aOddVXxW~%?W¾Z _C_`)_ k5_jr8=|{de&sGlQ9' )b*cJV9^@9B">h|DK27;yl$Po#e^+q}$1sUv/$D_Z:sʗ"#ar| ʤ*/P#P yX儈Q7VT9ۈ%}5>WaR 9>lj/TI|.p7|>!M|"Wϵ&:>:@Ϟ}K| !u&Ty-!}>$>H_@(eIR SLM\O%P lFgk|&ݡE /TBsG|">w_E&Dо__B| !Mzk WD+%}(_Lz 9o$ (%.k ?o5*>;񵊸$ޥmwFOeU'~>dGTPtE?B|:Q:ҿ[O} x@sI|3!?U~OO5*_HЇ_ &=fB/ >?@*ŵ/~lC}[W,ܾ"b||p~"$~"ޏIUN>uZuNrI?r}}U>5g*_MS~gчFǤ~n/U&ڢ$~N+N57{&DOE ~:?L9?#a_+.פTHևLj_HwX}z~#B-_VEF9KRB?;B({C`IU^G"a<g]dd$5ɤ|>O&Y%|-oT.4)n&}zN8߿-?[ʷ)~[ oS;?f̊|7!/Gqi 'C< 9?J'X!*_@3kάJ>'د!BBJ- $>׬*OG Cko{'[A>x/ IkYT^H'Y+/T듬fsGڠrBS3+֪|)!K7h|(/|g YWXanN&}cч">,E+&?TBѿps?7|P?*TKͳ?Px?KDц?jҟT>N\J՗Qc(7B%N_4_M(ߢzL/o D#~7:ԽUY'Mzʧ"#Lzg(,f%LբLbɟ 痯oćF|bt%e ^lчg%}IQB_oaчQq;\"aw̿k %5)/+Lz 7<_I|"ݿz#e] _#w~~IWy=!ƧE#HqߛLz9o!>⿜P/#}ܟq\{IWyw񅊼zylW ~Fao"D|??L|.郿[BcҧT^C|>I|"^sG˺O儈ϧϘ9#D|>?G|.郿OR|ɤ@e 9>K<7\ַT^N:[fu~w["a \&HŊXJ@E<ߒ⑿ʫ _ S/"DG?%B#xS ž}~_qls͐ ~;O|1ėj. ~.lSK E.1Ѣʼn/S5۔5~W| -_L|a̳-1Uy5!gƂl:#Rk >ʈ_@(Λm|| IP3\??*_KXZ /G_D[_¹k6 _f?I> t`gAr^D3+rO3=E"?޶eK?sv]eն׸-kwo޵kú*Jaޗݳu ۶_ݼek*زkmݵ۷Sq.FR5߶sK]K7—ͫ75kA[w_ײ; lDܖ}+i-I UƆ>!zɵVW}6S-; C(PЅ{>fkX9o\4=<5h-{9\Ȟ'~e¹ 08;k0X:'Ozv.9jm,MUI_{\"dO3؅0EeԮ-74oN'nju6PϵGChy^dl弙MELjtvyh7bϻ~ra2yƨ162 y^ Ff9|zY: C_]FcZpP2}=:{XGA7 ;_-޾ Q=Oy !5Fg0 0/B FmM/\>muaue|=zP7-a{Oq8CV!ߕ"[Gw+~F:&q8/;o??u"ړwuƻzO{Ntvwvuujƻj+O\PS[~QCƻ{v$;;}GܗzN;zvĻ=E+:=&Cn?c#q(~t >u(ѱp 2U'E%V";Z&:6ƢMđDooVUՙh?r`WOoզjWOLU2~T81EH춣caчOt%>vr|M/}(2V}PRGبyW8h FrKۏwwB݇J~:au"#B{Z:Q2nh*pr܋af_؅&x>D2CM&*޾('+fٛ@17?EsJ*y/Yl&u{vK{<4"?i#6"!"k`o` HQY}aE;;rhz<ї =ZuX訨ʱ( V]ט;}WqL{oHD~gt)@O{[2Ka]ah)~(ȵNdX?v*,4c^3 k/,3D`v3Ef bs872 4ևoLaA,hˆLJ5Od̙&,!R(pl?lޢgעC:f?\=)m=ו,5Ɵ#.%cX7o|\qsu}#KY$6H#UXV׏FZLF`f}u}ѓƥeְxH3ГhmKIdGѹ0 }XrWMq_I{8ײ{ g>e{͎u)=\c =]S,gVUU66[?LhxRHcN7BZ'0?+HG>KTwFXΩ,ׄ];hp\v_E8As4MHgTKE^:h7)x^igwU:^k2+,g^Y4Anx5gQvY85)oN5a1WXBMH,w"w"<X8e(z)F`U_2** Z=.'w'Gݙ>>i:JOY\jLU=h NKwڜ UfWvyEIIYq ԁ{_pvmOYL\/K|LNʥ.,Þ|L7aQǔj+ b6 /2T|KtU*MRI~RlU}]ҹ~*_wI\ ןEruqZ"I 5f6EV_Ծ.yC䅣nFR es(zjUh+4n꤭"2LwÜj Ǽ ޞnGȢ9+=Ám73!'3D&[3eюO|9a9ev>x:|&PUwΐRKy~^C:V- ޠoп8$GpnT>~V'%<O𷧜D'8CLlNv MOgYEߖtqXIӑwFȳ7dV֪^⏑H#96>W&] dl6/))Ӗ/Kbk؀5aŏ(D_EtD?o~a+e:tLRY1&@0% _\b'_ڞ<2ӿjDw6`DŽGKC1F9g +C9B{?0]z(F&ޒKzIL_rUbwGdϞ݌s2?!>r`3U?OU&qfD>7ŧ0, [^lc2C^%\KO|>lVKԂt<].Yu8,>Y6/T¥cF(߹Ca9R?W|D@}vclxMH֤%)J܌r&"lH tYx$;M`?s$u>2qF$j4! L `ڏ%oiؔ%BW\ߤ^x:"R~9K"=*/!CĠ'tZRڪ~D+dߍ}̔UѶZ9+ڲ>CH#묏גK1:t li]Zr '8}\O6 y#}D7-y~.LJJp;=wc ·-%\ jZ\g!Z%RsC:_- ϫCZks]9dUwcпlZ-U|5B CX--^%jI3hdDix\< iċxZGϫv3m'Mod$OaFyߌwhڳe}8{}-e1vyT+jga>vsmIS;cł FTXcWi`HoݖCF-qZe.hThFKR9-_tFwlsfE7LPB#u>|RO6UJG/!RVBm"D/fRylVRsӐ.""nҿ*u![]VZ>f$H?/ҿGd ~8hH`0k}Y@Ilr(c%ug2f{Q+ٞ.(co:o4 Y\yz8nA2оbk/XZ'|'8|pz^\d9q_?FӁl9!͛vdJx'ԽExoXw8~{s͛e:cS%;Nikoimi?ol8n[wYm־zN0\7)<\P}X ʻ2 ϵzGzϵGklm}qzz|7;EI^h>b NnkIU{oW˫|6r`cXo_Vw_7 fH.ex?bEBWM4ߓ?yrG=c-vWjUŜoiyn3+~4"}+~_aPeh2ƫe'+*N0a"J# ՙ:R d{_ko_EOx4㥱Q۷pyps,Ḱ_٦KT+RLg?4(;SqxǺ%ub}ULO 5}!W~վEEdST\|^ /V}7N S_oȿdMЇSt׎t_Ѳ[xOY_VȿK#q)~5^y!/Їg_)C>W@<._f+/7tLEh/&}yt3% s RBo' C'kV\n{O+̣~~!zFr¿+_7t>ڂh{#UįU&PvB~Za;pJ^BσS+ qP^BMzʯ&DK?x¤W}IpÄuߠ\ NU뛷?[;>ͤT>v*b~; {'5ܿM|!CfҿՄG|"o,<@AqGL[GMEM,Eԟߏ !D> TkҧU^E*B?m)_ݧj˜yk_ >xؿ꧞??(/dW#D{|E^5k+u| REBB?L"W}U-Ng#}_ Nx?2'*/ D|lo-'RI?SB3KҤ_U>R>AՄ#Fq1{s?P,!D|a?+/&*_Hz}:߸'/#Dh&~!+HW~#V׿WP_Y*_F}<֢#>D#D |2Xa%"_?fōT~b|!oYEo&D| dYa [w?EZʷ(~{q}! JV_򃄈oӰ>E|!o{$Cܿ.~b;ٟmo'"BķRkH.14>-|՗6>U/juO5>T>kƪr>#@㛌-ЇE+%f.-U:B_c>/o)~ 'iLK&>E5[̬_9:??YO|b3V66Ǣm&SMՄf̌6k"ݢO">;-'=EhZ/Wތn}yh?W&Qy!o?ńh?/!D|ZK17Py)!$~?$?}Kz;šg.K}N=N.?Nɳ+ c!I*]촟}u8By |,{lk KO2~~r]b UrJ9elXjvšFĆKRDIlr9jFxEJ[ r F~v>'>?2rCo؏f=rC`JQjtCOʲ93Ϩzrf%zv1?p#C`Dˉ,OF='XED 4VDzo ~wֺ-G="1@-G[ CG^[=?jBf ,f|/lD;=⇔QLI}eԙ=Ԙv1#~>sttoSO;|ON&N 'x+yor7 jvY mq6g2C{4(n=OP¯fRɆt6`|"4R_pW$sKkLNjEEž}ZcA^D ~=s\09)m{zںwa_ e_ijcu? BtJ,; BΗuF *[FظPh"81Ug~ge[R{g3!Gtc=b΁ ߲Xfo-.0Gm̈I0-<٭hy[Sw݊F{]h7,zqxE-o'~ΓmXt9GmX~F2Nj쫔oX:ذȦ)DoX>j"𳜤 R6,*!S"T۰|!#>چE/$3o"y/N|b9o3E6}_|/$eǝ ]ذh7,:araj"Q/sڰ|c߰BL|ԆE6,ıoX±oX~!o'>j"[ s i |E=Yh?R#>xGu*/&D|%~yIw: o$>wD#;/%}ِe*/#FˈXAeCW;F<@ϫ"a>xPU#Fi"_߼F'yC Im8ަD5@^⫝̸ o\qMD^O}6B?G|.džD~q7$E]?"þpBKPyy1U_#>y7ȋQ$Xo?{J: ]).'G_I}W)G?0!%D q7,M1{cҾjU>IPGrِ}s th֟ lh$9R"x/ߜ uE7W:1(9ަF"'D6B'e}'儨?E/$}ӱoxq7D?$ x.\[E H?|wQ?9@)x53#bBM_ET>Gz}y q+ S, UN/>W"Bwã}O|"6b&Xyç2B"K_k4~ ? 6ssn8$'pM ??B+W ww W&Bk- wRzRB%K'D4_ҷeC*/!D,#~/bM%D|_JVkt'E[E|!?nQy5!΢-(b~֢# ⷈc~YӔ=!FxX~{S6 V7Kq'z\%v'ʓ#_ٶ҅_z NҎ #S#/3~n==a%mw/A*Nt/N*EC:I~!&WqLzVߞ­@:N/xfH`*i/tp>_N'O=:$g7 3n-EN{à3l4KeʆA㱀8G=иPy/q´ 3wv:_Փ }k},;G ;= =:O7a16 FǩY,%ŷ[2=n7 ϙ-gm4KmATZ66Jnܲ3P[YQ䃍C,{1t7v*@}ҷǹfѲw mKx2|?V:'-,1x]kĵeRŝ撿dyE\MK?Xu*o4(;d2i_nN~vc:~DYoDYm^DwGk{瞖rߡ\C5;CɣEccߚͩDHL@ԍ]ί}*k Vգ6c˙V{d\^V;j nlE-d2UGw)e1_LcZh;ѓБ'`3OUʶ/ޮC}9D+>%sl}m#jIa{D˿-Ot K7FThYa?x\?#= r !ÿqg8{D# ,EF I#MЇStGQ/$3rG*I'[1C@>sU^F໿\KeėS yGaUE|!!WM|Iê{V}xVuZH<Y]țEA=_K_e/+T-Ї+j5o u;?}:$D]9}}|!ʿIy9* >m{X'޶;{XɃ6'zBovKk#&ű䶏)bx{D'y&i8>O)Eh?U}% ?ʷ۳qL{>[ ]r o*_Aa-N$D^xX|/!}%Ŀw! kѾ$~!~5!Z:*Lz|Їop!}½]a-N慻R}Q.x Ow6|?xLT}Ae8{|a ÿ_Go)!Lj/wqlj"D5N28>S"_D>{>xy!qJчP˚Up_u{:įTDx\| !=bGBEʕ%D{ Bdɟ矯Pbz_*y~[ IvŝTom"GÿoGq/=¿G߯x o0@m:C9DGwCNB*$…7"߿W.x uNO&9+A){DySe.㾉'e'[q됾|8:w,je?C1ܻT>Pw Ez}_Lsp?㈟Kė)#'EW*֒dB kth@\(.#7B?N>~>?M[H[ {@Ҷ~gGPYx'Ҿ%t}\:B9/$2ǾGN!>/#eJ/&}د$Qׯ[ ߵ7+3\k c^=L,c,o!؋h#ٯo$E&Bħx}.ee*N4B/#>tϰ*y$z>~&!o񳜤=ܱT>x/~7_Em"FǷ-7B+KI; cwwߢM&#H!n7Gԫm vB,Cyv)ÿ+/P)=D^L]}G|"oW;S^}RU'T^O"a?A|"_%Պz}1阅GH,ھ.Vb'xϤ;U6<8َ'MMzE$H)G~i">7D$*\B2eXO1VW(bT^hG_XKo3v/ >ͤYav?NBBg, "zB/có-R )Nmӝ`%&Ce/mc*^_^IMby3-&#~!!N4.߻=&ݥ?k,. ?}&}@ QGTb6*o"DG_ܤ{T?(?S'@?mgU?%Qq+I|!+_@٤|!#a+}_[?&>+鮿cҿU^D] %#%~RB??4}Gė)cUy%!dчG"?5*&?3w}95__KW&I!X~o_g!!g ,?}-"(.0hۣVxZ{aڑ٣vx6?o{'n9cƆ!HJ2Zv [ڦ#Ghg)̝!N+ %Z6jr4!uϖ~ƝaHr0NkC'1vFNK<^0| SD˺-pp= 5ٺ<;H&F8h`6>[yv%vΗjGk uۿY62yEu/7Qi#C>9Ҁ~9N;QѰo=]'RZ Nxn~8fŌS v!Ii4o3P݃`6Xw WAjtxXHMz(2Siek$,4I%Β͊JEx;Ex;E6,@Kz z 148ٛiXYu@?xaSG!oJ_ҏJjB޸vmژ>̏7 {QUn/Lcm\rO7㳔9ek%]5)WvR&XĎ៽P$m~&~=JB̋C,zUO:^U֟+ =g|RHGqiCB1j(jV?KGd`R+h9, t!^3{'*ò8-bPwQ'$}:Z?/iS-/J狕~~: ^ٞ5c%5u&%3 zF`_+8]|Ʒ&Nv軾XH#ڞNjb!t|f<؊7hC-Q݉֎SQr6˰WGבVv{Hf`Ɍ(ӄe#Gkm t<'JKItHjqpD"2%xڬ7;vbwu9{G䩍iQ SwJLCJJJ}/MUHc ="^J>X8D,{GGdn.#v:OiaWvO6gUQNϋ/(WkC z/֎[xmMRi\{wx˙fmZyԯKmHjlWLZs- x#{RQy~@#uiir2vjsOP `cA6L{ihҡ)a9cDL\|Tjl@Җ/ڼ@=7{rNF۳mb?Vd]nNJm7^y qzHv5렑qeIaddYO':dP]|J6}!׽(B~<ɈF|,W>I>hdE+Z83ȃF|~&!D,"o2-&S"T3ȃF|>8K'F|BB?S,'#q f;F"~v"BBį3Fnw' o $_LG,%~VW"K"a-do%튻ɾF{>WGKRB^y+;l&:BV[ Q}z&7GЇ]įT\O%V|!_IqٗM|7!}gT?{֘ I=(0u#w؇:aa}N|"6]x}| !w,B;_q~w>_KeɾFSB}ؿ#ğ9J78x߬('v*iSԃJ|!ϭ;f_胈F|1;%%3/%/wR"zW;=~!{NADwIr' 9a"_C}*nwewXw_nҟ, w*^%D|0 _M5&U ž:aa f i=V6/} &IQ?o$Xo&>xޥÄSFQB&;H{~X]#}}@žxywIm:YIѾ?J&Bo&DF~nч'~ !#co%D|>IvdӎwH}U.B/Q9;C">7} D(wH/^BK%¿u_Mr@<¿YgߪoaQp&}W坄(w0>.݄4򈅇#-!Ʒ[g8ZC!8uRa|%DBy~C| !_K[~gH3!{'y}U[Q?ַa*/8C.O'DE Ÿec*M?b}_ Q?K>_8/Џe?W*֒~6 CBE?B!~"2&B'~zҟHB_D&-?ھ݃Po'F;E.q&Z/6C@5=h_݃PfqbU^L=(|"ojP\y%! }?*B܃T*&D|/Ї%j⋩|5(Wwr/&D%U[9KQ~W0WHϏЇ KWS5O [ʾJB?݃NW+ό*_Hs:i+.#K,Hk"D*?Q/)_A| !ʿ:̜*ү#H.#'Znjr؉+_H踇M+.%-KI ߪ$- /Iw_J"\W*B߬䰓})Պd2~-_N- DP~Ya%?p%ϴ VxΝE>kǔJi3 Qr⒵Y$ĥ/w|!~"ڏ^Q>ky}t п%NpOPxS -XM(7Yx&@uӴ;d֛ oBL'8 S%Np奄ۈ/s`i{؈+%&=עNE]wP4'8j ,K.Z'*t7)k ˈ_G{J _I ž">x迖BNp=ߑP|>[Wm&#~!!{y帇_s*R/P4B|Q!W171W+^F1^_NЇ{R ISy!6B?tP7W#aMzH1>}%B /_7o(/m~o ;+V^u D^D= 1?B| !}bvK 1>ȤZ_~⸇JBQnч_E渇jB/Ql ȿńh?&0![w&AQ;A*a}yE?kѾl)R>;Bį%oK\KK!W^|QWN9%$=ϷBγm^=|q.p~;ďر=#0}L|AҞlg^Ѱ*45 fOXIw` 3 4t*9(gh<^Nx|vrO?:1gدC:sĝ'F?T3C;mp} s%iyxF={F왒t61RxE3tNslRT;.E}#݈)Rq3S[:例o{h(W. I͡h ,Cq*/+ÇՀOTFzzvËD̨MFSR mՅ}5+\.|x6IG-6ب18,,noLm>!2Y84i 23rIRcCԄR쎣=R:jdw;Jak4Rsπ؛xmM<3\Ha49'L RTuQ13u9k=xQhp{ҍӤ|P.)㽒>wZDҹwV_IO3ؼZm`n}(_YR.*cQY9)f-fhnpNq ޿pzpA.tn Tlr;IGg5m pgH+XI_'7X'R9œuA#<)Pa~2awi4IOX"k\m!ꃒ#V ;[e{귆܊6{מhI1h}۴tEyDOPU~^GјeӋl'JfؿtBDO7| 7P~Rk)P(}̦Tn\zErLrKejp͠vF{hJ%HNM#? }͙Yvww*3ts'y_~'f=% $7Wʢ'tͥ˝yT穤2ŐB*dSH:L[֕8,#x ':ۯ=(;.KU_,^LT{瞖r:d[{}CM*sǺDw_yѾ4Z4Q@otDVYΡ}cQK#zo_3l=&񮾣fnm;zĨ5E8x*~@E$u1vvt2{!cfwԈ)TUݡʣ;Tz' YYS\ MЇSt"aR>O8?~K YNp Q| Q?˩~dKj#D ,ئN!ߠ񶵓ϛ } XM-&-!N9qr}L~ Jk _3u&XhЇk>uھriW^e3y(iwKׇT^DbB݆}2 ~.!w_Jė;q3пJBe;ˈV\Z£~ :Bw%8&ɸeo˝cjvcDo>?@ZBѿ)b.KU%q=qm(EN1*n|ڝx2Ba%;H!'9:g"'Rn'}"Y]xG(#7O|!Gϵ +6Pr+1\O|32Vt<Y*_E(K?Պ˴nVZB_x|EL: TO2o$Dr>BfBGxC6B4K3(~[ LKxyH[%iP <ʧ+b},k_@Rur;G3* ÿW_I߫(}R k/WIZ?_G 5(¿7A>{#k ѾxGy #D awPB߷[gwIލI݊:A{#?Їe ?䤶I_pg^8_x }/\ /O&|ܟ19Yxߧx(ux ʧ<Z_R" ||Ed*K|1=fK5~166}؟`ɿIT9?֟B|)!7cU1>HMŊ,1z?L7uC 3_D͜ GոBgf>Xo K/Zm"\w~}/'I>A8SJ'ܟ;14KqQ xo6'*姩@cj 7VKLB5r+/ ;V*~:񎡱l__rAߐ/'~>!ʿJZoC#15olE"N쯶|">-ODק13Q2IZ}俙_?a~*sM#c~c^x~~(ù"bUgXjg:)PyyNh_mR!s!~9 *W|GQ# п%ͤAjBķ(b}(kN=&GH!o7uCKkNpG}w"'#:=ŕP{Ԍ+/"&=٢"X#D|nЇ,#T%>+|Rqqh2?Gӈ_%ʛ ;Q/) W)4*@<+BmɟЄ )Nm_GŸ>z/#@ߗ;13"/&D_G+/Q-ʤר׫#a5W).$7*'D!Bh)_=oėi:4<~Ӥ|:!./qqqBoGͤÿ?[.>pRQ/(Qc#򕄨RYY%WA^_mU>SsI'/U"ZHpr+&emik3w >?k7-s/R\LޤT K ž;y/Yx"/\7L~5Bug=g[X/Pʵ?+|I~G٤TelJϕǺ< E><T.H#+b}(?:NbsBŊtY(_T#'~r'+ q+ X?fz]"͟c%*NψG *HLo氌q}-<e'*G-]8| a%>?JEZg\ddh!u4ˢ_?Ťi*o&DMȷ4W)?ô ?ݒ?߅K)?(m% 3JT^@{}/!klߐ1 Tesu|ɘN%7m-BU}د?¹ý]?uczD>_,#P矌&x>!}ߌSy!:g$~!L|!W_EGk1~g抌[K :).&6k#K ulҷ=kP~]NFͤ}o;AoIT Ӥ,2BۤKU^N'{Lܢ?O_fѧ#~ ~֟2W卄>}\M2B/W\EjRW"&u[Q6(#L:0â@9bR7G#aݒF;|a%>H⿙ZZf⯳OOj/S^7PM&=ߢ7? pLI{ls- Hd)&USMzEo%Z?gf*o D=-Bo@3| aYRk+_;Lz 4}1>K_lKU nч?OIPB/ЇWPQOj^&BM>쿖N@| !Oo$~or(M&BX-;}SπP?1.*rzI]v5L@)>2E_>h҇U^E2}0Պ<|ĤU@h>mɟǗOP=)K0yS,B`,wO37*b1׉_4+}y_2A762%b)?4r2R~7{} i> OJ njGGؤGU>'&Ӣ%(~jUY>ŊL7#a7WiUNJޤ?$۷ܟ1>5B|{6A3iT'i "/._xSpsLc 3[[|Y|k;ޚf*O}*_4B?I:9I'S_aX~'CZ/90=Cgi}Q|fȏ/JIӟ#O=np.H_9zr`IL6FYw§z|SaIfҼo0Kzm 9ap2TFᰛ3BN"38+CKF5Ѫ>QξoO |n. %QEpsH%0*>it“e":zQ);2#6D9n JשaexhKf`ʰplpNe`E?~s'VF:-yZٰ⟪Nd?A%i=R[pƤ%p2('%L/M)q(1 '7- KJ#rww8d1lqOLk4H:g^CCixm™FP?%pGGKA/ˀ>ߋ^W/}8RN9y\oOD[W7Q*h|JOp`[oΔo@- [p&ߑ=<_9=h|Z{yzt:^V%/+"dC:I> Oଆ=4AG$ii F<_?/,KnjPΣG9c;{cF$c`{?L#>M?/#YZ-X喝_m4؊?:*8{+G{̒P Da=V9GMw#ƍHb Nzr{q֠ģked5G@J3 o8ɓ >MF>o[Vl0CN4v9I>J* Vi'UAfxiz&ڥ=sH{w_57B~&}M[t^J:.z񱠃!аRA~[C>Tݝg9i.dx>| yo[9> " N(YNNp&¬![-twU,dCwG{i8ږ!ܤ[tx?'/{.t?F=7* Uet.ַ,Im[vВ:9ɻ;sxl=zhȽ)4Q|V{.:%#Gywe!׹Gk+ )w=+kQ]<ݒsܞ{:C3 v -r'y?\'|VûWC1D񰴟觼 ZBvpwai,4䫜{7-Imw? ;tg*|'ve(}v+j}/q%dR_ˋzȡ'X$?@YEș#C{'zV-Cd3UD%Лw1H*Ñ',9yOKIoߝ1a[G]=>%3a5Q[ӀQrLmMS=5$'^+Y] -Ki޿?k=ꗚ|7;\%{zM\>w֞D_`Z&ȁ D}[ʸyU5xdzᲶ;$vR[*/-6#xo_WwYn0cSc;GLz^9y9[e7TSa]=#=VkL9TͻZ޴T7#TN:1!O4񭥩ߒkE،O%]j"o2_?sJHH;:MPzrY?A ser8ݶ o]Ә/zBv%:vM>j|mƃE$*}ҴvzQkdmK{g֎V.7~-CɊx Ľv#(7 *zIQ,#l{JNwhHo(u=m ت;Sʤ^K?ΆKcyo2ѝm]e'W¶zq5C6֥i& adrlJ׸?mxfH4KȾDoT6ڈLl[kr*~N6.Cq޾־~ˎƭ)ʉ*)ਬe j*:{7 aqmQUìB̟[ ЕfGװڝe_ȵxUm ^o`) H3p's3k5KGD񪪪`esL eM/aj܅jcaJUOJi }vجdȺ4^B^O |utÛeKWђ_56;16ĢxÁejp>4kQMPf'u-[B|1O#!/Q> ^ YF B93f/Ry1!>%Zr4#RBħrBoԺx\E=mrc¿ϰ>[G\J_yfʫ}>/_E-_N?e|lr#E>KQ;>.W;a}_A|\ҤU*_@5;ޫa}_E|b#OnQRBoM>X_JpTPK=o IGK|7'7Y˼$hf\;U^x.Ng+R|wC>XO2xIStB+S.^=ٕ%U&ÿ}|O|IT^Eq> F췙PbBCᎫPPxiטt1o"c\0]vMq9Qך,>_HG: o!DE (>vs=xKa}ؿ 'ta p[_J6<ͤ-&עD|"٤{K>쿕*%d&K卄hЇwYR3 _HqE\J?lGU>a}Q+֑w_O>F|!I|1!IZ=/Q\NI>)7Ϛyo&EߪxٿߤT%~jB|E\KZB7#DӤXs [&¢&^m(w"aįTHoU?$~~K QFO-_P\FEW\G|-!gToƶX̢@|.g "M)B$אO?"aOV^p+zB"aP| 8o T)Z}%>POl7kƘO3^"Bm? Y&_B/"~.!'_J)ė+'iW occW+6fbnQ?I_H$~"3kX}͊Їį%}s3m2NT'C̴|:!G1yN'sc0W8Oc^l̳))#X-3?"~>x<a̬yc5*Hc6YR73q cjllDD?K\[otlE-"5SlYK,WNM_qSYij=kƦت}Z<"oZlzo 0I 'iw%?fMafmLE_綟&Ry9!N.)bjBo{:^߬bWF+Sˉ_K'./!DH]E2Bo?s;UI- ~Zِ֓!D:mi&_B̯GqNw _ [qT4Ew6G"~F~%/euh }In ~9!w#+WQn2I*_MD??Ew Tenw; Qߨ3LzW}<Ӥ[_?ۤ|!?Ǥ;-\7~g T}%-IJy )R^fae_N.BIjMRI~¿7(_sϷ_GV ~f;T&}ȢA|"_HyIV2B]n+b|]&_ E-!&B>}?0o8w%6b_ƾO*^_\yi qYww&ݧBEzIY}VvI?}9X I_Vy!d-WkQ_Ї,u*_-!Cy Ba|B&ԢCL#9~/B!XФQ>R>O5~;?WXL _o> x ?IT>m>REz~IVy!)BL|bIPrB#a1/4t|+QI0t}a3,j_t]~1ɽ#;1\~d-?J\'?b0c e:g%~b57Τ *!rwEM POr" };_ %^ʘD|!3}8 6]x;M 7j\>FbE<-[@Nɿz$JqoW2[x俘~XƏƧVBIyf*8!ʷ"ߪ_3ZTVFeJ!>o!3m&c2v|!ƿWI3m1cʫ ΌaG!D4[U^K[-ʷ_EBj2*b}#7})J/'WDÿ+_GzBw5۾L_8`Jkﭤ6B?x+k'~!w {~۾t\啄h&=Ţ_#R&u|!!/RD#Iqw¤U]'~z7¿߬KM&lͤINOφfN< ~sd%}7|7}>> gN{I/Wh@2\< >4BWZJWq뉟Nl.hÿq2SlB7_D(N3L|1!Bm%ۉ3I|B迋xZ ^*."@Dq&BI#o Gߤ?FVBPx1 .V IPtBOG&=1f|ƤUǝU^J3K}Nj5)3 D|jo,3wK"D|~OK)?Z?U<٤bB_Ͽw>銅doB7\;=z?/&o &\ O5Nno|:!iu[T>CϷ~L'O?[ⓙeRK}ffG~%z> _9?G<_+CdkwLH3/2ig*LS}?BEO7\(b}g)s*7w#ev1X'ķ83uەab Uf~><-kȿK/$DJ3zBWSBPq1'md3ӬE2+-o>Md¢DrBħJy:I2#I3g.R*BUb>_DjE`ѧ|K- (r(}99Y-+MhчįU)eo"D|M2Za w>?$B,w)!gKg񍄨/SR63eo'$k_yK/UD_a^"+#^CO|#!;@2_Im*_AFÿ6qo@>JE^B| !S_ 7O56 D5Bߦ2'UC=/$D>ˤ稼=;B=Gyc&HK1iK,E7*}^߼[NTZN/%D_E-y}:>o^Om'Dߠ<p7o!+Ky}#ߡB_>ky}#߭M~EMfE^߼Ǣ{1e)o>@AWjQ Q?wL7r}9O(߬5;O}ISy !l>?A^?o*!D}1B?_C:K%c}?r-SkT.S}|t*&I H| #~XHlң*E>(ϳ?%KgS?7*/" ~mч__L1eAs|Fg!Ϥ[x=_b@ɵVN̿w }Ky[ۉ_}Lz~L*_$_9 ~&OYR|8ˬVBYUT}c'+*B-_(kj?%ͤ?Մ›rdM ^|hE^/Pw$7M>$OSi YkT>%>U:~e[YE*WYV䥄ole-O>eZҿL[̚jBį BgYK8|5?/">KE\?(kuX?HUXFEo$e${%!o͊~̵jVܶS*"%u k-Iqo|"ֿ2vkU}_D).5u¢K?x oK#a%cįU\ Fǯ eBPˬ,E}G;kʋ S,Eܿ;T^Agk>o#Jod4i Q"a|.J/"_7(b xؿR_c<7]*N;@|!VT>CguHqB7}5E"~"O&Qy9!{ؤv>!~ԢOKY3_NnşoPY&8.p\sI}}!~"O} u 6A_ 7+-G3"Sd}7XS2?LM&M8$nQLE?dhG_bҭ*KTiч[/U,'o3v#D[߄z{5Tg\1}\(<^&/ P˵۝&CEFE&̤W|5!Äg g_H<_oi̿Q_@z6꿹]:?nUV'y^g>՗5TBAq sOE>oW wv&~>!q?GWįR;EKį'M;syry}IWtBb}5<|ݤo|.!äYQo_Oeҷw[qIp>ے?ćO|"g&XKC[>e%I?UBQ~mчQq;3~rN#awkK-7^NqT'B&=fч?KW%>5*CowKˤ8Vsw>R>nˎ0uEQq0>Kέw3Pl;^Q:|7{th U~w/[D u~˾?-{I7PWd u~ɞB_@|"ٰ;3u٢_XAЫ$}3e~Uud߬Y|!!Kɾ2/%}i+-_F2Bԯ*o"mbvE\q5ٯ_!DUķ(n'/#k;ѿjߥxoSو^BĿ?(Y3dBg})e,+}"fKn%5Bp~n#@_Kߪߥ gJ._ww-يt$یٗ|ϴlo>_J|:IW8&{=rYa E_nWZx%ńR>#Ͼ?ﳔ1,geIGT~1!Ɵ&[a Q~.C5*E1s}e|1!q(6NU%}Z?3 և+u x]߈|!B뷰M_rAߐ >| xF揧_b9t#6|O#RN| !g_KL2 HcһU>{.y_I/Py!!o-"]eФ;U>^lч;Ȣϋɿ%K,[B~ʗ*b&kW+MzW BjKk߫.!zި򙄨7v>쿑E]7/#oЇX۩?R*'?}eU~xIZaRs)Lʋq}%6$~"E<7\=*!D}ZE%ISy!}1g>{,c^}sgϩ|"گgME?G|"_~ޤT>I[a>KqH&Ekr*o$r}e*MzH+Q_Ї,Q[I߰w%?l_濣jv~YME@|bC~ل(ߏ"aǖgo?X?W)M0w}K+_ЇX!wT\  gjW?xK ַP.7>4BZ|i}OGNEZשP?'9>"~.oN6e>1u#5>cRʧ¿j3ig1gIY5D>OrX˙D\&_L6iʗ"S< ?W~L]|զqoso16sU>SԍnNE_Ho3Ks Q&}؟E|)!7:9q}k">lj/W79-tF8߿bKR|֟3KW|Q_"mB佌 N2ZU>[G|>!kʚH3 Q&-|/P,& b7\N(jtqGY,SbBR*?#ed?7~#!Ǭra ~nMZYx&{I;,5qEkLZ򹄨Ya-IT^FޤM}@|"}ߛȿ͖qf/;tBʣCRmGԾ oߗ_uK^)H09-/s~ܳ[`> }?·t= wHyk\ o8w}Ӯv'iaR~_x? VyCpKu$)LǂNP;S߾V o&'_Ldb{IrCAI4&>4Q b|zIϲ3/Q"ϴ#U}M٤|&![LEE?LzoЇw_ۤ%~:~>}]Z>A^}Ԥ|1!#QqٿǤ{Uo3ھDVnk~#>~q}-M?>@|1!/_B|bWU^J(vyȤ_Y_Xk&}C啄(MzԢ ӤU^Me-05o_K(˽= #b_vX[@?~dR,$D~J|=!}-"?Ir|(LȽ0=0/$,g-mֿmnY{]mUQVdw~}y=[Wްm͛YZVjQ*B-;1vܿz]};C3 Wn&Sp4Z([7J>a Ԁv5`ZBxe5cԲ !E4 Rf?f-40p2g<>onݳys?=Qr8GzSƅ%AFr5Pq_kI5n,i=cM犌Vo7ڳ`m0RS`ZetelhaۛWoj^blݵ]4MZ?CÑGҝg9:!ޙ#ue1^:hϣy>NR4p?4.g nLM5IiB OalF\ }n·NQ_mtyrƳjZM¯3y /ux_w(ġigFUP|$mgK s+Aa9ֻHݿaټP=Kr6ܰlQ9=׼3ʦsi\s2ue _?1o, ӏkH=8Ͽp+E0Y`S?"L o0xסDdž]6U'}9V";Z&:6釋vv:_Փ+_~TX?ߨDmMCmE=G=Y8! +fM {8ζΰǎmnzמhIlm=nmKD3Qnj;ӓDͱ#5޶n˃4V/Mm^/q(һQE5Uj" d;;xwkO"9vvr-&̄Uz-}7v#z>M7?~Wxt„Dk_*Lv[kGGU]gmE%

\9J9@dǦs]YKgnfWO)H\Ҡͺ"Ru0rfUUU8`-]1en?Ntް_v= *)nFI]ee[:oD)T mZ牎aCwbnVd<"Jt':%:y`G*QEYRaEER  rEݿa w"*Rq^3jx{g\Wh"n !C?x彴(RFeiei'ZK &5H[SRBr cK^uy%V^^ҊHsX\s﹖}0MK:_<MӚ{b//bcѓ.;;:pA\;v6Rc/ϬlϤΨ.ޥrh5yTT啝&boz(ޑJ -\/^Yۛ:;ow#vneւ ]]N<~G9\/O]OM4MA{MfRe=ब`ɴj"2h|:e0uҳm>3},ZhGL>;Iuhbæ5wыXE_j#^NK6{RVŒj9 :Y,3VOUٳG(~43{sOkN:O8ҐŴiu, $KEU#>KM&?VhL%e J+^d)1#Go,Fl7fZ1cUiOT耈Iąc_E3"&օ0u q0+_e!dyLD܌[ ~9iV-|w{xX"Ll5ďV3$S3.yc;b̶]sxk 1dֱȬ[xW ֜(g{vE8+KT^1!?ҲѿџRk3`ԆَR..\sYsYV狥 vnWLH;.h#q.Yyߔ[ KnMgSSG,wuow04o<]{F̾c7:ZE˄YʶuexԆK4{ u.>ȵ_&9$%[Krmk&sa,sys%{`2%?;Y~ °NTaїCn% Ǧ>-tnGֹ[j'݄ۥmX|>cȯ+}u$?] A7,#b`#]'t[b_ D[mK`wσת@bEcBw{V;ĒF^˪}wDey+=ljw:!l5o{N` \,+wzt\ҹ>!SkH){_'G}q\MXM7qMaR`#kˉZNKcý35|ô }ݷ>pcqBH.SGN7e5=#΄'<1ٌPM\NXN]%G O21g; w Ң z@,iuD}`B"eY]P{]:@_@Z7FA˹m}B\#{c9ii"l[$4q}`W%kx}UVKZ{2W;iZAA-!=p?O$|7k2$ՁDC5R@=Gh{I.K l5e]w)$k-1 rkYm8>ok YN=9 [^,ilKHVoK- N*Q:iGDeycAQ:k$mnW*r Gz rz4 #XZq~S?9M6F[7t=P%٥F] ;Yp':n9紕}#+jZh䮙vtMey]vɧk'rw\6B>^pJ[hlfwB?1Wm>yўc.k5%~rzp`ʑM@ ws w{𿚝_Zj%lS{`7[ hS`ϧW4+ v+m͛QK 7/f9n&$^Pp KĆ~: f>w|xN~ _sM? sVj9^-i~&:[> @Hf {~wót_DCo釲SQNO֑} HH'[t&!w|'O:CYGOdWOwM.KcO.c/ٙ>q"?ԟ=btY5? Fft+'StV&xO>wߋC gNNownhpԠOɶQ nW|C]\L'aWH|c2gVwU?齶 sUoV'_Yza_][E|u ,l ZFek+wώ)džLGfPLVW׸ڃZzSJ vBmbmO)KƝ=Tt؛GMNO&pVC:fuU DSr&<&^oMvn/#cnGT+UJPo?CkjK[&p&k_S3QejvN ƽVH\:>ZC?0rxxq¾睐kKKU4VB+{*kjV;t4׃IeGAMzkNBz\2ft8KTnK ΥTծxrC*+> 'nΤNWK[BkqH}UNӱɳBTZM]s OjƕȪlM9nXSbG.Oqo`=׸w8?? f|6zYH).K+T#o|ceO[.GxgX}y+ _L<^]udgcdep/ܭ>uը ;nڿ+_@fPp 7V¿!o1}2l]I?#LpR2H/ro_2Bb"w  +}t[,y-!ʷ4D_'xaD!P>zVB $]*+>k}=/'D~}B UZW¿uķ?]Dɏo7QnTiѾBa!om!DnXOcQ;_E봜_hy3!OgA&~F?ۃno"Du~!T̈́O쫿o"D]M*Bԟ~:7:W n/vB!ĐvQ a?ieo?!㇖wS[Gy/\,<? JBK_E_FWBfk,;Y_Gy=7  ax9_E~ .B&A[UM _чNۏU kǨ;">K*(.TK BUzA"FPw 1<&B,^!ҋDPcsTz{ț qs7<ZB?GUDJqb7~^K <쿔7|ehM^sfBm_ï$JWx5o%xͽkNo} ]Bc[ǸKq}rB/P7sϢTǗw/*ܠC| /U"OOa 1|FA\?GD}XGo@?DU{}W7b|$[}JOx4o%3Yoay; Ѿ_$~`TȻ ߗCW'xu! :#TT[o m+?7G }+GI_s?#+~U㯄ǸkNOg|GlgǫS@7.}ɨs ]_~gz/%P/#~`r8/&IǨWr%R>].S_Fi'eį 6į$Lאl[?uHп͂;IПOn._@|7H9e}Q}>^jH\J/Oնk:u]>.:>ձ}U_]}_J<`2YPB䌨}OOP~~g ?W*BA_ 2I"E^MXk mRk~/EzD\;ͫkH\dA(˿[8B}hȟ4/ut۶Wkvo&Dנ?"8 ~KG> ~^K="G{ G^?Fg/O| =@u\!Y Ce:Xt-}xK 7?^G|`$)?ҠA%/qN|1!tAO_)(S*y !d>2O4 A\zD|O~#gXr?`hz9[ Fxf-!N,mJPJ0ÿ[_dy$}yk,o ̏_kyOּZFң Uzsb ;D^A*ˠA"a iЯ%}E)zAz||7M>$DW_EOR*}CL_CQ?J-/a*}'I?Ed*}H !dK*}I+ S|oJY F;B %L4=~ %J?5ÿ_E*HK Q?? ч_JO|ag'qJy!Ɵ_> I_q|!/̈́T}E,-ھ=mha2&>A\?ww"W"IҟfG$Py>"Eq^ b_snBC%PNrb_L݄ MӤPֿhJ/Yj>gėhUcJ4%RB9|AZ?GZ%H儰7" 9WR䌰}La%~*Ytȗ">Ba!Z?k.Z'ZAZ?Gko([Qm!+Xג>[oo#DMa(jYfpq+kUk:W]z>_G":jЯ#}EArW"~\,U_5F5#7 $=x跑ZB[o%}5E; Ҁ9Ca?=_Ԝ[*B߰Jϴm+JE>_sA "储-*&TV⑚A|9_DHR1"o!D>:D?r8C1RZYEҝV_9UzA$BǗ'd'3T_\ !ƇG\3%~}Y{x>9*- w~ nGԏ|3%E2U[޳ܟ{J/y Ǻ|ҧ 2 -\W|1!+TA_I|%"P&~!qOkC >H|!{ߛUzȫ [B[4.%A|5!{'H|Jy=!ַV}}Wy}>o!//B#įTY8 ч?^#ϩ rJ?0_HE, B/=>EJ_BWCak/\Ao}|Bse~xv[keߟJ?y9!*?!~ /]>}")_%ω_H<_M%5|(Y!!>CpԿ!/ϴ}Wj\B[N[YY/ )!~ )H/%ň_&MىID| L| !NPķ c~D2̤לI(" '50kokVi hʠ_.HχbJ'Vjy{jѾ*6b}/%SsAL䵄h!_F|`3W1[$Մ}_d(j+ |_mOBbleoHKb .2yPG15 o}j \956#ۘXȷ}<R_bG,gW*Hׯ15։| ]֪tA#Bp)oUiȗ֫ɠl  ~bWPXqocb[E>J| 8.VBCa r}ScuC7"]oGW; !x~9@I_A<2/H<%~CUb ė 1[H,ҀA'~ ^R"_F?>질&D|$>A;R~{?z@0?@kYfۋC*3?'!D\c#E>ԯH׈\#_=>yXe?|J_"(Oį D:U D6B*GzjQO%BO#~'!T3Uz[;j+ ė 9*-%h2>M ^1ėb傸OuW"~?CRB%~!s'Q_PK"!D|QQ?_"~ }٠O5UCׅ o?1|W|!{*gЇ'\㷾~J?y-!!C'*L[a!3 ^CүE~-!W!kC]K}> QDZhέՄEӉ_C(WE3 Ϥo! s|7>+}W,M  ΦI=gZ>[>Csmֽ{{;mэmRbG;uo;ع趶=PU' *DVؾsm{{vjJ;'۳ 6Puo ՘{<p*!.)0 a==A0M9O5o]ƪo85ھVsMjt8PWi5{Gɳ,3<*nLe~voQS`q*异&t( @&'8Ty(X`9|IC瘜tS Q=ڷu)<ˉ]kqʑqcnoSH݅ch'UW53ϽԹu0Fu#ex/}1az :N#Ә#NĆm[_L=b=GB'yP++ڶnہ[Ӻ{h?x`v)D^~l1m .[bd3q7X~oK*ANbg`K0ߒ㇇ݡ<x_Kj|CQ/O{VnbK1:?|Ҹ95j~z1_$H.KA?mƳM8t1h yw|e٦8?9 :9ޗ q$#'%nE'ɾd&w ݩ7UZ}~{+tw +wY4tlʯ +m}L&}2ݛ%S)u*T;)ʹPj0iډPÜj_LTN3t0RxWT/ٙ>q"?ԟʌ`?)'%jG.#X_o0g<gR~JZeh nEMm1qOwӁ,bcDQZ.кA߁VCy*-Ѣ%B=5eMeܲNho)$Ϝ +;1,TsÍSgs Rp:v2=w҆Cl=sJ C~4{p78p<`9V__07"'Nmpo2CFwB䰿]ݘԯJ&90ٲRzcJe_i(qd 4 d0ǧrIczeMBnB o*T7#n&QXvTXVnK Υ䗊W9VǓԒ(~r`0>tZ[q}YK=)'b37yhdhQ7̦YV'] { C;CFBgV;NQc}c`dsШSәޡ\ͬK\Zͺj\/Ly5{Jch@xkϚ Z׺—eVԔ[[@'ʥk헊 h:mW'dߤ@Z[ѧfHľG_e"oŗZq;=v b%Y:=RhIo1 [D:%{EbgHU7j宥]WyP'{}}aesԍaU_}8X+thr꼾˧f:[Zƻ4Q 絼}ņzkx=ZK@~V].ֆٷ=nѨMUW{R #%V0g{p?=]&yab-r]\/nGn,Gw:ߔށ GnE[%5yq˝$䩀9Tv}>WSge@p_r0}KP?jϝ32 V40x" mr&iH`L쇊䡢AU&]w"zIY'Fޓ><>| Z0_NLl[t\ϼ9n#u~ksYmI) )^l*H>^V5?u TGVbEcm=Ic?{q>]1֜t3b9`QmJ+xd!m@;F}5p9=&5qoMHOO⓲/5#W7p/> gs9Fky]ckεzcr|LlBZcNJBZ.ҢͮZMOD -K-A"8浴[C-o3khwn:C]t-ƙgT3 Y=rgluXx@߳ :0%8γ7E ZaeouT @ Dz)YVV;7.9OV[ĔXޖ32b,oMS(bglwgÐ !x5Qk*!(Ϝϰ sG¹'z^ϕs @^+Œƌg+'$QcDZWdgܸAy)sCtx T"{~V&mC;ﲂ.w/\ [LcAZ,3-=x[d/se9brعtu%-O/ϯUYv 1K_ <*"+{{Q*neo]jy{'[ajY^:u,Vv0ljm|R+,_6nyY<ԑrٲ/)8 EZU[]jeo\*I[RJXlL/%$$djC=c);΍kԷ}#};,+{G~}+k iR2cY -ooKs>SnEQ<"ww)%ObCVݤJYV{LzIy7)\@ݨ<& 1aw9+l0#]﬜˄&+{\ie7Wjy׭09iK:msoa5Ӕ+?Ķ^ku,o?ևt\a;5ǧ?+-N*Ъ%IZ]gedqq&/.K yftNh?'{ wRᱏ2\R[a~eDQb|$]JF'_I|%ղ &vߋ2e¿"h?SKoeį9o8cy0}'k^dei/f__a%gN)s}'š\P\f'ˏXMU9d=3i궁}SL>eEZY"8UhU{GFԿLwCn{jMnitD{"^,4s'j8Qp&yTz`jyAɶQ K~1>aWH|c|'ExVۆ[a8Wueu~g;:76P]Aؠ yp@n gG/fAS(3v7A=*{x 0q6~6ޗGĝ릳_cs&r lAcC: q75oH%Z55x-d~ͷRWRyϤu5Wٗ4$W4шǂmx~(Sĸnsdf6&6^__5Av FqFSu쿘_JN;=`"]g\smzuYM~(g[;oo~zWl){<1zx]avT kr:U]e7X\]_OTV<["26) qA Ne1Ze7jQwi4R'UڦrT;pAV;jg]8٨A. _$eA[}XԫQM>jOW$~ Y.*B7;D>fyi].?#LpR2H/r`gy/N|!oG;Wi9O  >- ~}_a(_+T }&I9> D4I?ﲞ0WbmZW¿uķ?]WDjЇ_'WA,=hM!ِRѾۄ/@&BNW:_-o&DRiA&~F?]no"Du~!Mm&D~d_]E|!jWQ:7%uįenˏч#wVv2~Ls1 ޼FG2c>W_Bp*BO2B%7_cy?Ӏ~:Bi{J <"_-J]$~!M,/~|;!!6h~m9ALUVDe}j?O'ˏSv/ *=Ѡo'R'D DA>??O$儨'VYc b}&Nk[OU }4+Q~]Χ '>w:>?Ay$~=!ƗgIP揈s Q&D/7/뿂^sh=j+?+Ӝ09?5 _o<5C+Ҹ׮o#U<".*[ y|xJ2ÿw_!{Tz >쿏AOzB ~`A>,C*}Š>L6A_]Q^wbh>KN]TO$݄_>ҧ <4%!~?!^/x Dо=ל?pw࡯9%^szsȯo:~~ <&3-X_i~)T}'h~%Y^GK "~`lY/&D X%(߈_J_F\N# 6y+ E?%Yp BIį@H)oIӈ$tw vwJ ~"϶+*[D+򅂸|,2[Zジ>UQ:RWJFԵNdAK_*U@}/3 ~/_݆GD^J/%~ _c=OϕzB_%Πė ɾ"_L/G Jz}Baސ?ݟ\dQZ_J_cCdJE5S>_M Cs͹J[/%o5E=:sB5&ED^AulnQiAHV>/EvF__+*`~R?P?:՘y!_%#=}"~Iˋ/5VG!wo>3)< "W _-ş?"|oTzK QIYA'_/iЧOs+5O7>.|3$~u)Lp}JBsTzA?*mЧ#E͂}OBBb||Jo2#V_t|Hx还%oJ2^!m*>WȿC_Mo^gau !%m2/?ZyJﳼF<^>eЇ_&O]!8d(|JA$x䯸'Da QtW}>%PJ'.|_Y>/2A\J?6_hq *}Id Q_T}ھ2U_!~!U.jBϯÿ X¿o_EC2B]/jBB} }?O9~~/D^&snЇ_K~- BϯTAM<}"[Bm>GRd*I䵄h? %e~K_B*Xk<Ӽ?{AG_(y4-!JƫhKs_N(-"V4U䍄>)!~L_m?3WkI,xϖZ>{>/~ȗZYGPƧh 1~QFczrOe~Rv 'D*o8-_L:6_B6Bͫh킸_8}2_FjwmTL+Ӽ+Ɗh D?[uѠ/OEGͫ]oЇFi|؊y-!oe>"^_Q+ѵ"_Mo чJse~_XtJOy)!귍y|Z%^E_ǮhAm's?OA_q"?Ew(جJtȷ}:wy~',Ct(ڭ9'/qߧ/_U٠_!tH~Z2zA_-U}uw MZ| !:n2#ķ* VBGBa7u4q㤿YpR"I>O痛}: }]7}WC2*!eH9žF=O| u]TV0#[ڐ#Tzȗ"uo7#&D|<!1*=cIx}|~DVXާydjTsB]cGZ>,ԯD^{=yXC| O_D^I/_/"~!bVKo&Fp鿜-X햷}J2W~!ƿWkUTz=׿W}yF,%h7^>쿙*A^_E}H}J鷺g>P>k_/`y3I߇T~?' +T1/&D ч_L_9 Xߧ_&_ߧU J7#B?go!ϓ%~kf5cB<-ブ%Do|O"׈]?$dz5ܿ㿾?;W"~BRB?%~!g'QPW"!DRQ?"~~յk>=ќ*Bo ~FDxe}?ϯrZf@蹭Α_3K3=vm݋oMqh[OOn|V5u,99hǡm;v~-V6LC[c~kjG9ک}(Lh2dt4CUe0Wc:W<22Gàs3Pmx4Oo?`uhgG hqk[Y<cvUCu| PyTV?SOxz_k`_߅ȹ6 yBr5 "'xƒ_.i018`=7!-bU{͌esOXM"qX<'#&ÆD8($v/.ioJeǬmhi=Gw<}0Z5d?߸,5W /8eb'ҡruG]w 3 uqG>2k3F9X48gͷkovۖJEcM]HoX1/ü4'N x^7 q. gc؎1ow#Vga,翍> /hh[ק)؞Z_?r/sm_2ظ*>w3btF(YļcIlZWhS?_4Z VpO'([=7m3L?Τ 4FWu*+X;vN{~(M`C>D~4o7рz2Y; tXFXbInva̽h:m:V]*T7#nŚFgXjXwΨwg_—a3G9c .\ዥXc}%@6"z m⋁"qh/}k+fYh6~㣺Q-l<&V.rvgW=_v ;͢n;]Myo.:`Uɲ{_>֟qr.6[+f@`:m+73 ڶyUШMo'0캁+ 7(mG-knY'09rIk"|u)9` ]d(o\Rɱ\i$@]>ψ3{Wٝc:ҐGIPo|=.&ٻgՆw$%F_Zdo LjbY[`枞=Sij'ȠI϶O:^;Y[4tX)v?'6zkn{ۚVփs祈^l*H>^VY MsdZD 'ͪ#S }cI9#:tBA҆ cW VmQ ,BeZsxɚĒk0' J:#[,C[U#fy[ tiVNXN\[~Z>bOHc1/w:`+ i Ҫ1β9*Mtw:n96N%S|GUp ζVwf;@sM:η^"8ߑhuuƭo>qGVJ+K%ʂo'`/b/gơ$[%<  }mB= ^N6GmT*x ZJK'$80hX7Iy }\(rfI䉦c<ڸeyBkn@%wYaCTp& a4Y"Ws8k@Poz7+/^ nyy:7_Z'Uğ' >_yoJkWOנweD|)Y2:_\hy_UZ0 QlDCfx) {#jal\3nu>SeH_HkޡAz 01pSw}=TPD|Dn[JN Iߒ'uG/0$l5Z.£###dJHOqP=W~/AI~/eT7I^h8:=|79jphOj36ao,wP% oWfx%@/IuwϮ0:Uk=]՛U2q{Ke L ek+w]Rzg3h6UI2 \7o 2*@oqsZ2"jk}~K]nQ,5qid A} vAC2@nm=:ۗ(Ͳ7/ 3_(͞.`w!ux]<e5]2H/rddy/N|!OD ï_.H9LIy(}_F0zAI>,o3>> D4D!|9!gJ>o!~*o- :[៮ "_Kt]0ÿ įFr6턨M!v.v"~vCAXGc>]į"Dh_}9lЇ_-o弼^,mD~w,eb+ }ؿP$ ?Yg}DIs\"o&DK {S"?H чS7~|KY+{W ?$<qߨE^ ~!"eǷ(| DJBG_Eo#~!E|5!M|6_Gy=w ǩxy<"Z oEo$o'D|D|ai[).D|T4"/%D|~J4#_!rH]׫Fw"o4뿷Pb|{ӥ4{=wH߻Tzo D[{?J{J1BBa!*_a/ӈ1w>N.=TO)w| ч_M5{w|rO#?D|!eW _Qk"_GJ1*Uȷ7TAIvBϷT >чo'TBIkc?&NB a*/H!V}9~5"o<5לBm_muxM3ľFߚėb}uAT[@# O?hn>BBTG?}EFˆOd:5Ff|+!WkG3F(BL˷Jk|>2O)1/_I]C(#[p_B'!o!=גq¿D|+!W]GVx+.W @TGDQp3oJkE-*2ÿķ b˧*jJ.?#{'!WF:  E "ʷw'sw!wxwQt {WF  чWX0I]K|/!ܟ[ٌ\o&D1tUst#!V<gO?Y7)]B(ȍc]sOxf[Uj x_}EW}Q"nݟ?Bx֕ė"C|zN 1Z_Ͻ#~ !xB?_F;O.''w_'DO&~%!B|-:73HgYp'?NB?݂]7݄#~/\ET_|!1/T% WqyĞ_L| SERBK_F_*>D,DBJa!k_GBVp$#oT-}&7 v7;H-B[K; Qw#x5NmyR}n\# A>,!B/!}J׸s1}Rx i?@3ɯ9KE^je1_(E_r/%U Y5 Q(7o!_'F!~U9"%]w=oQ'NBa~x:O}J?|A~ ė b}g*BKѾ?WO}UxJy-!W!k}*^ Q чʷxE*5L| _jB|9WC1wc gO/y)!CȿGD'M1u]~ 4jЧ\te|E7 5`tȷJig}?3SH =>L?*-0ew #{ >/:ˠW@:?Ӡ+.z9Lq0:o jN"nj}uK$} jPW}.h\JJ>!?Tx_-%1~—\#' ė *=K䕄2D_"Hןѕį DV_'WL5įDkB(tv˝*7Ag;e*_wIڏO*4GZ'zȠ_.HT"_BUcUtAۉ_Et}b;?TK Q{BaP>5BoˉC1HPbD>_C]sE0uė">D j̎nЇ##q>zLKa_aUt"TWՄ!K| 'U:e" bM*=J̈́>Wb;CB~Ϊ4(uZ_ћU͠*Ϩ4,(ߐJaMJD? V*BZmTQBc"06ҿ0>0?ϝ*=Cɢ 룧 yJψ| ? kWJd|_F(Cl7+V *BdB2BTK-o$D4ߠ&Bi_L$]l>$~ ߈2b%"HID_FP"V%˱u}WE| /T,P7+Qe!_M|΍Պ|#!чZ7 /ĚDCa])߬$D|ч59I:jSU_|m"~!k3ew oJE^Ij#~ !ƿW~[5b;,o W1cG 'e.|*]kЇ]u-y!ߣ!>wH&PbToa?$~М[Uh߫ i&D#~5!;bh?971Cq6AC:I|)!) -Vf+֯:WHBM/%tk t aJ1n&0 4de_QO}"~ !Vȫ8E>'~`ٿ`Ew_ky㓎G_Oz+ QV"_E}J/6,BCNj|-!?Naį#Dޮ"o%DJO4į tؓEN$yO"~d*'!S IOE=Y*=G](߳U۠C|dI_q{D~ ! &'~zB =鿘BKkܛjrWՄ_T"_C*~gЇ&EpJ-VBJ7^pJofBJ6BJoy!M*ՠo&~nnW\"CF|!?o!N忊C]E1/Ož k Jh}s}a{E~!*}ܠT4A4+.) 'Qp#Bߧ !Q ba|`/_/FJ_U7 -#~,=oEJy7![*}נM^kw אb?{_'x.aT^BB<O '?~E~g? G?'"xso~g {+<u"W |ˋ"wЇ@p?-g#- DчC"[;r}X#d&/%M"~X)"&UϙfЇSO󕢩}>\"oMN|V?E4C}.>A+HPhJsDARAC|sUR]2쫾PW 廖 Â6)ZD1Bԯ E$!Rz>_Bq:}ߥ!~!4 QCa|S-1M4~26 _Xb"ڇ9|)Ux7 rM~67[߿>xe}˽ =/q-*cZ>[*蹶k==tn g{\}t[ƪish+rlOM9x趽=];izC,CMFG3T@][y5<]|Tύ@SP`!f{t .i$!_eV*ȣǭn5g}mvh9=Gw#b%&#eCޯ'ҝYQڙ}+`Bz|f<}OO{æ2#宷M_J| [?nVj>7.n8Q |Ƣ:C?+j~xq^V~#U4Ns*`!c2Da <\0<.}5a!ׁcK'|d4??{ݳг&U3.} ]azOW3~-XKǶxWy03.` ʽ n͌C-?Q`=Ϯ>a_OF6S%Exh"j"v/]c[fAlE\fА}l3u0{U_?\+<_ۜmsꙁ urdA/HGNKO(WTH8Le*'&/V8>0ΡY70p֯VVNt5.M5"aY/ɤO{CPO.<:Jj|'v69<J f>M;J֟tsS] 4`DGBDhYVIwȿ zu53to'g1 ÝXT оT_w(u"OUOwh`0ڜʮtL/+)ޓ%^DL;=p8 ~E$֗)3`iNqv-h[1XO̶ݸѧ;@a >)rRor0nmŘt.9x4aw/,FY#N`PLgO&uu1L²Q L":铩Lxsg!"+CUPE\LپPH_0t˝Q[ 惩}ހNW,L8ðoV{jLYSl p%TP7_д$~&}P79I''R5/ŝ7ăUY@L ;&Cl ٗ:5v}X}}e,M'@9j`>Cfj4v}ZPsqYBS+t'/>nV%Y rN1~PVס5tQ/C2,yY/Rgze9wzoZէI̭A#!>Vљgt3V+("77g] c9m`ف3j֙3anyY:pc=ߏ/twh'W24LuMX{epؽXj*Vםg]EoL"0RZ&U+=;e\*54uw?nΎf+(#:Dq0c (u |ڹd_`ށ_ %Of`gVgRgj!ޥg&ORzFyd}P#L1ݾ- r40x"~s$Tϻ L=!(ư(1;8s>=ݕ?s,)k2v}Zy0tpI-v&p5}.)LfhN3^S&E'Sa5d yxPRM-mNqԙTw&a F+oRK;чw8NՂ2ulC;Oq偮йkZOnZ7wx0{1m&aL+pciڊ &&3вpR։Q4ZfdZMgq6YD-/V Nz:g.gWZxgmߚx$KM1فe{~>׮UoSD :[h,R{XϞ=B9E0kkG[N:Xhr6\_NZpOwq/!jYZvi5>W7 ߁{G>A+EFuGs-, .)\ uUmmէ~3\TddS\4Zirr{̭ZB"Gy(Ew8j`H=í$MQ$g_, ϸDgY#:w-HkƳud7։.e8 = pa#.<)\ `e@Qby;b4lޗc&`t(0:ڣ;s{\=e|<8{ol2x}U:.zA%0ڽT[V#]Bf1E$ϡpuT8ڥ?NdYv.| )xқ)xk݆*b(\^y甾o'w5/Ef8X+J4}5Xp_r0}KD|{:;>O}3錿nKBh]wWͨc.|rߵq]AB7,чsY3yoeXZfWY,?ʼn/[,"}DIr B >.rB ?)>[A<"j_Mo!n?}gvA5Np3O[>+Ca[;{lj҇"~=nBAbib3>mįD%"_C5ķrq;Dчo%Q V+H彇DPgg"7 ?D|=95'ApTh>I!Ղ#@n#~v>RG|;!Q!ķj[Uz:įZ{"LSy)!J*!Equ?7ޢDByJ3?*C a*{H!쿗M] AwBχTw"~>?bw7!C_s<>yW)!j}^xE/ˤ~/_N+PW[:yJApA} A:ҷE D:Ҡ&F'}wo D|}&AJ?B}dЇ? E㳮UG"o%Da> ?%~ !3\_x FI| o$%~7!Ox;C{C!?Q|t|~돿HOJA?a9Ou8۠ ~ :FFDPʧ/ojgmR~݆.PW_~y?)w$]FB!2ÿE(~]?⣛s|#x_<'@xࡿ/J 볙"iyt۩kq:Cl!KBW}s +|ul~i"qulkȣEPwJB>&~ !ʷ_K2B#>!l"Mį$fא~-J: o'~NA|'!w[wM}~D%t~ϿTE_ėo9\"~{T*/&D GWy!__fy@ZB $t\#J' 8͂k~A5"~*ii $nTO䝄(M*3O#DG?8H-^G~7/!}ϵ_wC6?Hzy '~*~=/;'D@| wB'~ PzTzm4nQO'NB]_)FsE>_g_.C| Oqw7 A\<y#!!W "^"uK/!}R䭄^NzA\i^A| Jj-W_55Azy=@|v}J_y%!M/㛉_A:U6 ?įD ~ !;*KwxIY'V_l _.ėȫ ~&>!#*+FBGCį >%uO/!}|A䭄迟#~ w/!@E_Yx[Y?EN|!7 T"OE| !Ϸ_N}Zz hD_~$h>GįcOȿ(O ?~󯉟G D{ҟlЇ#\/UWч?ZE|!5DF|5d*= k a! |=ѨJE"o Bžj胟,卄t!xn##Z۞bWJ|E ~)L~fuIeDu_]D+  GU_bnm %hA(L͹&D,0?iέ5Ee/]J"B5E7z⑖ [Fd(o&>A՚>]5(ZE; <y ; .FBn5Dq݆}jwPx;пJ%D~k߯@~?opufA8+GCoQ֦w<ӹ?ѿ=觉Jϡȱ}?Fi'Yww>XM@`2Ϋ1W`N݇r K-$X(]m{z 6=|yyyS@ُòr=Rx۴moWW;&j2V]7}h›*V}|FȒa԰w3Ap"P9l=_w%y|O:]a? ,v-vu;h>1js4,G]ؐj |6'KSD`DؙفZ!0>wg@Q@x~(M}s~Y_8qF}}ܠw>/'pЍkZ%od*NdR0 55jhWm[/2Sbb|adE i6u q5$Y к}+]Ɗ~z nQpfN.rX-M. vm:=j:!h\{6ɤ` ] D;$UcaVZݨ7G3 (,A԰ΤA&߁O Tzbf,"V;ԯ]9bV3##xZ i#+L+ %346;Ͳ;kNLx3n嵡w;F}5p9=Tp#xǗg.7dѱ2p3e~ڃʑ8uMc1ת@; hqFZ|cu[]CHմ|+q[RmZ?羶/4̷/-Fm:x=tE9Jp=M1gBbyVֻ`9z }  yAG e9\v@e K )":YaYWnӎP_j ʗi$g"sN*qr\pgi'V[~%1R*W" "ǣ6PM}yh](\~k9>^\F/,xױǿ9+ߨ'd_a/ymrCqta.kD 6w,gT:3gu̧Oݓ>ާ;{ܘ@̩Y]^>w}09u6sULX6L FӪzwƼniW2;^M=8ЗL7+ad߮l+{lS;ο[ޮ-bcC 1aseKxaOP+muuֻWKשvM_mڝ溕n_@>+qo^nc߅7^6{1lë[Ce2~C"Ԫwɭ*FN]g7֯/@im>9=/L…D ^8:.GdjoM+b')ax-MJ=Vde NtV.$~ Zde CcV.?#;_ʣh_3ÿ/ķV]_aȿTzBoEw9}W߁v B_5q?6įķE~5!%jZBjA5Npo|L+ooe_;aM>)VD~>D7}z8 `y&B;.v>IjTNv|!ʷ+Dwݶ2gݾ7D%xZ~!`>2U_Cs5!Vx=Ǯ?B|!Wy3!e_ЇIW ׺[Z чoMOB?izoq?-&D w7S&A+{~azBz-'>y[/\,~޿W"~n#~ }$UQ/#c&c\A#P'ApoC o7! /f9􏽄5OӤ5r &>'򕄈Z~}9W 7_ч/Nr?򭄰}7-gin@ǷBaۆK} -l+ ?&YpO,gq-o%DT~}3 ?<gﭬ[1Wmuږ ;_ܖ$ͥ?x%UR/""Dc}w}u%v?G~YLjB$eiw>˨' gϤK(cdaaħ>ޛCJ?IǓ_FiB/࡯dY~^q ~%㺈peb_#Orߵ^_.۽V J ÿZ+q}VcHA B"*Au^zB_.HRs?>#my?W b}˧֤3\x@V[Eo]>Qp3FQF(<۩f_w|[ 6w ._{Qw %HG.C#.(!Y3lC|=!FA<_{HE}J0ÿo!}򵄰\y@#~ ["GD{}>!~r򝄰 чy M(c_EeO~~b7b~|<޻/4#;_/ ?-D{b>ITO!~!o'4)vAÿH! CL;wSCBw xeOH! _H/27^B_?L _%<࡯8HW|igYa:hxYK- {xi\B;|G~%zy_'~Abٻ+Ƿzgw/c ?nYZ2.Wj*ޛO!~!?K|Bp9uM%WB7 !BNp&w$w-E#Gy}W}D/գU"+%D|''?S$/\dyU/o\u_-/"2W߶|< Xǿy-!ҏD-gow-_IC>fA~ a!77 vXZ}P<^sn&ce~w!O&~/TpNOtenJ|{Ǘė b};~7J{Ǜa&[|nwg ~ =?#+ISj./kBY{ǩC?N[bd/rĈE^JM?P_{f6SXn+ a_)?z@Pר ""Dׇ~!ݽ۵|)!27_M Q2+mBԟZ3ȿrAݽ׵oC>o$~} o mqVx俍}]%G~o/\enA]?wH;  | -kTr&ϵ*=_!JGDPOG *jAh.zB5X񵂸?R ǩ{~?A+ ߧT:mW¿4|EoJ"_O? ȿ [}TYmh*e 3[Ah.zA;q]t9:y"D>?O7 5!_0_Cn#:BJ1?L4п0\OOo~N?+ED>_?җ 41Mt)rA?E| ݿA|9_q/Y/Q 1> e*=_Մy*ĠO|sJ/y !!BC5ĿʷǥV J9|R5"[L__#bo}_O|9!{{3U.!X>U`*}Nꬄ!9I}㷟"}[}]'s 3uy կn35E?W\/% "u%(߯oBNG6BͫrDO| ޘ?G#w"~DnB_?rA_Z_ߟ+«"w 6Y|?%JB?_%H_Ep~Ro}FB%yc$o'$KHbEN({l*ȿiėӥ}92>Įq$~پן+|q_Ƈ<O|OS?/krW| \Eo&~5H-2>ĖUחj|iK <)w"~PƇN){ 1U:W-w| ~ ZK$DJƇV5|=!ڧ1D7Ap+Wm[#m:D.?#~7!G+]c*klGH?!c#%C_q1!Ư6{Rm%x&9vNo-K_{oF# ַzRu{k1~$~9!wZzҿxNhko"pJS _c׫t  /]?*VbIWtA/%U:!e^NaՄ2\hS>i&6=߀J7|ΪtAo&~?Ґ ;>DٰJEPcސ? KWYs1~=Jx+?~wǯ_%ry@|!UzݩK Iė b|d*B)!TTza!L "Qn_E чFFJ/M^/4MĿڿTff_ J1U*UUWk_Fy- BOS "!zdG d}9׿FB o~F ~!ė .yJy%!/!D*B{_F~?UkBUȯ$?AaK1}D{E^NTa^ W">ҧ  ' t\sK>6W"D~dh"! 7-/-K}~Z>xe}9S1b!>~WhLolϵ][b{;mэORbKG;uo;ع6wXuڠ2MTzmE鯩=ݶkS@ YטcnHw_ q.n3Ҿ_w<)h< ®< kd?K\b#L@q&25rax/r]ŪF>S5zbfrϾmme/ok4:JF0DG_^b[cNzXkc%ڶnہ;Qپm1kƋw|1w >x9+n'Ԧ5ۘWãn7cX=<w 5aJዏ ͐~IA\ٯ?4ޯz:9ޗ`HGNKO(+mS';[]>dШٛܗ>>8b>Thٔ_1J쥎k|'Z M&ϤRv'5TW;_a%/dB+fjul&7_w'gRP'WVUw4`etG&+ =&Ctz`75~µVtj0} ~E$֗,ҫ03`iNqv-h[1\O̶ݸѧ;@a ?iے'"M^N BV!PAVCuU{Si5 .sG щȩPQ垦}xʣ'}9:` 3e j&}?[?;q4&>BmoT_Ɲ"yLcsW&bgҁHt[MAA-tq33gB+կ2j/A<:ۗ P|&u>Iɾ>EP:ڼÝ qj:SR] qUOfɸQ4.QN<n$/xW9u~M84RAeԖ +=FY)1MMf$FskTp=s.Fi>R{ۤO+1ݦ 20߄MN{󟓧Nwyȧf:5qUQku#vx_?j䆺mh钷#XZ]CFaUK&E?rqu=NIi}ǰl͹l9\OWW&?&E #Gp8]5Aeʣ_ %OԜ=:㸫>LJ3CwΕѦ,#:weعuE󈫚ٶ;30XX =@OWˡ%0ҡ Zi?&&ɬA5gRlĨ8=3{2ݧgL,"SS'=zy}}q [s*ؼH?ijASAFs|AOvb#VџGڵSm4őhu%`,'ͪ#S cI9# tBA҆ cW S V&Se|6KrdK;FNt$r[H-z+ZS_t7y6&|SE4揁^9D-{|\PYa8'gO^NXN9]ur>'Zjy۫_1!=Uk{̉Mcڃѻ*, G̜m%&YGlӹL:X]#ajǼ>Ǝ-oD!3wn:C]t-5TTs j_ͳPW:η%C ZneoS"X ‘hտVNx*h[E'DrAg4 43K. ioXf1X_{G'>ڃ2gl\M9nrM RlBZ7oDKy̫%,/5͏ܳJMs34d/Y7^73qܕ^[tn}So#^ȜDiE9t^J}79\;w [ƥVBOhť,%:^Dsn_Kwf^P^Az( 5|`.O2C6Z(?čq#rO/W܏X8ǝ5N~ğ2G?*ޏuֹFcO~zǯ)ƿ\7^DKM ~؟y,D@/yAPu+ql&\.ԧy?JTf:<ݗKsX}Iax(5FB;x\#|從n˗֩W>.|roVk ~!IBB,[AMrևs_$ʯ__I|`=ٟOn D=Ck$Y>ރW>Uė}J}W Gۨ3jG}X.!&D=(_ !^""c׮WVDÞkD W"Z_MB֩^k _ʯNp 61D7Mpo#NB}f(N;: 'IhlM|!g>ڇ"o&DttA"]7RS7|Ca[w}"$D\WIuTaዥ}}s&B1W}""o&DWߠ{_-vR; QT>$~QV&#D7w~$!XxZ,u D3=r<Ѿ/\,~vQ;E^I%Z_PV#_FG_MG_#C|XW ?TzGՄtD>?D1俆QZ/&~!/^.VB}rIk$> _ڿש/UUA@|\P/ߨқE&mЇ7L0AE0"vު 6 61ɿFB; k$}}SMZ_MCJBq*}MQS"o&D__MUH !χ_+^>.Mc*}?NfA*}J[ ?T3}wOyYCx}]l]9nBDZc'}[Ƨkl(|K KW}%^5D/$Wwfbe+ΞgZٟ ߦ`XLصrBY_DWZއ4"W"_ H>^jЇJ 둃"Ob>$Fo$D]EJA\_b=rG*)"O}:DӆG;@=C<*_CTiHGQn1!o'ADnW7}{ W PI| ֗O!~!Tb|JO7F"~ ڿg=NBksI!nC= +{~}eͯ~^q}jzrgZμ s?x_+VTzDD¿ .࡯8̕.\)|K烑?> ?E[V"$DK^W">>D| ſ>4sJY ǔ~Ԡ8 㢯JbA)~>$Ky)?d_#KU"#D|.DFA_R"os]/F|F⑿":Bkķ bJFB7B7o$}ߡD.[1>)(ICw|?"~!'*L]_A݂=7C_~AՂגE~!J6ÿ_' }] Gɿ^B %?S _ ӿS|!~Y/$}5_]&||#T/[U}(ZeЇW 6.yP+J>_F| ߏ^N|=t?wJDPƗ}7>%~3!+!M׷~Z"hA#C?F竴@%>e!?O5o7!/2??5?$˅׈n{SD>\u"OYAu_!Skh">@| w:O"_.[|8,UhU!?]_jέfB_K<}gB-?4^;%RET>EZj-0W| OWѶ}J|! -.eػAzUk."D|}A"Yu|&~=!s:"FԚ(zA%~ ևtNBCaǽTC'D"G$kE~5YGOߵ_'x+Yz@(볨ZSEo0L#$+.qB(񽄰L% DI#_GSRzL8@WcUJO  bOtj^7tѠ7DS_IBaェA+.z^ Ѿ7&AD~#!7?BSDOֿk?o|}>Z}hGFpQ³Ah_wZ+wQ\z]51c:@U@ @aMc!-X%'Nqj'Ns^zN{/͉yߙ;E=|?vnٹ]ʱj>?X%DJxb|yQ>b+HŊ+)}/ " #~xu Ty-!!{}M?=$*'D~+Dm޿7B3?VbB(Dxjω_ RZB/~)7}Wķ*''P6|~K|%dvB!O!}gɄ<-xC۷_D7~Q~8)?0_Zي|>H>~M_GDoP=RH|!_J%į'4#2;r^p~;o!;r&=NQG꿑I 'yD wI{B -Hdg)R_\y_oч/W)&]CӕTI?"ⳑ*%Deoч).$9o!Q!_f o!gU_$?)e&~!!Bk17cSy!Ot"}FEz("F _BW٢/U #BSDlEYa i|,d8/}Mm f*oRN4G֪|!/cqdE%~>jGE+zTREߦ|pʫ Q~!%j{) aR>߯|뷷Kx"wHE{'jB/&FO>/%>`GG2EߢPV~R>> !?J Ϳ.E?@b>wk|ɴOKE鿟9 |.!JE >Fs>oy/%DKYėB˖a. {Ea_-Ӿ&*#Dϲ#o_/S?ߔ-7bP>Ky!K+F'*_NZaįP$Hk ~~?ĿRZ Q>?S~/u~E2Bo&~b3o$N+ Q~q}wįR\M/a!?HE&~&?J/!D' oWXyᯔWI="?*OqO#@?j }?_Äyn:d ; ~T0Qy;V}z._H'Y;N!isNrń>Gۥ$ UBP>?Պmd"~ Mb/QSt*Ki-KhƯ*_<FW[xV}ӓ V\ <+#w_MiߛFimo#9HvWkVҷiHng#2$;WBE鿌YgKB }!k7XGrHU>"Qq=7]*@!ߥZ/HVCaZ_@|ֿ7"}ʛ9dEA¿#|>:,^¿?z / DsRM* F /n"RFo"{E@*v>F|"}E1ń'0-$<[&BiGArEI[Mz%lKp!DMZBÛ\K_D}N*/\.~O0%ȵήymz+۱U:oƶ=Zwnߴ]EDaCm{Ӿc[S{!ƍ_%:~{<;5!iFmv_38E\3z2T31yݱk[A90NRl f[ Qtl]uFؾЦ2++5#sGRq[won9kZ8#9\ XOG2gJ7Xs,^βYyVsI?*8;Pgx&|VMlD3~+TёLWduYuE"8vsrlVIl3#7d,m,S=ҩ=џf= n{^\th'7ئ7fGoGUo#Jq뗱e g!I8܇Ȝ'brx_GN`hr.HlǰTдcN?y'y'HOo0j$;;6p@hPCVgIP]o` ?J"?$(dGh C)?&*rA3~\ pk Qq׌e:6?=OKz zbq@;O:no "Cc7ԅցp+/*j:<{zWe@g*2'Сo10  # VO3yxϐ׬1|[0x/K͵bGDz;N#ݳ 5-@uصJЉG4 |mYVf ֛tuܟJk|[ F:{A++9sQ3ue%C'vSau. b0|e}7:;r$z*T{VMجI.G%jޢl<4Y_+NiٌV;S99!s% 玉ǜh-7 ](6'߮ד{ܿjXM&➽)|ߣ$ӓW d{K Z6;hzHot6ޞntj'N{^m\=`^cҶP+[rn[46kiy?li3ي \Y~w ]sKNԗ-[9),GCj\YVG awg!yN^is^ |)/XF<ls=ɶkk_.&&4ښ+8 8C:CrZ;U 9ZmtR4Chte9Z36UqƠp|m}E6;#uIo?<ݪ?͜KM??KlܐvfI=x*(g/7]QP/cp<[A6~v¼1m3 ۇU\~!{c`j'3#1)#|=|7dJ?Q IIȨfR_g)~%k@&-Km38s`~_ӥe}o΀ݝ_ɞ7/58#&HOy#ݝ"&҈e kI` #WҒ=c:KECQ16{[@='Ļb;ݒ&׈#pZ'̨&N Uwԩ6¿_a[zG_g<ŖZl3%ǽuy3ӡ^bStPzq3}vo,;{3lRƗen,1_/ZI_gWJ*1\'p,%n\r6KCu6zj Ceq1L1lҞ)uZ&a]ݽ^ArnIn1t 45F2}U Lh&.%.X6ers K\oM'b'ӈZr/Kqw[6 {m3c8zTs5~oLfO'Vs-œ:HmUHi*{M76*fHCe 8!zT5TɜDб$%T doHr1V+vッu'q;֕yusfƆDxoO&}Gﯩ5m$mڿ:i4ergM4!M}@H8BuqYua%Tkgq&4DiM*/ ﻮ]bs8ۍܼrIl~ )ͨ;v6 ;[vy#ug!8_`fJ %.+?.Q'W Tqt U~ _ ٢I>3Ϻy {13j^jָjGS>x]@LBo")}BB}ocbJT"}ӈ8[B gBQ{s"%}sFňA3iSLB_>#󈟥Ǽ@5}_@ mF& ʥsKCED PTBG/1_6U)o_°E L]|)}C&jBש?pg*b1'%âo$~"_iE啄%gч[R?ѿ<:B/O$AqޭnWReo#I$G f&DLB)ķ"O%~biM ϱ#O'B3$gqܵTE?$#*%ɢ}9TU^I-quOߠSW2B~kG'IqTBK>?@j<|N-< < įUD4UoXo$}YWUF}%~AD뛖eoW;o'}(ߓ}&D+D>{S~DABR<$'~jOI3'ߝo8.B .7wsK ''cp4HN!DW0b듉*$OWIc7cdBMux7\"Bo}*0Y>JJ71%ҷmd٢Om"D"]q kUVB}J{!ҷ7)r9)Ͽ?يMw|>!; iwuNE|!wB𒏼ˈߨP?gQHqKڟ3Ou|?]ӻsdf;/ZK3w ч.KU5an*b5NB|zuǠ>I~;'aIч[ד! U3-@ *6'$&|!Օ"D,v>⿅݊? |?!}ؿ?BߓOaCM0Y=i迟E E?'gKQ!~"o"~!!\k_BLq5鿐_D:E?({Hs7s2 9O#D oVt'WJx9_%}ė*r Sy%!}%~H"7YʇLB' }[%IE#~"oN' !N[~|!7DG|"g|-?>D6E_E%|XGU}M'~*_>IWSZgTA_-3VϩZB!9{~H1BϗR,GoyNK[y%L-m_vRW$DQ2>O&T˺#bW:$_l,1Պd_*_Lhx+Yl>O'~)7u'YL p,gٖS4\/W_RO&T|?ƇYa B_ZWjϗ6_oчZ~E HEo$x_D_BR~KH_/%Dj"vZ(}'7|5!wE>o&X5s7XxoP|6C'7)y x/"UfίR' #$~/%}>?4|YDrBW=/$D_XO@G|#eN1iQMpg)v>**"&}$VB.&VW% ߧ&BO'uI8Մx>?BZud_ւש|=!}ؿR?hS{|&}5adʧ0;.!D|}*2. */w'F+uȬME Q?7SYBY'~A_op(IģoU}SU /SQDi/!DzT*Bϐ<>w'-h$~"TsB]yK_Ϸ?o^k|z"7v_Fo!Ƈ o]Z S?/JSa㟯pEx߫$F5WKxE_C|"Ӥ^ń^'}=Ka }ҷ&Kx}VK2_ܛLGU>.g(2%W  #}%sp^O UAKE?@|">(*o"D?$}0y SjBGCacy~IB|YӖy ~!Kt'FD|Qƒ*)1Ǘ$|Ϣ=H''k& M_M/!F-k>f)wZ]N#{g}^&E/'~&!g o[xO ѾXG{S\' 5e_0!S Q>%\gG/ Dt_A9"ᨅ_Iƒ>_ Z#|zUdoa,T LS1?V"x_O x!&'Zx?Q͜}2!$K5o/\_Dx_i/UAzy!Lg)ȳ$ܣrB&~>7s{P"竼0MGy^hG7+;%[G чw[?J_&&}i?CIJlk_#~!lj/'D|hpw?-}co"k ??->?@|!9 _Py=!y _o DFBe _&E?|Œ>z>a8/ Q߰b8~"&~)!=K y`fi?gO%D9ӝ|h_a~I<+M|BÛo70XZ~/aOW?-(2BOZ>yH_$ 1Yao*BߕoVf'3G#E(8JFo#_ؔo6ͷj?*}+W'N K}/ P/Z(X ?q}/&~b+/跒pљ*_GC<+^B3^|Η0բ'@$o!DL0٢ߪ_hN)};^dҟJ巓PǏ4[LK FgP\ 1 1CZ{SK+}_FUgAt!CR>#Jdޢ􅋶 !O#W)v:#}]E#}eŢ'De.mRBE+,DQnܢM+(}?-[#DYM>JCYƟH[/!MySlp3E:~FaݮeWZ7*C_Q 4u)$Q*BE,-^.WFBˉo#}*DK_=`GWVߢPC\-t#į$}qHQW)17SrO?ń!~&p|+!W?QUqL°ECr?dѿޥ}_A+ ѾOHx+=)&_EQ“-HM"Do_ME­}<~=Ѣ׭k 1~f_ETuCfaiK}T}?XYo#}wQ'D=&/\*P!DYC c1kw?ICo½[U> Jx+Z_~L嵊ؿz~'9B1U*BG(?JXjB'$|JkQE?EZōOK1>!K$|AQ~ч/X(b`>L(߯Jʯ$D~M,WCC*|TGTGn>ϒ?~@7)'ڿV oG/-<'"oǾ:x 7Q>wRvRG>xRgu/>|_k= |bo=nتuc۞CwoڎC'q{󡶽i֭߱PTTVXTƩK鯒{vZc=8st!& PVr_3[-q 肥6c׶֭sa$'֓5mE*n8-X]NKGoGq{5[Z7m=wڴqOѦfr [njI=X&'Yr[won9k2 cnK4Wntc$'A&}9#g㉡r UFyoGŹF3YgM?.&e^3HEEU]w۶mܾ'?z~fTN{4S?300]?皃[V=#eDU~6M3Ltņވ1XdPUX݄M2֯N;Ewn\jKc8 %kV qar0:v#F~#ƙicOhTi1폌!͸orKўNWH[#I}b{.;k[N d5T񌷑|,?NvrNN%x`Z(w v^,OМ݄}ğT--> QD-[jN5_Ag`3܌y}ࡡ1Z*5&t4v0ɬ9 B <3UȘVdcCu :zzBF0Z%~@7̅(=]{7c όЪRmHtH?ן0<$FS_EM -m`H]]0lld4hbRr^F%-YEu'Vm݁B/`Z_^2tpB'08[G-2"**6^R7̽#ͺr)1@M L dWfBB=i܀7ڟ}MZ w46 K+ĺc>n(}]Kw b_LX_*W~Xw#X$`W#movr$I-qS&bԹzVu7N2T˦Kg-[m-9oܶ{0 䂇,&yv;` eVOS.}EalHG ÒF(kȴFqʶ-9d ptp,=_M9sWwouJ`xQy2] N='I~`}hok7ޑqi8U2g\I˺uZr7YBj>#zhΨ [ʡzӓ&ui#ؙ;¡O@ۦy]$/{ ]Gz;N< )mp9 Tshi548xls͜gxfV1W-vAَ2/R MGr1I4xo/=tbK:hMr)tݞy ~5Vʮ)QGhdaNݎlֶ;4Esx;*, Y+5tx`<锥Mh|Z;;vtPT%.3EG4k 7x7f:<ꆔ;tL"Y`PnIv9{DO%[sߞH=x<#f66Ջr nT{V c>`z"B+Dbp^Oտ'Ԫ OQLy8PI#ɄɧSRtPW@R cī K|x=i8W6%~<G%~^"Yk)9ܿMXwW=W3rM2M+EKM j,YKij:Ak`\1Q\#rѻ[G׭6y['5nК4Oi+KJF҅eS[z'RJFvL[z+]oz'D3>J%sQfmg!J|Lz~ޯ)SZ(z.\_߽; ߯cM{s9nٓz}RSO7 XZf +5spLdBN  |i$lܫ6ap^ov1#Ghi2{vV%9n\4Ws0qsÜ2Eא^^%˵˒MrLZd&P8m -\顿MJGh R,ue d3RHH.-\ﲜSK5Nn+jZ1ؠ w]V"_Z]YV]1oॎorRto<|yk~zIUÌA^:[ذ-~kQv~ʛ?*NN9#kR^7fkSs]gɣtOXærW6:9 bQ_ Χ߬pRϊ•hB'ybcKVy;e0}#jqj;Í;-^.SStIo;;doxʗes/ ,o?nGrTeiƕLiʗ&?yȎoxSվ%} f7d:V锿9oBn[lMyx% xV$[,EB6Rt@?.  ~?A??Bb6K"nTw2x_nj#>7 !}LHx}k s- _#CI:SE=hgېmR%Bo%|%s.F eF5qS/$RIDŽ|^OV$E3;5{ (;$\qh5'KR`޼N5j6f*sFU1DZbeexl~,O۞QLyfir6 eڬYYUPj *%&kғ4&h(_o\#I373ILUL/%xyDMdM'އ1u>NU oWے} A}d6>B(IJA{&ָ,JY6+^:rLfh{ML"/$3Ś%A,ĝAN`0s'H2)KE;wn ;>ϟbd!9_&!΄ym}oXNRJB@7Xaxl'裀< 驘g?5|T|W-W>wƋߤg"}XNDv"}#}8&8o*iP|uG3H!?Smߥo.3]y*Iz,#󈟥ǔK5WQj Q~8ޛuxP~u!DSkpn\CC} S[B|!ҷ eG_jVZB}oĿ_+!wZ~ny巎FBzLݷ| !lm#m/Ul丿(ԼQ~~%o!DmSH˯W~HEbBn {Uq#{_2 TJʧ?n!~"7Ɨ VU)olGo%L6 $J2P~OQ'6!*~X3|)Y*$DB }o8LcS}7Xy[o|"f1g9~ߧ$ܯ}ZŸ-HQ3Py%!g%Ѣ_爯'FE K*o"D(w}K/Wl!JW%ʢ_!~ !Jᾥ&~3:}C7-<zȒ~/q]7~GVEƿKT~>/Uc D~B~ū|*gCo8ՄIph?lo8Ld1O!Dʣ_}a7ST>I5y?x )y;x7\b~o9rϯ*,y㈟JwcKyRyORy)Oy_F맼 #D. ~>!'_XMSUl$/"4(.#7B&+Wl[?5~vBEq#~;=w"cfh"Si}j}*J"~Mڥ|"K]ժ|!2Xlwr0_AC^c>+ Q>!`_5a\F_Rki.O|5oʗ|W[a9K Q>y+U+G:i:OJykUΈ_k-[Kz*VB`Oߨy7#m5oAߥΓwE7?KWt6W~eNۢۈ&D/۩(!?=2\ _F?gx/-OS]NWyw ~"7S~B<._NZa'DG *$#!j:o@u/R\F3}*o"sSƂH_W~>/K_ !k[ɾ?^>#뉟BOn<': %o#7??Iym?$D?ي3COT>/P3#D$I~"&~b+EzBK>KFEdnwYxH|b~B ?:K}QC=O#^ StEDT_*5}eW(M{W}%:_Ck +WP^ULyw[aįTMޢu7[ߠ'*J{>ÒĿo!⟬^R_y!U)ogY>2E>,NG@G$|ڢ%AϏIʛQ>чOXo"Ӗ3Y*)sLS /JxPQ>_>?HlE_}YWU>}*|CC*#D3D;Z~ӝG%m@Gٯ͜sk/R fkb Q%{ ?HE0Պ--&DR~W屶Di?CYx/ҟC?,'"My ̏|&OywE_ot=_7kBj BaZUdD[a\>GMd*/чoV})*?B/}؟b#O?JOWk٩?x_sXxSy?Ue/%SFB? +~/_mG- RISFU*%DLXnч*~i 5*'D-/~ Z Mm,<7"BcpQk8/ QK-Gg !H*KxR~?K{ ޯQ.6 w#dYmضP훶E͇n_}C[ct#q{:ĸRd]ؾ{g汴3Z)kLr(+KlYoAB`& ;vmkݺ;h;I|l_-HM緷 xM(|_3R}l|"2DjEN8[lܺ{WP#Q' ]* 3,Z4D*JqCqc4ڬ(wƺ+qI]#vҺ z݇6mܓER"dRޣқg)+a}N#(vcUVWa_wgdbRsald(~, 7o\Z "޻>9[6ǕMs! [:_8.π:uJOZ: @m㓘myc`;ct2G|a[mnR!թ6Y~=s)J~y@bǠS6z ,ϧ|smfݏ~ yFMH:JOfJ &y"@ | KDvn,>vǬtXq^>鴃ӫ/߰ K쁹L.$0+ơRyC?Td姒V3J'66`?0 WU+; nUC+#ԡ|_WV%9kOSףƍIwNmG7HR1tj^'},%dk 2Nh֐ZEXICQ j]*L бpw:ނSI XnlEW:|8INRN;@ ]ϥm9ỏLsԗ$[NNkI9rrR,lgs)g)WOtI '^903y?$\4{4s?gczQH'COFjKWc(mu)]ҽwC+韛hwcĒy11LLsd іĬ;"q帮yg@_xlS3gG)z~Ȟ9$fsP"vamzSzĆANHTc1mGͻz:1|c51R6&8•i-rW1;괝UMUO]ɓCXv,J8X%8L(q1ۣ~j7?AqWPrc>My||2驈=P٨|I=J͇5nZwBHDg+S@Q'(H߅!Hd#NQ?F :Y%!Dg*uBiH_?ٓy*I+s/pB9(zcι 5U"D-ӧRl!Dv%5[{G I%wy>ĿVB?l%C:B Q]O#DljXt~=J}w_C|9!MB_G|!{rG z|-O|QbBo(A_E'~QV}7GA(N?J4ٯ/Xyý ?ïm} ?U/O:Gq3N;ɣX{sQoot&=n̯o&?J|"8@#_LDZDq'ḧ́N=nί"~%!ڗL{,< A"Dz/-NQt ~ '5?`I?VEQ%'(8s| !}oSM4{ \J*8q~{ ~7! !A7`p;o@VM9S,fc?G{OTHϕǼ < '7s_ܯ':֣ޜ??0ӝQo(QSF^JOėb~g"!~>!+Qo߉_H_zsE"B?B'pԛy(+Qo-8J'x[vBGz+$~; oSZq ,EcNAL5xϾ7|gAھG NrGQ>C$+a_rŎ(8cJ>_L|5jN5NqvG|I͵#}_Bs,KH.o)!'F|"&_EZqoF_q@ ~!WZ7~o#!_M&v/}9N0!LY뉟BQB􉯤~ʛgRv$D5?[<{99.*!OXm![M|"yko"~++[I= 77QEfQmNDB0O{^7͏'k}%Û8.m#~IЇė+bg58٭/QBa7u]GRB!ϒ 5>4;H,a*K1¿N8|"ٟѢqg)#G$\rB8n0?_w[i*q M\G|>?Kweh+߽N>#YIx=3!o! 1K(q!7uYCQk /Yc%29dB>$I=Sɯ4:ɾ_w'31=Y3=IM|B?!~!.+ Qw;*B9(_XyBJbBϋ,(?Mgzˈy93q1_G yJҟCJy}{?q LBqy}MRD%U [_];U~ !!NKx*vB P$%@e?ė|>FBOH+1}R,(O_I%|F嵄N8>:B{Ԡ"8Q~} Hh/pܣ daK烖q*1!k#G ~"y~=eHYा}¥?^5G msRچM%t6/QBQBz,,j;0Cɇ8ùSZ/?:GSEFdr{3d;Lrd8wDʹ#M27 G`il4Y8q@7NJ/si;t"ׇGɹNXLuw̟29\$3rbH0cwZHCx9 ɗ]sG+9)GAv3oۏLܝrnDQwߞx<>?*v;R{Ž'hsW9(!ɝ=-䞓zZN.Jp[lj㽉*p&)n8 G-d;H[3*Oq7/Ι;v2w@޹eJWK:Զ|;l,d)K}(3 m)ir}d?D0,vSV3u]m/`S)KZ1hz~hcLmncPX9DUMLMT?CunRy2Ӌ-Lsgr(

bN]^K0V/^m\r|@g%\V( y%ύ]OmzD?07CɄgٚ01wTQ 9ƥ+~$k;IR0%>4 Ę1'ս/Q7d'FV˫D*"OoXet]w3z؇w] ru jzt|Dԛc8D髼3Uk" >cǦKF'fU{94󇛵tTVc_'+渗EFVi"*:O;St'e1P%לzMY3wIMl?G7R">OD2&]Iϔerjj`x_LސbrJDX۵-̠ToKD0#8>ӵU&#}AU\Y˦ $]v["#& G~{s|IsȖp%#!4cRRp^w,`2NFt>.yYǀ 2xE|%5;$٨IsZR5wR:;S9^>ýVc cړ$4IYo|$gFrIO,(?Kmz[ګ#iָ,9@̯L@`|[n1xMt0}ajُ9T IؿrQa SX. EnM16Jn̿D^FIzx{ԘJU醞oٝ!h 09vy-eCJ>t< &4:Sk:;]e[PfMFkl\P,M4DB%Q{ʲ2HΎtwaFJF-3,g?+ R#2˸ձloԓ.U*["=aXcM,iMFMгtTLUUHU-K r+ g4hZEgY62kxbPkUiW_ږCfiںg=؎*Ѽj2쓈JvU“b'Ol~ ub7ew2 Y W\q :eJ]dab}LȸaMejO)n"KuNcB XβEۉĔ1]w[Fp*kvֺ:MP6xXjMZȴѝ=}&Jnc+% n=m`ؐګ[ʼ!S6j׸Y.&&kb&N/bn>->>(E(U!]ë˙ϲ"-EQL??Ӟ!⽲xXٺGe(zt2 twvϾ'K.%K$6nWgBٞQ= T|sҼ$R }hE ˅iSgT{/_JBQ'y,U!DS1/lUy5!}- SZ_J#[gDݲ aEH Ti| !S>_B<ʱofB}ffwRm!D/UI^OFBe/vR`7+Tc#Wߤ㕎{f_o%o\'ίCj_GowQ'D:3ܻo$D\KbBuzUc^>aG{_JTч*^C͋UMчuZB?Z@\/!zQO"~beU^F}2-S/'DJBA|!N|BҿZBÛ>I|"MY?qqgbB9/Uڤį"D&~>qa6 #/ ~#7g 3BLO ¿&:3gD<@ǽOSex~*Ɣ7R=ٯ2 *;9Ś >ևWZgU_M{9gcc:=g*be֗w㤞nF= nMNӀ>쿙*E}o![oP!qg#_90q4&ۉo 7ܷU'kwJm>s~Tqi##BN!!AKxQw$Ϡo}E_B8:!_J$#ʗf MN|Xwgԛd/! {z}bkW|~#K-,wR7o~pfķ&~3<]6K}?g`E{'e<~IGCEuWO9sHjU4~'_G//EZ'.P2BM_r>W@|g✸" }~焁_73l'-H8>?Մ3'| 6}؟`gl#k ͻR?u?.&~!c*-3'F ~Jl/#DOq?9L?cWj_N !?_ \{ lU&~"'2sfBIF>_KJB3<˃Uh ķ(&{Eؒ~_B|*&QˉDQ C[}o%wSV[C劘]+#VO_gn??BIC_ ':wF6u[O%?&93RJ_8ȧ8úۢNhM"kstB>CkJ]srBo}I_wH啄Ba%JS>:-]W}&n_|Ub/\b/"D|~A'Sۼ뉟F}Efsqotg'Hi DD|Ο78sB=QmNsxo^:s`(ۈS}'9sREbly4Nq}oW|J|"&Ot'yv:sG>:H~g9~}6؟3s{\7? чZ) Q>/Pa{9 BB^k/!{)(;S܁?ˢFEẍ́^M*'55N| !Z Yz'qNvBJh}8;o$~b;E/gl#} Qo_Qm!-wl%-%M?X/3?1M1=د'LO8F^I8'9"J/>M|!~a8se_>=@rJ_C}VE?L|I—UaGL|"8s̈́ϯ,s&o !?dXOur@*F?|:!Gt+4EglT}gė)b~fW¿~A|b-~:BϿ[>kXy-;Ka*#ӈ7v̈́Y+}_%g+q$>??T>wѿ ~bo?jB$ǢPۢ_GWyb꛽G_uJ<7jot=~ʤ|>o.We% $|5_|Ť~BmY[ o'iᾕO[/VlEj?ҧ/}ɟrBԏ7ܢӉH'_|4ʫ u?3Dg_H|嗪|!#[ʗZ378o|hc8_8)E}_H|!2s}د#Qi*_W)b^%|1RW-K?I:o!?9k)V|!ڇ;,HJ7*2_*ߢCLېoj+^J%M*E}o%t%_gѧqoV~B¾9?B&ⷓ>T~WKVK_EC_vZ3S}OyC_8o~7›20Y*7I>pX ~;$ag(bmo's ~/UO\Q's$D;J|b=Z _ }*_E G,K ?S ǕǾ4x ؿ.w·׿Q9*x('k'|:Nn#I#Dn'~>!BB?Jjҿ:񵊍'L(.#gDBq?BMKHķBoQF/"~;!ϋI{7ǹ3' R _RTBˈFa%I?F^J o;n9] Dj Uy%!5!ZKĿWMh◾ >+57Kxʗ|"}+K Q>ov/#o'~"/]ޣ(w{,[KZ ad*s{kM|Dǜ '9/XacRKʫQE?I|5!) |!!!%?`?_bῤONHʱv_>ي(KxHU(?Ik7_7M<.O*o"D~%|W+>KJB|! DHjEmO_OOߨßI7~eG~Ad+JBϯTq7?|!CMdLyx>ag 0o߉/UkgQy"bj'پE|)_H ѾM"E)/#D<O_J.P~G~l JԽ-"[aيE5FVO<(6&'2#~"*_Dc)H"C$W¾"įQls/2MEfVJu庍P\>7{^ҟK黌#~"L!_NՊ>HʻcʢWW&nү]KCC>_A<0银Ybl-}_B<8_~"U^D_F|"'욈G%D_J%T:B?_OWK8 }?L<?Gտ(=@OHc_Iݢ=c+a@Պ_}(rO<pTufEA *@ Go$$Ty!чo"%9N>D|b%Zx(Ov`r|R§U>) I[-EيWa yҟjῠPyPWT>e _WI_sg;g(#oHxC?K˧Fycߕ_N[@$EL' oW/T^ߦ|~H<ָdG~JB~fG?!JԢ_K?M7)&}fnk/obNxZxU͜e2!7\WYGy巍k-uSgS*s-*GXa1xUGD2~JXeчe7(2闾*BM(!,g~  ߪb;)_T|"ڦNn}o#~"'&$lv϶ bz^B|vg^FB)FPGQN>NJEڟ%Dp)i"Ge*o' G?_a-Q oWIIS Q?$CpX1BO.>wRŅdӢO.ڭZE/Nq~韏HFQ?G)!,|7V\KNB)b~dw}%~"?1'a@;Q;wQIRnB`>YM3wI |ʧ|H4Bnpʧ;wQI]1B[ۉ/U SOTWOOBB|XNk ?Kx<$c=GsU>S_}%}\n<%<_儨IϢ'j<]EӋ$ܣE^C{-k^.*o%DB-H+_HWIxʷ^koQ6Bc_<wF o&IR$>3m_MNܾ-* Y;G##}/Q>~ lBS> .ǜ;?>JfB_&~%!fakuK ULBV 1E?K"_HE%ߢ]_ؚ_go%|J:B? "sJ/0Dk5γ#8Z?JWv_`"kL"~"\(""%\lG/"~dER`wY0݄/k*C[}?~6^Byll꧌B<(QL,P&Bԏ}}(n%}?7mڿTQ+%5iڢA&}+XrE<_2mKz;- E]@Ʋ&)pKo:`#~ ˉ_[J#5#įWgUBD:>%~+!ZٿQ"%2B_Jf>⿄ aݢ9o#DB|n_wjXAnҗuR!}YE_Cʲ )r'9CG|_ Dx~p#|!@>?HFE߫%V6BW.>&~;!wZip^v"qw*^#Z#D%X_AY JߕhW2?c}pnKxEo B 7NIq##~ Vy !įVDEU~ ! !ķ+$Od_J]S-dwS,|p^v"O#~~ TBN ϶#ge?HϦ]E+e>*o7 ^$Vi/>>C|LQI{%Lؿ ^B|"'_|)!ˉ<=/xW!Uķ*^vB$Ѣ'~3!7R"o"~"*>!D&}{ a}w!;XihU Jg)V|>$}0sa#>~{/>eч#4 OXxK MfnIKYSėB3U:+y/Nߠ@|HpV*B/_"k/_'6h_G_!~"/_M}|#DI|6t ]m?7& }'|&!RkJ_<6Ϗ$Ԣd'zWN껓x>e~Fy*CTb> aQwO }  -7}B<xϧX*}MmNͅ2Yxש&"}78nF~/ ~_%*7x_O#4 W?Cci܅2W*l"oE[GBo=1'jÛ+RIWj[*B/6 M(֑~;?6Hhxa<[OXTSst =}NK~7s*"DpEw_MZ2/$_ Ya2kC卄&~/"D_IbEݿ3RjB?C&}Tkķ*bݤOƒ£*@<Z旆 =[[>/<&aHipP,?D|I~ð*$'z Q~7_C}Rkݴ&ƍm{nQlEoGo!>=A­*$Dw[aV&6 }ؿ:Bwwߨks'MI E$<#g~ !9nK3|݋$ܣ<{Ya(:^b}_ߡ'W K3`pg"&~"ڗ{"zW"IxE{=Պo&?oO@o#~N! ý7Qo;w U3 Q~"~F;ޫ,{)S|">nч_AaWb~}0U%}U/\*_Hh'O_KM殅)ү#}Rؿ 'HfM"܄ϗ$|YscN|P?-Hߗ/SW$|M _w>BZBo!{}&uo}%~Gk _/"P,<_3 Py"?~oG ~!R¯UBU>Մ%}N/(%IK_~#[/a0|bI}2E<3y*_@$)dWF+;y(_BTk "!%~"/$E%*@!_B|"=+/a ч  ?v+;?d -E2-4i~R$s"'Y$s}؟IJ/cnW+b~`t%Ee}؟C|"R&E*'_>Zg̒_ (+~(WR&E5*+eUޢ5ėj/<ի|!ڿ䵨բė+bj a+>CaUM.jRbB>7Dqf7чfKMķPjK ?տ;1 [kS~[Cߚ=ԩ[*uT K痫`_+\奄Weчˉ/S}Ty%!_!j>_I|"7_=B}?h׆WKoQ/?¥yW f*Ɯdh_gчė)r*$DZaUudޤzBؿQ³, %o&72*zXaM7*}W.7b~V+%ovb~}_>;]T~Y;K+|ga}?P۟É>K,Ei?_h#e/$D@|b=B_Dhx3}Exӯ^wB$|CsKE KL7%|KU($"ZoK?|GYa7*.%߳/\Uo"DNB$'*_O!HO&}?@6EZoUNM>y1G𥉉7H[T>[٢#>O*$*B_M5hޔS_QlE)Z5Fc4/,P_/aE#W) &P D #).p a\>G|"P<&B/ ~"P"~bOgXxϱg>TIyXT>+mQ3 VSH }䯊jEoר0Dk,i8/ @ Ϳ."BߊX w§+ K$|E3 Q~KH/X]\s /mxE_N|LK-^Bqu}_I|!K_PZ啄:?(n чWBՒ>zpśT0]_'57ZxHu6K&Ko&'-7?/:of*[ |bI;%lG.%L_(%awKѢ{!DJ\嵄:-LA>_N|!p W:Hk ~2~'K#Qy"P|TBE_C*Bp[Q׆uį&~%}iU3@ZB1 I"~)пg! C+/7kpDy?&BG-7 rBg_2'G@c>xT /\b}~ ƨ#{*/%DW¯,=y$@啄} ?RDf~BBaǖy~3_-!R>>QSj<'c^U?gݿSA?T>W1$ǿ;NIEA<7//#W)6P*o$D}Ŋ~(,P$?D_@//ZK%)@sR XaK1HLp+J&Iɢ_HW2YHWrQ>OQJʮDҒ#*o DgHhe<-I"BoK?7^U"eZbvFVkWy"oߤaE7FTR%*_B_(YlчJĔA~5/#D/$~9!GʤA+Q!?nߋ-R! b(UrkQ+U[%T+%#}_BkFK Q~Ca%~_J6p_AjF Io/o"弚G֚%[TPw%%\jч-į%P_%Ba%V+\u?vF-a=_N[m3AHC*?P_%ʣNퟍOoQz_<,jBÛ:k1>->/"DpE#~"|oƖ C}?F|?hѧ+y[K;lZҿʯ' x1O~ݠA*I*$mч'_H%쿍*Ez~Wrwv ;oP;-<*_Jͻ_F=7)_'*o!!H"}]MK`7*o%|Vs/[aė*V$|^Մy.|Nƒ}<5 d d%}/kݤAzkي~]%ڢ >3}~S·T>! _XK謁;!]1Xx _IO$L~~f)?7\J?|"_2{ϳHwK'/ Q)> EzBB| J_%ʛ EW*RM?T}%~z~o8/ aߖφ /K-4P I7ޢQ%o %*/%+чK 7n)w> q$LTBB [Dk?e>Id/&D/ чɖip^XiZOP d7C?qq1jCL?bj;n1~ߪrWE B?U?KQOqRT^N!~>ї[G|%!ʿA"WvXQ>Vd[lgZB[LYj)?oR6S$~!g3>e.;ng~d.:J>ҷYh[+a"!ZEߏ(a[a-D7rD7KتKaK>oUI?Md]*_N..WVBBar_C_Or߯?{53u|K/nWy!0ѿt_N"~! ר蛼pEw 6pk k%hч눯#D{$pEo DߨDŽ0F_Ƭq!Ȓ_O_ER~?HBDjB ['93oWԲ۷]y:>7hXipTjhΪ4ʌ9KuHI`m[J , 4,zFn4|2(Qo37?< iu &|ǫ4>FX.vƤq_汛JBg5͊n͝ssEXcX25s3d+d}oŅxO*t/[s ³c*-Ӳx4vsqǍ }Eۘy ^fZX ;eodYg Wv3瞠f7<1xo03,Q1.)3QX6srУ|׋gΉe{:twv wc|ٮQߔ15:;z!uu w1tXJ<3TX;I B^w7>E~?譾^sns2;9 ʶu=ޛh RhG.>r?y'y'HOo0j%p(1y_$-4ky7>OfnӁ("ч{,ZH8?qls3:; ŏUP',del@:S4%CuG:su2lN²AZWP~D)- 5Q{<S* /%/uC79..uOGg@'gލB{Pȹ`ey J=;>czxWX!!`d˳?مM)2eX'.?v⓹<We49D3G3%C'+xA(j;,CgHK'7Cht$8ںcPQ_3''c0l&ay>)rl>29 8P 8Hsdq)8o@;==9ocDs?Iԧa;HneOqC"ýy>Kv G6qA/j#Dnglrs 5#=VO`=.2Yy=qˠ0e~Xw:#mv֮4O2XƤFeFm{vEDLЯ,)ו-34Mւ˾,1l&g,YGf < Q zq܀ڥ_o>*>t| |7y@~+3Ny8(R cIC=|jD/fel8J,P,D˔WFtȑ|jMK yqѐmi'րYZH/od@ vjc khdvbyE +UHU6P1 tMX1. %.{8Ywx#VЈ#*D3 Yx_㡻#:]%m#Dt a\aObF$8uLAGHͷ+؀Rx*xç#'wD&^3PlO6;sxhy޹yqlwnlwfjAIСpȐD(+=^/ >:+VJ#fBvFG'zM;d?- 7Cd ̼^Zdv颮4sҡ=?̭2lZLf&Rf?G M:*2:P"gN3oI3t7S)d5g˨]x0; W>#oHB.Hk+ԞV(W9G ݜ(?<͇":q4y_ 'mgMIٺGezǬ^cX[c`\$ 1~O'n S`~"?m#ih3HـR"_b/"9ySoy )7 v@W"-#I;g;qz~kV|~{Ogw]0  7E^SP|*T{VMwNPr:Ij{HŔ纁sF O%Ciz:4\}%^MXM\↙*anQ1)^ k&ZfuY֜s !zi^u| :lyRY߅'z5hf z$G| L!S{ztȞzJ R{Yp{ea<{@ͥZi`x@4g-˕OS%2V"Q1k̈́Ԝ4`p^ѿluZ2Ls:C-<ׇcv8Nrqv+IVE m-#ŻRZK˨?;ɟVe06uׇZҳ(MӶ[aؘ&sI:[]︭vWl!lNכz ]omt= <_v܆jKIX UjZ2Gߥ9[-SK2,g ^rZ uwyV%z=?g ԒK{AV+Ԓz]jZuRg,Guj S179NrSgO׼gw7CL@P"bG / 9ԸN1l-9#<޻єOF> Xn#4cӷ۔PIo7(pd> GC[ [9{ ݪ56jZ2O-9[] ^W߫sF-JҿluZ2x^_jZ2خI_:d0q{ݘRe<'^6v5B|7~\׋kҶcFg[AR01_JY#ۻ6(<̤yQtL>C鰎4 {#Tب&S(mc3W\;ZlUl?d"t1}]o^OVzh/5w{#fǝGmݐUI]oue9ZR\Kn~d_#1OQɟ{#w'R6~b̜SR}xw&y 6I-J8c[sv 3-o|osCV%z]otrzZ1a  I.Ge5~)P/nX 31`{M8df͚lU`$S_Dޑst܅^{.v1{$)#4['o-ӐJ'/A 9ʥ~uzN4gԒvn׿wluZ2XQKr{Ϙ%Z⣮K`ĞYԎɳylOqJ)292/3,[g80ٽ,Klwoʬ%$Ǽs\FdI~]q jq?MC8t}56RQzK63\TbYワw#v+ j_ZopCVO%" 7hZ2ZW'szZ2ؠ 9[I-\$g 9ZY-\szZ2/[>A-1sCNm,-cP0byj3W\Zy 9Z= a7hS-]!t^V un8=aY!L:AtNL6[ .;sZA vR\T-\q[#vͳfS#a#ݕs ՙN2nd!GGՒz'Ep 9ZF--k0~8-, fnG"{\\bi²HNrVNmL,ǤϏ9z D˹tD\+%mzݦluX-{xL:CG1ϕNgF\PxR_Hį4_E ڰ4xk% ±\K0J_[*TWpiWzǂ7M氎@O&aa~`o֪2j g_*kReIHgM'hmR+Ә|dy:]j{em!GKm63VN5H߷j"ݲ|-Riৈ)T/N~oI )# Wj,<ȮK36fh<&ޥH˞r><18FG0{˹z9 R.:.xP]&N_tTb&:xOpwg_|ϰN?zSKu{#t$>*GGmwvbDkU<R.\٘$3)d!{+ONz}"4gĆט2I@j[*TB#6.?1 Vѩt3XcC*IȱƚXDDYn#dlM c/ W I|5nSo QsI]S5h&bu*cv|H>);3ż";xx9,6W5IޓB@_cчB.>z3_9+"~z*&?SFa[V}<ﱧI$D&?8SwMHdTlfY.rmɖ"W0Ym,I6v @h I B:@ )$$!!# fuBO͛7evKɿ)d~L ЇӄOwÿ, _69ɿR-Cr_ɖnoY¿A;s E"/'DZ3~}WD|`=WL|!MB7GOQmЇ/\ASF~7+Ї CMWSVkO[)"C_GG|=!AJk?R>_@|R?"_F[ʷLTT_$zBԟ] & + lZE6@[ "~=o5!o7x#U Do^ϕs;ل8[䅄s/"zI|1!?9?B&L_Ey=]H|\u]wXsc~ _' _K~ J|jB}MBAϡ5Y!`yoC">ziy>Og Fxr/K/΢~彨 X 3Tԟ~>^;G#_:-Bo7#ˈL~e"/#Dgw?jЇ_.ˉ#rJJH¿WA>Bm_UWt5?Z ."שt}ͽO Tz5KSܠM"_AQ &qqJ|%!wJ1_E{!ֿfBy !M xk"̑G3*ry_ωoy#!U4#G_,7~_SQ/#}u~ՄLjo!mBwTzÿI-!]CTIÏ FBVl|Ϭx'_yfb7C_sXfxDOKZ~}"ķ"b!KuQ"Y?.׼E>[Jj}y !U ȿZBB E^G ЇjCuQ?9+@ П;o6/#?e+f!WB+ o-mdA_͹'D5I͂[ <o%D!kJ7X)y|Tig FWG| E|&_qD^E= <~uIխ"E(@_L|*󻀰?[ ?񹄚W*]jG E){)yri;2qϗ+(>2IBZQ<@Wu}s|^+Cɧb|^x+пA_D7 ?V~?t+hDP䥄o mė|_I;&x'_TzG¿?_p!wo#~1!WUa5}*S KMV9Tg }5+Yп[Q?%>B>> BCWH!1:ϵSg]P) DC|a3I(rOt a^2_DJy1!ƷϨA?Kl*A >3_! _$%[卍J }[e[ė[`1oǥܕE{£CҾ3Lju!~ғ"/$DJ2#'/^T| !gsCKwJ70ǣ~"ϥ6D|^O7#a}y J$\o|⑿ؓOo fE}}7c}O Bo#B\>[ÑqU'!0_OyW .7!om>|Kq7FE^,ה?M*m3#vK~6C jUgmg>s4B.q_ڇ E>V_BKE#>C9*y.!J}wx{`F*],B}ؿ:UdW"_M o4_3!Lڧ>Lj&D'>G_.32'/\+wلJs,oyv{Jwsx.C]G{Qĉ*2#l-?tݺsM[iںuF>F~`\eUZ7mܳi=TJJK *Deȱy3uۖ=6mܺ͵S`$TLJSf?S_(#%p4:7 eشeCGx8OU$j0ѺL* pkKlDJcn8H"u V.( I%U b5GN۔2F-ˍ4|I(GW# 8GXY g øiU[tԍ[iFC t p`c]F{P^X8K$:Gp+@ B 1_͸r?5Q$gc5NŻ'roN&\Ʃ9Dwnu;{+`_gc8Y}D;I =yeA=eۇ:9t@]_“%d03T' 9T#NW-Sc K*}|'2&&{⃔L \}~y@c pCA:x<.(]`}: 27' 7c>[7og:Kzz@B |N>~7-.1En9{Ps䎄7TT[9uIA {x:G !௮>A~Z3A'1h8 {\[ N:әi۔q+;.uͫkc' :'сRk#1Wt˒d󎄈Q]]j7 F7t=/g{D`?5p8][C*^Xqb@ga$j |>@P;zlܵ, ߓufyg& 4u[3uZ*gX8j n%%M -p&vIƸ2.ɰd}NIP}<$^f-?CtԘbȻIGU'`8dNOSZ#؏]+%NUCy&p2pbLidV;kQ α>昲._)95AUFK41ΙOB;%]R"괙Spw ;c]&"VǏ E~kΦ6T+<$+5k4=4U;3~DJwd#:ъ~#$2Ióx6!4ܜ'oydmh<=rr;}5aE8yqRj| 77Ա &7w=Qb??lw^]-fP5a׺kf,{5g,ˋa3DM/jEE3ת7=&Bm0'|Ἲ3,M3,ͰSGRKfV>y}(3WWvv{cwVL{㔓h ǮNg;g A5sI8}o7ʹ7If&Χ8MgWC l8foNB;3#Y8SBqr\[r7fiy߃twcõtKWuƱD!Ǡ$gǓH9lV{/8$D)2Q: Z=w/Qd^w9#Ys/%(9 UhŮ DzڎG\Y&:.:;w-C AY%iyR;׆AA/ZBVA YQ7.3Ҵ%|_)NG_"<{ǵ}nt_?&Ѵt`+QtUΟv'[ޔM[ZK r,e ceTT'vkcuy&`s= >P=/Cylg1D_]ֵ/"{PwoG`@Oo‽!ϹBLZiVCCG"7k`P*\PYw\=u0l<ط/QQDQO F=,(1e?!BwB ȔA XݣiyߥV,ߟqOK]C_f Cjto?XR*C&Ha{_޾C= rp25U!ug0 מ]cŇ]Xm+iKڑދ{.ō\/!*+g^n/Vf}Jkߴ\wj9hˉ1~5 To1k$ Ř( WS$e%/P  s YL/P% J<]e3>/hPN<^,֒,(w+z5ÿ‡-w/Z|.!LL o ٭$S4,w9, _69P9~>!>YK7lB!>GOo8"S?y¿R#T>WC^eЇN=WI|!"~`_SWj__`T7:B@|ROsȗ¿oi_Ͽ%¿ ڗ"_G(/_fn҇+>U_ZF_klBŗk-om#P/_L7?/!~;e*B=εO{Gl'zBF\¿/T[tW"vo&ṭt_^"D|tXA~}俗`o'儈}W?v@UOJ7ÿW QT"'DwE^rEa#=*fBϑ}???.-+:>C_s: w[ܵ"N7~X/z&~`,\[^@BB7_DLlB迆9-:+zH6Bv ';_@;_$LRB迅kI.[ 67;HN 1>[}q21OVxeBm˳_%>[ߧD^LtAߒr~قXU|>G a+G OAǃPp卟W D}?P;Biw"~>ҏ->֎ J A1~h>E^!;!>:@|>_sB/$DWD+/&ȗaQ R"o"D|<&>kkNd(<<,;Yk̑MQ?Uu{L}\ag">~A| OR_|!6|&D/O߈S*Π!J֠@{F ?ty~O| V鏖:*?#?~/͹M: AJLAg~}/#ely`协_#(!>BD| רtQ Ї[ Gͅ(@ڿۉ#hh?^#n{ ~oU}ؿ"BJy1!]' g }?nTAM| Q"&D%PnP$:B!?D1b8K ?>ArA_OtW"OA志U!Cz~&Dϊ>,_e7By _[|5TE#D}Ao@V"H_R}2>_Q"o'D|U|3!kdg !~wBq ߥSogC"m8wNZ?}?9{~s4B?X }~[_/L=z|B_%>"Xby矜Gmy)!ǟ/# Q_)XM'ѿs"KǿUAd?F/Pum{/$L|6o8Bo"% 2 /d_pk%9kϗZBo#UD|!⫘ڗ  lBRsi$L5"+$D-'bBOsQjny !Wi&9~gySdg֓oqgidoU>ZUvzO+?| (aL36o!T';͛GW}_9YA9x1>bɯ/Ol ǓiIF:6r'ͮh9)Ռ‹x-IrO%'U62~Tv`܎`ho Oo C#T=,{  LCwN9Oo |zxzd?r<6^$LLSc_{tiV+O_>p~7ex81!;>{wL x Aن衧[Mȶu:oX=]e ,[ć3 tc3 0㙱NS^lbp / b,.97qo t:޸W 9X13׈?Q1eqxzaZayaMCtVq Jsc} Gtښ0_oy?v[iE<0?ԍ{0)2wD>w#sP+Gy#Xj")R^zcy?U,+/q{`Dl( u.=C?twm۫O p"ȷiV Kw򧣗u\}^U]QAMs$nl-hZO߁ΎapR 18w7hKox;2=zrY/U_;֋ڡݍ ]"ù}:y r\Sb9U -} +(Bɳ8_WּٓǤ\D}۳v#bpdDSѻZ_Y:bmHKͮ?KJ}V!Ӎ8t:)=pTXkcrlQavGy,r9G披 vv1oYJ]{Oc[_ȾGzsn_աt 9C1BO\M<_i[Z`ک@5TRCqpzwtx{vzϡR_gR}.@;?Xs6TGJm"qws935y j+˰jvլeOց͆Gz`eC4p&|xg¿lsg j%tOsOvlB!>G/ӟ2y!/ ЇE§XX|>!+%>b}WA<%RF ^Ht_XlЇ/_-_Mķ#6ByIFb}'Dyh]W 5 KpkDk Ї5įY'* DzC}6Q'§Y̷_g`zByai sׇ oB&D Ї]įl!X!iҖ@Ϟ}ؿP5wR%}Vd|VBz?y{{لhCX=V}j}KCK?H|{Q5Kbp?f9Pyqү'/!=/!̊=e*]a}.uݿR+Ֆsȭ_!@ݎ_A|%UU}sICcu|eCү'DH|"ekHZC6[L 8i迺} ~6!NK>oCmy)!͖sH_2A?:jهdy(]6 6wZ!ٶ|%!+@Mjdso!D/@o-g+!؊࡯{Do#&(XuYO?C0byg,%Z^@,'{ل9<+EHK%'8JB?B"A:F0K (ג7o%o@&~#!;ķj2>:{B?J? A^-_%~ږW~?7_M|5kSs "X&}[ $]Ce QgE&@5xH(FC@zA'鳤^4M@|`97<$ʿRL({ g)O^#OtgJ?C_ A/P/>گ%X@g H_q! /~u, o`jGd% &mX,\ASe҇D~1?lGP3b9H5_ #RʿN9E|˅d r|,Fلjgr|@gׇukT}@TVt|#~ W4@s ~=ʧUCKEkEPSE|;dL&|}D (|?曩2 &ULJj*wل!w| oy-}AԿ_u/ń͐1PfaŸMu/9_u\`90jy!o񹂨]?ZYR@/*3N>}?9׿rB_ٖwu.?h@u"#Ŗ}{y׾v!^߇g-D_.H/P \bه#~a }>1Q_((}sK_.D>tWÿˉ_-J7 CmfBwU>ɿW!{;wYZ~>!>@ /$7YAa}ؿ郿UY<w7/sHǟ7Z3-J?wX!1'+w{yeu:?o&-GGӇ2B?w_.,q-'voG POe࡯ܱXa9_Dc9ky#!n*?#>C?_"uM&~`3#}ȸ-o!D>>FZ=ķ¿OEp)>Dܖo'ÿ?Gp'Yw¿-{r ߃w v/X!|?!ƿ/GHW X++^1+Po c/׊-|Y_L+]X~O ,oٷǯ+X!Q,^PQ_`E@ؠߟh'ϗ˷矟K+pm~ay,>%A~S"/eh_.o-s-';>!?և?g_(?__.߿Z!|%![>;"~-!7דYN~.¿ÿQݳao&}"G 7>Y?]O& w2D⑨OȦm`^'m`>g"/#J| ot-'m>Ӡ3o eX[,}ŅDP֗l&ZH(m^oGdLD֗Mįeвa-(_Q>+&~ __OJ(NfBW**W[!|!Ɨ}د%>B Z?d~k[Q<%iq /jч_-zLF.CUhu|p;񹄈#zlW,;D6V7_Mm'V CBK"&?UW"YWiG&VB o#*fE*]),B'لc>D>CWb"C^*|Ƞ DA.y5!;@/2Oh-_ !\@_Ҁ g_UzA_";QR>%~`;JEs,@K gTJ9kJ׊<sJ1ϴ1 Jc_^_"J7c>d(k4B?x&㓖O'Do~;/FE-gby+۝iy]*#~>!e_{7 C| ?x^g =? B~kH">D\B?QES"~?'Dgy{<>C}'%=*}JsQT~>J^>-*B}iC?~PՄ!'_#Wh>G,aAC2_a,|%?٠_&@+*="bBW~}ق9izu?Π_E7TzJՂh~>1|R} KȾ?~\K a;*РL[]U{"_M"@gȟ՜[fB_?"~o"S7 dL_|7!} C&|g/JJ*~ D?m9TUzV 3,K޿ț _UzΠ#EPzB?aiUsn6 OPn$MojDvBdD(NT/i?P4)7~8+]ICo~e^#W~&A>CZ&E I| ?Z5)[s%~|>g_"H$sRȪ Q9kȟ)?j-Q]>5'x&!ʯ >&>_0B1\*B$@K ZY⣒x;I1IWR4R5k$5&](,B< e}ܤ5"!Hϟ&Wi#@f>_H|"|!쫹"ɠ/2ID^MX s4Q8JCs뿖-c5+ZUjy#!Wn6~hTzxȗ ѐ2tW6Y^B*5T~5&mZBJ ;X?P\ۉEk/4Q+F:U2}&F(?I}?x+X\lE ?Wi' '>1">UƠ'QQQKaue*].儰}ؿ&d ^!sW+ wPK^ڿM59>kI7zo$PM~n&~!kTU%-[~~<_>dp>N)Uϋ+YZ>[^cu熕p-4mںf#u0^?ݹxOnڸgU{foRIiAelݾ96o2n۲gզ[v*OquQX*NBd1\Wfnca(%-$uӖ M>I5Q+7nߐH\7P8} p4n-'\Zv[[b+uA"$Z7yTg1chMiJH{Ӫ5ԍ[i7۴U6lhhŌ12* 7or %(>+(4 2bw<8A Uk>eTqΜ3𧊀qqAFƙ)JˍT/RKԋr҇{Qs=}(-<_ YAcQ6K9FsjۘܘA ve4hQ,эzx]Nm6?1z?8pX}5p죟I\}9^&xɰm߇~J>YP1RbKv|1rs)Ho%Pwد׊ ]ㇻ ֠Rw vy'URWu/t*Ee>6)Qw#vTET cȜ^dw)g= 뇎%I=]~Cg)c;v-hUWǴ[Wz-ۛ\MNrT 쥘7皎CV&HG(158tp/K C4Y՛qvoc9_4OR|śu{P[zKz|WMH#}x6hY/ ө66AE}]; mrm,E8Ƕ|c K73`*ir}PxvYpClG+ìC~spB/_dATQ=fziW1# mz\oc7S^~AEot-bM_ quFTf`7p൱]p׾WvDKwLv]yN̰aيY5 '{|SVG6Ű 7LϽY>zpqڷΘ yK9҅m#Ѷ}yV&ξ9 v&ûq$ ]~)9.Uqh6qw 0fd|I+fƒXB-ξ1)cFӾMK~xF؞W$n-C4 :5 s_gؾkl.8aKMg;_8TYA4܍ɀasGeCks|n=3) Z2 3G=#sNJ̵2E; ՖΐmmEZpz| rCkVJى}Ѳ.|DoE:b X̤F33Gg:9`=QB<坿R2UJYϳӘ󬍰.q_ߐiyIUx'`E7 <9c%{ct.댑ZfE/NBM^Nљ}u.\lq;~`FhL{x刭ԋ7*[+͚[eZ'^oDQ4̿sh|ܛ  t!U|h M&|.·/~[ӰU+ ^ݾ\s۷cȊkdn5ݠɦ{xRsɅ74dž{v7IܝYBt~qd彭~,,W=,9x~\}^T}ߟYVz<+o1Cݽގ>~[gu5,I;;x-l˺_jCEV~kÞm veC]ݝa(3k?5iꏬS6$ZBgAԓs|j{ĉd_#/ҥM$G0ݑIgR,ߟ% p@#6Eq5:T*cc[,'K%nTd]E]J剏.K c^(}(uh.0]kmLR%:z2{p 1.}6̹zLKH!>#9ޚk)ݰѷ"+bi\ڑދ{.^qȓg蕦^@FUNkߴ\'}1+l=Vo1k$ Ř( ɵ>[;IpYηB ;)Ϝ TOS,=>]#͢ӈl 8dRɇNxÖ q\B78"npM ЇӄOo)l].MvYs RRM7ׇ9[CW.|_-믚|B_ 2ZOqrwu{ ._= o _¿*4ÿ/\Lm5| !Q>7Lp5|-y3!gY>/7T->k}_GYK|=!ڧrL}y; Tэ"_FmЇį\G[EF[ 壳Qm#|O}v_G9zB.m}.P">C| ΎwJ{EЇoF&o'DЇm'"=~iҖ@Oxq L&D#X |D{v=J|sۥc!K/!eėYwп*BeεU} zBw% 8YwK/\ey}{W" Ї$0ԭu#{Ic*(AO>jG7?M*"|B*}ؠ?K5**bBkaV7t+a}ؿ*:Jo\BS>쿙y ]*]amv .'R="_AЇRO| !aVl|٥6o?*g1>OV +DElA>ҽ"%^OY>BTK Q&X?cȟϒ~9!ƟTcgY/cPUzH乂Ѷ>o !|y!*=eЇ/'%+ 1?jBy k􈁇k }=O}:At]o|!Q7~&W}{B uz6 Q?Qq"BO5?A? ~%!į&D|Hc~iЇ?!E_Tg"o#D4@fȟ翤'_Yk=k߿ל?Wbxj[ Ǹi׈) !>ן,KNх,AD+_.4ÿ/[UK Paė"~E|!W b}W?cAyz s-o Oˣ g ?ɱgc/B/:AtT_|HBs ?ք/!D"_@2&*1Q7 !8k _I>+%~`;WABWI6A_Ou#j?WchsI.NB[3x+.j~_Z,<-W\hݿy7E>_b!l,O#kǾx+޿鄈6_SE>ի;~6EB zUcUQo#0$}k;E(gB\B'夿 BO|`_@\B!~| ~!Hp #~)!_.Jķ n H}1턲~ RLA_}*]bE%S=wV}S<~U1_JG,wq("* ?~mxy9!Q+Q~|\䕄hc8Ղ`襖~#_HuA_F"Bry#!}ؿҐ#WS~~ uWbAZE>0Sn6o 37EL}?zu(뉯\FnrBm*͠o'~ uߨҝ"o&Dޡқ '- t9׿6B[ ͹vϖш[E^MG?9~GTȲ >U}3 k=?C| >ҽ"/#D~J ^ }*}FhOg /?(-<}A <}̽@_"Jy%!w{}?QAq|>!@w#>x=9Kh(,>x$;bB})-H8dЧ]s Wսi8Jjj݊K G> ZB8 B/"9<ł~HO?!Ƨ5/ k#[ |GD}gJ"Iۤ>/!7Ud-Ր _ BA:!~ ?U_@گFCNNu3~1A|:!_o_,|bc9_,_/Q#~ҏᱷ5|Bw;͝Z2B?_N_J|`5鿌B_'烴WtWtA񍄈߫UV QU}ؿ%+ ¯ BMFaTfB >-h[ ^{ o 8߷{:oW!">H<'!DI|LOVܛUzP-Wb[Uzȫ J3~F|`=J!C|BAܟ8 łX{!¿R>ٯ16=9"JGO|!ƇOtA6d^Vҿ.(WgŸ&<ݖ7?~V 3sy*N䅄h__D~~EBS7"GYѿ}zg0 ρF]w,-l-oU:~m{nm]3;iپqնMjrOK*)-1W"Wm[ڴq6N3N#kxFPW2;uB̫=7{ndJGIb 1 eݴeCGx8OhO`uTr'{,E Snm7oq7^G#7 fYI% 7Ͱ \rf3( FRo hfly8cFPcRX7#uKxV/ VMښ`KݸuϚfP#uff^7 sf"GRw=P6Q*'k>A/6 Htt]A}p4 /v;Xʆe螎a~̶OFpt v \IT;M#Sq-zprX?_&G:v>@N@\R%,sGFZ*$vl*}F}~fyG a^^߅&#j: <.,]Q!e^(|cJפ¶:3v?2p? ra<ƀ v#+Ȥz:'\q1~_78dL:')uRcKKCAp]Al}>T01!uwnP{ŋҥ>8SIA,;;*#wém!UB"\LS&)!\].qOyV '0VpsVܠjƫd}?Cn1J_ S斋SPNwAw>"1/{v_OP yبWObwD\шNև- ܎؏} \J, v |[h6dQwHSSr1٦Q`6p4?608xO3495/peWL^1w_{Z^:53-ݖso%H 튭xUKGCL/X|Q/BW㜾 _8*J3gɬ}wbwM 4ǭSόzYALM~1 7IIǃJ`ɽO=ӊ튁|w1d3٥8}2(|R]7Ve]gڇޏ/ߢ?kDnRA0d ຢaWkuR,$485naj4xW6 HVo'ПWiq}(W )H&yQT+e@6M­y}nQ>ǝǸŮ"GlL{iֈ_Bt#"DzIzDdꏷL7x{rg d­A<@׿7oT6G9睈vWp շ/|}|ꓻ,.&bG{}߷/ERD󮯳 zX諏[6Z1е/' }$uvRC>)DU^" ;MF±]]Am$'zCPeXVcoO@dK`Gwo׾D GE @ÒQ/J,٪OHӄPP2姆N刕E[o4.״rצ(>¹PDZ݃q{6Racبs,{K ,b_ EbIGԪ:TK N_પثtUWuDxIV*y\zTN{Z gcE3>q3ge%e͖X]=t)U|Sz2r2ՋJ8)궰G,r/KߑA3TN"0llT垁KJuSv+=W_gTHMhqT_L]_Uvll*;}ɑR灻ҺFctyBN+s]4*[-2ⶍ]bOdp+NV \yx2"ls%ґ^֔úƜvYI^\`]ںTF`]ma] M? 6!LzZ9bJ<ߔdp[zNJC5̭UGv ث_]}K!+wy{Z̲HŽ}F/e 2鉋A*Z[M[[uɩkp|̲MjF"I[P 82@' /l~|uA_$"HWu"Cͧ( JYʂrҩW>/|r#g.K&?SBv}7M$3WtlBM|LS9~>!>rwE|6!C+Jz"t]y8"D@sD^I(`u_ׇ9+/UʅOKߦ|>!ꯆ`_R8Eԟ+{ .xEy|@5|!!o9G նED]_J[I]&|_uD}-:B* Qu-"G{ TzUQkaՐ2S6&櫿_OӯK.ym}TZ>N|`+՟~\#D#lk# {dH/k}ل.s,f"BnBbKC|`_Ey=w_#8*]b>~=!'AGh_BL^1oUW". ЇLjo!Q'Ad/8-嗩tg Fr6+/,RD^Jy!&rBߵ*=l9YXJE+|J E^JA #eՖ7D|-!Ɨ+8_xmnAY_" _C"T?xO|!:Q{͂kɿTz[ *ՠH:B*Im;aMyy+o=!Ʒ/q#;o'D-Q[E>dЇw>!*_ Q ЇM|>,?/]' b}wJ:BSsIy!Ɗ_C_sZ5OmW& ce|(5U@?o߈ל]gY?;$<]OuOVO$>Bj M4П(z.F& "W} %B|~LZޯ~tfE(!~`Dx]7jN }T2/$LQ|gB?BB_*XNEWB*:ҟC\B?Op>/\B/%~ג~ Я%Mp%~#P=턲 5!%F"Ȋ~߿OHB/1[ZgZ12Zby -X}_B| T[Z"aЇW~VRUX DhAW_+{ퟺW5|>!_m~3 BkE&@_HB[DPWy766xH }5χ6_K

_}ؿzB׫t">^7GTBؿP?{;[%0No'!]ge%ǎu)x+^jلh^LBK$3_R|gKA|?> QO_+/%~!'~`UW=H| _RUJxCJm?yX>,w{|e*A}EyޠίmJB.qY_E(aᰁsWj5D|-Ok& VpW#DN('O2# oI'i}0y߳ESH|BTL݄2>6ݤ?Ƈ >9}?T_D(,b}?Rȫ Ѿ*pA_#H3\dЧ9׿پ!k'>"5/y)!g eėmW Vk_GPsAx"\mG"^ǧ <>&/>_W#> Ѿ]WxJE>Ї%C|6!;D| '*]/BB_E"~.!~!w@#"/!aPWQ?G/WTc""D.UJ>#W2"_}ؿZR>?jo>!e'+">_ABB1_D^eOֿފ} +.~f=$}ֳ_ž[|*$~TD;Uvϱ9p, < ?Q❻?q &Zt ;uvUmMkpWƭ{4oK b2ӲOf=vϠ<5G6glܾaqq Nx :h>Bjz;#N$Oéa{\)F3齻pIδ{TeYvxji959Yo8~* |BШ=ZyLtCU԰;X{ۑ"GF1kӻ5{2\7c=Q wcכ 8fe =cMoߖϱ+#86Ŝ |L 5~~b8t޸0owwf|MǛ1u U<,Eq Lu^>X['CU{#/ 9L\A`Gtj< 3Fcڥ~Y=_ߩ^cp :tLu^Gwx6Umܐ4 TTXJ*?}q@Rް/qz 5g{z(Ǝ>IS14E!;?"P49/p~'O' GSn.ђzx` ,{(b_ GPЕb.JjtGmn܆;«w e1Y qݪ7q~,Oq) Y4+ Դ>$8ё] ~ͧ턁zL:$pξXȠ5o͹eN--wX}"]!e8ZlEJ?Y_m<.v ?2ܜ18:tdmh x9a916^v~ⵯF~Mn=q_ey/tR#GaoJk[IY9Y FIWKKϫNX1US;xe)my=}@p!BNOq_iy/ښ6bt'/AQ[z7ط.0- Y}ӌ=!8WfY|.<3Ls~fΊ_۫9_evgcF*;էSj} ^#'_co8lG6>yy5d>{ĽrL{JֈiyqR08#EvJ?±IǻV"W\Ct8uiV ?T?O0ImykN8^R~~ޗ8o! XޏrgeWW kÞ-m=~"*=YO8o:zs7bxqii&7蜸50' mfP4Ċnly&6|X̲ t'xyb>Yzd@ށC\{@~Q1DLQϬD=^"f?aɯP8q"hcKҬcJKxC9,E)~/k 9q@#{k'jDj@TSVTl5FH_oHuvӑݫ]rk\yԠ-خ:5UFj<,4T8ub56F--igDpX4\fhP羂TFi3%Ɓ(RĒ[AdHfAq:!H_˖F*#0S>?`AՇOQa?x<Β%;ӈ"͛,eA+ 8.@>lqR%)Hg ߁jy! dRu]|6!&>;CʓCrYIR..I sPQ'K' Q%G˨t*9#O_ߠˉl%"@*_@t]Ԉ|!!6E}k- &y !.@Lpo ?a|M7R$OHܳ YN|!gt*'Dh_6*.h|!-į$V9 C"DGgo5!$|O}_GF|=!gլ>;TkЇ \9 L|;a< K0{DA>1o'{#N+z2j.BzgxlBo9g)#BBo/EZ_G|1!?LB_B+HUg%Fp/U阁G#zBwAݬ%/ق:f"_MzY>9-!7JQc!S#}U*]#<{VUѠ!~!kUzny0$*  u*]oazҟeo02,g\Z rFa,&z&Ǒש>>쿞9{J[?pJo1W7t+ wy}wJZUVkwvRTzA1 E_}n [CGUg F?ҧ  l==~BOwIC 1|qy ߴZ΃~}?R>?҃"/#D|NaA >!柯@WWU Q>R|]o|!'7_!ŵo>5UzBO@| aHCn"_S+6>79;!o!D?=EBoT!DJ3_sψ\BSPoZ?|B?G$gH|7_c&B_TBoa[5N'Iy1/}{}ַST G([(I%E_#o8\{)o-Π҈[󤖗Jz&֠/#O|Y"'T*2ÿ''YP M?%_$?Uj ¿}7xF/vB7--TLfx?wJE (>!D$qDJ DʈS}>T)zBğZmЇ#D)PBȷPP Z:_Dk_,>+Q _)(7vB"o&_#k7KDY]Vx係" g5B7[3x+.j~=kd mx+ν4'[/B1?G8lyc<gitBn_SECg"~#X {,+fb|O| W| ! eX\;W>=*Zѿ^TzAKL㗈P_CUӠ_(E^B7aRA~+ }>zA/%H8WM~ !NHE^'H{!~Q> >A>鿂[@]e(_M"A|?+_M*[[u*]oՆ[G7Q|7k(:'~ JxG( \eny/TzަG v y|yJy !Ɨw!>쿋RA_ޭ"$D{J3W{ <&DPj~_&%>="*}ՠ?S*+BޟA%> ѿ>M| >"G}w? ߃/$'QpTG_ %/w оUlζ }]o|`Q~kЇo_('T1"~S}2A6Մh_+dW 'D|7@=AB_N~H|` ߏT~/ 'įn'U ? Їo'T̈́+Co& o%,u{_OKy,#?+S=C|`Y,B'mGL| g_!W|S"K{>7O=!?G|6_ù@*r_b;g [2Z#E2Ny1ܟTiЇdg }5D^F(pAӈ/'t~9+.5C GjG| ݿǫ4Q Q?g~}?xx9|V>O6OךsH(CxX?łt۫9"_Fg~!?ϒc=VcNs"T,aE>77@ 9|~,F7bcW})\K Qr -B"_C(Xk x =^R7^͆7ʷjz~Asng2|j*Fznآy}J|!!oSiȋQbB4GOj.|Lsqwe[|.y=!KpԠ/ ~/{O(/աRȗUߠ:_FعO>/\C?8 򵄨!>?@|*A.FB}ؿȐ?CTM^C~~MsnCQ,L^3djJLxC__syy"׈1ݾWt;Vu}ؿAq-?^I| =~J׋|6!֗ÿ/o$D|bf^#%[k u~Nyq^<g Qw_Y|[n|6vⱆaYIX0w_H]|&~6!&~!K|`9鿟 B*:s a '#~K גo%ķ n O3ķF~fI\βŸSVk;yP/-O򹄰AGg "u?җE^D%2#/_,'_Q~ 儰5>| D<)!L[?"k9lj<DŽҳ"'3*ݠ%e?~1ωX Oea__Jm_Ns~w^`s Q'jZ)0)II}O2TL?NPxć~KYH9/I1YwUIU3gBߤ)*Ua*_9W $Ma?94%-2BNRuoЇl %Z")C?+5)א?=9|2&2/G&Γ _@| ![E^J[9Ra~X9IU"D|kJ ZA]RȗUZoЇ5*|9!gm>_NzCDi7K mS b(n;i5i#%TsGUsi.7b9/@"~!_҅"_H{aB }ϒ:_By5$#~JK"_E(oIU6ÿį&դM5~."~ !VB6M_J?ҀA_BfB7o&o !?H6dRBq3IK9Pۿ\qW}W Q|{~kcycFu'~ ƟtſڲRE> #U&Dn"Vߒn!~!_C"&ҿUk,7}oz`Qo VBmķj^{mѝ*}ZY7MћU[3y}BJ6wm*CՄ; TB~Xny~zJ"A/z}5_"A>,VBԿ޿Ǡ&~`;>&̈́ |Ki?-_jyfgzslF?@oas o҃*=dEi7*=jЇ/TzX䕄_-볯Ѿ_ ЇG 5SSگL2_}[E>E}DzC}x[a|_Dz*=iЇ_.?R?&JBO W 6P~/-]@~ү K.'2⒞ Bw?QO!ھ-CiU?,HG%=ҟE'jG&~ ob⒞9߿.!*?H'!7#CxSi}x)EE(GrلJVki"ay߱#)}?2'4IR'a!?՜[>N?P??*BY&6IQǴ,Aܿ)Y YL^hG3,QsQrȋ >*}#~rWo#^q"@k7\R:o's k'~!_(JxܿT['/y ءɫ W\r#X?x/Eג~oڊz%YE>S_I6 XJlE{X^TiЇߢ6b|ۈ+쫵JN/"sa'Zw> 1&I:/PiG{HBC7~^#/UL乄) ~KTyϓU:bЇ'A>=9׿%͹/!>xh$*Wj-?*TB䅖Ưq>قXRD^NyJ5UWuJ׊%_; -u^I|=!ƏTþ(y!_M| 7]TI7tADrBؿ٠OKM+Q!_Du7>ۨVn7뿑Ղk,o|zL| /ߢ[ <+~2o;鿃fBo%Qnw6B/;en!GC>juC?ҽVodj? /J,Bܟ|Za3G~U~I 2Kȋ>w?jeWbJ䯨b.7 |pTI !ףY/l=wDB*}נ!~ =_A7%X턘? ~3!{*}I !/#?J ϧL_|7!*ʠA/ I_qɿB﯉?H?2w~Cv{6ߋHf?W.}Ź,/?wTz^乖6oUa>?O|`P|b33P'%Ex낇>g? +u2C{iox<3 -N(7l1~lX޻ǔ< C/e&92oRTMy!_)/ϥD D '"BH+5W b2xRNZBͫzOQeHbE[JQsfgk& 9Rb{7Fz&EG)"Cjo'r{”scz0}?ZAKQk"_@n⑰Dž/%ArA<*uxI ڟnF{%=*| =rH K|`OKD^@:ҕ}ؿBA|WiP%h}$wJ <~9!?N|2/G/3_-Wڏ$>[޻I9>UU"!J2:^-9UzA_M| ! ėH| _7t}wDn!J\B:">_ G #}^}4[*F^R_<) WGwa)Ga_?> d*= 2Bؿ_/ak?E^G{0@?oȿ/RÆ߿iέzB~ K~7D Ja/\A~LM[!&   T'T7SI>>SҏDa>Ȑ?=9| W2~,^#O)>MYM*U3yJO%T"YV >7|is*Wńh(,>قy ~;A|T15,򹄲L Z .KM!~1J<Ʈ^6JY_jJg_+TƩDF(:>@'o#^qEPWq:M!g}Ɩԩ~;!f_֟nv _MkRjsDũpl>GQcYjC?B3 uV\ K-9(#uE|i#eH?K~_ S&BO]!\BWCLAz/ =Ɗz"5֤.3| :rB/ W ^4uCN~^!Ѡ?iOsbC_H;2xK^Pߩ"/RZ2A7?~cQkԵ"/'DQA_!H_*Y~Պ]Sc}A>_Gs=Z9u}ť^ y!Rۉo5<ʷY"_Fޢv>JrBfЧ4zW~wD稴S+ 1>w@ϧmh?ֿՂk,o| ^ŌOo##/y /U}ؿق?f/S b{Ja k W? bJ׈| !}w ߫_A#~%!z^mRo9'^;@| ?toTfo$D|D>4w#K6 1byuJwF2Zo|Q?wf~o6OK[䕂ro_#볷N/ mG$~ . 77-bygsɊ{Jy.!vNJLAڿHJy1!X #sS?E^ES>>jA^BOwO>ҐQ s?B?`h?WP~^/J_5_)/%# RzA?B&T!Dw Q %=(7a[*" }?X?|#~"-%XJOxg?H{,B^{>+L|#!Gw֊|=y=v0mA拴uH!?7~aMo7?ϑ.Fu"#DRiA'~ GݾjGB}c?BҺE^@k;/w ÿ}*we}E໥7[HxGw?~~@-"(ϧTc"AT; YdJ_F|R^&Bu|A_F|`JWPf>_I| !*]-ZBm_WtA&Np!ٿƠ"BO$~JJ7|! [E> aC&[)~ :C5m-п?ZHN;ioRW~h~w Mns/y_)zń'~ _?@|!AkH}>B\B?x=nowP"!H_HGoQ$>OP'{|JwJ0} Bi>+2B/Q>rA7WKsTB 7 Si_&~!+įo/#?Bk_3!5r~G| *=kЇ'Jy!!{*Ѡ'Hn_J!傈dHX޻eÿ?Wp3¿Xp/TțQTw}+W JO!Gk!ڟ =I{DMD>7sN|`*KJ?dGE| /%D|=G| Jϋ}ZjέjB&>x%9]t5G߽d R.\AڟJL7t#d?C"/D<a$D9|1A'B6#yJG T?W 1ttAPp ߩRȗ}*]lЇ. tPMACM_L[IU?}?͹ڗ_4O3!o4_f̿Tn5r~JW@| UY ?7͆iJsn{͹6C."; $~/^#ߪD#Rn>쿍y!gUA'X/轃TzP>_%H_Pa~1@6G:x6Jy no+>\A~7[*}[Bc* &@GwE^L{<@K_xK/SW"> G?5_0+FO[nЇ'Si!D|^aiKqN5{'$Np.$zBϳO⯆c>wZQJω|&!J?dЇP"/ D/xeLy Q&~ W/#IWJ31ޠSQ?#Ut%g~!͹4 gdxO}}9P{oϒǵ|:oپ9Fz #B 2"*U_@lB($~!ڷRBԿQ"2G.CASB| ?}2Sn?֯Fog}!DTyey.!Gɠ'AݷTZ JB~>/ Z7Daq>/q>_J/ }_I"udY5"o#}_Cɾ6cwz_C&/- &lBvsqǗ*y!!1K|1!g'sw[%Z_s.3Q/S2BW|~0Ϡ_Mz3S5_w2.6~'h}=Cw < ھx_O14;PSܰrzkm{nm]QD]{Zo\u=C5Ġ2NTn_7_[mٳjƭ\;hȺt&NG=*#a7nu]R!G[t$PM[64k{S$_?D `uTrBDYcI"}''2sQ7Ӷ7jmZo7oFw˞?[[b C## 0!$ Čq;0FNr6:vA'0^ny3/OVTklu{Mb{UiSU#,hnFqOբ8E5TR4)֣]!{7I納TgR%ƭZE]\}7 O^}Pi;za~ۻQnYǹ-]c4={!Θ]aIWi sniYt,I}5v Fy -аGcw2O͘P3VT \b= olE)O6м>3H @5FaRIa$H޴i :Wƭ{4oK ~ro2/MK;;v4&O8)lnr>ݎ'3KpXɔh&7|r͗ecDAe7]͌VH\8&^1#_{Paad=;/.N#c̰\_$7˭3&NtRw#)&0ϓApZ۪h9?#6~^xq3a|q}ɺ>s/OՋechZ<;ݛ )7`~,"=hiq{(sƪކ3!3U'd^xOli/h9Mr36BH5ie+,b8bX_h+g䏉OI|3#^?SQ7{eAAxj^tjߔz˷eeX'򶬑>|_=C}zZ{ J>YPϡRӱR0pK``w_ok`WTzw[\/H<~˯ wr᪞ݝunB˟ٍ1Q_AfډTXҩ8pGuww:7Hpzd@@g6t/~IW: 2@>v8:KzzA.tuwj sq`G!mG]^F jf?. 0ܽ`t{fab(F}15C{p' jwpwT<'n<^Z/KI% U*LJxƨ^w.HC ?qpO1b5bMijI޶e{s:!c歫秹yQxmlz 68%}ފnQAU ΢^W(]"돭&-q#ݗj&uJ G1E]2tƦD8׾W]}cB}wvKbN154 cFݙ;i 'R:zb#䮹Ej=׎0ފ+혅*'B­c8oER; "jȘ,2.=yP:(@ r$GJ1X ^1#uNI'R~r{ƸN{ELjL¾݃~׾tp/K\b:%txunػ&}{c,'UWW+,ыGw[Aq г,7dՂ <0u f|H_oHs9;ص/&ގ2N! |SZf6WT 6fvQv@>LN`1+VĎӏ76[1u34{,@4 {KfqsG}ݝO 3ħv]/1SYASi'7\}SP;ԫ!32oS7P ]G }<̐1d8OS{'p1ee-i!ܧs[ 1(gE` xػpnʰ=I;zzsEհv.EnL|%ϑqwhOWGWn`էt>s|{umePoԌbu¸~:hȃ{`y*&^nDR#16p^Ue'fo^n$\z`Δ0 Π0GUb7}sygy2 'cb:QAqF(QE%.g;IF@'[ ql*b68rVD1@x;6Ȳ/UwvW8Ɠ}hwC/O9h=-ivBr-Ը;hI.Vkyǁ zyj=i<_)6/v m]]U+;irK"o#z{'csT-5_ c92ď~Y.ZB]ދe=廊 r*c KA S%]=+s9'餄TaO/|VRkN+ϫ47N}|c\Uz"7ٲ܋1YmY T IH!H!FzB* RI%4ݷs7Z|3v_UJ4smvp+'- 2Ӽ"E!R&wu#M]XńuAa}>?xQab\_$u<u->OH+/ 0/iƒވ&US|wuIz /S}5i Fw4IŻm8/v |~[<7HnSFcE}/5JXdW#*ͳN(uq7RW\F_~K /;Av96Ks~ҽd"<\E<1iz\II{ OqݎϓǤG8z`#Ұ[|?nŰݻCRCÒ^GY '+d2/LZm#36z_.壁lj%ed1kdo]E8n)uܱ`% :YE׫z ]ut>,Wvv\0q^ӓB'zruIz-rF\7sQ^b\/⤽ގ%c2j;J*ڭ#.KƥLݻȻ7dg9ݗ0^HXg1OUmoJU=nLZ22N5\¶V6c ݿv??]!CG?v#֓{I73.+G}50{H~z>"'URO϶C)t5L/g}/< s]Ylb|Ok<<0&A8Ita/D׃/ɨmgFTiک>?˔ifYײhpך1 quxJ•yN}N;y2ו$΃'nyI{7q]D$·I{zsp=$핏z>/LbxZDo$y fmĒ곧q#1F,Սmsvg!h :ϤG =|}wp36n!^^q _!ϋ- ;ŕ$.'\J^J'z%u 9Vo+c0>8VoVoLvd(j&lK"Y+Iz]O;k \Ik<lu >%u9<܍N$'c;utqoO:%wz{=hThEo'"p}$"=+Iۇw츣g%:⾈Ma}^bFQ^gK&x1yӘVFuj'h_3p&t"jj>O78hmW\Ik㭈yƣxkcP{ZޫKv6|;lt4E\%-ɶmHߌBdfX!~jnAy/dFs|i$l[[rWz>oM+h͕$kiKebL/s%Id5ܑ=dp&g󞤽vS:c+Iz Ots+c0Ch?uoOƝÿw BCSit#Ew:Я5ZC e?fdzz=bWd%#iÓ\7I{ O;Q$x2/\J^wyϻz)<|阌!:8ܒ d=T7<ƞգqV˾'﹞}-+O1wˈRW{>R.wRwѵW9C[v}@,vKh]P2Krty8Z"dt#}v 1Q̹w7'ѓq݈F&>"gl[T>N 1)zpù' MnѬ_%5Od$^l=31>t_I+7G "?m-Y_??TPO Prs6{  R/G=7b^n}?$PiapM:K8SȵA#3$*Q)UVC]ݝ#v[}^񶎁%73KZ7iukpƛJ$?QifaS¿zĉ H#.xP4?d]~u+) ?Mh&2fsQRuPzRݡcuS15Tl5hC_wUᄒЂՔ+$0TE;[KC1*Y^Eա"1 Fw TɌFDhe76qZ_YgY߲XA#ˋÖ}i5Kb:gTUD^[%acաա^Q$U<`[T_-ea(( ˚^4źXEi) Csm65shҾC&ɮc{kMS~7 ͇{˥*?t%**vUxNZ+SELm wR+C 1 6W̟TEqJ(DDf 힎NݪHlIC}sC}}|pxD7 5mpEj*ZS *H"f"3\&ܼĖVDZ { ͪvVa*Uc%kXcK#G\LB|_ 3d*r>q @ biL13 )eCudFݻB3cUɚzh5Sv{d.1N&< PvJ|TtN}ܫls{ucwvu@55B"xld;vgGGC<.hakkk]hw^FjʌG6I!15Ffԕ|Tzm/h>eOEBqS w^ב 28\_o\FE)E(>u*:еoh02-7/.-;Z]'ƑlMC{pJx!V;4Ч۳-AB}]==B}q>*}w;BQn] Hmu/S ĭ7vÒ}1yCN߮D*r"*ʾr[+#uP᝶k}ŕ|-–#͗kWj898|tP!vvE܉z*x =yѧt7nbv#p`m}\i&( PǞ*izW:wfpgu8>yl̰;e7@*ǟ6z-u>q:=̴.lW&f/IZ>HK+BǼ,n͉|+\'O$ ~2%IC](jXlk A{Q:h _M|#Po&t't_@7orM:RQ|z>U7j?Pq1-K5flmkZOkbZK+-|g%K{xr×{R+oYI^pn7jo#~&Pôgj?kw?|'[|;%/%4͵y2 }+_|do |&'>7j$~&'E#r^& j<~%/^x7/~ W 'D BmJK]A>'zV^P?Y ˑ<?/!~2y /"y)ń|Seėj_N Bej*BÛg:`#xSׯyy5$&`3u/ J" Ɵp/#z}vD r^̽oy,ם"ko&~:oyW{ý|b m:Pw«t NK/2+{DT {EdW#~:#~K M^/XD|:>|Pc{!5}5y}oOA__lj΢}Bgu}l"kSd?P"jo&4gY'}sNl|4o8|2%Ŀ a:?+U'?L]O^ ⋀_7E }9߷(lmI==\K3n_SS4g ?y BmJB]jB]ZoM)u|W7jz\ ' uZ~.K ~!^% ~~%$u}{$-6DrBEjW ~p-"~,#TiK'{in Nl|?@( oμ+ ѿRR&DJI#g%#K}=!im qg}Rr(l: ?kɿ¥}a[)g?Ps~^KsѾ)Yڇ?nPO/$P?:oLO<:V$e^7_欔i#T2Y4 eNJn~:'^7꿄R uJBm WiL11Z :B?UjKiH'Tp@j/\ ^?gsy Ky.>;4L\LTBRMS=HًA?H˧bk#W;K)+/'%sfʝ{ BUWj|&H[#?Ŕo񳀺2+}3 꿝@=6LB-[m"ۡ_N`Nzķjv ƷKDvYxMo#{}vB-"|"'w@ 3 5Eo$~)Xx. gsO꿏 ~-g+_"~ a[GDAPw4^w@o'=M@3G\c5k~>vB- #_B|5k$7wX5/'~P׿}o 9ZWثGJWYx7j&~p!7Zx+/"R>g1ڿW{~^1usx](EΧ,p o2^{,{Es ^ >|o?x͛Az~q'je ot8V@z)5>>M|??+Q&-ߴσ"_~2p xا[@4`&_ @}"|b _L45}RS/'*@MCj|=^:.366M@}~`K s ?cS<|B-5G_H_DhudOjJMѯ"9 5Z_P"~=ȿ-ZPǯPǯ{?BPg,?P)?CoO"ث?PbJPiK.&gv?,Mq lidp177yj$W0?JJ-ث⋀4gA_NJ'RdWg_xD:ZB;ޟ7YWlB/k#~.PG /&O3u.֟|N-k&$)Я&D|NWS,&ʷPO/%o^ԴiOBϢgIZ?OJ !j* 5}cs-Z⋀~4e%P㫎J` ^ZBϩ ",FL}Ϣj|4Y꧞R7<'o\$>fb}*kԏ!&Z>멋'k~1!cEd)?R{-)3zf*}%%+,꿍* S[i}mm&9^g% @z?'UƢ57je,J]g?8p[KhҗyOoAO<$"?L|P ,@\}%O WW_ ¥^#ru?ث,eEh?]NAeЇX?w7R_*JE"p)jo W PogR~PO&>_E|S_-Zg5"k%~/_GlB]_J\/~o?^/r^w;K"o~P?DcWo$~p5ț_CÝ"oث7PbOg.nj.w@P;_AMNmi?ۉk#?ZRɷa1{^ʫpC7t|OsY;(jȷ,;~$H/H5})?_}2MB|Χ}M!j||=^~yϬ. x>Q^ ?1 Z/~:ӝH|cO8N 5~J|7j PN BJUjkk d &?P@<j'W__E%~ pN|;/CL9^DxkCE?o4׀Y=߅K+~^E[-M0-~A#-Ubm/?MiW~2D-?JBe$l_!'-S4FH#k{MlggsD΃~?W$b#~."G7j'XҧåMy0m" MLK_Hld_@b_ji i?dd_L+—b(tw+.D޴r +׳u]^b=BXOkk׹Q&~+" Wuy.m%@?M$PG欴& ȾP?Rl?'/r:~+DAD[5ėj|Pp?bI8P_i*BͿqӮiƯkD^nW_DBBEnثPAPE̿7¿_ ony}Wb_E|/LZЗjF-* rB[m9~ﰔ7~g8޻? ޽B7;?lj~ǧwf]"~ - O{DD {E>dW#="P{~Kpiu4}uhևs5S?>~"?P$̈́7cDxψ|9?-?XJ'\ڗA2EW¥}JOf25AHC{Mk"_"(hJj+}x=;ŞW@?P2 ?īstL:B]>*# D1x<>.3y}B7{3C"P"ث_cd-Şߠ~L븥[㽻y?ET`gB_x{,s=bR_aߧEqثvEx=?4߉/%^.}uZz'qO^ _/Siye_Wk% /  BOS_Rtķb|Hɲ,H9=R~%O{?ZIHpyė:!#>/$>xM_E$D|O$~!?]So"`O!~6=\B?=^o&*&~W I9.+kʈ_F-ȾFSI B- į27@Ni7P7Z̤m""~ b*/!%Rʟ$9^?PR'P"e"{A;DX{/j'}% ZB˒> )_$^^u~m!+-꿗@/S}"W@P_^_Aj`;@dZ?Ȓ>G-gJ< <#xkE~P'y^_OT ?|:NlW/$H/y Մ:~8^x]e"7BD{|Ml__ ~^#:'^+^Bj[E^}m"ث_ E}P7[j|9~W7}5ϝ׽CϜلƿ?y^9{zb{o!4ܘ.j-n MK 3ZVB{oؔ"APC"[5_F?lF¥?vBߏGE>f~ljo#^PǯOY/a1>57/ :~|6_Qw-/io| JBoثoYҧ_EWEBcoֿ6RQ)Du2Y[b?J|P'MH1K}~,^?F|)P )j`xsϠo${ψG% 5"~!"~ ߓ"OY5!~)p5oE~Bث[_CpOC8Ou|_, ٷjj_?c5A_|z>`FL?ATBԏdXx.b?GF*gXW@DG?2//#[$«\ϷPs7HU"B? X@;Gb%>W22BόEJ-ٸ>3 r!27)#TCF 1eL'~ PMIeZxM3,Fg 5A&d eXBj5>Ml:Cj -ZzK4f4_IH>ۣs3gv>.}'}'~%rWw}7ﻉJڿ XA,0>Oh~.V^텋-pBQ:gޡ͌O|b?C|}XVA Z3y~ϗ빮jy^b;Q3% ߁}z]?)O c?z|#~"~Bd WMO'8@ |?#񞡩/E$^~o!49x@oD~kK u|+ oVCO9N9j)n;fY?No/Eigb2 77g%{ƒ>?cH-!8B99ocWz**BfH^?S,7~23%}Z.̏ͳ [:QS")SƼ*@|P/4+6ЗjK_̬ث|g)3%2';dt)sBt{?y@]K,"~!!bq>bgRW^/%{o% K3_Z ONv$b뉟 9^|IȜ }!WH^$WLe.̜ }SM|DfWf$-L3['_`XꯞVK1߆hk3W;oC={@3eMkE.ثuėj]O| WyjDwǯMjHF,B"YxM_]&Lq󙹃x})"@?Ps'5K, Ҿt>bb~w97?4B/ًgثCT?<}!Ow?hIx2C_ ^g9~D0/2h H=)y0ox<& ?+En~˔=HЇD^f_M|!_#rZ[uWy W/@|%i$Q$T[ڏo$ ?3w-/$Yu{ -Ty5K5 Wx27}+ˁzB-Elo'~p+7BP{FKۈ3Eg߁cx<~-W'y7 uxOr=ЇDk!S|JBثXү$>*_~~kqQD$~\O"Z5O_L? iK}>%4@z%3WW;w| o.>'y u}`Σ}/B'm5j}U{׈3_tk5 W߰x2:B_<;o -[x0ٷjg_%ډ%k/_Ɏ7gS?^Z?Z'? 'jyJT'ohi@z/ć__DPc|O_oWw⫁_3"P'^OgYߔ9cڿ.Rs aBdͿvG3!Ϭ4ܴ")/K`VE@z/+Sb"il\+ ?Y9"s-?* e}=SD*-< ?&~&!ƯsEγ_Sv:&B*"y/"D|gMɷky/&TZ?e@B;%_b&k K 1>gMDPjMۇ_\DƧbWb|*!~ ,^ӟAZ?em'J Uo&ՊYx_G[=ۀ;γ.&mVd.&~e|bzo!ʟyb_ XxkY }Y[-)7j|.#~P^ }kVPBj||kF6AF/K_=g;5dioo /$ֳ.Pˌ{,⋀t~eƠWj\`w[ҧB_ qI|}GOWdsu~9`?B[[o?kw͈9_:$rP?0m>롟~K"Z5ė:oA!,0@Zg9}{̒~WQfYZ9jz[~_ "jP{"]} NjK |pYA8ڿo$~p"7CPk-_ȫMe%Ŀ7F?ߎcmVgQN7{7b$PYO'4c֖oy^o«]d_H[ P_.^Kzc=ė9oiW !I^Yc_-_y.r>o ?m~uqOB?HY^`? i g3ȿٓj<^+(E?YxχBՉz%"߰j ؛1B߷1}%j/\W@}~;۩QC2lGrBL|7Lj$j`-?N|O@hx3\xYc<֏i_>3+okB{RYWjJB-o"B-7a@O)@I{-/r_DPWϷث/!g/%{2B%o &rBM?W 7~SIN%~!#;^dKGggGmo&Dd2B[v{KbBO8,ڟE-Z?-g-o!<%|KK/!>}1x~4'}9ھ.ثu|4+مЇ{_hI?D* •_![rK >. ˉ'{P?ʫ}߅~oM.DjO"b [,>DgثgE"-З[-꿅r` Dvu-=qFo%Por m"+-9 Ş畔yW?˾"{=ڿk-G?0\}M]F[)~~%~rB?.?s;Ty.~5 >{}s>BoP?ˉ E3w8NΏ/!qR _{"_#+' !g.y@e9$֏Y{y^Sq/"Rb/L'r :b!׵{j^O|#pȋK/ _L|3OeB^_\F H+5>_aid%29~_+r+^JT m"C_Dz[u~7s>o .EPM;oj|y?Bw;_BvZ5 ~)P6No#{Wے>Ϗ-'Tﳴ?[";6{ Z|IZ?!~ P7C~􅄚Ek>A|ėj|=@|%Pϙ}J3j|:^Ky} O-<7].~:?Qx%eB?HS_^U !5/9{ń"߂Д߬`E|)ג?ޟ>l濏ُB?C_[c9_^?F|?!PE /!%|~KK0k^{s{cbW'~oSЇ1^?eIG_ ͔ϜB-DcN|-o }/Ÿ@w77_NH:R9i"XFi"/} ' bBr2Er,?`϶Wp9A_ sr%TDC_GsV?zB?iīyg>o}nDQM"Ht`!8g @}-_9 - e@/M̑<@_I#eəoWWgSN!Hd^r$sJC'G,g^?/u^H5^N^B7>ޗbʩW_C[J5VB? ?Eg}ibH\Kp1BKc~~K]B?[2Ro%~:ojJ^s.ثėj {D@_AZ"J`_+FBo|lثr 9?%}:2\|s VK"?PK#K, ?Gk9O̝9hWO%T4B-_WG|w[G.PO?/'ws>k/[>Կ3|hpu߬ڛm_Yx+?D\)<'0G97Z ?rLP5"/ثk/NWu}>5@:yK'{K~w9xRny%M"%S|7ǜ?߫Eث_׊ }  >v;,Ae[Ν"oP[,Goi?߁o"~E>jW!~*P+r35>'r^C|Pf{/u7kG@C$`C~K1Q!ߟO#ȃ{S"P{K?._'~PהϜ ZB-9~b:M,U _ W_/ x>V^ ?7 :o# r~JdBퟏ?HhoՄZg?"yՄ?YHlnH:s?7-m\M%rs_C뀗DΆ~!O{^_F)|)~s/$~"!77@ݿ{s/"DN"KdK~??WЗɜ;b7r = hj|R {_D|-_":BͿ/%P X2TXx_Aƿan%4~.Rھ"3PH|MlB\K}3xsdpx>,~§8wy%# ?791cUnXOֶ-߲{ͫV*X'7^u}Un]VM,&0ټuض>l޲iwDT''%IWaթ)is8%\u]}Y <[K[سN6lZdXIސ+io]6NauVvG4Y et=DߜVV$wPֺjZ}jȧ]%ש. % 1`DCwb:̝X ÆFNlu:DL0SLfL07.|$`yμbH$)'gbp4UmƓH8Lb!)^:n_Һf 2o޽M+:^G;`P3$fi3s({I{Z=G~ԉEBq>jZ־ξ޽'9n`Ov ~o_Z kAVRHcegdШ6f8ml2z.Έ8 FX4wͨԩce z0ZGN~σ$Y6{AAku6eX,Du\_9ԷgU>(RQ!\Ȍ=]=.yE:zCj}VO~)A)f w {,9>H[4rV{H:ߕx>-jN.r|gts"։5hM` :.WFR{P@wg`Rflx[C5R.(*1ݱ+lS;u(|k]]XwXP6X{ewĜh))^tuP2::m2Lr޷cpOJ_Ѭ64ԗh>e?{;".Z-Ԟ ,R]Ô0{?0 @i}uq2t051ރi) R10<sCzt᳘>8u b|GP_oP&p+ـv$=V<\axKY4QS0;S%S<!ʈ )y/r<$֡Y]{;_fW˻cVY]G bF)9Kx&;k&zΟh`;%fmƶZ߁rddW-iH-fZ2+,=;PO҆ƞ8U?lSEĞS˳4ӳ{mŘ󈎞9&6c܃N7G,7[y[2 ||L"#=t@yX%~| Hax)Z~ S1d-y ۥq6o?ڟ[t/G2e$~8d_9gO0EP,^=$?f"=[O1aaVG:Ĕdܖ-f>g6%nt*oӱ?\.v}_k3q_[}e@FiBoǟ(< NGx7b^ Kް!CD֦yoق"22 9dItvO_17I ae摎U1`>Db3HwwW/=fFbJ+=1k( 8NcWͼ&8N*Wm8N]fXr2k p}jOp QAqht{c`J+KlǞ:=14U&b>Bfsa,~1qaw=Qi=y9/ Y{j;;UYE{{|>y;0񗧜J5i9pkrz#Q>B${mNJf#'V#.V5* uCd:b E^ -:<hJvlh#|NH_efi`atnі}6yR-3 \Xۍ`9k ?_6K8NZ`2s8Ϻuc*n78й[_,,V>Snv9/z]=y~,̧f{.0 xiT1skvXv"\GOq݌9I{ͅ*.I|\#Rxw)nd)D8u-볍O9/k4誼|SNDvr>ْhh3eڊ4^E~gDu>zvׇ)\KFo*T<֌x=q#<Ÿ^ yc:&;#_4.(2eh sj\&%6FSKIlGOiE"ZhL"+"' &;WLZxg@b苒Z Oq݈I{-'qKZ Oq]ϥI{UOՎ;]]^k`';vLf홎ꙶYǟ#{S&]ݛEMω Lq|"? `Nl^^fˌl9s)Ĝ"ǫt}M,Bo@63qޒ=`>Ֆ/{ /LL˓v;8 ׳VW faRxăp"_k n/{VK&E1uHdDњ훁[Nxͦ'eA a1Hw}vdU'I}eʭw3]]K̝Xk^w F!\C ڧ$: Mܘיd׿3]Iҫo}ּ|ؕ185b[%LߛX:}7/uuɏW':rHH/MFK䳱ݮ$2x2ȣe$虧% w3у$rx2X|:}no:b|ę.ko%9<D-2>'氺J. 6Gx%Bxc[`N/1)pù+@'p݄σYI5J2-}+'2~IIsv}OǞHedtПJ:ޯ?˦]C]_vGO}?@~4wF~kiάuzM[\W?k@EgGxmq_ h}x~zgZ͎uk%9*RpGN$R_[lcj2z H1xr"_ҏz zt>|+}JM .JJX8V{=u]CuFי_>zԄn<\!"Ex%tpF{rcgyEՒFTUE.,(:"^z  7e/3w'nlA\Tqkl&P,?V:^mաͽEc+ly:2ڽ<ꏵ ?4pWதPgߡ.WG{;̟0ã9 ׄj2aKz% gN"yyg0%C{"}zvIJ4EE*C!gk$NVZ+f{H^:1K"Dg!fvm”b#\!]W-POxn-%KM5^ *LP%~~7u¸.Z'3Zvq{fT &Wv5S4͟TU5o 8Y)E۶"32 M{ٖ^xz0g.K_Ul`w~q`s΍n.FVdr 7[!B"nd;v[3u Usdd-ߝ:zwa *4.*\&ntþf?tkYߐWu&xI"\A(~TkafHvJ̔ArBǎtc-~ݬs(|65 %eo`Aj!Z g̎aL*.u<4'GRhWҰGd/!%[ސPǑnYWt&ǽ%Ve=VR!`,,ھC{ CHP^ oqx!ba2嘦1'4U4gļ*K00[U%&ŠVe  j՞sXZtuju02dAG=d.tM,EU'آl#sc@ $XpeaWm o1;2wl얘sCa ݙ FSFkt4M*$[͘pv-}oKhdoC[p+gdx=% 5.ٰkqE<2ʔ4àYcO&xFWH ;2/^Ӹk}J{:DJ{ʔ ,4+Piwo9m\ձolqtCZh37gI:ug&nw}Ľݫꢎv5Mv(y?{T:Jb9xMdm oQt j^wPhu[7zE}W,f!5RW`n`d54[\ڟxL>5nQuN 8o+vCF*Rݽ{>HL4fAeCdٽ+T(uBT ?㷜G3ld>1{Q6*ӽs^ sQE(n{ks#48{}##KLEZ!_lEU}\^Q֡%$YU;zzzI}144н7AC%n8ƟMd8u^CJ9Jh"B<ɚ4LMt/]QH͛v3ل֜AF_Q@%_"Ow~ RѰp\#O,LgĚJjtY sx1na*J"J(X1ێn+vyd}%P/T~;Ct+;zݨ5d aIggWL5}N=ư<}5걝 |U#h#oeż%v^ ^'ꥤls/W嘗._3;/eoؼzCNTธ|6MrKa-q1% Ӏg bosm#`_/eB !]{I~O)s/EIјb&~ 0>erڭWoT'7"CB߹OS#%5Os" =&_> 5L; I󡶯w^72*@_N` #/o&4͐R`-k&~|Bt'rhT_@SM|XAcW}%O~o# 8WO|毁9?,jf>Y.m"ھK o-">:[L|_ 3 ̷[Eqcoo% *rjثʷPo5L_@Z17E?K5Y5o3C5Z[VKkʷPpj ƏL'2߆QxVЗy ~"'1)@_DbBco.K5A/#Tn+Ud957!Ե~s%>⛀͔+_@ ~׼e_CķDNc83I u}z-UOu'j|mj]Mt-:~\#rՄjȋ-눯!_/WZW/_K|u%7j^*rg7kחk/'~B+DnvxUI{3 5~UQ{*K+-o7?~=G1 "o~"ɿoy^Ib"{ý"ϦRBV|)(Ww};'.wCc^bOL|Gˁ6齗J o8G|1P^끺6Gh-O?$at-3?ǁ7DO??O| fBO? 3爟K{f ȗ_ lqKX77ܷ_Oe7۩|_!~o!4YM^uJC7ߢFv,&^  u|/u>x)7?~ƃ7ۏD>XcODДO2b'__O?ybN,Woj2ȯ_LS{Mķ$K1[CFhe.^%m?E_N'K-럧}WjF*BA Ɵ/ u|7?{V5ϒvB.1{6x>׍''D=rP8C'c@9{8⋀t"QЗ"~RS^mIsȾCH1ksP/8 D^ $B Oj^$EU4?rjn;ZdKt>k"Sv5@=?34S '^/$-|7j縏&Sf`0B ·±-rb_7eP_b1^W_DVM|#!ƯguhҗC?P'ikꉟ l&O |B/yMYjW3_l<̆~9!RYlWbHC* ?㗬S\14k-"_Og֓Rj ZV<_I]~>J,*V~9)[,-+|rpI]l~_{ђ?n-T~[-wB-BvPLJK_Y>E:_F,^?^G*. 5>yyOh_-pʫ9~57rMC??s= 2(J?D|%/"yDf?J|R?P8@+E2Bf~^<N1mxW{R^r7k_\ENЯ&w=56 _^,ru|zIR9_;-N7[W:, ^O?LN6j|*&Pϙ5w@_F=^aI¥ '@]?[-+[~|;Hy.s_8cf~9y>{ Q#^w/E@z~~B_MX?D|=sE>\B"Z5!~pǡ_L?&^ yՄ:R {ku|?>#97{Msm$ TM/+ *;~&j_?De}oPm7wDk5}/[⯗#T>_?'1ب븨Χ,pIy«SX/Yujo_~|?)N=)&~" ,o.uB_D }Pc_)Wb~KMމ4R'GR u>b3~0DRs/$#RiW~Rljz4O|9Pgs&4MȺ1|?`-?bOϿ _!moC/ Dԉ֩,oٷj|N? ieZ/$~P?4/&~-@}~k_*2kgfBeL|54J,6@?^bW RgA_HWꩭ{?"B_ӧζj? _B|3@}>af SO.d@bomN%uj}M|Z7u^&/U©{:J_KثuėMϥC_EAbۉ&42Z:u+5ھS7[xk 5XgE|7j$~P_2Dd"ZwP.$a%>}%>ߏޠ&d͟$BEث'?D</@:M@Зjk XG"Pw@z-1j /Uh:OkW{_30~/ЉwZ/%~0D/ssg{9EbB-+/%TA_$W_E&@%P_G,l9jz/$T7D*B5udjy+턆7}.#&o"rNz>mw<`w|r4ԻE> =ﻉ/&LqG^K|"@_N>{+ȇ#LqKȇ-C}0o&P<'~.W#%>W ^(|6C{9C@Ox~P Еj}^k{K_2_ W_O/.?-oPϟ[D<}>lm'#0S"k&~*0D'"?ثG>N A%}zpO@_{@Dqj~J>|pK_WybMc.-VQ?A åeB_ Z*u$t >gD;9b__YrԻ"~Iڹ{6}5ٟk?~*L$M&Y>Ӂi-KtˀML&e^4mWS>~ES~ٿ/j_ i%OԏyZ9!MNY5r>^kލN$^EG㻊b5}@?뇴)[- oꦎVzFb`o$~9p寉5į#M"mzBi/&^XEȳ-XVz, |uZߦ^;m/HejON[}Pl#?RiЗjoWy|L+%T[,[׹U?";%"{:`bD¥~PffK«/{~,^ox<^^C"Y7|{PbBE>hW=ė8I郾PbsZ? :]AL߀ 5"WZ5C/kֆEBPב{ԒZ⯤#*z[ZBW=WE}# \LAB/y^"jy /%I>`HZ ķjn@}no!~-"WZb_Cń׊ NB-w;B;,o'2Fhx?DlB-]?W]_~n׵}"B_E'^ӿ7?~>o3#"P^x}FXD?nKOA_L yī㫙?M|=,YQM /|I5_^@^_|M! u-!K6 oC_ M⫀ME| )zB!L' }?^R?p1s§AO|&g"~*_D#R/FNـo?%#xM_ggs0 5 DB"ǛJ| O7g_AEi=CJ }"{"[M/KWg-C"gп7HkzHWl؛3 Mnxo'^O D|{o.fOK|O ~ !#=i@=6e&RBz>3omODk |SCS\Bķ^ʑ>6JC"^뿐W"~Ӌ_ChxۥK3~ό y@M->P뿌)n̤{fB? 3y~15b" HG馍jg W EWG-3tPe>N1{Pw%VӗY5Lx *BI3b_ lo$Y`ZH|/ͳ /tK]~ KXP==W8ٳw@"_G|!igM{_; ahE¥o~7?.mЯ"Jg{M/^q#Cd'''w]"-& a/ ~7[C?}"X~"/!y^$Hχ/9} ο=zFJ/"&TWثP?G_\B;*r?k[ _jo/|Bm?P/I@z>bd@|!Po~_*r+ ~_`_nIο )_R?l %E]Zh| _)@[5[/rMvK}^/r^N|)P7 P68F;o${ߝ?P6[yK.^īiw Bwث-%åuƿY &#rW};eX⯝,_ r' ?.9S ~>)W~֒?zp_>,tA⋁3y/ZxEϷ_B/l*| |MO!}i@}">o| bBM"Z|"߷$;Wy]ADEkGl Oo#R?sQyj#'o\8>?:Dx_2mϠ/'>b3,cooη}P׿R o ^.s 5>M<` ߜ%:&^-@?ϢGW)O^g77X7p~ I &~+3o#3į${EPϿAڟ7  !kL!s\y{I|7tB?2E[!B̿3YxGh,gpЗq~jƧ/cqHu2&Y5<~is~?y?2Ds>? jF2 '2>e_I)Uu?s^zB{_VEw@4y'4_-\56 X~>ΐDli!kfM|0De˘g~?ȿj,ǫbڿV~u>aΟWZx_ {n5j~o~v7?&?PV'u}ef2_}?ۉ/􍋈" 8w?P/!~6p_J| ePO$]"~d-C"kC|!dW+ ~`ﱤO7 )_~C7u_x3>lFovק8S7L{MH'DP"Xė|0SWj4?ڿ?`|$ '}/|%Z_^H9?:k5`nI.a|[o 43W!vBw-[⯝G,п7G"A?HG2~, Z?^JMlj/ Tp>,tHƯDIϷAoՉz>{B?P?)O!i@z>! $ 5?Y}m#~#e-9 EfE֓M!P\W:sЯ#iͷ:YڟiΔfA?YeXnWm2WB?L)sZ_I|U"-گ&BBXk/"T 2/ߍė?S3@?P,⛀2#cavk߻-; ]DbrJbK_Aå{M5.};_JHMf u|$bॎk~7>K߆e:edsbOh_-m>^텋?lpNw:Q+E d5u{< !opWk-71G|ڛis~1.| ]Nu"7Yx &. SV…/B?=ۿnwSu;ڿ >,oopuЗF+D|%N⫁-&4o%~.Pg3>M. w/ E;_Bû_Fw o_"@? HO2'i}M+ }/^ BͿ9_JB{U:a}ٛA_OLQ+W"x}4Aω|I@E~jW'~*ן_ u}E,Kć#3,(_E@=0סv#{׉"7&}C{{Mk:ͷD}Ϸw,7=*lB}K#?CZڟ=f_Az>3AOs'C_Z |'o7xIw"-/$TO_,O-dKW?ψ ?~^B /@_F߿| ZBBl=_GKV @D2o"DJ3,pY㡟Chҗ~C.\>stJoS^Wcg5~uBopٿgm$~2aDTc͎{7%>[/Y["m#8/"~.aA|3";-N_L%K_MMZ ?uHu};o[({JEvB/?C;y@ZgI<<}>A's!}!y~釾Ӭ>'HYWXpUjZG uU9J|51^'Bߕc#10r݃0kE~ /׉l'Xx|B?P"ث_5K!zK-%y}qŞ/"{|x~w!'z}*@?P"oثjVVgjN{+e@n,>jn)﯄z?uzNj7Hלo«~&ɟwYo!~PO}]%{,]kלń~2dmW$Feo#) m)=4\-~? CևD> }yb?L|!/ɺ_Wj~D{Q⫁ |FBmߏ<`W ~&p.~.?@G)KxYK2 گ|(ej$U2>De}"M|R`7,[o~;"C?P"߷ث/Y ^G/G1gW'C HQxOOE~PWEث'Ü_B{ k>1׿~9^&<Şo(̈́k)_3R??k< 4 _EaWO"o"jw7ﳅ@?P?}6S? Y'|7;#}!!7٩i& B/[x8A|P_RLl Y?ے>?EWCϲ/ۏ'~2ٛ.i:B߲ˑ4È^|y@?P|M\ }!!Ə "{-_E@z}Ş.RBN&?PKdk.&kSJ ] }Pwv:@MlK]ek")a{MOd?PG2# 5'eͮHWgjkėaUv5&[5Մ:~I_ʮj_k||77I[fφP̩s-6E@gϱ(\bgjG|O3/P{MS^yᲗA_ L|?KDZ-o%)~x>>W"o~+/f*5jYg!bod Մ뉯!TD6B_K`o$.{&}37l%P6^o':^di?A| :~ܝmvC? @_HbΟ2g_F B=^'\Зr e} wZ`o磆~6w7sAj|_`_NQ#뷴_A|Ϳv|BOod+7. )B_ 1wZ5G/r|HɾZB%Xj|2>«,R>E] _/BK 5_ b!3*E{z~eW@_I⫀~m "/PˈN *5uM@?E^i+~4BS{-x7ʫԿY1AQʫ4Lo §B?Pw_ɻD }1"kM| @A_K>="P{MeFB]G,B>,rW}9:\Yqa'!BD }!/ g-OoA_F_A/@_Cy/Y5/_ ->.%2WD}3W5_No>7-">D_Ek!wD&9n\"߇C] OObF O~npٿPWy|ȓj:^dpD)nudx|V_kQ^FkYuP^bָao'>{cQs?|o^^<Ÿ// =1Fsȅ{?`YCd/\N5E@z~O|)/ș(2*B9R9{M2/m2PK]̰ثi.: AP_TN^o.%d_Dk%Sl)_+Ϡ[Fe_FԾ':Av'j?nD%G̜YЗjf"-|ٗiΑXʙ}-Ώs$s[<8? Ƿur@?PO:9k,s )rE)n>sثķ[ɿr2ۀ+欴ثe+nr"_YfBm?W+,3R_ci_S[v# A?P l s\}1vd KrvA_ ? X.뀺5se7jثˈ O~=꿓E%[gH^ ~9Oo$?Hc{%}{,>K2?@o^ ޠbqu}e;-8@1?2B/cbG|9ίrZk u!ޜ-Z|#:==0\$ 5e7MesՄZ?2b@| PYل7k?E^"BEnk^Ab ߛ,?o-%w~x}jVBm׀9 {W5F}&k }$_7{[,EV_S^~_LZG +ߠup#~*oƎ{E`oǷ|)@>(MC1~}"C_N"YWj||*B_I'Eȧ,ODI=&iui9[y/BPX5_$~-Kd:B%>֑Cd3jx7ʫÎ< x q>_?Ӏ׿^׏E~}9c"ث_l$?yqZ󁜟fB?.+/-t~iHZ5~m)_ jGRJ ^g]EE owᇠ'㠟a)o}^oKDN@_ D0gZ +t~#]M+nckMaHf">r3,Eoϵ?ۏ#~!'Eڼ,#r@=3i+Ra#~| 2@|-!?WTn u\kEua'eʝ\R!o 4>Z2w*-r ,*K4NfHVj|Mۇ#{勨W+ۗXڟ??+߯oKO Wb1w^ėInR[,꿁*B?s!3w&uʟɹo$XbMLw+cU\ s~!߹|j3[ e{M +(>.~%{Ē>eTUR?VR&[5xu"YOl` /!k7_~~kuO:b-'@=7uȥj1b/%&E:/#,^w_ܽ"% W,%R_{M?^& ^_ T"ǡ 1Zq|9JA_Fa`/ث_7&P57_+r=MN{&TϷ9/})6Q&jB5{@^?,J|ثWZC7@_p2OL}%g{M6⫀{:0\$y h׃7NXx M. .wW{¿eu}w;o} CTWЗjRBco Z}χE>jJ G,$߀1/}>MDBm?ߴgσPsj8b?9SCO"߂P"OX5o__&P;jyBE}#Db>3<>b(s5~@|=j/\c%y%_Ow)'竆O9Ǜ+j~%$j~-[|B}> ڿLSߋ«?} s'xE_DBBsw|B7=׏p~~?-'Y~ ^QB/$Dqi{7>HWR-t>eqOָtC@~edZxIy>q-ڏ[w~VmܹuS^h>woos&?øO&5Nj4b'19bFTMJ[ A_K`CאiqЯ%T%꿔oC"^W|!E_ث:KFjjg}H8 r|!~"\'i9Nq{/"j&q/!Y@ BߋDZ/#4;[,bB|9Pg&V } Oq;,꿕ZB2jD[r W@h7c*^&FBpk,"I@|B/Ql𚿭dPo}Z_It~oH"]fllW^qXe6\*o9Fnsz Ww[a->[۶|%7Zc޼{[VmXuZ5M++/d֥bFy˦ݭoS}:$QDWaTi.J ̝ٚeذiݒc}'yCdYuڨ&QeZUѐjyl}%щmnnyę ;*>5f,m|saRC}I%+ 3o޽mK:I+&N#r81a[o$F+y- I&Akv%9w0)e6c5FR6Z A#3iSnI4 XBžA^k3> $h-W[o݄gq9hvVT/-S熺11;E^#OBۏ$ >;Rd#'p)\~ 3c7EIVDN%!*i!O$䆓;۴ -3/v3e Z{NC %Ó/0LX*$p7Jħ,s GI)F%Gϕ%ai:>m ֵWOYF_bQ*3Lb?tV'Ibf pB2!g9&{GIVw/ؖ5ˆ3lKtFF)NnH'`RMlEk==i#99 z wM6<>UڥK-7%zp*-M&FUoӳz u־ξ޽'7W`;38$l^{ؓhߝF}D瘣s! ^do.Adܒ5|nj}nN+u}<''<ʓθt3x1Ks5kt:.O7wGFn|[Fuѓ||\=㷼'p덐gϧ?v7ݳ<W$U9S:c.LK{lSF9,|}y1O&{[hZΡ]=zAWt:GftQvuɦ-Eet87* K:7J YEt vw]^Iȭ]=]wNj~RھC}y'j~ݽC=˻4#<(lS;rڠ&yM=!f^VF$?b%<u7H#&덓1W'o(jmt];1n<{bj6c.5Kg[R. 3 6${UFX!M:۵~t`eic&IF78vd#SZkPP#Wj"9_a/S`W_[RSgX&J>oѡA.#|sgOבvٛxNW7toL tS m9 ?D̈́N@ײ$fRCZG ,&l,rvOi9-z_l[y틣aiI;'!(L:zb><9-W j!| Ʌ:tu^ vuvu?04(8ko7Tѻ7q{OO:7Neu wbG۟R !\CxCR¡=1^>ozv &~&m=g9HMz(&&,bٓ8M WGt[X$Ke =&1acG(WY]{;_ gۇ "AuǂHyb7 c%a&c[ cV}2"DZ?* S>ۀ]tso ,͠HwT3$3%b6С t!(tEf@?D;sJ/bN8"vaYjHH(AIFGO_ZlU%1SGKNx^ۛDfaeZLڼ*#[g)PAaƳ9Z9yܡ3/`͌/sXSz9g", =7ʟ, voV3Fӱ"IpJ7ݏ\u c _"Y:mbw{|/nC)/pgWv ԑLlL;fMpAv$V2tGˆã$%Ɠiج G.`62= '5d-zrTO$cc`o43}$W tNCl]#*' HsTLR)DŽq_g v>:8zk 9!zP@~w~іlXM-ZuHC]CBz:f{{BA;ԮɰhwaђήPd-5y!a(/$Du`UrN~nLɇg]17-qׯ=) *ϔ[ywN1w˽CsOx<S3{R=4{,.턓D"x5\x2XR|Ik.<%r)/'q'lx: ^ N|4R?A)8ɈDF q ~)R\OA\cs"NK\73ANY0GN93OB6[O _ h#bTA+(5t-޽r[Cb̥BrPy',i!4)+ +IwsqI{Op]Ƥ).\WvL!}1Gn.]Ǵc 9I׸ ;: xSw"4D> 'a93VSJrن%zA??_36ݜ+hqtéSf7 $u82UP@ǍW44!u+O^)7 i^;GǬ +W7ѝy'P&ۮ"× <%݌^&u<lu>OKk<\\dp1cCԓ!dr^l߉Bo֮)m˾, 5?ycG:9LٷhٞN+õt #I.X' ]]#IЙ*^Mkz-]F\_ sa}qEI{-'.⤽٦z+ZOytq%IudU1i3`=yf^|\禤΁'q$cTWRFg|L e&Wp?(ǑuW#'b˔9do" _kD:)8CZK4l#u NDRh[uᵎ;L67;pE׼%2}9[C>7'=m#7n\I{]Oz)>/Jk-0y^ b6SFxͤ"6CЬCڮ8C.um\GevKyvD܅K|څ? . 4N].A)%IRįv{:ԕ$“R\sk^J2WUb0>#xHA޽ Sߓ`+,Ev4z]EK?? ND((GoEǐQ+[?mhc|ܖt-wCEq'u<\bLbSx\Gܷb >˸ķ !׸ilRG.(}s)p.f^koܕ:}vPl;+ _V&XW]Ix2 yC^58sFW]bל\Q@cq5gRu:ל |3cw\v% mG7%%o%ٕ$n'J^N%u' 9Jn+cO;q?n%7\:6b>}ޖt=iu^%u< ח1xGca ?NJKh5n_NLu;xkḯYZuݎ{Cݮ.*vr(B2eyw2ǝ ,|,idw=߉^quIz=/;^\Icq5kR1fx-2uP¯vxByUd{]]lͬG;$| ?J^|\箤'Mn}ci[=*JPgy!6t;N{:!d V,Kxۂ΃&LtuσW{w7R\u;D#=|N>L]`M-2\z \U|K^_ OsW$ /yՕ$Oe\ID\O׏ɠq>^t:CR1]wuа0h#ϗ'*u|,\瞤'q% <|Mk<\Ik}!x2،f|H < 9yؠ+Iz9ѧ.C.I/w>8i/'|>Wz<܈|C^_ O7:=n W8Wg' x_bј$Vyv˭˰|SÔ<$Iӷͥ>%3; OI尫cx#[prrA}`k _m&M'FGKq]Gz <|>ct"iX$^//yՍAjp)N!h(']_3⌯o޿-8GGĎlg8ıvBeJ B] tнǯnJ'.Z O=ҫʲb<ǯt{η7dnۘY9j$ I:m_#o\n#2Nd  nK2'b_?DKkj3T8]o}*ǝ| xG:}:1N|2dq?6'=wUO* +i$oqlp[\I]dp{.WVxz[]IdnWz<){FetiEu'=K׌gDѾ~\_}jصiߞ:fTw y+&%\tW|ƴw3W}#9{k/;x}в7~!nv2bi<4knOҖ휞]Fٽ`YG*mɞnnc}@i;96K#mĩ(E֒M[<~˸H ;²GUw5d= hUE~366&uG[p7Lf Tq1eLM2G'Q)FNtEE'/ѡ\bu{p]:;Ã!i`1xCBiUBCoՑ h,F%K#Avnⵦoʅe-4¶F],Nt(QHM43 =ExpԽD/h/7\?S}.t.ѣ@sh--|o_o8V%k2[\1*3t@&s_`[e2P P$+lu#97qֽ{q&t(d~e3!n藊_ N] n+/u w^KCӮL2weu k*mNR==R}55d+mWBRSH_3'iuw߭m+yԭNMHSdk@oK5R'r9Z#nlo"w?v#"BiŸw6$%|K╩%)52,HzD[n-[ax.tgq xağЧ\)4JLңݮӬiS$"3!17|19Z M> RFCV"WؒV`kiyc~ske55j> rґD Pm#C!CT&'*~fڲ}PWu~ЂPcf%4 oVjR'eTw%/'StY޶vć~R)>`.IŻ2Ȯ{{ԆLszF^ oZͭ+`t#HוRg۸H.d;FsmYI 2ޚJ_uYR]5GHgvC2Ji7NRZQnmT. :雠fW3yk[EU$A[g! i.wDŽ.CBB/KQ}Gthl_c{nQ7Ʈ h^ف]A8jtX ~uJHm,nk .'+xzBg6{{"2oQ WlKh߇2u*;C_;v w:0% T}Mʹ8VǑ%x ;vr=ɒ#7Z=!ƞՔnM GQ?5?g"Mi)*~i^e*-za تH`9] uLuFVџiWSɆ9^l;Ta~L0Y!~B<C!Y(ԃunZ5cg8DD|o唿o{ߩ3#?P7ھPLjk+-"⋁UT~+P?^?JKQ_F?7J/oTs 5U೜胛rh_BSG|XCSB}c+,igRo&M'FoUk~1L{_ D5Nk%~&p>ϴ<jkF=[DtB_3?SWK_@^ԉoW~jW7s X)n|YKxB-:>߀q5~7_Nh8N|#j*BB| $+"~pxSUϱ>LB߹7P?P%N,s/4;|5;_Ư]-y9hKEmG^wx0[ 5>wo>ĞKa>/ 9@xB- Y$>A/!_> )_H{!'6~\*RBˈ/#q9儚+BW_IW_ J_K_N?P_M|p_O| @|+pٿj:Wį"T[_\G'~=ۈo'4ɗ 5L_{>jo>6׼=fw;/j縏B߷?#wC_Ga,'#r/ ZoWZo *4Bvj)ng5]> \J_F,aj+(+ثG- Tb o8o2|LqqOZO',!7/ДSO!TW% 9 Opbϗޠ& }!׉Ohx3"߂>D)}[ė~M}[Wj~^ג~ߧM!T?JB,/͙I)OE~}P&t"'k?#D~ }90sy K NH30)@ꟁė ~*!gDN:H!c{MdgSDN84K}+g`< ?_X CP_c+&~p o25!77RdN h\m"kʉ Ț80«؟NQ7W{"OB*+?7j:[~=Nǂվ%r6 "җ-f_Ec ku~0{ĭgPތ 犄*JBMbN|DvB@^ﴤOE7PwYOPtC q39hWj|=_UZ[}"}o$W}y跔TQM @:? B{)@:? 5/!J"WA_Ehs+-j= &_5kkoQ9򳽦l_ h T~k/!Qn->fu^L| p7oPc@ L| ߷ \H{[_D{-_DԾ8ߌ ?D'|)pЇyb?@|)"P>E~{|Cq~_gEW^aXxǜu}qQ^텋4BOz֟^O>O''~#{WjNY=? Z?Wg-gTN tmo@_L؟hW!~P~^9B_^WGRgddA@>ol|#!{F.-@=3D@?ccğ 9?1:.*a4 <׾|)Ќ"K>6cu %b~ʘLTB-_:`ٗ?[F9x~֜gS,G$~p寚6Bb~̐B"k 2dL~2Y|ӈ/j7̀PWƼ{?BͿf3Z,꿙Z 2fYie97jI[!^ϡ7jϵ_/N9>,~Cb-b_ ,!X dBS­aW+b!kmЗjɜq.e@2dϑΉ=g_O9c{:k iPALo'㛙dfBM>%fϤ"TgY&?گ.VK6Kp |GwA.@_H&~<0k^K k{'zʌ|qcXLs.z~bwAG|)/} Z?%cbO+K?Q?UNgH~\VX6x]a+D.E?ƻb/#EP_!ji~F ?fBkZpФ/45ķz,jo?ۿZ-[-mji7}?x#{;%:!'w{CNlKn c&~ jy^O|w&BcaIǻ|̈́AKsy?2kBߌM?ëi:z4qO@_D,yIOC?PS>Ӗ"3kS ^mʫ9:jճ|߿ED&؉QؿqPOv%=A|=pل!szmkj~B|Lb4OP37P 5 ~̠WğAk"mS3"~^{⋝ELJ? B??/N!RV [ɾAL?S?3B_D#}:b_ LYi}mЗ:3vW~/cI2 }_ 3׈HLYenثuėu~3}cH;ey^_IF 5e{xb lBgZ7ϱ/[~MDo[E~2Eث{y6=e B??"o~*|5?.a'[$M4?LyP! " a>nPT/"}CT ^Aˀ>s j?F|-Ǡ#1^y2? }It>I|#O|«OtB_?ci?,3 u"fEЗj|I'O&2@?+Wj|Uk^'\握B뷯_ &^&zO2ek!M!PW gj|^JWT-?7.VBϟ< ?9@3>%^s+u:R{+5- g1 ox~ȟ/'_,OW-Ud/\sWj?K| U7j^;^y2___"~&ϑ"?d?¿3"BSKݯ-o1 ?ʫ}>/,X,tbI"/"u PN)uH^W@|Y[i}`'ެY㉯'TR'YZBoD{MbW^r >ɚL BOYRWY^LBYecr 1g\-!. $Kƒ.K5~̃~2 @ZdM%PGb!k˚ BOꉯ%m}-ƷfX5F5~ȚnZE=B/k,Mc"ok%ci?K| ٛv\BOO:ًIN3Z~6ˁ>Y,6+E:g?>Z"b@LdW̯UN3>Z+rBb_I=O uՄId }5-O"{}#'Yg?H듬sDZx'Ymh?sOP;/r~wP*]MO T{뼡wc~1 '~}^^y"瓦~'|k?^^ybYA?ep9E.b/'HYWXpYo>UėEPWf!~*_+rDnثo)YZb'~pboZKfńjmԾߕN컧NwbE> }!ď'4Y9߾ @_"V |ww o:+^G4 Ώ"}ۡo&{@{vgR!.d^6_UTC"ث_lwb{E~##?WZg}H-c??wqy\I ?AxB?,!jO|RBO%r`5oίTMO,ukK"_~&ߗE~hW_! JסCk>.$6m@ߑ-',/wb;"߃~w)lgI',ZڗPX'V7XHs_B?+_b @cDZxM, DO?~{S0loOƊ'ue&sbp^O > 砌Ub +8b<'C?PKY{?& ͏AS 9_AYk+,꿌@_r=/EPc|A-mWR_C9XWgiUd?_OG7HˠY OePƴ'{[/&TE[5OGA<u|kNb&b?Չ}N˘\}=m{ Y|p"Xl_b_ohgķKq5({ȞXJ$r M-z+~'4*7eWo $4B";o΢m9@]3D[5g?Y"@Pl{mNlϵPk~~;^T c~laiwY݈M ['y}pȭ{! ="O%'r^_K> ui锿 EAb ~&aA^}I̭gwXj{MWP|B2Wj^_fIϕTU*Ksw5ߵ7#n6;qko"YET?76B>z_핿[@{ț/b}|{&Kzm"w@_Nw{@z=x]Wj^E| #r/ ~oWZGO P̿'hdh7}wݢ ]Xx"378~B?󃉏|b?H$i<}LJE>kW_ L?J oS<}3?>.IqgOXy}I_ ߧ,BGޠS_ },M %R*WE}k>y.+8ߌ﷈"߅~*wDk%8bOP ,~g7"?jS؛5:<i+ПF/=ߟ5s?׉~3O$;⋁ޜ>}BhMJB?_MB_C-Z?%~*o{SfjRlhzb?ď'y@}^~e>G/'Dd;W}W^ֶٙ"K-꿒BB_eˮ~f_ Mߕ15«Z/+jͲg@:֏\v^ Pϴs  O3@ -^}oE' ~,ث*{ŞΧ I@:n#>ԏ%^/! j a"o뼧ohb}~Ow$~g_b@,d}.35k߉Kyď' ~"ίٻ/"M+"o@=0a]>?L|#p +r>k ?O}^~^IEP{?hikZB!].O|_?HD}ė +~$PǟE˘-u}^⫁~4̾zB-߫Dثo Zzj_#r^_O|# O'4雽kE^g~/k,I{=N,>H"B7f-v_Nw}]?+|o%~%,I U-\"+/\A쉲u^M^;xW^d""Su7Ż1k-߲mU+C>Os/ޱKڰ~ǒjYU]e1ɇ3k6һ[6Xa-Q?u/4jҖjlkr5 9okQ\Z;Q+wæumk7'N|ɀGk STZi&~^I*j;heV]/5}dZXi]|)T=Yn^62}aؙ{uT1tjXb~dúuoIXU/QūӋ? %kVhg߼cŲ-)+>1!LjP2F7 Rhߴ4՟B/NufAϗp.8n2e!Zl.Gb_pKR| /6D ve`L,Y|Z^>l+qx1Zy= p[gHGf\kL>#үʣHu=?6jtKX3/w)uRrz{h9 4Vͪ;P=.D+c Ɛw1FY6uޭ;fwr;D[֡:G^.L$i!s#}KWA׺oG͒/kaTQzuUCe ŵT㼟YջyxyO ^=dcWGZ%mcӽ,G]aQ/oc6z}}+[! k<:^׎}p7O] 헹xLYud:Ѳsv&6-!+ kOwS"{5=^,3{e!{ ߹71L|KrT͓]Nbݨo {kpt{W[BnЫ̏b{߮ϙ Z \4ѽ[nX%6KҬp@s #ԁ w`o7/6mkyyso`_h u]޳wp@?/m u;zB;e Wx/r{ՐUD@ t96͗yFFi{oB/zSDae :U﵉L}͍,w'?7|ו$Ԉu"H5FHoRĠLmL5$ |4v~zĖQwU8􆐷W?)-s"fsFK5Lk/~|vCU>ߗJ[§oO`BFl:c_&/ xcM[=;9U;_ '%^lYS{x |ez !ҿw=;I'j(|B Ave] UUqN#i4Ǚ7z%=0[f˙NʖjǮ];j+? `py[=+aQ |$_:oh?{nz%/Ǧԩ/)l<}2q2Ma5LIQV6nMw]6Dgr vv(aVUF[tGG7 i IS,-dQmS^hVh8:Ph-{4yد Ur{14I"?1>(Ɣݻ/|^İC1׻Ƒ)WHwwcoT)( ?dGhIjKD۞qb󿲖(I-jHl0ru惗aiN}}$ϻݱ'HrFt

|'eG\Ng)t稄}SNc*t ώE{Ǣ)9M=ԃ}7e[v̳ơ} =Y@hpo84 ;$@yn3ΐi(R:2؞!I<W0t¾p`GoWGW(, о޾P$[t[y͘y oKwG%‰.h2swghO u‡$=|yx`{x uņ$OwI.﫝R?_a*n_eL:CЛ=d^O.[)sPތ-AiyZ,a<<}LFMz+ߕ y{':S]W?a*[v4#"LJ|ҙ¦͋] wۯQT+u-w|;/W+w_GbZܧ]?َ3HԄcޱ43]r]M\Sp`ħП^y 82R%[EW5z-^GI'#;VHR*5q' ^i{Oʉ.M‹B.S{)w=KljwZqy ixj͡uza5^u߼.5H>[qVN^u$>>ቀJJzbpZJ^'JsbΎ_q|kD"`錜8}H["#ika6d,?yTZKna7DzǎoZEJo5%;u,>Yt~deB\eyrp /H;Nz#ޟd~z^π~b^ȉ\>Q89+(>77\37pn{^ɣɴ'jFoJQ RW7"[Cu>90R¥4+Cl&/Kk9<l/Ok<8۱ Wשb{TWFi9NץcC-X~X0\p22)ޢ^?bv+'aq{UK8>ؙJcjv4Vx=kf8~8m̰O7$ 3L]EL2yKfvtOIHy,Y뮴!nad]㮯q܎k:Wdwil d縺ÝO,³}]ݢip/ջx2}C^AVFx2d+izO=^יdp6^i{/\Ik3<-w⧜fWW>3_׋~E^W“A`Udp^oUi{] Oե՛?hwuiz=^ 8p+iz= +4 Olj<ޟ=*'NkV-%ȥ~sϰqM^Yc,ˇ!Fӏl%>c ͼ4̱a=ڑ { 긺vbtmBF6/73g9&`Pe36Þ 7H\EzK4Nl"ln#3ONxߒ4ۓlW O *.M eBW7 Q4QMu1#jnۘY9f|ܙ,;a[g nL>CgҡL™5 㸷;[VF!8F'N8O cvR>[ [[ɜqM6uM$4ar,n! UeR$8*I6{Zn_r OFgZEvό\O78Ρt'+R1= F$zu{펻Sliz8Wƴn͎;(74n' x݀[Fe^ljm gnMdf{Ï0޳=Wyq܄p}h͚tIF):7?Cy%ϗǏ.4RyJK$WzC\ǽ kp^sӉ"G]vrdOS}[]*a$䠒oM{t}b'v m+izO';父<\Ix2jp%M;IQW#qbzҊL۲_W2;q}l>5ñkI.x]4TÁ?kH.*) a8Z'WLJY\t>c(DJ^]#9{.H\x}ʲ5뇳uޕF,Mf8}3TF?v?C?.trT;;!$Od>B?,d =䍆}$E ,6${`_sDPT3B2Toq!"V$߅*A,qWe9 #=>ǠY\bӤ {`״Ύ4OiVɅՇsTG*$4?$~"h.uNxrag5[]s5biXG#4&DOr,K+RwU(n⃸&nYJ'Cuup(sԅ_O35KM4j_>TS:2?-p7]$<ݽ݃w$̥3'Q2^7 y;g3uu~akj*:w[#_.Q]O%ek${#_?']ϤvbJ&?n-5*Cvnƺ=ljjh`42OW?&;+U2_utg(X"Wf99,ul͚ilsa$m:s@VXm4=:2̄v?$닆m=i[w z82 ٲ*W|?zÛ or'..uGTGZnzli|Aa5|e:VW'Ɍ6!KM$_w,RapM7]Jn) t_l=SEKGykFZjEI a/IZgs^u-HXJĨf^Vh@n-^}tnɒ^Wg3{gzdsqk@{]BuoLd8H/s4f~?(:B 544Hh4V2.#ҾXٍ m^Վ舮qMdƴW<&5Fhv*,&F5ӘC2Zuvedq7+-Cp cR h/|](R &l]gDٜJ|C%BeգBP憝H_jY} xS]IJԦlq8_M%4bHym hUU\ZN\"VsŜk }\0Ip|#m_gMMCl_^aNW»ǑKyf1%[ qh.3>ͰD.xTS>-{[Ե関eA8_}Byn[^kBSC p9e*dev:O*R-KRHԺeo~Ec Ȥ=W;]?uO"l]̏d'XcBF/X!e=i-E% MOzUvrœO&:Nk,i NClEdL>̌ ;z"KVM&pv |6?ӏXD4ݭGר\GjZSTFOy$1)S\IQL!+9Ӟ?^MFmxlь;}yt;1irn;:q3!v&qrB@[6v3N$BDYv$;!~PE+vkZn5#kiyc~Dܜ!SܜokS753&'*~|$;vj+.+JiJ]Pvv9F0Ur*vV"Lp~c@;H]HG/ֹtȮ{{҉x>'2[}Y#/ք44Xͭs{.Al?slƴFr8!ۑ7}dc9UTٻJP!FHgvC2Zk7ZoSe}!sPG>T[#F#17.s& џϔfs4;HR`GI Ca֛>K>#W]tHH<{c7/E%HTC"~qvcWDg߭Cl4,svpUȱR딐X$\t?Wlfq_`[EFUZ{s8.D9 `=jůEz6r:D~VlD3mfNqd &5^uDC]iH;dIs{r·#!Սtc?v|A0F~]E2ҒoTqH#&resZP l!gT݇~>.wJlCf`qhG88|~{εao< )4|PZ69|K|j1`>K~<;> erzέWo 'MN"P7Ir䷂PwTN1?P7ھPLjk+-"⋁UT~+P?^?JKQ_F?߈m/oTs 5U೜觅#%Pۧ|4jlk_ Ik$P7B͟,e 53Q^{_ԾdPwo9TھsQAԩBj-"~&_D](jk OgʲZ|rK _E[H|6/S뉟NZlԛ֟ {&⛁Ķπ~{%eğM[Nqj ѯ ެ,<t?P_332eͅP뿋rBco0W^վ`-_@|=͗*? 8}"^ۧgjoΡ]HOt_>/#4\$M,u}g=~Pf}zț-%;_1_!&'1?oDpb_\k]A|=JW+j_c@TiUO'Zz'7kkq㧩E^2B׊fW#~9&[x+joWX_AmTb o8o2f<#`"wA?mWw?"o؇pC_{B&rW}?^ZB!.C@wbE|9P'&>-@]$~*7!xMp߁~7u}m^Go%4fzD{MQ9泥~O%}?1 #7ķug1ǡCqc?:}ل?u$>+9muN,>O5 5H`;Ko"}-7k|kJg5ߠ=PⳜx7ПEw?xgy|Oy| ګ_#O<}=)Y WO^&+7Zij~#g4u-m@N/#4\>,៩ 5b?R; B-?_lq7}5 DO/6OG?7f#H? h@ 2sBR|X`Wc/RH~'A_Oy{ @Z=XgC&Z)ķ"~?D/ u(~1>~%t~hd່gLٯ$ V:O&~5p3OH ->k{_F>ğ N3#,+\`;H_CZ;]> ^ד}P@c~o$=&':>%E~ _b`&~ϳ_/8A=ׁ%7@_HE`)こX\Xd`җk,ėV@j`5Մ(lW[g~ O%4/0ט5)Svo@?Po#zl~X8bB| Pϴ%&;^eIx?l;j8īpN'cV B.j_MM{E0M|/f1"wX5'OB?{} 5"[ @:X9~}EKs P?R^.r% {MJ bȫ7*k}o>~׋bW7?F9?GIk},* B[_~hQ "orb?{&OT{@?T?oR F7w^ |&}g ~p"~%OQ^4_b?CuyK"/R&%K&Z;G.n;_1mB?P;"?ث}'}Oث[pA_?&O'- -P:+ (ѱǠ7ϯ/&¦gD~d`wb_i2 =ȟ#WXL,BݿgEB_>d@0~[?_\O7>bM|;sZ o%Eb~0f,<.joF%t>fh#c~"pAe/A&~3N$~ !7$u}jlj};7_jN'~p-?wjOվ;~*!FPK=j_|%_SB5uV^k7OvYg̴j?f>P7 [ʫl2c UK!!}><B(}d-z{a?,Z sRBkEY:ˀZ?d.hPWƚ{N|5P&E6C_Gh1+ L|=ok&>"'P\ubOF,oٯ$ndwՄw)n7j|Hwل:o~1߇[ _ DثA'9>\=߃"ZEėj9l0ٗj_L|?&>.'~*)W\e5WtB-7쯵!>9qEntm_7bo$^e_+ry^D|Pf[%E>:Bc/qE}=m"o d@FKl&7ˌL{-Tm5w+CO'}D> j_~Lu] YiZϽ_?)Nt_HU'CNl5E_F#cD Y[WN%_K#8O BMYd#[ķOOO"~5udKj턆7_6SoE~$X76ʇiW}DfW$^cO?տ@_Mg{KR~o_dA_H7z^? ⋝W~=/%T;(-ol>̄퓙c3-/\kX2so%зj^'~}Z?6xS'ߙl@i)sYЗ{釙+s^w::N!{Z.JBMڶ "ī2ˡoaڦ/er&I]eZ5ķ~ٗR -|9WNef5%̩{_Md oŞWgC_I_Yfī2g@Wib)3-o$B ?_ ^Ϻ5WlWXb[/>Sb1sv_y{?J`k#y3S gK5EY'9>Z9>\D%:?YNƘƗ[V%Zը+ $sj0ÿA],\;@]$ʼn,og_9j wك3׾KdE|9p@BI9_fy.men%~ p6_I]d^žwR6bAfT.&?P"{,oo%^ˉW ,>'>*}XO?͉d=9AZg^$r+_Ohx3wy%z~c/y!BopWY| +?f  B|y7P_m%U@_MB_y^_G4`3ž˼ zDn&7SX[3 "o~20D/,MėjY 5~oyb XE jB',.kt~Vw73( |BDiK>c<ZB_ث,%Tu: Mf:o {F8+Uʛ#īmGE"BG,ZF"~1},/&#T%/#}\Яud u7)@EdW!\BgE>VB-|-%*6B/[ Oy 5IL ?}3O`|5B-7 ,Sk 5?^<Y k/!oDث ,#%\/'G|=ī2^>:7?«}?BOA?=C{NX/œrB<@ߛ}ĸ=/_ o ⑾7e%K-CO >̏AooEYx{S qu*x/џFw~'wV1E&? oXSYFdo Yķ}6$~ YU/K[5^뿆WjN%~ e%eՉ}6r^߳?߉O ~xzjWLV%@ݟ%sn֣{-_@_L||5JB|-l~G ~!ʧ/g?.vZ }η$ֲz,Z/,ŬeWj-cWˈB_.JB_}-%U>avu7­YH|;:o#"r&MZ?gg$P?YVkdm~Ϲ>VKx~M"@Pf-j|J"'{ZohSj|a?:2\ֽЯ 4Yo%~POn{,[->wvwZx'M ^텋J-pqW/(˜w<ľ;@Qď' zLOA_I?*icWQE>}>"E7PR?lYu|2o ]"3%8P7-+įS*u7j|^ݒFi)?ߥ-O W8CC_͏Dlėu}3N< }Pėuig/~ Bcoև?^SM{_j:0ķ5+@PT~CK-dFo' ;{{ W?}_A>3?Do؟dW? ss~<,y,s~l {"Ӏ1A`&?c6ќe?-6_H> ?y>|Kp I xoAXW @z>&(lO ^LJC?P^[ҧ_P,נ|WȽB _Aci ]a/R2B_AcwY-S:?PO=uNt F' |57[)3Kk"~>p՟%d, ηkZ_ eL ΁~ _cI? :Bߴ7b}MpWȾPf__lvY_%u2OjVf_K|1֏fWd?ԏ߃/!T~%|gC:c @:_!rWg}?z'VЇm"{r/'ZBퟲ ^hW;zC&B߃D{I|3p.Gnn _A?_d^ӿ b{寝PLJ^K`~A' wP 'E"B_D;D$ƷY{&>#rBM߬^i Ͽ?Pˈr|_.r%M>WkO3;n;.~h_E]_]'bڈv7)kDnz[57_ 5Q&k?zMJ5}C?Pf[6B?n_O޿2Fj@?,r&f]Y"wAP׷ث,o"*fB_Io?ߎ Oyb ͻE>dW_B#0 u,aC~z#^!RBmG-g_F)@GƏ_ u?&Qj,GoΦзj6)@P^@?"_I_\Gȗ_OK>/[=_`BBëw Yl~ȏ/D~fW?&"?y« }F\DQxx.zbㅋ Nj"jG؛=ЩޔW{sO#7^?zz~gǿOy'uc&89߃Pǟ/m%!83f . ,^ g o$£ _N#;XfK~O|g9 =-st {߉ėu/y˖=H}?Pdk }N!8O#~_sQ>E?lYG>Q-[b:" o٢^n+&H''C_A'6m{?)HXfKfOث2}ʉ٦]#!?ٕ>~%OO'?PG:ٚ&BKlH|3?Y@z~1[|eB&{Mْ?z~p%?Hy" _LktpK_BhxFKWK-/k5Nwٲ.[⋀bZЗ^lc^'ߌ}%/";-#UYfoPG֓, 5g??>ϱoۨ3 5[LJ>MK|.K|/~PwV# ~"{CBB}/}"BP%<~ Rj|˾m_\3bK,[-2J-_ wݥMj/\t}Wjᅋ[z>Az>!u"A_H n~o @oy=V-_M7j^ђ>.ZiKOdз췊HsFi)?RX;GDDGElW#H/A ? E ZDPثLjoyfBq{8-@o oF&~ψ|}R<} A_O/A_H MC?gc-@"TZ5!HeW j~^?aI.ZZB#Kw|IM|t޻)_@_󍟋}^%@>ȯ 8 O?Py[A?P3>翲H\Bߟ\Dggo#s{߳/_;k5cnI׏e:Bߜ ^?O턚X__{7\B3oW9΁~" ehW9~rpW%ʟ`_5\ΩЇz~a|D|9'sƉb)d_hOEۉ#sQxC@Ο4XxˁWUN99u{_D"OH[@Dh8#mث⛁sd= d_g{r-r>DBi˜%jrf;G֜9ЗjE,ZV+4!~*!淜9%r@D3^Z.Z?̈́1wv6\ѾX_,=s>ݠ/|9/b$s,UWsA_ E@e_\D?9E.~>K,,yZ苁XFϯb!P_+r ?y {!B]Z5^_C:>\o?@|ڿR?< 0@]{3U@ME7jU={M7y}zGDiWo$~>7E~_bIJ`;žm$36&^>-~A}v;w.K$P|Nc|q>nS4/Q^텋mp/N#"Hk9^`\^?a'3j||W{6^~;qr*u _|ML$^텋dBorEJ,?ud1EЗ"rD\e@=0MB_ v#Rh%#W'A_G;QbO"㛩q"@L=^bI*,B~پRW~_ !W-E%/! rjU?rb%sLnZ>*?E2s%r/{MRB/cet1>6̴ثė }5ϴf!<#szK\?"[,J/kW'kM{?j`=5E"տrWZ"bF|#Y.PR{M%<~B{VJ[j5^!9Zgu%[ڗ֏K/ ~7HܳD΁H\Yثs/!KĹ۠L㟉^F|&v@_NA0}[noW]7i}}}K?Χ5 ,G|]"zx?@? +D.P{@^^.r% WWZҧ}E'6^O#޳R wܛH{-&q}뉟fZB-"7?7?v;,dPw'm_M{+kO"Xx=dN{[(ğE˷ /i8yNwC?w:t~:ٿ7Pw P?Nl}`c"C?P"_ثlj/jBSWj~R3{)>m 寖P[B_:_$PDlտp?~:ɟ[|fj|Y~_yb<& !m& K,K۔~߱o)?Ah@W`sx:DI苁(>,I'ukg"?P)Yω _ FBm_sӁ-|~_ Ӗ,~W~y"B-_DfW_ _-._Їzbė(%D;Qd^D|'yDN~!7d,g[{Ᶎo6!^|~~5:o2E@n?I3b'_B?/$RjվrZum^pЏ'=`l'j/jM_BX˫ZLM^! d͕7 B--4b^ jMW3,skYeǓkwhb'\o_yU,>τ~<'i~˓`B'!k6o!! -VB_Nh*b+տ5A?ondpy렯N[*u|6sj YCZ?¯#&B ›w oMm d`ȉDZ5ėI3&43c"ZO%,-ڟm1j'Ʉvثć(\^7:Kd7S }5O {녾-_.g>`{~oPㄿPkO|10D7 rRBmA,ė}Z˻ %TE.Pb{M^y򮆾ФpH +-zjg)빼/u47o> } Ə'ywB?Pėu4_A#nZ>~ n$Hsy ZB׉bo"Hn5&B[o&Ty5o@|%+fB-w_BJOkz`V{/jnwZ5_ M}~;,>5y«̿R>߉A^>(y^?D|?l"{>}5#"P}>D 15ag;1ZxQd?q*2>+]*'kQ^?E㿌sx7W/2 듛7o_}/$w/%,_w->.'j>A|=o C^y~}#O~J BW?#:?ЗjFy'j?M|)'%PYx-py~ O~O|%? ZB?b: lpyA?PY[_ElBk'ꯕP_c_B5P?‡YMEˁ>9"|3QH/ }!'"9{I|!;_W?91AZ9rBX,+>?bO}5!?5@O9B)>O"{/HBgi}?^dW~/B>$2>+b_^jUd1>&~PTorqKybHj?ճ>ׁsGW~'?t~&x=W{gyo7Aoj_dW /`B=.LC@M|_ ,{-{M)S|J2"TE--@z>%jjYkWv\DXZ_!u};bBhdڷŸ}3xsD.P\^,ߌ;eyЗjG[d?wH'u@?L%rb;Q$DvCL9`WK# <€[>꿛6#  2[/ˁNl)l/|~7Ҿ) 3}!eď'sO} RB+?k"-d_yS7G;-Uuk:@?P"oثl_/r#sco$~p!Iۀ#G]oث[_ \o~)lo,7[ڗ;)~ ,]?w7XHwȽOėb%??<BEb HWoy'uxȻ-F,tp5j|?NWQj<"q(@߲M7{? D>_$PK7uk&, gj}W/M/w7XD=C? +3!oA_M"ث_"?~&o,7y~|R)j/,)bEo m_ \I-5īg}Vj~giUdGK|1g= Poď'߅ρ~Ps}bI@z(_"C?[p :o·_Pw,Et~bOo!cLR?la_ohlK}Dd,?F 8ˁt>f@j1'op'[8cN A?=(@?~i"{_4>>f<cNLثķi|3bO[EUd/&~+_B.dK}/S7H1&B? H16YTC@Z_5zjI,iثzk ~@|=!oc? 73j1K-$pdվL,??c@?PoY59kǨ~%y>%}?|,]M }٘U7j&~puзjky_o?/ ~'P9 " 7mXYė|"B_NwHb%HϿ1sv}ثN]7juث]S%/{~挦Фpuj/\t}S`ᅋTO`cP?@$i""Hj?D|5P00/&~P)Y^ }3?^!r^w)e{^]Nk!R?-d}N5O"yM{K~^F|7ث-!ܘ7A_f$~o& [D^TBm[E`_O|-pbO¿ N! oqu|gEO#^xn}?Ϙw?Pﻈ/:Wxy?CWj>HBco=Wj|>D|5{EP[~%~*}{Sfj|Rl!} i?PcOj7qOPq }>A|'$=#Z<j}N{_H`H@KO"_P+"?k_%F|׉o$O j|C[ w,o?-<~B]W{ل lF~j~didS 3+j~!+O'R7{+ -d/ܘC?HGnlt5!>Gg X,#F,ެ1N%mX:)'b~4>{gڟ }пω[- ~@]/Y}=o_D|_"c@?P/kk, KNh \dW+~]p$]k?:7\}|7j6[ڿA5Pw%l^yӆ,ves'y3Jʽ՟d""_Xu7Ż1k-߲mU+C>Os/ޱKڰ~ǒjYU]e1ɇ3k6һ[6Xa-Q?u/4jҖjlkr5 9?6%GK\abN2lشmDi^/h֟vm\}JT2UkXd$"[[mYHeVE5 j^x=͹#[%o!s=-u,:cŖ߶~KõRc0G i82m֊^?]-|Q4i>;ZSڵY4gK(Fn]9TH7L㵐7֧8Z;(WW (Lm#26}Gȣ=/'cmw\!]Om4&N@<`v#:ݧWM/]X2hn_[JuΒ -[]fU=O^Rݸ;`Cx>0&Zk24ď`Obm"uJϼ)`oµ6@MN~neX7=F,՗OQnyd8$/s?I>rG˧i˧/xKi˧/Oz7EZ!7 ',#~`?qaGZGn(ʣHu=?6jtKX3/w]rz{ܽF{L݅K##N{Lx$cث3xOc=G5:5zoy5v p1cѐ<2wFQ$7cE{km4tJ̗1tnx/%}N4o=Sz~%4:-Wqڳ)m7XxqdCu$Fu]4+WG^,G_#8_Ј8 EƼzrԼ{`2ӱ+ܣ|%mcӽ,G]aQ/oc6z}}+[! k<:^׎}p7O] 헹uʯq+poUʹ v⥞F^Y}+I+[q(?-5:%/M:kOw7z;M[z38j2{½^YfB@sob0Y-ZMOBŷet+V!4ziVg ꄎI͋T@m;0ٷϛXD[6{gy#csԎ<.^7D/S(zH%;z:ON ѹ?6<mG5& WQ=9:$-ӝdK9Cb*q8P,ZD"yZ3rcApc'=&C 3%̮}~RϾIhUy8J c]gPLڲ錄e赖o6O<^8&%·Wt7q){q {O0&5+a:E0*1G#yvEs(y,H|SغFқׄ:%2)wT2wF9hp FΪ Lh m~oW̆o%7o0͘mK~CLqΣ;2ڇ\%_e%9>z(Hu/됬}FA`OG4v.i|w5^ja?I?8μiz/ZZ~GC<̙Nɿl髫ccWv߮Ý  a>Ggξ}n֡|%GL~,!edKF6cfh俤-/0f招e=3_#{I~[N ޸21'\%a8-a_itMyY!w#r'=Aglun^)7MUjg 1>(Ɣݻ' I ;{`r ;p~'{wG3N~dLv²=Imh5=0YclW%)aJ6[g%$îy{eaӽoAI? {fG78@߈`oGC>o)}l5Z==R$7z~`i2rwJye&pjl|pDs`̾ n ǼC/CT{Cfx wx2Z$*?>q2ؿ;k0:3kJ˒$fMl8:ߒwoFalqmlI-8< Oq0NKL},y2]vdRIJHj70NE{Ǣ)9M=Գ;$SK/0|AUd=Z<m;}_䲕]=:wmR|N/k -r?;E 9>oţr|Rl N@~6æ͋] wۯ="*ϖKûc+̕ϻ[#1o^oDl sͩ1e"9E'Gd2zeq;W#x"ƥ5 N)x|x+r^شOw?!m'“x}OL8x*suiz/' ׫SPJ+A|;^JFN5WdqNWn>/Ʈcu'Arj\i7#xFG|B6gA,j8q :?d>Xnpwk|S9TzpQ4e[ͺ;Fv8C ZnUNfL4p*tH!d5!izOǏʘ7qGVpuG7Q;#+DZʐmmjޟvJԎtx28:Nz:zU+tj~scFgyGۿv9lw:gm;<=#2N4n΃:Iyc&z Ǔ׉Tۅ׻/>kXlj^Z}:^Óyx=Gi 9NlוV v]'[V]A;-E,[VS,?}'CLtS-ۋie|xm2AHb_1ljN~ь$~^jz^dST~J}qjʴVSV }}^ #u<=Q-^BߜY4˓Yu6<s~v^[`!^}먌3'6>3mxd^fi[F2hڕ4fp^/r4N'z=Hk-<:M+{z0w{xZ utn,N:gs:GQߛR;DlH4:֍_}eimeM2םxZǨl!x$LTЃMd!zZƃ'㣀lOVg8yV>եuۨQW .x3mS\]^ËA޴weXljmӊX)<&\ԉb?7ZߊZoҷmd7\Ivx2țBhw k}|`'_ޖgr3ʗRd<%ޖ#0;NԪbL{0O۝j˕4 |îu71:{~_ḽ4wuixKpO=9\B̙` ~ md[~0mb'~mtեx18'%2i9NlV c5v 賒NW:qm{!^/׏X>WJ+f{O\wj ZVL;v.r9`5^WEi{=O\?dى}*+O'Vv?;eڐ$!m;̎)t ݕbY:-l :]Q{vb८.dlLFq)\Ex4nq rx2ϗ+ OW+W*x*WJx2x+iz u _kNsKb'4\I ߄y+iz n x{^{Kdp^z<={\]^/yx+iz} L3^qgL:ԙ`I8޿& q@](vp wjvR>[ [i q: x݀7Fx28e0NH^/(!ˊ*!eH)79Ab3)z'~HՍBX 8!e3h)֖KeH16p.9Vq;ARnq%M“ARnue^qbCʰRb?eRo`x0]k?h7Đ]qwMuƪD]t˲Wu)WHl$=-A/[k9x'3@|H "UgF}'b]FD|XT_n=X:NsJJI{{n wվ͕4 O9pե~x2؀ x 8GԽέl\ q}{"ԋ& '˸,/Fk֤K2N׹"-y<~tʷ_~隤J[oȾqo3D飈.;Nyy+kt4=AW72J4I?;[hq%MN9\Iîd󽮤xR,ʨ8[=iEmYl/O+ψ}\VQLñkI.x]4P?KD .:B>w2،x\>հIz>5g'!g]њot/visد!F~@ۯ3_]V|܃ODe藖wq??ƿnē; ;S.>-i۴odHƌL>wȀI#Y&*C CL={=/9l>=mlz‡ڵ BJq!wv2^!9O{l.>r*',~' ڠ70m_ǡi{5?<8m>΅ȵzwՇb#*o شP:XvVE.Tf"Fͦ&NI-.̣ -O bk>Uu*ShE- bG_F=GXh v䶬&|Y6U  {Ei~Ư.4k\[V?ٸ–'>ݻ.Ԅ$¡wS|UDQP>v1~byw$ 3' ZsRiK az\՝i?Hze)zԕ-i/^S u4ݼl{ȿLjG>-?^<ﻨ:vMh F<&|h,wLn /[e ir<ԟ vI[Ƌ KIL'ɣRwQEXH*gģuT|z8x5ҩ1 Թ?6Cq\j;REɑ`IqW* u1WlZ*jR)Zj-E27G=#R!2 ;c2^ǶYlNmXgCSl:EnI:M6Kd! SFfI6e\_Cgu1皅BOIƲO44e ,cG"S CW$!WKR6nsn'/BO< h8-sbK+2qg-D2JqZH"vTWF MOzutwI 7UYmڌɢ8D,*""Vo=?\>RkM9zs~\kZ{al1$z`;tl193sg `\aԴ$!=U{2Q.]q(v6ݻ,zưۧF_ٖB~sKz7\`&&bvӓC)Ћ$轠W[Ĺ2ϓHFo~83r{W~&w&q=i߰y.ّ1|)SMvTĸSpP_aLXq[:63%'þq?Ń 3&^u9Oǀy!x}$s,E:^13#MN"P7IZ'BSHS B?q+ >t⫁7v/i3̑*YN 4_-%:C@_5rS 5~L]^`M#8H|3o:-| K\o^/#cYʷT 5>A'6U!-j,#~&Ik%M>G6[5+oΧ[߼k |}WA^[ʷT 5[g}=s6 }!~&vm7jIco#o~w6ZQwA<ȷ]٨KEmN{e)fPm!T{OyџAoR/O{!}r /# ؛_$PJB*B?D| /&fiM]oak\J3 5 Cy+_\*Z_Ju/# uc8 BP׿Z@?8Yqk鿆b?9gE} Oj|~uk#s^{눯'3B}-y}yo 5 n~&px;񳁺0w~Ŏ/#}~jk"~9_A^cIQ-;?Gq(@?{'C!} ~ˀ:>^GDgȾ¿` cЇ:ir 懀|jOLz%~*7#xMp~7ua OAJhep>)9)O|y:?}ǀ7/L/lEk!^5c?:}لo?A$-=9muN,K5{_ON>|? ~ ^"?:>9īTgϜX|5gKWyp&/7]/$C^'ux6 [?/#4foK|9!@B} `Z.ھ+Q~ǣ*Bs_cQK` ߑ?N,BDK|E'[ޠljF Bu"]`"!Ț.PbM$ ӶE"&)dIJf8 r;_0'i~_9Zׁ%"ˠ_A5 sY`^/#~%ˉ_ ڀ^_mzQ7jYo dڧP˷ ɰ?~2Ά~E={Ml BmsE:-++ |ۈ_ p`' vk;-o jvB-^ޠ?C"BG>"_FjƧSЮZAf ÿ́ZķbK,!W@?όͯ HKE.~e?/'- '~P 7yy"y::*Eߠ7k/VP(:+>4kE>d_GT $r M:~,f n%~6뉟:A/#~ț-  ߷[_MNko!,]d73~#r/u~R<>@N{;gP|5>M9~k < ~aG?PǧR^c/:2\BfCNl}_hᅋ دJy܉}|b'>>!)>c?eI } 9"Z/|b?LW((j MVuo@?P|7,C -w_S\Ay!Nz̏?"P?މz>yR)';fW[5O_ρ:B_}^x-+ u|53:7"O[xMi"&B-@?SgD~B->b~ ^ETP/' 0AP"JB-?-sį=OzB-o' |ZEXxDۄ ̈́}6ny#|g2X={m%D8Ab;9@}~HG'C?P?^LB`4j _F0^/$儚įPWLzʟ%^WB-Ne վ3?(Wc3{B̿uT^7I'3Z,ڷޤ}*oąj?ϯi=7zľXBxBO^2Bˉ/+"XI| !?2M/qbksͿi 롟3c,Z뉟 OJ&Kz@h'EǍO"^.Z ~7_[D΄P {ML2=]6蛀zf.|{.sg /^5bnR9R.>D|"/5fW"^f}ؿ*E/' 1~&Z 1*@E_A^O|"~n1*o!D[_H7'D|9@b=om wXn?ߥ]`OmoRO$D}Ϩ|!OQ6xQb~2#*?lҧ-(G/SNN+ _%~"/|3*Kx>έyImX~X/ ޤʜK_0}7x[U,BMz̢?[%:BO_ЇߠH_'~!/Q7MO+W*o2'}w[Mbw_Ϣ?RB_'~#!?`҃*D(A>UGT %ٛI?-X??5*N(̤?YaT¤GT~ !a~eчGߥx)Ew&DaQ~=h#rBŢ'K3gt9YGty<_+J4}7erN'aėBſrO_$T/f~<__xFYH3w|_A{*E1Б1*!e~}7ZE?Y2v/$9ۤs-?.4}?$B_qI[J燄sO%mZH(͵gXyCOTw{Ҿ#*D[hчJ';$ⳊiYė:^ }͚'R>Tÿȿz_sY+G|!cn>g_"\. D|,Uߨ"O[۟TJxF"B_ cczy*/%D%PeXGtB@LBo$Rq?Ql -!V). /$+.# o$EįP\GJ]oPDo#DvB>\n&xv/EOSKo4ע$])j|%ϸIT^No!> ~"oIWWX$jV^ߤGU^D?Q?hO!a^`чG/VM:RB?j3-x\cE}_6@aɟˤ|!!{6#b \K,$ _B}I_vRKLzKɤ-cyE.J}W(r"ap7|"U(6WZ!1}Z*##דE ھ5 Mzz-&ݢo%~",ܾܦW("_D<.{ /׆4]EE=Z GoU>ELE?H|]&}X3Q2N>t>>_ii)/I>B)>cчO?M.>ǧ"w6_}>K,es&}I߭S$@\ܫfd})_ !~HZEz~/c7?!OM?#̈́XCK1+[ZGu="0O*HgE8I}Ŋ?6*/#D|YaO'L aoFl>hM?H&!WLz_Θߥ}>zBfD#}_t]g=i>o>P'*y?j?=&_ 9/U\Gt+ uG*B|.o&D[O3Y/t|\[8hʧjhEKҶf-Uy! ЇRKtCRƗ6>[E|b웾mqR)%f-`чi!Ƥu D ЇuiJhH|"'[f'mT7b nizO8"/"Z4~{$H׏ыLD%/6R>x<8I"P"ap}*HWˉQ'&uZx$" O_ڬPOG~/Hק+/V&L#?dҵ}C EԿ^Ry!Ƈ>Ya*g)b@~> ?h'D9XyR_K_"9)^g+~LzʋQ'~"yIP$Etc"n|7_ËMIhMiN8|3aaW__ekT^K&΢!Nq>Epѷ|"z(.#f o& B 6ߥ sI|bͤ[av4*N}I/W 1}*$G>쿏*Ez>$~1}ȿ!7¿;LE}o}aTFB7q*&B\_BelwRw_K qI|!suՠ?o*_I/>7M?tWZP aķ¿MU_IFŋ~3;*m~`ч !I|!}ؿߒ.@廔%>Y!^?:BψoP&=a嗫˝7¿G~hÿg"_HI/H_w& GOOJy'U^BlJӇ'XF[i~./鄚^rٞ0þFFY_E'}`^/W)/XD1\OR7֤R>K|CǼq&:>18oE'\&~.0iʫ1Í'@ /'O %deʵP_ޔ}_lO7_b|L_'PBDB%-*̚/U3 aߔ5oEo%BZ2ok Q?a%"[:Boo!AOm&PbE_2o7iEwGiE*o%D_he}ؿYkRB%˒/T~:9)ϗ0 Eܿ?h }"Dg wITy%񥊴gv^ʫ>:dRE?KGz-)\a/PDz7iPe*?#A_j-&s tϼ}cпK,3-  9&=OF>?|LMz /0>쿐؟_dҋU^C}1ut}RnVBY>L"E<&WHϫ_Lڤת|5!kk-[,56(/냷~ʋo'~"!0*x@|j*m&Ϣo'~}IV,Baݖ\8| aa_Cutʧ(gGw_&}\h>ߤ|Y?$ZOt:@E<=nyWR}{TDۤZ=įRM7" Ї/YyMb_-FfBONn7,< 7-߲_;߱?IyA_'+b~3>?H|1!&=dO%m_Bs~b?'~"~~a#!" K6{/_5&O&DIQB[:;򄗽SߛGO'D0_}ė+'gb|3Պ~I|>!j-1(,|wo!YD_L?xמXJ xYJ-*)'T>?NLE?GT>[_S!kQ&N$^.j|G_+ TDg~~>/ YQׯc_CɿM-f gчcߪkF/RvBߌ[7iwA>O:_Dw!$S,T? 3LŊ:?oJ~Eˈ/!}'g|?%,?ο_JUėBR?4ߢrԃ_K|"oo6AuMj#Q쿜z dU&F aכ [a _MbT^Mo Ї_j*DoVGm{U'}/kg/P'IdE\Q~⤾K#~:!׏_N3 1}ʤT^AOEw񕊸>?cT^C}֤-9k CI;7*#D`=*'qIZ=7(E>s __L|Bk&}G M0>>&oY)\">m)ˈ⯑}AK|/'QYAd߬p+'wce\'>Z6J=6|\3oxӪ6پi۶ֵm*Ə{hk޺mOsFF**+,*cTeێUȱe 5z{7mکNe*y|L[O{>b[OFF$n޺it908ظ1`ua 5Clf:OՍl22° :*:7f,m|r!!Լi-0m۞-۳֩Nlj:. gJPFNR 9Ӷؔa ^2]6rwfAkv8w0%S1Z#-fPw8mzx\UsΌT)d)p'<., r^D*Rtw"׊r9[ ~x9.ΠdlVɴZՓl~8CIGbSx=M/6@9ǚa-^=].[=u"MpfOpfÚNt6Odg0CV2'=`ogoϾN׬ w]ACЫCf^kJO#7qժ,fu(@<2O+S0@ͽnw7"'zTMS/R'0tC0eqgțvDJ6S/G3?"0m3wSΰCn+\WOkvNY>uvП*>(x, Nr&4o޴ kHEއut=gvO|Y֑|B*G`tmx.N`y 'gsrԮ=-Q2SY<:ֱi:AEgb")#C6ΤR7gGͼlK~^׌g]7BOE'OMnf϶Y'SdSú3bQKQYM~HdP_L܎d_@x8,Fn߫=r50ǡJݱ7 Q ˚{k{cM[jVBAuZ/>U>Eُ+k1Kǡ`oc̾Be}}ʯȺyR3]sP3B k;1DءѮcv`:?Eȁ}~F?)2tԯ:D=~Q\ww䗉kE ]L(p~:zYx@w9#ԡr7`g!/^7; lk4/1F^&v%fmPԣ?J_sq8ߛ pNB\Vpg_Zo ];vj8~NhzypZdo8ʚι;q'͌go_oZi7rtԱ%SbIl,YD{{ZK !M o_gERGϾZ^Zb:2L;=r+mfF0`y͡g M_YiJ%ðu>VCFQ=Ke Y2pJȪNa-Spgowx`4g:NtUd?/ᆴ2=?ܓ>#RXmtR2i3dWw#\4lC[s 0qbqWeyٴ3Ghw@˘j{4ˑZ%в`|u`𠞱l::=s,tkp5Lw_wUYi] ` w)ST)zH+l#igO'a|5T#G9jaxŇ2l+p7'x;^d ":r{әm2kΌWhCnH ӞY+.] e  LT8u^"wd4P kIt-D+,ďOuw^ 㱮]r"/8ݵ; ,*Ew *rVP[r # M'Þ_#NY6cGUǖF]X04ݜ?s5mүR&CiK―v ۑ-0'H6e.~ϲ8S[>.m~= ig!2||*54γ ^ʒ[eC9sGc3%vm4C.Y#<Xg>09Yߜr,fn J`l{W!1{#r?ߗRg%4k3?'5T\T`wGU>ڝg)PUPYZ뜎-pG:PMՙ0ka2-"mtށl>Ћ̫~2>(8u%eUriIG\\zk0&1x\nw;3>=)dE{|c@ƸW+c'N+[gM]fQs ֞jzʚ:;}沺ٔ:va"uWq|"'u_,Xw~H1m ?G?GpB?3S?r<o9ls;8QqRʛz *J9j,+xgsP7[j_GC^<֞Nj[rQ2sgcssTdx'9)hP- .%;N"'t$۸( thu)coqZ-4Ѥ-zœކx۰WZ6d}4Ws r܋[z;Sbx<-jeEk~>]~26@LGHr[`IM蚬85)~ z<9 ~m󠊰s h$ FI2huZܠi9[-u,(MrZV2bĐx9Őzd.RH#yC{;7hĞDh\ozg"Iq5B3OØZ+[K>%Lּ~3L_q\f/qp]s9Kr=\.t$3R=^ҫ0*877{TU޶9N I%Hmg!LvEfJ( mb~{C,}cs ߦw [B=Ɲ$hPGM, :hó:HǛ-ӤTwUΝs֍`W:fBVgz6fluZlfǽ`\$ؤMܜSK2(*_jI()GK j*_Օjiae2huZZE~/տWl TEwI0697E46٦$m%g|i p<| .g܈hx]$XuwMVkRdѪ?q%Glz?C14xQb'#eq\p춷fcwl~dZqYoP_QV ߽+$y|h]EסOLRRp<=g!Hx2."\DyLbOP#+)P3TCN6xH.ߔMZ: A$S&݋m}.ƮWiO/S.zLeTí9:c➹l]BǙ_omg]d?w._'r{/|g7-9(kdܢ[59[]{]V[Ւ ֜bw|!)v"ȗ6ۓ$ ԈXs؀;)!Ƒn˸re7C.UTМ=6g+e J <]sjVhD3ͧNBސsoԐlv{cV7%zEpthinlm[x{Ge)R-($/ 9[mWK$d: 8ރF[A0,  OuIkpcߍx(S\0ļoN'P=;0 Y~+qs3~=W*'zx)j'r=^_25ZQ=8{8oQD?J-_Eo+L"PG-ɋ GrO8Lo8޶qd #ɪ**Гtʐ_ gus kn!_N(΃:o4Por+OM8VmR( wRY}" *% `;~2bNhII{Lɹy~/v Swh݁uv? ȇg7RbjbLTH1V'yۍ~geYʪcTA&]WR{7U]*]y¢|Tĸ> _Syv/N/EbبJZ51UҦsP$L :IGϱJUE ^L1WڌJK*MHCa[1eK/Lse"E[3+Sߎ(^S r y6Ɛ{1"N÷Yb1Afkѻ22B]:ӅۜR)I+c.nbO~8Vi@ֵ#* cZ,a(,VB9Q 髲Rcdԏ}z)bYP#m)RgYsj&U,?L!6%]yVcc Gvw ke)w)fnB{]TWd~ggD-E 24HzZwq>kPNߕsr[nzjYzSj>8{cs[Ӳ;7e?ZyG:2k`W N]=3gYwcrB[XtKGS@0OR.wY/WûvZ下W& ew;F%ZEXiC)W{0 L=OJ(*Tv3OԞ95 h&>Zr "s 䮖v5^Pm>7vL)Ulv錣ζL۩dM4me;)nlHCbYld5j4L( kCɛ6*`swyx@`s*1URTSؔ+aI\'{s嬺pLkpL8yKw\&o›C:3]uOArY= Ec2UªLcj 84 srzfQ=87^,ZQf~{zMil`;][!q7n]w$ԭjso#oE'n(9 [ yry'W$PTW{WJ|&ozGO(ó~]ne9GoO&D*B gS] -W,W_C!D*j>9ėS$Qמeч 8[H|Bo|r:|E-%~2j_9^FBc>/'~b ٗ7Q4| ! Їf)5$L\, >fI`; h-%Dܼ];}}Tc URq=ٗ{/UBIBǤ_D<@;,w}.&qe1[ۿB%D_i!#Dk+CWi7|Gma&}?L^ԤkTG?Xꯏ}"< Qg+/ka<?'+*/ھ,Iި2BϋN(³/'/&~&!o"/%Jq6L| y9uXI]¤WZx+I.!{!~!{-/~_g-*_Mz}>Bѿ$ÅE}IoU$E/-&}֢J|S|Iqo'~^;L^&עn#ݤw9Kmw,^*_!쿏Bp7} aH> ~jt0Iį!5*_K,@?n-[xgvO`pI|"/n=OR/Zc/T^Y痈A_6JkZ?` Iߤ|1~dG? ~)!C*_FC꟥ _X_ʗ#ʟ b%~! K&_5*_w7)nr=K=6B߬N[ Q?PxVIﯤc/!S$?/>} 1cB'g}xOv}VƷ`D1EBa#]XMNy W qׇ|kZ=4W啄9\K#}ؒ^\q\soḀQ*D[LdEԟf-Sy !Z$ʢ?MڧѤ*"D-Їi_Z&M=Qgƒ¿?Gkd }X>4N1!I奊?7q>D|"Cf o&|)!#NG=/S1i^RB_I,k Q~[7R tD~ܾǨmhk,fBzW}FM B!I>5*_M?E:> DnT^ +Σ(ˈ_D٤W|1!&ɢ_AE%^iҫU{U>쿚&5du&ݢh-pn#oV~x_hwsI|1!6>dчDC&[ Qw_H7B3*_My>R>?k!; 7\.~k"B/cӧǺ &4}g)">%~6鋎} _/&Dx|R/Ub~IZW_C(k&}Cpo|-/6 ~"4>{.[# mx_AIWy;!am'Aj-(1W?!~!/'D̤_|!&AJE?zؤ_{$@IZE^=joUoaTmi/#DO>2'~}Մ(?a_įQl%O?'D7@g)_@! QiX e9*F>[ׇs)3>ǚ4N(?Β? JB?㉯"!l5<ҟEk"o0ZF7{x u|sج%%KHOp7r_Y߄g_L(5iSHa*x Dϳÿė)įת-ϱ~-Co 3\O\EZ͹a?ТDqٗ*_If-fч7)'lւaO,:ߦD0sUxʷ6#DgߡxG ">" o"uF&TqixGI%M#vK# ]EHyME"_KGMB?UϴeJ>EXI6 wįPqxIUB?-o[C/)O>WoҠ}LzEHtʗ|Gaj+6kLzW} ЇgXʷgR5 <㛿 >yXWpT.8W* W~I k7q K<+h[|wߨ|ު<\Nەg [=n"vg(/w)kSkv@ycM>W+u@;}@)_R>A|!ƟO?I1\}qWϧ/#}YEtBgA?'RqMlBC쏱OEWlE/MN?n5FL,EJ,i3T 7\T3 4+9~b,E%vʈf.7cMd_dgjQ~ g7>Gj,?i\}EU>_8_D<.2_ՎFD7_G_ka.YZsDY)/5gɢK/Q"KMjT BԯYFVXadEK&y r|6iKΌ)r|s|.I>rk enZo Hog/h#Ү|wC{昿enF|"WR?Z9rcXKwtȢ/$~"G2\d.W*/r1i-r ӉG\X?\J"E<b&~)2^F|"?K1C .ry> ~b+ /N&BoM:`o#CJK|0Wׯ !/s&REhO$1Ix>^1*¾mGA|"O$~?S儨ay|6o!?R?\+17N굣^'tE_H|QE>.r/T_/&~2n3WXSZWj.Q^ט:OS5}eכO'Db,+Mz+ aM&=aч7_H#o![{IPy#!{Iÿw޷[M] ѿn Ї-]¹D=/[x7_K qäo|!CU "6N$GLE忓&Bq"D,@?nɟo 疯?M| !ISZ>l>/IbB&}բ !I_R.B}%]w)!kdo(,O1?I:BwoP&ݯFBLEOrE_I?Py3!LE@judA:!J}R>zQ8~|O}& h_ksBʤ?[_IUy3!7&ޢ%~",>'Z >T >Q~r'u; hlj// Ї?/$D %ږw' տh(@_ݔo~@ׇ+aԬgP/zIc-69}Z =O ė+&/$ EO_wӿKGǛ4Ţ 5 7ךщ*_F( Їi-_JyAY;LEo%DGo3*Ivmчw_XGeѧޥzB_ߠxIW"BLEŊ+tʛ1~0@ Y1*[O3@?j)@(e$%C.K|1Y ~1sE'bפo|"ݟ_Qylҷ,+ė*b}-UYh-ɷ| a>K!]$>o*HDo}%i&PhMEH J[=D,B~D|bQؤ|!OO|=L|JGLʛQ4}+W)M7" ЇXpѿ|ؗ?P?' "vBgK_,N,ڿ6)/_&G1㿍~Ȣ!#/O%?K4'US,u#/LtEZELʳGE>_M6mR'O|,VBwSع;"6;W 8٢K|"y㈟EKyW+Σox''!k }7tWhѧpYgO_L)O&^'97>gJB_o%Pe|~ۉVGPxY;F"EoxIw2B.+$C|!^k3$_M')%ywtEŊh_it+ Ѿ1}ؿ*BQ>Y?f'-qg+} w oPK?M|!3[ڏ5>.Vb_|kҗU>IK&=bч/_ׯ5O#&¢_#>F(ru~RB7Lq}+}ӤT>Sg9[&=dч?&}WՄ;&=hч_-j}'D߷Oo o!R~ ~Y_XG\ ᗪ(c_1w*/%D6@`x).kߒLKqIMERBISy!Lzܢ#~b%E?~.UR_U^џ`ч_8qWb{菷q+k<Vy-7?ƢEu!^Ɵ|F/P|Bȿ埫򅄒_LM:9k?(pi a9Οr ]曹<E_BW4B͵F~EK)V~ʧc_J E/f ʟBot-?ZEZ图_y:W~%T_c?g~eNrq|1B -R_\KsMRS>+LZcч+3\K7|!oU>7[F-N[Yk:iT>U&̢7SoLz+>}I7Ya9W*r=פ竼^AyY<Ϥ-|*]b}^FB^H>Ȓ?7ZHMgeھW*ORW1>쿊bE<"&V3 ?_cҝ}-ubz= ?F/$D~Ioÿ7H?E/o!( " 忕9(ԿoS >tEET~~ʗ~m,W(n!o![ 1~R6Biܯ~ǻ>IVTBϧLE?M|b.>RB3YK.*U_&~"ևR{LW Q/->jER/!D|~٤Ya+Ul!_跐ȿ5[ʷEWh῭uPyAڿᷪ CvIU$EDARy1!ФG-!*CG&D3?XoK>Yd&\5EN|| >&">R<~?Jci- q}{˳ :!W]NpMʧ+'_`G&~"_LzL5X_Ya1k 3|Xu'?퐐+qElIOZ?oT\AeTokчߤ?a_G%Z _?I|+/[ u]-O3+g|"]?e<>M|LqׂsL:W5 ƚ4Ǣ?[Y_#~./ #~B|ƫ|!}7ń?R`洂 H _Dkb" ,ȿfM&& PGAI>OF|o3!O?/ o;!B+5~P&~!⧚+~X]P&B_|}s|ݭ _)0ZXSJV>/&D?$L,StBğ+ Za労R`* D.ЇW)֐}W V-Vm?ك,$3Fn6ZZQyrV |*!Ow[aBKcT?~K Q%i}%\A\i}Vp3|:T^E돂M#g)[^>] Wh~ Xi+T>wE ~"ߕ}n\2E\H"~"?p{I_ӧ|~M:bD% )/1r!ЗU>3|+߯~'WL9+t ѿG Bїy>3 _@|%!E&XUMɢy1XM\BK-7+?# iW?j'+R5&Neh?: >'~&^$6$?7O D٤YQo!Hq2E WI+_N4E^äT>{I#ۈ/WI|=!Iwnޫ9~>/s}}~o!!}|D_]E*8O]&}VQϘy>"BE/ܫIt +@6 ~W@ >"BEpQ$Eo_-Zh\<o*@-E>'*??$>G!~daG_hsTy I[x?fXJy{Ώ"Oo|_w_kHO&SB5Xc+7jx~\嵄(aq7o$oS&?{\a}?Z>Iy*CGEվ<oրƨ| _F_C9_"_K*oS+H;|'jɊeҨFj*$~:oGM SDLB?F1W.G-_o|TkQ>3gчk ῙKFL~)h2%]igBp3-pn¿YW5į$D|JOgrT`i_(~|_G[dO$o~rXoQXO,=ceHwJvP|\c3'śVmިe=M۶mSQ4~_'O޳fG[m{6B5RQYaQ*vB-[۶oӼmvNu.vrp-۬-Uc2uj?6Ze9){pߎ0bj=zK3y`ogoϾ ﲊƳmVsQke-a-F,דS`$ s8NFGFhZ[[l>ˑ&F?ר;iwzF" Nţ;89`{iөtMd˽6 \F5؜륧}!Ti'a]xKwWg'c|**eXrzr:=;'=!ԑG^BY9̩xPeͰ1R u:y!|ϙ&TG'nHbYYb/Cݭ={U^VGԻ8T#;ƻ6榭cz:c[}=2[TݵV3(:uuw*0c`kWg`WoO1wٍ1Q_|G)?Ͼ|yR1{7xWg gu449Cj `W'5<kGC4lTmlΔx^Y㮞MYԶ@>FW% 뇎%x`T :eZ`B"? p~x%NSs:F&7?RC>nTmC~_q[ovLWO`WG:K ,I>Y$g76U) ξ~&(w}oG9]&MiW%o(knw;lǝ43}i53TnΞ:}*C 2i%hOAUkݴNhІNN"}}]_WJm]'~5nW9ŵ; yC$C@/G~ $8S}b0@wo鹪1ZOcordFL ?m9Rv%eZ7+MgGgt+^*[ؿ{>Gĥf͇J{5T> K߲}W }gs9ꦁ62FSpdte&7}0r Ngm;}Ifj;=v"ޙV[c`N폗Aq[r ΎeN=❑ޤL̘y(m j!֏J׍qwd0Y<^HvC Lw]z;z:wDFs+s/oa-RfAs(vvwWsD3vIJV}a\B](w:ҙ(ek{:j;Rԣ=*xͪAIv7b̚S~<mw3"nZٺ}ئhkGln&5uvbƵ؅񁧟_ߩnN.jqo{a3ƥyO&Sʉa=]&z Tdт|sJ|g_)rtgmZg ><',\ Θ BB$"ǝ+gkURZ=^q9Zg {tVǨML/S9[=G- ^luZ46)4"8Eӆk)HtCIrtqH/)oc'ؾ$ [YX{#| x9r-nnԾx=9yȭ=[Bpi#df΢5HBhuZs''OrㅣJN'S;F|:G":NkǰΡ͹iw$qIIBmWG1ؙdi0$n͉k՜zBVķ L}"1azmt+^x &‡N'u6681f`-c=L%9Nwq%|K% ]Z$XjfAa/s^AܪX\Xy9Ϩ ~25H#^MTFobMR6&ꚰ:HǛM׌c|j'lkr8x]:$XǕw]V|Msʥ^E9[]V4[g|EVW>_W&SVW%=nѿWluZ\9[eo];('a(8UsNm`_;kx#Ot bGdx&͔\=n;~>Ndzx>۴-{d^!%w}΁Ӡ"8W 9[x{uz\縗99ZeZyjIFky'@_# {po{ $udbi({ |fcwl~dZsYlL%% %Z: Yr}ʕIb1WR߶<2qɫ객}Uy,ꋝKr]NrJ{WV/UKKx}iVw%z<_}Rq۰i@mvQRj,emwc#R8$"%k`ٳlŲtWnN•W9ɎRؑ>]Mvy<9IٖN}^_Hx!ݑsث)ޜv%F=nԿ;sO-ɶ.|ܭtPQl.} \)uYZY|ϸp1}0${z=^wl tIMzܤ+sڭkV>)=xKaA={=p%#,`${5+==8Ead*Ks=;c]XNx;I$62EcJyO&+$e#Uڨ`&L{ @.T\xO` &SV%i%q8rzD-Y=L9ZZ- N9[=ѓ2"2[;C=3h>Cu b#07\??>3f4bd q '9 u3FrЭ5Gci/xJ}OAwr}gn93eBek@DKoOM۶mM i_ xLvyK C{u;T12z$kG釶/=#)hJ.Uq)|)&xQ]QW0quv<Dnǀ CGh9?>X|hl} F>lLU׺:/H72NDc`uϝiO|/1p7Gkyh-J>w?K+o r%s QC&Bs߬Lzʷbx~>{[_7Iۈo;!/a^8KؗC_T^8Y_=@|1!7 'y U[Lzʧ(Vlчo#D﷛t+ aҽ}ؿ*ZNjۈ'DNEiһ,<n#n+.Ǥ| !^>oG#~b#Mʗb|@>0 Q!~ !ƿ;M?j,<#D>nɟ?AzBiп7b|~H_8FBIOֿI?Nb7C_8 -p=^tl@}~񄈏|o~+O$DɊX&=b#_B8o~ ~C|!-cw;T^JėO'$~!LLBJY 7kHqB_HXq?A|#!K u$?NM~(D|O0턺kȐԧE JhOVj,9F|"$F]x'YBU^I+kRl f 97]>?:xDE\v DSh*͊kɿd$?i&Y_V6_jo#2o3!g:[8Kȷ+%~SQ߂~oO D1-#k$^ B%Ḧ́›roQ.cYkZ,<꿅[ _k@ xm>Rf-ڨbBԿܢ6?U+C٬߶}L|"[&Dm#V/3}-S Q&]jч;_#R MX+~ŖiJ8|+ aVB]*o"]:_EK|3\?N žBߥ-)~ }y|}˯߯<#ė">&>GM+ Lj"t QkV%눯#D|]O|!ƟLG~ =ۤl"dm^fG?bi׿g MD@Mɢ/ ФU^FyQ>hɿ,geZW*OR}I/V,!6*F5&ˢ%>Cu&ݢhכV>B>O`қT^E{c>ɒ ݦي<z񵊺>O\{ݤ[U;XJc6Kpi{4&)?և>7*LIi;LK~ Ї[4\*F1E쟈7*/W'LE B̯2&JB]Y3>ky /*y< ?D>ӗ}_IDB̿"~2!>rNok>Ŋ_פU^G/@'A| !??$~b'I?U>BI>G/LzDѿЇG,s_S_CU^{y E|Ɋ?Yx'/!VS}OVF֟oD^F ~'h?L+1>aYQ%R?߄qk CI;8h@uZpDd= <=y&ז"?W<7.޴j3{Ɩ54mֺ ?Hï'O޳fG[m{F**+,*cTeێUȱe 5z{7mک`Ϫcj(Pu6y릦mxO"?II)d@i5mE*8ܺ& RmeFn t=S?4`rtێMZ벊MG*j*ڙNP}JmydNzJm-)gL@Nx12N03dgށ5r|3OР>sۛ74E'o۶gm "SImrY{Hw),uͱ O-O@}j5`UCn3=lM~n`!˖ө(A ø:>^@#cr7Ws)We뎴?p*=prDKlovF'A<UȔ2GAgj7pK*H* Lco ʣ&SH檍v>gS |&e:tԯ:D=~Q\Oʯ|{UPIBxyOkTFӲxJ$g{o1n;s_sN?uP': O\Dbj,zm@d{Ȃq]/r+Cx?ȆJkʴTuUc#mX=޺9BcR]Y^b FG|/㽋-FmmHqj,YGg[vuء3ki`OJMj!.}O}1 [,Зei@E^k{'q4+-0~ F\:rƎqHkr$.="Jt\W9A.KQagkZ$Oh\R(m 0މ˫ LZhtvq)]`yu4RKŪ$i!xb`I30Ĕ6wSk x}z+^x@a,ZfzgmZmh~5T ]ฯo zH ?8'g{<;v9_0Nj! hC뗉¾WT͢G\㣝9ދfFWৠcNmjLZ xI}ljO.\~&3Vr#/7}-(c_SL\r9k@:)/@{Ȧ|?T(H=XsڲZ-<+ēg̓%eïfV:^Ox#o߶ JNN9vsRr^x?a?.ZqͩU8v箆 ^ ?B_gj'1)sۆ LGf5j7O#2 r.u OJp/sɩf9<;)_;'9wœGj8D}z 9dž٢XxUL It8Ω凘÷Ǽ'3o:5Fk8I^bї. T_v d)(}F>KނQ@Ttoѷ}}Ňzÿ;__?#~"uM]| o"loQ'kK_b_3Xtg+%ʉOft-"_UXq%ODoV@kZx#}$>[oKS>ϱ}n N?#o:YyhNm~}TrB Q*'9^i>R>nT :6@DI~!̯o I೜F9>c}%KhN 5_x_'}E&}Ӣo$IM \;|ݢ7?IKo 2¿Mz;/@+}&C_;%N_$&FB/o&E儢/D7H%!Ƨ7Zg7I~AM̈́mN m~N ;,įqҿ>N7">Ef'v_PVB Їu۟}Nz|Nzp Qw*/c,zO?I|I~lD7٢"~"O?cTl>FUdnfB=EK8~L⤎/~^8dP웹C:cx;|bBw="E~$&)<=qׇ?$Dr_oy%!G~}1U?~B|=!OOǟ9/_|!_?_q1a'񅷄| !X>%Kq,+UrB_įTD Q'~ !?8/%k Q4O|!~=!I;o x@8FBoK|?Gߓ7}?WQWaX 5>_+ǁ_Bg/%}3'cG2ŕ;?$ޠ=JMZ7Ha͊ȾO_JzMϱqT yoToj ߦqǏ/%; Q>HESW13 KH?!g%~~ПCo~2ʽBB_w6xν-Ksԯ2[xWqQg)} 7\bB ?K}[~FS ퟅHYEdũ`dhGI(w~ Z/"뉟S^3'"RB/#r'u5 3NLBo!Rqo#~6!_@;C /&~!!/!~2ҿFB&~:C|+!/'~&K|!ƟN u}zmNϰ}I}_M_~Q⯋Bd9 ztRΘ/=*#!-ȿzB|Q}%|sGd'}?At=5I|\'񅶄|a(g9ɯ߳?ǢK Q?SP_x_ZBF~">_$&eϗ8/oTlԤU2'4}ؿfVr>?_A'Dx|t}o!oRUI|a-!o'DoGoQHߢX߼Cyo;P}_]ENsGBYp_7 B/u(߇W#/$/Vl"L()Gi[1Nj~Io%D|} _r_x-CH~I~Mń9ɯ{牟~PLDZP}ؿ E$D|5!*|_1k*_HI|!-M}E˩_w_pKWߴOW_oCVw, '_8KțE_N}W ׿C H ž]"xD[Ƥ 1>By D|_~_+ %>G| !, ߨJB"'g|&ZJ|!119N j-8_w_/9^'T#DI|,M I|a-!/#D/@_ոG~/NF|}O7>"v_@KȧzZE">Ho᳝~sLoчT$T^E:Mϳ_E¨يBku|1"?G~Oݿ.->/=uɄ5N#%ob!`G5W6mЯ#JBOo :P"1/?D>P0_1?rA 7?P*'"~Z%ܢ)_ĢZ؈U֩_oPl!fޤ51@7?;~I[UV+%;LPѿw9F%]m&_{Hx0/;Lk^/!ʗ>?$~"72w" ~:W_N&~&!T^AפZQ}W*b2i@5(_I[aZPNxФkU^G6j>b1>dE_s[HR>ֿR? !/&lK?K,/pR}KIP~8_ ~5xhxLzH~iGOߊ|g'd&&)[_S>U3.#Ҷ'SO:))|JOr?IM'-M'$3=+7CG;8GoC~`YݰEO=j!IPӟ zpz>A~;/KYM^݁&_ݝcO'_i~5{̫3EsZyiÚ~:{'7+Wzj1gGP?Cn} O^{ 5O>@/?zBUdz: x(' ôQ4<PspsPt~~5>I}9euIq~%^p։S F7.q\ڂF.RSMe@nתfEg'e'!=ga9=*+`Vk3cCzD~I;)ξa[x=ot3~:+U;a;}~2OBwΠ*]$MH 6GRI| 6+1|qx}/s_8@OC6T>1IyO{)n:Fe @{g6E9mv'%Q-rY@z|?n_L$q'_I$%#5e>o9džM)9[ߠ޷PU WSOJ9mqɌ}esx>v7('34FNs|v%f~^6 vDl\OR7X\'o:~1[:};!Bz%sݙ0m$u~66by߳HGC|/oэ~u-Tr)9I/:WVm{(4svTNܺu N@cvPNoD4%5߶7 d؄!iA) n~!/~U)Q-S'kv S`Jiڬ3k64q?XiT'[6aIm,p,$#d|Y`);:&$tIWlR/[>!nZ3 ^U 7O!Ó1DrwIIJvDH/wIĢ5~({h6ct%v TT%Kt_U)۝ڼ,)k2MgǼ\֟`.4Mі7R ձD}&^`5$۴SOn K[5Oe5呛d1})ϸe˺Oxx&2aP)ACnf5,ZmJ&_&mO-_=8Pc]:c2ձZoV\<_;8Kf8*=d?e!(%0`J(G3ꬔjSe;SS6nWdvvtwWTd U:o >`%^mU"[*2ǃTƈCW{]e=c lp*3Qi2" =UV++b5/abH`Xe)  nXnZ/-ri\Bf>E?zi=U3%ΫP:[f!w\cS;\/a9Qegdb0+Pzջ zKl DRdja͂S˓KΦӼH A@I7&۬LӖkgX]=mhPb1Z(;⮲+&F1g FIZ_hEG)7<bh%IYo[ڛ'؝Q꺨c\zbqPQ5gV9)9Y֎cX27rjSD7q8'q(bXXT2$S9Uf1T'_]?Zzvcd)s5Wq0VM&[2,dUuj>CAV+{zIݎe],Ѳmz7o])#և 7ok2Oq gڭvl=;fДuN^\"c}㣻$l8mXߦc{<՗{}(|9}'w(rygR1%QMšwGS:YV}waǽ_Y]@4ET/OnLPy !_SK'Q7/a|E*|B?M>FoϺDBO9鍼sϴo&¿ 壎{G4ſO$O&DhF.Z'R>#Xoz'| ?YɾB/!D,ЇYحy>yN;*._BYI|LڧI~$O}V2>o&~"O=S"BI~ կXq9o|$/Y.[~|)Omas>Qq;$C}a_D_Ew@h=&u|!r+6RuorB3@Rqٗ6TJa ~I=*N?=g!W^r@hy;5*G?fҋ-+rįSvB;$7lwaʏ7Bo"D @_?a%N/G Qu0vUO$DɊK^q_K?%~:ȯ##UI /k_8ևo5m6ҟKN|%߭/#\_\ݤw|5!]ķ:BE836">ODEHw|bLytEA|"o?dGT^I0KIQs_MO\)R >)K'/Q%OW}8g#Y1|E_ŏϛt(b3)b)~M|_ߩ|!EW|ג_6*_Gb}}U[ ?_3*_Oz>Òzm mz;.w? Q'~T/!DZ"DФRBC#KS*nBϔ?GO% Q$~"R_[ Q_GH|=!{eopb=!DBs_NKӇ#~$6zCq_F儰oca? Iq į#D'~"lBxtzO(nZ8Xo/du#X/Ps|H214V 5~B<ׇc_D2'I~H1!K aI I!O ~"֗Ro!DN&~"OT'DI8}7~r'u}祌~6,$U0 >7\b}8N bWڶbB]?jM20E~ ՛4GSi2cv}7E%͵Lh+ ?L^kчW)k _ WOZ}_/Yx.N%HbE\߉υV>ƢWaPW ЇfK+_C[Ie~Y1H|l ~-!c#fo$mo3mɿ$ۈHO/c+#)!o%i)v(~^i1t (*&U"BwIG,/1IvW2Bo_>lj_U( ѾWtGW~ !&~b+KBG&BwI~!o~) Q@_]K|! *rL/"D]o+-/Vg|!}69G*Bį&DZxBo!/"~"K@n"~!{I/eF~LW9Зm^?yٿY'}@/F9uxo.ZHIW'Ƿ[x߮w {}%'8޳&)>"~a9!~>B$ŘLSy)!G/#}Y(ljAO?"RqElBsy). _H{_%_"~: *7׉o#D-˵D{_6*X\_}ǤX1EIWy9!~~dч?Co&=JBaAKt@3I"ߟʋ Cz¤_Zaa*$XgBUyb﯈S~mң%B [OvLE#P'|EDT{gO_x"bXaėb|rB#~&!o?T^A}߿MC| !7@zEzK^]~>P֧ac gj GouIWDWT>P+$T7ǪT^IUÎ>_%{a ר|"_1&~"Wk(fBG--t0l֒*o%D Gs-C¥:޻XnTy"-H|"|;ܤE?+W\LR⑿T--*o&DG-ė>uc~O 9Wy!F<1?s-ޢRB跛tEm!դ*N-[8|儰ӴzeLۤ=*GIe&`ч{8_n^&ķ^ 1t_t@+E_ʾ?@G ?S+ ž+oROnzTyȤ,ȿE5*o"Dt̢WF'~T&Qy!p>?bcTXo/_G3?ߠKL!/4i-u%~>q}/BnT E\H}I#T#/6&"~^bҫ- ?GQDl+T} |a{T57*迯5*_I:eG'IOF`ҭ}# Qo"~66o'D5@vo DR;H]>=g4Z ;L:C&Ȣ&rN4*N(˵GMG V3ž?N|"_}¤OP&eG"Fq.E.E#D|R?YH_QB/^_ ~"M Q?%>"W{-tM8׿Bϗ-_!.:񭄈o+Qi}*LI߱ÿoWImI ?%=򽄨O[H?d sqR-~A߯ėLa⑰${G&Px{ yWzB?ܢF| Q? ~b#į DC|"0*o%D Ї#~&~F*o# }uBO žVC,?)Zپ~TL'B#v?3Ɨ\ )$Fk Q"td ?ŊM_L|3ķ("> gƚ4 F?TRfbBԯޢg?U'/m\}د$1%RZB:@k,¹WG|ןؿ/$,"~]àQy!o &mل(2krB ~+ ?VJQקaRdG&5嫴Yx>_"Zz:5c~dg6&+U嵄%@_H#;OIBE\D wIsQ>R_J_~=K@SIdBŊ7T^NO g|Q#+'D_IB5!ÿZ,tg&]bE]GϤXQW?Moac3XH?xoȳT^K9B|"#WtL >G1*.&0z/!D]??>?GۿZyA?y᧩'*">|/4FIE&Ģn$ȋ-tMU^,r?KMYs >/>O/W{F#25*/QLji-Ko AyIWlB;"뉯VDz 1Ko4*_F(2ܛLݢL|#![_m&Ck E=#wX[KTuwZ꟯ޣ+cZ" >K|gtO4S9)#OWH&}?BLCw1W">?j,1kMb|I'Gio>!.K,ꕯg/I{H{y>+l _6}K+jםԵ sIXa)b@IRBBM_HgwT}%z~A8|+ae,C/s%!?D*B?61'8Io#?5*9=d?3}s+r¤GT^Ea~oчGEW+.e7*_H} ~ֿYE-< <e~%h /sUiҿUS?עMt[U^C?Ǣ%V㻬oGBo$~" RrBOq- BOy˯$ g2Yx#&Bhſ&M_EGtW9g\/i"B#.C<_EHOS aX7~1]Ziz@ <%>Z&ZI>3u~9Ŏ#j*"51~TTl@^O ЇY뉯:߅ mENo6:ԟO!i2>[@|"Q_^iEؒ4 mVyO#?X]aabXIDo:ǻw(HW¿Xx_Cߵgu"/ޤ8ɱHפ}7Ԧ)_K}F|=#lO'D|aч-ė+CIU^Ag[>o'wIYx_DW+tI9/_=cScFC:&Ya SQ?]e~7O%D>do*.lOS9^_E|"4aG=`a+Q?WtQү$DR,EH\G|"&`a/Ϣ/=BBHdB̿waO!D|ȤoY߇/V\}Ĥ|6!g>EIRy#!2@? xgMgaW("tʛ a+5^&դku_C4Vj}5#~"!~';3_o_U^F}_~@¤_Zaai1Es[H|([%~1!7ݿm%ϖd:>xå|#y(dc;&#]I"[?M6oԿزfmZ׶(?׏%O޳fG[m{6B5RQYaQ*vB-[۶oӼmvNu.vrp-۬-Uc25cC)s4ԭW2"t OM PŽEl޺it908d;.ek0ۺT\ quMzNY-#nڳ8"yCӶmږYdZʓRkVm;6e==t8:)-17ҒMH8|r22D=zad+kP=9>Րr5uOV<LC4?꩟ Gd8)FY4Ak5`| ~2KiwyL=m'pyBn5 4x&?f9mlSgz*%8yx~iчzŻ[{bvXVGԻ8T#;ƻ6;m{(?>0Xs} w u=?ayye[q*բݽ}~'91x/gW1tT9=ÜcO1}Ocu v:ȹѮvʯ84,(+:{M8P_=:3813v=ݜV1=[ŶŻ㝃uu6pp><}bxԽ x^'8ߵ_Qt?CHwo0c?ww䗉k@Z|]nZ 76t0E0Fq,3LGTzyq%Pt_wmQ;(kɆ)c?];$:u^(aِ ttJ3U]z37 2Ưi:|wMSk qTU'b C}݁:^4R}n2jں?љݾuG?9({N~Euu@8vvZgvgYw+/M/As'6^=8%igvǏeQ3cSB{4ˑZA^םa^Lܱ*<]xNhGJVL:$icu5Z`!iv`pMWR;p?/3a]f1(;.c[%K_+C:eY:.]z]A~~٦xGxgc ]rIC\'׃"2j$otٌ֞wWq\B0 K !+ L @tB v8;9=%qzKセޟ?g|JW [ͷ̙3gfg˝޵|{m;UpbWx ?HFf+#OjsWFV4Z̆ux>2 OʌD񺨍4sy#6-a1n)O $.~EznXg8}ؕ=N>mI0,ۓpꔙF#Vmc qFOQtKW~*ыE'?;fsp:0wIe4nYMD{lVUGló{n駩Zq? M?go1=320bM,':lO>yx`'O v}g0o=]2#KkZ) /5"Enޙerq+ j^|;'-Z?YrTvߓ=!p`(}SoU9HS<VkYCTR wE]/mIf9-xF^B kt㵄=e'zCgg::XO~z|Ӈ%]39e=Ko)J=Sz)TbsE`,fZ~MsnN⪩V,j_jCiO8uZ/֘͟=.o#V.ĵo!D6k&h R9Z^[Q" ,vcmknEA%q0Vdz5I>5ҵ:Iǻx[S"K.ɻɪŊY=ߥyk`ڹ^S<Մ`yyk-SMu:_5 vq|yj]7&{AZU_Za"oIpֿ+e(8,/Q6z<"{ӣ򯌔Ql(Z#]=O)cn$opuos!:*'7,H1)5!ZxE/ԣsgD 5v¼{GޱȉψF=f$[lj;­`Yf'cVMb7+FFoh%z`yI6%%|]3Խ˨2\w/il"vئA4\/dǘܠ^xhhke('mY{pn佦OItӶ^^5v_f26 l6Uț-RZ#yyyj]7-vMW5 R膃xy[ bzWڦ?<q022٦JKc%do$}!k/5,Շ'#uD3kmOe@G8n;5l[En[k}1;@`0Aɓ2E/H|#F)lvg)zܪ7KK.sTuUa&z1ϋ-.Wo/vKyV{k.y،m z[QOY'd]6?ݽn;{~c^4L[YE]B&kmB .^Ó%hU4YMGJ*35uy] b +=2j-ȋdALFoT8sM h+PF612S~RWokuw53ٯ_~J$T $̜"1ni[2 u L2b[T7Z+:r{s%\u^U26ӲEvtF[ETg\p#Fkj[7*#p~y۴,ÛUO"f+_eMq5U\HjXn`;3XL?N6(O=Wc*y6m^"&ɝ2h,o òC~o55[횸%v(y!"b9ua#~duhJ b|Dֈ\vHkYVkIfUHJj˙S ".sE[fnKb24|dThYK͍;ۊJ.9N0?0DIEE>t= AMݡ`N?1vv料͐6INL[Mn;MwΫ{"A'\GO5ՌǎL$~nS-$%Oк+#X**v ~b aL(.".&oV<웭|?vJ/%}S\|uGH)?Ao!񥄰/Ciig Q% _E|j/CRo#L)W K-k#w)!oTPۧPYN|9!gjK_K8`/U\N"&h*B'j}k_W߯|F]<']͚)A7[귝E>>;o&D"~9!gAW}t"ߢwI5!/AAq¤4se<_eAvB}&F >]/'D6 Dtt"ߢ'iBh<# śHL:h~lj?I;A:J~!?>fwg/%D%~"'r|kG@/&yv>JBU$Մ'&Pxv?F'xǚ8 y/'}'E{"kaߓ_ &=U7" J”׶]P(V53 B3/URbY&=G*fx{XasPsMzg },Ϸ Hۤ?9["/6饚_ĤZQK/WLz}^nү- q+o$*1?;1՚R ~"Wb#x/4=!7~%~#!:7+n%^o5!Io7IyIo턈7'C[,TޡTTMB=_x5?Mz_Cפ[a?Hߤh} Ka!B#OS " ~3!I(b)INB 3N$^_kvBgMT/ +_5JIJQS2'Iߴ&ɯ!DE:BI߳=_O']q Go#LvŝN??15! -Eph݄K'|}y兓<{,&f~"Z׆ɚtjEO&~Ƈ@j' ,'~o/2Ǐ/&~bG9o%D| ^#U; a_I<+%~+a|RAb܋-TL6q]y^<^YxSّ.WMCpɛC*-*,q:K??W1\n0鍚 B40 QnB*B%>XK7+6M/#qW($>[ !ՊkHfBH~NBȟ&~.݄gK۔<~_Q<},3U_;&⋉wz F"~$Q&= /DzyB<},'$CT^S!D*#4RytWgXW3ɾBYķ*?oW o 5 !/w_d/$~.E/"v/&~>2^ _ _A|1ɃGr}ʿQ'XƏI2Bۈ_M/#Əw_X${M|x7񭄐Io"#>;q{t#NB^J}ؤj|B#&}"?JEL/!>  Zڤj~!y~ Hߨ>1 ׈/%D:q  B7_o6Nz+ב@C7* G&?&-( ͟Oܤ-(/PKGJ!ZoM^ǿ%CoRR"g[1g1oN"y7?:B@yiي蟦4+ _I.$~"_Y"jWl$7S_Fi_ᄗTEM&t K_gTaW/T']lyopTDz?ģ|å3@)&Qi3֧qMm!D$ȣR[W~F  _H3aB۟}N0UcIѼrBER\CZBY ~D|4\I)tI4!䏚t"ϒn4a_zM:mߨH߷o2& XL3#DLSp~Bſ,>Y87BY7b$g;Lzg1j}$~"ϝ&=ZkqxIOC%1)g4׏'ȣ'Xk%0TȖJ+vgjك \_E|9!9&7*_i(r?ߤ7Ya _gФi~=!&"/"Ao^LJBo^B*E^j5!e&"^NzB+@({LC=$N}$FB#ɿ̿I㋟-s|Uy%xȿƯ .~ʵߣ<&#Roءw?H? j!W%D#NǧM7 i_S k?:(5y~<"/#TL"~>@O?j.f W{ǏcM_ ..% !3ˤ2<ʟM|!3xF?ZRPb᡿yJ-U^"G?W.0.Xh!WX /ŷ'@T*|VuN͏ L -<U^>-SEC~?9| wzPp)` xwA ̽@Aܛu|/XGBYO|f.^YkSLb6_H :,M8߾h|>~`h#o.2B^nþˈ;&>¤GY#ł;-P8߾VBіC|"D=Մ<>Z8aS-w9 pעCY"dnb_K ɟz=;Ύ-o߿sn,s|wo:йgwB:[m"/߈;.&?M{v?{0LuUCX(_Zy5Οvƿ-r)$$^}w)ƀHNC seANwn <;.v^V{7hځsv~kǁ W+;)_9XU'|W.3ơ9r;S.^9Vs :ZN~p1pxT+gsO+ 9aJ9oES̏ILj*1,_RC~dFuU"xnwvQ4/zDqwףO|G+pRC=σT/#5҉vllt~FsJ9Ќ?b\>tGk۲zjlF}C6ܯ秏<֣R^wl)Ssjѩ, =!l&)F}'{c>u)_cCA&갦^.zFH.^ٵzP6^8.iU$5AvMLG } lT"՝Tiz3ۯĚȉ1kGmndd_: y'Ue{u(t{݂FDk &pLľvF eݓiԙ|l4xO_T]ۣ>*SmXXl=531vmDvձ" oT3l`GF{}lha$mpd/&1wh1{vI|&u6lQy#*ELIx34545')L%2EƮcD⎨m/wE]'NO9Vq[7`.y5v9u;&3;%yIS/>89Up7̩?u&vv1s$ߪ xύWh`Ըs:8+t'!h3" F3c  zʡ7-eƇX#],C}•ÈêHc+Oy3f;k҉}=p͟A\0uB{2O6| rbZO:}״S^&jE )=Gݲ9Y&g@6ɯ"rNZΑˢCIN|-$O`)<;վVad. ok[8OwnPs=^Cyk=MyKD{=L=#agysʈ{rRzRꩅznl?n}ӜCyS?z*HO(k>|{Ԟp*(!20pdz,%2#p->fm=9$A*oBy~in!xg H=, 6uͯ:fᑮ\twN:EǻzeKGjp/='️nTX<.qVqWphWx_m5 嚿]Gȧ[F9^M2xO7h~Cx!k sshcwc$urM w ϥ&ww",#\Fw;2]i肽NSuZ"ep+s؊SnnC֘Z1]K-|7 1eM]F%۝\QyĊF?V-Bϊ]/,_D<ީa+1y8ar-Ac Oк;#X**v~b aL(b+ $}al *o5$RBWJ<9Q#rB_oBľė¾ @_=WV~-4Pq_䡿R>mUng `+H__#_=,kv-bK}ˉo!}+o%}-tǢ򰯕Պ}EW䡿M[H|^By_O|e_^m}M п}oO)/cRF'h7w񾟓h=&`{oQ\KLSmD%C~7(n#WtwB ;/'wK/7 B +JBߥ5*rL?JrB1z5!_;kķ(VL:Q8''MYo S 3O~ޢNfB _CH~?! ^k|D<ń"/_I@|!D|5!L|R*i7*.s]&=£}N a3oQl#EBl)nr}Ḯ&A(C8ELw<%_Mz/T(/^i/%B2^YBdC+,3J_$ /ST_mO,(5ė+j&^k>3Gy=|}z̈́_HrB&"/cMz}½S[ERqm&CW">N<_aII?xާm)T/{LO I1>>,>姪=_?H|=!C7*">?lG5!#&}">JrEq | ! [ &}CgH~!6N~M:~E[_J_﯄Cn%D<3Ul}ew_]Q%;7 '|!PL(˼gENMvdb-O1uhKoPi/etj/'L9mjE%~JǏOk~+!_ _x)!k Q ^6UaQ~o HU#C5o"D|e-3Lꔟ#HT̈́_31?L,VhjBďIķBSVͿM6Z䡿5h{-)m V'Cob1^}%CzKh~%■:݄hUn6cqj'D ;+$v&zN£$M$B_7!o*Ν5P珩Cc?[xùof9UXо=&?# =Ly<7yùϗ$o!DcT,qgB s3ʛ2SM/"s "_iҭ/&D_Eۉ*֒/%#Wl&;_FGBq%?VB?ՊkHį%_D|'!L]$Tw?z?q¿ ?4N v K"xv/PR1y_I ϳ_I ~('K^q)s@qe W ~1!7y>{W">^ !J+)&VakLzE_K|3!Ioeh'C,T[oQM߷;_&ݫS^;e{,^7+vw[;I=dvB?/qWR#Y'Xa}Фk~=!!>j& ~L s}k"D?F2EH?I|!)(OYFj%SL?g-y(^N`K5VZIk QQC|"H|Bwy~[ !GW+D(G/w(b~%j,<7$D|?oxDoi\'XDxye}CW=?LkbBmߴEy/>_c|[u~ _H| ob4=E[ ?R + uLO'Uľ'gZڏYeN07OM^D>3nZ䡿r*_j"yå5Q7hzYE$iؽglM/ȣ/Wl!M_IX KV8~*/&ھ|oD?KǸ:H%_ =*ߤpEė#Bh}ۈsKpKC+Ӥݚ_Gە oPe&B_<ԏå$UžO<_mi?j|,T~\?}3_@ޤy迁r eR/"'C|z>"\O+b*}*EOžMz7}zM:nG#Qd8Wl2 r٤ _<ח[ǸgtKFK\_I%~!u& ˨}^o҇, WDhқ59!y3-ILzo"'C;P<@5=9!;AC}&ݧ#D|?AﳴÈMg58񥄈O?O4鿝O󧉯$>C|!2_Mϙccw[.߽@oj,V[D7Ď~ӞzL=Sdݑ"&#)W:;JZ{ZOE'NOվs\w'L1DrrorU/ oGvsK C1kEkM}aZnr ͱ.]tLF;` u;.Eοh##Ȍ4sQ;׫`?3#G%4Hհ?qp5|fFVKyӃI{7hߊKҔqr0' sqr&6*1>GU+%);83w;!{>s)y`-y> `xb,ͮ<\M3gƕ Vܗ~3/&hFzM9n8Rky[@C]Dd,]D M+aD_w%RIN'DN/KJ(7ISNF=ޒ{>9W1qTNI6b3Aj dCg[6J2BIOo54bDȴQ_I Zԙ|l4xO_T}۹(*SmcXl=531vmDvձ" :#Ԟ`Ho8hmo& BaYKS0ssR -+'::!%[;"dQ5smB+\*I)| '؜m8B 0cl~MhmRyg%ٚ]ŢSMb:XRlDIMMĶ6[3([+1ώda+ʈtX(6X /ȹKO}֒0|#/puxޑ$l-nY͟o;lSX{)HI:ѓh-BXqVݏ0EIP4cP-#|X|ҌAMswe&{gZQ590ɽ+50ɀey\4V$a/$ӧL:mftg[6$̽cL#E{&9-IƄiĈUɷ@f}B;vP:-{~wqEA;++ꊄyjV먕Kp˫Fʕ z|!Sss~Ed6>n.֨ӃVusNXp UX<.t«5!jz)O'/C_՚1 0d{>ReTFXs%ydeYJ=x>"'hlJNix~tǞ%8<<'X#;8\n+,!Zds0O"WnZ3(FГc~=َwwNE;ܵ=M>y˶͖py"} GO;(9}䘨u(жWi.!mC_B%L>veA/+s VT6^>`"Dיc7>3jaEQ:jY3k3juHfm#2DD?rTygI4gug+]QqѠ~ɮuqMIȑQWu}Zaů֖2"{.s.s\Sԍc?&l'xd_O^"̉93DMupk1󿮁L)J]!f~Ђ} ss=ݥfH*uMʯ8= /D2Ej2Å+ az\x"R{2/,njͦQt|C0AkTz~lڣ"te«{ʟ/&\Ԩ]Ӱ.K*r^ ~NܫS)?ŭc_L^d}ϐ/V^p4V/4;,_D_Ff@NP_@o!웕 f+_OxKϗ¾R)jٲڻCGGH)?񟏄[H|)!?'5XRc8Z UiLwGԯUPW/'(֐@Wnˈ_ 2.BطVv o$V&þVԾ"'|3![Crŵduo]<[DobľM7¾/Wd{%Amuy5&j]F 7l_J%~"2ns^@>WWB !%5KIj 9,;%\k>גrBw6z¾_U'Ⱥ53!p<&~ *V'ȝ;vVM"{(b~76ߛSDN }9 ,s߬äï!_"~DgT6jT'ۯKG?W1N>Ѿ"h~!~ !G|!O|VvrHRB?zf !TW($o%Ӊ_IZB?H9wB#vMbۤ;=Q"^/6饚?;jK_\+_f+4G퓒s4P'%/Za+'U% _B|*|r >e ?R/$m K}Jns}? v{jͯ$DTPon"j:n3F5VZzMHwJ.CгB$k![B++ eʗ:nܿ y(~L,i~!o ?W?"Dn6i);~y~~ޏ)}]t7$I>vC2{UtPk osO(/9a r\{n_@goOٿsnHuWuPVa`Jb|Pcv ,ߙϒßǃu=I"sz<>Or}A~meC~sj"#+gr&~5#3/>y̸ۜa*4V`v<mЃt9RP2{$}Q7=$i)s_p7DSeG^z־iqDZ\_ftםq{z~=[hXzO,'Vkl#^NmITm̻2sd~3Wq7z.咢/O芝iyk~U]4.QȟhSڲ\R-iu$ҬQUZG\(Nhɸo.O& dzX-gm+\伖EU|'xu]2cֲh |kU}Ȉ/xK2`VH\ #<1-R}==CfWW&>2ވvɂ_drM->e_ϱ]^5cs!حNt^%SNjFnՌQDijhrU N]U"y_giT4G籜+fmJkLr"{Ɣ5pkLL)䜅e#;&7 q]GNfk?Zmc5D~Uú)yэѭќhH[Zf^]zO ȊUE 3%,Ce5 wO} ^I[d`~ -[NdgP~H0_8C $AX&FBoMxŊLzWG.*!t⋉w½W+$~1!ϳ_Blq4 */L(Z|^>/HZϋ~ ?/!{9+_MVI6ByS`,k aksB+++Q;J>go-눇½ Ѓȿ h7_GK|!_7)ķB įVl'//ߡeZx$IA^Fo:*(? >Y@Nx/& s'y_W=~$y⛜ 9_VXc_!Gy)$UJ׿ėyNR 4ʣ?|9!; .ė;V\F|FQ/w,!!DZBH C7]AEVgŊh?˔<߽ VjU<:dX&:+H.k_D]%aWjS *JB)_VN|a+'%h~"Əx7?dVZWYLC۪x+:^߹Vua*s9-m8qZ s(1apf%Ѵ(ݹ%^y#wo^t- CnG s&tqk;^7ytI[^PMT R`)5K\_}$E,yl@> לCӤ{<y!p^EfFֹ!-vNp5-O3fF/;YmhT6O¢CIN%FH4N'kXkHA>ِa6y{ /hd%j4%3"7 i$H< (AY_*Im0N%̶FtT#:ٟ{t~uM9gsp/Pȼ=oKo#K.[\'k\/5I,1K0,ǯ'68N}=qV:Ώ{џ߳nJrsƥgp9Q=^u D7u |џ_8Ϲ.bF=.N/%Fݱ{`x3h~~QeS*F%O1.ȓ9 !5uja{?)qdŏ㽃,q&{&Y.O+^R4V/4Cx F`>Vw0:ϯVy7Uϗ¾/p*f+_$`󥄰bf_AՖXaf[1V'y- п Hrw}v$CNKOt; s9 >W8.$]h+oG<쿊KW;ގ&ANq/v>'C ]F|7o!qxU7*׋x=N|)!|̬RVL$ E^Vj9E|%!쿙*B_MAk>_O(\o%щ#ZxY_Nn#ʼnp¾;_wy2" _LwA(;% " s u7>G|"Wˏw]H$ޡFQV{E? jϓoN ?O&Xb)|-!wIpE̟p]Hs vJ3o<XMَ /h_w@?^eh~;!'AMko(גfBYG+\;H~!۷Cl!Dߦ*68A|&B/s^w F۝['+ u]>$L"}7> &Li{}6Eķw7-!CdˣU#$J iǾC\?N|;! %C'I~#!)K_ICo"rs3 ׇ(/\W1o+4/$/vX|~>!.RyA}vA2E}OiT}rE\i~:CQ7b| OM"}taψ_M!/o4/eXx_CY7įSDMPGaߟaߟ߮a߉?x%k('1ÉU$?Dy5_姫>A?U{slo$oVpEQ^sW\ 2 ~";Lu;\ƘB<ʟJ|"]Sf]^E ?NxjoM,;R[9L}$R>˗I͵%Cj|;Dۏ_ Bg,"ȃ\|^f8[twXu<:e7{>Sg:MP<䗫\g¾x}~ s#ϗ*?Kgq=% uB;HcK8 ”&~_B-WB~+YZ$~)!_;1A~'!Nh&W~񭄐Kj5$Ozm$9񝄐H*w_M^B;=,t7EI78x?&cu/TsO_LC8w|ɯ Dv0KVl$8.)n~!q]Lb(̈́ԫ>7&C|?-'D ;E|+!w3 Q~o#D P9ڮs'k aY1;4qߢÉ#5%%(~ߝ~"AjrB)_Ƈ8.'1yXW(r>"x/ )/%DJ|"t_Fe3-/w;dgXT8߾U/Dy'8.*1 1M[G<_KQ*/+bv@*By$pk%|O|̤O:a(qT+} xg8w2m7 SW)|ڤj~!yYW;-eڮ@ EIWaW#{ فK ѿC<'e]e%ƣ|9! 7O}Yė¾Q]?5+5?Kok~F|-!9u $K "6˴Nx&5 ޤ?j~0y_D'w9Ab)xåPʗg?K|a+'u';0~Ha@Oþo$ &B۠,ȫ~fEܟy`:m$IOԏ/|B~_E~2Osń?$qGib'XDg"/&}#-BpzEHM]ӰaƂ\<߬QjK$Dγԏoſ/>_Lt #<+5>~Az^B|Bď5#ݠU+ yo Z6M7kRBo2iE#̽bz1hbB<+~*LƤk5VW46<ʿzf!eu&j_`ao%.NX0nz45!y!REJѤifB_ocMz/& ϓ~dyyIwi~"?O3yu&=C?/r#K~/0n U^ϗ(f7{-s1> ??ʿR #PO_M[cė">NIbBӧ9iѿ?k40SLEM7鋚_O}Y7/o$&}"_!I"_#V"~N*BIՄ_~"C|:]:ٷ}K[!c [⫝w#!!pCY w m֥gc'ٿ-3Ge_bq7}lj1k%xDp;?Rk۾×?]yGs%5dłk/m̷c}~f{x #ٗ{!6>_> ~hsoѾݔqB?h\{:A`LzݝE;ϕQ+GvyiJ:1?PyB5~8ͩKK~PGچfMy4wo^4%o瞱x½5{{z4IǂSoZy4\C;y>o, $CAqYHC}83Bqzl -amoclAEt`~$y0_lLm#'[2ӞbĴ@fQ NmQu$&a#0ԡ}r`Q 3F6Oùanm'iDcD h|l4xO_T1Zm)`Jl֘^6";X?')MU,9I$՜䯂Ihखa[EO77EL6BmG=Vd 7ͨ !1!]rx-ޜ˅la"d뾲J X>!]YiAI#c7-s 6h^{mif7Ѽ Y4sJYLGCCCq~7s/G<?MwOK3gF$^SYX܇~6^ D5QeKZ€naG*C2񫳷M[Mq)q67{LVlQughdh 2L,N#F?.{3 -I؜zrk:7D; 2KBn31L|INFHn XkHA>ِaV8>^#!ul=#aN |wQL2/)^Ijˆق1IfV|gƤSgFc>RXh'pwx9G9IOd%Cǻ}ty5гY.ѡMcKN˻OrfY)=G?3V:^5h[=qtoCwvߓl^\ #?ĒH oP[LOsE"Ĵs=^CykUWOREU6L Fwϭ@\1do.-gfԦX)d7p>= 8B%yyM8iO.9-D!uxOQSΨ"WmQ+rsBQ;N(?!h$Q,'&PG#];x;twʙj/^{V}$)CAk8Np˫Uw|Lc)#NZ+5}ÐϹ$/A+W}9^!'O5whkB `Բsk)>B^rn jp&%%2NeXa{ZaĚff{A=-,Rb3NMeZK+.RZ `>]qkx5yS|68N}=2t~7l>Kw:sZ{,R'a,iZgNa><-QZ+qE*ƥx<ǥ\殽DZ y>4 u/\ÛB~QA# N},3a״ jEdž97!EjӿkxtُyNHX\1먏6ɻҀlc9Z+) o֎?OwQV>N__d17xKGp_i]-tV4F=^HQjJ៩?;Ih;ѕG\'S5Q?es+(6bsA #WtH2 πҸ3yN},Q %1ߦJ-ZQx]g9}g{(:ͬY!.T+*]UJ8rTy=N8=~v0 )~Vݡ%sLWqi:f6#~aLɞ˜2އ"{@Aۧd?ɞu5tyVjДi49-^ڊ=Y].3Zk;'ƪ=p~١1ߦ򎌼' ^g/W`Oߑc='i)G -(aͧFYỉ^q)`!WkSl% +="̅1_y]Ib󿮁૱LCCCТm6kDVj1%°vFy#')YS#鎁hz_5 ?R<trCy N/UI>q} ke>鎨'hgB&Te3`x^i#=a%ә|!5yɭJ aAaHMw| GQ9 %]qN5AE0 6m~2GAe̙ 3龛NwMor2_t:S',wΫ"A'~cFjXχ b$Q=-.w34CwKl@qutih-o'xKuR2.Y^EsJ,,0'?7ɓǒW*?Az_:ϯVy7U?ϗ¾/P^Ea߬y7[℗_|)!+%~勴,<ʟG儰L j߄} /%})Ybͯ"D 6g>_NgkRͯ%DyطxYNBo%} "};*_ڧY tM[@J_;!ڿU"_l$fBo uo[Qyؿ^jĈ}o&}_/̶j~!%Amu y5'j]K QseGbB7$"WBJk /57*.sY£}%儰-mdį!}7NfqL̈́ 򰿛xzRo7ǑANv$EWM?7<%~"?bL:UsYE}ģ|ឤ >y|?i͚L"o&~5!+5; y|w)! k5>vb|y8{~wHK I>EOžG5!{ S^ǚ8 G}OB!/\0S>]O}+tK?0YP1g<<{2>ɶ5,!bzIs{| &XikAE&}"_L|^b4RCˈUɍD~1r^i=ʤþ{oU\OäWkB&"&]q kLzo%__k,:\'^oқ5Lz7vBoΛ,-o'm_ow I{x$y_!^'߻H^:żp5=P˵#ʣW<~A_lj1~|R&}VyI?þ_yͯ!DI?C牯U{/%ͯ'/ <E?lW5!+ UK+կoJ;į&]/U\{&}þ:B[GEӝ ?7闚_ G~__ǯLg ?cZ(b.FBooVDIs$!9,þ?ߢѤ?k~!X_Iu&C߈ߠ{? EqO4Da T«|*E;J[ʧ[귓P+|~#TIWK]"ͿP2ףl<쿈?wj i)jMPǷK_C%ԿB?|k !?2֩?i?C< !/1b /6x3 "!1`!ߠ2Ms7G"WDFW*? ~ qG%?W1)3Ƥh"B_Sk Li۬#~1!귞%o'*֒fBzfJ2Bo#~JN|+!wZq "~-!wNq+%~!/#~NO.B!{JFC7caW,W^/T⋉w<;K=G+K#Z]Do0EwLI/ehy?b) o9!F[Ίo%;aIo#D} s]87@|-!$N &6V_AnI}*_Ө"n'>KN| 'נGj~!&="I|"MI| !{x(hk>c-įUl'ȷɾ?Og#?/!gj~!F<&1Ƀ29@O^ͤwj|gLz;h;/&.!_B{Uh??o ߝ C|J>VB $CUÑTyD?H}RBOI(3$_N?|/'}_$>_dk~ekB|-!*GN|#!7b~-?U}RHSx~%TqB&EФk~!y WJlgWrR?7/_#y+o ,W7?7D(7篿CooVǦ~k$DR?Dk%),)UyS ?;ޘPW>zfG1d7j|)y/>H D.~ 7+R| -$MOԏO f Dx_P ,j\5-c'X'mt\[2N(~F&h}ė+b~/aMCo!%]o2kI5 oC9u|H $C"'K욱< "D-I*KV_C[Mb|ƗLy%xȯ·Bi~绽NxU /%T+ͽvz/$Noþug ?~֛Ԯy n)1~A|"}[MZE?n7RcyI|b3Wީ&CN+$ro%&]c=į" V+_ TM_nҕwE<_if >)/NߢRk_N<.}"߭x-鿞C .K"#eb ߫MƟ&=ZK'/UϤS'M"Nq1٤'C|nUBW)s֤5VǟL"o'NW=ܤ;,= ???]*3X}>~6 QOCoK<?t~7Sy迏”'>~4ÚDLEf<ߟ[I~,qx)+!į"^>ei_}g5!%YKNՐ/g|;ߓO.2Iȳ?x3$~Vi{\w=_zb b۱2h|>6&^uxc@$'UaN+=aM;ڷbĢځ" ɰ yoc#G4^&aY/.m ǺyAu=GhM9>бsyk krHsІk[%<A=DN[Pg7s9L~a0'GU~#;8_ߝ GNA|.AyN1Mk &ej߽?{Z{F1nƣ߽֮XL>* {H77R]<5wB<$Pjz6>_>~o}63]9iYE_c[v"_{N@[t@~iG$y!_lLY#'[NC4ޓ$D;iS}Sٰ)*5QV9LrT#v|~r䘝='OR1@J$%bq, t 109swgPSZf29t*,t禑un ْӄjft߭ssll n\hN7(Zm lȰ+oaSĈ=Q7?KgD6EvlI51⭋sxj0#i[ڲarK)I-}Ft?rhT:&[%F{}LA~tkęw@f6{mD7u[6>y 3eyKq9nUCQm o"xz6` 젿'9Fj_0NDle19oOxyyj鄗A-Vi=kJJyZ? x%I=8(~wqragQA~Kr‹;uŦKi֝twN:Eǻz5OGjp=+] ~\~ɸ^rWȼZհNCiYnKj+{ ]eydD.W5' 9hM[#V~B K\s="/d M\yFItႌ,dް}0bM3a3]w.~ &婵 /iRKT5F. WWziF ^F^ģok#Jw {p*8%yTt'X8|\Zj,yqXX΋ͧG]_k /VKeƥxQ6ǥ\Lz.@HD}kin.n k ۏG0OEbGb)o;;i]&i8jNjzBY..9ٱcQmw_ai2D .WRV 9V8⍿e_cѻK@~3Ə'tF"l`|tKOfqx=&\3]}GLvLw̾{"M 3UM)ϛbhK(?y+\ЕG!ei OnTJӁrk%f3^o'aEбTuͬ' Y!х~^ ,io#SJU}E`|02Ad|ݝ6.Scok}s\{?7~SY3Ժr_WOmcb\$%+ek:Je4:b){.s.sd uFqc ^Pl=@[:yzP"k̚V0ܜm4́_9{9i"Y%nͷIߑwg3꘮dۖrzom6H;-9U_y0 'z%&9hUF []d08}xg0k *@}cmƤl_[EEM".dy zuY,3C[꼑KlkT) .`zX&g2]1 &3X>?v; -6e'iF7Up'Oʈ&mV?z#(=ȀhB9P(КcR.ko|r0h&iV=|}ef[*^' 55^@D,:u٬KRYf:StNtþ,RԐ> п /ߘ MT<@_/'~ݍQmbįVP}Q9W7\!m6oh Zenc!o#D5~ɯ%^q3o!?B6E<_X>;?K¡}w~V^q*6Q>G2BįP7~`җ4E~b_"~!&}C+$*B7LoB1~B{oUMo'D A/о;N5 'o(0Ͽq`fh{`1 d_4L6x"B|"O5%D9"'Fs9'D|O|"R?Y¾<2* ~%!א*ƫpyJ(RįRK*mRo#+sܘ,_HE_=ϷSߤH wCiP3!e{}ӈߪcNMN ,?fCWf,H]bQ%$5_K^M\C)?bo!Q +q}3+ȤŚP_S.ķ)b~$U%D|{TE_/Td-<$oTY-aTGM$Iߡ[ABBeόIV ZI~!%~ Q5HWSo&Dډ_H)Ӧ͚oƜԵyؿՊI2U"MvX+kQXIuZxwzBw~A|"/S 52 /#mw}]A^BwIWYxw_F?GCNx~ L'X濩1oyNJ-kNh Nj\E̟egc,2_+o6Qy'~"/|W"4YF/ϷofBen!Ϸaۈ_;4pK?6ei_3KYORBy>j}">f-(.*VL_L0y&x#IjBϳ9R8~YB_bߋLz¾'ȣX_O˩}a+,$PelKr~ّx}?$ysa"oQedėN).(^/'V )(&G| !{?s3˽}~-^+E^}>HbB!B#WBgkI/%'Wl&O&~J,񭄐/W+!_ ~6񝄐2;wWMk%^0K` ew4"ϓѷ|EY_qwM/"D~YW('D!|#~aߏMEՊkIOM#vMc3~n/5! K7BMo"D&Ak}? ̈́G7_};Q*_S?'XӤ!o!D$!KվR'xnK_K'I9fz7jZE^YoV?ӓ_I&Jϥk >34"Nq"䧓}~uO}CEόo'DMI9{4)!ww<ﱔxåzE\eO|"˵IWhBw9Q_ii~]C$~.?DY'~?Lz^ O}M2BGL:fG=cyz)\NͯVIƿUD|H|t7"f#,(&1?ԧ+&C-HIW+}o"^=>@|"/ʽM?D򝄈y#'/yI͟O/[a'+K~F¿N_kBL7?O/Xyo$2 MW_FMG 儢_$xG_|:G܀4$!HT%/Hҿ /OnIcQ|9!Uj|ė¾?Qo4<Ʈ,!ן!gk a_Sl Hw1~oZbB::ڮ@̏0)XI\ҧgZ@y+_Oj.DƗ|5/HkA:~T?%V_MyWK|E\o-5^Ѿu _o)k$U B-*jjK|A'.S;<\5dn˟!3ݿuWڸ{NٱwnݍՎ{ΜsrM:~S-jAu"2EE_%v\FM`Sg\\kscR`pBM|\\+> 5Wv:|g߮x.ce'j.Clkٟr_0hOfPt^n/SQoT1_%{5>ߗQ]!: Us/k^$&/7q8:в8./9jNoo[q^{[;uf,_'L*GIg#Ivll` =6Bc>l,T?A]^ P-a~|03dZH#Ş2tj4v[(gPw${]2x$ؾu6Sp/pI&yǻpb bh̰ڵTNJ(8yG|hlcH9TSR͉n"C1b A5#1AvU0®J:A17e+!;Sڈ@yDu{ؐ"]ݘ:сf{P'Ύ5GbC9w"ߪMUxCXmcQ.6H|Ssh5&^qavTcq(m!zpQs:8+t͛ [G3;t444Dd[vfJw;ߓ mظ3G?JF/wR'?b+%FqeVeT,|Xяu#BIceޞZ);TXyH9 w>#Yk5ܔ쨁~v:u<ë sfka~I6ONK;|--öiE .pEA:\'dQ>Q=l:IǻxPPXS^½wqcMtbKLa7wt<{0َwϞ\޾d6t̴u?;;9`f=}|{}HYi# O:u)ЯA׉Rv(=O3-#pk.>}犮҆Mi744@B_r眤R$g;Vӎ<)wA  ¨xLOnl^H6ʫ"Ȩ55 :$6S1BDWǒLa;[aB'[N6֜)pV},<}>  #4Zw5VTU{]W=4VQ*2ƽkDSk+^Q]шYL]l]xOܝӖv?Ȯ%j͞ޣY%p96ni߹X:=ss.ylP 35x6Vr7c[fgfM9u&C,z4dZ|"[ղ84W~Tks[kdIBŔcD-v9sƭu^&Ef`.|CWihhKmf?u˞1W}x?oհ瑯]c+˯Vo{OӗVVviSk G]F?0F'$+Tl0𱪮tkQAf@ygbGmީND'tmQq+m=:8BdTe=BzWfF~BvxWm3kza񸙋Fm;~`jt35uj9"͟Aey/"%_'?7κ4xOU&u_oi60+R/#}3_@]Lz YZ^T&~"։˞h~%C%i-!)_8u>_J-$~"Ca"/'}OpO~BU_JGTeh_i&<%~Rj_?AD%C|Z_8~_'9>_N$>XC=Vk~-!'{{_NxH BeBL#Eq-oIk:B@<_Nm_xF; >W'C5u_Dm9L|3!ڧh Dé-(-c&jFBy%~./O47!D4cy5MN0C2B/A E_>3忚WK7}'~#!{hқ5+!&>do&~!j!V$DFBI.I[q??}/W*^>k?ߟ C$;?HEIgń\O+qw(_a|~/j28~125M/'DSa4Tί_-!g<kA/$|O_L<3\횿 yzIh~!yMx>*ڤjjBlߦIovB ۉ3o#!b!oԻ4!wY){'C(: ~FT=KL[zz?_#~LW?HbE߇W\N%~!?FJu$ 7b|$;`|II~ !3s9cG  /!D}*E_W5J<*Mӗ_E%D~F!HX2k.="Ow-'D[oҕė}?PgZj~!GXe}Y 6Z Qy_J|foƲtwBc<7UjolMCBߊyoޏ ABؿZ&RB:9M B_Il$ǴEzWWw#cceXm>;w\0=^yUp޹vyT sh59nF;Ӧ9t2nT[&7XҲsXcMX||Hʡ;DvvMtB*9TSۨ+1vdk u^>Up"h\#[8=wՏGk\%]uX?oS$o`'1n Ҟ[b>Sc:,5{hL'Z2‰82[= bk tXe?/Э1NG9tr@=6BD[JGyv~Vym.+X }z#v/IX&=II'ζ,yC?e&Y4Z]쵭ž 糅p =7zP.V)S&{yyj.R;Uى;S%іݤm\k ky{|^ 2.ls0{(\qI}gȓ9o;GOyɤE]jZOBk5櫴ۮIa zxxlzݝQmw[D`qk;(:J󵫸xQeoh$tu46.֡pDwi~bp1 rvo(xy;;pݓ`KtxA`}w@Xw>fzo6\koCu34HźCmrMxZ6WvXs\ubWF]nMʩo37*綝Y0|XE c?tD͕Ux}QYz7BGSn;\7aݺ&'M#Y)ԮƆ-$#IClw)d3Rb{cˉ.ޢ>$潝au񳺥;]},ZKu~Puistw88ya=݃uMCulm5Ѯܯ\MYm+u8g tAi ƝEUQAݛXUx)#쥞r`xon<ߓs[WO.Wa,۲/e>+@ Wg;(Tm-,تlٖeٖ{cdl dɨ )$HF)N )H#=Bz!y{{Yt̛{;^w=ω8L8b7X곆@-~=Kd]R'ʽk9C觼8IqLE_m&xeN|$GgP)C<_y[.'x|̧raE^oa'?!~b7$gÿqG!H&?YlB79@MQ>yK |!!U_3wWuǢf?G/Of"_DJ5?>+#~ jr3;@ߤW9!%v m_c)$P <jjE}_G .Ug)fwQm! '}cOV܉ow*/"D ~&|bBN| !/%ė+!N+ jŹK]vCG\FuxIKRBG2E^?1W"cį&}9rN\=땎{}Y<{ _2z>?8Aw"-3  {W^L{Q>_gɟ^r3o=\@wC~_OvQ7*;ىׇW?ډDկ{kA~}ؿ'yN |m//ckMzEo#20x3בB?ޟ?2r(_!Ə7YL|!?hCm_M"PxGq{_}i;I]YNj|B;k AԾ A~}0/I|"?{%~"G?x/܏U^Je5dA'~P( 2>8s QI?o!3/ 3*_H J;|BϾL\yWA5_'W}5~݉r _L9!\?%=;<?pF< b}$&RS9 ==EItE̯Rr|!>; ։2/ل!#k?ZaqאɿZBSՒ_,ߴpqqӉ/]aOW,&U>-_K1?c>¯RB =HޕjA){=rBퟡI &=|"/u(ѻ_[8ӢSx؋|1Ɵ{MO俘3|?Rt{=w OC-ZBDK|3?Y?!|!'JDE/f TtŨw#~}7"EĿVO=?c}/|)&o Exc^oP q}')}dEW?I:$޵oPK u kF>_FoZhBT^N(8 ?[ Nh|H5qOG RϐY ;ɇgr>/&~"KU$@Zʷ ) LjVy#![-HZjߕZ,,fg)/8ʿͤ*)o;/tC_;M:"q܃Sa\g+E#~"_1[x'%7%&]jaR_FįPl"~ !0-(I=*@{,OKFB?пڿ:]U^'o8wq}`ƒ J:=7A_^bT>~&}ۢ^F|"C ܉ׇW_H!D|o4f/$79A)f)*^%?ЇߠZ QۈoRDn*_MΤ;-(nޤ7|#!aID} [Q2*Nmҽ}vw(OǤwBNK/o!H?.$Dݧq{.ak !N2|ԤYxg89hݕ'.2p? 0!/!D>#_&}B Q'oTWOL}5\{}ƤTIﳤB}Β??FzBhE@x*FBu'y~>x%͏~p;Ǽ K\XxùU>I[x\eNG~<ۃ @o|d%.=_"'?=^O_HU)O "~Cx/W BOO_D(wg?'/!T}y4)C!~J{K). <B?ŊKI4 ?kI [&7X7>-6(IoA|>6})<Az#ldzStd;h]װi9ޕG 5~F=ܯSArн+xoU^l,ŧ~!%|G^9oIaS9>Eg?P緰3IpŖ  DYˉ"bC 񵄺> r}0@o>,<#:ByY%>iT|i If, P$E\G )x]n9#Å/StBF⣊^i*B߬E}俊ل_f^9hƒ?:*_!o=U:7_Cwx3s Q-&mSy!)_,C|)!;rJ<=ޕW2k}wՊ|HxE߄K7[Z~A_F%~bfRLՄ(>XEz~'ߢOC%[HT>Jwԩ?'_郿L/?ܧ<o8w}"(1ׯE*/r~_x^_@4EdmxD"*EZK$>^H|!"ky}bB%/Vl$D()Gz>MzG[_7?rc@o6}*@ CX ڤ7|"ևnUy!b-(#Gךtg~n Ї-z*B~XW*֑o6-*&Ǣo!~ t Qo3]}ؿ_nQy !%e)?-/v7=K&}HI_ǵQ$DĤ/Xa#!?f* u>?@|b|KȿO)/% Ї"~b#ߣ7+b3p51o D~.@=fi?ڟ.%~,_5No>~IRyT\ӤZa[$&}Cۤ_L.%~Ҥc>jŅdGo/UPO_LI?3ү'v9%CTKQ"Aq&^̈́ߙG>=7?X7WfBSo!Dɤ?[x3o%Dwm_atR8w|G3c^sׇ"O ~*H. u?Y"&KE:EF?S#CF|g?g@q%~#gRQ奴?WjD _KYDqĬy"T>?(RI1;Rxz¾HE/$~"#z=2C Q?}؟aɟ%7gYKtE=_cEg|VP_#k$DKYa4RBOu>Xp)g~o_gi1s]Ai1k9}o &h1cEdgâ+/vӖ&WbZMW)?:BkHi:/%-oiH|!D|:'Bd"~ÿRs4>g+/yIT>IYa񸷅߅&]bBħYDZ-Q{,Hp}*/!cd/ڈJ<.rʫQՊ&T\B@>?HT?1G98lR')r|\f-M<=΢1O%^^fч>6GM{ E9f*&r<@]N|\*¿_@tGX{%^q)_Sy!E# bK62K|1r qJnr Ns[-QMzg~^SEި򙎷ZKi"rISy!ƿMzEjEڟaѧ X7jU*/ϝ&C/eGׯu xνxBw/RZx=TU,u;NVHe/'9 h*0!ׇ3'|nLzHy~yФ_XQ?U1x&}B3Qs>x?iҧU>S&}Ƣ&X?b/%ϐehGM1>oa?'Rį?D Q_&~!+/$D}Ŋ>_7*_Ja-(7o D|ˤo| e oчok]o"D|?R&Hdip)_Q IUdBoLEKE];BBKtC?U>P˵՟*򙄢/V G#S_֬1Gy"Oo鋮ש\f&~2ίY9=\)a6'#]f?KCE|\?y›N'~"ߘeaҙw&¿1/U笳_N5FBLLem2(e>gMR9,Y-($*OʂklVE?[q.7}=kȾY}؟N<5H a߬eXaE4e5Ku%Ԣ_Xi._!R>_K*BWXLK|R$]f:ɪW4BY+,_O귕j:פ}76aͤK,IT?@XpY]*G@K_:LTjBw'ٯ]YM|7BC| !Ϥ*_GI-(c۩x5_oWtH"B/WS/_CsǨS/^BDB?/%~2!LzuIÿ?U- ^zB J*Ko6*?_V^&ݮjBؿ-@o'Vޤ7|!!@Hj&U[a/ 6/#pO>_n_/'*/m;~Ï~'GdE]~OE$~&!_L0%>j*/%m>~?`C*$D4k}*PNMʫ QMWx'LEZdS}?M-$D|=b)xcPϙe¿Lz\KQϛE>x$EH5">d)<>}o!7 /koY/ߦc߬=eLHGOV&WE_?!~&!Ə_L%?B/M&DʤZQ&~d> ʧ*bWOGtE&H?f7_$c קTxBӾw~.8?8,2o=5oWnA74ޱq5T;vGƿgMM;Z6oԘ8c0RZVjQ*wD[;iڼi;#PUL4۾ǟ4ϭ_DPBn޶qT~aq'IPt [+ /~m<΅Q] ޴sc? {hN4=rƦkab=kw,~&dդ_7odPvP3di$KVw̗f+0CRpT<33cB<ˣVjghXF~o̴K'*W7loN|-GJ}VqhKQduP{ZAu4;V ++ Sr9DhSԳ@c~1EM==tqP71j_kok~"?Wvڻ4ȥ|7}pmR}/;no o 5.8tCmtKx`e/MR+~"a.@w>ky:$:CHGo0K| 9=-r /#5ǐ9j.囖<,.Z_;UT X,[^[{v3ȹ~/1hv Xqx;Pҙkҭל$,~Y_`4qs=tWk0%BA8G阝z)N\w?LR{Qʀ4jM3tY)Wذԧm@u 9FXk*.NFzb < bv&='Ĥ_զ> n3tR.sl6XdCCEƃEL6eXhDjJ 8 񇘥~72밿@.")lxG{{l $围J,%B_8ʽpݵ7r_Չ:Y 6H4%LƐR%Ω3ؾ;]=[vƎuuR#AJ,B3`}0{ SLhyjqoIFUW0-rGir\q.x` ,C{_'L $pRvJn)Sa3/=ߙ̃9E흗ݗ-VήCAJ lt\/Kwh>q%ngp[OʀRA9i ܳLǨWaC(1ߕz`+~W6|vǃ_Y{cK)2Hk~gL5WC_ 8Xrv:vt$֖EV_fa$`N9ֽm+hZ:n@`ȓ_H( ,:Teu_쿷 |rG%ڴg`/(7Lz[ iaw7q']BHZd|G{[{otu;눵{Wz\ц؁m;wmvGqw<ݢk՝^XjXywS2 ;a)hc=К\ɤ63r28o}De>GIVɺq/1to7ݩ0\Y`>|;߳7)ͧE' ${ Ad7Hq~w k8;|[pM[6$sI0L=NEv}T˻!XGoRF&MɸuUp~^YjIʰQ?oTx[d2& CjnJ O;KFC4bõ[+Iɿ;I?Acj^j|*T{5l_e#98r=&j^7Ө)9>-I"iч[ɣo? KQVO%D$o9/z.=C# sl>깅>>ouW-[)8+ViZNPiq0x뵌N4W߅B=QGwrk@=HcD[ibQ\yϼzn<2-EU ޠ7[m鳈lFQ}kn^n]fX?_'RROZR D&7p'P 'F_NSd'+e'<[K.͸3ɉT)CjIp~^gluZ: QK A $P?/Կ+2Zy{2F`C?po˨<',yn$=<xP4"-l $ynO:)Ӓ|n?@<Ѵډ/jDIDr%35N ϫ9/h#zzFm4Х{JCSUgppn!sԢM);^̷7gOU2WWy/cY> ﺌ{g^جy[s=?c Ԓ iz.qQ sX^9|G_}a9='|b&#ç*.O?̷g}FGT8z&|d5;nL~F16%AkQbQXɎw lJ_R|%1m%^t@qYr;;9^K^W[;J߯'#g'?%? ȏG,kn;RpDxri{AW- zP<{fwub4V Lk_MƯXgoO:'Bς%c'e7\QuJ)^"x&k@BgعVzgCǪ[fb:jy'Fl\6&]Z6mYESi]o.IZ󵶲"/*.IJT^g7(KȍԍRXYj%"R6ӷ,(.MiuVx,XExE#idE4 }Fyeζ9о ؝H ud"j>"(;VֺWDJזAͩ6WEQ փ+_zZ0VV[?*k=KHo*ݱmm;^XRrB3Jh-R9m-M廜jeƀ).dWح辘x[{;pF浺qf< \k3:66/koVH13YE{mAE*2jzuJӥ{sND`MV7پb}vP~A}qxŞ`^+/[hj4`q'dL,c?e UnǏH=ׇt3Qf&Cm*/ujGw"mH9 zN3??.rOIk &&ZaZAζS*Gbnu^3:tۖ9bʬvaG ξ2ohKaAΜ=7VaEX`̌yfmvGGQ5n;hEd.rg:jYig3`kjjv][4̬ST}R:BLZ?XA<)Z45f31( uЯW`?}!VΤ *u2(ץ wb+1굕 ő֦r?S` _{گ_5nrGzաXkgEٙ6-Lg-KxpHlUN W}>vcZϺ4^H%k@V `ݝwU0׌_aW.wUX6g4mOzn Ɲ@[^4gݳFw4R߭h4Efjf]N[UdjYXoH'mG"xɻCw'D}KO$ne|wExzXowku6F~OH y[ֵr_z+.YI\%n뼴ӔIs'_$WC/w|3;>|slr^A^'p߯x6N:IPۉPQx:_˿qgZǪ~|(|ܢ9ざ j_~qKd cAyOQU>K˂raE^oa'cDߙO!c8KvYo'(3n7o" Ѿ<}%}7T~V\LfP;ZLK/[BKr0@!SA|TGVlB5_9 _%xǗ O$D6?Y6CJ_@{ſkLzʗkMݢ_HRdE&X+a:^aчH{I/SJB,$^UPK@jB+Mw~Yf[SƤ[UsK>ꤶC|m$#~o ~!A}IoͤI;I_8s:C?慓/}*q<'(JGTBw'~ ;AaOQC&ɢ>L|"1c*/#Qhч_W" VqIWBBIÿH?l'U?a/-I|ʤO[x WJ2?B|#!ITJf*ߣ&}N Ydч#~ !1WZB/UBį#DŤZx*'_/F/o!o9OIq{T<&@¿'@b%?!~j3 F ~?wRAC;!夎//ƯK;'u 'b~WC_8\_Xer?N|CO_(< pj5X_g\/BHMdEڿ ZE:~N'~"? P#t&儺>5DH֠cIȔ9d)Nb}2u %.CU>PeBhE'_3k~MBs,?29BW}is(jчB+kt~-GɿSTcrB,HO;~3!R>.Ѿ Q &EqM(\(I\Yx?ww6t}"\Jb^X-WdEf-nчOS&T B_}_I|!ɤUH&!ڿbBk'n|#~6!c=5俉F 7~-!co5>R,'i3$|"WC,ET_b>"T/E*C:EWC?ݦJB&Zxo%*B^KF|5!_HBOm'~*Y+.R_JRm pt},\J|2ߧ?NyALI~yܤ-9?O'D_I E5 T>u>{V;Bk ߋS\B]gKT}Kr|\7^9ؗyXׂx_B[_<|+ZP%~!6'9Kޯ_D(v(뉟E7_B7_x5![twBm%]j H/$=/V\J$"YKB^q#鿏M?'~ 2|@^įI :!>I?F|StTEocLSy!!cOW&=2B?`ҧ,A QLzX QЇ-ST9iylߣ&=x1 b}.IWTBc&Ƣ>O4BԏB_Ty!! E⣄}3y}MgbXeIQ S+n$g/UDo`nb}'x?s~GDTB߿~LPkOQk>X?1韆(!Ƈ?C/ۤ8޻-?W5k K5/\|j?!P k0~+._^5hG+S|F| o@xEGf*o!DOЇ3,?Wh[S69}[|7<բG*"S,$\xʋ>F|)!: G-۳G UB⑿›U%D|?C_|لoMsڢ_AsJ啄:+?և*KW>+n?Pp 5|7 bB??@- ~ o1+ _=fA}@&m w¿FQϔ%|wb|0kj>[EfŤk%D!M1FיzOy}>@YY']y[C]x%]yùן*/t?æYx_7F;Vq sE>Ϸ߯|N~+{ S?MwypU*E%XI|w_Eu_H#ˈ_Hn+6~/MG|"'v:bQ ?J-Lj_Og8ߕ&]I.1v¢&s_`3*/$D^CtEܟ5E*/%B^lч/"Lq.ٿ΢O.rSY[XRWB˨'-U>i$J&8&ޫIhL~IoP'q\b}jnQY1!Ƥ;,(-R ·t+Q Ї,*_%!R??ߩXI{IZaN}IoSy!&Ӣo#~:_߮ayNKw|}uItkA} NHDȤl!_G/Q'*"}ؿd!VBBx>?LbES7bi)_1Q7">3Yڟ5/|t.Q:S _4 "D|}ˤ- p*mrE2 w/!./$'~"|Ҥ|!įT3OagįWx "IvŝT27*?kbч!\ŋ5*CLEOŊ,H_)K/T WK? ?-?x;/'t^xv뷈|$~kXORiHʣo"gZMXLjc#|6odt>f6gRKX˵k:ՙ#g+?G9N#bLVEZDw#-o2񅊴i*/&D"u}؟F,C"&+2 Z'1GL,ET>PȌ}WD<,¿WPr7$U[_9+i1uA">~%Z (Bدү5+[5}O"D-!fPbdʋu2GVX2qFr>4;{@kn|6RJB*?7~?YD>Or{hKT>x@ob!IEϵM#f٪ B[a+hZ͢vo.!o|$\B#9›;rIXxؿ¿]c "~Z/rEIԦQǛtE_EǬ#U^N2k -ي5d߬"N9µdIW[a~.1C. Ї*/..Sy!ЇˈoVw%~=!>7*$tL5r>;Fq.ҿ K^HWS& ,_h%m?P_e*_߹j_Pe r⣊t?rI7XG^i,FKsIrvX IPK_m-*#טN>BF2UdޠfB}>쿁5LFB;߬x.ަj}6WMs%ͯ,B(_1]Sx~ 1?hӝ=I?+q>i??l,GqN'MK ??es,ih #1*/#GLч*Pˏ{pI?o3}x)'_0K*M_4}sf&}Uu__%~"0[*_J ЇoLC*B_%~&{&=̈́o-I( ? ; 1Ҿ)9ߟaH~a/-<'_Kqڗߚ#~K!PS&Y"?O>g;Ѿ1o*?DR: a_g-O'E'|#xE~P"O#~"WKa?jɟυKPǟb(]+ zU,@[꿊 K3_%sZ!Vr:`ۼ T~_]j᡿T{@\yiCQ/xBJ}~U/S _Iۭ%~"Y-OVLƎusʋ뉟S !D6_XGG-/P\Fۈ_A(OYۉ_ׇ`YkdCY+~۹IuIU>x;f]hORwڣ"B7zY1>ʿt1b|6!5@Z C-TD&]?ˬuZaR)s;UH7k^>wRq-oYs8@/B|-5W(/&]I"/c[-5S?'ULB5&iчk/V+Y/4:WbzQ>_G|_OBE?w_Jclq?uI7|!)@LEz  -oVbч$~"2^ME%~"}cT^Bo>ϒ? (_)!R?|`U^\} B'?_I??H|㆏:k"= OQ$B'xaC||ʤGT>y>B(gLg~ ЇZ4\WU^D(e83 Ѿ_0Hńb_֖_"~27\ַN/{_#}ݤoXx~ii&щYi?&}_i?{&ƢO|T?i`"~eч_LG"K>?3K ?gǯ_YhȚcؗGW}A?񅄈?^ƣfo_Mʧ)r|菳ÿU,?L+ 1~菵"WFt>ǻGI'T^G~[a5~Mz|Baj|g5nvK/$α~=RHtjń?I%-{e<xOu aPy C?J _׵n-Zf$JO .#~"fΖ:I?-'۬+T%}3&eϵ g(K*M ЇjK"\|saR??O'f:~fs̉?;A/dX^)t!\f_`GK/TlsLńhγ2g)bbb+{9 CW(:lM*Kke>k"~bo5KWP^FBԟi-}כQe a%z[*H(on%~3!m&m𰿝eByg_%sOVE斋Loч=O%D\lR~+O#BB1tOK;~ ~"]g4  F7R||2!e&HS_7n*O}IWY/P'WZI*o !ՖsKRB运˿-q΍M?@̟/6mָCRW ELϢ'X'rnPB+LzEo BdҤT>ߍ Wta5 ۈ_EՊu&^#m'DNBfUCwIoUńo1.>{+16~ n'컉?@?$rO>>wSk>Kd>[1T>OU(GLʋQÿ?SqٿߤU^B)>?H|b%C&=*BaaK!\|ՄiKTWy"GL;fyX_}Τ,aҷT^Nf>˒?__.G*M!D~Ϥ[x>WbzBo쟫P򗽝_C~bO-? BuZ?,}d1P?ʣ]Cmj_0kj|̑q}HI*Hc`9E}Ot|"g;1)O u}#~!4Z a_0բ_ķL:C 5sN7iE ~oΙ7KJBq&<7j|XSK*Br&YwOk&4K7~i|˚} Yʣ_~)S,l噘I_-?xWa*?I16s|d*G,BB_lO'y6ޤ}_B|is,<H!s_N|!WZo٫bEeXE|"e|1F1kҜ- ,֤u*_JŤ -B/G;ɤ}俙[Jm%ۈߦw;_C/~9Yxw_D;>{1>I~/R bo7\b=_;I9LREiRE/T&u[xw[3ߣ=B[|< g ݥ]^k-_ ^}_zw\PO&DX&oWy1!ϛW^EBW*#[_@(n%~"gY۾֤,<6_Jn'~  1>&Bh-N|)PA&E?4S}-)V[MK%h߷ >E|"6W~_n|ńwDQ^c{H!/+W}u&}??}H ?Y~ [}>bT뇏E7sIx|SU_XK}i7- }~I?4W}Sc}~d/,cg)qOL ~? ЇYcR~*/HϷqr7|!;'*b~&Q兄Iÿ??]O)"BLELLd/},\¿9hYGW啄i_M&=maiү!X0̗m>1k07BEM*kg(12T3 5r/Vr47Os/e8âPrMyZa%.Q& 5~rǚtH"q/SԟSrѮM_}?Ukb6wj5sBT>O&qOo&}".*LN#~.oDnTSYG* ?R_L7—Z'e)/WgRnʧ*b~71dчJ+}ɭQLPrXhч\ɭSlBȝu!+/"X$_r뉟K/K˹ 7bB\+./=/\J2ߤ# Zy;ࡿ A7U.HrM_ݪiߗ4m}J|T)}Ì;T>㟹&˽;/VNUy%!Əsa\K.UU_&D|"wݤ_C(omm;'}ډHr/1CQEOeԤ}ALB!:-<;Ie_Bndخ"פ#*g }bE&Wy%!I/q1^N|5!J~su/Vl _lK,< /#D{~p) ?(/냛Lzʧ*fWtg"~^cқ, ńh[Eͤ-o_Jd?TyAf*]&}w%emvS E_wǤw|!w>>'%{I|6!w}TR@ۧC_|ؤ|"GLE?J|T̤T>PGE D_~q}2>يU&}RՄhO'-?j?{HyAy)t7qiч/_XJE2BLEL|"OB|-!毯_x_3*_Dnҟ-/V\Bi*_J2I>?A|b3߷MW"ߵORb-~lO,<OT:}IRjB2@;7(n!~oU}G_A5E_w_C) c]l!~*^iêIZMRTEZEL!p^ʣڿrLS Byl>#H4Z奄/e,hvIgPׯy4Ѣg_I?LXx!*Byc&?B]mHSK#DLM?~! *'WgZ⣞%_j_K}ܿM[UTEߦ.\ʛ(!i,?t>ϴI"¾YK]`чEė*UK$D|kI F/L:WQ?_L(: zBj\N zg*y;-(:)_oF7|fnчį$Lڢ&Bs>oDv**BAԢŸkU_@OZ 2>0? Q^I1OQ룼}&`чoA">r>$~"MC/%DrEI|a(>"FoJ6[ eŊ_W(弣&Wy!I/ÿįR@ܤ+U}E>_i#{7};sI/BB(e"WPo%D_jrKc߽ U&K Ѿ6 *B{ ?&k[~o5.*A(~En7~_G>G-I2w,\~Jo4IO]|fޢiwI[[*ӼtgfC}ؿbEwI&}̢_EW"wtk}/ueE?@|"g4C}b~ǨVoi%Xߟ2O%D||ڤ/Xa}>C|!!I|:!s1|}d?|"ݿ"Ŋ%rB/G> ~դ}:Մo􄅇_CM|r{&=~>?"~!__'&L?5}3M7 ~#!x}[*&B&#$ '?:]UWC4N1 b|QtB?Ͳ3Gy ÇT>P/ W?] ?Qq}dƟl9&婼P˟oʐE_H{U^O ЇіiOUDGLucX cI_N2alj ~q)~\?M ~f͟iчiG)~w!IQKsBR-&L䗪7+-ȿZE_1[(y>϶+UD㷊Bį)K~_F%~9!yė}&X;f@}1_JX|*AaU*/"D|4΢of֨:@X+8B&M[6ࡿE+~$>گ]T.8I%~2#~"e8ߤʋ >?PelE| !B~t Cq?עيs~E.%>mcWk\x>}.!>[}.5Z}:/'D"~6!I|b&{񵊸zLSbBo֍W[Q}}z6ʗ"~z4r>#~"=ܢO%[MRդ5B ,*/{v{1 /!~2!&])h&>蟲v~I7E>@|ŵd&^Bؿ9@_Ezd^a}-+vיz"Ї[ڧ7Q7+/A?u>n>"BۉI Q? ]&ݫRB?I%L?{Lz+ QEG|!IPy5!Ϥ,k$ !X~uh-Ghy('O>mid3_ ߣg)/?.ʇ,3N16y,w#gWnޠмzǞ[lRQVn<>=wnjѲyӞ PZTF+cV+m{6oھ#aٴAr3ϟk35K3Pmlܰ=v_eI6ܰ!I`)p*H)[-įgqL:i Lg\iU~e K2ixp+7ODq}iTf !w`Ca3O˽Pˬ[l餎{Þp4LsЩZa,k qJcTqX gys C0'gb}rNk^$9\r8B$*Juӛ'62i}JΦ{4H^+<`#RzuƝ_o smq\tƳ4.?W 4T'u2ZIcՐASҨe0NK#W0o 8nM7nlNȳ,T}nOlL' A2۞u7˭4r Ϡӝϭ9i䠖 >?6\iR= 3d|o9b{eSKnw]Mk{~Ye˺gwYl96>$)L}4TۓkaxkfCaCl N#i4v3.l~W'Y[!>Y7l ma.iN۲'l`Ʃ|e\ȕwxs>gns~6xUP+I7GyhĶ%Gj!9pC`a0-x2;H]NvO nx8U~E3ҫtr}LwltԹY9SC-րٚҨ<"\}F.wiO<_aCS$C o y:eԟ=/ zWi^/v}]*/O;{zsGfwumvvD7Z{z/k{>+{[d=~8W zZѶEO{Wg1EM+Z{/:~ vƺ{>Z_ ~ζCKȊ 'U!u8ؑ/_$ ԙIa۩^-SeZ.#)bn~(wAkoHUUU\eYTom 8xfž5bJgr̲`W겨P7q7ڪ?uY: N7m5j#Uv:uxrKbR|^ _S~_IDH@[Pv=. ,tvGUY aY.koKs);-y4bx ⠿)F6yGo"a.qE9]~.[C3Pf8~'6S*u'R?x *="wҚ#i'ZCGǽ?` Pk`3AcUxtD5=#yK ڙ3J;:bbރhO7ڵ?e{Oto(j7Qhd)zc.leuv'\ zn 2 e0Vb/Nr(ڈb+w5juUmq]Td>q<}7Cb.Ic3V A\ < e/55P["9.4EcߒcwS2EԹyz(녜" A^8댝_%(mPd_@.'E]9;Cv ˳LVr(r/ rϵ4 ҇h0sU᜴{IxNk{ Eg4 흽ᔛO<"T{3}>72[%1p;Z7no'UcGv|'y(<3{uwVL 4{Υ> a791pKرe.73#~yn>zmX+[jf4!ξCb=.e@Lc77]mwo,z`1/xtRBХiP٦hM<>}7q4͜P?r{#7YsX6~xv?wXw7&[Tֽ zpX}UbOՇVec{9weVrgޝˠ-AaX#%|_O2jg~wN›:x+y*K]Qaᝋ*.f;!XE6ZZփ*vw<Avj`^;L' F~^sΫV8q+'6czsi{xw󻞔_CdXQ픮F-c'}TxyLU 7VZ{ccݭm,\цXkwvƺz3Xj$ 7zC^O"F":*8S=m;bm]1Ȣ9+fJv ~kP|8'|gIҨI W߹q 'x* V' 郵Y'(P< 3P\6$;Ƈa>ϋ! hCR1ل,k<_kX|?"5>JQ eCy)j"KI?~5CSNx-bCc N|@.5p*=ZKX--x~D="q[}D&jVaPU'!Nh4#"c"$Qg4٤5ό_ dY}gfc4BwUKVճԒ`~nп8$T?/տǍHD 97 fC9d٥0x)BzNI:wm4dnoe{&9,-_~_kI$&4][$A>F)+-wA}l0I^ehP0Fǣ@1k{BK6ytJ:[4N1#'@Hw68#/T|{xF[W^EZ(v2S#txjZlw~:vO㸆>X?1wپo(M%зZ LM el Q_Fa{Zp{CxVKئ*߁\X@gs4D7 VENbiʸ,CjEJ?W#ҵ018׵=1 HUK3w"ʙ Tg"UaW;\=*;"m>OvCq Ena;[:Jp]qFy];"2WvC=1\6DX?/Ȑ8/$, }tX?V 1A1=jD_ڝz ߪ_J'jJb!|HtYMRv-\/s8:ɷe'28Zµ{r'l-򌭮PK|q"2ڨ8Ƹ,Ck>k R+|ɾ+F`B:wɞQ>.zU^oH,/9A#n:spaݘqԨ[$We#蛎] o֭5-aeɺWl{e-W4TnZ央nV^_mZSJQHXH4 byDZ=[c=3+Y y -ak:ܢ2,'q"CyNH1.jE0#Xe97? z5_1K Kc:0$UFXU(lxpm h)s9c[9N>Ӗ,C=wn<@ģ:7D|h0y%a̡>u,Qp%ww:.ܴ5.@t; 9zk^/K[3nmNфmjmxڮ1(ᅰ~pEEKC[@Y?7;F5353i˙R?~FI ew^kH;8)v^nO(c{Ԓ `Oq~eyݞU+xjIp~_$XRKNo⡸lF.'ud2+tzb||l!sXϨ@Zde,K CdSj'g6Ie~ KA#J.EDT©#'av%y}8c%A~xjZܪ[UKG޸,CԊr\>jxq W"S xW N?2-<DZ\X|ߏ"n~KOT7i܉dVb~nr2[g}"wf-ZI>ɵUrǞ^g8xk_i.Bu4䰪sM߯}teTm]]E^,UX5/7ܪfY?"=>[-Kߎyo ??tiE=4j<бg0TIC*mKa"'H*hUj4lֈ`uuVCsO[w;T-5[;뚫;T͝KMY;|X--_mTpO{GWkq^7Fz<ᦡPeY]4#hn<st07Jm)#v"=ۤ%!"j)c}Ӛݖ}]UmeWubL6n FTN/yyQ=8Z'LL|R直ݽ;)\v|SxM`ܫebC9c8Hk?;gɼ?Xq*O(թl{ErV'/Q*(M,wS|uА=II*}y.7EW..2sS:/:ڙ|- ZȓhwKritrlr^b(7™3◻fWI'q8I-nCc"8Z4G9ZYƸn?Cq9C}~xLQoy\'%cH#S>K˂r|XW>|I$nH&?YlB79@MQ>IHͽ_HG , Ģf?G+&~>!EBBW~|!+%9ÿ2+)' >ak*'~{[>o%}د!~._Gz!aH6/@[BQ&ֺ2%D/#N!m܉A +K˩V:V[@)@WPgiӵkIb)_o[E7*k}_Gکyh~>I|Eԟ9N9Zn wn>G|N/}a! a򹚿j/?hSB}oZB?$"o!D/U^$ޛ"~"!0@Y ⧛/sKńB!G/wwB8v9Պs6\i>W~!N¿k_xZA^kҋU"@ o& i_l>J<ъ1_jp|x&BK<ܤ,)R`ҍ*/#Dc}ؿђ?7lB߫L5&ݪ)X?[LEJ|_k*/'Df'-;y:b|_o,<=*_D(K?# Q7t M#V~-/U\xVRrB?Gwz 7/&W+%iwHyI._Iݎ-[hߣ_A$#+.}ФYx!_H}X?~¿#=hC=D _w7x ㋟N/y&PCu*qE/\`ч_&P_1k*/#UqEF|"_u ~.!i*_Je, 6;@1>~+L~#!ߓY7)b/cB: ?5*H~~NfE\$\B+W&#ߐnBuRg7"BʟxPB\Bu~wo&CgZ?_BI/%Ded_rB-37*?"P?&~&PD~^.Pwmߪ#BOy8)s@4"ЇYK煄(swB㉯%D S\&|1y>H|=!̕uBUP?44\fa/#DZgįP̈́įQD*vAfÿ7(n#ʉAfT)Ta_@Qi5_$CpI3?o8w'kB]+u#x.q}^` ox3CMM?Ηj屯s_D6۟Wui/-OVLIfLm89߹O ?I1 n wE!I/$~!/"{/SM!^+5HG\BLj_xA)?D| !;_eo!Pl?tTq[?vSt4Eį1.W Bį_eчˉ/R+$DjE1*_D6v>{5&PaZn _N|!}1+דro כtE_NFB ^May}~3o3!RIj-п[Hvh)/sBb"D|Ermfޢ}_>|ミ?"Nޭi:ϻLEM|T$>5*/&DǤYaR>Sy!%?!\J/W'&O D ~"/Ф;sD@?dҗ-OUMg'LE?I|"I|ʤGT^Nt>?bɟ?.QDk_SwT'S-,W'k/sZ_wBBї7ME}銳YoT^BC|b .}Å~򹊸?#?iU^O~`ҏ-/Q\Ed_E?&&XjNqι}Ϥ_¤_[aOWEpߩR*[' U5w!).$??E?EbdOgoT;wWBBOo>BϨRJ_'_tʫk}O?Wqg_ UP  gY5MEK7hb6-}&VY!!7u>ݢH>͢O+\xKė*V3@<.$ DaG_5[~7¾Y˅Ya+ Q?fcNm"=<)@'[竄Ko!Z?, WDyKCL/jkir1aLϬ•*I4kpEW_8WYgoPy"7a-e71S9#|7|E?OAGrB> 'Qf, /RjBԯK}5[bү'yxӵ*_N2B+i}6>TLn&W+n$,IDV>3):oT`&{eX&(r7[[ȿM(VghgP;o$D!I6ܹ&gy|Wx"W)&tBתLO'FRBeZxwW¿vտb_J:_utÿä],oϿ>¿#/SD|GM:f1o$Ǖ/QJ(*¿_! LV 1]cҍ}-k7t7LzE#~!ƟRo&%RK?-\|[aB7Ro%Dޤ| o}_C"B-/V).tWh&}KZx% ,t6i5~ {m&}\I|"nQ4BݤYQ{/t\;Lzg;MzEE|"m{T>o>ǒ +#6_Lʗ¿R>/R?F@'~k!'>aܸ/w+iOʧb}i#G ?Ty"gIWy5!1#_aqx~`җ-E+ї,?eo9!HMoJB&yIUfBww-,5EPOGQ)Qߘ;O%Dg[awOS}ߛg(b7 %G+ "鿫Y߉UGä|>!g> d?&=e3Q.Q ~$lZ? Ɵ8BHx⣊]b*/#DrBM/"B/&Bm&?۬KL: 1~7ݢ9@E9hѧw"ת|&!%&R,BaRE"DwZkIpU^ٴC0W8I=*o$D|utEtDM>Yaא5[K=n)k!y%>Xj H?b|}WR"O2T.O$u _7jO!D|ʤ-OU5p1VW}o Ї[-v*_5!uO#F5ߛ87tw~E_MDBv'+pQy!$N ~"^ޫRB1}{/S>Sy%!~}W!Wb|IQ/#;%'DRzo !Ab|>?,\ߧ,8>x%_?(3u;$y./~ArcܿE߸rk;4n޲fʉ;Wyꝛvl޴qT#eQ}Jؼ߾c۞͛Hة_3UtK3۾ǟԳYM;7&}/Ek)NGmZ<8gN6oظa{ 08țiAL.#W@nYZɣky밵,54*Q-vf7 cݗ2r+7zɐfdV,,VpAU,Fi}Nv? K\b8Mw{FBf)JSM'wۃ!@͖Ȇ-nk،\ M;luyPx ;i.'hwoߥJ@'Q|d{L6hu=ѝ=X޾֎9]{vuFi=6wi<- _ƹ{[)3ղzu5uookGnn=umr/tP]'ʡ JK*=zJ7}pmR)~W#ݱÁ,2ƺ+0TFVpMQ:3t;b݇jlFSSYn[7:SXw:ݾ_<>/S_?t/t:d r!tF\+ ,Lnh`:%HWahZ;UqEc`YR֟뜔ZOJJPsZ¯w:\[d#Ws*~p4j4F~$@ D{K,=헧 ܎):ZRtvl-6@e 4:(+ҭ'ɢfM~7P]]So,o+ m69e땔ovĎĒY)Ö)#UUU*N 8Y1h|8nmO ֞CǂwN-XuOqi^91`׾*J6hsrìWufXݶf ɲ|v2i v`ޒ$#I L~4 !|/u&L>!BP G5X?ߜ3Xԇ˻|ilJ/Uzpdu_>/:Y[+rގ|',ߑDN<;#L"'Ouª0朱wpfl,'<ųipV>Axϸ$i ' y~^ Y@ Ҏa_&Mg\㣴Oso٘8*.?wڞ>A-y"w q$)Iw}nG=-ΊWxyˉw<<"OL'2N] g8gOP<#.X‘1$ȨE֦d2-٪HM?JZ߼|>߉G05PRYΉxQhm;y'9@h }^G y#}ޤlT[ ώ2:I>'LL Nrϲ(PehwvV.pX@uFFnJ:6"nZ>#RHI]w[`yex!ėO:`L(O[^P:-~y}T7Zgu|'iX=|)_~E_ ɿ;%'ҫm){<|!HwwYC^|t;*|D<>Cޠ@ yXNF7ݷw-N+_@vU|χI|7Z/9x~TB^*ɫ~cz2جr (pcF$6Q-o3YJK]x/.4(]bGuGxt3󦆰8v:ɯD/pWᗟ#v2́b=}|1cv7YJ'; G2-0,j{>81?/9[zwoopw}n:,ۺrj;cU=m;[;{{{|j% Hђ)mC[{mJ?D hMP[k6\::cXJHjٴ"#Wu m5'̿LG W1W?u]NߟId(cºPVvzOFTˍÞd91YmJ/2*앹mEUZMXk++rö_/|F]oU~KzwܢGz ͩJ0`T+K]?KSs+Zx^5om`+mPcч8'Ogiyhߊ}دO'Y (_%!Vl'q7O”|!!oQr?yag}98^'~>![BBB'%TɩR,o('_˝Ɍ=_RhɟNu?|̈́hfsZ%D#I){@[F+.ğѺ6K+Nk$DP>W/W_K;:B&]y?ynE_H|z&QBEǒR~ܿC"o DP^vZ9SOKH ~ !nRy!꿓/Ocv_L_BnK C|=>+ uo QYx1ү#lj ~)!e<~^e Tuu>瘿}_hu*NI7Xa:⣊e/&F| ER~9Ezy/ Ї[꧎J_ߤ\SIR?必IQ럷|!"n#~&!w;%=eI!T%;K?Oq鿍пŊKI7B+%wBw^q#K&B{B(=t! 2gU>Ifw?U7c )_Uy!!OW.GL+Qÿ_Io҃*"D>Z"a*_5!ZB)Qy"[?!~*GMʛ Q5K} c&=5(aqKtRˡ|S-pek?NS^7MzB EILE ~bۢ%}~"E~Y=$Xh鎷$c~Ɋ?rxFn⑿pVysg(b!?~ل/k_[>%/OF啄M>ƒ?%jE_e}b}G(."rwkE)@% do&C [SfP(y Ο"O|3~D3U~%~ O(iz$\Ȭ7C;T>P_ƀ_ &;EZ? ~!!$~b#%PBg߬> : B* ~=Bfmuw= q}m>L[|!2 794I죻q1k?BfL 1E/$T7!3f Їi}1&Yak?u4[q}=*>Xa6K_b۬C*o!DKYau[SPʷ~aƒV,g~o_?~IoPʧ~O}o ~"73V|!ƗRE3քU^E_͖q.^Մ> _Y[G|^G#-YykࡿU?'Dn?~ʏDH|'+P^ L[E]TЅ!Dv_XG{G_[+ʝ&D'~-!淃&Uۼb~ĤU>) 1utTy~;dRKaӤ>>E|"&usY>w[G&#a*vܑWy~ܤZa *vIW/cu}ؿu[tʷ~ Їk-t̿__@LQS Q?4u}ؿi*K9o1鵎s }| AՄ F/C'x ;Ǹolx~{o߭ b1xv32ۤu/1B{/#Dߤ8OhLEg+%}>l?򼶠3B_Hyb)MzDI|bjB#*ǘIPy!,;}Τϫ|)!3+}o D|ђ?(rB*_7*_OäX7@ˤo|#!&}ע&~66.=Kv*k@&TQ?1}Sc(L?'Dܤ_Za?x)ER%A|[C?~GWE4>D-S/kq|W'b Ѿ7*BяX?-ˤQ?Ї?ӕ%DWR>Z?#T-8Ky\c#~"O8x$쉼P'<:?O#P'|:%|XB d{>{>OHfqgSsI'Yq{)zF ' PhN^K?ٷ46o\Zٴ}ϚiKr+X zYp u~ICÐݠ[-EOa%6<V7Fxa8{kå_9ƿ_x3:MzA]ߪ͔cÒuO-4ӧlG{4殴]K}_"4NOy\wf~25‚3ɉKl@`қT :9`HYSâӓgf|f1uzG*ux72ՓhPY}~?qgFsY@vL4?.>`)bJ@qЛ^ })B;x4EɶaGbQpiFgߋ;FyxdP b8YٽE`4>Y]\9v'3(q7e : tjchv/|͓]6g8pjNj {`KDbtVo_DNsNUo 7֪֣*GFd;zqJ)W5x :yͅ'8DI'0~죎~hnNs5Λ=g'1[$@qt0v-JFt62.-]&ÇwШ,<?{ڵ3EDxЪu#3:DoFu Goahm'NX^V?:OS&rnCjз-|DҶ}ߛpCJa^`?(NMZ T'WSOQE?.*#?0D(^[E7뎥u>T~aU#5lzgDEq~jMIĵtCzۂ2ħ))}bm6ങ-61}{X0 > O7 <%3tn^으JFcOSXNRSᤜDXĕBO;YU h8WWZ?~L:58ߖ@37p<7%v،OsZmt[@_GkwUCb\_OSfX눵",S bvڮ}c 2fc˽EsC#ۙp.`?N'}բ/6ucỦ/sh mlч7x/s+rO`kaE^oa'6SƒBBYO`+Z"MopVNvRM$*Bd#N l'?Y'qu> H,'6 _) Ѿes6W||BBNf']gчO`?-!~!!m-s?mE-#l]x'$DЇFW)'"[ n!-}o%D| ЇJ&jm2VQvN|-!uhyֹ*G?ljʯ%~"&'o@QaW(%)i9V@ؿ(@^q;u D>K NBPyY qRO :B,9;'utE&~J˜)j"o"Daf d?%-W͊}y;U*M2@n⯡uпN!D_5Ɖ>O D|XK,ͤK<帧/RX~n;@ a'&Dzex'L=E͕OQT>qOHG#N~'~(-/s?ï XxKCS{Ӈ)j"_uDDO# #$D'{fBA(`[;'`> O8SFO,o$3TMU~֛8;1?K|NhM~âDE?=W-!T QT4?Aėw_C.-~}Nh@}?@?x?Hi7r˝9(_E?LՄ/k*y,<*!2ZE~c inc};_mOUdpuOP[:)~x'1&ńh߿XڇE|!Ƈ#D|%P:}i*_I:(o"sOLtS\jB7Ɖta,!gYgqķ(!lj'ȁߦnۘ5N9(Y+'d#D5"C*O{œ/Ϡ,gZėK1x.i}%Fd<3q^?UN6qs/Tؿ؜KTBPNI:a?NpH&cч/t0LNyse랰ׇ%ė;I'mZB1I8I>f,SR ̘Zio&/!{XjQJBbɟ T&B-ovO`J:B6'g)vv|3!vU\<'K/_f, 3.7]$Nń(ʏ#?W;)~Xxg80sN@tGv=Ε\⸧#K_xḧйeCI E~/#~!귛ՄX8DO|G,Q"˝ v~WzB s"@'_Yy1s>/!Rg/u'Љ2bч?r^a/7|>!_@t'yؿo7XR!~!W(IդTD^n#Yq=w ߬3_Go$o.;V'yKZ?y\c}YKykCp /?@+m<&}Ty7}ùW |y ~?N 2}$٣$ QlQSFߣOrg}<U^`*gEEؤ/?Y*%eI!7T%'Ko?Oq7B/wNrD| !LzōS7b|T__k*NWę{|ׯ/ މ)\v !~!Ɨߚ{zU6>=eIVy9!)@wۿN|!?XEU^Mף{,WKSSZp*Ж:B-{B[E_?Oq1ϱp pOOFlBt+žgTJE<O[@ u|,K ɘ{31s"g?_B4EFg.#DIrQ( ~!!+_H7 /uSC|"G&Vs-<.3">ꔏjGE*J5e 7Y")$~M|!>@_XI͵XxʫQR>? Vy5!ƗU(Xk&x_M3?-KH7?o>3ׄ-o!BBU"v?CTEd|8פ6"~#~!ė"~. {Iۤ->uVK~c;8+ 6ƀL"* @Q,a$'N'I8q:齿套痼oEvoϙ3gQ~' $D!>뗴OI5s=UhW~](֑|7hLh^NX>)6~<=ηo!?| O$~ !&׏'t}lҝyw32}IOESci7*n"4ٚ)!?+F#H?ٗdenm>=.a9E9+dxJAv }$z#uM&5<ڶjdGJGbt8qͮa4ז_b_O}6>E37&)zq6k#ym^{&Xn -4F۾ؔU۵lZt;(1o([`Ze4;!U+fI}1qsfZ;qٛr͠(ۈ峿wL8'Օ+ye]rbk0VdQ)"<fy= *tw&!:,N1qw:b\?bb:sY@A$vE:PJǪ wr  T&"Ե0>ڜ N]o@:`aNXV97Yq714i*|κP r^1ZEm EMʊ{a|]bqeRO[$_H#`%3&tV:F-'43~?}ה5VMzYhZPsOO|#Pm?;@cr?2Cqc]CNGdz:^k j1f+s?}y.l1ZDZq38l-oΕ +z*yq>Si7zƅYw1n xyp6^m5&逸3;;pda9¾&6VpϚC@ BE~{FZ G2POtW7~NZh^[ή33~Ms_-XE(y|0qHxL`4Q( 5J_AyV?띏e@ -WtYmgͿBAZ/ʌuOt٭eDA!rna؊=}&돵?āzz[/}:cX^Y*]Wr 2,Ԕ#23-gNlNUVU=K92PDq Wy^o-\U &Q7hc[:".~PjFKkgj]n3"ݗ?fKJ !q>:HPԤ5VPYXnt;/醪*M)-}# hok݇,kbJSzE͵3ʙ NNx*9i_դvXj3Tpvg_ݱӕҧ!Ex[b 5 s;JoDyd!*˂KeHωt{WWףZtw>(~2Q3~Klr=]235+'Lu`~MMf:--A6OgUmo S?rդix8hָv ]ף WjG2#vSӱ3*{NcˍTѦ"_.J׶~d7|mپZny8n<]~ڽK QF`ӛ{{7EQf"sܺe%3d>V=W}UaTdwhw)L"X&GL~ꮏʜfmW3"86lW ں]v\( oGT졻 Rxco y͓y,^$S"͟BcޯCx>u&wG)_uAׇUU> h>|)!O E|,@}eoB<웨| ŗ>?M!~"}L׭4 LB_|WoSa_i?/%D/,YZ~MYʧ!|Cj j >WGLBboze58!}o$}_Hk%1oEj_ aJ)cb*H¾1oԾQ!@6H-}M1Fmr7k|ҿeKw?I4Er|-W`EBF|9!M_E|-2\M|B'Y5s /"}oTǞžį$}ZQnɳ@;#;o!y$O D|7xq7Tn GrIG5bZyGycG/S?]&uk~%!scyﶔ| &=ib~#e_d~b"~$~.'/1e}IXaˈˤ-<&+1b?D C|^Ir_D *B"y#=x%_Ǝ*qDa /"+b|}ԤkrBc&}"?N|"g~0S'cSįQ+, B&}Y7/ZxED}R>VBUf!5LL!>BN4>Y;NpɼpQq !Ɵ+q< 'q?ڌI5NypIBa?(?^qO&Di'n&De?;sQ?"~!&R:|~>'*6|/ ~/"~)!G\q%c_x)_@|+!/$~6w;1q7$vבK7ab=H'j|%JB(ÄѕS5>dJ̲;D ؉_NCtKϢ%?,? BolI@o"<%Fq1n~#!ot%,_IB/>K yo)6.Rȿ%~9-^͟L,%~ !̵?fLIk4E oT?+LnGV&D*Fg̽vbE_FZ-,K[,GKJE.0ihX˯#D_ (kcI{4!;Fߤ{՚*Fԏw/OTNX?w(/sN$IG4{ؤn<!~*IG55!>FZʧ7X^_s¤SNINFo'MzEO?M&ݨ3&jO~Cݤ #7?G٤j~-!I϶CS#O3_OxzM}Iل#CE<O|5!5 ȾM7}roA>b}"~Ra<>B-#D~*E^ Q~ݷ{\;hχ֏_T~OqOK|RBW* ?ڤ~%D|yJ}:B/Po!~b3˽oQ-}ߤXx$J![Ǐ F۬ ܿ@O!?NNLBMEs~iү5U |ͤ-~kF#wQX2<7nϧ ט ~v!JUƐw<QavC3{Er(;Ύjٲyk5ٍ=~]8[m+"F#x'9G5#t|DY#{fmoX!4{c`_WqRDn}.9e9>z8և-,r;A$>w瓬|b߱rֆY=[w ɴtnz_yȏ/t2xU!ATGpq/r|h'y+0`_T_X}C<"owp-|s fCj:{\6#=}䌜luoZ>[>Ш1QD @sf7X 5̠^ cbh^}ڻ>lR{xoャc6lzl +|&oOF"CU9 GX1mMSnUĞc.4[{>Vh|]@GN$bp0arؐ`>oepэ[dSU&\%vwp!1FalcEb&.A F+wrZ"D}+a>!tt}s3WK'Vrn/kǡ8bJ7hnw/!<)tw |BQ9A҉XnLAs.>vƈ=1/YbamjEhz@s6}o.tQ5%q^֍mEC-)zȋiA =>d'V8[F%yqV*JǛx omt{G(T;yNGKKu ^^Z_Y+qM[kX%yk Q tɈ$\&:u%!}tv:CǵW ÿgF"bNFcbMcz5ܼZK]z4Ó,phq-lEk1Sn'{#z 3{`3eDF}t<!W[)yr 85EIZ7 ['#0W<0C 0tBq= K% o=C[4 ukb:mpq= +Iig9H+Lxch d+ZԢt2/{-,Vp[Ϫ8r?oߒAyR~#,ﺄ^=wm =b ==.(nf[zbݚ紹f魝ݙξc3}}!>WdfK~TףѤo;/~妨@9.p1_UGGFCT9v)!2*EY/me=֘sEMlwهc G;.kYm~zȹa+?~pg;{3özYQX_w^YgCҫe9Dr#Me~UAdEqsSti9iv *<|Yy' \+s !FUZMM'{en gjҪ=wg SFg_7|T Py5donsM&ݰ }mZ\RP]#tm u۴ݔWj/SۆoEÂk*My5iM^m1̯u,hcǻ2 M~#uޘ*Uj?wׯZ?%'TKIz5D{˩oV8i_^#IU80w]5Ċ\7kITȫIҊm_Ee.*z( ϮR(J.[=]nF5V+C` /0W?Bf6*wmYs O,ui{Ŭ-&w#{@lkCzW^};̏鿲V3&tv17nte:TAB7 ]d^| kOkWLFE'vΞK3dн jOQYڹJ?{ 5֏]v\ .|vKT졻rg.^{Jr8ŋU^'"͟BvwY䡿xZ-ǗQOFwcG5h]P!j}cO:L@|)!O Bb;aDg)VQ%_M_W7|p~¿ӔO9eLO!f?M.fͶo6$}e8r}B*FTI~)!W|"H_uk5[#˚%/T:Y_n@LBo iEįG.jBO2OXar+."o$}+_Jd՚r'ayطxԳw-1L-_6jVBOK>ۉo D ~!gI41!2iD"Qqͤ=#{_x)Ҥ5sU<_m_+ aʏj7}:_DwibB`oT\G;lR'DC'-[IIݚs,F-F d!BWAT^=w&о7?)V^egN9"/_~儰#S SROO'Px3W\g, y/"}&Q;}!~%!{.5]_ϋ'Mx渻wo "vu׉/$~"/2N͟V^Q}EI|"vW_K>Yg.wf?yQWH_aҽ_qwȣ{sWͯ"DZCkV\}/$Z+JvVr^g5"G_#DDzB~[Q7Iq3ަ[Q[MzELzo#D|=Fa)_m'Ǫw>@.BAw+^CI}߇LEk ῏1O}4F?f)?]G}J /D}V'xoI_ca%bk1~Wo +HDK𰯚/%D[g7|3I,_@[1>4XڏO7Z(?+E?%o D ~"mVZ">M$Yaj_3H7\b Lx%_H󛄉_K\""7LeM1F7Yʧp~">X[oQ7">v;0?_fR }ba_)^A]NU *M%WYx'D]mo?BZ'˺~yùgs?CןJ, ?9;mq *?1`_X7yù닒7s2?<˪y" ?7?U1)3!ӟل?L|ȗt3sQ?O#~!N|b5? $ !+.![_J\q%ɿU5ķBoQF/&~;!ʗP¿̤kLEė"~"H|M| gpOk~9!¤{5!y//ï*B/F_%Z [!D~u ɾMz/"Lx~L٤Ya[_"}MOO&JE|5!nk1~IZE&_?3A<~)>`gOPm&]o}ǵ)0E1񍊛H&]ByFyML:=FߤgL:߇bp} zmN*/ԉ_=O!D|'~"_o0%?!zCG|9!Oa a WGy<~5o =drMdenOq&^g#iΣlמÆ/o P۫6/;-[ZS5F԰qOH5 2KoZ)V#'TOȞ'I[\) H+)iFR{n>>{sݸ7mc]#Ƈ?iѽ6xGr#0`kAV\rp 37F7F~4)V8Iue"{S@Xi 1jUHvՑ"ܠ}l& =XBu,twBj{Q3B#|Z?ֱ:.{ӄp1 eɹ,[pޠ bVq Z4|GŃZ0oA-?`p"}l21>"1hBw8}쭰Sf}mAM E) CpuxMeK".R#ݷ#2.'X,s6L׶S}Bw9+s2W [3;DtՅFIMe#%#R]2 EIlXu7ovqC HN/ކ'a3*8E :d7x}FcQH8$2 f|X$.ctb썍8;.!~}f7mihnnmW 2ipOlw6~99{CE[y1烩Zhk '"Ifng %kϝ~@cz;dƎ,Ԑ]JږywSNޖ--hߔgs* !SkA%44᳭V𥅉C-i]rŴR!WVy{|Ɋc8ߦw߽Tҳߴ^=,qSJ}W3RO [Qwgko@:`Q/Cne_k{g/F J19NCr҆Q3XTPCr"C֑]qѡ|nz/Qش޺7s[7SeSitV:FMJx*|-gcS(u>/-=kQ<ZK 3m8<޶->C^kFZY1C˿PYc8ݟC5FGycj/)KvOWp] E[j+"*yq~Pi7hN/eN79EFCRrD,P/-'?h =G=rt0C+p{7]o̞vh&}0f#қ1mb ON3w i) qq NwLd`z5Q|XM]>v7+TRtB+䬶Rf_L+~Q$񁽉?2x%Qs V3\t#'Ի뽵zYaQxr#Gvwo*]WbólMm&ǭl,1<ϲ RUѳldh{?dWHtW@s#Dl qi:NJh,Wn2.cRtLn)^zx6kݜP%[x 'Q%Jp^PVwߗl_L0W*XSM*,MvSZؕ:Dw '2ޣʆ&S +&W͟@7jVcPzEWc^rI1Ʃn.'Mf̬0jVc2{݂66omklMkt7'+p檨 rh`B35{Up\wF93وSq%_{_M:xp\ :e MxDg:vx??1nSn؉N-T'ۻNH{HɌk֙B2Mf,FkgwXԗ11vpG=-/}4gD];W#}VRήt'3n3M[ =]6 u҄QLU.I7P|WsDUWWPy<̨sR2! dtX\Ww]ѪlN=uHy<YUo@Ŵ\~Tjc_65,I}tAsmH Nh*{{rOFbDr, sϡM{VJoav?4*jGhUxM^ia3|2NdLiX-S4&֍`k>a1aJIIwB ?ī-w/]]A49f~}؛1դKbZip2:A^җإrָJ 2a$  {(8Ͼ̣2nkTrzgUy8U/adE dB>(kn4f(9^gtU Tڵ/mz3}|?$-%="k8~؈L8A^W^ïǦ4JU2:cfSGٗvCx),e-_ޝ^|l]L_m r0}d|SfFdgUDϒx2`dTdDS٫*-$XVGbzosyڹJy?{ k ub$Q}AL].ԕ飉T졻URxc:y͓y<X1i _he"lO"~j6[&Ŗ Z{Ik_J?$&P>þRcK4/KQl S Ck~5!>}W'ž7¾*bKmŚ[#+_:[/#-'~ I+ ![#V*_[K|!k&~Fo=;,n;}xۂK,("+Ʉ Se )'xMA0ģ|ν"_XA4W?ד},G-3EՄ{xɊHԫ`GTD4W}d:< JlN_G %;~FE|R=m K# ½ZWO$~ !ẅ́ߓ_IOM(feO!RBSMz"#OJ~ 1=[17Al ߩx%&ݦW/0N<쿍 Mz%ZKTkῗ(?V'MzBķ(nc+5RB1N HpVB=pHRŕC&}DWBME?BjB/ 5c}IJ28k?>SҤ/XQo!D}ڤjFBCg- TMh/VE>|턈Sqk&}Caca7?ԁ}&~!8A|Iߵ($A !DA;C:%C…7慓SK1~Fy!/CNp慓4"'XIʏwg /y_Ś/HS5I){"ƻe:=Qoa pE_EO׆g:?=kd͟Y| `WPL~46gyS"_L{&&h~!k(Cⱞ D!>&-_B|E~O&5S_o) Ӊ_ĞiL fB,i&m!D\/eė)&y/3z<"BM_K?W,пB7qrZB&]iJ#D]e)&_Hϟo$D^GRE<ߑtþ$a? *B\[c_oO4# %zLA">tEo ~"Yu|rߤ?"F$B%@n$~"C9Mywſ7kɜ{"OWZ7; ?<,5{?U1̽_8&DF|!?!b+I%'KUl _H_!~)!_Arŕ$/!*(^J!Eqɿ?'~'!ިcw?͟NzI;"3?j?-F_L~G_g,~+b?`҇4"/&=H|"WN<7\⧚a1|E>J|*c&}BW9<k>4ӚyLy_"2Q0髚)!J<*w} ~!&$ew4*BOƟo]<W+#iG%%GuHMw"~~#LtStNp'kTTy6t{g82WNNOy[_LOSz<7g(MWbC?$DjBo|Lh~'dE^Y_#FA@ %S"_@դ"OϿKkB?IhT cH Mgo"oUܩ &ѾE$u|IG f.W|ӗs,T"D>ħa* vCt%D>i!??,|R!^Ggy{U4>Be|j'Z|iiM>\S ?\-"LJfFL7\r#ɥ!D|,3i~%[4Pd&*b|¤U_EcՒ-(ՊX2Vkb:SXoߨ3 p8~L'h4E~'͜1 M+ Ѿ;R/R3'4ׇ]1(zŅTMJ).FťT+'.y/#D&~9!o>o"D^#_O# ۉ_{Ф5Co"DJttT7znȣGG?]2[w~L:enn q}8nREo Ž"O? w !o5$sk y'Xڇ7Q'}O'L 43t|.S^7ܳM6Sn|B'9&ݪIZa߭OWE<^iBM"/ ~6!fMKޣs&s;XEyI/jBE&mG/&~>!Ӥj~ !%1RK|WK/ciKUGR :͟8 5;y:g)b(zިyh7M O%<$; I6B6sy i}7Y< w!WB˖_䛖WbΎr'x6NϏ?0G?C~b?UqE~.s͟x\;[&CH\~eo4 !k~g?U[ e抩? h2eo椩9y@?J4)yՄϬyO[ʧ7-a*."FEħ"U/S\K7j47uI-C b)UO]<[ʧ"g[bjW+/HoYS+5"_Zaey_ItEz$e⩵?W/I&BSkN<7\j/#D6\!7mڠ̈́ȣ įW˧Z53!yo%~:Ƀ7\jo!jsٷCK3|y|5si'9_?E1MIWjlB_aҵyw%X۠OS.?su<ﵔOO#W*nR(/I'-(zEO47¿,%ԩ ѿC'+\;_K1 _hnz,K0ڿŸU /ܠ ~O$~ !/fzOug̈3JݬiBIϴ󗧘4ͯ&#OL!?,lk 1|:դktEZL=ϤXQ󉟥A L @m&oۉ&Dx #}N2 {Iþ;_%&LRCˈ_e_Ew} 1<|IVBIȣWYqE~ɿNq}wB A[hS^&CK ῷ.d?%=&CRyR? E__7A͟O>fG_XOIhC-/ cT?;>y|I?C爟~ޤ/j~9!~b/?Wdh~!Ɵ/C9B5ѿnҷ, +y}[N}x#ׯL_Hwo,<o"DҾH'b IpKg)_͟C({_/>KH,YN5TN_CXUL4T 5 d|E/#T!~"=_)q_ASpI-(_Eyz?B8߾ZBm߂-./]PRr"TGU XV0"3/JAEgXK嚿Pwy/O'[FSH0_/ @yB?^aIbs ea W֯k E.gRpE-'>XA`W9Ej<$0S"p͚_G_Hןħ~ń?9OA"}LdG-HF< WYK@7+إu&-B|Nҿդ!2vZQvQErI]Aee]ħIKb K|ڤk4Ty迆i/uܯ ךt"/#:(q_Iwȣh~+\?wQBKy!%p2_d=?,7餅I1|"!;<ۃ\#>O _MdPTgaӈO+et>_<*BW~"_G(G<~&j[I~1!{K}/ ~9!/;Lz("RE_^l=yNgBKLz"RCˈO+!wYiGߣYߖ$5՚?*`W_HƤj~{_V | !o_Bߩ/s_߫<xȿ_O"D@h P՚/냌%~*!׏_H >n'5?MI_þO*F'UŧMo#D?#U~IMf1An@uש K|)h?&}OK >5y=+%I?zB1CגSo&*^\Jaү4!1 >N BO!DiX_M? g¾?)ߢSa߉/2B?C˿/'D=Lw1cPsX g˷[l0sXo';}+\j*}ChA,zWrTEm]42guW\ĆelBz9v!8!uǧ#|SJ5WgCY;l78U1*[O9L*V|\sϑX}nVSFtbxt?]n#l[{K,ȡG/ ɲxnAz1hhoD=v_>?5̹'+a0v0>c=3]݇z]Vξ~=NT®.xL`͜ޕ9ܛ.ù5!M: Jtĕ=OJ3j-*;uקB+?s<6ႲsX?squ)E'{*-jX\}X#\{M@WϴY{gw`E;y0rs'Ng9LwXat82G"N,b D硰VdQ)"s)r p ;{3ڦ&)s a[&8qnwGOW\A  ܰAF!Ntwp"VX:@$ Wu'7s#"S{מpi9hFlbύֲ'Eb¬"˲{CdaOLlO- "s0ћi>_Ԅ FV9e4|~HXw;kꋷr)U.nuG-2öF|\ "L];RJPgXM?N ݙZ̮HK`8s{as 9UWW;|H.<SݱQL&"Tt:ocµ'79~Ό}nzC-m9IIdG2is1>q;sx{&ITLdz3=F>s̭:3}uG2Fg{)#}DW#xZUMQs넙iOi?q1Lv~ck{R t_1)/WcN6v}飁^un(Yis5ԤOeҧ:ҝǎϤOȅȵ;sf驃Wl0JEqsw>HבENGt ðL8[WoI,Z0t+YagPfВa{{N4Mr0Xx`,!0ˌtҪ0u]u#O9G#GuFDu9cs?F7ػw z4(1p0̩R%|3j\j)\FBHm(M-,G}Jb)4I㽙OG󍝑)p~dߺtZyb6tw6 [s? ZƃNfs-;Ґ-% 0%X۲nЩyl#mqg̔.n3-Mx23cwEXlÿLNh9eQe"sJoPwfx)/;h[=sdwNRΑ/5b}ɥ:j_$8E^^Z/R-x}PϞpJJxaJ$iYi&:ˑӆE1x5a5=:o:5NK v;\=>IWR^jYoI(^=,qSJ}W3fZT<1p:=dZ/VqFpDZcǀ|Zq3ŲĚK[5ݠ-)IXZZy)J{b%/%\5.+ P88-[w:Q5 6q=1oTv(q2&孕{+CX2"= 18*)֒wg/Xy$Vͼd$d {l={gErsehJXlEu$|0Q'j~Ź$qV:L[x+oNcBIwߔ}&J<{JZ&=пujlv{VZӪINtZg&z_2$w㽚?'oIpտʚ|{nZ9FgFZQqkI^_Kc:xg_B4A/|4LsNakauf9׉T3345k"$i$ @1Sik26QI/d:U4kjUܯ<!$[\价lM||YYǷz\/AZȟVr~X/5Eb4 sDQUNͭ%,MqkKLȡ7Z=nF.7ЍzvJ.Ycä$n_ub s9GˡܕF9 wcg_BKTF޷<]>S2סUiym&}eLX^QyiHlWDDTu"StR~Ty&-?6Uw6-ӖF__ʺtr~N и8gnXFtFii**nʇ/TYUYosB;1 YU{O7*or(e1tnH[NKtOLbfL^`+ "'{;otgeEnQ.dռ*}:U]^׽!(RU*c8>s;{*>ZN vK~Bkzos nBp+9j玶+"O^, ?̛e% bq MɺnSPp~ǸUuR˿mcybe* !^ެEd/܍"~j6&dYe4˔/p_Yxx~þ')~bEė¾P,#.&sa߄y7Q/þO!}SFI孰<+%~b_fj~%!?#Fg_VJ~R_~M# hh$DV_M5-򰿞Ⱦ7¾¾L>)kE-&~ jF[I/įV\GHzB_#+oQBטԬ[ kc䡿⿭oF[7N77E+Զ}yؿFUB?#;_x)o3iByC6IWknBU1G_\+r A"B^/&DIWB)'7G&D5'?s3g+/+O1|/#D<9"/\y儰#3 RO_K(9+.T^|\nh[I~!{Md _In#~^ݤjB1ķ-P|_ "|8o〈?EqKY/3n'Q~ &]&"&L/7N6cy|_IU& \ kLz*b~*G<-3~:ޠUhכyՄ_H| !Ɨ7_G(\ 7 ͯ'R/"Df,(+&SB;LzEIrBǻLz7"~#ﱔO W)Ȥh~3!a>eG!~!Q> QC-)B $/⯅׫u__!~"WM/"D|ͤYa׉_O0$%Ϸ_Iߵ]o"RW_OMN?64RBObaY/¡}[ Q+/klՊ߯_@֤Yx;_Lɾp|} Lzy{}@ b}b#n?ᓜ_&᝚RE~?ȞQywTzf$_I7!睲ȫ~*Ey2FP KaC'J-oK' %P?Q#c_!k Qqį#a'b[1}o%}%oQJzb}I~Km#R턨ty\/M|!7:g}8+ ܋&Ya9KBo4߼y ~"τ&~ !?fBPkQ~-ɯ#uoPH5)![HfBg-&-FKp~|l%D+Go Q**a*ѬkjT73mXo!oo$(">3$6irBob!qEo"Iq7ج ߌeyLBO m5FY_KN_3!2N?R&]Q=&]cG)!IWi~+!e<_e)k~ %>_Gk?  o]过߭x9I!;#:G;'o'}LjP<ۤ {H0!e9L}4!|=yeoüxǛuxw o8w}bͿ _gZx?S;ݢqS?/$oP^/2忘g;ܤ\"~2!컛ienrIل!Pe W?"~!_M|b5G|BȿZ= !+.!7\q%ɿU+k/%o%ۉߢIvB?"~'<qB͟F(RMEY/%-$oķ5"/{VD|Kؤ:,1yQ|@7}3 ' IC'&OZISd|BϧUL/">oW-( /&_4˚HR<R>|귄fi%$M m(w.]whdB{OQLo56!`[a/#dO4!y97կFo$6S@_Io%Zvh~=!oYa(;"Og| Q]/U=&]M_/GW'W('D|} F?H|a>[ #1Q+^OF'ߣWyY{Ik}!c!_Hk#C4>XoUlHUe^%!SXG|Az)SѾM<-g;g_e?'~"/ ~$Vqń $;b~{)8LOC$_Jsyx~'&&^;&ḅyYB߼dGQ?G֏0__M3Fe):7P|ZEğ?eƸT7*a-5"E/S\?%ek~3?e`"<N/Jh~+!36F/O ?ȿ%~Np)XOM| &SSG7QR?/%Fؒ u|J͈G3_Kh*B/9įQP 7*b~"}C|T[ _U1򰯚_!s‰z}M5(q<w?/,D*DoI >r}MJ]Us[j5ՄkHzB:|D3ڨ aVvXߍ7"7Ԫ+Eo<"į$y?[ȾUVKp45țypj'kaڜ[@I{,(fBmo&=d:B)̳S@<䯢YO?X%'*6uSډg &tg ä'[aA+k"BP<&QRI]JGc䡿-HޠBy迁{II'5OCIH&=Q #O ??YKwig?]QW3MC "~.!g?JB5yNpmb|դX_HSϷsxٷ?CZmA_$~ !%OSKM}^FB]ė}&=&R+qyIZW__aפW;cR^eһ-jq5& D3uZ`G#A dbB-c7ŤiRB&"o#~!?`ɾ儈wXڗW㧉y+1x%>i}\8?W¾Z'Xy9Ƀ7\'C丳~q ^$"_ljۺ[֖7nڎm2c+I7پ~w7oh"2FEC-_mw_c{n_O#'*Z*y|LFG3#N{秆SPѨq5om1ƀP|-;1UaLU<֍Qdɖˆݞ`/l߳m7U_t"Z?? F1psfz`&KcPMSZ<:0g~sa|Zkd\GGh؛aG41rTE=˵szxt |l8϶Q## v6Ҽ 1ojٽu,.%(8|AXR2=zq&t$>΄L{oǑh7bkffkLZDuT Ikڻֱ#-)M(Xgs*ӃVosN aƁpS}LEQSc#DŽHpy1)"Y8X}p#e7aY{;(crARO@kz;R=g՛9)ؽkOˠ:ZJu8E+u?,pnS}Bwz9+s2fNvhNՅ]UŖ]%gƍ>Ơ!};wCy?;}Z'ԄH3&jDV:d$r/K&j%4H3 &Ǜf&zΎ܇9;sJ^\Ƚ[aA|kd&KJ,ԁ躁Bs 9:}uGLlvТEZ3 CRNKDwVʿ7T?Ĭns)>y:|ʐ+LcUvYT&a2x`nc=!̍m殦ţ6pF\Is8cߠ}.' mzRL{Lt Ʒ'O,ٝiMc9;@6y'{;olϲa[UsIwrQ4F%j@>2_sx>v> #czؾގC]),Sz3ݲkY*g;^Jږyk./9I9G~2/G;y{':l.VZ%8>H<^dXx5|TR }= C-IijMt<_#/ c2jj{t/v{X區/p/ 'J[> NXzFǥg֑4J#{"2wWVo((;}z  Fx~:t{-kqt^DxKj4U#EeZ12˟gzK #{Sa_ ?+𥄈UE?]q>[&-Ѿ 1пR>#կ[|W^ ӊU?6lWL"W?_[a{go-K a,eOlþ/W\K+JofB%F7;~yE"~6CKPHGڧBn}d+41!rXa7*"ɵj_M]#WVq3闇5 !yom%rVBߡ(mQ9L|!>&ńhM:iGoT~[[ Qc1MkH (m+ ڧ7F,GIߵCF_%?!e! |{2SѾ7? ^^b ^}JByӈ/'O'~!I|!E||ZBeᇅN0?yIZxϭ$=x z^@JBwu+q7~o7酚uG<! EĖbG~TK_ DwR(b'2Yi%/S ܤWh~%!s K̿ WaǻkLz*b%~<-3Qu&A+ >7yUz/o$~!Ɨ7PQ 7忙 ѿBR5d7¾^?0]Jyg<ſĿ׉/I=v ITq8?]鄈ߏ8t rVR'y)g*r~ڤj~%!3pE?K|"7r_L!7_@_HM/V\B/%f+$į"6(^J;o%N(n#]o'Dn#~!Ǥo:sE_WtOUH.qEY8K>3%i~ZQ[_ģ|%^ ?%7c]]k >ȣv 54!gb\A_'~!Ɨ7*b#.5}OR&%~!#QM:Mb3MþįP\KOYגi9|OvH2v#>wtE&~_n/%y%3Y >?Y}+b~aOKKaB}m~LB1(cTEeӚFS1i$sK,t|<0eb!k"/֯+y/xΝK$B[w?\/%D|ս$7j\B_?"~?& /%\NzBķ(Ȥ_+ [ &~ !~k&%S(~oCCy3&QѾ^CVEgҟ5y3 |ύw+;?-<'ɯ&DZ.9Z(M$7}I П"uz}H(gK zMߢgc-?;'&MܖoҌ&BrE%;M£I~5!?<3\Q\ aqnɯ#KzB'A<.yF7by~)d?M BIs-Y`?Kq.E~.b?_R+_WLOU2Ii_J&}C$?7A;ؿKPg)K|"/} ' C\屖OL D/~e?SgҾ~s/#DYx~+_ _h?߉GJB*B/E9K|@,F-"I%-c+}i!5)>bjI>@K }RcMn} o.Ey迈FI4'!OIRFN[11w6Ҽ #zZOu֍@4D0ݝ)7ԝq C:K;D vMN 69soyhL)jl=5|PG?2#OL9 &9slTp+IKm滺qB*n@hتpɐcYbSCH#ա'*CdVUz6DPaRqy&),R]o^@E%h;ދ1gӢ{1F61λciǜ둵hVCƛָ7cm/8&D԰0Dm :GM'΄sR]۰2,S^[l&<63[crժ #EM\j2gS"[_13xS(@v`f@oV=ý41>9w3Nёnx4^ !фeX9ydkW8Fl]χi;+t/32'#'۵3FtՅ[ ӓMbװ}"-`~.tvl_(46 \vD]|qc8fhbd-^ HKo㽱`M{CY%$:N&w% y;dn}25 [#o1.: kpoE 춅ε5a {oѫھA$D iy"#ȡŶXl&'Н"JaI0h(wێQ7;m|f d:*{'pdiۅp a}":Σ1"9a`Vȶa'l.t=d&Z"uOo>[Q6}$mI(n} 2eٻ|l_oǡN㕞O,Sz3ݲY*g;^Jږyr.,q*K9/']#$m$HRgwj_0{d직T"'{ |"/ Mk gYiwZg}-x/G^L idՄwqd;7 3"_H×ƞ'JkPM6 9+HŠH6p:=:Z/pƙ{]8"m^m4^=6o^GTkV ҵ^ 56W9^V?)|Ťf *_zɺ V^$M(P;ٟjjKQ+o-tv=^ BA83 :$o8'ur0K#9\KSmg^ҲJj³&Y}ul8{9L6Ρ>=7׍Qߞ>}iZ3$Q$=D'8gY{gŸ5j~54>Yd݀׷T(z)OӖ(`z5֫iJ9^@]< ,&])Y:j=u4-g kXa^#ر%=&{f]`PtY^Skj`bK#б\^w|:Vb`PY >8of9hTlb]w؇?6RZßЃr/5':tѼZE Z3-.pZlXnATxcͳzX&Rĺެe=JrL/wa*/ OKUt{m^~O7*-cIBO!iPC ~8-{D[GbDΎާv! 6PאC{4$uⳡ"/+{>.rioҗTBCk *3>n.ef&:`묇蒳ɛΞ=pLg83Xk[{tA#Db`uD0lEy>yM6y@}G{o{_/auAG]0!6-?At^.;P'Zu?!L)ojޏ 5"e#">qVm,b<š};BXdD֭=*16xW56JWot/:Qi{I&}/%Nb +OפԤ2hDxUZ5۬#zN4r&jҾ#E&@d QNx-(4kI֤;$e8kʽ-ۜR=8 [rO(3E`~Ӌr^?WkƭfƵҽ;*Oq w)wM}}d۪zrj'EɛP-QN Gxq&/ƻRUiv5^Ԓ_?ՄU۰o_ydϦU_6/fU!WV[!6 90TGO9)b@AkA{I6mq׈bO޻w}"A/NƋ@"UCE9o>U*c~D3QQ|{9;7r!wt9ޕvc%2TD }ʪ`3*<{uhwϩ h^t :2soTuSw}TkYSChGzRٟ=džr]n]($/Ʌ:Ew/q ݿSV(?ƭ|E^md}~*/)oOg}y/"XnG?5{w;{/кׄUU>oG~ϗ¾ .&3 o"_%DKb+kHTw-!>-FK-%~&R>+=xY>)hr)}W,XE[xI~5!ʤ-5طFBط eo=w þ/W\Kޞ,ԲK>m7}vńhM:`WߨwIWkjBy迚I<߯[>C~Kw(?JgT}@9B"BOIG51!G6>'xD&FgZ_OL!ԿoR^U'*PJdBmOUL;m?v?AB%G_XM#~>!O|b?HBBŊKH/%G_?F*B5'o%ߢ?CvBgA(#ys(! D'/e͟7%c-e b5O+(2EďWN<7\k( ?N| ! hoȣo_Oi4!7Fz /?"~!Ɨߨ ןSo"}#~z!~A"BKaW&F>6wyW(%ȯ%ߑ}̈́ .%_g@Ig-ķ(Rb43!W{'',#~bEA&OKvYBmHG.O;OzB-_HVy-_d;0?V 0I)> /1"㉟XJ/~%j Eo!1"_L劘_%z%ħ}K*B)W'R͟O({ kabE_CN|*^%k2v%VB~Oݤi(bNäOSDIOþ 3uȤ#_E=l <!ZttT ~CQG⻛+M£H~5!ڷ$oMFqoꉓ7¾S|$Ci_G"3~n >E>dg7[j(|IrS4my3/&= ~Do1Vwb{-);Τ[xz,s9Oy!fK x_I}h_BNEZO|'U\D&~1!?C$9by)(//E 7">D&Bu&}])Mևþ?Co0[_EI?CV۷MOͯ'D}'FE}\o?4GW}ld7Fq/&̤[x9ɯ# 53~%~1~EC-C?*/7Y_O'Da?۟M%Db-WQ"d_!?󷇽W65T/>PO&oToSdʤB_N4cDrEߤ1|r#I9c,?-"Op} u|HԏD^D|%_r uNE} K/%K,<+!=:~$/rBgOdZ D$Jf_BHEXvwEtwa5n;[}ΊYn;?nYHf=0ɵ0W_(>979219x =&@[7a_m7a ֭9t&%ac l`pA{0Zg{!ܮ)w{kS<@6A{_>'8yrid뺡jloS7uPy4#3ĔӠppppo2\s>6@Us듖 <sa%!ѻ6Hg .;v?)>>v|^6zh o"),>rz͠i t߁ٴ~q=BLMru4>ݱU둵DV_7#fXC;ތIY4!A A.-C٠3TW;p /y *!)3dمq39A[ O hi1=lQWWs@O_eN 6E 9.N/vwh}5<}Y>ޭ!.b.;|mkpfhbd-mnm7)tgaIU N6 4m@Xd_8~ 7 6v|D}G~ wa#cB;(\;EmDnMn^[!OnpD&=ȡŶXl&Н"JaI0hwQ&m|f d_:*{pdiۅ9+MX,l'lOm P*( fo}䘽ԗ%P̄NAzuforl&)K!} 2emZhl_osQeNKx@6{^1ērG؉33N {Wm[x3ots:xe|w?W֋ɕ(^쥡i m?~A-WRKSmGTK|vD7FEқUݻ.u)sa2!twÁ CVxK{b3|4tGuyu'鹟n9C pF[Va%.rr xYR! y[ywwJ'y)O 1H'DyA{/v:w-\d,&])Y:j=u4-g kX5XOm'|Auũ^t1zcӱX_Kk"64Dq7@|`tQ]4tт8Af :>A.[G1(N+tpͯe-J JN]Ƈ&b,Ŀ.:t#/T鬷Bo;(vI~3>C+]c^&o? yqξ{p˅12{3}}xrԔ|2u(1ʎtkC'tH1ʐd9#fYy'QƝ+䬣ٳq+ZG 2J;ENtë#e6U|8Hrna؊=}&돵?āLħ^uA7n[tY\y۽~,4,^~@X&~t@nxjxYqq7JݡWU ^535Lɔ5iu%i*ӛ>v }Do=ױ KJ_uu+2S]]='M76u/ũlR1Ci?xU֛9}PTxr'4xe݇% Zqw9W&uEPitko^۰&-nMújR}VU6Ymr^X P cxބ3ʙ\t;%.tTF}5@3nuz}jj҃^ne`023Ѧoz+pqеS6tn'Θ f8!ҴdD~{!6GMqXH!v o?ѝ\!4M)Cw9_k<~6:PnriSQ=;\\c5<U?bbWtvPXR~uq]C9\jmb>U A{1;̟ȍ۾2`hs盩w\sH~_b?Yuv\+OڻzeF{ coհ|CYC-?]DUΚ'G}(Yg+G?5Gϼb !5_oI%QUoa a@ $@"H M[}h7jW{ϝ9yysd2!wr{͛ oL,B7يxpXv¿ |߅ʇ}X~?M'~&!w'A/^Շ/RÎzRe~%zݱR"D*vRu-R|1!ꯂb՟IUΈ3/PU |#!&8'׌|)!u?cՇu/SW$o kQ >]dAYMY$8NBBEq޴*>/"Di}bBj'WߨBFW|>Vd|*h>R oH*_Si.>;_D1p}.Ϣ/%Qq՟)UJ]Zq 7UVBϕ>RFNt|5 Qʛ1wh^g*(oeq?Gn䥄h>ymx?(?@|!R\@Lj!4YG\M|BM]t£}N"BwFߵ7¿_5|S $}s*aD|M| ;c2X?SҳU>q0gIzE?RE^_=GM*$DK/?E-E+2 XKU^Ey;-R+b}ee7b|y9 oWHzG{ʗ_E B7?U{[I6W*y= Q?o ~"~̴%Y坄h7IE-[~"o%m].I;a]_!D1A#}AK#phnBF3o83boO)q /8ɢ@|"w_eW|I>NR\"#~"wW%ݯ$=hч߬kU?_чoߦ) DC:BJz#H=!mǒ~bOHbBߟZbc;! Q{_|!~ !K5[I|%!wZ^}0Q }U孄H|!I>aϤW("~M IQD|ȷ¿ÿGߦx ()/WIXx? + 5AK\IϽ/?3?xI:g/8Oy[?q,py*?q} LПxf)}x ؟TB@gՏ*?E|AStBM3| q͇U^JK"eO$5 BGU^?``;|/UGF )~- X:qaps+Y>K/qܯT`~XaFԍ6W*ĔO*W}~#k[Foۈ_A˘ؤfEo?铁u*o%De`GG96}:5\ʿ-cMHK|2M" b|0^.S3qĿG-يQ/s]`KMe.KeyOR>eN ,_p̻]2y!jB᮴_M1*_ !>k ljWk7b~8D|"z$='~3!Ҿͤg/j:1`Ώ|bqwHҫ,RE #}\+, IǼ()_@FK,-ՊȾ9A a߬aeчo$kΟ%%=SI4KtM?g)!ϳ_F&W(bno%DՊ8_4I/s%>hnT'RKKe_s~IzfFһ-Zg*sQ'DQ_%$Is oчo"BJ|!{Wotʛ ~ч[wk6+?%_pO%D}ȳXy~ 4;/$DE Ito>$~=0 |2BS%#gTO#~!!F?OBBŊKHK7B/Sl&o!W_'~!F&N[I6BO-9q9Jg(ݬ?s,NOƿK1~E%?$x/\pEKO$LMZψ_Js?H|3!3糿Ry !-Wį$DZC*_E>?dɟSZ '~5!Oį!D(9|ч?OIE_g_|\?’N PZB?wotY,VRAYǩPϼ:Ū~HD g[qEƙd8o $MuV3yB">J E: N U^HsBK1>J*K?(>-&5$ ?I{QOkчs&DF%WkK%DG<#ꯊ/&D(W#!Wk,H|=4 POTy`ʧH_.~3KR~ ܩ2E?Ok&d/lQ|BħY.>o!~"/%D"~"ͿVIU&iE&Uqoo"5fB%Z~t>@|#!ʿ&Eŗ`ʛ Q~%բ;oQ [,?FE|E?.2ByWA_L~! ѿo!~2jIzʗ}^,}W¿L^F| !{W|%!{Z+_ϫ$ݪ迯ч[-Z*:B~ijT'D|IJMTo#~!įpL~!*o'D]һ-įQLeLߧNB(^FK a}T QWJ =%T~DTJ}T]}1}o'f@q7)vOx$!S4~}s~}w¿^sʳ}z>pi ٕ"۝{:'ƧNhx76|19KEx%}S >чoZP8w-_C7poI{=7RAҟTG}%ޟ ; }sv7%?H!~Y_F,ڿj7H+$ 9A_+\PD7)P'$1XxGH6{ /&?_1.4YQ'5~&_~ѷxy? -d:TI/SLB?!B*E."~O]H|TGc_-#DkhEI|"Y'%TD|"߆L9*o$C<]bчs_H烡E oP~h}gTB37%T|&3dHxRסj)jJoBM}_M|1!K{]3T+iE눏bC  _Ba_D|)!X_͎{e__52U^XZN<״ +…U-ķ*6Ѿb+zB]V#VM6)r=ehW^=ޢkoUl',[CmP~雝į"6E_7/s}bw}Iʢ/&~-!N:BEzB'{%*@d/¢.!~6jK%] 1>ч,_LT터RI*j.BGLEMljo#D ]/JQfBsآ{TIdI|@w KDRwb|Gķ>>/1HϿs[|'%]hk$]oчMq7ٿ΢ =CW}n ~!?ESU~%!F}Tג>gP%D{&C_T~!DIy$nIBfO'!~&!tOIߢ!Hcsp/>k%ݧB__ч,OKZB5[}Z<-}M I] =@ҏ{;P?-_ghKkQHEJ|-!U^G~iчWϡ_XR-#DߩV-w#'[y{o!_KFB/o"?)~7¿Y?⤿Çyy+'>F>%ʹ[7Ƿ6wݱkú-* OŏfMM^w-;6lݲm3TCҵs5r츘еc[vT?v(%*uL!{U=^2GI2 qʺu{gLy^0QH+S\ Zk!nXYjnڳx -;;Tܮ;ctnzp.7O]2뭗tl8$Jo-pZp;@O i;MSy A91-G}w\Ύ-;rs;z>*ʇ9T``74Ly]۝fhngx<}c5+4 )h }:p yoqvۏdDoj[e:٢2uSrv0O,mz0bsuňbK=Y??.*-6Hx*6'=C9P!#}^-=m=}=Gc#G}CѶXRhV{78:y4U t>Tdsl@H|(>0jPICC+~^E_m7x0D{ceBE߱#n_O2 k$eVȹe#/>8г$lNx'Pok0l? 㱁C^RZo E9u3bţ;,B0Ld"d w9>,T4jh0d?wYVe$ {p(sqwF?Qɷ"2DZ[#=aБ؉3fؑMx{ɘqʸXwNx7(I5fA!/ml/+8IGa(fr0z zXPXX ?,ѫR{UmxxOoo"u| :$Skc*iX:?(N ŁXO~c?!?6V]I"6$$vdcphzdn>^IJذ6◘)7f]wƼ,+G>$6>1yŏSԹ;6[id)|coq rjfz39D0l}_QA])2D6?SÏ@ gXoJ͖CGWǻ}a JMLl>gᾁ㧡 aحyưG;UZխE@.3k5TH`v+vujBnAYW(G1Fw'Qh{¬sd F(\2S7}9>*;Hvmk㱡ch ٴ%xc{ⱁ̝|U@5̹WJ/P=nA `lk8&SڅAp@xwQƩȢr@koYGSe^kêo~\4טWWKם79&;qI)'SxjyiعH㓲$i&_J:>%K0SIy{4bݗۣp-I#I8F*NJƠ1VpˏxȥNTrK5BMg E>VS>yDG)mERsAȍT횚O]?>%)ybV:_g" xPEXEO;>yViy[H-lxqEy[j~^muZuz2AE 9;Cڽ0] }.'1 g s}r(kפ,r_oM]qvCy,\n?D~-51M?PZG tHT6o]>oϛfI:gKyiWӏ͋fſ1 {gU3ơdzM{G)M}9҂,O˜cXLc0b1bÍF]Q$>WXA. ,xS-M\l>cTe}s$8=3t(XXxkȜJE7LF()C=zcqB|G.`ŧ<h~}'80_7"< iQiߧLBXBu)mSN=)_7N;q]'6dn-"'ڈ׋򺝃uGb'JW%ݨ3wmB}{暨YZT&*$-+Kq|^4`c[>u̫MK+K顅hiz(u& ;-Q*SdUTG++R6fAhvҪjf-讋Z2 ΡC2[VnD ]D/x.1kt8YRf82^]WdդջA|2I`*qВEWJv7ILR@@)L[ +t4z<6'#o%vQvz;1+d5t,6r/|YUʚ|ťR>ݧtQ,}grf`{ߓLs?9J5~5CbەUbCfy ģ1IC=GY!|wbt]uv2\MJ56Em1oJT^O TSVgTb/aޘyǾ8Xxe9Њ3ۓDF0]N'GTU#B"*YmBw+V=Q7xLVU9wWQR5xK=bt9?9~LPl wl*i=-NTe94<ʨ6Oˢ$F~g0zdǜF{Lsxò0P;ccGjm2ɶP9/Xoo|^z4sH,z2ӻ_ v'R&ubw9洠Djo'KU2@;Ϻeeg|9Ol3>O~܇mk׆]D?jxׯiwʓq[n d29ǧT͇g҄$NRx%w -_gR7şx773 T~ zE Qz<`~~310IxI/V>eA{:YV}7IzBCNzB¿$Dr,#y2/'O<)lӇ2K?o!P>줞LbBO5Q*jV}j%:(."o$ 7¿NA#_JL^,o1[}IGoW UG-[K*uUOD BO>Ɨ*_L1tYz[68'U|%!ʷG7ߪoqAF4/ g>oo]T  } <Be/"D\. /&DtТ Qo|V@]{_g\-uo-!r??㫑#D{7k)ד"Bwߍ7¿Rqi5g0YєRJMS D|<銳Uu;7],Ûx|[,ė*fI/Ty%! -3  P/tM_**Lҗ-+j~BҫT^Ey/ZaUW7b|E7sm^cᑿnWbBG%{|RKzʗ}3A[-/'D$o&ϷXgHNLaە78 %>Ipo@ϩ|!!I¿;$}?ݥńϏߨJSK #XIYH!oϨ|9̓$)Iio!Do8JBؿɌ?ֿIp[a{W)b|0}zB/? ~"(*_J~$}c""ʗb|+\҃$B￰$~jk5[I|!>{M$~C/!Ɨ:srBʟ(_@BϜӟO,j )?`0ńڿAI3,M4?5|bfK L_@rE/Wj12ŷ80YmZiK Q,d(]@zBB7*n"Jf4L#p7 NBϴ7/_߼|TOsg߁21\Mqa';#җ55?qtPƿzo}{#JZ97* R` _ˉ8[y7eN 4[xLńE Կ KF|!![M ŨҦv ^Bok/%4:/#kK#+&B35 Jb%1MN2fA| !wJq=_JB"~b'_NBOF%%bs"  _W?q7w&1/w4)H1JK:B؏KKzT>I~X?IzU>wG{-'ʷZg*Q}C+PbmdϏ_M8/',C?ߪaOQFB9?E?Mh%=M Q?OчY3|,Keg+oi?nK}A/*hYO-+^򹊸?t Lb⑿p;h_Mb~KzM2^!}Jb~yUmo#ńƾ+X[L7¿7D}3Qo!~!"+En${߻oT\?#}*o%чSq_DG"A"}}χ%}TMe>(KW#I*ōTwI7>>to:oU3ķ)vP}V=*_Kh3IEC:d^>': 1?|~e#B34%D}z}uITy#!Ϝ?ۢIBE_!)cΗfB}h|*&}¥ͯ^^=SAzxR3L'@WbMRYN᷒V9~',ay{IR\}?_?_L<.N 1>jB_KW Q7bwI,/$D|EX?[#!ńX?STFB<~!jį JTL |݋Cp97*!x*o%ÿvi`T)!(cIq LpETķ¿įRCPƫ`7fÿ"տb'mߦH뇠*_K_L<>+'~"s-~0\ʿNBF@9@_񵄨ziX .rܷuQ2-KaE㷑k"D(rG]_N|!ʿej*RȿGTD+7">}a Ť~gt}aƦ&YyKC LiMR/CuܳCܭAjTC|=+~0M%~bNhx36ߡ}3d 2o D ~C›֨%PlE|?F:ߢNU=)U}!JqW}#7_G{Z> iB["3$=K)5}߳lIHI啄JzEDL|"O7I|* %آX'6xE_L$D|R>z~p[EWXϯZ,k4>+ozC*A{3}(*CGBJ2`-P Qotʋ5Dz_Xė()=*T7i່w_B<.xz{UOT@>%^U7kI:D1/%D>*}1)bcwOUi_8ˈGWBI7*SVy'!O#Jtʷ=>/w:_JۗLfeI!+>>◑>)>zQ)o\=Ϝ|Kҷ-<a;/RIʛ Q#xXfm%CB_3&bk1nC:ר}e]-Ŋ%T*/SEx 0>8?MT?_&~ߜRB%I燦/'DGfB>y}7\j/!]*oB-<ǫiiIWzxKxuUiv"ǽ7TONŢ|>2_Hւ}؟A|qȰ/WA [aJE=S~s*.%UP7!sB}/'~9!K BBRWJ L{OåB;Tci+ Q[qlʶu~5A'S?2V,T?+a~uQ5Bld=B<5o. D]NLǽ1c!-(⣊x۴ϕRy!ʿG+\I*/'Xx?@1~$~&.ԯJ=20Xc}(P>/!De}GgZ~7g[Iqҟm!IW=T~s>|RW'|a%+NkFIOSlE: =Uҫ,4⣊~.*/#D=C+,Lߦ%9*G>+1?'fWKzEo&{<_`nQbB }aKtp5K-gU_Mlm^"B_n>쿖َ{:IopF}^/}%/>{#X*Eď)9}ʫ QoчoO磆Kq1~n.);n {%HMby=JϢ}"o K*/#D~Gdɟ7…rB_%~.!$oa~ҟG5g}BR7"~"o-*_B/#7kBB7?fM>CIʣKEETU>ܒ.kQ ?|wNi,;⣊yXT^F,9(O"yXJE^M?q^]-(柒ńh-TFBR ̇4̙N!/WxxiM#D?Gy+?,z>ӪV'|5,p~9痀xn<#Jyɫ?G*7%YˈNp93K7m#}) j_8_vxU_ _ko%4-\K<Mʚ/\oQPW:c$隦'}-ܤt2Y_E> z/\sѾү,>fKTy>?dW)֑-GG…/Wy=!_E|"߇%«U棏WBKש|5+}_G<'5:?7Jdaw/V*ZBw|"~3!Ƨw*vRNI BK|GI{QʯQ}?%廊*E_6ÿ}_Cw{/x^OߤBB^+HWlB_Y_?nAqQI*/!D쿄rBħ,<_Fs /oK}7U=ka?¿_۷SNO~H҇U>[7wHzТ&>JISy !G%̢#T )* $Ȣ'R3S?)3X|G?E| !3>kYү%D#^q}/%D|e~_D|3!+BoIz'k*o#D>Մ뒾kc }%vC[Cߥm?@_ooW!gu1+$4Wo o6a]lUV'?Jg)baƷ?d>b(_E\>RB_ɴ?%=?{5|~oˉE*'D |~_IT>?E|9+oT,'oV\uG|:'5~GdLo'Ed%>֓d~6'/j\Zئ |_DLjD$ߩ\8IWDRdʋ 5~"WĢf?GQ/+"D`wWd>[C|oi| R%bbǢ+bjǤ*/'D2|*bdלW[xW~!W UK,#*.7Í*gD/чFKtpN7nL|2EU_!iE7ߪfZ*:E_YIE/WJ<Yv76Q;}d-Yhv}俆VB_oKHߥ͖fN/Sd6$r1W)Ʃ} DwIÿ##?R]*Sߥ$ ٫ABCR\. _G Ks=!_eIB﷌7A|?]w9i"OsQ֑!>U,X7/!t/%{|a^wkvO_!Vq9?I_S B}ak>oj|y3!f t"$D~"E/}Ib|!Q??"RHw) <JQERbBA 1BүT>!&Bo-+G o"~:!T,*/%D2B߈/'Dy)왦9?"V~wR*}*S_  *'}@آctS|"!IjT0ݢg)@xP`hч! }?kQBIė^曂$^dI竼"B>;t>ͯKP`|?Ҿ4?.?Մ^RA%>k~>'9~u}VP<%xk5(\կP\ Xx=+ K?;g8WgCR>ȧ$'~[7_6wݱkú-* OS]sK [mo PEeEet\;.&tؾ}떮);ՏKFP(If!CYnlܕi; &ɖ7ݧ4̵.CBܰ6 `ŧݮg [vvfJb5I<ŹRkexk`Ҥ۩1|[/qEf>cm7uyE7&"|G;;Rܻ|k*|Hg]D|C!OKHI~ S.brDcXrN*J" ڼu69%>>֝y,wP)rN9\,ã']< WcٲP=QUp+kٱeGNMm7 ~>47hV;׽oqJ_ם+ӳ8;2F:S=5=3'cۋ/۽g}E y&ҕΖ<lo)(5-p-z}--tFcE2ǘI2DrEz۱ ٌ Лrޫa0%hޗ+3Z7wI)&r.ǰ6ԨS{04g`^_-Z .ƒ=dL\@ho;C'conH$2p//:9:ғ1d8\݄NxՃ UQS*C7~|lm` *nh>>4E3sƕ񫽲LC^Ĵm_PmmڡXI,V8f]v\qsJJjkagP==JNػq1܄^}k23Z2$}m+8Mkk¤{uFo'9R ~߼|UU)8J4ΧOah4W&L*#fwt ;y|k{2q}fOI昞&tſ14gJ.VÎwq/`HJY2ϫϐ7w*Y-cie,8GFC2u1f}-[_Ϩwlҏ>3GcvYܝӤR@@GmdQm ͣBE\vMkF$ć% F ?d~nK}}F|ŭL2zZnXy0uk*O)cY7FY7Aݔ %3=p=NFň7Ϟ|s3:qB.h?Lɨƙ%eehLPsP/:t(3Vhţ{R۲Zі Ge:eIhh%Ň%hojr6{[pkeΗ#oO  Ywy}ƾw I7cG~K3MγEn_p]ǧ7"kG܎h[XW#XD ĆzN6拑#en$3J2/gDFk$KkΉ|j7uT dvC#x.jrihg|P~m |5&Dݔ -?!aj I!}3e^DP(LʲUbwTl`PC xwy08X3F ֲhlPmw:s nl9/#@XY&<&eyq߻r^wGP|s}i:cSOGqX'r`|dJ0N> xwQ,&ǩȢr@koYGSe^k| yM\c~&$1?4Ip-=.:D>u*SVM2?s",OՊB\OU0Hh|ASFIr?#m>/ iCecS ZV*8&5>q^ ?:i5>U?7E-JlI[I7cJQGÚ#Svy_4" b46peZq뤬$#ݩ;U~D#qkQ.9bn1cgͩdFzpFeZջ$]ojJO}}*ŕ3Qg]V@ 't U>7Vn@7My3}[3~6Dl>^i\<ƠǝQjk>o̴s#}^xNΝI >K-4y,dQjmSnOIY3Ƥ=g:#̱QM(woVJ'S^Fq|kMIWy=z1yA@FWaHadPlT,s]R%\s 8PEE,euE:\1 8 p# ȧOda_i_mĴ9Ī6 ي+hC琗$l&{^BôI+<֫SjZZ!)jZ1kd!8#ز S.нXa*DVp]w#TiWi*V%SV%{-E5y[UKgw :sʈ;:.XGw痸9N2msݵ(V‘Ϟ JKy7qo` ) qOLl[nrhy0Wyuu=/BY3Mr$yl&< 33EEQL>%[~Ҍ{rXi̵CKKl?{$u Pk8^w]$REEIteNxt,<ů&T1ݘ2kdL.",GܿSV;'J˓1$2ORJ+n*sֈ]yݜU^EԒLc5qGZN#Ic^_LprC?7~0gܙ]6SquRvsWNr.ߞkӞI<>7O,qzh&g:Y(ƙpɼ48)-rxHuT2#)^C;7ZkB6ڿI9^ld4x,w.W&߭lL !KfdMXr_r1~ɤjw-UeB󚷪Th_L6xp՞Ft>>nf8X:| %3I}$g'Ue`WmTwӺuor -Y$zxjwÞ쾢v:շSUp/Rˣ*S(+/NV1ǘKsǧ׏`WzS}*/KWŲw}&gF=Y*1dK մmWfDV5Nek|m>*WZN.$ѲQww6LEm%zUȢt+V݆UEO qp]('au>TG{ %o.3]#z+!}Cւ%>92EGowO~~Yx*I33`}&{f~m,eLΜ'O_2W{'7ȉ~U\T@ZT7ى,GUiy1JmY/o0_Gt ㉟]`u^oA'u9o2g+%'>BCNqL"o:3 Ѿ3YʷyT+a'^h}*VQgT>S+E@qWO|#!k -t64ʢLڷQK|avoںYk ?+|aRį[G[hD>ko Dtc|YńhKE'Qo|W|}aɾyz7}6K6EP@ۧ>o D\F"BNm g}T)*o!DчįR\C-UAчq:H9xʛ( ѾO&~by<}/#4xCėc#q+* 57kS\$]o>ד"Bwɿo&O%~b$=Ck_Oч ~-a Y7γc7 ks\+V}M9QM<>O-}|KU%q_Dc}%o!}~0Œ~6)K%\2IEbE-_b|~WJI߲ǫo r+>3sm^cᑿ>&B%~!N-< 4 QoAw|%!{XxgU7[oU\6IPy;!#wvo! ~w8n~#K QYڇO|37!9n|/]" a7}}>!םWE|-!>aᑿᾮzB'o D|J*_HӒEnIpWbBgoT$ݫ򥄈{?GE󤿐7WU% Q?_ _!B>KWo }C$9_w7o^pf&.wI.1?ORq~twc|4펷~Y<L֢~N|"/<(*$Dc~#SI|"sݯ'k">#! u/"[+.NUXy^}{+?}aOįRl+턨߿A򵄨H$u(߿,ߠ_; QGJO%]5åX).&2 ?7_ Z$k/pGwj G|"&8wP%ѫ'Q|)!B}؟JrEOSį$DN'PO@le.̲o&D,l(E_OQ/{@GeI⫓f*'}~>xST>_8@ؿ1ljPɌ'Dчk,'z*BؿR? H_T^Y;A /R$ݫ&B{$=`чq. >O| !u/J7to:o?W¿oSo|-Ϭ.[} )n&ߴ-÷=h|BDZBߏW\L9۞JzТFBEAy19#h|*&}¥ͯ^^=SOf:O߈/".q9}DH~_jч_H:<,%B_L<.S u|4 jB?A !I7!(cd\otSBBoP&Xx؟@ uhRo$D=e _ArkfB?GOSH۽I[?g$QA/8[孄GV~>M` E~I&B}7x o!įRC0_ QU>o_~ߦH`*_K_P"آNE}Z?._'_FOR#B]? ꯅZBJi*ݢۈ_B-_!ʿF;(zQ /S磂%mVy;!7+_P$mwܟ~">.ч4~>_ s66P7˕Ǻ{Q jg _JBsR\@\ >7_K_GYJ'SQ?ISKzg+rD;-%4$ݮ#^.*$DB-#ՒWIUujIo+(SIz½F-Z+b$q|E_O$D|R>zp[EXoZ-;5>+o'|!TDy|!~}Kѿ>${(Kʋ5D?YG/Q׉T^NS}ؿK+ QчOZ$^T^EhgQy!9I#{Wjw/I/F<W_ x/\*o%_"Mi/KOk1|GGZBؿ_U_'~"_f-bm)^ٿ~G*K>{zQ*_@9Yx7ω_3k7G?#o!4?x7/'?͚*qC|aj</?[G{!*u{;T>rhEK/Rė\="/Ya.Q¾||/C}د$vpk ~N>KɾK6&$BK-_OrB@ BB2[x_L̈́:-q\Jo!D^fi+ Q[q>lھxF]?ڈGcagv I[cN_g_oϾ!%\?v'iTh U^>F\Eo_,ivqR[h;_sG…vIBE.K ~#]%}~VگW)6N[!=3 ;=Og:= AI=*CC-(_QEO脤kTwڗ5dVRHAggSpaFIOSyTIϱ#_tIT(3|aihD:? |"n>쿀"JzQHzE_D|"ߋ%T1G_J|"+$JՄ^gчW 0jI|1!V}ؿ͒?4\|zKsyW>[vI;$}̢?q}뻝{QjwIâ&Deg!_gl($}@ՄÿX&b~kH_'U^XN*C$}IƏYby=Yf|UNjX\CLۜG@?Oy<|O% WyO/P~ |Ia:,\OL /yK  /SË_@-&Fq/!~1!G9V2[ /Dx9H84}K6lQͤ:%#wl)rI{U>Cb/J<.|@ t~6[T飏B_,K u.iEvP%.)w/n*ZBw79̈́"SqZ?cU~!>}M|CT~q0(_/Ul> H_^~Hǧ q_BBOW{ßtgBx|7 :I7s>`ɿxQy)!ӈ/#D>]3,hd)? y679wi]4ff(7.IQy!%}ԢCl9dޯB$aч_FZx 1~|?a)?pO|">UNIwYxؿgXOhv*iOKg+FnIgV=*/!D[aK𽒾 B,+?3EI_VBo_&UIg_K'^qߐ+/%D|e~_M|3!ﻒB/~aGGJVjKQHEHjB#I?qܵ1>Ē;?!}-?oAk韼e|`:=d!pQ~h~Vou/GU>K3WgYaQd(]܉̰}K Gė+b|42N ?|"k R@|9Oy*'O|"D&He_><儨7+ 2OD. P oW\TI,I ڿ"ʯЏb7H'#%1"kK; g;n|Z5RbBď> ~_Wؘ=*}؟o5Z%"1YY4D1>/"XWS6sD儨FI}_B\ELKIkUwkῬ"k,%񵊋p >fɟ.rʛ};/S)z"De\jGoU/fS%1o$~&o#"]*L;TA#udw}#mķ>.Ka~/!K.%D|7_F<`|2c_IeW)Ʃ}Q{%[UT_oɟ'"/P\EOf|*i:zǍߧߠ[S? x'\*_L}񍊴<[sUB{>.T??fLFዔ$-/\z7ïwc4E?y[-!.kI="K|=!t|fj"%aQweZ@GGw+S^O( N 3 1~|V=*EX=)bo7Jч/_A,>%}įW/*_W~o[oKʫ a;>]kKWGiƗ7*o֔*">M__~%_*/'D_~C ėjGOf4qPƾQP^ ~W)>_eǔj#<_DhZp}m qdI竼;ERE'~6!@TP 1SpE?YRE 5 /%47%*/#DRȷ哺,cчH -4.BwR>//OKO5!o.5TPi?__볂Z/C^O%Dȧ$'~[7_6wݱkú-* OS]sK [mo PEeEet\;.&tؾ}떮);ՏKFP(If!CYnlܕi; &ɖ7ݧ4̵.CBܰ6 `ŧݮg [vvf]weEqȡ&HKFYs6œ^ޱqGRMGkY{;z#6&'jzzoM堜gisETh ɣCOp>|lin싓@־mڂ-]{uȡX>TC=02@g2<g5o=ҧw{:jY>!_vcҫζX7S3l56oM`yyfʻGђc45o$眹g,Wgâj짤Q=:uu+ў3XYh|ftIT91<125wZ0kq~Nw<чGp "]< WcٲP=QUp+kٱeGNMm7 ~>47hV;׽oqJ_ם+ӳ8;2F:S=5=3'cۋ/[g}E y&ҕΖ<lٯ8ksJi{oL.9 <:^ bGCAOdžb ܄v_;o¯0tҾcG=ݾuyNXcnUPP?84^"e(|pgסu8JB>9 s`0>)(5-p-}--tFcF2I2FrEz۱ ٌ"j6z\ ̕v1R57l`gAgQA8;rFKpn'2#=խTP_OUe 6[T*C7|\5u *n8>4E +{W{ea‰{@ ˡZoUgB^YjM'rЏͺ1NM&ִNL){סzzku1L/r:,X>63=ݹe\ۓ1{7N|} }u1M퓾=)Of9M%^ov <֗u'Z=\fⳬJJ?fn^Ne+ #^$vh*wDl`kkE ˬ#z)g'>L؝ tU1p4ƸR IÚexЀ$ _~#Zʀgd͔; Ȯ2cؾc8#Y92Xu9Esk3B"r_粃J?Jh /ifqHJ%jݍ;œ-8& &SV;}7qL>=ؿ"::06c ď,_  OA3O8wkb-ԭ6?ՓeHuS*ϖphHgL98R=l#?{.Jĝ ӺPY̎3%gEwģ1IC=GmCСxΨ['IjE[.;xj&GᢢӗP7vLr:L룱v-o}I9_(O=c3trO@d MT72$uެsk-49M|YBvdms6r;n 2c]c)89ژ/F?wvѳg+NjY23s.3۬wOC=]eP\|.:Կw;<_ɥ=7t{cCꁿsKwOe=fBRbȲtLWx0Qf4ݠ(LʲUbwTl`PC xwyF1XĚ1zpPl`ttEccGjmўvc@ω~Y5Wz2@tXdw,G0iM-7퍟@={/?\Frw2Mgl2xv>_Tn1{[y$w/ofЂq@ '~ U>7nv@7My3}[󰳷~6Dq>{_i\ٻ<ƠWǝjkٻ>os#}^xSΝI >K-4y,dejmSnOIY3Ƥ=g:̱eM(woI|V۳tQY}1>4% ^rBSnC^IhbPl2GouI%L#nYYUsK$0qx{"ʆ2&r)lۭZcm%eW|>!/3C&MCFe>W$eyZW+;s]kCRVb4#bquD^e"!L,BRa;J42ZZ,TJzO|B+XHȻ w]wsVySK2A IFj9$y}i} <1҃NruLI> {<[O^w ;`\LSlOڡv8髺,O;N'eg2AA8{W sv+ysvps,|̇ iڼm'}B٘iuZ1^?׿Ios2ms >5u7r<[IШIY~+c[A7y]yU+Ơ6]U"Cۚ#XY}F>_~N7]Tx^Z}'zpc%y}鈞,؟-ovx5MN{ƲAYǒi 5qW 01|X=צ=zyxoUo޽y+;9 El~*8>~Dr_K~+y:Gg}9f Yww&Ǩx)%otWo*x7~qr f8ff^dz:s2!'xZ SZOg|Ɍg9c8OG<뚈׋򺝃uGb'JWZ]-#u[6 `a^hsMԼV2Q!іhPH R|m^4QcWd^m\]ɿPALdp{r2%OدhHYi_rɜpc1xŰ%''>7TGo7Ux%~U_o˼@%25j2B.5E6)˝# +#=5)vd[_Y3z'?Z4 ř3Pzն̫d6lCɸ4v/68Tu[ZuaqX+=T%^;].Hdk=k h\ܼisl6URD7M%߇+ʩ UVe HTfy{F 6qu4\ f8TSu#0E-0Vq5ɡ:Ҏ7"K )T=*L7}{me-FխUb7#+9:tX;}FЕf{Nz_#ݟϐK-FM4]~GUU袶J*tdQHLer:?\.':*hu)ѥ:j 'Ax ܞ x{y#z}Cւ1lEG/*4~B~Yt-cnbJ5l}&)zfI[f2L82hp<:dï7m\jBb*TdžLJO$4]5SiӒ'Aa󚯪s_-ct|પlO&ٗ#EC&gΓGBR=+.c2,>P}Zmi;-jһՉ,gܣXnsliy9Yݶ Jmן؝xYY=Y=q~p_s4HgzBkھ}WCxøm[6J)H9~HN5Iv[ɸnW%\={/]JI')DyM}3oj T~ zE ]<}+`_60w-?Kqa- ʽ΃zÿIԝTƿ"S8;#ÿ 9g ȿB¿$D?_q7_{-SrBc +>_f)rQ ʇSgr}_L&>XEcש|>!ڧI>Շu/P\DHo" W|)![Շ_ڷ ѾK|aɒ3˩|-hG"ZU7Z_D35hWbBjI,F?M*_IчWʷQOm!EmN7 <ˢߨ<S+Q;|a%]TfBؿIn@Zy?%ʛg%P奄ė}ұ8 B__Chx3_PySG$YxO/"7*"O& Rqk K㾌 kIIq g8zQ*o:IO/u~̓7:K[7ZgϯE=]ҫ%4g|"f},I/#g_r>GM*$D^' }z9> M*$D|Qҽ}U7ko6 Yvy}ITbBvIw[;oTٴ߻$GK 1?GCrE~OJBo% h=~PGTF;,df7⫓q2?dN ΌLh!Ư/+q< w^pf?W:oHTϔwǺ< CO%D|}߳~P*7?3g*bbև?G~1!SԿ)n% !g(Fw[o/%aK??"Rq>+5 wB/V\B"&~b3BUIU@ߤo!)"~O<眦H3BB/)~"Od=YЗq+Pfw4)H1Je< Bؗ*0ˢ_8KNLG ->X?@T'D]S-'ʷ[g FQ_f("^2V樼S>C,|?tb@WԷr[7Pq7%5}_A&BvLчiaT: aY?d,3sOq"哵tQi19pԢ/VDXX~ 8_2D|"SK/& SBr +% h4_$JrâW#1X6}_mɟgZW6JHjBOJS>TBm b¿/VDtW(b}EL$~1_*_Gh]/&/m DV~BU)bo7_LؾORܢo$FҏKQ/U#W䣏S>xW//\bI&ٿǸ%|O & I85g"HNy06>mч_)* W(⋉G>O%i?ג?|̈́_7w 񭄨{GTBmW +_D^E|BjIq1DJJuH<.}/Z7_G|#*FBDZBۈW\LvI;$ˢo'~ !ӢE5V~{_'9?(";'`cRy!N}ؿW1.m%3wL#Y1/p4 /\6:? |Y}9Sݯ'yn%w|*!C/Vy\g"GlE̯l]s 1~yXCk Q_H{DLN|;w(|@/$£I?~E&B~#G6Gk?s>g+tb; >Ӣ&>}/3T^IUX#Մh?_K_G+ T-["?%[%[Q&ɿD᧨D*$DWϳ#GR%8Gվy58ѢnWW/(xi*\(6 }X`ĢBJB8KVDUПdUoOk|8Oѕ>x\3~ӈ5ey38]sQB}7xNڿIMP,sX@e}_L|"_lKU^w`X_+!x/T^C/#V/cXpQs}`ELq)r*b5mSGj_=ˈGר|!_HF>R`; u~ .Go%}ro#e>;վ` -xʛW*ئCV}F2⣇P'4_2Fo M/RڴITLoG<໴y G?K_Y"xCJվAfnK<%T1I*/sR?TI:fGSl*Q&*\:EM?@<⑿pA/!q&eT~a/'D=G&$Uy !G?Zڇc4Zx뗹IYx_Ʒiߧ(u=x ZG-pi/L_U8o>I7|"gnч/R$ݬ9KzEo&>8@-*/tEo!I\~^$%*'DG_BBťd^eW+-w+rB͊Xuķb}=Xߘ hI!&K|2kW:Aw  ?"~>_wKz Iÿ?W AW+|I;~kɿ?x/\N7P;$}D ~G!~.郿g!e_^|گ"~%!w _-_?+\'/x9g*x;JϢ}~I_Ry!E}%_Ty9!g_%~.!ƇtI!֗_#~&.ю?_?|[w@w}Yϴٻ"r87>#I?QycI#|P**>ܒRˇ{C29w e*1Py!my&s$C9EA|"=|1!_>oKtp5cg>U|_IU^DW\ShчV iʣ>*q>O"@|Z't>3HUqwPC}thTp;4R5/\RXh: 2fh?iU!Bs_}!< \.>J]ԩQF"B_BҖZ{_7!1 D?qa"%PB_5YQ⣊ I;gg -чŖi}cJb|XJ\BğuC-Giɟs|aW*^$줯u_/V>:I8MgC/J>B"B/"~1!ƟHz>'̯/땖aVi5K7HKzU߬Q.$D|x ?J~Ry>yȿ/%  oP\JeI+>>W(%}] ak>u(s- 6|!>⣤?T~P_f1>h߃_CkOi^<ÂORy!!OW7RlBQ?,O+F7~_U^B>Ւ …Uy)!'$/Io/'}!SD>]RNϼ7!_LPotS[/!%,u5T;sx-ݞ5OP~~g _*'|*|> GLEdI|6!M,/vgl5HRBK9² OT 5>Yx_Ds Y?1\~~~@ďfۦfGҗe*/"61RcчeVCy*/!DHY-?2Bp~%-.P('Y߅k" [xد'~jM*H_a q>7%DTxKѿe^ w[a9QXp+a_^>_HV/ Mx>_CmC ".,k~6kX_7& Q [UBhMlotEJJVjmX.>o'Se(}iɿ]T5oErz %W!?il?ƧBBcz)$lpqҾ~ARÌon ŊQ?$jb~<&}ؿRBė+b|2sRu*_E%x'\*'DEotm#/'}OYN{͊Y<6@r~؟n&_O,_`Oo7}n!KǾ<_o__N|!֏^ęXjIs7ZmQq_:!D|G_goswVIoW,E_&!>쿝bEz5ITy9!vI;wIzI=W)b1_U^C? c}Akq$}X卄h;|aÖ_Uyow;O%*_E\W,ķ*sbUp"~&ķ A gTAYI|'!s>[I~.!/Z ߥ,_%2EOf~Wb~:W)Ʃ}![*?@-[TP\O? e|mH~XT>{I*|%Ye(ߟ|aϖy~.R\EOf;~:zǍߠ[S?"x'\$ńGoT$=B}WKOi#c]y?6|v3r)ST9¿ _eizȧs۫?]*~WbB#*ȜDT^IC|D'DJV%25">bd]% ߊ2Ypv%v"GH$Z841!ҤZBԏ"}D|!GEd }ыȚ)lч7(ۼ_%¢Okå[Bio R5BoE5t N?d܌'idfΌf wb>o%AcEbo !w|~;-~1\<<ت IdE$QԭY?$]cч+ %P_9_^(d/%Dч'[G盆K2B?f:4\F3Ɨc+7 XlWA^EX~(> k;%=򵄰}x_F_Nч?bURKM_>oOC5.G$ S HLB߂E?:^8)cE*/'-?P GS0JE:. )+n" t\0J~ Wz[LK|#oI%(d}?J!OTK>g/0H[L">f?SÜ߮uwKQ/#D|_NCߛ K'st]ֹzfk掵;uumXEEyjkwni߱a떽mLTcׄoҵ#eGsr]:L3Sq!W<^2GLCnlܕi; &ɖ7ݧ4̵.CBܰ6 `ŧݮg [vvfr]^YEs UTj~aC 5ryX9 n$ͣCowu'|&4K[?wFlkkԶ3@:vPt*sgr0N\0FU95tWON#n3x"ܣt`Pږ-# Ƣv*TQrf[ޘmacaX1EkR4ԝݑ}h=l?mj~?b\ɍtmϞsg 3F3Ӏ!gt'TgfXw\=.l>MtgiQӖdmgIE;asr_~c95Y|TcT q[;;;ϱf[G(g0= ;ʎfAxݔc6ZCug򎌑.,Ξ5='cۋ/VL+-7yo;N۶I]=3U??nȧ #3wcV+;F9o)~tnF?[cgnd[nn}D>s t'wds~r382ۢK=?0$=?uF n@_z{ NzO(=,fxѸW-WsJ{|mN)m%zcC|aBka@H|(>0iPν@݋trn|Bi߱#k$Y oK2 oc}ݦNx'Pok0lnP0(!}ȫSPj\-ZZtÞ^7-[Z2j-,BЭ3;}hhцZ(E\p+2<գ#CHOFhm/@\ z~XZ*Ne֪ﵙCjouЁ!A,-!AF!pbb6п/r[zg(w+KM}~lư;6SzT WRC `Nػܺ8q娮ÃW̌j!6X{$64s·'-BfPdH=pbyU-īc}=Aױ.g{,pqf ^YőJc3;:ӝ2>QƵ=cq' ۗX[a6q7}] {RFgDm*ȡNl%p(1zKE𱾬3y2(eNM+<>}{"2 w 7cGN{B9n^ʺX s߹eSCx5'ב<TpXv{ GRȒu)!o/쑍O`ޱ}gWϘ_##R!X#~fTA\g%#Šٳ]O* 侽w<6wEjǑy)>֛8I _Kni~~nKKǩFJq'ebTpKRo.ǃ)gK8g4{"1{d' )<2/be=ⷸ.#lK.}l1_Alblc.9#aɨF%eehLPssP/:t(3Vc=8;M14!!PB  DBP,$" v8=qzӋ8=q8^W'f}v۝=ݝ$Yͳ;̼SwoǮ>wX zO\;*ϣJo:}Vxw|J6=p<^^G`7[vG dIk䈄?WMd%[偘gO۸Eig *SpCG({|[zM6f^O1sӉ).U5~9"/>K%fs؝Ӕ)x3z3ʤ{I8CSW>2x#i-4R\{crGȖ(G{vvfy=2/;x]3sff`pܣ'C7[D!o9M+>e㝽#. {0Tb^v~xw(93YṴ̄4=1n%nqE| {3o8~J;xoOǻ. ⧺GgFÃ6Dhqd=;?ݯר'}'Ow/Wk!4+">q3_7lɍ0>9lg} y׊;=4ܻUϑ-'$gP3XKA -C'<;;wz혧m_G{}QL cw#r?1ծV!N "LszhѸ@ߗgcRq'æfe,'UtJ!.5Ǩ++iYt)ar]-OayDz-rMߍI=G6¿(WBB;c]35vu=sJJmK>㶚qɫήn%v׊"wu|WNrԭ%ƚ1o}'j-)Es|<'K)ztwn.w%K-GN\Z EFMA@][7dUa# ]5 事50r[ewY'&={YR?J~눃pwoC3%ҋ)2K5$c"HttЉ7<θ\WJm6kFOIͣ'ϸ'zּ'c2B7?}K79qُ7иuYp].O)ǰeN\ZDrC.ZkB4ٚp(Z ׍Yk]#4( S᱖YyKqZi}<37wuuK=.q\oYk]. E[$$k+EŖ7RtxڸeyCmFq躇]G V-4tI9/ObY_$XMA_Xl<."wR\UY=@5F5qdoJ_-?(!fLtszYde%9R:,e\@oκ[-gX.wkZ-Rڋ8a >iY޴ c mBfխK1B?nL'yȷYؠ&H\ޤllrLFs pe܅[S V徴mI#rd.5m3 g@iM7L_zpx&_ǙZJI`lzv1L Om9-w;qٯ0/Z%wg:ۯN\Z/kEF^wBZ&V9)iOUarOȃD<4ck-g_󈕼y79VGtJY#<'(b#(AܬJ*CTq7ދhQ{zw}1}'Qp'KH64ys*.OI6Yɿ f% țYwrso *D67||{2崥iVİ}?"JQ1mc_HJOwP*_?]`22oEIa5GkN*9{[k/yH'ȃ5c{J|CU\u7aH%ɉ)hIw^d*  krni+MU# &&enN't O (f?ڕ.8c +v?2] 3f-2 iK.;Nl|ش˔ {bm_j7TcJCdllAMiݤoX)/훡VWDzMbUI)tS^")}SA"q&^8oTN+ QRS*ᬵ\՛ Ҡ^FL6Mwa5OʷbfݡߏYiz1lWN@:"?;;p4}߸cw6;K<ϑ'8oeju|zY.u_ewBt`$_ LŴ u:.?Kp',g 'WPUy#A"GD2E_ӈ_"!|J\oQݒs&~ !CRd\[B}YCoa¾/&D.|a (:Hy/"Bp_. ~ݯC C/[O˄ϱܗK|~V_D$>.XNH|!Z 򰿆U d_-񍄰&BWo9/A/VNp#o#m"D &Com&D>W/W巉:BfQ~6_Mb9/a-T~uHkC\;(Q~;ϓ_u(=7ZyRn@n[ T~zl<( Q~B!m k 7H'D^GG7 QLj_,\xݣŸ$Z^ėėBe#\pD|^i 3h›/ax(K1'pA?"Aɟ>I%d^kۉDkѿ<:Bi*<#}ͽZQ3_M=SWJ|#!g"_Cs < %PįD<^ 'X鿀1/$F^s/B^j${~Xį&yCB9c^s}{@(<fp?XU_VVw*y %ܿCa;/DϻTx'Ѿޭw +-y/Մ_G|-!*|#}}Sѿ|zA:R#DXG_+=*+ 1hmaߧI!},wP@.B~f_R=$9^B 7 k߾ל?Y  ~N)?^szxh/TDaoǼ<5'Oo%^#FBB߉_,^_CxO/"~}/ a/[oL%~9o\P7+H!'+H>UF|` 3_m)Or!?uH~-K&$?O.N.B" K(,;iQsW$~!Qm%rg"U[4-'Z _]G%~9!HA_{K _*<$LN):W" Cį"JC"yEVK| w" }AHķ"z_G 6j.&#koI|d"D\ ((yhHV_!o1_o^?s, D#c;N_"H뛈_UN1~iU]D$~_}nW (I|H_qGJ|rˆݽį"Hۿ*Fo $~ !߯uy&BAWC5o!Ʒ_O;B| !(U8& ~w _Mo#Ψ0dy_4jpK-}Cį\G sV+%W >ʉ$"o!("y_~^qv~pKcC^qv?E@|!!' *c}O%H秩L_!Ӊ_)3/"+.)O|h&~!s*<_"<>Mpį%0D0K(Ѿ^JzB+o!DM߫TS7"W;_dy.k a뉯 *I aCaߛ_,-绉&}o#V緫No$Dm}$~ 2sM5|#ɿFz% $ VBy ><~|L$!oɃW\Rgzϩ煇,x+Νxei|Sox[VC`c9!8{B'Dз%~`g/!=~E~aY%~%!__*X%jB oo"_'J Pzoķ b*O?g3 D 1?58*K QT9y/ ~[HJB!H#_M(_75ʋ~-_59R~XE rR?:~>?:> _byko%~!/\nO:zP _!HW"W_%@ _MEįHKL(/ZHAy_TyH_2Ew҈_CyO_"HwT*$DUC*iUqZo$y%I{mh?oD8eKtGkH~!P;HPo*3uݩ|U7 /U׏j3ѭ"[_&]T!Մ(!пÐ?wKa!£]>i:~>! {(__D ^_Zn@@|9!W"Gw!#5nk 3{g 'ryBgQ'CW?R_D#~u0F%>.{M*2BWA&3Ta g#\\7s"jQÆՐ9*ZBȟ7?ˏ_oy F߬#$~ !_ Q>yo%D?RGQķ y|x4ٷC-(=I%~!djG_A?+40?S 5sT y. ky*@B* ^@|\?]>/TEG<Ȑ _J+!_jyc{ ϊR߯T<UuTV5_OS57תp7BTxA"~-!*Qb}C<-*-[ Qo JvBw!H"xW\}I!K^Q&D?ICej^V T/ }|ROK2BJ/aߧ r>'+Q~ 狔?ރ/_*WTģ*| F| /z}ua! ~MTZ޳i@xHN~럟y9x+Ξ~[)|k{(KיyG ?_E9DB|`; BG&US`)9Xd%C q=:[w_dRCrt2Vv ;:EFۯzŜăvLQGʂrfs.(d=Uim V?t2(~=f7g%pMϼG ^zȢA]ݐ[/.IӞ}~v({[vn׵id+نD-TƤ2S2~id{S)(vIx0yHEMPgѠW.ښbd.MK9'KAl$v5{/x4BW"Ȣd;KM-9j'iQ؃ud.]Bf"+)[MCg~۞iD+;l#եwOw]E綡J,:I GZ2[!\S;SU/ˮP',a:}ō-ϮM|toqPsl&Ai'aYpNWp#5Q|?&;Wa&9eCnCs}'f&kJ-@1`VMZw$PEfCqe푆d\½g>1LygXaʸWt_{bk aO{/9f\n^؉@O8?2˵pCr.k33l:Eu\ǹ6tTs68<~=蓺̤<,;|>;;?w8>x">wtwBo_!+">p3q:ޛFO֌6t1rx6O3d݊+SޭzRaCҍQqPωޞ3[KA -C'<&}}u]ks6Qm>VAw#r?9ծV'/Der+P˝VWQJ ˶nKg ,c+Zj%S)x;'O3yz{%O4"Wu'=~Ek[&krʜ볦Nd@V7 ˝V\ ,˱Yk@PWVWA1t4!'PV4^)6k K_fteBYo=ǔF=k+ I/Ϩܤ=^!sM{ۜJ7i襒H䂐2B <!f%?\ kJNx'hfuYSy=9qcU٠cw]֝14:a :# :J;*Sq7w j-~oz#RϓtEs~,¯߶O'ͳ'\vz{qs'/7çncjmdjFK;D_=rvyȉnݨyz)U]=ޏ'h&)ͳrm{dH"c0I?GE׌DoS{ $Q~=O$ i6U5l\%5U9=ZsRyc5=C#5 `5px1= iQerTu4JW 7Gi־v.VGs+}綍rWkGPZwJo6$F+**RXw~kKy6T;@P՜#'0 ex}H"Q׬)W܌lLt좰 gw]4]Uu{T]պY0DRFT֧H;3=O6c.1/ \쭕q!8r]jJj;=ZDW^[K+M6^ojA7)ܦܛ'gn\:A,$3{!t>;&8r_h+yӑuYsE>a9<‡-} yc~>Qbg]/|NaLᣖ⦯MB78 6Gzy7O>8TtYBBطńEQR<[B| _I|_"EW#֎o&.ǚ&y_a_3T~ a9R?3gEJT?8(G~÷ 򰿆U d_-񍄰&BWo9O VNp#o#m"D &[;H >D7MT~ afs~r-&]?[#D@rm~<{? Oݿ}@I|!y7{TW[Q { }T~ VrkKR@q £/I?\_&W-2gOk _WDoa7/㿥w$>A_C|l_M=k |_xK|!_/#OO#w u٨Xd%D BaB "!+$>#j)2Ho$D,3$_L+|xȗW?}\P"Ǹsׇ^qz϶K~՜-h!(s,gxN[+n*KFiS˺| I^q!_ay?Y=G/C=~p D<8_hH|)wq9Kɉ/ZE3 HAK|!f"y[%Pyw+ȿ߾MQ? !͹[M#~ !zHkefݞD|F O1_in!W ߟ-<<+_i/Р~__&e/Tn<ҿxg"jy(?_L|^&k!R4þD\WJZB+B'o!שpHEp3"Fߨ› <+ [ ݖx#|w@| }B⑾"ZBϞ~5CZAԿQ>fy-"{UA- o#"0iVB>C| ׺>O|'! !D—-_@yeJ.׉_CAZȀ}zB߷TA};V.ٷ=I#"?&~ *T" ~D@¯%~5!W!kB;_g[w< x_c7:~>!?_ᱶ(_F_B(TZG"Z%+ _*X%%O]P'Vַ7B~[I25vAoTm5 !~^z_fy}CUR QJ& $~ W"_I]"/"hW|C!+.Z"5?GO%R?q+,Ҿ Q!_!|~0ڟ_J喷7@:}>wV}itGI7 _,ioEG!h-WWZg Bo+uhߪ>r4 i|mHQ54ȣ~_(]>B޿oį$磝=o { I|!wH~ٗ D5/A AK|wH$~!Nz]q<_G"%_8,K~}T6Caエ?=QF/%k٣dC6俔R+-ogGIW}_/~cJ_NBB_C/&DV/!DQywBA<wNQ_EQInBDBC1@WK| !į$y(KTxĕb|y 0ȣ^F|` A4WKX—[޳_^GBB]/\Nz>o%}~@ B/!DRBoޢg/.߻Ux_Im*| {; y}%;UAERBn+E~J1+.~+Υ,;UP}ooZ<;mݿ6^?g[bUmӵԓEMp߸ٓ)?ǵxK31 yݳu,o 菵$=$7*L,ce :#XoI[I<]|E,.Ǒn62JSfz4tW-oi߽ݽ!Y$?}nzW_ɺnY0Lor1%ƜLB_@X8E&mW6t~ Jm"ݾ&ؙLZ\! 6 'S57ḲOg0ʚׄ[OSv1LTg;0tq;}9Red`"wpɴ]*ڐGXsdP%WrIȤp"-r:36җ7řtF, Fz²vs,ê˵O Sƕ/@q+,ZW;^Nw b=A sN הֿUx*|9'{-έB ^wIGMR}~dk܁;{jE#䏜*Q]]/T}y%%)q^!Q: D¸6%OٌK"39Q. SvtԣFY<߼@ENwSiehfA"~Դ:Gp14*(w4ט/GA㧻gL0vo B B YV .t6kzKlƘ}|ʶ; b>&R8g=>z CgPAtA ͇ꭝޭ+K:,pv}npeJr}Dk >'Ӕg7*^:cWK|ӝ)(q<9~f:s%>_7P\9i^.pg#-ܿd3Ƿ&Gցh3ͽ+W9Q]_d:cl(Vg0&K1mdYޘ7&"Ѓvu=?zࡸd!}l?C;rI 7_M0-W-ŕqi%:\)6Qjwo̱:Ԙ.L}ȉ˾߾tKَEeݎYɟ*\)hG(YJQ](79 a>Pl%%.XM؝r̍9Y׻BYkT>S2%ğAU73x*WeScrOs!f%o腴F %o%v\թr+ -3'&˪taR<>M%Sв觳*AnYUq7,wLw[:F~9v[-,KzT,&ŏa?{ >UhgyO%X' 3];)ڭ6~MoS#>uMuY/H:=^ލ;oV$_tC"_HaԠ^ƅ I!ɭbcKt1mccc$/&gz_Za,=`{n]}l~+Jj6Ps{jzzGjg5z8YGt] Uqn.xK8cW.x4gpުེ{c!#(u Jԫokt^_,sAY*alq˨er)ܝBί~KSheBew@E'ɕqeK][q<0w"Ufώh-U#D]2<^o(;('V/M8U8>bPTOjTWݣ:ZPUGkz@o7#K,ap[+BI=⡾KKAO9?2\45G* bjM;qrT+Uq0KtxdCC#}%xjꫜjE GEBONTT*MR -[nȀl4u?<|tBWRbT9.6֚wBP ~ j8Cy|'oJO^sm=YZ){N >{=N$oELY| rPe\R}'G5N;AMiih#>8Z*nF=22PZ+Şd_TSe6Q*ڡYS}ꁳ5Vڎr)g-ך+ЫR:%AAY<ӭj}[r Ǜ{t6t# 0 Mu W9μ#%7* oHH%:aw+u, _}AN,>hȕ:'gSN'7?J;xoOޛ<;p\Or?=t<>0k>}f:?G|w)W<)|r7v%oKe;QWǗ¾+BaVᕖr!8 Uxv1.'<"ł8JϓTQ>O&Xo7SH_G=M{-%z??CgIA̿*| E|s%>`_!yy>uc TxG{7ju| Fo$b5%*>ͽJ~_FZA]/W +I*o$5zo!z~ Q>Uu_G '~5Ƀ꿕>,fe~f$݄(5^$.?THU(w},CwZ*5לt_V@c=£{ay?B\|BBK=/) %R8 >M| ݿSu>' B?Usė ퟟ'k _TKk_G _&B* FZA?7%~=!7Bķ[ Q%To%D_xo'D~hHD6At~B.B~ m <9!D +X{H^s𯽄o 2IO#ڇ%DD| ~D嬣įd CķVB~QA6C~U< +JW ?"}~ϑx)#~!!'AbAO?# /"+϶Eq况8r/''RO|1/w<~!_MJBȯ!M'+H~!L|`o -į\Co"f n -ķBMI ~`'o'8tFi9, i'}|H¿_h?Q}Y*/"%r o9Բ.LSį$*\gė;h8e(߫CC4ל!_o(ڟ\G+}Q1>ިBn&} =ڨ*%* %ҧM?,Do2O_4I/|XPן?}Ao"Bޟ~Ao&~!G!0 ѿJ| Txėjy=ZcOVGUo(j]'t%p|4?y /7#;_EHH|%!y!}zBsn +N#ϿTH.ר[!k a}!/4V}!}jAg*B+?!/R+a#~YG%>A?G|9!W"W Vn!1SaRіvm* 4ؿǨz/"D=eWlq*<e%?AgaO|_N(UxAo'B? d_ !iՐ3j !,CD*<_ |Q>/PJ /6Cķ /2bo'!%$S+W!{ wJ>B* $~!!-Wh_o? !sf' ?o!~ oͿUI2B߭{ m1viyQ"4PJc*|~K@ zBUA?B| J|!T^|>}C> OJt<Ɛ+.%o'D)_$xW\I_&KR&D|?Ie;> )gkPIBߏ_(ϏU/#+< qA~%~!g!sCWB&s[~%r??S/y{+~?G?3M*C"< y9xȏ]')f'>y-k1vߊP?|(6CǦPa}3/?c3峈7 Y<_N|pwBy迂m]W>[ B!п@*_[*R !пjү|*mпԜk_-!XEł˩~\+vV Q?[_Ai'AZSJ|!!W%v _JV¿Q:<"~ ͯbi9׾_IGTQK aQė Vn|%#=&DO_Cy5=_3y2 <䇤?Z߷&Ic^z?͖o CӐ`&f!{uԝ 39٤&]eDGwt __5iv9:ؙ菔8\QBzL/>49LyQ}eDh*c.zI)tmj*fmn.Őp%Xv \wo΢LBvBמM+HKOn㯀k)bx.FYW(Zֶ]y]nk?F nxqhڽ䌮1pqIthӰ9U,#bUE[]e]s;}8-Ďbre7i#mL0ZLd2եK⦌/N?ؓRo2AYh!55!6mOgg{ׁKeJ Vv|GH;O_)b{4 UreA\B-בL:#>" YU |ϻi˹ar|B+ ָOpwҵ?9><$iiؚ眚i8M;,$ݓlFWJQ aJ>{\30G7k[G.cb~9z!fBs_&9<48@3wofhKOvՁ$bޡdfwyXmhT~?#~yo2 Hx%̤ 'fT-iNJ}{2ΦbM«C m0R`VrV SrGpu#C;GF5k&Fh8 %8^;J=0^<ӭ7,Zo=z7tc-(hW8ev>]\%;rjxdQqg-+ǻόT[+}'mZ׉Csg{'}'Ow/BCB_HnL\d4ENQE-N߹DysDkne, n%B.0)PuY,w7 |/NV^z,N.κWXɇ9X+?S)>ޓU}7E5y{b[%w+؊˓-&U5?L9YSKXKf@o9!K/XޗYk-[ X,=LA eO5!m(DeLX2!|2dl][ߵ̗GGnR/q5ns*ݴHcI/D"<,znɈ@[3%? HH-v;H;LS D,jɱ*LQV-k,W6LIGDGU rGUo*]v (]g>Oev~Zo_OtͳA.ͻzOY}3ňO}5>1+*<]SD49Ge9_J;f:ѭ@M fancRZxf5甪 CSst$rrxt"[~h"^lަ766ߐDT?5ӝVrIW\!Sߛ뷢jT5GkN*<{{wyF?bN֑ӫU.xKxm_?.ddDܓBBB^ǣD*KFwLn i&9쟳kfۉ')nk U$}] gGbFTDT:t/ᕅheBew@E+st%?)㝅 u}'Js4xvD;6'aI$ꚕ9xi]4va+ikqAqlBӭ[fnJeG J2~OWCU]׺wgXz{7\aժi6{Gߪtړq!rPQxÌ:eo Y$,w ޥ&p~dCt8=Nc$oE򻂜L̹% ʸ.k@2AM%Bt09hu #֏0qgi%נJC^˨]{o]iuAN/-R.Zix-4E ?*WA{lj"%Ntex9UO >ҔU^^y8;{|x:A'qYH.Qt>Kޙ ?r _#|rTy54?x`8Odş4#yA)W<)|r}_BTKzy7O>䃝tYBBطńEQyطBA:x͎+JB9X}"Ct0U|ϑM(RQ~e˩txFAWJ[E|#!$鲨Oo2þ nôrMTu!_O|`o$Byo"~^үe W?ׇCC]E&}:!Q7uYlՄ] ;-T~LvIFBog<"~N%K"{B/I~[_M?" w5~! U\#D!Tn_MQa7T~T8. y?N|.үInB?"}w ^Oj!t<ʏ9LCVgeGs 6y~p3 ?Xpz H|1!VWjy#/!"&!\p?*BO|`𺬟 <$@D<Gw;aS(fyT.[ _O O'P+߰.uKxX?G-K'~!9/N*.𿏩E<8 Oݿݧ'%D<uHgTķ>"3_H$LVk~N|!*|>}OW}FAu ߕ(},K k?9=>=BmY?x\ƿ,_b|r^Y oT/}P"At !y#8XZ' &j_e1>zA:WDC]2#VǷYo:~=!C~[1}VBm2i9U+ƨ4wJ"1C,CvA9e %z]{N<ҟA{ 4^Eu!?,?GYNz6R'/ V#jY(kſ#ψ5þ7Bk"K$~-!/?C Q}]H[QKC䡿M[HrVH|!8DWGKP.[ a;+E_E| _f/!ү ՘YmjhI~-nB}6}_Km$^ƗH7}lVAVƗV_OCV[i|l#N|!WrdG;I~+!E|vo;ɾ*\eaU$Eg.?HW[+W\+Ξ?αy)P毑#c so ?_k;)S"&t|Bǀo/Fyh82BBBYRT8yϓ|!~p{ a߭/ FNrB?"P˗Xϣ\~!4+ !XK !8$WBW ֑'į\CO%O#~-&AKG|!P֧*z+v/xeϭ_; cui-?Gv_I}Qr^)#N:Wj<{%`I AK|Eύ$~ z~^'k Q</5w|3!7F7AXyj$_̿CJ᮴Dޭw%n!=/D~/"TAe%*|HWBUA?D|)!*#e𯏄C=iHsnqCE>'o㧈"}Zx W¾?' ~Y*|Y7 e Y^& aWCkM/#[,Cbc~"E(SOy ??Ug?#8!_,OF1>ZoOVGU~o(j"YO[L/!R~_F;D7 _.1K˽(޹ GF%}-%ј _I(C!}zTsn %6Z?Fz6:~WsTc bS(V ŝ_r| w_H!0 |?m}i? <wP(nHۭ~tpN QgUxA#~~*\(y@| ϣPᑖ@ y!4\q_C1 c/ 'd!GRw)!@ߏ>h&~ ֗ڿs <. _&i,$ ~^%.A h/%Jj5W_Gj>c%Ǘר:_dy* y?R _B{ 0C_Iߨ›%M* o&b7͹q@mi.P̿K>^/ uzl 7Cw RjDkQ< O?=_J?},g򭰼g׿~Jx+?Ѿ?_^ /$D}UKB7<:x*|K9 o_%N%"'~൤G*_G?RWs~)!K;HoTo#߆C!xQ?[o "MR.y>MbB/(~ė} 3F|PטX> +kӲ._aydž!W|ȃW\W|s2KE'3-}4g9њvnكgn8puۺ3B|u=8V(3 ;ڶkWO僩',.7dXtq2i, rxqrh%OC2ٳu,o o%=$7*L,ce :#XyI[I<CFE,.Ǒn62JSfzt n?EdEwozIK4+Keќ.^z趺I VTdl!œF-bHC8˒J{Zt N"7혔ƴ1VV2~cJ3R Srm3JB/ҖFx'nmE?>'d=A-jt)flIaJ>r\s v͟##1= 3!9/m5;73Yc';@1זּ`5;U3TaI {Q翷Paq`{a< Ԓ:9 чa2m`=)E QCgya8 4F uvt_ ڽ<԰|] KUr_&Gv$Wte}Z5?85k(kOo#'i;?2˵M;{Ja돜hQ]]/bjdkKRGW;NׄcHROhwü?920~"<ߛ K23#< xxSDr4nϵOZ 3Ujukoe6]0ےGu3=9LHe),bvO"д~ v?;RI ]/g c|9?=^9s8& +İP {rmQ9] 9OY7L\nHDO:NCp *HC9BLjپӪ. =:Lbp{O7#pվm'n/<e偘;21\$ۆq];!8c[o^n=_IفӼg<4_ RPn=ܹDysDk;m攔eKW|QᲉ|@q-ȓƜN^2rI1s|kMdhMIg{*<#[n,Cȶ3 w5jըk|oNx{ڜ =}̫mA],WI9Gm!۲.kg_1CJ0b<И7_sb";ɡ8Zo4A;z]Nkh^½Э>,ZW:qYj]h%Ѹ0kXwye%N\Z[tD/whC͂jC2̌u\t0rneaM}.> 麘WuyDODLlE[AKr?o c?}ntRuR_dSdx\}cN:<ċSc_k7yq,p}tDƒh 8LȺs19w+a_,hNAߏDUrSD7 =o}%|qr)15:,zMYk-W`y+oafU73xҷVت_5ǖs˓S%rAs;BJ=P%ox ]*'LqpFvNv&Ǫ}x R:VWc%dU3%%hY^U rե)չSoDc7_%{Ə9Jn)x<N NOοIŪR7g=9ԫzwV;Ö;wXIǜAÛcɖ{w\+Gtq{֙"Rr3%oftV,;@Pb97gG{ TýOUO $QGJt]hv*u#D]Wvgcڪڔ$-.Rh5_s ڔA镃*JAH:.y[UOu/B9bꔲ*nWը3jq%a!DUMșR+L!F˔{="_ˋjX+ҽzV2{^cz%r{xo\nvO7{%/jTOlk{Fڢujw9! $'={a5gǨj.tT_)NDz6<a":NШ 0fcTL$TX֜+n eauWY;448DS#fx;%gIx 7d8~[z5_9k ƻZH*aHY^X-'PnnH!|?wZ凵TS+N&Z.+ڮ֐]R>tZ1eǁeeSCtmUNU3Mz9d{{jف~Š]w-NP2= )d[u!++NƻU;6Nȩ;^.ĝ|_?66TbϪE@n{o{Tu تwU9߫ s JeaW]:>)G" J=dy hY5-w8)%@ehݽpas}LL1"]S".lS ;)n!snIfA-4Δ3;;tzXa7{FsyroG??M7ۂoZ ݦo9D#<߻gC<ϑL]@E>P:A+,$'ˣZId} 7vʹw-9eS?o0+('rՐUuy#O|qʤ~%EɨOҏ\ >re`aSFy7S>uS{.!~ Bi¾+BaV<[M:T$J_"Mķ 7HNB_"-E7{៛C䡿P~{J Oj\%Xcy:BNQĎ\K _Aw(B% =!п͂I~JB?"%KkC:C 0ABDx=?F|!꿇BԿ _Mׯ37 n;Bo'DNC;~Ӏ%!?@>kHUCy6ksk <>2[sMGs _)zJ|1!1į ]_BG|)!@|!H|*2Uۉ^STxG<aӈol&ABL7 Y>KHVB׳Cas ʷK~c_(|'JB _(HZwb_&^TxAb{^fyQ>/%X_fHUsiH_C ?&B_T[}I/xاoH:ˆWok _B>G_'k 7H%~N_&k$~Xį!yCd?z3+ ?' ~i+__G~c7*UaoU}į&FAڿŸ,(@>G" $_Ok_LQ>WA-? "kc?oy54QG|sou1/ot:=Lk\^<1EwzQk'i~QGfIAEߑGa,1U'2۱ӎOJsȭyK| +%%2zAWJ_KT]D JGTEx+.T ,"~=!+_,1п7J)4K(K6Br?OiuNVþw %ʈG._s +H/U͹y-!_#,GUk b@O5).r7i"~ luY}AwCGEvI|!GUyEBo $ː^w!*?H{5vss=?7_E;lswYPwߣ½U;yɧuBnL,k~@_1C}[7^*|O<2W?Y D}&D?kH/PVB 峊WY޷"zmUk~Qk*|C7"S</44o$w,{*@wO H"DPKnBϏBdžyS_'!~Y!DK3ۯU/(-y[{w*QW 'L㏮?_DC@o$[.(PU 9F(Gc!bR1M#M'Q*ߨjQ7Aot&zFa⢰P':AO:$DG+uG|>Z`?(xo Ⱦ QW Pq'1 %w #T_-ȿq_)H^i"⑾oU_IqjB %z $~!ҿF#yfBԏˢKzBu!!}hBo$D#~3!ʯ-qNH|! '_jy'Èo }7(~%~ _NQ/7}ķ!É$D#aJB#*79<_Γ}G/k#MJ| _m 1ۈ? GyZB//$DDB_N{ <ꯑx?]ڗ{qo_M=ZTSH} wa _C/4ȯ!;Ⱦ&BE/|/2NW*o#D X+_]_Cx]K| =߈~&Bu$%5׆_&]7jQ_%h_#~!P ˨~}KHRAy>g߿mY!<q=­* D~rAW~~@|5!D| !~y / Q~ >NW}iTWSb~+~c%TV~< p˿B 0CgŸ,@_ 'W b~(gm(NBbC~1{_!beKC䡿}-w BVIu6N?Ba_5H|G!_/3FiLbMH ]?:" !H> ~?BV\+C~P£]ҿHuk7EFEuWWb}v˱cyRAϺRU b~W>k~?#}no$IpjI|3!y ЯB!D_Jo4h_`g_׈~W $>N _1#\0*|Q"_/?BW$ k7Tl/cTyqA]>zg_" "? {}?V'_IO_'W ]?Uy!}z97kCsjW[g*cy+K}MH|w9R/ ~ KI|!g"\o#(Ca O@Vy˙&5sr<%G<y$O@mZ;6x_.3 !?7^y#Ƀ/5"wul2(my4Qe-sX79,eW0#K &Gݛ9B?nH7p 9%į$R$x>ʈ_L<S# A"~ orT[ͩ5(*_Gդ!?9%n 9-4J|kzBo|w q[+ޟ`ydm  ?* HrBȟVa /A.+ QgBPJ , seT'GXGoV_OQ3C#o Dp+ _oxhzn"#/߿ye$įˈ_E*% !*n$;Ly={ [ۅkת:wEvB̯|ܶ@OE 7 <{ < oe߻UAF|\t߮»$L0!?ė NljGw_'Hwrޣ$~!!H}įl%T?"&~6k%~;!TO?"#>N?Eq-!i[E^#|2B ė — <W"_?x7}oՋۖw_@ -7HhUS'y}?PGy!+._LO_A ?7s/!/$ė o/oUį&DIB_COr /-r[-[5C;OKZoX~ky=B?J> /Eq#kbBͫ|)> /˗*̍xGI~%Gn`?O͹[JӈO9F~oԛFɽLY_H(7ra, .#U+ ~rP`į D\<y$_B(G|,_`?ןJѿ_D|9!WuC_dJn~~*KRAUu  }窲]) }窲2CJa's_F:wACsuZ%2ɭUW~U1!jB_K|`rXM|V0⬯ro&D (?V.ZΛJ+ 75΅VBOm3C [a,mylH6VBJ N_k+;}"]IcJ [_xK!Ư^qdﴒ?{ G$~ }-y?B|`U[b|Q y&%=I_%J'*AZ xا%D:E|Z*>nu𯇅#/!yT>̈́(A7ng񭄲&Mspþ$sN -zﱀc,U:bX^s,_WV /r_ORv;zr+1^h!B/#DrA?ھ2"/UN<Ղx*R QWҧ}7jz bZ*%ש<ҿ͂lWMMP;w}o$~3H_q݄#y wKAB[Co&yi(߫I=T¿ko ?BC(Ka(E<컇>%~@p^}#$H_qaB#|BOI#Q G"$Ƀ,ϭ9CJ_{$!dI_5]Ɵ.Ử;R;dr%~!y!}{_)I?&>!(_OI|`O. ).sy ~%-(_#_ yY`/߱) Oc^zcﵒo <,6= <y_u|B"~$~TO|yӈ bOqyUO?y3/'W"_)XM򳈯!˛M|- O7 V*OBAz0Õ\*y)_L/ ņ\^ė_JqSyɫ2**Uyu2þbkQ>/[)Zfi*3CJeWj\~!UT~M$+5WQ,4$CUw9AZիZ0O5y[ H5E,$ M*4K|-!CE<7_' [Cm1o|"2 zm-۴BBNf9k?j%K yE| ޿$W<_E|`WI_E\(UyH|!ǫCk$Gqשpį%]"7Gso!h(\eT@>%<<F_W=?8$y~pFKBÉ_(H<eWkɼ o oΪp^WυCyCќB迅R٧Q_!uWkżMH|=!* !Ap  &B 4C_Ky OuhO '^P)*#>!HyP_#X+|\q$? 嫸IjB/7 5B߉O<Q4m?G?4R ?#/\G~Tj/&ˏP#?B)\K u.eZ^Uy)- Az$J<_F|5!\_C(Y*5Clk?4ڷP+ BsH:Bد|-A/ I~ٷ/&L7~5_nGˈ$FyZ_hεo+!_М)WcI~}tU¾JCghڧjp*}82Y>N93;^ǩ@c3=+*ybƃ/JdklGSq.ٕCe.~ч m{:;ۻԔVt) Zh{ L'q{ىLtY!Ck^L'ktbq7L0[Lm+yb/q%/ҥRpZKk׸k{D?HOw/Ru*rX#Oޏ33rcZ+1g;&ǥ\i/!S,/yśXL֣ɩ{A4:*dMvid+'O1pb]* 7<"ב>E.j=sfph$~uoPT@p|ȩ zzҧ>PӋoR*Pɜ gzb|\VPp@9m}=#|cF˯aƙӽ#C~f>0㦻ghZq޲Т-cemei/GLM/8{w'c|3n2rխW68<2~ WQɡ~ۧ8;У}џȨ_>r+я L9+֦VC-}'f&kK-@諂=LvWylY >w@3Jirv} (kVΝ~Ϧ=27qtʖ@L`{ +_ 4Mwzh[@߈$4*d'{ ?8vN;=(3y7;].zNUӒ"Tt{ )|29ng {Rr}\.oS@g>Av}zNvn7m_+JqgOFeYwhhp(MC}'ìmӜ45.$le8~[ޑxW=Hj'=fV8PwI׷Ӱح$K?rA[WRѮ0)1+w&ש/wTO4訧@L=ʃ7J1EK1 \LhK&},1Ad;mxj1)\ܞpz5+Vw0wZqw >r7θWvj%n8~7>{RzyUIe|x0~WR}й*c#{UMiڴ;T$8gfX'㵾LZ#G$kJ> ]L<SOz0-w(,9AeWx|(`+{|\KoxI)zz:1ӥ ءƏ#B]gp3ؘls2=ctRs6[t/gtj0a3}0fO>z3Cý[ղpBҍQqP 5<_D>O2{m׹s~纉׎y9/|4Ϲ'ѧ$isyaƬ/cU4'.KsEr@VWQJ +,YJ:U]4*^:\ e]ӥgZι ;qSPIZ'nb%>_7P\hژw)8}Nvd-;_ti}^|W%~ɞ)Btm3e)+PV0k($,3WFٳ-sSgOkiϙ /y4kTcZ1vu!GZ!rW'OG62?+,<>[}K KeX}T:\y.^NYB&ǒc"!"Eo׼{w/5i>y'_YF kZ(TB\H|xz:{yٳ=e18~rVIzo}zYhy>vKneV[eFh!;֊>[k,n-Qސф 'LA,o{)n\+mO'cڣ.˺R7&;rTi%@ʝ,V&-oS)qFx|u]?ǻȵAsh>즓rkf9r<qz=J`75V)~a FIqUj1#{_V m)'F 692e2|:=LwVqkXqkgHxZ.4(V}[;d/ޗ~;i;iA ͺAB7FA:'n +m=/!`kteU+ԵkﺬrHG] NH Yj]-VRX)p+8ey}{sf5^dlJ)cgRecۯ6oq9Fnׅw$l%OMN8CO/.)+Եk怜JkX$xHyڳԺN4iij$ZZ=IcV?C=^(?2yh v&Y]%NXpwr|m'No7[Nj9 N\ZX8qYj+Z4^'LACXEV=I뇴d.2}Ѿp %ka%N\ZwzsJ,Z+H~ݙ.Ѥ t9a 4f@πҚo3Mٿ3 ݵb&5ПrreR(볦ޗu;/~>Jewr"Ns\;wtwֹ@tk(Leh>O$?a{Uw m5cRIM oҴX[I{#gi8xWַ[QRspX5ݣ5'=Vӭ֎5jluAm Uq] xRv1~h\v5ܽ>xԭ= >Z2?C*:*C)-PV/k+s j mKq2 jPۊu(.OMJ|OV/T{T_e9,K}*Vy8j.aR[*Whye|q}?dW;]A:4xvDEq%lkUz{lu?ƴ+M)I$U9ǫ {uu?$;`QX !@B @ t0` x(;88ʼnN{81v9;fZ!??={΢06*ir;?5;ҝ?Jl[59+u H4OB1M#k/%O_\'P%5rScX2)=٢ g˲9@맮,{ɡZw0_rP"x}}d\ oy.Ց;H%LRM*dj7Ž_Ib^>h~#a*:a4n 3( :?7ĈԟHQ_0k͎F˖]E^Yja!smi?PVcM&3{2Ŷ:x晾DWjOy+5iXHJ?ca۽Ov32,y=A2 {&}wu&r*-I-dJ)M2j6=g.t121Tn<N uүLw֭W>|I?w13%TC]Jveo'{Vo* ѾӴ<}~}7Rj*k} *KtE7?OqH|3!k"w/BbBgZaч oU\ALz턨EB*dߴu"~~|k_A+i}VDYCBk}7WvX:Qwܧ|9!ʷ!@7߮oqo4/ gk>oo=;6igMh/ DtQBByE_C|R?*o#DA+v}OW}:aR>_GQ'st|5(f-Yx~=NTBOWF<43 BW}MhkI$'"I yX o)7ߠ8_yS7I£}n&'=Od&D|=)@?!n[q2}肋g*oO>YX!v{M8Cqgp׏a|zG{ &^ϑ<{ϕb>񭄨_S/PBK>|1o)!%/S+5+1[|j:*@WK^BZ9Sˆ7s青^gH !"ߢo1_"v;! ~"wJzg)ƕ7]oч&BO>'Q?%Xgɟ\B_K<'_)]>;G/SƇJ[5h9S~}ؿ:>7"?A|EL>H¿OJE}d^IQy;!Z} +R}VU~o$}ݢ'~7$}E 1>|Qҗ,<7fmeK:FBoXw#r7g\s ?$# Q?  78S?7'sIWB Ip|!o_߬_K~C>-_` d%? G}H!gK_o"}C/';p2o7~:?Dž&]HG6\j@RIit~4m5~f JU>CGG UXxi~Lٸ@5ڿBuׇ XK*#$M+ke*_Hj>_f!S|̈́:.'P4[ u|5k4Tc&6CrB( ?Wh|^A9: EOS'Xa2E_ H!oɟZkSA|CoPH,<7?? ̈́п߬9Cp?/\j}rX?YyCߜj.uwgJCvǗ}m؟T;¿ޚD|}80'$}R3YF7͗:o$}Z儰oXaW(!9Wg%}Ţ#Z'3~^U>}%7jy/\ێ.6JI|Șᣒ-0 ڗ~%~|p_|9ϜskhK7 }C7$'*Dq>Ē??~NL_%[ 1~ZxSf(QJg(bG#LQH^ҟT>Gw%jE?H|_pL|-!_O7*.&&*o%DE%h%=򥄈C>Lk#vZ0Z|PK'Śȿ / b`|u{ke}wS?]2$(b}$Brje<[/Vmo*8_3+cExdiч3_Zpi6j Yoå!ڿBiھ@_jP>ӆsV?SZ>K"B؟g%ZQ:[}6BS>O7'?ߢYN!ox7CM3t-RBò75(^)Isgu X~Eu_HoXR q;^C|"Ϳė ?_1#c=oT7,}5Y孄_jxEo&~ !Gjm*_J,s|$~9!* Q{_E해O}ORmW<$~!fE:U Їt{&Bw·o_ߤ|+F Bۉ88[T6;RS}E|=!n|9^[>[W 4#A(|]?$. |X~TNq1wO|I??8-}~hO_Ӧ~?E|-!^ Q%ywk(r}QҗU>SK~nG}8="g*/WD@O ~+!_(bo#ab+re_E7ki~M˺1rʏj|Fÿˉo%}(>zQʛ>Hh3m/cFdYDq8;>^`FW#9} F/\ r_|fl+!EIyࡿ@wQ}p /S,xdg+b` }俘*EϦn$"m*Sƴ6u*⑿pu*_Dc-T~YKDU"@FQ2B}_C|_gi7_b7eqn,ro| !wX׃nZ-p? GL=i(nAK>3uC*EKJѢ+VNI*&.I-M<>85sXQ7"Q+.&I:VBo>q%z~1OF3 餅'I=!IFK|2={tD/V"~@TE}1Od'l$}dq6SHzku}n%{*sGE&Bt+pg| !!}ϦYJϱ/_OF;_N %qtTKzPQ/!~"/r"$Ƣ"5 IRlB*KEިJBݟEx>ZIwZxؿ?x y??Y[Uj_Go%-H1!d~ыTK{T'D[҇,=ė+WU~_>ߒ?kR _F>*n''_F>&~>M|\%ݣل?s~M>C|Ѣ*"}ؿx`~0;?'}㊴Iل}gɟ7^JB?P/z,<_DU??x E%i}DI|"ΏM%֢qK{kqgSiXq2͢MԔݢ5i}+V QҦ}د%p|XЯ'*B]DO(&*qtk ῌ%}俐:EZD%-*_H_-i}ct a,?_OPUk7k%=£Mk C:B'/r|"@G-ė*E^YhKE_B|2M_**VL(/ljGEߡFBJNUG孄W#!~JZIS*Bؿ3@_Gj+uo"~",*C}K>{+q(;_$^ Q_fyXxү#D?jnwp_%O?UGIRLBR-Sė)/~~>_Npѯ/?EI_%ү$O%EWy"}N|"/ӿ!>/$D}ڗ}db~feƔE<&7SC~_dOH*F19"g*IJE3?KW^ZaW">%&9XgZSVO"~$<<|/RB߿?)FLYdTy9!mчM,<"JBpʫ1."P%E,Hإ&|ob$ѾVXx藐~=!J|bŤb *_L)%0b3_BK6Bԟe {(/z1XE ~b;$DLYaJ AW~’| aڷ͢_Gh,Կ"Ice/iJ[<%_FW_u*_d?!&z*XE_'Ol u~߱E_AJEO}d۪yI>);Jp*o$DF|"cWJڡVB}促Jg !*W8gjWgl؟I-'~5Nz;.i@ _%ğmT /%ݨ<z+_p#~FķLe ߬煒^]h#N_F_nݤ*j߯7{1> r'*vSNT~zIÿ7D%E}?o"f[僄)H6IPMh߷#wfB~o&SBX[H.Gt٤&'NnIP,B%}Ƣ >Hw)&D>pT>G??K|BQ/A7)O}C Q_"Y_U/#D}%@OOnjS>Xׁp)^-*dߌHO,<f2\ySuC_W#LW~(Mۜ߷2B >=sG)zl5Fߜ](_U'@;X?(Ε~V!wSؿ%Qy~̢;C|9_\U^A/ }?o+\啄&"Cn>EGk"ECET^OS4^$>@|!g UHh w-!M6W)ȢOkå[DRE?ꯅ),S}ZIPGrmwܸ7H"sJU>CE"+kGė)r|^h S,\R &+-_A|"l>G%;R>n~gΨST<<4>v}t~RH|)!g$NYk-R E}2E<aFJQʫ?%m~+ՊsIm*GK%]aч6k Q?2PyΏEa n*_LЇՖJ,O矆j7k|Bަ<<7nAIOUy !/SiStkT>$ÿk+h*M?-pU~'U OEGT>WQO>?B|bQIQ|Bo'Za1/P\DtL-+E'[ a8K^J:Մh}?a)3\э*_Cr4k|)c_@<9o&ߢx ٿ- Q?~%~ ):\Anj"ATE)v"$aчWْلs-s_@| HKT>WǟKzEZE_饒^f2}_IOأ'|%i꛳I?ߠ6]pO&f__roYO!|]O'D|[{U>Iÿ_?'*G?@?@||-!8@?B:dnIPABx>B}Z}^S~:@?k>-?Ak41"J|"_I+ __'~77"D|"/;*oPlT>.ܷoRo +\яT.̈́'*_D_>> #B-?U~ƇA~ITBǯXNkT^A %U]3ޙ>;Eq7gTwgUZǛ? WA_Nh3{>AKuN?%K奄߇Db>ߒΨˇE?dч3"T_>._P8L|e,5H*M$Sy%|fE#~b oѧw o.wDKXKjt#D]B|-/O'?Kſ#O"S4/C_#L~>x኱YxmK󞍋L_(O=닍4ػyMMk7tGb <_?>۟;lϗuֹ[ٖ9#:QN<o}g} 2XWw^ʁzo^>2֛< v^,qΡdўɞɮdo|Urg0D_PO_|c@_wolr*948k|u(njFN:tA#݃TK*:z=!`„ɁAOCÆrn|Z;W9*K:ocg>ıNX.W YEC'҆Gz;w+tʯ:Dz_ EɁΣ~ Z`B7M aGbe%؝ Y'%zN'6m}dFk[x3۝DѝwF簿 ^̟mjH ! &8XS͘Ucɬ(L?iRt'2c#= 3I]+ԑϳ9M"nKv ,ۼ'vt@ C}]ɾ#FHka_(hH}KsyL}ЎH8їg kJ<֓5PSdw0G7Ka;u[{^ l 758Kd~6{Uf:r؛Р_K->}_\|9!6(r_q27F}t쓎>qvf *KS۞a崽P==Z kyM+u7̎lBY0MO7ץvxY]buY=-:Udv\:ͧ?=,#\47 ޸7cPɨ:6hgq2u4H|C)c t5K6_9!1 $@=g][^QaK-9#AQ2fD˦/-vY:Fs;j$\4{v|xRP1ݛ^՞Z/~' m@׉x_oNIjhhnMuLɾxSp:m1/W7ɞGg ,fPaR=%{ ܲq&Kzı 8(,9Iewk PlJa-I˳VH1kˉ1_.ͅ2:ho>:YA'aDEk$K ~jopGz uc\|O=>&6D<[^tP~e/ϑ 9}DCCbG+NMXm8{[aZ[!?Ԇ-V+>Uz00Z%96Z?/*9iTCat(yd_\>=t+,pZ3%s<Љ!d$S,{, Fp=8R3=-_8*=shmJc?ו8ڈO\?ɮxxuTwlE%{{7${޳pv~rCu ]/>Yk[sO"3aIb:ǎͯ.%\Kz3Nkg:mդ)shuZDi++j`^ߗԪӗBnp99/iN&M:?Q,-<ٽ!I.|^4Cgp"1 eSP~4\VT}-=p.=-;Qr^c8OOYiid˴gܿ@s%qm~4;={tf;O2Ɗ? mHs6+"2EJ KLڪE TՋԒQzYIm^r5#[pǤYt\2s~5g2X\Z{3s~gɜO/mԷ"^_IGaَ)Nve#V2z]oMtuj6{r}kr'sMV&p|xkښ{> ze`z^o;?^·+S[ S n˵LOj6OdbaYcFrיi,O]6yƋ ^甩 :&Gy|aĈRR{u:C".AT121??F3Y/y:yIz=ImSp?]"/Fwe0r$lvױ(&5=2L.%,GܿV9;S+@vqiۡo|*u1bZޣ/*jZjq2ǧ7A IFjy$}) <{-B|{'mՠ̕㤨ϳueYߙ1hyܕh]-mv2~]YV|DMcQ>a]O!-7G| 1p^p ֘ɜWS+,$2qH8b\CЭx^D8NF lSS _㸓;YUKk}9u)bqec2h Xm\Yt}5!au7Ge m٨ءpUFpcblߘRFEpᯌWi|T ?^w̙.Ŀ<ԙ/֚"'s+veQS'"Ү}͘ߋʆ] ǒH$8ЙMt>-LEqPmN].n}HUH|Y|DfWųi6sO.L/?!W˲Mx-WwT6=H9bK?TIZMaM>7$NO{Dh^XwZTq7jx5\[=P(D!/TDiR/Km&nŤ3<~a'!9Ə5U\553b+lDesfA觮L=Mwrh Sӌ7Cqj&q5TGt"zD#To{?Œ8]uG&޺dX$NHADr؏?JaUFF`DE +;Aon)ܹc}SS[:,*mL3d4WܘbފVɸWjGF3} Cԏ9r}Q 5Jz +>giLn5RoLZUZZLJ_ xhG=GTmCف#uᾃWɼu,&7'2khT^d/IׄxXijޝ[k631É\v'*dYgj@ByA}'R7ߘK+7`nXl71\]cW[VTԀ]9ѭ8bZio.3CSCg}֠cneY#fPg?ر0v3͆n;17h9j wym;aֵqU4?.ԘҨ kr("&Ng꼥~MT YA 38SCGmܼ_YB*F# Fd#kԊύ/ 363/ m,OTZ\͌f1.}MJGSڲtW7皐S~emb:tҥ5,U˗ޗZSA&IK~pm6gέåКTL<#j2ĩ'ݧ8n͝vg՛(8+l?/*ĩʎ9;-:?w]_ɾqc<I= 't18;oۺc퓢ԟC'לD_˞ʍ3sYݮO2/(υz(_8ƻ*ֿ#/P~BNFM)^bs_|h-_D<#!bebG 'AjYP>uժ&*vw\.&~!sȿKn!,@MR>O ?M%~:!w'Ctׯf_XM72'Q_F\Vom0[K}3TlK_EW+uҏ ʁG|!ڧb yAs >_7?OqH|3!k"wܯbB@ӯߪڷѾaŒK|ѾKiŴNQ+o"Dqi]Qr> Yq՟BZ/'D ЇʷA""_m!magicчۉoV\Bgۥ򥄨˒?*_!u27x_G_yVM|?O%D"~baNITy!꿋لF߼JB*B%=(#눯#4{oPc,<ڧ¿~ƿo#/Wp5RPjBP>?AZB~dOuiI?Uy !OUŚ*WM`ч7_xHB"# q-3ҟK{::DOSHzg(b}aJzE?2EߔinSytImb|y1<:BÛYnpBI&{Qy!Jz¿Iz{ABE/"">_H>ٟo_LMd^Vˈ_JyWXx|뿊Fo82BNvpǼL6}u ߌMoVx3{˷_J~{E_%=*˻%}ϢC|"/~'ѿ';}?5_>@(G%}Ӣ?F|"_ /& (b}aS/'DK|;!ƇOKW?#}W|'~Z*ߗ_G} HG_%Md&7k3!swf Ό Ư(qOdrXL3 U~_YxJ2Vy[CpTdB}XyW"FtEa?H?%%^7%a)owF*/'@ M(DlB?&~!WB?F|Bq.?㈯Sl" 'D*." o!Eķ*%/#įP\G_OoTLPǧP u} 1Ƭe(1$kW﷯R*vHJhgB_JŢ4iT1N:TrBؗPE+9d_BjoUo`E_SS#KЇ%ϣ#ZK#}B U^/5ߨH!髡*o#D}Y/ ~%~h`8դ|9aHcs1χ|!_l}俔h56~rK0\| a~[ 1~dP=E߄^3i0tE'LQ'CifQd\F1D|ߤT>Zݭo#Qq1w*o%D%/!D씴[K a%{|m߮&~9!o?턨į"DJJ_Ov5Du&Y3>xf¿G#ߨ_*o&4︤A>E?`ѧ1åk!D ߪ쟔tZmS4G郿7~yR_2(1p]1HO'_JVI_tߗ2$ݦ<>?]g,6y|~U>Gg_/# W1>>ZB_O\y|~;TJ/}K>/"/%D0@_dɟT6BJ Q"~!jIQy!}K] :¿x x/X¿7ÿ7)?U¿_ON|".7b|~X߻_D^iyA[Qߪs8@Dy:qIo.c|¥o36O!y1p /\j?S37%o꛲M"Q=w}R[h,r2 ?S9{Dޣ9N|"__OFE>5- +I; o&~GEOI?XxH=!Hɟ1*6qjwT{f}7 ?ۢN<_O@{&B?jXX3E| ULEpD ֟Mq{Id֕T Z8kxIU@-?FE<_`|@E*_@h wK, u`[%rBK BO ҟJ- }b1eX ?A~5#>+T>+ЇėI k-ȿV>b+T튘MJqV⑿p-*_OۈߠGƒ o&)<@ ~+!K«U;a5w9[ "[x{(o.F%D|nЇo%}[(>zQʛ5e#̝;$𰿓a +GNWӈ GWg}YNOc"}7[ڇ_bK_}qj[-]yiT}.c短N>BI+VKzʫ a%KGjyW}WKz[ ߝTKoS̿o$_,-o_7\V|2. - "~GTَAWB>cч$~"L?$#*Uw.ɿ?x/\*o"%~"q/!D?NI)K3~m, ﹎K *Fy||!"~>Uxϴ$}@ K…JBϾEBߖ !*B/Kt/\'*O(bl.~@1ٟnFgΗ NjH/%<{;^J,ė;,I!}S _ET>S//N߈+1:gOW:g·*B̿O(b~0>ZB?")}pT䑰jG"O ._3!쏳?e?j|+_dWIx&Pǯ#}ؿwGǼ?=2/YE.'PgF@\=ZB}7?/.]?u:~G,[GETޠ__"җ#+I1y-R<y:Bη7(u K" /%%"}%D] ZDdOyʧ"~?]7YE|!eYiGWMDrN3o"a%Z.<{MdsW𰿚??x ٬u}YO򙊴Z)rEWMZI4dчC㌘SR~W'M|B7ZB#E?xMx}sc*[H Їcy}sL[ϐAYBwOcs !o~) ?S,pE*7H3Izvt>y:S?Iz Iϳÿg_?ϒl'l}lKG"p=*{VQ_兒#xsXKU>K$Ƣ/%~!Ƈ+$+I,qz~w=&Io꛾;*.O&D_=ʷ ||W9N V+?"6k?u Hc/$/R\N ҏ#JqERҧ,Uq;&'  7oR;oJ_孄/U\I#{*_E ЇZ ? ~!_I"~~B|c/! 嗪A>? Մ(oǽܿ7~gH/COMy|맿 K ~"09|H3 Olj,!|a~[/xEǩP'=i~6o4")ja?J/1}J'xq [*_HH?_7:D/$kԜXIz^ &~\DʯT~q>)O#N#~"wTdR$i*>꧔2Ÿ؊ BE':ۢ$D|g?Qag[Oå뷊O"~gw}7G֩WhE?SqٯԨrB -HlBIR~n?m*RbƎYDXx_B,|o}7WƃJTh~>$>N-DW[j+գWe'iVt&>@7_G5b᡿ V[.]a/&D 0;_Bem?YKF|7}[֒.>ʿWKF+ Q>3F5į"f 8rN(}?hɿCTՄIfo-_kc,džYBh,܀C /\j}FkGwg(baƷ$Ԣ7_'Hz 1?>Nҋ-x+ѿ@|"'>Ot)b$DL|"O!x'\Y*o$Dz*M>Mm*o%D|==@F|%Bķ)#fm\Wgy#?7%aXc̿TߜIM!Dz|<_j ݿRB_#$-sSZISy!NIoÿ?K^U}%ĿE˷NyCǗwJEE|"֯~-*$DGҟ-^(bd}o~ү&D5wI%cG!^LT*o&D,@O [}$g86O|!,ķ+sjϫ Eƅ,7#x/\k*D@fŝ>_e"D|)@v5݄uK&"D|oon83_G\B/G|b%P Q?{>! 7#I?u_ߦF+ψoWj~x D"@7T?`]O@?go~g;Hg~t&KI|\cﻩ@_oK4?.v(b~3">It"7)VŢ'.PBBX͊4^bx Əӧ0vXׁ$:b/TɸNl 7c$BW&}&&s@xVLJY*/!D?U/IZT'"I,h -Qy!K,fW%bˉ" d.mVy"M%Ry=!G}BԏYckTHh웼WK¢koRyJlE׆KREꯅ(,}Z-JM}B"c%T EvH:dG;/Sp*">d֢W@HZ卄7)r|s|\C-"DZK2HJ߀G+վA:?%I|lԧ?$=Ţ/Stʫ?%=ɢ_8HR_K9!1?'oP6|Twc>d)bGJ?.Ɨ3"<ةr>x\*&Ȓ?o^J$_+$Js|>ut{ר|>!$}Ȣ!~"Ty !V;,' Q?>@@REoV&D%@j)3\*_Cr$N*Swx.>o&E^Oy%~,GLgyowSy{U>>"?Y&D}&@?kɟǟ/P* aW)eI_U\E">>*XI-bῥ[Nw%YcO"Co}Rk#L'ϔߣros>+|O'D|F*A[ė*bgIЇ?_Y_U%~ITABa;H}%+W/9 ?Pۿ(B|cOϧEPۿ(FB=_**"P맨"t 7&E:-H|x_|LCE.Q"B} ?꧅PۿhXr0HCt">f?]g&>$Ϣ* D$~6!⣌JB,u\$> nWGlQN(_7Zy*0R$cU2>g%xԟiz~e*j~=3 &Q>7?[|pihIꯜc1!ZڇOK'^Ry%xwhdBo*o>Hק{{qk{gSb#$w4E;n^u5qӚ;ܱc[T>u|@'>vזn9رrT#ՉjUٱkr\s%5~;nٱ3mS@L2Bxdeغ}M;m OeצMe(MHׯͮq0ʳn7ڳx-6r%RQCv̯_iǚGoS Eo&b,C`M\`i3Qo=MС΍ʈ݀x3_!]:f#Pظ E[vb!;W^16KW:_*nTkv~ܲ:~íXQF>{y;{ԷZ|hOy /̍f;~ƶ|!Xݪ#aӁ-A+}Kw}~jmuz@gpHC ML/V8qxP|wwP@|shO_`ddWO7*93_{s/{j}9H5:Q75CwBAEb{Aq*%IAoa@XPߧ ]ɡdaC97>"y4Ǻz:{gQT?84}?0zd˟߸xlC~Io0j{P4؝<)0-t#zea˖eZNYYDOgyDf#E?r M.TuP!J;`Hfp;Gb'!۩VXOVzuz_=8l?q3j5}ou!膇C~Y,5r[+ qy@,ˑzU9"ɾ~Yz>  bs.ln ۼq낊RzdQ+m&TO`ND]˯{X+z &(IK ,©a˲$St]j* \eZA^G-6VCHƊtwt?ޏKqmOֈ\}L~R:Yh$5bKn'7HdEUV3MnM^v`<їs^ }\vt% ݣsUw`AswXf)90_(!k ZŤGSn<3=^/{]&'t%e <بgRUe.Xdh 82G,>pK y6`lGuY2"uB7mVVgy=R>_ =M O&zy oTqQ^gDo`l0~8)1е4>=t"e0e#H >V" od`yxn47}}PƱdoW, oYD onIY i8'9=m [j1G˱ Z\j5%> ]6xi11Zۑ|T#ٳ;vtǓzsGCG;vo{U{:jɞ&^]':}Gdl;&OӗR7yBr<=t[2m'MUВ+_Ƽ\${FQAt9B7fs)]L-3,I?ǂlӢ|&1i+N[$-Z{#Xr/'|4~qdhstg̞g>}r6T>9c[ /'r?!ܘqG;V|s.==l20o{WC0?G6yM 8厮#fn` "m ]hm d'jŧNw)kIlNͷϋJ>rPJhW7w < bFIl:elG.h*-tJŌ0|v|Ԏp(.vڔ<{Q!]2??|y-k-~ `t<90ؽ,ia7e|088yXDZ],VE #݇=οO0|Ƚng\~&l>c~("_gs_]'3xj} ƹ^V u}H?})A7NFI8/9I[,yz Y@.þK8Wp6LǤ'8/ᗭ''uɚ\KθiPo'g6Vm55q<kySck.muzY8&-[~cX3^ ֞E79%y&Um!>2渿7I'nYOz#]otEߗjp2gK]YVg<t x3PAm46dz^og;?"'|ZhY9ʙvJL6nS1iO!C.QΤݿCu1v7g(ZՙAi%} 6s -S+\t["%6RJXJV/5Y*>&mzcϣ3Yy:rtLY9,2+*|m$H*8*N<weZMz(jZjZ H,"%lN-lf`j^׏IX!G ݆kX:ou8ÍIcmY:?7>slJ+LeOqw9ǧFKƂIsٕ\6-O#SW M7|{~Vyi j$#F悾J?pnȽQH]>d=|ZwSYzb+;IQg߭:WܾW 񫕲&F7L^ւg(%M~UB%ešBn/<㳗za,mǠ84VYv5#1Ѩ#__3 m֯_dpI0~.xߙ3gȔjAj4d%Lo1O%n,3z${ Dbސ"ϵes8WP!Wɾzp½Lx}XO']}||dQoN@ba~@"ѴXԠ6b4w-Pw_@Hwaɶ9]r(Q7R_o$ZS"L5OՓ5W'GT%5rScX2)=٢ g˲9D@맮,{ɡZw1qr/9(6^__/W[mKu$N'R/IYT vMq')k>apmt4D0;p{E_f7eb,7`dHHT*LHp[`lMUdF`20Fy mI x Kds_&ޤOlMtzLm^#"0J FݫZn7#Pʒctk Ȱgrٗz9d"-תҒb{$/_?YgJ\|ochtB;;p.WD֕4>0]CSb{NS&SWO]?;&Fv9( Y;.&PoP^CyYފ.kʺߘK^ʺ4yc' ݲ2jO<a `9MZMsL~kuٜ} =ӳu3 .5:{-YEuQՋW띭][ܩ7 YT&&㩁QPHEZ3eyIwa!K8SN^Oq_ԋ}`Po3pK{Q[rL)>WAs|߬:s ^^TOZ͌1Ω}RLFڲt{8VSm/:MAY]L琮~BMSD;*;J1r»8k*wi2ɽ+B\_P G{SC;,0g7txL6XiW#S[zwԗlAӇ57:׵6|Hysbr[(K)zSdN"s75Ɠdڵ"\J[0ͽ`6܆3ib{R7-[r^SF~N8K77|smj[>+ڴ9޿Yk}wo&NS8ٟxwHnm軮d_捔qco&y89bV>ɸ\۶X'}(琓qׇ3fQ=PݮO2/(ЅzGnLbX(NT@ B;+-fW7_xꛧ"_CDE r}^=dY_LL ?CqQ- ʽۇnZDN!tƿA.!~R[E. Ї8oH^*JJ?;M!/-ÿė*VSL Bf>?WVBcߌ-?R%WQ-%G3r}_F%>XCc.mP\BO,y ȿF _-o~E? >[H| jfk'D/ ЇW)&T4@,[C ]OL &B}L^Tcyâ߬o~oȗ|a#Ⱦy|}6Ko!ߩ|O}DKBy/$DtĢ!Yq)՟yQd<6եՄh}ﲔ5C:_|-!߫YK !_?{=˕7O" EhAg}*!+ jB"Fq?:BÛuʍ7(WMnhI!f%o#O ~"%=Y _O ЇO&~-aȭV|zt㭿g&6:ދ~XmR I;Ky >㽄ӳE<7ܛ5;@op's$=O \I/#J}8 h;ay}b*RBK_xr ;w[PWJz};__Mvūȿ%~/!{-1lÛNIuzg}o7^y/|૜#M蟦)*WwIzE E?GT Dc}%Os 1~}P.%#*x?Â,#ė)jRG%ݭBR>M\ERq ߟ ~BIRy3!?Zߧ_+3*o%OKE?CEL}VUN\>ޒ;_$e;1>}M7TX7BqWfB}ؿߒfCBm82}"D|~(*#IXO'~jS?@kQRүUIU>|?@EsoƇnBOʛ3ʹh߿_K;Hz?B0O*O_ꇑ/ vܳn? ET7~,v? |1_(DotX'c:MT&Y'=Po#TRega/#D[ڇ'D/_NZ/Ϳot}r.rjt_4K u}5KȬ/tMHjY*H뛐9آf_H UPW\">W?Wv}¾C,?zEbwJ3FS K>2\|̈́:jo!5@|+F*jJO3'(Kq/5>/R ǧZ2^dчeė)baF| >[C|b+ٗfhʗ¾ C:*"LɞB_g韴0\_CWb^~#D _G57Xx'\y*'u$ <~X/$rZs,7+جqnVbBM3K~5x~@|;!OtW-<{2"Dbɟo%~Z*Ӊ_GFō3$=#g&BgYڟ ̈́%YyN }ep%.bR}S,pK'|6߯Z ת>WmC_#Lz_-ODC ~*!Ow7-%{dR}BA)ƕ7{9Nnb| Bo&&~6!s17 Ź BHS'/T\D!%~l'~!@x"'~" -Iq2u[ҟ,[NK`O儰=I_8_U^E?s>j=?%D8@b.?#_Xg 㽉Ѡoot>*鷒~xo"}YZ[*_Nh3gO&~lISB_%ˢFFB9~ޥD#@Q6-&~+3J$lU E:? G$mkF7͗)9T>GݗjE?~bˈG…7|x<:'_O{x"t2,E*o%DJlч#*_J$@/OpBrBT Qӈ_E.Uy!K/v5Dʼn_@ʉov1,cv~ _S?d8A|!!~"GFWBv[-}WKbE߆_NoWi_)kZCh3u(iE5Vqٟoѧ3åHR?4~.]d$ꯍzB2|)u~h 5kxEWZ9>V-(KɾYxQW#uHF7g֬SM oS&xou-_ .IpܹD߫$U9Ͽ{$٢_Ւ|}_>y2⑿p7|!Ɵ$ZyMJTy+!?$Ǣ;_BtXK ؒ?w1/'D#G*B_* Dʗj  7+{Ri/#ig:x&Bw y}'xIϴÿ'X'=vE,V!IOÿ[_S-<>HtKLMhg)_ D=zBoT^fB^dч/ ~!Т"ܳ쿎Ƨ2F߬2Ψ>xC_{.u~ '>>I3I.qn8c:w~׿[JW:O?Swqwl!O_X}zB7*rķB ķ*$/Ahx)GįQ9ZxWI=!׈H7)>>&T>SQ֟;NE}"1mU D~yT%= }Q? #{5J~"g*SI~F|/cIRy"/$J B/%=hG"FZoU@W>FE|?~~pG>>4΅`_F$">d)r+ BR+HAj߸?KZyzʧjGtEįOD0Q,B-_$4_N+%Rߤ*/SMYmG/WD1Oз'(Gd"s4w#"ZGzF*Œ.Uy!})^*'4 7X?/4U Q>r>J| jiHP>Ӊȿķ4|=!IM>7o%}YE0gn#}؟Cv]NzI"5U<#'"*?Jjo%} =(6"sB~37"8;1>sdQ%@rF/ Co|u5c[ /"W(q<>Wmƞ ė)SI_lQlEl֢_Կv)b}n ?q%U#"T[[;%VB߮}俛6Bؗ>٧eϫaU} /\j2Oy8_7wK:bDMO!D>FyC_?n㺿sg0htBQ>Coчė*b}fIT>wRs-b?-FWc%jч篦~nt 7-W\L I*o%D?1@d)[ߦo#3_ߞ)Y=[c=??_=I?"/[%?UQoLߋ%<۩$HzEx |e^ZE]懗H9#"wJB>HA?">4z񑊟HㄈJErTK_Ї/Z?@W|M7$d7%=`ч+1VlB߷$Ƣ&hQ{*"}8`3?r#P/,#ÑK?O ._3!R~ci|'3 O*/%GYaOTgIUyI_/WD|߈&("~L!*%D?iMkX[7\H N0y$į/ш(OE?l&?D+q<'nb~ !//+u _뗅gN"P痨؊o=#J뛨Ȣgh}Jt{A?*P,BNܢ >H뛨%gfjFg~%Z.Py% "V~%Wj!~:7uXr|7)&:WRQ>%-|/&DIG9~<@qBďhE/ \ǦToЇEߪkqgSi.|67Q}_A|\7vIT>RN>"p|wHZm᡿u]C<&NGYi}(i7fK1\|̈́촴?5L*!Wy;ߧB~c^>CbK,Q9#稤CTŸc$Iÿ^+qo瘤~!D~%?T*B$>xg*u3@/7HzE$A쟒X'xZ-Xb|Lbao&8ܿhB??U{}ߣIz3UߜYM"D|x AtE%=,/S;^|K* 49;-0񕄈3OdoBX?-[EE'5~bp54E:$vK &Jܢ. ~,U^NH$>_LlBm%.п+ u]f'Y'\lʫ1-!:faO3}*׾s}w Ťc[,'>N;&mrB1鋱M}؟M|"=UYa"cb+Vy%a:BQg_GȿF'ɚ6F Q?o% b|YH|!O=їu~L|uXQ/Wl_cKU_c+-U_|A_-wʷWQY;-K&~5pY[t1{BcfTx_u*_d?!vkT>C39E!L1NqP儘H:iчW_K|"'>$u|"GO:EǺ$ Uy#!ai;"G孄ȿJKw6Nz;NJ]O|"f4h sbH%>?oSѿnRq/\j^ױ_J$#ݕE]I2Bϓ%=âB,k+v|?!4Koy|y|"/ϑu>?2Ez5AEL@ -<_HՄ_/"F勒^:B2I#__!U*o&D2@_eɟ.~2VEOVTS{-uķ+sj7 Eƅ{7o$x/\*DLfŝ>o6"D5@vN݄.K&R]E~%YUd]_MaIUaBG$}Ѣ>Jc? )SMq!  =)HII&B!}?gߛI~BKe~`:lR~q'vo|!ל?ߢ">Hwž-*M}'@kɟ'bUEOf E~FNjߤ[S??&>A<.k/$DfEL/T} T?%?flBǺqKd~7篂E㈯!4+O\B-_kI5.$PEK[3HdPtKQˈHInҖE3,h)ėjEЫ DKa% WTJBQQ)U!7"Sy"M%֊P/>@1>Vy#.hEgߤo~J> o!ڧRE_CBUy>S-|-H[iX$uY4_3iX$uVnG/SY[aB/uQX卄%}_L|"GEc R>ne]ϜAN!Cy;xء IZK ?2u=O"IT>CG֋E}2E<a|fʫ?2_%-jŹd*GRE-ZBԏg.b~oPp{$]ń|titKڟN/SGS߇G\QXxR*7SB%h~*踤"NYqE^ga%.]JB?M|b3c*'e/[2>:&_k=^ Qb>?$=I-DI[aI/&DJREO &Dϰ*_CrįU=!~/\*L#~5d/ Oy%~-˨L* jISy !y*E}|,ySU>}%D$7_xovUmcGo'VW[C;-?_&~*! **A5Iÿ_)7$ݧy(7a>אoKwaįS<@/*?H?Ї*)?sbY>>+mk@kk|1;"~O|"?Vy%!!4fU?P뢿J 7'G WtF Qo&OIR"B}/ O ~otS4?P㣸^|Ԧ B&(@|%_D|BIf=kj_(Xk7KO*t?O'~&!C^FbɫxEge}:6\ڿ8!;N|E^,T}WE_mѯ!LjZڗWåg!ꯞZBXQdO s2Pw-ʣ_~_#L//~6/"}T>dW=,qVƋԏ:s{a%ߑ.ڱw󪭛֬ypآhz=t\uNT[T&ʎ]+;vn?رuˎi;o֖>dj ɖ]6e=4̷.#7B<~l[ٱqk`bˎWAB%Ӈt]n`.l߲ks5Yx͕g?~7#빙6,3,m<۝}^ˑr >(|u6HHtVrLz#|Tmo#Ƣv*R]~nmM[nӕAcW\o}JPwLcxm=|ȳ?mj~zNR|>>[93: 9Jݹ Uyf<{ezl , 3ڒ ? ۇCp˶"`M G԰y ]/Ƈ]Pc95y|Teͨ*8[7o^eg^Mm7 ~ YpoQv4 G7tGb |tllnF?_kn=e[.PonGBLck`* ?SI{0VW{{:^biŎǏ www7';uO oOv${㫒=':z{+`֗Sqoϡi^+Eq#P3:tx_-T *wm^RћLk|t&O$uu }ЕJ6tszȱduPY"y4?}'utVe'wuj`G(>?6=2ga m[S~i$75 \(NtU1nj = k/,!:>9X,94s8Y1lK'3,Xϐ_#ƒ&ܾk? 7=eȬels~V+DOM0Qd_W=ZxjF1#iDdWk÷OX2GjH:xnhQcԛF޻CYC|gduEKFUZ Zoof ;z19w$WLuu $Y#AH"逨oiη9Wo@~1p/{j Y=}Bg|i^=tV9+ׅ֞&[=M#.=^s9Mggrrh/֨Y/Z2kʞZan?e9R__8e#ɾ~YgIG bsnzln ;z *KS;ai{7zzuLuy@o87G=\z]%Z^dfuCILgcT5*s26|G@p0/&xdA}$̣z:ǥʸ6{Y},#'tNNuV,b@zݥ]zLVgtFm á,.CNAɫvE,kσ㹪;pUNƅ% \ >Az/=nNP/N-czz{z?ީɣ=Gih̿kz*QNa;˸]@p$e,Y|P6?쑍[`;ڣ dD<*W'or۬*U&%D={<1|4?v!+$*?,> keAMcAnq7iQY~Ss>4}@-ڕ[~-gbJEc\ ?2Yx7[Osްg""gl5%]Ng?88[#:hrpgc|EǞv"_FFv/j~(Ȇ>AɡsuOG ,6\d0 -LjnO=_|Nٜt\o|40?CS*vLSܽ y  LgPv1`wmĠY\koJ͝צ6A;8T!{"9-VN͵pʒ?x^T2~h?w+zRVP=Vx_R6z'3ԮMO'9+㛻wFI9ԇHv2[GF)h0ҍ3(58 ?s=shmJc?+9p:ŏ&wK!ɮxxuTwl%{{%PO^twOo ngǎvB=^7N¿tP{0P9(-g=5ةLЯ8!)W<즌:檳86*h||dg-tgo"D LJӉn?zp-]E8oU(+WjE@%z]_:RO_vr \xˍl94d:td&]v4jgxqa׋p'!N_BV"pYQ\¹[zDIz'IK_(\Yiid˴gܿ[ˑA-7'7Tq'>>?w-{3u1|;]2Ɗ?KKdiRR{ĭzFA TՋŒ6f_<&1l1|YpdoEٱ.>_fyє7B[k5QkofϷ;BL3&[rJF}(t4IgdW6hnu7FDכz^[W?_n'G.)w2)*+jZ0 7AG[;N)zY溙Lc!|ZhYȹ15p+=\6nS1iNH>},V#ugnZeQ̲LLfy>3^TڧLn19^ZeDX>1b궔qиKj$F0fqxϏLgtֱŋo^Ωff鸽~^ORyhkh.O׳ˬh.yp#]Yp4јu29@ujz^l^-|weZ]V 6u`KՒA^,uXVEe}dZEHƪ1pl⮉SpWi-\+廒V%sڱL|nV%z=oL"}qyd}<(B!tICzFA;!Z9)', n k)&\\ G1THJduWaj1jۇѽ֯c 3,OLAs>}afu33cHwQ-" :oz7|fZ^N/68nWXƠ.tͅgs[k8m=>xs*u1bjt1>7lI-lf'(|4_Ck|7AX!G ݆kX:9ÍIcmY:?7>slJ+LhOqw9'ӯK KfmN ro|v"J]Ln.9n?7Gߋ ڢZMc5FZ^#IsA_sC?7~(hƞrDtIf{`6u[5+.se8)l:{Yowf Zd-weZmWK̃vWV-j lqtTDxG4E0Onד{K6M3BL,"\DC5fp2gծ@:1L:X6t+14'H9r0A.8m|ָ@kZ_k4mtoY0 mV#j[+c~]n'|wXu@m8QYeoF[6*vuGm9zfDkxwϹ0cF)a)=#muFz_PՍj-z}VMj 1X97NxRm4_Y6C]9V+(ҳV*fxj5}י :-jFa?c;uW aC`9ފi$lϮhdteZݭV ^ *7huZ2{=n8^x ZΥ~ Y='VVʂ[jEzH>&-ɞv2|l񼔰q Vwj,Q1hK#hbZrʕ--CY~eao wzنr̳lKzZh'=Y(2’*==V%/jJg"{Xdy0KY<วNWvv9wl3jCc2[T<%]g”xs|XM3e#Z!BqD-"׋(:4S/8QwȗS6`Ga%Ȉ=idTі?^w̙d?aנtcS G$NjLt5/l0_̴QW+ҿo'R_ !^/Wųig73t]X L]J۲ACTIxcQ6^a^+n?(%~6nt?T8CvP&mwm/EoHvмkiO񪈃6ܟ2ѡͷd{oo$N?'$ԋkDb^̵es8lC/Qډec> uŃnyM!$MKkui+6r~7۟t@ש-D*-rXoiFNحh%RAJ&R?kzLJ_Si@CeKU,uͰԘ65_βkPSl&𮎒RzEesf݂2S'ktIq~L6^__/]%3S;5A~s&~S-Ϋ{@;E QNMYvW_M#1"-%&RF/v/WGT՟t'zgwOF`#J#η&8yHQYn^וJR}(rȳmli:"Ћ|ʪ}dnukrL-6+2_2La}MG?[UHkco8FjSe4ds[rZ;n*tS5+3+;ӽ2 zU@#z@ Τ7YT&&Ms7š HJn5+5oT?0xB0a g)kN)ktDa^-qzuLOy{-6}K΂e .q {; ?V{ěgS=)c03 l;ʹke)8+SSomNAY]L琮~ZS{X؝{R%Θy|9m5Jjs2I3vlΜ6o2 <2ݤz*7ؓ7uP;O ־Ւ픻AϚs&dmΩ}ʧ^8euܕfmjjx'Y'?ٗyp8|'!#W?nsqdWSoۺc!}QϡSNp߯du6:okLB=í8d_>ND *Sj76i"KU2/&~Z&mqP\|T˂r_Z^oa'}k/bg¿K8V¿$#N_ S T}iy">Dϖ[ KQL嵄~٦ek/~+:GjS/#DUW3iQ',.o&ķ?S *_LC~}@| jF֮n'D7|W)&.^Ca+}ޙ6o%D|. Ї6Km%~6B߮iWD_CB֩|!!ߔiE#Yqz}ȗ|a#x]*I,=>^;O?Mh/ DTBB$͊K]*o#D:ad<֣Մ4@{_7$| !X>YLJ}9? |!f-{>x,S ?7?]\yMUy!fg}[$#O O$Fq?:BÛuSoP[%=£}J ӈoV\BF|!{!76N~4};T^8SyxYr} $76kP\'}x^D,⑿x"_B|s_**_LIzEVB+$ޝD2@_e -%D/+_^G_^OzŭT7Hz}DvR{+{ ۈxto A >$~70>0_"A!*KGT>K1F}+?QIw0)$}Z3{__Eu?$l(İINBB !@7D|DBYjnvjkwWmmnw[vU9ߙw'yy$w9{]dׇX}`AA)_l|O}*+e|׈ D|~|Co|!J߷\GW;"o"oK>fAJFBm_S>MZ_?P"o'C0o&GY7S-_?3گۿ$[ B/!D>L|!O*=bAWj8g+ cU""i<"&<5XJjB??G$Uq_Ik)Bԏ~`K(ߓa$}5ZB@^﹯w} ߺ PG_fx䯸lWJ9k)~<3EP7pL_eg{7g~se>fjc>8rE ePkZc9_H뇀Z | ́}AZ?k@ȋe 䪴ʠyį,!Z=v奄Q}_F| wxȫ _>_hȿb*_ !o VFXiJ_KWo-2%>ϲܯ"q|*"_$G H| m/&"~Z.a>7_$w>ė}_)HZE^M64`Ї֑} ly=!쫵h2>o"~ KZ |-!{>o!귋 ߭ķ n"U.vBYtAm'~3!WJ; !oJ R/ DETkࡿ/$DS."veԿvB"cs7L|1!oRBJWx+D^F(ė uL+E^MJ/3#+^\#Մ}a{k Q%Pz"o&D?O <|7/ ~ tn"~!"7 n!Lڟ5W'!rC|+?/ BįX|F׉Z>`Ї#~̿~JoB >F QBJo76M߻LM|`'k{I>CQ9wXGW\+.>ϬejzSx\>gx|>ߦOomϳܯI99}9_5: e]Woq'D|{R~'Bmu/"? ~`XxC 5<j}}m#?!~9!J| 9ń񥂕+WBW "%ol ?Np?L|;!DN3]B|7鯊_GYVpb?;q}Ǐj}?UA߲˩u>Gp)A)+.ȗY񅄘?PKE' O_L(vUG]i"_$H#JY}_:|oDP_Z(iЇić5g|GP[3 ?dA՜_ ėJ|tIP#xI?~gI|,o.SsV0[h?un0Ϡ/\Bd%"|9>ĐxDu/%~ ]>CE^L+`A/'WsxH䥄(>o92eXe xWr)Hg b|WsipÖ=Gͥ>_MRAzlQsnC`_3 ZH_P]˄*DE@<^ԟ[U(EWk>HwC+&AqE^*_8sPBv_D6⧁x|-OݗddGGTfB^ ȿ-h}*y!' wG$ *kԸ-U\y}vD{ rs~4*e?Ê&@sG %bBėm(er}Wt">чk s|._K{>MQDB_o>GU#_E^B|?6>TG\%F_JBwU|Jy-!5*à^Kjuį%'I7uA7OoT-}&77P?<~꿃‡}Ö;>{ {J:B>}2Ba+ɿ1}?ҝ}1W wO_'Zϊ}YrH]#^f~C2}|}t૊ƥ7냯M/7~A}A^|K| '@&>x䯸rb|.%#W*= :BC~fЇ_OJ| !>!Qѿ~NZB߯o"D(oT[C>Kj"_#?g7¿G|ߟױ_,H#=FJAW"}OkאHE:AܟoBQI>{Vv_>_=Im&DyP?МS[CAK.➏ e_G(FAԯ榫4Sk }?Sf_J"\O QWJgЇ_Cs s[EP]+W _-L93X >_,|WDDh%~Cy>3{BY?97P/by/s/2 |P~+c\BZxwz?~k<—Ԋ{ME/I}{ȗ@rAďė|mW&k N|`3o!P[qZ <꿋 ?Pǡm**u)ףN/[;T:`Ї;-҅VVc[gs Rik# vJ{Eчg>}? _.F7<wx S4 \BViĠסA.2B}ؿܐ??ќS儰?J| ߴGU:.AOSF>?ND?#~Fw>Mq_P^_@>0郿BB+WF<ߠ &EؿϷTÿI'C{ Fx~eSY?_ϚP|1!ү ^rWŠ/ ?(Ab};}?/=x"A_I?/#?/_bv;k@?_-j~\:4/so_(P -ҟfG7+&|aɐ?ӜS ڷJ_a7⟞?ҜӿZ Cc%w}"1/N bF7Zqw]%"_$Hw1*>_B< =*EDKRa?B|!^qn}*y T>iQK;m??ť  t֧!".G'}T?A2}6D|3\ "s=~4j(o" C|%'WI%Zq]_MTzL4KPzJ7<n1ÿ_"x\P|7!&}!"k^#//WV/*}ߠ#Wt QR}ؿeX?}J1 "A?ڿ7&7>et.*U5h[ ͥ}R䵄ھ^u؟{J:B]*iG&Ic{T]?V{oB&⑿>"B~;wP|@|'!}AHG~#<ҿ|B' $BAOz~ b~, F}>]"OJ2ÿ? xrn(Aˍ{?"8D}#ť}MÄ^GJjB}} }_nkH[~B~|-0?0}o=ҏEaЇUȗ|?чIqi2AOz%xvLc+y`﯉_HOT?Y?4Pׇ:4-"oo' <}}M:=%<}jBӧgt %~g_D:/}+Q3/,#ėJE|8~J;ڤ4tUgEE#~te3zaB諼~YJ+"#DBC4i.L:G9/' @GE:.#Dh}G|9!GD^A7)NPA_)(on}Z_ko!ڧPU_LWKRj?T]uNYt}Ɲj/t5פ7#js9>T]׊ʒdЇZ jE^APu`Їz+9>9>ȿUhFC zi?=d*<<7J|li$}ل*]ffY?Z+K9~Q>">GP?gJDӭRA_ H]"/&a%u-~3t?G'\P~J|5!o>_l(ojΩ:BؿPg>*d" h4\#fg/'~ ]ߤk+o&]]K_iЇ#ć&}T"_JG9'_.XH6zWJuF>*:JBsUzA'JpJy-!ߠ |W~^ E^G>쿐5r/_-"@Go1i.V8I9mxGWKM䝄J/&"xؿ7!Նu%/oi,OyBY?_|;w#*nЇ$>,ϻTzȗ1T|B?yC| ?T}!K~UV#1gGVDUgE_?࡯#W^᷊\#[_;}؟* _S"_DJ3ÿo-?"/&D_*JEFчIJ?B>qS~.+ ag>s|1J̈́чfGu !ݖ:~DBB#g _I<bQ~J| ???E^.X!|Xq'RA|!_ȫ Qlj!/#U(߿}/$}OR2kA F|Bt ZN|d 2EG(1Ӊ'˘ArBY*)B3PҠ9BA1[9"/%DRؠs/#gv)'c9*ea.?Ϡ_A_%WƹWzXRXՄ_LFkQ>5f_6b~=kQ%~FBb9c|:a7}ќ_+!O!>i~֜m7j^]'dF_Iw![i_XZx}l \ }²#@;i,-DFυvȯYm;4oQZؑ!9gmgWˎ]{Z;*(,0c65g=-[zv8vJN;)ѐu<>&SSHcyOs=[SSB)(t8Q'[w6w$NkgGG\}Jd2TpGws˖捭0ճgc++}pj<(w{r;vjSI1v\m5YuۤU&!|v{I)q쒂zqAD@Vē'61v:.w 'P)~R\*cI̦<>]zV.:T,Φt(Kj05OՐr5%ix 9 Z$?(H-lOz$IU~KSr2ߩv ؃ƄxObԬ\Yں/it  wc~K)J}~Q˳')OÅ3t>R&k|2 tw\t˳}fL Qv:uɚO["Ohd:,mI]i-[;;[v$sjj+a* ޸aӤmOKI5$/,N\t $>N)zxu'OӾ"NJKב]S24wmpΝĜ9tl"ϓQgy{ƷZ)1t:\ޟ.S^0^?㵓gtR]2lbL'w|go?T, qCGF6AI^#C##CHphpKdx8|~<(xLO;:5>#Pth@뫙6rHԫ+ÜC}z##}"ω7ÙG"Cёа7"#w =TM/ I޻yC}Mi ±*gJkpz];%SiytW1~Wx 黆~.d G#C:y5ߢru"6GiIqB}=)FuFdpddjc1)U)9M1FN F McVon~n{_Foc~B+GQ&2;֌ <$DAU ]Έ.p4N'v@K@% =9.%J6X#d 3):xiagrlhXQ678;Ӆq`~U*I0IR=Wcht q pkmp_¸EMدB۝p؄LSNn2!`k(XYt!Ɠ\+.;`:﹉ #^\%ɭ {e鱅y™+4>NXČ&Xyf xOnj-gّ9q%nc랓̀&]9Pͨ&9?cn;ɏ5wYOb s{㮿ܥyGT]:F_.[dkDI;4|aAِK E wz/`n{Ǹ?a5ˎڻBެLôc"a=1cK]aKgL>gcSvd(7X7` D0|ޘNB׋ :\ }ѷOqkô?oMe"R5o.t_xThdwv-"go}}#}w3ejB?-{):"w@uf&+ %jѡh8Ha}`t 1N?:8.pfI!_&Fɭv5]6\SsbC>A"##w̌c:Cp/2&pTkK?g&k (ӎŞϺ~tW]D.MOJNz'e(Lc\gm;#n-{W#+o{d__?>27naxXp_#j/|58:(On?>C+`:Yr[Ns:? ?]w9>8/D?N~GӽlާM.{jv<5k0l G7赮e=erj;xבDdЂ uPtkz>s> Wpy`}NP37VL+4];f<i^脕xX)SpqK"Ͱe)Z+V4fq;Q޳9A9}>M4'枰/:gNLsED yȍ` ^CZ>S Pt~=W,uD2i+[z,l ZL9~$@FiG{<o,SIDOGl6{q6=609f3䛮AdZXSB\]5ff cU{%V)[=K,m_N<˖MAc\,7'<.D{0dwN8mUk=ƍ.ERX[;nY)|\.KKT~/]h%;xUV;L}\9"S39Ht\lEWqw%5O.ysTS=V­;;\,q "ϝ3dT xwk!{3_ZV<&xb?gnTurZ=|3Ŏgi\aI[KmY+̋2MK1Wڃ-[wiʑ]&qe)[-KkF~lB,iUb" ,]%)BR/nǹ-ʞ^$VZkBi?ڃMʔcJڲ{b`-K*z+*ƖhEhb)?rOJQ0N ؗtSP>1ɭo+㙦s y2=akD+WcrWYlYVŊMrI~7NIdb,w}v2*0ˊ 1Tr!a!K-j\cK[U~6ELZTbo1Θl[#7 } ĘO= }ByW |IETBqmY!"-oJe3oC<[cF6a6X]gѪqR$4^+璉6%=g̽Q=uu-(-q6Ys¦) Оgf .ngu}JZǥd\4y(>W轜8Oc>=y*f7<˼0̫1ұ|:7t}zv>| x<q|L#méqo&Rop)!C w̝\s{7oL@5(rLUV8E4 ' =Ϡ gs9="Nmg51Ž ؝MGᑒpYY j\UGdxaF cV*1(|u}`dCRƜzB]vTV%PQ& ?ef7 @3iUw:te15 X?2Hݠ6MS;K42u{Ib|(.H/l0=SxDIX8FtK󀳖gC pÝOݥб?{kO͙ϑ]opׯjMh;j˶ՓI:3|tl5 wHpόh5<[s&AbЇ ̊<(b7%~A<[HpiRۃ%v,ზ,,¿9/\FMv¿s|\Cu_ |}HyBDooقT~-y!!ʿGs_!XG.y=<}_j(_=˩,iX9>}J QES!>/'X U_KVZ_ijBZgЇ 6Q֐^3!>zn%DFY o#!o>]'] JBO+Uh&W}/=}Fv~:S|}a MȾ~[h>m(_;=T 3}2}z}a|ܿPA+~C2jFB_xC<!~>!r Gmy!wZ_h|B?JrB%Lj/,&+/%Լ^\E|Ju]_5s W¿k֓@KZAYznB| ķ캱^`鯆ƿ_5G e;soE*,%au/'* aAzJ"_A;W?H+&#)&}~r߀?z!BPbk#~T j_GG~?f~\F%qpJ0#[3ȗ LX_ Gˈ!+.3_A| ![/#J+QR"$=pJo6Wk"u*IPWsK ITBk Qo'~OwGKLiL}b*Bw;5UCM>4G$%J'SN|\ߝį\C}FBI O>>#|~!un[)Q"o#TA}d^>_": 1?|~U-"D~M@߷/#DO|`5*}W5}>.a{}(G??(B}4>>xͯ^^q[Ϲ:C!Y,oo&,A^?Q?| V O2}?_ 뇿C-|s$sܷxI q)xk X,2ÿs_-H`o>,]|?5G-~؊[?oC0W"o#/2>[JFAZ? ~М_'_"-"D>G+#WN| J\)Bԟ`A$~!W9~ɿZBF%R%_K_'S}%(Bam_LE儈>Bgo^~/T?[ nL-y"ϳ{TiࡿSJ@wط}j-MھҘMCw JB}%} \+ }}oW bJjB*=hG#N7|W"oN n">A|_q͂|i>+NBOG%~+!ߥ="&}a ۽ğOۗP*}E ÿ_GNGCxg+zo*}wHK|M**= B>O>iy#P%?^2-6xVb_#;ss"_*=Q' a b|w"RAoŠ{rA\?g|B1~ C0$Y_-[ ]CA k.{@4ᱮ3rBfYt뾑wU&+~o*Z7ՠGtZ8A%3TAx䯸WVW jSi ~}&◑>-T?kaPR5BrRkꐺƈIYtڡD<"_B}V]bG. >,u5yhȗ.C EEOwGR"#{T?x+.t q['eB}"_E;Hȿ/4~!_%}}_aqUG,~T:"0!gP+ 񹂻4,KQ!}6 WH*H+UZi5V>_M|XC׏^C>GK Qz}njNEs}azⱷA|nܵ/@[ #x@ Uzȫ 7 S9! _+_im*Fل^һ  ry:nЇ+7_@/DIf}?9~x-%}Ņny`wDޣ{ <쿗%~#Pǎ;Ǹ ]|&!?bů/_EPOMӊn}&r泊OBdzWJw| !R}nÂG/|)! >ECQ\"'p_QJ ?FB⡯wE^(o_,UVM;d."@# ?s>J?(>Cs)_yJ|>7*נoUȗ~ {TI9!?{GJEė *=&jB|a1C'7?ڟJ|=,B/'G/Oe~Z3?xӅǼ}:ϒzk*W^FkDTikO(i_((O??dYy!g3K-mbBR*o%mį\Ko"Լv *m1-FA&BY_u)s _JE@_mSy}lAZSKѾ;TzAwg}]TP«'H0_qi" _)H[u}n6KU+#*]fЇķ¿^7b~o%{eT6BwM|ll|  񝂻, JC"r}?D|R|&D~k+/ D"HOZk !+O</Dk/kUzȫ Qe}z?Wb~|u<11Kリ紷^x-·c; +n-흊B终_(n+ńJ5~K|`r}*_y&!>쿟|BTC_F|}Q儰1 ?w*>hsAIy6!Tנ>Mb%d3*}N乄hϪtA?GRBUC.'qֿP~n?ť}U1闈/"_V>Ui6< e%ߥ}S' -Ä[' 4?}Tzܠ'P~"/&>hUOH Z˽>JjB/# ᯈ'kQ;+گQuJoUAX;7Q^?Jaį'[Q?#[ʷJ`!q__7O柔gms:1xל3e Yl&+3T%EX-]B>">G0LPis e~L?S}؟M|'l扼XG*sG=A\KGUJJ$RյP|J|g#>ET?lYg gz3~N3/9"}!>6rC|2_(M$D*ɲ_*b_#O/#>P֏*b;%(X|TZ9u^oЇ/ }^Rw"V~!K57| /*ү7~9|n+o>ռ?Π-/IǯW[ <[I"A??E䥄_w6>B| ]"!Dw~!"%8:ASQ*3#7 al?O EQPƗ>[ȿ o"+.RuA"IG&_Js!G {;57'I/}_B2Q(!|?!_ 0[n t-7~?"8D!_qD>LrG>* Ѿ#>5Pא~B|-_g^}!ݟJJ7| !W?bЇ i/TE"_J/2_/e 7/U"/}ؿr Kȫ Q_#H׿T67^壏o#'^GXIxC_qsW\GȻz}70s eD<1~sޫAEm}9baAMWUs'E W|$D?M|9!3Wb}9l[*}_ń(|aė TaG>c7 GE~>!G.)1V!o|a!UGiDKk޹O#~!!1q}ǧ+>C?_NyBAE^.Xa G*.#$jBIk1=e:&_Eї>O-FX?C$>41_(G*5

P/,qJzcFvȘ+kA| >_,/(ퟱ@E"?Pm3Te>Aojӌg~TiЇu-+€aa?%gЧs "#Լo2t |)!uB(>[A2AQlЧUsńRCXо4?iΉBJK 5[q5,%*cPgkGFZ>__Mg>xe~TZ$-X.lsbbߙ蹰s5mǞ枞]"J;2$jѾkOKsTCҳs=rlFfؾekWNi'"&"y|Lg+Yx 4%I,lu掞D)0S9t+Oi5l] 8ޖXouۤU,!kgU__0^ <݉tI,%aᭁqKo4R_c&C502@$ə =S嚷]%^rKv/;䤄Ĕa)2-&'4ME)OکPA]{c=["0gƺ3hSTɚ"'љG b\ALp v:FO['5?%ghRjԬcx[s柬-go+R q {8C@@OڄG)TЀcFqR7)-gHNrxᓈ)}OjS(zv:;&i\'gNU)ZO0ekggk׎~NMm;LǞ|{OOfiL(Hv¼3I O˛YI)Nɚ&c E+NսӾ"<fJKŝ<̺4-&Hw&s=ҿN]{BaS)>ySo>>Cnnxv}"6ʑ9zh?F9=rdph$|^wdp(=799C=#C}[C#o`pt׷. cDd p uhс^^Ǽ^IH57\Fzzu2kE \>߷f`ccBi:!(Ɛf"ʸ"a7cBïXY=rfNkG2/$~owqP1k͙19|W˿ւ++k+&yg(z?қcVonD$}ht /ZI:ܗ0dQ3^݄GyՃ UP ?&`k` *|td+K gG:ΌMC{,ʼU=֨ ʜڀ~옋<+qFUJsñw5oLV {@6M8Mڡ+{M&Qcd00=5a%8{(*- /Nmcʼnq=3oX9L*LT;'*ItIM g0LwLM(2}jiGz֗0oN M|ޘN¥q0NS[9!}] ,ŏf~02M f~ovN9{WM.1R_#q%ӎUݾ?.`zȑ~߅oPӇDŽY%Tdo_H_t8&G,1$bNNq;øXȐ$ŏ,{U~Cc3D;Ge Y-aNw 5T]/ma& ՖU@2U۞oiVPlӎFԒFlc KgSsY7;ط&< w5?1G /?LxӋ[ۙB2Nh`TO)aY7F//ǃ %pN>NgpD]3(JbLiFj<"IJÃh)]U9L+‘}Jk +[ފɱV*`By LnMIj ?1+{p{iI7~n6Ts`ry2_8Cྡ\m[r-&\-#T2^Lk~/X/z6O3Μ\d29S[ /ɯ9gl0 ܦ6qbO)<90ʳ wFG_XYy="8'oy;i}z:Ra>2LbL|EIڥEbؾKb}>dxؒ1|tpP`dh_x6- GEK}-c}jx8 _׫#Ѿ}j5:9kR~4s C7]o*'yO0t5QB?bOΔ{3 zwbPN5<Ի_ὃG&"gS]֓Oǵtkk~23seOEhv̲ll +'ڱlA,EgYr%ϚU眠vĴ-'|3jDsi jjz:.:|Ps  {z5>Cjxe=Kp-e_W|glϓ5fp:fMOo"ݨY#Dcfy_4" b$&xѥ[%0~OugXvDߝr)3$0Y]JOtOŪŴ '-Zx&e^7p|"Q9*-Ε"_J7cf:BtI]r<&Wt.:bsu-KjX3j-˝QSjku 3>*9򎝜;?V|XXsD/o4N)E-F-qt/Xa\ edjWȉ8iyfz [n ['1yw2/64$ur}g3bL>Ll])|-Z]r-nS%Tn˦V[CldnZ[h33dc4URwyMUaK]JFk,gՕbivB[;L8=axYcIA5e]ir<~1&rR'7oc|l0k9>~MM'ܿ5ҜƖMA ɲi—NTjaIVYv?x_ WlV,ZS j$F J~ <1EE!ag֓[% 6ڲSl&ݘrYFkmYV,w7lYVĊFtTDe9)E8{|M1RI_MZO7:VM)V`-K&piJJ\oOznfx{6ybYq4fZ.$,RV˞5YVRR&<9i 1iYb172'ԶFn:~1#. ߸$k 9nI-[Lh]3Vbc6MM'W~o~ڴ,wURm:̻ұŽ;f tF%@;E;-{ָJWE1Y}`X~e_m⯼ϳesZN~r|_$1/7j;aJJvsgμ{΍{ygq/_Xw~98^Ly "/(/;tKChyHt_+}xt87GmW~?+"}<3NV{+Lw'e\ȅP9!S]u² !x߉'ɔ_?6?V8͖Iώc&}yG^/wQ~8r@ѽ+_Rl8Fl/;_7 cn %yp?ږŠD==߅ƖD wPzn:r%-,upA`#Ѥ?{խ9"Oć$ou\WC'+rriKGHe Zx$|$PBf-]ű7&B4 Pj.eCt{z5D8ejHvT6+ UK+٦ӯ 68u #;pm:>] rLTV8oKyVKOɧJMmyVI-SIB3hDND9;,5'ёpB/2TDU"g/FsU1Pmulph3 ;Scl9KGe偾lWP_d ["#j1wYn?.V%r튽qخE%pD Gƒ]jFUG+" .(kF6 ҽF/^[ikiuсCG◢yKVK߮n4нKtֽj/#s$~fd6zO)Δ 9ii;$8K gZv _qsn"CxPJ_} [r*Fx -/l>Mʂr`]F}7Kl 9k"~!CbBl[DчsY΍&)"~>!OB"oGW¿>ois+)Cć៮wKE>[J|`O| ![F|-![.~hjBW y_!u}&B }/&~`;/|}0 y~|BO_%Oj+ >uW}ߑ5"lA7_#(ӥ](Z}_Gzd_6| !ڧG7ʷT> I|!ڧ˲o#eH>[-{[۫@o&=oE- D~1!|}ؿPE/?#㫖_B_*^K`c}'DF_(+ܯLyh/%zl>H|>!#~9!_@~IRBar>s9W¿!kɿ(k[,7~P7"cķjTt5GՖ-"D|\C|Ţҏ{\'%au<>G :,Q?Uy@ 3P/Pn}FOu_ҋDH/IUUEEhUAo!~`//!K_I^+D^E^ W UW>* 'Qu"o!oUz7"~o6/F]x+y.+ &Pzky5O#sJ*AYUCuZ_P#}w(UH !Y#א>Q4 wZk'/9=~@ qisu׸PW_C<աTOy}w󏎿5"> 5y: R:otW¿o>Z:o]b|>TD#D-ķ n$~J|;![;ȿ ~A߿4_'⣋{H3ŞFu@|9!G+%bJ'u8נ!~5!YGE^GaQ-w~J|=!o>7/>/n%a'EM>?inל>@@٢8|#ėFsuhif|=!gAp3wL߁ P@eu>[k?`<{1K*y !/Q)jЇ{/%D/UiQ}kȿ(_Ie"D|2磏/#~ "o%Da6B/FB>_n##TlCkD>P޿}A!~徨 5I_q,-q@_FUyG%ܿwJ/AOa _7Iyf^"RB#_.H/'+l"nUU"o&ч"E{ [kשw¿ÿ7%qK[/m*Êu|J4ÿw_-H/3 Q?~>O}ė_!HWW|@ kȿ}FM߇U GTA}͂]>SNo%D\OaNwOw'ɿ>e(N,y#)>'D#Jx~KK*g%GG?W=w~Xb[-G}sDȊ{-?"~?+>O\O?!)|}sk IWķj^#k[ѿ|"vBoB+~T ?QEW둀}܊}ȗUA |Jy!>7C|*_9!P?8񕂵UzBuקQ  <ӧWrO3So&O(> mR?qT׺ o#>P~Qf$& M?{ȗg_ HTcy\3}a\C(~5?}2Pb1x`3?x_"r\#\N|B/̵'E/ QbKHjBJp-WD(O?矠2*o#D|UP柠a˽6'ZEE#~>?A?*4pȗ¾s-}A-M"/#Dч&CZ|儰P?J| ?*N柠jN> HOP՘nЇ7 v"Fчyn(?;~3 4.Rbg~v4`Ї_,n|!ƗK|a{U'2Bч}WP5_+H?T#H !琡$ڗ8$%~!{񅄈UAEۏTzAs+i+|>oisX&-KT>Cy aj}^F|!į D^A| !_I|!"B[?nSjү&!~ju"^OBUz|AAߛTzAFd-}zKs-( M+=/$^nnQO; vq*a9eq>A|fa>*-G BT>!~>!/ϩ }>OMB9&=[s3'RQI'2x打V&Tr=&T?~nd>Fw7liވZٳuG_Nnל2dMx V!.DfzdN*ψ@ӰliCOӠog6Ob٘~6c^<}gay2K7OF^GT^I>I.q^;FqJ'Dl(# r(q8 4AAS^Ǫ[i3J~e5Gs3K~ډbsl|#[rOg|ϣN(`y5O~^p>wcP~d5_^±_s?3mc^q$Lӡ :|K/{݌llc:!-1bVPK"CQ~a~?!v`Uxr[{%P9^K8'\8M|!=M0?%o3%Ju1ʄ}{92o`v|,a|Ӕnl8K 4cu™+ZE~+~-FYYzo4 g}7y3]SyYgF&'qKv1| [N8 5_z!yFAtָ~~ηC:1UWoč Po+%t]Bs-op>MԀ0:@FgI6ÊI~ch,};zglϓ5/0@ d`B{zMHL,nTR:OW{y'!f kرz,3lD )DHVl-ySC<m) '\?[g?zN3Bn$9-}}TZ`7:N:c )U7a7rgſ:r߮=/ew@3fl\+͠S҇WS SgD!q,/O}O^#dDNywۘĕޢ)ipG)xYJt81*\xPRv9[lz9bx y4V-{Q=L}wevVoP̴72.~JD?Mֿ s7G6݆_l8K7`aZb˞(7%)S؊4lzci=˝(E{q^KjoY#nlAyɯb2 0o^vb o ir֋_ko6c5wEh@z_r_H|2S,-;D ؗA'?Nb.H <?~/<~t5< x?~W>qwwyKWv9{(غ EЀ?9r$:1w5nƍ4it 騦~gs}=79!Pi3Cx)(S@P^JmzA.|𔡜7wxpy`H4~XQr\3zFU#*>=mDǙ{nATLuV:'N<)?!?3/ y4ÖgW7SO"|#[ޫjܾqZwЇmdFظy9P֏=*$NdΙE2v\Qe(HTУ>x24&jcs۫Б+qoaޡp邒0"VGܳ#yEo{b~~b5=R<\.RFﺖ/I2zԿg|Xe; u"Oӛ 9,^(Z!{('MY/i4[)_u"zƷʰ$,~UUT*obb>9BcGߵ/ 5w^kA8vYt؏Vo*j<~j?ݖl!Z=w[3z/V rLU8X͎e±#YjIھ4i߬cV9xZ.++sF*`uܪ{4XQQ>bg:Yes?3U+Zmҝ5#j'0K=r!LɐomsFd 6c?a.%:pN~Pђou)ohTvjO䘍UAj12nX;x=1sk3T\CxJAr$7~Kj#)bdXMtK$*aӯ&T%(El>M"9{%nrSO"T[|̍1O TG)c_yTksV+m ovŞ+]ӠN\? Q\o8rco{Cć޿T+Nۋ o)ł/BZB\ՄOޠ ķXP@Yįl#n}7~>W.M^~>#x)u]/!~=ɾ~: wĤ?@_ B`F+ "D:"jBį^>B| ݗ.&}mB>w_'Lղ)]чmo No%D|g(}K"ơEoViȷ"K|+}9vB+^# r| y*BOJD^M߹Ѡ_#@ׯҀ Q>?@:*3m> ?MNw|3!чwwJ׊!_ ?]׸_ "o!D>Go5bo ZOYmV˹ˈO9 syBGEGZ_m^I|>! j Iuėj^^O|JuA7xIA|+S[_+(߷o D|G6BJTLAV.g">C|Ţ{U]Kx|J4ۉķu_;D^H!?H+Q^4N_ErETzĠ?N| 4}REhOA?I B/"˧/ϨY?K_#~jn =7# <"7¿{_/oi#}-]WU_#Ÿ!ןڿ%&}Gx]ү'LO#wė¿_Nc~" BUAJj*OUH9kT_~!ƿQ5BVkNz.PkGǸ wzLj&uϳD_#Ϗo/_ lЇ&>G/-:|AK|!ǓB\@`B i=poՄc*֠_CWtW¾FhЇnu CZ_C}dzgay|o<{¿[%x տ~G"= _KRBΊ>}]zyŮ:y;]&IBkOi?M93.Gw7 k{,+b|yZ__|^B/'} _L_*XI ~%!I|*ҿZB:.7o'"I?"Ϗ&Լ;oIle rJ9ԘJO-Oق_sTJO<+bLV!B7*=lЇ_JVߋ;}!2$VQW "յH/>QW b}O]䭄_>6BwFB>!ʗm4/OIX(<?0|BJ}u}+L aW\pF#ϴa_g~)Hxt9xJyOp6}Sٖ>& w&>Gp ?ǠaB<e| ^,>eY; 3Pd9O׭}\A̯?Ovq}&T}K+~U_/SsAJѿZ*XcЇU7~AkȿfB*s9į%D$Sk%DZ.dЇko 9ǿNBY%R~o%o#~ ݿ lB_>o'Up3lL[ȿ-(a)d["#GoKwz_/Z7P y%>W}*y /QKup?#$*B/狂}\F|rH"o#D|o"M.'~j!FD ÿJ1W¿įl Tj7b|1|A]MZBؿƠӵ:Bsϗr[@@Z}s{J7J7o}_o"/~_#?5(Kol&^+DJ4W"jЧ?sk'D_%r)Ud*^䵄_^磏_O/3z"6o1]x {}i~+FS"_"vs-o0L⑿_RBw/XDA>,h#_"XF?ҝ"/'W Sį&D4<}Fω|!gUˠ>G|yҿ DM|`7_6B{}$}_ƽO 7Ǿ(x+.Q=^r.?$~`"_F# bSǏ/#D$Bσ?%?#NA| U9$UJ6_~;!7o!׶{Oy!'Լ/T"4*="儰'3_ H?Q?чG n񕂵*[uX)t>Aė_PA>͂l-FyGOOs g>7O/^#'U"& R)ˠg|0Mo:Ke|0YRQi;j?P>_O%'Hx;ࡿX'-Gx~Xx<O(Oh s-g sFEG/ ~12 1+"T􋉯&~ ג~M2ʉ_/5*T4Jo#D|$~?!UƏ4TB;EE%~>?! Xi 15F a_f>ʿAj y!GL -W Rm(:ABC=}H| ?!u,vBԿ:ua3M1')m}4GPfk.y6!B y٥n/#r>&@R#>x$z_C}?|dJ !jb~儨k/$D|]"/" ~ }į\IgЧ{9U}o?ֿQ*}v7tBć }nQm"/$D"BK_AB迂2B?n%B[?^ҫ k!>XmW[~~' "~!!w^/"DG{zJy !>쿟x7ao!D||G?l(/jΩBqk,ynO?i gT>%~)!'D|儈U ^ܣ҃}/J_y)!wJ7/#_V+"/'m> BW$*}7H%n4ӷUhST|? k_a'g u e_&~>Âg3TA\;>N?|!{}kl%&W+~a1+࡯zه}>*1-?K~p{.\/hm۱}cҢǎK?jѾkOKsTCҳs=rlFfؾekWN)L&["y|LƦvvƝ_*cWWQLbtUt`bFoѓh;f*<1mPU ~ nvʜ0ϓU;4IfDp]c<ɯ$7R|ul;u Tkl<紛B.8ڥPR97o =dzdol4FͣGF]+w-Cទޑѡh#P"GD`ēߴCs?#﫜6rHԫ9'FF|g EGGC^3EF"e5WQ3mrO'wכ#}~gL><88r}=㜖7|!PԏNLK%Lj<&+wсe%Wp_oC#J]VQt|ھ)0 u)79+āp0ǜgCF '7c3W$Zwx3c Ceee*vy5# y ̾$c }VΩ<3#[Bล{e*z{}qiPYC}77/' Z(c8vH3ASysHd`\13 P iY k6&aA0v8'?iϣT8xı2eCF31i`oWMRUVf)US#C}}Ocm} %6=c+1<7;+A03r )Y;#I6m$p_QˣgcI哻(72I\ $,j9})U8g?KBw+ dR3nIF"&>'/v/2Q8%2=08NuO~' $k-\Mxp/7~`UvΟ72\dPr^/fJߖ[ ':ll=se9K,[6#F2_~'v\LG{̉l {D-'<Ŕ*q~;՘|Sy:7ϧl+w;v'VL6ⓩGSh8ĉ.*XRv:L[踃;KswT݄{~}^M~6r?S eޏfZWlE,EdZZ dC\ZH).MM>kKxzDZ}}kl֞׫7m=t E)1Wf f۲)h\+q˝d:+;A'vkiM[Sk&J=ҲCt?aE'u"ĝ 5(l#΅]NsD)錿3xm-cs0\cGPҼ}P!lgVz3G EU :wf`3SHk\G>ѷ?kr1Tz'܄ P V~dK-J^|~ 'S~^9u9@:ߤ9A"|簊ÑcF- EG'*x,t/PWpc8"6wWITyP+ 0 "UU9Zxvnks2Zh*! .)DK~b8.y+N8ڗxٸ^x$|$@PcT[ļёruWEGJ܇KeeeEaY+uc20J,1<:w} Pʢd|e"wEdnE{G<-yZ׭_[ծd5Q$Ym^&eb.,MIi}ç$gM4F9,3+i:lE_?ѧ3D~5Oa?xyZӈ_szl|=M2a,ըf gyg!~1!lC?u].5ÿ/\FO+(>K|`)_@.#> Ud_EX䵄gg> WKRjՄ?_u}_M| i4DV~-+~J "'DчC_G7 n9Oʁ@|!ڧ`kM"_AϞ_jЇ/"ډ!l"hzBO>>CXNm#m'JQi¿>oĿi.$]D| ˊ}=&_KG/u(Dx}/z /Q|=\^hO_J_O/#~9!/ a,L_Jy=!rJC3DUozoBwk[,7t\|qZuJ׈J75orZw">CnTTrч%T?Ѿ/0z;W03Y(-/ [n|µ"%DkK>W/Z?_U"_EFd}YshZBm+1~X; J?yUz? YРJ7 ~Df.*=haAү3?4}k0ӫG[~/S!>|y!!QaańXK,'?y}&Xߨ ̖yLi?o,}؟c?Te?P?I| GȷPXdЇW ֒}\R'gݶ7R|Xx~ϥ4K%~g _zZoA|<5}/$~ _EJD'e[A|` O1G%)/R}UV|5!G4jkU?]_k W\H| oZ|w)E2Z_,(Cl`eV~3?F|!ʷ A>_K 6~-Wt*]JjjQ[I-ٖ?g[G"&DPR>IbAT@Q'ү/e(>P2/+'Oz{I t ?P}*Tyhˈ_*HOC|ė VՄ$~Zҿ&B! IaF <ϕJW<{\ J rүQW5rN-\}ؿ Ax>5_+4nT&7}^n2#7S%Do/K'<+hVsQW""n#į D^C|`5鿎U'~?]7xIM[o&D|BvϷU.}{F_4|"~Y _~ȋѾQN>쿗 ~W~oч_%_Gk*}#~!i"}y7 ص'o!TS?Ezi[ þPݖwxؿQǹi&_V+"ُ$%Wm_U"/ DJOao-~ҷ -W 6WND?cTzL_IW"_mo:į&D aTA үEDJa7 |7}mI[o'GwO=#"'}/ Qj Q~8(/WчOx3yx^Uz>1R)rCJ<Ǡg }u .o,PUh Ѿy/R Q|KI9hW; eJـ(/KԊwbuli3K_"k]?j.V|!O5à/WsmJ%2U]k _Eo30_ϓ.y|Pk.cl"^bЇ]/b.2Bğ lЇK_.""/!D]s׈Qny!O|9!+_I2^ uSH4 "B*1į$JW\jW bKįJ#"_KVJ>!~!UțQWQCM_I+4WK¿\犾^S.'7/-/ DoĿW&O>=プ?yk**lA^ +Ke|+Ur, Kՠ_ A_[׊k|aWb_TzWo2\B2viؿSw| =|J6 b}nY W|/>>#)bB/*}P+ w#_-o]q.GS1⫉G ~V䍄(į'TG"g#!sKk~&2B ėb"(߽į$DY (WI7kįl&7E}C7o!D||Ko|!']>V-d;-]=C:HT~ G!b_3z_rE[~/U!߿S_}=*=,儈?O>?L| ?_NJA YGEfЇ_'Ͽy}7~Ha_˅ k# J?dЇ'2Le.TB+.4r~!PH%tP? >F| B >Ӝ_%W`dc?G5\B~oWLy2z _$r#&~>b J=b&CJPP|BP. 5CzW!νXQ1T xAW@<֮X2^mEė+/%D/'Dչg!ʯ U|>!WJU}x&+ 4>i.E9t=TM| _T_ Պ|!W]+ ȿ傸v5:W" y!gJ"&DbhA7_#5;9"_I<jy=!o!~ ?C_I$~bg_L |`~x?LY~PrRiCD+,ٽL]xq3{y^?TZT^} }ؿ,A?gSqkg[-I_;Bc}cm/PČ/I?¿Cg@d~%}75\?s*rx%} D}@]}A >Bχ$}Ԣ&~z>o!,@wQͰX<}V- L_ UGY me-7}n!wp$AX嗨 O؟=DxBI'X}'*ӜmTU^K,BNlUdW~zBu>ՊK7*$'7<OS"UYG("~L|񄈯%~|Ƈÿ'9T?'Ny*E_K.⌼PO &[LHJ|6Iq Yhчsa? ɿZ?"K;7P#Ybi_24>%?P'9SIXrB(j$G_ACtBԿ9T^IO>goq~ ۈʉRI]|RSQė?7i~OJwG)">J:^cL* jU>җ,Z]BO!D-iE_Ns-?g P-J*TߓU>+\mGˉ_RNRy'![,w7¯\A:InY1%)s}}LD'xsr߭OS6gb|N,BG|-!w?CC s 뛫_%^jKI!K k-u NRoK|!W?HYu_+*"IѢ_O|"?oFb|!BhɟF*_!dֿ9|KIoU"EVI[_=Sot7o.>NF-%ݡ򭄨wD.K/ ~S|!CďWQO%G$}ʢ>J|!c4B#a?N&flfϸF ϏORnIZw=Sy%!^IXa>y|/JED|"=_E1|B__%~RuIP2B} W(;mWb~o*e~IUfBw"w-,k7|"$=iч*ɟHʧ"~*}s%Ra~oч_?_S?/"D:Bc-&D>LRE|BGm{LҟU'I?.!/̈́#a9AB7OjYA?)TBZվyP'%cH@S}ROͷ~?S *NEFXaJřT?JT>K#S%ZaيsI|j(%K-p~2jM$'kx#ΰvL%~"iq/$:Fo&DN ~?QR#|ڢˈߩx>dI Qn>O!"Žd_0)%i?RKG3_H=BcJ(u5x/zoϟ n9e>OS^jORY>[MHIu*$D$ˢ눯RyJʛڨZBć:עSyjEǷsɿ蟛_H9ߡe~بP|\(bOR1!uE/&%D|Xڧ)KRo>y"u@ a_ƌԋ-JdQRgAI/~5З$uTTZa!y%]fGY囝פ-'3yELJ/ 1|$?/ ##~!Ƨoӷ_F[wT{Yw_Aߵ + Q?'Մ(_K~(G*_G?$'}#-|6b|l _X/ay|߫LLJ߉p>)<><,Wb|ZagG%=ZBYa1|='IQ"Bϟ#a/y7*bB߉_e_E tߒTB_bчOQq;)c*ߡ ,jNB]%%,<O$ ZM{5> -K}'KEOk߮1A`)%]hч1O$*+i'j|H[aO"B>(W5? &GþK|-!W|-Я :B?9(0u0C _gH fPǟZW)b~6嗲̶6!Dci5?g-!ʿ@Ɏ/YK,STBė;-_*XB"BW_K1`jү#DkHo7|!7D#/Pf"Bof6o D|moYM] <aBS &JڧK$5Ya'Q^*QO'?UW¥%WQf+B>o!~6!yZU>PIj~+s aEW7n)}b8BnIU{WYq+j4k'$]ՄNFįU "o&"aEoUD5*_W_+:"D"B}j8[4a½z">^']}z*vP *$Do$[*U"Bؿ)Bo&jW[%M[#am_fvIwFB;"aKHZ>¿O翝%}CCo|#MLk.E#Iʰ'7%}|Nwig?avvL>{=PU36fX>=tF.mٵοY0 >Y$td:?~ g`f3><3קxuVQ}+JnjknG_X>Ktvu*DZ[Ћ!Nr4]&[rdX;[ay˱HZOvDgX3{NX1~,^|uX*)ߙ>ܑliot|Mk7cG]ΰO5v56:ʹb_;<ܧ"N5s5jS֘{h9Td*2\؉~dXhM Ǝ#arZdINy }%-][Yǻ:òTmK^LXh?c9Q[[.s]Gk}w9LoiΩ)v2*Tfg?ҋ \ae { 'pa3ZLQzOC膉={l< ᜈ͝NFJNk%> [:kۺ[[ *ұ0S9-Yx>v:h|^Ps _ jTQtt6MCTVʙvvs%ٻ÷&M+-שHTfVDfۄX <nϋO7vl:l܂K7I=3<,QpC;~tkL4FfKӭ,OQI~FWGcKp^uq/oDX[d8ÙMvNtc[O$X:t('k/`78P{ `{Sdc/OwP[ûܐ۫ n Y-؇#Hޒ%ͽ['dWGpE3 2gm7ce)<{56fy"ڥQYV9 T\~ÃL?d42x}a~VL}ɭ hn7.?`"wk<4ìՍCnf7'1:Ge`-m#]Ԕ>鮑 =/gAm13OvіytL8ꡯZNg{;§+dgWQc8]t}jG;܃i22fs݃^>hn@υzԑCEffٽӐsTcODu̸Aht#i[Tzb|JK/u9qC͍1YPN'z2rktȗ]1}:.,|ѡ\%Һ#Q7QyτMo}oܩkV pS!y6sn8,1t4ݖg.>ܳ_~*u,{=r=V~:!:*bጳ[s*7,[玜 ]:MO68ǔkl8ҙmj?z5ݕm?؇U|t ZQ[澜 1.YOFܙF/Occ/샕^,߇G:ڏ*_#}%7ߏc|1sj,'rW94՜i㝇΄Q i;o ~:n2t˚do6H7kmB#tGT}e-b".(߹u׺|~wcOOLe,ro^3'`, }d݉5vtךg{I/ewv45ڏ!H Udт#v`w - [@8ΜSb3r3Oz$<[q'a~~}qŞܟ8~|jJϥt66 d<.j;vr߲4XUVK6{pVKԒUzJ.dp^ԿmuZ2XCk5|pvKE:W0wĽI6ORo]t{M=뜹. ;j5FE ܌H& q`yҤכ,:OS~6݋Iwwzcbab_"2fZMӘ\x?M>Iԓ?^BC>œb\Tw7a^P[sߑ)-`qtITWq')-v)>LOɐk#FGQQy[:كhOqj`^Ȑhp`+lC-MO3Y?!8(eت'[ƞFBdՓiuZ2XNWK{zV Q y(@la Qh`7#pꗡQ(-Pܮ۝<{%=z*eh9K56 u=9oZVo3M*ߖ_EfbcݗՖk|K4{6|n0G2D>gX*#ܛS J^te/ -9BVު{ sBޗjq8ftOVPOfo]xU;ZQF8ړ]p:]@4&NNo''X szd@QMۡLdsfG1$]f^%̧>/{;g}1P~$IVOfΰQ݌?U4M^FXF}4\ .enTKo7Nq';ߓ@w~eo1 jJZL|X_SouWw~=hZJԜ)`Łv vz_spF{]X?8`o`^y}v2-z,/5ٍ{}';Q[5߭T-ؖSݜae[}mkV]fX*{Ae56*㇨X=Y#0ؐk0_&*"_g#7;zss;n53Ukr\U?BRVxH"4zb-Um'2_RjwlpjBUTxl~TE"ŋ&k25nSƞaSW7_X42ėTt-SӡɪzE7`ɪQ\6}]˹=ԥGwDu۳mtJzG-MU'{-%]a_0+L @ kw۵[tNSZW<]Q*9PO#sUDs9]`_qg-djhAV13yyٱ#6^m+ܖrro%UǼpGZʜ^`HKlv$N1Xm,VHje^.-޳jD-T/U5{\3 ɫI<2ڕ+;MEPKf#~[K]Vm_awem?s[ekfQ'7|/Zp].7M?MWڝv$c$0Ct}L*0V'+(?NYj7z>?TqW9ފ@Ch٢j=?.c桔"'(nS>eAƫW>|\Sƿs@JXN #S }7B㟐g ?%~$ -<OeI,˿ď%. SZ@ğj>JDř>ER޴}؟nɿj*,B SZ)WK|!ꯎxWo=gߢ?Sq7o>/& >[D ԾRo$D.Ї7ʷR[MBQz'D-}6hy1B7Y'~ UBPGBNT{T>[^>CuT;޷ "aBKK@8'yN2"~9!&~<\ 'x:O DB UIXağ J">"Q1Md8B]mk~}_f?f_OBUďStZO!DrBkJi U3HM$8o"~.!o&~BҿEп%Imį mįRHo'~!AfŭN"7}r{']{?潒ޯIXߚIˢ﨟'U`Ty!>nч;XIHG@χ#a#ߥo\*i!D?CXE}VU>M><]{T> }ؿr*j{%}QՄh"ayd|cB|"3|!/?G_#--oR/&DR?M_.18_0]IWy7{ǢOdid47U>?H||*bkC/q7m"$'*_EYOW\KTU_ZaįWIaIw+q+/Pג~K1d/Ul͞¿G?xgo!D-o8 C7OӾK2O|"ΧL|[)O_XA􊒑O#D|˸E_|~bM`?rg>si|ˤbf lчb'+f8G7ey#j3%P?c _ca4R`%!t~)U&i4>43V#wq`/[eG㉟ǘ|l+ u| >O"Jb'VF"Bݟ&D揘9VUO"ĢʉW#&eʜ:BwW}؟FzE?2e V#S/P#&cdl/!96&ٯ5":I-ϕtE7_HIT^M,pU>S7*bl.I{Tc}俇O[gQ/$D+o>Ehx9C1NW~IN$A:tĢw} bT^IIRE_룴E??3RN2IGU^F[%[a(6>.֥i_>LjRY=_RcỴ~FGǕRsRGWT?/t+w՟)u}؋$]Kb|{Xajg*֒HFuRI5&DLҵ*C%9Ŀ7}cau4̟c&% &o%q LL(⑿p_|2!]B9J[#ۈ/ot{-ߜ~D,^*lBbo|*E?>,*E??8oo*BIg8OIg¿OGÿ(? ~bw7 W¿{$ݧ?g5>|QZx'~D,BÛW-רu'hN M~ZB﷉ Kʗ-;/#D}WU{}Kˉ.S D|hJzC#gR?i.3?m!GU+p|$!aG}gOO Dx$/¯R4BOWYZBoVϟc ~!Ik ovM:E|lOHz£$MSo&Y\0nKWu~77T>AίGFtaO b+b} WH|"W?^D|_8%"No,ijK"("P/>,B_FGYڇ1Lk&>QuYa"@ڟ'YimBWL|"O㮤r"DK,Z9x/y}؟FBj j_Hg ~ K]T@Guk ~.jBE<j|J;f_<5_㟑$D?aUOQAz~3:?^dL_rBz*Y $D6?KqK|Bo&~JJ|=omįV?.iG Hm;ٿwI|"oKjÿ ۅ:*eo_ėxX嵄Ks{BMܯEhK#~(vP!"ae}ogwh_S?T>wTREۈoKz9"a|pl"ƻR#.t ^~\}9KI> 7¿Pۯ ~Y$]m꛺A1nu|7ֿNN3?^CDEfx[o?|U7Jz/,7?CW7Zyt7sX!o#~,!v %ݡ hwHEADEfNIRy-!.g+"~"aįV)*}."c>+B) i+3ߵ?K<蟟#y⹏|Aҽ*$=?%-/>xᲾ?]k=;4ْc䥙.ںz;^1x˺7ڵi6+}^4һy=޴}5 9UAkj:=,Ǥ@IwĬ4Y*/W{:V"~'B/0R">~&oD:Iz 5bMQE/ fn ?'_ _7h9_#鳫YsӇ/=kEg2,WLz*LNg]0rȃ؉~dXhM wޏw'UJЇH @S~*{,}n$wueL[j3?_ɱQ[[.s \PґXh3N`9l&v2t*Ql+`^++V*Wf}C&_/DVMVvHe~w&*7?K9e~qǏ֜Fgk4?l_+ÕBcz;`gS <B R;KmUL3E5BnSL}^DeշK-R'{,_Qtd.}˺Ȓ,G(_Ɨ*A1=rl_S?8j`mo{9^ ,ͭ4}WW [,k ˋ߅ a]LI胂 Ȃ8 D៣iTwb%&r܍b׿z5GpӈYZ?r8Zs{Ddq9wY ܟa\uDh[A^=}"nMbsԙ^k8r~mpgGic UdgYnH7Kl_^/>X[xv g)>(Q?T {c7z5xvc<fw4;A{)O7R7i5>Q^:=܂WsRSOxlatOdy2~k'eDp/'48 aW}XQ֓_hTyi` :A@+%~*?>OO5;0?ScIoh2?4Tޅ ؔnr>p{GK3x_֖^KC-@=ad+74lyIqxڏ;^29k2ZjmʍhƦ'nz^?WaqtrEC lz-+Љr$zO#1Шf~ԩSOFdO|jý\'T>b/XgmM)h㉺-]G55vϖ9ug؊'c\ N׸njny~_#bƘ>5T("7|A:uM7wgw _oÁ4H/qSU9Cy[nIy5وO_ݨ!)jOlB jB5#55݆ZrG)MdvLb4}:Vmiz~z{wO8vSj<Tf'LȪĘ5O2j1xXk*Eg&j܎VF{K{j9eQTGzwʡc&ӇꚚC͸/н?]W&=%dմή7xƭ gA {CjmƶUO]LS77mi=)UPgW1iήtU#iwpQڻ܃iqWEsGQ@WGcK=p֣jy~NojvOwm!!=pƽ[f@L5Q 4WmGX{[go}Kux?%7KCdu=xy-a6uKQ!ϕ^mʵyҺ:Zo|mi!3iktCƖr{9F(՜2VqqҦn)ukmo0LA{<9H\Nuwc.}0٭j鬥yBbחC_Q+}hti!.WVgŘI/$LuRtȪt! C5[fM@kQ먄FL݋iWYP7g!P&ϖ6GLߔH.jJyJL/uZ/n:wO)]}[z5*h@iʯʫZ0Bqi4ʈPŭmkQ$թ!UQ?]:2tk5L@xSpuhX^^}e?ǽސe2 kqtWF4Ya0[2WuOؿIլͪ.7Yq#Օx>gn<TP5.;gxK%ՕLSW$c^4Zo)P[1Ë36;ŒohKgSjbo9>qH}W`"r(? #~p\TB7"BT>GLEo(o# O )/%M!~8?Q"B ¿jK៉a8bч5OPĻu_-~3@¿َ[va}7jŹ>z}E|(.%wB|[<{A6}_b)_C-'+/18ڧ)hO%Dj+>kڰ>_G4Ezwwl6Y+z}DVK}vP-')_'">{B9h=9@C}[\(}ؿŊ~I*@9m FBO;x7-ʛ9s3/G/"D?Hs_FG1G}'~$! ~4!Cn)N O"4OV,w+,< ҟJ^@4E!W_G&~_$j'D|8B_MB˜R\k/t;zKzE_KPB/JCN,JK+%Z QЇW[M,g Z7k{` Q7_FI7RG7받$բn&~HUc QZg?y:^*r|]*\hGw?TQ˗wJz}Cҽ}1O%¿Jzʧ¿IˢO|"/A LBw?KqZx(%D}R>^_E7}}>CRBg_X9Iw>BW 73_&ʣ߁WQ&fE| !r^TFo8և" 㗉oK_c ?[.Za~)N!]+ɿIz@3%ݢ ~&!8_YaRyO%H1!-[L[B~M2ŕN#{W+uX#*_G!~V1¿?n_,< !D?; Q(o6'RM|!"ϟOzYe ?NHonJE?iߘk|x>'U)g~t~ߨ<B|!!o+8*UތT>F_9|?MďuXA|'B'9wп 'e_B|%!__~gBuI KD2&~%!Ɨf oo#5. S3~=ORʇ(|̭I:n7z>_QIg?!~$u[aQNjLR~y추Z7Hk1s~{ Q__APU*L}3ƽ֢" ^/tM@k-5q~e%q>/Їk,緆 ^bsyeX8N*N^Iz_b_ei^K_I_G|5!95g@fL.t3f%Y Ѿ}fKKnV0BؿIG,3?4I|!["aV(opٿ];T~>!=BߡX n&o!wG{$ݩ򝄈F>h.Bh(~C?><AtE:?}[*AG-~g*wMw{PJB}I?ÿ_$@k c^=E@:ōd}>?xD#K|TF]>$~!W_kIU%HE},H_%~Ӥ(fBIϖu|+S sO'+oǿKz -0hGO_K%~!eRE /O|!@آ]/#Ǔ[86?iS_`2T>_NNCU^?sv_W|WBBԯcE\ń(}eɟ>1_ ?O*oG\OQy?q;>բS/V,%R.^Nn G¾5+I?e᫴~ʕ7}S7XGlp2<)oq[: sMK[ר|"/La>gGR/R+"a%n*hB_m_CXB?e7 qcʷA&*jeS"{,8weߢ1h *N!*/'m>cчOU!;$T,BؗV>$#k9?58V%D_oG7s煒.V B]/ЇR 'G+&Ii}O_HǏHz~K>?Oj- dM1O$}?F|"NI*J]߭ /II/PHBؿ"B_L'lEv#_W_}3w^C|9o/#B/ O'}m>{EB:>{zWC:y!{]ht|DQ'x Ư$EC1~,.> xi[AQ8_1Cm*O$ݢn#~"oTB;c DE<e}#}^8wzPIW~/N>U-INo !C[KY◞2?BN<ˬ|=!?dC_[.>M%}I奊>OI߶g>:FW$}Ӣ_%~d$}].!kuK.ߴok:wÊɿH+b4]I1}Iᄨ$ƢC1dAI?TXB_XaďS"ۏwqbǒ~k3 'y~O5!R~}Əٓ1AyCQ֩}|uėb'= c_$U奊<>V>+#y|| !<>׼Ӣ"~"-I"'DE$sJxs1L&NѴL%-kFQc¤ K"U~LH %JT^A#aJE?&D'1L5_ÈUcBB*G"a[%drF؟/ScBO%}7B(?_O2n%*U^N#aRN 1׏WT>k"aeOėC|"։*NGb^>H#$#Xy)G&C?F^E/_~Q/tg8itbʇbrE'~"AH(E?&6Iڬ񄺿I+iEm&~"[,4TB6)1q3Q(1K/&DG/=/Qc|I|%!I[aBW)1qE[Ck) ZB/ uor'/\fc ^?pY0/\f}Hy>LKzKi}8&}>#i}ԥ1NIWXaN&t\.!}?n% Kb 1"IW|"/&>_MPE?&^"'DT }ؿLLҵ*K/Z>_K8E?&^A|!ƷwixW}>{_KSM/o/o1c[Mc/,p|{vI5Hx<<oIB }">嗫|~ĝ&D|!H;kU>G+NR}3}2BcĻIWB.HS!4Yy 7{HG¿D5 įSH#^ %MPk$)ͿT/K _!foUIQyWf|/I_WhB_'~"'*/#D|#Biɟ2_Ʉ~X;OQ{Py"ֿf_Xab/!D?(}KJQ?E,7SKoJy~߫X_LNS}=%|y:GU^+!x/\2Ih?_)cL|f毿?߈5| !G>'W&=AjEEI#B?]/!} K1^A=2&%P#)1\fчAQӒroQ1W>!~"7f 7ԢOKWxBݟ'KÈB< )ƾ콓#/Wԯ5rU-4Ut~9-9N3 $F8g&dINПDȿيԿRɩ*_B'YZo ө}$~ПAψ$~"wZ#~V)srʷZ89ߢ]qy/\rw- ~EB[ƧIu\<ߠg#/ Dk7y$6"B&)b}`s%ݯ?6?BQ??In!~!ʷISI;AtI|-a%w?[Q?2TrG!|*$.$]Djubr{I=!7^oK%}Kmi< E*/$D|4_Dhx3tTN Ø$U>I̢Hd#*/#DЇ#ie8| aR?)KKzʫi<&J>?Eڿ%;$u| !S}"~b=-.sy>@3%o¿Hi|kT^HK%fчk/Q[e^REϮp/'~"ߒ_B<.VO"D^G|"ߒ*O'w}>UKل^G\E^߽^ *_Bn ~"ߒo&HjEڿ%oo!DB| %M{9!*/VC҇,NKL|w|!]>hчw? #}*D}o>ϒ?iS~폫|!oη?cч?Xqߜ~!2+B?iɟ>4\K*/UdďPgηVB_ptEMDE_3/X'p/%4ٽOQ#/RSK7㮝f57kmP:.3$!oaߨr_"%NAoG҃?HoR69Yϒ1C O/UfSIRXBߟ??e+') [I|~3_?xp| !/%D?"*_F?ɢH<>w1~= |\ Lj__JOF'_I65EU:>\IS- Պs~EO%)v/V̯)Ӈ+-ƯKJ??֟Aרٓ$25"B?sD%{|&D:Kmÿė(N $-RB}_DTd_r/$eŊ[*I *F@FoΧ׫ !׺}_oioo"*o|N(r|m#A!>.RpByď ]ď&G*CG]@Y߄}egԻ47:T1:qO~f_Ku۷_[{î]6l_Ə{7_gۚݛoۿa TUAkjyu;7mN{gӳ5mV8_z4O@'ʭףOgrhl<oĔS|PuS[s;v,r٥ױjmђtwtljtdc; ~#w̾JK+l]9L9w/ύ`%tmV9G®#]c>~ƶQSm2tF!#3擢ƣ-'-+{a/h~Mɣ_7|4xT`),r^9ZS]n1׬>NrN1eHKgm`5[y4Ln9:kelj?% ,Ul: ;]$C:iqwit;[̈́x㔚)&psFz%-v/J]ј_7gAݜ'0yq?m ƥ0*!!CrWt=f`+љY{Mr=-{ع|9rɢ`׵꽎=ns{SgdKvO ]Cκwn|zO#yhe)Gtx\Ɉsg-EӐ¶qCraGG{S8֋ev}R96i۷J8}nbnHm=`3[KkG"B3>T>wJwDu>іΦp11kرc5>f9Mii:R{msUkrK:#u)Pnfss3z}|9z<31jƎMGs=ADO~#ۧ*9nXmic ل+6eի葍Y1^ 0=~|R4`疌y|XgުVÁM;+ip?UZܝú܄0Ǥ;\&5io3yr<; 轞s|>m̳rY9'vlsjǓ^ʺ18hjniM7CȢrKG9<9/z]/>X[==qsψL1y]yw!BKrR=})z=ZjTi'0bR+a{))W5#d҈Ssiudp-2w)%V ]P'Oλ*6u]rFZlƅdbrPK-ESnߎ_4tZ,]bPm%[z9#-Vji3bs-VX{щ)/ѸSl?e}ީa\wPN>Osi(#_ȫl.:D2iM==vM5;8zmuZ2굫jZ2Xwqn`Ṗr~5Jӵ[˜nvZ*Vdgf:S\?PkgqYnay(+JTQ%tR=0p8uL1>d/㵹~vR˲q{yEnu6E a A÷::s\lOEjɠ"/iuZ2b/.͐t7C-2x k ky׶]ÚKv';mr , mۆ4kj4V=3Wo | /?681 O/!/7nvǗ^dǗ5^Zdp^OҿmuZ28]^-a^:c!qi<8A>ϖ~p |_d:FmrmҖ.U(0?%U>o{[ u=Y3-e*<%Dg?3vf( |[aFw,|.tL՘o9P:ϼKPӋ< x5?[;qr E۠ʗ*xsa뽢lDz~AƦh0~g~9`oPjڌmNԸ'ktjig'j_Yؼ˴ze3Cw$2/stē:miB>5xel2kʼͼ'ճȪĘ5Ϩ2jZ*y"VOsOM北=;)QJ1݌+k\ue.mzs腻 ]5nJ6h}ߓyNVeUzsuEVՁ^SUe_uzɎ"׿NR+i]1bJfb{?TwXLTEPa_x(*Bç#_}/P>~Tcђ" `'JTQX_ JȿkvL?Dq8gG|!F*T#X8)Q1?`J'*RR!\-qT*AF Կ'ƿ*¿jK៉a=bч5OPJ"~!%9clvGloՊs}|#D̋Ї/P\JcKT0Da|ˈ_NPPdj}V?c>_ Bp~E#~|Wg>0OQ N6߬j>["a|>;/w>{B9h $] BυYEOS쿒R'xwW| !Uj)duޠ)}Sg7IQ5}ؿZŅd-nU"Bؿ%Bo%~J|!}7\87cg{>0_U~'Ûu$}Ģ>Hp1TwJ>D>ؒ?!}~ ƇIz~ Iv*a|K}I*j2ç$}F>=>XO%9¿Kʧ¿%}͢@|"HC^ҟI{/I/\BW,ר¿@q17_J >-~'xw>ɍ o gt4w!jߠ:GėD.9 r_|0炵} 0~_|,!ǯʼ\}5]'_N-$=r9آ&~&!Aң*!G$Ӣ?Kq?JzC1ҟC''jao-&R-!K2E/L?A|=!IW+u?%S:B߀U_7>Aqk}~;gSԿ٣ -!V)x_¿IW¿r*H&d-džy_A ,G@l"~uh~}SGcvU*I%cilE"~"wSzIU>-p~o ~ eO(s.s>dIBšð%g{)bf:(fV0Bo c:6"ʗ&~!?G8GB_F$)rB_8_I_XC"~uIrB8WIWb|zBÛ oJ|~m/sbQ{E[=]/UjI/u7a IYaďRI/w7oQ?/Ї[:K^wb]%H[ÿNT>tER797JŢo"~"ίLYM*G1BoO.v'(b}n֦_ٛUm*NF6_bowPW"w_Mmw {hHz}Y/Q,%A#HE?HpEM)*ACa(o\]*o OD]ʏUfISBl>Nq<#>$D࿤oaˡgwx -Ƽx@҃*/VD08NȢ_HzH#?^K?R_sSU3J1q~oGJW">FtE:?RүU>-TUfgb[* ~'a$|q>{Uk~ Q%y{Dc}u-|~OTJ]> ~!_g7KQE}C$&Do:7? U?f/?VA?Q~ƿxNlA2Wg[pKo=x!I|"gq=>F/J|E!13>C'ϸ}o2|.!_N83g)ȿjTb3>] QVXa:bB*B-#Wb,lyPǟ|I,bRТ_Jŗ|"Ϧ.&~!/2OYZ?VS7XGZ+pCߠ4'eI| m">7_Lhx7dN_Aoʸ]a=}v+!iG"ϋЇ}PFa KE›͌81哹6O奊Z:]>G<|K%PB~I[acFIM*/'iч&:}7|!Z!n>7_K9,ɜTjBHLC $fGeURg0~4B۔g`%!K a3BVD=.k aD>$~|RBؿ2BRZgpkT>__aZIש|*!"BS~oՒ^򑄰}3i$ @c>쿉2E7/'Mf+9"V'xw?-P>t|ػ]y+?F^EC:>ߣ|<]$ݩ!>(k}'C1?#~&~"WL31'>aч#~"?n'ȿ߻XE43QY?ńhIE%N*nI|%! =įR\M&ȿ5/ZG7o-!b_z~p~XG;.1~}oa> Ty"/- lׇ?"-c'?'} K.?_j:w?s;Viל>aч?Tcᄨ߇%ˢ ~?|,!?*}#q~dƷLj/#']Eǝ!Ї[T?ՄK_e 'OoIW}euj =_H_BJ{|ǓƇI*/U!a7_lчďP!al| WBL*>?V sT^Nk >CTE?&NU>Mpk >R9xA?&d͑d?MDŽUbE!E?&NU>P/q?^uBzUtB؟.ՊLH'+"a / }؟<'xG 51[ a.Bg_HDŽX򩄰??B(?_OfK,Sy9!/Їe/pg~d͘hPDBدЇ]ǟk/') EoY%6:OuHlЇC7`䕄?(obxo>hL_ࡿK>w+ cBI|!/syE_LPE?&?w i'i&qF>OE?&Xih8߿߃OSc"M BE?&KjQbBI}BE?&*_I5ϗYaULpkp~%~%~ih8#q'{}ѫG~}oa^pL_*e*/U5^gч?Bׇ/ !D]+5}c3LWF]_c)?]?H ޤLQ{-&*1fI7|8!FIMi?&nt[$aч[Hĭėb|{+"otʫEÿ-xO5!R~~}ƏR?<}/b wʗ:Y'>.. T߬w.|' 1}./Wr'pL"CsG"DhIo/_F}xWq:ՊuChx*_ 7%}£E߷_@OB)n$,<o"D> ?fMR,KC /C~bE#I?QhB_YQ?FiO%\eE-+*dB~X7OQwVy"ֿf[aab?HzTKQHzܢT?9`Q?E,77e ~RKzRŊb gч'/Q$V-_FEz>-)carGƼzLZa q1Sr>_.9] u ~KO#~ob`ʧ{$\S&Py%!R>A|"㿩Y*IQEh웾?[ 9_K?[ITga>_d%/YJhnCJe(*W(|jb|YCzŭT?rom_fLn#Nп6Xwp*E݊xL忘2>]LuW..=~6BUXB͚#iK/"D#~"r_RIVpBٟ$?k$~To"XC(yي<"£[H>!{ W¿įV\GIj"KvHCдKvIA兄n o%]bEڿ%K:фBҋ,(I(-y}%/dB~Xj(-RI/Sy"ߒHzE_F|"ߒ/ /!D_+5}K$] D2B@k,gT)  -fI7Xo%}̢7_H͒nUy"gW?\o_B<.O"D2E޿M*N};UلI\E^w| !{W>{7y> _HS[Їw_B?b??VywIʋ9?)}%F&>?-*G{-Y;w$ݭIGݖyR~濨NuNpngηA(9EJ`!T~su'݇C_Ї[' |P奊L||X-~O 4 ߒkG?Q_w,%4ď ,7!I?5[o?S:.3$!_a_+Q0DaKXA#?BQ7I/ė*[?z\sT>ď#oď''~bɄKE߆S*wK& ZׇO?xp/!1!K 5S)2BRqI)ot}];JZI_Tu|HZq=_HRaʿP/UL_BP'5:^0H75A?R#/Q#%{TGG?P;5фʛ5QJ)KR8."D/V*/!l>w2C}WRʇ¾yʢď DM4M# Q?͒?.5K1>8&~"wLߓjFo&#?ϲO"9W~IZ*B%-#W+! -sH7OHXQO3dLJ-𰿌3~/˵scK,|=IB/Sk/"A_2֦6|0!}}E WfO!DoC a{> ~VKo#xH*?HuQ>_lio"*o|N(r|$D Ef~;$ʇ"ď LHBaGb|htBy?.#,Q'OapY;KPN4ctܫć<9F^[vE[Woߢ ޲n vmڰ Ul~24ݼmkvoھm-PMTVUZTʮ=]w_}ۮݾ YX-@aWm/J}zK? Tb(ʺ}ֆ-rmy q $koe4੺]u Xܟv;#¶=[w]?܉+۲kݳ=BGHºàfR=^{VS*zws}VV-!7GӚ됳3`At/{Cib9|УhXaPv߰nՇq| o:r+\}umK $^myAT[6OkSS}qvTNoyO{gEy }B8i!gs?|F'çfi8 i<<5y9 ?= afv4t>tގԮdW\Og]y0=-Yooז~Qa`/Yp+OFDQQQY5?lg gb}*Ϋ7dwA^ݿivڳ8iljҳy~}8Qn=U 8CKd|c4ҭښg֖.UTkt+z1|M{[WK[wcWK{Ӏ6w;5kˡ[\rdvAF%[ۏu&C7ɮa5--M2D7XcGtW3lc!)_m+ǚttkS-mtuΩT)l](.om?,5#enX)ڍa;&5;#9|T)5#] Ah9vY =N%t[`[Йnh:1kEe 4vnwLwEVrQ=P\$俞hn:҃DS 4]}+rrs3ލ16v&\E}{օ`CDxg$rʰt*ed=t6=w劜ivב>ؔcuKd7n zv ٿ10 +MéXӑݎ:5u=dV\-]aۧ7iTfsgkk VʬvȈc9Q[[Y(:^=޴؟hl;e:&cOgr;2`>)*onigi>yLƎ[Z[#δ6uKu334Y_~Һ:ZY>X^ؑ,X=uیJw5vV(߅kerIҥ~w>*{a/h*8y_g4NT`*r 9ZgS]n1,4NrNcHKgm`@5[y4Ln9:keVlj?%r ,Ul:0]l&OzBfꤑ}loxC)&rFe0%-v/J]ј_7gAݜ'0yqYahgȍr֧ ^ :1+SO/ٕ>w}9F4B0#NbbD枚ƫƫ㕥sP%cΡeV[r? i%Mz)*l8>)@}ؑ-Mc+8'a>Tch|sx:' ?thc[Tc>tFדܦ7=7<7<ݷ*.#X <iF .ot4g!cAԞI?>}ㆥ~ؖ9*hPMbSVȝ_{}P藺CvnɸgC~FJo5ش1™&㩠Q[˾ݙ>MHNŃVP MMc]ؙv/6Ñ/f۽>o}.<7HsbhF<'<饬㈣ΎtS1Dm,Z0_ tޝ̝S%akP>^7I{.=)L^V{S;jTi'0bR+a{))Wm'd҈SwiudpVR,D)ì\J(թL^bsBp9axCDb^7%g$4h:1O6 ,' RoBʋvR8aպ=7` Vj 9#-Tji3BsB-ֱ{o-g)o0kNt<2ݜͲg]oduujk㼜Da~˘H35l~' /˧ezx7tVަ։(Tzz{DeFz=VQji=1dyZV 6u=1oՒzXUW-To7oҒPNdyZ]V u􌌙虎,xꙶ1s;Zw찬A ,8(&G݆Iڥ׻T>!^v ckdm t؛կ$-x{.҉~k)/u8?T0xϓsR@~N ~~!.(T/_zShqmciyfM7_2^򚼭RK]vYy[UKZ=#V;h ēg K/]}*"26%] ð3Rb';= ~Sѳ9j>-|r(CE^>aLO yOZP8KGc/F$ӏ,b]{}驐~_GOӓKK~hl̉'=YV%j t3vӴU-a-=;6lX˯IQfum>fJ˽g^e5ؠ TK{eVW9g32!"'vRvΩ@SA#ᑜ< b,. c7 2ǃ p?V=3OM1 s)6xp(ypݐw[ѿ#V{)OkԒA#x)OkՒIz=I^ujtz6{ g^ #5,tmA|'sQ\K7y)1?bI-'=Cqf6m\u2^QB?IlCRn9Rk%(5rRSb4JÏETVǛ ց Ctm[[ܷ%Ͻ>њd'?=M#o1k׼`KkKɈ7υ|hऔ&6c\SG*2X%ln43Yo֋n+ XCޛsB]KnY!G^": ЌBqSN=)G*z+6^r;\fg u{:m=(K}mFŁb+ վk8SU'jܓ5nk z3Փyy\Ȭdl޷eZQ2L)xR_gƼ:miB>5xel2kDʼͼsȪĘ52jZs*y"VOsOM北=̐)QJ1݌^YR4XʔЋv;jX5nmmm6c )3;ml;YA\ii}Tu`pW?PUWjۙ}O5F]-ZXwoɵ[`sW| =f#jENUzt5^kн0^iT;0j}bƟf*kwU'$fNx]1D]+z1~v~_Sf Uk~z=˭K֋|Q=3tJ\W ^UQ5{ѯ@. h8dPԸy+ʕd`jVBFŭ#CVǯ0˫L>hj?݈ꆠ:MLf̷bk$'&gcۖm  U2wo<K5~coNK9|)Z%%LSY$^4ZoPE }98GqpyqƦ^DNkս훕O;G߸ޗYx)"Lͣ~7m?xId3;sԛ՛{m{䖺wDڃm#=EifY, eD}+2;h7hk'hUF_IVufr } T֯{<{~aj#{.U&mS+N9?|D{2#>I6]}d>4 *5kwu I'3XO3+(?(Sh'a7z>?TqW9Kʇ)!>(W? 1Hńm|~Zo%*_JhtD%_鵻&È83#U>Ї#O*Go,Eo(o'Xx?ʧԿT?"B7x|[x_ 'kE)B REggaX_ Fj$uZ)>C|\js=_>"a> }/#9S6}_b)2S-'+/18ڧ)hO%DOשc>aч눟Oy{ ʷ!B7? BW gK>ogrBE>jgS>?sT^AP!>i 3\|!!ʷ7B/!~<[%5|!@>7ZʷCT a?dDW|D[7s2f__Dm#~"7vK%ѾLjAhM<ф"~ !8?&^N?Y h+H*!{gW_C"VQLH*Ozq>1wry^_Lҵ*M_.]}-C 1B+U~!:I+/uGPKz^&~K_' *BЇ7?Uq&U^CoЇU\H"V/"["aV($Iz=B* ?ߥwY*^*/$D"E}AfIÿ?\q ߝ>򱄨GH_cr_'$}R僝HEZ)IQ8Bϧ%}Ϣ!~"?f,S 1~i󒾠nI_ÿ/_=пgG,9dKlaˤ?Kx5y/P\LM}Erz'oK ^]wr㫁xÅyÙM6p~<x?s7ge1%?yN &*LeD`Ex$_&)*K+Ǽ.WM8E 7ė">~K|b5;I|!\ÿIkaIRx"Zx+/&D|ITKL O_OՊk O TP7`WoPgpN:wo(B IֿL|BDy8WJ|!7xWϘYb#U>PGl>I|"QƨcUi?y((.".cńoR>+#~b=7Մz>?Y eaWFB4KG&._COa^Wd3S1op8e/93i_bT^Dh+ meчe}ӶfmP EϘ]!iGX[gGݔ^j%D5DjK~7_q-Os-Ļ?[/W+Invү$4a|pÃ@<˜ysq0^񅄨FqXٻU>Dp˜MEď&*'??Iq %mW(N'cWBW+֐~'E|bҿ%?N2_ l›=>_˜XCq>){-VOKyZKŒ~BDu})yF˝E@"ayR~/{k$}W兄(k/R&%aчo D MN07an+>ot}nЇ,熋ݮ Xė)bm&otʧ¿Q>X-W]sdB'"=ާh_s_}>KK%}Padч?\C>wJwbP>X1C?..OЇd3>-}7xٿG}*I7B IwC#C[) ]':KyU^aqxE$D+?G"轵"G"~"7S|*g̕c+ޔ'ď$ D|t~_|!+я[X7&U\AN*_I}0PAң*_K1,(7?Z1o!,ǩ%D-}AB?@q/Ϝo[%I>7',HI/M;eto84~RE /z|'B_$>C|!/cf|Ohq?ޒd'Q\B/#ɽq+ugΎS"9Պ ~f|~et5ń(U>W[G 痯Y?\'x1?yPǟ|I,bRТ_Jŗ|"Ϧ.&~!/2OYZ?VS7XGZ+pCߠ4'eI| m">7_Lhx7dN_Aoʸ]a=}v+!iG"ϋЇ}PFa KE›͌81哹6O奊Z:]>G<|K%PB~I[acFIM*/'iч&:}7|!Z!n>7_K9,ɜTjBHLC $fGeURg0~4B۔g`U!T>;#aYNqI'U>ODI+|BIW| !_W)_38D5*H/Їk/SD0sT>_)?C7jIUHBM>VN4 {G 1BD|Mė&~3t[@߷Dÿ[Coa??4wWC34~u|DG'x ƯHSC1~}P,Nl'~"~!ďR2w?X~T',cOP-7{&~!⑰7/kU9I_ S-$D~A}}ؿUդEKp~%W,KOu'{}e?FrO/\-Wׇa>|@҃*/U9_E$RBğ9_E"~dG~pD8Bb%3KZ'n^1g??M',;*}L^T>YaďPCG%G%ݢ$~"ΏeDSʫЇ[T?ՄK_e 'OoIW}euj =_H_BJ{|ǓƇI*/U!a7_lчďP!al| WBL*>?V sT^Nk >CTE?&NU>Mpk >R9xA?&d͑d?MDŽUbE!E%NU>P/q?^ ٗpU>'GþK,NRi*?L:Ka:Bg(? QBb!1[ a.Bg_HDŽX򩄰??B(?_ORe*/'LN 1׏ *H@|Sb-:?%_HDŽ:$6Dÿ }u|0JB[71TK.[N 'JXC1~-b*1hKH>IU>P7K%5Z~'(1qOGM%D$~"ig(1qXR}H(1a/mUJBԯy͢įRcE[Coo-!;-KGc!;7Ϗ^| x ~ eևx}RI/Sy":>쿌>|W| !ZI+a$]D2BKb'U@?&n&Vc⍒kч7?T7KI Q7JzEo"N1q[T>">B8E?&n%[wixU^E-Bn;~ a-{5~ؖ"}S^KU=qIwYxߥf VϽp%G+NR}3}2B+ĻI$׈V#GBÛ7P)[-_DM~¿Nq#g?gH!Lo>7kb_*$S兄_Dhx%+j|eIG%ʢ1Oӿ**/#D,Bnɿ_Q&-!~"ᅮʫ5%ݢ.7I| !I[aQ*֓''K }%S,?5W:foIOX_LPǿd*B_fJ?P *.&dKQBW%zB7ՊYr+P?9"B$4W9b}`_b%YBćJrEˈHϧ%e,LNQ(˜WIWT>O!~"7f Wnѧ %|<ϓOPti!M TBcpė+bcפ*$DYjG3R`7u4K3 ?j"a}gKc?k \g+r^ iʗ,G,>K }-#~_I[E EXMZB/k_GMBK֌ɍ}x N.Yѿ6["\XƧIuܥ<ࡿGF^@=? _Ys$6 Eh}R@K^**Nc?#u3'|ORJMWBkHZB%?[qG$Xx '#~JzBwՊȿ6IzB17^oIp'o.I7M|{U^HqI'U>OHzE?IEڿ%B~^/O/L/_MEڿ%_*e*V[IˈQ[^%k%Ƣ ~b= vWF̿7eo_Aڿ%,&+-yYa&KiYҭ*/U +KG%?Ih߷_I] 1o'Jow?;n/!Ї&~"G|=!{?yIw| !NKHG,4*o.IRy"'%}Ѣ"DQ?%}VtE?Kx'2U>}ؿے?Z~) MWU>7ߴW8oοdp(kuKT㓉o?BC߷%ݯ ƿz[w-~'*KE>4\&>S6TPc=$?V}fKgc]eF$ k7 f|=1>>L|c?Hz#GH?&o8??RE|~kG qXOT,#?tJ]nW+I.U%Z?&}~)J0v[FC*.)e㳫zRI~= *RyW+' _J<Q7jBo#~2Ӥ/']!BJdդ}*I{CaU*?Bue>_ei#o'W+/>(r|!N8E25K"O"vK Q?ljCI'U>ג;IY.'pI_ }<'peuW~'&~k[ܱ~v5~{Ӧ[[7NJؼ{Mvnۼk ۡSZVjQ*#Ǧuvl٩x4팓O'bm2z:dWn;/J}Qz0 TBuמ[Smgy8@@io`uSz#c=  ?>6oJJ6?g6#};2!iOa6wNӛ6W4Of[Q)֣X7 j.س[:z(r({YtaYEgQQQj?\7=v=h=yy;wb=鹚6N4?=[1P͸ㄹu~=(<1CKhgH_uw6wAWΎ=ȼζ#N zP]akmT: ڥPTsLO/MɆ5ݸEk"aT?ԝ mnOjP-:],),>y&*r K״Jh_SD]jSzu򸠭[ >2G;,yrPD?*J S VlU$-ze^h?t-;z7ֿk4HY82 ^yVMi+i@a<24x{qs?yx[_ OacDs/+nlo m~b8K.wO`z{=}ܘMm3{='vL\hɃs#nJ:18k?oEȢ放1߶r :^yַ*h}V*GsrΤD1y]]N~z9gxY)`ǹ)KDE,KR=.jKRN7'KIg/usKI6 l%/$w!0옕rP:UG.U6G)K h 4N Db7 $4&h:W6*ԓP"ߎWkj=$n~ UE"EcB--4q,Z6Bm{r6u 9p6(hLtSWi)f:| ?g8ȇg\4z{^~H>p* ߥAoRyEV+Ւ`Lc2kUjI\w՘dNHV=JQ?}Y޿a:ِȈڰ~/ȺecCEjHԕAm/rww@SsŴЇOJ[UVk[%,|3GZW6-9Ga_1^iQU:ؕwe3u'{_:_FMY-`7QKx^յk*=J8ȟUDvE+Ci!:}v)yG(J:G^xKM.sePXGT~w,d#Of1"?f1~^'?>NՓw1ox[@>Nݸf0qFKѶ6-`ڤ?W3U=hcm0~tgb0)drŤ%rN*\TŧgϞ a~cT$StmIzrUa_"ۿ'h6 `¦`S!&*62wdqD6uK*g~#(!!z c1a*IX4ʝjx4ær zʕS"u]&f:#G.Ad !%A(hv'L Gtyyk-@P%ƹYtSDvl;O㝙UXmAAU䈗=\[% wM̞ e35Q6qL}6qGI[ &&Z9e@CqG,^T'b"4S}l)feB NQ@+GTUUicVN}ֱ>3XZ"Ӫ1^mJZ)tY4t\oE_oEZ{_'+t"+YKm0u?vWQ&3RV=O,4F5fƙ6ӏ)+*y{7"&r$T>D<~Ce X[R9>YOI|$öulN\˜]1H v/I}ӵvt%ڦ\%iWe =(=Z6**j ghrIY"Lc8mb%Y$=`ZV~׆\3.\+oMζΞUO(9Ąaɥ@5 ]0m/iTJ,: !뽔L}3M 5й8y. o۟_хC|b= Dzlj+_ӑ/(;- k ۠ڐjgS=GD"0L۩JVDoKL=c>Q0WIjܓGo/a:qE헗odٿ1ݼ+a[Kb9.)ۨJʓ{Ah9=Z &Gd^W#V7҆h{ʼ-?8f!uh-˲+q"dg+dMT#F[wSc1mIX(YS$wC5>x;O{-Zn'~8I@9A.JcW$ B3A.{#q\o}ytiG X|^ ^oQ/"g¿RK]Lv %!oxłe¿O'DN+.ÿT,lQY!?Ⱦ<rk>ϳT |hE&DTS,?VBBO>dԇ/R\BB_R!D, чKSgZB%?iz [W#5Dq-'1oT:B}In߬񕯾Q-\x|NTBo1SI; 櫼y_bBo%{/W\D-~uIȯ0J ¿_'_jQFB} EFC3rNChP^9OO!D|ĉ8K%/yl^Qޢiч'/v?FttRek?և$?Yq9S>ԧdwIo#>g+RNyoPehY6ė+y&r=񵊘$&ݠIÿ_F( nпLJE_VLzE?zŵdI&=Ea&=ӢO!wIOSzB􏧆,'^|#ؗ8z~69C ~ϵ/?fmT?/4*NyQ>Im A ~bC ~_iҫ,<{#DvR>rBI.'}*cdB/}c\})kw?;M^NQ&W3y|Iÿ?[b|xI/WW">D|r>>&E} d&ݯ51~eч_Kq>a/܃*_G(8I ߧL+6Q03*DO%> 5*B}%- u7b2[ Q_1J,_' N[NjTķ}}oU~!A>!W)^C#U]q".#u}dg)ȾT%0Yiч+~Z%2C奄_S"> LqoDd+ž9l+k~-ȿń/UTcZB|H9~!R>kM(_ W߬_KNB1-t}1/%}-7]ҿ{M[G֪|"_Za-cdIU>DdE_L`F ?D| !-WD|l%~!!c5俉 w~-!cﶴ(+T>G+!σ}ؿb/}JG>ib~> T/*_D:W#?ݮJB5&Yxo#*BKN|5!_H"'_F ~j*Y+FNZxw 'jBcRAI b|;m *F%[ָOP|B-! ė*%O"~}&ݮzBSBxߥžͳǺ< X^HA(&;Q^BBK^/s %DA|1N|/'~>!_AB迒2Ņ7j+kI/&__O B迁U&f*n!LMq鿃?B(-2üL˜{Lz}J ?FEq]mI7U*Msi8ASy!?d-> QQ/$D~$D?jɟ-"O(cW0!ǝS(b}.1*Yg+b|SNQ_ kƶȗ}eK ak&}Ce} y{ZB&~Q;&}Ok wCoTl"~HfB#1Hؤ|'amOLE]d,3o/!_xIQ_G!~ ?@/Os\$DE?IT E?џbч$~"֟M1'&~"I1}Մ(YGT^C/Zվ_C|._BE%|J!ȿ:E<_`/:ޤ *L@ԇ o!4Q̈́(E!?ђ3|-ee~ R3ou|}؟II[L>n}y?6pIחAp*$]F6 kTh(ڮ=Ng"~+Y;t;N&'CK|_E]G|"D_AW)6)7 o&EO ڤ3 ?n ~7^{o2ݪiɉX߭cmr&D>9-=ɤۓMzE=2dvb7\Y*_ 6{+&=S ~Ϡ>&ٟc៥wJ/$ ݰyI|!O'6ФW|$W/2%*+!tE{ KMCߗys_a%Պn^XI{IokSFWQBԿ?ŢQq+/oT6BBaK; |}n6}I_{MW?_E?@EMOU>_ԤU?J$OFIQy!!3o"g_|oח_S8C:~/P&3 _'D|}ۤXwGwM1=+'~p|!!+L">BzE?IPy3!+Caʒ?ʷ[;/+4+3Q \fYbBr\ޢk7Z?4Zi},\f`]l ~G"Z3g7~Wi1>X>!}L[[3>;=;MjQy1!Z'J>o!xt}cB9* D1iE[G֒}_ ~[GG\򥄒;r"~9y;`A I!;di?ֿZ ͤgjP_IqQ9er9[bE/?f-sB儈/VyEOPwtR`ZnI+b4[uߺBazd:UBa&EI̟Fzw(D;m *I7Y W<@o ȿ7[ JsY?߮K~ߞ|M3.Vx?ņ{1EE\iG#T??7No_`;,B+-!>쿄XJԤ;T^O}ؿ5]&RM}%?迯!~~&ݣ+_g,TN|L}¤OFТR~Iz:&}Vekч*Bˏ{pybB~2_$xLMEB"EU%__'~"2*'CaįQFƯߤI?R.B_?4'}#[[Oȿ}~ji_^rB/067CWo?xDM GQBїqB?xLO"?/>; Ѿ5*" ч["_TnBRy[ύGW佄 _?8Bs'(y C_seƢӈM;ݤ*Ck̭LcMn ![-?x W[2B}/Oy+''wi.W|- G,_E|9m2!w_oPeuopQyimC>_&K >7)F傸e$w+S u~FtEdl8Ty1!q}jIN|T\B_J=/W\C{_G(}įWCy~0׬r[x~Dq[!*?6tt1I7| !S #n;kOSwmSy1!_cq>FwRqտ<۫FBԿY+䞲~/LWy3!/D-7R~PN7jS^[LUqE &΢?SsR$#D?ѤXaIė('t+1~=%Do'Jq)IT2BF>??C|=!U\Lz7¿ÿYr_LBw)^NRP~ˆ/3}wW(^C_C}]Q{ sy{IoWy1!ͤXaS;Lz чwZ;{-~k_A(\}#JBaKG"}Y?}^2wMQ#r?nY*FogB_O`ч?[1Fi>򹄨τg-s|U^L(#D~ɤ/[x2}Y~Cpvg;< 7Mo~9!AKg5O;gMSCR;>!1b#~$/Ҿ?6} %J|B?#~!GOi/I+<~RNGSž\Ay+xIC?K\5~S >f?T>KFE"gi*$/?ɢ_E6WE}ǿG9kʗj|s[վzRB߼(P;/ߤ Hw^?g%_yXw%_D-OO=)ڿ*~i|bg.kɄS/d @ׯ[\~3uʧj|-$~*f3cJrOSi?ycU*¾yK-gb^kBa֒?o!//WI~y&Z[ yMjP EgUZi?\Sy !gIWYa~1T^# #kz+k:wyM*_Lkc>k"~*o _3huTwv7̵|>Nzŭr.m#D ч]o*A(o^YxG-rK~K%?kܿԦXL05&~3 Q?GLjo'Y??qtO.'o+1~t?O5~'O]Z;A ߩ?&=E3 1E;ei#Dכ$>wE W(g7|a/&`ч7\bѯ#' o=#W2Ӊ-.?@̟O5٥q%&=Ss0}LK~29*_DyIsP3y5*_Jy!|+֓7Ca%įU ~#!N7)b[ o'wÿWJM>Bj+{IS5蟯5}:d~ 6#?N?f }f>Qu?:H(/g >/S B?S0C*/&ME}y}&}D a_?iч_XIQWy!c!%+_5!R?դo/V#rYb}9>oa󤿌}EbݎW7_5|g}FlŘMB&}ϢI|"'2*/'D<߶׆b|>Ѿ?0H~Dlo_PpC| !I?sү%DK"~~RM|"Gq Ģ /Sl~4Nu/2آ_NMI-?xNfQ'|-w̟nчį#ͿFB_O?٤,<7j|OOϧFBgXw#Ϧk"K7~%/5 B_ʣ_~93,|L4BدVE~fu;IMT>SQ?/M}د#~6!k!y6\7Za!kI.!so$-C7Uy"2l"T2l6YK 1l1E7L>[MڮzB?Z7j>o'N(s[ #n}巘jGߢBX[HMG)^_A?~,* "}FK\MWS&x? ,Q_ٽ)+3Cp7\bJ_$tg(^-cd_,<,T'~N+o87\?m&=CI/8&¿ەso"避?SC*?D'&Dz1Rem|ޠ2B/ Pey! Q_XE/!* ^UN^gG:B]&R 1¤-J,Dy|?Vg*GmN%h?_R ~!w/KI]/'nW*b} f1^ү'#~:7?HB\gnǝ&+b*>91ǟ>jҏ-(Lj/VMI_I?'/Ug'Mz@啄OW+k"?K*B_קMG_ uįWD}-o%_3.{*F(ɵ7߮&==?ew,A[߶'W|R?=K|^A-kFyAsOW>Yz(͗_*0mU j\JY\V*3iE%v9.hR_FFE+0+Uߔ΢+ߢ쯲"}UnE]U<@M] ~ T~GkF R_O77Y'Ǖ+k6ig*b~o֌m}Fbo֬;U>0C8lчė(}UP/ ZBa7 B_Xx/WP_ $~"_e *BZw/m?& wTy;Z]W ݟ*2G'it n~1Eħo&|!ƿL:mч>Ki_oҠ+ 1~ %Z WW!uI7Zxؿk_7#Oiw(/ HS>O%~",xIPyLSY{=ݤX3G{IϲmCB8jb&I/R\EĿf>%/6*$DĤ7ZaWb|}Մ;Mz~ !E|-!WXQoį W)65uc_z>De?'Lzg*&}Ԣ ~"5]*GyI/!D> #~K >_J?l??ө Ϗ7*'LE?I|PkOUM̟'idG!~">kUBaKTO]IR,Enos>b Ф|>ԏ\;~ۤYa;/PwM Ѿ3}> ΂#W}?O-gggھ 27*yAe} KkT^F_EG|"O~O|-!#~?|%!џhч"~jIQy=!٤Ya/7(邿wo"D-Dnɟ/ELa 1?Y gI+/tQz_kR7B?/D_]BUXDVBqoWl!ƛ4A } /ч}5E//п4пe:~: P )u=xL|ILB>(4>]eS뜤]a̤bT]3 Y_1suPhr[U#]h*Ke[,(/1XRBؗѢė).3sRauZh-\nч + JVYxW~!o5Մ_C¥k(T?%(_I-<&_O< >kMjTy!}h:7R&&K$?X6} riRg*re-}o!~!K [U#D2caM}o%~"ݟ/k*_@L:mчˉ/UMR_WW"tCW"QLm& |%!E_vG'D3E_ƞ&[QįQ\Go“*o$D5:>$~=!7s*@w~%m$>jz~?FOSj"Dg,w7Yo_yA>*ͤ'|"]>Ѥ7[aIV? l*/!D|<Ť7Zav+b &=Ci_Jt*kg_E񳉯QR1y*_AG*Eoį!/"~"_.|I/UBKLzE۩/3N D|wZA _X߽]WtIWx迎7!%w-7kT^BÿO'Dk҇T>Ng)b"ý!&~Ps ?Y{bEz}&}@儨?@c?;n; "B_g>=r*P1c*H>1EZxIPKI_뤿7,[GmK#Yh|_ Mg">~bo,Sg}ل_9_#_Z#]tė(}^蟿3,/T)Ty%!!G 6/!BW(%aҿT G"~=!Hɿ|+w"'PEMUvB-QN>P㿨ʿPǏqI(Ytk)bf]G|"ϴYfQE/ VL+*Wy!_iO*_#Ju*2kj դ_F쯱k}*2E_sZԤBߌE,ȿZE_3&mQy!ʿ9DXV9~@;-<$5]į%2agߧ+0N&~򽎻.}yMޤrטtDń6NXa-nR\ GCa?nɟKUNv}7\sE~)!=NGS NuS uTt,4Y=I%h'}eh?SE0Q$u|Es 'XBmc')m˨}JTBӈNthgtE=Y>ˤ| !}B7 BaoSė)[wפ-NLzʫ MEC| !b~>`aZa*BG,YJ}eS_F?M}9 Iኾ|=̍@ͱ&ք>(o 9nvȣC(x}lOlM'nF@Uy;(گF]_V3yckmQ9%C[Nʴt-瘥dj5oޙ}+<z{퀽n3_={|Y]e4[djvtz?-y@mjKv nΣncnan\  W.މisW'ùI[>v8jO2=QZK,2?,<Yk!{Z`lX߯]yGO{`Տڣ5ڜC7cC޿17GgTy]Ѕ[Lx1yKpCn^7m=61a '_]s4}GJ=r?Ǒv$ A tuƶb q^EJAgǑ3A;yŽZgzAH{7^wtڜX͜rmO,-mk>;6VuL0Ҿfo:U6Y`wuJm]tj낧] J^uwܐ28s{}ζܽ{5 ݋ECM-egOOJ{I$bY,̺awԟ9R3IhLdzkAѾtW0+*|HM$U^[T/Bh)#/_$ ԙIa2۩α-Sk3;R,q]K_ϑ9UUUGڹʲ):>:p /JΫmANu!򉞔E==f>-'J[d04ӌC/D2˃{8kB2N*٦EI^ b1d%xU*(\\ C;O㝏hUAo_hG{tabjԑR! h#fS 6^3wƻ9si.l#sQfj8< !GԪ*j^j fOa^e+UPԇl St7 {9u޸7^^u*|iC6)BybLYQ`zF`gE0[NK;;c]xXG_@?>92ݽ?v$s=jsOuye1:)[k}KYA4P9CCCyySU8)0HK1(#ŨWV52щ̮-z{;τfv1lWjڀSHv[S%^͡)RCM]  s;X%Hy?h`;~y[`pi䝙(f6j(hGW(I .uν;mYʎz6+t!-H1ÜӹvaFChmfPѾ/*\q/Iϩ" }PkP-ٱZ\tOiu_0Zcz˶aM>Y0(Lsc;?8#Ǣc9;޷( tYg\C{oc Fv =7eHOsxvG,4M՝32N\@ʺT[_+0=G$ht = a =q =vM}xoY{{ě1nx_x؟'UC;'9rNNwWbf:N\lny VK}0#}(I>hthX2UVJY<]}T+_ejv4 /ß*G&C眂=Т[ Xg-6X ⅯɃ#L< 6BcܣB'aDG?ɚ+:kP/ si;:; w?1?Zo C)gT#|n3}Om)]JNyݩCwRve6(J}@h/9%鸩v]a'oEw663ZTuۼC;«*۶l۷Ћ`l7TϑANCfwc::)2ļB3N >M~i/2WWD.|YCnϜnА͘ncF7T3,Ox ٠𽱡w19`xN;}+śm}X遾t?x{Gw/G;}Cky!l,Wz#_xWIWI8Mo[_|sGܔtbTO~3Ӌ@E-7v9C|=^A+Vb9Q9gI9 ҨI 7W/笓6=&t"R+"8E õq"VqqhX7hcY72xYm`DPdk9~x5{IMTfEl5b3K^rr}Qֱ9Q#DpzZZ}qV/QK zܠ/$$X{ҘNĐ`V1d";Idzy㭖wLNm49de<,LHr^Zz,9kI$4G[$af:Jx;F@Z[eja̕eiuZul7AG[;jc^ OWܙvu=MYT x_ImOsRW?FZے.2J5;j[?-h}5FᭁQAKzͥKgΤ.gu`7Y[KTL$إ]~MAadXֳҳ>K1?y M9} 'G17pN?18)Sg|cBK".ct|ǓT0I M蘗i;xpe1jx.0WNQʲʋp4Q8U gz^DLjN9^"'|bY"p2.κi8MYZ-QKMzܤKƤ8CDMt=>9bo(&M'%W[ ?/y ya{VxCxnLJl9JL;k'uv=ޮemR-tw"U,֩*=ucҵ018ߵ=1 GISKs$by 1Tg"Unʲͫwؤz|XǤ͗ߎbĕp[:.#m34]u^ Cz|H׎I,VH6AO =,-f㞿d,$2$gΦÎw2m&qWId`q{ndV z}|]jw>ip77xEՔ.=n)͢n%ۣXqqq:wָs|l &޵q!zܬfmuZunjZ$W]YVV,P+|~Mc0j!bǿd*bsm렬mz#R;Ky˫ cN؈)1\EXEuzW6Q8Ͱfktᵄf6^E[hhKTo褮n6^ePpmZSJ1p6vi29MYVs=n[xݶtt,Qp9n::v;>{"v1DÎ%{w-qMأf)qPƀqe+\/K) KYݫ- ؤM{z&ư{f&1z9VJ^N~56ϖݑk!vpRv_Cݞ&=ޤd畟w,>7s)Վ͎f*^ʲf|j<@~_uoud+ }8kר%Aˈkܔ#jIs8,cNuh+*q>tcW՛Ԋ&78vV2=z|k100HClrf9sYƢgLӪf8ښO <Ӭx6Qj+Ɯ@ZL~gSA}4kq$JW9 { ۿ=ؾib,O J0n22oZer qQj|׫^}_F wGwFkzR- _1tSV;ՒB=^;Q+kjqJ(v1zԑw fHykLzb||lN$94G>m,k"߇;OЕ=}ChTK\ѧ6PH$I97Wj}]VԒ ?,%z[gmuP-v]YVϨzV j醀4D}%6NA}=iKccB\X|JG~z9'?OT74l_I}Fqop[ gVbf5QPᾳZIMj!c|]er"={"=u!W'%MyNп3u4b_35`:\7^p(!]k~κzXb}hc8+'媵)yI;8{^H5긏( .eѬ@5_u;[[._u㝺G;ո6yY@8R3<5ݙg{[IZI{#k %41!P3uuww6 pÙ؞xc}Gq 9<Ew sWRT%8{*Qp@*XXTkK|Ο>~6,OIl{,/u+t`[]{}W!&w1 T>2 .E -hR8&T֍J7;{#!Ç2sa跢rPʴ`{H{JQ97/EI~SI]mw d'^5o:ߓvٳaWM|u,AFEL^f8;!ux;$\jm»OpRw_wTIb^]28IE.F wx {M} /V}yu\ /+*ݏ%cD4($OݮP>W˂r `[V}7^=/]D B7Ydw!$DMR>$޸ ?M%~|oG }7C\Ď(ClB#>X7WK RW-o%/#_A"_IJ5>+#~Fjr0DYqٯr{orBѼCaRP&KS_4OJk >_Biի|)!g+_@'kU[k_w6Bφ}h)67Sm'[vk >;_B-*_JX;`ч-/S\O'֪ (ߞ}o%IJ>.>Ca K"B?$X|=_%Q}OWl13Lńh#}O_B;_@ėBrEM|%27_Xy^} )ȣ}#%x`7@|=!$~"~io$D|]ODO<)d?I<D>q3Sg%w]oUmO0}+ŊT?$.DaI27P"OO3*n} g+j~=Ӥg,>jчgP_!~!ƗPxg-<5*_I(K?QtLzGݩՄ=%+}Iw|-!e#;~W}½Z%iWHyI*_OnoU}EQq`_L{K ?hқU&>dчo&~obyIoS:B[CamįWN5]*A чwK ^ޯ+  ч[Os'~p2dB/I1n'cӵ~do$Y/P}A?oU>C/YOI_Qy!pEB|"U}劫ɿM¿o;>& e҃}_k1wL~#!,ߠGo!D?$~b|!i>w)#~A~BKT?L=dTBJgCվGr4D~P'qM,wBjkHG_ ?N@|Iߑ :M䝄}?noߥğVw̵,쿂bEKҤU^NyU>mɟ.F/Re:1ʵ=&A+Xϴoo_IJ|!Ƿ${8S(a}(IroE_w>{s̰n|7\*_@K|b S}E>Ŋ?#_ot >dG,>憍d}?BM@~¤O|6!IEW?3ė*V?x7\k*VD|H~ŊɾI+ŢDJEEO 7MW&ʣ߃:>LS?63q}%פ|!{&ТO|BB7\t+Ҿ?"?&TK1ϱ#T_Yk > &RQ0}K7;{aW5(?]?O'?(&IQ?g>,[I6B/?_KFEU?Lofǯ%Tɿ1U&B/n WHZBWD|1 z7¿!g;J.&~"G/1R¿I!R+ȿį$ӈ_Hߣ&ޣ3UPח!of`>94>ϴsi:맘_ST$cO%^s֫|!֩|LǛ_fV8Gށ7>WAlboh¾.~5%4FkLZEh}_l֩RJ[N|"K|XRy=![Iٟm,SO|!_C4⡿k !-_GwQ?S-*AkԬ[- 3im_hKq/c6*">$e|ʫ GE$FVRBOI}M2EZGXi}/ZB{o$y+,<_A aJ7*$tw"~#-6j)][ƴɄS>_G,ž_I*ߜ' W>"RhSWgLQ5( &nG7_LE! +m&=IkO ч'YvTK|{"<{D~!A+/{2 ~aDחw?KQn&}^ ?w{_A|!JkhnWBįRl$PxSoRC1zo&DmdgwnŽ dm*IXۈvU|B;Ba^h/nޫ*B{BapяP˽_C}ZB6#}[?JdqmYSM"Ɨ/%D>A+_reb -&}#lBu3ɿMM|LǷ@e_%O|bjB_C'E_@?;b},}~NE_¢ׯ>y蟿"e*Oew}[(֒s6\a;eAO'~:e*o$D|Z_OdҟUIߨŢJm!DR>?IL_`L!}o9Qѯp'K Ɨ~9㉟JWO'o\_򒑜}w31K'gߪ}s.чK,-WjBeWiUQHM'~:!o38cd9,x%k<+wߵ]޴i;ң^RÛܰyC5Ԣ2NUZy96_E{ްkg^N1,LfZyL=9z0 TBuמ[Smgy8@@"K*{Hi25i]qySj$Ѧݣn7ڳxܝvEP-jI0HǺ'rM_(fb6!4n}ޱYTc7d\)bec8 ,aƳyxc{B%>8Dnk}Dk!i!ٌ!=rJK:hdifJ{%`Y9,P7z1v9o_;sJZ3ր>:#L4G92UBUjKm|gM{Szp4[yLJSMѓ}˞Wc8>0J Z[647z4F䐞o MݯG3뀭QT-dpNu^}TJ=r._HYLlqAfH*ή |س~05L\O Lϟ )zt=H{0NP5۽Q}5̉AݰFC&5̗oU=/ 񭰠Aș$34+] 'eSC=}mюcA7-FCN"i0>6qS?GDm0E)rJJ)-Ⱆ$3(67ߨ O;= W>9:`KӲz4S]\3T |r4L(ߔ)_x z>KţS)"3Ը+8n91T@PX?*5pqUUU*:w|05w]̍" ay/GJtR*3<LlvŷUkbsںτVN+alI0vJ0גWEK{C%[%uvC+(+\=}X7]G~bmLJwIVoX0\d1ɞl.S$Yg i7=)|N졏=t'2F؉OHJ:1'k?oT"S|3gș+xYڪ5w3Gsrkg]ϣws/8מUI` R+ENgd&+^Y }Y)AcIgO#M["=^YH Ҏ@/$\H "'ÅS\x^4~5~דA-}'1YG衇sy(mT?";B)b!҆4L™{MYIV \!aBTm և /[ɴdϺ!$DzI kLC(lVO}!?;/Ix+~s 56V:Fxc(U a $N4Id@ͤ?89k OV̕ei5$R)ʲ|Qd1v-QKuݣ3WWNe#&t&j+'vuud%)Y[ ~bT7Aap尛6Za'dz-wsӹ[xK#w 3VbvrΫqS;]MT. vɷ-l{pLǼ2κ1ǝ_w,.*uW$OqW2.q.:-.Y⭁p~Ns_ZoK3\Ev/+#ô@v+2g9uFxa;*.9kI+F #A4M a ^u,_8_͸hLb_XȪ6bcVƈw9]1둀{iI~>T[BF5Jw2MISU ^L2 e[XV^߻J+Iod(>'1xa&w?1`ڬuHo[{֖/wt Q16k[ gbxP_d29t$5:[Κ!=?>?:]ʴǙ62V ܼ%M|Ww>1pbHu{[_|ڽ\-xm/$/6BKʠ^aTi. ǺSm}וI;wtJt0ʲkO cxy4,.qvcWUqЪn0^>]V[zn1}.'=&[RrJJ_jD͵rfL +&w"?L\h%S'R5&M#R./v+-@!JL1{bLxb1e-DCGEL[*QJ^fmTNW\x"CڟJmSKH*z^j3ަX^iZbsê LORZ8U$&-gtNy,hRY2nO0P=*K_w6bM#q}Hַ?}\OdSm`/]<<5;YOnZx壎Ÿ̒<~!H,bb;]&)xR?M%~,AO'ل_n9O%1"j}jRW}?} T^AOOKIgOPJBBOg<~6!ꯚb9_yy!l/R\B-!~![J E|R_wO%/QE|YzB&DU@+ZB%?yJc"~7ÿNrCV/۔S$U"~*!Btǿ7&|kbcX {G(%_B_Jė;9$Px["ZqL:h>I !;D2:0('>fR7"v7Fdw?;OVD|M4xܤ?;@ *bX0(Ɣx֤>?I|">)'#*/#Dtݖ!Lqחx).|"9[,ي(IU^Fޤ7Ya4dw*B/7_O֖kݢe˕ T! wO ~-!w+(moPD=Ѥ'|3!Iϰ'fB!TK?ʷ3&$D=+o U~%!&aч/$*BߋLz^/;| Qw*֟ Ko D&EdsIQB!55^7_$//oA^{dB/}c}r<6|'3 1~ۤ?:EkU>C}~g+>2BME?D|"_E05?bT}Ԥ_XLj_XO7*o S>5b_ܟ4S}Uk %Y=@:EO&}V gLE&BL7}>D`ɟ/S6b~Y7+ w"I|*L[ ߃!S<@}CV<~hI#'5I_8'%}п:I_Ƽpt֏S.x d /\LTDߔI\0=!1%ҟlwjaYoI{aC Ek%~2_/}{_Py9q3"- Ynؗ* ~?IJヌ_B5/S\A9fW ч)6Lj_K9 Nt7uiчYq+?iJ6BO;w^TB}Gd?2债QЗ5-g^Bn O(/ct?DgD,EX>٤|>!S_]vQ_ǧ ~b#? 7)b(k\ .7"G6B_`wLN"/2Nȋ$NĤWl"'Iw|!̤WYQ;/Uݝ&ݥ*BCa.K{뿚ZE_k=*_2ΤwZa_R7*o&D[aoUl!d[T}%ĿR~I;¿[kAOR$DߤOZaR&As7m1|(D#T&ݯ*BBa~K8~ ʫ 1?E? ~2im鎿c\/'Q_ ?A(/m:Iψ|߾ItŹ-× y/"DC|K }+!ۏ_o?6'D)[1_fjt_ϦM!D~eCNۯMoLE-ܿפ߫}%U,__LW)W߈W&S̈́t֢$~b /݄Caߖy~:k)?y;jR^淨)CH3 ~fΰ~H4EMF/P|B_CaK)|*"!15K_F{t2+,uoƚT7j|Dÿo p*_Cot&kS"~2?[g-V.x,>cPTy pM >!m z"/'/ZMBB *_L|5!c h?*_L7svtE%+JJ_E"D,X?I#~:!ڷ/&,<@Fsm!~:!k&~?3sBr"?ė}w[儈Z-/T\LX[<Z/WXGѫJ9@tB̏MI^Ϡ9dRE]MLEe~8lRׄ~<5a?Lj_wtR[a}?IV86W=!kicS'O%D|!~\7tʋ _7 &KQ?7 &ݦRBїqIwXQ_XGJBO_hч'_EbSU^Mo7}*5h_K(&=3I1ؗYx|{. !y[B/YJe稜_FZN?$#./C{ :jIr${+_q|bi`-ߓ7i{Y}jxϿozc\`FZ6oJ$ڴ{B<~B4nָzxs M.Vd,vl=i{kwyYfzڹoGq4{# TT0&2vGI$^YQ#'x`PMG*;Ca;Y甖 36?hL*s8–\6%mx9s#/Fm<AEE s_сBb#_,Q.lZ>=ʛmw`2Keа.=SL=N܁Ssx&v=Nq7o }HBxg<# ~>А't!|0j$IT!>Tڠsx+|Ƶ_[3AINg;h0mO J}=q,fhCC@w)YoDOM@/ٺ:t8}!~ R>,ԏ…/O Uy8/[,@(v}4dz0|V F]=k*=eO |``Zt@jsSOxv@P,A}*(˕ب V&BC2NHzB"/ɚ )e|!OCoL8ۃ=XȢ5ٮg}k=woso47B*|,h߽F"'5E,K@NVY mNt/nN%UY.EYxx8W65>I8^OZRgy"sf徧 KS_Oۢ3 ga׈g5) ǤE1p{ ȦE_@z:nıX0JQ[R7uR:fMo^$Yk%l4ԬL[xotk깁RKIN[VInj݇]fm56clgYE==d:WpaK_/_J5@6WMڟ/CQ'(p~?48H#nH}!ҮFdkMv}M*FBzTOoBʪV{-=@8dIIl:=>ԁ7. W(Fo-O[,D|dE}D/;ћU{+znyvn*8o!)q謵x%ì b\70Ϯgb-WMHR[V)9=|3*>o4K^(Nq cb(V2xv!vF>ϱ-N6on'& 2_i+]澶iWO?"]百7X>߶W"w˿YNҸ"㣤z_ꮶ;N Nrƌ*QpD_Ѿ^VSֶOv-Duutn?yGzݜDV=Z[Uۑ9 &yxtDU%h;k51+X뉾n();5crO{/qD\܊^k=B{5b=p9%͢[2-Qd(hb7~tsqUb^$[38"+hVxlvr/L7j+bg*bn#1cY$. mޘ !]T,,j.?-]D"Jh^Ps@ǡ؂a^$l&fN׮ ;:ꫥ/NjϓMh0: Eɉ,hhW۞bX6iDc_ʦnm}ɺ%Ff /_eghH̞v]ar žũv0,$<~@啷 =K7L]B7H[aS,J֓p1aig2-u-}{ĵW`k_ wlJ#SZx]&U@_[GwYUshۘI+*ר9!kԓ4_$=I&7Q\ h5n2ӵ5jKH`H-זnA[2yça"di?V+8XOn;SsE&/ѽ7Jc L=~F`h*?s0f2V4444bf|<[tU0vۮ[Lغ;:{ $׬q&H_Յld65[dݞSMKK]V)n8X'̵bGzLgR }Ɍ Yl՜U6i,+dꚬ JT3ʰ(i>获e$ƚL$õC(Aƭt;>8ͻx!HEL+ۉEMT LXecӚy3#\c7F{ךX2RAlCc2Lka_)[j"vYVP<"mr[:im{oDC?Fh%z5~؝Vo5(Vzj CBa[n_EegOz%l=,8mG62]vvt%nJdtZ/<-z=6|ڇι{`ӴC(DŽp H  z2 Æ 1#MiC`ukIJfUM,kRx{I7tG̛V/ ba]t\A__Z )h!28kD<{::KɎSe?~T.rhlz9mmTM}J,1'}j+q-mxl> B[iǺR^XFXY:S;Εfu{1M{IvxfΏ"i 8R' +sdsm/O%=cg0IK#KVnKNbqwtϗ\J 2(K U>,v-E5FX~ uQv$竕m>=65ĩ+t?ĆsqSN5f;kb* 偹uGR%sj*Y]n t \-ykynP&Vij/1Gi&x%:R}FXPn7CI /SUo7#R`s;"|eya Ƥ)hx2܈A{x} (3ÿ͔QөĐwY;.w_(R0}ۄy?Mݐ"w$ (s-Z^蒟9$82HQRǮIdЯTbX?Lp>8[\U>^%P,VP*G)'Dqh~_N(&U\'O ~>D>I]~k_XE+D[jB$DZ_W>-MjP,Eq߭ԇcTkLZń>#~jF6>D7X'^f7}iįQHl_慓+P^p&oيsvע-UM!jj^oLO4ߤg9{]+/_Wt@ I,񥊕TMZU( v$D чvKV/IJrq I;H_ki??|Fq㷯J{U>c,KLיԯh߾}W~:%zΨO(&o2!Ca*^m_ETI&=#'~!)Nrp?x"0e<</ T~)!yMP_rAR/!~*!O'DxIw|!&cчw?S w+_mkT^Gu>R:[M_m|fg}B|L&] >o3-/R\Be^W¿wn$27}nW)6RǤ|=!!>/T^pIVFBؿ/D?E 6MCaOT^p-IU:BL>V8P?_4*H_ ч/+[Mʷ7BaOR~R=o$TKdOT?Q~s~m~tFȷ*/s"E/bK1~q`,?ԇL'W_}+y|IPzBCao$Gާo ~!?5yP#Ko"\j_F-!k"OZB%ھ^LPRBm߈#, Zי"N]Tj_oƃe*o"!Ӕ!b4*_G3Bax t 1! чbg(/H_"TKCaL }Q߽~e>W)?Ky]dIKUBKBa򳕟ߌe:&U!_}VS>BkCa]A"7:[߬g'D(/)v?]q0bsbB?G(:>B| !MB_Jė+."ˉ$~IVHIZ?rG\IKU/SwzBw5>\m5*H:!~h1{A?9j'| !#N?A|"]G:L:2BϵIKwBB_DEԧuFܢK & 3`K-?HB_N/U\I6"gLzE@|! ՄȗSy7\*'Dn!Ai't"n%XFW['~oU0g)oTlݤZx*o"Dfi}y,̈́_<< DI|>\&X_/2n>1uߗR jBe7(rܤW|!} K7_#!{]ʽ*B뉯!D7Fcчo"~"C&C-++W}ٟ_G{|?[MK|b'.P~|ji_Cń(M!%/P8/%$~"Oi"D|=`w,)>kYү'D?GBI_%_K_&Qq׈B:[q}-7Lw"ew'!]K5~JMį&D~D|!&Tk??1w}S*6RI?'DNFMdW&I3!7m&Qm!WLG_Jyh?W D}$/Eܿf-%X_N5cDH+}&]jчEįTkx _O_@EjE&M?jD/R o )FjBt>5:Kk>Z6:ϢggIs,<:B_̒:ҟGk$~IClÿeVJ">L_iJJt񵄈:(.jb=ڠU>>k kBtU0]G|"kד:B,F7x?IYm чۈߩIoW(m1iGI !Ə=9H(>+_K [wKQ/SD|J|_W|5!=eчW_O;l5U@o#~"-<췓:BQ'~"oOAvE?5餅G'IwGqC~BKיԯ򃄈}oSQ땯rs0|7_ID|"_/%Db - /S\AwIOTJB}"u_R忝uE&=#~!:ɿg=?cs-<{.">gi!nBEWxN(*`"4./'Dܤ{-.W(b}/ ^:B!*_R-9^g=CMoV{ߛߡBŤZxVM{v{Qw*_K %~ !>)">$oU^G/Y_C?|_17I!q>a'H+!$w&}=ſϚ9 >G">oiIK Q/+_K |_'?i҃*o$D}ˤZįWDK}ۤ謁N>͊&DWŎ_Be<ɤ?/?Z??| чNǿy{ؤ[xoJCvEr[տ{iˉc?< 5rr-Gp^|'*ޘ/9|_H'oș:BL*įV˹ؤI*_C]_Hs Q)oR˙j4 VB?o!ߣ7Ǥ1ҿ7~% Qsʉ#D_k"̵tN"ć&>$~!O-P)7~ xF.mџKiS<H|i5r/"D}9Xsʫ Q?WtW__eѧy D|τooX@|X93}&dчcV&u|.O~¤,A|1aĵ#7:{;&uiREw_XC6W嵄h}_K|?o1!K KEߌ9-O¥?7i|IM&7 -x{|7\*_IO˚r!{1ǝCp$|T.x_/&~*!毗?]㯬_8yW8φH|y v񥄈;/'^MexWk&}^i*8ǗWEw7c/ڤש|?C.9/5sg0>Y#[e{/w{(Mz|B&o1mo5;}F|I:{!/k7w^o${߭x !0D?|>P?5~5Ba~*OwBaI_P9'|>~U a+!U[$-_E!@>hkи*gpMk ?Dζ}bF\+׌*/#3iE/Wn- P?EOȤ*_NK}7?¿ ."QR?MDMMjчIRwfMvJ{i>O俕Tm?p)lu DެIV|*!䙻TQ?󈟡sig+ƨT_b`E+%X•_F*'&WR,BϹ1ʢ*dz~EOQmڿΫ_BT_yPU5OE\?IU*8O>_E|LsҶz/^ ?[arwuOr-EK:>_ۢeؿ3׫G;&f-ۤzBo}D|"_r7Yi}"\No":5w aߌTPnk>FJo+/cYk (/l|Ǥ6o[a/pqBw IW|%!7*-*W)r|s.]C7&]5!◒>vu&h֏+S __'LVh:--񕊵dE {ʗ8=_W(yפw9{<~ӤX_eT^ a}&}@[ _G Gah+T7f'97N^r|}ܤOYaW*r|}Ңeo|")r|}ڤ:1Ƥ[g_9>Ǘr-/L_4*JR>2ukT __7鷁aoh 7UoqA BϷMEC|"Ϗߵhߨ|"Ϗ'9WTW}ٟOqo4~_AN7\[5+/{R?\>쟵R\m ˟'H1ŹO0\I-_ػ']-m4K6I.itIwP(iҤ$),ʢ Ϊ "AeY DqAY?ww|dɯߛ9{]ߛվ@F?G}~?Gtk }f},3Kg, /-PIgTe? s"c03 /fN,\_)sF?2J*y/c|Fp|wI,jUd_ƌ&a_įn !>(hB"!Tc H9:@_CrWXB_ji?gic/D'ߛH ? ㏉Uss=UlkqsmNJ3 #+k}_G0p'?P\G C'c~bտO|g2gj|, WY֗ 5>ւqx.";|_p ߱!D|0̝9NN# 56_Dhq<|ď!TVKH U;*o"~"@d`57?Pw?8[I <ۈ_L/.'ss2 {?qy   BuC S88]ŐCNd4}LGHEqz|/gI:QZgs3kߏJZ ,Ǩ&[/ IIAD֯JE__F|P~K4c}?%j4c HbB+R~?O?_A__!Z?7? I7JE_"Bߛ% (B[il8| ׉K7'ۜyCs"3S ?hƯKzբ?B|!PǴO$= hBm1c~y1秒?Ή|' /'~iWO_A񤤧,?Eu K|U+KO$TWH"So$b+_M緖&?XW67@p 5B|t=,_.oA>PM}-j|B^L}OK~f}gg߁P?jK}ާJYn?Lp gJ3C}Aֿ)d@^ KޟE|)POef"^.Ʉ>O!jBGf}Ϳ?Ӏf$~!_G*isտտA.&PJr fʔ1#sJBof>!Uk5p7u7߬o<u6uXGu5W: y9g1= @_# Ì_KڝF+k+3'C^K?)@_O&~8+?ƿ< _Xi~˜-i>u')}1s@2e91j_d?@?M.RB߅j%Z+8BR? 9bW3@^nz>ho5ke6@>P-eZ2dD7_?kG?狦xj}@:?oϳ;6D?N@^4KzעwEIyJ|)ʉ.Cke_mOVvI!Jks"%kIBgƽNf_Ck xߠ?g?Pt;\I|IBPII[K_̢9P)[P-_I\B-g_%j9 K\k-\ϑk ߀7D#\/P%W7HUZ/K٢Hjd&3WOV ￾F,B-׉'![/ S}[/.!YRB-QF':M\B-wGҽ/&W}}^9g[K6 _L@JzUZIzĢ?LjdIPo?q/\xa[~ ~; O#{B-SPE4tYk տ_?8{N %}^K}-I%o P&*)I=fIBPc* yZB g|#T W Dg!_WjgY߇H_y/~]d?hdfmR k}zS/$46e%umڵ,r lIC-_@(,c%dtE_#P/iѾYj%:_0\r#! I-L~ eɞ; |BB  ?R&@>H_Y!IE!TFE_/"~,(IjC}?R 2>P4@_폳J+,vS(i2Át%cZJڟL|H+YR֬i|%R ɚJ|x_O&NB-9y5Gm?xYE-:BOY C WvNBW;YZl5ŤPw !U9j Zao_ q ɒDzGNZN: rB# ?JѐO M|d+8ȧMj8kzI jo W '}g0u7̇YWB^@JpB$߬ /&B/fď,yu2䥄Zɖy}7Pj? 9t"#ΆHw$~4dE|>pYC>P~ϕQ  @uA>P_?Ft OB>P}II_˩,?ʼn^\-ZȇyqXć /ėH|}p Hu=t'닒n|*Iһ}5:'2:H| e$fI_H{YZ|pk | &3"~d&jotE_@uEon{Q.s ?=ICP,/rߢP SQS}s ?@PG-O_E(PPӜlj_L@:zR/ _EJ3}įOOϐZ_?7爟E: zAK/ (7}%N}c8ϿZWDK#Jz ńZ?IzݢF -k ooo/&ER %UZHzۢ,Ǔ_=M$U]?| {τAB<#/;B/;MR䵄?;=@0;ˉCLBڿe}WRbOa}? s% |1!/{@hɟ+BAF/C%#~&pO%DȖzvE_/ ~es ɿ%ZAqg3 /.|%?6@_/.;>㉯%Tʈ cٲW͞x~RQ/o欱ī"||5Oƾu%sx}! @MWAG ~pٛ!9q5"T2eok?PG!\_ &7H:ɄGc,L&)j8Kf~B δ{; pۈ/VQ|l'x_3 HD$B- !LqbL|5[A.g'Ij|6?H쓉_LBR2fG^ %_HA{3}߬&xsDSB^s '^. j|O|.P}"'rŒ.P"@__B4B2I|:jS瓾W7_by~G F u~NW /v/A>PQ-}Kď7HbB/- Pj xp48‰K!Oy ⋀%T$>x_!/%qZK?$%-ȧ{ {P}?yh_shPO+/u'J)@^<&,jy}3IO@>듟_ p=N|!p9!${*d!B 4@]_u%st!W~ "Bݟ?+yk"YWjB?/ 7)o!B ֏﷒~B-$Ѣ@:EχH- rr_N| "鯐/")-Wr͢PwB?+jM\ ?ޅ|I[w?Ϣ[M(#aʟF"B?'rd B?'SRE]_ +F$8[%i u}o kA:9R'j:*@_op"BW^.?+xz }?` /\?睨! '@:`EW…j_دzȯw"G_{'KpT71?3vFX N| +դ&S U,9#4%~PY'^P/%4]΅›"8C?NPBÏbIB OB>P_"j|K%]y)ejru4㟬r|jJKx~o:ڿR-2<&_BNw/B>gO9_k_$H9:ː'AW,jė'7JIZ7-K7n|[~lW_7]]%;$x_A^Mw7S6:?|@#^jn/ Kɿ_N}UIZxA_M⋈WY#LL-?nF'z򔤧!&-ji5cO(B?s~[g%=yׯsW'% Bm˖q~=&yqB??L^:!r,/}uG}ްs wˁXOyJ odmu>jNs u~_Q7;QOsj}M0#]CgXw {A^JX>i~!$VoyM"DIo}2F1«lҟNXڏ_KO9׼qaP_Ʒ\I!,tI-@C@L|9Da%D|9TL?b`)/{>C>oH#cZa}8@hjU(Wb~gNH[ A>>E}"H}FZ9S tBFF_Cg|cү%47 7bUo8_W|+}*!@+}&Z5JoEW>!gD| ֯Lj jV_LOAS*3}㇟髎;)b}g.xהW 3, PEk7bIK!qeV@>PGc٢W_ Q}VC>PǪ}2>눯"z')i GIΡ-i#s #iE_o$~p)?֢7g)2ү[N>į'FQc] Z&Kn$fKa rc7c H?YH:«?P?9.| E[B>K u!URK297w^T3uS^t"!^{>?^ʫpvAn^C!B{3C oֶsy@bB"T^sE_*#Ϸ%y>Ik_MW Msg,j{ď#~Ώ_;]Kz:<=Hdt?"~&aI@>Pǒ~fW!~.p O$= RB WZM>OAؗ8sW',WOZ*⟱?BA_Iza@]yI/ yQK^_":L|!WH'CNd=񣀺2IZx*B Ns68}'TBpOڛćt_%(Bߜ?oEh '~/ H/!BIE_{j o>IK$g>oVu? }O=<`(Ri2 /'W显c-zv))2BO_h&H7GR_ȧb'@_%~*p&ٗ>w }?:%FRBA/'k־C ?Wֲ},n"C-H_!ȏ#07}xB} 5/'}CT_}GZ⯞G[_w7Mۛ<^Οۈ$^j~[$|o6濋@ߓ,\ \BvjvHmnҟO{2ī^:>ʫϟ^$㐏1I_'Œ.|UڿJ '%]4Bˈh&~6?CB*> "B-%__%WjZ,jW&Z&ϑj|tp^m$">_&PF;r-w37jno:}s$X $=aW_ $wH *B;%}ۢ"~"mѧO gHp!%qG-^}| }j~j=(^@ 5_ <X#o q6(ф:>F|)sK2i|B?^=U'ȷ…wE9_Ʊ}EO~K[C!~"7«q? o8KW|b7VCnPu@Q%hgI} "B̟? vbjJ/N"qO&TWg~9u ~.;~WUZxJ_H_G^_f|1N+H:!Z%Lq۱e-<rQ? |$ڗ=}}- E@?ḧ́PoFڟIx$mo.M#~tBRZBmY #׏] nOƌ~!3㳬mkˉ/j4B*j˚ߑ}2 }jIk!D&@_?#-g~'_C ﱒ-jE@S$C^ |m&~

0`ȉ繒> HB,G/b~.|o $}̢/$~<.p>y%q⫀?A!Rt>b8}fg"Yo\eO?OKEZHE__AedJ>o5/'"~H5W @=4kk<щ?>' 7j}k_ -uczP_dO{E/K <0'2(n@z͒n|HӢo%~4PO2E /#jkW~ߔtS}o;-hGҽy]I?{/!Kw-j~ o/&}B? ! W{JB-ߏ"\G Hq񅤯>:>K?%>XgE]<^ U)/?}:>"// Io7+I<,߯/~Iz1ھKzբ_ ~,QːWRJ =﷒~TB[W-kh'?ovW^ߤi '!7:N3!B/S-?E?͢@=6 /&]I,j=Kd}~%#Kh1\l'u~?jBi~&O%T,O'_ƈf= /Iʅ<HKE}?B ot_J Y!ďR|?T ȋ 1?,@_"POW}|<_ƱyėiP䕄kdo%!K2__8cd_ Bm_}_L|c(B}?Β(MM| o ' $_OkUīhѧ9W|Gj|ΓŢ?XL/BEď%O 4[KcʷL ȧjGYտO[+%P}xz~>=b8Ͽ%:>o EPoˁ}6PX78e,wMl_zp1蟿K'z|. ?;$Z~! 'Hj|}lɟpO| ]ėy|?IR;䕄mv[5v⫀iW_C&>*K 5Η ڿq2BIP}1K5\L$9i¿B-gJh_!z#~t!BYI_W?H'_-Zj^OW o<ڿR?=儺~͞G?D_,&~Qҏ,Myr[!Ms,jV+ď#ė6&O$7 NF|-w;3uTwH 9ZwJעE\j%}W߱俔x?rBc__I$oP~YK"!K3#|P/O$=aWG|ϣ'4cn?%P-H@t"ǓďS?_WO E/Rr|_Kz|B9u}iΆ'>#K"u,Z eˀt+~B]V, ?3 R?3I5YgoVu:!%'oJE@LU#~ PxK? /#bW o߆|  Wo?8#=gw{u-o~=~)!?7rS%C~$!?7MRE]? gX7p!?/{,7lI} ?wnN߇夯|zB\KՓ!g0@d/ C/cxY3P%Q}o:_rC>PGl掰ėZo OR>zp%ONC죉!#WγI[!/'ltE_o%8ojBOO ~&N$~6p>YR ;%bWZ_\Not+5wIj_ /ל_ yK~OA>PrIk"-<~˷WBWqYyտ։,p! />לâo ~ ʉߗ%DB%}͢o"~P% y--jVKR~濁}NZmIs>{-j |)ܻ$}ע&>D۷%}«wH$߬%PO> ?>%@Xxϳ糊nʫp /\5_ss&qt+~aW_ '$=eU)}O~~ ^)|[ …ϾN\s_ pϟ+//\F>P> _ YBB]I|X ޜ 7` %:RBoǷG;e 'u|Ufx}ߑy@z!]d ( Ͽ#~ 8 7P'}?&))X He3֒L>AM,$N%~>!{@?2"B׀}a~?yN3TRE_?X@YA>/}y3#-C1d?dC (ӕ g|oRE_C|%>2`E4TBoXKLʗ!=1 ?㯑";7 rx)ܿ?Pw @Cƚ+ M 5>L$~Pg |)ZI!!c,zkudH~E!@< pHbBq3cfWj|o&b"> vIM9>wH:ۢ/N y)ω,jq@=6 y9oKo_Np΄Pv'j|u_Eh7kǓ%b5DBc_р=O"T{%j?P,gZO'>3q!NQI[CN$~.t# 5~. WYIp|Pgӿ>AXƇ)%.|"`/%~p 2IPrIXJij|^!J $5TBmk-G盆g/y|Aҍy|{,jF I- Yҷ-jC~?P㮝fHPQ@=4﷈/!6+ȿ%aտ;HםKŴ >=}O'}ZCߗ # 5WZnO Gďj%=b#?Iz@?ƿKzˢ'>|,oE_?E|17EP3W8ހ|߯$J JzjB-%`W#~*E6܀?A> }|E8@P?Z5 E _IjwWG**BXOO }LP-o"}j̿x#~ېo D LJ9? BwP @?f~{jB#~*p:5>YZB̟ZxO%? H3G"~>PRْ@#iE_CH| +?kѿ W-!~ o-?~kI:Blu??.x~(s'vA|!PwC /% WEKn8u51 ?hb«Rlǡ~oe,8< Jg[ !jJI!I'{Ɂ3-j"E@]09@_O!XEe8~|tie~6o}3 -/t_Q? e;{/uϧAwY. kAo|^K|? d񐏎_A=x$c#QėDЫ%m4>xM}ďN$Z9>6"qc} Nڧa6I; Ϗ>%cWv_6I:z?!@_H|%p:o z[.gvI!_A~GM `#TOgo?fdߌ!gB~N}!s#.4o/~/ ~ha@O"Io@^A/~?FzljA~.&~li]"5J#IE_r|ÔS>yAZҋ}G I0y-jď,t>b8Ͽ" A/HE_IZEG_$fDKϊgFI7C>;7IբL|p.ٿŢ?o%E+įg뒾 zCm}įKe?o#6Ev7GгoC~|=tE_6&>'De?@0ߗ#|-t>k8Ͽ z#cIg!~O,AGA$=z\ғ}q+}:3ߪz?Ez+F~mE:E;:o~S^_iD+Koo|7?+?q7@o*x]?(…F>(^Doc]pbr/Sgq_lޛ3DsP(ӝΚr+eڣ] .[p9k.^=p=}W[x,SմbJ]?Ws\^]f+֮%c' RLuymjs>nN \e.-(jⅱeK J:eΊ `WBa"х1hLp`+}ed$=YQ4/߆NbWo#$+/['Ȼl0Ѻu=ɧ.Xmv=I$;jLK0xĻkp;Sms!]ߌ^<5ekxo0ϢNFFWMg%>P*/ D$q[=[=sUB&d𛘱!vDw^#]YE7%uJjIp7=%ХTë[:gn3Wݼhvx pԙPor۟;8zfL~Hztz*H(v6.ޏ nmm -[sl?(rohȉsV*Zo1{[bٵ%^n}|Rdܹ xb!@=!]]%P+$P| l#dzb9lMև=۪疞IW*?D@jC MY3`"N)z|`/>ȳ&?vTV[Ұ}?٨I?XכSoNp{sbd>TObB-Ohuܻ$v{ĝRYK?m7ޜgA+VI/{׼ak5o[/]ԛw͙3^|ȟw>u0l w?ĞzB{c|l[d2?hG>d_qvU]j [ܗv7W$| G'8Ǣ7aD,{GNI?ӑg:w@z]{wkw|u_ z{({oS8ݽMs)mg~3sV̟[~';TcDB8wwY…O?л?pmIʓt}XޭR {pIf=8n=W4vwEܻ"]aYޭ[>,?}u>?=y]vՂy,.~ЄvWz_לxvW#>R7d𳕉fϷ׃Qsw-;(*bN{)HAyH́?[LN}2/S*Ƨwtn7>@#? N3 z-u~TO^9{:6ڳ}9kօTukcm(Ǖ;pR#346+;E:w6omjlmmmhj^-YjnV߶o+!(")1h3hW6.ю_/aGcÉ~nihjm;~)b`[IWllUИx1j&TJ>'ooִssM1_]cCG@*++&Hm6uc 㫘8\zQg*XnGS{(ܹ$C=,1PVjm mokhlkmionrV!9j% Dn)D+:jgir |`Ѽzy˶~cDtNvO}wWl3t`2bnXE;lڸcGp[5vEw ^sWsc{-jhmv߳y^ɃڷHqֶ]++*+Fλ }` 9= ~qr!pa5~Be ٠q23t^.ӫ*+^dtjl^E[3minݚoQ:R.njUePRCxF۱"M@5b][wj6'u6 63p |olHM{>?۲u1w.шغU~/P u!`cOM; k71Ý$ۛ*&|/Cmkɍ PQ3Z {g:K1O ̇;h'sޘ-)MZfofwHQڲ=gvMmqʎY_L-fM?3*[7Ex<Ǵ颯2!ov8]תhA=y&LϷ?۱t9v{>v6)]NtM0ab4x*5Lб ^Hl*RS$ iJw %g7hlk WY\WmM{G̩o6۹WMJijVo/iNurJvrgDFi~-m|'wۘ5 2fd9,<8m{px7x.})GǛBČM;ͣ{~s:+TYMPp괃&#Y2nn ynbw)WD5mMgs#Gscw ڴmo OR[ܐ$|w#~n:U׸![I?뤳 xwf,8e^в߫-'4 bRmoMsvqA goo3YA#QbY7wYڠ'ZY.7.7Fr#ZrwGۗ92[n~*f`M5:vn94][.1*K]bh mik=UG廙:95ninjioZȬպe-ԃY65$~2;|tafd}x G{1ȩZœf'~W;NܯE3vV^Jt[bmo ʘC1d Y:v} ʝSE>8ybѲ2} /$BlUuG6eD`t"i1榝&_ g3{;AbdcwI$I]}@WV:l)"&h%lIGJv3w@VR؁q:%b*c멬#CiS \ޥxC/EmTұ=Tk2Ħ|='N?Gϝ&xw8wM?x`;)Z盓LyMQoLQa[]QD-5)oik~gڭ︲LW;3"_0;tW/mirϪ NHj&,x,X2XbJj6,Tztժ݇Rsu`+ZN&/NG5kxLW}3}kzQD)$S2>zE"G+DM!FT\L'^<[ƕ]}81e>W yiXD~'%pt9hWƱpfl&, (LϢΦ:e7['SHm=y?9)%UH^OsbAQӪũ)ƐYw]9  AFV 6c:-1"+ [ǻ'fb^_^~[Bopj'z˻|xDx@kg+~sllܖ7`l7dvn|^5s[H2v3쏙3 3Y7>rl]<{DZ>^q˝D+K~/q>'CCS)a)Iz̮uܑsU^Ά%Kqg'm,Ε%iuxGf-!lja!۬5d&CC7BA#Œ&cH^I --c X,,jtޞJ:|Oby++տ yϼrW~5 y ϼv! a&싵 tyq6 lxŝq\;A+I6> }Fb_oreIZ VY͕%ib4b'rtTveԵ*TL/&_B$KWz5^#ͫq"ˑ.wР&Io L8݈(Ó8VG*#770%KoJ:nF\}É9t+%ƾٝC搭}NmԣiSO[=o}u+V{I'{iɈ7߆/:J,cj^wV=_C$܈x~ .RzĚ5k]k$3Ҩ :)y RHq&%>{"{GD6 0WMR9a9-hmnpWI[ #iw҃Nx+K``!A7t8Nd#m%YWn$Q 0mC l=g`::z}gQtq]w%mnX>Pݮ,I Hku 3If/ˑ$!&4;DB…#ے%mWSfai6lz[;{$]I pH܋vw)e[v6ukճ=D&\7z,<G}=k:puyI t_҃Oboz#jV|/'l^v܏@DaW(د[/Y>ώ <^?tωcW` \YV_>ʒ,,u9^?`>_seIZ}V ljI|P7tL ' Gܔ՟A7@jwֿ>hСK* rDr+a[Y'.`Fݝ;cIOC?uSVK'z"^Gϝ.n),{Aq< 2K.׀gqA - n.2&x#{~f54p:~2V} -iוxTVKpz V=+_ȼ-X6M|M$S+˵Y}-jh\$mK_M=3~#9#+:6} sIG*=ݔ` ߃|MIZ}D߃|ѕ%i5X1r" _sS1';NuyzAvҏLA2,+Ka nJ꫰dpz88;]Q"w63"{>fM$I_N:~w =uQikU>/R+l :__ouὅi .>bIj/ʒ"gDHTQqK_g뷒# j{VK'z2^#i%5&m_dp)IoÒ \WI[,ZqSV߁%pI껰/uSV߃%q=K>X27wo|QLIv|Ibx X0ʋ̫;>_Dm ζ%E}DZ":l1c5,ޏL7̵&V|lspf%HŽw3OH);1z̗H2#eCʡѲLǫۢ#8ѽ6h^̲v@Z x96YrH915感K1=g)U3Ƈ=AMaҒpRO$ḟ좑YL8ZpAp}dd'ZF1_co~~%~~Ey_b#[t(s##sӖ6 'mGUx??zPi~A7m[뻻65V=je\&\_57Qݻnom>W^ㆎƝEm[[:t`Y?xE L{U[߼kGVR䇍3wn٪"0o91?DίJ_VirUCU>w7׷5ZO!&ډZ5xddf3Sٮ c[o?0{1zvvc-;&O}¶:ldOFu[fВpf{OQKC1DDݪTjc;ۊBE=-bbSȀ$"MSџBnG3Wh.{̏$/LA[㮒",g>q[Z⬵+?czKf1"12 R,b _\޶% +S[jnl˖XQE48GMJT#rZ20۸gW} S6q2+BUđJʫBn0NOCU2p݅c',5+j[IIUX+ MMJ؜ĸT ۻU2-T9u7ƫ*k"(v6P(R4Q;7yl&#uiU4`{өnk\`^[~Dp+=#IZmZgb#ucT c9 Ӿw},b{)ejdV N؊ 靡x(u0e p}ȫ֊cbbg%{J gIhjp %{K##J5ߐpҁN.5CĈTN(׸۴FI7Vm:84H3 uT'f6tk:XĄ͜pc+Q-[wRa0ڌ͍;ׅOgƯzy&e,|J y5kfbR :`mc⦮jQJĖjhm,5Xڲ=Pl,bKQkW^7SSaDMM=5FXVā Sc7tj ˭;E܌C!-;ۍN=J<:sq[z"'GTYU,};t&㝹7̑ǑK޳”-YHM^41*(XνsQeffWhk?Ю嘒b-u*ҍij&j٭kyH7aa,9:یpcY7M{˶Yvfl="\3.pEck]'zQqdt=UHoƲj,poXY ?6SUZ<7(s;1N-CyQƞ:6yv} $J8[z̈{yYxactY{BQ5m֮iu*~Hw_{ȳŨкM!Whmo/-E氎Bv2lҼ7TuN.3Z=M{C3&nmv)V.llm*#og+!u wG_Zo.u+brb6'!l~^7%"1<9W>+ܑ}.)kʵ7xSe_v8QOp}~oUscb]-dL (K<3)ۉ~()Ŕ,'L~䬷蛿宮@qɄP>CZ~&!)|: QEcy3xR)Q-wz}:ރ^ƿNw-$;տÈ,t8%ƾVKϣjx +$~(j+vPZ#K@Qe"i?8에Pۧ4@_폳rZB|}~>/$D|XJc>/T 8Bm.ďN"?PFTBo:#UTL]OΡ5?4 Z3,}y/#Ts':WvdBm!s-Nu.ȗjZ.W'ݐ}|7tGSi/n tGj+o ?PD?ʫߌ|#Bf bj|~a%/B^DIG}6фeď%TO_L&8 fmt%6,U?P)Zg#~[8~?/:j|}!@_EF/ʥҽ/Pk9Ҕ' BeuabFD# 7xx__" oqŚ?Z?bɟ8B?͔jF`E_B _nw*j!,jNy*B_&~mI@>P~ْ__)~0?esW{IPN?gվ^?qJ@]_q~r/k?$~7[|.aF}?L?!~~/$T~_!HsK8+H?E*B_v/5# +u$~ϯ/?KGk11j%'Nloi|H; nU+ DDBS_|?: pܯҟBid-?Ky _ ~p?k|6ϿP6u?bs|q܏Hy%{ג?G|Bg 1/  /$/\xo _I7{_ yuXW;)}!_O2%(B~[xO1Zgp^|M/d4_! 3+ ~"p'KK5_J)&OhWC%SZBm_YsjƑ~h7@]?qƒZ _B5d_yR&@>0mϔ`b«r_H嫰O/ "BI cϩWj|N#k/RcտҟDu7ʫp)uNd ̽Oy.?̅}PC$-$Sv 1eeiTO,2 6m޳B߲NE_$H믔UWj|&~"P&>dMk¥|2!/)눟)e)GA^C嗵zʉ}(k3dH9YڿW_M'=:o"B%[x m /!InU;/%ap^|,#T-;t ?9 >mWy|la5R.|n'y}p=O'?E}5@=4Wi$=5@_FlM~yZgP,IAPlIXx_D;ג?GbBIZxտj_di??S|,%T?aOֿ!n~aÔˉ" ȧj|~F-j/\ %U"WK«kH6Yso:j_O@M5n|)}ג7PP"V J |?IjP^Sn'Pwt~b|2ƿ9ȢMTjoKiZ{o=gj#P~I߷ICQ%T:_U_.7nfx(y[xA>ȉS9OC"59&>ω 뎓QHBo_Dh_EIBc U-KHď'T_"H&~2!~*Kt #")/&~j*KI?R3_EhxYJ0CG˸:!>sJq0$5$B>Pgwz0_D+UC E;0@_BƟ}U:L$gofD5#i-j?D|>P1gb` }SK-jcBΨ3&@_폵?RK/l'wU!!DP`WƴjGRgXտj~e,L(Bij%nTфj&c u15q>C:Zz-yZ?sA;OC/{ԥ}-GT&/ WGXMp  [3v,#TccW+HR2Bm5f8MQo#!vSOkG_KGC>P?15SXB#{},ed͐$5Zf+5>ToU'o[,O F*_%,ۉH D '$BͿ)jU. w~5,UMfd ›>0ߧ_@;~@p Cϔqc 5ϖt.ń>s/j.P}|>J/?|ȉT?J@OefWI)IW@^ KS?M|)ΧR?C|x_ԯ@>PJj?+jȫ 5> &~ΧR?G,BS?O|IC>P.@_y@=7@RB/fQM^WjL|x j>h^_7 Y m! Wl~@?M|Fp5Rr"T Bm;% Bm5t/wKzZBmN?D_1 B^@ u~_A^gw"UT?E_@?M>!)K ~ WOY3Tqja_H'"E@!'^{|5R߄|P!@_Z5IC>PjuI_7,?;Kzljm ?_gW]QbJxR` 6 򉄈4I44ȧ~<>7? 8tgb~O ~PI˔ B{Xտl2C-'DH 7H믴"$8;Tr)j4آFB Ndѧۆ[Jv/>W<_ UQoR:4WH4BjB %GE?ɿ!L\Bm_Se}oxb/#jU?P?@&6Ӧ@PO_ *M*jBߚ}_Kg|3g!4!lW;/YډvB^MwZTBY |MQgS k9_ܢO!>kIAkOZ%Hgi"^7cԥO&9)Z~3 y5G539"\տ$BYE/%T>Fr }\^Wj~)j ]foֿK^qϦx2*'_!>D/\z 5~Kg9%g@3ل:J Iҟ!_Hh3 IzâE@>?{ݢgo 4JzYZ_H |}_/}>?7P|꿇zU{tOw{4B_z5(_qN{>zF>7a8QG}I%~6PWWz?I/ DK/iE_%~!*I@>0@_bɟ o `?m<9i #~&pO%DHT?y@:L/sGK!3PMLB-gucbۼGWj OӍ ȫ 5~~?!W7I͘9/{jznOXZlG}}-Gj\1r⋁z>c5O&\X7TSgA)j#Xt~nGOc/j6I:1@];b'rƣB5wC>P㧞IZ-B>P!@_J|5P3m'~;E5I:ل ߉kZDPk%~)PׯfKI^?j_HZ \DƷ-7sr>pS%y?ډc<|53_xBϏ_F!/'?+@_? @:O?OWF_$O'X8%4 a~ oWHa>WOg%}  oWIQjjI[k ;J<ńZ W_LTBEK=EP?cot !Oy~ENߛ#^.K o%~W$} ?r p Bo#^tcSNޮ}7y=C,/rJz| ?~ 9}@^Pҏ!Ǐ/B8&x_,+ 5! 8DңO!T(@=FLBJlo)/As?s~E_@>yޢ/ U7#PZ_Dj|ՄZ$~UIA>PS%T/O'T$^Ffuھs-H?i>Zw 3ϻއ|1^>e 2R%C>F? I_,s0=`B3sU?><|*$nUp蛽a_xx? B_FEWAʉ}" _7[x<12?WjV~)S UӁsHy3ʉ_)1kO ń?*_JhxٛfLޜv2xo2/dB)%&C2c!yN3\XdH]fL|$ڗX3$2kˈ/GyJjxޢW_HIZKPwc@}~DrBWWDI^o&Մ;/"^wY6:u} ʫ)4~ aXz'zIgAK&ϔtE_E|2Ζt.5ΑtE_Khxd"I| -y~w$x<J!4Cz>gIWB"( IWYտ+ E_C^C%3&;3_#sj\Kg}sd<%:z(QNsyϗ1 n?$~ߒtWtBvKj%<qaP_-ȇHzբC|Y8+{%W,j{K$}@%%Ü?dW'緦WIPXg h' s>'j1ÏZOZY9x&6}BJW?#ZBc߬]N|1$ Bc|KIB>PWk_ EWW N<5Z/Hz«IP%⋉WWf[_U^?MQקƿoP"_/$›7[p }ć<>ٷ!KDpb '@_C|PG?z*B#~PGǙO'D33ZH3$e@>;SxY}APc._̋%]$BOK,bP}{B>{[g/̫$] y)e^Mx ʼ"5sUȫ >GT <:?|@y/B>P___&~9w#+&I7[xf_My EīW-`B]| ʫ4~ wcv'zr{!JzԢ%H2'~Gj''}?t%P} @CIC>PGjaKR? ?~C~NPo\ғO?Hg>%iȋ u I/Vg,KPWV̗!~<Մ: E _$KcNW7&ąo#$JBmZZ귒[ڗw?'?_{_xھϴþPG,4G~R~%Q ƗV%@j,g[V~}ͿUdE:#X\٣&":n(a|9 "OUY<iɒ1-k@Y3-0 Yb3k8 YWVE_'~ _D'+y !Ɵj?D8`oF?۬Wu1[G矆o)_ˁ}&Pg 68%u5«SIhB-4KMLϝw:Q{e\GjHeaWsy|`Gj 1@_]b%k䕄+Y+,2⫀y/L~Ƣ :>Δt䣀דּMSg_@/\֧ Ds. I:):>}T҅}|⫁t4>5 BA?P/$T.t)5>_J|+)K0g;xEﳒpBm$]kWW?X@pY_|8ߌݟ#P^u T }:C@߯-\֭|R/_nt#/K٢H|%dTBn?J`Wk?_;_#D׿ n u"j.@ݿ^ u|ct9>j'8 fo Ӏ:~Hzk=D3տ? XG=LB~LeWsS<>&w}-O/jί|ן? 5~$~2OIzB?~!}ikud~C+1s/& %~,PÔoC H()d!~p PI &D|g˚$?=ilKZx?">,a85ھ-WC!jA_e.<Hk]kWimb`#L[8C~I'cevW_D'? 狦/!=x Oƚ)^B5-G瓆i?k?ՉdM]pB߳%-: !Ydσ|$}?ϒ?pK!mc>!iWKH_=A@*Ik dZ)â;[^!Km:IGYz⋁>ҢOeA^N)n;f- H y%&ȫ JlW7?8gџAe, |#xq+%5@P˿ERE_o ~pU6Wjk W,$ʷP`i?? NՄ:>X[m| Mz2{/#?6[k,j/?&t+5>NtE_N3A|5o!~*p:w!!TΒw6:#\ B#~ί/ ~BumwCP1IYbI@P'%o-ڿ~kI3U K|#,k> _>/:ȇjAҍ}@]ߙ^җ /%}1@_ɒ)e@q@}[-ڿ[~o_M[7/%vGj&>ڿ"wH 1:>"XE#黐O$'@_R>:4\L2}9~«78#4AϗYy.|>m~ O?P秈/_Hzф_O?3ď%%%ZJzRB]Z }Hs|@M"yR2>C }~O0B*>C,߫u}cw|ϐWj_ WQS &T W>})mȫ /އP!xc"sR%C>saz| p*ٗ>4Bs'$B~$!N}_W#?P?3 ÉJ3a@̯f|̑欂/'Qs?P'KrY'' a_ $~$+b|_s@~8p ,>cS?K / 3m4ǢKN:y!!r-j<#t~SfWN% PZ'g䥄59S,$}:3B*B/{՜Z'sfZ5Z}`8ϿڿfY׆ⷆP?ZBonp'cRW|oooޟK <&G8MũVAL`ui,dLg}'BZqyX~wVmJ@a%,51/D`~Y1ַ,Xv7)`}R=k?;~.:{kj>b%=r%LxGs>$o¡M\ZȞeqS~Z¡.4p'r*ܰv}fK1iuSnCvHc[:g02Wݼh[Bf`DOk>џlTm{_';$Wzd: Q}pg%1%vѻG6.'zˉt9q`؁&Pz ý녃m]/z t>Pwz?+=A]O>@ˡ&=Sѻgk_d['~WwC?oЎ|=X}ug.5Le-~IoNzս30{b]W4stC.3zso BE`Xr|p7?cu?vՂy,.i4WNc렛>Pi:&nk3ٓ:2Oki|@Qs#LIL7qFzz`xX4Oe^Uji7Oo~P x'aO~m5o VLhAdu߽Z4`(Ip @lؼe[+3qzsS{SJ|dFsfeg"qCG[ТM-M-ۋe>KYM[m4SgcֳY{,csWq{[c{{SkK5[55w;Ϯm~l隷f{]▶-[ۋJ]\s7d7g7vDN TimeƶI݈do R< bpWa&$v7׷5~sV%Zk;;Hִ_v4ǯ/IknlL7_A.dKYvu2k)4݌:sO1Y!0v+k} Hd*@K Ԫ8u@vJUطt$[3w4bO8hcox,,L35VEI+5y)Ӗ2 M栘ګ3|vo&NhTH`bFNM1r$"tAB7K E2wjl8]2pl򂰽ԘkzɒeTs}CN5$\f[gڟ㷖iLzD:g{ckX]~]Ҷ5uotJG_^Ǽd,]V~a{U[i*Jelj!1SVe}[mM{:_ńss+vvUg\ 9M:̅{.Vel:N,7eb5{*lSa`cFZ̸|8ӶwgCPG_o.xj.8fl.{OF9R*Q6TJU.RA4ɒews ^Xp@mdش}GGqB"Z&.h Ўzo~sƀr8:R8a_7)lbUpmӊq"u 99fxHі5ͭۥ A)ӧt_P<$0{gý@r1; *KvȑoH7:?롹f`M5:vVgA#?ڼw ޑޑ!Y+jk^XֳqRY65$~~eaS hVK)^մ։ro9]i|96Yt~Md^YmǜՕ d+1yǐfIܸs](O:%ݩ2/k<9u/#M!8Vtz?r?ʮ]8Pb5&Ӟ"}- 1ȖmI6mBcP7qF]{*%^%ߩ9eGSÎ #&tLf|O:VuHPP~'-M-xvm,h%@BLY-;s"F#K{pe)AFΟoLΧ>Zc?%х>ִsW`lNfֶKԞڱn?oLR1}LS˘ت=ZX߱-^>(}r}HE{7ݲ{纶V_|H-q)p%8iPCΞm2iR}KHV[u[]J98Om[gm>tzw뎘Sָ-by}gy;T/bmߚ0'ռ0Ii [Eu/=SqeIZ+z^UG9ada!x\OWY@.S}5>pIIy\Ժ~+ۿ$ZJyn:O\Ɖ(nKz7S¢}&%S2e,i6] 4jz~.-yf|mgI?oJ[@X@՞4s!?Gz]U^Y.H2,EEGXzsfq42k2i`L3p=I[-2_ rǍpʺg3d$qc}L:}yPnn-\~[euf0)Q5hbNRdf j[r/ZoҾes!}[{xn2q~>eOǕc:/>LqX- ugq uEV+ai=V$N)N;ٕ%iu*,tةX]J8NdR"Hڲ;d!/+ψDT3q{B_gIɈSzwf5^S`d\OS $mu/, x7i’ \WI[=NnJdPo'3X/>$ K'z"^ճa ߕ;M=0r8;;G3F3,#-/73zD>:[omKc}c?8/[YE|7uk='>}̈́]3vRMA6bgj6}SB$ =)ŌWf\]Hx}nw,2˲kY64/||W]x|Zx|Xo{_ONE{j9EX±'wB2XZG&'AljLNI ON4- x>%^ |"pgz$F-mmoOɆƎF[ wfd}__:-};]7Wqy㎓y:w6omjly]/8|Zyo-}"A3iyr[˛ZvZ.C<ʮԺ-=Fshkj9~ѠZUm lnX[c3f6ҞHD4uZTQ6zSϒLς'sfj)r ho-NZf=a} -$'loر{˄Ǝ O0_m#Sm6]ܲ54yYp˛"ʪ MMO؜8T !&*IXqGy԰?UyV$lTSBnsm7n3B dAB{ii*++%bNmt3.3[s}yi+^@&j@d7̙zL47vH {-#JH\Wwi4b WժHHx a<#Ds&fbb6Ѽ8zc1qWS^ O)q6$,?T 6ܺkw4n5J[XյES+43;T̠Ǘ HzfVZYI%כ̋px&3MC0l4!\ҹZd,F%)mZj“Φ̼kE4SJLu{&61@6r}s,f[)עljڸxps<ƦMX`m@Xk6l#,_DǸqfD9ĎsZ>sFOP4'=S/ϕ76CAbhSԋ獒Ѧ;F7iJfHwCbʨ͌\&0<5u.Oh/sw,շwUm[9L H.c7׷^lpW~FK҅Bx^qp{`;%pr ʼnC: ~)S%{xƪMgk';Ρ@qQSCƚnEͶjNi~#r"B0~9s ֡u>$wƺD+OTJ# zZ(R?]j9d%WQOR1 plOҤeZe{p+p7O԰?3݈=]X"Ӕ^Ǚ:~,|-XG?3ټMvg}"ߋ)'29CU-]hwTm]Cn_?[6 Z8y55GT~_?׭;MP"':<CsSR 5]q:$gMn8N&W" 7'eqrty q/?v:!#_卋#Q?8]Έnc[|V?[jGL{5N{F|uSf}`aiATý!gz~E d A[jxn@}h3+77\~df3&k :l}3EQO Y5#LzDdmgi2%`ܧX"4ee4>a)"ZaE.)3zօҏDںЮ嘒b-I GK7ʀQ3Qn=v ~Xi!뭆6#XV)nh#['mm ?pβ 4cMyjEQ~ujfˍ# {{%4ތR%He&18S7W+<7(w s_Cwbo =Md`$^gSF51XUύU5u?Jg:Uvi7HG>*@ްswuI|V=!Bc_W[OnFhjɿPGk{{ni-2,wh}D*4 o>k]F~aniVn>رŌ7[u[]ۡF;=.f!{K.bF߭(ulf|Xxwˉ-N';C"LOc\e>LU+.}<3É*gW&*ؕIpgkt?Ub~(Z?@|pik-oe"@>`Cgj$^0_b~3hL1_M|>p tE]2^__^ƿNw-$;䬯F`1BᐗjÉ@ܕƾ~|RU#97 }EPBm#H>D_L|ۧkE-_iGڙNQF^CS'XWCDZBtp9}_H3g:K>oXZ'3B$~*7KRտَm~}9Ծzs y +JB(@_Az3Gej9 /uZ}duj}|&7웟8jS?x̷a~~{&|QaKopW77 ?PެUu~1D5? /ɭWj3S-+S_oPwRo#~.ob|G^O&y~X7OO>k3"9I>g;dBms$}ŢKRj$2B-Gįp"?"/qȏ#T W7'%]yڿ4@__F\dӒB}>*k!_M Wׂ :/BP_x<(fȗj)@_Dǯ+oo@PՉ^(^+j |ǒ~ ~(; ޔ.Y_x߻Ehe|фwK%P%8#f?>$BAkȿAY@C>P}/$4fnrܽ`@G!?c3T! 73IOY_㒞P j=-f2bPL)Y2cwX5g/|גP9fW? O&E⫁ȿ$˒^!PWHWߒ~-?i?Ju_kשo1XI7'jEd %>?ؿ(iPҟI#~/czO&hQ3[Մo'jHog̵r).K]LПF(%K}grB,Kϥ[A3> OYHBYJ}.SVZ-Q2֦,_J Q,sV)?\ځ'~&!o-iNY'iʫ Q% eh~N(i&ү!D7I:)O%VqvW~ ~!e*_K8GZwS#'vpI+} x$oJBc_G)_\;R:$u|"R:EEu_nIU>诳AK4UP{w8?SWY;Ge¥K u}r>5<^ B bBߋ,_K_Iu8_6^ISy=!Gxo#$TTK#+H BWZ ҿs!'Gmw3Q뉟4}|>!FI__CI¥ܦPn /&Djo#~"/Sw%}#OBI7)n%>M)^OSDI Bg}}BʏF?=@|9!)󳔯JzP3 _>Yo|.! }&ѿL&~!!qmQI߶ۤ?F E!~5!.kɿ'%=eS=K QgDB|i(OR)g*M3?GC*G= Fe" Q_kI7+ɿ#/F?ZxG_K8~BU~5{y(#Fc˜]嵄E?ߢNE|9!O}+~o?BZEy25ksoT/5Q7?ETO05ÿl?P/5~8+P~ߘK=y(߉(FxXp/!K&ܢ'¥Q2B]Lrd_QGJBh?:EO ~&ퟩ%MPfBW&UG$w¿w*51Pj)7"X⧁)> Q F셑_ӉA ~"gS6YkV4+.įQ\K-%~=![FFB'}:u+H!oL5Nx s>  :K{S|ɿX-NVG+',I_=*/SeU>GF>N|"ezʧ~d,Keч3TMwZg.o!#h)  Gc<$iG+pY.~ dYRitE[/"LImt'(9iԡrBْYT>s~ޭ*B_>w["o:!ÖasAhMlg:0\\3ƗiƾnJq_n>v*TwU>^Q˟"IE-_x|#R_WdB'/UcII)}g$ݧJBYIXa>q~.$}A }a U\Bʗ}a+!_u>u':uGTчG_?& o$}a 'i{>'_#C<=X͜򩄈/#S Q?yI/B,( W)I|5!W~ג^ÿo%^ >-{kW,+Ieo!:B~u7ՄcICOvbO7T>N1D8NH>A|"ϏGXI*KHaWFK?徴T+5҈T+ͤL&%-Ge?WqC"BK|"GLrB_}W@ EgE#mWj| ч!) o !?͟?Gj|*o{S63:w#?iN1SH<`kfj?N+RxB/i}x⹏ XN>ĉ~WP4cԢJG="-Jɿل)C O&&IZYE?Ld/6Sc wLnڃ}?"ηLI]QDBďEW-?I_Ƭy*H<* -7\R?Wq>ٗJbkӖXb(.'/\ZW /cuV-G+KVeK봠}Xm'+㿹gQ$mz }Z.mʫMTC7KڪS,+Պ,¥Bϩ/ $mWBB>;3IT ?;%ė~]q|5H ڧQ^>쇈/W"{,U/\0_Glj$i$X~+*٢O'åu|1!⫕ZBot GMlE-a?//PUc wXҹ@9γ#ՐwXpi|";U\Fϗtʗ $ˢ/$~VE+ >o#D|SabIQK|{%};~Izڇ/A|y>=9.t>WHE$\C}/nQBEUZҵ*_NtE_K EX9Kʷ"'BؿAGU~*!F}QkIǨN'D|}\җ=h ?M9u;U^FC}ؿrE޿epi| )哒QBB)IZ=/R-~.*_E uYISjB}>s#}_[C헜ۇA|y/;G/\?J RX'ߒE">8?,Q'U1#oчGoKz\S}s>>?N|"֏񻒞R,Bϓ>|?o_r7<8^~,>"BNT>>x~_X"OrX$TKs_||T>53u> 57gs%~"Tmч/LqYUZOA?,G*n go$ZaoR<Ţpi4B߈?_ʷ">GFZ:wK?,A?7FXTLNh(=Cy˂~|` 2VHB$Za0;ӇPiM?85e;Q0O$'}>F|4oGÿіgơ"^xGF>7~WDY*ď D?R1|zY }SiO D*HO" s "~*!g_XEsNjg*&!~ Պ5_D"U_K|!Fq-/#~!r7\e/;'~ŗ6 D|&d”HU>Rk%SxB7}4E_Kڨ >?ҷHڦ鄨>R>ZέYs݀3%RH'7)kNI-}EEzԠhݒ,@<%Qy !'{,d)?-T-|j'=ܿ: ܿ:?Y1@%B[;,E߃|!>Ogù+&D|ɔ=^w`}f"򑄨w?J+ÿ[%*BbIYQKHtʋ Q~'9wLfmK otI !R% a0/vV5fV} >}tʋ KEo ~"!QM*/Q7}>*n>D lBY_2\\|3E>D фC%}Ocyo9wÁMIOZD~H#N컿M<_DX=& &D<OX$BR=;NH*y9EH|@o;'*/Q%?K|"2c#_QLBs"Dems&D|G /$4ٿxNEIVY-!>5Kȿ _/Iz#I=!+_h'gK|_7u6VUIOŊş!~}cGed:w%_O#DG*E?9}Cs a?> 4'HWFǒ>LFZߖ:-c9Nws`LXBÏB'7bCU>O4Ң?I㧩aNRy)!w>dɟ߆s7GYG+o V/C"Eπp/VG|*!꿈x~G +dLTy9b}?i8_a|9_SV 5z5h }؟Fh?o6ZdH_Ϩq߽aK=}د!>H Yf,VyBKh|-">@<.*N%~lD2!k%}俌|7c95:g ~"=X)NK &WIZcчuģ+j _C$DW~b*_Hϟ36Iڢ:Bm}ՊV&Fm&DOQ~NBB +.#dS Q3%-'+W]}zpkQiF(9{_',o D$5[YoTE[w~3$D[_Gg_GwF)[Q.I-\}.A/HR~{/!D#~{ m(. G_h<x_o!DGz7Ky($]>rתɿ?]EZjIת| !IYߵ/U#בujBʯDBf)$ݢ >׫|%Iw|6!N}ؿˉ^.4eAh7}3xߧ6}x~`v#?W/'ҧG~*H'2,q>{BE<1ǯH'b}UIYakės O!D~Gaɟoe<2Bcm&!#(Z,ھ[7 O ?J Q#~ !KUKzF a_|E?C$B%=B?чg/U$L ??чYTsaK/~.ג~򱊼M'ay;I/D'T3^">@<. $DY(%ل?#W߈_L^k ÿ׈_Ht~agi?I=!__<%IyGHi2U^HOR gf_Aퟙ-)W3s|.Ut~Y i }L/&~4_J?¯]N#S̵*HLOg>iчi)sQF(#s=NoP_ʧ"6?Cq6,iB_Ƶk-+s;et~ݢOs[IC3S/!DwL2$T^G7Jkч!W+Y>o3!ʿOZN3( cVv{6¿ۉ_7RjB̿wJEEŵT%}R~чOZ'Dޫ|֟A>GbB_9W|Qҗ-KįR\GsL'DPQ艟_BeoHʷ"oo)R QI|>!>]Hp1k//\x.sMO+C_8FXxb@ a'ʛ$Sj '3fn~^x_Ëď"4s3%UV,rϯ%VaߜբbB$򉄈Kė(|%򙄈?+$TaogW?K ^WhEz~E_'Po|"A|"?I|!_!*N73QH:򙄈7|g+3+B_҈_HeIee|ᣯ]UqVu/5ʛ$[xOk 5~ /$C(+b([ fDxǍ,KNVy"eD|"e ~4_RO%I|!_tG#1OSwY$WlBxI*&DOчIď&}4e:(o,KNW(BtG%cABQ-Kƒ*@RY5}?bEz5GRKQs}aڒ 5TɄR?PV'? sOƤe*(%)RGڪRBr~eJS ?V#Uė+2ffU,BدчQ&7Hڤyh>~+ v۝GI;U>ZYgJzڢ;/TG.I *H돬 %|1_/$ + _W)$ګYЗB}俗يyߛQ\L#iVk u%mVE5DWZ,t~j8׿mʟ7HN]/Q}V*_ItآJq?d@ɿ(9wh;;!D'~"=Ⱥ@E*_J_(}|1]}:?4_!Zh|)+ Q_HWY#D/tEgZ$ɿ(wi<忊()r#DtE\,\ɿ( wk3 QD%ݪ(-n[_f@ 1Cn|!87ߧCjB3S{%<}ŢWɿ:Bה??Ď$ 7χ$=Մa}?Xߘ?.;*E}GDO^.y2|n 4'3\P_(ʟLh fݿdJJWxBO4آ7._ IY*/%ч,*b2y3;_s |a?R>:2[Մ?R fyGv58Ob"qh?Sv">A쏵O+?EZ)~e .Q8E_ӲXa"EĿ)é*/UDKbft_D<.{gʈHru~Ȯ F$U|)!w>"~o&k ,+nPތ=Rs,ggч_XJ_**f>I[aW(i$}C_IYr߫{_U>GvZaj+z5}/oRy5_?w-<_O @| пꯆU*FMҝ};\wX~ʫ Qw?{OXx'D~iBOz/x?u|~߀X~Iykeާ >@|!!ǯ oW}<>>(*%ڢA|@oJzH1>~Kҋ}Eʧ<_''aIOg-I)RʗO,4Kא[אȿzBg, ZBߏ_MhNt|-<{|v˔7w^RXE,>D|@,*LW,GK,U/\Nʧb~33q>i_$Ms ѿ*)}7q>cUk*!D|>FBBnw_DA|"_- &DGaQpn!7'ϰ/Y?uΟ9c|?u)OTVF~?\rt#sy{T>P7g,'^9RRTo\Wy:Ģ;4I*VB >_lɟΗ o*!O_Nkz҉y.G͙ъ]sY4 JIU^L2ޢӉ Sw3BcL1~ 7KO''g>CLjo |(.8gk Q̢Dq59Gk-&\N9ˉ_OG I+-<$ ~Y?}Hyܿ6JڬQXI}LBI[-5;$)b3X }|ć<"~!:>G|"9@1?Gqٗs}ab+boį!D_JZŭ䟬s.S6BĿgs>hч.jIh7c$+$}H1~_飏?DZ5_KI:K37sxp|4!f([T^L,'*N#ZrVy"I9sn'~"/3;$ݥe;"c,ݤ'5s5Nta׫|,!*^IUy1!?#>,ȴ}>rB$}Ѣ'Bq6E6C|t~cZL|B,<¿-_'~!盒!j\\mp=$OR?E?B|"yTc*FW-83?.;*VDz4 I߳wQiﻒb~}?O(O#%D[aGW+֒g-/\/TO_J{NO-<bCT Q/(__s>[%DF-W+r΢k%ߗ_J}Y,<~H|%3rBO_3~xt|2ϸGfC:] ~Nb|տQ$E?]/U1W07Mu|M4ޢiW*R|&7Ss f~&1>J=P*I*PJB?_I}W@*E_4DtEQ4E4?;POPKNA (>)s%b*OCn5h$~}_EEz+eʝՄ>?zBğEs-n ?poIC27gpC ʟD΅C_W0B}W*oWA`2!??JQ\7 v OP>(G/WA7?#~Bҿń{+Kug~6W;v WbU7}..'OHzU#Q$d”H;~JWU>R1DGHW aߜ>`G%HMT^J>GTE 򹄨/,C _5!RU+r}A![*37%=iG"HӴCQTBÒcчG/S}Tc*A>?f߱'~R.O>-*}I/Ya)"MKQO8Gg~LEb~x%T?s/%D>9א/EIWk⋈,KpB<ƏU?>r<?ۧ%~$!ׅV(ŀϿK?D?ӢI|| ows~yĢ!~"߰\TWjyUQy) _^|pn(|RyƇC_H'!DѾ|aR> W̗iݣ=N=Oƪ*V{^e}د"~"ΗMZ,o'd7Ǣ3DeџDSy !\'+jժ|!7JBԿy U^E-G Kk}f(bjbw%>Xo4#o7CNǗO}ظ1d,3MU}2fmPhE_Yÿ *rZ,o'}7I:ӢXNoM6+g}|!t}n) WӠ<:T>ْ,A|"O:->5_%!RJ.J?R?/j|ΉğA<3wU>{[,#EM|T*@GoO.*HϷn%~"?IC啄ntEA|".oyv8!{Ǹyo7!~ !T o/|"oss}E /Iʋ KELDI_UdB?_ч?E'7: oV J#SoJzHsQoIE=D\EeGU,(H޷-~\Vb|xRդ]5h'_i7}OVSIXx Fi_tbK"~>"/HzQQ_ 'OTOVw^Ry%!`G/_}@q.[aďQė9K T>)e$Qy9! }?bɟ+?Z(oOY#ğLhxYGI:I#E7?_ a@0>DxEz>?X *B?GOOW o*!D|9_E<WKzVK[ i/kq*/&DN~E?QKSuO|b2ï:OчT&JO&@q1՟*%DIY,o*KWS2V| !G+,!^*_KhߦP3$ʹ?7Yeٖ@|%PbRd-ҢCX_b᡿q;)WXUP?V?A?e-aר.\AGH[VhB (||!"iEJ|"ۈBWOW,B]Z; >;ي5dE EAGoiۻgH\=ļWEL^>KDE<4OY*/#D4IĢg__Rgbkч(. :Tч+bm⿛5įUJtX$kч?Eq?ǢM]3 M#/{U;}į%}Q ѿe _b߫k~G"/#~"@*/"%}Ģ.'~"WSWHʧ"~tE?D|"[]E"D\m)=1\GU>GQC?%`aҟOno=7KUŊXI_#[/Q6Iwu/XatgbG&~!S.>WD4{%}VK !XϱYw)_/_y&|!W߲W/VDFU^FyGnɟw +q>h!KzTՄE?J"u>?G|,~ل~?'~"?bK).(*_NJҟ,įP\Kߩ|!^_x E;˖ùw!+b}i >#Aq_^?%D^^χ79_C?t>A|"GOQyWF7.꿆+Wy"W)^))[Մ\>&~"9} 7k<: V2x@Ǒ~?UN`$ȋi_`׋-?U.R'E}C Eύc%S|B_>쏳?"K/vb O|Xs:iчR a_Ze*Gh/J> @ڂ  Ohy4_I|!gX'T|"=?.EdEz~\ s}\ sI7k5 < _翏q'@*HϷ dPڢ+/T ,<,_5pBZ\<~>ʿ<.&T SU߼2mW^}T>Pgz>ݫK'U$;/$IAbfH'T>^K ?k"L?s3U(ht\?}%u|"PpK-(bdt@ׂ.'*C<=*A9HLBsT>ÒaG?[q>?ע;ȿBy/T/#D|_H Bww|%!]>ď!}j|~Oy 3TIhH¢$~E*Kh7cە$]qÒ#(т-p7Dӕ]K|bU>_'F>Jd>i8׿9X|RI5v"c\;u5awy' MiGKE?ʋ 1>~Ӿ?3I &4WE*b4{/I£'Be*.&B|-!ƿCeW <~Ss}[ďQU|+xTy~}<>B⑿p?V BϷLe=^bnw- +.&߱/&'__=M|!_3?TFB3>ď!}?i|>AϟKG*r|>/- (/HzQ奄_JE_$~"η~_NpKO#D|L|ߜQҟ,<o*NhK?*xgIҟIYoď!}Y?tb~Kc ?>BŀKzC ?ч7,t'(b|5(I)ߠ4I*N.iEg?C 9vPgj|2 ~6s5?PsP| _M9s?Pw Mù3Ÿ# :HAU>RAr=hEG?FD6P~W[a!o ~r=~'(QAL(VZxWJ_S,G痆k?i|V\>> >HAVTIJ>_HA-~1ܠ=*/'D'0%ҎO#DTy"%mTlB}9~M}z?pv|Ơ-/U7mt$#SW\G*t'D;GO俞T X'H|c#!ݖb~1OsG_R+blw-B|p|JjWy!M,N4E3wMlBoQ&:%u|!tEu?I-<~ !C/TA6;O*_MS}>k7R|] "o"DG/俉| aKm&K)>B}B/S CRXB%]oч/TՒUy)!w>_kɿxݬ򩊘qhЍn7kLyEm*[%}ޢ?F1@w;U>w,'EX O$p>*{U>i}ؿR>:4\\2ym~+_Q}s7o6/߉/\|ȇ~y>HTn? 61>?FEz0qI?Ry1! '}~Ѿ%~2!)IOIE4S[9>~@ D/"uw+_&dBSx|yCu*/"D!~/ ~?v&ɴnW3o28GRO"4~/k]| I,?_*x */$wIC-e}:_1$BÈLR#U^J%V#OQc(>sA?WlB4?G.j8׿yBؗ1b0}!71:բK_Os[Jˈ_N\R >"~6?ݢgğF惫U~:!+iEW],?Ϣ'b|OḮ(b[ C/۬A}p7C/F>^uʛ>x$9ݑ|%S^[vn\rC;zX+[nKk롚V2Ģ*.A7ҧ[6\~-d$ZY[+dl3v u[뢵Lj%;G0h6[immxIސ+x$}}6h] qj݊*Sov;מś?'3{+E{ˇBRyI Δ{sDסּ(ѺL$Fn9z/ H}q`IyV[ؗJߌH-szޞ_q2^XVGP}teMugnǗ_23NJw$MjI$N܊Ivj]~;W.GW}&{t~4rllfLK~Oz4z9 uG1?uﱖ(7E *b/bۢ``K -^KC&K$5qlw:'P'P75#>ػ /gbɖj ol' ַEg_zI-ֺ~wr5Nt[5ДK9}&do<7IL /t8{[.=///tltL,W{KWI/Te8{[-뎯뎯tltL-z*ŔC;"6YףoҲ^=ׇg|cҶ?K/ أ|yvm)ܛz=O>(l3pM8-1GoX|^?^ItOWw:`}#[s1v||@{r::{uQ-߼OM.\嚀N7?H¹)zM>z(LM\:-1p98}.qk._go@p|Se/e(O:ߌ@>ۼߪ_ 7qzo}3$k38gp8_}wLWWWWn ]VǟVZ o_^yhzX?h)kKj˯d3?X}f8^^_{}JhjZmGbQ_ ^#-igJ:A3+9u4o& +@qLRKi|zΝߒߜ|~cB+̰ḥ,vJF8TrD>>q VK[cuO RkʁzsSg^Lݡf btQԮPK(#j ,ikjj[{׋y}U U[pWǏԊ~R+f&>llC}_<܄=F }sqgrj,?a)g~_< =%ůe\̀^UYznQ:ΉoE q:[6m]?"|GZka{Y5X? 9BI+@Ee/uU }czc =$vH|QX[׉4L?f ߙ-bdck&?a扔boL'=/0gkq^6v7wvzF];%{#^jۜM ؖՀN(rjwіQ$s4ȝӁ/bwVփg@)R{^koYƣBH2ć)'gB ]GQ3Ȝ3ڗR̃pbc-߾sp<;/^w hR4mOW{G8>jw}C{|ow1#w^sSk(1aR/bew~",(P?J>s&s$joqkGj(V }nKQ=Q[ߠM-Aw 3 P˖gH}䟪걌jѮ|I=|I{yƺ z~(@#zm&籋_5{շU'͋mazoҝyc>18#}+O8'cP&/$TYYZcxSʽn"zx˲t3=|ɿ=_U qN~_dxVuknj*p4Dc;+@;W/+8Ǘ=KB˞ڥ絏UP}-zAyj{9[G;%FKA{;;qz@V޲:JƜF;޻N*S3PYGE'^]~R\C[_mjnjzOցC'B'N\55rޗw/{، F?vcٝ'wٲ6g; mox5u v*Jրvu۞@TL)EWu4Ͽ}*ز^5{/ݞ_ Kz0s3/b'aaN j=Zf H1]gGÞ&HmxM(KE-ϔ[:B{DmWz]=V0'3ԄW -  v,<׮AK (" Ȓ:^#Z})%N֘-' LJ03u5d>mhvL)yP5>jz^S47G1%";5$[t$y8Sc)_lOEtk֍ܳν':dܣy̌sי׻Zn/{lfF˧\^]ӺEG~Q}gm>=bGQb\i$6ޅcc"[I׫g{r(LnϞ i$SCzg&ӳ=HԣqY&Xg.4bM&!}kQ߇{gĝv$6fI q=qI\'zƕ[ܙރ== $zm|G0GJz F*ΊȒ_j^Ctuɝ) yVSl'2@'%iZ-.#$V 4"q"xz=ֵcѷ{&sҽ؍=fD8>W'A83*3 ׉_H9?q~ᩧ22GE#rFʤF8#aj/2D^ۺ͉cϏȒ?=ܩg;OLgk.p"#ϻؓ "$[0řz=S?;iozqD+-WDdIZU[#iDDφؾ%;6f I7ąZ #)I%z~h@qK>wP2 i}Go.>N =˵5({Tp }8DNӇK"1 c}X{BlOlsmÇ_"bi>||Iҭ'r,s{lZ}Ns3˽|x{גQ=zHm˳BBZu_# 'm2dp^ϗ HaXX@4XO|̝M=fL_ُy9vIdk  IGە7|eV? NCI[Z;7~8"KՊ^ϸWk$Y_ސ o|>}\Wzj/-7q屾ke1bᤣ*'2R uP?_իMHWGdIZYsgSg, m`NȱqQeDWW'H-飊HDdcG1%8>f.$*:$-*n@ZzmwG1%"ikD""Zuޠ`I I[Q-")+-aД| pޫfH?3OznadϽݬΥϟMUs">ep^O%ms5E--2es.KD(12p }sV-j4>M?!i_TK_#ib >77QS/3N]q8T9a9}~ F NW")I_UKW#)I_SK9O%iqb0D8>IǰOvh>ٯK?2Ѳp1}ZQyb8>IIZZzĉ},I'nFRV Ns1IЏ08N9f~tL< דo8 R~S-\K7$?@Y^z'zoMϵZ}H[^ޫJjaO<I39f P-#dp^O?Jj`^WgOk$Z2E璶SSO 43dp~ERVWK4#7ljI/9r3r翖ɋGC_Q>_0pE .%Ec?/[Y}E}7uR>KcРDyzq.|m o&~+ssbB$ bS9/1stsYPx3nBt_%uXfYc-C Пʳ~x<'T:akzub_{1"럚Ai$bo$bE[odBA :NtBIyB)ēq_of}=W_ݯ )zB /ёiwGu'4?r=ixcb3ۖDNna]lm:G:{`msO}mVN+Shݷc.*Ud| oHO)9%xhަ}ݻ5;B]?9agLyVk)CMX(@~qR 6QՊq.a_a܋ܾoi:-^! Rr{!4̦j2eΆpQۤ6sVP 2#9ۛL6?_*'3e@M :'B5^5uvЂD n5@eBEeY;UH 7pr)LwAj\gYDѦiST MD1ɮ¥Y.'t prs{9PkuF~hrռҮM"R%%\e$ɖM[EIgѕhZ՚{& xnH&]**2x\VW!{ )@kGɇ\s{)j859&K"эWno-1{^Y@ɍ,]exv@dU'lEEf3[ Ze걺Wi-O00f@"BɇV,=h dֆ63WI~޼v;h;UI˟&nJnyGmLGHxFc_7>#k9,p\S+$[CYffdsat"V>M-yHIZfuTt,=U]\,>(4{pG]TkK݋sX既W*mw_kYTKWf,:e愈iD4D:fQ%N$`gsk8Z8T,e}Alu#Fu8-W5;co:%riw'«sVֶ]y٫vܝn`^Ke߶]VHgΰ`svc< ;nWI7϶lˁPig]2Sn钒,YB!s[tviHm5[Υb,H̒g<l$%*\oL{TvvuuZwd%hjm4p"u%Pdb ?gZe7s~"v+d=duom;{ ͏Rs>O}v#ÜĜ Nu2bOo8<_dWH$>('gRNSsbb:/XͿ]T9T4|E3ljb~,bNǗT*eAS>qOM?Vq"wٝDNчCOsǏ\#IN&~bzT>;bE?Xm/!4C! %]Dlb"')VPL >O?Z 3h[|bEj,_A|@o~6鄨J'W8ؚB }؟iɿxSm/T\F[M|x؟g_ w+!Oy8'~Wya%TK/e/W7xD< D|"7ÛuW$B蛯<Ţ _szWb\.J9d[T>GX7xÝy&siN:/ -g(oht"c Ѿ~xa?HŵN4wKjT:Bo>7*AOY*/&&}?IM3aGۈXDb~$~bȿ"~8 3Ǥ9':xS7ܻT>{g}y;}'~K(űʛR'^ W=]NɄ G^D3_!'^}a(Nuo|W5W(V|󈿉o>!Ym':BBmK}nw"cS>weEIT]"w?}‰|a%+Ziч"Zq!=N7|!>/+}NK|%!G?O|6o*?ч/d*I>?hi!fo?UQGz*B׷A2g"w"oyR5_<¾XaI1yʉ/!D}G&~!o?!/'D|R9W)n܉m >N|n&E-Wv"iwW">O BK򙄈%??KS|чW_Չ6XчW_?I|!>NAOIVnB׿|aߖMjBo f FH7eC R?P3%Q]sƐqj|?>(%bB_@$B&C/UJ'_Nh?M/Y^ eG '$g)N&$~RǍi1*_F*E֚f}{_󝔀W|!c<'+b#{H=ʛMqҫ/Rp|2!g_bɟɤ?')fs֋APhEHt[Z>[lJK >:-_EES7ӉFeUH.eG¥StBSf?CSJVlBϹ#j_e\EY@BB~:eG¥UbBO-hYKQE:N"e)roJE-'~!')+-Vy3NQDHB&?}dU5h?Yÿ/PԿRN?~N%Vq . gRBArT'D_ƷRU-ԾQ}1k3QYJv|m>݉^ y;$ =ZÒ>hчs/T3bBwH̢?Q ;ȗ.s{>_@'.I;?7XCʻ%]jч%ޫلMee?')4RyCú>;I\EB߮J'9~?"zVNX*"L| *LQgYaė*yx| B/7_D}L-*MdoEBBJC_U>ۉVG$wYg_S/!DC2EL}ZgTgJE}UuT?t}9yqgKo!DO6'˒?W,{:?Hc;!uO # D&R#ل}mp)O|.!W+rZx.'D>i"~b)r{FҏTÿJ߳~lc_MzE?'~ !y)r,<O'D%~vB7ʏ # D^&R$I (C,O!W$Es aϒiч_H)WJߤ?I|3!}auKBE6Eħi7N?BE}>j\|Ԕ7gF僊4I@OͰćG'5B\;| #|$H-NB?AQ{aINlB$*|ޜ|:R *>IBN4s"~c_}J*/$eqY?@ UT_M/&^q/{IO"ɿ)o%S?ETG:!?4΍П,/i*k'ii*k>_H7җRKb.5hчEOTXO&D|(M̕+U>MRyOJ+M*ChxezEW[g~ W+PRש|!'ccEPK_MD.hx3nâ-3+b|2%cAV"dݢ[_Mɚ$T!D=GO俆TzB?ڢ?Z? :qgg<쑴O[x|+2>#P1@$WxBS?Β>>' }R/VB?_#Lɚ*l">%ˢ&~T/k.¾Rϱ~x~a[AW">AKğC"~.3y|} T>/?om9ݖbKhM}%~,˴:1|4rqn¹G &'lgبk%]gwG¿D֟oο?a=Gy?|~ѻOxx;#~N -vE|7k绉@}O%g/W"N?Sq69"Պ5? e)"_GFq-?H:B?_'~Me pűNGT>ΉWsE߉it]ǣSB%=oчLj/&',2EOcίi_}ss~ʫ >чW,s|R~_?;A罹8Ayi`>'P|?*+&DGcɟ?ùHR/zi2U>Rq4FZ&XcK3yl"oN~1_%:~~>񥊘N`+S"뻴!Wv-?Uk}:5_=!?uxegO'DtE=mF"D4HcчFg#YI"REH<[%D)oN~xʿGw8 ^?1q(pP@< o0B|WB8ѿ3]LW\[fmYxHa\ᮖ7'2 WɵSHEޟ|Dң}wxvAWiKQѾ7HzТ7_QI7w>L|bT>*s}ؿ??(."t?s}EM|J_s)"D}G?eɟ^*_!Ru9jՄh_Hg}-ߦxfooί>+ۜ_Sb~:C~ ~ /\*C"~/!?Daa:>)oΟ{ D|?AɊ'?#I'w%=cчO38_OIzډ|aiK7|֋AzcIϩ|}'~kG_Jʧ~&W}9S1e*Q_ pqgT-5~+ϫI3硄XEy/\xmݫW5+Unό'dB ~"f}Ow;ѳm _Opk4MTB?ė+ #$T}£lŅQ}=.Pwi/Q\t =k_AIJB]ߥKYs W.}<=_壝;$Ͱÿ| IU>P7}*>&~"!NTy!}?JEćOʜ>B3 I}A,B?'?POHk?Sxf !6M/ÿ1/U1!}W" }a%zpnK'DN7M!~!***@&vB_+,*Kc~No˘>׉jZ:>%PKWBS~3>Γ/VAk,ܿK_D?_H< ^ل)vH%~|/}1}k}俌x*ܢO'ù$~5wBa?̯Af|(iʋ1~^,4>o&~b Տm*LGYLiZ>sC }YP҉ࡿSo#FĮD/3!~!ƷďQ v'Kńh&','?"M奄?ζ~ڈDoO'ɿhK~} 9'}?IPhBY^dч ~bL Ď}82N}?ߒ?ETw)?lj~{?^G)b1}{T^D{'stK1\.}OVs>rBCn WIF?>_C|"Zy7s`FI7l.!YMW+֐-51o!Y@Q/$Do'~!,E翆sw1!ҿXMu!YGGhqN4?' *"?/9>EI,BK>NdTy3!GT]m%ߒa!}XϏ'TB8wXSVy;!GV~ OgU>G>'9Zv ԉ-. Ks5[6``#?K맼+ݼn:wG#7\u-u\Z[մ%\Uټu r\>l޲i6oq픽vQb BoZ[[ٽĽ<$v_t%SZIqս~)DG~VSVė-*'7ZI?gֵ?-PI7[Mi%Iyk~w\ICVe}oqd%\S^]uJQސ+x$L.iecgεg,{~@di%Sk@Y?gOcdbW}L/x3w I,S'`OLd~rcfVr4o"9 B3}7sw?V"i:*}j]O%iqoν)C $5ױG39ѬF7Vw^O(}߼G{J6fܛbΐ@ML{ zԗbmwvڕX dۼs- 36i7a:T PX!4gp}Dؼ'}V,roQhO쵔>qOQm?~BvMGIix~k ӟCa[AoOzKzXy+r~q~Ps]6֔.N!3C`IEC{w 6Ժ76YpIx'<$q`=Kibw;ېOw=MnAg}0ڹMHxoh^Y=7#Ѷ;rZE;i6;Qrki=F9? S~@nI捊N[6;MEmýmevV:O(Nx΢zanutx-SN@Y{~Z\{o@x޷I!{l<ƕ=Kc6~ы}Z{&quR_w,+A sd։ Lp뾷|u~up_%;liH 1sdD# JooԄV"R*]V(n0 (8AKq#vU$ML3h<߭DAb$?dz 6J$zȑA=]}x3{1mlfu4zUB5"ǷŅ\֧+ .?H+ qA׾PY_( {ew+]Gnk3lnpoVx:ݝÁf>q7uGs@(& Ue]7ӦsB}-]ElbάOl 1&sy B]vɰ""iNq-#Ժ+lm 46j vE겻%į=?.YܧcpNEߟTy;N )mghpH1UohjhkN(KE-ϔ[:B{L_YjfD;fde3[5RRK;d;U64 dp^/I[TKKD?g&m5K-;ժPN)srrIC8/tt5rD%r3,rkzQT)$S2^|czDFxU7%|c Qe:1R2I="8 Sʲ#ڦ)!NtJs/8៕7=:70F01kc#sO-Gs(Yw+䔦O\Y%8Ak,XnUD1wi47ļ󒐾cV~#G'S~83-:#0_n|^UdF u:9t=H"q* yH NdltBDBbp^υ2-':'Ֆ40LjEmh)kDaC65z]aI[E׳Q2xZwS"kG?-PK6 aEuӗ}t;kCٴG]L~sQ֤X_g]#{2c,e ye9_u񲔝̀#Nn<&&<}Mf"خۣ$V ^?Nd17Z%158NKyjHKVE,E"D>/!.]m+Ӓ-S;lqLqH=`guUM/DYhoOr1Q+s^\aFc|zaѣ#3%Ir`76SnkZ_kȧGlJKgUTCs4B}-|)g5iE[a_Ѝ̥Z.U ~}6ѭP=J-NktKx^j:>o 66e2Bi!MCndϹCMQi{\OVXd-_\QbZӶ-ҊMKnX Nq57WZ_HS\rUm!}|jS!U [v;G$+*֮_1-/4-6խWeJ7p{dZSd%3W>K3 BuKqM/X;VF1~y՛0uyaZ2{Gs'sSzszC5G '9l_"C`z\h Qmv!TsuVm涆 m{Ctn|Z}TCxsg灖 f"TMZvʲvE-hD+im۴f4[\sY!O7%31idaۋɧk=X)鶵Fj Ґ]Fˡ( s;eٴ3<6*mݽSV٭7䴆; [cZ8 [8_ڄ\:Zљ9s2)ڵOpPݶю&|}qM,!mu?6ihjvxn wiQ3nArStKoo˷aS&\Ygu Z퇻du۽Ύ.66p%EUAN,QZV#Lu_Kؽ%vY*kgu3tvi숚\!C;IGώ=ܵ3bV5ԡ;uA}z W&CbKݜLP ܯS v?|nXA,8[V&7&sro H1s/r:u2½SU+ 77m Ri|ޛWvtĔ0-Oɑ˘9ˬM[c= NmYKHvm2]27ٸ`ScȻI=]tu֡EG"-CڡK쮔caret/inst/doc/0000755000176200001440000000000013153613153013073 5ustar liggesuserscaret/inst/doc/caret.Rnw0000644000176200001440000003667313153613153014700 0ustar liggesusers% \VignetteIndexEntry{ A Short Introduction to the caret Package} % \VignetteDepends{caret} % \VignettePackage{caret} \documentclass[12pt]{article} \usepackage{colortbl} \usepackage{amsmath} \usepackage[pdftex]{graphicx} \usepackage{color} \usepackage{xspace} \usepackage{fancyvrb} \usepackage{fancyhdr} \usepackage[ colorlinks=true, linkcolor=blue, citecolor=blue, urlcolor=blue] {hyperref} \usepackage{Sweave} \SweaveOpts{keep.source=TRUE} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % define new colors for use \definecolor{darkgreen}{rgb}{0,0.6,0} \definecolor{darkred}{rgb}{0.6,0.0,0} \definecolor{lightbrown}{rgb}{1,0.9,0.8} \definecolor{brown}{rgb}{0.6,0.3,0.3} \definecolor{darkblue}{rgb}{0,0,0.8} \definecolor{darkmagenta}{rgb}{0.5,0,0.5} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\bld}[1]{\mbox{\boldmath $#1$}} \newcommand{\shell}[1]{\mbox{$#1$}} \renewcommand{\vec}[1]{\mbox{\bf {#1}}} \newcommand{\codeheading}[1]{\mbox{\color{darkblue}\texttt{#1}}} \newcommand{\code}[1]{\mbox{\footnotesize\color{darkblue}\texttt{#1}}} \newcommand{\pkg}[1]{{\fontseries{b}\selectfont #1}} \renewcommand{\pkg}[1]{{\textsf{#1}}} \newcommand{\ReallySmallSpacing}{\renewcommand{\baselinestretch}{.6}\Large\normalsize} \newcommand{\SmallSpacing}{\renewcommand{\baselinestretch}{1.1}\Large\normalsize} \providecommand{\SetAlgoLined}{\SetLine} \newcommand{\halfs}{\frac{1}{2}} \setlength{\oddsidemargin}{-.25 truein} \setlength{\evensidemargin}{0truein} \setlength{\topmargin}{-0.2truein} \setlength{\textwidth}{7 truein} \setlength{\textheight}{8.5 truein} \setlength{\parindent}{0truein} \setlength{\parskip}{0.10truein} \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl,formatcom=\color{darkblue}} \fvset{listparameters={\setlength{\topsep}{0pt}}} \renewenvironment{Schunk}{\vspace{\topsep}}{\vspace{\topsep}} \fvset{fontsize=\footnotesize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagestyle{fancy} \lhead{} \chead{The {\tt caret} Package} \rhead{} \lfoot{} \cfoot{} \rfoot{\thepage} \renewcommand{\headrulewidth}{1pt} \renewcommand{\footrulewidth}{1pt} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{A Short Introduction to the \pkg{caret} Package} \author{Max Kuhn \\ max.kuhn@pfizer.com} \begin{document} \SweaveOpts{concordance=TRUE} \maketitle \thispagestyle{empty} \vspace{.2in} \renewcommand{\baselinestretch}{1} <>= library(MASS) library(caret) library(mlbench) data(Sonar) library(pls) options(useFancyQuotes = FALSE) getInfo <- function(what = "Suggests") { text <- packageDescription("caret")[what][[1]] text <- gsub("\n", ", ", text, fixed = TRUE) text <- gsub(">=", "$\\\\ge$", text, fixed = TRUE) eachPkg <- strsplit(text, ", ", fixed = TRUE)[[1]] eachPkg <- gsub(",", "", eachPkg, fixed = TRUE) #out <- paste("\\\\pkg{", eachPkg[order(tolower(eachPkg))], "}", sep = "") #paste(out, collapse = ", ") length(eachPkg) } @ The \pkg{caret} package (short for {\bf{\color{blue}{c}}}lassification {\bf{\color{blue}{a}}}nd {\bf{\color{blue}{re}}}gression {\bf{\color{blue}{t}}}raining) contains functions to streamline the model training process for complex regression and classification problems. The package utilizes a number of R packages but tries not to load them all at package start-up\footnote{By adding formal package dependencies, the package startup time can be greatly decreased}. The package ``suggests'' field includes \Sexpr{getInfo("Suggests")} packages. \pkg{caret} loads packages as needed and assumes that they are installed. Install \pkg{caret} using <>= install.packages("caret", dependencies = c("Depends", "Suggests")) @ to ensure that all the needed packages are installed. The {\bf main help pages} for the package are at: \begin{center} \url{http://caret.r-forge.r-project.org/} \end{center} Here, there are extended examples and a large amount of information that previously found in the package vignettes. \pkg{caret} has several functions that attempt to streamline the model building and evaluation process, as well as feature selection and other techniques. One of the primary tools in the package is the \code{train} function which can be used to \begin{itemize} \item evaluate, using resampling, the effect of model tuning parameters on performance \item choose the ``optimal'' model across these parameters \item estimate model performance from a training set \end{itemize} More formally: \begin{center} \includegraphics[clip, width = .9\textwidth]{train_algo} \end{center} There are options for customizing almost every step of this process (e.g. resampling technique, choosing the optimal parameters etc). To demonstrate this function, the Sonar data from the \pkg{mlbench} package will be used. The Sonar data consist of \Sexpr{nrow(Sonar)} data points collected on \Sexpr{ncol(Sonar)-1} predictors. The goal is to predict the two classes (\texttt{M} for metal cylinder or \texttt{R} for rock). First, we split the data into two groups: a training set and a test set. To do this, the \code{createDataPartition} function is used: <>= library(caret) library(mlbench) data(Sonar) set.seed(107) inTrain <- createDataPartition(y = Sonar$Class, ## the outcome data are needed p = .75, ## The percentage of data in the ## training set list = FALSE) ## The format of the results ## The output is a set of integers for the rows of Sonar ## that belong in the training set. str(inTrain) @ By default, \code{createDataPartition} does a stratified random split of the data. To partition the data: <>= training <- Sonar[ inTrain,] testing <- Sonar[-inTrain,] nrow(training) nrow(testing) @ To tune a model using Algorithm \ref{A:tune}, the \code{train} function can be used. More details on this function can be found at: \begin{center} \url{http://caret.r-forge.r-project.org/training.html} \end{center} Here, a partial least squares discriminant analysis (PLSDA) model will be tuned over the number of PLS components that should be retained. The most basic syntax to do this is: <>= plsFit <- train(Class ~ ., data = training, method = "pls", ## Center and scale the predictors for the training ## set and all future samples. preProc = c("center", "scale")) @ However, we would probably like to customize it in a few ways: \begin{itemize} \item expand the set of PLS models that the function evaluates. By default, the function will tune over three values of each tuning parameter. \item the type of resampling used. The simple bootstrap is used by default. We will have the function use three repeats of 10--fold cross--validation. \item the methods for measuring performance. If unspecified, overall accuracy and the Kappa statistic are computed. For regression models, root mean squared error and $R^2$ are computed. Here, the function will be altered to estimate the area under the ROC curve, the sensitivity and specificity \end{itemize} To change the candidate values of the tuning parameter, either of the \code{tuneLength} or \code{tuneGrid} arguments can be used. The \code{train} function can generate a candidate set of parameter values and the \code{tuneLength} argument controls how many are evaluated. In the case of PLS, the function uses a sequence of integers from 1 to \code{tuneLength}. If we want to evaluate all integers between 1 and 15, setting \code{tuneLength = 15} would achieve this. The \code{tuneGrid} argument is used when specific values are desired. A data frame is used where each row is a tuning parameter setting and each column is a tuning parameter. An example is used below to illustrate this. The syntax for the model would then be: \begin{Verbatim}[fontshape=sl,formatcom=\color{darkblue},fontsize=\footnotesize,commandchars=\\\{\}] > plsFit <- train(Class ~ ., + data = training, + method = "pls", + \textcolor{red}{tuneLength = 15}, + preProc = c("center", "scale")) \end{Verbatim} To modify the resampling method, a \code{trainControl} function is used. The option \code{method} controls the type of resampling and defaults to \code{"boot"}. Another method, \code{"repeatedcv"}, is used to specify repeated $K$--fold cross--validation (and the argument \code{repeats} controls the number of repetitions). $K$ is controlled by the \code{number} argument and defaults to 10. The new syntax is then: \begin{Verbatim}[fontshape=sl,formatcom=\color{darkblue},fontsize=\footnotesize,commandchars=\\\{\}] > \textcolor{red}{ctrl <- trainControl(method = "repeatedcv",} + \textcolor{red}{ repeats = 3)} > plsFit <- train(Class ~ ., + data = training, + method = "pls", + tuneLength = 15, + \textcolor{red}{trControl = ctrl}, + preProc = c("center", "scale")) \end{Verbatim} Finally, to choose different measures of performance, additional arguments are given to \code{trainControl}. The \code{summaryFunction} argument is used to pas in a function that takes the observed and predicted values and estimate some measure of performance. Two such functions are already included in the package: \code{defaultSummary} and \code{twoClassSummary}. The latter will compute measures specific to two--class problems, such as the area under the ROC curve, the sensitivity and specificity. Since the ROC curve is based on the predicted class probabilities (which are not computed automatically), another option is required. The \code{classProbs = TRUE} option is used to include these calculations. Lastly, the function will pick the tuning parameters associated with the best results. Since we are using custom performance measures, the criterion that should be optimized must also be specified. In the call to \code{train}, we can use \code{metric = "ROC"} to do this. The final model fit would then be: \begin{Verbatim}[fontshape=sl,formatcom=\color{darkblue},fontsize=\footnotesize,commandchars=\\\{\}] > set.seed(123) > ctrl <- trainControl(method = "repeatedcv", + repeats = 3, + \textcolor{red}{ classProbs = TRUE}, + \textcolor{red}{ summaryFunction = twoClassSummary}) > plsFit <- train(Class ~ ., + data = training, + method = "pls", + tuneLength = 15, + trControl = ctrl, + \textcolor{red}{metric = "ROC"}, + preProc = c("center", "scale")) \end{Verbatim} <>= ctrl <- trainControl(method = "repeatedcv", repeats = 3, classProbs = TRUE, summaryFunction = twoClassSummary) set.seed(123) plsFit <- train(Class ~ ., data = training, method = "pls", tuneLength = 15, trControl = ctrl, metric = "ROC", preProc = c("center", "scale")) @ <>= plsFit @ In this output the grid of results are the average resampled estimates of performance. The note at the bottom tells the user that \Sexpr{plsFit$bestTune$.ncomp} PLS components were found to be optimal. Based on this value, a final PLS model is fit to the whole data set using this specification and this is the model that is used to predict future samples. The package has several functions for visualizing the results. One method for doing this is the \code{plot} function for \code{train} objects. The command \code{plot(plsFit)} produced the results seen in Figure \ref{F:pls} and shows the relationship between the resampled performance values and the number of PLS components. \setkeys{Gin}{width=.65\textwidth} \begin{figure} \begin{center} <>= trellis.par.set(caretTheme()) print(plot(plsFit)) @ \caption{ \code{plot(plsFit)} shows the relationship between the number of PLS components and the resampled estimate of the area under the ROC curve. } \label{F:pls} \end{center} \end{figure} To predict new samples, \code{predict.train} can be used. For classification models, the default behavior is to calculated the predicted class. Using the option \code{type = "prob"} can be used to compute class probabilities from the model. For example: <>= plsClasses <- predict(plsFit, newdata = testing) str(plsClasses) plsProbs <- predict(plsFit, newdata = testing, type = "prob") head(plsProbs) @ \pkg{caret} contains a function to compute the confusion matrix and associated statistics for the model fit: <>= confusionMatrix(data = plsClasses, testing$Class) @ To fit an another model to the data, \code{train} can be invoked with minimal changes. Lists of models available can be found at: \begin{center} \url{http://caret.r-forge.r-project.org/modelList.html} \url{http://caret.r-forge.r-project.org/bytag.html} \end{center} For example, to fit a regularized discriminant model to these data, the following syntax can be used: <>= ## To illustrate, a custom grid is used rdaGrid = data.frame(gamma = (0:4)/4, lambda = 3/4) set.seed(123) rdaFit <- train(Class ~ ., data = training, method = "rda", tuneGrid = rdaGrid, trControl = ctrl, metric = "ROC") rdaFit rdaClasses <- predict(rdaFit, newdata = testing) confusionMatrix(rdaClasses, testing$Class) @ How do these models compare in terms of their resampling results? The \code{resamples} function can be used to collect, summarize and contrast the resampling results. Since the random number seeds were initialized to the same value prior to calling \code{train}, the same folds were used for each model. To assemble them: <>= resamps <- resamples(list(pls = plsFit, rda = rdaFit)) summary(resamps) @ There are several functions to visualize these results. For example, a Bland--Altman type plot can be created using \code{xyplot(resamps, what = "BlandAltman")} (see Figure \ref{F:BA}). The results look similar. Since, for each resample, there are paired results a paired $t$--test can be used to assess whether there is a difference in the average resampled area under the ROC curve. The \code{diff.resamples} function can be used to compute this: <>= diffs <- diff(resamps) summary(diffs) @ Based on this analysis, the difference between the models is \Sexpr{round(diffs$statistics$ROC[[1]]$estimate, 3)} ROC units (the RDA model is slightly higher) and the two--sided $p$--value for this difference is \Sexpr{format.pval(diffs$statistics$ROC[[1]]$p.value)}. \setkeys{Gin}{width=.65\textwidth} \begin{figure} \begin{center} <>= plotTheme <- caretTheme() plotTheme$plot.symbol$col <- rgb(.2, .2, .2, .5) plotTheme$plot.symbol$pch <- 16 trellis.par.set(plotTheme) print(xyplot(resamps, what = "BlandAltman")) @ \caption{A Bland--Altman plot of the resampled ROC values produced using \code{xyplot(resamps, what = "BlandAltman")}. } \label{F:BA} \end{center} \end{figure} \end{document} caret/inst/doc/caret.R0000644000176200001440000001153713153613153014323 0ustar liggesusers### R code from vignette source 'caret.Rnw' ################################################### ### code chunk number 1: loadLibs ################################################### library(MASS) library(caret) library(mlbench) data(Sonar) library(pROC) library(pls) options(useFancyQuotes = FALSE) getInfo <- function(what = "Suggests") { text <- packageDescription("caret")[what][[1]] text <- gsub("\n", ", ", text, fixed = TRUE) text <- gsub(">=", "$\\\\ge$", text, fixed = TRUE) eachPkg <- strsplit(text, ", ", fixed = TRUE)[[1]] eachPkg <- gsub(",", "", eachPkg, fixed = TRUE) #out <- paste("\\\\pkg{", eachPkg[order(tolower(eachPkg))], "}", sep = "") #paste(out, collapse = ", ") length(eachPkg) } ################################################### ### code chunk number 2: install (eval = FALSE) ################################################### ## install.packages("caret", dependencies = c("Depends", "Suggests")) ################################################### ### code chunk number 3: SonarSplit ################################################### library(caret) library(mlbench) data(Sonar) set.seed(107) inTrain <- createDataPartition(y = Sonar$Class, ## the outcome data are needed p = .75, ## The percentage of data in the ## training set list = FALSE) ## The format of the results ## The output is a set of integers for the rows of Sonar ## that belong in the training set. str(inTrain) ################################################### ### code chunk number 4: SonarDatasets ################################################### training <- Sonar[ inTrain,] testing <- Sonar[-inTrain,] nrow(training) nrow(testing) ################################################### ### code chunk number 5: plsTune1 (eval = FALSE) ################################################### ## plsFit <- train(Class ~ ., ## data = training, ## method = "pls", ## ## Center and scale the predictors for the training ## ## set and all future samples. ## preProc = c("center", "scale")) ################################################### ### code chunk number 6: plsFit ################################################### ctrl <- trainControl(method = "repeatedcv", repeats = 3, classProbs = TRUE, summaryFunction = twoClassSummary) set.seed(123) plsFit <- train(Class ~ ., data = training, method = "pls", tuneLength = 15, trControl = ctrl, metric = "ROC", preProc = c("center", "scale")) ################################################### ### code chunk number 7: plsPrint ################################################### plsFit ################################################### ### code chunk number 8: baPlot ################################################### trellis.par.set(caretTheme()) print(plot(plsFit)) ################################################### ### code chunk number 9: plsPred ################################################### plsClasses <- predict(plsFit, newdata = testing) str(plsClasses) plsProbs <- predict(plsFit, newdata = testing, type = "prob") head(plsProbs) ################################################### ### code chunk number 10: plsCM ################################################### confusionMatrix(data = plsClasses, testing$Class) ################################################### ### code chunk number 11: rdaFit ################################################### ## To illustrate, a custom grid is used rdaGrid = data.frame(gamma = (0:4)/4, lambda = 3/4) set.seed(123) rdaFit <- train(Class ~ ., data = training, method = "rda", tuneGrid = rdaGrid, trControl = ctrl, metric = "ROC") rdaFit rdaClasses <- predict(rdaFit, newdata = testing) confusionMatrix(rdaClasses, testing$Class) ################################################### ### code chunk number 12: rs ################################################### resamps <- resamples(list(pls = plsFit, rda = rdaFit)) summary(resamps) ################################################### ### code chunk number 13: diffs ################################################### diffs <- diff(resamps) summary(diffs) ################################################### ### code chunk number 14: plsPlot ################################################### plotTheme <- caretTheme() plotTheme$plot.symbol$col <- rgb(.2, .2, .2, .5) plotTheme$plot.symbol$pch <- 16 trellis.par.set(plotTheme) print(xyplot(resamps, what = "BlandAltman")) caret/tests/0000755000176200001440000000000013207340464012515 5ustar liggesuserscaret/tests/testthat.R0000644000176200001440000000006613153613153014500 0ustar liggesuserslibrary(testthat) library(caret) test_check("caret") caret/tests/testthat/0000755000176200001440000000000013213314354014351 5ustar liggesuserscaret/tests/testthat/test_safs.R0000644000176200001440000000235213153613153016473 0ustar liggesuserscontext('safs') test_that("safsControl errors working", { expect_error(safsControl(method = "larry") ,"method should be one of") expect_error(safsControl(metric = c("larry", "harry", "moe")) ,"should be a two-element named vector") expect_error(safsControl(maximize = c("larry", "harry", "moe")) ,"should be a two-element named vector") expect_error(safsControl(holdout = -1) ,"'holdout' should be") expect_error(safsControl(improve = 1) ,"'improve' should be") }) test_that("high level tests", { expect_silent(pop <- safs_initial(vars = 10, popSize = 10)) expect_silent(selected_vars <- safs_initial(vars = 10 , prob = 0.2)) expect_silent(safs_perturb(selected_vars, vars = 10, number = 1)) set.seed(1) train_data <- twoClassSim(100, noiseVars = 10) test_data <- twoClassSim(10, noiseVars = 10) ## A short example expect_silent( ctrl <- safsControl(functions = rfSA, method = "cv", number = 3) ) # rf_search <- safs(x = train_data[, -ncol(train_data)], # y = train_data$Class, # iters = 3, # safsControl = ctrl) }) caret/tests/testthat/test_models_bagEarth.R0000644000176200001440000000304313206672465020627 0ustar liggesusers# This is an extremely basic test that would catch serious kinds of errors # such as the bagEarth() not returning the right kind of object, that one of # the functions (bagEarth, format, predict) crash during normal usage, or that # bagEarth cannot model a simplistic kind of linear equation. context("earth") test_that('bagEarth simple regression', { skip_on_cran() data <- data.frame(X = 1:100) data$Y <- data$X * 2 data$training <- data$X %% 2 fit <- bagEarth(Y ~ X, data=data[1==data$training,], B=3) expect_that(format(fit, cat=FALSE), is_a('character')) expect_that(fit, is_a('bagEarth')) data$pred <- predict(fit, newdata=data) data$resid <- with(data, Y - pred) mae <- mean(abs(data$resid)) expect_equal(mae, 0) }) test_that('bagEarth simple classification', { skip_on_cran() data <- twoClassSim(n=1000) fit <- bagEarth(Class ~ ., data=data, B=3, glm=list(family=binomial)) expect_that(format(fit, cat=FALSE), is_a('character')) expect_that(fit, is_a('bagEarth')) pred_response <- predict(fit, newdata=data) expect_is(pred_response, "factor") expect_equal(length(pred_response), nrow(data)) pred_class <- predict(fit, newdata=data, type="class") expect_is(pred_class, "factor") expect_equal(length(pred_class), 1000) pred_prob <- predict(fit, newdata=data, type="prob") expect_is(pred_prob, "data.frame") expect_equal(ncol(pred_prob), 2) expect_equal(nrow(pred_prob), 1000) expect_true(0 <= min(pred_prob)) expect_true(max(pred_prob) <= 1) }) caret/tests/testthat/test_data_spliting.R0000644000176200001440000000165013153613153020361 0ustar liggesuserscontext("Data Spliting") test_that("createTimeSlices works as expected", { s1 <- createTimeSlices(1:8, 5, horizon = 1) s2 <- createTimeSlices(1:8, 5, horizon = 1, skip = 3) s3 <- createTimeSlices(1:10, 5, horizon = 1, fixedWindow = FALSE, skip = 3) s4 <- createTimeSlices(1:10, 5, horizon = 2, skip = 2) expect_equal(s1, list(train = list(Training5 = 1:5, Training6 = 2:6, Training7 = 3:7), test = list(Testing5 = 6L, Testing6 = 7L, Testing7 = 8L))) expect_equal(s2, list(train = structure(list(Training5 = 1:5)), test = structure(list(Testing5 = 6L)))) expect_equal(s3, list(train = list(Training5 = 1:5, Training9 = 1:9), test = list(Testing5 = 6L, Testing9 = 10L))) expect_equal(s4, list(train = list(Training5 = 1:5, Training8 = 4:8), test = list(Testing5 = 6:7, Testing8 = 9:10))) }) caret/tests/testthat/test_nearZeroVar.R0000644000176200001440000000126313153613153017775 0ustar liggesuserscontext("Test nearZeroVar") test_that("nearZeroVar works properly with foreach", { ## shouldn't trigger error r <- nearZeroVar(iris, foreach = T) ## should pick up x, y and z bad.iris <- cbind(iris, x = rep(-1, nrow(iris)), y = rep(0, nrow(iris)), z = rep(1, nrow(iris))) r1 <- nearZeroVar(bad.iris) r2 <- nearZeroVar(bad.iris, foreach = T) expect_equal(r1, r2) r1 <- nearZeroVar(bad.iris, names = T) r2 <- nearZeroVar(bad.iris, names = T, foreach = T) expect_equal(r1, r2) r1 <- nearZeroVar(bad.iris, saveMetrics = T) r2 <- nearZeroVar(bad.iris, saveMetrics = T, foreach = T) expect_equal(r1, r2) }) caret/tests/testthat/test_multiclassSummary.R0000644000176200001440000000123513153613153021274 0ustar liggesuserscontext('multiClassSummary') test_that("multiClassSummary presenting warnings from train", { library(caret) N = 1000; M = 2; set.seed(1) xTrain = matrix( runif(N*M), nrow = N); colnames(xTrain) <- sapply(1:M, function(u) paste0(collapse = '', letters[sample(26, 3, replace = TRUE)] ) ) yTrain = as.factor( letters[sample(3, N, replace = TRUE)]) trCntlListMulti <- trainControl(method = "cv", number = 3, verboseIter = FALSE, classProbs = TRUE, summaryFunction = multiClassSummary ) expect_silent({ enFitMulti <- train( x = xTrain, y = yTrain, trControl = trCntlListMulti, method = "knn", tuneLength = 2 ) }) }) caret/tests/testthat/trim_glm.R0000644000176200001440000000353113153613153016312 0ustar liggesuserslibrary(caret) test_that('glm classification', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "glm", tuneLength=1, trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "glm", tuneLength=1, trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) test_that('glm regression', { skip_on_cran() set.seed(1) tr_dat <- SLC14_1(200) te_dat <- SLC14_1(200) set.seed(2) reg_trim <- train(y ~ ., data = tr_dat, method = "glm", tuneLength=1, trControl = trainControl(method = "none", trim = TRUE)) set.seed(2) reg_notrim <- train(y ~ ., data = tr_dat, method = "glm", tuneLength=1, trControl = trainControl(method = "none", trim = FALSE)) expect_equal(predict(reg_trim, te_dat), predict(reg_notrim, te_dat)) expect_less_than(object.size(reg_trim)-object.size(reg_notrim), 0) }) caret/tests/testthat/trim_train.R0000644000176200001440000001030013153613153016640 0ustar liggesuserslibrary(caret) test_that('train classification', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "rpart", tuneGrid = data.frame(cp = 0.22), preProc = c("center", "bagImpute"), trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) class_trim <- caret:::trim.train(class_trim) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "rpart", tuneGrid = data.frame(cp = 0.22), preProc = c("center", "bagImpute"), trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) test_that('train regression', { skip_on_cran() set.seed(1) tr_dat <- SLC14_1(200) te_dat <- SLC14_1(200) set.seed(2) reg_trim <- train(y ~ ., data = tr_dat, method = "rpart", tuneGrid = data.frame(cp = 0.12), trControl = trainControl(method = "none", trim = TRUE)) reg_trim <- caret:::trim.train(reg_trim) set.seed(2) reg_notrim <- train(y ~ ., data = tr_dat, method = "rpart", tuneGrid = data.frame(cp = 0.12), trControl = trainControl(method = "none", trim = FALSE)) expect_equal(predict(reg_trim, te_dat), predict(reg_notrim, te_dat)) expect_less_than(object.size(reg_trim)-object.size(reg_notrim), 0) }) test_that('train/earth classification', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "earth", tuneGrid = data.frame(nprune = 3, degree = 1), trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) class_trim <- caret:::trim.train(class_trim) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "earth", tuneGrid = data.frame(nprune = 3, degree = 1), trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) test_that('train/earth regression', { skip_on_cran() set.seed(1) tr_dat <- SLC14_1(200) te_dat <- SLC14_1(200) set.seed(2) reg_trim <- train(y ~ ., data = tr_dat, method = "earth", tuneGrid = data.frame(nprune = 3, degree = 1), trControl = trainControl(method = "none", trim = TRUE)) set.seed(2) reg_notrim <- train(y ~ ., data = tr_dat, method = "earth", tuneGrid = data.frame(nprune = 3, degree = 1), trControl = trainControl(method = "none", trim = FALSE)) expect_equal(predict(reg_trim, te_dat), predict(reg_notrim, te_dat)) expect_less_than(object.size(reg_trim)-object.size(reg_notrim), 0) }) caret/tests/testthat/test_confusionMatrix.R0000644000176200001440000000325013153613153020725 0ustar liggesuserscontext('Test confusionMatrix') set.seed(442) test_that("Confusion matrix works", { library(caret) train <- twoClassSim(n = 1000, intercept = -8, linearVars = 3, noiseVars = 10, corrVars = 4, corrValue = 0.6) ctrl <- trainControl(method = "cv", classProbs = TRUE) fullModel <- train(Class ~ ., data = train, method = "knn", preProc = c("center", "scale"), tuneLength = 4, trControl = ctrl) dat <- train$Class ref <- predict(fullModel, newdata = train) dat2 <- as.character(dat) ref2 <- as.character(ref) dat2 <- factor(dat2, levels = c("Class2", "Class1")) ref2 <- factor(ref2, levels = c("Class1", "Class2")) dat3 <- rep("Class1", length(ref2)) dat3 <- factor(dat3) dat4 <- factor(dat3, levels = c("Class1", "Class4")) dat5 <- as.character(dat3) dat5[200] <- "Class4" dat5 <- factor(dat5, levels = c("Class1", "Class4")) cm1 <- confusionMatrix(dat, ref) cm2 <- suppressWarnings(confusionMatrix(dat2, ref2)) cm3 <- suppressWarnings(confusionMatrix(dat3, ref2)) cm4 <- suppressWarnings(confusionMatrix(dat4, ref2)) expect_true(class(cm1) == "confusionMatrix") expect_true(class(cm2) == "confusionMatrix") expect_true(class(cm3) == "confusionMatrix") expect_true(class(cm4) == "confusionMatrix") expect_warning(confusionMatrix(dat2, ref2)) expect_warning(confusionMatrix(dat3, ref2)) expect_error(confusionMatrix(dat5, ref2)) expect_error(confusionMatrix(dat5, ref1)) expect_identical(cm1$overall, cm2$overall) expect_identical(cm4$overall, cm3$overall) expect_true(identical(cm1, cm2)) expect_true(identical(cm3, cm4)) })caret/tests/testthat/test_sampling_options.R0000644000176200001440000000467513153613153021136 0ustar liggesuserslibrary(caret) library(testthat) context("sampling options") load(system.file("models", "sampling.RData", package = "caret")) test_that('check appropriate sampling calls by name', { skip_on_cran() arg_names <- c("up", "down", "rose", "smote") arg_funcs <- sampling_methods arg_first <- c(TRUE, FALSE) ## test that calling by string gives the right result for(i in arg_names) { out <- caret:::parse_sampling(i, check_install = FALSE) expected <- list(name = i, func = sampling_methods[[i]], first = TRUE) expect_equivalent(out, expected) } }) test_that('check appropriate sampling calls by function', { skip_on_cran() arg_names <- c("up", "down", "rose", "smote") arg_funcs <- sampling_methods arg_first <- c(TRUE, FALSE) ## test that calling by function gives the right result for(i in arg_names) { out <- caret:::parse_sampling(sampling_methods[[i]], check_install = FALSE) expected <- list(name = "custom", func = sampling_methods[[i]], first = TRUE) expect_equivalent(out, expected) } }) test_that('check bad sampling name', { skip_on_cran() expect_error(caret:::parse_sampling("what?")) }) test_that('check bad first arg', { skip_on_cran() expect_error( caret:::parse_sampling( list(name = "yep", func = sampling_methods[["up"]], first = 2), check_install = FALSE) ) }) test_that('check bad func arg', { skip_on_cran() expect_error( caret:::parse_sampling( list(name = "yep", func = I, first = 2), check_install = FALSE) ) }) test_that('check incomplete list', { skip_on_cran() expect_error(caret:::parse_sampling(list(name = "yep"), check_install = FALSE)) }) test_that('check call', { skip_on_cran() expect_error(caret:::parse_sampling(14, check_install = FALSE)) }) ################################################################### ## test_that('check getting all methods', { skip_on_cran() expect_equivalent(getSamplingInfo(), sampling_methods) }) test_that('check getting one method', { skip_on_cran() arg_names <- c("up", "down", "rose", "smote") for(i in arg_names) { out <- getSamplingInfo(i, regex = FALSE) expected <- list(sampling_methods[[i]]) names(expected) <- i expect_equivalent(out, expected) } }) test_that('check missing method', { skip_on_cran() expect_error(getSamplingInfo("plum")) }) caret/tests/testthat/test_misc.R0000644000176200001440000000211713153613153016471 0ustar liggesusers context('misc functions') test_that("R2 and RMSE are calculating correctly", { pred <- runif(25) obs <- runif(25) expect_equal(R2(pred, obs), cor(obs, pred)^2) expect_equal(RMSE(pred, obs), sqrt(mean((pred - obs)^2))) }) test_that("auc calculation is > .5 when Xs provide prediction", { trCntlListMulti <- trainControl(method = "cv", number = 3, verboseIter = FALSE, classProbs = TRUE, summaryFunction = multiClassSummary ) knnFit <- train(Species ~ ., data = iris, method = "knn", trControl = trCntlListMulti) expect_true(all(knnFit$resample$AUC > .5)) library(caret) set.seed(1) tr_dat <- twoClassSim(200) te_dat <- tr_dat tr_dat$Class = factor(tr_dat$Class, levels = rev(levels(te_dat$Class))) modle <- train(Class ~ ., data = te_dat, method = "fda", tuneLength = 10, metric = "ROC", trControl = trainControl(classProbs = TRUE, summaryFunction = twoClassSummary)) expect_true(all(modle$resample$AUC > .5)) }) caret/tests/testthat/test_ggplot.R0000644000176200001440000000277213153613153017041 0ustar liggesuserscontext("Test ggplot") test_that("ggplot.train correctly orders factors", { library(caret) library(kernlab) data(mtcars) m <- train( mpg ~ cyl + disp, data = mtcars, method = "svmRadial", tuneGrid = expand.grid(C = 1:2, sigma = c(0.0001, 0.01, 1)) ) g <- ggplot(m, plotType = "level") # Test plot data obj_sigma <- as.numeric(levels(g$data$sigma)) obj_C <- as.numeric(levels(g$data$c)) expect_equal(obj_sigma, sort(obj_sigma)) expect_equal(obj_C, sort(obj_C)) # Test axes' labels on a built plot build <- ggplot2::ggplot_build(g) obj_x <- as.numeric(build$layout$panel_ranges[[1]]$x.labels) obj_y <- as.numeric(build$layout$panel_ranges[[1]]$y.labels) expect_equal(obj_x, sort(obj_x)) expect_equal(obj_y, sort(obj_y)) }) test_that("ggplot.train correctly orders facets' labels", { library(caret) library(kernlab) data(mtcars) m <- suppressWarnings(train( mpg ~ cyl + disp, data = mtcars, method = "svmPoly", tuneGrid = expand.grid( degree = c(0.0001, 0.01, 1), scale = c(0.0001, 0.01, 1), C = c(0.0001, 0.01, 1) ) )) g <- ggplot(m, plotType = "level", nameInStrip = TRUE) # Test plot data obj_C <- as.numeric(gsub( 'Cost: ', '', levels(g$data$C) )) expect_equal(obj_C, sort(obj_C)) # Test axes' labels on a built plot build <- ggplot2::ggplot_build(g) obj_labels <- as.numeric(gsub( 'Cost: ', '', levels(build$layout$panel_layout$C) )) expect_equal(obj_labels, sort(obj_labels)) }) caret/tests/testthat/test_glmnet_varImp.R0000644000176200001440000000126613153613153020346 0ustar liggesusers library(caret) context('Testing varImp') test_that('glmnet varImp returns non-negative values', { skip_on_cran() skip_if_not_installed('glmnet') set.seed(1) dat <- SLC14_1(200) reg <- train(y ~ ., data = dat, method = "glmnet", tuneGrid = data.frame(lambda = .1, alpha = .5), trControl = trainControl(method = "none")) # this checks that some coefficients are negative coefs <- predict(reg$finalModel, s=0.1, type="coef") expect_lt(0, sum(0 > coefs)) # now check that all elements of varImp are nonnegative, # in spite of negative coefficients vis <- varImp(reg, s=0.1, scale=F)$importance expect_true(all(vis >= 0)) }) caret/tests/testthat/test_minimal.R0000644000176200001440000000170513153613153017166 0ustar liggesuserscontext('Minimal Tests') stats <- caret:::basic2x2Stats(factor(0:1), factor(0:1), pos='1', neg='0') expect_equal(stats[['Sensitivity']], 1) expect_equal(stats[['Specificity']], 1) expect_equal(stats[['Pos Pred Value']], 1) expect_equal(stats[['Neg Pred Value']], 1) test_that("resampling method 'none' doesn't conflict with default tuneLength", { data(BloodBrain) expect_error(train(bbbDescr, logBBB, method = "earth", tuneLength = 2, trControl = trainControl(method = "none"))) expect_error(train(bbbDescr, logBBB, method = "earth", tuneLength = 2, trControl = trainControl(method = "none"))) expect_error(train(mpg ~ cyl + disp, data = mtcars, method = "gam", tuneLength = 2, trControl = trainControl(method = "none"))) }) caret/tests/testthat/trim_rpart.R0000644000176200001440000000762313153613153016671 0ustar liggesuserslibrary(caret) test_that('rpart classification', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "rpart", tuneGrid = data.frame(cp = 0.22), trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "rpart", tuneGrid = data.frame(cp = 0.22), trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) test_that('rpart regression', { skip_on_cran() set.seed(1) tr_dat <- SLC14_1(200) te_dat <- SLC14_1(200) set.seed(2) reg_trim <- train(y ~ ., data = tr_dat, method = "rpart", tuneGrid = data.frame(cp = 0.12), trControl = trainControl(method = "none", trim = TRUE)) set.seed(2) reg_notrim <- train(y ~ ., data = tr_dat, method = "rpart", tuneGrid = data.frame(cp = 0.12), trControl = trainControl(method = "none", trim = FALSE)) expect_equal(predict(reg_trim, te_dat), predict(reg_notrim, te_dat)) expect_less_than(object.size(reg_trim)-object.size(reg_notrim), 0) }) test_that('rpart2 classification', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "rpart2", tuneGrid = data.frame(maxdepth = 3), trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "rpart2", tuneGrid = data.frame(maxdepth = 3), trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) test_that('rpart2 regression', { skip_on_cran() set.seed(1) tr_dat <- SLC14_1(200) te_dat <- SLC14_1(200) set.seed(2) reg_trim <- train(y ~ ., data = tr_dat, method = "rpart2", tuneGrid = data.frame(maxdepth = 3), trControl = trainControl(method = "none", trim = TRUE)) set.seed(2) reg_notrim <- train(y ~ ., data = tr_dat, method = "rpart2", tuneGrid = data.frame(maxdepth = 3), trControl = trainControl(method = "none", trim = FALSE)) expect_equal(predict(reg_trim, te_dat), predict(reg_notrim, te_dat)) expect_less_than(object.size(reg_trim)-object.size(reg_notrim), 0) }) caret/tests/testthat/test_mnLogLoss.R0000644000176200001440000000317113153613153017454 0ustar liggesuserscontext('mnLogLoss') classes <- LETTERS[1:3] test_dat1 <- data.frame(obs = c("A", "A", "A", "B", "B", "C"), pred = c("A", "A", "A", "B", "B", "C"), A = c(1, .80, .51, .1, .2, .3), B = c(0, .05, .29, .8, .6, .3), C = c(0, .15, .20, .1, .2, .4)) test_that("Multiclass logloss returns expected values", { result1 <- mnLogLoss(test_dat1, classes) test_dat2 <- test_dat1 test_dat2$A[1] <- NA result2 <- mnLogLoss(test_dat2, classes) test_dat3 <- test_dat1 test_dat3 <- test_dat3[, rev(1:5)] result3 <- mnLogLoss(test_dat3, classes) expect_equal(result1, c(logLoss = 0.424458), tolerance = .000001) expect_equal(result2, c(logLoss = 0.5093496), tolerance = .000001) expect_equal(result3, c(logLoss = 0.424458), tolerance = .000001) }) # Issue #637 classes.b <- c("A", "B") test_dat1.b <- data.frame(obs = c("A", "A", "A", "B", "B"), pred = c("A", "A", "A", "B", "B"), A = c(1, .80, .51, .1, .2), B = c(0, .20, .49, .9, .8)) test_that("Twoclass logloss returns expected values", { result1 <- mnLogLoss(test_dat1.b, classes.b) test_dat2.b <- test_dat1.b test_dat2.b$A[1] <- NA result2 <- mnLogLoss(test_dat2.b, classes.b) test_dat3.b <- test_dat1.b test_dat3.b <- test_dat3.b[, rev(1:4)] result3 <- mnLogLoss(test_dat3.b, classes.b) expect_equal(result1, c(logLoss = 0.244998), tolerance = .000001) expect_equal(result2, c(logLoss = 0.306248), tolerance = .000001) expect_equal(result3, c(logLoss = 0.244998), tolerance = .000001) }) caret/tests/testthat/test_preProcess.R0000644000176200001440000000172513173674611017677 0ustar liggesuserscontext('Test preProcess') # Helper function check.medianImpute <- function(x) { # Reference column medians for checks med <- apply(x, 2, median, na.rm=TRUE) anyEmptyColumn <- any(is.na(med)) med[is.na(med)] <- 0 if(anyEmptyColumn) { expect_warning( pp <- preProcess(x, method = "medianImpute"), "never filled" ) } else { pp <- preProcess(x, method = "medianImpute") } expect_equal(pp$median, med) x.filled <- predict(pp, newdata=x) expect_false(any(is.na(x.filled))) expect_equal(x[!is.na(x)], x.filled[!is.na(x)]) med.filled <- apply(x.filled, 2, median) expect_equal(med.filled, med) } # Tested data matrix set.seed(1) x <- matrix(rnorm(20, mean=10,sd=5), nrow=4) x[2,1] <- x[3,4] <- x[2,5] <- x[4,5] <- NA x[,3] <- NA colnames(x) <- paste0("Var.",1:ncol(x)) test_that("median Impute works for matrix with named columns", { check.medianImpute(x) }) test_that("median Impute works for data.frames", { check.medianImpute(as.data.frame(x)) }) caret/tests/testthat/test_classDist.R0000644000176200001440000000405513153613153017472 0ustar liggesuserscontext('classDist') test_that("errors working", { trainSet = 1:3 expect_error( distData <- classDist( iris[trainSet, 1:4], iris$Species[trainSet] ) ,"more rows than columns" ) }) test_that("Object matches expectations - factor y", { trainSet <- sample(1:150, 100) x = iris[trainSet, 1:4] y = iris$Species[trainSet] distData <- classDist(x, y, pca = FALSE) # values expect_true(length(distData$values) == length(levels(y))) # classes expect_true(all(distData$classes %in% levels(y))) ## n expect_true(all(table(y) == distData$n)) ## cuts expect_null(distData$cuts) ## p expect_true(distData$p == ncol(x)) ## PCA - FALSE expect_null(distData$pca) ## PCA - TRUE distData2 <- classDist(x, y, pca = TRUE) PCA <- prcomp(x, center = TRUE, scale = TRUE, tol = sqrt(.Machine$double.eps)) expect_true(all(distData2$pca$sdev == PCA$sdev)) expect_true(all(distData2$pca$rotation == PCA$rotation)) }) test_that("Object matches expectations - numeric y", { trainSet <- sample(1:150, 100) x = iris[trainSet, 1:4] y = as.numeric(iris$Species[trainSet]) groups = 4 distData <- classDist(x, y, pca = FALSE, groups = groups) # values expect_true(length(distData$values) == length(unique(y)) - 1) # classes expect_true(all(distData$classes %in% as.character(seq(0, 100, 25))[2:5])) ## p expect_true(distData$p == ncol(x)) ## PCA - FALSE expect_null(distData$pca) ## PCA - TRUE distData2 <- classDist(x, y, pca = TRUE) PCA <- prcomp(x, center = TRUE, scale = TRUE, tol = sqrt(.Machine$double.eps)) expect_true(all(distData2$pca$sdev == PCA$sdev)) expect_true(all(distData2$pca$rotation == PCA$rotation)) }) test_that("predictions", { trainSet <- sample(1:150, 100) x = iris[trainSet, 1:4] y = iris$Species[trainSet] groups = 4 distData <- classDist(x, y, pca = FALSE, groups = groups) distData2 <- classDist(x, y, pca = TRUE, groups = groups) ## PCA and non-PCA preds match expect_equal(predict(distData, x), predict(distData2, x), tolerance = .0001) }) caret/tests/testthat/trim_C5.R0000644000176200001440000001266413153613153016011 0ustar liggesuserslibrary(caret) test_that('single tree', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "C5.0", tuneGrid = data.frame(trials = 1, model = "tree", winnow = FALSE), trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "C5.0", tuneGrid = data.frame(trials = 1, model = "tree", winnow = FALSE), trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) test_that('single rule', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "C5.0", tuneGrid = data.frame(trials = 1, model = "rules", winnow = FALSE), trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "C5.0", tuneGrid = data.frame(trials = 1, model = "rules", winnow = FALSE), trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) test_that('boosted tree', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "C5.0", tuneGrid = data.frame(trials = 5, model = "tree", winnow = FALSE), trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "C5.0", tuneGrid = data.frame(trials = 5, model = "tree", winnow = FALSE), trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) test_that('boosted rule', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "C5.0", tuneGrid = data.frame(trials = 5, model = "rules", winnow = FALSE), trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "C5.0", tuneGrid = data.frame(trials = 5, model = "rules", winnow = FALSE), trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) caret/tests/testthat/trim_bayesglm.R0000644000176200001440000000356713153613153017347 0ustar liggesuserslibrary(caret) test_that('bayesglm classification', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "bayesglm", tuneLength=1, trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "bayesglm", tuneLength=1, trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) test_that('bayesglm regression', { skip_on_cran() set.seed(1) tr_dat <- SLC14_1(200) te_dat <- SLC14_1(200) set.seed(2) reg_trim <- train(y ~ ., data = tr_dat, method = "bayesglm", tuneLength=1, trControl = trainControl(method = "none", trim = TRUE)) set.seed(2) reg_notrim <- train(y ~ ., data = tr_dat, method = "bayesglm", tuneLength=1, trControl = trainControl(method = "none", trim = FALSE)) expect_equal(predict(reg_trim, te_dat), predict(reg_notrim, te_dat)) expect_less_than(object.size(reg_trim)-object.size(reg_notrim), 0) }) caret/tests/testthat/test_bad_class_options.R0000644000176200001440000000243713153613153021231 0ustar liggesuserslibrary(caret) test_that('bad class levels', { skip_on_cran() set.seed(1) dat <- twoClassSim(100) dat$Class <- factor(ifelse(dat$Class == "Class1", "1", "0")) foo <- function(train_dat) train(Class ~ ., data = train_dat, method = "rpart", metric = "ROC", trControl = trainControl(classProbs = TRUE, summaryFunction = twoClassSummary)) expect_error(foo(dat)) }) test_that('no class probs with ROC', { skip_on_cran() set.seed(1) dat <- twoClassSim(100) foo <- function(train_dat) train(Class ~ ., data = train_dat, method = "rpart", metric = "ROC", trControl = trainControl(summaryFunction = twoClassSummary)) expect_error(foo(dat)) }) test_that('numeric y and classification', { skip_on_cran() set.seed(1) dat <- twoClassSim(100) dat$Class <- ifelse(dat$Class == "Class1", 1, 0) foo <- function(train_dat) train(Class ~ ., data = train_dat, method = "rpart") expect_warning(foo(dat)) }) test_that('3+ classes and twoClassSummary', { skip_on_cran() foo <- function() { data(oil) train(x = fattyAcids, y = oilType, method = "rpart", metric = "ROC", trControl = trainControl(classProbs = TRUE, summaryFunction = twoClassSummary)) } expect_error(foo()) })caret/tests/testthat/test_twoClassSummary.R0000644000176200001440000000166613153613153020723 0ustar liggesusers context('twoClassSummary') test_that("twoClassSummary is calculating correctly", { library(caret) set.seed(1) tr_dat <- twoClassSim(100) te_dat <- tr_dat tr_dat$Class = factor(tr_dat$Class, levels = rev(levels(te_dat$Class))) set.seed(35) mod1 <- train(Class ~ ., data = tr_dat, method = "fda", tuneLength = 10, metric = "ROC", trControl = trainControl(classProbs = TRUE, summaryFunction = twoClassSummary)) set.seed(35) mod2 <- train(Class ~ ., data = te_dat, method = "fda", tuneLength = 10, metric = "ROC", trControl = trainControl(classProbs = TRUE, summaryFunction = twoClassSummary)) expect_equal(mod1$resample$ROC, mod2$resample$ROC) expect_equal(mod1$resample$Sens, mod2$resample$Spec) expect_equal(mod1$resample$Spec, mod2$resample$Sens) }) caret/tests/testthat/trim.R0000644000176200001440000000416413153613153015456 0ustar liggesuserscontext('Test model object trimming') library(rpart) library(ipred) ################################################################### ## rpart tests functions check_rpart_reg <- function() { skip_on_cran() set.seed(1) train_dat <- SLC14_1(100) train_dat$factor_var <- factor(sample(letters[1:2], nrow(train_dat), replace = TRUE)) test_dat <- SLC14_1(1000) test_dat$factor_var <- factor(sample(letters[1:2], nrow(test_dat), replace = TRUE)) library(rpart) rpart_full <- rpart(y ~ ., data = train_dat) rpart_trim <- caret:::trim(rpart_full) predict(rpart_full, test_dat) - predict(rpart_trim, test_dat) } check_rpart_class <- function() { skip_on_cran() set.seed(1) train_dat <- twoClassSim(100) train_dat$factor_var <- factor(sample(letters[1:2], nrow(train_dat), replace = TRUE)) test_dat <- twoClassSim(1000) test_dat$factor_var <- factor(sample(letters[1:2], nrow(test_dat), replace = TRUE)) library(rpart) rpart_full <- rpart(Class ~ ., data = train_dat) rpart_trim <- caret:::trim(rpart_full) predict(rpart_full, test_dat)[, "Class1"] - predict(rpart_trim, test_dat)[, "Class1"] } ################################################################### ## bagging tests functions check_bag_reg <- function() { skip_on_cran() set.seed(1) train_dat <- SLC14_1(100) train_dat$factor_var <- factor(sample(letters[1:2], nrow(train_dat), replace = TRUE)) test_dat <- SLC14_1(1000) test_dat$factor_var <- factor(sample(letters[1:2], nrow(test_dat), replace = TRUE)) library(rpart) bag_full <- bagging(y ~ ., data = train_dat) bag_trim <- caret:::trim(bag_full) predict(bag_full, test_dat) - predict(bag_trim, test_dat) } ################################################################### ## Tests test_that("trimmed rpart regression produces identical predicted values", { expect_that(sum(check_rpart_reg()), equals(0)) }) test_that("trimmed rpart classification produces identical predicted values", { expect_that(sum(check_rpart_class()), equals(0)) }) test_that("trimmed bagging regression produces identical predicted values", { expect_that(sum(check_bag_reg()), equals(0)) }) caret/tests/testthat/test_preProcess_methods.R0000644000176200001440000004703413204413771021416 0ustar liggesuserslibrary(caret) library(fastICA) library(testthat) library(MASS) context('preProcess/methods') ################################################################### ## test centering and scaling test_that('centering and scaling trans', { skip_on_cran() set.seed(1) cs_dat1 <- twoClassSim(30)[, 1:5] cs_dat2 <- twoClassSim(30)[, 1:5] cs_dat1_means <- apply(cs_dat1, 2, mean) cs_dat1_sds <- apply(cs_dat1, 2, sd) cs_dat2_centered_exp <- cs_dat2 for(i in 1:ncol(cs_dat2_centered_exp)) cs_dat2_centered_exp[,i] <- cs_dat2_centered_exp[,i] - cs_dat1_means[i] cs_dat2_pp_centered <- preProcess(cs_dat1, "center") cs_dat2_centered <- predict(cs_dat2_pp_centered, cs_dat2) expect_equal(cs_dat2_centered_exp, cs_dat2_centered) cs_dat2_scaled_exp <- cs_dat2 for(i in 1:ncol(cs_dat2_scaled_exp)) cs_dat2_scaled_exp[,i] <- cs_dat2_scaled_exp[,i]/cs_dat1_sds[i] cs_dat2_pp_scaled <- preProcess(cs_dat1, "scale") cs_dat2_scaled <- predict(cs_dat2_pp_scaled, cs_dat2) expect_equal(cs_dat2_scaled_exp, cs_dat2_scaled) }) test_that('centering and scaling trans with missing data', { skip_on_cran() set.seed(1) cs_dat1 <- twoClassSim(30)[, 1:5] cs_dat2 <- twoClassSim(30)[, 1:5] cs_dat1[1, 3] <- NA cs_dat1[13, 5] <- NA cs_dat1_means <- apply(cs_dat1, 2, mean, na.rm = TRUE) cs_dat1_sds <- apply(cs_dat1, 2, sd, na.rm = TRUE) cs_dat2_centered_exp <- cs_dat2 for(i in 1:ncol(cs_dat2_centered_exp)) cs_dat2_centered_exp[,i] <- cs_dat2_centered_exp[,i] - cs_dat1_means[i] cs_dat2_pp_centered <- preProcess(cs_dat1, "center") cs_dat2_centered <- predict(cs_dat2_pp_centered, cs_dat2) expect_equal(cs_dat2_centered_exp, cs_dat2_centered) cs_dat2_scaled_exp <- cs_dat2 for(i in 1:ncol(cs_dat2_scaled_exp)) cs_dat2_scaled_exp[,i] <- cs_dat2_scaled_exp[,i]/cs_dat1_sds[i] cs_dat2_pp_scaled <- preProcess(cs_dat1, "scale") cs_dat2_scaled <- predict(cs_dat2_pp_scaled, cs_dat2) expect_equal(cs_dat2_scaled_exp, cs_dat2_scaled) }) ################################################################### ## test range test_that('conversion to range trans', { skip_on_cran() set.seed(1) rng_dat1 <- twoClassSim(30)[, 1:5] rng_dat2 <- twoClassSim(30)[, 1:5] rng_dat1_min <- apply(rng_dat1, 2, min, na.rm = TRUE) rng_dat1_max <- apply(rng_dat1, 2, max, na.rm = TRUE) rng_dat1_rng <- rng_dat1_max - rng_dat1_min # Default range [0, 1]: rng_dat2_ranged_exp <- rng_dat2 for(i in 1:ncol(rng_dat2_ranged_exp)) rng_dat2_ranged_exp[,i] <- (rng_dat2_ranged_exp[,i] - rng_dat1_min[i])/rng_dat1_rng[i] rng_dat2_pp <- preProcess(rng_dat1, "range") rng_dat2_ranged <- predict(rng_dat2_pp, rng_dat2) expect_equal(rng_dat2_ranged_exp, rng_dat2_ranged) # Custom range: rangeBounds = c(-0.7, 0.4) rng_dat2_ranged_custom_exp <- rng_dat2_ranged_exp for(i in 1:ncol(rng_dat2_ranged_custom_exp)) rng_dat2_ranged_custom_exp[,i] <- rng_dat2_ranged_custom_exp[,i] * (rangeBounds[2] - rangeBounds[1]) + rangeBounds[1] rng_dat2_custom_pp <- preProcess(rng_dat1, "range", rangeBounds = rangeBounds) rng_dat2_ranged_custom <- predict(rng_dat2_custom_pp, rng_dat2) expect_equal(rng_dat2_ranged_custom_exp, rng_dat2_ranged_custom) expect_error(preProcess(rng_dat1, "range", rangeBounds = ""), "'rangeBounds' should be a two-element numeric vector") expect_error(preProcess(rng_dat1, "range", rangeBounds = c(0.4, -0.7)), "'rangeBounds' interval is empty") }) test_that('conversion to range trans with missing data', { skip_on_cran() set.seed(1) rng_dat1 <- twoClassSim(30)[, 1:5] rng_dat2 <- twoClassSim(30)[, 1:5] rng_dat1[1, 3] <- NA rng_dat1[13, 5] <- NA rng_dat1_min <- apply(rng_dat1, 2, min, na.rm = TRUE) rng_dat1_max <- apply(rng_dat1, 2, max, na.rm = TRUE) rng_dat1_rng <- rng_dat1_max - rng_dat1_min # Default range [0, 1]: rng_dat2_ranged_exp <- rng_dat2 for(i in 1:ncol(rng_dat2_ranged_exp)) rng_dat2_ranged_exp[,i] <- (rng_dat2_ranged_exp[,i] - rng_dat1_min[i])/rng_dat1_rng[i] rng_dat2_pp <- preProcess(rng_dat1, "range") rng_dat2_ranged <- predict(rng_dat2_pp, rng_dat2) expect_equal(rng_dat2_ranged_exp, rng_dat2_ranged) # Custom range: rangeBounds = c(-0.7, 0.4) rng_dat2_ranged_custom_exp <- rng_dat2_ranged_exp for(i in 1:ncol(rng_dat2_ranged_custom_exp)) rng_dat2_ranged_custom_exp[,i] <- rng_dat2_ranged_custom_exp[,i] * (rangeBounds[2] - rangeBounds[1]) + rangeBounds[1] rng_dat2_custom_pp <- preProcess(rng_dat1, "range", rangeBounds = rangeBounds) rng_dat2_ranged_custom <- predict(rng_dat2_custom_pp, rng_dat2) expect_equal(rng_dat2_ranged_custom_exp, rng_dat2_ranged_custom) }) ################################################################### ## test pca test_that('PCA trans', { skip_on_cran() set.seed(1) pca_dat1 <- twoClassSim(30)[, 1:5] pca_dat2 <- twoClassSim(30)[, 1:5] pc_obj <- prcomp(pca_dat1, center = TRUE, scale. = TRUE) pca_dat2_exp <- as.data.frame(predict(pc_obj, pca_dat2)) pca_dat2_pp <- preProcess(pca_dat1, "pca") pca_dat2_pca <- as.data.frame(predict(pca_dat2_pp, pca_dat2)) expect_equal(pca_dat2_pca, pca_dat2_exp[, 1:ncol(pca_dat2_pca)]) }) test_that('PCA trans with missing data', { skip_on_cran() ## This will produce different results than prcomp with complete ## since preProcess calculates means and sds by column whereas ## prcomp does casewise deletion set.seed(1) pca_dat1 <- twoClassSim(30)[, 1:5] pca_dat2 <- twoClassSim(30)[, 1:5] pca_dat1[1, 3] <- NA pca_dat1[13, 5] <- NA pc_obj <- prcomp(pca_dat1[complete.cases(pca_dat1),], center = TRUE, scale. = TRUE) pca_dat2_pp <- preProcess(pca_dat1, "pca") expect_equal(pc_obj$rotation[, 1:ncol(pca_dat2_pp$rotation)], pca_dat2_pp$rotation) }) ################################################################### ## test ica test_that('ICA trans', { skip_on_cran() set.seed(1) ica_dat1 <- twoClassSim(30)[, 1:5] ica_dat2 <- twoClassSim(30)[, 1:5] set.seed(1) ica_dat2_pp <- preProcess(ica_dat1, method = "ica", n.comp = 3) ica_dat2_ica <- predict(ica_dat2_pp, ica_dat2) ica_dat1_means <- apply(ica_dat1, 2, mean) ica_dat1_sds <- apply(ica_dat1, 2, sd) ica_dat2_scaled <- ica_dat2 for(i in 1:ncol(ica_dat2_scaled)) ica_dat2_scaled[,i] <- (ica_dat2_scaled[,i]-ica_dat1_means[i])/ica_dat1_sds[i] set.seed(1) ic_obj <- fastICA(scale(ica_dat1, center = TRUE, scale = TRUE), n.comp = 3) ica_dat2_exp <- as.matrix(ica_dat2_scaled) %*% ic_obj$K %*% ic_obj$W colnames(ica_dat2_exp) <- paste("ICA", 1:ncol(ic_obj$W), sep = "") expect_equal(as.data.frame(ica_dat2_exp), ica_dat2_ica, tolerance = .00001) }) ################################################################### ## test SS test_that('Spatial sign trans', { skip_on_cran() set.seed(1) ss_dat1 <- twoClassSim(30)[, 1:5] ss_dat2 <- twoClassSim(30)[, 1:5] ss_dat2_pp <- preProcess(ss_dat1, method = "spatialSign") ss_dat2_ss <- predict(ss_dat2_pp, ss_dat2) ss_dat1_means <- apply(ss_dat1, 2, mean) ss_dat1_sds <- apply(ss_dat1, 2, sd) ss_dat2_scaled <- ss_dat2 for(i in 1:ncol(ss_dat2_scaled)) ss_dat2_scaled[,i] <- (ss_dat2_scaled[,i]-ss_dat1_means[i])/ss_dat1_sds[i] ss_dat2_ss_exp <- t(apply(ss_dat2_scaled, 1, function(x) x/sqrt(sum(x^2)))) expect_equal(as.data.frame(ss_dat2_ss_exp), ss_dat2_ss) }) ################################################################### ## test BC trans test_that('Box-Cox trans', { skip_on_cran() set.seed(1) bc_dat1 <- as.data.frame(1/abs(twoClassSim(30)[, 1:5])) bc_dat2 <- as.data.frame(1/abs(twoClassSim(30)[, 1:5])) bc_dat2_pp <- preProcess(bc_dat1, method = "BoxCox") bc_dat2_bc <- predict(bc_dat2_pp, bc_dat2) bc_trans <- lapply(bc_dat1, function(x) MASS::boxcox(x ~ rep(1, length(x)), plotit = FALSE)) bc_dat2_bc_exp <- bc_dat2 for(i in 1:ncol(bc_dat2)) { lambda <- bc_trans[[i]]$x[which.max(bc_trans[[i]]$y)] bc_dat2_bc_exp[, i] <- (bc_dat2_bc_exp[, i]^lambda - 1)/lambda } expect_equal(bc_dat2_bc_exp, bc_dat2_bc) }) test_that('Box-Cox trans with missing data', { skip_on_cran() set.seed(1) bc_dat1 <- as.data.frame(1/abs(twoClassSim(30)[, 1:5])) bc_dat2 <- as.data.frame(1/abs(twoClassSim(30)[, 1:5])) bc_dat1[1, 3] <- NA bc_dat1[13, 5] <- NA bc_dat2_pp <- preProcess(bc_dat1, method = "BoxCox") bc_dat2_bc <- predict(bc_dat2_pp, bc_dat2) bc_trans <- lapply(bc_dat1, function(x) { x <- x[!is.na(x)] MASS::boxcox(x ~ rep(1, length(x)), plotit = FALSE) }) bc_dat2_bc_exp <- bc_dat2 for(i in 1:ncol(bc_dat2)) { lambda <- bc_trans[[i]]$x[which.max(bc_trans[[i]]$y)] bc_dat2_bc_exp[, i] <- (bc_dat2_bc_exp[, i]^lambda - 1)/lambda } expect_equal(bc_dat2_bc_exp, bc_dat2_bc) }) ################################################################### ## test YJ trans test_that('Yeo-Johnson trans', { skip_on_cran() set.seed(1) yj_dat1 <- as.data.frame(1/abs(twoClassSim(30)[, 1:5])) yj_dat2 <- as.data.frame(1/abs(twoClassSim(30)[, 1:5])) yj_dat2_pp <- preProcess(yj_dat1, method = "YeoJohnson") yj_dat2_yj <- predict(yj_dat2_pp, yj_dat2) ## values derived from ## car::powerTransform(lm(x ~ rep(1, length(x))), ## family = "yjPower") yj_lambda_exp <- structure( c( -1.17126152733178,-0.824731066670367,-0.706588079282242, -1.03306249319229,-0.75439768809812 ), .Names = c("TwoFactor1", "TwoFactor2", "Linear01", "Linear02", "Linear03") ) expect_equal(yj_lambda_exp, yj_dat2_pp$yj, tolerance = 0.00001) yj_pred_exp <- structure( list( TwoFactor1 = c(0.420560715546019, 0.598378458024916, 0.673003010711217, 0.409422458736258, 0.371394756255572, 0.318908430839341, 0.285646719095963, 0.72916730138736, 0.734268076707233, 0.43551493952166, 0.290666454757254, 0.570964727404932, 0.263160240412776, 0.663420355641077, 0.534820290852273, 0.648861162529164, 0.375342714187168, 0.655069041209095, 0.356196716995193, 0.754580709735319, 0.815397568471886, 0.231018640782111, 0.834233681694831, 0.5143818322544, 0.605099195272536, 0.239342349309458, 0.325877110845926, 0.556910621166843, 0.656052500704136, 0.24465996399532 ), TwoFactor2 = c(0.301615328120378, 0.461445322028633, 0.707248808552887, 0.244768984552592, 1.01067529242088, 0.332615908226651, 0.370035788857244, 0.317957630575641, 0.431769991391304, 0.692643661966023, 0.264252145311897, 0.353880052286319, 0.470078031545033, 0.835560538413397, 0.604194627876356, 1.05840350841711, 0.618051438984101, 0.822322489981997, 1.12386389607311, 0.421962949614479, 0.517329161765426, 0.451124787548069, 1.05969439552782, 0.443643138202623, 0.510803120628854, 0.180141819953847, 0.410113908133513, 0.776831077228084, 0.524988359258372, 0.254416243052048), Linear01 = c(0.864108782192729, 0.506534494233161, 0.753535622067997, 0.860253617916964, 0.313567775794412, 0.30436144554366, 1.05735702776074, 0.534978869083642, 0.355974373056103, 0.755176403452401, 0.521648982558502, 0.320219904091857, 0.585541844373729, 1.13713060232867, 0.214875434194013, 0.516620862140554, 0.906242460460816, 0.517168699796354, 0.87193258014986, 0.589911997782569, 1.19526454070895, 0.915927115144444, 0.497212378712002, 1.35616124009747, 0.550617084276063, 0.412020915684127, 0.453856531631132, 0.961762046406687, 0.50326734704833, 0.515182583270066), Linear02 = c(0.281937013949507, 0.511134450487616, 0.503099179141131, 0.92837770431677, 0.700822354054209, 0.795814987202248, 0.69186082261781, 0.715544411078669, 0.719683350297892, 0.452487476967914, 0.568653097760424, 0.760480774493129, 0.52478703672863, 0.810734477261759, 0.928178968632499, 0.36987132660124, 0.854057804871416, 0.454516797058032, 0.587249892224224, 0.854756545648468, 0.452035356468675, 0.456792695615081, 0.902832766379788, 0.678172210837119, 0.375769901612575, 0.55844738028494, 0.753293517878738, 0.434506299792077, 0.615740571333, 0.751245083135553 ), Linear03 = c(0.797817560972044, 0.842890525491348, 0.73909086917419, 1.26084441662679, 0.459654364199453, 1.16332639149668, 0.646711567029346, 0.725775316422072, 0.326201989218444, 0.815996808114906, 0.74862498637551, 0.956541559335439, 0.507194706291381, 0.813874511711738, 0.415064030185865, 0.628661842981387, 0.312877518999078, 0.602008999383141, 0.746089364393084, 0.740571102400277, 0.482810402342108, 1.25094448369284, 0.646306153405863, 0.699357380858777, 0.689749274634193, 0.512604738920554, 0.934295181373473, 1.02826478194202, 0.680507562338646, 0.571037802377044)), .Names = c("TwoFactor1", "TwoFactor2", "Linear01", "Linear02", "Linear03"), row.names = c(NA, -30L), class = "data.frame") expect_equal(yj_pred_exp, yj_dat2_yj, tolerance = 0.00001) }) test_that('Yeo-Johnson trans with mising data', { skip_on_cran() set.seed(1) yj_dat1 <- as.data.frame(1/abs(twoClassSim(30)[, 1:5])) yj_dat2 <- as.data.frame(1/abs(twoClassSim(30)[, 1:5])) yj_dat1[1, 3] <- NA yj_dat1[13, 5] <- NA yj_dat2_pp <- preProcess(yj_dat1, method = "YeoJohnson") yj_dat2_yj <- predict(yj_dat2_pp, yj_dat2) yj_lambda_exp <- structure( c( -1.17126152733178, -0.824731066670367, -0.715673444662049, -1.03306249319229, -0.736848020368422 ), .Names = c("TwoFactor1", "TwoFactor2", "Linear01", "Linear02", "Linear03") ) expect_equal(yj_lambda_exp, yj_dat2_pp$yj, tolerance = 0.00001) # yj_trans <- lapply(yj_dat1, # function(x) { # x <- x[!is.na(x)] # powerTransform(lm(x ~ rep(1, length(x))), # family = "yjPower") # }) yj_pred_exp <- structure( list( TwoFactor1 = c(0.420560715546019, 0.598378458024916, 0.673003010711217, 0.409422458736258, 0.371394756255572, 0.318908430839341, 0.285646719095963, 0.72916730138736, 0.734268076707233, 0.43551493952166, 0.290666454757254, 0.570964727404932, 0.263160240412776, 0.663420355641077, 0.534820290852273, 0.648861162529164, 0.375342714187168, 0.655069041209095, 0.356196716995193, 0.754580709735319, 0.815397568471886, 0.231018640782111, 0.834233681694831, 0.5143818322544, 0.605099195272536, 0.239342349309458, 0.325877110845926, 0.556910621166843, 0.656052500704136, 0.24465996399532 ), TwoFactor2 = c(0.301615328120378, 0.461445322028633, 0.707248808552887, 0.244768984552592, 1.01067529242088, 0.332615908226651, 0.370035788857244, 0.317957630575641, 0.431769991391304, 0.692643661966023, 0.264252145311897, 0.353880052286319, 0.470078031545033, 0.835560538413397, 0.604194627876356, 1.05840350841711, 0.618051438984101, 0.822322489981997, 1.12386389607311, 0.421962949614479, 0.517329161765426, 0.451124787548069, 1.05969439552782, 0.443643138202623, 0.510803120628854, 0.180141819953847, 0.410113908133513, 0.776831077228084, 0.524988359258372, 0.254416243052048), Linear01 = c(0.859697552530382, 0.505200378017733, 0.7503246827416, 0.855888682989617, 0.31308441235727, 0.303907192021672, 1.05012555512123, 0.533477428995901, 0.35534406181835, 0.751949477622746, 0.520227395531799, 0.319714893812003, 0.583713717377287, 1.12837971026997, 0.214654343323898, 0.51522873399003, 0.901302407307642, 0.515773379454426, 0.867426342877088, 0.588053820678508, 1.18522771771748, 0.910859379040186, 0.495930605674975, 1.34127944309918, 0.549018671634491, 0.411162871887377, 0.452802483285271, 0.956056882269354, 0.501951714221192, 0.513798815505467), Linear02 = c(0.281937013949507, 0.511134450487616, 0.503099179141131, 0.92837770431677, 0.700822354054209, 0.795814987202248, 0.69186082261781, 0.715544411078669, 0.719683350297892, 0.452487476967914, 0.568653097760424, 0.760480774493129, 0.52478703672863, 0.810734477261759, 0.928178968632499, 0.36987132660124, 0.854057804871416, 0.454516797058032, 0.587249892224224, 0.854756545648468, 0.452035356468675, 0.456792695615081, 0.902832766379788, 0.678172210837119, 0.375769901612575, 0.55844738028494, 0.753293517878738, 0.434506299792077, 0.615740571333, 0.751245083135553 ), Linear03 = c(0.805118298846952, 0.85121450654463, 0.745194683843413, 1.2860525878536, 0.461776644848524, 1.18271554878404, 0.651210085828673, 0.731627675071425, 0.32722557069373, 0.823698767964377, 0.75491324104535, 0.967916002781324, 0.509821503332055, 0.821528847028035, 0.416768926547462, 0.632882793009867, 0.313815323629623, 0.605840186293055, 0.752328204612178, 0.746703310040928, 0.485170543055165, 1.27545020954066, 0.650798314402513, 0.70473143893381, 0.694955980686517, 0.515292996577666, 0.945013657354694, 1.04198422179449, 0.68555654074888, 0.574445121616549)), .Names = c("TwoFactor1", "TwoFactor2", "Linear01", "Linear02", "Linear03"), row.names = c(NA, -30L), class = "data.frame") expect_equal(yj_pred_exp, yj_dat2_yj, tolerance = 0.00001) }) ################################################################### ## test variable filtering test_that('filters', { skip_on_cran() dat <- data.frame(x1 = 1:50, x2 = 1, x3 = c(rep(1, 49), 0), x4 = c(rep(0, 50), 1:50), y = factor(rep(letters[1:2], each = 50))) no_zv <- preProcess(dat, method = "zv") no_nzv <- preProcess(dat, method = "nzv") no_xgy <- preProcess(dat, method = "conditionalX", outcome = dat$y) filter_mean <- preProcess(dat, method = list(conditionalX = names(dat)[1:4], center = "x1"), outcome = dat$y) no_zv_pred <- predict(no_zv, dat) no_nzv_pred <- predict(no_nzv, dat) no_xgy_pred <- predict(no_xgy, dat[, 1:4]) filter_mean_pred <- predict(filter_mean, dat[, 1:4]) x1_exp <- dat$x1 - mean(dat$x1) expect_equal(colnames(no_zv_pred), c("x1", "x3", "x4", "y")) expect_equal(colnames(no_nzv_pred), c("x1", "x4", "y")) expect_equal(colnames(no_xgy_pred), c("x1", "x3")) expect_equal(colnames(filter_mean_pred), c("x1", "x3")) expect_equal(filter_mean_pred$x1, x1_exp) }) caret/tests/testthat/test_spatialSign.R0000644000176200001440000000157413206642366020031 0ustar liggesuserscontext('spatialSign') test_that("errors working", { # vector expect_error(spatialSign(iris$Species) ,"not defined" ) # matrix expect_error(spatialSign(as.matrix(iris)) ,"not defined" ) # data.frame expect_error(spatialSign(iris) ,"not defined" ) }) test_that("results match", { x = -100:100 all(spatialSign(x) == x/sqrt(sum(x^2))) i4 <- spatialSign(iris[,1:4]) all(as.matrix(i4) == t(apply(iris[,1:4], 1, spatialSign))) }) test_that("high level tests", { i4 <- spatialSign(iris[,1:4]) expect_true(all(colnames(i4) == names(iris[1:4]))) expect_true(all(dim(i4) == dim(iris[1:4]))) }) test_that("missing data", { iris[c(1, 51, 101), 1] <- NA i5 <- spatialSign(iris[,1:4]) exp_res <- iris[,1:4] / apply(iris[,1:4], 1, function(x) sqrt(sum(x^2, na.rm = TRUE))) expect_equivalent(i5, as.matrix(exp_res)) }) caret/tests/testthat/test_gafs.R0000644000176200001440000000213113153613153016452 0ustar liggesuserscontext('gafs') test_that("gafsControl errors working", { expect_error(gafsControl(method = "larry") ,"method should be one of") expect_error(gafsControl(metric = c("larry", "harry", "moe")) ,"should be a two-element named vector") expect_error(gafsControl(maximize = c("larry", "harry", "moe")) ,"should be a two-element named vector") }) test_that("high level tests", { expect_silent(pop <- gafs_initial(vars = 10, popSize = 10)) expect_silent(gafs_lrSelection(population = pop, fitness = 1:10)) expect_silent(gafs_spCrossover(population = pop, fitness = 1:10, parents = 1:2)) train_data <- twoClassSim(10, noiseVars = 1) test_data <- twoClassSim(10, noiseVars = 2) expect_silent( ctrl <- gafsControl(functions = rfGA, method = "cv", number = 3) ) ## Too slow # expect_silent( # rf_search <- gafs(x = train_data[, -ncol(train_data)], # y = train_data$Class, # iters = 2, # gafsControl = ctrl) # ) }) caret/tests/testthat/test_BoxCox.R0000644000176200001440000000156613153613153016747 0ustar liggesuserscontext('Box Cox transformations') ################################################################### ## Generate data and do BC using the source function to get ## expected results library(MASS) set.seed(1) dat <- matrix(runif(30), ncol = 3) dat[,1] <- exp(dat[,1]) colnames(dat) <- paste0("x", 1:3) exp_lambdas <- rep(NA, 3) for(i in 1:ncol(dat)) { tmp <- as.data.frame(dat)[,i,drop = FALSE] names(tmp)[1] <- "x" tmp_bc <- boxcox(x ~ 1, data = tmp, plotit = FALSE, lambda = seq(-2, 2, by = .1)) exp_lambdas[i] <- tmp_bc$x[which.max(tmp_bc$y)] } check_BoxCox <- function(x, expected = NULL) { pp1 <- preProcess(x, method = "BoxCox") obs_lambdas1 <- unlist(lapply(pp1$bc, function(x) x$lambda)) names(obs_lambdas1) <- NULL expect_equal(obs_lambdas1, expected) } check_BoxCox(dat, expected = exp_lambdas) check_BoxCox(as.data.frame(dat), expected = exp_lambdas) caret/tests/testthat/test_preProcess_internals.R0000644000176200001440000000111513153613153021737 0ustar liggesuserscontext('Test preProcess internals') test_that("handles situation when there's a single column per transformation", { # For the data below, the list of transformations used internally by # "preProcess" contains a single related attribute # for each transformation; namely, `method=list(center="y", ignore="x")`. # At certain point such setting didn't work properly. x <- data.frame(x=factor(c("a", "a")), y=c(1, 2)) model <- caret::preProcess(method="center", x=x) preprocessed <- predict(model, x) expect_equal(preprocessed, data.frame(x=c("a", "a"), y=c(-0.5, 0.5))) }) caret/tests/testthat/trim_glmnet.R0000644000176200001440000000376313153613153017030 0ustar liggesuserslibrary(caret) test_that('glmnet classification', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "glmnet", tuneGrid = data.frame(lambda = .1, alpha = .5), trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "glmnet", tuneGrid = data.frame(lambda = .1, alpha = .5), trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) test_that('glmnet regression', { skip_on_cran() set.seed(1) tr_dat <- SLC14_1(200) te_dat <- SLC14_1(200) set.seed(2) reg_trim <- train(y ~ ., data = tr_dat, method = "glmnet", tuneGrid = data.frame(lambda = .1, alpha = .5), trControl = trainControl(method = "none", trim = TRUE)) set.seed(2) reg_notrim <- train(y ~ ., data = tr_dat, method = "glmnet", tuneGrid = data.frame(lambda = .1, alpha = .5), trControl = trainControl(method = "none", trim = FALSE)) expect_equal(predict(reg_trim, te_dat), predict(reg_notrim, te_dat)) expect_less_than(object.size(reg_trim)-object.size(reg_notrim), 0) }) caret/tests/testthat/test_varImp.R0000644000176200001440000000103413153613153016771 0ustar liggesuserscontext('varImp') test_that("high level tests", { data(iris) TrainData <- iris[,1:4] TrainClasses <- iris[,5] expect_silent( knnFit1 <- train(TrainData, TrainClasses, method = "knn", preProcess = c("center", "scale"), tuneLength = 10, trControl = trainControl(method = "cv")) ) expect_silent(vv <- varImp(knnFit1)) expect_true(ncol(vv$importance) == length(levels(TrainClasses))) expect_true(nrow(vv$importance) == ncol(TrainData)) }) caret/tests/testthat/trim_treebag.R0000644000176200001440000000356513153613153017153 0ustar liggesuserslibrary(caret) test_that('treebag classification', { skip_on_cran() set.seed(1) tr_dat <- twoClassSim(200) te_dat <- twoClassSim(200) set.seed(2) class_trim <- train(Class ~ ., data = tr_dat, method = "treebag", nbagg = 3, trControl = trainControl(method = "none", classProbs = TRUE, trim = TRUE)) set.seed(2) class_notrim <- train(Class ~ ., data = tr_dat, method = "treebag", nbagg = 3, trControl = trainControl(method = "none", classProbs = TRUE, trim = FALSE)) expect_equal(predict(class_trim, te_dat), predict(class_notrim, te_dat)) expect_equal(predict(class_trim, te_dat, type = "prob"), predict(class_notrim, te_dat, type = "prob")) expect_less_than(object.size(class_trim)-object.size(class_notrim), 0) }) test_that('rpart regression', { skip_on_cran() set.seed(1) tr_dat <- SLC14_1(200) te_dat <- SLC14_1(200) set.seed(2) reg_trim <- train(y ~ ., data = tr_dat, method = "treebag", nbagg = 3, trControl = trainControl(method = "none", trim = TRUE)) set.seed(2) reg_notrim <- train(y ~ ., data = tr_dat, method = "treebag", nbagg = 3, trControl = trainControl(method = "none", trim = FALSE)) expect_equal(predict(reg_trim, te_dat), predict(reg_notrim, te_dat)) expect_less_than(object.size(reg_trim)-object.size(reg_notrim), 0) }) caret/tests/testthat/test_Dummies.R0000644000176200001440000001317213153613153017144 0ustar liggesuserscontext('Dummy Variables') ## Test cases by Josh Brady (doublej2) from issue #344 check_dummies <- function(x, expected = NULL) { dfTrain <- data.frame(xf = c('a','b','c')) dfTest <- data.frame(xf = c('a','b')) dummyObj1 <- dummyVars(~., dfTrain) expected_train <- diag(3) colnames(expected_train) <- paste0("xf.", letters[1:3]) rownames(expected_train) <- paste(1:3) expected_test <- expected_train[1:2,] expect_equal(predict(dummyObj1, newdata = dfTrain), expected_train) expect_equal(predict(dummyObj1, newdata = dfTest), expected_test) ################################################################### ## tests related to issue #390 ## from ?dummyVars when <- data.frame(time = c("afternoon", "night", "afternoon", "morning", "morning", "morning", "morning", "afternoon", "afternoon"), day = c("Mon", "Mon", "Mon", "Wed", "Wed", "Fri", "Sat", "Sat", "Fri")) levels(when$time) <- list(morning="morning", afternoon="afternoon", night="night") levels(when$day) <- list(Mon="Mon", Tue="Tue", Wed="Wed", Thu="Thu", Fri="Fri", Sat="Sat", Sun="Sun") mainEffects <- dummyVars(~ day + time, data = when) interactionModel <- dummyVars(~ day + time + day:time, data = when, sep = ".") noNames <- dummyVars(~ day + time + day:time, data = when, levelsOnly = TRUE) exp_main_nomissing <- structure(c(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0), .Dim = 9:10, .Dimnames = list( c("1", "2", "3", "4", "5", "6", "7", "8", "9"), c("day.Mon", "day.Tue", "day.Wed", "day.Thu", "day.Fri", "day.Sat", "day.Sun", "time.morning", "time.afternoon", "time.night"))) res_main_nomissing <- predict(mainEffects, when) expect_equal(res_main_nomissing, exp_main_nomissing) when2 <- when when2[1, 1] <- NA exp_main_missing <- structure(c(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NA, 0, 0, 1, 1, 1, 1, 0, 0, NA, 0, 1, 0, 0, 0, 0, 1, 1, NA, 1, 0, 0, 0, 0, 0, 0, 0), .Dim = 9:10, .Dimnames = list( c("1", "2", "3", "4", "5", "6", "7", "8", "9"), c("day.Mon", "day.Tue", "day.Wed", "day.Thu", "day.Fri", "day.Sat", "day.Sun", "time.morning", "time.afternoon", "time.night"))) res_main_missing <- predict(mainEffects, when2) expect_equal(res_main_missing, exp_main_missing) exp_main_omit <- structure(c(1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0), .Dim = c(8L, 10L), .Dimnames = list(c("2", "3", "4", "5", "6", "7", "8", "9"), c("day.Mon", "day.Tue", "day.Wed", "day.Thu", "day.Fri", "day.Sat", "day.Sun", "time.morning", "time.afternoon", "time.night"))) res_main_omit <- predict(mainEffects, when2, na.action = na.omit) expect_equal(res_main_omit, exp_main_omit) ################################################################### ## tests related to issue #390 test_data <- data.frame('id' = seq(1,30,1), 'fooFactor' = factor(c(rep(1,10), rep(2,10), rep(3,10))), 'fooFactorBar' = factor(c(rep(4,10), rep(5,10), rep(6,10))), 'fooBarFactor' = factor(c(rep(7,10), rep(8,10), rep(9,10)))) foosbars <- dummies <- dummyVars(formula = id ~., data = test_data, sep = '-') exp_names <- c(paste("fooFactor", 1:3, sep = "-"), paste("fooFactorBar", 4:6, sep = "-"), paste("fooBarFactor", 7:9, sep = "-")) res_names <- colnames(predict(foosbars, test_data)) expect_equal(exp_names, res_names) foosbarsbars <- dummies <- dummyVars(formula = id ~., data = test_data, sep = '-', levelsOnly = TRUE) exp_names_lvls <- paste(1:9) res_names_lvls <- colnames(predict(foosbarsbars, test_data)) expect_equal(exp_names_lvls, res_names_lvls) } caret/src/0000755000176200001440000000000013207340464012142 5ustar liggesuserscaret/src/caret.c0000644000176200001440000001402513207340464013406 0ustar liggesusers/* * class/class.c by W. N. Venables and B. D. Ripley Copyright (C) 1994-2002 * modificatios by Andre Williams */ #include #define EPS 1e-4 /* relative test of equality of distances */ #define RANDIN GetRNGstate() #define RANDOUT PutRNGstate() #define UNIF unif_rand() #define MAX_TIES 1000 /* Not worth doing this dynamically -- limits k + # ties + fence, in fact */ void knn3(Sint *kin, Sint *lin, Sint *pntr, Sint *pnte, Sint *p, double *train, Sint *class, double *test, Sint *votes, Sint *nc, Sint *cv, Sint *use_all,double *all_vote) { int i, index, j, k, k1, kinit = *kin, kn, l = *lin, mm, npat, ntie, ntr = *pntr, nte = *pnte, extras; int pos[MAX_TIES], nclass[MAX_TIES]; int j1, j2, needed, t; double dist, tmp, nndist[MAX_TIES]; RANDIN; /* Use a 'fence' in the (k+1)st position to avoid special cases. Simple insertion sort will suffice since k will be small. */ for (npat = 0; npat < nte; npat++) { kn = kinit; for (k = 0; k < kn; k++) nndist[k] = 0.99 * DOUBLE_XMAX; for (j = 0; j < ntr; j++) { if ((*cv > 0) && (j == npat)) continue; dist = 0.0; for (k = 0; k < *p; k++) { tmp = test[npat + k * nte] - train[j + k * ntr]; dist += tmp * tmp; } /* Use 'fuzz' since distance computed could depend on order of coordinates */ if (dist <= nndist[kinit - 1] * (1 + EPS)) for (k = 0; k <= kn; k++) if (dist < nndist[k]) { for (k1 = kn; k1 > k; k1--) { nndist[k1] = nndist[k1 - 1]; pos[k1] = pos[k1 - 1]; } nndist[k] = dist; pos[k] = j; /* Keep an extra distance if the largest current one ties with current kth */ if (nndist[kn] <= nndist[kinit - 1]) if (++kn == MAX_TIES - 1) error("too many ties in knn"); break; } nndist[kn] = 0.99 * DOUBLE_XMAX; } for (j = 0; j <= *nc; j++) votes[j] = 0; if (*use_all) { for (j = 0; j < kinit; j++) votes[class[pos[j]]]++; extras = 0; for (j = kinit; j < kn; j++) { if (nndist[j] > nndist[kinit - 1] * (1 + EPS)) break; extras++; votes[class[pos[j]]]++; } } else { /* break ties at random */ extras = 0; for (j = 0; j < kinit; j++) { if (nndist[j] >= nndist[kinit - 1] * (1 - EPS)) break; votes[class[pos[j]]]++; } j1 = j; if (j1 == kinit - 1) { /* no ties for largest */ votes[class[pos[j1]]]++; } else { /* Use reservoir sampling to choose amongst the tied distances */ j1 = j; needed = kinit - j1; for (j = 0; j < needed; j++) nclass[j] = class[pos[j1 + j]]; t = needed; for (j = j1 + needed; j < kn; j++) { if (nndist[j] > nndist[kinit - 1] * (1 + EPS)) break; if (++t * UNIF < needed) { j2 = j1 + (int) (UNIF * needed); nclass[j2] = class[pos[j]]; } } for (j = 0; j < needed; j++) votes[nclass[j]]++; } } /* Use reservoir sampling to choose amongst the tied votes */ ntie = 1; if (l > 0) mm = l - 1 + extras; else mm = 0; index = 0; for (i = 1; i <= *nc; i++){ if (votes[i] > mm) { ntie = 1; index = i; mm = votes[i]; } else if (votes[i] == mm && votes[i] >= l) { if (++ntie * UNIF < 1.0) index = i; } all_vote[npat*(*nc) + (i-1)] = (double)votes[i]/(kinit+extras); } } RANDOUT; } void knn3reg(Sint *kin, Sint *pntr, Sint *pnte, Sint *p, double *train, double *y, double *test, double *means, Sint *cv, Sint *use_all) { int j, k, k1, kinit = *kin, kn, npat, ntr = *pntr, nte = *pnte, extras; int pos[MAX_TIES]; int j1, j2, needed, t; double dist, tmp, nndist[MAX_TIES], ny[MAX_TIES]; int count; double sum; RANDIN; /* Use a 'fence' in the (k+1)st position to avoid special cases. Simple insertion sort will suffice since k will be small. */ for (npat = 0; npat < nte; npat++) { sum = 0.0; count = 0; kn = kinit; for (k = 0; k < kn; k++) nndist[k] = 0.99 * DOUBLE_XMAX; for (j = 0; j < ntr; j++) { if ((*cv > 0) && (j == npat)) continue; dist = 0.0; for (k = 0; k < *p; k++) { tmp = test[npat + k * nte] - train[j + k * ntr]; dist += tmp * tmp; } /* Use 'fuzz' since distance computed could depend on order of coordinates */ if (dist <= nndist[kinit - 1] * (1 + EPS)) for (k = 0; k <= kn; k++) if (dist < nndist[k]) { for (k1 = kn; k1 > k; k1--) { nndist[k1] = nndist[k1 - 1]; pos[k1] = pos[k1 - 1]; } nndist[k] = dist; pos[k] = j; /* Keep an extra distance if the largest current one ties with current kth */ if (nndist[kn] <= nndist[kinit - 1]) if (++kn == MAX_TIES - 1) error("too many ties in knn"); break; } nndist[kn] = 0.99 * DOUBLE_XMAX; } if (*use_all) { for (j = 0; j < kinit; j++) { sum += y[pos[j]]; } count += kinit; extras = 0; for (j = kinit; j < kn; j++) { if (nndist[j] > nndist[kinit - 1] * (1 + EPS)) break; extras++; sum += y[pos[j]]; } count += extras; } else { /* break ties at random */ extras = 0; for (j = 0; j < kinit; j++) { if (nndist[j] >= nndist[kinit - 1] * (1 - EPS)) break; sum += y[pos[j]]; } count += j; j1 = j; if (j1 == kinit - 1) { /* no ties for largest */ sum += y[pos[j1]]; count += 1; } else { /* Use reservoir sampling to choose amongst the tied distances */ j1 = j; needed = kinit - j1; for (j = 0; j < needed; j++) ny[j] = y[pos[j1 + j]]; t = needed; for (j = j1 + needed; j < kn; j++) { if (nndist[j] > nndist[kinit - 1] * (1 + EPS)) break; if (++t * UNIF < needed) { j2 = j1 + (int) (UNIF * needed); ny[j2] = y[pos[j]]; } } for (j = 0; j < needed; j++) { sum += ny[j]; } count += j; } } means[npat] = sum /(double)count; } RANDOUT; } #include "R_ext/Rdynload.h" static const R_CMethodDef CEntries[] = { {"knn3", (DL_FUNC) &knn3, 13}, {"knn3reg", (DL_FUNC) &knn3reg, 10}, {NULL, NULL, 0} }; void R_init_caret(DllInfo *dll) { R_registerRoutines(dll, CEntries, NULL, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } caret/NAMESPACE0000644000176200001440000002614513153613153012600 0ustar liggesusers# Generated by roxygen2: do not edit by hand S3method(BoxCoxTrans,default) S3method(F_meas,default) S3method(F_meas,table) S3method(as.data.frame,resamples) S3method(as.matrix,confusionMatrix) S3method(as.matrix,resamples) S3method(as.table,confusionMatrix) S3method(avNNet,default) S3method(avNNet,formula) S3method(bag,default) S3method(bag,formula) S3method(bagEarth,default) S3method(bagEarth,formula) S3method(bagFDA,default) S3method(bagFDA,formula) S3method(bwplot,diff.resamples) S3method(bwplot,resamples) S3method(calibration,default) S3method(calibration,formula) S3method(classDist,default) S3method(cluster,default) S3method(cluster,resamples) S3method(confusionMatrix,default) S3method(confusionMatrix,rfe) S3method(confusionMatrix,sbf) S3method(confusionMatrix,table) S3method(confusionMatrix,train) S3method(densityplot,diff.resamples) S3method(densityplot,resamples) S3method(densityplot,rfe) S3method(densityplot,sbf) S3method(densityplot,train) S3method(diff,resamples) S3method(dotplot,diff.resamples) S3method(dotplot,resamples) S3method(dummyVars,default) S3method(enumLC,default) S3method(expoTrans,default) S3method(fitted,train) S3method(format,bagEarth) S3method(gafs,default) S3method(ggplot,calibration) S3method(ggplot,lift) S3method(ggplot,rfe) S3method(ggplot,train) S3method(ggplot,varImp.train) S3method(histogram,rfe) S3method(histogram,sbf) S3method(histogram,train) S3method(icr,default) S3method(icr,formula) S3method(knn3,data.frame) S3method(knn3,formula) S3method(knn3,matrix) S3method(knnreg,data.frame) S3method(knnreg,default) S3method(knnreg,formula) S3method(knnreg,matrix) S3method(levelplot,diff.resamples) S3method(levels,train) S3method(lift,default) S3method(lift,formula) S3method(negPredValue,default) S3method(negPredValue,matrix) S3method(negPredValue,table) S3method(nullModel,default) S3method(oob_pred,list) S3method(oob_pred,rfe) S3method(oob_pred,sbf) S3method(oob_pred,train) S3method(parallelplot,resamples) S3method(pcaNNet,default) S3method(pcaNNet,formula) S3method(plot,calibration) S3method(plot,gafs) S3method(plot,lift) S3method(plot,prcomp.resamples) S3method(plot,rfe) S3method(plot,safs) S3method(plot,train) S3method(plot,varImp.train) S3method(plsda,default) S3method(posPredValue,default) S3method(posPredValue,matrix) S3method(posPredValue,table) S3method(prcomp,resamples) S3method(preProcess,default) S3method(precision,default) S3method(precision,table) S3method(predict,BoxCoxTrans) S3method(predict,avNNet) S3method(predict,bag) S3method(predict,bagEarth) S3method(predict,bagFDA) S3method(predict,classDist) S3method(predict,dummyVars) S3method(predict,expoTrans) S3method(predict,gafs) S3method(predict,icr) S3method(predict,knn3) S3method(predict,knnreg) S3method(predict,list) S3method(predict,nullModel) S3method(predict,pcaNNet) S3method(predict,plsda) S3method(predict,preProcess) S3method(predict,rfe) S3method(predict,safs) S3method(predict,sbf) S3method(predict,splsda) S3method(predict,train) S3method(predict,train.recipe) S3method(predictors,default) S3method(predictors,formula) S3method(predictors,gafs) S3method(predictors,list) S3method(predictors,rfe) S3method(predictors,safs) S3method(predictors,sbf) S3method(predictors,terms) S3method(predictors,train) S3method(print,BoxCoxTrans) S3method(print,avNNet) S3method(print,bag) S3method(print,bagEarth) S3method(print,bagFDA) S3method(print,calibration) S3method(print,classDist) S3method(print,confusionMatrix) S3method(print,confusionMatrix.rfe) S3method(print,confusionMatrix.sbf) S3method(print,confusionMatrix.train) S3method(print,diff.resamples) S3method(print,dummyVars) S3method(print,expoTrans) S3method(print,gafs) S3method(print,icr) S3method(print,knn3) S3method(print,knnreg) S3method(print,lift) S3method(print,nullModel) S3method(print,pcaNNet) S3method(print,plsda) S3method(print,prcomp.resamples) S3method(print,preProcess) S3method(print,resamples) S3method(print,rfe) S3method(print,safs) S3method(print,sbf) S3method(print,splsda) S3method(print,summary.bag) S3method(print,summary.bagEarth) S3method(print,summary.bagFDA) S3method(print,summary.diff.resamples) S3method(print,summary.resamples) S3method(print,train) S3method(print,varImp.train) S3method(recall,default) S3method(recall,table) S3method(resamples,default) S3method(residuals,train) S3method(rfe,default) S3method(rfe,formula) S3method(safs,default) S3method(sbf,default) S3method(sbf,formula) S3method(sensitivity,default) S3method(sensitivity,table) S3method(sort,resamples) S3method(spatialSign,data.frame) S3method(spatialSign,default) S3method(spatialSign,matrix) S3method(specificity,default) S3method(specificity,table) S3method(splom,resamples) S3method(splsda,default) S3method(stripplot,rfe) S3method(stripplot,train) S3method(summary,bag) S3method(summary,bagEarth) S3method(summary,bagFDA) S3method(summary,diff.resamples) S3method(summary,resamples) S3method(summary,train) S3method(train,default) S3method(train,formula) S3method(train,recipe) S3method(trim,train) S3method(update,gafs) S3method(update,rfe) S3method(update,safs) S3method(update,train) S3method(varImp,C5.0) S3method(varImp,JRip) S3method(varImp,PART) S3method(varImp,RRF) S3method(varImp,RandomForest) S3method(varImp,avNNet) S3method(varImp,bagEarth) S3method(varImp,bagFDA) S3method(varImp,classbagg) S3method(varImp,cubist) S3method(varImp,dsa) S3method(varImp,earth) S3method(varImp,fda) S3method(varImp,gafs) S3method(varImp,gam) S3method(varImp,gbm) S3method(varImp,glm) S3method(varImp,glmnet) S3method(varImp,lm) S3method(varImp,multinom) S3method(varImp,mvr) S3method(varImp,nnet) S3method(varImp,pamrtrained) S3method(varImp,plsda) S3method(varImp,randomForest) S3method(varImp,regbagg) S3method(varImp,rfe) S3method(varImp,rpart) S3method(varImp,safs) S3method(varImp,sbf) S3method(varImp,train) S3method(xyplot,calibration) S3method(xyplot,lift) S3method(xyplot,resamples) S3method(xyplot,rfe) S3method(xyplot,train) export(BoxCoxTrans) export(F_meas) export(LPH07_1) export(LPH07_2) export(MAE) export(MeanSD) export(R2) export(RMSE) export(SLC14_1) export(SLC14_2) export(anovaScores) export(avNNet) export(bag) export(bagControl) export(bagEarth) export(bagEarthStats) export(bagFDA) export(best) export(calibration) export(caretFuncs) export(caretGA) export(caretSA) export(caretSBF) export(caretTheme) export(cforestStats) export(checkConditionalX) export(checkInstall) export(checkResamples) export(class2ind) export(classDist) export(cluster) export(compare_models) export(confusionMatrix) export(confusionMatrix.train) export(contr.dummy) export(contr.ltfr) export(createDataPartition) export(createFolds) export(createModel) export(createMultiFolds) export(createResample) export(createTimeSlices) export(ctreeBag) export(defaultSummary) export(dotPlot) export(downSample) export(dummyVars) export(expandParameters) export(expoTrans) export(extractPrediction) export(extractProb) export(featurePlot) export(filterVarImp) export(findCorrelation) export(findLinearCombos) export(flatTable) export(gafs) export(gafs.default) export(gafsControl) export(gafs_initial) export(gafs_lrSelection) export(gafs_raMutation) export(gafs_rwSelection) export(gafs_spCrossover) export(gafs_tourSelection) export(gafs_uCrossover) export(gamFormula) export(gamFuncs) export(gamScores) export(getModelInfo) export(getSamplingInfo) export(getTrainPerf) export(groupKFold) export(hasTerms) export(icr) export(index2vec) export(ipredStats) export(knn3) export(knn3Train) export(knnreg) export(knnregTrain) export(ldaBag) export(ldaFuncs) export(ldaSBF) export(learing_curve_dat) export(lift) export(lmFuncs) export(lmSBF) export(lrFuncs) export(maxDissim) export(minDiss) export(mnLogLoss) export(modelCor) export(modelLookup) export(multiClassSummary) export(nbBag) export(nbFuncs) export(nbSBF) export(nearZeroVar) export(negPredValue) export(nnetBag) export(nullModel) export(nzv) export(oneSE) export(outcome_conversion) export(panel.calibration) export(panel.lift) export(panel.lift2) export(panel.needle) export(pcaNNet) export(pickSizeBest) export(pickSizeTolerance) export(pickVars) export(plot.gafs) export(plot.rfe) export(plot.train) export(plotClassProbs) export(plotObsVsPred) export(plsBag) export(plsda) export(posPredValue) export(postResample) export(prSummary) export(preProcess) export(precision) export(predict.bagEarth) export(predict.gafs) export(predict.train) export(predictionFunction) export(predictors) export(print.train) export(probFunction) export(progress) export(recall) export(resampleHist) export(resampleSummary) export(resampleWrapper) export(resamples) export(rfFuncs) export(rfGA) export(rfSA) export(rfSBF) export(rfStats) export(rfe) export(rfeControl) export(rfeIter) export(safs) export(safsControl) export(safs_initial) export(safs_perturb) export(safs_prob) export(sbf) export(sbfControl) export(sbfIter) export(sensitivity) export(sortImp) export(spatialSign) export(specificity) export(splsda) export(sumDiss) export(summary.bagEarth) export(svmBag) export(thresholder) export(tolerance) export(train) export(trainControl) export(treebagFuncs) export(treebagGA) export(treebagSA) export(treebagSBF) export(twoClassSim) export(twoClassSummary) export(upSample) export(varImp) export(var_seq) export(well_numbered) import(foreach) import(ggplot2) import(lattice) import(methods) import(nlme) import(plyr) import(reshape2) importFrom(ModelMetrics,auc) importFrom(grDevices,extendrange) importFrom(plyr,ddply) importFrom(recipes,all_outcomes) importFrom(recipes,all_predictors) importFrom(recipes,bake) importFrom(recipes,has_role) importFrom(recipes,juice) importFrom(recipes,prep) importFrom(stats,.checkMFClasses) importFrom(stats,.getXlevels) importFrom(stats,aggregate) importFrom(stats,anova) importFrom(stats,approx) importFrom(stats,as.formula) importFrom(stats,binom.test) importFrom(stats,binomial) importFrom(stats,complete.cases) importFrom(stats,contrasts) importFrom(stats,cor) importFrom(stats,cov) importFrom(stats,delete.response) importFrom(stats,dist) importFrom(stats,fitted) importFrom(stats,fitted.values) importFrom(stats,glm) importFrom(stats,hclust) importFrom(stats,lm) importFrom(stats,loess) importFrom(stats,mahalanobis) importFrom(stats,mcnemar.test) importFrom(stats,median) importFrom(stats,model.extract) importFrom(stats,model.frame) importFrom(stats,model.matrix) importFrom(stats,model.response) importFrom(stats,model.weights) importFrom(stats,na.fail) importFrom(stats,na.omit) importFrom(stats,na.pass) importFrom(stats,optim) importFrom(stats,p.adjust) importFrom(stats,prcomp) importFrom(stats,predict) importFrom(stats,pt) importFrom(stats,qnorm) importFrom(stats,quantile) importFrom(stats,rbinom) importFrom(stats,reshape) importFrom(stats,resid) importFrom(stats,residuals) importFrom(stats,rnorm) importFrom(stats,runif) importFrom(stats,sd) importFrom(stats,t.test) importFrom(stats,terms) importFrom(stats,toeplitz) importFrom(stats,update) importFrom(stats,var) importFrom(stats4,coef) importFrom(utils,capture.output) importFrom(utils,combn) importFrom(utils,flush.console) importFrom(utils,getFromNamespace) importFrom(utils,head) importFrom(utils,install.packages) importFrom(utils,installed.packages) importFrom(utils,menu) importFrom(utils,modifyList) importFrom(utils,object.size) importFrom(utils,stack) importFrom(withr,with_seed) useDynLib(caret) caret/data/0000755000176200001440000000000013153613153012262 5ustar liggesuserscaret/data/segmentationData.RData0000644000176200001440000264163513153613153016507 0ustar liggesusersXв5D X QAE (UPd(; HP) ƂFQPjנ l{I|b{gϬsB="u#u544454[dcKMW n`D` ƌHa:z9zV0{Xo|wvvv>O|+^;O5zz;}KܤZuA/UL/M_/^/0L&sK&PG/9 `o^j-[}a}-ľs΃u0ikzc9sY~ܹo_=q8 8Sp'=S?O.0v|O`mo &/pV6k_'{ ?Tq77? ;?| , w_ Go{'kq.PDX>s^ߡoG\UFpnIۂqUw]#EXz}#rƽqMFpg{mw|Kkc{; `vp'p c_b-޼g /Rq0( 9& މg8[`80)Opgps&8+/r+nCL6o &{oG#85;`DV YN18ϱZ~g> qN{28ط;8<· NX0iGp./<Y2ÛVCܱÞ>^.@[/| |'p`R-&4|_1fc ^w@36p!WS<˅m+"KZ&x&e\\y5%>'rY grC}{]qg Pq q8r=g LaC܃8gl 0i'`"&5(p8/Y^wM .3Cβ=;bm_v>| 94J7O~^~48gr=\\}뀫\%W"V@;pkk[}pAq|M A/sGM4 v/ |z!44惫߃S 2׬ANgg(xV3B=UGpT}CS$8 ?/p63 2 SdgBz\S]L*C&ȡ% ?s < "d ^X{8wX'Dުg8&E 5dh@Ijƞ |[.b=CcV &E~Țj.r^h| sQD |" 5N8f>,k>U2#F?aR@YSMENɡK  ;CYc.{.]5B䉸 U/#?0)Ꜭf"ȽF W <CXe);>\u QP?0iK`}?kXE ěբkAI)0dgE%M ܝۉyPc_>ęUq[B^L"`%aRVYSFˡ;-ps8R* {CwY89Þ|hS.v^W~ 0)ꨬ&#oFM>ZJP%{kIq{C^Ӏ?0)j#_ЖF/\+~?:B W !Qп*|aRGYSEʡ'-um5bI+lCsrF\U/U~ʚj+T-i%~ CbH+Eb 6>t 8>Lz#>+ lUv(ѿ2S, Й\"ŝ }6(k-aRX:Fo\ :`)B GK }!rPll B`aRY27313bVqޓmb.Hb.f4 l{`ä2讼 L`/f} l  @Xd/6t%kuz8L`;&EAo l̵\# 6zH4 A ؁x-Q21chd_: j'B_" j8G1TBkћk`fF!l1!%З h# gAI#QM, s;@G9 ^ɠgk}6\-/V:$A>WZ5B P{ Nɠ6zj&fZFH`?e@XA{%#X#D>lS!D`;&EAr`3sX-fQы2A, r А\"]9 8IlImW '31gbE}B ث !Lab`O60)j *v[`/fb #6z: k !L بIU{q`O3aR4U^ vFĬTYE lp  /A.s !Lllk^Ql5@==_2ѫb&ÂK vby&6`#l`äT ^[Cli  .Aڑ5BĶ;y8Ƭp&ˠF^֢%B^\F.~/D\{p\0)4_ =\c h z.A7߁*C90L Lw4zMp35O٥T-f-L1H1Ȗ`jvuDgDv/Fl8"=ug@+No&IaR4\w3<0bf%n<6"k+oy; ظaF !|R@l Dgo6"k+q/`6\qسy0Lz#f ؘE0RK23, b Њ\"lX} BeL`w3`cƨC/ lV h -A챷:5Bĵ96L }A3?ρh[11,l1-E+kg&ˠ_\p1Wԡ} BB'r;P'ϕȟ*b51/01Iu4ӣ˯B0hxG*Q>a^gb.<] RC]^JdvTogD<$ &D~.!΂|W?a&EAqG΀Y( wDǀֱPC$6fy%nGz h4\Eͮ)p_}P]w:Â^Jl:& !rJ4kIW7ZsaEͮn}\hzRt Jh$nʀV\&w'2d&z5Yn40?1+, @#qv?&rZqxfOȠ `f01ԡa-EĀ9;`"Mg `.fӜ A16 01ԡW?-EĀ7 @9 k;2ha5^ü,PSgtYf5/b[!oM9Z8AQ́ޗ޿P`A%6 r^}U4i)4YFn4j%}~]J/l [l䤢i6GBeеV=}z[a@XX b}8\p@VZQT7W&d!`R`p ďqԀ[ JoEa{_| +0 3b`xf#I Β4wB*h/V3q' p=h" bA%Qv>pA) E A;=}zzg$`b Yp > /Ez13ыס?M~L 2 :-Aa;a?IH׍s9v_EO@β{!؋Q<^hrD/]V4{s0,.^x("?0O3'סwM>  &A,crI}2=pRtC>I#؃| {bf`&z:؃]Gy!vĶ1 ̶̦,ho.zĦZc-fUfߟfa-j5 !bmEEM* UAkx;-L#$LX!W*[rWAc"r-By+2|s RqؔkE2wgaYF,;bWq(mpvr{aDk.ΰsEzJ[U5Z5IuqErKl@u'4>Oo͝9e߫z~]wPuwU>S/_lr4|\Mް+{gUyoAOՍ3U37AU|7AnKU^m::S|N+9e}ԉUQGksSu&UU,ԉ| 9ǿWlMY<#eXPw$.S(S[_wW79AUGY,)_Uŵq?񛪻)U2~ehο꼽qɹroToźWWCRU/uo-Uź*hSY(geUSF[WvucU+V 䉪{ceR?u}7y^bIY*_+Ge\KչUKĿW;{rM8P'Ţ:?U剺qMԉUR?UwU+꼙7?v` }<>M߶OZQcVrza$&OO_Ue*墨:Q㪲y exCslNsߩ˭ꜵ9߫swu)߾Ui:Ti:q0[eQu}[uUi:wU_ _Ou|{THsg7Wq(Un߾Ĺ:TUŵM ˻oh7/o_˟8%v,W9N7wsU1ncÿƿؿܫ:h5ާxQ9:9l*ߨ{Tcez oFY7W={(e97P?՗:Qu}ӜU/OK.6w^{'uLTze˛)RNU7}UN\Qē2|n 2]TŃ]UğbOsͽ3n咲{oUJ*_+ƒ:WeoԜ`6̪ܛk'| Oaih/Vn=ZoWaEGߦQ϶7' [GBIjLݚGߌkJlm(OǗݧR?.Ho;D畊u"_cø֟(bnp 6k/[Q y[5s9tě}{3Ekd<6sgkQ~<_3>لQ[ƆPezsخ?75QnjQB>X=&l݇Y`C7S$OLC9G].\ϡ({{mzQr?_rvú7Pmq7]x^~tz@/viIwr+Kf^ ;[gk(USɹsb{q]zj @^;j|-RBJELuJ~}RիL LъZeB|·Xr4p=o 'pLȌ+Sci1 VSe-w:wg` %x8ۡµXޤĸ%E~yQVDv5[?R-;mp" ϙm,p'~yފR{xJ\$]4E.wUx[t'fOfl^Lw^淩q?/[n{ob3W^߷1LnNY΀"]xR=bލ""gjRm)pg>7muN٧¸ߙm>qɱQ*cL8Yt8&X1h 3J4g7zNбȆ۫7Ϧ`m{PLKS왗@!=l-qJtujM$Uw/d4Oעpc(3z- j &]\OQ1W0"ܿ.=,B[GQ-^;ɣ}cN)|` (<ߋH.TTm׉ _SL(5$aMį):AKO%Ck~CS8̉ .M>\@|$i?_ԡ|=ux Ө1(! y*_p0qDyn0 ֖kr[qI{]_r]92.L/'KK+ۚ-7L3yH^]Mޖ"_]XLo>nEKUd!%f?[QaU3qoۊb.>j .:PNfB*wKoZSh{O69Μd3xܕu\>E8^փ\>fP⸵Uey4 :8ɎKwX<kx;iٺ'0mr@Dګr$d9<|ǹ0oq34j(sK|Jzv;_("ם5N%vQ;`,4̟MZQžE#qT%?>{ݦ]WOO8=>OQSH'Ɉq'Qlbvg'z_S4$x!u޼nj>%}}&\МE) ;m RS%0R؝a9+P+اAnqJ1 w&ބrSz_|KG (f'ܒ\FFiSN(][ [Qb&M݊&GkMJvBq3)ͳJFڤxbN49o!6w\VN۳JQ^[M qGtMȚ^uA?zc_.CWv7zhhg/AI~5H1„mKi"ν4(u7ᰛw׮3)v'm{YǡRg- Z7XN)-zp*H0Y{$X ꋾϠa_TDzjp ce9#Cah(% &@o6n{Hr~vX80,Ŵy󃒜Wt ?ie}ifYdeifu&|*EXut&wmᗧˏ+{&VRBovLyu%.zsaƖ͡+{p(j̲XS@ӢB]zmp`Jȿ9x%z)?$!/#;cnRRN{8d2qtb^}F{Pąa=)lޏnEJtuIQ hQYGݫzaAE3k(~i)QXѤ%dyI4ߟM躈?ݪ+hHvaĭ?FOiC:nx_Q9Q,'~8td@dY'SA `l> h|`ŗ.!ε.{wHƑ _b d(b)LC)zh]B}ͦ;E-&O˵*,M)9}64${׭Q67nU#ת;n]~.s!^'M"%1}3qw(,VVEOpBH5?6@1m'c~]GwqMG˞B>[?W=/+S[|o9^n)E:~ȲQH!G3 :m:Päcsև!ÈKRLmHWF~qtIMkic^P3I0gs.gc(_Ygg緓^φ(巃ZfRTiDH5u|\ ʣC{7ka E27!'4>o%O7bDŽxv$_Q|Y6t'V3w!?\v00E9:okMɡIPیM{)LY+rqzCgJAi63 ㋃;ؒZ5KIPkCBiXy?)|ق2p"]()HTk +쵣_-֣ZL9W7M{Rm!']a~zhm_;TL_R%ܫj= %ߕc/{v L _.si8: mxp2r, xrqX;F /;vqGo8^lv0h_LPҶ7z#og2E };]LNϣ;Xׁ{~jʶЬ@ݼDQ!E~h~)^FQ|eIì4&ّ8:I1k?4PȔ_oYf_'旑gjCQ"Ws__.ٽ;ONʷwO3cY5e+QϠDsw~9-*Ӗ"// Yz9KuvMJnӞ9C>M!=zSLVg9)W{ۻ4zy{kc>-߸`D W?nĥ29a;n(cW h.E~|*$3wJQҖu}*}܉SԂ/([yVGȷgI7ަOQs./]@)g;TKn~ E-lZ,3jt@z 9AvC;%N;~q{t;hGaӹ%)qۯg%ĹAv)WCr/Yt]4@(E'c3V`kh`|C7Swicq׶Sud} ֌XhD[;wf<Ȅ^ȫ̽3)ѪA1`3!:{\WNnGbur~6y ?s:Z.?F)]>h>PlٓE\l>K:41.}sW[RX[ '[`;wvJ >[~sSr9vttӽl cx% ^0HE/tզ0ٳhT ?z lMv;x^S}K)ÛURĀ,Ko..[쮔'R(˯4(M'^ d9S"_~UQ<޶8$Ƭo-L 07D.ӂ6ƪC{u!̆dFN}lx?ܝvH ?o{^ O6"vO?*QbM^(TxS`tSIIVFwwwtƜؚ=Bf[ .XanIhOaxl/Ft^gS 4Uyna;xR:Gy)۹.׸^ AECѴpb%/ѣ=ޑ-_ BIW:0ݒ(UQ׈ʙC̿.H!cn)ax\dVCC/j~0D/@ي%K(bʃ ɡ憂mŽ͖N%3l5k wq㈺w1*דܵ >+&$JRl9lW2?OY iwLc ]ɳ{G!D_4&> nЯa"yHbql4bJcKIY(q 50TGwE8u H_-Tpj<L1| Rx =Lmb=>p)AW'l:Үq^{-kVc 2_p@x8Gה`ė?s볩Yoo"EWE峉gsW!fa(!k7uo_Gn/:yD1RGώ%Vtdd6)Bɼ1 f3ud7^n&޻R֡?~;129F",<^d*`vW=[)2YfJbg %\=_."Úv^VȆ8W_g@Fwԣ.kQѱc\;}ˉs)y(h]Ҟ<*V.ohǵu{P!.߬ox㿕"jەdZu.RX:>(96ϲ$52ϐO<.{vQJƞM)̦[ wykCN0o +bJy@76< ?}hN; Ӽp֟2UQF]8UWHy^uXwOPIJZ)%>Y>.՞Bz\I+V,zxΎ0SXᣴs7a"%}7zY!_B xSw&Y)1a竴dI5Z}ag[ib͙y@06GUᇢ)FF+`ׅU9{2XJW'kE(lșa7g%'Ku8{Ŷ2]+Ӄ8v".eTuOhdӁ"GOB3=Ơ^d=.ؐE-mWݩcﻭyEܓ7}7դ:>qKwR\+#-Y直\t=qW ޑ;K|Np3z|Ji=^B)e/c1wx{gwi_4BZm+,9=/Ibi?g[yoxa^vҫl[?e''~!N{8Nt'A2 0x>x|j`>jpr;M.%Ľ$nC)lŭ=_RK@-vBS# S?ʠN4"3r )قE,e.oI-\d EJswwD'vχaGG#Zgjz6qk Q3xuq]O&$R쁳 )i^4h-SˬgQ!4z4-KG ؍wd4"jϠ)f5*Q7d::N.\W{?8k{ IJ{ѕ3x/gR|{RRg[^̸Tnyt hE%f \J ? <̵Y#+:Q/eE ҿ8/o?LqN>[RPk?=]^sf)&ZG-K=#mmC0W$<9Z%^(uĒT)$?zgs1Ƕ8~k;yO =T"x{4t~_)ñKS~lc/DnJ>gtZSS;0+(ozhXK_\^Xś}c؃c(٬ܽWYNrk5% dϵ[ftЪ0ğ>:cڡ\o|rvŴ.3fu¹fEvBýBqOWCvRd~b^A7;׫KOٟm3u,? 4kl?"iMyESΞz+ =;E=7Sr1#H%nEׂ$K8Oٻ>e'|>魛XL=(+~ ^P_NsWPTxPT5=߻ˌ}x8:+|34\Wub0b2K_+v>zA^CӠ<ĺYY5O0cu ol4_ңt!bVdrPuQA^gX])A2~$/RtMsJ:.{_uʶ3qՇkTb&Wn1\g?Ze|޵/ǘw6!ϲNN>- _&Zzn|ݶ^q}hEۜ[,2x+ؠG\ˆik76ErwDSNBGfO̝쟦(3'>}sNQò5kʐq)֛s)WzU ڞ9s݌V/D?%hmO(_^J-.>5%w'::(jZdjD Xض6~Nk[5QDmhű# )vwf"^Fwo7.9kF[ZmI}G\An3>lBmm4ZbtGKek [Vg-I~9(@_Ĝw>Nˎgud V?zIaubz:ц fޑCIa>:fqWlgy~ {ts3~| Lw[KH`mg(}+6-Q2.""m`@X1k?7i)*>w3Ir#gb{^F![fxy533͸uhSW)2gM`>4sF 96VkQqyϻMibKץ}gqbGyCIn3|GY)1c~gyi5ݷ_&v^ 2SmQkqP*0CyC{)kOպQcjTlO']F림!']E蟯4ܙMfCb1u,y|v~%׎;lMe0 ~?N^RKwv\SZ̓GQ[im \rbqSRQ. 9%9I\*'xxd˜k8FΠlE,(Yvy9%=.dtOyBr?g9gar=Y( qkkحuӻ|M:gkC]*w7PDE]!]q}{ՠ݃)f׃IQM.՞}5 :JygʇP6%H O::>I2az+>yțQ9nA-kˏVȨBs#:Dg NjS(e؇|n_L^w?vzf /yߔ`{jpyN8v'ZmoG keQ>":7ыgzJO>Múy~k̯% ]iĶJ|g/)$&26CD|S3$0MJVGSؒ3CPK"J׸q$pR_2(q%ǻtإA_ݘHdB}d2 ؈+ܼ+Ɣ@̦ŊMuI;?GiD<.VT+O»z߁WrRQ'MgD_2cxjk~U8 SH{?wW쎈ꓶ?dӉ#dygC }13[ޑz"?gl5翑ڰ2f9pBt[[}Ҫ7+bwv˷#|x[V B=P|fwo{UwfărRDVmZ6&FZJ<ښx m nװ8Lw\w Bv(J":bZV:|ƚt ⷮQ<Ո\wdo<^c2_ӵĬiLޅC>e80n![6!|̡s`;s 7WC&.ډHAjͻ)p-EboU0G£Exn[C,ݽ? AA{_;0 Ew$|_e0zu<Kp^wqڴUp3t{(.G$0B.UQ;GV5* og !+Mہ5N]b"\/ᶻ讹y F߸rǾOXnf<n!7BH_{M4H 'Iiڎє3SosP1qMsZv\RDMS%En9N,џ%l Zzb76NF6/Sk٩/=qPun/eT~W=ʦʱXRg<, ;mTn]xիMzTU0}LRW||79W<qh _㏊ a['DDP"wKQf' g lApH=6Y yZ+2b.VZ}RY{Bk/hgYS@h_, )ݟ֞wWΌ:c@A) D5O ޗ&΅ǦڠDO;_X{`vs1k8cMz,TPX5V Sߙ ExL1c>r~.S[AhUtUF}ӮQ%fҚZqץp1+MI[z MyQ oZV">z>]x`_?RE^牴EI dg1ߢ2 >B&%Atf)4q蝛`fSY FAc='85W~{m~i`!,<ܖYj}zO4# ^Y.{/MIgן#5FCe:5dg^ QJ\~:ksuO{b7lCKUwI}3ϔ)$M͍ 5s7Qh( ׇk>7 ҽzC5gDL9r^o*/E^։ׯo&]kAՕG䩥'{1DzN]FظYv(Ե uCiseZx-;(}ng[M[& vDy5C>lҹpzrh;x |5JYf3zDǼh?Pyf6MEXoo7j$\nA?ȅql.E(x@*ca.D+7[$8kf;غVx\MQꖪ'ށ oVns甖: \|%_T!8}Zt,[_Ҷf:R-S1Rq>n\=-w7$ሼqj;C(griB躯7'L8ޕ x%5*h9[ /BVpXDTo#@kD+ %_W٭}{ V_td#<%_ͰhGW`0龙*|sBNz $G"{E;֫.9> sn/~sǷzvlW蚫z9 `{41[ɲ9?Z: |*:Ǝ@v*Ti:>9/=[C[IoYh^c~^E"7ptBmulvS QCjTA3N^ KL__7kÿM*g<>x#pUthWd־b&<'LR2۰rDح%j̠ux'xB n ea0۴kzR}՛7kٽWwĝ\z0vo3 \AIFFؽR{V"؄3V+?7no:/Q&NqpX%J.8r،{Aƭc?9$܃aep󙚨wQ ~/E}K찑f쯳օG-N5x3D榎/!lj2҈T/nk1vZa55 K/jz&#L M6)kj5Ǫ$8v,6& xG?ːM>!"~딫p@ЬFG"Rve~ ~OO؍_ob>㒟j:/!e;g?gpx/с0x~4g0s%|kT7ݷWvED[\?~߷F$#NY=B&X} j ]-/AE7V{* /q cbtFU(< ~gPÂ8p\sx<(=h@;kSvK? '6 XiGIC!-}hD9Y@Z H32O\H;F+.dGTȾ\_U;Fق췑ֆ에6Lr$M@xTɱ_oAZ0ic#diYdw'm~;i dOU%;'u9sgIk&Ǩ}IΟGm!&t~$$iMyrRF$9Kx[H;HǓm/'b nJQ_>'m,<!چa>_%sv&D֏mvnw ؙNx5XP)8$m(iHڃOG:^>}xw ivmnr WpL5%{d<:My>.0iݬ ůI&}/>=`Χ"H'X=&f&dq: k7 oPy:5yLab1#ѐ|bi{P;0q\ځHZ71gdAHE3l z88{8֯b8𰟽 샬՝`V4 Y MIe+b}ſL=#,^|X_0PbU帏^@9˜3r CؓUvh SX1#;&f'd^w`m{-|nJXGp7 ?)O7yp`S0{ο>vxXuxr|&8S}Ś;^)7,^п§qaRQ!wsq@8KvU)SxgWu+(WfqpW7h/ X{ςpGfx  sXdq4-.s>g=g,a;%^~9ۇ'w-_,"( %kO .h#4N|q$ s5Į4}d)`1/|┉F.X"X[,|1ZB@.xaڕ[gӋP"א%X?(a΃?4%g[Y1"vg]KqS=#TW5.&g1J3ɀW\-䱹u {I0x=e#3 x&M9{=B6'b\7o>)V,uq8}`1@ WdLk%?tT8qqq+5Xne6uOsA .\).'V=W7VzA OD8SK\̑q}P͛qwy6V&'2 ʟToıatL9 '}ҺX o4c4RMvê& h-HbJjܽX1yډrQL?n3b|Icc]v )~iXʞ_̞g mlۧ1߱ڇֳX{onxp>,agFI_3(Q ~$g~qCkIZː"!{m49|SU`oubɏ9SLRxopv"O4,cMpCkyz #vqMnXR@y֜>)א `9_sX>b[X1Lmuq,0\wg9nGXj``pj9r!_3Ks2s-r-Ĉbr;9m,X^`N$K&^e/ᵜ|[P%\ R>sR0;5sic1-ڃ7}Ia<[@ ̳p>%N9P#딃_`q+s*8<-iv R s,b4?c9]?;&Yat]-7;=$2\q1?c<;V=Ɏ ءk. b}qq/?Y>e=4Q}a㋙5K4Yq %jhcbD0$/Q@66tlcH:)6gqv#!`7zFs~_ 1u]оĀ`4)Lfqͬ[`ci` }U.19kS&iie}p4:b& 8 o~&#,?a㒉[opٌ;3Q5l|0&pAOk:Ϟc▮cg㔧Z/';Y1q&dIck:KͧcbP` R?^G~,Pm@w |9]=.^q&F\z 5[l̚3]Du5"X>IT~e` 7&4y/Ζԗ=8^1Cyl]M{1w&θU9p|I.ٓ5 ]6:uU[Bk7?>kqh+J`_.FḴ;wN"Xح}}b6w2‡ס;˚lA0,|1 y;bj\0o8tzt(//y1G l!tТ]5ǟI7O_k]:/5n êc%7A4eˋ/3]#bmEK6V?£fve;[K W3=GĆGx_0tG|4IZׇ(gVCCo}?-pdgZD+S>-m~=mI{VjRb#tl{9;" *lCX~xkh>Х#%;Îݺsz`IǗ dQG- <-ꋲ1,z,U`4|e>L]pԓ-v֫D.DvT:xU} ՃwC[F!D%zR0;1}*? yuIg>huf<(Jx}XƧIHy Q1B* 5+G y7{n*Bˏc'A& MCzɘ%%'p98Ǿy)G[<.aif$O}c2~7c͆췅؉>~bLcs' 3-]m{ްDI8ȒM ~]W4կHς >ڶUm[TŪGz`>=2OX}qƣV Dc5uC2.o| ,\E"2@n n4߶/Ig΄]P ILz /u_~#Pš'peƌ{8\|[]9'!_q,b_bsl-g]t^vu~vf:f58wݥ7VY^yN=τ}sazaN[ށ?z^ZG"iRJX§UͷnHrS 9~p5Eoc+V=-nBD[{gn@`y m3 y cn_s.s: +~T߹r5uyM($3FկӉ}CRjfؓ 8': y';1Tӟ)3> %~ݾSӼɟl9a)A_ZԲ;sS>ÿzU77T}I>SW`XU%[/l)\G!fěKK.1RGweTu za <L0Єd56*ܬ$c"n]|ꩻ8>1 ICs0ol 8x|Cbn[b\ϡQ%ogC] C/V<(OXk(&ӈz*2%AǠ9!&ME!waj=WGAȒhV#i@e%uM<O2w>B x&1W_PF'97̵ U_z |<+n$8= x Pׁ0يlK.1^Ic([92Z}RX2yU׏컬߆K{CpxN$ysl!V˞CSy(߸B.,Kۅ!J1U_W + } 4~; Upx]c aqU9w7-,Z=q5a=0M6'6 k ᠧZ|aZ]i^o gwΓhQٙA_/areH?U,U/\&Q]\$2K-zo=:V! $EXB>rt;RFyetEʇ/W@I9F0ӑ٬FUsK[5\9 ^qە+_e>}+NC-d݃cohmy7$ $e/gө5*l\|_zXk?.72'4+= IWռG֟ua]7 ~re䬈Zb)BIX+L 8O8M|yYV=fK駣_ۜ4:5Ytj ~aӭҁlAkUral6T77:nMpCh`+,M'L؍u WYe@پOXr dg蝃i12 i)\4 7W%,Sস-3eU׹l~/:ongϺy5~ X_i a_BAju}Mst>~־OMzRg4^!5ٻv_\fvswn [[:k]rlQ /)Flpy$D leH1J%Z %.~I|Ům)W!/P8 NOlKm::X{z:o`~(F(;nՌs9hZ~޲zB芭0Aw~fEݘ1ZQw8Nm{`Qp\k? xDxDg݃+S&&M.z|̫o:Q5=A~;B0Ek^&Ow|8+Fudz,タ#pަ?X_:kgx8_l$jˏQ}~lTm0I#晏t+Q\V73ԪCºdd c|N-Em|~N;aȹjX'c/JKǖ6?S6[m?~Ne0^{O7D? NΦ![;-J%,[ z_7r{q{;\&1Wo$D"`ip.=>.y% Ҡg:0zʜʆUҰ1p_p-YHqʕxp\|4b5ЈsTlR%(}^MDY6h]U4OZ[b@"+"*{;^>.dJGT|'`9t4bv=@wW`}]nvK@:Dl9^ }w3`pqy|g'VhGGОo$zJ}wCXf8/3,gQ:¯x$Bɰ))}-Z2̣//OCl39rg?7빧O&¢:Ys3ONAH9)EB~-#PF_#:M._ɿC#qjPv- ˟-+F뼍֋a\8̦чK>.iq6?Y(W)lOBMnXǃ#b;ӡ[?& v/GYB(],^ #_ZoήUUq{mAЧfVЃn0gX_elgyINdKťVD=q $,wꄼ>qJ{ OεmU+Oe?Baӵu3ԦxXΠ购J?)MG{ pttFjbtM$R%=3HT ՇK"OU\ `?w#A7A'1mȿ.xu|DŽq6/~7o BQmG+=W8ovW~P ?7_6n 5Ô0}۵~I5S~ _/]=p%jid98s5';G!w7i|g6J7n!Z7`I7KۯOb»,ms!a^,zίG w"V"a95EY] nq] GJRŒ=c8F(BTM]k/ڙ ʒnC`E_̫̩zW >ꅃ ެ̀%ЯZyy$F$9}`]H.; 9'ssϼ^yI".ݞptQ|.n>O5t Ju}:lY8gETX|6dOPՇKݑxFN {Ovn7> rZfyi?KXZREbˍԢ-pWeǑs:S`r1,s"k&?0iu_^v?m[\26t펐o@$,$[bu)ņU۠A[Ics OK">#1}QHdx NX|6&<ViUL \{,qd*GOhl46r}/qe`p]Ѡw.| nM!S!5~?FXg6f\_1#a0MŒ۫v́ɾ aL:Ct?\g\#0)|ǃnꭴv207.^*9V EEbHy\5uV Wtq'`xygleH=^fX!ڐ ?Rtχ?-ζ!F(cpx֫r#ry8nɒ>9X- mHmȊaw?4ISr ϥ Fyg/߬9e9d[\y`8}dm=1+هsΧNɱv!:&iضКWWzeRAZbïxOՐH 0x# [cciӗk߱uI䍌WujS8ꀂ#x/p jb>|%,ӄeJeHpDvK6 ncJ+|Pþ|4<6-49pS%ΊVXKׅḪy~ $]zGc/ja>oSP}K`e 9S^`bd=&^h{cEs[=h럄ܥO͞ ՅA{6 ТXh//%3 }<]Ms}zRqwR:lɄRM:KW/\%YuZ2n]pEY&斯R7!u r~} ޼@c߻F۳!|^}t"D+eΗ[>ܚ|#38jWҪَj+_!d}m' I D7Ş|̹2[\L4Pw|My6sVM 81 uml,mɅ8z&Ly}VY3A]&삝lmܙny|qWt>h7X\ޗoH/ݯ,C$-1hsiLxSgupz'w`,9s헪U%CP0l,.C*Dw_:4 ۿgDpa=<&]zqݱ Fm wTvSƻ&qj?p޺{nݬ`jNA\5v{Swr?-vh"[=Pi]eϻp΋^Bn>1k,g<,v`8eW8! ,>mpo>{l-y!i3WJsQ?/=jh!Cɦ ;1I#lZqW>~s\<Aw`;2xY$Fu!E-h=qlo%c%Lad>Z })v=.^W$ 8*Dzןxx.]' Tn Yu3${L]O7^#ABڜq/ԼaZKʙH5.* Zjy>uW%ò]|VI׭, zQ#wbrNL^<38EJX*yuSЃ"jco}OvmtTi- @&vC= Yo!E13\9gd3̇yy݅Mc\7 [5C $&dEߎC="UBwj []PJ?%k`Ҽ}N֝7<>retAލwN=}5·/jT7^G*'w = &S6x'|)ѓg,LWkT@0ɻRƜIwAU$|s`M#Tls%$}뺙 v.(˪Cȍ=޽0,|nގmwom"B+g.f8*u@dJ 2{H| 4?[!,< +Iۢ`STXʹv |stY/hyNqso ~ $Զp?ğiIC{~W"ސ+ ޿)^* MQ\4$OT@ظ[#tHnOD󻜅@;G̈ KGf" թ7CjҶecJYu3yB}BW'|bEWN@v~w@w i~9f7@[d%sy#a3ozs2_kӂԅDߊ ;fM,B-gE~R¡O Rj:\Rv K~?g .YY0,w[ -^>"U~.OЈ*s%>#xو7`,pֿb8/zy-amqWJ1缅wg9 MWi%1|t:6Br,NoIޟ%~7)fԿms ~P$u :c*}od'H|\\94&҅ϰt2In)}3:=bg|?&KCnJ½Ok̵0!&G[6{X`3`T1{w-U) }Jt.dlqn,]P @XdO`VEEVW1uϠPf [ܭ,+U/).C/;#Kro({NnE.XTxiKm%Y ER`f#ߤeBaE_#|1?HBb'MCN#4{,̲:Ⱦy7ZS]KKO QmQB^z} `W}b.67 Ԅkϰ_^[z/-ZMC߂k {tȓ'!Z i~DΔ#na-_"a/;a_7BuU%ŭrp_x `I AqA,9c# [ 1Rk8躊.? ("HHJ#Itw%oН݂( *X[px95\scxo8xj9N[lΦ{" GN.$ܝ$k͢Ra/DQ '>Yw]eQL{"{}^qn~RLe'BW}]bIUV䝏j~dH2BZՄk<]Զ3 x{po/R~-(Ӝ;GJ9͂`D p{yVw[0 Jq=[rJϙvSX,Jc 5[>i]SH\HM;3Ve=-o ?{j>pbO>3ˌ_}O+Vh~Qz֫QkDw*Ȭw>g'v9 !{7\V8wu:}]E xk!oN?{(̿b;#f}`Y$BrGlUԀ `{}\(b}k!c{`bkvQ^ ^iZ4+ξUkZbQ攐n8s5"nL9h}\b3nE_m9fU)-{.f v!J6pDw!X ܆o\y'uiH@T!o2+ƫ^;FJ qU|rRff]z-˾"[o68Z E@YYQk4+S"0<8n?3N#hqE8(XuLA篰Pqi!n/cq_Օp 1Z7ԙoPpo+?{*8v|s7XuSH;~(jPhxœq m´Pv2;P_(S G26N,EqG> ۷vm]Ϩr {fsjग़Cp"/' R|+3^ɺĎkx<‘ bo?YOTo;@p<ɜKVDk ?V3i!"gɸZ,0?L8sh>Jt= 5e. SN`S7.EKb$iC7,t6x{. \j#a. 1>is~VXCe-3(A;̤Nlu13Wښۄ+wI:ֵFס}.:UBO qDSH9^L b:h>Qp as5; 5‘0HFΖ% ~ĘbסM; m}9I=ׄr"f+k>KV Npycb9 ?dӈEti?vBB Fz`oxi/^).~;w"ٰd}0^?=$r ڧWӃe_eX[T87U癴#^E]~Ƈ0nF7,`mpX Ku[aիzF~vlB'5|¥Ʈ-(<۳Sif7K V83Wj6k,nN=/4/ivn{Nz]ue׶ xgQW-W1GfD-u O]-ks>%.rϯ_Z/}eIbVΉ܂(K쾋V4fI@!#8E[݈r»ϱ[z$M̖NE l^߭~o05׭bkE <*, Y퇨:t}-'(SYK J}hunNH1D圛/P7a3 4\QuQH VjM9p&e(I6DnlGmT҇,:Lu .JcY|kћv8b/^Oz7A>"jˣX/UHGS9_mڠ֣ s}qqHi>ӳ}(Qi7;j?yQ+m?Eh;";̻ۭT$=?"QIXT{Ũ5-|{f2D,:#.2o?-z1C$oZ:r_67j.YXּrNg H́u^y~XL[Oɷ#z7߱!2Y\[ tsy%}ly!6$sbT]@:qwƝ7_&c؜8 AzG?@xHD M)9?Ufh?@$w""ثCUv!" ~5F:EU9(K Pt| wb_?>?7{⨨&iJW,!p?1jw Q3ïJڀw#Fnq5y~3f3?{,+FΗSTk14N|Krp_aN!qz{~wh|Z4 M֛C^x1 '*Abk"nͽ2W!Bd?6iԝqyJQx{iUd厽zY5;wQBd[rəw[<}Z3GS᭕߭v Rf +K-%M+9;qc, A~y&-G:{R"z5-au\9SκlewN"SאyDOѺ#~^~G5;I%u vrC<7B8=Z^vѶ:zvzz?PKbQ̐r4DY2CygY %0kp{=`Un~Os]M!,d챛Hr#eNZx'(2GK$%/t#d 3!Qs3,~}|D7A d&M3{0;! Rp2#1%;,&kBZj@醬'~Q5@|ZRp̜1lg"Zu'IF R˦S g+΂yS~2[@e]|_hC#յn;t?Tx'Di/dk_Vn+¡HTdu,xxaK{0:7$/zD.6vs9/ _e}2ٺW`%_+!r)}˄t=;Ptk=T-\]wĿ~ҏE ^Zv~8|j_׾0Ȣ@AZp+ 4޲pCL㌶rx~bi|?>9֕n& __Y|+">3 G^= pww [eFv- kk&y~!JÃCVe{:jb|RAvrMZ[QO%Ԡw3GæuB kMtN#tn"Лׂ{_n =ŢS"/-PbIhU8x{'|gB7Wk)3鼄f^EeLE"g]TqP +gN޿NDwG?(O|?pOHTI>es,8kC !p3r`nG QҫRaw4if=L/gW(ZKv RJFr侣ږQMDhރpHh9~D7ų ' أ_}g~ɘ-96AhڃD?6|L\=O>FT@g8[,,"귵'nG率p4YkIGqۚ°(NZG迟F徎#MumOB7(mi%Oc3nDhOT7? @2nҹaUF;U$O|?$ H$b_k>OGa$秢Ɏoy*Y٬> H9ʄ3?{tǙ{="4Eg t$ `-`Bo89 ըn;HT>5|)Hk&Ɣ+4JYp?s>ۮi'OObHjAxGNː)$+Tiw0EI>lK:dLo͑Mϟ3bH 0Pο7^Ѷh)8?)v"irѡHWxo'2R&z  &$ j=SFN_N-DJ`~`/r6h+Qf [q'0IJxHIh˩lxf)5ʐ8Ki=B]Oȕ_\ƒvȯ2<"_elB Q!OMy>)O#W @jbF'ӐB{ (*ZyN}=rdmc|eN/Ow= D}pz|_SY/–T#(~qN0g\'o-3 .XYO`xl:Xgm#ƙ ߊr>{I4KOUg~J{o.̳CDؑȬ g~e"w\?b-׋ud.|x5 <Oޕo݈>[Wl v J>k豵VH*=tý:7{Q(_scdΐwyB )aTwL(xrwzs!2G8 'D1K!Q FjVAƓ :%zxڟș"T?k'Me n^DOko?"+>_TqNoFZ,TO^O }?R ʆ6M[UѺpj_w軱PBt}5 _Eb%H*N,>B%_z(@iF|X[yϼ9$OܱCT_Gs ۛHY"g2U-h|OZqo&c4U{1 C3GQb/VEI{21eDC;v g󺕈qx%iH>Am}E7@ʅ'xx_OS A#4Pw_ _9Lw2ןK Bs P̀ڱ)[zT ߓ2u-<y25o '^EwBDHDZZF]$9hTpcت[zs}G\q*z@R{o!i{#}ju sS3!D*xN)dރ)Q+൩-`6w<7b_Q}z}%ۓ Bϥ2| $6zo:_xBr"G!7'VzHx?}`qȵ'؈ *nY\ {<>_>EIpY5Eo$މ:gZ м4U:+|u^] ڽ ɶZ@b?q#dBĵ.{"%eO~nE/{ Y,ݦ G7Bb(9#4a|/J5)C?!(I:5JdXbo}苴VSo{Fbw!im=:p?V|Hۺu3,X*W~&Ӊ`sf o9EwOÔƣUBn!vael&?<4@wT4;kRE,Y n!<يTe=b98yw4}V,!Ø21Cy?協\GƋ{{iNx2GC3o*vT[Et1StʙHF&'OpvUrjkEI"em?\r'̪˕g4+F SL.!\S*ψ=gZ/X?eة8^vg635AYkTtFaD?ְ*7ϮB„ oD(׀KePt) R=AC`ӱzˑJ#,o rW̫'MNFN^2:3C 1dM~>^2ZǼ+|wbnѹh9H Y`; uTBש-9mIKyI^![8wD>B>e>oH~ܑM˶"SYkJj ^ݥ <ޱ$ i_fz֥O6[8[~"Sx"rټI HPrЙ=V`?51:4ߚ' d=}1}Ud-}CfH%8 s\@+egLyT˟\q%Bz"s&M+J`nV>\R%ݴ 6CCY#P i{"Uo#s=/H_x2/ tւ?“[қY6Q P?n ^~B$IѼhKmiD&$/8`u/S$49Ugh{-yq+9%qec9J.o0ּ\=:OC|ڷ$_'tS_*V] 9- %!ZW%Jb缿iX9yw7T!ޒ>S܌ رw]-JѰ.s7CƊjAk߶ 7mPi,yP7Ƿx0@E,%bABiHL@L9{w]uv,NK/q_H ?Ϧ}C{EG±^^sX*jH..#SQ$Y/'mOpsR= RN7W+;=gB#|T꽻{?DᆬĀ?vb!x_YNS䝞A`KhmܰYC\8`>KJFt/UQ]~7nei~y2cVJ>_M >">v;XM/idd$X>ËV }⬯rF]27뾟_iCz?vNJjg,} Rެ{ȕp]FqPS a\xY!Wlu׎"ZeE72vXƯvMCY/ 9Q}/˂ΨhQ$Or8i|H%ڊ)wS ΢ݫ[#ʪ/e_2@lxzc͐೷kH7=h逥u_݈zN'Hp  !x.! U=BeXyܬR׋I'&S척lE ]nMbxac]μ61BI+! ljgX}A2~\@z~-z(14~T {LAW"AV\1ܻN|2CewR X|/y՟gCݏGɖJZ gB3Leggأ\_.Hs>FeӁ7iE:/8Eߵ(' ӚXG>1yҏ5T8 O]vMF T4ܓhdi-~ =Sq/b\Zwl~TlB 8*RB@ͲJ|oyW2^/`\G/%BgIFlGs iG.`\QtpȤ([?䜧uT7#1G5apH*^y싻xN= A,o#vycȓDEZ3 Y3su7~ZmJ?GlA:hZIZ *1dE![f9G[gԧ3'5صD@pZG6I8Ias+քyM]?+Nv z@IϿq:iBs910I"7iQsq G'!.'l{e74|R g6!$ &@QTG޼2~9j>m:9Ux2n Q)j&9[s Dz_|8+]ΒЄ?<6#[w~M d"*>IBbz#2_t<ٻq1ߤ"n|̞Tm:HzA۳ډI3 ~+?/PcaeOTDt+@Enq\B]H0+p$bAAz $\{$~>@ B\FĢ'oˠMI1m9x"UlJODug)2u2 UtS1}"7r <φr(HY8[ƸfdX26oG[ÿ+3E:Y(9kbV(<_x':uC"=Kn$DdDۏc*y#22ͮEB#{RQD#-2>{' l/MR Bs\{w 糮ne3#+$ds ?o@ywkz3ş Yv`%:z!nk Ɣm` Y6 ]gcrH쑁e$I6J&ܽ{,\?m_tY+ĒqA&eH,!9V>繁(:U6C3"M~=?U`<&O}MH;{w#8oֵ.`s~Po(Di5X3_A2Ol1M"vGdL'<=~i̾`<. "`|!rAHOH!#_j`LHvnǠԆΙ ԿYW_j3{wQ&Fx/]& mg00-$\+H^MQ)NZO'Iמ/Lf'y|a㆓g`'rmw#rS/\eMF3gO(0sû*o} KgI#? 5ȒىSηFJ|\! 2~ľZN%zT}=uE"l{|ۯp ?-Wµ GOkNvI| e͆ZP έ^7w5?! 5,t<'fK;6|r)"gBq#.W߅X#"'Ɛi,^[OqW")uF~w%u)*E.vD\“9"}ܡ4H8~Bw\qc![C6_F2O܎[z±qfkмԍa8w!TތH;'|]+0l`CSIDjX?WӬl!!6Je].c(vsYKEGK1d4SWX13I2Gu†ǧ8Lҡ1r-lȆGf3^T=ly)BGc &84*mQ8{WX@W5l%OJQj 1~-i jl :WN۬HBr*-|'zWq<ؕtZt6ZI|d&J>Sc}^mU?]0Ug4L.s)N08Oh>-zǨpnH:3 =I3e.D/ $H't iB /e\>~+̉.ǎi>B( ʭ0CҰAגә!}H3Zo|jȪU1v Q>",:ZzKJLtjLxBwL;xӺ4oDR=__n\zRS hAᗈ]b_p )ژ#"jCQP| }S,kz@ᱧdp$P#ێBd;:xZŎ}&%JUy9u0iE'O/6LԻYǻӣi|lfxkK]ױ[QObJ}~LHqf&*h7#;. .@.}ܷFc"RWj|02F憬Ǒȿ>Nء8K_=͟u*n1x qw5D!*LwN7BJ<hjzsmx vCq*MH#JCHsQ.օt ^˵z"24sգSਪ^*oOEbykt sinF}M\@~iI#ou uod%~>̴;:7's"?:)LD뗒%蜺Z kVMWFERDDJJ60tMC 1tbc"`" bcb"g.zOqsz|N.-UDUﶠ_ yE{(Fm.N7nq' xfg٪oFʘ*j h- ܹmNj $>aY'oV gEf};G=?R4vY^Z3 .woPym⦍h5'@ t.'OoK;08.FW/^xq/xP'y~œս֡3g+@D&]7=[3 ^CR8zGm[Y3]}{S(_+B"_+T\^cqʾD!6!S0oGԚ \d֔ZEWb .oLwѱ&8>wAe0{d-/w=BUՊ,J s[&/'# ׹rZėz|<[MPEpbK)s\}%T#+ux8=~_J& <HG&ϨVp#f,On 0m%8>ʯꕃտ-os .?݄RcW)EyG7 ֺv<ǮʃY?o:GȜac[;_`U*]# #*K7 ɉkd-Wꪣ]ƨK= ̋DWuD<@'2Z'o̬ub;{]uMl0eY<xw:w+"Efv9W4LEx'BTXFu]=?} Eݝ)=Ȭcb8 [X`̺d*OPd<0m!ػȹ io;-%"$2y℈4-%)27*{eJyC['Y尪 )3޴c}ȮFֆOe{O$au M<5<&/>Q/",F5'$Vd -pPWK=+1x_ڸWO$TrNK%VGDvTv%?~3Z6 F9Se[Z6،i,N4̖QAo8:XMT'7 Y 8?Pmʡ ܵ$7:~Ğc;̯ xL#y܅F`Jh38~KZF28NJ_BP+6[GwJif֥WLEЬ/4.@Ew8aJ!ZM^3Wۆmk!iv+^_>g!V\"WƻJ5>x!$_ .m iiY;|ŒJs9|N]ՙ=+f+E?ַxxdĤU1qV=JսI .k>(q!x"kZ'__ GݾkV*L&~vg Ik/(ʘN"$!1wr G/!:4?&6q 8y *`ӹQ lBZs>|ޟbUHԳAFL ]NE$m %A^eؖoaLC&_75Cjk$Ԝv5ωbK= {,BkLsNNK7"ٟм`G|QT :1˦] _vK@Y8/>/wxӹ޾dx-ݪ nU{wH"=u}Idl# uA%L|߳_Pu#ӂ? M Cy;j)kb .̬OG-_5_6<,"D"܃N0und:'ȤƎdgT޵˿oұx-++A*ؽi|_7gCƲ}S OLn$C&T78|X/ =:GA>%JdLtNNԽx?ỏo[6#zKG4x"JTqu9p<^¿i"։-A%ʋm_+O!g$^6Q8Gbe A !540lSs\O0IYS =0_%?NZ S7z Li^ZSnyS2Lw6턺{E$%'VK-`qg"Ξ7e)<Ϳ&"lH`O蓓ALJP n"e`'/·>&?y TD)N/O>;}]=`Id;a^'4L! GDIk+2-iU. 򵧟Ս6,Lj8VYdYަ/ؒ: ]ޖZg; &7^JXa@W9rcI+y8#us G =;<y=-wP>@_E81cO՝uvP,H.pxE͙Zr05 |ER8@uDS 5:ߟNpkq7!ԋpSXڈSz؜ 6\y{B-\#>]ʭFzz^b;vIx~uqة3)"5+ͽ]HWN{.~W?i\Ѝ3qB/W8~;UO)Nsx0b[7VGF$mfr0 vҎڽi=n@9˂'MxH_Ͻ?~ΒE$ja^bk܉,õ}45gYET'!8ʔ[VC:A1 I/j}u֖ kœWB&z`-D9sH9x/6eG ry ,M{CtbWaxJ![͘~6DY bqIʄ^!y =h:ϒ9r/p⦝m[ytKZ[)SMKPb.\v技A_adҊ'jo=Zɛm-ןF\M:6LD(cmYUm?'C3U#),Gl)ˬ{+_|Hˏ{8^aSy:L<"mkV4Iw9/pv7˂* .Q؄)S=3,RD.1"$䘿 2F䠖Ct;c>[7D2dž{gKa}N+?HW'/7i@r=3e#xy;52)6At>KzK;O]U~lXtt^<;`oS^1Y.}'}oi_Uq[1ͧym@󏽶GBȔ-\)O~Ǝ"Ȝ!X5t{ ;4RfT &d$Z-/MWD"KY#0ݤ,sXE:߆y;5E'!&FpKpX|bǃ"04"=HoM]`Mxw4qp9?k;pFu#&9!?ORj˟=|7g1f,lۦ6rw ,q8Iyn$" ڪ+41qxz~K;/﹡y͖z5?|4{Q=fqL)%ȟе@1[Ao{MESu{v 6dfM<}'- >uA7uގջ}v:;M.RqOɴ BOSv:҆\d}% w.+#:3۳t\_F#Mx{`b߼v&>$\φd4,Vԇm0[ī݆_Uȇ#kTy7Fl',CmbWȅd vz-9<*SjXC\Chs0D>Q;I+f.L~I؍C7d$Ү%Y1aJ%֣ /κѝmavS$[ڭ4G_)w>* sqGeD={I+wq}҈"ɺMQ߈ٱsX'zv"}(hp%f? Kab,O>Y]Jt7Go%?v8t)~L<3 ]zZ:T2DuĞ$Թ~#A`H.$=#kOʄzGMonI`e1G8|vN+;Q+_=2/YF>N%Axؚ5e4]){I_ƛ])lVIʢ-;mlpw|1OhGK|V"']8$w/{H9-|fD /IQ  h~֥gRU07_* Fy(ࡤAaPHax~D9!CHO{}p74reR ]I!BA)Jznlh"p찷DKޏ< l0Hpo.о-wZV*џ۽?8H$t^G߁Qܿs;bR|βQ?Vohy$)+A&f^Q,s j@k3؊5`Lq{/7 H'oTkq>B-5ӄ($ct=؛9~NwI~$|h_A3YJ`4|^I8˔(BEߏoƷCSnL4a0]F0zE37r0/YVF -Z"UQU$ "*,@㵉v;NE=|IX,m]r +&NGkѸ#z 0*x(.B-/3fcHOL}QBo_i3>rGhk߿ .> OjE"^yt0셋_'\qq*_'y8t0?g! '6a`ԅ9F\m6U4Ϗ8C~!{_xU oыI43m7àZ#׉x/Tˆ"R{sHݮB8I_> "zAI^&qC^gHcǝEjˋz-ss!1vW󾹳~9*] řQfQt/|G_ F:zn+DZ+7۔"X˱P^΍:YP$ebiF ? Ѱ[iDOm7,-Bw()(*#DEyzqޒ{˴|5 pȜI􃦰Q_߳U|}И{]}|ބnѝ1DӁ)~9^ftalXl[zĴAw$d+3w6dsW>%!/g܆ QoA[`gV`1lFWڷ,I[S`ar:5~7rKbWV y])LgU!@ñ>hs`'=g.T,Zg7# \/y&Z 9~ Rzu56SkB0_'~J`ϥO3:tߐB >eƟT o 2z[A^Ѡ]UikNPc.xt>n>dH||D>!K}$H݂qIÑ!$Qd"~F0W|Ok{{8[K>K=S7ۡ+[ZGp!q9`Gc{=FK`HH vWR{&]c 3lAid؇kRXw.wr{Q0\eД; ٟ!st6V}uLuR8!]ߡNslCTUgd=ɔD]{K;u(L&δ4ޏi}/EY㙻kb?o%H.#P%B."V[+ /_cM>:x{_/P?{RFKiJTN:sc)1Xz ^Z{~hnh@sIp+?htA o%_OpKu/>f(uIvt frRĉK}*VPFj_\]+PWz%$.B~DҭCV `)7쎰~kR$}'}/:7A$,iMF9Ln.8<_ ]ڏ6.sr#jfyKfH>Ck T h#J!hxnﴟP eCxzW õ />#hDr9oqH4`#t3#]nGQ>=cj,O88sjmۯDZQ?b$H?2I\e' "A~:=؝'QN. ,+cھz&xYd˱*"1Ejf=6J) ̓4־Z0̇V9lF:w?f mn=3OwϜs* xq* X߻ uSM+.J iO|cAE;)fg*7֥ !dHp^W~+Yu¸dW3 K v3ũ=r vjii,tFuJl2L,|_.~H1ȷܬV -y xN#^rvN<-Ct"TCUP#tX^!9UH>h/sc^9}мÌo. tht_pc;SzJ81EVAm8WqTa /4t` vEbex&d [ߥT1FyHqlG}p5_r^>Wxz{Tǐ'cMept ꓾6(m3@4 6z_s4MOd>Jɥn e)99`!>ca5}A:sb_-ΌA_Q|$EF` ^m^[jP;N*2WX95 A-/djxtEN~˥}dXkzE" x1'TA"\K†) qWao@5R͜Asv_0!*ɝsj|sp u.)˟HK">﵀Bċ80H_d` U(@$#D[*h?qaENd~Vdo!̞:(߀J{LY5$Ii;~۷zQ'Og*~<*WDDzn軍)щK勑`Gc/αK5.7]`"2!/P!s CRJwLO.A6/63y5O_EDl6`PUOT=0Z'x}zd+6D0.ZnFhg-6jB)T4Vm۴+tI]r`8Yt,/t:n}C^!!)iS~tH| Zvz(H1Ĝ(Ou'C*͜Z̻Aȕƫ0Ƒ`V>lHg5c^}~W@D8L.dLy2BӘJ?c~Ύ=`g7Oi?0)?K/VF.Ĝ簌W`>3.y+6k"OS7D_LWdP;gKM&E3w)O~'wMGKj GߖM缇-uDlaEw,$LjYÛƃy*m!S$5zl,ȟȂjNٷI Zv.ujQK,. Wf#ѽu|%L[!&2.piA&5[-0M%hԛ| "q*AVu\O%cCj~t|xY.NXol/-@R'M$2&u|~78$~]3!f\d1Kb9~_Ы=S#i'h eh,X4nu@zUӑߘmZ[/] 6i_J /QI"mMѲP(X4nӌ_OrO%0EPj/!CzZiD uRM(' \}u jIIlJu6=d~.)`_5پujIb3޽D\zYA#F houfЭ[GUI8d=]wJ|:z ':i B"Xqi^է=_N૽65<&h)^ꤟk_o Q~RA@ƥMn)#T%= sH!K.\9I9 uOG|p5!U6q4k홎#)&|h!kCKXDN#ν{dg)C&}xqDg2)a6:m \FsgI'a˶븇əu,ڌ%]o'r2@_7OȾ x )veK+La=Z26[;yw/J!Z}-@P\}bF9 b]> o*9E(qV~7 sm%l(ܿ7Skl,%[6=:9asy _`Iۺ]kLMnz[<ti2E^[tus |Y>L=D}#VTxe>b zL̎|sa8d/ynܑSis8th?c?5x~BDuR>H.1|#|$Yo5X:k4 *tTrݺsglWRuJ+5oѼuΒguyfm Fsٙmo΍ VQuda럥{~qXUwMO}}_Һ5Y$Dpn\F3|L `)GNu_9nB'!Qec,H~ {<D~dZ |t_[U6U74u}8׷zeH%?P+{H(ʄg݂ut1 H՞AOcn@5gPݍfH-(\:WCSf5Q!xiGf?N1o:NyzjxeC{2|'ܠp}2da,ۘM3PIp :*'y#uܐo6:Lrg ~z yuخ8怢{ HS~:RhkGc(N>oyޣ};>͇t\=_Lqpؕ`TX)ۈ_g*\uf"_m I3(?nE` ɅVQgEK'LAp櫶*6>[/#{x"m#ٕW@'Y"J2n@gb?aE(M?WAG{ф ܒEbo#lLkkyѡf |>1m1W9BU!@gyyɼa;֏0X߮<\i:3e7+ӬyPKgg$AIιJ{ G zsz3!,'{XyrFֵۚj7c)73.d{oa+p}n!ZZSGy?\;Ƌ_mXJ+Y/Bʏ+(SS,ޑO{#E??f9U M Fdz\J[?XsM߰|/7U9N^a ̲0?1h`Ydh;|  :O NJcT+%B*ÐiD>;ȩnۂXgֻh, ?Iϳ:]ˏs᷌l eH3TQl&t |/[GLftg;`n[i>=nt^ ),H1N p!eT;~L% gEurH^#f>5FF}EM."M9PUBXAUQW\`#/̅klxvB ܤ^~*fqNY:ި\{=FdօM>'Huox#_a]{`Ī6#BkYyǗV{'u[c`>909hǭKcoi8efZEO> NtCrcvB(UwĨxi9p&ȍwb!{zH|s1Jzm{n]i ruݗ kЯ"*UE.{~A˻_`;ll΁D4}z8'q |H;B8̚ڧۤߒA?cNTI,)S/G>q&<+߯Q֨'=pǿ &@|!?'I8ΕY^9!Ɏm퇻^N ?Cp!ٛ%[Mw7{9 ϨYɗ_+wT>H6]{ԞN gic,)sm>"|]s^.F)ky.̍SeJ@|r'=JIJɉTݹ=Vy;Z" C9 FʖjQ%&~홄>1 A~Ƚu=A[7ut{{9"r?ژ+LBڏ3߭BeCpRz11Ź6?`75lO88{Qϐ|U. .eKS,$[ġH"V8Po;Tw"r탋!ۓ: x9gw;Ktws}0nOWiCur;cH\XPDo }|m_Ƽ[ vߗsr`\? Qráq+cq<56Y[p"S޷$B.Q$0:P5|D@Ͼ`lZ 6}G{fUgN+Su Rum҃NF ^$ơ`:[2Zl69K 9!ihqn֟ im ᕵ"ÀKHǍo״Kh.0C!7y>kOv@E?u`r&6>~Q'8b`Jq͝Qª#Yn6o1{y `} o3EDoCH/G ۖHPI{,yT~gGV0O'{Ě8/ 'wUkO^jJBX`{pa_:$-+Ap,$ 6c^E| n 5sp?3i9<`<}T}|Rbo i'7u!~[7"&;uQ]3d۷qY}sny+k/KmzN?CuIӴROgĝ'S(QφmI+A̎ޮ@]j`tI{7q"{$'X}ٮ/FZ,r}`7[xQ3Hv7Z1H^$-Ɋ?}"ȕ }pq77zQs)2I&QAw+_fAn=p]ym` ~ E 9!xub J앿##`ggԓ]ep>!^R՚zNG~;ZCiWf }#1CBPݷȼ4٦&sr龱ܐ?p)ID1ZD:PHwU侎UX::DKjN|N!(k vʻ9\JM8]k#|\zv[Mlϫy-$^ FYi ̑&C'yXrOdq;-[U>NTxr^=[W1`)RҹIi}^OH^ZjߪfHky+$A3$k j]χ+֕?cv [s /,R‚wh0۲}bpZASktw^l RSeD_2KCjCV.x%Lץt%B]>%+me=y4=>W 7T/͟V+)̖?$SϋK% \pIjQi )b#f~rSVn>7",aT7e H=o>$g>[Z8PqOj.v W1Cy|9?k:w:Hd$5W0n/8Wi_i{kSV%'М3aC-OoIˈ=Z1l5'q`Z!M| Avc>FMۨ˧|p>Dv~ΊFҝaQ_bZĨ}so$Bx!`eܭ؉{9C݉@Vћ8 r|7极qC#SMspGxhvxWuZ:lb@:F'9X)}b>\H󤢹tobx??"$YiQs{'{!D)hhTIҦL;u}:u+2++N]B]Ԑ FLgOxȌ8O k A7qq.Sx 3眛=5!%9q=ޅ^W]PJ'k gN ŵnԿB"uz\mVuU*J7>_y^Yt5 *q S9NPC?q% + hfi):s@Y 4 i8cd>1zNAtP1Y 1xTg.>!G:k8?b :}($#.?g o0gyIGĐeLߧC@GQQ8S mKиyנ渗m[gS5am!&Ul$q3yMv( C ߯#3/4]&׊ ۶r\tӝԛ/B7wg@A/WWmaYr_0N~c,=s2mPɮ[d$cNa~MtpO1߻U =~```Ώexrl~>}Sϩ+^S):|Fy~mx%uc)%o\]@]-LGp;M[oϔ@5y7Η9_Yv̜k,JS+gysPa0"ۉ?t%>4]^k@w`za>Dawtt9ZK/ 1Tw4iiy- _l55cj)rEaJ|6U?l4(~:.>5'|nph9֨3WzsG,|l7Shܓ1/rpICrI)>t-UGιuGcKJqmlD̊B# (t؉"ػ}V QKG)uj&U/IS1&%M~YZc"_ GƵٿގO݀h,(;t[O,(fA܂u SﰉAvT=E3 =NP1\ <ӥlt4)?D##U8spx)^8Jmㄞyms1WHT`[^)Ltu/Ā6cc*p i]0Th~kpGzc襲R;Qˈӷlb3nlm/oJMԝܟ ʜOS3b\zS!9~œ(]gN"#E3|s'dKdDa8*x d͍`~EA:z.mH/'ơ/&ߨG;:ٲ֞v9{-9yp@D ݫZ>aUiﯥRnFbaRpm.1g/kp+wEpGQ~Fԉuq q@OtN/UeR,jcN:Q:ti{{!*ᗢ] +CE[*?QC0,wy<@Y*:]/$UIFYtyQmը>Ү# ||&^ݶ圇 //kQ'"8ZT:jv +jtx{ftVwl| Z&M|9ިs(mKQmWb-DU9FKƎ%]Fq9 0?|-?F5 _>#s vQGQ^SZ~hI۳Ka\v\`{-FӹLw_kSr\uMt鹾ZTnN/wE݋ /5sIc_13QOgat>>45ca+Њ K@MTl%>sfL6\H:5aؠYnovod RLBϮ 'qWm/]Qf P,>SԘsp$J٘'ΏVoVw0jdnCQA k0Qid|#_:鳘:LSiGtYOQR etUN|cg{Sщ̼QߥFf-yBnR;A oo@Džڄ%M~/Xsԝt TaoŃiëNJN'F^jRBXsկ.nc׽XV=)surѽb8CA9fkT]7fjHvqϝñ"\˒tߜIAެ+hu!\ZR=Vt?6h[fofK) ]n&Jt1pjݭ8xv3.P9Nη$UbsEgTpL4;D0uPOo81F+6phmp˟CGieFclW,rrخ3(A4wu EQz Ey0h-Yڣ}*740Yˍ8}dd⩜ l"WajyzQi %>&;My#P{S<0C;`sV{ |}Z}1߻x֚5h5SEhH`0f{Pnt [.tg]uSU96sN~41TNV'0aj)q>g=AL5>Ŝk;GGU$.V@RøL3-ǧ,>[S 7+YXxPSiWn=m^]VW%L?) 2`lV:MPb^4C$=y+=,w1I0$vD ʥ1}]/}xcM¿ǯ(]C ,z JFrIeO\ǨYsA6*,;!FtiZ9cBpe-Ў"/~4L9[&?e}mnh423=o{[G X >5\5t/Gbύ/{NiRs֣ok_P:lđߍ+>NX~ތ~nt7n(?Z/u!0랞/?m*#||@-J7ǿbL/76Gà.bFI?*mAWΜOn1)y<ឦ,нe3uJ~$)Xp_]~oQAԥul =ܟs%S XDSNFC~`9ZhܼtLJ>5;irf?xᜒ UӘA%:ͦ_0Be WVM3}))Co5}v<ϳ.Ktf4<'܌7zq~ܫ霢y.us\)_D,NZrJ9Dm4Mc R%(k\0]})1>1 hLtEN$-zpwn?D0f1h݈|,Sc`:׺ 6Y*;FFM4> 5hA7%ɍvDmDO-Ub7_ҕ +$ݰǍt~i1,ck5ل1O+t>$xEuFSBuitZ٦W}w]Y f M-TR*M Pt|^2<S2> E,R)F"*s5XRI-UBZvX=듗:AM4z_]dFQNDxFrLIh2Si[Rzϸ=ou|lr3ky}9L[4:SxJ`'c7f渚#:u? t6?!'/A& (1OVmodc qs5+B.%$z)ݐA׭BQsD%k&8!ѧ(uY["/nI]4cpu$QL(Be\|rsM{]ag71᪣sQI ܊!tGLߌQ\H3ۣȫ~%IǸdaؘDK1⋔ڮ`ihbfᄷN'aL ӿF&`+qt>>tCQ^B\"ktQq˓6oh]Lӹ"|=\gG>*I&-9^s1C{CmA ,96M57TW⪵ ޙjk o1Tb;:O l+{6&::FhO#׍tq5{!%qMQ4a΅ͷ`ju;*EwʗCYs.qUo#n3H|cugz>=%3.9?WBpb ڟL+0=͒SKjBx;E=h~%ey &~L:CEb;xqhM柊49Az$}'Ʌ ~?STZ=\zF P)m&k%z6E]]\2,f) Rm #8m2j>b*_p3a\ݣH8!A Ed=~FsyC܌FRl85Ni6vo -NRDRD<1G (8ć{-0-OdN'N<4M+FF><(C"IKoѾ_o]q'_Rk/^ Yo'h Y: bA b+qY؃38>y}} 2v XQ.㱃<ld{ts4seL / _[S> ߄)K:WPۻѧC}9<\B|FLqk´yu?oʿqǮ`]co^Uyu,d3(t9켯i)|jߌ\xJ|J /k:޻,9g83`QۊKh(" 1(&)mU?Pp.LȻyc*>hqZ+CFC!|K!f6̼mX˷c_F?/WzuW:F8;q'8^mAS!ۯaFNl@9C n)ӳ'Rź0\6b8GѸ >˯%$msJvw!(jLDƘѣ|`2: ^fch~硃g1̝cV{!e\n[#o4G󜃂hu%3|Nf?݂&?^5(qylJU1SJtk4z+i->FD&.Ԁ7/XI2E踾+G+-+ejo[R>*N4PF{䯱Ǽ -e=n+r;14}c{tZ!Mǧ:Ũ?u &k(YU Eέ'?+Ϝ%X"hmpDh7N^d5x€C35xhEWvڀ:]@3'0~P[O¬TM2I{7V;֞8mD?, 5 bk[b1:M !% ;mg/aJ׼?'d<2\|C,קD0ڗCKoDm 1SꝘ==;Wf8bxJpj=ehZBup?tgtWP:Jkoz-j=3F'?=ClNIewFc&.tw1I[8gJx(5/.Q(rQ&sqY`L7\4 ׸6tbrA{+=F =[:qqYN}tq1NR|U+0„!f _cU< ;r.c7ŷV–,D'8ըUMG:^+~/, 4}|6@ {~7HEh'mit<͔ޕ (}ї*\Jbﷹt#a۵>Ff_FY1N5Pc>2L^FWzN@;wQ1LG{C 3=I=nήwFJc~8/wi RD_rubĭYz'թ.FM$[S vWOO )ۣ Ѯy+.:wy* S2w* Nj8>Cڞ5POǟa?sjU"#%խz=^Qz5g+[;WZ5ƴ3IKSp݉ ^Mx;yWx[Ggcģ)O`AνC?b Eh9?t I E̎5fGǧV*S8ic^jS*!: RxbԻܙ>su&|_w s yZHڶLa枾LB8Q >L(stKqkmՏwM7й-ijeV#wO74t) ~oo~`TFwd7oTHU n1gT_#Naԟb'{j+$tcTYq:duڷbi{פnchBK3Wy0@}Вknu;ZW}2V}yg?3/.ƍae_`[ ƥ`W6bFs.˘7j&t{"[wo7\u}57UaIJ%7\bf(KXun~BQށőiM/m7ft>Kȹ;^fŊDטc3|,d?*;PX궐{׳){=RXtlyc\_Hԥ6*?%5/}W\ ]?L/֡/>g̀lzp9_j>|ؚs@>o'Cu[`5|cEMBAQxC`$:.g^כ(4߽ `ѱTI~!64PM?t]f= r}.#>`WWV_`XJ7%zZ;h䱜O9?pc5Pn?%{w~z쁸+y:98^5@" ՚A:ov+ *i 7oJ~58v9?eb=ߤ/7+OFNlpU F^9qEG홭89}Бscݮ3> hJọG=:7.(>ֱw!p\) ,.,;wzc܀3b0`Oh| gwn^k _ vH |T.M,ԾPt*vgϩc_U#1NΏ Q`/S}nu11b߁z{>zI%&[Fͮݨj qdOoS x"ٕ[zCSb^QqIxw9}2}緒yۍrS&jA;[` c+;^&֘v)@l5.~lŦf&|=S8+Rg =g_֧52jGjʑӡo`d1Gבۖ,gM^G$2.cu:_wlkZ`oviZlIkf;Z"୦*hٷ)pi@m?}ɒ^_#V5ԛ|XӇt7rO;%wtGH+H+8yd_j{LI&qt϶ XL7pm:k'0,=_^ط:z{~VؗyeqoN"գ,ǾӛC$+ ?Y~!ru-vl+E|n/R60=M{DÿSN ."~U?nU=c߿ M^Oà+':e 7&ğL9m9>cr:\j/)L=}FiP4_ Orx )J5U%gzwKt/Iw@z񞕗9ݯgP/l#fixg'3~}|Y~͂q׏пq~59K9KÀp#' XX43[:oQmE`o߼j^->~ْ ,][e7@\5b>W^J?sKw[C=8NK !`m-)w||E%AKӀW+}e`< ͯ2I?ꍌb8S/P ܑ0Eř'գKjoOI˧.r]M;Qd*p:.7Do_$eXmqVAH8y%gg$>{qW\ƴy>sN :{U{crZg;H.o4%IA'kIL+aЁZ/r'tgr%5ā/8_Fr; ԓ/d}$}B?onSӳ_Wx$`}.T$컒z.-2KߛOƟvګÝaU*~\˔y.2} `C9󏓞 xqLN>nҿzO<pwl9. q+SuޕT+ =#HeGtvG~vIl#>/Xs XyfPW(#Ӂ'SoT ^x wXԗooA{kf1Tnbqwv[#\apg p6H #9̱9RI:8+H#.}Ln)OHx.f5]=vݍUg{ոZj 8~eCӞ@p5+6|MIϗW~_k9~DZ ܘg5nf`SL7\{JYP!2$*(;S.zrƆw铸>6zl6i|C߽Mw€GeqI4v»c$n9꺽= ,$>+}*p#ɗ~-)N&׭ knWmIӡns_]dluۄ#pD8pZo۠G=̳'U"3$ !xdo%O6ޣR/z=cy\}8Wuqk~7Np~E}B`?{:٧Wq{bMҊaX^w*O{0\{p0 '€=xm񸶳[[ 5:ܛҖlE%뮍[v S=p?]ғ] .iyֹ()`1})w6MAz~I< Ҹ ۰x9ۀ}U͜Ч0M΁Ijvǥe4rv.W#/Rr$uQV<}gwgH9rt\[X7bo_p o&}$iXAI8řMՀcxiu Qޘ?Mew(^ [xp8^ {Lܧ*l൚ Jm؁ĝn)gA'+{Z7{[b!1KS- Rs)WU[=寪 oP _ə/w`߳)v(h {!5W O5 =C2ɂH>i23Ao6ǗZXM]}+͇q/xd$&nϱ.~&G찁J#Z"-׭Yd? ê{1n /{o'GdyˋRjvv~u'E._=:2k[l%pR}LPupWGi H<:9ރ;+`-K?.y{F"'#Π{76[1z>`$ޫ-Hr0e|ۗ 0ŁU]9ޡxW7``4_<͕\ aE>\0ݓ:o? l(xr z8#A|I^9m +i4> )84OHZ$[ՓxIիd_kRHZJ<8]vjJb046D*v z^ gM}M7(+~F;wb˓N'H,r=𤇛5\L+YWP`_A{쫪8_$~Vm<~b"jdƛN)AųՀ:ýPa=yBlZ>d*nwdC)g5j/jrzs&tLWJV!i2.HW%mkH2{r8ח:3޻WivjHpr%ogC}3/CFMo}u1K}hi ["z[{j2I05?zD܊9 mֻft`?Yxwg| 76JqM_%/k3dǗr\ F!H˹7v=Uhc&. tH67$*?:/cG_O{%$[ ,7a-poEtA;TⒼ%Y[K>ҩn|dŮ[Ó*/MAN,=L^aS$5F풘@]]RrDW}|.$uq?Tb1/M>EEAs|& `LNA| y+~^^]׶"1Z۟*=?-7a`팯7.7no~c/2DsۖuF*r|-J{ob`|T.Vn=p/i$?`8\"YVuYϺFIڀEw/;Hv+bC?|r}`xc<3OxFpe㷩)sOc*2nX 7zVY,q[NG撼DLlnk.^D3M:-co#k8::&^2XF箷Gƒ{G?bnjzF\X=.$# ߖbOMjׁKigIy|Y{"ؔn|_|[[+~I^t6}z&şaiAOXCMCɺߙ։7 R~8Q=8ykn 4nWcvap==8&J:CoI){?u&T߯ȘYDD M2D2Dd(C@H$R MTHf)t䘒u_s]s^k}?߽f} {{")'Өw+\>,G^{o>K2Ǜ_vXt[H{y/&OgSHvcoda쫛k tKm߱uˣ: B2049P ї{O aAooJi[&:.肩;w7z%,+n]~Uuf3 5of$[K} -ޟNg)֭6J*>Eoj:=>Ot} IڷNՍq}0Χ6a{l(~mq=֥˔Qyf~W/#uusKCM3 wxЮɌ/!>{;w9%9_^YK,g!0ኜzsM-y}o{7` `/Y)+|;Vhg}>e#6h](j)`/Z8nly H|GQ`mV5-W{~%`˷Y0u~.F0RQ7yc:̒}"F{%u%9; %şP߸r}W_]W7ws!_msp%\Bu<9X[/[yaăoj@?XfE^ww'`Ս^\5u%(鉬=Gܼ ΔvzK05A]KYu03x} [;ٗaLJ]?$ԋyՊ0v4`mqUzQei7,: m9 cVµ `\~o c+rCʋ_{{`tlݽcU|(~ه9rr`m66]aa P⟁K(}-/..=|(zHr*b<1=Ӥ gBźzر߭Dn:9lx~J2 <KiqXu9Hnq]i>uf{O#7n?U: Yc/`!&oZx0{ޫX!RS%bJ#\2]_[.my 5wK^]h@o}xeCk҄$ې?y6#_$IK=CB=lrf\}F0m8z~V 'V qNNNlzX2lGbuP4O88_jlVۄAa0W,2'E?~2$06KcrBPy FsYWZaxj6IY6 ǿP J:{ {[+a ?$Z4ok"΍3`(#FuG M{?ju}ZfuW(<=BIj[o#eڙYPy[EVIW96\Swj,s9g RH1sf]nC6RL/W٧nsV y+zp@0pշ~ʟ;=e}v}7˶Nti'7/JݴϬ=Qוڦ,k<+ָ3ӦЯal60it<Jo:֧lKhU64 |qE!i\y@QOvw8q e7U[Uoગ4Ԣ]ˁ15m[*݂uD*S,.&.8覆9vxywpvJ'm_k;ˍ񺩔ܪq2;EbΖ:,ܪu1w,o=CY_NW|>쿫Y׾ֹ0g LmXnisBZXu08wC$U`;h9og_Dۻ|?.6z6j/Fyp9<ߏ*wi<<صRO=//ǖ{<ןqo\.Tpk0IGeJyjs܈OiMY!&al+~G١ns9oP ںSX 5}(_̯KwV5㒉d_4nfwK>:n:D5-:go=*s9.[/S\y7뼿 fDy둭a=>{WZq3>o9T]lkOHk=jlߥ߅Ex1Wn2K;5Ws!5J[z~M LRϭY90-woqZa4zSx p(3L6 -˟0:.\&MXBGH.X7ӊsS"r~H99Nx|Ҽ5ж7(/o^)*_c2M77klO`ݜaՀܴ\A +Ǻlcf'os+0>wΓ_z}ђ2ՏE{lL GTklGOdWaK&⧀}M]aVX|t~|&rat?@= _Zo:@r}5IM]mmRmhpBo+i6ܮ0: ^k#?\J?O|ȇWcOO{$3b"e"Co3ƖpuOsApLn'vA_/~ߴ Y+oBA)LF*Ve^,,CN>b9px02޼AZ_K]3njO#d95|7Gm|hֿc}^H7!yg<%>ZIɱ9俄#1B"W֔ɊK0u*G*v/Fy|\X#%Ģk0T.k*e@ڲD$pr:8~^Mh7b! (%NnqljHOPGcJLq0[.$ ̝7c3W.s} k 5ſ=Ҩg E)͙j0aHBD)޿%搼U1pVߵ]L2(j{Mt.svOG;&o +~a`ErR XV‹&`)K^ O]fѐ5mw=ݫ ׿vA_&oz#eC'u*օީ*?&WEHۜ~, 앍6 =3PA 8~Ukr׶;dp9Mo*10agZvհ F:?Ͻu!k `^c =X U|:90q31W_YgJomc}9.#SQ4~09yNTa+Ә?G^Yw)]~&z?oXe:Ha*,}ҥvƴ*vL5 k[DN}5+kܿq7p |#|Wn"7SUYL>8 F$Lc6 5kH>|}C ֻ/ 5<1.ʹO`8ή7D_uJ`07,y9g(`̵#o#2 )s`FqWT7Z3ˁ}=o(O?_g_8 => A`Ss훈qd5`F=0Z:͍S=NO3HF?YM*tRrQ~.Jr[f]p^iܚ̛>]/ɬgct"ϟGnxC=8TEzvrlf AmDݽA__ݴK^$y}o`ylL#L޶yϏx]D0zgfuy#  ]q~)̲0/n ?o|_f1.[(#sW,p#8TƔ*( hgckjզGЦY?Gsָ"q8ߌ#[X,bIm|7 Ɇ{[9Ш*zG{6`KozQq~/]AA83#UNo*ٚEl f=G 5J#*58~-0xӊcreH뎻RËf<\1X0{}[>Sn~BT]^jTz$0#3F vz㵪3&`%c<,=BްK9o~i}9ϫ`\l[FLy]zr>PZl9)B`YrfkڮKGN&wSeNkNA}[97^?m}Wvvc`^y4t n]ѿU7L /ؽ{%Mq/=9il(.mq]X M4 5/}^.y۸9$,>ʁ%I>|(gzXmuphߍyK[jV#TKRN^cOP[x @{0& N}-@G7JNlY '9+ )kp>K@V?5M^d$M>R()c3 qv@"=FBے4 K[ (HK)u\[}YD`@| ]bAR glص9^$/kx4;Eug0LއFdUe`\b/4U lŮZR p |+@y7 @^0j_e4km>HAQ@r4EZ P<ާ,oqip* v̹0Ak8 }/!8_9RzKWV$abػL _~1x㤴f%&9=X] 2!>Q`8O:v!ȿZ0dLI%n ;[rZM*0Dlo<g|I\?Z,Cw2qGNZV[q0f8_ e; l#AzwFxm殮+ս?iߊy-TvP} J[_}CWNۚ/rsJp<˓gq{ ~6(Ի!67څc}!zkѽ'`ygn`ڨPzRT]JHUΫ08y"+%TS8dZ; >9i`,4!q ϵ_oH~xb YGg~FLloi2+ M.I)h3,WMi/-ؙt)y@_Vj{?/b>izNi7}nkOW=6|@5 bPT7̢j y?C:og#%Ry_HNA" h4Eh-u{Avacnn'Z?ew9@zPru{iah~5@ַkсڼ0 h!GoE,-@S_ ԅ߯3ƉڐXg.~#W1:cK׏~a?hy;ƞ=Fƹ+8[U"zo _ų7ԥ[UBU ǘ@<5~)_L ř{{ $ՖX +@ {}s$pR _ bsw4*PuАʬPĝN`lai"Y] cӖn.5QZUs:Y7V|vfDP;Pƺ5u4w} x~˻bݥs(HXuϝxWEj0_U฼n1*"nMk4qۢ՘q7l-ui '<{R`CXWYy{]t4~.a j|GGi [Ӭ@3Jc煬c@1:wu?P(p|s\1 [vlnWr ^q}DaeE#^w.>]?ߞn[pxq G1 Û|4yϢܐ! t&}bx"\ =7 Wr<ל\@|~V/l9N6-] @}(DȔm.ӷQ W3ڏM0L+to @r6ymOL`L7;`i Pwlj?@vcmBrS`HUa O ʝ V{2+MoV [ ˁ<Kaehz wܔas&KJ/% OS]ʶTTǚ.GPSؓW/~*-aBw`H+U:@hgPCkus=[ f6\ 4_B~J;vK-wUH4+w{9FJ_u+ֵꯃ"l*Y %)y+I Zﶚ$ \bGaw$1^-3هdƟٳTP$ovPdkQ2J.Џnٕ(yerQ_hE"`xחN*Rxz9 %6gm @S{,! |wv*Fd̗dzdzMeq.ʖ@{_n: ?/B Z7v͘vJt~@6Dlԗ>G޹tmL˸+cJ$B{Xl0w-I޳=} ~ln6 ,U^b@ 1۪*?؏1@:1W{_k^>VDSTN^_: 8Լbaקd]7JI@=zۓ}=#ʝQc@gh Қ@HB|y8&k+h Co]@4˷ZrV|~5[!S%cǟ c5/~(jRn,@&Є]JA؞E.rxwo9N ԙ1,siAɨ_yb)Of~mE{f 㑓'~'?coxH:*!亍ⓑ-X;WY6FWu1zӹͺ04/NaV4>}լ@lO6ŅR@;\ZL=㡰-?+ID՚=G@^j~B26Z~ꅃX(4s^ g.j'vPZSW!~]Ӗ}@/ݞ~H- n ho\{CQ6>=K,#y6{Ǡ<ct2I=J-<ЬXBt )umӔ3~Ҁ(^SB{FB^dƳ@18sn}/Mx=|u)wBVɯ hƢ(POv !eGVEKz[ǚH Hz+]`(P jPm.`FDmwad@<;|Y$CRL{'_/zoB{y,ڈ{:rSt/P֖Z!wh ; Ţkzq Z54? H rK}|v6 nuE0*jxm:EjNZ@6lw'߀/cjTs;}~ffQs߆z;m?mЋ*[z7B'ڀJ%G"w~:y kcM fC3(Ur/?, g﫢]8;0:ՏvﺣyB9f`Ik3]zwc9e^/41OU@yFM|@䡻"xh=Ї&Uf/RR + X*_tJKǒy-} Sack~^ٗ5Ma OD?q|'%=pLtL@.m4iP2,? A+ b(@:zhuI[bmh5ٌRaP4G?7ċq@4W[C`ȝ?:1yC>- >] ɺ|;\CqX7"f^fDA~ .@Ͻ>|QU_#_ޟ]9K5co WWH>G|-ƏDžO-hZx#)K]I.lժ;%Z!*{~+%ʫc=mh5!O`x_]dΙ' I`JMX.F=X9/~Ze؅yQ. oЎ'Zd{j抾Fzk;|&aHOG3k-5&k3ze$F4QY[~ESDqNz=$TvQDٳ@7\ C_QPnS {ѮcfJB5 @_>~.}@n]3 $Sc^:1jGJ@vYys(|k5|2nW Euq@\ff]qG=owh(rJ7Co5z& gNK?BA<# >(nzD}{'wδR<5R؊ YkBGq`H= gbHlڳvX51nF\{,kJZN/ʊ˺D aO`r_߲3:V~K qoqTL]fqֽA'G2C]FseD c9hc ^ښзJm9z@NG^_of;Zuo-.EDX) a,]a(vVې)Er\ <w:#O+b㦡ǧ\I?c5AX_aOO8Jw֪iR#{u'oGr :vs}ՠ>5yPOMQgTN0ۊ,0<~}ޙuX5wic}pW|>ڌ7'1:kY]xx&C}`B%dDQg$,fڇFX'eGSGdEK`1c8ֻ֗qcpq!޸|8 Ƣ^iIxD8zMg0M4: duK]dAi;$%mMhT4 ~doc#/NF>r; GW,QK yQ/L N8S51߭v/*zr ['vm)jIqżDn-q}LI6#Uӂ;@VY]c!eU_Nx*I>MnUOշcMs86j-_Q:#Iȕƾ/}JAoylU7Q g/M<#.~Ol> ' xlT4u߀,V,=髛Џ+bI> s{U b'x]x;0b= q: ۖc6_癥`xzN}nOnFq?úc&>@f5-;hz; _"di}o\vۻ#bՁ}WlWWG <5=߷N=ęG |FZKW|C}}!,gSg ׳ 892K uB=u]?:κM@Pw>FP`5ў$KB3M@E{$s g3)c%0xpwn -pW("Wcܮ n0lPE ~s'@:qk}'.U["Џ[ `]b7JOg;v[qEDk/Є5lSs: -\k1βj~kw@p:eh}w wv>\Aih7VLD Qlnl}^ήiA۫X~o2٧1ݳ#Gw@-۩t}D)M<}?żx:9s ǭJ|OK5?Ҫ`p01lǒj!D.)N+!(ytGk\=~HM=c0_] cS``Z=H;ak[V;n7@q6$-(DL?&4ݐp+e]u8T4oI3a d]sߒ> HP4{#Tإ5}П~7tGCؾ9'`{ClW5-ڐkkbtiK-%e@XjjɅW6O3_T=13U;2kҿOd[`/JݶHhcBq76,JIV`HhZy ~c6dnړHr)]b(%D# 6W H_?q l zoRD=0r7әb@XJ-fT:Q ĚF @?i!NYľ}藷PLL3e P>)̍RO<}@cÃKEy;i)7`︹0vzZt C P6лC E1% Dbq`0ټx ~DX.lެl RTހ<`Xékz@ru"OW79PɛZ?%ڝн Y!74G9mځti@4c@gQȓWsYޑ5\Է~M.©b{O(^>|-Cs:'Ht݁\Tʢ)qm>ƫ.{^37Ivz>qk#ưqKYVnܹ}L-@.tyx, 7JլoF|W2% _Af9~1!yTwFJͤ,0ݛgDlb<@+fl*:''u:D&f-RbE'pSmf@ (IX߫ϥo>TBؾB(b g0x@gM &ܣS `A 4K8x#B*R!<*m!*-4dKK(2KQiRB߼^^8<}]q?tRfC<.KPO5!b[]솓n!s{’f-wL'szBS b߅S}oQo$>nT#qFTERaw^~BRr=\CWM2Rm9sU R׳f?#ܓfDؓsΜ ?X~HxcW)xג)ùV4;3ѱedv:wTlHu캶f~;mJK^8J n̢Cţ Q ֿ?f"M%̇t9Ө owV}$\TmTϤjq\:9 nPpt"#Ȟ[Κ%T;TODj)="dnΝ.+bf5rq-+ztrm :SrEu\I$L&#scoƪ.NxEPFz}BuyX.OmjLӗܽj!7{ט.2t*)՗63w)×j$!ꞩ5M݈ψ D{Lk勈qDϏe.fTʪS}Qw]r>L`no,_r''|Hu.+%&R̂$*d~oї}UVPI^./P=r%ѱm+\w tMGQ_ t3Eջ.P1O':,EQ&f zgEjP5.դ}ϼ1HuVN|W)u+8;Q}U\䋜̔T#<5 TiL?=ཥz 2&L\nէq/[Zpׅ5p':-3*}bw2ޘ#ON6?]ACڜk_ HzFoÄ7/׾z%8eHz_ Ceت_>O X%|"A|Fj^sک.uC> gy&QbŃǞzݘ?'AtXWໃ kN;Jn7qLCx'["%ɸ-QJ`EW?<g$%ar MGvn\:=DOn>Muݰ?_4B⎵g$íi_$]#yySf5Q7NÔ?̳>TodO~z2@|DwE/HۨQ={nD?psJΠo4q!H_*_~ǝ`2^3ՍNTH@pu.?Q/G4>z}UC q6&Ŕ,639Q?쭣~U:$|[Ju4GipUKM“m| A@ *鮣AlfGk &u*HL?rWi ۮQ_u R=+}Jun0OuAuJ 'l\YONƧ&G1#uiw#1 G~minvQ?)TϚ{o<2Bt̢sq S(9T_)˧ sa2OcKu9F}i }6)AUTBB7afAk_lz9Υ}d}pM=d;^Z2Ϝj+9iC|ͪw)Aau!i;R}:͛;QT52Lw^%8NEk˼_[:+2(~u,EuןQEuf MwFS/~qR(Ձ~pHvfv6^mAtm}7G]FWE-R1^/ H_Qչg_m\զhx,8q}ƭ~S=׿ҩν7Q}wV^Ҡ>[PLzO~~%5j;{6?SC V:&' P]RS 5N Iu]Y.Q<2vs_KF޸0 }68=wR>dDGoLLyMte˓OSoӪhTŦө/c꽹3P4癈\I NSIGl :2oD"fOoqhL7Q":MӇm)Df&ѹ ~& 4)7Dϔ aW>kKjuR{ a୒jJ;t̟H|?<<}.Sf),$~-;y; kzơ)T@GTv&l*FD'~!A&muhw`s2\'lf]8DJl7n@,8ySݒC%QI eON]68+'qJ})NӬ >:Lu5LPB|N֡sNs$^%%rNn+fR=QW%'S]%t44V- sJhAQSFgi+lu5Q;CrH FfdRѻT,éTo~#d"'M|ȥEu\--2kyսzu/Qӽ _J !Dnz~ RN ֨DuS=׫zw&Ҳz7W#?8U)e)%P|\ϒnݰKp|B˟? )2"D'qѥzX(ҁ2מR'ZCuj6m0^Jx崗/=(Au ޻Ș5yԗoJwz_Fc֛/N(15@ϾeTYT_9y;/QTYN߉CwջŸTsD.zwQՐعyahI(Y[40i:5LCPT+#㨾-WmҔ#g:_<jNf{ڟT's N;oj?7G}zn=7&/{?՛uN 2+VL&?mIM5'R}64SQ W!WyM\K%ʝ٫{?i#Ju*M,pͦi[IѢz|֟+#<51Ig}էaGT ?z)+xHm'z>a gV~:m՟Gw/yf#ZT9S ^NETeBR}cۊQݍa_P=34tz0/_/Rtlh%0).ڣNsxD_B*yeH8.8]sr$&RXޡf.vf3%wI %83ULLڶzJaO}Np"JNckGT߬/R0AӛG'2zUv3[S}e/lMd~!-JV?&P]I_uɩzOmlmJ!FQ=:n8QɼU" Ik@r(s͟5^/Q]nwUP}oi;AuX?*&TcTQMTϺ?tSݿND?lSM_f;]Cuw$h]wmK6IwI#UǷNחE'׭+upNmSlJJɄw4!5//FuTjt\$:'D|C>R;.Q=̼Ι%*u'ED7[BN<#ONBL~< Zjmæ AMP‚ q\:0 KRtao4Ywch<}:@)&)= Hw>kUX0/#k~җpK1 -rluJ9f\xMz :f6p/٩6aE0]eB]&{ixXtT y`Z.UQՏ;&b0+2j^L0R/, eet>i|SLy\I0;&@sJ^1~=ɝS &hX]=A`OWnT;SmpNN*(w>_sJ| 󯫃ڟXY$ouZja&ΰ- $0*Oo}kg wL=`:o> %|x[YIpP ߅ wjSYZY^+\sH%O}m!%0@aIt$ܽxA%7u㵯F_EjtnII؟͋ޛ}X=3T{UFm?EQ~h0"}w\6"aNp\6G.}\arOWF > _ zdxQ >4FcS#g^3eO\n C%.@O˩XHYޜU\^91XS.*l`~oL}!,J{uUQz%:կ-CX2оRpAke au5B> ~HJ5l~ǭ`.6dzk`VSdĂ^y.d 5E:fFAW˵0Wp#y7X'#&]JK97'o{xwM. Yϊpz/G\TK] N|͠W~%'Ѱ>P|զa,@Ft߯+ SZ0x_ {Wɖ+(>z~Qp2ZztV-cK rASt5o]= o^_}>M=w7,yC">D- >_ra)6?nS@j'ח@uFN0oE1?<6yھe /ۮ_ z]yX|^p߇_+] Ԡ?s9g8% a|8t!a^YջpvJ{ w̦Oq@ePܐ-7&L@1 )}/_?{w#@S*m{}<O\Eĝ]|\385vrްz_ Kqeľ`< .7T0׵W<~2םvds0mG?`JRW?Bme5`F &nG+M LS/wK[caSPh$Kz`g(\a&80 q9R)>a@jɃofaГ7le5fƗ"x^9=0v-Tg)yY`k='aٕ`9{n3XR脃g:ho0n_N{¬`r7s7gf39Z`:22r Wmrgǫ`7ˡZпw-CݥQIݞWwb͹0Uݧf%Me':3;;3 #`mL.=:rcubT3[_^䃕=p,*͗;ls tUyO ܍ߴ>3EO`ddT0sMCAݛAK}>ܭ[CvMFuVtAu.s+!5q#|Yʾ :$tW]jgء7 PYfy05zNڻp^'+"cg>\Y0c˦ơD=FRuWE,w˘wΟG{Wzj`b9GN erhfo7ԣ 7/`L7_t z{݃+aƭF\6t)f oz1Qվri`|ypsLG<^^ӕv_t]~n}kG' Y-e5X.|K{ݼ2 违.fLnT(%յ>bd~wSfBYwhwF JG<}㕅#ϫE`48j3;  uG_(_oFnJćH:9;i] Iƺ~{-O:  a8$u[x3$ne\}yf^297AZ0-%uC7>apTDaQph>/dޜ%Z >'g[V& w*I0t3=-lc jpF&ŝi7MzaNZXN,t@)* ,a&yA'>D8Ǥg1Lj5@O? ΁9) _^+81Q󑞴Ɔp.`vv ͫsy1՟0z,,|K_"y lc$7u}fR܀N[]_}_V:z?fk1*pO]wȋkRк~.!^Nܧ.SlσJ|'g)^n kˮ>[:@hU|سFpK5z#jo3\Gwg_a)L3ґ`%b*Y)v69ŝK5V!kb ޢٕ|HНΓj{  ]*͠yG|ֳoOu` Z3n(yUM e)oU?7_A4#:{Uyeeޚ~Aw5ĿZL9ޯ rݲ6o FSϓOO ᡴץgy6ԸO[Cu7M_[(^Bu6;z>&Sv˹E}y̯qV5_ؘc7>3;c'ˬ w5Ҋ}d'WեF5}0_ipx$8czBz2;Bah0K/Y|`Flp[i25-ꔦowa}Y7q~. +HrMf./`5^a_"G?sm#ʿɏK BkWDk[LqL#Y:X +5=^a`MpB)O $Do_}'ŏxBwV Hp^=!,Np.8kh0o0; G.`n9|eE4 ,B`^u&X 4´Y :khQF1Q]z"۷;M5Ƶ| oMw8WT%W-` il]K 7츅@{C l +Z=ШoϏcd[ {/¤.7UB]pO PXH<-  ӗ5u[) ?c>ٻ/u'#XQW?{5 $>T̢v!tŷg=y(t_am9-J`3; 44ⷎDLºӼDMv;)\Kv; LQVNIpd p:a0խDW| Kۜr#d}~O'Z? Wg:cې96WZ+"a}]h}??)!%>mcunAWjGpֹj}^ ǰq٬0S48viW˙V~oc>IMדЛf_?0I]&sLW77 aDW0zȇDӅ=\s+ԹFAw\?p+#>N Ep?1L0:ߚxѩFȜb 5̃Wv7mv'#siicEHun>+; ]{`K>~?|ےzG>c,Hi,>^l}#"Luy;Ey{UB 9%fL佅s_4)XrU) 8Ac0[ a ,5Άmw`*q!˯k-QH"Efy0xQb xd,#<ʌ)a^+^R`$ӸָVT<7Z"l,|3N< ̲겯o%g-y<Jѩ- 1=(ߵ_r9 {>kL Vk2Q|g5?u@F\1cYlI{^stu~/Ø1^09'O8ž,1LL tewx6^ t0]e|1T`0lM{lgaFK zOOO ca[n=Lo _ޫzą_FUF`)N1I}rϻs:6a oK)׽^L~_a2@Q}&^ ޒWSw{mk,xֶ<%K` [}K%,Rg 6$e\uh8̎M{,f? V[(,Z"薏\U;u`I}N;S$D}I^pRVF}2/3 ab*6զr@ݞv??·kQItQsp#>ekl9[]unA#?xW`sLQQ~0j`r܂;õGe'imr*t^/ކ;>1M_Fa ayflzŧ>m,:~5%w6ܬ_M| 㟐9/ت%Mp$e`?c`q,zs0Xn45 >"ό~T5F |nX>ZM;m\0Væ9)&>M ˆŧ`+_Ї޻c˦&u+ 3ު%0qK킞UඵmVXn;?1Dsw #u\үj0^hU\Wkp??pg35C^ڨ9~SUJB7{Rn9wNabւzNl79YgC=$l'Dal}S'&:)s K}dR[ ݛc4jZt]P]]г(ӿG ͫoWU~.}0v?-3j0hreJܛÄT=}Bp0w:E]32#{el1>{+9yNH^$>ٽcIIQ: 'acɏ 7+G:`u51̠~konCRp_(/T=uYPHQkk8qӉ6=/gx^Kb5hNy7-lZ3}?GI?7nܸ,Z!:i?#{`乪b>f~5g,L;]N?КS;a\t}V?:4-,bB:$xΝ *x\?KE .,rWOn;_ڝ ̽݉;3Z+L8 cRM {Iuv[w?NvTƀΪ^F,?iA׺]퓆 K딀aU~v5ܗOI?&lU{4g=vcGEM?XU(f/vRmJ4[ifsoI)8= i+/Wn O;2L}H̡1bb?TV_ι5 Ѻ7[N;p)O88o_ϔ =4ZhNp/= Ԁz3j``yPA⅍:]]Id3`p9=p{i_w Gdg n}{K熍ϵ#ӑo_K(n3˱̌p;k2GWSuን90LY࿾/pz2KkjtSnu+J=e4xTo{#Y߯RGvc94 EO n~uЛoԎAZb1$j:ς)yX `yjIEQB2S.~ƷԱ `N<\moa&ea?xFF* 0>v{h[m`-( ޗJ=` +n/+ۮ<¾ W-9r>"E3[TDh_t/3ӤWDp+}i{^JIhy,pVϝ*1;h#=V.3}Fş%`۹zاJw0s8K >Pa| ݭ -AaIŃ׊X]iC.?iRk3z[W%;TaI>l_<s0t? ʟ*C|?{׉puuat:0pj!{}+L(LEtJ̅O@\Q3ZD]]C!BĶYD]8 d9D쾚T7[f/aōˋUaA`eA m2VvH/b S/U%w123VGsx:N Cq̾`\ $-Wv]'C0 [F"J]vۿl\u>84gK.ύ̞OП3Q,he9ϊ{#r0Jƌ /8 M!y]{h94^0b%%3:8hÄݺ'/R ]ŅsD׃-Pvp &oP/<uhwrpN(%g׾4y/ WsarFx& >ʁfAG\&_iʨE]=EȨB;D<r|6sZUil^KdЇV$n;sS&l}UP/h ?-%CƞK$Tm9ֆ)uIp9s,]žf /%\-Xv=145=-Q|#%mkb[n8cWo[ } wǂՙ+y[.jE\5]'OafQdxMwOè[{փ`<)ݚ "=id=X>08 Omz:836"gy 6N]6I=uW;x cŷ@7eC଼W*LJkRݪ˾R7JuwRlM_Uv憧.]5OM|@.ybs/W:} `6Lm}'|2#[j?\Lp3N.Ɣ{6:fWk1}wt ƽ^y$cN.>z;eg?uB7#0>+:|w֍o=WLKB³`GX/C7S|Yb&A0(zs'kٳTdv4I"m;?0%:^`vqnHC3կ2rZdhCJd8p*h'ms G='g]cI|&4?/qCXJ S`#WyE1xgWw̄oПDb\IBrSt'(_4d9 ;aߡA|9~G 4 ay치 OhY_g4s&R2E^4Ȓ.dBCa r[LNlZdV`X6Qr'^sL52S\N0VCW8Y,$qz{OJqmh#Bi$f\eҩ7aI6k*{_nByj., e'c,'B=qrZ0ʟ22Y/)S]M„#1P\_Y/?ZBU4\9P 6Ήs\ S G&NyT7]@*v]SPI8|.8c{& Ϥta8k}*pfA/Ŀq<{Ebڳ|\V;p#$z]j/U8SvDR'pJ[dacx8ǚĘ_%nɸi 6} W+E0`Tn]8/;_}D wMtTof(#[{^DZa{fP-T*4$E4$JH(߆R*"iɨ};>է>}_}_VT@ lOwˊWu _h͗ 2ȕ k'X{jggĕrxpkjXVwYG:HȦg Բ4!X)| oϱ/vv(|h6TΪ> ˍr[q'wo1CPOPC.\85Ep훥_?}C-׸?ɁPJ$\HF{h:LM+I`=ג>'4cY\#Nz!yPx0H]D/y ܬe'Fo>W~Ukp*X6u-D=`/(%x5p96}8z/U,rt(.s !Q3 2Dbp %Wy aMp@W\} !#Nx&7D(1Ǯ>;}'=.JUQxSX|)[œz'OW##Pۖ.dg&ӭ d ]5FdEJX$aNΑO2rظrք&>\t;zͭePݬHSYۧA`6Uy=[C(}Ӹu:9/p`Lftt./}f8~ۅ=pZIeT; [$^ٺFJ-j^#)?\XNmb 7& Vvlf4v6&BJ궎#sf{(﹛gD='o`K:O짨.X`gkUܬ. }ξp'IĈ)ڷBO[82u{r#[ `!l}6 {:_}Gso0.eQqRI][%,ѕ euTcWXVXzr}d{" 곰vam4\pu/`e+/vEW9octl*.=~+7)X ՝~v[v0,^~*Tz㊍*ƄG`Sc`bs_!7h/!ʒny9 lR'wr;XlmzE9q~s]'VH^ {ݴ\ JU#ɰ;^em BەF<O>(~uˁ ٬dۏ2qCΊ164:w>kuIL؉]LzkfE DAm1p'íٿY~yPVgÒA.w0@v~~Ԁb yo/p[HxdAIm?85p2oZz]\卸?K3Ʒo3R;n< &ljQ,"B8$*M\빞MHn^ j,0˯1-Jy h+"rEau̶TxmteAX6e9Kl{P$[$Kꙇa~HD`^Ca#L,&6I]nR_CgǏ]c8~Zwؾd彏N(k{D]Z} 6gb|`tlZ+9s%R!/|,adҫ|lR^sƠǟqL;]{=a~~g7`{c&u9ёP/'(4`Ec4ruMycPڱ09VB|K4 ?Ӡ9ZlQvZE"_P,h&v_ 륿תk=y|<C7þ]24ÛrdۺEm,[8Pc݅<#bDO׃]h LᏵ`( u^\`{ββu Fa 1v7iNdKUoث`guc> ?v9$K>W!(,M2g&d5Z{ϥAcg8sh8qazC&w>,[H[Pv!1B0nXEĩƯptVx]h35fu:ęTeF י!2`;qk#8ŕ]6] J?;w6C4șr6?%l!"G8mHGaQ_ |j}\&egϊ/ ӽծF Sێ<"o.AnC4?A\v(>G;`|G/>nX"V5VͱW)UƭnFW_gg1[uތ9FE<i"W=pxG+k^ vɗj.]g֧yʭZaS r!zi|>E}5P,Q8bF; 0+pJ%A#"[}8D˜|z9X.z|hVk/n5eUwX>,|X9%doަt)xn _Gǿ4p΍ƇXZ Q F{rZޅV=|+Lku ue-Xn`n>z"U‡a{Υl x- Z5!)|>,yln V38j٬?=`xs4a58 k3?;!S|*'Y)}U4+#n\ ֧/~Ak&<;;v NàNMj1g7L uT0뾼a 8N/iㅓyy8l9y 2g/lB?a[P~#ЙgQ?'9-6nyиyJ8f&E'@TǏgaDn>Tt'eTvLpMX5>ZAgep%ht X󆀹P>#]=/#0-?.槬hq3A ,;Kٵ@O /K.'zU>vmľ"z:#Ԍtpx`}%V hBGiX5(U/iB3=.V6' ./*<&wrA >} Vm6q.2W!iЭ h?+ -HRo]QEe壳ka49{ޒ_x-L~Fi[#$R@ pЛ}~P0q7,uqށg~^*Tʇr" .qN `m,/y2Wt>z䔮5mR\˯S\њ U N eo)gO>>-;-| ?_>طrByxxKdsyK]# k#j`;lomL[Ҕeof[ڜ%V'tG9؍Y4NۿvB8f:pv(^あcaV7A` L5!]q'+>B\jۿ(vj}O^j=`UuT|!t"bqNU N3Yp˞$,HSC;-@+x3< vq)?.\ TiތR=A0}4OS}%%-`1]IɒjXOa?|5@}CB^yW~Xc"ƃzs~Ƃ/n"YPsf<>;k=.w#{v6v55jMrG<:N.|Xtc3{Xt|K[`[}:7K@@}daD~s/DB;K.Vo,Y2'RuޜBu`rT 73aae6\.9. t$W 8d߄;}/?_׸27}89e`~Ne>h 8!`dpoN3yoAN*x a]}}o?,g4nƎsmI@V/moYC']%EI5 7?۠ݴ\o^2";lDl]" M2"ZZWfCia YDx4y`' ],#a30ϻ_h.Sj~@_:_s \>( &Q>`FQ'\hf8s}~ǵo&] G7nPp2/{ux1a>QEuGD;-U w^+}y FPOrkV5Wkżko-ߧ9x56\DօQ o7kI?A %UzSp+UKj'\%c 6U &i#`8>rml͒p)\U>- ^;7a<UoG) i0]c* 4[׏g\ף%RFDV]'h*kʼń\!b|ɫgf#o@}CX|N{=i˩nLYX98Њ(f#0iةתCG}j9|0peXx Np ݾfAl(é UI3/ϟ2.ex _mt++K-ovΕ:FēCx4掳#>k\˜z@)Z͈?,A;~U""^qm@iX]:DvF|ٌ9b@XUsgdD%4xxW6r)S!dsvGBN=vTyQQn=!ah<2_5-_?,qgCYP\0 n6%:¬{`E6n{\#Z ]\E51SReA QӄwxQcR~d!@/v*Pa!<˽CXk]Gh Ί`N'u ֈn5DQԮzR=@QY lRo;^MQ6OMJB2xJpHS k )1I5]h9ڟTb~ݱKbϞ*w0XX|>:2{9 sQ> (svo8sRթ+.ZA3 ?g }>V-Ӛ'={Ԡid}( GiNu$%>3|&c>Z7"AN/t~L/uB#JJq }`w7vBhOtfA w5֯jBR5Ki!+?1 !zVQp ߴMZym *rGa%s0%BN+JCY~X}X۩[9Vk жsBD$z'ez[$8TMz_"|^Dg6+.ϭ ~FFƏ1;`vsxS8- ͳuW?AP*V^_~`Q|o}i}m'Q+QPɆ`)bJLBb`hvЍyq4Q,nsۋSW4"O_0UCoi &hchB%%Z'| = 09iN_.pky\^EtP17 ŠCMԜ1CpQ7 zzG-!mI: 卩P\vؐDzwǿ/ʵ!.[pPsnnwyPh''yb'e߯,>޷cMCۤ~'F&9uͣ"9\>bǠ`# 9P:a{vXŻ4,ي?Lރ\~08RIRqV2}mYyWY + [nCo UyvG\iI̜FlHa`8i,зSútsIKOϼv>PC~Gw=AU\ ,N 3$i(<|˃onE٣Ion fsV x.;}󤯀Ka([ww#JO0~yOb5tnX @qذw!UFPXxno Ϧtt2&@V r5 O֑PϱuM'E?xo''I|I*C`18T;^{+奟Gu+׭B0Ϸ"R)0[QՍC!CE\YAoflmM 7"1E{zQ34HIK~Qthѡ76'W\)Z@c+#7/$y.MeMd Ֆr`m<.,##c9ZU;OKx#p}à+Imt[p={o(qs_ #o4@:r# OYf˹Wf -/1Kh}hho~]D9(s%PX1׽g!◆gfA+ȍk/L!7l1/|y4'YG\oXj7J_4w#;G(̇ USڧp[rd90ֈ25͆vyu-{ *3 rҰ~]"(k~;5@7:mJW 20tN݉R+'Q:@s7;(Îjc*ɗiyψ"«H]9|Β p |'/oUWWk ]ѳO!=/(]Cd\0Vʿ#A>8>.-n@cbcH>$vF%[!PXb"D ūawd=e{Zoˆ@A55kwjYac Np+ʚN?gKᆈRWQp8Q_ԫyq!TWY- !{]~g"}é'XdžM*%8E " Nu#p vݧ,%WNEX1 ќ. lVþh}EP,8<&dqQoC?E~^ir}F+> !hf.g/r<Ї wK)P0K!n ?ե4 I7 V4g?LIM vViNИ?I]8f/о &=t${|e\yНĺfl{X]]E@Ԣ]-Saq8""Tφ쫰꿥 2rgxQ5XIٟQ-+I VCrC ^^{g Z3>\*e\{t^3VeƯqID ̈́xmz5Q 7 Y}j Ie$oz +G%aWDc9{zn$tdL$pΑ"Y Z= 6-^VO|!wߙݒp\Sy 1^h-;7pFgˊ498~|Di8?DYؚM7:3( LZ݄gރp8笍dA<lW;Wa XX)tL;x:*7Ds_' jE35%}Нp5|y̽ tWua(8dMk O8`b3NqB6^kGܥi/7 ?X0s<ӫgE~Me)hu)n^OIJX798iOG 8}pz?\-Ξ `'V3<#ˏ!jRYR27ޥh[0Qy] $_n<|!O][DǕ-Tf!({x@; 7|i&cX(tE#l6SX) ?I^r >_߄+Osd~vh >ޤiX x0v&7κ(-Bp#N\/iՎä+veeKHJ>>rŒ,c!/y >8r`7og TPP:= }>.4@'bSSE-\AϾɸQC;qH?17(z^a$ x j'~H[7kPlP_-2`_?Ša%˴>y$3t&üFsW>9A#9G8ڤsy0:e#IϋMo@uhXỗ08֑X84q*vn ߿4IB#G@+].Lb dA)tYl uUw#j~R=|LfKֆۿ}_k~WbQZQk~6싃Wncڽ an uB粷&`1~I]%!{"^>JubcKV|p]kot~ka5{:H ua@+G\%NaI={i)sWkmLɛΰ.~k+l7rt61OT﯁ԐrXzd#d7tǮLB۲MߖE 4'-]Wū`L2dbãݓ`3c@EaWٹVSsá!}{a>/%1mоJѴ`D tbUiF(Wgva)J=E)=4֮fnG-oΊ9d~7 5uK.sLLNr#ȏe1tXl"G^r!9t[w!g2IBcGۣ6h[#yKK)S#G()љ{Tt.-C J0){K)~aW{,?KØF@3;\^Hs r?Gsķ\d{=7$i>D; B_„Vr[0[u=J0նγ#]{߰,bH[nh9p[v=g@?ph}9d+>Sjo-<wO X޽l7q͙dIm'ZqTj֟O\[-Ouʲ"spR÷(~i5o߬}`2R^fNUݼv(D,m+ =wC)5xpj`+/Bԓ#Eߌ2*g ~E^}u/:M/:rQZo߳'xv@qU=|R^]ARVٕiD zӲf8%Y.܍ݣpME>{u("%nO$!ωO411 OIpf /6@7V'S!=hpٽ[{e@#aѕx(\Fr|_lY1|luizňøAkaCw Y*7~<\rDjI} 0je:GҲgxD{tJG5׌Nk=)xw-bߘ 097sb{lnJ8N+$:·gGoy/*\v_zUP5bB@e5{'@VۓUKoylǽM'+f2j&p.ݖ'n>o۠s+23_ϘÆC|n0lk|*J٘bXaDU '1/'x s->In<i&Dpӯ(>{s cTAs1mV!\ ^MYʮ{""Bq/wv^]vXDcMBE."jrj:~^cx_ [ '|Or}yL57)BX;QNN:hGZ%<[GcAOl.w^2cyVq->PIn`{yzD nd"XmS[R\!߶(̠/ 6)߬$5@y˼nĹFkHsIh֯زS*|g`̝aXj,-$ CmϜg2?LKݶZ\= UCauI='ntZRCCpf;le} QJ?}@> 2\Ct~ouҿx=(vcNm+e'Qk R-)k: O<pwuYi z>W!I}._shI XI\t;>O@6 /x gRs#hÖ{6>uxbdr r+h8DR hZP< a,6I" n c+=Yb{.vrۿG`*R{-- +P9_Ҥ 4`9FQ}w]&ocd%o>pCvU?nD@G{V< Lކ!Pnk%& ߿t[˅m`eޒX\~^x6ק|?E@4e5U1UgwQ؊E]u{)0;`dZ*g-k ?2?om9R+^&wP![4"\@!*~,M>LXIs8c\뾓fLHKNN )ÙOd -`XNXu]m8;%eǥo צQX{.E6B8ĭ˚{r 'MOP̷[`N jwїfowk[ rp .k9i \5`Ȓè<\H_|̓n S. X$dfeT&p+ZV(Y?bXC2 \/է HX9p9 sZsˮWn  J;]b\K7L 5 8Z P x,xO!2샹mFk܆֜a!χTPf\Ne͈_ q[|=BZߗlm3pynbo?|_OjY/=px^o3u [; 6/bs> }ƒX[W>gijݿd=,-qe޵,s^} L\rpUq_a}KthO#ڢ[TܲܫGg:}Sp;)#ls#\6,EH=el\ib1~ ;0zc- xՀbU ǥ];Vrds\`6KG/*sϴ0' pkaƉ#<. @l"O(Zr6_Y !6y]ֱ㰞ݫ; S@ o0N?`ݿNSFPJbwX-l56)/^i-AA_\ԹdG(#<(cD-.^-"-Yp;'wph-֛qS =!#N6X9u,FKL^t7⏼3un ,2х8]p'V XzM|ߢ`iݐ9Džϗ߄7W U!ÁI BtA!sLJX o-z}nv,.=!|WL:!A%G"ؘgmN]2:{ dFGİt.l{ ܙwW|wZ:XӤ$VRLJgu۩ѩ N:("@?@V7ɳy m^|Qp{q; z>2™s'Aװeg\pp6y5 n3d x7z !+a͙$L7 jӻ|V)FR%y5ľ¶V`>$͌D%g'ECLpP 2,Kz{`un&ii\H 4!_h{9 І)M0[q62mGL6ùo1lgw/"s,z3n"RwwhכnX-jJO -; p|BhvU sWc!&X.{yn ~r[{L'w2gG2_9g_жi] Bxݰ&ɽ*I}6 V o k^S<k#~rz=*ḩv9 +go}#0:i"z pub(z\8/gf7G~Qmi9]O05ʭLԿ/#(q_MN?;'x1t]8ɍHy08C-?%aC0%a\U̜sLagU>zK59r7BX~4%f)tS Yx$@E/_;k.C-Qs5a^jBszV{r;H8ʙ7bǬ`~.[':#W[(Q}AƓpl`ۈpb8>fKzT&)4)L{ &<֓tF ]cki&<SD|G|t;c5i^<4 uaM'^1UIT/3+Ae^^:Xƾj@[+0 kOȸ]:mvĶXϷZN1ąЗ"!6yK@!Hs2yc!OygjCoCMw8_ ]|!veԛK~I# lx[: 2qN_'[)X;L֟tCNC"EeaDե)a-*5[̤^ gӴ`}]a1|{7tbpnA=I,%<1h03pmym4LZ ݅C'; {pOCX 0ˇ»pꃈ7pdN{u߃}d}_|XM~:(w- `Z(iT!ۈ*>TNѥq(x4֡Z8>^$цO{ḫgɪ0tpe`\cr-#ɚO*3>3Sٷ5,BMea"'ߢM2ػg;xo?qyC,I:FǕFr"RR.\EJIx5w"!9j)Ja\:rAKWR۽l /CC͆/EVꈍRHnm(,CH,.^?~o'kgEth rHv'h==)" ~f:^EF{3rO F+S-Ta&/zwt?ӂO}M)@<,Ts'YFӯ%y)">n ݩm<+r,>xJE熺S0@'~xKzq&m@ȶ[7O9C?w8l^}r3%*( ͦ}3Θ]1okY۳TiWi }&ɐv~6l{7 Kѷ޷#%UW`S2MCp" \- VΎo8$0UW 7bߒm"S~ o@Ѳ\e^~{ l9K乍_an]c aO7o B92x=wN!bv]Ax\5cP( /u߀Ա@ɯa?˓鿖amtT5tf].d/zT;ohKæQ[8*l^@F?ΎpAOa޻x_d?UAרL 4H:a ^߱Ob,:_ZZ[EU0 8\îūEryUaw"Y3.bS\-,3\zaTp}6&m ?Vm[kY\6nkR&xP4]pSzOM|%Y.+@[гҵ^ezo7<- w8}گ .{#rmo eТmOS&?}}*%-Ak&.f*ҟ+"&OaZ Kaӆ,'uFҠTD,%ON,>tHK8h' CREBۛD!"(]q(B >e0" 7`<ʰ >7>! awrXg;Όz?}T7"s{i.CX3PKO ߶Vfyp:0m3m3# P?o Cǘn9‘'\2sQ:"B2. >U;G]faUs^[-k{ o ܀ gwBa{QH;|V1MuOVы "@mo;6 6Y"MǚHGi,=xV+>Ȇn%<6N.-V݆ EsbS2ۜS`J\ׄMkġV‰@,e]\t+a3w]v3Sx,;_޶}Pf(+ /CzKy8.f×M߷PSx}1 䰐}K4sl{~6@Ǚɫ>Ґ=-s.waoLjnߥ/8B9H[I DhMX]~_|%r`7GHQ=#/(n cs_S""A!O߹.';)]"zCV@!|-y)(0xE |L0j7˚GqXthm^:uM R#,TV#e}Sf X߷}xrہjlv/c_~KvLvC"Uyβ*nT<6^wy7mؠ"EUoøzanv &L WMQVR ؗU;IDF]x~.X>a$^nH; _O J%~>sk Q%YY3 Ye !03bC6Aj7z6?+Lyh$ $8nVk1KS{Y<2;')u.Z>Rǎ)B6Ĝ Gc9D ?=$_ ܲf/Wۂ~U\x{h/gZˮ.[{тϮuɬ5P0>F?vD~ڙRDHCr$ ԉ?[<9~c8.Q)doI\6"hU2~'WK`X<LB,L4"l{םjd_Q_.[W2Z8I%c'ݯQiFh{,ψ'·r[usb89DaM #N ]$v:n 1PXR~gwX^ٔ{ mb{?Dtubx=`z>X*)NQuG{AssHY}Eobywu-쒤l%%7H#1M|rsZ$䚁Cp?b[;Tp;Ѻm^NXONgif4pL'Y<{M؁+D z!遨9E"},)H,F?TEbf#ӵdվ@\}tx<JaiK&yb+uADA3A67ChS]B3wv^?y{h\ Pfxt"*:1`&ߥd96 n ڜ-G,m_0Vxq5[{'ٝagV,޶i5^% +Z(NE$gNQŃpEn )?sX 6֭[%_qI$J[6Ώgup W܀iITZnQ#65FRQ臗[o#`]G0 Maq7q;?s ^SAsoaJxuOq}qxRH;})ؗʬd= daC#δF.X=)# ]KӗF#gV4El?/QXn:u Z읛b]D9-D180\?plM 9a_=6z+~嵈"9Da"JzӕO-σ$M?P}U!wmiО3^!]uzIIx  a׮'Й \c.&Jg܃ڟdK+ IO-6oB#Hj\͖F#jh V hNՌgyך_n骙o+'+ BLx?UerS{9nGk&,WwYХN6W/c=g- hoDeKc ɹ,<$o6LAi~C& Q|&7h Zmhfк<SjH4vlv"_< {̊8]W'۞O"mYv(lOޟwpyp-Hhnf'Z oxks;3& Gjǫ \ٴ~<{!Գ&`{ߦM 8B?qJml*{oé^W?b^n`>sX)P5I'\_ ?lɘ2X)gfGÂ~|gZ m|G:_k oql/n#a)6zqsWwA#WGe}ݳEZ}7,T]ʪ/yF09q-1ZD$_ [-϶]*bIZ&EӭP}v~N/n.A!$b[ѣ0*61)uC$t\8Mbk:poc#n]5ˠ2t[B֩+["anriHϴyyXЃaN,ķLGZ ?ʹ|K&Q%cBdSSƯ_U`-eж^tFY*wu;tC}kaYgKgÊv3?mSChѫ XIswm@op-뒝pؼmmm/չ6#K`=%]7x$1VY?BRWoT.ȸ %/)D\ptsA;)C~ k:mg`Dq;U]s:V$f+v1tD}OjWʟā/?Q>||&x".PokR"iY.U`>8hV|&QpK2 F5/¾(޹\f@OyZ8jE|I7Ր0bI\)"mOᛒY2He3pCNp 6ֺ;:6w۬dzKΩA*11DDh|ퟝC8ɠ= 'ٛj\u[9ASO,ܐPF ;d,Cﰠk&~'7薒"f4E-:`d{iy{rmFTHg3 /QbW;<β|u˞xfH Hq>9C A0stnƩ~_u?Y&Rrs@ b 5†jR:3+B6@KFI9/DIwpfrL'Gxw=2ˠ%|G}|L64ٵwI\zGne;X RV!xpKǠXF s"//jjF'1 \Øpz9 <kHm ˑ&xD=:x/ :$ M~H_ن$-`^ ">*ф]TXH,?(k/#|tCu~3SH_>3 "5zgzxOcD؍nF]ܹ0c,ԨcO'M^L e7(D@;Sv-rn{եyQ2[B:[3WhSRB Sd"X}ESI"O |J T7^ \fgYn(˨VNNޅ(xTh:6gbs{vϐ_t3!zTX? v!/w[j?S/9>_ENh0Iby!ujڌBh,ǟKBؾA؍gΈj̯4X_X!ÿEd8t# :&OrAuw؋MTKḕ!&N4@lz^ L]FĿX"¿ ;Z?K@ \R ڍB >s@pL"ǞoB,+-rL25_/xGxnë$mz Lu&k6aD_a^i,i W%u}KΓnApծ0E^!:8>Ag%_Rt,wY3ڄíerۍ?!WvB3H{)gckW+Q f2%׬I?LxJs1=:bЮoyrYeg1t/ 85h*J5D ~b_se+r:Г\zFEnHư.k1|9^97 /;j8Y-1p}y[;"L+o#J'kr^<]Vzz,t^@D \ܢBgםO%6¡Уbl)Nī$>^+| Eu<[ LJ`duwR 6Sݼ3&<<*{n w2r$PQHnJ0)]IU+kVu9Ҵ'%|I p?.qʭ_臋90_6L~8m1vP" u)[(4hݜ$^S' ёs3&dHUghwMHh`v ga7:6ܴHh ޮֽP ŝGV&!'F됓RZQaescB&|ly} >[桼*j4p>fTH?k-?c YཕͶOc#883=:?a#2 ?O%8}ab'|߃M3w?᫪eeC/خ6qo1E^bтIGA:,ɷsǡ?mWLuԸ/賫kD꼞vl躙yr6ώP}^B"xH~dlv-+P*/(?>4e,Vg&W}yq]ƚcJflf#Z|ޫ7$zo9wTRGZ~_j΅/mBiZ!\_t音e}*"U|`YTW,|6zhOUAџٳCSXD Gb'q5Dߓkq? aƗ3jao{U5o}l_y R< Zؖ~Prb?ckWA-.)=3 Qo"x64.![5ч.< nF?=r7UC/ߑVi ==B|(1Ωg I/#>. ^}d|FCQDzS 7r}CA2\V F ~T8{++F+x*D:"?ݐlJ{Tx%hǏ:yTUДbCviauVoiz;AWg+KqdW*- \ px8ϭFNl`a|fckk'ܜ:;Oق0wK~<aݪÐMY  4# d?2P5Dj7> G11,Z๖`9Lp1rSm(;^Τr,I e  ™g_'"ePb85'!NnE} d}{!&-'hpUUt(_7"ʜеr^. d{t}]|u37bF)ԟwXwlaK&ն 0xQz(/K8 uje̵۠@Tl+nnߘ0˨Oy1)V)?%S 0V!yB {g|x7Ֆ] sw*z,1i6G.5#Qy>zk\_L+}<]pv,(슩G"/}^r=H{>0^!u,Gn؍X-ah.W6ݖdkڟpz1]7åK0omUQݩd׺*Ɋ,/.".*s/j&7|Y7QF~j˛ |ЭqoX!P('^i6 4u0SH!<HI+)KEOq}sX}_5d>|]Խmqfj |:y5SW O&uuft5߁FWZrLO^]oG{Je3'^4!󂊋C/gM(b 2gb84ƛA2g5uŠo?Bo ęX;~1{ A-lqX'ʳfb> +b{s!X3+UMO#K༟}qG_^L1SO]{y? ݹg:$Ơ{t8$RH8\z.x'W㻏~} r%93%v%nxR]2$6z2#V?y7"Ψ.BtH=97/+ {ܻ,݈,#2{lN˸Hcd3>f#!>LĺZŵ&q3HYZ~#vnYj{7BtZ;'(s7Z_tEo+tHV^x0RIJgN )?zhV]n$ָ3J"$u}H9|nm> 79mF6'i1Np4u~ewvP^/ V2a޲{pD2Ct'w)J Xc{6C |V@۷"ƘȎ4q+_UOCxLf3T!)7գ6@ 3ڤHbnZn}o[ΕA0XA(oQICX "a&#hy — @ՈzL_]s;FCiPoxYa뙒Gv/qsas=7!d=szDYQ%!􂺴C_ ^Cwڋ[g^F\_FP-L7z;3)s 3՛@P {-PoXPA "_>!;KUQrUVlEb1DN5[/ZJ#DSfu#;AW!ҶSZt*.kl>ҫ@-^b{lUP㌼|SUM܅,&/^Bx>e !czu ֈYOu##m!\~{]J.wnU"b59<ˋaP{Wf;WK.f q)h_ZqTTѷ ue8DMlh]ё7 ذ9rxWLN"iWo~H5򛌟;jwsbP\m|b =eVW<5dMB Oco5o eX MT@ezD EW(2 Wu'd;D$B)Ky=69ʅ)0nnOLm[2Ce5_xq%Lղ+z6q2s)(Z!0"7 ?su ?;ڳ0oERj8G}obpi/J~l T!8r{g?%X{K-{D>^K}y**ǸyiD%65. c['A]tFPkyW= S s~bݨoݐ Pv䙉/墌d%z±Y+s%D2ُrG/~w] &A&s d91f\\u MV%В~0b%q[4{½6lpsvv>>'<ܝ7۬I( 4dPe<5+'>J4 ?_kw{ՠ=>7;= T w@#⮃žn;29~E#F&y|ύvҳ6Aᛶ{ DWiᦁ|f]Y!;{A:INT}8qXpcR&i&ILWcUZ@¥):a?}ShU?h6‡-Yti`kf>}'9/Pn]u3umdA05ۦޥo3вuT\¯|{Wq]ܠu 1OA~P}S)*wG9b@\>((n̓zW]W`V=!y^Sr?̔*k3q\{ mzA! .2k+OŜQ{x»{U Tc[BgEl˗eݾAsZLaXJ "=NB|Om%k_mIP{vk!|r&e )؝J: ]z|O6;-Gi9QC[.SHF+w!.Xif0Ͼ +kOk=2JB=RIHAE2E"TJJ&J$Q$* RI"P{?_]uZ{}s>X'ꂻr+r㏦?[]{T P:IeރbRɆ /!;X5_R, _9hj'h![Fy7(O } Fn2āҾc;p~l__WeeG'p:8gySؙ_?_zw\,Aͯv$jPq&fYp',39*ɸPZ*pM6=BSd |iiF2ayӴmKF{pϮ;Ao*-|Fqmcohѳ aEЧ[ YK^7d@O&!q@͍IHN*|ҍ.$}uBBM;(<s4g 8̹·tvE  .Ss؛F,-1y! ׆KyVu]"Rf<&8ib`~#^cv8CStZ6z3kT?9B3,}~MЛ ZOyʡe/xF' NͿ{ gZ*ȹ!k6ڀҍt'{?OT`W>oxDdV5kT~.qݿǗ}_h$Lٴ@- MUT\z@)O^`̦G/ oZ9SIn8;\~/¥7?vwh 17smvw4?Ʌ`26PJ%ˎQn,4̛ ЫdCmڭ/w^P(ƁSgC~?NO/{wԷ8gU|qgWj$~-ߙm~I+YyYoW'kitP\ES BxafM`v%> ƒBN"z37̊up8bkk4&U0yLN6yN 8gYAYԹ ø[|; 7-!4nS>TIƍƉMAĀ{VF;Ϳ;Bz?AoDrޔ"p4e>§*%Xm&ECKAlKTǝt?p+yH>lZgцcSHi;A\St0 l**]h8_hS}.aO> cE|N}*xp<έs%ޠN&|}={&Ƭ⃲B#2e;O ]CF] Wˮy:4?=Oz &r iʾ? yT)G\jdѶwkAsΦlo7s﹁{wM[&,'~1_Oێ8N^S*Io ΀xڱ 2wBеq_Y5_4:*?1p[8נ\ɹKOBh:bK^jg4әВ>[m!JosC}oNV ZVD=Ωw&:@]a+Uo\{=es^Aa"}b>G_5 u3Ֆ ?I"kX i6:i1_?<g j=yEyHQA]t8۩W_TN9}Sc`^XPfT*Xj{E@8mX;9R]2nCHo|i$ZUA課6烠^$FKXɃ-e{teP}!5@63W<Nnj(8T%s%{;G(eJL'\ |޵ؐ0ԯ֌4|STy7<ؤBrɻwm7Z\3[iy|'B`7ۨn <8ㄗD _zwR*l+O8I7~K0C+P|I|xX| 6GN 15JAa'+AMФ<ܥ'kǁٵp%.3}smjN[O}ّ[x_5;mn4i }9K'3Tp4pTп| _=gCu2P Hko)݋)Lw=qn-lMmH[\  |pH.7o}1QR/>5D$nMb<7 C%(p&+!t5ʎC=$\S;R g#κ _>ru)=PZ#kN#/|:_P7#"u 빳9}hVZn. #m΍S}cħߟym-n^;?ɺ08aC|^n&HPwל5YT|vYy5!P 9r7ǞwYMDn:f P`gMx]g79 PX̅XKF?}㷖`t.*;=dJ-Nz`r~d\{N~zpä>I.0SI?'4N*qz+!^Rf@) w7OF] A`'r[N/q_{x],C)|(=5#8?yM2!u-YO!b@LJ=y@r("4Uᵠt֗$Y{jC7@4g@ |yd.wm rػs1i>~aMpzw඗MW'ž.ͬb =t@l1Wj]rN%r~b^Mx1b5S5u_6%Z` _01Y_drm4ZI~DNr美d? fO"^Fw%YvW]6-^܎U_gxgck6)x!Az/[=Nj;_h}ZƄ[ ]ܿ}KwLdGk2W޺ ,Ӽ#?ߧ߻lxOt,ɹ$=v0Y Cޯ^Y*YlC=}Cx}1 \𖭚unb_tL }6(gXS;yg0>+ emk6cElӑ5 g'("=ԧr`y*o+[=&3 i6S>b7X=4LX,^6{?[&\zYaPLjρT&xY ZYCVm;4翀hZ\X6?ܚ:tno~.q::mph?K ]95"%v2gyEP73W 8X]j7@t"7މAP񯹁~%dFzi?aSzy2Jw첉?&* NCRW咹 ˠ^_{琞^\Kve$-Aէ V&j? cWטxQolHh^Q/_{Q zo7얂bϣlzlakb;fmz4e|{'hkm{|hO/m>R l'QMg]_I>k| d +v7N;񟊊tC%̽>7 l;+IKBW}y!Mk^Ow n>R,ԇmgW3DʉE6Uqک?ֵkpNr>Ʀk%-_z+|r)`,wҿ~O*NW~ke T^<Gow`Ysy&eVN^mאxL9wgN3ܷ~.֖G$/Zn^=V&GX2ӑnV 곞4^bU;v0 կ}L֞> @[鼱2VAXpj&_DiBTxz5ν@W.釘WU %/x@{3o< -уû];yynA$_<w%/&שyO{Î/_}1\:(Oog#}'x.睏;F֕ = @ך/n {KT +W P=y弨S5S9T[v% ha O+gm5e0r(ɁX8}RkuA$ڐ^ ΑiVu5 9H4;>fn\=7Ӈ++dVGǃPrҿ aXo>,F*kc D Nͨ婍2*Y_3ת/~iBǃG Ɖ^+6w7gqosWipv%>ާ伯+5a+"歖w`Io>3o6V^)hpv9 ׎i;_wC%uFy"Im XKrR)@ڋmII8dJ`:qAK}_/r_q y s NL ;è[8zg9\_w_,I|Ov٭ϩZ'R /B|N뒏\mXWX6jR,P?z ߙU[M_B`̔  sW&JCTIOnɹmLri%7b/n:a3-W⁞;bs j5(/9ٱԜ7 )*N-_,MU78u8鎂^WPu 'O$àl>țzpe&ڞhZɣ:6؜vg"0j纖%~6/oHNhG-`1X.ߎ Q?ټ76Roŧ-]i$O,R==*\&LVSiFՋO+TdvÌ%N>䁹b`VcK봥ʘ9UѸLz7LVy&?%,ܗPN+Cwqj$fo7fr'^HFQ4ܖԜ#P}AսZ :2K%wD!Sؠ~6^qfypɬs c jnl:wW9|Sed}G']hlPӜn͝XMx(Lz?CŻ>bSD'o-07=7GEu9x7k{-%&{ۦW ܶv;T=NPB!)^CcC*k?E}@2 ):A`}-d&8tW_8=?E{XTv_wW#h=*qp/W`t&cP?ƙXmE$fq}g5Aeݳ9Yֵ 9}DտlM 8j6`:+'G7}yVЂR;_\5PGg~3=˵~G ۂ{o]ɝځf-Pk$eq 0w!* ܹg?u3'9wB!櫽U׶ϫ5wC ; 909V~ Um-EǸ-\D*"iyW^!z?8InSC\o;{&4T.Lg@-} $L.9 β,maqs?{o sAj%=M` ;Oy>w:gy8@Yn)"޹Eڳm:('ߘno7=%|D=5F(klʠCp19[< $ob J%Ky{^fMSATƏBhnЂegqGA]@rDUD =~kP}'ׇD[?sU?k\Y&׿wW"OMxmLvsO T[mIOXn=s! iCq+fyoy%IP-[|ƾJxtT^'Yf%(IN,ЮQe]`,X#O|vkV?f͍z jނEkChEMf74v&]ثs_M|cm/(ShCh4;O3l~2b\pU+g)tصLpOjhgGp2Rl\-_VDI2Ub@_b=D&.3¯fG숷218]A|voXN㫙xЫ \))@&\o[͑=N3YlJh"30[kq!ԧ)~{Hr.;@{PEK3=gE84V]_иx}+'vppiIRb?Jݼ2nQs E^( k]1 Zzn%x-CfO,nAeH(9$J)faLE%=~6ԍwxW;N}`+ǾLioor/cԊcu]S]|(0˴.'Rc0"}hL_A=i6Ţ[' ׵*VPWN^ ګ:I<5̣ η#T'QE`1Hzct㡠Tw\bݗ#V-n[J^ \z%xE}o]׀,{:ΟK~J<\3j>5%AocYG]x5ĹBC𾄳B@I]xb/2^wxxF;·  Z0Y!xcoŒqOUSu迖M]pԟr|dXOqAzx>crk8tI kI՗toj#X{yoBvB]f![H 8[}Kr*mI߉v =;RzZ t庁Ը`^V}㎓3r$0b>rƄ~f+J|djˠ]$Q޺&ُmcƦ |%G>_ȶ\ %Db/1Q$k~&|ΨC$Ôsl[]2U|yo*0MP]RIo=Ck7{'aY+$[Bȴޫb-0SœSy\]!{qAhv'rXwG:y\C5OEL'mp߽?/Z4ys f'#4p{odqD &o<214?w7v-2B#^yܢ 'H4eTp۹{7Z*p̙V׬Nt[.Ȗ ?0o|\6\| z?c Ol Aɝ-+Le?q'x7즬Bв?HoϺZ{!}4 ziKXHCtSp4JEyWm=2^{J H4 }o1Wm |D>eI9 ߴYVA^?Ɋ|B+>a,V#Ҡ9gO,Ը_$uA4+Ocv Cz~m/Voɛ@^RGt` e*)L:L|_^Yo8U jc-ݖ 11%k`lu|^˷Hn~H=CDɈ|ScAزXx}Be˜V@~:}1puwP{΅BM/> wkAyRۛ1`J:J_\/Zc__>v x-s@}z<ܬjg\b~ԯgGrBw 1VV3A`oL,Drs^O[ na2繉ڷJEr]mllB y~N$]ʘxze1 k:i%zݲ\2qEx=yޒځZ<1WoJw|^S:U}RI߷M'=z҃7>z": {D#Kzcʪ$BFo[kA\O,e uS~:.bC[ZK@8>]"'(O&xEcC x=wkw rA;̍!L. }Yws*X y\ݡ4ݪ!&q6jŕ|HWs@76/G*'sXRGϊKn]ryO ؉ nJ7,@1"X^䞗̽fx;9gK]^5^L֟+J}pkuh&ݤj"Ɠkk^] wA+ʍ 0FS->bI5yf0KZLvzh 9cAl9B~_4t|}Rb2VVO]&_Mֳ'ѕ QE4϶=XUu~W) C)jY>yi'y LҘ56l5Hv_ 2{4| $\m=[{K\e50zŶ+5(MfN8A :' #~!>Oiyp;=uwc^$(Ϸ]ɤO:Ew]%~ ݕW^?^ſZZIڍzmrw 컆x&9EAo,ҧ;T2xUׄR'7e. jrN`yd_R҄t9㲅KU(B9)[ GXM?DH[Yv%!k'ZH%-u>J%+%r [S55f7>)7Ad^.x]}*F&̛qY~w :6i)[P%?5f^`<=;wXu7dKA[GW}i㬖)i57ݤstn6+*4Bp;65lxg7-wc 4X `~S2/]wk~aE_T9Sfx T ';C\k4~m )eZ%cw N dW!5MOcp.Gq vw K=c dt>$p|!8 c:#K匔 5IdNoDh{ ⥪Awׂϙ-M= 9g]zW}ҁhĄULxwI$O_6'2 5Tqj.I_wɟ[x_3jszxX0g?J0">)QTơn.T?tbٶpfݷ:tw"i͋o}[ҝt*E?_IC54u_f.m99]MSqb}cr>郥y̬/)K<"u7o௛J>:` /xnK-!{Xؼʄ^}/$9:C: *)^Osi?N}\.Ɍ7?OLz^ϱU3D~~ . 'KDNAwz,^- iAd;:86 @}{`_`Gj|!Oi/fakOUt;ߛP85q:akw"wv\2m[og%*3'}u|[>3:') d?Z@kg~Z{d$rZ7kEo$|9w‰~Ym~\. nY7`Y\ΆqN0Lڡ %DL3bk[\ z|6TܫF *sc$ۖ~_ʻBƏP3bB½BO?CzKd0ֱaBp? ߗΟ)c6u~;ndMK U.lo]Oxpÿ\_5xCl;օ_m7§g|=ѽpOsONȜYwtv9Y  RK4 u*r8ㅃ,B K G}eQĽrE=l"\Eg/ v|& +Łv6EIewM&}{7ֶ׎֞ v$,ZJ/hV jm`M?P~6>A3Yzb2_RBߩFd'yiCrHxeĿPZtUk5ԋ&#`} v7H_>.tٓp݉KJ C} dHG51{}μ^[o4iPx\ EiC탬;Ps:`oPfzvI5; SSE<*Jc y zrNAu}m %&!Re#p`eaLa2i5ڠK:eAfQ$ղ&}b5^o?&_ Tz|ӽ?kLnEc><,~VR9k*N_PVGO--M6qlXuZӒ emg jvɹģ%F_4-0>"922?~BYR a XW/K7os&X4A1O_,/R ? ;9l87I3>^'WI. P8S}#P+ ƵÄָGV'P:^F wxXK -Lq޻!GjCK;9Y Zy IZ'] $k=s1}p'GFN*l).06j0qOf@!h O|GgҖP>"U^ѲcS sz@9+rmT}:8}ď(o]uV!|/#3.[>A.|*k9L7\+nb{޹^O0Kxv_y?u|-'7Mۡxt5C\Rq&T#W-S ~{_" 3`[8&5̣.%n4H8a#k;FLXX3 NzU_w ({{.}J4s'HBEJ0U #⺜><d$: _J̵ `=~ߨ+EeWi=En)%^v' KMOg)s =39.u[y_/;%œaϧK8`ˆ߻ʌ &yk7Wfڒd+y}7jl&dPa@D"MS62K.bAvy۪!{:hܖ+o~1!귌L]I3oen߮j3ʧaR~=_ fفM@ˏ6 Z{P({|!ΥwdI^ n\ x {[TIȍDWBmw;A6{n%` |WY4 Rvj&Y"Mxo΅?`dEζ!O}hLOw+qg8T*:LˁXx=#t _Sxo;54꾣<+ڨ̩69X;6 ן^ smP,7"+C0gt0zmٛ[W<<#+7ݎ-[K(fO`ξw%Pz xbnjǟ蔊ҏjk{ڦ2<΂I4܀©IΏK/p[3Ht 2K^i2Xz @ lԺ<>^cw#2O''j \cTw9Oփ+WX~c#8.=[ 5M3m^2/-O oԨ-񱮈G \k%m 7l"_ς=F<&Z1!/c\l-I{Qt*\cwP @>W;V߆w9N>NVV[/:L!^b2 __%~w;Y/GsWeuW݇:`uo}H^دX5^LM"64D~s+/FLn ^Խ?"ء1, r8Af{~H4Vy ihu\@|PD\qJ۽uؐ#n`}'^j64_/nu[rVӂsvrhSvyYu9Ϯn8 *B|4w0Hw"XۿoXVGf6X*?}$iřɀV!g<7}JȼvTh׶Jĥ;:[x}ɹl*z>L>Rg{eRn,Qq8q9Zoʘ]p9h#+_{T=.!y5 mޫī^/]\<,n[ڼ\g /H|6y:>`^9%s^S/É^2YІ<EYլVoXZPzӳ̓י_$';%S7 Mz0@l۩gg5;:>>:4}Clc ʊg!{t b=Ǝ*QNBvZ No4oR>`wX׷Y8'}~uޡ:Yqa.01Mﻑd{̓'Ȗ%n2̛5 Ay%伿G<*v2?G Wu~[п=nYhnߴɃ?K;Jۇ%S3v ~]&"wuϾV|u[FSPw4Ax,`2yCNoEm][ ,)Λ0xa:1ҡ$&mzyr1__<~ީ|#b, 2;zL'F`$8,e-sV@_AakAYƍ<(/.c٦-`k5:Hc Pn2 ܬugJTӂxԝ #IC:ϧWBjA鹇 h=;X5\/M wCxRz}`=d\W jK}ȧ+33S1;wӥ)-1o-ѐ#5$dݗK)׷ sE]A#$.8 F[]+Qw AgHJ;jU4Gi$Zfy >c] {M`νyE[/j}[>n^9yu!٥z< X/~σh["v{o9isC0K˲ܛ\wd큘VWDF3}JR1YF?!zdwryǢ-f+~[Ԧa[#Io@\QtR"rv}F?IZJu? =`GsdfM;# <(MI_t([VP=`hl\+r?I 78ފ;j4E ++o7WOzhjGRtoZtT!JQpC/md烧=hZζwhU 熉Ol"yмu1\@J+cχ:rIwwP b>_k병9U2 \k?E l젘/8!ܦfjUɛ|ҷ/Hwѿ$\( bOq~Tɘ?# {ƕ.()Kߔ9`q^5w|c[h~5_cBv~+cL%$}|SN{'^V@(~^wY Z7ꎵēNAf'g'G$f(YA\\ᢵܽ:i}ɜ{^ <5;r?7?O׌3tP_T4Z<[=p&uGW#*A֢ސ ) +VO~1J%7?͈8v9T˩*<;qr"H%o״Xh/[z)G WkNgStF=-.T#Ju:Y&hອỜ$5/*|h'J;󤡜}j.UOrU+{9 (yS]#Up NnEdBkPs?-vȺ',>:>+Wzscڹ3Isq[* v@oxh_Fؿ%v Ctܐw!L]~zg*dIv"fś-)(bP kRE;/o Wd-(#41Y+&܇s. <~Dz*g T3]rq}Sms {6Qٝi`J9Ln ? N0_&Y"lr& ۍkv/ %3pv-:<JmcPͤ_] *Fk k4YefltIJM8Ѝ%}6#Ug=,MWi-8g9e_Vjc~9E} ~Z,9ӚqqpfݻӭKr*9+ؿuf!XtGb=$U_zp}­E|]d*]n$g.~{?kǰZ|]A aɴ_2-1Hso4HTkHXkV9A:Wv<,ݱ׭?V~60W{Z٩NpLEbjPlv @[?s66{̈Y:ׁޑǪ`j[ܜF4B(1Q4N/JmP= fTr 6&i`)bބ*(&4aVg}(X!Aw$aL-:!8kQq52.ݮgC l>6sOt|un,vA;&;X ܷbG72CrKPBbpH/qP]ջޝ=C gȘF|mM 0v pZZOL93fP(^=yYƾ?hmoO=OxXf}p^n +̢{́Um6?ٻԌWJ*च8y䃫SBE-_Y ʾgIۦK<( lg'NBHkswlXfNz{5C/5H_i;M<k'`7UZ Yg4?VdV{PtAd}Vq%$ݟWqR֚%3|cPn͔CU`YvSk[ױgw(ҳݟ)!\}#Y)N]Zmn[I/=aI1`m.:G ]_ L>uywU?E\&f]!ImF+.ocտ@I$%Dfyw`OeHv̗Q/sjj{8,P\x-x68'X+<rlM͍<5w'G|l!|h CƟá*7lG}OO{Kڟ"ӡy?_=V{q/i}Z kn< q1$Sn!5O ʡTiv L\kOFW,^`IaysȩXi;Z֪75/T&g~w'ՐrOd䯮XTc[pJ4iuw o^W=3/,w9aɗɾb ujVmT07OTOfz xÜ'?tߍb76ӋycDjOqUn =C/YP^&w2gs3˪kFv5P]#9 ۶ǠMDpWVn:{/JBYY|Nyu@1__&6'_9\읎>Wz=8e AOw84x0駃KN~}-qHg-t͡VҢ_ɼŦ*gt adi~}? t࢟3,A}YA@xWg-'A=ju~//kAѿί>Lς8K0] #AQc;C98*OVt9-|Ol`=&{l[-ݗďLZndcG_Yc)&Nn?m 1_Z}:B<߻6(S*›)*J]m#워7B8Y.2Kc`t.|XI_~wD=C;{9x*8'Ϭ_go^ĝk -`pVi]W<|ㆃPרr!3V){eU/$Zw(~Brxbr{h^Q[Eryƽ uHoP\s7W.Ȟ3@ʜs//> ?@,j#hRɭP}JI|դH|(+~xc.x~%Tik˶MYN%@UyQ_B2d>YŞP5}8{}>m x/^[ע߹[!ӕp&p4N7vB?y$2w/ MssPz.>Jbү4h;Eǽ+&pE(>w1fN [K M$2mP}hlFS*M1HxSfk3)8E"0UWe-@fzg:z!8Zt"/w3<ܞc#=O[PZkLУ[YscÝ67F;/'L|8V4ĖDzwz&ѳZiǟ+Z}|uiQJǵ](+]83ʳlVl߳JQI<̼cQJeh0;=r0\̧q&^5~L#u{Tؘ8On-7iTԤ9/ftgm(lp~Hhjnj{9!JZoɜFL&= >b)[fRn8 %"OD(ɿz=Y|U>c`6 ȥ !pR ;;*^(.) K4>Jx{hJsEƥ̡wKhЧ^u V^;b'8M#KF7Ł:|"fG90Y+ Fo>\}87;<[ƦKbqo/TC? _~N1UM50I0b^d2P4fjxi^tyc{$.X\To ^οU*9x7H~OmmvS]|Q9MAO ոVϮȭ1vX(V4`4q%?Iў m@Lf6?"B&')vi Y.BnӠS ^ 9m]s5dj)IbR;*/S*[B/7fO=J+a@ j5j\N@]?ؿM._yvqQVi*9-s;8ͬf{TgGdr7y1^{*`s$R>ɏz ֟X9`J֙:y[MAo#$fll8 kCW~,'޲{?&zC.we킥&$dz*ߏ ߥ A;#բx?AGJ—x U k7._k@`Y- 7%2xxf-8 9E6qGSה"A|f̏e=I=Z3r7 !8#;ЮV_0cYZt£4}uRl[6/ǫ+y@7Vײ.2 g*m>G[ l ];_lWk@:z#W4srTWH  mP֦~?o)x~;fOȝHs]bT׫zd$\ʿԒkG?Qt=_;::q:z5sBs-+ǩSnܹ# 4\3QI>]3B\e&ʥZ'o}ijtr{>M6 H=:l T?$; Ӹe3mJ Rwӂ M@V|bZ}VōR DZٷ?^ b$2/v~ծà3l v`p[rٙ-!TZ Q'ypXDKD :RTH} {ο+lηh t}pYPmSZlo %=9swIGyU3! 9byy{g8П|7@n^+77A=ڪʊozݦ` %\ۧ8 !b_A$"v >]a*x[w=F OeCrK6L?#T{LJVs8Kx[W@M.HjfZsUtul128w*O >ePP*n Yϼ֘-1A`?qʊqBm^]^X8[ }wO@f4ӆ|gP Y5V W`jg[mTg{1/2*6ʛ/2Nڜu3sH0+\V,c$E8]{%86f;ym{s$\_:A:BjQZoy!.]cG]i2 .*y(  .s$; s!3]g֚]BO]V$#3Ecj+(c YoIy`?/͸vcwd vK(0`>;z'5e`<6vm ˁ$-^.gf;U{XjnN/(S?>y `-q*\PY}PVH#ԍA8?WkL =ԻI4F\Qut3r @d"2k_lߵHc.uT殃btUa^ N|.n 9ʽ:h ."^Ic[]t0v3[WC۟9c/NF&7]eoZCgͱCGc]vk\Y߱/d7 Z2ڸ$G7kyd wcJF؛U0^eRGK OT0}s;NY?~y[)&r (T.:|ܧ}t@Zݡw;yߴxV90(9>hh?̗Vmk]@\r'LIl'OӪ]Yx^r༜$ յڛ AMIIs5 LĔV;MK|ƙ){0WVzBb0gkLZ-.**~Qt96Ǻz!W$^c o]O=O^pӅb?ooPy :{{yC{'5>8segϸO-3A]x0`wϦsyP#YWQ]o;3܋PKHQ_`<),_yxBM͙NHJ>xu=v7Eγx^רۖp?KOI(t]/]Y^E4v|ʗ*,@hL,e4RkFS(Q!08!- Wl^^{#k/+LV rXf98oB7 =Up[ z`k b{YfI-=wnv*>,o<0^{#[sr>蕌km['Z[Uoi~Ijh8Yβ`GR7Za/}t !77[p7Ϧ}&RX_MkpH4QiXYn.ćU:k먬ٕ51ʗ}W}ω +:&Ct:Ə(Mң, O(o{޴.7O-GHmV iir^%#9strlcݫȣRPf\??ʧNOGzfI_ۋvomU~:8ѯeUuvm@VVU?]խ N ɾ=lq}bm]cB֗9~}~NF>KMgj^_5U!+=0%.췔[n)͵ópY S|uonVrZ\hDm͍vl=gha P>j=AZpotR(ܓ 9-k/ ڧȣXK+s߾X>sob޸|ɋ :Mnڣ @y̏1pW+aj12ob6PIɋ57U,~$^sp+&Mp>lFi-_$ h{lV{#{fx_vnekw΁04||Dc)zFë/jx{J=8l)Gg#aQLX e,M~'h[^ `iϲ@h{ 6`}~I?Y /ֆosy r{;x97iՏLK: + $ޫ I[OnS 6y=g$қ /8cYdIe-RX360Gσ.7_6(ϡ)5ce`{mV̸M:~Ⲡ<}4g|k-=#o..|ޅP{DTxo$I'JJ?+Bpץ~[&3 x=^JC 2j!\$3N/T>:*'sI 4^q9j d=ݿtGu &&vz kT}[μ(&:5AlnAܠ"[^&yƖS^_;JKJX|.oa=_ _N3ۚ9SVa6-3f`R<\*sdAϩۼ? Hté'AwzUPw* N!q`SB r9?=dL7sp, KJw'˦> fIK1}O~["_X0c5l} CX{ʌ[ZHI:*09o}ّ/m>fG49~w[JlO_5`&v8\?;J$GPG{ARb?{ ~|T^h\ymf)TgU!q;z-qppX~cn710XM@QۭOsձxR#x%Gۓ}~ʻ|홦Ӱh cmdo̷Ѫb2 gT}ޕJKș5)?6WɫOs`a[(6^K0"{IW~}.IV]W|mpuq9߿zh޻T022* eR|dL!TH)~Ջ羯ysMԼQf:OuK6dդ-%ß_~yzH<0x,O\ )ƫiӠyɵ׶;]߁䥉DQcn8`s T_zCϸwc LdGEik׆WWx/੎J}Lj:WP?h tШ{xS>O?HQ[s1^k^b ~gbmVn+G~1#3o[h{z?>,n{A?>M]7fSz6q*p ^u[(5rZj Nf#SyWK9=~sDGt*G* #M@q'd|fA8XU5{w|uX\uJ@|vUyd6Hع(ikccgdqAlf'5(?|dwuFt?4Õi?hpZwm/>C^bLw`-$0RdAghuW/ Jl.&}KѪ6k ǝe@3A1Sb~ E8Rz9&KOиv۫:\{hP̿GY6ؗ'n ^5ΑiNqnT`]zJgb?M ;| m[mF FSW^;M{~a5Opc{R~*ᖈqF8Af55coY+P~<>2 hXc$R?9P TLT=O}@sRy-ʍSO.Nt=ʫ֎56\5/-&Cg w?JЌ3 kw3"{(~cU{ AV+:5iS^2)hJ)JP-ӾYqaE-l r  LwȈV+.x;&Qa[/`\ s>=..xH)Ӡr*Q SZ[+An}潃āi=p'i=|M`dY7(_zUG/ˌ{]; 0#m壯R xߤU t^&?jV;VOJ^MAn`0p'4결iM 5慄d@aP S%_O/(]yGɢpNzV\ڴPH +>ok[ $H+VjqC^(8lO@2>Z,#gJr/`U/޿$H/ٳ=%fkᚃ={6(^Zv_Nhl{ƏN=zFv `_1NH*Y05d}Z @#K4mm=2ɤyƌ %>7w)v8-vy7hMOe\xP.}{X([9ZDXe.]XһX4ę`$~O_O gi=l}!0 -ɫR:r*J\pNw෤I:} *>0b_pvP ۟Ƈ@]kiR9̾<?bSoƅn*zcrBM4X֩I@8^'0=nMtFJϋ{X&#;<'oכNsASZmޢ?{`J*U-́>x@~ѐm*QsC4da V{nU ~4ΧKʠ{(/8`!ʧ}g-tf hJ[OچekA+e_MFOǃ0$+T -P};Aɑwhyg*o.sM;CPs[ ݻG lauy:vY-9 ՠ}@sٕv8<ժŠn=$xMzAx(#q60ҮMwJ˨CG 07Ty9Šir1׾} t@fOПml q {:sTC;r x9kޞN[M ,U'wϟuT#*sɨkc (V{D,4MAO arRg,/ k@Ӝ޵h٭YJ@_TRkHhFtLo ۹CɯUJ طOjzB7 +[o~XOPvkJx UV#pP{u+F4l¦'^ό'1\`ⱖKe _.^o7h,32)Թ+͢^Bj2B^߀96\?{h`Ȝ}&p7p;(|:`h|mwY4toy* 7+l'|OW.eZَOe@cHȟ̽,^:`snTOsǃ; @liK6ڈ_\ Z* *{^e8{Eemʔ߾2!W-Ml Ǯz  Kt]\+k!jh9}PؽsFV#=qreA6*t{EƘpÊۭ eW̃5̀3xgIn-6SւU@t8`z5ߓxNeڏ?%nBq5!%=@A/)?6f޷YuZ ݿlu9$zӴ/=p l7XyE@~GǠ׿zCƎk)BrA"<("U^>g Y~JECz9x% G|.'7aac@_2~قʒO?om_HmlKowO `{uZ'S WU :Fo3ۿ"hRt1c4Fԉ;Y>/>|[^{k||b:LWgFd@Bk5$l;J| ̘lbWjMH4<<%4^O-6282 [ځ`wJ* 4XgxYf`2h:F/.N5UNEufȫ';m2<RƧy:!Ekt#uޅ $lNz ]6GA)gBg2oۃ ҧ9?AyYG=}?4K8~d2^~J?/\X/X5 +T'j P`sT‡g jKkݦ65DUsel5m wg =,8Bj&ɱMOgoֳN`}z +WZoY_ʁtTY+'kɻ ^d . @Գzdb]{W+!~*+u pIJIz T'+x.8#e+Ң8d& Vֺ6wFfI]b1%z7Kww%SdzP>M!`5d*/zAUXm~2 Է]8Xf /V~ܞ頩qܭ&(n=$h^;]oD ʊZA5ZoLS|>zJ!;vml|lgf >2G87z=ҭ}ȷ){$C|+x**S@}3 <9 9dҞR,0FyTv*MZX`m>uGq&{gsaN`P+kJ YSop5-2KKSFsNlyڍ[SHwcFO wr|ƞS|>=0] |f%g{eo_|n|¨4J6Bہn9z*9xA?C.5lz&0jS?Ú)k|73b6P;Csaj/ zδgENxg` 95?Wr`+ N݇K%*Jp%SLP}tn1!x^5%DECe>?U`Uh8biSu^00.]eowU(gS|>|8V䀱XOʭNQ̌ ;$T/ٽZq27&g?m9 ,0UGx(ؕMBE`nq +7L1}F+oMG?wrOTin~\WLk^rZ_kO~\$y?U~!#l}I*%] !lʮQQΝ=8fC*-rsR` o/_H&TPx4/sj* )?ȝ{'xxnλFr`s׷U͖ WMS},ܧt نpg96KKL\G邈 z `ِ50nN{@ԚN5m`x]pL[]}K(\ 0MZ`Ty$ٛ.A=A;7d-*gԱuae{H6396'jrӤgF`h E,_АJ;%Q%O7Dz.ts@{G亳\R>Wӹjc@c"cuGX3@sgG 4U>{PrG, J_URo5*Ɍܭ@wٙapʲWۀ06Ca7 L4T3u̓#{?FՋ-;H֗2#KA*ƘɃj/=լ^IǷkNr+b!| ddOx_Ek>;їw:) @`\(%?hlƼ5/@^7?tZ*H q^պ˷֌K׃Fލ+wtvyW߼4IT(4LsjWPb^5rr }4uZ>ﭓS~J1uLW|5~:/syKG~Ȩ-| Rs-I"ف#/{~ mX,O (yrY8oʼOkDJg<﮼p-aIQ1 |NƆjPڪq!,>+oNf7p% QgONr4ߗYAYA4ο _m :dw? xI{zK9Dݻ3:mI` Wm ?ɫx=8kc;wˆ#k%mrDkIz0m' 2iSx߁gv}6anXzQ~I] eiimicS|l Uv+j3e<K;vn ӸgpC(h>t :~Kr*<8{N/]Lo:rQGIK Q#U,3[\o^3O-+H6w<0o)},FZ/AuRڶvVPb7e~t?1}zy&@/[Q {8W=w3H=_|O_)J]\?JP3|忷,{0 oyӖXt ʀj߆ƁƴBpdK@)kTԀk,p#|:{*J4m4͇v~H}a>/t /MHv`ˀ͛1c4`3+cm׃N!%W8Ҝ}qON\1LVX㏉-YEj>H覺E }23U5A.^-hN\WX =v<[O?UjkSvjF|1" Q~N)ەwb~];uPqʉ_H_mR콺p?zWO_O|b`;q 3gkͩ.Oyp^;>Pzttxh=x# O"POዅxNR`!uN$O7azA -1ӥͫy%w8o1c@0q#J XBàGX.`*FNц7〷7=؋&؃uJw_˩d"pSQh!"K owcf b/}7&%[ ܄Y7H~bE1hs^.)һRT&ci^vPP`?;t"+w 4ޘwщ6>Bt=Oa*NدwKgwf3tȭw?ϦxjEXgsJ4(h2y:7Y>GͻSCnU2Gg\ϒE:㹎,~<Y\&z| ~L|ު3_-qmjⵏ`?#A`$PP8Eg՜[ ]XpvֵLbHW\5<@#ӏAOHRrfϯڀ]r^`)R{jIBf2{JߢbwA_}jU\Ya]v6Lb2 v9 U굦PT߯8>%x}q]|3-L-vxTW~-vC>O8˲! y,Ș3,c򁩶Tu}`!}_0y?K @^*7gt?k@_M$i!Bio:D^D7|1sk].Qt;9?ƃ|dofr>V̨ EռagK,R*?ݶh1ɐi3å xG!%w5Pt١%o'OP\%{nv'_.$il7yk:u*Y3i|я ^`oWs罸F*}%3fVv Rj U' nʤ~yuYn}Zw|L}c]I[QE_jހ"=tԏQ7L s'VjOʹc+!{;~2'~U򪀣tp3 cz=G_Vy[ {[cC8TLǂ;xb fȂdK;=1{U/~=6n,pAڼ-|הD`W3OTV$1 .n^>OQ»mf Q\f{4Θtl% Q߭OPbYu`iltpLoj0jmƍCwAPbl x9S'{n|x}8Wzٻ~?CbN瀛pﳀs>\F ج7e?@hP qEۛܵ JNA_jl3*[38^,8,kV+mzc1s7~=p[f][ rNJ߾#FdFh`UJJO6 ̽ 8gdp[˗]ʲ٪od͒I {f>I;ڽP T@= 84ny,ߗl]sb(~[{p Q1h^ gQa,=$ lo JOY-wUA}^*o\ ʃǑE"b깠l2#o~O*>YѣV>r0L7Łb=T>-R+]^mtwS 8& ,Rc;0foͺuA_ދOkB {~laOȳgfm EM+OtpaBQ`]y2Rvu,ג3ԭƷ, _#\0eY2/~A,ܻF2j4se`xig:Gn_z6+;k;_!-e1])#׵U5`p_(U4KcyS@4~;4N2ux^ ̮.Yi2 .̙0Yޓ2Xxn0 (- 69EjvQY!υ?bM}m}H%\o[,N/8XL` KOwIǍfg'3X6w:e`n6l;]+W}&[T-~/ ZƂk~k+q_o:yǭ?g\6u^CdV[.ը)#!{N|ϕ?Kө&e쵪`g=,tn>:#֓sɩ Usލoe.`^ѸTE D-:{ ,lFA;\cCerN;~+[sʂLѦf?&K wi[xA)Xw?u9ltHOۮ9KLr9`1Qg jgSWY%iy1 Au`Z}_ص0^PpLS0[;bqnn!`uj+0o5cǏ`t+7`kDG*.iBa{HYnQ0Kmz %o'gl}!]ju_ o(G:>|yYQ`{tenPY=dzXzۤ Nu,ĭmZCsۣ-Z+ꇯ d".ښV!F#Xm"r;_x{rO\oT'r>4~z"c>겳 >؆%:o%qm{jmIw@D'C&i)0Yi ?\f#H,] -3N ,_3Dˑ|<0qrF.n[uBVa X΍6鑳-~'@ABvἢt^f]붗]d/J`|#Ԩ vY'Fi,v*}R&PaN&FCkEaĵ$JG)@x/H_#Fp4zݟ(ƹ2]I/lJc_3 θ 5nm>ޟ7g ?"/meH#W$|xb<]E4G|&yv.؞ ؛ jO0ߺ`S"_h~}GO?'i $zvQ:Ut&HFa8x%I\'`&L7$G|`Iv'kQW/c'{G ׃|l?'2e wh9 8h9j5`m8Ś׾Hv+[qs<3?=?׏=Q텛v~"*Zݲsq,*4 #zN 6BuMڒ0ppbw01Wh }N;낥ZAg7˧Rz樕W$%#KI \wgQ fYq#%a3H|g}9찗m2'/i9/Zr%v=;9ĿC=W Y~ߧw10I'MuPGZ%L>gZ bܠe0S"ݽg~ӳNZԏ~oX{N ɔ-iFPMǵ`IwfrY0=3-CGn(oL:u&n($cbm[-8wzϑ8S[z%`;0?*wNi[6QJF9`ǠP[ _a6η^۔{ 0NFYJ^!atˤ\0gȿsJtbIISG|1F.;OIMֆ~!q>EAa{5x}r: ?`}u5^qJ?ucѭOQ"Z'2 6]Ok_&.)Ƈg؟`%`Wg\rXºemaAzqʴwL)s>uekx?|Mx}+!H_/h=d?(w'8{>-}7/}NAVOE_X"zc`=1_Dy9߄qH X7FGf2c+w_0xΤ'ЇE≎ Oޞ?eot5J[AHuxtob4E}yml%xw hߵ%I0bso<6N[4?]-ZEE#h] ;{<ܪ#C{8!B]Kg:i\EA݋D#L}( ~7xBΟ> \-~_C+_qzqu~!近^`/SdĽꫯrLǺ`* XμYF'+uOoR/D#eqs: Uow|yhBp6͇[o%]H L1֕p=NQ޵cxVQFInF#]z˿y> u,CxW<sqXA\b9:ѯ~Voe~({O~&qEx'z^nz.֥Qs?~W6 }:2W:HlL~XGdI8I5Ea^ck܇?F{AX\Qk!NۯUb'8lRl > l[P:6Z/%Y#׎s'RqPb/Cô%u`sG=L yw9Zq>uLԈaϏ'2gKP`wq#sž y z̹Ѹsx!Na|%k.7u_|A]uxE|E= Fy KFEhgp $IЪn2͂,8@Lg`?7l:U2.ğiE6wyHX@#:cRODXOB]?_B劦J|R?.@2t!` "<%Oԫ?yD4@}xd`/i<ەCMHsa>b~c yN;t %sdΒ=&} ɱ>L1gxumA3R?rj~}y\{&gy${Gq}[>h^$uZH?81t~8G޳N3G<8z]D:FH{dN\7o:E¼A:Acm_ ؏lM~Ot ,9/q.h^bm49WI`zi8%~ :Q`Ph3I)0>-t{6e?/q\ #q0IGk$@1p7A?\J [/׍cu qFt]aȹ}Dn8X&Xu "h~r@oC\}&qO׫WEbIu羰DhB}G~p.YY Kۭ=57z'羅}WA ϗnO?pSoAp.8σJ|֫$1oO#A2K }3r]z^̥'gE~ΑJ}$sz?z8/M|isL~м'r4NC|AIPtuޅx>.t$Z8cI"-:X69oZ7DOxՈ8Bύ}2| q Kw~O}BZ Ίe7d}8/Ht]%~O.(Iާ#$z:8u</QXϛI|C{Xj$~ Վ*{N|?y?~*ǡd!=khKy=D2GE|ߛ#qHD ⾳ЎXF;.]n'|ֳdW>>iuuS!^>ykV:'̯sXgs8cLGĶ Z(5H?2ǟ(T{F,wHҸX siyAGí;׉:/*J;a# {Wvαn=Hؕ7F#5b{IADzϖڽy.96"vM@2/ܓ]ׂGF@9u>;#z?-JtS7oc?XK@ԒJKYJFg22 1YeFudw_$Qw'GQgщ%梞Ԉ7U>QkAq~ąAbKm @fϩ93EPvXGwKEEX䧳vߕN%1VA sޞBّ4ȔfD1 ֟D}S"~w' ƃLȘq fYX$2%|ECo/tu?3Gfh(T # AZfF$dFEhQ"(U$ ZHG:8?=̈c-IZ[QdՀq Q|.> h8uG֭PZ|秺(\ֹn>J-\~I&u~OfO Q&ӁQm]ѡ|٨A WnTKܢ/`+\TWMX]y0:,U8 ̗eن^#2s?Y#eӵ B[3Q6`Ma"xoH=;؉*d*', GCdXƈR(g:UhF#poHnvn:ˑZKԒ4&$j yli? U|mw+jF*$抖cp^?, uH_GIT#Aĺ(7Xvo7G>5BӀ&^½On ΧmKw/FaRGmٱV'YS73%u2*l<ؿt߅ { ZR52IJcq\ ;CѨ0=6hg8N9VHד֡{Cp"j0^yJ5%2Al_ E)u s~ p@8ge &*΂Xvg̗kn"fJԡtlo(J- o* s0J@6K3V7薤qP +ưH>F_3N̅=0іߤ$o&K̮MFܪ-~@Wv!L~xy'.=qTka+I/'}5*Y!20w/>psi.??)XiBɶO3}j˱=H2ݥy*I-'/?2<~lgK%9$05(;fe7 vo1QŵkTjRA!դG ;;NmE wW8Or+Fļr/;WIo=w8v܎&T|R ܴʧ_ct ^ǀXΈՊ@([DJ)ό@Jo10nO\ަ``ZJ,@5c i\UvD,OAɛ׃"isKH)l;[l1P1Q,*@WLۨ3p`,UbɌ;HQ2' g/Si+KQhoxw,obfVn?7^4+iǁ搓q 7: J T<8\?GR`(( e.@ ~$ze&>ǧ}0պr1^x*\D&DbaȾ(q8s@%ͽu=_4NYf_dݦpWm:G%)CM [@gvV ilJɊ߯0mPbmVU Y#{R#k+&|s<~6dZ RD=pZ5F^ -]wDBR &.]\=‘ҡ@syQMUf8,,X QP`IԵv@s&|UE()TJ %"ۖ);J /;Ӣ4c+|nt0S6KEghŹ#n(׷m ˤWۉ\]%%Nqvޥf_k3qb97z3Zq.L{&aM@WwKt~}.ʮFI}rV5xf]/ a>dbX3aJbg[H|T+RO'rX)fP5kYxV`U:a񯯁#%-eIz(}7tƣ{C ;XM஺JO1BL.+@oD7RUu.QxPMÁpz&ZOK%R=>ʇ RRUK~MpLaO9\ˈ1>|[2׻ s;p]pr%F+nqI7]y)zgO4=!(K\rD߭y去 :o.ԇwE!=7NXʠԪ='/F7rΡĜާdM>!w%!se ! pmsT8s[71Ď!$;szj`my g NUEz:0O/ڿy=ҁ%wssh܆ҏ&.w6|3ARUϣ kH5^Ci ~VV`\M-ՔH0V2n#0}(I.dx/ "Ѯ§nm-Aۇ|HxNcc)#~ar6%.)?ּ"p{\?R oּd[^93I/7/CyE&5Oԑ?>gosu=zMU=3/+L!YL8ѫ[kYjmE jc. 86[6^>BRp.ّ(rRN/Er-ܹ`eT 7T/[NܳڗG,$لXڙ_/sG$jӝ)ez U3m>\e֛o}i% H? R^4܆O+лpς?(\f22R>֎Oou'w-/*NCEJ̒f{u:qd q{TJEJW3 uk l"~ue`'ш7. g/+UJGRH㋇7K}6DM/+!td5^39 L2e eKi(in"KNf{QSVYpnXy3eO zﹰ >G# 8'8c޶Pk/w+K5"t?<8 \ϼBPko@Ͱu߀ʹ6/X>C .(4"a-`&{ ]O\Qy3e-$3ަ#9tD>jMSIȒ@[s~%1D$*S|o`Oحqw0z? e /13Ke+4E7KNd&}G5|>NA:wL?F@?]G w}_%>qo87,m$EgC^e^8ďW.{F.!R[۸[Wm__k:l#IX)AdrEms4k=LtLPָv>*#m|_ Pb#Q* >ǙׂhJkk~58ىTb9ޘMwFUڪ#Hp9s6pK ٕyJ )k@s8Nvu BD RNvEމ9H{x)UՐڝ1ߨ(pm~J$0*[:]郯G[@Zv`<͞XAy`!uk \"4W~ ~~w$XhH!E9$K;ݧtK)1ooy~Ǣ`sВ'n& ؅2؞+̑rCtet70=mCRh0o05>BꛓI^ y A7+rVW"Co-v푹G;Kd \~*|V$ko(-advcgC*èBYҽʬ0f*]rn9sJuۀ㽧8sL[O*)s3}审U>dɭ{*dno _>}pUgH?6tح夞Q 3tl]KRU>Cњ#0o~@uWMiHl޴&_)oz\{”Cҩ;<9˚:q0Jəi{eO܀q,PHjk;}/?YisIǻ B 7<y< V3@@V5ЩEJnWK~քO dSwm ^C}ehs?/d7|gdt* <{- q'Pj⸻(YDʕ^^W(kt2یQ>{:uE}<.z2-;jîOFSU .IQHڹ7ԗw(9BB.޻ޞ {&^g%׬JWF X\uj,}Hޣ5DQǧUPF: 5F,>D*05{߹0}mҒ$ph3FG,a|0~j(<RU!9.Kq88tXGj?+ACo@;|6s+fqH.?PԸ}alV 0t8gtʐߒլ% z0=wd wI:2H)=Jz_@7 |;{>ҥJڀ֠Gb`;gSZq(FCI=i9m C}lޗC Ỳi5_ kե.30v]wD3#>2nz' w jl%WdS |d`k' PI`ve$tp?e:l<?떡dV Q/Ͻ R~5s ŹZ}e'RoO?94K:|5$2jA9ڞEo`olBASeJ]F '&ms;w%yxZ@lU_ 3@Z16jwT̓nMsW$IնOPS'P2EwC.ydW|"|ULZHm~ƒe=\@,=%:J#)ns;k;?$R)q{hNtyo=0޴ xJr7# 9@[[6<{-0.ԫM $<ݾJosϻRFUHޜ3p6*4ZHۙ*aj[<)6E @/0v(Rv 5H0^ #a|k ;Q=۴[QRuNuO\̲7S)wOܮl%#ߐ"w*ݵ|" /| p]6683nEߩ)Vܮbr$}Y9:L\9sK2A'j?Rw,S {6` TxdE E cDۭnگ?N>5Cg>҇@'ĹO__wpf&jdT%UeZ\P2#]#p3PWlԵ)󡈫p+XRww=.~}g#w W9(!<)ºm&~*@#޽7#(Au_}A eS}3cyXu[m#wcbs:j$\QɢmMgnP~;c},* ˺eV Tkܵ8&? M4dMws[G4K__ނbWoQ]RMHWs7W?W1*`pH#dWPЂI, |#NkDJ' zAhٳ Y [bTϛ0@JWtY x6U5@ľXE6 xͶ^ԏ¾X"fN'7OqRÞ5pazUK_X6d3i?.GWv(v%~v8}D%cP]Q΅ ځ6X簬4?.]]kq~ 0/=3!wpyu#`Sv "e$|GjdWJ,NgRz]x"?:QŸNf=&Dz _c$SO%f؋+=}2CO_& sZ{~OxHBRv~v %?.RX>\u0"~vx*W"h$i|ʊ"xSkQ7s Xe=$'E`]iGɒOn#?ec]$o 682NokiyApy\צ"Kȹ@۰ٖrTW)ev[݀|nBO$8/sm9@sɯj |KS^,\(@ܙ*` عV!%c^ Tb6bتs<3`[VB*^Vؾ]+@{% v_jŇmQzS-)~IT;o/w!y2Gu2hH1WRM!#`,pZ ~oEr {+05azյpD|R%Lگi 3o W^1ۄ&C(񺕲mw@:jsɎIoS7H܇-ƐO!{HϿz'|㫚@peȪ\%!.3g-=̒Do>W`D4;tʀ|ո-ɑ-`ڃ*JIuΨt$+t+mu{p$˭T{<6lU(k|onYpu00Rx[cmVFU fwTc`V RdsNq65W_oU5mъ].) < kTMTi )^z IEL˵/Pxi3nnsڱfrGv㢍z~ݫ}~JR/C R,3!?`7^TlKY 7+> sj7Qw(ݚ<~po2A\d=<;Rجv( v}BuV iwSPRz29R(qA [g/|1$(x ]dM'Ux!35—(5½ɾ'O߻3zo7=1?4!}|uw;(pɐ Rs~+3nkJʽj)*,GKcs;=o}3`h |G`=$x3CO]$^-u\Y!V*K|SSK4ꑲqdd!kBQn:X9Kq_Z)/ޞ囎``1$g@սhq 7~\Vt+N/?}2ݓ Bۭ߯/}p8_P"(H'U)Υi>@, 4s 'H H6 Pez\Y@˶|w 9)-=Q`A zI v,pjv="%N?J&v(WI+#ϪrKnMę,sіOzXFs:98劔 )S*HLd"aߊ9WbȫqZ~M96Xy˃z^GpVB);ꢀ- ~s:aѓ_2qP 8U{!i/(y%\Lm$S{6´C7#5 I:`.f|t;ƜX7{Jn-օ͵Ꞻ&NV6%̈́D.˞~UAtw#8RmnE?7E"{)HyO`H"fV{L%0֓- \49q&W s*;>AώkX= $JCas5jaYo%ΗUk;ӼOlN:6R.K)dNCMOgFg *Գ> +uߚEm6uLO>[DZwnJ+9-G=_2pFq֊ p1FpRJ@7n;[rG&S'ZrK8$_Ê:nڻ q-r{ި|ܚNq8o_s4QIc s:". Xx` S?>ˡD⇟fCỷ=PTW^wK?V`r+^uJxho2v|lzl~"Q2 JlZ7Da T8p:G6\1׃Wo,Ai :o+Cm.?6rO+yetF\0|38e `;.}71xG ô2}mTinmu\y\zz 8 Ֆ+}N0p bVY0S(`#r&Aw(wsa^0"T,T"ц`Dl)͚Bϛ}q/[Y,d)ZX tֺ/(B VLD}QUWH+Ľ1 v]wwLSR7n:MWo.\>u\OX2{u@S|o9TWr\E[ܖ>OમEH @'y銷wq'.q%$/k7_תmD@~w RĜfK~`]Zs" h#FH9Ek^Qz!I`ҏCyڴzGTB[waڎLs b[b4w'c8i%R-Ģ@{ZyMRV"TMG5Rpx-!6? BP+]P4/R~ɾ= Œsfh='7Whv&$Yk Җ?QFneDQ'kwٿ}PRnmJjbv>Ђ{+EJoۈ-# 1a}@o Xq>9HSצ [3 Rt@.ɣof2K"VRv\ _xO-&-or=m32B(g4"FďN[/}?RRz>f槞ˇg68ـρgs/߻a8qPtM4  *2~g}'YSRF$DNrٲbM{ß2E:H)/ h @rUA<8w/}tZ-̥jzfXwP2bD52esB[* JO0]~Ĕ)/4nw/EY̒h Ƥc#nJ?E2ϔi˒po2Nf{uRaH6݂nôck_TTݐ*kF1xpg{[fZA_wyi9}59Ci>noNɩR:r$2ցG7x`z~jR Nẉ;XJzt&}kLӭ,@st6=b 嶝\y0:Ջ*,OKIPn֑no`K4st اC4Q0r=OM;3YKAa(ۨ㌊_=^g2Ja:Otw&J;h,ޒHGZ#{^ ?ƅ6J}SH1 ՛LE(?y=|1_xg3(SZ%O|ތى6H8mU}_KSwJƄdN?M۔ZϹ`KNw]j}_M[q,%2kvLy|ܗVJS >C"|! /Yeg\uMGVH ӹmn2٭vV{P-$ @n,`ՙS؏Ǖ%=w1UBc\R,$qs̾JYy}CUxxRc؋D,L=Ե;={b2LJ/|OXxRmgm*X-;11}oӳ<t>o,ynU[qCVX|Rz57j-\imw ܅!!x˒_ Mo01{~qV^ES>IZ܍W mR0@?juQxnAmxe4:\_^(9^D`gR f?Q,{'%:|=n/gxY,WD(~Ŵ,[gcF.|?|9#;Z{3#~ cƫJ^*#vXؼO}SLKEG'0hr1'ws 4]χSϾ!6׹F~Lzϲ^|20´ y}k1hat4oR]Gt=£{X921^2>-=rP,)\kϭXLUcœ\N"Vt.0<7 9g1ʦxA]s:2٘q7];3L 0G7G%<}rϲïHEaڱ)Ayo Oi>.2 G +d|10r'\pvg^%/OI9Oo p= wn:tB} 3[7,P>yէ0w1w̻'XT>[e1gp3#gc8b6Ke+5[9 :[!Řaͮb+KWN;я'>XseӺ+ˏ Fϓs!]復sJ'l12ֿxt1>dVOXY2YiMA-!nj?I #Ͽ"9,-#rf~mL'GOLjd=X4lYorF)9V”/æTɻjxE(OdLVlhWNgV,s#V̡'c}0t#uX- /ts.ޚv1os :+Xy㢴\H}=uo;^d tyA},\ } ;. D%d<)zJ/tn8.$Wc'縉Quovx1Ix%z喹ׂTcɹ*~I3N8SC^ITU6 fx.}|\dϤ5&kF\ʺg-9'g#Ѡq^\i^yinv7C%;>rE̲K&g A?BM SChkn O^z=DMԩjj<^M3{'Zo{r>v'sW"wYE ÷JO4m [-.3 +@+V V&}Ln Fz1yx s<5]n#7ׂژgg{l"d֟op SOjf+ oJkE~{z{RV+⽌27pfrΨI\|n"Cv1OYJ~OzHjXBhyz;6TnW,BL/@3썹oktEqv86_\oA!UA,+bGDT3zbᗻf4Ǚr)hiQ:.߾VK |.|9/ ClcD!}ۀĄ`o8(Z$Hܭs3ѰE6֚{kAq+MXf'p&jqD뤬~_@g#F,ѕ!ᯑYfuom[(j1f7"_Z\a5r" qcԦKg2* i!#NTؤ(y!+%EyA%#ɾ; z>G?eq$E #KHLqak|ݕpx-37W|F!!em-O"ugzȃeE@hf'rW~G*~c'A4{ФO$Jmdzq9+e/d !A[551ZtNn#ɻqDs\&Ѩ各 H2.3z3=fV AJYC0Bv.!]uI a*Z9uđ̯i8T`:soEbH#S:w{PgjNMk$7>LÎ#%%ZIFք)hl-89'.;0|L^um(^5{uNM h jJv{01.'r?y9y""y--LUXna~R pV %Jw6,HÈrnI^Ԛ2s[3|,!QuH0X[_E~`^0/Y&~D,2Eq٥e:` G^hGP#zpmk0rB_[S/b-bdtd 1J;A%43X[}!yAI\auq,smiǢݠ}Rh;ă/ViOM[ u%+ӱal58$5Q`Vݡjo~i񎀶Ejh;z'AsDž2Q߿Eїv]a?ʞFaN GO "++W%'TnM ?(B#)U@jBp\*3Qk Z/YHx41 MS;@g" oqdlirEDnػE+` NP[@ߘq&bsIw j毧@sYSJ[ R9aw5<_wbBQp9ir x*vu:-"1]PܥqCs-j]to?ZTeW>nɴ>Zʐ~H,]|'oJzSL!r{r?.nmn׮Dxo<| cz[89?_?M' ioJh|ߴxe $13WlRVpʡMv"oՄu( aYmzgQ-K(h_DHAN`ƫm.:Tlv9my8(̸yJpE"<3p.5h!`5xKޒ$Dc >4>dXkZA~+nfё.DvvS)^+qc"!PŌvI#n?wl9 ɪZ 18F=ৈbnPUT4nHۡi'S_\xs?/ܱ@C/epĞ @?B/#>}ANs& +'k2ʿ hQne M=|*X{6ݲGau( E=xGāY)džZč[L7$z M/͙6;c9^hv)_ӱH=e0cc?#0Gn4ZaGԮE=YiNJ#M8 xk mNIGL$N' 9^@Uvn2`2gc&T@(m^+q8ɥ@l%dGM]}w"S;6sҐh~yL瑛c QMىOm:c.mǻ{-7I@vʛIx*LS+e9nFxs(T0ې~rmA?:py鞳S[l'X 7KcHl>BcMv>oτ?Eym)*x=e1; n֙{~!;A}`YY5>#J7F\@$h}Z&!ᴌʼnVǜw`θ3i_{rƎ☗y]^x ,[Kor[:/7aj6;D.?{0qɃO5Ѫ_s^$ЄM'c6\DPF"? )?*N9-!A`<^7hՉ|8{SٻLx]iyD'x>Zf99Yz`6d ݻc|/{1mJ˚r9lmk. c2#]ܪdmF^OHgSHjYls*29*$=Ju2Z2?"f.cU3!sbH!\2W}Sʆ˖8179A'P7X,d4ޟirp_x q`lbJUGW{8T.CH!kN ] [/ŀ/"z;S v HIڙP.ߪ>O" [ynk?Ŝ@f"~¾U =e]1 =ݩވ8koS(ryz)/ݨAዉK9J{,'?Dk1D({䭤tKI^ni|uduBo5A|-JSŇMc`hŒW/PSw>=¤ ?A6:g=ǯ(Y S'qA#Ly#T3囿p#8=t̽/ߦu  ~O/|w^${jMGRR _[5 MkVzBRNwlDY y}TR=cV>IJoy<܊ ^:S`ԜaW؎*[~R`ff 2\imëk>A]n?XQ-f`;}!HcPJe#Ɣ@'se%|ՓG ?SPҋʧ%b!+_͠_ 0+g/1E0s?y2fSh~^#C9P;EmRKM3F t!XM,sKmg@y+ m_V lK+܅8 'Q ?Bd"z]Wm.Q!&7W$C gMΗ~"=A׮$(}q]ܾD.ڵ~2g,G?Zr\:Tm7*{Fv:גR1ة&oḀ-i_%_>X UQȬi_9D~4vh]P)_߷}@|63uZCfH4:n5U5k׃Z6`pR _i2F/.0VLV 2* G#WXxO"/8m׶Cfc9mEOzBЯm,bf YK/>vG>;(~$/ yýշ&;) 47uPq(- )P-DpM q o5eqŧ;R5d?}t+w6Dbĝ )A9l7R%w-?+۽p]߾c{Jn4 tn? >\o6OyGù1_< zbۚs@}r3" B@KP㑰#n$DSR+VS }|ud3#(w| >n]}{3ʢ2$}{o]nRTAp Ak.k[{h\DQ Wq$(nN>];JF7+v"0K,bĖ!zкM=,KEҞJnD+z _9MAQ  ʓ8wP[;yh&e+~;U#KExs3)=is%P;ya=֓ )H[́N^Q`4'Vj3q6qm⒴=@bϒY!/})Wf-u(phxyu֑\4s^_d]nf_MW;s/ׁIҍfyH&n+cx%dD DȄz9P2{ Jv>(y{~;Tx~XxXD`*]f,O*z S;=|/? >YK[ ڪS p=7Z ̢=|eV ٳ.˦'I bzxwGHJ}H643Ԇ\c*.osoIU #zU< K;o]9sv7W^"1_mzP iW#o|yמHť14[U6;q]1:o^+ 9MùDx z{惴oՠr_muK.V:?d?1F*q1KW$#!Qtdǯf[͇@?$gpU~ ~/K&@]\981+D:!C*2(WvP"uWZ "s{dq%"&z9~g}+2>4Í3Hrڲ<첳(ޱ$վĽnf׼ >Ȟqd=4Pg%OףknS==KmR-L%ïqSoKDw>X+9wiRlC+ݮyd* êE>Tz~E,v >i)܉hʳH8aIJ38uW1MO>d_$]{BO69"ZeOP/'@[~l+~^4R^|L&EHOu@(.]}ypV]=G Y1?KC&WgH8fP132GPl+D7DWdϽPۡCo$v_6zL5?࠲IH52'"1?2ÉeO92.4%'ziy:jTSn}2d)Eygr:j QCzi&3r<өxjeKAU(XUG\u:俭[?,ݜwl{+"ˁѺJݹ{Xk8xK5F܏,ʍ(JwW'md|O{5 x=zC١J+ Y=j ۷E9O׮Sl9m7r8~lec *_ &&*<gIUO[^ed1P3oGFd3.WZK\qퟷ D }6Qpo"6?@aVvcxKw*`֯ڽIw_RRIp^z۟$Ҷx8KeR.yǁ|hȚ/Grӻð Ulᝠk#wܽ!g:[:/@ҮӚ5{ZQ2kg Em J~+]e(fպdzHNt|;X麣|4bT:Ғ]J JOs^! | FtMO*v+(U T_#=s7-}dz!~>޼!%O(\㍇OEH׭t'/&'}{o> j^s`{2>&2S%@[[T9)n| Ǣ:UTnMy\4!/\v^7oDL\ջ;z jn+<xmB\l#-lj/YB̯SeW@R3;̖@x?7V%Ozؿ 8 +(~7Z6Cl2Oz;kYnڝ‵0/Cfl{D4LJ 둇yu$9=B\K`ġL͞.EVϥh>i_ʲ Bǯfgݛ\TypCS(,]nu>UD]Bk"HQDL{_LC-b^ivo۟w_ʻ$Sd4 'X"gq/]P?]6(qAh[0r+nEkr* X?|5=H{7us Ϭ.=x`mJO(! ]( .Vօ73> aq +K9{cMΛHy3BCfF2تo{-gM!QBK]/)9 *W V5\l7! C~ρuv0jS|$Az5<&qc5o@z#kuFNIM֎. qtB3Xk U | lys*GOk4[yª7kV nFnH_Z>[<}XNOё7~\#? v~D} M#HXxqy@87$5vG~`43lmA^K/rz A#%7G==ُp!Kg~[{EO8Ʋ{Ǎ (EêW=~n JߑvFa Jdhg'9ȘD< tCmk8.X#d4c >>^>lxb8Z7bݔomk\cYe<^;Qfo5(sO|}LY?434G^j]q;_<_N3k'AGr}"yBy:*w_Rr2nmy aVG?+ <bX?QɻzEo/ oiO5㍫ZT gtJX,oFt7et.7VwD$J)r~ pa#^vH%T6ҳȖFھ!t:z;L«{ ZV 刱\y,|bވǵW_҇6oTpDZ-ioe+v)vxk KzsPYf6c=d6 !ro}@ĄgG"dR[)?4\b!i3͑Lq%J_?ųbQ #e % u͆i[(59̞zἴ w;y##rY0R{}圳aP'-KmLhFϬE1QSI C]Gz<.3~$pspQ_<8!؟Y:J՞{X Hhs6\}Z&DJ}jm"sl r܇3{v'-gyBM8Q+An]H'2,U|dM1A:= L+\DݺY{އxhe );xluCK}NY_/^3>սv#`Qz& +_鳃@+`vyZ A)ּ,)A|u{sO@yҟ#N:wZo7o +nŚÊ* ޭEȋNzD'_RFF㟝 o~0愲*>tł}@z׈ȹ wM@-)m ^YmXZ-7%k!]eVD\k&R [057ցٿFb\W-wρfZ ecJ`OB)ZN_xơ\7}Z>5zVcn!417Ej~!\sI!R76j6I!#m ^圻hYPee>7Gp+BW6N!AMzr~w:s.1Y9OKq8KϠD҄DzuDd}u#Si NH np,Q\^{t[@Ps\_?u bYDťm|ҺOh1 ?,S(/QmƴnL\yEEGO@lIuqes ?)a!+Ï|={"uV-/ !bw ACψzMc OӘ }@R|o( =/{A.v3Nhhހ[[F^wh98'ni*ɆE+'G>d]UĮ1oQˊ ]zHÅf;KWU{k?zmyMM'fQheNDtΖ_wo)I۪ݦBDv2AB 8NR:7sޝF{<#pJl36qf.8fǷ㴕~ S+8 H/;Ys>gǭN!w+9z˽ "\"Y"XGWK$Ӈn r\;YJ-\6,b 15{v숌QI$nyBUBV3b| }q+lu1$8#v!N}}8Uu,bZ Z%/~\}z>rX2O-yKc6OsA"u7=~խd?}Hn斌~)7-G̚p=<؊,p5YW8üeP^q4]rHb,jy˙7`RHRM+DF<$_U[JdGnp˿9p1g@@sOv-;DnBqm 胠N9_z|}5a+'#xiXO;!=N [L=u?&*OG@CB :p״p·ٷU@Y#?-cwh?ɈݰaKkYLj|coߠ;Ě1t0wNxoy y][Iӆ[i}?=KҋzKblHɲfD^xes)`[Bۥۭ3wq37_;fU[X2/7p6 ӊArm<RM(.1h9=G_y ^V߿2vm߳?Wm:߿|-tծ3b ޵G6Kp#IdPRNr=l=84y9G?)׃,.OPwz]gw;Xp9*./RLRxwߝzO'"4rYw)si_=DǻO4arXhie\𹭼G{!􇃗07eRTʐOM:5i٘3!:z}zEQY+j'{w'.t S1WMR>3;b*OL+3' ׾+`r,߽d OӉ gqnިrOƗ~wEZEVzf)n\xe~\_*__xkG+v Ś#taGG\?X̀ӆ 3b~B| _7GN'QGmpUݻ9s?"TPxT ΄ Ϛё'p;opw8e:!ɆGɶ}T}80L1D 'UĘ<" NS+CZs30k"5j7! gsNKxgsE |rpّv*fH5Q^;"7^[/"ψZ\oW"At "ӕE(7rd||̍E"h@7U_Sz#b <合"jX̃/@31 _v#:gDO|yf^k~ ӌJH/h Mu FV SeD+"A|(U %-.#&q sh o GYb7pӿV, VBH~Ϭd RQVO>1Q$HJ"}F>'=UD!IIEHF =q}]}"ĜCiⰨiriJZ5>^q$+4b{oIb/#OXZY =>+˾>}'K `[ɾ//я-҆AyH[͑wȟmTU߈"N/@^7y2N3L{D{b9lrȒiZCNԾ,n")CJQ}kgaoJpHmr=vէZuT{ˠf^ R,̙`hgM-oF+,ޒpNc ko6î!9H3NmZ]||=Vm< n+>v:\'o|Z 3Xа=BX-\t(4yC1a;0Yֿw3N"b w"o'1" {U8`-3BnnQD9|s)j[ [!qJDxw>獉Zgmu}WZo[5X4x-?W'[U G?_I,R] N|Zx H-}6޳}5 u.Y)mJѯnS /XbsnЕQς i1 .~=&YR?vWqИSs]|ph&OܷV |9*`F`aG*̳YOY3?[s֬Էapu*mbˈ3&/~n -Qu<] 5VVYyXxc[wj0ҩsG١ɫ^S!{NpZ6Բ NaLUR˅ n]eb&{}uR[u;W8?JU:͋va0=Kp !Ύ< 0]{_8g7;~{,ˆAЋW3<>ҭ 捘/p?3ҹ6 ;<}0{DZ~αJ1uXPܰ+qc`rFWj.M7/ 6O](KSKn mZ-^A ;r/.}cG/aҵ "=r=8 &Þ"$u7guePDuk2*D "w4SngL?DJiI{V}/-ݵ >bNmσN4~K\^ E-T8e: [i_a7a67itϮӮClO0׋u~{ΤntaբhUp |}ً}ጧgy=|l⃦?DXIԺv3t; ^jtE[x}0=xĿ:9}Q{r f|8ǻY QTk2_ه-8>~ E*?^iyςoX짱7n.n(?10=WbB5۞o9ӈ_.ͷ-Ht51)rL]n9JA$aP2oS w S[6t#g+FDk51VesuیF`פ;u? }fKsKBx͈zB4z0$ v(O|蔕`̟82\F 5Poapu9))w악FT`91 <Θ'apH:&<,5 [?&%i><3љo-9^^էNKwVF\O\I; 39Yڣkw"F)JP-8sLI[sVyŷf>Y/ fYu5+Ӷ/V Q\?Zpg]4`k4\2bg~}[o s"í{x~\q;$EOMcd+8繙ͯw?`zz`ʹald90-BH;=2xoH^X*R^c\]pxd 'mz޲(C[5 |XmG0?f>*Aw 8Ӻ?j@s˄`(éKD vak`[\28 k/O^O)d֮KNy.X,W]ׯWϼ:ld_.䂂OYҏ D֋ؓ9ޕm MoU-z sy.8SFG髑ue(#{ y ?C"2WZBgpRʮZnf  J;|s8 dkmBƠFl\iA|[ל|w|Vs_o "oZ0̘[G+nde=0ls7fs(r/-~ۚ7#'$cGv|vF|fS Ȝ;G38_BBze? =xo8 b`;U]ƖS9'vEK^kśnX [{cWSzdxŸJ}F :k[_!?&zٿ *LV8yB%cbҞеf1o`ԩ5Y)Jpo GѰ> w>J~5&A`O^,ɕ9nU]ixȄ#I0MM>#c|&? 2W>R TG3{)9{Jh} ΖR&)/.X ?ƿHՂS o*Z.kkk}֓SO 8AY;6P+V5Dওb?N%kf~ߥׁCrj4n0LD|UpL/_CֻNe-7WAܙ!-)6 z?~J|c,UNrCpqsk|ήW~`$,Jǿ\r!?6' 3%wBqX_$~ n{* |kL Gj0Vw(. v޸Gc>Maw:?_!N ~IJ-wnSK-˺paт?-Oɹוxa7^ x/0KMB4\OKjTDNkmD|/gpE@O#`խ^!6Sn%ѹ#p [/z :Gh]SFf/شN`ʒyj0:x_8 F{CA`)LeY1Ƕ5^}x ZXbѦ|/_;A1zTa=fzݺ9'X#QpT G™ྎ sVa~P5V6qr awq{Dm۷VBf$RuC'RZB-GxuP:jz#l2GMG?1z׾ytLxpg*S~w2z/èϿM]"uЉxע u*J`|>N/Unۍ(N`X>k*8z;>ƂCS]wyl]b/_ >%>&Ui\m:, K; #{I!xH<&[[/@gŰ6ax\X ᠺV$+Zλu  ~ـkX41֟Z~'gq-|N{򹻰(b86r*R|X_*46oN<AT?/bދrar{ƌv]v7 WDkT&,?u c|ӋRL1[ I9_C~J߆=tرbXi>?[8@gI)X 'ZLP?g)Q>J235E,oaa Ǟ"k#,ѣ3`]3jz2-Wq@=W#ZS nGHA4JPb~?򼹃c''wվ!'mNsa^!4|nf-զ`Wn\ZwkxΆװlz|hoTIźeо_/|_6w_]myԸa`ib_k 1+W\đeZ[B~J-4a>`|SS9- ҭ!`ޕm|?`eqn}]v͹0 ߭S_}a%Y4 $^wDxfMe! ֟o:;FjW8 h/3[ RT! v<fщM`wR˲@>n2UJ{EEhV;pvGl)zF:5A98/ٷ%;Te3Mz L~9 wqBM`]X-]mFݭпQ(!.5`tI'dAM%L_ȁm{z);TzweUHLX f{"7\@K5Lm|5Jg7 #l8=5ǒ`tA1w{ &o#$IJ!lL#&3#8Éò-n#0 FqK4:sdJK\w|H4ZJNl]I0xwcQz Yt!)Lk\,2V)@ò%=VpNQ(^}qG_S%l_6/%"ǯ2IG}Q¸'^/[t9ʯй?Vr}gk⻥!-yaIpeLqpP5EG n7oxT{ "tb~[+ _grǝ0,hmŰ_ 6Z+9uMaKI|Qi&¨Z_c%t R s~˟Up/ӸKw͆ƪڻA3/0OQ]~7!.D%Yw0xtU7iEߝ;8w1z13g!\V1@t>b OBbEo~[86-6SqG܃oo_QIR'i7ѳ©9`}8^Ś{hvR0 _Vlʿw=_"Wb沺ܹ=q_܃վMnp"Y:/yMֵ!k ƒ.N*yKKϋrﰛw5WZCL 5ن>)?ȝ;~$6^ުT?_> = W3:{l+S˞ɔZ82;br菭^ )N[vTϢ0鉋 -V~MḦ́OZv3 F]Z* J8, }W7;^)cTaaW;Fym \c;f /' Iw,sTx18O)'S)@<^h ٜ, Xf9mS2}T̈́sM~. S'd(k+p*2&GRWG^SOCC`>VU" xơ{u\0tfP02V7`7$I DM5S2rN ;Rao{~?G18*Ok_s,Qn{q)neN"|IR:,a-7GW4V̾}H J' P{:g۝gHBvXJoFf#RW4۬衍Њ3e5`mxxxtk=7U^:.m,XޞVv姴=eBǫ[UtOXQ0_H,?ϭڸ8 VѾB'do˞}cá^j¯#wqͅ 7;_=yqby*1~`"R(*yl"~3ӊkdlPaJRg2_Å`otO]Osɛm}l|靨 ÓXFjw0=WD{y[ؽ?Z ЉX/ 疬M SJj]޷!#kC@Ygj!,׉ҼqpX$<'|Svw l+.^t 75`!mI՗ *1cwײ9!럒6Fk,r.\Uz;G2n|߫F\kݞu%y'dWNNb [aUخA` S:[eRc .:p؅E?7*`Yv$ى`#U0pIxO~,m;1eA˫}Z,sF܅סrdK ,c$m8t NJi`+XY.my@=}b ;vm!rY1`T 'jF*|1!s^Gƭ4F܁$SA8VȅR8^"RS2x똉p2G)p*_ П翢өW]qIгj8u `I f}P~ؾ)8}_XΛ wNN像;ݺt4院.Lݾ{a_r,& )'d,뮑뤡_ģG+zՒr)Q{Ľl)|G&SuUlXc7`l6YӪ[;$q>S8.t CnW#v{ I.Rxܾ]"!k|{UL=遦>G\}S/DGY8*m.^3DXZdvŸ7%pzL*mw6zl`qp{ `wl9 7UiA0~JC]iĠ#ͅ ϙEmkuE+\f?fIR_Ə#pu kUq丯^XNݧ]Ff\5Ukw:سDlm1$׀m[6~t{^yݶp_<4hXhf+fѽ* Nt->h<}'yH&eЫpqN>HCEe;%6wX[|=U'vv(6ÆQ[isK.̒~D]J>{?IBu0,e__M#cn`g[zu8U[ =o-ܫ|Vo̽2#~̇uw8"L|JwS[*k.26٢3_u~`Jz ?ÚΤ;aiwGd+t,Ca!㡇g1< T]-Wy4o2Y,B_p~/&f;?Fmeo%]?CPu>\p0w9 ^ilu{DkLs#!`lZ(Ose2 Es ᣷Uϰz}Nq\&aև첮!b|pVdg]}u1H8u2v➣x1A5J7*g  t+om#aN ~K:LGeZe\ UQ<`Y*{/1As)e ýFLa'vn { ? ->Ita~lvqw-D拜5E8|W2LN]zjO(('Oݐ?~x2n*u?a>P]$+DLV(Z 6]§{8 z[cɃ5#4#23mJ v s\3Fn v] ,ީ2?Ǐ_Y܉C08Q88N(/S |%q|upv3\-Z*B+ʲ~Uߍu^71 6?;th4 o޶MBSDjte^)K_q?_ޙl\`|}kϡ>f0ݠkםrSîⷳӽ>j΁ʏ|}lO K:7k4^Н`申B!*D1}raoz QZN^|vq;O8ʵjRIVZ燵&I@=~`:gkh]zC(oOvl l[O낑><k&8 s%!/Z\}v/f*. !|1vNk1A~}Rз:Wͨw Rx{&Lrg4EW6@?]@6 o_E9&I$Xuo~{4O /HƢ:ףa[Sm%FmnMЦ])Ry8NO'|V} , {Uad))X i؛%`٦xg{̏3ۃ])늡#4}"0jY zXWT=ت dc-?cܬݤ]*?ziS ^ii<<aya:8ST?ZOjvS3^8O7g9c`|bڢ?`t xMaÙ['j ?:÷ol/Kh~b+6{.j=~9qvxzkkUfÖ_a(FE U=Hd%/{,Z'ul̡2|S*(NsԈCK)gC{㵺ZImO \cO[b9ȸ" +_ݾCUI0nc|Rf, Sw 3Dpe?'%+-ц5)~*,S2ˀ+4|spgl̞⏮n<~kϢհ۶h̘8q|/' -Tsϋ($V!8'Pװ}YW)'Y r2o6!8q{v{":%;g;."z-lŏ;C:7Z3605-|?m~NIJ#:Ӭ Ϊ BG_ւZȣ0~-riEYe_>짍YQU῵~y;x2މ_7bfA?}fҟݰ)o֘o;TO;+f [m'l0]3B7e͇4YVN7bZvnTJ}bqfs +8847AoyŢ^6lD_Lc`vKS^HmlLB;t{^ UykY6;[ wΧ83/N/qSO@Gf&k(=n|C͓Cܞ3y:P 79}״U _V)vfݾt8h?84ek ECc ǞVmMe p{ؔVe_bӋ2eQܵ`&z8ʞ}שׁKDqLlhϙQ*rosmǛCKnAYw0T*]7Wu-Zoz:"flTC{WFƬVO`PUGF`л(ۅ7p _{͈a'2~≤)-DJȶs'g"jj Os03ܱǬ8!j1H0)1d9 _ub++O_Ϟ;o*Q+/ ڳxY;nJGkņ8$Dm`qupj_u:LnW~;>E~{jxEϤa41qm0驻Oͭ,9doT~;OZ7I-_tO/ Z0HܪQ-÷_!٧P>=n2y特[(ȧh?MO2ftȌE -w=/Բ$7-罔 @"ʻ:lZ-ŵ(Dpx(M%Q@)նd%WMorlƎʜjs]p\q=F$-JP:{:b/]~Gxn] @㚉ڪit&&L鼽C02rҪD>ƪ󍫮]1SfNJ@ Sά:I\*2Yɚ{a,R?d]F@j*vFǗ*bP9|:_myxI=\&֋9{)xiOp~ "ὈsT9?plj=[C!`>-N4NOg8C_1)~rx _9/C(gگe"w@ȣ;϶ ΰvgg yZusrEo54>FT>x/(Ht)t΂/t~<ķTtuCBeRRq]o ѸD⨞ 4̲#bJgV`4t~"!zR9rR) pt\p,^21z3s ]ODG"u|r-i"!Nt )߫w0k̓JG}ޓFV*&uNAϢPnqO,?FkX{#d|ċcE]o > Qm4[U'a+CiGpw/_!vmE]_ GT3یs˾i y$~0Xi"tG.Hh.L u4q1D +[y%єOY=_&Ϊp;GU*m)egJ]O~fĜ HPa}_LI3՟JO&? kYO{] ^~R4h3(>E'Y8ź$D׈ Kto!J\'D>dRťƼ<nطǓ<ߓtZ@FuF6x8'z<[<_;u>Uܛ~-ƓܓZ!ăD '}qy]^A|3of|A|⅓o\3\~7cy;ئw#},7iޡķ}S$3 {v .xB!/CZ{!Gqϩ[XTm $$Lt-El ׯ \Bj lԗOE !}i/D"O7h+H?e>OQʙC$-'oJ||KjD! ?]:܌~xٷp_}D1G+WVH{;ߟ6?):-7?Cu<͠A<#u >G^h+]2h |CCH£w%&_@,oEw:%}ɹ^ Ҿ*ʎJ<33 ţs, ~0_<=o7ruqߑT{Q|8#~?c盛@t*KyHF= :'`eÖ' :C֋/~G!Ei,и"OۉBM~ӡ( rxuKp7Zgi 7H#OI ')v}(χ얢 )V63čR&2 *3Di^̏o'# I٣ a'x=!x<? I|zSSAǁ.<^" '"%m /)|orkJ"٭iH'Y ECzEC5kQ}*i_x3QY}w~2 Es:!LOxo<"݄o .y^@ݹi:|I7ZM#[uw2O%x&*_'DOnyKB'sg}W|¦' q?FQ܏Wyq!svGį'Ctd_2$!YvLCq:D"|r"nI<"&S0کE dH;+2 s[C >sy5駈#},ҏF-އF.w$$/y ln!Mt6mtC5w|kn ɜ:UB|/ty8AS/Jh |Oa#ůiJ| Y|zݏ9RGK ||a:k/mX@TZ|je\| ^o%>)WFqv?Sx}S/|IB]F?WdENd; :%JIG'A)#qq٩:!O_F#'>%m7/xxᡴ 13G?yG$$&%4.xuy#d .sG2 s1Iވ&'B!y۟5/r£dN',Q=$e ?4z4&/97_y$/9<@ҺEtWѼpIH!yN$_4x륎ġNC♻ߜ"oGCH<%(_ R]C<-?^=@6?d~?Z|Eo=6O5Jgy>d}x$䜄}HJr޼w^HI>osI龆<''Dgd|w\?EFdT*R+uˎBFH읐 -{ih(I sNgS~}=|ι}9u>B_y2yyi.1Ig\ɟ?03' ap_>Fgz3rq@}uʞ;wo30n J'|ؤEwi_Ľ?+u~f?s4aCy*9aGI#r/߃zqw;IgOkLOeχ}}1 uP`sx>a Rȓ y<'r." 9k`q ϗCzR{O^@}?|)u1__QI#y KF+&s9I:yr} @xǐ` 'e\'x!4CkK s#~"B '.S~|`_sp .ĸ!` "yJԟWQ'|yF_!Oz&?g 7QOK99|r~=< -OI#cG{#` n#"a^c &J/?sNA!n0y=~瀈gw3g/Pwa_MփyyB@;ay|׏|&xh{C#ncy k)ȳ_x.^|;WI`oوd~#DO0uz8sxF0~z |ku|I|Ka|$ =k8' .}݃ǽyy}`#[`sPc?)XxyC>#0B>!9?ӯB\>׋u&y.-~b##*<_☾"M+jhC^~;c`;gb`^O?/d| 9G{|nSyUp9/cs>?DZ{}%v7n5KKa<1KeOx?k<-꘣@uyiX ϓx0'ÜCFSxwaE1 _0qF}NLޡ%ܒA\8&>Ow>W#.f}/|nccx_ +}|g"~ďOG 2:__d.hM{O<?uBF87ׇxHޫlED7K=A|?>LyTEcpz0y_w_үf! sTL]k9L3Oew'sNyu..xۗ =|8͙Ǿz0ïȟ==U>胑<ë6wb^ex;GgY8^ѱ^3y7?IMOrk/-z94ׇ7x~dq3N[xy&.q?hLVOxᗵ^f>T$o{ a|}=?y%y?qهT=~ 2wJGlNZL&c\yT/mXQf$f*W*jTTJ*#)͔TL+'Kg"V]8^qޥ5.6R>By ߡdoRKQyjE sA;čz}p}*A>9Po "gPUNפR] YQ)+x|Rg{%aשi/Lޤ"$^RV]o2TlԨ1jO-z9 9-,*ն8k\*ʓq)'ETNgpU`d3h iz*MHo*1̣TJJC*{U9$>?qEl"*d oKf{ţUQOf57)׏R7u|Kf #vn TٮˁQŝc_K,8T :2}NP W7NR#:Yi)?X|%*`X۩ ^gvK(Sq܇b >CV]B6;+KTb!`QTˈ抩)ZkI=P1Dp 8s|G*ξo|X<|&:TYͤ^QGF(ROu<_¥O_u"y>kY[kP%=BRC^f~*M0Im Q1?." ,U:\B]#J_~izt^O;*Us*p\7ԫ1[w~rwj*REoydhFOEYO/lאo4 I~`u9/iV˟TKwG,SͶ*lR nW d{+'xiSw'L^8y[l4CN29WH1sf<;z^ƽS;c`DTH>P5NqVR37Υ|o.q@'\owL~m*;[!Q9d9rҎ[{=n=R'wēҮ %RY[tV^?!5{z$1_netKD"DOu1Oy-P`gJ]T]x;F OsFé=S '[J9/-9t)]my+*hhYH,I<RX/O%ug*&Sa~\ZIlTrAFcVfA\r]o5/[;g-$o=WP~vs_OyIv#|Xe۩=~ A~rYX Td킕$?0)x#.Yg] i% ֳ9/N<#x:xL85eH5\3yGBߗu,RNnMt >'s\F_>E~OlN1=fS<@8bO*OC1 u+E݂>D,f|GSۆM4jBR|wtWԗ'R A D2-6gK ƵOyy-Z "+Dգ3>Jv*T]&W@۪ 5)|n뜌gT[}UY⬯ӫ+b7#>!a+>-)rʗs[vg1H?kFRGO'QGzcy]-·,uz?Vht#}޵Jr"VըW&[GZiu  Q<ߟ@GCv>x:UuJ?>"AWCF#:ǔJ¶O QjuTD^Mxcn`YG/Ea N!bx5̍ }$(mHhZyj8y^\Lڳs{"G v|RL|ǿ|}z]uo߅[ܧ]C=8Jwxl:W(K;,Zx%%U5yce> Oc^\Ϗ}IB;`\`aU2WScX稏B>iEyԓ@녦ӱKZC Id@"5WIW>/MO43B^@+U vw]Pj`_uD_<^Թ|2&FԎj厗9A,٥Jp#3Wn0ȿˈ˸o?Bݎ ][ 6 u: u =Ʉp~)uVP?S 2$ n, ISo/Q%м219s7N@օq)\bey҂XD^ܧBHEohu w!=rW28Wb߂5wb>e" ou1.w>#NiH7սr)>I ّP c Ϡ>b_Eh /B<)jPr\͒wGH=A=J^|@mQb~&Sb;S?^r1M>1F.;Gܗ1ȔX ~#f;}lYw7Pabc:p[HEN|*{$r,{ݿVG~G=8D[]ԯk0x}?77/c~a=c:s}7ƓBO,ߣAݸx?77PWuq8:+' #ND>~|bb@ewgE~cQOs[[5Y\G=eO/Ty0CƠW3W_#x=]z; \oky%1Po Ψjr*:A/+gEnZgW9ht0̧wzFq̗9, ZH9%]ٺic"uC䃐mK{H'1p݅FVjom\HxGf<#χ"yrɨ Hsiu> u,!GsqؿA\b9cUŊvQ 9;I^sPL#:H0}K X8wIW-~'' QiM_a e]]T}@#碰q|z/s'?Rt|Qߕ.KD"\ qwtp<3~RydLxdxCCD2>uEiBrn}#ٸ.Kcߤ̉":`ɧa^!/?s7 N`qZ:OmQ`}E=c$35&qGG>s# :_Dxނ9.n.r6^$zM^Pנ>ž.++q_9i/_{O=FfWG?=Lg od6Q n ^F~f]ab`]c_q@/7¡q׉/Cq98P|d8u<)Q^Ey#gaSj ~̕GRe#yMPg!~saa) ':D݃C=E:-1/Gۏhߠ>9']}m;eOK?9H1#5=1 yot]3Ezw;H?ӗ-:yDnf8&Fߓ~0S.\/5SIO~C߆q<8a qP\/!> .`yW1~u͒yXIօ1wLjGOXߥ~o%&/'2>6̜ sc q>I 37x돼2:0]oM﹯k֡בĺĹ?qYFeTGs'^Knz9x|x0'ÜCF:` ?B<&|97X2/ǹ%H+qI>W#.f}/|nccx_yO#3YWk.YD}X//O|ZEP->9ĻȩQuu<߈go/Wq!~UBb7/:xc穨aɨ7PXد@=qb @>F_ab3%)kXb\OdkE݁ݵAq } rރG3αP/ǾsM[EyŸ/Uun?F w\]lc snl/ujH>>#bߞM.?x _?M?#qҌ&71??1^Xp/wf ~!VƟܑ7l ׋cftpb1/N998g e};A>'7)) xӯo7΋J IAզd'kU Xu؈T`){ JG.9MZAPmJַѩ7vmM (\`;W$4<`0]V%nHN9%^[vT7_!H>pf9IQkz\l`hV#'( ;™wd4BW >hq;}Y~?v_.O͵3z󂽏ܡsvB$o Ask@"x()|2XoG47\o}$m[<ԮzԽoЩl/ n}0$`~% ` [Ar7Jܦ.΅/oX661wi+@v`߷[ U vln"pPV>A|Ϛ!_.py >J"jw`DkcF^ΒO ||չl_C<_Q 4a–TU]Ap󌌼AHt6Vo)2y[ȝݡwћ$ej5[? ʁbgsaCokM5iea8 _B+~^%н[j M} ]M4̴MS ݗufυHW]2t t<,l88HD`_:ת`_e:q?[xeJǹ~}/ X4n-LG@GhgzNvm'-x"5Hy|Rvo^偞 \y"˩xێsA̎$/%2_oW@և}>& IrFlp,D*}ެG ;@xR,ļ]6rx2pO-2M>z/X5I;||A@gM[.֝ԅ^Mr 8i+}5eD2>61x/Uh 8*nA2V9}xlQ88 }}ɐTontqafOaAh1: TooB&t 5!Ru絝-aV X}/ͮ2pn.D'fB^4 ~Å-˥4>ۺ{y7_)t9`-Ay P9dz 8m]_|ס&.3[#~tπ,o[ |[T9<j {^ p J ^ʐ;'8𭿿6_J?J`fjfOןݘq#A2𡑐ƝjlA2q=~n\>=/vo;#^pt.12 6e@8H7p;Bu=sO {E⤋J6^i5С N^xk&go gqwrLT;pu%[h&LҪ Gw<ѥeApfj X1FJTx,'$Ӹ#‘GjH-N[ _޷oCtzqDqAथ)NjrAp 7 x5\Ue~ۘm8pl^kٙm~UV mA] cc'Mբ{>:/U _mэыs׻uX1Ξ{ y{??gjzmRVޟ/v .U6v2t=X]2 %Aq ~`.GSO+R!oZM\{9KV^Vq͛1'ܲ@`mS0+wNJ+Ar5eIV&S[uʩ/ԭe#d3ԏ@s"o[t>e;t'ͫi}:#W"ȯ'@ܢ5htڤNf)|B{mG{+=Ȥ`1 q_:܏TPvhu8m~EFt HK+:Ϯ}]t A7ܿ"Y $m).VdCkApi4.$ۖ8inw27{զ{mUoS= 7*7IAr{[svFuY@aJx=i.ķf߭aas7k,"N,s.=  WV=| dAoK4߆]|/ym~\#5|L/yf/9{C Gk>02b1tw714$3U|iV˶w6{C2h:[A7;rԗ `9n!|g[ґBaƭ1% \4h"]xs?e lW';N ֌r5VQ n~NmNOpAc\_ }:Bpڻ x.g]`vpYd BƧ_,v߭ShX(85C%~|C'T ;W"ŝG;`'Qz{Q~sC|?Ah-v 5Sdǫ*e>bc /mNUIno 4:}O^S/!wvFzUQohߡedǁ_k iֺ?qa[xP'K$EWh 4@-5ă?L8V#y/֋cl#~v1{6U|oyiNV>c??B Io5йϞB?`UWɢuۑgӾO~~3փz}dˣ@2_/0n?,%N̪Ii=Jj,J&ʃi]W|0Sϯ'&Z:$#N8 V'sZJ`Kwixk7.'ʳW]k.|,/*)g̹Bw4APd AkwP; 鸎nN#{,iN hS:&lwL89:qP+}]Nwy*U #wxšOUA uY27WBJꝰ{ē]Ri.ql"ú>,6^wrV ԱoC6-?xaʞΜ?rE@pňJ 9odVhQXxf[\w~Ђchުa͙Y4o\xvȧwfdxUN [//Z>8dჁ x=tk7E)Gk|; N/jϾ>%~r˾ _B>Wh 3$: ~Au@aRF nN|8M?ƾt~ߍǎ޵ujp5\d)O q%W8Pf@o+ХW[`P9Zy,%nגNߢ MqT`:~ӱ׀_ u:b`_qrǹoفA{rʜƝere*\S8@_GɃ|毱XQ"o~rЖ鴮>ƾ}4GRhA(URΠs26t'T۾VN<מIƳ\ۀkﮕ7$Qutrf}_X{tZ@P7 |ʹBʍΏi.>/9A0+6jOuK\3}Qv,q⃑47tvpHȽ:hWC':DR,u@g\mg:wJm =zf5S 6TY} o0}55畁wU9^Vиv[]CAA`PŪxv'T;TơAyʬ._?q67 ,[o_NohaF*L?#B@[ڒ6 /z[G ر.2Nt^QGܮA˟d7~2\Ja㚖|Iɾ(৖m|뮙Vd .оdN>lzs*&miZ#G\@2l x2&~*?қ)%@3@0Ї}?ˡcC|[ sGpLW} i޲Wм]$KD٧6{>Kw2-G5XuRo7yZsхmCvAVY/*{xd5Bℹc_GʽÍ@:S7+&λ5]R'`myskz|K=Nh*m1-zo,#OV}⵩*h;h;VxL>[Gz.}L[:_7c p*q^Ek?MsWxY^=tߕ eUk0=A:_WH^^hg#@¹_g4ڷ4-LES |뤰(@#N~!5ҭt87֧|xA `ͥf_ *;-txx DM%بrw}|ǡzt~w5~ˡ;@[K4{F#or_~}sH:&h\ 7:÷wʫrAz6#Oç7ޅaϠ8?v. =@:iF&  pX uI*gzӁO7%y/zoX'> ςj_ a4DD'f9te}-6v[q>b;q]sS2$2:/"=a! 0\'o(61Wylv-j{b, i :gv yP5/tݯi.4%OD֖/L| c,Z6zRvZ?M\'7$>KfĪuOnT%|td~@JڿWQ~bӐ5z^@`|y]yw~ϞR 'F;qQ?k_- ߓ~q8Qcnځ8Q_گYʛao(:ۗgסsՔKɴoaKw}_;=8}f%SflB߼rp> @Q߂S;Sn93wF=Y5p#N\IWVNkqy"_eSx^r^1swԀhP|ʞ 9(Է8}KlPZm,_~67'Xf!:%q a} W'j,hyq4XڗNL8M[^W%ߡ{kK:#Mt[lMW[~2Z^e. nU. yi'ޥLwn]bڬ ܱOCB8 hNFܦЩM;_Hֶ+!|r6kt- Rk*po@<|Y7nqXvc>mnѾ6EN3 >[u뮗OOty-SuY(ڗ<{ك_:t`u H?VYfYO*Xc$t)~ܱF:v7ڷos3˵&OLx~s\8HҶx5+f> $"@ ;el1Ljۘе}y+W{|#csKɗ8o6bB(:~R*Cj+R@ܝ`;\Lheko$C7ulbAgjAg~=C9Ñ@`̻W>϶)i}gk5&TZ!ύ?;|+7. ]fMhHåJ]:mV}L;s|]kP[0`]1`Gk8q/4{I9Zr[=H왽}> g'sYP :\Ь'"V77J`GvWr=ui \좼>֝2%δ.˰jboŽ>Z='؁)67ki 7rL `j5W7͈X;^OtCBŨ7yF4/] >@ pe((XMWo&7]2Dwٟ{X: X~S6S,[3?=5}M|M3OMgev0t'ju&(a,Ձ@t-W&"xz3Ax*zKް! _n~dkŖݟp:~rO(>dP^~ςϽy7KU7XFv]F2v' > ~:͂B|>߉ʹ;`{DkNL6ad2य़T>6ևS%?uf:eЭ3jFH|$$+|{|z b—G?94wPum^!΅~ Yrq#զ4{3F5E>^zlE&TJ;›FMA_(o^/ Z2  1q,lXv$vi)3RlJ>:Q콽iv4:y_Fvjz3g'",mQ8c; kN#ƐY )Rn #-V57Ω2ǒ^O }AB}RĴm qΜm@Rkm&GMs!4 JsçѼTgV CXNqQV-Yم 6N3wvv*u&+\>wpk)WǹȪ_sqox.Q3RǶn.}fRpZ+;Y ɇ 7k: A0Nt|7k}O"v.('#edU 8湠Rs@j^$k?џKP9ןBpᾁP^Mh? sϡ|a`E%E7%~&p;/v'Zoٱ;ڦ=}nDwhpë[Jf#-J.[H(i!QٗBeBJv jI%RJΜ3sf{5y]~?T'H~&[ c5)pڟj ~LO/['Sy(LJ>c\ӊ/Yv`mJQJm"z2oF=מg(0cj2({SU|y1@9VFչ ,?\|dI @ ^+RDif2޳G=q!1@ni^A3N+|ݱ|D3Ov5<~)肠;pkneў[\YHF}?4 洭O#zq勛hn.s&A:f!/m~9GLz!K4\YB?`WtND_AiC.B3P[5~G?5/^T^ 䢽?GbU ntFuC5p-Qg,WO0}}<^oNȋl?`ȹ.0tB#nVнɽlRsp/?bow`^u/>P*+77b'KNel1-q޲H>`twUrKΥ[U3Y=6͞_V 8NB~.Zr-:ކJ~mW-ݧ!-Zm5Y5i,L}Ǐ{sx}cY!x"0&V(SVgSQcb失0g+> +_yPλ\Z V_L~uE3R覵2z߁!k#gƥJ>!2~]:θ9/Z64PHKKNVXÆ`*/00?<ױOi7Mg~AJrHx,N} T꣌;@,ͮt<}n5WCM8K0@c:u8u]`I/}t>Pi Jԏ;O< ̔h.^-z{Hъ˴@n^2Q? (z왏W=Q ;շZWH3ӛ 7 y vdېu>*|h{7[)[,t<9ŪX_~"T~t .yCۓ* s|P9+WW86 /צs6];tA|Z RUw[(*b(gGvh)~=ÔV@\j< ƩxjfR*؋87JuTũǏbI+t\Cw||~T(52R&Vd,~`*w%m-R<і ٮ7Ûk?SgE,օ=NS*y}n h Iu*Noݔ@) R=j 숅0{a(gSTQvoQ?HG>| j+?:>+R{uQt\-C9P"Rߴan Bbt-U)kZ {vͭIy< XPX g]a'sL8Ô5{ 8V)䝧9@N C]8V ళ8`&̀HS}\[6OڕJ@I?^{C 8 VUjVOq .G%@Zꗴ:oF336Y񹡼4Y/?3H+f5rfgm\W/$^l.\6)QD7/_ɷϲ\ڇ q sR5ב-(r@u7b!%##}`YBSO@/+%~uWOL4w8?%k_]VPςhz* w"=|p> D%hS@fxY"wao]vl(J"%ʨ?ʏڠdTQOY{pb$Uem<`_Pn]wJ2#h0wBcd~.Xe\|\kWRyX Qx U߾ﭮ=Ũo)ހpwe9˥̫gLנ ڠ/U=R d]ٺgTNC%V5Dw'9j-$?ڐ? uΫuq2JrA1 fvtKQp9`B0N] (lԯߘ<(n0v~?\L;z1}na`?YdOe_x؛@(p;ЕܲT My[RPo̮@y՘ @7uW(lk{ħOM^ ^hO4i+H؛)[$ǥ(`MAg`iEK\/;?01o~rsR~ M{벁L0ڈg_2#_0Mz/nckV=/,2`׫|:(2_-v0;q48ŏ̶J w 1@[*,F)#yylqK>zvu)E/VEsy! -|A~sҽ% ϫaY1ӢxR`+,6#f"1`[ݘ OCޗѶ_]_nؚ;2^k^if04; WG#̑>b]{}jnQsR!)k"y7^W!ehWgWbބ!g4֥e5M0Ҿ8Bυɜzd 07ʌnC|QAZ'+孃H=t3|Wh UFoyKO[wB~Va@z"޹(Xi<(v99[Y0'V֭&)NOxIhK gGtW#_jiN8+bY?{P.N o6GaطSh^sT] "N e,م8#nݔ.HY) vK+]weO_5@u?9Ȑ@L|_ zNWu{X/SSm5-0eU&6jj3o7'>K=q$>9f.?BwwA@01 8 OB޼b,"e巹]_b!8 ݺ_oE5'wnQ|:a3G}$zHe3<%99\$0uMXL+tp鬎9[1p~| if7" y;Cˢ'$F)»>41@Zf Vab]r: \;V(cKCUMCOu~[{R !G[?jՋm߲. ]l>t|]FRE bqY)?ǿK➽ ذ﨟o7$%Afpp1\hlUuN兩[Uwx-%"? ]_N+J/Y̒nZ,;?V-RpiR6_̍m;qS"rcF~7KgZ]ovFO*]Pi~[oz(,ը͗n"9gxj .9_T6G OlzwN _N_[xHY8LYZ7_َgC86'9`ัE@T ɫKV&j(+Rѣynߑ5gRؕ!ۃ@[y d`YRZoMdm_0./|qRPBş/ߓl8xR͢+=#Cy&@U 3yv#ۃF,0yp/_(;# cc>w{aSAPdDz<@w^r]Ȉ6 *;,_'ϐzf~@Ml 3+;~\<=@67Ju$0[qk"Y@^rRBUg+}/TƱZi=[tw¦ʖ@Ymڟ>]ԧMxe2Mc2J7}a:XXP%aNQ_>`;}Ww)%+MR>/ Xr BMP1wA`^Z 'v7ʯ^+Ӳ놀Z͑fbIe/dHE*TIlyqڿmQ3 C' W-Cy՝)Vx<(^xWa]F~ܕ%|+~Ú 3 Sƍ~N. A_j7`Ŷ'+?բ#DE9$S0ƆfYS<)7%J8y(Z!q=λ{D2kj7\7r2Guo[Fų `ReP?}"W:+iP.10&p; ~g $ !Oרi荕〭Z\Jht<`U6Zfo'՝Kq^UW#/ȟ/%,5c{ %\r5gU)n̻n[~N*7Y@(9}PW(SuP.ynX^]B>v NxW7Tf] (Zn~؄qHE ^읿ǰ[2+8sl#}Zp z?U'ϟOVAƓqJogI9ZiYj:9lqTW58H)*/XM޲R#S_!?\#yi+YlB:/zrIKuv`ɇH6>H֫-2@yIVePAs|ր؉x<;)c$Od3 )y=Mg͓!hFɊ;z,`PNzL\ Q9QBشٚp'4-b˶Gs'/NAiE^^h@7 gB

k]ε2l4= {qһl,G)0H۲V チ4 ?=0(>QF%a(0|ޡ~s1ȧmx/&i._gsčo4{mS[l@|4|F1㋖pFoInF)hk}H~A{alP }CEl)@fKf"c0OWgi32QT"%j❏?J ͋[ʨ+#\ypwNjm* r.ssg/ }ó1M<~)!p>`׍'*W+R.C+7x>0~E2|lQ|IVC1MѼ`8Rk<βlXˇ/^*?I]ˎW9 .HdͩPiMA8+B 9 `,{>w&L}GC Qk)"Qx#(LyI?к~~yg-A˲eU(r;] YuU'hׁ=i=/Ǘu}6ϷsP}+˿jDӕ'mu(.Cq{Gby?3pqw!ٴ"s`/RwuL ՒG$ ̔EnK]~ME/ {VYFFi_g|㳬fHz?od|ǚ L9-#yXw'=&OZL\NM~"{+WqB[eq+_7 Ϫ>SXa1^4쾱c%6GGp˞]sT ݅[yۘW5KZ\xk`VI8$ eŶ_aq!K$PNڐL޺j/M'g *³908e>wU ׏@0 4$mT"w.q3*+xz?'lm: Uo[0Mׁ6'+۲3`6hxm/CCFKi Dd=b@Pdl=^{;#h'7{,nL>ѧ@w^wb0 ¥ <[1[KÀ\R+A.QOYD?JxM6׫fqZǺQ>>Qn _i鎮Xqꗥ 5߄M)k.KzJ<ʛ ^?T[wݷe45}m h랿jkns>ۘ KרԷ6GjE*sEԗb^lZ9AO6cMzUˎE|r&cl&:ʡo#$eDp?w*nr(} L|5&ȃg7\2eH${Gqm >.yP)1L< hmWMtֲ#qK?Fõe:Ji᯾OwyE71u إdo3lYJaN2ԯgq\ WQ?gdYl-`lYx(`3'^^ =~(l^ O߶8s5%WNVq0TQ}B 0  }]~͛X}569-|7,_n>Ѽ?~c*7r2Wg東 `OpsMSU1pP:Xyh %4NO{}/) I!۪T'K 뵮WRscN]pZs*O.fC!`T 8X th7_ހe%CY~wM1kh΄Etkxqs'YwEfгt0і}qz-Оz 4N 6>q1P??wa Q(۟Zo볎@v`[[ W8 Y8D=tV\2iM@`-Z*M% c?>UF!%(oܰh؝;6@aw>뽶)~V Ѻz?W9ݎ6;⊍{*Pf/uw|ow~g[ҭYj7}wS:iKWCZ}m0luO:ףkIFM%_D~wz0&`shrۡ5s1lOQ> P #>f_@uf֗%;dLy`/lT} }xckI՜܄M) ϒ}OŸޭ@{pBc7g)H[例״S1zpǤ{ڋw4 s];b ukO/A ݵ 7^F#)#{hwN nS ۇ;oV:ٖ'(J* Usw4o_ |<h%]n^_}c}~MOOgz (YD<+m9ۣh^?6~m6OUZM˶{IFQNI[ՇgΧU@4dL E7u:I?9T=BԗCk_/RT?{[!͌b[?È8t`êl]qP0w,MYLJӋeO_,0  @};̗͛2\sy\<F 8;&M$c$vZ>x?O`-JSfOK ;OV,QLV-;$n qf^L?l?z⃒COB?ƿP ) Lx i@L=-;ea$yoRb~,wZ1=)p-]1'{ ֟b_m91KDe$< Wxx-7o!MXvA3>q }%$ŽjqpIO9Uj* ]gv pad`oJmM{h~v>2Vq{_,dLRێY]⸴+hg[aK`cćN/#~=TV*ڀ{zţ@~}|Yd@~IݔMo;0ꍎ=vAk!gAsbxjA(Eb*nibH kz-$_KNJeTBDstb^[z^;-|׋Q3 Y_{_OGa%u*<}́$K^o{vssBz}`۰J$6߮]N{N0Xnõ0zkڷgU۽)Aȍo"Rf(uEv}C9eHî;.uҊQB;ҧ%p5-ӵU;%`x  ׂ2sӈYCL/o9|w4`m,M*k5&\U%cOwg-P/C01@CcL`=QtX.7杇@# O(G4fl ؏שpw5Ϳ%kFKܩe;hN<#:::jW%F,0E~etunDoG*9`]ZBU_r 8w?Â|oX խ|co XA~Gh0W/vNjaY`,$fs9G솿;|4qo\[mwޮ^ ҢCLb58!S(5kȑ@Sإ-xGv /lV.18LmAe rt>Txr~$t %Z9wY$]Q[$GK +@YFs[8_&dX4.hD$^rEU͏t`4<~јwyӚ ~lrqϲouO']8dfßk_!֩llU3[؈C\6XQ9}/a#n76F{Օi?=/w#?vpwoqH\O-Go`ypUS y[Q/]ds1^ t-W>֥@\ӨͅS6!]k? nQDfGJDUJ׾-0O[} ,.e>U)K=!"`)C|W)뷘i*_lLQ,Hgu"۞k(Q@c-F>Lre6t#H)J :}x9Z Oƞ٬"iWgCUyX О}֓ȟ'S2:D] bf_֮H ՟G-,?Sq늎 1=i^wMjii縹 X_+l}.+5C"Χ9-˕_n 5xnTyxk7*j+a_,D%pM V۾eOjѶ=:|ˤ'3D ?_\X>JvZ[ckp*9]ߠR-'Vn' s5.P[ R*+F0%3z/o8臎4\{置C}j)S~3mIkZ| T6V)$P1Q%`FZ;s= `[v\`m,E`ˀ% go-4l|R`ܭNTd׈ROPoZ߷,s_XT:z{<7R; d$_(U]vGz4^˾'LnG: e()IWI:mwvėwLKiOy;3 t(ǥm>8@ʹ[QA-I L[htXlx] A{{ 9oϩG_={vh9K6y%"n4g)xkaknu^D1f ϯڧ;Y궀GՏ>Լs0C=jlyO`oo7nKQ!Bֶ@ڨITE}$撹7 DCyv!bC[ɧ 7 R^B/6pLq`!VKyb!YT68 ľL/MYiR-&G\Z> P ,EsŲe+8wcEoe 6H%0X:uOnmlRO'ܦˣʅ#%[ɂkDuz+ 7ěr_P>V.v Ʋh N' ;J ".1}?Z&|B 8>PuF@50Lh=XrxB"Տr\dzXNV`WDlf~li'i=NTs+9m/tZ9ٻؘuȏN#,E`cx qx`Y^rOr@4oGN'"cby˲]uByyU_LI| yr''w. Id/D`}ՔrwjqQ<~9sMӭ@{.pXwa޼?2 hi͇+8"G`CqAG{ۇy}6DlH]mXȧkNeRh'P_=W~9ϥr`H40c-˨@^6i2ȫhAnfZ h2K)`tS\GQZH{Ƀq&v%/7_>pU_wlSq w|A^da/,t?3_j6~A )y 5KtCÑyiU[W ǫzP~<`.l{W>P¬t_`ej\ ^3'5fa"@>z %7 g:^Fq4p3|Sp\s5}][XY>޼yܞ2Oi+@_\<>"o+.7>m`oKCs@^j8=DԒ{{]>s+V ~PfSU^v@?l#p2'J??h&S.hz|Ų@!K,curUaVj91{ `-v ̰@.ù R<.^;7>%PG E`YJ&KL,q/.tį !3't!`_M:8Hzt7U"KIҀU1@L JgZF!4oU&,}~TDo)u bwI{Ղ5`yP?{VXM([IX1Œ0280l~%wnHDnE^PFTLr/gO3~Z:njd eN9[ fۏB9@nhhCq:.u*nR1@#E kwpKt@g6);ns/VP?>MG{?ݚ GFm=/XSc\5: c*Eǖ񶍑8tfT<:7B iAv cXҳ@{w8Pd)/Y_={<30SN8Hc@˹Q~vo/8+c'iJ= o쓈uB\Ŀ?[kd县|\q5-޸+JN kLL4W(춿 w7q#g@}P72?[+-gT:xD Rw˰ ho< #Oρyr٫7Q?~ X'}|`?cv (ڦ{MR ^H`/ le", CD+WёC|oz>v^  _V /={[/yZ}Ūu\!_`,#q^! |9s&Mv}ᘥ!ikP= > rm`yҞ>! xs~CË>`o~ -ՀI!z")- oxB&F;i2Ž}WiqtCʈf"B ߝѴZ^'s+#,>%C(VU ֖K?{DT OrcJVCC%Lw]7t=\DB $[.#O+4ˡڞ@1ĮXic< H)M9q=322"B%IPICRRRSi{ߟ8~nv=^%cAbH$Nb4xu&7R:#o²eXE=N◞5%脵8ԽknYeq:O#>2\ h&w,1:cJsh3䫈koאy1c2_+#2#翼NZk䯧Bl|pQ!NvCbU:]R{R&r!F~Ξ* O-/Xvc"1PbʇVBGAƞex#}^h͢~ء+Iϲ > uNs$plqaĤCЧBuyû%$FLLᄑ6(bݤv13tԁzee?_{֎^c#e,C }])IsimɮʽKH?NJ㉱W!FUg]xOՑvĔۧӔI9=DșDI5n$>6ӗ!41)y71\jX D/Ѡ=/*6Aˆ%G{5atFB/%?FgӆVmsaPIY|O#F3MbNzb||u;='Ż16Qp1$udZVďfb7=[l!1jpJ3r;ijĠ;6-IΛ$붿w>"9]Wp˛jIp8Ȁ8jT^\Gwwr݈u\o%/o n.$&̱<~绉QĈAOu\kKCܳ'G4&?w\!E^eCL~Dԉz{h{$' ##9 h[y@^ 1:ӦK ZY9@24~r#Ý+a[&S_Cz}MK-}"&7#FXO%&W<-+\Hr,Hgzvbwn7E^%yz41y>I!ЬyJX"uO3H_,{a=1ŨoR&zY 7Ն+ڨ|bTRbnP1`/??]| Tbҝ} V^ӥg_Lv҉L!hS@nbR%$gnLgO z Fn@xxBr btV[/1"λNތ!˪vg# <{ @ﵾK~5/C-~Ӧ]j!l%&CIۭCfEuo\vĈa`s?ҙ}D/V 苠Fv* dq+rM ̀|,̛ š``g\;DEOGa(fk2jz>(o=)X=/ {Av`#|j 4LbC;IUa6L.ܬt +fO?]Չ.VpRĢ9쵁Zܬ :y떵}VkdgY&;B9 )(~ufFpkcH {;[kwhؾ{uBo:q8'ofYۇ.6CY>X*W{((}0;6 Pm^Fvi++G5] ]gUгh/ ʓe/߆ͽ= ;a"wPl2 /GYueW#Tgw[^Os_e|_4ڤ5`.Μlکt[+_Wsk*ںoryK 0ړ9%!t%(z;͍D\x),u: VƇ4Fy^Y]7UXVO ^ѩ0>/C"*EH[{Dr;Gadԯ4Ba[,W<3׎`[ ޵El\ ޯq Fe_7k /2bסcf4PO /mzmPxn9gZb"I NQkk2] aС1=ʱ`Xe{ST8;I˝~y-zPZ< ܀Srf Uiw`Gt=>e'M@)W_.=~- T;ݙ,(dt?)rK{03[fF꽷-'ÞON`[$4?{ :O-qk kPF XY\x}G? /Z @SpKwWvy+o ޸|҉#&u1+_T Vks|n@M3s:R SW݆0i>-3w~/{`h }p)wXG6!5u*EXg!4v](ߒ6%iޱ`F>Ҥ KC*u lhV&A^z"T~ aRY1Ww}dezh1^[ Ӡ]27 '05ӣT-?!75u_@ czKB윲|I0΋uAwKX \8swj#lɽANVߧmc#U%APsVz]]ʘ>; wmV-B9)0͐^b8bQEmnڗyƅϹs6[h>xzzd G}p?vcGǛaccY`Wuht=s Fe,v .=1b.R!oAՇlϏh;>34ߘ V߷Vdƾ m1Ɓ1KG/фGDAgޯܑ7ꀿ[#8 T~Ev!lϦ/p;m;E)gOѡK}P1 , `}S%nzygu^A:PJZ4^| #$h ujU0?V|3- +xC#~MxdqoI0iuDwyWY?jsqk͎yC 9;(igurl]L(= /=D{:?UXjW ebӰE05=tgpsI$:ak l҅oBo 8u w6Xk$&R ՘w; & hCwȶ 3jJ}ً`#궄ٟ?åqj|SM[^<`\Quݡn;8K \e@v=hXVV0PXP`~p)x 7[ ,_Jز[Qꆣh@Ra `nhL瀲$2/}7:}J;X BOzA_UY,^qjyԱ;sp}Ұhym Qsn[TacauU}d%ؤ0,X?_Kav짿 xq"׵9w#l|q>+t⺴.0.&w_ږ30_ꥱmkav_%5 "S)4Q (%X|.XgRza0Iin6Oe5v&0H7sPЅF_ǧ[p-|q<O(:.cwmMLhe1@po"P A۳yj )=S.t w//>bM;zCcvُ`'R f.\~RN>poyPN0ǦGaq(ߓ} nϠ_[;ԗ-<}'k}Jy#`5\b1m_)Pss%9[\ȋxxVML-.*mn{] WPb.ѳ'~z0-2,A[+hErb/ Y}1Wf= zCv{VyوR(.N^[5Jz7ޗPs3R"ԣ%[z˭T́H#u< rycMԖ=lړOVU+mRzI:[V9R@C|Y wF(t]3'’PsqvD!otM$MW344V1c-9EQiΥ/IXI5z[2AMQyuDcp{#ֱ sz>8f$J%z@0!Xb.n@w:6A-ne<؋*Z}ce34M2$+zYjw2n" `4wILE9rNb#8KZ[%457Gߨqea48]z*p 5ծ5LO_ZL'}֢<R+;Gt{Kwa4i`Y3&fP>8;}3F.drR*}XVW4Ku}f0K>țu_~W l=~ ">;|Rޟz`&N,oou ЭY%<:!0n8t!z(Qc/OB[4m?wZ Npsq2B hJ WOv˺M@|(^8FW{Jsȼe%xTՉCô'6CZ0v * *pn]O_?xq=c X\ѼЯ.=\&c/ƃqץ/0 Ytܡ( )+}A!dE{a @(sK`=! sALW;0][ ģ@ ;OkѲZ8ib-8:uXjc8iKm=atyI Kb8K jd%h}^S>6I`W0S$G@Nc7zTfxx@[;b0R#5+J8-4;Bӝ5y}$g:nNKFIyקAT)2ʏ2 ٽUoy}3)cxMwKm=k9\f%}9 g&?@81r;CЎwo?޳QUlt7/ uh3Wmи' [t+{΀yOЍ?@+bW9&rDP\%D8Mj\䮫.yn"_@'Q{Ww@qFnhdP+s{;> 6 TQ{.>M}Zʏ塌*H~`ZdCʼn5nդ'Hp|'oσO^3L{b:{a;&?^R/Xp1agic:6x$~V!Qr1矦{#̊WKH^|2 5/dE&oFl7Tap5yz(cg>!$T䔝-k4ʻcA~=|Ɏrs;'ZX5D%)FM9m5"~?ojO$)B%(zsM_a-8?ij7Y %R+d-s̖Swsen8l] >cY4P"AcmfշI@k`ٛC~:~=33ܤE3۵(V z]`eWnV.cL'*+nΏ]P!=*]ncn)r:w1א(EۮBΰcu@VY-Iz`L7{R@t۷?a0YM~G<ZZQ6hBȼ㑽!] <*ܐuU_=^ G@p? m FR^7zia^mnP6jL{o_] {jAYWk ^xjxApBRh̗@r1kI(b5h{ąUWi>ғT m3&okl#П{F'p9P}:F;t 늾Xwfu<^q^[)9;D@ʠT~G.TYqAޔ_-zF-[}\ʾqG(׋ ?G m_ԃSw+' -+@+V%/6|pob3}Ae x;g:-ht-PyrLs<ؼi!: < qeib$v fU/M}ʽڎkeΐ^Q7Q*ކlWU|ޠfd5k(/mc_}ra` e^P#\{:`4)TaÂ0hAZb+Suo4KrDQp3<&['ٌcYje*z|itϫU(=һ^}g8˯IkH,-s<+'ޣ,׭{*36arwTVpYW;-g)s_W3-x ;d$R$⿿fz-~Tkq޻'g}u_FnO Y a00p=1c ~}׭wye=WNH+cjL}6 n/7 Rc[|QN^P1b?o2*.C X7tf&+\WWC7ˠ8WnV@ WAIͽ:ZN˟>ڙܾXW!X/J-W'zgv ljVv]޲GQ~p_' Fގ=^ `8pmzFV%0SXf=O2YjjPgzBp893{v(_;#W'怞!i X3gXIe]s*Aj.(q܌Aw]c['F9P]`6yu;aFGxqU+:af#-7 }uʼn `kp*2t_lira:-n~OB*$>i3`~Wo4['{ٔ7@ٍ3~W?O *}oT@X9LlR..X V>!t6f6_.]$=ۿaj*g{x3X-7v Aիи}vKOI}q\g3LMFSg_F6(|^fr/}Qk0 Я1v*Bם;~߿ 1aQ!pALrz`<9[N㡲d0GMKQBu?n{`̽jv+ &2JNsG37(m}󇎱af0lV|=ǖ) UΞkZ {HqY޸U{y"3ۡ)ah||'Xf)#od8Z{/CyOٕ.T6ȕ[2klL^'hn <`$?ΫoH4ÁZs~ɔnhEE*/͋` ƃax{-?Buӝ@FpsH}xMv, ^P[|Du3tod\ArYN4ԏWdN%uh[KyYB@Yr/X9>$GQw@s:^: {_:gwGU %-y #YEQstTh?guz+pI{F8i8E$XpTЂiDrЫ?v@Dz2GA=s98/rfs2OF]jQɂt79,tDdMm>Tk[P2OlEQAJ͊gi4W醡 xW. [H:D-`|,HrRE9e)(} זd3F Uj.LRYb*~dttZWSA}˾z/:ad{ 79\ww|N:,CVAYa]c̣ ֡K_-xҗ07 [O5)̾:~z9kf!յݰ^z]'|$M!ԦU^>(Ws]wo w\WMj ,ըU%p~.} ʛ]@oVRpSe3N_ٓ[%֑2¯{6UkWj r #?EFv8 EZ0X~vWfUP,~r;>_1oM3N݇\`59 P8peZOnDݻINZ M!Й^ o_aq؂۟?*mj4ׇ)[;ƻ])3T ku?37}e~/43\EϙUYnHCC]{*ӿ|: tk_Svd5? pVZ]+Mʶ?'vc橂ijԝJJ-@7:>4P:G_Dt^zЄy`4~-[z ]kvm`HhGNКt`.luoaf0>-*2 6֞վkJ33Hc~;,oqy4ϺBsC aq.F#4L6;_fn,h ."}x|o(5`̳R[1u_~%Foþ()N> R_R\== X_ ];LvP3%ʩphjia;x׻@n ^gs-PxI\y٨2ǧ`nCز*i3B;u.@6 +KWb"is777_oR>IX/[W=֛ b 0+T1-δlc_蟖ӾeZDΊN:[{ xjnj+@R {n˘ʛ|m3ω( p̴^8>C+]b]8_|r;ܠ"b|4ҍևW^)$A6R8o~(:\\/_1};ƴA,:?lBrT}ՑpAҷ81I>6tjufm#īmG`2s2}}I*t 2>J.s-?#[n5bQ o3JeEc78vl =KjN"8+"THv!T9u;C~GsDdyY੦tm #vẺ0Ӊ+pyav"I]fIh#6ca?rr__/ GlhzӬg.3K5^?T=*s5xfzϿm?mY)ɟs6 ɤ~խ C |6T|8 V=/iRs}ʛA,W'ۓt#9|yJ$o!jfj_퇧$$m_VR`fdꅾF"i~=^2VKhGQPx< _vwCJ2JA4Ե:k/K(JQ@02 2VX<='rrLohmq*Av*\׿zo!m=TsN^ؾy@ t In0:D%k3/jY[En'sSs:fC`PV@fz4W~w3%w6{o`\\Vl6_5ܒ-ZHV+8ltyu?9M?@@o l1'`4[nlIh.xwi>}d=`6Cb @G<^ܝ7U McjImP3n]~۷v_н,emz٭@RouT>q l0kTĞ?WZW/q ͜+ DJB#)48Cs 9I`y`~ư_dYB=ez#+LkV mN ĿZANmW0عjubÚQ_`CrÏ|WZT ^xdr7e?RD&W3Yvq%Om*мMZVrl[Z#%vrvIsF㹲g`:t   ^[dt{^X-p#㛯ڟN= 9э̡\Jvm{T%2w"ȼp  8%PliqcĶt|GN}8wpo8 W橀cL\V@BЌ_5{do~\E4u1;uzM'@Ö]~Qgㆪy9c?x|̞)`^TҳNsa;WPT'VA J\ɣ -/C;7svb6κvK. mW Wb#&%f 9~\[JKC,IR(XC׬j|:=֮_i _؟KU`tf[>)̑n0Sȟ0m[;a,&ByaU <~ps2 ~]7FBؾէ8G,0RJ^KMms}铠50NxN[c 9xz9!~ڪi~ \'}j3 s7!]bg3:Vz/'ӠyX?#y=}1(6΁~ ׳*-T\oYIpsax)u2NvFn$,;E;]]0=aϻʮY <;%Ћ 9ϒ/p~8z h/w;j>#(ۭ*=KcNJIyB_[Ԩ#ṕ[0ib8~hA՜s&)u1=43 k6vER_}Y(ʴN]Vow zݠI,tzvv?7Y|tX,i EeU!SQPOmE΁lgZT GH|PA_Uu4DGA?fRjynr"L]we+QO(+ v2`Pm?p ,ϬA}QX}:!zHZj(!x`=# _v`}&Ohy7_ NB05̾Rg˛qĦf@V\: Od5mݙ= oOb0f7UJm_4COI$}eIqd*j+$-w@^X|ճ@+Xŧԟ>[[hO9ͰݨXd/7Bo*wx\{^"ХjVK⥰?Lgy|P0+3TTWm -x}{ @MR׺a%Y*9h~7?@W .iK#߰L7O,Ɲ['7Ng~.K`/JGQ8IUkN7zrgUӗ0>^aef?P/:No-<=7mI:]=sL:bZM?4.sx򺩯-1dJ(N [f JEջn|&kJ qS@Z+ xx&9VTO+Rw) cEw_ٻ%:c;:??"/36LzthƗz Wۑ e"RoNr8=t$%:;v7{ݤ &0";m?u)1Pt׍-1T.}ۄ)˝579|tԪT o#lHj 2AnE/UO [xR@ 1-h/5sOsj ʚq1Aa9Ѳio(2?-@s#q'm50I|]c\N5|4&|`6HzRrc_3p{ݧ̷̣ %u& bj 1)KwX}| }fk"`K'APfr}/VV7P 7O5߮ 6[/u!qX|-ttk˦ W=*"IhX$w(O7[|^ ,] mԻ`RhBs'Ἔ| ozm7k\zޕ Wש.(YbN=6lp z)yuAGOnoaOGѫ=0v.yebA6@_K{\Pil=kư};" طV~Um'gw˦.BOa|<@h`}hRlx E0D?ARQ@;,%}D)o3h O[̝_0.+9.W7pY6 f/_`Dt/5kVbzW|$,ifk4'b>Q?|^L!?/)<̧}y_϶ V' ~.j7[,e֦@o3,RN{?Qӈu wbͽԻ/- o<8@UK:ޞ_JLW5nNX)O^lj3Y[~|;,$OcA9.>a?=o%DvL{ h > J| uMs}Qu~7 Co`_W=]3K zಏz.Z@ 'ۖS^t>^#?,_n|V e͝6l`Y=\ h2LwO>pb)p'tq׿Od[]nВ8cP( Y;Qclh pƖlfPȼ3 nB'KA@S/r f~@=Z?pi?#6`YO0#l'UsH5H?Z Rb3_N!j(IVߥ֢~>;S?(u=oԖ/!PM ֒+:ps*alyg>T~_Q^oN`/)R^ŗ/[xiIʙҼqIKpk`V_fkgPK`;o zl c J ZxienzKTECV`/3] xM|ݲzæOt@xxs Gטpj"@Y8 & u\vn o=Z@nn@`F% |'UAi<]O8טaڨ6rs쯄sL-Tuzِ̋`u\ϭ|c<gak#{f1/+9M\]u8/ ȑ-:6 sG$f}G@h .HyF[_5sHl Ե,}ԯlt)+k^W ,Gl_ _u<78;KNо)b@1y1>@f|j~3āV'=X=(w%W.|\LP@ņ`|x !٫AvĆ e?/ޭspvPڸ d'V\ -ST4?I P+kBٙPjA?k}0Mne$T_$b C@4 H룬 |qЀ?53N X,?s8L]D ۗ !LTVf&9srAL?}+0W9nb\_KgPmz>y8sYiOi=F}̓ԗ@M^뾮liIcOJ,{(kMofߺ/_ZOE;Ϭ׋ ֎枘6h $5  M nOIG6Mq#pVʄ8):z /RW@I0<eFc/^񹃠;]t8_ku>|1W!H#Y 33 ړz^gL5D6\2t/&@jɷk Yz_PDr,ܳ߹{fp p~TX M@/qYgWߑܥsq}4No(s $ՠ0+8?:W~[4҃YxW :1I2p'ο p}yykɒzepVd'8`{G*e~٧3kぞa 9vw@ Y ٨f \7;1(V?_l8M|@O:/s* À9>?Q)pɵJ "{׾B޹ۦʴe%xң*UUGf;}%/ SgyZNPp-Jyb7#oYǁ q'P8jq6O#{fg|^0 \#  r&^3%/asr b| nʌ r]Is 0v#+X=Z5;< ȁ]xG%؜́P/:vLuw݁l0@*O}jAi<^`Qx>cnes`dZ}E=+K;ԻʇF̅% 5mIxfJt3yòd)j_G޽/j5M8ř@Դxzf!Uis;a=oa pK姲:49f/CN`\Re{}^Ix[uzļȫG6nd|2 q7Ԍel{Q}=.w4| w:ؾT@.qxj/3 vb-u v<_æh\+.zULg}tC2ȭ\T/ goޑ:^OX/z򻗫Bv;H|o. &}xNJ;qP6sܦr/}z0c֒/ w=Qedd ,cG=O= B i*chÉ(`hPlQhӽmpr7{~ZY?i Sri,6u<%h5c_zw]SzɌHPd=w5WW6kSONKb||p%}0^X9Fu]iIPL1; Bg ՠ}Ek7ήQNiu޷MviBlΚ5Wq#0QcL)\}+ ]69#q\tf<~;j[GW5igN]fX*璎OڣECs˜I]ƶJ/iTfp6} }7_&/ W**B+o?@.'}$5Rl^檤5I[\+߽ʰSLu <ܗ1iZ~`jF>u;:l~) |vn|vOUsMX5arRk|ۀ,ykzEvHC_l[R@׺P0,pu\w_7@Wwp?_I .*!gz h}sOoºRܭ{y2sTw4 k5F??@b~}xܟG-8'2Wl5r~ƶP*{N]9׷7ĩ ^=^ssul]+Qщt\| wbɀ\x5O$@BB40&)-|=sh@50\ <YOd ,^)#ʧMKq0T4F›srv8\ l!Æ /ݺ;lɷYT`|<7L@+pVz*m@Ym {|W7m| l^Pdc8߯tN:B?,V6-h}l/<@K<#į,vǜT7$^% LS>`td$ kBW} 3I_݇WBR7L Lo0%ΎZi/FU޳V^gZ.W~` Dt[Z1<[N^f_*("OOm_R~i7B!Mdz7:`|+Y_sǀUNq\F M0R⟜U hH[>&"ozj?/[J(04;W;ǧ>[T>a\OY`O$<[[׶W޵nA'Ċea|<6t DH62vVՠ˗{k}o}#_92b] +tv,-J<inwU_t.U$wl53 hBTQT%YziM@\rssѯ _@߹{;'?O&[L{?iub]JN> TԼ޻Sѿ&{VMۮ)!]ݨ#jfgK.`|pz16>+yWLr.Le 8 3ΥL~Fc 4؉!Dk=Kamԗӛw߆{(mwI lK#u['J>3l HOrύk@?x`ϱR'll vA}w;.` d- Li:@a iɖ}=^/;4먫*M;ܷF X O`^\w2xQ-I;l(g^ 㩳@;C'iFdZSO)У 6>GwnP ޲>qa? ?dcqBcŒxsA)gp!P/Lԋ9 hQ^ۯ|zK N<ĉrs{`HIr8I;| $k 3}@>n+Y3XFLwJjN]Wtt]~9i6UW \G^sI)' HK@s(5{y8Quy-<`/4g"{* JbWpmcq _>1fZ Kr%75rAap$ _ˈJjbNA`8G- 1t/5;/+<*m]ŞMm୑E|ԕ$`5lYchQ÷į^$6?8fjBҘ1T[43;K/j>N\\- gG|1е"JІWꋼ  .PoyCZ'W_'O@*'4'U=~}P|w\Ͽz`}};j}x?SAvtje7@:ndNS*tN[e P(c0.w rIN6!{0^+U|󾱩` 2goly ߇-ZoϾz,~weg;1>HTcRG6@9_l:BdMc6\Tbh:)DĴ'ZZ]gΞ ȇ-ñHmVڎ27+O)^;OcL3չ5EWk?|*a64DF_d{' ,3F |x|<־.sL9OU dz~`%sΊZ j>Eć6P _m ZOr:W&Ngy~t %utLQ<^yg=濎tz8|xʪy#. FbGwP2ygrƲAU۫/̜#o`_.`=8]` ]|fM[rGor[z̺5;i>m{Z Fձ@+' ,jxzvPYh1` zwhFK;Hm S6{%>EƖ,a$}x"zy&0,9EX 99U|?&Й x[;}7" vcg.\YW2@y0JgoNb]@\Gd)쉗E} ơ|lդf澪_C> ݵJ 1畁WenvckVV.1k!WT`Խj}`|bѧiYQ~\dl:~XWMM*uȣJFւ(Nr]sυ"nܕac rmY;3/c}߈(@mR,{77]F жoz+$~v'e)O hF&ʏKJa J~l'1>" %ɮ{8l/pE$ޒ~Οv1" LGJ ޴6ܝgُVk`wH8>8Tsq??ҟk5[E4iPs& Tso#@4qޔ.s}S@ёy w+EdVxxG3bnzU' lN! .xЦv)w7]o鑵Kj_vH=ON9Vd=E# &{sxb٫-"&@p9]6k"(}d-f`mOj_`NkC5cbԶ~EƩSC羙7/# $ytYm v/3+:vȓR6콀YcJArƮ+RGpPgJ`-r*1qW3jVP 9ECi{|/ LK`U W\)Te$asOo+A^A5v*Z lq-KEFg(w(ǹ6^MH ;eܽZ~ux#BcvǮ[ &wc|ŻHbÕ=i꘎?ioȓ>*/`=<4/;½jdH^} x( @fjrY c7q)5}PNVڸR6_{zBy@W)1+nQ)O( {> LNyL,+Og5\xVa/coX?|<_~b@p1xbeAvc($-]Lu8521K)-S 1>^nd;8yՠ<<9}&P O&k] PcRs`e5F~dQ/4]r PPamkE׻ڀz/~aR(z{ Xoҥv@oxI006<;id>ihYra:jvWΩ -O((;(EsF6>h8q &vzn. LΏN{M`?^qWxz_ĿOOHTv&_yt`ʛ90a@9iYDt"`e{=M?p0N+n/`I|Q;>[Z?W{c WUx3=,"99и}({V=8eY h ș/xhH R@ϊ^t8 {F[IX"-o_i\?mg?|<]yKH:('{0 ̟Ov{`?Fgގ{=]=lRh=y$>/JVejG{_riI!dtԯy4`|^Q8}p{[z-*J>S*5R"Pi NxtIk [/LzԸHqύ6Sa|;М=KvsOfs~ t NT `#g^Jܭ_ Dmc)7ᝫGP `Xb(v~TEG`'Zm|cpgn֬nǃB}7b>rU_6З^dMIʋǵVFNzP6K6jOSn"Dzeu>^5FQ}dMjwl_A]xppeh60>^X!c9)@|}զ'Z֪8o 9^7~NQt5LݽU׻[zgamPsz!(=)ï?>ĹpףJ7N+ _b#3 (4I:`7JTlhCA:&ڡʘ)¶WtD8{}VUf]3rwia:/Nr"ڬX㞢~ѵk*z(}nm&tP/Ry;t%F%o#?IܼTe@Ϩ!mJ9p7+ pP\ҥ]Q̛g bJnx-V%(pz-(OH[JЂK! ݣ7ס |stE^슢VQɼ cAO eʡ'-B QwC(}%[GTcsFiJ@}#ݵ֙aC*q#e'p")r8KT(?vxH0\R헍4xNaSĀ7Tr7EzVcPMԆ'¸֍9C'Z= ,[HDEkv"Ϡ?Q/w"N_{rU5nwL yWZ~.:T}F֪ ta 9z츴 勑$Nۮ7j-Qy)è]/T/Xfd'>Os.lR߰Z.+,w7ȅ'݄(Rq:ӌjȮ%" "Jz:O5 (>^Tb?]N򀄪uT. SsrUʋ_ȵ jx:9[7i)B1/n-_b VZFR/IE_xGFPvv(1{YST[87$l w5gRQZk9ŮPxoГ9{Ѓ Rolb7!MMXaj =}r2E/o?''-VDт+7k5yϊsը@o{v|궋 =ReK"Ўʥ(Bm1E ffv:e)2˾Tpd xEWsQŬk2*JBa fs*P[jP::{zFi&(Z\KCPw*TW?{kq:vD|B7RF{QݗjU:Sc}/:xsS.X9̳;="Pm*kS꒦(=z7kBN<<Я)_54Z~WE9]o>Ҵ[(\Wz>)kYp@h wZ]zm~* dRjy]B!R"TjeI^Z6%(~,y!t7.]Zv. e^gU-|BAx+YC>5?tu2wً(_9 Q5OPޯΠ `䁷҆*OְPykQv,NzNGT:H Z|5tf>t/Y]֛qwZi~T^k.bZt( *8n~MnujB;,F:ak.ޠ 3 {PMpC/-ޮ >n/aȸZߤ>jec}Yyqѵsh%#QuK?PFl~S]rYeݏ;u̾;3W^[TГۂ5QiIީG-ROh|OENO8YF5-Rf%T[kɟvJE O ^*PT™6nKj>#|crsԽ5wYJ1Vw,܉"bˢf[QfRE \]ap. |Ƈݑ=cB} n+ 2Uu*agGzˣ%ފ٨OIqiT6/|C>ԅD)&qBP^҆ Iޫ3,B42CwL2X_̔\n  ?%E+E`Cnۀ=7mL;EbEIs~M>qOɢP;XЇRFjN]DW,$tFRQbN\1*.ϻ2Ǫa}FwK:x EyfG]_~ 7C$LDq[ - Ǎr Cp<5N#E>  BM.h?[ WNw^FwN7KƟ֗B*?,k{WBkʟ&Wcv&EGHb"-{;^:kXڎ}C{yPxj~QX%-*u#5#_ I!3 #|C䓰y0rty~ܔQz Ɓ_KWE)%nQf< z&em{~88]yªn*Eft>x&7Pcq~:̙jty?:Q󘮽'PXQe]=H< d߶L9տVM9ړ(fPȦ籹ϣ۠7rÉ8wk.:P|xF>3 k݋qI\Q"I$$2R22w"i()  {#{geDC }]}\y8{SvTrAV_eWkc>A 'ތ BAc$ŹW''b"DRU+n !< u fw~ !})HNo=|0@t"qw+?ը49vx6WA]qf)|[:-p,{..2 'aݟѨ#BИ!ק`9'B[_k'?1t_h膔uP TR!yPR#v jw(>+yl:}vJsnAYx▪< ܛ>ǟ Vws| -g`nmc S|L4L<>XN_w(A׳aBp۬_>E3 'WӶy'rYх}f{0_TT` cF^Qk!Qo*k6:^aQs([7nxNJzn @BMoQO*d_{v@cy}Ϟ& oyn0m,AE3bgD" Sד;hmgC΍X![/ƸO~TxЊ1u+ᰤ<B76'` ̗^^C; ϭ=(6wVP9 Q.66;:x?qՍyIX/DO@].%.t7O;8Y=1͚aV/$cY:F!"+c~oZ$XLR=H:< IIUq q4![ ¶-&ҟ`{(C;7 W4Kkp٭b5 'Ձ S{H9k:u*!مpOAѲ$2*iT\E)I}PV2JfGnW8޷wz7Ĥc$/IH0RT%g]y)b޶;[(:N/Kx:kM 1پ"kwߟC$$6q?Dz@`/@bX༧m\H/1rLLec0WsF2I1=tߵpԦ,|Sbv:+S6B]ɦUAmhP`>Yԫ,:qѫh|l|(Юd\v̭hJ#{jOy_ZBH$R ɹ)p5UXSn]5/Pi-[:Ưhe;;i}pT0 Wu}ލucJ~h\%5F>jyx-=28jRqrw un7fK7LkRH)|:fV L1IpnWF%h7vd%OS!-3O8$N-ߣM;1_$FiBF=.&7 DrRctR9M&BPLlOⓆ_>5&>p)6^;)=z;{_3B |⺯V/&6Ps'JMn OY$CqqVRpza.&'# v9!&wJ;ML]v3$M׏u^ȣL1>%n6 XØC #3TaCp]`V ⒋npnҟe>hsM F{Ԋ o}ԔϸO/M/Kk#y43~i?Py N}όeh,fG6X6W;-ǹ:sf{*ZNg~r_ 3K1F ={| YVSGʣ:ߓj)SOjVQV]vW >D7[Z5BNTۏM dI'[EZ-N |i/qFb3fIzRg 0WZ#aN#KnEJH)'J`(/_lV@#+'hsUw葈l?'JT,`IVP^E; q;̵R苒WXNۧc"zii(i`bfgN.ٛu`FUfO~BICַ˹]%_"KbA?n9]OBPci*בx|/K2"s섈[ /{TVbOVjwݰгQ "LH'F:Z]$R'˫wq%j15!kO]KD !qX,cf2fk{.onA]ӭg#V-JH3k;ݝ BTe 2ʛxR#jqw_7:!.DӖЯ yzEE6ili~gu|Ӓh;QlHg0N Bvlve4/#u_e8ܚy74q /չ R戍Rݕ܏ŏ( |-` ^̤GWxl~&{#_XAt{ EgT[G!Z.S)7ɂ(yc6J+_ |4,}|`{^!3)$D LKe/3*ajU *R"+#U^XE<1c2g QÍӔp9h$ TIA0mVd<'f :8K(+Yqi:lV+g)uUL7{ }Xh0C Kdn~+C@f,p̊C u+wW>Kݝȯ>agdV$ nyX+I[G /\gE)| 0#: Rwfain-l'"̶(^# R*2e}.|{5)!S,Ǹ%'Ë aP-D^^f,\G}2O0o130,#w'%u4h`O U֫c>Tsj/RUS^u^=hAggS>׻o4tV2?"v=8xqG WQyѡj|G !M~"yNNQPg'8|5ne6>@G ؽ gB_;w{#7C ZsWA" 9Ft}xR~NJ|\Z#3.heJ|0*m帒=ʾ7pqZ(R6taG8)sQe=g@)֩sZ6٥Q̓h`23Y{'aڐf^EI_+S0;JMt}6(pLETC7xd}lKws+C8HDkMàyWRϬUI!\jb5|Oq \GxU큧G6x hN9U'avyq暼LDDѭ0FNktpG9ֱrLLpg \r < Ql,4ˊǑRj8lx MHU4}* ^-_1u>)˧WmEN%Fr]ylĜsQa?|usmo,QkM -Emvy +O9!)S D͙̯P{r(b9s)K%C$M aVƈlμ)`>A+xf!~Iw_GHhNz“ki`sa28wEOcYYb/".Ify_ Xv7{ZToQX¨u"qِ,[m`/Cʐc!ogTpnkKφ{"o*f NM="0X&܇ߦM*6nLp@+"ץ=*,"+O#Os/8ԳDTBz&-]%>qe|HXa:nD <:SwVx@XYm"甓3xm0l{ c]QWKϡ#\fuD5nven7^L1]a'+|u8oH*ku;Pꊁmk7/q ;I8 sx@ g"?n_@ fZwOg^xI~UuZwJiO'pMD'|֧fM'?D0'Mxp, T֟ _r6+LDa8U=UG@೰y@ _iz_D>M s D9FᎠ_0je.8,e gŨZ:MSs\NNJDG| w/̗9SEByC{JYA:+瘔 j{m`  ½;7SЭOҔFI::pi̡knҖ#(N%]%8T8mu70b qӇ)h? 9mIo t6vHL/ʿs'Cbȸ|SL"`A5B~}+gߌBC7puЗRuUù8r%})akppw7EgodW?\H|G>;d'02W$Ge[:!&eŖCkwzu'`wJe:-1o(:~E+tE+8JU͈z[‘xV9 ɫTI>Z ;7EsSFCN˻H v=O=j)} ZAM) ~>x#n|7sVM4l,/ZkXWkCܾDn~G35tm{ᑊH ¬cU/'5M b5D0Gq] + }4d e?K5 sF('HlTpQMCU8Y]}I.Q5$`(AP*ˣjMT/ޕnR[̠Ccũ&\>ߖDwr31:ICI=խ9ըlQbLD`__OGaNn~c<]/OGADJ'O3sTynQ_Ĝ̅mcWO8 V<< . lml8sC@NNMVFr Ipg/>S>}6&/ң]ⴗ ~xz(ЉHjB)^FKl:X\ҸMwwR>ۄ'{;s췢5#\w33XΫ럎#ިfU!<̪2#b50|sF0T3Ǭ}?B̍ܛpeo+SCourgsll=\;:Q?H"DΤ ù3Çѿo)zm[yLû.49zv6՗l,  R Waeڈ lŘPS_ 2wG* *A!TeCh1l,%G\G h/5FM13QbACʖk.μh;^s#3 6zvLn?E,g隐G6fuL.:y:] 9by1qq]__t=i@w8uIAǺz[d`bB'>V݉H-oo*E#R(@eE@0zIȁㅦC:Brw2<܃E,c/EX%W$)<t]/N!M.6{'QCj> Q@@s"_`"A^?_ kڕ&ykƐlS!=H/YZxJ2c"ҵPM̈́|gZ>~b) ^g?L FsA/T Er\~ݎ\>륤J 姘03U-Ai&D\9Bˉ*$a؅T "_U-_ {M}%Q3J>w._ {/%Rm8l$Da,zWn:^a5J#υ]u|QK/?yk6egKa{R> GG55`oYh (jzrmwB]U%x(m?Jocdi\m]psE -x(lBv!Z$Gdi#:_T02nQch68sdP 䩗[d1kX6!;O94e=s2nMbygD]RdÀw>4q7UAk\}ܫY"i[Y\l-}M>=TغrW5}UBk|Aڡ|R{Dڼ<%A!7Xʩu!˽1C,^lvl꘿~%Fy邾kn/9;DOl V??Ap?`֚']|hKy!9etLc(c],\“hv?nlMK+1]d B ]5? ]Ў1ElG9_!`ۧLOGPԚ}!Q.;td1ٽyD&f`dtՒ51d|FW(N#ԾtJ=HF|՞%6ϐ==J{BHeR5M◐`qG/C@]E_rY$ܪ. z ŵ >(?x>6~{w9V^!bjx9S>E I+IJ'^˃޵;/`9#u!z!Df3Cdk`B-h8GkמEW %g մ£Swo3ּįe5[`x3J [w+Y;66T8z(b^)A w"59k踉,E"Y/U+Cx',Bw]ĸzaxeZe)"YJnB7Բ"۳6j 'N#L3,-]0}Rew,0I Cv]T(-3vL,1=>Ν?nn[vT7ӟF1ރ@j]!|k kQ_p7ҿbdEdv"\Czۉ5cy< XeX<~푺QpyN3Wc>|bץ*(_ۙąoA<U )^c̶oIcI=#-Y"wYF 2beb! ͆0A~QҨp"0N|uo=iv_E^uGf ܕ[WY%+*3Ujzu)Z[: x|^UFgFԂ~ޟ j)G#ˁ펩!$$2.F;Cͻ=H3'}MQfޡC0?V1eff- 8d!ATY9=kzeo v ^4}D-4F~~]K~(/zU]5e![Id#_WM:!+}\1e3p#CG/hP'"ZuOi@@ 7diKk'21ϐ4iBSzߞt_>e.z #mm4t(㙘QUM|Xx \)~ (PV"z;P_9k^H]ocl(:.K1{wI8>b3Ijg~!臬nF_P4%wKd1Ҙ+ *'Yb5Wl Ͽb:~uo"?1>q E(-_O '  E+Sq]tZZ: _ٳhfcy6GC:6byxГw "r'E o\[:g+;o**9u$`>}˃l9!4r|/xdMi+=]ls~j OݯW5TLwx7$(+Eom-7!q(jX?ʖ-̧O_"OK@:k1B۞تN]x_ۡJs2)$ÿ}F{@Z|?6Wz'2c6/KÍ77-4l:ϡ#>VMD~_ k!؅i졧.pCd°r|6 sb;|Jy2#Qgso߰\joX"/WȦߠ jրHlGmDz>!$zғ4ј4TU9Z*&Pbxt%V .%~m(a טKA~뫍ag0ԢWf-N7#LBAؒ$e{VȜ֬ ̎6TI=+3ʏìEͷz]FKx|qvsҞ̵,9n2~'ޤI9 ١ոEΟ%?)ґUpYo; գKp(vZy#F>ًS4 fa<=P G l(794sO"IHcjdBToᙎ3 ޺GaXVι4" ĩ Yn<˔ޫʺD2/;B0rOPCtٮN=ދwrς!jD7 E_~0,Bo'Fpҫ)AY]mSa8fuչ#==jZB [2Ǩ b6='JbF`BBr=Z{ϝȱ!c=2p^i[>'Oh?B*/#O A'h`AUD]_z}\3⺣p7o-c3&Dd$G{둾K$|E2Ih]w^ey;ƕkIȲ8Y@1u5G8WH(1BeuJV,z/H4H7ҝK@DDJP "ݍtJH JI" <=sϜ3sԯCWҒ/Za;/#w`|هiNl  eֱ&(iOK ,0,}_y`[V qBj 0s5x*͘]_A7%U'ȿK>1w5l[F'^K{Zҗc!jǒ~7u#3@K<2ȉ *>O!mچ$/F}Ag_}IQ/pnB`8>d {5y 441񍗈̉JΞWTqA:/2g]Nz%?je*a҇^]_/ "ȋ$QU-UCpd}se<>,|(tU+ Hdkf km[s{SswRX#RH{/3tv[]W zAANay%J2 5]?F}kG C3 2"EbAyX.$ffB1 R&]>pΣ`92ecH~.^gU5ž{{d(JJw+u`5cNIUBJr}pzfJ3QꆹxR}S.1d\(A2 Ӗ+tm3X<۫Mep7׼RRx7!'my=pģ46 rp|M"4Ɵ}|ݡ6^Gj Sn}c?bC 9gOI>&3¢qF B~X b.߅_A^PJmkz<.rWg@N vEN3$=Jxkn\/& Ǣ9 Vp˳JY_w iVdDɖ6AFBZ.c_n҆=%+jX6U0R >ױѫv)1}pVhq6I4O:oK J7.k}gšTE"50CT8xu>OC鯤}P{=Y$\+gOt$/v^DnP@QsD߄Bi.{V0x^׌u;ɦ>sAShA#f 5ea?dl6J22Tm*čI_dOp}0rAK0OFR CsNR=~tU݌ksb@q0ƿ"Cz6j5K3,`l-g&(uZVjy<{/ȤCll0_{ >V:wggED 'Cޟk!-4.Do8xz^vΊ뼲$R`༎hĄbKwL G]0dp)phmDPQms]y6BGs$ heפdsVm- Uh 09>6̓]k#WVsͮDv s!V"!u36D6η@hvvB^)H8 onA^̋vwPdPǻ^8d.}Aq.Dû_}BcL!TL/\n }6dZ<# Ґɝ%pwާэk og?=ll 9#NwhK4ؔ+Z~yGNU.Z+QP?8z c}L-}0m~4D획heh[HޏKǐS(g +]Q"6rpkbq.{{*P:? y[1PGPliT sl1x<~q3Nsi7[ 0>5/4BQ ;sf uĎFBokq'#t7/s΄|FX/oBBKY+\E0׻QmY_kΰMG;VEGKqϡLl.kDq^ a/qGxo M]:gc=(4^>Fe;=M]jIQDfF!aН{Ty!Bmߍԁ>1焹w`1<ǂIR#6-&{!^jy;CZe ūI0=iZvֽ?fo`ʸTն-E~*P*A^ٕP4Aw`>kP3OӨ%NVrmt"9'o=P@UrGGԗ#^ИL e3DWw n"\oiGh:e:?}XORczXV${͝eX$t s,!fP8-w%5pzm)?l6܀tbmUH2h']/ Nt~ ͆}& =XEL nkx%o =4{MS*cQC'. ~~%&^hQ(8( yٶqۀPq_lE;!Z݂ŏ0"ct&5lVq+0 0AYKT .]^ք.ߔ!)dz.-5х9U\~CT$$ $y_osDt0>.(_;u>$ I5 o;@Wg]%s<>ՙ:+:>BuVZt-r%+B'  P M41+\oDZCf'e2PИ=Oo-uʖ:9P%y"d8wΦ;3lPΔ®y,WL, !8<7!TY:њ彪mlσ!Ũ9L ?8eH#I1O92@e̡]katʴ$2lfۆnHmZ+ިCݝwǓMz5U,esb0Β'2E'__`rdz{PHC!q$~ajH=ⷥ?0tUH3H }#{;3O+pZr٩OzyCNɓP5 $ANGH/ʔ߇.;W`trB;nO5бf-x.x" W(‹Y@NXR7c1q9"Sz(ۛ~0 ~i~YJm,Vߵ!sO~<G>o\dreк iq _CuP $ዑ?%}OBtk2/Uf+ٛye\HA-8BY$v,v%|vShq*= HAܜXNÆ99H[ G|PAmw"b8^\qG]qSEn>&X ua?&H#2'JN+ u7Wڬ0h t "Uh?: 䒌q>`*ƨiRTR%CU&?>r"ʇ.?;w*iTy*NޛXW9{+4?vxڔҝ:h!v:#|M*w3ɋ8Yڥ8rqBqҲޱ2f@axmG~ N=uI:ҷFO1=*^ t2ӄTO&` + ND |6 &Cp |T)CI&'(IM& Y\(?y{"mۖNࣜ=} o8 ,@VPO1~i n(aŐyVKL΍vG&D9}]vO8=!^PmgMv!ZJAn e9~@ NjM>+yop{/ڒ9@ټMr,s<ϼCM<ӞPV[ ; nii)W- +CFV!9Eڱo<H0~/s/ͷݠډpNBv%anYAݣ#fH~z?Q&,Cѭ_{+ُr>} qG\| +02"/j]} |\mҠ V2d{BmGڰخmj4n+ށJ_~PL./ +S~3&ЂÏlu9 3BjOm(f<n+ )2lVMi p6x 1LJy3H~dl= !>3N?hzBZ_zЙtVC׈4u9&Zvz _M /h(R[ !/ ov@qc5 ߞ.?Ec%ja ( QznAymgjPΪ =;tNB HelKr1&i~YnāHY^H rKy*ޫb:TOa7T6BMA7[!tűN<!RC]?q#4>p޻79_YC؜>X5ځx".tW\(kĿ襭#Y(#U#Z\oDiI…^-sLݲS,K/U :MJsbM&ʽT~'0کZqҾA2i렟Y6tx& eFOw8_lcyEW(>AnJvtH(-4}܃ Ώ?gbf6PkM2ЄG6F7Sd/w j듇5-ǩ %6包!KE/mq(OC@3L[ϠEEso\V2&9ֆ 1?M1|8^:3$ɾ,!%^ g>#G[N3ճ):)pkWV J6[\1=[fb_OB}۩elp"}b:nFT70{2й a-t %=ߒ~P5S,V!I^.ĴYoUCc]{ădͫFm/!E *LZJV~<^fD<5OC䡻-C,*ZE!)(ڮXՓ~K'N,3ϞBPD:DݳkÅHs(/yq#nbh!@3WF1kηIȁw{]' _0*p5Z-i,P.>s̊;0+HD2&)< @!.T\ IyyĒP}!7N]u=t .:>o”C]r Hr iZ2Pgn<5v?rN^g}t03#:,~ƯLe1{cL)_^LT&6I\x#j-lnl-a0g瓂γVy?*;8gb(L9Fp_ԕbBܢ fnCTSŁӻcm jȒR!m(pNcA0*;7"6׋@]ẅۜ͐3^2Dx)CUQ؎ HyᾑԌ|Q"Xu" Ç3R>@k}oeO_+jk0[dkY! JU{ C. ?6xiT~1noؐY52DE<đEf-%.Wl-P&}_Ht1N> p0TrC#`9<9QԿ`s ]]xI0 fL$>BXpX3TĊwpk7=Bq`u 8-&Fж,/q侦 |HadRȚ@ڭd?%)$t+[^(7{kL Ps̀H+_hYR%;аɑ*L#7ғ熹4T]V^5CbKb#33!̜_$*fP%?]@ AdzKg*BTb6;],`ou4|[ǧzPDtmm\PF/s7 ]VI5{cjOjL e&3+> Vk=U\ >U@yӁ|ՊX8x}B >8 -rP"r, ~4PGSp *cR%j߇:ܦܮ+倸@鈇sĥ2|4v ~wd] > 5~^sh>ݢy߽2*&y 3QB@-4(l?y5@k-moH@8K&ЖHaM?h7JcoA"wY~:U,wx[ gv]l S|D| e{NGjjH1m{0qr'fN ކr\]jt| VtRa', YK~ĘMvQ3 p0ׇ_ìв~'T$ú I%CNo;{KN},4>HU{sӕRMu5 cxVLaE 44cK+% <[l6L \V-(J{uEW2 4,B:ՙEB(O!bxe_o/!ޖ(TJLx*A{Dlq9?otOCŏ*vEE0īG1~fnS i UDuZ =$= q~Pz+]  Cp'ac]Nf Tg4)yڧ:}bL0qW=wB3,Nw/{ ,p~*[Ua@!UC aE^ݹŷĢ:ʾwRI^|}xe&S&27ν Uhވ&Ce9QG(!_5|jWoC֞'xJ2mBbljt0K:]ceEEKe' &O;(L愈=xQVԋXeՃ鼋0mAAzbh݆?3t<~0 ®w8A˙mܚ OIrb-B;9z&RuؔJ̔W&n, n_h~-?c<TX@:LDrw/YZɾ'WFnrKN@\wVoCˡK̂PmE\ ?{?}sz!4~i7 d_-a* ym)tk@jsf[TTcY=iַr-%MVZi++f#$8fCB K<2ro0Z{ Fzlzc"Osu!=T-!zx./GmPbkyן,o#Q7Z4&ٰѩ {ꌉ+j3 FW$ #byЮ (fiǣQQg$FG&Pp ʮaKM&bse :o U ?qьex^?xz/x$"p5WFbaԈ9^ix \D“r+`3:>&$zuvx~7?3QZSD_skϳ9U~bRFͣt/!1v$3(P܊$^-qF",7DUnd>8Z3a4dD,v fDr#M1,"iKy% 8)F#?ᬱ%f峣dͫQW۫m[K"[OV40{G3OrXSBҏ. k}f?z J];8oDϣ q {n13Ĵn VFy.[L?$S~^SDqj؃ ͜g~T7;.u fQKh렎$U".Z'j|]僨b!23SkHc{>+O칃( (#f IĦ8D#^Vd$!N^o~袖Hܘm0a5g * }522"Ώ!8K| bkI"v w{ף:m/Y#odmQ*9At)H]DF6DS1!%,ƙ6l8ύ@\Ƃ%ߋ(y-uI-Trz{pD+.)vM!?_ICwCmEUإ_[Û+.8E]z6 qX@"q2C/߿*aOnp*y#dimVjO8IHqp~΅OэL1#ۈF|-x?eqU/ qPWA$[ᄚ\B{WS)"^I.h$cl^vs 4&9&^dAEV؈%c2 "翂Xj3vlUE"/sꑀgM* "YISQ#V@P=AFW.sYT_b#D2Ssja EgqSZ"]EŠMbV(*ZFB#|ȳkcADLI55"`a?wW,b%,G5!{ab1w׳ ~#N UNk0ey?"[o"Mr%Tr(ޓA8Ԃ'brs0`O]1;u~ǫRm]D W}i9+@,=Ip]>a2,H،a.'NhV*~ȘM9kz=ˮ|brSBvq<ģn3C)GiȀ VsJxC'o rlz]4f%#ڝ?4H*c'?6/@V̱1<0QVՆN5{b}GѵO6 .iO`4啭<@l* !KT59bֈyjB #gxG _%L#]YΉ.N#fpdX#9յGԹ7$o#jECc%h,9~E5,ͩ5kbpU$_CՍ 2| Coү&m۞?ခ0_-0ĭCw Jd/H~>G䮷TdA|v566}I>[*#x GHĖ3 HUI!bbu?"^Ve} {F GՓH湜TqL^@\D. MYJPD,9,Q^/*m y'L*D:2z| bt]Mqpu @ ǙqMѣ$6>x Fu! k?=K{Duʄ$} Nє#z17PDM{\JNxY I)}m+E,Tjqk8%<]sr7 hϘoߞ0Ʊ Ӻn!f[Ʃ?5aƭwS6Awatk}=z?nz/F {U# ]6(7_DE%}Qx cpoecscM_4$iiT*!*٣HPѲ3+#+ڃҰ=]x^=?is<®; #;9nҾ7Sh]]8nevW\YyX,V"w ^H߻~5ܫ2%Peٷ)R;>t3<'Ř]WK ?|#'JAQgd֝4"ް&R.: /k~]j=obȐyh#H*TXuA-s-G3FwRY"eVK!&О_ؠBy|"M7iUn'WA4tj5q,DZ'~u2SI(yov)(.Q X#CgӹNJN&0~eČARډ@(xc.]-"!&aEAX>2N^6vB7k>`Y'y>&@͝[~u#;pZ 4Z.||»=P "5a)" #wBM㷃/$kL]-Ro}]`|1Cm]#G\!I: Hi"S WpZiqϤ{uB#|]9tX= ]@_LZ񰢇ɉcUH 髛W ~3z0'OBI0*mՓVXc Wn7HxTTq_ᇔʁ~ 9bB#/nqxzo\@v]e`l~YM,Z-)&CzTmnBvpb{(F2QI*|O}adew{Jʞ)ĉP<k6z(OR=1++8JZvPhP4ŷgA=O ;"5a学/@97> BECDU/(u-K 6ڛWRpvnxpHg0 \O{^?+ vռd4>Rnq8ܰ#n@Eq%+G&Xb-l?jA[giw@3 (Β ׵o]^Q7b0AqHO/]=7e^A~n Z]΍>GAꞨT<+>'#O m5Bι^}܋3N,jT8- @룱PV*Yݷjd [֪ mWmy!ok|w\|z}}̱X 0Q%z) b*|' +&lO!Nqmz6mY+nj=_ lИI}z/?)kWoj羱io U3CZ[hKϪVͻe:ccYX@cs^qu-4S`BwS5{ru`3tseuz6pZX_ {(]f|mn_ـCgjb‚~-d~x+66h{.)^D:h&OnޭǪu@ NeP]4]]sUF^&B1og( dA @sVVoQ>ǿ3~Arˍ񐫨X $#h.z/6ↁpN7jPbE> / b|e>' f[ZEGʇq>b`vg5&pF(\,-(Qd\{9D=gŠhN˥{A{Hڮ2n5G [Cnv7ax? ;@-8IÝUA,?+t=wE恒9D8,zMԱj]GK͈܁gG0 O::i@j!A W/fkdKӃ`f[Q Wt}J3fۛGŌ~F*R%n}N򵯖g y_Pno 1[WقB.OlX`oqh a% jD/c):UD WKZƱюe>OE&oC"| |x1L5˖3+ɼ_g~jƞ7cjwBX|zX\pLё)VN> smT jt#|d)<}_rzZ v̦1C֚?ZPLW g6VͤmU+ 2# $^OKPvr(:BlE|!wFqu b+úeU$_Q(Wg&YOwm<-S} kp&ټ ݇Mm`)Zy?14"q* Oz%$~8]@t~#q+-Œʧ@jpPʝ5V^l!at3B5m rK8Dj1X*]nh-T&}}ayK6?GI>y :op}g22(N7>Wăl`, T`|;~ftlwSrr !ۉea2s1xхGY0ڱpPF #S`!Zqp M|9y>i'D3UIbL\6 ŽA/]ck] @'05 RJK9~8,Vu?# .vK1@x%}cdԫߡ8+?] qg:0GAEKXgZ䏷6R8"%ssOɃ!zs:(Z<ֺy i5GOi I(eB50]] d]Nb!>O{_ Wo¶ϖ"ƜOΕx9?:8{#ohOa,tW]b @"p&UO8ߍ'!QgIAgyF bRfڥBbh=M P+IP@{sRτn b7 @۝ oWuB8'4#-ǏaHgذe/>wC"(R |H =CVsaH8yR1h^8uw$K?97=@,ך1Jw!V~5 ?3Uۛ:$rtͫU5|l6OM#RaUOY#^9fpXjᦑ)PC*hB='uA.FtΝ?ofA!JSol]o grpt_ d+3NռKf?Cypc^yfWA޸-RyY2 ׋VKny_tRJS7 &c@Ӹ5Z-N7#@j!oCʞ; gjnPԨGBW{`zU gz6`turC?sEio ; L.I(+jӋW nO -ԛ_UurSb{/&jKA t9L@}*Ւ}rAeyCI0I>}*oXjCзGO3G'uXO6t]'?Yu]))}J!dXRwO+ f6s;4KANNh44fCAzZst![eE_ñKڢfAf`MnclGvfU!VI'+] 9K)z LwZ@{[{hIy-\C5Ơz3JzsP^c1 P[_7pb4<3H2P2.emRj1йuyvnզY6={:~ Y/Cuom+!lB&fKH\1Y [>p PPD>5Boll+j-ԄJDfo4a.wP<#(ڎka~uA'A;$DZ ~X2ORܽԯo;zǟX)8[LKkp#ڙ_˫j=Ӱʭ(DzrR.&c yuC"z(B(DSc++Ri1IV eemP?LnN3=G|M֝ ZݶO{[};v>eՀ򾔭M iZze}, Ү 2F,|pȬެ~8\4П\~`T5I߈69;1ezʠx+fqW2y*nGq5c-1 B Btr&Z^wPztB.6k@,äcoEM8XWntT1_3$M)8![xqU$+HZP&H(L_RB-}opME}f@*Kr`:R8*|t? ӝDOVN2W^69}P>}&Y(7[CNڥ2G/@0+o#hu>?sxG]L]fiHx]=q?΄aWa(CSW}?1_N$Pƞ3P σPq['~x %+6`;8{yK85?E ƭ`YX3XϔRmX8tԄ6M<~X}TВMԸ뼃ϲ1lz4:ۺ՞!H̶@I27↑P%)# 6㺳̳,gL |+˨{w@j(\)-|} ?e;/ ~ A >\0x9bC_v]濠wO d?#j68okK:[ Y i Xڜ>Q?M'c7CQxCLH%^6ZFAmk},0L~(T~ q.w8q (lXCԾf 2¼\~7,S/Zr5cבO9nNA9UgsT!|!s 6]IJf}8K B[Eʳ m[XL'Les1Ў?xJHKKGCﲙoN"^eݹ Aܠv3ìēTh3%]T‰Ƃ$jb9m"nyjZ}?b֔h/.]Ko!m!1ϝ}U4m= /џ*_=\ݡ\2b{1u.hքtR˚LEٕTĖO25*wu%wΘ<3uȆ\iyU;a"JjZ|*'&a=R*mN;NP3X־#?{!a,fMs7^a5OЛCrGe 9RVM j-2܍l=@~thT'*5θRYs'^x;dUUc NxA;;VC&;X30]#Z[  &G&۞ӷCg@.0ݎv3G(R]D-$Wr3]O&)o+toxoZvy=YP8kB]6sdC[j!R- BZe?V)3h,6R *fRp +xu;m(BQpPH%公Foo]gp-CODCwl;š1O=< Ѥ mv?q0pOdA E )-'Bz?q$A7P,mݵL8MV`"u{㷵u#o@ʒYh3"8[|AݯSq.!eVd\ςXFsנYDFO[RE&wb*RܮINGrCǡ0xh:7Ї aFq`X}wA"p;u`;lB^Ciwa&?uzaܡB/bd[bf:G((ث[z')y(?;RapppêJ9׿V5V 9@ (vM f+Jx{- 4Zg+ɂ3@2yg=#z:s/7@T)vL N X>N]<J"/7>ۡ=tW "O׃P2g8)zx)G:a,Կ65UF̴DJ^34vBCFfh|8'dN:0^Gi떏#Jw 2Sh-L2=PQ.K_wSWݷfk\cihkuģ!['ͩl巡$g#r z,>[AK_@l,z\v5HV>Jy\e60$!ஶ4?ven.Rэ ^Q ExUpghE^৅[|ҩOlFߋ$ M6g+>anb [y ;wyW6(-r:~nLݤC@# jd{fXпs&1r>dP26pBUEak=zcao TK~P"3%@[(b5'jXb08Q,b{ih+WeEm^+[ySc`x&d!wPtU/3*o@՚ :Sb_uL(~V5WRtEN7[GQZZYE5s;}N*nP278lY$;Ð}|m5byĊ32_r96R Pض8%"um n^g~hHW8@5Ϡح5) y4N19Zy5?|b| R43|_6RWww=B J i}jʃ*',sԨ 6H~5;~Ot6R2y5 ~'gNCq[xZ_P_ T7oIi>_J~$Jވ `uV(`"ycR?"@=mYvtqdrXrw=K%f3+-D*_UwP:3H :/D.A^~8۔? vu1;w+*֪BI*Y\VRy')4,{ R>`E(ulw=L b"Uޫ́cSRx@Ԫ3k|u"y3敉}YL4>{gޞ:#dN5@B_88ry|ЍX~َ#T ǡɞQ6P٠(ZHa7WLkه}27rp78#N3(y#DddU{,x7cExFi% 7:%BQoavI_ (t#![;"y  SM˷jDNCFPp=\ . C!\eMۈN7bck-(*,HGޢn62Ĕ}!;fBfN`4ug7D:}H[,0YfVd8E9 7cڄ}ۈSkr@w ɻcN 9?nvH[| Ś~~x;KrOk0,چU9-cnW^G> 8Q8=0Z8p{"1-.;[/Bt1[ޮ#3Vy΃ZN:@Nj{[Ģk;+A8CEn0V; jQ3<"JSqֻ sȇ%|Ssp̥OG!|el ÏO'Y깡[f@ULq Zg'/3!&{YsT!r~2A 1n<؆oݝ9;ԧj#wt^vSU=$.e'@А*EnÙȝ\|vκP}|> bYR3uCt&_յJrZ&h6r&HV zG!dA0}r9A1l 1y5/)kKŸcUj+Fez՞8(5u~UU?LGAs^6g4ÿ}wd{1^[s? ,eV5 g|rA35}Qx3̞S-ر\b/JWyŊ0I=K9K!cy2R_W{__\- œހpH B%3 79EHFZ]Z!T9+1wTWE;J`ui!y[Pľeг^u͸N:{l/y%*L7_}Lc_~CbfU dF_ z?/8xϜ`Lc(zѴ!y+NsC^Mg U2ՠ,/8t=ēeF;n v7]oXʟ d8C#!Ixux-gr ‚~Hup_P-AxNe[mHPHW/s{j~Z6f2`}!Ғ)kݓ+ݐYw*bH y̦~ :6RE8,B|@*$BpʼV[_@ybf%ȆU)׏/>2VHє4nm˃bsfQy9'(Ԩ[_;΄|%du,c3_nϺ5 ]6,.XL^tݛcA=̛L>fb!'"J!P'v @owgfC!d̨${qQW+ VLW`Θ âS!n@mͺp0I,6Wztdu6n(}y(ј^/!Y{Y׌Xȇ ?AQt6vpo>zΗ} / w`ji.@R gDH5J`m81{Ο f DU/X5]vˁ>m̂Jb#{\B >uԢi359W!65 nMCĜzG8:ZKqHƒȞJݭI Fgǟ;z$Zs$~5|RZv&LW#cn$;-9Ax( &Ҟ.:xi?rR}cC $< $ҔPy:!Sh/utUs)$K>?bU/OUTS]붟OA|xHOM?'(&sЏ-$ Z$g D +'yhˏ+0xJ4+~$(t›JKp~&ƺUӞ%f:kdj@/H;a_8mAV4sT6~ R mF~' 5>(Nj pMyB0«!.ֵ9RLO]pB@hyv.rl7fR* kf+o0aI9?,IPinY1Q8HM%%VgK<0 JYLpToU$/@^-7>\! 2 䭈v L V?H/P&f~ 3mhkܐ3]$Z򾏽7:#u̳yiL`ҽzRg&, Ys_D\X~PeǤiLMdsBNpǗIsdC2mEO +Yaޟdn FHvYQ kᐽxcSk- o=dWw_5(}`ÉA*KR[@u?7@XW!g9kNdG?. 9ѣ+fL*:-Ї6֍fKϝ"?yAqޫJJOc__i+ yZXJvނZ_0ĭj)"IdT7{bmP|TW'Mu˛>g nGzdDD |xa^1am rPv^q0#vUAѺyp+8v#  C=a2,(p$Z5jZ_Qqi|PI˅>9,z̹2{ۂoJX@i֛[jyn1dzlC; w761SͯNCyP[#!G:_usqhFKJH(׾S0wT4y;)Հa#[ )/+)KPc%:UOa#tϽ9@ӸMTwzo9 %Mj u7-kV`|l_gdFaDX N),MMx)Ooz(I嗟 R|=8~@B'yfKL0jp<}~P< e[sÛas5=d lYB @5W@unl^~vy; ^ Í}_?k{MAݰ|zTeԬ^H\rzY Հkf G9 ;}c U,U ֩N΍d ={2,d> |2/?R f u$;WG^Z63鄞;n`EYgfFڳQw ˍ]OR$@| dI^R|9Pפ05~a L A]6V.9CLRRyP}Ť2~( d{ߚM=~q>2H\jQ ̚;/|I[:C[l`4kW2X|ÙǻzA~O^4a]_"&A^s݌n Tq7{gz)R쪱P:MЎlXMpLey!a'"lT MUA1ʛ ٨e Vv4@_ 6{p}OEŰ*q os@۝SdPCCAZ0 šW /awHO$(_VB5 sT)CU7ﵔKPC—\94J(a‚-vBgΫY9!"́Ɨo ܏{ZLW1goytjQgrG]:ƁcPR *Kz _$y~qL΀j^k;C Z`n7Y: ~}κEn]/3_Pur|5[vS/#x`-д{키S='I;(,9Mڼ51/> .俘}Pub@|ӚUJk->/cOBE y1hW7"[H ~8 C5)P)ݩyN)G\]#]G=T, ^{Jw'MpnUց ;SͬZsмB=Bvj6=Pe688xX3Fy<o h'^ HѠHoaJËٗ ~sgXQ!3AE0 A+`Opʶ03M?1CT:P]Hʫ!21p>{эyg"6:>tpMЭa_2;H{47C^ȹ6 p owBJqի,@;E< a{ ~}.V`28ȶE`@bh,* wJVobC.N{E_ԅ ~xg{-R:ohћ ) _l$, c ZU\<П}~*u%,36:flt5Q0'i'9M(ZwՁMvPr}_4̾ Mm-GEiܒ ;2}2;vTJw׹pF8-RmѲj(쓘㖛4'8:G(>P-i;\O=cg/ɁK\K|X'?BmOڴY 4|Z4CާW`%hhF o΄FL ӑگՠvXRtqeA.kvЛ-p\<w ,@n jN2'mFK؈ o8*'G}TBMgz/1狃b% Xv no$8/.uLMų$CkV8C_'N_+d@jc }E8ކas ]ZԼ}Nm9(kxAmv1b`ږB#4o*tO; N,X9 1y!PYr ͻ2 ߕw gDnMU(]Ddy΅͇M`0J/o)6? dgNI&Va&ȹ';, 2nT~̠Wx|U-=z +(T5i$M\J}O0|RsW̍!c24 mɉ/|zi j#J{2rc 'ۼ.k'~ &]E*9F@5p24 wg{}Yݧ_^ur`=TX좱{ }^&v3T۪}9bP Yt2_D'x @~3Ɯр SVI{vSmT]N38|%kTy7S2& o \zQe7U='P/_U _y|a(?jqԠ|MkT~&[@eZi f(r)4|A*u.~0ΉYoק#pz=:l߄/~)q6aW~'HEpvg8so^R0OZtn <zHB@M38 zŁNdPqdp*V 0cB({=Pҭ}U1KiaP+5>i]C'Ol?=53fIyGavg}\s'vew6lEWD/.?r!vyhđEޫ/}a׺9b*bw)o U?psɕWM0ʞJgl ;䭻ar4HSΫ@H*Cέԃ/B롐s-֤;$ARS?妀3. $nxM;۟CH暵Tok B]MVhٰʳMO #ֳDJ [jG\ M[(O 8CVZ^i+=ђ*JbUooBAcEݥPLu|=ctyek3 8~b`pZ2M''C"?F2@:|>N(4څbm9v/M[P%9ub'G .a >%P*xчw>Ümwա-J;M} )R#'i=kFgE QPU!h s&~ș}x /G-k]ӥRaJ9$-7@8ŠSĄǟC3eeE}bC;8u<;vrŭ .x>it'w͊S o|ņ-? ${5D\K`h_`"/YGwvl%IU ˷zgKh_7oK)/S,͠;/ lDB|Nc"7{Gd=KӐF5?dh=O 7*_V8I  #oh%d_iO%R2 z򡚲(,XKFrS!R"i.g^0Paj\YvBA:rgLSNv\ [7Gc톆f"P>}t`"+j!^vM2]_(9P7m?,gȀ0Mr 60j3#/Bim"=|~ z}$ۿ߫g6ԝ獨<6,4.=m:Ў~62_ӂ_&+S+5SfxoǣAb$_L:99 g׃]wݻl(} %b#E) WrEv+ 4cNg]WP}_7)2A.o_kfߠNlR~6ߊer#ҡu}AH9pLZ[U }ZgtyzրQ鋲P_\[}ZGǯ#N?i6!+j.|K72=mZZ61q+ޕſn*[v̉ʴG:pP+>⛤FĞԊ* nUw;aT4k^0@4 T8%^*7Kڙ=At0ҸœSE] zq;m?҃wS>yiPk)ikڠwD/DORQ}?;l(',9 *~fÍ(/ >ט;ɋ۬Ua1 c4ުu$AE==!_+vJ`F&6+? d^]&hʭ MKG7Cۍv9P:n] 'ő ʗt_>qjm3𷯂܃mPJ3_KOި ̕/fN/: |~qų`QV5MQ"EXY%`]. (.-p{4>֏>z&Y ZFfD"TSZk Э~yO+?mPn>ՏU΂pw^"MVyvX@(R!B#d/隠K֘b Zfp_HDULC'C'IPj>!:9##ЏMV*r1ϰ~Ŋ@@ OF)yewg?pTʕ`>|х7a]+)N7L;UMj~i>6EɫBcA[c,h8u)Ɔ?{B}2o 7tz'ᯞC] "o駊`s A^6'-xd ~p<ܲ(Lߚ<? ?o7ܘy-'*nG B#"hm294D$OFϝtݪ( x=\rd"Ο)yrGdDxr黶D5zŲxS?vt-Jc`z.lp|Z/7gnp<^ 4}/UσzgJ)>޹LMCI<D}(e}<q+[y~.l>c[nZ`:82Mr4n?RLE$Ro@YMjrsľ,đ%Yt+HO-裻[w\ŲT^X.d\R @)UA/۸i$RCQ1I)ɂ]g ׼۷#Z2ɤ4?H&3i^htQڭ| )@qhmEho/|Xnt>컠"d|YeZm( f'z0Y RBUə ?,MlϜQ%e~À{˵0:v͡ yLFĆ>0.Fwi{d+xk) DS 2dԧX$|5A* ]y';ImeEHr)9w a-Dm`ϧ V7{%31K! kso1Ц! ~q[ёPeFkDT5vYBE/`Ƒ~\uz;?V_;d xYPYcf G›d`6r`x$NatI'/<٘[fqSSw"? qJ$~"gr:^a۠]TXT?8j?;'·DƵL,MgB闤HXtط%vz{cu%DkndBt̎Zu@:-7xF";`˒~*itӑ~b}6Hu?4̻s9 ߺ ;?l &x Cu}h{Enga0iP/[2@T0ԢHmYf0\`9_h{?nĄdSfXt)B^iu~PW>jڙ3/BV[í68o(h+Cx_~C-32;G79i׷O-Ij;=@ xc s=R9Eח^s`.XU%Nh-*{H#m^A3FlUP>c:*t\TsEIّ7@/}V%ۃ,g6uϕTPVW )3z>*#oC\M_SR +.f'!fl/JFqCȭ-Ps@rG9j[ }}"JsQlhJE0:2RBF6) Ζ:?a}0#FIߛ9<"p3C̯f8-溓 *蠵&~j[WN0 jwxAʅ{r{$s?[:A<{5% g C܎<>ty,Ovw~jVw|!`x-T>ZC!d"Sn'}:֧`{tEZ (ʲrU20f '鿾̇^Ɯ "7^4=Mu01gr]cPP#4dzݧze-[whȴn[e:e.4z)],U>7"tu`J[PnJY+,{(XoFt健?ƓqDiS HilcM+``Um~G~Igfv)r%IglHF,dVY>z تyw9yAkwI awӃ.'V'х+.>Y `q ֗|b7UwG7+27RxUp>T IJ0BV;0^<'ׇB{.,Wth]="rK.P[ CD(>zgʓc熒2Af>hݲ)pgds8<1g~2dDR YqǺ:HI=t7$zT{M O遜Qvo->*)B~^p{p&r9 V!܄.ƁeKO%NqE~m6Dq3wP7xr٠~n =-zݕ"6 )9?~NlyOPoǛ^!NR!j'N e LnCfg NyE_ɶ1w~zAm+wyl7@sl.ܚ@ ![E7_2gN `G2Z?s;aI]g#{+"WJ\I5Aw߂3QbC^`)&RN*'_SCgoխ?&YkE'v(mژHODTUfㅛv 3jKjq:gq@(njG<;T^%uwA~:(Nud-\Hm (wΚVsB*suNspRLzVlөwA*⅐}0}^zBg=yؚOnNt P\s_ȭy/L<~/U ;Ep%P1v"zw/^7 Up{$˘+:@r.O5('e&PQX1:Q& KrMϽsZ@iӟ{Y<+zNpv lT˝ Ai<.814_};:$ Upf9])w1=B2z ]M,U۴~aѽ)Q L{o/ky}n⸺ Szn9pM @v@QS)x{{miWP>mz=D~y%ne}C1(zah _Mf'| rKmoP=[CɎOw~|'^P>'H\PnZ\gJfx*պ̢$s -^(V4ALWc/2Fށ:Ыsч *I]n+-J"_ReK@r1I#Py{AG(\7o}MzHؿ&|It\b͹Itc fIPN xɋR= _*~ EnVD}J }JԞN!`gGBvQwE`nO=px־aéA~sݯ +q7wY9qWG6ZZxp-͡9RA]gj, ]*@ij7u^ت jI&X?c_z?^p?RzG,33o̺HQKs 2A{EsU2%2A=Է E{׀R?%`[oՂ=Ue6}o~P%D? }64r̳jUHɭ c}JfOR1PVwvv'Icp-hWG.l!e uMc9_|b<t A7bA{9AYP6X? sdLͿS7M5P Fjpm[mKFYoog/ RS:./2D"H;,ut&Q;ʪXO`VQi%DԾ)0(KZ.w#HU32Kk{fHԼq6mgߥU`5]_)ҚQgm>Uҹ>SobiG2~z݀oU=jR+caj ^չ [OLɌ%Ʃ1'JM9%2 6(GN :(w@Փ529KiXvL/* 'Ww}wptpB"q ͳj$ý6VGGpne:S,R`ųR~Hwɟ3oApl +>gP6 .&E9v@PKI0~lޢ03 ~ulO`[7Q&Ӥc fkSS~Uz f+:\=d(ٞ{t+h/YBT_kCqP\ٱ>`o`'?l6K]ymXz^:u†qPrjл:yz`+|_<پΫX6vX {᧷~ i)8삃"O&3wdCwBϏ]`[Vм (rs7/[6sea;ڪ:4iĞ]yqPPXsL'{H9~7ufXR!;( gҳ&S-}lnKkLp[Qj^ OZwr?2oAmMul͛' /xP*g.*_3CDpm8-zN~==`]vԠ_7 U% Ҿ5*YkwM6tkPf(O*q{FJCCD1rs$;  Rm_Ȝ*#\Ϋ@fsQA cXWA o N<#ev`M/E?Z |uk0DoR)ݬӺV.lVuW;R7UB4QHU~kƯf"Wé;`s_Y9)U?Z~(xtmMVЭz=}wJApn6^ByAXGr7`nbkK£Pe6|W6C`h+yJD\z-wPPm? =y^*?I[?@X "wWOAǟ=Vfig7]kDì@3P~UfYuBd-X8`-Y@D\a*D.?1w/*^mci?h$oAN-wCЩB{hP^ QkpĐ IOv;;ŢJe.PxvfH3ewc_4>:cHQ&pTBΎ1[#5x@dZH'd# +ڒƈܻTѼP<)gl _FyRC+fŸR>\i48)؏шʙ7vs!*i0_=[|(OWJnt>uEemYmXc &{m"1b*ة5;TAW<"-'\pV?iJotCĻYRΩLw(+/4wW_#s #p˹>u<222[6JĸٺࠖҪA i޻+4q&tw`DW>VGy`pI)a_\Y&*آ6?5k 0/138ʒJqwBk$)=uͺ u;6#E&?Kv5uTw*Ŵ?x:`ׯށs]fI]ѿpo0hđ}]"APV}%DNGee`?[4F7gPI<.c$*hjVF+Nމ%-/ꐙu2GzgYWS#Y}'ltꨳɥ.+G>60`4K)@+˲6*lA]pU'"28q>8s9Vo˩[deB'nxfssV%f +sJ/lm@8&H0 H|LRk(ؠn4}˚ c7TOU[O 'xWyMqv^8K`PHy #X6%\(?.5O"5ZJ,sNSeݦ1D5/v %dgZ0#ʚ@)~؞d"w餳v|ܛcV@ۦp9( `m|5ׂy˫A.y!pNƂѩ)Qz|o=hq~`m>\Xdž?t?ێ`=Q hɗΝE}^`I(NJ0ᣦ~݋1`|w_D`fyw>s&[eQ\8rt- /_Vg9'+%BH"DQRY)(QӢ)YY-$E2(B"R~.יU,:> ϖU߄_b:.&-L%nix!ov}K++ $TPGy7|VwrYE`\Toˆ1zqp5~vBdlRy? ۴9g?٪;jn =lF݌?-bJT5iXM'23n_%W;*As?֍ǞU R˻C1г>Z<aKB6\x*hSsUn[n^۶wyq;fcuK}gsŏ!_qڢ~\ V J P *ȔI׊5DOBcKGDo=!^R!H@ ^^܈i8a?qe;>$xԂ}9cZwSe^Am\} S2l=nɑu?U\'>Dj:!Ԕ ògȷ!{FVRj[7YI(~{ yefMwIﺛBQq#9p&v ¢B=!ưJ/fX+oXڨ)[i5nS// 9ϝ$^s a1A]pzGuY-4P)#0klfR?o":8#yr'ERUo N_TV 8'UDCY as<torJB4"}޵P0޾#he?޶ Yy+1괺_wUjÃlTYCg58wÃTΐ|~yu-sx\@u`lGDZoBߛYFn>'>6ٴ贀v0/kז[]{pgjl[`f(]LtA;gpbolZؿk`"^? wnP`ȴ-cC~E;Iq PyV*sm!,TzNJms'i/_뎝&yqtM(8ƕnaR(\od7GRX}M 9/ L{j]47mRuQUeg&h7ծ ז"iZ?bx ~;YI,}/WOtF߸#{j9n T p/:sO|.C4wnH5\7Nk]rl\j,ݿ$^.*f ?jnYdȭz R+hKȩ}i;BKM[AD93%c57碘rZ,MitF^.E UgY@6uXĄ_>mhjNٺPHHq>_'TݓWOMu ͗.ӭ=M[f TV5R { Hw(I4z/gCiѾǤ?$ G57,JYʂnPqC='dŃZw4-)?F 1ʥUVx6Ugbp I =56^6ߓ&{B !7x}Wg(fm:<ѠqoSvY6Ugk4ߋpP[?e: ֬O3 H&(\B3m) M] uO%v:n0I?fu_}-7?7'c@5MXDIUM#:7+!=աT z,oi~ٿq)˜J7z/q@zrnq:uNW,ބm *dɆxA Bo* ZT .v~P]WT$R`Pcjl |y5SIyzmV7s骶րc]#*%tSgw_2<~q@ &?Jb-Ѭ)R;VoaW<yn=_e>.nKYֳ+W E&۪}Ѝ|7Re.C|br4xkIR)ASpn:2O\z.\+؉o{ (NqwO% ?C8q1=tY?l[5yIɁ/Τ|,k +CϮq| Wzٯk5"ԫn;ykIh }ῩRJ̭UF 6ʎglb6O@+29?l=^6eUyES'9oӃH?v0x kql\Ie)Oa@R.|c埚@#! *lCF` 4xtR.̅Ťws3L<@|{A}8c9p9?WT$s~mlS+yaɍ/U?@2[Α9Oz% M+< Χ}Zu׷keyxφϻ[m85+VJ|:jkL^qts!XpXwCmVϘAzgʂ5܁qyze'Ҹ~S%Z-ZXSGxc+Sc#8ӻuA(sr3 /NPrN?$!9&gL2b4Rz~hάړX"܃W5 Q^_iJHUϻqpDBQ|s@#-gW]-G;AÚP9&Vn:Ԥ,Y\ԛ>W2--Ahj񾆲=|#vO _"/ Үa'e&S}!^(Ұa~Ҵ) ߓZ J:~?MêQC3E.% 닖a Ewtʛtvi&y*"vr~}j qOW]YUw%:ggeCwyW;*AtΤ[t()Z${z^I6 vu>Z#|?U޴prkVpNܴrG3S}C%}D+l"=o4IvC+~]Z ( ="mm.BR[hm$0]܌jϩD*G6D?WQ&(^;;H zI/.ٝ&hF]/AG뎫PP < -\8;!-uΟtlwl7^g)?hlm3nj /ܒdٵ]G|7vQsTBZC;ysAXyT…jɐ J>~*uMsRW }oҽEAu$Er~%#۴]8k.r)1fX,WZC|׳wJt!xU^ĀVwOƮY8w&UՐ ̞4-f9{yO-Fb 9/vBQ\?ɷbQL8 ;x źm G7]5r ޽ͯ {uoz z6?$VMrw":?F׸9/AewռՐ5m>\J"}Q~$ϫؼ,VTp7/CxHzePOOI 1`gq Aվ+` Щl*-ւ,=;k%h%Ta;OAxlɻIo*M/7%G'@h9qTf7ZH=cAEֶnp}0sq!:֎ *E K_j]f Z*^OnѼ(KNNO80{r5t w_+grO 5oL7΄״˧\u#=S!\N@-%2»sfk? +i}W@E"A(Tz?"N&O (.:2KɅʜA{y«_Kog J 0EM2zB=}@SLOPixURƱ}{3h,'4Mph 324 ܹy*`N\=J:oX0xi.+o/I5xOMP=~.S t7ߑ㭂͛w_Fhwm$WAaO 8sj<}(7wA˜]Xmg/|Z+ۿR~͚O #C?{'L(vv};x Aeݟ/S/,Iq2 uۧOI/9Inr?ciy|o`gF l[hC2iGψy=}ңWNm֏fhvfz]'IC0?F͔䬓5W¬YFȜK {oCԖ)r*8aasN=8{ g6](p&9%6*lsmgͱNTm \9SRvZL>swN}E< tF2ykJ}poabr=t4hӃ,$??}*F21BN=ŵkAyv@D)cЄԡ1x˳ lOe?hz<@yڏ'!<@j']ۉӯVN¿IAGOO7qF[!0jP2B !y]$`'ܜgZ*rW >B:Z}x` Il@y_znSA7·陭wYfM΄E|i1=J8]'dlx? c \x7gw^P~5D,'fW߂/{nJ۷Upu``+ɽ6<6ؽ5dsq|g^OCl_Cvv'P2kgA-1˱+{O n+=mLeeXglKYIYQ1X%6篃0O9Uo>ܯcv9iw%4k7>ror2^uhկ+r3ᗏ`xAFE[]gPA͡iM2s #~?;bHFd(e ź9К.,gJ^v1䉁hAr|'42f=gQv]x nTid.Ԣ~~ԗpkCw`JV3 kOI僚t>Uh=a9m `Z[^<.OƏ봮u{*/ݯWG AX(hͺJ Hn5IO`Ѷ=Ќ`~C͂p1R.y⎼%G|9+eJ<ͣ_V- ז M\[pW$SzU,RtQ7RǙBt[@O-2yJ_!H&.ЋjTLgwAZJ0>W/ܲϖlj}N/՛;nI8ẗâ8\#gXMG5 dEW/l\M*-+yٛƀgPȀ3kj_@UVTܧTl1PN%~1o&޾ֹ YO-@/G.fcGWxK-;)~Dtqhڜ(h/Z~Dzڞ{c~W[ IݝpZ>X޾GGwhi^kk>I1FkO`~i]t8ӮYܷvNd@rN|sH 3U!`q6{y9ݣ`$)N4%{Rh$ם+Ο^%7 +<oWFo),X_ƧzFVc,vuZ֌+YՁ1/~ 0Cz_^ʼkX=)UV[;?_DEp'ًmה%N7dNFt}q/<6ڗO5|?S>^l/-0Ko 4uZ@ݽN_g*NXnx 3^\Wmo ,C0 4F k[6tUs<OT^6PyTg!>,MG^4[Ur?pQ޽r{ #]ɧ*&࿩y,] aD"ީ#)$hq~^{#`_$d@#Ú͉grHBN;0=^ܕyމίSB mEaU5u,m~30-U2 g X;r>qĵĿ I&եZkRefN弸zl:&~.&{mC'.^`y ZsA{ͣ˿G {3fjܖ [ƒ%#_^k~nWi ,ێ#=ӹ\#Xseۂuµ ^SQuandLo̟,˯AQ AAe]|KtNt<{F^4#"S>F[w(t fs0]=}R۲|`a-&%TKxXt>{7~LJK_w1:Pay]>-CY=J`t2ЗV vf X5?#{xÄA{錠`D][OxQN޹ ka$gICuix{3&.Ԗy–.ǃWsl΍x ʷr|o^A|]>KVl;WI' ;9 B[q߶(9:4$ey^RG̻@<{]ƃ52eMXFضXTynp8$C0dL';gZgEt _ZSzqVIn~] o`h,cOѻO493nCaV^!yǥI3k1v7vݜc:<0AW;}Y^Z"uJyA`4Z%iGpΪ$s6A)cJǿ\X_g&}D/x,ך gmS+74=6BC̺"αCr9tIb:r縫M\/&-bת{`Z}Ϭ'7eH2rg XsLT ۱'a\-( G<PU=@L_Epݞg[ܲRUy}Be)`RpZ-EW Hgy=a'`^{ O[OOyH)wv?_dYr@-SyPD?[tcIn*Q>y\9 &0sU9E%e$m lNԁzQ G4Kӻ%-2z0JF!W= aI& s'-5Ї_]p[&LQu#A?FB1c ;~:G*;cl=8bp'YjI(>_e "kš!P*fl Q\.I"1aU}Uoq*+ҚY ӏ!~1Bda>¾p$E@x"hn,P=z<2g#P.LnDz❜S]`/H&\uX0p4O,2auŘ'`+迠pȏIG Y:3^=G_kvcp35&4R$}lm:L{qs{OSsՌݯ\@KmOGK5kLs7Cxt%^@&ǃ-w.Wge™]6̩FY([гݩdW w^tٗEch֜5L *\)~MU=pZn&yt:xU>-40s.S$O?7Lr$>^I` E^c{P0ysG'l<ǧ#ĠKX0[g~"'%Mn7igD^ZwxP~#]ػ7I4@3 15F6 ~UkرDysO|Ƶ(i7frȏیށLpsr9B8!+usq g-˶0x_fO7!-Hun-Gu{d>c7C<1&1eQp֘M_ |3i3 2OE^ ""p!س?mU|j4zhw%EzZW s-Јv$8Af|cԽn%9Wss:jl@s:)~Eg,Ӻ'IƔWؕvj>4TgR65{Q]NgpgԪM̃UPj^&c@8[9+P7.1;ZWU .Ŭ8.DOO톰 oExѷ_\bu/QO!8Z:{@լy/Z|^ݵ^d}H0}1՜p;6Yph{w}OVc2R\lA#¾`ޛ(>pC Ok"b7@37fH~_fC<Ɔk]@Py~ów](~sV6F:#V-=0G8srǖO Psjm 88g/BW| ^އ\j2 ƛU/ 򈻺ώ[fʡ۝9;*Aono7?7SfLVH@xmEN䷠9kj14?ʘ)`Mm#‡So)m~ͥA:-oT'ϵ_*经0/Ҁh\PHKdd~ǡwy>)s[0i$M8;;43e-ă\|;߆`'ugi"]u.8ʂ7te>H֡ψ*kN @5tv߱Ŏ~nvkOZS, <TE# yc-U}^3:]7^Zner߹x:X*'l"^9I" R]`]?g$d$Y \ n3et튌-0DgjOJ̴] lq_ 3T#k/[8 κ+4o9=$otd?uzEUbjYoW˝86b3QZnR)`+< 抢ok˃HQ˚-}Y^Ϗ' 'iu|}>bpB2C WRٶw:uSN3@xmpC'?^σ3ڒO#C>;A;(/]Tl/o2pnIO+;>qNG{J(ue&Aʥgg 8ٺuEkYv?^_TfMUjHeU?P^,͵@:XF#~΀?@ES !'-)Ǎ=P;,hnA8^8Lp\z׸<ΑNLC{|X2>#S#4 >pz/>>Cz`c2! (\_pgZb+fJFO&ϫ"NJ <' XNi0 ;Kas"EѮ`S>S8WVP(KS91/4lVuw$颩9.oMogR}˅4 _!L=I{LAo~eC Cq$(gJ?}<fW@y?;C(uI*-iDSRi+MSv(i=||?y,wI>OVyeE$=žH[)]%^(ldJRRSE.ؿ|ҥ.+@f͹O|u+Ȥ! KsѦ >Oqgm$U$@)?v"ӞgQJW^BVEyW^Jf(o;&C䕿iWWsg9Gۑ\bcH>Ew }%t1} LaБ5jrSgYywzy.&9ztb;l>_TӉbq~sñ_ ]kWwțr=Zז;A;I G+:uӬaAA^CJȈ}ywNHpC7 }`[%uMs[okh0ߓ(=+6qgJ B֛w1"/;jG#cer"]8ozC?BoB<[~{+!-CH^a\Y(#KppjڵBVYH=U{ڏ09ќ.}3Rd$e˧1Pfr؍4iG4T؉K)/HBzW=uI2R-',Wlpn(c<qNgWԀ<>WY^yEfT?u?D7zu,#RHr@n'_7)ՂVvJF˷d4ʑ+"'3BA?d%dJdmtk[6$EoKҎir0cDBlڞD-2YՄ 嗇cTm*ቬeq(y_}2)?-PBt茏\]-iǢ/#{%ڏQ2Ey^cHB)%bSq|?V9`~'B׷-e*-o@HBBF=vLs>1d;q W>;_x[^#u@@>BӞ<BOF/]MC2)}@w<·iGLy/G'C>T&D`yd$o:W b(swպj(aYKlD̿fNiHs=唀ci"5T)"ǒ>z2XO~:2J / ۵.#pySzzu|6~EҢΆE]=֦YL_SsoiN2PJZOhQVs&dL.߂dk o=p:_T^  펹KCGQ,#6g'RD{HNKOB.Qd$C6ZY,v2E5+ M*4UOեgxW5i ~٠jwC_ 9),^Ŀ AJ*GT!Eu>xe1OSt\Yvʼ@vEr!<{3]Z Eճ+si݌|X^h]Lɧ7^ғ#G\6J\3IYMZO ]m!"d^,w$Ꮞ%;k]q7.GɻO:E ԡk*8$Diu *os8JH,t WTMm% ]SICnEYgՐ/Q(J!_^b‡ _;yx#kPڇ7Gt?JKCo;c^qӑy=PĪFY"2Sgu*Ҝ'ͣN>GF୹+t]nəZHWNoE HyhxprK iK{W"aIF)LJo $Hژ)΢a?uKk7XEZ|ц+HN 49ŒgmDti٢tTE¿%͙ ivpJ qUl"ݰ{܈D?h A [7gG"sRŶHo#>F GF'=(l(ic>[V;7{RӶ/lC$z-Ț\)YbBơk;VHzs5w!2ܷtY1 ^(PUK" b?1h?8Ptpm?2m-WE 2ƹWhO<)NMjȸ`j>{ÇTL2 $ͳ)'#dQNO%![-5|cE]C첀(`z Y9";( uH{Q2p7I:gG>lgJ=-Dfm~䔅צ 4rI ~/ڢI>$Wwt#kd#dL~ٌ WޭIpvW+ݸL˖#ְV#k,!-9; AntRk_,#(hs"7 i#F{=ϿNbo"yACF$U+?&=tp:Rҋ>g6~ld}:#."M`g$/'u9qq›;_#JUfz*U$Jlov>/L D_I3G]Tb]51HH1tc bGh{.?uŬBIŁU\!r|\d4l('NJ3͌2b,緊"$vM`cָ\BVǬgY{9*.Te6NL9e[m6)C1F/Tq@Qvd9%g!H9.e_M/$?`b2Sq(x@0Co>RMQq&<|Hf]@֜;f DRك(~yR!}/oA%Gŕ4H]UZf,vw$N Ґ~K'26 Q^.:0c(l$Y4 ̚:wU{))r&Ιo- HJ1̼â _yAwdU^~QEf\U25Abݶ/`CWB/ID!$t0%'MAo^'-Fvhdq2Q/Hj 9H.XkJ91]Sb济(q| |PrfcjC$n f-A]JԼ^49j$ʜV!kQfZiCfi~O7'L,@i<cq(AY%"QnUHpί#%_yH/J̲Q|N?CVlV+"}Xݭ&Լ!RF3xt 0O=JuCJĆr7b=^Ul'lۜȲP;Qo|!987ybcE GUȌjI&wNUi!$4x\oGvI63(Y+5h Ujj.:>& WWNsMq_X$nOOmuu k(H>|=mO82*lno M 1r>DLŶ"[F:Q"hu3u/ 5FslW|x&y=YHI7m=6/ -e23og#ϰ/ "Ţ*}d 4# C|f82me(ACR@QgayGNCgs$|jZx2wH#|SW^ET!b.2yY_LHy9ЙH`\LQIǐoG>N^RH,zv 孭B#/] l O;YDn{?)!B;(r!l{BW!8)ik_#SĺwtIỏQB2;'E(D2y&!o\}?J "}0k~>ݮ]"~HI}'3çP{H)J26 BK̍yRjCp|dk?|q3R Yhww 3sxg"KN~Ǒg(e7[̦ݺ~Hf kT;Ͳ< yNIegV@i#ws$LCff8U"RwQb?udBHu{H ƞEƥSoO$9{ v jd7[s, )YT^WBy/!?uq?9aN>ۨ$T =4:dzclW"U&BpD3QD9Ѧz=::.IpD >c5)릀 o.>},چD=ݐ>j<t2_;AL uP)ɓOɁ _ڐ ,#^BRFygP_ːvf4WXH8ec6Yi~iM[g&ڇ:^!HټfaؙZJǦEHr(는U:Hߛ{g\J+C˞HI!-H5›!w )yKJ("'CvbP|'7AZI sr]R/ XGH9vڃ#8 FEK|gϼkFp9 YvI/8Q%Hغ(y,!R-{n|G&u=+sd2CnD]7C~nE̾n-62W7h5B?>VܺI'!|z)2$kEPh"NAE'QI@edl(_*οtvZ"+dz{9K4m(y1DEҿvJq,1q2xyMSc#uH3 `=BYI"Cr2J%MF27c(>mg|aX J{ΚZ|g ]Fp u=(ax֯Z4ހkuxxg2.#!\'3{>h)vj abCړK S"llhx4ѮybS 2|C(| }'/\oKGb|u- |Nz?'5Be72^?] REG"ͮF>W;Hkʢ`U}f@ ;e_yr?61n]3IUH[ 5J5RVhsdv=89FV?!or/b[Y+gɘ J}qL)#rK ?iMXEFi?f~ߡ{O@zWìJ: >_7W%qbvOh 2Xn=^a ]d+UE=:܌إ=u<^~QGDW|]DzC)t[D|TV)s'yd%8CΔd?_O谏"izB'\?`"x]H;/O4ӈGWL]YVٓW]Bݗ~d[7sR!0ߟ]/^O%o:;5[b$_߈,Wjy?ey=D_[ȼp)٭MsPL{?oEW$>SdeX (HH {ߢ'DXv9OHI}SۭDȚJ#}>5d]e qErd[;u#ELFdZ̏Bԯ(G)WL5顡!̋eM~7oUW@$yJ/t 3e"[p"\H*|B:mP2@F$"X.;=y 猞яVEVvD{2J$/D6΃ODS5<3E$H~h2:P0=sHZCQ\W_cvBDP_`HNE$?=?-ep{,Ck|̖Ѝ䬮;C/DF)d#Sb})TOo|%?I} eN}EFk^E@'=wyZ( ^5,u瞐H%NdZl4NsE/M$(wD ]G*[j YNGGrO=+ߟiRD=]У?JEJoT%]~O|Oݿ(l{xՑz=Zw%}MzSP{r Rh'N?~1= 1^QV3d8r^f z7(yf !qOr};Рs/'L Bٸ]Zbx|GqbkB Έ;G 6@&ҺKB=[֕""32*o+BC/g@.Za[w4Hbl烄>QZaDfYwm#@ՙq{%F:Ca蹴oTR5[Ů18*kGP<PP1&e@ģB9–WR7 c1'VFeu/`uZsCağCcYx+Z9_5iه]|ׄ%5R_9>\oiT&:BzPs|g@KU#j|Y5 51Qh]i Oχ/'=,ר2o {_AI\̪Q4Ǖu%LIN&H[put F@О-6{'\P5ض!tߛV'\9ba;<9x5$%NX/zic7]$4\\rcZWMA9G>jSPOVbqQfM~FPx,r#xCޫQ lfyT҃#e3D I(: 4^?UᏣO\O΂CY볔giN7s&PxoKh~Qh.hg{J_9z9 GlKi(lw TO7uvb ''09v^:S{rx⥋!W2sn _η-,w[Wo|'ChJ;Rudd~]4d+ e5D<=snHɩPUÙihG7jjDVNLu[>HwZr4W=-+8R ;B!_!_&|9fR8P0B\5:~K S##x7{G*N' Zcצ@[uPy (1i 7.S]B  K (4\+˄;F5h{Y ⛫$1U!I}jb.#V!p.,ّf_線 3J mᯊ,g8nt| D^ so;!$F(q2fML+)"+cE+~H![h梄"BC^[ B-Kh93>[NY^b'>@D% B?sAa!EM?= Y͚F^ 5,Mq^'=oL!Bf%Bȶ+u\n9ÙM}MFC}qk 8[R Ad1 [Qxg;b>'–Qh9ς@DcD ~>n>ftmz\,K,v@bD!cVioG<Kɥ7;߿7Hw8wS&oAD'kӠ|cq;B]C&!/ ڤ8l1$-ӓ.;^C;FCH\E~#|Rd[Y$C_ZY8t}p l BFВ&W \n: K|!` P:-(r8x_o &pxt/<`n;QxΙf??N ~h  c]\l5MVr%7YOE]gz~9 Rwy,̡E#-&GJ! X_O]]8IsMJz8HaE{(>TZ:ל/ujzݟcsaaսS3XtedTBfFn<BH_5 4 Tl mpl| uӺX*(p; % RϪ@ʹN]Q^-_wY:?|!h4O\=,x?DM.ޚH#3 @ ޗZE;Ґxþ//gV??t@#"3<\ɭ Xr,xd_=l["#GĠd7zoO+hֹva;b'dAcp\8,23Xy/r3+JE%3.\_ oVzWejA[Z+-X;T쟢Ҁr|_eKth6m)S<#*l;,R/ơЃjo'J^䘨ΐa_Mwڱjl]7=nϳWCi>D$=qcoh5K/ v>xp3KVq%hlT=1= gi;/ PHSƜW^ Ɛǎ,*Ã!xٵ;v_u/_BoDM̈p !g@L`pLO1jޕf9׃46|.F-bJ S7Ns=Ƃ_ׂ^jS 2Oo2P&hyAW_,CoBnqH1PDLr7A1eTF@rF>Owz>==5ӮyˤA.w?o O$Cԯ AУPi0DOw"A7 B7͚g_okYbs@9A탷-!`[ytpsio.=_˃~)X7'{{T0zm~.ojt́$<@v{xfc7xב\sZ_.o6R4ӧ(M|9S{ f%Auy!Q 3!1nhn. 7F;.GWw/у& (|kH/W"<'|l.D]:kh>j1eYoO0ӈX֞uNBB[ᾙUkIV6H&(A(!Q hT^:n+~~`xJ,|y ڹ<һ.9B$$]ssqOdn\!OoR/k8:+u!]}=#rשG&9=B&;q:tH :Wv~BʢNC寯{>rD.%(nzS#'p9>8m1رz~M>_$hpLB;Mn\gül{^Ю3/*YZhЊ_wt̻jv>[\M}L)Qzx>^mxojy-VBj[!<dNgZ w\lBlp?MȐYł>mt] uWB=P,` D>r_ K͹/]ҙ.b3 ܛ;97*W/BU}_*}Lw ߨ5[F0p}g E5{y" Q@翍~kBWU3=?L||i ^z@lC00uݛ荢eAKV[rȑ   "|P PʭLg_'S}ɯdj9J9:s_.f"9^<[2[-on% R@iEO}~S/vqضr zI<r6G?߲s.<;^g m/'9wGM@(|uQݔ1ssgCZ{-}!pl§ <h?ښ[qJvG܄c<6<\] j4m_G6+m{N3Ro)US}-5JNuCSAbg|?ltY4T E] 2COB>Cd{P[za+4<~Re3yjn?^ ?xqCt,,H+7A5k^ :t/L p8{Ōhr"uuw9F2x~s{ %o*za\evҌ"(\!ˏٮigyMi(hf4_r^CP?}?oWB 9ŹaA?tOw! V$bqy #|FꢧWmmƜ_` A/y"5t}sܶQtQt :>49"Blj˱?/R[udՖ;ڡ+"Pƭ:> M|k~&7t?BwM]cM:b 9Wɮy5 /wWiMW^~Z9r#o>Ղɣģu}cw93P!Tݐ E*KN+L2N9y vR!ry˚9C F7ݐFP?YUI'grQ~CSV7Կ\xE{:FZ !\q~r?$:t*[:GBE˟Cܧg(Pk"b%4+siӝAPhy2 ԹsoL]dVfû.grft>uî3ÞA"h&z9\ ^|NwAb9JnZjkS¬P=4&p&q r*,A45xq[nhz dr*ӟ엕[*7wՁƪD2-/5 |մ߼1iOr?'P⦈c]3&nZ# s2 +1>&Ǻ݁V-, Qxvp#$KIx>d ~V^g[ 5GD@D9ZGL_0yrx'Rʍ[!ॐx3+ RFxAbJXl  8ˡ?8:SխNɀ# }i};G*2s<ޫ'zӡ4[ ey=JŹ!XQJ8r~c&xD8ok"ez6k8yϝk$<6C-󅢡ܠӝ oܧ;T.w%_ <|_#-J^_'JF~6Cy*q{ ?{| ;k<(i=Y"1<:l%ˤ /QztZ>{ԟTM{~?"G)S݉ |FVv#osJhT4q/ b7ȞQ`~]]G`bS{A[s!r._lfuMh.e%ϫIE#l گ4w*GꠃE}-K,^Vwvk'^Z?6!yqǻkQ+vJFImIm8}!{|Ls ֢pϚg9_}> u-hq%^6 v.f<zύZJDtY(U|yY=Rz?2nvߎ:"reD T쳐8f.cRhp][)$:H!+v?2͙m0W񗖻=s!x>7um7îhSyt!'hY~m !$rlτb/+y5CxEk=QKff?~.oa}Ïa|aGG(YPq0߁K$'ALΛ{]7B/aY^dc!Ba̝fCCx}&2Q %z\r? Fz37B=8>j!boy8uxvrٵ$OA^jץc:wC m~_n£|n ?ރ=AL_Z/:2%aV6>.rs!Wމל]K"kB݃k~#z&̱RpRUGN7/guI͝>:2G9EQ{q6^\< 0OW>p] YJЃȸ$o)'4\0Jh!>mG9dk[׉6}6@}}~Ű>)HeO[ &ϞûL P[\h,e5oG+{;ˆhbZ~ /G%rK xG{!wا}1'Y}k=o~NBtdֶ.l}iÿ|5 !N0ajxrMiP$>ODڅsr!uq̜#}ygm̻GW&HU d*9} A98șD3dVó{>킗&e7NΗVdzN7>#Nֿ"zmtWGE@g,qLf>OF3$BgH`Ͼ.%xTs})Twn4=U9DqBATdfB4|.}t?WsraJ _4n#] ;'4VZ` 3g !mɻPL&ho]Y2}3~3/gE@|띆[}ȫ=B@-|KPlXZmfBgt9bZ[>r_ٜ~^7ca=H2;28?B#ǑgHпL /βs^ {mOe}:r<16 ϛZ–@c ߽`*WOSF|FYmSܼ̅(q!F7zڀ 2E劷y,~{8:܏v15>):cI2'u)M(N7pjH xq$_̯X"YvqݷWFVcM%zecV=3њ}YLOl:?82i8Ow#7(M1DP MHaUnvߍS0'yŹ~(nRxFW]*+hDᇜ[B'|m4҉}/zn#ŭg9&':!Cno/{5wPPgqASL=3}42ˋKғJ;! K;&qJqf O 5jz_/B Ao2}#ճ+PyCOy&vG9=. BM7sz*d| a-ωעGd={y[!%zк+ .QgVڅ Aݮc߮FїF~d!|VO.NJ36.<:4kvq"YGn_qKtjt{|ϳ BmD G.`yHzqϓEx{LF#>$y; $e?,2h=Li%[BUڰeq |eiA~=kڢi_B`P: D aBj#My SJ;Ꙇ~ȪD@S|`cxJtP3 9eytS| 3/fe)2iw5rN=< FT, ħϣ*?CQ?_%gR[a0Bo.bPAtO8-_C."v&ܴ5_px-5,uI3RE2M^MQKQ&*F8Cq2G)Ux"MSyU_y;h|Oeuً,۫S!hO Y i%Fx2N·YSWPs9Kz9/A կZe;Hʌ Ͷ8'oҢb;vh8l?X/~)4LwN@MoV+.#wYk6sqvlɲ [4 4M 93?뙾Ik17-bpF?!4[wOdm \3 Jl.]j"s1?Ӄ ~@]NDK8|r/kӷ"qыְg|AL#dOnOEt _xb7o""dulvcCt:fx87نn{ .qTg-qnT֊Hgh%^o{Kl_zSa0AWE"&穸/iC9i}e,R8S$m8Fߖ<5|Tp*z?]7|$Q,";Z~PI {.~gBNw9*"u^BrnNzN}O!w׾߯UQYG,PuB g!N/$3W+M#JkI)b#qWxCt0c<_A O=a iwBbcvʶ[Z W#Wys4dG>FH(ajƈ/j$/xL~8h"(ecFK}v"Y MDz[Gxf_/d2nqu!!8n3ZLXna\%Szß/@?/Oax!`F#mOϬ%($@ U$ ;v!T+,=SÜڬw8G̷kyxCiyhk4=|9B+v G72fL@ҹB{HwT9",wrFOu\0*7xmVRt'i}&\mM&﹈|;*-O8O'>$#qԦ֬~ߐJO Z.qsW?Y s n^/\e<{^Bf>X %YQ#3ifw4ۖP|ΌՃ ~]97n7q47~˴r"Nx-E Y%B)'.#Is^6n܁&-j~$/Gn^W>LN_EU !zL (j3oTn4[)Bl4'_FJqi¸aEN;BBiaoiw+X~gE7)l|7ϖL/kat]U"$gֽ׈0/y ;!Wé|Z0Iz"9S&#cHcr.)Q< ɻD+xBM9/#jAbߤD܍[w+XƟ3qq(ҹԎaMLG[rDLQ {Ĭ "W홮\2 cWA޲5N\_@YH3}B}z!9?Dto:Q@r{_?0V:TM9?e$-:5 Y1=32{YDS-(c{|6PE4 贑Yh_oW-GZϺ>qO'RCLc ޺'h{Zj2?&"W[U# Q([8ygxggwE5󦝀pήyP|?&&W/Փ{rt.9\A*$ps^RH'8p=믇4\2?=Hq1i˗ 6C!s"sLN;(]ph*Ac{c#ަ{&xLa/dv *tDcD2-D$r~${eQPIW!rIa~ѽFv{ۨILsQ ?_s\D]W }2Dtq f@[U t <`߇q9x YBnouo-9):cI9&3'&dD$hGvW;|U3و^/x+7$:]ZN~*N^. 8v{qC3<}MZy&yG#Xƹ3ׇ+S. 8|R,P"ɕ;./A*-˖nA?ps*azkw |nIfkۜiCރyfjqtB/8Bq``?k2Y~۷a:FN"Υ[ =WGۿ/%l{&OB&Q?|&%X[th@W*H"<>8un$!Ugxeq'4!CiqM䮢UxjWpn!axfWq|4ʥIe?7'++]Kt!QD"ɝ $Z7Jp-K9e2uCpג;jgxD 1Hdu̜vZhb)P/(x{uz_? !#/ Kw)[eps'7OԙZѝTZ}/Vod,2Zvq_=\Z~?)NCHZω2VU4ɐt9HPE WEͽ &*+_}FjUHG_ʜеs} kMTD/ _9 +& "1 OvS&s*ېtOiqHfG"o _.^9񮴿kێԫ߭+Zws-EͰ,Y36 -BiQ:yd bH>PPJpg Q IWGAاK% NJ_1x!0-ˣ~SVg84ēY4fU~+D|DH@!y^D'ea*ol.iGʍ.닞< SBGH$7Do/Ηg!AE siI=j[cʳd!9߆WM7/ t;/vB#چ4U@pڡ(p~cz}9riھOʙu !9U{Έ5=a%}".q_+"l} -7G`?nҵ (h6©o͒VU[Q颵݊GADsG xŗȦ6f#TP~'D;8 =_6C{M]$%4q%N[OE=['>-|$H@|<|z⊖7&3> d};̯׉k^)P}3.6\7CS3P>ŧ2ٞH$? O/a}g6_>`'ǫܩ-b;b nP 1QB^lBpđ:g}G9 ь=go@Z m!/W-D-~+M^? =b R#T0zWh}1Dio%s%+cA bO=u cd!0y9~nd~ c+A?EoǭCݔ_N(K?a +OE!Y*yޫP5{ȓjjFO4H1:2*#q>"GՔW߻Z',tI47*"*p%K^1 ] /HZÌ(9 !uxL| Hݚ-gb/wkM|Fp&}q`3$%I \8n5.cqa GݎiMʎjDiNu( 5 9dȹUq~= LyG棆-rC+?֋[7ݸn4?a>p'n=dniZ=71WɖKm[U 4|mn/ur?jV? . E'w 5 b]Ac/9GL^Q)Ͼ<5[JC`ל_4 E9<#9HjwNNJE+!c޼|Z^э,費^ ;^eD~ZSqL <‘~#}i=K_n[IHrxpR'~+?HVOP[عL9:2x;K. 5-D&YFyKa(7b}߬N/䏱 /hMb+½.$"*9<w-?$>7L!*Aߛ5e*Q\5!:v.%e82wJld3\]e6VGZigM2*ߘi_#񑤫җJ!;sJˠV v}Bdͽ!6&zz#zK((i3d=ʙ_?9~"2Fʵy_&tv#-Ժ[Qzn꼷ʺ=fY'q%,Jj-g7s˜%>j\cԱj[&h_SnoK3+i<]? 5/B_egalJӞ|wt |^XGg}cB m┾HdB{/w8?m"hE.*]n..$or/0> }Y|ʒݓ "9"%{+ސcbt$sx7/KʵK(T;$kWm/`7_Yo1s>7',4Eר"A12JPlDF{ ޤ_7YrjYrPF&Ёi7=vDҲ\6.bm۹Y.-wS Ռ>ZJPOLNts;Ep ~*_=Ԧzm(Bϓ/$Hnj@u'tVZm"{MW8C4?a^/=8/>?"P .C/-|{l^W*(`|j>#vp͜Y sQiV2̙tD u)9)$8b;ۋ4Z|92t֡T8hTNQ}Dýc@Dpm$ NRWFy߸DCF&@iW{Ptc$qց‚Uy5f(ӯΗml+G# Ej7V ?lgr'%xQDCB#qऑ 4 f!I.*ߗEw<<zX#6_RL~0>#yشRY\R'BoNxy5]fbuׂ.* 2ÜΊݿ"ȁ,eqdz:cvq~v֏3sAV/PDٷ xw\]g?>_+$#ֹ8s~f幱d}r&JD$g#`+z}9wNAg>jtl2Gz+6dW_'>(!ܺ&(!<\Yt)gqV6S5hv'q?b] * P  c@bCrlv곌 HH6žq$o/터;\s/[qxGW8\'e a- OkV{ ԥo}Q3('?3[/gђ0iưpiHdtQ@{ Q*"!vXp>!6OݫJ 3H9&`8'dLB&+"8JND_cؗJ0|9w)m~oeCC*lG$1#CRe(dD̠֯/5~"EsyB)aIpS3tvyoI~ʀuu3<捄ɿN[TĀ 9);׳ٕRNBPzb};!5~/ !=\=)+="\AVW@ 0jɃrFr8:.tr= rc[&AoSicN?Do-Y뭕΢#9݃SkN+_{WSmxm1:T≣-_>D~Kp1K2]3[Qá zD,e|DwRN+Z /,]Cx8ͱp@*6A c9ߚ,B;83l. Rh߈Ѳ\\rdSBO~#l}wHW3|OE*nBsn,rN\P134+pItFl.76NgM/#s;J'QBfCz̧0.Jk̺)XтwO5o{ Zf!hn^.wnD,e؂ؿ?Ԑzn\[ouo޹쭜N;n-J]y{2N^s?rb;&|Ov*<[7"B~a؁Q4J%a}Y:V ?9=dv(цH$asrɹꌳ F *)>LTұs=fM\ %pz)DqӇpq;DxB<`E979|weë=Jr8ŗ,VFhh.7 _3{uq5؍jh&`x<$]._u oş E@&Ӄ e_3T9QAs>"0d=94+@Þpہ@s3ލ}dw>ɉX/}1N);zo$2|ZQdYP'nI,9|j!N5yہ4pafTvc?QfX{: d|!̺ 9&o)'ܛBWzOAtk_?D`d&͹H  9]r -W:ȣ-qg=eeb,_>5K/ r,t-+⹚~W\@M8*"WYgKtPԑst~c{)vl]yQ=ïBu tptߍ?>|9{u3x5W-E=MQ״Cw&6#3 2 Q EJUkP80gf<^qtKqoLrB}Z#̯!7 A0>!e^/-{GMqe8y"*TϝhYrԐQ fj~?dݡ ?!eӝ#j|J*#1]cE773$"^ 5nQhcx,lorÙ~$ HX3uPRɛQT[6ݶ/2ݔ3cO$6;ܒACxwKqוA"?\%IdN!/C"Sok~~wT0u}=[5h$7ι~;(MYz81U>Fg' !W~ԂLېbaW{x"r b R2Ȇ{_%v$WË:L|@L]_rIHYm 'XG @hl3Ӹsֽiw<:G#gY-S tr > Jzq65iEcّw˨*JE FÚS8lGu5n]d#TVÛ9}jMfZQ5;Ŕ?STW;Ud޲+!;'"\x:~qo=(]ʮ M8KePFpm*.݁-:U|UZ-h19I? WvM7຃Tc@w1ȉ;Z~~|- ˙o_JQ9F{郩?C3-QMEf ojK}Q^nzSS-+By ~#|~O_v^UWrrxn71=OɭLmBrpޘe(1߼qQ{vfߑ|y}F VGsϡǑ߲jz0jxwqmdUcg4 <\@֙yjoLEkK>S:ėC̣5)!Ș5 ==M}<}f3EG'Z]T:Qo. ȟ6S_:.vƣi`ߞQ55WEXRᓚ -<버 o} 9(Wv6ձ&/~*C[fh5@ zLo͚R]"G]yT}㊺Tu{ϴCrɭ>cѭ^2N{x}Aݶ8Pvp?v=q}@٘?'(T)+pAݎݵYLśiCS*kg.|{h;ZcG_7į2N1#I4qMԟ)T/z̃[L6]jQ՚ޥ$CRQ1ڝJrY>8McufS-oއܯ}MUN݉ [LɔN7׫[±$ru8-{j(%qjߪ?4;/TޚOʿY׋׻H+=$%2[znD{0C97unNTKNϴUԷ_攎YWK}Mh9\_[ŮmB  I8nB{&Ddd=nn>jAAL Q1 {|j*&侮/K݄nCEV?G}NCo7uC|X/u'mo)^=?7Po~+U\62:\B5(Mnh!_v@O%;^E#uVjġJ] c=,s_J}ucxu~9ߟ-CU5승}W1W#[PU%mEPV~~);TN'%$~{*LKpWTq^ST]/_!rjV8Pb*V; K|i8܌n3 /o=w%/Qf9= 07'RSսe BR5e6Zy#5a.αL k/ ?mr^[5X"qo)a`N[/Ǩ;SEmZ|M<{\30!fOlGAUKy_,8\Hy\)y7Uo˧Eh?˥Y jytI:A4MH}[/0a(j~>bV;/Լ`|-UE1|ىOTMLv0^^Dv Sy\J{c(4uy|H}VP6ˠoXTeRbҺjַn(ύi Zjn̷?n]-:*wꍡ~PAs u~R?lk09"Uf0oӑ K8*63swTd5~xPe}+ĦxH ]^Yճ/B vjmh0j`J5ĵz8="Oj^Ѳox X#~OKE^=?PO|'Xn5xGyL$'Nb{/8-ԕj[e[seU/T}śs)Iѹԋ(5ulx~6Udp{E~*wUzf%HbA?;x*YγƩ.*O6nʺJ}OUl嬝gVɕ{bB /\ېl 8ƉYOFʴ&5@EeXȳ7Qc9y*^W48)w,o>c-\uc):Mkmx$7)VT=UdȘEM;1[ק[_PiרtYjWxfWu?ϵOc^?l\Loo`O-X7!v۹NT kuUO48xPC^L6OT(JG }Jq<'r0V/ꚪ2%#)IQz=E[M.gϪo>0"p>7?3[FRDd Ϫ )e5EQ%DپV{mߣs|>kH7uTEn:.Zk@=lf#I>Og< pAA(fo\3Ʒt8aXƗI~<0GbvsE>;2hDk2mfyÒQ$gN 3z tH:g26QQ&F<) UټaP9Z`a#K@cesӝi*RK?"~#} upRETSkS>To飞3bn2c+v%D VZQlCէ3F Oli:J7ljnKhݘZ-ֻ; ͥ&db25h'?[({?%g}5 N[(0|b0\UFuq5,sM 5rB*TNOC +/ah^)X^ P%<9_9̪(2dY0/x!x{G.FDQ  곍0v&eeb>B50Gi`,{{mϻC79@#V'AMq/}n6O ,o"[?B% ݗIT՝qmKw^SoL?^oTM Us3ynMmţRŠzq?Z աv]&[pCϚԘ~% Ԙ/x8N|;7I2WMuQgUNIA1 mFB62 DWsD#׬$`[b\Awc2r#bZ.y:Eą*'0۷$bqouTQLU'2T0>uMO׼al-NM5%?^xY/<G/ߠ;k)Qr j~)TSd㚂U0ez,}~=}#z%ZjG۾z0dґ%Ϟk/T1K/ywU`'XF]3\`$?0qjK ~i7Q^a&^[gbq;meHF\bʛ'ԔćJ3zMɊv5R󏕳*|q"hdd8t6lO V@sUفv*v9M&)5yP顣Bƙze=Ga`?n_(% ˡV]6JL=+Ѻ :,3?NVu 4-ĕmB)eRCP=h }yw/:yWuҠŻPХ]/m5z ECh>1$鍪}αVRB`LчțJrhDUDSe%F0[, [B@r Vj.BSsڐq s&O/~2FK =7Bр&Gb&xv]*BaQI}0]4]QT+匨'1h`: )ڙP}X݁#ჇUohiMIG+`7v17h&6VO׏ N@ڢȼ3rnW2qbAo =W6U yZP&[0_e@;ead1tYZo\yAM},.]Gss5V,a※6f<딗SubN $4 E"t-3 s3a%0b>G=SjQϷ^vhݶcr5`uQ{#ro/ ukT7Kk1ѯgƇ[9z I=}"OVQ_;,B-RW41"b >מ_7%!un ?a~Daŗs0ڔ'9uOB [J:fKI ݍ Wq3%ߞ6%/?oz`jw(ЍZ+'}ϴɼߞCk7>B#ÝbXyuEdY=z~x@d(;u0XtuDt3QѨ~T8Oi C0GwuIo2L+Q cĤ li)v0|G,(4˩)GnL&.% ̚kh|Qpo߼2L5xp{!Eu?M`g^"V/&tP%vlf Jo<`X&59LFELl~ɺ?Ty\j`Kӗh㧏gskAg)K T=ɮ0`yj8*O@#G'9¸~~uU/h_kd3]1R՝,'^J zԡ d@WJ=i %>%-S-^0wٜhƲEe="q}|:r4fgyu_HOv] 9E+:32I " a7o_x >T˺0+v s'8w@>]Q몔b*^j 4Z{ge_ Q+OUsl6uSIVn(g'1\t - [$`YCUhbGXZ5~D;@5rR̺H)Ŝ&"KXAsd ʭ4g<燙ifI(` Lo/ö6"BCu Gk>tmW5`M~-o.b._b@cP^DT9#c`9Iʣ,?b N?F_zniQۓ'򭘷GI*0i0&U*N[:ل-~0 NUa"fw&>zCb~gؼ v޾4KK"O1/]{،'gt K R0/Sۄ=O.ۉ@99o[&k=&sBUN.[ﭻ>e0.S f'AjrSOTeÎ_C&櫮oey+jh%sXWU CgyE [PGE:06V:**k`r?4ZZI鿉hChQȪ ?L׍#~4!>ԖφS4󟺛0,w,"Xoy+Vh eogT;o}&;JtvWNVgrA~[`9ۊc¬>0Dh]MI0I=dH܍c6T4*H ja86&aY` gi0r%Q0,`< .yqbͰN fjZbJʟ@ 7eZphX&SDto@Sc jJU&q h=\KAkuta'45RǢc睔|@aLay?<-m"XY%Ӌn9n/V4Z+:=M>>LD=ZfRf;_e@bߤhE)M-w pa͝rq±`gh3&(x|bʒ ħm1yָL/j9M&>s4)Ōg}Qp5S6/ ̋O2XΈG?/Vߏ^] c EB9Oc^5 AC2 ~{Y' ?k4_mw͠5slr` Qj1 LmS96@unq} uQi֙CrXwhɲzjmʡ{$ |yߓkF0ǕLo!,,w6c* RhS"8m5QVz1ǔ A#SS#PdE'"-|({= e/?Thѷ.6":u m>?:=f`Q s설E E3O)n J?a<">WD8Z?*XOyFk0k X=",w}l?cfF/$_LUɟ͸wiԤzbr:cs hL*=|3m0Ei1vBglps-IaHR|dh%h,zI01b.KE$?׍aWkuU3Gvj9 V&L"&&Ԥqlt&\km&fs)fth}s'hsւyOiz69LemEЫ"1(xW^{G\?)>/&sW;~W 1%Vq6H lAʬCpty~4y14*!)7ԥg.i0ܶnw?-p̳_?G(mgiEzT8CKԫ&0~Zn*44Ӽ ”*tcbk,5hJRd ϭhYz0.}E35~Yֲ[>wzbvQVurcSYM]O4fR30̓ѴHIf&"(,Ҍn/*< oSѼàl~+()gV1Op.,0omyL<}3O'^X=qLQCb}gC3A-v~ z; 8 _ZO`PC$fn}Nށnw|vaL~+ÌӁ`[W#rpjn)X4icn]Ck1U#7`TVMzf¿K\!,hg73r1Ce!pŗ Q`'`}(樺laPJl)$/[ sl98᫥#_L9D$-|O{Nbk.)/ g G4PkTWjٮډ#RzLg0ZE=} ^tm㵧y5$rUv`fb3_>mNnC+hwJRʻp(h5ѦF3>%Ҹok&Z6jJ Ɍd䔿wjBރ 񃪘T&B"GQVP;6n>\ܔJCm v Cs]ż>Ȅv"C0RA#CԽGlVPKY0b1{S _ni!.L@aXG"2Hٓ$qBR N@ԃ/cԧaH9J67" Z_+?QWQV̖ڙ1k3jFA#0vυCZ#3 Lۆ O,5ncfA;ȉ~n>x'T\ժj"_^CMcvO0"k=סk1ķ }U:&} H: R,<裝S@tr8#BpOcÇ [<dWM9.|_S+DAܑ4'ajyBߠƨvWi@jp~Jl v!,˥ Yd}Ĭ73-k>igWQ{BK0#ZsmZ=rhQ kFɳU'wDu";M~Ac/6J# Ѻ|[9o_xEf] J1\4u[i0:jZ0 c'QձY~=UU: `m$RwV|R#XFu>NLl[>qB]NJvË0G]T1Z0[qR4 zۛF Pژb1"VzYD[Ltʵ$Z1>VB>SwFZ3-sjCh>E^ON8_ZLcB0'ק_v`R^pcMlew2u~z]Z &H&/ȥf } yJ0 f|uuSWrlmٕ[hn2F?,lzE,A RᄋڞǏtq+#Y"83p,)}?L~Eĥäl "*!͖)6W-BYr^2짚3 סRY!LP9Ƅ:OH*CRRzM]$4E0?C T?߇ `D I^2ʲCk4m!yt#Kڵ@+P_]h/hڵ뽧j=bxW⩿9/ݽ2 PrݞZh?I++j zpuxYޜ}8AڂL I$.}PgQ':zlGߓf}F0 `(h,HPZ_H^4{-js5߄쯱,аL0(mYF|0m2P%4z.g$'0Ǩv\:Z8Xd9%[ sz`Yw`48q &FM {M6k MBՍ0WVVLuZM2l2;R 8UGk"N)`qO:hиtWL ͈'bv̓پP#truЛsz/".< JިxhףcۑC)t'%l30YK ebаEf>YNL WўPΖ˘Ei xBTunۘwD4}xn7pfg zQy%rBeb3_bLM W)[7{D.{*Ou}=`:F's{'siz=OӥCCbA̧ V(Sц>boUO0b+0p}@Z"^8Σbˡ@N1F"A>o`VNlT+8ߚibetgOV/MB 4=N3uzcGaf8l%g Cff>|T2Z1ppL*)_E=(mO+.}:%) o_!f°͢@#i;D@pnfw"xQܦ&Yih6_/ ki`Xy8 mXj@k&ꇡڴgkfLA"XʄС#o[ʱIp:=eqɊVO?e=#V27J]w!x6 ,i~3# @#ը#;LtqAelGzQ\o +Y>:~?EoAYPV+,>3g(qH Z) CdRЕ2vYLQ'fv~_ߋ*ȏӫ&S8c~qXBއK@`Qf9#Ƈ$OÔV4LLˬ 5o7a2Q@Ds3Fg?D*2N5X#Kd6äm O4nitEhhr<eY}yG\-H&1J=Y|[0^ce/)YZulG^ٟ^ OW??0)d_snQQWj:_ҁ>ӵr=<%I]T.]Z"xݓ/HŘ=٫~sss@!ds.WT&g 5EY7tTάE1C :hz4 ,;?@o) {0Vv;oH8ǗQ0FP5t]Uf(#u&{`"|AY,4x8YT~Ц ,74t?:U;T=r׬媘iu95jVR_)˹K~!&-^׿85݁(<%,H+_u tdZmfxbp Sjl9w:^s\+n}w ~i)vFY?ϙag K'*/GducwNRn]*hmVeTf$Ŧ#Ya}h@A?]pA JKoV֣&ӘӔC qxO䇺xC9M6aNȞ<{)([3߅e&4oRuz^Avλh̟'l!/oCmܥ7Uh?TN8{1 Sϴ'QNGss\*5|bI1@yGA׾-#r̀w`"fZ,(xv {C2f!fth gT~~婱ilPEcD̾$f5=a݄B]4`>:7OZN˅dlEd\|Nn m=lCMvi!U\lLgoܵGHoy4$Y)7 9UCN/PK}hEr _8HqXHm7<'n5@~wM>MsE 2\,sA&}sP8."}|0z"rB.6B[A{<#4[JQ!ŪPW.߿:JۺѼ$J(P9Y2O,*z7y5aW2C%O;Th`fL!w7}bZ _vQ-s1D ↎9O-꼄#S,ma\ʌېF d*?1`Xs%xX| DB5Q3(/wX2VTL鞆(.c4`Nq!J5= *X)Nѣ1IQɷ;6i T*0߶ ڢ&? ))ߔathȚZDܩN`* /oOX_[e*rG_VKbP=fT?m"䒎q.ZGe|hG@Z2RE3DzQ5N~D:` 3=V/m=*f*髎];6Yj%Raa-3u2fԷKJ`VSKb^Ҟ,rTܴ&]) 5Q_ohN2- vou]AôU0kgh]';;/&s+_ "5`HWroIྵz ^o<)Ɓ> 4I+;-ok;˥z G<=L9Ce2ʌh6tkxI=D6Ur5t%'a'Zmsi͊%F1)4}XH4J.y|%tӀ8@&3|a_43pv&&in03:?زJ_+UhyS9{'v }Y~hHYV\ XV{f8D a!(r ڨMcx5a?jբb| v'|?fkҹq%_Ƈf?Z}YEJXϘM7.;Cfh=[1ꪡ#[L2ϒE>~-wZ+椽9(}Aqn16 :hs7KMBgu>*A,$F#yYmFV5m0yL(4u6y$mE+=&dޘZ$SZkC}E+ j8{-i#ZܮjNBmLGh@Ꮀ1~H֪Ե}n"Jy4Y{Ed$G+%H}'1"b_twe]]koTd~VXh\ZݸG=VF7$Hf6߼qI=*`~w+S EXƑ`zah%툧,~nq֢ "02%QJT1YPGu)DYB1cӉ/@t}G/_BGhdt q >~sH* ~:@?3tON+pD^BgiwnEyU~_grfp9>T8:HhPzG.}?pOc̥iwX*%,%>?+ YsއgN &1Aw.4!_>ThWL"ch@_ر˒2?42Շ.uW1,ןX(*5eWei|4Зv\GfwQ'}?DQxsnpN)g~*Hvvѝ P<R /"}I8\"Ske3e[ky$zyr^m]'>O>O#yya~s1CѨe3t62GC> y/4QrX(^gLhCV}`_M4~"Zf,2Ìq]m {^kE)5VۇGpaߍ>jO'c41U|>[)ceG`/{g!hD Z3Wbn-=A% Vqod$ h^f@Q(G[_o`:`6oqUnq wmVGza&S! Q4wu)fs=ͻ1ĝ`#1jdȡpCt{9m]tFaz%L*}GCg_ aw T<͑i[SnhMHUb [hVH!Z5ZSl0f畭=JOTlvJ3 0WWX[=ގB?WrQy Ziq=vYfb-1ǫk:HK^:u9_w74 l/ϨWbaRPDL@/Dƙ%`Wɶ4qȌڞ|6MK>RrLmc!Bi5.9ކN{^7hӝjew>ɆU"x;) h:FZ 9ޏb  &H1)A;=8u1[O߆A癔Q눀UۘFQLkb&j;yq/͔J/UCxDLj3~j",!u G)#|ނ֧6( Q˪p-kn$v|8みѽcG H‰N@c-}AO7]:T+|HȚ$܀;ܯHCG2$t7ޓC{{'x/-׭_%FOj{6[bwp6\c|8e0M RċdQl-kyҗ7BGˬX!na-J?.:q`_TdWb' ! < ʱHX? @Ɣ2շ NCw+m)G-JN}shŏA$<OQLۡ.b˪Р6@Q&]t}b\#u*h=hho4}X`H|'jZe>Es+DvzT޿bKcŋ6޶@CIr8a?rGnm{h!(bJ9%Z>.ͨ"6 d I.SdfNۣDZŧД'P1gop[.ۋkxFU^ yuUi4Y' +u}4N<8FWE?|Qס=QL%'p_X/xCO}m6C+G "C>z-S[bV񒇃-z ,X;iMO?ōMB%3%De=W |Z[@lzC@+ȣ7'B/&sh\MèOgQgyf=z=a:,iF'@ b}H^Hdl_Cǒ yFR Nh%{h4]:suJw\-jʭ O4/D_{yP)AO\<ż>u뽽﫸n!Zh]Sz7MȸeqZbڶ'XU2Jz^<Zn:"q s|]}:Vpo,l 3\e%wƍ O44NGQA45n'|QU˃>2+qV-)h푘khCBse7NϞFC=#ۨcSJ| 9SUO\6y}6E> y(" Po?^Lr&qz@ ]HFR]&Ǫ]фRKZ=S rhp_毞>u^e}np=<u]ъ9_}Vˆ:/Nxe߲qm @h'u1:y~ηb+TCEd H촌{*54pڮ Zӎ)ݾ݉Fht'Q#o]grTbQ a]`JN vR1>:v+\B?O 4V:f?l}+y߼cV~u-E\eؖmK||hݢV|]P%E8O煶J^WO7({|OsV"wWk&I !ZE@ ~t@7c͸fv ~NnnRz jZ3U cAQg9=I ]q3~#˧]@<(ay6]\d.R1΀[h?{ 0>1VD&pQ_cDn.zux TCS[uW`zgNL'&fotg$hg_hO0B+ F ]韧շkILu!,WSE , 4NZ\X.W2E5c:Тj}b4uѾ.(lum34&^r#@o]|- tLJij{]d?8j Kg^R$б&F-0lf6,|zvDTQ_/2ڍK2˱ryz^SKcƭ8Jr˽vA$E7 m? J˳'[gNIp`΢&e !l1=г݊ES[1oaExGV}~Yjy19f Zgpm0U_D3*mwؿFp%1 z)aB UOn(*TwMR=m"~ϻǞ3hյz#+R {)K3R|776'M-?_N]OGKkEr h=.#p^"`?›KxDS)kOZK E{Uɚ_? Ưy 'ݓƀOӧB?> |&]XAo~Bπ7|hS^5U6sͧo>@ ūL8ǖCb|?2} \!ǂդae$/ot)]/#^Rg!GE d*B.R)%ʋKW񤌼͛\ǔIa kA$?qP-Z]Orb]?U@Tc^ oaSfI5@rFwlX,ՁyO2ݨA\L 0ZsBmj,G4LN3[Ϭ 2([ypɒvV/BtC̯~>4_5ZD3YS T:od5 lehϳ)C옛E0h=u,VOId^:7q@"Ӳ\Youه9)gB0q9?o<7AU̚D 0]+Fofދf@TmWG2ԭߩ殴R101 -[EuW_cZt @=.y+P}v^ [a2~JS -(o谢qƿ.?6qB=R Rn7Rh0ߓ ͧ5xGMИx m@ts3<f-l6M>%"0 5o!L@>%ԪJm^ͅ?\P9w:n=; j'cfhY?,h}M3ATNhֈ?~e4~T 4͢h;\DM]妎Fg{#R:.nwq ZOTLJ#\r_0J٨*`xmo3KKVIYE5 1E'4 ܎tq,D2ihs5$h6~r;b4oQNK lKW{`+@#fw8>JgH]4%иvν(5X^&kVdԡtQtNq&e=MX@>_ Wӫ9PiTz9lXA  וhs>}4jG Z!I/j,*7ݩ|ƭ7>Z!_xZ.-> O *eiUoe%TEHJʯwŠВ3Uf)t8`blN>9 4[̸s5*x$ẽ;@RI8- tHCWʘG4#:+-!!q]Fo~+}@2m D '@V bI@v/ܑ&TM? .NJ1 ! @웱3"JQ[qEf]!cQ\Qnu(4Qy7g97#WTL2GĢ`aO`ulAxOvl8,ycqA3hQ|-/_{L&46ڋx$bHh.EI ETͫ2 `Mj~`(=r5ShS{pQk(@ZH+3*<կ觟i_OjU"~K5BЊMtsGh XåXXP@~*p%<5_.Zڞ 9hm'ڸasW- &;E!}0n\wL.0 ΢K^2X%9ѓ;ត% %bnZ>8nwԨZ~vȎFŻKͳՎCh޺N&p_ <TX\E&1o?|@CMn_WoS"(Cot_wIjrQk##@(Y4.{\GӲ'l;9/0(ZǰY-_i6V޷/Aa'/a ~eb뷜EP[u譙#PXn,k&4;ﯱtse2ڴ\ 45LW'4װ0\ׅNٯ>hsrj;e\r8Ͻgu`t)x:͌ޢ9@y.((k}=DV]TiFKkV Ɠ9ٙh积fO`m40]Cv{ A#_ @]s .xVQ ~9|'ZO?;yz\|.3P%{fO2T&V%[8)Y(\75DV4e+ʊ@%dWGQĶTUB F;{k ?XWrm?X-=ݪ=' \p_)3PGKpBTYcw'*z^Wb +~TUDm٪^"D-Լ -pTyB'5 lj^$-%jgT{k%N*LqOgd*!TZ5v-)j-i ٖCf=`Çcp!{ }DMHMsu@|Xx$D36gbW%DᯠR`L`5k.VIz&.%l 'm_u+!]<2O9Ů]@N(i7‹BQ@IB$mSv`0$H.~iB+m.=&\kf,q4=y@ 7ַXOf,BU+-BM[G27䢖s6A3M8|\,/Ѫ~F25^] ?h%ѾD4t%nʻ)|OE7bѪG/"!.t2zϦhSQty[#Y&%X̲$,e4; 4v MzΤg>%zž*W`gNEͤܓz=n&WT! 􁶬ot!ǹ|r}tWpE(,t+>j&s̽;[Ӎq7xr +Qw!O(M%~AqFW4fxPP-(gDéYxmVZ}s`cHH+{[X!^FTo< RWǞnnrb1PJ?Ώv?}GsCjv@@HNo6UO9*<](aT"=>݋.YO9&@{0 ~T|u붥&:rje+=Ȉ2^46 8?˥pFS~m?*^LJ+.[zh/&j ><- +hATDP1;ИS4Wٹb4W%kH zYf L եnh)$k_:c`oP5 *VL&s"^dʼn 3rZQ3kw?0ɢoc~. L3xx{Z折ogob_]K/D6[q_ŬL8 $D{ɁGNv$ \9 /x\pAoZsѥ5ܝ|Vc<^j:R5O8ё.L0̨8CYh^.± ދt |!0HD~PGdb?G9n*uNM3O`?8Rx(?JDnYq]jv"zc_'0]R;ךgd-)}pAbl8)fbK 4x$toeЙn&F ? aZu9qK(z7(a0n]_cakChYps]U`}`N8;}$o hUS!s/Sӂyf4pfc|3EY耶S- gK'+G81 ЏF:;y;| xŤw`^sЋ6[([9mYx_V,*s;,J?Kg5И_%=u=\IOc@oE Lx "U=R'[6pU[ΚӖRÕ1f䇬N5EuѬlWq%46ʏ8KiRUdСoYVMSZo<|ᡸ;Nq\pKtz2 nK_Z4qMoh @;M@Ĩb"6bU)ц+I4HM.5oFԌ[h\l P/XVwo5=T%ܣi:wWCpϘ kK 5DШm+mokU62XZ$aGx?5ʏ+2QS_:ny%.|i]wtW} /ޅ3<]v3O/:Jco-<^8'A{$ TĢfkj+/Ì 8&w^4(&)| `9q߭QoNp۸7|ВW ,ߵt< ϛI'诓]Om#XYX~gK a`_JiNs-Pc/a n 1NmӰ{Xo7I{b7qeډSO2dK{Bvvuf P2xyOg^A !S;6p'v j"0fF2(%>"ڿZsT`xFB| 4Jev5h0!)e8%$O78Q(Lf@Bg-,W^ BT.?*PYi+mz1qs@ sWzSZ #>Bj`p0}~\!T= K0߸;;z )u`b.C3Vz}v&etf|! -2'ݤ:Az&Pm=x0$plfo$K['RK@5UxߣdA8T\Eپu /_] d 2=ux!}1ǨwU^|h"q#ZԴ2KBMI&cu[BSjI[U}- ?ΏkP6hr?t@s3=O=\ߙZlh{εL3]ɢ-D}ɵmhlh5AEZ?_fqVe aT_C䰒V#A՚ck@Du%~Vb ]7h|+xԸnGϴ)U- oBP;tvG,:u2giiQ <#0τ>'i^~>Z?dlK_aI)`` C \)WKP޵WTڋ)9Y%}έUN\D.kh?Eoq~))ε.;壸EGO|"*r ^Q%9,ނFq'gS$S 29/Ppt- \3= [j>D&ݥ5<6|$ vjwpv-^Lmq,.w<Zξ![ȷUhݵF: WR2(ר~CW{XGud:_$ O^??u](O2N%öq4ːɇvl Ro*]<~*^v 'K*JRaq^ "&~[_*joP}oMIUK א<̓`pauWSqx5d ')A@\dNz70+9XS(ŏ\+xa3[e zyV>:׊P4_ǣix\9](PH{Yx>&h5ΩT6|? r܈XeJРhsVh߾PRUlv~.;ﶖJS,sfP+//TU¬H ~kCЋ]^D"OIa5ܮ8xד+)\8KAZ"U=vODϜmxɆ$⽞}|s;. hen"м]ڵnk 7Wdq!x9vEiYwp6χU|(WwZ8TLt>xldZ5ue\ڴESd/2dHn¤D*|A.nWp nNE\K WgOu:qjjQc:+Nţ.p⅍QzJ!#{'&O:ʢuxN0@\<q_9IۺMDmx( VUc$kw?*^sÞh~=Hl^xv |aoe'H&Ƴc dx7Kkg f!T^ ˜'Nʝlx@ \*jx`Z+h21;U*Ǚip6y" qdfK%=_=R6$E"Ih(EH!QD %C{dg?~;~u=9xbu7أ\J6l [ FGW1DH[8ޝ Op89:n&^ŅR YWcU7Yɼ M?\TnoUv%ׂ#j~{j*/~\o/ 2I.8d+Sώqa4QVmr5ӹ8Px?DS*U%SĤ4-GBof:EkٿgȟZvlSRMs t[h d^ba╏6l3S\#?plU_i)1=4|M̕5'S2T{v1.[$gP1ш:o֓8p0#֦A=54j'Ɵ>a'%né ޞ^Egq&nRtgKM&bFKL)Wgb {'v> VH-!ZZg\ܚ} 8#K6Ϭ}vG?(S0iZ=ig.1vzH= ZCTrDVdS?.dűlBƝ^Ciu]w4Y37ߤ?3y VQ jp1ؙA<|8M>u3c59]$cΌx}@pF J}gdju%,WL`ܳ؞r&'/{at54;>`پ KwWEmi ve!*V6)1yx"0+n) 3YoTl}2O>o=*ĺ3q!ȍkۼiІ7m>C/ȶw>h .vWY'p1Qߨr7lfg?9I:6pg '9Y쎫'fDQ]^q.igtW>`Pۄ㫗C"q$HWpPx<]9gbT>ey8Q( GNzt{Yيs-PǏH@([(C[l( }lNFRt̮Ѹ|pz #6aѓBSW@xSqPo+No5ƪpXdo!\xktmJsřo 8qM>"S'ag.YqvH(56 *;*J^zZxٜWMN8{~ ;eZKΚ=K!S gpQwsZ&qd!uO‘2{OY{pzD.#ɥQ~{\CG3\V܁&b_p62vS']{+NhA71ǚפkx[4z:/7o2?'^eorؓn'n* 6F+s#=8tO5.o7J_C[zuB%o'K4sa}VZ=@J^?NvRl;[/~ T·ɘ9'tF4ܭhȗyV1rjU8z r++MRqGug, ^5So6˓V)`gەpe ~VV,iV>yd"Wë_tUԤKw|>i^I OMHK%N` YcOgvOi>9.l1" :D%pZMN(tk-gAMB#Ie:F=_ 򁟗n`I=@aM8nc$ȄA;yC<{%W{2.ݽxGgH=`$oW(hi>_qCsq`5Olk[yb# 6xIj~'D~z/Zq4-['~O-r@q˞q¦ׯ8 Jv>GI=# JO~ַ~?CR㾁4c[ǩ%2Ck²iCqOm,N J)G^`u,{ MƁzq&d5Ju4DlI{z)z_K5A8xMqa5Ù:ƬCڶN*n8?9Sh%Z-om8AE>d*7*cbqIr_ vF"KQ,ĞK|DL^5sB8|R(*{wT)8D/pIBxZco6vJ{uӓWDfb2z'1'[߅YI ..8fc"#pUxQz֝.|QrELv|GFc55ğlQSq"Zk`2jlC ,63%{A仱e-)b!a6ZuЯ‚Wr+T%#i q5ٯ2q'2BX=$)olǙC\'m/..RoA\.?(0t񥋵x{n!:pbwCb8pi$Y")R;V>` NY=+W8[LޔX&ǸW谫p vN2Diòqd>5WXű?6_wYz6ʂQ .KΑ!ed>bCmڊX?%X9Qj_>h.SgTaw9Y NUowQ+ wtK]?ÆgXzM3hXlUƢdBxE0<pSrp+l݀4;撙R1x14d =2L=M' ;XtqxgzKB8l\P ^a{T7E[ PۤSh.nRtAIzNR_z?o[,9I_u ` $CQ%U [rF{-[@)mvcLǚ ~{X\8U+8:]MVN!V)_0JKỦ^c<1qpCf—Eu`/Dvx-pfh}YƉȿCk'0.eVB_?x'sKϦÊ񷰻[ ]PK] ! _>\(sd}*0 0l{탃{?ۿE~C-R/6a_] aۗh/b=\LnV>Ϲ؎S^OyȲ]$U[ϱ?IX Fv&1^9ێ42X"mVק!끽9G}Nu 35#_*5czp)޶ U7$=%/K͑4[༾C tTh4KƁwq;̬דպ/;F=7 Y>u"Gz&]Tq*>d9pDsy pF7QM;B7 7GpK6Q w}]AS)[ձw8h&%NJ DIZ8`Ţ6] mֿ^M/D~oU{?o6Q1dJ,  Lfہu"Z .8-t{kAR.l({Z@#'}O9GJMbg {SP 3E.Ϻ\ \u߅}qcZ(KPou86=d74>x:[d۝:ި&b)LJ' qY&{b=|pyn1hmN&=>t|]oq }d?}qO~4A0lP̠J}U]]Qb'XQ$t *=8[;]y4O36i|ӒOGtazlyJg8}7Ct`w~_c2}#>{v|D8sFq vF<9Cu4BKT_$k<`1#U*/{;1;4g3G,ѫymsؤϑ\x}5αTicgܓ¤gӕ /leҼw:f>"Fj8lb]l/o,{ Hl-Ќ#G7zt+Du\"r}AGU^QciBj~Q;^3)UdH r%F[ɼƟR*aEw<AQG^)!]";|rɲ xS8:l^_Gm9k,=:3cIkJ;p7 #KRD,6en%T;Q ±1X@y.S?S" jߒQ yjD˷h\R/N-Cϰ /ǞWt/}]l9\p٭[ȴ@l92׃6_ǹRF?WӀނ5zO 왐 ]AQz9-0fs<$j:ʀ?gRkv퇢龋-2ddvIѧ>!L^?1ω" R'a딨 g8ow,O16MfK MOb:/3["BZt{IһJ=Bޣ 5Fpg{Ϟ/1~tOߍ)/ozp:~RQKnesj?@me.9!WzT שNsg> !k vYIr]@?i T tqV8oOPKy4Kl(+h&_Tk݋VX`UL NY!}'djRO]M=,oy1T>˩Ԫj:e]#Yޘ?.2dl*;+xZˎq\az[r0l؞[#wO>8f0?Pe1wf}2qs87J?y`ivLw)7TLp9hhwz3ɳđOsjbrf:ꡁE&ʖJc@+v}$AQ Nx'ep]yQkLVe=/<9=ZN`lX|2 =mk/զ̡@f[Qf.ڟdG^cOp'8x?1NqiqYjcpv kʪZ 8#{M&q JW׍3ɚʳ['px}:#C8Cח8`RG>QT̓8iNU.| 53vNR5(+wB?q1W? $z=фB_cͪ$Ko{}j$g"+Ru:qܷ {֥~(P/ ܖS"\3e>8[Sr Q˸)X zHݻ!ְQŦe<8M:^&QԞ֎W>FP.˺m%'?3G|hΖ@eB92%K duSFdw$ik>{Lxɱ̏ʾGW󴝿˓0a WަJUH%MF>xgmՏ!m?LsADYLL}r쿉W 2d9FÖ u5T԰*Im4=ؑg{G d^ڒ:z;h7# Z\73cމz``oa?^[t ג Va;qM68P_ZɓΑ0+Iԋny_Ϭq(%W= v?Բ8'Rߋ2>wyYQ'Uv1SNfXd-Kz )0\z}]qbZɸwo~!GBiŏ́ vSHL=v\nIFӕylpR8`:Rh(Nz;;tZv$Z魥2A~O1OOpF]Y,o W$Y|֣yn h,+)\w.yy"Ogb"oUsls:)%bm[XyltnϽk/O_+3zzgzyq>6~M:93ap`;'z/®ƽmǓcÞD]lT-G!oF8liD6xYP-9 6Βk pr^;@ܾxnbO(PLf!}dddoq 78~6srut{|Ҹi# *e@pvfj9`qnViاl_ Mq y}2qt";/e۹d {.Vɴ* YjzIη[V,?k/]<;4HO~#X߾QӷpS-8V#7_eP&5 lÚ!2Ĩ~B M2k xŽ7 wnDo`ݸ @q4WɉzJWa&hQuִz?:Y*hB[;D2,lqS[]/qQoJxȜH/ǎ[vEs8½HHm 6eO=FAױ=X~8Cd;Xxn8qTYmL |){a%-BqOZ`8A}cEHgX{qK85_]&9*JtЭ˧hIe`#U~.0Ќ=N'Sě&晽@K}*098Ղ\iP8-zM@o{u<ϟ4juq8>? GGq 﩯8-8fѯ%,dٰ`n]W";'QU??8%g"W 4vj)Nor:rǍH-ijrY'% .mK!cI 3o@ /ݰ{[E6/ԔbæBM8^d:} wރ=SFxof<v3cŹx0Ĉ3O I' l: dħ-&c.8VCL>*!ߋ[S!,"#qmŊ8..}ѽ$&kRlM/2^0Y٠;ufs:C/\z8%p.KWgGn*0f$ټʏX$h[|(m"pFlgZ_M {N0Aw66kN& Hm57orypw ?k7&EL'bfl i^|IdmC_,{$nsKIơOm ki*7E%?h|t޾A8w٘RDEiu.MjRQZ١R 얹  {e\gX IJދؓ'TE8A3ϝ1Č/gC~uWN4->,I -ƷqV,Ʃ"Nlr@)ͺ 9\j"[_"d':} ck;AW c΄V~>sh72TV{}9yg7U׹Sa絝3wkdtpP?+lß>1׶NV{_e۽m~p x#zZ dkdRa֯JO%ia+phhħQ3ewOSDZ=Y(^HޔBf$e;=rZ{kq濺gaA/4]#M3CqJUgVι66ĮooN$ҏZődoNxiMiԹ8-s{w.‡K3I}8g1a0A[ ޖP+/v^V<`/7LvQӸ0iTs+n% \cid: C팘.# $SWEW)*o5bןrW:[tp8VDw>]<%An55=eO?goܾRYޏCgwiP׈wx'@*_pI%po.(+m&;AfM'h9i=sY0Vb.p!&2SkgsJ;7IPRO}˫Q1}<0(v{S N*?<σz}(m{kP\K;wox /:A/t;h~Ի= ;;" fD4L3@ԞX#Nܵ:(VڻisX@mubp0yJhl@=ob3O?%{@Q9\0iL&׍ԗK6{ L}fUU:.ZM}Al$(bRLB:-}AȞ~iǝpo24<'sZ藗kK!b~cPzb ׂ?f=4s?kqi pq Tbsmϛ~@S,6j$]5_d~|ߡI#4oB4&$Tsn +e\A%<.TGP3' æI8JJi0(?{Ƈ_To Lee19dD3[PpVc:k%#$e7&V+@rn? 8i/_~TÞF`zCc@PjUy]值[ܠ@Vk8*T rv w)+j`P:!WAMrTI9 XntJ'ƁPzN3DGw U1נЭ&2D5w/ʷ#Tp)ۻ8&ݳX]Ǫ:Tf4 @msLV_VmGIɦQPJj[Mr+qUW@Ǩ(\}t qP)x ]l^98d9>8kbA+Mug.olOnJ 6Vwhl m:~ &tAD>#hPy(,~Id#>v P'r^n5k=of2Wr-:~O%/&eNOR{陠l7JJ<vA˓N\(;3:u;ʶ~^uQ2iz"RO6[ }4Ln? %N>i* 5*pMXUՁ PYvH4SҠ=v}ccPR1_0(QKdW9D|QYػTlOLHǵIw-Aoq"y; Jޭ @-^w85x}4PAv8.j6SwP)sL߲ -'}AJ.V1 t%\H"ƪ{v@<ˀ.d}we?QO:p e?U3E=HU Xsx{OTgPhU\b@ߍO4}ho6 $<\W}t"گۂNڰv {3 ,g\U'=(h/j,]i:.wL7vNWAQgYV~2(HqmZ*_v·+KA^пY'PsђFo-UI?:=yZ)N}v+"Aѽ5yv҂ŧd/W ovq3sLgPz0'OIANPX?B4/ߩ"LAefz(d^C@a$O4h_2ydަp< kJL8\>؛ZQn!q*BhN̬(S%sLhYLW..l eE-Jρ&su9PaROMc}P : )yW]y<_\)yjJk%IUƠnyZ8c>ƫ>E׎yK e^ȁeF;0z [εPId] {4%G>'/fGO5g@?o6qu>M+]_(~4R֭.8tb4_Y]jk>9VxܨR6xI4ELU:6 PS2"atKP7=5r(x 5Ng2Tgmd(>(}QS0>N㾷[qtnP{q0RraT2Y `]sGPRX* ^~rd+( ԙA/jbm}f*WMѥpVf8|f~j_]CwQk+?mLAxWsƕ/a/(m:˒ F;)@'c _{&I&Vt7N;R~Y1>q [eۼ@8`.al|{J%Dei[[L/@d9+yojYWRnI!axgsR9 o]slo ] 0^]7jgC:Lz0xJž bghڦ6?)=Eٌ rNɫ@n Wy/+'T)Yv 5%ӇA=,I)+PuFAG6 ԑFV8)gzX ZLM@!>` WMG:;AqF_:/,j7ւZɋG=*?=AOE(|Raۺh&/>< flA)8{nC(7^B."B0U G<yzm[A2e=@3j_sLUG@e`$X0A*كaP/0 :ϓo٠A@NV esQzj}:U_y?0q5ibFAQn_u׍r ԫ_IɆA\@>m۸)܁7x>~z:P*N~e ~pPz`Nك,'bGA!Jc{E[2 Db=or6D*uO[P8JknyԷ K%~O3#w{h4V//0H/4?8'TZ  Żrjhl{ h(Pk(v ʶ 挄w`(~AƵ3 W/^8堉ȫU/8Nx+akZէ̍]MϷ?v0vQ}8 e.[WS@+>-堢" }~K؁R??4rO=YK̝~LA'^]Cs{STNvx` RP9ۦP Q֌@+:SG DzUSs0p#㹩@YL#a(\7t^^5]wUEڑuPȐq9)=L1 ^%qx6x*Ji4BױGf"e%JJECHB%U$)QJI:8}_z]')#8EI8Em^A-p?͖)9o-kBUZ☓2; gMs{AMWifK~J\,Ъ_pb]vէi'P4ʖ]B.hƭ35O>s,(M\ePRɎ 9htM ^N6QTT|Ɠ3z +xJ$/_[DkI&ݪѵ/%Q oe^1`ٱvDtܳ[479+4// wGO/-; 3@OkPVS<3Q;}N0tYxLu"#P-ϗ>p5ߒ uĸvKNt}0تbjPkҜXOxdvu =PjM޾CJM[s;m=<ͥ JQ`3$~:m% x!(OnsVAT1Vwz> /:Z  N5'Uρ'ϯeNpSۨEߡ':/oN{EN@pr,VR$^&yi6xpI_j~63cuY xԩeUP맽2c-l0R1S1hrqAkF/Hsmur=4=Zug@0s=4cGZCh8Y*$̓;rŷ# /c-~J-rѥIe|,Gd 0kCl<1/wJ@f2Gٛpw_&Z~G#kKpm6z.j[d2i u/+7vsqW7#|A$clVr7CQV̴7]Ņ/,ar>X-&A?'<* [KnVPEg$UyA?vkoE*oьB5ֿ2^sv=;л<(2?WIvr%c׬ie)ZKJx"_IUsXBqՇM->Z5y oR~^f#9U B˂R hyBc}u/D0Oӵ20M=;o*_qڏ=u0/s7ZВo]O2vA=aqؖ9CaR]M_Y a'lceEPAA~GvYƄti1)v1J>*٭a rzˬVs4GfB?%s~e}~_lt#l-wvS 'e(9<5$w`s^RD^- :?/S|ꙮ$[7o7G+%o}P|jQ{ ۶B}kjh^[9vDm']~*2 RURƃ:s&w&ũ)UHA);)}xFy!gȕ> NtԀ287x("w6 j՝#fحW,ewaJi?8m-SH6g>޼VJ3CAM9s cK'j9Inmi^ @RMl}Dzu`&0ApM`Tݩ]TܥuW'l`a5plސ|mw $Aht,4,/+PG!@ jjABtO?=hk3_-55P-˪ yx"?k^D}Mi%p{(G ?>ޓy#LMAh 9)[c02u(YuKb`4zrSF_/z.Gp"ӡѱNKNHBKE$ymk8k ͌@S2~?2o wL^ዚ1-C1[AH&&PxZ] Ur`meRȐu;ߏKHN=.4 ,2ۏhp|xć (c;L*=SЪr1^}i ά{*. .S-ߠ˿Lb -RWzޱ:>5L AdZAq H'+|I r37=Ǩa n Н Q T\Pgqhl+/N{NJp :NAeKP?M̊+ *NBwng =]䄜g|G+#j|ڔb] s63?wY͔,A~޿sA 8%hmv6Nh~8_ȋMa$j5GgaK8Xqs@7-| pOYF&|1Aq&_^scLf ;Pڝ':dbJ3a5!Ij!KޫTz%wB'lA)f5JJAp4{?Tޅ-vycPBEm>Oigkf6Hq#+ÏS@26L XYA]ģF#5}@5XW^RqXz;\r%ϬUѲX/2tj"?u SA2Vk,T"ߛgÙݷmAk *[%#O5SYo~{ԅԿ;k/y}|*leW}כ B)OD HWKtg-Y[kŖVEwOhk dG V$A)e,<֌ETXX?>2*^@շEȺ^E D.X 3_vOYrV2ߎl#e8:겁aPט>Z8 o bH'~.0 -EՅhh[F1߼݉*6}0x0[zoΏ90-|{t`~`?ʝn v_:`zª91w,頍~INPn7`@qoe9 F_}] OCG ׿x!fLN<~^disW.͉A5$ߖ ۅvPضd䍙(.ns Y1.36g&P[w\OQtch?\!W&(o3jjdajWN .ky+kV}ŧA 2n]*m^@Crb&ᆲ^=NG1P:nF5n0BgI>6Ɛㄏ}I)KRõ 5&ӻr?G=Bm|%ս9z]>ww?4j$ίl޻0a=̰2- @rh0tlM/}e_JaX<1 N@id $nٵ_<熽QzHr=Ȭ| Ҷ1$l83=_i8g&rezwB' mj H8, VuhgG't T v(j?t'W*߻2'ٯ CSē/YX[jx ͧݢUAr矊ya๲ m*)w=4㞬; qСv} !UhnYR&O6plb6Î.pZFeh +W:-]软@ -ꐫEfВ |9{U~p[p6Yl#4v(w lvd/OQmi2/zbC?n=d-Lj޳+bދ[Bƃ#{)PiK\7 >@cnS;TۂϠ{yQ"(+'4Nw9 y;+mwS7N=Ä 4ho8h;$Nz@kWYʿ:9g>mySĻIZMyl48)$w0.L[ m;&#yxE>^qPoy BgU~h5rqb0j9i@{Uw50zBm?_ѝݬ썩N f~k㯬c08DJ#`MʭăsYg۬+& VcYr"E %݊?&ڶso۪A^ B'`;ס53}M4#oXΌʮxZc2(zi,a|jcXy?sO%H·6<|s_=Y 󜊺&P#r^QvޚRIsu@7=llϩKz-$@7DmKtٺ*`Ty?m ~S ޡA6Qz>V=Gߠ'ҩ:5Ns`f+ v\Q} 7e8RoT'vd.xH̛vKʿM-ZuľHoSiA]i u<[jh |XoI}pd):Y 恅!C0ƇcX5<|=R,<ӿUCkvlE~0m]bOqRg5 BySh X0g"<^pAOE/ 9#7@tnOG3\ 탺 8{X_#;:k"9n0T\n~ =VfԶckOxqG//0_9 uZh_3=Ci`;П峢%K_15ԡWggAvH 7o| S^/MW߿@(`ǽ9x ܧw-räzdG\# >"9qyc¨ݱx4^q )2N֧gY/dQM7hz@GEHS.A`05.~|h>K@Xu5x7m432k(Jz'ߵʠ2P PSw ſNnzk nOct拄:^ ~b^z +m /ت&2d պ?ZXEƥl _a^{^G"X :vbspI jik 3+@ RϽ 6:i VQ8̀5{) T%;ϒA:~PR~ @T4p2 ݡqZh/f#`c5P{r$4ŗ>tRw-8 Oer{(9 s` {, Fۢ9PS=\duPT ;Wg h~__> ƒWP/kʊ1]2 [ؙ Gg[mPՕ8-#s_PoyY„˩ݹ Mu,Qش٫Mp`mpZӻ=m|L0 ,76*4C>5.ӣלA&S ,Q!i :1M%{??D0] X),]ӠqYv8=,~N+JoXǭHB;6y#po`gv,V%?OW{3ɿi&+Aj|\ڛV_$Օ{x%뮂ŗIT o]rUNz,zr)z%>/ٵ\=Oy&s+s^_vsZ0ԅW^S# ]7RWaa:*B])zǮ²#q*Nwa-r i~Io^ʑPq69WYhRZ}ÇZ6Vj: Ui"%lKy`<7" * vMOl (0͟[7V}?1_)4BėǶ.SmPwe4 8 Fա7ϣfJV7twl$7?dڃ?ҫ ;<0.? |wpt:Zyxܯm oD:=+ eB۹)l bJ%OҴzUNϋTO/wu׏??fKǑ PFJ?zQy G%YIp:ohЊV5#߯;)Ў<<5ETN6(潴'Q8'Jcӟj(~^ LeDyF;V!Y@`yA܅9Ou#O+M>ГEbb:{Y^%G2b2h]xl̩+@4o }B t`u< K)`[ &a TkN^֜q=2'd-_k,iIoOӇ-ˡVC+:aI&3\Ј. 75xvMΉԃ^}F=9wbu_dF's8Kz-zv*P6/aȑ4s n-7-S e]| Ӿ};s"{Y7Rz +e|Y| k? Cw߮@%7楤5T0iDbwGiu}b.effMޝWM."`/ gmB9A[Qsُ.7$$rĮ->;@UdB>0rqr`Wi\ SݜH^=ukW'e_^5O;-抚X[ӭLzw6K0K)!կ>;o=#6i1x<,"z @<"viaEpGopǣ P{&ѹЭx[9O!;Pƽten'{ Ͼjɡ|3u_M6`y~}o 83ra"j )bY RqNEPԗyeExtRVP[zҸ4%62d|w*"}]6s<ǿ`>wZ90o]v/Q0I%ӗ\B C6A%b/ff/,gv`hFʋMy䚶^hn2 8+X߄SN ee,nN! f&zViMq@oRԊck"r{8#H95jH)\ Sƭw5ux~IWunxƟ1k%$x?ycO%|Eu{d|SQBA6;_6D{| .g_o7zuA͖T!hӅ\ l k-NGϓfVBkˆK>}gDZ]*)6yά>8053o-6]QuRc<,E%4w4YO&j!ҞJFkn}μ$j~AC:PM$YF:.`;ZR0jd6%:]\B`Ԡ8<N_OEt9 ,Y.Qf׏#tn[>^Rw"=;^ X|Z=J :Ŋ3dJ%8=_#' ܨǎ'"x۴]7dk2'NS1ZDM$C>׉iw?+vH^??X=jڜZs)v{3_ ӺqO!Htݣ )+q@$(OWPo\g/4,>;4 ĒJ =9ZH>m6nNK9p?,F4LWS#%YAW xIOXz1| Nޱ W7#@4W/E@fcV8D=9/|cOqfF xdG ;㲫&R3%o\4q>gb$>"XC39;הs3zXpVxu&K SX⿕#v"tP9 >s"띎= -_k `UlIrNҞ]J\+_S}YKXY x/8u #Xi<]ڳu*Wvi\|~g5kv톸b$9.{SXtV)uKFeh=xwgͣ>3z sxCn;dSDפ>~T:˷ד+xxEߍꃧۡ0a\A@ \ ٖ[AN䨓=w]wWW=%դ?e(dx~i%Q-Cg:5nhnjT<-Dzrc _F!='vqb̌A`ʣE>gY#zWK7¿𢓛z؞"p_QmW׷orLTrų^q}ί{_#*>9unk/毅TPx]32vG]s7} ޏXݔDxVXȚ?%Y7mWRBN<xG%H .tFʎZ7 p[vax8h<恓[Bev%T ?V<Mފ_3W}ew1w}xG ?B{D >?7jJFC~V??hu>}#&Ju]?75a}=KZV_O^eb#R@GDSNs@Eݑ N&ggrcf< 5/fDiZ..QoƝ6v>7 ͊Ye~?QXJ׫k|g}m йH?/Oqi寖^hxo U%ޟu-D\^|"bU^_ɗ7hلQ*/z_j,#92Ƀ388GOi|yɶ| -"o?"D Ex 6ȫG_ K޹@FO@ ?9Sx[8ᦱ-b۶{,US 1.dn+Ox$SnXo*W{YcB&.{tqWj6ITmTz ` |kh(s-5\+ gcKf.PNX‘EfH<nynzS;@R_,$#k xh͍Dz̸&I#x2(B;~DT4~Rwv/|9>~GbeI xi\7 բ6օ^e$"dJJSx+Ǖ'S!.Mg!l%ݼDŽ_OMc)<} =m5_U}ؾIp~'mwPEP_hrNS &ֲudYk erz_*' >)x1]ƜO|6Rb$vy!$pAH.y rD:xpW9dx9]WC\ybT!r-eX[} $^"M|#'IŢ<< hÉWirgnwr=pq1%<;3*{V‡ؕפ໠tϙ3w}N&9{~DOx"oĝ$xl,]vozf[9m?$܍23h*,gǽT.GT,CqnXY!j7.FɕG,+e )~TРk6~tӇ[,Hb=;P 5d{" oY8# Wwܒͫ>B*"~~}똏 ]\zwp >/߀gf&`j|cGM߽3=zMo=~<oԝBq?|@`If&5?x}rJL'~@Mk 6ᥚ\n!?ƝHn+`k\_79" hMg^UUG czuЍvO?ݜSYqMt?WO&u\>֗mWzD< o7ufKxش,O(Vt9|Ṓcxjٷ//+/ot}x)놃UD9R^ΡA6o]?mpw'e7{ӭ.,{3^CbIxMz*M=-x5ҽ{od~] 9>r~m<敧۫@%i5 ^xa7+TF &rْ>̈́xN)"_9"XcaiUvίۼllhE4;@~j=xc #r .K[2hD=ލ$H~j pu{GeOG 7m| /#,m"|5ǝ#规e+E(F@ͩI9U= +7: x(~)[Npmu?xh}'oJMx;G}mo•d%>ykKv7$eÕyjf <]iOqdS>x/</Cnpoޔt֫xLВ>jV%^wy7޸ݸKVﰵpJx\ϟ*)xRs%+--H{Qd)_ן wZ؈8y7dK.5R-RLZψ| qmirx'(6}v֋;y jBǵVu W{ԭpQ3TC\ ,0?ř+wr-\ie*W0t4 -wGp6gY oҋؿSX  mu篙(e %͝ts C묅UyK[ KjM qgw=kӭp;tv]* FDE^CmܨmhG`sJ~U,ֆHWʄw)&glȨ/Ye]}/ۈOE;"$'..9Y%d}>^3- '<獽"R2hTnE F?D/Yv=:g iV]uqV&Ď]=}v AEH# Ŋ+ Aޡa"K]|]( +n't}wX?)(ޥ8{Ӱ2!BUȈQvHVdeD{~qUx<}? 6wٚ=7^\rHedHDžG/CR ɔ,g宍5ch?Q@a ?v/DY !!4j<:1%^]1xʣ'o=g`P|+M?t#j}0LN9;YZ2lXJ PzKhAЊҔ.WRԫ^gEꖃ)@~ϕL S{ U8{׌ Y{΅:?.:菻7CWs3`k;@N`t>K饼l.gMu(=6VfJ$*srA7ர=:K$? _ X|N.:^1p/^.4zɯGRkƷ3m8Cz_gon`lx2{ 3?Ҩ>ڨ7 pW;h\GƅҬίܙ͓ùvmͫ+j QȎ񛮂utX6 o OY^#'X ̞A.O_V/Wm0xWoɺ_*v?+OnC%a@/r]h? 3k묁!P!k ֹm|j(j]G$Wn`\p_Fwglы/5Atxb`<nIArپ3׼i@tC/Uyеa}fJe.zt7KQRU'6N>Yr$oTd㌾q;_hW0q4y/Z8~X0l5ON/֕Ӏ2ѹU@^3 f{5ٔmH:GiM T ˡ@/>*+G7TR:0Kc8S/ ,x%m b`/q!Jhc7uC<^;?=" #ɬT_;oG`UY;(>sRXV{dAUrM ]yqwb Wn3kᮄq}-ԅ?5geI> ǼK3^" NblXp7ݻ{SuǬF8o99 M. L To4K\'?Xƪ1~hS27 BNi֧_A/([[?]-C}F^Yaӕ@(\5\,xy ;NKLՙ:,# 6g>z 6MF5c)ahx -CgْS EA`yn8g"ş_fƖA}LA4dɀ/ږsxwOhg™Z[AZq/~ \ g >nDoo\k> k5/Sz}Dpk[ږ8A['TRQl_E r_M׭c))"wLh?5 +WOz{z_U?ATZ46P[dCj_T MF>5<';DžWpus]n{j1nnI4w`lKjh'3m5֢MQ3Z/˜$~wyoϷ9ah,}L=2U߻ѵR| v _r@.F9;6h;`CU*Av5<^l9W:Oáz$tM9\4`@5|}>X S]ta׻:]^ ,1<,o>(x`,|;;cⲺ4c7n1|HR<% O9բFG*?n}! 9T>VYzWe#ZP}!#`s`&&3'φ+{ND9Y=pWboǎh CkQ C3!~Ovcsto3Z?{{+Pmy{RHgۣ?A,lSs;Q8<1xofr'cږ: c s^&So xO*Vc٦{iX Z!) b}N WB\\8>u4w:r=QF95SAT͚" Ĭ/6tj )88: $T&0UPz{c[)r҇oO{͟e˛A48 h57Q{jT`/vh+n$Md8%ן@ }e;E(]-msW3-,_'.B.ʿZ O`8?UDŽ 1=y”#16u Kpzo=㇗Uo*N:5F "3W)4z'7:>1([+N£3Ɓ]4d7`7_^eSKy0ݭksbhJݥ>0Ah_}> EwOR}~ hF'oQt]~\SC9{pzZRS6%۲ԷR-J GZُ/ϧvyIwA;UН 6K)mL*q)p[_ DyɣU+MFCo=HJ`];Y^Q^t?ii uҀ'E+:c1H̝>W]ut.]F3{#_&\T=%9BE灵ڞptk6[T%sFr E)ZGI`B!@2f=WVn 'jRK Qs&`-p}ֲ*Q[ VmW?>ʯnϭ>WgC7.Ⓛ qڇZy4{^=gU-d{`nƮZcͦ#]%\" M<-ħeyRi1!y[YP -ӲmCv$*UB?D.@k>u?'C ܰҦrӚko~jl;F?PzfsﯫS&A;s$ /؏4I3:,VcA(,[Zl\ם CC/;x]vdN>+8̏OXORh)}wYUƼfwwQ~}`^_5a+>1$6J}Oy-lOXa|*Z*`MU,v֥ ?(=mu uV>UMQownW7/xXz+[|R`fzg +>P3޵y.:ݤP*-6@$?lX0'0e_9mOT.n.+t`#U#A[N,НBG# r > q/8"EwQqG{~ !tH~ :LAzvXG3m Ae3r#S34ɯgκ17 M7hBg,tk;{cWw !߱JEg: :9Co%VZtc(jɂ@Ӂ4&zl'?ua^O.̺4dP V'~vZ[kru lIC py)r@r,)C#禮NvA}vV@ x _^+SzQJSZh!H|^'xœ}% ANy-WhpDbiǒJ,v͠Pίf i=(=N߯0j&0~둺d] y?}ֽU/F)x<#-E ~ri~W3pxn 3|]-%5@QaG` 1}=8 nipON ؛ tiem{x#ÚxҏQonocB??SfCbm Zܓ#_Qv?^X?ƸF͆+Q fҘ‡LۓAI߅] ;Ư] \nO.;=b0We&mE3 XkK[uQS]P8d"n9>1AbT] Wu7l;QӡHFnjBMvԜa>$9͓ C:L\ۛGoZ;(ڬ`u1qUOYխ3M`dgXP`&S)ȱ3={9a3@ߴs@JjvgT )}~:r h`1$kIh mF>ůN'u[ a>sAXn; o =/Xx.M~KQ˼ t'LJKe0}SAp3 Oy_ L ft/9UE]SD(1-0?Qs8m T:4D3Rgl^"M9/mc8bj׀xuyE$5AoGO icA"^⠗i@TFUfqw/&wh _^dem6Lv'qP.IݞH[`WR_5:)X3=Vgj.=Y _N1@|I?5`6l7m q'\~x8X@g]E (a԰ x#y9^+ׅ/@ػx.~hnժBۋ|kqz+$Ӯ:>ps@ SW]\Evpx9AtJGZE<0sԖ?<wGq] (~͙`36_ȣ.9I9[l:ʥ1n_(|M[D,V7X8R3m _i_+ y]"-ʜE` "ݚ=`;3CA_и!2#&[GƷ|EyHp AA*,)pdUX&o2{W7J~Eͷ\`. ۾ &)_ves W/§VK1?̷w,@&Nϛ bo_ w3V.HH ,$|߉fl<@+Դ]Ao|n0VNP~7[T)]r+{$l>dנ0o f),ȪV2qe˓b]IJrU[, P IG7нR?mp5I;&N'^\AW2`&cxD~t+ƬKf\h;l>+?=zί[3 >zPYU :/*wրRK0~cݶ`YGs)[>Vxf82)vkƛ=pKޤ!Wo ŵSƼ>u*Aly([NM xXہ8a=`Tf/V@]^tNqY7fdȠ9]6HƎ9S]uE|ύF.Z]5$&t+> a)$|YTLϷw9HYJ5ɓC.t ~{cVx4!+ȁ%q[6~_G3]>pP, SM3{Q}dشx`ZğvKܾ-e)˃*%j`w.#s{V}EU`>qtSya{ ,oY0 ~'}Xj'YGanm`+sj0c_ouV;)vn|p~,'j^d⫝NoW[viLpؾc}ewjE`9gxU џ Xު?9co~>,l#<طW =BE~IVL 8Ȉ[ P#V(Co~ orus\5?&W}v:9U0ɰ޺uK ,ꧾ|NKiݬxXto )m ߾ /y+\N[%U??.)<۵ݪ`a76>=x$*TD]6v .H5n-XrV>,]"Cc*+`%ϘO^/r~i^@;+,0LeR] Tyu|_ps~p;ˌ]ӛ`\3.h߫f_=au~FHEMxTo峹`/\ aO;v9<Vq.۬c `5a+OY=cI=ٯH+_㳊1iՆ[49'y [$>SND;G 5L=^1֝ifu%35ڻv;?0yOR@>ׅ?#qnW|BeDOgV`Cq@/"8)=/ڏaZ^Bf8|y@oFY| 7M?6[/;* ~4~g_gEsut+ $O1 ._3 <ǢrnEv<' Ayv S0Z~ws󛺨ENniߑߌs_OR^sb<𜘷/(kГRq:um$C&i.n&ot^gMi<K#g]Om9._w}:ҮIDw"/`zLAܞ}j3K'5Hw0??Kj\RI>zƦY6Epυ8w$,[+v3^sfQv4'Yԟn&}-GGʭ͇^v$yu s\8aw:}'iwxԟvtr ;+鼩$xP#ƛłGyu~l|q_x3+şz&lcB}y^ 6/3N$h55y__TOW'z.h{>_:RzccCA}yߖ7INcLΎ"'k"ַ4N:6c -H υכ08_\<ɫ`Gփ}~rnߘVR)w\) \ӑ>8Mhq\0m,hzI= /y_a^ o}]aD #nHhޟϞnǸy{5 9/I?YW7=<q!وR"@+UG}C9N .~'2~&:tBʵ ^X?oOt;f{6pUU=Wԑ'J >b=a\lf I yo\kw@e`mkҢnO6͟Uzܲ >G ׺#it? S`AQ7,ayt2yKh??z_Yr)BI d3$"Rx ?Wvyӧ/J/ $&z<3ߋ!BX|_FK o9ZL"A{\G_/g]FI~3L,VwuI"w {פ WR7_wב=ڏuKM#Ȼ8";T!\/s8IυF;߄?sWeÑR#@&/f  >`y9/ך] 5r/$~:@'oc0%#>E?.AMl+u.#> {מ+1?=8mqnKRZr;t 33̖xw%8Hv;yhW#/DwH8g>ptXWKyb~Zx}SsQ/pρ&'R}8FBG.ss1^n˴ly=/j!7F`ZxZ68{#ٓdn)puF՟5n g%{,ys CI#MҺÿq|= ⬋4<7MI$nPoȾGoK+ߣ0u9yt.mF~@;GطiػzA gsY-5oԯM~2J'Q!R̥1O'0OnKF:/Ž/ Zߪ$^hun淙$ޑ#3wuc_j9m} DhAIt4 +5]ǘwMoCžC'~ky!>qs7zI:}^ v'F^+"K7oqɹq@^?/#'t\?Z|5/ _xsP|d"͛x.gpN:"6IQFgOwQnF/=dyݴsk/{ 8~JN2oDH&W~'s C~owCϼKsi-H>s}i`y G1ϰt~7YkoSbSFaw߹v'}ܷa}`^ʑn&=K>>_71~Cⲉ7:BSPSOo§ҸC oNȽ qemQ?In;bx)ݏ;G|}_=szo[ϴ/M5/N""b}:4c+y.ثx-?¯??DpH7"^gI '%R޿B}:|m9MtF|?KcYox_?uDUv$usg7څH_9YI~`a~Sxs_|/Roy>V7|Lt>m!?|#q.'KZd zU:sS R|!sJٿQRb^ngi{6Ç}l/seدYC9[a^G)3|7}Cע߳|^Ltωj;yV2A#{ԩzD1O}1I}HbXwX'nWw(K`{h}HVȣh'ļ3gխwq_jAqߜ8k< mYR}q u+}K}*~II D%#SZwgֳTFu&1ZR}o{ | ։4/0pqO~ɼT?º2hJrWxN)Ou?Oݝ=}QLR8?4c_Lt&ͿιtPEr%}TEܻ!9SZ]g7ϷN7_}Uʫd~%yJ)KR]y [9 ~7(#Ȩ@-{SrGP// ߇-Ӕ+ڃ½ />ڇzaY:D LooBq Ig>۾p5,!\ ιrO,77HpXny -Hs4ԵnsɾNokE9<7'Ɲ̍S<{p%y&}q/\Iys2~\+{/VøO{ҺGO>$o|v3Jȓ%} )+sbI|d~wQS;-oA/{p-Q s¼y,~ǿ}0?wq8k4-^dT5{};9g2o~%ne'7_KdN&$~DFtү߹_3#yE>B}ޏui]au[I-R!߽(s/x "4L ;-!NC!UwvM^ Wܝ+BU j^ D*7Nb$W TΖe 2Gye5Bl*΁(c7By49DHj]$ x2k:$b=f !ךScS!"1sG=@'ɡq=`qː_s09~6R7A(*9%_>k[][.Q!舆r:{KC[m @ToA\_Bag'Alք}bJd6ojSVx~+ ީ_ޅӛG~Qc<%_Ad;p+D<٥Aqrq!`+%bCXA@g֛q Ej LͲ8u фͽx7mMT;]#́g& N A5䏪N0cb)D3e 1J F搫CA S6Є G\'Ac T~FBZ9?S " xwBǗchgh8ݿ K?]!ng Ώ]az-;!,asavfIDf,D̪ O5 kpe]gPS~TCp_v@=Dn) BYy8gxus2*\"cB]}7+p8 !r[!ZmC3oS.uY=Ь%7 hݥ"o!Ӿ;@P"C= }|t6u5#!Pd´Z*<>Ez|#ҚtwjY ѵVQk!ڊ)Qr?mS YaŊ'FSuߢ!f4_~6F/Or1"]!\Ńmag .)smQ_74-"sb]U3:Z F\m5,iN?bө^Qc)D\ [Y /}ax6eby)EVL+=ax[Y) eB{iD*HJC4HECEi %!}_8uu)R(C-ڼ =ߑ?̳%Ų7z/D-Q6o9^  p}y@a1x0[n?$:RfN2W<m){78PJ ڴE?3{K кɡS{ ȒӔB8_4XomO!GMj`c$fCħc ;U!B ~Sҿph)CTZ>g->w䟹 mqtLվ ogn[J$!9w5߬%O#A{:%q Vu5Q_l47&总f ѷZZ L5kVc1.3\/qϰ͐ -ԊUAV Yfyj}ܾ,}op[;pt~Z!>~f䪡ҔF=W7r'[6m6&{">C̋"gA>, T ailp\?˞Lv*wAyZTQz mg@) To@wM2]évϻeчy.;;_chH]|Ҏ_N fPis[3=mTU_?1<|3D'A=؀6T;QKtyr40"՛%<0"r^x~dv͕`iqھ'0]%I hV@x(p8;K9=ʿȜA^_{Άb` ^>~gN  {}J :9XωUg̢=[:ޝ_~و:$ʛMwlt3Uƨon6H7"KFM7y(q6/[wB|w·[x++g̫KG.0IB`,jcɚy!:gzS]ʺ\O3uqI!͑] lVA0G?NChF;d9/t]R?=sFmZvg7^^Jےpʭ!~(I$;SHp5N½Lpo̓`DLlWS:]̲Caе2>t~ ʡ}+ x*zae17$@d :Q;ȮUs{5fՀ&Qg^6Rvp,s7zWĞ$q\H:JN+\sm8l`-]/]|̂8co}/ hOѿ?fHu{cj~Ies{T$&«-Avވ|0ϖ/2aFf,9nAGҜ"H&y#-~'[5 +< 2Qacf0+8 GI;{fߚ4*gBAa[!bOSBg T뺗z Re@\l;DAkηT1fi7gƦB~? N`xT "ѷ'n1Էxſ@Oq}Z)KY,O|ر:!ZNuuL+O[Z a|}:$ߵ͜8x;}-S?w([X܆Pl.! 5%`ҶP RL5T3[g!Ӿ3_ILwK]hГQUylz![_s# lꙻ3~o(M1֟Ef}znqҳUiev^p}p6zYA˳]a:&'`|dN)&?C*ss% W;n/{G- "?/o!x6 C/g`8!Z ɱƘ7@Aٮ`}4}bf}_`k|@zG .FBl䏠xq,[ˌApy{R,{ts.~Fݓ(3H~ x$&rj W_!zULV(ܝ.w֚A`rh8Ygnzqk_s:3b!~ZX2E?c$)Ukznգ %!ݠfF鄹jm Њ~֠NGYۍUTvLGL~hAtUD#4^6G#6ē^]m[d#P{1#G;ǵj"v+zeu/lUF%{7l}0/vP Բ #!Z1i| l9wq7&wP٬%6nyfzn- xc< 7בn2GHDVB0"ŝq`,mV@_-8Tӯ@gdC?8Z?LrK@hR`jڹuZKөQZi*3042C1jǡf]I7DW]48q:#DU zv~@`AX0K9k.DG]V>Pz?)M;\"=1bb{5=C@=*rQYyklAYI+S,ŷt~׺()UeHP rZ QHzf:p%?n>;y#ȻuD#'s̖{u13'';F}g䝈Dw@?=^oByGtك0V?Sw4@ˬ쉧sqCЃ&/WpiB T⃷_ |rC[0-)lXl:6Y@h=me 8}yp2{LR!$we/K9af e/ɿIA)Βk9uS q _ wOI?8d<.`WH܊UTMym Blp:4_Րڭ /[;S)GEţ/Q!uc-=!\8Z772f,ʜ+yAVjˑzu-(k"i[{n!D_2Hlav+媆]~ Ot"אq V?EC6Y۬{Amq9p|C޿7ra>k*;T*$|m,qkr@kH:+&>Q>[(t<^}"|2'@g5Ž|m H./=J 2!%c< cy}s)$*x`v|w"Cf?=`_ vkR=ωH4gUz2x+.bܦ|Hg( wc\l6 YMۘ>ӶԞ+NE(H?uT{'l涣VzGx˜SD99:P8qΤS5!z3ekī]oxĻ&ni x]<dFBghNyyQH,3ހO{vWS;Έ.Hko2ΘQ־{}Wp |&ʤ>&~źS2оy ܮ~Baͼz:n ^a7m`^漵'.AX`b~6C-}Z`ykغ8ĉ}Bws:gO&\+ AչR U1҆ؾ`M#g'nj?g5]<%!fu>eEfˉZέ9sgA@>t zdL: O4I)pԒلRm{'k|_n6Zw!wCxBJϚApjlΌ)Xz*=5 @Jsz˧<7^T2*cq) v:~ foK)(;,-ؖ7VL+79{|0o+؊#VSQPp6fi}-Kg߅35a8r޳%i-Q3J #ֱ2 T|oɑ3Ip?TEeKʱU!2 $ñj#zls[_b\"\d! 8 s'??'P` q߹s]gJdhaDΨB*Uw.go^2痧L`*A)?I ZʅR}4?Ny|FQ%nW!S5ܡc5!}ݴ,;R^ " k46Dycy Z9+Lca-~,\i˹<[7F. qa}M^zyVF18N&=J H,3&x¡b8ka!ks/uz8pd<O=k>Տn-G W&5Ar3{|2*-PzH? I[ n[I,0"y`bͽp'_J}VA8>jQc}RJ'ׯ!IlzG+v|ϟ^\{Wzmi~ zhʷm!|\t0kIV WC2^Lp__}eMd}?X(Xh45~7(eSsb>h8fޞֽw.@kOYd3${^]0R 陁؜9Xm͗ /NuTUxK NeB0'䰽 WݓE\ĨVq9jVd#rg.pZOW!4nr.Y_* B'΃Gv@2w>- /s7G$Y炖B32!X7{*r7g{Zɧ/(eEKH cvYge3=O9͎y{JОH5AcHϞs +~h k ߂vIWwȎ};UiO.v5W' s&*"=74[/MlT^ ]PHLx#F邩@u߼`:0[YmV `\,@j&M#./ȞS,TZH:8l|Fs%in&}h+ug8[@䗸`n-8?W4d⾍;Ȟmeʉs ڸ*!;@EW vVo@Jm7]ӐKKfS ng[$=P߹>J/QKȃ, P-_) ~n.K޼n2s|ӜZH:4#2xyu@m|<9O\hhMƼj?_Wf`N _!@~;x='4-C"z" Z(,LYoI K{oޛ#il@0*o&u; w\\9.OCR`TnpQ%~_$_?wn64ƎNqֵ3>\T-(m쵢:ujȌ+=|SiYa鞱i7.8a2J/Z mBȊ*o$7I 9EfY`Z5ڶ_JQԚ ZѴ~Aɦ'RVY_h:%I~٪x/@S]ahHm@88>u/Fn'o48лo15k# ݲ=!ДTOB}qݯ񐸧l摞N Hyd x|{|b&ˀ # vN}s =Jg瑜[ 鉚O~D#/@r0V{oT8F)s\~z,ۃьC )*]aJExPCl|zf1<t#+K!M4O8޹k^u6hM, o?Clё^;9Fi-yZ~rI_ۼդeW 9h=NINw_ժ}$n9!u>zyP ̄+Cs/6/ݯ#=e<va^}vw%FK 7ɬ͒u7ZhԓV>`ۿ?w‚y FY$߼7u   /5H>/[#6 QNcAb2K%yˆ`OXA!KI|:FZp;zl/R#ҷ[&2ɠ$@F~CX'h"4FuGgBz:|d-('{uvU%"t!'%}}V˽|8</$`޶[jˏNCd+S*/;p\pfx9rOg)}DT 7bIf ~4CҲߥu|dx0(;BEI !諔#PvL ;Q$6Tɐ͊|ѪHp'0-#\xyً`Y;5Oj`?yW1~"0\F#2@ ]1 6@}٥Ze`e]#M )s҇]UJлyAuFF?MuʅI OFh}dGAnSڈtض}[$"Q!w?'yļ`XgZE֮<\ŃK:7UG"?qIէIq74?[/N9QC!"/Z`9W,'T5oG+z~Pݲo=IγQ`a.|;INQ$V*M!nY{5;3'$@^! 0*p,fQImg2 B~/3D]˛~teLg52lwINl #k`!~>c@ |y¯;ynRݯE_F@$,Zw-m=&:GR%(FMDJtvvx Qю`; 4:L3Xss rR)'+cAѭòuQ<٩3N|ood Y?`G@p-hNCA+:j3p''|8S Bi${wfTGd_,0ţ=w9q `Btt&}4 8rkm X8ċ(;oUb{Z:Rp¯'WRG5\v,?pxq})`w wϯJ!ܿ}T/芩f][27k~Nt7z恺ڜTk^ݱSdj0MHI iqǂQ_kns՝b/VB/[$wFnVM~> h;~YYc=$1]JF]a?;d wG 7xW5X OGA re` UjS\udŢ!8j=5( 7\S|acLGL2B&zen@ qQ6ݚ]\{xMr >shT?яѲ 7!^攙5D.\3 Q[!ڦtA0oOmVyj7}`\ !PRDMOk D%Ccd*`qwi4}*wqC\|Wnt s}#ћyKl"QbDYbF[yؐcWgselG?G>>)>R0 q{!9e6³s-Z0/UW._%QUM]rxDG!bv `?H6)w }RN}Ey* S QH_:(: Ivy^+FC~E&#rk>HZfSrHawkKW<UPtl{ \9W*ȱvۤyVNt.O?Uez;h+ Lpc@#6m&{Pvj1Y4Q@R$-"Uo$k&Td]/,ȐA+tQF0v2O>L\HzۥI)AxlI'.Vv_PSJ |:< ]k<wߢ@geW}3K߀G]MST!>qg^^~ b-cah2Xa_*g>_ F)!ЋM[ [R“ت ]uOmv}z:Q]94⎽ǴɃnbh{[[䄼;ϓYU$dd0o?7$pb|.}ίm5z }=ng$?^uyQc,V}gpLj ]knҳkھ~ nb'(L5mԇ51&N[G)0yu|""DZnI`?]RVճ_o/cekX3zgxX] eÄӮt= #Yl啧2wtYA*iY^z;x9הՂoYoŪ*`3Y&eM<FvCp^M=B;d{]5TMA`n_R~&0a  Kb?CR[NMBpc q?+dl լŸ}|X/ԓ_ѼW8S~o(^dBgƨV2y( ٫^^CW-z fXOۋN0._>ܼun!h9$o=.@$бz7}?=yeT01©QMCQu;qu"x9n+n?R.[m)^UIT+L^ɦ<s6|#+=rㆭ}зʵ}u+f35ۢuS>4ay Sl,9>#6x21;M sr7vzY$|'c}u DY9`S7Ct2/cnj'k~V\~C=`o񷷬tՑ. ){{3 rn2z-ۥ޲Љ'򤯋kWCvUғܚ s jccUH?8BLV,MN=?+S jI`-|=yEWC|w/Bx_N1sςsqOlMDۆJɧsC2n: -/qqph5^1YrA\=n\,]x}8#Z }oS]9Wб9V5Jb cxObDTPS8hl5Tzӳ|i.gǍ_!|,ocOwnj*pћy$1=a= nJΖ̅ouF[>.]d6{k>l:2t{SVY8 fzzȥG\v 7i>z}q#~0|c`PݨZ|8.? I[1e`ex} ^l0 ctN7y]Ƭ\{.kZ)'+<3'Tmݮc9Z-㳃/v>f\V)D Q6]1~A1 :kY6 2oNr1J/d7pb72v9Ͱi,|]K4MKIyhP/}AĒFRl[~b,Oz $key⸠I,ucH#O:<(9[9ܩ`Tn\W摾&pH{\?^y*/盁 HϐzT^A18uL=t^nkZ'0SJ_]:ɼ-GH йe߽kF`Θky}4~JJnq!hx;콧NekΝ&~)|U<+ѓϽ_?k}C܉o) }:p}9evܸ Wt69O>ts(P޼ ⶅiSxHwWڿ{pjsa%`ܭ}R ݺ\r}Z3CEA ħYKEEO.anm}^Y>7X? ӻmdjel0Pxe U@ݴW$;*j cf@ZvmDopv= r)=&7yss6U9W*QN zx| kt!9z(M[+'Y5_åˮ L1g*TZhjWz_w-x)IW7}ݷ?~+%ѠXeq*^2`_?kюoM: Z|Viұ&tG8=w+R4 qx2m~_;hj3-**@S[ y53@9c2BSaנlCBf<1zvn[}-EV)`ߌXO;vq6|?m0^O/ߪuN4&Z͜X&WU+3'~g!\;lm |d׈ ć:E%7A%<j])YosK3=cys&Dvo5oW?I]ڰ;`|mJx7C'4 /wFڃ{MMOz%9޹O |.«5mfWw;=dp6(c]_>8/Oi*Տ䗾px3;<+sIN( =#3';6(?і$nMy}|ۿa"JEip.{ayXM#ΓQ>&B˩i+ G_4f{1V6ؽq&s8f짿,up+' 5lI#إȶx*OBJZ(hD${="[MEVEhJFF4F89*4~鸟^9ϸ뽮.b͡VV=PK񰃮o(L<`up;#JɈ_ֿz1a,{n޻:'B n!0շyhw߹\>f.!@;u]};V.9*P<%{mc ks$</߾aod|1W_/',ίY 0NaD3] }i\צ Jl-rI&喿#k'XGDzL)2mwm auKUO5sǖ]JNԥ?˹wpp"iy9C\EN[aK-NĻIi`{'I>RŠUPƸ{)c`2#J_mEkjX/2TһP|g: ̇nnX%}>OXmkS"IoK+5۸EJaw>S ʐ;6+~W!rCts ZPxeyۗeޘ(eQ}>ʭaKތE ofW۾0\~0D:Λ0<6x,D&u]E8L YWo#' g\WA>z6t~χ1@+fy~/NSb\;p-Ν-YL<< |E \L.k(\&?=CX n닮PrҜ'Hh{?KNn1"jL.jIf3k6|FGy*7H^~j1s)ؙ1[xfڭVG3)>tf̨p)­Ku¢oqQaҔQ`JR|}*ma,T?A8|K3RQX/cq$ 6BWo0c&a/V(ݡnՊVmEZCoL"ܶDk$\&>͠|1{G/|}i ar%&*xv^ܸ<80 s._̟̙Jw(]tJ;ʟz~2d_C~0>}EkدYJ5=3zNlKk{, !<X'7sae F^nw[-I!_NᲒ{l5q?ra[ޏg !+^ ,yeywZn~}p`IDΠ`)At"?;kuqʣ,O-x04 fI.6u7ru=\_[]ztT~ I8\g_e";9ίߧ{+z>8֯5a/ )=ʷ)ϗb|WP9^~gmӲ0?01}2.P/#'pВUf?tjt֏#s3Ӷ#L x-F~.l>0uz[K|\onC&Yl.)0 WY,OhY# ޛXOo@0LhN'yd+7o"̢>nx"¼WC[N>L)!//iVR'0ϩVСt7ñxD>xsNEtOߧ?%½^N6zDv<[?MIv}E yɬ&lT^apO|pIr$,xxj>syW~NՓn+! 5`ch==mo/Fn!qF )},co,$,US O{Sui' 9oCske֢3+{q^ѼΉQ8?1=pE3+a(|s <pya{VJ)a= \wޛxmsYq6 dJir:*7oau ;L_s.Fr{9NxØlxYxm을I˓,Rl_Tl=?Xz})O?{XrȜL׵E,>[9Q Ω'C.߷N"t'>hnCc Hp}pc,ip[! (||u%_q8|wrlJO~u,)"/s@+nŤphTȕg岷Q8G\LX6lw.qfir18?;*C'pUaY)<_+HTףr[K״/Q97K/8O1.ySï<6?x`#Ňaªl:T_h~aZӯ&Pv)W._I7/~'~ k0^S;ё>0=TK8sqǸa5s'M<}c};/M]NYW',&tE ͣ|Z䳔s,̣FɵهCp/Y#c,M)Fy8_duC<հx\=_O"J?_y.FV8ayc]T}\qeU۳s|`9/<6;?YDXFp>6oymuˇ'fN/8?sWW!vKIo^1xn@}~qN9%LMF9,E\I&ly”we"oc>߂8o#;UR lu_e%Oa+GnȏRuXZxbbgy93g&rQ{MWTލNxݹ~Nik<8xu._ƼT?>n)%s8UR{:طb?no6sWd 06vp./_ lݸT7QNܼh+a!'lJ'a|şǺq&K=LxqaBEIs8g}k\ mf>ay)|瞋ᶒ+,ܯN"[kxg`C$y8OjA pi ;wf uW~5(݉yQ}oDHPxs n:8Wa[#¹W >1nGOuĸp 409q.3GL ;'K af&L+p.2'rW=#N9`spzS.T>YE2dM5/?1{5yy8~8º2{xwX'ß̝/GGo0ClygV^j>|8/ry'o{3}x6-8GYR02_]qqKWypt!ׇñgd;m [y9b85W0[c=GH;iZ&P~D_X z(m31v؟u55gL}sf߇y;|N;Oˎ]JwDR{x8ρ}4eCȣmf)]un|B!Sv7™V*8QM>je_N395y"̋u;8QNƼs|¹9Ļ7\'ф_][\1%OLo%o.r'|&{a{f lx{0۔Td.R1/;#Q/ߺzGĸv:9UZ.9by:S;}b^D#׸p.ƪ 糶=o׸{l*?u&ܽR⫨wO#{ozibl6?PFLs? 8TcmS)En5%03ljOIZ0a]8a {繹8 ,;D%X_x>03n3"W/sHbn}PŰ{7wqҞixD|| qQ9NppB09{!a'SF<\C[I|ι0=['yM!xP3 (I9:X[Oޛxx~H1't51_}&gE'o&| |aש1^G9<=g|iwT`-ۧuAnc6a[;<8{6ӎfn?JlR/n~=DXsT8aߋLvS}:&㺠r:-6ZFcKz$;QxDNq,:5¾W6t''q+^xz#A65DSz p}gda޷8":(r ' 6:R~~jG 8<{/sw1oYѾB?c߃877Pt)U"/rq*5 vO6yL8=j_֖*mTN}. j>qQ{X=˩/_'u.\1LxF֟zys<': G脫y8G'/U~&xoXAq=0ҏYOoM_xng'u|s8k7G{-a !~*S;?DĜVFcx~Y=/O#=75bh;hP6 Ỽ{we7uS+s ]6_l?9$̇)t`*OsX>?ޝՃ^kςOh W*U<ÞR<-44yu l`SojR 0LK +$tўQG=?m)zWdV*SC@氹 K q_G3c@VQIIF#>}1`DO.TL)wf7v,_ sr~⻀lZMZV[Yy@ -;̱!K>: h>;]@NޒClȓaN&||O%]t^?wzEX:Ypu>53~;/186?t~ؕG7x@wwJ^}xB^>E?H @iq7#L~tNϧOѠiWdCb[0d^9kޢ:Hkt)/C뀞{n0v0Y%m!ܳ*t999߳~'h~&ӀQ}Q-б;3\ Dc},E 5eY?hMo hyBcG3Ci,C; dvmQt~?U2&AZ;rѺo 4ﹲməswmwoW%CtzP50Y$k{K ʀ5O1-`gVϾG~К6h'o5Sd5+|$>6>z?<`d(|ٹmYv|_l 0s 9k1:2h7mf : 03V㈙R&X}R@ ʪ7 ha8tffy?kP mgΜ??={_(-#ڛ=}KhoHPo-\=8^o5[nk#]M|ph`4W-|ca@ ڤZ8<>xVln <8Sk`U>FYrb!` Jz|e-4  Bl2¦^nہW5h-Q«%/m-dTѵz/se/@ ȟb9Αs]w3Yӳ%09WΖކ auoaǿ3Ek|0,j}+.QeU q7OVOŚ_?4tD|:'k>HA<{=_cWa—G2xt:2j!t.˾RQ̻N?~-,c ؇-> 5`k|sm* K3O+K:w 0+z9VMXҥk{> Ps "[exu6}VLdS.c @kQX<[<-uT9`9eaKS&(tzE]-8ƴr=a@o| }ZY#:7*p;-G6 OQ~Di!KmJ@oԨhߦ NDZщZ@gT8Nֹ;M/g-.74?:S;& ]s}9["|t"|N>vK \4XOzS}@#>6wN^9=:숟Q<ȍAq?.(\6~=zgV'̏ǻZsX$=/4=y mSXڀT-Z'z7=;bi?0F:)@oQߖSYFS]SF4ٻ{Aw̙_7r4Sd*16/^eRó=Pю, 8t̻'wJ`*fj5/؆()ҥ9nf.׻ΕGKTs`7f E6ߓ{e.qW=gVON ҏvMnG5m [s6{N)/2E5ƌzwviv\šq$hw[w7Lg#z:ΆBϪ:|,tqu's4^[63:cKm#K+~Hy\4_We; #=mX/e{> He!;n 06  bcЭ'g;?e_i}1:WY]={-c'lph_"_-ejYǁ2kKq9d.CzGmW Ôo$q}Y'zZ٘Gk z,B {oBY/D] hՏoAnk s]Lb}X糀4Wiioހ5)@ŽA}%_ yFڢ@ߵK!ڥf4ކީc.jàKˁi-Y 8G.&gz*AO <C|M3o>Ю8ʅ>g\δ2h6) o(m?8o6E@u^g(8"Ƌ+sܭ/*bDーB4?:G8 X\7޻]õQ ?d!L7P|F|Eg6!=z#Ԫ AK^t^iuꮘ C\ !uY'Ebc~?LQ{[O\8:% @#w%R\u7rc=[~D:  -нCwhK^\;1%W-hտОdN=gOۋwX ̅klxZ}50Tc/|u֒h0CR) m!ϼea9XT~H![0`;0fc-ON-3*^c$x̧ Y/ذߡսɳ@*}>lk@[Ty32l$jľݱ>A׮Ush$ғ[#_-zNM/6|Se0܎ kO8mOZxC%,KC_ҽGFPO u.z9?;T7apa0,KCWt%r#~)*-xo7s ?#y@v=fP;/4AcKOlFev` z2kirʥO?Da@ G췰3$MW|#Nz0v[}{՟םBH/h$0eg/w$n'Z69O:pfCk!L " nh ew٩;Sٟ d5<=}d--n@ucyvmPe`O[Fˎ -[CN/ o_qv=ȷ.\B0 _fZ~q(gf@pzKՋzP|ӊG:q]t1c]6NW6iʋ1-[rQ?|\Aabf0W@k `von{)D07gD "o5R_G鞹Hzs`N_HQ6еxt7iqLkPlKZ@/!t,9\SU:֩<{G=_+{w;@ t N[ ,jGi-AVa 5 i/t̀*8'g[2JIo@Oy:?8|}: l&@ 7jxzPq>#Fq$]o:1>}*oG8%'" X$'#+#Ls6`ЊEr爢վ}48Uͷ|1|ιY.Crdj^ GUEP31fLhh U۩;P=?I KFg6k1VvIgm0i}*b)uC=͒ ,|x@y|p|R ݣ5;S5w5G}{!&lϣ h۶O{W<<Nj!("p0Ee-δK ӲtN6ρ4 ;,;=uNf0b+e{ tT,-9s,XkŧoEȒRpTlp Mr 'Euܒpp傛΅@mbHGkѰx:tS #5qpɾoxvlX2MK ] Z}+c啯=,aM͊AjEnI$t_]/{ݎž2u=< ]%a^n7]BSVAČMT:.GIhy`|'?GEaF~?h?>dT dyiiH+qg{ij#Bq'ݡB;hN^`)DJlf; ^mYS\_~ mm3TE O[Kirmk&A>^ ӟj.9;ޣdc%w#ЙUg` LA4Ǣ/,ł1^%MΪ'\yr1{`i,;B@գz& JK74cJ5YbaJBͧ!>m0D b'Iڧ>(L!I9.GԦ?P1^E8{YUXr볃>:X %yzjm I.%xd%М6# y>+\J~ݧuKcg?<rȓ]~ҩw-N֫4<,#&C˞/S,G^HoZ_ cvCjPVNܣ{?SQS.г${_B6J ,M>i&e Ѵ#5XBE0!Gk_s h!?RL#pw˦cI1;I?0Dn'n62@tɼ ':)Q.k8@ϷȴT_N }oYo |Iv̓r@h{l%"D<ZNLwt}E#sUuГrě_jmٹ4Zw`͊GfڌtܮBE@O,=hsit ZSe[ּ(t=@8t=QE2$ٝЙ={V`st|k,곡D+_:g -n-mSXXvo_ |II2HXqA {2c ]k?lEI@;{? ,{ 2aO5˶R|_bq 4ߩoD}g|%)Ac߮t+MPF{mw[p|SM4mV{e~/ oD겪T YVtc`KZ7/Bx6Pjv`M>,;wo[kk5^ So潫~lM`~q8Jֆ @f40pv-Lvow3Sa k>| @O:~ Ҏ \̗3H˴W3{W-u0>˩@ψ-;=.ܧ|rF~5ai ڵ^PYЫR><Ϻ .^e`tn8Lۏ~Z{G&1_qP"0~f}X 5Odhz,Bx%uއ_@Zi1.bIXxs|N HK2A*ֵݼt XzoǾ 䢹ǞK5ӑR>@wvXҷ;M[}@,le:(o,cFcy aG?:vlx7h:_[h SЂU72^n-){x20:H#G07MȌs>oA3Wasij[vQU L+eXo='rxmixjtyM@-j#\\X_o(Go{ _~`ړg"ފw]O_A]%nsS<ݛ42 P)]تe7(HJMJ݇|!ףoP)Bm5tDyԅTl"iWu0C+!ZdM"eߘ +.>z6Ti5i?*Ԗ _@䬣%38C['#_`ڻGP(079>'UŔ'H7л?K;Uk/-FEԗ|:!H# y [23݁ȵлAB N&[b w WS?S+̮-~v'di1l>`{}`v:Dqkv@s-4O˘M]^yRϲ e-% yeй5`(IE7j`Ζd?rlE#Q-nW~=3Z; Xv2v|N4a.XOqLWtSK8E>mn=6ZD})c"X.fB~M"=CzH,bt^[`*5o}v2w8RQ7d лLq=Uh~gl} 黕Cez\iׇ%sA^ x鼰'!Q׎es/AŎuK%y-t.wIoƪ!ce k.Fiu6z*S,NL慝7?̤`y^ῳ hI<&Oو ٰ*5vqg@~D|=`EČk.K{ BKJP}tf8 懳4| hWu˛C[xqÄsN=R%)~Ny ˋ m{ӋUNO@ShLg_#|DTpEK`:yR/IG>7Nb' T՟f!u!r 3Dkxaׯw$d}a]:"Rf@F%+*lfZXl#{ HN`ZC@OFȱ X0E*{tYoNn?P -Q䳬?%>CoUוFa8x QHrԡj)O :r0ts7zo9^|6&1z+7~ڙ6c3gFHG'̬Si"cVV<VkouBдD<H$#` 4 ^_>+ +Yt?~h!ghh3ô2N+㢿+AH]7L +J>YW2c56Lj +[-C@U+Ll?:{S휾Z ojoLSڛ8lƔ.Q蹠pۑZɵN@<6VO uFskVB}#x~4d5ob&Y`wT4F2/yt0,֢aUzp믲"}lbgB>_?]'dikQ5=u;N_忖 bO$p'MF\-Y &J*@*Ŕq15Uc^- Eؾ<hUe<>ݩ^$M/wuqHxĸf^x;ؓ/ S_e(߅ĕ%0]nW}#Ԭ!>j)06UV$+a7\ ,Gq 0ЖoȴEk &L&d`>E4lսEE/8[&?D5v[^ŮwϏ zA[M`px4l#~2e mW0|l stT Iqk }(5_q5*Puzro_B>}Y y̲HW6P0 }ƌ6#* {aT!`Yiw`|FMJ&1?xkjlN=4HW0ŹÿމamsMKCW - 3a/~o C;k1]$t>+VGZݗv`mǚ<Iu`ɤ}0=윁]{`.zGg^{u{c1GY_ o2Ur7JS2C;7'퐔_`s,k'ԥ#b UuCVʥ`xk!06C Qj }0Gn hXk`օ0RVUT+ vbyt9FV_4`Fjo@N56t?5HEEOwm"/Gc12L)ͻz0';a:%HF;{30BGƢfTCgL,9;vL ɰm8S`/usTRٸ$)!#@ZXPB^9"VOxxT<>c෈eF /.tu̓^50vLi z_*/C30x^( F_{q}5U2wƕ[ -AQ[g0QhRҞI Dc08BbR F3/^x \k 1iGLݻ2ք/o)q?sEOWE0zv`v4)vJ`s,]Ԫ CE睱W9h_WKth]6O a&p0gć1~"fhD Q޾=0۠SHGoqh&'#|0Jam%oy?wV`ɿyAX?]n!82FE6pe>L~_ $#\o fD"?aЧ.a Icye:㽎5Y HǪa쒝KW0wK Ls\t釅50 W.n#/o )[2)j% ^7s?Xy{ I_>?o?Bw}7f+^hr8[DV}6}"T;Ͼm;r NKarbWy^+'`VAo(۩LVUm0ְlB'1^_TCleG0aLxۗ;轱C!)0~P`a׷ F yX޹OdJ wF+;M2] FC>Mݵwu^{ }X" Fvj0]#w'`qPFd =3x=h? Xw59ހO]`B,> sUv„[Wp/dF?0w[0n^ z#l Y$*ƨR^28aY Vq0$4v U 0tc:%q=ҫx302lu9Oa<׎Bfז0iZg#3;mA~6g# QUٺa1u53݊> /y_aOdt!LcU3Me߷%ַa*"3s<t 땟!0LJxesa\䡫v:פ}⣏-8DL`,̯ غ^ ow8X:֏P;`4kFDYR}Wa൑.Ʃ'n!MMRDgܪkHjI槧ta=t: gb~3(b`J3Q E2beF8ؗG0L'+2 -{f>e$|7~pɥmg=ՁlOJ\kl$2yVps&Ä%&u{FWKr '-'}#5 0t#C)Zr>YĽ6CKs,&dmjꨔqHߢIi` 9}ENc2ON߄DʟSKaaTFjm^>7M'C_eSW^L]5Ƙ 0бm"6?+8IG031 DСS sC0q|]`T4c;d zl:;3zano0~eLh&Z|kFzc]B[LPƿxT #b1?8G %iaɮ߁w/ oN6N݄qE?Cq5ʨ[bJlO3 F9_¤O8#duٖqxfFL.= ( {}Έv8rF\{邎d{5 @IXڟ@`01?ੵ JhJ/t=$U Ctai 65E][`DW<>yCm~6 Z0Yrs7XIV_d:ᯖLqIk,GN0Zkgz YM~I[=1{hq&a9:pgüܩai.\ u_-/7ԧ`,9^lO0 $Ov1L=L N9I0FW$ċaU4)tFHj|ĿkZ+)|7_OT_Q:v߁J^dɓA0bٷa޲Їe]Ԅi\G`Z3눜{2C)inws_z8Ss)k= c>)^gO,^ѷpnfƞ{ %ZXuH_"K2|X "`e`8Oݮၷ o ]-g-wV"1"2 S/TsIciBLXkݨϯ':]Tn+Q!Fnڢ^ƃogG_%UMʠ04:H-d3 kKLcs"F~S+(8g#>T>RGJ-\IxV ]WqbYp"<޲ *ÉB KUsIb`Wz*{Ǟ]ptfQ.ֶ :]{w2>(;c6 E~Ù}ݺluh֥m-N"-jcnxֹ&;\(s< 6ix&o?VZAq2źbm-ݺ`Pl^ɍFu=JG\ {O SɄ#4M>ao̷y$:S~l,,/DD?6q )i_vw"cRKH!YW8'7@eD4ʈQe¶9u)+0 (1[# HKzn:~]yf'0irR' 6cpϧ@ ݱPu.foGxm|MS@mw6`ͶiƐ륶=^R80aC$0`m/g_EZguƿ65Z XFq͞C6 !prVl@G<!>2vJ{ߓ(u=GH,lcK}ȹmHT4}/Z*LXpnKT l1onO6=7yXH eG#n7eɮ'$Lہc\68~n[lv06KH7uF^yHŵ `fu}l \f ¥<(r/YP6c`pT/@t pf ;GRI*Q@iͷq|XpX -U`H.H"n'Ӎ`a šJ_D\1/oճ u )Rh{P_D= I~j0xJK?O`mVui-twWW*,*QG@5]PwI]xhFKV`Pg{i1NJgΰax$.wQ#͟ |'Wl}`atD1J_ o̼U1\+>y>b/4r?E`N1Q}4p6lק =EHz `Be[(lد,Dh8tDt ҉@84_m`? dڲu1N}'be|NwE@\py7#Y]ԌpaN̰[cE%5wQ(cN$0aa)Ŋ9a "*JQ@Wz[*[Έo)-på@S.6͘pcq*tQiֵ3sA,ܻJcHlNh~=+"znG+تs*׆Yg{W;T'}1x&t5lGwZ#=;Y u߲&M#gv& O1]dK`Ke,5l4OyI!ݗg#"ҋ6=mXMhV X]/exQ&wAu0P7Eb!< 7F^[DY^iI$aL}D8t_""Tkaو7R>xaVx4(eXޮs1`??%!z/Nt\S",bܸ-1sF۝ Mywd_4rgxʢ-Ɖt(]V7}$ A5=~P4p#SvϲgY rvX~ ̏;! OgI1}qr`H}J1m_aċXx mc-X=MM-R+묁H + wz/u&x.!h˞Db|E|#pk" ;W>x-Rc.%:PF~8q# xyn~>Y ӯmBT0Mԛhcey·o) t٘0aܳPsQP?@ e~ &r@"_6UIS(վ$34/ cNc4p9Z!,4;Djc%|ܴẹߐxҜ}UT'n MiK~qp%.65&ԭL%8;#$`jU>0^mYӖ?EBb./kbLV»\;-`)݆36a8QFSOkҁO?u+>I@1r h.?^d{^itρP&i`0, fG+w-bn۟M:#[mN,QVڳD mM94 =e}que-.'Ix9 [x}h"w$}AX(Yz$#*3Az[ 0%c=Co})2[p^,kYT!z LnCz$ܱ08ӃyiAt?,b"@OW#w`9wr?>X2.͗\tn{͚-OϻΜڈpCGFuI' V_fPcJzdG7  aa1(شx`?RZsX~;<3՞r"?6Cxs@gk\zՅ|`;J0tҁg~IG gkqdϿrCŝ͹9|wpDd &{Bd%KnJZG,o?++$}ؾaUYV{p=ӿj"O>x|=soQUY*)޲' 7#R־[*t>n6w|ozQw>Cybx e17vZRM5W@_?nFxM.ҁ Np_%K_;ɍ#hXn{zHgEyM<X~=R|1?ck[Ԗ!0kIMp]+ qE64~Ulmp[ac.Y+ ogQ%Z2op40ʷ}"q'OHr>31μaƋQ65mjXޅub<{٣'~T R;_L;wo;87Zpa %`.zlк_ e$ufe]9$FD(4j0K#X}+vF—_aIL/~ӭ熟|rG".(2ԡgNE4(pJ1}'5hSXGa70r!P+FÄ[?vo}(WwcPŠHYܕ?ol3|))f4؅`+.<} j2NZڛ6IHZ}ó-Lƀx(<9DU$;=Eȿž&4 }YwFH`T)ݟBEˀmd pJsY%xtsG+0㚟BKMY=:_ `'Ug/Z 1n;u3ʝQ9帕X+}zȵϲ&b}w v![ZI5;@v'|EbyG璮gu]O 2qk?{,"޼/𷟀 C.ہ7z3kNԱi~A'e(ߥ˿SZw++ <mF-C|<#+8)+e b֦:$>E؅ʊg[^f\˓v#aAhc>XioQ ?O^v$k;4H <GS/.C,M,Ń.{>{NAx=).. E>xjnbo-f?}ڭU\4К;0\*?XE?jō'#X 7eώ$pE̜쁮17?.?^x}͡Ν~g"p"!&6m 5Fst>G|z&W;")-ېZ}6-ΗgȽth7z4:ȍLWVjC]Bc@-ۀqnq9ymZ`Jv^yf[y|]h>_6-*ZݜNeS_B ߽˔8peYi5E5 <{9#uWpQ]̔2o.?@-_.\':ɴg,HldU n"w2dhpfNgV)w9c "׆1}GK~OުY f]?Wt>OjJn<}盶Hj$jý/lGEǚQyf$>r5~6t2r=(so.h L|5"9P:r d]E]Wj<fobf6nky"j@fRoǮ39S脴KzONei<:bȋҖ \Ί|սiQ;yn7 ۟<F[\g$2fp-Z"Bn=Dq5#s $1Tg7sN/CL:'QLS#d:&r=-?̏ ٕ[O◱3Wm=!frߢ1ԦP3 ^*A8ŝ5!2_Xo?oHO9AI¸]o,=fJ{nbS\p+R){y4$E+pnZXq.ͬ2k$vI;xN8/= %Z'@\WIglk9S>U >w^|>§妖d|0yS8e=0_n;lF+P~Yċ/"D1$hGᅨdeH"6|""l2'kW〹6'"Zo%W):Xڦf/pR~s.hc8g>2o@ғ$Qi*9x<+3* _cToOcq~[Mόh4@=~q3ýnր5SZ8ja[+ەDGJ <ﯘY֣tsfwޢT%Sֺ_G*d4 ,UG:${=+xkMt '8`.f(.&5FK7}Eê0^[hp^FG8-lvRvUm/޻C6fw(8"ta5"-+yz`Qm ȻVM׿ "-~cG2n76UQ6۩x(9O4IKF79sB"ɉ;.!8Mr)K"v`K0ۂ{G+*}| r?;.c;dFO"|^b=d]lq@;=:&U hOz1{S#>6}U286Ƶ_楏:InU^ cUm:Іmٱхd0pI;,_vʃ֗&\4=5y!\75Tf"¡[]SXx Υ-).$Eo$qϦ5)?9vYkB"}zS^0ŭ XL. >wk'S^o6˝c /Rβ3k?Gx5@ :#qBsuߝ6tS(AC[DH nD`*FvPVEk߀mbLJnY^4нVynN\6z::T/ڝs@=qQL&4>.A _:J8wA If.nPMꖜe,'vMIw70p/zu嶔R2Pg?m;]m^3wl2CXŎ⾥8Zplf׀68>Ց9=t+YqT`8 Db]vM%W -[}E!&9pnm8_/j vft#[\ٚ'X72\=V(0j,ixYZ]AR-J `?4j%dv|d^?}w b>g5m>̲ ;k;Kie=0RMHdC; Dy3M0:x* ]b"P#_6VN)Qx~ C3CвK4cEXrMx$\;~)Bc|tl}m1&%[݉$ZYR~5z\֠$ko}pVɂ"/ ۮc|f&wބd|?! @{09է&HzT]U?}Lv^њ Kuu=}~.cf4]KFZ}3dSjs->q6n'2uި a£em}?3$>”ߝh =4 y1{xW6`Л7XPX|%='{{=QeCmY3dݰUB5pJ3!o\tmúHK_'~ cFل7Ⱥ3fzF9R;w"6[+k ?d"Bʡ:X~yoĜF"۫ (˚u@VZ޽/}WЕ~AkǀfC0 Xt5$mVP+ 䙋֜T%@-]6baeKnй9' 0R3?EĩY"x7}g/٦ b]A}H?ʟ)m@"z _1ӯ?zb HV!+ |1l`Z} *1U@ۿʸ Rl{`]E5;)0Tl[jcX[FYcSTin.)FVA (+/gdKuӈk9T¥UXXʗw >"}^aH:F1ajI4>N\ FL`8f D>ֱO#HCl*m7I7@SͲ77z02j o#*u7פc<8}u$~;(?pq(v#{1_g `V ,Hg]P#nT; C% ej}{bhϰ^"t?6 9t<ӲGa!55o??tqgʰR;<p)2p}5;}$Vn*Gާw#|,0>SDGg^$RZ:>? ¡ PBWly{76/kn㥐u:c"תA#x$"pfn~ LȡA"%9@h]zG&ZJ[Za\cCCܾ'w}o,k\e }ij4ZޡZ\D>׻'+xi*ˊѿ*Mgx6H9l$ "m6 <'3kɜY<8;bϼm%0.6PW"MǁG*m}Nƈ௠V7?urCgu"ZνSle9w,`v?-e6uهFEyogN?~R/J7>HNlo"o V X. y3[ dW#~j9$@X^q+;9$دV,Ρ8{}(E h+!o<>"m^mX-WR:xόK%{RHR-ERI%"KVD"ڔ"P(J }{50s~_3sKX]mqZMs,@4tdfeoz,^u 8'O^s岊Z.>:[B"/`";p.Xq=Ph `tnTIrr7/3H%z*Jx:-B x{l^{p0y}|0+)Z 次l=f.TDN>Sٖ grI}.lM$ e;>QTn2|~$9E;@lޯ%'~ ygUUow\jOkƄEkzp_H~0euq-wt#hV%mz%wϘ5 %)|NF峋WkF @#Bї睽) zZvԉ sxA8~HvWH-[)_tnUx vfYN9=>Ozњ@9#I-mwvFO=a{[vBwgS F`Ҋ%JՁI>f/!<]U"R3VZ %[mHIxsYsLj|*eG\lwϙ=&FRw͛( 5S.ϯxUtMsM[eN /I+vz7ǯg3ajɎjq&lםw8+\/3δ@s3?S#UQiݲHr1RT*4Jʫ V#ٶ[%jk,vjM`oh 2wZQzOwݗ}DФ|SϊDѸG;*a8r5‰E^miq|xh;;508 O{Ch`]3Z[Mb$w\}8>C#e݃ϯ[@ffpHD4LAa%p"٭v%b{i!cYI˩*ml+fzS_S05pJD벎f_n#ATϺ mwB^ۈ ;?xѥ[=2Kep7>,w%? ĖkTZ;'wkJH~WvXF[||~7mz{=[eN~J$8Szp77Qrͷ]m<18 ׹kK>u^}y9,}{]E܁x%i]|f`Zs/:?J_jPc-@%J+yMa_AJ/«k{rp](KzֶN woQJ;7EY@ܮHG4`vi {yzEAM!(oG#Sj^o—>F ]9qS0ڵ #Jg엾B/GꞤHp?y(yCeY0௸:%W*[s3}TmNMX I["ų4$NPbN\̰Bք9ˆ A~CƤA:`FVSIMe ?c&L-h_}0ȹ x{kr%9ONB;0kˁfwhћ\xw>Lж&[R~dw{EIՃ=KGBA)MrH/ݨ" .A^;6Zrlk=;8&wCkPN/U+L}9M.#<[pwjo{XRe_WO*ͣA,Lmxf$K0e#6~ : 7 jl/j6-?= Rl9/<{ Ϯt C͑@$kr\5Ӌk/#:*Svzߒl4QRbk%Xx{n`>8 ۻ#PR k{iprCVRUZs%ޜڽ8g& -CRgE-$9}Ҳ_Q^EK_5{tg QbǶA~kEg&WfilaM;o^ʷu+xjqs䁕ioq"?>@y %7g=D-UQ eƃB]RM@h~ ".uC&֡ H{YcTԴfJ`-~^JCgf,ۄR% yˣ#j=JD΢_avx Uﺷ۟}5K:/5s]=TĶ?o}{{G/Put AZY`zl* kΤ6C궞!pwT)\X v7OrQQ!ɦll:`a!r{s p-o{:#f[0̔qB՚5q+ĚW&^V]ؠv6}C-(q(srCyr㗑R,NܗI(K\C?)AJ+^ԭ8Vձ(a5BnԲZ#m$&]hF_[^˶֟VncYkq\zmK+yL0UE؟I D^O?%lW򜤿[F3;5ۤƀ^r)c==vH,ZuԼʞS' vedFyԠJIy(Qh0''pYy?v=48#I{-,:Y!??f0PyK~<0M}fKވ:c:(o_Zs`qT=>*VYg:祜͗o(]:? 1sNDrF(`~9g]!grq (/Eؼ͓B}P]Jr028Ўm W')H򸷨^pcKC>{Suʵ7VwxHwGl S(`_ԼSR ,`7^ܯ͈ܯgo[SPi%U6-\g!/oL]jTNsfͅ)s;J\$jڪb굠U-W*DZ_!ӫ8ٕyB + }iZHr;&Vo~vعu?b]{nMi?b~Gp1UKX݁g^g*R~JhLpQs;{]ײo^~J]3/ Kf͟3)5ɃP@tx*3i۩KǬq`BE}]$O̿i}yy,5LQU eO&:4PBuŴ03'hR+ςRt`n5 FU[qC|~ SF1C@d\~Nc$`T=#yKQ=m_Hq/^t O-V(`/o雵R~pT1b{ xO6&;n$V1>?_WϏnfע3f7Lq˵5V<s3{t? xLjl ~݃I ;"+z(K̹KD5X-V0A#1U!Yǫ8~>LԦBPQq_}謗3hۖ"}խ:_?Pip0nTQ&xw%- |W5c" (9yu]'iO=ͤ7&-#̐*iBRܷq㜏@i1u Ƴ+ $@gCRtRK gyoITRͪ9@|89^Ϛ?>2fF럒t *+$x_{|վ rKYKГ?ϯ73%Idy$Gig۱t= dƑ@BU_|ҳ>(gxko9jVw}`6VM,#>\ݖ_1nwQ<s}P}(č73۱^G/fTL΁0,*4޹H*Lݹry9mWsCZ,hO!)VGxC!/C3Qb]yľ46ڍ9^ʩ@asғa&FS? o+Qz<1m']-A2{֋66%(dSxJIhE+_ߑRqQ/*| iwt+n_6Хe)3WoӐ9'(W(1'B[G$cYK~d0r/ZYx†Dju}Ay)XZcSSۢwHqtvWFY(]U9wgPU~d] OWH8%#`':pob L؝~6k}(Qȋ+Fϳ.ĪE=hC??Pn?((S| %|,%?R;k+p!Y VU+$%rW4w}yOz"4Wi#:_!,ڌP ֠R'I@k.UN%顛C -~HI(p;Ni6v,uY=unTWk]ox/wmS>P=%|, -^:E,8 Bb$EG2'b5;y]rgyv;uw Vs{,ǿv|FQ00E>0L;{0a]i=k6k,m74?8ާK.D2'B|\I\AT>YX+!URljx7Pކ %2ܰ$,8-|Mb Qo`*Lf׵QV?W>κ) |M# 9%)8ϝe!"ew.PN R;;Uβ^5[|(PZŸICJAxa LXR+'+%g ޗq=}!܍Rnm2ޭSvH鱿 UۃhfT_?6GAkm0?pq*W E T`%؈lQnƯIY#=R'E(1u~!09~;\y0&el-KN&p OAh%`uMt X+3e .=O|}/0w{n_D郞v~|[ J89jܑxA+luj> a;҇ꩉ@a0QVJ*FxI߿N$l:`3]X;- Iil!֒P=E`1:r Y7̽:N]s->kWy`6#;/OQr6O/Y!A X5klt;5Ok^7O] >uGnR#wQiH91m y%l^uvޭU+Q%D6IkGJU7|i?;dwہ狤QPujH0~yٹN u##Hې-֌vHR*? ĦFqIu߶RU<QR4 %trxM;>7W]?6TMyK)NhF{4)u~1*o y o$UPs\$]hRJ 9pO(\F%UiO݆@PX-e?/YY(>tP*{ >w.AIGӅD-uWXQfG@8׾z|Rw3p[ ,t(C6TY{qDiN~E*zgrN8uNQ!Nki2pL,} =uSw Z?<ۻ<@!rtr|Uݼ}ѽ&oOpbs_V-f{JGJj3C,b]&ir} /gm$r|Q$-?-PbvհB~q/Aބ"}Mm49{v7DrMWsg!jD9ap.KGdLؚfQLLz ,CGF,h;vD1CckW;_;RV&AL]z_& |M"7X>Wck&Х շPԷ .oFN9Q.jSъ_"j+O8яݪ8-v]H4#Q`ɫDMh&aKF-evo `W}+0/@yZXSe^n&MPꠁjϵP-G#Q]E.涾BWa=c:T|M ^.@rPtQe:Гi]'{s͡|sd5WIhKpG3ǀ;6 =`&|Nj͝'> .ʀڗ|uª'2V YnlQ7Uum GʾE5 :C$Wqmjϑr˽` B A>q!AHvU'$u-F B[atE]F(JL>Vខƨ[+Q>Fn =3E1۵tN*,Mt }KOIt.FL?Rv{END>_1oɜ`_qq>'}n'<S LNjwuƯ`1/+hH~aJfTafS(X3XC';4H}~0OS5j? \B2+DM^AgP?7 55na}Pٲg\TH4Y?jnNp$ݓ.J7f$^Lg-@?ւ3ܴG;9$0])K<52 ӯu]ZOF7'FV9`*Ο怤y=?gE]֞dݔxec %NfAz .>^*DiMmP#2wV9UVcǕ!(yrk[r !}Oaijӈ~ WZ !ɛuU1wbdA SྗSlJGR7%tQK>W#|p[Igm|8o7X1v->\ZS_ NjӪy'qW&8ǣ D{XI]H:Yi9[D 2+w Iw,qCEIG~Cˌ`5hσ8bX۶3WPiǀs?\ )::gj.;ږ{Arp_52 K}K59, e;\o 0؍]@N|1jm;)sEwfI2J3O SerU o|tS> ;TLh"U$[|$eQz Ӌ8vy%Tyhs1R% #m.L|w)V3L~ 3mwwef$q5 AhdxF RSn~ CPqfΉjrin|Ix}_yFp~'3c =to'k =ޚFIHuiBҾC~YVHi-u _ G${;IdhR;e:N:'12=omŎs;-p&j]_ks 1,+ (މ)@]K#pC@U {@aMdwzPκ. JA:&0Z&=l)cu?gjKb?|=@K&EQ[tF9uk(E@^[Q$UJH؈ga8G+;+Ȱb;g7kǁg9Vf! =$J^z_ n4 ۠{W6O>w7+*G.N rŽe*$N9M_z)J8_Rl嘫?x)=OSOλ/#R;bcq׵m(3:_^dA [PwuH6^6sKE;ž" D?fͅϫ)k]d7&x&8jڪ'2`B{w׬`T9*YD~iI!'Z|!}nu* I_fq/0>&V>FN~LCr+,n斵p̹‡9vV5sIl\ŁXBT]oe 7?Z3m5Z[Od&=1V́z*pu9l *R=R^sﻝBfތঊ\z=sg7/GJڽY)g@"MɗQsQܽcRJ_W~G%Hv^w=5=@oyN'R~,pRԬͯ@x*?.DM oU".)Hiɪ޴?>;t&8&shSa_hݯ@fp`(׺jhW҇\ɏ+Lvq{$[: TW9 r ".R(qޓO}hi206]$-/rNreuYnK_6^}E}Q5ǖi+P\[j<'0nƟծCmnAA߾W,QU爟3Q 8C ثBjYvK,描{~ |U]۞t{~٣np;N[>}eǝ 8^Iy(y绊/F Zʣd_M?)530=JrOA[$HmZzrx#>R}m0w?lUul~7`5)7Ҏ:žPTr*RT#HY'{21= Ȳ{U}pހoр@O<|8J∈cX C#=_l{g z;>J-H+?0~ܕɾ|"-C~ҭXdX92vCJ =ly 6y}%HAmmqU;w.F0ɣYϱNoumz$3\|sg]Zh Cw\j-K(tLI_ϺxU!e@Y3X*a^^UWQ4OsBE{W`nE)vɅ`ӳkncq҃ 0L^p3-|D>_؎d1tʑ, ߲sۙqBAL}[ %]F=!0,C<ˢYT NWf9ӡi+.8 R+|b\1rv Ji. m:;9rmF><#0ºjH9s~}-y)#vz;'`Y-1 A(ʓ 9"t $GJ2"Ԭdy`ֳ[`w=ѷ7O(%d}HCg6 u%xV5u 0hɯ*[gY$5 J3v,;yHR;A Z?ߵ]غ_"`' E!daa~n ֆW1bG?9*n^ߍ@}?CZ sB&|B'3>0o~0udpInt O\:]=ݖPy_*=~o (!Iޯ_qpܣo(̛^MӍKp-:zê@$$۝AWIw%%Ka״ہ{ٳu6=k|)JRPC5<6kvu$ .^U/ۏ޼P Y(pU Kƿ9,E M'|O)R>< L%wbLG\97RfkKFjS]Y.Lu{QEkK$=Ө;ċTyI]F5UAlfOk8uW .f]1肄 fve V%Hڥ, LiDŽJY:ʾv?Hf Fׇw׮CEpY78VɅ*(}},&ٕ;2Aw%J^oFiL1WV+"R+@r[Ώ XGr.Ia;#mؗwoǬD^%$ Xi1v3 ~tN y?) l_i VM}v J(-=UlKۢS"%|vuQ!J)qfO2GO.gVmIElHf.N ya_Ö z. ;3bR.LLɘ w?1q@71Fc&`SR^ՅTy[={_Uު3F-O`hA512K9@3PnFJ* ٔl7t9%o^Ajb'~lCjP~:I,N5)q:M.Qy (6*x B!R> ܘapg"CYE<+۹#y7Gng~ɬ~ی23>.pGUsA+y)v4AhLB$dgGDy*s9A0GF]2UQe}<2 a@xRc_kYc`M,^k=}\l[G B#i0#xsb|dHz-/Pcw+JR 6Gt`xLQCG-QurZ hMzkݯ e vk@FVו9r~94m`lѬUU,];@K10!bFNX$0_l6GّÇNYVYi)f.֝׬&A-K6(ry͒&&kJ7<젆!H˩L: =QGfxlnbw%V\CjI Sk' YcG-pv^)$6>w? K~?[M,0%O3axT C.:E`>ُ@5{(]oG%-[3߬})fXsjg}/Fb꟤b4zL˳Dj뼝3V˞9V{X-Wu {/s 0 Xvw\e?7#^ԩbUar܆|{IeKf; :̿ȚzX{T8F0S5],Ws0A0y60Lq7e[bXÝ߭i^~׭D0{}Ȗ#Ss?+7e{'I!nfˡsM:ln}ƾXn`pL;k;d; MCh7+f7xV>mzv/R{I! [='P\72=eX(ؖeXiybbT;#׮xj53e~Kf7Ƌw[WԊeAL͚(}{PYb]HOu^LDHDibx@C31޺6~b(Q#]=_za-{֎ DŽaYle&bgc!K+DIOOsߋG(qb o%[Yx8mښ3dETqIj SeU.ZqD[T*"JTE7o 6ډnVa 1F_s8"7in_%4IYE1R>ZD+_H$tNP*D58М!Z!)d&OC61sET4 +DKsu;ȿ{^]i@"IվofnQ'E[7RmVWћ!|"{{RجwAMi$/*8אt-{_Nn2U!`iK?V@jGI}LVjΔ^$,R;uJ=Wu ֟K'&L.UU̯+xJ%ۨz>$5\`iGױ^qQz_nO0~Vێ 2W6 _zׅs%f)}OX}U1sx{z&TJFc;{5P<+3aVko:S sHz^zy{|,C{*1GHТ u:a|Eu_u^$cZ$= -?9%%x1om(g+?AS$c-ƙf^C~F2qQ^XίC!?6yMvKIqR9h'$?vAb_Q&L F̘ L靚Byz+ 8\V"m :'=F%b'MW|-wBKCM٠xki\BfLEzKZ -Yqr&,`E]frOHDFØÙqRN>TzZZ13ޜUN0FW$.am#E bS`N cuc"C00WBRPnv6Tj?_j$:sِn=od0lUm8Cw@٦Y"bXMV2cZ ׋Wset-L.^}SP6a7.(yv AL񉕩$&p;M\ v)aU;qНj̪: L˜@[,:߇?"1s);N#mOuYO (%Mt$eNDFZ$5t\vݾ [nz|mץ|}:O49j¿>=To){?=%MwDtu#G>:Kח=dmCV&mR vzܼG]5.?J$ytfQ,Rcjb0yOT-NJBѺ֪Ә|dV}<Ч66Qs;ķa?,_";}to%qADZ 3?3"8bç6Ql}O[?XL;gQpٗ Y#ݏh[ gM]'>e{^8ꏑ^ea_<@Bf}%Kn}L$n ] 7Qed`^|M0H%آxI0\W"ss"6'?.DNǽ RҼW`Ys¿ds&7.LV3PRNR<'Uo|Y,P3=z0fp?k>^7/m܈ MYbךiAM1ŰiDRGʯG^XOߵvtO͵fϟ;yq}~jcئ?B'sĚeucxbwb7Mϫ. ~',cYڨ8w^o O8gAwl9%s /.:KCW!|zMf;s}?L&?a7+[mGϽM үTMc2g"N*wĹ<1=.NmBrch=ԑu{`.y-f{B-ȞH ͆qqQnX5we)Ԡ$ywb9 V4Z,&c,|}=}H#cx0XʺW9l|^9їz@0_"vlھNkj7yYΠ:d[C |";ˌŜ9"th3܈-"F?GNCr>*;oIlȺ/~|48:PNGRn3K]?8"D60$*0ԂlI6]ґ޸ȣQr}h>NHQWnZ=}Ǥ#Ȱؙ߷!Ѻ"XC%IBoWi$1; >&8FD~u') E̔ww%x0qT9&[.6Ѓ~˟:su 9cLbL͘苇I&['\ %4CV0J\FtB`-zdaas:I=]؜LvLiJY^nS*"˭1O4u`NSi]A_וK{MƘלomb~[g%Z~VCtAբ+bhS]jZpn&NBwT燹L+ ߔRI0v_;4|M0ګԇBA)[]mAҹ |?i:x4Ww|߬3WQ,h&$!;`_$>F#d̫;񣥘 -_Cyj I\}4o>h}!#H~ո^ wS:iQӽ׫UD|as7Ȱ$ъ>}63A 6%mZ t(5a`mx.Z-.$ew2NȕȘق֩L[ڍ[f=u>JXƷF7.x3Bsԓ.SK]ydMF3X8l{‰Qr@ojmKKLulJJ ]܂.Z<p.ŐX.5Mt]f!ks##ݾxm84祔$ ) /HMhn2۫o ,g -yuLuXbxO7\A |diEdC&"ēV^rsȨc/4DV^+&fՠ۲t;.-|dc[1oMUdd,WkW5dH27nչ?Y ϳ%o@3;@?w+\uo#tf|8*P3NͽܣH$K5iSE_g(K;}6>kQxc[MmDߚw&rVE LqV„[E;~9dOS[-cuh-M]?O ãC jMxsz"/Z8cBLhNVv.W|-vxXӉCJm/_#s[58dʔfGBeU8:oxߢ߹Cݎߑ4^w !pjmRnY&LGNXѿ&9wo0zWu%3Sʱ'XݩTa}%0St_YOT \v˘nϒQ_GIx'>Ȱ?JĔO7͋eά5ﳳN;HO2kdl_o:W̙m_%yAOnwa~~jC=PTwpB-_:s>qy.R`TZ0yvRhS~łRjίôhQ{D 4 ޾ ]8'L0i yFlS6B h4GZo#4v g.}{ ąfД  EFmA_~#^-jPwC7ESicRNy_FaຫPxy%Ў 7Eok<崪5Sa1IGD͠kK.yx#g^Z+Q70nߋ]vsSƐsS OuW>Azڄrǟ(o莯7d,ӏ˃ɚDSJR09^8(1hfApP,Yq$bIڶdq.y{{F#Kp$fK,tU*̚;qS^|hw̝;(Uem0)uF.U)AkкswUO=ST-L2RhV{=a|tJX9#F~_?V[usr,=5GWsL׸:FkA!+K/+脬@ :X0a}i-_KYYagK{l) b[gQ3BPAdF2}6R6J8n:5=uS}.ǹ}(8>u~t okF ZO蛰71W`eC={i*9G4=pLȭdLh)b+,k(s͠}wwFy=bcӋ'Ѻz/)d2wzmu_\x :wٴ9*]bC7%ӰRunc]}j{p,Enqҿ9~)TۑdK~ib屫3M *{{̻ my6V )"5<Jo.)=A.swߏ¸;VP]I]4[ؽ;g;#qe.|cM2/}ULwE#C0 -9Xq52Eɚ:Y <:z _>mz./g( ^ |b7K>p ;z%P͏ +*}]\sُb4(NpߥYio[f4*hu2/__.e%"17o\fgmkH '1S/rI5[~6Qa4}6sb+\Fg^Ŵ4sЀ̳GbYS'+%йʐpG=)Ct /4 IdMNUпGJ{7"gYIf(a  4ˉ=qyk6Yj"S8 Fݾz[2%3 )Y;`{}G +WAl^oL4m6"87|y2{n7#^1`u~A?FOH΃[3gu~Fs}M,*P͡bMAot;DUףw| BW#|gf 0hUhjHVm, 4R^AԽ>ڧx1\L~ZsV=Kvxgy!szac07(f~IdҮ!f*AlԩS~ZPw"J_ܑAIfN$7{ x> qџZ'-Q w#bPdÉ}X8]2J6tY]%3F/(?F#_u4L:b'.Pěedߢ8q<9c]wb}BwhՂ)#O|#`W{/PNzbJ}0juG '߾ hctb^ӅO򳙚@ee #_/k*jj3Q%nX2%&sSВ&w17zĠzd:C %V7j0ycm'0Ropuel; ~4P%%c鹿SX2`hw~nԉҾ}AҿK+a 1$YeL^}fg6z)\BgI^OyڠBRv+0jɛMŖzڥÂUuy6{q3]uhx׺!:ZeX;I3JЕhd0ζU;2XB0|G7}rƒ ٱ_!ZudgmQ o;8t b~t[5MϯG1'3%W<&ח+ U;6]}&޹oʍci|o׌RPA+tO/4oKlt5zĪx0̜tɡMp-ԦU"hHg֝G^‚d+M=>>J][M mn(akk9?¸꾐џY xp?ȱU>-WV0ހ*mfcht{],씸3{W^ua_)N}OȒ:&B * C$GLM'(ԓyOڣiW7FԪ2wmDJ^&L2'Mm9:~ɧVvgzjtZꇹ>>?E&}3hjVM&1`اQ׉%|ٻ;mH- G>󘣮Ջt忼KJ0SBfw:ZJZZ=1Q[2;SM߱Jk~!7dHew%vm˯#m&'QW*ֳoH b}15zf]/07N\q'i$.k6A"c8a`\U+aѫ} ki`[sgd 1a2i愩LJ`PL٪i1 JEY#E[%IU-Ϲ]ԉCSCw  Y {&%v+hR): *z'7]XDv#d&$Z2.M!\2U*btJiKF"}Xu< &Sd?sr[;LGMe ҉db ~ͽ5`? 8R_W׎Q"sd:!FÇ2D$HͶZBe`e9jƚ.%,\>h ~)?^ߣIaTo-v0gmjm}ōU>O>o$N +llUCYX{g_1nKCF'$)mQszpR̖8sրfxE*1M3wLs2Ɠ|C(>c9mS>pVC F[6,Gl$Yc~Svf d1_U(,{1n|qi!ZFdoC2Ϻ8 {29e)ji*2,BL[kEO&ϴ|tG.O]4O8 KsϽ- ff6 &T v'u$YvpYa=c.~-/]azNJf9zbCwԊhP:.X](29()#ɲ Fxf} 1;uJ%/mb:]&*j?rykKò0buc8Z߬Gc<YN1֚岘u.Drj#%9 R:)c߲{nsZ+'y4IʒyzqQx Z⧎vCFM6VBEh_dz{t%!}R/ 4`Ŕ_TEs ^P$J@0=py7 ͉K# 6>c/¯Q-,r`־~2}#~BRWl?ZWV+e sVMh_2>L_qk>2k-Cm3?1ƅo񯎪=@ȟ W1>' 0Q~6~`zCٽE:vuk)~1ʽxdy,7 R1pxq G[:dNG=3?o٣"]1]/5RWe_ /ʎGjnT jRo'KZO[-=ܻ:@$ ^?dx}~P.NE/NkCt.Su%gGr*Zl-XggvKgQV(xH'FG@"L1pf1!7tP˃G0R$mSK(o.#B v]E]`B[ zWٚ񹧷R|4gdɬR"q{*c15HL?/OS}!훣X eK&I/&8 :/ERkzUL3W#]:̊c919%{[5cJe;Iv#E?0RV/bK=OgX%6A: Gs] =*j^ ?;i_W@mʞ@u{ zԒ4Cou>ӫn]=I>tC^"x 9/!% ݙ'o(..LGiw{-ބA\zĥt6 A6Yn UNPtkP0=J:oYkoDW+jO~ֹ]'7ဲk_vbf/?x4.Ne˗L$Tn+^xJ͗Y %r$)"?T*wV|O2D&h2&\ Q E$73Zߘ֢PSԧ[Ӕ>K-GsO :dmP[LgGC|gк.uER>:aXe &z6pƼ]G2h̿)ǽ?{ly^ʊnah(~ B,QNb Dmg~^q,[nIJޘ0+vl/7.&;F} ?JkoL^syueޜ \BdQ`!CTv95%_;l=850W!ڿJ6{RnsEy=Iv7syFje*Ǫޓ$%77hv_l"EL+84 i_/MD+o۱Mk^JWHM(B<Гh u-{ޒ=NlZ;F6֖13aCˇW !߼jڨ\IOec]LI_ИU_w?"f>nAIѬfO,mueڹYkzLDI~dQ9W5lFé=ZC?y1n&%.FvN [=b7tAZӜ[n~ĹsA0}SjI+2x[t]SqFAZa~{sG0u,lzTxDjJPu!5>%R~Qئ #bx%!tO}Hl{7*TS&2˵F™uy0%<74(z9G|i |.iķ&aǽaejç3dvrZ ,%?y7 ZSݻF^4cT=refrRX`9 9d}/I0_[nRx=Im(mcmʌ6ONW zȖE5v>o b*'8nX7&;/ ѧkʵ[X8YEx!FFO~>Mpg\ViԽ O76lSẎjLP{g1}O$Kd) OZmɒ꣢P(YTDȖR"*dIRjJ5ɾmcfߟgss:s'RmhMg~ 7'.+Y<Q2uYg qUzxj%Ч H:5~ 8"Wع{iF0!54# k@^lPM %X${vتS?7T_ٰx$,.d׽;&!2Oa;aI[n`lC~ RĄŀV2ߝo?`y 0'~ 3N'$ב'[}}gݿ u]w| ^7[u1 ~v1s]G ~w }ALi OAm`)Ʊ[hX ]*BL T`BP[,MLЏjv}{e{_^A0H:zXF ،A[l k#s+>-0.wOZlo>r!c%Ƕrjƌ*L;.Md' 9zu7b~|l1ercaƨw,}q#g8܆TafZ0NG~ $Ae΢4K&Mצ'X 9ё²,۸GS1sa,wsKJbS@z9?pb|ftyßDw`lj=q{hFE~dEߩ 0R&m HY)7 :6 :E 9* mB~֐H VK)9 oWa8n,Q5Ь~T%rA;^~ϿcׁW~{ =o`l;s$,tO" w˳;/S'tրioce[af&V &wދىܹH_߱ T\pOy?Qx+\)bۧR狅vu1ftϛHw醰v>8kZ=纯&|noNB)[YAr Li>06m99y 9fw|I觝7}|d;LtulExd IG:ܹv*U|K/6j<-B47u3ٛO28fnU 6~嘭↏'5aAqfK*nq7^d]ǯ4bz`ncš|.\foV3 ޖvi+_zOM1XuJfNZ gXٍ18vnJvk^PYgr+hπfn"0JaI<-phek?/Kj+|5{zQĮvMj$0φN 00v|$0U 4Jρl7E U)SK8άTm~0,AAF:!i崦iXkX۸-Ln@_0aO`-nwtvղrRОWuXHg+گبo_ ϫu~0z-^cXFpq y@{>X{6oe*kuTҀ*)/ s࠴Uvls!^z^bA8̴Moh uiRo~`wPߧ%G\wd@YeR>櫱kϾߌ#ȪF0OL&^۔zr¼2[K 㫜au-Pb5 ͌8Ft_1%W-H>@\Z10gT.yIemP W,aJր5(WJK݃qbSSC,$?]c 2+Qm>+Iq-,7%XJKhG"PTL1B-uu3 )7jXiG`8Mj6|ZhmjeUC@*<{(e4'Fo% ܦ~N+#74C0U[06nW f)kAmfm4Sڸ^ ާ54 Rxbe`Ƹ@/{W2ybU]IY,r%y ! ˥77[@%u@kߒ6mLT-օ vngJbZ!1t {ʼ5`Ӝen04:;5p; HG+L>**8?t< G=O{<-}'^5 3={\ Ĝ_6D\݁k>r K ^˩ncݧv@qV:厰/G߀& ڻSq%V6~i4Ѝ8$a57_TVFgs z hnoYرh`u)?}F$9AO1K W|i_Q@4q|mao}`sc*vnMC6.#~.%>C?ꀼi\M̹r V<4`yYM`7kM׀o}/E uk {JN004e>"l#Mtc Dc%vTG|{Le+R9iɆ $kM=3rZ+@V_iPB<%G,q9PL~<NV `V&ߑy `)~_u耉ٚ_k0%?OLlv\ ¶Lf"OF{&t0aI*gƤ+czgT,⬺Ѣ-*sN"Ls8$:|`tݓ!.8=?{ =ꐞi-0{D~RK"aaeƷ;@7&cZ{4cρ+,ĥ{e6~YZGL{|.lU\dsTRi&c9uqRJX;OIۀA ,s$Y [c| S_ax.mYZ'u>X\֞B0],Z (v __㎂M]TR`+z0uٲ۷.W0Px"7A;*9Oh  }נ-q@1w=Nơx[ٺ;._[ =4cz`U䄩7,Y'y_3oH,)6y(zMH~3("5@+Oﱆs t:nM& Xm0 CCdb acS~{A"_ś1)m0G_RNf7v@v`(%yl;sO$S'#'+,Qփv#Z0^xNjRC,}ɇm`E=兗(.~jf(Sjߞo}sfIv_>n]ލ0IsNegHOq(,;ol|yz ,z3m+){+fĚ76u]1uNalךq~I}S$\vl 7@<-xy#a|*~qk؟DrW*e]DWxj:3Ru'l~uxp(LQ|nR'؁5#=@NMA`'07AږLn@rڙvPɼxs<2g[0 "J`)OϷЬU5xs&|Ȟs< ch>_;>#>+~Fx$ٱGΝk3dD.ZgZ2_ geŜe=-@?&4w(8r+$ ++AU$,{g03Rm#q=~Ч_ 'm3WqB00j^Zō~{R/A.QV%bPfm?I~~|] 7-s`m7_` t<"z,[>7: :nai v#QC:*h b)X'=[r+FKؑQ E|.r2Qh:]q0h QB«uPg1YF~r|+u. 2/S+r0n"zޭTKae~#0uz wiT.4jQ/1X 0 wqKro; SӦH2Y'G0sD["OnyPJx!pٜO@Q=zx{>f%]c{H ֬@2 _n [jnž7aEih-sqnEaAc|5,F/Ϸ[00wq{ 9!x1+-o@N!ttxG|Tad| 8 vc0jWFaTf9moG9u񥰔$U&Bv[;PL 9V~Cu?R3vUԮ_懰@1wIOv+/Ƿ,|Vy H JUQ-Mf=d CGҏr;psyǢ0I@֣V}We0GvuῙ.F3v ҙl!_Ò2fW򩩺}l1 N}@K=ɝ~VI݇'z?ӄ/㧀ڢ 3úO1@=T%Bwı{/;=F'ǁ29WE1 6k +`l/äאg V z`>3w/x]X/ҍq6W=Uxu»`vnZ+AplnioD24O{, oC>]f̙w镑`9{#oo,Z >qv_esm o|8˹p-+3N:}?XTʁHlW yH<`>%V{Vӿ?es\s(#mCRr})Yl:^M~Λ=?NêU*"j[Hr}=*Ss]9t,Sj;gܲ|QTc/j_ⰷ[)c+e!sr=ZuTqltmW ̌x WLaXxOz;L eX4t .rr OW CTKՐoF9?(d70a]Ch DPCn`:ll!b7a(+R}dtH ;ӑ/]B PKzr7ȏJH(ሄTy`!p3O}Xrʏ@>ً+0pp ׏ݬa'ޛm:{E|{` oq$ydc/;dRZ`qˋ[b@k:-KrBwꈿ ܦ2'҂vI >7W2"L-wcSԚ q&xA3T]j|Hɩ3"}^X!NXFʡ׭ؼT~"ۀ"W/ce;P3.#>bV#2&{ϒs=+E[g7oHu"!Dy{ƾ"ƟC +tl-\V!QeW6 |5u SdFT|Q;Fm adQOE$$-< DDt[&ĊN#L6pg+)0~WP.>ʮ눑[vY"ؠE-?z8klվɃ8b\ˆ쿺Ua?\(:gJ cv^`![;j-_ E|YGn/, 3Owl&{4 ɯNfM0u\1qĵ?2g7~1(Ea.]f.g eH>B_/^֝`'(0Pm"M;~-hy?ha~@viG[G 3MVX@Tc٭W =ZE_$9:b%">V#)@|  ͺN5!Nѯrx|R a@ td6:5+ǵrJ?cVk0ܳma$} *f>ؾ9L?iǀTIq)}<};ek]/B$'}sWX[q޴ RA&0jR2ؑR*e d焄H cg C#'_|lӟ%ٜxI+ &ʵk@^S|UGf!RjHX9Bihᅮv V);f"Ep'.9{$0Z a>6U'ݕWو]pdybJ@q4gX|EI{W'cf~ hkGTsyHL-Ng+71\"g?W3#-HL, __Y giA MBjfKȫפOܞŹ/(N%Rmg#)rlIs]CAR޲[:ƸRp)2tq8n+Q|𥆫Rw4]sR ]|0t*nS=10ޢS _j[GX*Qr,L>Cd_-nXպ6ב BX[/k꣰v" I9W )'9X76U^R_AU{b# Tk6E'@UXY߬2X/̼HdKľD!쌭DOZ`ֳ8]v#|@k-E)$MjarjftGήƙ"9 U Cɍσ`g K_ x),?f-Nҹ7;#٭"fN ŕ9ePxSR;Parĭsͮ#UyGhBCl^<{q*{w\E}Е8+PL90W;%_ac6Wy!?zG%LԞL ֖s 殼vcBV,tv=;)anN0< ^aF1Km;Lq1XxZD,`F E\U5+=`cz]XVPuz*_s3:!YFv{"ˬOQ&k s}\΋{/6uZ$@>}Q KWuMRd|ya.mCG@6WoE.A@uDȜɖq2frLsbNCQc*M~fmewB-_Y0;r<- +`= Yt v)[ 3Z/=LPQk ć`)_9PBvB}^&Uz N@ޥx+{|cl?X﫢:wK^`=a֔80NbB f6a? k-_B9VoaJ\bG⹱fX3.؛)%@hehG,X)b䧹o7J"s#c:-ap!Bso;L;':`oUZ_<*-Z;ǟ]gہ|/-kO⋳پt=qJih/|/υ#cj]П41VJUa&ByZm#xX]ϷUEha E/Gbx}))ۼ(C[4/icSkW>$V7"9 揷쓙O&G*fGzfw0aɝ4:d`c F'BOZ%~ZD5̃%_XT,rDsaAXW\JI7 vK<0\ȅ$P,PD"W_}f%Ұhl d3,'; }Ro~EbyP̈́{MxF<jrvHV)Qn0#`jglܾ*u?ө\0м v}8܈xysSP]cؼl*c3rhzӊ@~k8\[mXp9 <䝡qG^f:0}vm]-.z ;Y{#Qj˷Xd<>(~Z O0~;9]ue6:!| V͈2`A^yyrĵs05ug38cP4-2#/#c7(;׍?լA 6وa,G7^> Ya'!8tl Bے-8Z t 5DP^rHeor0~s[o60g=sy?ٯW~) NEz F<?N^ɳs6=_Fa,1ϗkG̯z!a:53evTT+h_lj::?xܨ9 ${?qO0{%ZmrC#nK /S UYDGF1)u`)~S֫ 5W\ ^#5<~B!T/C'5a=DM@" ִyZ.ݶ^) >$Nw=O{F"]LQ$Es;=M.^X43Zfap QN |',3nܿ"EoB_&UO=%%C8|]X׺0A+dVd@|263@O> *%⡋a.~w ,rq0Pr +Ko<+mmzJ"KAHP_\/+҉㻊acm5u`䩕mE؊O- VJt)տhHc_|Ո/zcN=rOsleT7{\1⚙:M% B*Ý{x2}a2QdV*@|i_tvBY44&bzK L҆4Z}zK L,ng 8s.k@9r }11@<.对Ws["`tUw1m+_+ HzԠ+ĕg b>C)sbo@_X V9 S&>6_a׉_@( >HFó]]P+Uѕ!@k~$р_#@M . 6^*0}BO9K:{҃0E7ǀPpptW2[A³O80vdB f*']>}fwlI{`n{D؇>Nˮ-.Q?>vNk4+`6 :\[Nc1VVA]ِHO 4?e.)JaH9e6eM~@WиEd٪_3PmK6,LmZqym9% ^ʨqcvnz7 Qfp*,n*]|N-z|Ċ&xŸSy HCgϸzuVH xj0^}mQĵ~z0m+{BόXm9CXH -5EժSQz)'[z>SW놵B5{gߺ+7]?p0+<}9?MޯhcoٰqXn6+yi,h |jy,o坰th1nq('e!~s9lj64ߒmUBȎ@ q_[EJbшc;[^J?8sF&*Ua*jPub)px#_e`{S}?_]q#˽糤&mwV=|#կS#ETNX3>?+[HuӺ"gwz뀒~ |8tT:oU !눻bA5 -݈;vS#gD  ZJSO\٭g.AxIhWlOYƛ^)[yZ$Soӂ8}R9,/V1\ѧQ >ÂMgEHR ~e'FbYҕk"^{E q}ol_|xWV\OـV=#ߗkrޠ daX4O=ޮ/uK!#H u—yW1{aB = KFB[!!HK; 5c52Ϫ.Ҿ0w |/QI.^=d-Zn-x"r7dL|ܪC }e+6O`eg h?v PFl+ 짻@/%bwh#7%'Ǒ2&X遂"ؚ-] 06k`MmzLEp]OYiQ@Jq;=B܍>=naf/L´)6oFx3 VԊ249ckPLF ̉N]SYf5ct.v[Td\;> sH6TLC`4č]>dD=E_-uv0qywg9#Qx 7z : i[r׭kҦԍ0ﱾse :59}-oTa_.f3W8dkV-wjl . \5MXnz²r% Y!i\dlW޹#vbFy0} - ǼT |ǔ+UeV7A:9% 8@9dgҊݾm<r,2UϞШ쿿9GGRvb"~6Nz߱zo<L*UgH;- .Qf)W^敎tfP)Gﶙ;'5 I5b(倨>W>l z? \:,\P=[%Cӆ {pZMU!ٝУ5P4Rl5Qح"9u'556?=w;c.ҕF4ꬸyJ f}nj ӨIS\hcz``D# ro⦅Nl{I_&CE6*G'_NE}?eKa ώN{ be׭'۰x;/}t}!Iti0 S %CQk1r3O̯Dyqh?9ެ1L4϶kga)bLO[7W(R]40dJ;ڹw|5 HHqf"j_=vA%ҿ|uEˊ hDZEkJ |xQF.q3"1f4nQ{c^_eҍAxu?u#0z}'pkX>—?b\%땓Xεl7Fl{%h[V|%1| w)ފQ44:N]P\}O1Kw\n-tԱk7:FS(ؠWi$2x"+1.))kN؅Jxڭ=h2Zkk% فzF~a0чhw8b7{,zz{>+LA9*g_2{#12jv B u+tݳ C_Gcet}$ԏ>xg[%E⪒l(9ϚI3f oy+pպMK%rG!)ݒ#Һ;wblָ:QB25uJ[rHMʤ3}0y&3'snA֙ig2Uad%Ϻ]7rr~&@ ( tUAӠȘ FdK-;/G*׊i;FS;E(u^@O|)z<84Xޘ|_6QQa`Vz;n?kʯZnQ0E94Ф(״4!6(w"QwVI=9U Ş_؆R4C},޳>sm'r-Ѿa vҗ'랆:#W0n)Szd{b^1G^9y c& ̂i9FeuX# /R1=ZċH+Lt>VcJPTXq I$*<,"sۿ@Z ƵGbÝ"hRfE۽Q9Q6{Mi t. n)lAw]11L&ܫ)B\[1aYcO3?bDcr@NɜL9ʓw -uˣ }&e2z<("g~O8b+QsڬS-JѫbYI+|;i'mg0(Qp Tc{@]S-Bҋ0d|h$1x<73,Pmd* ^{c.&>l'gu;@d#B76"yjy)RS/MmǠmM1$5ur ,+\ #t|a{aҜEJ._"Z7̐I)e/CJvj؆]gm-Atܼ4ީ)xX~s($;܆͠l銵V`h=)Ç7QLcDjt1ƲDV:iah|1Դɹ2qnd]Ux2ex*Ssqvڄ. <,mCpE' D[Uwd|(p-E̿mAS䐪w]mUیr-wUH ΣSt;[?ZGHhcĢ;p3&z=oNx[Fs-`-LO>.H!xw/\|%T?#^`  tDfj1>'f.l=esߊ͋mɮhв ]| 1jR+YLO*κ\wEny]Ce8Ȯ`4xrXy1ŷMTGuNv8"ՎJwhg'wj ]尢nj>dq-߬f#v/mx60+F7tV}En,sC`}ti(E߄oB~?5%פf"`X]'4o .Q;)?8}.cWsl]So}!;'+ؕ`cFfzb<A-|ϨHhojWT[ Isqܸk F|^k>GahR8pz֋I7,zDjM0yj>a~[a04מ#+k~˻NEٿiк6R;;!} SygͲu7:[Ci% '@ia &8Jv8ׄ n!16SX<c 0PU KԼq=P.^B&6leUR#C?KHB_;5hcEJ% 3uTAֵiL)F?LHujNz/VЉKUyO.$W~|=ÓAEn뾂.襺4h߫tO*W {P]WH5wR>baJeV>*gY.Y 1%E5*LwX !ֿ$+N?@~gx8nq\;܌#+ U'2FhF4>X颼փ3,PHz~^矒jK粹Dqs~qm/zVDɣfJZB_^n<:>PؘAx"<3<0 Mr%;W>N:o?{EaLy:ޘx#X[wu7!%:igi+$0,]1aR<>{dSō)Q跖3'W^Pg-I  tGrk0A 7 DI:=c¹tG$ 4~A^i$~=QvM3yq܄C.gul2GkI;P5ޜstyQF1t=[vy-)w͑ =V$= }[/4ћ?i47C;9pc(ɋh)1kOWYvsu/)vOPP,r`a0.:gMYQOso><F֣GWĻv7]qo^NFk:ӢB{b_79~S]Tƒc+~Iɦ3\s:21ZG\%Eխ8`{Ny. cpOmf)ϣu8ţ =/|yWX>6R[AJUAX[.Vn4  }Zɢw;M?"Z|1$}{=MVc͖#h{~g`~NԶ?m;8!P(%i6o حwG pͺk:&YKa@4?SEAOw.2Η+PʘEHtOt:z^ȑmUrѫ@JhmY|W9d\X¬G' Wwsv Ug0[_T69F9 ud$љXp|Cp=*7Mu3-lKEY0#tJʶ}tҔGvÓ$|B@LC4#UOg`4=iPһJ<[ay&k-j~ꡋ 5f9:]z*3k 7o7!f+Nv}1+f*?%bV/#=ҿc,_DOܖ*@+]0l@Kkꨮ JiR+*<~8䂎@<KϕjrMP6 F`O/sCOQp=lb9& nZs;sq& Wo9 u[vhfƤHr]-Q,g_F\>N @9h|I̐S? @{7 YYVBnr ܦ9/CjlքTK5t(%$ϷUav RŏذwsJ)k*P5_磹Y9M8x~ b'QG|yVgo+dNh(yKr1Xg:x6hLy3mhmh~G/6'[{x,c$3l_Z"[UvKnȲLӆTm12}р[1^6o ?kDbEK7.,@v`;'&;:fة!jPY?Mל/g.+'>br0 _wf70C ߾'[# oDimse$J3y $.%M56Vsƣtn 9=i1/-9$RZB3QW'X;b|CGgJL-u}w|vﶢn&T5N0Z&iqy0>nTڋw<~AiUBPt;wD36(O:B's9 aL~Z߷rNEe1T7׎ nP:fn־H`Cg^/pI4څ-|QXOŻ6&iuzݫu_wn{ ?ZcHŸ$ <߆PP@C,zKӣ\Z|љR.1;רj?ujB7`$#b<}2ԾG{'-m9t9Mh^pԯ25":G+l?]̏[.Ɣy z1ia'cBY\D|4LiW d``pP=yH#1uQ}NLߤK櫳BUh;`DED_ H=w %ĤO\3 UyZ uoa0TAeD:VfzQ=? Op~ۤL'#鬓8JH}3lvğmG_1M59\y~Th^|]/U/e/g/k t0{/Xt )r*<<@K+ÎoQ{;ܶdLz(BŰD[Uv2eVoGM{еW>xW6.F]lEG-ጋn> ilqFJ:+I^Wqk06|$$KU0yA0(?Oڶ,O46VA+߸ov, '=~C8a73Q%zqzˑwA#gVl(IxE}{ү,"ڌ/\\QyD'%߸jwj4z6 cPdkH:L?і $a_^* |VF?:RP>;d_V.ds]cQZ2 gh|؉/tR4<RգDY'2|:+`~?cs lY; tw?7Ƃ?ɷ7нe$4hJXuJY%wuNj0j܍Wnu Zz(3C WcOeI.J/~ Ϡ ;XX'αrϟ`,#c" ٻ&סuSC[E>X}MJ._?bj,ȭ`k ! ł 4o_1iȞ:T[< nk nӑ1pgip_o.ՔYl|hͲiuo#1dͲ,ѶBU邴6>"N&#ڢ^//`*FY;(K^_Z Ԙl+b1~uUGB l3ߩ)0sP,97Q-J0Cne8v;jx{W7l |nx\ZDoQ؏3WQwqF.9\/2uEk3&_(*'6m1tD!_=%B`F\VXIc?$]n`- ~9ƻs,-$9jm!ܐ˶SŠ,ˆڭW_j@y`*Ҷ wMM@ k\>U$t@olTpt۞s/@=L>}cY]0#2&f2L4՘%K&SVGWtLL;pLX U:t뱪`,=gOZΚeBx9>jDǽ#X>=ņen; &)GSGYp6}Bd^~ 49vbG<%gt?YP*ii{ :PE@YqvS@>ԣ㞢9eTybPd]V(r/-HU5aN7 J`B_u.ѿsAWWv3]/w0v&*,c% [esNL\{<(%G|X=(tmz;P~~ 5P{~),`3r~y1u0l;:-mZaZ9-ɽ%+.Fh^<+pT#YAϧ`nW3zSwTH>3橷(y}gB?`jM]LI+v&}Yp,'etnN._&ŧW=}?B䎊Iqtl[| eF*7zN?04k'#RϡqmׁeRqk}M]OuԸ,JO$u~ЭV0jnvţٻr`M]R5,'\>b:c}WnjC'FTRa&=5:Y`JV^LGF^<|ݓ烛 0Rq7L$3NNԁvI++/xH>k7mE{'q"U!Bo5z gorNn1Jj}'Eljs`yab]@ԑhQ~SJaq1+r'E۠؍IZ`vw̽<1 ZbT^I8+O/KZMr:K՟ ׿ӳAMwk FYɼ}Sv T6sI`컱y~=+KrrX8o =_iq(39c)F|ѹ+_jސ5DÄCڱd2T7kMע6c&^nh_yKݘLXLp*Qж*}^"EX|?X4Lok"U>:|&EgB Z!tdH= v2 KF=mSnK[ -YU7"- A3,!/)#lX| o,KT<.림h/vXF-bI†а˕jXؾ]e_zַ5#%7:}^KEL5HCj/m@IWRS^Rj.btܽCIw<47 ~l{8ǚc± Ǯ,dunzmQ j)u >RʟekA 5\WeysiK&X!2Xj)zJS.oWvG}*ɺh˵m%;N`p 76Ƅۧn3M2flgS@}O[5b><` LJrȡ/Pg,u̼{6B~,H\Ps Zgy'^#]sQ<0,!,LwYEC Ӽ} WWbKbS@+7XƆ޶ϒ+U/Lٝbmyy-*Qs-'T+]m@S;qNǼt )S,E٩{N8$f= 6bl-OХ:"] ]NZl2h I8z:;H2gPgxbI>?^{?e~B1 لq^#0v0s \am Ln_EߺZfpK4_F{A]߰րapB*R k_(Q-rc(l4̞}o 1q 󯛰0Q'؃:c=;u S NKCqfXЙ22@NB.QöI0I Qt㍤?Xa,j))߮GOP7QٱL| ݹmgNlmn,cA̵Wafshءۊ80x;gkl`N[3h7YltFHҐĤPoq91ZWjtt@~+-tobqEw4Hְ[Vaڇ cbM| N/w9٣?cb*/H-*;7o7sa|S)jNnLMN~Y/4ޑGoI>gwZ `au#ӪK ,lCs| 3S*&L1 #?^{4խjަ?F?[3 c69YYDXsڐR$IO7yI ;L7Vn: V]IY-[tEC iߋۆOA#9hQJSGvv"J1wݼ!5^pzi'::FbuLy ̗=`tS3;(~ci7fX>ŌP ֝W#8ϾG-b;)d鉑?aP18yLw1& z]&o٥2g:錻/^#86>&ej/D4m rVV#Pw+1>ԢOl=Y~q]WΏaquUԎ2@o[sZPK .kp-YفX 6 +HmGer&8vXxssE/`V}a_tjw~RƏMe[;ӛeg7ڪ [dH[F), B Z<":>Ynၑ=^fåU+oWGG^c†`CA'^|~Zߑ7铴 1EpH [J=gbƜvW آ/71Qdr@#*嬕Z{9,::n7=#kfv0y!, B-?'sa6cWl#9n6G]\5)*K"vhIt&%H4U?x|{,/Isa L0}㴥`/ю}g>!ϡ_uyu} }k3<T!Tl*džKH wG{a"ᤊ0$h>eoQ[rVݻ NayWR<2&sXU{6^z{ ^qHX[XgۘhzG AzGrVY>.~K+H|S@]5yWhؑ5ur MVx?k;0Cd⡤ХJQ@}5Oݻ8潜`~Ob#}(EZ\M-+?)*QZҽn8Wln{+lNՊEg\GOVoL}A`@I uХmy[L֩Ѵl5"7nr"mŬvN g60p #Mcæ0jԐhgDJ1ߕ"s.]!m]ޖG' #ge2xƆξU!-HiBVʟ)~ LdBtʸYGrFQA -Q3E~/]#`PԽ \c&1U`Vk`K :N$!6CQRCwJw\L]=m~ӟO DێB} wAV*6iPx^CpIV) Zk_~&q#$Im}.O&eģ/jitO`-|VCbQ}t>'t7J7Pz'^xC 83Td;ێm]>4PCY6ЎC;)eb [>@׽ 1fU,fğs}`0VaX!ކI7(Rtۼ޶d[l0ʹkS5Iy+(*x=lx'Zxu32:u8FEt [6a$#`o3Mplﵑ'V!U|I^\TCk |Vr1ć``lY].ݢ熟u< Efo>{IH* Fڗ$LFo&fo*XBÅO^R߰h eVbZlQ{ޱ]-`dlQ-S|0s+=MQ#BF!.=Bk{F׬{!uC@})mX&:64+ڇ7 :GyWQm}IzCM@:H&(R+ŎWEŊRIHBz!~9k}y~>v=9b^?棪bOڭc_|d–?m]szo%Rz_k>J-tqߦ~Ѯ;bS,Q= Uֺ/5MZ=[3{f{N{fWnx16+ߊ=[|K1۫f:khE+c< cֵxHlBl///z#>Z- eϋߴ%M;t|g91q}}6jwV4AUci'դT)i-ϧ[KSe\3;s|E\c|v¿p=/uݧe熪/Ġ%̠#5ǧ.7o!5gMysrq)}sOcNw^s-M9vstZ\s:qdbMnwaM3љ)wG1n9k DcJ/`PcO7(:1owpCn\sCH߭on[vcmnk/@#LNk1#_?ǞL߰^W5!oSaG{&><ƸIi3nL0c)W:nuq;y7C1Xn)+74;4f\wk,I}ntӔsý{h}c:k8z)+(6d5\Lۂb2MGc3F:saN``oM-(rOAW*`s ?^ϑRs+hoZY{L {(i3nq۝' 9ה{w9i'Ku5-|w/-`]}389[6n*zbړ4'$77/ng٤-CS>o.]Kĺ>'yN,c}7^6lړWi\7M<-㺃]#n2ݽRYnuO\=Ό!<20mـ[fM6Uo3r v -F/~Y۝纱ᖃ[ق髊st:0c>mn]se7xMQc|.qZƘ5[nnt8W5gzݽOq fl-7qwӪ {lA:u7wzٰ +wZ܂lYAڂrFws"Mk['>~1Up~VPUn[u_s-7?q3sT0-co_s|Nߜ[dh7tLf^cs3)H>s[ƚdc>W0q\MLY|it>łUcč7Ǝon䇜n1}o؝8}ϴ .osQP5S7#?3)R}iSsʌ(7}zf 1sMl\[n;3!&.k!uwr%_eݙcGzAz5ϲ?:~n^srAq\ UPc75ѱ[n13t3}}?zY@Q6 Fm3E#~Qmd;V:zƼEqeMIWmn :u733;}^~g}SEܣy:<c\#~#c^[o;t6guUHm{ɫ1δF¸nasԯi^5vp5qc^#;:2c?ʸng\'hM8|xcqlM)>S?&^83ϔKL>xolYxS}ه^Oc=ƺ&LzkѸtΠ_L}u9ƴS^x:mk3oձsS:&18s/xN;ژW֘qčc07f>aĩÿW/}|3o|~^LL<^gc(~{Ռ& f<6f[ݎ/8{2qͼK&W~`Y.<פ:^)S^7nuS^ߔ#|Ф׫RLi^vfg<+3Z}9ͺK^yUϦ644όc^?3ǛqoW83Ĥϼt+c)_=/|zՙ~McY8Sަz0o^)?N^R3O iaraM>z17bS^D^~Yߴcs?9I1ԏSDc/;5gw@g_/9}x3zd^&&ny {^dڏ׹WowW/{3єI+_=he܏6VG}^WayW~ḅMUsH/?eA^u9ĉ~^0|j^žFn ;7\L/{62c3"zQ yb՗fϣ릜LV9~ ӓ)7zAW[za^tzuzxjϫ7ϩLk&NxeW^yͼȫ/,x='*2aژ_ޔqķy'ڃ/֘{O琉}3py8W}m'M\vbد2^+~{ԓ{ʸ^JayBaUz=g<9W4xőž+OV9q0:pشh_^v&.pUךq ^q᫋n<|>o y998CMa楎zٷw;G_q f`;e:'3^x0qح󼦝1\+pz+x83zc<1ϴF|Ϋ4We3'_^OU_O6ƙtz7s=屾y׹W}[Xlc4ڸUyNk啟y g^_7hs+S:7qě2{3^;8*Όw^^率tG>sUB9ΡeS^u)S>L|z+|˟|gf]yW^gMe_(,7Lwu7̿5eΕL\xHd>3YԿ=ԿY_RwV);U|K*?)uRoT9Vn_'Sl)a*uie}BꞥԕyWcrՁ}C/YRjsZRԀJWjG%{P1 zc7Ҷ ]ZK*R5*ճ8_SU ߯TjQ _AeOP(MJ 쬬.(52\Y&7Kj5"Y^PR[6/C:QqlX9MU@T}R}.( }*e}b)U rTEJC+ʮP*Rwoe~RC+#Jm0?JJRߍRh;Zz踳*1=*H(69 Qr YT**G/~VR(~]اE+=U|5M$r n֞Rjzz82`̨#XY Vj eMȶ 8[Y?ORnSϛyVjk_f `4`R+!&$tYL/ȭʜm|BKs~\1)}/UKae]*JXQo{ E| QЅ@t0Pmhk5e +5.r&?ZȠ|܍ Z1E$k1* Wj)vP}ߔ4va/ӎ)tIPVNTƒA| |S*֘Țv!#[R vz[LV]h]<\Y73Jlt8Z5x^jo@/S`URaW6rM1v8}&a5Vk_|/v?W*kX|t`+>%zIYlw'N'atGͱ.aʚ OR*P{g)U5SvfT'p~_+A`9j*:?k~F ϢN{c)Cx)`"KYNjEOxo Lzz3k,X1Xy u#H|P[vPd ;FɇnjϣJCo`)tD5Ru?gdb1|/Wu((OGh+Tl=w .g'^YƧC> wOUh`WdlІ:&d /BCnJgUR5d=oGY yV㱝T<km}N?FtK:J]1g[Y(+bb]0;FYt>S+-5soS 8x{؇,^@Q"zRo.zB{TZ`,~s|OY>^tdmg9Ds3y !hl&rIUV5x֢? ; 1%G-R'E Kj|X'4OEV?bZTWxoٳ;~#aHb8hFc]н ZZs/6V`Tւѣ;UW٥BOQExrsʊ'cBd[;*>:eQ|pMg+8WCo#y̏fps{gt%=@W"LCí 1hM>Uz0/Yk=ЈCC3֔<: ~je[o5d^P?t ޢߡ֫B<Ujq(hM%- ?zk @o"@\F"UT6[Tc<SF} ;{퍞ZӇC4yvV6U^Q%9dw-;lnARٟ6(1 ߆i-GF*k+5E5ׇ1NYw$th2/T#ق6 yFYW~Eہ탏=pfȶ$2O]>_4%^M$Ϩ?alln>:CSWLA,_!֍[ {ya7L+ӊh6-O5{kh+ 9#橐&1& v 1Hy \TM1ce"rh֗# P3'DF!Ā(m|@ixv7w&Vqgsp 5VזkzBEAWg|bm|[#nRKti(]lFu@ ?zT Ke0܃Pm|K3KIP+dP<9HiK>]>&2]=Ɖ*tc4<^f">`6ҟycsUWdUHd>Tņe5:q;q$ {W;_TV+á#k|b"WY51 ]4$>mȶ]q9H[7i9hQs9?5"r|ct#|d|s [vx[(faS ajRob|H Ur1bxkdl_5&(gW D^3 ߴ?5Pܭ8o8OsUr`~2&*vmcQo5PWH9d'&Kg9P5Ɩ: /?#Mo,~: #k'luCd^ ؋oێYqKJ/&fgڳe;To98PڮAk 5\2juNl̵M.Hh3UDWC~&FǕz6dl`+rt5ZjUg)1ry 'i! xr U&Hliӂ)]:M$w@統GS3rܯvFY?~Z_<ok`cC% CI`h9kM@&CUMYGKl\U2coíɽc*">#c5G,:_$z#/ wz|7Ǻk'&U'8toKO>/uV詆LZa?C3aעܫeR o)k*> `4qm{!)`cue`˭'n& q[vMͿM QBY[m5=+r/p4X7ؾUKly_0Жcڃȡ12riiǜvh @uEtk87Z+P+!!{G}UE"GȻCz~MezMށOhފvR}rS Ul-9.E7+zNjn/ On$e HPuoOĞYneA]]4hƵ3C/Wc:M%WzDž'|8EYܢUI>N|[FVCwaJ[ R\|վX,2—4".G\:6:A>RzYȴ1r\#?O4%NNcmȶrTuv<ހ5[z!DVWl'~{~C÷'OmCՔ(\$g^u~-v sOzd|O}d5e>u;pUeiuGY|KB8x{۹gWʢ֜|vEctbo57o Z۳-sOKgS}2n>yƟp`{>Y;//~ ȩ%_~{8 ^UF󬌏}Ҋ߭Ϙ*e֕JJUYɕa1oۤyA/*S-dãtw6DVH@'99ئ?,t/"e .yNB2/WG\1Z\#MI-% \~HY~n(̿{ʽ.ݒu|N2/}F~oS)'̛21_mB2S~\*yKFZ/=>E~ es}L:JK$[p|\eB_ҧD.}qΕsr@5oVzrje#[ vJ{y\w^-.)2/OOVqYE~-u:ת )KB49z&A'(欒y͕qG5?i>?-|d(o.}n-M8+r.=\2?XIIS[gZs.O2>w{gߕ^d~UY/ir2>Oǃ[/e xN-&J5W =L|W<,+Vwd^ҏX{h̛>^ oHR?gg;E7}/;T[KxGڗiz =i+d\BWjM[ ܮ2/W?&eH=]̻razp@/?.'^(|$\>* X>Y/}{=םBΟ~VY->-'њޒN 7{\O,^DY7[;}S)dY税o rG ίK#O/KλӅA|/ߐ+uɾ㤟QTYe'sUGG/ Nì>/k$[:W6'M}z#.^P8 &'I:VwMYAiO9濠(שw mr{ҩ_nZ>ɒ| !u%K?+/PdWϮI?Gzd!r=>tCi7 N:3ZDwzpqVJw#5re}F3)U)e^O?GtMw ;6E]ߧ߉NN~~'K OX$_M u/_t]JuR)Me~r)6KNƝk-iz7i[C_/ =)cee$mj=xo,󳶈k[~ƙzY다s2.s/hi:i='ĉrA*m8[[*Mj)87k?dyώJW?)B)K~=CїȸIˈ __jq9rEK0}]-,yvx]9FRsz.Yo ΗKzE7R+)wO{h:v דeگ|(^zN >e̋2>йZ5_u1x Feԑyk5rP=^@q2>G:E~jЙv0Bh!x>9Xl'rɾC&KTK m|SWe|GTorس2>UTy U/ ιiSss2.c'rOtߺ,JduKVק>6g~''yK #lsĎ6˸g6Ir#(0qMՏtqSqOsꄢ2^| ?X&M핏W:Y=8@r>ދ6A;7}[ /K_~M=`oedX-EOWt^k/~2#t;7Yw˸o?j-n>?ڱBŁ&'qA!"ׇE1pf@uyWWȾ~WK{Q;z z]*n,%:U+IZ~w ]A@w]|y΍Z> ϴ&͖}/jfcg̩r=I/kZE$'7M7H杙%!~^g_2m]&.,yF_yDwԡ{õeCeşe5r+r[qwi˒o ;j:ʸd}$qe<#ԋ9dͲ~~/!y'ZϗE>(hONCZ_{qXSBu]R 5[{e$ϦIs@yu}xOǃoD~٥e_9odq\'a1Y>ip>ID9 ''tg,rMyFOGg*,sr;/WD*WsexぐKuݝ2^/';~_!=>nK\_lߒ(e-uS h+]Cz)ZS?I?DNnCGom:'~0Y/)m |I緙 eK~s.kE? IbH1O2>OsuMI-N>*/9t|Y~>Ol!N2<3CQWu @WMI8-^$oI0Y_(?'I?wMo~6IP9S/h^ɯ ds]-RyH!ߨ͞"24>~~hc\ E>\A_ 3*H~+sӬL-.B>Oo\}\!2DnY r O[II(%)so>_犒Ç_~ޙWY~q'E BwwON5k>zS~.p\Dח) WY:>ЛuPگ_[@=*79EڎN.~e$7W{9'N|=W"#yP*YgW^VIUۢݞBύLY'g'e|~>|iz,ϝhy{iȼEy8{Hiw/<%}еs}<2ϐ 2~V,y;}A}uE7-}O넞r~mueoKk^)-\+|oy7v]n c {{tyr2Rd Ǯuݘ+]~V/YxZ>W%K(Y}=,m)i4ҺOE^ -eޤ ;˟,*wMױyZ߉1e10>}uaݢm"+oa .9w?ϗ{>OzrL>#ϫKXceg'm>ˮ,{]Ɵ$|ȸķw[Q >\,8PQO/[_ו<_rC?'Noh{>sZ[sZ1},rOՅz=^B<]ڋ?}Ⱥ{Mޤ&o]2d^3/jv޻LqU2~/̑I>sާL |{c~K`f+'(\Pj?x꘬'mƻ_~_=QzW1&j\ 4}텞Kdu[αC_'nm{<,M_᳟a>$M_>_'J#V>h~̏'|>9'״<|gn^[Z3wm2/A?k*q6E?oW;vO|&7rVg9ǹ9nq_)^vKfJSya-:])|(̻Gi9q6jPp{B׃G5ηx 7^踚_'(ʘ-뤎vS'b?^/|Yo }?=<yJ+AGYw]^gj+)b_bez^Wn࿩+["r,3NȾߖ6cKz%'A^bT*{ $0z~qɲO[>?ܬLyO(VjyU}/My9mb7!_qB >T+Zwf!7qtHqLu7+#/v:Su}#[>D,>f5-}^rXg%IOh~rn醬Xֿ~~=/)S{NqK-sۛͣ>,$/#B}'?FHYߕۅtJdKO{Y{q<^k34}Z/s ~i/.ymyF˲_NKC?j}&^8QW|Gݮ~2bK:>^Xug?Ϳ%>u[0駦Ⱦ7MVljc?ޱ*Re&"[s~ydݸ#"}Äe"er=q9}~nYkg 륭 yoY+ۥ]F+CNГr>_M8Ț*BeIv>KN_[轪lxqYD_7dvw”z=YyZ:T#wН@_*U+oBywaMt]]raiMmZ.o>YJ$TF9J -Kr\`){s`üzRl}GF)5?]&P%ڵW@RKΰZѕ"qIR<Y^ ڬ]Z)QR. hW;'zUYǔUR7DƽT9z$q vF+Rn)uRZ+U+u[.4oTu+u_e(UYeUa xT%ho_dQGU)՟]("ŇuZﻖ}EFJ]Aq"iJ訬Rw),wtKϱpny=Qm~C00}5cٷyez =#:^Th ~G$iL!}UZ0ToZ0a'I;"Oe1o}rn {% 2uc6{ZK%Puu=!:Ȯ*w̎+ 7GY }[YwS|x+ k>e\h:=GY^J EhX=i[dlkT5xq_ }i;} :k:4MiCRQw(5#/qpG68)#oz6 Z^VtEے$P;)t^3e_UHcswQDYc[&_A`]Ȋf >Qw@oV mՉKRQHa]4&p{8z^=mGa3RsBMl?Sfokbk}Z8\1Z;-81bCGރ;z o3לi]:*QC;Q ߄ Vv)cKٿ`{(L:'b;1ll <_+8XY\ӕpR߯u nԻ3+ &.c7[i _wy2<?9eW]y}Gaۑَ~ deه.uo0s//Vՠ:a2`bcsJȷ`m۱IS)⯪<M=CQR]qXb#ئ?صظ=`5lv7#Ȩ E3ښ_a Gn'Ma[^~w[O G͉ ![YJYm`yDUĵ$3s2, 6cG6A9Y=ǢY:j@-O%?񹲎߄og>r=mĂ|g vnyAyp,ZC7nF"KHzQِ~<*Ӷ& [bCp|تϠ7~0`1sO `n46T`#ڕ~Iwtl_߉ ]SZ-֟ f ?tB#zo@ )K`Z{X}t5FUޑo66 F`kfrǮ=Ӌ8 V}XKHܨ˾%̄~';@ٜ\0&yODN$|e' =VBAڟSZ҆@:d9jM5n g-'mEx@M; op } k+ٕ"&2}{5|y0d?`|}/^p=\ 9vpVV!=# v[/cDQ'lG`}A;SEfG-d9Pm|;r)Nm UIc'U'%RryƅZȻޱ`j #B?q$ߪ29EםvIyoĪ_g-%f)(PL# j(d$ (Ǐ^aKS-^_U r5q>};E{!~=yRw.h{Z1IyJIry}~gIjTRYO|02L2"(inȷzD1$vD.8Pz_1q ~!ÎN;N<8oJZO.ܿ$Ў} `w 2n&&VFb'Sɉ`GehK##ufb/oRľk"yI|5`<//O~Ǭ#~E K(2~6b|wĒ~%jw#l2Fst7`p 1Xג C)rȵ[vYd܍]YDOw˴WV d}cÏh -[ )k# hMU#eT_C8+WYϥ+@<2[>̱u[~2xENt?cC@lNeߺEtܷ]5K b z/Q G0 } Q|BؖM] ~>@?cɏ3/sT~o>du7Bmt62s7rx; C[ʃP|Y(B)ԙMmJ]#Ea#kok{>uS bي5AJH]]Eyx>|6 /EeQ@EYObC/!RL4BF)kx_}k,zk5[Ck W%o)˿kVVcK #O.6)=Ʒ$F# *=?X]YU_m[=yAK֏7Fb|m|IgFr6Y+豿S oUXVwS95#7XAyݦx~T|;n/~?/'΂wkSw˗QV ]z!?j!sV'݉%s:~:4Cu29܂`eGwLa~tIґeklhkp@FXOa7݉XZ%D L2o=wq]e+a3WO>#&\l#`ʲ?P_Sj.9bCا{, Yr4VMISvoC_իR^+: |G T ED .VwcSdro8=|zɷT|͇,jAK{zvVhhVf(X~jGe}064Îv㳚&Om5{^j$u7ԘaY OO"V`?0uCsԪGO>b1dзFc^`>np< C(%khFod ^O|}pxE:jJ~S7a|)eMC's)l^plʪɵE=eI|yZ}oFT!-SFcx:A?heS|;ot]3rc@0֩ l6{(ek12]<Wgu[SBgۢǨE,dϓ?*w}e_֟A Ȝ"mU FBHm,1c-1z~kY! RKTÞ%v&?وZ#Xf*ouqʷugȡn ס*o'l[ņ×'Tɐô}qmZ {(؍Şog(k3U݉g (0y^YǸƎ"Y*!D onFg_|D=t/ѭEm;_4%F&5Tw=L@63,2iĿjwɃJ% v?lhf`6z>,L qy] klxXY疓sU/.iڞ_UR0+AY|jzle|n겦čby&oSxo7/G>rښ@$#ɭ{>'N)t1. kRq{,_7 ;oGF+a( w}?||O.\v7vLYe~LVBW/Fg7E[;^-*_i< >Oo|J64Kd];jNUEd/pb>`3:OgTkl: :Ww&~)~R;h_- jϬ|38OQƜKۂdQ#6좻<5R/ #>:ܯSj8T:=}c$kFy~LPe Ƈnvx4{=w$ywvv:h^N}Ie K :sXt_7V}_-'L ײ~t3y.}/#뎧^#7#" {^d.BKhD)J[JA[o~B|<Ϲ'{pXȰ Ra SFf+): ʇ FaU^{S0D;|:ﻛ# kSYJ=ژ:+tԏtI4 ::w k#ϰ󶑦RfqT(SWIeX ="~)ҵ6o~v&դ4}dA=ǂ֎}YdXۄб(?Giq4Fr:awYoS}N&.aњ1AY' ƒqQ,Fyy 0 c=d)UhSw#JeX#쥾gۈ1,'ki;a}5y{y_ nZlh)ᑰNEp0wjY2*ˆOث3,OBҚ~(}6њJV\V8R}Fx ΚIy*bO.iX @|GUztlP_¿ճ%3~W%DG-6ޤI : ێr6&OqZDc-& ?JZ K{2KȰb0:Ҽgx=%,<+H#_uaYP,Zv3]$6=(؂ `±qٙT3ɪI[<)^7V Kz1 K=“(g:N"Ca!gCQw y>gʢEf'0ßFD1wI'0,yv+=j{IYaLц0,BQ|pm#1z<{k! |x{l U+ޞ( 24/ SFf2쩑{=FiP2Lղqyr1gMޗG㎣1Չ'/$m2ɳ W~ eL9ա&pJWVS{8Yi;kƬId|,?8b08İ<yh/:靉 Pku(F& >!E9գy}GLDܽ,EeO!#^P @"xlL~ֺz(ޙsL$jHIe؏(f4}v| #t'28dOWyIh"]!M4RMg̰VRƆC1A=)CQbO5DMMiC!ŰYg ˒y6wMG J|0 ڋ)v)-ceQZ@8ݗAۑ|\Ձ yjSj_djt⮉1NU(ǻI;Չw(tCT6?N#fȿ Q}KQW؞,GHoaMk5jjq1N0юa}cXV{GN^ƙrDsGu?śE1JN9^Ovx=y,ZĻŜr2Nzc5O0!FԱ rxraQ G.y7XsjXއc]?5w0N5 34%cO70":;&MA>fe1Z ѓǰGz4śr-D8BQn3''_°FyP/q!ra/姐+G#Pĩ1,͚Kg9W]G<+<~U„@"ŗ|T2ib9ÞG\04F8i'мx=|TעoYz%LC^L\;# k v )ȫkv )%E (o RI)GC2'pdQ-)RlӼ)i ˞1WRmJt|j2?d4yxI.i ߕ8_~Yn47nǿL:Ɵ0ll2,]Cʉ qYh l˰i4,8:a޵sLEV!ы2=|x8i`%j#pM-K^a0|"T#)KJ#O"XTOEKlz-ŗ@y$ <7Xl,ud)yD縟4Zȓ48\V/fX3p%M>w!6 KPM:!K7}Wx_IR|])qM['Dzb|}*(7[}žx} K ⸉aK~ KD:ʏ|T{S.}RfnaؚWݲhDޱT@Ϣ?H7*њ o'#J}H .Q)(tTO,2 K0"nۢJ?y)_H/ :W1Ez`69aUG'_ǐ.?$IOʧhl֦=M?hk3hA0:wO$b ÷eŕEx"]M=ޑri|h8,y)msdFU˻MI OףDztgi1T|Tz;S]FoS,y& 9yGzY5zCyTv (64m@;lu.>K1LOqW2aa7#)Τ,Q@g'V.8'њyCsg/ T=lVuo|wll J=ZQ ,}!sWHܨLy-̰6ӜH̉;kbK(l‘ = ?<6rQ*m=RI0y y#iTv_?)&vc$?o_>ۍ1ֲ:ʰ) &ՓhX #Dӄn+ʩ?`2aE320bD+b(@}};SO%B!B9wCa ;3aIQ?PLM]ɻtM ߹p %p. 3O_8z-Ɛw^Cq( .\I2fp+F*08?ј`Ҩ"Z;K՗5޾pHG1L [*#{޽K&xޞR҆Zž8a^n3ard*?Yuš"-g P'S+x6S O'򡺗&BŝrdIzdy҇T3đcKcXQ0qO}y>[Q}fH拌ɯo|/'C= Ou*y11ݓvreLK&Օsc2(ׯ f?G^uD}ېբvyBu4hl<#=OOڍӮ wt/:7ӚRuJyr(}rIuկ fo zȞRMc0ziY+q%0RHR3?n~Og)p|_qg]}Rkc@jR2f6ζj.?݊#ߧŽf7i^_?{-C^p3()Y3dA0a: nj}GEOVtDcU2t|vCs[᫢7-y[W Op8p ^YvE2S}O\- 'IDl`BlrWѓ&9:_:,T n7C/٭p J 0bձ$tLѓ\_cɑls{}.2W͐z,  c"L$.lಜ{_`\v`I+5նaQSH'% ״tߺPHx-U_}/Xk曰i{wƛUat\vkË#.~]HYco<}OF6oY8R{5j< Zѧ`'p/n*$;[4f5"hɭ6}D9~ ?o+q5[> N{:KV{$\д9˚NTB萾P$+z$O' *d t6_ھRi&AQ=$BK,=_鞷[j#X!EῺW01oèx%|w-0xhlsDyߏa3_ i\OUIc|SJa}7<&Ȟw2n۵>KŤy|6>sfl*lBXk#ːQ i]7-Cpk!ZNҷ$i|lu?~ Ϗ:!I|Ǯ'Gd`sG\87/imY^3/r䯅<]w] _ZؿZnW%Cvz9>5"l,Ɉs3\׌EY+ p \k:=QCݷ\yown?=% /ʀnDuph<Շ]0,?h+B`ɟ'ꗺ[ !;/=M+|W#a\xl6rr>u;އaox{rބcӥap*;|.ͮ&ўM3ɧ{w>[dL9 &:U`U:"|}SڑHLNxWܔo>!]Zs.V]$킍)1ocpë24x fNe5fxq<$yylmc>w CE0ͽU+,vB&pTdD}Q" WvMY6rGltMk̍DBWq"fWEhehm08B4lu˭f-;s[#~,8$K f>J*[Wv-nW:XӯKRY ړF;ym1|d$>XrL;~꼀i1X|X 푽_k׀ςC7{ IRwNj΅s6f b6pB&U>'7>q0=^b{EЅZ@76qU#V~>~9yM{IEi=gwϳ.N߂V a` rv{ط)"Hr<zu ߴh_E"s=”Jӎ":4}2Ja%n5OՂwW&"Hmwxn^}wn:| #UyAj?7K*0^0necx;5z'͖4:awΜp:۴!(5J ~SjexU9Pt3Lv2o(|>$!9 pO`jjS[t >-{rLwA}jV!O/^},d%G3/tJ8W|mrw~y~g,x##!pi :6虞VI!Wl?Snšק$rTvǧN'a([]8!=EKH+B*e-_.mpNPT&onظ׫ vW;m;dLˇ|0V<|qj -{:Nn\\V S7bJmpz'I ݿ)W qkȖzYtIwAʇ^evb=D K^-G{KKGke&"gG] uߏu޶mk!~}Upd2By]]VR$ g8;W4|DsNgoАXH| OH@|VUp瘱Wx% +ww[AUN-pm9 s&XW 6NuCwr}Wp4WvrIsuUa[2=&uC_!ztfhJߍVE+5 _ geQtn]XNv9uu9M[ܶӕ?xӖXeI=*"sn ܪ6m뗻Ǎ#h[i蝲ւ33L8Y+g\%e*r5fQVɀ^ӻO+Y7>2;L]YUR \[`(1EY@ͩ^Bέ;#ϽkcbŮ񏭵WRa^9,nI @N"5@h"2kYZ[~i Ij|Q}K2kEA79pKpJcsa|_]_;Ar=c:ř8Ū~x0 T5$n"Ksb7mқ`gb1ttO?'n "Q1V+\&qBZ+to<nZNEV>'8sD\ڳ념k^k M0p}Bgnm]xnxxB/:ؓNh`6GLr ۇH|uZG"?]afcLO%}R/ڔr}K({K#\Gt'M}KhךG1UXVX ~0Oab]2íStavrnh;L/؄ą†:avOZV,/8m4s tme4j6}CeXxJ΁MDi0<7c?Y&yX ̛(܁]ܡ?Jg,zr'F_^kĀl#,0MԍH 7"##I`D>ԫqδ'#=7 .o-ᮁ+`ow1vM7!l)[ż\~-] {jWK5ÇʝOHL?M].pR-&#Y.:ɵC0RW/skAzHwA+d-K-5ڟޘqoН[ygTf?܆PwǦ7[bT ޭ>K؟Os",{gZا5wA5ͭ9G2/N+"v­Gn-3 l7 [v t."6 t.9vguXe\z%zs{Ύ=w\+gԅ}\^ooZKoO}'}!+)fc(S Fabd剰nߩ+8VB8g]j9O~ξe.|f&:ìZxC1xh!g_.N#Oƞ_Y9Q &fˢ`ӗ׌X{߅iV??.Cza8۩8& {UfWgS- 7;48"sU4a'5~}x9߿6zr[z0;ےp;J p5pXd '9;p#4 C/j*0q1uRݽϋa)`,o wb`8[9g30ð;̗mڥu1|; ge+dp]tDyȟ,<:\`rX U +e<{ӯ7="xM~;p+%Wxa ؔ3:.o*M}o+HY@297ĥ |ɢe~ _ǖ{..[h+^1,)MOhtt/Zމ2ECawOo˅}mMPwIyb՟/~!oo_Il҅zĬW {WWȵ] މG^bt^~`s :<:nрMKF&8C݋}X˴mbcsKQ^2ᮙo:Ө 9_ͳKlIPbdlDVL> jkW/\v~?rZ+֨7;{oՠ(w?5l{GNCwU[07*y.-6WZ/4bx =/n\H8Mwq0w^,` _T ˟Ti7\[Zo[~nÈ># oTC㭜p~XoIk 5 ~I|/x[/5BRGeXXj0O>c`ݛ?}N?gٽp5?r'4O|uWcE>y(UW?J'YKa[/5q ̾<;T 0[lyY뇧0vIHqN SׄEl?!sWOpgչC߽Ra#ȯLZq5oԼ7#lek+nE+"h1\fO YR?\c&-7lKa8BU~D9@f58l Z98{6:TO^( Q/S 4ɘm9T:XLsG?!#wx{ƛeHpD" E]j*7 A"e0~k'Mz maϢMakJ[ 'r"03OB_އh7Qz/' 6X{|?8yd zHpZX9ǹ 祐ܐw@T)!)W@)6Y0l?ti»( ŸU .>gcU8-8vKuf ""A{X׫YM.CHzl׹y4qXn~p7[AC|7t=,͞2As'_Uȧ+ee7 s~q 8d>DLtdxGJ;?;ZAm={ m܍eX-RaţZbŮ#8P%,}R wRgq83 o"ol{qFDJiɞKK^9 .=hk>s=z4|I_}SyoqI,&]<v%LBP)]hzlLU+]?um(;0VM]p~UӚ$"}FX٧11K=`,}XVmkqfҚCaэbKڿqLmM`^mWNV H@i|mR[N_?cβy9Ү\Jh>j2Y/*NΆ*chd4ac4oXiJxu!`ʅR :or՝f+%&/]˃֌0{[r }e2pQ6(kx͗e,dbVM; >zl2 dI.KkSWig ;%U_kgcuaXe>c.x궂kxY[,`7nsWdql 5"O+!S;duHnEFŬ3ol`=nD8e; ?`a8|YǞkIIBvš#{I/߃SݪĝLC˦-|ʩwi=*5q_#Hk^)Os'dP>OzN8deo}/Nρ0(s9dc0 Ϣi+T7:oY^d!wxX+ܶCZb t?o,_'<$>g~GB2SMlWΝ#Mא!WY_*R\yo}vYTv14k~s7ߞž)9) r;Hwl/D^pdz)tՇ?8~GJ OfԦq0::*|HmVzT+""рcz*t|{n:R>=휛M)ô*@ ޛ|Yp+`Wu+ם̔SSQ֯#'8; cV۞_;>(^~B$G`rȷV)87&eJ/}wfEd]yٿ^mԷsHT%x;R^\Md;܉g8/6?r:.=UqavRn0\p/{=wg[ ˇ5./ԛ9(f^h;c=XnUyNK]Ϲr`4.!qܗ دGo%E1yѠ&ʺ[@DЕp; +M29!"}.|O%}ٱ)ӋTy=V=O]tv;j?vx FL~~d9:gVy,dm ϊo`_T5,ڣdX8&CϺ d?W5hwνrBs6~p հ13`wGoy 3*#֡6'q^-IE=5k.̊lpU\E?#2vB04튅hX k2*1b1+g~8[GSNBM9>ĭކ_"a(N}:ijs ~ˮIN;H8 %,?tbAOj@&τJ? cG!>_qwuVh9aQD^`#(G-ud?xwE IZ0劓%YVQw`f*lr~{_xz$%7tlOƄvW[Z _-hۮZ1%nl.[kpc 7E{o&v>I(͇X:p*[@Ii{W{QPF( %"է(I*B6 !~u~^\9'3LDsBw~n8qd@g&)'~XÝle=FBn WPhĽygb O">spQٙ@KݸuCj$/t݀c|V0 XB]n?m}=L7+P:pfɎ01ǯOa7%(4O-h$&ad"J+79BEein\޺N[jtvT,TZ)́[%iq-\) J `tH C sϠ>w "Xnv\D0-*AH0NT{OPz‚GM#"M{*>[#׉ޑ6ˀ}i0a淂]򷦇9"W@F'A.Dzuq@fvdT| mn؆5h>ظasse{m~A Tºa5'e<ԛw@F#i2#>3rBVdSo&UC[".G>#;1y.cQ,=?HZeGalFiL 䛧?5)hAX:y@É+ P5=Xn EcV}W[pe N:?mc&LJPdiRl(Ͳ;+Rj#ń w}^ͳ29g }ƢO&Ltw& oaF}PQ #rҵ՘U(isOC5h m@*Z ݆5Szx,7i~)Cj(!ƚ7XϷyۯBzyN=M2`Bzl6j{L$&pΜȯG.CxUrEuT@JOhHRIUIR)vW8|(- V@]Gg1 BN(Wnh;dS h\WDŽ(fĽSG3/CzhJ~%4Nޑ }!LvIChp{MGBh~^s}@h[?IΊ?<6;H(FDb^q3G1A6(VTTftr+=h 0s[s@4dziT1ם7%B)/A]) ?4ᛧTG"x<;_L(V%fB=>5KWձWpʓjύ"8`2GOBc?f iU&Mj= ՜:!?|\}h];KQҼcHΔfϓtzмW/\iw?r8x<6y8mzcP|O,.)\BA B>5ļ m0akotOTĺIUpj*}9 3 Uzh<kC) `]`+QKA drl=.,TR/½.t'3#Z`=ӿqk(bS-Yշ ?-/rsj9P򤇡 D >p`Rx~;|"a; ,LJA55.. %,K0[~4G D:wU/6١D^go,M],,&;,[~^]mR" o%莵IZA X6Y?qB N0[fk]{E[C]SQ 8NpP܂p kw%rIowh'؁mlT0$!Z,7)a{V"̣F 8L]a'~C-~ݺq \d 4㼰7Z%޾B5A(&z!o6Yf[q1KvedBR{Mx^8PHCC :c!i}r}`k:ҕ PnLqgSW ;A,Ф]ĉKתs栵YypNMZm3aE]#vV+t:A5bY{d12N3IIxkE@0ks~yj8!U;ۨ6g Vg#7a{`vg˚JomҾpǛӌ' ?, 7vi(!CW|w%5jbOqJtTe!t#fv&5lh.t/(OWJX,]P+>{<{DL~&'jx ѱ]E >vtf "hO2FQ? ?FΉW0>-jw 3KRP'̵B'iǗ0g~Cyں@Kq%'$*-mɭrpH p#!3?H(\lm9zco=B£Wyu̒v2CmVx's0)}45cJv /Vkj9n'GcQV=XVBl7?tO\ L6|B7.Bg`{cU/!"g80KI2!XLgUֿ.L #ǁ0 *hع&ټL ="˚m-jP]  ?\ly,&9XJKE VSC"\a5ryBܴY -4ݷ qPwf2놥W, [ ]{ Ex!B\[΅D/.:[Q^H}=FP #D.eNa 6XڕCGxrҩcp>tCuU&28KQAu Ӻ8>{X6$Ub#kqdfWR.#); 8 ީiP ,XQX/yt]tnDw/2B6#[U Bo|Kö=7 "kKM~ma1[z>=0i[wP5ssl^1<:-TJ-L__BG#]XThWf^K`9WNTgkA׵@ xq箈]cO+dz!:JTlHvnï~fSy?,}jaSczՙ ɐC m˗ !}Sߛk)QF{CC7\8=:sB|._ ,^H;(6Vݽ杏~lG//&_~éZp۸6"{l-XqB7uJ$֚x-IЈSхW&G* G7w& I˿kapz)pfp:AN>K|U0k)(m”{:y Oh,6t 9fO.nRjX7YA_M8Zx0;Y\b q%UWG|Y\^Hhʃe?)QH腍CaX#s nxvwqj\Td S΅L_x] K! 8>ЙfPY_<1eAG5cqZ9'["Ě=0T#;!\\shퟩ2eU5zL']~e0Z\ \-*?"d=C[ɰ0- b0۾*q& 6"t >}+Zp+/92 e8 {ս3%)p%P>/WUؔP<}Kz҆O$8qِt}O҉==͌c8v}#k:i+l??y°D5S #yw?SPhzn aZ$,4Smzxia[)!(sFm7&=Gƶs*節cofwTrMm 'IYCt0$R0 LLgJn=uf)& &o~^3=5,a̜Iq&5ѻ{W|/\S޸s\n*胈9hUnKo\\H9R1 K{ҳS_a7$\E/^?(Wh |'^4}L8%&#/A76zY)T)oa{&Z= N{/#عoץHU(a0H_҂pVD8-U+7CGTp h8 u?a1AspeFoE޷AUur"|}b.90g'Sh> ]~< IoSCpKLxlx*}^PcDqBK)֪eͫ4l`;10ܟ7<^mLk"-G\{Ț ՕA੗bpʂ9)Olrqj͇p-p_4 0N:4գ}'pv3׉BQݗy-. )au4LM:@S$=;lrXK`O06Gб.76ӹI"%MmKcppѹ-{LX0~v|do#ڞp1'):(8o #]- 1w 3ٻV9k33oKC*QHi=Y7t/|ZOX`5x =AgU*г"~έEJ#C=w#WnR^Sn6oD]vY"7m9rVї7?,pC3u#K0ޖ;S, 5~[8z^B2V;PKn_C="_2ךX_)V7լ`%^< "GN AQ"{^ɎheK.|}{jpq!!:1bCi̬Q>]!EZB`.3D+ʛ2@wQg8࿇d{da|#wT_Ɲ3 w"T_i n5|ƞJ {o\qѓ?sމnKVSẨEq}d[P椂p+Bh|ȱJ*=fD~iH܃ N߇סi>GY!~ؔnkĨCs7 K_w} ӺAc'Q,il[|p 6d[LwV- b}o|mJyeq_9_`ZsC/`>uvC|жU8QP/U{vGTSֱ3pR9 s]Ǭ`3)R_v럂w]ҷ9hJCS >l/N I?WQ6%nR%vC̄`#55?7}".qg @E]N1oO8ܨ[pre_3AudY^NY)8Jӥffw dv`&l+mn‰pVkr(`y1Dew:uw?A.\|, r^9>घRPk'>ob{"`k3BܳBQr;"&E] =8 -_$ТkN|=\%K.>a݁Y, 0Φ9kGMV'z|KP55hdۜs޿d:p*Ҡڳ&V٬'zح"JwHuHU2t$3 Uџ09 Z_\Y/' \⑙)R7>ݎӃ 58~ Mh^s 4W(֤1A}#ի$:?lmЍg֨ {%[#ID1R[z.z+\s{:{^fobƾκ)2&/]eh&h>C5b_ C~jйMhOJ!IB :<ФRCl->->76Yj*e CO $}^=Z#q2g`l_t4JX_քz'J`h "?zOaX;mIj?ѐ5}<f:'j޼ՅDnۗ&[V~pVs\\?ڱr\nGcբ- 囅 c~1P2vWހi+a{ǘ.ӥqqu%$V&w3L=%}Ȯ+]LDߑg J~w4S>86$Ӧ~ <ފǾxGlI!.t%YjI=EUTrMͮJN{wE/D{v6YZ9nڢu3_UKg TX:B;Q 2ؚ>޹b3mK7`;ǭ[ؗ]ISA#x+oa>QH^˷6Z4=>_oO{)9eHt?:Mx IUv;fv1\L@8g$?Q̕4} )bSXbbvGn%wyG._tU_$Q,WHirRF>酒d]R|gY3 k`{Ԣ> 3ba)Awo `54UgUH`0zpU+Qq֩|ig gXg[g★rx[n;GeِX06R%nၪ a.LHJP̭`sp;IA ԨS"4ᆫ*>0܂^Lϊ:3dWooߺ6LaIVXrIe}as]=>-(+ے{]l6C`Vq24nd-U`e o"΀D굄+t$MOFtvm$JC3R3]Ƅ0CTD§p~s" Rr ɣ}]6B;m,wkk nZWT`{9y_gFB8&p#v('qIaZ!֨Jf%4GgJ2CqU^&Om;Ccu9zd;id>#'0ģ;Kp9?-$</ewMW׺(BfɭPDeN+PXRXTx ;XyNK֛ zhd<顠VzC2_#LbX,69.r [?^,VE(4?4BnEz2=G^"V_/L_a/K>P0Cɱ"vӓ2]g$Q:nwJ^4П"/q)tzسR]{VCbJp޿ 'e{7`ٴ6 P>Ƀ]RSi_aQ\\!YqRU82=VH? "tY5@ "/XCrk*3Y[)AC~ =ۆ{p,V9B*-hX&87w/l0kN}*0T-vrAGȔ4TVxa4um[? 3Tc >O#>^5&>?#<3$$&-a1b,W.Rw Fs&sCEvj PSswX]am-ZfW|}a-^{l֝aC-+suM|yj>D?-0vX) s}5vMvS|E=^պ>(¦+仮%(d8zQПp*qI 3Of3EMqPeymBe7 Aѡbo2&) |&.E2z$X:1 %/EД$02+W'0bz Uo#_o„C&l?`hKmPuS0 |KɠG!6{CJ{!Sd7^ڬq3|}yK !]ʝsԢrIl~w!)6HI^6= z2xǮwME{el}MCd=tZAPWw" 3;H 8KONO$r4erx٘י&zPF܍vq\` }v e'me[Y |kD7{#E^r>|8%asNT=6g<[a%")19Yհ͖7G5E`E%#*?`0c]Nv3\]""9OkN#S$cW`xl^a㗟N-PJ8>˟])ȑ~ ?{w\8{k]R;I (oh|{+ 4ݿDB䴬`Ĩ.A&N% 8TH#XVuUW<8ھ+Ë\9yv>Σ0C-B\k uku0{O #g-l?;7z_GdRdV'0q;V 2t)7?6a T13IoI\J ujH\vNvQ2?[(@vR4R5,Ęhg0I/'ď0`84V qO0k1rÔ6a JHM ׊qӄ=XdH!WOf2(r?re ks-à['o_I㕹7g.#g3mɠP27 tjƈS: fgm׎ !7/uUqߗHSm5opJ];OS|#$P\SDڃמY]/*UFpݣ?ٛn :?qP^ENkE0¡_pzOE!vU'r$a0[U\h'D<;rE3 sar>s&˯ڸ~j&WtLUxVi~΃_3݋jKHYMyZu.N;P7kp'*<8iBӧ`X ß5a|& P\ %Z:w% g#済zK" +`*tZ]!,P6P:_-_(`j܏s \mt߆xScm)e=,:Ia4:Xa7&pr![g*MXZ{̶C#;L"i[C-|`D8ng߿ }-5;T86ot,V[<2b , %  mgP?A{i.>< ˫KTgaH;B ߑ聕Խß7B C0}{VSh ;РnR#Y0Mg\ӜZBI'I)xC y3o6mi+x?@*?>#蕊˭}`Fn "Hc͘o 8Fu|rō=)F^d`swL"4DS.h 5@lOB =pw}-0=,5ɚyi`}9=.s0㢿)^YXW>ZmŽ`K) oXKNāf1JduRB}|,TKR@!/yՆ:st{VRoN: |ڞx0G+9w@&bs[nvͱ^7˕bvéfp*øj)/!nVZ Tdm?71~C[FJ~,L](T.IEfAZQ4]=OOJ9v{I%!t]#0W 瓾xlXt,K*J VS'5s6,4 GUC%[0l횔 IUcޔ0ED.*g݇\&ifn r+nQMo'K0 v{ȵw{p`httb×=ix8Gdd)W{>w- 5DP*)Je%J$ʈ$9z>sd)>30qlY°7"uhz&Z,:Dpuo|5lu9KҮ{}<_<>[w~7Lw=f ACOۡNA 겭:#NH*.au 8dLw>vAZ,0V^kr+br;Ftcn WS'AYPdʧh{6i0j-_ΌK #CotVW:FeMNBھ)r:"]΍Oh3]`i$tbq6,=ø2cx23xw$ka@\~b2 jIxBt۶#PKHioծiiTU>]¢[ 0\I~͞K>,>稬 $ܗCX䌻{(+B"m*udD=&ُ\_@2IO=w:ANw'+Y<:a!g-KI |s*ҙ}DyevExҳ`SC8kw 拲\*MסM09ei?6߁%7a=ʾWn1??of/~0£Q">:n6 ㅙl=r)U]!cLܱ"[%/bfp|v mKl?aeec}]=#ZG:=BU;eG9 o>lLB( Bv_0$=fEhnp]DK/mbDh&Q%PUa je0W>LQݛ~كplqCֵvOdz !j@5*LXo#Xf.`ZC7˂{+ɟ!|y߈~xΒ?RVA*T94 {>PIΐW(ɳJS}LjxBR7[ЅW7B#yqTl$|

;[Lwvp`'_lr/"!lg+AMⷓ8w}<ß<&B?f_v6,: v8Cr)ڽ S ^G*ˆzd@y \ɵl&B. UJ㼰 ,/rE.~ 79qNtMlPmjZq a 6hg:J{j,߯arscb{ae?B#Ջv0f!El:"Ӂyxs=sH{+F'mFC]HHkіR֌(`huO Z<-UeudU{~wĢeI ݌}?i#xO7ҍjO8 gaEZ jQ<=qrƟLkwh"Z߹jK|06?!~A .`g5>dSNhx7x4*DLqqAXl>y *v0yrK|^c 1UC'G)=廧R#\³4?wE'N 0QoF$ £UH8)T=K6`XU7,<%M@'ga#|숧!hGWzĤs]_`p{d,72pq'"cVÙ o1hO; MC@q+|a=(d `tZn<ү[W?Bi׉6c>!N̓jTbχFtt ΆSp|C(ϰ}.KIþQ ? "wk4;;_vнwC\1 \o2kx {*[1)* ~:/2uݙP3mY{xvj{n߰rWa۝N՟9+a&ӓ[trl50\n,E_0>bQl[y#wWa)<҇'9#;+α Cӻ]cFPf4BWӗ?zʸA $Wb/qԄ,THo{i'C=E-nwܝԧ֟rʭ:ᖳ.3fs.sLԟP̫s6nӋ}ɷ)sA'|]I`o Lgu:?pK@y+ʼ?9vVWA|ǹ灓U3>zEr09] d;3$}A⸚*v2s*>E0 PG6M0v7E-1yv~&e|)N۳mM|әycD~k={Q+4SqŖqO`DUrh㋇] S{yl0 z"o>Prs0VdeݭU<_^^(.vHƻ֋7*mDR͚wdPHږ9@EWv|ͺW:w"8Ed?w79tm+,6?Din&wvL~Fgw&>_i= B*IMj.ٜ낆JyS[UnaPDV2fn36DȦ;!8u7v=wcyfv8pdkqXVua"ѳ24T91&Ȉܰ`iU8\t.HM?tS{kwаVIrW`5]Ֆ!Mb"{Ŗr  .0',\@C4_l-@?ջS=3}ޖK ഏ݇4;9*u렮>٣ '`~jv1}:fԮa7o.T!MpRw;&O_e8YOߜluwkPF".t˗&ٸų|p^*/>&#í mf`lQXq[.rUq]숞)q|*@óW.2JھٰrU,G|m/@]4yVƴף"c]|&:'SFD쾪-4 YB()s%tb5E?6>ӟG]~ i?6_4=}t<TP\?1oH`^)H @|Q3͉mnu?QOOz8I|4?smQ0z {WpL.gIchg=caR , '!z&gqn~ָD)kTx/`1#bs <kbbw [BuY)dSPZ_OCBǣz0KJo""D!,>N_cu6 g9 QvCo'h KK"/gijnwև)|PW y!$ǹ.A֧R_oW6 c4ն[74Cw{XU ZXt+33$)q8,tWt7AUMF Fd`8'<5٨|QUB+Bw>[x~reUAR}u@x, F^;վbQNn5u~n5o]: 'Rj76.9Wsہ`zYY')#==Y,7ئoFs\x_$LM--D롦Sj~%mA0 d-0R4l'`gxQ'嬟o_P6sc[G(lD%by;. kCb/%{W yoJ|k b`Lֻy_߫qc_4v?+@"ے j{3o|*nkx0{EA渞4W4܆=OFkXSyDD$pzh5nVVs=qs ޴>& ឃJŊpXpnj"r?KW2!/rw^>ߡaN*qr3Rj­#ݾ{ngj0L|zV<Oz6Y|Bq&[gnIN G}BvS~l[Eۤ5h嗸i֟ 8Ǡ1ccsB|(Zeת7,z2;wo{+SL% uj|eDɶT\ scܽ^X>ޫʚ H2Mݺo?/AX֎vmڟ) K?&Pyꭍrt1.9~NGWὸږxYi~k1YD:I=IwWu!D+,I1SsUGo`Z?!,GсW B/# *%R0;Em^:mśp⑻ 95Z5<}|i_Ҧ`Sr-NwyȓDv&D~ݓ0*墮UPl_wȎfybaqpEQ% C~5޿'kif5?+?D*>BTUԠ(;W`8WÛiv8*qY{*z-TB/oޔ;azaG (Cgc׼=] waW08\1xrý${Ne#TO QPD~դ 9),Bc*^.q%Zq@F<Y` 1VNy ѼpJ4&V"i:fh,1*͝oJ ~}X >@ϙ|fdG/ n- >+ >B6(hؗ|ծ2=1a6^OFyF@Aڕw3bXhL̈%fXU) LrCnmFJ%H{YmO! L:p}QY@2]A<09GM a慂JW@̺԰ [?#Hae#veĸ Zd )_Dz|́bP~ZP {W᠞E M լʦe'}{?#|K //kyBJɰF<:t:%;i=[ (ؚwD+_gPˌKܾ5{3> $1zZyP[zTa- .2e \E j}*?y`{HI,8/`PW$ $.tx^J!7[Wp{y65kZ{v)l5x6jBAUHg޼g~c+\ue4hp2Yonh|"Eta~c7ȼ!%0(T *J7t)|Fc6 !f_7.L@k:CZl~Ӄ X^{%# A'nCV=}qp&)wHshoUd+Nu \Q~;{JiԷKW>> bvۙ0ݶߍo:RRS|#ĝnSd ՙpwM~[r#;UEx%~EB8X'_c_^궗^]ya)A-4L:jKGNԝMFtNz>Ga_E;6@Km 2dl|!oGwFގ_eaZ*k$x?''{em%c9+-xcJ ?/@nK#WyiASoj5C!b* 9à0.DVOH>ץT9I mr/Ƈ~'>[GZ>x[݆kT-{"ܝajf$ܷR>k ^u#W4aL6]򇁞UAP/H".Rz7O|7jpIzo'\57u boɐ M̋D //!zj>Xk\gG2an4Pl΀ǁw T^3׶wH5Xj%!,qG{Xbh Jù9o" Fr.\S!] ? Wzi =rO?dMطe`EU3[!-?RUs A&tF?a-o5.2 C:$t{:OO0bWFIawfz/ ;_ wbOZ,v_TBt2 VntJx8do? Si?2#T̋ .dIDE{ C`xz5p [#|@ ʍao磷䳞U@zsZ{Z;~63*9ŦL/BPϟ'W{D_bAD}2l-=|PNM0 B5+`ߤzQ+ qQ; K^vؖqw OI "jz^%B.s r涀oXJ@Û2liqDÌ qۗj>Pz *mdy8M4Z[LG1'gz3MӅx ٻ>D ..N8SFFq~x6szCMDg}rd:Xd6u`gؘd?a~&n'87Lςsg76Pd9, K1+!/3[fK*O2e@i*{ o冣zoTHsFw<@HEݡΠIF٧ (nh4Y*jM}ǒ?߬BNPo@+l٨i\@JO .yp "Jy95'hCղ>K3ԗ`|FNdn~@vKj, wਫ?*^q.fr6? ogܺRbryG85 }$%*{W7M/k+r"7;8ȁnp䶟wѧ >Eȅoo-eln5w^!1ƔGg4t=aqǺyy4(` KTb/#s;pyX=B ?*0I Bzx /̽w6ci $$ {) Q_M=WЇmbٻЀུ9^h.yw0VSڶ+9} ;x<|MRm}) {hH.C O ੷; 3eݐElL;52w^ޘ':RZ_qIGӒL_(Tv ^Ar+S8(Vaȿc 90 K7QvVrvnt m{*}ƒ)aJYWĄY܃g4(ۆ<Hhgg>n^[|4s>}{ ]a⨲'hjSƣ<<5 }_R"Ģ#.+DÿC@'l'W=+&jwGo_L6Y_G+0^1vBx\[U~ْ'P;r0} O}HO=QȺ([01|!(@yi4 6wDfECc8{= K'9wѸLӓM|+0+ְۺ9DpYcSv'DFMY>#ݎ %MZSkd0/Ū%dJViy`&,-seI[;ĉ)-+GWܥz0hPan(y,nW{YqCm0nY B#570=O!~i\w`/S]r|H< H#"z@RO{Rfow D5lrtfo Ayjv*ܶGVs"7>\%L~owVVN ނN+l6o?Em}Y{?ջ @y7Mt)B1HQ)̭؛m9Ź d vu %i-ʪ2Om'Bt3af1#!VbC{HpQ_H+*x|Z DD`[{W=$gO*~]O0¸\`^W&qOjq!%g_ƎZK0{/1gN!e+";$-pkY|f^)'(3Pu9 G4?l'T&SM! .yϿ G)NxP [3"n Mu2H6U% >F9X9m oѹ1=-4dވ҄G skY5=nzZ[>s?Lm35}v,HWł >zֹe50ۯh^FTo-ip#'t 2D _2 $1M}`bv,8\oSu+yd<(/*ơg'TiYϒb+/F@G~>{{%d  )i\WC3>,h[4«W =Ɂ7yA9'-۶LWߓ_͢_p,ٝR\u)ps¯߃b0(Y a P |A5|fC';*|yoŰD0ڿʹ VxFy5QQH ]rcK[fvAәcE ,ҷf};13q[_jzt0,܈{-'M|MiIUDކMlSn>LJ"RfӜ|,?]u}͝e8e9L m-tGckɄVM}m~/wWu@b#`5.^#gZ#DGޓK-Z\,_/ldVS?ΰod9>Dqd]X2; `v$fK4XA7g)Edا&UA>F(/}bLC2 y Ж[}댴~p%EnAxTzBv-nljV@DA5UWB(Rv7Itj ~<]8`?M9[t/NO|68&>av+ i!U~a YCT*a. Lm ucuw52]^^zu֎/8sHئ,Q3B`v$'FxU8si&rXmlOfߨ,"L2 Ȱv3A ww5"8x>2϶bR׻oUX]f'ܦgObSIeljLn/n,-xˁ%0yࢧ'T?Sp!RӅ 2zпNW;m] -@i&)gj{M]qv?xB=\Vy\f*p8ȑ݊Ҁq47q[n[G<,' 0"nr)T菃W3ʝ![b?(Sۿ߾>Rj"Lj@8/_P% dx83] %3 b/tmszgdGmJ_3vYcɽZKgܟX 5JS Zz.҄3ж"8}>> S0cj JM\IatrqB`ޞWyd$ی}(&B[=?n OT;`FxQ %&ꎿYמ{mPˌiz/b+ ?Y_=77I,S: mWL/5yAIh5^b…֕۴!wU0NρuKp43:bO .xfYj)*‚Π4+gfwZ`c8<Ӽ"YeKf^f q }TJJϧ F6_+ހ)88ȀO/LGΪX0O˶`4y&o"ESJ 6PECpsL:X vsw򓛳{Ap0܎+ prsK f&^ej~.B̖Md8~5N zLHl$͛ӬN_]-%G'*,"fB$j^;4>Լ}+,c2$ܖasiMz]:Wz_X,3accsk~(*;5fsB#(e}`Zafԋ5pe`s@qA찓,jln K^N=l#p]q_m,Æy)m*@*lgWw=6]_f;=, tBYS {0CLBri<F]5n#8Mv; |]x2V- T~ w>q2&|1r;JCH{}i!ӱ7pzwVvO9ſtd-)`d95[GO&d6V}u|[Kc7Q:asu:֎;@𗖖¢e]9\y$UJxbe~W}l/?Oaw:;!+k;dsOWVX·@bz?`ϖo\pP og)a/vTX!s aرdc+T`*RE04 |gYD]#pZ1ulps5[nN-eouTΧJ["ʪ?ӰA?SXUI6Ox3I=ocz.ɈkHm 溩O."=2Ge^QIg.xrMr'2x2aYJf\șk+0a*IupY+vTsurfdaZQG=ὤ$˱ЏY9\ A9yTWCxý<2O6״ |"'E枅%}2|ۑR!aeAN->&^@AGc?Z}>NKh-Îz%N 8Z- ^NLL}Ѐ\C"|֭ږ2kqyx,Y{o;\.â\7%㕫=N~ov*9pWU{û妈TT7hh# OOFmd׿= #Ho(9]ob`rQD.*LH >v\߅KF&濂wĵpU{Y16鋔/GY3}7jn+ ]zQwe{|ˀ|v`#Y|:AU ^Sq[ykr|g l`e-:SaHܚT8(-ÆgD\wHWQ d qxw^h ~t{G<\M"_#E{X3+܂.W09bߕu?%Ι]cy, to#gg).U`53)861'U[qJ<+/t ~I(նkRܨ<ԀEQ%FPulEpNV 4Mwtr=tڔY>4?PخV=lM1a ڮ+4A`??>Un>?.m6?*;o,{MJy6殸@{ خgٜsF;T 7d#}3 ?.bZk‰$,ys懩y%{9])}$%VNۚJ C5"{/wGw"x.Dviw1{mMcly+VFtmXntVb/+H+ch]]dw&tٔs%>Nb-{}jW^@9ˤ3?>^Ӗ,G)`ǂؗY:m*lGn]\ڣ Uٌq@xj q2vI_W`-/xSҜ3{Eɡ) r`]Z4^Yz0S`HO}@1p܆*apCUgV=wKYB`Zz9ݼkxkojj)f8bXηԝCgtw*1!h<}TW@}Um*[l7TgrtWpEt)(IC 4Ż SHkV8p56TX悭,qld0߇lZqW0ndFxD/`:N,y*+jZyj7A[%Fsd G@xcX;[C@Yс`z( 8x_ ~;#Ύt@ 09]鵂%'V37v4 Դx 7ዝ`Yz nU;^`vQ`ƞ ?+Aj?qyLs^+VoO4`vZr(XS{z%~0~`x4 eHN2=;}@ze/@ȥE`תpy!CY oص:rF1]m-}X -(  (M;l2D2vmC0 ͻ8JA ^+h w$zLx0U|3uE8X2k$ֽ&ʧ Oԏu%6ظzϕʘN3eؾ>FBDS.IλZR.A}W1?к4mfԻN ߸.ezbd/(X V=>|R_x08e%{`{r7cuf_$kI (Q2m^'S}{N{`l?sہz0w]p+7}boв$[e?|;W1;]N$ݷPU<sA+ؔ lŁ& :џ-nޛJ~OY\)\M&@ =\~FkN)-; wl؞l2l&8NǑܖ`^ Q?}I\-ثM۠pH iV':.Gr+"*N^8z ~r_. ̆) yTlxy#Ti=KnQ@0ߒ BMA==LrJ`P05+` TzV SGsdqo[!T%pwD߄vܴORCN#':'flv|^+W}vcѯI(V7Q& &rkŵ@jo/ N[c0L Uzq@3]5*KrR"hʕZ@O|YӭO$p9Ξ-V:^PN9WF ate0>hJzMM*)8>O,>!-(Ϙc)w4NX R/N/@KUOfϭչ L]+4p3{s^uP ~X>@3|>[' xLw_T32CF]|KmC@*J{ƍ!*1?Tn]{#k)wU ?}R}#hX\i3)bGyZ]UvqއvMimG&v`L2xz?|ӣo1a .8mG887I?m=d%( -Ҙt{X/孷7ڟ74[Aod>sLIFy~~tD^}Idӧ*IK7nhol5釨SF!5l{'pW\˴-YxP-_T|\; yѨ=UA7K: y\ FR0ҤVP3H]pD}~%ۃl<'Ƚ`3 PK6"o{XajVz>WPN{:$ݾxv4#*᷼h/?wuEr0}|qfJpyqg\<)nL#_N T0b Kͯ#a0)tɇ@ x( ~ _/#ϯ];@>X _&$d,=|e3&a|0xf鴒}WZ);f h>w6̱+֝A(_r s`}^%KhWlٽ0AFftV+4yzRu%Ft~qG UBsp<]>~smq} 0s Ilm`Na^Qo_U3L`EvVrN+K\a{hw^YЏ<[pQ?N~Jf|(vwKdve p \T=r'ϝ;μ%NqGl koWnXjsCG췽\ {PtHS2;(0u4hv`U2Jo^0K7an)lMQʿ^*zj&Wj~ͩ!r&h#CW\FҐD~ڑ,yɳrkzh߻hy-Tm `Zg)F.5{&<i&wmOOa%/g=Ŗ(-1j-OtѵgAOZ fâ(1k? jYKT_klzaGZ:5"Ĝjq#Qi7f _dB@f^Fs sv\3f|@W@_|{yjsbLVAw2_!v͂]XxYpn}Pv~q[Kf ÿ *ך)`?L^?,k'a28>D{zNzV+@{g mMj-x(LuvP*3<׶}ݺԁadgypF<$,a`ګJKUg`x̀V* r'F%@&ښΫ|m^{D!@ {>J'-" !eu\to7Hnke D|zGoC-E{XP)akA6/M?DRlLޓ(~::b?bu*/ 8_phѳi1`,CM:g>7V?){0έ|M ŧkskv<:zyj.v*DNڗ^{|684lb^d^fc0fd.&I05^`EZ)C"Zϙ_x:iD8bn-(W`uϯqIT5ʲ-5.?w?h08Uը?N*Q]4q(tLNnVHŷ2,<4& bav_^Tw0~]K?x%_q>{Fރ #@S~(zy8 cpvo~ϝW io][ϞD.Eĵ_<~7Z'ڂ?pLg&Q7j{Ѹp ז6A91//WLD{idQJ3N@϶ YP4[G֝j\r޿K+k :9`P9K>Ҭq'7`?qw?_pX:w/-{A;<+M(\lQcrz^@G՚AcŒB6Y@Bή;`ltҠ?K%D=h-ywfnֿW[>'`Z}sՓG 8ȃpn,t-^}l[{W-aċ. p(Cj} A.0ت.kœA}&7Y'ɿPܛ{Zu#g{8>뢮]NYJ*f^rőo#@_E|%7u< ƟQ[@YLͳR ȴ h ݼ1ˀJQYıU=7m*>]7Aw'rz}W%AbkТ_H&0u|P7V+{+vOzw^ s JAbSo|'h7UsG](]=.% _Ӛ/ |Dܨܖo#y{>=RW4) C K*hjRK!tVDħͺEm3HMԻ̋X; Q^h|?.˙Kx㣬;>?%d4)zbݵg~P/.5sf4XkN!l䋠.vSAbEʭW'>2(!|]{q\>#>_>/ʒ.N:$Ĺwo$G'fڂilKhdkzΝmBj9=DO)4\Olf68l%[A[?n͇q?L:ϰZ*/Ǜ8"6SQ+p|V9/`E i).G,99? c҉߼wȫ{0 8gǂ]ο(̓c>ra]F5k(虤sй:\8W/ޕV_g@5|(]!A~h X 4;;pSj/#gig3;^zY.hN o]t Ўs|S:q?oOʚ+,P噚s@joP8tr~DV/VXHk{ AEJ.NeG16:=Cgj=[7c[b_>z@mLU5,M$&&|RN]V+E0M4XovS3Za2)" wlG}\XX13ϹA2z|]9OlӺ yoSF|Fp)_J5m?e\@IҚ;V~' +ձ#/*M^r uԃH\7۪s՜>q:K ͺbsn*Tvn;b ɡvyѭ:#.Yuv2BhZ 9'CjE`Im#zE; ȵj0e^ ]j' eN9W"quGcxȻT0w>Uv~9Œ5Y`F 'N)IXK@5#L cCS\!/i;`)ߨPSgM P+>7vfA:,aF[3S~Ri H4.nv0d zD"vd_N]MA&Wdݒ,>8h3 tU\B~9| yTk_^iI|%#^jo4GJibiupz FɌm$\Fa[&%Ÿwr>,DלLuʯlx'W݈\v_\Ʃ7\)pɤfK8yTN2n`Ի w>?g_P((S0~ =l^g2&zcC qsZiqfPGF`@ٙnT+`lO&ra@qloT}OΤ>r k:WU_*$Q;Alz8 Z͓+`W٧< [^~-P"lY{zbϠ-w*~P]4iFB_2~:Qa βUᔇ[U0YZ{b^]V-~vһ_>&+*`VKs^ ~tO*yKYbpS6!hUe#`ąjɸtԔYz?"Icnc^魰y][`/.NdT-lt6q v'v ΋SW[C?{="r>zH*i/QÌ؆xvN5$Ä́Wy}O3jHi"O*ꎍ!TNg oI\ 1E?nuZЌվ%lxBPN˃m'Yx슊'lOjyO0c`#^+3HUV8"2_w0(_,A&x#囵nZyl0>8ۧS2}F$mm-0 & m4ٝ} flιs5 M5*@nqu|hTW KܯՎz՛HrвZuIɳLs~uBE#BG_.uA2t|ڮo\xZΫK(6W (OVxblO~נѦI+@Cv_yіf^+X;@|kGp%EaK.3Ƀȱ[n\jگoOޅ{%|[<&- mhM{f:9)hMWĀZXuV0kQiVH9D| MREnLu; n'QpbkQALVj'+qQr d5Qp?:٣vl|~N>[Sr\57e}ؐi",WwCbNE.-R{Z5& k< bDqDVV^|KV2뼉{d.^yZݭV&ԟyS換;4w,-zXruFfT+u3|_ Ja cG;Й sCN'S mP/+c @!=Xr4%#ib ȭ_%9FA"#1C?OO/44e|QqI~Sv]9[}lWaA-e'lJj}dcz3m =SDWnf}4'/_Y,tRx<Ǡ>x=!`0hL &Lٴ-X A2%أ@sYy +>ºsnxS7J"uE[]e }hoLW?nV+:@%obϮRrh ~rn}GNL> *_Bd/l7b2ڄJ7J+NҾT'@K)al \GT-kKC]]|0H''L35hLC?:5ɼ#do!Q^Wa3d|]PJO}WΌF)hOW[JpAkpy2k tuݧm75ҚONw} QZfp-X3 ]v]:h4F֡>IRԲ`~Yt,t'3vqO.+y6ݣl 9 yaT̶= # Nٿxi;攼ɦ] uWO ICgG#pj^S0 [GU I^|8%>`Oz4>~rgŦ^<ch_5$l<ܶh{ϵoFc=`o712 D\>S(ލq4 僧`?1ޚ^0yaݚr`g=✒8Om?E'l*@pؽ{ؽ^ ˑ+@{_+tfVrgkh{޾{OK}h^W,u W+\21}yv4ub? o'fvpO^zUXAk`]տŚgurYsX<\/]A-*Y ՕoE6zd.b%8eYO6%Ks733okvvz+(oT;t`=m<fzwnuYS6}t@/ 䖄Ak+}Ab7XSό/v<)T$ Ό@X0kf)]nJ8+)BگhFwк: 2L(3`5f}5F8`-M̵k@k5o}ڿ% {KsA;F82%{n$/~O4EBX[||*uF&fY`DͬM=>[,-{󾅴(ԲVݺE ]5%ZJ6喯֘Ns5bs{bbpͣ])=PF(֭a]`*M3JbR=#{bj@o~Zt?Z$ƍyv }< YCk](/'}ֽm`}\) tf091AzQqsogMA{5e ԇ n89PF4E924a]U#blj)5p"@>qOO/eO-H9h|Bk':_KS-h'_9V.M"+A.@.3~m^gIUhn1M[`<贶9XkdWk"d1]F_SeB@>g,I6 icz [,.-+S p#y-s,徎hH7~U'BP7ƺB6iwE}jXX8͆T4 i"CQ~qknB-.m%|&g~Poe\;a M L/kW`žZ m-ҿo$vgFlwǝ%@uycSFiuQe"y`~؋#;C6(Jm+CzTeQy_S!8Om? -!K`}zn4m*J̈UPp@*>cW<(Fz= φ;4~DZ׽PTN"= b `n=n;Trݬ&__Y?m+t7^^̰o?ACQ}WJ|w٠3VbW}cozrEϣ8Y*=-rT0EBާuN@Z5N{yawf_ ]+> x'AXD o*7éc{"JzzOr]Yz$ھ1#6Y(j1Q&iFW:gUW?c6[([J`_i$Mzӛc["wHo]#}&?GVU:Hrٓ92ׁT@.Z ,as`U~o)UٖW`z:r@xiwX3'^ n(v a]HaN=8no3נ)~3^0rP^Mȕdl!#/3<!Kdf} 5[n00fdlY.De+{E*$[ KI95C?y.9lϽs.U(4c]} wޕ93b&wLvOr2yr^ت'*M[y2E_U[ߋ[C<])\RaƩ^\j-oMU&vl互Wͯ?+ٸq3 H=4\q߹gyeUDٯNpa/\X5d= %uWڸw/?(]Sw8E:{ʴ]Fn%u-]ꁺkcSr8j/M6͋;몬rÙ <ӯLwU&t&^Waύ2op!.SE5xJ\‚׮Y"WuMV.&g]u"s/sU Y,We'uML<2zu6~i]JϥDžܾm.lp|㪯;wM=."rqA5P8;\}s7>u mvl\1 ԅ7kˤ.2]΋eD WzxU2c,EC. 湪?֮yユ.&^f/ɹ Rm?,\x՘g)U0ge\اg%Ѓ^ﻈv i)/n٭GDhxnW{M>i{]lz?)hCⲮsŞ^7][= >ܯo[eiO\U^jgN_ru꽲.zˇ+J*{\彿Er {o~Lִ2v1mcؔ"'mbꐢϹw*ח..UK껯uzp86O>sѮ͠ uNtG |WsQޣBf/"{|\s.w'(bO"2h"݅?`/\T<}%re"2qq/|L2Zqy+x,c?&c'׼#d$/MƷ1UF)9En9n/9_|B2)dxO3e-3eLdGdz~+S(}!cSr]M~orn'8IBmL&o2Iq_VבVˈe.&%c^/uXLE_~Qf*27{\X5Of{Nv;e4qD3]%h7[2pm#e7+#^dɸ*ǰ W\*ϰ://d@ɹ8e,0yd#>j2+skbO/MFG{{o1{"7J6=ey/ǂ!x0 )rqf7]&s̰} }iYx|y֗/eoeӊ>ycYq1CPK d;d:S; 쓹ɣ1M%_\Kl \Ilẖo7Cffg1mGlYZl8S f'4N3AgaDbw×ڭgqח{m],DAXB>AL@|gX`:0E쯱KrG'b7yGM N{oa]w^7#@w ; [}N܅/!X9ACEL|no$.ILj^oib) 7w8;I}x_5>5*c e>ay,6Qo7Z?b˳|/Ky~7;iGld5G{s2j"ౢD* -&yC.@^wvѿ` 䑆2+5iw+fg}u~P&I\V9H=VBȰ*H)%{ȯ8>m吝{&Ʀ#?[{!+Oyз`y]+YA$nKg-$!NxR '*HkU'}B4]aӿaR1>LAg&Xd%`5BL n'G wƇы,aCm(~O2:'se[yYC&`:C |ޘ v^z$`siv%ԣӈ + CQoկ y)ˆ D.]Jl5xz;w9!EFO'[Ěbfwuj~By2G_+:GM>'j(} D͖Hk:e(y\mr%r˒tQcqPj4Qg?ƟJ렆 l]70ӥkEWZ׀7,;C3P$Pk"·%/v:jec|A )}S)95 @XGgо 4f?H}dPO5=`GCw2QﺆZ,ȵr0ӏrwOaTkba4y_Z13 OƞʔJӜ &AŊ3nG{ar#Լs/Ma٦7GC= "I F 65XJLVU# |f=mm c(}qKj--`Jpz}֘i?q1o}w559zS5 b*b0:`xQ!"F#N$R'@?9Y{ȏk=QˢEb:ӹaD ~ ;ihi/M="b P@Obˀo>|롎x\ ; ND^fP3 עCE-UKl]-8bxA}ZƵ7dN~P!}DsQ+K3W懍' Aq b%rjMZǡBr[ɦ@NAO|ó ]{LŦ{۰L N~`y Ƚf? ;r#V`o}/8j:;旨F`Tk͇c(_W泞<5_z&w^B]D*K89uQ|A=2IR}:# 㚃Aj^>?̰y cOzvt~005p+yA–멫{ iG~5"cu.5ޠ@^Qwo,'-z]u(+bY}ⵃԺ(PaVu<OU Z2[hnl8?G] Gzlg 6j\3b6ʰikà1uWu× l=;Ј[kK-h/yi>xt#W{ͽFSk޶^G.܃{.`8P3|hP j E|N3,h{xmї#ϢB!@18!5*5\0hO+C%aU1 ޡG>D?0 Go #Ӿ~= QuR>d܏|j6um ͳSWL>kú[;x#jH W>jqzǾi׀ 'џKԯؓtr/@ރz]KBo /͞O&Ƒ+Q#~n1AǠ3Đymӗ1`>5^ !VD_(|?XF [my  j`y q,4<#*Odc9_m=`/ghJ _͋>=8{fػ@=܍]Myv upPyl]ڷ0}O޷l38eT`@z0PvQ(+pչAY={>EWoj_XN\_͡OC'zqO_ Qh-a_{sje-'Ws5j,s<|ҽ &}i > ӨاZ/7p?%jyFO{w `X=06?Q/n5g7a^5G]5CE/x5?Mw r [{$]r;b'Gݯ}ig A(΅8 r$֐yB_Jq~>P} V=]=Dzy=/GCގ okM>Gz^1\ڤwךtп|YkhoQKa/2*UҩOŐTe L-:Xun"\ xHj,ӕq2^gW

H/v?GPQs>xͦgGqdC%aw!ZQ<>2`GuoˑޛiZ;< 倭z5Zs<~kPqҹKymϴ\CK_3\goVb,Bo1ꐗÔoȁߐ6t^#aq>34[mq#҇Ow:"g#u '~S^~`rynՓ^O[Hq}} Ey>v#' ~ v!&C]0@]ĨNʾw^qԘ jK\gɫO>38=}GrӤ'ߚCSu.0udހi> rH0>j oT7 A{:!g 2KR'CIw6u |<@>أ:/M^73Y||OOK\!ޤ,wx>E| /"XL A6Cx׽OiYuϬc;yV! .)C-#ϔ}i%T=΁ 5GIʉl_#߈o#H|!l1}RCkG-: nn;vnR}.72F+a<5{[W8~ftM&? A-|Ѻ {ÈI=k +`Jkpy2'MWs zrj]wڱ^1ޑ'r7VA|M 'rLO6w+xB#V͐ &pM䥟7F~>c o~籞O<~9z](M_j O\y#]{>ȫWMyN ֒[Ƙ{O ߬^3 `0{)rMWuj /'a;2<IG݆:q1> ldypr~Rl5@) zF_1Xõ5& }niE1`ИݣQ6qKJr7oԬч&xk&p|gfiسDV)`(xQ{5OeƣoyGX\^9ޝ`i&z^(SW5|[QK_muط)1\{q(_\f8?1ǠgH2(~qVg.cj)8 '=.9@&!] RSo'I 5qȗ/5Ar$MHJY ~M2T?OET O =퉤a MM"m3SҳɖȾ:)#e5LW 6LJ9/)(-3#};t)hp S$1Qjjʠ!I-:>}߭ӭz&f&uHO;x3qU(tq Nvs)2RSEe p٘ζHJ뗙M'&zzzv-s(off$~߮+vÖ&Z&7t{ȼ9E˹wߩ&K!xoQqeJ!1+9|]r⠤y6d٩Q 9i7 )Nssh>4-qOLLcNF;Y@sg>Sܻo }(zwFzVX X߿s57$f&͐G<0P$ caret/data/tecator.RData0000644000176200001440000021002413153613153014637 0ustar liggesusers7zXZi"6!XK:])TW"nRʟX\qjnj-&!MKL$I- iM+3A9'fJz^ uwOhQ$'ĜM>11;Utu#)0&eQ&b}|Q[ ]e4t(m_57Z8{!_o@i0(d`xG6D[+?!tl_1>"8ږ2HWIuM.B_bp.L e\4I+XO٪=d @)?+XG.:u,R,>~Jh6KMOxAe(1wEUQba{f5j^V@  l儛"?TAH1u737`)ȧA#{JN-ʇ}Ɋ:CE4 8l%)~ҟÛI2g]< ny5# f<^;"cgkXwL=c~ػ&t" ՛n8ytP5Z1WOW!l,ƋZ"\^&1]."&ОҢ?5Ṫ|tT/rXLae<$+[IrW~8DRyҷI T/&uwMv8gM*`{+_<ǍytYUt7x׮cAx>ևuNywg}ē^]O.tvضewŞh?+HnoH1+KR{?GoM.lN,SF?_r8v-y+Jv@ +pT6咯_n UaB\#[\02Bꝁچ-pB;6)=eMR&Lz2m?RO䇡<W[' a2D<=%6oFPI @[|ƣJ_CBX#}վYr:?7,KRd^@Wcp?F`F)3[5Ͼ7ue8qv= qmݜ< 88WtǰI"̄@Vˊ'T|k_2V'orM*QHAYs.TrN{m\0p¨p3nm mh5}Q/>Ncz’CRGּ]#Wh"q"G=*>n__z̟L e0t>FKAzK =@ .{*op ۳M XV1'O604u̲cUbD k !jetꈋ:[;U׋F>VKR^;ܝEy"@I<驦 gE] Uoi)7 @;Ԡc˩r a;XuH0BFK|ֿłZ.A V^?Չ$;"0QvH^<P4o[y]4KoL &H}D-jſlNٖ?A]p$"\Ób;'kV¶ ~4 HnST^;BjnoXɀfzAN6;',Q(Z{̭Uѡ 'qmAM7Œ80 Nﴬ;K܇"O%ϜV/z3$iͨZnP" ֑_`g{cߣ [vb[,s"p~uF.{ͤN*p:p;IA |L\M<]:ᩡnbq3 ~8&# Lng87d#t'`;#W^Y*0PЏ=Bxz[YGhAcbiBsE 'wy<"2/ >!8ujob.4|m#^)*B /Br\P53Qq2IB c.85ixlo匙 `^ѽsDxvSnBτ ־N2u@؊u[] Ǩi][Ii{#fkTݚpԾgWz)3V`#,N =L P dB,~)Z|.6%/ 5lerIM oѡ$xOjl݋ 6lc1lY}j̒,"]Λ$3v =$)CT뮧3鯦N&PC״WpyJ-ƐθO^>'';n㭢&5ɕcKll|!վYWQfWI;gmY,3zhtVH~O +Ecl؝"aOʻ5uBEGZķ6=M~i|%!z_{ Uټ,GL(z?Art$0oP>'%:e1/]s(kʣu 89jX><ppcNhMwOut~aR,QS+Ee:9G kڛP"i%8/HyA[)r8sfC!| p<'fCԮ Z$)XPܫu Y?XpS{̏jeoWអ;PM:Lf=DXmT";:]NRC,lVN0} )0 "SMlN@kgΞ,\9ӗ*^"piЯ"FQ"'e^Zt:Ζ}" uVŘUz-ٕա͘#zxZgƱV}z}ɺ{y[iʹB?47]`! r4vvAb@}]LX Bt߃8ՍD9 GN[*:VuرN#\f7G5%4vxbX@{*& cz&(JPP~j_jPsZN!qUq53aVl5ÒR취g[&5¶554PDSu@3rʷ- Cf䚩^չC`)UqV>{}jK>pt9pMd1^Hu+hZԾ\SS/R۴K{y\Vh E 4&H_E&y^.pbf`nwH'ƪ_kF~-:szDb)of0 o &U7u蹯W9YTxRr0/xYm|NuF/㘓!e;$Y$IqNpi:*ƌaKbj d> ̰Ԙ-*j)̂6|<Ҥ(-%K c/פΝ׼MDt4R_e"!$R,g$_ r5;,;ѓS$1-Գi_lPr%JӨTy-𔬖o=T0j` {F<a\5^@ξne7EObb ==5)ӕBx m9AA Rr~̆Ix~cA)ZBm7E e _0PgK`<' |EOI*==8cSUmpY{/jäBdxt@,͜xO䤅z1 "ŸqfU񑻉U5F+Juͻ#?GE%7"2Kkl.#OIs)EBL)b5pR%#t6FN>;aXG]p̚ Y&8WόrT=+Wdʳ;\6Zii'q->nzWkrC̃rP÷pvj-vğ"У! Hv-Z . 4@=0១^91ob{CZӽpA{+k,Wp3}3dp5cn/aTPPJU_Jz)[2Ȝj9-BhJaoӰY[l!;f*\Rq6uI}CH'TW>N(sXmh/4Mޞ|]ԏ Ś7Eխu"QQJ3l3@W ,}j76W# u#(rwY`̘ O-(B*!y+{o*B "v~.[v~n`v:}+F%}|qW/~jq[?I+qdFO_5"ʻݑh+-f$'uhi\R+0tuQ?{Z1bgG+#)'iNj8Ů"q-To3ca7T*(\%PQlZK'ipG_6GV_/&dKlQ-t?p],o_huNꇁy;2.YrQ֧ܵ>o$T Iw/gmmIHbBkN-̒>lfr e!w|^n`W )jnk.k& ۽?qY7hi*nMn(cX9.M}hPXO16ʂNC>c=Pp:|7mt]C] (._ h!T7KT]쎋D*&S۹YUt['9%PK(HL$5ID4yq})-Ql-ZwlF)$tX @?z?.b9b^OKXݜ730 G)@bHdvzNttAZ }e.s Dz!Rc!'SЬcE"Y~O⥟OEOGAgq^{),4v_ڞ W㭝yC-!஠<﹥8*DX6;2F@V jygA=Pockhd2|4?W=5pKQ̂ZW7NJ0 #8p:"~؟B}x9#-ʅzΤR?U/""~&Ov g Yk7`&=fXg Ejr0Ι7Tܰsf+5vd kBX%y{Mr}"6DҌs=Y 2wyw.ΐ=v]98%xl VGδGSKXT:Vak A|={_3φfo,)o LfմBJSZU MY}2kË3|'ZFz?pqYt^uT3 N^g_Dqדff\\ y4_٭q!43^o;aGSL 0I 8?Z&Y{#zeҭ͏2܋rzҗoa=“E낶R6o}JFy8"^k g&sD~)Fsr[XWD2k  vHiK(Ţi}M(ba701i-2OןK^<DD٣t'bﴋ'5AZwL jf$N~V %` "`$J !UOj9ATv?URB| >\^8g4[KwݒE:_Ygt[۷mj'Ei_Dv5UK&5WYQ^@Fq޲j[[_1 ^9$1 |#% ȹMпE[]Ea[WB jAVg 3\M[1‰Dͤ ۠$v*ݚ&fTgV䝈b{W,Y, ޝ 48doS=JҺ\q/O:T`Vu-9?15͟u|:1Jnٍ t?`\, ϐQ fUQj "pg9=)dV i l,ľ竊oM3(7S27/Nj? :Y6c1r|Y$Ó&s [dn(#V/͂ ZP&ePe ka.nBi}#EGv >?NU: opliF-Og's `z|=PuVq-q:?$\ie)u_uUt*ZMyPޱB+QBv:b9 􄰶GCtzX,c.YUy8trŵ|@P0iƯݬ%RZum0ھ3 (FSS::݅{[^c0Rg#R3 FG{VF_&..PvÝ䶀{`Hޣ:}73mQxTisl`lT3 Aj؊wyDW@8;":1(kLwP4܉XbmJDfFD;ǸhipꚰAޗ/ϣQLb c ]2Bv wIɩrqNFIF]f&'W:Ǜp&,wN׍v:XAR乚EtIy#nb.$p xDªlMbTPƦ7OHҬ]W-CF\)_5j xG_}]hJ&`Ə=th^aGQCP]|,]>#EP.vE> 9I6w;NdSMzMN3C |ƨ0 3.bwo`q@aLJ43f@8;xIad[uM4ij[*Ym7I)MY(<9{wcP< xsnTypvsPHG5M+* rIeiOTK!\Չ΃dcck#{Txl|=4p~'1t,z:@?4+-yUvR?zX Тݺj6 ;Z[dG]0e&3wњs=yMCZ3 A_܈=~1?FGkU: yAF{1䵳KA k")31㾎Ƙ᝘?,|]l p{bmw#REr?1S"m5k%5i+BP0uzOzv0` +Y8R ~~<0NZi/F>w;~_m'/A8b(|E.BmJh2P_'2ְN'` )ئ.3`Ģ=:wРI82n B*q0(AڛCqb3׬!.[PBCGUB2/Q "rWh>GhC~-k_pέ&r{ƀ!1Z]j=)+`2)۬ bkRD+wxON$ NCh:xonPm>$ׯ7 ~j\.iJӣ)cN3E`gr^1ϏXbJUV.[4>m ;>q%&_980cMi)7@eZq Lsܲx 3 Psl'OԪFY2z l`:>dǦ>M BomܩUC&CtL{{&% k/Һ ն=EʕIYW`p[o(8+޾  oq≤ubUJ$T=bYxBɤg^-S2 >PFLXW;T/닉s{?gXЅB!Cd]wLq> ǖMQC P189o iRI9(39spڃ4X9f3ЧF_JrDƀ\wQNyLT I-`T,l,f\z>@&P`iX5ehY[=!DLC̏nl}}V<0ڥR`oruRUk)&jO82 4e~PZ?1GR$ps]0@|Ug+1j;wJJp@%WF=//eOX!yn$Cu]qQkb^ 3ٛZ1 QMwkц@OgVc{}J޺|zz&^q/[: ;&KK Y>%ٝc3j΁ bEfcmmuQ[3ROTs{cb3fE;(0da /dE\/ XFMf~PݣK9Vul$+JfB!](M$pCݎUThxWsp @R,e?O9aAUE+-?ܫ"bNed4I7zń.w".ZЦ{-{e2 _z.4_k(YjP'L(굍>4=*5/;bCVEnTJ z4Mn8t6%ssNy*Ϗt,9K@i7“%VzlK]GS {hw+24r2zPOPonUn1]v@ڡiɝR5~ee@>g+(IدJ E';I1t.lh*OXҥi΢e񝀆M=$)C|eY`[&1`D@ʎ:y% PV _rd-~'@Wxf('W~4X񲣔l!*H/9(7 skV5t" 뮯ʚ4H~ Vdw3^(.ۚr%s 5*l|fOΧB*A1S> _A3[Ip+Aje!@,0o0 F/. ̮ͥ̃r3!ե?{p>6lb;i9>;6ozGk5}6 _5j^] To73f|n4t:#~>ZUr17U/hY=6=SWK>/[FQ;K͂g$ΦnsAߙ $[m.,>ğ3,98'@a_]";CqNyB.T<"^f]>Tm|LeΏMk .3Xh7Cj;Kx̗'4HS]cOM]aLfRxE#8X;Ja̅}f1LKUN!N.؆q%37rdNqv]j@1=2?9GPH r_T=19mPv3FBs6}m1.I]s1+pVNw%bRshنn-FzL+g$sUoڒWpd>Ag{:T$`D|AߤGMs4 By XQ/HҎak--K-kyAFŻXoHeqj3$%W,s<˃:Kr4s8M-HW$v s远0:f}zcn[Lʤ4{v+qU7m֛ ,_nIDcOGw9+υ:CH܌- u|:g鐂C^K*0XIyU+|JOUU`:4a$C>yF;OxciKVFhu[ P[!M}Fȝȸfϒ/ |6oDX6xiѨ:䄖5B|3k6[pvZTf2r!nel3 Tt=Og}|p.ڐ(F bR+Gf8 gqZllx3f+Irk ^C^_u.TVȢtXɕx j×4&)!q.ꍐW6;}.;R;\Cy`T|m!v<DpR0Ca *㚁r\x%bxQ2ЛUBL/=[jqTv7>#w A:㦴. @-muKԣۛě4$b\A6y$)fLɻt" gJOF²T v9m>G*meL{>+H۞B)Zj)24]3- I~k`wUòӳ,=@*99cn|)/ i}—օq.]Mxnmՙi_7_;#s(g_My]5= HJzCrsk&wKXxФOc1b֡aYGnv;ꚃ YTXy|4Oy!I;slیg[pF !٫P盓-\#DMC^Xꌊt4;a z\*pPt&@ŲyI IOq&~83S+!Ļ "iׅ駸S.TO8&oO7ĪJMI]eh]grc)x#? ,4(NpIFfVG/sA¡SOP#{_G/;|Pp:+ti?n}˨W7re`PjVݫ \4a*n2>NZ~p<]gQ+<$(rՕ +*{0.Cρ[e<>U2)pd %<]x!5vϋAnooY,66c`]%Op%_6\7_h>J8|AGv[a"i`cT[؜5 jt6X${2 & ) D9noDr#AJB>$O+(B_-|U5wbcW{ޣGѹɃ5Jrwvȓfu<ޥ͂$2LXwZaz8SƛU.A2-@tq_4`p1sX.8 THsi}䂇G m3|-֞~ R˵-+x9eeشt[ c."B0mL4%fؖxElV_^ +kYk~)?qdB|wbw.Ml4SaX#mֺto鶉,B z vRl7AKR.DW?@$Kc+,3ǭԢ)}噥Ɇ6I6߼X_ T;usמ)`sltqл|M UlXgIjjѩ畳~I~6f3Uܯ,sV$;ۅkdr,+}fKWN?d)g~:x)<$B,)76Ξ^hmlbnPEgF8d)~0$Œ%7Q&Z1s sD:6;.NIO1I>oYBsLf3 OW fge.{MٿB<g/1"kݡ6P/bmSᑲC Lrc'h2+06R_֏$n%WPsЧm,d)zԍYU.8^5yJA1JDps1\֯lTܩE3 Ev{Cz6ƨ ,,4S;t#RϖxwF; l+p$%{b\R9ݣ%{!9 阑jiK9VױRmFDƋW0+ g3K5GcP++Y%7LOf8(<2waŁIy曳JVQSX#*|ժ -+ke>e' |MD:!`x V4mH[pf#~mm~yx-]$o jX"2싫ptj`?fa5(.L 6UJVڲIv,~=]J_q2OTW&ȩL)FҳSNGy'HF®Ĉ- r0r)eOv(~Cq2x 8if-u$gÞ$bŪ7Yh3y.j"b-]iapgTʖ03SFib$}ݴYOܮnn]Uc6uXjT/)hdG9>v' y]:ϮY{oR  lX;Az6eGݞ)~f~Qkۀ&T,;clY7LB5qf{A۾TU(9iW>k߈7*?xpOjh @,X$ٺ[JoC؄o~@_WޛvMU3DEIP;V`Lƒ-\n4yIP'ۚCA7w/A.y7%Wx4/_/'>$p0w [MtMtN q[ ⌆eB0y RK1LvM* "hx?e v;`çB'֓6 jϤ*-lYNS,KDk*WUN{t1%\[=@Jw:#ժKG8xOXSb@;8of6\ -qF`@$,Xk^\` # ⳚO gԌ^ԙ\(]/9e5z ֺ׮#RWi@'t:)ʸt+z?UKXjdeB_L]"^V: lUfUzwhrqtO?w.0j׃h JɐOHb::=s*e#xp+o+DzjHs- H AG8&WCmH:-] 7\눝=8gD͹zS~@z*H(#CE87 7Nu{ 㹄^݀\fx RmfrOhl=^ i k/i5(~jhF yG|0c/v4rs{4m*LD9-ÀycP#@`0I8p:yaf5w {"TBE*1݂yX3_,[,-+EߑXoW Btndԧ)so@}K%-hUC7=EQr-RdF^Q{Ƅ@79Ny J3\#̨EL:/WњxXF.;:H choJN\U ŪM%2hI5>ߪty^=ڦ+W6LA$n"[`3ؙpsDQu{!3hp=[Jõav+ .g2Vp/ue+~ZCrA9/ j[m `x>F ֔.ǢfI7jqp_j@#66>R"|?;󡂫xȋ\lw9U}d3A>y-\62xI u 5G̯\8mpF+NoP xan$5;VEGYxjxEtkKu4,*uK_>r]*:X]4;WKF-&&<؂;qXN{]חRmi*[NCX -2\o}|=\ ΏcH,znq>sߌ/~I.MϴT(y$tl]s%[B;wO O^ii&0 )ɟG*XIRnv $hq:LANm*ۼhHybTtN|t;y B_$[&tg(|Nd11fyI=긧w[^'.{Rf:idTI;z]ﮥ䍁 pf.]Ϙ]=O. .V巨6aT)-oh%֘Vygx%k?UBL @Ñ;c.ߘ):;˪Tk4፵W9CbYYkF#v?Vc[:R< 8Axu0da D߭tVUDqN%ABhA0NH ɽϨԎä4H~;M;a!S\|~o^A͆gۨ 9A"Kx;=  "t6oj7ɖ#I5Ѓu{ce898rDjKh!#l܃w8M.x@x\ GMq~>H[$UHk- LsIA@V#z0(Wt('crʩOŸ:RA3fUyXR:ҮAu7$>-`&Pv+DIAe(ha&lH!6S}SE2X&qޙdZBL9KP $k* VAM/%bRGZn>n$"{@3sdYY10F1I):V2W? #wD'}z)k47MU@ 4zֲ2ϧ\8noK1'4e}6SBOSh0fytҺXu[UjtxYzrFF <$O<몔PY(FV7_nfuOB K_<:`}ѝ׼}.lKjjZ~ϧuvF ] >WʻQbNUpE׆lZIroT(Hxޒ?D$`7iC?I6TO2m`L2'bb*1i&?nL~S"QN!y|F D jM,$~tt4䞈ɇ&?|oR}4y2˼o%XBolf#>'nTP[#$o=0}5okNEz4zQc4w?d*C<pB+3爥(ea%.;Rۄ,5a`0 g$&B/Û=?{$n3cX㽎u0埊Wsν&u?5'T:ApCn.f̥e,>"/=e LɆWIJ.Nv^haGC2 loR?,MSZIϡ)%gcAf!kǚXlɷZ 2^ H*ַ#;r>r(Y=e$?OV6&UAIV/ao3bxIG2CRܞC. gjZefK/$]r;Z6_SU܇qC]H`[92_uG5`IYpe!PDSuo}&=~`CItБË&*H^zU6 :nA" Yl0oL\*P0ɕt WhzCG)¸m] S9+SVqCLP(Ѥ6^=|tbr|}M-%AimJf`nf]n:%Eh8F]@)L;%K<&LGsx3ki'^!Ѓ&8x|'lfm BeBYFqA)8\=bZf$L0hza{CJGd=Ȍ{u%T5w3*6°o哣r2a6y~ݑJc.A;,x!?;"yaDal9|(CFmՒ"[㟷֝t-r-UWzЇd/wByI2.V*_!I9jtq*F"-C!f[)?X-GU-H?At p dM~p7+{̐ joo#uW}&%衧\627e'!2GLn(UBKwbp3Kr. k_ ei4m,cD(7ߑ\L+>tNm 2:c. 7XˇS頻uZ8-< mԜ[HC)qKޑn'Nӂf^߹:xB`?V-u.i' .m9}@J$\*HܓJyj2@)Ln+7NE_2T*ToLlF,)ɧf['r݌w+I o5F<^X}ծgˀ0i7 *,?{GyNɞR;5W`=|,դʫ&a^KTo^dG6ʨ919ۼ+KhrG-эF1]akw>q q&{`׈'WA?=m?^d&Bnj$ǪZ]Zj 8qfRKnOvh@Z$rWw/aAߴʙ;cضm3p_M.j@ v aA$$i%2Mi,(&yii)>X;>]ͰdhD?,ouyFZ&͒^ШQIU& '2&h^sȥ MY͌"4-Nd$0meڳX o C7z(p[`ls *-M#@A|r8F|XF5?4|<E/eq1gn{#a"{y MQqyKӑb[) ">BͩnL"E,?oQlKݥI:azPE ugI]/C<`ݩ8mh[k FCAQX[؛w":YU"2k ?\_Zy &CYe{O eQBAnF&,L|r,?90TFo݁&GZQ$)km }۱5!>KX ..dl&cP m (V![@]?عR!ˋvО katMO 7.+R3ly_iT ,SzT2KB!ha> 17.4PQ_TZg =9si$ő&d[^,6}, Z ?Ipٷ/0U?|W=;ø3{ 'n )R60MBBHAI 4~搡g5.kݻtw$! 'ry ϒN` ZJk>PNO<*UIdpݸe9{pyA ƽ42 UVaKT;άy}sn6bD., :M]\`-'w Jy Yuo\jTn:QT_e7~ VS$}Gc^Bz߫BrQ^S5)ҎyC?,F9-A"Xyʻldٳ$ݣm[y ν,AIAC>ڻѕ{zTFZ;lg.cEcC[TƼ(L Oy6(Z!AҰ#v`&fgzi{]|Ps.לLe{ym@:vSM 7ݧ!#u Ōu]9/+kr!FG2q85.Z2@*AxVo]ScXB>ex*<1!*Yj$5;}c$ IzfW x3o_fNKܰ~ɩrn_ t͒Q**'u:b'([6J޴lDUOX 2rT+#vREYz)g|V^'9ܓ] WyXwjBL&WC 4~n _{_OO/<@ږ{"5>wsb` 7h06HCh𿻚s^|Inp*i@*"0wӷRnT N[ \fZF fZ玔z_$œ)e`=%Hs9ZqJnی5c{Dz2*HNJUH+QKM#yI%  Et}GfS*!wƱٺYB~i΀͒j;A&{:4%S!g"UC _B;ԧ&I_s;`~3 ])ч )|Xt; TJF_$dө-ƪ)o9lHӴ} [5Z>]01ӗ 7MG9Oxr. V@ m5v-Q`_%T mBHPk. L} j]( ]QX:Ma(1Fqd>(Y55TI66_dU*hw{B:ET3Ԉe94TaZqk#IYxf_J-5J7M`X%/ naSsx(JeL/zr0 /x>,I }ĩЦNߕ~!N[snCɒXvqE7*" l"C&u+UqH1Nctv ب[6%8:1EakI ͠2 9[-VȨN=BF1^ZXD/ \YE6?KRBݫ K0eD G{ԏLήV0Uݲa& 2S-(n\j3\M|+p@Ou>QO+>ڈ.ye'*m)WjbB;łqH(%aMmZ8c:L?ŭ28RQ \Q"2ޏf -doۄ"cGb5ض-[|j8)m z"绶6/֯Pz}KU+̹mmԴ{ huN9ګCsנtgbMMgDwsYXA8;kz"1F۽ѳcYpf=Al%'Y>ڡ?<93ݰQkkݴ;&rǷ@߿|>}Qz5zKP5p" z Dvv`fķJt TǥvvW: ,cx{*Ln 11Yh o|%΂2hSh_Q}|:BjT_ˈzv -soho#ekLnpѾ8c d3}.l΄YHCUl23Ar^Os0sw=}1.Yٱp!f(H:cxJi;Yh<*!$4l%"L8![V1E;/\:d~xnW[B19nRF1A@%/_e_qm w:@&{kk#*U>¬(= Tih漂׻{![_f)} dpOW3'fDE+K(N[JA}fݦhTܬ;ɍ9qq9M昻dx|+!) Q8@x%ez![p]?*+Ɂ ,\VI9Õ&hNު͖GbR1r& lwKӱ.nS-g?ݔ."[^TXXd\}D~ClᳱCH3k?pI*2aenV;͵ +"x I Ec@ .QwkI4qI^ҕ;|z\CP0;Д Z>VGp2!qm!~޿#._"RgT*|RVٿT.zoNKitx_|}Ya".e*U"_cZ|I|,1 \h.??+kfp%?ȥWL?VԹ.Fe*O^[[׶e&gQAZtK bϒ&>ڿҁDs]z$yreۯTu'HҀŏ"QBa2*AaG0*Pw E0NWO5V>>')dB4s-IW?Z %)"!tcʣbNM@ѥt$d"*F`rᐳ]:eHn0]r,>z$]`, 35ao3kɒ T8!W+0~q&+-c{:Z_g}Y;J+vKzN .6jVX]VU"HQy8܇>Ll3 PbE U} ~D腝ekaAn_zUhwKzՓ(S$a`Mʇ]Z->MqdLHh8(ԷFR2dO>0=,9Ѐ Z;$zzYJ׊i ojtL4 `y8zjz2MjTMwbgtD!s8j/;.cRK 8yeҸ8Ӡ>Ka;hD,u0w̐@k e ƃ˅-Ƃ$ \r^JBsH;y]vYTA1^N3`̕&[$n!\0JB\ P4G`<7QD)<k_AI.M8M!Im.4. ĝ]~Er`-i#ĵp""_pʛ2F=tv&wUR N|Ռ?sGwZˉ,y1@`I/Ɔw6vh0zPv+PtzO VCz<ҩ_W jNh_AO/[p1zH'M P0imڧ:/ G%YA]&t1't&A q"{\B׀xqbX;gh Tj|GLH%qkU3;uGi:BB bn O`]C$[fb # &T4ǢL1U?abw|B]?_4[oy\`:|Gmo ӰEmǚ@籱} GBb80}ex[ͪ$8J-;!nǞ5(nGy $k?M8\c) 'nO>ko\#vT-,"SPlSe'4,_E<@%e+)(7[+% 'جҝ\VZ`3aҺny^Çs|9i$Fy^gVx\ (ݻaWt i׊n$UcXR݇_/Dž<^C̥f\Z=.֥pfXIʱNyf 9s^/ 6B1ځ!(GlY7: N._'qӥS9czejBO'ȧvcFS>9K?A (`0[X;nz+y_?;PEɩ‘U_i'ԗؠ%ު]~tFk3Ҥ#K B|R~8薸6> i?oL~!_KlрޥD].ZWo+Wk{M??-}ah̃;^)/HY\{@TG#]gB%w;q`yF,7!Dn>= : CU@z?D=Fj,uEFw&k+*nPV1bG:ށW޶ \d)Ykv}j[B^,#J=h9Ț v;tƍOQ04Aw|9'#`db$1UoWȋ g[W >CoheAqŚH8EQKESF(a>}fh),OնtO/"tf`DN*o}5%w'P"Dsi|\Ɲ`9Q]tF 3HEF}2G3o@ڣ=0ew!Wmv9~=tgvxBn`y\|σ?I{2* LĬBE4G*u?hvDŃ^#ZrFrVfp"V{]iU .ZvLpFuoJy4Ul9~GmG^(Sc߾JMcщ|aXQhD3+DpuKZ<0KNZo0(zk[?v2cݝ0G:ǿaVN6- Ev9Ayܥh0n5Ǚ]?XO '2w AI ϊڕ ?A*v@téƭ?(.Sӽ$'a!~)dD`sr@^d`JBsuDeW#&@*hcOm_bXN\U>V y=]) Vd):-mWrlm>7#BV|ϒNCfs% 3o`6^vfjGDřc 7Gbx;=<&E."*dࣆg,㯦O.=>]3B"WK@奎.mOpSM#= 'Wu.-qk!OtCPe…x1 [*F4(,`+hCx5^zl9S@]ۖ.-@eɂr ~6>i ?2L2UUkЁ/Ă%))X [Ơ`"A Bz@lIY6dkfL&<pF ijH*,f%OsP~pp=@bJЅ>Jz[Kx+-,+q֏@jJMFxI~B. q ]Gmo[SO`Moz~zAb6iD;5!1}[NgeɢdoçwHAxtִosފ:=G~(c_:U+"p765@0K&fA ؆@ӳN#y5nu$e<o@ 9h6ΐ p!WwޱzEXTb߯Uj6Loy*-5S4 iac%no)lF|va 9|Uzs'LD6j ?FvRL}{kМXņC4!>ɂ,zjKGrVkbDI1b ; {R ѦFݱ21/{x$fK/AV}mW07)1T )Ԫhk]߻^6cLSBM >M-\'d&Ӭ HϿ|܉e ^,*{+ㅵR WledThVuY:g! m1tk{zIhQ4z)':FfPV|XV{"V"F3? t8z'! ɲ0Q X*ySNa2 )emj ^7+ډ``9w{_@bB8NC/w({f2앷Wzrj:m(T+T8n_Mn?:9ڗZ߼$i)?n!0%@t2hh'X"(P"} x5\ 15!YCJLJrNlHƟky!?x :«VߞUYn*Uҡis!Hwh ]%N\PF$eAg^NfkDy^NQ9gcTb( ;jF߼z5 Gd|-~qݰn-n2ϓ XU ڧfDzQ!x6VOסs]G*~]r&M(lNՆgNJUkUÿS1!zS ^[B>N =SF@M7HdZ'b|Se(?^d(;ʟʫm1qE ]ju<HprN0T*))Xs HYm{Ąo_xVq;&4Z[{Ɩbd CYApQ3T9 Uf9QZkB=KT,_Z?ΩORޥ5?:dI(܍\Vg wW:ϐezΨ ;)8}2,ؙʬ_ 07XBpcLnJ{*Kq6/t #vXVtH˫9gfxFhz*KN:)$q1 2 n VNqLւE Up.^'26W-}n9%:IΣie(TT!@ZߧGcE3<d7#/~CD QsrZZY?iS+=r 0^Fa ,VOp-Lkd0[p.*M pX٥5Z:/tU&9ל7{[aB6BmB헦 F. N`D<7s};9el'y;4<JN fjE421 @Ghx?o*t]8KncdYxzmW&ʑK3L".@+e!KTJL( [Hugh3) v>1ȡNۂkH O#>_ 7?t _ZaޅF*kzxo&\H"v<ȶB;<>jYٓ 5˼xцS\ҌIs8[Lp"QYL~q'*zyOq=y垪vtZ"KL8N &j|eO]:+\C>-4~Q6%e6dp=;*Pcnk}𲵪FZ'dFA/8UbX&E z uzTDAk~2i"uBnTIX^)Dk*R)L4U(<]G`"k,(`' nw!zR2,k**B#J?eJ{X@uyIk5݂CO{0rl4gW[b XrVl5H[}c6r~9)vEf@&w˧ݪ˦CsԔ@޶SjPfȠġ5*ڔH`dZQslS6-JqXp}P> n;C9~5m$_x.X܍>&`4MW^Ў˅>7 S#_)E _"k%Zs# -%0flɕpX 4ƹʲi8duw6ck_%`|N+cnN>kx_rӲ~h_+*mB@ 7$/F>h:S!AŠZ5(j2 $vV%0QKh, DFYWL'x4TaGv="o$~J+8TkOXLj;fF9cb<@sT0^ F^|/*a׾0LB%W}"!񶻥`C?Je9X>&Mx:GE^@|MCED&ڳn띅S M#߮OX #=^&_V&ߙ v asI DI\ѺkU;L]Gw־^]|Od"5CjsFΝ}BcMHP&IWsn5\l|&"> ǂm &|OPWqLLD/Z?S bSWg$ bNЈG,ʣ ϓCCm^~ *D8#Lm5P꒾.nzaDסoq>J*"FDɀ J5GiV.Ѳ%+`c jCC;V>X)ߔAGZ"x@RlK+`:V|:>\P9'b믊=%(@Nā|Peq* #킫l8קdxLy`Gp't^)$ER@Q^X {^颫(=G&Ӯ6&~tv;{~#|]n͒MR0 %ܺ up֘e5<e|9@8}6:>( IdV";<6:ct,YCM.e]G;Tr# wTN̵bD*KTkgPõ:oR D22os1jPrܸ~^ygA$c/"~3m5-i2A!1VTYxO3{ u ;iO3'S{-MF87l%BZ |FLdgp$b .ks|'5~2;FNS :+wwxM?'C"%\θ[6r;[ǔ ?"XoG[Nk~!7/f   Wq y+ qJBmnZ}yC-6.>E Fݝ'|JA>^<Xi_,Usd&WL$CZGo;ȧ#]So2K]v\QjdiԵ[LqxFˀ8_J{Vdr17H t@tlU)Gl2Ż!:&ydf;d }4G brH]/(ia2 /EXo&9b_Yt. M\\6+n?koY&#ηURo]7,Of5|0q$̐m(6!ŅOvB/ߩ,3UnrĽo0i#^][Mdft ˊ k,~:-ݿD~G+iu_U(a,)@MKWnyx`' [K%}#1-!vL*9*{3Z䀄nu)TK@RUԃ2}2[&} fֻ:}ZB\-\X@^uףtn>ѯ&bZ[ C%*P?KQ.1E@qe3yErHM}Fb,uEԜȗs<%€:ܬ :j,-n>iTo0b^ld|GKG"p =fGBw!$jS%]/3N J@ˆцyHL>YƜ+>b [wA;s䢎q@Jo nne3b2▓[IӀm9 J >4Bx1BMV`Dw*=? ,޾U<|dkB6ma;met~L$mΖ]~wSQ@M ƨENJu.^Q(r>mIvQgFyD!: 5 %?k'w@ˆkk}fFn"ǻ"]KY4z'VQWb2%(ܩ zp)]p9"׳?4}TbgLL( NN=?sp9U:v̑.17p˸)O; ? syqZ:u7hzћM|Rǚ!yՏ`N6H#ӇcYu*H4cֹ9)1ݼT,t7f+<LMr3 镠h±g5g;q%l6>@{µTNx_h]h/N7A㲍>iHdKI+^B\{jft{7]};>:|~f @sFtT5 W^EsG q`qx&S~̀KOHbEUjKl%Z':wiEABtf= |NAlԄP0 }ttfl ѱ"g:9Gx 2+u հqgyʑ99 V: >2жl0DLx@ }P[+ˑ*3KHh81D#W6t",o9Ғy1@X8gn1t7j)$0?4? +:2}k ,FAnHDioj3+Уos ? A*|}Z.SQe]h![ \m`LɃ"YዃE +@E:h/gVz S9bIa<ќeV濊k_Pg}d m,}pys%.cXK5?i"xftvFb\MVLi^{BBt]Hh:ү 19mfb[ <͗?`+JJwquvLrRd\?[ 3Nגij`邕A{}t%$(=M]5)GPVS#]92[/vܫ} o(8oI†Wr#ͳs)@ ˗ùDկL lK]d0%ȔѨf_=#f Szhn1P L 6e v{[R,? hQ3Ψts1~XM}j.Q9p&^LiWg$̳.1C{S@Q9 &lT>%kH,笜,|iQ]ۆ[ɭ2oYvJq<@{(s.MGtԚ-avr-̾t%a+?}l[ >e% (XȀ܄W]> = 4\}LҘt4#ӟ9ը'"-Ncn8ҿ5~}St L\rFh"IGN7o.дgxx}Q[l_..uЄ@QCC e8u_M:ZG\\areCnYѭ58տ88VZ|AMJ}=;/=C_>mJ$($P ;R VdٕPLMeluQ"4S|{:p'Bf%3fq.Bq #":U'ҢXdӍභI8?Wn=Up+_@…Ut8\$FYa6#@W>; m7yu!8Nوay)s1kPŬD1e4svW8Lum ij\*ɡaRE mz yRTH{=0 m fC)w+@ 74Jmj>spDc>r%/@|Qp38:Q&eb 3f&Ňy8 WEFm af+'U4Q0E/s -YMhtna rI Q piJ"'bUu")er^Zˤ3)4_(RԹ5%6ѓιQdr<؟2L/%UFuUepJ$8Y=P!ñVG( WD qԕآiiMS*&jIyG?kxA8{Uպ~^daWX+kh=`/{4[ ˚ CS>eOpϠ)v^o{V&Br!"nHvBw̨hF6a;5UyfqoIUdx!vcL$,FsA-E.yl{ͤ ڨBu")/͟? x s- S:UBN`@eP.FOXAqVu BD[P}lETjH4؄|dR\P5ϧ*/`_J AOˠ}-p?vwQ+7&ኬuJ/`IRt cvǎZ$I?` J6(%Vlƍ i-w|ϰqWɫjG缴zQk 1_Ђ菪}:KYJ33UQf9]oToߤxWruYЯh$#D,eŷhX_ePQz*(>i֬vK)#.mm2E|yZ~ſ  "ک"?ss2y6jaaT%j*Zh=϶)k}v:skf#G \[1{K]61 YyxXySx'{* BIװPG.uhK vJ}u3t+<-];1R9>5])@Ss)SvvQF-` .p67ljɇMp,B|#6 s@ I:oyq^F@ z;6ac( Bfet4=b7 o)"*| .4&@][1Q5ht1;.h\ʋ&}q~ҒV *ǔ;wlQnZ)ǕN': I*F !xW&'7ɝ1JC~+v'MN@H<ԾKl{φn\8a$a"h\lWo۠ԀwTxNKވ 4W4^&ؖh󝋸ͳT 84xgΡ9<.6کS+|I-nPeX[#_Y|Sy :>8 ȏ[Z;;Hc=[b/ {@ɭUz]2Zs6r9ؿ1K.X顏qU\HGf9LޣC5NWށ'5Zk˻4hߔðW(0GŴNmd''R}sjj4iݖO%$e*oc4&GGLF,KېR ]fHFh}ªT{O{{ӾO71Xv(,٨HIgf o3`6*t%@-e֥ -tW%VgzC^Nb[!ߩ-*M.3b(-1OI‑R8Ʉ ZRQYFbK`IϰTu.(%rCJ:J4m\HTdp@}y:q\mOxNp_`WY?dK=rG;+nR ??tW3dqu3 DY^~劳hAy2].Dla<<"w_J{{|%_m9 `Omw]Z j"ǔM 7^g*db%FaD@_Z(nQ.#F)ͿyLӳA;ĽX'dW;|r3bL;5.? _,1؅&EJ_OqZtmzj1U([Z:S>&M э/. 6Ì@&9U=X?P67Z,#;6!Ez.Ԡ5T̚2H-PPC}REUk[k0|- +J~"R8@IguNrGfl2y5ug!4+<=М߸+~0'jsj,3KURy/P^|Q@h{ՔqCQғ&eKg~sO:=fZP^U)ϒ#Wۡ$d% !DeSX} O-T?/7MaV%g!ԢKc/M ]۟I_&kP%o>ֹr OݿiSJl.g[s`z9fW*♢8iA{dz(…l$i q)ːa4

@ztqR^bHBUdXѪ䷢]]E\Kp6Md-CeL!& {tZӣ//Y~ ?H.AIs::!?iA&QhxF5~ѣחgzO)2K 9K=Jr+<5kk2;ga[z|=iZ*8M,A՟z! s|Cv%@[87-+VJxfe#8:in!ptȁ% I WN(?֍{I G1ҳfj:*Q;ߕy>эBس%~A'=w oh G~?wXAqi-{";S b^zW|V0C #.`VYݽM/<~)ܩ2&GR3̩QIr;V6q;0pYfR'P*/@.*wL:֔7=jz!`U^sX뱆So<5NVt|7)Uz%}ЬOMx c-XP(y|/,SEȳݲR69'S ]wR?1zN`O^hqPc+{/ (Ф&gWh蓱~7npT2W[?.&Z G^gyJUjW҉ T{‰KbO' Lib4(@?YϙuK+5u с-4 BRu%*<xbV "#fʣGYb.p7r/;^"N|T`9s-*0f8ru+.552#3vT!R͟y0;d'p/yQ,?#2Crv; 6+=Vc*ӜG jJ{p fʠS jU3uyC4>EO @Tf}f}yzԲ)O?>/dBa.j' uZ|*cs Ui'S&^~uSr]zX69z[4pEzc܌9/2=KGNZ}hgdɇIg-T6Q:>]bo &Xlk*O9Q!x~\b>! v,a. N!.l@%S:Pͤ <4n~0 ;h}CXv@ =mȟC)@ܓhGŮYb7tދOYszYNzU B) wl P\7s6 FL:U_N:~$RPwܣy 52wŠS"@(u$8Qг !tMXl\ϘR t $ ,(d/:wʏv-YDHJK GhTTNdGsТG0z@n1QP]פBO$YAX'.vc%hDq<7{l-$Z kaRH[|{Z~$Nw `vSyeۻPH Z Y3 ɚ9S60mK m* Zf/\y{3Q=2++Ru&PrulFKrΘG~[ M-08s )߆ XՖsXt"=ӌTKd*$;]p ÕK]a}G5WU$p$r^܊%+[LӃ\fiQP7 a-einQ/M$v\ԻUeԔ ?Ue}+BKuQf݉TQ;PmQ% x]H0 3Ma2š(.} ߿4`? ]rvv"6O:?8|~lRzBQz}]*VUU[.)46ȔYjTӧfLާԸZr^%!DUzsS֮9X9{tiq}[5&?<_ZPE@PuΦ3o3yqi+MP ڢ`BL{c->Q.'ɿd|-]3yH~e-NJn{&ּ49ufN'>դğ~IΖpIh:`YSӢMy$z7AUi*;$@t>-f=_}PS )bϑ]m:EU #VF—^HpE ߖ]gϷ5N*fmvÒWg{h-$D3ݥwz,RXJc~.Ư6pQ]QB-L]4":?Z8JȒU_;E?Ƹt\-A/WT%A<6Rk/!lI9c˚K! }w3j|ycƃ+MLؤ@cPHCd,93l#iJ\R݃i? yHGVO/fL,cIi iiEry}{!JCXq0YLa"8N .z~Z0*ou2CiZp/A$ʤ @K?69w`e1( i #÷+7s.hùއqŗ"4̓D8p+nAud |{;Δ0@Thyj  E!r<^^[k~vo خ\ (-w?7hI{1/AEJ!;_̱&AqJ+A~cj6 XB7J.A*+Xw2t{YYȑWt{љVk4Pa/pb3.b Ƅ`+nPH8z=5mpqsR p}yVW@n0^D. WƐ B ثSCt9'iq6YdLZwËNӱ7q%8LתUƩnɓz T)Z<*0lk ev4Ne5ѿ*0w`kZIn<2?!KQȋ*<ܡռٍP8Б8E"9'Bgc0: ߥXh O߶ Xh-r Msk LEδ䯆h9dCx0rrv-\j=LX}ǔO"/[*L)lĪq\ȧJСMq Q gW Тv;ʙ7]M˅1o$֖! _q7VNkQH#':'gs,6S{$.@(U$NVN=.kJ۱/hh74egR@$y=kRS9E,k/bE^xNwn~SꙖS Ж8؞R`}[>O^7t\}Q˩Zͥrڸg~kÙգl̡"pڻ P9a<~aѭ |!*Z L{MS/4v;{Lqwf/ڝ=XGpmYl|%N$ȥL}6N>Df>X*qGϛ)H" '#b{Hg`P6?w$wP`ORd~vc$BkqxCzXPlExfL^pB:g`e^ҭC"v?,~}}= ~8H7O(&&\/R^9[#( ?`n'5"F155V^L{"s")&3[_l%VcqKlt5LI: BŅpJ! NF\::wŪ5kfT34ۛ&Tia?ƊY/<US|Af̤gE~OuSY`µ ]́$`Ŗ"#{! t&rj9h->jN*KD(o4[Z;dDxe\tHIFh#$rHkf%U RCQ+d)nsa/;1 %čP)MHyUz 9'2,f,8(r+PvW[_p  _ژhgImKlL|PGVVX2ǤȱBǤ-v9ve+5Y&0i=|Zk\XvARxסsj`dӁ f$2=;>'e膌yΏ'c/KHD `2s~oQtYq_FEu'ك y1NL UqTSQ!-N[ԅ_\`_h C&pN<;+|*bm0f_j/W4[T Ԏ{ |H\=I44a2&wNF\İIkBsn7B@#"ˋ0& ,:-*88ɣ~O~5,P "4g-N>g;])vō04 t"^!F39V9A݉]}Hʡu>տ+1r,T!gs]k,VXJy]B ġi]bHzq@C=[3'/ AR,AAC\j{P "zu0C=&.ZPV_ vmQ\ /<2w*lš"Y!Vt}AD ̞ 0k G%p(,0P$H3oXf_a[c;yu, 䑚JvS.d$I̟L1;/< c.@} u=jzVMlxUFArI.- t[[j(escFPٛDhJQ'+1%v+t&.Qr6T9C徂m673_vh94sv/F8_D iGf@2B*ZW X~]pF\#~->swĭlK+n䣱֞a5'l~Ӡ?&l4-~o_Гwiy} {ǶԡEbz؍E0?XfA[Ta4꫇7*=ÝR#u>XT {L#M8xjbVI=z㕿C 閾BkXšl=M5t[ VB,̖|!IdA3[$p# w9*q,y̐?ܐJ,e[^d(""]5nJɁǛ8Vt?If+_ADȍEiF \Zhs:¦Ux0eoNE4 ft8=>J4{H0~BB2]Dv:iy#a†-f3^ 5hL$-9ŅձFsJ.BF*}^C/\Iؕdl|!֩,behQVI'F]7D $?\}:;aec6)FO hq~a%\Xí*m0ϝ&wL$ B~O|0|6,]a%SPJZH!qEcڦS=7@ #%VC>^켺9Hړ3 {D6&O$(_kܶ$'&2Kx;ZjPx ش[aƚzj]*`d7!Σ*coy-k*ŭWd0`eoc߱MH'\ л}͵KσD,N$>֫'a-*PKj(sX?M;N _BoHXz6aRWrH]ogD\`R׏!Ô}!N )mFwU3StO(U<ߪ:*<\`;>QWuP*d}k!£tra|_gp!oJ+=DW0[^Y{2WYR\ yAT~9QPvgTʴ]kgv\ ˧3BH9 n U)B"=$gti~5c%;[l6Or7|@.);> %)aETS_ B kUD;wxvbfAso ⷇d_~ ~bvTx~'4vQ"(io3m͞I3#ߐCOO[p~m!SR}1H M7ۥ[ޢfjӯq[i'r-3PQg׽,Т'ѝ%a`>^gȣ]a)>~ $T#n֟S)CuH&MCK5pV G!f䓑g^ePB6Bf8SoLN ; 1Qjsf'>3]P\h7XV1[~pѩ{ Zy#feB?be?*|(ozQЙ؛l,WŒ}þ X}N$l\DG/ x#si\=S%61dӂ$$T[b0҂J-R16STmy4x"!&(\1|',r2fTԂFF~I~ ڈUrHɒQ] H2 ? @hv\,ґ'lpN H-98X{P]TK'(sPcnri;/<]UR_YK@ϻ =9ˣ iyXzgI.nE3poYAɸ{a >Vs2Zt9WZ2\xMS0@+J}PmeŁS2)/I9Jq\T, KeZ2*.m ^zstұ(91əG7[ vgws]3ƅBL@O\aw(V qDldۼ?ŪHJT ևU2e_F&,N%Q'#UtwZ[!\NE=+o: _}׮6gя>˅zf_W̹QԢ!F$B],]J*þπϹRkmpJOL_SS#Cl6K ki.۷D E}ݛdteRQ$+f00k*~e}$yr^JыߕV̻'o=UaQ޲@p)tʽAig["o MyЩݥc]iO+]To &wnB?|o3TrVl I 8 lv뀳)G6 lP|M}]@LTaUNQcGb%[@jT_联Ɵ}!L*70g&aNsz!BW=Mͅ29a6O~"כb:8OjŽh(o2UXrH8#"ofvB#b)hM}\kKAѣ5?$5dҮjj^qN:'tdt`hL›0.t,gZ-W'`hE)ڗjRyw Fۼ+| N&k9a2ApM #ca2C׺F;ֈ+D^p<-aL+7@G~+^H2嫕Bis- yYąHv8p(Cn. !KxDxϿ 9Q 挎oFVU!zhc2ũ:OV\iE X R9l Pm&랕4T* z ƍ_f?(9L@e9cʜSD2aiqϻieë#wzMM5ittkqƺcbar#U %}r*nMCXyO6Մk9DIcN(ut A)@3dhw7ӹurS0#}!"6~b7 D[,Ü2oӒQH0k8aX"ʓ£mڟُxXKZ\FƁA2L;GjMX6ĂLPgi.6)h ;Qe8һbx ,>H&3S6NPlitz恑kqrDΆ&jTG˂ 2a;F@g,dĉᐧM}gs tDRTw:)??l)^jм5~љM[xIz!GSm"PF;T@ߩU%Ш q3oBdMX)A`H[ֽ<劧aӢh=E򡥄YKǭuٛ/6Ue\{@Ze:L>1vMr)ص5I1>=xF3Xr(??r(z@Ą6m?.w-GkSts*Dtw7/ bq)eՇ'EC6_񜒴bG+ı=u#;pQLZV&`ۢ2݂lf܎CǷ q._'ǰ❎_<Wq3:ku(Ē tZJ 4^vics3 u y|C, )N:>}2gP҂_cp]}URaLs ? lkU[ F# L dz {"* #xD4SD+\%T!7)%k^-űgSܸN-]v  l x]5 7/F(UUodOe5H\)yYϨa/ @RRIG]A'Jj^x N8>D*njͣw[;ӣNmkVf߶m}`뗬mfȻE/y}j&>?~6@}ծ\)S1kRKkbihw$i $JFk((Gݫ8 8qXmo'儃gT&G-WWFop'rW&>kyZm"^Wi=Jk$5ɗM=|%30XJcbNv4܋i" Ɔw,Y[Η!5 3Uh@3͛zgbe8wuf4v#͓iL x{iʚRgإl$yZs}uJg΍~5탔X"N^Ħ#fΙ v{6,ޟDi\fuڏ=kc78%A?_4ݰ<[|7!% F9{I2kP}_Z ^Ƈ8#ymX(&(>=tY)b2'~iB'c5ޟB}n6ץOԉQ%Sux$n:P m*y+;qb{? g#[^y\YQ#N4*| SS -g 95w{pjG,$B6i}}j' ˛2q 4鷟A7B7J|ЊItYD|8Yi ۛ}i)h ]ZZEj!Ly|gq}*4LD}H'^#JtzUuG;D3ݣ҉*tɽq%֕>mh1vMe`'ytJQh2͉:Z /0ou;t(B/D+t gm8;2y776\.&:\A˯tQ}ey֛E+ Vpx')bا\% 5{lǑocK@P]V7e̶qLjvX+MBQXsLrvոуkD8)L^F;2zrʄ+Ȫ~!KVZk;!͸磹]©I -وp/=p`;8Ak01uDdS$kb0!3݈O"El0bw6D9Ŏ@4#NPGf:X\$mdXdsLV>s"\oqp%tPiT*Y:MjDs$<(V^Mhpɻ_[,N39Mˢ#?.X@m2RȺ&WB{{7xZ/b)U8P۸,*Sv Ar9tRU<4L] 8^Zݰl;NӞlFV`7ʹx>TsK|+NAJ{Fy5'DSno -8pIʼnk̶ErefCX0+”9y tҵ&[0K_nM4lDMB_GA{O҂6!1Z1F 3QHmH쇙n .`H8I1wc= ΪlnIVٞF]QB0&i7u)6eKT6o $*;` х,>oTnڑ!Da %C*n.5iT'+,(U wCr~cvs*<-$Yf;2>!NEF^ i!J&>N ۭN2$<:ʼ\>pۀ}vH,wfsA̱% -,1[cr͍0%v +}>׿uB$%qiU5*m5(;ҙ}PڵZ3̀|`ܐD6jbG@\d@,eӂ ꨾M3r _n('GX^ u/@E3@6la=O]a͍;y7D%N . @tMb;9 wgNKg$,:s7 N)ҋhY*J`| E)!a^Ty Dl"W_N^V053Q@yH".a0;+hҺ݄SI x\3Vs6.iͭn O+a0iɱ[j?7==G qEtP gFԧ`]29~cV5taEM ܓ.)\jVOq[8N<#~;TP碝+$3!4ӑqCAa?ľh}}!zq1w␲7 c2웢tv"duUIL36-ժPZ wmu |U~y,oFdI~yx>\PAY.";ҁ1尢첶qJ X j~178GO$F@n)9.>rŸtI`2N9N)kH?Rߞ-",ŀh:>W)TfJ(tCž(ŵXDHAF$TуF\oxU`3ݦ r{k+zB?~C:bͅ5ʆ> <*xʃH*ArFA$U5,[~VE6+5/`D>=e 9 H^hp?Wo]Fy<vy ρˠ|%ƑXzv+{fǼMDl*͏z`T,FRO) G.| n$p9 _7fo4[LU`f89KB*E&l.S'`H 4}Rɘ"1&uJYruQG*!ҽbtRy &= Nn[##cd(S{e.'eHA6 &` oR|9ݼt+c!7y{sD?**41{2ۄ >&@8 wM7e˷k|v=E:V❼[ǚH TL F|qAf.-n: n6Ȟo@+д?NŠ ̱0ir€{(3o"$9=?=fjt >qCݻ)Oa5a+",n_wǟ@NWkL?:Mۍ>ݯi`)4[xUL`_6~?a ?gf^BE)E((a$>oRxY.{JoS,~!mQ`SrL'\PHBkC&9dGo7g/хUv.3s "CU ~t'-е"QQd%z+M٧ ҄Fzʻydo}"ҧTȱ*ÓC i[Wxֆe}p&O ( l^޷y'dEC` *s;e~&-k#yIӰsb}9о!a!L 6I߰E50$S/ \A'6̽m&q@İ9M[2B0yq,ΐdu} |,w\_W"$Pd^huH*,!5d4y<%#2 u!cbI^\^Gb)Lgf #**䴍Kpo KOWQDG\(JrW-%:,-*Oʤ✌QB@ep@ C{ XTQQ y-NRgVM߄ 4ƪ kyL\wiMQ|x;)W8ﰺe<Ez!>- JLL饜YگEoT@oWXhޘ-?TG@4QoҝWvmnQ퍤iZWZ ܫZo?I/5,GoQGԬ\l?`vC6Dz;˯B}2I^{ >(: .uk Ӧ)XRoS!Z !CJ5s`mEq@/fG6CзRѬH%Ɖb!Eϻv0P#wCj ]̚_:sDmIbWt?6 KN;b~Ů|LxjjjZ>OZ>ғ(Z!k5R&6ޯ[Q {^O H}~{ (khW, V{jƈx&3B w,xo-~U6@X Laܶ[2䖝,_~ ; e&ʗ@\J!~iSBsbēh#j`GlBgx+Eh7[s<ࣆ9 yI @SEGdu X-0|%iݲk3w(&?ߒvA2DXTdw)vTm#>k;wh ,1| u}YOQT+WʐF۬ l#s^?\D/67)B& 6SagoprȅӞǐLEY1 bɯ;m %&v 4iČF'w,D%WتU!N*8}psU+Hr"=57خiv0E*"6#{ ]KF!4{S@Lo^4ڵZ|Ң8 !4aoQ{TM\j^P=LHPhw[SQ?1,,3$([-cD*֬5IEjmO7 fԂTwΰW&,[sqwQYE~F^zu0|Z{|H.x3B;nLbwJLﴖ\` $\d"ΡnB043d)93h,̼1Gnu_K]sk!{@F-Qr&xL.ĶMjlӄx7P`'\/"`A“E)@R+iCt$W4_g=,wӈ0EPEWnJ SvNvEFÄKˋ\ww P#J+ufa Q9vQzJ,("# bv ͵P'~x | >0 YZcaret/data/cars.RData0000644000176200001440000001665413153613153014143 0ustar liggesusers]|TUT)RD( $)B(!!h 4EE]m\W,(-ɤL2%J:]a _7qٙLI&;ͻss}ϐ;tB-;Vٺ%h}CDxZ!Z]puU.qO+9Bꕲ7CbRlOEΧ~i_ZďRon!9R9RߔQ?H#7#-Z_ y`9oy{t!iWGGl9oa[Wr :A|9NΫa|tn%KGuGy_8E]U_ /j%YwЯϺH0QcVROYUߧ@ڗծlϙY\N^fGp\֣J; ~;1;!30dW|)q,8,*959_s{?}ZԿR5Ir25㳧s?ogLˆVHiߗuӿhRɳ#G~1LC=yucѯư$ߌYrl=yDڣ-Ӷ .LYg텁}o|txEd^"?2>l+\0<5Yg|zcl_,1KQ1GNۇrM/wsYȇäEx޷OΟ뾜|.DEHV":2rNbģ(iO4eW{ƙ]zeyOq[]}StG76Wj>g8'M=AgGܯ2M2yu9yØGNpK|N>qAK|.r'h)15zqeZ7 m!e_'$;)y>Ws^:O |&IfHɼV5ӆ=I|>r3Nb]hf|'9ɍz&nc~N|㒦>M2^ oCtO2hb.'{q=4otZ?${zWssrͫ}C֬3OkҿX?ho)6@Gr^.9ӏ[f"a}"k2.RӘ?c]>_Ү@aJRe|?U␴< +qea^ӭ!Ofݩ e}3ϧ$0dl2DzHtoC&F2h^nmƟ%^xe o̓ ߅Y?fWVDʍˤ];uk/yq\xhķh".ҮSy.Y֎Zcˋ?c~) J.Zމ灻6Jޖaq>[~Vn-!.eo^.W<:/L6uَ^| ^OO~,OSKNvuA/I[O<*_'xJyɔrM-{J~'e2~eM?5 pG{ֲm<8뵼[seRw5 ]4}Luv뺖q1v?KoxW9x*dy7yv鷼%N=ݤ^ϔv|^Hs'p>X>0Wԡyq;]X?%.;k+DY{H:#Y!3|eڟ޿_MO%_z3{W2Xhy$#]=$'daaLal N<e/<VcF.ysqHu 93̧LugwGk/aTzDԳ؝\2/WQ*o2Q]R p_K|z&y|q{TϮ9>Qxv4KG.W1m_?ڧMݣKۍ|M}~5Km֭1}y&aS55A7}WwϾz͸qV 4W_xp5x=%O?b ~:/T+w PvY:ҝ}N| 7S-ߩS$ 5z#*8KާvLe"?%yM9s|t^}uX:ꖦp#Q̷w̫I^6$S>zWo:Of=9Sݖޒ~ y.m1g~I'}S]'&'K>S:U=w 1f&L! /꣱ yE 1?1W=B̂%bB3h7cPlż 1|(D?ޟ  [`]{k>;b`ۊg'? ʡ*`oNS ]q+Q)􆮷.֕v/;C`r7|{h k&!GHz q͇x]$D ~_>.~*`{6#nO))Îp">;):G&o»^݅h%AЃzp)KWpw*l>GC`ó֘#< Ʒb/w%po!` }%孰q(|G.i@ ||Kzm{o7pѳ'0>ΏB?ByRX'=+ƭ_t_`|mt=cuŸ qGB,g9ڦ;#W@ 7Bb"c!-]ÿBl㼷 |xPvDi#>#1>?p!_D"WuUm[t~+laU84] fK!q3DD p<8vsȗ#.8~ (@79>EŰ #;/t~sX8 o?Ʈ@p|{Q2 ܈\ ϖbg8tD^ @SgqƋSp ۻa^p%4cG#c3r3K;سz!<^":*w ^I֊ް< :^ˎXFȗk$s7x 1h,&1>Ž;c4|y}p ,#=p??CO|s.Dθv~ XE`R{#N[|\]=Fޘ#7T26~I6GmGݑ;fo4b{ȕC\` m"FfF]x[ȭ];7p4c_mߧcn_:^9 ?-C~γ/ <#Ƚk0x~ f _wb |wbߐ3׋|;Q3e-rsd c!^=g3w^س[!GzFupz(U@(6؇-~Nн/btrC ͛ȷ3wA{.:)18 ,ǁSZְmtt+CLowot?؄ugq}=:_ a^#v)7 XA{@ ={7rh LV;]`%O%1 v5rTZ,TY{d6JʹaNĊg+tBwK{|4~ E l"\=x_ ND0oOw A,vo &"C))ԫG6 =s;G G/&gb .wNatjC  Q"l 1i7 <1s61> O\nr\x8wb]shkZ+ٸ1gMk[WMmp.5ťmhh.'gsU0qkc{Mⰾǹg]-8CW%.◥56{58:#`g.G:hWӽ ;DvQ|k20kknWuzgk>kQx[Yמ,o^]pfus}]\XUǓb>_]hIGgk<Ӛ,lZȼZ,0k7_6k:Zϒ8l>ZŚ^kkκXTK,绥-n/%;]]XR%j?{[ݼwGY|K6#ؚZW7Y_kW7֚mkMߖܵѭlgۖiT_sk5[5-fgtq%-\ݜbkk>5Z[Ö泴=<O-[۲{kz=ۃGOg\5YÞ1b[cKfi=kbKglm?K[[8؋%}5r,5 mҸǚmR_[Յ -;’쩮&֕.yhO[my -ii=qmWml3~5YR?񹥱ok-]a|dK?[%o.ٻx w G}踚kO_kxVmq8[϶zǥH㓆"+ f4gQrIſu+%\A.ӺKQĖ4LSAE7%ijl>+1R%P}Q$ ])k]8& 滦j18fҜĕ8\KiTDg7 /惚R{4lkҿ{o."ԇ(\VDEi8QrDJ%((yW"JD案3Emi/qj>tUq8 QDEN͹X4(qqw-)ҜeKjj_cǤ9\חAWȹgCk;sWÿQ*~]̲?4XpWC"V, c6k"ëF|M9:kЩj.|Dt<3>~͆U'ZnܮT^ caret/data/cox2.RData0000644000176200001440000045570013153613153014065 0ustar liggesusers7zXZi"6!XQ])TW"nRʟX\qjnj-' {۫xOid 6EGsm3 U&-n({xD-j Oq!"{a*%i$\o^|6;@8Tذ ~O>50N-PگiRSP2CyI?cd{ y7-Qѧΐ7wXY1*F΂75u4L̹\eѽ'^> l-{%`z`[Ѵxx)FyʎT}AbAI^+rcgGr Y/L1se(X?QEfޕն<5Bs/uO}J`PZ,]]*sr0bQ}/N箸ABlڟ3FJjg@ʃEiVF%ن t]a(wj .B %jɇ@k\FnT_vg傕ܞf):樹ZA{Z:Cȍ4փdeO` {INx, =Ce]qz售ؔS="Щsv JɦGp:^p$o[dkRCuu| 9M[ϘCZvJ )Y,x'AW%$VdѸzpfr(B3֖vxCP;Iڢ|t;DX˓i0L ´iIBvo1!T0Zfۦ]dN#%=<ؽocrj,t" TysvjL+qQ)+iuLPke&*wQ4-PKiZ6 D|"`elh8v)i0X\煨A@kҚ-t`i|2`Wχct,eu, 㼸O v+YԽwDLA$EU* b ꡒj ˡ>Z?–CMc}AKfa׫u@-U㶱E1`:LB1("YHB>X~TPvDb]R%³lG6RsXHA{݈YY$~dɿ{U,N:i v-sMDP\a/?Ա pIÚx?nZ❓6y7RZ=10Td $|9vئ 1gi[GME\:j\o:#d=cЁ ^=4 <{]$M'9흢_r݂jro!ߜj#y8P?P,h>B[vS=M)5* kW:)+Fb@kmӠ -t蚂v.3w⮼^E$-\T羒(fgoz<꣜S쮽-<񮚼u2Y*J_(`B4L_/А!T.=#g:J0 I6 `ӮK%43-ӝrǰH)gΒ;kȅ/hc5Rȅ[dvW.9<$‘.oen /;A$`;S!> -/\2GytU!Z"*^(0v/anQhbi^[>o&ݵQ=;""ھUy«7q-i+lb Un씳kxVޥyS NHsnژP%ZRy?dM=;oTLPGlr.SYYDRkKf_sn Q>6NyɅgzFPo4˘LђqQ>ғ#Im`hJX$vzVyVcyȀ܂zB@s{J\N.82Vx0|7'%mIfDEEINїg!]A$ԛTAp.|+x8Yl^krp)0D쾷F#sW+\e bJLxILdžC؛1>Ms) PHd FN>!ؙeQܷ }~:g:vXjF_b^f-) wx)[1?Fcn+0i ܎aojʠ1[<="g?QV;'R56Nxe5h8rC2sZoV R-ävwZi;y\ H>2.SH75,!pT{!Pjvm: uDkXAkca s,=w݋-3F- k*"r:BI$kSL-;Յwˤ_,[]Oz = 5^7 "5P򻞈IS%lN-!E  MGN_Z'ڦɗFb7 Cf8p7HM޹`-m>nwqa; +lۤSԋYf`x9(t}k4S؈N}`mDniܗ;rJVvT%UhvDpV4?R X\scv,x=s b-0)7C/@T<)(r z+zI #0 :F#9N@-ڒMg!G8Cl$'e$oPU|6jNƋM~`*>|v!33sP?Oo㣧B)ǓdaL?P3ẁ+'*G督r^PkLW! 8w/ Olb;|st[R#sm'&'qڐ:8mA[J~`/U#5z& ݛ EŲ}.NQ`@pK)9~Fl8\\*T=6 ۙ^y}_ ar>SUuH GawZܡ3b@==ia꧶,2v ߧ|r!?~u*X8p.tb>y決.r.)&\HgBW=WO9N Fy3}^P3_k'+):b?osZD`/س5hFݦתeW'f3Gb XhYJ[TttV&(PD3x1˨AbH{ic6tU_Tp]`~Ram".lDO2|c{U~TК@ 6)T;}N?|Ь &$?~9m"s!11mF Xʻy.HR|_Wy&V}^r~?H-~S|X =ݪ5I2OsMq P3/U-f>WNjBUcu";wgb0_IpF_sItz1[TA ΀%δ ׹pG(v a͓:-ܽa?D= fMd˱32aЅ' ǿK @wv_";wS{|ׇx G[T7d!'c76Jgh 2%PK68Y395dv)p"b/GB"".Sfac[`_eDaÈ" +۽U-nٽ@R v_[XUnv~BDt.j5~݁N^j ah5:Gx=YFug3G{Πn̲DnjJCK4{gX}iN96N^Rq  f_Aؖ'ONEܗ_܉d llEYlWk@<~dȗ_Ռ*`kHڮ7'dMX}mm̧=:T>eqТmܱH6\-ڄjŀ\2K:P[G^Ws=<<8c3].2\s$7y%'bL92_8 5~敩p~E Rl0booYݤC荓{Y]LZıj2R%yy "Ug;=3ArqҌVz$N{jf=Y.  |蒚\ek qδ`=y S!82=*W_~ u*L ޕ{EA%Xt NŘ.]RHbps`ؽi@`&/}Ǎ3lj+(ri }=ɒN{;q{ >hh\rDR*3[.ڒ>mR^ 4u礜% u( Po~&lB]'OUaS/^j9DEi`RԈK!GI:{yeU*:HL&[H}evaCb]|!|8jww+! /Fl,gudPֳMPNuaןYzpz'`8qbm{i2WE|kW )/nR5AໝȜlft︒5BHk^9iYy>4)kA n= I0uZHû3qO'I)4_.,8297)|Qּ9J[;Mka 7|7[1 "2v gY؊BWf#o&G][5P1EԛM'V-&OAfXe*ӥZ=Fl>l#ߺ#3hEh?Tz_#تI!·y${X2M&3%km@J9ɺk=۶՘rz6ٝ,I$ [xAK(|< zYKQn [}G#gZ( e3_V&ìϥ5V3]*܀b  wKQѨX9]~5XhBL1jiՠsIFe uTJtX">_~cnyETNR&\ L<[#W!C= QBo\PӔzs}Âû5?wgr˩ڴ)RVߒe1쳱-q)l*_Ç\pJK!})AH76\8 cjx!`?^jCڼ,)s LIyr uVwjhUrQ9Y׶UcVmVV=m6˟ƌVuoLJN 8RMH}f58rEWVh7yR.ˈV7Sbu9C8Q1=Hv6m ȉCɄ^Kї2ۘ1l}orOFP]J}ݳӼ+16zcRmɱta'Cv-m>= k)vlLKI(MEv;$l/`gn{CKlv* Bğ.,B)xR ݊ rҊqb 5]@ m*(i1 ;vf@&ΤLJBS# Jen9jp>VXvVu[P* uG1P{FuVJi_8!ڪ E^3ѝf!#+wR(Ԃ( GBK[aMZ/RḼG Tts] 7vp:)d "*FnEcWMPg>t #!6etk΃ԧW0n" "JӀz'Sh1W) Bj4L6[o|ʺv9ۄ61l |w+%.Y,۲ۆhDj9B@޼/^%Tr/ʹA%:R"K.ù>-'05@־0AZF6:m{a~4W?V5=wcj_E襞 _~Ha}%bWak$#MvVvl΃W.GA󩎅c>5M tWM Ǡqc߅'=2LK7īatl\pH'h:ܱ%i }?XPS0q:(iD 8[P޸Z@f/  U;s6=x28M/B*Iv)x~p^S^LkUH93n;rFxFi)Ǭ `2 ib{VlD/ @#s؀bitԼwz7ۮSt!3?9N-/a,lbsv; m0n^*V9\[`qU>D:F#ME~&MB*\1lV8F9bd RɷfH ;bFˢ1gT^Ő!qgRpFupC;D5uD|VfUsi-.]3pKСtVc&-%!&?(D8B:O_sX?,i`7E9oC:$6m wMoD{IC5Ki'Dth8=wcXuo'=ԒvӔs/   iu &&9ƺ=`f7;xS܌{bކy@jݿJYM*k ;3G0ޫ(bD!zo 26ULVMP;yIO~#e{,Π]'m%"JxY> Ryi<( 42Kإgn:\(eJ^Z q} 3<,nJYS絒H˶yz2S%Is)C!dXǬ1:]x(%WKNhT:/`pG?rf""`&}+-bh= ra7![B3 |)-yVC=o'9z"ȇUџQNsP޽|uHPdIGyR zͶ{jctА31aZKGR[_ o*>$mV,TEu 5\IEiof3܅m%bCs%w?zqփі)86Ƚdnzʘ6XamzFe+PۇxpC ]@寐g ߳( ';*fH C;ռS$9>yG~{-Z`X<G0yn%z);7렎ᖥN>RP#_)! (Dz-cv)֭mM.lΎSJK#q؟Q@AeW t9 O!*/Vx.`KͲhْxyk5{1|:ƤO͵lq~XءR}k2dLam϶;NXf|3} ̼6559ЩB.i^1e=*YQ&r1@g*Ŧ=}_f 3V=F01>Pc5@N*wul^Ia)`'%TV;[($$y um7JC//uȚ,[ۆ !aA b\{Oʻkv{z_-a~}0uq 'Ũ5-T̨ Z%#+zT']24A1Zex6gr>vHuʯ KIyƲ-lꘞ~\aNYp3j~ZP3wUC h-Q!FjNz-]r5MmNbʻkS8̘̻t~)TNޔ"+H0Smˏ!p/.g_KM(En,Vl8 ۬QņB⩧6NubnW} 3X#>!ĺR/:\UhUA9N;#dWOX?I`8T,8_YU-oupVL OcPE>{nޱCtR[^ U}?пm%MUt58228rCr=ݵZWLbU3@~xkv LkE0@p!`7#6O6)&as)~>d?NrF;.T%dP5Pr =ڪA]CM(Ppz ~T[9=K3B?_=V bcY;~!';uW7 r =ɑ; ;񕮎Yonr 5ċ֥9d80KW5җCU>иW4*l}~%YwXAOc'EkT@ Wrcn`!M짙`Osd"rEE.rŹ`^ܱbdbUHr&9H21[{H?iN1;xSl9B-C=nݢlc i#^4>-s(&ڴ;/σ()BU"Tn;dOS}|5Tjwtoz`a`?P(|{!e<⋯PknG38Kj"2x2I8~kzm!O(KKT,ݑ? _zlgK3ux 'YQ7202A)uΥm)~g&=mISk&i1ATg{@sV(y58qgP О^+rAyf p\hucȀwjvր ]]*Y+.e` p%rKDNGG{")~mXOZnOMݗg hN)VܫǗ/o,'QH / O]_6ɒfe{ף_8Bi#KDo"5-5Z kl [{ڎJ,C4aʤ w̭>T8N+ԤC/b)|ǟ6YQY4x>qM쇊h;2Z0Za.gV C}̐STyg^h^Є_łv̞7$ =Y]wY1mXp1Ӻ[x/7v*,xZup&S!iU֤K,(@ D874u~eL݌U}Յv\Lm⚠)4m я[= 65/K_+jr[ctwcRxl!I'WVSNo {'ՌFḀѢWx!xx{YB!}4$XrKcx3E;i?w/䪢OyegX$sz a5<&{+x8#L Z]Ć? >B|+ܥ۰ BQ%P8 ˥m8Bhpz] r4 hܣ{L ^30B(ȚQ“ ؒfՏ7R\a᳐5cpeT-Zgk~+0%F,3ZWDp&-B̏wBL =&TK{5L5Dʹ^ٌ63z"I9s$2r}ne>DxA.]ˀ~,q6`UY("-]`AVlmdTEFCdכhU8+dO&W &Lf*sώ^S?|y g # ԣQXqќ7B7',}c[PU.36% >V]Ӥ\nm !@@NZRɠK8jlʠ2f wo 0 +$ΌM҉a6UZkSpE=^o 쬙QZE3Ěy3B|\Ā}U.i3~AlS+J& .B`^~Լ4е«8\IWʺ9kZ˖-]\3 vO*:>qBpT|a5R`qˏ !"a /{ʜE󐁿׬TAԓLC4 Y$IE vA1vi"Ȇn9 0G.Fd.ުI^'9cU X0ف@8l idI?}dߺ)XAbDqz\ %A}=v UGb'2VI8 ʒs~'AȄ: 6"ƮrI[0~J{پDi@bavE , :~K1`Ҕ9Q_ZwHTR-wݩ6#lÒ_lBB4=Mu}"ыVSI1){"{04o;c_Q 5$Fs}-cRmaTԻ+TWA0I;bm:t(^lI7.=m 6gI~@~'dU"@?طOz -g+j fMvhDAi@mQgl@q'&9D<[٤Q Nx27P@cކJW# P@9êk 50]ب{۪H6LS yR7z1pbJnŵDѤIvC*Zu Zmil|6:Al!DQnZv1SkM ?*4$4:Ku>Y-O+ t+)>`'8:rw6bA٬X" ciؼTҶuEU$Ai1$p[-9Tw#e;c%'v%&0W1/|!3 ѕp1>a:n3k Talv"m]oueB0Ye#wE&c0qN٥$دFv ծ4bUO3H'^ϣ "ݛSJX"?J߈otEET&Z=plla!]Phe|90 \^8ʛϭ- [N4.4B!WY΃%"L鍫xVA"H~>-P: 0xi>Ή 0O~!o UQC>cW?ψ_Yx1_FLPƨtv184C@0$ 171لg x0sTkj'S=v:*,,cXgwC.ILEu["ڟrK*"K.R]qsfDCykј'HFdYZ_>N5^GSM rЪfl;MЎͲkQ qÏ` [L1!'ܓC-0 HvD"q-yZyi']dM(:/"XtC$&DM`۽=<7ٽe]ןmOjjZAOoU-b~(F4d"xwcپ('"X']6K}N8 0F1c0 cK:*g'@Rim= \{fGckFvJ'M4~Ip[5ȷkB,Xȳ"#"އGWVYT 1Zw)ɝBCԖiLʒYn:q4d!W/ #6+_2P_jXYyH] r)>@> q*31򊇜]xF2HUgo`7ٮfSьjc4>"Ѣ6 VE;G뗘 19&CZ FM}ݶmEy#_6ʐ{t>-W} ae Ooh9 /T0Դ=0p.Gi\ rs4=B3_L$+7X4&Na\v$p56Mn6Ve T-`)wt2M9@ӈ pi6(aCJ?jn;zpK j NK.UsMfyYX#+k]ܡ%N$珐֟kp2IފC"dcƧa{(]p%Q#_*$HbTgIdl] 5J Ѭ&A++Ű2v:qpH9>8t6wysjz/Xsc/foE/sI);LTC?w} &VL7 mHV\V?k,h[RAE@Y8ykeTT$)~ޞѐ>RvjZ(-s\2~c & wAۛ}7JoP֦JsþW}5/@$ApUʛUkjzbHh:{V-L n e@"׸cI<B&pZBd ]CBAEAKD}@wcK@!V:xvWiVrB_8k1 Z%H8L]fQB,()oGaHP$;,PTA,9 R ĽߗN͂`gxFY8̏l˄ ٫MĖߦh%-7KF*Q0MA6f]Sa2{Ao;G8ذA@bl޳!O-Ҡ0 F&KPbT?Evm0ØF)˕- ,0-<=+۩i`Yò༏ Q:܊+]8Β-"E !({*$C_! :y8+]^Q ^*2 \zQJ5>-4VykFAOhWϷz8inHeևeJ.O)vSXC%=RJm3n2;1$\x6'x"e *$[(bS%S,U&xYIU% !%K+=rOU*Sɻ4jGn,?r;<036K7 ׮fgأ)$*2iaf r1U@1zrZ*$<;NF8 8=O\lU,&S`$3j|} |ۗOL bL*Nxf*?pIPc@ie|tEd|Y L''CDX-N [هG֔wdS:@a;I`^7wn"pvcH+EE%[Zp_Ѽ;&1a}b[DAcx.4̚3櫐[.[jtve{]m\jYJFs驎NfF ȡ\c ; qzJ?y* #&j; ƲLc}tT_OAsff'a;(`"?t4ag~(?@OS.2=IVmfĘ0~Wԋ[UKӐYz w:# 6xN1>g _}=i6XfHU=fS1Srx$L6ܰmގ( L!|KD^^JV%yhQh;%60k`&.n%%kY@*K)4Xe($xtWs( Ɯu'HS3g`ĻoX- [< xkJ6׮cfɽVѬCQClR5>6zJԬwx&ȇJUiYPĨ[] nKG'# ,L9kOuX`2vZiA\?eb)EϷ[#Ý\?%qb/o6$V \“ עpml:᭣ Ej8^бׁ/6Epv,7N\OKLro03YZ/ ^ϧSeYe‹ҔG%8HY7Y}\O b!etFKܹEg^!vjۢb0>M&$CAB\A;?ǷYZHiۖ;Iӳhq0&we"3zHsqH̾':O@YN:y~9rL.?%Cy J1J5M8лqp`(r12Ehj{p aNɗUbJꮵ$ayeR͖ZĞTɆn$`/(VU;ăEK @w@6v>d8K"爇PGĖlu:npC[x9}=yNnoX_f re^3 Ώ~nB&r§İ !$'-BSily sr\ ~avF;H[ykw)eNb5 {U{C{)!ٳwvb~V-'pbJ@UnH" DW黎E<2P4j̴Q9Dp\,Ml.L=j3p_B̭1u{+f6>_=Y±"l/K9q~dńcVjcgc0Y>UrXK\}߉X^^~u(!LGzE I$njVZCr;mss" IlXt#=,v4iÄJgՕZ[oEȚnjNA&J G"nL7f}@GU.A;Xjb} ubi͛P@Bu뗥n{ ?gA<ɟ=hGC|KwQkx2PdKB iJX=6Oq9p#<,(Kʷc)m*C\_t!5"aDJ~Y*^`E퐰gW}+>:$}cw1nㇶ r'0FFy5nhZP 1y{ Kx3/ !HmYwNu"i{?:KFp򍶆㛊>ŮU|G M_yo_GQ+rJ"c9ؘrL⸮%pAl?at,~>R,+\R}Iьɏ)Lٜ.;S 97namN6SN 1X';~=:|%S5q_ J^+Lz<U^× ~$!eC*[9҃Jc$OZg, S.h&qKZ!di6nzt $u'QGBױ$26s٬ӳ{#4֤rB:_rhvxw- ^q-I EYuk)S$5cŠ\':fӴL#w,յr\1)d(7DKVfHQiP;h7ɟ\F}4#ev/hb IeA=5g87:KFG^/K ǨAeiy00xd(Pd9jй[ܞ&&Ň{jJ/ wHB}OιdA-LՒߑԢ!6B4& dW{N:;\Ȉ ^ΐȗ7y'<. geЩD K<ҎG$r:B}0 3PP$}k[*^+ЧT^Mg}m /Ĥdo.?vũd2Q7dMW`9rbxttiȴEbDߛnH>OH tt5vˮ-w=yէorH)`-'N*I4BFP `;ʯ,΄Po6f(ڑY-}䕫OH\ M>C_M -4Yr9:!njSVq}: rϟdb!fDJ-ۈ=3MԤ8#&t޳C*f^^X/C>Z$# jNǸ34>O2k I_r%7%i.FV!Pkzkm>KbtjPVwQ:"-JOe[KTGTAjnx~T[K2d]t3QzI`<_2N!# 7-*굄:;ܢ.0r={N%Uh8VNJf :i8wXqM'ͳMHm]r>̬2sCpwUQ slLYh ^2v1cwks9n/i/bV;2 $%Uv\^zKoN-axBeBj7[ $ gB%eF@Kme*T1 俒MXd|m|zk؊WVٯ{V اp ¡7۝Tm  IMLKfc<,V؆tB$Mn?gکe )K'0Z?_4-8Hyx=1amv'!9]`%;w!*oN {ا3m>P9S~ ݕl!b F& X|;D׺џbwVf;zש3֜b` ĭE!ȫXhDVWӀz5]t(xkרj zķmD69ZoHO/^UKIU足p,lk$kr|[~[(2q44,*#3M߾Esh۵(w\mNш|eUCH5'$4."L"JlQr^|{wbv*$3? =dDKTJgx_.0mRAWƵ qn>ɵf2*^+3$ša].Wr]Њ D:1*b}1"JD%+${CJKPЩyϓ.+tnM;fFw4 al5tu_ 92l(9mRy8ןgIOٜr ,3 yzFIamFB4)'%Z(2S7o]=8~y{ A|\V!v5|OWɄjs2h,tJ'gWqyk u:d鵉vmrHfy"6"e ET\`ߞ"K`uo~wYm@FI]Nmc}ͫl|/R_aݍcl$L7%XUҊZAȿ fl+|R`p&:z>7[ˤ?D׆{JU;qWtM׸πxغKl =I_nq?ޒϐWFݚA4>N Mяu7_g&Wۼ̥cwdO'Y⹃-N4لbm/ 7^Y4 h8FWff$t_V:,h7YT#msZ$9.u5Mt8,[6-JLWܟ'\jb6O#J7J~Esݎq4SQ|V 64G-}QXBy3*ĕKbwH32uGxE\B;otê&A$,dkE:~TÌpfT݇}L}_vЕ(h6P[%S j B6R1QE9?MZ,Ȭ՘mkmcMZrP.tFO6,;</@[DDhh hDI MRhܐ=+V-I+rnK a1)yn/L}E Qݏ؉jLgS$?0߭ ԺX/i>=9Xϙ$l+ : 3[2Y>@Cz?tY'Ԗ:A2W qUJ=!轃KXg\"ZJv|]o=`V%lrRHᓈmD%  +/MU 'h,٫Q4Vײ"7']4KM%x5AF[#ݦ(㠪֜㯚 YXm K%F5s@R%(#0TZ>۩H 0SY=@j{ ~s\0o!ϡIWsU:XQ5`AӦ2.>*'^Ϲ Kttx.;fIiC߫"6nk!ەUMIY;.9GU DulvqEAI{u*_/`NEat˜UZh5ִmb2#v"3t*x8H88fhU[ ߅$\JA"D,JaI<3H{C)R"Xk2&3WRÎ\#3 X4vx5sqb@iA29A}XJyګr.zW">c?EÕ|l{OFBM+m{Tێ_2]@RttOiOf\1^ Q6mtcG! &|6Z^a"jhAj*fumq H0BJY/2C˓KnqOzJvZ?qWsf7o2Ey"UκvѨ uá!OP[/0v TyO_t)7Ԃ(` E$Щ:QPg8BG: eC$[(T<(z6oGP;"4U=, |h~Jg> Sn*U#f*?)2}1m1Wt<^(15zr{/[<(6n5&Itahl:IIp;|Zcf8iC.S}sJ<qlnBțfPrs9e˶Dj$,ĺQU\t X#(Tp@tmkG}N:7:rCK$ OԦE~`C _^j$ "}m "UU 'X[dûehNànBc!_~4i~f{VjſXv|VW{&2đs $ߞNLOCh Rɹoz=~l\-,(j_}35?.q"fWSkѲwxM0zޏ~ϯzA(2%q(_ݪ6`$ ?Xy%fr P ?!ZOzZD0߃S;S@M]2|gk\^+(pY@672r3Jr$%%ʝIV>rv-YS^p%/K1|L|l#^``/h=|҂)IUm7WCŚ*GLKo p&Ե]ljF" oɉC { F`Z s9!KNw eCwʊ?`dW&"Bi3cSqڃk>;p%P vo1 Z[e.hXճQ {x\o2&hͲQ!|0KLjC|6*YNfg|⋐3u<61שjm`0ĮE ]@FjӚ7^\L&r5?QCyss4o.MMS]L ZIe-+:R"ѹٱ4Bȟ4g/"mhsp ,eH:=_Bq H2:6J+ /lߒ#̯F w5A?o#@DK@Nßdz1Ƭ\w$98:P0Q1c.<gš$ʂBw #">)-GofQ^^Le+NOd3Ur},6/--۔ܢۭ6\dyn jqKRe,SڣOs[IXt+sPaJc*f5o03_"oKHZp?xJ2oa\f5s?=FȺR8f߂#ZcŽ]FFԱGs,%؄B'o%lUe@LC{lG@2QsRw]fQR.xV 2gy6Np'+Y@Q`P4%tT#} dVu{R:Wݦl,@C9zp$~N,@Y,{2)2!lpG5j }Fwvuīܜ! /`G8)!*̈́5aC uQ5P6\A{#*6W Cvrx. J'pG\@PA W٬p.X f#a v!EW&yuᣡevB3eRAX`xF -z9_5?zCGUzjuTQ&e 9=E|DfOw\PV'257eL[·I+| F&F:Tv \@5v80AAZHP$},[hR:^şˤJ#49i$r\ø e,sy*?^8Է/la=|CbE)-O78HϨs 4QD D,qEΓE_ jE$#jE י|PCk(гX谜L$q?kcq/0Y;~]>0ͿJ]$09R( 9> L%EO(70l߻X]|?ȍT4)s>_ɦcVWJ?qrʊSBun{" PT$وH@Gc={z-,] ~K՚")]9YgSk49gB=#uM㉞S'?9(:ۚP>xjB?6^A@/lY7 Vm[M^, NuV9V]-,o#Gӳ_TI`|(KY)͞4* _v'"JgT+V8 H{0]_ 4Ju*j2_+GG;G3ƴl Z՗4~wܜj!%:L>+ 9ڨ/c Tc؎9O٦5=!Sݕf(eWÞX xۇRQړLJxT["v"g7:&2 ?F_w,ӚzU嶵fVdhvhxz݁Ǜv D割e9jN>a*d~<xGM*{Aw4sHY~5j"-dj;+Cul 4 Ys,n*l{xp?$*+||hgޏD>m2ؕl![P\^m "&8$jz~H"hNMl SG~yOb/%PZ7~vXNcޯH%VQ $WEZA`5x\Puc"w [FFx~&u8^H߇Ur҃(+b5F)bDoT5t-%c&{c%= ?vE6èd+}D lP^1 ٵ,Qu4a]^贒ysDZPZ*.dR,'|Jet*Sa4*-Y8!mJypC{3 ☲ TN@]9𑻕oc*z3ӀyR0֓hP o=9mxؒl#PDlB~*Ɩ'ErDL9ҁtd§,鸀vi /Ά̣bU[1Dܰ/F4=Ⱦ$|2َSm*y1wLl|pRJ,on~5|i$ K }PiAұ j*.q8 .k= ،A'Gԏޙd+& R҇4*+E1Ct5,aDw#;pppw 鶟[wI$>Zwv8g#)}-]I28C{lM's=͙'pG2Yþ5j!G*A G9){cW5:eK`.n%˺ "K_io;kuيN;TߨkB'0 ˖ɚrPΗϰC/1B95c%||g(I+ޘ6g(k^z& l=*Ҁb/SQ-**6aC 1NW߸BNth]+S{Ck)N]]][CDH=k!;pȜlsix5~i 7֗6bکJ}߻DH呝O“"d.dVu"1r ܗx̡u6|IݯT^zZL!TH~^4VɴCLGy3~*J!)| @N d l#?ދN ڇ2.$f_)w|M8&@n 9)(oҁh9[>*hup|J=~$9Q2[31խpY=2.h8)CD t}ZYo?P؂U>4ia2 d ᨔ*} (z3 KGGvRic0SD+ ?H qac=2œ8GC5aEסDǛ}{RF+zMպV$>9:{|x(90puy8'ÿ< Q>'Q & [fۖ1:%^F?ʋs4xK]CdَP8u؀GAJF3qҳgUF*T~kdw=]p*PcVbv[|) YdUkTx48ױܑx+ * o*&opB> n kK#XAHm%]"jɢ|e3֐5(S,Di f[SBi,NےB_y<>;$xdipu rLM h~K //8񲃄Kf7K޾ Z@N} $m(V.E܂ Ӽ&ȿB#a:/+}fg%J/ޯ'hc{ Uכ[)} kg5jدLE]!].HA\ϬM⧃Q(28&Co2*Ѱ{wR mli20']ʬ(5 p'ٯeCEo3l_kbih+1ӲۈP?oPՋ;_qFLY3CUeؓ|{}52_j ǸٜWN+W]>Z3*=J >o {yK~#$j WZ齚,J>wg0G82K4ߡr>1[!ђ7)Uӈ6:STD?דap U\(x# ,RXh!*.Wu!ZL@GiXh[u:vs}~R"cv]_+-WA es?^̕Z"~V*.ۋm2*NcN~@`o1Aӄ ҍ@ Ei}ZeĈv;͕ǹiOz, @$]2CSvmx?m`i2QYX[ .YHYؙ9@Μ6 !O%W2ilv-nUo^jMRF2.ݼPÜ6=Zl.w0YP 8L*rR҆$< "e\$r Z2.z?Ќ^""Umyn\rW%ơXeTB`">^Ч`p.scD DF.4 #{.dy;e1{ ?L$BC ۥQcl =O7 `>ᅱ` \$X H-& Mmd1VF 0y᧶p–,}Vg_Vu 狫#1D9ORe*{>Zha!.dguV jDd{#.(D͡t1i$o_:KZ{R.9|{h@&NTb& V0~xYߌk-iq)ILL6{Fb3ϿWH8J8^zKb AE5ʤP0H IAO<3$7;X7=ʪ4a1 jFm`ߢaTg}P&̄#?flL%+1rSNK;ݫ3nW[쐈GA)M}syker,RrʉPa>][m/Kۓ{P ѐcko`@1ZZ'iV? &$9?C q V+g'#hωw'8=O]l Rq:0`d>rli' ŻwfSCY'fƳ~lبn ##vO_emm>/C7;R8eH$Jf}!k"BV2bWDk/'oH-GC_ zq"H&+- S A՛vqk"ztg.HE AT;DV/Kd9{;E  ƊFjFsV2$<9Yh*dX nXr(kꉫ Z{b 4sX|{b'CO mQA_QF܍nnnٍL 휈&ys 'Iz}&~+( c;ly >u`> 8qR<˙-bhI:/e :|q L1 ᳹ciaFۺ ҼĪQ5纣%]r.:nC,V#C{FF2)'df:j=Qe 'HAVSiJP$9vp^,G^j{U96op(M -۷ɤ]g_\ZaTqtø% d(-!GؖιKNv.O5p1 $ؙ#N #yGumLXq;B/)L:Y_1EJ qq\f#E 6Cv/렾5g`%4+˼\kQ1-=~$=sA86y% nQV#$֝ RF,S\K{dH٘˴۰ׂ4"jCx& j$np:_SōtB/_#_=풻@$oz!@s1RI}7{q,9[̮߫iМ.֋a*@w9Xz"vh%ҕޡvP }S043尨'*"_Q.AzEM/0 _wg BCgp7=`G7BS)`j :J%\iN/]KdOS ղ2w m3"Z\L0g[ңAȻVk޾eZɄЗB׌՟p)#diAl82b!B("B[w?L/ڥcOݢk# lQgȆ㲆FK-Jp WDpB;~zA?8We2(ܘ&o֍{'vᐙ5ZLEQQ}a(-@hGEOU6'\b(n^$eڬ&" ` RIHMscT/5>R|~Qm=p6V)9bxaBRj !ߌ0ݲ~ I;eP@A]]RS0K?ox 7cV2FT|&[4g2uYbIt+E󑅳hNj7rFuM1ڜ9P /5eS~+)bߩm臖aFjs1d̩]uX P ݱqTΑì 82YcM=uSX& ]@*;. t唔Z]K*`lP@\P7(hJG!56 )aʬ4B=#[hFH"Qv4uxgdb\hgq7aau \Y;QH<}L !_wr#kX*'j]&>VF|d7cwח#-8%",(L-兆2rat;:.)`S޻gVno;g.H`.95֢3H*`|I1a*k$ >,^͕c*& 84 0 R(2o填4C$s^-:acυ@*E3eo@)V YPزQne'#HBN^< Z\䬜 űCmFXH\ǥpIC䇡ֈlAH&t~rcgkuCqjU>YJ K+˜ψ&즖IQU S!Und<&`>hiԩ)@e!]Ayj1[k ^[۫ A `ft!n ]yˬK-p U}!joPg5g'Z& 4IW&&x=Ah .0؅Nf)A8#6O1c8Zڙh S~OkDh¢9ckr(/l_ _ 3zL3'򾈷ЫBQȽ;Л~F䧅?_+} wlȞf.^<Oψ9Kqv[x7w W@@q+dZy:8 |Z\p=Wđ~_ܫހ2LPZcO䭁Cjc҄Ƶ"VȤdb04'&NjH-hMK#SJ,Lx'^.6phFО.gwgϢ6B +)Uχk~alxJ /S h @lP RNDpM|MٚUQb$}Aey7`k*`ڽC6s/5 `vHƹ QǬߨ{C GawFX' .ޫω՞S:jˁ@;qeH 6sFu@ U5|e<@Sz6ghN'aѽa/(wL%ifUMobxw/8h 6nC14eSe$54ِ^ }J#BL(h&/M2=j99i斒< cB0Q.rl ~_\ ey ?mjDy碲 l'i4A[## 9:$#/O\Kx_]ŔEr \zE->\Ӯke ux<̘bRvRo+UN>H֭"!P`P0$xI0M{&73+q(:O냬%N-iU)\{?^{ޅB;0p{E*+=<%i^"W?,2 .@$%+Űxe= Ȱ&$[+ X')m= O-^?;Ȍ '$WW銓0_Ҫ7j4ؾ#s^|plal5w;E&],FMJM.y?~N'b<"W S: ׆0 ˤ #HMcOk0.N[ *PUT:#t瞗o >>5𒁖vzu}*벿=5+gFQ 1:{ЖgU-qc6zFq4x*H s?f ݾ]B#z(i"k)`W-r Ϡ YCSʘmeR|K:}%ʫocI?ΛLoU߅>z#f}2VmkYjyBM,Asv.ȅ:"s{ҹT]InH|mN0;AV>m+]|c,E;fW]:Yp=ť`E^UM~ QTBrhvţ\B;P`&ԉ&F$@ls3(؄d\`m)u]piKv{?w {mߡFucr=pUP].Ck%Rc^lXғZ]|ip^fUĿvÂ0A'1;/BsXm/-PzN͊+ȫV˰Kml@G۽Qٕ'` 16S.s5RA#r34C@ gt]ݪJ ^3W8=3[_",j5ܣ}7IQ֒tIei]yJuxSKHk3(m`7*~٨CSI46u%3w'DQ+^?]!ËQ`i gDJ}UM~u7'wsrY o hGKPqhJ*%o y!@ .-`f4u"<ͽ&K4VuֹH77V#QV#[HnNq~[αdj6.Ź"o\P>zPy6'6 R4܊ꍀc?lyBi&+*E„!&ZCQO} Xnx~+~2LpZv~K-ܪg;T`ӕGނd!锷yB* Pf̩Qu;FSE]`n6 %&aE ̎2j:w}5J|~BgRYBw[ 6$黗 |KE8b,gȹw\vr)_2ClXҝxb0*rzv;Zkȫ* 6+f2}:z.=#[]saڶ>B) ^dm_N?M++oёDXY/c08 |0VɄRO ̆ Gkguj `wPGzJ8=wlVh<,]ns+o փژu35 ˃d.姿1V_D\Xnq|PxªP?scD8}>pAr!zmm?nDYZqAibʯ,xsϮdtu20Ko-'ZNesmΊn>.N0I'x]0e_'H l{p"Ʃr9QaJ[n  a>Μ) 1KʼnbH;ތ.4ɠX9ү.yҕKF5 jY%#ʈX^t۟Z6D6\OTn;J ۩t8)K}J\s 41܇H n"c?Ժ24 b e>iڡbD@6{h%@Ώ8"pO=}&2hp%mɌh"q"f]J3g1 O-d^'`\p:"j͑m ;>ODhxlS Qh\` OEGp |q;-rHY[&.% *gQd#޽#X5Yy9:Խz5>;zDZ vxWjZmis4_}!TI(?+CfEw!@e%RpN\4l>WNaF2 Vǚό0_M6$q."˹ ;ء_sIk u>^=֥ )Ă.e$hu$r6_=rLe5t1EOa0_A%m?iAߥ5ߑ t/P5O4=< 4[$D|-sI(87ZHɂtmAhx4O\I^s qOTzI'*[%"#f;NWebݐ% X7g- 1ȧ?̱;Z6^DʄezNwٔvBAbCpBGA);l.#T_~cW>CΑjp qB*8̒ Ul#0&+ StYRLx8<.cnj5_ުl co*dP,iW57vFFi 2U:-/[<-(t ylAmz!Q"B׼PYAmZ-cR3 hZZDE-@OJQA{l{.02BǸ޻;#|~c*:d~>Ϲ};Q,Y΄MT O+dٛ$F~<ւ2ys*D#>J CKnD eu>ٯ ~lҺ!ޥ6Cq2 Ļm.D.P Ey%ܐ˄\#@cm>,,G@%ayh4:D„<2l@7xbP| :l׊moG|UѧF  إՁK Reᝬk0ϗ|n'ڝ\Q~࠮docAyGm;mD:nlՌ$]aaendr.Ѕѧ&}|o? _C SVd`YζW~bnӧ`NK2OJQK3 )t`.##H 9xI"i Ͱ.Y>Y"b\H ld-7mtU v p6!(Ѿ~x** ߎ~N)?I Qسm7cHFXsqVKQP3ZjD#[EMU@A$G{ +T!Z>ox{#/|ÅFJB]S{Y'R*+W%`Zi ,q_Kua(׎mkC5F УY%|%Sav*ԳMT7W1$=bvD8\ǯZ}ZC]1mZ:G!:'"xbG?\8kkP\ݹ$*["GCw!XV[Ku+dNPsP$ӒV8'}}JLӳe>F1_"DaE@Eu/ C䄍?Px끫#jo!C&;a儮%lNO-KecH W< Ʈ<-X(sjrf:,fa Av(~$˩![m)@Ҋ`aJƟq$2s]qxK$6ͥNDYqS"R~˄`-d&&2vӢZ~ %`r[< ,ւ¦rmu p@l«5k goH"_9׫5oG zNLwsL ▛bωn p;؉7H\7!$D&pJY?]B@ 2hmcNlb=k`aĥ5PHbC`;\)l:,ɦzhJEgK%ٔK0ޖ~I]t)}բY؜,ͧB]3t߳N S0! ԇᚠ^+?OYϱzI bp7D-Gq&R!4޾ QeI#EPReSՔy3P9PЧD%?d= "ULGN˒'W74&\'Q4WY69GP& ;f/܃Q3X)CȆE}Bd|+C^*"{ TiH]̪fe*hZPQ  X]foocYL< }\0'V27Ew Slu ޒ9N%Qu+_gVeL+2ERJhBe rCda"`L8٫:2x;>OGe tV]9[rg`o0!DVk)+׺?lYql3޻@[V=Mg|c A^s,f@08a};d+Y];J51(Q~ A!w v)`pIj"'^bvu4뀻oQ:oXf*rF:iz<#KS~KcG;ЁϮ)Bik;X ^ӵU4W F׎H*3˼[kZH S0?s|#C''O v 6M`H=D& Mj#A7\Fgc6Ttq;gރ.yў#Q?'R'ײ2T%FЇh5\.!?ʱMza]49ߍ‡FZf4jg?vAׅJZ[bu?8(pW>󸝓;laDۚc]pյZst9 jHf$c] g%34% %-)'W1c] og5leL[ꑝNQln1.*'ߧfGPkAS(: Z#\r͌]Qu ?Ҥ"؁/VP;62h)`iT(yyQ Hmyʑ~orWN`(];q,`]>>c&iՈVfro͈>mqpg\ԠX7bNqz٨98o{1/UpS-~4dلq@.EZ/TI ۱mF6?n5/]Jv1DvSe{bȞ4Fkךwrd'ǣuq~#i?+2TbօfUN8̓8v7J{DK)dqoG*ʟv񝸕rAԙY 5QPH jg^XQ[PDgV%Ҫ L s!, XwGmHR߾ }Rj |/W/[VT^ZHTJ5|D*@\2ie{ kb^œłoy=0HD8t,>G=-щ/i\86-|'#_fFtji#6p:Qk!qF[R)ti֣c\VF\~nnYoBꚥe܋+ErUہn+3%yYݚDuh/[k #5\K-%rHiwi9(jk:=}H_^㏾ͩڣ8w T;abABA]8m4uĞ{[6v }R/2C7MHV4Tq H.>R{*wa0J=rJ̧%0reqYgGޫ; g HI"MPPQoPa#\3#7jy湉Ա&f!BO~0n+^z(#E8j)+b[KtbUU _GA-O5eoV yj-^e9[Kݹ-8 lڢ1'[pH~a1Umb^ж{jOT/`l|[њ Mm/|-DH;"X?ê'T80tRȇ%ie lQAC*l2b2d3;a xql&8JI"YAy}+z ~yzS s+'yWb1bywӇ{o",9Ù2Ii|{Ol> *IF^.z Yst륖 譨ĥH 8/VÂhi5p7a|@we _P\j*/M 0J~n^XC._^gUhG<j,WouTgֶm7퐑?,3)Q *:yCu)w똡CVqb1֧Vq0y.6_wϸ$x3>-p6(ZTtPЛgU,H:& j]6.T1 }L9 =E: RBĨ&wwSp@|{m V=VZ`04޶,|׭_}{_#1U{S5}zx=څU' \LԤ5a)+  |tz8o1I{=(5MQ<vQUw_2) f74!y OS86ߓOW:L0fA7]sxbh34 T5J L! j)O.tO:8q:䪾 NQY9kO&<:QS9o< 6l1]ϖqBx^EvsZ-[7mzHI^\߻mrĚ5*{&dP&h𫃼}ᒋX@!-yc D(w s@PAs0R\-1oe8'9=V:ŵjOV/f?YjBe+\hfWO@rmn.VLoe#hbC,mfxvAc8=#TJ!3ʱ{J5f_`~;@Yj n8a~S!\+MKoP3Pgw^9aH}_rkYFs@N=uEë~ Ѧ(J^=7D*+ q0l:O>fjmP5痓qDI^NH+Ft(p6|[IP?ל%+L ;7BU[o$xA ^ GQ!qZ=\NX6wL-Dw&{ Ԉ58V80i+w)v0tRb\)ˋ]xAެ-{7f(IݧK\(Cr#ᗳg ۮυC)+B["oO(ULM- h"2D;к6,\bU9ks\;Np&%v#™Av7M)@S0!Z-}g&` BE>^ u@ rz˷ 6XG.<-NYj1 JX| T!hZGzaf!X+Ӭ[c8dqt`spўɔRTCK(1x%d\B^yyf7¸]O@~*@"URWdXLً\9Ӝɀ_ x_ gR#CQ,C1Btzؾ]\\ <ُ"&` Re /RHH!\ytv~:ݽ5FJBՋ!Jbu|Oފ <댧V&(~0(.g:[Vѹnbl8"8!lkZJzEr%y15$AF8WwGꢶ(&ӤoקѓSΌ2+Z"@&?]22+*u%=mTevn7$KS7a٦CNJӫH oK15A 2_owO$&Sc\ŏ~ش?B} iPv'Ydf>m_뉍Kuf{xXXȚOu8z`A/h֊$enzY q>Y鷶ܵ~*F]D2HtXɤuN]&v(G;4ylSi6a\HlJe hQ \Py2C)W2^|`p(!Ӹe\?h Mu`V7P$1{FCM_12LIGGu(NtgI3N˾ya]"& &px  ABLVzz BʵdGI!TAД& 3zQH)ͣGg~gc;ƹ2o9-o'څ5$_%+Uꘃk ݎCH aFY=Vqb]G'$Os[w؋7UxdKHMu;qs* fc6+1{bA) 0UʳaNG9Q:wаJk~)c{r .yʥĸ$AJᆪy%N43T)*S_5K˦.R؆"xb:MgX>.}MɬF ZPPņn!OoM02V݌9l"]Wu,F%ٵ<`iEcmꕮ;smwW̪2 S94g\eYͩp`) Q7,Vc}@iߪ,t5'w$s7EwpT~[;oScY~3$ȁ㵭pM";{v5]a>;: ^CCzEWÁtb2vC!T-+Y]) X1Y],?q.Cq|i:\ox~nNϕo/J|V{f☃ Tϩ2FXpV(qH?z?Y"n:`,(mܕ()/c[4 *mlI4pSA}=,]|#bv'`DG7 :iVBnx*GrA[,' Tv4eÕwq%Dv"&Phny!{xd9Z0\dM~wrƑ5xߑ׀/jZm T>@=JEDNj|8^.mgh~,E 8p*HNIe%p3ȵ"m,>>^ g){T894D,+e}YlYHߛfH..oI c$8*[P\vѷ[deIz.gk#z j/Wu!H< ?=9 CDHEĄ{AyCfr:7흷2tfL@aM?jf&b7Ys_ Vu'+i26(-A^~mQ=AU.j $#ixy{B1!7"4Q4xRmXy"{;^CX+|8~2*T3t7JO6|@uxTֺ`GP"M>3-# Hڇ?ށҬ]J]Z%"[,猅ȴ8qFuE]b9I,h҂PZ:;SybS­D1CYFVRq 9 GiO1W{G6ekf=&9y=g"oXp\J%bIwKqs8NGꄗz`꾌8gt!tBNR1>Ua2 Rs(0H~RF/ڛԤd)3|fdރ5 2RD }fxqV3*ԫ#~Ra]Y qpsAW";RPG.eE0!V=*#%4,q2(Zc(S$[jP:A%t”ؘ/8P 0L63"np*f7R^j:G#8:2q^xVM+aK v*|$RNϠ4qD D1vf' '`Pi BPխO4f륎^!StГi(mMz^59ETС âX]pa>$Xc-VNl(W}۴6YJ.hlCa/&DImAm}jqĥS,f^N9ƪ7U#Uӣ[ O rK느ڳg%Ѹ7f]!+$C@mab\g<ujffҜS$9] ^c>bZ "(r-,&Iuz8I!%S>|dɦ+qZʙ@Bhi_n$y>A"9f5`dYn[BXycTLC̸).Uq}Վ ?r 3u^sBgFzhV"/[E#{T$ GM̛Y1&Ư !%K;'0c:4U*L@:ǽ|*fryhwkG~UvniLr6~rDd*g&'ܞ,IݺB:[~J^Xi abϰZ^I!G(ԋ5A𸞶su\) NXS`l?]4jiwKp~JdugJ"^ KWh0% %0`> __g ?F6j*[Nm',H@;ѨA- md5X" ;U^]FVY9A>. 9 op1itVJƆ(7ףpz{YgR.{ (]#g=֪z`s^-"D^cN^%+k*T<*hl_?CcYڕKA6(^n?`$vaїsft0:V}NOJ4_'MwvXĖ 6]|HTBJR}|A +АS7I5܈գ=5A#OR>@21ڽsv7 8Xs)>yfN=4wZ_WlE"_LU)17!~`Js`K3CT ܊X—\=EHoOX}`3coPFoM0Ͻxyy+}A2*Axݺ}ifyd%D)S&Y.on`,XOGDt^J[e~8"əlA^eB;~G`5_@M\fJOk+=(a?ABf{ꂀ:L>$=Dʼn]R:5hx!d8fw`YQ!FX92xK~>,m4 '5nT @ C&oNᯮIp r8! !(__.9*CȆ^ml^Ţ|س!N#J 4$yA>cwZUhc,Xb@ҳ>[<r 5Y?{n 4n|j9|ѷBT/=}w3j2iԶz%>hGWJMI淿$WXЫ` ʛ76{N^,ab!{tW"#F_lnڜX *TjhƱ}&$/qh-c {}ܻ YׅHw 嗺n%\M':>)CQ{)g~0!dǑ9p:9rI`kБ xxdhx&c &Iߕi4]`r&}?a':^϶hBT>1LF ;3C K3PO{+Iy{;H!N,YcohI\'YLs|tQs#M Jg/$heQI.iV?H;sw!s7(^ucL.UžEkb1'=ü@U/GΩT8>VuH軙o箒yN]>8LZ2z%#bqc^(-Uۅ*1g6J4Wѫ\݋7~ "%o %=~lOc|oi,@$s0` s-1g բ@flOKb\Hr egQ̣mˏi-:!jB*Hc naCx`KJ): ?NY!8[IjwŠV^ +y@{Z,?.bYps xߖ/lخ^y3R0?V_q/7%4ܘ՘>cO̰5ߩyަ)Q' ְLXW;4B_5Yx{eR);L*GCc$~|.ؕj>$]CxgC}"qaˮ!,]~Dae@^jTFVE SiX;{P* Sgj7uL_|@ҫqLS67;Qs"Q>@e0 =c>Q7ƣY/k3=g #Z!dSn P9k*SHc;|_DZ$q0$AӐM/]!fv 8! HWrdx>n @Q : m("!hpU8lFa[Aqb淏89Q0/J7-epJ[E 3|Ȼ2M{zח$ ]@MoJ Ng3N)+urng|ǿ ׼ʼGCN3k}]EFtB`Fxe9MC>w_"D*[Y?4krJ!/ p~+sZkؔF`i83TIMIṲ]fk z|^GAǼIk&4撉W"1Y߀@/L[|o+Ly`2R U(2oUocIPQQu1ltU5U\)gqϱ*9V`sяzv/cYkr`"+"ݶ#j<_p{HiEϗwwW^˒RrIڕcS*N &X5Xd^ M ̝3fhq %vhs6%x%vR+l3f$sL:Z_X(w- b)2;$0k~גvt~+_;~JRwMZ/{pͪD=)NydR]h1 a\:a{4e]=4c@G-J\j(gS mnk#}P`p1|%OLc@,fD@}ڄ'Ϙ* ICP̀G UORP,L%! =i3D?2|S "AP&GDТn’56ffq4ZE20h:fAXh^6B6٬y&b-xo$S&N{+%pXa:[+,ڠIrDպuEvgJq2{5 yA@ F<7]CYMn6O1вʌ@|9eQ/_%L'It:A7k9E;t IA[pq\ !_މ-5q .0hrNȫ|Q.Űz嘍.} Q*? ]D1JEos-uCչխWG-^Rm@ސ2*u'Ԑ0a2q\/`c L]s-]Xj/vR!eRJJSdœ+!IlvVw\JUc? Q0oyNC ݲs&N`f)+}g%f} m%bon5xxθa6)d/5Xg+ $O3B쀓N9}L{9*mNR iǵ5uqfV&? [=Uұ4o(5Mf>Efz\&bTh帛&ru7Lre*wF/aȠp?O\MD 15Dz!/xeꌙ>%P0&y{FyE(oE&b/ZRArD3ģh`P>ŕB0h4b&Ih yˡq4%\s|+y51b.W1qqYKs]f׎)i=:uq'? (q(uP=O’J(Pa;ŇnB9vBX6e{1Z|$U!~GعTDNwGG/h<#ւ2B CA1[IA } PS/Aң8%N9sNKyLhiha#o!~8,ߑmǪйf/EoO]aP`.9 :L[YҐ}ҿ#X3sۂuQFFO-ԪiĜdgg ?e5bIX|)1nғ7TḧjĐ-5vei[V٢` ^pߜ8͗kA1Vq<ʇкx S3>)ZcYQ~ B\OPDo(9c KPaBgA|5]@֒a0@++(2o "˾/̐k-ds=?T,STb3W#S3*`+=/k uG/'huyq\BN(5ܑ2mT-'-C r[('b=b!Hy;S[!'Bzq*]W: T0&O  Ui6Ekh*ւ2(ka񬨑ΚxI֕P-Bb@}1$pZp)He9"z~8CCupwM";͚g6n$3zaT>%UJiZ%Ǡ̧hD*sQOm_a0wn Hip.U  H? y%0 {RuvfGxt ^;g`a:zz&ױZ]*f6 BY()=U5D (|ҨVĜ4u>MJf5gQsVIx3q3͆M݃ fY~1 j m]ItiB% ;jrl)Kfc3 Tr76Xz̴rZ6>)$gk1ْ0@:݋6MCԍtw%RcвntXIZ I=SOreH]Sbӭ(%"pk`s;JQFnNAѸ##?zW$88&\HfA]k0˥n-YqQt2᤼0/XD:!qz¼*Zl6noqLQ{Pkаb}:X\7ʟ"YUvhK>>W.*]{ 5e/}((^a!?..CP`γS`u&eeGfo*^.~A抓7:x96|]RK6u` >9Kpmx=;3R,GX0%߾ikUkGWmf0LWBK@M^PZ4]-X6d⣺h".>G;EF 1w%^w)kV\'ve<2J#TXNIR]p" \!;4b*3+ k}3vO$EQWd*Q J`.5*O$a mE"_n F]vl]5u,$ ’}, R]X&5u*P-F'IMXE'Wag}tdgeAʮ8HKe\`I--mjb*ΰhMJ}r_,F #<z x8-)g_bܓBu޷H_KR`uEWM}kS]LSL_XuYq =,aE41=K5\.7'd6]@30u5tw\W{Xͫ6,AuUmsг|ڶG(Oi ;Ƀ/6kXbETv1ҍc[-VEQ-B11tߖK< Bُ![4G iR\9*`NAg;E%W(Ypz~YQu5|x Fe^-̷󽷐([ėqR֣4pf4T#Bqv rLc1=ox ٿoj/Xv5 nnm0n\`xK'7HT;#z3w)ZHq( X֙.}wnebB 4j!Vߋ⤏*$ư\zgG5J'++ڿKk!ڞDmbWFj>ŠIl*ktkd`h#bf%~|Jhȓ$~la,-~ gw=@ n[e!Np6>EdJ'k?،>+[CPA;]IH8ksFíòTcc _^ܹTSby݌+ B"INpMi^ G=#GR&403nXMiU^@/홉/A|zfvfdHOxIU)aRe}u;`E^q֛R b+FGӇ{Y ̈́<e<X2Xƈ\n҇PXԁV XUF׬Ez(łA f5Po-bOM!rc#ݽ: Oz3'[rY٥ma<%Q kq4 |i #M]rߞs:=__:=Eqr岌mWX6 ![1g؊̐O0H삓/Fϗ5hq2PtR빦IgfGŴ^{b;O`Sgʐ9PuT)mý+'b>Y"sBq*Ɔ(˫ cЦͣ o^ nJ!2o\<EilV7&? 57CWNiĢSS5) rykC1!’4B|!O.(gc6 ҆ÑL)egBY fq Rn5ENªt9ZEK s42^iT'WCAxb_wkÌ* U0Vƨ]2SCzG#u/ׂF $)of-ND_c4H`;C(*$iwH5p-uuN7A|'L-A!󂋯[N;EE!xH´A&d*.QT34˵8Cj+P䰳]ΪޤL=:ڕ1o_{tЋeTØ1Ӻ,0Ji^2c,ݖ)Bǀ/*LQ#Jx/|s]r-˫+n*h\ygD|+?m$ڋL0H8R_Yg)ӪMt 4~dzӌ ^ aqvvf!u/t|$"[3mÝ46RӼhfkt!G)Xd)I&h4|)G}eT5\F.yzpOQF 'jkt+~F6\ZG[oHԞcGNڵ9̶'B覀&'omKYa6ڽY^yvDY:+ԣc08 {\Ī򡳔5 G \'(%} ÀAVxh+^4E.b;`%i0ܵ+Wti#[#Vo\&*f{4J1w(kq:$ #VMS )QgBpZ2cv´R6KX*ţ"AFcZ'wDB\zMȕQx""y?r:h>ػj zvL֟sB_ISSM&thz'_@~3V\Xqz=t(73eUH.f'}0G:8 x~5c+ԡC2~1+3#ԔGK0" %.5\)bb+~jbσ6Nd7U{exXWd&ݔIġ:h5vze7C.Um&gE$\R%U^S4}[Isg;/d꼱RI56!c f|!%{> 42H9 ɰo(6P|%a ^_8ёE бn{ZL02x%%1[OE嵕Px)*:oDGHDw6-cG94,3}:Hd ZID3!Y*`Oꑬ77mQ_є]4sގEA"}UtysڟEzWCY;N&H=@xG*I%"LyU⍜?ӧwTFA]මDz;_dWFxB͌ܪ.N kiF֗mDW4:GK\n \peժ&( :ȷ/"o5!BR%vn֞2ɪsH";`/0PR7G+U`($.g% QO=MW,{Ž4AϲۣX&*Lʔͥg:哻״օ"o=~Xҽ:''3O9e2,#S`m|::ɜҒFe7íZ>cL_. ̚ !i P'R7 u[918b/U#LD AGe߹İAkuQLb$ɌE rɂE)󌢱_Ӕ&/[`)RT JWO*:-S'{;Ը5f0F l)٢R4b e;;#E *T:Y]h0esxddwm:Sa NՂI7b JFޠU'VkG}p6ˆEj sC05Nn kgeN !0dE 8{uwLU m/N=㜸CWے>fZ1O1مh( $œªb{渼=& >$|14lsMo(aER`IˌC86m!x8<{:36ط @%#rJ"x:.D.Ӟ;?$܋ONgMoB8{TGk-=Aټ3}c:&4(7ND6G C]Q66$04gA^~-;ppzr/7]VS(j1]8!ʋmȫ0seh[bG|9dOl\hXrxW[.&H {0 =>jOJgpZ0Eg \^Ăҧ܈PE"1}͊"u|N#V#Wk./r`W4v Q _?tS+o 5g Q=8#dkalV#]n³)L\Aw>j S.e>Rag歫Hч r<twıۂ>ƌDz:6-|F!#] N`Z$y.fMtCȎYsgr&KlqbV&sVؠwqho7HrC Tn<6qO'@z:z0H(2qS Ǥo`#/ƖCB /ķ,'V%H[4;Y&iff s|jͿW Vꟽ5h1׊pqi2 d% N4Rd6K: 6וF>}F$D,e1R,G_- 7PLJK|@im^e娙%PC5^q Nl'tN ҵ9ד79Sƭ&nc mąu&o:hQH!xeG'V X!@J4g_㛬}#Z]~qi{͔+ũ#0Q^O`6 *`?3p:@I S5X뛘P ݎГ hQAΜA}"J84 +zt`/C*@3粪+U,jXٮ )DŽ}S]܌y_ؖ:y]GP|H>{#\|ǰeu_ƭ/UFz$HvKVyj*NMu$$f3wz40wmW킗Z|r*#$"J[nû& Y邖%l{*u䡓J26Ѵ:Z= ;,!b| |҂cX&ykœ˫r9(j`vv¯3CyHVoM#5S2+)ռ6C0L!y' [0!5t]()0$x~gjɖRLhsD ',dhag+R[\JG9Y[̚,)ġjl=uj Ԡ^i4+3:Xb5vX%|6I[%?\%2]_xųWq]ՔI[6735F;FHKKjZ]˱n?_?AM~t G[1͛33C%yx k5C3Jf:8#W nh%BO_7]wQ$:ﶋLϝkc[@|]B^XhSV^NFwKJnŪU|F:/?WY58 Am$!jk bE*R&[Y GUg8/ Ie+tNS`&n ] AAUj L#/duwCB:׈ -,jsÀD˚YAAy^Z #M?Qv:%F 9D:#/++nv CDŤJ~dbK)P&^4%CLi$iF4-qS @堡 =@ |DqnCuUGt;cen<9/x+p9EEik : >EV~eD 2I@a/.iMM\yD rkoy/)w!**v2 *uЬL\!'%)-Ϋ܍F`\N!}"xHHIx2#X9ޞGaD *wH%6[6Yy7 ϣtyU\ 19/(:VW}M"B~oLr=圛l7-ڵ81k' 8-t2T4DzorQŒhj6gM[I*Srx4ɔ( \]Fl7^egEf~x[i.1~_]G2 D~.,Kiv0V%]W|t ŀ* :!E`Rc2" j =p؊$g &,11-kyC; ;ocQ#u#`8bB dP;Ն4qƗhgf+95S\? :%Y}C i߸4#(4FV|a:{Y\.[S{Z5y&11]~* D@y &?#J' h$B#{ ٠tG/UN# ,W Kz֑)8G`@IL:`s$q*Q}%z'^;|{?VdnF0naY%ܓ)ghS#mUl̍Ԥu&b?H"Ca"VR@ j))G4PxL&~ >V$ YC(Oz|MC(gm{Y~/шk-MVh,pPD,hp.rg]RHQ7ΒM6zq A`Y(P^#KιfIy=B%!20MZbϹkPﵓ t6Ͳ_ @9s~3+}(t,fߵ VofI[$1eC4/D|Z)aMa*}|\rRەu>uXo> 5kzX"%; аgjUz ֐O}Nk\qf6}2Ful# l:KV B:q%7 & LM_J:>1TYX\.r/ ^aK|s )"'}V2<7ۿ[MSưp,wɼS6$# ({=M aVK&F6%/!Pt>2͐z;\\iӋ~8")0? 9>_1 8!<48qOU쾠/9,$1ElZ̈ By %{{t0C=n̖C_U\jq0UVLQ#Dhfk2MEDIS5_ 8#jF|7 [44tckPK FCkD -jc~$Vn!epN+tm;%DQ 1:gGDuwm pDT$u\pXe by mPx1}~™ D)lP Cr ې]B"nKY͏#mӰJ8m[^i1:tҗ ݫY0 | &K4)ҚMR#-p9ȥ#@Ӊ/%I%kOutUS/:m/{ё 3 f/|*[4BSpfI;s,.x)3$;%ۼ˰IM?-Bhqҵ8zR%MBZh+]AgD.!w6B.Q6+]3tIsVѲޮ!RD8c#1R<~yC+LoQJ98B2}Efn{ge5prX%,_NAx U$-: --ο2E?51-Iqߥ P+e^r}m5A*#E>KPJc+rؗ:qx函 `ڗekt` 񑞫ɘyJ0SEH#d3P2V`FR;)˓!CјYD(j㸠x!ѺQ3Vgݫů;O*b:[%7+ ^(mq[8@ЬY ڙ^c<ŪG_3AݝXs)M3ȨWy ѿvgW7{#)9TSk{,P#KC1cۧ8^6(ZFjB_ʖueal/,1υ~PmӦ#JPˀnA_u;wcenj'Yjsˡ!?/ n!SrlU0͇MxYa2q"$Hl, $!D RPۯST2lxV_*O1H9c rߜT*iYuKEy4<_{ov_J/R7EȚH|En Z=#}7J2R "w?5 ,o/'tvB2j_+[`gL}gѽ:_WP<;qU4nwj}P, gDwy&}^s#ּ`im˪|H*YTqQLuEY?c4:M;4|[G`Eq 瘓O_'ڻļVe峓C Wzw &6Exyt& BS}d\u0{%XmCڵ6; yV5Am6'N+yvЊbW) ;[Q 1f1R "̣>Uk|H٬LA^t%g#ݢ[,}5KVMzJe9ţUfIbǛJ|&~+Nc+4=]ladRЂ'YckkiWL6]=EDћTɓMextXlzp#>=,4Ƹs;ʬbEsgSC#`5&uR虬Onʴ Y%8h2Q]JlHٍĥՆ-t_}ctME:GQA= Nl!Wy¸K滫m]U$R:Laj # -"G̐' qˆs?cBF.,Nydھn^ne~FZrƓ` xv1? 5 c͐h@XDn*b3Y`zn+eI:cn;erA?Aʡ܉Enu$Bb Z y4 Ͳp  ݯH%Ky>:~*UH/xTؘ-  MU R]y{bWP4y@8Oஓ%esC \Abo"FmE9+ ~3 I&=`ڥ,,N' Խ6?&,pơɰǹ>24-Dd$U1 i?J~qֹNY\=6j~IZzq 1L-.3|5{13?cwHg(2ykL x ɌoeG=糕RLʌ}9@* DuO2vC}v_t6pQ%=~YӚ`LT}"sS\aӿ+E UwlOبQj@.f)p dmQ2 !zGE6{bO un[W HysgP IBH$Lh>e#M݆<|&M8S?4Jg sa72*&ZFK.hP7raC=p -2 Q$> -H=-}?Bda62[ͧUBHH.+eueRf/'Nۛhoߌg_A(njkOOUDs%*kT'ґZڳ­͛:Y( QvuFh,WepaIm1ԸMt2EkϨ dEFT՛^D`+ Ŧ k^ ?M>֛j&VW_׍('.9PPB~{9(2[8o0* fP-րv ~vGڄ2y?Fb1UE^f2PrܪƙK<%#.F2~g(r3O|7wf.XY]Ox>Abu2M!-'Ee ͯ0pU3R`oVrVEm}oMG8GP} j2RoxE]['aYI?ҋ /a, .EVÑ@ 5{6lt v9{C-ZL n7.Q {B8e.@wٝT+ܖPNXrYH6Jc(Z.SP׮EtiCO2J䛃S#A 3lK%jLꗢ6N嫺@RBKӏ䜂"0lW&iP֧=Vůg.R ­_$8M‘@75͉jui7aZxS]g԰>Q/`m(ˠa3Ђov:Ęr+t{|h6R'2p4Cݱ$d Ht'_VCȢ rpoLPm*iJ#êe?sDϮB;B"}:Q2?(%Z_hh#;q,E99GyRnA-VFv QSKY (݊s@l-`8qE0b ͻHR+MshN,XOSV?RC;ީԇ:fnA/?8/챿 ;Xygp,+7Mo=cC4b28R ܞ΃,9eۗ> sSj]RnU v! /rd[0?$7r& ix;e>Jw=*/~f 7WEl뙑 ]l[qdwԹ4kVEaCW n!% LcU#[Phc)e~,n GѲmG Mdp9MnÌd XOzz 갪uTueV $NYh?L_zOʝ.Jf*RmEV.fِa5zFG{#0>ͺ8nWK5qu Nze}6H|'&`Ku'?a'ňwhS 3䄏6V2:b AϐT"R._d=(6}j<Ě'A1ˢGQZ巏93)+ _콯u[?Nͭ W>NJO1r@ۮƖ?z 3#xOEzxtiY{@1¢K ܳ[˘R/iWq[9]N{>$'& ZВh1t$VXh[lQŠ|Fh$~ԞQ?D1T \@?A5r7B>}FOVB\%7%UsڹO|>>1>IA 8OiKT.y]-ĉjzM=м3uMDOED.SjŬ@T8Ub/\t ~?2JL-)/ن#Ձ C `}erL.əWN+x G#Tk>7ӭ^[t猙N5ynQY[U/%p1P4D}5i:@,onpĘ@)# f敽.6 *ؿPlvmC;*tHn^QX+5ϣrA^ntX8 o^wxB,FSq+B*%uD qW)tF5%n20Bnɛ6 6a22KS 0]bBd-0.-OGD>$g? \4d%C~HɜZƾMgH^LGS q=; ^(Chy- HpHv`TͨwEgy\GYnXsڋz~,_2[]izU3qX^ ?mnyJU,Bi}!<"2F /;S0t&DSd?x8A7R~CQ0"|uz%fHF%Ƕ,!hR r. I,jY{QKqY=񿞙F( ubtD2(ʝ[ Uۧp0,k#7l7֢!u ^zZ{7-wZyH\irY.瀓 h8…2\cxU{pBx Vg C[N]m<P?%DSR-eߝ M%Zx^sΎ\0Xf P$^s, Omd9-0a}O^Jt ^81ЌjKf@.y;/;nh&tgäH9 703fP׵!F#q^xdָtJUgjM r\f/t>P/^gWᙤF GfJ7="ggF.,-?Ӫmӗ>swηt'¤ˎ]1uXM.UNYEa-Ϥ=7+IJXs ̨O ybɹ1zV(>!+Üxt^.2tnp$^<|dAt8`Mp uOHB^({㥯s yq@/쾹=ݓ)j rpG 3sg?jP TnW 2?YB3 0%܆uJլIc(t qv& M3/,#u F^?!3?nhNp-VܦȇbQ J!i9n hJ>ȚP_7v@tY;aCI&+ OOsjFCa5Nf`n[[r9KIx,jx7?h-`е-sW?*j?5/~68 b(:LO B1gHEDQGtxM!wB4ݛ؅BdM7'l&CUh OVwq16FLz}o1n5Zfbl?w̓<$3dY $q,J贽~<[4#QX/H+mdb\jBb /j)~ȿ0J* dk}}hhGʂ%D``-ַVr&[ a x4-'$wG({?zf Fxyo3.7= A]OEaV`C}PM=3Ԧb:Q wAmq4-f3'oN(p^<{ ': \ Z~Q:׎Tݙa˘h o#w [JsM elmo%ÿ1tfk#? `% )W>2FT=D83,V*cq8JANA-}T0ڦqAWLa6]@%uw sɰ~#B.m\J zH p{.,(٘*2Зo dbc؇~aH0Ͷ4L@98ŎcdL}ibflr '?x1F`s_ liߐ|/Ncl`Uy^zYܜi.C% V?J@){",z5)| gELl9[o|ۺI&Z1c|HDꞿhE݀^ O"/ {a7i}3Q@ѯwx w52u9풖M͒P%ҭV:h]1:Ulyþ+a<}k[d0mkԑh>8mYTJ EޑRr554XbZr!uFv7Ssg2b>;t0FٯB$c_02Œ-pgdivBcu"6Cj Lf\KplZ-Mー/9"&ŠWC)Ih'W[{QGsSZMGĆ7[G nXŎTڝleCP I$ Caꦠ*΅D]5{W'͝~|:naj"1I{/? np VEqW37R}FU.CU_ {A[4M,!hE߻I<gusʂ}Er b}vJ6y>k?*Ȗ㺕ap/cG [m2ţ!E=Rn} v9]/*plcxe x~5r)ʕ g+PĈŸ"F9îTCI`)ٲqOXNQYHFGu"~ΧܮIQJ0c1%a\Gu m.\Y*|TJKhCg (ux0DzK/A@-v/k0暆nJ/8Pف̂7gz_÷U¿eY>kuf:ķdkV0F#f[7y++Uh+4E$U ԓiΞՁS(,Gl5-JJkl$StB: &<4уjvyPs. #VΒhS p0%+e=J;W@h !-f "nl_<1;,'&gOΦz::ְWY3P-V2AupCJt ag2ԧn5$ҜHq [FP(IGfb-9dJ dOOζ|gt~bJLJHt~Z$t#WM`*& >OzWS)`->A&'{l7B?|` u< DJvފ4NY٥#TIݚ࿭Wh̲5Dc>d^[Id?ltQ;%G]NufA9ɂ֛> [õ5 G^]?\;7Le7aX`wqco+-w":!T0c(`6KtOmL]+ їd{A_B tYm,7U=oql::" ]+qWvf> Tg~T'>e”Mɯie#$Bx6=̋::80-1x6yAv#0 L"B_˦]Y%䥍 yD2?,睇DܠI IW4NOzX-q1g/e*ѯmD lm{hajmMII;FSKPٖu-w4;7wwcZeΙtޠy5+ 6])a&=3:_F bqkV9 UN 6!,>$cv0bՏN_O;\"{G0:ql {*0P^|풼mi,n&J7ZXn)# ?9pFe(S$aIS=U #~k+(\B8$W㭊kt8CM͜H E:=]?ݻ  (t̗б"lu[1iRGV먒#Q ŪG3--Jg^^&mBSw&e9*vF1T E??l_7)f10쟼JJAvD˞ɴ[㹵2(Tf[%PY2Oc*-Ss@ r4;`u#O%Qt 8C4eOHk0){;!z,f 0͑Ece*rmts E60< I!kuq^#5fz*^8/w1Z3WwU,Rf]|kDP≑^ʓKSM{.v t .ix=~e4'.X7 5@g3vRIC;W41Vm95"x/2 k>7PCG>kH (}y1Գ "ݟ4BXẽF?.;I#РvX۝~ Iv"-V00{43'>i"}8nHgiP5ּ-&if̓3 #*M )i=0 jrG44;_si:!R=팦ꀓ!T|yBx_F YP"\[{5 dykS 봚P6[UPSTxX"qZ\H0Ș++9'U0T MsXdCye!i1,WΜ8 Fvm_1FBnaF^#H6cJ" /סk[!Y(Ġ;Uņ TX嶌ά3Q>۷jL(S7ȫ03Ay`̒M"~}̺Ò=,}3g9d$/JѰ'#s"3 =sĝm)A,H=_CL3~ VFć YǨ T_@>EuR̯D~qҬg X/uw+6)ñj)e,U],Ȗ<≚Wͥ8wanpm5 /ݮ]谳QqUA:a}EQXr;X뛅 R,Ȓ0ڨ!ns{N=r-UX]"ΣNğ QS$ @/<(O4ͥx#'}[iiHpU7v>5̓jPDC:o#XŦnvf#yC^HQm}?٭~7h+Jbkzt䓸R眵'ԡR~zP\VJ`^Fh[+Ľ.w&3 EJÁǓ% *=q&7`6Fծ/mn|"kj(}Rоl ž6[iSocÖ_ic-iajc*]'v9psADs蘩x}I\WJS-&1 kA.4Ū_ˠG36tG[)M.%;>i(u״x,q_\a|~ (ؘV*?rSK% [V?Mbou—%sSt+vu t^x  %?{ 68\ iݭP Un6f*V˗`'2X-(OŶb4Q8qcr.^ʾNF"_\I-D OFyH6{ä8־qv0=nMSnf[]+mܠT4M8j-%<ڠ:)Idpi.6?h]s+%A1NOǑUtGg1#zT#seu:en_|MEm7k ~6Ћ'xS'c@-Ep=MHY}wB`(E/K*Rr jxhs~wl!ϋ46ċxo>tX@ ^? {\X 4HAPL/$H}Fs}XKwЈNф:hhWXcDADaAzO sU|*^m",zrEYЯ zWV|{B"`箤'wJ楁hQR5̕Fg|FQ]y)?hdYkn75%Cɇ|`g0Ho:0\X ̇&k@gK+G@ĜcucOrw̱ UCJa5w{uc ٔ_L hg~Խ_=OdsN02KV B xdr;!1$]TrtwǰuD4)C(P5Vli$MD }2RI3 hO+{HY~h-:Dk&BUa &(JΩb7,o5d.9C$8K'ܿUF ].0ˡHjcAb]YB支Žp0e(.jQU7]ŌaT7%McRhgtMIʥx嬺nb%)X(Zw\;F|fiw'|/ػU\jyxңThJ;㭎CfW,|9p NV2ߢI~=ib,Kǣ׽g2[ T SbA}m#B!_|4FO^[_JփI;Ӂbh8⬴pT2KܛgHz2@!J+w9R&xAz!;\ͅ2#elP@6[Ag C)W\" itt]o)ػw4TO 7\n׊qhY}Ć8]ƪ k /W "  A,Qm2ҿy3Z 6|ŧraNcd>ϪSTIO9fpҫ5ͦ$1r@{.U\6R0i`z!̂Mԫr݊DJ"N YT.P܂<&(J_h@BHEdcy;f粌~g9pHTY9=39tKf[Idh Fߛv~k n4fhF-}U0B! wkB1eBV▵ `Du2fwj}eU?%f?u=TVa[@PLiG}Bmt>osd9j YL< Rrjmzmt˓ۃ׋lH](D 49 Ka~-M ĵrRR{l-nOr:*oLIPz[:Y0/=lԜs+Yc#TzWAeUapZ+ۂ`Tk1H "ϯVOEOAIJ6Ac:/OJ 5 ˵ -S~o7XJ6콅5utB3vQ> g>Igl|ё$j?sQhT;Z Oؑ%A[i4Q|#ѥZ$clb@vsn)J)%62E+G=ԕ6:g0DS>=R^UJS\1ЫGV=@qO#c95$g$ⶫ55gҷM'h< "p7Ȳ zڌbbF>(9UӚ q,Y,I>ާHR*K`%iנxDO߈ْ<6j@ƺC;?T AĦґm76Vp;ػH&)yLBtcg|:,Fsu(%gfΕڼPh^6fՒT′HW0[,6ek.}8I{B+7BB/5⊈kėuzaC YF| dS!_ rksɡZƬ.@u3z7*sM {Lmd 3*Ҕ0^y|8&}4eq=x_^y#d r6e( <+{Mn+V}]P%lU^Rex3(;8 hT0yh;<Hcya(UA ۱iQ&shPKȝ@`s"iIU!pQv" .nlǍ09".\8Hܬd7B3vQr!އEi$ƻ\v#~'g҄i;B0!Φ\%+o3ޜ HP@Ͳvn}CJ+Ŭoo<݇Y?KԼEm53@݀Hnk* *ae,Hz=p@g8Er@fX 26ə]R?1Ja֛)@r݊MY|B3:|H^VJ-+fU8K9ɴY " ƛ>pX-oZG>J5˺c(sw零nJQ LldǝB֭\O3[nuDM3zf@eZ]БjWYIe('a>:X`)}n"eo:*Jd5"$B /um-K?n6xJ{wR4^ KcRs6wexo]. Ƅi8~0wþ]FБHl9aۿA>U9+Ų<֫fl mUX0$f5[ToIB6|p]C+;힫%} I!F|.E ZdHf+ks͎e 2%%.r?$g" ?^fHPc:ŵqֽŏ Im9j̉ ŹaaT6?;-sWaO€* g^)xLyeVGQgr!}Qxr~3xt|K.j4UD~@bX@q D&B/ԓ nDe]LnԮ ;&3悩Jٹn膬K,x>r~+8?g0xX?DԄ2922\f8^t\ؙMlky6˞GиC4M8D/7-z Ho1{eI9: sVu3DI |;po8._f־nJD$ Ϳ`dm<^h7 DH/yi!L[={2E<.%˵|*ظ`yj2̗ V_3ca@G ՟IVsIz0Cbs#fkgH(7< 8_*4󰻼<ʭFіKh!dWK y{]ϤN<6y'^qu!ٌMlϙ!YG=NK/:%3IU4OYٻl_J9c3;Ɩ͚-my/Jl5V33MԌ@>:}tQ-0 !#X.`&E\߆x'2 1[۪@(-M^$wӏV ^7R@):,,YA}k@Z>W @6RAx/&?fqLH%;))8ce'UwQ};D?0dx.??YZP$꿾H"ImW9 B*;7&a^%~ŬeXlV~ Ɗ-tzWMRSU.xZďzeƸB%@ kLc'P-2L4c!}.O{[6xBYwY3, V'd[#B 88@u$!_2*j* 3DK E8yp_-wP;]"^yX#-u;zշ[X}m^_6ʼny([U6( J׳L.YN҈|^^0Z41mu߇fl` vr9~pupXe亲@ q3jӽC0m b\!/%H8v30~%C kԃE"mi%?\yl}9> jzt/78^z=+.yd?KEKC^#O_Xu~˶s y[ub3to|Ŭ"W_.2j~p.*!ܦj.jGuDC a;*6/q]Fy4QqBE ^٬;m@`!yMܕHV'x?yW~ AQ W(9G/ҽtjmҿRwz0-U2Z{phU, /UM/INUq'.\0ɌW`l?2k<; $و1^]? z4sZL_ G>+, H~\Eqlԉ(*B EG[3/:hLX9 wX&blDdou!`;Oiձ2[b"5i)_ N7;ga.o&9<;6LA"̹:VAz?܅G;hŇf$9f"-L\!NXFL&ᔨ.$'̏o7m E}3; ~i-27ԔXܟl 2Yi{'W7z`ᙿn)P $7%qN0^ΟhߑF f-|lu t:@!?4|)RuV`{<qxs(J4*$`c֣߅> j \07ZLy~Vn tI4@=8t |U;U0JfL -e$wW7X:ntaKqցyb_d\x/֠q!>:1!D2`OG l8O&D7Tpo3a1J-JǦ dm|uq<-#pȲ%ňed2QưK dQA)%{Hf~)Y[f': zAP5?̵8pteWҡ̳eq] M+c hY 7oLV2\&|{Ԣa^TOZ߱C7Ӽ.ȺM25nNKb#73g'͠}npB'hp `gժxLӗu&OGz=dٓ'{%G\,2OaW .+[&/H.Hi(E0VDGExyD/@:/6IjޑmCZG- K W.fy,E}cH?`{yZ.\9G&vwO:u.R삕 G gZb; <\l݋\W:8:'ݡlSkAYڬyZWi\2JYB;ا@f?Sw:?L5Ib0Rh=,/"v&F<,d9,AN24HX"j)TP40h5%*26B%Ȩ`w"*lײV1\L+ἀ5L hQz.^z1JAduq)6+HbT1;0F%m1so,5Ð|/hzOO Gk`v9?eQ?%ڜMT\<̿Fy`eg' V=q͵[뼓U1JBq4GM j/rk*B>veZ 0?_*m ghIp ᬉ5.Ln1eaǺdO5P2#7"VϕZ5WsL}i`I93D)cٽG2^1fckGY&a_B4L0C8g [ =k~7`v&Vj:dC;f-+ld ԇ\_6 |-ӫM(!z.X( )0R{*OF3Qu,ُXАFQs_Mlw ថ.׺s*lH5)" p YTs7Πw=ɿrȓY bzi=EXq}I"'-3lǠn2W`B8=ko‚R?A{x7Zo2^7|!Xԉ H<8fKc=.b79 *Dm׍A ! ~rltye$ saI5ף.8 M&c";纔^8EѰ"Py e+6|]3j' [eӳyK+4[!ncx sWn(r-ZK,ͫϘݧZ?|m=,Ap!SD\ rè V`Pj0rXXp9b@SPm2RN%^GM͗H͕6.vWЫ/"ύ-L|%j6UkFii[}lJ_G )IVβy$O!XCK߃pb13lB_p/;ȣ3 ݡP.'dr>#f.B!֥*B˔%U#4/x8<A_,"'3HjXa^JQ>9*k >a4dDWKͳX2-XqsbG~EǭJވܧb#yޠ ۟̋2 sR0X-"%- L?='~ت fjn-Ym"l@XwstvTE_19}Ĕ]n G҅*.dϧџ GA*h5 ݟxHC}F(qBS#LFH\ӏ&~:`hBZIn**Nc!Mmw;nQhȗ+.}wy_uj0}/zL>RH|=W@qBbNdAj[2džnKp[J7_A~w?{W9\!@MKY~k]׶!bg&Dʺ&v87Mp^m^^or՘T:rs# "9Xggh7B"E:}m-yֹjᚩJ C ŧ6:v78}8 NµL-3-"0UT{  ]`%`m4}= CoLiv gUQڜT9HN1jQ.[fPFNypBNC-]S$ Nb$v<[h,! y]$6}S^s0V`n0c/xSՑw7.cKk\ pI+j`:7ܨ J pN74Pa,Ϲ;( .&!&6ՠA)6@$2 kgONnډҳ\,#&RSZ [?u7EqefFd+,+r]]Ӈu r ɵgJ"|rAeP߿ EcQaۛ%cpS 19Ƀ_w\'p)g"dn=9Ib 8 ;)/.TzqiU WBwsOiPvur8F((NDPÂj2!j$A$w}rjЮny5ɑQ8RY=Gۉݳ"^gf {6%!Α~G1N&ݴ1CF"~q~zkdjuBAJDe Y,!u`L<3MuV_;6=".:F*^ѹ~JPIM|}~ vo"50uU[ {ߣUtzf+wץߝ/ /ER1vMis# 3e= rn׶^*ݗS۱_˶Hv7wwyYSfKMB@Џ CAs'GWJf@ʅU1GtskC48!y55Rx<Ο-61(!~ۗûݳpMޑUxI%bц8 gB;Ob%[$id XDE`4:2jms)t*-&Lu(4FuwMGYI(90m:yQdF-R=(uӑ~ϼLfbniʛwN:=f 4n oхT~"~7RWza;fe ,;2#BO,-ya=Yj ]7 |eGjjBj#}YW \' L*}}:Ջ1 hңÝqB̀J ~@lͰP叉{9_lfB-%aEa[%D 0, BVjXù@nB$z'>0M~G+ 3ZZ8J*uLS2DŽj ^ՆӇ $U!o[ 7`  M RϽm˒i1ȴ-R[SO LڡX|R6қ`N40zL;'vF*2v,ys+fNo&o1is|^xdqS[X[LZ,s˫Ln-#9-·MdM\ (j4kVekX $ς#L6#?$?(n|WNP3h1UV+’7.˧x۝Hȉ8eK;qmpХ}V )JY]0c܋lZ>Rq{V)T'Y9S~Y^\{۝MQ(ǛLE>^lj3z`EH `5|Gt0pgM@놳>daCdxQݚlyy$BWb%LA0:Q< ^r8 *ڙ/`J(i 3zmE?@u-+TWJ!4hu6vRPŊ4OWWZ e V x+k%sELXrNAXZh,?TS3q4l$=m u dJ'jdGC@[g%6e4uODb`A-1 L}rh h~fV 9RƯxc^{mlv% ~S_4cLYzqelw9 Θ=KlORjGad|.(ZLw<7Y Qd|0.bm]NO9]27ԷL Pfb{!mKZJK,_M`>HK_u[&(zQјi’Bޥ3gͼ^!1B%PE, Kt vgvvw<0'34Ks&1QDɣ;ꜭ0&e=r2?\D5DT"J6AWsJ7x| $yiY{#sz}_B Q fR(}Jn}(*h|KRGKVbZ,H"s  iai\sG9\+ 1Vy:&:q;gRD9^Zl< M\kQcqtCUG fӔ?ɲ0oH6z5dە?mR Mh].S+!Z&1)Evi7ΛIw*u2y ~fkBeThd )5 1/' H~pX%}£4+bD|)TCOn*'[%7fL*2f6*Ҫǻ~/tsW-k|Xq֦r"^ jw\%E2)؎Xvٮ*Tۃ~%< {3`=q\1nƅmK tow25,c№T{KC+2-Ddb"ƪd.6QՐ]T*L. R8 fd:8ra@yZnY O09ꮚ(]Yv{7oa&â I5LR`r :6 ,~ߺaTe ;q+|v0!Ee@MSG͐0((yM|ԡu訿VV[L(? m̨sMNva:S^#@@w}%uN4*bYB3m=DnLl G8[㷸,Itgm.7y@6~ 7iIsr;-PqP+w p>bbO9z䤗$9VXsX J+beNo0eM򴊹dVTwk-:wGMhݮWʠ)[>x]K2Oɻ#xobIG+ k+K.>8} =ԙ*a)E(>%]B?®Z|" X&+|t$AOS\ʃ/Lj Vs~:ygCxO3@=e&U-،DY]~U\}8;=54Ss+t{39]Уt7_ U g4rvz>z8zZ$`. *ƭp".2jL<¦Lr6ﮔE9,--Vݶ<8z BK3a} ^yJވ;KfŦu;U24cUWƩ={Rt,Ò_aPg ʷ%A'WXy% 9)z*WD,Z5|בE.@Ug#jg#٢/ZMSK3q#6AaI)LvG2vڿop1[^&!+TVEnbJ r\/iri{xN=F lƿ<[_ljoQu׎\R)b 8 d r'Pn:KdEYq5P/JE]tjFP,S)4p4-37L@/5e])WY{>ȼ&uXGF2ۉ)ucЗ/>ݴS pZJ>mMy#SKn*n f?{Jy7 ..Y]{ - aAaegǠxx[P͍bkhBO=:.k ~i_#dZ1T'WJlUqd5%&qwű{z+xŒ";YaOm{͌M*Q5B)}P\f_~gٺh4 V_Zb42]Ȯ*p4eb^b \k1}qխ)c?`M#/Y6#fNB x3e^k%EJǥ(%?jFܰռ!dC̅VhfB  tWI3mGzuB[D:BtWpC䧡צւX`:tAF?z$бUG_,o\ iȮk7!Y.U{[]%t XH[}Ah}%娀\8JfIs1@gX;;,z颓A9W;lRY̗3FtJx &_~' XD:kkX]\*&[]&?V,9 .{Lk4-s I3; Gg]gR| K|\>:i5Ђ1: >L}pa![w[g T6C ` rFYǟ-=·ϒ0ƵqY'-ܗ/EWMPrx(홤R\<:>iSJ=)XfE>Aŋ QR$cG%RA"{nD ҈c;p[ QZ~FIdꄾ&LS@+=$DKy|@5,@Dm9|Wj7G2ucl 9ăoaHBG>"1AAN7/AOa-2JmM=waD1+,RUM@lOk iG[2yLUjk*l+2W#bxe&5~$::+G EBC$^(Ĭ!V:k 1;]0Wxgb~d ,1RX [)ܷ(z%e\5nMS'ɤw#r $y %}rz,dh{ hʧ,\)+az9Eܻ=uC,_~,qH%p< nzbWn&lF74r쉄BeiJ?rg Gjʹ Ի;(.屵!w2-L"J4\)_eVA(.: tݿ)f˘'qTْfΖܶa=SG/!pWR^#L<Z?ϛ:e?Fˠnf=juL lyPQLD !I3z1ͺǽꑲg(p5i‰ *bg)olT˴4YTv ߝ#i Y^?`cŔ9%IVFփF=<L^[bckNԅasSifuɯ+#y: OAAytdfqZV-anTQ NW&>8ɈWic{ER~+U1j1(ƭyqF~0=Qk{@#Ce\R3ta}uQuNt ؞]L70vM4w%Sc@BMUV-bb1OlIJ3R4qW~m;pr dmO'A% BuFyK.M~CB9Ko? 94Bٟu6+,sLȾ nFoBdLȵϼmYY.Чv$Ӭ ' wb"YʃgxdP4i,á?gaiT }GFA^|(6FYUl]%Ω6uڻC*9ݰs&n]!> ;&Qsi}:'*~\ q=lS6V(bň{$'hmWΜod *rTK0:wp~Db|"q2c6b#_REoYӊV.Ztr^N3qV9j" ,~= SYrDi?.jZoe iIvo'.KRo}WLUiϐ L\aL([fpYUQ{w nљœ炕sbw1m%7&Kzr?Pb<'u=d_~n=o O5fC>4֑deŠ@.h9hȵ#^t,0Lߕ'kL`[Z׫)\F~O2]M٪` Y QqMMB(ec49ޟd(~H2)FoˁVr$ (WyDf<}p8ΧVڑoWЊvMyzaK͗mC(Wd׍N= .7~m Zd$WvDd_k)=uM&fE{yl93^?}Ijl;&P$1}rf+P7pE:䗓lr aF^!_L΃cdejvT Mo< h aiBQu9z'ᇂCԭ$ý;.^t'W5Iȇym#8M6Vq"=zb׆9 jVtMu沜fҎ,r官6A<քV 9F&P<۸1M۠_O M^ \eOH?:q|6|g8tvs؀>( i/ Bw {f.=6 SeMXz&n ߜ_bPT[*c+7mv)'jk$Tt}OyRM/7OSi;A<{{E?;\$h "Ti} )6W mÝkIdg=r."dE~w}B<1wzu[-D rt1IN\q>sAsg.i&⊩&O]ߤodvgEmhJZoVH0u8 $n9LژM*QŴ^7B,bj©WhK 1Iw|ا̥Kx]-,.PPh10}ZQ~|3FT~z9wћ,* ].֒uKQ5CoWc^7X`Mn{dy?w NDcVT*(l.M8_wU#׃*lAR-ED Y+lm;O C`aOݵTU O7[nC=3:NU_2Zu]6NLmۗfRt?Xo:7:%:m<@WѶ@-O\W1LF[p#pc^V7:6چaMFHKГKXfo()Yw)fBRXWUSڢ AUIRpSk:%~$bu@8Hn;\Tx_1D!Fk7aJ L]_`v[jJ|jܞ|B\ VYrVi @uo2N 0Μ;Y"]̝Qio'`?0U% T\>w4 ,~C4 ]4|-gDkYp"i(FNVaxHW_¬e\4lILDSm#}Br++ 7 =@?ZvU֨-Qs-/A&G4B?:J@x𩗾tyTAJu0-}ZbP=O.n[oF(ӹ>} XxJ$z+-RJ9@)xQpت$ݯ5h1݉bnd,JkX f j̺ CЙCit vzӯH$>o!O46>}a>%oH ZYB}HX̷dX&J4G)%`:mOHtC8 `0֧M/ڍiӠL@B( ]zwD:&C<ZE;ƬPvd ab;b9CU+c2:\:" @%ȒPϜbg}dT!Im٬47y~i=&\n*#~B9^ޜ%7Gs΄A!L"ڽNRPݤp6^fF\@%O{:[h*vCIZAnEFKWFSgE/F,!d=Kk+l$  FC8O+srVfGl]Zy8?pv$@yyL -vx8>7A k_dT-x'`V),ʑC҈,1LRLHvv2CbT뭅 )>7iO%t-tFQOu5QrJJ[yg5d|ԉ/`:ظxZ."E:|W8;r[.iew-  xzb&Y%q,l me'UWy4d'isoxx Zl ӧ `kd>JC Ҧ_2cY'_3$_s-Pt 23gpC./OTeK[s׀nUfv']*!4 >h6،_&Y+UP A\)E6AE8ܲR\f=gDz bKmN#-rKs`0<ȮșMȦ!7o8=*!J/xA/lUx͓duGf1AW ½LcՏu9QVC]_"趉]s|lN@bh(D6ͳ/2A0ZƏ 6O }~T0DwkGIjR;;ݷF[X6YuZo-|ØoR_8HzlD 4{/zT 'PeBծfڸ$2+ ʡ|W᫘vp]S1IuHJ:z/G;,h, G krκIsL.1OgTHE7{Ҧ< hd"HW T̍.@qk@Lp^OK!>B ֋r5=s6M3,n [x ‘W=_߰z`Tޮ|6OFOK08  `yl}<9^4 aiTn'~=N)pY*FFy;^xa۱>I2 ila.Ɗ0`\Nk]`3HiʗuUiy2+ȾtFJ;TA*U!=G*LJc @LIb1YH?idReLr>ַXc 벁?| ܴF,2Şގ&ceڿаzZawU}ѻ|U4@?oc,&{- p>nHhP t?qauKjٰͧQTB9h9 WVQD׮T1^In{ZS:4 Nёs\qjRw./A;~`@gZِ%Zݸt<%AQK |Ƃ&6K˟0%q#ln^ݣon\  GC~n} +2VIÒƱu{j +ND r'︢Zd2n`g H1!w5_.p$Yqd[W 5 p$_ҫMfamjt1: v%Xvrc7fk^@Sk_B*k}J/xՆo:R^G~s|(&4D?yT8Mܗ&)B^{S c5l@m ~ljG>5qwsw5Զa=9Vt4E[̲K7< *پYS"(:\cu`r ep{mԢXՌo(0bB0MIlx@^r:Qc3,,J`.l>eU$E]rΨkv,^O@,ifJFKQQթVwgHG-6+53$ Q:°S3}7h)@|eg"!xZzdgVzbѲZ8\҆edAcV6|,ٮ rŞhد.HPcPO"7pSIA38vߞKyݥᆔz^L m]g ]`? ? ul/ .l]2M6Y2:.xKV oKðB.m, \ i 31.}3@O+Z/=㦽_ sOzPG.~QZ`Mo ^Y{,O2+7Ѱ5p-(8rS\$BjK@cY?~ր1unt@Pɍ IӦR!DP&W\gbU!$"㽓2;+]yopCu]B|šNT?p+`TjER5(gȩK%&iW9]5!d'+}CSCeI9oŬ^46%V>ݠ]ZY< %4'bQ[p7/hwDMSTķŎ9qQJm~ԍ| Aoē+0]mZ?-\U\S@>mMQβ|R֠ǨJ 33Ewnc6Fdu|fkUD=~'s6F9"o`y6 t\ ny1)~ /w!U$loogwQc1.k@ 7I"FdLDp4kGRhabN-:c;4rHv|L{ߤ |e-i v>`<d0v R(FE]ui͋Ң" ečaPTnѢ4Y O.uE«{"BC*zO8.v5qn̑7&FfJuQ xNHt*D_b 9|A3OhqŁU4v0&-/ rѶ|^J&k.emޛ6r#@hV12E9JlCZ6  22H! Fѫ$SIiՖk l`v_^{a`w48G/=-FG>0ic? ;qv>$w<1 ,[}jN]{$JJGR8~#yӼ*,T[lX$b}IkN4` 5k w·uf<įHx'mX=?yo¸\FIЃ\* "ʐsd4u坡1' Hãm\dêȓ0blI%njJZeX_a2\WOPtteNy)Lp࿜R8 5A'ǧ-S=Ӳ[}^=2:~͒\ h8Vj5mr/D{9B3Z[k/UShE*C)0g%ڷzP+1:䒕:i G~d[ Js"gDMxdU)wֺeGhQYUergӰMsZPY*e8@bw7e`d4%4l(YܛnIؾ斖Sc{IwÅf$x"BUþ !:ݚސIqwÓ8mS֕5 Ήts-ʥ 87. 8eÏ\ =d\3f8×Ps"%FCk~pz!"oōj1 eBk-kiwod鈐QLo_%t-(W|A6K}QD=\RJE/|kfڱu"Xj(*a6T~3)NSTj[Aߧ`3?[ZkmiOrV%4T$g0yU_tPP0]_>Ҁpk~08=OJ~ z2B>/FM @r 8>x3-m~v]HsolRqϋ{g^hxr[~qɼhoen'kjԽ(+bCUDŽ1g4#KwlY}Ђ&vSOB#}A"0๮yS"  [-ۛ70)2F-~75}Q.E rF谡B.8zwbN*pFIeX^A؍zE^7~:&C%U"z~ʦoN/j}rCEQ4ƱTѧ{b N{F'-N.K,a!mJTsoe V֗b. ~5e8TbCA5&ȋl VW9ZT@^e=Ot&M(d\꞊ B_d嵶Vh ^E<"%r%wyA WPxpm~|7 5b'Xٯp7j8ͬ~̑ _#=8Fs"5dɛB!mG*>U?k녃SژI@uCQsrqz &$qxY01/zGn;MhQ3Jؗ@I$88oQo.&0]I}hXi@mFeJ(OлoɅ¿{Ɋe4k[H;$ bFTċ9nqRKȌe'z}EFS1290e=z%}onyRq&7&E18*{QoQJp;-EwK/ {"4`Tfؓ?!!-e HvC C6} uT|P3ᨏYg2LNӌv!Na|n# AKIx5ZD7zUQ64u-nC1jR-_/EܜT/xi^z'0 c X%$"@oela[V1%VgJLI!v:IЗ] i'4tzJp!iM:5Bv+&sTbgM e6XOǹl|?'2 8H/jmn T)ؽrԦDEyw|!S^9<>m/N=|& YCI>Ԉ:z0fkHka,qܓ#pʽ\koe\!4x JԭҰ2堭k~Abǧ,+DJjWe~Y<#6 L1 ? :Jaff7._iN(?czr}ڴ6TL5NKF3v :U_?I0;:D{ !DxiB5s,a6_h(Q *Hk%޳2ԫmPyqMӣϿUBzL'ITp214L$]:5Pkpo~)kK5 $ןӬ2x#YD.g&{xF1d>{]Mx5TKRH!S RY/%I9NOG!)䜯rB=rɫ/|nPP!̚׳^$~%WuHG@"Z!V y}jEE0uB(c&NGFQ.g 28:i1TdN$h9h r(&ݽh.:ww$7[Sc,,L)*&5[onB/]܄lNu ڻ#ڏWҫxت"VOWF+-mۛ"=t~y)k6WPB)GZ58 i wPnLKpxnZa/"jY=;jb`s'[.CVB+W\j^}<5W,.QҊ ;V^?{nh]XZez*qͣɜX!h-rܫͦ"sJRtĕa_rj4pc ^ 5 ߽NfHg3: JyӼaeI}9 [ƝuM`\3XIc[OCwya<+<4x*1LbnSݣ'P'bTaj&)in1 \o sL {Yx! $,5m;;vX9+NK-+B$<g o)څ┕dqm{ԯUjsaO6RqD ) J-Lz=Fo؛#?ߢVeᣒWLG-C;u;Cю<]Gjo;BHL:v6NX5䳗ݖ~/øue(=9\7Q+ތ?Pi.VȨ3]~Np0ks)zy<"d6GEm@X}MU `Jlat*W”ڌb:EcrW/ eBz_`GED6s) m7l&9YO%uG{>(YY8` 8+ylɺp@ #EڟB~uظN`P<&h1p3KbtGgR?ݳʿ|-~TvhlGz\…uWjy@R+;{?*d!)B6wbHQ|Q'WښҮDnV 3Q373J]l3}xd7Wcu:t[gnhl`,aؐ0ׯ(t>mCc"n.Խ UsV 96Dķa\%9-Mmͩ33',-=' l%!޺a}dlftcbP=ck1A<4juPD?ץ%WIrèPPe KP'dgP?g_Rk&,IXEˡ۝ߣ QG)n[c |ǰ-PdT.FG(e3N3Q0]J2s\vZh5=-ib׉05jf~Isٕ\2\_z,XBiꓬ+;tsh!9C2*Dᣨwyk@-&bѲyIlSFY< UtQ*.xWf앍R^C)Q?tycJ]?@9Yh|ꋑxM9Jm74;"su v0kwZȲGpGO+Av*yr**3`ƙME c'pzkmԕS't~c!ёoMȇ=Fp?aS}ïݘO}߮Ge|{-LpN:^GE#]z emfQ@^#cťwe !FƽJxpfZcLQҕ,"/sJJgcl<vz7(KUI{b>TEG#j+͆hW" i*$kczbc3W(,vx{d/M#SqiM LNڽfA י=1 (TrCB|w5B6Ml̡$S]ƽhLַ+\DS?ZZFXoBZ)l5F|L18^;ڈO)F?]1v -;+ EY8[-1^VQQmSV'WMokQAi5 `4Oi7˂%eN-?Kp$kVb0M9`zcIv/slR<\ɼ}֏hJzy-8@m߶хWBu9ԍEBA-AzYJL$ܴɛ?q(;bl@/H6&zo{պWDPpoe@O|ːu*m (_0 ͗ J.N0 Tty1Z3ݕ/s;*Dm wLɯlդ T5͌(_'R>K0QWhn'o%d\(i;# 6)yϬ넥] Zh`DS3y3Ab*ΥꄕK ѦM<#XoS7jkJM7/5\JȶԑX޲_|s9cC2pqbH$dszcAT) A:Åy8!řbc#c\e }AĿu inD TuyPlyliz6QzA98?; ##T3*Qu6'61Gk Q"%i^ZZ ű- >`(JXDySQLbTTPCPJ߬ްXрS/̾'I92\)}bNHa#-*k Wv ֜AH iDH($Fh4#{d.#pضBfDž=xJwWH,'I9$!$L!?ZubrY"\ƱLS{'e!e"5KIփM0HCjX|=}0C:3.d<aKВ>cm0|u t"݃r? C^g:.Zy="7cͥO"Z4H1L5?P$d9v'_ XWf;ZX訹@` }}ř1pPk^ jG\J)UG\ 4 ~\p.UQ|ڦg%]ٞVi2~޳y4?#I m 7y߭Y ܧ.$8u<;e=^mc)Y0'e)'cnh[ob IJ0L>.3Pm RF&wpS{+IW5+*LZЦO;cZ.Bwļ R7epVHRK`9W6kP+HΏ"6cC Ot=8a $.$m@Z&*+ޣ|Y @ܽ{[G)Z9.\f]P"G}]Aq7po9TwWn5DBYbNf(U%t~XQmG6ɍ]4=Z[HlUh;BΪ_V=Y0]∽q¹!U-/@?9$ӂOq{z(Dj7#t;pxV'ΓJeCmC'c~\#\CT>(YBHݠj3!HKXޅT@` 9皏Q=uXjM+ܸI0d\ٴj 퀂o>TI }hoVډ&jpUrIn2тɚg< `Ug5>Q'$9Nm\J뫶@GpS8#1TX8_TXUA3S5\>#|˨lG c. LtբҘIIC=LIo>P?ܨ֍jFIks)^{㫥׻yY"G_ak`Rihhu~*KqVqNgG֠Z^c_#,ved#GL>¸h{)6G]v{Pώzm H#K/QRIS{l/>v2XJG;¦ Mzp@s d>B[N c痆 tP{T0V`@B< =5&z7aiAZ%Yp֫T&tTJy1nЦkq@b:nEw05srebط{uO5LD$қY\13'1ӣܧ|HF֖.=EÀZ̲"Y'-';N]åj}?˚UzGw.uXZ~xp{^V'ei"z:wOy6b;u_IPOɐNb?4nݍBf5Gm!JMƷ,U$ iպ?\wi:kZzs h/9aX]bhK~'W:OUmN=W΃ 6B1;Y(=1V1&%Q76dwz%U;)5Oر nhX # SK4ԅu>*yޮj:{BdjO[:9yvf2lġvi[@P!@ap=?Ĺ$b?j9sKO9=pJ.|a5z7}~H(gX:s^|s!9T`PUugF Z,&dfHKg$+kQ,\<ԚRv2Jmer"#\>JţO>ƟMHů:!D36} eӝ sEA94-;1OH|6/b!W,ø9Ǩ0 /?d:H|Qtdjf)^S .MC݂uN m8ʇ'UM"5ojYEҐHpbtGNt*z[N%@qIa#(?+AF5"0:z8 R,̂ñyw̘΍ɚNnʋu46g OznWЉ>s3+Y`-N?$4:ZSViH{9oqt<, EF754.ԭmK8 >8NU`zr vf8*/R}?*q$emAR ^NCL%7'~xvaI\sDnG46c, n1MO Hhs6s>b6Y),{l#YgOѭ䚒P&1G bboAN8ڈZOwL+A[U? ).QxE9Ci0*1c8㯷#   {A3 ƤCc.!_/ j MU>TNk8e)_> s!zك:Fdz>.0wG QMqp 羍T]T)Ƞ  A֩w%/f s'E77r8$[?Qޯ.,|4έ&_--}ԇ_I<,oSVRG EpY SPct'”fص&)\h0^*H5N\7Zm6)%ۯIDu= ̑"sgM7,no@}@49"k843} g=0/P ڪ]-iӖÞθ+B;TY0v\V%5?l\e4-/+|Q)%HSNC{ÉW3+x@}f#?m)Ҁ֥Kv϶qfJ3G T c0rOЂ&"| NDiai&ҥc|uCd5>Tqo/&pIq* _6î%oIjz/㫜A1 S55zTLZYBͩ"$a/xOz`J+fAڬT@+MwqΣ 'Y4c$NV[- =O >cb^4{Ro+[ |?9G8je:^6YxwsʐT_!EV0 (~F5WK#-H"hMIdK tA˄ॻ7rdP?RI:e!<2ܾIaq~e}!GOkH#b!$[ Yv'W?$==_$ aC#AF!m&i.s@.^Û䏎߱+CDzOr/1&8t{`8 T6]x{!*:E +qhBZ 7F)R&$,l n!,\FZ+BN&e'xХDDd5 &p©|)WKLu+>GFдK2{zGo͙f-f0#MY6:yrqX2"hߒ/L>ϡ%\*slCV2pS?8w8+#@RX*65@t:aTR Ã:$ @[eB' 1 {:X$2`ȅg@&MYBbs!E ~rRKrcUBj!%$ uVG zl_,&M}֠pAU5gWuq]3&drLz%)s*1ggc;$D/ ٜ-bkFڑ_|Xyy}ȑj0; 1mV_JzrwCb|%:-]͘dߙYb1"ޔ!$GQz3T'JBh[_  nN66ͮ1xE U2wMfxq PtƜjhl &m6rA͹QG[#[QDZ.z1k4iKd5--K['jKz6(}+nZIaΆ.Yf;Fv$ZX1@g^BEU(!q_Zz ^ ?@#o`/ߍ&"j)?k`AjRf6>D|| <4 J4q[ˬWGvE{*;Wgx/~Tϲ'eyC5 AUڇiS\ _8uxQ7tTwWCwbٱSv홯?gb x̪vn/sV\_s`=hE5n*\gpBu LdP4]pՕI7Mv`* =ns4S,\}dH@}8iy3s&HG&hLJ,="13|[ zgnőVWOM8$ NHk~ VDJN5#4`%׍xtPy`{ `3:}`myeRk|d]Laտns^i~0X6D~=^1`&s_wZ+֊k+T~`X]<]!httdqJD a_% []SZұf(P uҸU.#z=ɪpmI-+3яKPiTѨ縚7Y%|:n%Ko~[OڻI1(mcq='c| Ѥ!yDk)]A'<m:WhɆjݹ>?XF~RC2!QJoKj+5H{ oFu[L;F"EfzxmmiZ7{Hf1%=6I-yT5VE:CO)bS5p.SvC͝0hV*[cr} =e\u\ι&;lWS6*'GGȇT7LJK|J;PRϛP5D6HnjNUm$6a.xQ ϓqMrI*d8{Kn#ulfiϡCΙ&gnWЇw%.ZEoE-VyꙊ\ˣ?/hAکZPF^A]b Bgۤ=: Oy]3W5@D}''_m iM%"of|+1nl蠶|_п_;ѭ*yRxW֊oMk4\L@Z35ɋٺ{j[)VNqUs4Pm2_HpyWmT"sH(6|Ycbm!VΙ[oLc2}p./i6h}s<bМϻ+ \Jdo^{J{\L$Ža Qeri9z14 ۓ^p^Qg|wdvsih luR|_w`hfJlbbZefL/H== mpohךC'b:|2\TZh8uatN GQO @;if+?_y0Njp]%+w@36−~@XOotd}aߤc K1jfcӵDlEQ;0yE ޓoBxN NUgDH\E8.:._0Cf|<8p$-$[_* ٙ8BNuzH7=LԫɆ 1n2dҀf;<|d.͐cO6']`Ͳ'kJ1 H荝 bcMX Q~DVBD1V)WLa<ޕz'd2Λ7H4彎@EY '֑ /iS;w 14exog]Ӛ:wn}ESckxlbXZkONKO~` ;p]tQ+~ -ږ 9k.I GI?3]]?2֨ dҷȚ^"grꔭP'9~Z I2)cRǺj8v*/tfgR:ssItRl/}Z1Pb&F\m( 2 f<aGU}Vu \ zf"3EKa9pb BV%Yά 756=Ҳ.A9@4$:dW\c#śVm("`r3~.7n7+>l}d׽}J$MYo{rCSU8v,"@ľCļFb\ءY+QīYC|Mɻ 6,FLtXRCutwfd"CMN>&)ҥ%kTPXfG1?buȯTln..mUW}ݢ\w3н׉sb<,6 !Q7J:HqHPYִt5h`fQ7hS51Xۃ$KDž EMbP]eЩpB~'N.Py}Ftʅrx{~|уl$-zFh G~J8 eUJ@?G_ykW 6mffx1w1rKA"lH\R"$?Qvma B(/賴 4"ϤD1fƵ@%APMmA/l*~)-!Ҹh `tƋܤcABcQ[>| ulse2UH[q nO^H_Y'!YWM#NɯMu%^$KQ  =ҝ9b=5%Xf^$:V& "|Cj}hSL̕NIwo칭K{  "UIlrvq( Sbg4I򾵉 3>QK}Hr$1׋\Ie#}̈́PJK]$(XV#SY*U4%$!.(#a*!k G}TWuD:[ȔcXVx>m6ͱ ݩոL>4ěhvGC,ݓٴI*!Z܄Ja59PDלӆ9u+:Gj&4|SE3q)PP{vͯ"@KelLB \gܖHHȬɃdo8\B&gCg=uR@:( gLTqn osvK$sE #RsZBaNxdVg9ԉ8#HC^G 7kj:BG)LH,rݦMa*Krږt6X58_rrDSJBhwӰbcۡ+}#IP_6(fiecmjRuF??Ee@(.@$1Gbъ J;"]vj3.ԄPA~4D5__(őͥ[AT.CDzUpC_.ӊZҳwG@ջS7E^(1E o5~:lD4҂yiAn 4Kt̞i Dc4^rzBt WZ/{guաWpq0guaXO&&zcy,p9uܓú{\k@?pã3 }dGaCuwtVx`iv7q ܙ;l"s;*dJi-V}?N~BK1=;_HI15̞Z' A884383yz'3Y6 QdC=-|s= T&[֛P-0)ml&0 >':24xHkcPϭ-0SHV΁ MHA{w^}:͘o.2eW)K0X 4~U`VOE 6/H/%$#UyGm e9~hmSRD[CNF~fa #wp4*aMY;px/nK6[$G+$c⁘GOxQ }c#0@SVAW4t jاMijğRPo eUE{TT@cXS=~@PA f" XY֜Eׄ:&x!ޠ\E ثN /6*P2;IWx!̜jT NfPdN }) kä )b̰/81I#GhǑ񘩲Z\t ڙ|66u)Ϗ' S$:rHqNKol ,7sT&cID"6z'ͩq `0v$,t?P޶h+6KiUQ8Ϯ^v| 7: +24ҝ{~qf`rAۭ'o>P0\l#"l dsTz~ z~p"4S 5 ]Ta  ~E2=ȏ ɽqcMfe 3_̏zHL6q_Me%5d](wq?'=HtZceIzLW\3cFRcD! STj% !T:}h}M;A=av_b ڙ7;% @eHb (:Y`51ƱA]j|Gށ%p l DjLq[N( }jSꈷ5R%z&Ȧ]Ƙ.ވf~ λ\RmČArm [ aoYUIkOq{ȰxE4&v a-Cۅ"crYƺauaX+e{J5cxR#k]|Z3wZ"~6L+Ugl,PG*&gټ)1-A#?c`QxLoHV^;hB5 3v24??O N?IP   5VU >0 YZcaret/data/BloodBrain.RData0000644000176200001440000021077013153613153015221 0ustar liggesusers7zXZi"6!X]])TW"nRʟX\qjnj-&{/}m \SBܕMy$_L@ûb]U.Ҫ3aa% *ޛҸn.ɆN(tH=Pq2+2yM@W5zhpF~Up((<*`9 |u0uJt.hY4"p4KxÚP窢b.^T@a=x0+QOʚAW\w@Xm^Fy+u4VAgVG Y^1L!y S$oe?0Gd^fb6*ȦpW~=jHt;K/Q!!uK-.6i\{KN\qu<:<])$x٧%µ\"moGOHa,2^у}a#A;V}賈@ٲr7M;],/:dHivZYW }.+nInZ1B`}0HVl5葕~bX\%1~E^5 $d |EPD$R^׾I ;}sHoK3%= "ʦǎ ̯J!p,?~QC# 5Yđ$e1(Q9g- S~@yTV!35/'5c}_ݹD cipy.k&$YG[&ZwtȢ 2`MbIM>AT4+S Hy[m.y1OE/K1]X{k5;̗Vs}3㌹i,k&~ϕtIm\ @Ev5јy]GUFJq?K"\wKW&T^fVȃ=}A@P%-w(ױms ޷^&:2)HبB#NXo^Я/xJp,SǾ"; r|O^VFƏ{6H@Y:{'9ҜR [d6s޴ûdɯ poE82y&ka /Ck14,9$x v'nb1<_8֎e {2PfaN é{Eky%ҧ^2gĞPJ>ݟh~4q'V1JWDm50ߗ>7g2FW* Xbs[PLY@1rLA I~?!&5+qţ{aznxZTS>Mu3hyxv|lMՔm7`y8CCtA{7qI6HI D!#EM=lriS;}fi!,YqwxmOh4tSfkVohS ۙ$IfKX(wTNZ)˯G~`gQz[Wk΄'dS}xoP &v= P{~v7 -[zMBeԶvϿ+QQ'mΕaæt.i%}]obxoFOެ~7Q|^K|ngp$aGYB MJᾫlFeɲ$t@|ub\Ϩ]pc5{ `D= p y<,,{kp^vNy3V~zoaݧR/܎O?h")=:+5 9TL K.mnXcgu(-6i+P|WfjSnt+@[|ĵZgVZXpj*4%|Lkc<~'rk>R$}w=~z3Od>66hPLx-.D<&rz6tS{6ZrJXgS0Et jjקyM7? *AkA#xI)YS"L0_R.J< žzsm+ "&xi$&99OA O;Ȼ}a~ֈzD.Q><}P腐L.A?ϟJнmKS-!*휈Bi_M>38Js>*ld"COBUd fi@M~L}p3d nqZЦzqл;K$օx喰yk~巣^5'MP<Ҳ'Cڠ+VͲs6jf\Z/pr0DC'qGl:#i/Fi>wKVFțnNV T۝Hx~|уVME"l]4PukG.d!T2\R[sXN0@\b,2&LS|x" ՇLuf.YD&b"r~< +#6J̯'tdVHh*gq<ݭ4SU =}՟i}MOl[1ADL%2ݍڞ1M21iHu :yS(vu{zï2kڨ]y!̊,ThǦS;Mʳ'FF,p0- r/yՁϸbvLaǮ`쿉qme)r۠+=6I~b1/.7#q⿂ki]v=F* n{h)?,m}5[@Hf?L~8x0цD%/& N2p$Lc3'AQ" yrPCմ *7ܗ|dNUC(=J3xÅD_ uWJ,l䎓eu%W`G :v[:YI܏ 9QSל)1]ޑ߷֫ z $sz3$((ڒ'`_KDprlGa_(i|̓j9LUhy<VX>e]?.85&&N #Gtbkc!)]IR_J^#ڣDְ :hQYd׋?#X%Hxr*GCoFS~`5F$4nVO a@@rhD2 #=h#΀b "tt@f.oC<37V%_`35dDFHXlbb|=ƩgYڦA4cǁHʵ{H.c-Ƚ`wĖI92f:i8:/oaaC5_hAu]ѥΦlS $d ?NhT^?œL&,t>[$+Q$i>m;z^B-pVA \@>/Br1D=X'?'> ɣyrAj_Lv9z"BMO,nh:^-ׇiI[*u!Շ^ס3A =sbWy,6UHeǫT5tqra7s`{yUB~s8C(}qXYܕ9iͦ $_hD#L#PB~y΂i'\kL$Xe>,?=7vZ Dx].bQ5NJa]FjYqdHr^lz'z"hx=ʶu8m-_n9yV49{언O5&)BEQ_sk6D57J`^& [tWqÍ+,2o#@Bb*k9FG~ZIֈN?SYN31flGO}^pq dszi7uroxl=6p{6FpKEH%kmEt>| <7|d|&9MVh<2[dկ{8$ B HܞTjk#4VuEv hWh[!+38D3*\7Ԡ-92F#Q[k#}*,PkT:r`,GA >'@f>V>5jP/Os s_E#5NyMC{pw eHOW*b9/ɭLsdG7wjH_$ke˚1\mΘ $ot*l~2{6șR@2\DtCb'UZ՘`?FHKM9Z&G!dz9d_W@'"٫tHS֎ⴧ~Ar ϑVƎ|!tD %Ausw⁂ KUϐ\i/N &86=4bݡOa\@͎/YЋȻ,Dv+HgIğ0pT Z+qMC@DWyTDz\GEo*߅ƫuJPJѩs4APY%#Kև;R\TaZHپǙbelc*b =`; ̀β6Qh_5FKw@HS7M8_ eXp ƃ6b$^㖽Ag;Uv͒zڰݠy쇬c)yˎq[:RPv}^]Yu?I" lDA~r Fgt=^1CORU{{?vI&MKx iVDvo]Uxe@>ƱY1<,:{/ٯ.^^ '&(LB+ 7pjrhu$QI {F..@K ߧ8GUJb*#$ _A]$]mTLWMQ?W O|vjPL{4#c٢?"lrIy8Xё=>k2K6&` Tqw ZjPƐU(?V+9L'Ey!b G(Nش"0w{fhBQc]'e%| Z/+ x *(iNu$RO?R 1.y~p+!(l<5 ÖDs27ѩb4{ձy:q(zPG*{kTa\[,',PPBT^,2~f+h:x!Co:6bnΣfnj8!!_/7"ܠ㔼(9c',,yLF+fBiDcJ*H)(tr{uR-^dF4/3DC7)y]U4n-,NO\2%~(0D %Wrq!9"V=,dbW.Z$ͤyQAy|l& & ;a)hNi~KКMݲv;t%h8#121FG棜Bn4*Om8Оzww6ӰEdtnvB$R1lS\DWDb]mWԢyլ/dO׈@\|aJj_!m -~=( ~GCvxm%)@v_x兡03Bܶ} юn T"kyX& }AGbm[Y]nO <-6.\fCe!zbkJBg|=v=:I┢5? Īտp"B4Z϶pj~"aM. F'R;p̃Q96LmOo20?I+$8q!*)P4@.^߭p0ܻ©),z߇R ?rJBEz&\7|fcg0Qvv-X!uZ8=ͽ&k&*P;d%nLC:5-Ȧ'9Gϔ")Tlڼ鸌<(̓8䠍=U[m`FB͍*~*/,w].!϶ns, ~0`t"IO?3%Gŝ_HM: KHyJpQx5\iU,T3% a:X Y97}[*UYr__Q"/$sxDF/5~>{Mɰ9u QK ׷kC*`T j4û=uEEoe ^HλWtGRq"s +s_FT##9VpSȞMGT9h@dV}{~IgZK8dŊ IP8n}EX܅sIaM|l,=B(A~;5 :'OCA "k53JC6;b:F8GZJz[m@5>30{}$ YfV{g``+R/%Y2-OGy]x|Y"swLQ9V+q f $mx恘I˸53,xlEKƞ:ۨKgŢd"^H%VeUʏ%G7?vgca2ORl\X5/NqTg!=W(dc](_> TwN/e-/km-JZ]J{9J?*+ ?wwiZ1 )3/M'ߘ?8բB!W#)3H.wPRGJf;i ?xI!rfksG4>.AnA`{.rɺ\݋/'a)F~L;Z]I($ʢi/3tPS!&W ; frWK2!Yas&N f7 p(]\ؙu|y^uC 'JY ~⾫EgRՊ]PZW0\3'fKrD {J|wuQ|HS=ӈ,[}!$aj#C#;&}졲é׊Bp2*mZr#!K/a$ƴ 3~nARXMF2 \+t/q\ gUzއv7B̋d9IA:ճ*Xf=t1i+U^JQNjXԧg`,eۘO~oʙѦοi^R PcSmwJ=bƺلר Y[Ҁ6Sߘ[LcX=y_@OtwVJ>iha ~RlRzMTu%d93⢬тZ;o"BSP$p Dn d-|77+-qw FHzmW«DD~D0"E~=yh/Z͔ w bbd` Q-(|Sho0?mxѧ޹Q\x%Y4eSs38 5L5h-و^G`F[nvWՎ=jQcrP\uj\qvW:+B~⥎h t .oC:Rboڈ^EO:)~xK'\z-gtUG܄E4M=BYrPݡl迚=g ˱Q5ץϊ[:cWcGPs%jB@k 2d;jz!ϩ.m(_ɏj,(?favIWO]]b31W\i|kk&W9|XG̰ŏO3n@cUm@ Py$' F *|͠mMWu\/DYBfV1`煬l|D];Ep2 sE*ƪoHK&̃2p:8 Zs&H֦߄f݈OzKkKS[,XD$;mZ<KXDǣAP.U3şpdn&+깵 Y֡y7}=D+J>T ;VSco띃9daŝ: XGq|*4(??`k$YԤ ͧk>~J6{J$ѣ֑R r{CD{)~\A"Rd«wPxnwq0fY'~7H1@ĮwHb@5g1hH5MG<5y*ɷÆGysYxhi(#Z#9l[nFdOF&EPysleHڗSaʹۢv;|&%],[R[)ha駲:il>?$V~vv@bd%/N2[><}Y) Q)vMbҭC8PYbĆIoΧ*q5t<>A?~t2UPʠĦau&g׼,4d^>-iv^?p*vdU|*~4kOFЂkuA+:uԴYWF<2Pˊ>YRPҨG-J?&VunZ~/aRE {< l!?6MQ-g߀Hԃ7̻Hzos]d^eqQ_(Wq=p [JU\]&HnĞla>mX)+9ޣsL:_VXk޹ɱW/Er(&W@ܗrJLw2Yު\J߰9| ^CZDܳ`Jp$Q⤐ΎQzCѱ tOװN@!xGJ єh$me3!"\Ayh98 :c0Mf5Zaϧ G-*:jbIË́GJrw+fZ͛aT,cst`+J[E4QhOK~:LeAݣvCP[&jK9KR6 |Q1L'7(f(r1xmwφ*#ŻJ3hRc'2S'|K?TsͤQMڝR(0`~5^nTKOS 4Q;TK"D,!t;]Ɋ][C)/7ٿ{?p/ R1Cq3T+%>,4$}""[bԩ= o;Fu f9fn`Ϩ2*ӐOr\-,ImRCw͐-5ʭggWN&^H)-i5+j?^J8X Gb#QN}k׀17[ڄX8MaUgR:w؂O a{it[1BXXؕV?{Ǻp~H@#ghh CkmoxO驝/TxZگRfGDOl~nZA2f~Hs`6M~4k*;\[4a酶>קI W-͸<+ߤnjq_DfT"ā`Mߌ%Ԃi#'`M~K~ᥩWCEOK_JWC;|ΉB^Uj IMOU~3n[zqz^KnΛÞ$\B󫌟NnvU߇ 9e)f7SuQI TL{[s``,:`۟GQS sͳ:LdRaXCv u=\'GE[gS;׬u R~+a ^@&厦6F&[(ⶦžQ Egwt,;bՂM"'i'r4\7qb ?AFh)-ӧ2  P֮؝Bތ!xB<:jo)o|֤  ˆ`u'Mm.ߛOIK%V-}ޕӯz] $G+*b#XzZ_=T!1C_/i"j؈+VhKHA`aj´RAYSĦ IY{q|$>AgizVfξd9{HaeWQIpA4̟e4E4yQ{fPLHKqX-.f Z@1Ŗ?Ϭ`W1@&{kzⰂŌ3"*}):޿okר2 8WpНLeEFZqns=ƯJ>Ǜ h+ >Nb9ƽy97EKyG}JR%%3kIk.l+NQtDsxRۓXq4h4P;wʓ|2kBaX[qvI;.sCy5!>0@8pM~+l "~XB.K9Cf/(u>7j9CoUkC}]AO1ߔ0AdB%y9̮g>I-cU^_ ޽ 0bU%r" Hޱ:`^0@1a'ұ5*Vߟ|`H:0۬O@2'X~.Êmۣߘ1G-~/H">Ș<6xQM OHr uUY&fvf/L!13\%*ɬ։j7H,o7G~u })nH]Xޓ%=ڰs+ )< cA=ƕs8 xz"ѯ;_gᏕnv oW2B L1Y|ηUrphIz |SR= 8*n 4|<5pwIz*^/c!Ĕu3FH]xt>dd`5f6)CQC3vMyYEL/yR$EykRTFiGE24@5MM2Vy/ /%Z!W7,>r:ᅮMH_"Mq #kmz>nq" z۾t1:w|UTqI{bZ5Pw oGyԶɟO4˺T2(ϨI3,N'Svг8Qx7Q!l݅[yU! yi%YbttsMx :zmF@6ajqDr&!IO'z،r0cGҥV %sKͷPR< O %ch'U6&d>fl o3a5쎌6h+:N #<8 y@džt$6u .Jk c0xFrFp;:#Slݞ@݆I. OꚊ&ݸdhLjUVrTHv"T%Ex;wE3Ǘ0:+x,%Q,^\ LN!\!6[i5Z%~R'aajý&olZ ;˿ "u-TOu*T;,aCʰW}p ?rAى#(kqZ[z_}_X߼}s+dlaS7Q&f*Ch[KP|A"2Yb7N{ uGC'vHs Bث/uq'֭K&HdU]XYS;t50ʩE b}F2XϒF'-$o~+[b()xذ)BڹÜj\wQ %e~.yj+M;k 93u ;3K8^O܈:4c# QHX P`\4MxA\ZTg-@c@L!Lu* ord;ǶY^M{cJ3:\  c0Z,;D<U|Q" _C7n36貋jp Dŗͣj&˜_ͺu`(I7sltfq'~_bɕS.X*d]|j=/

&R6x<,mI<+b9b%d$$ʁ@J\ZECb1ylzUu}լ3 ‰hPpsYbv:@$ή<~HJt],=ϭZ k-0>MF8V}:YP LM|rD+"%'>rld]S̥/MCDM F(;E /_tYAGKYq2IU9'(o I"\nZfJʪ){<|X@(jceӀ5PVM'ur$F=<:]Avr6볊Xn7hݷ!-̬ kjFT;oBj}(R ӫh) LZ 58(5zp|NQX9C1$Q,v~gVz!@0X+Jp$py i*zK:zqv@= ~6Fr^YmjA_pQk([$\Uy̙.=0C)$k>xQ&߱6&Fy{pM2*Mé`cW`~ϓ18yjB%zp181JŒc*_&}j ͗emBe%njVvc0C*ʿ0i0.szЃɡR|DClR-b8%>mT6cNZMo U+&tV4\dq"uMwg͊.3C@1Y@*W{Jfiq*\QIMY=y K朁 |ÉZ/=# OjbZkkgå9r*O&̾}e,h GN(uXEm9צ<(drۤkFkO~`ܶWϰW =TH-0fIO\@k*&td(!\6=Asal1?@TQ)RD{| n3H*֋>H+5s3\I3zdÝ͇y"2ֿ?A+SO.q5CnC*Io4K츍ʹ@Nr1^ltOF/ffV'+mh9= C%\E;b.wYO>~ҫ,;R(q0A60zCKNs)Es޶@^7Q46e /`\u! :-E1X/2lA 7Ƽ@@>7 J{S-?}U#EZxU>蜎eh-nLjC"U[|YP ۑmH+k'>zUly2{3 WM')DeB?"^N;y/Fչ»Nâ.qM4lDVvɗQ"|wQe=J?*)!%A1Ӈ#?T4 ] 6mȖ*)ӾZW5|#. {D`^҉*Edi$}2Z`:d?TBvg_ۥ iai%XMQA„) T;E=:^* l53,#c vbB}?s.HH!70ϳ/]gJ4Ru[cA :Dg{EpB uHG}-z+%Jl` xK˪ʹ=yAUÀ]PI3'?ÏIbb?A?v1Z|'NQ.%i*~c<3xGt_C?Tg8 X۾&ʬ q;:/{Dm2fUSY ?WqpO<.B,5>ap38[7$u(ӪhG ҿӓ~Wh67Zˤ;{+D}vC* aP/E71jBu|t/8lڏgEw*! ȡr`mxZ09jǂJ>-"8ݞc|5[yY@a2;u~WA qmeB۽tq V $n Z1lϑ)Kly}-1A_QaU-<{7wwL{4Ӡ4ж1 1 Vx׳qAe0xԗ,6Kzf4C.E{t2H*p#*} Wuڴh? _|B3CWGUzn:0PDH%GWTJdI5g 7WjM-&HB3+^p':#[\C1[.}\CU>E~OԪK,3 ԯe2_E"GD%"Ia*fng|9ߪ~6nJPQ|_V[80fS( {`%zU_ d&MMv.▂U-+[V;Apnfhj_rZ_$"=}]-%D+Yri"rW<NuO T_Œ!Ϡb2 [)_UCP}"{+UݎD]hb1}WU&8o0K]ߵLB`r8ϭ; ^(m>|Y P]B`6T>q!5q?qudjFbL>U4qS˪|HԴcsD@iy5-6?~J)ZRiVop6 `\[JS>5€k ltjBGvb|uA}ll *?F23GQl`q `y]|QJ`{n>.VkV=Š1f_U+"lj@LP(,jc=`WhڢsB#cJ:dya_'Hby3«ˍ'{p+ǖg½ &p0n~@{,J;MLp<@@nn@†ʺqƳjlq$?%dv9O%8'l H+uAAmG*ET,,uz-8"v.o`d,Ʒ)etE/RLMmL>j[qrs͋} jۓXllfKhb]p_T ':6xY+Ƃ6:8z\2DKVt9vJ3LUnq~t9/QvYqO#Ȳ$SY 0ޱCeYE5qiN=sdnF?2dUUtEwo ` 7hr-Cr3ߛ%ɪ6WuL G,ύ3dЏN6VM4Eq%t h=Tq&1Ŀ Mt)'iAꠋzWQ;lB!wͬ-R+=R9~#e Oi".}#dxK0$D’9:2UMleVwIߨblrf;r7}NlR[]EY=9?3S3:B&{0ZxfI<~Lʞc8BD6iF e:%uRטGգD51Nc}XXZ;ypʱTv8۔G &M+*ܮ=W1qk(eb{Z9UbigQ;#-ᓔ/ہuQ8ŭQKJel+\I-)7"Qm-.hY8r9XϖsfeMSAGBa(UsdF7\jpЖ5@$ihRA@j޾@+MōwCq5X{z$/ 3(1ŽtƓUtb?r+Bd>,\<,\0mxR\k5-L ^!lfpGxX\&9K@O"; {"Ȑ'rLy-9 ( B`bc' Ql {hshq&=D{eR7) *7L.oE:-ɛ=Ab&Ô 3]AW92!_h ] puȭ<0b %h$6"`Pq\;[+3D)BBɚJ풳y\;0~wFT& a2 ՛$!M ]OM"GUBϝ$/6Ұf}(dϟ e] ׶ >V~x|^MJڵk-/Y"fɞ3Ӗ}o•u>bƬ߸&A/&Z bC`d_;rGz,@IW80J $i R LsGKaƹ&S`"'wI}tY9ENȑusa0؝|,kiz&\fJJwdX6E0à][ PppSч/N/GgW-UjU  ='&@5B:(3~ Oӽ&N,~#O1} M\*)<{tJm1l S3So?dC#ܕCNufKBy/osTs/Y+!𓐬F9k95eXx4y 4D.<|2|v>Gȭ3;OUk[z ǣ4ն.p5jvKu|Cdq8 Ť&oz quOCIZK½8?0Ka$3l.t b,n:$-n,cBZ/zIB }6E;\Z/M_.ޓw&_zFoI¡ϊc@U7OZ,'^iLzl/zd#-%q5edO qJp^T!bx?8籑Unwg힪8i$Rwr<7X;;=4/VJcռFp؎)RtcWw8i }Lm;K;[u[ #z{KUx=qVwA:oRA%!r 7< iؖeӯDt\pJI.@"BxVMu=kbxZU*EڤI*b%0NcؼNґ3PrȖwH$C%}Q:Ht w?}BD@)u˭I1ܫKDvjh42k7\| ?v ׁ9ie#S_Jtcc ~N?wCNL?Q e Ǐ÷o $hqTGAb=Bf3:K!P;LP0L`9=#q )V|`oG;' Cb?9]ö; 2lW~Fj+|^2uYBxu^#ATor폥0&(heG1*TgD}>lQ%Ua$ NBQ jc| XD`~f;~ѰV45,v]}T^{KX]dM;yzg=W)wf-g Z{B#kWӅk ox^s@:dS9qNokA0.s(X{҉kk,CKSdI͵2gܳqI "^xގ 7nBoT DGdwnы>6ud%egdǃmz~`-&EX,a5I0a=J^?q.%tvoa2U;a͟-DZzլvI|ƥґ4CqQEَx. Qb>5 &.GMK$Д (ȉ\'nNnH^dVԻ [`4Vm|T*5pLOΚ =gCZ FMcI5M'љ˗0-+ylILv8d*x3Қl3GF3`ţNsȩZ̞W`,:C"Ř3C?#[9;u'vE{jI2tbxE Y6aM3Y)ė((ÔNI6i87./ =|r5Xip"p =~BrL̤8-]o-oYXt nՕ9''|Kw*m Ғw5-{aZڊjoOX i$t0p0oAIq3(OP n~)ؕ势Pxl6 Gx#!j6f3oi%CuЗxX3m;]e b &Cݮ?O-?O*eP۸F3G%V`vyX++ǫn;p($B| 7SM>y"P'%vL8U2 );Q?(M]yMstȪ5z3$ sʡ"5~:7-2@7++-$%2hʲbak T #kېWթT45-H>G>0L䟧0B2{DUz6P-!6@C+BD19^\ZV{i[ S 8k"s (6F Gla xBE?7w oiBEJP5jAJPAQT)V1p϶pA / @`jԷf5PJh;J`}o/%18g=~F$ufK< N:.=/>oB03r~Z7d!0\/l DPN;:0Mw#h_ :aXb[0+Q%nY 2q݂r85·&qJFxN'oJKʄ1s+]Nd~cwL}Py64 +coC,!8= o&z+yY[8m{FY5>_L H 䉑Ӝ[՗ N-nDr@ʾgRD<*Ih{R(f5MX\l& tP쥲1ބ%QlfJ[JX%(@[¹7ȃ!OhK906!8rLֺUXzxj r wr&E'[VrsA "8 F+@pRwR .BIwjcd'Gq;,&=R]璙 ACUH VԓPzB#l2([f \mjJo([$$ƨ22TqZkιU/$FuH.mKh=E7kPq'@'W?O:OXamO'9\6ZX,yGD?bNU1P_h2`qqCSzQx̽qƁ9Ķ6.K{'pKt_ߐZ. v]WR /̙#̅ &B=To7E LkXuYBnȅ%8=i4т6U6x5 0s~m*FETb@QɈ2̋ᬋtB!jýOTÀB GPG1DZer@14L i'bŅ*Q',g=RQ:^bߏ(1#P?m $P- E8G+g'b x58l/DF*g]ï}2mO!oɰH2 !U'Gwo"3b|'>VчG) u0m&N7OQ iL2րmz&^DUn@H`9ˁݾ-4:\srh%JsGW!EfVˆ'PQ$A禷˒Ҍ%J^ԈRb4ȂIO=`{fffWA9 Yq~vE7Oi& {}T&vimzB=io5sEubu7Ap/Z=ϵ9 >vsQbʃ5eP9 9>xaT8sG q U8.mȀ٢'JsNJ07? ɟ@$3)Txn#.YIlbI^_^Yo.w?g@aă}opE:]!kv) x,_⇞t @SP_[AtW*w1f,zD6'8:65T_ΈV CF.Q A6 RfO,^~ZS_PSu , pCYԬ lcoUX@ZFDcgKNP`܅2&#:l8ѾM kR{P&+Z 30^)@ ::qbeԬJ_PПerN_a8irŧ6oɑ&e9!1qr ro4}$@e>lr/AX.רaxՉdp曹uuOTRwk랫附Y8v2sG-a(3͑z6Ue~Q,hg5aHZ@tJmd- 7s5_Yiʊ}>$-7kZȞf!f2IesR{l.=οB~}"ݼ>3FO]u $dLlߨrOpV̿nkEbTmJ{Ht0|YV FyHب砬A;[Q;6ain5 : \KlK7ﭬBO=ũ'ZH,4AUojS h|i._ȕRV궃y jYhƶ殄Œ2viO:ќj!/0heXDPh!4%<{2"`4V%pJdrӓӶO`y:yH=tP_g¿AB6̺ &ZLo2%\7*Cl@BjA#u ۚ}5¨D;T~r3zG>1/(*Z0_d;Fħi#[ѼY"G6s#i7-4aeR#DdbӜ`rr yYN_D+{5'wKKIxkncLx̓Pp:|ɼ_^[7׿X.@ȩNB@O>@3( uܞTp8C4o\c 6 YぇӂʴN Z!T<3yM۽F~_6pmǭ8-գEgrXxV4㚧VQS"@ru': -mfIzݳp/1 ODL"re/ "F轆: ebg,*W'D%Űic.F8H7;R±gpߖ{15wҴ<,[3C1`@7(Kdl!'"&,O ,J{Wr #jCBvb~qqm͝6#?jmn" ÏċTr>#fA9\dKJW_ ٺ^"u'( Q@ZĬ{lH2;]87Z{- CFY^D॑w E#:/.w8OD&IG{^m5VQ|?4C4}Q# }*.pP]ݻ n ;,k]Lۣg$GF0_<| $p w|tRxHV@M$u,| o6/5 wka 5*4e!Ă+k̒I,?vNONN$Eb@o@G&.@\$"lɊt<@k3+`Y,,Qv|f)n2v j:pР`>'8;| SA3bym\“R d`Dan߆wŎ}H!gxqꉜN׏Rх l|ջx"(K8s9/`Nn{гfG54TV3ens4r=eT㢸6_֧_&A ?X[w {"}Vt_LNnie} p]5 ĥ~Ju@c|K/}6ئWt4mTA1WLؙYH> :\\Q>j4Fzp%؅QS"B.c4va~jX7߅bJf'T_4T0В>'H!7C- 4mZ(\SnaLVRbXQkh欒^ڊpzT'6<=s _\:D ҤZaAVOyphDFFد!F1Y` yv\ &G'6{=酅\GMvkSymR>2bk^eQ NC#?Fkc|^j~.`)QLlm+"&BLVlr2Gt=z/`k~zoP8,1D|OX9'}|0ڹұo&‘y!iڑ mt1v;6NZ}\pr-Z'Ut| &<#$4&@ڣM+Y١ m ږ>crnu˾eԈ4Z2js`b<EH POjR4_Ld>#gٞ+6ew.\{!IYkmOxOƒ3́} oS~.+[/ Ù9ƁĵDmƓp)q˟# ā2=jRj %$p1+N1b.X8M [6԰GoK6=D1ڇ1aVp K5v2 l6\[x78*#CݺL<2+k9%k|hb,w*yT;[r'?Gd;OCɹ+kYGǰcp6};<ި92z yZqXn?SVT Q^⿼! $jP߂eOP>|CL85˴P\@ :ܡVwOW(IBA}sɕ{l $ 08LQؓS0ʹ\eR"@;vVdQ[k$L[u@ ^nw[,JOzc>s9ZhVyUKΓPDrf*;CėmKumI`rDHV8|D:@ELWBhb&u/{v~V{YLc0I`Ia̅+n՝$̞֯#q;jsNm!˻W넟map} Ƶ=aK^\w`=t"VO]bw*#/g&t]tY^ߕw4|) XxܢI.c`1:f ICglXaI|`΍SkQ5A-rV~R{Ь 'Yy9-NB&hWKF i'?/z/ V/uI;h(Bݟ`)VDRIJVc ©ׁ*ݾܰL[]ߔUN\M&n̥JZ悜TNU9DRB/Xg5 a/j3G=p9Kț1aHʬJ(*^=Q8nRD]WY1"(D~11XijjKTK׈ "/H71Aq3) At8p"."oJL,䩢n±wm"/Sc3fS:E<#xѠ&bhy8'[ȁ+hhU^l NZm]P[ oqbXI@ N{u%) oMV Nޛt6J$@uLbYňoǎ6']>@Ztו=nOg똷 !xK;O +ڬ|곂a42֜GXk$mޅ 0}*7CR$.%~qlD.MM0^B6iV-c]/wüt0}:tlZ'QUO8u.Lykb.|;ݤ+~E%.HtL*枞'Y^GZx>ע*/6[Vs^h~gW1I4Xl\5'FˎU]{{Au Ko.|RsShrKDi1U:

?NQ9<8H:pUyFTM2 D)GguQ;Ӗ׍v 7*4Ϧ}{6-q%xw,-ȞU=Md׻V <%'hcYTȑ[Ϣ r:c`^SK8W}Llc>-<+vY;.u#wLK#JJB3P/1j~GXmcjH'}7`"5Ln= Z}^%]0 ,5j% =jLmˆKͷ hBl bͷ|-f+@m$#H9EV jk(G>MC/LF5J+qT9- @"֣{g:6N^"\QV„~:Xج7?y߰Xmڼ+>Z?Rt3F~rSq  5zPҲLL'e mrke`gyhȾCAҀw#BmArẾxiGSJǼO&}N8;|d;]h30 / Ც2EMZN5僚kHqzQJD64 ӧy,oS1 4ǘۻ变 c)uuUw$Wg :+o:@]b>Q d㐣qMa9[$3zB~M,&*v)qa Aj%M.lGm:]v⋉ng3K1V^npf~FeY=.~ԚFY~^fZV:"~Nl9Esϥ /,^EljFfWA0G^ ᔔ4#K֕"qy _ݮUZ)_S&Z,0q ܩvKeg6L3~mZVp_Oܳ]x9ʯX( }OMuRle#Ji@3-Å0͊T&SEǻFH3MQA䓾ճgUEfF`$oU^)Yh5~Բf O0|M^)2mn'W%TB-ЃHcq͌K#L`2:/J0=16 :4^7#EfS f.+z^+^nŇMfں.T7Wn!6F(SB +h:s&+jGI#(t4x^RA5dZ\TS|;!Y٪/\0]I*ncCXVys^cB"cqvtZpl^] Y/L/`YB )j/6s4/ѧ2 # 8 ntqu^RoK46uB.D^w?! $t2dJMn^rlػB{kW-'$gYag2U<+hb 76 fۂXVFZ.#7~Xפe;ZɈM}I--&a z3>K:0 rcn;@\C ,u•(luH ׂ[7"][ }Dum);rM KlSe~.78v&n'351>X%DT&&Z] ަ3t5uǸNDꄣJsϪy,eû+v51 ݛiYCUR'd-U^`݄VɳȾ5,+d[{6IT }B zP=JUL~`XĀt5`.^Hf6<ލw> R9V'4̨ t}-qƠ~2] |.#?D#a嶈M9JJ2G{E$Gw(kv J##BU̴ ϣI/쪑">jYUA80nK^g0qN_&%k~0 ˵`ǍE귓 ?퉍?A ا尷|Rލ\g4u"u7x^6,Q`B R>V|doإ|a$R9H029#f N0A9?hS*$UONi۴,sg=4t!;;B]e}Y蓙^ԾJk%,~Jۯ-$bZXнi[mD`M2/`g Bipc*Ə aʑ7 ΢Hf5> Vd;6d1,mq8vdғ;[]rMU̅2QiYKNX:oόJ5p_ĤOn~ Xyz73sGJzTƶfn1.aMEۋMAǘIU o4_"NJϩcVTGҧx} "7jϊq1PO"EC7=h`QiAD7 ~>Z92QkT p$ |kω;RuZVφd4iSME 5,cxv U:٢t{pԽ95ำB`y$NK,5GAw%;!`} TV۠** 8(^:y tDOQU.ZHg1" 2W. K!8 A9&W;8Ph;;FzKcZ3,IYO4K7SAՃܞ `h`4{|MW0/c7k8-nȑ8M?Qz!o~9/MzNTLM7"=m$q7Gtf†2MOѱ>e8GCz))ᏼ M-qIf-Z[Q}17xgMTH8ܟY,u:;j>Aժ[);8"Tv,^O{@tUBH"ħ`u5kvP}՝pK`3!?m2J~! `vtV@Ra9zh]L v@^N Aji-asr|@.le;Zwt\2NH0#dSb g{H,s&׻]-4  ( ?>]txoבŮ^LKm>7b{;܅'f|鯡lY]nLuY8?tmUW<b!Nƙ.Ps|iǽnfTEc>XPb*jR8^C})qي=ayZ(%5%h#!dQj3N.#y0'ݧ~3Om ]l"@ԧ vSh2K\xJo04v%8mB :Y5Rl˕?JLFJK/*b6S;% ;/w}}- D`i9ZٺoE:dUNeq3P’KW wW<#(Jw}.CvpeBX!{B'K<1NQyvRS̭N^ -L&:V[QhGVBdY@0V7L7H 2ԡ6}maAU(:ߩԔCR?wN d{#=zx zN\p6vrTB\5:h~hfm~}F-ƆSv')(r,k~i{Ac% ,W hXx ӧտY٪h}䲯aD~􂖿B㸫}4D.4ڪ_i2]Lw/ViK$m(2Yy闯n<'9ncT\U0"Yב/ӕ0Dk) y54czYo3,ᩲkrc-wxq-JmIGizsbO!v&~K_[_+-gC`קy~7I,FjDa|ZHkseV!%7_yʖ\i/3)P@tAC:7W4GAEOȁq0yOi8&BaUX`Հjl% .yepv? zmXk.B5UeE$Al>8mZ] Ӷxb^o=|2r,6?f+p{'juM藨l_#!=0lu[ބizF7JNܝb2WEW2VhFj\'& @n | ^$Xs1v8oCg:1]{fg/rN!H `㲿>] /Z <ޫG|Z R؎m6I?V.U\رo,-X3wq=޽1{E?uE1"5Pe1RFN-wYp0.}Bk5qjgD/nuJ#rK MG(5e q-,[rn!A!HHf !b ^Jg; tCV::{7v#4mK sި=`5Xre5+ N_j4㼥RT2}ZaBPf֜TC: v1tU c%I*bLNwH~G:kPe43U$SSo?p].y]$V23*@i-{V؍ U]w/vrs-Uڷ? (3ã N*x7XVM*eQ C+YLb6\+^dJX5-ܺnZ'( {RjX9>(r<6a[TF/ n颟(;\_vZT:6f4d׽q: {'0hJwpZ& 4#C$J\k^ZhN hA(pQmq,iu^RlONz)ۙ=2,Zi>}eˏY_+ȓ+ҷ99(4j$aWP:#wCOm-MގlAu-dzW0zvBl?1-LҲФNtl }Ov9¡Yhę!?+vŌH{jay++hy{%wTD10Y-x?@[#Xc1'M5L5k%xka)sZ2Kj.S$=!OsZ zֿe1UBC:KTa/:"Ձ"뒕&w?pu-e_H{^˳'(`>yH6e_ * :C /ÍTp+l=B\RE kq]vH* qʚ\Pg"gllسf+ig["[+t-7+i]YU^}&;|$Cs 0@N*[AdFʹx`VqXgjp]jYL?$}rrks\)$bS pP*A?v 6´rF!K>Rٶ[/$=(F IC&|ItR^ԝD8/h16? vTP=n'@X^ .ohtKFr9qS N,$jwgB>FZMX䴒"WNk'W24`rl=]x k2eԄex_}HːOl6=$phV 1mIYs Z"zl7>jD DqLQ=~%ilm3sċFs歵ڢd=/RqiީX!hoz WGڿ-C4 X?}4ӵg^*T`zQfEr;V"S}#`o+?'2v?TWTw倪k+|:oU,on6&f -U0<.U7QhQW9ȑ!nH}_틐P]?0CKL]\- کՎpLNh8sQ,}: {7\28iZWR]_稇뱀 P l >|qLh'nԗyN`u.y~cP U{6L ^uJgi$TzIH4a`V|I(`{Do\_( j%a'ܼ*be_Z-fgCC >D/s5C.9#W3q#NhKV O\} OQdI!+u@Œ"+"40e9\*ίE`^f~luog 8 1=QRnCҴBd}s*ݵނOg}C`SBA$`]55Ƞτ!VOxNk-@'cמ 7% ٰلV,j۩sZnH VK+<]蟠2ӷBG$$r.xs#4!N5Wɀs0J6]wL$rU`/l~q{ 3%l(i?'2ZdNy.fBS7^W8qvPC(P(S%aŅ+ޘ=ܞ:5Tw \aua9hMvwh2cvw73z<Dq\c]rj+#BUZ0̈ aqJ^4}|11:_lBу-oUx u>MN3^_a>|! Jzlt,8'zB}ƻЖ.JGd vZF&XʞV\dsq׸'Bl0 ᵭV15IB8p9OF?ר\5k6pZ2s[199ȇn1Ozm/OYp޻87txͮnx'иɧK" ضy>Y৯?>/_|&K[5''[5}j.V< p_ħL0C9mG\=>]v& X _-"D9WP Q<`9`TA&9% })W 0]>]@9z#b!C:!Ռ:BPo6AoDD:F)Fnck*c&j't} DI_bi@jc9*lOtp]*Qd:MM`dkDE:oHx}j]sN`3ZFELU I.*ިS_FԸ-,[fs>s3I-Sh}*Vzn"i;,,}ne W4 ĈiOw [3ǀcU쒬`䊔[$Eq8P*=^ae:5fSe[}]<>\g5 D_ Z-PP.)K<;B )ev8 [A['*Kȭ UCE6n޶ئ8 X 1VؒdCKE;tj]9&u.lZè GrruD{{80yBq(ΊݸpwD_*dSH']&gUSQC#Rυ0;,/ˆ!D>EϕY!Cv2aP{mE0&}_H9P9Zz0A2D2Heb|W/JVRvMB*ںd4iQF+aF?9X+QdO1ؚ@Fd]QSyq \W=vnU!jnX KmȘ 6jg"[D 7m8| Hŷ)y|gStxT/s8gUӰC &w;AsPogXQ /ϽV eL*$]IU}EX? |I'1\ty؎ G(h %N>مsc:UOu$\F^GaYc*r~G\kWIm׽8%'1-̙@sd.v[ͪ !CyVls1s~)1C'8rOѺ/h?D_^Wȷ/ۥ% sȀ,Ru]ޑh]tGO6 X\d| ʻ7YݺށbЃg|%YC%W! {[(6"2ϸ$LF?(G-$?ɢws&JX#/~ k%+g#&-a{P 5\υMŲ5R1= *ERi HOK6NtՠY_SQayfg־nuZerijvH:x Hqyh>!A!: z"l|t4ƹ/Ȭ'dAH6 z.TCxD]6t*&BFa}aP-Y-) "ML+C p3Ҍ+eiN _dl}zΎb̬Pl/V7odY=oKyD6̏*%6 t2K>0\jäӕ6_LMsGD #dž7'p} ħ]zxp!%GgF;B7> "1i& 94BF{/R8;L;% 9" +{-!)!j u]M ݊P]ib&`y#o+cԛgB46핢ZE-@Fw~2 q?~ju; =ܘ=؁VuTBUB{Ay}cG VnJ-F3gza v8X b–\ALe% znL2 UxI'M6x]A ?sd<jL4/}ތ:%YxXY"$ ({jָCUؼ. /r!ڬY dd'H*BŽf+!3yEٓq8tE٧~vxnY\8ϩZO \s,I␖<̊ (ùTrJJR/%+-sOiݏY 6bt`T#002Qp!G _F[SsF9\1U9Wv]@UjP&NHĕ}*)Cpo-לM@uT ه$pzC@y6~*W[暩uX>yMن0l^A _uhM5U Aq׼B O)\вwQMI 3R*KǼ܀Nt{;N- y=D^շgpJ%F4LP62D~|/1DQ:ˬA1oŸݹҁ7 e ^E8q:/V f3察Xo0hەBhF .QR,f hbvn1=5Sp GexSS}{N)yHU! M]o?H(+uqR[ uvGP=hDa2!;vSC78OfǴC䛭f EhkgȌg=ME"$ $=44QZCm/P w0_!iUHxy7^5-" qV8MN}ڦkx 3䧒rVqבgyڛ#^>AH7Ʒ\d2Ժ99|]53ՁʍEϼb.Davn17 6K|6|CxQ&p!>^H=/c`#Ύ 3ZhFs6c1N~ʻ)9з޿{A#r=8piI/w/=KhXý3 1u.:Sc=bčz :)|K)+%+zg1ծ3"~%ܥ3 WпPۥlXo]|<.BS~ϭSQ6 [5F|rlK0A{GCAu;(Æ|R %q$aHiJcg1:ip(-(=Y9[RF*KPϨw*ܕ13Zlw L-,_fnN Eb괅gh[Lz( >$#håmDl&Ĵ#4P6HN|[f;? w FY>}ӳ.C$X"&u9\5K_R7f ȳyrsRG;Z*T<"9]#,<:TF}WŲn&[+@Ao6ma^_A!>d)b1wH!4RW?JXLbTPj("5[e^{h,zMX QB \$OXq ӯ;jQ9YreKW)eC?v~,Gn-BnHs`q~-}/6-/S}κH(lP8  3F޷];m>C q0Bp!VĈI,\a;u; Suj8iWܗ78G2GnxEls '5Lv2xI!l&ߖ:nyJ D'1,Af2%dʔ;L7_ÓU^?UFQ5wCUˑkpe~@jƱߵJڈ( nyrV?T:EKb֊Ȗ@{q߭ vDyX߅QgjZs4%A0!^.qBw>9QKݜWޕ(0y\VEs+!K]Zy jaLbJ.hY5lY]  ImXk5/[qa88@_Z?G)x;fsLE7V8Ty*&NӞ,t3 B*|tutDƁqQƊAqE55 /p*EFu+W.)0x <(I7 N!|H@r *е "Bp~SDw2yK (/SkduDrs@P@  R۟z|1^b H@9yuJTJI8$Ia,ׂȨ8]T M?/mBYJc;3 Lb0Nh)JֹT+V˔>ɰx{l/i{VX5sjۇ*^&y 2濆|i(^NDGάj0 4;6(̹Q-FA3Zgn)c_JM=I$̟;d F~m+pLL E{L~6Z 4:C]~Q4'&=kJe'?vE-5ZJ(,q3 @J:(m-.0OXr4$1U~8ofRS&)e=|9vsG{-(nTE8 9s ~ЉHRfj=O%LwS+8x3FCJ,?3Sz37'$*X;Dz(O!%G%.DG&|O Qk)C!wUrsX\,pAݑUgmӛ .<_ܼ5k!Sz2n4j'l}Cwd\q{Z 3p' ƒƾ;I,a}e*^G+- .m'!4MldJ 1v[!aGrg( b z\a(zqReg!';'QvzoI4&4cZ]yĵCQ+>gԄ| @D\DHjTI8}|Q 3ME[B{U~ _Ǧ5%heN/{ bPVq7|9s/4TҧC]p`cQtmȧOζл>]/mA.A8l/4 Y8|,we>"2kzdznine} /L{'UyST.nx?ʕs8#%Q[ 6 SнiOk'! X#rA+T1 o@-js ql]8?kT%}V@넞[mXf÷M &= ~hv {c{MBgU^k5qh*Q I V"CR4x &EgmUĄQnԶi5h4dD,SpS& Ig/6pUNJp ` })g߁gQ/mwTPg,HY{DVd q7r"c@1b2mq d;9EU1#ho = Af\]( +bewrJdSy՚nWK*CsQ%F;C~ժ]"0 J:RC-ϝ7|_V+9‘`Mzct`B5|ga?e[J ->HȵyqF^\pQgcv ` Ab\oB$^7709T*^VH)ޯFVS7$8&j8!q̴A ݯ܅` u_eS6gԁE%ٙ,7GX(4<{Ϻ DQgQkj \Rx(u< X~*Kb =6D6e7N V - {8\ӖI؜}o+i+#_z]g+3.3Iy^" 5f+vxJS7n.vPatJ5Xs76/4?Q3ͨ݇D߾3LIL%H{_5OT ylO3HyǦ|U 9?Z2zLD'Y8}pc f|=߶G~B(#c2/% y>Ws_%KO1e2O,Ƙ|hڨ5)S\A 0(8Br%CM|ڃwDwbIngb| IO'$%@Ec9"eS O;)WlCIautي+7t6}VW ĺx&@T6#oy}fzX8o}ϷgڜL?LQ %?Qd[̨ߟzBјųM$(iY՞O~xlf1"p=9cH5]}t+>L)UCbD8;kCWn&fܓOL'g}-; 8XG|i@4 ).E>$n|^"*a@Jr<:'g[У|˄|ꦖ:?/L:f Pv]!Nv1(B'iƲ>KHQ0|&2|mW)PP0<-\вk#E-skH4 !$Uq[7wçpguzr?tZ_^e%~y,+r_@)%jȒt:"m1ʰPag[e =k$'j fim H{HҊLچz-&yԬ4%~a`{l!V R PKDg(:ثYOlq+M)R'\=qxݱsL$?v I+#75HE8COyf,)*vZay Oȍ(,?߽wQ>G-b6eyq$Y1? l+tH*HPay.?K^9 ]f|n\  ;xa E CCċ(bn_j ,]m̶6N¤Ƕh}Yp gNQPQH21>5MM]5TzlO;mO'#d;dy>ź6Kz# r]uVy48[<[w-uAyc}(i {K|}ܬpQ*4?pp7O.^!Ϻ% 2wliU֭jL?[ Ƚ:G{<3m,]P [Uۋx^g7iX0^?ўLWcTvPؖc <к2Բ_)P&zhːqڑ-\J9vCto|mRr+=|*iv/aj v}E8P Rw(kaxCٙ}+wO)GCa2ɟD_sǩgwg.e&ӹ^N<srAS 37oIz`\Ql@91ˉ ›b TF$V<--xIV6hvp׭Zp-&ܦ;z䀬zb;ѝ[xB^a **G@ o.k9-F9rVW|n'\jKaX׳Ӊy3m.ٰu)qĘo *2ܪju${)\w;s0QEO3U7GxƑ)6"TEqln@$zl :o *$wWЅd`0Oqhaj EFVgcYɘHܢh|vx$?jqj8/Y{hJy^ alGĻWW7K5s+ϐ)f_S3@喫I0=qiѨԣ:FͽKj7=7 嫫M\wѽ%.;fL2pي~ j}Opd<=1 O j1بsۤrrtF1ES(&XRW󯾓nf=K 5-In` ۘM ^zi]+0 )?jOgüB*l!j2Lpm"4AY^MV`#۽0w^ 9Hj(W{{5w?li V7s)kjAxFI=@z0U,=|P%% 'ZD @~OG0Jܱ)پY8-S8h@|QUktCgi`H,(n1,N]@R镄Nq /Lٙb+<{kUl|IRR$BqY5n e.B&orm"+?y7c̛(פ9[}:]PΜ,SUU%MC9ɽQ5}$U[F&/!=? >=y7|;D*O0Wf*i͜J[h~^{bwL2 [nXܒ~l]ozj.V!ԫGwT еbzCIlj"0~iK{]"H\{[g9Sqjp\QnZQ,=?*s ${.J4)g!fNM\^FnUІS npv_aF 5"+5l8ifmDϬ!/[uBȐSr&P^e_{V?Y&I^+Cg3ma Wf'gA6W-uC&\"s/6Hʎ{kcdr 8l}McK$p'?z^Hp7WD:B1G4U -O[c*<'3`KWS2t{,3rN4&rRz6?S21{jRT$n ewk)9tSNɎByxbrYM A׼,1gmBTE sڝ>^>6{>`D j:'ɻa4*Ȓ?ϲW<FfM{:%(901/W,B  .' S50bn d@,=%YCf!؏Y^NߖZ^˧߰vTl4SXat+ jY@JRR?ב9 &#1^&?H#J_;JS^J9tts 0agb&EBǪl8Gf)݆nFL7 ݆h}zdb\ yEy,hBattĦv Yus7mOU (i d7+?~UܾM /!^5--HFO Ԡd}P 1=Wz)E*B@<[cߘ/<\xaw=A=+\:eLd:H]DKIȋ Y^Kz]Gd!GEKO3uS> iQ5BMD~2nmY5Q>L@/ E ,jA.(>iuXi9?LAi 1ڔl[{{MωŁ2vaYR +?' ԃ^?|s=<ה4xUmLQ$y)dP?n aHnlP I.+qޱ~!;i:͍S3I'.R0:'zfڠ@&^E6vRֵeH97W' Hi\mۏa6(buJ݂^Heث^ތٓ{bN)#(YpŝE‚ ZDI3 o38-ԍMtLYݱm\"w8gX#,M"ʚfgl^Lu2W^(/J{vE *xU™e;S^}1NT =vRܥ5 M<_mJS`)ԩ 5dr%w 6pۆ_.YU\mj+.9ۣݻ1*K)ؒnϕfw?Drd|RF*ې$1NH=Ͼ\ܿw+VXH~vaP׺{|mX2 ԩ1E[fiL ߮4Ub]y;vJtRFG&+"q"5+:WT{l~^ĄÛNδya 񕘺]O7:5d|>l}y[&h+AF)QbKڱJ%c8JJd0ܲ`l*BZ`w(Y9S vp7̴%J`2z+b"i Ǘ$,iE|:woV(`6P\̀mLcf>25bިl0}6os0Tw7O-,(Hu.𕑻U:O?廥TOJ޿tgDS7Х0g2^(7d+UERkQ:hZ`Qyg$\gk5e" `9HH+'<]'EIړOq@=jaY.略W4@f 2p4{X,2."!a*&%a{޺ K& mmfu(8_L1׀!ε5/RlpoO: NwV_@,J( Pa*4e&Dܾ 0 ԣJ~2;mxd LN}̖Yfz-\1Qےz 23m.)e>q7 ̩ ։6u_%|Ԍoֱ=,{00ؠVv @2ձ [ ?U'=R'PlSu &-DURHk յڪRBE~TpSU-/N2FX}*y7fb SHT߂ˑS4o%R|LjY>GX # c``/2%T+02h0`k~5^) !o qI*=֌^LYadz(OӮh2Ǘ5Skev>)mZTᱏ |ʃw)-}?޵9^RhP2&أO4) .a+BI!8|z3=­>rHSr'CDv~i ,o@ܿBDFL_c&k[dcw'5 T 3crhw20'1t[WaDd'̻e> ^BNgO@=pnJ@9NZdm3I"]bKh`ByլwWmr2O ru"u%;v,<\^ AA cwbPbӰQ%Iwvh~Wf|4u^$[Osa}$3#;>EQi{ r.rWmƒq[h gre̙mv.:ێ{VyOw^/K23UⰥXiEx-cP>Z6OUJc5ڢIehaAM eq,irGҵ)TX=¢ ݈_Nj g0-j#zsh+4R7&#9+58z4j*t6>\)s9_z|155ׯ|x JB}Zw` uH-K4xڮ/ FFdI=-WS=KDֶ h!]3,BCY.)Wzn=D>%^{WrEN&D=?Ų>ҏ Ro]ySICqqP 8tW ts@x+%*}F0ذ1VϴidwanA\ʹ'BF 7Ճ,yz:=c`0 =z{~ SX y ؋qF?pDhqO*Ro$r8D17"+LH^)"6+F*Y\Eµ߶ga(Ru|˳̡ŸP6Pl_Kk)w+ȱd,XGP샴Q0#.vV }6^uG~Lóu@GY"~frK23tJiCe5fOVE]9Xk|4wO4$ZLhUGu@ j1.L!lQXgsQTBVP&%#V|0FhXs.+aA2;e&Pـ}93|*w,1,*Zۇo.dgc җ mrbyQ Yr+t=,Ʃ5V~kBF [x1+Ϙsp>B'r?t 00QZhsKTu^ jFeʯ:` vLX%3iD1]_vv\i+c^*o>l=VxDVa+ f1;ܸ؇VX$,j45a/T#HH皇w·N5s27DCCep) =9[T`-?ytWȢ VbЂ2M Sj Cl~b4 !^$ M:B P/ ZOd<戸w{<:@p Lxz=6mM,Ò9vu&$#Æ e&+GF :fodX#=1 ס:}TXc{R#nn*@\  D[apbh $o[y.=}HX*j0;9_T *f`T'-DU&`{\qdfGjbiܡ%̒ףST@s.>Tݵ9OYioTz=bR$y0x΋)y2Z2EϟÊb(vSWW6@Jl/ޟo'v /Jv6<%<`` U\*FIn1J pN/&?S^S\iȜFΝc!OXXӐlT|[k>T& %b@e2f䝷 fV Q3qyЁ֔/RnO#o^\ WO7|;ԇ K'!w{O `)m> ޓB-|:S萕9A.38 l4}FTZDqk൳kw;(\cr I X$gsݫR}xthzd<W<8%'3a g T,/IF٢7\ݙu[FWϢڌHiSHE/nuNnM4!$h̡f}T)BF7lkf=h#1wYr2w2] +y Ī}[a x~tiU!GrLzΟ^a/qدXL>)X<>ݔvlyj )v])ӳ*)G" =TM*TU۬B+О[׻#}?Uy'T.=;/wZPGS+1>Xxi^Va y.'@^ c(-U#f8H$b/D Ɔ\:pjȌJ ѷMȺ Knnkd0Bɬ >x4下O'scoL7Rvl3Ýye#}d@R m`\X?Ygwr;LQl )?dzw8):*ltd@YYxa8Ab[uvfYCmθJ#Iӓ@M4u!3Cݱ& TW2IVECXzٞL攋C VƗzyV{}xp@PL2x5z`EeTɄnj3tbMWxm@{>9I~$e4Jsj6w@J 0h[jkϱ(w~pcYY#2&R6 «U{mҨNҋ&H~F^5RQi /[t3g^Qd`BiC N_}zɦ.yNm[$袣PSV+OKk_BdS=Ħh huQ.Eݿq|bAz E6)[& -~,b,uq_4>`T1'BsbeLWC1ȭ ~t/A|Eo<bS G%݄O0H{/{I[$%{GXed nSp~ph0a4u&@yd!8(b;΅(?j{^E cJ!~Dwy0<*pC0x> ՕP-C\ߛiV|W}2,BLJ5UWaߢ#Q3tIזSZrGӎ;Ju-jp~)d$m.zT3[ꥦ ̹;W֚U1O4#_=Njd; /{2䐢x9A| ;B&,[e\!A*?V|Zhh~Y7N9ǹF4`ܘіc(۲+!`SnۂALl U"܆q0I£X) +;hҘ!{0XD `3uc Uȏ AZ_>Y˙jR"L(Wc#WѵoCΈrQ<5zk^h4<ߺDM'RLݫ<}J* gb70 h@1b,0к#~ϫYtS\e% Xman_"sH`3t9#de@$>B6 ^ZF˷> 4kke4gRnKQz>)"YdA̭3^:vYefhRK`Cw_ukl`4[IWbGǎTٽ-"1L\y %?jY/{+KZ.רk->ab?2Mv@BV:Ļ+;i=m|S߆Ms|w3GxgGC ΓM>۵d6B}?0@&ːwɚ&i$&'şK?3J!ӌ3Mw Y۸ V*_P:tp$USH05DIfJN: yw5T1Q6_J g@ΰ!˽Qrv@ 1߲8ZD+<#* Dr)λ-+FR52j"y23$p$vz,,T V(CߌX0|%|v xx'객\.(==: WE w{l u\zFoqWj QO}TW |6'sZxLH{lCB%eJJZyK<i=EĿz4TVT&͑""ݲ&c:PJNl;F:='*_EacSH\؏ VڕH揄.jQJs< tzdRq ǧCo5o!&Y#ܦcVeV߹22ȝ>X' u5d9vG濁^9NVn<2TQrL(7:QYwR #;=M<F}2v^XVU[υLB/ᢌo*. (lj)-]m8;iBā[j>1+hmz0 YZcaret/data/scat.RData0000644000176200001440000001174313153613153014137 0ustar liggesusers\{h\Wz=/ٲ,YOsH#C;ײRmgݸݮWeG-i%9BZ(P(,YJhKYXX eaY(\ZJt)v KӖM69{֧ZTڔ&k_Y8lYw_\;*4F@CDf\ 4Eɟ22Ыe(j2eh7Lrʷ-Wg$(]a~yW_8yyRūK$<}qy~Q|L :V@Z@@w 66S-t٫tW/1n6?4sa oSMSTg|vkf91A'ge{YF d 9 !uFW/$tcZYG^cZ;AwzԠ-)Ng~=vDDBnܨY5:DSyUeCϤQwHiL?rFhgU$4s k.] N//b/oK݈4뛷ڿI7*r(i>)8eA=Ԭ7ŧSSD]9hp^j=Uc&αQjM9vU(ȋ2*;KRVX7U_">9VWSR$.FAKLk}VCهe߇r/A#/VgyA([Qڸ./5/VEI})Ww&WXoN:"䦞Kg@&/KړvR~A?n<ԿIk@kB/,)??S]E5}vg3/G._Nt~cH]3].\9wfdyFߐHwӟ%=zG 8+jQ/ 9A;2@!Ƹj)qs_|37 ꣧aoG1 6ih7C?B4ОFM=62r蟅<#0p8e?"ɇr/"E;B:?JPZ;uC9xo;hGUA5qvRUq?zQa_ĸ簮שC!;$1ySum|&)79cɇtjrO | ?Hz)SR~SVc|ppk-ҟKoI~*_C#))ȇ6Iߪ%;t2Z ;}$u@vq7K{[;ϻ=7>w^AEҲt3b/on{dגq `{øxWQC{@C?=ޓ"YUoKoS>)5?~rޜw~D΃`@'Ln|&9^exۆ~7)}q;aM?%udZʓW;.ףb;!(a=(}{'~O/} vC^ea_h|۴n(a\+ |#F]˿۰~0SR)9>Џu;}O%>;4A'rryyIߛr|zE_βޘۛ~񊒿WtW/^nC<{e9W -//e}zA^A˛țiwo% u9>ԋ;yM ~Ҿ^Q+RN@nګSN^^+?r>KX7zdO?>>zrlvߏzQ :XB} nCmX:!oySiZqzPva#`;As_a텼{~/O{`.؁A'nع `ܟr6cVn; ~븻 Gt{_ C\.o?i/>(%ϡ1vꃒz@<z5nG«cKO.\h93?Lpqf\?=qzyv~wOTpn9=3w% Ԭ`9hm~jz!z9Y>zO[ oXoYrmfny\ZtqQ0Ԍeq[4zS-&o`A[?oAwjYr6]O?gn=zg}gĿ??vIr} 7'` gO:oyooysW N 8%! xD8+K'<%+*io !`Z'XW<#`Vo xVUy )hYu  `%>K×jo_4} +0hmiAkÿb  ,s| ˯[!sѺa\]A`ܗ;}d:ٶ5 qqܘnĀ d&@56 |M9YnN:cgʺce 8=;mzFKƀ3˅q&zJou 7f8md |8Xoce 1n< |m{Ā:#)*n,s cLڀ3d 8,Ul(&+0NpCc8%*8= KfԀ|9[|NMUP0j4r!T`%e0@ *L ʄfj6"Pm;v}(8'33GUApYn,Tb5}+7bq*8ۀ3 &acx8zUQ?Xbbqb$}O?kzBCozLݠU&_n{; Z"hDwgz/τ3mzQ}-W+oz/,-//\:gW}[;zPa>)V:{m#e@=ng uC4ZZ^|V+zUpSFy޴4BJWfQM;iT%9֘tPH:`;%4 ^OtǯGzS 5fMa1hpxU1; j׉Jkdd=́Zkk-R IU_74UZjt;j Rh@>iDʏo?h'7f QXwKghIqqkq4LL(;ղ]$7DZEɠSKw1I'JZr%k\k3k#<CCWC?O5o_v}護=~ &@m ԣ3Io&^nݺI_X_b}wcaret/data/dhfr.RData0000644000176200001440000067704013153613153014140 0ustar liggesusers7zXZi"6!Xᅃ])TW"nRʟX\qjnj-1ӄڧϓ$  ʹRCLTrsC]c*okt[9Hf6Ӌ[BD Fr"R+a1Qb5heo<%ԣkr~sn %y;"l\ʁA?o]scS[ilw}t1>'Wcݟo^pMC񍑩J Y|>RRHzmZ0d9N@_uؘKXv! $QkOW2Ќe/h%n/N/mA0\c }%ęUQɞٙqp'U ŗ>$Xk%2h6$6s*2pDz ӲTj4#ULHėwxwn D@yoUhMj; 7OO*z%Dpft7ߓ#ȅ;-uS+z0++ DHh1ؖޖ Is=`_CwISyk-Aڎ9?<$5S\8"K9^>\[_G.!L,nCLu?"jGP$lC"MJ4{U?ʬyZ<+7,g<ՊQT?max A!_nyB͂{D)XenƵ)lΏv|ߥ4I gn][I2ځzgQy4Qe=%K!⻚>Oixy۝%" RkS9)m*W5‹q޶Mt#VeR\ K1}O=U5ӪoP/ ẇ92~Ջ~!﷼,$ ;>W ڠjFZ؈t{H*'KG;_0ysh,^ P5vCpطfZ_*.j v'`U |g'^zJ#js:oV%'_~ ]vv}h ;tF+# +՛;Wect|VR|T~ЕR}ؕpUm9-Mz ^ҜKsqE>qэgcHydYWK搄5kGE'^2RC6sX4q˲Ȼ'@ ʚ#e(wʹS$[8ClG ~ZFܰ_1Ax:*'~RWMʅΒP4։EZb&9"2V "2ӬOUOo2i~ŏT#T϶& 0>Y% P)s_ʪ-oK[Ԑ@Vv_ǘXZq Vv.G3pҫw/ eKt xO$E76<.'Rן|-1梱{RxݳstZ19zUBi'FgNv|^v]52n=um&fǔo66E&<0F<)wB\d?A!5\);Zg(f&9$.p/8,rT௼Y$Sv}3"\oBRwϢʗ{V{bL|S}Fx˩Ɂe\|s7w@ gcs?\>Y=(w$Z>';'5M1ڿoB;a/O# }9شpپ.gNC񌷝|QVC6Bk>tW;Y*ѠS=lYyJXvʹ:~….GQCj;ɥ:*#r%ؓ;gRf+lq%/Grv( ,\q͝-m*<:Ҝ]aCR|~2X-_|`iy4,Fn /6d\rϷNDl SA62Ԩ=f™jt_;?ͫ:~mXZQRѦ.\/(E" :tG4-k~a[uV g~1'-(ID2f2wx0Z'x@Ekwd1YȚ`uK@/OmUZ.F"˱oZ,ǔP7d na6MTG)8_v|@[xeQE[?9f&@Pܔ6lӝJFv9-"ҷ})~WmF= 2] PHicB@^|.Ё>@5 nO-\yPNrhʼnc,|Fc4tjo?JPZ> T02fϐ5`2b-:Iu>]ܸuF1yv*BH7)c-AQ8+;gv[\3g\s庪#bd'MgHXiOp G hLǂfRBQ牢g#Зspy\3%^uͧc5D|#|e_ߔ~,̓~ (7ˮRiLw#ĻؿЮDtс'+D'yd$@F.+^^BWcTk#2GgI~y+:RF-6 [[fml͑g9^Y&skܧO~Z0IK} ^,5±P's <竣5p}[j.M3OJnXKkoAR襠"{T?$_Ze;E+>i $V;B 8U1(Մ )r|Ui%C .jw+6VRmqHwh E8K?ܤkZMApђ}.NYe|q"[gn+ln9VvhkrpDzo UNR]%,{*csa(IN:7F' Q[(eLlީMji~\,[Wfn|xHsgys Y5n:c5F+16y )fmqS_v霨yl 4fMMy>GL;׮9N([j#yFnC5ؼR|W]P]ڋ׿*d?u/7ky}OЅvŇ1 VGZ.?ˈxryÇ!?#``)}fb  gnC2Wػlnٻz'UV^-w 4zfhP{<ݠy |NDd87s?r$|rn?u\/4;ecĂRw5"% )'o$T)=*hY=!N['Ctkɑz>kQM!5YM,gr1Ef-`s#P5lNz khJPai_ESd*kixA@nTlӃ\?VYef@|_ T|&h9O7N+ˆƫw9k%RMN/sP!# e@"N*;KBRWpJP HE^o#iyy~:xrwjKn<$R1y TB}vg!;OnPIVUE Jkr]+W$aK!=!\Mh{Ȏt"YOeBn;g%8}.p(52zը2RKa^hΞ#Efw9^c< ?Eo3b/c^MOdW> 2MUz>k($tܚCެ̣#G6b D+ `0 v3󵑢IYRу7tCJrHlcӫYO"vړ5)ߓ 0L=U]L7Ow>AU [,l1ghW0u-7e{dwj~93?!b^;CUK1ۧ9q{:@ umۛQ37NKxqI7^nk5jzsEa&Y0ie NctT%h~ !&sE; ynxq _! SF?F^@p+0/fl:D!ÂfOߐ`Ro )V F]/$YB.=tnk.u{P/VlrUW8ʿ}jV7]dʝ(S4@Y~g(!si܋5ޝy1 o ݆T-Y޷31V($mBrbQBE]n`zmYStXpr%lgU%Ns悥pgRI7uD^d‰06pY`PR13[)X$98SY+K X-_~P5܂P%)Rymm%y+dr#ds6.2-zDqPzF@m|vZnaBB]^@BB s@zY䀉ͨE)].,HJ^ꒄb);*o~ wВH"lvG_qo|. ւP >vN>oMV˘,`ulƶ5ؖRr`Y,z ?]AGF}U'tpIN9F/y@cUj{# ^^]ݯgް&ivಇ/qlNಂӱN!JQ;>"iH4 +Z^Z9n|HK&25oTmM~jm\x2NYL)F,۰px BNRЗ}` ?uܠ9ˑ/4Xw8v5%7eay/ƕD,ȉ {gy9J,>A[R#渄[#䒪8z2=ygcf./1 y! ,( ">Y+>~Zak`7ea5 8TmE8brkB(!11 Us+mḟ$Ot:f"ʬ䮚`ӘLX,t3(_&Pg;$zpP&262>%Ђ5zpic#Iz0~SPSf n^1}L j_ M}FqþJHԖ#gޒ~\s]TOPɂvdVd7Ю? M"~t_ɄQ3DpާNwC\V8>,"#p|48ބ y}\]v\F '}s=zʻR6eY|x) CFwoRZcʙ4ޏxJלLg"+"3Kxa>9\IL!OqOz 3?0dNbj2n'mtڻeXk;0$Ec+K%Gh59AeXv&n4AGrQm"d"MЍF0Djyn[Ը ;{4VN26߀y'Jv78SX#jyG@nr߬'+'gI6}H_7s%b{[ m0 V ɮ7(&L)E9R#,ÅKw32 ` 5˘P#53yT1]՜zhI0cD T0oJr^b*?㯅Y?;H523|֬>,ܢ4m@\\p[&BeҚ\߫Jp]M遭F84 3+/4ƌw".DC@ϗbv݄rc(o )Yc9u%\) %aOswsdߛѬ C b(30b/uvmoR|UW I0M +EE[U ' xhf0c(b PQ>lna`6R)Ɂ"2"2ƍ$hU&0ץ؅)iߍ7ٺUxnm),ЎDٚ71XVF@ߍfQ3Zu?Ӕ`|IO92 M ouD2RBZ{4q Ǽ_tOvsuq.;Fxn٩t4`VMcObTR? %5dU]x5/8"U1fMf{(" U$e?kB Som;ٖW4WZz!x*ΚKG3W Sc>fhҳ戺2ld;J#=@EC<;]/EUo3L'IcP×3ȵ/^$)G  D2( Tt5M{RVumsD1 XTY+#lmb-^-ίH)}}dsQߟ-DC{<h@ckJg^MŬ۞YM(!^b:~\SŁ_gs/]k5ㆬ4)V ˻NS*>y LD.<4/_y6iHeJYz[\O"j_I-D?BM!ls;oKbfYevٕr- =֫WŧȲ.iG|=@kVU>^dkqr=񙓲]:zi u^va0{?jE=|<CpJ8-K +L V7^guP DA ]SvXK^Լl<\2&R.,+lrf6o rwv /Z@P I3P#[Vd^'Ec u01(V?I?ssjP.`A=;0Hnq> Iu?{ƣz=,#`5 xӥ 1n?a009]&RKz2d-9xaO7ru0~*zM $HWP9G<?g:\ D ~* D t$]噲;vB*]%NC$Ɖ~L/41R9 !~޵ˣVڠ,b9l} ^:"\Xӿt9:lPdPa]vFIrX H\ZDz"OÐWyUT=x1/hEI$]>-Y$R&~'=b꽶i)8C7RYz]"'?Cl~ xءl,>R1H9!N=8ٮ_Ga\ W 2d^꿺=l]/ؠK8ͅSvu 3ePM^a)lr1Kҏ>\QM?3&1ބex8"Mr9pACR{>@_2lVNmzwHO\ic } ks;ҭS咨@&,$dJ ںެ}hd5x7m_gai E~`mRݦoCau8VnɅL>" o I7حNRb~5%p+72-=MEHɺ#ua m~֌lP?~tg2$F&9LHZs-Hۭ 4q2lS?:7}`[sG;3df4pg \f1?x޾ICG谿xd1 垈kh RR~d=m-i!I{XܹƉu8Us|o'oq) ,mc ՟8؂6-I`4M"A`>ƺ1@m2윍`"3L1}>B7<#,hqgʝ:ݺ> 1HbHV_RN|s`@)=A_y3.[&ϸL5oŰ1~燪6OāsIiLf""}f,f|΀?BO\B݊X(xWlJŗxvrT7ۻ\naҮ(㯈r۩oИ'e-9 E.M"ר,iS'Xwl UM1$Sw7^q@ Tded+xgʶBf(  _Yί. x.+SW 󬾒8mOUBT;O"8|!gSVڗ/ƣVC=ZʵBr٘Aَ?n %py %1O)O˥l4>ʼn?BGsKaMAԊ*0-̳n{VBLV g5&!Jј5S^7dAv k~πJaGFmZJL$_~I([GN;i% VOh sW|_){}:;˷o|%ݢaR>߁qg 3'^"4k|o~ x܇Mж#OA9 H0 1 u$#^r4Vv$hyI&TT~VE~Rƍ[454xڟn#;Lð,]znk1IzpETwNz-ݣr\NSOt,]1޸ڼ7NhXak~t\doj#zX"̱F-,J X2SQ5g[[@5̺i&(Z=~bZ@5ȇb={@$[@d%oZa<U*ࢬK08Xk`Z >~񕈴${իIO9bX$ΣLuIMAS}E[vpe#I^S sﲳ ׭xX Lɼ%Nt(f(jX/uX̀P"`OjkwN4 I4K1暿ցhڍj_nYo 9ʀ,Ȩl"t7i!P_VRxWǿieswZL֏wR]i:KPy3Ga]/Ygg!(n9G~ q(oAOU ]_L app:8N,<ԧmX 7:miЙ!# γ#g"*,!uLgZF(Fm LGlYڥ k)< ]Z,qǘAJ8zJfz oU9k>srtʶ=NuXRw bʆҳ@Φ*)Wl}.+(cwa ==Ye qNAJɥZUCoGqW@gC= y8Y8'$X` ڥp!=V}F/Tnr4/?( '+qu:40>(:V_3I`isqM*̥]ɟ^ʆ9r ::B@5`;gU/O9wsN"ؠ/߀Q,+mҋ7kQC h+\rS6+D#ӰO\8L vtwӠt(1`~YL. CD;-,)TBW; ȍ&MWcab{$]\q+7!%qFFL9kIMGeh ӣBeお+ЅZfJDr {DDW-uK)yAu2f]h^uv/j ?=(9}zN~=#yٕQ)DQe% q,.ۓ4پE좎֗d".?+ #8X^`iֳ%4'hΑD7r)#hQN/? pJ1}4(NIs⡲d=L{YEhMD&Dlx ~xq܁u6#9Οl9nC3/u[+3*¦`6 $I¶_bG1s7P}C@䆯V=.=Wդ|E3yoۼ HδLvoNP{H[0Er5eQ A[٦x=@y͝V/]$Iq{V\!Pi<z&L`oDAm [>Uh^ɡVNkP}ᡒE^.5/^ZV&IeuŽ9L`T h$ED:5p 6MTӪV@][E$;I μq`ĄG$"5abY$MYUGYY#uɞ_L_ƕm%qWcj?Fw,P*UQ77c3N!Kqa:މ:VᴲD6gmwJ% Kc՟G>Œx62x0 ;UNy5`oh9U97ċ;,Wө{rbZ_ y&J `Xw%cN!| BDj> ~FF+.zuB D'P+q=s7c_͏+d1dCõFR:㟐ω1<+4^)xL"S+OJ+[lE6ҶzA3uu>@!?)egTg%vMo锔޻hfo;vu,wpRJPYArG/C`vwFf5{®بN"}FOvzēENYǴy*959/YסlMJ9BKR4]XN}_@=a[9RnIі(qX1ՁQ % S"•a~c(SC3V֔ZnSYSeBlQt",ڷMKu$(n2G ciu5? zcI)|¢B7(y222q6#M5`AbLu,^3?JCE %ãtN$#1w,lZ@;wXqznJ**ׇaXbU_]~ ͞8NUH,ľ+ zC5ccP 5e*gHMs5-c/EpIle?&qQ ^Jf*ofmK[6` 'R\k8Sp"pȽ& T=R v.N+M0/ x4@IENu7׈^opYc-ɤ ׃"%Fr^-&odq>[n %#T1o ~-ۈ$)u*s[oͻP5 k'NRG ^κeСID3/Lcx>UPiRO5rp/ Dk{vwi :Nrt ԊңM'k)9/xO6*|crS?ߋl# W IaQjanEġ~`unh~>*ǻ.fIwHK6ڙ(f <璌9G9RkT_4+7+/!wMwyXn7uuR~iD>OY<-c(S3^kηfUiI#0;[(=):6Gw pHIUrKsk0?dTɫi`&a1mYs|bˁv[+-Ixy.f5ms8*c ֊$pɩp Bn+DȢrC5&Uwd8ғQRk'c{Y-#Z@k5#(vS| &= {[ߎ\9An ?J10Pw3i WtZ؊PZ2Nte[b\CzӭXwB{jUҥ<(<ݿa/ˁ/k^;4jΆ}<, qH'8>6;$553~Y-aT]<ڭF5$DtU.i;Sb{Ʀ͵؇pkJ%8O߽M1A:9~TE/y{ESۗG$@{}r1;lea~[WH7Vœ4)Q@:+)##=K G hy>B!柀6_]E{a}nb4@((YhpqVٲGFvO( `0|4Kp೅sk P(ˊer/npG}]3ɠjuS?'DuV%1f( ed]8Kj:z!me8tH[WRyD:lE['-=%T0I!*0Dxsy TzQs1`dS[,C TYœxMTP 캼e~t#*5e? BW-|\Z:̴=)hOzu6p#+ё7<8 w>ɹ%_%tE?{lS}fEgKx`-yN쇿{_,SQA<GRzmqYFľй,ń;41 _WCRG:T9y9x]BJ3}fG9*akrә8Ze'Xx.V>Cy'2M:sUlͫPqI{Ajx 4sM#v[UI}՘ ˄P.]b,n 6#K͊?z5K9T^\kjJCcFL!5J0rbЏ1K~8[D DZ >{CQ#9 ч$d_m4No<4Ҍ&^*7u$LĤ~!\mcڴd܁2 GcS5H?9]v~tvrs;! Or%ޏgҳҎg_BcP1ܮ')HrsI7D1o͝DoQLKX6~bo+dOq5S2'O,5xwH~T6Q7Gf`,CGG7w:U+jp3kB&>+yy!u\pm uB+rbDNɞ"R޼H|PlÆNƝ1M1ǫk\SC6GZJ!>#z,J҂u(8p@zOaD5DA@{0FFWeA/2ѳI_%qoa P;rQ3e:9R\?#  BU q?1X`[2Vf `%t)i=mQys*tB,X Ɗ''ƕ1 FRY:&*-," v6-BdۦM:J#Hb-Dҙ{p8ߔ645`?`:KsEA[ rƋZk}Z?gl  K4L gG+&QgtP\'EKCp0La|) RX'Ŕ%scTQ]"lAa/o u, HH@SSҬhnТi֋HAP֎:D3s:4m`}qfӈC Hr MO*v(}B3wWq&9wjDk[%>S9@@,EKLk8bs' ZE>B 0g[@/هlߔB[:s<+*,c,߂xK>dLdX' =X*)4d.1K)T!?32NKu{Ѳ51j1n[[,:5lmk1OFV΀v 0v/݈(7"f_5BSnH)U9p:ZW-DTbO i[ oQwԒ >>;$T@ZO11C*j)9X~U5Fg *RoE#ߐq q"YRƫb^;uL ̈<|$ i4gӑKӪ^/"8j< %W˜aF? j@xrwf|iUep5TSE4 PiCޫ^-(Ok !7~ X`$:n smH*K-Vh,RDF]CLfe/.b;<InHIFr ln(x[HnD 1ȈlVNDn=:,+a;if`BWܠzjo}=+ _3Bھ X-~j7D_ёCAz=DWL|h9딦A֑ۊA-'~@?W@k-YI!/0D0je*9 $;sxݳuF)FX .iԈ:MJd7' qy]8lW#ϙNB, *xdkU@z5=Ξq=Efj&mB֏hjYN~ct.ݢS0fQfKMU)&/ߗsIH' 'CIm㿢6b"eq;UArՂ?-kA!!W,)/\$ 1 ;BUXuga%㻮K|b1 7-^+_$3 ݐJ,_398ml|H >4xxU!q$&O>Iwj_Ly˔W|@,}[9zHDUGՐ_jo,3Hm=vžչH-f=k[5;f3UA_RT^Eg&,j&Uٰ ly5ܙ| B<=b9^Q#_$/XN(ǯ͠PR+v^s9No4!:[~.bDfzUJ!¿s3+!(g6H r /=vNa5:/ q\F4PQ9S 4둔EX}wפ`x`h.ʬV $!4V3~W6VS 1o,:% A0UL3UL=9`@H2EľzD]G\HlMd[i~:5Pa;=˼^>e3ݶ[`h om;WAvFLIJe-41l`ld2L1kR7G^"1Cڏ!|CZǚ#ŷPla}OJ,n/18,Pp;ăqID+- #XI v#oma\{Ɠ S_=!#՝0P+:n|H\OȜƩH| o(ҽZq^fhϸX3 -gT(}u4*WttxĢ|QV( aYNW1Y&w6 S7M3ޭcCy?_X*S \gOy iy 6߈ݏ:#-%a_˧Ԥmh2EC|&Q%cTkpqBCg%2Gk],U|TdMykp摛4PJ@5ZBRig5O_Hkxh;Z[W5"95%Ge=HFjot<(5 eH,;Cb+ifgx\ n\:ؗ5o&Ö\K@5+y-"QDOQL*Dp:ECl,3ɢr A}UH},U9-R) >oYW)w (zKZ ><t)1Ngz%0-FW 9U.͠%(B ǝkL|LwkI&WyWT٢־ͅJU+,4P)\)nAj;$E;bSev2T{YAO;Rd4;.eVrSZ/hΆrBJ)`j UIGi Iנ(a {QГoTt/J{l`nʳV݉(lTMeDŽY'ʵ\()= ,qfs ƻ@Ye=u[f0㴓:[גBI #˞E铨OwU z-iFy:ʆ2iVN5%ҳiQ<\Sy71yHe^~?r!(eS UxŹ'KMSv^/^P KE}M1~!S{f, !K41/HJ<}\rɋD(Lm8}C7!*p!D՛ 5lƼajl,mǿ%`[4-BeuMR(Jnzz/"ܑ !t}SR`f9 idf/)?gOM\.P Ez)gUWӤcK^닶{}馰 x{P(}D̄6EJ0Hm4N&5y`SoIL |9KeG,Zt =&;x 榣X~3;crR",)JKL퉚A73{ǒx*⦲O5#ҵ~6'U!ڻո#n :x;.0DxL[ॶ_;;}77[+/Y4maYʔeveLNcb+Ȣ'Qܒ$BcD v:•kO6A̰ϊ~wQ NfȮ)0]qԅdG>GPԡ`~$yWҎ=λP^|cq9ƹ 4enh(ۯ{lZS[m.Z39X;zPV))b a-n@߻E^l200P)B 7 <ؓJ勤 2o\|[XaF0ĪmmUG=Qt1* /B&}릍d=X3:1 %>sZNz #Yj7̎nպ q5AY#{ZRckZKQ ̾ 6hӥt;(sXѽA0yفjC6{xPЈS;'#yW8e9sR0$5 -G +E#A4?6>ekT%0gc<qB)BnzM8/#yMO ױ;0]uz)3#N{6BNVebJ66C ôVeS,] 4*Qf!`%⊨;m- K  1 v.~~l2g o>Y~M](*- y 9o2 JU [rՎ^YVۈͽ gA|pDZpZNELCW#nL*F4B\h #u"Ԃج|iڌ47 ,%H (Cq p. IqeT pߺI> R1c'2B}JMeR6yVT?m̦kr'4]Y_\tVjn0&%F0ws*7.*+^jl}7ު݅P}*M2M:DF˜#I`6i8a&щy+. ?6k;7EZZ5SObS"-j]|׉ S^?L {]<* tpN]^[=HWJ;/oE2x j b/2FXBFw9O:8l]; "h4 6])v4Cn}obΟO߳jzg%*5G:P5rpH .G ֋cD;߼zn"lۥ'6z+<>r X9tM~+N +w7rV9od< 3Υ<)J=,KETbU)JUc$3{ N䍨1Jx<&>76u)6Ȭ :%+ tr5ېT߆{DWqg g~Qk^2@52z *7qJ:0凌41B[+w!л $a k0b /t90>3RWrc^5?$WHV} 鑴Ck8w((;%UK3Hv l2OvH RVy_}>ByvcPmZYK8 *uP6* 37|x6znjиaDtI؋xL/{"u;4!SoڟX=D+AtcgԠ'B NͫP̙ϜPtwMP5:zCXh2s84]M8WD}'4eXa).mѬ !R-T15 ೎b=d"L6*e〦a^}Jha`[ͪ:-wpyBM;Q|rjj3#{/!w NdRW`blNצŰ~Z51uU,Y&o Kc:_'r`7Kl'gMYyN x*.A$BM/EV\K$[sr3L,NJocƐ)eolQiG-A;E+#kljgL )*1Kd!݋uͣ@Ϸj2dziw{pt`2IaV?)*(cȣ\' )Rp C/3^deK%9Ie& wa=aG8=讙{e wI\(îf>by#p.@𧴕eR RhKB)>pȳ&ij%K ,81iV*lQ8UUn#vOݘcS7D,Kݗ"GynN@H|~?}zLZ?z+ # ]t.q07hmKG-_D×pl@ %'s$u]5\'#H޳=y?K=,yF];r6-᤼'šyk1t 1ĔZWCڔ$c_mS#'{mԜ E/6EqQX,BcCTǛ ?;_9ձ*StAOK#XiiQ%WÐQrDL,Y9#kי C)us.0"C薡c?b4!l2 ]֧!_Xjgjd%L"(MOlUUUU=-n gKv ƩdF= ڳrw-雚r&&prf{BO"S Ȇ p;@ۊ[XH@"@_b,wc|P!Z5ľbхS^T n=fc8"T3V!Z9]YԲ WX4b~]RElo?`K֢fWYi/VbYL,mqw2ҷ;#"Ɖ_pLs!a)"~y{ Bj;a?Cfrwunw㫹I$F3~}@:Ek*`#ۮ9 I!.`Êo_p|?xNYg>@{""zJKj -eRD@lM\m ! 7Lo`$o]9O1!>).iFēr)od`NSε3N R>1$2%ʉ#`:_灪9Y2m$#r[.ֿ=\v3Ac^UG[-Ͱ'3SN up6a0ECeZm!N`":s0R.Oxua#lj~Drl[TewZB }tmQlJWdY 7}mP(WL>VVWwa+4(*੯J2Ue@wP2猄g>>yqGOW}swdz˄{V ߤu̟<5`jSw9a P`aα|_5'xt 3"=י|ːXĠ22RrMY,xQPٸ6(7MY=vM5qev75P~ xIEa0hgOpz39̘δzƉ̎"a+~ݜT,xI hdK?Th<:#9-,(+io?PucNו!\PC.H.v%2Pz@r;so$gՌ< n0|wO`&]WKĵ&[Sqz%O)#cVdLL&JۿIxBIUr{ﭠ:tbR63ilBH6S/K!lo׍aijdbp@4`?2w{Ýq^_Fl"Y:(_XJ)Jg8G'`uUö+jF\0J6UkR;< pWe$F4eR l5Lo04suғә+Jl=Γ5lיldC@@=*8@ܾRLA/0yKZ^dMSt:4u6tL|B;(=r;f!N>ߕJZRa)EYwDEȯt"QUꡉ75<A䧧qC[ͪWNnHfj_(bJ#Y|1(0nBXdmEw PgKÛ]P|cix2t}A1(ԶXP57!IvQBN_ek]㋶E @tp'C~KLd ^ӉiY/% U]*ZuPMOr|i$®/EѨ1w> 3d7-Yұz.X4' `ZTqU')BS,z7'vJM֭nLݭQa),TO& aŗ$t@!˵#j!rU_prٷ' >ǂx@6D<׼o8,]J ѻS,b)eFŋNَvx5]2C q>/6VWv잼F &%zƍ(3̂d8D(֍Fii/|+= ؤhY%W{e)p,HI!bިqGXVœ{>?r e;ٚRK9״ȥd<;;#4-Gg5mYϣk0+H8$^#5pzIP2!*(yø VGC4~:S؀945G&Qt\ o] ]ϧUKkJܒ`4x@._~vac fCyؗ<Ԟ0iRz󤂓ZvF\D*XLsu':L)pT ER,V u)YV}zKaD\xy)hݞj"|nuE%Cj=! |maW @`k`>94HN}~/ p,9…}>E ڔz:%DA̵'ÕO[ cVJpImKclpAhd r#ZA{?1-.[-+ޡ(QIi[iҥp*8*hx^x*C{+P-4zW)by lYw6j⃏6 LL.@xjaINBWŎ QWŠ|FoP9#(kZfe7s'9X J2l|[7Ŕ S3aM&EZ>zE `i3b$ }F?A#6[p8.F+n?UVΐWkNKf)3㶆 (6g!m0D:A>84nAdE1CNЫ JVpRHHy ;_[q:z>/un)?)0΅&z17HAAY]Q % 6bF!IJJ-r T6wrKXt1dʥ <=x=x. go5a%ѽ]u੫<0E!z7f , q~v-; -O}xuB{sl]_Hm=4D'7r(0ws#[Ķd(d1bь&.Xg3Ň!&?˿$ųKWv9 2Q}_P&Xvekt.dڵ{`ʞY m=anF٭ td 7T 5+Pv̳)sG0?;C#}XHн1#U/9_/egF [P!I $b?X|8P Y:d YaϬ0ﬞ8G%ΊH-z.t> s*zqiq<[Yك3o@i+xUʊBddkȵ+2\4%qBοy>V*4UK :UF{,7!R,)/GpVEDʟ~zw!L`-!ܮa~gw[!:I}uO#n6wS]2'Lt~J. ^|mcߠ8fH0o}?,Te\˜6c5؂Ww΢qS`oOQCCդrh otɆb5A1l\צ<+@R]y+ݣzw|R7آ5w}F$(0ys5s,Z:/= 8٧ˇoz2nE58.D0VI+NbNkLhk"hAk=P8DUPu*3!#;mC\qm,O7~qEK4( !j7;682@緋ˤꅆfnr>/3j@ eE~ ^n>ieA}{tzhQGzY$n]+aijn[Dd:6fԆ֧cuQ<-]dZ؋@Ջ00N{.m=;^BM)! !}*CkУ] mO@$CLFQ:쌹i!g̷WG Gns=4[2K _ܠ `'l!q(l8Z-B2k܊  }dɀ9YŏDՏILVg+fF]Ux\-:)Ǚ1,@CN4WX K1G5@i_N`b[aѝz&YttMl4'WVĵ w'O։;9!U1xV& =اK WS/J9Tp{uKRR*&ǝ|sl~WQ@۰MWJgE+dM\mu"}a`BHNN uA}fU*( JIP],O]xKaRVfS?zjz*}[[ֳ=,ER0}p4H:XSjJȱkh 8H&}E MiIA4t,t+( hi }+󃶛ށ9Οe–gY#q za m<UWp]4R z?MբH=2>8YHh9A:Ve5ǶkvlG7X!&sK:u i 6PfbqSk}(~Ɂ^~I/f d;ҀNk,g;8(J,ib%$2 7>Kʶ0fh5+ dψcbQ5!B-U~I %Fq@r7]F/M! (!dKۥIikb(@=)IrEtr̸!g '3qL[B8>)(0WA")}o &.xfclY@2’J !zXHkҒ9+5 q#Jk<Ü٪;5m$݆3CG#= XT-fDd|8w=sοs_jKCzH1I+\^Twc}A]F7+&iqj=sC7:wiV5xŏw;lmit0fkXtSJmltd)J.SX/ΉGZg*b` /2봮HI[ժ "~ \ AR)x}ߌ5 x00'5% Jz^_@3"YJtl{%`aJ Cj})0|Jr7U'' 7EՙG(tK3:|3ՋfcGt~Up7ݺM1K+Fѣuр5 + ڋt󱈾ţ@DY#Ì4ԧ ca*nɗ:=ke "ܿ^Lfvdf3aJ(e1ݝ^!Y;rx9ߜ"vvNsE,]uxox?w|Z/.lA><ei0t7v ;qKp:s*~b#N9zV˽ BUp|%?n|u: L\Ŏ(1T+(LGƚيYVvRx-dJ/Urײsn ),c3v/<[) z؄Ra?lͭlO^ĺw\ !=^|1 J`Cп.q$Tfħ-M(MLf+RG"SMY5uZТT"bEro9-[n#mx C!E/`tW)(1zU-Or.*3l*Rmx{'/4WW̜O3э)؜6L=GXhְ;55< q; A Mz|˝P0ϸ O+yj՗ ;RpKZ5 I۱|+VMRrYF:MVK`ZmNDRRɲ !Ld&< <,"^_& 6QqUtmK4F#=ݲ;qb~ՋLx~J"}S i .,ʧa'L(dyC敲67Ƈ?먚Rn[ټr-AWy27c 0vM O\@%nX2%1NׅM87uBg%k>1#*y7KL F5MlWf{Z)G^vD6t^JZ`kޔt$Ô ҊN/wm  )pTn?Kn{EO꾛lQP9D9)ީبp)21j}U*?9`XTIc[@QW42q](i l>4 ֎ppgvuiFCP;Y r F֍k>[w<cډ`$#cqpCp4vb]&'18Opv? 7?N$9ڄ "'aXjRh"ZT=v}S]xBn./4=a-~C2/*7.cٓ3)b׿ Vȇ1 NŠ XoĪ:QOݝzu>)[w}$%@ODOBNNX&֥xLk@OG+ZBL'ճ%ƏQON udŘ/RtʃcW^M>(U1Ɯ oyIU[++\5YnOV/ 9)Nssbh"eTJ5c^»r6Qb,*ʳ4{ص-_fI4' O ]j[wVqbGϳ.4{i \7%/"Zf;u-cuCznk[i_=:(AҚRkCl.,cA dQnEy^[*⒣eUhY]s "=bSƶ"vPVl猛O⯔t~mL<% >oo1g̘X)ޙ$C=ɬ|8r%!9| Fm1}(TzBkiWUiZx MM tR`n4}vakF4}ZnfB~[?-fҪBd`r;XLGIGkaG"*|%7xD2@bQC xUÎԄ 7&N"D!59A&iȐGSٵ~3Mjѕa1{{h/I4bMA J}|GD2]Ҁ!D[ M;WB ӻIBN΄ؓ<5hx*g(/ COuSji 6S l$_Ԛ$R|*5/?-ᚕ1M.n`1Fs=I ) r:r5"2c>#wt={o7/,K J>=HQ2Ki ^{KpP343o &v ]\qZ:vskcK]^FAAC{W%°ܖS*=+]x_G" >xRUӳ\ÀB =9w;>)]t#%:X$D-F][.w(ܲ隶C3I]MZ薙vb  Trrn9//dٽXM|1% ,+j6??,kPͦhOA3o4+CK8d>mbk"LcK癍Nd}!W8zZJF 8[ZMu9>\Y] @,ʹz< g sӞXb`z ^,ZRy]r"1R_]-;窨v~=;g caldw >~q_8aR133l&!l< twkvMdq/_3S9u?vaz7_*C#75>'O!^HyLoU!s6Eʯ,XwIWhS %ˆWHҌsa@o /=Sٱ}b[sO09FݶD؞7Pp;ɕ3iG_!܍yB'9ݰC=8´/A[mƷdA< 8¼6w NXn `³9+60'k;Q-5](t:IY*==Z00!p'%*wvw`w#qBSe}j;!qolגzB-jXA_3z<PV"PV/9LOc#+x E@4 |DdSXdс"̽DKwaGQmcG5h8cAV)ʯ!')Ӌ֯R}lxd5 jmBwM>yg/AxA{)֛]ݶDH];ɢKQȽoXwws9G q jr<uӮafEJFQK|X~=q, O)@v]9d] 0g3 zg j ә&;R'r @BI<ӸwAEaCqMܗB4 ΛJE6+ƺ} ; Y]j9s8# -- u=mٙ6Cgk|%`Syr%GD15nu4aWU@@jsV$É8'|5SUD<`L?]FHkxU9~3Pw1V_:h|W^MZB܊FQG@e% Q$mxaW#I j&T,[d 9-R;Nhjؙr^OЙq4++JeeOe!gH<<(@rGNWC_k<0U^ _{g[]:wrWƿfƻ> S^Jd)iiu_Cb t4r=Z}T 9Cüt(RA'_fk=W5O5̋ϼT [zzqӤFѝLuBla nyi+1(] ݓƒisF.&<Wj޳#n >xTd#̗#2O&& "{.Q9ÜRױ?.湶g2-I *QlQaQa=X*n63kd&8B6 .1=P3&\<(S&ZsaUm,dPnd61V5fO]E@d<|bFr֤)m}LG1߰ ژd77l /3pIczы?kTw2v Pcxt|sΚ1ro#ӊH$~uQ+Hi" =3{;?za`㪢g >  ms?N)QL[x4@BH-jIaZU>nx$uЬ=w RxJ#T &*=tDG&m>N*<L˸ʸyG#Nswpϋ %cq!n#qZHr[aɦoM w+*3w: ĵ(X8k̢XalZ{#sU23%a^7lӒ"ĕBO9>y1 n&CB2a~dcwx{_Xk;_̭NndjR,Uy0qDbĕ:~Y+\iqFϴ̎挒b{#1V.dow(M~7o2;@z0H*OD KIqS7tfx`]/qMU +ή۵r97Klsj= 3)qC .r8%c%}Im$kH*n sLj .-5/@=R4gtTx-QR!N3D$,dGIZV@WH7钖!{ȟTBRRnVjY2sFP0z;c Dֲq]_QD 8sT<2_#=OKu7YS;=L۟DYٛ΁`}ͽͅ8LP[ e<D&)9SR@ƲKfi9w7?%;6v7C|'L8k=Ƕrof*.47R"pb&"涨FlM*̼[cj:]Fz)vmj,E5직NCޢtU)}.@q6$~}^{Zam+8Bah2:IDAp^4.c!^^o~VLsd&3qJh"e޿~b|Q:&c~d=ѕ3ip)#zOfbmQ*n}}ޅ꺍$Dܹ) y&7!|<ȎxMĉr7*gS}ef/MR+c{2x "4y͌"+Q.C(OYhop v΍4@YS"$.J=>Z+Ht`  Ĝ.<amZԄ&7jD8(-}Bd3\򍴣 {Ѹ\i4h]0@ jhKÂx(糢ZShġBəW9{,b[/_W|L Hk:Xb`o +Ǵtn;$X3(i?_y yCXN 3_T>e\@{))«46諥\` p.+F/q-}\a8?۱$% (so8 ^Ny m. T}Ed.WnTH519^J$5_^(ݔc*Ǣ2AK4?Wpy!XT$Enz[#ТSf^@Z/{/5>n9 QO5?-Ѵp PB0Q5 1懚(G;Lh%4@`H _4${*}EGt?OI|%VbRК},q vMTѫ,;$bjkнMeǖqݘ3}ظ2%?`@D/1o%4&U t8qV_?X.iNz֤h@ X^֌IݳyEQFB8I5s^u_|p;jgB^"*9Hy9W'@΃ ]lߖ 94PI}K\m),KDb'5uw/)v X%VOykK6.JXE.~SOyՕ$`hk \`cWd`4!]}"sF x.G/d @%h@^8l;G$BR]3[Ew,X㢓}vnD}/0ژ\HgBAB$XN= q~3]0NxFonR:E@р@ZE!~h-iMxU[FZnݎ{id-<6N E"iQ UF^eB(PDr6['7Q;G0I2ɂxxyk0R>CfFL~wJd/!\)Zx{~ =_F76R.Xi'$$wX)Aa0PYJ}$t' V1L*< ݏ+k WqO#BGRubeG).ȑΨfNM:JBз-nZ뢑Z{!ϑqH@-3xq-v@&LHɂ&Щ'x=.WC&_RaWPNVqi JZX`&=¾lѫGq&~\brK>JO9d)]@bWJV;,8IRbxpƁ?ט#c?rREߝp *0V1}iIY'XYKyF퐟J pwtγ=s78͌TRK$ iZׁ1=/ 6ˆVE.}I)Ĺj;5/.$s .3xYfXP%m垀d2WI 'TlxBY&ڲ\k d/wy*x$d(0Uwifm6DR:<;S+nc CccDkݬ7YkgTcb}eBVmW)V/5x{΢ cGE*0wxfȞ & BP#/IF @Ttg==Ёx7LTa [j&B[-2*E6{{2жcUV_[ iIY{l) myWitאY"%&x'9ґs4moHNn{=F+?θMQZ %zQg/e".Fv;'>a%d@8V`$ʭ;2? Vi@l6+b6̐'#.&>}pRDJzBxcqiH~R%=ENB]ֺK& Ȩ!fRNE@+bv(K$)?yZ3c; gm)"6oP˫ۡ`7-PfMaꈲU' /.6Cr!Li `u4i7a6, o>]=:ˑɇ!0BbU`3w%? h_0E@|LDGyo!ve?K~)oMaDE"Ic㙿0bl>(mS@vG44 ts,g=abɝt̵CJxBcB|BUFd񹵻C<5}]ͦIGVl+Pjjtu b`~PY&FػiWj۵a!B|SLBIP7y暵\`D1q$viAg3n?|E48]RBFOf̀ .XY7M:%QvAw9@u`ibcgL0q7iGwX(?ٺ%vG+߱k5^C_`l:aB*PA ǨeGמTBiDɟ猂@KHf+G8:j3>Cﳡx}0QlIJ2%ѿ!aEeAydo]Ox"=G'PߦRUe;0ቧ@g;An"[`i c>WКVWhfMHr2V ^YK-8s_*G gPhQJke2O"ovo=h6՞t& 칌hA ӈ_|S(D?JzOm$Z$R4٬QBQpYbZ/=rC4@!7YCr@̃9XEg_6?Es!Q :ذݝGG8eֲͨ(FdF՞&(_)n\, "mU4 {Rg=Wyô:lܚlZIoyO҄ÌhY5ѕLB]P8kW|]t _3I_vZ%;m⳷ĸT-tn,* 7FdTR0A!hᳪ6O ,%YԢT,Bd ^pC‘Omy5Fb@׻KhD#P, ن7W{?ҲN|7Y<~~m!"x٢ǐP)Eg/ GH1em;^o@tpZ#VpG?+&Q</NWB ő,umZMc99j0asyFO"r" NR.7ҁIGVwL׈" lH3*. ~bбnIzw "2ݧ F 0S1$P|ʽlwlX)VMpJLGfREuĄ7pEXYZ{Tt ZHYCD>bu2xy oXm: Fδ4V*OX i2!Pgۮ8#$gi6;5"C=2rt mSK׋a%d;CYSz`pĐ jo8d/á/1 WLX>T)Y:@oQWՠ֞ =2Uh#Lv9tk$g|3fQĪ>q'C3'iPx]iGW b0Pٍ [)ȆZt]$9W 7ĎÝj]'ԁ&c.2N ,tEIj(V60ƔWrXGߵ=뀣L( hkZrěϪ׷͗!T%J޶I@50Im]x!=\ Gg$F{oD(`Mt,ax$d%v)Tz΂ge[j57{ٛf.E8tq+yhC=TU!./X*Zv}MsnoY=7I;E96s[#5М!OYȥl qt]+ f3 B:`;bZdAG]LA9-Ȍi8v[Ӧ$d_U R"A$^4nD"#m;+V%)Dja{Ttµٟ>\+Mcp?Q قkXnX"ܓ o'G~Ϯ NvQ(6k H0]D3ѧJYlIKð] ?58aP yD2'}KC>v"%e~0{r)ZeU 9ٴ!A&ߴ߬YTi3TE8Dco@se:jabeKz:q zU~H$hX&םf v[NUemF}VeT;9 CM>\=w5naeocx0O8}InWVe9 ãO9RWݙkrIwRrOճ0zV&mh~`]\m|㚏1-UUm2-v':qR5U)b=\}#omCǠ2]O:o=[@*^`@SmL.ۖv/C LnI"tt3$GKHhǒ;_cw\)WJkM6¢ Do5sKX}0nm M$ŔJV^< 2'6 e"TȖ,\I~3+Vαׂ.(7>G+,F,4d-Udq,Rt_ <Kf) $$˗JcX<ߛ \-H@y U&`"VP ֿVޭz1ªJ&稩$ٻա;ÌTyՏԿ"jsoKUgH޺9 urlaX̋dSס{DW|]Qt!ʣ$:#7(5cW.Dyٳ|d,<ƞګ@/c 1OAM0\oQ-2AvOXAwB6D6gWp\E86rst=v;'ZY+yt;s8ty:c$v\yR?+ϪiΦukE^rxM~^V H:(lfvTØu.Y2-X7xCO^{j/P`Q.QG=Ld-|Ȱhm+֐AE.vS"qk*4zlm\J*`2eByn3P8ގ}24I4yRnTk0B(]"C[3-yj&~<1 *$`h34yaK$"I5|[SX+;жGl=(Aq>z@Ԓ<e ޤ|gV5D{[ \e?M= f\ 긌{0< wŏ|yG-zH7̽U},cFDA̲7g`A>'qWA#fg],I-ɶ>|uB:<: *ߊ}lDk)]e5M]N١IL+z.$d&_a..aV`jK WWl_Il&d#dU) 랓HauCw 2-"w}GoKպtjv5-mjnCS>W9j7 [y(xF1mBD9ɢB@Ocb!5]q {K]ޞٽ '7!&M+VBHug)h:H`maZք, @M7e5vi4ki*O\~5OeM\͋,vN3\HkIs2͖/}Eo6#9OD*hxnd/̺x)hLf~㨕y]}dzTiOC}5%p8ڝF''ӘlZϊ8TǮ|YNGϪOX&Z7FSً]lOGSֆTBlJ@ȝXYl;h" @OK"GHk5;jSt \ HZxݦЀA< CÇm˶k)뗘Պ) DlCcwgw$u8vhdԖKe9ЄI .0s%*f&4SZQ7:ӅX H,u!0U|P7Y Qkpٔ ̤ C`f6vO9 *=.kd`/Xka8ʕC2.`>yFٯ&i˚ ^|4?,r]i f;ZJ8^:O-g/My(C[lС24܊’;4jnjm B> +X絀_0!Ti9I.rVL>=8Å$KNg3}fU3jjI=61BgSj`$9:cԍ ?Qnୌ_ZCjյ+KOAXNY|Ɲ#L 9I8gC(ډ }CXT^6ع)J&V=ӧ} 3Nܘ/[YM`czbXo! hWQ]D$z,E ,ؘۧI0XKd94k2;60&lnjְ ̟hq"+/E΅s0 pG5ƒgxy ElBώ-U| X$OGg׺7xѰ"b>-?c-a2xW>b*ʄMH8ae6E-zNnI8JjV¯ʫ~Ĉ~^8,%o3X$o̤o5tV ;. O]V">SqhV!* 66+ ~n+ZIVk2s]4dʪvmji;#Mt7&-/B) %ҷb%%47^qC\D:F2 A?\V⑻PTSgd{ E*C=! I=Xz<"YeM R2n e7[ՐdO*!3 eZ\zl]g[0m(dki[!fP Қr6FNi=xtlM xQjtUےV:7nO8&P^v! |Qvٵɰv~Y 403s SMBUc)0=u'uaI8w76"6CVxO)MFsc=3 |r#|OCPv)q"?wB `%y^ܤ-` l7/N%*gBK"43sR*"{~sf"k ©=BօI<}in YP8: ,VW=+&KSwR0Oͥڜ CwseSZs #h&ΛUJl9|j>gaV7QW)SŻB[o|Uw6B2B|QqE%kzRUܶyG1 F GO%o+Nsy|Lȼ-T6_ \oڪ+E!]Oen9$wY(CZu+3-v^f6ԕ;g}<[' xcKAq8pڭfgYo1$0GZ 2ba8B qhn}1yago 26AsáыI槈ȻpX /S~. ڑ=nZY6Jc}ɯȔMsiZ;^'Ci}Ji4\G@$EQ¸-3'0]f'0Fܳ հ$@_|\H#u@s]7E) :R@QzQ# 7DG1cȾ3'& w7Rfst0f!ĄY>_oZ|M<gFcaC$T} x`Jc&-z݈J{ڌ Ԙž9idm gǻ޺ Y͑v,T[jJb1vlq`Eo {' cb,N:\Cix{Z?42dܠgi^вfnY zl7 _}Juw9KФo¾-A5qZ>hquUJ2|ST5Et@+.biC{+5Ӽӷ&4 +T^@^kg򪿡T )l#HD,Sd9^ߩ>k\m*Q.*{2/il.:aEXxuST}/Ld^e*6SizePWќ|G-KLO7gqAl^q%]w{\(׸e%jF+kd#iULͼЗSsⶹx x$E q2_ⓩH $b FA>q]ͱJ3߻8VO?j?,X .ϼ S=_<."8ȏ-xxN6̐n eHAN3L\R.Lؗ[PƄ+5@3sЋJxm[adY1x"vuofg*RQª(ɦh&m+Pd@|BӐ 2J`:+PضwVW= y =lLzS~=2NR;%۞jicmV -";<$̠4#jн<A',yV4L߼-4bmYR6k19K9,XϥS'4q>ŋվ՗:9b+r͜!!%X|>9Ek򕴇chc콏/hXse ?Hā\o7W/)铴#mnTQ}F/7HR֘s(u 'l:挪gA=8%ֽyB!`;xjoNӭ!pP9jhǧjigEskDXb  HSx3di79'8 ܯ˛iS3[c9o73k2+1;Jl$e kf& tDC3l$- ?a#iC/=G u*+ޤufTtIjAC635_u怬t*(DGxx)ZC_oo^Jo@;ٌކSHK3M'|~q}Rxߗ z5 H7X XDRrZ yq1A{Isp+¤F G!E: cuڌQ޴ڡhS7aPVnю27@REzѣBDO,^ \KpJ%0ۈJP>XL4D8C"PvA7rX"vaMͫϸB$jߠ{)#5 tNDZ}K16bU­>(vH+|| rw]YpZk%L ʱ0L}AEk"n6a.txdgG_ixEMŠ%5]E0u_^M%aH1Ul6,fo=ӻt3vyYaIqV ^ mMZV$cde~V!D=q.V5m8kfCYh'arL-fT:wO\=es> 51PyEɢq4@qA{J. ln:7پi}mp4/2tl!,lRKk$.TÆ9"6-zc"$qHjՍGjtߦkHɍEI)ɘt]MqybC I `D^3/"z4n}_+54GrnWspMMP\F+':bȺFC㿼mј !8q6D/}RѧBiSQEXt;A9 дM&9b~t4v$mP5HrDcdi" Nrj?Ԕ[T9|uQO-UcRis"Uye*4_ޔq(9':&J32ј߫OT/9/.qAtuw:lYT\(Q=Mf +e( ^PEA ĎiKkoi|i b-#Xpԥ0,vP׳:Ed5!{&*X{k C-gޤ[cjEj,In'ƇW`3s MeM6ine!Թ2ܪt_}jޯ=d;X(Rf"svBtݩ}+^pWw~IŶLi!y.& Y7l.έX-"e ʠg̤96~(\jQYuSk#28/n[*' >Ԗ<2H/ʑ$?AkOKU@:0Hhk {E /˦}v%(rQ񎧪MG1ޤLy6cV{k-zBՄ8_6 gu77{%>2-j 90\6)9; @/5l[i#ũex,Q5 ]s?;*<>L?3Z[yU%,a,*?1&v!Ŭiq v9LxYB|{T~l.!0PywOHa)F*f0(pU?gYJdEr%7+4Й쪈Y aZVudÔE-~;8: 9EAL&Z)Aט䷇l% lf:,\CIsvɼAÀ(n%CJj˪;ph|{N HѠ Sߏl:DwF9~!%.di/; Zbҝ(F7J#T?9yPMF,&&+BIϓr*GهHW8wVHPlnge=]c$s(>Rj^*֒;l3!mnwLYOӽ< Ѓnc0W$t/EVIu-FnݵVFQIIJEK*Ư9o]rϱ}^O3юOm|8Ԡ::-tpHzB$4;;Tڶy.8q{ץMAF& %):Z;|em%*U̇b$;Aܮljg1@;2HEY~K@A(,؋`RhN:O%pad1[qK钋웄_!we5^E4-F]LRiä;A e,HXc-!Xx8o]`k/ݯ!` 3! C[<ט?D O9h5;1OMF"¹v&)S>A$HaᬜG԰71ɀ#[J/߃(ͫPK#it86jV΅>;i`iPt6f`أGBa@Lw) E6GW',`D9v ?bK~^tXK2߰(!/af(5LYxit䋰ǵB,,*?juiW2- Q3ENpF 5"7XP̽H\r}#L_}ĘYh`!_'vv!uIp1CRgw^fa^h*luДv T>JMlJ| wOݽK˴VVX\O gg#dpJKr0&g>_ p0uq9]=N@FWMm1a9u6b2haՋ0Pv43pٜ[~ia+if,Nj\ϭCP7¿ݎjwgptԯْUt5F+|T^Ar j 10γT0u/$ -gOاhRch_/t˱u LCb8 ygh1ŧn6{6P]0:Z ?]קqrq[)bu9ֲѥ@eB~w@v0\n ~5!}>ɀ 7Yrź i; uaRTTo3)k\2033D13$aԒ+GA-(m{Wb3}/TFjG\yVYJ%{ +&:|r{vh TieUOɿ%JfYaʼn7!rR&,\rJ(ӓԺشiQ yd~5,|tiƯJQS +3y[f)[AmQsoʨ'YַBDBz-774Vm>>H=Ni}Dh-mTcq.X\H)u5懊p2lؼǒP@Vuh펫npkG(lҹ^.iiy/c9ӫdX^̈́!y)$ ŰSeE*X.e+OvݹDVXfN\O ^̈|gNqpF ۳ pZw } [].@RGn*gY18CXN-h0~UC+%A8* P%AN%kiub\rK2!tU%.sW?V_@9fUCϛB"rU-\r´6uIFeUߌgƉīФdJnN wPjm "c H2Ǒѧ@jiVTt]x'pr(:`WinB1!0td3ޏoSїā8 ^.)dMS]ly M6͓=+ u!?x%)պ;-$=_@i O2/4ӓe*^3{gVx_?>y_b3K]\m zE0fa{~S%|F\ZgRkIxM }s,@Ccq1pP6|AF< PM&?فb7^dK57k& &RѬnlyrp!(bj}P1N'n`NCfΤ𼱇ϑ HB΂, ̟E]C@dI(Aΰ`S~ʡ/ǶEHvXϐŵU~֤^&O|0Ckv/[92^#GVm| qyțwm uwQwR 'R8F6{ X#vi*J[rrr:+ɖ癝ۀ ž0|]^V~]Z_WTO}r`Y(֤;%,ǰnŧbڿ=@ {\[N ρK}##_@9n^FFߧr5L[’٠>kd^<"qʲ^˭B;abL>;7n^Q5&(*%6l9ey ʋK# ͳ1՜Q[|~x5)N<2TƐ/3գ'OQXp hl jlcyVJ-ܞY7!%m0!vk>*jl aK2q}ut֋;1CEGs޶(ˀ"Ytѝ5 zniNlq7Ae蘞:E9d:/&i 9 |}WPduȆBmrn|aFcٌ샸bC"&2Brx+{skI,RypjhwOہ㕕Jw`ƨtH:0.bcCty4oQ)ok^|WU6 eb9ѣD"3 ~'C ґj ^xy'{s(~`gJ`__`vMgoh`̄+5CMu J^|$mhUC69h_/?ٙ{vk5g=,1^D| 8X`u<tٌj"ؕf%sv{讝 >z=IXmډ$P!%#"nJR48-y"B{Z-ÉReo m5lzHh M[^Ӱ?h1!-_ zaOe^,D4g9[Yq"^W`p&_F<0n.y6'_7m*{2_ir >ؿȈK_Y kN+m7FLsk˧* ۋ' % ~kpƅ 'ڨ[E5O3 }i! PEqyg~kŘuNMq "!QTsh89d͞MwiO+m.3#* 6nڧ~k~c@Dichb!g&ƒ\N˒hrKeo](%nP1Pm TK5eb(5|ԯE\Ck(c'ZP6i?zu-";! xqt WFlZ6A۲(4R wy 7dxmGRKoP`.tE(Cs(;B`^sKւmR@%d0T_u~'QZcpf/T0+?a ?STOgn.4++VoKtlEHcb"攍Ww.--h(ܾ O;Sl\> ~HO=GLP)fDfU_Ti}]GfhZ^ӅUDu$i+hAX4P;BыA﫪414_gLP hl. `.Qz x|gƤƾqi6͇^kLеpYdc ik= h䔇{g6 Tڑ ܌=[;t{T{40UC*AAD -<JO~! )K@+Bkn@"T`BRrmL$aS7 FZǣ*m|$t VQ{s>g)L-=%#/AUBK?K E^N@13ݝT4Nf[{V|#FrL!oz,txeʘaⓅ8dL:j%-ʼ;tºWnw'*#QgY(bXH~CДT'|ycb3Ay  Q2y3e}/OutW3! u Wsnj'I4"7B=Vn*R0]w]E>gZ,ð^2"Qj3RbmmlAV!լtQ[`3V_.[YJ2 //u0k %/ 1grk(\L$0M=L;MC x"T7K<7>C$Ͽ 5?v JTtW}xį,8kꦜ湢])$7zKh)Q0}$I,ie=F>h'~.,^&Ipsv\Fx=qE}ߌS:24>'M=.W22HÚ&GnRӮlhrk\4дMPJVxq.^vfPllcZʣ#cT`@GIvVwO8wx,4A5zwoE d t-d.%M*δa1S9"+߯gţwX.0rx)$&\1=qC7rdo_<(>J#jad(9и MR'>@\^)Aq O;0 d͒Pӭ=p{<ׅ BK 8ŧQ[N Wt`r dI0wv!~>aT OlE~2Yɪ]FA-LFb m=Hl@WݍD2m(D'jDӸKeVѪ0>_9kEc"z: t8*Cxw; x^aT [ \F1e(CleyJ!p^_oh$ξ!e^4rP^U_k <1czccATbSuw-"en eoϭuHsqu#eDfBj@P ^*)Kxl1Նѧ% 癩l ~eW1QD[R}0;|mzl(,uvs X@(%߉8Z C[(RhwN.UTb ,tx%+jo{ ߵZ|lg8J|z]ԚYҟ (&bֻ>Ӈ¹#fi]\<J~_՜ Rȩۮ\( 0h4'9\pNj#[)Od YJ~+표׽HJHK>) y?FJmYAu[jJt^P3(1&X8:Qł0c: A+7_'_[1\V|=/8g'9[;X׏?FhW"(|oNG@2i~q@y{:2@/O[7e ut[stO%R.U߾٫z sE771A K ʴZwTE:Ir6J1W1>^6ۅ*"?A,bJ<4+k bz5w+ OW|@hgn夊C»ǃ} T[15~]|xa*6>֪ӡ-'h7;wPf`^̬Ku%vc>̮D`2ӼN)4}fΚ|Q > Pq5DՀmܱ[k]E7Z2iΜ`tXbvX;|(\Tf&|]ߣp#NZ w/A,_G9>&],b^cUF R8Tl2p%kr6mG[th=j4 $6ݩ _G9S\w<2[1v4ƉO&+Xg& 8,ҋ0f"E)DuoKC:OD~eoQM߽rh~* IKY  ^G^'x`T]VPYb΂d|\,=[ (Lr޷?d Z? Uf Hp@w,4X7FQ>ar~ 44SnMsRXl/}PIP,'9(-=xR#tjHP8r3t՜" &|8ˆЉiCZM_xou]~Uv1fc;ӇJϜy~XwPё!5Ot˃P\K| Z=I!<_\1Ei ݱR+"Z֐B4s>+6SDHqH6[Ӆ۶%t? Z }6ϳF+t#*OL%w{bd^֪}: vRґ$-W)w#=O|@ oeL]ӥ-O)O*Y-ImmT4bZha""&R]?i O^tXQԃ֮xƞ?" ODh(\k {Mἲ)ՂK[T AS!,v@~k=-g80|#Ѭ_sxkiN 1&!_cVUo}klw%ۉ:F]m.AW> V}n7~\ŭ]"^~ulҹ7T'MdXEi/1?o!W qgmewjϓ=GSUK%^wϠx]G)<nBɘˮfr5GTy\ta)+L;?[+T c2,Ɨz1Iڵ;L[3_g(9r΀zi%>,kFAh({=R ,x\d.L\Ul Ҟ.J8~R sU_:᳃ر L )ݜ ƹ^tBWN ]9$!V|K{V'Y<-Q-mFӁԯ8ATk@.ʹk<]5i/' >!0 EV9<$фaW]y'=pKt܎ןgv| VU+ȃqz?_xQMA;vG| }"sn˸ڠU+\fjH5b1 /%O$L$|Cx\5irP^'rˆspUpf.S>;iNT>KQ_/@ꢯipTO0f|^Uzdж0?{ծx*J\ض3PvݦpZ:rҘsaN[u,_e;`w4 FBp.O޹_\C0,iRTbYN :#X,0@J1_W93! f0^~/:aC δg/U8IGe]e}?OpLƷXR ,npqLȠ iS׳q n$47͐67_n"`o3Jr9F˼?IkAr`zmtm tc\Sgwj@^h;I?@|@+UMkۄQ"[[9wi*w9{[itԅdP4+[Yv> ,^R8x_"6N(79)N"HJidE/%;Fe#@~F_/F h/M\pV`h^V]z4X|cGB]"?e x]z}+_  ,b0}}@N$07AX;٩1R@їN†B>?X$`Uǘ[='WK^ $I 0_U,t; ]{uǭr;e/[ӉYMnb 'p%ȍYqHsaZ:ѡ1O݋[rdm "hk,+fyS2 _ (OLQbeOt\F5eT#:@WA!b`9Oc.>KQ[Ա!9+IV"Y,XXmѯAٰ}]2 ό> z  QfauW* #SwQDSSuvB+-ImCJZ{vc/3߆q -pYkEEMP1w @~r? J{-g[ _/@"8lj'n#jd V'JimoyWÚ]-2PPS L<]j}4(E8ך׺:٭#^9 Z[O4| iCN+?۾_H܊M?,m'mg%i79uo0DEYRugZbCu/=[05Ml坟i}l6t:$9pH$1',”̰ 13=Xê} vn1I沀~+ڔ͸;Wv]{84*D',I+_QT \2,A I36m^l_2qz+ѱ‹wu 7(awSqヵ`M G fU2)uMxYZώE7] jY%}#,{& @Z^~AHl-$΢Mqz%h{_ =)w=YW(9mk`[j_7^nMMaO<Ux.eZ(GªOlP*p+݇Ȍ"ZSGhGf@G";c* %[)Uދ7v <ԄkrQܨ'/Egqљ|UE܃'_"HkKRW32=eA^_rZJt^Jd݃<"8Nd1J(5S]AAU߲R9\.G\C M}bl = d/FRw wr)'˷{+PNs4p=/3 C }FӞ'̀fMbQK9 kYy)! 6טHհ$0+u RlB*!E='lɁn$_)5Ytgc~gDLp 'ԸHSQ'd*gw2%Y jY9_) "&Nƺg[T^]#5mr-2.:Ɔ(@4o?[ KwOK}do}\Q^;,zT3V\#j_h_;^{ԁ h8]+mgo{&5I .[gg]HלF# kfI_uA..Ib$L*"g5/V] ZM=\g_8D;Tń5c0xjF2 >8D$u5*蒾Pכ>%`̻$$楢]]b9.e5:?PaSn"]p rѱVu~5@KF/+$?Lwc+ʶ'돤!_ڧ?: - 'JjXN9[oXd3qڇ`3+ԦV+ge APSo>eP-%OA$hR$[4)F_'؍9KvBG|560}b\ mR]_Y?@klb! amGVc Ou>qۇˣu`:8Dm;c)5@4ǨeuU⡳Pˉ\_ [ղhK_ c>NlVYB1 2Vx `[|ŦKaGǒ!A1}9Xd;/bϑr Jly;iE5~;Hn_,ȽOukCJJBL\sXRuHRD>:Ǿhֵ҃DQ*~v)Ql{'5RCS\Wf.sHNw>&`I}[g:._:N^JFv,!e9i. 1_3n"ChIR7c#YMȣ7\]tP^?I܄([V݊\|j^9:, i|ڳ͙B]gL6Re4JrH;ƗhywKl$Fvam_#VJm_UOޓ:U>\=IaMEgM,̋-:>bA0qV f|$%|a j *Pe_W,I oRhub٤*AVuxS!RPy8ł߂QFa_5Nޭ@]ĄzkRdͦ&w6\J:S3~#~7ٯ(2W{H(7d̟a}j6QAS'Io9+5*f0kX̓y,NsK1â\nGj(h[55]5ZC?9&fԬ!jHTJ;Zo`֦)hFH1Nxty}D.4enF bjR!6ˆ*X%VqyB`Ð_dkkL ^jpmsj%^dOgn̟ +gp<[L5KyrTPfSCT,6wwL3/c6Ț͓ʛnu" ],G{9'0 } kɡ69ym.D LwjH:UI/'DH̘0f@3T =:8=bioUލm9LgJ1QKB al+G_ U<>_*~5hͦDvPRtD ꤷ^SI7A= [˶J㒤.bNY;q1MCb8+-=.@ kX6*4OA"ie7ڄĨq3 IE?)odS\1aDQ5Azmq325XDPFa$'e*38ڷskHYFN0§摇a/( TBNa  oo!dF,{yk/LBpQ&DD 1N}dz$}]3ć7"Z *K(ƲXIySW`qiu2Kx5{oscF=7w)̘I} 9Q,`aGE> XN&b3,n-{+4ׅpSW;GqYiA4_;OCz*"!ʧqw2A,fH86 OUN"·8obQE&<_8|M2VKy>8<r-iv[ݣ-m~_>U搡PCc&"sͦ2{(12?ؼWH-4A$kV$zuCZltlh(]^0>쬟!\8.=+$ gI1DܰuA)qe9dW>+4%e 1$_T}dR8b95.g47i*ԛ\.]٣J%y}5mmG!̑NO нA ϠBOHC}KE 4|X|RKIjݧ21/ $l KS avg⥪EJ'QWm胯M=8.gY\2H4l)C͝"wq˯tv9n bz5yC1tZ46*#70د4hM~*1`!}%=1= əfXŦ{s Yivc6/鿬G&alSבJ&A@w>tfHS"@yľg'2b:#g͜7}i\U?k[@Vzz V!<{y =tj>U=яO'c&Y3kgT3;,38IRq|ca*/:7H$܀RihW9s͸G$xjdIx$@BpAmu?xz~ sU {QleW\ ǟiu TbCxb+7G Gg,N:76S<ەBA@^62FIGIE';A5Tȇ(oDE`qQ={2%`&=j9#f8C–ɻM^[ZHԢ-8|ً"waʷ<,J@^:1| [('q#cZ13i<-jC}:Xl,97#q絣v1)ń0ˌje[{/m'wN.TvIy/ QKy(I,Rӆ]jv5E:WE77>\^"vSMly`I~/^@~sPʱqɐҚ( kvEN8`%Q?͑*{S T#eF 4璇.J[;-7z̍jh++# A@? j$%hOFM#%jeVuYrʢRduHX6ay3m%`.5M~Tg-q,mr D&7_UH!Ƞ|]mUw~kUtbKgi'*k8PЋ8l (pPA .Y}m *q)-$鴉TW}$S喀JLMaS"~892=/-" F,fh2Dٔ:HNQ%MO\I/̖}1x3=*\jjUn1ɴ'ouۛ&TIE2,4@SA)`)!@R蝤G,^q ٘=t|Db"؆or#%&0/Ϙ~C?qu*#k]uի~>+t;"6ITZ+ ߔR_Qam;@,Ǜ? UöSTA! B+E?VqXEaQ1BPr}!Ml.+Nq8ճmXh/b3K[>ߏ-.n^5Pv PZw(prf i ܲne[[?KgI$dǥ pK+?-BTޠ.#NpGwinGp=.=Qo6VD&_o EK Fiy43j5 ?WL܋5ch`IA޳ɽ=mSi,sMیp{X㯗 oȻJd[6\$ZcW<{$[x (^^dXrb)ACn_EDEpahzVر6J:ljg|rv+wtu9ͱ_f#@>'b]/=rq,}uCt9|/`rǟf#_ ˀk{UT@zR7B VX&% r͕HNB DLVpN=!K"!^R̪9)3$DC]=.VtJvR %0/9e6FXi 9e[wNT 0Kਔ~@ .58ƺ@ɭjMY+ky}tfyjЮj 6jUaZ2"Th|p E4Ɓךbng>;S\X(`2bJKD-qh&6)zVEj8N0#\[SOb*{+g_&pbI-}伒Jex#{' 4@09(ׁV_̃qY_D/XoɱKeC\= YW@e`҆~Z'RҘWnG7x Woۉҿ^P§sm{kF`5>23xRv.`3wdAA3|\n˃}>+|ѽ"OYY_s9mGH/mq;$qyNO 0Bm6R{یV,JA  ${!U=/| p+v5ޏ/{zb YZh ['dw*צC9+hN&"MUj]W]_@:MUi0X|LyC~ϣ+ YyvWSƘk; h˩0Q0E#mR80e1Ыl]l{seWXt74z<7NU'(M|[GUd7=g0IRKRj"*~L~M *.+&ݙM"bzy+fl!p׍;(In_/uwZI5B\1Y=iȄriI Ih߲~[=d֔ 3?ޅxz oeU׈?z8^[a{f~@o01 W&e\ȠXI=6zu kL*Y0:*`ץE :F*3Gj~iK)6/r5冶ϠY䐛69uW1;KM%Iu9'Y1^8- y\@N+-w(y>.NvS0zš W_4b'{~(!,ݦ3y)P4,z+ 0/BHǝAH@AS3 kiG=[%h}t2ș,WB*K39D.&@9R("ohRW&z92RQpwM>t^QVn|؊;<BQɧO HE֑,N7 GY͏*,Z$L6Z# 8c_Rb?Tb; 8 5OϧiHu93Z$JwY.koiRp( 9.ə@d`K'§XNFx=LZ.A܇!e p NQs4舛K 6Vv6^nE=SUYV'V:a@uʽUf&_ Y T/* ,#8=fC׏4/qf-eM1e2ٰ0vidWVtKxy8#k3.shӷJ|piiRCޅXlUܻu.uLTڶ8$TW|(ݟst_+kѡYBI: ;aǏ V:Т.dyM*1Gc'U n$@ L YW(ua5!= 2~ahYީ.GhlRcxgpm^ `0o6>v'0xkAXم|#]3S`z^WS 1L!{KϿ)s0''s_~@}sCT9U@$ >*'65xgm-;;_i"u_b_RFSC]KoU!Q8Р9Y^Wb++2^WMz[xnkyl$YϜ;Gu NNfc(^]۫w"fZ~ `#*C[+UoKǮp"z\%DCf/eMFnhˑ=mthKwAxl%h DCؚ,A4otT64blL0VA$gɄP4~xx}N0+e\߻j܁-O*kҞ:Sh~-m: ;t'cJ\[q JV}{쮲\Z{?GҦ~M׃j(Jz|pL c_AK(=j. !C(MO ۟բ;yW\DFAe7֗T*i#}Gaou>n8j ̦0]*P7˱,Wʂ= mD8k h"Ҹgb毝}1lracY>2zAi{lm- G>! ͕=uUn9EC2&X_ZUaEbYu4Vlax^剴ʬh>,jFݻm.ALFS,V g.Ƌ3Gj)>uWE;3w񪌵`/[H˘Yj?|gh_#OuJ#NG6mb#q%f;˩va %ø,c~AVx&OJ D8h>uHL B,LдJm-F+u-2 oIb?+fEk(g*‡&>CqshYD8qf s?B}3ԟ]1$-&V;uIQZJ?MIϺ}` OYgbvyq[ȋ^>ڕh5l1#Yf!_H>dF\ԀrzI.S(ĥָIMI*ݯdDŽZŠǨlD*/Cg'@x]Ț\1oY g-Rh b_zd|dQ.=1D3$8;pNw|.w Jo@~{W+ 9/Gd1FEl(+aH[3iY{!aa$O {''m7q16u#I~߾Ĥ;KB *Pdl7XjsBpߖd9h@ 2aQYV-ժxJm+vsK:N^>8gOQϓKVvN6U!Tj#q'?T@QYyNnRMW?.V]Xy\:mW: ૘2%k JI>ūJ=>3'L6gvPy z庴!Ƨn}/YL<$d%ݏ~_kNE?<ػȝ6y s NFE9:c` l&>1)_@ ed maZGҏj^/Z63F 0fE74 dXL0!KC^;O_d#P#R2FNyp*ӇA3K#ZZ@ h I4,J7z͵%I8"Ёi(_jbګ%;ܜZ0%1[¡9tʯnޟf[_;!͹-3R AKlU\0t dMD{lCgM dta/pH>>Ol#6y4-m\S]d"iJr:WN[甸M:M!.T׸~:1ܿ)goC  z%]r(oE$@ k`#tȒq8xʩ"IpQƙ̜ӊ+G-Wǟ\[a{ /L.ν9 ޳U*̯*~k^L̿-Xfէu8ݧ4qnN%};2e1|c@!\:>?/UqÄ9:x!hJ Ժՠ{[̼,ּa@L0UU?Y1 | i0o}o͙H)` Yi޺V cU7L%W 3;/DOpZ2=#cېL0EZۦtoY&2HTI1=( !.ꭊ6޹ra?ec?rӂd“%GZ7?Fz Xu!-K:?;կPVi\e24J|C\M|8rN${ܱOo&tG}"`Ld6ֆ،`Kz?԰"5 <{`HU?YJS"8m{BSA$t苠AWc_`k93hZ W&Ρɲyޜ}n3xV屢Կq_Rh}9q| )A),0V7oQ Nū̟ezAi?lG IbȴT՗HBoA:1hW6*IZu#,L]WTǯbK2zf>,1Vg[ik6, msIJD\v5>NY[y}O9Nqd7K_DO-7hֆUh.2Z'K6Lym{#&?^s0Y̆@ -5T+.G;h1M&j6ț!'k^˕ͭX91y`ӽTrg:Ŝ`UϿߩI "Q`h\ ڔ=o= X6=Pcg3]#;liO_HM S$zHUȱP҆p` TQal 3rKy\kZ^i]LV:*rXh%n{/H׭;QwL ]`xM|N '[Ht=7}1v]@4ZZFx%X5od#VZ6օe JË}D]bQrJ}n('DK7IPǬ@'j )^ˑR%% -`6_ʍ˕/38C}d[ڐ_ua}F~>ۣjaw3|]jSDMʕ\.O& ȇeH$@P&RDb Oqvz*j<>/eq>oHųȥr];Mq#`5O5Y+n"63YP &h7NyR77ԃ LgؓW?WU9G~NLc] mR٘)ps8ϰ#רx2)gQFa[WwI OY]YH%B*f&,}gOinJFتX擜 m3u<^N $w9C=CDk ɋA19XV~u</D+@|πy UbTBt0 hT3]j3y[ߎaѰ!%a]2DECgH*\fp.#ez 6/w*ag3H=[\CӲ&Svv`_X)fUQ, lta5ٙ7W^lGhvP'4z˝os~ࢪD‘P['6 <4bd)EiAn&Y_~+5ؑPgvE͜7NX)r0L,)}o16‚/+X16:mm`KHoDxJhIgm2LQVcxxfdnEIgF]S>C7}`Pa,}TH l]:7bWɜmꚹVZ=:G"xP^-E^cyO-\~/m pMRB߃.DFxim\($9mvW<}ARe ]@Ļ0![y ^*fX@w)f:; 4 D\#|A:&EG=2̿>]_&zf~\ ۷ECQlțL0~@01Cb>!7 2_< Mbn2Fgi-K\[@h61Yn(WxHVuRvJζk{{T2!y^ADpU2EZ^}xi"V5گǥKǷbƽAsD"oC\fo!k$D#|Zmsdc9#'`VH 0òWEVXQu+Zf(0pƺ2/&PW[C\Qm IY?AT`&7= e\ڌ@iBAl稏]ybFTaw\g&ݾ?gLlxIv\}^j[:#>X'o"gĵ !t&TxhZM؀C0OQ-@@}Ѩ=a $%IRΥf7"14= ?khHJEQM޳V,UdSP Oe[ĔxCeH>8WTadhk=:-w!n)Kŭq t SW_(N4%X>ƣVփӲxlcM? 0޼ {/xJK@"Q=?w!oaZPoVw]ZyU'JNd#X9|ej=gB.NaY N]S\EM~R7$!v'83kkl~sT1& r3>ciNiV8iL9]Z Fie%gF:W:30:A04pX}pۓsOFp( ,+aKP쿒ٗ MO\SM0h{F8&ON 1KBme-J2|>じ^~n)Ȱ%^EG/}{>ֻI -Ң{ A3+ N>_A_/ЙfuuJ^Ix[BrK sCEW@v.<+Ix¯*h}ec|. >Dwϓ] . ﻌ^y h`>?y }6N1TdG OugGK9ܒ7p;+&vd ZVy}:_/b$'@u&)$0CRu{㏍TqF6]rŌHQ/X0.zuAYjut+N>\@-+ј%j;'c!:~*_/Eަ3wVȾ~tx"%ƻX Ӱ;wCŔ 릲B&x4c Cc]zDIgIW@JJH#C#KH{+#0vz:qUb/o}͊?S̨X@Re6K]N$I槯^eg$[psJun`jԙ'U|%AM\n4Q"\WahukR%L@%шy5v?,oɍAȶSl= f &>$jѬZU>@ E馃KtӲ~"A9/k.E=t%꧝8?} p= A9ǥ_PcIh4,C]NjDQ{zAρ|}F-ew|J!2:Bu;O&ko|W&"^(/Q3}$sU3Phk #}/H$%7"M "83LոZFb2oo1` 50&Z Ho=u󄪛yGCy:+-Uc]5c'XO0]5XpRfy'e9ТaGkqAfI@6@b+]p)Ⱥiݻ)ۡUíCFqƋbz,8%3)_3leI ~1Hί)D`|NY'K)BnYa>[_ i1'[lȏon=OTဣ:~Ycc3[J `ӬgDodZsmS9^I@τ-P@~ :i >_>yyV (z&S|\Ed;l^$-Ff&y%_E~;]Iט4mt=m13 bst$ ̏ÜB:`)GKE5xh++0bezQTYHԚ0YI;Bd@Z'AfcZ5rEC."So'+NBu gVi?~'H$ܛ§r W\TrdymYڥ#y8 =v>0"-1`{T&"twc{qHeO_D m 1N6qtNkr!'A'|`lc8,RlнټB¥E;qI)9ؐ܋c#g)%!v-RT Zwn*rACыj1 WI.zH$GeODc`M5?Xqa֏-'@Ves`+̽zm)k?n$od7CYB+dTޙ¶^R˔eidȪ>ST[b7~I&'1_w.PR1`LVFLҰ;Ȼ锝w \Ie Cz٥V,N4S Oד47X7ཛྷ|sКS)-ٮE빭=K*"ṄdkS#oE _ȹ1cΖz +3^RF4t$D` UQog9dsSG2xY$j M1nfu؁AxR!T}\f6"ϰ"YUI<#@Z:%vlʋ<ڍ|0K#8k3doT践=Ng*:"6두q-0"U] s-A/γ#; X$TdX,(@Y>YHc 8SXBnv@m)%&۵V7@WxI=ڤݡ(~%ykT 8$hGv&zW|EZl\WUT7|5S7؏h:· lx~JH( &?y0'{q@3|_Ht )lѹ{hV<~="F3(oj_+V{zjEܫҮq@1"AE=r)s?\ƴȗVLd bێK`T상j.˚ 0\U.áD#4Yɀ&+1#8%4p^B|ePo Gs; y(-0P.]tc*ߛ.grm?ʔyҖ$kwwӟt}o-0P@Idhx Cא]8Z g<}@1^[E0Y0Bmuu' ~TKt|O489Ma*@2R Fp-5LW!-JXW}c ExԲ7>T#'LOO@9ZJp1N~ʌ[AeʊTy S=BrÓqZV2F4CFQ/1 |b*YR|{*(=HMȄ4y?szi8bh!!3|a\6Q2,U7>Jvd5<6%T3$" |4WEgt#mlϤOti^2~mԈ$Z.G{evD` W:_{pM|)ǽKn-hl?/_LM&0nWf U<,qL\S8nv/)r+T:bJ~Bg u<{:`hFP {LpYݫwYcqWpSKiH&xs %/Y2B%rkYO+|}ص,p5"E=|kx JW P}CI^kmoeVaqթ0ᏩV86XnHAJ3:噎rjf&k DU*$0:czcZIe;ti19×,k0njJ@-U$R<$~f W76Euz#R(/C5mL|z"#。bu4Zvx 0 NE㦚Hd.am:frxg4I`WMi>j)s@4`-;F'zX(vgQ'.>Veu0ۈ݄+,K!"k>C:E"HyEL>-L/WrD @ݔ>#kȞx(2;R*xc-*ZGBǃ*!xA`n~%_UHsmOsS^eFk3lUOא0!~:Nq]kc!}6DJ+ݽn7xAT{ ]uv}VjOVG %w{o:y0kڜ |Q&4#t|ҷn_ߒ+Gyb[F#QP}:}dSZ&3RbUTG˻XenH,ʟA8 Izm jޕr B,[;[2ɹ{$ۣ?nM $&]R{>;UZ铻8oRHPxQ;_KHLX0,w$\+y? 7N յ! z: 9W φJ&sc m3-3bu<_ˡ#\ .$Rcx.iD5f,9!Tr!m﫽rB}*X]J>nV`}T Cl_Di5 xI0X>R3hs,)jy0.pd DMP)עp3W h{ZL""!rw ;4D CDitӂbsqƵ 9)ęE[+.gP'$P<ޝ+Ws AhRC&ϷzDfՈr'Iނ2naC '[2k_<[MWXmZDz^x@YsH֧l Fw(L8Z2ԨNF<_b/ iyըu az8s[k.*l5-tWe3u06>4K!R'q)6"_EUEf%W$1}I v;%Ia/M}j;iE5O肨0UYrԽtf3E~{3D0D"0M'DյK#_W{h\6Bː;78ڜPǷӗbơj3ę;;~GR,1Ô_CVFnb˿GF"0_ځ5=>H|JN~V秇maOU#\uOS,G27s^;`%;ӏJdQ[}VzV4O6:ufPtrɑؐZeL4<AV-]!4.́XC̐I ej5V2h[!`mb5\ ם癦MI))ˆsY0pOӭڜ+\b$'7%xV 9Q|uUI ]‰L]m3=HbgGQ izӌEM58GmCl*P6@z>ƋEN_~}䛜$Ru<]Txe]S2Zxs/Is÷BfAiH3}gKk{Eo$`צCmܻllӒ烈zJ=DP70:*#b{ \Vo$^>#?w}SIԀM[\ W';jr`]Zϔ4b0L=^kƺƹW6&sʹ,وz.RHg67{̳/\&ߍAgL,ZzcH3[nZ6)B42-:Km9P?IVդ)GUkyvY,}S q鐂ΦXN+]/9cd7L0cuJ&d# Βfsᑧ${ ԧ,!S><HDLz84U#vG> J!=s4G- )`QF%/@5qr3zSQg]l<\iP ٽN6'_yϛR Wp%#WB#NGRMH6ԕ9 yzŐJLRG5M6^oBcv!o|[{ o1ؚ)uU$VI̖9|[X>a(Y,hMlj,i+qs+:ܲ Lj?d}mJ2=8@Kwz =v*UaRħ Ӡdʁ<A,ۚX uM2R 6؈SZŀZȧl#dwP@grwz#Q hR+|iQ3[[8 ۾6g #pt}1RmeߊC*D@\ZSgxg 3Obd5šZzy3@ 426Sqg&+߉B Ғ2$j^dQU)<\Dcjf[K~@T|o9*YKQIDu{Nj;zm5dqۼ`gs>]YT})bpiQ@?y0\󲙡wFFıKY"yyt [ͮ{Y6*$2BNzV|Ӈ~%$YScboܘ} w0Ƞ6 ً9bKuLrVo7' Z3UU˛rhن1Ub'.Y/7"w)WmJ2(Ǽ B*g?oW өyOm)%- ?狍l.f,6Y3皏aq2]^ˍ`?\hkEȽR6U*6m ̩DzWg4'/Z%]KH겦 R60?oxi>{urNuY0jЏ ^ت0=ܹ]MpHJ+)4/T!6Xv#ʀJ+W[2Bp̖9`NaoE@U}?.; G+OP6I < rlv_E'b j?\8SY߆'tS&D&b(caL[瘱ə=%m{MWٯ&ŤdXHZA*4>XvS-䗮,T6+?-N eO2~$%.O™We% /Gt]pҥ{cɝ:sBkLB\ޮ<2C'h$&ө>-S:Ai~4#PiF0Դ-& ̈ZoaA70>{FjfPQLE"^⾦T})EOdL.Wٔ쾽cB83q@2ʮ)ܱTP`h{60 sc6jC_ V*E:јSR^\\^샍 B ,P~: `%d=\ |QwC؜ni0qQmz}q0iQZ9wayJ7z绎x2 JOBN{IsB EXb"j=sZ U[7}oQ?+mCv$A9<FӷT fan9򲕰 T{r y53ͻ0Wv;i@BM!''omIGip춨iw HQO䝖Xcz^ J ʳiVAfAvA|ձ$KJpx0b %3tk:ih:' ~Woܺ]JwՍrT/Zyxh`ۚQ7p(v. 3v峆igݑG@p 54[x܀SjeNO\;4צKOv';fn+^pm 32k,N`qL bgc2\oÚۃ>2Vw ⑸_K[. \8OWCY80b,]3Y3^ JlpيoΘLXMsm~jw|HJGU\!oiǑO2݄FVzb2^T`<+?l}'n~u" (bO$1L4R@?w);x`W0ņ gf.>@_;PWdL"J{g@]B 2L+ %aZfp`Q*Cng܍+7"f>M:c?#U>Nn+mۄYCfS2oո#(me&{H,xa"˜Rwn]\0)s+b+C6v xPr#O~VzG <)˸D5, dqs^-9P۔D 6Dv.i אS8 VA{Eq8IEĜ}wE ]޳mgr1K$C/L*ux.[2_v*2YX.xxr"!ɐik {"0 ~-fI)G* Pkxڅ'{>Аu9PKBg" O9F-Ş՟{yq2G6t.V{?VNwJ%|kd+hb 1 I{\2tWȝ\I9ie1˪v2)3q|߅'EsfKɴ ^=z-p2pr\#U5x`\ rP@w<ynIFY*tX8i=SE8hFHKڂCe{g+ܑ#*]KY;<0:hVd,1T; Nc6*1JFNs9XzP(֜) i(X; i2R OAtVkvm8Vn1Ԕ*&RiKx"& |% r{ 쾴F{L;H*;-jzv:pA8%?~u^(mm(;_T(i-ccXaXBESFNNN*Jt.esmꆙ,|F _+<9|!OX{`鈶fSq:i ,E)RA`` 0F^GHo 4#`QNTsC4I@N"v\vm#;$mq `!Q`E g Gr.Sa/bCRxEnA@aTbwؐ [?0q;:|A^Ma -1΋8a"L/q|.zZ;'vcírsIPgP'&)$B!ht$^C9w\y;uqEәE ȭU̝zpuIS>i] TzP!<&3|6TR=Vu!_M8~)h) J~PWϏZ.!WRK>S5 2Sڹ>[0G0~,ѳi4esdYą|IiEkv[a" cX_u5Z<:گ{6vOOrX>H~?v>?ݕ2al+[eڤ2ShE]A}bs`qÍU(l F%~R4EV$AgO)M&ܟSE*.Z0|^+ހW_+{Tx[+@ ^ŠqS]J#[jτ=kp*|7a*)&䊮;cqjppMmcVE! GkfVQ!>{[d֚P1ވ69|9Xϕ*%`,!3 e2J'9wH 2ߺYtQ'p'lfY85\G ZY֊g4H "5 ғOT[1# +׃ 0iUmm03CdYm01&ޜtGwS{L޻Jw?j%S3yȑ,V1)v qELN'Kpb.DIOHI8  PpHgܠ+u[6]}n `EĹc0<ݦ#E)>+ 13hNs2BBb5C0+Ya<*N` x>XN E+ɒXV̵_ڨw/%n)p#=iZZW6> g U+:A AVxvo+xozȱ}W/rHˡ!}cdwDSޱjft+ly 2hʡ^ua*8?~z.!w7>LR^; *I Xa7Ϋ UJ :E# N)=HAt);h8(O1œ0Xp~`gj;1ny]oq?o‡uaʣI ms7T".Zs#<4@vxmK݈[!/ѶK|˔/eVZ!2!ܷӁ 0m1%!nɿ#2TXa [SQoP/ϊgvjVI b\5ԅרUP6_ˆ%Z~ld 0KCF&_}Ck,'-谠򛅑󠘄ή jT*zźF0g„Vp|Z; tE`jD% (4^퀨Jol;Nuy_3" 5hD6!Xb=cgKIɭ; >qŵ7?(:颧/8(:u@mMu+I+ >/ ?T؈F|OZWjQ W}M{p[e(;ڳR/4 KGAw"nUsM`2 U|w<%I}$XsuX 0&/tUfj$;u-FÑH"}kw7=Hi]M TD1/+L=bE=^ӿ>5<4[Zԗ*)҂50)4^<(+6_߭_8}%%,cU7rL"5~p rSy?7nvNy&ͫa"J׍2 jtHk :2SCOw7:☑M3^h0uqI&c'ԡ1"'YsS'W堐WJs$܋9unW3̃1Az(F~ndX]d/#_tYc+G15HC'쉕lZCl+y VraZvp,XV\iH8knsjQ2<&:̛xgF(,6PV1x6țn)?vTG`ȘTZPJ)+%aO(%y[2[8YUF+M{6ƴT e}x|9j,7*BwYv5PRݶE뫶K%kfb@ѕ?B[xK:?vHUyik[-ճ PZWG k dӠ4ubnl1跾l}ksc~k0pT⃜ Wx+Do#O A¯5B^N}Sk?5C8>$g`$Iy7AM,9SG)'u 0cJOl;bZzF)dY0-ˠAOiCW'~Zkqaw,DGB Lkjp/jZ<ǘZ||B|`J4ٓtPl2d:"Ų˞PIo,Z7 ΂lp;`@ķg1T˙u$Vuv8Ri"akY ע{IuϏA+{.ǨGtrGۓϕ᭦ląŷ =jO~;}Pk!K o Z[# )}фOuSV4"k;N|545`2IýO:<1`HO$7>2{[w1PcxA Wv_mTCܣ-Z]Ǥpr߂RpSE=NmshNL`N qgWf?E^3ᩈd7LB4V`x›xPת Bݫ@F )* }t ޤV yy6E/ \62O!h d\=|Ej>y|Vy;bkf+4- eIIccb&%@{KaG̝cpa (t W0BVzQ@Hdj҂VniS}uLpfBKT#[afᑱ~ {-(ha zӷo7Wz.0PŮ%5> ) -X zv5cӄT=9J*Hԇ qӗ-B=L4_~W9e᱋ʨ [&cE9iE>PDK. (kQRoK@ѥ^p^_hrJ%HDS 0?."̆|H)< -0,GF]o0BU1He$<1P>SbPNC08P<7Vr,xJ_@؝HPUA]iה$ æN4,om}0i⫻*)%G}YbKNZ"|s-VTfU,EI$S#zM۳\\:- 6*>}<+OQ}U_W3+f=$wte;>6Vm 7&y'?Há"Q} U5Üzx u #Y8w7#wErw*g 3ސ=ͨ!qs hTk蝚>k`[t{hI5:`[aok̈س4co+ЉyTաOjD 9[K@oz3s {|bD[$>Zn ;W9%x ³b_l8A&BGہ9>[8Dž'/We.U<큱ba5,đP%BI_GOd;jӽ$>uifW+|NI{Hӻ[1I#`9RiͱtT Ծ9F=JĤ\?~'1zRQ2h¦^OjӴ"Thp(oG=nT5Gᛂz4 Ă/i9yuD#i;KELW:ێ[?+6[^0 P5~.ɫvuV^[|o'Tߒ-޶ޅVY:2FҪ|ӏVwnۨ?Zat@HwЬ' ֺwq\ ?!<`_tk5>I՗ pze r'o`ahRDk9,DS!ӈjm~ aTo?0R_%ff@B-/m~K'ʼP&T&y' Ej0t+j-Ɏ,N3l[so`d|~3bJ؈AUgjޮ-n+iҰ{)nƿ<ʺ[r N$Vx}?ޅ5 KFm}8k .v]nu%Qc{Dϖaju Kq:Ш b?ȧ΁X?N~aFXBatWw*֜Syڽ ۺFHi|o=WET+H˜~ ~e'iWL7 E%>rv 0^|-ংAnj_PM?@uwJ0 kv뫡pԐfTD;~rEHiN_d- rS)Њ7o ޤy<4mŸ?F9O͹Bi'_"c^ը<ܖ%PܤGN[ f:z)*[lŵ~s`7c*D>AA89F +,٥Br Z<*$ʇ#iA#T~-"[g>GJQMS 2 5[_/hIlz1k{d~\uɠ +*b|L1a@83<([ڿ–Qq=*]Yp8WZĝNPg.&ڛ3!X-G+)~o՗Y󃚴wr=G&- 5h=y#û(3VqQ4_@!8 qy,:zYcEyAwdb4<[k>heٍV;%eNJ\Bq ٠F2yUWWos:oԊ< k{(֫yJ(pwՂB0q[vBZOG3VJJ!4 5 `qvy! ڶ 1׿JnU9x/k )V˝ܰϖ%Ggd>*qU!qC}=) 2LG5m9 , Ҙn}4z#0:=fcŭ7 -0Qڤ+辵qU3YL{#ǜ9"n>eۅz^vc{M`IWrfM݀(OgohV(?/'C`w|r+jߥup$h`~j^g~W|Y _y%Bn,*Ю?k~HQ)諏8q#0+w%>ۆ'RMʌa Cߔ!S i.[j>cXa]' ߍ 9H<<ܗvf(Y:J 3k s,Q`1_i&)l26 . .#7o_2(tVYbF ܊0aPRmBM *\T@NNoR :>í,p_Ef{*YU4pj|>gF$%B/9k&~W+G/p$lEX}`V_= ]Djce@%LmG's,VCl}Or L~7.+yj< 葭+Z$, n~%mBw".`F> K=V.g:co;vvGOߑ-vW)c' 9}d"П ÙIT$DO :Y޳4IJءܧݞJ@*"=2;DD6 n!?s{ O=od  Ml^ pRcN,d..EK9vy z72Vo\l@w"#tS56f`ͧL PcPbTaLWK۔x : ;-\Mj\0DH^}ˆ?BS* i$ |ȹ|pb% uz[:sңBv2N@niXQnyLʂQ&t^␾Z0"ČZ)7y`x{kfXb)ұ.2nִe#ĉ3nACxqP`< T]}g}ŞX9Ӄζ{5ɻ a䈲fV^."Ee7:#;9C63D!}z>1S;.ə DbMUa%1UiUqG"6[ObyW 6q t+BUFǬ֕ucƍ˺Bv|:`\?(T]7_4 ]1~&d>r'ne6zvAF Dl!gKa H?GXU''wC@JC2G : r}_XK ݳ*p|q*ŕ|ggpСȅJ_iNxɩ47>4BbN:s$RJ>qR1#eB_mݢqu:%#Qx`#)(Y6Ѣa\{sUho,HpɯnuC܋뜗LI5o8udQo;ZvqT,{WIhb)`\0,_tc^ IFPΰLh5*] Q5Qgwxԇ$g5Đ <zWs H҂Ƙ2MT^L`9=`NK/9W'Hv`RpLlu (iF)[E84m1)5YqP)rVȨNӭ$9#jKLBXK:|4ݦ^Sɷ~LbSYk55^FNhIvtҚ+^8m 7[mP mǘ~9zUy_LϒS'B:R,D$7:pM$6K\p'T ۪cӐO*hqqw\As}3b!o vR0<璿Tqab ^ yL bj_v8A0Nt=TC;e<LG p]AnjL={yG|ey#[[s;=B 1a_`x;u'7[R($#ٍTq~,7{@5% D%{~}؅R /~FI_J:IBQWL rX@g*aG66hBG',rHٴh;ۻt`UzI]%3[4>GE?9%Rݗ M~v쬝MS p/^e tC; 1H8X􄐡8TUSMKe:Ig0[-V~q1Q^8@x%PZs&t8l&7h*ɉ^0Z0&Hq=G hCطB"blqMh(;8ߦ$B5r!D= ݠhBTݵll<hJc#cQQ{s9nvKa>ht~4p~Lvp7p!W5v nMm*GxzYl|{$(5@KO2ĝ}HL2'L@”cHVt%6gut G y$Y>r'5I (hOYIp+f3vUYo a"{䱝|%JL)y9K9\kZH ;f|!r\zC@K|[+[DjO7uD/22-)(6/%<ǗObbOc{T6=5+mdwacad'sr_ B0Y(y9Z],FMv4[ak&h:RNclGpޜc a#dLyr 'CmJii !.NIS wP-Q>\ 6W3f:?k-IaJgds OQlp7$G}E \lѯP%ƭvC6^pXϘ;j\tJF=*9ԪpY~zFw^bAJWYTL4H&_!o4j%( +ui!/4('w 'K"Cr,mmo[lIH Wqbip@ǂ!g*b (՚ J֍R㔑Dp뙞+Nڒ|hMjw{~$GGG;tȌpù׎UxT1O1pqGP0ؙn ޽J?JJXٶ -yTL_VS/AlUZI-3:dȡP)B uAz}՛X:ӟaٓl4:'_$ ò#,AN3Q~u|<>c@Pu|=ޡ^{Tp'"pgSԋ 鳦w$IG2 ߚ Gƙt B$*FߏfDs{OוFd_A <)"I+M>R+Ctc֔K&Ixf $(4ݗٴ/[-siwt[%t [W%])MTP ?:\;㪧D0̠9(b@ޫ V!d%y=.zbsXN+70]]4Co\}J8bk#4:n1W1d&%}G,ӲY6,&"^᡾nP269z \d 3mC2-qZ=b1JXQĎWw*u$r!1* fy_ %#P ܹ뷪"*4cn+9u)Z=)`MF=bh#6GqIq)ȭnLlhR'*aȣWz/<_U-(T[ +&S`paFkըj43 5(,򹯩ѓ̜SVqrLEO Ym= $ <@+O@ٳc'-#eCh1JRWErp#t7rLb2w*tOօ3s.ЩO_X;ViFcmq]D+ČAxEuq6z_ Q0R}(^ǣ-{Gtb<2w5]XEFxA5Xwkˇc-E cW CΞ0_6K{OܷE: aPkpJaձhŇiÍ BC}nsd=+g2挟zt䪝CgPTynt^ "@ATdBv u3`uD@5)޾ .>J8i_#E81y8j9ӻ61L%Yx2x+r]Qd kf%ԅQ/ 9x` z4=@{$Gd9V,R>ۢ ]+xw2vke_>ǕJ-, R[Q*{2kUTіJ==17uT Ѵ !YТ$B |o1!$w/'5BsJ5zZڷ{?'X^@'h$hcC 3KS'NwNIf^>BiP?̄:KfLlfj"]L{fa̮ϜIᵓxvhHv0,Q"=OYWy1_Pn?ӺgrX(=L!ޢ t`^N7է ]m{ZG=^Ylnhhas|0d&:񵰈7M./q2B_]x3Ԍ,~|*iءyT>]grYa^6na#v]K]arHX:ETvHdIx(GPx [Cd epuuWc8}[L22?CzI#m|v}DJe2A&Ѧf#??pRҎliPjrQìڳjڳ@>ܾjd.g{ք“Y G8$ Ms|?AXblBum л||:޶3㶃]m=r-6|SžOs_O[+tAXCn "$<'31Q2Ǝ&[_;bDt*Rѣ5D3B q]<#:A]]cm Hzy`~ BMp*"PFqK>"DIг"Xfe k'7Ȃ{{6'5(M F9-o*ѮQBntߧde O7̿2*WP-Fs+Ꙇ( ӎ Ĭ0^wu %@(Ь:w%^uɧmW|uGCM^݂,9#qeBHĂC(MO`ۦr~ <蘄h & m6-w1[r $)ݝk(B`O+k˾ۺ-9xZ.f}(wVSc@ţ?k3Q|Sj*:[)dk`SL+?8:=-֏Op7hP$]+`98rMIJТ?=Q0lsj=sUz΅ʐnV㏅/47 G/rso3@.9zOvL`pTy>k<_!CENxyFX)^3|u [^$L\1Gu=;(h}|ذxLa/ʼtr$U AP/~Mjo&{ Kp># A[~8 +6B$MQ4 # ?eRY.5@u~[b|, 餧HHRKPzQay*'> P1}E'MPmQ9{eS\H'>;Yx)!kg,E"mJtux#X}|:#"Pk Q!#KhX;a&۷"`e>n%4@c3U0X 9]S>Y+\'{, M5Z\H[~{-a %CE{$tMڲi3\kw=`m8KE7A /T枀t e=-[H!ndJ&"9JjdZNY&NywY--a?kym@ i)BEWƆhH)i Tfb鋥!F`&QE=>8\ǹ3G#^nƓ݌ tזKX+qJAGxA38idmFзrY@5p>+K@՛;qlU[ra_w+Q`K=&_5cf/^>52Y@%~ljm패1ԩ6þ ;;1O4;f wf.(Vm"VS!{Sq|:06/׏ulB꼱Z.+U3oOK4DHlB4.4#S:V2$=> UpJìMJf`R4b}/jZCb1< (L'M`-*mŚ}MF*8>1B5TQW.ɗZ[̈́A祙imdm2{ܓ4],Qg+𤲁1cG4L. bo\80F/!_=,; g$mC_֣kb#s!]VDG-!h3$&.,7v uk9(}ϋ@|2@/ dQmHǾENRM]`flOCzx}KDGn W5ʶJ?\ߝ(#Ðay4eu08')N+W_OxE=앸CY񌫿q)-^b?ueKm/zd9sOz dꄚ1\΀W+wb1ZFiUjӴC4bB ak bˡ!^.i]o9rHյEh@36< pX,( fSVF#oy'E9tg}VpxAp{<' HJ ,ϾU_@ar#kf;D<[Htg*&Y:,Ј"3\042~7n\ZtLn,1>gmAV uƤ9,'4üC‰@>R]0x7CT4,h&z Jz ' ׈wdq)=0 Eq&u>l"wsղ&j%m"> & ?۲x`Za'vIJ>HG)fh M(/kt}pKتd;EőqR4Bhsx5aj2}ae\<魤9 |.߄$'gn኶;@x0Fu .Œ\qG[79kϭCJ1wGzb{U 388Q^aeE#cb1Kw|SZg^UfrpM:%f\hGm6 ]q"E? sb@p E V5,L:*Y`w!uHf w.VW2P>0 JAٱr- Jz?6iŦ*Iz4&VU_T  M8TP>ADkdQr _oDF 8p'~ۖ"X_NU=ͣ<HK'dRakZ8"VMa̰WH/? O ?{KhLBm sE>o0rt „P585oQ8m-UWIT3:%iz|ƪ 1GWTU ?+W3cB 5g|ơ%#SwDp5D}1DpʙiwZ#QZO%?i}et|ڣ$0c2h.ʒ2)qmMШDל2x:oSyvFC"KVo P`[Iѩ?D@JdΦVvihh:cFϠn>cZMBU 1jv 9HG=f &k]i}:~r!+T;KwI9_ze#JèW!?JWnm] Ź❜6>yB^|jxޫ7.B>$;FD$;~%Tʃd4I^.&j[x //+FK!-P-,Ife[QGgc[U'Z\.LHտ5@68uwCѻ.ءSڭP,!ٷ*躻 JdAu|(C sAz׉(@يF:A]U ܋(x H+H,#kӵќB,aX:|PNnX 3 5eKGC恚 Dj) HG^̹?99V;ݍ.FzO 8uT SIBAK/ )&!7ixt\R/[@hVnSt9B.)n[ͼXyeb\}M #zV ygX qO- x(g=a 3W2g=4IW܉Q$ߧXF:MKM˷%E <1Ôj> c @T2ܝ/ 0>@N- y9Tjß_e\g vP(ܑ4g$6-ͷ`=+`^^[=O7Ȩd9sʊ֍e] ] *۩ v]=3qFi|.$Xq4>2|9π{buBz\.ioVMP0-Æj5P5 2`'&wN TDr\V l/N NG w^|zl&<s׈5fhb/{KA=Yea 92 v3&%R zHנ"=9u}+H)VT $e _ % _>SPҭd&Dn? N czD6388d~zyfGN4ÈNğ Y,pl^1% % ! lu{0 /ʻ{l `bQtI[NyGҡrѪ b,_^ 1oL^k.B2%Vp{3J%?0$HD×C_(r~ExAŷ6ĥÅ=fUC}&,dou)au1M3#K0ؠl\H%?X%ҁwĖzjezTOK J?/w#t))#M|̡g^=u_ޝzN|ObI(39_TzL69‰f4b+JMZ#}֌ߟKc*vM$Ϳ @lxu56cR jٍ tI}B%)?Fq @w `It9.Be1k?Ƭ{ drw=t8A'tK{g_F$n7C89 J2FK' 0zasG'0ϲn;]sf:QK^bÅKMZ{*n`xex}8vxķl x1OV:}S_4L;ahr>D{tUzkSO硒3grKO}do!!,Th\;9 H5Y3,4rz?Hգ:1vu';z4WR40/߶,5E!R{\|>ŵ5c:}l47Ӎj'{ώ,iH2$~m&0d"%>7e*7o+ 68Y5oCYmtr/;hJI4e[ V%\Pj=7cHѱ_1`WNf#0iN_Zyw~uNѫ7qUXM5CWv*SD<>nx i`..e,МjhR;93"ˌO !ag^ljW:ʉu}&4^^״R{].Sϖ&Xm{˴Q$ ]E 59&'BK]Vq@h+K: 1z(CDQ72UhcLʞb-"1?bJ4!]裨aFCȲNs A7|dK;I(8Hh(vLisnaӻ`;)+0@:e/dʀvh+ ̔'Uqd`a]Pd*w|(ƃ׆|"Z5xMe2hX}n)HW2f㗗\%Bq6W gY,'?StVAh󇓏(L&)Tm<܏v2 2?nwVO\ҕmwT2d.ց "g zY]E?RHFC 47 }"Hٯز õ9Ml= }D6j/8^kr=6!pa:*FiBR1;l]tO+@qEph/"sKkKA95^~or+"G"{[ja=؉cGzK!ԫf?qbĔ ϸ8ElG6UfxD=]*pNJN${-?wh׈j,saAJiVm)0.Q6?;4ȸlCLK>?e U #$ØXa w1B#o 5G +wR@Lod< `8d4 xw8V݁Z &KFs袟%)2[oVǁ4m1K8ĩ6ϧU1'sˌ>UN9cTa (mV+,TrM,烙$Oe4RNĭFD57NjER?DA\PZupDNVתcsծ.,^Oz47к/0:pHiJR=uotJlDgCY])+M}Widܟ m VzʆjRiJhi_i{Kԓ:9 ҝ'˦HB+h1Ibbz%QUOk38=[hȇ( GuT078cwP_/ٴ}|0롑y ')Q x4]t$LĚVuϪ( Nj~u6޿F"˖'C9rr#QDeàA*3+Hî'i"_gM AEhc[>͸x*Ұԉ}~r.m߱af+,2cԊڟW(_'{(sۨLM33ab5X5?5GjkfA1x#J&dRm#-&ñj)0ޮs4EP C9Ģ "W{CKI$ ToN#2ׇW+fݩr@M M`_nJs?ʓao."` ye|>TJFn*v;ƉE[q-lWgoV4>6mrjhнgB'V2ڝ}Ʉ^49sU8SUh%r- .Y90g`_1\|".U㴇BΚ`#f;TtVNS:J{ <+ʚb 3?DK,Vmͦs110%9u<\K B >gRiEZ#{S5 WN( YPWt-)y{?,T7]@°M- 3Y#t~zve)ΌKh >cT ǝe !p?KK㫞׾| Dzrf= l`R1me@L˒VkWu N~,ҷkt];3eһb^vZ:pܥd6l Çt}kn4E=+r9,te]hްZ !\Ԛgtfmx;^CoxG9S!^"kiA61duD쨤oRɠ W FkL ZmHf;m[5IߧHfחL$>A mG;) jNcA@t!,lG{ʄt ͗&*`i>. fmJDiU -!*S7iQx!bNɖ:Z,xCMO-u-n=ȡ,^WTpa~ Ո0E U)+) }]mKqm$R~Fy%}wwfVn@u_9ߑ\whQ̦3DEEp@Ɋ [Ne6eh,?@ u!w94t.WXmY&.*n9krr98 펝TFYnkN oщsKSڶw.Tգӌm(Gj)LOؓ4є[ m\Nͩ X8X[N˪1OzDȎs}Ŝbl}'ͿFj63rr<=2 S? J/ⲁM ٍ̐sC3tI6(YŒEtmRóIS֔xÜeLItN03)[ spP̎"#@j̷?QI|ăN3T{ԍ;VJt} ,ЉN"L,P@B8 DtIž[ YHj8ꖰs~6k5͇ƨԟ20 "X/53Нwvf=8Sz]"`$~B朞̻a\ˬA%% "U{ayo3uБ.I[p>KF~iwM0D1:>%z[jIz slLLpZTщHZ޺2Xb-B*=Fr3j]{BˊyχN:Wmh'֛3FN6}JɱIAw0kѯMkoآP˄K ky# N `0d? *u-EsjҖU$.x椭D8]Wkf7eKȝBǖ[gh{|==1SsӼo+Y l ^NQʺTs8OIşrBzy!A<<,[JyӃц5?oq]Oܦ袉ԡ EX8<d fHGg;Ņc\vSs A4gY3}[Þ- *)@ sHsWǟv2 6 /2>yb%Bg@* P z(Gfsb `Y)v$V3"XѼn 5ke2a?\n996bVI)2*Q7*D CC`KcT^ ƃ~lAKp֔ОE2'O3b75d9,zoS Kae ;X2<4NQMn 9!{Wy5YpZ32mc[ 41q ̈GZ?=9K 7 V!dMf.w  Gݔa3WW"hn]ؑ4*-^d>s|:{"n'n=di>q~ F'ھ4QO3S]Ir; eAhfC܆d識iL5bLd2FV }- C9P=F/`څ|YYLx AtYhI&F}0{~s`W0 bЖLe|{AЌွ*&FNj:tMZFgzw \3QƱ%'|}|}ЦT`3e,bYŵ]LS,J'dWž |A}'KH:܆5qhT4il=Ɓ$LB0sv qDMݯ1:2kԧuj@fCvk-#p c!0mNX F'­˖58曛m!*rE+DwH|u AݜO;ZEYh^e$C8t2%| * b߄UJ; euiG.BÞ g2MAqBIih}j%\iG2NKoPri\V HZ:.wrNNFT'AFYG;s0gc ɄaG֪upw{j̺%=@V3:c.jO~ [(b$cǧ 0ӡiUIfSVC_kK4y79&ӻtBH`4~Bb\8%_J7C*Y5:92.eupM~X*@$@F:elpt)O)k%}j[&Mߚ\4 +'CijL ؚwgK9#r*K.8)!gJ'MCNpEC EIO=ә%k$C25Pʒ@+7l2{={A>,3(Q,B 񊡗(H1#"@ϔr06uS)J+<AS(j*(syB$Dt~K>G3nt|07y,͕ 3BAEM#I!.3. 柡7AVeuҽ)ʜ|.l7|ɩ!& f&7EkDO3 Cn"˧( Oge9@"C zҙ2<0O6i86C`zh_8|kvc| /E TEǣ{OXjS;IE'Lbnf۽"B$Y1fb9&f, K4_Qt%V7mJ?;cl;+B6Vmhv@c5*U( %S^3q'WPqJt_56cùb@9+`4L,^Lypͻ9\-޶NpD,uקn,(!µdݷfzMeM^c߼Bg4. " -#6Gx5M%"xVvDFFderR![ӈ >4Oh;eRq6rChmd?[Lc}$Ir 1YZF`@cC _<>+ɗ>ÓGh*ӆaIƞR}X!5/Ͱ7$b\SAf/,PYkleŁ0˾#( 7vHaR4B"G\L: u|5s{}wsP3?`ͫDa,f1?4~naH Ԑ*#TDzIj_%QU 3h5q>J@1$/e4atV{).L]E[e'OޜRDG˄9xL@`o'\dh͔i@4CNyQz2w7VsQ=E@"zy^O gŰ>ǾZD'ו:/RR+o$uLw&kG!*^ O2ww۫r G3:+ŁTb~oQ&qtzeIzEj!3x?74sP jJ9%asW`zQÿگ{.9b*ܕȒC /L#Ρut7e~!; Ϫ]h2 ǝ Xf^/ m}9Z-؞K!}0A9lPj H: GaQ#̝ 9⛊UW&"0/(/xA>n!Vx~~;ZJ-* Lj9Qv*v !bUhH5eWv|X7wt7JHZyML6LPS RznmZwFe@xdIY#|ݢbJn3g! n]{c߹}b! h3¬;YfE7_:v HqAgx@09?E%g<66mcmU|4(Ŵ_7~"6-/u ݖM[77y,% p!HltSEC6Bji{ ~E[{;)EbPZx׭cf{>)!Z.f[IeDS iSηfWXUM{|x{X;,kp fݻD18u@zR2(27 '"$ھ;kNeqƞ~[sGL?S<@H\9\-TthR{{ܬ x=^pN@N ·( ڒ?#FQv" %7C,-4U2,t%x[ TLߡ[Qxas/EK#}ܽ+.261c[#[ K6OpU֒^_`nJ& c3f4-b`vRtNlAb鹭h LvJuj*,$_N;ss1Aj)&tYUƳfkzs)3C!)]Ofam` yj[[jyIŲ.'uݕ ρ2WxcAG4R e{kK,mEC%K?zwLggmm<2RW:KaqJs]38@ \W˗sʇ3g}ȜFeΧDcVȀ4u?#VfE^d0XQ?E[:h^&MSo^*,] T-#`L#s,6k J-Lv4J|JKlxE:eI jvG!?G@L4"*k-c8P e3@lR  Ml%QE ^MmXH@[c`ෝIǷ \p?@ pYP'@h$\(gD+wq&b[f;5H㖔?MV3܇LoutW 옛nD&?V ަ6?̂'o_B(OIc$<4,"G~E~g93%GcDTExl˪0}^4&zܯARMf̗&*5㼸< 9B('W_xȂp8ЗnYMݟʺrot'ɑQ~g5GU7va.Ԟ` < @C#.S.WyygICFL, ]Oawld#F%')&Ʌ.%JqߞT#hA/ x?;_;l8{3*p]^5zBNF(`/>'ADSQ QG'`X2[[Fck;i-܋re6%UVqEQߺ\{(=edˉtfhؖR6Wd05=!&Aqo;DAiCZ/umpZP6Dױ .S\; >@v XY(PV 3%-Iy2PӑdfdcQBi)UJ69aHv/Hն fS6)MVV6m8=[MS"(K;0bSzTMuUk`gPAk]2'4 5JB\]Wtxs/$PWfqih,恐H SO.i0Dn(f$ 5D,$ ZͪFnr*I4!9{M4~O\x5Uu+exQ]閹{3T%t|,sqRR&~V}V4L79]nꏅ0 LO*#}@P-f{ +?7KzSlJb&/,)5_fg0wve;Rgil!&'8Ѓ%g{OʹS1`>/ƶ.@75^N)QXiu/bпc~YPrA_ӧar~ҩ/?qx%/ IXա˔4QZQ^ Lr̤0S0QixXeXd7{eܥbRA.Gm%ts+E;r'̘aIG0;ׄH/=.wVa.#G)V#VXӖYU|.f=䤦́葝((fCDž[&6^RY8GgϐO|Ăp4& 󡵖HBm 7yPc pU_ײ#i-}(7!D>YΧB#H9E;߄Fp(G~}A˿MՠP/ɘrL3k$|fEox!f$GTW1|(Z^}(yȣK TWy(!'օtX;E)Gr=y>̆wi,jמINOry4ڇXW?2y{%}E8,rv3v_BxXƚXTZ,*5łlֹ"6(<9X\ O%14BwnUz9yHpH*p჏颽$ )*fm6ԭXJTQzC. 0f?NkslĖp'C`dbaCLkKH]lf PU/ s}rZ0xP Pd8(0t+k缾ooU =]B'Mat5`.+[P4@"yv'*iݑYI \F8w@*4#nYNnjB,Xr(DJk k֕$Gyu}RڬB\]IzZokuȂ-=$-/}ӵu3j9=vs[D~->T-jAy$!b|Θ 'I s;YずׅÊkN`u@Ĕh +U75b]ɡ#5+!{9mP>)zܧFYv,)R #9&vYiIܽѡ;ei N^x4|3 gC1c/) a;wdLMy".2rӄWmfV4HRi]]?xdxATחM'E\OU*a*L1!R'+Н})OD>HDb/=ҭ-*f.] bIqЌqE IIh>05"W1Ar aJ [ 0OECc|> h"3&ҳ,1x°٪ If<q'H⢪Pbwyӑj5gcvj|Or8a:J4WZN yJXw q2"QLCx;x%=<EۋRDQLY_ܗ&IM UdmW X\0`(g d>$obkBrYɍ3AI;:.z<_̧Ad ާNގp'lR ~er/Mlp+A3Wf(t"NvIaʶ;7s;R\a{QtVr/Ƒ*JOj~K@۪!k|8!/|OH<dғ.ġ_Ym' AMI)x(ҏl!\z?7we;6G{62Kq0,21S rJc&G.i˾[:PfWJۖ- ߾gy^^TX[t=IMmޙLK%6Otd[8IA2mp]$? 3Nj/[gGSp t[Şf wY`ž@Sqp"Z^+VsH[%os/gT42L\\q`@ݺ6-5kq&xƦJ" Rf* @k~ksZEh§Bl:b.1874d0% 5IHYJ}nfvOA Ȗij:B;ã)EHXG($$\ ﯦkӨyTTz%!fGqYGc ._Bo>>wZh19ˬt8%z4˚AJ~Kz?B~eB U؆#xZmlN4uSޭBq*R vho%)l> 0\Z0UoiŏP$0TWt*bC`q0ѩSӃ۪*ۮ_㗅hUCNqPekP^ENJAn8mċRg?Ⱥ\>z3ﯶw>ʇ)yAo:36ɬ力ݞL tSׯsr~/C:Pۂ.6`I69 u '25Ya^EITE=ҀL0Bvdvu"2ѧh"*7ClWgl)60M\x"jxTT/=y5uU1_6?:^U c ?0(]0G[VL*9DBwZii.țThcAk~hF<,tTzmcq#|T燰ex\j6M8ɓ$8CC_lʬ)_*ȭk/ X}(+'%q8.RA̠'1A cp":D̅pv7+D*=.p,N *!~/ڝ*xMqٞ4y%Vz Mۗ5K􉡩 ˧z;eJ\D qV[BZ 6dX4zt2(GܟQť/O{0/SK٭Ԙ {SFB":gLZqgRT7薡l76kF;8g UC2VV*Ne+mTyFI~^ZgHMjޝS`\ɮ)U̻E=v',HTR?'G)OUxҽW~TtҮ'Tȸ*>sQwk ` -H>5WWrTL[k7{ ƭ%A:+-Ս^K5,q`|}U,V'l#—W,k仍4ݷP@쁩4_ С"9K<䔌ʛTTϢ#w6X$ʰuҧAЌ*{)Ϋ`/rѢ"ͦ^p :o~o7İ߄'4j vjOrnO\>Vim~Oܗϸ8UgߣND}=S?isמ}xWY F ޿+$ЭNa"p#>{ <Ʊ*;l 1 Q2/,V/C(a}E2uτZuOX1h4پ &T I>~dQ&s{~׭uSQz;0xz8qx5zuK[!F cqJ=-7Hqc^UE7#>v2y*%o?S_!zK8P))6S Xk=Gm%(MB?G1/γ&bhI쫦'-#TIo<8R]7 p:ų;+cE xo-LyckxPɅϷC1+ulV77C$LeaYR޻`2A e|(r`kwB=ʰU]zj~JR9x" Ae4zɁ#~֜ z`.}^su] |Zf׵ɏ|g=vk̎,ᐯg@˲FIeN(L&+Ğ+wJyXuf,I\O.sڊI]͵rhԴ?I ?üS2iTveTωmJ|$2dbC}LHDvqCjӨ 1ZK:*?u3 #XcbG{j|c ~*+HTr  G |}7$C휳 BxltƦD'&v6Q E}Z H%]9OAyf:uG8$͇ ,I!)Ey~ʦnmdEyV!C2 N;_簞dq?U @[y++R:աqa7U䓈'mn&@,<aX=xn_ӀT-)w=Go$D e2J :c(:S-6d\j v?“+tOH?Z ސ cE[jϰ߰ l\,ЊU;" Ƀ,,+[, \Eb׵*Kc;@,b%!qSarIw)\ۉO) E1UDfi!> T2K%?33: ]K\r/i:qoCֿTJ!.UmhPg!#J+[769[yZ~[])h-?]36A~LyZ( 5Sa|]OrI7Bڄ*lwpd8lqG 8OV 哖PWKzV8] 7T0쉖Hl?>BG\g)Z`Bں3 zⵡ(Z.xI e<+;]|Fz0|]Tqj=QhH USRX09vd/yDb+8?KвJ* ;1z"w/փ')ٳEkAJ@kz!K5CXh U dvu}"ѡye$mHP}yi8'GD}=B(]DQrC4D*X[ɖ"![n,Fs_B$/},Z!Gj_̘]&s^ qU5C2fi[o]m:e) ^U˥v霰dL -r8(Vz4DXc+MNPiGѼ>_%p^ەf5[>v)gզ܂SyE jW#ăQȯPnr#s-=+.{@юAip'g kgn֐Grs  Pܟ^:}$rݬRmB^5R?;&b  K 1I6 { 9 #`\Rq{:Z-BBv+q!JV*a&Le>`P^MXC0?edVȗtdɼh^-2gzzd1JT~W P f5^uٯMnRwˤO﮷(YPhXÕ}Y׿QF\?VR6"z+/RV~8p-pҝ]9N (0K#3.֚fri[ 91|#Tȣ#ny 9JW~Fm"yaH͜z\5-b)Oc;SPmTk'z `.I|$R y{wqiH?rPlv&~1"듃 ouQ"Jb}EzƦj#@y.b[@`@r+,U|;}M wvzO mz?8t4bCr^mvO*dcl BZډ??5{T?l$&./[~€y5s}&+V{ۋ=vaDƸgaJnX)&JS <-e''(]{Cj?&db}Sd7;70Ni`-ڦH8}We(M G/i\? B@nm@lkmw"+\3thᦩzm0&#_jT%0G ס#Sdr.8e,4m_F^:S4iEHe?iadE=~s"bХz%, 2v^[2JEf cy{`ERϢsRdv¼W@.: k6文Om OpU3g UeV_lUw 1XR&*uݟ8mߤʣH(Y{lf4"[B+1Dt=^zz㟭i"INӱ-\ߥK 4z@6=ԽsKVD^V8ţ3v\&l(2_~i_["5 AFy MX6Ι&;D(V K.Lib3{1y(Ѓ-Ґ7yj9zн I\ѲIhR iĄz( E qޤe3/GT$kK4_C΁:$8vUZٓ Noz|S_(,6+1]/n%!%P)=7vbh 3C* A s1wgxV;UE~Agv|o*\zGSFUD#@} Q%SSr"p5", q޺sh@93^-ZV [=[1S) #_BuYmS= y23O&8ˡ>!BW%"^WiOd3Wط4X uK6lޫ\bۓ"b| TzRX`*BVIһޣa7K̴o52Wb]&UYnsV+/^aLɾ5Rp < 3tQ:ŵ䄬Z%&.l]@7eoww$hm#a{kЧN_;8~VUg %+2!rj5fU"1T>SzF¦\Ù]=$g8N/`C{8M'˶>祢ES 3Cs:H IZMʖwA: dsȯ3$&#[|>ds=`T0Ï҉wX'|g!]/~7-HurL#;F݇ y`]#S_1BO+#rHer;r/b*C;4tFqj ̟y3,oDXAYf"1ͲiRG; /H`&/M1z%ΐTglnMo ) .59*y\D`:fwc +ε< wJbO4/Z1N(+S9ݯKkWbێrKe=gI99}9 ZQ9SjPޣ`8}6uӍccBU). 8ͯ(rK$r7=krV 1NňZIUGyCSͳʡINK칙Zmx4`inԭ7IftM0~Pm#J?!Dx\-\5"ڜT!g+qD"8ZC zJ<>j*Iȱ#R+`s)~[ qMٹH9W2A^lvFJVgjw2b8͉TRau2LJ$}KFH;Qpo;,M9M +( e9 #e4Kũ̟v?>qr͡P] dUBQa ]\w/*xEL,+euSIKzPZdb cEڍ32_!96){6PHa1H09)Vfe&$#4#^H V\e<ݮ-iwXEw ?2v̧ty_ ,z5גkRRByNUeW~t(uEd9tu -!yPo%rabZY~h0% M-]铏8UPKXގ3^1iy_??Nŋk?zqG?CyQ߿ 5 B glcHϥafE"=&2/`f1u'WQnz24,OtNqeI$#0z i7áhDN׻Gz^?Zr p/jX?E 93cP-SDF&9=UG=:sD<$gpc2L0z| _|)6tB*6hZmHOz2=)Y$8$6:p`6 VEտ͘aQKfLWXi)͑QU,}W듽`aQ轥6}|Ei_ӭ/@M;C=up*oœ)YDg9Tr[ԧcC+r(a |^/u9r5CN,E٨jxDUﶰ 2>TM-ϵ/yZv-/S3$\]kcE fjQo%*S`Uk-bz詞Q^O':FOX_z;2!Ub⿬z CXV:&4k_C7L߹L7qvE1gkFGq,nFH^6Azu'ƨ %kpt21fJʿ}+h34}-6J.?dnp' {To%ΰJϏΦZfX {f;[#'d$FU*fWTRe@&Y*Qd" ޜ3g!P. \0m+mAbY%^Art6l!OG9r%;YWn4Vm7/sW'nSP3@<_ics)W-9z^'Wv7 E9 W7'e=)x]%H]d1j-(FcotswX-1|qnfUβuI_ĵ+LlkC2*JRwj[C784PC,DڕMϯXo4?ͣqg_zh>eCE3ē k*)bL_ ff0baB0зc?B:Q,Cjz&u$F%-8k s9']x?L >C(a4qzUy~\S.?ƚAJL+Ee؁W|fUgTzsEtDR|j"*5"[~&%dթqδYaE@7i ^dg}˙Hw_ -bD<|<9.2[VTiB󄊍%dˣFhKBtt+T%fm/Vi:3 LD#Y](L|yY, #ֈ,9_y_L>B㷂aN`PICVOEluaĩIXee\@P 󡕒Mq\$yͲH MHUʕ}7](8]%-0_+@PY"=y벥@/s.(h۾7&21_D0a?%hQ4!?MXm<=ۚ\jd򡧆El{L7U[VX8¬Q.H'Zs6֡b5P(0xP>{٬ɚ'g}f\/s5[Co}"2Ds< zh?)Ii n(9lIul.T~7zӼӽ[wLO0K;Zw\fZ*x fշU9q!Mi{н*l'>oQf4Mkb`&nf{3gvn]P6R:.L_J/h6_ZOFLq"hGi8[ԍടt@ejU$- %L/qn& H2k.b( G.YooׅTٍ.j=[KC9J-Wg&C_2נjYe-$([V K *^:hz[ ewzxОI#p S &F(U6r&aԴ[hfR6爮h06ȆN3YbX⯂?8螈PDz[1sA #?\2ȟp"YAX$ąƓU?^i9N5 yP\Q;Vv&N'c+^N 7 U O<>f ficIm1r"=bSr.UIncU=W~%3O-Bת6;SoD6^ػۊ8 ޛۻg ?O/jD j4tm!KG _p"LH5RZ+V@EB]m) `c@r^0j.DaAXaC %j+D.ÚYXy"$ ^:G:=\QTQQ0MD> DS V QŴn"jȳjUo-j'&' +H7Wl P9Z\۹5uˆ3z?0icRSh4SZGA<$ nʀe/W|4'j!8/[`HR>jp!:j>^9&2Xmg0~B]e(j?$2ܜ["O 2zS/G 4YU?[VjOHeaC'K3_i߷>"r3J4k2m d6 Q# }Tk\ M^z\Za#?⸮x2'FqĺtLY 3ۃY~Yg6WB1Z(sU⏠D;nm//aFJ#`pH1u6a㝰 5ѵS p?}cUGI,vαa:b=V"g0򉧡Xt_#ETbjpˎ8T8:qǡY$ݮfA4Vډ{5Є8G'kaPD|}׌ߊku)]gvˎ@L'Eۼn,՘Δ~kW1{s`əhCЌS.*J"V%.)pTlv'Ii'['b*I}lPnYkbCLQt>+X0TSxԒiDX%9<1Xཌ-KZ8&vH5%a&νٌ/ܬzU\e՚}kQnܲ=-Z3ů7nn% 7) +t==,׀gsBR+/ B2V͗МߟYi~.bMn@.G/Rq9$5ӃкF*-Z~>a,Ƃξڝ[}1 RfnT%D6%UT=NFc\ }äU5:pT$qȧj*޲0uj.O ;΂rk lR%q(JEKdfUԨRh1J@ ȩϩCI #+wO,iv'#J^*U<籋Ys}G½a4!c0jh>~)t@g^SFX0_۽@qe4x;9UaN7פ _&[LɡTQl{]52Lʽ8 W<(ߙۆ^C\bqQKAvŁQM-g)zNL, 2 {!JsY1_ aݰ-\pF0| DGQv6Uțlo%a o{kg}.*TfLC`c&޴dI4mpeqfT>-r;JVa>'w d(Q+BiefT6I*ͺ7M|D 0&[ M <2DW+#tu0[T[2 Ʋ}^`]/ƨ( h FASw7w (j 蚊iUK3QP`;oGv9Ymkm#[t WjCW\=pP+?aO.= mK|u.'7HJj-F4Tκ\7sZD.ȋ#L1irJzIB/PbxTK>}Vm(]쟅I'XוNF,X-c kLJ eL XwnːFT[Xq6MuiHk)_?M:J %FP"}TUe<4yσh%r8ds-"EVxCSǗqp 4CEygzJ 5GZl^ qҗǣO%%i~}%J"!)8)y*\_'ZU?rĶbB~%_(@˫ K6綂k㣓\ L NhJX"DMrHUqE&is9ZZNʄ Z$! c|*9N>{HuWkĭP$=Ӻ?teb~˯Hl0(-_,ATFgUu%>^NSDfBOʐq3/?- H(/vc" -{6߮LJUO6=4$-Cn^̶SHrNPU ͮTd|Fu#ܚH$% Y m(BnJt]nHσ8VGЗCm/ePI5>uh#E,g]ï#..Xuշ8t/:Sޠɾtp=L^~&.eZB`%)5jಾI'7A'5<nDSSAsi@ء sb: YVdK(o´,f7-.)_5ޣ-d(r*ˁ~To q5wHaOX8Wc9bʿ _7}LV|($s@"%Yb0idhLp;mu" Nч~Vh'mҮgA͘*pOM}^9F~[=Y'x][vZR$yYo?uo# VlƇyI`lt@-wT7wiJ Uq4^s$N&e`/a "A{fFk´e >-gp('-;MKa00RLL11QOO]'61xŜ͚G2*Q.D,">ďAjTBy߆JE`v(N\4s{~%c[RFTqW.)25A/ B @'&ovMswݥ@m&BqT2n__@o]{[̑? 72 ?m1B(`f|"h( m981/Ba ʕ_eM8kX[ǒK^%%h"hE}R2k{?YNNdW;a_=h.pThWgkӞ!5'TN0t&`^9nI}j8D"3 Ӝc vCˣ}IS|:BT`~6"nA T=7CxCUV\5 R^f-YZNH5EmoQu?o2%8P1thp# s32.Rrlx1H ŸͷKzaHo^*aj'U?7ζB(d" h*edNIœ|Wrz1Jv2] |u? 7꙼ct8ܾy=(K7TiRpGKF[gxStL%y-"ws46="37#4q"fX/<++C;SKhfiZaɊq6\KJnDCvu:2\-y`G-6:n7= "WJPDN~;V`Kt(sK:ښaK~~m7AY@1CWƣ o?e> |qH3OabtcI }XQm7mQ;^m ݝ$H.$c5a$OdY4݈yhsІϽثi]#Z""c sJY!';'ّwkWqi6K ܣس\TdW1QYaBs,Ս }3f<`_}0]PFbP}q,6/X`ЧC?R =e,u0OAMV0yh񗂏jK03 YT劈}D {/į1BB.5õ}favN'X2XC߲쪹)aU\VX+"qs҈`3 98/q+YU= cS+I(_!&;oF񽒩RL  ;"&*/`daw:L&ԍb`͊EP~ь)H6JB1  3w27grtzBO$b ;ldtx[JiHq0o+u ڢ4u!~e-$3Er(YR1 Rk._qv\I^*Y&@݈edv' Czp [޲w ~Mɽjj=0U٧gL|3HW|dxuk*=$=H{>L Uɩj2 9SI_dܸAY}G䖏4Ԩ%Ap|F_h>D76uçy&g]M{ `nm}d5[!CkBqww Hnڜ1R2_Q?CO#SSnĽ#n EuXDOatZBJõy=>̊FQaԏG0f+9?3 C}9/:V2ӆ]0 `,.ۢaMOFыuǐy‰qc)th~)FQx KCPLJ訜M)z!G(g# `7r"[E͟W 5 @V@۵L%?X <gI96yC,Tf'&A5׃N?8f)楕,Wgovɦ-֪mS>S;n#DmM3?^A;<>9Z71·J0P>\l~Sck?D8AG,"`qijgJ`.w1Jn= hՁO]3"@\ɟirՄNfD^)'`1h*VqK쏥f;vW O][4L| 0C Pl12*Xx.LuB_6,0:wB2Ħ$+K,#ؒ/cU;D;?l3*MAѐ&RBm6¨ck|=ƱT#]^Rə˴z)GW v ,=셬b?8?IYH@t@=4!]-v=&)NBJꔝ&v%ǴBc^Ӂ64>1m&Ms'4T6g. lkWz30 Uh(gO|hdv{F~/Z% CCK~߃}VxӍ%3ݝ 6yэe*g 18@7cby;Wm!yt=Y;RH>ѥ}R$*N&9HB+X!7=jabߥ~af8͒֜ga;+:"C5 LYa== ߴ49tRPa5Q?R`p |k\&pciE"KL&*9"rIbĶ0?5wJ򿕡k0rnٵʌtW O~&׏GyU10z ;2lIv0v8cHìIַ`rIk-gk~u+t[roZS6_بEH/P}]L>EHBIB".e.&R[ٸU yb>]k\ no쿸sMG VxU\ K>+(i |_/YsY OXn"c]}Yt@h$WCW9XAߐRwlAYH3|KX߿|mu|k ՅifJ+<x߰P49rÔs"4ĭr.S"B$ت=QY[ o|ofzjxε)D% a ,sщC;hKB T7 n]fQ*,.V897 Un]g(N'fVo'1fLUgyB5gȯ .>(# yrH` Ǹ/Tbh\ bqS:ogS/٦$KHmq8 2B$J}K;dC1aMϗn9nOiGI+bx?>dh(dZ[@-hFGL7g3MM}Z+x#pv}TôL{͒/m*?tHw[?Ept%h#{HA{/j#Y Vt3#|"+ԯBaU2 OV$ɶ>#FJtrTNWS5lMĶ 2|!LHvNuC[;j32{}ChFp[ԚѐX:yӡ9g'JGtxm.,ƻx CVN_sL7 bV;JٛqU\N0I|萔6[1]qo?Fq}M`rvS/4qӋr6NP@ɍ*1AQ-jtQ?z 6߀Jy/%Hȸ(UKD݁FCnNF3#zO MOrup(>y1fcE(eUJ`YDfZO{cbOB6xyv`z/s|yOخGEuLEkx+nGʩ''Ad}^2)|{) f+QFU?3d~Q"z-վ~mv~3en1ͭN7m@iFiIF|Z_G y}}(oIUM(PiL w*{a~TJ ra yew==+,춀q/XgfOVQZ w߃_Fߢf[u=p6&bܣ< 4☒q,IۯhqrJ@\ld!S@% 9ʯl4U9%HNP ()>ԔZۭ6i{Vz =h8^T+> gCCpcqk< bo'OlIvʗoML#7g;F4xQ.bpvƘ|Ϗ  w) T3drQ[f(=b=\_Κ%%ǻ:H^馏DZ) 8bx_V\>Mw\/&̱^pad3eH.D 42](~,ցxm3y}2nb'8f_MtGHN$g,NxNORQ P-Hewvjڣ2?RNs؟GT0vh.O`9Z%ʈi5#65pꅡ[7;k;P1 B6xwV4W F4aA] I7@"nX՟ C@FGGErݛ] I6q1L<δf(}jڼvFbof)dZ[U?g[NSW,}&9G82!Ad 0@dYQu'9ﲃ|V/F .g ZѯFz8" jI.;w0mtϛ w-C'RGX\]>xt&*;  HJ폏Gc1+&G:L &LqO@>l?2eW6@%IQwFF!c$MEx6fWG+$Y;OHg(a*\y-rLq[2:=fL0C")cEޯY uձ1׻[0@U3)g__aӥ|XF ~X&#FXۙ@<*)T保4ZTJUKN*Ɉq q6Gi&V"/w|%nC %\f,Hbz 5OÇd {rg=ԩk'aPP`X4zULnz;yҙL #!:z.dsv%hd~ [K(i\Amp85;`Vx{N9Ua;=ohlm@lULeHǐyv3cS.Z΋S?<ױKuK =VN)q_Vq篗;iuEeVM}G9xﶧaB]ޞGU|oWF@62ypo1+&uhwlm0,:ӿG!HP931\YED'նFb['(n h+I]b1l&C [u| ꚧ1.RSEtנd1v,$`h:ȫқ^zs0"OT.t?֌fq$N5u+WI$tob;$x%d?#+9;x3fv)!Ԭ-PvqO[Mh9LPq } vd?ꃨyӈv6S)M9@gAU6lNP<ьxX9c]Rc H6e =2Ɠm1PH(N#,Ar/>&ޞ!Ŷ7n(b[12^Ͽߐ&Sv3 1R)sSi| ,b^乇F5S<3-`44Yq yC|̦ {@JC?w=X1 'YRŠbBK%~"OZ͞t"~Hb2V(f/GG:/ lPd`ʦ0.$q[&(uRv3`t3 XoN~gsK0g=Ȱ1#]Bjme*̪nA7t;x嗿%TK{m=I; \b\'/] :w7V.0 ;i+\&VVZCN"gYseι㭬Y@reqj>];%]r䘅.V9ZaD+#- u #Csqnw@#.W1GPIu0tDw n ʹ醎v0tn T}ͦF{T;I! {ɛGt2҄K7韟g9d%<.5IS2v]SkJް.>EJ,SV.(5F3v6[є PωJiQ]Z>'|x 9UVxv|fE#{gfSnH L u{SN`xl/t/,ihs|$+a"v_GO )7Īzbh'OgOv]/LXW4ȴsZ{T 4ȶ̏Gu|*θfB8v!#`,ӎ\!(قә!o(Bb@&p;(` If|̍3SEIv(B°)NTo?_nbƺʡZ_uܞ " (^H0{^ @vnP%~Gyue<6= 5jQTP]yx6'&ʍ]ݬYޔh646Ad[gĈ#Ld+!vZLDwL?&UQց&`q-FgW1%JW•Sw;33Ə }"RH![aڣőA 9%-'w,jW1>j>9hsL+aU޾gj;5 S fQݟs,X2 ԥʗ[Bo[wlCωFyYA](h^qaVza5ľ+ CzS$C j`qru* >=9  RP!v~ʉZ5U #ڒwT` ve^>I!y2C ??3\N MmzkR񮪂u &}R(_*1/퉆f^HWE]hf-^Cl ե n_'ʧ[|,H|ZPOj"uԦUM^ }& $GMkd6N#?1Lʁ$9M1c` R ;OU +6:pF p: /ĦP#ZD6֧I{>`)4D_'Kq;#@dג`Xw]+bw\F5z}tR^vfBP_r27Qׄ m k \o fD[i*(@jTh'E0ۥ`#@iUn.r\緻Dw,+Mz,.E*b$79 Yo")Ej X?>@Xtj'i_T F[Br7oI\$]39L6F6ozaz,i ȭ;6Qβ`5+-ظ%T6Q1F$fbNCʘ43,k{^  LٱIaZڜYъ\#ꎿ608eq!> ]۹&nAr(d?#6aR9LZH;S8 Q8Dk0ga0<\Kf2&n[B iz\֞ ԎOdeE0ĺ"4-$䥫WB=4|H2t)YZx* <Ȏ C,QiC$~r%wI4@ElOD8&ovѲ.Fۀgʖ$)eGv^&p>O3VBX/~\#ΐòA>2J(Cxr>⮡Ҏb"n 2{d$1t[6(9`ƺVr&PEouѶxusFqD2Y˚ׄq2a8XW u^=ҕkAKbfXH$\p4`XCsmsKхXQa!LMޞ&Y.j][lU-qP4iYmEU $YlU]S߈xxp  ώ oS՜=++O2w}wkЄL="WYS}{d5s 7K0R.J+f Ϯ9Ne4)2 !4ߕ0e{y󖕡$:pvpb?Q1>څ1J y e7r iӰ܈U7:1%`v T#cd4pœ 3ftیߌ)uIMvN61[(%a݌ߧW/m!)$a'feS4Ρ$s4ϿOTdp)QIBS嬺Z1dFr(NH3)*A@uUW[lyAn ܔ{.vj¦jMF>t<|JfpJE50V;pn ;A-}!=pt:8[>*5!YC!TM>"-b%@pa,,T_dF%zvCI.oqqڷg ,it@FzsԌf`X(M.HZ5I+<]MY0F VS+@UndvKg"\)V4fVXďX~DsXr$\]w;nG⤿d JH)9.MXWRQԮFŢ7mdObP{sE8Mh`g,Fep",sLc_tL5D2Fv\uY3KWBM@S}H%S"siy=>Ƴ`>#SW#2a{&2$R]FBpڛ$}Żju^ߕݬH˲n:b@ *̶kШS׬n*(DJ.`Y5E 6*QM\İK J:9{*9L>@+&0Hm{aF& zl^}h-Y5)RYȦ z-!DrshuWsTWpnmV5_Y\f%)tɂp^5|LYaNϛ,_k AX~hs`ezu:,8Onţ-CW}3n7hvsx#Ӿ5赢q:4`O\[%$Tvvӂ1b6e.[/kku7oƺ@rAR2a*M,K~9/; a8-SVOGz\7@:õT(51k?=DB#vQ\թjq92-^E_8~չk-ڿVx[ɼ|C]ԊSxjvǤdZh`Uc_<3צc/? 7t2sH&,.pH [|ZHkQ1QFˡz^'+rBeF!qȉj%})ۀ TY^( mN&rS9ZC&;j`OE c:p ioE;$HU=-P)N~pӣ114Gwk;%i"Ρntuh[I8}d0o=gY[(N#R:z}Ɋ$/C 7ecj`= 4VpF6xF?ngDՈyG@(zF0A.6Hĩ8U9 7CWI3N^<,57e Z++[@ 焐hYDa63`kRm_`&C; -ZdG'=>` c&~q{l bK u6N߁OCy*ך[cY)!mF;ڛͱ:3[zhX vyC9vk*HqB~R>:c~E4 :6_IsJhW0R%D׺`z~OZAX$[xD$9O>^ߪ,hVG@id2cW<, "\>>X!]`v mj(-EKܽsFVe눵C^Dj3u3tBzfΜYW۬ EZ_)-87}^QgȄ\۟ oNN]3[^RJ<Jgl^fҗC@?sܵC'(CyهP/9F #}p2Qҵk>, M`i[h+5G4k GI_#ѽl<U:so=pߩpF>}*D$^T'~'ũ6>K>1ӌB{5}O{>$_}ŅT9P> :<2'UL8ʔ-N?<x'D3k„_cO/t;}9KØ\ᡆm[gSW UĚ;A"8DQr'861)@QDz`4HGẌ)%ߢLIܻu TWoRb/* B>BޭB\#Ir qj֨@yCu sOCj||fXq"**sqX~ j8R^~3?*=Ne}v䬧oS|sbzϽr=8 GRP%P7 6vB夺&=:4̪/jMLvR"fF's;xFxdCQۅ7>> 8t`L\d}qύF DZN%*Jw#6eBc*lEZԚDv.%MY';Ś :L#!>P %Rt3VUF:XFm0D_҄Ծwd`L:Xǥܱ8<2_F;Rצ[ u-?U΢\`/L{[?WK&?VGao8vgJ)3d[!ԝ T+`lb5gi5no,\6$ܴt%G7l/bJ8}YTMS&ٴ}3`5CBӈ|eRO& |QS"y'|­q4C6rJbmAg=9 k.rZ΋ R}6 DOޤdu LܣL%ٚ6!Cy efQb4(7~6ͫ5RܹnNqecQ_(+GNǞPWl|rrwi{\S`ZZ`O0S@gBo2!Hz0q/0o v?)tk1/9yhtQ}+Pwds@= ^!`VGʑ=ɍ;HjfNQqLC ޫ$?فhLp92@KñN@w"9ÕT@';iLHtm(U_+a(\a@mR]z6S쟷y |jz#EHM8f<-?:`V]QwJFˊ~ǟ딭\γà8E!C29Uxd"bʥ|j+j0nT_](7 ðȭY-wH<9Zz jJ9ȁ݄d;VO[Yp.?уƴ˦|{Djf*DβIF>FZ5IS{tb,E P#^.BN MS1Qo'#n?;@iS#u̳gQ&x^l{]Q=oݳX܆qϔpy<8{NfD$'|'!7VҚmZ)-1>ĿEPXՉM) Gg8`ŸP=CJ #8K3Io}~{ FdQk-րXzBqPݗIO:G7ѱؿ xyh&P.enF~5ə 2xM>ۈ%^7HK(ZpfiKt@XŚͱߛ'"]a1#y p^rͺ Ox,W#|WtZZ OQ&rbMt$?讪Ja^WX%Vȁt.jBM>HVA" q`~Tĉ;[k]-{zNID,1<*&k۪is ZcH# `'5$>Y"-`+UM6Q?N[f "fg^ PkHwfxR.>P:3LVs cP%IK[o R""C:_T'OxT\(jT~0| k$lZ>.?.>P`r#?2IJ*Qq̈aiBc [?Մ-zp?y*.Ⱥ __'a[ڞZ; 9*JwVV*Kcennķl; |4G_/}3dGm!8"Z.b:C\qGҚ^c2Z_} n] Jy60i!]RRSσy="SN-[ۚ3U QW$ cHbޟ䪱rW~e79렪C(H|Ǵ2!Ntkc^Gz3I;fv򭚻 x eƤol~G6'|*aY<-VdcGM~7{Udv%U08"ry4[TB, ˃٠^ۦ7\?F> BFz"ﰔ>G/ܻZ1L 2r?.f<8㴥LN.n"QJ!e{~IK>qlto{ʷ'3Hb;#X.ؚ^uIZpxR"泩#X+띉EߊϬ;_le2d$ A$p UB@ֈ$!}*.522X0D{94:[G0)HnCʮE1GM}uIHܐ8}WTjOI¬rGqfBBcP$$*a{ԄԻ[7!{k3vk Lb E 4ion"L#[9/M0yh*}f$Ly2o5j4eRC%^7eOni,%_51` , yf`;$J#,TWj~-\i:MsC> e*~,HLzRw sv t)#uC[X^$rEO4P[A1e#t*V%8毳,cDƓ`b(.Hq^)\AHɺ À7kbT$R(DY7z;[|`@ÞZ3#/F fAM H>]KҀt_H76 1 NDi>>2ʙ_M^"@*rc淧=Y >T#e$(JGǍWkxb?oxt~=|cFKML<;Zm95#qj:V|kV5Iz؍Vh9F"Ɠi6OU-f, eL1.ZxJA&'!2y42.sӠP~ |ts;69ߊ:㒗ηEڽs0CUЈ=ç;J-W_nfɴG K|D\I딽)8NPx*uin` zPTFf^f`RﻱX{Xq-c|ߔ{XI(ћ &"m4Ҭ6X򯁘4vT쯵/:Ri1F\<7& D<,AWT`Q3Ռp|5;'G#>zR.C嶓njXOu1tR1GZ+ZT FliT}ayr&Hh8'W{%VM~Y[ȸmupUR6+9aOo iV7M ,59bׇƳQ3j|-B·-5r?SKG*Bl{ X/y guI&e#:5QOo9jr{dڴ) VuILZT|}QCN{e\xASZf^4HW-Q9k~;O{;ٵZ )VJ.[4|?FcJwo}x0!ql[Pu=^M65H@S|Iputx+~!!=cgy ~櫡b}M"&Rrkަ;(bN/iќ٤=0X?#ؓTnjc @D\Z`pFQ,a+w>;^rz=ϲ˦LIwƄP|pRdEe44M|}t P0Ȭ1P/ \!f=k1q`  psjCHGgaٯ /O>҇We 4%KŊ x`px]`f7R5u-`3,U$ x`~ύ>]ԏ%Gi RnP/}gksXq;st%r>} uū8m`Tb7>y 7SFp<,*kTRo!ȡ\yɉgJB>TOm]Fs:wP| mǜiCN>UrL?Z,߮S(vBP+F99JZ Kح0&r!^sS[1zH/߲ 98J#%>qӇ{rFlnlj]W8U]:&(Lpt ]nӻ,r7ګ,tof+a$[2읿xU08AG(5k2چNς8]T4޼IYT ,i 9OZjr ZiDy\ ;\}2KMKvD纆2]" TwlERD B eǜq6R> `r+~zOTXySz-3$'P :a4mN"`FXA('fd8&Dq^oc贌#)scKQKM`!Jk ͺv[PQ΃d 7h*R8ԣω6 W[NNս(> {*1bMieB䉤5j3;!H A+SsĖ[17 `d 'J~4CK֡H5ܵ bxl^X|Ea`NoaܽU]8CM﮵6Q7%,V3 4楬#?18 ^ŋH9h,3[e P^$Z7cɏFC%*VPtCvKh >(xLiŧېv OB{w -?v͞#fhjzJ:)j˵c"nB d0H#aYʹ,ʸ^t"3eR!I3n0\78jP_k:jCĜi:3Je"{ĞpmAǪۂHCAwK5Rɇ K/ZbBcMbGW+1Q7qw\M|sFOe.mݜJ7Oj`DEE6] ًL5X89=B}N-Ԥh:7fpj?X-2wj#uT`ϲaO\xŮڷ6R:rqt

OcѰ{*?)pկcsB>KH-{N:C-^Zb-G1U4A:`zlhkYr &a~ !B4i_<2!PD>%.2%Eؿjd9s)qUvրdWxW mX!; 9q[Y6|ȭy"C1@s\ |SEld IMFS]L_R7Ɋߟ(v =x 9BJY.~8Ew~hՏ̖ e.iqԒopO}zO?m.c _14`LIA0Oúd_ O@*;Pi%:Fsq2(,J7Bn۱s=k>"سTe|N3k~11ȓ`<=L3aѽ;﷨^T'8'e?2؂BĻfVi{svzwHšJ͜/#ف}z,h1 /No2>Aqd;h)6Co2g oKav5tx"lE7Pt<|Үv5lä]RSE_i dRUcx#l`#Ϸ(#/}38U$tTh;ta)Yg)s"rji]9mJhO9Ay\>Υ7tqU 32T#X~]t'XQJŪ20P1\'H ZjZs hZNæ8 \SGr1JSr_9mQ|ѺivH!:|L(DԌcE+Ԣ^h# VpZ_?@[#;J>o?Tx ln8f:^zi0gZ.~ 6yQkĞOOB䭊ee6_,PÏro_,ݼc~+$~̌WeXRt܎I--f&wh74R8J K`- Ke2;s,y'ξ>9lY!YnaKۏe9eu Hͣ TVsogo.#K<"!8Zۂa Ș $ +R]`_hu*똔_ Uٹ-9ɢ1"}:;#'\u`9SaCQxL?y $ڸq A\}97}E.5$*z%ǝ7˅s2pYCo~/̮P0YH?Gf&';-93e lzg!4>3)@YoЉ׍&IlzeCoU=]~Rx{S[V{+ZaHZ CRtlwg9>(kVG0S%C!J縏f=oF)[?O`'sz8>U  J͊B(YV0EGWbOIEBlgdW)58%O$o]1]΃h\PDru7QAyYSQr6R^,E\FK+~J* g4 6Sŀ i) VYᎋCAdGL9g"_TBCŊ}\px$CSϕ8'O>}$aI7n'KiäZRٿS}/v4&жzN, 2-,8 ,(+5k"p?B2|o6}~x^xI7;S@ ]qS"nh-4X[]-D s`!^ELvQf794M\,|YGK娜Y|ʏ,>J0MR hژ Og*ښ%J4boUt7g.T?wPW!1-[)_t }k@g}f}/Dm>PwXbLӵ;52?E dhAM]U[Ő1N&0qoO _eNuʲ]w:ku:7ef,swotV\7[˵^?chA;K@ YPǟW7S '4Ef/jad;Wq|zkc4ㅣDm[k7u7X8񒫕֒*73R-+Y<,ĘH|pJCNYQZX;Ѐ"k_PuEY6 ۦ+a0;j!QRu 4W7_݆@ncz2-gB};b zYlmK٧eY]=3Uw̧i lImUЩ$[W^Ж5Jz~&]ElѽHSs!pYIX)"RF|-a]t&) E,`quP" $csdb'X BH&|d7-"BN3]UECWka0 iA( .eR[ [xzm#uy濡c6 |!}HU3J%p3,J}:RebhWH3=4P! #'1aA?)׬j0 <*<-qe&6W~K2no b8Eܶ8[^ڶP#uɸ?خ͚g7ʎ5"DnI2mp _bambh {.1cli$Nme F֒"F 󂘢ssM2Z]1?-~>__I3Iv~ lM= +1ę~߶.0oftݒ#*N'6oJe۞zÅ.x=2]gSo&G^C1*]fRc P9>'J/<;:Q **{^wsUK8 %GßBq箐=c(L6- KQ8DcA5Rkw)ƟXbGQ*saɱz#EJnX͎ *Zd.+kXR̂f3ì;eq]dEdX8ۣ{s5S +mnwCB>L_fӏS "޼.hl(-4:@PF84t`v{ci{K LBgВٓ)a '_3uf󨵑qjȣbe3oUue b0nY`/!_owxM _ a!>BѰʦK}ĚAI<USSwD-HLTYlYOx!H!މp!UB b05hUvdM d&37,v$YIm/yOҰmm *: }8OSK }{ox KHqM:RZ!5f(4q fgS|VҳՐ2t~leg6g}Wx^ʸ<;]63/[e"*7H𮧚!l?W^e@9Q ;?Adk4_ˊL^Q*kHV!?MƑ}{7,{6Y6jZ?V-PMff)TLaܱ֘<{LfщW0flc_AM؏p~RkAJD5Av-,A]zsU 53Ԡ)(w$1yAׄMnHHR&v~"u9^ShM9&sOΒ*A[d(9 JIdȗ+z甽kuYOUNu':zYcf b:ЙQǶ䫈%/ZѪFRb(Oa5q5 9,=U'&r*VVl} /Q>K5fqz';Qq|Q- S.u| l I@Lb,͖՜sds;༯ͱbg1N| z=!g[ Yi?ʕ]Ժ@c" AU#@P>_Nom@FN*xwԮEhPYݹؕEٚy^0 pN2h[ɺURhnf9 : AKD/v-,eutmtvM/X^To W\fl%ؽ~!vJV `зE!hPB'<'BPƌR( ъ(H(Ě,X.ŮYk&H\EmO WjWP٣͝'a9!M.q=;!M^/1d$t_: R%Y?JT&V'`x^\LI^Hn]m(3 eKRx>?9\7# M[_8nYs4`<.EH갆p0[#L׵(Nà18dXg$LZ@щ@! n$1>`2@wUޕW=`VL!ժ~1@< &FKΤ7;*/+di/O ͇94~,P* `':T.u6PluFZЁShFq׼؋@F ^,.TJYpkB_1 @< ã2+'y ģ.zH1CC#84B!7Qu0B0׀"htm0+iQ{`)Nȓ*E M'$[\ϛm~K i{ؼ|xdvuL4t$ maE` ;!H$"`LIS4wDq-k<'*0x(BJ),m8Jwu&5 ipg4r]&q$QN9]"Gq! z; peF('4QK| b[>،6^\{6<ܩ=~Q2o9 AØGQ[jKfQ1r u/=O>mVZHb}>8^wʄZ:[v%IXrM&_sŃ CD3a m xZQWFZ| 2kIMt^}uES[P|06JȂY93![(4u1x7+\0#cF@1 <ˊ4 ^=o&:jy8l>BNB)ՑxD.2fus >r0г #ָ_Y볉}. >- tlGM$nAI&I\gaȅ'}l ܄З إ& |װ AxUpOo }!{)m9yjڎYqӱvdꢤnݝƺE-v|\kt^Ot>,;#Ro'QiH؏:C?RU/!{QEGwZ(e6hһC̀K9*w'K~⫍T+ˍ\:$eфS"3dLR?fY()IALoM/v'1bEI{{!IBkHCF K䕔M*+ %LD b~x>!k t) 9< Auaڠh2a-P]PgS@9(Ez#xS~tCq ._k{-e42)EehjY29#44DٕV(f.{y kODƂ4--ZBETǧ[9g_r bBJC0FO.#Sse6R3Q]I뢣h)0ج {udˢc*aQ**TJ b0+mN cD݀]j=Zs$rM`-ѾhXzaelp[-)Oᮈ=ͅ剀 2s&lEw }wHE YX+,OD7)zuWlbA9KY(AnZ#yZ?6sD|std3!@0ߜV.8v 0#;Y#H4LŠ^eU=#!xN_>O?,RKWx _5zgT$\\3a(" VII%N+S@pXvI[@uN!DIamDrB*]ه [ouNyV^(sӛ`fDgS@Ag qt=uMhi(ՄC<>$M0OL6IqU|/qRri'pFJș1!_pŻu!'S2V3\Yh]-fD; Xhe=,giITSјYݔ(_֟eib kmUxN;bFf8fpbO2e,][h~gCL3<YdD@H m)&}UMV͟3zKɯae3A"k-Z9{;Mou).rȧXH hpeC+9Y,^lLj0DK[#DpW7$/l*MB 7{j=2=("G: %S>@.R sfYAtZ_1RV#\ u[4kmf}az~"2"9Gّ󉝹1) {#uUuR~2{8mhMLך$t"𰡌N6b &~+qK b,XaRN@#$hI6{:Jc̏Q}i-a2@kuDB!meeP:\tix?\M%̅7݂ E`sLN 0)#`3prAUafDz|C|n2x꺋tk So~F傍&d=p\M9owkx$[s. k(MzJ8oZHQwqO b̀:%}h9lRqpzTno~,@_uh!ZYH` @A9?1Uo"F;)&D f*[;j5EhpqI?ea{LJ`qlѤ☪gS,nQC=·B՝( pU3!hn%2R*muK2W2,gBZƜF!umڰ1I}u=OB늰M|Lϭf㊞zq 1b)\yȭߥ$ ,#mzzY?u`WEm|?qj@)KgJ Nzck,HZ=ftP<7md%WExQGǾ%PWPϟ8Ȍ,W İPlP?gI05V5'z;a &C8E8DhZ + ߪ_ qI}3dWCe.$W$HeZnYٜkː; n -p&.r4!^K4AƷDWYº-@cv51B)$j?ѡ(|pzS]cyr<72JS+ 5`T+lYɥ=9`O׺'~\ĻP ZvAD%{JSU][r{FSX'g+l 4m1fL>V QŶ֧wı*!{η9DMGMF"oBIBHFZC6נ4q׆Lo:w @p"ajϭ) >s3'<ΪX6w:眓G֬G$ Giy2Az QPQ&pfYqnu%Pz:N^=ReU(a||R).6~Jg%n-. 0z̼>?W6wK vHyTK{ziN##J DQ5ϹN- mL- cE/4*3O2z0| #ws8UpוMfh(zev/ā!,$}Aϧ |NF=DmXWY?\FHe m>>?~G-sr;Ğ/.ܜ`$308p: 8bzdE"߈NpEQoSfq:@Z.GeQY &ȼ7mz 9Q; ³밚=kuN'4<>-yR.HosW7Lթp!?T7cua8/u%^fo}'T ݪ3 f(ݨ2pEVҘ>=Puޓ=JJ RHMQbHEpjCQB` +VwMdD54!-IRzKީQ~gMOYgcX<Р e6$EDh$u6ۙ бfSNH0 0J'u:D>],#|=҆hN5#HKzѫX/5yRqSć.(2 Zt ۫dBBdǩ3NƤ&ů/(FnY0/((=y)z7MQÿB]ގӻCUw n/&Ж [;H׾s \~^Ku/L..W9Kƶ#OFgȁJMSlz@uzCL=DL>z#/W\K"j!E^ZEo Hw3l0.=l0}* yL'B%ת.m5C3=8I`IM>)2$ݻ_'/ؗwvs9"wp1$"mXBH񟼹 tG4MXpVek<ԦQu?p,/c 93 0G0mk3 .wrgBuRKI}rH>Ņu,4.5Rr(2S7N{>&ֈfewb2\0>dv|+ =/zs;|0-X\6't^V-^-w+_g9ݟ4vJK9aDr-دS@iՅ=c^6kiXCQĝVL~v^%`E$4 vD?n' #D3AҀz)hAF 65%*el$'(2ZuTLM+នU~ !|u9"!Ԣ7t=ҡ$0-b)JHуhAX+}lHC[D[g@I.>!Qˠ4^@_jd:#|l- Τ-{ףpcD)AxG QDHmNاaqpUVt?Hȑ //+N/˅'Emob v?{5KyJݢr{Y"A%=VJTPY1p?]QĒ9X8-vQv(qUn酆MLX#NIt!ܷԑ-Uqy^!t8]:ii'E}5n,iJ38C1/Jɐ;C!KA441m5&-֮B=+ъFB0n=R%qUTIɈv5aD)^8G]7vauc7f9][ڸXɡhH mHAʣEN||heω4-Mnc|<Ã~}R(U2`& YW E͟e*tly.B x2WiyzXw ^$ԡ <x+1&*Hpͯ^MF!:!lJcO 8X;*͘dQw5t% h钞ţI@ZxQrU#[#?:<̿ZO|WKg%ǖ/ a%\LTT}M3u.E37yu,"#G4 ^ňP AK0-Qa{ቝ *?|qbRԆxLBD`([zC 2Oc1 6I"}r99^j^r|x5!=T oEckȘ~AB-d߿Ν8"/F1_i,tUy>@ԎvVNq:[A%mUXRk.C<Σ8ci ULXYlxγ{D3pR8 /4$UZ1#j7Qv fx[!1rK?*pBaґGZ *FX>*an%1Up*%Cɓ}$vlA1;SKqG{(ŐJz QkO.we/c^`L/rfs"€iDBR %TĪ˻+8 FT@K$Za;t%{n/=`Zݏ Cx~HY{C[z#a1Hn?=y]{м'H̎kr&WSQeL(z+& D.lc`;Ks ;8tx* ^phznUkR[ ǒrFhD?tq6ΟjCԤveSFXݷߢ8XqBд8ZT B{+:.5ONn@kR ;׾P8$*`k;zN׫C /yHZ O14A>Bz ~hMJRn߈gyrŽܜcJTWWHflbW7"' jn|$)}Uu6Vh$5 ~+a_f{W]d~,觛QaDn9NJ 0. YԴ($LA /"b̫~N~7Z}q`GljT0uɖl#b/Cb q\F*zBX uD[F,JWZk'DM0.6ᖱ޴Ic ԣS1pMɘl76TY6FKEu7rJeܿF=ovg5-@,kje~嘃,.LMZ$ڎp`&wkdMr_|8m#zZ%ƌwy~7ggQ4$av7"OĊC~cyH%zz.L>bq "꾇X2"؀=NKmp\0cM55,x#7}h&LZϤc,q XL5ff01{ @m^ǧ,2e 8}QI$Kgq7GFrqG̩C$s;N1Hdr%r/x ۿeֻ#~^c`Di\%;x*a(b4( \J>T M϶*+(sQm`^— SfcR5b *~S&AEP5.Knx=7vK웭&+lfJw=4dG[D^k #&_7t6'+hҹz|痁]Ɓ7w~e/ʎk !s\cv*Hk/]m~"" ۭo~:t`ωS5x^ ߱5M{i@Ssv\&Qm3 ̚g;6$Jy޹-ƛW/S.'?‘`.qPyQc ه9i)/\Tam\UzF"#Dx2-QR@esUw[8wh֔ӜEo\eɥv)DnX?aKd}YiG د5(q$Uu ;+xSiԉ%Լd\-GN7q|v0dRYlR 1S\eQ@o+<@;𱳁Yy1E҃-~ʖ'~J pݥh=US[zb:oPTp-TP\3A#JLgIcp"B%9R|'u|rQY'w̧XwoCZ$N/VCAޫƆ4(1H@n%1--&>g7 s@4=)?kh,u}hk0> '"lB_r"8 \t( S}aT@H)_s0' P>*/4?jʱl(;dj S1p$Z}/  }#)M$u20];5lsR%3u3yzWN8-?\x0)~j^ Nxïr}#mS{wW F*GUȴFJB呒aIdZϠJُꌻuAm{(-<4?6f[p.JK":a%LXt:W+}Em*v^EdΝ  靤_E`x5ܡ[E ?W_핂 . >z y<kF 'ިLGCZK3h+xcoId~h˩r.ZI8F\?Cƪ3_$:dc,t#\=q+MǬҬ`n6Jp[y_iooG'!ֿFO[=X&<>yŅiQL1'?6(iѡ<{?x-+³4x_8zu숋]mk$蟬+zG0A}/[e0$A_^m&9,͌ܪqd_N~^*ᕪBQ$,)9?$9ђKǚB$܆E=G39ծ_{<*QLGYVޤr9`Z3ߔ(1.YǵyÁ!^ugRețhҚӐ(ĭ.Fm]*0,Sz)g3f"j'đuactb8k4=d^<_ OnvdNv7Z%1ݝdx%EȍiDjf-Z%4A,6iͅeUE1T 6xhZ\ I5)N%_{ [rJuqi@ _ӳo2ꍩIÓUocnxIny9Syjq`T%;3fr&U߹qh_!dI}=+삏7nv1 -+n"JH[Jwn\zdUz5SEؖU;*Cjq #:ت:';1KLu6Kjc?4F,:9LAT_țߗAbLEKA7;Q92>>p:z.uXxiaQQȠeRKv{J:ȎwRsݥǣ߁1ԒKx/:&֩6015}W":GrWp98m%['3#xVwk»EO=[Oΰ M`Jq;kϥ۪)a\o~ii m{Ha9>*?Y [$^&9z:Qqu LL h5DRhթUHֲYq%"AzO<0iB{, XF5%JXsudžߌ5 : (:BPT{__4Pp3:OMG|**>`aҤ8~~2蚟 ¿So9rQRB[od%l; PHҞWh'bF]6mJ\i՞% /Vuxȧ[(/ڷfO6.GV\aþ/q  Kh`t˾9۠w!tp%)c*!7[Y֑Fq: &eZsD 7#iXD*hJH ůҵ|OXrasοtqp.̾Y# Z9`kE'7&>%3G. [>."?ܹ{=8P赜q!~ܵ jI=`Op%/8VH:;7jϟPhJ\7eI$(?s,4d Up\'I&i%@L.EOs̤ۉi9D;_#&seŌ#)LސVud)AR[2";sF&H g,"&KNpTnsTD;ҭ1SJ䧦M=Q>5FPaL׾$ $Ȏ6Pm{3'x~{[ +ֈ5Xw1_>0In bPLQPTҎJtR/nfΘ*eH_z}x<6v;?8=v[tTGMykֱ!=>l2ź|͹*66~o 9zڌ_仴z7(_>:7QY?`C;({^aK Kyō)$Ii_B^Fx<`B ,Rۛ!о'jTL>tp:U?S-p-?p<-ͭ}lMIJ'0.gQUR$6BQ 6D:4mxJGqraXF0KiA1 &J+i{T-\bhO 5l"a|;i75|0ttSu;U0 bw fʮжBQϬ͸&{(K+#х\qLOj|b:%+>i.ʿڟ, B!8xRkǝ@XUHʒni2qsS;t 0WJͥRz4=4%WDlHQOjйDrUEf%;T5L'v[TZ(#fX< 比OD'_\&jf Š FRY;1QX F 5,Wr&~}Mzc›(=kD/]>ŧ pG, gL);/5٘TDSNC}j.V9AB`֊ [;d5)|JP.{p&OgWGCvn>yO:/1O\ <<Gsi:sb)|`p^aVĿ1mA%L i ڢAn_Q[#&CUc2,HQGr흔> @ H!|Ut,m[<^$2凰rd:6 vp1֭kwe}TdFƞ5+\ dy)88ZPh9!>Q4\-kc`{XYt :)?6Ʒq9tvZG]5N߲(-7 PTB_G僆i9<ӿ*mQ\L2ʜ,2G:bU07њ݅cT=A pl35ϟB7o̩){E5j/Zp*O^3_r(R)V<#;em@оmK;c2 vP*ƔU Õd#cX%FO.h6g`JėP\5^ (^ m+t`7suƖ-y }Umh'e.BA'hNGsAyĦZC#kp?-)d@wЮ1"ď{w֡HPaRFX}d3O6F73ojQ8[=tV ^kqxD좛cu:i5zjWTҥӚkgƳ7G?^sB[s#HΣ^M~hgZsԗkGVے _P9nf@Gۧ(||*(vu=@ذ'h|`'Uhu{|44b*> ޑ&<eߘ 4JXfET?u*qW 7mG _!?}OdWw.$bXb$(B/K`-a_w;=3D9M //XpqX|z$>mf_T{pBP1]hKjN{#*:1o,i^"LMS%}KS+kHIKjE@CBVƫagSFw7O Ɏѡݥw= {I%y(,b08'iL* 7ǸKL'm0\B)]JM|<'aƹUw,v82<8^w{yA}u9$ۏJ붱kb a{=Y)$^i #/U _"vM0R}͕Y߇?E+!ˤݤeBːypbƬZ46jpu8Ԟo2}Pi\Y6#]-A"~ON_e)4qy+ sF6B*M1ȿ}ٺ>UTf"ee;E$MKKCVB #Kj_Y ƃTӦS$Yvɼ"*q| NGFD{M2ĺM;Ӥ籬 ˪Tʈ 'őV(胠^`_η+P #d|} $]aN&d sn>xp5qe%a_~b6"r´y/.$E X2_;jSrRúHX/]&q=*JhBG|)\!fcb>&y0Q e.9N=jذMCZcw@.e4.BW'3yqAH~̠=HӲ%Bk=7 Z4 6[MHE~|hckb[\ѥ?Qrש 5*hi+A'{'S g@i6Jx33U-ѐe47 $W1$U.'H4'hWDͰc.fP}8|c)XDYpfuAy)*GyiM n 8~' ƚ)R]F2`kA/ɗ hnTŴrpq\Gս_1 3u=Z0r̻U_, u--}L.Y}8C*_n8՛/4Mv`E*^M{Д^p:VnkAm3?AC2DtTýhE).)K2n7Tq/6>@s}ÒGPϖ)AVŮ"daZyl[p PZ"¦qsgۇK:1Kfu[͍[OM&,X['%^gQ&1ȶ&V 2CT3yWQ>6N6E6UW!_OX\DᶻF{e_j؟[wu%HޛB kLlO! frH{NBXHr jH=J%NDYrf,k o#KyO AXvim>)YB]!$s>a:6]=5kqfD1IM vwlxSt?#ew4fTg Xߺ+k{6T@P|u-*>|-O)ȋ>cҽV HC=|PVa/dl3帀3e,5227 VyZuZϺ3\#+!=#nLH Y"ФL{;5ycG+\$B[&r0-`S~I#N'pw1yhՋd4ehtƿpO{ƿ⠇]Mm63 L_;k-wYZ< }EZ=g RjKգEB0?EAMͧ9iѝ0oӻz~q(OzgՂU] ؞j^,r >L}x@?^eu₈BKDpC~0ޟ4N`j#,OsvFK`˹kM^v'_@ YewjcEzk@NbM^' 6>K.쏥)m l'E cUp 2?߫@7!}E_s"q=2YF8c2|xJub*q|EOUc3*0ʑ!Iܰp\-߳Q&-OHsYŭu 1 pt~spr"@!)  ,qk#5R!bI9٧}b9V f3QKSrG2ǺJ+A1p?z̋Ny-m%@'x4_Dyup>gNuL@ "AT-`'KE=U&abΟH+0%7Hk!o,l\>:;{dTIϝ3'jkHfXY'r`ReNUz/],$w` ~Sw ~0;'w{y.7q>589ԕ@NtȟEDoA&v=PPmŞ8]Dc3 /`7xef:c,{(E @AYO "7/F/ k.jXnG'tPÛO.+~L]tbx_$ot,7Ke) ‚)2?~e37yq| E飳7钇jhf W`ġ\Rt"F1-4ރA&]]T.H%;arA$S֍]nP03vS^L]1KltSn?V ط;@=oRtY"PxM.08>Z:t訳@JrF[%Zl:/F/nizH4雍:"go0;3 v7I3#arT{oA䵨/]O>/줴;Ii^nR/MƇ]9Xh,i[1 %EŻ.(CDJ/>zj0N;sbMx,rA^eŞԳben_7΂2ogmYBSjZ3At#apJsJdf؀O)Xr&Q+< O; ]pupa`0gd{2؟${ o 8T A49IXoR$*hu*ngM EQC 1¶l \oW )rG:ބ*LJYꡚgڮΤ6 :! 黯?c:xg{!][2"*FFPX^xtt&)V/JtA-iuI}MJ26j ,M֠&o$zÿ?G?|h\M_iogn'9)-NC@.0G&q&Q_ 1fپt7fju\Ep vԅ7A? yLTtGM[*Hjf &O}U8;1ggϯBZKJhhDz4ԘXQc[ YYVсB5(idИ)?#n QaCx3}as`5D ss4fNh:$@LA@g N#\\GKQctJ`$vH,!N5=,̂`ܝw'=0QF'=7llNp!OȖ7a)K<^?$-fip٣b`pe*EDS~sY--OcȼNK`$A1]F}%?E)6ˋY<1ٰ'#~i-^J-hkKm(EeJBPYAbZ"*&8 ]ICl^֌>]tGگLX,#t t_֐N3^ǧ{> y r\n:o"O3w]IXqD5 19UBkQ  ]; _=}kҢe%orx[WV r1Wk9 D{ԒpN]+QYyHJ=@YdFtJy[%51].y’PEsA e`x $?k;svRl xuyuR]>M@$Cb{ JgNXy$dXgܼ[ejymVƲZr8yDK1%Tw9OvZa`Kb W$aN:qg^" qu<%kߪV3|F[)rC)/! |`#,q힏u1Ѳ={߸w ś}BfƜdS=4])!.mZD^ JyEMOPKGoAXFCmst ZX h0J"lL|NrTe9X&*1^l*pV>t93ǃpc_w]$*!N D޹ |j2J+ರ?نDLV"0[&`,,U``eNujOg%A}F6J+r%\qa/t˃q<*iw^,XAUY~'$>Avnpl9lk_U#qsXvtW^0񒖍?`PPe6dI4~v(uxd݁h-`3ψD9V(bjQ\6yw,JNW煯cl-MW%Cqb/sF75Ȕ6,&֖5Rdb^R,S]zuI* d]9gM%:onM_]O`5Pɸ 8 pɟC ,i(֬&S4.aTIICO|$uWV5_G?fv"OMpљ4a}968-õfFRgLm2{|seecp:+5x ‚[u5V&fBfuRwx*9ZnqcK˳ֲwN&|SΛ3qn?e;ў s~?[9/]rl3 BV2iOe.-RzP&]ʦD_sn@~pw5=\DT, $㪳D,f+  v*GVH緓3BRLWSaj{Hfh;)Zln#q|!kGk'Y2]xgT A{p!#[2gr"1awWxIP^x!<b}69;6ֶG*6( MoUP4 l )=*e6-+_@#xggafq @Q5lQ>|liJYC 0Ic‘8 hg7&xe64wmꤹHsusB@}8(Ү/f4 #\ A tcݭjZ;Ƒ* a#+GjKhKJ7 U:XTT\07C > <$3BqFz0ΛԎk)3' <iiM0-[)&8MҦn\Dv;.]mً=E&-E<]ݛ&qjc5j^N//63q;)WoMz tk0^ĵ''E H voP  KcXHX7GjszA S8;( D5Mpy&ant7_N1$},RP)bwQ6F shA h3bϼF;R~yKrbuCŌ)*_YlZӻWsx+~;ƿЁ Ԯ??dy 5`VCSjlO'y*$ HJHIyaLxU OMXg= U}3 *['"P l q}Q;縹K"M֭MW=LРV A?tE!R?2..׈܏;EMc- t`ZǮ^c)|QBx.f:0Cq[o+}jMqng@F FUݓccW]SLeljU28!$-&(+ \dߜK֧O|LOObrڜ &Gr@"`'m^Goϡf̿˹0D */v@A KI97xWPH~a[AR3;W##X5eys%ծK ]Š9Ja̾otdp~eˌ/'16]>1~U_׫ dne S`:Syp*X,ۂEևnxcW!O04kQ~q-n\Q%gJ̰ 6/򗀸Q1Fj0z6"r Nq|74"9=\$y!zƢ+(Vˇ.o8qFv+1iR j`1/~ $XRC=[*A#b0Vr;-.V7-S$їc%Zg1&WyRU,,(<DPȂT2&Kpn=ǬM|9+Xe(-x S2i7W] V~^.2|_`:^j 5dRuJmpƠی%5Ӿ:Ow"QVC Gl07*FҘț2iļYͤl~54F{To]g67|o^Y6Ǘ^4!qũ}2v?=sLpń2apF(=$;`>? Cx0U G3]5+)xpx!A{?OܓlY {44=Zk^6K } }U1eQ/jK9Zm2R\+qGBw(\SUBT*pAӚ[mBU;9>$ rgyVJxkYUx8tVeT(v#@G% 5C9/D\xF){cL$+BYjZv@(ɺPdPySe -Q?xӟ:o`>q8C}xSbe!j\]-C.W<~\.`@r {Fgy[ɣx)pgF,$6DkvNx~G^&o7)Ի)::vk%r dٺ]L Cx *gY{')TEY4ٔeu(:oÅww< ?mxBt5BC`FTF]ךd 3):VHLJ6()qM[ѹKc@hxMuz4I9?x^8 qmtDⷺCY{,#&Q-TNa.? T[`%?Iz om.(d$\Z4w.X`ݕ%Ҵ+`af̫|vfN7Eo+ g+P>9쁰AO[|䦳%Ȧ'E1AcuJ8 \cZGyO"̛ %KNy*[6 i㚋NY>WUQF;H.A#exsA7/&^UAnFƲPk1vViwC exLün|Ϝd@64f6vE?ԭ<"Pme,'),VgJrҬd^COB,f^u[^'YmnA/RA(mPo@pbh4,)Xi2잝 }w_ĸX'9IyRN^>Il6,?e5}(29r7@rMig@'BG$A!sDe E-2htTY9DZZp?dKޡe)yX{OkcSYGϚ`Ă MBYbqvTLJ~3>\B'- a ԃ8x|yY+\Ђxk } 1ސlwO8TmZ}"sMS`Aאj@=1Rfkȟm q\:t`)Z9#]ͥ~ȋ۔`NZN7fٍn Dkrf=x$z Õs1i3rX$lr̓ K.N3WBn0jU&=) )쿿@0DwB4Ymjd[wt{1 @1.ykQwkrQK?Ag ?0 YZcaret/data/pottery.RData0000644000176200001440000000016413153613153014706 0ustar liggesusers r0b```b`@& `bN )/)I-tI,.f``*b 3 l9e9P`2:NhY!V7$-1$ς]caret/data/mdrr.RData0000644000176200001440000102552013153613153014150 0ustar liggesusers7zXZi"6!X|])TW"nRʟX\qjnj-'!a5л0T5Ŋ=[ST*O|⹱I+Zk;~KA'V\ .|05uD.O.̢(DRZ:` 1˻D< hˀɔcer;퓟/Wy$#]2Qo=Qz E_\6 XyrXfj%V#D[5G['lymqx]nb76{%l2\^wѬOi>4*$T \z")34r2 ReCAci!dBsA2H_ZeWP,Ζ穄Rdz2@H "7RRgǺ WY E #@zb! ӽ aD& ,l~z_du|16hdrKwQ4BU5r 9g;߱c̓]",<ͪYmӺc-?ndj3wF΀u:շc z:Л3"g8-uwmJ: L8!ĴC_R);vBzi5΋ss,W7Lk5~FL Ad.nu(4֛7L:E$ xy)^j>rrjb4@SǒE2PXUTQ&_Q_\J1* rӗ2ڋ3bS>9!Γ'bԕ@^8WʆA+w1l.NPw7Gb!H顑 l *s՗Wt(5k_u!xyR Nf@ Qd7#agKo|0guQ7'*.,mjc^M:NKWcx|Ս B{ʞ<}j|!1rz7~":;?Rc :d33ղHx1|g<* zC@#٤e7I`E5e>uh 4j]X+A7~o N+Czip SL1ꅨ`}@F4]RgD7. Źlo1 :H,zK97tY",ܴ*v:pPa<9"=qS($X/1>+M@٥ld3dLxLx_0ݴK<]#_ކ=5xs~/ qQvJ`|c&I]Z.3=I LAtouj&4R!'aW4TQh 1m(#\y+Elo~!(]:CYK,52n=D\}e}8c*;ppu}AE-o1q?2)s(bNo&oxFC^)͡Kh\seK#$Uʶm(\:ZQ(ICA.&^hAe1Np7uB.63|Hq2h W =Lo86 Ǧd8 &Xa(G(EY^Đe?N}}o7ˌ8',F$iQ+;:JfߒCtNS${c%!,5fX7m`eؗtn—\wzn8- ,`u1,o|6G/x<{LeXe؊ ^ G26>C\Y|o^,*^}BO_*,_Nm-v;z94! s>H)_nYKpvJ#lܙt!SOVժEL1Cx gD)vC{ody5!nH׬=R|r,o:D.(^Աkf$AH6+R;y7ߟu eGV[H!TAw)/i =R/cԂ̸ɺ&xRwڮ:-hJ2 rbh)F~@ӄ0qiijJᱍ身d{GflRl#oxIf(#a`AN`'B0 [x2h}O"L5%\MH/ qUa/ld1w[6zb638u iƨ)/kL׺4gahsf8X\ uҗ6m-_m2O mowkrdТ)맾E?c+zڐv=W9bQݧ*w8ސLph`9| 4C? *5yӣ C{IE/e&6`ߗ{rnȈEtDi+pV<I\r 7y,2u3;ōrq~JHwt:/6 {)(v )w(QȌֆ hoboD=@#)PF2mneΘj,{~lP Sy.erj+"*nd(g@ڙ fұu~/7bS# mw?{ ~\aE@Qڔ(o$AS]}P,ҟQ@ /D⎙rI MjwX#?:ջYFzAƘ{їG)N]: k˕Ļ$(-?0b΍c8`H}fm4|F 6BPٺժ5x<^t e+ ƑJ_lmR,% er[E1lv=ЙlB[#Y ibz \o9zr<3Cjr Lٮj%gyw Gqv62y<&lwI7o|,I,AKՔ86ȡw9UjY]{+(?YN9OZ-B14y~/y{m8IR"<_B5?o{5bF.IFwiʒ@LCvHʴ\_H4k?pUmh4N%:I;<:}[~{ƤBLoqy{Ld_U 0w9oXȌ %y#{nbh&ayb%}W9z@|(T~SD#pÛNWK޾ٚd'6CFAP#'+7aq eVɮ]oP^doϟ)Hn~[q79Mu=tҦS᫺1;ҔÌn#ܝ PMm!Sw;*I72 ^Ƴ\?~|[p~BI99*,Rl| $l&b&WiPБ[:wZ\TɛNvև扩$8V*BIAZj=6䏅KxB/plgh v>A+Q0..)?:Hª "!j .m.б'HcvAQBK-| _{co(2*bҜ/FbM$F#p[{sN/:#Vc$seuUP\jyI#T0ޯOQkd4LU2/};0gnh&%y@%.9&VGyGltx0=*ė?ӗO 4֙0f]wDJf1)C> Ӆ}v ޷&'8Ch911R^D"wgjzkmg$f#%9DyH 2~"c6yS$/שSBoT:bm0y8 - *]/L;s)g+ζ{qxtV ԄuC0W }R7Kb^7t:hb$9#?H=کճ!5n@nԡbB=*ECʈos{Y{I$ 1MpX*֏QŐRTBbݞne;pI4m_ΑtSc# K´A&R.11R݂{^mPlj4/׋YNv5OwxL|jr1 q Lk.V/E3-p\]p|c3^N93 73oa]j_ uZ$jNl_u_Z 㧌OQ h=\KgS{IuUɗkD봜PWiJHև,dg))O:Ц!tVm> | (u7_ t-Ƣ\{8N,X8>>)epQ\ ovr8C*EPL%gA4) ';SE{?a%=jVTrj-k9S$ڧa]'N$?L2ɑO%h"Cg j1ʒBk>Epl nH7X&M|GN$=N=J*nN se8ԟ̏ }~("+3nj6*吓T*Jj`VyUÊrN]|3qT!VSc+UtN ]sE.>8^oM$ѫh~=z ;2^d!U4Z7&ϠW_#C v+Vh2[> Q'$:Dm(R"]CuFtfYPLY1S8[.G{7H6$zCKǡOS8 thVvSāEP@eAՠX6y~|:n僦* C2^C(}ñ 7Ӏa_M>em% ہxӨc`O (dXwA뫓"2aX-G,Jx;Rn׮dmH@ L? 7)f#ݱ~f4I\ZlVmͭv(;ѽl|OFgpfBƴ՘~^ِ/ 2_8tDŒxU(m(MB8:MVp>5f$/&\f7w5.bBǔZ$3nOI#ߵ|7QҺ=is\wN'A2 tIcH դRb4Q O;szWS;Rן%37ÕH2\EFNM/96$3ȸt\:K& f㹋SnT7GD|$(U|5߱ @K󇢲IκͰ)[ 4ɔ 1!\Wr}4N:U**Fx P uIvQg]ܕ!*g'*]@5G]ق;EtPY꼫e|$c+.jGf0 ?5SsXV- ו@Y8btٖg 8TܳqΟ,9s:X [29oɀRzv7 E͹ J#m]λlw7薄#E$?a {}cr=kEbQGS]{r~hGJK yϜXJ8mIkm=pS̀9Qc0eȩ"dφ/}*<0b~2V\soE U\0jnqM}ʇu8EAt3ir&J !Iu|9(x}6;SϢoV̘c"CMlQ7a33bRۿUu9ryhl}_pkwbȋ{#2 Y8C?yYZ’z'isN7,g|y*ߩ Q#2)~|ybup6R μ&p)7?8lܜ Ipx 5Qh̔oOy,^=v"0(kAΉfpǚ8(㌙wW;n:̙7A$|DW붱x,cӽU N{oZuwt %LX,Brt)_k-_:X^ĭ"uˇJFB8yruywcWtdmg?HvS]|aIlp T"{w0$rjH?="h4:~8cEc%|DL`ˎT'sleH`C!۷8`A3 $#?yYjKt\s Go׾>KLR*)1?v>OA0Hy.Gh1w)ҙu!&(UJރlNy${l,?o‘HTbMb-ӥ4cymx/ewas@cQ`7+l#~: hVj "\PsT0)TFqQaD.xz]@% -HUٝimECy*|ˑazeƛ:#.R闚+`.dgqOzNО|JKiRjp+_S?hUep8 ː8] A'c3??kOj.[Vk0716vkpU+{J5&MvгP_ضC:aN-gשYAl ?E*&|/O9QGHC XfXԾE?;-C{_=u|An!"IcsFgM:橎S$G]tS# C'AW<08y҉(>K jm]v34, d& -IJ&N ^9`üf53T8NY5>TA Zrj29rhW乳ѯs`q!gwjhB"/ +I#Qq}6)㞆.Ϥ|hdw UPTomn*c)WzVZb'=_’qe!2lH|_ J1G¤ʸ!6j|u`e榇~jn1fΪ2>(l!&Aa9Y򟂕2dluO*,֡&83NǮX@1(ܺezIn 1$,ƹJ 7Yʡ L5n`^͆=p6_8׷os*^`^aNn$Glur? YFQo 6( Adܪqx*JE <;4I%Cmp\Ns70հa進y*n\ùQQU^ZWBɊsp;_cvBS> 18$ gΫƚ @ڮ14E[K^ b=Zfǩh6aԻd.(x<(mX@X\!{K\1\&tȯӤ vgG]>;Uoc,7eK yQ%]ڝ6"Daamd0ݙWa)6+: ΅cvpEzׯ=9! ;i8!iN3ma^M h q?vI'Jm 2%&G]1UWuVޞ.~B^k=&VZ:82.&JQHZ1>\3XXdi PɁ22;G`2aK6ar):W0x;a7*t1~TaC  QR0k5=t!\C_k([R֖ $q:(mOYhhU޸ [WH!0&:`ՉL |2hYmʅ*ioƣWhj%SѾc sprfnB7-?][lC[϶qcD,ʫh`\|ف. xm7(8<#PmJx"x-kd^w;#^62`?-ݡ>ع0Ư܄yOh dGHoUGֳ3eͺZӲk&5.Y 7.K/щӽn_hDJS[}!5RQw[N[F|$MElL\8j˛΄gIȋ7q>F ZQ7y_5)+V*=kqRfnWl*oc/߱`7y7ݪ oDeavZ2 `a/IYcl7!භ.DX8|6&!݊[+FM W]nwhh?>7Bb{UH~^h.ks7R "' 0 U C Jc:f8ajulΛy0GLpZu(ONg 7+YN!?5]D(9b>*]Kk9O8cJ[=+ KsBak=W?.Cdw B1~?b{oZx<GQ4!+8՜1k0o–wS&pGGx*g|k}`՛K%'rԀw 1F '}dӬOsmEVӭ-;?$%v5ȂI.8ńn7mU6$g 2& x𩌴_3xq)UUVJxC foԑxxp+%3B?PhΖ Llm@cebF,o[5HXd[ɠzֳT V}YCQ8eZtk*+VpjS)>iR92P٬:^8ё 96;8'?`8|'>*$XT?:x|"Ε!u{e_J-Dv]^a@붌rɸP/tU!\-Pp /ce,\8*^z[օ1:kE GZh$Q-E6$^:i/:1{dyO^mh庮ř ,h  2Yjm;Z?ZtH.U[A?CnA`Ld9?̇䵙cp'|G19<+ml}1й/&+A*!ʉN =ֺ  [@I%lƅT9z䅌Qr.gʻӾ5$}%WˤshbFLnY} Ew^X UYV?Z"FC g^”Q#[s O¤~+L"wu@9ٜ~QJg֧7dO{A4iq'ud x0sFmx4a<}'Ã)LEo%4loEOgcuFC.@ld{WņZ4gSWb=Ra<!RZ0+ <*FCiGrrݨWCs䜺Ȩ BEg\ _AgLԤFRo,zrA[CtUN{k]O-tc|v#x@O,:$=~F&p#He=]lSNST ԶZdD:#STU%6c4%b,#zPn>:U"; Ynrk7";%ƦM@5ß[ Io|Gرu"!|Wv$6|jDIP>#㭷sCXIh2i2C|~^%VPۢG&O3QÖԀ>1(bE5pLFC0mP^|?}'c/h;zW˓~َ?* d^ @_rkPJSf:q9BzܭYW:>2+. ;GABbR4B3b\q胓ͫuɱ?ߩOs,t{9"S+hB jmlEf3~ucYOV3ZK#62xrkI @%'2004:^8{-\fcdZ֎eLsl,%궝:֋Ex}{tb Z3dpv.)\[΢w|_Sb\܅dɅنhX X"CtVyѻr`$jenm#:4Z"KD63^gzln8) ;.cEKkU!^*_ d8cECC{-2J!d$`S(n13*R% P(Jzkέ dvE8'=mc~Vt,3VȌ?UH.D2܃x W@=AC;qn5A^SOیJ9#iH0{a0gW=A ߦHʍIzpOD4T}ٶ`kdM҉-9m#IFH m_TpC@]ۃ!QpM+W8Fo̶i@VXYr^+ :K-abΖ%o:OXݞe*lBbB՞Ge_N2* ›ƳpЭRP\s]+wq[лkepP%{oAy%`*c`omgXtZzևm Mmq7ӚY|,MT~|JOb6x߫7IP™YGn3P2V=xba⤴QY:SGE®j- @+"؛4Hd$T ̀))Z .Sfnޏ6:]FiHZk|~PoO04cOjg }!I٤uwzá.51q:P|2?%SFXUiPΟ)S#K^{Y\1/ۥ!iM %6iQ =$մ7vQ͸+ˊi񎍪<px$s*>xiJffT%9:eK'. EObWĕ]0`oRÝ'ǣ i.s?1Ժ"3eo"?Pm*6)vתU_{.aR|[_gƹ%- P`EN=? o)ذl |9F8T3]<5uFI#|J¿ cs$G*Ӭi[G''8؁//81l{*Ά>)y!Vc e͒c7YwU<-8iᶂ^]CIv 3m[a}(ɯGaRΫ&uvc3YaVеoH}fay _^Ov9e*m8=6]LXUf7mplp/ڛhsEe!\8j6%Ÿ7qF>C퀋Wq*gkngp جC G#({3c"U˷UO iEg^a߮VJ`y`R.x9s-쿸hfN =Uk] _ O ?8=ePB..>$j' O羣(4@ CU6׷)\[}޹NǼ>O~EpAߠSp+xVDx gB/֯&M^o9ڳYoŕzO+щ(rvыd P-*UMwyއz7 b=|uU0ejC AOI1g2X𢁾'~95ϒmvLKvC쭴Tt 4ū؟ eHf7X[d`bbT2JjTOg@2zLce%g/G$3>X*.!E?H .-QM %ƕgu֣fagDZ##٪KЯ:E6(dc ilkWyVu)[k/+!b.?Sdp}G4ތ:RBޫejy*w.(eԷiH6^0ouɡؔtQ9~,Er An0.-ܯ3D|zxP"uh1s-@CtAiAڅmwe8Z\I@Vz2όttb7`{=t*TN0cu ehlCD!)Y,;PZ;Wbiɰx qs@Fy0ExdQ 2AŢ6P6 G9v??; 5LÕ6-VXi'vel.jp::s˙rhYP:M QT_U+י&J=Fb!*h 'NZ+L4x50]N Ag(aS&rKSRƒ!{3MR16!GDoRPM;䕎qmg6陈بXE-?d|!THDC5<*HHq47M42yJq -`>e[ »?5HY7!N3/su奴yJ0Ƀ7#<\ LE$\_TTfGx!K9x^Lݕ'z#=e2 ٠Aj؏*_oؕC HH)ͭ 2_ZosbNNݧZ3Ej@CN2>f\GTS,AZLi?o#z$[՛\v9& !Slw4%);z~k= w'b}mX,c}in64Jj&Gukw$0/qμM/D"h@r=)nE}քe/p mn v!ϯpv2CIipuJV裤!9۴.5s'Fsmuң'4!ײׇ쐝:+!1Yk5#04VNジfy M`cTAA~T "98  ߂flu._]SyP(s#$blL6Cbe$|KbcI/T~^>Q4 NV|H db0<nR(4}跧i㼚q`.H_CWtD+w1=Z/|OG[ Z&؉Gj/wۣ̹/F:+St\^PtgO+UjNY\ } !12AysSq0$Riڱ~ǟ uqsiXc7ǺHq9LlP+h 5&3 #s y {!JeLY;͛%WRmw}< ָ/K4T6}qz~_s(Z"<~MFBXĹN؂JLK_ Vvr5E;@X- VVs2r]!#E݂SAͭ(ir_ۛ>SLٳ@U| h7}ĄҶkFpfZ]ȥfя{fCX[9wc,!(:WRI'.ҿ-= @?+d Hțg,{g1 c+qeRL:(IWF[T NY`Ic+?a4{qķɿ74s,}ˇEvcbhbL0kL{>2.)alW#%CRpcvJG{Fgϧj)Iyj҃ÀVo2_&fVICc?1: |*齛 zIIb;GFF*ܻ8't4K gz8\E<>6(/FDM#Y9vlu Ff}M@xS)ܓAi]?RT7NH6t#k0S0m'6F^46G܋Iӝvia\~5ޘQH7 =E34zRwn︧ř RV6!<( ez8@jThlOfVR^5p308.KFXפx<b$mvܪk kU[y>bQs4 SuFG;NXlԮP}SVcdG$H4q 1Ebլ!a2|wT\K3[n+w\&Xmn~auB]PUJ `CӴB 9ӲfXH:3-Se`U[r5VrtTH^Q+var 1 M, gzNRef;]Z9U|Wcy[ʑgt;-BSw!{ֲ?r[7#񿿊![؇΀ Kktq̷]ۂ-׊J R_ZŠ8`jw[t$FNoIIG=ּD;6x2r/@ꋵEGRS2o@Z_*/8WMPb?cpͭ2uK%NC `ծoyioy3R/sH~'>R|d zz.󀃀rD25~"Fu#9;>q\z+L*`:V_퍝'-@9zO"G1|0:8)Wa}%ԅ(8@Cެ̹o0|3=%n2n-DۻsڲLyE?Ih}%tK5=eSH5D@ sCFd#5tD0BcJlS'%l=cFo͢ Q^L0LE1 F:]lAWYB&a0Az5aF4d~2;c4: Gm]jK.qƱ~IO9MZ.ww|v>m!_ ,4n3I噽%̅?gU敝ҜּW+LYwQOPA sgdR\;4lp Ӣ$c2'U?-FDShN]@jw5 ABlp~w5Cx}!YPy䈉w7T ܴmv`}5]4m*B/+U " $=@jѝ!-k / iU Ucs_FvJg㌬_Gk@}"9PJTm7.mM$|?NOl [FfS14ƺeվdh op? <JݽC@7onOJwѲ\~&.`fmv#'sB7S[}<+y*5CŽ~׮/R@9=H1)HK@hV 781Bjߨz$&CEZ$uErhh2ь݄@SK9Tˇv"A`84P.2o_,RfC8=lc.n~*{z"—iCI_)\jHhH#k%*e †eu1[S-Wg)~zofq賀 :WյX+Tb 5,إ7h ; \mUv窯sɄbIIF]cn>AP 0}k ZLM`-UJ@ն/s~X@;![ mJ#k yL79!dy?bAJ4–z{+d3f4U8r߰-3XcY"Who׋?]jTJ']V&MԄdX;\KNa+q(%;HF `UBbVmܢ^UaUTr&~3ʵliļ͖ۙCs9kʟ|L,V?9+] ˘drFSmΊ(WM9nOR4r:0iQn?`\ O~]Eg?քZd {VSeƴUJMW\cNOs ٩[L"-ج@Q,SFo哺<. 2^ w2HJw8"-5#ezbFď+dG艜72>r=_6=a2kA &m54敏]Eg\v*ݩ=-%|CK ;;'A[P€9GXsC]7ey+^Dˣxv|HGrxwӡ >S2coJPPyFLI>qEetUKvM;쿡"@UdR>COٗ_!(M#N3u[(oo꧒6nz֓@F/(h-UDvJ²2M9LzBMPu҇[V)_Z,We.r&8b|>~XKEͰh75qun^/CK 9Y*owDW̭i b07Eq]ПE7T)yoצ8!}r+Db'9…1xQ|xݴ:"{<7X[c$) 4B.@?5t,(ayx~s$U*P1OEJRYjY[+MjʱfAӴpdk'HD;jzcruA]?%]~q5jË X>8F DҔ&+{0[G#\.Ɇx ?Ӳr삀z y日c]'*<{ Q?pmlZ˞5xq@BNf\OMSBn5Yw7v2QTqɳǜعX>M+O~@JTLI''ϊEFq T0R`O? 7VC`AAk6Rn|"d^0` qVz6IS{n5 lUd%v꺳/0<|%C\ݤq*rNfn'cda_  Tw\)JBain&svD:і/.O%qc`ar0_1R%!jw 3.#–o5ŧ=7QA Rgo7?,ntTqJcm} 31wt =Sq4 r:(-^^DT&t_E.9T s{H35pUM Tn* #!EcES0^\Δ& (+즵S,҃f[Mtşl:R?b75sY'44C7+G8mLd1Pd<('V=a;epbVWk0\dr1 by9+#m867EOj=cLiCZXk[-ےKCz)xU'eL$9 Wca~2; /.xJ] V<{L{`eSJr`?|4d4M erR- IsxY{N_ƭGfQ? ]z10:SBgń[c@<%՜nRPȍۋIFˤ˂:Np~f|ֺki%1_cd-ЇedT'ކMhY  l^; y4ZQ_tAe6Ayu6芙{"!|aE9̥0Mx}6b%ǿKD/q˕hE?^[o! wRuZa@؄ p qӪn! $/#■;R'E-0]qmtK(` BBtsh(KFhL.ꊇuH\޴Ėwߥ3A>8" XNHcZCwn(j Bv1E]mBu-HȀSo7UqCj"}4O[ԍ2ש 3DCH u /|Db}Y訠ad;xLl8CeE-#vnM߮R?@8j*2viwq$y*E(D7Ð;a JL8ߵr'yF޷O<`7d8~}Θ2PjۼO'A% <:i V/ٵU,փKcSCS/'G;oy@5-k^9} >`ᓚ|p^=S?^ 6#W*4&LpE | >(+%($:<5'k.FMjStq؍$W((]$6yn&!Zoe薟 j3#f@fc$KafU~jܙYٚ%uyMa E.,Yn]7yY<6GlxitA;kΑiIn;4<=JǗR\=o fWÙ e,w(DZq0x8MM &a<'XIf 8Ygθm#fn @=n;^K:u' sLh!)9B<׿yN)`ˆf=YJPZ^ ўipv{k%!{TctbP𲺨j1$\㵼&8e$0e_&1A!E!Cgo.M016z)c~6jJBmjěZ^PBlSbs+nː}c""*n4؄gͶ F9(Lk,M A%{l{(ޯVXe4@Ja:䣌 MSI9T_DC\m>3GVxO}?{;kS(DV 6m{ɺuN? -Azjq1*lMxdk}UNA%Gx i#`m3Y%WZmd w] +z9|Jdk.'&;Ghrӭ9,rDxaC]N%e֯kO*VB1?8{,yyd\h4V-ۭw[BS5a*҂N/8mD=1W#eݪwC=@weX]Նr3ܯ*|q^! 2e;´/ޓYinlXxBW3p#^ITA&Ÿ7 #X$8)"38A/*.[|B޼5E0Bf-fZ!i-ă 'p桘'D~pĮb#ل疶O veUs~0 !)>^bl m{59<†sv<?73d#;dP߇ecˡ5ꖱԐ!Qg~n-Krr0":aͲ0Y !!15>kw`y.Wh7~N }v^G7(w= 9#S*!7><Ҫ$K [*97;9aH E|"O?gb+B LD`)}LTaA1ב0D'leGipߺYU@'z9PS O°y&Mjn/?86G/Yq߻O9tM u- @`rΰ{nIĈTQg0ZhoZ@Q\vԯB> 5؂@v0TFptTϴJ8@?O\LI<\2l݅h^P0dRМå&AЇ@ƶ1oʡ;؞hN^[`pj\ Ġ=>Y7 v.?u!R";r@[ u b$ Dũ 44+NcɈ RA}1%H54u!œJE!USK%2F-ȡ4Glaώ/RK?Êv.kF@d+;ZNA6ch[Fo%?ogOF^cphk+6%b~I_9.pFlm =zme `f0_TMZfłSMvPDuZ«^Gɘ)#9>4 E\@?GrVw\ep~5H5KPEyG7zm#-\Ůf+J-@o˽v3E|О"UZu)c Ȗ] ٣Hw5ʒ&Zj-},nzv^VmiwcP)\U%.UBX5;7 _R:0~##٥˰(@1P596.iʮ~# *:eE.V ̸It1d-@u[.\b+G6 C~,i?nS .Y #vn &{M w)EDGDZ۞~Rƪ]qWf&k'vý< c5wZtP1ȈCcѱc|\.丐-52ZdCվڕ.A6)7M]٩ݔ)d&C2͞_ ,N6ٗ8o2纨G 68NA +WC^<@Up=FK1,[F2O ~qyfYd'rCa 9`r/B(c޷~Ofp9&pЍ'.fU{3G]%*6޸3&шj+ҚK(q<$r6*xBz;k[%HZ#}gS$[\\_'7_CWFq"\En5ḫ/ [lhb`ha%fG \S11W*<;@UΉX*ݺ/{C{,Cv\չskG, ~sӆIw%ԨBUv5l2Ī?N 99V1d$_+Έ~Z]T/_bg J!<;vxQz;1=6l˺z#;od!Acd!pJQjJ6՛r%k9Nϋ[nViYWΖA[B項dǤǟUz?#= Р(D93b};i|HA÷ozf@a7 Pg;%hEY-no) +lyKt&g7|0ߊyt)K Dd͜gZ_ t|`w~9CIr#ü16/LF1ۧ[Ka%4ƧjaptsKR=j̺4M*挣gɈTՔ)5SIh"t(ti d 礧kҵ(jY/cI/ N6&dCh!0FXdt sB@whӫH`!y{+D#dBb4qAOwhǫu+v1HAU8DzkxS zjLWUk#?{Q7wKqBsAeeٶM ١?#5*~f~*t(ɎNϤ.B \Aw]Ŕ cJu& WNZ7X=Evj1 87# R4Ba)q.j 8s&gœ#*b|LS~8+.hӸg?Ƞ2^ɀ7N ˊOuH_UsV [a~G #ӜMJ #_XdT 5FqJk*qkh$ifljx%}D?н~鐠w2c u*]j0p6`8@J*mPR'S̖}]>+T*~f#+R,T6* Mr$1cz-$lj=0et>/f/\)@)N$ պ:j6o&܄1rq}d' ^>%OHYHnܼp 3\G`y|ꘖAPoo!vV;r|Bo}6aLWkt,Vg[Ή<-nJl]=CPhђ.; 5[';c1ۺ}L֪f#R@ޓ&6ny#I1 q-/X~K$ϢfYgP<9o㉯K.i7Zyc!p}b?&:N*eA:pb],▧ ۷k:ӵ:ןhc2%[x 0k:+DE5`Z$C-f^{c}O*igJ Țۓ 7?;ۃ+{Sqc4G~hH8,^t8kiJ썸z{ۧ.+=W-܃e4 sKX8Qd)ll0pUl٧<[}z"OXnb[~eQAYrp=i_jhKkT gǜfC,نGoaM8`=7 /y{o424詥%3*OݳZO3=ET3,I@H6IU*'{+BùrWJ$׺kBZX=^ 7'\]+'=SxVTOwԵ1ts'֧yb1 E\ ":ەp~I\lk",}NiuuOKWZyJhHHt: =t۫P8n'6ƙsʗ+3ol$?qSsljeb>arM3i^=28MD;x6~H^}Gh=5YU=0\06Ca.ogŴNE?U 7T&C]|b.a(}[k-CU\f\V@hFk0{^C*a"B.0Ȱ8y[Ԛ꩏&< /]#/ϐ͕p!ݚty:~ 4㱗q, 1C:k?1+ =9Sl+}O@략å^^:W.W6Fe?5zLݠ8]-w$+U]Ќ=|yU}"U4".urC栊$iw}TC*C˸ԴIdPLɍxϨ+[&NwI}|^/%e'B;Ojlq=F٬ !n|@" ';0Ytuk:l=K$&d]Yak=N xyb4fKIm>An_|z䣻 ?J2a\_Ra.bp>rɼ@4b{Z. ̾pz֯TETfd -ݶ.,KJQ4gW s2o3HXW/Db1Oi5axD 3gl[ߝ46#Ug2-͔1$ظt|BZzoHYiwEK'1w؅h=%a_Gi/8g8K(uSoz{9mCχ3lW~8*@FK&`G{R@0pC3ih?XĞIR*B!|v7MΗ.\~AvNzµH+b _6_uitϘc +Dө_tiFOaD:,(O# 9% 9 `Ѭ!SDcscJe3HiƞG# -w]|塸>j@v)Kz [/ooG;(eƪ+f7투aX=_$ 5=ʋ& Yi@b5>(AV$K.SJi2jNaFM &$^h7=~nG*t*h2HZ| V&tBDp΢4U_L/t(RTrbdr5O- U~4޴`Rqx3~%[cnoU3H'<0Y+CwzJg2ȽN<zB{4L$le3Q,a#k-Cь=D<uUV-Z L(g1rH6nֵdbiOYN`;qIq7w:@G< GRGJ?IQ}?S)%Tl@ mb=7^R!eF5׾&C!׸}P8*BߙQxcR #{Cw:Ho'"I- Vmh^SJذ}ӑ>ۨ:/SZF6L'Jq8sd&֟cE5j5ټm&YDH !"艥Π;!ܑծHUpÞj}&G ZF`Abgg>cQ-ebQN3 J hdj2!3cosL&^ei椙gx@oP1s6jXT#wL.dnFc!8wD9^KA#uabGr&R0銐MJp9'("OBJeN W^rghJ'K$l(4R>sY(aJ|. ٲQ-eUxPLYU\,z>!ZT5?Lϱ7\` .s8UIJ3Ӌ,1^!}Fj=))p7_i`)~0 /[sgeyJ7[D=$x獢;$??A<#-N_܌W><U<*9`9Dh4(_&AGEi"mHC}-UOK(@8cGf=;4gtiGhui`gNz":+~_XqeĖlGR+9FHy,}bQBȅW}]8\t)&6 ph*cBIθEUvS~ ^m'\j,_t{~e[7Ѡ|-IzMO8o-׌aC?@Jd'g=!2~N&Ӟs/AA߽#2*&kbl`f>5E{GS7nbȴܞC&>}5k(o'={7dB;6( *X)w|%fVqI^Н\q j-Ү^BH;G@(SWYrs]Sί{Y1#aoz>.m(T_S JitH8z[ywSzy;/=D#P?"Yʞ=6VfqLu!=b&I,ԐH])H\*o:~e$~U5YlKLZ( 9PL݇Wdu X2&uyk"{Q@R\͗{','L_Ż)L 6:+ LK5Jq;}xCoE`B*EqkLwV}f%x3R|U~=9B eQC]<ii d~}o|=ˬV*9څ bfcwmY>$! %s}j_M?9*r浀˃b wQ"qF-x:`Ń:a(l\ E8 N|m:’\-hԓF8_ĵz2Vsا;@'+mjP\#洠"텎% 1LbF `-e)[C)>P#N|d)Bgkr^%a{r|>T+_W? Rv24<ܬPyV& f)fPxU"FD +<9J'n7B נ&*{scUReJlJ,;R[A)R4M "})Tߤi4WleʽH>#Pڭ\a9at05UI4iuȟ3v""!#;64#Iq!qȗ`|A)oxlpM rfvǩ"i#0Ǔ t0V{” Yd޳tyM u]~TzXoh<{AM|35VS (ߔsrK<Q~ܚo %(;bm(d Dit[3cL(A5 9>lӚ(;XU4ْG>};Y&@5x$mepY8Q*91_J#$t+3=QDx TS_fbKmSp8GnYA|dc#Qpi9IFA<@6@M3XiF+ 0l:dřs:q@z :KbbuXJXO-@譇 Ha8I4PXbs@v / S/2!2}׷a/ݶ}%T] _@0p[7"j\$\Ep83/Ñ{I}8'W(ONU3:6@>+ ^Dfm}L]6lG\.T,sH*t.]3#b]|O'yԼݑy866t9+Ui̐ =yvoRRIwVp ߼3޵/D)%uc79 r?=@;F8=/b 3a"5Aecu;m NcF2mJ?DlSO^*ߥ2k)f U cv/3SAá|$;Ҁs|֒Ix2Vs6kf3cxfzL/Fwo> X؆q3:x4A j$PUpDdd$1/u4TޕtVK<% xv'K,߸%3ilߥ`v+GشЎ%S:g,F"|vĢF6qQd !eBRJ;o#%cC5t * _]y9W 7<@ŲAko#i:n>#0{oaaF"xc 4sa& nBx_շ iI]p|W 0+s :pt?0c}4O~z })Y+`5Cf8xEh0?V RqԇkiYmG1!k7ezkWKysM\9ugY2ÑRcClġ.yßaEXc=}^*8tn;Z\mOK-DQ/ה_8YfJ sPvho=l(^NT gHcҙlBSjQ\1+=ʼMqWkQ]oz:X@TӨB@fx^ݶza}nzm;TIoC48@\yrVHk1V"̫Ȓt1_F abw>ԖvIx РfߌB ~Pz\HP:6߽k;ro wP{Fϝs9f`mAe&+:V%}R0795D OiWfRmWѸj]%f['F6u4Bzf礩,i`,üYK 6i'^I|κF9|"*,-=~壽>[mBz4w9 OZ@s\#RD eU^t8co)n7]浿v.!סZݩ/Xi_`g1B8Ċ,8(2Hj4qֹAfB:9Q6:S/nCV-9 d#(~@Yg#SH M9!, ԭ6Yr]ZUh{ȝglO ZidZmwN*PXF0:*"-?PgP^0֕ @ i aGG`j͈B 0~Q1g&;v wʊzW u KW򟏞{_2"/+|N}j5:y /\;9Ou†Hf%52WKUwI3p'2ER `wi ߗV+:$tRSnPx+Fi [l\AN#R"1\GX<+%s(c( Up:&|iFҡ]Bё62TDnSĢiTI!A5 %!Ú{z2lިkO^Fug|^^ IJfѽ6 ݠ4sevågjIi9S Z<0VmOJl-*qyz;/2t1l6ۺ6L. kP02?U{vzeg[R9g\a%<[I >2S(v.d1 .1Y30֦;3/.'>[h`_H] //롞;#OԀO)!d6XԃJh/'&Xá!UhҔ=BgTl<ȿB>h4u%~'.yexcU4ÛRП`KA&c*uVI(s ? YO%C,c` G:@DYSض7oŷglK4s΄N14WDŽ?^\][3NC^ #y|d &ΡB'ĜhT~rw- ߻(]+'8-9OmdO2Q ƆO"zvoa5Iz ,h9faEM`/\z14X-bl]RX?`"w77a|$(C fL?MK/kwCg=ʱY+N#!tڈGv Tdf5FƅvTؓ X=Gpʻ c$d٨dmrlՓA^K#?2 ui0z+pZv 1 I+Og2Ex_}녇&+@h~b6 ION,0@Nx>$Q,ADk`Nr 6 ̧[ PJKճɰ2{ $APf'c֐£[r>]T>횽ܩ+7T1(lf쮄nqD)8RC,T BŸ<4UYU#הƇ@d,mfìG1P[\>y:FZ_jwāN_k>3{ l+m+/$rr&'ya&չe25> V!Z MSZtR&*P%[Uϭ B0WlD}oXWHYu E+g!~lHKR>zstARwo.;V4EV3J5[ށ,G=RtU ۛmI˚_Oy7YOβ@G$\#:rv}"3?2<|`}'Y..>c>H8dnfCO}*![ lLRf̜YW|"ZЙ$ާ3lbfT?6}`>.G!ᒕr/G1q}-.`/\pڟC!!)gƁl{xVIM| ռ ]XL7T2^L7RQvkP"z+{)~KuòHBQDJD[ 1Xzm+rtQ@Af沖ͪF(jz BS_vF.SENvDmbr̐SO08]BST%P)C \6ڐ_jZyPxa^3@m˂BE*0L=͕ ]XN6D7s2xr}32&baduDwVй.$ιopˁ׎P+= ;"9YE谘n <>Po_4ӤE"@[n2CIA[Rz7\⃒%ם?ׯIjO9Y-+sӿJ`t:|+ K6O|1v{Xz qHY`Y*ꨏB*EoIO~N@C듅YTL$W)(꙼N|Ol"O@F/bu:-%'o1Ť.0v#9͡<8iÛ)S */8m1W_H+d KFVsc"'zV|qWit7ǧ%@(Uz[X ȼŖSTüS 'p IW}\/a='E\jPwn]=?ϩ7\T5*^&m!b>m@cPhc+`4fSU'ҜZm,'/jI; .4OP7 Cl݉WZ!3 u*rldž]`6k6,4^]΃9t2cC<X I:=5m& _XLREܾyDydyĖiN [u+&!hj%0n}Dj _Q|.^GVFCVz(Ig3_L pKkVgo(fuWIy0 Ee&`AP^+g#{;`ᝅy4#(g"D+ͪ+Z4̓X Mp1{ݫ19_pqHP6M>KnxTn@{Ԛ峈ItHZ~Ґ-;_p`*(Ql2ޛ*6嘿6 *ŋ@X!9x1#k!jQᒳOo(~Mp7?fX]akwO w^#^Sť+^|!Afs7ii?LbSl1c .Bc(ܟ(/;gx"% sJU% k+9F$/f~8ucW&&ed%׶\&l{zd=յ U#&;JU碞77pyz.W5F5r %p~ܫXɭ`ʁg-֗`XB,;/ }?)Q4t6_bC+΄͵y?2*VPmIret8)ps.pEԺ乐GB{^W#;Sswl]FfWe3)EMJWL|zw͗M]A"qDM U|K"{sQ'76*7Cչ,$֜,k}^CQQdN:9[2n6ka4isnBd8Q4E[U{<]2łEh H]uryv0HDU̫ 8p؜X$zJ( !+*[,>p!M2qp (9yBN2 i'֣D>av `Nbq quGgEDb{%[2`v޺ toزearԴpŧ+%`oq xB2 ǒGBߖXɰF@8 gѿKg!7eU{zv[4rS$*Qp!K{'_T`Gw-n^"6;n].mJ \r)4He|%_8`afQ"@)0[ A ɹTG]B(<,S^g)ay. sB@z:V5-23?1:8 ͩ~R\m\l^! +,f= 3p9XIDQV15hGěHo@@hrQPڴ^Knvow ]ܼ!{:v+/p]o|";LW0Tˀ} @]R̈\?$($@IF9+*\=Flw+kfv|p8&we$;ϝ<+я}8Y~  Xu m)! V2ΰ;(UiY?>ܻ^۹Cf!z> (שLyck?L(s(DƓ@:hv#Y"im?ZC@ce*TNKnq&w,@f%? z  5;xkg&UBlZ\h'#sd^ 0䫇>yĔj4šuѯEx[G<2%f >&1] N?UkS"rK&WA836cSN|ӒyͰi:qK( :DNg‰q3 `[օ[IK?;O?,Q#o^?bKRKG ǫ?E-a-fB4:p!B(;mwCהUǙ=zvg~6e8ΡR:uۊAQ^4=ۀw:Z|_Ks/%a3۞Zں$Ez/9}Y"agm 5 ku_yCe@?#QD,7_6|.p*UmB6Sڠ\lq$<ƙމWo.{expyx@V W]*ܼ>7#T2e}J39irٍZK=Ad `Hv%3*Դu[РE Lk x=9f}PC8B[3Y)!hT7G\Fk'alvc$Kt2p\nsB` }7[hjٝ=h8AcYJkCtƘXT 733p#E3:_,. rt! f9ֲliּٗAmvu1ł2`"MrAuH)J׻sK^IF,&DCdLvz/>b,Q(2i8jL}W6=myEG5q&,:f[j;A e9!̧4Դ&7juuM KPlh+sTV i=Ue$).J+)ҒY;LAſ2!#LbbnٗUȳV5iJQtov Qދũ|DQ/=2T~Η aNGjT{&*wH?VbəʟwolV d) VJO-"=FЈ;Q&;FN DWm7.haکC(z!r|0v6Dug;HG.O?͟ \iMVf7*7(s3$(Ĝp 0n| b<DR8W]2R] ߅,ݚrVM1+B_a9"FV0Gb?ȠfK\--ŵ#YҼ~Jrl?p噪⾿ԺRوԫp5 {Ȧє0@bƅZQ7e0'4:1_kp yjN3aWjfRL{ygWGf]m{'rfj" cE52 J{ 70k}ua&u{ +S|i !,(eֱFGw{>Sel=2zTDXsҋcL&~eA.>_EO8A*dH7\p4L$<3C=ѣ\w44 %jӡbҖ}Aݍ=8Q,G._/[lĹr6[hzWuu]tɚ"圦G Z茅@Au!{˒8ceuTHD*;{=8, G-Ô/ty}gbLGp6kҠmFN|KNCDZ24hIx ̏HsmסY وu.Q)Yso9܊]*xGG8^2o%Jұdc)6 (V~h忧ZR!TALvzg/ |]>$ԵaZb/l$YA^.7,a9Ȃw:ĕ"Nrl']@^dԞ8Z0B=%ejx[|5sAV# kNlȝ~Jo8ʎ"K:Hʞ˂@)ā"!WRVXdѷL$OjbKh'Qr3lvI%ݠێdȲhn'4k`Sd"'#X+dU,Ԕ= KtձY3@p ;"O1ԜPĢZ"_l?u6Jq ˟~Mp`a+y" u subW1)DPQe9ne]>i'@8.)m.k7NxRDG:dQdn _LO}WBzde uH6'MJȑlc%nq3#tGjXn 5"tC%ظsF.قOo$n)#rQy+ r*9MP7ZAwx A%5r'(SCEM7T ϓ4|JwO( 5TԵI* ʆzȼ4&m/f[STE|]x"H)]l@'c67 Sྺ踷R 5'aY\<=v[-C]f' x zԶ+G3YrrzOZvۅa2;39/R Il#WA{M7Wa^@$)/ՍiqQbղ灠S{hcCk6 n{\1̑*I؇=ƽ&Sī04nI5.iפj H Uvi);UMH)XωPY 3ދI ~r3'I z'b1 <3Y\{{b,]M0:°rtMj;7lirbJmdTaԈ< =t 6wv8_)7PGtʲH9y8mgD&ʎEio{kWt?n*dN(S ^iW  h|+O|bO(qO (UYvJgJe< fRw!^bJN5$a`cEJd zh$B8*[px!p;tahSIpd}li t ֣\<(?5)u1{8"}'GB:=!hxVH8M5OV:\D WUv*Me\ !ubaėE}g*g :M_yF~>TY*]AKHo]Kg>2#NS4̟kD/o(Bv 7E'( =-OeSfs䭹IE fK--jxAzǕ a%ߑD.27@ܯ3>Q dߊ~ {hlpi6KI L3ʒ FlX';ڷ4?qL\ ҐWٯd@wsɞ:OyuW+OmE4!Fwẓ^G茹F8v]ySeGWv}!)fnswVXW rvgNKT0VWpG蜈!xQ LxVt63X`$y gJaXCFڕ*$#?B^9Mw GTF,b7\ OFP"EϷN#U ,)r+y $7u4]zwq8/ٛC^N7T2 N;>YmY_bc¡$GikfԔE=sc3u*!IR@4J)9yƕv1El{$(9$N~BC7#r x齒f]zyͯ;*Ev-="ƪH.hbicw 0z1q1T~08#ZGZ eV@~B}"|Ž#Ww6NaR,ȠrJxSA6T9>HKl!'U`Pt%%n8@Yp`Z\v$Bv?Gģ[}B}mh6Kj^$B=)bSeZV<˱jqfO\d:V_`Ns#d0~Ln[nK/ 6zh35#yp^os~:<)D$TL!M%6,@T-( #0ixn2N$¢J`ZS 8[u]Ǜݨd0TB(ey'm߂p9*~k\_k}`\掴]vpƠjDX>jkjxk|wuVe~3CވzKL˞VtB0bK!ߨR{ɸ% DdMK6}^7^vne=3f  68n=JxcqG>b3΍#g .Vի~)HC}#,^Qv[plJh4@;n__DI,7Ykō  綒)cC}UrUfnA]wМYQ`&xj2(D0vw{N`w4!mtYI8\훞iB__ӳ|GEL2+UD ĩ +Eh;T+j(oOs6RM;*33%p'Pn8GdY}G01>Mnqa78q6<2675LD=Tӕ*DD VA$ky7ah Upr>,T0vUjXlǵOBCҿ1{ Y8`I%*(7Z}AJNcydYxjۧŋgWڰftK-+٪ J]%;t%Ĵ_g@AO#)4^iHӔpH%k+8kɵ7N_-8uA.SSF>$Nsr*n7FR"4ݹs9pNN MYoܓA\+ sKrp4(mQ.>: F}6m|kyu^Rz(&eĺS@ǥ??WUx71ﴷ2zfGUJ`5CD𮔫[ ͵IQt&`1 I.*鄹HS% "ʊ.X>PӸW;+C5r (BW9Yw՟âV v-8YX+YI`7 ,"`ƖXm wbFkԜ6xD@<':TR_ eL4cƨ@GLme{G=aRuT=V|ڞ_'qjpa*Mƀ=kciX>n6"AnH÷-DyAeNjUУXfܣtIs.~D6HPM  kS |DDfާMvg&E:CEqwGBMiRtI1p`ߕε<ǎo Tdm@ܕ[[\retR)DW+]NN$ 8/{:@P>(&:@ç0t19Yόw6җ/iΩ0%ϰ/)B _*C|(`<:0(܋~wEHz8s3C^Eǁ@jښa"sx= l)ISZB?ƃ+,H= 7i) ИB`&5WK|1!vWU-L @ 8mCޑl͗wIg!6…pu^W^m{M+_&Cr{$KƔ)49$%yFvg];d|FB ̙!q/V4tE<Sn#>˭d]ycMD[Qn(F{r$K$x݃|Urn`8m/-} }:tv2~,`JU2-ǧ7p? fUsMf9f S$.iO}E~GցLk4N ̉0`9lJ00Ҷn'2(KW4{ir1KعT)V _WɨX#p.*nH ٨~6e)C%&?=PTocKy3Ք >VG9O-7u+1ؒ+]hjJCFπԠ a)@ X?I 8A2 Te%޶\a-δ[ꉶA=껨e:pُ gy)<0Q,di1Ӹ5'&+zfz=Y`hI35u2)ȟv$Bȹ4spwm\\yJ5Gĵ"9.7hM>d9CnQsNC g2\X|k(2G>Tf2nQFe>eHx$=6efNH4mYsAߩ'e~' z]=iQHC~i%u ;|[2ߜEg_I;m`vY'<JP5kuzſp3b]=A|$mwy8 P8⪒SbS/PvG~]cIk^M*w\w<@ֳ -_ʞbD"Rr`J|v*5rx.\%EGL%J7J;_1fi2fb=zX̬蒺^l.RHORŚNӬ[E,Q JM4>/[ʋMYZGoCgFΤ&zu'!N :VP#j)t, *#{UǬ@EzuF9eMJ~Rau j%EPPSZ&1َ)d~yμ bnj<)hbKbHM8Kt oWWm( w2~;⠼vC,)ծ<ⱎe;d퍔9l#Ǵ]pxĭ7Йe+V9FDdQJ, /j}5 U੍dx&-ߝc)'݁D&8ܧ2墮ɏW:((k )8:kAjZ:t;Ȅ~tl+r(vQ!ֵ^F #>$ ⾽=0 yL:M%P` kjWҰru"Yzۚ5F|bge%!*yK蛃ATp-eLpnc~gPÐ'Tɩep}uQs部Jy9_U=`f,گb8ijRns'H>[FoqdP NBQyd7?lJc,j’0,7^P!KTp|(qЈWmK@HNvh޵j`4 >򦅽Ռπ?d; OTdgJrs>;?(U(ftKu?5~cdN,q>VH*w@d*]BYnBlyX6zSi0ɹuʰ#"+=]t:-;!%}3 lklS T)Jbw~~?&>ld~l-APՋSTԯXbsJRP TZY[|_cC{q ^z n`ݷ<bD V0| 0BmO[wTⴄ4S1++gsb:Gœw?5 $ֳAE};㿾A yO6]b\ek-͵.xVeO@rg&|7x3Pk-)mVIFw|;1^ z]~\ʓŚ" hmR+y[؇v& "$nͮp31 !'%+{B Ŀy_ wA FQwv׀K>ȗ,zF Θj"D : eF*¹D b>ӵGC2ilx&*8+PIfmQ|WYXgDR+D%0|& zܞݫX^p72u`02? V]ʏӂ+20.Bo>CD?Y<ÀjXd5PX*ٟ$/֞ "jwñH^dJbB_Y o XcV2'6¼$ٌ/!]3?fQLY,|qi@+·0uC+6)+ 9[]ĝa4;cӖZ;M[j )Kؤ ,J׍+!gg?߼\X9Pʡst|wkǶ}*qg; *ڄޯa?U}p37ɢ龥#cԧlE8݌d ԠInQ(iR vNS2&hbɝNm]b`̛Lu%?X=Cl<'kT<P* `X7(QZ׵ŊZĖԲ=bC6[&1V*Nvj=OȾPĞm"=(xAeBz' O ˞XvᖯcC.^v'BQ޲UYd>0 (p,ibl:9IBl %6 B#Dnˆ%҄BLb:XۂKU"JH/^5چ|O@#=qB9 Umf[؍*MBeeÜŔ,f;qDaZp:+c Tᏺ '#cc/z44|CRaO~l5? -Ō O^@6Uv⯽rukkr% |W? bT,P@hĄL<)oh>1ڨ+&GEiɈZd=O7lZ(i9eǂ)-^ bQaE WohJ">`.ݤzb "_p]-ڠM:x.Mc#ZD(h(+ h,=k#MTc7l7o*)q͖]Ųt!5 4jOoei"0n'$LC^?ls)D[?u̡2ŅEXP%N89D!?ġX8b]Ito}0զ%sžݾMnE6T6]{MN8;,Ǐ5%\%Fv~9e=u{$(DhxQQk%_ܭ=w;VSMܭe|IGP,a |K49"j]φ;*HR)Kˀ%RC&I[.dxm6jd|psD,B&ԃzޘT$1@/$7/Mݦ0AXB6f&pQt'Tl]J#~5ExBh#!Rh]{_lkL,PqXyKnȣn/\}gUujT esϥـHتQF_hagH:e/rQc@ Rkҋ#K7ԴxjPQWJG,R5w& M̢ELkKqW R.VI9kmHRȒ"$-,3_'no3 Xq¬Fq"UUZ6R]k צ+ϖ`=v |:{hܹW D4;8QRsݱa+qE0";5V 5JiW=$~W}6_ΠVʠ!ӯM_Wca-?/He\j1躲bV;G\LQTD_oyTLor ^&,_eGnQ3ӟ,ZޢM,ޭйeVX>A }WW 1x6"h[Jb_ ,2[7v|}}L}w0z wՕKY+לȦ i`+h-3')ecVcd^kJOy0A1vhmAJtxSҞ+o/LԮ_bk@yF!;a=isR"~;si]_vnbP& &} %@t̝Dkk TNC7#O5(=Uh\,MKRQZc|`L0e y+m5枟vP_|gSHBIzgV2r 5f?kt[Y=92g;Q=_lfuDhLiL=48Z  ¤la犬:dvRԦ!JM\ GaAs ]oO[LFg Bu Ɲ"rըՏ(R"9ݓB4(ʴgV-IپG;gw:/{l^x#G ޭRXorl"}`S:茚sFdzX bjdsq [ϴ1۵C`n#LZ(+^j( UmH?6ԤAA 71Wzs˛u vbӨ(P7UIaM  FXL!X! ݁"x !;.[.Hn-a(Տϕ[6k5ML-3re'#|EOMq=G` b ȥ5C V#RH~C (d$zi/}Il`0F %"oq&Y߹; chiRC]5{GUvߌd"Lf`-.VY~ {rKUl;;|+9R ޙ񀩱`@ZgM4h[A>7>;=J(0I[-C\sj3BU;}βb6=~3;ɝo=y/3P8&ҽ M?9[ 7[/" o0Gl6 -V y ``wo8|?s ie'mӿ{iB L+FW&deE+(mW @HW0иٰ^{ѩCުZQ̲qá)ﻐבKD ({-c5ݟd#zPw6)m$W8;i; ~ 䐬ִ;)@Mr w[nX@` 8[] +|%x'!TjW{tREau֥s>@^;m.[($ZՈ>\9^ _GAOʲI˪o[K}Phz aM354vmǒC 9[$z;OoP봌?˾X֓lPR ^hq/NiG%\';6F,>)[ ? ֪B$O&u]?`LTЗ#_~OմFXC0me n7+Q;BL -s OhXW͎}߈@q MDBIOs[{EM;<"\Ij(ɲN0]zgEnתhDx]0 ;d`+$i]@GH&prϰQK!kպa#Hg:(ou%loCzJ1xoX6y8GL߼}cGo;@N˼踿4hB!Us|1_CL"n (T2==`mIn6ct jkeMɀA/{*1`4s:ӳv6adVZ*-~4G{7 ]2ZrȏWB#á8[d~Sm8d7$-?cl5e30N3h;,n` :A4sGm,함>qT@Juu6ͺp")+>Pq侱0#$ㆼ(bjPAtDռɹ8B]n<,&أLƁ vmwݹ"k0vJJr3,.n'}Y$6^ RKmw /g2THT '~2Md)e-yv =2^7W*jDQW!KL804!:ڑj]YD2@kggPvī2Vwq ˸1ꖈЖL)!6}fuz֒{Ŧ N26i4ڀvHg7aADo `)`{>xp7%5>&"rԊ7?.BY K>jdN[D.1^Tqt>S9&FǨ^Ho,曈0Կ5m3ݠ޵ҨcXdeg%F ]j4pF3hTotRN5yGIZg譶TmZI۴ں'jH6!ҬVL8ğ|A6״Tt*ζj0P|'h\zOa%d ݜ+ǜb,Ee귛 ; QkQVE29Vw~!P 23ۆDM8˳Uӽ+ B`5,r /6?.gW'ԇʨGŮ2q#8)=`2>70)%3~=we OtoXLsX{eQR6_?6JHe C.oWCM־g8GXzrNYB6cuݐQ0QiC}z]B$anaE;$ &GFקa=D [}bEeEKGUsHfT PG)b?ʇ& Mf|؋:ܣDbP"WbA1F}YM\u9j.83+fڊ6;K.Cá~HSM INn F٣P(3a  9{Ϫ d @.Ƙ,a!ݯwK#v1e$JgiV5ڀ|W_ծs!E'}M+gztI-Wjꪓt20ЉR&P^H*_IJY2yKY:h\ZpOk3 B&K p ʋeɩ7cO>OÚqFO m/[$d߼6 h,hrjBfn95lKxg&р d&-Regf臎"mk۳Y GWIFpHkǁf!3D sCBj!JA]s)XF0F_,;ޭs>+h&' R "8Wh ۽iƦ{ViY?ξysDPUv:ԵcdIMQm;?*@UoN?h$Q({9`x'?r)E_ޏ!J~o<Yj^Ǭql\\Cdw͉<}H|%va;Vnj egšgml&9n&jȩɖj {n3ͮzXt8ձMζee{ԷkbQ4Ը{Pi3((ӏ"t`GG4g5ڋ{J5ea}uiCzШ=JTr֎X?``1;x!<19C{ЮFe$ePbW=)gqZvڡ6.zO?9A{igI?3.̑^Ӳ#=@('IvY cpE56T;ׇבbOySjzqݳ͢]VߤDi5{mM ; yz$ T{8##~+֟HfpPw#i$W, /at͋gEdo=po@!k!Cy& r5 |H:Շ/(kAʃ[ ~ Ǩ; a 5dX+m;Ӆ.2əjv.S+07<4+ frP8уAj-J#>f&E@kIC<NV}My8|/tHDΊ /?mɕS*)ԁp bx K~~ۥ3;Qmo1MdhrsL(=nq`ypµhyo3-iBO/I9=Q2?U J$g[u7jί( ~6F9q7Byΰ'=5Ҽm: DK'Ju`>y=(~^tboJ]G5 ,IhFr#qoi[)r^qn=ź#I4+#{˩iؙGo=_}7 n²_F*0f thcp#oz``,45O5d}ZY+<[$\0 M2yN̻{qh,ݺoub_-$x 0T01yDAmS@捊d ,`) 2C^%羖 JI* 6Y 1bBY^9#Un+sqW]ҷ?q|kqazyfk* 8z<N{ ޿MŌ3h$:Lh I9I@dxO*oJxzܤw^eS8љ2!us"Jod%k%垘恝"ܵRvZe_W;#R'*γԟA!Ägov5fwyZ,85|Q;>/ m&G`@ @PN~Xs%O?<Ϩ`׽ƨK VZ*N69`o~2e "DP`*4vS Nw73 HHv^l#*~xjN?F-i f0~U (z8JΠTxsB66 9/Lrh ቲ#fgEԷm$3ue|^bY>6:UE4dZwv"a@PsnFhR*zHmjɦ;Gx:y`0qtw ʟ'ݗ2%q[$>o^'֚+;ĀCǴ4q+9=2h{ƙ9e0ƍ:Ь~‡O*Mۥ=W"atmǧk"Oo/V$6h(}pni1v",2HP'-sISyŽIm,ƋTU[T|8r4DQ.JP415me5WoO9T Ԃ#Q6h7 I˜J%њU}XO:V6u6Ө9#*KTyҜf{-[{TP+s5zJ zJyNyDk]-NCPl@}Oط]lY \{BKk]M($( j'OxhX`zHC0X}]V\(MM:hkjMK/{)x?|h%~H0O:vQ0Xt#T !!9z@{*JF _jXJibmuSԓt? P./힞~47=eIsjGؑ3 ˪uE/?xǘ0ezldaLƃ*SL$f'6G&t&dC'<xH[Q44rh"ikć72Mlyez&.T#ނh֐rT} Œ(†TAql JYyY8B ;j`3aVvQzt\*ܠ=zݷZT6lP =Vd=wܣ=)8x=3 s48vq^Ѽ-r ܲ^`7ؒh纇, WվSG TfAl3*{-W?úӇ-䡖%W&'z}gp c̞ zh[\q -ye#tMڀibjFB4| l1sĪnd>\djD'n+#hv=~*>MzXf BIp/js@*'0Spyi㒜iAt=$0+gq WXUȢۿ`mSnzQ('֖"8> `-vo/wʌ׺"2%} Mުg}لCWsMܚ/*lÚ!iZLwDBYUALH2"6DmT Jw5ۖxsJbX|08.{oCcQP/Wb39&SF G(WISvۄhơ?:tRo?sG ^ddb_ I/x jkfR ]`/ޛ&m{LzO㖩 %u]‚> )'k'lf P8R9yñ{bGƃT4Esy;{#yD;ڬfIX0DwXdF)->@EƵ( F }3u++U:qOF\ub▿pph`k2gc}ʴɎ4bM:EI8^9+sURiS|jr_J[62*sĬwu/ҝmi=  {2̤蚦?buPTc܁ąa+>q-hŋU [o#cq|ŸrB?6fk ÙD6,%KB qx96x(#ʕegXWFn HDI7Lphe%\-2' P)]00U˧ln :GL~sNډԣ[ X:(Ի!1eCb'X,2{st U %N5Q~u' c6ߐZhWve"3P9e(rշ<2=nG3MT L)P1!:2;au9_\Lv?7),,5iDX|kD~S_sz| пm &e԰m ؈3!zd)XNU&d#uK?OT_ڎ5t3t|Hj}aři.m<Snҳ^ī~Xe'X$x!/M$ gv-v*y!'̝,8X&xv^YѥbáP(ׄ(3q l!C$jQ\KLs9 9^q`T }`PY̖M—P.~beR}ϗWIX`Ɋ͟hB@`xiFaaޓI < ~n5A)ہ. [4_$ 9\/N0.T#ǀ[ܕl΢ $] e(Q!˾6<@\l},^>fJ炾YS\wLL&L{ {u(4|<'tO^ZmxMqt=n3^R3'AAko*ݮu_V=ENXjMOY a#xO|=n$ͭ0B1Q5M"ZOn*·EXPyRww`9X;u8VDŽ}/ kp#/1BeT (9SPKOU8ddGiVqD)Crqܜ哤"g8`JDh !8X}'&u{7J0%JVn: ֓/\A p*-943&KPѱi4/eJ9mCS`%@>7+ScN.5_qgP{nqٓT{B )uYKh/DES\(<+e.Ծ!ޕ}E)7J?VpQ{7 i6hսy/lLsŊݥ15U,+Tj7y9b!1`zbJaF<_3pu oT|`KMz psJ1~Kjw}#B:rMgbZ1tQ5_cfFSwnK sXvp갥gBaqt*M8ẑp`/@%Oߵܝ1+O\QLE\NDmڭ)6w`E ܴ"EuxA5o^c7&#Z(-P&+mJ^*[d7.<;ܒi\s[3 UVm>rB#O{(ٓov6g#44I! )E%Q&:,Q%$CQƘ M ȸ8IPӧ.ژUa$vꢝ wf'(Y)f#[SS³644Oz=SVz+nSWQWct,I|BSq5mM津, b3U#[mts yn}3- J|VYPJG8)R>!ZL.%_MLi(*ya7W OZlk^:,h5 Y: E)Wq,f__An vLR1ȗAT7YwP#_/h)UZZ֓/&;^&OIf"ɟ~󚎳>q{v473XJbⱟWCm9˔TKa.5C^@z1JC/g\43RD3Mǚ6O|RT`s/ضT<;џg|;@L48DoEwUaR`L@ω"pIׁs'c/|(SV!x _f@cr+8p|f ohLI\ >D‰8p"^īkL\վO:6fo0_RG~ zNr/a6Vp3I__%ᐲX#eCH4O ?Nfc[j*~n`_ub`,5t9 o,"2Js$g/T7KݛjM/3z~$.d#:jx9f ]@[h %.+t=*m9Õ |zh'mkCsMhvK }"_PlI'=o^+ς~2 H͚HOgzMk!x ud3Sd>&ȄO\ 吁0Zl^ITY.)q&m~NUK˟*U`;_`ɎǗH&pF{тJ<UٞLR>jT eXM"WQdPD@A:֡yvJC b:&':$1g _smQf!GmWǧ/51 $w#D`FC+ Ǝc/}> #Fi7i\]BOȵܝ8֙i$3,](V>m[f. cT9?K"lwmfP\"n&|X\G4 ,5 " XVTf"<&zf%lgQRY΍D81kgjlZ HVuә"1IzXOǖ}޾ - ,lUY!){kC|I! )047!fz3m_אB߄ pA7*%\ (U 2NdJ2U wu)| ıQV@8&SMiGZa&:j7 ZMͅ2TA 1ɟPQk7dJ5s`, 0hݨ& 3oJ,B Oطbn#n'YW$<2-ȥA׋nsRHa'-y@N^Kp2tڗ_ P yo)xFIj7ݯGs2ohjLo!j/?UN.8D~=}qN\Hˍ0*B.c9q|J D, @PK:j?ı^k N8{~S7&n1/G])ꭣy4 O xsZjc1,jܮX iw#G)ga^ҺJ_+g U #_Th6i[1s5OSC(vW5 rG®$W U*#oNBm x E$[ʬjV//1Gwշ7LV$}v:Z<,[i JE< JeL9_=nsl= !Pz["Q́}6Jv m7LjF+ga 0[FH\qw˰:鐗#Jy!U Kp)ą/ '%_b5A[ H1$fɕ * XmתxR/j`q67a޿:G!q"b6@(Ti:\ h~^c.NExS9hcAﳕ+Une[}MJ/[+w-b1A*ᢀn^5KS{xg 9c VځY/GoO'>c%;^q0W(FAiק(c.qC{RDw#E,n7)E͝fcC+zuڣ*49@=?+u `;7Ai48LUf1v` 铘5rwDGl^sY{ɴN;mןj8ղ+h6.cIud#KZEttyWl.d"(4<'Ik0Ux?:tT+PVh1v٧~vFțy BܣF.Uku4[ noEx`Yk _-]z*qwHkqAaǻptz:e3c$7dRY߼xܦ$va>zصqH,4hMyz[N0h<c 7 T4Rţ@=O>R¦ 6 CɯY#P.H1 NjҘʨT;8w i/ خ@WVE"܇^9OF&aE$g? 8s 'ҋ3u.EMfp,^E"*Q99W#ּ&uJ"dwOo 3u4|qT/7^]YZ9n=_s\j MfWn"wy~МE^TkLܰg'33(3 ׹ A@FaJe+)Wh1/-Ex\T:>w{)vQjո>|y)hOub6K6Y #^f<*>B ʀuH_(TGP~4 ̩C[YkƸ 8va( }2RA$d/\4 ϛ} R'u"!vF!CC!VsS.%;B`eH( f.1&)3z%Agt+joA!h3ng/I${iq\ ٭b_y7CeHzc g,ݖ/6ф=Q{qt"ȷ |q( G!qCY1ebFhL<ѩt'0S;K0EWnq'5{}gl:sIkۤfk-%퇭!h[7[BWo|e>MRo)O\mH=yx|;6ӡ! E5clqߏNqO1Rͫ:9]xֹ;#SM@cX [jA!_Vł2^hVs"J65~֊y U񲘍zcPANOgdDI`}^DcDؐyOj#@;\ˣc8Zy۹ QH#<ʡXՏ-e4@$0G^{_WS"C4C`'t+Ɂw"r߾74}JW-M_'\I|{riP!$j!/P!P =} Ea@bg/ 'xʫA,-Q@"i:0F,],$i/-DF(p)uj"TY( u9Po^wYhZA$[1rSK))zEL?#8\s9Q/$ଌJyqɘ}Kϩ5r;8'I G2_RBYP#CՎwmhM?Zu` 3xY,eGE ,o{yQ2֭߳ĉz]pMŴTq)˛fn%;L7u "]b㭌˛[}*3L;qǚť]SgN.Usk79'jtpvH6T1L! 4cC;'Yv~7d2?6g2r\RU2@'V-\ q=E W!$}t] %E&:'>]1׌f@)o;26._msFB (kD9W^j۔n&M̦\i`aAh %OmP ~/ uk#*r?[\e3cTFjCIi F[0xACh -Kl4#Nރd}cu/cRyBґ61kF/0;zAjOȓ%!-|Źm9F&r2%1s[% 2S?JRW=37m*-#iDM1Q^`ڪ ~teE! Ut`e1Wō|腄aU|m]$aeX Pb\ |EEϛF&D2\NHjfw $J[jeM*R*vZ5Lyh PYsI*翄F{Y>ʵN+}^ "ӓo2vP 0Tl%P!XtޡU tu.|+ GÆDaG@ꁗ[5tKoI\%?ooxQwm6JhD'cp|U Ogo~X/ާ/DcQ%r %dgJ[#%xEJU\1~霒/3 Մzn5FJxwQtܙ}yڼ%---mA}]:v筺fc7Ev/E(fUrOwoP/k ,,F]lPZz{;)?h;QMT<~uďɦ+] Z-2~٧0|B9e5oEM-ު,zǽ}ƴ3*^q"wMnA V Z\D d,VY r+w(4aWR;6Kk' .UV;歇x%x:z>٤雵L}1@gKY}SXqC 47g+ʛ\("fxWëo9;M*zx'}stoᓖ2ˡbt]sli@8k=& {!H2:`@^[=KDT7C/FEhU M C[5 ڍ>dOVj9T2YE=yYĆ+WenJom9HrQҰ` gFW킜ϫ'׬0vXʛampauxE̋)]4ò) 1?S]>qt:jNnAC v XGIWA\ |V*^]/Xg|\ųVOr$%Cn~8ikG塀94ieC*`pzxt}gԓB,NR *Ӭ<͚bUIi׍Xvi*"J8YNp!c<+xKOXE%=~J}o;k IU"5-xe{W( C\=ƪe9֢wwks fayG,ڑcsMFf fP]1#d*D Σj_?x'|=a|6^P,KyQ LI B/C5!eLVӭ`35+g4Eχ,QFf̢EZ;AgjOr5gWiдA uŸ,<Øܙ1=?-P (>T_b,l!ZdOx(ꌰU>#deFӲ?wa?i.jE=Ԣޑ,` ?;mZ?>x:6[-099* A~xtp0߇'V4*¡ &$i:@.(y+'B@z!9XPBzpt({`el_tVCⷺ a  b; y>q؊g*JU@o·3, J}LeGؾVRaY+s)NԶ5Ǜs=DGuJ7l){xKbA4w~esx1F5+ۑSY<=Kn*γ>l1|BQ^>ȷ2Jwm(&̾.n6ע\Gl֯pao|o `ɿD36#Z=>r(b gL!c>AQ1De˖'D'0Dd)*[1 Dx ɂLlɷ&T.sP>za>&&~|f,Z2\[YvW j$+P凲 { >@Cy1:U 8'Taok|%ecW|UByPGUKWIJxp)LO?!^ -6.rRco3_DJ!^M. iL_RROcC5\`v/R/}Wk4}5|W1}GaQaɤk(R x@s1kukb4y|=g#q=%*>> }Cmu%M?W^83jL`+F : !Duvt+ĝ#IvI^]{24@#4"Lǯ8]x_?,s.Yy3[#۸N*S[FsJ%prXֿen׌3YqGYcK ]g"8qѻXWof&~/׷tp$"В Cr[scyׅ78K p Cj ||'OajQcM;I0 0r3F.!#*oi%8J 6[xgD) 3_~ɭթg_@;Vm[TQG_E2u֔#B`` |xT]%vh [oͮPpM6 JgJ1xxVzL_)4mX :j%tBkeYDN0O?VKߑyUZQ-" Gs03ujo2Ec D+yˉCIqOJ-@/|Ŧxhd2A7J-k6ГNSԈ̒1F|nVޢ/S4GlNR8܁Ċ'b"w8cy}SE;N (ddE?,yCiV##,P\n{0:ɛJc*n$Tf_\p ]06M8R ۰wa8c=$ۏ̣- *ecR ylmvDBstra-sO&e#֯o-DA6 } ! * ]V"OD ]l nq=– م Ar֫^J>asi1;k}3DSL?'ӆ)[`Bfejy`6v[9_m;(VeXּ %  A+2ͺz=(Qf2f 6Ȩ9ftme)0jӐ^&ҷ?G%/B{bB+ BP:JҏrFmqIF_pqq Ƒ|Be kQ`L*+e"Q!9X1Y]$H%`wm;NKjm|IfS<L1gm/c#k^ӏ@@0Zᰡ2[VҷQǮ}{=(I!s1fr19T 'oIZ6DNs>;zgHAgl⟡) @Xgosa36syޭfr :Px]ׄ%+Yʆ}Iݙ*cZ﷋rϲ`(qY-R ٬tuW^ӳt_QzgS)D#"KuX@qƲx%\|CHSG,|&NqoNc ގ\2>So q9`}?6=N܃WV o<B=%qPyG7AzBB.͉2sW3}mv(x! ``RaqZ}zm}@UbD?!şuuitz#g\ՙyCGZ'E^O"dP!, OoB^!͘E–OS[ϒ0gਙR}`CA?X-J2hh3Ki6RWc.Nsu!ڜՂaPtGgulIl ʺ|f,F&ny./|ؑbK {{j[~awN9;QEТ(γteh1py ux.&;gY{pSmRy;5>wNBbL}o)0+^'EMJB>!hb|0y;E !YT +<\{2fΟ-8|BHO2q9PxGSGgbLدOBٸJ^,skWt2wx#VJfH~4%.z0S"9UzN\`64Ň(vtqTN+2U6rpAĉ| 95.yR5 Z<)7YH)ߕaU+'cdO2PE/6xQ=H>IL/ۡ ^iק}BTލգ"G2_~;X$G;e6ս'q)4#Ѳyx~a=A!EgFKAzd?ҷHޙ,%o-AΫ=YѮV<i_gpjH&&!*Z+(i:&@cŊ2(RQT(c1 X,e<"QniYS~2pb.1۫&ZxbCArPOq ²䧩<CSțtw] 5\4ML¼'&yG&_ kÖ<'Q(q2t,yZŦbN[A u3`3t=٘CF$!&d^8S*wAPNA͙1eHM@_ ĺXr6ôe0/jT=PBDA)*ZzJb\Esތc7k![[w3n{ϸ9 c@kx%qX:fj0C_B1֐<,M`L~$e=lF}fN҇h<0+nsx(o@sfu1S:.] mOYP)VhW.^ʝolA)Z YJUFS֦_.JZ9q!<+m9(n;gCn盓9wxPlɑ~xzcaGy7MX?pX"UU0X1le][3!D9u,"kO{/:\{Uo|}7)|D6DrFO|lNpIBt)Ɵu8um(%x+FUJNL/̡nejނz;we|ޚ1[9{63U+{#@i9ãEbI@j_yy~ hsy֋%q]~Pz? plu$?Hk:i1A|h}PCztے,d3B"iF͏Sqԉ>9exF9hkcz* ǑPdhlr &rwt$etw2pfw>^Zm?ѭ֐??mȉ|EeAqr/{FI_I32g9?y= Kv㸠M0i$4o )i@i"$ P#bR[Wۏ@9`s}%:q)|F@l2v݅< mNu[MŊa]<)rDT^ΨkX3Nǵ wԚ똅$j*H? eoXk-R):N9 5 !_*Om3WΉ'm=:'v0;u "r|ipط7[a辮&]7a*떮jd9ez4j Dx(d+%TWT9FKo %*yo.RH,3QLŸӢ+P!9=0FbhGM P u\"Jm(/2_ DxVE#8P+{я%Ï12GA>8Aoy3>guNƥ)V1LmE>W镡"[e0c{xhGIm}c:@nc>{p76B кH og$7SoMd8dhJ]o }&,f(d+WQ_k+%ttYqq`kL: } OB!9^n!eX_.ZW%}~[md[8 cUiʳ5U B><8(ԁf{ȬLTO16'X}>v ^⤖iIA쳨h@h:)u_F%2fkx[otmK] sO$aV;~0Aye aYCW(y9DIAQDn8`̻upOO˴TK Sސ/\9>]-Ĝޤ?fLOhmCl.dZrmbEXk0Gu[Ί˩.l6?,mtLnPYQp'q&nP1 ,gC1;]y9tC b3y@ =ET‚qx#S7 {"(`3& b̲19fEٸ[`=&E&Eyy^%6 zTF[3?imKctej}o7Ds2PGIr ^N)CHS^7KE[r:s`[Cw5Ğ99~(%V&g%P /l1, PVl$r TB7?GB ()nwvK N/YHI] %6#8 [+&&G¯qP*uђdJF[Z 0fѦW|khNVYL@N8PHr@T s>YXy,ϩþT OhI)Qf2+'nEAa>8\{f2F5S4@kU}Q+l{Zva!?)o8s^\'0FGO*.j" ƂW g2?46HjC0wu= K-^qڑ;1+(BDZb7W)i* <:3JL$|tx],:W=i̓GMk QcM siDA"/h:\8,5*|{`1u_rȄ/mg}hFKd'MY),g+}s[#WL.Gzm lm0:=:kLk ]{4c p3gϦ?s7Z"v@\fj0ʘLgq_59pgA\]$G,$?/vWXjݼIl* ȈڠM l czPHI``EGRQ`rbmqTF ?캤%AH\yBUsHύ׋'?Z8sj"sXp> UD0| Xtx OaՅ5.&UL|\A)H~$  1N,7mmu)$ )d&OliRi]϶Vp!>TnmIq"C&^;n9A2~o{:]*5k>79&=-e8.~U(B8_#6~]7DWGg $n }izS i*N[?ߚtJ1fפX{ NEA7W#?4p;Zj'.D|yopKc~yeP 55څ'7I}o)}p+ỳRcΜ|gYkD| <_Nu e!׾8Y~5YL QwLdfE!ރknfM@'z늫ǛHox5J=4up_;@`nj:WP1G[?x`2bvhVsw"5 5n"Nz6_ZTe? ZM'WFώLCT>+/hc_>i {lݟAK,ijP-GK=XYd, FR G&Ms_Uu!(bs9V F#U%ӽ|ȚYgJ,5W?"|G6$|A U]7WG HNf{@{jD*7hqH׆4TՌ;S֎O:|&_ۍ\˽apO@F&8S+%6߸o+D\z$(N^LRM,!}@zgI=8F_ܑ/ rM|}?pNћ~bQ|K|Hi_*h=&_[ugDe'GZ>[ne-ġ/CdEz'@VMȝ v4j[;^-=v& ͙9r p#-\$Bmd"c`bYo jDe]|9͍iŏYɋ YE>׃YZMؾEd`#7BΧ1mɽiŁ;$rsjG!WK9TJ-R0=KvB^?@]pd.H 4],Kjjם&ǻ*NF+ĉl}zHI/ X蔵7 8(Ҥ]]F(L;J8xb?9m~tOxqr8Dl^E  $iB(zp7B"jB:0h%b36حr7K7'ėlTF}a&NvMy 3*3wUY =ǺZ+OJ ,?wp}@tDMm@>_`0Rv3teG 'ؠBKxtSw(ftKbO0::g ϐ! $)yҹnP R>&$F T` 1~!E&{wNMSF _]gMw\W oF)XM2I4DWz(½Vس5ޙ)?(CVL@)2Ųd`۵ cnaȔf RcnZn2XGg2Mvq9 "-{(8:kNc܆/I_$$v+%$-#6>=bÜrfъ-W{sкҩFt4 ^־è8]rVv'q ?f~9FtJ6nck|J9IթTWـVԷh6'>K^H #0`:ޤ>!RH8 x|j"0um]jsNsrn\ώ$@ frLgAq'/Hvpn+ sxO0_vbj/̊=yyKG4,AHDWQgz,49`򄲸d:0N&4lx0K oܤvGHzA(ĺُjH.[ML@+eLb$j9MULuSuEyˉ BT*[`Wb Ĥ4kS.U[RBH9{ ;U*ڑ?M_uoHDjLhvyG|N8O'-"ZjAu=;ַ8El6 C=J!LM-Aш9Cf뼎XHŃm~l{ AǾ"NY.}n#qEkP%Q`_XEhZ@S ztz-;0~Wu@7+VTN!:mm-I Қ򞍈 -+[JleE._P|9Dked{.Z?.\05|t6˞oSKVJ<[ YjǘN)81 } ޴΅;_%eNɧ֋µܺE#*7HIuO FLњhKUaDdLC#Gt4OO[,y 7qq@a7rՏ[OC>&83 DAov>_'v>OQ:{fo>wfіС2A8f6Uy@#Li\xXB9IU}yVo]x!?{⩢?$+W+P}3RzD^o ud{)<|F{G" ֩qʅtYwd^3ݭqǷgyC OP8Q]R ;)^֡io~dXFӲIŇ؇뉊̑lRDD9k2acSrx`# axƴqu"&CVZnH`ûƼѺrt0qKC3ha W;S|Σsv6_>!OR|TYrDTixhʘk5dVjʑ I2Ƽٻq;N]sOi_b\L7>+H @z!D3gZ?? ߅1_ATw֗t:CP$h3Z2S}-〻W,\~ F>G)F"Yx[ P1~ЯӚ\Z// J@+# %QS!6Tb?04pͻ&ub=@Y6\EůɒV>]_au=2Ų;%Z<܊b7Vz/Fڦ-)) Yﰩaȷ!yX3f~W)LJeCAP?S NL8ؽ K!GzO'Yŗ*7sN%KL%AH{Xt,XXٛanl-h3R c>i\3T~a!ژB.V`ڂWhdYt<#8ұ{=IJ́;O-s[|p?}zjd^>_] 42\UBN0jiU*Cv%arFT}l;_?p3*-wo?m8;dATf`mKW60( 熠\CIfYzxyAj`PHp@{aZdi`3ܴd:R8mzl*t OODK*a\vֆ,i?mc?i%$poO\p]gqdCC|f`P4{[j1U,4;dL81.r2d~G DG֪A1q.> F; MZ|Q~7.WLuAe}6spɰF\pD6$֓?Gvf$-u9>ͧa_ՏKc紜n{h5}\_ oOT̄q }Ml-u1:>Lp1ELB늸0YsPKRzZbAW_ AdN`s-t_(/aX;FQ1KdIU~xC"o)}Zbyu*k4# V{c2FiNcixeҦ^d zKK~UwqG@|77Ac;,g!^:)B949/}ֵ-إcX#DlۤK[ݐL~|3S@*N\!E=kz360+U3LHc!v{{9Ǖ,_t{a.2c7&*]v1p|V.IA~xXȣi/+׶i{ k#sHC(&f=a:k&L&ch.!JJK~Ws5*)ЛLnrU{DMǽ.$n{ vxUʘVt+I#+RwwP{gRW|5#D=RYÆ&>NZX%Q[bh bG4øY-F}&I[%]*w!ݥ}Ü3-!TzngcG(V.IYҨZ34SOG{b[kB{ڷ;[3FKT7?)[fM8cXodk&f_u@9ryr[eul4^`s(h^dQ乖vSY{|_r[icf(lmIG^;']͔q:5 _>jĻ/ɀ:dEA1}=L=8o8?a7@cθO tp0 ԩfWpф_aRoJO{[PN7ѧ$\Ι/tQkjZ4}|0UJ'>ùiZM1GJgl4]XfUIOz\YE뢏5\K&*mg&5SF BBAܽ|wF[qa肕5cEͷf% Ͽb½}kvL<;v9?>Mӽd$ o<2$˄џR<@/CPU60fCVIH{iïg0ԕz[ܬN}n!2X^ڀa\^vY0Its*CqT 2˜!IKp>QIB_ sw֔rVC=|k4A\Yx.0SkdfrZ F T*竧pw;ì">=[ ײϏ]%X yy-xf/*wq$X>: 3gEX]=EQX/Rr౓У%bp#Qfo ~FZ+j- ^[DW\iؐ]UW)fP{sj?ձ4Cm@)ܩ].Vp<hn7cqt%OWcf4^Оyp轆w ײī?md| v9,np}ME*nY"ټPD1,D!Z`Դ"yM@,mh҉Y0e0`KSNל%Rpdn6KMLo+ػf\ܽFba8$NSO|ΔtAQWZLJ& b`ʹʥ(Dǎ(ʝC¶ 0Чh{@NŸjjI&i)Nb4pɳlM* җަA{KheBN[ SB1DGS  g‘3`V.<X-m)?iq%z5$ZKTr%^Vf sQV4Yd*߅dD#:ysk$mB=-%ghtûq+QoQˁ>?G^`=J%z YVm| \阜 $ Y9g,fIC*a#QЮ}t}7M# S%5G^(Mυ/>J:i7R>bcRIYns*ALa CP4J`G0Y?ը/:_Hq|t~E6}K΅z3,u|jURi垨SkyB Q䮂[YsE!-_o3l5!j@ٷӸ\4WH/gNeϋY^+CFOHi(HmuSW >yS2b}~nchV폫#^ƍ2 "G:^;f%4U+s.u d#UYe͙2V+ۍ3R}d) Y>y+7|ʪ EM]yGڕMTuЯfȣp HsU ͘1 F9~T߄cw85CejYQ:%1I F9jYNdLz<]5wg `}nӿDUgޭ&@Ff]ls˥@p k:L)WRL _%Dh/{cU<!J+K7T'/NQ4?i7q[.嘞}a-ۮY5 )~ITz٦ jȉSub fM5~$?y7Lb&c/iy]SsMfsy&dbsM xgkهĺpZU~2=+;,b/(hOQOZYc $|R>Q.2X@BV\L]MT%_zҴo[GU_Ǎ`ګy+Lf"CBB>YN[H,^i3F6EXN/pБZxNrh̾=hh4cow**%‡oln :e3NQl xcX$V=o)cvt"OxpFб ]Dk>cw(X |X߂?x-BOR"mcMMCH8*2vw| nS*! M3)Bs?Bb5Nu;>=@7!PmK\5L368=ie f8mhp_qa4XȲ3,E;Fao(R@J+q~֟#zZ=hE pNWRfpIfl>`PZD,nf\ЭXqHH?0e;81*_;R E/@,$l.B%tszPm x mo;pnMR9Ɣhmj $|<`H es>/5eO%m`ϿtjAJZ\rb."!ꕵ "rpb-%^6 ?۫)x +)a]±Yu91^mu:[Vap]GM!N=S6g r镝,sCq\~̶lqO,^LT'v]cL460iĵ:SE齧̔ ZVR[WapkYhk(7@`ENjrB )bf޺UՎm(7'va,-N-0Yۡ_Tmh~([@%Q@y``߈ .73Ḥwu9RD$ r o9+?^vUđѵ.q.6ª-Uvd(0Uw MOS IL1Hs(  CaQxc0q(d6U.,a#:Vta@>3M@V⒱kuΛQ!PرT\ag丬ߴNS]PaRs6j!v_ x 0r:aOysؗs~K#; W핏Qjb{hM_ϺŽ#ߔ%f8PKe$u8 &qBem9#>ZEblQ^!MH^[o8x0+f6G!qVҴ@֤z\"VovC43y™oG$H$Ip+vtJz7⿔go֫?&׀OaO$aWG)X2^1*Ļ&yfU+JTq mr Ɓ4PVedMgH4HK_RۂaJ Bjp@z(G+KPX.9U9V}V{zr9B-H" G,V!v]&fB]]]j;ELՂ!:M@YP')# qM!? ֕-"Ux0J64H GrJgZf{i>&: ?j?ťt-x-ҳz[/B# .tyE!Sl\I̜!g؋i9J#/hD ԃ}Wn`'^F-+ݔ3''뭯 bc @Xp:zڨ؁=[ٓ$٫015/D-* Yy$3%3O;X+LqlQq黄(Ѫꃟk~ug;0~^nB2maB*zj'_;z( #FZ _nAcgבWd8L:ðɛf^*Dt𦸩#g6Ԇp\{i]B?Ai\@!y:<8-ޔfLәʲmǔ^ \e,?6SPe:aY-(;o;O|cr+)XY`^DE)m srCAש髻EQ@^2ݐaQ6]< {mR3DEC.!H\ H.l) QiaȂU'V,# (&< F ^gN H43h݄d+J!B~X1+*㩓EQvi1J՚ܬ'[&&T;įh3Z"=u7;՝8O&1SsZnޢh#+ o^?.YN:¥eq.(J%IF7P*Aˇ`\U9O X_*}C1Oy4 =75G_]4@]Us8f!=Xjڽ w~km'>*ڛB .WUF["HDi3+kf7KJn@F"HŌlb.~'Gi8QkHDikc-5Ltj?|+?_+K%DT4SAShW#',eMD95۹hάcP׃|5 ڪlC5= (HCLv ؛H/yԄÚގV(U ycs󕰈s&MD .mei\pտKBgЫs["ljtʁ$#y%b?=83^>![P =bs"mG[uW*]%/ܥ p+\/OL0{z5") $H~ x14#l:D^("( 5<ڳ;X< @20i [ޅ|yFZ>_D S5`M~0YXDސ:? y%ޚ8_H>P!.ϻc;m9 uQB1.L:!%DպtDw=cFw/j\.W|kb j9 uo2'ݱR'1rZle!\ J!ۥ 1@SH=&'5̹a=0bpkyU~}uRzom_׻e^^~5`/t\X oCUGgI~8rxtzr&47 qsYa5/!9t 9۷78+V:5麗jji,U A/ZH;eR[C<.$Z/>g % 8BQ&ň|YQP2_ g ]7I#tH6}{ ڔ%a' _0s&g0WY a?:_#⛦dO'RZZW6p (sƭyО%i42$$ϡ!QV}\]FGIEi6vTUn=jnH%5A pe\V>J#4 އ#PQro 8tU~իjGSj;:8 e`Bk'co~?W._] LYΊQ KhO(yV!|&uiF%c#2dm)@>7xٔ=V*8l{/AǍ hYӐ?H9?cV[o^I豭w||j+F'\YsKOBmy6; }AV9>Kz =Σoô26^p⩹R*C;V(B`4Xʛ-伅QVkJUƆx.T}4P)w$}q|6q/ȹBlQ{%wD 1\c9V5zz'ʥ+fY"(wV-(Z,x6-{kX3y`l.$QD "Zfh ,E1o.]9iz \Ywe}S*_(l,΋H,o`#e' OsU\K=?a'^ >xFڢ!⠦JUeM2? ;)M޻Bl_خ4FMz&|=L/)\&ۍT}Uile`~@ClU[KdzZAwMc;P Θіr7*Pʏd kϪ,ä  5s 9B +e`z+lC(ٽyjô4,ҁ񶸟I;gQ~1_3G\Owš g5⧽ߵu9q$MaAo" +1[pa3M awW3i+ 7NJ{;R U*>ugaHp%V' 7psDw__AJ@tRsOM#A,Oi%m+?vI`i#?i+I]% .3,#ml ZÚjq {m %F3)툜_sQiM9 {>L8) Z~3Q5D3t#U['}~x-c9yso/07E [42 ؎OO&_!@߈ÎlIa5fh 3(,bA+immY8PAy n/I( h'b2~*\k HC$5cO!!w_.(T<;׍44`_ȥQ,\W~ <[@ 9tK.DD`GQQ*ZDhJ IcKͽʠzp,MlMZ!a|KBu#1Yf%i(k! VsM<~圶8vu) o$8 ne=:k'\k84bE.B9/R 'k&W^ƷyZ?b2a(6_"70zIK`9T2T]xA^uPbjue„:]yp>P\ y_C/(9xG袀h9.æ iiC|vq цy!4~Os?p4ޢ=+"b/IaX*V u椆vމ =__-o(]6y8m)] ?tM}<09ndڎYY"Ņ;byytLѾ%7qdﵢޞK-j|9_RpD&AN؄1ƒ hM$N uă'b&5V =y0#CyaXy=kv_3 Bў x'V}qnèpM+E)BK̛q$c"ԣ&^u`RFo6_7Tv޿1gBpYS&U0\H_y}m,"?E Od}=Ļg/WMxcnF>n*离3T?q&;4"6| c\KR{)CMLS}>IVdX ` 3_?H!Y)\3)t$Urs>7l~vtJg3k[ c(WfY4e;J ˷/tz4f1WDhEq6ӓŜ`v RLTŭ/pF7[P3mK6fe+D/, K4voE1C, UI9^2l^8%# I?Pw%-ĪlgtM>Fؚ6ؿ#UFW7itKp50Wzs@zQ&}/X,"&K?*EL20o1ŋ.Sm(k:9'HD/n~oy(U}gn8*yʛƘQ$gl^X'Aÿ. r<uᔩ]#9WW?ywnS9Yry)ǀ JY9-ԁY!Z;p`sbﻇױɯJn1(\ Aڻ?H462~JMR:ߦjZ$u/1&:&΁lqB݄;n0Z=KVPIM<̨h7BnmޚT-teaei`wjmV8UZFO•fu޼}]WAt&J>HxD76}L b GWwEq-Կ,w 21ۢݴAU1gcȩyMZ^x֤h^Ι #;t}_zxPNtFMQ%C5@JW0]b Pfj3֬H ~䖐0V̫f32gwK89p5χI^@.&>>%hQduuIVGgf^n_R*!06-^ sy]v1BN{EIM1Pm!,A0+C" :|#C`.!D9՚ȕ-Kq{6)c'fcqjAQxUҷTUk9'?.)յy.gn> b,2PLӺiz #Hјϴk+EhM2JĘKí#YLyV݊^_!$ :tvjzȨdsy/M>Y/Zvl 8VPb*D'ޕPӡOjILWdƀTɌDכ㶪M=À^۲ƲRRV (d٢&>^j3c ƆQ\BVsF"'!޶1fX w[SKS$Gޅ ;rvU*M_O8Ԭhneʋr3[,#=d1ls:ς>!'B֨`vJʀ1}êcx2RR]) dO SH+~2fl97գA6հe #s4-& pB;P}* nK;a`!0K;'kudl]˚.Hïn p

!ϵ8ώͪpS5*EEH@Xbxx a5.斆%łP P8Lě(n qTGT3"G.E^m.=w 9`c\^es 6^T 06M=~XQrFOǤlLMyq /{^Xf!7CA\eD'NBڤDmF&&]lq8E) SCm#GS>+PC 9x-JCns']^GZWUG.)#eP+묜`_ .I!Ke}QEbg3`L$:M`@>fX˘0 j *-(op8Jg%㩭sNfLQouF^rCkyP-/2 j FxbܣzV"r%-¹}u][ &O[Co4KWGXs%μ{,p{YJ8W̤ w[X'ج7%qDo_f&uXMq@*UO{ c\3e)%ƗAY>6[.iy>[`56VhN@l,E3hᱢ"ŃS' ];0 3x5>#!&4Y,".pYAs wۢ@$3oY_ؼp"@ҭn׉G1<}J$3JCE|&,ܰ:aq0HU [<,!9ƉхLa`0_^`l${=ƅ?^_nxnVV|r{6hq$8pɀ*R2͑ty3ѕF }cl bFAc֨ / iAbs$; lTUa+z}oʬ!`oK(:M:;5fcI`1019 +m}qz"Qu7-KS^ cm`\Bl(?Fy VJ=yy9'}(e.AN&z(3 M UUec1B=<Wn\yi^OncX:5*7oXI\U Uv?] v~IfpDd"=ZcjtUPfO-9f|5nO<]4^~x ʸY=!*J^s) /8⊒`qWB!$.yrjIY9(h՛0a7;6 S%iYt˻n?9ڸ+޹1SRǂ-(\N\E*4JY;dK]S;j;ǧ.1Uܥ{M#o|1ͻ+EV>"rl*Fvz#9`뢃SZ# _/D<DZUb'-MɶPĿP>-3x]fmh w+?Mc"9 tI~MC])K55OrU“G q?vY10 zu&uKxnWK0Lp.?I|xD@iSM߰IſPMyr3sܔVq_,Q`MTS _Zl|9?[CjkHBܳr刾# |\M[uծ"!齊١{/q!WJjhxHdz/1ܙ(R6EWeuBrmCKUQ z. (i4ldU%YwM-lӚ{G$4Vh QF }˜T{nF)oE2^DAҐqr- ӳ0ۇٯ\JZDg,uOaɗIN]6+@]L2zV Uj:~GiHzrJ'"  s >#G4)3L|$Se7c|(`aG^O)+ ]Rxl6g>E2>2 94e'R )zd&tE*LHl?4˝(x$9+ [WSo#Ww1$TΝEW#h'b"`/H$ԡ[/=8\H#u+/rVMбsr7X ., l!jG,\ I N?v>jSfLz$wN=L fLt= Ma=Iu ,N5h{HWaO./ P !+BKar.žϫGQUp"D 7fjw>bv.gn>aFLR^; ޛ>]eJzֺ+P9"cxMt#t$azaE`Q&7*I:P6{?o2TF :H4'15 W|gi>"w30 /B.-^>|sM-/w5 G[WBM"yɤD%DBêWS!lmGd ן)_]@gDQˁp2r.A\_buK‚&M;>i{t)s@Uikq/}{3,1kLg(قQM`adgu1 P&႐4Qڵ݌g/}6.k1TW X)$c^9gխz_)cx怒WPR"kt~kr9];we8GX CtFv/ׄlp!CHI5N|R*_շ'3+j\YP:,՟H.8TjGڽ5` Z_=FBůk/-hH־>ᐻB@{)d"`Ui.gӲtԻ RT޷(2s.]ϾS j~yO:([ Ao5'xL71 P q,9h,<6sG]U}4ƫoE3%J8tmvXKг V2:y$/,'E^.n@RWM6?$yD)o }cƍ۳^kYX\K+l ",wNͽEeVhMsgV# t!Ma)V4jr0NqE_/+نo-g~^&BYimR*GNQCW_T}wJil}L$c::;8<3^R:Y&l_AchG'F+,]x8!Fhx2! #NoKx2h2H?tUɣ0*V ^2ͣgӫLz8sϯ2\Ŝ}(V79w}k|퇮 {ɋ(3 WKK#čϵ"Ր!'H ?Shl_%{[Jەzcn‘k`P+v$vDDaUB\ ,",:Sz$$ ֎^kh!<.JK)|vUq$&6`Yn"d[ 1K.WdKE,&k;5/%"Pt6CzgʥѰa"6ߎJo{Q.r)j0@I`tx%Z$o8Y>}[ 71)QA,33ڔH~r'16vړgQ6KMqFw~,QlvbZ=tQ}#}V"wIfm.8}bJް:9qǞ#6')@ў)&&T9).ي#B!Vŋ~p * -@/|wo)y^* 1&d/(\#P*5`! u%:8.Hw_o,{s4_= p8/?edn~\L,jWrˎK%ݺv|3e,ĕ+uҗU0G u2N[MV?{וV<1& ~ZHZGaȪK^ACi-]W/#[a[u8 Cφ0ymU?ol?>A~wP| Jb * 쎙 P7-L5o`}l1 (xWRαopgğd0>>t M¹O8Rl r.Ev $@͋a<{tМO| Zr:9.iǧvI,A%Lmã-Fh٫F _{Uïo,O|fiK*o˶Z4H1 gduP+ BEUX >sUɐɔI7g J#}!=4]ly'״U.K'&1N8|81 V&$˦n9wAvK@:9-W0)]Gg#~ޝ  rەk1 Ԯ#)]ef].`>舽(b);EĨ6ufo6N{)}d _n~Q|f=+"黢~wO1R'LY6XSubH[߻$Tl&XՑ E' vZ-qg8>Wq};7AhЫ(17ɪٶj(<_Q).w 2|rg<}C&El!<1qsǬ,r- ;a ~!=޿e$Rw2ܛ7i1K?3SG/"w\}ԛD{̳a={Bai%e$닿K4c*Joq5.<ו 8yV9KnÜ߲~Ffa\o|m,]9MT1Za['{L"67 X *pUԡҹkr5_GY]$<5? (([I<ɕDlK} ѴE Fr$I~#,OGW8M o~mUI0b! VZ3L#%xr)} آ>9]xያ' Iq_0,1f`09|lQbQRm [iOOoc5 +֛5eY=Cb M_=˻U]9T&"Q!QS?ڈgctQ@+BZwItXeK{v29,8K<|Q. 1Q$ܩ V0Tk}fQ) ??bd斁#8%#5g]֭dl!*'8.EQ⅘p<Rl%E1̟,(jb)ڮȕbc Ҽy;5|2vHyf.| ute&>5>Ά7 {vRΓuu`3|79bY\jE0K&]v,]L-IhSBqu1 Td6^>, dIɞs,`ÜEYjnL[yF0mn6dt˕+u Z*#t>6:FB[tumeQTy]k4R^J>ܰ}X0Υ6%㞉1Ȧuw2h^CMD$kx_ߖ gШ. -m_x`W^3qIl7oKN&(.URD&dq\fFґn{=YF#SBɰD ͗ 162q8n]H;5*xpx.~D̗|M5Y&KB!{B~YLPѝO=zt)o9h]~z`W=H5+.`?O~.D~ק4J"5":2Ads`ogUOV_$h{v|KR0ï$k1/𚹤m(]>o:04>('8^'-&X(1[r2/lTRumێD)avCKl7[Sd6^8"nc1IWNfӡw,~ӑE]bvV_b< *?4Zvv(@L?Hl q^>+ F66J|R@j37qܔmWˣ7}eZb zre_3㪌r(`~#0Anꤴ4PkMHN$ _RQ"a6;g&$55$Z7D߬;B]M#t N uJnBykS6O>jf #vYԍnۙ?[jJ'0 ^r8ld;D'pä o2l|0Ju_FcJud&OnAdFn?T@[pZ|i !M$3fkDwr2:%4L^ {|]09@qxp%!9l8G}/<8Lg|D{65BTSZjeqbUV8_h@ ֏R=N2.Ò;q/xO :+ݻh@FattM=ctQBR!)83+NX[4lVK†"KM!D a&^An`%L"K`٤?GlFS=3".x69#)+0L3cqEac'rކxJ6&jY 7RҖ&G>h{)`%RKgU֓r7V0x9;g+y:ָkrg˺XxƬoqȂP6FM#vc )DiO~ ;xUStΊJnvs Bsu^f&j>TT_!;`k[Q[PŚy u eؗ"f>-Y֦e(dGd{瑋0PNoM-/@6W pBvW'+]-AjDZ5J`x&&\ϷŽ Ld"ϸ{?lM %DR^DvxnRO9}8G dbT$~<$i<]jj_ܔ+Ǔ<~q{<ٜt=2Cd?;)tn8N^ogh~F+<{>eQo Pv',>%jCxq=@]@nA #u='9%%)eK,ԳbtLJA. M>O$i(٥kEB5f-(&ϡ"!\6+ۘ]95ށyTw'|*0 j~ 1j{m\kىKb2X)ٗ]G=1u\9dPz^^M837*^,w6ܦ2%y²&1P(Vi9eKWd*K156nv66>c%ҎE{I:fM|7بl禤Uϴwq6:1{*Z3|'ҥ? >iOT2f;ŧ+WƑ}@+ZfͦS %{H8 F,5*NUj)H{H4$<{*qWa[WM؎^*z5'Jop7Ѯ¥L=g k 4jC Of#2Z.Ȧrmy#NFS+\ Bin1"(~"iBςRЛak}$'7U,Ll uMaIsjGf8>XLU?Q%悙-~cdS/z_;ɎkMeJm疣tIKT:$H2>P 6 ț/sLMsN9p*qmv)+w&>;[=|at;V^+S{h!i#<,褡zL]giʹjXDXL\]] ɣ'QoY6Abwٳ 7WNPF1˺"U!`, + GpRSߪYE[ڱπZ)vHVM2uO0*4TgO3+?J!Yi;\ }?M2En>r[Fz~&q 7SU5~P/5kĀyUY'e>4/ޙFuĵQ~ZwA2-$t(ckW[;׬C=BV׌^F4LcBgٕ4~.Xa|ABLwBD׭d sF#\l4(6ADPǻ&njXbIydR2fmzKH>YQR6vĜs*% 2Y | +F6pC6t@W 5@[uVQߍ?p<$D4%nKPD؇?HgLۆ :d::wP' ~VljW4Zd SvBH H=De?TE8JO gIbr;2J)CGގ~[]2Y>xjm]H|*<9iríKc3*&VNFV8χL͵A kXz^}=xq'Y'#kLID\2bH~xblJb*dic].(}gobЎl#Y9D1wf@%z4)_HnY\q '_խSĆ|f&E'0_ttfn? ÒJ(h* 2c4'v|srGaG=dη/X-kyodX6bVò)0umZm `ŷA22&Y0 \Wv+Xv,("kmtkVjܽ\ mEJ=)J.O ng3D[PJ?̘ r%=^m_B8_*swc m=éB}b uH"udnm9Ι*&FKo(|:QsP VWi|ɡȜr4ejp W-N5i:;+ C%;W.+%n˾D\ySQ=f XV,u(ꗊ r`h~"c>Od6WmBlikݹ^op͕Db0eyPI1mM}z5J]i\`?@`h5+GՏD5!jI}^v`' tZvp| V_TdCdfF6&gИZ=A5KzߚmA陜dByl}:ޭzG.!vK]M"vh'5k ±;/P!63>0[SU8 "Gu$jOUr%;gu ӘkO5֨uL2϶ljX%hPKW7 KO`%_-) D Ƕdw^ 3Jb~Bܡ SJQ$PE';}0}ƲBiJȁ6DlПg Ph)@AK4Bee05-ʫ6c@{rQUWOrkf9&atAϾCU`]K?z/`JfЫ5j46էܨRC_,gdx_JzەSl|dޢ@>hKU!{Wxh2T9XOq:i;WhV!լ!W'A:M zpaȗz+2儊<}Js ZSm-CfBf{|oMS ÁprxB5msĠdUR|ytewC񐻍z^ ;5[Ph)7 (BHT <ҒWGP('S&B"y/^bU8h0a\w{ nIo:^NËkQ/TsK8-ori[ݤY*@DGjܳUFۈT"  γWVW_6/꾯MPa bm!h߶JcYqLND J*E^( {=1⋸][`Dӧ#acⴼ5sY#򓤈x3u(G 8ݒW|Zi̡Is+|}Uɀ.9++uLA_8ʭC?DTayMQam)X{ n ~KLcH5hJ=j`p3i=^xai\&XChIebdރޗtQCy.^V!/2Of_[j1~YRq kw'd NM/zqtlV$ H񎨴> - <P2;*^,XH"ށc N{|1ݽ0^/Gy/|+Dq<];G钪*B‹6+sfCMS6mg@N6 _L)9}Ǩ؂k#_ne X o2e 3k.m ;z[ e/6f!7CgH9|f`5l'ԛw$|F%ywMy5n.vb˨+p$`Sny/gXPw5T]'66Ǒ P-gR \">uoMiwתWsqi^׀}nao7VAqrO#1У/B[{$D7I:&*j2U@w|2%4^A/'0LٚHl<^Jo9 (cİLBvgtG[n1,=s,rȜWSCI@Fna#OwQDD/H>A)?_vɋ< 7GLj+=ǣGXإطI16krph[LZ)5r)Uɒ=kM|iLFQH%BӋ{w.e}\=7 wβОlEhFw5hsaղeإ3iI;Sb2~!&isJ"K"% Sf?x3y9CFI\g`BG"}Kk~1ԷEuCfr-qK~D-IfܼM \{qPp,Yo? 0}`zfGƄ=q7\3^lZ; ~#jE|'>u'] akzy.͜SE:بe6W(-r{[EKKޅXieBNAg9a/GK2c$2>\puZ0;s6p,nM!-)"?X$5&T^x6-]Ō,..Lꩆ$&Ը%RLcd7a̘֯:躴׶VDqjy5迖3byO49V:ק#ŭ9Wuw3~.=#SncEa:;f2с'@VC,}̻ pj+=PP$^ޤwTkh.{1{ZtBSB/]?R~EM` ri4/6md!fhg3IMaQZ A+dkEn.OWpPy9VBA+@;ž\{ `- <tat 0}nY#Veuͧ0RS13>4{xmƘ rLqLɏ{nUZp+ʁ]D'iPd7SO<>Q*v49IxrcX7ƙɴQ Q9}㰭U` ݃#+ K7V CklI+~k )q6"[sTMz拒~4 8VNթWt,(]-fr*6 /])ECh|"S_E #VJ=Oωb@pɜHH}9RԖJ~HV6\rT ̀%r['M2>"z{X &KDrn*;M 1 ٸLC"YKv/xτpRD.BQni.-? !tQ xL'JWQ6"ΉEٹ}ZQ6A _Vi=>sw tDz<ܚHV `L+8H?426cANcS[~p.FrKhHg'CXŋ+A4hL&i?Qastl}G;s5zhSCglN/su|͠|_ pWWz2U<%ї6"_cLYrpjEUqr񰒒nhruxpp؉XH75lԨk+w)qn.mt^gzd"jwso0k=d(+! 5V_qmH9?C|گu^ ZO^T,ې}djUm.D sEK/&[ z A,QgNRl=DGrq lgWjn2d ;!yWae-ؙ@-+2ھ1ҹĸ+ʼn)jv~\7>F0- DF\3k+R{).{`%P$Q:P\qg-8~{ F#Wͅ/~qde<:lה/lrE^^%¹Sl땝gV*]G,X;g)@m9u~`֫e[0x_\(}q@l҇ื\l( :F[*l)Y6~jEP*39%u~jR{ qU\3蕿u`J\Xt3vXa!7֧…,*Ƀx.ro sߕ:aڂ Ť9m;PFFyʔ{lZY5&B%!9$ٕ{2s枥-4I#z"|}Yl8fI@2 b:V'ɝc_tbS *˛ ݗ#ǪL/F{gX!Nv $/oe}|MXZaUd.EH?_p%ՆDZ`4ώ7(n6zjZu9~E3^ݸJGA. 㴞UFν7]FFdknNu:v| ]z 8xXݠ~nOF/^2شbGVHxo)#4MaţS2ZG fMUۍ'QƒW{V̀=Bp[~\PJY줬sW]IRm]OrcH5"h%!^8K{,? m,Qʙ 8t[qIWç. u`bEUN*۞@o'Pzon9Hht\@r$nWcaYݰF&Q~Cn=C]0G ?-2\_Z0[ZVp5n ;AwOy.˶O l|+i}_:XT.W_D\CAڸrG(0B[5N>w\Envxrn蓾c GerBBqXꚺp2!7dS|i*+!: xw, (Q@]*}udp"mVy83 vs9_p#5 zQ`1"d0wX+#)ӸD*Rl,^tÃՏ&nQ[HZxUfo}SH> YL' NU;qz R*ľw;zɳ誝H1 Gc͂ȡlTH/s6)PZJ#VٗoGDNQBr}:Xx=wCQ ᭔5u\SXnkg2f4Kg?xr?*$sx3DNr+ OƞWa ݤ")\et_{+ @Ew@1Mgݭ?+S"I;e80[,|0hdwĺ4LAfM$. !5 "*8$j, ҂?WVNSFRU-~| =F7q.|I`"M;`ZȎJM]VoǔvO- 6HM4誩*`yYtuU/A /*v{%+Zml1RvjwFu(ڼ =[512a7eR"Fѐc"OݫpɩѐGJk{!ZL>覕dIBq>O9} o^ΌcpPbοǍsi F9 [tBUZ 51Ͼ7siΈFê |p=V5HGjVj`Hߙ2Ⱥ+пɠ}#oLq͐mez7mt+V8sWKOBpuB,Sx*"銶؃g mdl1ժ]f$n/Zh 'Ufµ1!HBVk1Ab]YZ 3Kl,Vn2}c9:|yò8K6h|гӡ =td j1y9_!x<(cY6s1?*.ܓ$#aԕpb1ObrK*++os "=SYC23of_Zgq$A fFӞ>YM2hlC\f1! Co[*cFu쯢'bܷM Vtr6u8xU@IL:ƴ銭?}JY^O0 =J`rxÓF^ʵ ;I?b: ҰXY.oB;l{C3g59S>6>O?X7H΁,5&Acp#ϥbBQ+<^8oFbK37nu=2O{'A^rik"1 yHQ ǥ>.}EFݤ":OrS=RE15% 5)ZtSg]eR]$૷]zw;5­L{Q "9/AUsiݷk Ŭm-[a a =ك)BHGtCd 2뻍9O Btb'[m̻ln(DȾd3Y,vF73hqpb kcK>nVj XH̺xu:[iFѵoƦ.>Xܐ?Eǿ⬮ -zR-/Z[pzcWM3ybI[Ra ÑM.C(Su;yhK<`R`Ah(TQK2~[54l:2 (W#ǁ`.=|AArQAlܟ*Q|w93Pn$ZU܏Sn7y'$\?=+VnvdU;6aM(#ۣxķxH/"'s쬴@~tSkkkߡ1"mҮԼpCɅ|<+(ݘH/ok?-mxwqD}t OA E $-7z^~ѳ5g(@%dF(\ ^ G[ W = ~K+s,w~I!vS,}K +9=RZ2oARm֊]m igHPDqUvFA* kpd @Pu2O[.>"%>({[5&I>-Ƃ6V&VVRc"Xqn \A`Yx]'o[7|ڦGپW N/zTj!s4c,E3l&CyUYC h`(Je/r2u-Z( ᰭW)-vBYkXK2%3B$6w5f&NSF!ú|i duy>T< Af  #\ w3 C%AKw&ζ@ҬG=e7YكmCANuZ\ͭ3ܾ'geqtX\ݍh*YkyPxMک_oR`w[IAqFł%}Y>qSryTpOdvF85AS\*lUbqG\Os E ! %_s 14Ғ%2<Q@nP>r {{TfD0Χr&xGza'AП)zx3;d֙%C=j&tyGk N70[On)hQEt6,TA aA< 7 i祖@>#lpd8#Sa8g}I t&Uwd;a6tc S_N_N#8t&C u3suHǓ~uY\zKEO dC}Qe){͗֐z>\/zĥMz 'leI"f/_\1*^w~N3 2jjpO$h|QCc"urg~I C(Q/jjU.϶ͬ=U**դH}$ !~$ni7댰~'廸n ʞ؁*D *6˓mllctusZ1@<BE'w \3&*\5Va#:Ҳ \UMD@6e±x}pR`sy;\u5)x` 8^ 7έaWztUzѧ<,^\?#\1jAKݔ%r3< QPfαxrZ*~Xc\5՜ ,qPOSr; #biJ;eզM.ba&@Q=A* 2ZH.[%D/4D޺l,YugP=Aje{M+{Y"Ⱦ[@lϧ,R2r/;ΦϤZ/ꄇh>y '&WVQlE79~FSNs/cU`e]oز'4xX.HwbHfO6ru2?EASC`(JvnTl&*GGBOrkOX cd+d@GNFY7r?rJB#6nt{Zќ*t#cȸIc2)5m͐=O2v) 20oNyg99ho_Tkv|L NF. dD8\S8+p1;N\Iˁ@zM$T2KhX 8'w)fl3_3b%V]Xc\`뤲b*B"CFNT>ΥGMrw3T'q;.Lb7xw6gʗ۝]q}qauZL,~(=1y(e;260>U{rYrʾ&iI~!zmwrH6}5^8j&xnARޏ,^; 洢|PsDE0^N{ A|C]ݜg+\ cPB,a>M#iPRv{}ByTNR)d?-#zux!6Ɍjw&]d 1|]F D\8Yp7DiO X%ĵtMBQnAV߯Km%%1(g0Kk> R%z(iܵ#gP`ۈ3uoI _R<$ri[g31f/wety wCXi;ÉZkSEMu}nW=nzDE- dZ85_t }]%0-BcNqw}61&{e|_Hnc T=y\X{`'x14o`j zBsv'U'>5"$pxd*D {56 ̲\|U?;rc DfMpdZ:)4:5[5l3VB hJ=j]ﵲqv@BPXZj:y3ٜ={J@y0/=5 ])>NVrt _:+&Ԭ"\[VE(Q",p~i(FbM>7QEe]0=6WEjpK:yDdW* AJFN# /7Gs W'uihبGB|I'Lsq:RΤw AN鷓os4mP0W `K,CH@ 2WiqoPHH;9[|Y߾Q뵕 gzk14te^hgYϑ^eV{.*K A)z-~3!Fdf8 `Uf-gdrs Ohxϗ/)_#D^ Ld,`wNaKd@mrͦ.V˴ ocz^({fh ֍^!] ̅! Bb|6̛X& `13+tBH,P+9졛U |Am_lNHD>Z[LmKU'ڈiҙU$iu#1΍a8ĈB :6"|k Vb?6bu5peBē@K:T`c5_1Duzghٗ+djg@Ձibp]fOyal".m䃏Ǔ/eyá(A*qM(NBi-':@xս$u5iIuSP KtEN?>ڵHxd6)C] m3>Ԫ.,c,0A ]Ak-Gp1`0^ՒeaouaK1m㳁"j`1-kWB\IZ!@x6a`ۛCݕ1-ݱ:| Ӗ)Ҥ[Ս%:D*<>Ml`6rrKLj\30M ]Εn D=-b2]e ^+psP31^7E톋ZzKj5v!V򡂭@C,&vOP0)WJ%YK [ j"a+ ‡ PqIF w\Y:h|pBNk |b%B3qPˠ*jYwpoܯA3/{/*UC{9191_LTAV[Q^aTúp^LU(ΊP<#f+gY}l'/zI9"];yla81MUwcg㗗Ծh"#t֚uyDM%h@Ĕ^RafSwpCLqKϥjb̥Qaպ ӴBLWJ0naSPz/$LnC@%"Pp]Sݴb!_x Vw*5I"ppkWk}1x8:Yb?L` eNV5h~hBґRES/O[ټbeI=,b7G0ĮW+дb*S)QtZr& ~#粠~s N\-/qzj{p2FM*2r/-?f"s+y(#FJb㸶ܯ=In@502U1Gqs)yQދ٫=V\X|h@f\7^#ݒE{d$RT#`K}zFy+S.>bݪ&ƞLo^+ǫ(]i,F౹ϓ=Daެt#CI_3CɫLUjpF~sHT'R0d;4ubQ!T g Osw{u2oXk`Q?$2 } sX+FtBpoLZb)Uu"xh[;"'_#kݏ" &ۃFH`a隀^9NIiAs䑃ς e%ȡgjђF("m6Y/, {G.mYXsBY+ݠD 8تO1LiplD˜O}ZFD.$D)F(dk3xRC~5"aaudycF+Fy?n0J>+zu$%P3%pơ GnJ2 +ņZ>,J~!\8hʾRkbW˺#{2a2 X}ftɞ 6s2 PՒX֦Yb!PePZ},IXEkD{<ܽ{4 P\DjqG O?+ܲՑia4ߛgF!ZѻXkuQ#Q92J~lC5|H`LUZh}4!Tu2鴥Gͨd{V{}*5qe*&+W"j"IpG[wcImD;pm([JRzGy?2n^l!Eetήw<\ݏ%ٕm_<|XnF?QiE\Ga BG"S)xpP[k5ŽIU~]D#eS_hJx{ _0Un"t﵊Z24hr>ԯJiܟ57v[q^K*-耨6s.9G&!I!D>qT\)-Lxf.)!s’CyNu7 Lzn5 ^Ϲb+#v8m,)&LG :|9NVtF̀s{:fVE|xl%U#g{Sdp.k.Ŗ/1L*8 ۸$,HFRBJ `Ёi:$F78(3!bpjZ,(pp4\\Yi}رȔD_)zђQ+(tMZgtܶ.,WR`Y!A,YU3ਡe*93Jb8z!wy DO:`pho'h`5qCճI^H0Ɲzfw8GmƾY63lTOA@P9KKH*$67]܄WFKOUT~{pĤ;Q& 'g%$r>Jm?nr37\450g-?1=5A%T.Vn2zb~$wRtQVaLռ5D'2'5v`6̌̐A\>t Q*1[d7+F8ѢT%xCxP{bhv`Ď i0svi6|ǟOs-J̉9!O +cWaata>z嶫4Ya\?o"&`͛D,k yےIU,V \:|+'EJ:?#d]ᯝw ߊ29LzLlS)7m@\!b= mOTL$impN-.Gu=5i# {ٗef!zcL0}-~;ŷڙW9BC!)5%eC2'U<umjV3I]TKz؟ݴF&ۅϤ@ d@|l˴4ïI|S|߿ի̡ܵ0E:ח(*UJfOOD89N lSq|Z´~b^R=.O5b=Z&W3%A +}D/N>aA l ;*`-mM-'ZQJ8jK/lV#Cnϛôq(=!:Pg( ^޻Hy3f@ I{7GfE`qڷ gD}B-زgbp?Hx "7 T_ga v֧Gt!kFʽ՚5Վ ԼW6ekVqv@!}')0][05%fp ' Ϙvh6u0E/oDv6%i1F1=/T:޶ 8<,#fH2f߱2@C}Z+&6LN5+YL[RmjKUFr,y:GJFSDb_|_c#[BchvpM12nd٦l%Bl,ϣӲHr,bh%/\J5%gRgR}?Bq`>.{Sm;BiM\@ֶ#B9樇̳ &p6\Q]yd0hkV;~!~"LZv.o|)QA&+Fw|XH-]$>%L $Xq4pm%]+"9\ovIF_]eplR|я/Pmu'u=Jic/~c3^V2,XpɗtX) WqR{SkM\kbI@[g S*hGCfĦPIiUWW4n|oFZ:vE -yEt~#M>"Fџg/!@p5"Ī7٘>X'z[}$ii"! &8x胾Z+gh%a'Uw3`꟡T+S5Z'nJ0%}oKl0s#i@MP=NhKj|m4%C\NTb@6wG%RbzU "we~OD ]R.C{Py2)M7SudW3"b09{IpPJP –Gq!9\{>a^ISvFvj'тִ`=܃Qd >CT(!/ 2BH!@!n;C9NPy6f0."w=3QU&!$CkK/baYZ+Ħjj|jl:A7˪⇾n8^${_sg(rnf?EIUȕc!3cx4)/g|_qJ >2~KueNAF?X@PzMOMez`)TKmԜҼ3n ͚AqޱazFLm8r6\6QIbV`ehYFPt9_+x[>ꗇ"/MzHQ /X܃EU5Y13 j: TCOW`JTR,NR}9`]B5\se}bY(˸{ v6TIO{mdoA6YOBvvR'uXs2{o{d`?no467=NxC g+ңlGؔJzn'{" 6Jy7-c>W=) 9e3E68sTP@.s n;5)|QOLM!ڣPfn\ya\)v⳼ͤvY &j9 y5 Ap${ˤ::И.mvTBN ,zΩN~˅[|S=o9ޮ`i^DΪ[J,! sCت韋?ix3D-w&OCgI)!g`()pÞe4M}8|^E-tr%@ *X Nx?)P??صл-!0 ϮD)ax5#*qn`zFӧ! ]ase${p=S% OTceXy2*uUԅ !v%(v"'*wdx@(ȀȲ?\`5k2n0#H*D̸gahH./<=&qfiCVⅾ L6`]QIǃr'p/NIG8Y C9 wղ>ٵgm$@(Z=ihal I ~pCk3ê 鹌cV c*3"2MZuE?ϔYTU1S~kFb?'_pk!=ݒ;zZv4Mը(Abp/u^"q嗫) щMƨ%K2*}ZɺYˬ!yo;2uDinݺ Ì4 _M ]vt)^4 EVx;Rt^PGxE)R Yyr2ot oԹҕmTD|& :%@QUnk k̢|4RQ 6k;oVh$vLlWbwu;pS[ݜBI`VXP20Fx!q MY &ɞ8?[='\O FիÄ8e0'Wt`r)pqe/<U8iДֽ-XodJNPW.jM3d8>+u7V~ln+xM_e.t 4ZĆLknh  l+_-ez)"I pvo:"#n'E Z`z0W?z fH&)kCc.* !or(ZaW<&.I0hEKؽR/^c@21xRD*DTmqSᣝX㷃 jU󸢌i׆$8:U(ΖhRii52?YBT꟱QptdV%|2w) .bX+wCPَ٫>ܡK]]H⺪Mmto^M?t$kHY1X&- jY6WZ%1NtU0o\N5u}@ KYANw|>my$V!ATX L*<пcu+R 9{ܻ@u2 Ӈza!NɎ?9hM6a Ghߎ2L"#%$p5xlj<3d`ZyͰq|B駟ou;j}/>&ϼGˎ2o@xܻ`2}DP>qkN;C[F<:~jL>.uK@3gb`7D؇m~ׯv iSHڱT9OJr_[IqQR_aORDjӍQ.Z?қ$km0S/%9Ę?{pN>x~yZ,QO-٥凥o~+ O5BΎJ^ܥBhU9.|bzoe54W=)pY-U%HA;z#1Uݐa#)1,%`,I>6l0uʪ@/(Q74\;.[KC`?{y1N׸3iJPb9jw΋ O6>%Q^Цk[k90]~j ֓YiVS%&| #j)׼˩ e-oլ٘X ]# /e-EE܈:(Bo9XGT7(+cQC4w X}'Ch'$aķYsVBjr s׳~rI/~ޯi]gJuȱ8w&/C~:X8€IOj FwR `"c[5GӺw,zB̄vj,.+6Mgm;»wy(AUߡ/r3w%vwew*n58l$Z=T1rsdb/WBJ>IQ+u(U4żp.SnWsu aFC4JvM(=-w YI6-|$oc X/R)Tk6Hn/bY㷼V>^ltXM͸f>v\7*!D^ ZX#e3Pnw>ERNC[GУ%Balǧߑim i6bXw &6[<-AiPBDdl5kht-f93>qC-O s>ark PV+mUx*>^э܏RP^e>.S@6BXaMd  l#]6([{EeL(2#鲗?ᆈvעh "/̿/ySU: >x9tPFlα*\)K>K%Y NDi ?l_PTFz5ʫgxq RÆǷ[*҉}ALۂs/\ʜDM#y/Xdvx!o*3;mgț H &~bD"Ilނיwp""ͧi8Ns,Dg-!!wu&jPjTZHůB #fS0 kc"jr.̃:09]?I@lNUg Ϣqb0fg7i41Zg6:o3[` Y9X({ WP*W,zqU_$S ɈP-c'd f O˳;\WĊO*FI!sXj3unjn͈68)B/`0#D臼z@Salp_>̃*_KV$> vd \Loˑ^CPSJ&&S_~ny41 ՏwCটqb2VKML){d`2”dYŽވCę{dސ db6M8Z"牮~ctk@pwD*\QwxFOlFRX 1Nl)ozz e֋҅wRi(9 K<4]AE3-8 j1.n1Bʙj愚{ 9 e+6Mwz@ [z.nLDJ#pEtwax tplb#M 2p7[a[ʫns\*%mkFd Ϡsh$)oNO]ͧH\xtv2x 9am~4|%;0 ]=tp$Rf(UY>r `S.Pzfru%-Vy=xZIP p=t\Ɓz*8r  R@,G+ŸHi)-) B QV) ? YKBϧXrAݏ2:ܼ;9v^вaH[zW&%)~b_o {nUEfC3BzM?y= Lg1lsV> MIn @nuws7 e [$IaoKa /GÔr4{}|$s ZK?ȫ4Mu+Q?dvV3tn((Or#.v t{}aw檑MLM[p,;?+oNRe]/42JOz̪xzha&_O|iOmJ7оaOsxpx)Cm4\E|4`I{Z HTJ )Ą W,0+ed00lc?D -;o{rHJgB,kvE{Ϫ*^q<$J%P| H@[”.xic_o^Jalb6&zQ#+"bfM bqҚAtw\$J'reLMws,mQׁ";Nh[DFwOxKv63/̻JWyri ?N2'Y=c+|- 0!(7GN0/ AS"0K-$in֣w'[']W:'G2Nsy\@MonPd`=>QT9@ m\'DZ[yDy=JϱaM \椕"OJo lW&|꺲;ᐟ9K%buE1n;Gf^yzÏtԏ`NL" FYRPUw04co' f|!>Z(+329%8)I735N'3:#1K;aWRݡvTzMrJ ^󖷖XcD_QJIRئ{ 6AX ck& Ш-E0/qC*g @fF\ג1]GR+bK _¹}Ih)˘pKQ̀YǖL;X;FHrH]Hh=O!_@ߘl֨wwQ͖@ˆۏdzwҁ3qq$j'+wpDKJ\VK1s?'gz&4f MBk|>H$̝c^_<@鳯TA!8nnj1 6'fU%gb $U5=J ھ Hzdb'I<A55jJj"rSc~ MmH?8T,gmRwc+LTrrQ ɇ-YxNO-}.9)"Qpj2ҽ4b{G ci >ahlI Ϳmr(^+R:9|2i ?B!Mo]w\&i*v|2ɓv0dP=T86LOcUSURs(7h;9ymm$Y ڊI29s bE ĮJoH͕.a댹o*H/hvb f 2/ b'Ahim};jO _/ D\ @yR}4qN6Y X[-~)oEYn~`c.EB};OI y^3,Fv!&BBuuZ oaV7fϩe]+~lMPUUم FaJ R_-r$]dyLKQu|1{/e-*oe]<dd+*pL7yNJFS `ß'27SD..Aȷ8 XJ͆CBe;6xq]IMb lIIH'FtƬC/[t]t#(t_B!Jv{L߲,[Wk ؑ@Փp[ "َZa;0Oʭ"K? 4yn2cOIq=TZ Y av^v> Pu8zOɜ29(jt&whwfCbkGꑅ^")'5'qM6/&;isԗam|![ JR}[oM('xtW=m ;iv^6 xt8d$)V[4|hn1P#qu^*eAEl^C-wE)+غ1z>1o}XT~-Y?O!EOAf-#.R fӓ`aYۈZ,/C)3֞Bf/M'g@k)PqE?r/nO)[ W6R.tΕ:'ܚ  W"yE:#uP@kXAh 4=ɫV,v'-x5>HI''T}op+oQQ;"Uw`]Qyv/DMkcCzxhօiIJ'. |wVRA#.xK}|~IESqufb^BWa\V#Zњ6*nkd̄iAoT Om$<x "zݴC$Аć8nxj GePWC8 #xH!q.e@k'Z^.0J)i+xߨ*,489gDGzCoMR=ySYVW)%PN+fԣ~,A;tLZ7`P:A.\PNJf&L of|/0`μ/̝֩Vd(<;D{F\DP݌dQx!~~ 79=#OٺkQӍ?-V_Ǘ7%!7`2cb b>R[锯CPl‘EsC~ڷh^%iHm6Y"@q/5mm\/M7 ԛho1~\~<-߷mRQa*6#}uG|ZB`R bFVgSz<3{ibJFMZ<-]Cj5?J.#A]ġhO - ԑC) WI9MlP/,ݤD Y^%w eI!O6/-y`K,[!KbJٙS6^`blan4IF 'u?yں~"d$E:y$[ꦠJ`Hcht오i̔3VA2'`hF[#4 r6O.Nb;PqSzǼnEKL(L##Q_y5_qb XMCk@ [\Vf̺Y W7/B~];ڊ8h@;s]bm(_(Y6ðbF<%CE+ׁ*,_KRT224l'7L9W2S!s5B{rw"l+$Cee0ϰ62[vg4mI8QSQM5^SO lp+cQalH1G!`z,a! b2W;FLhJ6a 8*`q_0^C*oi\pWX)1aDf`^pn C aڡk~i f:?Р/O{iRe eq͐V#؍T/t)T٥䖸KT_U$Ԧt/S]yʍQOwIk6\u _Mw}Hz;z+aRB{f{㘼aUZ 5qw5T8_FI t9M Vl:uOzRk[61rY 9 D4BeH?l#9LS99qubs; }uoh4JCS-jzyRƞKI;{Ju2&&l 2$gR;![3Ikjy]w}'Jr g+@u\UQ]0^OJ8Mz'')/iaBDI]|i-;TD?|#ligV&=ޥ!bH.Z?CeO+DU9B c`6Eehg=YqJ-m(B6ZxF Ey :՞$ Lc[:#쪇,͏=g#%\q|QrFm?y!)d:A^Di suB)-Or;O(99z\.j5d(d[i!;:(ף2Oʿ&:x3s%>ʇB J z\ϙξ=;~4-iVҽ(qxy MUɕir Sd0ɵo2'}aCAwV@ rȚh;fO,ެ~Ω*hrrZݡ+Z)cܪEJVDfpf._zu1Qa*| G ۹|W=,˾$R7;yI*Nv"%N8m-X\4y~e#4w 7q ۧ U"_=K 7!a^y >F-rw:ȧ;+9LZY.*El:@ )n=ˎ>RDՠ f eKRHOXiR/{-Tkf$t,b B=x7msy8{IWV ; r@™Oa9&[DEDL2fUL>'^( o(YZr`Sv\kdrZSGLx]) H` U hLAΓ|>i!aKy}wlrLKbd1hT hSٿD6Cd):f-40'!wRJlj&SQ? SE_}7vxXU~fBw%l&~*,,0I0|*-$=DTUm!c%ydtUѿ'+/B&jo˸\eBhINWJkqBQ͉8F }S2=w,X# =X- J3jYt:|mΨRA[StE Y"fc YlKD ?~f,P7[-xuii+*$p;R=z oc7\f,|0LG?efFANQC{S|gȞ4Y>y6:mOXρ]5$ зDǏYuG2`3i`7a2'#b+ꘜަ>%2%W]w˩fhf|_VٶoTшSݟʸdfO{ WK,3LXξMIZ֢(04QT mi") $MxYvύ'xdW=JdMX|SmE*3m뺻 M!gb>Di,|N|\'C_a.a>%Y17=^.t\'C $^ܭHm9y߂wkPz@\ 4q0.@V$ kQn_X}26'=goٹ^~Ew.} /zcյ-#'<S`n1nUI;qQ5i`6D3$M>6ΐ5X<*\I\KIıoI=?Xp &H۸?CCp擧k{]`hy$ eqoAnVjV$FpV|=u31nB!ih'/[,%!\hcē@mf5*6o8R㻳.KfxYE%KI|9p)}XqϜÃ;8fP"#\XQ`5ǓoB)섆ZZf3Uv>ބ;񣹫Ƣzr!D\ϻІrK5=~t[gFJmax\7}$Rm7U2~Nt=B$`@nrԙ0UױhR6~ۀ{'eX+@НaWAf!/xv"bS wp,!\!0\+V&6ҏ5냯G1k!Q6fQ6abucny)ch~!j4|aV-L ʎVqi6UU;?$1#ۜv'ac% >gs¸tzQr15a(M~/Ŕmh "1P`?(p!VR_0mi|qOkI!TobJCPG<͂]\|DJ PyCt|zE{WҞT\/%V^ oMyo[dy -Bob?udT>nbE?SlG)]#PN_E[ǫXM`OALcP ;IJav{ (U{^oS3MD%xVFgPMIR7\y' 4 v_J؂@8L-Ӫ?di6%ɮӋ۰DPg@o;Q9OUƧaqqLK1`),sGF<۴%dxdzQ@B)! r\F3E~R8 Q8<6█a:X *Yj +<~[qh WF"`|'ͧV_#덋ϊ;% ny8 4u秠#n&S݂2Z@Wb j _Y{0Hp.f0k%$VglcW8SL+'WÚh\HЈNݣgI5gL' Tţ>@Qf斣`!%Fj_zpBUC ލGsF5M  y?w ؿ(y'l //:%uZhݰusԹt^͝pV6|TF$Kw!vV ;iԓ(gI~\4,Ű M"tD:qnSE,Y1zYv+Gu_7@jJZ98rPN!OêH/Y#|A3jԂ&4o]Q5|(v1,4i.`>doH/15EDxbQe,oz٨b ;n4ٗNMW)a] I=c#Op jݷd'}geWx 5woW5viu{sMFG#i2L,!L39rrUkRkO]dΗ*IQSdn^:֮g#sW2uMa]YZ.89)"o$_"$L܄Mr=i@KBA6 6ca'K8P蛋o|a1ƈbi ^. Uy^8bv# Z΢QkC h/j;< &e_ciEbc8'kMqܸ`p)AewvC[ 7G[9:h$i;ŋ:aU$+7;X`MK+c]ڧ 4 ɦ2|^Y"%(FϐѠγւ󿏔*OfD8$B@)H}m?7J@O`~H5!@nz53Fw.,B$~6Л*3-́}@stWsX|kgNsB~ kU:L 19`6:{Zo*GLj]iCU .2l]+WTDc@n;uKUSLȐj*+v:q=ip_NVH:Z8@Uvre|GVIagCA~nx*o)Ynn")t 7x=]=ﻄ?vBBՒ٘l}dD'Bd# ; $M*ںZ0I< 1ϿZ8+mG;AoԵ>m ٰN-FMpvܦs3eOXBz:>;?!?,;ӹw>M W )`(uby$t>xKlA: ]'1W)@tJ㙝$i#fy&#iō* Cp {ic @HFe`Kע>c_و19y.-zvjP''D5-7~K< d߄Sw2\sqR\\DPEH?v7Φ&-w^Gv,g6Ǩ2|wh ÊîLU__"Жgoj5 Ìcq "MiF ez s;'KI b$RHd eG6,AԖ O?5&Ĭ"S%%J".&5oD|[5V.b`S.D犇]<#ENb. ^麂zD#zJh}e8e oEOUr֋3UvU!Z^)A:5{k*^f:KV|+ƒ9_Ч;' c`vBp-gfϧzlEK![>~[\րw,J0o9nȄ!Vc&iJ&]>uZߍæRҒc M_$)WA{^"L#pƞӬ+0Zn^&sSÍ/,c nƳ*s2Px(jV+w1?B9T̀RAІPnt9!{%\<,`7* BB|7is(4)OpD /Y٩v[j_qoUs92NR @ߙdy{ [#`Xd[12 axyc6ԾA@̱t5&jl8tnWXϛE2=ũCWO rEc‘ x2{vQnqN匢U:P  Y DaL95hLB춨G0<,9q$a9W-PMOt+ k/A4r]mVdD& +BJO{g~Wq<3#qRG#g۽ # p\ɚwhl_CYi^-cevO^1~;7Sp R7 ӶV =Cu$>&J ӥ(~JAFJ{U{QHpгj=G&b\["hF'+C*R6H{46&+=lR#É0?T }iL))>#VMF g?vB)*V(' XAл6' 'ڵ:m9H?0d ݺl0\1,IoepZ}*|@#JZ Pn>娮H 1ư9.=vgգU[vgH(vK]ns3_'|LX!(UjH PSlCEz/D歹NHÆ.&,DjE0uxBIƾ?.ec -Sp\K`%Zk:,Omo {֍"]J<>AB(| Aiˈ/XDJ' {D]tMz&}pW̓^(lxC򴬫JBQ_b.\2 WCu?+NIIs7Df,qT]zӫma;&Rw k-4BT0ϼkبxY, Cg;ږhu[$1 `9B'4iNs}[^HV" _(kOɢ-PXs萙d <6PN ̝A IBoz{<^#anN|  ϱJm*-K#f?JC ~{iX<5V/C#i@3),ryXl6lۜ))Z9uyviLmo%G\;$33ϓ54F-d AɫJ/hdPmX[d5Gt`Vxpmy[9l60/t &E |cN > MHbzT&b٥Y.1ϋ>P(I_zf̊ðQ8 UrpFz3eAvTR".E-,ԇyI_yCl,xv] x⥒ӈ\kS*t l|7SU%Nnk>ä.h8>QNE:{r@*B~ NK-ꡈ|bs*[qG,;3myf^}J|oͻ90Sq, a wy<ú=rHf V<PL''REV \e_`aʦ}?7ocѿâc%4A%' cifQm$`|?=MKDO㏏1wo H^AHto_zf?YE-^nKX;D/!pcn( XJbzݼ!skY31j@'1J7u؁"Ɠt#~2-1"BJ= _…0&[-PƋ+=>W܂>@IgS~?8Wny:`xl~ W1o0 Lǩ9$劝JN~fڌm;&择0t dO UT?1t)!ycEwI(nSTbZKF%ݨ羧j?6BMMk};*Xyln95('H%# 8 2E>Wh"v8e8>-iG%*t8-!zy% Nr$7*C9}bM~-E}+^qKU2Jse{c~_^MqnA$o#u'\yD-e9=m̟/Gx;3'r-NC2b֯n}U(f)-P&΍[HdiA Xuz\3ݑY 8g ^a>\51/`jݿ*d (B)lD$rD|Xꌠ_ws;L͢’1/5`Y-~Ci|ѱ% ϔa紳֔^)ՃGH.JH'?CJ"fS;r)H vZT$jڈE0-:>d)sLiV3XUJ@of!@5mhe7܋_ʴ'VZJ$R Utlgjul0F\a0)e\<}>L8Txbݫt[OK u~?]5igi)0yʺĽٚ-yu f-@:\k~`7+ݩ 3FG%>+iIJٲmZS{ 洲,¡VJ E\˩Vt2cˢf˙,6xZ> .M#Ɍ> ﱣ[E?*5*buD}fB1NP-ZQ0V+#|K/$ˈ,7d]0J@ܬF />Նʌq4!#lJ ?SdD! Lmk<V>6Cʷ(iakeA ԟޙFٓm@5=:Bstbο GX 0=$"/HfcBp!f?H\}ڢ!x*M (gW+-._pvLc&g$t-k1r*앮XXl.2oPB͠s8xvcN%9phL}An OrફG^Y։eh s=?r.Q1G k?P2b H{G:euiôJN %}R  _4)-;_ݳt.:|FQl~LR "08C'YQl־hJV#Lz_`IuʸZ\8#{Ο_[SM/5LgD<卖}3\+!z#E]WMc`j} tk$O܏EqKDVmH:yz1"2K,# z\ɔМ la.5\z(<=BYVH۱D6W=7ThH-wXVY -S58u0ߠawz'}hN~B6]7*z<0=F.#f|ԩ}7>OkĄOn9p_}n/N/!zfMqA$0dE]YdcpIAJqnN^Ų7>70/(wz+k>Hu\̓ d{:}EwgNQ,9&O/Sj9YUM~xu fm4q.EryJm4 \N^##Np!mQ,$5.ڄvd lՃ?^Xf:-w3u}&`\FɡIZ#B%ʨ%0r:So!WDSLgveUܟ~6& GF|.ģ)?c>dEމit=ikT\ &[8*Q$8\UTW 1pTkVPmnGJ_-MyѴ2}s~&j2V*<&Ā ĖW 灩"ͷ Jn @N-5xb' %ncdLͳwz]8¢{3Tp1'?ԫ~i3$ea~%CywȈW _XfEʙW9}YfmwǧJM48 T`,hV~u%K*n3@>!}|ʰI5 z *=%Ժᘏ,cȧmOl^"-0oBXu*7Wt/jP ${ BٜY[ 8EʌX0੏fLUׅҠtIvuq|n55)gy 7wxJ xuǟZqtn@ֹ|GH5fc% 6J43^vp 9$״Yg>X 1" ̎UlpeV o?0N<#/grȿ 3>qFeX^*3`gD?qC+\Ad.s6"N퀵r''왠sVOp"ySP.χA4|Rujugy̎bwWMBLs.Y UK^neJ$!^N90b;mC҄;zN,{V>V]m~ᰅH+̀/AV~T3$:jl4RT,&鶐a fbRϘpFlU:zmE;!&Z+ Mסuk$v:vM#nDm{g<i}S{6ci\%t5硏 7hG73/v.WAsm;Lԋ 04`(=z`ÛqOWtt(mz1{e/eyMз%ҿ|v*ȡ"McyeŖpSF 3V;ݰ9ˮͤe)'q)RES>q^B:Y$[ѐAb].;I:߳hxKo2\Pnpf2 ZX _j9djFws줓J^"oaGxi< Ach}6NF[aFaQ OT|NK2s*NӏD`Ջ|ۄU#=+aY. f0aɊ-@ ;CRGip$hy/^xZe|T9\v@Vy/0|ٕL }) 7tZ{$ZϚ;Qq +Z2>_P>./c=f9ă\=Gd>m7ׄ%/le.ξ,W2;b:W\7v,f,_`Aѯ^ I4j:/\;&xA8B*_H HYV#<;-:? ͧNEiɕJIIuQjILg(l'yr;QJ@EAeж/JyH|.aJa2݋$N5umoF09NEk|z 7j&i,^p.1g9c􊉴1;Qf69WnСKEϲ|86X(h[~UdS?P"]v*V#&6&ծ;VO$f1yy J~ ^MDH=^hGHlK[o@x ˉ@t.0FXqLa#);bZ.(ޢV?k꽭4Cl$b! r-Ģx˼JhK”؎E8Pzecc2X"H OûYcMI NIx}l'iE8:DL"z.K7${ ~Zca"tՠw fԏ9AI 7-_?ulLEjH&I =?TV'sdeH2t=ɨqvޔ]dZ.N7Һ po؟/`5&z(¢('ǦDHb|}*ay "dljp"ʌ;w^W]+i4! 2 *!Ȱ v Jm_{:b(neAF'1$'Fc!؞ T)Mb`7sZ#vT?²͠?EjsC~gVV9I4vEݟ̓k)/tB8Y gmى"=Lv#ktnPNtam }P`u2AG2=ζ@Ŭ]i0 qeLeR9'BեbY0!.qbSr|sx׌?J|7QEbEZEa45#UdOh r(\39))_ot*0}?)]IE=P%M-[!4k>Vv $otz„Aч>bT?ЂY_. s:#>2CxE5;7lN@"!4w7G,hME"&ڬejh.yJ.GW<{m!_!piE `m zKJPySwquA` 6ǃdw}yp9-̃2E)ߏ8`c2/К$eݲLYQ~_ )YorcWSIiH"ƣ;Ӽ=b̓j=Pht`5^YG&&Yx<CWWk0#ؘ Ö^.xjDt^ >&4*ܮﲪlW5i5p[Lc閦w{հ0oV}?<h#2E`un+fl-ժ.pgLY+ bk Z݊ŭDH͛^;,%&#ZCQ?M9-CZ`{pZ6'8 : #^86Tvپ#)r۸Sd\iz*͗(Зzx]r֫i{ 'RIjL^(ӌ^φ`iH[؀} 7xo:SvdA`wqR n%Mqv҅\|nm t|aoY S>7%{vD#+: S)J':4֕;j8kA+x3zXDT."]]ni}LSZ%G)/VCXC% ^]>">hc[ZݏR-w(唟;~rFfuX M' LȣϠL0*JwդG) 2lh3pkLp^r ` @'YKcT ~yg2C$tl{7u\_6LLzZk(\kzM_-mMpۧ|_9I1H+"{vIv>}''6b1.z|*O+<;x9h2$gY޷?Kğ*NUFuKA} GAx^4`B},TKj]AH:7_y~<}&աp38%Kz f(D++Qlaٞz}an `b.'((?ZEysjHR,AGͳ~)gkECHˤlty֩TlP =; g:)ՂolSMuKTIķێz3}1ڏi iin/̖ kS`!0ˬ(]PJ&Ȇ8eÛ! ߾e"`.BSٕ-ad4*c]QHO X瀜}vCqDF4>K[p+yٸ>b܅zǫhVNw}J\ `E nl3Ar pgUFbJB9Vh&y ĺ}L(0>5^DU.)%?w}jQVZvzsU]gDx)wdtr„A:X7@{b{ *ΕRojwR6?uYi#˃OɵBгGm(s)Nu[FN)H.[ yARe^^ҙ"ǧuElG! 'z J%5h^l8ゐ u>Ϭ#72/)ߘXkLOe\m|y3a" ;6)-"#3(IFb?I eA1Ln>HlppwHP ~Dgƺž%y~lfU7TdE><v6f)nio! dU2DhF7Ud~7+P ={!+PȎwVfީŎj. 0-:`! B>^t$Bnr!"jH0 2~jnEVm)첯 1%u|ɬoHZҝeowM$d48.nxӦ%I"@} 5cW],jBƌܗ~Z K/vtSyo+@Ћ:al@_kFy ;㪜үq 7ƇcZu/)?ěG[YO5relrߺ\!7=M<'Je 5ۓ1gW.=V)(.\u^qD LI7R Hhdڶ yEexbESꆜh}Y] &D>ob#B1xחaM|kb35`E֐۝er,dV&&kf"!۲c~oPH,+IpLTb&@xX`io:6W\ҁ~hՕ/^$.+!3zEx}u1׷{Ծ11C]yl`D%0 V_* Y=yyL{Cݧi41@>7q) ~lI}`#kp>*+XdGaқ4c ÁRvH&Ga5:g%|e^lYPK/wr; +#[lnM=l jKib,+RXi\W< "[ &Y6Zy5C 39304 Εd(HqŹչHim铝wjv+k\jl?[t4;u/y_ {MOe8gx>"76H@;NG04vAa,cxDsARuBVKZH53@{Bu(~clٰVJ6n'XtVsM]7`Q52s,,'Qo.Rڽ Ň+Ή("-:~)Uɷo˰.,0?M~URu%C]10b Sb'N-d crY2-֟&4ؓRH-K~!0T2?jZiM_vFEש/ o+_ڍ Ar4҈~<&ئR>A_f#6d-l ;\HS&!Wefva^™B _0, RtK!d2mi5?f(7+Eb+'=YwǗCK^ șu*; qJ®i S.cSd]{(/'_pxX4XqB]43YU7K1vє{ 9gnN@1Usk FMFC'3 [2/6].@2(ړ jvFܫ_JwB_ bP"t LIu>.*&A8uFAf u&]8K8_;-ZqAѡ2=!X̕4-m+ATfwJ֎!Y7"TU96'rL~%Mp6_6A=*=rj[aB{aEe˿{UH2'u|8>~M_ BZk$v~$T ʯ[FJFS BsToHɹ\rrB!oHF H2=^ #.J<8  V(X2ۻ~ذ0_9?A mPe,DK%C-n>rF[#J{qpK%)n8`@,$fɹll>[g 4p Q qePUf 'qk*`qz#ͅd5c NB~r܈Et~|;KPZ^= =g֯ \A\#eYP(n=wv-I(GIX[.}]w揬(z+f:fLegUDzLY#XrYzj28)QLp@ k,h<?ki*3(#Y뭨yիG[t\ m%t)Feנ( `q)T2V 6;:KNn6':iDAz/:OԶĖB'ӈ5$J`:~}bwF$ؙldˑl3cMw#/1}Un_;=,-O c2x9t+OKzA1}̩1}B?' Ӥœ͟T- mmF&ߧE .kdy56ݯ=D>\ǶE6+<ZJ|ōl~GS3Tl CsŇ vʤ? ^ȩK\͵6:8dذ˒vHO9EuȞ셓`iq׶qDY}5K| }uCR%_|թq[oSS eR5$VWsÙcNбIq(P%=̴o{?k#g\-"$)f Yx6F,c:!xu7Tp 縎/54j.QTh_BZʸ@­KAye$݈/"ˊ6G.)y,T !9U ba8"}M Б3k[Z j*,r̥RNt32~!qղ ӗ퐕cSk!bm24X+ ٲ| `SB@{ YHɅ(Ld ŏ .`Coy(N]$!ߊjDX~=̈́w2e{KUI~ 6ԅ?- ;2]$箴4ߧjǪ2ψn n7O6n$SVy-7B&>v7qEό%׶~W eghZVlfC23Έ;:i71>!Kd)SfZHl7IA9 7dbzC<مHs:Ϯ`&>~QQ<0>~ODSMV'dvTCirY|qW6L4otC5? F{gI, @<1c6ޅ32i3 ul1q\JI k^dJ}x/FK?G0HeWtj\P̏T~Q,6ݺ^r'wUV*xq)[;{cuT d0BS$!jȋޘl,=v=DSN'uBYhB}Fo"J;X]!K+@lz)m{λ1A6}Y&NJuxל%3n$Cw-g}X5ϥ 2-HvP1~(H gECC. =9rө=TOy%y>Խ0xsό YNFd;0U:o$$QS)9k|SHQ#ktص,#L# d&o3qTrA؅ܰkOYf 1zm5C$kC.$]XmjN5*6r,X,. .AP<|9eKoa,S!ՈFqFFk%JZ*ّNopaa0(@:' lRd7B:ڈƇSMm뇁}"B{ᱩkŝW+)ZIv@*a'D!0@ׅ5W5w:^KpŠKh=ab0S~: )*3HHhȑ ;2̣Ŗ~4W^3Piae$LJ$)! )ܺ6+0)Ǎ7?2jʿu>-nwT ƇփaםB7pXTtl|nԁi,Uߓ;ʣgtY'1 #[XfH> UpxH;  dup8۾v8fOA_̹`( H`6;ZcB.Cۤv R ?Z<XV+oI\ݱvMMu}ZNqcxRD%a{F£4] ~ËB_D]S:wDb0I;Sa`N3[1t{]aj"z:{"SWx=V< VwpGD`;hZSR!C 0L$gp ;4R04PsM)mtA 9) K4r٢| 찊`]֞OAn+\@E#Pe-0 6&hDF}#G0?Lԋ 7'I=¢ b!QCcyJx^N#I+"ˤާ펩ȉXDIbyɤU,b+\(V[zr+ rK_p P-' cs8aL0 (S dxcQ{AJ=CBi q쓷ezE^"yT!с"[_2J$aw(EÄWְU?I2.d݀6$KΤ 2*o iKM@7|d ۧuN$$J|3OHaDGXMcECTTug{v}kԫ,M6a%A,, ^f~&X)F9R+/Ymu"U},g^η^>J|Pks0MH밙?)y ؎ zI_ڌ(Y?OL/JFh52ruv،y,)帄q۩K` L9)qޮVܤ$ y Ra,i膰]ėѿ{'.&ůmzHUb Pt7lQj'П^0{" U kP(gt=2y U>2W)BdWl-?o!z*8*M ^vhȓ;7EY ۝UTמ+K+QmRM{DItU*.ACZS::Է\é*h11 2dw8y}HBpcʣ(Y0܀@f`xJ0 >RSLQ+oAa]Z? J-ϵr+nm3>ႅ.0;\oRc@'vAXƐ:{;x*&#Z%+Rd(;^ MA[.U }pD/<`wۉ77$,m4;rT)mW~aP,P&XB8 T%4Us4I:toSios%2tm3fKe޵Ae_P%߼0 ˯"S @ Yj [W>}>}ѓ!RV Eƿ\@ݭXa-91&T-rQ֏VXszc*`;5zf"X>'eד)HB cMm~5|G-#޿h?ɗZUt/W8p7d^ GU<&Ͱ7:Y|d~ v˲u>% =U):玨oMGRev0&~) =m,b/cJ('^Iyݞ-YеjE c~>3x) qǢ?Jnk|6aw s_Bw@iP%œ [wE aU&%]5Vϒ|]XΣ jQR6l|ta>F=s   H_ sɁt<6gcI^x…uJ:s9,gm9VԦdF|4Xkݕ.xNJB۹ * M)/@N(_#nAƻ2C7^%D,; 4PHNoΐnTZa +ruC^n½[l Ҡ%jO:1$yQR_ ϤFB}8V2g\$Y1#]> )ʏ߃Ȱ﨟#VBæ R;s` 9& db_;d] {"0ciI/Lg:YV+1Jeo$JUr{vDWr緄ǷfE7v/mx]"Hcw"LRbTV&>"zlxƢ'rUJu;aȒ[D֖P#Щ?ߟ=jA,底-ZOW"kme,e#8 i0T(I&C%Kq.iՄ]@j !=ujUc rdŝŶ$}AHe÷I\$FW+$(~$ y,=u6X dxII`Pw=%}IlH<ͦR])l=AIkJQ<ŌcàG??$*%v x+!yԡ9 {T{!Fh<ì}E ݔ3g/׿E ּ*SykY ]1. 0 `OKڋ>#D։u;XN'@IVo??ٔ%z[ pl'wEv잡DyqYJ='G+EOXN8On/({?t<޳̊,U4;*٭|M k YtEF|I}"U(ţ7lfJo0owhĺcwm)\<ƘR^q/C'LJ9( GMeO{3܋Lqd y|-&[uHFWɍLXG'Āk]!MTy%V剿i"(]V2JX5˘)8ۍbWb&eK‹3;L8SO#)fQ'5tO[;L` s>yұbgcSeUdL“:x|74qvꇫcFz4YV5Z ⿵ʐtKW`:Z1`;{g:js1Ĵm(kF YW>S [SS7mqqk J?UgL<<(_ՎGUf%jU c oÃ!4PROQ u ۥ׷}E!3h$ƀ}Q jXSB<9*!w6US/d '+ͳBgv? o-d mDJ|ޖc6h dnё>x.$Hƥ8NA-f)+>ϖ~ /hNP/3L-l٫tJ/%̵ዧxXW u{ojU/U #cf:PzXPC$vW7F6}!Qʇ B|LkQ=K7ha(17_j_/Ԗܐu'`.W|d3Sr[*= ju{aD!Nj:A8 .8k.شhCR*iQ3.w $T^c˜ᡫ\EEnZ d㜔vy /q"L:5( +vIM-T6N JM)+]R!u6y趎(ldBAuĐn70܊^.ynXnjDSkf-7eOm(^ۿ q2"cV}}F)sMp!tӐb/E hߪ}b[diWAx jPZ5tpNwz2T1p1+xB#Jӳ45}ŪDnl,҅o ;/AG5e;ҍ _4Vܗ4< v3I-kKҲϕ.j[գ]WuE_=|0Yz1L0O۸5Qf:eU@w*>m I%PKZ#<2E`j?ڼ)P g6]9 2$W[z^;h}R7SVl!nœRY kK$~KiP?z ɂg#H#bC+CAb/#+ [P3+q <.%? ʺGGד AI3{;eֆcWFQ7gҨV$!?9!R % S p@@ɠ2DSWӾO4[&vGCi>F/ð*t,FG-?O@PD1?CJbQYo}jo=(b~'\@%x!BGOCtlgqJ󭈨9FGFpnՑfӯxȘPyˍx3gm&d9J I;ƢLwW/ t(0|/# THhN<0^`2ɠ#@mQD*$sǴ!#tB"HTM+Nz{܌pVRPL*cM@_9~$(EŦf8e\:jyb Л |Ggn0 YԳ 3&߫[$z?CPp ߦtãG:o,3N8'n:W}-FBjj%@j6?Hɦؐ+RQgx#6y"F4AԯnViW 0}w.um|짧,|ȯvOݷQC4(X\Ke2H~܄U@XP$SO?Q j$eon$ލc-L#C'9%=WܰtS'_빷VCFP\IJ 3q.@x:Cƙ7֭eۭv40O]_YSnun`RtM]o=fŠncb(_`@z ndh)éX[azOJ۲bSQ034wR6I2[؄?1&rJ{Mi g?!SjHkӉnN$ СS+RZ mH48 e&M(].*Ų,89^T#@höffGz%@nuf7X+r-~nAXrtD$QL`EED܂nvd nxaͤp$:rOVK)>~J%3kBw+qLޞ6WSQk <K3U'+ӱւNxne7\'Ip0/$MЪ 3(?/=>rB?bIeӀs7qAZX6`3#ߞaߋZ.,'M20z-H|U Lk!$K6VoA0eRf%\J}z 4'{ AT%;R=Mj2g}\cpV>< }(Ub䖐2uuEłZUN5q8Zr(_Wlx,] mCo{%XY>A#v%g(BM7sAߎZ h}GHI޹5,ej a""5NJf87gB*ճ&40g>n yTȬ%d,q3>N1yVG>q>Ieq`b{Aէu)w'D SRxf9%<{f[?H4\t7{=YGE4wRHV;'Nvz/65 ӹK|Vw#u54_9" N%IM jX =5!QQƣ=c`v1(0lG`x|[5 Ȱ':.ὁ-JH}gdRKx`*SevIK!%Fn|}.cv(̢uU(@@/(/~g ܋itry_@;g1k3m|0 N1w1ѳfmv#s0QlJq8mUw\6kג%n˻_5\:Sꍴ_ )[VF*\mVd:ʖȂGlu)qNEđPj_ Ĩ4\X&GybY {Ry{)ѝm =Ekɮ͏>Ff]hyMP1r_b: k;{Rm*ΨL&g^_NX+KĹ:AhǏ;Ym;>d˸MtᄪfCHuӐY_Vc5 #| 0ρ&ڍ|~_@w4XSyXx6@S#m7+.iJV&߿r MH_9I}f2çL8 B: Lԋ_x}xaVgjxm"?fTPK2XwEFŨhB]`g{6iu$H0 Z?`b#[EH˺@Kc :ɸ4> bC& 5ԉԪw]nq\#,‡bdi6+Uj>fbO_ˎ{Tڒ;!NsJaM|+(29UrdỳwQƄuB1ۜ|xXӯ}wsF/c4V#5{$p2xPi 𢮳:0»]"ג~*Bh?GlDsW~ĚmKJ#0GԤ襅Y㐙A6 #ԏ5QiNw`.2j! Gq/'"J̽.йT2M zfxE?!sD0^DP} $YYP+lT쩍9;5i)61sMz`^êЮvFSЪd )[D^{\G޳=C{Iuxs\92HBy;|V40"n'9-# 5z_{*\qwS\A~&s"PbdΤ,酁 w}[WO)KZE* v -1b"@EQp-^ػXIz]k@ᙲ1G|L|78pPh=w@wxzz-,&03Ϸ'zɎ)]1UH`+#A(}Ş9J-b g|ՇcF8?zGz޼=QVjc*;ܿE§Ŀ4x=h}EE$|L"ZF]%]iH$9qz>fSi!.*8m_ *S!jx]!%8}8qACXJo<)7luxyWu2_YӛUa$'YʼnHMz =Eמ1S(4`-]sYKN,Ȕ$ZvfrWS .?b%;-ӯBq [Ќ3,΋׋czjrMs3Xf~ShyܼaCBԃ,)*;~ ,piMa ?ˉFpΰ[ mmޕ1:C=Z2NnCGS5{rSe/TK5)Pu&UUR; u mW3BH*N :댧̧ҿ1fsFaYg40.`BZߜ /=%R|iհiUF2WПWԎ SJӌXNY9 h-@ZU+Ѫ듰"nZKOwԧe_io勉1@4ֳd0)9*2OE3ExjN1.!dTEIsk.vֽ7B|sŹ #pzʍv)#- j29@oJ:5 "-.[jt\n*:aT')MZ `8^;1:h\UA/B|܍DFjֶKtnY5W:Q@M->ҡ51 =.ŷB8*GCx3e/* "?كkJ.NYXtv^ۢYM ޕeYI!NC*uXP)ׄuC0ֳ0鎞q_Λ#Y$K}a.xO3dRu.K͵C/-lfؔ,%Is{ynG`\ÁM VȈtf}+Ƥ9ZMf3m,SmZ F, fe7p.<,a77>ՋN/lIV+ Ĵluc8mk!ͫ\#d_P^lw5 \JAE~* P<*t=(M5~;^F!e*t{>`JO9!Oo)+ݲ[8BA&͋gg'cdѡ4!~ $x=1䭔󳑌yWjj׺w#s)ݝT$uLNA& 샰p))ĩZMnÃPLaD^8H6 ʭ e{0rVj'鷚JDSZ\;oHb tawdŝ:͢1msID+Bc\gIB`"A# .0Oz`=Q욼q.ѣ^EZ[%0Ѧ*=^ XNLF-]CR19#"Urukq9T)v=͇X.~06}=CB 鎼X搱9sēx`q/9\^VЛԀS :`RdJ>J'%7\rz *6 =^d֤@֬]*ǩحHvIK:V?V ui1ވ⑼i-Az$P_TCNde^P;c4؎-9HpKZg XP>i{?oJìBw;I]k Pr=$Lj yrWrr:4b)j,7^ $I+ɑ164Zőz?bI#3Y#ⳣ/wWUJu]g}>lG raVojE'_oEăUl0c{ .\Rk:4 7=ujFT"k_˾NMq[,/kc hroj_]V aie؅"u<%M;~ 7r5I?=s2gOeX\>(x,0hؖ 2!!$*ڳ1G,d:.|:b3!چB?a $h(B0MG񄄏bB*zDŽ|4n|.JCQJl6f1q't |> mÂ:ds[`yKd2)ןݝ%>dY 0{\Ɗe41i[)lnek_vpCM4j53kx1s񵻲[tH *NbCOf8)G%UVpͦfY/_J"Ⱦ3#:ZhHGQCRMSS4W& \)xZ;" 0 pR=\rR3 Zf p+)1)fq`Mk87q<'I7Н]jd#rxsI?W? -q}} 辕rL!a.>S &5Gwݠ3 a`Bx\&tBĝ]mGi@kءnFl9? T&l`XCn. H! uDž[nѫXY=)8VoF `X^֟U׳Lf:Y(TsOH)[h1gJkf}T`x%?Y#RB;i+9FTRׇ}C!73l$D7qk'\jǕG8jdKRqV&.^JcfEZ~]4ax9\<2Im^Ɵ *^4_ar ])?-)rvod'~c 'z0H5"h*'k O >@?frhSՂ-d^G<nV4%xt}BSP+l's7[v{g8>0hLʀC{#%=_6)81XYb6ڃqFb|,`·4p?PKtpbpN] ff  V nACA7=e G7^2;SZ~.bz=XpPd R[e;4cЙJP8C=o?JemUcv':3"+g£A3 ]L ycn#)\9na_GPZUD<JCR MO9L,68uIp=s%NCaЉKi]R;{n&"b;*:.D mpI-*#$>}$^ }$ppm(>,$}F9}p|t&|NۥZ#//b2x: Ӎ>+;h&3 sVp-mfqe 9<#:A n9H BM¸f8)1zB1Op&8i$SH٭⋵$էR./v&?|`!@@tjPNBfīB` M/]Db7K,ϝ3?lEr8Tu_ĞMk=ߍs-jQW8I bbXÂ29чeYGó w 6 X$rr*= WIKŎ8^i -ʆs Tnv|5'S%{++$~X 7|9PaZ##u8u8N-Mh{L&d]]~Kmw*Â>aSZz1f-3aAEGSDе1}YXIUk> QnDmF= ^,<9"gl0uE2MTF\3A$GKUn4F6DK~q̡tQAD:}nL{asNq5eCpIb$GsU-x^-mTfN$Eq<*KJJ"O!_2s0POmjqfU3(]w((QLېD@ :K((>ٲ)}H^(UO I?&}9' 0;Ҿ[ucѣ-QLs2%S-QG^B a,bbF1_uG2Pn7pCa Ig鮝hQg1%Z''"'Fq z@8ru{B[pA;JS*J[.e Oue+>k;il٥ҹ3ĄbLZ o{H%^Wz솂x}T:)vaV9JOYr2: ?Y<-8vdj{6t!4Rt5f)qJD;Fm}jhWO:;T̼g6`x*r!aKg|}8JJ{{( ɧWτn1u&3@P<1B8PtISdi=gX7X#\gRҴ[2@axӓؠ3+o0wߞNUykX[S TC_%>RI<[c l~k .>4P<9a)C(>Cy*{ky]uazg$gBFQ03:( QRw98"%m1龹@Dj&In#e[[m+wsC%u(ݺ>-m"=T=`> )"ԩ]h|TFGF^H!0?Q.t/ړA(-k#E@ dz3[3?|;Hn\,ŞoQS|м)9u?1$[JJ͝ ʢ | QSpID$=(_mLI?L¡?ZtᘴgUOƚ6ڣWLrǟX5Gc #dRTӄ~z$wR;$ :Mrgb؏]g֨ 'l¢dSs5,a~Hv"S3!%E>" sIUq*~dtJcxv^:Ɛ67%-4o#~@ LGFqi+z۟sb b!/^y/Kh WbwefM3)۬y-+?AFk C}sv2 pgo]+̐U>`x{n%2SfrfVߒiN:Z5|VqE\ ^5ޭJtzlлv?#N# 5M?L*@KG;t{.JD~rޮ <?T+hW |$rb!Ω# SGPlyg,{LY,򷷇kw&.NaLA9tHATV-|--4w4Y( yWEMyoO fEB!O"Dtu5dd12!sۓa6/3vF񊧧˛cEDPqRZRޓvAB z6Zy5zyHɌw27K0TrnDB!ަZo Iç(7cBe;:ɜNV]rpd*4 ԺB/=t[D3 X1T'#'ȟ!h[6* fy`_ s[bHXۋOږLV;<:2S fT?|JEފ{D;~(JN2U.M0۞feufuiT|n.1sԉ)@)_$y Or_?i͠1ly+d⩗Vbꭻ֙z'kXw5 ]02Pce@%9o ǹ;f8 n[WMbžl"vnu͡ lΕo˂*=1P ]P[%e0i,@T#8[ [*"Wcȟ҉6Ԏ05yQ~wqKF'E֠itqݿoXr͎dVOd^,_ O(+{ϣZ,'NE_Yj ׆ 7aF6juLvR^9:"»謁?)F[v\ 㠦9\;E0>:`4OzR$u+ͮCnſ.[ΑJ՞5h qb,q ]8"·o6Kt}b786] "o }pvyf/:W_TX/. SR2CS(q,O lx]8 P%IP'B75NȨHƩs &CH^| Zf6mp0# #., Jww܋   Fi,다p>d_@ pt6- 7 Xm"6B>|ɑ0q!(MGG?rb1mT<`2R EbGMe(ȳc}i+N#F;ٸ5 Ioq]=]B< Kh%Ō$nF=6L85N+ g$AIE.%jbEm"Y%w%K8yU:@^өƠz^d@m(B X;%kg93%6ņ4(rr3\G P]8) ^%iĬn]>7\F[I֫?㗙LR싋BE10.YO16qH<)?M& Cҝ_ ^JtmM<ȫ'3(~5q%2d"C&s/j_9CuXP`f,0`H{KW:+g;EpaWt9IƒAGA1'"ykXu%Wnm9E=mtuYx7hLxU2<ٵliPR/"@cvV xTW_K4{vTƺoOjcpet]z^=Yd6w;gy9ocGrfҌo3=XEN";jŵNc`6h#~E(lgRIbqvn:PUF 2Vaua:\h민@?K/@eQB|:BQM8MOIFTX4zKT,6WDfE9Ě?~5DJՄ4oVp4r Ybt\,Hl)1ޙBD#plΐ%LMVʸ|e 5B,5 0JKJja X^xAYذ<8qQ ;TC%vLCL'`Qo}bgv>r߽06c^I+"'8Y7Ol(z'E !S-#4߉#8i!ܗp\u ʇ _?@X?oɺ[]5.3K.WG?3-16<~w_M(qauxnʗpK:Y]"U>*,,Q=GVd$lKςFeY-%;!Aܺ"ϿBf;Iİ^4xN+X:eqJlSyY2o%MXĄCDsECFBoXfrџA!eet5gم-v.GvD8 t+X=ZC; p!ЛSt~x v!-wO8?/pC8-%6ʙE##Kƹu82[R*9g,a (7ߓ(>\04 xf%:˿ 4mgu$UB!c~3%ɴ QĮiioXTJdݡrʣlR-n.>mO<_qE]cp;*5[u6ziK};q"?]/J 5tQ"n˷CGW}lyl+ҹI,Ź7n? dv4AL?|!ĭV?->?9h{hV8(48M8kojm@1mc8y\<B0%cvkkk5-^jDĕ^']=7Zh·% ?%!>ƶ[Y%Ÿq5K{J!qb_^E4swFB}. \-ZBaeO츶RO|roAr77aO(tN5a Zϲ*_Knǘ3h&0 3SQ^c|Ta&,gZּ_&U` 7&26g˼[ctkca&䶊h20$5UB2n[kKuG9}/{U-^?J<4+Qwrm91}{8YNl)2 v8n+V-T}O=e|ϭG񩈳K ,9#\Ja?FFVa -wF;c* ='ȊQ{"\y[mDٺj+1y/+yZ>UQIdB'V]q/gZKoANy!RyEoFŧU=ӄ̝MuXnE2 )'ÌHAыӷZ|͚yHSظuc$! į:+Qєynq>1ASQէ bLd=4wWk%?d+?#I(Nαf47bw^K&&ϯa+ p\zw6zWS*kiRW*o fkۃABi҃rwoH\]R\sπ4N<1W4 ie0Hi^׌ bJ AFNv;w-?ŨɧF{n=׸ܳ:sR;)| azN vw7X ' D3'+=|/Rm3l۱oKR>c֨ZjqhD2MUŝxGc.VNsFFTG<lܽ][OF+6r;m4x %x!I'xܿ& +mLN"/r'&41PODr_VjK /n]k!FS>6{RH6zvQ͕ջ;4PSXJ7FP"!G4Q kt)PzJs.qʽ~-6X#' a+EJanj0$OBc/>UTFCֲ ᆷMG]1pUF:To\Խ\^ߛxY0 ܛH/o(i˲ 5 tå(@h%jtG90 fiJj]-IT3S5XMj+x9œaZSsyt45g>"$w}l$- ';Oy_ß{HbX%5얫;`,b6uU5%˼?lZѫ|(ay5`I4' 9LV][n/{:)]V ԇ1OZ+\I4_˯%cmzK%ݥ`}H$ZQƼ %9>l9-lY uT&bz7qF΁rd%f>m!lj+ç޵<Aj%LʎKfS8K:zB".QrdtZǵJǦ,w>dR8m2y,~РRJ:#vjpL#7GBy3Ѽ[SX|9M`e/jwDI9)BS+qx [E/\gۈ.y)"O8&M@b ]W4S )&ϱlRXRTYqO#'c,0V,1W߀k޻:D.f}[ \/"jH'B- Ǜ@q8D>axLyR)Fw&vrhKfJ4S7I9r(@@.>7x75\{XԠzC>۸ ʣ-dAPPqSָZۯ+7=pNPM,*75^{Ci`DtLo%LvZ< -$JH'hR\;0WX΄ڲ@ťmn |11a6EA.5θxW@uv鑌IݧaE%#tS@ uSe?8t8&;ֵ9B 7`~LBI<P (٪{#i@.FM {ߍSaVGH/;B ?ϡt{J8~bH YR-jFB7)oqcpH*/Ϫt,x$㽡 !gpYГ=L7SELGF;NU㨲A<7[+1Vdžan\$!&Ue@.?rZ= CMT}B(=^Vo0 SI%(]22F ҵlF/"c2kpj_>s}d76r"x*9 :_.>z ˩ޘWoVVu$`x)KſT- 5Ids<0@g}4WRǣ}udQCA@#++p0jyLR|Tiә?"C ɴos \ TV-[^<10wVel7Xb1Tj ,NXOgr'aWՖ_NDBP0jA6P3B 7^j x.-߭OS%ckt0.XJÁUm˲0DZA޾Oz/2R8YR41^hufؠ ܧy0!.釀lz k Ÿ-8Qu'kɖ=Ϩp?ٛ!Ɛ(u']nHJ4}uZ \8y1p#-8X|mW"1dN"x0:yG]H4RG_fx)2vy5 C^*龍ډGeMJzy9#:C~+K`6j% X:zj{^վRGpc}bR(\,24Me/J@#/R--'NV*' ۼ<7a)#~p؍PSѰ_Ey=v[h7M0#_rG K< W,M5(I nιc4_uhns#-yhtXդ#btu$:k-;5Ų 2vz.vטFgVPDxqe~TXG~ jhmلGJ~T.Uk)?{2ADqg-/ΉUϯ4gx#V ?g*>mF~(cj _eQ-K(Vk8al>^Sx`K&D=v- J4ՒN튲=.*ԃKX n`ŸFjSBr4Ճ(nvͶ:01VW7i$Lҗon D_ l%ˋLq_&44ᨛkh5o3|C滔ևLA@`BAE|wlUH7r|Yصc$6qpRyT>0PܬH[3\Qn$ug} \t\e]W"yW wB<;까@SpJtl%HP3mR dYJi &=!!6F%W*iٮ/1e*q vٵn?6-)2> QMQqRAu 6"@TrH,M{x2nE c_mx)bIUΞ9ozn$9UZM2p%sG=?A/;lǍRN% g]!p>mdzkB"*r~5bĚIAz[ɦ98A!q]ޠf[$,~,.7Ae^oVU|ߖj"}SV=B10;gC&Y0ԉ{w,*aN!Q:.MSkz{r|'&\1|w4%rG˹oWB_[h.t,:6YilZI{F:`t>`@Ȣ[?1 c}:?-loa yDf9-ewDyBJfzkWt߄Q)դahB>82XB,lV<#q^)#;b;kQW&䔏PU[S}P%/HoD=տMU9}dѾ,| |,MrQ]Aث#\R `Yyɞ8#;cexP \΁,fcDMfR}2BG%_R7KF XA.\MHse <>1&jYo! ']b}7ձOj_`lώP@':9-~1PJd9$4h2j!4"8@bC g*#ZzӁcT%K+GD:aqH\4! _Oƕݐ]JJ*YVZ)# sc?{"|j>71eD׿DQ{;^USg4QA 5X^ͣQH$;)`!9%bn916B2(P HSmȅ H2l101znd}jO0_0ӷIS߯)\ _[ԋ+RQu1wfjh2Ň,j9k}8!Hzgx IJMT;ŁQv; jCdx>G҂ N$_Hrq:>a@]{@RA!p T򔲏 wYEa>#\ۈjDz]+=[!a N޽fI`:e'*MI4fLmUD]М&E`=¸dGFr^6dnCtv,B +oHƀr&`ra[k>y~鸮*P=ӨӬB7Vm[5 ͜5qU jp" 4Kd8S.KΉ:gY=S>GȚmH+-c˲W+~mm<&r/@K=B?+uBY ⴽ| ϙ<gKEHhKhŎ]_L,s4],H|0ylyyd}WVTh`1so-ֲAv?m^ [1# $G 8 KlQaN5ZeRV:xu\OM:}k,{xc(~"†5]dq Π ʎ7}RG_BX$We$"SmbH:"8MB=34. p/}aPiK|M=̑> g漃T.IR眷ElIL{F{Ce`@[W(kޅv=lDzJQYQ:"eW(tʳ6U}sLa0zj8[ܾ9~)*SbԬr$y(Ovƙ& Oq]n%~c'T|դG:aWg)CkȪ Y჋Xamy4Z_Q)0Mz /U`l" J&gzq7T AP$\7i+PGNφ-LKh9ۂՖ_`Hd̀`᧍:*^Os}a҄H } 16Eȸ7iq[{OPC\l?J>o%tJ{ Wyfje͓cZhE(㍜Ȝ$BgpI9}zQo4[`TjAPZ|[.V?* S@\9C}DR\:tl2NY~{> kvmIy/wG:ýuV*<^+#Be-v씄MEI$-A6||N#f#ZIfRquwA35Z./V5f8aOZ4=sE3843`7@p`n)m캀K}u8[|l9D"uҢs^uR}?ߗLTX\1fgY~ r`}q ؕې ": q2^&\ڗ5++E| }eL̽s}&LIB({G݉N:/wC+B6 ,VOaH9RXޕB8኏[šg[%S wT*lӅLNxw;mzƲ#!s)9ϭW cw(-}#ɨ! `@t˯dtŰNp)"MS[I oe#S< 5{j Q O"a>5xog' :sAIm8SźG+XtY='yShѼ@cۜÒx«RohWXJYrzhG饚%d-xϗ%BN:0HTu2fr_LtR~׾?ƔA3A(!h!8ȃ?Z1׳݂5 y4"8W/hl|PjXi+)Hန/Ds[toCo5 rm/ -И~:$b7nD*s iesB=hV:ǠȑPaQAy?AQHo&X =L'ԲwW E- fP_itIju,fEבAZ&rEw okUl- \q iX, 6X:u>HdsŅ'gQVw}_(X Bbs?hvPDHv슦\8PW',bV|z7(Rt.5L2GwFj Ot] VIC6}ds"*t P!}&MrͥMzH%qꍹ MEZX4b؁^4pF= O{RlE0CrU,ra,ZWڲ﹧*7|7Ƨ*Df|DtZyI373 kh q+w+͹:p[(\?a};Cu?g%[f(=l 8,<ɀD&Lov޾;g̗^!qg76a*U19#H%yqk"yF*%,QT8S)%ʓgmI1KHЇ0+}=㰻{"p} ٰ;yH BXHF`vْ=K,+ T掀A`ws٩ o&pw^VUbtO=xڐ|~RmN` <,Z}v#v"jS3:M3wv2I C]NsDV75oÝ ח1֭;}gKtq0œ^ɣJc7&OOh港2ȥc8\2]Pp@d.Z׆d<E"}of 6? C,aOIBD}шʶkefeIPE2 D@|O*Gg *ٽLJ2Kxg:5P,nC;=yZb3<^i: V^7EI}NmY_/ >7^O((xY ! [+S&ũogڑ7k}f4oI^QX{Hϰ<^C^l#L<@4& oץ$i y׾#wXw ϟ=ȍIroq߂Mڟ;l J@fj4xKxcq5ܡײiq6%&5hWQJ5 ƫkIu˪^h0n@mYg<t-moaЫ #f%H0`spr*_s?{C>=TN `Ơ%MLMڤy'ɓ';F J nMU\7׾Ovl1grdյ';J@;%wƳu_@IfKlUҽUVz+@Щl"7NQ˴&Ί 503Ry/U l*)OFQWaB?"P ,NoTĨQ+0Z OBn/1I8i,cV|<#k:h ^f՜M0S)NfOϭcP[?=aؒHkTܴvW*h4Lb1F~[>D`|\(1t!=;cƭZzm\X0D^I]-rt8_hL؄Q_ځIn"]e;P6MݞnM 6TlZЁ/mtON1]v[qA9˚Ĩae<ׅhJ]s2zsq2y{t~˞M)Z iH*J<#nl rRt& rP6rNG"Zg5:/$i";Ҕzi.gT+O@%-(Za.kA8ap.nq)hSP ZSǝaEXQe( 2s5 #s#cX; W*ֻ ? 0kqhx$_a&J0\R|BT. `,;w/8 U>C%q4͡#ڡ{|Jztb-bqieN>*ӽQ,}BB&H{8}j==Hu/ \|!'PVW+3i:K|7WmT#g`g! '[i}qÚZ_uDx>?X(A)˱(hKmD0ApM^gYbn*߷r1kOGXyncp^ṰUf}װ,Ѓz-VB3"`/䇦ZY%"mp(16[{vP6)+$:*r5E۩OAh dBgţR3Ynf͝(A؎՚e]1KN`F_Lj#J8ÒǠi[c`sed׼^xJc7iNKȁU<33#8H$X =2,yX#9.iy9"^An}Ѭ36hDNnz(Es%kF3Wp틈u}1Jta d/r'kI'dgmÖ!) G΄+ԦnѤZH-p7E9aWBN$⇶#c`U:eG$ilE{}}RҁKeڣ=M[Gea9K&DuK"ed_cXs)vDU q"rhF i7}'hC z開I9Hn ǃuNKǷs_ 6J@c4$O! !V;m0ЈÕ1:$e th:]Ć즍j/\Tg՞ G_=Hk8 rj~:Ek+3u|2Lߚmj~*cZ A4yyu1tC 2z, 0^ Q"\Sn:U7G:ၦӶ w! wY5 ,1ějez%l], Ԯ]C nޭ0; J^Z7t[JdHB{D/ Ы"ß8#"FQNSyoc!ˡ{^!"8vYqXO/-z8…^jj@XUH < JAFYyxgwU\Utël2mepėA`stk6` *Eƒ~4,R pt/$h0CӓGrBo9s0*g! M6=Iy`6JOb 'H>&)$W*l9z ى r.-=]!# O*y"X{e4fĥejl~83I0Ecʉ9vQf,e  {ɥX$&|#)}? $ my  >wq/<ױɝ|,>|;eM PPJn3-1d4NCXUgkvv94]R$:H>q{vpEЎZ`wʲDXx[Kb΍PSC&`i٤O7ikKms+2#sry7Qixbi|yh􍔄3d"W4KZ)k.Wn&t̥PjV3!6 t{gN/"> 8́ݎo$ɴx!~'03UR-F_T T~xT/VbVY0Ǿoa8(WQGQhzF "ZgŴۑF|aB6 Ʒ‘$]lofAoj_cVFqcLX{ܝ7w/tKO}̿:ȢoB~&sJdQ35x9p$4]RSaif7m>' :@'(Yqþ5_86yCovV"V~J9(ބ|l(d!:2T%{9bݻhLgc E6 sp!7PO,xʟ+992W0X8Jx1r I0ez$;jR]=g)~DWU/,mŀ{G Z9N1e,m?Wz"F*)8KOжMR=Beh>zzԦ0v;؈4KQ*T9V+\seO]\m 1XD7tވ:lMO 7 / Z]]EwgeD]6J)s.lU̐mæK[XS2PS -ޗ)V>r2'E[UTpKB}}(<_H;f-ί_/"#2]N:,VEw~v%P= U%].xL,o:HKw#c+PrG|/P2T͓273H;¿PA|$p->y_q.?+xoeU&L$I^,egGyvXESCsC;m.9r+7 ů: G޷ V bH^Zag2P$ǻS 8j΍?I>ߙ}C| 4G /$T97m/S7EO_6O#B{3 x clI a`85\ ,l xJ8JX \pK+ ( =Fď"_/MR$ `8L+m 9I >f&w^%Jcb<QcS*M+ xi`Z$wW}[)NjIH0F&NKz=l=Q!Q31Wu9h_zΘ[^;lQXzd-uw}@J**0S2B$7 *" Fi7Iam Z>wӖF:$=Z@c\ZC~ht唝+.Y X" =G ;3PA /3GK? hM`Y+[ei@w'ӥ"x4x4S5sM/p,n\Qb3>o5󸘷\ ;"bn4rX4[U~[) 7텗Myjfrρ\o3!j"*Y5ƞ|mۦKԝS㭚C󈼜aDjM@ޢb [̹+/ڝ!255#Ʒ0^ ǏBe|2!LSe~>L*VdKg('hst0HNVg HѱL~C7￲T VWp\pbzdA WJ.GۂuiSg/'PnK\Ƨ qs,wup$[Ӯ!Hk=/9D8M%4soJ)\[~^,B6tlZ{!YϭϸKˢ>Hw)4 !K9"bC,ZoT:}F\#lDl` wѰ5 11+mi{\>/vn}lH ڈZv`4F0]N#Ly }u <9J~% 'PT0Lm/IEa_*s1b/ zvBuK.TH[85;p>3OsZ-1~/]TA%}x Pl4(#3 3Tٻ[Og B2$4WKE=!oE+uSeg5sRBu:KW,^Qa9"=NДɍBK*d.0{'#]jp93DɈr}bWO"\õ =QsWvOzfSdCQVr)jz]2T=Ju[yŖTsŖ:N7rca-$Fc|MI{f#;{OzsLP*Z"k7ϰ5Rժwฬ 1-髆ń]gv'})d-C/D(Z)@rfGV.K gL2x{s-݅/!ZO # 2KH 5 LR46Ý̮ H,]@N3;0Lre!o4H!}Zؿqac q9x~^?~pv@b w " Qj* ѫ=9mЯdT9M:,KPFܫ3x,#q"zDF+wn"[v1d$`t #Ëi dދ_4Je1hS5|vUw3ھe 0U ca]i$!,0Oi'6y((iͷ3!vc4*Hp՗ռb׃0|XJyM~yؑNZA˺jzbFqbgmk+5ZC{ 1Œ ا%KƘQ5~Nf4R:D2vz01j譄g#zZfu}Kk6t ZRjˈiD'_DcD&9ׇrڕ8?y}.hyl8(DIO!HJaӸA=-OH[Ƴp{9]jm6ڕ E4wَO`r+ԑA fDcǂ6W^f,6]K8DqF@?%Yd6~l=B2׺|N0aKʣJzlhUЂ@?xdҮXʘ!!Iㅝ ,#@{\\PIP)6-ǀaALd'0 =$n՛. *_8&6Pu.,%f-/izɹ&ai1 )tIxZgB,#[Gj9da2(4_#~3w-!wZ am˂C ZTgyv@J" %$1#կRӂ)/_ޭ>T.?zssb5 NK'f|Kh ^0rS!ӣ E*v Y*1=#tz&WG7 _fcd+bU9@L=5sp{s'+1<-s5GDk?A?!7e$Gj\ t50@D e:~EQ&Ƶ _w 8 ;TI[yg02b )k`$\͕_1j!p/ѿİv37h#97fQ{ϫZt7+c.f%,ڇW1`eeY0- #Jht\ylr- 1klh3)@nZO+u q LZ|oL۽mCҕJ3`o] P̠@fz;"Wɧ;dV~uH`EA}ˤ%q's?dJ: D,íumPY]‚tķhpBCvܝ?IzM3QZ߁10[GMyVSg![ X?(e+jj+Vێ.nkTą;taxVy4Y JyȲ 񇵤ѴR6H[=rÙȨzkD.sXJuJ9Rcu\,vm0WczZT,;/pT -SH`k&CP[̅'^. Z1Fh:VDSBM%c̉KivQhoZdr ɡ %]Ò/ЈY޲<^:py 1ql>k# -brh(J"Y06C%|i׮w߅&22g"F[u9 _<6eĉwu=&LrZIHMȌ/&*99&n0ԙU1Oe2."o}?\QcZz(VyX+1"މsK}UXtZT>c5hpfړ>ftVwiV|e NְG  V9T`᯸+o*TUu zr̨zC8 ]Bv<&`DAU󲉓k0 kGO ֥c|uZkΎ=g|xdodBaWgd/}XX)T}yWde{ ^%wB4@I3EC/ԇi>pJYm ?"'}?rOP0S$߈ ih]69]mm)wA}w (=N B@[#4ѩ;xv%HJ_DB*^gАR/rc5ӭZ%s`gGo7`u2Loplr`=yt#9_z)VK*"Ic|s<{BԮae[I%9""@';ў>Mz YEV|(%U[0.9Cs8*;&c[5?QwZpoʤ:({Tjۂy2rdkpIQ%QEoعuf"b9V72\JCXLv2ǮCf:̷sð ;ݓ*Ya+OP9 ! iɊֹv~R%禮tp䈖؋5*B4F_B!V ` ً@a 4m> ƨ(,}f$w@k8};"" vrJo಑EXzAo'N8 c dcLaT0TtMn ?4mj`ci> &^cڭ~⏮ۦADV^[BrM!8~sbucz]K'$H%՞Нw셿,pߑof8DVg%T1OW^w%g>=pK+` 6o)ZH@Q(Y5 CC/?#FtGk^ U٣OȯӛhXT]t퍸`{Be]*S'Nr5l>!oث}XM >[u,N S~, 3̆H}mh/`>wN( 3b{Xڬ.Ś3HX4솀2StٚO |$/cK(Nprc}_v B$·Le2v!(8"@#ۑvw# ە~&Lpl:Rd ;U* sF.@x/?rhc>pys=l??+'fde _=jVpd*ȏ1P/ahH1fG%yLhgr:H pA *+NgKS5af=x0P$|!,SvIOi| a^( Uь{ f0O 6]E,6WS%JzvT^=ޒ Y>{O^tdc_R.4lzpq0>.)\{ݐ Q1{sZc ,8cFn ]ܤVfi8Fњ@R ])TL+8)UƤbA}ӊߕ!:yĎ?;x8J,ښ^[V7:YyHe# {+@^Aw%@]ԚRehJ</( [nd5$6.ql ڽ쀽%&ŸS>G"Uh ̩%Nl~-+ 5֦2F Z+w@6XLp=*^62I<j/6 KF B9ܕ$^ /YnPxӖ |;_a ?od1cW*'fjt{[i+[qzTYfqpi(@XJ.~(Dzr%sf5߈yl`lX),_LJ%}"D(ϢC(TйM K\%z+Uᣂrjv¸bM@.On)QWEta^zɼTs=ThT?Qb8OAU?BMAag'w[Sul^CxwIj)Ko<i@KRׇ^W8\o~4 "`F}=KgsRUPFwl| gw󄿎7&IՇEBWP<59DB .\k'b=s27AFFӶMZe$_5U?.dQ-RQm\+Gܖ@2\ w_IȔ{$j5"E+@p(»S* Q@ldG&(ٝK %?겾524m/mSfIw@K 0r6(WI@HM2e|r>q;'{SV%PΚ#U;ɽDs_ͅP'}ۥ%tL[L #0K),ghi3ǘԌ_6VP |ِIDrgm"q8 HN䮀EfƷsfQ- YZ $ֳ[z"`D9Soys c7!91vqz"r_ɖE[p .jw 5ܷDه B! [Y{ dO9!ߓ80}4O uku\F!NZmJ)ڨckI[~ˊۗ|`i= `l5HOd ۲T82 ^sW 9{NC=#ۭZD_2 zT0EQϧhlq2)zJR5fjZk|萞p H;.MQ49t-N=_Xi~e`3$+r)ql|ŗ@Zl$pBJ_C[px[J]jɐ*iHôWw"=a:$vy,m$k{ fXȇe.*ϞLhNZaU rl%6v,Zj򽱡&gX]][Nb뻽3>2-KØ'-tu dS6P?sZThboFi=cZ'}HB{C$=.1,aFaDK olj'8s1 vM-uIYYt(LQOjhƪLh(o//Rzʰ/3C_'-,alYY.1ay9!^zZU~9I6׬ Fp:PNaKLӝ/ꩅO)| 40)6RH.Dĉ:4m\sӵbf 6+dfűH$L合M(~ȊO,A3 ZPX!sX%u9{'C]MCtM-jWGX]xykDDwKoqՑ׾,ny ~;`pi6 pxg)C3Qoᮣi GM x:R:l?)qI_,8ocGtxtI8IMeU#$>H( C(AY~?yΪ7 _ x kayD`Fmӵ$!u֠# =Df'^tۉ~CV,B`/w}hͼTٚ $3-) "1A a Yrdn$U~| ꌗ]G(Z뱊?)EJ54!ئ+/ o MgSR"@mU:^۰U݆ P^1P/`hÜ\#"(7ѹ41 tL}LiQ{Iw0W9 C%NXP49#,ɍ z~ Jg!mM,'r䜚qYhn`g 4Hџ6jg/#&WFoZu5{5w:yMZ;bhNŻV$*Pb!r1 .5U۹Mf/;kl@ ~5!WU-ڰMXIJ+A,$v06=__u2ˡzE! :Z7=YN*nOn:? 3itmkDk0BWO-5HH1jh_\xzR)v;ݐQPR\Ɗ>>j^EP)dApxIc5έm)6}y29ӽCYcS4oG M7\s?Jm:{C8;AīGva ) o A߻Jl=oCO84;a?@]FZxjV*<#fGZem 'pCL9 ZZjV:㞹ojc.Fڠl|`T<.&k ;1Z(jTe$EE,>!Ԯ/o.Fd|CP֮8֘;FpAS/S8~h32*# SͩLhUl*Ne QGv^=D|VP*IW+snRWxl)xwc3NXB):QU@GzMHB`$Wr^_%,EF57ݬ7#[zY܄˶lяbLT@MR m(OQ+n44 EKO-5$@xۆpD2A18# CS끝#=,Ti)ngf2ًN<%LO#NroB[\3ȳ9@4gzGAz 5)øj3ZsSMj;Bw;@2BPT5e1#;2]%\^`݁ai tG٫j} bl^8 #CgMoKO>b"NL_6Tqv<\Ʃ+<;vUx_e1̑ԌD:f|VpKk:$z"s:ٳ/ ,+\bzZ7:0.^pu\kWu25,pha\f]1ԐVrSjL%Z5T3;", mzTzv:wUu$OxBF#l/YӅa`L[jUjθ˲4J,Oʿ_L)Roz]W4\>А`m߂|*\ ]%Ζp p+08iL[ Z@~y D7 /X8׀F/~PZhx+7% Y偋#>i"ϘR=IQ3 GeEx!bi_u%[8`Po@ ,-TȺ6΃ (abW\d-6;0 ҟr-a֚yzPrU:#G0+z5u7:\{" ί B :_0/Eusv0 FB% !(}ˋy>In;b1dBihokr= M\,TdN'i'|Ǐl$vlWf &[^K5L#Fb9ZĀ۸e@zNl9?gvsy8rY? ˩!qdh &S8#5WΜ{6H^3156rb' ӾF8/ -ֳAK=&B`Mm&[+gunUD2Z4z ?`x^lXZ8tEx"s_+5}>j.#ㄅ\X߸,Gf/d1u+i ͟Ek@fSeNO,WLe]7Pr1~6ٜ=qY8Y:V.I$=5HyF 櫖]<=p|/Pso&IX1Sw] 4vhдFuSM!̗Hy}BqspN;{Wt1紦as&gQr=*X+_ ؘ|NprP O d5a& aeLGY Ϟh\nSq1—EfJ* To<|;@OoR9p&t?a8DvrZ>I~0>ll%=όB{AO +> V<^@:^Dn89VYnq:]]a= gA07p)5g۞_ KOCQJ|2 \X{NL$Gk jvrKkŀ3\#o;RP꘧VϠĖ)<r+nN!m|b;WV"Hk{{lc\3ĵ&לsqďYm*Ul[rՑ=Y!N+E]>`(~ oqna'-t,ssɩ@]#v6&`˕1lL =*τWp1|?Z\ AB_PnK>L>LNs٥#T3wdCWCZaL/`i|Jd]==A8j|v`$uha$=./wpl1o@{ޅ*%,]Ib)46 d4j  )Z)Sc-g36d{-n^5GYlc/b-#9EvY%rƻ!|Wy̢-۵x1QG_#Ϧ֪k A1g4ğ,&/MNR<ÜRZ͹_bwhf *&W)y$HPI[Ǎӈ!L O}A9&sd'ܿߪ]|/x) Z!/gWHOx^ )ZVܱnm Sr̸VpTx5 )-/:bp0vʻ aWs|D/4~W{wzAE]/zZw|FȒ5w.7Ğ쇅2#͆!%kO1ᒘ/z"*0V~윷gF b ꗕGxtEK\>2XΗ*&x7c] 4yoL((F%`Nfy>%<"a> <$ENr 5M]؊ԱmŭɨR21V/qIw}cTr >+]<AXT2F{l,NAW6caJYCg@vj۬O(NrK":ޤsY3xq&kwyҽloXoVʐOK__ly>7ήv Me3<=ٽ2yvEC^tV|ou\yH)3񩳭8{,Tȸ`(~ c{\ٸ8MFA}v-K L`؛Z{&li<~+`+;op^\k$nP)67EWpx5֘UeH2/4<{\NT/IOJpT}%Wa.x5'Vkg7#l2EnpQ,@u=aG;t(IiAýgT'hЂcnF?诰(No)SG+s:5nfhl:vCPK{Sͧ= [BP&*s$sUoE8.}ac+^w%Л*j$VXe=KӽWTם("HKWM1Ff1;nips8\vBzmR.ZCFکS)ʞrP/OH{c6:i۴9=-UWstl/,p|ⱬٲؘ*:tAeϭ|('G3yE,hD I7qC:<~dmֲ<} <:mWWT)<ɬR aӉ^5Y;Z1Syσ|WcoҀ.1M gk7k+˚yR/1 ;d_}c>Β*J5AE@~[78^;=n!*; +C9BA}2D+ݮ:<Qy{u?g:C(G#Y` aM> *VKI 7 aooyh}4QT|'fc#&t&mw+hM6$&%T43XEC(׵RzWzB?hsoT⩮ !9W(?+!8m!¨/!goћb=PeܒZEgHB`iw>BmR52;-Ѵ/zc}B-V仾KW1EbDQbr`$ռ ~ ֩UÛMI"O>x5JiƺVCbY4fMJJbHS.ʂɯIG%-75LR֬\$(z8MD} b%2NjmeJ֤gk`8O˫[7`@VZ(D:bFYu& j=', :߾ _ bw1_?iR,WE/ه 7fe1;鏬 9^>z>ϥϩ @i_Q 5l[{ rQ֒[<4N]7RL3eF<(&yT~F8y=Vb.v=/S# N+iv3 eAw,Iss`se{^KW܆L['D#EWta>)nď0ry_Wt ;aa,\ 4\>`天Ɏܾ|B@H]4OdY`xwfM%JeِOP7yyڊ^fPǕ4;UX}sg<Ǹj( S#Gܭa̙~u8u:4Uh 7-J\P~AwqzQmM%9cGҹ#QkZ -~X]eऀmGjK^w*{~>nQqAy'F]g;>VJN`RSx8~nScqOӠB *ᬎ#]ia``O&߉bIjlQ eW,x搔&Xx&]abS&7 P,&3ŕ0OITTQR@aaXļ)L]UEa&2D aR @U"t ]4q"=&3TL im; `;f[L/ JA^sڑp?35d+`觓΂r7p6tsת 7.ܷ YA5_,AM ,:/0%bf()|1Uzn%G,:DJ<+2R{:UwA܉}Ȋ73#+bY*&Xw= G;kѸj/ wO4ҩ 㫡kWsԦT+@TX='p)gK3Mn,kn]g2v.%Į_% QyXeZKʚX g;ZR46O9^*LwbrJe%Q!&,P;5wfn?L5e6^ρ91d\,oe (&i0qP$;OPop_nakazpםU4qB\ya'4TY"\pqZoKՈ9&/5:3lLxyk+q YtL%pj+*"@ZtYʕ(j$\lF5)ƝSMcJ[GĽpbR῀W'Tr̟[ 1dsvv 硅cEP2}LΚ }'Q WaZXﲙ/ V&7QNv99hn>?/TCbX/?=MzrQ?ƅ#36T;iuSطȲa"uIW5ۚV4GcӄjL\eh>d\ei3-vZy>!rNS. T%^u7N(ϑD&WiUx=.XL+jVػOƭ_*˜_`K>4; ˆ"1n^̎s5hI_0}*cQ f.d t%$*Q3.BiB,}zNyĒgY$&Mƒ=O֚fz@^ uR.\]]\SKK{L4pZ>r;3$GL!+Č*(h3S kUI+b;kHqM@ 0 +?IMbqG-7,P5"61oҩcgp|vUP/S@1fds1z'y$00JK38߇tD$2)q{II I&j/ *?(b:e$dlMp[1z4_42h5GyF ZS'I_؅Ez "[[.=Rͼ" 2_Bp4^ }IbRkw/a9` {SukBjecLq*rxMq'ߛ} rwJM(5 }i(LyAR_m}l>jңb;YqMlH_|fIp>ePX$i7Ss1яŃ¡.M*sx <̹n?z*^2 'GV YqMWMӏ&u.9d,<Y\9*!ޥBc#bmϵ(NKqO FI=n6+BDD) ɿ*Ur#.#?ܡgQdd%1h뀔v DB-:nS~ >W%qSi\IؚXv)6&, aW6)U2զ/WWVvdB(<ٸ<'W*L9EwK)V<ˢiU^ dtjQpK-5*G mT^GscV2Qʐzȹ0@J]שQhExfnMJS\VQa&لҚ-CwR.SOm?7›+9 SYqH1ػ(AziC'aPR] EX'{F,ͳ疆MIPO; !Odſ&㫨!Wb2{qA3M{%2$H|kA<({&bAOFP\o(( nRn$lTmOthgkG.cd·}Ph,9 *}cr4gwHd:9!VwU: g?])g.)k|ߛW "7YMͶF^S"nɧ;*s!NQ:s\6 װ9*рplT+D q념g*Ĉܝp8Dp˄|_%ϲΛa_&70Mwxjqqi"h'fDwNm Hgm.WM+/osςz*+e }&Q#rcеsShïs歽φ?蘚G>lqryP} \j3M΢^O%vߝ8SMZX4dyX.-%j$2$y97Wϣ6TQtOE0TJk$mҡf\Y!^3|A0aL+S{PJUqfyp᾵=fufr %kA !"Zc3 ɣY(-,KbʕY%! _=ծ?Z?Eel8͓kVd}EpO6D&CRWs=@s!K-.+Ѫ ~iA7Wh߶(\K{I)FƖ-L|0Y2~\X90]'mU|ݥ Xr;xL]v<$Ϻ ~š%\1z9X7q:JF͛Ǐ|ڝ<7^/LVsSsx8藫 =̊c" 1O><*ѽ= >5;2E!1vLM,'7h:>:Ԇf-PLŚ{LOH)VÀ0+$Wk(J-m>#m Jals~0C,w2Pӫ^З,"~=ߋ8H)|*8k 9qLzZPCR}_uO^Ws4W}f ijJ xʇE!UBV]6=aFeޞ^ zTj]`ݭu4Kǣ1; z˹a"vPr:> FQYfHR2Bl'8i+',FQuʣ9T"s`w< 4"kJi\z=A%{r=)❻I&yX@.Ϧ1coԘ02y`?a)=z'FZT#)0'\&HcJW%L8'taM qBДho68,>ST F&4 QMMDomoQb ߲O)KWF ˓Ⱦ~19S׈ܖMFP#mb+@.;XĶݐ 5ٙÉG9I莶J0_ ~۶qY'm^B˗|")6g:3 AOI*j iq :hRVg u4Wb1:~ q-BxfNY4+L% fwzN|ik{2eot?d˻&ڿ=ޮPN5QUN= e'g'HwT4` f9醥-H \Wg jc>'?츇Ͽ.rkGkI2Y 8?17zp9E`s#4 XrWuƳS*캛QLq5 Ѿ4њIO["jֽ=kI~JhA5ZAQg!hrT :[CE]Zۊk@;x,Lxg0k3STc };Y '#] k `o'1L-Hm2;82lK6`nP.R溶 3Wg˾D6COE/~:8-HU8(8B `)[݆źj1X@<=3 bGq /1Zd~mA$,J2*dl;d7z#B˟lp#2-U'Mе.B4IN) 'ڶ(v sT;*22w2؎T&4^Of&{pwu/j.rj9+eKWXnfIJ͠}M{]=+r}gQIXh#d3p/_E@l$:.h{C} ̾YO٣!cp>љ(Pj #u 0%zgEHg5Og8t(*BTVa5A+ ?A/vRس;fX΂S/N<|ei*v8ƕ vVY#XU*F:VBG?&z@l*6OG?XU~ rpaQ!'f'[J͵aVN:uX_IۙW=8oL>?z%ݬ-`-D980gJ69-]xc;uXV\4E#яfJRÌ@uOa*T K7Uc- JkP[FJ9`!y9Vq0I6W`{yy&vhj/un\Z:i9zYv~ z+` 7 =)4Fk3l)$4عS@]kTIJ\n!S˚!~vJꙪp';400 |%/etk9XhBI K )Pwh R75=ͮ$zN\ú0 :ҍbgcJJImh 3aOd,%:ylZo)^+8P, ͏B/882-!MFD>Oި'{"8&KEF;5/Hړw~>  cޫ+.Ra U:@#.&fiɁ+$@j΢!2yz:'y/il?5lB !#a:eQ~$0)A1,IBjnƶ#w0ACA?l~#ƺ걑x#sW$Et*Y|aNk/LV}$ה#ՍpӳOVocU\ kο,c#%evK䑊0Ȧ3vJWm5]ˤk?ܿ&w[oViL֜I`9akov ,kԻ.`Pc_' .^y;2]DK>5r~elF,H o8a{)\X-Q)P"Ʉ #{eJ1Pɤӷstl_zѿqsa1:oH巢Ƒ&fTЖRD렸^ķP):z:/)_+9ȿz8<($G}#f  YISfB\Ҝ;} o8 \[:=2zuA1-VBjA[|y)MmXemJp&?py^'y;I΍"Y} l}?=Nţ>QFCT֋!w ZZMhK8J:,R; -k4h6aY_{8n z'fT0ut%o{#fSxٺފzT+;FHoCn$zXZg-,&@@ց!/o7Ѧ4\ =P2;_:0an-h vLI`;FN:JW]jO{w @Px\g8E6b>ܱиO 4/u*KZ7DvJl>'L;S'@H4×9/ DF4cm\r:ژnl%)j̣{_M jLвo;bKء.JSPlgvU\@Մ̿Ml*̎ܦb 痜[BxOuۏwG̪gQh3jcW?znK sX݂}hi^]R@`C4hM5ǁo3 C51ܬ~YYfQdqO6.{:i*߇#^Mn?uqk>p5$o?<@o]Ucr+/;U.#FBLg臲˓g> ^; ~ſ﴾!8Y PtfR/WӣbB4 PgS|ҡi+ g.JFn17ikɆq&P5ױ|@lڼ.L}9U UQGia.,kDZ2xNrAr232? .0[(+ @\0Z||RDKl-k+ *ҫr-? uZ(RLɴ\T b/PƁH 3 dP Ol9e;pдl쿡HLTMI /䆆Q{w@Or3%+<@ j6GKDD\a֪]OÛVYS=b~[ *PclXjwL>嗋IеRQLW} F^s>m 9JK ]C4 :l#,%A(*бjhzJA:0(*U+4~1]NQFF5Qa͐ߚ]N=xlKE?]iݘ@]I*1JHYpBu2 >OefkMZ+s0>#nh@S*^yaowfWhe=YtPw/XsX*FZeh?R!P%B$ PuW MeΠEΈ ?lu.|nkr}m~|ZH 7=ƲZ+J˯Ztimٿ*[b=~0,'-vf=O<ƥ( .gRtP ׷t{e)V4ʽ2œ}`'c{#T".!.MZ>Stiܮ~IqhA%i$'3H[2_3K%[ mRYϛ1f @x*dL̮ZF'֍qx<H[,pbtar-F@EP9-ÃT!w[{qx~1v5xn!`0yMۓ}RYa"Yo-\kp,bhDB7,9^Rҏk-I~srqFa+T,6n&.,]Rx/RЭ(D2&){|Bb=ۜwHtS1&4$ {&࣌.vNIe6n}nJ\xr򩆯+h'M[o(d$Ҙlg 6!FjD.stpn)F;z/{>] X&Y>qMJ5pvuF6A81zP5A<AE[ewO5%$HFc5 q[sCa{231LS3C#C2 SQk}ʒ?v rJ &+\av&6sj;jĩ6ƵL{0Uƥ^X8wBb|Dt̓ vjXN.v 5 owKp_YD֊V\~kalGTBcd+Ė5]ե-8 byWu}LPh]oOSg9ZHf֪%?q0r?>wgv@Ȑ²sF|8V;&e187,P֑Uu*#Tt~Ƈ1 [̯j )&Jb .F\IYWgvq(~=83Dz{g*X1\(!=~NxW]0v,mt,!mwm¤ &{yb(eZ=\ߡ_WZ/re(Uq#. ~/(7"mb qv1U&cVyw4[ =hޢ"!䈎KJYi| |:u%]YEf|R$%Y@ 3~A\v:bDif\=KP.D;;? Fh X-Okж%enI.߱lnY*kͱrN;@5ob7U鏦(Jl¹7OV|]Jv1G5k1}USQ`~^/1^Y$HV1@fܖډ_VXR{E` znF}qF͐K"aZ!\w|\9ؾo5"IEZzO)2t ǫxؽBi\nBȯ;= d5i=hk"¥dx4BPRZ#]˺\GhA9="j=|?]aH([^ 8\yGfzcor-y:(Nޫo=kc 0 _}w5DR@уB6{pa4M`E?0UY1JzǷ}fCaZX(oU;ʈaE듈 dk9yvuN=I>Rvt\tfJ$!8%>]=0}t9{I>weZP)# W^wQ'+VroG&B+wt6d Ysͮ`wV;YjpoSKQ $JlJFtAP0c:ļLjURh)A2"<.E!J wr( bt?v1 B1Dgs.P^*ɹǗZzQ$tkM@1V%b9+m\}&J"* llm 8pTlWL6 Fhɻ&wsMP` rEA O.ך[8ĺ YX}"Z$@٤2K38{z [vk)5sEi,O9gc%fKu";e&Y qoh!E|$RBCAr磥3@Ȱ_Y۵tZV@Sl~YEuPSЎ?"ѡ2Ud:oggh\|;{Z4$>V|@BaR7yhRz \ mWiSWjұYK1>0 YZcaret/data/datalist0000644000176200001440000000035013153613153014010 0ustar liggesusersBloodBrain: bbbDescr logBBB cars cox2: cox2Class cox2Descr cox2IC50 dhfr GermanCredit mdrr: mdrrClass mdrrDescr oil: fattyAcids oilType pottery: potteryClass segmentationData tecator: absorp endpoints Sacramento scat: scat scat_origcaret/data/Sacramento.RData0000644000176200001440000005572013153613153015304 0ustar liggesusers}XvN8! @rJv➜o3=gpHι~zg7Lwa!!'/pDF FetHk٦S[Bb h!>[BA>'糅N3Pgo2bzsLW>F: tB>l'Cy~йxn㥾@ҍLojq9eu> /'y}KbߋI>$?Tɡ7NGp+Js%֧0tUDo)Dgn%-Y+|6cs+5%>,MʲtBq埒~%NG?ɯuF:ѝ[˨>&י_gF S}ujUgC7g}J~bF5ΫH94bkJ^]}uU鬫S}=s̓]]R9$.>,u4YS<2u$$P?,s~nn(c/}Y-VJ7ޤV4!ysay7'C,aLgK纱@Otcd:s$쳠_R+Ȝhk@)JgCQ萔CA$Ţlذg<<5I_5:uκ{&d5#yFī[,N+/UfV=UUgpO`H43+*<5A>!)፥3<_Ȯj#ã"R|EF2MH43($;%"4?4'0;$;D?@qSDKR*}}#=)! ߐ IbߐpHQg`$l3'8%30'N($;%+F=#}R؞4$4$00D8%?Gc 6MHwHՠpFCRo2p!>+Fxj,-c<",vHȐ`=gJ(^4-S]繋ͨ>e)7Ξbh~i󙎣rj/w3Tsۗ91l=SHK8&LF'"vƃ^/Zvψ`5dU욅\/.2~ Xb1U%TGZVl߮bdU|Ό_e6Sdr#bNdkT?53WYU2bT7k9ٓ~Xf-\/ٜb}[$԰yu f zl*_)6ז+ L|ZPVftkaJ0*]lF_C/C\Ys&l ٵ*9۫9ol5inY6&WTG5g:`y&[͡Tl] /s)v:OsʼnĿ*Gͧ׊mMXJ9J`)O#C7v2ɛ<{LβL6sg ڼV):U'K',Y+:[ʆhk*lOn#ZSm (Ry>kVљ+fjczI¾;I:ѝۋ%~u?)Yk_:"#%a\Z)aʮIuK˝nD'`22^T:J$J/k5*LVͩFm&ʲyb#s9+ؾ/1J=\;9lm\t{vyzyxg瘧g=W٤h_ڷ@߶xY??}I,r\皜䕻 =K}H+k G?t[ է}~v׷sTw0/}Y_'=ɿʤo)뺘:St!׻? q.?_uGx},W|0|>kN~~y1Xp[NuRbI[[G~E\w}|GuF~t}T玂%?ѷUANkpWX*waXӷYA< 6Ϛ8Ǜ|?}y韞]S~I=uM|~QyoS:7?+w!q9 k /__VX篿+WAy~u͗BU~/(| ‘t]oArTH]/lPlןWPgۿ{OSyS _~9OwcS:'S^cbLZJ7A-0F@#OOІo_T'K=+ҿFAJcUAu_#w|vbpKcں(A3ڵ^SIFc T5E1 3h3@OtܣcW%H5 -lh{1n51lc ۨWd>؇ r4ǘh8dXiwo3}F埠_ [\p&po?>-V||ʀ&#mgE̓}h׉<(?j;C9\mZ->"h3>W}1G6Qe1%>cI[ŘLA1U"!9lc:k1_ʈ%[^ч أjFȁ_-}苊MhZ6* U?DF>>S(/:GMaW\<;obM}D*D>QN7! 9Go( ިZIWۋ1(܇/""曔--b΢/ ⵀ} j1ȍYzsŵdeqbNX>/7^÷_ɻDv2raB\C-R Mغ6kl^X}t'|/\U(C S<q%kp lm_h1IBĭ:+&>la +,K8-39ܠhEW̑#ɞZa9dAI|tH2_uZb=BkrS|q C~4,F3uA (l1$Қ :Pߔ̆g&Z)żFmBͥiYWT^WXyRl%Q#bހMCK1?]Jlt ~H󄕈3aS(FŜ`[E i $䴮d5b{1O*?WhU=Q1O.Tz_aqgwrP„L dL,"}zqJ)ɡ'"fh+{!ִb;{WƳ= u&&#z>ylfs\OVo.-GϿlW9.wO)l_MO3zY[2'+'~vo Wiatϋ/?i (,NSod{UwF;z_ZN"yiPm&m;<7uV5̎͛d<0pgbN8kp)0 \ߝpC.n!5!܂[zp٭-!]@c w˕p{Gل{mK`Ӿ^9&3_a»a+/Coru?HcՄjNt91~w">#7M;>1/4wx"(&jP/RDjN0>&!¤Dv3Ga#",L'Ւۋa&")IEzyV<ȌTՉ&2D3,Ē,}+Bd@C4Ҝ|$le";=N.}xKy"խMmDN'y0O޹_Z|^eI[.ND~=?@bB(+QDYED1&(6QeNDy؆\ĠZ1PW E-rPiGة ܗp KcEjJO " K vH9s6^S(=}7%|@[Bی$cV^r %wqD|0-UKYڙݪ~Hobu¯JLݖɆa ?T\?"UD(%#T}*BZ.MV#-D4\W׵S%$݂b_R"3(!`D%"Kj+RvD6ēȆ# ҤD$Vy DvݩC"$rl"K䵝Egcl\"Tt]D~QJVDagHYsE?4+(ڕ>qZK, QF/\eӡD9j*Q.(N9DGT#ՎHӎ$&a.FO2SMr'M:!g0Wڇ OY.`UZ@lhA^E_4xL͈[3Tq@9+Z_[4R2q3^"+Ƙp_{b̵|&*>뗪yJIR Fȹ1X#QEbDK͡"$ό{b5F"hܥXpGZڣń;f!~*u"|DÁDLD6vOAyL4RUY"vr^^"D8ߍ _pF2 DSquCbL(%jp2l 0q5_!;";/{7ȅ"L z"O D[ly5"rU>0Ks:Z6%˘ROe֖(":Ŋ4QLoUWDY2Q6FM&e@\(Yv5Q^XXlH%v'aX1B G#FSsl#>kx99u$ᦠ^pnna-3O"fndJHx'—ߖ51# 'AE"qnZt&BI uEXf(04%)H[ϼ뙳oΕy n!(_#gK3I]Qa-&K"25{-)5#P+!Ջ6DȴF+hsXD?%r4[bۄj3r>vM","˩bnY65VVS++",b%2bizs^"^i%`or)"3UP"JK97l/\*D}~|:۲[5ry$oT"wPM ~[MO%&} م'CEgtQ'i ՎsW8t1}̀W"C[A^KG<֫SaUZzwpYjMeUOQkBg{5t 36Uk"O=޼Zn-Pk{W~J΍mNZ u[oݳٲAo<#5VF>-˩5'__A!X7k\gݫ4Z?-mw% |1tE薊gc #oBT]Vkh!IFqSro5~Cl$t381fhu@ZpfodYe˓qjMЫPkmO3sGeEY#uA_}%TX.zh`ɨrC aDUUjE&ʱ_Y+!k{CeBN[AǵjMh;?JfMXyLo_qsr~q(_aŎ'0fXz5n]mqZ)VL'ƼRk"ܛrV/=[+ؽZwIs*5qjLQkPX 5ƴ۱[aaSJ*Q~sWʸ~㞤:Z0:WZq~?Xwgm2-Mƾ=~!j|4 <_1案=e@\:+}^x_4׹tZTêՀ%vB X%kUրj͖E'^@ݫWx*ܠ(.*7վS~Dz۾J3zsW㠧"VN;u/wt:7oz?@H,W=f:5881|S&|kk lr}9ȧwPGۏ>r1))7Aeя{1px[^׏8:z/Kc3ϠUŻg}Buyxm8rֺ:X?LU7@p?9pt/MϛAo szbܬyMKnƑq+<~/x(BSwLb՞:TCćcoֹ`_ݝ? }y 0(nBm?km Eu.=~4hcLLCſaŮ?3^n,tSߡ*ыnY`_QLިGd^7\6lZk5y v#rP-”f"N.X?#y]qIjM7B 5@BVlk V/}!u ?/PD/QZ/bϟ? = ߑ^/e׬L205!&G4Uib?K+Ղ`ھ"ܭtq-a~5M!w󫱿o[} 9<,ß,*^@}U4V| ZQQmH͐}(7ơ2ݿ#^/=wG\7ֲK{m6~g}S1n>g"4\w5_s"7<8]zd6f><@,^):k/k4;]Ȣ3&ou!MU> lj-]1( KXZwjMR.=?ZzOS}y1ͧ|;lCVz Q}!W75E}~N-ăI#Ihݿ(Hm$%H/7кs#m/qň"C?n<qmi0HQT7amçboy%/4e򛊭Pǧ=-7>}a]y"삣>D.Q .Z[̸쌸фoD~Sܯw(:.ҮM(I13QG24>=Tyq T0؇ 7|&:.pVe\q=ٗ_$2?v|7 g7i;1qS_C|yt- 8?"om !/?]OF=[?a'c1I(Znch|EvSv/l>)jewF『< 2N.7xn|j]"v^.β|4怬_[/U./wxz&oA;gqLև/ u:YeЗc2 EsZLxȊxпKjU/F#.ww']cȗp|SQ;_[wE٥A!eZ.iHӟc!뺍F<68W$z3n]3pӠį̆_n p [)wQc!er$Qn%}UŗWqލٴiEW !|N=7`\!o!W"8zfjM5c5a-F ;xw)A|h\!!3@]M}qip {fAL:Ǧ@}ڜgvOϷ<@ Ere::`iG+~}c=RcyyJ7k_aGn9aQOfus y̐YQ뼦 < m۵*]~m ց:ZDqM!mPweAYV=#^/~Ws>)['mCAwta3&WU\ wTKQGPF5\O{6%ߎmNA߬5­Ppt Nj׼’ HxRAHY1C#^/V[q=#49#=glΞW?=*~Nr*Vv۰K@H`دd [Ah|J{=r&5`3Q;w<7c*|mFcg[@hxb zlN_okAW~79cTE[LKxB^t|\~7o@Km|=LL0} c5xvwT HuT&Mu6F#_9c L=&=o+jS|85O\#GL:ZMsO羗Îc;}j<ŘxZΈe%˗1}"oGSMfeR[ D򉶰t󅜴a ܄^yU֪K꽦#B\Ldw7qcx~jԍkW[Lr4.et[ve=wħ5a~m3/) ;oYA]{p \/n@o|LZ>?+fc(1vm:WK|#&>jυKDb?jŭwRh 7/nz HhKΩGq} jD"xcx!":-fO^<þ FYz ټi{ѱX3kN×f_B^?z=\LJ^\[FIDs{3A=f{oU^ڒkƺv90ݫQieWTOov3Mqk-Rc\SÀ+LjL.rcZh~>5%Z6:lA^Q󯓑_C.o:#՞)\ ݴJY T(788${x%zr(NSOӄ_J?C^eXEzRScV;*fʧm5@.+t|V+c&ϫ|\8vx:nCAȣ.Cyq_>:ד\ >-hTaNoĭ"^Iߓ$'\0ݶI}[4:X'g1u˻:V+_z~ei:jƵ\z`./F?/E_웉|b^FwxZN0+=c9:tm|?1lDY9QfA=sFO|~\cg0UA&s7'=p{t(]Ng΁.g>W/L˖]5Kʫ/1~-?w* -?ש'$_@o(`1]cBR+qWgN5.h__=q٧ބ홰=9p"`)ߣ>H,]*7x"g\=:]'}#ϩ,]yS/6(F<>*mTwr.쟸5w|k+j9i~g߉~a=pS~3p<J?/iKԷ{d>W} V4d?I?s9,3'ꢋv= L~Mz.Skov]S%nЪGB11֋S;gr{B\:6/n-JV千(eV <@zks8㶰Ŏ:\FO>] =$ieig'b-q=._>'ǭΩ}>DZ,`E.9/ґ| ~%PirN ךwљY@WL&W8'9w`FڭtIn}KhB<R/>|q]|=v5.MT@Ϊu >[p`5ϻU?YqQMC?:5mS9ƕ;sfգeʓ#7# |rrʺKwp bt=s !\_3z{Oyݰ({3%yVJ!rKīxO['E۲TZJi:_?.y)fEXf4䏿#W79'6iٜye)n;c{P\r0s;D;N ޾YtY+ujK}/,]>|n r{ȃ䆛=; Ovq-NQI=U+y wNK/QJHt:R1?|:. h NJEoYm{ xL*yId)?BD<Ll yS?݊}8kØiߑ'-ieܰLZܵSKmOǯ+!,y0Ԍ~Q}Yy ucfX/S0y-> jr.w1TU}]VO-++!׽-f"N]ح\{Ȼ }S cި{!o4=웶)~z_\0qB|&i^&=sog6=G`~Mg>7Ivstz9/y~iywL|'Ggv)u+ ΣQ%32x =z7֑f>4ލD>i4q(n_B_ݻ >I5.*"$\('^63w G~&I{?o q8 HFb`$ xdqb͖&'1 OyXunrӴxl`ŭ٢1DfטSʡ. ooI2|8 q"^~r_S/-WFݭ %~E{c|Dp8b0E}|x9Vc=".ǠolkS0?icWsBSx 8<%PקԬz8sT[T$"&_2J|vNNO19ZC/]jmdv7PVX4)갈fhdV湤ÈJ^g*2mmNQ.!&s=sNĩEGg=Aע>c福b8/#J#Жej"~gq+# Ŭ4g>WXu6^ki_~Aq,elbBbGEyWA'GNS[q Y=P?&曎f{[e,GlY eWPO7l}yZi&c:"1wG>\ []jKn@}?i K$DsM{}gpy>}K|Lꄸh3tniT%h]dN59Wf =#BkB)Aq!U#s!N}Ouk#j;.c_,>~yhNlk:u;֋UmǪWfNz>Q^O1-,|/e=ZwӴE󣈫l)hvm}C+*+anW(ytL¯ k"/%ܡXcrzbDz03%{q#3q<đ0;KԳ' yE]cO[4ʻG\ :?hD_8|mqϨ UB^KZ[`>peEOlcy.wh5[V͡x6eZ'uʀOB](@T9OrԻ /c?G)OQv>hzgu.kODO]߶C>tu:M( <$< hӛs{q1 Djxcӫtn:l}þ)~xEi3qwCh+xݤǘgރ;qlfNH.c!}R!|oIuM[A!''痝Omyѥf|:!adtIDŽ[95='K*$-R sLo _lPl!Ś3|p9xFƉ司[ᡫ'9}eG,UucCMVu'=},c?[3^%A\8JUq6X~%!]Xdt?M\sf9NV>8٨]o>s^W##KԂ]T)E; oEoy80‡ȓ ݎOGaϙח4{Şƚj甬i.yͣy-עڽCB}pB9s#Gb7Z~ "ϰE\E< NO?r??+rr^aԷY˜ g2)^ź\P.Q}>C93&ε'%ƒo +k=;}u-O)=Fjr/Z/]No;zA2 }yC<0_W݋={vGCЈ;Q .-Dވí/S"Yd&{?:m7􇠐ǮiZ1X8H#uw:oѳ6%G]c:o@6ueC(p7QB~uk._;y։wAks+ra}k,j7<ym~{VePOJufވר| j]=uH߳H_A~}puqI/E yG^)T{0Y=[؏fma@sbsGZAo }ś#h씅H9k ']Ӄ>8;wK=)D[zmO$c, *ƹ )`l#C=O9& Y2^&!hr V C3&(GB _Ǟ\KH]k׸} +\=>)~d[ۉǩZyf vXjoڰ@9;E|68;mӻϭ󬰯%pL q|.1{Eݒ 6L7<*ވ`؊9c}ңXKpJfus A EE~6y##xgmÒyԆZ/?@Ny1?}^A&(o}SjL} g7BqSM[J9#5P&h:uGH:]mB瞇UZÏ=RGvB,#Mʶ<>^'=ev8vsG*ɺ6w/kX煨)ˇ#аAz}HI8oFlRi8=ߊEz2fW\hJ܁xM=.Ǚ'לj: aύ8r{|D?gHe2=岅,n)Zmi|= _P#j A!PP(EA1XP(J%A)TP(jHSP3P9%5 -=-jNΠ.n^ޠ>@}A@A@A@AC@CA@A#@#A@Ac@cA@A@A@AS@SA@A3@3A@As@sA@A @'   Z ZZ    ]]]]]k~ tttt tttt;>!1 )9%5 -;{}O'gW7"MK?9,A?s?s?s?s?s?s?s?g999999995p.s?s?s?s?s?s?s?s 9999999k9999999 9999999 99999999999999999999999999999999999999999雗8999999999999bHyyyyyyf+yyyf"y[xyyyysP<?<?<?<?f>C@Z24Ɣlݢnzf7Jg~_`7r|?Ɯq鍣»ѾNߡt>/3 ~~]3KP9qWxl3ck) C+y #fb @rg!yݽbZ[O)e Bk^7ֆ32xtM P'xJSOhk5{K\{|m>H_:S{qېyv " zrQz*1s Kg^ cL;%5ӛGeʲC+ nHzeoݖlUگaHkkVٯNxujL&i r, oLjXMq9bNzuoJ5TI46ϲ 4+Sp}Ȃ+G+ qxfhf,1tof3NYPYZpkVƻXk QF)UnoC1^iDَxXƵGg4V⿛^MBoeuk1v޵۲Ǻ EoZɪo!:v߲:`!ԥ1L#1gGս6=+jR|(YT.bV s2gI VmGzΡw%eBz#:zNÅ2!VMzd/\Ӧ{-K3aŊ7_qI 9ĩeݝAˇt>g_ʍuRsyЋ+yH~/b`iD]ͩ2*=_L:4evGsuʞYzxY{j<^xr^8VezfW%tWOY$ehO<ٰEʛ#8˓ gt^ ESLmUkHvs^Slz9g&$OǺNNTq[2NhV"(!%6^8;xG~/-7?vz"39on|kSUW#Un!rzs ]{:O5@jTttM񛧇EF3Ϭdc_qدTK&V{yR9^AV6Y덆aԶ$ 3]zTI迷E]qcttn""ދظe˵hfvۿuW|W2 \;O!Ss[F-,ҾoNd;+ienu2R_K;[s:+JMMnhGÒxy 3@;V'o x6uخug,j*,IYqhmFYN$ khܱꦹ,-ez.(*@G2sY: k@ɐ( w4P߁tddnV @+@ )pӟ_2Z'eZYaDmW3s w" Q?;SKjx4y6ąl_4t式+vX 03"" [Mjʈdx[sOVN"݀ ϞQtw]#vJ-V6%gqPAk/\|sz҇e5lqQOre?>{P-?j.P-˒ÓB=\ԒlwFI+ke/޼8mq5$1Fxk8̬UyO ~lh')GgLBgӻ{p{, ۣ&QKE3UoAib{FyoMSUy :Oe2c tT[<{<W86+ˈX)ok QĊ>^aV?S33ԝ?9aa}XS]rZu{V8U0mt_l"vG L?q\u&+,WG rT$cqo9$Tjmi\The" ,e\rU+|z[ҤM礈HDRjX T:70HY<ݛfËEI布ˌH-Du ASĂ8DEjclsŢҙCa‹1t};{yS$"sS h=Kp]['֝"" p}.fݷ@n}JY$n2;ڜ<@2a:F sC}v?|Wtl7D;MCiLEsyI/G4f#99sL245 t?8]\^"r}eP;\5R~GG$8M f0 i@NzQTCܤGs3E:z[+  ӒQv_jPv##@-vLT'PبvoUvLcL[([LӚ#sI`A\\srQ!:}aՠF_Gp+$Y0гi^ƴIiawjvΒ1rAP~/pT> [/ՆT)$VYKB )I޷.PxVTK,JSRPp\J^M%+R!|Q_W;.{ 7" mjĒ\&(dbM- 1Jn5R'oQI`4%HWBg($c5#Ah$'O] P.~a:$+P'ԘRȞEu֍v]-X mxXn' ZRf*qE@qm15 nrF^tŝ!0fFA5khX&[mэ*-k(ƱcXַ5j1mZ(ň-EFmx jnRZ6()77w[lX 9]ɍ[sDZxSnwjUK D̰IW4EA\܊Qsmsi6KHX.Uijs3oʹQԕDk4II% r2^pĐfl&*3!\xib,@#Hѐ3(sphnU69zO-7 5jw:(хr#twwwMk%,3$LHZs5 +7eLN Մwr3E&ǡh\M(O;& sw]0$ @ZL!B&&|3SDwY xIH LG4 u LeՒkKF&e2Dp6R] 3ZKڭ2BP e X04Se#cں3$bnLU Mmj$rdf cƹkq5 83-LY2 2fP*$KiP"H3)a"&R$G :^3@4\T&"fQW;* h(bfp!eT0WO$^IFcf."nr4)e:.a7))unE @,b%:D0J҉-9MӾHI\:$(p ;u/a!S澥^(Ȇi03a,9PLrU'_Xo;]9$BbI$K\I1(tb 3&ebEUeәȘ@A10'pk&% k\ 2 ޶`N&sdN LIhu:Ԛ%3)fG4jK)B99ڐubQ]˭ܗN&ѪFgo^^lᲆrVف@h@U 8Ƅ"%0RVլiiv d ;Hhk޲ Kfg7Nw L *gayqޗwXmI ̫MW]  8Pɨg!x;祝GWGm5X1x6j Yŝ]ɣ2eHqғE;n$Çi]"d4ofBGý 'MCLӘw++ 0M\$9# -L5\!,b dd A=rrږ!MfPi, ֙C5S=m|i sToMM̙q{VYMY5@GC 'HQ $H}0ֱe&cDe2s/! aD)"HMqJSn,A VLQ1 8^k-{kۦu\/wW4Xm R3Q+u^nd!,Alފa#S$elo ml,F5(?kᄉ8wWen)yםD!e{JNqVz:=OB`˒UX{NG6߽[|1([ d A9d$ھ弖mۘ .[[ sEje@f4 (E& "*͓FM퓡pg"H&0K0d d1 xW4BDSK ؙ8\0g+ozuv" 8%wob@K >h9+2ފsÒ7\=ٽ{C1NH(hBe25)9;0)܋fD06DQ[t :pVY)h˄ZgE9p2a r/wbG[e BLP9h) 3"dK+,$fP<imdG/\%<>]鑒R,rdoָMFraw|9R@Xq;KɹzzfnkjlYf_5"4Iȱ2DX`(v;DÆK,4 @!lҶ"tuj6 gI#Wd:w|ѫ2܋/MxݓFthXµmQ0DZ, f(Ed#yL}V" VleOK&'ɛ$Ό٨tIN==Ȉhjx,=Y<;$Iwn"xS{Oܶi`r, q>LSm?vGϛ |X2Fz&KB]ewQߓ)Ckj;,J'JG/%Dm*33}W-mt_]j6}k$)e1 H%`F >c' xɫ-J"bL'sAq9:Yt.D*@xrgi c&=U+ B'hLӗRV@mќjZ4&[M9;Chu][zJu8F=|V0"+dᆒ5c6r-v`FSڃ]>L#ss.׽x\yNfyHvW{FޛpBmum`̳Ativl)7֛,W5j(杫C2K o&QqY)?vpN|Z1i@ۓSg~p܇aۘ9rE-wXk-u]*Tu<4c/{0s nbhy-Eɽ:xujvYi:t; }jN ^P̵yB&:'$"9K$w"orrj>B72vp Axo ҘVZ]LVrxw1v KS;7 h(+&֨Ihbzuw+5۷^YNOs˲g$1^8\J)yaj<~[+kZ4\6J rW0Q8V!` XS΃&{+j|["}M{9Z>zol`v԰>2uH !9`XgL+k3[5vJ J,dF鮐6b@CZM5_>vyL#^[rײN{[M/ÆWm*]Qkʗa EoKǡ(;už&_Ia%n\k;pZl_$ƭKbbR'\ɷ%x7Uwτ._ c;vDezbs4v_Ik ڬ"<'dַ/U]G{ebօ3; 3EͰ\<[0t#'4򟉼͕IΫ`SbM޵٢»84{+c~|ozFikG" ڐ&d7jS|Gl>l~ Q֚<D7 ?ӹ3dHTw]9,ۖ=qƞcb>lk6o>=.4a%=ݎY!3s-to2YR٭/_Fr}h]ueMG|xb,1}ѺC( Lu|-Z\q2\#LZ rZz = )CBL]r^نW4qz⵶D5w0P]21Mdu,$.G/\{_ œ/X=9:TPvu&K"v5xxXޚئ0Rgl}UhlaY/aYȚZ詂<ܶ㣿8kW-iރws Lxuku33lT]iMiΜ@i`J:svYgN*Pphz.1C^1~˸]xY"~,.{vxڛ"F6}^'uvnvo{99nlp5)No~J;}2O._o>d{ rq@gqiM! 1 @k]d{?Z,1>Xs\[?Z9ɥG 3y ϸy؂ RA/3xʬ~3@[8^Yr>fO D_T(̬Gb`` CSHbX9=X!WIM*}#uŢU"Ӑܤ\+O\J#Qpy^jBx꓌U/Kݻ0вea 0%zZ &'Oa2ܟQ F0k ϟβs% >ob .g,&%{m)*6EEaoʄ95DBMil#A,m9 W`ӗ''[Bױ>`R r h}^n#ŨN7aFvܣ"OfOA@PQ o,oK!N,YJO 5<GR> kYLu1D?Ie͡6gC @1qW83?}4^]G)b!3&B48Y ZD5sf3s|~@ MM{rBZ-@4eUU :MKoJk-4""DȌ'o).V/ 3rvH х76 WAAZ9vId$``@xEH"&2 p9VX6ꦂ=Zafa016͎;>7᣽9@A2*S$(T,a"+'^eQ|FRܡG Lq^y12G )P!bՒ Tj+ա;6^/?uNiѝL@Qp:C",OGIsf{b" /ޤ*pRp 8>< 4LbR zkD<ͩbm*w$S caret/data/oil.RData0000644000176200001440000000272113153613153013764 0ustar liggesusersBZh91AY&SY3r`o'ݠA0 A& I$mm]yusv`UPHIF=C#&<4Ѵ4LLj40jM CAiR i46@oQ2b00ha4 Ɉ2`L`b`bb&T2Chz4ɠ4P4$S#@h@h@ѐJ FD4h2h b~$",yA>o=zr(<#~>(EF Ryg_gӪv$BJHQ W H{,I%`B `5SFE,BG7 [|܌]I$I5Us 1cc *@9s'I*A|^p0DmқlI[,?6eV*)duf"\[ccu1 lpBrUG2-dŒC%.ãQ) 5D:ig% J@6YFTV"ʢӹv˶Ga)NpcO#tcP+&_^[ٰy8uzt~/vfB":PUZ)"  D33333sLHfgt)@Pf&j}%}Oq]}Ѧ*oEmJW,_21&,V,v0H܌JYko->4N϶"  o9?ۺ;n\tav 5DȪ`l[OmQv{^Ý]*mE(($!@JY5KhQ+@5@(֦S<6廹!x\}!4sO]C <Kf#՗9O9]#U7oc i/)H)"uJs)Kd)C.p!$f`caret/R/0000755000176200001440000000000013206640141011546 5ustar liggesuserscaret/R/lattice.train.R0000644000176200001440000002217513153613153014445 0ustar liggesusers#' @importFrom stats as.formula #' @export densityplot.train <- function(x, data = NULL, metric = x$metric, ...) { if (!is.null(match.call()$data)) warning("explicit 'data' specification ignored") if(x$control$method %in% c("oob", "LOOCV")) stop("Resampling plots cannot be done with leave-out-out CV or out-of-bag resampling") resamp <- x$resample tNames <- gsub("^\\.", "", names(x$bestTune)) # adapt formula to work with muliple metrics mName <- names(resamp)[names(resamp) %in% metric][1] # Look for constant tuning parameters and remove them numVals <- unlist( lapply(resamp, function(u) length(unique(u)))) if(any(numVals == 1)) { # make sure that these are tuning parameters resamp <- resamp[, numVals > 1, drop = FALSE] tNames <- tNames[tNames %in% names(numVals)[numVals > 1]] } # Create the formula based on the data formText <- paste("~", mName) if(any(tNames %in% colnames(resamp))) { formText <- paste(formText, "|", paste( tNames, collapse = "*")) } form <- as.formula(formText) densityplot(form, data = resamp, ...) } #' Lattice functions for plotting resampling results #' #' A set of lattice functions are provided to plot the resampled performance #' estimates (e.g. classification accuracy, RMSE) over tuning parameters (if #' any). #' #' By default, only the resampling results for the optimal model are saved in #' the \code{train} object. The function \code{\link{trainControl}} can be used #' to save all the results (see the example below). #' #' If leave-one-out or out-of-bag resampling was specified, plots cannot be #' produced (see the \code{method} argument of \code{\link{trainControl}}) #' #' For \code{xyplot} and \code{stripplot}, the tuning parameter with the most #' unique values will be plotted on the x-axis. The remaining parameters (if #' any) will be used as conditioning variables. For \code{densityplot} and #' \code{histogram}, all tuning parameters are used for conditioning. #' #' Using \code{horizontal = FALSE} in \code{stripplot} works. #' #' @aliases stripplot.train xyplot.train densityplot.train histogram.train #' @param x An object produced by \code{\link{train}} #' @param data This argument is not used #' @param metric A character string specifying the single performance metric #' that will be plotted #' @param \dots arguments to pass to either #' \code{\link[lattice:histogram]{histogram}}, #' \code{\link[lattice:histogram]{densityplot}}, #' \code{\link[lattice:xyplot]{xyplot}} or #' \code{\link[lattice:xyplot]{stripplot}} #' @return A lattice plot object #' @author Max Kuhn #' @seealso \code{\link{train}}, \code{\link{trainControl}}, #' \code{\link[lattice:histogram]{histogram}}, #' \code{\link[lattice:histogram]{densityplot}}, #' \code{\link[lattice:xyplot]{xyplot}}, #' \code{\link[lattice:xyplot]{stripplot}} #' @keywords hplot #' @examples #' #' \dontrun{ #' #' library(mlbench) #' data(BostonHousing) #' #' library(rpart) #' rpartFit <- train(medv ~ ., #' data = BostonHousing, #' "rpart", #' tuneLength = 9, #' trControl = trainControl( #' method = "boot", #' returnResamp = "all")) #' #' densityplot(rpartFit, #' adjust = 1.25) #' #' xyplot(rpartFit, #' metric = "Rsquared", #' type = c("p", "a")) #' #' stripplot(rpartFit, #' horizontal = FALSE, #' jitter = TRUE) #' #' } #' @export histogram.train <- function(x, data = NULL, metric = x$metric, ...) { if (!is.null(match.call()$data)) warning("explicit 'data' specification ignored") if(x$control$method %in% c("oob", "LOOCV")) stop("Resampling plots cannot be done with leave-out-out CV or out-of-bag resampling") resamp <- x$resample tNames <- gsub("^\\.", "", names(x$bestTune)) # adapt formula to work with muliple metrics mName <- names(resamp)[names(resamp) %in% metric][1] # Look for constant tuning parameters and remove them numVals <- unlist( lapply(resamp, function(u) length(unique(u)))) if(any(numVals == 1)) { # make sure that these are tuning parameters resamp <- resamp[, numVals > 1, drop = FALSE] tNames <- tNames[tNames %in% names(numVals)[numVals > 1]] } # Create the formula based on the data formText <- paste("~", mName) if(any(tNames %in% colnames(resamp))) { formText <- paste(formText, "|", paste( tNames, collapse = "*")) } form <- as.formula(formText) histogram(form, data = resamp, ...) } #' @importFrom stats as.formula #' @export stripplot.train <- function(x, data = NULL, metric = x$metric, ...) { if (!is.null(match.call()$data)) warning("explicit 'data' specification ignored") if(x$control$method %in% c("oob", "LOOCV")) stop("Resampling plots cannot be done with leave-out-out CV or out-of-bag resampling") resamp <- x$resample tNames <- gsub("^\\.", "", names(x$bestTune)) # adapt formula to work with muliple metrics mName <- names(resamp)[names(resamp) %in% metric][1] # Look for constant tuning parameters and remove them numVals <- unlist( lapply(resamp, function(u) length(unique(u)))) if(any(numVals == 1)) { # make sure that these are tuning parameters resamp <- resamp[, numVals > 1, drop = FALSE] tNames <- tNames[tNames %in% names(numVals)[numVals > 1]] } # determine which tuning parameter has the most values tNames1 <- names(which.max(numVals[names(numVals) %in% tNames])) tNames2 <- tNames[!(tNames %in% tNames1)] # The variable in tNames1 will be converted to a factor, so # we will make sure that numeric data gets changed correctly resamp[,tNames1] <- factor( as.character(resamp[,tNames1]), levels = paste( sort(unique(resamp[,tNames1])))) # Create the formula based on the data if(any(tNames %in% colnames(resamp))) { theDots <- list(...) if(any(names(theDots) == "horizontal")) { formText <- if(theDots$horizontal) paste(tNames1, "~", mName) else paste(mName, "~", tNames1) } else formText <- paste(tNames1, "~", mName) if(length(tNames2) > 0) { formText <- paste(formText, "|", paste( tNames2, collapse = "*")) } } else formText <- paste("~", mName) form <- as.formula(formText) stripplot(form, data = resamp, ...) } #' @importFrom stats as.formula #' @export xyplot.train <- function(x, data = NULL, metric = x$metric, ...) { if (!is.null(match.call()$data)) warning("explicit 'data' specification ignored") if(x$control$method %in% c("oob", "LOOCV")) stop("Resampling plots cannot be done with leave-out-out CV or out-of-bag resampling") resamp <- x$resample tNames <- gsub("^\\.", "", names(x$bestTune)) # adapt formula to work with muliple metrics mName <- names(resamp)[names(resamp) %in% metric][1] # Look for constant tuning parameters and remove them numVals <- unlist( lapply(resamp, function(u) length(unique(u)))) if(any(numVals == 1)) { # make sure that these are tuning parameters resamp <- resamp[, numVals > 1, drop = FALSE] tNames <- tNames[tNames %in% names(numVals)[numVals > 1]] } # determine which tuning parameter has the most values tNames1 <- names(which.max(numVals[names(numVals) %in% tNames])) tNames2 <- tNames[!(tNames %in% tNames1)] # Create the formula based on the data if(any(tNames %in% colnames(resamp))) { formText <- paste(mName, "~", tNames1) if(length(tNames2) > 0) { formText <- paste(formText, "|", paste( tNames2, collapse = "*")) } } else stop("there must be at least one tuning parameter for a scatter plot") form <- as.formula(formText) xyplot(form, data = resamp, ...) } caret/R/varImp.R0000644000176200001440000004305213153613153013137 0ustar liggesusers#' Calculation of variable importance for regression and classification models #' #' A generic method for calculating variable importance for objects produced by #' \code{train} and method specific methods #' #' For models that do not have corresponding \code{varImp} methods, see #' \code{\link{filterVarImp}}. #' #' Otherwise: #' #' \bold{Linear Models}: the absolute value of the t--statistic for each model #' parameter is used. #' #' \bold{\code{glmboost}} and \bold{\code{glmnet}}: the absolute value of the coefficients #' corresponding the the tuned model are used. #' #' \bold{Random Forest}: \code{varImp.randomForest} and #' \code{varImp.RandomForest} are wrappers around the importance functions from #' the \pkg{randomForest} and \pkg{party} packages, respectively. #' #' \bold{Partial Least Squares}: the variable importance measure here is based #' on weighted sums of the absolute regression coefficients. The weights are a #' function of the reduction of the sums of squares across the number of PLS #' components and are computed separately for each outcome. Therefore, the #' contribution of the coefficients are weighted proportionally to the #' reduction in the sums of squares. #' #' \bold{Recursive Partitioning}: The reduction in the loss function (e.g. mean #' squared error) attributed to each variable at each split is tabulated and #' the sum is returned. Also, since there may be candidate variables that are #' important but are not used in a split, the top competing variables are also #' tabulated at each split. This can be turned off using the \code{maxcompete} #' argument in \code{rpart.control}. This method does not currently provide #' class--specific measures of importance when the response is a factor. #' #' \bold{Bagged Trees}: The same methodology as a single tree is applied to all #' bootstrapped trees and the total importance is returned #' #' \bold{Boosted Trees}: \code{varImp.gbm} is a wrapper around the function #' from that package (see the \pkg{gbm} package vignette) #' #' \bold{ Multivariate Adaptive Regression Splines}: MARS models include a #' backwards elimination feature selection routine that looks at reductions in #' the generalized cross-validation (GCV) estimate of error. The \code{varImp} #' function tracks the changes in model statistics, such as the GCV, for each #' predictor and accumulates the reduction in the statistic when each #' predictor's feature is added to the model. This total reduction is used as #' the variable importance measure. If a predictor was never used in any of the #' MARS basis functions in the final model (after pruning), it has an #' importance value of zero. Prior to June 2008, the package used an internal #' function for these calculations. Currently, the \code{varImp} is a wrapper #' to the \code{\link[earth]{evimp}} function in the \code{earth} package. #' There are three statistics that can be used to estimate variable importance #' in MARS models. Using \code{varImp(object, value = "gcv")} tracks the #' reduction in the generalized cross-validation statistic as terms are added. #' However, there are some cases when terms are retained in the model that #' result in an increase in GCV. Negative variable importance values for MARS #' are set to zero. Alternatively, using \code{varImp(object, value = "rss")} #' monitors the change in the residual sums of squares (RSS) as terms are #' added, which will never be negative. Also, the option \code{varImp(object, #' value =" nsubsets")}, which counts the number of subsets where the variable #' is used (in the final, pruned model). #' #' \bold{Nearest shrunken centroids}: The difference between the class #' centroids and the overall centroid is used to measure the variable influence #' (see \code{pamr.predict}). The larger the difference between the class #' centroid and the overall center of the data, the larger the separation #' between the classes. The training set predictions must be supplied when an #' object of class \code{pamrtrained} is given to \code{varImp}. #' #' \bold{Cubist}: The Cubist output contains variable usage statistics. It #' gives the percentage of times where each variable was used in a condition #' and/or a linear model. Note that this output will probably be inconsistent #' with the rules shown in the output from #' \code{\link[Cubist]{summary.cubist}}. At each split of the tree, Cubist #' saves a linear model (after feature selection) that is allowed to have terms #' for each variable used in the current split or any split above it. Quinlan #' (1992) discusses a smoothing algorithm where each model prediction is a #' linear combination of the parent and child model along the tree. As such, #' the final prediction is a function of all the linear models from the initial #' node to the terminal node. The percentages shown in the Cubist output #' reflects all the models involved in prediction (as opposed to the terminal #' models shown in the output). The variable importance used here is a linear #' combination of the usage in the rule conditions and the model. #' #' \bold{PART} and \bold{JRip}: For these rule-based models, the importance for #' a predictor is simply the number of rules that involve the predictor. #' #' \bold{C5.0}: C5.0 measures predictor importance by determining the #' percentage of training set samples that fall into all the terminal nodes #' after the split. For example, the predictor in the first split automatically #' has an importance measurement of 100 percent since all samples are affected #' by this split. Other predictors may be used frequently in splits, but if the #' terminal nodes cover only a handful of training set samples, the importance #' scores may be close to zero. The same strategy is applied to rule-based #' models and boosted versions of the model. The underlying function can also #' return the number of times each predictor was involved in a split by using #' the option \code{metric = "usage"}. #' #' \bold{Neural Networks}: The method used here is based on Gevrey et al #' (2003), which uses combinations of the absolute values of the weights. For #' classification models, the class-specific importances will be the same. #' #' \bold{Recursive Feature Elimination}: Variable importance is computed using #' the ranking method used for feature selection. For the final subset size, #' the importances for the models across all resamples are averaged to compute #' an overall value. #' #' \bold{Feature Selection via Univariate Filters}, the percentage of resamples #' that a predictor was selected is determined. In other words, an importance #' of 0.50 means that the predictor survived the filter in half of the #' resamples. #' #' @aliases varImp varImp.train varImp.earth varImp.rpart varImp.randomForest #' varImp.gbm varImp.regbagg varImp.classbagg varImp.pamrtrained varImp.lm #' varImp.mvr varImp.bagEarth varImp.bagFDA varImp.RandomForest varImp.rfe #' varImp.dsa varImp.fda varImp.multinom varImp.cubist varImp.plsda varImp.JRip #' varImp.PART varImp.nnet varImp.C5.0 varImp.glmnet #' @param object an object corresponding to a fitted model #' @param useModel use a model based technique for measuring variable #' importance? This is only used for some models (lm, pls, rf, rpart, gbm, pam #' and mars) #' @param nonpara should nonparametric methods be used to assess the #' relationship between the features and response (only used with #' \code{useModel = FALSE} and only passed to \code{filterVarImp}). #' @param scale should the importance values be scaled to 0 and 100? #' @param \dots parameters to pass to the specific \code{varImp} methods #' @param numTrees the number of iterations (trees) to use in a boosted tree #' model #' @param threshold the shrinkage threshold (\code{pamr} models only) #' @param data the training set predictors (\code{pamr} models only) #' @param value the statistic that will be used to calculate importance: either #' \code{gcv}, \code{nsubsets}, or \code{rss} #' @param surrogates should surrogate splits contribute to the importance #' calculation? #' @param competes should competing splits contribute to the importance #' calculation? #' @param estimate which estimate of performance should be used? See #' \code{\link[pls]{mvrVal}} #' @param cuts the number of rule sets to use in the model (for \code{partDSA} #' only) #' @param weights a numeric vector of length two that weighs the usage of #' variables in the rule conditions and the usage in the linear models (see #' details below). #' @param lambda a single value of the penalty parameter #' @return A data frame with class \code{c("varImp.train", "data.frame")} for #' \code{varImp.train} or a matrix for other models. #' @author Max Kuhn #' @references Gevrey, M., Dimopoulos, I., & Lek, S. (2003). Review and #' comparison of methods to study the contribution of variables in artificial #' neural network models. Ecological Modelling, 160(3), 249-264. #' #' Quinlan, J. (1992). Learning with continuous classes. Proceedings of the 5th #' Australian Joint Conference On Artificial Intelligence, 343-348. #' @keywords models #' @export varImp "varImp" <- function(object, ...){ UseMethod("varImp") } #' @importFrom stats4 coef GarsonWeights <- function(object) { beta <- coef(object) abeta <- abs(beta) nms <- names(beta) i2h <- array(NA, dim = object$n[2:1]) h2o <- array(NA, dim = object$n[2:3]) for (hidden in 1:object$n[2]) { for (input in 1:object$n[1]) { label <- paste("i", input, "->h", hidden,"$", sep = "") i2h[hidden, input] <- abeta[grep(label, nms, fixed = FALSE)] } } for(hidden in 1:object$n[2]){ for(output in 1:object$n[3]){ label <- paste("h", hidden, "->o", ifelse(object$n[3] == 1, "", output), sep = "") h2o[hidden,output] <- abeta[grep(label, nms, fixed = TRUE)] } } if(FALSE) { ## Test case from Gevrey, M., Dimopoulos, I., & Lek, ## S. (2003). Review and comparison of methods to study the ## contribution of variables in artificial neural network ## models. ecological modelling, 160(3), 249-264. i2h <- matrix(c(-1.67624, 3.29022, 1.32466, -0.51874, -0.22921, -0.25526, -4.01764, 2.12486, -0.08168, -1.75691, -1.44702, 0.58286), ncol = 3, byrow = TRUE) h2o <- matrix(c(4.57857, -0.48815, -5.73901, -2.65221), ncol = 1) } ## From Gevrey et al. (2003): "For each hidden neuron i, multiply ## the absolute value of the hidden-output layer connection ## weight by the absolute value of the hidden-input layer ## connection weight. Do this for each input variable j. The ## following products Pij are obtained" ## We'll do this one response at a time. Gevrey et al. (2003) do ## not discuss multiple outputs, but the results are the same (at ## least in the case of classification). imp <- matrix(NA, nrow = object$n[1], ncol = object$n[3]) for(output in 1:object$n[3]) { Pij <- i2h * NA for(hidden in 1:object$n[2]) Pij[hidden,] <- i2h[hidden,] * h2o[hidden,output] ## "For each hidden neuron, divide Pij by the sum for all the ## input variables to obtain Qij. For example for Hidden 1, Q11 = ## P11/(P11+P12+P13). Qij <- Pij * NA for(hidden in 1:object$n[2]) Qij[hidden,] <- Pij[hidden,] / sum(Pij[hidden,]) ## "For each input neuron, sum the product Sj formed from the ## previous computations of Qij. For example, S1 = ## Q11+Q21+Q31+Q41." Sj <- apply(Qij, 2, sum) ## "Divide Sj by the sum for all the input variables. Expressed as ## a percentage, this gives the relative importance or ## distribution of all output weights attributable to the given ## input variable. For example, for the input neuron 1, the ## relative importance is equal to (S1/100)/(S1+S2+S3)" imp[,output] <- Sj/sum(Sj)*100 rm(Pij, Qij, Sj) } colnames(imp) <- if(!is.null(colnames(object$residuals))) colnames(object$residuals) else paste("Y", 1:object$n[3], sep = "") rownames(imp) <- if(!is.null(object$coefnames)) object$coefnames else paste("X", 1:object$n[1], sep = "") imp } GarsonWeights_FCNN4R <- function (object, xnames = NULL, ynames = NULL) { beta <- abs(object$net@m_w_values[which(object$net@m_w_flags != 0L)]) dims <- object$net@m_layers index <- (dims[1]+1)*dims[2] i2h <- t(matrix(beta[1:index], ncol = dims[2])) i2h <- i2h[, -1,drop = FALSE] h2o <- matrix(beta[(index+1):length(beta)], ncol = dims[3]) h2o <- h2o[-1,,drop = FALSE] imp <- matrix(NA, nrow = dims[1], ncol = dims[3]) for (output in 1:dims[3]) { Pij <- i2h * NA for (hidden in 1:dims[2]) Pij[hidden, ] <- i2h[hidden,] * h2o[hidden, output] Qij <- Pij * NA for (hidden in 1:dims[2]) Qij[hidden, ] <- Pij[hidden,]/sum(Pij[hidden, ]) Sj <- apply(Qij, 2, sum) imp[, output] <- Sj/sum(Sj) * 100 rm(Pij, Qij, Sj) } rownames(imp) <- if(is.null(xnames)) paste("X", 1:dims[1], sep = "") else xnames colnames(imp) <- if(is.null(ynames)) paste("Y", 1:dims[3], sep = "") else ynames imp } varImpDependencies <- function(libName){ code <- getModelInfo(libName, regex = FALSE)[[1]] checkInstall(code$library) for(i in seq(along = code$library)) do.call("requireNamespaceQuietStop", list(package = code$library[i])) return(code) } #' @rdname varImp #' @export varImp.bagEarth <- function(object, ...){ code <- varImpDependencies("bagEarth") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.bagFDA <- function(object, ...){ code <- varImpDependencies("bagFDA") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.C5.0 <- function(object, ...){ code <- varImpDependencies("C5.0") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.cubist <- function(object, weights = c(0.5, 0.5), ...){ code <- varImpDependencies("cubist") code$varImp(object, weights = weights, ...) } #' @rdname varImp #' @export varImp.dsa <- function(object, cuts = NULL, ...){ code <- varImpDependencies("partDSA") code$varImp(object, cuts = cuts, ...) } #' @rdname varImp #' @export varImp.glm <- function(object, ...){ code <- varImpDependencies("glm") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.glmnet <- function(object, lambda = NULL, ...){ code <- varImpDependencies("glmnet") code$varImp(object, lambda = lambda, ...) } #' @rdname varImp #' @export varImp.JRip <- function(object, ...){ code <- varImpDependencies("JRip") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.multinom <- function(object, ...){ code <- varImpDependencies("multinom") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.nnet <- function(object, ...){ code <- varImpDependencies("nnet") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.avNNet <- function(object, ...){ code <- varImpDependencies("nnet") imps <- lapply(object$model, code$varImp) imps <- do.call("rbind", imps) imps <- aggregate(imps, by = list(vars = rownames(imps)), mean) rownames(imps) <- as.character(imps$vars) imps$vars <- NULL imps } foo <- function(x) { browser() colMeans(x) } #' @rdname varImp #' @export varImp.PART <- function(object, ...){ code <- varImpDependencies("PART") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.RRF <- function(object, ...){ code <- varImpDependencies("RRF") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.rpart <- function(object, surrogates = FALSE, competes = TRUE, ...){ code <- varImpDependencies("rpart") code$varImp(object, surrogates = surrogates, competes = competes, ...) } #' @rdname varImp #' @export varImp.randomForest <- function(object, ...){ code <- varImpDependencies("rf") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.gbm <- function(object, numTrees = NULL, ...){ code <- varImpDependencies("gbm") code$varImp(object, numTrees = numTrees, ...) } #' @rdname varImp #' @export varImp.classbagg <- function(object, ...){ code <- varImpDependencies("treebag") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.regbagg <- function(object, ...){ code <- varImpDependencies("treebag") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.pamrtrained <- function(object, threshold, data, ...){ code <- varImpDependencies("pam") code$varImp(object, threshold = object$bestTune$threshold, data = object$finalModel$xData, ...) } #' @rdname varImp #' @export varImp.lm <- function(object, ...){ code <- varImpDependencies("lm") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.mvr <- function(object, estimate = NULL, ...){ code <- varImpDependencies("pls") code$varImp(object, estimate = estimate, ...) } #' @rdname varImp #' @export varImp.earth <- function(object, value = "gcv", ...){ code <- varImpDependencies("earth") code$varImp(object, value = value, ...) } #' @rdname varImp #' @export varImp.RandomForest <- function(object, ...){ code <- varImpDependencies("cforest") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.plsda <- function(object, ...){ code <- varImpDependencies("pls") code$varImp(object, ...) } #' @rdname varImp #' @export varImp.fda <- function(object, value = "gcv", ...){ code <- varImpDependencies("fda") code$varImp(object, value = value, ...) } #' @rdname varImp #' @export varImp.gam <- function(object, ...){ mod <- if(any(names(object) == "optimizer")) "gam" else "gamLoess" code <- varImpDependencies(mod) code$varImp(object, ...) } caret/R/dotplot.varImp.train.R0000644000176200001440000000326413153613153015740 0ustar liggesusers#' Create a dotplot of variable importance values #' #' A lattice \code{\link[lattice:xyplot]{dotplot}} is created from an object of #' class \code{varImp.train}. #' #' #' @param x an object of class \code{varImp.train} #' @param top the number of predictors to plot #' @param \dots options passed to \code{\link[lattice:xyplot]{dotplot}} #' @return an object of class \code{trellis}. #' @author Max Kuhn #' @seealso \code{\link{varImp}}, \code{\link[lattice:xyplot]{dotplot}} #' @keywords hplot #' @examples #' #' #' data(iris) #' TrainData <- iris[,1:4] #' TrainClasses <- iris[,5] #' #' knnFit <- train(TrainData, TrainClasses, "knn") #' #' knnImp <- varImp(knnFit) #' #' dotPlot(knnImp) #' #' #' @export dotPlot dotPlot <- function (x, top = min(20, dim(x$importance)[1]), ...) { varSubset <- sortImp(x, top) plotObj <- stack(varSubset) if(dim(varSubset)[2] == 1) { plotObj <- varSubset names(plotObj) <- "values" plotObj$ind <- "Overall" } else plotObj <- stack(varSubset) plotObj$Var <- rep(rownames(varSubset), dim(varSubset)[2]) plotObj$Var <- factor(plotObj$Var, levels = rev(rownames(varSubset))) if(dim(varSubset)[2] < 3) { if(dim(varSubset)[2] > 1) plotObj <- plotObj[plotObj$ind == levels(plotObj$ind)[1],] out <- dotplot( Var ~ values, data = plotObj, as.table = TRUE, xlab = "Importance", ...) } else { out <- dotplot( Var ~ values, data = plotObj, groups = plotObj$ind, auto.key = list(columns = min(3, length(levels(plotObj$ind)))), as.table = TRUE, xlab = "Importance", ...) } out } caret/R/plot.varImp.train.R0000644000176200001440000001012513153613153015223 0ustar liggesusers#' Plotting variable importance measures #' #' This function produces lattice and ggplot plots of objects with class #' "varImp.train". More info will be forthcoming. #' #' For models where there is only one importance value, such a regression #' models, a "Pareto-type" plot is produced where the variables are ranked by #' their importance and a needle-plot is used to show the top variables. #' Horizontal bar charts are used for \code{ggplot}. #' #' When there is more than one importance value per predictor, the same plot is #' produced within conditioning panels for each class. The top predictors are #' sorted by their average importance. #' #' @aliases plot.varImp.train ggplot.varImp.train #' @param x,data an object with class \code{varImp}. #' @param top a scalar numeric that specifies the number of variables to be #' displayed (in order of importance) #' @param \dots arguments to pass to the lattice plot function #' (\code{\link[lattice:xyplot]{dotplot}} and \code{\link{panel.needle}}) #' @param mapping,environment unused arguments to make consistent with #' \pkg{ggplot2} generic method #' @return a lattice plot object #' @author Max Kuhn #' @keywords hplot #' @method plot varImp.train #' @export "plot.varImp.train" <- function(x, top = dim(x$importance)[1], ...) { plotObj <- sortImp(x, top) if(ncol(plotObj) == 2) { plotObj <- plotObj[,1,drop = FALSE] names(plotObj) <- "Importance" } featureNames <- rownames(plotObj) outcomeNames <- colnames(plotObj) if(ncol(plotObj) > 1) { stackedData <- stack(plotObj) stackedData$Feature <- factor(rep(featureNames, length(outcomeNames)), levels = rev(featureNames)) names(stackedData) <- c("Importance", "Class", "Feature") } else { stackedData <- plotObj stackedData$Feature <- factor(rep(featureNames, length(outcomeNames)), levels = rev(featureNames)) names(stackedData) <- c("Importance", "Feature") } formulaText <- ifelse(ncol(plotObj)> 1, "Feature ~ Importance|Class", " Feature ~ Importance") if(x$model == "pam") { impSign <- factor(ifelse(stackedData$Importance > 0, "Positive", "Negative"), levels = c("Positive", "Negative")) stackedData$Importance <- abs(stackedData$Importance) impPlot <- dotplot(as.formula(formulaText), stackedData, groups = impSign, panel = panel.needle, ...) } else { impPlot <- dotplot(as.formula(formulaText), stackedData, panel = panel.needle, ...) } impPlot } #' @rdname plot.varImp.train #' @importFrom utils stack #' @export ggplot.varImp.train <- function (data, mapping = NULL, top = dim(data$importance)[1], ..., environment = NULL) { plotObj <- sortImp(data, top) if (ncol(plotObj) == 2) { plotObj <- plotObj[, 1, drop = FALSE] names(plotObj) <- "Importance" } featureNames <- rownames(plotObj) outcomeNames <- colnames(plotObj) if (ncol(plotObj) > 1) { stackedData <- stack(plotObj) stackedData$Feature <- factor(rep(featureNames, length(outcomeNames)), levels = rev(featureNames)) names(stackedData) <- c("Importance", "Class", "Feature") ## to avoid R CMD check warnings: # ggplot.varImp.train: no visible binding for global variable 'Feature' # ggplot.varImp.train: no visible binding for global variable 'Importance' Feature <- Importance <- NULL out <- ggplot(stackedData, aes(x = Feature, y = Importance))+ geom_bar(stat = "identity") + facet_wrap(~Class) + coord_flip() } else { stackedData <- plotObj stackedData$Feature <- factor(rep(featureNames, length(outcomeNames)), levels = rev(featureNames)) names(stackedData) <- c("Importance", "Feature") out <- ggplot(stackedData, aes(x = Feature, y = Importance))+ geom_bar(stat = "identity") + coord_flip() } out } caret/R/print.varImp.train.R0000644000176200001440000000125713153613153015407 0ustar liggesusers#' @method print varImp.train #' @export "print.varImp.train" <- function(x, top = min(20, dim(x$importance)[1]), digits = max(3, getOption("digits") - 3), ...) { cat(x$model, "variable importance\n\n") printObj <- sortImp(x, top) if(dim(x$importance)[2] > 2) cat(" variables are sorted by maximum importance across the classes\n") if(top < dim(x$importance)[1]) cat(" only ", top, " most important variables shown (out of ", dim(x$importance)[1], ")\n\n", sep = "") if(dim(printObj)[2] == 2) { printObj <- printObj[,1,drop = FALSE] names(printObj) <- "Importance" } print(printObj, digits = digits, ...) invisible(x) } caret/R/resampleWrapper.R0000644000176200001440000000075713153613153015057 0ustar liggesusers#' @rdname caret-internal #' @export resampleWrapper <- function(x, ind) { out <- rep(NA, dim(x$data)[1]) trainData <- x$data x$data <- x$data[ind,] tmpModelFit <- do.call(createModel, x) outBagData <- trainData[-ind, ] outBagData$.outcome <- NULL out[-ind] <- if(is.factor(x$data$.outcome)) { as.character(predictionFunction(x$method, tmpModelFit, outBagData)) } else { predictionFunction(x$method, tmpModelFit, outBagData) } out } caret/R/predictors.R0000644000176200001440000000702213153613153014054 0ustar liggesusers#' List predictors used in the model #' #' This class uses a model fit to determine which predictors were used in the #' final model. #' #' For \code{\link[randomForest]{randomForest}}, \code{\link[party]{cforest}}, #' \code{\link[party]{ctree}}, \code{\link[rpart]{rpart}}, #' \code{\link[ipred:bagging]{ipredbagg}}, \code{\link[ipred]{bagging}}, #' \code{\link[earth]{earth}}, \code{\link[mda]{fda}}, #' \code{\link[pamr]{pamr.train}}, \code{\link[superpc]{superpc.train}}, #' \code{\link{bagEarth}} and \code{\link{bagFDA}}, an attempt was made to #' report the predictors that were actually used in the final model. #' #' The \code{predictors} function can be called on the model object (as opposed #' to the \code{\link{train}}) object) and the package will try to find the #' appropriate coed (if it exists). #' #' In cases where the predictors cannot be determined, \code{NA} is returned. #' For example, \code{\link[nnet]{nnet}} may return missing values from #' \code{predictors}. #' #' @aliases predictors predictors.formula predictors.terms predictors.train #' predictors.default predictors.list predictors.rfe predictors.sbf #' @param x a model object, list or terms #' @param \dots not currently used #' @return a character string of predictors or \code{NA}. #' @keywords models #' @export predictors "predictors" <- function(x, ...){ UseMethod("predictors") } #' @export predictors.train <- function(x, ...) { if(is.null(x$modelInfo)) { code <- getModelInfo(x$method, regex = FALSE)[[1]] } else code <- x$modelInfo if(!is.null(code$predictors)){ checkInstall(code$library) for(i in seq(along = code$library)) do.call("requireNamespaceQuietStop", list(package = code$library[i])) out <- code$predictors(x$finalModel, ...) } else { if(hasTerms(x)) { out <- predictors(x$terms, ...) } else out <- NA } out } #' @export predictors.default <- function(x, ...) { cls <- model2method(class(x)[1]) if(cls == "gam") cls <- if(any(names(x) == "optimizer")) "gam" else "gamLoess" code <- getModelInfo(cls, regex = FALSE)[[1]] if(!is.null(code)) { if(!is.null(code$predictors)){ checkInstall(code$library) for(i in seq(along = code$library)) do.call("requireNamespaceQuietStop", list(package = code$library[i])) out <- code$predictors(x, ...) } else { if(hasTerms(x)) { out <- predictors(x$terms, ...) } else out <- NA } } else { out <- if(hasTerms(x)) predictors(x$terms) else NA } out } #' @rdname caret-internal #' @export hasTerms <- function(x) { objNames <- c(names(x), slotNames(x)) "terms" %in% tolower(objNames) } ## basicVars tries to detect the actual variable that are used ## when a formula might include other terms (such as interactions) ## For example: ## > x ## [1] "medv" "crim" "zn" "age" ## > y ## [1] "crim" "I(age^2)" "zn" ## > basicVars(x, y) ## [1] "crim" "zn" "age" basicVars <- function(x, y) { hasVar <- rep(NA, length(x)) for(i in seq(along = x)) hasVar[i] <- length(grep(x[i], y, fixed = TRUE)) > 0 x[hasVar] } #' @export predictors.terms <- function(x, ...) { if(is.null(x)) return(NA) everything <- all.vars(x) yName <- as.character(x[[2]]) everything[!(everything %in% yName)] } #' @export predictors.formula <- function(x, ...) { everything <- all.vars(x) yName <- as.character(x[[2]]) everything[!(everything %in% yName)] } #' @export predictors.list <- function(x, ...) { out <- lapply(x, predictors) names(out) <- names(x) out } caret/R/dummyVar.R0000644000176200001440000002601513204375346013513 0ustar liggesusers#' Create A Full Set of Dummy Variables #' #' \code{dummyVars} creates a full set of dummy variables (i.e. less than full #' rank parameterization) #' #' Most of the \code{\link[stats]{contrasts}} functions in R produce full rank #' parameterizations of the predictor data. For example, #' \code{\link[stats]{contr.treatment}} creates a reference cell in the data #' and defines dummy variables for all factor levels except those in the #' reference cell. For example, if a factor with 5 levels is used in a model #' formula alone, \code{\link[stats]{contr.treatment}} creates columns for the #' intercept and all the factor levels except the first level of the factor. #' For the data in the Example section below, this would produce: #' \preformatted{ (Intercept) dayTue dayWed dayThu dayFri daySat daySun #' 1 0 0 0 0 0 0 #' 1 0 0 0 0 0 0 #' 1 0 0 0 0 0 0 #' 1 0 1 0 0 0 0 #' 1 0 1 0 0 0 0 #' 1 0 0 0 1 0 0 #' 1 0 0 0 0 1 0 #' 1 0 0 0 0 1 0 #' 1 0 0 0 1 0 0} #' #' In some situations, there may be a need for dummy variables for all the #' levels of the factor. For the same example: #' \preformatted{ dayMon dayTue dayWed dayThu dayFri daySat daySun #' 1 0 0 0 0 0 0 #' 1 0 0 0 0 0 0 #' 1 0 0 0 0 0 0 #' 0 0 1 0 0 0 0 #' 0 0 1 0 0 0 0 #' 0 0 0 0 1 0 0 #' 0 0 0 0 0 1 0 #' 0 0 0 0 0 1 0 #' 0 0 0 0 1 0 0} #' #' Given a formula and initial data set, the class \code{dummyVars} gathers all #' the information needed to produce a full set of dummy variables for any data #' set. It uses \code{contr.ltfr} as the base function to do this. #' #' \code{class2ind} is most useful for converting a factor outcome vector to a #' matrix (or vector) of dummy variables. #' #' @aliases dummyVars dummyVars.default predict.dummyVars contr.dummy #' contr.ltfr class2ind #' @param formula An appropriate R model formula, see References #' @param data A data frame with the predictors of interest #' @param sep An optional separator between factor variable names and their #' levels. Use \code{sep = NULL} for no separator (i.e. normal behavior of #' \code{\link[stats]{model.matrix}} as shown in the Details section) #' @param levelsOnly A logical; \code{TRUE} means to completely remove the #' variable names from the column names #' @param fullRank A logical; should a full rank or less than full rank #' parameterization be used? If \code{TRUE}, factors are encoded to be #' consistent with \code{\link[stats]{model.matrix}} and the resulting there #' are no linear dependencies induced between the columns. #' @param object An object of class \code{dummyVars} #' @param newdata A data frame with the required columns #' @param na.action A function determining what should be done with missing #' values in \code{newdata}. The default is to predict \code{NA}. #' @param n A vector of levels for a factor, or the number of levels. #' @param contrasts A logical indicating whether contrasts should be computed. #' @param sparse A logical indicating if the result should be sparse. #' @param x A factor vector. #' @param ... additional arguments to be passed to other methods #' @return The output of \code{dummyVars} is a list of class 'dummyVars' with #' elements \item{call }{the function call} \item{form }{the model formula} #' \item{vars }{names of all the variables in the model} \item{facVars }{names #' of all the factor variables in the model} \item{lvls }{levels of any factor #' variables} \item{sep }{\code{NULL} or a character separator} \item{terms #' }{the \code{\link[stats]{terms.formula}} object} \item{levelsOnly }{a #' logical} #' #' The \code{predict} function produces a data frame. #' #' \code{class2ind} returns a matrix (or a vector if \code{drop2nd = TRUE}). #' #' \code{contr.ltfr} generates a design matrix. #' @author \code{contr.ltfr} is a small modification of #' \code{\link[stats]{contr.treatment}} by Max Kuhn #' @seealso \code{\link[stats]{model.matrix}}, \code{\link[stats]{contrasts}}, #' \code{\link[stats]{formula}} #' @references #' \url{https://cran.r-project.org/doc/manuals/R-intro.html#Formulae-for-statistical-models} #' @keywords models #' @examples #' when <- data.frame(time = c("afternoon", "night", "afternoon", #' "morning", "morning", "morning", #' "morning", "afternoon", "afternoon"), #' day = c("Mon", "Mon", "Mon", #' "Wed", "Wed", "Fri", #' "Sat", "Sat", "Fri")) #' #' levels(when$time) <- list(morning="morning", #' afternoon="afternoon", #' night="night") #' levels(when$day) <- list(Mon="Mon", Tue="Tue", Wed="Wed", Thu="Thu", #' Fri="Fri", Sat="Sat", Sun="Sun") #' #' ## Default behavior: #' model.matrix(~day, when) #' #' mainEffects <- dummyVars(~ day + time, data = when) #' mainEffects #' predict(mainEffects, when[1:3,]) #' #' when2 <- when #' when2[1, 1] <- NA #' predict(mainEffects, when2[1:3,]) #' predict(mainEffects, when2[1:3,], na.action = na.omit) #' #' #' interactionModel <- dummyVars(~ day + time + day:time, #' data = when, #' sep = ".") #' predict(interactionModel, when[1:3,]) #' #' noNames <- dummyVars(~ day + time + day:time, #' data = when, #' levelsOnly = TRUE) #' predict(noNames, when) #' #' head(class2ind(iris$Species)) #' #' two_levels <- factor(rep(letters[1:2], each = 5)) #' class2ind(two_levels) #' class2ind(two_levels, drop2nd = TRUE) #' @export dummyVars "dummyVars" <- function(formula, ...){ UseMethod("dummyVars") } #' @rdname dummyVars #' @method dummyVars default #' @importFrom stats as.formula model.frame #' @export dummyVars.default <- function (formula, data, sep = ".", levelsOnly = FALSE, fullRank = FALSE, ...) { formula <- as.formula(formula) if(!is.data.frame(data)) data <- as.data.frame(data) vars <- all.vars(formula) if(any(vars == ".")) { vars <- vars[vars != "."] vars <- unique(c(vars, colnames(data))) } isFac <- unlist(lapply(data[,vars,drop = FALSE], is.factor)) if(sum(isFac) > 0) { facVars <- vars[isFac] lvls <- lapply(data[,facVars,drop = FALSE], levels) if(levelsOnly) { tabs <- table(unlist(lvls)) if(any(tabs > 1)) { stop(paste("You requested `levelsOnly = TRUE` but", "the following levels are not unique", "across predictors:", paste(names(tabs)[tabs > 1], collapse = ", "))) } } } else { facVars <- NULL lvls <- NULL } trms <- attr(model.frame(formula, data), "terms") out <- list(call = match.call(), form = formula, vars = vars, facVars = facVars, lvls = lvls, sep = sep, terms = trms, levelsOnly = levelsOnly, fullRank = fullRank) class(out) <- "dummyVars" out } #' @rdname dummyVars #' @method print dummyVars #' @export print.dummyVars <- function(x, ...) { cat("Dummy Variable Object\n\n") cat("Formula: ") print(x$form) cat(length(x$vars), " variables, ", length(x$facVars), " factors\n", sep = "") if(!is.null(x$sep) & !x$levelsOnly) cat("Variables and levels will be separated by '", x$sep, "'\n", sep = "") if(x$levelsOnly) cat("Factor variable names will be removed\n") if(x$fullRank) cat("A full rank encoding is used") else cat("A less than full rank encoding is used") cat("\n") invisible(x) } #' @rdname dummyVars #' @method predict dummyVars #' @importFrom stats delete.response model.frame model.matrix na.pass #' @export predict.dummyVars <- function(object, newdata, na.action = na.pass, ...) { if(is.null(newdata)) stop("newdata must be supplied") if(!is.data.frame(newdata)) newdata <- as.data.frame(newdata) if(!all(object$vars %in% names(newdata))) stop( paste("Variable(s)", paste("'", object$vars[!object$vars %in% names(newdata)], "'", sep = "", collapse = ", "), "are not in newdata")) Terms <- object$terms Terms <- delete.response(Terms) if(!object$fullRank) { oldContr <- options("contrasts")$contrasts newContr <- oldContr newContr["unordered"] <- "contr.ltfr" options(contrasts = newContr) on.exit(options(contrasts = oldContr)) } m <- model.frame(Terms, newdata, na.action = na.action, xlev = object$lvls) x <- model.matrix(Terms, m) if(object$levelsOnly) { for(i in object$facVars) { for(j in object$lvls[[i]]) { from_text <- paste0(i, j) colnames(x) <- gsub(from_text, j, colnames(x), fixed = TRUE) } } } cnames <- colnames(x) if(!is.null(object$sep) & !object$levelsOnly) { for(i in object$facVars[order(-nchar(object$facVars))]) { ## the default output form model.matrix is NAMElevel with no separator. for(j in object$lvls[[i]]) { from_text <- paste0(i, j) to_text <- paste(i, j, sep = object$sep) cnames <- gsub(from_text, to_text, cnames, fixed = TRUE) } } } colnames(x) <- cnames x[, colnames(x) != "(Intercept)", drop = FALSE] } #' @rdname dummyVars #' @export contr.ltfr <- function (n, contrasts = TRUE, sparse = FALSE) { if (is.numeric(n) && length(n) == 1L) { if (n > 1L) levels <- as.character(seq_len(n)) else stop("not enough degrees of freedom to define contrasts") } else { levels <- as.character(n) n <- length(n) } contr <- .RDiag(levels, sparse = sparse) if (contrasts) { if (n < 2L) stop(gettextf("contrasts not defined for %d degrees of freedom", n - 1L), domain = NA) } contr } #' @export contr.dummy <- function(n, ...) { if (is.numeric(n) && length(n) == 1L) { if (n > 1L) levels <- as.character(seq_len(n)) else stop("not enough degrees of freedom to define contrasts") } else { levels <- as.character(n) n <- length(n) } out <- diag(n) rownames(out) <- levels colnames(out) <- levels out } #' @rdname dummyVars #' @importFrom stats model.matrix #' @export #' @param drop2nd A logical: if the factor has two levels, should a single binary vector be returned? class2ind <- function(x, drop2nd = FALSE) { if(!is.factor(x)) stop("'x' should be a factor") y <- model.matrix(~ x - 1) colnames(y) <- gsub("^x", "", colnames(y)) attributes(y)$assign <- NULL attributes(y)$contrasts <- NULL if(length(levels(x)) == 2 & drop2nd) { y <- y[,1] } y } caret/R/findLinearCombos.R0000644000176200001440000001020113153613153015105 0ustar liggesusers# enumerate linear combinations enumLC <- function(object, ...) UseMethod("enumLC") #' @export enumLC.default <- function(object, ...) { # there doesn't seem to be a reasonable default, so # we'll throw an error stop(paste('enumLC does not support ', class(object), 'objects')) } enumLC.matrix <- function(object, ...) { # factor the matrix using QR decomposition and then process it internalEnumLC(qr(object)) } enumLC.lm <- function(object, ...) { # extract the QR decomposition and the process it internalEnumLC(object$qr) } #' @importFrom stats lm enumLC.formula <- function(object, ...) { # create an lm fit object from the formula, and then call # appropriate enumLC method enumLC(lm(object)) } # this function does the actual work for all of the enumLC methods internalEnumLC <- function(qrObj, ...) { R <- qr.R(qrObj) # extract R matrix numColumns <- dim(R)[2] # number of columns in R rank <- qrObj$rank # number of independent columns pivot <- qrObj$pivot # get the pivot vector if (is.null(numColumns) || rank == numColumns) { list() # there are no linear combinations } else { p1 <- 1:rank X <- R[p1, p1] # extract the independent columns Y <- R[p1, -p1, drop = FALSE] # extract the dependent columns b <- qr(X) # factor the independent columns b <- qr.coef(b, Y) # get regression coefficients of # the dependent columns b[abs(b) < 1e-6] <- 0 # zap small values # generate a list with one element for each dependent column lapply(1:dim(Y)[2], function(i) c(pivot[rank + i], pivot[which(b[,i] != 0)])) } } #' Determine linear combinations in a matrix #' #' Enumerate and resolve the linear combinations in a numeric matrix #' #' The QR decomposition is used to determine if the matrix is full rank and #' then identify the sets of columns that are involved in the dependencies. #' #' To "resolve" them, columns are iteratively removed and the matrix rank is #' rechecked. #' #' The \code{\link[subselect:trim.matrix]{trim.matrix}} function in the #' \pkg{subselect} package can also be used to accomplish the same goal. #' #' @param x a numeric matrix #' @return a list with elements: \item{linearCombos }{If there are linear #' combinations, this will be a list with elements for each dependency that #' contains vectors of column numbers. } \item{remove }{a list of column #' numbers that can be removed to counter the linear combinations} #' @author Kirk Mettler and Jed Wing (\code{enumLC}) and Max Kuhn #' (\code{findLinearCombos}) #' @seealso \code{\link[subselect:trim.matrix]{trim.matrix}} #' @keywords manip #' @examples #' #' testData1 <- matrix(0, nrow=20, ncol=8) #' testData1[,1] <- 1 #' testData1[,2] <- round(rnorm(20), 1) #' testData1[,3] <- round(rnorm(20), 1) #' testData1[,4] <- round(rnorm(20), 1) #' testData1[,5] <- 0.5 * testData1[,2] - 0.25 * testData1[,3] - 0.25 * testData1[,4] #' testData1[1:4,6] <- 1 #' testData1[5:10,7] <- 1 #' testData1[11:20,8] <- 1 #' #' findLinearCombos(testData1) #' #' testData2 <- matrix(0, nrow=6, ncol=6) #' testData2[,1] <- c(1, 1, 1, 1, 1, 1) #' testData2[,2] <- c(1, 1, 1, 0, 0, 0) #' testData2[,3] <- c(0, 0, 0, 1, 1, 1) #' testData2[,4] <- c(1, 0, 0, 1, 0, 0) #' testData2[,5] <- c(0, 1, 0, 0, 1, 0) #' testData2[,6] <- c(0, 0, 1, 0, 0, 1) #' #' findLinearCombos(testData2) #' #' @export findLinearCombos findLinearCombos <- function(x) { if(!is.matrix(x)) x <- as.matrix(x) lcList <- enumLC(x) initialList <- lcList badList <- NULL if(length(lcList) > 0) { continue <- TRUE while(continue) { # keep removing linear dependencies until it resolves tmp <- unlist(lapply(lcList, function(x) x[1])) tmp <- unique(tmp[!is.na(tmp)]) badList <- unique(c(tmp, badList)) lcList <- enumLC(x[,-badList]) continue <- (length(lcList) > 0) } } else badList <- NULL list(linearCombos = initialList, remove = badList) } caret/R/avNNet.R0000644000176200001440000002315713153613153013100 0ustar liggesusers#' @title Neural Networks Using Model Averaging #' @name avNNet #' @description Aggregate several neural network models #' #' #' @param formula A formula of the form \code{class ~ x1 + x2 + \dots} #' @param x matrix or data frame of \code{x} values for examples. #' @param y matrix or data frame of target values for examples. #' @param weights (case) weights for each example -- if missing defaults to 1. #' @param repeats the number of neural networks with different random number seeds #' @param bag a logical for bagging for each repeat #' @param seeds random number seeds that can be set prior to bagging (if done) and network creation. This helps maintain reproducibility when models are run in parallel. #' @param allowParallel if a parallel backend is loaded and available, should the function use it? #' @param data Data frame from which variables specified in \code{formula} are preferentially to be taken. #' @param subset An index vector specifying the cases to be used in the training sample. (NOTE: If given, this argument must be named.) #' @param na.action A function to specify the action to be taken if \code{NA}s are found. #' The default action is for the procedure to fail. An alternative is #' \code{na.omit}, which leads to rejection of cases with missing values on #' any required variable. (NOTE: If given, this argument must be named.) #' @param contrasts a list of contrasts to be used for some or all of #' the factors appearing as variables in the model formula. #' @param object an object of class \code{avNNet} as returned by \code{avNNet}. #' @param newdata matrix or data frame of test examples. A vector is considered to be #' a row vector comprising a single case. #' @param type Type of output, either: \code{raw} for the raw outputs, \code{code} for the predicted class or \code{prob} for the class probabilities. #' @param \dots arguments passed to \code{\link[nnet]{nnet}} #' #' @details Following Ripley (1996), the same neural network model is fit using different random number seeds. All the resulting models are used for prediction. For regression, the output from each network are averaged. For classification, the model scores are first averaged, then translated to predicted classes. Bagging can also be used to create the models. #' #' If a parallel backend is registered, the \pkg{foreach} package is used to train the networks in parallel. #' #' @return #' For \code{avNNet}, an object of \code{"avNNet"} or \code{"avNNet.formula"}. Items of interest in #' the output are: #' \item{model }{a list of the models generated from \code{\link[nnet]{nnet}}} #' \item{repeats }{an echo of the model input} #' \item{names }{if any predictors had only one distinct value, this is a character string of the #' remaining columns. Otherwise a value of \code{NULL}} #' @references Ripley, B. D. (1996) #' \emph{Pattern Recognition and Neural Networks.} Cambridge. #' #' @author These are heavily based on the \code{nnet} code from Brian Ripley. #' @seealso \code{\link[nnet]{nnet}}, \code{\link{preProcess}} #' @examples #' data(BloodBrain) #' \dontrun{ #' modelFit <- avNNet(bbbDescr, logBBB, size = 5, linout = TRUE, trace = FALSE) #' modelFit #' #' predict(modelFit, bbbDescr) #' } #' @keywords neural #' @aliases avNNet.default predict.avNNet avNNet.formula avNNet #' @export avNNet <- function (x, ...) UseMethod("avNNet") ## this is a near copy of nnet.formula #' @importFrom stats .getXlevels contrasts model.matrix model.response model.weights #' @rdname avNNet #' @method avNNet formula #' @export avNNet.formula <- function (formula, data, weights, ..., repeats = 5, bag= FALSE, allowParallel = TRUE, seeds = sample.int(1e5, repeats), subset, na.action, contrasts = NULL) { m <- match.call(expand.dots = FALSE) if (is.matrix(eval.parent(m$data))) m$data <- as.data.frame(data) ## bag <- m$bag ## repeats <- m$repeats m$... <- m$contrasts <- m$bag <- m$repeats <- m$allowParallel <- NULL m[[1]] <- as.name("model.frame") m <- eval.parent(m) Terms <- attr(m, "terms") x <- model.matrix(Terms, m, contrasts) cons <- attr(x, "contrast") xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] w <- model.weights(m) if (length(w) == 0) w <- rep(1, nrow(x)) y <- model.response(m) res <- avNNet.default(x, y, weights = w, repeats = repeats, bag = bag, allowParallel = allowParallel, seeds = seeds, ...) res$terms <- Terms res$coefnames <- colnames(x) res$na.action <- attr(m, "na.action") res$contrasts <- cons res$xlevels <- .getXlevels(Terms, m) class(res) <- c("avNNet.formula", "avNNet") res } #' @import foreach #' @rdname avNNet #' @method avNNet default #' @export avNNet.default <- function(x, y, repeats = 5, bag = FALSE, allowParallel = TRUE, seeds = sample.int(1e5, repeats), ...) { requireNamespaceQuietStop("nnet") ## check for factors ## this is from nnet.formula ind <- seq(along = y) if(is.factor(y)) { classLev <- levels(y) y <- class2ind(y) } else classLev <- NULL if(is.matrix(y)) classLev <- colnames(y) theDots <- list(...) ## to avoid a "no visible binding for global variable 'i'" warning: i <- NULL `%op%` <- if(allowParallel) `%dopar%` else `%do%` mods <- foreach(i = 1:repeats, .verbose = FALSE, .packages = "caret", .errorhandling = "stop") %op% { if(any(names(theDots) == "trace")) { if(theDots$trace) cat("\nFitting Repeat", i, "\n\n") } else cat("Fitting Repeat", i, "\n\n") set.seed(as.integer(seeds[i])) if(bag) ind <- sample(1:nrow(x), replace = TRUE) thisMod <- if(is.null(classLev)) nnet::nnet(x[ind,,drop = FALSE], y[ind], ...) else nnet::nnet(x[ind,,drop = FALSE], y[ind,], ...) thisMod$lev <- classLev thisMod } ## return results out <- list(model = mods, repeats = repeats, bag = bag, seeds = seeds, names = colnames(x)) class(out) <- "avNNet" out } #' @rdname avNNet #' @method print avNNet #' @export print.avNNet <- function (x, ...) { cat("Model Averaged Neural Network with", x$repeats, "Repeats", ifelse(x$bag, "and Bagging", ""), "\n\n") print(x$model[[1]]) cat("\n") invisible(x) } #' @importFrom stats .checkMFClasses delete.response fitted.values model.frame model.matrix predict na.omit #' @rdname avNNet #' @method predict avNNet #' @export predict.avNNet <- function(object, newdata, type = c("raw", "class", "prob"), ...) { loadNamespace("nnet") if (!inherits(object, "avNNet")) stop("object not of class \"avNNet\"") if (missing(newdata)) { if(is.null(object$model[[1]]$lev)) { out <- lapply(object$model, fitted.values) out <- do.call("cbind", out) return(apply(out, 1, mean)) } else { for(i in 1:object$repeats) { rawTmp <- fitted.values(object$model[[i]]) rawTmp <- t(apply(rawTmp, 1, function(x) exp(x)/sum(exp(x)))) scores <- if(i == 1) rawTmp else scores + rawTmp } scores <- scores/object$repeats classes <- colnames(scores)[apply(scores, 1, which.max)] classes <- factor(as.character(classes), levels = object$model[[1]]$lev) if(type[1]== "raw") out <- scores if(type[1]== "class") out <- (classes) if(type[1]== "prob") out <- t(apply(scores, 1, function(x) x/sum(x))) } } else { if (inherits(object, "avNNet.formula")) { newdata <- as.data.frame(newdata) rn <- row.names(newdata) Terms <- delete.response(object$terms) m <- model.frame(Terms, newdata, na.action = na.omit, xlev = object$xlevels) if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) keep <- match(row.names(m), rn) x <- model.matrix(Terms, m, contrasts = object$contrasts) xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] } else { if (is.null(dim(newdata))) dim(newdata) <- c(1, length(newdata)) x <- as.matrix(newdata) if (any(is.na(x))) stop("missing values in 'x'") keep <- 1:nrow(x) rn <- rownames(x) } if(!is.null(object$names)) x <- x[, object$names, drop = FALSE] if(is.null(object$model[[1]]$lev)) { out <- lapply(object$model, predict, newdata = x) out <- do.call("cbind", out) return(apply(out, 1, mean)) } else { for(i in 1:object$repeats) { scores <- if(i == 1) predict(object$model[[i]], newdata = x) else scores + predict(object$model[[i]], newdata = x) } scores <- scores/object$repeats classes <- colnames(scores)[apply(scores, 1, which.max)] classes <- factor(as.character(classes), levels = object$model[[1]]$lev) if(type[1]== "raw") out <- scores if(type[1]== "class") out <- (classes) if(type[1]== "prob") out <- t(apply(scores, 1, function(x) x/sum(x))) } } out } caret/R/aaa.R0000644000176200001440000002050713153613153012423 0ustar liggesusers## This file is a cheat to minimize the false positives flagged during R CMD check. such as ## ## "bwplot.diff.resamples: no visible binding for global variable 'Metric'" ## "bwplot.resamples: no visible binding for global variable 'Model'" ## "bwplot.resamples: no visible binding for global variable 'Metric'" ## ## when ## ## bwplot.resamples <- function (x, data = NULL, models = x$models, metric = x$metric, ...) ## { ## ... ## plotData <- subset(plotData, Model %in% models & Metric %in% metric) ## ... ## } ## ## and other examples. #' @useDynLib caret #' @import methods plyr reshape2 ggplot2 lattice nlme NULL .onUnload <- function(libpath) { library.dynam.unload("caret", libpath) } ################################################################### ## Global Variables ################################################################### if(getRversion() >= "2.15.1"){ utils::globalVariables(c('Metric', 'Model')) ## densityplot(~ values|Metric, data = plotData, groups = ind, ## xlab = "", ...) utils::globalVariables(c('ind')) ## avPerf <- ddply(subset(results, Metric == metric[1] & X2 == "Estimate"), ## .(Model), ## function(x) c(Median = median(x$value, na.rm = TRUE))) utils::globalVariables(c('X2')) ## x[[i]]$resample <- subset(x[[i]]$resample, Variables == x[[i]]$bestSubset) utils::globalVariables(c('Variables')) ## calibCalc: no visible binding for global variable 'obs' ## calibCalc: no visible binding for global variable 'bin' ## ## calibCalc <- function(x, class = levels(obs)[1], cuts = 11) ## { ## binData <- data.frame(prob = x$calibProbVar, ## bin = cut(x$calibProbVar, (0:cuts)/cuts, include.lowest = TRUE), ## class = x$calibClassVar) utils::globalVariables(c('obs', 'bin')) ## ## checkConditionalX: no visible binding for global variable '.outcome' ## checkConditionalX <- function(x, y) ## { ## x$.outcome <- y ## unique(unlist(dlply(x, .(.outcome), zeroVar))) ## } utils::globalVariables(c('.outcome')) ## classLevels.splsda: no visible global function definition for 'ilevels' ## ## classLevels.splsda <- function(x, ...) ## { ## ## objects from package caret and spls have the ## ## same class name, but this works for either ## ilevels(x$y) ## } utils::globalVariables(c('ilevels')) ## looRfeWorkflow: no visible binding for global variable 'iter' ## looSbfWorkflow: no visible binding for global variable 'iter' ## looTrainWorkflow: no visible binding for global variable 'parm' ## looTrainWorkflow: no visible binding for global variable 'iter' ## nominalRfeWorkflow: no visible binding for global variable 'iter' ## nominalRfeWorkflow: no visible binding for global variable 'method' ## nominalRfeWorkflow: no visible binding for global variable 'Resample' ## nominalSbfWorkflow: no visible binding for global variable 'dat' ## nominalSbfWorkflow: no visible binding for global variable 'iter' ## nominalTrainWorkflow: no visible binding for global variable 'parm' ## nominalTrainWorkflow: no visible binding for global variable 'iter' ## nominalTrainWorkflow: no visible binding for global variable 'Resample' ## oobTrainWorkflow: no visible binding for global variable 'parm' ## ## result <- foreach(iter = seq(along = resampleIndex), ## .combine = "c", .verbose = FALSE, ## .packages = "caret", .errorhandling = "stop") %:% ## foreach(parm = 1:nrow(info$loop), .combine = "c", ## .verbose = FALSE, .packages = "caret", ## .errorhandling = "stop") %dopar% ## { ## utils::globalVariables(c('iter', 'parm', 'method', 'Resample', 'dat')) ## tuneScheme: no visible binding for global variable '.alpha' ## tuneScheme: no visible binding for global variable '.phi' ## tuneScheme: no visible binding for global variable '.lambda' ## ## seqParam[[i]] <- data.frame(.lambda = subset(grid, ## subset = .phi == loop$.phi[i] & ## .lambda < loop$.lambda[i])$.lambda) utils::globalVariables(c('.alpha', '.phi', '.lambda')) ## createGrid : somDims: no visible binding for global variable '.xdim' ## createGrid : somDims: no visible binding for global variable '.ydim' ## createGrid : lvqGrid: no visible binding for global variable '.k' ## createGrid : lvqGrid: no visible binding for global variable '.size' ## ## out <- expand.grid(.xdim = 1:x, .ydim = 2:(x+1), ## .xweight = seq(.5, .9, length = len)) ## utils::globalVariables(c('.xdim', '.ydim', '.k', '.size')) ## createModel: possible error in rda(trainX, trainY, gamma = ## tuneValue$.gamma, lambda = tuneValue$.lambda, ...): unused ## argument(s) (gamma = tuneValue$.gamma, lambda = tuneValue$.lambda) ## createModel: no visible global function definition for ## 'randomForestNWS' ## createModel: no visible global function definition for 'rfLSF' ## createModel: possible error in rvm(as.matrix(trainX), trainY, kernel = ## polydot, kpar = list(degree = tuneValue$.degree, scale = ## tuneValue$.scale, offset = 1), ...): unused argument(s) (kernel = ## polydot, kpar = list(degree = tuneValue$.degree, scale = ## tuneValue$.scale, offset = 1)) ## createModel: possible error in rvm(as.matrix(trainX), trainY, kernel = ## rbfdot, kpar = list(sigma = tuneValue$.sigma), ...): unused ## argument(s) (kernel = rbfdot, kpar = list(sigma = tuneValue$.sigma)) ## createModel: possible error in rvm(as.matrix(trainX), trainY, kernel = ## vanilladot(), ...): unused argument(s) (kernel = vanilladot()) ## ## ???? ## ## > formals(klaR::rda.default) ## $x ## ## $gamma ## [1] NA ## ## $lambda ## [1] NA ## predictionFunction: no visible binding for global variable '.alpha' ## ## delta <- subset(param, .alpha == uniqueA[i])$.delta ## utils::globalVariables(c('.alpha')) ## predictors.gbm: no visible binding for global variable 'rel.inf' ## predictors.sda: no visible binding for global variable 'varIndex' ## predictors.smda: no visible binding for global variable 'varIndex' ## ## varUsed <- as.character(subset(relImp, rel.inf != 0)$var) utils::globalVariables(c('rel.inf', 'varIndex')) ## plotClassProbs: no visible binding for global variable 'Observed' ## ## out <- densityplot(form, data = stackProbs, groups = Observed, ...) utils::globalVariables(c('Observed')) ## plot.train: no visible binding for global variable 'parameter' ## ## paramLabs <- subset(modelInfo, parameter %in% params)$label utils::globalVariables(c('parameter')) ## plot.rfe: no visible binding for global variable 'Selected' ## ## out <- xyplot(plotForm, data = results, groups = Selected, panel = panel.profile, ...) utils::globalVariables(c('Selected')) ## icr.formula: no visible binding for global variable 'thresh' ## ## res <- icr.default(x, y, weights = w, thresh = thresh, ...) utils::globalVariables(c('thresh', 'probValues', 'min_prob', 'groups', 'trainData', 'j', 'x', '.B')) utils::globalVariables(c('model_id', 'player1', 'player2', 'playa', 'win1', 'win2', 'name')) utils::globalVariables(c('object', 'Iter', 'lvls', 'Mean', 'Estimate')) ## parse_sampling: no visible binding for global variable 'sampling_methods' utils::globalVariables(c('sampling_methods')) ## ggplot.calibration: no visible binding for global variable 'midpoint' ## ggplot.calibration: no visible binding for global variable 'Percent' ## ggplot.calibration: no visible binding for global variable 'Lower' ## ggplot.calibration: no visible binding for global variable 'Upper' utils::globalVariables(c('midpoint', 'Percent', 'Lower', 'Upper')) } ################################################################### ## Global Functions ################################################################### altTrainWorkflow <- function(x) x #' @export best <- function(x, metric, maximize) { bestIter <- if(maximize) which.max(x[,metric]) else which.min(x[,metric]) bestIter } #' @rdname postResample #' @export defaultSummary <- function(data, lev = NULL, model = NULL) { if(is.character(data$obs)) data$obs <- factor(data$obs, levels = lev) postResample(data[,"pred"], data[,"obs"]) } caret/R/splsda.R0000644000176200001440000001015613153613153013166 0ustar liggesusers#' @export splsda <- function (x, ...) UseMethod("splsda") #' @importFrom stats predict #' @export predict.splsda <- function(object, newdata = NULL, type = "class", ...) { requireNamespaceQuietStop("spls") tmpPred <- spls::predict.spls(object, newx = newdata) if(type == "raw") return(tmpPred) if(is.null(object$probModel)) { ## use softmax out <- switch(type, class = { classIndex <- object$obsLevels[apply(tmpPred, 1, which.max)] factor(classIndex, levels = object$obsLevels) }, prob = t(apply(tmpPred, 1, function(data) exp(data)/sum(exp(data))))) } else { requireNamespaceQuietStop("klaR") ## Bayes rule tmpPred <- as.data.frame(tmpPred[,-length(object$obsLevels)]) pred <- predict(object$probModel, tmpPred) out <- switch(type, class = pred$class, prob = pred$posterior) } out } #' @importFrom stats predict #' @export splsda.default <- function(x, y, probMethod = "softmax", prior = NULL, ...) { requireNamespaceQuietStop("spls") funcCall <- match.call(expand.dots = TRUE) if(probMethod == "softmax") { if(!is.null(prior)) warning("Priors are ignored unless probMethod = \"Bayes\"") } if(is.factor(y)) { obsLevels <- levels(y) oldY <- y y <- class2ind(y) } else { if(is.matrix(y)) { test <- apply(y, 1, sum) if(any(test != 1)) stop("the rows of y must be 0/1 and sum to 1") obsLevels <- colnames(y) if(is.null(obsLevels)) stop("the y matrix must have column names") oldY <- obsLevels[apply(y, 1, which.max)] } else stop("y must be a matrix or a factor") } if(!is.matrix(x)) x <- as.matrix(x) tmpData <- data.frame(n = paste("row", 1:nrow(y), sep = "")) tmpData$y <- y tmpData$x <- x out <- spls::spls(x, y, ...) out$obsLevels <- obsLevels out$probMethod <- probMethod if(probMethod == "Bayes") { requireNamespaceQuietStop("klaR") makeModels <- function(x, y, pri) { probModel <- klaR::NaiveBayes(x, y, prior = pri, usekernel = TRUE) probModel$train <- predict(probModel)$posterior probModel$x <- NULL probModel } train <- predict(out, as.matrix(tmpData$x)) ## Get the raw model predictions, but leave one behind since the ## final class probs sum to one train <- train[, -length(obsLevels), drop = FALSE] out$probModel <- makeModels(train, oldY, pri = prior) } else out$probModel <- NULL ##out$call <- funcCall class(out) <- "splsda" out } #' @export print.splsda <- function (x, ...) { xmat <- x$x p <- ncol(xmat) A <- x$A xAnames <- colnames(xmat)[A] q <- ncol(x$y) eta <- x$eta K <- x$K kappa <- x$kappa select <- x$select fit <- x$fit if (q == 1) { cat("\nSparse Partial Least Squares for discriminant analysis\n") cat("----\n") cat(paste("Parameters: eta = ", eta, ", K = ", K, "\n", sep = "")) } if (q > 1) { cat("\nSparse Partial Least Squares for discriminant analysis\n") cat("----\n") cat(paste("Parameters: eta = ", eta, ", K = ", K, ", kappa = ", kappa, "\n", sep = "")) } cat(paste("PLS algorithm:\n", select, " for variable selection, ", fit, " for model fitting\n", sep = "")) switch(x$probMethod, softmax = cat("The softmax function was used to compute class probabilities.\n"), Bayes = cat("Bayes rule was used to compute class probabilities.\n")) cat(paste("\nSPLS chose ", length(A), " variables among ", p, " variables\n\n", sep = "")) cat("Selected variables: \n") if (!is.null(xAnames)) { for (i in 1:length(A)) { cat(paste(xAnames[i], "\t", sep = "")) if (i%%5 == 0) { cat("\n") } } } else { for (i in 1:length(A)) { cat(paste(A[i], "\t", sep = "")) if (i%%5 == 0) { cat("\n") } } } cat("\n") } caret/R/specificity.R0000644000176200001440000000367313153613153014221 0ustar liggesusers#' @export specificity <- function(data, ...){ UseMethod("specificity") } #' @importFrom stats complete.cases #' @export "specificity.default" <- function(data, reference, negative = levels(reference)[-1], na.rm = TRUE, ...) { if(!is.factor(reference) | !is.factor(data)) stop("input data must be a factor") ## todo: relax the =2 constraint and let ngative length be > 2 if(length(unique(c(levels(reference), levels(data)))) != 2) stop("input data must have the same two levels") if(na.rm) { cc <- complete.cases(data) & complete.cases(reference) if(any(!cc)) { data <- data[cc] reference <- reference[cc] } } numer <- sum(data %in% negative & reference %in% negative) denom <- sum(reference %in% negative) spec <- ifelse(denom > 0, numer / denom, NA) spec } #' @export "specificity.table" <- function(data, negative = rownames(data)[-1], ...) { ## "truth" in columns, predictions in rows if(!all.equal(nrow(data), ncol(data))) stop("the table must have nrow = ncol") if(!all.equal(rownames(data), colnames(data))) stop("the table must the same groups in the same order") if(nrow(data) > 2) { tmp <- data data <- matrix(NA, 2, 2) colnames(data) <- rownames(data) <- c("pos", "neg") negCol <- which(colnames(tmp) %in% negative) posCol <- which(!(colnames(tmp) %in% negative)) data[1, 1] <- sum(tmp[posCol, posCol]) data[1, 2] <- sum(tmp[posCol, negCol]) data[2, 1] <- sum(tmp[negCol, posCol]) data[2, 2] <- sum(tmp[negCol, negCol]) data <- as.table(data) negative <- "neg" rm(tmp) } numer <- sum(data[negative, negative]) denom <- sum(data[, negative]) spec <- ifelse(denom > 0, numer / denom, NA) spec } "specificity.matrix" <- function(data, negative = rownames(data)[-1], ...) { data <- as.table(data) specificity.table(data) } caret/R/bag.R0000644000176200001440000005166713153613153012445 0ustar liggesusers#' A General Framework For Bagging #' @aliases bag.default bag bagControl predict.bag ldaBag plsBag nbBag ctreeBag svmBag nnetBag #' #' @description \code{bag} provides a framework for bagging classification or regression models. The user can provide their own functions for model building, prediction and aggregation of predictions (see Details below). #' #' #' @param x a matrix or data frame of predictors #' @param y a vector of outcomes #' @param B the number of bootstrap samples to train over. #' @param bagControl a list of options. #' @param \dots arguments to pass to the model function #' @param fit a function that has arguments \code{x}, \code{y} and \code{...} and produces a model object #' that can later be used for prediction. Example functions are found in \code{ldaBag}, \code{plsBag}, #' \code{nbBag}, \code{svmBag} and \code{nnetBag}. #' @param predict a function that generates predictions for each sub-model. The function should have #' arguments \code{object} and \code{x}. The output of the function can be any type of object (see the #' example below where posterior probabilities are generated. Example functions are found in \code{ldaBag}#' , \code{plsBag}, \code{nbBag}, \code{svmBag} and \code{nnetBag}.) #' @param aggregate a function with arguments \code{x} and \code{type}. The function that takes the output #' of the \code{predict} function and reduces the bagged predictions to a single prediction per sample. #' the \code{type} argument can be used to switch between predicting classes or class probabilities for #' classification models. Example functions are found in \code{ldaBag}, \code{plsBag}, \code{nbBag}, #' \code{svmBag} and \code{nnetBag}. #' @param downSample logical: for classification, should the data set be randomly sampled so that each #' class has the same number of samples as the smallest class? #' @param oob logical: should out-of-bag statistics be computed and the predictions retained? #' @param allowParallel a parallel backend is loaded and available, should the function use it? #' @param vars an integer. If this argument is not \code{NULL}, a random sample of size \code{vars} is taken of the predictors in each bagging iteration. If \code{NULL}, all predictors are used. #' @param object an object of class \code{bag}. #' @param newdata a matrix or data frame of samples for prediction. Note that this argument must have a non-null value #' @param digits minimal number of \emph{significant digits}. #' #' @details The function is basically a framework where users can plug in any model in to assess #' the effect of bagging. Examples functions can be found in \code{ldaBag}, \code{plsBag} #' , \code{nbBag}, \code{svmBag} and \code{nnetBag}. #' Each has elements \code{fit}, \code{pred} and \code{aggregate}. #' #' One note: when \code{vars} is not \code{NULL}, the sub-setting occurs prior to the \code{fit} and #' \code{predict} functions are called. In this way, the user probably does not need to account for the #' change in predictors in their functions. #' #' When using \code{bag} with \code{\link{train}}, classification models should use \code{type = "prob"} #' inside of the \code{predict} function so that \code{predict.train(object, newdata, type = "prob")} will #' work. #' #' If a parallel backend is registered, the \pkg{foreach} package is used to train the models in parallel. #' #' @return #' \code{bag} produces an object of class \code{bag} with elements #' \item{fits }{a list with two sub-objects: the \code{fit} object has the actual model fit for that #' bagged samples and the \code{vars} object is either \code{NULL} or a vector of integers corresponding to which predictors were sampled for that model} #' \item{control }{a mirror of the arguments passed into \code{bagControl}} #' \item{call }{the call} #' \item{B }{the number of bagging iterations} #' \item{dims }{the dimensions of the training set} #' #' @author Max Kuhn #' #' @examples #' ## A simple example of bagging conditional inference regression trees: #' data(BloodBrain) #' #' ## treebag <- bag(bbbDescr, logBBB, B = 10, #' ## bagControl = bagControl(fit = ctreeBag$fit, #' ## predict = ctreeBag$pred, #' ## aggregate = ctreeBag$aggregate)) #' #' #' #' #' ## An example of pooling posterior probabilities to generate class predictions #' data(mdrr) #' #' ## remove some zero variance predictors and linear dependencies #' mdrrDescr <- mdrrDescr[, -nearZeroVar(mdrrDescr)] #' mdrrDescr <- mdrrDescr[, -findCorrelation(cor(mdrrDescr), .95)] #' #' ## basicLDA <- train(mdrrDescr, mdrrClass, "lda") #' #' ## bagLDA2 <- train(mdrrDescr, mdrrClass, #' ## "bag", #' ## B = 10, #' ## bagControl = bagControl(fit = ldaBag$fit, #' ## predict = ldaBag$pred, #' ## aggregate = ldaBag$aggregate), #' ## tuneGrid = data.frame(vars = c((1:10)*10 , ncol(mdrrDescr)))) #' #' @keywords models #' #' @export "bag" <- function(x, ...) UseMethod("bag") #' @rdname bag #' @export bagControl <- function( fit = NULL, predict = NULL, aggregate = NULL, downSample = FALSE, oob = TRUE, allowParallel = TRUE) { list(fit = fit, predict = predict, aggregate = aggregate, downSample = downSample, oob = oob, allowParallel = allowParallel) } #' @rdname bag #' @method bag default #' @export "bag.default" <- function(x, y, B = 10, vars = ncol(x), bagControl = NULL, ...) { funcCall <- match.call(expand.dots = TRUE) if(is.null(bagControl)) stop("Please specify 'bagControl' with the appropriate functions") if(!is.null(vars) && vars < 1) stop("vars must be an integer > 0") if(bagControl$downSample & is.numeric(y)) { warning("down-sampling with regression... downSample changed to FALSE") bagControl$downSample <- FALSE } if(is.null(bagControl$fit) | is.null(bagControl$predict) | is.null(bagControl$aggregate)) { stop("The control arguments 'fit', 'predict' and 'aggregate' should have non-NULL values") } fitter <- function(index, x, y, ctrl, v, ...) { subX <- x[index,, drop = FALSE] subY <- y[index] if(!is.null(v)) { if(v > ncol(x)) v <- ncol(x) subVars <- sample(1:ncol(subX), ceiling(v)) subX <- subX[, subVars, drop = FALSE] } else subVars <- NULL if(ctrl$downSample) { freaks <- table(subY) smallFreak <- min(freaks) splitUp <- split(seq(along = subY), subY) splitUp <- lapply(splitUp, sample, size = smallFreak) keepers <- unlist(splitUp) subX <- subX[keepers,,drop = FALSE] subY <- subY[keepers] } fit <- ctrl$fit(subX, subY, ...) if(ctrl$oob) { pred <- ctrl$predict(fit, x[-unique(index), subVars, drop = FALSE]) if(is.vector(pred)) { out <- data.frame(pred = pred, obs = y[-unique(index)]) } else { out <- as.data.frame(pred) out$obs <- y[-unique(index)] if(is.factor(y) & !(any(names(out) == "pred"))) { ## Try to detect class probs and make a pred factor if(all(levels(y) %in% names(out))) { pred <- apply(out[, levels(y)], 1, which.max) pred <- factor(levels(y)[pred], levels = levels(y)) out$pred <- pred } } } out$key <- paste(sample(letters, 10, replace = TRUE), collapse = "") } else out <- NULL list(fit = fit, vars = subVars, oob = out) } btSamples <- createResample(y, times = B) `%op%` <- if(bagControl$allowParallel) `%dopar%` else `%do%` btFits <- foreach(iter = seq(along = btSamples), .verbose = FALSE, .packages = "caret", .errorhandling = "stop") %op% fitter(btSamples[[iter]], x = x, y = y, ctrl = bagControl, v = vars, ...) structure( list(fits = btFits, control = bagControl, call = funcCall, B = B, vars = vars, smallClass = min(table(y)), dims = dim(x)), class = "bag") } #' @importFrom stats contrasts model.matrix model.response model.weights na.omit #' @export "bag.formula" <- function (formula, data = NULL,..., subset, weights, na.action = na.omit) { funcCall <- match.call(expand.dots = TRUE) if (!inherits(formula, "formula")) stop("method is only for formula objects") m <- match.call(expand.dots = FALSE) mIndex <- match(c("formula", "data", "subset", "weights", "na.action"), names(m), 0) m <- m[c(1, mIndex)] m$... <- m$B <- m$vars <- m$bagControl <- NULL m$na.action <- na.action m[[1]] <- as.name("model.frame") m <- eval(m, parent.frame()) Terms <- attr(m, "terms") attr(Terms, "intercept") <- 0 y <- model.response(m) w <- model.weights(m) x <- model.matrix(Terms, m, contrasts) cons <- attr(x, "contrast") xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] out <- bag.default(x, y, ...) out$call <- funcCall out } #' @rdname bag #' @method predict bag #' @importFrom stats predict #' @export "predict.bag" <- function(object, newdata = NULL, ...) { if(is.null(newdata)) stop("please provide a data set for prediction") predictor <- function(obj, x, ctrl) { if(!is.null(obj$vars)) x <- x[, obj$vars, drop = FALSE] pred <- ctrl$predict(obj$fit, x) } btPred <- lapply(object$fit, predictor, x = newdata, ctrl = object$control) object$control$aggregate(btPred, ...) } #' @rdname bag #' @method print bag #' @export print.bag <- function (x, ...) { printCall(x$call) cat("\nB:", x$B,"\n") cat("Training data:", x$dims[2], "variables and", x$dims[1], "samples\n") cat(ifelse(is.null(x$vars) || x$dims[2] == x$vars, "All variables were used in each model", paste("Each model used", x$vars, "random", ifelse(x$vars == 1, "variable", "variables"), "predictors"))) cat('\n') if(x$control$downSample) { cat("Training data was down-sampled to balance the classes to", x$smallClass, "samples per class\n\n") } invisible(x) } #' @rdname bag #' @method summary bag #' @importFrom stats quantile #' @export "summary.bag" <- function(object, ...) { hasPred <- any(names(object$fits[[1]]$oob) == "pred") if(object$control$oob & hasPred) { ## to avoid a 'no visible binding for global variable' warning key <- NULL oobData <- lapply(object$fits, function(x) x$oob) oobData <- do.call("rbind", oobData) oobResults <- ddply(oobData, .(key), defaultSummary) oobResults$key <- NULL oobStat <- apply(oobResults, 2, function(x) quantile(x, na.rm = TRUE, probs = c(0, 0.025, .25, .5, .75, .975, 1))) rownames(oobStat) <- paste(format(as.numeric(format(gsub("%", "", rownames(oobStat))))), "%", sep = "") B <- nrow(oobResults) } else { oobStat <- NULL B <- NULL } out <- list(oobStat = oobStat, call = object$call, B = B) class(out) <- "summary.bag" out } #' @rdname bag #' @method print summary.bag #' @export "print.summary.bag" <- function(x, digits = max(3, getOption("digits") - 3), ...) { printCall(x$call) if(!is.null(x$oobStat)) { cat("Out of bag statistics (B = ", x$B, "):\n\n", sep = "") print(x$oobStat, digits = digits) } else cat("No out of bag statistics\n") cat("\n") } #' @rdname bag #' @importFrom stats median predict #' @export ldaBag <- list(fit = function(x, y, ...) { loadNamespace("MASS") MASS::lda(x, y, ...) }, pred = function(object, x) { if(!is.data.frame(x)) x <- as.data.frame(x) predict(object, x)$posterior }, aggregate = function(x, type = "class") { ## The class probabilities come in as a list of matrices ## For each class, we can pool them then average over them pooled <- x[[1]] * NA n <- nrow(pooled) classes <- colnames(pooled) for(i in 1:ncol(pooled)) { tmp <- lapply(x, function(y, col) y[,col], col = i) tmp <- do.call("rbind", tmp) pooled[,i] <- apply(tmp, 2, median) } pooled <- apply(pooled, 1, function(x) x/sum(x)) if(n != nrow(pooled)) pooled <- t(pooled) if(type == "class") { out <- factor(classes[apply(pooled, 1, which.max)], levels = classes) } else out <- as.data.frame(pooled) out }) #' @rdname bag #' @importFrom stats median predict #' @export plsBag <- list(fit = function(x, y, ...) { loadNamespace("pls") caret::plsda(x, y, ...) }, pred = function(object, x) { if(!is.data.frame(x)) x <- as.data.frame(x) predict(object, x, type = "prob")[,,] }, aggregate = function(x, type = "class") { pooled <- x[[1]] * NA classes <- colnames(pooled) for(i in 1:ncol(pooled)) { tmp <- lapply(x, function(y, col) y[,col], col = i) tmp <- do.call("rbind", tmp) pooled[,i] <- apply(tmp, 2, median) } if(type == "class") { out <- factor(classes[apply(pooled, 1, which.max)], levels = classes) } else out <- as.data.frame(pooled) out }) #' @rdname bag #' @importFrom stats median predict #' @export nbBag <- list(fit = function(x, y, ...) { loadNamespace("klaR") klaR::NaiveBayes(x, y, usekernel = TRUE, fL = 2, ...) }, pred = function(object, x) { if(!is.data.frame(x)) x <- as.data.frame(x) as.data.frame(predict(object, x)$posterior) }, aggregate = function(x, type = "class") { pooled <- x[[1]] * NA classes <- colnames(pooled) for(i in 1:ncol(pooled)) { tmp <- lapply(x, function(y, col) y[,col], col = i) tmp <- do.call("rbind", tmp) pooled[,i] <- apply(tmp, 2, median) } if(type == "class") { out <- factor(classes[apply(pooled, 1, which.max)], levels = classes) } else out <- as.data.frame(pooled) out }) #' @rdname bag #' @importFrom stats median #' @export ctreeBag <- list(fit = function(x, y, ...) { loadNamespace("party") data <- as.data.frame(x) data$y <- y party::ctree(y~., data = data) }, pred = function(object, x) { if(!is.data.frame(x)) x <- as.data.frame(x) obsLevels <- levels(object@data@get("response")[,1]) if(!is.null(obsLevels)) { rawProbs <- party::treeresponse(object, x) probMatrix <- matrix(unlist(rawProbs), ncol = length(obsLevels), byrow = TRUE) out <- data.frame(probMatrix) colnames(out) <- obsLevels rownames(out) <- NULL } else out <- unlist(party::treeresponse(object, x)) out }, aggregate = function(x, type = "class") { if(is.matrix(x[[1]]) | is.data.frame(x[[1]])) { pooled <- x[[1]] & NA classes <- colnames(pooled) for(i in 1:ncol(pooled)) { tmp <- lapply(x, function(y, col) y[,col], col = i) tmp <- do.call("rbind", tmp) pooled[,i] <- apply(tmp, 2, median) } if(type == "class") { out <- factor(classes[apply(pooled, 1, which.max)], levels = classes) } else out <- as.data.frame(pooled) } else { x <- matrix(unlist(x), ncol = length(x)) out <- apply(x, 1, median) } out }) #' @rdname bag #' @importFrom stats median predict #' @export svmBag <- list(fit = function(x, y, ...) { loadNamespace("kernlab") out <- kernlab::ksvm(as.matrix(x), y, prob.model = is.factor(y), ...) out }, pred = function(object, x) { if(is.character(lev(object))) { out <- predict(object, as.matrix(x), type = "probabilities") colnames(out) <- lev(object) rownames(out) <- NULL } else out <- predict(object, as.matrix(x))[,1] out }, aggregate = function(x, type = "class") { if(is.matrix(x[[1]]) | is.data.frame(x[[1]])) { pooled <- x[[1]] & NA classes <- colnames(pooled) for(i in 1:ncol(pooled)) { tmp <- lapply(x, function(y, col) y[,col], col = i) tmp <- do.call("rbind", tmp) pooled[,i] <- apply(tmp, 2, median) } if(type == "class") { out <- factor(classes[apply(pooled, 1, which.max)], levels = classes) } else out <- as.data.frame(pooled) } else { x <- matrix(unlist(x), ncol = length(x)) out <- apply(x, 1, median) } out }) #' @rdname bag #' @importFrom stats median predict #' @export nnetBag <- list(fit = function(x, y, ...) { loadNamespace("nnet") factorY <- is.factor(y) if(factorY) y <- class2ind(y) out <- nnet::nnet(x, y, linout = !factorY, trace = FALSE, ...) out$classification <- factorY out }, pred = function(object, x) { out <- predict(object, x, type= "raw") if(object$classification) { colnames(out) <- colnames(object$fitted.values) rownames(out) <- NULL } else out <- predict(object, x, type= "raw")[,1] out }, aggregate = function(x, type = "class") { if(is.matrix(x[[1]]) | is.data.frame(x[[1]])) { pooled <- x[[1]] & NA classes <- colnames(pooled) for(i in 1:ncol(pooled)) { tmp <- lapply(x, function(y, col) y[,col], col = i) tmp <- do.call("rbind", tmp) pooled[,i] <- apply(tmp, 2, median) } if(type == "class") { out <- factor(classes[apply(pooled, 1, which.max)], levels = classes) } else out <- as.data.frame(pooled) } else { x <- matrix(unlist(x), ncol = length(x)) out <- apply(x, 1, median) } out }) caret/R/knnreg.R0000644000176200001440000001603313156622073013170 0ustar liggesusers#' k-Nearest Neighbour Regression #' #' $k$-nearest neighbour regression that can return the average value for the #' neighbours. #' #' \code{knnreg} is similar to \code{\link[ipred]{ipredknn}} and #' \code{knnregTrain} is a modification of \code{\link[class]{knn}}. The #' underlying C code from the \code{class} package has been modified to return #' average outcome. #' #' @aliases knnreg knnregTrain knnreg.formula knnreg.default knnreg.matrix #' knnreg.data.frame knnreg #' @param formula a formula of the form \code{lhs ~ rhs} where \code{lhs} is #' the response variable and \code{rhs} a set of predictors. #' @param data optional data frame containing the variables in the model #' formula. #' @param subset optional vector specifying a subset of observations to be #' used. #' @param na.action function which indicates what should happen when the data #' contain \code{NA}s. #' @param k number of neighbours considered. #' @param x a matrix or data frame of training set predictors. #' @param y a numeric vector of outcomes. #' @param ... additional parameters to pass to \code{knnregTrain}. #' @param train matrix or data frame of training set cases. #' @param test matrix or data frame of test set cases. A vector will be #' interpreted as a row vector for a single case. #' @param use.all controls handling of ties. If true, all distances equal to #' the \code{k}th largest are included. If false, a random selection of #' distances equal to the \code{k}th is chosen to use exactly \code{k} #' neighbours. #' @return An object of class \code{knnreg}. See \code{\link{predict.knnreg}}. #' @author \code{\link[class]{knn}} by W. N. Venables and B. D. Ripley and #' \code{\link[ipred]{ipredknn}} by Torsten.Hothorn #' , modifications by Max Kuhn and #' Chris Keefer #' @keywords multivariate #' @examples #' #' data(BloodBrain) #' #' inTrain <- createDataPartition(logBBB, p = .8)[[1]] #' #' trainX <- bbbDescr[inTrain,] #' trainY <- logBBB[inTrain] #' #' testX <- bbbDescr[-inTrain,] #' testY <- logBBB[-inTrain] #' #' fit <- knnreg(trainX, trainY, k = 3) #' #' plot(testY, predict(fit, testX)) #' #' @export knnreg "knnreg" <- function(x, ...) UseMethod("knnreg") #' @rdname knnreg #' @method knnreg default #' @export knnreg.default <- function(x, ...) { if(!any(class(x) %in% "formula")) stop("knnreg only implemented for formula objects") } #' @rdname knnreg #' @method knnreg formula #' @importFrom stats model.matrix terms model.extract #' @export knnreg.formula <- function (formula, data, subset, na.action, k = 5, ...) { if (missing(formula) || (length(formula) != 3) || (length(attr(terms(formula[-2], data = data), "term.labels")) < 1) || (length(attr(terms(formula[-3], data = data), "term.labels")) != 1)) stop("formula missing or incorrect") m <- match.call(expand.dots = FALSE) if (is.matrix(eval(m$data, parent.frame()))) m$data <- as.data.frame(data) m[[1]] <- as.name("model.frame") m$... <- NULL m$k <- NULL m <- eval(m, parent.frame()) Terms <- attr(m, "terms") y <- model.extract(m, "response") x <- model.matrix(Terms, m) xvars <- as.character(attr(Terms, "variables"))[-1] if ((yvar <- attr(Terms, "response")) > 0) xvars <- xvars[-yvar] xlev <- if (length(xvars) > 0) { xlev <- lapply(m[xvars], levels) xlev[!sapply(xlev, is.null)] } xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] RET <- list(learn = list(y = y, X = x)) RET$k <- k RET$terms <- Terms RET$contrasts <- attr(x, "contrasts") RET$xlevels <- xlev RET$theDots <- list(...) attr(RET, "na.message") <- attr(m, "na.message") if (!is.null(attr(m, "na.action"))) RET$na.action <- attr(m, "na.action") class(RET) <- "knnreg" RET } #' @rdname knnreg #' @method knnreg matrix #' @export knnreg.matrix <- function(x, y, k = 5, ...) { if(!is.matrix(x)) x <- as.matrix(x) if(!is.numeric(y)) stop("y must be numeric") RET <- list(learn = list(y = y, X = x)) RET$k <- k RET$terms <- NULL RET$contrasts <- NULL RET$theDots <- list(...) class(RET) <- "knnreg" RET } #' @rdname knnreg #' @method knnreg data.frame #' @export knnreg.data.frame <- function(x, y, k = 5, ...) { x <- as.data.frame(x) if(!is.numeric(y)) stop("y must be numeric") RET <- list(learn = list(y = y, X = x)) RET$k <- k RET$terms <- NULL RET$contrasts <- NULL RET$theDots <- list(...) class(RET) <- "knnreg" RET } #' @rdname knnreg #' @method print knnreg #' @export print.knnreg <- function (x, ...) { cat(x$k, "-nearest neighbor regression model\n", sep = "") invisible(x) } #' Predictions from k-Nearest Neighbors Regression Model #' #' Predict the outcome of a new observation based on k-NN. #' #' This function is a method for the generic function \code{\link{predict}} for #' class \code{knnreg}. For the details see \code{\link{knnreg}}. This is #' essentially a copy of \code{\link[ipred]{predict.ipredknn}}. #' #' @aliases predict.knnreg #' @param object object of class \code{knnreg}. #' @param newdata a data frame or matrix of new observations. #' @param ... additional arguments. #' @return a numeric vector #' @author Max Kuhn, Chris Keefer, adapted from \code{\link[class]{knn}} and #' \code{\link[ipred]{predict.ipredknn}} #' @keywords multivariate #' @method predict knnreg #' @export predict.knnreg <- function (object, newdata, ...) { if (!inherits(object, "knnreg")) stop("object not of class knnreg") if (!is.null(Terms <- object$terms)) { if (missing(newdata)) newdata <- model.frame(object) else { newdata <- model.frame(as.formula(delete.response(Terms)), newdata) } x <- model.matrix(delete.response(Terms), newdata, contrasts = object$contrasts) xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] } else { x <- as.matrix(newdata) } argList <- list(train = object$learn$X, test = x, y = object$learn$y, k = object$k) RET <- do.call("knnregTrain", argList) RET } #' @rdname knnreg #' @export knnregTrain <- function(train, test, y, k = 5, use.all=TRUE) { train <- as.matrix(train) if(is.null(dim(test))) dim(test) <- c(1, length(test)) test <- as.matrix(test) if(any(is.na(train)) || any(is.na(test)) || any(is.na(y))) stop("no missing values are allowed") p <- ncol(train) ntr <- nrow(train) if(length(y) != ntr) stop("'train' and 'class' have different lengths") if(ntr < k) { warning(gettextf("k = %d exceeds number %d of patterns", k, ntr), domain = NA) k <- ntr } if (k < 1) stop(gettextf("k = %d must be at least 1", k), domain = NA) nte <- nrow(test) if(ncol(test) != p) stop("dims of 'test' and 'train differ") Z <- .C("knn3reg", as.integer(k), as.integer(ntr), as.integer(nte), as.integer(p), as.double(train), as.double(y), as.double(test), double(nte), as.integer(FALSE), as.integer(use.all)) Z[[8]] } caret/R/getTrainPerf.R0000644000176200001440000000047513153613153014275 0ustar liggesusers#' @export getTrainPerf <- function(x) { bestPerf <- x$bestTune colnames(bestPerf) <- gsub("^\\.", "", colnames(bestPerf)) out <- merge(x$results, bestPerf) out <- out[, colnames(out) %in% x$perfNames, drop = FALSE] colnames(out) <- paste("Train", colnames(out), sep = "") out$method <- x$method out } caret/R/resampleHist.R0000644000176200001440000000501213153613153014333 0ustar liggesusers#' Plot the resampling distribution of the model statistics #' #' Create a lattice histogram or densityplot from the resampled outcomes from a #' \code{train} object. #' #' All the metrics from the object are plotted, but only for the final model. #' For more comprehensive plots functions, see \code{\link{histogram.train}}, #' \code{\link{densityplot.train}}, \code{\link{xyplot.train}}, #' \code{\link{stripplot.train}}. #' #' For the plot to be made, the \code{returnResamp} argument in #' \code{\link{trainControl}} should be either "final" or "all". #' #' @param object an object resulting form a call to \code{\link{train}} #' @param type a character string. Either "hist" or "density" #' @param \dots options to pass to histogram or densityplot #' @return a object of class \code{trellis} #' @author Max Kuhn #' @seealso \code{\link{train}}, \code{\link[lattice]{histogram}}, #' \code{\link[lattice:histogram]{densityplot}}, \code{\link{histogram.train}}, #' \code{\link{densityplot.train}}, \code{\link{xyplot.train}}, #' \code{\link{stripplot.train}} #' @keywords hplot #' @examples #' #' #' \dontrun{ #' data(iris) #' TrainData <- iris[,1:4] #' TrainClasses <- iris[,5] #' #' knnFit <- train(TrainData, TrainClasses, "knn") #' #' resampleHist(knnFit) #' } #' #' @export resampleHist resampleHist <- function(object, type = "density", ...) { if(object$control$method == "oob") stop("out-of-bag error rate was selected. This plot cannot be created") if(is.null(object$resample)) stop("No resample values were found. This plot cannot be created") resample <- object$resample tuneNames <- as.character(object$modelInfo$parameter$parameter) if(any(names(resample) %in% tuneNames)) { bestTune <- object$bestTune colnames(bestTune) <- gsub("^\\.", "", colnames(bestTune)) resample <- merge(bestTune, resample) resample <- resample[, !(names(resample) %in% tuneNames), drop = FALSE] } results <- melt(resample, id.vars = "Resample") if(type == "density") { out <- densityplot(~ value|variable, data = results, scales = list(relation = "free"), xlab = "", as.table = TRUE, ...) } else { out <- histogram(~ value|variable, data = results, scales = list(relation = "free"), as.table = TRUE, xlab = "", ...) } out } caret/R/learning_curve.R0000644000176200001440000001357013153613153014706 0ustar liggesusers#' Create Data to Plot a Learning Curve #' #' For a given model, this function fits several versions on different sizes of #' the total training set and returns the results #' #' This function creates a data set that can be used to plot how well the model #' performs over different sized versions of the training set. For each data #' set size, the performance metrics are determined and saved. If #' \code{test_prop == 0}, the apparent measure of performance (i.e. #' re-predicting the training set) and the resampled estimate of performance #' are available. Otherwise, the test set results are also added. #' #' If the model being fit has tuning parameters, the results are based on the #' optimal settings determined by \code{\link{train}}. #' #' @param dat the training data #' @param outcome a character string identifying the outcome column name #' @param proportion the incremental proportions of the training set that are #' used to fit the model #' @param test_prop an optional proportion of the data to be used to measure #' performance. #' @param verbose a logical to print logs to the screen as models are fit #' @param \dots options to pass to \code{\link{train}} to specify the model. #' These should not include \code{x}, \code{y}, \code{formula}, or \code{data}. #' @return a data frame with columns for each performance metric calculated by #' \code{\link{train}} as well as columns: \item{Training_Size }{the number of #' data points used in the current model fit} \item{Data }{which data were used #' to calculate performance. Values are "Resampling", "Training", and #' (optionally) "Testing"} In the results, each data set size will have one row #' for the apparent error rate, one row for the test set results (if used) and #' as many rows as resamples (e.g. 10 rows if 10-fold CV is used). #' @author Max Kuhn #' @seealso \code{\link{train}} #' @keywords models #' @examples #' #' \dontrun{ #' set.seed(1412) #' class_dat <- twoClassSim(1000) #' #' set.seed(29510) #' lda_data <- learing_curve_dat(dat = class_dat, #' outcome = "Class", #' test_prop = 1/4, #' ## `train` arguments: #' method = "lda", #' metric = "ROC", #' trControl = trainControl(classProbs = TRUE, #' summaryFunction = twoClassSummary)) #' #' #' #' ggplot(lda_data, aes(x = Training_Size, y = ROC, color = Data)) + #' geom_smooth(method = loess, span = .8) + #' theme_bw() #' } #' #' @export learing_curve_dat learing_curve_dat <- function(dat, outcome = NULL, proportion = (1:10)/10, test_prop = 0, verbose = TRUE, ...) { if(is.null(outcome)) stop("Please give a character stirng for the outcome column name") proportion <- sort(unique(proportion)) n_size <- length(proportion) if(test_prop > 0) { for_model <- createDataPartition(dat[, outcome], p = 1 - test_prop, list = FALSE) } else for_model <- 1:nrow(dat) n <- length(for_model) resampled <- vector(mode = "list", length = n_size) tested <- if(test_prop > 0) resampled else NULL apparent <- resampled for(i in seq(along = proportion)) { if(verbose) cat("Training for ", round(proportion[i]*100, 1), "% (n = ", floor(n*proportion[i]), ")\n", sep = "") in_mod <- if(proportion[i] < 1) sample(for_model, size = floor(n*proportion[i])) else for_model mod <- train(x = dat[in_mod, colnames(dat) != outcome, drop = FALSE], y = dat[in_mod, outcome], ...) if(i == 1) perf_names <- mod$perfNames resampled[[i]] <- merge(mod$resample, mod$bestTune) resampled[[i]]$Training_Size <- length(in_mod) if(test_prop > 0) { if(!mod$control$classProbs) { test_preds <- extractPrediction(list(model = mod), testX = dat[-for_model, colnames(dat) != outcome, drop = FALSE], testY = dat[-for_model, outcome]) } else { test_preds <- extractProb(list(model = mod), testX = dat[-for_model, colnames(dat) != outcome, drop = FALSE], testY = dat[-for_model, outcome]) } test_perf <- mod$control$summaryFunction(test_preds, lev = mod$finalModel$obsLevels) test_perf <- as.data.frame(t(test_perf)) test_perf$Training_Size <- length(in_mod) tested[[i]] <- test_perf try(rm(test_preds, test_perf), silent = TRUE) } if(!mod$control$classProbs) { app_preds <- extractPrediction(list(model = mod), testX = dat[in_mod, colnames(dat) != outcome, drop = FALSE], testY = dat[in_mod, outcome]) } else { app_preds <- extractProb(list(model = mod), testX = dat[in_mod, colnames(dat) != outcome, drop = FALSE], testY = dat[in_mod, outcome]) } app_perf <- mod$control$summaryFunction(app_preds, lev = mod$finalModel$obsLevels) app_perf <- as.data.frame(t(app_perf)) app_perf$Training_Size <- length(in_mod) apparent[[i]] <- app_perf try(rm(mod, in_mod, app_preds, app_perf), silent = TRUE) } resampled <- do.call("rbind", resampled) resampled <- resampled[, c(perf_names, "Training_Size")] resampled$Data <- "Resampling" apparent <- do.call("rbind", apparent) apparent <- apparent[, c(perf_names, "Training_Size")] apparent$Data <- "Training" out <- rbind(resampled, apparent) if(test_prop > 0) { tested <- do.call("rbind", tested) tested <- tested[, c(perf_names, "Training_Size")] tested$Data <- "Testing" out <- rbind(out, tested) } out } caret/R/featurePlot.R0000644000176200001440000000646113153613153014176 0ustar liggesusers#' Wrapper for Lattice Plotting of Predictor Variables #' #' A shortcut to produce lattice graphs #' #' This function ``stacks'' data to get it into a form compatible with lattice #' and creates the plots #' #' @param x a matrix or data frame of continuous feature/probe/spectra data. #' @param y a factor indicating class membership. #' @param plot the type of plot. For classification: \code{box}, \code{strip}, #' \code{density}, \code{pairs} or \code{ellipse}. For regression, #' \code{pairs} or \code{scatter} #' @param labels a bad attempt at pre-defined axis labels #' @param \dots options passed to lattice calls. #' @return An object of class ``trellis''. The `update' method can be used to #' update components of the object and the `print' method (usually called by #' default) will plot it on an appropriate plotting device. #' @author Max Kuhn #' @keywords hplot #' @examples #' #' x <- matrix(rnorm(50*5),ncol=5) #' y <- factor(rep(c("A", "B"), 25)) #' #' trellis.par.set(theme = col.whitebg(), warn = FALSE) #' featurePlot(x, y, "ellipse") #' featurePlot(x, y, "strip", jitter = TRUE) #' featurePlot(x, y, "box") #' featurePlot(x, y, "pairs") #' #' @export featurePlot "featurePlot" <- function(x, y, plot = if(is.factor(y)) "strip" else "scatter", labels = c("Feature", ""), ...) { if(!is.data.frame(x)) x <- as.data.frame(x) numFeat <- dim(x)[2] if(plot != "pairs") { stackX <- stack(x) stackX$.y <- rep(y, numFeat) } else { if(!is.factor(y)) { x <- data.frame(cbind(x, y)) } } if(is.factor(y)) { featPlot <- switch(tolower(plot), strip = stripplot(values ~ .y|ind, stackX, xlab = labels[1], ylab = labels[2], ...), box =, boxplot = bwplot(values ~ .y|ind, stackX, xlab = labels[1], ylab = labels[2], ...), density = densityplot(~values |ind, stackX, groups = stackX$.y, xlab = labels[1], ylab = labels[2], ...), pairs = splom(~x, groups = y, ...), ellipse = splom(~x, groups = y, panel = function(x, y, groups, subscripts, ...) { requireNamespaceQuietStop("ellipse") lineInfo <- trellis.par.get("superpose.line") pointInfo <- trellis.par.get("superpose.symbol") uniqueGroups <- sort(unique(groups)) for (i in seq(along=uniqueGroups)) { id <- which(groups[subscripts] == uniqueGroups[i]) panel.xyplot(x[id], y[id], pch = pointInfo$pch[i], col = pointInfo$col[i], cex = pointInfo$cex[i], ...) groupVar<-var(cbind(x[id],y[id])) groupMean<-cbind(mean(x[id]),mean(y[id])) groupEllipse<-ellipse::ellipse(groupVar, centre = groupMean, level = 0.95) panel.xyplot(groupEllipse[,1], groupEllipse[,2], type="l", col = lineInfo$col[i], lty = lineInfo$lty[i], ...) } }, ...) ) } else { featPlot <- switch(tolower(plot), scatter =, xyplot = xyplot(.y ~ values|ind, stackX, scales = list( x = list(relation = "free")), xlab = labels[1], ylab = labels[2], ...), pairs = splom(~x, ...)) } featPlot } caret/R/bagFDA.R0000644000176200001440000001776313206657315012766 0ustar liggesusers#' Bagged FDA #' @aliases bagFDA print.bagFDA bagFDA.default bagFDA.formula #' #' @description A bagging wrapper for flexible discriminant analysis (FDA) using multivariate adaptive regression splines (MARS) basis functions #' #' #' @param formula A formula of the form \code{y ~ x1 + x2 + ...} #' @param x matrix or data frame of 'x' values for examples. #' @param y matrix or data frame of numeric values outcomes. #' @param weights (case) weights for each example - if missing defaults to 1. #' @param data Data frame from which variables specified in 'formula' are #' preferentially to be taken. #' @param subset An index vector specifying the cases to be used in the #' training sample. (NOTE: If given, this argument must be #' named.) #' @param na.action A function to specify the action to be taken if 'NA's are #' found. The default action is for the procedure to fail. An #' alternative is na.omit, which leads to rejection of cases #' with missing values on any required variable. (NOTE: If #' given, this argument must be named.) #' #' @param B the number of bootstrap samples #' #' @param keepX a logical: should the original training data be kept? #' #' @param \dots arguments passed to the \code{mars} function #' #' @details The function computes a FDA model for each bootstap sample. #' #' @return #' A list with elements #' \item{fit }{a list of \code{B} FDA fits} #' \item{B }{the number of bootstrap samples} #' \item{call }{the function call} #' \item{x }{either \code{NULL} or the value of \code{x}, depending on the #' value of \code{keepX}} #' \item{oob}{a matrix of performance estimates for each bootstrap sample} #' #' @references J. Friedman, ``Multivariate Adaptive Regression Splines'' (with discussion) (1991). Annals of Statistics, 19/1, 1-141. #' #' @author Max Kuhn (\code{bagFDA.formula} is based on Ripley's \code{nnet.formula}) #' #' @seealso \code{\link[mda]{fda}}, \code{\link{predict.bagFDA}} #' #' @examples #' library(mlbench) #' library(earth) #' data(Glass) #' #' set.seed(36) #' inTrain <- sample(1:dim(Glass)[1], 150) #' #' trainData <- Glass[ inTrain, ] #' testData <- Glass[-inTrain, ] #' #' #' set.seed(3577) #' baggedFit <- bagFDA(Type ~ ., trainData) #' confusionMatrix(data = predict(baggedFit, testData[, -10]), #' reference = testData[, 10]) #' #' @keywords regression #' #' @export "bagFDA" <- function(x, ...) UseMethod("bagFDA") #' @rdname bagFDA #' @method bagFDA default #' @importFrom stats predict #' @export "bagFDA.default" <- function(x, y, weights = NULL, B = 50, keepX = TRUE, ...) { requireNamespaceQuietStop("mda") requireNamespaceQuietStop("earth") if(!is.matrix(x)) x <- as.matrix(x) if(!is.vector(y) & !is.factor(y)) y <- as.vector(y) if(!is.vector(y) & !is.factor(y)) y <- factor(y[,1]) if(is.null(weights)) weights <- rep(1, dim(x)[1]) foo <- function(index, x, y, w, ...) { subX <- x[index,, drop = FALSE] subY <- y[index] tmp <- as.data.frame(subX) tmp$.outcome <- subY if(!is.null(w)) subW <- w[index] fit <- if(is.null(w)) mda::fda(.outcome ~., data = tmp, method = earth::earth, ...) else mda::fda(.outcome ~., data = tmp, method = earth::earth, weights = subW, ...) fit$index <- index fit } oobFoo <- function(fit, x, y) { index <- fit$index subX <- x[-index,, drop = FALSE] subY <- y[-index] predY <- predict(fit, subX) postResample(predY, subY) } btSamples <- createResample(y, times = B) btFits <- lapply(btSamples, foo, x = x, y = y, w = weights, ...) oobList <- lapply(btFits, oobFoo, x = x, y = y) oob <- matrix(unlist(oobList), ncol = length(oobList[[1]]), byrow = TRUE) colnames(oob) <- names(oobList[[1]]) if(keepX) x <- x else x <- NULL structure(list(fit = btFits, B = B, oob = oob, x = x, levels = levels(y), weights = !is.null(weights), dots = list(...)), class = "bagFDA") } #' @rdname bagFDA #' @method bagFDA formula #' @importFrom stats contrasts model.matrix model.response model.weights na.omit #' @export "bagFDA.formula" <- function (formula, data = NULL, B = 50, keepX = TRUE, ..., subset, weights = NULL, na.action = na.omit) { if (!inherits(formula, "formula")) stop("method is only for formula objects") m <- match.call(expand.dots = FALSE) mIndex <- match(c("formula", "data", "subset", "weights", "na.action"), names(m), 0) m <- m[c(1, mIndex)] m$... <- NULL m$na.action <- na.action m[[1]] <- as.name("model.frame") m <- eval(m, parent.frame()) Terms <- attr(m, "terms") attr(Terms, "intercept") <- 0 y <- model.response(m) w <- model.weights(m) x <- model.matrix(Terms, m, contrasts) cons <- attr(x, "contrast") xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] out <- bagFDA.default(x = x, y = y, weights = weights, B = B, keepX = keepX, ...) out } #' @rdname bagFDA #' @method print bagFDA #' @export "print.bagFDA" <- function (x, ...) { if(!is.null(x$x))cat("Data:\n # variables:\t", dim(x$x)[2], "\n # samples:\t", dim(x$x)[1], "\n") cat( "\nModel:", "\n B: \t", x$B, "\n dimension:\t", x$fit[[1]]$dimension, "\n") if(x$weights) cat("case weights used\n") cat("\n") invisible(x) } #' @rdname predict.bagEarth #' @importFrom stats predict #' @export "predict.bagFDA" <- function(object, newdata = NULL, type = "class", ...) { requireNamespaceQuietStop("mda") requireNamespaceQuietStop("earth") getTrainPred <- function(x) { oobIndex <- 1:nrow(x$fit$fitted.values) oobIndex <- oobIndex[!(oobIndex %in% unique(x$index))] tmp <- predict(x, type = "posterior")[oobIndex,,drop = FALSE] rownames(tmp) <- 1:nrow(tmp) out <- data.frame(pred = tmp, sample = oobIndex, check.rows = FALSE) colnames(out)[1:ncol(tmp)] <- names(x$prior) out } if(is.null(newdata) & !is.null(object$x)) newdata <- object$x if(is.null(newdata)) { pred <- lapply(object$fit, getTrainPred) } else { pred <- lapply(object$fit, function(x, y) { tmp <- predict(x, newdata = y, type = "posterior") nms <- colnames(tmp) tmp <- as.data.frame(tmp) names(tmp) <- nms tmp$sample <- 1:nrow(tmp) tmp }, y = newdata) } pred <- rbind.fill(pred) out <- ddply(pred, .(sample), function(x) colMeans(x[,seq(along = object$levels)], na.rm = TRUE)) out <- out[,-1,drop = FALSE] rownames(out) <- rownames(newdata) predClass <- object$levels[apply(out, 1, which.max)] predClass <- factor(predClass, levels = object$levels) switch(type, class = predClass, probs = out, posterior = out) } #' @rdname summary.bagEarth #' @method summary bagFDA #' @importFrom stats quantile #' @export "summary.bagFDA" <- function(object, ...) { oobStat <- apply(object$oob, 2, function(x) quantile(x, probs = c(0, 0.025, .5, .975, 1))) numTerms <- unlist(lapply(object$fit, function(x) length(x$fit$selected.terms))) numVar <- unlist(lapply( object$fit, function(x) { sum( apply( x$fit$dirs, 2, function(u) any(u != 0))) })) modelInfo <- cbind(numTerms, numVar) colnames(modelInfo) <- c("Num Terms", "Num Variables") out <- list(modelInfo = modelInfo, oobStat = oobStat) class(out) <- "summary.bagFDA" out } #' @export "print.summary.bagFDA" <- function(x, digits = max(3, getOption("digits") - 3), ...) { oobStat <- apply(x$oob, 2, function(x) quantile(x, probs = c(0, 0.025, .25, .5, .75, .975, 1))) cat("Out of bag statistics:\n\n") print(x$oobStat, digits = digits) cat("\nModel Selection Statistics:\n\n") print(summary(x$modelInfo)) cat("\n") } caret/R/workflows.R0000644000176200001440000007120513205126022013727 0ustar liggesusers ### In this file, there are a lot of functions from packages that are ### referenced using `getFromNamespace`. For some ### reason, with _some_ parallel processing technologies and foreach, ### functions inside of caret cannot be found despite using the ### ".packages" argument or even calling the caret package via library(). getOper <- function(x) if(x) `%dopar%` else `%do%` getTrainOper <- function(x) if(x) `%dopar%` else `%do%` #' @rdname caret-internal #' @export #' @keywords internal progress <- function(x, names, iter, start = TRUE) { text <- paste(ifelse(start, "+ ", "- "), names[iter], ": ", paste(colnames(x), x, sep = "=", collapse = ", "), sep = "") cat(text, "\n") } #' @rdname caret-internal #' @importFrom stats sd #' @export MeanSD <- function(x, exclude = NULL) { if(!is.null(exclude)) x <- x[, !(colnames(x) %in% exclude), drop = FALSE] out <- c(colMeans(x, na.rm = TRUE), sapply(x, sd, na.rm = TRUE)) names(out)[-(1:ncol(x))] <- paste(names(out)[-(1:ncol(x))], "SD", sep = "") out } #' @rdname caret-internal #' @export expandParameters <- function(fixed, seq) { if(is.null(seq)) return(fixed) isSeq <- names(fixed) %in% names(seq) out <- fixed for(i in 1:nrow(seq)) { tmp <- fixed tmp[,isSeq] <- seq[i,] out <- rbind(out, tmp) } out } #' @importFrom utils head #' @importFrom stats complete.cases #' @import foreach nominalTrainWorkflow <- function(x, y, wts, info, method, ppOpts, ctrl, lev, testing = FALSE, ...) { loadNamespace("caret") ppp <- list(options = ppOpts) ppp <- c(ppp, ctrl$preProcOptions) printed <- format(info$loop, digits = 4) colnames(printed) <- gsub("^\\.", "", colnames(printed)) ## For 632 estimator, add an element to the index of zeros to trick it into ## fitting and predicting the full data set. resampleIndex <- ctrl$index if(ctrl$method %in% c("boot632", "optimism_boot", "boot_all")) { resampleIndex <- c(list("AllData" = rep(0, nrow(x))), resampleIndex) ctrl$indexOut <- c(list("AllData" = rep(0, nrow(x))), ctrl$indexOut) if(!is.null(ctrl$indexExtra)) ctrl$indexExtra <- c(list("AllData" = NULL), ctrl$indexExtra) } `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) keep_pred <- isTRUE(ctrl$savePredictions) || ctrl$savePredictions %in% c("all", "final") pkgs <- c("methods", "caret") if(!is.null(method$library)) pkgs <- c(pkgs, method$library) export <- c() result <- foreach(iter = seq(along = resampleIndex), .combine = "c", .verbose = FALSE, .export = export, .packages = "caret") %:% foreach(parm = 1L:nrow(info$loop), .combine = "c", .verbose = FALSE, .export = export , .packages = "caret") %op% { if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) set.seed(ctrl$seeds[[iter]][parm]) loadNamespace("caret") lapply(pkgs, requireNamespaceQuietStop) if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter) if(names(resampleIndex)[iter] != "AllData") { modelIndex <- resampleIndex[[iter]] holdoutIndex <- ctrl$indexOut[[iter]] } else { modelIndex <- 1:nrow(x) holdoutIndex <- modelIndex } is_regression <- is.null(lev) if(testing) cat("pre-model\n") if(!is.null(info$submodels[[parm]]) && nrow(info$submodels[[parm]]) > 0) { submod <- info$submodels[[parm]] } else submod <- NULL mod <- try( createModel(x = subset_x(x, modelIndex), y = y[modelIndex], wts = wts[modelIndex], method = method, tuneValue = info$loop[parm,,drop = FALSE], obsLevels = lev, pp = ppp, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...), silent = TRUE) if(testing) print(mod) if(!model_failed(mod)) { predicted <- try( predictionFunction(method = method, modelFit = mod$fit, newdata = subset_x(x, holdoutIndex), preProc = mod$preProc, param = submod), silent = TRUE) if(pred_failed(predicted)) { fail_warning(settings = printed[parm,,drop = FALSE], msg = predicted, where = "predictions", iter = names(resampleIndex)[iter], verb = ctrl$verboseIter) predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } } else { fail_warning(settings = printed[parm,,drop = FALSE], msg = mod, iter = names(resampleIndex)[iter], verb = ctrl$verboseIter) predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } if(testing) print(head(predicted)) if(ctrl$classProbs) { if(!model_failed(mod)) { probValues <- probFunction(method = method, modelFit = mod$fit, newdata = subset_x(x, holdoutIndex), preProc = mod$preProc, param = submod) } else { probValues <- fill_failed_prob(holdoutIndex, lev, submod) } if(testing) print(head(probValues)) } ################################## predicted <- trim_values(predicted, ctrl, is_regression) ################################## if(!is.null(submod)) { ## merge the fixed and seq parameter values together allParam <- expandParameters(info$loop[parm,,drop = FALSE], info$submodels[[parm]]) allParam <- allParam[complete.cases(allParam),, drop = FALSE] ## collate the predicitons across all the sub-models predicted <- lapply(predicted, function(x, y, wts, lv, rows) { x <- outcome_conversion(x, lv = lev) out <- data.frame(pred = x, obs = y, stringsAsFactors = FALSE) if(!is.null(wts)) out$weights <- wts out$rowIndex <- rows out }, y = y[holdoutIndex], wts = wts[holdoutIndex], lv = lev, rows = holdoutIndex) if(ctrl$classProbs) predicted <- mapply(cbind, predicted, probValues, SIMPLIFY = FALSE) if(keep_pred) { tmpPred <- predicted for(modIndex in seq(along = tmpPred)) { tmpPred[[modIndex]] <- merge(tmpPred[[modIndex]], allParam[modIndex,,drop = FALSE], all = TRUE) } tmpPred <- rbind.fill(tmpPred) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ## get the performance for this resample for each sub-model thisResample <- lapply(predicted, ctrl$summaryFunction, lev = lev, model = method) if(testing) print(head(thisResample)) ## for classification, add the cell counts if(length(lev) > 1 && length(lev) <= 50) { cells <- lapply(predicted, function(x) flatTable(x$pred, x$obs)) for(ind in seq(along = cells)) thisResample[[ind]] <- c(thisResample[[ind]], cells[[ind]]) } thisResample <- do.call("rbind", thisResample) thisResample <- cbind(allParam, thisResample) } else { if(is.factor(y)) predicted <- outcome_conversion(predicted, lv = lev) tmp <- data.frame(pred = predicted, obs = y[holdoutIndex], stringsAsFactors = FALSE) ## Sometimes the code above does not coerce the first ## columnn to be named "pred" so force it names(tmp)[1] <- "pred" if(!is.null(wts)) tmp$weights <- wts[holdoutIndex] if(ctrl$classProbs) tmp <- cbind(tmp, probValues) tmp$rowIndex <- holdoutIndex if(keep_pred) { tmpPred <- tmp tmpPred$rowIndex <- holdoutIndex tmpPred <- merge(tmpPred, info$loop[parm,,drop = FALSE], all = TRUE) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ################################## thisResample <- ctrl$summaryFunction(tmp, lev = lev, model = method) ## if classification, get the confusion matrix if(length(lev) > 1 && length(lev) <= 50) thisResample <- c(thisResample, flatTable(tmp$pred, tmp$obs)) thisResample <- as.data.frame(t(thisResample)) thisResample <- cbind(thisResample, info$loop[parm,,drop = FALSE]) } thisResample$Resample <- names(resampleIndex)[iter] thisResampleExtra <- optimism_xy(ctrl, x, y, wts, iter, lev, method, mod, predicted, submod, info$loop[parm,, drop = FALSE]) if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter, FALSE) if(testing) print(thisResample) list(resamples = thisResample, pred = tmpPred, resamplesExtra = thisResampleExtra) } resamples <- rbind.fill(result[names(result) == "resamples"]) pred <- rbind.fill(result[names(result) == "pred"]) resamplesExtra <- rbind.fill(result[names(result) == "resamplesExtra"]) if(ctrl$method %in% c("boot632", "optimism_boot", "boot_all")) { perfNames <- names(resamples) perfNames <- perfNames[!(perfNames %in% c("Resample", as.character(method$parameters$parameter)))] perfNames <- perfNames[!grepl("^\\.cell[0-9]", perfNames)] apparent <- subset(resamples, Resample == "AllData") apparent <- apparent[,!grepl("^\\.cell|Resample", colnames(apparent)),drop = FALSE] names(apparent)[which(names(apparent) %in% perfNames)] <- paste(names(apparent)[which(names(apparent) %in% perfNames)], "Apparent", sep = "") names(apparent) <- gsub("^\\.", "", names(apparent)) if(any(!complete.cases(apparent[,!grepl("^cell|Resample", colnames(apparent)),drop = FALSE]))) { warning("There were missing values in the apparent performance measures.") } resamples <- subset(resamples, Resample != "AllData") if(!is.null(pred)) { predHat <- subset(pred, Resample == "AllData") pred <- subset(pred, Resample != "AllData") } } names(resamples) <- gsub("^\\.", "", names(resamples)) if(any(!complete.cases(resamples[,!grepl("^cell|Resample", colnames(resamples)),drop = FALSE]))) { warning("There were missing values in resampled performance measures.") } out <- ddply(resamples[,!grepl("^cell|Resample", colnames(resamples)),drop = FALSE], ## TODO check this for seq models gsub("^\\.", "", colnames(info$loop)), MeanSD, exclude = gsub("^\\.", "", colnames(info$loop))) if(ctrl$method %in% c("boot632", "boot_all")) { out <- merge(out, apparent) const <- 1 - exp(-1) sapply(perfNames, function(perfName) { perfOut <- if(ctrl$method == "boot_all") paste0(perfName, "_632") else perfName out[, perfOut] <<- (const * out[, perfName]) + ((1-const) * out[, paste(perfName, "Apparent", sep = "")]) NULL }) } if(ctrl$method %in% c("optimism_boot", "boot_all")) { out <- merge(out, apparent) out <- merge(out, ddply(resamplesExtra[, !grepl("Resample", colnames(resamplesExtra)), drop = FALSE], colnames(info$loop), function(df, exclude) { colMeans(df[, setdiff(colnames(df), exclude), drop = FALSE]) }, exclude = colnames(info$loop))) sapply(perfNames, function(perfName) { optimism <- out[ , paste0(perfName, "Orig")] - out[ , paste0(perfName, "Boot")] final_estimate <- out[ , paste0(perfName, "Apparent")] + optimism ## Remove unnecessary values out[ , paste0(perfName, "Orig")] <<- NULL out[ , paste0(perfName, "Boot")] <<- NULL perfOut <- if(ctrl$method == "boot_all") paste0(perfName, "_OptBoot") else perfName ## Update estimates out[ , paste0(perfName, "Optimism")] <<- optimism out[ , perfOut] <<- final_estimate NULL }) } list(performance = out, resamples = resamples, predictions = if(keep_pred) pred else NULL) } #' @import foreach looTrainWorkflow <- function(x, y, wts, info, method, ppOpts, ctrl, lev, testing = FALSE, ...) { loadNamespace("caret") ppp <- list(options = ppOpts) ppp <- c(ppp, ctrl$preProcOptions) printed <- format(info$loop) colnames(printed) <- gsub("^\\.", "", colnames(printed)) `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) pkgs <- c("methods", "caret") if(!is.null(method$library)) pkgs <- c(pkgs, method$library) result <- foreach(iter = seq(along = ctrl$index), .combine = "rbind", .verbose = FALSE, .errorhandling = "stop") %:% foreach(parm = 1:nrow(info$loop), .combine = "rbind", .verbose = FALSE, .errorhandling = "stop") %op% { if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) set.seed(ctrl$seeds[[iter]][parm]) if(testing) cat("after loops\n") loadNamespace("caret") lapply(pkgs, requireNamespaceQuietStop) if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(ctrl$index), iter, TRUE) if(is.null(info$submodels[[parm]]) || nrow(info$submodels[[parm]]) > 0) { submod <- info$submodels[[parm]] } else submod <- NULL is_regression <- is.null(lev) mod <- try( createModel(x = subset_x(x, ctrl$index[[iter]]), y = y[ctrl$index[[iter]] ], wts = wts[ctrl$index[[iter]] ], method = method, tuneValue = info$loop[parm,,drop = FALSE], obsLevels = lev, pp = ppp, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...), silent = TRUE) holdoutIndex <- ctrl$indexOut[[iter]] if(!model_failed(mod)) { predicted <- try( predictionFunction(method = method, modelFit = mod$fit, newdata = subset_x(x, -ctrl$index[[iter]]), preProc = mod$preProc, param = submod), silent = TRUE) if(pred_failed(predicted)) { fail_warning(settings = printed[parm,,drop = FALSE], msg = predicted, where = "predictions", iter = names(ctrl$index)[iter], verb = ctrl$verboseIter) predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } } else { fail_warning(settings = printed[parm,,drop = FALSE], msg = mod, iter = names(ctrl$index)[iter], verb = ctrl$verboseIter) predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } if(testing) print(head(predicted)) if(ctrl$classProbs) { if(!model_failed(mod)) { probValues <- probFunction(method = method, modelFit = mod$fit, newdata = subset_x(x, holdoutIndex), preProc = mod$preProc, param = submod) } else { probValues <- fill_failed_prob(holdoutIndex, lev, submod) } if(testing) print(head(probValues)) } predicted <- trim_values(predicted, ctrl, is_regression) ################################## if(!is.null(info$submodels)) { ## collate the predictions across all the sub-models predicted <- lapply(predicted, function(x, y, wts, lv, rows) { x <- outcome_conversion(x, lv = lev) out <- data.frame(pred = x, obs = y, stringsAsFactors = FALSE) if(!is.null(wts)) out$weights <- wts out$rowIndex <- rows out }, y = y[holdoutIndex], wts = wts[holdoutIndex], lv = lev, rows = seq(along = y)[holdoutIndex]) if(testing) print(head(predicted)) ## same for the class probabilities if(ctrl$classProbs) for(k in seq(along = predicted)) predicted[[k]] <- cbind(predicted[[k]], probValues[[k]]) predicted <- do.call("rbind", predicted) allParam <- expandParameters(info$loop[parm,,drop = FALSE], submod) rownames(predicted) <- NULL predicted <- cbind(predicted, allParam) ## if saveDetails then save and export 'predicted' } else { predicted <- outcome_conversion(predicted, lv = lev) predicted <- data.frame(pred = predicted, obs = y[holdoutIndex], stringsAsFactors = FALSE) if(!is.null(wts)) predicted$weights <- wts[holdoutIndex] if(ctrl$classProbs) predicted <- cbind(predicted, probValues) predicted$rowIndex <- seq(along = y)[holdoutIndex] predicted <- cbind(predicted, info$loop[parm,,drop = FALSE]) } if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(ctrl$index), iter, FALSE) predicted } names(result) <- gsub("^\\.", "", names(result)) out <- ddply(result, as.character(method$parameter$parameter), ctrl$summaryFunction, lev = lev, model = method) list(performance = out, predictions = result) } #' @import foreach oobTrainWorkflow <- function(x, y, wts, info, method, ppOpts, ctrl, lev, testing = FALSE, ...) { loadNamespace("caret") ppp <- list(options = ppOpts) ppp <- c(ppp, ctrl$preProcOptions) printed <- format(info$loop) colnames(printed) <- gsub("^\\.", "", colnames(printed)) `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) pkgs <- c("methods", "caret") if(!is.null(method$library)) pkgs <- c(pkgs, method$library) result <- foreach(parm = 1:nrow(info$loop), .combine = "rbind") %op% { loadNamespace("caret") lapply(pkgs, requireNamespaceQuietStop) if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], "", 1, TRUE) if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) set.seed(ctrl$seeds[[1L]][parm]) mod <- createModel(x = x, y = y, wts = wts, method = method, tuneValue = info$loop[parm,,drop = FALSE], obsLevels = lev, pp = ppp, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...) out <- method$oob(mod$fit) if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], "", 1, FALSE) cbind(as.data.frame(t(out)), info$loop[parm,,drop = FALSE]) } names(result) <- gsub("^\\.", "", names(result)) result } ################################################################################################ #' @import foreach nominalSbfWorkflow <- function(x, y, ppOpts, ctrl, lev, ...) { loadNamespace("caret") ppp <- list(options = ppOpts) ppp <- c(ppp, ctrl$preProcOptions) resampleIndex <- ctrl$index if(ctrl$method %in% c("boot632")){ resampleIndex <- c(list("AllData" = rep(0, nrow(x))), resampleIndex) ctrl$indexOut <- c(list("AllData" = rep(0, nrow(x))), ctrl$indexOut) } `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) result <- foreach(iter = seq(along = resampleIndex), .combine = "c", .verbose = FALSE, .errorhandling = "stop") %op% { if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) set.seed(ctrl$seeds[iter]) loadNamespace("caret") requireNamespaceQuietStop("methods") if(names(resampleIndex)[iter] != "AllData") { modelIndex <- resampleIndex[[iter]] holdoutIndex <- ctrl$indexOut[[iter]] } else { modelIndex <- 1:nrow(x) holdoutIndex <- modelIndex } sbfResults <- sbfIter(subset_x(x, modelIndex), y[modelIndex], subset_x(x, holdoutIndex), y[holdoutIndex], ctrl, ...) if(ctrl$saveDetails) { tmpPred <- sbfResults$pred tmpPred$Resample <- names(resampleIndex)[iter] tmpPred$rowIndex <- seq(along = y)[unique(holdoutIndex)] } else tmpPred <- NULL resamples <- ctrl$functions$summary(sbfResults$pred, lev = lev) if(is.factor(y) && length(lev) <= 50) resamples <- c(resamples, flatTable(sbfResults$pred$pred, sbfResults$pred$obs)) resamples <- data.frame(t(resamples)) resamples$Resample <- names(resampleIndex)[iter] list(resamples = resamples, selectedVars = sbfResults$variables, pred = tmpPred) } resamples <- rbind.fill(result[names(result) == "resamples"]) pred <- if(ctrl$saveDetails) rbind.fill(result[names(result) == "pred"]) else NULL performance <- MeanSD(resamples[,!grepl("Resample", colnames(resamples)),drop = FALSE]) if(ctrl$method %in% c("boot632")) { modelIndex <- 1:nrow(x) holdoutIndex <- modelIndex appResults <- sbfIter(subset_x(x, modelIndex), y[modelIndex], subset_x(x, holdoutIndex), y[holdoutIndex], ctrl, ...) apparent <- ctrl$functions$summary(appResults$pred, lev = lev) perfNames <- names(apparent) perfNames <- perfNames[perfNames != "Resample"] const <- 1-exp(-1) for(p in seq(along = perfNames)) performance[perfNames[p]] <- (const * performance[perfNames[p]]) + ((1-const) * apparent[perfNames[p]]) } list(performance = performance, everything = result, predictions = if(ctrl$saveDetails) pred else NULL) } #' @import foreach looSbfWorkflow <- function(x, y, ppOpts, ctrl, lev, ...) { loadNamespace("caret") ppp <- list(options = ppOpts) ppp <- c(ppp, ctrl$preProcOptions) resampleIndex <- ctrl$index vars <- vector(mode = "list", length = length(y)) `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) result <- foreach(iter = seq(along = resampleIndex), .combine = "c", .verbose = FALSE, .errorhandling = "stop") %op% { if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) set.seed(ctrl$seeds[iter]) loadNamespace("caret") requireNamespaceQuietStop("methods") modelIndex <- resampleIndex[[iter]] holdoutIndex <- -unique(resampleIndex[[iter]]) sbfResults <- sbfIter(subset_x(x, modelIndex), y[modelIndex], subset_x(x, holdoutIndex), y[holdoutIndex], ctrl, ...) sbfResults } resamples <- do.call("rbind", result[names(result) == "pred"]) performance <- ctrl$functions$summary(resamples, lev = lev) list(performance = performance, everything = result, predictions = if(ctrl$saveDetails) resamples else NULL) } ################################################################################################ #' @import foreach nominalRfeWorkflow <- function(x, y, sizes, ppOpts, ctrl, lev, ...) { loadNamespace("caret") ppp <- list(options = ppOpts) ppp <- c(ppp, ctrl$preProcOptions) resampleIndex <- ctrl$index if(ctrl$method %in% c("boot632")) { resampleIndex <- c(list("AllData" = rep(0, nrow(x))), resampleIndex) ctrl$indexOut <- c(list("AllData" = rep(0, nrow(x))), ctrl$indexOut) } `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) result <- foreach(iter = seq(along = resampleIndex), .combine = "c", .verbose = FALSE, .errorhandling = "stop") %op% { loadNamespace("caret") requireNamespace("plyr") requireNamespace("methods") if(names(resampleIndex)[iter] != "AllData") { modelIndex <- resampleIndex[[iter]] holdoutIndex <- ctrl$indexOut[[iter]] } else { modelIndex <- 1:nrow(x) holdoutIndex <- modelIndex } seeds <- if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) ctrl$seeds[[iter]] else NA rfeResults <- rfeIter(subset_x(x, modelIndex), y[modelIndex], subset_x(x, holdoutIndex), y[holdoutIndex], sizes, ctrl, label = names(resampleIndex)[iter], seeds = seeds, ...) resamples <- plyr::ddply(rfeResults$pred, .(Variables), ctrl$functions$summary, lev = lev) if(ctrl$saveDetails) { rfeResults$pred$Resample <- names(resampleIndex)[iter] ## If the user did not have nrow(x) in 'sizes', rfeIter added it. ## So, we need to find out how many set of predictions there are: nReps <- length(table(rfeResults$pred$Variables)) rfeResults$pred$rowIndex <- rep(seq(along = y)[unique(holdoutIndex)], nReps) } if(is.factor(y) && length(lev) <= 50) { cells <- plyr::ddply(rfeResults$pred, .(Variables), function(x) flatTable(x$pred, x$obs)) resamples <- merge(resamples, cells) } resamples$Resample <- names(resampleIndex)[iter] vars <- do.call("rbind", rfeResults$finalVariables) vars$Resample <- names(resampleIndex)[iter] list(resamples = resamples, selectedVars = vars, predictions = if(ctrl$saveDetails) rfeResults$pred else NULL) } resamples <- do.call("rbind", result[names(result) == "resamples"]) rownames(resamples) <- NULL if(ctrl$method %in% c("boot632")) { perfNames <- names(resamples) perfNames <- perfNames[!(perfNames %in% c("Resample", "Variables"))] perfNames <- perfNames[!grepl("^cell[0-9]", perfNames)] apparent <- subset(resamples, Resample == "AllData") apparent <- apparent[,!grepl("^\\.cell|Resample", colnames(apparent)),drop = FALSE] names(apparent)[which(names(apparent) %in% perfNames)] <- paste(names(apparent)[which(names(apparent) %in% perfNames)], "Apparent", sep = "") names(apparent) <- gsub("^\\.", "", names(apparent)) resamples <- subset(resamples, Resample != "AllData") } externPerf <- plyr::ddply(resamples[,!grepl("\\.cell|Resample", colnames(resamples)),drop = FALSE], .(Variables), MeanSD, exclude = "Variables") if(ctrl$method %in% c("boot632")) { externPerf <- merge(externPerf, apparent) for(p in seq(along = perfNames)) { const <- 1-exp(-1) externPerf[, perfNames[p]] <- (const * externPerf[, perfNames[p]]) + ((1-const) * externPerf[, paste(perfNames[p],"Apparent", sep = "")]) } externPerf <- externPerf[, !(names(externPerf) %in% paste(perfNames,"Apparent", sep = ""))] } list(performance = externPerf, everything = result) } #' @import foreach looRfeWorkflow <- function(x, y, sizes, ppOpts, ctrl, lev, ...) { loadNamespace("caret") ppp <- list(options = ppOpts) ppp <- c(ppp, ctrl$preProcOptions) resampleIndex <- ctrl$index `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) result <- foreach(iter = seq(along = resampleIndex), .combine = "c", .verbose = FALSE, .errorhandling = "stop") %op% { loadNamespace("caret") requireNamespaceQuietStop("methods") modelIndex <- resampleIndex[[iter]] holdoutIndex <- -unique(resampleIndex[[iter]]) seeds <- if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) ctrl$seeds[[iter]] else NA rfeResults <- rfeIter(subset_x(x, modelIndex), y[modelIndex], subset_x(x, holdoutIndex), y[holdoutIndex], sizes, ctrl, seeds = seeds, ...) rfeResults } preds <- do.call("rbind", result[names(result) == "pred"]) resamples <- ddply(preds, .(Variables), ctrl$functions$summary, lev = lev) list(performance = resamples, everything = result) } caret/R/spatialSign.R0000644000176200001440000000507513206643237014167 0ustar liggesusers#' Compute the multivariate spatial sign #' #' Compute the spatial sign (a projection of a data vector to a #' unit length circle). The spatial sign of a vector \code{w} is #' \code{w /norm(w)}. #' #' @aliases spatialSign spatialSign.default spatialSign.matrix #' spatialSign.data.frame #' @param x an object full of numeric data (which should probably #' be scaled). Factors are not allowed. This could be a vector, #' matrix or data frame. #' @param na.rm A logical; should missing data be removed when #' computing the norm of the vector? #' @param ... Not currently used. #' @return A vector, matrix or data frame with the same dim names #' of the original data. #' @author Max Kuhn #' @references Serneels et al. Spatial sign preprocessing: a #' simple way to impart moderate robustness to multivariate #' estimators. J. Chem. Inf. Model (2006) vol. 46 (3) pp. 1402-1409 #' @keywords manip #' @examples #' #' spatialSign(rnorm(5)) #' #' spatialSign(matrix(rnorm(12), ncol = 3)) #' #' # should fail since the fifth column is a factor #' try(spatialSign(iris), silent = TRUE) #' #' spatialSign(iris[,-5]) #' #' trellis.par.set(caretTheme()) #' featurePlot(iris[,-5], iris[,5], "pairs") #' featurePlot(spatialSign(scale(iris[,-5])), iris[,5], "pairs") #' #' @export spatialSign "spatialSign" <- function(x, ...) UseMethod("spatialSign") #' @export #' @rdname spatialSign "spatialSign.default" <- function(x, na.rm = TRUE, ...) { if (is.character(x) | is.factor(x)) stop("spatial sign is not defined for character or factor data", call. = FALSE) denom <- sum(x ^ 2, na.rm = na.rm) out <- if (sqrt(denom) > .Machine$double.eps) x / sqrt(denom) else x * 0 out } #' @export #' @rdname spatialSign "spatialSign.matrix" <- function(x, na.rm = TRUE, ...) { # check for character data if (is.character(x)) stop("spatial sign is not defined for character data", call. = FALSE) xNames <- dimnames(x) p <- ncol(x) tmp <- t(apply(x, 1, spatialSign.default, na.rm = na.rm)) if (p == 1 & nrow(tmp) == 1) tmp <- t(tmp) dimnames(tmp) <- xNames tmp } #' @export #' @rdname spatialSign "spatialSign.data.frame" <- function(x, na.rm = TRUE, ...) { if (any(apply(x, 2, function(data) is.character(data) | is.factor(data)))) stop("spatial sign is not defined for character or factor data", call. = FALSE) xNames <- dimnames(x) x <- as.matrix(x) if (!is.numeric(x)) stop("a character matrix was the result of as.matrix", call. = FALSE) tmp <- spatialSign(x, na.rm = na.rm) dimnames(tmp) <- xNames tmp } caret/R/plsda.R0000644000176200001440000002524513153613153013010 0ustar liggesusers#' Partial Least Squares and Sparse Partial Least Squares Discriminant Analysis #' #' \code{plsda} is used to fit standard PLS models for classification while #' \code{splsda} performs sparse PLS that embeds feature selection and #' regularization for the same purpose. #' #' If a factor is supplied, the appropriate indicator matrix is created. #' #' A multivariate PLS model is fit to the indicator matrix using the #' \code{\link[pls:mvr]{plsr}} or \code{\link[spls]{spls}} function. #' #' Two prediction methods can be used. #' #' The \bold{softmax function} transforms the model predictions to #' "probability-like" values (e.g. on [0, 1] and sum to 1). The class with the #' largest class probability is the predicted class. #' #' Also, \bold{Bayes rule} can be applied to the model predictions to form #' posterior probabilities. Here, the model predictions for the training set #' are used along with the training set outcomes to create conditional #' distributions for each class. When new samples are predicted, the raw model #' predictions are run through these conditional distributions to produce a #' posterior probability for each class (along with the prior). This process is #' repeated \code{ncomp} times for every possible PLS model. The #' \code{\link[klaR]{NaiveBayes}} function is used with \code{usekernel = TRUE} #' for the posterior probability calculations. #' #' @aliases plsda.default predict.plsda plsda splsda.default predict.splsda #' splsda #' @param x a matrix or data frame of predictors #' @param y a factor or indicator matrix for the discrete outcome. If a matrix, #' the entries must be either 0 or 1 and rows must sum to one #' @param ncomp the number of components to include in the model. Predictions #' can be made for models with values less than \code{ncomp}. #' @param probMethod either "softmax" or "Bayes" (see Details) #' @param prior a vector or prior probabilities for the classes (only used for #' \code{probeMethod = "Bayes"}) #' @param \dots arguments to pass to \code{\link[pls:mvr]{plsr}} or #' \code{\link[spls]{spls}}. For \code{splsda}, this is the method for passing #' tuning parameters specifications (e.g. \code{K}, \code{eta} or \code{kappa}) #' @param object an object produced by \code{plsda} #' @param newdata a matrix or data frame of predictors #' @param type either \code{"class"}, \code{"prob"} or \code{"raw"} to produce #' the predicted class, class probabilities or the raw model scores, #' respectively. #' @return For \code{plsda}, an object of class "plsda" and "mvr". For #' \code{splsda}, an object of class \code{splsda}. #' #' The predict methods produce either a vector, matrix or three-dimensional #' array, depending on the values of \code{type} of \code{ncomp}. For example, #' specifying more than one value of \code{ncomp} with \code{type = "class"} #' with produce a three dimensional array but the default specification would #' produce a factor vector. #' @seealso \code{\link[pls:mvr]{plsr}}, \code{\link[spls]{spls}} #' @keywords models #' @examples #' #' \dontrun{ #' data(mdrr) #' set.seed(1) #' inTrain <- sample(seq(along = mdrrClass), 450) #' #' nzv <- nearZeroVar(mdrrDescr) #' filteredDescr <- mdrrDescr[, -nzv] #' #' training <- filteredDescr[inTrain,] #' test <- filteredDescr[-inTrain,] #' trainMDRR <- mdrrClass[inTrain] #' testMDRR <- mdrrClass[-inTrain] #' #' preProcValues <- preProcess(training) #' #' trainDescr <- predict(preProcValues, training) #' testDescr <- predict(preProcValues, test) #' #' useBayes <- plsda(trainDescr, trainMDRR, ncomp = 5, #' probMethod = "Bayes") #' useSoftmax <- plsda(trainDescr, trainMDRR, ncomp = 5) #' #' confusionMatrix(predict(useBayes, testDescr), #' testMDRR) #' #' confusionMatrix(predict(useSoftmax, testDescr), #' testMDRR) #' #' histogram(~predict(useBayes, testDescr, type = "prob")[,"Active",] #' | testMDRR, xlab = "Active Prob", xlim = c(-.1,1.1)) #' histogram(~predict(useSoftmax, testDescr, type = "prob")[,"Active",] #' | testMDRR, xlab = "Active Prob", xlim = c(-.1,1.1)) #' #' #' ## different sized objects are returned #' length(predict(useBayes, testDescr)) #' dim(predict(useBayes, testDescr, ncomp = 1:3)) #' dim(predict(useBayes, testDescr, type = "prob")) #' dim(predict(useBayes, testDescr, type = "prob", ncomp = 1:3)) #' #' ## Using spls: #' ## (As of 11/09, the spls package now has a similar function with #' ## the same mane. To avoid conflicts, use caret:::splsda to #' ## get this version) #' #' splsFit <- caret:::splsda(trainDescr, trainMDRR, #' K = 5, eta = .9, #' probMethod = "Bayes") #' #' confusionMatrix(caret:::predict.splsda(splsFit, testDescr), #' testMDRR) #' } #' #' @export plsda plsda <- function (x, ...) UseMethod("plsda") #' @rdname plsda #' @importFrom stats predict #' @export predict.plsda <- function(object, newdata = NULL, ncomp = NULL, type = "class", ...){ requireNamespaceQuietStop('pls') if(is.null(ncomp)) if(!is.null(object$ncomp)) ncomp <- object$ncomp else stop("specify ncomp") if(!is.null(newdata)) { if(!is.matrix(newdata)) newdata <- as.matrix(newdata) } ## make sure that the prediction function from pls is used class(object) <- "mvr" tmpPred <- predict(object, newdata = newdata)[,,ncomp,drop = FALSE] if(type == "raw") return(tmpPred) if(is.null(object$probModel)) { ## use softmax switch(type, class = { if(length(dim(tmpPred)) < 3) { ##only requested one component out <- object$obsLevels[apply(tmpPred, 1, which.max)] out <- factor(out, levels = object$obsLevels) } else { ## more than one component tmpOut <- matrix("", nrow = dim(tmpPred)[1], ncol = dim(tmpPred)[3]) for(i in 1:dim(tmpPred)[3]) { tmpOut[,i] <- object$obsLevels[apply(tmpPred[,,i,drop=FALSE], 1, which.max)] } out <- as.data.frame(tmpOut) out <- as.data.frame(lapply(out, function(x, y) factor(x, levels = y), y = object$obsLevels)) names(out) <- paste("ncomp", ncomp, sep = "") rownames(out) <- rownames(newdata) if(length(ncomp) == 1) out <- out[,1] } }, prob = { ## fix prob names if(length(dim(tmpPred)) < 3) { out <- t(apply(tmpPred, 1, function(data) exp(data)/sum(exp(data)))) } else { ## more than one component out <- tmpPred * NA for(i in 1:dim(tmpPred)[3]) { out[,,i] <- t(apply(tmpPred[,,i,drop=FALSE], 1, function(data) exp(data)/sum(exp(data)))) } } }) } else { ## Bayes rule requireNamespaceQuietStop("klaR") tmp <- vector(mode = "list", length = length(ncomp)) for(i in seq(along = ncomp)) { tmp[[i]] <- predict(object$probModel[[ ncomp[i] ]], as.data.frame(tmpPred[,-length(object$obsLevels),i])) } if(type == "class") { out <- t(do.call("rbind", lapply(tmp, function(x) as.character(x$class)))) rownames(out) <- names(tmp[[1]]$class) colnames(out) <- paste("ncomp", ncomp, sep = "") out <- as.data.frame(out) out <- as.data.frame(lapply(out, function(x, y) factor(x, levels = y), y = object$obsLevels)) if(length(ncomp) == 1) out <- out[,1] } else { out <- array(dim = c(dim(tmp[[1]]$posterior), length(ncomp)), dimnames = list( rownames(tmp[[1]]$posterior), colnames(tmp[[1]]$posterior), paste("ncomp", ncomp, sep = ""))) for(i in seq(along = ncomp)) out[,,i] <- tmp[[i]]$posterior } } out } #' @rdname plsda #' @importFrom stats predict #' @export plsda.default <- function(x, y, ncomp = 2, probMethod = "softmax", prior = NULL, ...) { requireNamespaceQuietStop('pls') funcCall <- match.call(expand.dots = TRUE) if(!is.matrix(x)) x <- as.matrix(x) if(length(ncomp) > 1) { ncomp <- max(ncomp) warning(paste( "A value single ncomp must be specified.", "max(ncomp) was used.", "Predictions can be obtained for values <= ncomp")) } if(probMethod == "softmax") { if(!is.null(prior)) warning("Priors are ignored unless probMethod = \"Bayes\"") } if(is.factor(y)) { obsLevels <- levels(y) oldY <- y y <- class2ind(y) } else { if(is.matrix(y)) { test <- apply(y, 1, sum) if(any(test != 1)) stop("the rows of y must be 0/1 and sum to 1") obsLevels <- colnames(y) if(is.null(obsLevels)) stop("the y matrix must have column names") oldY <- obsLevels[apply(y, 1, which.max)] } else stop("y must be a matrix or a factor") } if(!is.matrix(x)) x <- as.matrix(x) tmpData <- data.frame(n = paste("row", 1:nrow(y), sep = "")) tmpData$y <- y tmpData$x <- x out <- pls::plsr(y ~ x, data = tmpData, ncomp = ncomp, ...) out$obsLevels <- obsLevels out$probMethod <- probMethod if(probMethod == "Bayes") { requireNamespaceQuietStop('klaR') makeModels <- function(x, y, pri) { probModel <- klaR::NaiveBayes(x, y, prior = pri, usekernel = TRUE) probModel$train <- predict(probModel)$posterior probModel$x <- NULL probModel } cls <- class(out) class(out) <- "mvr" train <- predict(out, as.matrix(tmpData$x), ncomp = 1:ncomp) ## Get the raw model predictions, but leave one behind since the ## final class probs sum to one train <- train[, -length(obsLevels),, drop = FALSE] out$probModel <- apply(train, 3, makeModels, y = oldY, pri = prior) } else out$probModel <- NULL ##out$call <- funcCall class(out) <- c("plsda", class(out)) out } #' @export print.plsda <- function (x, ...) { ## minor change to print.mvr switch(x$method, kernelpls = { regr = "Partial least squares" alg = "kernel" }, simpls = { regr = "Partial least squares" alg = "simpls" }, oscorespls = { regr = "Partial least squares" alg = "orthogonal scores" }, svdpc = { regr = "Principal component" alg = "singular value decomposition" }, stop("Unknown fit method.")) cat(regr, "classification, fitted with the", alg, "algorithm.") if (!is.null(x$validation)) cat("\nCross-validated using", length(x$validation$segments), attr(x$validation$segments, "type"), "segments.") switch(x$probMethod, softmax = cat("\nThe softmax function was used to compute class probabilities.\n"), Bayes = cat("\nBayes rule was used to compute class probabilities.\n")) invisible(x) } caret/R/confusionMatrix.R0000644000176200001440000007112213153613153015070 0ustar liggesusers#' Create a confusion matrix #' #' Calculates a cross-tabulation of observed and predicted classes with #' associated statistics. #' #' The functions requires that the factors have exactly the same levels. #' #' For two class problems, the sensitivity, specificity, positive predictive #' value and negative predictive value is calculated using the \code{positive} #' argument. Also, the prevalence of the "event" is computed from the data #' (unless passed in as an argument), the detection rate (the rate of true #' events also predicted to be events) and the detection prevalence (the #' prevalence of predicted events). #' #' Suppose a 2x2 table with notation #' #' \tabular{rcc}{ \tab Reference \tab \cr Predicted \tab Event \tab No Event #' \cr Event \tab A \tab B \cr No Event \tab C \tab D \cr } #' #' The formulas used here are: \deqn{Sensitivity = A/(A+C)} \deqn{Specificity = #' D/(B+D)} \deqn{Prevalence = (A+C)/(A+B+C+D)} \deqn{PPV = (sensitivity * #' prevalence)/((sensitivity*prevalence) + ((1-specificity)*(1-prevalence)))} #' \deqn{NPV = (specificity * (1-prevalence))/(((1-sensitivity)*prevalence) + #' ((specificity)*(1-prevalence)))} \deqn{Detection Rate = A/(A+B+C+D)} #' \deqn{Detection Prevalence = (A+B)/(A+B+C+D)} \deqn{Balanced Accuracy = #' (sensitivity+specificity)/2} #' #' \deqn{Precision = A/(A+B)} \deqn{Recall = A/(A+C)} \deqn{F1 = #' (1+beta^2)*precision*recall/((beta^2 * precision)+recall)} #' #' where \code{beta = 1} for this function. #' #' See the references for discussions of the first five formulas. #' #' For more than two classes, these results are calculated comparing each #' factor level to the remaining levels (i.e. a "one versus all" approach). #' #' The overall accuracy and unweighted Kappa statistic are calculated. A #' p-value from McNemar's test is also computed using #' \code{\link[stats]{mcnemar.test}} (which can produce \code{NA} values with #' sparse tables). #' #' The overall accuracy rate is computed along with a 95 percent confidence #' interval for this rate (using \code{\link[stats]{binom.test}}) and a #' one-sided test to see if the accuracy is better than the "no information #' rate," which is taken to be the largest class percentage in the data. #' #' @aliases confusionMatrix.table confusionMatrix.default confusionMatrix #' @param data a factor of predicted classes (for the default method) or an #' object of class \code{\link[base]{table}}. #' @param reference a factor of classes to be used as the true results #' @param positive an optional character string for the factor level that #' corresponds to a "positive" result (if that makes sense for your data). If #' there are only two factor levels, the first level will be used as the #' "positive" result. When \code{mode = "prec_recall"}, \code{positive} is the #' same value used for \code{relevant} for functions \code{\link{precision}}, #' \code{\link{recall}}, and \code{\link{F_meas.table}}. #' @param dnn a character vector of dimnames for the table #' @param prevalence a numeric value or matrix for the rate of the "positive" #' class of the data. When \code{data} has two levels, \code{prevalence} should #' be a single numeric value. Otherwise, it should be a vector of numeric #' values with elements for each class. The vector should have names #' corresponding to the classes. #' @param mode a single character string either "sens_spec", "prec_recall", or #' "everything" #' @param \dots options to be passed to \code{table}. NOTE: do not include #' \code{dnn} here #' @return a list with elements \item{table}{the results of \code{table} on #' \code{data} and \code{reference}} \item{positive}{the positive result level} #' \item{overall}{a numeric vector with overall accuracy and Kappa statistic #' values} \item{byClass}{the sensitivity, specificity, positive predictive #' value, negative predictive value, precision, recall, F1, prevalence, #' detection rate, detection prevalence and balanced accuracy for each class. #' For two class systems, this is calculated once using the \code{positive} #' argument} #' @note If the reference and data factors have the same levels, but in the #' incorrect order, the function will reorder them to the order of the data and #' issue a warning. #' @author Max Kuhn #' @seealso \code{\link{as.table.confusionMatrix}}, #' \code{\link{as.matrix.confusionMatrix}}, \code{\link{sensitivity}}, #' \code{\link{specificity}}, \code{\link{posPredValue}}, #' \code{\link{negPredValue}}, \code{\link{print.confusionMatrix}}, #' \code{\link[stats]{binom.test}} #' @references Kuhn, M. (2008), ``Building predictive models in R using the #' caret package, '' \emph{Journal of Statistical Software}, #' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}). #' #' Altman, D.G., Bland, J.M. (1994) ``Diagnostic tests 1: sensitivity and #' specificity,'' \emph{British Medical Journal}, vol 308, 1552. #' #' Altman, D.G., Bland, J.M. (1994) ``Diagnostic tests 2: predictive values,'' #' \emph{British Medical Journal}, vol 309, 102. #' #' Velez, D.R., et. al. (2008) ``A balanced accuracy function for epistasis #' modeling in imbalanced datasets using multifactor dimensionality #' reduction.,'' \emph{Genetic Epidemiology}, vol 4, 306. #' @keywords utilities #' @examples #' #' ################### #' ## 2 class example #' #' lvs <- c("normal", "abnormal") #' truth <- factor(rep(lvs, times = c(86, 258)), #' levels = rev(lvs)) #' pred <- factor( #' c( #' rep(lvs, times = c(54, 32)), #' rep(lvs, times = c(27, 231))), #' levels = rev(lvs)) #' #' xtab <- table(pred, truth) #' #' confusionMatrix(xtab) #' confusionMatrix(pred, truth) #' confusionMatrix(xtab, prevalence = 0.25) #' #' ################### #' ## 3 class example #' #' confusionMatrix(iris$Species, sample(iris$Species)) #' #' newPrior <- c(.05, .8, .15) #' names(newPrior) <- levels(iris$Species) #' #' confusionMatrix(iris$Species, sample(iris$Species)) #' #' #' @export confusionMatrix confusionMatrix <- function(data, ...){ UseMethod("confusionMatrix") } #' @rdname confusionMatrix #' @method confusionMatrix default #' @importFrom utils getFromNamespace #' @export confusionMatrix.default <- function(data, reference, positive = NULL, dnn = c("Prediction", "Reference"), prevalence = NULL, mode = "sens_spec", ...) { if(!(mode %in% c("sens_spec", "prec_recall", "everything"))) stop("`mode` should be either 'sens_spec', 'prec_recall', or 'everything'") if(!is.factor(data)) data <- factor(data) if(!is.factor(reference)) reference <- factor(reference) if(!is.character(positive) & !is.null(positive)) stop("positive argument must be character") if(length(levels(data)) > length(levels(reference))) stop("the data cannot have more levels than the reference") if(!any(levels(data) %in% levels(reference))){ stop("The data must contain some levels that overlap the reference.") } if(!all(levels(data) %in% levels(reference))){ badLevel <- levels(data)[!levels(data) %in% levels(reference)] if(sum(table(data)[badLevel]) > 0){ stop("The data contain levels not found in the data.") } else{ warning("The data contains levels not found in the data, but they are empty and will be dropped.") data <- factor(as.character(data)) } } if(any(levels(reference) != levels(data))) { warning("Levels are not in the same order for reference and data. Refactoring data to match.") data <- as.character(data) data <- factor(data, levels = levels(reference)) } classLevels <- levels(data) numLevels <- length(classLevels) if(numLevels < 2) stop("there must be at least 2 factors levels in the data") if(numLevels == 2 & is.null(positive)) positive <- levels(reference)[1] classTable <- table(data, reference, dnn = dnn, ...) getFromNamespace("confusionMatrix.table", "caret")(classTable, positive, prevalence = prevalence, mode = mode) } #' @rdname confusionMatrix #' @importFrom stats binom.test mcnemar.test #' @export confusionMatrix.table <- function(data, positive = NULL, prevalence = NULL, mode = "sens_spec", ...){ requireNamespaceQuietStop("e1071") if(!(mode %in% c("sens_spec", "prec_recall", "everything"))) stop("`mode` should be either 'sens_spec', 'prec_recall', or 'everything'") if(length(dim(data)) != 2) stop("the table must have two dimensions") if(!all.equal(nrow(data), ncol(data))) stop("the table must nrow = ncol") if(!all.equal(rownames(data), colnames(data))) stop("the table must the same classes in the same order") if(!is.character(positive) & !is.null(positive)) stop("positive argument must be character") classLevels <- rownames(data) numLevels <- length(classLevels) if(numLevels < 2) stop("there must be at least 2 factors levels in the data") if(numLevels == 2 & is.null(positive)) positive <- rownames(data)[1] if(numLevels == 2 & !is.null(prevalence) && length(prevalence) != 1) stop("with two levels, one prevalence probability must be specified") if(numLevels > 2 & !is.null(prevalence) && length(prevalence) != numLevels) stop("the number of prevalence probability must be the same as the number of levels") if(numLevels > 2 & !is.null(prevalence) && is.null(names(prevalence))) stop("with >2 classes, the prevalence vector must have names") propCI <- function(x) { res <- try(binom.test(sum(diag(x)), sum(x))$conf.int, silent = TRUE) if(inherits(res, "try-error")) res <- rep(NA, 2) res } propTest <- function(x){ res <- try( binom.test(sum(diag(x)), sum(x), p = max(apply(x, 2, sum)/sum(x)), alternative = "greater"), silent = TRUE) res <- if(inherits(res, "try-error")) c("null.value.probability of success" = NA, p.value = NA) else res <- unlist(res[c("null.value", "p.value")]) res } overall <- c(unlist(e1071::classAgreement(data))[c("diag", "kappa")], propCI(data), propTest(data), mcnemar.test(data)$p.value) names(overall) <- c("Accuracy", "Kappa", "AccuracyLower", "AccuracyUpper", "AccuracyNull", "AccuracyPValue", "McnemarPValue") if(numLevels == 2) { if(is.null(prevalence)) prevalence <- sum(data[, positive])/sum(data) negative <- classLevels[!(classLevels %in% positive)] tableStats <- c(sensitivity.table(data, positive), specificity.table(data, negative), posPredValue.table(data, positive, prevalence = prevalence), negPredValue.table(data, negative, prevalence = prevalence), precision.table(data, relevant = positive), recall.table(data, relevant = positive), F_meas.table(data, relevant = positive), prevalence, sum(data[positive, positive])/sum(data), sum(data[positive, ])/sum(data)) names(tableStats) <- c("Sensitivity", "Specificity", "Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", "Prevalence", "Detection Rate", "Detection Prevalence") tableStats["Balanced Accuracy"] <- (tableStats["Sensitivity"]+tableStats["Specificity"])/2 } else { tableStats <- matrix(NA, nrow = length(classLevels), ncol = 11) for(i in seq(along = classLevels)) { pos <- classLevels[i] neg <- classLevels[!(classLevels %in% classLevels[i])] prev <- if(is.null(prevalence)) sum(data[, pos])/sum(data) else prevalence[pos] tableStats[i,] <- c(sensitivity.table(data, pos), specificity.table(data, neg), posPredValue.table(data, pos, prevalence = prev), negPredValue.table(data, neg, prevalence = prev), precision.table(data, relevant = pos), recall.table(data, relevant = pos), F_meas.table(data, relevant = pos), prev, sum(data[pos, pos])/sum(data), sum(data[pos, ])/sum(data), NA) tableStats[i,11] <- (tableStats[i,1] + tableStats[i,2])/2 } rownames(tableStats) <- paste("Class:", classLevels) colnames(tableStats) <- c("Sensitivity", "Specificity", "Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", "Prevalence", "Detection Rate", "Detection Prevalence", "Balanced Accuracy") } structure( list(positive = positive, table = data, overall = overall, byClass = tableStats, mode = mode, dots = list(...)), class = "confusionMatrix") } #' Confusion matrix as a table #' @name as.matrix.confusionMatrix #' @aliases as.table.confusionMatrix #' @description Conversion functions for class \code{confusionMatrix} #' #' @param x an object of class \code{\link{confusionMatrix}} #' @param what data to convert to matrix. Either \code{"xtabs"}, \code{"overall"} or \code{"classes"} #' @param \dots not currently used #' #' @details For \code{as.table}, the cross-tabulations are saved. For \code{as.matrix}, the three object types are saved in matrix format. #' #' @return A matrix or table #' #' @author Max Kuhn #' #' @examples #' ################### #' ## 2 class example #' #' lvs <- c("normal", "abnormal") #' truth <- factor(rep(lvs, times = c(86, 258)), #' levels = rev(lvs)) #' pred <- factor( #' c( #' rep(lvs, times = c(54, 32)), #' rep(lvs, times = c(27, 231))), #' levels = rev(lvs)) #' #' xtab <- table(pred, truth) #' #' results <- confusionMatrix(xtab) #' as.table(results) #' as.matrix(results) #' as.matrix(results, what = "overall") #' as.matrix(results, what = "classes") #' #' ################### #' ## 3 class example #' #' xtab <- confusionMatrix(iris$Species, sample(iris$Species)) #' as.matrix(xtab) #' #' @keywords utilities #' #' @export as.matrix.confusionMatrix <- function(x, what = "xtabs", ...){ if(!(what %in% c("xtabs", "overall", "classes"))) stop("what must be either xtabs, overall or classes") out <- switch(what, xtabs = matrix(as.vector(x$table), nrow = length(colnames(x$table)), dimnames = list(rownames(x$table), colnames(x$table))), overall = as.matrix(x$overall), classes = as.matrix(x$byClass)) if(what == "classes"){ if(length(colnames(x$table)) > 2){ out <- t(out) colnames(out) <- gsub("Class: ", "", colnames(out), fixed = TRUE) } } out } sbf_resampledCM <- function(x) { lev <- x$obsLevels if("pred" %in% names(x) && !is.null(x$pred)) { resampledCM <- do.call("rbind", x$pred[names(x$pred) == "predictions"]) resampledCM <- ddply(resampledCM, .(Resample), function(y) flatTable(pred = y$pred, obs = y$obs)) } else stop(paste("When there are 50+ classes, the function does not automatically pre-compute the", "resampled confusion matrices. You can get them when the option", "`saveDetails = TRUE`.")) resampledCM } rfe_resampledCM <- function(x) { lev <- x$obsLevels if("resample" %in% names(x) && !is.null(x$resample) && sum(grepl("\\.cell[1-9]", names(x$resample))) > 3) { resampledCM <- subset(x$resample, Variables == x$optsize) resampledCM <- resampledCM[,grepl("\\.cell[1-9]", names(resampledCM))] } else { if(!is.null(x$pred)) { resampledCM <- ddply(x$pred, .(Resample), function(y) flatTable(pred = y$pred, obs = y$obs)) } else { if(length(lev) > 50) stop(paste("When there are 50+ classes, `the function does not automatically pre-compute the", "resampled confusion matrices. You can get them when the object", "has a `pred` element.")) } } resampledCM } train_resampledCM <- function(x) { if(x$modelType == "Regression") stop("confusion matrices are only valid for classification models") lev <- levels(x) ## For problems with large numbers of classes, `train`, `rfe`, and `sbf` do not pre-compute the ## the resampled matrices. If the predictions have been saved, we can get them from there. if("resampledCM" %in% names(x) && !is.null(x$resampledCM)) { ## get only best tune names(x$bestTune) <- gsub("^\\.", "", names(x$bestTune)) resampledCM <- merge(x$bestTune, x$resampledCM) } else { if(!is.null(x$pred)) { resampledCM <- ddply(merge(x$pred, x$bestTune), .(Resample), function(y) flatTable(pred = y$pred, obs = y$obs)) } else { if(length(lev) > 50) stop(paste("When there are 50+ classes, `train` does not automatically pre-compute the", "resampled confusion matrices. You can get them from this function", "using a value of `savePredictions` other than FALSE.")) } } resampledCM } #' @export as.table.confusionMatrix <- function(x, ...) x$table #' Estimate a Resampled Confusion Matrix #' #' Using a \code{\link{train}}, \code{\link{rfe}}, \code{\link{sbf}} object, #' determine a confusion matrix based on the resampling procedure #' #' When \code{\link{train}} is used for tuning a model, it tracks the confusion #' matrix cell entries for the hold-out samples. These can be aggregated and #' used for diagnostic purposes. For \code{\link{train}}, the matrix is #' estimated for the final model tuning parameters determined by #' \code{\link{train}}. For \code{\link{rfe}}, the matrix is associated with #' the optimal number of variables. #' #' There are several ways to show the table entries. Using \code{norm = "none"} #' will show the aggregated counts of samples on each of the cells (across all #' resamples). For \code{norm = "average"}, the average number of cell counts #' across resamples is computed (this can help evaluate how many holdout #' samples there were on average). The default is \code{norm = "overall"}, #' which is equivalento to \code{"average"} but in percentages. #' #' @aliases confusionMatrix.train confusionMatrix.rfe confusionMatrix.sbf #' @param data An object of class \code{\link{train}}, \code{\link{rfe}}, #' \code{\link{sbf}} that did not use out-of-bag resampling or leave-one-out #' cross-validation. #' @param norm A character string indicating how the table entries should be #' normalized. Valid values are "none", "overall" or "average". #' @param dnn A character vector of dimnames for the table #' @param \dots not used here #' @return a list of class \code{confusionMatrix.train}, #' \code{confusionMatrix.rfe} or \code{confusionMatrix.sbf} with elements #' \item{table}{the normalized matrix} \item{norm}{an echo fo the call} #' \item{text}{a character string with details about the resampling procedure #' (e.g. "Bootstrapped (25 reps) Confusion Matrix"} #' @author Max Kuhn #' @seealso \code{\link{confusionMatrix}}, \code{\link{train}}, #' \code{\link{rfe}}, \code{\link{sbf}}, \code{\link{trainControl}} #' @keywords utilities #' @export #' @examples #' #' #' data(iris) #' TrainData <- iris[,1:4] #' TrainClasses <- iris[,5] #' #' knnFit <- train(TrainData, TrainClasses, #' method = "knn", #' preProcess = c("center", "scale"), #' tuneLength = 10, #' trControl = trainControl(method = "cv")) #' confusionMatrix(knnFit) #' confusionMatrix(knnFit, "average") #' confusionMatrix(knnFit, "none") #' #' #' @export confusionMatrix.train confusionMatrix.train <- function(data, norm = "overall", dnn = c("Prediction", "Reference"), ...){ if(data$control$method %in% c("oob", "LOOCV", "none")) stop("cannot compute confusion matrices for leave-one-out, out-of-bag resampling, or no resampling") if (inherits(data, "train")) { if(data$modelType == "Regression") stop("confusion matrices are only valid for classification models") lev <- levels(data) ## For problems with large numbers of classes, `train`, `rfe`, and `sbf` do not pre-compute the ## the resampled matrices. If the predictions have been saved, we can get them from there. resampledCM <- train_resampledCM(data) } else { lev <- data$obsLevels if (inherits(data, "rfe")) resampledCM <- rfe_resampledCM(data) if (inherits(data, "sbf")) resampledCM <- sbf_resampledCM(data) } if(!is.null(data$control$index)) { resampleN <- unlist(lapply(data$control$index, length)) numResamp <- length(resampleN) resampText <- resampName(data) } else { resampText <- "" numResamp <- 0 } counts <- as.matrix(resampledCM[ , grep("^\\.?cell", colnames(resampledCM))]) ## normalize? norm <- match.arg(norm, c("none", "overall", "average")) if(norm == "none") counts <- matrix(apply(counts, 2, sum), nrow = length(lev)) else counts <- matrix(apply(counts, 2, mean), nrow = length(lev)) if(norm == "overall") counts <- counts / sum(counts) * 100 ## names rownames(counts) <- colnames(counts) <- lev names(dimnames(counts)) <- dnn ## out out <- list(table = as.table(counts), norm = norm, B = length(data$control$index), text = paste(resampText, "Confusion Matrix")) class(out) <- paste0("confusionMatrix.", class(data)) out } #' @export confusionMatrix.rfe <- confusionMatrix.train #' @export confusionMatrix.sbf <- confusionMatrix.train #' @importFrom utils getFromNamespace #' @method print confusionMatrix.train #' @export print.confusionMatrix.train <- function(x, digits = 1, ...){ cat(x$text, "\n") normText <- switch(x$norm, none = "\n(entries are un-normalized aggregated counts)\n", average = "\n(entries are average cell counts across resamples)\n", overall = "\n(entries are percentual average cell counts across resamples)\n", "") cat(normText, "\n") if(x$norm == "none" & x$B == 1) { print(getFromNamespace("confusionMatrix.table", "caret")(x$table)) } else { print(round(x$table, digits)) out <- cbind("Accuracy (average)", ":", formatC(sum(diag(x$table) / sum(x$table)))) dimnames(out) <- list(rep("", nrow(out)), rep("", ncol(out))) print(out, quote = FALSE) cat("\n") } invisible(x) } #' @method print confusionMatrix.rfe #' @export print.confusionMatrix.rfe <- print.confusionMatrix.train #' @method print confusionMatrix.sbf #' @export print.confusionMatrix.sbf <- print.confusionMatrix.train resampName <- function(x, numbers = TRUE){ if(!("control" %in% names(x))) return("") if(numbers) { resampleN <- unlist(lapply(x$control$index, length)) numResamp <- length(resampleN) out <- switch(tolower(x$control$method), none = "None", apparent = "Apparent", custom = paste("Custom Resampling (", numResamp, " reps)", sep = ""), timeslice = paste("Rolling Forecasting Origin Resampling (", x$control$horizon, " held-out with", ifelse(x$control$fixedWindow, " a ", " no "), "fixed window)", sep = ""), oob = "Out of Bag Resampling", boot =, optimism_boot =, boot_all =, boot632 = paste("Bootstrapped (", numResamp, " reps)", sep = ""), cv = paste("Cross-Validated (", x$control$number, " fold)", sep = ""), repeatedcv = paste("Cross-Validated (", x$control$number, " fold, repeated ", x$control$repeats, " times)", sep = ""), lgocv = paste("Repeated Train/Test Splits Estimated (", numResamp, " reps, ", round(x$control$p*100, 1), "%)", sep = ""), loocv = "Leave-One-Out Cross-Validation", adaptive_boot = paste("Adaptively Bootstrapped (", numResamp, " reps)", sep = ""), adaptive_cv = paste("Adaptively Cross-Validated (", x$control$number, " fold, repeated ", x$control$repeats, " times)", sep = ""), adaptive_lgocv = paste("Adaptive Repeated Train/Test Splits Estimated (", numResamp, " reps, ", round(x$control$p, 2), "%)", sep = "") ) } else { out <- switch(tolower(x$control$method), none = "None", apparent = "(Apparent)", custom = "Custom Resampling", timeslice = "Rolling Forecasting Origin Resampling", oob = "Out of Bag Resampling", boot = "(Bootstrap)", optimism_boot = "(Optimism Bootstrap)", boot_all = "(Bootstrap All)", boot632 = "(Bootstrap 632 Rule)", cv = "(Cross-Validation)", repeatedcv = "(Repeated Cross-Validation)", loocv = "Leave-One-Out Cross-Validation", lgocv = "(Repeated Train/Test Splits)") } out } #' Print method for confusionMatrix #' #' a print method for \code{confusionMatrix} #' #' #' @param x an object of class \code{confusionMatrix} #' @param mode a single character string either "sens_spec", "prec_recall", or #' "everything" #' @param digits number of significant digits when printed #' @param printStats a logical: if \code{TRUE} then table statistics are also #' printed #' @param \dots optional arguments to pass to \code{print.table} #' @return \code{x} is invisibly returned #' @author Max Kuhn #' @seealso \code{\link{confusionMatrix}} #' @keywords utilities #' @export print.confusionMatrix <- function(x, mode = x$mode, digits = max(3, getOption("digits") - 3), printStats = TRUE, ...){ if(is.null(mode)) mode <- "sens_spec" if(!(mode %in% c("sens_spec", "prec_recall", "everything"))) stop("`mode` should be either 'sens_spec', 'prec_recall', or 'everything'") cat("Confusion Matrix and Statistics\n\n") print(x$table, ...) if(printStats) { tmp <- round(x$overall, digits = digits) pIndex <- grep("PValue", names(x$overall)) tmp[pIndex] <- format.pval(x$overall[pIndex], digits = digits) overall <- tmp accCI <- paste("(", paste( overall[ c("AccuracyLower", "AccuracyUpper")], collapse = ", "), ")", sep = "") overallText <- c(paste(overall["Accuracy"]), accCI, paste(overall[c("AccuracyNull", "AccuracyPValue")]), "", paste(overall["Kappa"]), paste(overall["McnemarPValue"])) overallNames <- c("Accuracy", "95% CI", "No Information Rate", "P-Value [Acc > NIR]", "", "Kappa", "Mcnemar's Test P-Value") if(dim(x$table)[1] > 2){ cat("\nOverall Statistics\n") overallNames <- ifelse(overallNames == "", "", paste(overallNames, ":")) out <- cbind(format(overallNames, justify = "right"), overallText) colnames(out) <- rep("", ncol(out)) rownames(out) <- rep("", nrow(out)) print(out, quote = FALSE) cat("\nStatistics by Class:\n\n") if(mode == "prec_recall") x$byClass <- x$byClass[,!grepl("(Sensitivity)|(Specificity)|(Pos Pred Value)|(Neg Pred Value)", colnames(x$byClass))] if(mode == "sens_spec") x$byClass <- x$byClass[,!grepl("(Precision)|(Recall)|(F1)", colnames(x$byClass))] print(t(x$byClass), digits = digits) } else { if(mode == "prec_recall") x$byClass <- x$byClass[!grepl("(Sensitivity)|(Specificity)|(Pos Pred Value)|(Neg Pred Value)", names(x$byClass))] if(mode == "sens_spec") x$byClass <- x$byClass[!grepl("(Precision)|(Recall)|(F1)", names(x$byClass))] overallText <- c(overallText, "", format(x$byClass, digits = digits)) overallNames <- c(overallNames, "", names(x$byClass)) overallNames <- ifelse(overallNames == "", "", paste(overallNames, ":")) overallNames <- c(overallNames, "", "'Positive' Class :") overallText <- c(overallText, "", x$positive) out <- cbind(format(overallNames, justify = "right"), overallText) colnames(out) <- rep("", ncol(out)) rownames(out) <- rep("", nrow(out)) out <- rbind(out, rep("", 2)) print(out, quote = FALSE) } } invisible(x) } caret/R/reg_sims.R0000644000176200001440000001137013153613153013507 0ustar liggesusers #' @importFrom stats rnorm toeplitz make_noise <- function(n, noiseVars = 0, corrVars = 0, corrType = "AR1", corrValue = 0, binary = FALSE) { requireNamespaceQuietStop("MASS") if(noiseVars > 0) { tmpData <- matrix(rnorm(n * noiseVars), ncol = noiseVars) colnames(tmpData) <- well_numbered("Noise", noiseVars) } if(corrVars > 0) { loadNamespace("MASS") if(corrType == "exch") { vc <- matrix(corrValue, ncol = corrVars, nrow = corrVars) diag(vc) <- 1 } if(corrType == "AR1") { vcValues <- corrValue^(seq(0, corrVars - 1, by = 1)) vc <- toeplitz(vcValues) } tmpData2 <- MASS::mvrnorm(n, mu = rep(0, corrVars), Sigma = vc) colnames(tmpData2) <- well_numbered("Corr", corrVars) } if(noiseVars == 0 & corrVars > 0) out <- tmpData2 if(noiseVars > 0 & corrVars == 0) out <- tmpData if(noiseVars > 0 & corrVars > 0) out <- cbind(tmpData, tmpData2) if(binary) out <- ifelse(out > 0, 1, 0) as.data.frame(out) } #' @rdname twoClassSim #' @importFrom stats rnorm #' @export SLC14_1 <- function(n = 100, noiseVars = 0, corrVars = 0, corrType = "AR1", corrValue = 0) { dat <- matrix(rnorm(n*20, sd = 3), ncol = 20) foo <- function(x) x[1] + sin(x[2]) + log(abs(x[3])) + x[4]^2 + x[5]*x[6] + ifelse(x[7]*x[8]*x[9] < 0, 1, 0) + ifelse(x[10] > 0, 1, 0) + x[11]*ifelse(x[11] > 0, 1, 0) + sqrt(abs(x[12])) + cos(x[13]) + 2*x[14] + abs(x[15]) + ifelse(x[16] < -1, 1, 0) + x[17]*ifelse(x[17] < -1, 1, 0) - 2 * x[18] - x[19]*x[20] dat <- as.data.frame(dat) colnames(dat) <- well_numbered("Var", ncol(dat)) if(noiseVars > 0 | corrVars > 0) dat <- cbind(dat, make_noise(n = n, noiseVars = noiseVars, corrVars = corrVars, corrType = corrType, corrValue = corrValue)) dat$y <- apply(dat[, 1:20], 1, foo) + rnorm(n, sd = 3) dat } #' @rdname twoClassSim #' @importFrom stats rnorm #' @export SLC14_2 <- function(n = 100, noiseVars = 0, corrVars = 0, corrType = "AR1", corrValue = 0) { dat <- matrix(rnorm(n*200, sd = 4), ncol = 200) dat <- as.data.frame(dat) colnames(dat) <- well_numbered("Var", ncol(dat)) if(noiseVars > 0 | corrVars > 0) dat <- cbind(dat, make_noise(n = n, noiseVars = noiseVars, corrVars = corrVars, corrType = corrType, corrValue = corrValue)) dat$y <- apply(dat[, 1:200], 1, function(x) sum(log(abs(x)))) + rnorm(n, sd = 5) - 1 dat } #' @rdname twoClassSim #' @importFrom stats rbinom rnorm runif binomial #' @export LPH07_1 <- function(n = 100, noiseVars = 0, corrVars = 0, corrType = "AR1", corrValue = 0, factors = FALSE, class = FALSE) { dat <- matrix(rbinom(n*10, size = 1, prob = .4), ncol = 10) dat <- as.data.frame(dat) colnames(dat) <- well_numbered("Var", ncol(dat)) foo <- function(w) 2*w[1]*w[10] + 4*w[2]*w[7] + 3*w[4]*w[5] - 5*w[6]*w[10] + 3*w[8]*w[9] + w[1]*w[2]*w[4] - 2*w[7]*(1-w[6])*w[2]*w[9] - 4*(1 - w[10])*w[1]*(1-w[4]) if(noiseVars > 0 | corrVars > 0) dat <- cbind(dat, make_noise(n = n, noiseVars = noiseVars, corrVars = corrVars, corrType = corrType, corrValue = corrValue, binary = TRUE)) if(class) { dat$y <- apply(dat[, 1:10], 1, foo) dat$Class <- runif(nrow(dat)) <= binomial()$linkinv(dat$y) dat$Class <- factor(ifelse(dat$Class, "Class1", "Class2")) dat$y <- NULL } else dat$y <- apply(dat[, 1:10], 1, foo) + rnorm(n) if(factors) for(i in grep("(^Var)|(^Noise)", names(dat), value = TRUE)) dat[,i] <- factor(paste0("val", dat[,i])) dat } #' @rdname twoClassSim #' @importFrom stats rnorm #' @export LPH07_2 <- function(n = 100, noiseVars = 0, corrVars = 0, corrType = "AR1", corrValue = 0) { dat <- matrix(rnorm(n*20, sd = 4), ncol = 20) dat <- as.data.frame(dat) colnames(dat) <- well_numbered("Var", ncol(dat)) foo <- function(x) x[1]*x[2] + x[10]^2 - x[3]*x[17] - x[15]*x[4] + x[9]*x[5] + x[19] - x[20]^2 + x[9]*x[8] if(noiseVars > 0 | corrVars > 0) dat <- cbind(dat, make_noise(n = n, noiseVars = noiseVars, corrVars = corrVars, corrType = corrType, corrValue = corrValue)) dat$y <- apply(dat[, 1:20], 1, foo) + rnorm(n, sd = 4) dat } caret/R/updates.R0000644000176200001440000001103413153613153013341 0ustar liggesusers#' Update or Re-fit a Model #' #' \code{update} allows a user to over-ride the tuning parameter selection #' process by specifying a set of tuning parameters or to update the model #' object to the latest version of this package. #' #' If the model object was created with version 5.17-7 or earlier, the #' underlying package structure was different. To make old \code{\link{train}} #' objects consistent with the new structure, use \code{param = NULL} to get #' the same object back with updates. #' #' To update the model parameters, the training data must be stored in the #' model object (see the option \code{returnData} in #' \code{\link{trainControl}}. Also, all tuning parameters must be specified in #' the \code{param} slot. All other options are held constant, including the #' original pre-processing (if any), options passed in using code... and so on. #' When printing, the verbiage "The tuning parameter was set manually." is used #' to describe how the tuning parameters were created. #' #' @param object an object of class \code{\link{train}} #' @param param a data frame or named list of all tuning parameters #' @param \dots not currently used #' @return a new \code{\link{train}} object #' @author Max Kuhn #' @seealso \code{\link{train}}, \code{\link{trainControl}} #' @keywords models #' @examples #' #' \dontrun{ #' data(iris) #' TrainData <- iris[,1:4] #' TrainClasses <- iris[,5] #' #' knnFit1 <- train(TrainData, TrainClasses, #' method = "knn", #' preProcess = c("center", "scale"), #' tuneLength = 10, #' trControl = trainControl(method = "cv")) #' #' update(knnFit1, list(.k = 3)) #' } #' @method update train #' @export update.train <- function(object, param = NULL, ...) { if(is.null(param)) { if(all(names(object) != "modelInfo")) { funcs <- try(getModelInfo(object$method)[[1]], silent = TRUE) if(class(funcs)[1] == "list" && length(funcs) > 0) { funcs$updated <- TRUE object$modelInfo <- funcs warning(paste("The model was updated to work with the current version of caret.", "Please re-create the model object since future versions will", "require objects to be created from caret versions >= 6.", "Alternatively, do not update caret beyond version 5.17-7.")) } else stop(paste("This appears to be from an old version of caret", "and the model type is unknown to the new version")) } } else { ## check for original data if(is.null(object$trainingData)) stop("original training data is needed; use returnData = TRUE in trainControl()") if(is.list(param)) param <- as.data.frame(param) dotNames <- hasDots(param, object$modelInfo) if(dotNames) colnames(param) <- gsub("^\\.", "", colnames(param)) if(!is.data.frame(param)) stop("param should be a data frame or a named list") if(nrow(param) > 1) stop("only one set of parameters should be specified") paramNames <- as.character(object$modelInfo$parameter$parameter) if(length(paramNames) != ncol(param)) stop(paste("Parameters should be", paste(paramNames, sep = "", collapse = ", "))) if(any(sort(names(param)) != sort(paste(paramNames, sep = "")))) stop(paste("Parameters should be", paste(paramNames, sep = "", collapse = ", "))) ## get pre-processing options if(!is.null(object$preProcess)) { ppOpt <- list(options = object$preProcess$method) if(length(object$control$preProcOptions) > 0) ppOpt <- c(ppOpt,object$control$preProcOptions) } else ppOpt <- NULL ## refit model with new parameters args <- list(x = object$trainingData[, colnames(object$trainingData) != ".outcome"], y = object$trainingData$.outcome, method = object$modelInfo, tuneValue = param, obsLevels = levels(object$trainingData$.outcome), pp = ppOpt, last = TRUE, classProbs = object$control$classProbs) if(any(names(object$trainingData) == ".weights")) { args$wts <- object$trainingData$.weights } else args <- c(args, list(wts = NULL)) if(length(object$dots) > 0) args <- c(args, object$dots) finalFinalModel <- do.call("createModel", args) object$finalModel <- finalFinalModel$fit object$preProcess <- finalFinalModel$preProc object$bestTune <- param ## modify objects so print method reflects update object$update <- param } ## return object object } caret/R/common_code.R0000644000176200001440000000622613153613153014165 0ustar liggesusers#' @importFrom stats t.test get_fitness_differences <- function(pnames, subsets, fitness, label) { signs <- lapply(subsets, index2vec, vars = length(pnames)) signs <- do.call("rbind", signs) colnames(signs) <- pnames nzv <- apply(signs, 2, function(x) min(table(factor(x, levels = paste(0:1)))) > 1) if(all(!nzv)) return(NULL) signs <- signs[, nzv, drop = FALSE] if(!is.matrix(fitness)) fitness <- as.matrix(fitness) snr <- function(x, y) { apply(y, 2, function(outcome, ind) t.test(outcome[ind == 1], outcome[ind == 0])$statistic, ind = x) } melt(apply(signs, 2, snr, y = fitness)) } #' @importFrom stats reshape process_diffs <- function(x, pnames) { x <- x[!is.null(x)] x <- do.call("rbind", x) mean_diffs <- ddply(x, c("Var1", "Var2"), function(x) c(mean = mean(x$value, na.rm = TRUE))) mean_diffs <- reshape(mean_diffs, direction = "wide", v.names = "mean", idvar = "Var2", timevar = "Var1") names(mean_diffs) <- gsub("mean\\.", "", names(mean_diffs)) names(mean_diffs)[1] <- "Variable" included <- pnames %in% as.character(mean_diffs$Variable) if(any(!included)) { extras <- data.frame(Variable = pnames[!included]) for(i in 2:ncol(mean_diffs)) extras[, names(mean_diffs)[i]] <- NA mean_diffs <- rbind(mean_diffs, extras) } mean_diffs } same_args <- function(a, b) { if(length(a) != length(b)) return(FALSE) if(!isTRUE(all.equal(sort(a), sort(b)))) return(FALSE) TRUE } getOper <- function(x) if(x) `%dopar%` else `%do%` jack_sim <- function(a, b) { if(is.matrix(a) && nrow(a) > 1) a <- a[1,,drop=FALSE] if(is.matrix(a) && nrow(b) > 1) b <- b[1,,drop=FALSE] sum(a ==1 & b ==1)/(sum(a == 1 & b == 0)+sum(a == 0 & b == 1)+sum(a ==1 & b ==1))*100 } #' Convert indicies to a binary vector #' #' The function performs the opposite of \code{which} converting a set of #' integers to a binary vector #' #' #' @param x a vector of integers #' @param vars the number of possible locations #' @param sign a lgical; when true the data are encoded as -1/+1, and 0/1 #' otherwise #' @return a numeric vector #' @author Max Kuhn #' @examples #' #' index2vec(x = 1:2, vars = 5) #' index2vec(x = 1:2, vars = 5, sign = TRUE) #' #' @export index2vec index2vec <- function(x, vars, sign = FALSE) { bin <- rep(0, vars) bin[x] <- 1 if(sign) bin <- ifelse(bin == 0, -1, 1) bin } change_text <- function(old, new, p, show_diff = TRUE) { a <- index2vec(new, p) b <- index2vec(old, p) size_diff <- length(new) - length(old) if(show_diff) { if(abs(size_diff) >= 0) { num_text <- if(size_diff >= 0) paste0(length(old), "+", size_diff) else paste0(length(old), size_diff) } else num_text <- paste(length(old)) } else { old_len <- length(old) new_len <- length(new) num_text <- paste0(format(1:p)[old_len], "->", format(1:p)[new_len]) } sim <- sprintf("%.1f", jack_sim(a, b)) num_text <- paste0(" (", num_text, ", ", sim, "%)") num_text } #' @export predictors.gafs <- function(x, ...) { x$best_vars } #' @export predictors.safs <- function(x, ...) { x$best_vars } caret/R/modelLookup.R0000644000176200001440000001277313153613153014201 0ustar liggesusers#' Tools for Models Available in \code{train} #' #' These function show information about models and packages that are #' accessible via \code{\link{train}} #' #' \code{modelLookup} is good for getting information related to the tuning #' parameters for a model. \code{getModelInfo} will return all the functions #' and metadata associated with a model. Both of these functions will only #' search within the models bundled in this package. #' #' \code{checkInstall} will check to see if packages are installed. If they are #' not and the session is interactive, an option is given to install the #' packages using \code{\link[utils]{install.packages}} using that functions #' default arguments (the missing packages are listed if you would like to #' install them with other options). If the session is not interactive, an #' error is thrown. #' #' @aliases modelLookup getModelInfo checkInstall #' @param model a character string associated with the \code{method} argument #' of \code{\link{train}}. If no value is passed, all models are returned. For #' \code{getModelInfo}, regular expressions can be used. #' @param regex a logical: should a regular expressions be used? If #' \code{FALSE}, a simple match is conducted against the whole name of the #' model. #' @param pkg a character string of package names. #' @param ... options to pass to \code{\link[base]{grepl}} #' @return \code{modelLookup} produces a data frame with columns \item{model #' }{a character string for the model code} \item{parameter }{the tuning #' parameter name} \item{label }{a tuning parameter label (used in plots)} #' \item{forReg }{a logical; can the model be used for regression?} #' \item{forClass }{a logical; can the model be used for classification?} #' \item{probModel }{a logical; does the model produce class probabilities?} #' #' \code{getModelInfo} returns a list containing one or more lists of the #' standard model information. #' #' \code{checkInstall} returns not value. #' @note The column \code{seq} is no longer included in the output of #' \code{modelLookup}. #' @author Max Kuhn #' @seealso \code{\link{train}}, \code{\link[utils]{install.packages}}, #' \code{\link[base]{grepl}} #' @keywords utilities #' @examples #' #' \dontrun{ #' modelLookup() #' modelLookup("gbm") #' #' getModelInfo("pls") #' getModelInfo("^pls") #' getModelInfo("pls", regex = FALSE) #' #' checkInstall(getModelInfo("pls")$library) #' } #' #' @export modelLookup modelLookup <- function(model = NULL){ load(system.file("models", "models.RData", package = "caret")) if(!is.null(model)){ if(!(model %in% names(models))) stop(paste("Model '", method, "' is not in the ", "set of existing models", sep = "")) models <- models[model == names(models)] } out <- lapply(models, function(x) { out <- x$parameters[, c("parameter", "label")] out$forReg <- "Regression" %in% x$type out$forClass <- "Classification" %in% x$type out$probModel <- !is.null(x$prob) out }) for(i in seq(along = out)) out[[i]]$model <- names(models)[i] out <- do.call("rbind", out) rownames(out) <- NULL out <- out[, c('model', 'parameter', 'label', 'forReg', 'forClass', 'probModel')] out[order(out$model),] } #' @importFrom utils installed.packages missing_packages <- function(mods = getModelInfo()) { libs <- unique(unlist(lapply(mods, function(x) x$library))) here <- rownames(installed.packages()) libs[!(libs %in% here)] } #' @rdname modelLookup #' @importFrom utils install.packages menu #' @export checkInstall <- function(pkg){ good <- rep(TRUE, length(pkg)) for(i in seq(along = pkg)){ tested <- try(find.package(pkg[i]), silent = TRUE) if(class(tested)[1] == "try-error") good[i] <- FALSE } if(any(!good)){ pkList <- paste(pkg[!good], collapse = ", ") msg <- paste(sum(!good), ifelse(sum(!good) > 1, " packages are", " package is"), " needed for this model and", ifelse(sum(!good) > 1, " are", " is"), " not installed. (", pkList, "). Would you like to try to install", ifelse(sum(!good) > 1, " them", " it"), " now?", sep = "") cat(msg) if(interactive()) { bioc <- c("affy", "logicFS", "gpls", "vbmp") installChoice <- menu(c("yes", "no")) if(installChoice == 1){ hasBioc <- any(pkg[!good] %in% bioc) if(!hasBioc) { install.packages(pkg[!good]) } else { inst <- pkg[!good] instC <- inst[!(inst %in% bioc)] instB <- inst[inst %in% bioc] if(length(instC) > 0) install.packages(instC) biocLite <- NULL source("http://bioconductor.org/biocLite.R") biocLite(instB) } } else stop("Required package is missing", call. = FALSE) } else stop("Required package is missing", call. = FALSE) } } #' @rdname modelLookup #' @export getModelInfo <- function(model = NULL, regex = TRUE, ...) { load(system.file("models", "models.RData", package = "caret")) if(!is.null(model)){ keepers <- if(regex) grepl(model, names(models), ...) else which(model == names(models))[1] models <- models[keepers] } if(length(models) == 0) stop("That model is not in caret's built-in library") models }caret/R/ggplot.R0000644000176200001440000002616413153613153013202 0ustar liggesusers#' @rdname plot.train #' @importFrom stats as.formula #' @export ggplot.train <- function(data = NULL, mapping = NULL, metric = data$metric[1], plotType = "scatter", output = "layered", nameInStrip = FALSE, highlight = FALSE, ..., environment = NULL) { if(!(output %in% c("data", "layered", "ggplot"))) stop("'outout' should be either 'data', 'ggplot' or 'layered'") params <- data$modelInfo$parameters$parameter paramData <- data$modelInfo$parameters if(grepl("adapt", data$control$method)) warning("When using adaptive resampling, this plot may not accurately capture the relationship between the tuning parameters and model performance.") plotIt <- "yes" if(all(params == "parameter")) { plotIt <- "There are no tuning parameters for this model." } else { dat <- data$results ## Some exceptions for pretty printing if(data$method == "nb") dat$usekernel <- factor(ifelse(dat$usekernel, "Nonparametric", "Gaussian")) if(data$method == "gam") dat$select <- factor(ifelse(dat$select, "Feature Selection", "No Feature Selection")) if(data$method == "qrnn") dat$bag <- factor(ifelse(dat$bag, "Bagging", "No Bagging")) if(data$method == "C5.0") dat$winnow <- factor(ifelse(dat$winnow, "Winnowing", "No Winnowing")) if(data$method == "M5") dat$rules <- factor(ifelse(dat$rules == "Yes", "Rules", "Trees")) ## Check to see which tuning parameters were varied # params is a factor, so just using params does not work properly when model metric is not the first column in dat # e.g. oob resampling paramValues <- apply(dat[,as.character(params),drop = FALSE], 2, function(x) length(unique(x))) if(any(paramValues > 1)) { params <- names(paramValues)[paramValues > 1] paramData <- subset(paramData, parameter %in% params) } else plotIt <- "There are no tuning parameters with more than 1 value." } if(plotIt == "yes") { p <- length(params) dat <- dat[, c(metric, params)] resampText <- resampName(data, FALSE) resampText <- paste(metric, resampText) } else stop(plotIt) p <- ncol(dat) - 1 if(p > 1) { numUnique <- unlist(lapply(dat[, -1], function(x) length(unique(x)))) numUnique <- sort(numUnique, decreasing = TRUE) dat <- dat[, c(metric, names(numUnique))] } if(output == "data") return(dat) if(data$control$search == "random") return(random_search_plot(data, metric = metric)) if(plotType == "scatter") { # To highlight bestTune parameters in the plot if (highlight) { bstRes <- data$results for (par in as.character(params)) bstRes <- bstRes[which(bstRes[, par] == data$bestTune[, par]), ] if (nrow(bstRes) > 1) stop("problem in extracting model$bestTune row from model$results") } dnm <- names(dat) if(p > 1 && is.numeric(dat[, 3])) dat[, 3] <- factor(format(dat[, 3])) if(p > 2 & nameInStrip) { strip_vars <- names(dat)[-(1:3)] strip_lab <- as.character(subset(data$modelInfo$parameters, parameter %in% strip_vars)$label) for(i in seq_along(strip_vars)) dat[, strip_vars[i]] <- factor(paste(strip_lab[i], dat[, strip_vars[i]], sep = ": ")) } # If a parameter is assigned to a facet panel, it needs to be converted to a factor # otherwise, highlighting the bestTune parameters in a facet creates an extraneous panel # potentially, a bug in ggplot ? if (p >= 3) for (col in 1:(p-2)) { lvls <- as.character(unique(dat[, dnm[col+3]])) dat[, dnm[col+3]] <- factor(dat[, dnm[col+3]], levels = lvls) if (highlight) bstRes[, dnm[col+3]] <- factor(bstRes[, dnm[col+3]], levels = lvls) } out <- ggplot(dat, aes_string(x = dnm[2], y = dnm[1])) out <- out + ylab(resampText) # names(dat)[.] changed to dnm[.] to make the code more readable & (marginally) efficient out <- out + xlab(paramData$label[paramData$parameter == dnm[2]]) if (highlight) out <- out + geom_point(data = bstRes, aes_string(x = dnm[2], y = dnm[1]), size = 4, shape = 5) if(output == "layered") { if(p >= 2) { leg_name <- paramData$label[paramData$parameter == dnm[3]] out <- out + geom_point(aes_string(color = dnm[3], shape = dnm[3])) out <- out + geom_line(aes_string(color = dnm[3], shape = dnm[3])) out <- out + scale_colour_discrete(name = leg_name) + scale_shape_discrete(name = leg_name) } else out <- out + geom_point() + geom_line() if(p == 3) out <- out + facet_wrap(as.formula(paste("~", dnm[4]))) if(p == 4) out <- out + facet_grid(as.formula(paste(names(dat)[4], "~", names(dat)[5]))) if(p > 4) stop("The function can only handle <= 4 tuning parameters for scatter plots. Use output = 'ggplot' to create your own") } } if(plotType == "level") { if(p == 1) stop("Two tuning parameters are required for a level plot") dnm <- names(dat) if(is.numeric(dat[,2])) dat[,2] <- factor(format(dat[,2]), levels = format(sort(unique(dat[,2])))) if(is.numeric(dat[,3])) dat[,3] <- factor(format(dat[,3]), levels = format(sort(unique(dat[,3])))) if(p > 2 & nameInStrip) { strip_vars <- names(dat)[-(1:3)] strip_lab <- as.character(subset(data$modelInfo$parameters, parameter %in% strip_vars)$label) for(i in seq_along(strip_vars)) dat[, strip_vars[i]] <- factor( paste(strip_lab[i], format(dat[, strip_vars[i]]), sep = ": "), levels = paste(strip_lab[i], format(sort(unique(dat[, strip_vars[i]]))), sep = ": ") ) } ## TODO: use factor(format(x)) to make a solid block of colors? out <- ggplot(dat, aes_string(x = dnm[2], y = dnm[3], fill = metric)) out <- out + ylab(paramData$label[paramData$parameter == dnm[3]]) out <- out + xlab(paramData$label[paramData$parameter == dnm[2]]) if(output == "layered") { out <- out + geom_tile() if(p == 3) out <- out + facet_wrap(as.formula(paste("~", dnm[4]))) # incorrect facet_wrap call for p == 4 ? fixed errors for p >= 4 if(p == 4) out <- out + facet_grid(as.formula(paste(dnm[4], "~", dnm[5]))) if(p > 4) stop("The function can only handle <= 4 tuning parameters for level plots. Use output = 'ggplot' to create your own") } } out } #' @rdname plot.rfe #' @export ggplot.rfe <- function(data = NULL, mapping = NULL, metric = data$metric[1], output = "layered", ..., environment = NULL) { if(!(output %in% c("data", "layered", "ggplot"))) stop("'outout' should be either 'data', 'ggplot' or 'layered'") resampText <- resampName(data, FALSE) resampText <- paste(metric, resampText) if(output == "data") return(data$results) notBest <- subset(data$results, Variables != data$bestSubset) best <- subset(data$results, Variables == data$bestSubset) out <- ggplot(data$results, aes_string(x = "Variables", y = metric)) if(output == "ggplot") return(out) out <- out + geom_line() out <- out + ylab(resampText) out <- out + geom_point(data = notBest, aes_string(x = "Variables", y = metric)) out <- out + geom_point(data=best, aes_string(x = "Variables", y = metric), size = 3, colour="blue") out } #' @importFrom stats complete.cases random_search_plot <- function(x, metric = x$metric[1]) { params <- x$modelInfo$parameters p_names <- as.character(params$parameter) exclude <- NULL for(i in seq(along = p_names)) { if(all(is.na(x$results[, p_names[i]]))) exclude <- c(exclude, i) } if(length(exclude) > 0) p_names <- p_names[-exclude] x$results <- x$results[, c(metric, p_names)] res <- x$results[complete.cases(x$results),] combos <- res[, p_names, drop = FALSE] nvals <- unlist(lapply(combos, function(x) length(unique(x)))) p_names <- p_names[which(nvals > 1)] if(nrow(combos) == 1 | length(p_names) == 0) stop("Can't plot results with a single tuning parameter combination") combos <- combos[, p_names, drop = FALSE] nvals <- sort(nvals[p_names], decreasing = TRUE) is_num <- unlist(lapply(combos, function(x) is.numeric(x) | is.integer(x))) num_cols <- names(is_num)[is_num] other_cols <- names(is_num)[!is_num] num_num <- sum(is_num) num_other <- length(p_names) - num_num if(num_other == 0) { if(num_num == 1) { out <- ggplot(res, aes_string(x = num_cols[1], y = metric)) + geom_point() + xlab(as.character(params$label[params$parameter == num_cols[1]])) } else { if(num_num == 2) { out <- ggplot(res, aes_string(x = num_cols[1], y = num_cols[2], size = metric)) + geom_point() + xlab(as.character(params$label[params$parameter == num_cols[1]])) + ylab(as.character(params$label[params$parameter == num_cols[2]])) } else { ## feature plot vert <- melt(res[, c(metric, num_cols)], id.vars = metric, variable.name = "parameter") vert <- merge(vert, params) names(vert)[names(vert) == "label"] <- "Parameter" out <- ggplot(vert, aes_string(x = "value", y = metric)) + geom_point() + facet_wrap(~Parameter, scales = "free_x") + xlab("") } } } else { if(num_other == length(p_names)) { ## do an interaction plot if(num_other == 1) { out <- ggplot(res, aes_string(x = other_cols[1], y = metric)) + geom_point() + xlab(as.character(params$label[params$parameter == other_cols[1]])) } else { if(num_other == 2) { out <- ggplot(res, aes_string(x = other_cols[1], shape = other_cols[2], y = metric)) + geom_point() + geom_line(aes_string(group = other_cols[2])) + xlab(as.character(params$label[params$parameter == other_cols[1]])) } else { if(num_other == 3) { pname <- as.character(params$label[params$parameter == other_cols[3]]) res[,other_cols[3]] <- paste0(pname, ": ", res[,other_cols[3]]) out <- ggplot(res, aes_string(x = other_cols[1], shape = other_cols[2], y = metric)) + geom_point() + geom_line(aes_string(group = other_cols[2])) + facet_grid(paste0(".~", other_cols[3])) + xlab(as.character(params$label[params$parameter == other_cols[1]])) } else { stop(paste("There are", num_other, "non-numeric variables; I don't have code for", "that Dave")) } } } } else { ## feature plot with colors and or shapes vert <- melt(res[, c(metric, num_cols, other_cols)], id.vars = c(metric, other_cols), variable.name = "parameter") vert <- merge(vert, params) names(vert)[names(vert) == "label"] <- "Parameter" if(num_other == 1) { out <- ggplot(vert, aes_string(x = "value", y = metric, color = other_cols)) + geom_point() + facet_wrap(~Parameter, scales = "free_x") + xlab("") } else { stop(paste("There are", num_num, "numeric tuning variables and", num_other, "non-numeric variables; I don't have code for", "that Dave")) } } } out } caret/R/plot.train.R0000644000176200001440000002720313153613153013773 0ustar liggesusers#' Plot Method for the train Class #' #' This function takes the output of a \code{\link{train}} object and creates a #' line or level plot using the \pkg{lattice} or \pkg{ggplot2} libraries. #' #' If there are no tuning parameters, or none were varied, an error is #' produced. #' #' If the model has one tuning parameter with multiple candidate values, a plot #' is produced showing the profile of the results over the parameter. Also, a #' plot can be produced if there are multiple tuning parameters but only one is #' varied. #' #' If there are two tuning parameters with different values, a plot can be #' produced where a different line is shown for each value of of the other #' parameter. For three parameters, the same line plot is created within #' conditioning panels/facets of the other parameter. #' #' Also, with two tuning parameters (with different values), a levelplot (i.e. #' un-clustered heatmap) can be created. For more than two parameters, this #' plot is created inside conditioning panels/facets. #' #' @aliases plot.train ggplot.train #' @param x an object of class \code{\link{train}}. #' @param metric What measure of performance to plot. Examples of possible #' values are "RMSE", "Rsquared", "Accuracy" or "Kappa". Other values can be #' used depending on what metrics have been calculated. #' @param plotType a string describing the type of plot (\code{"scatter"}, #' \code{"level"} or \code{"line"} (\code{plot} only)) #' @param digits an integer specifying the number of significant digits used to #' label the parameter value. #' @param xTrans a function that will be used to scale the x-axis in scatter #' plots. #' @param data an object of class \code{\link{train}}. #' @param output either "data", "ggplot" or "layered". The first returns a data #' frame while the second returns a simple \code{ggplot} object with no layers. #' The third value returns a plot with a set of layers. #' @param nameInStrip a logical: if there are more than 2 tuning parameters, #' should the name and value be included in the panel title? #' @param highlight a logical: if \code{TRUE}, a diamond is placed around the #' optimal parameter setting for models using grid search. #' @param mapping,environment unused arguments to make consistent with #' \pkg{ggplot2} generic method #' @param \dots \code{plot} only: specifications to be passed to #' \code{\link[lattice]{levelplot}}, \code{\link[lattice]{xyplot}}, #' \code{\link[lattice:xyplot]{stripplot}} (for line plots). The function #' automatically sets some arguments (e.g. axis labels) but passing in values #' here will over-ride the defaults #' @author Max Kuhn #' @seealso \code{\link{train}}, \code{\link[lattice]{levelplot}}, #' \code{\link[lattice]{xyplot}}, \code{\link[lattice:xyplot]{stripplot}}, #' \code{\link[ggplot2]{ggplot}} #' @references Kuhn (2008), ``Building Predictive Models in R Using the caret'' #' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}) #' @keywords hplot #' @method plot train #' @export #' @examples #' #' #' \dontrun{ #' library(klaR) #' rdaFit <- train(Species ~ ., #' data = iris, #' method = "rda", #' control = trainControl(method = "cv")) #' plot(rdaFit) #' plot(rdaFit, plotType = "level") #' #' ggplot(rdaFit) + theme_bw() #' #' } #' #' @method plot train #' @export plot.train "plot.train" <- function(x, plotType = "scatter", metric = x$metric[1], digits = getOption("digits") - 3, xTrans = NULL, nameInStrip = FALSE, ...) { ## Error trap if(!(plotType %in% c("level", "scatter", "line"))) stop("plotType must be either level, scatter or line") cutpoints <- c(0, 1.9, 2.9, 3.9, Inf) ## define some functions prettyVal <- function(u, dig, Name = NULL) { if(is.numeric(u)) { if(!is.null(Name)) u <- paste(gsub(".", " ", Name, fixed = TRUE), ": ", format(u, digits = dig), sep = "") return(factor(u)) } else return(if(!is.factor(u)) as.factor(u) else u) } ## Get tuning parameter info params <- x$modelInfo$parameters$parameter if(grepl("adapt", x$control$method)) warning("When using adaptive resampling, this plot may not accurately capture the relationship between the tuning parameters and model performance.") plotIt <- "yes" if(all(params == "parameter")) { plotIt <- "There are no tuning parameters for this model." } else { dat <- x$results ## Some exceptions for pretty printing if(x$method == "nb") dat$usekernel <- factor(ifelse(dat$usekernel, "Nonparametric", "Gaussian")) if(x$method == "gam") dat$select <- factor(ifelse(dat$select, "Feature Selection", "No Feature Selection")) if(x$method == "qrnn") dat$bag <- factor(ifelse(dat$bag, "Bagging", "No Bagging")) if(x$method == "C5.0") dat$winnow <- factor(ifelse(dat$winnow, "Winnowing", "No Winnowing")) ## if(x$method %in% c("M5Rules", "M5", "PART")) dat$pruned <- factor(ifelse(dat$pruned == "Yes", "Pruned", "Unpruned")) ## if(x$method %in% c("M5Rules", "M5")) dat$smoothed <- factor(ifelse(dat$smoothed == "Yes", "Smoothed", "Unsmoothed")) if(x$method == "M5") dat$rules <- factor(ifelse(dat$rules == "Yes", "Rules", "Trees")) ## if(x$method == "vbmpRadial") dat$estimateTheta <- factor(ifelse(dat$estimateTheta == "Yes", "Estimate Theta", "Do Not Estimate Theta")) ## Check to see which tuning parameters were varied paramValues <- apply(dat[,params,drop = FALSE], 2, function(x) length(unique(x))) ##paramValues <- paramValues[order(paramValues)] if(any(paramValues > 1)) { params <- names(paramValues)[paramValues > 1] } else plotIt <- "There are no tuning parameters with more than 1 value." } if(plotIt == "yes") { p <- length(params) dat <- dat[, c(metric, params)] if(p > 1) { numUnique <- unlist(lapply(dat[, -1], function(x) length(unique(x)))) numUnique <- sort(numUnique, decreasing = TRUE) dat <- dat[, c(metric, names(numUnique))] params <- names(numUnique) } ## The conveintion is that the first parameter (in ## position #2 of dat) is plotted on the x-axis, ## the second parameter is the grouping variable ## and the rest are conditioning variables if(!is.null(xTrans) & plotType == "scatter") dat[,2] <- xTrans(dat[,2]) ## We need to pretty-up some of the values of grouping ## or conditioning variables resampText <- resampName(x, FALSE) if(plotType %in% c("line", "scatter")) { if(plotType == "scatter") { if(p >= 2) for(i in 3:ncol(dat)) dat[,i] <- prettyVal(dat[,i], dig = digits, Name = if(i > 3) params[i-1] else NULL) } else { for(i in 2:ncol(dat)) dat[,i] <- prettyVal(dat[,i], dig = digits, Name = if(i > 3) params[i-1] else NULL) } for(i in 2:ncol(dat)) if(is.logical(dat[,i])) dat[,i] <- factor(dat[,i]) if(p > 2 & nameInStrip) { strip_vars <- params[-(1:2)] strip_lab <- subset(x$modelInfo$parameters, parameter %in% strip_vars)$label for(i in seq_along(strip_vars)) dat[, strip_vars[i]] <- factor(paste(strip_lab[i], dat[, strip_vars[i]], sep = ": ")) } ## make formula form <- if(p <= 2) { as.formula( paste(metric, "~", params[1], sep = "")) } else as.formula(paste(metric, "~", params[1], "|", paste(params[-(1:2)], collapse = "*"), sep = "")) defaultArgs <- list(x = form, data = dat, groups = if(p > 1) dat[,params[2]] else NULL) if(length(list(...)) > 0) defaultArgs <- c(defaultArgs, list(...)) lNames <- names(defaultArgs) if(!("ylab" %in% lNames)) defaultArgs$ylab <- paste(metric, resampText) if(!("type" %in% lNames) & plotType == "scatter") defaultArgs$type <- c("g", "o") if(!("type" %in% lNames) & plotType == "line") defaultArgs$type <- c("g", "o") if(p > 1) { ## I apologize in advance for the following 3 line kludge. groupCols <- 4 if(length(unique(dat[,3])) < 4) groupCols <- length(unique(dat[,3])) if(length(unique(dat[,3])) %in% 5:6) groupCols <- 3 groupCols <- as.numeric( cut(length(unique(dat[,3])), cutpoints, include.lowest = TRUE)) if(!(any(c("key", "auto.key") %in% lNames))) defaultArgs$auto.key <- list(columns = groupCols, lines = TRUE, title = as.character(x$modelInfo$parameter$label)[x$modelInfo$parameter$parameter == params[2]], cex.title = 1) } if(!("xlab" %in% lNames)) defaultArgs$xlab <- as.character(x$modelInfo$parameter$label)[x$modelInfo$parameter$parameter == params[1]] if(plotType == "scatter") { out <- do.call("xyplot", defaultArgs) } else { ## line plot ######################### out <- do.call("stripplot", defaultArgs) } } if(plotType == "level") { if(p == 1) stop("There must be at least 2 tuning parameters with multiple values") for(i in 2:ncol(dat)) dat[,i] <- prettyVal(dat[,i], dig = digits, Name = if(i > 3) params[i-1] else NULL) if(p > 2 & nameInStrip) { strip_vars <- params[-(1:2)] strip_lab <- subset(x$modelInfo$parameters, parameter %in% strip_vars)$label for(i in seq_along(strip_vars)) dat[, strip_vars[i]] <- factor(paste(strip_lab[i], dat[, strip_vars[i]], sep = ": ")) } ## make formula form <- if(p <= 2) { as.formula(paste(metric, "~", params[1], "*", params[2], sep = "")) } else as.formula(paste(metric, "~", params[1], "*", params[2], "|", paste(params[-(1:2)], collapse = "*"), sep = "")) defaultArgs <- list(x = form, data = dat) if(length(list(...)) > 0) defaultArgs <- c(defaultArgs, list(...)) lNames <- names(defaultArgs) if(!("sub" %in% lNames)) defaultArgs$sub <- paste(metric, resampText) if(!("xlab" %in% lNames)) defaultArgs$xlab <- as.character(x$modelInfo$parameter$label)[x$modelInfo$parameter$parameter == params[1]] if(!("ylab" %in% lNames)) defaultArgs$ylab <- as.character(x$modelInfo$parameter$label)[x$modelInfo$parameter$parameter == params[2]] out <- do.call("levelplot", defaultArgs) } } else stop(plotIt) out } caret/R/prec_rec.R0000644000176200001440000002202113153613153013454 0ustar liggesusers#' Calculate recall, precision and F values #' #' These functions calculate the recall, precision or F values of a measurement #' system for finding/retrieving relevant documents compared to reference #' results (the truth regarding relevance). The measurement and "truth" data #' must have the same two possible outcomes and one of the outcomes must be #' thought of as a "relevant" results. #' #' The recall (aka specificity) is defined as the proportion of relevant #' results out of the number of samples which were actually relevant. When #' there are no relevant results, recall is not defined and a value of #' \code{NA} is returned. #' #' The precision is percentage of predicted truly relevant results of the total #' number of predicted relevant results and characterizes the "purity in #' retrieval performance" (Buckland and Gey, 1994) #' #' The measure "F" is a combination of precision and recall (see below). #' #' Suppose a 2x2 table with notation #' #' \tabular{rcc}{ \tab Reference \tab \cr Predicted \tab relevant \tab #' Irrelevant \cr relevant \tab A \tab B \cr Irrelevant \tab C \tab D \cr } #' #' The formulas used here are: \deqn{recall = A/(A+C)} \deqn{precision = #' A/(A+B)} \deqn{F_i = (1+i^2)*prec*recall/((i^2 * precision)+recall)} #' #' See the references for discussions of the statistics. #' #' @aliases recall recall.default recall.table precision precision.default #' precision.table precision.matrix F_meas F_meas.default F_meas.table #' @param data for the default functions, a factor containing the discrete #' measurements. For the \code{table} function, a table. #' @param reference a factor containing the reference values (i.e. truth) #' @param relevant a character string that defines the factor level #' corresponding to the "relevant" results #' @param beta a numeric value used to weight precision and recall. A value of #' 1 is traditionally used and corresponds to the harmonic mean of the two #' values but other values weight recall beta times more important than #' precision. #' @param na.rm a logical value indicating whether \code{NA} values should be #' stripped before the computation proceeds #' @param ... not currently used #' @return A number between 0 and 1 (or NA). #' @author Max Kuhn #' @seealso \code{\link{confusionMatrix}} #' @references Kuhn, M. (2008), ``Building predictive models in R using the #' caret package, '' \emph{Journal of Statistical Software}, #' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}). #' #' Buckland, M., & Gey, F. (1994). The relationship between Recall and #' Precision. \emph{Journal of the American Society for Information Science}, #' 45(1), 12-19. #' #' Powers, D. (2007). Evaluation: From Precision, Recall and F Factor to ROC, #' Informedness, Markedness and Correlation. Technical Report SIE-07-001, #' Flinders University #' @keywords manip #' @examples #' #' ################### #' ## Data in Table 2 of Powers (2007) #' #' lvs <- c("Relevant", "Irrelevant") #' tbl_2_1_pred <- factor(rep(lvs, times = c(42, 58)), levels = lvs) #' tbl_2_1_truth <- factor(c(rep(lvs, times = c(30, 12)), #' rep(lvs, times = c(30, 28))), #' levels = lvs) #' tbl_2_1 <- table(tbl_2_1_pred, tbl_2_1_truth) #' #' precision(tbl_2_1) #' precision(data = tbl_2_1_pred, reference = tbl_2_1_truth, relevant = "Relevant") #' recall(tbl_2_1) #' recall(data = tbl_2_1_pred, reference = tbl_2_1_truth, relevant = "Relevant") #' #' #' tbl_2_2_pred <- factor(rep(lvs, times = c(76, 24)), levels = lvs) #' tbl_2_2_truth <- factor(c(rep(lvs, times = c(56, 20)), #' rep(lvs, times = c(12, 12))), #' levels = lvs) #' tbl_2_2 <- table(tbl_2_2_pred, tbl_2_2_truth) #' #' precision(tbl_2_2) #' precision(data = tbl_2_2_pred, reference = tbl_2_2_truth, relevant = "Relevant") #' recall(tbl_2_2) #' recall(data = tbl_2_2_pred, reference = tbl_2_2_truth, relevant = "Relevant") #' #' @export recall recall <- function(data, ...) UseMethod("recall") #' @rdname recall #' @export "recall.table" <- function(data, relevant = rownames(data)[1], ...){ if(!all.equal(nrow(data), ncol(data))) stop("the table must have nrow = ncol") if(!all.equal(rownames(data), colnames(data))) stop("the table must the same groups in the same order") if(nrow(data) > 2) { tmp <- data data <- matrix(NA, 2, 2) colnames(data) <- rownames(data) <- c("rel", "irrel") irrelCol <- which(!(colnames(tmp) %in% relevant)) relCol <- which(colnames(tmp) %in% relevant) data[1, 1] <- sum(tmp[relCol, relCol]) data[1, 2] <- sum(tmp[relCol, irrelCol]) data[2, 1] <- sum(tmp[irrelCol, relCol]) data[2, 2] <- sum(tmp[irrelCol, irrelCol]) data <- as.table(data) relevant <- "rel" rm(tmp) } numer <- data[relevant, relevant] denom <- sum(data[, relevant]) rec <- ifelse(denom > 0, numer / denom, NA) rec } #' @rdname recall #' @importFrom stats complete.cases #' @export recall.default <- function(data, reference, relevant = levels(reference)[1], na.rm = TRUE, ...) { if (!is.factor(reference) | !is.factor(data)) stop("input data must be a factor") if (length(unique(c(levels(reference), levels(data)))) != 2) stop("input data must have the same two levels") if (na.rm) { cc <- complete.cases(data) & complete.cases(reference) if (any(!cc)) { data <- data[cc] reference <- reference[cc] } } xtab <- table(data, reference) recall.table(xtab, relevant = relevant) } #' @rdname recall #' @export precision <- function(data, ...) UseMethod("precision") #' @rdname recall #' @importFrom stats complete.cases #' @export precision.default <- function(data, reference, relevant = levels(reference)[1], na.rm = TRUE, ...) { if (!is.factor(reference) | !is.factor(data)) stop("input data must be a factor") if (length(unique(c(levels(reference), levels(data)))) != 2) stop("input data must have the same two levels") if (na.rm) { cc <- complete.cases(data) & complete.cases(reference) if (any(!cc)) { data <- data[cc] reference <- reference[cc] } } xtab <- table(data, reference) precision.table(xtab, relevant = relevant) } #' @rdname recall #' @export precision.table <- function (data, relevant = rownames(data)[1], ...) { if (!all.equal(nrow(data), ncol(data))) stop("the table must have nrow = ncol") if (!all.equal(rownames(data), colnames(data))) stop("the table must the same groups in the same order") if (nrow(data) > 2) { tmp <- data data <- matrix(NA, 2, 2) colnames(data) <- rownames(data) <- c("rel", "irrel") irrelCol <- which(!(colnames(tmp) %in% relevant)) relCol <- which(colnames(tmp) %in% relevant) data[1, 1] <- sum(tmp[relCol, relCol]) data[1, 2] <- sum(tmp[relCol, irrelCol]) data[2, 1] <- sum(tmp[irrelCol, relCol]) data[2, 2] <- sum(tmp[irrelCol, irrelCol]) data <- as.table(data) relevant <- "rel" relevant rm(tmp) } numer <- data[relevant, relevant] denom <- sum(data[relevant, ]) spec <- ifelse(denom > 0, numer/denom, NA) spec } #' @rdname recall #' @export F_meas <- function(data, ...) UseMethod("F_meas") #' @rdname recall #' @importFrom stats complete.cases #' @export F_meas.default <- function(data, reference, relevant = levels(reference)[1], beta = 1, na.rm = TRUE, ...) { if (!is.factor(reference) | !is.factor(data)) stop("input data must be a factor") if (length(unique(c(levels(reference), levels(data)))) != 2) stop("input data must have the same two levels") if (na.rm) { cc <- complete.cases(data) & complete.cases(reference) if (any(!cc)) { data <- data[cc] reference <- reference[cc] } } xtab <- table(data, reference) F_meas.table(xtab, relevant = relevant, beta = beta) } #' @rdname recall #' @export F_meas.table <- function (data, relevant = rownames(data)[1], beta = 1, ...) { prec <- precision.table(data, relevant = relevant) rec <- recall.table(data, relevant = relevant) (1+beta^2)*prec*rec/((beta^2 * prec)+rec) } #' @rdname postResample #' @export prSummary <- function (data, lev = NULL, model = NULL) { requireNamespaceQuietStop("MLmetrics") if (length(levels(data$obs)) > 2) stop(paste("Your outcome has", length(levels(data$obs)), "levels. `prSummary`` function isn't appropriate.", call. = FALSE)) if (!all(levels(data[, "pred"]) == levels(data[, "obs"]))) stop("Levels of observed and predicted data do not match.", call. = FALSE) pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, lev[1]], y_true = ifelse(data$obs == lev[1], 1, 0)), silent = TRUE) if(inherits(pr_auc, "try-error")) pr_auc <- NA c(AUC = pr_auc, Precision = precision.default(data = data$pred, reference = data$obs, relevant = lev[1]), Recall = recall.default(data = data$pred, reference = data$obs, relevant = lev[1]), F = F_meas.default(data = data$pred, reference = data$obs, relevant = lev[1])) } caret/R/print.mars.R0000644000176200001440000000076013153613153013775 0ustar liggesusersprint.bmars <- function (x, ...) { cat("\nCall:\n", deparse(x$call), "\n\n", sep = "") if(!is.null(x$x))cat("Data:\n # variables:\t", dim(x$x)[2], "\n # samples:\t", dim(x$x)[1], "\n") cat( "\nModel:", "\n B: \t", x$B, "\n degree: \t", x$fit[[1]]$degree, "\n nk: \t", x$fit[[1]]$nk, "\n penalty: \t", x$fit[[1]]$penalty, "\n threshold:\t", x$fit[[1]]$thresh, "\n") cat("\n") invisible(x) } caret/R/caret-package.R0000644000176200001440000003270213153613153014370 0ustar liggesusers #' Blood Brain Barrier Data #' #' Mente and Lombardo (2005) develop models to predict the log #' of the ratio of the concentration of a compound in the brain #' and the concentration in blood. For each compound, they computed #' three sets of molecular descriptors: MOE 2D, rule-of-five and #' Charge Polar Surface Area (CPSA). In all, 134 descriptors were #' calculated. Included in this package are 208 non-proprietary #' literature compounds. The vector \code{logBBB} contains the concentration #' ratio and the data fame \code{bbbDescr} contains the descriptor values. #' #' #' @name BloodBrain #' @aliases BloodBrain bbbDescr logBBB #' @docType data #' @return \item{bbbDescr}{data frame of chemical descriptors} \item{logBBB}{vector of assay results} #' #' @source Mente, S.R. and Lombardo, F. (2005). A recursive-partitioning model #' for blood-brain barrier permeation, \emph{Journal of Computer-Aided Molecular Design}, #' Vol. 19, pg. 465-481. #' #' @keywords datasets NULL #' COX-2 Activity Data #' #' From Sutherland, O'Brien, and Weaver (2003): "A set of 467 cyclooxygenase-2 #' (COX-2) inhibitors has been assembled from the published work of a single #' research group, with in vitro activities against human recombinant enzyme #' expressed as IC50 values ranging from 1 nM to >100 uM (53 compounds have #' indeterminate IC50 values)." #' #' The data are in the Supplemental Data file for the article. #' #' A set of 255 descriptors (MOE2D and QikProp) were generated. To classify the #' data, we used a cutoff of $2^2.5$ to determine activity #' #' #' @name cox2 #' @aliases cox2 cox2Class cox2Descr cox2IC50 #' @docType data #' @return \item{cox2Descr}{the descriptors} \item{cox2IC50}{the IC50 data used #' to determine activity} #' #' \item{cox2Class}{the categorical outcome ("Active" or "Inactive") based on #' the $2^2.5$ cutoff} #' @source Sutherland, J. J., O'Brien, L. A. and Weaver, D. F. (2003). #' Spline-Fitting with a Genetic Algorithm: A Method for Developing #' Classification Structure-Activity Relationships, \emph{Journal of Chemical #' Information and Computer Sciences}, Vol. 43, pg. 1906--1915. #' @keywords datasets NULL #' Dihydrofolate Reductase Inhibitors Data #' #' Sutherland and Weaver (2004) discuss QSAR models for dihydrofolate reductase #' (DHFR) inhibition. This data set contains values for 325 compounds. For each #' compound, 228 molecular descriptors have been calculated. Additionally, each #' samples is designated as "active" or "inactive". #' #' The data frame \code{dhfr} contains a column called \code{Y} with the #' outcome classification. The remainder of the columns are molecular #' descriptor values. #' #' #' @name dhfr #' @docType data #' @return \item{dhfr}{data frame of chemical descriptors and the activity #' values} #' @source Sutherland, J.J. and Weaver, D.F. (2004). Three-dimensional #' quantitative structure-activity and structure-selectivity relationships of #' dihydrofolate reductase inhibitors, \emph{Journal of Computer-Aided #' Molecular Design}, Vol. 18, pg. 309--331. #' @keywords datasets NULL #' German Credit Data #' #' Data from Dr. Hans Hofmann of the University of Hamburg. #' #' These data have two classes for the credit worthiness: good or bad. There #' are predictors related to attributes, such as: checking account status, #' duration, credit history, purpose of the loan, amount of the loan, savings #' accounts or bonds, employment duration, Installment rate in percentage of #' disposable income, personal information, other debtors/guarantors, residence #' duration, property, age, other installment plans, housing, number of #' existing credits, job information, Number of people being liable to provide #' maintenance for, telephone, and foreign worker status. #' #' Many of these predictors are discrete and have been expanded into several #' 0/1 indicator variables #' #' #' @name GermanCredit #' @docType data #' @source UCI Machine Learning Repository #' @keywords datasets NULL #' Multidrug Resistance Reversal (MDRR) Agent Data #' #' Svetnik et al. (2003) describe these data: "Bakken and Jurs studied a set of #' compounds originally discussed by Klopman et al., who were interested in #' multidrug resistance reversal (MDRR) agents. The original response variable #' is a ratio measuring the ability of a compound to reverse a leukemia cell's #' resistance to adriamycin. However, the problem was treated as a #' classification problem, and compounds with the ratio >4.2 were considered #' active, and those with the ratio <= 2.0 were considered inactive. Compounds #' with the ratio between these two cutoffs were called moderate and removed #' from the data for twoclass classification, leaving a set of 528 compounds #' (298 actives and 230 inactives). (Various other arrangements of these data #' were examined by Bakken and Jurs, but we will focus on this particular one.) #' We did not have access to the original descriptors, but we generated a set #' of 342 descriptors of three different types that should be similar to the #' original descriptors, using the DRAGON software." #' #' The data and R code are in the Supplemental Data file for the article. #' #' #' @name mdrr #' @aliases mdrr mdrrClass mdrrDescr #' @docType data #' @return \item{mdrrDescr}{the descriptors} \item{mdrrClass}{the categorical #' outcome ("Active" or "Inactive")} #' @source Svetnik, V., Liaw, A., Tong, C., Culberson, J. C., Sheridan, R. P. #' Feuston, B. P (2003). Random Forest: A Classification and Regression Tool #' for Compound Classification and QSAR Modeling, \emph{Journal of Chemical #' Information and Computer Sciences}, Vol. 43, pg. 1947-1958. #' @keywords datasets NULL #' Fatty acid composition of commercial oils #' #' Fatty acid concentrations of commercial oils were measured using gas #' chromatography. The data is used to predict the type of oil. Note that #' only the known oils are in the data set. Also, the authors state that there #' are 95 samples of known oils. However, we count 96 in Table 1 (pgs. 33-35). #' #' #' @name oil #' @aliases oil oilType fattyAcids #' @docType data #' @return \item{fattyAcids}{data frame of fatty acid compositions: Palmitic, #' Stearic, Oleic, Linoleic, Linolenic, Eicosanoic and Eicosenoic. When values #' fell below the lower limit of the assay (denoted as 5) cuts <- 5 breaks <- unique(quantile(y, probs = seq(0, 1, length = cuts))) y <- cut(y, breaks, include.lowest = TRUE) } if(k < length(y)) { ## reset levels so that the possible levels and ## the levels in the vector are the same y <- factor(as.character(y)) numInClass <- table(y) foldVector <- vector(mode = "integer", length(y)) ## For each class, balance the fold allocation as far ## as possible, then resample the remainder. ## The final assignment of folds is also randomized. for(i in 1:length(numInClass)) { ## create a vector of integers from 1:k as many times as possible without ## going over the number of samples in the class. Note that if the number ## of samples in a class is less than k, nothing is producd here. min_reps <- numInClass[i] %/% k if(min_reps > 0) { spares <- numInClass[i] %% k seqVector <- rep(1:k, min_reps) ## add enough random integers to get length(seqVector) == numInClass[i] if(spares > 0) seqVector <- c(seqVector, sample(1:k, spares)) ## shuffle the integers for fold assignment and assign to this classes's data foldVector[which(y == names(numInClass)[i])] <- sample(seqVector) } else { ## Here there are less records in the class than unique folds so ## randomly sprinkle them into folds. foldVector[which(y == names(numInClass)[i])] <- sample(1:k, size = numInClass[i]) } } } else foldVector <- seq(along = y) if(list) { out <- split(seq(along = y), foldVector) names(out) <- paste("Fold", gsub(" ", "0", format(seq(along = out))), sep = "") if(returnTrain) out <- lapply(out, function(data, y) y[-data], y = seq(along = y)) } else out <- foldVector out } #' @export createMultiFolds <- function(y, k = 10, times = 5) { if(class(y)[1] == "Surv") y <- y[,"time"] prettyNums <- paste("Rep", gsub(" ", "0", format(1:times)), sep = "") for(i in 1:times) { tmp <- createFolds(y, k = k, list = TRUE, returnTrain = TRUE) names(tmp) <- paste("Fold", gsub(" ", "0", format(seq(along = tmp))), ".", prettyNums[i], sep = "") out <- if(i == 1) tmp else c(out, tmp) } out } ## From Tony Cooper on 1/9/13 #' @rdname createDataPartition #' @export createTimeSlices <- function(y, initialWindow, horizon = 1, fixedWindow = TRUE, skip = 0) { ## initialwindow = initial number of consecutive values in each training set sample ## horizon = number of consecutive values in test set sample ## fixedwindow = FALSE if we use the maximum possible length for the training set ## Ensure that initialwindow + horizon <= length(y) stops <- seq(initialWindow, (length(y) - horizon), by = skip + 1) if (fixedWindow) { starts <- stops - initialWindow + 1 } else { starts <- rep(1, length(stops)) # all start at 1 } train <- mapply(seq, starts, stops, SIMPLIFY = FALSE) test <- mapply(seq, stops+1, stops+horizon, SIMPLIFY = FALSE) nums <- gsub(" ", "0", format(stops)) names(train) <- paste("Training", nums, sep = "") names(test) <- paste("Testing", nums, sep = "") out <- list(train = train, test = test) out } #' @rdname createDataPartition #' @export groupKFold <- function(group, k = length(unique(group))) { if(k > length(unique(group))) stop(paste("`k` should be less than", length(unique(group)))) dat <- data.frame(index = seq(along = group), group = group) groups <- data.frame(group = unique(dat$group)) group_folds <- createFolds(groups$group, returnTrain = TRUE, k = k) group_folds <- lapply(group_folds, function(x, y) y[x,,drop = FALSE], y = groups) dat_folds <- lapply(group_folds, function(x, y) merge(x, y), y = dat) lapply(dat_folds, function(x) sort(x$index)) } make_resamples <- function(ctrl_obj, outcome) { n <- length(outcome) if(is.null(ctrl_obj$index)) { if(ctrl_obj$method == "custom") stop("'custom' resampling is appropriate when the `trControl` argument `index` is used", call. = FALSE) ctrl_obj$index <- switch(tolower(ctrl_obj$method), oob = NULL, none = list(seq(along = outcome)), apparent = list(all = seq(along = outcome)), alt_cv =, cv = createFolds(outcome, ctrl_obj$number, returnTrain = TRUE), repeatedcv =, adaptive_cv = createMultiFolds(outcome, ctrl_obj$number, ctrl_obj$repeats), loocv = createFolds(outcome, n, returnTrain = TRUE), boot =, boot632 =, optimism_boot =, boot_all =, adaptive_boot = createResample(outcome, ctrl_obj$number), test = createDataPartition(outcome, 1, ctrl_obj$p), adaptive_lgocv =, lgocv = createDataPartition(outcome, ctrl_obj$number, ctrl_obj$p), timeslice = createTimeSlices(seq(along = outcome), initialWindow = ctrl_obj$initialWindow, horizon = ctrl_obj$horizon, fixedWindow = ctrl_obj$fixedWindow, skip = ctrl_obj$skip)$train, stop("Not a recognized resampling method.", call. = FALSE)) } else { index_types <- unlist(lapply(ctrl_obj$index, is.integer)) if(!isTRUE(all(index_types))) stop("`index` should be lists of integers.", call. = FALSE) if(!is.null(ctrl_obj$indexOut)) { index_types <- unlist(lapply(ctrl_obj$indexOut, is.integer)) if(!isTRUE(all(index_types))) stop("`indexOut` should be lists of integers.", call. = FALSE) } } if(ctrl_obj$method == "apparent") ctrl_obj$indexOut <- list(all = seq(along = outcome)) ## Create holdout indices if(is.null(ctrl_obj$indexOut) && ctrl_obj$method != "oob"){ if(tolower(ctrl_obj$method) != "timeslice") { y_index <- if (class(outcome)[1] == "Surv") 1:nrow(outcome) else seq(along = outcome) ctrl_obj$indexOut <- lapply(ctrl_obj$index, function(training) setdiff(y_index, training)) if(ctrl_obj$method %in% c("optimism_boot", "boot_all")) { ctrl_obj$indexExtra <- lapply(ctrl_obj$index, function(training) { list(origIndex = y_index, bootIndex = training) }) } names(ctrl_obj$indexOut) <- prettySeq(ctrl_obj$indexOut) } else { ctrl_obj$indexOut <- createTimeSlices(seq(along = outcome), initialWindow = ctrl_obj$initialWindow, horizon = ctrl_obj$horizon, fixedWindow = ctrl_obj$fixedWindow, skip = ctrl_obj$skip)$test } } if(ctrl_obj$method != "oob" & is.null(ctrl_obj$index)) names(ctrl_obj$index) <- prettySeq(ctrl_obj$index) if(ctrl_obj$method != "oob" & is.null(names(ctrl_obj$index))) names(ctrl_obj$index) <- prettySeq(ctrl_obj$index) if(ctrl_obj$method != "oob" & is.null(names(ctrl_obj$indexOut))) names(ctrl_obj$indexOut) <- prettySeq(ctrl_obj$indexOut) ctrl_obj } caret/R/extractPrediction.R0000644000176200001440000001612713153613153015377 0ustar liggesusers#' @rdname predict.train #' @export extractPrediction <- function(models, testX = NULL, testY = NULL, unkX = NULL, unkOnly = !is.null(unkX) & is.null(testX), verbose = FALSE) { objectNames <- names(models) if(is.null(objectNames)) objectNames <- paste("Object", 1:length(models), sep = "") if(!unkOnly) { trainX <- models[[1]]$trainingData[,!(colnames(models[[1]]$trainingData) %in% ".outcome"), drop = FALSE] trainY <- models[[1]]$trainingData$.outcome } obsLevels <- levels(models[[1]]) if(verbose) { cat("Number of training samples:", length(trainY), "\n") cat("Number of test samples: ", length(testY), "\n\n") } pred <- obs <- modelName <- dataType <- objName <- NULL if(!is.null(testX)) { #if(!is.data.frame(testX)) testX <- as.data.frame(testX) hasNa <- apply(testX, 1, function(data) any(is.na(data))) if(verbose) cat("There were ", sum(hasNa), "rows with missing values\n\n") } for(i in seq(along = models)) { if(!unkOnly) { tempTrainPred <- predictionFunction(models[[i]]$modelInfo, models[[i]]$finalModel, trainX, models[[i]]$preProcess) if(verbose) cat(models[[i]]$method, ":", length(tempTrainPred), "training predictions were added\n") if(models[[i]]$modelType == "Classification") { pred <- c(pred, as.character(tempTrainPred)) obs <- c(obs, as.character(trainY)) } else { tempTrainPred <- trimPredictions(mod_type = models[[i]]$modelType, bounds = models[[i]]$control$predictionBounds, limits = models[[i]]$yLimit, pred = tempTrainPred) pred <- c(pred, tempTrainPred) obs <- c(obs, trainY) } modelName <- c(modelName, rep(models[[i]]$method, length(tempTrainPred))) objName <- c(objName, rep(objectNames[[i]], length(tempTrainPred))) dataType <- c(dataType, rep("Training", length(tempTrainPred))) if(!is.null(testX) & !is.null(testY)) { if(any(colnames(testX) == ".outcome")) testX <- testX[, colnames(testX) != ".outcome", drop = FALSE] tempTestPred <- predictionFunction(models[[i]]$modelInfo, models[[i]]$finalModel, testX, models[[i]]$preProcess) if(verbose) cat(models[[i]]$method, ":", length(tempTestPred), "test predictions were added\n") if(models[[i]]$modelType == "Classification") { pred <- c(pred, as.character(tempTestPred)) obs <- c(obs, as.character(testY)) } else { tempTestPred <- trimPredictions(mod_type = models[[i]]$modelType, bounds = models[[i]]$control$predictionBounds, limits = models[[i]]$yLimit, pred = tempTestPred) pred <- c(pred, tempTestPred) obs <- c(obs, testY) } modelName <- c(modelName, rep(models[[i]]$method, length(tempTestPred))) objName <- c(objName, rep(objectNames[[i]], length(tempTestPred))) dataType <- c(dataType, rep("Test", length(tempTestPred))) } if(verbose) cat("\n") } if(!is.null(unkX)) { if(any(colnames(unkX) == ".outcome")) unkX <- unkX[, colnames(unkX) != ".outcome", drop = FALSE] tempUnkPred <- predictionFunction(models[[i]]$modelInfo, models[[i]]$finalModel, unkX, models[[i]]$preProcess) if(verbose) cat(models[[i]]$method, ":", length(tempUnkPred), "unknown predictions were added\n") if(models[[i]]$modelType == "Classification") { pred <- c(pred, as.character(tempUnkPred)) obs <- c(obs, rep("", length(tempUnkPred))) } else { tempUnkPred <- trimPredictions(mod_type = models[[i]]$modelType, bounds = models[[i]]$control$predictionBounds, limits = models[[i]]$yLimit, pred = tempUnkPred) pred <- c(pred, tempUnkPred) obs <- c(obs, rep(NA, length(tempUnkPred))) } modelName <- c(modelName, rep(models[[i]]$method, length(tempUnkPred))) objName <- c(objName, rep(objectNames[[i]], length(tempUnkPred))) dataType <- c(dataType, rep("Unknown", length(tempUnkPred))) } if(verbose) cat("\n") } if(models[[1]]$modelType == "Classification") { pred <- factor(pred, levels = obsLevels) obs <- factor(obs, levels = obsLevels) } data.frame(obs = obs, pred = pred, model = modelName, dataType = dataType, object = objName) } trimPredictions <- function(pred, mod_type, bounds, limits) { if(mod_type == "Regression" && is.logical(bounds) && any(bounds)) { if(bounds[1]) pred <- ifelse(pred < limits[1], limits[1], pred) if(bounds[2]) pred <- ifelse(pred > limits[2], limits[2], pred) } if(mod_type == "Regression" && is.numeric(bounds) && any(!is.na(bounds))) { if(!is.na(bounds[1])) pred <- ifelse(pred < bounds[1], bounds[1], pred) if(!is.na(bounds[2])) pred <- ifelse(pred > bounds[2], bounds[2], pred) } pred } ## This is used in workflows trim_values <- function(preds, ctrl, is_num) { if(is_num) { if(is.logical(ctrl$predictionBounds) && any(ctrl$predictionBounds)) { if(is.list(preds)) { preds <- lapply(preds, trimPredictions, mod_type = "Regression", bounds = ctrl$predictionBounds, limits = ctrl$yLimits) } else { preds <- trimPredictions(mod_type = "Regression", bounds = ctrl$predictionBounds, limits = ctrl$yLimit, pred = preds) } } else { if(is.numeric(ctrl$predictionBounds) && any(!is.na(ctrl$predictionBounds))) { if(is.list(preds)) { preds <- lapply(preds, trimPredictions, mod_type = "Regression", bounds = ctrl$predictionBounds, limits = ctrl$yLimits) } else { preds <- trimPredictions(mod_type = "Regression", bounds = ctrl$predictionBounds, limits = ctrl$yLimit, pred = preds) } } } } preds } caret/R/preProcess.R0000644000176200001440000012613113206101126014015 0ustar liggesusers## Should respect the input class except when there is a conflict or always ## generate a data frame? ppMethods <- c("BoxCox", "YeoJohnson", "expoTrans", "invHyperbolicSine", "center", "scale", "range", "knnImpute", "bagImpute", "medianImpute", "pca", "ica", "spatialSign", "ignore", "keep", "remove", "zv", "nzv", "conditionalX", "corr") invHyperbolicSineFunc <- function(x) log(x+sqrt(x^2+1)) getRangeBounds <- function(pp) { if(!is.null(pp$rangeBounds)) { list(lower = pp$rangeBounds[1], upper = pp$rangeBounds[2]) } else { list(lower = 0.0, upper = 1.0) } } #' Pre-Processing of Predictors #' #' Pre-processing transformation (centering, scaling etc.) can be estimated #' from the training data and applied to any data set with the same variables. #' #' In all cases, transformations and operations are estimated using the data in #' \code{x} and these operations are applied to new data using these values; #' nothing is recomputed when using the \code{predict} function. #' #' The Box-Cox (\code{method = "BoxCox"}), Yeo-Johnson (\code{method = #' "YeoJohnson"}), and exponential transformations (\code{method = #' "expoTrans"})have been "repurposed" here: they are being used to transform #' the predictor variables. The Box-Cox transformation was developed for #' transforming the response variable while another method, the Box-Tidwell #' transformation, was created to estimate transformations of predictor data. #' However, the Box-Cox method is simpler, more computationally efficient and #' is equally effective for estimating power transformations. The Yeo-Johnson #' transformation is similar to the Box-Cox model but can accommodate #' predictors with zero and/or negative values (while the predictors values for #' the Box-Cox transformation must be strictly positive.) The exponential #' transformation of Manly (1976) can also be used for positive or negative #' data. #' #' \code{method = "center"} subtracts the mean of the predictor's data (again #' from the data in \code{x}) from the predictor values while \code{method = #' "scale"} divides by the standard deviation. #' #' The "range" transformation scales the data to be within \code{rangeBounds}. If new #' samples have values larger or smaller than those in the training set, values #' will be outside of this range. #' #' Predictors that are not numeric are ignored in the calculations. #' #' \code{method = "zv"} identifies numeric predictor columns with a single #' value (i.e. having zero variance) and excludes them from further #' calculations. Similarly, \code{method = "nzv"} does the same by applying #' \code{\link{nearZeroVar}} exclude "near zero-variance" predictors. The options #' \code{freqCut} and \code{uniqueCut} can be used to modify the filter. #' #' \code{method = "corr"} seeks to filter out highly correlated predictors. See #' \code{\link{findCorrelation}}. #' #' For classification, \code{method = "conditionalX"} examines the distribution #' of each predictor conditional on the outcome. If there is only one unique #' value within any class, the predictor is excluded from further calculations #' (see \code{\link{checkConditionalX}} for an example). When \code{outcome} is #' not a factor, this calculation is not executed. This operation can be time #' consuming when used within resampling via \code{\link{train}}. #' #' The operations are applied in this order: zero-variance filter, near-zero #' variance filter, correlation filter, Box-Cox/Yeo-Johnson/exponential transformation, centering, #' scaling, range, imputation, PCA, ICA then spatial sign. This is a departure #' from versions of \pkg{caret} prior to version 4.76 (where imputation was #' done first) and is not backwards compatible if bagging was used for #' imputation. #' #' If PCA is requested but centering and scaling are not, the values will still #' be centered and scaled. Similarly, when ICA is requested, the data are #' automatically centered and scaled. #' #' k-nearest neighbor imputation is carried out by finding the k closest #' samples (Euclidian distance) in the training set. Imputation via bagging #' fits a bagged tree model for each predictor (as a function of all the #' others). This method is simple, accurate and accepts missing values, but it #' has much higher computational cost. Imputation via medians takes the median #' of each predictor in the training set, and uses them to fill missing values. #' This method is simple, fast, and accepts missing values, but treats each #' predictor independently, and may be inaccurate. #' #' A warning is thrown if both PCA and ICA are requested. ICA, as implemented #' by the \code{\link[fastICA]{fastICA}} package automatically does a PCA #' decomposition prior to finding the ICA scores. #' #' The function will throw an error of any numeric variables in \code{x} has #' less than two unique values unless either \code{method = "zv"} or #' \code{method = "nzv"} are invoked. #' #' Non-numeric data will not be pre-processed and there values will be in the #' data frame produced by the \code{predict} function. Note that when PCA or #' ICA is used, the non-numeric columns may be in different positions when #' predicted. #' #' @aliases preProcess preProcess.default predict.preProcess #' @param x a matrix or data frame. Non-numeric predictors are allowed but will #' be ignored. #' @param method a character vector specifying the type of processing. Possible #' values are "BoxCox", "YeoJohnson", "expoTrans", "center", "scale", "range", #' "knnImpute", "bagImpute", "medianImpute", "pca", "ica", "spatialSign", "corr", "zv", #' "nzv", and "conditionalX" (see Details below) #' @param thresh a cutoff for the cumulative percent of variance to be retained #' by PCA #' @param pcaComp the specific number of PCA components to keep. If specified, #' this over-rides \code{thresh} #' @param na.remove a logical; should missing values be removed from the #' calculations? #' @param object an object of class \code{preProcess} #' @param newdata a matrix or data frame of new data to be pre-processed #' @param k the number of nearest neighbors from the training set to use for #' imputation #' @param knnSummary function to average the neighbor values per column during #' imputation #' @param outcome a numeric or factor vector for the training set outcomes. #' This can be used to help estimate the Box-Cox transformation of the #' predictor variables (see Details below) #' @param fudge a tolerance value: Box-Cox transformation lambda values within #' +/-fudge will be coerced to 0 and within 1+/-fudge will be coerced to 1. #' @param numUnique how many unique values should \code{y} have to estimate the #' Box-Cox transformation? #' @param verbose a logical: prints a log as the computations proceed #' @param freqCut the cutoff for the ratio of the most common value to the #' second most common value. See \code{\link{nearZeroVar}}. #' @param uniqueCut the cutoff for the percentage of distinct values out of #' the number of total samples. See \code{\link{nearZeroVar}}. #' @param cutoff a numeric value for the pair-wise absolute correlation cutoff. #' See \code{\link{findCorrelation}}. #' @param rangeBounds a two-element numeric vector specifying closed interval #' for range transformation #' @param \dots additional arguments to pass to \code{\link[fastICA]{fastICA}}, #' such as \code{n.comp} #' @return \code{preProcess} results in a list with elements \item{call}{the #' function call} \item{method}{a named list of operations and the variables #' used for each } \item{dim}{the dimensions of \code{x}} \item{bc}{Box-Cox #' transformation values, see \code{\link{BoxCoxTrans}}} \item{mean}{a vector #' of means (if centering was requested)} \item{std}{a vector of standard #' deviations (if scaling or PCA was requested)} \item{rotation}{a matrix of #' eigenvectors if PCA was requested} \item{method}{the value of\code{method}} #' \item{thresh}{the value of\code{thresh}} \item{ranges}{a matrix of min and #' max values for each predictor when \code{method} includes "range" (and #' \code{NULL} otherwise)} \item{numComp}{the number of principal components #' required of capture the specified amount of variance} \item{ica}{contains #' values for the \code{W} and \code{K} matrix of the decomposition} #' \item{median}{a vector of medians (if median imputation was requested)} #' #' \code{predict.preProcess} will produce a data frame. #' @author Max Kuhn, median imputation by Zachary Mayer #' @seealso \code{\link{BoxCoxTrans}}, \code{\link{expoTrans}} #' \code{\link[MASS]{boxcox}}, \code{\link[stats]{prcomp}}, #' \code{\link[fastICA]{fastICA}}, \code{\link{spatialSign}} #' @references \url{http://topepo.github.io/caret/pre-processing.html} #' #' Kuhn and Johnson (2013), Applied Predictive Modeling, Springer, New York #' (chapter 4) #' #' Kuhn (2008), Building predictive models in R using the caret #' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}) #' #' Box, G. E. P. and Cox, D. R. (1964) An analysis of transformations (with #' discussion). Journal of the Royal Statistical Society B, 26, 211-252. #' #' Box, G. E. P. and Tidwell, P. W. (1962) Transformation of the independent #' variables. Technometrics 4, 531-550. #' #' Manly, B. L. (1976) Exponential data transformations. The Statistician, 25, #' 37 - 42. #' #' Yeo, I-K. and Johnson, R. (2000). A new family of power transformations to #' improve normality or symmetry. Biometrika, 87, 954-959. #' @keywords utilities #' @examples #' #' data(BloodBrain) #' # one variable has one unique value #' \dontrun{ #' preProc <- preProcess(bbbDescr) #' #' preProc <- preProcess(bbbDescr[1:100,-3]) #' training <- predict(preProc, bbbDescr[1:100,-3]) #' test <- predict(preProc, bbbDescr[101:208,-3]) #' } #' #' @export preProcess preProcess <- function(x, ...) UseMethod("preProcess") #' @rdname preProcess #' @importFrom stats complete.cases median sd prcomp #' @export preProcess.default <- function(x, method = c("center", "scale"), thresh = 0.95, pcaComp = NULL, na.remove = TRUE, k = 5, knnSummary = mean, outcome = NULL, fudge = .2, numUnique = 3, verbose = FALSE, freqCut = 95/5, uniqueCut = 10, cutoff = 0.9, rangeBounds = c(0, 1), ...) { if(!inherits(x, "matrix") & !inherits(x, "data.frame")) stop("Matrices or data frames are required for preprocessing", call. = FALSE) column_types <- get_types(x) tmp <- pre_process_options(method, column_types) method <- tmp$opts wildcards <- tmp$wildcards ## the row.norm option in fastICA states: "logical value indicating whether rows ## of the data matrix X should be standardized beforehand." Basically, this means that ## we would center *and* scale before the ICA step, so let's adjust the "scale" method too if(any(names(method) == "ica")) { theDots <- list(...) row.norm <- if(is.null(list(...)$row.norm)) FALSE else list(...)$row.norm } ## check for zero-variance predictors if(any(names(method) == "zv")){ if(is.data.frame(x)) { is_zv <- unlist(lapply(x[, !(colnames(x) %in% method$ignore), drop = FALSE], function(x) length(unique(x)) <= 1)) } else { is_zv <- apply(x[, !(colnames(x) %in% method$ignore), drop = FALSE], 2, function(x) length(unique(x)) <= 1) } if(any(is_zv)) { removed <- names(is_zv)[is_zv] method <- lapply(method, function(x, vars) x[!(x %in% vars)], vars = removed) method$remove <- unique(c(method$remove, removed)) if(verbose) cat(paste(" ", length(removed), "zero variance predictors were removed.\n")) } method$zv <- NULL } ## check for near-zero-variance predictors if(any(names(method) == "nzv")){ is_nzv <- nearZeroVar(x[, !(colnames(x) %in% method$ignore), drop = FALSE], freqCut = freqCut, uniqueCut = uniqueCut) if(length(is_nzv) > 0) { removed <- colnames(x[, !(colnames(x) %in% method$ignore), drop = FALSE])[is_nzv] method <- lapply(method, function(x, vars) x[!(x %in% vars)], vars = removed) method$remove <- unique(c(method$remove, removed)) if(verbose) cat(paste(" ", length(removed), "near-zero variance predictors were removed.\n")) } method$nzv <- NULL } ## check the distribution of the columns of x conditioned on the levels of y and ## identifies columns of x that are sparse within groups of y if(any(names(method) == "conditionalX") & is.factor(outcome)){ bad_pred <- checkConditionalX(x = x[, !(colnames(x) %in% method$ignore), drop = FALSE], y = outcome) if(length(bad_pred) > 0) { removed <- colnames(x[, !(colnames(x) %in% method$ignore), drop = FALSE])[bad_pred] method <- lapply(method, function(x, vars) x[!(x %in% vars)], vars = removed) method$remove <- unique(c(method$remove, removed)) if(verbose) cat(paste(" ", length(removed), "conditionally zero variance predictors.\n")) } method$conditionalX <- NULL } ## check for highly correlated predictors if(any(names(method) == "corr")){ cmat <- try(cor(x[, !(colnames(x) %in% method$ignore), drop = FALSE], use = "pairwise.complete.obs"), silent = TRUE) if(class(cmat)[1] != "try-error") { high_corr <- findCorrelation(cmat, cutoff = cutoff) if(length(high_corr) > 0) { removed <- colnames(cmat)[high_corr] method$remove <- unique(c(method$remove, removed)) if(verbose) cat(paste(" ", length(removed), "highly correlated predictors were removed.\n")) } else warning(paste("correlation matrix could not be computed:\n", cmat)) } method$corr <- NULL } x <- x[, !(colnames(x) %in% method$remove), drop = FALSE] method = sapply(names(method), function(u) if(u != 'remove'){ method[[u]][ which(( method[[u]] %in% colnames(x)))] } else { method[[u]] }, simplify = FALSE ) if(any(names(method) == "invHyperbolicSine")) { if(verbose) cat(" applying invHyperbolicSine\n") for(i in method$invHyperbolicSine) x[,i] <- invHyperbolicSineFunc(x[,i]) } if(any(names(method) == "BoxCox")) { bc <- group_bc(x[, method$BoxCox, drop = FALSE], fudge = fudge, na.remove = na.remove, numUnique = numUnique, verbose = verbose) if(verbose) cat(" applying them to training data\n") if(length(bc) != length(method$BoxCox)) { method$BoxCox <- if(length(bc) == 0) NULL else names(bc) } for(i in method$BoxCox) x[,i] <- predict(bc[[i]], x[,i]) } else bc <- NULL if(any(names(method) == "YeoJohnson")) { yj <- vapply( x[, method$YeoJohnson, drop = FALSE], recipes::estimate_yj, c(lambda = 0), limits = c(-3, 3), ## consistent with `car` defaults nunique = numUnique ) yj <- yj[!is.null(yj) & !is.na(yj)] if(length(yj) > 0) { if(verbose) cat(" applying them to training data\n") if(length(yj) != length(method$YeoJohnson)) { method$YeoJohnson <- names(yj) } # now apply to current data if(length(yj) > 0) { for(i in seq(along = yj)) { who <- names(yj)[i] x[,who] <- recipes::yj_trans(x[,who], yj[who]) } } } else { if(verbose) cat(" all of the transformations failed\n") yj <- NULL } } else yj <- NULL if(any(names(method) == "expoTrans")) { if(verbose) cat("Estimating exponential transformations for", length(method$expoTrans), "predictors...") if(is.data.frame(x)) { et <- lapply(x[, method$expoTrans, drop = FALSE], expoTrans.default, numUnique = numUnique) } else { et <- apply(x[, method$expoTrans, drop = FALSE], 2, expoTrans.default, numUnique = numUnique) } if(verbose) cat(" applying them to training data\n") omit_expo <- NULL for(i in names(et)) { tmp_trans <- predict(et[[i]], x[,i]) if(any(is.infinite(tmp_trans))) { omit_expo <- c(omit_expo, i) } else x[,i] <- tmp_trans } if(length(omit_expo) > 0) { warning(paste("Expo. transform induced infinite values", "in several predictors and is ommitted:", paste(omit_expo, sep = "", collapse = ", ")), immediate. = TRUE) et <- et[!(names(et) %in% omit_expo)] } } else et <- NULL if(any(names(method) %in% c("center"))) { if(verbose) cat("Calculating", length(method$center), "means for centering\n") centerValue <- apply(x[, method$center, drop = FALSE], 2, mean, na.rm = na.remove) x[, method$center] <- sweep(x[, method$center, drop = FALSE], 2, centerValue, "-") } else centerValue <- NULL if(any(names(method) %in% c("scale"))) { if(verbose) cat("Calculating", length(method$scale), "standard deviations for scaling\n") scaleValue <- apply(x[, method$scale, drop = FALSE], 2, sd, na.rm = na.remove) if(any(is.na(scaleValue))){ wrn <- paste("Std. deviations could not be computed for:", paste(names(scaleValue)[which(is.na(scaleValue))],collapse = ", ")) warning(wrn, immediate. = TRUE) scaleValue[which(is.na(scaleValue))] <- 1 } if(any(scaleValue == 0)){ wrn <- paste("These variables have zero variances:", paste(names(scaleValue)[which(scaleValue == 0)], collapse = ", ")) warning(wrn, immediate. = TRUE) scaleValue[which(scaleValue == 0)] <- 1 } x[, method$scale] <- sweep(x[, method$scale, drop = FALSE], 2, scaleValue, "/") } else scaleValue <- NULL if(any(names(method) == "range")) { if(verbose) cat("Calculating", length(method$range), "statistcs for scaling to a range\n") ## check rangeBounds consistency if(!is.numeric(rangeBounds) || length(rangeBounds) != 2) stop("'rangeBounds' should be a two-element numeric vector") if(rangeBounds[1] >= rangeBounds[2]) stop("'rangeBounds' interval is empty") ranges <- apply(x[, method$range, drop = FALSE], 2, function(x) c(min(x, na.rm = na.remove), max(x, na.rm = na.remove))) ## check for zero variance is_same <- apply(ranges, 2, function(x) x[1] == x[2]) if(any(is_same)) { wrn <- paste("No variation for for:",paste(names(is_same)[is_same],collapse = ", ")) warning(wrn,immediate. = TRUE) ranges <- ranges[, !is_same, drop = FALSE] method$range <- method$range[!(method$range %in% names(is_same)[is_same])] } x[, method$range] <- sweep(x[, method$range, drop = FALSE], 2, ranges[1,], "-") x[, method$range] <- sweep(x[, method$range, drop = FALSE], 2, (ranges[2,] - ranges[1,]) / (rangeBounds[2] - rangeBounds[1]), "/") x[, method$range] <- sweep(x[, method$range, drop = FALSE], 2, rangeBounds[1], "+") } else ranges <- NULL if(any(names(method) == "bagImpute")){ if(verbose) cat("Computing bagging models for", length(method$bagImpute), "predictors...") bagModels <- as.list(method$bagImpute) names(bagModels) <- method$bagImpute bagModels <- lapply(bagModels, bagImp, x = x) if(verbose) cat(" done\n") } else bagModels <- NULL if (any(names(method) == "medianImpute")) { if(verbose) cat("Computing medians for", length(method$medianImpute), "predictors...") medianValue <- apply(x[, method$medianImpute, drop = FALSE], 2, median, na.rm=TRUE) if (any(is.na(medianValue))) { warning( paste( "These variables are never filled:", paste(names(medianValue)[is.na(medianValue)], collapse = ", ")), immediate. = TRUE) medianValue[is.na(medianValue)] <- 0 } if(verbose) cat(" done\n") } else medianValue <- NULL ## TODO This should be moved inside of pca or ica code ## and done after centering and scaling x <- x[complete.cases(x),,drop = FALSE] if(any(names(method) == "pca")) { if(verbose) cat("Computing PCA loadings for", length(method$pca), "predictors\n") tmp <- prcomp(x[, method$pca, drop = FALSE], scale = TRUE, retx = FALSE) if(is.null(pcaComp)) { cumVar <- cumsum(tmp$sdev^2/sum(tmp$sdev^2)) numComp <- max(2, which.max(cumVar > thresh)) } else numComp <- min(pcaComp, ncol(tmp$rotation)) rot <- tmp$rotation[,1:numComp] } else { rot <- NULL numComp <- NULL } if(any(names(method) == "ica")) { ## TODO What if range is used? if(verbose) cat("Computing ICA loadings for", length(method$ica), "predictors\n") requireNamespaceQuietStop("fastICA") tmp <- fastICA::fastICA(x[, method$ica, drop = FALSE], ...) ica <- list(row.norm = row.norm, K = tmp$K, W = tmp$W) } else { ica <- NULL } out <- list(dim = c(nrow(x), length(unique(unlist(method)))), bc = bc, yj = yj, et = et, invHyperbolicSine = method$invHyperbolicSine, mean = centerValue, std = scaleValue, ranges = ranges, rotation = rot, method = method, thresh = thresh, pcaComp = pcaComp, numComp = numComp, ica = ica, wildcards = wildcards, k = k, knnSummary = knnSummary, bagImp = bagModels, median = medianValue, data = if(any(names(method) == "knnImpute")) x[complete.cases(x),method$knnImpute,drop = FALSE] else NULL, rangeBounds = rangeBounds) out <- structure(out, class = "preProcess") out } #' @rdname preProcess #' @importFrom stats complete.cases #' @export predict.preProcess <- function(object, newdata, ...) { if(is.vector(object$method) & !is.list(object$method)) object <- convert_method(object) dataNames <- colnames(newdata) oldClass <- class(newdata) if(!is.null(object$method$remove)) { if(length(object$method$remove) > 0) newdata <- newdata[, !(colnames(newdata) %in% object$method$remove), drop = FALSE] if(ncol(newdata) == 0) stop("All predctors were removed as determined by `preProcess`") } if(!is.null(object$invHyperbolicSine)) { for(i in object$invHyperbolicSine) { newdata[,i] <- invHyperbolicSineFunc(newdata[,i]) } } if(!is.null(object$bc)) { lam <- unlist(lapply(object$bc, function(x) x$lambda)) lamIndex <- which(!is.na(lam)) if(length(lamIndex) > 0) { for(i in names(lamIndex)) { tt <- newdata[,i] tt <- tt[!is.na(tt)] newdata[,i] <- predict(object$bc[[i]], newdata[,i]) } } } if(!is.null(object$yj)) { lam <- get_yj_lambda(object$yj) lam <- lam[!is.na(lam)] if(length(lam) > 0) { for(i in seq(along = lam)) { who <- names(lam)[i] newdata[,who] <- recipes::yj_trans(newdata[,who], lam[who]) } } } if(!is.null(object$et)) { for(i in seq(along = object$et)) { who <- names(object$et)[i] newdata[,who] <- predict(object$et[[who]], newdata[,who]) } } if(any(names(object$method) == "range")) { rangeBounds <- getRangeBounds(object) newdata[, object$method$range] <- sweep(newdata[, object$method$range, drop = FALSE], 2, object$ranges[1,], "-") newdata[, object$method$range] <- sweep(newdata[, object$method$range, drop = FALSE], 2, (object$ranges[2,] - object$ranges[1,]) / (rangeBounds$upper - rangeBounds$lower), "/") newdata[, object$method$range] <- sweep(newdata[, object$method$range, drop = FALSE], 2, rangeBounds$lower, "+") } if(any(names(object$method) == "center")) newdata[, object$method$center] <- sweep(newdata[, object$method$center, drop = FALSE], 2, object$mean, "-") if(any(names(object$method) %in% c("scale"))) newdata[, object$method$scale] <- sweep(newdata[, object$method$scale, drop = FALSE], 2, object$std, "/") cc <- complete.cases(newdata) if(any(names(object$method) == "knnImpute") && any(!cc)) { hasMiss <- newdata[!cc,object$method$knnImpute,drop = FALSE] miss_names <- colnames(hasMiss) hasMiss <- apply(hasMiss, 1, nnimp, ## todo: should prob us all vars in the next line old = object$data[, object$method$knnImpute, drop = FALSE], k = object$k, foo = object$knnSummary) hasMiss <- t(hasMiss) colnames(hasMiss) <- miss_names if(class(newdata)[1] == class(hasMiss)[1]) { newdata[!cc, object$method$knnImpute] <- hasMiss } else { if(is.data.frame(newdata)) { newdata[!cc, object$method$knnImpute] <- as.data.frame(hasMiss) } else newdata[!cc, object$method$knnImpute] <- as.matrix(hasMiss) } } if(any(names(object$method) == "bagImpute") && any(!cc)) { requireNamespaceQuietStop("ipred") hasMiss <- newdata[!cc,,drop = FALSE] missingVars <- apply(hasMiss, 2, function(x) any(is.na(x))) missingVars <- names(missingVars)[missingVars] ## ipred's bagging procedure only allows for data frames if(!is.data.frame(hasMiss)) hasMiss <- as.data.frame(hasMiss) for(i in seq(along = missingVars)) { preds <- predict(object$bagImp[[missingVars[i]]]$model, hasMiss[, !colnames(hasMiss) %in% missingVars[i], drop = FALSE]) hasMiss[is.na(hasMiss[,missingVars[i]]), missingVars[i]] <- preds[is.na(hasMiss[,missingVars[i]])] } if(class(newdata)[1] == class(hasMiss)[1]) { newdata[!cc,] <- hasMiss } else { if(is.data.frame(newdata)) { newdata[!cc,] <- as.data.frame(hasMiss) } else newdata[!cc,] <- as.matrix(hasMiss) } } if (any(names(object$method) == "medianImpute") && any(!cc)) { missingVars <- apply(newdata, 2, function(x) any(is.na(x))) missingVars <- if(is.null(names(missingVars))) which(missingVars) else names(missingVars)[missingVars] for (v in missingVars) { newdata[is.na(newdata[, v]), v] <- object$median[v] } } if(any(names(object$method) == "pca")) { pca_cols <- newdata[, object$method$pca, drop = FALSE] pca_cols <-if(is.matrix(pca_cols)) pca_cols %*% object$rotation else as.matrix(pca_cols) %*% object$rotation if(is.data.frame(newdata)) pca_cols <- as.data.frame(pca_cols) newdata <- cbind(newdata, pca_cols) ## normally we get rid of columns that we used to create ## the PC's unless we still need them or want them discard <- object$method$pca if(is.null(object$method$keep)) { ## after PCA/ICA comes SS so keep any of those discard <- discard[!(discard %in% object$method$spatialSign)] } else { discard <- discard[!(discard %in% object$method$keep)] } if(length(discard) > 0) newdata <- newdata[, !(colnames(newdata) %in% discard), drop = FALSE] } if(any(names(object$method) == "ica")) { ica_cols <- newdata[, object$method$ica, drop = FALSE] if(!is.matrix(ica_cols)) ica_cols <- as.matrix(ica_cols) ##if(object$ica$row.norm) newdata <- apply(newdata, 1, function(u) u/sd(u)) ica_cols <- ica_cols %*% object$ica$K %*% object$ica$W colnames(ica_cols) <- paste("ICA", 1:ncol(object$ica$W), sep = "") if(is.data.frame(newdata)) ica_cols <- as.data.frame(ica_cols) newdata <- cbind(newdata, ica_cols) ## Same as PCA above discard <- object$method$ica if(is.null(object$method$keep)) { ## after PCA/ICA comes SS so keep any of those discard <- discard[!(discard %in% object$method$spatialSign)] } else { discard <- discard[!(discard %in% object$method$keep)] } if(length(discard) > 0) newdata <- newdata[, !(colnames(newdata) %in% discard), drop = FALSE] } wc <- object$wildcards if(any(names(object$method) == "spatialSign") | any(wc$PCA == "spatialSign") | any(wc$ICA == "spatialSign")){ ss_col_names <- object$method$spatialSign ## adjust for PCA/ICA column wildcards if(length(wc$PCA) > 0 && any(wc$PCA == "spatialSign")) ss_col_names <- c(ss_col_names, colnames(pca_cols)) if(length(wc$ICA) > 0 && any(wc$ICA == "spatialSign")) ss_col_names <- c(ss_col_names, colnames(ica_cols)) newdata[, ss_col_names] <- spatialSign(newdata[, ss_col_names, drop = FALSE]) } newdata } #' @export print.preProcess <- function(x, ...) { # printCall(x$call) cat("Created from", x$dim[1], "samples and", x$dim[2], "variables\n\n") pp_num <- unlist(lapply(x$method, length)) if(any(unlist(x$wildcards) == "spatialSign")) { if(any(x$wildcards$PCA == "spatialSign")) pp_num["spatialSign"] <- pp_num["spatialSign"] + x$pcaComp if(any(x$wildcards$ICA == "spatialSign")) pp_num["spatialSign"] <- pp_num["spatialSign"] + x$numComp } pp <- paste0(" - ", names(x$method), " (", pp_num, ")\n") pp <- pp[order(pp)] pp <- gsub("invHyperbolicSine", "Inverve Hyperbolic Sine transformation", pp) pp <- gsub("BoxCox", "Box-Cox transformation", pp) pp <- gsub("YeoJohnson", "Yeo-Johnson transformation", pp) pp <- gsub("expoTrans", "exponential transformation", pp) pp <- gsub("scale", "scaled", pp) pp <- gsub("center", "centered", pp) pp <- gsub("pca", "principal component signal extraction", pp) pp <- gsub("ica", "independent component signal extraction", pp) pp <- gsub("spatialSign", "spatial sign transformation", pp) pp <- gsub("knnImpute", paste(x$k, "nearest neighbor imputation"), pp) pp <- gsub("bagImpute", "bagged tree imputation", pp) pp <- gsub("medianImpute", "median imputation", pp) rangeBounds <- getRangeBounds(x) pp <- gsub("range", paste0("re-scaling to [", rangeBounds$lower, ", ", rangeBounds$upper, "]"), pp) pp <- gsub("remove", "removed", pp) pp <- gsub("ignore", "ignored", pp) cat("Pre-processing:\n") cat(pp, sep = "") cat("\n") if(any(names(x$method) == "BoxCox")) { cat("Lambda estimates for Box-Cox transformation:\n") if(length(x$bc) < 11) { lmbda <- unlist(lapply(x$bc, function(x) x$lambda)) naLmbda <- sum(is.na(lmbda)) cat(paste(round(lmbda[!is.na(lmbda)], 2), collapse = ", ")) if(naLmbda > 0) cat(" (#NA: ", naLmbda, ")\n", sep = "") } else print(summary(unlist(lapply(x$bc, function(x) x$lambda)))) cat("\n") } if(any(names(x$method) == "YeoJohnson")) { cat("Lambda estimates for Yeo-Johnson transformation:\n") lmbda <- get_yj_lambda(x$yj) if(length(lmbda) < 11) { naLmbda <- sum(is.na(lmbda)) cat(paste(round(lmbda[!is.na(lmbda)], 2), collapse = ", ")) if(naLmbda > 0) cat(" (#NA: ", naLmbda, ")\n", sep = "") } else print(summary(lmbda)) cat("\n") } if(any(names(x$method) == "pca")) { if(is.null(x$pcaComp)) { cat("PCA needed", x$numComp, ifelse(x$numComp > 1, "components", "component"), "to capture", round(x$thresh*100, 2), "percent of the variance") } else { cat("PCA used", x$pcaComp, ifelse(x$pcaComp > 1, "components", "component"), "as specified") } if(length(x$wildcards$PCA) > 0) cat(" and will be used in the spatial sign transformation") cat("\n") } if(any(names(x$method) == "ica")) { cat("ICA used", ncol(x$ica$W), "components") if(length(x$wildcards$ICA) > 0) cat(" and will be used in the spatial sign transformation") cat("\n") } } nnimp <- function(new, old, k, foo) { requireNamespaceQuietStop("RANN") if(all(is.na(new))) stop("cannot impute when all predictors are missing in the new data point") nms <- names(new) cols2 <- which(!is.na(new)) new <- matrix(new, ncol = length(new)) colnames(new) <- nms non_missing_cols <- cols2 nn <- RANN::nn2(old[, non_missing_cols, drop = FALSE], new[, non_missing_cols, drop = FALSE], k = k) tmp <- old[nn$nn.idx, -non_missing_cols, drop = FALSE] subs <- apply(tmp, 2, foo, na.rm = TRUE) new[, -non_missing_cols] <- subs new } #' @importFrom stats as.formula bagImp <- function(var, x, B = 10) { requireNamespaceQuietStop("ipred") ## The formula interface is much slower than the ## (y, X) interface, but the latter would have to ## do case-wise deletion of samples from the ## training set. if(!is.data.frame(x)) x <- as.data.frame(x) mod <- ipred::bagging(as.formula(paste(var, "~.")), data = x, nbagg = B, x = FALSE, keepX = FALSE) trim_code <- getModelInfo("treebag", FALSE)[[1]]$trim list(var = var, model = trim_code(mod)) } ## Add checks for zv and nzv and overlap ## allow categorical variables in zv, nzv, and bagImpute pre_process_options <- function(opts, vars) { orig_vars <- vars vars <- vars %in% c("integer", "numeric", "double") names(vars) <- names(orig_vars) ## convert simple vectors to list mode: if(is.vector(opts) & !is.list(opts)) { op_list <- vector(mode = "list", length = length(opts)) names(op_list) <- opts op_list <- lapply(op_list, function(x, y) { x <- y x }, y = names(vars)) opts <- op_list } ## check names of options if(!all(names(opts) %in% ppMethods)) { others <- names(opts)[!(names(opts) %in% ppMethods)] stop((paste("These pre-processing methods are unknown:", paste("'", others, "'", sep = "", collapse = ", ")))) } methods <- names(opts) ## find and store any PCA/ICA wildcards tmp <- check_for_wildcards(opts, verbose = FALSE) opts <- tmp$opts wildcards <- tmp$wildcards ## check that each predictor is in the data all_op_vars <- unique(unlist(opts)) if(!all(all_op_vars %in% names(vars))) { others <- all_op_vars[!(all_op_vars %in% names(vars))] stop((paste("These fields are not in the data:", paste("'", others, "'", sep = "", collapse = ", ")))) } ## get fancy and look for dummy variables and write sensible note? ## check to make sure calcs are on numbers num_vars <- names(vars)[vars] not_num <- NULL for(i in ppMethods) { if(i %in% methods) { is_num <- opts[[i]] %in% num_vars if(any(!is_num)){ not_num <- c(not_num, opts[[i]][!is_num]) opts[[i]] <- opts[[i]][is_num] } } } not_num <- unique(not_num) if(length(not_num) > 0) { opts$ignore <- unique(c(opts$ignore, not_num)) } ## check for group trans on single predictors if("pca" %in% methods && length(opts[["pca"]]) == 1){ warning(paste("PCA is a group transformation and only a single predictor", "is listed. This method is eliminated."), immediate. = TRUE) opts[["pca"]] <- NULL } if("ica" %in% methods && length(opts[["ica"]]) == 1){ warning(paste("ICA is a group transformation and only a single predictor", "is listed. This method is eliminated."), immediate. = TRUE) opts[["ica"]] <- NULL } if(all(unlist(wildcards) != "spatialSign") & "spatialSign" %in% methods & length(opts[["spatialSign"]]) == 1 ){ warning(paste("Spatial sign is a group transformation and only a single predictor", "is listed. This method is eliminated."), immediate. = TRUE) opts[["spatialSign"]] <- NULL } methods <- names(opts) ## check for inconsistent options for each predictor if(all(c("pca", "ica") %in% methods)){ pca_and_ica <- intersect(opts$pca, opts$ica) if(length(pca_and_ica) > 0) { warning(paste("fastICA automatically uncorrelates the data using PCA.", "method = 'pca' is not needed for fields:", paste("'", pca_and_ica, "'", sep = "", collapse = ", ")), immediate. = TRUE) opts[["pca"]] <- opts[["pca"]][!(opts[["pca"]] %in% pca_and_ica)] } } if(sum(c("knnImpute","bagImpute", "medianImpute") %in% methods) > 1) { imp_table <- table(unlist(opts[c("knnImpute","bagImpute", "medianImpute")])) if(any(imp_table > 1)) { dup_imps <- names(imp_table)[imp_table > 1] stop((paste("Please pick a single imputation method for:", paste("'", dup_imps, "'", sep = "", collapse = ", ")))) } } if(any(methods %in% "range") & any(methods %in% c("center", "scale", "BoxCox"))) stop("Centering, scaling and/or Box-Cox transformations are inconsistent with scaling to a range") ## coerce certain options based on others if("pca" %in% methods) { if("range" %in% methods) { opts[["range"]] <- c(opts[["range"]], opts[["pca"]]) opts[["range"]] <- c(opts[["range"]], opts[["pca"]]) } else { opts[["center"]] <- c(opts[["center"]], opts[["pca"]]) opts[["scale"]] <- c(opts[["scale"]], opts[["pca"]]) } } if("ica" %in% methods) { if("range" %in% methods) { opts[["range"]] <- c(opts[["range"]], opts[["ica"]]) opts[["range"]] <- c(opts[["range"]], opts[["ica"]]) } else { opts[["center"]] <- c(opts[["center"]], opts[["ica"]]) opts[["scale"]] <- c(opts[["scale"]], opts[["ica"]]) } } if("spatialSign" %in% methods) { if("range" %in% methods) { opts[["range"]] <- c(opts[["range"]], opts[["spatialSign"]]) opts[["range"]] <- c(opts[["range"]], opts[["spatialSign"]]) } else { opts[["center"]] <- c(opts[["center"]], opts[["spatialSign"]]) opts[["scale"]] <- c(opts[["scale"]], opts[["spatialSign"]]) } } if("knnImpute" %in% methods) { if("range" %in% methods) { opts[["range"]] <- num_vars } else { opts[["center"]] <- num_vars opts[["scale"]] <- num_vars } } opts <- lapply(opts, unique) ## check length of options and remove zero lengths opt_len <- unlist(lapply(opts, length)) if(opt_len["spatialSign"] == 0 & any(unlist(wildcards) == "spatialSign")) opt_len["spatialSign"] <- 1 if(any(opt_len < 1)) { warning(paste("The following pre-processing methods were eliminated:", paste("'", names(opts)[opt_len < 1], "'", sep = "", collapse = ", ")), immediate. = TRUE) opts <- opts[opt_len > 0] } ## add to 'ignore' not_num_vars <- names(vars)[!vars] if("ignore" %in% names(opts)) opts$ignore <- unique(c(not_num_vars, opts$ignore)) else opts$ignore <- not_num_vars ## TODO make sure that, if a var is in 'ignore' that it is nowhere else (and remove?) list(opts = opts, wildcards = wildcards) } get_types <- function(x, coarse = TRUE) { if(is.null(colnames(x))) stop("`x` must have column names") if(is.matrix(x)) { out <- rep(class(x[1,1]), ncol(x)) } else { if(is.data.frame(x)) { out <- unlist(lapply(x, function(x) class(x)[1])) } } if(coarse) { num_classes <- c("integer", "numeric", "double") str_classes <- c("factor", "character") out <- ifelse(out %in% num_classes, "numeric", out) out <- ifelse(out %in% str_classes, "string", out) out <- ifelse(out %in% c("numeric", "string"), out, "other") } names(out) <- colnames(x) out } check_for_wildcards <- function(opts, verbose = TRUE){ other_methods <- ppMethods[!(ppMethods %in% "spatialSign")] pc_wc <- unlist(lapply(opts, function(x) any(x == "_PC_"))) if(any(pc_wc)) { pc_wc <- names(pc_wc)[pc_wc] if(verbose) cat("PCA wildcards found for:", paste(pc_wc, sep = "", collapse = ", ")) if(any(pc_wc %in% other_methods)) { bad_ops <- pc_wc[pc_wc %in% other_methods] if(verbose) cat(" ...but should not be in methods:", paste(bad_ops, sep = "", collapse = ", ")) for(i in bad_ops) opts[[i]] <- opts[[i]][opts[[i]] != "_PC_"] } if(verbose) cat("\n") } ic_wc <- unlist(lapply(opts, function(x) any(x == "_IC_"))) if(any(ic_wc)) { ic_wc <- names(ic_wc)[ic_wc] if(verbose) cat("ICA wildcards found for:", paste(ic_wc, sep = "", collapse = ", "), "\n") if(any(ic_wc %in% other_methods)) { bad_ops <- ic_wc[ic_wc %in% other_methods] if(verbose) cat(" ...but should not be in methods:", paste(bad_ops, sep = "", collapse = ", ")) for(i in bad_ops) opts[[i]] <- opts[[i]][opts[[i]] != "_IC_"] } if(verbose) cat("\n") } pc_wc <- unlist(lapply(opts, function(x) any(x == "_PC_"))) ic_wc <- unlist(lapply(opts, function(x) any(x == "_IC_"))) wc_list <- list(PCA = names(pc_wc)[pc_wc], ICA = names(ic_wc)[ic_wc]) opts <- lapply(opts, function(x) x[!(x %in% c("_PC_", "_IC_"))]) list(opts = opts, wildcards = wc_list) } group_bc <- function(x, outcome = NULL, fudge, na.remove, numUnique, verbose) { if(verbose) cat("Estimating Box-Cox transformations for", ncol(x), "predictors...\n") if(is.matrix(x)) { bc <- apply(x, 2, BoxCoxTrans, fudge = fudge, na.rm = na.remove, numUnique = numUnique) } else { bc <- lapply(x, BoxCoxTrans, fudge = fudge, na.rm = na.remove, numUnique = numUnique) } lambdas <- unlist(lapply(bc, function(x) x$lambda)) if(any(is.na(lambdas))) { bad_lambda <- lambdas[is.na(lambdas)] bad_lambda <- names(bad_lambda) if(verbose) cat("Box-Cox failed for:", paste(bad_lambda, sep = "", collapse = ", ")) bc <- bc[!(names(bc) %in% bad_lambda)] } bc[!is.null(bc) & !is.na(bc)] } convert_method <- function(x) { new_method <- list() if("center" %in% x$method) new_method$center <- names(x$mean) if("scale" %in% x$method) new_method$scale <- names(x$std) if("YeoJohnson" %in% x$method) new_method$YeoJohnson <- names(x$yj) if("expoTrans" %in% x$method) new_method$expoTrans <- names(x$et) if("BoxCox" %in% x$method) new_method$BoxCox <- names(x$bc) if("knnImpute" %in% x$method) new_method$knnImpute <- names(x$mean) if("bagImpute" %in% x$method) new_method$bagImpute <- names(x$bagImp) if("medianImpute" %in% x$method) new_method$medianImpute <- names(x$median) if("pca" %in% x$method) new_method$pca <- names(x$mean) if("ica" %in% x$method) new_method$ica <- names(x$mean) if("spatialSign" %in% x$method) new_method$spatialSign <- names(x$mean) if("invHyperbolicSine" %in% x$method) new_method$invHyperbolicSine <- x$method$invHyperbolicSine x$method <- new_method x } ## code for using car method; extract lambdas either way and use ## new code for predictions. Same for predict method get_yj_lambda <- function(x) { if(inherits(x[[1]], "powerTransform")) { # backwards compat with old caret objecgts that used `car` res <- unlist(lapply(x, function(x) x$lambda)) names(res) <- gsub("\\.Y1$", "", names(res)) } else { res <- x } res[!is.na(res)] } caret/R/extractProb.R0000644000176200001440000001203613153613153014174 0ustar liggesusers ## TODO use foreach to parallelize #' @rdname predict.train #' @importFrom utils flush.console #' @export extractProb <- function(models, testX = NULL, testY = NULL, unkX = NULL, unkOnly = !is.null(unkX) & is.null(testX), verbose = FALSE) { objectNames <- names(models) if(is.null(objectNames)) objectNames <- paste("Object", 1:length(models), sep = "") if(any(unlist(lapply(models, function(x) is.null(x$modelInfo$prob))))) stop("only classification models that produce probabilities are allowed") obsLevels <- levels(models[[1]]) if(!unkOnly) { trainX <- models[[1]]$trainingData[,!(colnames(models[[1]]$trainingData) %in% ".outcome")] trainY <- models[[1]]$trainingData$.outcome } if(verbose) { cat("Number of training samples:", length(trainY), "\n") cat("Number of test samples: ", length(testY), "\n\n") } predProb <- predClass <- obs <- modelName <- dataType <- objName <- NULL if(!is.null(testX)) { if(!is.data.frame(testX)) testX <- as.data.frame(testX) hasNa <- apply(testX, 1, function(data) any(is.na(data))) if(verbose) cat("There were ", sum(hasNa), "rows with missing values\n\n"); flush.console() } for(i in seq(along = models)) { if(verbose) cat("starting ", models[[i]]$method, "\n"); flush.console() if(!unkOnly) { tempTrainProb <- probFunction(models[[i]]$modelInfo, models[[i]]$finalModel, trainX, models[[i]]$preProcess) tempTrainPred <- apply(tempTrainProb, 1, which.max) tempTrainPred <- colnames(tempTrainProb)[tempTrainPred] tempTrainPred <- factor(tempTrainPred, levels = obsLevels) if(verbose) cat(models[[i]]$method, ":", length(tempTrainPred), "training predictions were added\n"); flush.console() predProb <- if(is.null(predProb)) tempTrainProb else rbind(predProb, tempTrainProb) predClass <- c(predClass, as.character(tempTrainPred)) obs <- c(obs, as.character(trainY)) modelName <- c(modelName, rep(models[[i]]$method, length(tempTrainPred))) objName <- c(objName, rep(objectNames[[i]], length(tempTrainPred))) dataType <- c(dataType, rep("Training", length(tempTrainPred))) # Test Data if(!is.null(testX) & !is.null(testY)) { if(!is.data.frame(testX)) testX <- as.data.frame(testX) tempX <- testX tempY <- testY tempX$.outcome <- NULL tempTestProb <- probFunction(models[[i]]$modelInfo, models[[i]]$finalModel, tempX, models[[i]]$preProcess) tempTestPred <- apply(tempTestProb, 1, which.max) tempTestPred <- colnames(tempTestProb)[tempTestPred] tempTestPred <- factor(tempTestPred, levels = obsLevels) if(verbose) cat(models[[i]]$method, ":", length(tempTestPred), "test predictions were added\n") predProb <- if(is.null(predProb)) tempTestProb else rbind(predProb, tempTestProb) predClass <- c(predClass, as.character(tempTestPred)) obs <- c(obs, as.character(testY)) modelName <- c(modelName, rep(models[[i]]$method, length(tempTestPred))) objName <- c(objName, rep(objectNames[[i]], length(tempTestPred))) dataType <- c(dataType, rep("Test", length(tempTestPred))) } } # Unknown Data if(!is.null(unkX)) { if(!is.data.frame(unkX)) unkX <- as.data.frame(unkX) tempX <- unkX tempX$.outcome <- NULL tempUnkProb <- probFunction(models[[i]]$modelInfo, models[[i]]$finalModel, tempX, models[[i]]$preProcess) tempUnkPred <- apply(tempUnkProb, 1, which.max) tempUnkPred <- colnames(tempUnkProb)[tempUnkPred] tempUnkPred <- factor(tempUnkPred, levels = obsLevels) if(verbose) cat(models[[i]]$method, ":", length(tempUnkPred), "unknown predictions were added\n") predProb <- if(is.null(predProb)) tempUnkProb else rbind(predProb, tempUnkProb) predClass <- c(predClass, as.character(tempUnkPred)) obs <- c(obs, rep(NA, length(tempUnkPred))) modelName <- c(modelName, rep(models[[i]]$method, length(tempUnkPred))) objName <- c(objName, rep(objectNames[[i]], length(tempUnkPred))) dataType <- c(dataType, rep("Unknown", length(tempUnkPred))) } if(verbose) cat("\n") } predClass <- factor(predClass, levels = obsLevels) obs <- factor(obs, levels = obsLevels) out <- data.frame(predProb) out$obs <- obs out$pred <- predClass out$model <- modelName out$dataType <- dataType out$object <- objName out } caret/R/pcaNNet.R0000644000176200001440000001762713153613153013242 0ustar liggesusers# add model averaging? # check predict method with formula interface # how to handle variable imp? #' Neural Networks with a Principal Component Step #' #' Run PCA on a dataset, then use it in a neural network model #' #' The function first will run principal component analysis on the data. The #' cumulative percentage of variance is computed for each principal component. #' The function uses the \code{thresh} argument to determine how many #' components must be retained to capture this amount of variance in the #' predictors. #' #' The principal components are then used in a neural network model. #' #' When predicting samples, the new data are similarly transformed using the #' information from the PCA analysis on the training data and then predicted. #' #' Because the variance of each predictor is used in the PCA analysis, the code #' does a quick check to make sure that each predictor has at least two #' distinct values. If a predictor has one unique value, it is removed prior to #' the analysis. #' #' @aliases pcaNNet pcaNNet.default predict.pcaNNet pcaNNet.formula #' @param formula A formula of the form \code{class ~ x1 + x2 + \dots{}} #' @param x matrix or data frame of \code{x} values for examples. #' @param y matrix or data frame of target values for examples. #' @param weights (case) weights for each example -- if missing defaults to 1. #' @param thresh a threshold for the cumulative proportion of variance to #' capture from the PCA analysis. For example, to retain enough PCA components #' to capture 95 percent of variation, set \code{thresh = .95} #' @param data Data frame from which variables specified in \code{formula} are #' preferentially to be taken. #' @param subset An index vector specifying the cases to be used in the #' training sample. (NOTE: If given, this argument must be named.) #' @param na.action A function to specify the action to be taken if \code{NA}s #' are found. The default action is for the procedure to fail. An alternative #' is na.omit, which leads to rejection of cases with missing values on any #' required variable. (NOTE: If given, this argument must be named.) #' @param contrasts a list of contrasts to be used for some or all of the #' factors appearing as variables in the model formula. #' @param object an object of class \code{pcaNNet} as returned by #' \code{pcaNNet}. #' @param newdata matrix or data frame of test examples. A vector is considered #' to be a row vector comprising a single case. #' @param type Type of output #' @param \dots arguments passed to \code{\link[nnet]{nnet}}, such as #' \code{size}, \code{decay}, etc. #' @return For \code{pcaNNet}, an object of \code{"pcaNNet"} or #' \code{"pcaNNet.formula"}. Items of interest in the output are: \item{pc #' }{the output from \code{\link{preProcess}}} \item{model }{the model #' generated from \code{\link[nnet]{nnet}}} \item{names }{if any predictors had #' only one distinct value, this is a character string of the remaining #' columns. Otherwise a value of \code{NULL}} #' @author These are heavily based on the \code{nnet} code from Brian Ripley. #' @seealso \code{\link[nnet]{nnet}}, \code{\link{preProcess}} #' @references Ripley, B. D. (1996) \emph{Pattern Recognition and Neural #' Networks.} Cambridge. #' @keywords neural #' @examples #' #' data(BloodBrain) #' modelFit <- pcaNNet(bbbDescr[, 1:10], logBBB, size = 5, linout = TRUE, trace = FALSE) #' modelFit #' #' predict(modelFit, bbbDescr[, 1:10]) #' #' @export pcaNNet pcaNNet <- function (x, ...) UseMethod("pcaNNet") # this is a near copy of nnet.formula #' @rdname pcaNNet #' @method pcaNNet formula #' @importFrom stats .getXlevels contrasts model.matrix model.response model.weights #' @export pcaNNet.formula <- function (formula, data, weights, ..., thresh = .99, subset, na.action, contrasts = NULL) { m <- match.call(expand.dots = FALSE) if (is.matrix(eval.parent(m$data))) m$data <- as.data.frame(data) m$... <- m$contrasts <- NULL m[[1]] <- as.name("model.frame") m <- eval.parent(m) Terms <- attr(m, "terms") x <- model.matrix(Terms, m, contrasts) cons <- attr(x, "contrast") xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] w <- model.weights(m) if (length(w) == 0) w <- rep(1, nrow(x)) y <- model.response(m) res <- pcaNNet.default(x, y, weights = w, thresh = thresh, ...) res$terms <- Terms res$coefnames <- colnames(x) res$na.action <- attr(m, "na.action") res$contrasts <- cons res$xlevels <- .getXlevels(Terms, m) class(res) <- c("pcaNNet.formula", "pcaNNet") res } #' @rdname pcaNNet #' @method pcaNNet default #' @export pcaNNet.default <- function(x, y, thresh = .99, ...) { requireNamespaceQuietStop("nnet") # check for no variance data isZV <- apply(x, 2, function(u) length(unique(u)) < 2) if(any(isZV)) { x <- x[,!isZV, drop = FALSE] xNames <- colnames(x) } else xNames <- NULL # get pca pp <- preProcess(x, "pca", thresh = thresh) x <- predict(pp, x) # check for factors if(is.factor(y)) { classLev <- levels(y) y <- class2ind(y) } else classLev <- NULL # fit nnet modelFit <- nnet::nnet(x, y, ...) modelFit$lev <- classLev # return results out <- list(model = modelFit, pc = pp, names = xNames) class(out) <- "pcaNNet" out } #' @rdname pcaNNet #' @method print pcaNNet #' @export print.pcaNNet <- function (x, ...) { cat("Neural Network Model with PCA Pre-Processing\n\n") cat("Created from", x$pc$dim[1], "samples and", x$pc$dim[2], "variables\n") cat("PCA needed", x$pc$numComp, "components to capture", round(x$pc$thresh * 100, 2), "percent of the variance\n\n") print(x$model) cat("\n") invisible(x) } #' @rdname pcaNNet #' @method predict pcaNNet #' @importFrom stats .checkMFClasses delete.response model.frame model.matrix predict na.omit fitted #' @export predict.pcaNNet <- function(object, newdata, type = c("raw", "class", "prob"), ...) { requireNamespaceQuietStop("nnet") if (!inherits(object, "pcaNNet")) stop("object not of class \"pcaNNet\"") if (missing(newdata)) { if(is.null(object$model$lev)) { return(fitted(object$model)) } else { scores <- fitted(object$model) classes <- colnames(scores)[apply(scores, 1, which.max)] classes <- factor(as.character(classes), levels = object$model$lev) if(type[1]== "raw") return(scores) else return(classes) } } else { if (inherits(object, "pcaNNet.formula")) { newdata <- as.data.frame(newdata) rn <- row.names(newdata) Terms <- delete.response(object$terms) m <- model.frame(Terms, newdata, na.action = na.omit, xlev = object$xlevels) if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) keep <- match(row.names(m), rn) x <- model.matrix(Terms, m, contrasts = object$contrasts) xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] } else { if (is.null(dim(newdata))) dim(newdata) <- c(1, length(newdata)) x <- as.matrix(newdata) if (any(is.na(x))) stop("missing values in 'x'") keep <- 1:nrow(x) rn <- rownames(x) } } if(!is.null(object$names)) x <- x[, object$names, drop = FALSE] x <- predict(object$pc, x) if(type[1] %in% c("raw", "class")) { out <- predict(object$model, x, type = type[1], ...) } else { out <- predict(object$model, x, type = "raw", ...) out <- t(apply(out, 1, function(x) x/sum(x))) } out } caret/R/classDist.R0000644000176200001440000001406513153613153013634 0ustar liggesusers#' Compute and predict the distances to class centroids #' #' @aliases classDist.default classDist predict.classDist #' @description This function computes the class centroids and covariance matrix for a training set for determining Mahalanobis distances of samples to each class centroid. #' #' #' @param x a matrix or data frame of predictor variables #' @param y a numeric or factor vector of class labels #' @param groups an integer for the number of bins for splitting a numeric outcome #' @param pca a logical: should principal components analysis be applied to the dataset prior to splitting the data by class? #' @param keep an integer for the number of PCA components that should by used to predict new samples (\code{NULL} uses all within a tolerance of \code{sqrt(.Machine$double.eps)}) #' @param object an object of class \code{classDist} #' @param newdata a matrix or data frame. If \code{vars} was previously specified, these columns should be in \code{newdata} #' @param trans an optional function that can be applied to each class distance. \code{trans = NULL} will not apply a function #' @param \dots optional arguments to pass (not currently used) #' #' @details #' For factor outcomes, the data are split into groups for each class #' and the mean and covariance matrix are calculated. These are then #' used to compute Mahalanobis distances to the class centers (using #' \code{predict.classDist} The function will check for non-singular matrices. #' #' For numeric outcomes, the data are split into roughly equal sized #' bins based on \code{groups}. Percentiles are used to split the data. #' #' @return #' for \code{classDist}, an object of class \code{classDist} with #' elements: #' \item{values }{a list with elements for each class. Each element #' contains a mean vector for the class centroid and the #' inverse of the class covariance matrix} #' \item{classes}{a character vector of class labels} #' \item{pca}{the results of \code{\link[stats]{prcomp}} when #' \code{pca = TRUE}} #' \item{call}{the function call} #' \item{p}{the number of variables} #' \item{n}{a vector of samples sizes per class} #' #' For \code{predict.classDist}, a matrix with columns for each class. #' The columns names are the names of the class with the prefix #' \code{dist.}. In the case of numeric \code{y}, the class labels are #' the percentiles. For example, of \code{groups = 9}, the variable names #' would be \code{dist.11.11}, \code{dist.22.22}, etc. #' #' @author Max Kuhn #' #' @references Forina et al. CAIMAN brothers: A family of powerful classification and class modeling techniques. Chemometrics and Intelligent Laboratory Systems (2009) vol. 96 (2) pp. 239-245 #' #' @seealso \code{\link[stats]{mahalanobis}} #' #' @examples #' trainSet <- sample(1:150, 100) #' #' distData <- classDist(iris[trainSet, 1:4], #' iris$Species[trainSet]) #' #' newDist <- predict(distData, #' iris[-trainSet, 1:4]) #' #' splom(newDist, groups = iris$Species[-trainSet]) #' #' @keywords manip #' @export classDist <- function (x, ...) UseMethod("classDist") #' @rdname classDist #' @method classDist default #' @importFrom stats cov predict quantile prcomp #' @export classDist.default <- function(x, y, groups = 5, pca = FALSE, keep = NULL, ...) { if(is.numeric(y)) { y <- cut(y, unique(quantile(y, probs = seq(0, 1, length = groups + 1))), include.lowest = TRUE) classLabels <- paste(round((1:groups)/groups*100, 2)) y <- factor(y) cuts <- levels(y) } else { classLabels <- levels(y) cuts <- NULL } p <- ncol(x) if(pca) { pca <- prcomp(x, center = TRUE, scale. = TRUE, tol = sqrt(.Machine$double.eps)) keep <- min(keep, ncol(pca$rotation)) if(!is.null(keep)) pca$rotation <- pca$rotation[, 1:keep, drop = FALSE] x <- as.data.frame(predict(pca, newdata = x)) } else pca <- NULL x <- split(x, y) getStats <- function(u) { if(nrow(u) < ncol(u)) stop("there must be more rows than columns for this class") A <- try(cov(u), silent = TRUE) if(class(A) == "try-error") stop("Cannot compute the covariance matrix") A <- try(solve(A), silent = TRUE) if(class(A) == "try-error") stop("Cannot invert the covariance matrix") list(means = colMeans(u, na.rm = TRUE), A = A) } structure( list(values = lapply(x, getStats), classes = classLabels, cuts = cuts, pca = pca, call = match.call(), p = p, n = unlist(lapply(x, nrow))), class = "classDist") } #' @export print.classDist <- function(x, ...) { printCall(x$call) if(!is.null(x$cuts)) { cat("Classes based on", length(x$cuts) - 1, "cuts of the data\n") paste(x$cuts, collapse = " ") cat("\n") } if(!is.null(x$pca)) cat("PCA applied,", ncol(x$pca$rotation), "components retained\n\n") cat("# predictors variables:", x$p, "\n") cat("# samples:", paste( paste(x$n, ifelse(is.null(x$cuts), " (", " "), names(x$n), ifelse(is.null(x$cuts), ")", ""), sep = ""), collapse = ", "), "\n") invisible(x) } #' @rdname classDist #' @method predict classDist #' @importFrom stats mahalanobis predict #' @export predict.classDist <- function(object, newdata, trans = log, ...) { if(!is.null(object$pca)) { newdata <- predict(object$pca, newdata = newdata) } pred <- function(a, x) mahalanobis(x, center = a$means, cov = a$A, inverted = TRUE) out <- lapply(object$values, pred, x = newdata) out <- do.call("cbind", out) colnames(out) <- paste("dist.", object$classes, sep = "") if(!is.null(trans)) out <- apply(out, 2, trans) out } caret/R/nearZeroVar.R0000644000176200001440000001505513153613153014141 0ustar liggesusers#' Identification of near zero variance predictors #' #' \code{nearZeroVar} diagnoses predictors that have one unique value (i.e. are #' zero variance predictors) or predictors that are have both of the following #' characteristics: they have very few unique values relative to the number of #' samples and the ratio of the frequency of the most common value to the #' frequency of the second most common value is large. \code{checkConditionalX} #' looks at the distribution of the columns of \code{x} conditioned on the #' levels of \code{y} and identifies columns of \code{x} that are sparse within #' groups of \code{y}. #' #' For example, an example of near zero variance predictor is one that, for #' 1000 samples, has two distinct values and 999 of them are a single value. #' #' To be flagged, first the frequency of the most prevalent value over the #' second most frequent value (called the ``frequency ratio'') must be above #' \code{freqCut}. Secondly, the ``percent of unique values,'' the number of #' unique values divided by the total number of samples (times 100), must also #' be below \code{uniqueCut}. #' #' In the above example, the frequency ratio is 999 and the unique value #' percentage is 0.0001. #' #' Checking the conditional distribution of \code{x} may be needed for some #' models, such as naive Bayes where the conditional distributions should have #' at least one data point within a class. #' #' \code{nzv} is the original version of the function. #' #' @aliases nearZeroVar nzv checkResamples checkConditionalX #' @param x a numeric vector or matrix, or a data frame with all numeric data #' @param freqCut the cutoff for the ratio of the most common value to the #' second most common value #' @param uniqueCut the cutoff for the percentage of distinct values out of the #' number of total samples #' @param saveMetrics a logical. If false, the positions of the zero- or #' near-zero predictors is returned. If true, a data frame with predictor #' information is returned. #' @param names a logical. If false, column indexes are returned. If true, #' column names are returned. #' @param y a factor vector with at least two levels #' @param index a list. Each element corresponds to the training set samples in #' \code{x} for a given resample #' @param foreach should the \pkg{foreach} package be used for the #' computations? If \code{TRUE}, less memory should be used. #' @param allowParallel should the parallel processing via the \pkg{foreach} #' package be used for the computations? If \code{TRUE}, more memory will be #' used but execution time should be shorter. #' @return For \code{nearZeroVar}: if \code{saveMetrics = FALSE}, a vector of #' integers corresponding to the column positions of the problematic #' predictors. If \code{saveMetrics = TRUE}, a data frame with columns: #' \item{freqRatio }{the ratio of frequencies for the most common value over #' the second most common value} \item{percentUnique }{the percentage of unique #' data points out of the total number of data points} \item{zeroVar }{a vector #' of logicals for whether the predictor has only one distinct value} \item{nzv #' }{a vector of logicals for whether the predictor is a near zero variance #' predictor} #' #' For \code{checkResamples} or \code{checkConditionalX}, a vector of column #' indicators for predictors with empty conditional distributions in at least #' one class of \code{y}. #' @author Max Kuhn, with speed improvements to nearZeroVar by Allan Engelhardt #' @keywords utilities #' @examples #' #' nearZeroVar(iris[, -5], saveMetrics = TRUE) #' #' data(BloodBrain) #' nearZeroVar(bbbDescr) #' nearZeroVar(bbbDescr, names = TRUE) #' #' #' set.seed(1) #' classes <- factor(rep(letters[1:3], each = 30)) #' x <- data.frame(x1 = rep(c(0, 1), 45), #' x2 = c(rep(0, 10), rep(1, 80))) #' #' lapply(x, table, y = classes) #' checkConditionalX(x, classes) #' #' folds <- createFolds(classes, k = 3, returnTrain = TRUE) #' x$x3 <- x$x1 #' x$x3[folds[[1]]] <- 0 #' #' checkResamples(folds, x, classes) #' #' #' #' @export nearZeroVar nearZeroVar <- function (x, freqCut = 95/5, uniqueCut = 10, saveMetrics = FALSE, names = FALSE, foreach = FALSE, allowParallel = TRUE) { if(!foreach) return(nzv(x, freqCut = freqCut, uniqueCut = uniqueCut, saveMetrics = saveMetrics, names = names)) `%op%` <- getOper(foreach && allowParallel && getDoParWorkers() > 1) if(saveMetrics) { res <- foreach(name = colnames(x), .combine=rbind) %op% { r <- nzv(x[[name]], freqCut = freqCut, uniqueCut = uniqueCut, saveMetrics = TRUE) r[,"column" ] <- name r } res <- res[, c(5, 1, 2, 3, 4)] rownames(res) <- as.character(res$column) res$column <- NULL } else { res <- foreach(name = colnames(x), .combine=c) %op% { r <- nzv(x[[name]], freqCut = freqCut, uniqueCut = uniqueCut, saveMetrics = FALSE) ## needed because either integer() or 1, r is never 0 if (length(r) > 0 && r == 1) TRUE else FALSE } res <- which(res) if(names){ res <- colnames(x)[res] } } res } #' @export nzv <- function (x, freqCut = 95/5, uniqueCut = 10, saveMetrics = FALSE, names = FALSE) { if (is.null(dim(x))) x <- matrix(x, ncol = 1) freqRatio <- apply(x, 2, function(data) { t <- table(data[!is.na(data)]) if (length(t) <= 1) { return(0); } w <- which.max(t); return(max(t, na.rm=TRUE)/max(t[-w], na.rm=TRUE)) }) lunique <- apply(x, 2, function(data) length(unique(data[!is.na(data)]))) percentUnique <- 100 * lunique / apply(x, 2, length) zeroVar <- (lunique == 1) | apply(x, 2, function(data) all(is.na(data))) if (saveMetrics) { out <- data.frame(freqRatio = freqRatio, percentUnique = percentUnique, zeroVar = zeroVar, nzv = (freqRatio > freqCut & percentUnique <= uniqueCut) | zeroVar) } else { out <- which((freqRatio > freqCut & percentUnique <= uniqueCut) | zeroVar) names(out) <- NULL if(names){ out <- colnames(x)[out] } } out } zeroVar <- function(x) { x <- x[,colnames(x) != ".outcome", drop = FALSE] which(apply(x, 2, function(x) length(unique(x)) < 2)) } #' @rdname nearZeroVar #' @export checkConditionalX <- function(x, y) { x$.outcome <- y unique(unlist(dlply(x, .(.outcome), zeroVar))) } #' @rdname nearZeroVar #' @export checkResamples <- function(index, x, y) { if(!is.factor(y)) stop("y must be a factor") if(length(levels(y)) < 2) stop("y must have at least 2 levels") wrap <- function(index, x, y) checkConditionalX(x[index,,drop=FALSE], y[index]) unique(unlist(lapply(index, wrap, x = x, y = y))) } caret/R/basic2x2Stats.R0000644000176200001440000000051613153613153014333 0ustar liggesusersbasic2x2Stats <- function(x, y, pos, neg) { out <- vector(length = 4, mode = "numeric") out[1] <- sensitivity(x, y, pos) out[2] <- specificity(x, y, neg) out[3] <- posPredValue(x, y, pos) out[4] <- negPredValue(x, y, neg) names(out) <- c("Sensitivity", "Specificity", "Pos Pred Value", "Neg Pred Value") out } caret/R/predictionFunction.R0000644000176200001440000000066113153613153015546 0ustar liggesusers#' @rdname caret-internal #' @importFrom stats predict #' @export predictionFunction <- function(method, modelFit, newdata, preProc = NULL, param = NULL) { if(!is.null(newdata) && !is.null(preProc)) newdata <- predict(preProc, newdata) out <- method$predict(modelFit = modelFit, newdata = newdata, submodels = param) ## TODO convert to character with classification out } caret/R/findCorrelation.R0000644000176200001440000001373213153613153015025 0ustar liggesusers#' @importFrom stats complete.cases findCorrelation_fast <- function(x, cutoff = .90, verbose = FALSE){ if(any(!complete.cases(x))) stop("The correlation matrix has some missing values.") averageCorr <- colMeans(abs(x)) averageCorr <- as.numeric(as.factor(averageCorr)) x[lower.tri(x, diag = TRUE)] <- NA combsAboveCutoff <- which(abs(x) > cutoff) colsToCheck <- ceiling(combsAboveCutoff / nrow(x)) rowsToCheck <- combsAboveCutoff %% nrow(x) colsToDiscard <- averageCorr[colsToCheck] > averageCorr[rowsToCheck] rowsToDiscard <- !colsToDiscard if(verbose){ colsFlagged <- pmin(ifelse(colsToDiscard, colsToCheck, NA), ifelse(rowsToDiscard, rowsToCheck, NA), na.rm = TRUE) values <- round(x[combsAboveCutoff], 3) cat('\n',paste('Combination row', rowsToCheck, 'and column', colsToCheck, 'is above the cut-off, value =', values, '\n \t Flagging column', colsFlagged, '\n' )) } deletecol <- c(colsToCheck[colsToDiscard], rowsToCheck[rowsToDiscard]) deletecol <- unique(deletecol) deletecol } findCorrelation_exact <- function(x, cutoff = 0.90, verbose = FALSE) { varnum <- dim(x)[1] if (!isTRUE(all.equal(x, t(x)))) stop("correlation matrix is not symmetric") if (varnum == 1) stop("only one variable given") x <- abs(x) # re-ordered columns based on max absolute correlation originalOrder <- 1:varnum averageCorr <- function(x) mean(x, na.rm = TRUE) tmp <- x diag(tmp) <- NA maxAbsCorOrder <- order(apply(tmp, 2, averageCorr), decreasing = TRUE) x <- x[maxAbsCorOrder, maxAbsCorOrder] newOrder <- originalOrder[maxAbsCorOrder] rm(tmp) deletecol <- rep(FALSE, varnum) x2 <- x diag(x2) <- NA for (i in 1:(varnum - 1)) { if(!any(x2[!is.na(x2)] > cutoff)){ if (verbose) cat("All correlations <=", cutoff, "\n") break() } if (deletecol[i]) next for (j in (i + 1):varnum) { if (!deletecol[i] & !deletecol[j]) { if (x[i, j] > cutoff) { mn1 <- mean(x2[i,], na.rm = TRUE) mn2 <- mean(x2[-j,], na.rm = TRUE) if(verbose) cat("Compare row", newOrder[i], " and column ", newOrder[j], "with corr ", round(x[i,j], 3), "\n") if (verbose) cat(" Means: ", round(mn1, 3), "vs", round(mn2, 3)) if (mn1 > mn2) { deletecol[i] <- TRUE x2[i, ] <- NA x2[, i] <- NA if (verbose) cat(" so flagging column", newOrder[i], "\n") } else { deletecol[j] <- TRUE x2[j, ] <- NA x2[, j] <- NA if (verbose) cat(" so flagging column", newOrder[j], "\n") } } } } } newOrder[which(deletecol)] } #' Determine highly correlated variables #' #' This function searches through a correlation matrix and returns a vector of #' integers corresponding to columns to remove to reduce pair-wise #' correlations. #' #' The absolute values of pair-wise correlations are considered. If two #' variables have a high correlation, the function looks at the mean absolute #' correlation of each variable and removes the variable with the largest mean #' absolute correlation. #' #' Using \code{exact = TRUE} will cause the function to re-evaluate the average #' correlations at each step while \code{exact = FALSE} uses all the #' correlations regardless of whether they have been eliminated or not. The #' exact calculations will remove a smaller number of predictors but can be #' much slower when the problem dimensions are "big". #' #' There are several function in the \pkg{subselect} package #' (\code{\link[subselect:eleaps]{leaps}}, #' \code{\link[subselect:genetic]{genetic}}, #' \code{\link[subselect:anneal]{anneal}}) that can also be used to accomplish #' the same goal but tend to retain more predictors. #' #' @param x A correlation matrix #' @param cutoff A numeric value for the pair-wise absolute correlation cutoff #' @param verbose A boolean for printing the details #' @param names a logical; should the column names be returned (\code{TRUE}) or #' the column index (\code{FALSE})? #' @param exact a logical; should the average correlations be recomputed at #' each step? See Details below. #' @return A vector of indices denoting the columns to remove (when \code{names #' = TRUE}) otherwise a vector of column names. If no correlations meet the #' criteria, \code{integer(0)} is returned. #' @author Original R code by Dong Li, modified by Max Kuhn #' @seealso \code{\link[subselect:eleaps]{leaps}}, #' \code{\link[subselect:genetic]{genetic}}, #' \code{\link[subselect:anneal]{anneal}}, \code{\link{findLinearCombos}} #' @keywords manip #' @examples #' #' R1 <- structure(c(1, 0.86, 0.56, 0.32, 0.85, 0.86, 1, 0.01, 0.74, 0.32, #' 0.56, 0.01, 1, 0.65, 0.91, 0.32, 0.74, 0.65, 1, 0.36, #' 0.85, 0.32, 0.91, 0.36, 1), #' .Dim = c(5L, 5L)) #' colnames(R1) <- rownames(R1) <- paste0("x", 1:ncol(R1)) #' R1 #' #' findCorrelation(R1, cutoff = .6, exact = FALSE) #' findCorrelation(R1, cutoff = .6, exact = TRUE) #' findCorrelation(R1, cutoff = .6, exact = TRUE, names = FALSE) #' #' #' R2 <- diag(rep(1, 5)) #' R2[2, 3] <- R2[3, 2] <- .7 #' R2[5, 3] <- R2[3, 5] <- -.7 #' R2[4, 1] <- R2[1, 4] <- -.67 #' #' corrDF <- expand.grid(row = 1:5, col = 1:5) #' corrDF$correlation <- as.vector(R2) #' levelplot(correlation ~ row + col, corrDF) #' #' findCorrelation(R2, cutoff = .65, verbose = TRUE) #' #' findCorrelation(R2, cutoff = .99, verbose = TRUE) #' #' @export findCorrelation findCorrelation <- function(x, cutoff = 0.90, verbose = FALSE, names = FALSE, exact = ncol(x) < 100) { if(names & is.null(colnames(x))) stop("'x' must have column names when `names = TRUE`") out <- if(exact) findCorrelation_exact(x = x, cutoff = cutoff, verbose = verbose) else findCorrelation_fast(x = x, cutoff = cutoff, verbose = verbose) out if(names) out <- colnames(x)[out] out } caret/R/selection.R0000644000176200001440000001406113153613153013664 0ustar liggesusers ## In these functions, x is the data fram of performance values and tuning parameters. #' Selecting tuning Parameters #' #' Various functions for setting tuning parameters #' #' These functions can be used by \code{\link{train}} to select the "optimal" #' model from a series of models. Each requires the user to select a metric #' that will be used to judge performance. For regression models, values of #' \code{"RMSE"} and \code{"Rsquared"} are applicable. Classification models #' use either \code{"Accuracy"} or \code{"Kappa"} (for unbalanced class #' distributions. #' #' More details on these functions can be found at #' \url{http://topepo.github.io/caret/model-training-and-tuning.html#custom}. #' #' By default, \code{\link{train}} uses \code{best}. #' #' \code{best} simply chooses the tuning parameter associated with the largest #' (or lowest for \code{"RMSE"}) performance. #' #' \code{oneSE} is a rule in the spirit of the "one standard error" rule of #' Breiman et al. (1984), who suggest that the tuning parameter associated with #' the best performance may over fit. They suggest that the simplest model #' within one standard error of the empirically optimal model is the better #' choice. This assumes that the models can be easily ordered from simplest to #' most complex (see the Details section below). #' #' \code{tolerance} takes the simplest model that is within a percent tolerance #' of the empirically optimal model. For example, if the largest Kappa value is #' 0.5 and a simpler model within 3 percent is acceptable, we score the other #' models using \code{(x - 0.5)/0.5 * 100}. The simplest model whose score is #' not less than 3 is chosen (in this case, a model with a Kappa value of 0.35 #' is acceptable). #' #' User--defined functions can also be used. The argument #' \code{selectionFunction} in \code{\link{trainControl}} can be used to pass #' the function directly or to pass the function by name. #' #' @aliases oneSE best tolerance #' @param x a data frame of tuning parameters and model results, sorted from #' least complex models to the mst complex #' @param metric a string that specifies what summary metric will be used to #' select the optimal model. By default, possible values are "RMSE" and #' "Rsquared" for regression and "Accuracy" and "Kappa" for classification. If #' custom performance metrics are used (via the \code{summaryFunction} argument #' in \code{\link{trainControl}}, the value of \code{metric} should match one #' of the arguments. If it does not, a warning is issued and the first metric #' given by the \code{summaryFunction} is used. #' @param maximize a logical: should the metric be maximized or minimized? #' @param num the number of resamples (for \code{oneSE} only) #' @param tol the acceptable percent tolerance (for \code{tolerance} only) #' @return a row index #' @note In many cases, it is not very clear how to order the models on #' simplicity. For simple trees and other models (such as PLS), this is #' straightforward. However, for others it is not. #' #' For example, many of the boosting models used by \pkg{caret} have parameters #' for the number of boosting iterations and the tree complexity (others may #' also have a learning rate parameter). In this implementation, we order #' models on number of iterations, then tree depth. Clearly, this is arguable #' (please email the author for suggestions though). #' #' For MARS models, they are orders on the degree of the features, then the #' number of retained terms. #' #' RBF SVM models are ordered first by the cost parameter, then by the kernel #' parameter while polynomial models are ordered first on polynomial degree, #' then cost and scale. #' #' Neural networks are ordered by the number of hidden units and then the #' amount of weight decay. #' #' k--nearest neighbor models are ordered from most neighbors to least (i.e. #' smoothest to model jagged decision boundaries). #' #' Elastic net models are ordered first on the L1 penalty, then by the L2 #' penalty. #' @author Max Kuhn #' @seealso \code{\link{train}}, \code{\link{trainControl}} #' @references Breiman, Friedman, Olshen, and Stone. (1984) #' \emph{Classification and Regression Trees}. Wadsworth. #' @keywords manip #' @examples #' #' \dontrun{ #' # simulate a PLS regression model #' test <- data.frame(ncomp = 1:5, #' RMSE = c(3, 1.1, 1.02, 1, 2), #' RMSESD = .4) #' #' best(test, "RMSE", maximize = FALSE) #' oneSE(test, "RMSE", maximize = FALSE, num = 10) #' tolerance(test, "RMSE", tol = 3, maximize = FALSE) #' #' ### usage example #' #' data(BloodBrain) #' #' marsGrid <- data.frame(degree = 1, nprune = (1:10) * 3) #' #' set.seed(1) #' marsFit <- train(bbbDescr, logBBB, #' method = "earth", #' tuneGrid = marsGrid, #' trControl = trainControl(method = "cv", #' number = 10, #' selectionFunction = "tolerance")) #' #' # around 18 terms should yield the smallest CV RMSE #' } #' #' #' @export oneSE oneSE <- function(x, metric, num, maximize) { index <- 1:nrow(x) if(!maximize) { bestIndex <- which.min(x[,metric]) perf <- x[bestIndex,metric] + (x[bestIndex,paste(metric, "SD", sep = "")])/sqrt(num) candidates <- index[x[, metric] <= perf] bestIter <- min(candidates) } else { bestIndex <- which.max(x[,metric]) perf <- x[bestIndex,metric] - (x[bestIndex,paste(metric, "SD", sep = "")])/sqrt(num) candidates <- index[x[, metric] >= perf] bestIter <- min(candidates) } bestIter } #' @rdname oneSE #' @export tolerance <- function(x, metric, tol = 1.5, maximize) { index <- 1:nrow(x) if(!maximize) { best <- min(x[,metric]) perf <- (x[,metric] - best)/best * 100 candidates <- index[perf < tol] bestIter <- min(candidates) } else { best <- max(x[,metric]) perf <- (x[,metric] - best)/best * -100 candidates <- index[perf < tol] bestIter <- min(candidates) } bestIter } caret/R/lift.R0000644000176200001440000004515513153613153012645 0ustar liggesusers#' Lift Plot #' #' For classification models, this function creates a 'lift plot' that #' describes how well a model ranks samples for one class #' #' \code{lift.formula} is used to process the data and \code{xyplot.lift} is #' used to create the plot. #' #' To construct data for the the lift and gain plots, the following steps are #' used for each model: #' #' \enumerate{ \item The data are ordered by the numeric model prediction used #' on the right-hand side of the model formula \item Each unique value of the #' score is treated as a cut point \item The number of samples with true #' results equal to \code{class} are determined \item The lift is calculated as #' the ratio of the percentage of samples in each split corresponding to #' \code{class} over the same percentage in the entire data set} \code{lift} #' with \code{plot = "gain"} produces a plot of the cumulative lift values by #' the percentage of samples evaluated while \code{plot = "lift"} shows the cut #' point value versus the lift statistic. #' #' This implementation uses the \pkg{lattice} function #' \code{\link[lattice:xyplot]{xyplot}}, so plot elements can be changed via #' panel functions, \code{\link[lattice:trellis.par.get]{trellis.par.set}} or #' other means. \code{lift} uses the panel function \code{\link{panel.lift2}} #' by default, but it can be changes using #' \code{\link[lattice:update.trellis]{update.trellis}} (see the examples in #' \code{\link{panel.lift2}}). #' #' The following elements are set by default in the plot but can be changed by #' passing new values into \code{xyplot.lift}: \code{xlab = "\% Samples #' Tested"}, \code{ylab = "\% Samples Found"}, \code{type = "S"}, \code{ylim = #' extendrange(c(0, 100))} and \code{xlim = extendrange(c(0, 100))}. #' #' @aliases lift lift.formula lift.default xyplot.lift #' @param x a \code{lattice} formula (see \code{\link[lattice:xyplot]{xyplot}} #' for syntax) where the left-hand side of the formula is a factor class #' variable of the observed outcome and the right-hand side specifies one or #' model columns corresponding to a numeric ranking variable for a model (e.g. #' class probabilities). The classification variable should have two levels. #' @param data For \code{lift.formula}, a data frame (or more precisely, #' anything that is a valid \code{envir} argument in \code{eval}, e.g., a list #' or an environment) containing values for any variables in the formula, as #' well as \code{groups} and \code{subset} if applicable. If not found in #' \code{data}, or if \code{data} is unspecified, the variables are looked for #' in the environment of the formula. This argument is not used for #' \code{xyplot.lift} or \code{ggplot.lift}. #' @param class a character string for the class of interest #' @param subset An expression that evaluates to a logical or integer indexing #' vector. It is evaluated in \code{data}. Only the resulting rows of #' \code{data} are used for the plot. #' @param lattice.options A list that could be supplied to #' \code{\link[lattice:lattice.options]{lattice.options}} #' @param cuts If a single value is given, a sequence of values between 0 and 1 #' are created with length \code{cuts}. If a vector, these values are used as #' the cuts. If \code{NULL}, each unique value of the model prediction is used. #' This is helpful when the data set is large. #' @param labels A named list of labels for keys. The list should have an #' element for each term on the right-hand side of the formula and the names #' should match the names of the models. #' @param plot Either "gain" (the default) or "lift". The former plots the #' number of samples called events versus the event rate while the latter shows #' the event cut-off versus the lift statistic. #' @param values A vector of numbers between 0 and 100 specifying reference #' values for the percentage of samples found (i.e. the y-axis). Corresponding #' points on the x-axis are found via interpolation and line segments are shown #' to indicate how many samples must be tested before these percentages are #' found. The lines use either the \code{plot.line} or \code{superpose.line} #' component of the current lattice theme to draw the lines (depending on #' whether groups were used. These values are only used when \code{type = #' "gain"}. #' @param \dots options to pass through to \code{\link[lattice:xyplot]{xyplot}} #' or the panel function (not used in \code{lift.formula}). #' @return \code{lift.formula} returns a list with elements: \item{data}{the #' data used for plotting} \item{cuts}{the number of cuts} \item{class}{the #' event class} \item{probNames}{the names of the model probabilities} #' \item{pct}{the baseline event rate} #' #' \code{xyplot.lift} returns a \pkg{lattice} object #' @author Max Kuhn, some \pkg{lattice} code and documentation by Deepayan #' Sarkar #' @seealso \code{\link[lattice:xyplot]{xyplot}}, #' \code{\link[lattice:trellis.par.get]{trellis.par.set}} #' @keywords hplot #' @examples #' #' set.seed(1) #' simulated <- data.frame(obs = factor(rep(letters[1:2], each = 100)), #' perfect = sort(runif(200), decreasing = TRUE), #' random = runif(200)) #' #' lift1 <- lift(obs ~ random, data = simulated) #' lift1 #' xyplot(lift1) #' #' lift2 <- lift(obs ~ random + perfect, data = simulated) #' lift2 #' xyplot(lift2, auto.key = list(columns = 2)) #' #' xyplot(lift2, auto.key = list(columns = 2), value = c(10, 30)) #' #' xyplot(lift2, plot = "lift", auto.key = list(columns = 2)) #' #' @export lift lift <- function(x, ...) UseMethod("lift") #' @rdname lift #' @method lift default #' @export lift.default <- function(x, ...) stop("'x' should be a formula") #' @rdname lift #' @method lift formula #' @export lift.formula <- function(x, data = NULL, class = NULL, subset = TRUE, lattice.options = NULL, cuts = NULL, labels = NULL, ...) { if (!is.null(lattice.options)) { oopt <- lattice.options(lattice.options) on.exit(lattice.options(oopt), add = TRUE) } formula <- x groups <- NULL subset <- eval(substitute(subset), data, environment(x)) form <- latticeParseFormula(formula, data, subset = subset, groups = groups, multiple = TRUE, outer = TRUE, subscripts = TRUE, drop = TRUE) liftData <- data.frame(prob = form$y) probNames <- strsplit(form$right.name, " + ", fixed = TRUE)[[1]] if(!is.null(labels)) { if(length(labels) != length(probNames)) stop("labels should have an element for each term on the rhs of the formula") if(!all(probNames %in% names(labels))) stop(paste("labels should be a named vector or list with names:", paste(probNames, collapse = ", "))) } liftData <- data.frame(liftClassVar = rep(form$left, length(probNames)), liftProbVar = form$right) liftData$liftModelVar <- if(length(probNames) > 1) form$condition[[length(form$condition)]] else probNames if(length(form$condition) > 0 && any(names(form$condition) != "")) { ind <- sum(names(form$condition) != "") tmp <- as.data.frame(form$condition[1:ind]) liftData <- cbind(liftData, tmp) } if(!is.factor(liftData$liftClassVar)) stop("the left-hand side of the formula must be a factor of classes") splitVars <- names(liftData)[!(names(liftData) %in% c("liftClassVar", "liftProbVar"))] if(is.null(class)) class <- levels(liftData$liftClassVar)[1] plotData <- ddply(liftData, splitVars, liftCalc, class = class, cuts = cuts) if(!is.null(labels)) { plotData$originalName <- plotData$liftModelVar plotData$liftModelVar <- as.character(plotData$liftModelVar) for(i in seq(along = labels)) plotData$liftModelVar[plotData$liftModelVar == names(labels)[i]] <- labels[i] plotData$liftModelVar <- factor(plotData$liftModelVar, levels = labels) } out <- list(data = plotData, class = class, probNames = probNames, pct = mean(liftData$liftClassVar == class)*100, call = match.call()) class(out) <- "lift" out } #' @rdname lift #' @method print lift #' @export print.lift <- function(x, ...) { printCall(x$call) cat("Models:", paste(unique(x$data$liftModelVar), collapse = ", "), "\n") cat("Event: ", x$class, " (", round( x$pct, 1), "%)\n", sep = "") invisible(x) } #' @method plot lift #' @export plot.lift <- function(x, y = NULL, ...) xyplot.lift(x = x, data = NULL, ...) #' @rdname lift #' @method xyplot lift #' @importFrom stats as.formula #' @importFrom grDevices extendrange #' @export xyplot.lift <- function(x, data = NULL, plot = "gain", values = NULL, ...){ if(!(plot %in% c("lift", "gain"))) stop("`plot`` should be either 'lift' or 'gain'", call. = FALSE) if(plot == "gain") { lFormula <- "CumEventPct ~ CumTestedPct" rng <- extendrange(c(0, 100)) opts <- list(...) if(!any(names(opts) == "xlab")) opts$xlab <- "% Samples Tested" if(!any(names(opts) == "ylab")) opts$ylab <- "% Samples Found" if(!any(names(opts) == "type")) opts$type <- "l" if(!any(names(opts) == "ylim")) opts$ylim <- rng if(!any(names(opts) == "xlim")) opts$xlim <- rng if(!any(names(opts) == "panel")) opts$panel <- panel.lift2 } else { lFormula <- "lift ~ cuts" x$data <- x$data[order(x$data$liftModelVar, x$data$cuts),] rng <- extendrange(c(0, 100)) opts <- list(...) if(!any(names(opts) == "xlab")) opts$xlab <- "Cut-Off" if(!any(names(opts) == "ylab")) opts$ylab <- "Lift" if(!any(names(opts) == "type")) opts$type <- "l" } args <- list(x = as.formula(lFormula), data = x$data, pct = x$pc, values = values) if(length(x$probNames) > 1) args$groups <- x$data$liftModelVar args <- c(args, opts) do.call("xyplot", args) } #' @importFrom stats complete.cases liftCalc <- function(x, class = levels(x$liftClassVar)[1], cuts = NULL) { x <- x[complete.cases(x),] lvl <- levels(x$liftClassVar) x <- x[order(x$liftProbVar, decreasing = TRUE),] nEvents <- sum(x$liftClassVar == class) baseline <- mean(x$liftClassVar == class) if(!is.null(cuts)) { if(length(cuts) == 1) { cuts <- rev(seq(0, 1, length = cuts)) } else { cuts <- unique(c(1, sort(cuts, decreasing = TRUE), 0)) } } else { cuts <- sort(unique(x$liftProbVar), decreasing = TRUE) cuts <- unique(c(1, sort(cuts, decreasing = TRUE), 0)) } class2 <- levels(x$liftClassVar) class2 <- class2[class2 != class] tmp <- data.frame(cuts = cuts, events = NA, n = NA, Sn = NA, Sp = NA) for(i in seq(along = cuts)) { sub <- x$liftClassVar[x$liftProbVar >= tmp$cuts[i]] tmp$n[i] <- length(sub) tmp$events[i] <- sum(sub == class) prd <- factor(ifelse(x$liftProbVar >= tmp$cuts[i], class, class2), levels = levels(x$liftClassVar)) tmp$Sn[i] <- sensitivity(prd, x$liftClassVar, positive = class) tmp$Sp[i] <- specificity(prd, x$liftClassVar, negative = class2) } tmp$EventPct <- ifelse(tmp$n > 0, tmp$events/tmp$n*100, 0) tmp$CumEventPct <- tmp$events/nEvents*100 tmp$lift <- tmp$events/tmp$n/baseline tmp$CumTestedPct <- tmp$n/nrow(x)*100 tmp } #' @export panel.lift <- function(x, y, ...) { panel.xyplot(x, y, ...) panel.abline(0, 1, col = "black") } #' Lattice Panel Functions for Lift Plots #' #' Two panel functions that be used in conjunction with \code{\link{lift}}. #' #' \code{panel.lift} plots the data with a simple (black) 45 degree reference #' line. #' #' \code{panel.lift2} is the default for \code{\link{lift}} and plots the data #' points with a shaded region encompassing the space between to the random #' model and perfect model trajectories. The color of the region is determined #' by the lattice \code{reference.line} information (see example below). #' #' @aliases panel.lift panel.lift2 #' @param x the percentage of searched to be plotted in the scatterplot #' @param y the percentage of events found to be plotted in the scatterplot #' @param pct the baseline percentage of true events in the data #' @param values A vector of numbers between 0 and 100 specifying reference #' values for the percentage of samples found (i.e. the y-axis). Corresponding #' points on the x-axis are found via interpolation and line segments are shown #' to indicate how many samples must be tested before these percentages are #' found. The lines use either the \code{plot.line} or \code{superpose.line} #' component of the current lattice theme to draw the lines (depending on #' whether groups were used #' @param \dots options to pass to #' \code{\link[lattice:panel.xyplot]{panel.xyplot}} #' @author Max Kuhn #' @seealso \code{\link{lift}}, #' \code{\link[lattice:panel.xyplot]{panel.xyplot}}, #' \code{\link[lattice:xyplot]{xyplot}}, #' \link[lattice:trellis.par.get]{trellis.par.set} #' @keywords hplot #' @examples #' #' set.seed(1) #' simulated <- data.frame(obs = factor(rep(letters[1:2], each = 100)), #' perfect = sort(runif(200), decreasing = TRUE), #' random = runif(200)) #' #' regionInfo <- trellis.par.get("reference.line") #' regionInfo$col <- "lightblue" #' trellis.par.set("reference.line", regionInfo) #' #' lift2 <- lift(obs ~ random + perfect, data = simulated) #' lift2 #' xyplot(lift2, auto.key = list(columns = 2)) #' #' ## use a different panel function #' xyplot(lift2, panel = panel.lift) #' #' @export panel.lift2 panel.lift2 <- function (x, y, pct = 0, values = NULL, ...) { polyx <- c(0, pct, 100, 0) polyy <- c(0, 100, 100, 0) regionStyle <- trellis.par.get("reference.line") panel.polygon(polyx, polyy, col = regionStyle$col, border = regionStyle$col) panel.xyplot(x, y, ...) if(!is.null(values)){ theDots <- list(...) if(any(names(theDots) == "groups")) { dat <- data.frame(x = x, y = y, groups = theDots$groups) ung <- unique(dat$groups) for(i in seq(along = ung)) { dat0 <- subset(dat, groups == ung[i]) plotRef(dat0$x, dat0$y, values, iter = i) } } else plotRef(x, y, values) } } #' @importFrom stats approx plotRef <- function(x, y, v, iter = 0) { if(iter == 0) { lineStyle <- trellis.par.get("plot.line") } else { lineStyle <- trellis.par.get("superpose.line") lineStyle <- lapply(lineStyle, function(x, i) x[min(length(x), i)], i = iter) } tmp_dat <- data.frame(CumTestedPct = x, CumEventPct = y) ref_values <- get_ref_point(tmp_dat, v = v) ref_values <- ref_values[!is.na(ref_values$CumTestedPct), ] if(nrow(ref_values) > 0) { for(i in 1:nrow(ref_values)) { panel.segments(x0 = ref_values$CumTestedPct[i], x1 = ref_values$CumTestedPct[i], y0 = 0, y1 = ref_values$CumEventPct[i], lty = lineStyle$lty, col = lineStyle$col, alpha = lineStyle$alpha, lwd = lineStyle$lwd) panel.segments(x0 = 0, x1 = ref_values$CumTestedPct[i], y0 = ref_values$CumEventPct[i], y1 = ref_values$CumEventPct[i], lty = lineStyle$lty, col = lineStyle$col, alpha = lineStyle$alpha, lwd = lineStyle$lwd) } } } utils::globalVariables(c("CumEventPct", "CumTestedPct", "cuts", "x1", "x2", "y1", "y2")) #' @rdname lift #' @param mapping,environment Not used (required for \code{ggplot} consistency). #' @method ggplot lift #' @export ggplot.lift <- function (data = NULL, mapping = NULL, plot = "gain", values = NULL, ..., environment = NULL) { if(!(plot %in% c("lift", "gain"))) stop("`plot`` should be either 'lift' or 'gain'", call. = FALSE) names(data$data)[names(data$data) == "liftModelVar"] <- "Model" nmod <- length(unique(data$data$Model)) if(plot == "gain") { lines1 <- data.frame(x1 = 0, x2 = 100, y1 = 0, y2 = 100) lines2 <- data.frame(x1 = 0, x2 = data$pct, y1 = 0, y2 = 100) lines3 <- data.frame(x1 = data$pct, x2 = 100, y1 = 100, y2 = 100) rng <- extendrange(c(0, 100)) res <- ggplot(data$data, aes(x = CumTestedPct, y = CumEventPct)) + geom_segment(data = lines1, aes(x = x1, y = y1, xend = x2, yend = y2), alpha = .2, lty = 2) + geom_segment(data = lines2, aes(x = x1, y = y1, xend = x2, yend = y2), alpha = .2, lty = 2) + geom_segment(data = lines3, aes(x = x1, y = y1, xend = x2, yend = y2), alpha = .2, lty = 2) + xlab("% Samples Tested") + ylab("% Samples Found") + xlim(rng) + ylim(rng) res <- if(nmod == 1) res + geom_line() else res + geom_line(aes(col = Model)) if(!is.null(values)) { ref_values <- ddply(data$data, .(Model), get_ref_point, v = values) ref_values <- ref_values[!is.na(ref_values$CumTestedPct),] if(nrow(ref_values) > 0) { if(nmod > 1) { res <- res + geom_segment(data = ref_values, aes(x = CumTestedPct, y = CumEventPct, xend = CumTestedPct, yend = 0, color = Model))+ geom_segment(data = ref_values, aes(x = CumTestedPct, y = CumEventPct, xend = 0, yend = CumEventPct, color = Model)) } else { res <- res + geom_segment(data = ref_values, aes(x = CumTestedPct, y = CumEventPct, xend = CumTestedPct, yend = 0)) + geom_segment(data = ref_values, aes(x = CumTestedPct, y = CumEventPct, xend = 0, yend = CumEventPct)) } } } } else { data$data <- data$data[!is.na(data$data$lift),] res <- ggplot(data$data, aes(x = cuts, y = lift)) + xlab("Cut-Off") + ylab("Lift") res <- if(nmod == 1) res + geom_line() else res + geom_line(aes(col = Model)) } res } get_ref_point <- function(dat, v, window = 5) { x <- dat$CumTestedPct y <- dat$CumEventPct erx <- extendrange(x) ery <- extendrange(y) res <- data.frame(CumEventPct = v, CumTestedPct = NA) for(i in seq(along = v)) { nearest <- which.min((y - v[i])^2) index <- max(1, nearest - window):min(length(y), nearest + window) res$CumTestedPct[i] <- if (length(index) > 2) approx(y[index], x[index], xout = v[i])$y else NA } res } caret/R/sampling.R0000644000176200001440000000616613153613153013520 0ustar liggesusers#' Down- and Up-Sampling Imbalanced Data #' #' \code{downSample} will randomly sample a data set so that all classes have #' the same frequency as the minority class. \code{upSample} samples with #' replacement to make the class distributions equal #' #' Simple random sampling is used to down-sample for the majority class(es). #' Note that the minority class data are left intact and that the samples will #' be re-ordered in the down-sampled version. #' #' For up-sampling, all the original data are left intact and additional #' samples are added to the minority classes with replacement. #' #' @aliases downSample upSample #' @param x a matrix or data frame of predictor variables #' @param y a factor variable with the class memberships #' @param list should the function return \code{list(x, y)} or bind \code{x} #' and \code{y} together? If \code{TRUE}, the output will be coerced to a data #' frame. #' @param yname if \code{list = FALSE}, a label for the class column #' @return Either a data frame or a list with elements \code{x} and \code{y}. #' @author Max Kuhn #' @keywords utilities #' @examples #' #' ## A ridiculous example... #' data(oil) #' table(oilType) #' downSample(fattyAcids, oilType) #' #' upSample(fattyAcids, oilType) #' #' #' @export downSample downSample <- function(x, y, list = FALSE, yname = "Class") { xc <- class(x) if(!is.data.frame(x)) x <- as.data.frame(x) if(!is.factor(y)) { warning("Down-sampling requires a factor variable as the response. The original data was returned.") return(list(x = x, y = y)) } minClass <- min(table(y)) x$.outcome <- y x <- ddply(x, .(y), function(dat, n) dat[sample(seq(along = dat$.outcome), n),,drop = FALSE], n = minClass) y <- x$.outcome x <- x[, !(colnames(x) %in% c("y", ".outcome")), drop = FALSE] if(list) { if(xc[1] == "matrix") x <- as.matrix(x) out <- list(x = x, y = y) } else { out <- cbind(x, y) colnames(out)[ncol(out)] <- yname } out } #' @export upSample <- function(x, y, list = FALSE, yname = "Class") { xc <- class(x) if(!is.data.frame(x)) x <- as.data.frame(x) if(!is.factor(y)) { warning("Up-sampling requires a factor variable as the response. The original data was returned.") return(list(x = x, y = y)) } maxClass <- max(table(y)) x$.outcome <- y x <- ddply(x, .(y), function(x, top = maxClass) { if(nrow(x) < top) { ind <- sample(1:nrow(x), size = top - nrow(x), replace = TRUE) ind <- c(1:nrow(x), ind) x <- x[ind,,drop = FALSE] } x }) y <- x$.outcome x <- x[, !(colnames(x) %in% c("y", ".outcome")), drop = FALSE] if(list) { if(xc[1] == "matrix") x <- as.matrix(x) out <- list(x = x, y = y) } else { out <- cbind(x, y) colnames(out)[ncol(out)] <- yname } out } caret/R/plotObsVsPred.R0000644000176200001440000001044313153613153014445 0ustar liggesusers#' Plot Observed versus Predicted Results in Regression and Classification #' Models #' #' This function takes an object (preferably from the function #' \code{\link{extractPrediction}}) and creates a lattice plot. For numeric #' outcomes, the observed and predicted data are plotted with a 45 degree #' reference line and a smoothed fit. For factor outcomes, a dotplot plot is #' produced with the accuracies for the different models. #' #' If the call to \code{\link{extractPrediction}} included test data, these #' data are shown, but if unknowns were also included, they are not plotted #' #' #' @param object an object (preferably from the function #' \code{\link{extractPrediction}}. There should be columns named \code{obs}, #' \code{pred}, \code{model} (e.g. "rpart", "nnet" etc.) and \code{dataType} #' (e.g. "Training", "Test" etc) #' @param equalRanges a logical; should the x- and y-axis ranges be the same? #' @param \dots parameters to pass to \code{\link[lattice]{xyplot}} or #' \code{\link[lattice:xyplot]{dotplot}}, such as \code{auto.key} #' @return A lattice object. Note that the plot has to be printed to be #' displayed (especially in a loop). #' @author Max Kuhn #' @keywords hplot #' @examples #' #' \dontrun{ #' # regression example #' data(BostonHousing) #' rpartFit <- train(BostonHousing[1:100, -c(4, 14)], #' BostonHousing$medv[1:100], #' "rpart", tuneLength = 9) #' plsFit <- train(BostonHousing[1:100, -c(4, 14)], #' BostonHousing$medv[1:100], #' "pls") #' #' predVals <- extractPrediction(list(rpartFit, plsFit), #' testX = BostonHousing[101:200, -c(4, 14)], #' testY = BostonHousing$medv[101:200], #' unkX = BostonHousing[201:300, -c(4, 14)]) #' #' plotObsVsPred(predVals) #' #' #' #classification example #' data(Satellite) #' numSamples <- dim(Satellite)[1] #' set.seed(716) #' #' varIndex <- 1:numSamples #' #' trainSamples <- sample(varIndex, 150) #' #' varIndex <- (1:numSamples)[-trainSamples] #' testSamples <- sample(varIndex, 100) #' #' varIndex <- (1:numSamples)[-c(testSamples, trainSamples)] #' unkSamples <- sample(varIndex, 50) #' #' trainX <- Satellite[trainSamples, -37] #' trainY <- Satellite[trainSamples, 37] #' #' testX <- Satellite[testSamples, -37] #' testY <- Satellite[testSamples, 37] #' #' unkX <- Satellite[unkSamples, -37] #' #' knnFit <- train(trainX, trainY, "knn") #' rpartFit <- train(trainX, trainY, "rpart") #' #' predTargets <- extractPrediction(list(knnFit, rpartFit), #' testX = testX, #' testY = testY, #' unkX = unkX) #' #' plotObsVsPred(predTargets) #' } #' #' @export plotObsVsPred plotObsVsPred <- function(object, equalRanges = TRUE, ...) { object <- object[object$dataType != "Unknown",] object$dataType <- factor(object$dataType) if(is.factor(object$obs)) { agreement <- object$obs == object$pred accuracyTable <- by(agreement, list(model = object$model, data = object$dataType), mean) accuracyDF <- data.frame(unclass(accuracyTable)) accuracyStacked <- stack(accuracyDF) accuracyStacked$model <- rep(dimnames(accuracyDF)[[1]], dim(accuracyDF)[2]) names(accuracyStacked) <- c("Accuracy", "Data", "Model") accuracyStacked$Data <- factor( ifelse(accuracyStacked$Data == "Training", "Training (uncorrected)", as.character(accuracyStacked$Data))) out <- dotplot(Model ~ Accuracy, accuracyStacked, groups = accuracyStacked$Data, ...) } else { if(equalRanges) { xLimits <- yLimits <- extendrange(c(object$obs, object$pred)) } else { xLimits <- extendrange(object$obs) yLimits <- extendrange(object$pred) } out <- xyplot(obs ~ pred|model * dataType, object, xlim = xLimits, ylim = yLimits, panel = function(x, y, groups, subscripts, ...) { panel.xyplot(x, y, cex = .6) panel.abline(0, 1, col = trellis.par.get("superpose.line")$col[1], lty = 2) panel.loess(x, y, span = .75) }, xlab = "Predicted", ylab = "Observed", ...) } out } caret/R/bagEarth.R0000644000176200001440000003140013206767546013427 0ustar liggesusers#' Bagged Earth #' #' @aliases bagEarth print.bagEarth bagEarth.default bagEarth.formula #' @description A bagging wrapper for multivariate adaptive regression #' splines (MARS) via the \code{earth} function #' #' #' @param formula A formula of the form \code{y ~ x1 + x2 + ...} #' @param x matrix or data frame of 'x' values for examples. #' @param y matrix or data frame of numeric values outcomes. #' @param weights (case) weights for each example - if missing defaults to 1. #' @param data Data frame from which variables specified in 'formula' are #' preferentially to be taken. #' @param subset An index vector specifying the cases to be used in the #' training sample. (NOTE: If given, this argument must be #' named.) #' @param na.action A function to specify the action to be taken if 'NA's are #' found. The default action is for the procedure to fail. An #' alternative is na.omit, which leads to rejection of cases #' with missing values on any required variable. (NOTE: If #' given, this argument must be named.) #' #' @param B the number of bootstrap samples #' @param summary a function with a single argument specifying how the bagged predictions should be summarized #' @param keepX a logical: should the original training data be kept? #' @param \dots arguments passed to the \code{earth} function #' #' @details The function computes a Earth model for each bootstap sample. #' #' @return #' A list with elements #' \item{fit }{a list of \code{B} Earth fits} #' \item{B }{the number of bootstrap samples} #' \item{call }{the function call} #' \item{x }{either \code{NULL} or the value of \code{x}, depending on the #' value of \code{keepX}} #' \item{oob}{a matrix of performance estimates for each bootstrap sample} #' #' @references J. Friedman, ``Multivariate Adaptive Regression Splines'' (with #' discussion) (1991). Annals of Statistics, 19/1, 1-141. #' #' @author Max Kuhn (\code{bagEarth.formula} is based on Ripley's \code{nnet.formula}) #' #' @seealso \code{\link[earth]{earth}}, \code{\link{predict.bagEarth}} #' #' @examples \dontrun{ #' library(mda) #' library(earth) #' data(trees) #' fit1 <- earth(x = trees[,-3], y = trees[,3]) #' set.seed(2189) #' fit2 <- bagEarth(x = trees[,-3], y = trees[,3], B = 10) #' } #' #' @keywords regression #' #' @export "bagEarth" <- function(x, ...) UseMethod("bagEarth") #' @rdname bagEarth #' @method bagEarth default #' @importFrom stats predict #' @export "bagEarth.default" <- function(x, y, weights = NULL, B = 50, summary = mean, keepX = TRUE, ...) { requireNamespaceQuietStop("earth") if (!isNamespaceLoaded("earth")) attachNamespace("earth") funcCall <- match.call(expand.dots = TRUE) if (!is.matrix(x)) x <- as.matrix(x) if (!is.factor(y)) { if (!is.vector(y)) y <- as.vector(y) if (!is.vector(y)) y <- y[, 1] } if (is.null(weights)) weights <- rep(1, dim(x)[1]) if (is.factor(y)) { lev <- levels(y) theDots <- list(...) if (all(names(theDots) != "glm")) stop("must declare a binomal glm using the glm argument to earth") } else { lev <- NA } foo <- function(index, x, y, w, ...) { subX <- x[index, , drop = FALSE] subY <- y[index] if (is.null(w)) { fit <- earth::earth(x = subX, y = subY, ...) } else { subW <- weights[index] fit <- earth::earth(x = subX, y = subY, weights = subW, ...) } fit$index <- index fit } oobFoo <- function(fit, x, y, lev) { index <- fit$index subX <- x[-index, , drop = FALSE] subY <- y[-index] predY <- if (is.null(fit$levels)) predict(fit, subX) else predict(fit, subX, type = "class") postResample(predY, subY) } btSamples <- createResample(y, times = B) btFits <- lapply(btSamples, foo, x = x, y = y, w = weights, ...) oobList <- lapply(btFits, oobFoo, x = x, y = y, lev = lev) oob <- matrix(unlist(oobList), ncol = length(oobList[[1]]), byrow = TRUE) colnames(oob) <- names(oobList[[1]]) if (keepX) x <- x else x <- NULL structure( list( fit = btFits, B = B, oob = oob, summary = summary, call = funcCall, levels = lev, x = x, weights = !is.null(weights) ), class = "bagEarth" ) } #' @rdname bagEarth #' @method bagEarth formula #' @importFrom stats contrasts model.matrix model.response model.weights na.omit #' @export "bagEarth.formula" <- function (formula, data = NULL, B = 50, summary = mean, keepX = TRUE, ..., subset, weights = NULL, na.action = na.omit) { funcCall <- match.call(expand.dots = TRUE) if (!inherits(formula, "formula")) stop("method is only for formula objects") m <- match.call(expand.dots = FALSE) mIndex <- match(c("formula", "data", "subset", "weights", "na.action"), names(m), 0) m <- m[c(1, mIndex)] m$... <- NULL m$na.action <- na.action m[[1]] <- as.name("model.frame") m <- eval(m, parent.frame()) Terms <- attr(m, "terms") attr(Terms, "intercept") <- 0 y <- model.response(m) w <- model.weights(m) x <- model.matrix(Terms, m, contrasts) cons <- attr(x, "contrast") xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] out <- bagEarth.default(x, y, w, B = B, summary = summary, keepX = keepX, ...) out$call <- funcCall out } #' Predicted values based on bagged Earth and FDA models #' #' #' @aliases predict.bagEarth #' @param object Object of class inheriting from \code{bagEarth} #' @param newdata An optional data frame or matrix in which to look for #' variables with which to predict. If omitted, the fitted values are used #' (see note below). #' @param type The type of prediction. For bagged \code{\link[earth]{earth}} #' regression model, \code{type = "response"} will produce a numeric vector of #' the usual model predictions. \code{\link[earth]{earth}} also allows the user #' to fit generalized linear models. In this case, \code{type = "response"} #' produces the inverse link results as a vector. In the case of a binomial #' generalized linear model, \code{type = "response"} produces a vector of #' probabilities, \code{type = "class"} generates a factor vector and #' \code{type = "prob"} produces a two-column matrix with probabilities for #' both classes (averaged across the individual models). Similarly, for bagged #' \code{\link[mda]{fda}} models, \code{type = "class"} generates a factor #' vector and \code{type = "probs"} outputs a matrix of class probabilities. #' @param \dots not used #' @return A vector of predictions (for regression or \code{type = "class"}) #' or a data frame of class probabilities. By default, when the model #' predicts a number, a vector of numeric predictions is returned. When #' a classification model is used, the default prediction is a factor vector #' of classes. #' @note If the predictions for the original training set are needed, there are #' two ways to calculate them. First, the original data set can be predicted by #' each bagged earth model. Secondly, the predictions from each bootstrap #' sample could be used (but are more likely to overfit). If the original call #' to \code{bagEarth} or \code{bagFDA} had \code{keepX = TRUE}, the first #' method is used, otherwise the values are calculated via the second method. #' @author Max Kuhn #' @seealso \code{\link{bagEarth}} #' @keywords regression #' @method predict bagEarth #' @export #' @examples #' #' \dontrun{ #' data(trees) #' ## out of bag predictions vs just re-predicting the training set #' set.seed(655) #' fit1 <- bagEarth(Volume ~ ., data = trees, keepX = TRUE) #' set.seed(655) #' fit2 <- bagEarth(Volume ~ ., data = trees, keepX = FALSE) #' hist(predict(fit1) - predict(fit2)) #' } #' #' @export predict.bagEarth "predict.bagEarth" <- function(object, newdata = NULL, type = NULL, ...) { if(is.null(type)) { type <- if (all(is.na(object$levels))) "response" else "class" } if (!any(type %in% c("response", "class", "prob"))) stop("type must be either response, class or prob", call. = FALSE) requireNamespaceQuietStop("earth") ## get oob predictions getTrainPred <- function(x) { oobIndex <- seq(along = x$fitted.values) oobIndex <- oobIndex[!(oobIndex %in% unique(x$index))] data.frame(pred = x$fitted.values[oobIndex], sample = oobIndex) } if (is.null(newdata) & !is.null(object$x)) newdata <- object$x if (is.null(newdata)) { pred <- lapply(object$fit, getTrainPred) pred <- rbind.fill(pred) out <- ddply(pred, .(sample), function(x) object$summary(x$pred))$V1 } else { pred <- lapply(object$fit, function(x, y) { if (is.null(x$glm.list)) predict(x, newdata = y) else predict(x, newdata = y, type = "response") }, y = newdata) out <- aggregate_pred(pred, object$levels, object$summary) } if (type == "class") { out <- object$levels[apply(out, 1, which.max)] out <- factor(out, levels = object$levels) } out } #' @rdname bagEarth #' @export print.bagEarth <- function (x, ...) { cat("\nCall:\n", deparse(x$call), "\n\n", sep = "") if (!is.null(x$x)) cat("Data:\n # variables:\t", dim(x$x)[2], "\n # samples:\t", dim(x$x)[1], "\n") if (x$weights) cat("case weights used\n") cat("\nB:", x$B, "\n") invisible(x) } #' Summarize a bagged earth or FDA fit #' #' The function shows a summary of the results from a bagged earth model #' #' The out-of-bag statistics are summarized, as well as the distribution of the #' number of model terms and number of variables used across all the bootstrap #' samples. #' #' @aliases summary.bagEarth summary.bagFDA #' @param object an object of class "bagEarth" or "bagFDA" #' @param \dots optional arguments (not used) #' @return a list with elements \item{modelInfo}{a matrix with the number of #' model terms and variables used} \item{oobStat }{a summary of the out-of-bag #' statistics} \item{bmarsCall }{the original call to \code{bagEarth}} #' @author Max Kuhn #' @keywords manip #' @method summary bagEarth #' @export #' @examples #' #' \dontrun{ #' data(trees) #' set.seed(9655) #' fit <- bagEarth(trees[,-3], trees[3]) #' summary(fit) #' } #' #' @method summary bagEarth #' @export summary.bagEarth "summary.bagEarth" <- function(object, ...) { requireNamespaceQuietStop("earth") oobStat <- apply(object$oob, 2, function(x) quantile(x, probs = c(0, 0.025, .25, .5, .75, .975, 1))) numTerms <- unlist(lapply(object$fit, function(x) length(x$selected.terms))) numVar <- unlist(lapply( object$fit, function(x) { imp <- rownames(earth::evimp(x, trim = FALSE)) imp <- imp[!grepl("-unused", imp)] length(imp) })) modelInfo <- cbind(numTerms, numVar) colnames(modelInfo) <- c("Num Terms", "Num Variables") out <- list(modelInfo = modelInfo, oobStat = oobStat, bagEarthCall = object$call) class(out) <- "summary.bagEarth" out } #' @importFrom stats quantile #' @export "print.summary.bagEarth" <- function(x, digits = max(3, getOption("digits") - 3), ...) { cat("\nCall:\n", deparse(x$bagEarthCall), "\n\n", sep = "") oobStat <- apply(x$oob, 2, function(x) quantile(x, probs = c(0, 0.025, .5, .975, 1))) cat("Out of bag statistics:\n\n") print(x$oobStat, digits = digits) cat("\nModel Selection Statistics:\n\n") print(summary(x$modelInfo)) cat("\n") } # Go from a list of predictions (of various forms) to a summarized # vector or matrix depending on prediction type aggregate_pred <- function(x, lvl, summ) { # classification first if(!all(is.na(lvl))) { if(length(lvl) == 2) { x <- lapply(x, function(x) cbind(x, 1 - x)) } x <- simplify2array(x) colnames(x) <- lvl out <- apply(x, c(1,2), summ) out <- t(apply(out, 1, function(x) x/sum(x))) out <- as.data.frame(out) } else { # regression out <- matrix(unlist(x), ncol = length(x)) out <- apply(out, 1, summ, na.rm = TRUE) out <- as.vector(out) } out } caret/R/classLevels.R0000644000176200001440000000135613153613153014162 0ustar liggesusers #' @export levels.train <- function(x, ...) { if(any(names(x) == "levels")) { out <- x$levels attributes(out) <- NULL } else { if(x$modelType == "Classification") { if(!isS4(x$finalModel) && !is.null(x$finalModel$obsLevels)) return(x$finalModel$obsLevels) if(is.null(x$modelInfo)) { code <- getModelInfo(x$method, regex = FALSE)[[1]] } else code <- x$modelInfo if(!is.null(code$levels)){ checkInstall(code$library) for(i in seq(along = code$library)) do.call("requireNamespaceQuietStop", list(package = code$library[i])) out <- code$levels(x$finalModel, ...) } else out <- NULL } else out <- NULL } out } caret/R/negPredValue.R0000644000176200001440000000414713153613153014264 0ustar liggesusers#' @rdname sensitivity #' @export negPredValue <- function(data, ...){ UseMethod("negPredValue") } #' @rdname sensitivity #' @export "negPredValue.default" <- function(data, reference, negative = levels(reference)[2], prevalence = NULL, ...) { if(!is.factor(reference) | !is.factor(data)) stop("input data must be a factor") if(length(unique(c(levels(reference), levels(data)))) != 2) stop("input data must have the same two levels") lvls <- levels(data) if(is.null(prevalence)) prevalence <- mean(reference == lvls[lvls != negative]) sens <- sensitivity(data, reference, lvls[lvls != negative]) spec <- specificity(data, reference, negative) (spec * (1-prevalence))/(((1-sens)*prevalence) + ((spec)*(1-prevalence))) } #' @rdname sensitivity #' @export "negPredValue.table" <- function(data, negative = rownames(data)[-1], prevalence = NULL, ...) { ## "truth" in columns, predictions in rows if(!all.equal(nrow(data), ncol(data))) stop("the table must have nrow = ncol") if(!all.equal(rownames(data), colnames(data))) stop("the table must the same groups in the same order") if(nrow(data) > 2) { tmp <- data data <- matrix(NA, 2, 2) colnames(data) <- rownames(data) <- c("pos", "neg") negCol <- which(colnames(tmp) %in% negative) posCol <- which(!(colnames(tmp) %in% negative)) data[1, 1] <- sum(tmp[posCol, posCol]) data[1, 2] <- sum(tmp[posCol, negCol]) data[2, 1] <- sum(tmp[negCol, posCol]) data[2, 2] <- sum(tmp[negCol, negCol]) data <- as.table(data) negative <- "neg" rm(tmp) } positive <- colnames(data)[colnames(data) != negative] if(is.null(prevalence)) prevalence <- sum(data[, positive])/sum(data) sens <- sensitivity(data, positive) spec <- specificity(data, negative) (spec * (1-prevalence))/(((1-sens)*prevalence) + ((spec)*(1-prevalence))) } #' @rdname sensitivity #' @export "negPredValue.matrix" <- function(data, negative = rownames(data)[-1], prevalence = NULL, ...) { data <- as.table(data) negPredValue.table(data, prevalence = prevalence) } caret/R/createResample.R0000644000176200001440000000110013201067660014621 0ustar liggesusers #' @rdname createDataPartition #' @export createResample <- function(y, times = 10, list = TRUE) { if (class(y)[1] == "Surv") y <- y[, "time"] trainIndex <- matrix(0, ncol = times, nrow = length(y)) out <- apply( trainIndex, 2, function(data) { index <- seq(along = data) out <- sort(sample(index, size = length(index), replace = TRUE)) out } ) if (list) { out <- as.data.frame(out) attributes(out) <- NULL names(out) <- prettySeq(out) } else { colnames(out) <- prettySeq(1:ncol(out)) } out } caret/R/panel.needle.R0000644000176200001440000000517213153613153014234 0ustar liggesusers#' Needle Plot Lattice Panel #' #' A variation of \code{panel.dotplot} that plots horizontal lines from zero to #' the data point. #' #' Creates (possibly grouped) needleplot of \code{x} against \code{y} or vice #' versa #' #' @param x,y variables to be plotted in the panel. Typically y is the 'factor' #' @param horizontal logical. If FALSE, the plot is `transposed' in the sense #' that the behaviours of x and y are switched. x is now the `factor'. #' Interpretation of other arguments change accordingly. See documentation of #' \code{bwplot} for a fuller explanation. #' @param pch,col,lty,lwd,col.line graphical parameters #' @param levels.fos locations where reference lines will be drawn #' @param groups grouping variable (affects graphical parameters) #' @param \dots extra parameters, passed to \code{panel.xyplot} which is #' responsible for drawing the foreground points (\code{panel.dotplot} only #' draws the background reference lines). #' @author Max Kuhn, based on \code{\link[lattice]{panel.dotplot}} by Deepayan #' Sarkar #' @seealso \code{\link{dotplot}} #' @keywords graphs #' @export panel.needle "panel.needle" <- function (x, y, horizontal = TRUE, pch = if (is.null(groups)) dot.symbol$pch else sup.symbol$pch, col = if (is.null(groups)) dot.symbol$col else sup.symbol$col, lty = dot.line$lty, lwd = dot.line$lwd, col.line = dot.line$col, levels.fos = NULL, groups = NULL, ...) { #adapted from panel.dotplot in lattice x <- as.numeric(x) y <- as.numeric(y) dot.line <- trellis.par.get("dot.line") dot.symbol <- trellis.par.get("dot.symbol") sup.symbol <- trellis.par.get("superpose.symbol") if (horizontal) { yscale <- extendrange(y, f = .2) if (is.null(levels.fos)) levels.fos <- floor(yscale[2]) - ceiling(yscale[1]) + 1 panel.abline(v = 0, col =1, lty = 1, lwd = 1) pch <- rep(pch, length(x)) pch <- ifelse(x == 0, NA, pch) for(i in seq(along=x)) lsegments(x[i], y[i], 0, y[i]) if (is.null(groups)) panel.xyplot(x = x, y = y, col = col, pch = pch, ...) else panel.superpose(x = x, y = y, groups = groups, col = col, pch = pch, ...) } else { xscale <- extendrange(x, f = .2) if (is.null(levels.fos)) levels.fos <- floor(xscale[2]) - ceiling(xscale[1]) + 1 panel.abline(h = 0, col = col.line, lty = lty, lwd = lwd) pch <- rep(pch, length(x)) pch <- ifelse(x == 0, NA, pch) if (is.null(groups))panel.xyplot(x = x, y = y, col = col, pch = pch, ...) else panel.superpose(x = x, y = y, groups = groups, col = col, pch = pch, ...) } } caret/R/print.train.R0000644000176200001440000003153013162744072014154 0ustar liggesusersstringFunc <- function (x) { if (!is.character(x)) x <- format(x) numElements <- length(x) out <- if (length(x) > 0) { switch(min(numElements, 3), x, paste(x, collapse = " and "), { x <- paste0(x, c(rep(",", numElements - 2), " and", "")) paste(x, collapse = " ") }) } else "" out } #' Print Method for the train Class #' #' Print the results of a \code{\link{train}} object. #' #' The table of complexity parameters used, their resampled performance and a #' flag for which rows are optimal. #' #' @param x an object of class \code{\link{train}}. #' @param printCall a logical to print the call at the top of the output #' @param details a logical to show print or summary methods for the final #' model. In some cases (such as \code{gbm}, \code{knn}, \code{lvq}, naive #' Bayes and bagged tree models), no information will be printed even if #' \code{details = TRUE} #' @param selectCol a logical whether to add a column with a star next to the #' selected parameters #' @param showSD a logical whether to show the standard deviation of the #' resampling results within parentheses (e.g. "4.24 (0.493)") #' @param \dots options passed to \code{\link[base]{format}} #' @return A matrix with the complexity parameters and performance (invisibly). #' @author Max Kuhn #' @seealso \code{\link{train}} #' @keywords print #' @method print train #' @export #' @examples #' #' \dontrun{ #' data(iris) #' TrainData <- iris[,1:4] #' TrainClasses <- iris[,5] #' #' options(digits = 3) #' #' library(klaR) #' rdaFit <- train(TrainData, TrainClasses, method = "rda", #' control = trainControl(method = "cv")) #' rdaFit #' print(rdaFit, showSD = TRUE) #' } #' #' @export print.train "print.train" <- function(x, printCall = FALSE, details = FALSE, selectCol = FALSE, showSD = FALSE, ...) { if(!is.null(x$modelInfo$label)) cat(x$modelInfo$label, "\n\n") if(printCall) printCall(x$call) if(!is.null(x$trainingData)) { chDim <- dim(x$trainingData) chDim[2] <- chDim[2] - 1 if(x$modelType == "Classification") { lev <- levels(x) if(is.character(lev)) chDim <- c(chDim, length(lev)) } else lev <- NULL chDim <- format(chDim) cat(chDim[1], " samples", sep = "") if(!is.null(x$control$indexFinal)) cat(",", length(x$control$indexFinal), "used for final model\n") else cat("\n") cat(chDim[2], " predictor", ifelse(chDim[2] > 1, "s\n", "\n"), sep = "") if(is.character(lev)){ cat(chDim[3], "classes:", paste("'", lev, "'", sep = "", collapse = ", "), "\n") } cat("\n") } if(!is.null(x$preProc)){ pp_list(x$preProc$method) } else { if(inherits(x, "train.recipe")) { step_names <- function(x) gsub("^step_", "", class(x)[1]) steps_used <- unlist(lapply(x$recipe$steps, step_names)) ppText <- paste("Recipe steps:", paste(steps_used, collapse = ", ")) cat(truncateText(ppText), "\n") } else cat("No pre-processing\n") } if(!is.null(x$control$index)) { resampleN <- unlist(lapply(x$control$index, length)) numResamp <- length(resampleN) resampText <- resampName(x) cat("Resampling:", resampText, "\n") if(x$control$method != "none") { outLabel <- x$metric resampleN <- as.character(resampleN) if(numResamp > 5) resampleN <- c(resampleN[1:6], "...") cat("Summary of sample sizes:", paste(resampleN, collapse = ", "), "\n") } } if(!is.null(x$control$sampling)) { cat("Addtional sampling using ") cat(switch(x$control$sampling$name, down = "down-sampling", up = "up-sampling", smote = "SMOTE", rose = "ROSE", custom = "a custom function")) if(!is.null(x$preProc)) { if(x$control$sampling$first) cat(" prior to pre-processing") else cat(" after to pre-processing") } cat("\n\n") } if(x$control$method != "none") { tuneAcc <- x$results tuneAcc <- tuneAcc[, names(tuneAcc) != "parameter"] cat("Resampling results") if(dim(tuneAcc)[1] > 1) cat(" across tuning parameters") if(showSD) cat(" (values below are 'mean (sd)')") cat(":\n\n") if(dim(tuneAcc)[1] > 1) { numParam <- length(x$bestTune) finalTune <- x$bestTune optValues <- paste(names(finalTune), "=", format(finalTune, ...)) optString <- paste0("The final ", ifelse(numParam > 1, "values", "value"), " used for the model ", ifelse(numParam > 1, "were ", "was "), stringFunc(optValues), ".") finalTune$Selected <- "*" ## See https://stat.ethz.ch/pipermail/r-help/2016-July/440230.html if(any(names(tuneAcc) %in% "method")) names(tuneAcc)[names(tuneAcc) %in% "method"] <- ".method" if(any(names(finalTune) %in% "method")) names(finalTune)[names(finalTune) %in% "method"] <- ".method" tuneAcc <- merge(tuneAcc, finalTune, all.x = TRUE) if(any(names(tuneAcc) %in% ".method")) names(tuneAcc)[names(tuneAcc) %in% ".method"] <- "method" tuneAcc$Selected[is.na(tuneAcc$Selected)] <- "" } else optString <- "" sdCols <- grep("SD$", colnames(tuneAcc)) if(showSD) { sdCheck <- unlist(lapply(tuneAcc[, sdCols, drop = FALSE], function(u) all(is.na(u)))) if(any(sdCheck)) { rmCols <- names(sdCheck)[sdCheck] tuneAcc <- tuneAcc[, !(names(tuneAcc) %in% rmCols)] } } else { if(length(sdCols) > 0) tuneAcc <- tuneAcc[, -sdCols, drop = FALSE] } params <- names(x$bestTune) if(!all(params == "parameter")){ numVals <- apply(tuneAcc[, params, drop = FALSE], 2, function(x) length(unique(x))) if(any(numVals < 2)) { constString <- NULL for(i in seq(along = numVals)) { if(numVals[i] == 1) constString <- c(constString, paste0("Tuning parameter '", names(numVals)[i], "' was held constant at a value of ", stringFunc(tuneAcc[1,names(numVals)[i]]))) } discard <- names(numVals)[which(numVals == 1)] tuneAcc <- tuneAcc[, !(names(tuneAcc) %in% discard), drop = FALSE] } else constString <- NULL } else constString <- NULL tuneAcc <- tuneAcc[,!grepl("Apparent$|Optimism$", names(tuneAcc)), drop = FALSE] colnames(tuneAcc)[colnames(tuneAcc) == ".B"] <- "Resamples" nms <- names(tuneAcc)[names(tuneAcc) %in% params] sort_args <- vector(mode = "list", length = length(nms)) for(i in seq(along = nms)) { sort_args[[i]] <- tuneAcc[, nms[i]] } tune_ord <- do.call("order", sort_args) if(!is.null(tune_ord)) tuneAcc <- tuneAcc[tune_ord,,drop = FALSE] theDots <- list(...) theDots$x <- tuneAcc # if(!(any(names(theDots) == "digits"))) theDots$digits <- min(3, getOption("digits")) printMat <- do.call("format.data.frame", theDots) printMat <- as.matrix(printMat) rownames(printMat) <- rep("", dim(printMat)[1]) if(showSD){ sdCols <- grep("SD$", colnames(printMat), value = TRUE) sd_dat <- printMat[, sdCols, drop = FALSE] printMat <- printMat[, !(colnames(printMat) %in% sdCols), drop = FALSE] for(col_name in sdCols) { not_sd <- gsub("SD$", "", col_name) if(any(colnames(printMat) == not_sd)) { printMat[, not_sd] <- paste0(printMat[, not_sd], " (", sd_dat[, col_name], ")") } } } if(!selectCol) printMat <- printMat[, colnames(printMat) != "Selected", drop = FALSE] print(printMat, quote = FALSE, print.gap = 2) cat("\n") if(!is.null(constString)){ cat(truncateText(paste(constString, collapse = "\n"))) cat("\n") } if(dim(tuneAcc)[1] > 1) { if(is.null(x$update)) { met <- paste(x$metric, "was used to select the optimal model using") if(is.function(x$control$selectionFunction)) { met <- paste(met, " a custom selection rule.\n") } else { met <- paste(met, switch(x$control$selectionFunction, best = paste( "the", ifelse(x$maximize, "largest", "smallest"), "value.\n"), oneSE = " the one SE rule.\n", tolerance = " a tolerance rule.\n")) } } else { met <- paste("The tuning", ifelse(ncol(x$bestTune) > 1, "parameters", "parameter"), "was set manually.\n") } cat(truncateText(met)) } cat(truncateText(optString)) if(nzchar(optString)) cat("\n") } else printMat <- NULL if(details) { if(!(x$method %in% c("gbm", "treebag", "nb", "lvq", "knn"))) { cat("\n----------------------------------------------------------\n") cat("\nThe final model:\n\n") switch(x$method, lm =, nnet =, multinom =, pls =, earth =, lmStepAIC =, bagEarth =, bagFDA = print(summary(x$finalModel)), rpart =, ctree =, ctree2=, cforest =, glmboost =, gamboost =, blackboost =, ada =, randomForest =, pcaNNet =, svmradial =, svmpoly =, svmRadial =, svmPoly =, rvmRadial =, rvmPoly =, lssvmRadial =, lssvmPoly =, gaussprRadial =, gaussprPoly =, enet =, lasso =, LMT =, JRip =, lda =, rda =, pamr =, gpls =, J48 =, ppr = print(x$finalModel), fda = { print(x$finalModel) cat("\n Summary of Terms\n\n") print(x$finalModel$fit) }) } } invisible(printMat) } truncateText <- function(x){ if(length(x) > 1) x <- paste(x, collapse = "") w <- options("width")$width if(nchar(x) <= w) return(x) cont <- TRUE out <- x while(cont){ tmp <- out[length(out)] tmp2 <- substring(tmp, 1, w) spaceIndex <- gregexpr("[[:space:]]", tmp2)[[1]] stopIndex <- spaceIndex[length(spaceIndex) - 1] - 1 tmp <- c(substring(tmp2, 1, stopIndex), substring(tmp, stopIndex + 1)) out <- if(length(out) == 1) tmp else c(out[1:(length(x)-1)], tmp) if(all(nchar(out) <= w)) cont <- FALSE } paste(out, collapse = "\n") } pp_list <- function(x) { if(is.list(x)) { pp <- unlist(lapply(x, length)) pp <- pp[pp > 0] if(length(pp) > 0) { names(pp) <- gsub("BoxCox", "Box-Cox transformation", names(pp)) names(pp) <- gsub("YeoJohnson", "Yeo-Johnson transformation", names(pp)) names(pp) <- gsub("expoTrans", "exponential transformation", names(pp)) names(pp) <- gsub("scale", "scaled", names(pp)) names(pp) <- gsub("center", "centered", names(pp)) names(pp) <- gsub("pca", "principal component signal extraction", names(pp)) names(pp) <- gsub("ica", "independent component signal extraction", names(pp)) names(pp) <- gsub("spatialSign", "spatial sign transformation", names(pp)) names(pp) <- gsub("knnImpute", "nearest neighbor imputation", names(pp)) names(pp) <- gsub("bagImpute", "bagged tree imputation", names(pp)) names(pp) <- gsub("medianImpute", "median imputation", names(pp)) names(pp) <- gsub("range", "re-scaling to [0, 1]", names(pp)) } else pp <- "None" ppText <- paste("Pre-processing:", paste0(names(pp), " (", pp, ")", collapse = ", ")) cat(truncateText(ppText), "\n") } else { pp <- x pp <- gsub("BoxCox", "Box-Cox transformation", pp) pp <- gsub("YeoJohnson", "Yeo-Johnson transformation", pp) pp <- gsub("expoTrans", "exponential transformation", pp) pp <- gsub("scale", "scaled", pp) pp <- gsub("center", "centered", pp) pp <- gsub("pca", "principal component signal extraction", pp) pp <- gsub("ica", "independent component signal extraction", pp) pp <- gsub("spatialSign", "spatial sign transformation", pp) pp <- gsub("knnImpute", "nearest neighbor imputation", pp) pp <- gsub("bagImpute", "bagged tree imputation", pp) pp <- gsub("medianImpute", "median imputation", pp) pp <- gsub("range", "re-scaling to [0, 1]", pp) if(length(pp) == 0) pp <- "None" ppText <- paste("Pre-processing:", paste(pp, collapse = ", ")) cat(truncateText(ppText), "\n") } invisible(NULL) } caret/R/resamples.R0000644000176200001440000014710713173653472013714 0ustar liggesusers#' Collation and Visualization of Resampling Results #' #' These functions provide methods for collection, analyzing and visualizing a #' set of resampling results from a common data set. #' #' The ideas and methods here are based on Hothorn et al. (2005) and Eugster et #' al. (2008). #' #' The results from \code{\link{train}} can have more than one performance #' metric per resample. Each metric in the input object is saved. #' #' \code{resamples} checks that the resampling results match; that is, the #' indices in the object \code{trainObject$control$index} are the same. Also, #' the argument \code{\link{trainControl}} \code{returnResamp} should have a #' value of \code{"final"} for each model. #' #' The summary function computes summary statistics across each model/metric #' combination. #' #' @aliases resamples.default resamples summary.resamples sort.resamples #' as.matrix.resamples as.data.frame.resamples modelCor #' @param x a list of two or more objects of class \code{\link{train}}, #' \code{\link{sbf}} or \code{\link{rfe}} with a common set of resampling #' indices in the \code{control} object. For \code{sort.resamples}, it is an #' object generated by \code{resamples}. #' @param modelNames an optional set of names to give to the resampling results #' @param object an object generated by \code{resamples} #' @param metric a character string for the performance measure used to sort or #' computing the between-model correlations #' @param decreasing logical. Should the sort be increasing or decreasing? #' @param FUN a function whose first argument is a vector and returns a scalar, #' to be applied to each model's performance measure. #' @param row.names,optional not currently used but included for consistency #' with \code{as.data.frame} #' @param \dots only used for \code{sort} and \code{modelCor} and captures #' arguments to pass to \code{sort} or \code{FUN}. #' @return For \code{resamples}: an object with class \code{"resamples"} with #' elements \item{call }{the call} \item{values }{a data frame of results where #' rows correspond to resampled data sets and columns indicate the model and #' metric} \item{models }{a character string of model labels} \item{metrics }{a #' character string of performance metrics} \item{methods }{a character string #' of the \code{\link{train}} \code{method} argument values for each model } #' For \code{sort.resamples} a character string in the sorted order is #' generated. \code{modelCor} returns a correlation matrix. #' @author Max Kuhn #' @seealso \code{\link{train}}, \code{\link{trainControl}}, #' \code{\link{diff.resamples}}, \code{\link{xyplot.resamples}}, #' \code{\link{densityplot.resamples}}, \code{\link{bwplot.resamples}}, #' \code{\link{splom.resamples}} #' @references Hothorn et al. The design and analysis of benchmark experiments. #' Journal of Computational and Graphical Statistics (2005) vol. 14 (3) pp. #' 675-699 #' #' Eugster et al. Exploratory and inferential analysis of benchmark #' experiments. Ludwigs-Maximilians-Universitat Munchen, Department of #' Statistics, Tech. Rep (2008) vol. 30 #' @keywords models #' @examples #' #' #' data(BloodBrain) #' set.seed(1) #' #' ## tmp <- createDataPartition(logBBB, #' ## p = .8, #' ## times = 100) #' #' ## rpartFit <- train(bbbDescr, logBBB, #' ## "rpart", #' ## tuneLength = 16, #' ## trControl = trainControl( #' ## method = "LGOCV", index = tmp)) #' #' ## ctreeFit <- train(bbbDescr, logBBB, #' ## "ctree", #' ## trControl = trainControl( #' ## method = "LGOCV", index = tmp)) #' #' ## earthFit <- train(bbbDescr, logBBB, #' ## "earth", #' ## tuneLength = 20, #' ## trControl = trainControl( #' ## method = "LGOCV", index = tmp)) #' #' ## or load pre-calculated results using: #' ## load(url("http://caret.r-forge.r-project.org/exampleModels.RData")) #' #' ## resamps <- resamples(list(CART = rpartFit, #' ## CondInfTree = ctreeFit, #' ## MARS = earthFit)) #' #' ## resamps #' ## summary(resamps) #' #' @export resamples "resamples" <- function(x, ...) UseMethod("resamples") #' @rdname resamples #' @method resamples default #' @export resamples.default <- function(x, modelNames = names(x), ...) { ## Do a lot of checkin of the object types and make sure ## that they actually used the samples samples in the resamples if(length(x) < 2) stop("at least two train objects are needed") classes <- unlist(lapply(x, function(x) class(x)[1])) # if(!all(classes %in% c("sbf", "rfe", "train"))) stop("all objects in x must of class train, sbf or rfe") if(is.null(modelNames)){ modelNames <- well_numbered("Model", length(x)) } else { if(any(modelNames == "")) { no_name <- which(modelNames == "") modelNames[no_name] <- well_numbered("Model", length(x))[no_name] } } numResamp <- unlist(lapply(x, function(x) length(x$control$index))) if(length(unique(numResamp)) > 1) stop("There are different numbers of resamples in each model") for(i in 1:numResamp[1]){ indices <- lapply(x, function(x, i) sort(x$control$index[[1]]), i = i) uniqueIndex <- length(table(table(unlist(indices)))) if(length(uniqueIndex) > 1) stop("The samples indices are not equal across resamples") } getTimes <- function(x){ out <- rep(NA, 3) if(all(names(x) != "times")) return(out) if(any(names(x$times) == "everything")) out[1] <- x$times$everything[3] if(any(names(x$times) == "final")) out[2] <- x$times$final[3] if(any(names(x$times) == "prediction")) out[3] <- x$times$prediction[3] out } rs_values <- vector(mode = "list", length = length(x)) for(i in seq(along = x)) { if(class(x[[i]])[1] == "rfe" && x[[i]]$control$returnResamp == "all"){ warning(paste0("'", modelNames[i], "' did not have 'returnResamp=\"final\"; the optimal subset is used")) } if(class(x[[i]])[1] == "train" && x[[i]]$control$returnResamp == "all"){ warning(paste0("'", modelNames[i], "' did not have 'returnResamp=\"final\"; the optimal tuning parameters are used")) } if(class(x[[i]])[1] == "sbf" && x[[i]]$control$returnResamp == "all"){ warning(paste0("'", modelNames[i], "' did not have 'returnResamp=\"final\"; the optimal subset is used")) } rs_values[[i]] <- get_resample_perf(x[[i]]) } all_names <- lapply(rs_values, function(x) names(x)[names(x) != "Resample"]) all_names <- table(unlist(all_names)) if(length(all_names) == 0 || any(all_names == 0)) { warning("Could not find performance measures") } if(any(all_names < length(x))) { warning(paste("Some performance measures were not computed for each model:", paste(names(all_names)[all_names < length(x)], collapse = ", "))) } pNames <- names(all_names)[all_names == length(x)] rs_values <- lapply(rs_values, function(x, n) x[,n,drop = FALSE], n = c(pNames, "Resample")) for(mod in seq(along = modelNames)) { names(rs_values[[mod]])[names(rs_values[[mod]]) %in% pNames] <- paste(modelNames[mod], names(rs_values[[mod]])[names(rs_values[[mod]]) %in% pNames], sep = "~") out <- if(mod == 1) rs_values[[mod]] else merge(out, rs_values[[mod]]) } timings <- do.call("rbind", lapply(x, getTimes)) colnames(timings) <- c("Everything", "FinalModel", "Prediction") out <- structure( list( call = match.call(), values = out, models = modelNames, metrics = pNames, timings = as.data.frame(timings), methods = unlist(lapply(x, function(x) x$method))), class = "resamples") out } #' @rdname resamples #' @method sort resamples #' @export sort.resamples <- function(x, decreasing = FALSE, metric = x$metric[1], FUN = mean, ...) { dat <- x$values[, grep(paste("~", metric[1], sep = ""), names(x$values))] colnames(dat) <- gsub(paste("~", metric[1], sep = ""), "", colnames(dat)) stats <- apply(dat, 2, FUN, ...) names(sort(stats, decreasing = decreasing)) } #' @rdname resamples #' @method summary resamples #' @export summary.resamples <- function(object, metric = object$metrics, ...){ vals <- object$values[, names(object$values) != "Resample", drop = FALSE] out <- vector(mode = "list", length = length(metric)) for(i in seq(along = metric)) { tmpData <- vals[, grep(paste("~", metric[i], sep = ""), names(vals), fixed = TRUE), drop = FALSE] out[[i]] <- do.call("rbind", lapply(tmpData, function(x) summary(x)[1:6])) naSum <- matrix(unlist(lapply(tmpData, function(x) sum(is.na(x)))), ncol = 1) colnames(naSum) <- "NA's" out[[i]] <- cbind(out[[i]], naSum) rownames(out[[i]]) <- gsub(paste("~", metric[i], sep = ""), "", rownames(out[[i]]), fixed = TRUE) } names(out) <- metric out <- structure( list(values = vals, call = match.call(), statistics = out, models = object$models, metrics = metric, methods = object$methods), class = "summary.resamples") out } #' @rdname resamples #' @method as.matrix resamples #' @export as.matrix.resamples <- function(x, metric = x$metric[1], ...) { get_cols <- grepl(paste0("~", metric[1]), colnames(x$values)) if(!(any(get_cols))) stop("no columns fit that metric") out <- x$values[,get_cols,drop=FALSE] rownames(out) <- as.character(x$values$Resample) colnames(out) <- gsub(paste0("~", metric[1]), "", colnames(out)) as.matrix(out) } #' @rdname resamples #' @method as.data.frame resamples #' @export as.data.frame.resamples <- function(x, row.names = NULL, optional = FALSE, metric = x$metric[1], ...) { get_cols <- grepl(paste0("~", metric[1]), colnames(x$values)) if(!(any(get_cols))) stop("no columns fit that metric") out <- x$values[,get_cols,drop=FALSE] out$Resample <- x$values$Resample colnames(out) <- gsub(paste0("~", metric[1]), "", colnames(out)) out } #' @rdname resamples #' @importFrom stats cor #' @export modelCor <- function(x, metric = x$metric[1], ...) { dat <- x$values[, grep(paste("~", metric[1], sep = ""), names(x$values))] colnames(dat) <- gsub(paste("~", metric[1], sep = ""), "", colnames(dat)) cor(dat, ...) } #' Principal Components Analysis of Resampling Results #' #' Performs a principal components analysis on an object of class #' \code{\link{resamples}} and returns the results as an object with classes #' \code{prcomp.resamples} and \code{prcomp}. #' #' The principal components analysis treats the models as variables and the #' resamples are realizations of the variables. In this way, we can use PCA to #' "cluster" the assays and look for similarities. Most of the methods for #' \code{\link[stats]{prcomp}} can be used, although custom \code{print} and #' \code{plot} methods are used. #' #' The plot method uses lattice graphics. When \code{what = "scree"} or #' \code{what = "cumulative"}, \code{\link[lattice:xyplot]{barchart}} is used. #' When \code{what = "loadings"} or \code{what = "components"}, either #' \code{\link[lattice:xyplot]{xyplot}} or \code{\link[lattice:splom]{splom}} #' are used (the latter when \code{dims} > 2). Options can be passed to these #' methods using \code{...}. #' #' When \code{what = "loadings"} or \code{what = "components"}, the plots are #' put on a common scale so that later components are less likely to be #' over-interpreted. See Geladi et al. (2003) for examples of why this can be #' important. #' #' For clustering, \code{\link[stats]{hclust}} is used to determine clusters of #' models based on the resampled performance values. #' #' @aliases prcomp.resamples cluster.resamples cluster plot.prcomp.resamples #' @param x For \code{prcomp}, an object of class \code{\link{resamples}} and #' for \code{plot.prcomp.resamples}, an object of class #' \code{plot.prcomp.resamples} #' @param metric a performance metric that was estimated for every resample #' @param what the type of plot: \code{"scree"} produces a bar chart of #' standard deviations, \code{"cumulative"} produces a bar chart of the #' cumulative percent of variance, \code{"loadings"} produces a scatterplot #' matrix of the loading values and \code{"components"} produces a scatterplot #' matrix of the PCA components #' @param dims The number of dimensions to plot when \code{what = "loadings"} #' or \code{what = "components"} #' @param \dots For \code{prcomp.resamples}, options to pass to #' \code{\link[stats]{prcomp}}, for \code{plot.prcomp.resamples}, options to #' pass to Lattice objects (see Details below) and, for #' \code{cluster.resamples}, options to pass to \code{hclust}. #' @return For \code{prcomp.resamples}, an object with classes #' \code{prcomp.resamples} and \code{prcomp}. This object is the same as the #' object produced by \code{prcomp}, but with additional elements: \item{metric #' }{the value for the \code{metric} argument} \item{call }{the call} #' #' For \code{plot.prcomp.resamples}, a Lattice object (see Details above) #' @author Max Kuhn #' @seealso \code{\link{resamples}}, \code{\link[lattice:xyplot]{barchart}}, #' \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:splom]{splom}}, #' \code{\link[stats]{hclust}} #' @references Geladi, P.; Manley, M.; and Lestander, T. (2003), "Scatter #' plotting in multivariate data analysis," J. Chemometrics, 17: 503-511 #' @keywords hplot #' @examples #' #' \dontrun{ #' #load(url("http://topepo.github.io/caret/exampleModels.RData")) #' #' resamps <- resamples(list(CART = rpartFit, #' CondInfTree = ctreeFit, #' MARS = earthFit)) #' resampPCA <- prcomp(resamps) #' #' resampPCA #' #' plot(resampPCA, what = "scree") #' #' plot(resampPCA, what = "components") #' #' plot(resampPCA, what = "components", dims = 2, auto.key = list(columns = 3)) #' #' clustered <- cluster(resamps) #' plot(clustered) #' #' } #' @export prcomp.resamples <- function(x, metric = x$metrics[1], ...) { if(length(metric) != 1) stop("exactly one metric must be given") tmpData <- x$values[, grep(paste("~", metric, sep = ""), names(x$value), fixed = TRUE), drop = FALSE] names(tmpData) <- gsub(paste("~", metric, sep = ""), "", names(tmpData), fixed = TRUE) tmpData <- as.data.frame(t(tmpData)) colnames(tmpData) <- paste("Resample", gsub(" ", "0", format(1:ncol(tmpData))), sep = "") out <- prcomp(~., data = tmpData, ...) out$metric <- metric out$call <- match.call() class(out) <- c("prcomp.resamples", "prcomp") out } #' @export "cluster" <- function(x, ...) UseMethod("cluster") #' @export cluster.default <- function(x, ...) stop("only implemented for resamples objects") #' @importFrom stats dist hclust #' @method cluster resamples #' @export cluster.resamples <- function(x, metric = x$metrics[1], ...) { if(length(metric) != 1) stop("exactly one metric must be given") tmpData <- x$values[, grep(paste("~", metric, sep = ""), names(x$value), fixed = TRUE), drop = FALSE] names(tmpData) <- gsub(paste("~", metric, sep = ""), "", names(tmpData), fixed = TRUE) tmpData <- t(tmpData) dt <- dist(tmpData) out <- hclust(dt, ...) out$metric <- metric out$call <- match.call() class(out) <- c("cluster.resamples", "hclust") out } #' @rdname prcomp.resamples #' @method plot prcomp.resamples #' @importFrom grDevices extendrange #' @export plot.prcomp.resamples <- function(x, what = "scree", dims = max(2, ncol(x$rotation)), ...) { if(length(what) > 1) stop("one plot at a time please") switch(what, scree = { barchart(x$sdev ~ paste("PC", gsub(" ", "0", format(seq(along = x$sdev))), sep = ""), ylab = "Standard Deviation", ...) }, cumulative = { barchart(cumsum(x$sdev^2)/sum(x$sdev^2) ~ paste("PC", gsub(" ", "0", format(seq(along = x$sdev))), sep = ""), ylab = "Culmulative Percent of Variance", ...) }, loadings = { panelRange <- extendrange(x$rotation[, 1:dims,drop = FALSE]) if(dims > 2) { splom(~x$rotation[, 1:dims,drop = FALSE], main = useMathSymbols(x$metric), prepanel.limits = function(x) panelRange, type = c("p", "g"), ...) } else { xyplot(PC2~PC1, data = as.data.frame(x$rotation), main = useMathSymbols(x$metric), xlim = panelRange, ylim = panelRange, type = c("p", "g"), ...) } }, components = { panelRange <- extendrange(x$x[, 1:dims,drop = FALSE]) if(dims > 2) { splom(~x$x[, 1:dims,drop = FALSE], main = useMathSymbols(x$metric), prepanel.limits = function(x) panelRange, groups = rownames(x$x), type = c("p", "g"), ...) } else { xyplot(PC2~PC1, data = as.data.frame(x$x), main = useMathSymbols(x$metric), xlim = panelRange, ylim = panelRange, groups = rownames(x$x), type = c("p", "g"), ...) } }) } #' @method print prcomp.resamples #' @export print.prcomp.resamples <- function (x, digits = max(3, getOption("digits") - 3), print.x = FALSE, ...) { printCall(x$call) cat("Metric:", x$metric, "\n") sds <- rbind(x$sdev, cumsum(x$sdev^2)/sum(x$sdev^2)) rownames(sds) <- c("Std. Dev. ", "Cum. Percent Var. ") colnames(sds) <- rep("", ncol(sds)) print(sds, digits = digits, ...) cat("\nRotation:\n") print(x$rotation, digits = digits, ...) if (print.x && length(x$x)) { cat("\nRotated variables:\n") print(x$x, digits = digits, ...) } invisible(x) } #' @rdname resamples #' @method print resamples #' @export print.resamples <- function(x, ...) { printCall(x$call) cat("Models:", paste(x$models, collapse = ", "), "\n") cat("Number of resamples:", nrow(x$values), "\n") cat("Performance metrics:", paste(x$metrics, collapse = ", "), "\n") hasTimes <- apply(x$timing, 2, function(a) !all(is.na(a))) if(any(hasTimes)) { names(hasTimes) <- gsub("FinalModel", "final model fit", names(hasTimes)) cat("Time estimates for:", paste(tolower(names(hasTimes))[hasTimes], collapse = ", "), "\n") } invisible(x) } #' @method print summary.resamples #' @export print.summary.resamples <- function(x, ...) { printCall(x$call) cat("Models:", paste(x$models, collapse = ", "), "\n") cat("Number of resamples:", nrow(x$values), "\n") cat("\n") for(i in seq(along = x$statistics)) { cat(names(x$statistics)[i], "\n") print(x$statistics[[i]]) cat("\n") } invisible(x) } #' Lattice Functions for Visualizing Resampling Results #' #' Lattice functions for visualizing resampling results across models #' #' The ideas and methods here are based on Hothorn et al. (2005) and Eugster et #' al. (2008). #' #' \code{dotplot} plots the average performance value (with two-sided #' confidence limits) for each model and metric. #' #' \code{densityplot} and \code{bwplot} display univariate visualizations of #' the resampling distributions while \code{splom} shows the pair-wise #' relationships. #' #' @aliases xyplot.resamples densityplot.resamples bwplot.resamples #' splom.resamples parallelplot.resamples dotplot.resamples #' @param x an object generated by \code{resamples} #' @param data Not used #' @param models a character string for which models to plot. Note: #' \code{xyplot} requires one or two models whereas the other methods can plot #' more than two. #' @param metric a character string for which metrics to use as conditioning #' variables in the plot. \code{splom} requires exactly one metric when #' \code{variables = "models"} and at least two when \code{variables = #' "metrics"}. #' @param variables either "models" or "metrics"; which variable should be #' treated as the scatter plot variables? #' @param panelRange a common range for the panels. If \code{NULL}, the panel #' ranges are derived from the values across all the models #' @param what for \code{xyplot}, the type of plot. Valid options are: #' "scatter" (for a plot of the resampled results between two models), #' "BlandAltman" (a Bland-Altman, aka MA plot between two models), "tTime" (for #' the total time to run \code{train} versus the metric), "mTime" (for the time #' to build the final model) or "pTime" (the time to predict samples - see the #' \code{timingSamps} options in \code{\link{trainControl}}, #' \code{\link{rfeControl}}, or \code{\link{sbfControl}}) #' @param units either "sec", "min" or "hour"; which \code{what} is either #' "tTime", "mTime" or "pTime", how should the timings be scaled? #' @param conf.level the confidence level for intervals about the mean #' (obtained using \code{\link[stats]{t.test}}) #' @param \dots further arguments to pass to either #' \code{\link[lattice:histogram]{histogram}}, #' \code{\link[lattice:histogram]{densityplot}}, #' \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:xyplot]{dotplot}} #' or \code{\link[lattice:splom]{splom}} #' @return a lattice object #' @author Max Kuhn #' @seealso \code{\link{resamples}}, \code{\link[lattice:xyplot]{dotplot}}, #' \code{\link[lattice:bwplot]{bwplot}}, #' \code{\link[lattice:histogram]{densityplot}}, #' \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:splom]{splom}} #' @references Hothorn et al. The design and analysis of benchmark experiments. #' Journal of Computational and Graphical Statistics (2005) vol. 14 (3) pp. #' 675-699 #' #' Eugster et al. Exploratory and inferential analysis of benchmark #' experiments. Ludwigs-Maximilians-Universitat Munchen, Department of #' Statistics, Tech. Rep (2008) vol. 30 #' @keywords hplot #' @examples #' #' \dontrun{ #' #load(url("http://topepo.github.io/caret/exampleModels.RData")) #' #' resamps <- resamples(list(CART = rpartFit, #' CondInfTree = ctreeFit, #' MARS = earthFit)) #' #' dotplot(resamps, #' scales =list(x = list(relation = "free")), #' between = list(x = 2)) #' #' bwplot(resamps, #' metric = "RMSE") #' #' densityplot(resamps, #' auto.key = list(columns = 3), #' pch = "|") #' #' xyplot(resamps, #' models = c("CART", "MARS"), #' metric = "RMSE") #' #' splom(resamps, metric = "RMSE") #' splom(resamps, variables = "metrics") #' #' parallelplot(resamps, metric = "RMSE") #' #' #' } #' #' @method xyplot resamples #' @export xyplot.resamples <- function (x, data = NULL, what = "scatter", models = NULL, metric = x$metric[1], units = "min", ...) { if(!(units %in% c("min", "sec", "hour"))) stop("units should be 'sec', 'min' or 'hour'") if(!(what %in% c("scatter", "BlandAltman", "tTime", "mTime", "pTime"))) stop("the what arg should be 'scatter', 'BlandAltman', 'tTime', 'mTime' or 'pTime'") if(is.null(models)) models <- if(what %in% c("tTime", "mTime", "pTime")) x$models else x$models[1:2] if(length(metric) != 1) stop("exactly one metric must be given") if(what == "BlandAltman" & length(models) != 2) stop("exactly two model names must be given") if(what == "BlandAltman") { tmpData <- x$values[, paste(models, metric, sep ="~")] tmpData$Difference <- tmpData[,1] - tmpData[,2] tmpData$Average <- (tmpData[,1] + tmpData[,2])/2 ylm <- extendrange(c(tmpData$Difference, 0)) out <- xyplot(Difference ~ Average, data = tmpData, ylab = paste(models, collapse = " - "), ylim = ylm, main = useMathSymbols(metric), panel = function(x, y, ...) { panel.abline(h = 0, col = "darkgrey", lty = 2) panel.xyplot(x, y, ...) }) } if(what == "scatter") { tmpData <- x$values[, paste(models, metric, sep ="~")] colnames(tmpData) <- gsub(paste("~", metric, sep = ""), "", colnames(tmpData)) ylm <- extendrange(c(tmpData[,1], tmpData[,2])) out <- xyplot(tmpData[,1] ~ tmpData[,2], ylab = colnames(tmpData)[1], xlab = colnames(tmpData)[2], xlim = ylm, ylim = ylm, main = useMathSymbols(metric), panel = function(x, y, ...) { panel.abline(0, 1, col = "darkgrey", lty = 2) panel.xyplot(x, y, ...) }) } if(what %in% c("tTime", "mTime", "pTime")) { ## the following is based on ## file.show(system.file("demo/intervals.R", package = "lattice") prepanel.ci <- function(x, y, lx, ux, subscripts, ...) { x <- as.numeric(x) lx <- as.numeric(lx[subscripts]) ux <- as.numeric(ux[subscripts]) list(xlim = extendrange(c(x, ux, lx)), ylim = extendrange(y)) } panel.ci <- function(x, y, lx, ux, groups, subscripts, pch = 16, ...) { theme <- trellis.par.get() x <- as.numeric(x) y <- as.numeric(y) lx <- as.numeric(lx[subscripts]) ux <- as.numeric(ux[subscripts]) gps <- unique(groups) for(i in seq(along = gps)) { panel.arrows(lx[groups == gps[i]], y[groups == gps[i]], ux[groups == gps[i]], y[groups == gps[i]], col = theme$superpose.line$col[i], length = .01, unit = "npc", angle = 90, code = 3) panel.xyplot(x[groups == gps[i]], y[groups == gps[i]], type = "p", col = theme$superpose.symbol$col[i], cex = theme$superpose.symbol$cex[i], pch = theme$superpose.symbol$pch[i], , ...) } } tmpData <- apply(x$values[,-1], 2, function(x) { tmp <- t.test(x) c(tmp$conf.int[1], tmp$estimate, tmp$conf.int[2]) }) rownames(tmpData) <- c("lower", "point", "upper") tmpData <- tmpData[, paste(models, metric, sep ="~")] colnames(tmpData) <- gsub(paste("~", metric, sep = ""), "", colnames(tmpData)) tmpData <- data.frame(t(tmpData)) tmpData$Model <- rownames(tmpData) tm <- switch(what, tTime = x$timings[,"Everything"], mTime = x$timings[,"FinalModel"], pTime = x$timings[,"Prediction"]) lab <- switch(what, tTime = "Total Time (", mTime = "Final Model Time (", pTime = "Prediction Time (") lab <- paste(lab, units, ")", sep = "") times <- data.frame(Time = tm, Model = rownames(x$timings)) plotData <- merge(times, tmpData) if(units == "min") plotData$Time <- plotData$Time/60 if(units == "hour") plotData$Time <- plotData$Time/60/60 out <- with(plotData, xyplot(Time ~ point, lx = lower, ux = upper, xlab = useMathSymbols(metric), ylab = lab, prepanel = prepanel.ci, panel = panel.ci, groups = Model, ...)) } out } #' @rdname xyplot.resamples #' @importFrom stats median #' @method parallelplot resamples #' @export parallelplot.resamples <- function (x, data = NULL, models = x$models, metric = x$metric[1], ...) { if(length(metric) != 1) stop("exactly one metric must be given") tmpData <- x$values[, grep(paste("~", metric, sep = ""), names(x$value), fixed = TRUE), drop = FALSE] names(tmpData) <- gsub(paste("~", metric, sep = ""), "", names(tmpData), fixed = TRUE) rng <- range(unlist(lapply(lapply(tmpData, as.numeric), range, na.rm = TRUE))) prng <- pretty(rng) reord <- order(apply(tmpData, 2, median, na.rm = TRUE)) tmpData <- tmpData[, reord] parallelplot(~tmpData, common.scale = TRUE, scales = list(x = list(at = (prng-min(rng))/diff(rng), labels = prng)), xlab = useMathSymbols(metric), ...) } #' @rdname xyplot.resamples #' @importFrom grDevices extendrange #' @method splom resamples #' @export splom.resamples <- function (x, data = NULL, variables = "models", models = x$models, metric = NULL, panelRange = NULL, ...) { if(variables == "models") { if(is.null(metric)) metric <- x$metric[1] if(length(metric) != 1) stop("exactly one metric must be given") tmpData <- x$values[, grep(paste("~", metric, sep = ""), names(x$value), fixed = TRUE), drop = FALSE] names(tmpData) <- gsub(paste("~", metric, sep = ""), "", names(tmpData), fixed = TRUE) tmpData <- tmpData[, models,drop = FALSE] if(is.null(panelRange)) panelRange <- extendrange(tmpData) splom(~tmpData, panel = function(x, y) { panel.splom(x, y, ...) panel.abline(0, 1, lty = 2, col = "darkgrey") }, main = useMathSymbols(metric), prepanel.limits = function(x) panelRange, ...) } else{ if(variables == "metrics") { if(is.null(metric)) metric <- x$metric if(length(metric) < 2) stop("There should be at least two metrics") plotData <- melt(x$values, id.vars = "Resample") tmp <- strsplit(as.character(plotData$variable), "~", fixed = TRUE) plotData$Model <- unlist(lapply(tmp, function(x) x[1])) plotData$Metric <- unlist(lapply(tmp, function(x) x[2])) plotData <- subset(plotData, Model %in% models & Metric %in% metric) means <- dcast(plotData, Model ~ Metric, mean, na.rm = TRUE) splom(~means[, metric], groups = means$Model, ...) } else stop ("'variables' should be either 'models' or 'metrics'") } } #' @rdname xyplot.resamples #' @importFrom stats as.formula #' @method densityplot resamples #' @export densityplot.resamples <- function (x, data = NULL, models = x$models, metric = x$metric, ...) { plotData <- melt(x$values, id.vars = "Resample") tmp <- strsplit(as.character(plotData$variable), "~", fixed = TRUE) plotData$Model <- unlist(lapply(tmp, function(x) x[1])) plotData$Metric <- unlist(lapply(tmp, function(x) x[2])) plotData <- subset(plotData, Model %in% models & Metric %in% metric) metricVals <- unique(plotData$Metric) plotForm <- if(length(metricVals) > 1) as.formula(~value|Metric) else as.formula(~value) densityplot(plotForm, data = plotData, groups = Model, xlab = if(length(unique(plotData$Metric)) > 1) "" else metricVals, ...) } #' @rdname xyplot.resamples #' @importFrom stats as.formula #' @method bwplot resamples #' @export bwplot.resamples <- function (x, data = NULL, models = x$models, metric = x$metric, ...) { plotData <- melt(x$values, id.vars = "Resample") tmp <- strsplit(as.character(plotData$variable), "~", fixed = TRUE) plotData$Model <- unlist(lapply(tmp, function(x) x[1])) plotData$Metric <- unlist(lapply(tmp, function(x) x[2])) plotData <- subset(plotData, Model %in% models & Metric %in% metric) avPerf <- ddply(subset(plotData, Metric == metric[1]), .(Model), function(x) c(Median = median(x$value, na.rm = TRUE))) avPerf <- avPerf[order(avPerf$Median),] plotData$Model <- factor(as.character(plotData$Model), levels = avPerf$Model) metricVals <- unique(plotData$Metric) plotForm <- if(length(metricVals) > 1) as.formula(Model~value|Metric) else as.formula(Model~value) bwplot(plotForm, data = plotData, xlab = if(length(unique(plotData$Metric)) > 1) "" else metricVals, ...) } #' @rdname xyplot.resamples #' @importFrom stats aggregate as.formula median t.test #' @method dotplot resamples #' @export dotplot.resamples <- function (x, data = NULL, models = x$models, metric = x$metric, conf.level = 0.95, ...) { plotData <- melt(x$values, id.vars = "Resample") tmp <- strsplit(as.character(plotData$variable), "~", fixed = TRUE) plotData$Model <- unlist(lapply(tmp, function(x) x[1])) plotData$Metric <- unlist(lapply(tmp, function(x) x[2])) plotData <- subset(plotData, Model %in% models & Metric %in% metric) plotData$variable <- factor(as.character(plotData$variable)) plotData <- split(plotData, plotData$variable) results <- lapply(plotData, function(x, cl) { ttest <- try(t.test(x$value, conf.level = cl), silent = TRUE) if(class(ttest)[1] == "htest") { out <- c(ttest$conf.int, ttest$estimate) names(out) <- c("LowerLimit", "UpperLimit", "Estimate") } else out <- rep(NA, 3) out }, cl = conf.level) results <- do.call("rbind", results) results <- melt(results) results <- results[!is.nan(results$value),] tmp <- strsplit(as.character(results$Var1), "~", fixed = TRUE) results$Model <- unlist(lapply(tmp, function(x) x[1])) results$Metric <- unlist(lapply(tmp, function(x) x[2])) ## to avoid "no visible binding for global variable 'Var2'" Var2 <- NULL avPerf <- ddply(subset(results, Metric == metric[1] & Var2 == "Estimate"), .(Model), function(x) c(Median = median(x$value, na.rm = TRUE))) avPerf <- avPerf[order(avPerf$Median),] results$Model <- factor(as.character(results$Model), levels = avPerf$Model) metricVals <- unique(results$Metric) plotForm <- if(length(metricVals) > 1) as.formula(Model~value|Metric) else as.formula(Model~value) dotplot(plotForm, data = results, xlab = if(length(unique(plotData$Metric)) > 1) "" else metricVals, panel = function(x, y) { plotTheme <- trellis.par.get() y <- as.numeric(y) vals <- aggregate(x, list(group = y), function(x) c(min = min(x), mid = median(x), max = max(x))) panel.dotplot(vals$x[,"mid"], vals$group, pch = plotTheme$plot.symbol$pch[1], col = plotTheme$plot.symbol$col[1], cex = plotTheme$plot.symbol$cex[1]) panel.segments(vals$x[,"min"], vals$group, vals$x[,"max"], vals$group, lty = plotTheme$plot.line$lty[1], col = plotTheme$plot.line$col[1], lwd = plotTheme$plot.line$lwd[1]) len <- .03 panel.segments(vals$x[,"min"], vals$group+len, vals$x[,"min"], vals$group-len, lty = plotTheme$plot.line$lty[1], col = plotTheme$plot.line$col[1], lwd = plotTheme$plot.line$lwd[1]) panel.segments(vals$x[,"max"], vals$group+len, vals$x[,"max"], vals$group-len, lty = plotTheme$plot.line$lty[1], col = plotTheme$plot.line$col[1], lwd = plotTheme$plot.line$lwd[1]) }, sub = paste("Confidence Level:", conf.level), ...) } #' Inferential Assessments About Model Performance #' #' Methods for making inferences about differences between models #' #' The ideas and methods here are based on Hothorn et al. (2005) and Eugster et #' al. (2008). #' #' For each metric, all pair-wise differences are computed and tested to assess #' if the difference is equal to zero. #' #' When a Bonferroni correction is used, the confidence level is changed from #' \code{confLevel} to \code{1-((1-confLevel)/p)} here \code{p} is the number #' of pair-wise comparisons are being made. For other correction methods, no #' such change is used. #' #' \code{compare_models} is a shorthand function to compare two models using a #' single metric. It returns the results of \code{\link[stats]{t.test}} on the #' differences. #' #' @aliases diff.resamples summary.diff.resamples compare_models #' @param x an object generated by \code{resamples} #' @param models a character string for which models to compare #' @param metric a character string for which metrics to compare #' @param test a function to compute differences. The output of this function #' should have scalar outputs called \code{estimate} and \code{p.value} #' @param object a object generated by \code{diff.resamples} #' @param adjustment any p-value adjustment method to pass to #' \code{\link[stats]{p.adjust}}. #' @param confLevel confidence level to use for #' \code{\link{dotplot.diff.resamples}}. See Details below. #' @param digits the number of significant differences to display when printing #' @param a,b two objects of class \code{\link{train}}, \code{\link{sbf}} or #' \code{\link{rfe}} with a common set of resampling indices in the #' \code{control} object. #' @param \dots further arguments to pass to \code{test} #' @return An object of class \code{"diff.resamples"} with elements: \item{call #' }{the call} \item{difs }{a list for each metric being compared. Each list #' contains a matrix with differences in columns and resamples in rows } #' \item{statistics }{a list of results generated by \code{test}} #' \item{adjustment}{the p-value adjustment used} \item{models}{a character #' string for which models were compared.} \item{metrics }{a character string #' of performance metrics that were used} #' #' or... #' #' An object of class \code{"summary.diff.resamples"} with elements: \item{call #' }{the call} \item{table }{a list of tables that show the differences and #' p-values } #' #' ...or (for \code{compare_models}) an object of class \code{htest} resulting #' from \code{\link[stats]{t.test}}. #' @author Max Kuhn #' @seealso \code{\link{resamples}}, \code{\link{dotplot.diff.resamples}}, #' \code{\link{densityplot.diff.resamples}}, #' \code{\link{bwplot.diff.resamples}}, \code{\link{levelplot.diff.resamples}} #' @references Hothorn et al. The design and analysis of benchmark experiments. #' Journal of Computational and Graphical Statistics (2005) vol. 14 (3) pp. #' 675-699 #' #' Eugster et al. Exploratory and inferential analysis of benchmark #' experiments. Ludwigs-Maximilians-Universitat Munchen, Department of #' Statistics, Tech. Rep (2008) vol. 30 #' @keywords models #' @examples #' #' \dontrun{ #' #load(url("http://topepo.github.io/caret/exampleModels.RData")) #' #' resamps <- resamples(list(CART = rpartFit, #' CondInfTree = ctreeFit, #' MARS = earthFit)) #' #' difs <- diff(resamps) #' #' difs #' #' summary(difs) #' #' compare_models(rpartFit, ctreeFit) #' } #' #' @method diff resamples #' @export diff.resamples <- function(x, models = x$models, metric = x$metrics, test = t.test, confLevel = 0.95, adjustment = "bonferroni", ...) { allDif <- vector(mode = "list", length = length(metric)) names(allDif) <- metric x$models <- x$models[x$models %in% models] p <- length(x$models) ncomp <- choose(p, 2) if(adjustment == "bonferroni") confLevel <- 1 - ((1 - confLevel)/ncomp) allStats <- allDif for(h in seq(along = metric)) { index <- 0 dif <- matrix(NA, nrow = nrow(x$values), ncol = choose(length(models), 2)) stat <- vector(mode = "list", length = choose(length(models), 2)) colnames(dif) <- paste("tmp", 1:ncol(dif), sep = "") for(i in seq(along = models)) { for(j in seq(along = models)) { if(i < j) { index <- index + 1 left <- paste(models[i], metric[h], sep = "~") right <- paste(models[j], metric[h], sep = "~") dif[,index] <- x$values[,left] - x$values[,right] colnames(dif)[index] <- paste(models[i], models[j], sep = ".diff.") } } } stats <- apply(dif, 2, function(x, tst, ...) tst(x, ...), tst = test, conf.level = confLevel, ...) allDif[[h]] <- dif allStats[[h]] <- stats } out <- structure( list( call = match.call(), difs = allDif, confLevel = confLevel, adjustment = adjustment, statistics = allStats, models = models, metric = metric), class = "diff.resamples") out } #' @importFrom stats as.formula #' @importFrom utils stack #' @method densityplot diff.resamples #' @export densityplot.diff.resamples <- function(x, data, metric = x$metric, ...) { plotData <- lapply(x$difs, function(x) stack(as.data.frame(x))) plotData <- do.call("rbind", plotData) plotData$Metric <- rep(x$metric, each = length(x$difs[[1]])) plotData$ind <- gsub(".diff.", " - ", plotData$ind, fixed = TRUE) plotData <- subset(plotData, Metric %in% metric) metricVals <- unique(plotData$Metric) plotForm <- if(length(metricVals) > 1) as.formula(~values|Metric) else as.formula(~values) densityplot(plotForm, data = plotData, groups = ind, xlab = if(length(unique(plotData$Metric)) > 1) "" else metricVals, ...) } #' @importFrom stats as.formula #' @importFrom utils stack #' @method bwplot diff.resamples #' @export bwplot.diff.resamples <- function(x, data, metric = x$metric, ...) { plotData <- lapply(x$difs, function(x) stack(as.data.frame(x))) plotData <- do.call("rbind", plotData) plotData$Metric <- rep(x$metric, each = length(x$difs[[1]])) plotData$ind <- gsub(".diff.", " - ", plotData$ind, fixed = TRUE) plotData <- subset(plotData, Metric %in% metric) metricVals <- unique(plotData$Metric) plotForm <- if(length(metricVals) > 1) as.formula(ind ~ values|Metric) else as.formula(ind ~ values) bwplot(plotForm, data = plotData, xlab = if(length(unique(plotData$Metric)) > 1) "" else metricVals, ...) } #' @method print diff.resamples #' @export print.diff.resamples <- function(x, ...) { printCall(x$call) cat("Models:", paste(x$models, collapse = ", "), "\n") cat("Metrics:", paste(x$metric, collapse = ", "), "\n") cat("Number of differences:", ncol(x$difs[[1]]), "\n") cat("p-value adjustment:", x$adjustment, "\n") invisible(x) } #' @importFrom stats p.adjust #' @rdname diff.resamples #' @method summary diff.resamples #' @export summary.diff.resamples <- function(object, digits = max(3, getOption("digits") - 3), ...) { all <- vector(mode = "list", length = length(object$metric)) names(all) <- object$metric for(h in seq(along = object$metric)) { pvals <- matrix(NA, nrow = length(object$models), ncol = length(object$models)) meanDiff <- pvals index <- 0 for(i in seq(along = object$models)) { for(j in seq(along = object$models)) { if(i < j) { index <- index + 1 meanDiff[i, j] <- object$statistics[[h]][index][[1]]$estimate } } } index <- 0 for(i in seq(along = object$models)) { for(j in seq(along = object$models)) { if(i < j) { index <- index + 1 pvals[j, i] <- object$statistics[[h]][index][[1]]$p.value } } } pvals[lower.tri(pvals)] <- p.adjust(pvals[lower.tri(pvals)], method = object$adjustment) asText <- matrix("", nrow = length(object$models), ncol = length( object$models)) meanDiff2 <- format(meanDiff, digits = digits) pvals2 <- matrix(format.pval(pvals, digits = digits), nrow = length( object$models)) asText[upper.tri(asText)] <- meanDiff2[upper.tri(meanDiff2)] asText[lower.tri(asText)] <- pvals2[lower.tri(pvals2)] diag(asText) <- "" colnames(asText) <- object$models rownames(asText) <- object$models all[[h]] <- asText } out <- structure( list( call = match.call(), adjustment = object$adjustment, table = all), class = "summary.diff.resamples") out } #' @importFrom stats complete.cases #' @method levelplot diff.resamples #' @export levelplot.diff.resamples <- function(x, data = NULL, metric = x$metric[1], what = "pvalues", ...) { comps <- ncol(x$difs[[1]]) if(length(metric) != 1) stop("exactly one metric must be given") all <- vector(mode = "list", length = length(x$metric)) names(all) <- x$metric for(h in seq(along = x$metric)) { temp <- matrix(NA, nrow = length(x$models), ncol = length( x$models)) index <- 0 for(i in seq(along = x$models)) { for(j in seq(along = x$models)) { if(i < j) { index <- index + 1 temp[i, j] <- if(what == "pvalues") { x$statistics[[h]][index][[1]]$p.value } else x$statistics[[h]][index][[1]]$estimate temp[j, i] <- temp[i, j] } } } colnames(temp) <- x$models temp <- as.data.frame(temp) temp$A <- x$models temp$Metric <- x$metric[h] all[[h]] <- temp } all <- do.call("rbind", all) all <- melt(all, measure.vars = x$models) names(all)[names(all) == "variable"] <- "B" all$A <- factor(all$A, levels = x$models) all$B <- factor(as.character(all$B), levels = x$models) all <- all[complete.cases(all),] levelplot(value ~ A + B|Metric, data = all, subset = Metric %in% metric, xlab = "", ylab = "", sub = ifelse(what == "pvalues", "p-values", "difference = (x axis - y axis)"), ...) } #' @method print summary.diff.resamples #' @export print.summary.diff.resamples <- function(x, ...) { printCall(x$call) if(x$adjustment != "none") cat("p-value adjustment:", x$adjustment, "\n") cat("Upper diagonal: estimates of the difference\n", "Lower diagonal: p-value for H0: difference = 0\n\n", sep = "") for(i in seq(along = x$table)) { cat(names(x$table)[i], "\n") print(x$table[[i]], quote = FALSE) cat("\n") } invisible(x) } #' Lattice Functions for Visualizing Resampling Differences #' #' Lattice functions for visualizing resampling result differences between #' models #' #' \code{densityplot} and \code{bwplot} display univariate visualizations of #' the resampling distributions. \code{levelplot} displays the matrix of #' pair-wide comparisons. \code{dotplot} shows the differences along with their #' associated confidence intervals. #' #' @aliases levelplot.diff.resamples densityplot.diff.resamples #' bwplot.diff.resamples dotplot.diff.resamples #' @param x an object generated by \code{\link{diff.resamples}} #' @param data Not used #' @param metric a character string for which metrics to plot. Note: #' \code{dotplot} and \code{levelplot} require exactly two models whereas the #' other methods can plot more than two. #' @param \dots further arguments to pass to either #' \code{\link[lattice:histogram]{densityplot}}, #' \code{\link[lattice:dotplot]{dotplot}} or #' \code{\link[lattice:levelplot]{levelplot}} #' @return a lattice object #' @author Max Kuhn #' @seealso \code{\link{resamples}}, \code{\link{diff.resamples}}, #' \code{\link[lattice:bwplot]{bwplot}}, #' \code{\link[lattice:histogram]{densityplot}}, #' \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:splom]{splom}} #' @keywords hplot #' @examples #' #' \dontrun{ #' #load(url("http://topepo.github.io/caret/exampleModels.RData")) #' #' resamps <- resamples(list(CART = rpartFit, #' CondInfTree = ctreeFit, #' MARS = earthFit)) #' difs <- diff(resamps) #' #' dotplot(difs) #' #' densityplot(difs, #' metric = "RMSE", #' auto.key = TRUE, #' pch = "|") #' #' bwplot(difs, #' metric = "RMSE") #' #' levelplot(difs, what = "differences") #' #' } #' #' @method dotplot diff.resamples #' @export dotplot.diff.resamples <- function(x, data = NULL, metric = x$metric[1], ...) { if(length(metric) > 1) { metric <- metric[1] warning("Sorry Dave, only one value of metric is allowed right now. I'll use the first value") } h <- which(x$metric == metric) plotData <- as.data.frame(matrix(NA, ncol = 3, nrow = ncol(x$difs[[metric]]))) ## Get point and interval estimates on the differences index <- 0 for(i in seq(along = x$models)) { for(j in seq(along = x$models)) { if(i < j) { index <- index + 1 plotData[index, 1] <- x$statistics[[h]][index][[1]]$estimate plotData[index, 2:3] <- x$statistics[[h]][index][[1]]$conf.int } } } names(plotData)[1:3] <- c("Estimate", "LowerLimit", "UpperLimit") plotData$Difference <- gsub(".diff.", " - ", colnames(x$difs[[metric]]), fixed = TRUE) plotData <- melt(plotData, id.vars = "Difference") xText <- paste("Difference in", useMathSymbols(metric), "\nConfidence Level", round(x$confLevel, 3), ifelse(x$adjustment == "bonferroni", " (multiplicity adjusted)", " (no multiplicity adjustment)")) dotplot(Difference ~ value, data = plotData, xlab = xText, panel = function(x, y) { plotTheme <- trellis.par.get() middle <- aggregate(x, list(mod = y), median) upper <- aggregate(x, list(mod = as.numeric(y)), max) lower <- aggregate(x, list(mod = as.numeric(y)), min) panel.dotplot(middle$x, middle$mod, col = plotTheme$plot.symbol$col[1], pch = plotTheme$plot.symbol$pch[1], cex = plotTheme$plot.symbol$cex[1]) panel.abline(v = 0, col = plotTheme$reference.line$col[1], lty = plotTheme$reference.line$lty[1], lwd = plotTheme$reference.line$lwd[1]) for(i in seq(along = upper$mod)) { panel.segments(upper$x[i], upper$mod[i], lower$x[i], lower$mod[i], col = plotTheme$plot.line$col[1], lwd = plotTheme$plot.line$lwd[1], lty = plotTheme$plot.line$lty[1]) len <- .03 panel.segments(lower$x[i], upper$mod[i]+len, lower$x[i], lower$mod[i]-len, lty = plotTheme$plot.line$lty[1], col = plotTheme$plot.line$col[1], lwd = plotTheme$plot.line$lwd[1]) panel.segments(upper$x[i],upper$mod[i]+len, upper$x[i], lower$mod[i]-len, lty = plotTheme$plot.line$lty[1], col = plotTheme$plot.line$col[1], lwd = plotTheme$plot.line$lwd[1]) } }, ...) } #' @rdname diff.resamples #' @export compare_models <- function(a, b, metric = a$metric[1]) { mods <- list(a, b) rs <- resamples(mods) diffs <- diff(rs, metric = metric[1]) diffs$statistics[[1]][[1]] } caret/R/format.bagEarth.R0000644000176200001440000000331013153613153014676 0ustar liggesusers#' Format 'bagEarth' objects #' #' Return a string representing the \sQuote{bagEarth} expression. #' #' #' @param x An \code{\link{bagEarth}} object. This is the only required #' argument. #' @param file A connection, or a character string naming the file to print to. #' If "" (the default), the output prints to the standard output connection. #' See \code{\link[base]{cat}}. #' @param cat a logical; should the equation be printed? #' @param \dots Arguments to \code{\link[earth]{format.earth}}. #' @return A character representation of the bagged earth object. #' @seealso \code{\link[earth]{earth}} #' @keywords models #' @examples #' #' a <- bagEarth(Volume ~ ., data = trees, B= 3) #' format(a) #' #' # yields: #' # ( #' # 31.61075 #' # + 6.587273 * pmax(0, Girth - 14.2) #' # - 3.229363 * pmax(0, 14.2 - Girth) #' # - 0.3167140 * pmax(0, 79 - Height) #' # + #' # 22.80225 #' # + 5.309866 * pmax(0, Girth - 12) #' # - 2.378658 * pmax(0, 12 - Girth) #' # + 0.793045 * pmax(0, Height - 80) #' # - 0.3411915 * pmax(0, 80 - Height) #' # + #' # 31.39772 #' # + 6.18193 * pmax(0, Girth - 14.2) #' # - 3.660456 * pmax(0, 14.2 - Girth) #' # + 0.6489774 * pmax(0, Height - 80) #' # )/3 #' #' @export format.bagEarth <- function(x, file = "", cat = TRUE, ...) { requireNamespaceQuietStop("earth") eachEq <- lapply( x$fit, function(u, ...) format(u, ...), ...) allEq <- paste( "(", paste(eachEq, collapse = "+"), ") /", x$B, "\n") if(cat) cat(allEq, file = file) else return(allEq) } caret/R/rfe.R0000644000176200001440000015107113153613153012456 0ustar liggesusers#' Backwards Feature Selection #' #' A simple backwards selection, a.k.a. recursive feature elimination (RFE), #' algorithm #' #' More details on this function can be found at #' \url{http://topepo.github.io/caret/recursive-feature-elimination.html}. #' #' This function implements backwards selection of predictors based on #' predictor importance ranking. The predictors are ranked and the less #' important ones are sequentially eliminated prior to modeling. The goal is to #' find a subset of predictors that can be used to produce an accurate model. #' The web page \url{http://topepo.github.io/caret/recursive-feature-elimination.html#rfe} #' has more details and examples related to this function. #' #' \code{rfe} can be used with "explicit parallelism", where different #' resamples (e.g. cross-validation group) can be split up and run on multiple #' machines or processors. By default, \code{rfe} will use a single processor #' on the host machine. As of version 4.99 of this package, the framework used #' for parallel processing uses the \pkg{foreach} package. To run the resamples #' in parallel, the code for \code{rfe} does not change; prior to the call to #' \code{rfe}, a parallel backend is registered with \pkg{foreach} (see the #' examples below). #' #' \code{rfeIter} is the basic algorithm while \code{rfe} wraps these #' operations inside of resampling. To avoid selection bias, it is better to #' use the function \code{rfe} than \code{rfeIter}. #' #' When updating a model, if the entire set of resamples were not saved using #' \code{rfeControl(returnResamp = "final")}, the existing resamples are #' removed with a warning. #' #' @aliases rfe rfe.default rfeIter predict.rfe update.rfe #' @param x a matrix or data frame of predictors for model training. This #' object must have unique column names. #' @param y a vector of training set outcomes (either numeric or factor) #' @param testX a matrix or data frame of test set predictors. This must have #' the same column names as \code{x} #' @param testY a vector of test set outcomes #' @param sizes a numeric vector of integers corresponding to the number of #' features that should be retained #' @param metric a string that specifies what summary metric will be used to #' select the optimal model. By default, possible values are "RMSE" and #' "Rsquared" for regression and "Accuracy" and "Kappa" for classification. If #' custom performance metrics are used (via the \code{functions} argument in #' \code{\link{rfeControl}}, the value of \code{metric} should match one of the #' arguments. #' @param maximize a logical: should the metric be maximized or minimized? #' @param rfeControl a list of options, including functions for fitting and #' prediction. The web page #' \url{http://topepo.github.io/caret/recursive-feature-elimination.html#rfe} has more #' details and examples related to this function. #' @param object an object of class \code{rfe} #' @param size a single integers corresponding to the number of features that #' should be retained in the updated model #' @param label an optional character string to be printed when in verbose #' mode. #' @param seeds an optional vector of integers for the size. The vector should #' have length of \code{length(sizes)+1} #' @param \dots options to pass to the model fitting function (ignored in #' \code{predict.rfe}) #' @return A list with elements \item{finalVariables}{a list of size #' \code{length(sizes) + 1} containing the column names of the ``surviving'' #' predictors at each stage of selection. The first element corresponds to all #' the predictors (i.e. \code{size = ncol(x)})} \item{pred }{a data frame with #' columns for the test set outcome, the predicted outcome and the subset #' size.} #' @author Max Kuhn #' @seealso \code{\link{rfeControl}} #' @keywords models #' @examples #' #' \dontrun{ #' data(BloodBrain) #' #' x <- scale(bbbDescr[,-nearZeroVar(bbbDescr)]) #' x <- x[, -findCorrelation(cor(x), .8)] #' x <- as.data.frame(x) #' #' set.seed(1) #' lmProfile <- rfe(x, logBBB, #' sizes = c(2:25, 30, 35, 40, 45, 50, 55, 60, 65), #' rfeControl = rfeControl(functions = lmFuncs, #' number = 200)) #' set.seed(1) #' lmProfile2 <- rfe(x, logBBB, #' sizes = c(2:25, 30, 35, 40, 45, 50, 55, 60, 65), #' rfeControl = rfeControl(functions = lmFuncs, #' rerank = TRUE, #' number = 200)) #' #' xyplot(lmProfile$results$RMSE + lmProfile2$results$RMSE ~ #' lmProfile$results$Variables, #' type = c("g", "p", "l"), #' auto.key = TRUE) #' #' rfProfile <- rfe(x, logBBB, #' sizes = c(2, 5, 10, 20), #' rfeControl = rfeControl(functions = rfFuncs)) #' #' bagProfile <- rfe(x, logBBB, #' sizes = c(2, 5, 10, 20), #' rfeControl = rfeControl(functions = treebagFuncs)) #' #' set.seed(1) #' svmProfile <- rfe(x, logBBB, #' sizes = c(2, 5, 10, 20), #' rfeControl = rfeControl(functions = caretFuncs, #' number = 200), #' ## pass options to train() #' method = "svmRadial") #' #' ## classification #' #' data(mdrr) #' mdrrDescr <- mdrrDescr[,-nearZeroVar(mdrrDescr)] #' mdrrDescr <- mdrrDescr[, -findCorrelation(cor(mdrrDescr), .8)] #' #' set.seed(1) #' inTrain <- createDataPartition(mdrrClass, p = .75, list = FALSE)[,1] #' #' train <- mdrrDescr[ inTrain, ] #' test <- mdrrDescr[-inTrain, ] #' trainClass <- mdrrClass[ inTrain] #' testClass <- mdrrClass[-inTrain] #' #' set.seed(2) #' ldaProfile <- rfe(train, trainClass, #' sizes = c(1:10, 15, 30), #' rfeControl = rfeControl(functions = ldaFuncs, method = "cv")) #' plot(ldaProfile, type = c("o", "g")) #' #' postResample(predict(ldaProfile, test), testClass) #' #' } #' #' ####################################### #' ## Parallel Processing Example via multicore #' #' \dontrun{ #' library(doMC) #' #' ## Note: if the underlying model also uses foreach, the #' ## number of cores specified above will double (along with #' ## the memory requirements) #' registerDoMC(cores = 2) #' #' set.seed(1) #' lmProfile <- rfe(x, logBBB, #' sizes = c(2:25, 30, 35, 40, 45, 50, 55, 60, 65), #' rfeControl = rfeControl(functions = lmFuncs, #' number = 200)) #' #' #' } #' #' #' @export rfe rfe <- function (x, ...) UseMethod("rfe") #' @rdname rfe #' @method rfe default #' @importFrom stats predict runif #' @export "rfe.default" <- function(x, y, sizes = 2^(2:4), metric = ifelse(is.factor(y), "Accuracy", "RMSE"), maximize = ifelse(metric == "RMSE", FALSE, TRUE), rfeControl = rfeControl(), ...) { startTime <- proc.time() funcCall <- match.call(expand.dots = TRUE) if(!("caret" %in% loadedNamespaces())) loadNamespace("caret") if(nrow(x) != length(y)) stop("there should be the same number of samples in x and y") numFeat <- ncol(x) classLevels <- levels(y) if(is.null(rfeControl$index)) rfeControl$index <- switch(tolower(rfeControl$method), cv = createFolds(y, rfeControl$number, returnTrain = TRUE), repeatedcv = createMultiFolds(y, rfeControl$number, rfeControl$repeats), loocv = createFolds(y, length(y), returnTrain = TRUE), boot =, boot632 = createResample(y, rfeControl$number), test = createDataPartition(y, 1, rfeControl$p), lgocv = createDataPartition(y, rfeControl$number, rfeControl$p)) if(is.null(names(rfeControl$index))) names(rfeControl$index) <- prettySeq(rfeControl$index) if(is.null(rfeControl$indexOut)){ rfeControl$indexOut <- lapply(rfeControl$index, function(training, allSamples) allSamples[-unique(training)], allSamples = seq(along = y)) names(rfeControl$indexOut) <- prettySeq(rfeControl$indexOut) } sizes <- sort(unique(sizes)) sizes <- sizes[sizes <= ncol(x)] ## check summary function and metric testOutput <- data.frame(pred = sample(y, min(10, length(y))), obs = sample(y, min(10, length(y)))) if(is.factor(y)) { for(i in seq(along = classLevels)) testOutput[, classLevels[i]] <- runif(nrow(testOutput)) } test <- rfeControl$functions$summary(testOutput, lev = classLevels) perfNames <- names(test) if(!(metric %in% perfNames)) { warning(paste("Metric '", metric, "' is not created by the summary function; '", perfNames[1], "' will be used instead", sep = "")) metric <- perfNames[1] } ## Set or check the seeds when needed totalSize <- if(any(sizes == ncol(x))) length(sizes) else length(sizes) + 1 if(is.null(rfeControl$seeds)) { seeds <- vector(mode = "list", length = length(rfeControl$index)) seeds <- lapply(seeds, function(x) sample.int(n = 1000000, size = totalSize)) seeds[[length(rfeControl$index) + 1]] <- sample.int(n = 1000000, size = 1) rfeControl$seeds <- seeds } else { if(!(length(rfeControl$seeds) == 1 && is.na(rfeControl$seeds))) { ## check versus number of tasks numSeeds <- unlist(lapply(rfeControl$seeds, length)) badSeed <- (length(rfeControl$seeds) < length(rfeControl$index) + 1) || (any(numSeeds[-length(numSeeds)] < totalSize)) if(badSeed) stop(paste("Bad seeds: the seed object should be a list of length", length(rfeControl$index) + 1, "with", length(rfeControl$index), "integer vectors of size", totalSize, "and the last list element having a", "single integer")) } } if(rfeControl$method == "LOOCV") { tmp <- looRfeWorkflow(x, y, sizes, ppOpts = NULL, ctrl = rfeControl, lev = classLevels, ...) selectedVars <- do.call("c", tmp$everything[names(tmp$everything) == "finalVariables"]) selectedVars <- do.call("rbind", selectedVars) externPerf <- tmp$performance } else { tmp <- nominalRfeWorkflow(x, y, sizes, ppOpts = NULL, ctrl = rfeControl, lev = classLevels, ...) selectedVars <- do.call("rbind", tmp$everything[names(tmp$everything) == "selectedVars"]) resamples <- do.call("rbind", tmp$everything[names(tmp$everything) == "resamples"]) rownames(resamples) <- NULL externPerf <- tmp$performance } rownames(selectedVars) <- NULL bestSubset <- rfeControl$functions$selectSize(x = externPerf, metric = metric, maximize = maximize) bestVar <- rfeControl$functions$selectVar(selectedVars, bestSubset) finalTime <- system.time( fit <- rfeControl$functions$fit(x[, bestVar, drop = FALSE], y, first = FALSE, last = TRUE, ...)) if(is.factor(y) & any(names(tmp$performance) == ".cell1")) { keepers <- c("Resample", "Variables", grep("\\.cell", names(tmp$performance), value = TRUE)) resampledCM <- subset(tmp$performance, Variables == bestSubset) tmp$performance <- tmp$performance[, -grep("\\.cell", names(tmp$performance))] } else resampledCM <- NULL if(!(rfeControl$method %in% c("LOOCV"))) { resamples <- switch(rfeControl$returnResamp, none = NULL, all = resamples, final = subset(resamples, Variables == bestSubset)) } else resamples <- NULL endTime <- proc.time() times <- list(everything = endTime - startTime, final = finalTime) ######################################################################### ## Now, based on probability or static ranking, figure out the best vars ## and the best subset size and fit final model out <- structure( list( pred = if(rfeControl$saveDetails) do.call("rbind", tmp$everything[names(tmp$everything) == "predictions"]) else NULL, variables = selectedVars, results = as.data.frame(externPerf), bestSubset = bestSubset, fit = fit, optVariables = bestVar, optsize = bestSubset, call = funcCall, control = rfeControl, resample = resamples, metric = metric, maximize = maximize, perfNames = perfNames, times = times, resampledCM = resampledCM, obsLevels = classLevels, dots = list(...)), class = "rfe") if(rfeControl$timingSamps > 0) { out$times$prediction <- system.time(predict(out, x[1:min(nrow(x), rfeControl$timingSamps),,drop = FALSE])) } else out$times$prediction <- rep(NA, 3) out } #' @method rfe formula #' @importFrom stats .getXlevels contrasts model.matrix model.response #' @export rfe.formula <- function (form, data, ..., subset, na.action, contrasts = NULL) { m <- match.call(expand.dots = FALSE) if (is.matrix(eval.parent(m$data))) m$data <- as.data.frame(data) m$... <- m$contrasts <- NULL m[[1]] <- as.name("model.frame") m <- eval.parent(m) Terms <- attr(m, "terms") x <- model.matrix(Terms, m, contrasts) cons <- attr(x, "contrast") xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] y <- model.response(m) res <- rfe(as.data.frame(x), y, ...) res$terms <- Terms res$coefnames <- colnames(x) res$call <- match.call() res$na.action <- attr(m, "na.action") res$contrasts <- cons res$xlevels <- .getXlevels(Terms, m) class(res) <- c("rfe", "rfe.formula") res } ###################################################################### ###################################################################### #' @method print rfe #' @export print.rfe <- function(x, top = 5, digits = max(3, getOption("digits") - 3), ...) { cat("\nRecursive feature selection\n\n") resampleN <- unlist(lapply(x$control$index, length)) numResamp <- length(resampleN) resampText <- resampName(x) cat("Outer resampling method:", resampText, "\n") cat("\nResampling performance over subset size:\n\n") x$results$Selected <- "" x$results$Selected[x$results$Variables == x$bestSubset] <- "*" print(format(x$results, digits = digits), row.names = FALSE) cat("\n") cat("The top ", min(top, x$bestSubset), " variables (out of ", x$bestSubset, "):\n ", paste(x$optVariables[1:min(top, x$bestSubset)], collapse = ", "), "\n\n", sep = "") invisible(x) } ###################################################################### ###################################################################### #' @rdname rfe #' @importFrom stats complete.cases #' @importFrom utils flush.console #' @export rfeIter <- function(x, y, testX, testY, sizes, rfeControl = rfeControl(), label = "", seeds = NA, ...) { if(is.null(colnames(x))) stop("x must have column names") if(is.null(testX) | is.null(testY)) stop("a test set must be specified") if(is.null(sizes)) stop("please specify the number of features") predictionMatrix <- matrix(NA, nrow = length(testY), ncol = length(sizes)) p <- ncol(x) retained <- colnames(x) sizeValues <- sort(unique(c(sizes, ncol(x))), decreasing = TRUE) sizeText <- format(sizeValues) finalVariables <- vector(length(sizeValues), mode = "list") for(k in seq(along = sizeValues)) { if(!any(is.na(seeds))) set.seed(seeds[k]) if(rfeControl$verbose) { cat("+(rfe) fit", ifelse(label != "", label, ""), "size:", sizeText[k], "\n") } flush.console() fitObject <- rfeControl$functions$fit(x[,retained,drop = FALSE], y, first = p == ncol(x[,retained,drop = FALSE]), last = FALSE, ...) if(rfeControl$verbose) { cat("-(rfe) fit", ifelse(label != "", label, ""), "size:", sizeText[k], "\n") } modelPred <- rfeControl$functions$pred(fitObject, testX[,retained,drop = FALSE]) if(is.data.frame(modelPred) | is.matrix(modelPred)) { if(is.matrix(modelPred)) { modelPred <- as.data.frame(modelPred) ## in the case where the function returns a matrix with a single column ## make sure that it is named pred if(ncol(modelPred) == 1) names(modelPred) <- "pred" } modelPred$obs <- testY modelPred$Variables <- sizeValues[k] } else modelPred <- data.frame(pred = modelPred, obs = testY, Variables = sizeValues[k]) ## save as a vector and rbind at end rfePred <- if(k == 1) modelPred else rbind(rfePred, modelPred) if(!exists("modImp")) ##todo: get away from this since it finds object in other spaces { if(rfeControl$verbose) { cat("+(rfe) imp", ifelse(label != "", label, ""), "\n") } modImp <- rfeControl$functions$rank(fitObject, x[,retained,drop = FALSE], y) if(rfeControl$verbose) { cat("-(rfe) imp", ifelse(label != "", label, ""), "\n") } } else { if(rfeControl$rerank) { if(rfeControl$verbose) { cat("+(rfe) imp", ifelse(label != "", label, ""), "size:", sizeText[k], "\n") } modImp <- rfeControl$functions$rank(fitObject, x[,retained,drop = FALSE], y) if(rfeControl$verbose) { cat("-(rfe) imp", ifelse(label != "", label, ""), "size:", sizeText[k], "\n") } } } if(nrow(modImp) < sizeValues[k]) { msg1 <- paste0("rfe is expecting ", sizeValues[k], " importance values but only has ", nrow(modImp), ". ", "This may be caused by having zero-variance predictors, ", "excessively-correlated predictors, factor predictors ", "that were expanded into dummy variables or you may have ", "failed to drop one of your dummy variables.") warning(msg1, call. = FALSE) modImp <- repair_rank(modImp, colnames(x)) } if(any(!complete.cases(modImp))){ warning(paste("There were missing importance values.", "There may be linear dependencies in your predictor variables"), call. = FALSE) } finalVariables[[k]] <- subset(modImp, var %in% retained) finalVariables[[k]]$Variables <- sizeValues[[k]] if(k < length(sizeValues)) retained <- as.character(modImp$var)[1:sizeValues[k+1]] } list(finalVariables = finalVariables, pred = rfePred) } ###################################################################### ###################################################################### #' Plot RFE Performance Profiles #' #' These functions plot the resampling results for the candidate subset sizes #' evaluated during the recursive feature elimination (RFE) process #' #' These plots show the average performance versus the subset sizes. #' #' @aliases plot.rfe ggplot.rfe #' @param x an object of class \code{\link{rfe}}. #' @param metric What measure of performance to plot. Examples of possible #' values are "RMSE", "Rsquared", "Accuracy" or "Kappa". Other values can be #' used depending on what metrics have been calculated. #' @param \dots \code{plot} only: specifications to be passed to #' \code{\link[lattice]{xyplot}}. The function automatically sets some #' arguments (e.g. axis labels) but passing in values here will over-ride the #' defaults. #' @param data an object of class \code{\link{rfe}}. #' @param output either "data", "ggplot" or "layered". The first returns a data #' frame while the second returns a simple \code{ggplot} object with no layers. #' The third value returns a plot with a set of layers. #' @param mapping,environment unused arguments to make consistent with #' \pkg{ggplot2} generic method #' @return a lattice or ggplot object #' @author Max Kuhn #' @seealso \code{\link{rfe}}, \code{\link[lattice]{xyplot}}, #' \code{\link[ggplot2]{ggplot}} #' @references Kuhn (2008), ``Building Predictive Models in R Using the caret'' #' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}) #' @keywords hplot #' @method plot rfe #' @export #' @examples #' #' \dontrun{ #' data(BloodBrain) #' #' x <- scale(bbbDescr[,-nearZeroVar(bbbDescr)]) #' x <- x[, -findCorrelation(cor(x), .8)] #' x <- as.data.frame(x) #' #' set.seed(1) #' lmProfile <- rfe(x, logBBB, #' sizes = c(2:25, 30, 35, 40, 45, 50, 55, 60, 65), #' rfeControl = rfeControl(functions = lmFuncs, #' number = 200)) #' plot(lmProfile) #' plot(lmProfile, metric = "Rsquared") #' ggplot(lmProfile) #' } #' @method plot rfe #' @export plot.rfe plot.rfe <- function (x, metric = x$metric, ...) { x$results$Selected <- "" x$results$Selected[x$results$Variables == x$bestSubset] <- "*" results <- x$results[, colnames(x$results) %in% c("Variables", "Selected", metric)] metric <- metric[which(metric %in% colnames(results))] plotForm <- as.formula(paste(metric, "~ Variables")) panel.profile <- function(x, y, groups, ...) { panel.xyplot(x, y, ...) panel.xyplot(x[groups == "*"], y[groups == "*"], pch = 16) } resampText <- resampName(x, FALSE) resampText <- paste(metric, resampText) out <- xyplot(plotForm, data = results, groups = Selected, panel = panel.profile, ylab = resampText, ...) out } ###################################################################### ###################################################################### #' Controlling the Feature Selection Algorithms #' #' This function generates a control object that can be used to specify the #' details of the feature selection algorithms used in this package. #' #' More details on this function can be found at #' \url{http://topepo.github.io/caret/recursive-feature-elimination.html#rfe}. #' #' Backwards selection requires function to be specified for some operations. #' #' The \code{fit} function builds the model based on the current data set. The #' arguments for the function must be: \itemize{ \item\code{x} the current #' training set of predictor data with the appropriate subset of variables #' \item\code{y} the current outcome data (either a numeric or factor vector) #' \item\code{first} a single logical value for whether the current predictor #' set has all possible variables \item\code{last} similar to \code{first}, but #' \code{TRUE} when the last model is fit with the final subset size and #' predictors. \item\code{...}optional arguments to pass to the fit function #' in the call to \code{rfe} } The function should return a model object that #' can be used to generate predictions. #' #' The \code{pred} function returns a vector of predictions (numeric or #' factors) from the current model. The arguments are: \itemize{ #' \item\code{object} the model generated by the \code{fit} function #' \item\code{x} the current set of predictor set for the held-back samples } #' #' The \code{rank} function is used to return the predictors in the order of #' the most important to the least important. Inputs are: \itemize{ #' \item\code{object} the model generated by the \code{fit} function #' \item\code{x} the current set of predictor set for the training samples #' \item\code{y} the current training outcomes } The function should return a #' data frame with a column called \code{var} that has the current variable #' names. The first row should be the most important predictor etc. Other #' columns can be included in the output and will be returned in the final #' \code{rfe} object. #' #' The \code{selectSize} function determines the optimal number of predictors #' based on the resampling output. Inputs for the function are: \itemize{ #' \item\code{x}a matrix with columns for the performance metrics and the #' number of variables, called "\code{Variables}" \item\code{metric}a character #' string of the performance measure to optimize (e.g. "RMSE", "Rsquared", #' "Accuracy" or "Kappa") \item\code{maximize}a single logical for whether the #' metric should be maximized } This function should return an integer #' corresponding to the optimal subset size. \pkg{caret} comes with two #' examples functions for this purpose: \code{\link{pickSizeBest}} and #' \code{\link{pickSizeTolerance}}. #' #' After the optimal subset size is determined, the \code{selectVar} function #' will be used to calculate the best rankings for each variable across all the #' resampling iterations. Inputs for the function are: \itemize{ \item\code{y} #' a list of variables importance for each resampling iteration and each subset #' size (generated by the user--defined \code{rank} function). In the example, #' each each of the cross--validation groups the output of the \code{rank} #' function is saved for each of the subset sizes (including the original #' subset). If the rankings are not recomputed at each iteration, the values #' will be the same within each cross-validation iteration. \item\code{size} #' the integer returned by the \code{selectSize} function } This function #' should return a character string of predictor names (of length \code{size}) #' in the order of most important to least important #' #' Examples of these functions are included in the package: #' \code{\link{lmFuncs}}, \code{\link{rfFuncs}}, \code{\link{treebagFuncs}} and #' \code{\link{nbFuncs}}. #' #' Model details about these functions, including examples, are at #' \url{http://topepo.github.io/caret/recursive-feature-elimination.html}. . #' #' @param functions a list of functions for model fitting, prediction and #' variable importance (see Details below) #' @param rerank a logical: should variable importance be re-calculated each #' time features are removed? #' @param method The external resampling method: \code{boot}, \code{cv}, #' \code{LOOCV} or \code{LGOCV} (for repeated training/test splits #' @param number Either the number of folds or number of resampling iterations #' @param repeats For repeated k-fold cross-validation only: the number of #' complete sets of folds to compute #' @param saveDetails a logical to save the predictions and variable #' importances from the selection process #' @param verbose a logical to print a log for each external resampling #' iteration #' @param returnResamp A character string indicating how much of the resampled #' summary metrics should be saved. Values can be ``final'', ``all'' or #' ``none'' #' @param p For leave-group out cross-validation: the training percentage #' @param index a list with elements for each external resampling iteration. #' Each list element is the sample rows used for training at that iteration. #' @param indexOut a list (the same length as \code{index}) that dictates which #' sample are held-out for each resample. If \code{NULL}, then the unique set #' of samples not contained in \code{index} is used. #' @param timingSamps the number of training set samples that will be used to #' measure the time for predicting samples (zero indicates that the prediction #' time should not be estimated). #' @param seeds an optional set of integers that will be used to set the seed #' at each resampling iteration. This is useful when the models are run in #' parallel. A value of \code{NA} will stop the seed from being set within the #' worker processes while a value of \code{NULL} will set the seeds using a #' random set of integers. Alternatively, a list can be used. The list should #' have \code{B+1} elements where \code{B} is the number of resamples. The #' first \code{B} elements of the list should be vectors of integers of length #' \code{P} where \code{P} is the number of subsets being evaluated (including #' the full set). The last element of the list only needs to be a single #' integer (for the final model). See the Examples section below. #' @param allowParallel if a parallel backend is loaded and available, should #' the function use it? #' @return A list #' @author Max Kuhn #' @seealso \code{\link{rfe}}, \code{\link{lmFuncs}}, \code{\link{rfFuncs}}, #' \code{\link{treebagFuncs}}, \code{\link{nbFuncs}}, #' \code{\link{pickSizeBest}}, \code{\link{pickSizeTolerance}} #' @keywords utilities #' @examples #' #' \dontrun{ #' subsetSizes <- c(2, 4, 6, 8) #' set.seed(123) #' seeds <- vector(mode = "list", length = 51) #' for(i in 1:50) seeds[[i]] <- sample.int(1000, length(subsetSizes) + 1) #' seeds[[51]] <- sample.int(1000, 1) #' #' set.seed(1) #' rfMod <- rfe(bbbDescr, logBBB, #' sizes = subsetSizes, #' rfeControl = rfeControl(functions = rfFuncs, #' seeds = seeds, #' number = 50)) #' } #' #' @export rfeControl rfeControl <- function(functions = NULL, rerank = FALSE, method = "boot", saveDetails = FALSE, number = ifelse(method %in% c("cv", "repeatedcv"), 10, 25), repeats = ifelse(method %in% c("cv", "repeatedcv"), 1, number), verbose = FALSE, returnResamp = "final", p = .75, index = NULL, indexOut = NULL, timingSamps = 0, seeds = NA, allowParallel = TRUE) { list( functions = if(is.null(functions)) caretFuncs else functions, rerank = rerank, method = method, saveDetails = saveDetails, number = number, repeats = repeats, returnResamp = returnResamp, verbose = verbose, p = p, index = index, indexOut = indexOut, timingSamps = timingSamps, seeds = seeds, allowParallel = allowParallel) } ###################################################################### ###################################################################### ## some built-in functions for certain models #' @rdname caretFuncs #' @export pickSizeBest <- function(x, metric, maximize) { best <- if(maximize) which.max(x[,metric]) else which.min(x[,metric]) min(x[best, "Variables"]) } #' @rdname caretFuncs #' @export pickSizeTolerance <- function(x, metric, tol = 1.5, maximize) { if(!maximize) { best <- min(x[,metric]) perf <- (x[,metric] - best)/best * 100 flag <- perf <= tol } else { best <- max(x[,metric]) perf <- (best - x[,metric])/best * 100 flag <- perf <= tol } min(x[flag, "Variables"]) } #' @rdname caretFuncs #' @export pickVars <- function(y, size) { finalImp <- ddply(y[, c("Overall", "var")], .(var), function(x) mean(x$Overall, na.rm = TRUE)) names(finalImp)[2] <- "Overall" finalImp <- finalImp[order(finalImp$Overall, decreasing = TRUE),] as.character(finalImp$var[1:size]) } #' Backwards Feature Selection Helper Functions #' #' Ancillary functions for backwards selection #' #' This page describes the functions that are used in backwards selection (aka #' recursive feature elimination). The functions described here are passed to #' the algorithm via the \code{functions} argument of \code{\link{rfeControl}}. #' #' See \code{\link{rfeControl}} for details on how these functions should be #' defined. #' #' The 'pick' functions are used to find the appropriate subset size for #' different situations. \code{pickBest} will find the position associated with #' the numerically best value (see the \code{maximize} argument to help define #' this). #' #' \code{pickSizeTolerance} picks the lowest position (i.e. the smallest subset #' size) that has no more of an X percent loss in performances. When #' maximizing, it calculates (O-X)/O*100, where X is the set of performance #' values and O is max(X). This is the percent loss. When X is to be minimized, #' it uses (X-O)/O*100 (so that values greater than X have a positive "loss"). #' The function finds the smallest subset size that has a percent loss less #' than \code{tol}. #' #' Both of the 'pick' functions assume that the data are sorted from smallest #' subset size to largest. #' #' @aliases caretFuncs lmFuncs rfFuncs gamFuncs treebagFuncs ldaFuncs nbFuncs #' lrFuncs pickSizeBest pickSizeTolerance pickVars #' @param x a matrix or data frame with the performance metric of interest #' @param metric a character string with the name of the performance metric #' that should be used to choose the appropriate number of variables #' @param maximize a logical; should the metric be maximized? #' @param tol a scalar to denote the acceptable difference in optimal #' performance (see Details below) #' @param y a list of data frames with variables \code{Overall} and \code{var} #' @param size an integer for the number of variables to retain #' @author Max Kuhn #' @seealso \code{\link{rfeControl}}, \code{\link{rfe}} #' @keywords models #' @examples #' #' ## For picking subset sizes: #' ## Minimize the RMSE #' example <- data.frame(RMSE = c(1.2, 1.1, 1.05, 1.01, 1.01, 1.03, 1.00), #' Variables = 1:7) #' ## Percent Loss in performance (positive) #' example$PctLoss <- (example$RMSE - min(example$RMSE))/min(example$RMSE)*100 #' #' xyplot(RMSE ~ Variables, data= example) #' xyplot(PctLoss ~ Variables, data= example) #' #' absoluteBest <- pickSizeBest(example, metric = "RMSE", maximize = FALSE) #' within5Pct <- pickSizeTolerance(example, metric = "RMSE", maximize = FALSE) #' #' cat("numerically optimal:", #' example$RMSE[absoluteBest], #' "RMSE in position", #' absoluteBest, "\n") #' cat("Accepting a 1.5 pct loss:", #' example$RMSE[within5Pct], #' "RMSE in position", #' within5Pct, "\n") #' #' ## Example where we would like to maximize #' example2 <- data.frame(Rsquared = c(0.4, 0.6, 0.94, 0.95, 0.95, 0.95, 0.95), #' Variables = 1:7) #' ## Percent Loss in performance (positive) #' example2$PctLoss <- (max(example2$Rsquared) - example2$Rsquared)/max(example2$Rsquared)*100 #' #' xyplot(Rsquared ~ Variables, data= example2) #' xyplot(PctLoss ~ Variables, data= example2) #' #' absoluteBest2 <- pickSizeBest(example2, metric = "Rsquared", maximize = TRUE) #' within5Pct2 <- pickSizeTolerance(example2, metric = "Rsquared", maximize = TRUE) #' #' cat("numerically optimal:", #' example2$Rsquared[absoluteBest2], #' "R^2 in position", #' absoluteBest2, "\n") #' cat("Accepting a 1.5 pct loss:", #' example2$Rsquared[within5Pct2], #' "R^2 in position", #' within5Pct2, "\n") #' #' @export caretFuncs caretFuncs <- list(summary = defaultSummary, fit = function(x, y, first, last, ...) train(x, y, ...), pred = function(object, x) { tmp <- predict(object, x) if(object$modelType == "Classification" & object$control$classProbs) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp out }, rank = function(object, x, y) { vimp <- varImp(object, scale = FALSE)$importance if(!is.data.frame(vimp)) vimp <- as.data.frame(vimp) if(object$modelType == "Regression") { vimp <- vimp[order(vimp[,1], decreasing = TRUE),,drop = FALSE] } else { if(all(levels(y) %in% colnames(vimp)) & !("Overall" %in% colnames(vimp))) { avImp <- apply(vimp[, levels(y), drop = TRUE], 1, mean) vimp$Overall <- avImp } } vimp <- vimp[order(vimp$Overall, decreasing = TRUE),, drop = FALSE] vimp$var <- rownames(vimp) vimp }, selectSize = pickSizeBest, selectVar = pickVars) ## write a better imp sort function #' @rdname caretFuncs #' @importFrom stats predict #' @export ldaFuncs <- list(summary = defaultSummary, fit = function(x, y, first, last, ...) { loadNamespace("MASS") MASS::lda(x, y, ...) }, pred = function(object, x) { tmp <- predict(object, x) out <- cbind(data.frame(pred = tmp$class), as.data.frame(tmp$posterior)) out }, rank = function(object, x, y) { vimp <- filterVarImp(x, y, TRUE) vimp$Overall <- apply(vimp, 1, mean) vimp <- vimp[order(vimp$Overall, decreasing = TRUE),] vimp <- as.data.frame(vimp)[, "Overall",drop = FALSE] vimp$var <- rownames(vimp) vimp }, selectSize = pickSizeBest, selectVar = pickVars ) #' @rdname caretFuncs #' @importFrom stats predict #' @export treebagFuncs <- list(summary = defaultSummary, fit = function(x, y, first, last, ...) { loadNamespace("ipred") ipred::ipredbagg(y, x, ...) }, pred = function(object, x) { tmp <- predict(object, x) if(is.factor(object$y)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp out }, rank = function(object, x, y) { vimp <- varImp(object) vimp <- vimp[order(vimp$Overall, decreasing = TRUE),,drop = FALSE] vimp$var <- rownames(vimp) vimp }, selectSize = pickSizeBest, selectVar = pickVars) #' @rdname caretFuncs #' @importFrom stats predict #' @export gamFuncs <- list(summary = defaultSummary, fit = function(x, y, first, last, ...){ loaded <- search() gamLoaded <- any(loaded == "package:gam") if(gamLoaded) detach(package:gam) loadNamespace("mgcv") gam <- get("gam", asNamespace("mgcv")) dat <- if(is.data.frame(x)) x else as.data.frame(x) dat$y <- y args <- list(formula = gamFormula(x, smoother = "s", y = "y"), data = dat, family = if(!is.factor(y)) gaussian else binomial) do.call("gam", args) }, pred = function(object, x) { if(!is.data.frame(x)) x <- as.data.frame(x) loaded <- search() gamLoaded <- any(loaded == "package:gam") if(gamLoaded) detach(package:gam) loadNamespace("mgcv") rsp <- predict(object, newdata = x, type = "response") if(object$family$family == "binomial") { lvl <- levels(object$model$y) out <- data.frame(p1 = rsp, p2 = 1-rsp, pred = factor(ifelse(rsp > .5, lvl[2], lvl[1]), levels = lvl)) colnames(out)[1:2] <- make.names(lvl) out } else out <- data.frame(pred = rsp) out }, rank = function(object, x, y) { loaded <- search() gamLoaded <- any(loaded == "package:gam") if(gamLoaded) detach(package:gam) loadNamespace("mgcv") vimp <- varImp(object) vimp$var <- rownames(vimp) if(any(!(colnames(x) %in% rownames(vimp)))) { missing <- colnames(x)[!(colnames(x) %in% rownames(vimp))] tmpdf <- data.frame(var = missing, Overall = rep(0, length(missing))) vimp <- rbind(vimp, tmpdf) } vimp <- vimp[order(vimp$Overall, decreasing = TRUE),, drop = FALSE] vimp }, selectSize = pickSizeBest, selectVar = pickVars) #' @rdname caretFuncs #' @importFrom stats predict #' @export rfFuncs <- list(summary = defaultSummary, fit = function(x, y, first, last, ...) { loadNamespace("randomForest") randomForest::randomForest(x, y, importance = (first|last), ...) }, pred = function(object, x) { tmp <- predict(object, x) if(is.factor(object$y)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp out }, rank = function(object, x, y) { vimp <- varImp(object) if(is.factor(y)) { if(all(levels(y) %in% colnames(vimp))) { avImp <- apply(vimp[, levels(y), drop = TRUE], 1, mean) vimp$Overall <- avImp } } vimp <- vimp[order(vimp$Overall, decreasing = TRUE),, drop = FALSE] vimp$var <- rownames(vimp) vimp }, selectSize = pickSizeBest, selectVar = pickVars) #' @rdname caretFuncs #' @importFrom stats predict lm #' @export lmFuncs <- list(summary = defaultSummary, fit = function(x, y, first, last, ...) { tmp <- if(is.data.frame(x)) x else as.data.frame(x) tmp$y <- y lm(y~., data = tmp) }, pred = function(object, x) { if(!is.data.frame(x)) x <- as.data.frame(x) predict(object, x) }, rank = function(object, x, y) { coefs <- abs(coef(object)) coefs <- coefs[names(coefs) != "(Intercept)"] coefs[is.na(coefs)] <- 0 vimp <- data.frame(Overall = unname(coefs), var = names(coefs)) rownames(vimp) <- names(coefs) vimp <- vimp[order(vimp$Overall, decreasing = TRUE),, drop = FALSE] vimp }, selectSize = pickSizeBest, selectVar = pickVars) #' @rdname caretFuncs #' @importFrom stats predict #' @export nbFuncs <- list(summary = defaultSummary, fit = function(x, y, first, last, ...){ loadNamespace("klaR") klaR::NaiveBayes(x, y, usekernel = TRUE, fL = 2, ...) }, pred = function(object, x) { tmp <- predict(object, x) out <- cbind(data.frame(pred = tmp$class), as.data.frame(tmp$posterior)) out }, rank = function(object, x, y) { vimp <- filterVarImp(x, y) if(is.factor(y)) { avImp <- apply(vimp, 1, mean) vimp$Overall <- avImp } vimp <- vimp[order(vimp$Overall,decreasing = TRUE),, drop = FALSE] vimp$var <- rownames(vimp) vimp }, selectSize = pickSizeBest, selectVar = pickVars) #' @rdname caretFuncs #' @importFrom stats predict glm #' @export lrFuncs <- ldaFuncs lrFuncs$fit <- function (x, y, first, last, ...) { tmp <- if(is.data.frame(x)) x else as.data.frame(x) tmp$Class <- y glm(Class ~ ., data = tmp, family = "binomial") } lrFuncs$pred <- function (object, x) { if(!is.data.frame(x)) x <- as.data.frame(x) lvl <- levels(object$data$Class) tmp <- predict(object, x, type = "response") out <- data.frame(1-tmp, tmp) colnames(out) <- lvl out$pred <- factor(ifelse(tmp > .5, lvl[2], lvl[1]), levels = lvl) out } lrFuncs$rank <- function (object, x, y) { vimp <- varImp(object, scale = FALSE) vimp <- vimp[order(vimp$Overall, decreasing = TRUE),, drop = FALSE] vimp$var <- rownames(vimp) vimp } ###################################################################### ###################################################################### ## lattice functions #' Lattice functions for plotting resampling results of recursive feature #' selection #' #' A set of lattice functions are provided to plot the resampled performance #' estimates (e.g. classification accuracy, RMSE) over different subset sizes. #' #' By default, only the resampling results for the optimal model are saved in #' the \code{rfe} object. The function \code{\link{rfeControl}} can be used to #' save all the results using the \code{returnResamp} argument. #' #' If leave-one-out or out-of-bag resampling was specified, plots cannot be #' produced (see the \code{method} argument of \code{\link{rfeControl}}) #' #' @aliases xyplot.rfe stripplot.rfe densityplot.rfe histogram.rfe #' @param x An object produced by \code{\link{rfe}} #' @param data This argument is not used #' @param metric A character string specifying the single performance metric #' that will be plotted #' @param \dots arguments to pass to either #' \code{\link[lattice:histogram]{histogram}}, #' \code{\link[lattice:histogram]{densityplot}}, #' \code{\link[lattice:xyplot]{xyplot}} or #' \code{\link[lattice:xyplot]{stripplot}} #' @return A lattice plot object #' @author Max Kuhn #' @seealso \code{\link{rfe}}, \code{\link{rfeControl}}, #' \code{\link[lattice:histogram]{histogram}}, #' \code{\link[lattice:histogram]{densityplot}}, #' \code{\link[lattice:xyplot]{xyplot}}, #' \code{\link[lattice:xyplot]{stripplot}} #' @keywords hplot #' @examples #' #' \dontrun{ #' library(mlbench) #' n <- 100 #' p <- 40 #' sigma <- 1 #' set.seed(1) #' sim <- mlbench.friedman1(n, sd = sigma) #' x <- cbind(sim$x, matrix(rnorm(n * p), nrow = n)) #' y <- sim$y #' colnames(x) <- paste("var", 1:ncol(x), sep = "") #' #' normalization <- preProcess(x) #' x <- predict(normalization, x) #' x <- as.data.frame(x) #' subsets <- c(10, 15, 20, 25) #' #' ctrl <- rfeControl( #' functions = lmFuncs, #' method = "cv", #' verbose = FALSE, #' returnResamp = "all") #' #' lmProfile <- rfe(x, y, #' sizes = subsets, #' rfeControl = ctrl) #' xyplot(lmProfile) #' stripplot(lmProfile) #' #' histogram(lmProfile) #' densityplot(lmProfile) #' } #' #' @importFrom stats as.formula #' @export densityplot.rfe <- function(x, data = NULL, metric = x$metric, ...) { if (!is.null(match.call()$data)) warning("explicit 'data' specification ignored") if(x$control$method %in% c("oob", "LOOCV")) stop("Resampling plots cannot be done with leave-out-out CV or out-of-bag resampling") data <- as.data.frame(x$resample) data$Variable <- factor(data$Variable, levels = paste(sort(unique(data$Variable)))) form <- as.formula(paste("~", metric, "|Variable")) densityplot(form, data = data, ...) } #' @importFrom stats as.formula #' @export histogram.rfe <- function(x, data = NULL, metric = x$metric, ...) { if (!is.null(match.call()$data)) warning("explicit 'data' specification ignored") if(x$control$method %in% c("oob", "LOOCV")) stop("Resampling plots cannot be done with leave-out-out CV or out-of-bag resampling") data <- as.data.frame(x$resample) data$Variable <- factor(data$Variable, levels = paste(sort(unique(data$Variable)))) form <- as.formula(paste("~", metric, "|Variable")) histogram(form, data = data, ...) } #' @importFrom stats as.formula #' @export stripplot.rfe <- function(x, data = NULL, metric = x$metric, ...) { if (!is.null(match.call()$data)) warning("explicit 'data' specification ignored") if(x$control$method %in% c("oob", "LOOCV")) stop("Resampling plots cannot be done with leave-out-out CV or out-of-bag resampling") data <- as.data.frame(x$resample) data$Variable <- factor(data$Variable, levels = paste(sort(unique(data$Variable)))) theDots <- list(...) if(any(names(theDots) == "horizontal")) { formText <- if(theDots$horizontal) paste("Variable ~", metric) else paste(metric, "~ Variable") } else formText <- paste("Variable ~", metric) form <- as.formula(formText) stripplot(form, data = data, ...) } #' @importFrom stats as.formula #' @export xyplot.rfe <- function(x, data = NULL, metric = x$metric, ...) { if (!is.null(match.call()$data)) warning("explicit 'data' specification ignored") if(x$control$method %in% c("oob", "LOOCV")) stop("Resampling plots cannot be done with leave-out-out CV or out-of-bag resampling") data <- as.data.frame(x$resample) form <- as.formula(paste(metric, " ~ Variables")) xyplot(form, data = data, ...) } ###################################################################### ###################################################################### ## other functions #' @export predictors.rfe <- function(x, ...) x$optVariables #' @export varImp.rfe <- function(object, drop = FALSE, ...) { imp <- subset(object$variables, Variables == object$optsize) imp <- ddply(imp[, c("Overall", "var")], .(var), function(x) mean(x$Overall, rm.na = TRUE)) names(imp)[2] <- "Overall" if(drop) imp <- subset(imp, var %in% object$optVar) rownames(imp) <- imp$var imp$var <- NULL imp[order(-imp$Overall),,drop = FALSE] } #' @importFrom stats .checkMFClasses delete.response model.frame model.matrix na.omit #' @export predict.rfe <- function(object, newdata, ...) { if(length(list(...)) > 0) warning("... are ignored for predict.rfe") if(inherits(object, "rfe.formula")) { newdata <- as.data.frame(newdata) rn <- row.names(newdata) Terms <- delete.response(object$terms) m <- model.frame(Terms, newdata, na.action = na.omit, xlev = object$xlevels) if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) keep <- match(row.names(m), rn) newdata <- model.matrix(Terms, m, contrasts = object$contrasts) xint <- match("(Intercept)", colnames(newdata), nomatch = 0) if (xint > 0) newdata <- newdata[, -xint, drop = FALSE] } checkCols <- object$optVar %in% colnames(newdata) if(!all(checkCols)) stop(paste("missing columns from newdata:", paste(object$optVar[!checkCols], collapse = ", "))) newdata <- newdata[, object$optVar, drop = FALSE] object$control$functions$pred(object$fit, newdata) } #' @rdname rfe #' @method update rfe #' @export update.rfe <- function(object, x, y, size, ...) { size <- size[1] selectedVars <- object$variables bestVar <- object$control$functions$selectVar(selectedVars, size) object$fit <- object$control$functions$fit(x[, bestVar, drop = FALSE], y, first = FALSE, last = TRUE, ...) object$bestSubset <- size object$bestVar <- bestVar if(object$control$returnResamp == "final") { warning("The saved resamples are no longer appropriate and were removed") object$resampledCM <- object$resample <- NULL } object } repair_rank <- function(imp, nms, fill = -Inf) { no_val <- !(nms %in% imp$var) missing_rows <- imp[rep(1, sum(no_val)),] missing_rows$var <- nms[no_val] other_col <- colnames(imp)[colnames(imp) != "var"] for(i in other_col) missing_rows[, i] <- NA out <- rbind(imp, missing_rows) rownames(out) <- NULL out } caret/R/plotClassProbs.R0000644000176200001440000001041213153613153014645 0ustar liggesusers#' Plot Predicted Probabilities in Classification Models #' #' This function takes an object (preferably from the function #' \code{\link{extractProb}}) and creates a lattice plot. #' #' If the call to \code{\link{extractProb}} included test data, these data are #' shown, but if unknowns were also included, these are not plotted #' #' #' @param object an object (preferably from the function #' \code{\link{extractProb}}. There should be columns for each level of the #' class factor and columns named \code{obs}, \code{pred}, \code{model} (e.g. #' "rpart", "nnet" etc), \code{dataType} (e.g. "Training", "Test" etc) and #' optionally \code{objects} (for giving names to objects with the same model #' type). #' @param plotType either "histogram" or "densityplot" #' @param useObjects a logical; should the object name (if any) be used as a #' conditioning variable? #' @param \dots parameters to pass to \code{\link[lattice]{histogram}} or #' \code{\link[lattice]{densityplot}} #' @return A lattice object. Note that the plot has to be printed to be #' displayed (especially in a loop). #' @author Max Kuhn #' @keywords hplot #' @examples #' #' \dontrun{ #' data(mdrr) #' set.seed(90) #' inTrain <- createDataPartition(mdrrClass, p = .5)[[1]] #' #' trainData <- mdrrDescr[inTrain,1:20] #' testData <- mdrrDescr[-inTrain,1:20] #' #' trainY <- mdrrClass[inTrain] #' testY <- mdrrClass[-inTrain] #' #' ctrl <- trainControl(method = "cv") #' #' nbFit1 <- train(trainData, trainY, "nb", #' trControl = ctrl, #' tuneGrid = data.frame(usekernel = TRUE, fL = 0)) #' #' nbFit2 <- train(trainData, trainY, "nb", #' trControl = ctrl, #' tuneGrid = data.frame(usekernel = FALSE, fL = 0)) #' #' #' models <- list(para = nbFit2, nonpara = nbFit1) #' #' predProbs <- extractProb(models, testX = testData, testY = testY) #' #' plotClassProbs(predProbs, useObjects = TRUE) #' plotClassProbs(predProbs, #' subset = object == "para" & dataType == "Test") #' plotClassProbs(predProbs, #' useObjects = TRUE, #' plotType = "densityplot", #' auto.key = list(columns = 2)) #' } #' #' #' #' @export plotClassProbs plotClassProbs <- function(object, plotType = "histogram", useObjects = FALSE, ...) { obsLevels <- levels(object$obs) stackProbs <- melt(object, id.vars = c("obs", "model", "object", "dataType"), measure.vars = if(length(obsLevels) == 2) obsLevels[1] else obsLevels) names(stackProbs)[names(stackProbs) == "variable"] <- "Class" names(stackProbs)[names(stackProbs) == "value"] <- "Probability" names(stackProbs)[names(stackProbs) == "obs"] <- "Observed" stackProbs$Observed <- paste("Data:", as.character(stackProbs$Observed)) stackProbs$Class <- paste("Prob:", as.character(stackProbs$Class)) keepVars <- "Observed" if(length(unique(stackProbs$dataType)) > 1) keepVars <- c(keepVars, "dataType") if(length(unique(stackProbs$model)) > 1) keepVars <- c(keepVars, "model") if(any(names(object) == "object") & useObjects) { if(length(unique(stackProbs$object)) > 1) keepVars <- c(keepVars, "object") } if(plotType == "histogram") { form <- if(length(obsLevels) == 2) { form <- if(length(keepVars) > 0) paste("~ Probability|", paste(keepVars, collapse = "*")) else "~ Probability" form <- as.formula(form) out <- histogram(form, data = stackProbs, xlab = paste("Probability of", obsLevels[1]), ...) } else { form <- if(length(keepVars) > 0) paste("~ Probability|Class*", paste(keepVars, collapse = "*")) else "~ Probability|Class" form <- as.formula(form) out <- histogram(form, data = stackProbs, ...) } } else { keepVars <- keepVars[keepVars != "Observed"] form <- if(length(keepVars) > 0) paste("~ Probability|", paste(keepVars, collapse = "*")) else "~ Probability" form <- as.formula(form) out <- densityplot(form, data = stackProbs, groups = Observed, ...) } out } caret/R/trainControl.R0000644000176200001440000003342413205126022014351 0ustar liggesusers#' Control parameters for train #' #' Control the computational nuances of the \code{\link{train}} function #' #' When setting the seeds manually, the number of models being evaluated is #' required. This may not be obvious as \code{train} does some optimizations #' for certain models. For example, when tuning over PLS model, the only model #' that is fit is the one with the largest number of components. So if the #' model is being tuned over \code{comp in 1:10}, the only model fit is #' \code{ncomp = 10}. However, if the vector of integers used in the #' \code{seeds} arguments is longer than actually needed, no error is thrown. #' #' Using \code{method = "none"} and specifying more than one model in #' \code{\link{train}}'s \code{tuneGrid} or \code{tuneLength} arguments will #' result in an error. #' #' Using adaptive resampling when \code{method} is either \code{"adaptive_cv"}, #' \code{"adaptive_boot"} or \code{"adaptive_LGOCV"}, the full set of resamples #' is not run for each model. As resampling continues, a futility analysis is #' conducted and models with a low probability of being optimal are removed. #' These features are experimental. See Kuhn (2014) for more details. The #' options for this procedure are: #' #' \itemize{ \item \code{min}: the minimum number of resamples used before #' models are removed \item \code{alpha}: the confidence level of the one-sided #' intervals used to measure futility \item \code{method}: either generalized #' least squares (\code{method = "gls"}) or a Bradley-Terry model (\code{method #' = "BT"}) \item \code{complete}: if a single parameter value is found before #' the end of resampling, should the full set of resamples be computed for that #' parameter. ) } #' #' The option \code{search = "grid"} uses the default grid search routine. When #' \code{search = "random"}, a random search procedure is used (Bergstra and #' Bengio, 2012). See \url{http://topepo.github.io/caret/random-hyperparameter-search.html} for #' details and an example. #' #' The supported bootstrap methods are: #' #' \itemize{ #' \item \code{"boot"}: the usual bootstrap. #' \item \code{"boot632"}: the 0.632 bootstrap estimator (Efron, 1983). #' \item \code{"optimism_boot"}: the optimism bootstrap estimator. #' (Efron and Tibshirani, 1994). #' \item \code{"boot_all"}: all of the above (for efficiency, #' but "boot" will be used for calculations). #' } #' #' The \code{"boot632"} method should not to be confused with the 0.632+ #' estimator proposed later by the same author. #' #' Note that if \code{index} or \code{indexOut} are specified, the label shown by \code{train} may not be accurate since these arguments supersede the \code{method} argument. #' #' @param method The resampling method: \code{"boot"}, \code{"boot632"}, #' \code{"optimism_boot"}, \code{"boot_all"}, #' \code{"cv"}, \code{"repeatedcv"}, \code{"LOOCV"}, \code{"LGOCV"} (for #' repeated training/test splits), \code{"none"} (only fits one model to the #' entire training set), \code{"oob"} (only for random forest, bagged trees, #' bagged earth, bagged flexible discriminant analysis, or conditional tree #' forest models), \code{timeslice}, \code{"adaptive_cv"}, \code{"adaptive_boot"} or #' \code{"adaptive_LGOCV"} #' @param number Either the number of folds or number of resampling iterations #' @param repeats For repeated k-fold cross-validation only: the number of #' complete sets of folds to compute #' @param verboseIter A logical for printing a training log. #' @param returnData A logical for saving the data #' @param returnResamp A character string indicating how much of the resampled #' summary metrics should be saved. Values can be \code{"final"}, \code{"all"} #' or \code{"none"} #' @param savePredictions an indicator of how much of the hold-out predictions #' for each resample should be saved. Values can be either \code{"all"}, #' \code{"final"}, or \code{"none"}. A logical value can also be used that #' convert to \code{"all"} (for true) or \code{"none"} (for false). #' \code{"final"} saves the predictions for the optimal tuning parameters. #' @param p For leave-group out cross-validation: the training percentage #' @param search Either \code{"grid"} or \code{"random"}, describing how the #' tuning parameter grid is determined. See details below. #' @param initialWindow,horizon,fixedWindow,skip possible arguments to #' \code{\link{createTimeSlices}} when method is \code{timeslice}. #' @param classProbs a logical; should class probabilities be computed for #' classification models (along with predicted values) in each resample? #' @param summaryFunction a function to compute performance metrics across #' resamples. The arguments to the function should be the same as those in #' \code{\link{defaultSummary}}. Note that it \code{method = "oob"} is used, #' this option is ignored and a warning is issued. #' @param selectionFunction the function used to select the optimal tuning #' parameter. This can be a name of the function or the function itself. See #' \code{\link{best}} for details and other options. #' @param preProcOptions A list of options to pass to \code{\link{preProcess}}. #' The type of pre-processing (e.g. center, scaling etc) is passed in via the #' \code{preProc} option in \code{\link{train}}. #' @param sampling a single character value describing the type of additional #' sampling that is conducted after resampling (usually to resolve class #' imbalances). Values are \code{"none"}, \code{"down"}, \code{"up"}, #' \code{"smote"}, or \code{"rose"}. The latter two values require the #' \pkg{DMwR} and \pkg{ROSE} packages, respectively. This argument can also be #' a list to facilitate custom sampling and these details can be found on the #' \pkg{caret} package website for sampling (link below). #' @param index a list with elements for each resampling iteration. Each list #' element is a vector of integers corresponding to the rows used for training #' at that iteration. #' @param indexOut a list (the same length as \code{index}) that dictates which #' data are held-out for each resample (as integers). If \code{NULL}, then the #' unique set of samples not contained in \code{index} is used. #' @param indexFinal an optional vector of integers indicating which samples #' are used to fit the final model after resampling. If \code{NULL}, then #' entire data set is used. #' @param timingSamps the number of training set samples that will be used to #' measure the time for predicting samples (zero indicates that the prediction #' time should not be estimated. #' @param predictionBounds a logical or numeric vector of length 2 (regression #' only). If logical, the predictions can be constrained to be within the limit #' of the training set outcomes. For example, a value of \code{c(TRUE, FALSE)} #' would only constrain the lower end of predictions. If numeric, specific #' bounds can be used. For example, if \code{c(10, NA)}, values below 10 would #' be predicted as 10 (with no constraint in the upper side). #' @param seeds an optional set of integers that will be used to set the seed #' at each resampling iteration. This is useful when the models are run in #' parallel. A value of \code{NA} will stop the seed from being set within the #' worker processes while a value of \code{NULL} will set the seeds using a #' random set of integers. Alternatively, a list can be used. The list should #' have \code{B+1} elements where \code{B} is the number of resamples, unless #' \code{method} is \code{"boot632"} in which case \code{B} is the number of #' resamples plus 1. The first \code{B} elements of the list should be vectors #' of integers of length \code{M} where \code{M} is the number of models being #' evaluated. The last element of the list only needs to be a single integer #' (for the final model). See the Examples section below and the Details #' section. #' @param adaptive a list used when \code{method} is \code{"adaptive_cv"}, #' \code{"adaptive_boot"} or \code{"adaptive_LGOCV"}. See Details below. #' @param trim a logical. If \code{TRUE} the final model in #' \code{object\$finalModel} may have some components of the object removed so #' reduce the size of the saved object. The \code{predict} method will still #' work, but some other features of the model may not work. \code{trim}ing will #' occur only for models where this feature has been implemented. #' @param allowParallel if a parallel backend is loaded and available, should #' the function use it? #' @return An echo of the parameters specified #' @author Max Kuhn #' @references Efron (1983). ``Estimating the error rate of a prediction rule: #' improvement on cross-validation''. Journal of the American Statistical #' Association, 78(382):316-331 #' #' Efron, B., & Tibshirani, R. J. (1994). ``An introduction to the bootstrap'', #' pages 249-252. CRC press. #' #' Bergstra and Bengio (2012), ``Random Search for Hyper-Parameter #' Optimization'', Journal of Machine Learning Research, 13(Feb):281-305 #' #' Kuhn (2014), ``Futility Analysis in the Cross-Validation of Machine Learning #' Models'' \url{http://arxiv.org/abs/1405.6974}, #' #' Package website for subsampling: #' \url{https://topepo.github.io/caret/subsampling-for-class-imbalances.html} #' @keywords utilities #' @examples #' #' \dontrun{ #' #' ## Do 5 repeats of 10-Fold CV for the iris data. We will fit #' ## a KNN model that evaluates 12 values of k and set the seed #' ## at each iteration. #' #' set.seed(123) #' seeds <- vector(mode = "list", length = 51) #' for(i in 1:50) seeds[[i]] <- sample.int(1000, 22) #' #' ## For the last model: #' seeds[[51]] <- sample.int(1000, 1) #' #' ctrl <- trainControl(method = "repeatedcv", #' repeats = 5, #' seeds = seeds) #' #' set.seed(1) #' mod <- train(Species ~ ., data = iris, #' method = "knn", #' tuneLength = 12, #' trControl = ctrl) #' #' #' ctrl2 <- trainControl(method = "adaptive_cv", #' repeats = 5, #' verboseIter = TRUE, #' seeds = seeds) #' #' set.seed(1) #' mod2 <- train(Species ~ ., data = iris, #' method = "knn", #' tuneLength = 12, #' trControl = ctrl2) #' #' } #' #' @export trainControl trainControl <- function(method = "boot", number = ifelse(grepl("cv", method), 10, 25), repeats = ifelse(grepl("[d_]cv$", method), 1, NA), p = .75, search = "grid", initialWindow = NULL, horizon = 1, fixedWindow = TRUE, skip = 0, verboseIter = FALSE, returnData = TRUE, returnResamp = "final", savePredictions = FALSE, classProbs = FALSE, summaryFunction = defaultSummary, selectionFunction = "best", preProcOptions = list(thresh = 0.95, ICAcomp = 3, k = 5, freqCut = 95/5, uniqueCut = 10, cutoff = 0.9), sampling = NULL, index = NULL, indexOut = NULL, indexFinal = NULL, timingSamps = 0, predictionBounds = rep(FALSE, 2), seeds = NA, adaptive = list(min = 5, alpha = 0.05, method = "gls", complete = TRUE), trim = FALSE, allowParallel = TRUE) { if(is.null(selectionFunction)) stop("null selectionFunction values not allowed") if(!(returnResamp %in% c("all", "final", "none"))) stop("incorrect value of returnResamp") if(length(predictionBounds) > 0 && length(predictionBounds) != 2) stop("'predictionBounds' should be a logical or numeric vector of length 2") if(any(names(preProcOptions) == "method")) stop("'method' cannot be specified here") if(any(names(preProcOptions) == "x")) stop("'x' cannot be specified here") if(!is.na(repeats) & !(method %in% c("repeatedcv", "adaptive_cv"))) warning("`repeats` has no meaning for this resampling method.", call. = FALSE) if(!(adaptive$method %in% c("gls", "BT"))) stop("incorrect value of adaptive$method") if(adaptive$alpha < .0000001 | adaptive$alpha > 1) stop("incorrect value of adaptive$alpha") if(grepl("adapt", method)) { num <- if(method == "adaptive_cv") number*repeats else number if(adaptive$min >= num) stop(paste("adaptive$min should be less than", num)) if(adaptive$min <= 1) stop("adaptive$min should be greater than 1") } if(!(search %in% c("grid", "random"))) stop("`search` should be either 'grid' or 'random'") if(method == "oob" & any(names(match.call()) == "summaryFunction")) { warning("Custom summary measures cannot be computed for out-of-baf resampling. ", "This value of `summaryFunction` will be ignored.", call. = FALSE) } list(method = method, number = number, repeats = repeats, search = search, p = p, initialWindow = initialWindow, horizon = horizon, fixedWindow = fixedWindow, skip = skip, verboseIter = verboseIter, returnData = returnData, returnResamp = returnResamp, savePredictions = savePredictions, classProbs = classProbs, summaryFunction = summaryFunction, selectionFunction = selectionFunction, preProcOptions = preProcOptions, sampling = sampling, index = index, indexOut = indexOut, indexFinal = indexFinal, timingSamps = timingSamps, predictionBounds = predictionBounds, seeds = seeds, adaptive = adaptive, trim = trim, allowParallel = allowParallel) } caret/R/diag.R0000644000176200001440000000220213153613153012575 0ustar liggesusers# File src/library/stats/R/contrast.R # Part of the R package, http://www.R-project.org # # Copyright (C) 1995-2012 The R Core Team # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # A copy of the GNU General Public License is available at # http://www.r-project.org/Licenses/ ## a fast version of diag(n, .) / sparse-Diagonal() + dimnames ## Originally .Diag in stats:contrast.R .RDiag <- function (nms, sparse) { n <- as.integer(length(nms)) d <- c(n, n) dn <- list(nms, nms) # if (sparse) { # requireNamespace("Matrix", quietly = TRUE) # new("ddiMatrix", diag = "U", Dim = d, Dimnames = dn) # } # else array(c(rep.int(c(1, numeric(n)), n - 1L), 1), d, dn) }caret/R/calibration.R0000644000176200001440000002553713153613153014200 0ustar liggesusers#' Probability Calibration Plot #' #' @name calibration #' @aliases calibration calibration.formula calibration.default xyplot.calibration ggplot.calibration #' panel.calibration #' #' @description For classification models, this function creates a 'calibration plot' that describes #' how consistent model probabilities are with observed event rates. #' #' @param x a \code{lattice} formula (see \code{\link[lattice:xyplot]{xyplot}} for syntax) where the left #' -hand side of the formula is a factor class variable of the observed outcome and the right-hand side #' specifies one or model columns corresponding to a numeric ranking variable for a model (e.g. class #' probabilities). The classification variable should have two levels. #' #' @param data For \code{calibration.formula}, a data frame (or more precisely, anything that is a valid #' \code{envir} argument in \code{eval}, e.g., a list or an environment) containing values for any #' variables in the formula, as well as \code{groups} and \code{subset} if applicable. If not found in #' \code{data}, or if \code{data} is unspecified, the variables are looked for in the environment of the #' formula. This argument is not used for \code{xyplot.calibration}. For {ggplot.calibration}, \code{data} #' should be an object of class "\code{calibration}"." #' #' @param class a character string for the class of interest #' #' @param cuts If a single number this indicates the number of splits of the data are used to create the #' plot. By default, it uses as many cuts as there are rows in \code{data}. If a vector, these are the #' actual cuts that will be used. #' #' @param subset An expression that evaluates to a logical or integer indexing vector. It is evaluated in #' \code{data}. Only the resulting rows of \code{data} are used for the plot. #' #' @param lattice.options A list that could be supplied to \code{\link[lattice:lattice.options]{lattice.options}} #' #' @param bwidth,dwidth a numeric value for the confidence interval bar width and dodge width, respectively. #' In the latter case, a dodge is only used when multiple models are specified in the formula. #' @param \dots options to pass through to \code{\link[lattice:xyplot]{xyplot}} or the panel function (not #' used in \code{calibration.formula}). #' #' @details #' \code{calibration.formula} is used to process the data and \code{xyplot.calibration} is used to create the plot. #' #' To construct the calibration plot, the following steps are used for each model: #' #' \enumerate{ #' \item The data are split into \code{cuts - 1} roughly equal groups by their class probabilities #' \item the number of samples with true results equal to \code{class} are determined #' \item the event rate is determined for each bin} #' \code{xyplot.calibration} produces a plot of the observed event rate by the mid-point of the bins. #' #' This implementation uses the \pkg{lattice} function \code{\link[lattice:xyplot]{xyplot}}, so plot #' elements can be changed via panel functions, \code{\link[lattice:trellis.par.get]{trellis.par.set}} or #' other means. \code{calibration} uses the panel function \code{\link{panel.calibration}} by default, but #' it can be changed by passing that argument into \code{xyplot.calibration}. #' #' The following elements are set by default in the plot but can be changed by passing new values into #' \code{xyplot.calibration}: \code{xlab = "Bin Midpoint"}, \code{ylab = "Observed Event Percentage"}, #' \code{type = "o"}, \code{ylim = extendrange(c(0, 100))},\code{xlim = extendrange(c(0, 100))} and #' \code{panel = panel.calibration} #' #' For the \code{ggplot} method, confidence intervals on the estimated proportions (from #' \code{\link[stats]{binom.test}}) are also shown. #' #' @return #' \code{calibration.formula} returns a list with elements: #' \item{data}{the data used for plotting} #' \item{cuts}{the number of cuts} #' \item{class}{the event class} #' \item{probNames}{the names of the model probabilities} #' #' \code{xyplot.calibration} returns a \pkg{lattice} object #' #' @author Max Kuhn, some \pkg{lattice} code and documentation by Deepayan Sarkar #' #' @seealso \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:trellis.par.get]{trellis.par.set}} #' #' @examples #' \dontrun{ #' data(mdrr) #' mdrrDescr <- mdrrDescr[, -nearZeroVar(mdrrDescr)] #' mdrrDescr <- mdrrDescr[, -findCorrelation(cor(mdrrDescr), .5)] #' #' #' inTrain <- createDataPartition(mdrrClass) #' trainX <- mdrrDescr[inTrain[[1]], ] #' trainY <- mdrrClass[inTrain[[1]]] #' testX <- mdrrDescr[-inTrain[[1]], ] #' testY <- mdrrClass[-inTrain[[1]]] #' #' library(MASS) #' #' ldaFit <- lda(trainX, trainY) #' qdaFit <- qda(trainX, trainY) #' #' testProbs <- data.frame(obs = testY, #' lda = predict(ldaFit, testX)$posterior[,1], #' qda = predict(qdaFit, testX)$posterior[,1]) #' #' calibration(obs ~ lda + qda, data = testProbs) #' #' calPlotData <- calibration(obs ~ lda + qda, data = testProbs) #' calPlotData #' #' xyplot(calPlotData, auto.key = list(columns = 2)) #' } #' #' @keywords hplot #' #' @export calibration <- function(x, ...) UseMethod("calibration") #' @rdname calibration #' @method calibration default #' @export calibration.default <- function(x, ...) stop("'x' should be a formula") #' @rdname calibration #' @method calibration formula #' @export calibration.formula <- function(x, data = NULL, class = NULL, cuts = 11, subset = TRUE, lattice.options = NULL, ...) { if (!is.null(lattice.options)) { oopt <- lattice.options(lattice.options) on.exit(lattice.options(oopt), add = TRUE) } formula <- x groups <- NULL subset <- eval(substitute(subset), data, environment(x)) form <- latticeParseFormula(formula, data, subset = subset, groups = groups, multiple = TRUE, outer = TRUE, subscripts = TRUE, drop = TRUE) calibData <- data.frame(prob = form$y) probNames <- strsplit(form$right.name, " + ", fixed = TRUE)[[1]] calibData <- data.frame(calibClassVar = rep(form$left, length(probNames)), calibProbVar = form$right) calibData$calibModelVar <- if(length(probNames) > 1) form$condition[[length(form$condition)]] else probNames if(length(form$condition) > 0 && any(names(form$condition) != "")) { ind <- sum(names(form$condition) != "") tmp <- as.data.frame(form$condition[1:ind]) calibData <- cbind(calibData, tmp) } if(!is.factor(calibData$calibClassVar)) stop("the left-hand side of the formula must be a factor of classes") splitVars <- names(calibData)[!(names(calibData) %in% c("calibClassVar", "calibProbVar"))] if(is.null(class)) class <- levels(calibData$calibClassVar)[1] plotData <- ddply(calibData, splitVars, calibCalc, class = class, cuts = cuts) out <- list(data = plotData, cuts = cuts, class = class, probNames = probNames, call = match.call()) class(out) <- "calibration" out } #' @rdname calibration #' @method print calibration #' @export print.calibration <- function(x, ...) { printCall(x$call) cat("Models:", paste(unique(x$data$calibModelVar), collapse = ", "), "\n") cat("Event: ", x$class, "\n") cat("Cuts:", x$cuts, "\n") invisible(x) } #' @importFrom stats binom.test calibCalc <- function(x, class = levels(obs)[1], cuts = 11) { if(length(cuts) == 1) { num_cuts <- cuts cuts <- (0:num_cuts)/num_cuts } else { cuts <- unique(c(0, cuts, 1)) num_cuts <- length(cuts) } binData <- data.frame(prob = x$calibProbVar, bin = cut(x$calibProbVar, cuts, include.lowest = TRUE), class = x$calibClassVar) dataPoints <- ddply(binData, .(bin), function(x, cls) { if(nrow(x) > 0) { tmp <- binom.test(x = sum(x$class == cls), n = nrow(x)) out <- c(Percent = mean(x$class == cls)*100, Lower = tmp$conf.int[1]*100, Upper = tmp$conf.int[2]*100, Count = sum(x$class == cls)) } else out <- c(Percent = NA, Lower = NA, Upper = NA, Count = 0) out }, cls = class, .drop = FALSE) dataPoints$midpoint <- NA for(i in 2:length(cuts)) dataPoints$midpoint[i-1] <- .5*(cuts[i] + cuts[i-1]) * 100 dataPoints$Percent <- ifelse(dataPoints$Count == 0, 0, dataPoints$Percent) dataPoints } #' @method plot calibration #' @export plot.calibration <- function(x, y = NULL, ...) xyplot(x = x, data = NULL, ...) #' @rdname calibration #' @method xyplot calibration #' @importFrom stats as.formula #' @importFrom grDevices extendrange #' @export xyplot.calibration <- function(x, data = NULL, ...){ lFormula <- "Percent ~ midpoint" defaults <- c("calibModelVar", "bin", "Percent", "Count", "Lower", "Upper", "midpoint") extras <- names(x$data)[!(names(x$data) %in% defaults)] if(length(extras) > 0) lFormula <- paste(lFormula, paste(extras, collapse = "*"), sep = "|") rng <- extendrange(c(0, 100)) opts <- list(...) if(!any(names(opts) == "xlab")) opts$xlab <- "Bin Midpoint" if(!any(names(opts) == "ylab")) opts$ylab <- "Observed Event Percentage" if(!any(names(opts) == "type")) opts$type <- "o" if(!any(names(opts) == "ylim")) opts$ylim <- rng if(!any(names(opts) == "xlim")) opts$xlim <- rng if(!any(names(opts) == "panel")) opts$panel <- panel.calibration args <- list(x = as.formula(lFormula), data = x$data) if(length(x$probNames) > 1) args$groups <- x$data$calibModelVar args <- c(args, opts) do.call("xyplot", args) } #' @rdname calibration #' @method ggplot calibration #' @export ggplot.calibration <- function(data, ..., bwidth = 2, dwidth = 3){ data$data$Model <- data$data$calibModelVar mods <- length(unique(data$data$Model)) if(mods == 1) { out <- ggplot(data$data, aes(x = midpoint, y = Percent)) + geom_abline(slope = 1, intercept = 0, col = "black", lty = 2, alpha = .3) + geom_point() + geom_errorbar(aes(ymin = Lower, ymax = Upper), width = bwidth) } else { out <- ggplot(data$data, aes(x = midpoint, y = Percent, group = Model, color = Model)) + geom_abline(slope = 1, intercept = 0, col = "black", lty = 2, alpha = .3) + geom_point(position = position_dodge(width = dwidth)) + geom_errorbar(aes(ymin = Lower, ymax = Upper), width = bwidth, position = position_dodge(width = dwidth)) } out + xlab("Bin Midpoint") + ylab("Observed Event Percentage") } #' @export panel.calibration <- function(...) { panel.abline(0, 1, col = trellis.par.get("reference.line")$col, lwd = trellis.par.get("reference.line")$lwd, lty = trellis.par.get("reference.line")$lty) panel.xyplot(...) } caret/R/trim.R0000644000176200001440000000160013153613153012645 0ustar liggesuserstrim <- function(object, ...) UseMethod("trim") #' @export trim.train <- function(object, ...) { removals <- c("results", "pred", "bestTune", "call", "dots", "metric", "trainingData", "resample", "resampledCM", "perfNames", "maxmimize", "times") for(i in removals) if(i %in% names(object)) object[i] <- NULL c_removals <- c('method', 'number', 'repeats', 'p', 'initialWindow', 'horizon', 'fixedWindow', 'verboseIter', 'returnData', 'returnResamp', 'savePredictions', 'summaryFunction', 'selectionFunction', 'index', 'indexOut', 'indexFinal', 'timingSamps', 'trim', 'yLimits') for(i in c_removals) if(i %in% names(object$control)) object$control[i] <- NULL if(!is.null(object$modelInfo$trim)) object$finalModel <- object$modelInfo$trim(object$finalModel) object }caret/R/suggestions.R0000644000176200001440000000431413153613153014251 0ustar liggesuserssuggestions <- function(model) { out <- c("center" = FALSE, "scale" = FALSE, "nzv" = FALSE, "corr" = FALSE) if(model %in% c("enet", "gaussprLinear", "gaussprPoly", "gaussprRadial", "glmnet", "gpls", "knn", "lars", "lars2", "lasso", "lssvmLinear", "lssvmPoly", "lssvmRadial", "multinom", "neuralnet", "nnet", "penalized", "pls", "relaxo", "rocc", "rvmLinear", "rvmPoly", "rvmRadial", "smda", "sparseLDA", "spls", "superpc", "svmLinear", "svmPoly", "svmRadial")) out["center"] <- TRUE if(model %in% c("gaussprLinear", "gaussprPoly", "gaussprRadial", "glmnet", "gpls", "knn", "lars", "lars2", "lasso", "lssvmLinear", "lssvmPoly", "lssvmRadial", "multinom", "neuralnet", "nnet", "penalized", "pls", "relaxo", "rocc", "rvmLinear", "rvmPoly", "rvmRadial", "smda", "sparseLDA", "spls", "superpc", "svmLinear", "svmPoly", "svmRadial")) out["scale"] <- TRUE if(model %in% c("enet", "gaussprLinear", "gaussprPoly", "gaussprRadial", "gpls", "hda", "hdda", "icr", "knn", "lars", "lars2", "lasso", "lda", "knn", "lm", "lmStepAIC", "glm", "glmStepAIC", "lssvmLinear", "lssvmPoly", "lssvmRadial", "lvq", "mda", "multinom", "nb", "neuralnet", "nnet", "pam", "pcaNNet", "pcr", "pda", "pda2", "penalized", "pls", "qda", "QdaCov", "rda", "relaxo", "rlm", "rocc", "rvmLinear", "rvmPoly", "rvmRadial", "scrda", "sda", "sddaLDA", "sddaQDA", "slda", "smda", "sparseLDA", "spls", "stepLDA", "stepQDA", "superpc", "svmLinear", "svmPoly", "svmRadial", "vbmpRadial")) out["nzv"] <- TRUE if(model %in% c("enet", "lars", "lars2", "lasso", "lda", "lm", "lmStepAIC", "glm", "glmStepAIC", "multinom", "nb", "neuralnet", "nnet", "pda", "pda2", "penalized", "relaxo", "rlm" )) out["nzv"] <- TRUE out } caret/R/filterVarImp.R0000644000176200001440000001124113153613153014300 0ustar liggesusers #' @importFrom ModelMetrics auc rocPerCol <- function(dat, cls){ roc_auc <- auc(cls, dat) max(roc_auc, 1 - roc_auc) } #' @importFrom utils modifyList asNumeric <- function(data){ fc <- sapply(data, is.factor) modifyList(data, lapply(data[, fc], as.numeric)) } #' Calculation of filter-based variable importance #' #' Specific engines for variable importance on a model by model basis. #' #' #' The importance of each predictor is evaluated individually using a #' ``filter'' approach. #' #' For classification, ROC curve analysis is conducted on each predictor. For #' two class problems, a series of cutoffs is applied to the predictor data to #' predict the class. The sensitivity and specificity are computed for each #' cutoff and the ROC curve is computed. The trapezoidal rule is used to #' compute the area under the ROC curve. This area is used as the measure of #' variable importance. For multi--class outcomes, the problem is decomposed #' into all pair-wise problems and the area under the curve is calculated for #' each class pair (i.e class 1 vs. class 2, class 2 vs. class 3 etc.). For a #' specific class, the maximum area under the curve across the relevant #' pair--wise AUC's is used as the variable importance measure. #' #' For regression, the relationship between each predictor and the outcome is #' evaluated. An argument, \code{nonpara}, is used to pick the model fitting #' technique. When \code{nonpara = FALSE}, a linear model is fit and the #' absolute value of the $t$--value for the slope of the predictor is used. #' Otherwise, a loess smoother is fit between the outcome and the predictor. #' The $R^2$ statistic is calculated for this model against the intercept only #' null model. #' #' @param x A matrix or data frame of predictor data #' @param y A vector (numeric or factor) of outcomes) #' @param nonpara should nonparametric methods be used to assess the #' relationship between the features and response #' @param ... options to pass to either \code{\link[stats]{lm}} or #' \code{\link[stats]{loess}} #' @return A data frame with variable importances. Column names depend on the #' problem type. For regression, the data frame contains one column: "Overall" #' for the importance values. #' @author Max Kuhn #' @keywords models #' @examples #' #' data(mdrr) #' filterVarImp(mdrrDescr[, 1:5], mdrrClass) #' #' data(BloodBrain) #' #' filterVarImp(bbbDescr[, 1:5], logBBB, nonpara = FALSE) #' apply(bbbDescr[, 1:5], #' 2, #' function(x, y) summary(lm(y~x))$coefficients[2,3], #' y = logBBB) #' #' filterVarImp(bbbDescr[, 1:5], logBBB, nonpara = TRUE) #' #' @export filterVarImp #' @importFrom stats loess resid #' @importFrom utils combn filterVarImp <- function(x, y, nonpara = FALSE, ...){ # converting factors to numeric notNumber <- sapply(x, function(x) !is.numeric(x)) x = asNumeric(x) if(is.factor(y)){ classLevels <- levels(y) k <- length(classLevels) if(k > 2){ Combs <- combn(classLevels, 2) CombsN <- combn(1:k, 2) lStat <- lapply(1:ncol(Combs), FUN = function(cc){ yLevs <- as.character(y) %in% Combs[,cc] tmpX <- x[yLevs,] tmpY <- as.numeric(y[yLevs] == Combs[,cc][2]) apply(tmpX, 2, rocPerCol, cls = tmpY) }) Stat = do.call("cbind", lStat) loutStat <- lapply(1:k, function(j){ apply(Stat[,CombsN[,j]], 1, max) }) outStat = do.call("cbind", loutStat) } else { tmp <- apply(x, 2, rocPerCol, cls = y) outStat <- cbind(tmp, tmp) } outStat <- as.data.frame(outStat) colnames(outStat) <- classLevels rownames(outStat) <- dimnames(x)[[2]] outStat <- data.frame(outStat) } else { paraFoo <- function(data, y) abs(coef(summary(lm(y ~ data, na.action = na.omit)))[2, "t value"]) nonparaFoo <- function(x, y, ...) { meanMod <- sum((y - mean(y, rm.na = TRUE))^2) nzv <- nearZeroVar(x, saveMetrics = TRUE) if(nzv$zeroVar) return(NA) if(nzv$percentUnique < 20) { regMod <- lm(y~x, na.action = na.omit, ...) } else { regMod <- try(loess(y~x, na.action = na.omit, ...), silent = TRUE) if(class(regMod) == "try-error" | any(is.nan(regMod$residuals))) try(regMod <- lm(y~x, ...)) if(class(regMod) == "try-error") return(NA) } pR2 <- 1 - (sum(resid(regMod)^2)/meanMod) if(pR2 < 0) pR2 <- 0 pR2 } testFunc <- if(nonpara) nonparaFoo else paraFoo outStat <- apply(x, 2, testFunc, y = y) outStat <- data.frame(Overall = outStat) } outStat } caret/R/posPredValue.R0000644000176200001440000000407713153613153014316 0ustar liggesusers#' @rdname sensitivity #' @export posPredValue <- function(data, ...){ UseMethod("posPredValue") } #' @rdname sensitivity #' @export "posPredValue.default" <- function(data, reference, positive = levels(reference)[1], prevalence = NULL, ...) { if(!is.factor(reference) | !is.factor(data)) stop("inputs must be factors") if(length(unique(c(levels(reference), levels(data)))) != 2) stop("input data must have the same two levels") lvls <- levels(data) if(is.null(prevalence)) prevalence <- mean(reference == positive) sens <- sensitivity(data, reference, positive) spec <- specificity(data, reference, lvls[lvls != positive]) (sens * prevalence)/((sens*prevalence) + ((1-spec)*(1-prevalence))) } #' @rdname sensitivity #' @export "posPredValue.table" <- function(data, positive = rownames(data)[1], prevalence = NULL, ...) { ## "truth" in columns, predictions in rows if(!all.equal(nrow(data), ncol(data))) stop("the table must have nrow = ncol") if(!all.equal(rownames(data), colnames(data))) stop("the table must the same groups in the same order") if(nrow(data) > 2) { tmp <- data data <- matrix(NA, 2, 2) colnames(data) <- rownames(data) <- c("pos", "neg") posCol <- which(colnames(tmp) %in% positive) negCol <- which(!(colnames(tmp) %in% positive)) data[1, 1] <- sum(tmp[posCol, posCol]) data[1, 2] <- sum(tmp[posCol, negCol]) data[2, 1] <- sum(tmp[negCol, posCol]) data[2, 2] <- sum(tmp[negCol, negCol]) data <- as.table(data) positive <- "pos" rm(tmp) } negative <- colnames(data)[colnames(data) != positive] if(is.null(prevalence)) prevalence <- sum(data[, positive])/sum(data) sens <- sensitivity(data, positive) spec <- specificity(data, negative) (sens * prevalence)/((sens*prevalence) + ((1-spec)*(1-prevalence))) } #' @rdname sensitivity #' @export "posPredValue.matrix" <- function(data, positive = rownames(data)[1], prevalence = NULL, ...) { data <- as.table(data) posPredValue.table(data, prevalence = prevalence) } caret/R/sensitivity.R0000644000176200001440000001573713153613153014304 0ustar liggesusers#' Calculate sensitivity, specificity and predictive values #' #' These functions calculate the sensitivity, specificity or predictive values #' of a measurement system compared to a reference results (the truth or a gold #' standard). The measurement and "truth" data must have the same two possible #' outcomes and one of the outcomes must be thought of as a "positive" results. #' #' The sensitivity is defined as the proportion of positive results out of the #' number of samples which were actually positive. When there are no positive #' results, sensitivity is not defined and a value of \code{NA} is returned. #' Similarly, when there are no negative results, specificity is not defined #' and a value of \code{NA} is returned. Similar statements are true for #' predictive values. #' #' The positive predictive value is defined as the percent of predicted #' positives that are actually positive while the negative predictive value is #' defined as the percent of negative positives that are actually negative. #' #' Suppose a 2x2 table with notation #' #' \tabular{rcc}{ \tab Reference \tab \cr Predicted \tab Event \tab No Event #' \cr Event \tab A \tab B \cr No Event \tab C \tab D \cr } #' #' The formulas used here are: \deqn{Sensitivity = A/(A+C)} \deqn{Specificity = #' D/(B+D)} \deqn{Prevalence = (A+C)/(A+B+C+D)} \deqn{PPV = (sensitivity * #' Prevalence)/((sensitivity*Prevalence) + ((1-specificity)*(1-Prevalence)))} #' \deqn{NPV = (specificity * (1-Prevalence))/(((1-sensitivity)*Prevalence) + #' ((specificity)*(1-Prevalence)))} #' #' See the references for discussions of the statistics. #' #' @aliases sensitivity sensitivity.default sensitivity.table #' sensitivity.matrix specificity specificity.default specificity.table #' specificity.matrix posPredValue posPredValue.default posPredValue.table #' posPredValue.matrix negPredValue negPredValue.default negPredValue.table #' negPredValue.matrix #' @param data for the default functions, a factor containing the discrete #' measurements. For the \code{table} or \code{matrix} functions, a table or #' matric object, respectively. #' @param reference a factor containing the reference values #' @param positive a character string that defines the factor level #' corresponding to the "positive" results #' @param negative a character string that defines the factor level #' corresponding to the "negative" results #' @param prevalence a numeric value for the rate of the "positive" class of #' the data #' @param na.rm a logical value indicating whether \code{NA} values should be #' stripped before the computation proceeds #' @param ... not currently used #' @return A number between 0 and 1 (or NA). #' @author Max Kuhn #' @seealso \code{\link{confusionMatrix}} #' @references Kuhn, M. (2008), ``Building predictive models in R using the #' caret package, '' \emph{Journal of Statistical Software}, #' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}). #' #' Altman, D.G., Bland, J.M. (1994) ``Diagnostic tests 1: sensitivity and #' specificity,'' \emph{British Medical Journal}, vol 308, 1552. #' #' Altman, D.G., Bland, J.M. (1994) ``Diagnostic tests 2: predictive values,'' #' \emph{British Medical Journal}, vol 309, 102. #' @keywords manip #' @examples #' #' \dontrun{ #' ################### #' ## 2 class example #' #' lvs <- c("normal", "abnormal") #' truth <- factor(rep(lvs, times = c(86, 258)), #' levels = rev(lvs)) #' pred <- factor( #' c( #' rep(lvs, times = c(54, 32)), #' rep(lvs, times = c(27, 231))), #' levels = rev(lvs)) #' #' xtab <- table(pred, truth) #' #' sensitivity(pred, truth) #' sensitivity(xtab) #' posPredValue(pred, truth) #' posPredValue(pred, truth, prevalence = 0.25) #' #' specificity(pred, truth) #' negPredValue(pred, truth) #' negPredValue(xtab) #' negPredValue(pred, truth, prevalence = 0.25) #' #' #' prev <- seq(0.001, .99, length = 20) #' npvVals <- ppvVals <- prev * NA #' for(i in seq(along = prev)) #' { #' ppvVals[i] <- posPredValue(pred, truth, prevalence = prev[i]) #' npvVals[i] <- negPredValue(pred, truth, prevalence = prev[i]) #' } #' #' plot(prev, ppvVals, #' ylim = c(0, 1), #' type = "l", #' ylab = "", #' xlab = "Prevalence (i.e. prior)") #' points(prev, npvVals, type = "l", col = "red") #' abline(h=sensitivity(pred, truth), lty = 2) #' abline(h=specificity(pred, truth), lty = 2, col = "red") #' legend(.5, .5, #' c("ppv", "npv", "sens", "spec"), #' col = c("black", "red", "black", "red"), #' lty = c(1, 1, 2, 2)) #' #' ################### #' ## 3 class example #' #' library(MASS) #' #' fit <- lda(Species ~ ., data = iris) #' model <- predict(fit)$class #' #' irisTabs <- table(model, iris$Species) #' #' ## When passing factors, an error occurs with more #' ## than two levels #' sensitivity(model, iris$Species) #' #' ## When passing a table, more than two levels can #' ## be used #' sensitivity(irisTabs, "versicolor") #' specificity(irisTabs, c("setosa", "virginica")) #' } #' #' @export sensitivity sensitivity <- function(data, ...){ UseMethod("sensitivity") } #' @rdname sensitivity #' @importFrom stats complete.cases #' @export "sensitivity.default" <- function(data, reference, positive = levels(reference)[1], na.rm = TRUE, ...) { if(!is.factor(reference) | !is.factor(data)) stop("inputs must be factors") ## todo: relax the =2 constraint and let ngative length be > 2 if(length(unique(c(levels(reference), levels(data)))) != 2) stop("input data must have the same two levels") if(na.rm) { cc <- complete.cases(data) & complete.cases(reference) if(any(!cc)) { data <- data[cc] reference <- reference[cc] } } numer <- sum(data %in% positive & reference %in% positive) denom <- sum(reference %in% positive) sens <- ifelse(denom > 0, numer / denom, NA) sens } #' @rdname sensitivity #' @export "sensitivity.table" <- function(data, positive = rownames(data)[1], ...) { ## "truth" in columns, predictions in rows if(!all.equal(nrow(data), ncol(data))) stop("the table must have nrow = ncol") if(!all.equal(rownames(data), colnames(data))) stop("the table must the same groups in the same order") if(nrow(data) > 2) { tmp <- data data <- matrix(NA, 2, 2) colnames(data) <- rownames(data) <- c("pos", "neg") posCol <- which(colnames(tmp) %in% positive) negCol <- which(!(colnames(tmp) %in% positive)) data[1, 1] <- sum(tmp[posCol, posCol]) data[1, 2] <- sum(tmp[posCol, negCol]) data[2, 1] <- sum(tmp[negCol, posCol]) data[2, 2] <- sum(tmp[negCol, negCol]) data <- as.table(data) positive <- "pos" rm(tmp) } numer <- sum(data[positive, positive]) denom <- sum(data[, positive]) sens <- ifelse(denom > 0, numer / denom, NA) sens } #' @rdname sensitivity "sensitivity.matrix" <- function(data, positive = rownames(data)[1], ...) { data <- as.table(data) sensitivity.table(data) } caret/R/expoTrans.R0000644000176200001440000000623713153613153013670 0ustar liggesusers #' @export expoTrans <- function(y, ...) UseMethod("expoTrans") #' @importFrom stats optim #' @export expoTrans.default <- function(y, na.rm = TRUE, init = 0, lim = c(-4, 4), method = "Brent", numUnique = 3, ...) { requireNamespaceQuietStop("e1071") if(any(is.na(y)) & !na.rm) stop("missing data found") call <- match.call() rat <- max(y, na.rm = TRUE)/min(y, na.rm = TRUE) if(length(unique(y[!is.na(y)])) >= numUnique) { results <- optim(init, manlyLik, x = y[!is.na(y)], neg = TRUE, method = method, lower = lim[1], upper = lim[2]) out <- list(lambda = results$par, est = manly(y, results$par)) if(length(unique(out$est)) == 1 | results$convergence > 0) out <- list(lambda = NA, est = y) } else out <- list(lambda = NA, est = y) out$n <- sum(!is.na(y)) out$skewness <- e1071::skewness(y, na.rm = TRUE) out$summary <- summary(y) out$ratio <- max(y, na.rm = TRUE)/min(y, na.rm = TRUE) out$class <- class class(out) <- "expoTrans" out } #' @importFrom stats optim expoTrans.numeric <- function(y, na.rm = TRUE, init = 0, lim = c(-4, 4), method = "Brent", numUnique = 3, ...) { requireNamespaceQuietStop("e1071") if(any(is.na(y)) & !na.rm) stop("missing data found") call <- match.call() rat <- max(y, na.rm = TRUE)/min(y, na.rm = TRUE) if(length(unique(y[!is.na(y)])) >= numUnique) { results <- optim(init, manlyLik, x = y[!is.na(y)], neg = TRUE, method = method, lower = lim[1], upper = lim[2]) out <- list(lambda = results$par, est = manly(y, results$par)) if(length(unique(out$est)) == 1 | results$convergence > 0) out <- list(lambda = NA, est = y) } else out <- list(lambda = NA, est = y) out$n <- sum(!is.na(y)) out$skewness <- e1071::skewness(y, na.rm = TRUE) out$summary <- summary(y) out$ratio <- max(y, na.rm = TRUE)/min(y, na.rm = TRUE) out$class <- class class(out) <- "expoTrans" out } #' @export print.expoTrans <- function(x, digits = max(3L, getOption("digits") - 3L), ...) { cat("Exponential Transformation\n\n") cat(x$n, "data points used to estimate Lambda\n\n") cat("Input data summary:\n") print(x$summary) cat("\nLargest/Smallest:", signif(x$ratio, digits), "\n") cat("Sample Skewness:", signif(x$skewness, digits), "\n") if(!is.na(x$lambda)) { cat("\nEstimated Lambda:", signif(x$lambda, digits), "\n") } else cat("\nLambda could not be estimated; no transformation is applied\n") cat("\n") invisible(x) } #' @export predict.expoTrans <- function(object, newdata, ...) { if(!is.vector(newdata) || !is.numeric(newdata)) stop("newdata should be a numeric vector") if(is.na(object$lambda)) { out <- newdata } else out <- manly(newdata, object$lambda) out } manly <- function(x, lambda) if(lambda == 0) x else (exp(lambda*x) - 1)/lambda #' @importFrom stats var manlyLik <- function(lambda, x, neg = FALSE) { y <- manly(x, lambda) v <- var(y, na.rm = TRUE) L1 <- lambda * sum(x, na.rm= TRUE) L2 <- .5 * sum(y - mean(y, na.rm = TRUE))/v L3 <- sum(!is.na(x)) * log(sqrt(2*pi)*sqrt(v)) out <- L1 - L2 - L3 if(!is.finite(out) | is.na(out)) out <- .Machine$double.xmax if(neg) -out else out } caret/R/createModel.R0000644000176200001440000000433413153613153014125 0ustar liggesusers#' Internal Functions #' @name caret-internal #' @aliases createModel resampleWrapper sortImp caretTheme progress hasTerms predictionFunction probFunction expandParameters flatTable MeanSD sbfIter gamFormula bagEarthStats cforestStats ipredStats rfStats well_numbered #' #' @description Internal functions #' #' #' @author Max Kuhn, but \code{caretTheme} uses an expanded grid of the "Blues" palette designed by Cynthia Brewer and Mark Harrower #' #' @importFrom stats predict #' @export #' @keywords internal "createModel" <-function(x, y, wts, method, tuneValue, obsLevels, pp = NULL, last = FALSE, sampling = NULL, classProbs, ...) { ## To get of warnings "some row.names duplicated: " when resampling with replacement if(is.data.frame(x) | is.matrix(x)) rownames(x) <- make.names(rownames(x), unique = TRUE) if(!is.null(sampling) && sampling$first) { tmp <- sampling$func(x, y) x <- tmp$x y <- tmp$y rm(tmp) } if(!is.null(pp$options)) { pp$method <- pp$options pp$options <- NULL if("ica" %in% pp$method) pp$n.comp <- pp$ICAcomp pp$ICAcomp <- NULL pp$x <- x pp$outcome <- y ppObj <- do.call("preProcess", pp) ppObj$call <- "scrubed" x <- predict(ppObj, x) rm(pp) } else ppObj <- NULL if(!is.null(sampling) && !sampling$first) { tmp <- sampling$func(x, y) x <- tmp$x y <- tmp$y rm(tmp) } modelFit <- method$fit(x = x, y = y, wts = wts, param = tuneValue, lev = obsLevels, last = last, classProbs = classProbs, ...) ## for models using S4 classes, you can't easily append data, so ## exclude these and we'll use other methods to get this information if(is.null(method$label)) method$label <- "" if(!isS4(modelFit) & !(method$label %in% c("Ensemble Partial Least Squares Regression", "Ensemble Partial Least Squares Regression with Feature Selection"))) { modelFit$xNames <- colnames(x) modelFit$problemType <- if(is.factor(y)) "Classification" else "Regression" modelFit$tuneValue <- tuneValue modelFit$obsLevels <- obsLevels modelFit$param <- list(...) } list(fit = modelFit, preProc = ppObj) } caret/R/BoxCoxTrans.R0000644000176200001440000001257213153613153014116 0ustar liggesusers#' Box-Cox and Exponential Transformations #' #' @name BoxCoxTrans #' @aliases BoxCoxTrans.default BoxCoxTrans predict.BoxCoxTrans expoTrans.default expoTrans predict.expoTrans #' #' @description These classes can be used to estimate transformations and apply them to existing and future data #' #' @param y a numeric vector of data to be transformed. For \code{BoxCoxTrans}, the data must be strictly positive. #' @param x an optional dependent variable to be used in a linear model. #' @param fudge a tolerance value: lambda values within +/-fudge will be coerced to 0 and within 1+/-fudge will be coerced to 1. #' @param numUnique how many unique values should \code{y} have to estimate the transformation? #' @param na.rm a logical value indicating whether \code{NA} values should be stripped from \code{y} and \code{x} before the computation proceeds. #' @param newdata a numeric vector of values to transform. #' @param digits minimal number of \emph{significant digits}. #' @param object an object of class \code{BoxCoxTrans} or \code{expoTrans}. #' @param \dots for \code{BoxCoxTrans}: options to pass to \code{\link[MASS]{boxcox}}. \code{plotit} should not be passed through. For \code{predict.BoxCoxTrans}, additional arguments are ignored. #' #' @details #' \code{BoxCoxTrans} function is basically a wrapper for the \code{\link[MASS]{boxcox}} function in the MASS library. It can be used to estimate the transformation and apply it to new data. #' #' \code{expoTrans} estimates the exponential transformation of Manly (1976) but assumes a common mean for #' the data. The transformation parameter is estimated by directly maximizing the likelihood. #' #' If \code{any(y <= 0)} or if \code{length(unique(y)) < numUnique}, lambda is not estimated and no #' transformation is applied. #' #' @return #' Both functions returns a list of class of either \code{BoxCoxTrans} or \code{expoTrans} with #' elements #' \item{lambda }{estimated transformation value} #' \item{fudge }{value of \code{fudge}} #' \item{n }{number of data points used to estimate lambda} #' \item{summary }{the results of \code{summary(y)}} #' \item{ratio }{\code{max(y)/min(y)}} #' \item{skewness }{sample skewness statistic} #' \code{BoxCoxTrans} also returns: \item{fudge }{value of \code{fudge}} #' #' The \code{predict} functions returns numeric vectors of transformed values #' #' @references Box, G. E. P. and Cox, D. R. (1964) An analysis of transformations (with discussion). Journal of the Royal Statistical Society B, 26, 211-252. #' Manly, B. L. (1976) Exponential data transformations. The Statistician, 25, 37 - 42. #' #' @author Max Author #' #' @seealso \code{\link[MASS]{boxcox}}, \code{\link{preProcess}}, \code{\link{optim}} #' #' @examples #' data(BloodBrain) #' #' ratio <- exp(logBBB) #' bc <- BoxCoxTrans(ratio) #' bc #' #' predict(bc, ratio[1:5]) #' #' ratio[5] <- NA #' bc2 <- BoxCoxTrans(ratio, bbbDescr$tpsa, na.rm = TRUE) #' bc2 #' #' manly <- expoTrans(ratio) #' manly #' #' @keywords utilities #' #' @export BoxCoxTrans <- function(y, ...) UseMethod("BoxCoxTrans") ##TODO add an epsilon? ## TODO add exclusion list to preProc? #' @rdname BoxCoxTrans #' @export BoxCoxTrans.default <- function(y, x = rep(1, length(y)), fudge = .2, numUnique = 3, na.rm = FALSE, ...) { requireNamespaceQuietStop("MASS") requireNamespaceQuietStop("e1071") if(na.rm && (any(is.na(y)) | any(is.na(x)))) { rmv <- is.na(y) | is.na(x) y <- y[!rmv] x <- x[!rmv] } if(!is.numeric(y) | is.factor(y) | is.character(y)) stop("y must be numeric") if(any(y <= 0) | length(unique(y)) < numUnique) { out <- list(lambda = NA, summary = summary(y), ratio = NA, n = length(y)) } else { bc <- MASS::boxcox(y~x, plotit = FALSE, ...) out <- list(lambda = bc$x[which.max(bc$y)]) } out$fudge <- fudge out$n <- length(y) out$summary <- summary(y) out$ratio <- max(y)/min(y) out$skewness <- e1071::skewness(y) class(out) <- "BoxCoxTrans" out } #' @rdname BoxCoxTrans #' @method print BoxCoxTrans #' @export print.BoxCoxTrans <- function(x, newdata, digits = 3, ...){ cat("Box-Cox Transformation\n\n") cat(x$n, "data points used to estimate Lambda\n\n") cat("Input data summary:\n") print(x$summary) if(!is.na(x$lambda)) { cat("\nLargest/Smallest:", signif(x$ratio, digits), "\n") cat("Sample Skewness:", signif(x$skewness, digits), "\n") cat("\nEstimated Lambda:", signif(x$lambda, digits), "\n") if(x$lambda < x$fudge & x$lambda > -x$fudge) cat("With fudge factor, Lambda = 0 will be used for transformations\n") if(x$lambda < 1+x$fudge & x$lambda > 1-x$fudge) cat("With fudge factor, no transformation is applied\n") } else cat("\nLambda could not be estimated; no transformation is applied\n") cat("\n") invisible(x) } #' @rdname BoxCoxTrans #' @method predict BoxCoxTrans #' @export predict.BoxCoxTrans <- function(object, newdata, ...) { if(!is.vector(newdata) || !is.numeric(newdata)) stop("newdata should be a numeric vector") if(is.na(object$lambda)) { out <- newdata } else { if(object$lambda < object$fudge & object$lambda > -object$fudge) { if(any(newdata[!is.na(newdata)] <= 0)) warning("newdata should have values > 0") out <- log(newdata) } else { if(object$lambda < 1+object$fudge & object$lambda > 1-object$fudge) { out <- newdata } else out <- (newdata^object$lambda - 1)/object$lambda } } out } caret/R/gafs.R0000644000176200001440000014654713153613153012636 0ustar liggesusers ga_internal_names <- c('Iter','Size','Similarity','Similarity_M','Resample') ga_external_names <- c('Iter','Resample') check_ga_pop <- function(x) { no_vars <- apply(x, 1, sum) == 0 if(any(no_vars)) { for(i in which(no_vars)) { here <- sample(1:ncol(x), 1) x[i,here] <- 1 } } x } ga_func_check <- function(x) { fnames <- names(x) required <- c('fit', 'fitness_intern', 'pred', 'fitness_extern', 'initial', 'selection', 'crossover', 'mutation', 'selectIter') missing <- !(required %in% fnames) if(any(missing)) stop(paste("The following functions are missing from the 'func' argument:", paste(required[missing], sep = "", collapse = ","))) invisible(x) args <- lapply(x, function(x) names(formals(x))) expected <- list(fit = c('x', 'y', 'lev', 'last', '...'), fitness_intern = c('object', 'x', 'y', 'maximize', 'p'), pred = c('object', 'x'), fitness_extern = c('data', 'lev', 'model'), initial = c('vars', 'popSize', '...'), selection = c('population', 'fitness', 'r', 'q', '...'), crossover = c('population', 'fitness', 'parents', '...'), mutation = c('population', 'parent', '...'), selectIter = c('x', 'metric', 'maximize')) for(i in names(x)) { .args <- names(formals(x[[i]])) .check <- same_args(.args, expected[[i]]) if(!.check) { stop(paste("Arguments to function", i, "should be {", paste(expected[[i]], sep = "", collapse = ", "), "} and these were given {", paste(.args, sep = "", collapse = ", "), "}\n")) } } } #' Ancillary genetic algorithm functions #' #' @description #' Built-in functions related to genetic algorithms #' #' These functions are used with the \code{functions} argument of the #' \code{\link{gafsControl}} function. More information on the details of these #' functions are at \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html}. #' #' Most of the \code{gafs_*} functions are based on those from the GA package #' by Luca Scrucca. These functions here are small re-writes to work outside of #' the GA package. #' #' The objects \code{caretGA}, \code{rfGA} and \code{treebagGA} are example #' lists that can be used with the \code{functions} argument of #' \code{\link{gafsControl}}. #' #' In the case of \code{caretGA}, the \code{...} structure of #' \code{\link{gafs}} passes through to the model fitting routine. As a #' consequence, the \code{\link{train}} function can easily be accessed by #' passing important arguments belonging to \code{\link{train}} to #' \code{\link{gafs}}. See the examples below. By default, using \code{caretGA} #' will used the resampled performance estimates produced by #' \code{\link{train}} as the internal estimate of fitness. #' #' For \code{rfGA} and \code{treebagGA}, the \code{randomForest} and #' \code{bagging} functions are used directly (i.e. \code{\link{train}} is not #' used). Arguments to either of these functions can also be passed to them #' though the \code{\link{gafs}} call (see examples below). For these two #' functions, the internal fitness is estimated using the out-of-bag estimates #' naturally produced by those functions. While faster, this limits the user to #' accuracy or Kappa (for classification) and RMSE and R-squared (for #' regression). #' #' @aliases gafs_initial gafs_lrSelection gafs_rwSelection gafs_tourSelection #' gafs_uCrossover gafs_spCrossover gafs_raMutation caretGA rfGA treebagGA #' @param vars number of possible predictors #' @param popSize the population size passed into \code{\link{gafs}} #' @param population a binary matrix of the current subsets with predictors in #' columns and individuals in rows #' @param fitness a vector of fitness values #' @param parent,parents integer(s) for which chromosomes are altered #' @param r,q,k tuning parameters for the specific selection operator #' @param \dots not currently used #' @return The return value depends on the function. #' @author Luca Scrucca, \code{gafs_initial}, \code{caretGA}, \code{rfGA} and #' \code{treebagGA} by Max Kuhn #' @seealso \code{\link{gafs}}, \code{\link{gafsControl}} #' @references Scrucca L (2013). GA: A Package for Genetic Algorithms in R. #' Journal of Statistical Software, 53(4), 1-37. #' #' \url{cran.r-project.org/web/packages/GA/} #' #' \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html} #' @examples #' #' pop <- gafs_initial(vars = 10, popSize = 10) #' pop #' #' gafs_lrSelection(population = pop, fitness = 1:10) #' #' gafs_spCrossover(population = pop, fitness = 1:10, parents = 1:2) #' #' #' \dontrun{ #' ## Hypothetical examples #' lda_ga <- gafs(x = predictors, #' y = classes, #' gafsControl = gafsControl(functions = caretGA), #' ## now pass arguments to `train` #' method = "lda", #' metric = "Accuracy" #' trControl = trainControl(method = "cv", classProbs = TRUE)) #' #' rf_ga <- gafs(x = predictors, #' y = classes, #' gafsControl = gafsControl(functions = rfGA), #' ## these are arguments to `randomForest` #' ntree = 1000, #' importance = TRUE) #' } #' #' #' @export gafs_initial gafs_initial <- function (vars, popSize, ...) { x <- matrix(NA, nrow = popSize, ncol = vars) probs <- seq(.9, .1, length = popSize) for(i in 1:popSize){ x[i,] <- sample(0:1, replace = TRUE, size = vars, prob = c(probs[i], 1-probs[i])) } var_count <- apply(x, 1, sum) if(any(var_count == 0)) { for(i in which(var_count == 0)) { x[i, ] <- sample(0:1, replace = TRUE, size = vars) } } x } #' @rdname gafs_initial #' @export gafs_lrSelection <- function (population, fitness, r = NULL, q = NULL, ...) { popSize = nrow(population) if(is.null(r)) r <- 2/(popSize * (popSize - 1)) if(is.null(q)) q <- 2/popSize rank <- (popSize + 1) - rank(fitness, ties.method = "random") prob <- q - (rank - 1) * r sel <- sample(1:popSize, size = popSize, prob = pmin(pmax(0, prob), 1, na.rm = TRUE), replace = TRUE) out <- list(population = population[sel, , drop = FALSE], fitness = fitness[sel]) out } #' @rdname gafs_initial #' @export gafs_spCrossover <- function (population, fitness, parents, ...) { fitness <- fitness[parents] parents <- population[parents, , drop = FALSE] n <- ncol(parents) children <- matrix(as.double(NA), nrow = 2, ncol = n) fitnessChildren <- rep(NA, 2) crossOverPoint <- sample(0:n, size = 1) if (crossOverPoint == 0) { children[1:2, ] <- parents[2:1, ] fitnessChildren[1:2] <- fitness[2:1] } else if (crossOverPoint == n) { children <- parents fitnessChildren <- fitness } else { children[1, ] <- c(parents[1, 1:crossOverPoint], parents[2, (crossOverPoint + 1):n]) children[2, ] <- c(parents[2, 1:crossOverPoint], parents[1, (crossOverPoint + 1):n]) } out <- list(children = children, fitness = fitnessChildren) out } #' @rdname gafs_initial #' @export gafs_raMutation <- function (population, parent, ...) { mutate <- parent <- as.vector(population[parent, ]) n <- length(parent) j <- sample(1:n, size = 1) mutate[j] <- abs(mutate[j] - 1) mutate } #' @rdname gafs_initial gafs_nlrSelection <- function (population, fitness, q = 0.25, ...) { popSize <- nrow(population) rank <- (popSize + 1) - rank(fitness, ties.method = "random") prob <- q * (1 - q)^(rank - 1) sel <- sample(1:popSize, size = popSize, prob = pmin(pmax(0, prob), 1, na.rm = TRUE), replace = TRUE) out <- list(population = population[sel, , drop = FALSE], fitness = fitness[sel]) return(out) } #' @rdname gafs_initial #' @export gafs_rwSelection <- function (population, fitness, ...) { popSize <- nrow(population) prob <- abs(fitness)/sum(abs(fitness)) sel <- sample(1:popSize, size = popSize, prob = pmin(pmax(0, prob), 1, na.rm = TRUE), replace = TRUE) out <- list(population = population[sel, , drop = FALSE], fitness = fitness[sel]) return(out) } #' @rdname gafs_initial #' @export gafs_tourSelection <- function (population, fitness, k = 3, ...) { popSize <- nrow(population) sel <- rep(NA, popSize) for (i in 1:popSize) { s <- sample(1:popSize, size = k) sel[i] <- s[which.max(fitness[s])] } out <- list(population = population[sel, , drop = FALSE], fitness = fitness[sel]) return(out) } #' @rdname gafs_initial #' @importFrom stats runif #' @export gafs_uCrossover <- function (population, parents, ...) { parents <- population[parents, , drop = FALSE] n <- ncol(parents) u <- runif(n) children <- parents children[1:2, u > 0.5] <- children[2:1, u > 0.5] out <- list(children = children, fitness = rep(NA, 2)) return(out) } ################################################################### ## #' @rdname safsControl #' @export gafsControl <- function(functions = NULL, method = "repeatedcv", metric = NULL, maximize = NULL, number = ifelse(grepl("cv", method), 10, 25), repeats = ifelse(grepl("cv", method), 1, 5), verbose = FALSE, returnResamp = "final", p = .75, index = NULL, indexOut = NULL, seeds = NULL, holdout = 0, genParallel = FALSE, allowParallel = TRUE) { if(!(method %in% c("cv", "boot", "repeatedcv", "LGOCV", "LOOCV"))) stop('method should be one of: "cv", "boot", "repeatedcv", "LGOCV" or "LOOCV"') if(holdout < 0 | holdout >= 1) stop("'holdout' should be in [0, 1)") if(!is.null(metric)) { if(length(metric) != 2) stop("'metric' should be a two-element named vector. See ?gafsControl") if(is.null(names(metric)) || any(sort(names(metric)) != c("external", "internal"))) stop("'metric' should have names 'internal' and 'external' See ?gafsControl") } if(!is.null(maximize)) { if(length(maximize) != 2) stop("'maximize' should be a two-element named vector. See ?gafsControl") if(is.null(names(maximize)) || any(sort(names(maximize)) != c("external", "internal"))) stop("'maximize' should have names 'internal' and 'external' See ?gafsControl") } list(functions = if(is.null(functions)) caretFuncs else functions, method = method, metric = metric, maximize = maximize, number = number, repeats = repeats, returnResamp = returnResamp, verbose = verbose, p = p, index = index, indexOut = indexOut, seeds = seeds, holdout = holdout, genParallel = genParallel, allowParallel = allowParallel) } ################################################################### ## ga_wrapper <- function(ind, x, y, funcs, holdoutX, holdoutY, testX, testY, ga_metric, ga_maximize, lvl = lvl, last = FALSE, indiv = 0, ...) { mod <- funcs$fit(x[, ind, drop=FALSE], y, lev = lvl, last = last,...) internal <- funcs$fitness_intern(mod, x = if(!is.null(holdoutX)) holdoutX[, ind, drop=FALSE] else x[, ind, drop=FALSE], y = if(!is.null(holdoutY)) holdoutY else y, p = ncol(x)) if(!is.null(testX)) { modelPred <- funcs$pred(mod, testX[, ind, drop=FALSE]) if(is.data.frame(modelPred) | is.matrix(modelPred)) { if(is.matrix(modelPred)) modelPred <- as.data.frame(modelPred) modelPred$obs <- testY modelPred$Size <- length(ind) } else modelPred <- data.frame(pred = modelPred, obs = testY, Size = sum(ind == 1)) external <- funcs$fitness_extern(modelPred, lev = levels(testY)) if(is.null(names(external))) { names(external) <- paste0("external", 1:length(external)) } } else external <- NULL if(!ga_maximize["internal"]) internal[ga_metric["internal"]] <- -internal[ga_metric["internal"]] list(internal = c(internal, .indiv = indiv), external = c(external, .indiv = indiv)) } ################################################################### ## #' @importFrom stats runif #' @import foreach ga_select <- function(x, y, testX = NULL, testY = NULL, iters = 20, funcs = NULL, ga_metric = NULL, ga_maximize = TRUE, ga_verbose = TRUE, holdout = 0, ga_seed = NULL, lvl = NULL, popSize = 50, pcrossover = 0.8, pmutation = 0.1, elite = base::max(1, round(popSize*0.05)), maxfitness = Inf, suggestions = NULL, genParallel = FALSE, Resample = "", ...) { ga_func_check(funcs) nvars <- ncol(x) if(!is.null(ga_seed)) set.seed(ga_seed[1]) dig <- options()$digits if(holdout > 0) { in_holdout <- createDataPartition(y, p = holdout, list = FALSE) holdout_x <- x[in_holdout,,drop = FALSE] holdout_y <- y[in_holdout] x <- x[-in_holdout,,drop = FALSE] y <- y[-in_holdout] } else { holdout_x <- NULL holdout_y <- NULL } ################################################################### ## subsets <- vector(mode = "list", length = iters) internal <- data.frame(Iter = 1:(iters), Size = rep(0*NA, iters), Similarity = rep(0*NA, iters), Similarity_M= rep(0*NA, iters), stringsAsFactors = FALSE) external <- if(!is.null(testX)) data.frame(Iter = 1:(iters)) else NULL ## add GA package warnings ################################################################### ## From GA package: ## TODO make input a vector of indicies if(is.null(suggestions)) { suggestions <- matrix(nrow = 0, ncol = nvars) } else { if(is.vector(suggestions)) { if(nvars > 1) suggestions <- matrix(suggestions, nrow = 1) else suggestions <- matrix(suggestions, ncol = 1) } else suggestions <- as.matrix(suggestions) if(nvars != ncol(suggestions)) stop("Provided suggestions (ncol) matrix do not match number of variables of the problem!") } ################################################################### ## From GA package: Pop <- matrix(as.double(NA), nrow = popSize, ncol = nvars) ng <- min(nrow(suggestions), popSize) if(ng > 0) { # use suggestion if provided Pop[1:ng,] <- suggestions } # fill the rest with a random population if(popSize > ng) { Pop[(ng+1):popSize,] <- funcs$initial(vars = nvars, popSize = popSize)[1:(popSize-ng),] } colnames(Pop) <- colnames(x) .Pop <- Pop .Fit <- rep(NA, nrow(Pop)) ################################################################### ## `%op%` <- getOper(genParallel && getDoParWorkers() > 1) for(generation in 1:iters) { Pop <- check_ga_pop(Pop) currennt_results <- foreach(i = seq_len(popSize), .combine = "c", .verbose = FALSE, .errorhandling = "stop") %op% { ga_wrapper(ind = which(Pop[i,] == 1), x = x, y = y, funcs, holdoutX = holdout_x, holdoutY = holdout_y, testX = testX, testY = testY, ga_metric = ga_metric, ga_maximize = ga_maximize, lvl = lvl, last = Resample == "", indiv = i, ...) } ## loop over chromosomes ## TODO save only the parts you need inside of loop if(!is.null(testX)) { current_ext <- currennt_results[names(currennt_results) == "external"] current_ext <- do.call("rbind", current_ext) current_ext <- current_ext[order(current_ext[,".indiv"]),] current_ext <- current_ext[, -ncol(current_ext), drop = FALSE] rownames(current_ext) <- NULL } else current_ext <- NULL current_int <- currennt_results[names(currennt_results) == "internal"] current_int <- do.call("rbind", current_int) current_int <- current_int[order(current_int[,".indiv"]),] current_int <- current_int[, -ncol(current_int), drop = FALSE] rownames(current_int) <- NULL rm(currennt_results) Fitness <- if(is.matrix(current_int)) current_int[,ga_metric["internal"]] best_index <- which.max(Fitness) best_internal <- current_int[best_index,] if(!is.null(testX)) best_external <- current_ext[best_index,] subsets[[generation]] <- which(Pop[best_index,] == 1) internal$Size[generation] <- sum(Pop[best_index,] == 1) if(generation > 1) { hist_best <- which.max(internal[1:(generation-1), ga_metric["internal"]]) internal$Similarity[generation] <- jack_sim(index2vec(subsets[[hist_best]], ncol(Pop)), index2vec(subsets[[generation]], ncol(Pop))) tmp_sim <- apply(Pop, 1, function(x, y) jack_sim(x, y), y = index2vec(subsets[[hist_best]], ncol(Pop))) internal$Similarity_M[generation] <- mean(tmp_sim, na.rm = TRUE) } .Pop <- Pop .Fit <- Fitness if(generation == 1) { k <- length(best_internal) perf_names <- names(best_internal) for(new_var in perf_names) internal[,new_var] <- NA nr <- ncol(internal) internal[1, (nr-k+1):nr] <- best_internal if(!is.null(testX)) { for(new_var in names(best_external)) external[,new_var] <- NA external[1, -1] <- best_external } } else { internal[generation, (nr-k+1):nr] <- best_internal if(!is.null(testX)) external[generation, -1] <- best_external } if(ga_verbose){ if(generation > 1) { imp <- internal[hist_best, ga_metric["internal"]] < max(Fitness) cat(Resample, " ", format(1:iters)[generation], " ", if(ga_maximize["internal"]) signif( internal[hist_best, ga_metric["internal"]], digits = dig) else signif(-internal[hist_best, ga_metric["internal"]], digits = dig), "->" , if(ga_maximize["internal"]) signif(max(Fitness), digits = dig) else signif( min(-Fitness), digits = dig), change_text(subsets[[hist_best]], subsets[[generation]], nvars, show_diff = FALSE), if(imp) " *" else "", "\n", sep = "") } else { cat(Resample, " ", format(1:iters)[generation], " ", if(ga_maximize["internal"]) signif(internal[1, ga_metric["internal"]], digits = dig) else signif(-internal[1, ga_metric["internal"]], digits = dig), " (", length(subsets[[1]]), ")\n", sep = "") } } ################################################################### ## From GA package ord <- order(Fitness, decreasing = TRUE) PopSorted <- Pop[ord,,drop = FALSE] FitnessSorted <- Fitness[ord] # selection if(is.function(funcs$selection)) { sel <- funcs$selection(population = .Pop, fitness = .Fit) Pop <- sel$population Fitness <- sel$fitness } else { sel <- sample(1:popSize, size = popSize, replace = TRUE) Pop <- .Pop[sel,] Fitness <- .Fit[sel] } .Pop <- Pop .Fit <- Fitness # crossover if(is.function(funcs$crossover) & pcrossover > 0) { nmating <- floor(popSize/2) mating <- matrix(sample(1:(2*nmating), size = (2*nmating)), ncol = 2) for(i in seq_len(nmating)) { if(pcrossover > runif(1)){ parents <- mating[i,] Crossover <- funcs$crossover(population = .Pop, fitness = .Fit, parents = parents) Pop[parents,] <- Crossover$children Fitness[parents] <- Crossover$fitness } } .Pop <- Pop .Fit <- Fitness } # mutation pm <- if(is.function(pmutation)) pmutation(object) else pmutation if(is.function(funcs$mutation) & pm > 0) { for(i in seq_len(popSize)) { if(pm > runif(1)) { Mutation <- funcs$mutation(population = .Pop, parent = i) Pop[i,] <- Mutation Fitness[i] <- NA } } .Pop <- Pop .Fit <- Fitness } # elite if(elite > 0) { ord <- order(.Fit, na.last = TRUE) u <- which(!duplicated(PopSorted, margin = 1)) Pop[ord[1:elite],] <- PopSorted[u[1:elite],] Fitness[ord[1:elite]] <- FitnessSorted[u[1:elite]] .Pop <- Pop .Fit <- Fitness } } ## search iterations best_index <- which.max(internal[, ga_metric["internal"]]) best_subset <- colnames(x)[subsets[[best_index]]] if(!ga_maximize["internal"]) { internal[, ga_metric["internal"]] <- -internal[, ga_metric["internal"]] } mod <- funcs$fit(x[, best_subset, drop=FALSE], y, lev = lvl, last = TRUE, ...) if(Resample != "") internal$Resample <- Resample if(Resample != "" && !is.null(testX)) external$Resample <- Resample diffs <- try(get_fitness_differences(colnames(x), subsets, external[, !(names(external) %in% ga_external_names), drop = FALSE]), silent = TRUE) if(class(diffs)[1] == "try-error") diffs <- NULL list(internal = internal, subsets = subsets, external = external, final = best_subset, fit = mod, diffs = diffs) } ################################################################### ## #' @importFrom utils getFromNamespace #' @export print.gafs <- function (x, top = 5, digits = max(3, getOption("digits") - 3), ...) { cat("\nGenetic Algorithm Feature Selection\n\n") cat(x$dims[1], " samples\n", x$dims[2], " predictor", ifelse(x$dims[2] > 1, "s\n", "\n"), sep = "") if(!is.null(x$levels)){ cat(length(x$levels), "classes:", paste("'", x$levels, "'", sep = "", collapse = ", "), "\n") } cat("\n") cat("Maximum generations:", max(x$iters), "\n") cat("Population per generation:", x$ga_param$popSize, "\n") cat("Crossover probability:", x$ga_param$pcrossover, "\n") if(is.function(x$ga_param$pmutation)) { cat("Mutation probability: variable\n") } else cat("Mutation probability:", x$ga_param$pmutation, "\n") cat("Elitism:", x$ga_param$elite, "\n\n") inames <- names(x$internal) inames <- inames[!(inames %in% ga_internal_names)] enames <- names(x$external) enames <- enames[!(enames %in% ga_external_names)] cat("Internal performance value", ifelse(length(inames) > 1, "s: ", ": "), paste(inames, sep = "", collapse = ", "), "\n", sep = "") cat("Subset selection driven to", if(x$control$maximize["internal"]) "maximize internal" else "minimize internal", x$control$metric["internal"], "\n") cat("\n") cat("External performance value", ifelse(length(enames) > 1, "s: ", ": "), paste(enames, sep = "", collapse = ", "), "\n", sep = "") if(x$auto) { cat("Best iteration chose by", if(x$control$maximize["external"]) "maximizing external" else "minimizing external", x$control$metric["external"], "\n") } else { cat("Best iteration chosen manually\n") } resampleN <- unlist(lapply(x$control$index, length)) numResamp <- length(resampleN) resampText <- getFromNamespace("resampName", "caret")(x) cat("External resampling method:", resampText, "\n") if(x$control$holdout > 0) cat("Subsampling for internal fitness calculation: ", round(x$control$holdout*100, digits), "%\n", sep = "") cat("\n") vars <- sort(table(unlist(x$resampled_vars)), decreasing = TRUE) top <- min(top, length(vars)) smallVars <- vars[1:top] smallVars <- round(smallVars/length(x$control$index)*100, 1) varText <- paste0(names(smallVars), " (", smallVars, "%)") varText <- paste(varText, collapse = ", ") if(!all(is.na(smallVars))) { cat("During resampling:\n * the top ", top, " selected variables (out of a possible ", x$dims[2], "):\n ", varText, "\n", sep = "") cat(" * on average, ", round(mean(unlist(lapply(x$resampled_vars, length))), 1), " variables were selected (min = ", round(min(unlist(lapply(x$resampled_vars, length))), 1), ", max = ", round(max(unlist(lapply(x$resampled_vars, length))), 1), ")\n\n", sep = "") } else { cat("During resampling, no variables were selected.\n\n") } cat("In the final search using the entire training set:\n", " *", length(x$optVariables), "features selected at iteration", x$optIter, "including:\n ", paste(x$optVariables[1:min(length(x$optVariables), top)], sep = "", collapse = ", "), if(length(x$optVariables) > top) "..." else "", "\n") perf_dat <- subset(x$external, Iter == x$optIter) perf_dat <- perf_dat[!(names(perf_dat) %in% c("Iter", "Resample"))] perf <- colMeans(perf_dat) cat(" * external performance at this iteration is\n\n") ch_perf <- format(perf, digits = digits, row.names = FALSE) ch_perf[1] <- paste(" ", ch_perf[1]) print(ch_perf, quote = FALSE) cat("\n") invisible(x) } #' Predict new samples #' #' Predict new samples using \code{\link{safs}} and \code{\link{gafs}} objects. #' #' Only the predictors listed in \code{object$optVariables} are required. #' #' @aliases predict.gafs predict.safs #' @param object an object of class \code{\link{safs}} or \code{\link{gafs}} #' @param newdata a data frame or matrix of predictors. #' @param \dots not currently used #' @return The type of result depends on what was specified in #' \code{object$control$functions$predict}. #' @author Max Kuhn #' @seealso \code{\link{safs}}, \code{\link{gafs}} #' @keywords multivariate #' @method predict gafs #' @export #' @examples #' #' \dontrun{ #' #' set.seed(1) #' train_data <- twoClassSim(100, noiseVars = 10) #' test_data <- twoClassSim(10, noiseVars = 10) #' #' ## A short example #' ctrl <- safsControl(functions = rfSA, #' method = "cv", #' number = 3) #' #' rf_search <- safs(x = train_data[, -ncol(train_data)], #' y = train_data$Class, #' iters = 3, #' safsControl = ctrl) #' #' rf_search #' #' predict(rf_search, train_data) #' } #' #' @export predict.gafs predict.gafs <- function (object, newdata, ...) { newdata <- newdata[, object$optVariables, drop = FALSE] object$control$functions$pred(object$fit, newdata) } ################################################################### ## #' @export gafs <- function (x, ...) UseMethod("gafs") #' Genetic algorithm feature selection #' #' Supervised feature selection using genetic algorithms #' #' \code{\link{gafs}} conducts a supervised binary search of the predictor #' space using a genetic algorithm. See Mitchell (1996) and Scrucca (2013) for #' more details on genetic algorithms. #' #' This function conducts the search of the feature space repeatedly within #' resampling iterations. First, the training data are split be whatever #' resampling method was specified in the control function. For example, if #' 10-fold cross-validation is selected, the entire genetic algorithm is #' conducted 10 separate times. For the first fold, nine tenths of the data are #' used in the search while the remaining tenth is used to estimate the #' external performance since these data points were not used in the search. #' #' During the genetic algorithm, a measure of fitness is needed to guide the #' search. This is the internal measure of performance. During the search, the #' data that are available are the instances selected by the top-level #' resampling (e.g. the nine tenths mentioned above). A common approach is to #' conduct another resampling procedure. Another option is to use a holdout set #' of samples to determine the internal estimate of performance (see the #' holdout argument of the control function). While this is faster, it is more #' likely to cause overfitting of the features and should only be used when a #' large amount of training data are available. Yet another idea is to use a #' penalized metric (such as the AIC statistic) but this may not exist for some #' metrics (e.g. the area under the ROC curve). #' #' The internal estimates of performance will eventually overfit the subsets to #' the data. However, since the external estimate is not used by the search, it #' is able to make better assessments of overfitting. After resampling, this #' function determines the optimal number of generations for the GA. #' #' Finally, the entire data set is used in the last execution of the genetic #' algorithm search and the final model is built on the predictor subset that #' is associated with the optimal number of generations determined by #' resampling (although the update function can be used to manually set the #' number of generations). #' #' This is an example of the output produced when \code{gafsControl(verbose = #' TRUE)} is used: #' #' \preformatted{ #' Fold2 1 0.715 (13) #' Fold2 2 0.715->0.737 (13->17, 30.4\%) * #' Fold2 3 0.737->0.732 (17->14, 24.0\%) #' Fold2 4 0.737->0.769 (17->23, 25.0\%) * #' } #' #' For the second resample (e.g. fold 2), the best subset across all #' individuals tested in the first generation contained 13 predictors and was #' associated with a fitness value of 0.715. The second generation produced a #' better subset containing 17 samples with an associated fitness values of #' 0.737 (and improvement is symbolized by the \code{*}. The percentage listed #' is the Jaccard similarity between the previous best individual (with 13 #' predictors) and the new best. The third generation did not produce a better #' fitness value but the fourth generation did. #' #' The search algorithm can be parallelized in several places: \enumerate{ #' \item each externally resampled GA can be run independently (controlled by #' the \code{allowParallel} option of \code{\link{gafsControl}}) \item within a #' GA, the fitness calculations at a particular generation can be run in #' parallel over the current set of individuals (see the \code{genParallel} #' option in \code{\link{gafsControl}}) \item if inner resampling is used, #' these can be run in parallel (controls depend on the function used. See, for #' example, \code{\link[caret]{trainControl}}) \item any parallelization of the #' individual model fits. This is also specific to the modeling function. } #' #' It is probably best to pick one of these areas for parallelization and the #' first is likely to produces the largest decrease in run-time since it is the #' least likely to incur multiple re-starting of the worker processes. Keep in #' mind that if multiple levels of parallelization occur, this can effect the #' number of workers and the amount of memory required exponentially. #' #' @aliases gafs.default gafs #' @param x an object where samples are in rows and features are in columns. #' This could be a simple matrix, data frame or other type (e.g. sparse #' matrix). See Details below #' @param y a numeric or factor vector containing the outcome for each sample #' @param iters number of search iterations #' @param popSize number of subsets evaluated at each iteration #' @param pcrossover the crossover probability #' @param pmutation the mutation probability #' @param elite the number of best subsets to survive at each generation #' @param suggestions a binary matrix of subsets strings to be included in the #' initial population. If provided the number of columns must match the number #' of columns in \code{x} #' @param differences a logical: should the difference in fitness values with #' and without each predictor be calculated? #' @param gafsControl a list of values that define how this function acts. See #' \code{\link{gafsControl}} and URL. #' @param ... additional arguments to be passed to other methods #' @return an object of class \code{gafs} #' @author Max Kuhn, Luca Scrucca (for GA internals) #' @seealso \code{\link{gafsControl}}, \code{\link{predict.gafs}}, #' \code{\link{caretGA}}, \code{\link{rfGA}} \code{\link{treebagGA}} #' @references Kuhn M and Johnson K (2013), Applied Predictive Modeling, #' Springer, Chapter 19 \url{http://appliedpredictivemodeling.com} #' #' Scrucca L (2013). GA: A Package for Genetic Algorithms in R. Journal of #' Statistical Software, 53(4), 1-37. \url{www.jstatsoft.org/v53/i04} #' #' Mitchell M (1996), An Introduction to Genetic Algorithms, MIT Press. #' #' \url{http://en.wikipedia.org/wiki/Jaccard_index} #' @keywords models #' @method gafs default #' @export #' @examples #' #' \dontrun{ #' set.seed(1) #' train_data <- twoClassSim(100, noiseVars = 10) #' test_data <- twoClassSim(10, noiseVars = 10) #' #' ## A short example #' ctrl <- gafsControl(functions = rfGA, #' method = "cv", #' number = 3) #' #' rf_search <- gafs(x = train_data[, -ncol(train_data)], #' y = train_data$Class, #' iters = 3, #' gafsControl = ctrl) #' #' rf_search #' } #' #' @export gafs.default "gafs.default" <- function(x, y, iters = 10, popSize = 50, pcrossover = 0.8, pmutation = 0.1, elite = 0, suggestions = NULL, differences = TRUE, gafsControl = gafsControl(), ...) { startTime <- proc.time() funcCall <- match.call(expand.dots = TRUE) if(is.null(gafsControl$metric)) gafsControl$metric <- rep(ifelse(is.factor(y), "Accuracy", "RMSE"), 2) if(is.null(gafsControl$maximize)) gafsControl$maximize <- rep(ifelse(gafsControl$metric == "RMSE", FALSE, TRUE), 2) if(is.null(names(gafsControl$metric))) names(gafsControl$metric) <- c("internal", "external") if(is.null(names(gafsControl$maximize))) names(gafsControl$maximize) <- c("internal", "external") if(nrow(x) != length(y)) stop("there should be the same number of samples in x and y") numFeat <- ncol(x) classLevels <- levels(y) if(is.null(gafsControl$index)) gafsControl$index <- switch(tolower(gafsControl$method), cv = createFolds(y, gafsControl$number, returnTrain = TRUE), repeatedcv = createMultiFolds(y, gafsControl$number, gafsControl$repeats), loocv = createFolds(y, length(y), returnTrain = TRUE), boot =, boot632 = createResample(y, gafsControl$number), test = createDataPartition(y, 1, gafsControl$p), lgocv = createDataPartition(y, gafsControl$number, gafsControl$p)) if(is.null(names(gafsControl$index))) names(gafsControl$index) <- getFromNamespace("prettySeq", "caret")(gafsControl$index) ## Create hold--out indicies if(is.null(gafsControl$indexOut)){ gafsControl$indexOut <- lapply(gafsControl$index, function(training, allSamples) allSamples[-unique(training)], allSamples = seq(along = y)) names(gafsControl$indexOut) <- getFromNamespace("prettySeq", "caret")(gafsControl$indexOut) } if(!is.null(gafsControl$seeds)) { if(length(gafsControl$seeds) < length(gafsControl$index) + 1) stop(paste("There must be at least", length(gafsControl$index) + 1, "random number seeds passed to gafsControl")) } else { gafsControl$seeds <- sample.int(100000, length(gafsControl$index) + 1) } ## check summary function and metric testOutput <- data.frame(pred = sample(y, min(10, length(y))), obs = sample(y, min(10, length(y)))) if(is.factor(y)) for(i in seq(along = classLevels)) testOutput[, classLevels[i]] <- runif(nrow(testOutput)) test <- gafsControl$functions$fitness_extern(testOutput, lev = classLevels) perfNames <- names(test) if(is.null(perfNames)) { warning(paste("The external fitness results should be a *named* vector;", "new name(s) are", paste(paste0("external", 1:length(test)), sep = "", collapse = ", ")), immediate. = TRUE) perfNames <- paste0("external", 1:length(test)) } if(!(gafsControl$metric["external"] %in% perfNames)) { warning(paste("The metric '", gafsControl$metric["external"], "' is not created by the summary function; '", perfNames[1], "' will be used instead", sep = "")) gafsControl$metric["external"] <- perfNames[1] } `%op%` <- getOper(gafsControl$allowParallel && getDoParWorkers() > 1) result <- foreach(i = seq(along = gafsControl$index), .combine = "c", .verbose = FALSE, .errorhandling = "stop") %op% { ga_select(x[gafsControl$index[[i]],,drop=FALSE], y[gafsControl$index[[i]]], funcs = gafsControl$functions, ga_maximize = gafsControl$maximize, ga_metric = gafsControl$metric, iters = iters, popSize = popSize, pcrossover = pcrossover, pmutation = pmutation, elite = elite, suggestions = suggestions, ga_verbose = gafsControl$verbose, testX = x[gafsControl$indexOut[[i]],,drop=FALSE], testY = y[gafsControl$indexOut[[i]]], ga_seed = gafsControl$seeds[i], Resample = names(gafsControl$index)[i], holdout = gafsControl$holdout, lvl = classLevels, genParallel = gafsControl$genParallel, ...) } ## TODO save only the parts you need inside of loop external <- result[names(result) == "external"] external <- do.call("rbind", external) rownames(external) <- NULL internal <- result[names(result) == "internal"] internal <- do.call("rbind", internal) rownames(internal) <- NULL selected_vars <- result[names(result) == "final"] names(selected_vars) <- names(gafsControl$index) if(differences) { diffs <- try(process_diffs(result[names(result) == "diffs"], colnames(x)), silent = TRUE) if(class(diffs)[1] == "try-error") { diffs <- NULL # warning("An error occured when computing the variable differences") } } else diffs <- NULL rm(result) if(gafsControl$verbose) cat("+ final GA\n") if(gafsControl$holdout > 0) { in_holdout <- createDataPartition(y, p = gafsControl$holdout, list = FALSE) in_model <- seq(along = y)[-unique(in_holdout)] } else { in_model <- seq(along = y) in_holdout <- NULL } final_ga <- ga_select(x[in_model,,drop=FALSE], y[in_model], funcs = gafsControl$functions, ga_maximize = gafsControl$maximize, ga_metric = gafsControl$metric, iters = iters, popSize = popSize, pcrossover = pcrossover, pmutation = pmutation, elite = elite, suggestions = suggestions, ga_verbose = gafsControl$verbose, testX = if(!is.null(in_holdout)) x[in_holdout,,drop=FALSE] else NULL, testY = if(!is.null(in_holdout)) y[in_holdout] else NULL, ga_seed = gafsControl$seeds[length(gafsControl$seeds)], lvl = classLevels, genParallel = gafsControl$genParallel, ...) averages <- ddply(external, .(Iter), function(x, nms) { apply(x[, perfNames, drop = FALSE], 2, mean) }, nms = perfNames) if(!is.null(gafsControl$functions$selectIter)) { best_index <- gafsControl$functions$selectIter(averages, metric = gafsControl$metric["external"], maximize = gafsControl$maximize["external"]) best_iter <- averages$Iter[best_index] best_vars <- colnames(x)[final_ga$subsets[[best_index]]] } else { best_index <- if(gafsControl$maximize["external"]) which.max(averages[,gafsControl$metric["external"]]) else which.min(averages[,gafsControl$metric["external"]]) best_iter <- averages$Iter[best_index] best_vars <- colnames(x)[final_ga$subsets[[best_index]]] } if(gafsControl$verbose) cat("+ final model\n") fit <- gafsControl$functions$fit(x[, best_vars, drop=FALSE], y, lev = lvls, last = TRUE, ...) endTime <- proc.time() res <- list(fit = fit, ga = final_ga, ga_param = list(popSize = popSize, pcrossover = pcrossover, pmutation = pmutation, elite = elite), external = external, internal = internal, resampled_vars = selected_vars, averages = averages, iters = iters, optVariables = best_vars, optIter = best_iter, control = gafsControl, dims = dim(x), differences = diffs, perfNames = perfNames, auto = TRUE, the_dots = list(...), call = funcCall, times = list(everything = endTime - startTime), levels = if(is.factor(y)) classLevels else NULL) ## now do analysis for whole dataset, plus make update method class(res) <- "gafs" res } ################################################################### ## #' Plot Method for the gafs and safs Classes #' #' Plot the performance values versus search iteration #' #' The mean (averaged over the resamples) is plotted against the search #' iteration using a scatter plot. #' #' When \code{output = "data"}, the unaveraged data are returned with columns #' for all the performance metrics and the resample indicator. #' #' @aliases plot.safs plot.gafs #' @param x an object of class \code{\link{gafs}} or \code{\link{safs}} #' @param metric the measure of performance to plot (e.g. RMSE, accuracy, etc) #' @param estimate the type of estimate: either "internal" or "external" #' @param output either "data", "ggplot" or "lattice" #' @param \dots options passed to \code{\link[lattice]{xyplot}} #' @return Either a data frame, ggplot object or lattice object #' @author Max Kuhn #' @seealso \code{\link{gafs}}, \code{\link{safs}}, #' \code{\link[ggplot2]{ggplot}}, \code{\link[lattice]{xyplot}} #' @keywords hplot #' @method plot gafs #' @export #' @examples #' #' \dontrun{ #' set.seed(1) #' train_data <- twoClassSim(100, noiseVars = 10) #' test_data <- twoClassSim(10, noiseVars = 10) #' #' ## A short example #' ctrl <- safsControl(functions = rfSA, #' method = "cv", #' number = 3) #' #' rf_search <- safs(x = train_data[, -ncol(train_data)], #' y = train_data$Class, #' iters = 50, #' safsControl = ctrl) #' #' plot(rf_search) #' plot(rf_search, #' output = "lattice", #' auto.key = list(columns = 2)) #' #' plot_data <- plot(rf_search, output = "data") #' summary(plot_data) #' } #' #' @method plot gafs #' @export plot.gafs plot.gafs <- function(x, metric = x$control$metric["external"], estimate = c("internal", "external"), output = "ggplot", ...) { int_names <- names(x$internal)[!(names(x$internal) %in% ga_internal_names)] ext_names <- names(x$external)[!(names(x$external) %in% ga_external_names)] common <- intersect(int_names, ext_names) both_estimates <- length(estimate) == 2 && all(sort(estimate) == c("external", "internal")) if(both_estimates){ if(!metric %in% common) stop(paste("'", metric, "' not computed in both estimates")) tmp_e <- x$external[, c("Iter", "Resample", common)] tmp_e$Estimate <- "External" tmp_i <- x$internal[, c("Iter", "Resample", common)] tmp_i$Estimate <- "Internal" plot_dat <- rbind(tmp_e, tmp_i) } else { if("internal" %in% estimate) { if(!metric %in% int_names) stop(paste("'", metric, "' not computed internally")) plot_dat <- x$internal[, c("Iter", "Resample", int_names)] } if("external" %in% estimate) { if(!metric %in% int_names) stop(paste("'", metric, "' not computed externally")) plot_dat <- x$external[, c("Iter", "Resample", ext_names)] } } if(output == "data") out <- plot_dat plot_dat <- if(both_estimates) ddply(plot_dat, c("Iter", "Estimate"), function(x) c(Mean = mean(x[, metric]))) else ddply(plot_dat, c("Iter"), function(x) c(Mean = mean(x[, metric]))) if(output == "ggplot") { out <- if(both_estimates) ggplot(plot_dat, aes(x = Iter, y = Mean, color = Estimate)) + geom_point() else ggplot(plot_dat, aes(x = Iter, y = Mean)) + geom_point() out <- out + xlab("Generation") } if(output == "lattice") { out <- if(both_estimates) xyplot(Mean ~ Iter, data = plot_dat, groups = Estimate, ...) else xyplot(Mean ~ Iter, data = plot_dat, ...) out <- update(out, xlab = "Generation") } out } ################################################################### ## #' @importFrom stats predict #' @export caretGA <- list(fit = function(x, y, lev = NULL, last = FALSE, ...) train(x, y, ...), pred = function(object, x) { tmp <- predict(object, x) if(object$control$classProbs) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp out }, fitness_intern = function(object, x, y, maximize, p){ perf_val <- getTrainPerf(object) perf_val <- perf_val[names(perf_val) != "method"] perf_val <- unlist(perf_val) names(perf_val) <- gsub("Train", "", names(perf_val)) perf_val }, fitness_extern = defaultSummary, initial = gafs_initial, selection = gafs_lrSelection, crossover = gafs_spCrossover, mutation = gafs_raMutation, selectIter = best) #' @importFrom stats predict #' @export treebagGA <- list(fit = function(x, y, lev = NULL, last = FALSE, ...) { loadNamespace("ipred") ipred::ipredbagg(y, x, ...) }, pred = function(object, x) { tmp <- predict(object, x) if(is.factor(object$y)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp out }, fitness_intern = function(object, x, y, maximize, p) ipredStats(object)[1:2], fitness_extern = defaultSummary, initial = gafs_initial, selection = gafs_lrSelection, crossover = gafs_spCrossover, mutation = gafs_raMutation, selectIter = best) #' @export rfGA <- list(fit = function(x, y, lev = NULL, last = FALSE, ...) { loadNamespace("randomForest") randomForest::randomForest(x, y, ...) }, pred = function(object, x) { tmp <- predict(object, x) if(is.factor(object$y)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp out }, fitness_intern = function(object, x, y, maximize, p) rfStats(object), fitness_extern = defaultSummary, initial = gafs_initial, selection = gafs_lrSelection, crossover = gafs_spCrossover, mutation = gafs_raMutation, selectIter = best) #' @method update gafs #' @export update.gafs <- function(object, iter, x, y, ...) { iter <- iter[1] if(iter > length(object$ga$subsets)) stop(paste("iter must be less than", length(object$ga$subsets))) if(is.null(x) | is.null(y)) stop("the original training data is needed to refit the model") args <- list(x = x[, object$ga$subsets[[iter]], drop=FALSE], y = y, lev = object$levels, last = TRUE) if(length(object$the_dots) > 0) args <- c(args, object$the_dots) if(object$control$verbose) cat("Refitting model to use", length(object$ga$subsets[[iter]]), "predictors from generation", iter, "\n") object$fit <- do.call(object$control$functions$fit, args) object$auto <- FALSE object$optVariables <- colnames(x)[object$ga$subsets[[iter]]] object$optIter <- iter object } #' Variable importances for GAs and SAs #' #' Variable importance scores for \code{\link{safs}} and \code{\link{gafs}} #' objects. #' #' A crude measure of importance is computed for thee two search procedures. At #' the end of a search process, the difference in the fitness values is #' computed for models with and without each feature (based on the search #' history). If a predictor has at least two subsets that include and did not #' include the predictor, a t-statistic is computed (otherwise a value of #' \code{NA} is assigned to the predictor). #' #' This computation is done separately for each resample and the t-statistics #' are averaged (\code{NA} values are ignored) and this average is reported as #' the importance. If the fitness value should be minimized, the negative value #' of the t-statistic is used in the average. #' #' As such, the importance score reflects the standardized increase in fitness #' that occurs when the predict is included in the subset. Values near zero (or #' negative) indicate that the predictor may not be important to the model. #' #' @aliases varImp.gafs varImp.safs #' @param object an \code{\link{safs}} or \code{\link{gafs}} object #' @param metric a metric to compute importance (see Details below) #' @param maximize are larger values of the metric better? #' @param \dots not currently uses #' @return a data frame where the rownames are the predictor names and the #' column is the average t-statistic #' @author Max Kuhn #' @seealso \code{\link{safs}}, \code{\link{gafs}} #' @export "varImp.gafs" <- function(object, metric = object$control$metric["external"], maximize = object$control$maximize["external"], ...) { if(is.null(object$differences)) stop("must have used `differences = TRUE`") out <- object$differences[,metric, drop = FALSE] rownames(out) <- as.character(object$differences$Variable) if(!maximize) out[, metric, drop = FALSE] <- -out[, metric, drop = FALSE] out <- out[order(-out[, metric]),, drop = FALSE] out } caret/R/resampleSummary.R0000644000176200001440000000700113153613153015061 0ustar liggesusers#' Summary of resampled performance estimates #' #' This function uses the out-of-bag predictions to calculate overall #' performance metrics and returns the observed and predicted data. #' #' The mean and standard deviation of the values produced by #' \code{\link{postResample}} are calculated. #' #' @param obs A vector (numeric or factor) of the outcome data #' @param resampled For bootstrapping, this is either a matrix (for numeric #' outcomes) or a data frame (for factors). For cross-validation, a vector is #' produced. #' @param index The list to index of samples in each cross--validation fold #' (only used for cross-validation). #' @param keepData A logical for returning the observed and predicted data. #' @return A list with: \item{metrics }{A vector of values describing the #' bootstrap distribution.} \item{data }{A data frame or \code{NULL}. Columns #' include \code{obs}, \code{pred} and \code{group} (for tracking #' cross-validation folds or bootstrap samples)} #' @author Max Kuhn #' @seealso \code{\link{postResample}} #' @keywords utilities #' @examples #' #' resampleSummary(rnorm(10), matrix(rnorm(50), ncol = 5)) #' #' @export resampleSummary resampleSummary <- function(obs, resampled, index = NULL, keepData = TRUE) { numPred <- apply(resampled, 2, function(u) sum(!is.na(u))) # for everything but LOO, we should get multiple predictions per resample if(all(numPred >= 2)) { # calculate performance metrics for each resample performanceStats <- apply( resampled, 2, postResample, obs = obs) #summarize resample dists out <- c( apply(performanceStats, 1, mean, na.rm = TRUE), apply(performanceStats, 1, sd, na.rm = TRUE)) # optionally returen the data in "vertical" format # to conserve space remove the many missing values if(keepData) { # stack has issues when there are a lot of missing values, # so we'll use lapply to stack the columns of resampled if(is.factor(obs)) { outResample <- data.frame( obs = rep(obs, dim(resampled)[2]), pred = factor(unlist(lapply(resampled, as.character)), levels = levels(obs)), group = paste( "Resample", rep( 1:dim(resampled)[2], each = dim(resampled)[1], sep = ""))) } else { outResample <- data.frame( obs = rep(obs, dim(resampled)[2]), pred = unlist(lapply(resampled, I)), group = paste( "Resample", rep( 1:dim(resampled)[2], each = dim(resampled)[1], sep = ""))) } } else outResample <- NULL } else { pred <- apply(resampled, 2, function(u) u[!is.na(u)]) if(is.factor(obs)) pred <- factor(as.character(pred), levels = levels(obs)) tmp <- postResample(pred, obs) tmp2 <- tmp * 0 out <- c( tmp, tmp * 0) outResample <- data.frame( obs = obs, pred = pred, group = "Resample1") } if(keepData) outResample <- outResample[!is.na(outResample$pred),] list(metrics = out, data = outResample) } caret/R/misc.R0000644000176200001440000006521713201633202012632 0ustar liggesuserssubsemble_index <- function(y, J = 2, V = 10){ dat <- data.frame(y = y, index = seq(along = y)) outer_index <- sample(1:J, size = nrow(dat), replace = TRUE) outer_splits <- vector(mode = "list", length = J) for(i in 1:J) { outer_splits[[i]] <- dat[outer_index == i,] outer_splits[[i]]$label <- well_numbered("Outer", J)[i] } foo <- function(x, V = 10) { inner_index_0 <- createFolds(x$y, k = V, returnTrain = TRUE) modeling_index <- lapply(inner_index_0, function(x, y) y[x], y = x$index) holdout_index <- lapply(inner_index_0, function(x, y) y[-unique(x)], y = x$index) names(modeling_index) <- names(holdout_index) <- paste(x$label[1], names(modeling_index), sep = ".") list(model = modeling_index, holdout = holdout_index) } all_index <- lapply(outer_splits, foo, V = V) model_index <- holdout_index <- NULL for(i in seq(along = all_index)) { model_index <- c(model_index, all_index[[i]]$model) holdout_index <- c(holdout_index, all_index[[i]]$holdout) } list(model = model_index, holdout = holdout_index) } #' @rdname caret-internal #' @export well_numbered <- function(prefix, items) { paste0(prefix, gsub(" ", "0", format(1:items))) } #' @importFrom stats runif evalSummaryFunction <- function(y, wts = NULL, perf = NULL, ctrl, lev, metric, method) { n <- if(class(y)[1] == "Surv") nrow(y) else length(y) ## sample doesn't work for Surv objects if(class(y)[1] != "Surv") { if(is.factor(y)) { values <- rep_len(levels(y), min(10, n)) pred_samp <- factor(sample(values), levels = lev) obs_samp <- factor(sample(values), levels = lev) } else { pred_samp <- sample(y, min(10, n)) obs_samp <- sample(y, min(10, n)) } } else { pred_samp <- y[sample(1:n, min(10, n)), "time"] obs_samp <- y[sample(1:n, min(10, n)),] } ## get phoney performance to obtain the names of the outputs testOutput <- data.frame(pred = pred_samp, obs = obs_samp) if(!is.null(perf)) { if(is.vector(perf)) stop("`perf` should be a data frame", call. = FALSE) perf <- perf[sample(1:nrow(perf), nrow(testOutput)),, drop = FALSE] testOutput <-cbind(testOutput, perf) } if(ctrl$classProbs) { for(i in seq(along = lev)) testOutput[, lev[i]] <- runif(nrow(testOutput)) testOutput[, lev] <- t(apply(testOutput[, lev], 1, function(x) x/sum(x))) } else { if(metric == "ROC" & !ctrl$classProbs) stop("train()'s use of ROC codes requires class probabilities. See the classProbs option of trainControl()") } if(!is.null(wts)) testOutput$weights <- sample(wts, min(10, length(wts))) testOutput$rowIndex <- sample(1:n, size = nrow(testOutput)) ctrl$summaryFunction(testOutput, lev, method) } hasDots <- function(grid, info) { mnames <- sort(as.character(info$parameters$parameter)) mnames2 <- paste(".", mnames, sep = "") gnames <- sort(colnames(grid)) out <- all.equal(mnames2, gnames) if(class(out)[1] != "logical") out <- FALSE out } model2method <- function(x) { ## There are some disconnecs between the object class and the ## method used by train. switch(x, randomForest = "rf", rvm = "rvmRadial", ksvm = "svmRadial", lssvm = "lssvmRadial", gausspr = "gaussprRadial", NaiveBayes = "nb", classbagg =, regbagg = "treebag", plsda = "pls", pamrtrained = "pam", x) } #' @importFrom stats runif binomial Kim2009 <- function(n) { grid <- matrix(runif(n*10), ncol = 10) grid <- as.data.frame(grid) names(grid) = paste("x", 1:10, sep = "") grid$x5 <- floor((grid$x5*3)+1) pred <- -10 + 10 * sin(pi * grid$x1* grid$x2) + 5*(grid$x3 - .5)^2 + 5*grid$x4 + 2*grid$x5 prob <- binomial()$linkinv(pred) grid$Class <- ifelse(prob <= runif(n), "Class1", "Class2") grid$Class <- factor(grid$Class, levels = c("Class1","Class2")) grid } #' @rdname caret-internal #' @importFrom stats as.formula #' @export gamFormula <- function(data, smoother = "s", cut = 8, y = "y") { nzv <- nearZeroVar(data) if(length(nzv) > 0) data <- data[, -nzv, drop = FALSE] numValues <- apply(data, 2, function(x) length(unique(x))) prefix <- rep("", ncol(data)) prefix[numValues > cut] <- paste(smoother, "(", sep = "") suffix <- rep("", ncol(data)) suffix[numValues > cut] <- ")" rhs <- paste(prefix, names(numValues), suffix, sep = "") rhs <- paste(rhs, collapse = "+") form <- as.formula(paste(y, "~", rhs, sep = "")) form } printCall <- function(x) { call <- paste(deparse(x), collapse = "\n") # cat("\nCall:\n", call, "\n\n", sep = "") ## or cat("\nCall:\n", truncateText(deparse(x, width.cutoff = 500)), "\n\n", sep = "") invisible(call) } #' @rdname caret-internal #' @export flatTable <- function(pred, obs) { cells <- as.vector(table(pred, obs)) if(length(cells) == 0) cells <- rep(NA, length(levels(obs))^2) names(cells) <- paste(".cell", seq(along= cells), sep = "") cells } prettySeq <- function(x) paste("Resample", gsub(" ", "0", format(seq(along = x))), sep = "") #' @rdname caret-internal #' @export ipredStats <- function(x) getModelInfo("treebag", regex = FALSE)[[1]]$oob(x) #' @rdname caret-internal #' @export rfStats <- function(x) getModelInfo("rf", regex = FALSE)[[1]]$oob(x) #' @rdname caret-internal #' @export cforestStats <- function(x) getModelInfo("cforest", regex = FALSE)[[1]]$oob(x) #' @rdname caret-internal #' @export bagEarthStats <- function(x) getModelInfo("bagEarth", regex = FALSE)[[1]]$oob(x) #' @importFrom stats complete.cases cor #' @export R2 <- function(pred, obs, formula = "corr", na.rm = FALSE) { n <- sum(complete.cases(pred)) switch(formula, corr = cor(obs, pred, use = ifelse(na.rm, "complete.obs", "everything"))^2, traditional = 1 - (sum((obs-pred)^2, na.rm = na.rm)/((n-1)*var(obs, na.rm = na.rm)))) } #' @export RMSE <- function(pred, obs, na.rm = FALSE) sqrt(mean((pred - obs)^2, na.rm = na.rm)) #' @export MAE <- function(pred, obs, na.rm = FALSE) mean(abs(pred - obs), na.rm = na.rm) #' @importFrom utils capture.output partRuleSummary <- function(x) { predictors <- all.vars(x$terms) predictors <- predictors[predictors != as.character(x$terms[[2]])] classes <- levels(x$predictions) rules <- capture.output(print(x)) conditions <- grep("(<=|>=|<|>|=)", rules, value = TRUE) classPred <- grep("\\)$", conditions, value = TRUE) varUsage <- data.frame(Var = predictors, Overall = 0) for(i in seq(along = predictors)) varUsage$Overall[i] <- sum(grepl(paste("^", predictors[i], sep = ""), conditions)) numClass <- rep(NA, length(classes)) names(numClass) <- classes for(i in seq(along = classes)) numClass[i] <- sum(grepl(paste(":", classes[i], sep = " "), classPred)) list(varUsage = varUsage, numCond = length(conditions), classes = numClass) } #' @importFrom utils capture.output ripperRuleSummary <- function(x) { predictors <- all.vars(x$terms) predictors <- predictors[predictors != as.character(x$terms[[2]])] classes <- levels(x$predictions) rules <- capture.output(print(x)) ## remove header rules <- rules[-(1:min(which(rules == "")))] conditions <- grep("(<=|>=|<|>|=)", rules, value = TRUE) varUsage <- data.frame(Var = predictors, Overall = 0) for(i in seq(along = predictors)) varUsage$Overall[i] <- sum(grepl(paste("\\(", predictors[i], sep = ""), conditions)) numClass <- rep(NA, length(classes)) names(numClass) <- classes for(i in seq(along = classes)) numClass[i] <- sum(grepl(paste(x$terms[[2]], "=", classes[i], sep = ""), conditions)) list(varUsage = varUsage, numCond = length(conditions), classes = numClass) } ########################################################################################################## ## splitIndicies takes a number of tasks (n) and divides it into k groups ## of roughly equal size. The result is an integer vector of task groups splitIndicies <- function(n, k) { out <- rep(1:k, n%/%k) if(n %% k > 0) out <- c(out, sample(1:k, n %% k)) sort(out) } ## This makes a list of copies of another list repList <- function(x, times = 3, addIndex = FALSE) { out <- vector(mode = "list", length = times) out <- lapply(out, function(a, b) b, b = x) if(addIndex) for(i in seq(along = out)) out[[i]]$.index <- i out } useMathSymbols <- function(x) { if(x == "Rsquared") x <- expression(R^2) x } #' @importFrom stats approx depth2cp <- function(x, depth) { out <- approx(x[,"nsplit"], x[,"CP"], depth)$y out[depth > max(x[,"nsplit"])] <- min(x[,"CP"]) * .99 out } #' @importFrom stats as.formula smootherFormula <- function(data, smoother = "s", cut = 10, df = 0, span = .5, degree = 1, y = ".outcome") { nzv <- nearZeroVar(data) if(length(nzv) > 0) data <- data[, -nzv, drop = FALSE] numValues <- sort(apply(data, 2, function(x) length(unique(x)))) prefix <- rep("", ncol(data)) suffix <- rep("", ncol(data)) prefix[numValues > cut] <- paste(smoother, "(", sep = "") if(smoother == "s") { suffix[numValues > cut] <- if(df == 0) ")" else paste(", df=", df, ")", sep = "") } if(smoother == "lo") { suffix[numValues > cut] <- paste(", span=", span, ",degree=", degree, ")", sep = "") } if(smoother == "rcs") { suffix[numValues > cut] <- ")" } rhs <- paste(prefix, names(numValues), suffix, sep = "") rhs <- paste(rhs, collapse = "+") form <- as.formula(paste(y, rhs, sep = "~")) form } varSeq <- function(x) { vars <- apply(summary(x)$which, 1, function(x) names(which(x))) vars <- lapply(vars, function(x) x[x != "(Intercept)"]) vars } cranRef <- function(x) paste("{\\tt \\href{http://cran.r-project.org/web/packages/", x, "/index.html}{", x, "}}", sep = "") makeTable <- function(x) { params <- paste("\\code{", as.character(x$parameter), "}", sep = "", collapse = ", ") params <- ifelse(params == "\\code{parameter}", "None", params) data.frame(method = as.character(x$model)[1], Package = cranRef(as.character(x$Package)[1]), Parameters = params) } scrubCall <- function(x) { items <- c("x", "y", "data") for(i in items) if(nchar(as.character(x[i])) > 100) x[i] <- "scrubbed" x } requireNamespaceQuietStop <- function(package) { if (!requireNamespace(package, quietly = TRUE)) stop(paste('package',package,'is required'), call. = FALSE) } get_resample_perf <- function (x, ...) UseMethod("get_resample_perf") get_resample_perf.train <- function(x) { if(x$control$returnResamp == "none") stop("use returnResamp == 'none' in trainControl()", call. = FALSE) out <- merge(x$resample, x$bestTune) out[, c(x$perfNames, "Resample")] } get_resample_perf.rfe <- function(x) { if(x$control$returnResamp == "none") stop("use returnResamp == 'none' in trainControl()", call. = FALSE) out <- subset(x$resample, Variables == x$bestSubset) out[, c(x$perfNames, "Resample")] } get_resample_perf.sbf <- function(x) { if(x$control$returnResamp == "none") stop("use returnResamp == 'none' in trainControl()", call. = FALSE) x$resample } get_resample_perf.safs <- function(x) { out <- subset(x$external, Iter == x$optIter) out[, !(names(out) %in% "Iter")] } get_resample_perf.gafs <- function(x) { out <- subset(x$external, Iter == x$optIter) out[, !(names(out) %in% "Iter")] } #' Sequences of Variables for Tuning #' #' This function generates a sequence of \code{mtry} values for random forests. #' #' If the number of predictors is less than 500, a simple sequence of values of #' length \code{len} is generated between 2 and \code{p}. For larger numbers of #' predictors, the sequence is created using \code{log2} steps. #' #' If \code{len = 1}, the defaults from the \code{randomForest} package are #' used. #' #' @param p The number of predictors #' @param classification Is the outcome a factor (\code{classification = TRUE} #' or numeric?) #' @param len The number of \code{mtry} values to generate. #' @return a numeric vector #' @author Max Kuhn #' @keywords models #' @examples #' #' var_seq(p = 100, len = 10) #' var_seq(p = 600, len = 10) #' #' @export var_seq var_seq <- function(p, classification = FALSE, len = 3) { if(len == 1) { tuneSeq <- if(classification) max(floor(p/3), 1) else floor(sqrt(p)) } else { if(p <= len) { tuneSeq <- floor(seq(2, to = p, length = p)) } else { if(p < 500 ) tuneSeq <- floor(seq(2, to = p, length = len)) else tuneSeq <- floor(2^seq(1, to = log(p, base = 2), length = len)) } } if(any(table(tuneSeq) > 1)) { tuneSeq <- unique(tuneSeq) cat( "note: only", length(tuneSeq), "unique complexity parameters in default grid.", "Truncating the grid to", length(tuneSeq), ".\n\n") } tuneSeq } parse_sampling <- function(x, check_install = TRUE) { ## x could be ### a string to match to a existing method ### a function ### a list ## output should be a list with elements ### name ### func ### before_pp (logical) x_class <- class(x)[1] if(!(x_class %in% c("character", "function", "list"))) { stop(paste("The sampling argument should be either a", "string, function, or list. See", "http://topepo.github.io/caret/model-training-and-tuning.html"), call. = FALSE) } if(x_class == "character") { x <- x[1] load(system.file("models", "sampling.RData", package = "caret")) s_method <- names(sampling_methods) if(!(x %in% s_method)) { stop("That sampling scheme is not in caret's built-in library", call. = FALSE) } else { x <- list(name = x, func = sampling_methods[x][[1]], first = TRUE) } pkgs <- switch(x$name, rose = "ROSE", smote = "DMwR", "") if(pkgs != "" & check_install) checkInstall(pkgs) } else { if(x_class == "function") { check_samp_func(x) x <- list(name = "custom", func = x, first = TRUE) } else { check_samp_list(x) } } x } check_samp_func <- function(x) { s_args <- sort(names(formals(x))) if(length(s_args) != 2) { stop("the 'sampling' function should have arguments 'x' and 'y'", call. = FALSE) } else { if(!all(s_args == c("x", "y"))) stop("the 'sampling' function should have arguments 'x' and 'y'", call. = FALSE) } invisible(NULL) } check_samp_list <- function(x) { exp_names <- sort(c("name", "func", "first")) x_names <- sort(names(x)) if(length(x_names) != length(exp_names)) { stop(paste("the 'sampling' list should have elements", paste(exp_names, sep = "", collapse = ", ")), call. = FALSE) } else { if(!all(exp_names == x_names)) stop(paste("the 'sampling' list should have elements", paste(exp_names, sep = "", collapse = ", ")), call. = FALSE) } check_samp_func(x$func) if(!is.logical(x$first)) stop("The element 'first' should be a logical", call. = FALSE) invisible(NULL) } #' Get sampling info from a train model #' #' Placeholder. #' #' Placeholder. #' #' @param method Modeling method. #' @param regex Whether to use regex matching. #' @param ... additional arguments to passed to grepl. #' @return A list #' @export getSamplingInfo getSamplingInfo <- function(method = NULL, regex = TRUE, ...) { load(system.file("models", "sampling.RData", package = "caret")) if (!is.null(method)) { keepers <- if (regex) grepl(method, names(sampling_methods), ...) else which(method == names(sampling_methods))[1] sampling_methods <- sampling_methods[keepers] } if (length(sampling_methods) == 0) stop("That sampling method is not in caret's built-in library", call. = FALSE) sampling_methods } get_labels <- function(mods, format = FALSE) { lib <- getModelInfo() lib_labs <- unlist(lapply(lib, function(x) x$label)) labs <- mods is_match <- mods %in% names(lib) if(any(is_match)) labs[is_match] <- lib_labs[mods[is_match]] if(format) { labs <- gsub("-", "--", labs) labs <- gsub("with Polynomial Kernel", "(Polynomial)", labs) labs <- gsub("with Radial Basis Function Kernel", "(RBF)", labs) labs <- gsub("with Linear Kernel", "(Linear)", labs) labs <- gsub("Linear Discriminant Analysis", "LDA", labs) labs <- gsub("Quadratic Discriminant Analysis", "QDA", labs) labs <- gsub("Multivariate Adaptive Regression Spline", "MARS", labs) labs[labs == "glmnet"] <- "\\textsf{glmnet}" } if(length(mods) > 1) data.frame(model = mods, label = labs) else labs[1] } check_dims <- function(x, y) { n <- if(class(y)[1] == "Surv") nrow(y) else length(y) stopifnot(nrow(x) > 1) stopifnot(nrow(x) == n) invisible(NULL) } get_model_type <- function(y, method = NULL) { type <- if(class(y)[1] %in% c("numeric", "Surv", "integer")) "Regression" else "Classification" type } #' @importFrom grDevices extendrange get_range <- function(y) { if(class(y)[1] == "factor") return(NA) if(class(y)[1] %in% c("numeric", "integer")) extendrange(y) else extendrange(y[, "time"]) } #' @rdname caret-internal #' @export outcome_conversion <- function(x, lv) { if(is.factor(x) | is.character(x)) { if(!is.null(attributes(lv)) && any(names(attributes(lv)) == "ordered" && attr(lv, "ordered"))) x <- ordered(as.character(x), levels = lv) else x <- factor(as.character(x), levels = lv) } x } check_na_conflict <- function(call_obj) { ## check for na.action info: if("na.action" %in% names(as.list(call_obj))) { nam <- as.character(call_obj$na.action) } else nam <- "na.fail" ## check for preprocess info: has_pp <- grepl("^preProc", names(call_obj)) if(any(has_pp)) { pp <- as.character(call_obj[has_pp]) imputes <- if(any(grepl("impute", tolower(pp)))) TRUE else FALSE } else imputes <- FALSE if(imputes & any(nam %in% c("na.omit", "na.exclude"))) warning(paste0("`preProcess` includes an imputation method but missing ", "data will be eliminated by the formula method using `na.action=", nam, "`. Consider using `na.actin=na.pass` instead."), call. = FALSE) invisible(NULL) } # in case an object is a sparse matrix or tibble # do not use `drop` as an argument subset_x <- function(x, ind) { if(is.matrix(x) | is.data.frame(x) | inherits(x, "dgCMatrix")) x <- x[ind,,drop = FALSE] else x <- x[ind,] x } fail_warning <- function(settings, msg, where = "model fit", iter, verb) { if (is.list(msg)) { is_fail <- vapply(msg, inherits, c(x = TRUE), what = "try-error") msg <- msg[is_fail] } if (!is.character(msg)) msg <- as.character(msg) wrn <- paste(colnames(settings), settings, sep = "=", collapse = ", ") wrn <- paste(where, " failed for ", iter, ": ", wrn, " ", msg, sep = "") if (verb) cat(wrn, "\n") warning(wrn, call. = FALSE) invisible(wrn) } fill_failed_pred <- function(index, lev, submod){ ## setup a dummy results with NA values for all predictions nPred <- length(index) if(!is.null(lev)) { predicted <- rep("", nPred) predicted[seq(along = predicted)] <- NA } else { predicted <- rep(NA, nPred) } if(!is.null(submod)) { tmp <- predicted predicted <- vector(mode = "list", length = nrow(submod) + 1) for(i in seq(along = predicted)) predicted[[i]] <- tmp rm(tmp) } predicted } fill_failed_prob <- function(index, lev, submod) { probValues <- matrix(NA, nrow = length(index), ncol = length(lev)) probValues <- as.data.frame(probValues) colnames(probValues) <- lev if (!is.null(submod)) probValues <- rep(list(probValues), nrow(submod) + 1L) probValues } optimism_xy <- function(ctrl, x, y, wts, iter, lev, method, mod, predicted, submod, loop) { indexExtra <- ctrl$indexExtra[[iter]] if(is.null(indexExtra) || inherits(mod, "try-error") || inherits(predicted, "try-error")) return (NULL) predictedExtra <- lapply(indexExtra, function(index) { pred <- predictionFunction(method = method, modelFit = mod$fit, newdata = subset_x(x, index), preProc = mod$preProc, param = submod) }) if(ctrl$classProbs) probValuesExtra <- lapply(indexExtra, function(index) { probFunction(method = method, modelFit = mod$fit, newdata = subset_x(x, index), preProc = mod$preProc, param = submod) }) else probValuesExtra <- lapply(indexExtra, function(index) { probValues <- matrix(NA, nrow = length(index), ncol = length(lev)) probValues <- as.data.frame(probValues) colnames(probValues) <- lev if (!is.null(submod)) probValues <- rep(list(probValues), nrow(submod) + 1L) probValues }) if(!is.null(submod)) { allParam <- expandParameters(loop, submod) allParam <- allParam[complete.cases(allParam),, drop = FALSE] predictedExtra <- Map(predictedExtra, indexExtra, f = function(predicted, holdoutIndex) { lapply(predicted, function(x) { y <- y[holdoutIndex] wts <- wts[holdoutIndex] x <- outcome_conversion(x, lv = lev) out <- data.frame(pred = x, obs = y, stringsAsFactors = FALSE) if(!is.null(wts)) out$weights <- wts out$rowIndex <- holdoutIndex out }) }) if(ctrl$classProbs) predictedExtra <- Map(predictedExtra, probValuesExtra, f = function(predicted, probValues) { Map(cbind, predicted, probValues) }) thisResampleExtra <- lapply(predictedExtra, function(predicted) { lapply(predicted, ctrl$summaryFunction, lev = lev, model = method) }) thisResampleExtra[[1L]] <- lapply(thisResampleExtra[[1L]], function(res) { names(res) <- paste0(names(res), "Orig") res }) thisResampleExtra[[2L]] <- lapply(thisResampleExtra[[2L]], function(res) { names(res) <- paste0(names(res), "Boot") res }) thisResampleExtra <- do.call(cbind, lapply(thisResampleExtra, function(x) do.call(rbind, x))) thisResampleExtra <- cbind(allParam, thisResampleExtra) } else { thisResampleExtra <- Map(predictedExtra, indexExtra, probValuesExtra, f = function(predicted, holdoutIndex, probValues) { if(is.factor(y)) predicted <- outcome_conversion(predicted, lv = lev) tmp <- data.frame(pred = predicted, obs = y[holdoutIndex], stringsAsFactors = FALSE) ## Sometimes the code above does not coerce the first ## columnn to be named "pred" so force it names(tmp)[1] <- "pred" if(!is.null(wts)) tmp$weights <- wts[holdoutIndex] if(ctrl$classProbs) tmp <- cbind(tmp, probValues) tmp$rowIndex <- holdoutIndex ctrl$summaryFunction(tmp, lev = lev, model = method) }) names(thisResampleExtra[[1L]]) <- paste0(names(thisResampleExtra[[1L]]), "Orig") names(thisResampleExtra[[2L]]) <- paste0(names(thisResampleExtra[[2L]]), "Boot") thisResampleExtra <- unlist(unname(thisResampleExtra), recursive = FALSE) thisResampleExtra <- cbind(as.data.frame(t(thisResampleExtra)), loop) } # return thisResampleExtra } optimism_rec <- function(ctrl, dat, iter, lev, method, mod_rec, predicted, submod, loop) { indexExtra <- ctrl$indexExtra[[iter]] if(is.null(indexExtra) || model_failed(mod_rec) || inherits(predicted, "try-error")) return (NULL) predictedExtra <- lapply(indexExtra, function(index) { pred <- rec_pred(method = method, object = mod_rec, newdata = subset_x(dat, index), param = submod) trim_values(pred, ctrl, is.null(lev)) }) if(ctrl$classProbs) probValuesExtra <- lapply(indexExtra, function(index) { rec_prob(method = method, object = mod_rec, newdata = subset_x(dat, index), param = submod) }) else probValuesExtra <- lapply(indexExtra, function(index) { fill_failed_prob(index, lev, submod) }) if(!is.null(submod)) { allParam <- expandParameters(loop, submod) allParam <- allParam[complete.cases(allParam),, drop = FALSE] predictedExtra <- Map(predictedExtra, indexExtra, f = function(predicted, holdoutIndex) { lapply(predicted, function(x) { x <- outcome_conversion(x, lv = lev) dat <- holdout_rec(mod_rec, dat, holdoutIndex) dat$pred <- x dat }) }) if(ctrl$classProbs) predictedExtra <- Map(predictedExtra, probValuesExtra, f = function(predicted, probValues) { Map(cbind, predicted, probValues) }) thisResampleExtra <- lapply(predictedExtra, function(predicted) { lapply(predicted, ctrl$summaryFunction, lev = lev, model = method) }) thisResampleExtra[[1L]] <- lapply(thisResampleExtra[[1L]], function(res) { names(res) <- paste0(names(res), "Orig") res }) thisResampleExtra[[2L]] <- lapply(thisResampleExtra[[2L]], function(res) { names(res) <- paste0(names(res), "Boot") res }) thisResampleExtra <- do.call(cbind, lapply(thisResampleExtra, function(x) do.call(rbind, x))) thisResampleExtra <- cbind(allParam, thisResampleExtra) } else { thisResampleExtra <- Map(predictedExtra, indexExtra, probValuesExtra, f = function(predicted, holdoutIndex, probValues) { tmp <- holdout_rec(mod_rec, dat, holdoutIndex) tmp$pred <- outcome_conversion(predicted, lv = lev) if(ctrl$classProbs) tmp <- cbind(tmp, probValues) tmp <- merge(tmp, loop, all = TRUE) ctrl$summaryFunction(tmp, lev = lev, model = method) }) names(thisResampleExtra[[1L]]) <- paste0(names(thisResampleExtra[[1L]]), "Orig") names(thisResampleExtra[[2L]]) <- paste0(names(thisResampleExtra[[2L]]), "Boot") thisResampleExtra <- unlist(unname(thisResampleExtra), recursive = FALSE) thisResampleExtra <- cbind(as.data.frame(t(thisResampleExtra)), loop) } # return thisResampleExtra } parallel_check <- function(pkg, models) { if(any(search() == "package:doMC") && getDoParRegistered() && pkg %in% models$library) warning("Models using ", pkg, " will not work with parallel processing with multicore/doMC", call. = FALSE) flush.console() } caret/R/selectByFilter.R0000644000176200001440000011423713153613153014625 0ustar liggesusers#' @rdname caret-internal #' @export sbfIter <- function(x, y, testX, testY, sbfControl = sbfControl(), ...) { if(is.null(colnames(x))) stop("x must have column names") if(is.null(testX) | is.null(testY)) stop("a test set must be specified") if(sbfControl$multivariate) { scores <- sbfControl$functions$score(x, y) if(length(scores) != ncol(x)) stop(paste("when control$multivariate == TRUE, 'scores'", "should return a vector with", ncol(x), "numeric values")) } else { scores <- apply(x, 2, sbfControl$functions$score, y = y) } retained <- sbfControl$functions$filter(scores, x, y) ## deal with zero length results testX <- testX[, which(retained), drop = FALSE] fitObject <- sbfControl$functions$fit(x[, which(retained), drop = FALSE], y, ...) modelPred <- sbfControl$functions$pred(fitObject, testX) if(is.data.frame(modelPred) | is.matrix(modelPred)) { if(is.matrix(modelPred)) modelPred <- as.data.frame(modelPred) modelPred$obs <- testY } else modelPred <- data.frame(pred = modelPred, obs = testY) list(variables = names(retained)[which(retained)], pred = modelPred) } ###################################################################### ###################################################################### #' Selection By Filtering (SBF) #' #' Model fitting after applying univariate filters #' #' More details on this function can be found at #' \url{http://topepo.github.io/caret/feature-selection-using-univariate-filters.html}. #' #' This function can be used to get resampling estimates for models when #' simple, filter-based feature selection is applied to the training data. #' #' For each iteration of resampling, the predictor variables are univariately #' filtered prior to modeling. Performance of this approach is estimated using #' resampling. The same filter and model are then applied to the entire #' training set and the final model (and final features) are saved. #' #' \code{sbf} can be used with "explicit parallelism", where different #' resamples (e.g. cross-validation group) can be split up and run on multiple #' machines or processors. By default, \code{sbf} will use a single processor #' on the host machine. As of version 4.99 of this package, the framework used #' for parallel processing uses the \pkg{foreach} package. To run the resamples #' in parallel, the code for \code{sbf} does not change; prior to the call to #' \code{sbf}, a parallel backend is registered with \pkg{foreach} (see the #' examples below). #' #' The modeling and filtering techniques are specified in #' \code{\link{sbfControl}}. Example functions are given in #' \code{\link{lmSBF}}. #' #' @aliases sbf sbf.default sbf.formula predict.sbf #' @param x a data frame containing training data where samples are in rows and #' features are in columns. #' @param y a numeric or factor vector containing the outcome for each sample. #' @param form A formula of the form \code{y ~ x1 + x2 + ...} #' @param data Data frame from which variables specified in \code{formula} are #' preferentially to be taken. #' @param subset An index vector specifying the cases to be used in the #' training sample. (NOTE: If given, this argument must be named.) #' @param na.action A function to specify the action to be taken if NAs are #' found. The default action is for the procedure to fail. An alternative is #' na.omit, which leads to rejection of cases with missing values on any #' required variable. (NOTE: If given, this argument must be named.) #' @param contrasts a list of contrasts to be used for some or all the factors #' appearing as variables in the model formula. #' @param sbfControl a list of values that define how this function acts. See #' \code{\link{sbfControl}}. (NOTE: If given, this argument must be named.) #' @param object an object of class \code{sbf} #' @param newdata a matrix or data frame of predictors. The object must have #' non-null column names #' @param \dots for \code{sbf}: arguments passed to the classification or #' regression routine (such as \code{\link[randomForest]{randomForest}}). For #' \code{predict.sbf}: augments cannot be passed to the prediction function #' using \code{predict.sbf} as it uses the function originally specified for #' prediction. #' @return for \code{sbf}, an object of class \code{sbf} with elements: #' \item{pred}{if \code{sbfControl$saveDetails} is \code{TRUE}, this is a list #' of predictions for the hold-out samples at each resampling iteration. #' Otherwise it is \code{NULL}} \item{variables}{a list of variable names that #' survived the filter at each resampling iteration} \item{results}{a data #' frame of results aggregated over the resamples} \item{fit}{the final model #' fit with only the filtered variables} \item{optVariables}{the names of the #' variables that survived the filter using the training set} \item{ call}{the #' function call} \item{control}{the control object} \item{resample}{if #' \code{sbfControl$returnResamp} is "all", a data frame of the resampled #' performance measures. Otherwise, \code{NULL}} \item{metrics}{a character #' vector of names of the performance measures} \item{dots}{a list of optional #' arguments that were passed in} #' #' For \code{predict.sbf}, a vector of predictions. #' @author Max Kuhn #' @seealso \code{\link{sbfControl}} #' @keywords models #' @examples #' #' \dontrun{ #' data(BloodBrain) #' #' ## Use a GAM is the filter, then fit a random forest model #' RFwithGAM <- sbf(bbbDescr, logBBB, #' sbfControl = sbfControl(functions = rfSBF, #' verbose = FALSE, #' method = "cv")) #' RFwithGAM #' #' predict(RFwithGAM, bbbDescr[1:10,]) #' #' ## classification example with parallel processing #' #' ## library(doMC) #' #' ## Note: if the underlying model also uses foreach, the #' ## number of cores specified above will double (along with #' ## the memory requirements) #' ## registerDoMC(cores = 2) #' #' data(mdrr) #' mdrrDescr <- mdrrDescr[,-nearZeroVar(mdrrDescr)] #' mdrrDescr <- mdrrDescr[, -findCorrelation(cor(mdrrDescr), .8)] #' #' set.seed(1) #' filteredNB <- sbf(mdrrDescr, mdrrClass, #' sbfControl = sbfControl(functions = nbSBF, #' verbose = FALSE, #' method = "repeatedcv", #' repeats = 5)) #' confusionMatrix(filteredNB) #' } #' #' #' @export sbf sbf <- function (x, ...) UseMethod("sbf") #' @rdname sbf #' @importFrom stats predict runif #' @export "sbf.default" <- function(x, y, sbfControl = sbfControl(), ...) { startTime <- proc.time() funcCall <- match.call(expand.dots = TRUE) numFeat <- ncol(x) classLevels <- levels(y) if(sbfControl$method == "oob") stop("out-of-bag resampling cannot be used with this function") if(is.null(sbfControl$index)) sbfControl$index <- switch( tolower(sbfControl$method), cv = createFolds(y, sbfControl$number, returnTrain = TRUE), repeatedcv = createMultiFolds(y, sbfControl$number, sbfControl$repeats), loocv = createFolds(y, length(y), returnTrain = TRUE), boot =, boot632 = createResample(y, sbfControl$number), test = createDataPartition(y, 1, sbfControl$p), lgocv = createDataPartition(y, sbfControl$number, sbfControl$p)) if(is.null(names(sbfControl$index))) names(sbfControl$index) <- prettySeq(sbfControl$index) if(is.null(sbfControl$indexOut)){ sbfControl$indexOut <- lapply(sbfControl$index, function(training, allSamples) allSamples[-unique(training)], allSamples = seq(along = y)) names(sbfControl$indexOut) <- prettySeq(sbfControl$indexOut) } ## check summary function and metric testOutput <- data.frame(pred = sample(y, min(10, length(y))), obs = sample(y, min(10, length(y)))) if(is.factor(y)) { for(i in seq(along = classLevels)) testOutput[, classLevels[i]] <- runif(nrow(testOutput)) } test <- sbfControl$functions$summary(testOutput, lev = classLevels) perfNames <- names(test) ## Set or check the seeds when needed if(is.null(sbfControl$seeds)) { sbfControl$seeds <- sample.int(n = 1000000, size = length(sbfControl$index) + 1) } else { if(!(length(sbfControl$seeds) == 1 && is.na(sbfControl$seeds))) { if(length(sbfControl$seeds) != length(sbfControl$index) + 1) stop(paste("Bad seeds: the seed object should be an integer vector of length", length(sbfControl$index) + 1)) } } ######################################################################### if(sbfControl$method == "LOOCV") { tmp <- looSbfWorkflow(x = x, y = y, ppOpts = preProcess, ctrl = sbfControl, lev = classLevels, ...) resamples <- do.call("rbind", tmp$everything[names(tmp$everything) == "pred"]) rownames(resamples) <- 1:nrow(resamples) selectedVars <- tmp$everything[names(tmp$everything) == "variables"] performance <- tmp$performance } else { tmp <- nominalSbfWorkflow(x = x, y = y, ppOpts = preProcess, ctrl = sbfControl, lev = classLevels, ...) resamples <- do.call("rbind", tmp$everything[names(tmp$everything) == "resamples"]) rownames(resamples) <- 1:nrow(resamples) selectedVars <- tmp$everything[names(tmp$everything) == "selectedVars"] performance <- tmp$performance } ######################################################################### varList <- unique(unlist(selectedVars)) if(sbfControl$multivariate) { scores <- sbfControl$functions$score(x, y) if(length(scores) != ncol(x)) stop(paste("when control$multivariate == TRUE, 'scores'", "should return a vector with", ncol(x), "numeric values")) } else { scores <- apply(x, 2, sbfControl$functions$score, y = y) } retained <- sbfControl$functions$filter(scores, x, y) finalTime <- system.time( fit <- sbfControl$functions$fit(x[, retained, drop = FALSE], y, ...)) performance <- data.frame(t(performance)) performance <- performance[,!grepl("\\.cell|Resample", colnames(performance))] if(is.factor(y) & any(names(resamples) == ".cell1")) { keepers <- c("Resample", grep("\\.cell", names(resamples), value = TRUE)) resampledCM <- resamples[,keepers] resamples <- resamples[, -grep("\\.cell", names(resamples))] } else resampledCM <- NULL resamples <- switch(sbfControl$returnResamp, none = NULL, all =, final = resamples) endTime <- proc.time() times <- list(everything = endTime - startTime, final = finalTime) ######################################################################### ## Now, based on probability or static ranking, figure out the best vars ## and the best subset size and fit final model out <- structure( list( pred = if(sbfControl$saveDetails) tmp else NULL, variables = selectedVars, results = performance, fit = fit, optVariables = names(retained)[retained], call = funcCall, control = sbfControl, resample = resamples, metrics = perfNames, times = times, resampledCM = resampledCM, obsLevels = classLevels, dots = list(...)), class = "sbf") if(sbfControl$timingSamps > 0) { out$times$prediction <- system.time(predict(out, x[1:min(nrow(x), sbfControl$timingSamps),,drop = FALSE])) } else out$times$prediction <- rep(NA, 3) out } #' @rdname sbf #' @importFrom stats .getXlevels contrasts model.matrix model.response #' @export sbf.formula <- function (form, data, ..., subset, na.action, contrasts = NULL) { m <- match.call(expand.dots = FALSE) if (is.matrix(eval.parent(m$data))) m$data <- as.data.frame(data) m$... <- m$contrasts <- NULL m[[1]] <- as.name("model.frame") m <- eval.parent(m) Terms <- attr(m, "terms") x <- model.matrix(Terms, m, contrasts) cons <- attr(x, "contrast") xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] y <- model.response(m) res <- sbf(as.data.frame(x), y, ...) res$terms <- Terms res$coefnames <- colnames(x) res$call <- match.call() res$na.action <- attr(m, "na.action") res$contrasts <- cons res$xlevels <- .getXlevels(Terms, m) class(res) <- c("sbf", "sbf.formula") res } ###################################################################### ###################################################################### #' @export print.sbf <- function(x, top = 5, digits = max(3, getOption("digits") - 3), ...) { cat("\nSelection By Filter\n\n") resampleN <- unlist(lapply(x$control$index, length)) numResamp <- length(resampleN) resampText <- resampName(x) cat("Outer resampling method:", resampText, "\n") cat("\nResampling performance:\n\n") print(format(x$results, digits = digits), row.names = FALSE) cat("\n") if(length(x$optVariables) > 0) { cat("Using the training set, ", length(x$optVariables), ifelse(length(x$optVariables) > 1, " variables were selected:\n ", " variable was selected:\n "), paste(x$optVariables[1:min(top, length(x$optVariables))], collapse = ", "), ifelse(length(x$optVariables) > top, "..", ""), ".\n\n", sep = "") } else cat("No variables were selected from the training set.\n\n") vars <- sort(table(unlist(x$variables)), decreasing = TRUE) top <- min(top, length(vars)) smallVars <- vars[1:top] smallVars <- round(smallVars/length(x$control$index)*100, 1) varText <- paste(names(smallVars), " (", smallVars, "%)", sep = "") varText <- paste(varText, collapse = ", ") if(!all(is.na(smallVars))) { cat("During resampling, the top ", top, " selected variables (out of a possible ", length(vars), "):\n ", varText, "\n\n", sep = "") cat("On average, ", round(mean(unlist(lapply(x$variables, length))), 1), " variables were selected (min = ", round(min(unlist(lapply(x$variables, length))), 1), ", max = ", round(max(unlist(lapply(x$variables, length))), 1), ")\n", sep = "") } else { cat("During resampling, no variables were selected.\n\n") } invisible(x) } ###################################################################### ###################################################################### #' @rdname sbf #' @importFrom stats .checkMFClasses delete.response model.frame model.matrix na.omit #' @export predict.sbf <- function(object, newdata = NULL, ...) { if(!is.null(newdata)) { if (inherits(object, "sbf.formula")) { newdata <- as.data.frame(newdata) rn <- row.names(newdata) Terms <- delete.response(object$terms) m <- model.frame(Terms, newdata, na.action = na.omit, xlev = object$xlevels) if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) keep <- match(row.names(m), rn) newdata <- model.matrix(Terms, m, contrasts = object$contrasts) xint <- match("(Intercept)", colnames(newdata), nomatch = 0) if (xint > 0) newdata <- newdata[, -xint, drop = FALSE] } if(!all(object$optVariables %in% colnames(newdata))) stop("required columns in newdata are missing", call. = FALSE) newdata <- newdata[, object$optVariables, drop = FALSE] out <- object$control$functions$pred(object$fit, newdata) } else { out <- object$control$functions$pred(object$fit) } out } ###################################################################### ###################################################################### #' Control Object for Selection By Filtering (SBF) #' #' Controls the execution of models with simple filters for feature selection #' #' More details on this function can be found at #' \url{http://topepo.github.io/caret/feature-selection-using-univariate-filters.html}. #' #' Simple filter-based feature selection requires function to be specified for #' some operations. #' #' The \code{fit} function builds the model based on the current data set. The #' arguments for the function must be: \itemize{ \item\code{x} the current #' training set of predictor data with the appropriate subset of variables #' (i.e. after filtering) \item\code{y} the current outcome data (either a #' numeric or factor vector) \item\code{...} optional arguments to pass to the #' fit function in the call to \code{sbf} } The function should return a model #' object that can be used to generate predictions. #' #' The \code{pred} function returns a vector of predictions (numeric or #' factors) from the current model. The arguments are: \itemize{ #' \item\code{object} the model generated by the \code{fit} function #' \item\code{x} the current set of predictor set for the held-back samples } #' #' The \code{score} function is used to return scores with names for each #' predictor (such as a p-value). Inputs are: \itemize{ \item\code{x} the #' predictors for the training samples. If \code{sbfControl()$multivariate} is #' \code{TRUE}, this will be the full predictor matrix. Otherwise it is a #' vector for a specific predictor. \item\code{y} the current training #' outcomes } When \code{sbfControl()$multivariate} is \code{TRUE}, the #' \code{score} function should return a named vector where #' \code{length(scores) == ncol(x)}. Otherwise, the function's output should be #' a single value. Univariate examples are give by \code{\link{anovaScores}} #' for classification and \code{\link{gamScores}} for regression and the #' example below. #' #' The \code{filter} function is used to return a logical vector with names for #' each predictor (\code{TRUE} indicates that the prediction should be #' retained). Inputs are: \itemize{ \item\code{score} the output of the #' \code{score} function \item\code{x} the predictors for the training samples #' \item\code{y} the current training outcomes } The function should return a #' named logical vector. #' #' Examples of these functions are included in the package: #' \code{\link{caretSBF}}, \code{\link{lmSBF}}, \code{\link{rfSBF}}, #' \code{\link{treebagSBF}}, \code{\link{ldaSBF}} and \code{\link{nbSBF}}. #' #' The web page \url{http://topepo.github.io/caret/} has more details and #' examples related to this function. #' #' @param functions a list of functions for model fitting, prediction and #' variable filtering (see Details below) #' @param method The external resampling method: \code{boot}, \code{cv}, #' \code{LOOCV} or \code{LGOCV} (for repeated training/test splits #' @param number Either the number of folds or number of resampling iterations #' @param repeats For repeated k-fold cross-validation only: the number of #' complete sets of folds to compute #' @param saveDetails a logical to save the predictions and variable #' importances from the selection process #' @param verbose a logical to print a log for each external resampling #' iteration #' @param returnResamp A character string indicating how much of the resampled #' summary metrics should be saved. Values can be ``final'' or ``none'' #' @param p For leave-group out cross-validation: the training percentage #' @param index a list with elements for each external resampling iteration. #' Each list element is the sample rows used for training at that iteration. #' @param indexOut a list (the same length as \code{index}) that dictates which #' sample are held-out for each resample. If \code{NULL}, then the unique set #' of samples not contained in \code{index} is used. #' @param timingSamps the number of training set samples that will be used to #' measure the time for predicting samples (zero indicates that the prediction #' time should not be estimated). #' @param seeds an optional set of integers that will be used to set the seed #' at each resampling iteration. This is useful when the models are run in #' parallel. A value of \code{NA} will stop the seed from being set within the #' worker processes while a value of \code{NULL} will set the seeds using a #' random set of integers. Alternatively, a vector of integers can be used. The #' vector should have \code{B+1} elements where \code{B} is the number of #' resamples. See the Examples section below. #' @param allowParallel if a parallel backend is loaded and available, should #' the function use it? #' @param multivariate a logical; should all the columns of \code{x} be exposed #' to the \code{score} function at once? #' @return a list that echos the specified arguments #' @author Max Kuhn #' @seealso \code{\link{sbf}}, \code{\link{caretSBF}}, \code{\link{lmSBF}}, #' \code{\link{rfSBF}}, \code{\link{treebagSBF}}, \code{\link{ldaSBF}} and #' \code{\link{nbSBF}} #' @keywords utilities #' @examples #' #' \dontrun{ #' data(BloodBrain) #' #' ## Use a GAM is the filter, then fit a random forest model #' set.seed(1) #' RFwithGAM <- sbf(bbbDescr, logBBB, #' sbfControl = sbfControl(functions = rfSBF, #' verbose = FALSE, #' seeds = sample.int(100000, 11), #' method = "cv")) #' RFwithGAM #' #' #' ## A simple example for multivariate scoring #' rfSBF2 <- rfSBF #' rfSBF2$score <- function(x, y) apply(x, 2, rfSBF$score, y = y) #' #' set.seed(1) #' RFwithGAM2 <- sbf(bbbDescr, logBBB, #' sbfControl = sbfControl(functions = rfSBF2, #' verbose = FALSE, #' seeds = sample.int(100000, 11), #' method = "cv", #' multivariate = TRUE)) #' RFwithGAM2 #' #' #' } #' @export sbfControl sbfControl <- function(functions = NULL, method = "boot", saveDetails = FALSE, number = ifelse(method %in% c("cv", "repeatedcv"), 10, 25), repeats = ifelse(method %in% c("cv", "repeatedcv"), 1, number), verbose = FALSE, returnResamp = "final", p = .75, index = NULL, indexOut = NULL, timingSamps = 0, seeds = NA, allowParallel = TRUE, multivariate = FALSE) { list( functions = if(is.null(functions)) caretSBF else functions, method = method, saveDetails = saveDetails, number = number, repeats = repeats, returnResamp = returnResamp, verbose = verbose, p = p, index = index, indexOut = indexOut, timingSamps = timingSamps, seeds = seeds, allowParallel = allowParallel, multivariate = multivariate) } ###################################################################### ###################################################################### ## some built-in functions for certain models #' Selection By Filtering (SBF) Helper Functions #' #' Ancillary functions for univariate feature selection #' #' More details on these functions can be found at #' \url{http://topepo.github.io/caret/feature-selection-using-univariate-filters.html}. #' #' This page documents the functions that are used in selection by filtering #' (SBF). The functions described here are passed to the algorithm via the #' \code{functions} argument of \code{\link{sbfControl}}. #' #' See \code{\link{sbfControl}} for details on how these functions should be #' defined. #' #' \code{anovaScores} and \code{gamScores} are two examples of univariate #' filtering functions. \code{anovaScores} fits a simple linear model between a #' single feature and the outcome, then the p-value for the whole model F-test #' is returned. \code{gamScores} fits a generalized additive model between a #' single predictor and the outcome using a smoothing spline basis function. A #' p-value is generated using the whole model test from #' \code{\link[gam]{summary.gam}} and is returned. #' #' If a particular model fails for \code{lm} or \code{gam}, a p-value of 1 is #' returned. #' #' @aliases caretSBF lmSBF rfSBF treebagSBF ldaSBF nbSBF gamScores anovaScores #' @param x a matrix or data frame of numeric predictors #' @param y a numeric or factor vector of outcomes #' @author Max Kuhn #' @seealso \code{\link{sbfControl}}, \code{\link{sbf}}, #' \code{\link[gam]{summary.gam}} #' @keywords models #' @export caretSBF caretSBF <- list(summary = defaultSummary, fit = function(x, y, ...) { if(ncol(x) > 0) { train(x, y, ...) } else nullModel(y = y) }, pred = function(object, x) { if(class(object) != "nullModel") { tmp <- predict(object, x) if(object$modelType == "Classification" & !is.null(object$modelInfo$prob)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp } else { tmp <- predict(object, x) if(!is.null(object$levels)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp } out }, score = function(x, y) { ## should return a named logical vector if(is.factor(y)) anovaScores(x, y) else gamScores(x, y) }, filter = function(score, x, y) score <= 0.05 ) #' @importFrom stats predict #' @export rfSBF <- list(summary = defaultSummary, fit = function(x, y, ...) { if(ncol(x) > 0) { loadNamespace("randomForest") randomForest::randomForest(x, y, ...) } else nullModel(y = y) }, pred = function(object, x) { if(class(object) == "nullModel") { tmp <- predict(object, x) if(!is.null(object$levels)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp } else { tmp <- predict(object, x) if(is.factor(object$y)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp } out }, score = function(x, y) { ## should return a named logical vector if(is.factor(y)) anovaScores(x, y) else gamScores(x, y) }, filter = function(score, x, y) score <= 0.05 ) #' @importFrom stats predict lm #' @export lmSBF <- list(summary = defaultSummary, fit = function(x, y, ...) { if(ncol(x) > 0) { tmp <- as.data.frame(x) tmp$y <- y lm(y~., data = tmp) } else nullModel(y = y) }, pred = function(object, x) { predict(object, x) }, score = function(x, y) { anovaScores(y, x) }, filter = function(score, x, y) score <= 0.05 ) #' @importFrom stats predict #' @export ldaSBF <- list(summary = defaultSummary, fit = function(x, y, ...) { if(ncol(x) > 0) { loadNamespace("MASS") MASS::lda(x, y, ...) } else nullModel(y = y) }, pred = function(object, x) { if(class(object) == "nullModel") { tmp <- predict(object, x) out <- cbind(data.frame(pred = tmp), as.data.frame( predict(object, x, type = "prob"))) } else { tmp <- predict(object, x) out <- cbind(data.frame(pred = tmp$class), as.data.frame(tmp$posterior)) } out }, score = function(x, y) { ## should return a named logical vector anovaScores(x, y) }, filter = function(score, x, y) score <= 0.05 ) #' @importFrom stats predict #' @export nbSBF <- list(summary = defaultSummary, fit = function(x, y, ...) { if(ncol(x) > 0) { loadNamespace("klaR") klaR::NaiveBayes(x, y, usekernel = TRUE, fL = 2, ...) } else nullModel(y = y) }, pred = function(object, x) { if(class(object) == "nullModel") { tmp <- predict(object, x) out <- cbind(data.frame(pred = tmp), as.data.frame( predict(object, x, type = "prob"))) } else { tmp <- predict(object, x) out <- cbind(data.frame(pred = tmp$class), as.data.frame(tmp$posterior)) } out }, pred = function(object, x) { predict(object, x)$class }, score = function(x, y) { ## should return a named logical vector anovaScores(x, y) }, filter = function(score, x, y) score <= 0.05 ) #' @importFrom stats predict #' @export treebagSBF <- list(summary = defaultSummary, fit = function(x, y, ...) { if(ncol(x) > 0) { loadNamespace("ipred") ipred::ipredbagg(y, x, ...) } else nullModel(y = y) }, pred = function(object, x) { if(class(object) == "nullModel") { tmp <- predict(object, x) if(!is.null(object$levels)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp } else { tmp <- predict(object, x) if(is.factor(object$y)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp } out }, score = function(x, y) { ## should return a named logical vector anovaScores(x, y) }, filter = function(score, x, y) score <= 0.05 ) #' @rdname caretSBF #' @importFrom stats anova lm #' @export anovaScores <- function(x, y) { if(is.factor(x)) stop("The predictors should be numeric") pv <- try(anova(lm(x ~ y), test = "F")[1, "Pr(>F)"], silent = TRUE) if(any(class(pv) == "try-error") || is.na(pv) || is.nan(pv)) pv <- 1 pv } #' @rdname caretSBF #' @importFrom stats anova lm #' @export gamScores <- function(x, y) { if(is.factor(x)) stop("The predictors should be numeric") requireNamespaceQuietStop("gam") pv <- try(anova(gam::gam(y ~ s(x)), test = "F")[2, "Pr(F)"], silent = TRUE) if(any(class(pv) == "try-error")) pv <- try(anova(lm(x ~ y), test = "F")[1, "Pr(>F)"], silent = TRUE) if(any(class(pv) == "try-error") || is.na(pv) || is.nan(pv)) pv <- 1 pv } ###################################################################### ###################################################################### ## lattice functions #' @importFrom stats as.formula #' @export densityplot.sbf <- function(x, data = NULL, metric = x$metric[1], ...) { if (!is.null(match.call()$data)) warning("explicit 'data' specification ignored") if(x$control$method %in% c("oob", "LOOCV")) stop("Resampling plots cannot be done with leave-out-out CV or out-of-bag resampling") data <- as.data.frame(x$resample) form <- as.formula(paste("~", metric)) densityplot(form, data = data, ...) } #' @importFrom stats as.formula #' @export histogram.sbf <- function(x, data = NULL, metric = x$metric[1], ...) { if (!is.null(match.call()$data)) warning("explicit 'data' specification ignored") if(x$control$method %in% c("oob", "LOOCV")) stop("Resampling plots cannot be done with leave-out-out CV or out-of-bag resampling") data <- as.data.frame(x$resample) form <- as.formula(paste("~", metric)) histogram(form, data = data, ...) } ###################################################################### ###################################################################### ## other functions #' @export predictors.sbf <- function(x, ...) x$optVariables #' @export varImp.sbf <- function(object, onlyFinal = TRUE, ...) { vars <- sort(table(unlist(object$variables)), decreasing = TRUE)/length(object$control$index) out <- as.data.frame(vars) names(out) <- "Overall" if(onlyFinal) out <- subset(out, rownames(out) %in% object$optVariables) out[order(-out$Overall),,drop = FALSE] } ###################################################################### ## what to do when no predictors are selected? #' Fit a simple, non-informative model #' #' Fit a single mean or largest class model #' #' \code{nullModel} emulates other model building functions, but returns the #' simplest model possible given a training set: a single mean for numeric #' outcomes and the most prevalent class for factor outcomes. When class #' probabilities are requested, the percentage of the training set samples with #' the most prevalent class is returned. #' #' @aliases nullModel nullModel.default predict.nullModel #' @param x An optional matrix or data frame of predictors. These values are #' not used in the model fit #' @param y A numeric vector (for regression) or factor (for classification) of #' outcomes #' @param \dots Optional arguments (not yet used) #' @param object An object of class \code{nullModel} #' @param newdata A matrix or data frame of predictors (only used to determine #' the number of predictions to return) #' @param type Either "raw" (for regression), "class" or "prob" (for #' classification) #' @return The output of \code{nullModel} is a list of class \code{nullModel} #' with elements \item{call }{the function call} \item{value }{the mean of #' \code{y} or the most prevalent class} \item{levels }{when \code{y} is a #' factor, a vector of levels. \code{NULL} otherwise} \item{pct }{when \code{y} #' is a factor, a data frame with a column for each class (\code{NULL} #' otherwise). The column for the most prevalent class has the proportion of #' the training samples with that class (the other columns are zero). } \item{n #' }{the number of elements in \code{y}} #' #' \code{predict.nullModel} returns a either a factor or numeric vector #' depending on the class of \code{y}. All predictions are always the same. #' @keywords models #' @examples #' #' outcome <- factor(sample(letters[1:2], #' size = 100, #' prob = c(.1, .9), #' replace = TRUE)) #' useless <- nullModel(y = outcome) #' useless #' predict(useless, matrix(NA, nrow = 10)) #' #' #' @export nullModel nullModel <- function (x, ...) UseMethod("nullModel") #' @rdname nullModel #' @export nullModel.default <- function(x = NULL, y, ...) { if(is.factor(y)) { lvls <- levels(y) tab <- table(y) value <- names(tab)[which.max(tab)] pct <- tab/sum(tab) } else { lvls <- NULL pct <- NULL value <- mean(y, na.rm = TRUE) } structure( list(call = match.call(), value = value, levels = lvls, pct = pct, n = length(y)), class = "nullModel") } #' @export print.nullModel <- function(x, digits = max(3, getOption("digits") - 3), ...) { cat("Null", ifelse(is.null(x$levels), "Classification", "Regression"), "Model\n") printCall(x$call) cat("Predicted Value:", ifelse(is.null(x$levels), format(x$value, digitis = digits), x$value), "\n") } #' @rdname nullModel #' @export predict.nullModel <- function (object, newdata = NULL, type = NULL, ...) { if(is.null(type)) { type <- if(is.null(object$levels)) "raw" else "class" } n <- if(is.null(newdata)) object$n else nrow(newdata) if(!is.null(object$levels)) { if(type == "prob") { out <- matrix(rep(object$pct, n), nrow = n, byrow = TRUE) colnames(out) <- object$levels out <- as.data.frame(out) } else { out <- factor(rep(object$value, n), levels = object$levels) } } else { if(type %in% c("prob", "class")) stop("ony raw predicitons are applicable to regression models") out <- rep(object$value, n) } out } caret/R/additive.R0000644000176200001440000000330413153613153013466 0ustar liggesusers #' @importFrom stats median predict quantile additivePlot <- function(x, data, n = 100, quant = 0, plot = TRUE, ...) { if(any(class(x) == "earth")) { data <- data[, predictors(x), drop = FALSE] } seqs <- lapply(data, function(x, len, q) list(seq = seq( quantile(x, na.rm = TRUE, probs = q), quantile(x, na.rm = TRUE, probs = 1 - q), length = len), var = ""), len = n, q = quant) for(i in seq(along = seqs)) seqs[[i]]$var <- colnames(data)[i] meds <- lapply(data, function(x, len) rep(median(x, na.rm = TRUE), len), len = n) meds <- as.data.frame(meds) predGrid <- lapply(seqs, function(x, m) { m[, x$var] <- x$seq m$variable <- x$var m }, m = meds) predGrid <- do.call("rbind", predGrid) predGrid$predicted <- predict(x, predGrid[, colnames(data), drop = FALSE], ...) predGrid$x <- unlist(lapply(seqs, function(x) x$seq)) if(plot) { out <- xyplot(predicted ~ x|variable, data = predGrid, between = list(x = 2), scales = list(x = list(relation = "free")), as.table = TRUE, xlab = "", ylab = "Predicted", type = "l") } else out <- predGrid out } caret/R/postResample.R0000644000176200001440000002625713206640141014363 0ustar liggesusers#' Calculates performance across resamples #' #' Given two numeric vectors of data, the mean squared error and #' R-squared are calculated. For two factors, the overall agreement #' rate and Kappa are determined. #' #' \code{postResample} is meant to be used with \code{apply} #' across a matrix. For numeric data the code checks to see if the #' standard deviation of either vector is zero. If so, the #' correlation between those samples is assigned a value of zero. #' \code{NA} values are ignored everywhere. #' #' Note that many models have more predictors (or parameters) than #' data points, so the typical mean squared error denominator (n - #' p) does not apply. Root mean squared error is calculated using #' \code{sqrt(mean((pred - obs)^2}. Also, \eqn{R^2} is calculated #' wither using as the square of the correlation between the #' observed and predicted outcomes when \code{form = "corr"}. when #' \code{form = "traditional"}, \deqn{ R^2 = 1-\frac{\sum (y_i - #' \hat{y}_i)^2}{\sum (y_i - \bar{y}_i)^2} }. Mean absolute error #' is calculated using \code{mean(abs(pred-obs))}. #' #' \code{defaultSummary} is the default function to compute #' performance metrics in \code{\link{train}}. It is a wrapper #' around \code{postResample}. The first argument is \code{data}, #' which is \code{data.frame} with columns named \code{obs} and #' \code{pred} for the observed and predicted outcome values #' (either numeric data for regression or character values for #' classification). The second argument is \code{lev}, a character #' string that has the outcome factor levels or NULL for a #' regression model. The third parameter is \code{model}, which can #' be used if a summary metric is specific to a model function. If #' other columns from the data are required to compute the summary #' statistics, but should not be used in the model, the #' \code{recipe} method for \code{\link{train}} can be used. #' #' \code{twoClassSummary} computes sensitivity, specificity and #' the area under the ROC curve. \code{mnLogLoss} computes the #' minus log-likelihood of the multinomial distribution (without #' the constant term): \deqn{ -logLoss = \frac{-1}{n}\sum_{i=1}^n #' \sum_{j=1}^C y_{ij} \log(p_{ij}) } where the \code{y} values are #' binary indicators for the classes and \code{p} are the predicted #' class probabilities. #' #' \code{prSummary} (for precision and recall) computes values for #' the default 0.50 probability cutoff as well as the area under #' the precision-recall curve across all cutoffs and is labelled as #' \code{"AUC"} in the output. If assumes that the first level of #' the factor variables corresponds to a relevant result but the #' \code{lev} argument can be used to change this. #' #' \code{multiClassSummary} computes some overall measures of for #' performance (e.g. overall accuracy and the Kappa statistic) and #' several averages of statistics calculated from "one-versus-all" #' configurations. For example, if there are three classes, three #' sets of sensitivity values are determined and the average is #' reported with the name ("Mean_Sensitivity"). The same is true #' for a number of statistics generated by #' \code{\link{confusionMatrix}}. With two classes, the basic #' sensitivity is reported with the name "Sensitivity". #' #' To use \code{twoClassSummary} and/or \code{mnLogLoss}, the #' \code{classProbs} argument of \code{\link{trainControl}} should #' be \code{TRUE}. \code{multiClassSummary} can be used without #' class probabilities but some statistics (e.g. overall log loss #' and the average of per-class area under the ROC curves) will not #' be in the result set. #' #' Other functions can be used via the \code{summaryFunction} #' argument of \code{\link{trainControl}}. Custom functions must #' have the same arguments as\code{defaultSummary}. #' #' The function \code{getTrainPerf} returns a one row data frame #' with the resampling results for the chosen model. The statistics #' will have the prefix "\code{Train}" (i.e. "\code{TrainROC}"). #' There is also a column called "\code{method}" that echoes the #' argument of the call to \code{\link{trainControl}} of the same #' name. #' #' @aliases postResample defaultSummary twoClassSummary prSummary #' getTrainPerf mnLogLoss R2 RMSE multiClassSummary MAE #' @param pred A vector of numeric data (could be a factor) #' @param obs A vector of numeric data (could be a factor) #' @param data a data frame with columns \code{obs} and #' \code{pred} for the observed and predicted outcomes. For metrics #' that rely on class probabilities, such as #' \code{twoClassSummary}, columns should also include predicted #' probabilities for each class. See the \code{classProbs} argument #' to \code{\link{trainControl}}. #' @param lev a character vector of factors levels for the #' response. In regression cases, this would be \code{NULL}. #' @param model a character string for the model name (as taken #' from the \code{method} argument of \code{\link{train}}. #' @return A vector of performance estimates. #' @author Max Kuhn, Zachary Mayer #' @seealso \code{\link{trainControl}} #' @references Kvalseth. Cautionary note about \eqn{R^2}. American Statistician #' (1985) vol. 39 (4) pp. 279-285 #' @keywords utilities #' @examples #' #' predicted <- matrix(rnorm(50), ncol = 5) #' observed <- rnorm(10) #' apply(predicted, 2, postResample, obs = observed) #' #' classes <- c("class1", "class2") #' set.seed(1) #' dat <- data.frame(obs = factor(sample(classes, 50, replace = TRUE)), #' pred = factor(sample(classes, 50, replace = TRUE)), #' class1 = runif(50)) #' dat$class2 <- 1 - dat$class1 #' #' defaultSummary(dat, lev = classes) #' twoClassSummary(dat, lev = classes) #' prSummary(dat, lev = classes) #' mnLogLoss(dat, lev = classes) #' #' @export postResample postResample <- function(pred, obs) { isNA <- is.na(pred) pred <- pred[!isNA] obs <- obs[!isNA] if (!is.factor(obs) && is.numeric(obs)) { if(length(obs) + length(pred) == 0) { out <- rep(NA, 3) } else { if(length(unique(pred)) < 2 || length(unique(obs)) < 2) { resamplCor <- NA } else { resamplCor <- try(cor(pred, obs, use = "pairwise.complete.obs"), silent = TRUE) if(class(resamplCor) == "try-error") resamplCor <- NA } mse <- mean((pred - obs)^2) mae <- mean(abs(pred - obs)) out <- c(sqrt(mse), resamplCor^2, mae) } names(out) <- c("RMSE", "Rsquared", "MAE") } else { if(length(obs) + length(pred) == 0) { out <- rep(NA, 2) } else { pred <- factor(pred, levels = levels(obs)) requireNamespaceQuietStop("e1071") out <- unlist(e1071::classAgreement(table(obs, pred)))[c("diag", "kappa")] } names(out) <- c("Accuracy", "Kappa") } if(any(is.nan(out))) out[is.nan(out)] <- NA out } #' @rdname postResample #' @importFrom ModelMetrics auc #' @export twoClassSummary <- function (data, lev = NULL, model = NULL) { lvls <- levels(data$obs) if(length(lvls) > 2) stop(paste("Your outcome has", length(lvls), "levels. The twoClassSummary() function isn't appropriate.")) requireNamespaceQuietStop('ModelMetrics') if (!all(levels(data[, "pred"]) == lvls)) stop("levels of observed and predicted data do not match") rocAUC <- ModelMetrics::auc(ifelse(data$obs == lev[2], 0, 1), data[, lvls[1]]) out <- c(rocAUC, sensitivity(data[, "pred"], data[, "obs"], lev[1]), specificity(data[, "pred"], data[, "obs"], lev[2])) names(out) <- c("ROC", "Sens", "Spec") out } #' @rdname postResample #' @importFrom stats complete.cases #' @export mnLogLoss <- function(data, lev = NULL, model = NULL){ if(is.null(lev)) stop("'lev' cannot be NULL") if(!all(lev %in% colnames(data))) stop("'data' should have columns consistent with 'lev'") if(!all(sort(lev) %in% sort(levels(data$obs)))) stop("'data$obs' should have levels consistent with 'lev'") dataComplete <- data[complete.cases(data),] probs <- as.matrix(dataComplete[, lev, drop = FALSE]) logLoss <- ModelMetrics::mlogLoss(dataComplete$obs, probs) c(logLoss = logLoss) } #' @rdname postResample #' @export multiClassSummary <- function(data, lev = NULL, model = NULL){ #Check data if (!all(levels(data[, "pred"]) == levels(data[, "obs"]))) stop("levels of observed and predicted data do not match") has_class_probs <- all(lev %in% colnames(data)) if(has_class_probs) { ## Overall multinomial loss lloss <- mnLogLoss(data = data, lev = lev, model = model) requireNamespaceQuietStop("ModelMetrics") requireNamespaceQuietStop("MLmetrics") #Calculate custom one-vs-all ROC curves for each class prob_stats <- lapply(levels(data[, "pred"]), function(x){ #Grab one-vs-all data for the class obs <- ifelse(data[,"obs"] == x, 1, 0) prob <- data[,x] roc_auc <- try(ModelMetrics::auc(obs, data[,x]), silent = TRUE) # browser() pr_auc <- try(MLmetrics::PRAUC(y_pred = data[,x], y_true = obs), silent = TRUE) if(inherits(pr_auc, "try-error")) pr_auc <- NA res <- c(ROC = roc_auc, AUC = pr_auc) return(res) }) prob_stats <- do.call("rbind", prob_stats) prob_stats <- colMeans(prob_stats, na.rm = TRUE) } #Calculate confusion matrix-based statistics CM <- confusionMatrix(data[, "pred"], data[, "obs"], mode = "everything") #Aggregate and average class-wise stats #Todo: add weights # RES: support two classes here as well if (length(levels(data[, "pred"])) == 2) { class_stats <- CM$byClass } else { class_stats <- colMeans(CM$byClass) names(class_stats) <- paste("Mean", names(class_stats)) } # Aggregate overall stats overall_stats <- if (has_class_probs) c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats["ROC"]), prAUC = unname(prob_stats["AUC"])) else CM$overall # Combine overall with class-wise stats and remove some stats we don't want stats <- c(overall_stats, class_stats) stats <- stats[! names(stats) %in% c('AccuracyNull', "AccuracyLower", "AccuracyUpper", "AccuracyPValue", "McnemarPValue", 'Mean Prevalence', 'Mean Detection Prevalence')] # Clean names names(stats) <- gsub('[[:blank:]]+', '_', names(stats)) # Change name ordering to place most useful first # May want to remove some of these eventually stat_list <- c("Accuracy", "Kappa", "Mean_F1", "Mean_Sensitivity", "Mean_Specificity", "Mean_Pos_Pred_Value", "Mean_Neg_Pred_Value", "Mean_Precision", "Mean_Recall", "Mean_Detection_Rate", "Mean_Balanced_Accuracy") if(has_class_probs) stat_list <- c("logLoss", "AUC", "prAUC", stat_list) if (length(levels(data[, "pred"])) == 2) stat_list <- gsub("^Mean_", "", stat_list) stats <- stats[c(stat_list)] return(stats) } caret/R/thresholder.R0000644000176200001440000001153013153613153014220 0ustar liggesusers#' Generate Data to Choose a Probability Threshold #' #' This function uses the resampling results from a \code{\link{train}} #' object to generate performance statistics over a set of probability #' thresholds for two-class problems. #' #' @param x A \code{\link{train}} object where the values of #' \code{savePredictions} was either \code{TRUE}, \code{"all"}, #' or \code{"final"} in \code{\link{trainControl}}. Also, the #' control argument \code{clasProbs} should have been \code{TRUE}. #' @param threshold A numeric vector of candidate probability thresholds #' between [0,1]. If the class probability corresponding to the first #' level of the outcome is greater than the threshold, the data point #' is classified as that level. #' @param final A logical: should only the final tuning parameters #' chosen by \code{\link{train}} be used when #' \code{savePredictions = 'all'}? #' @return A data frame with columns for each of the tuning parameters #' from the model along with an additional column called #' \code{prob_threshold} for the probability threshold. There are #' also columns for summary statistics averaged over resamples with #' column names \code{Sensitivity}, \code{Specificity}, \code{J}, #' \code{Dist}. The last two correspond to Youden's J statistic #' and the distance to the best possible cutoff (i.e. perfect #' sensitivity and specificity). #' @export #' @importFrom plyr ddply #' @examples #' \dontrun{ #' set.seed(2444) #' dat <- twoClassSim(500, intercept = -10) #' table(dat$Class) #' #' ctrl <- trainControl(method = "cv", #' classProbs = TRUE, #' savePredictions = "all", #' summaryFunction = twoClassSummary) #' #' set.seed(2863) #' mod <- train(Class ~ ., data = dat, #' method = "rda", #' tuneLength = 4, #' metric = "ROC", #' trControl = ctrl) #' #' resample_stats <- thresholder(mod, #' threshold = seq(.5, 1, by = 0.05), #' final = TRUE) #' #' ggplot(resample_stats, aes(x = prob_threshold, y = J)) + #' geom_point() #' ggplot(resample_stats, aes(x = prob_threshold, y = Dist)) + #' geom_point() #' ggplot(resample_stats, aes(x = prob_threshold, y = Sensitivity)) + #' geom_point() + #' geom_point(aes(y = Specificity), col = "red") #' } thresholder <- function(x, threshold, final = TRUE) { if(!inherits(x, "train")) stop("`x` should be an object of class 'train'", call. = FALSE) if (!x$control$classProbs) stop("`classProbs` must be TRUE in `trainControl`", call. = FALSE) if (is.null(threshold)) stop("Please supply probability threshold values.", call. = FALSE) if (any(threshold > 1 | threshold < 0)) stop("`threshold` should be on [0,1]", call. = FALSE) if (is.logical(x$control$savePredictions)) { if (!x$control$savePredictions) stop("`savePredictions` should be TRUE, 'all', or 'final'") } else { if (x$control$savePredictions == "none") stop("`savePredictions` should be TRUE, 'all', or 'final'") } if (length(levels(x$pred$obs)) > 2) stop("For two class problems only", call. = TRUE) disc <- c("pred", "rowIndex", x$levels[-1]) ## Expand the predicted values with the candidate values of ## the threshold pred_dat <- expand_preds(if (final) merge(x$pred, x$bestTune) else x$pred, threshold, disc) param <- c("Resample", names(x$bestTune), "prob_threshold") ## Based on the threshold, recode the predicted classes pred_dat <- ddply(pred_dat, .variables = param, recode) ## Compute statistics per threshold and tuning parameters pred_stats <- ddply(pred_dat, .variables = param, stats) ## Summarize over resamples pred_resamp <- ddply(pred_stats, .variables = param[-1], summ_stats) pred_resamp } expand_preds <- function(df, th, excl = NULL) { th <- unique(th) nth <- length(th) ndf <- nrow(df) if (!is.null(excl)) df <- df[, !(names(df) %in% excl), drop = FALSE] df <- df[rep(1:nrow(df), times = nth),] df$prob_threshold <- rep(th, each = ndf) df } recode <- function(dat) { lvl <- levels(dat$obs) dat$pred <- ifelse(dat[, lvl[1]] > dat$prob_threshold, lvl[1], lvl[2]) dat$pred <- factor(dat$pred, levels = lvl) dat } stats <- function(dat) { tab <- caret::confusionMatrix(dat$pred, dat$obs, positive = levels(dat$obs)[1]) res <- tab$byClass[c("Sensitivity", "Specificity")] res <- c(res, res["Sensitivity"] + res["Specificity"] - 1, sqrt((res["Sensitivity"] - 1) ^ 2 + (res["Specificity"] - 1) ^ 2)) names(res)[3:4] <- c("J", "Dist") res } stat_names <- c("Sensitivity", "Specificity", "J", "Dist") summ_stats <- function(x, cols = stat_names) colMeans(x[, cols, drop = FALSE]) caret/R/adaptive.R0000644000176200001440000014316513153613153013504 0ustar liggesusers## TODO: clean up code duplication? ## add na.action to all eval functions ## change multiplier and alpha to confidence #' @importFrom stats complete.cases #' @importFrom utils head #' @import foreach adaptiveWorkflow <- function(x, y, wts, info, method, ppOpts, ctrl, lev, metric, maximize, testing = FALSE, ...) { loadNamespace("caret") ppp <- list(options = ppOpts) ppp <- c(ppp, ctrl$preProcOptions) printed <- format(info$loop, digits = 4) colnames(printed) <- gsub("^\\.", "", colnames(printed)) ## no 632, oob or loo resampleIndex <- ctrl$index `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) pkgs <- c("methods", "caret") if(!is.null(method$library)) pkgs <- c(pkgs, method$library) init_index <- seq(along = resampleIndex)[1:(ctrl$adaptive$min-1)] extra_index <- seq(along = resampleIndex)[-(1:(ctrl$adaptive$min-1))] keep_pred <- isTRUE(ctrl$savePredictions) || ctrl$savePredictions %in% c("all", "final") init_result <- foreach(iter = seq(along = init_index), .combine = "c", .verbose = FALSE, .errorhandling = "stop") %:% foreach(parm = 1:nrow(info$loop), .combine = "c", .verbose = FALSE, .packages = pkgs, .errorhandling = "stop") %op% { testing <- FALSE if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) set.seed(ctrl$seeds[[iter]][parm]) loadNamespace("caret") lapply(pkgs, requireNamespaceQuietStop) if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter) modelIndex <- resampleIndex[[iter]] holdoutIndex <- ctrl$indexOut[[iter]] if(testing) cat("pre-model\n") if(is.null(info$submodels[[parm]]) || nrow(info$submodels[[parm]]) > 0) { submod <- info$submodels[[parm]] } else submod <- NULL mod <- try( createModel(x = x[modelIndex,,drop = FALSE ], y = y[modelIndex], wts = wts[modelIndex], method = method, tuneValue = info$loop[parm,,drop = FALSE], obsLevels = lev, pp = ppp, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...), silent = TRUE) if(class(mod)[1] != "try-error") { predicted <- try( predictionFunction(method = method, modelFit = mod$fit, newdata = x[holdoutIndex,, drop = FALSE], preProc = mod$preProc, param = submod), silent = TRUE) if(class(predicted)[1] == "try-error") { wrn <- paste(colnames(printed[parm,,drop = FALSE]), printed[parm,,drop = FALSE], sep = "=", collapse = ", ") wrn <- paste("predictions failed for ", names(resampleIndex)[iter], ": ", wrn, " ", as.character(predicted), sep = "") if(ctrl$verboseIter) cat(wrn, "\n") warning(wrn) rm(wrn) ## setup a dummy results with NA values for all predictions nPred <- length(holdoutIndex) if(!is.null(lev)) { predicted <- rep("", nPred) predicted[seq(along = predicted)] <- NA } else { predicted <- rep(NA, nPred) } if(!is.null(submod)) { tmp <- predicted predicted <- vector(mode = "list", length = nrow(info$submodels[[parm]]) + 1) for(i in seq(along = predicted)) predicted[[i]] <- tmp rm(tmp) } } } else { wrn <- paste(colnames(printed[parm,,drop = FALSE]), printed[parm,,drop = FALSE], sep = "=", collapse = ", ") wrn <- paste("model fit failed for ", names(resampleIndex)[iter], ": ", wrn, " ", as.character(mod), sep = "") if(ctrl$verboseIter) cat(wrn, "\n") warning(wrn) rm(wrn) ## setup a dummy results with NA values for all predictions nPred <- length(holdoutIndex) if(!is.null(lev)) { predicted <- rep("", nPred) predicted[seq(along = predicted)] <- NA } else { predicted <- rep(NA, nPred) } if(!is.null(submod)) { tmp <- predicted predicted <- vector(mode = "list", length = nrow(info$submodels[[parm]]) + 1) for(i in seq(along = predicted)) predicted[[i]] <- tmp rm(tmp) } } if(testing) print(head(predicted)) if(ctrl$classProbs) { if(class(mod)[1] != "try-error") { probValues <- probFunction(method = method, modelFit = mod$fit, newdata = x[holdoutIndex,, drop = FALSE], preProc = mod$preProc, param = submod) } else { probValues <- as.data.frame(matrix(NA, nrow = nPred, ncol = length(lev))) colnames(probValues) <- lev if(!is.null(submod)) { tmp <- probValues probValues <- vector(mode = "list", length = nrow(info$submodels[[parm]]) + 1) for(i in seq(along = probValues)) probValues[[i]] <- tmp rm(tmp) } } if(testing) print(head(probValues)) } ################################## if(!is.null(submod)) { ## merge the fixed and seq parameter values together allParam <- expandParameters(info$loop[parm,,drop = FALSE], info$submodels[[parm]]) allParam <- allParam[complete.cases(allParam),, drop = FALSE] ## collate the predicitons across all the sub-models predicted <- lapply(predicted, function(x, y, wts, lv) { if(!is.factor(x) & is.character(x)) x <- factor(as.character(x), levels = lv) out <- data.frame(pred = x, obs = y, stringsAsFactors = FALSE) if(!is.null(wts)) out$weights <- wts out }, y = y[holdoutIndex], wts = wts[holdoutIndex], lv = lev) if(testing) print(head(predicted)) ## same for the class probabilities if(ctrl$classProbs) { for(k in seq(along = predicted)) predicted[[k]] <- cbind(predicted[[k]], probValues[[k]]) } if(keep_pred) { tmpPred <- predicted for(modIndex in seq(along = tmpPred)) { tmpPred[[modIndex]]$rowIndex <- holdoutIndex tmpPred[[modIndex]] <- merge(tmpPred[[modIndex]], allParam[modIndex,,drop = FALSE], all = TRUE) } tmpPred <- rbind.fill(tmpPred) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ## get the performance for this resample for each sub-model thisResample <- lapply(predicted, ctrl$summaryFunction, lev = lev, model = method) if(testing) print(head(thisResample)) ## for classification, add the cell counts if(length(lev) > 1) { cells <- lapply(predicted, function(x) flatTable(x$pred, x$obs)) for(ind in seq(along = cells)) thisResample[[ind]] <- c(thisResample[[ind]], cells[[ind]]) } thisResample <- do.call("rbind", thisResample) thisResample <- cbind(allParam, thisResample) } else { if(is.factor(y)) predicted <- factor(as.character(predicted), levels = lev) tmp <- data.frame(pred = predicted, obs = y[holdoutIndex], stringsAsFactors = FALSE) ## Sometimes the code above does not coerce the first ## columnn to be named "pred" so force it names(tmp)[1] <- "pred" if(!is.null(wts)) tmp$weights <- wts[holdoutIndex] if(ctrl$classProbs) tmp <- cbind(tmp, probValues) if(keep_pred) { tmpPred <- tmp tmpPred$rowIndex <- holdoutIndex tmpPred <- merge(tmpPred, info$loop[parm,,drop = FALSE], all = TRUE) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ################################## thisResample <- ctrl$summaryFunction(tmp, lev = lev, model = method) ## if classification, get the confusion matrix if(length(lev) > 1) thisResample <- c(thisResample, flatTable(tmp$pred, tmp$obs)) thisResample <- as.data.frame(t(thisResample)) thisResample <- cbind(thisResample, info$loop[parm,,drop = FALSE]) } thisResample$Resample <- names(resampleIndex)[iter] if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter, FALSE) list(resamples = thisResample, pred = tmpPred) } ## end initial loop over resamples and models init_resamp <- rbind.fill(init_result[names(init_result) == "resamples"]) init_pred <- if(keep_pred) rbind.fill(init_result[names(init_result) == "pred"]) else NULL names(init_resamp) <- gsub("^\\.", "", names(init_resamp)) if(any(!complete.cases(init_resamp[,!grepl("^cell|Resample", colnames(init_resamp)),drop = FALSE]))) warning("There were missing values in resampled performance measures.") init_summary <- ddply(init_resamp[,!grepl("^cell|Resample", colnames(init_resamp)),drop = FALSE], ## TODO check this for seq models gsub("^\\.", "", colnames(info$loop)), MeanSD, exclude = gsub("^\\.", "", colnames(info$loop))) new_info <- info num_left <- Inf for(iter in ctrl$adaptive$min:length(resampleIndex)) { if(num_left > 1) { modelIndex <- resampleIndex[[iter]] holdoutIndex <- ctrl$indexOut[[iter]] printed <- format(new_info$loop, digits = 4) colnames(printed) <- gsub("^\\.", "", colnames(printed)) adapt_results <- foreach(parm = 1:nrow(new_info$loop), .combine = "c", .verbose = FALSE, .packages = pkgs) %op% { requireNamespaceQuietStop("methods") requireNamespaceQuietStop("caret") if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter, TRUE) if(is.null(new_info$submodels[[parm]]) || nrow(new_info$submodels[[parm]]) > 0) { submod <- new_info$submodels[[parm]] } else submod <- NULL mod <- try( createModel(x = x[modelIndex,,drop = FALSE ], y = y[modelIndex], wts = wts[modelIndex], method = method, tuneValue = new_info$loop[parm,,drop = FALSE], obsLevels = lev, pp = ppp, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...), silent = TRUE) if(class(mod)[1] != "try-error") { predicted <- try( predictionFunction(method = method, modelFit = mod$fit, newdata = x[holdoutIndex,, drop = FALSE], preProc = mod$preProc, param = submod), silent = TRUE) if(class(predicted)[1] == "try-error") { wrn <- paste(colnames(printed[parm,,drop = FALSE]), printed[parm,,drop = FALSE], sep = "=", collapse = ", ") wrn <- paste("predictions failed for ", names(resampleIndex)[iter], ": ", wrn, " ", as.character(predicted), sep = "") if(ctrl$verboseIter) cat(wrn, "\n") warning(wrn) rm(wrn) ## setup a dummy results with NA values for all predictions nPred <- length(holdoutIndex) if(!is.null(lev)) { predicted <- rep("", nPred) predicted[seq(along = predicted)] <- NA } else { predicted <- rep(NA, nPred) } if(!is.null(submod)) { tmp <- predicted predicted <- vector(mode = "list", length = nrow(new_info$submodels[[parm]]) + 1) for(i in seq(along = predicted)) predicted[[i]] <- tmp rm(tmp) } } } else { wrn <- paste(colnames(printed[parm,,drop = FALSE]), printed[parm,,drop = FALSE], sep = "=", collapse = ", ") wrn <- paste("model fit failed for ", names(resampleIndex)[iter], ": ", wrn, " ", as.character(mod), sep = "") if(ctrl$verboseIter) cat(wrn, "\n") warning(wrn) rm(wrn) ## setup a dummy results with NA values for all predictions nPred <- length(holdoutIndex) if(!is.null(lev)) { predicted <- rep("", nPred) predicted[seq(along = predicted)] <- NA } else { predicted <- rep(NA, nPred) } if(!is.null(submod)) { tmp <- predicted predicted <- vector(mode = "list", length = nrow(new_info$submodels[[parm]]) + 1) for(i in seq(along = predicted)) predicted[[i]] <- tmp rm(tmp) } } if(testing) print(head(predicted)) if(ctrl$classProbs) { if(class(mod)[1] != "try-error") { probValues <- probFunction(method = method, modelFit = mod$fit, newdata = x[holdoutIndex,, drop = FALSE], preProc = mod$preProc, param = submod) } else { probValues <- as.data.frame(matrix(NA, nrow = nPred, ncol = length(lev))) colnames(probValues) <- lev if(!is.null(submod)) { tmp <- probValues probValues <- vector(mode = "list", length = nrow(new_info$submodels[[parm]]) + 1) for(i in seq(along = probValues)) probValues[[i]] <- tmp rm(tmp) } } if(testing) print(head(probValues)) } ################################## if(!is.null(submod)) { ## merge the fixed and seq parameter values together allParam <- expandParameters(new_info$loop[parm,,drop = FALSE], submod) allParam <- allParam[complete.cases(allParam),, drop = FALSE] ## collate the predicitons across all the sub-models predicted <- lapply(predicted, function(x, y, wts, lv) { if(!is.factor(x) & is.character(x)) x <- factor(as.character(x), levels = lv) out <- data.frame(pred = x, obs = y, stringsAsFactors = FALSE) if(!is.null(wts)) out$weights <- wts out }, y = y[holdoutIndex], wts = wts[holdoutIndex], lv = lev) if(testing) print(head(predicted)) ## same for the class probabilities if(ctrl$classProbs) { for(k in seq(along = predicted)) predicted[[k]] <- cbind(predicted[[k]], probValues[[k]]) } if(keep_pred) { tmpPred <- predicted for(modIndex in seq(along = tmpPred)) { tmpPred[[modIndex]]$rowIndex <- holdoutIndex tmpPred[[modIndex]] <- merge(tmpPred[[modIndex]], allParam[modIndex,,drop = FALSE], all = TRUE) } tmpPred <- rbind.fill(tmpPred) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ## get the performance for this resample for each sub-model thisResample <- lapply(predicted, ctrl$summaryFunction, lev = lev, model = method) if(testing) print(head(thisResample)) ## for classification, add the cell counts if(length(lev) > 1) { cells <- lapply(predicted, function(x) flatTable(x$pred, x$obs)) for(ind in seq(along = cells)) thisResample[[ind]] <- c(thisResample[[ind]], cells[[ind]]) } thisResample <- do.call("rbind", thisResample) thisResample <- cbind(allParam, thisResample) } else { if(is.factor(y)) predicted <- factor(as.character(predicted), levels = lev) tmp <- data.frame(pred = predicted, obs = y[holdoutIndex], stringsAsFactors = FALSE) ## Sometimes the code above does not coerce the first ## columnn to be named "pred" so force it names(tmp)[1] <- "pred" if(!is.null(wts)) tmp$weights <- wts[holdoutIndex] if(ctrl$classProbs) tmp <- cbind(tmp, probValues) if(keep_pred) { tmpPred <- tmp tmpPred$rowIndex <- holdoutIndex tmpPred <- merge(tmpPred, new_info$loop[parm,,drop = FALSE], all = TRUE) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ################################## thisResample <- ctrl$summaryFunction(tmp, lev = lev, model = method) ## if classification, get the confusion matrix if(length(lev) > 1) thisResample <- c(thisResample, flatTable(tmp$pred, tmp$obs)) thisResample <- as.data.frame(t(thisResample)) thisResample <- cbind(thisResample, new_info$loop[parm,,drop = FALSE]) } thisResample$Resample <- names(resampleIndex)[iter] if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter, FALSE) list(resamples = thisResample, pred = tmpPred) } ## end initial loop over resamples and models } init_result <- c(init_result, adapt_results) rs <- do.call("rbind", init_result[names(init_result) == "resamples"]) current_mods <- get_id(rs, as.character(method$param$parameter)) if(iter > ctrl$adaptive$min) { latest <- do.call("rbind", adapt_results[names(adapt_results) == "resamples"]) latest <- latest[,as.character(method$param$parameter),drop = FALSE] latest <- latest[!duplicated(latest),,drop = FALSE] current_mods <- merge(current_mods, latest) } rs <- merge(rs, current_mods) if(iter == ctrl$adaptive$min+1) { rs <- filter_on_diff(rs, metric, cutoff = .001, maximize = maximize, verbose = ctrl$verboseIter) } if(ctrl$adaptive$method == "BT") { filtered_mods <- try(bt_eval(rs, metric = metric, maximize = maximize, alpha = ctrl$adaptive$alpha), silent = TRUE) } else { filtered_mods <- try(gls_eval(rs, metric = metric, maximize = maximize, alpha = ctrl$adaptive$alpha), silent = TRUE) } if(class(filtered_mods)[1] == "try-error") { if(ctrl$verboseIter) { cat("x parameter filtering failed:") print(filtered_mods) cat("\n") } filtered_mods <- current_mods } if(ctrl$verboseIter) { excluded <- unique(rs$model_id)[!(unique(rs$model_id) %in% filtered_mods)] if(length(excluded) > 0) { cat(paste("o", length(excluded), "eliminated;")) } else cat("o no models eliminated;", nrow(current_mods), ifelse(nrow(current_mods) > 1, "remain\n", "remains\n")) } current_mods <- current_mods[current_mods$model_id %in% filtered_mods,,drop = FALSE] if(iter == ctrl$adaptive$min) { last_mods <- current_mods } current_mods$model_id <- NULL num_left <- nrow(current_mods) if(ctrl$verboseIter && length(excluded) > 0) cat(num_left, ifelse(num_left > 1, "remain\n", "remains\n")) if(!is.null(method$loop)) { new_info <- method$loop(current_mods) } else new_info$loop <- current_mods last_iter <- iter if(num_left == 1) break } ## finish up last resamples if(ctrl$adaptive$complete && last_iter < length(ctrl$index)) { printed <- format(new_info$loop, digits = 4) colnames(printed) <- gsub("^\\.", "", colnames(printed)) final_index <- seq(along = resampleIndex)[(last_iter+1):length(ctrl$index)] final_result <- foreach(iter = final_index, .combine = "c", .verbose = FALSE) %:% foreach(parm = 1:nrow(new_info$loop), .combine = "c", .verbose = FALSE, .packages = pkgs) %op% { testing <- FALSE if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) set.seed(ctrl$seeds[[iter]][parm]) loadNamespace("caret") lapply(pkgs, requireNamespaceQuietStop) if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter) modelIndex <- resampleIndex[[iter]] holdoutIndex <- ctrl$indexOut[[iter]] if(testing) cat("pre-model\n") if(is.null(info$submodels[[parm]]) || nrow(info$submodels[[parm]]) > 0) { submod <- info$submodels[[parm]] } else submod <- NULL mod <- try( createModel(x = x[modelIndex,,drop = FALSE ], y = y[modelIndex], wts = wts[modelIndex], method = method, tuneValue = new_info$loop[parm,,drop = FALSE], obsLevels = lev, pp = ppp, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...), silent = TRUE) if(class(mod)[1] != "try-error") { predicted <- try( predictionFunction(method = method, modelFit = mod$fit, newdata = x[holdoutIndex,, drop = FALSE], preProc = mod$preProc, param = submod), silent = TRUE) if(class(predicted)[1] == "try-error") { wrn <- paste(colnames(printed[parm,,drop = FALSE]), printed[parm,,drop = FALSE], sep = "=", collapse = ", ") wrn <- paste("predictions failed for ", names(resampleIndex)[iter], ": ", wrn, " ", as.character(predicted), sep = "") if(ctrl$verboseIter) cat(wrn, "\n") warning(wrn) rm(wrn) ## setup a dummy results with NA values for all predictions nPred <- length(holdoutIndex) if(!is.null(lev)) { predicted <- rep("", nPred) predicted[seq(along = predicted)] <- NA } else { predicted <- rep(NA, nPred) } if(!is.null(submod)) { tmp <- predicted predicted <- vector(mode = "list", length = nrow(info$submodels[[parm]]) + 1) for(i in seq(along = predicted)) predicted[[i]] <- tmp rm(tmp) } } } else { wrn <- paste(colnames(printed[parm,,drop = FALSE]), printed[parm,,drop = FALSE], sep = "=", collapse = ", ") wrn <- paste("model fit failed for ", names(resampleIndex)[iter], ": ", wrn, " ", as.character(mod), sep = "") if(ctrl$verboseIter) cat(wrn, "\n") warning(wrn) rm(wrn) ## setup a dummy results with NA values for all predictions nPred <- length(holdoutIndex) if(!is.null(lev)) { predicted <- rep("", nPred) predicted[seq(along = predicted)] <- NA } else { predicted <- rep(NA, nPred) } if(!is.null(submod)) { tmp <- predicted predicted <- vector(mode = "list", length = nrow(info$submodels[[parm]]) + 1) for(i in seq(along = predicted)) predicted[[i]] <- tmp rm(tmp) } } if(testing) print(head(predicted)) if(ctrl$classProbs) { if(class(mod)[1] != "try-error") { probValues <- probFunction(method = method, modelFit = mod$fit, newdata = x[holdoutIndex,, drop = FALSE], preProc = mod$preProc, param = submod) } else { probValues <- as.data.frame(matrix(NA, nrow = nPred, ncol = length(lev))) colnames(probValues) <- lev if(!is.null(submod)) { tmp <- probValues probValues <- vector(mode = "list", length = nrow(info$submodels[[parm]]) + 1) for(i in seq(along = probValues)) probValues[[i]] <- tmp rm(tmp) } } if(testing) print(head(probValues)) } ################################## if(!is.null(submod)) { ## merge the fixed and seq parameter values together allParam <- expandParameters(new_info$loop[parm,,drop = FALSE], new_info$submodels[[parm]]) allParam <- allParam[complete.cases(allParam),, drop = FALSE] ## collate the predicitons across all the sub-models predicted <- lapply(predicted, function(x, y, wts, lv) { if(!is.factor(x) & is.character(x)) x <- factor(as.character(x), levels = lv) out <- data.frame(pred = x, obs = y, stringsAsFactors = FALSE) if(!is.null(wts)) out$weights <- wts out }, y = y[holdoutIndex], wts = wts[holdoutIndex], lv = lev) if(testing) print(head(predicted)) ## same for the class probabilities if(ctrl$classProbs) { for(k in seq(along = predicted)) predicted[[k]] <- cbind(predicted[[k]], probValues[[k]]) } if(keep_pred) { tmpPred <- predicted for(modIndex in seq(along = tmpPred)) { tmpPred[[modIndex]]$rowIndex <- holdoutIndex tmpPred[[modIndex]] <- merge(tmpPred[[modIndex]], allParam[modIndex,,drop = FALSE], all = TRUE) } tmpPred <- rbind.fill(tmpPred) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ## get the performance for this resample for each sub-model thisResample <- lapply(predicted, ctrl$summaryFunction, lev = lev, model = method) if(testing) print(head(thisResample)) ## for classification, add the cell counts if(length(lev) > 1) { cells <- lapply(predicted, function(x) flatTable(x$pred, x$obs)) for(ind in seq(along = cells)) thisResample[[ind]] <- c(thisResample[[ind]], cells[[ind]]) } thisResample <- do.call("rbind", thisResample) thisResample <- cbind(allParam, thisResample) } else { if(is.factor(y)) predicted <- factor(as.character(predicted), levels = lev) tmp <- data.frame(pred = predicted, obs = y[holdoutIndex], stringsAsFactors = FALSE) ## Sometimes the code above does not coerce the first ## columnn to be named "pred" so force it names(tmp)[1] <- "pred" if(!is.null(wts)) tmp$weights <- wts[holdoutIndex] if(ctrl$classProbs) tmp <- cbind(tmp, probValues) if(keep_pred) { tmpPred <- tmp tmpPred$rowIndex <- holdoutIndex tmpPred <- merge(tmpPred, new_info$loop[parm,,drop = FALSE], all = TRUE) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ################################## thisResample <- ctrl$summaryFunction(tmp, lev = lev, model = method) ## if classification, get the confusion matrix if(length(lev) > 1) thisResample <- c(thisResample, flatTable(tmp$pred, tmp$obs)) thisResample <- as.data.frame(t(thisResample)) thisResample <- cbind(thisResample, new_info$loop[parm,,drop = FALSE]) } thisResample$Resample <- names(resampleIndex)[iter] if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter, FALSE) list(resamples = thisResample, pred = tmpPred) } ## end final loop to finish cleanup resamples and models init_result <- c(init_result, final_result) } resamples <- rbind.fill(init_result[names(init_result) == "resamples"]) pred <- if(keep_pred) rbind.fill(init_result[names(init_result) == "pred"]) else NULL names(resamples) <- gsub("^\\.", "", names(resamples)) if(any(!complete.cases(resamples[,!grepl("^cell|Resample", colnames(resamples)),drop = FALSE]))) warning("There were missing values in resampled performance measures.") out <- ddply(resamples[,!grepl("^cell|Resample", colnames(resamples)),drop = FALSE], ## TODO check this for seq models gsub("^\\.", "", colnames(info$loop)), MeanSD, exclude = gsub("^\\.", "", colnames(info$loop))) num_resamp <- ddply(resamples, gsub("^\\.", "", colnames(info$loop)), function(x) c(.B = nrow(x))) out <- merge(out, num_resamp) list(performance = out, resamples = resamples, predictions = if(keep_pred) pred else NULL) } #' @importFrom stats reshape long2wide <- function(x, metric) { x2 <- reshape(x[, c(metric, "model_id", "Resample")], idvar = "Resample", timevar = "model_id", v.names = metric, direction = "wide") colnames(x2) <- gsub(paste(metric, "\\.", sep = ""), "", colnames(x2)) x2[order(x2$Resample), c("Resample", sort(as.character(unique(x$model_id))))] } get_id <- function(x, param) { params <- x[,param,drop=FALSE] params <- params[!duplicated(params),,drop=FALSE] params$model_id <- paste("m", gsub(" ", "0", format(1:nrow(params))), sep = "") rownames(params) <- NULL params } #' @importFrom stats qnorm bt_eval <- function(rs, metric, maximize, alpha = 0.05) { if (!requireNamespace("BradleyTerry2")) stop("BradleyTerry2 package missing") se_thresh <- 100 constant <- qnorm(1 - alpha) rs <- rs[order(rs$Resample, rs$model_id),] scores <- ddply(rs, .(Resample), get_scores, maximize = maximize, metric = metric) scores <- ddply(scores, .(player1, player2), function(x) c(win1 = sum(x$win1), win2 = sum(x$win2))) if(length(unique(rs$Resample)) >= 5) { tmp_scores <- try(skunked(scores), silent = TRUE) if(class(tmp_scores)[1] != "try-error") scores <- tmp_scores scores } best_mod <- ddply(rs, .(model_id), function(x, metric) mean(x[, metric]), metric = metric) best_mod <- if(maximize) best_mod$model_id[which.max(best_mod$V1)] else best_mod$model_id[which.min(best_mod$V1)] btModel <- BradleyTerry2::BTm(cbind(win1, win2), player1, player2, data = scores, refcat = best_mod) btCoef <- summary(btModel)$coef ## Recent versions of the BradleyTerry2 package tag on some dots in the names rownames(btCoef) <- gsub("^\\.\\.", "", rownames(btCoef)) upperBound <- btCoef[, "Estimate"] + constant*btCoef[, "Std. Error"] if(any(btCoef[, "Std. Error"] > se_thresh)) { ## These players either are uniformly dominated (='dom') or dominating dom1 <- btCoef[, "Std. Error"] > se_thresh dom2 <- if(maximize) btCoef[, "Estimate"] <= 0 else btCoef[, "Estimate"] >= 0 dom <- dom1 & dom2 } else dom <- rep(FALSE, length(upperBound)) bound <- upperBound >= 0 keepers <- names(upperBound)[bound & !dom] unique(c(best_mod, keepers)) } get_scores <- function(x, maximize = NULL, metric = NULL) { if (!requireNamespace("BradleyTerry2")) stop("BradleyTerry2 package missing") delta <- outer(x[,metric], x[,metric], "-") tied <- ifelse(delta == 0, 1, 0)*.5 diag(tied) <- 0 binary <- if(maximize) ifelse(delta > 0, 1, 0) else ifelse(delta > 0, 0, 1) binary <- binary + tied diag(binary) <- 0 rownames(binary) <- colnames(binary) <- x$model_id BradleyTerry2::countsToBinomial(as.table(binary)) } ## check to see if there are any models/players that never won a game skunked <- function(scores, verbose = TRUE) { p1 <- ddply(scores, .(player1), function(x) sum(x$win1)) p2 <- ddply(scores, .(player2), function(x) sum(x$win2)) names(p1)[1] <- names(p2)[1] <- "playa" by_player <- ddply(rbind(p1, p2), .(playa), function(x) c(wins = sum(x$V1))) if(any(by_player$wins < 1)) { skunked <- as.character(by_player$playa[by_player$wins < 1]) if(verbose) cat("o", sum(by_player$wins < 1), ifelse(sum(by_player$wins < 1) > 1, "models were", "model was"), "skunked\n") scores <- subset(scores, !(player1 %in% skunked)) scores <- subset(scores, !(player2 %in% skunked)) levs <- sort(unique(c(as.character(scores$player1), as.character(scores$player2)))) scores$player1 <- factor(as.character(scores$player1), levels = levs) scores$player2 <- factor(as.character(scores$player2), levels = levs) } scores } #' @importFrom stats cor t.test na.omit gls_eval <- function(x, metric, maximize, alpha = 0.05) { means <- ddply(x[, c(metric, "model_id")], .(model_id), function(x, met) c(mean = mean(x[, met])), met = metric) means <- if(maximize) means[order(-means$mean),] else means[order(means$mean),] levs <- as.character(means$model_id) bl <- levs[1] bldat <- subset(x, model_id == bl)[, c("Resample", metric)] colnames(bldat)[2] <- ".baseline" x2 <- merge(bldat, x[, c("Resample", "model_id", metric)]) x2$value <- if(maximize) x2$.baseline - x2[, metric] else x2[, metric] - x2$.baseline x2 <- subset(x2, model_id != bl) x2$model_id <- factor(x2$model_id, levels = levs[-1]) if(length(levs) > 2) { gls_fit <- try(gls(value ~ model_id - 1, data = x2, corCompSymm(form = ~ 1 | Resample), na.action = na.omit), silent = TRUE) if(class(gls_fit)[1] != "try-error") { lvl2 <- 1 - (2*alpha) ## convert to one sided ci <- intervals(gls_fit, which = "coef", level = lvl2)$coef[,1] keepers <- ci <= 0 if(any(is.na(keepers))) keepers[is.na(keepers)] <- TRUE keepers <- names(ci)[keepers] keepers <- gsub("model_id", "", keepers) } else keepers <- levs } else { ttest <- t.test(x2$value, alternative = "greater")$p.value keepers <- if(!is.na(ttest) && ttest >= alpha) levs[-1] else NULL } unique(c(bl, keepers)) } #' @importFrom stats4 coef #' @importFrom stats t.test lm pt seq_eval <- function(x, metric, maximize, alpha = 0.05) { means <- ddply(x[, c(metric, "model_id")], .(model_id), function(x, met) c(mean = mean(x[, met])), met = metric) means <- if(maximize) means[order(-means$mean),] else means[order(means$mean),] levs <- as.character(means$model_id) bl <- levs[1] bldat <- subset(x, model_id == bl)[, c("Resample", metric)] colnames(bldat)[2] <- ".baseline" x2 <- merge(bldat, x[, c("Resample", "model_id", metric)]) x2$value <- if(maximize) x2$.baseline - x2[, metric] else x2[, metric] - x2$.baseline x2 <- subset(x2, model_id != bl) x2$model_id <- factor(x2$model_id, levels = levs[-1]) if(length(levs) > 2) { fit <- lm(value ~ . - 1, data = x2[, c("model_id", "value")]) fit <- summary(fit) pvals <- pt(coef(fit)[, 3], fit$df[2], lower.tail = FALSE) names(pvals) <- gsub("model_id", "", names(pvals)) keepers <- pvals >= alpha if(any(is.na(keepers))) keepers[is.na(keepers)] <- TRUE keepers <- names(pvals)[keepers] keepers <- gsub("model_id", "", keepers) } else { ttest <- t.test(x2$value, alternative = "greater")$p.value keepers <- if(!is.na(ttest) && ttest >= alpha) levs[-1] else NULL } unique(c(bl, keepers)) } retrospective <- function(x, B = 5, method = "BT", alpha = 0.05) { rs <- x$resample if(!is.factor(rs$Resample)) rs$Resample <- factor(rs$Resample) rs <- subset(rs, as.numeric(Resample) <= B) current_mods <- get_id(rs, as.character(x$modelInfo$param$parameter)) # current_mods <- merge(current_mods, new_loop) rs <- merge(rs, current_mods) if(method == "BT") { filtered_mods <- try(bt_eval(rs, metric = x$metric, maximize = x$maximize, alpha = alpha), silent = TRUE) } else { filtered_mods <- try(gls_eval(rs, metric = x$metric, maximize = x$maximize, alpha = alpha), silent = TRUE) } list(models = filtered_mods, mods = subset(current_mods, model_id %in% filtered_mods), long = rs, wide = long2wide(rs, x$metric)) } cccmat <- function(dat) { p <- ncol(dat) out <- matrix(1, ncol = p, nrow = p) for(i in 1:p) { for(j in i:p) { if(i > j) { tmp <- ccc(dat[,i], dat[,j]) out[i, j] <- out[j, i] <- tmp } } } out[lower.tri(out)] <- out[upper.tri(out)] colnames(out) <- rownames(out) <- colnames(dat) out } #' @importFrom stats cov ccc <- function(x, y) { covm <- cov(cbind(x, y), use = "pairwise.complete.obs") mnx <- mean(x, na.rm = TRUE) mny <- mean(y, na.rm = TRUE) 2*covm[1,2]/(covm[1,1] + covm[2,2] + (mnx - mny)^2) } #' @importFrom stats sd diffmat <- function(dat) { p <- ncol(dat) out <- matrix(NA, ncol = p, nrow = p) for(i in 1:p) { for(j in i:p) { if(i < j) { x <- dat[,i] - dat[,j] tmpm <- abs(mean(x, na.rm = TRUE)) tmps <- sd(x, na.rm = TRUE) out[i, j] <- out[j, i] <- if(tmps < .Machine$double.eps^0.5) 0 else tmpm/tmps } } } out[lower.tri(out)] <- out[upper.tri(out)] colnames(out) <- rownames(out) <- colnames(dat) out } filter_on_diff <- function(dat, metric, cutoff = 0.01, maximize = TRUE, verbose = FALSE) { x <- long2wide(x = dat, metric = metric) mns <- colMeans(x[, -1]) if(!maximize) mns <- -mns x <- diffmat(x[, -1]) tmp <- x diag(tmp) <- Inf if(!any(tmp < cutoff)) return(dat) varnum <- dim(x)[1] originalOrder <- 1:varnum averageDiff <- function(x) mean(x, na.rm = TRUE) tmp <- x diag(tmp) <- NA maxAbsCorOrder <- order(apply(tmp, 2, averageDiff), decreasing = TRUE) x <- x[maxAbsCorOrder, maxAbsCorOrder] mns <- mns[maxAbsCorOrder] newOrder <- originalOrder[maxAbsCorOrder] deletecol <- 0 for (i in 1:(varnum - 1)) { for (j in (i + 1):varnum) { if (!any(i == deletecol) & !any(j == deletecol)) { if (abs(x[i, j]) < cutoff) { if (mns[i] < mns[j]) { deletecol <- unique(c(deletecol, i)) } else { deletecol <- unique(c(deletecol, j)) } } } } } deletecol <- deletecol[deletecol != 0] if(length(deletecol) > 0) { dumped <- colnames(x)[newOrder[deletecol]] if (verbose) cat(paste("o", length(deletecol), ifelse(length(deletecol) > 1, "models of", "model of"), varnum, ifelse(length(deletecol) > 1, "were", "was"), "eliminated due to linear dependencies\n")) dat <- subset(dat, !(model_id %in% dumped)) } dat } filter_on_corr <- function(dat, metric, cutoff, verbose = FALSE) { x <- long2wide(x = dat, metric = metric) # x <- cor(x[, -1], use = "pairwise.complete.obs") x <- cccmat(x[, -1]) varnum <- dim(x)[1] if (!isTRUE(all.equal(x, t(x)))) stop("correlation matrix is not symmetric") if (varnum == 1) stop("only one variable given") x <- abs(x) originalOrder <- 1:varnum averageCorr <- function(x) mean(x, na.rm = TRUE) tmp <- x diag(tmp) <- NA maxAbsCorOrder <- order(apply(tmp, 2, averageCorr), decreasing = TRUE) x <- x[maxAbsCorOrder, maxAbsCorOrder] newOrder <- originalOrder[maxAbsCorOrder] deletecol <- 0 for (i in 1:(varnum - 1)) { for (j in (i + 1):varnum) { if (!any(i == deletecol) & !any(j == deletecol)) { if (abs(x[i, j]) > cutoff) { if (mean(x[i, -i]) > mean(x[-j, j])) { deletecol <- unique(c(deletecol, i)) } else { deletecol <- unique(c(deletecol, j)) } } } } } deletecol <- deletecol[deletecol != 0] if(length(deletecol) > 0) { dumped <- colnames(x)[newOrder[deletecol]] if (verbose) cat(paste("o", length(deletecol), ifelse(length(deletecol) > 1, "models were", "model was"), "eliminated due to linear dependencies\n")) dat <- subset(dat, !(model_id %in% dumped)) } dat } caret/R/maxDissim.R0000644000176200001440000001342313153613153013636 0ustar liggesusers#' Maximum Dissimilarity Sampling #' #' Functions to create a sub-sample by maximizing the dissimilarity between new #' samples and the existing subset. #' #' Given an initial set of m samples and a larger pool of n samples, this #' function iteratively adds points to the smaller set by finding with of the n #' samples is most dissimilar to the initial set. The argument \code{obj} #' measures the overall dissimilarity between the initial set and a candidate #' point. For example, maximizing the minimum or the sum of the m #' dissimilarities are two common approaches. #' #' This algorithm tends to select points on the edge of the data mainstream and #' will reliably select outliers. To select more samples towards the interior #' of the data set, set \code{randomFrac} to be small (see the examples below). #' #' @aliases maxDissim minDiss sumDiss #' @param a a matrix or data frame of samples to start #' @param b a matrix or data frame of samples to sample from #' @param n the size of the sub-sample #' @param obj an objective function to measure overall dissimilarity #' @param useNames a logical: should the function return the row names (as #' opposed ot the row index) #' @param randomFrac a number in (0, 1] that can be used to sub-sample from the #' remaining candidate values #' @param verbose a logical; should each step be printed? #' @param \dots optional arguments to pass to dist #' @param u a vector of dissimilarities #' @return a vector of integers or row names (depending on \code{useNames}) #' corresponding to the rows of \code{b} that comprise the sub-sample. #' @author Max Kuhn \email{max.kuhn@@pfizer.com} #' @seealso \code{\link{dist}} #' @references Willett, P. (1999), "Dissimilarity-Based Algorithms for #' Selecting Structurally Diverse Sets of Compounds," \emph{Journal of #' Computational Biology}, 6, 447-457. #' @keywords utilities #' @examples #' #' #' example <- function(pct = 1, obj = minDiss, ...) #' { #' tmp <- matrix(rnorm(200 * 2), nrow = 200) #' #' ## start with 15 data points #' start <- sample(1:dim(tmp)[1], 15) #' base <- tmp[start,] #' pool <- tmp[-start,] #' #' ## select 9 for addition #' newSamp <- maxDissim( #' base, pool, #' n = 9, #' randomFrac = pct, obj = obj, ...) #' #' allSamp <- c(start, newSamp) #' #' plot( #' tmp[-newSamp,], #' xlim = extendrange(tmp[,1]), ylim = extendrange(tmp[,2]), #' col = "darkgrey", #' xlab = "variable 1", ylab = "variable 2") #' points(base, pch = 16, cex = .7) #' #' for(i in seq(along = newSamp)) #' points( #' pool[newSamp[i],1], #' pool[newSamp[i],2], #' pch = paste(i), col = "darkred") #' } #' #' par(mfrow=c(2,2)) #' #' set.seed(414) #' example(1, minDiss) #' title("No Random Sampling, Min Score") #' #' set.seed(414) #' example(.1, minDiss) #' title("10 Pct Random Sampling, Min Score") #' #' set.seed(414) #' example(1, sumDiss) #' title("No Random Sampling, Sum Score") #' #' set.seed(414) #' example(.1, sumDiss) #' title("10 Pct Random Sampling, Sum Score") #' #' @export maxDissim maxDissim <- function(a, b, n = 2, obj = minDiss, useNames = FALSE, randomFrac = 1, verbose = FALSE, ...) { loadNamespace("proxy") if(nrow(b) < 2) stop("there must be at least 2 samples in b") if(ncol(a) != ncol(b)) stop("a and b must have the same number of columns") if(nrow(b) < n) stop("n must be less than nrow(b)") if(randomFrac > 1 | randomFrac <= 0) stop("randomFrac must be in (0, 1]") if(useNames) { if(is.null(rownames(b))) { warning("Cannot use rownames; swithcing to indices") free <- 1:nrow(b) } else free <- rownames(b) } else free <- 1:nrow(b) inSubset <- NULL newA <- a if(verbose) cat(" adding:") for(i in 1:n) { pool <- if(randomFrac == 1) free else sample(free, max(2, floor(randomFrac * length(free)))) if(verbose) { cat("\nIter", i, "\n") cat("Number of candidates:", length(free), "\n") cat("Sampling from", length(pool), "samples\n") } diss <- proxy::dist(newA, b[pool,, drop = FALSE], ...) bNames <- colnames(b)[pool] tmp <- pool[which.max(apply(diss, 2, obj))] if(verbose)cat("new sample:", tmp, "\n") inSubset <- c(inSubset, tmp) newA <- rbind(newA, b[tmp,, drop = FALSE]) free <- free[!(free %in% inSubset)] } inSubset } #' @rdname maxDissim #' @export minDiss <- function(u) min(u, na.rm = TRUE) #' @rdname maxDissim #' @export sumDiss <- function(u) sum(u, na.rm = TRUE) splitter <- function(x, p = .8, start = NULL, ...) { n <- nrow(x) if(is.null(start)) start <- sample(1:n, 1) n2 <- n - length(start) m <- ceiling(p * n2) pool <- maxDissim(x[ start,,drop = FALSE], x[-start,,drop = FALSE], n = m, ...) c(start, pool) } splitByDissim <- function(x, p = .8, y = NULL, start = NULL, ...) { if(!is.data.frame(x)) x <- as.data.frame(x) if(!is.null(y)) { if(!is.factor(y)) y <- as.factor(y) lvl <- levels(y) ind <- split(seq(along = y), y) ind2 <- lapply(ind, function(x) seq(along = x)) start2 <- lapply(ind, function(x, start) which(x %in% start), start = start) for(i in seq(along = lvl)) { tmp <- splitter(x[ind[[i]],, drop = FALSE], p = p, start = start2[[i]], ...) tmp2 <- ind[[i]][which(ind2[[i]] %in% tmp)] out <- if(i == 1) tmp2 else c(tmp2, out) } } else { out <- splitter(x, p = p, start = start, ...) } out } caret/R/heldout.R0000644000176200001440000001661113153613153013346 0ustar liggesusers################################################################### ## ## Todo: ## X. Make an argument for what to save ("prediction", "probabilities", "both") ## X. Adapt code to average predictions/probabilities ## 1. Use train/rfe/sbf saved prediction function to make predictions ## for the ensemble. ## X. Change `nrow` to an average of `complete.cases` ## X. Detect class prob column names and drop off the last one ## X. Breakout the 'n' code so that it isn't converted to character ## X. Call it "oob" or "oob_pred" ## 2. Make `oob_pred.list` smaller and create a new function to ## do the real work ## 3. TEST TEST TEST ################################################################### ## oob_pred <- function (x, ...) UseMethod("oob_pred") #' @export oob_pred.train <- function(x, best = TRUE, average = TRUE) { if(is.null(x$pred)) stop("re-fit the model using 'trainControl(savePredictions=TRUE)'") prd <- x$pred pname <- as.character(x$modelInfo$parameters$parameter) if(best) { prd <- merge(prd, x$bestTune) prd <- prd[, !(colnames(prd) %in% pname)] } bycol <- "rowIndex" if(!best) bycol <- c(bycol, pname) if(average) prd <- get_averages(x, prd, bycol) if(x$modelType == "Classification") { lev <- train_lev(x) if(!is.null(lev)) { if(is.character(prd$obs)) prd$obs <- factor(prd$obs, levels = lev) if(is.character(prd$pred)) prd$pred <- factor(prd$pred, levels = lev) } } prd } #' @export oob_pred.rfe <- function(x, best = TRUE, average = TRUE) { if(is.null(x$pred)) stop("re-fit the model using 'rfeControl(saveDetails=TRUE)'") prd <- x$pred if(best) { prd <- subset(prd, Variables == x$bestSubset) prd <- prd[, colnames(prd) != "Variables"] bycol <- "rowIndex" } else bycol <- c("rowIndex", "Variables") ## Temp kludge since I think there is an issue with ## how `rfe` saves the data prd <- prd[!duplicated(prd),] if(average) prd <- get_averages(x, prd, bycol) if(is.character(prd$obs) && !is.null(x$obsLevels)) prd$obs <- factor(prd$obs, levels = x$obsLevels) if(is.character(prd$pred) && !is.null(x$obsLevels)) prd$pred <- factor(prd$pred, levels = x$obsLevels) prd } #' @export oob_pred.sbf <- function(x, average = TRUE) { if(is.null(x$pred)) stop("re-fit the model using 'rfeControl(saveDetails=TRUE)'") prd <- x$pred[names(x$pred) == "predictions"] prd <- rbind.fill(prd) prd <- prd[!duplicated(prd),] if(average) prd <- get_averages(x, prd, bycol = "rowIndex") if(is.character(prd$obs) && !is.null(x$obsLevels)) prd$obs <- factor(prd$obs, levels = x$obsLevels) if(is.character(prd$pred) && !is.null(x$obsLevels)) prd$pred <- factor(prd$pred, levels = x$obsLevels) prd } #' @importFrom stats reshape #' @export oob_pred.list <- function(x, direction = "wide", what = "both", ...) { num <- length(x) oob <- lapply(x, oob_pred, ...) ## check column names and get those common to everything cnames <- lapply(oob, colnames) cnames <- table(unlist(cnames)) if(any(cnames < num)) { cnames <- names(cnames[cnames == num]) for(i in 1:num) oob[[i]] <- oob[[i]][, cnames] } nms <- names(oob) if(is.null(nms)) nms <- well_numbered("Model", length(oob)) for(i in seq(along = nms)) oob[[i]]$.label <- nms[i] oob <- rbind.fill(oob) if(length(table(table(oob$n))) > 1) stop("Some averages have different sample sizes than others") if(direction == "wide") { vert_names <- colnames(oob) vert_names <- vert_names[!(vert_names %in% c("rowIndex", "n", "obs", ".label"))] oob <- reshape(oob, direction = "wide", v.names = vert_names, idvar = c("rowIndex", "obs", "n"), timevar = ".label") vert_names <- vert_names[vert_names != "pred"] exclude <- vert_names[length(vert_names)] oob <- oob[, !grepl(paste0("^", exclude, "\\."), names(oob))] if(!is.null(what) && !("both" %in% what)) { if(!is.null(what) && !("pred" %in% what)) oob <- oob[, !grepl("^pred\\.", names(oob))] if(!is.null(what) && !("prob" %in% what)) { for(i in vert_names) oob <- oob[, !grepl(paste0("^", i, "\\."), names(oob))] } } } oob } ################################################################### ## get_averages <- function (x, ...) UseMethod("get_averages") #' @importFrom stats complete.cases get_averages.train <- function(x, prd, bycol = "rowIndex") { if("Regression" %in% x$modelType) { out <- ddply(prd, bycol, function(x) c(colMeans(x[, c("pred", "obs")]))) } else { out <- ddply(prd, bycol, function(x) c(pred = char_mode(x$pred), obs = as.character(x$obs)[1])) if(x$control$classProbs) { lev <- train_lev(x) cprobs <- ddply(prd, bycol, function(x, lev) c(colMeans(x[, lev])), lev = lev) out <- merge(out, cprobs) } } n <- ddply(prd, bycol, function(x) c(n = sum(complete.cases(x)))) out <- merge(out, n) out } #' @importFrom stats complete.cases get_averages.rfe <- function(x, prd, bycol = "rowIndex") { if(is.null(x$obsLevels)) { out <- ddply(prd, bycol, function(x) c(colMeans(x[, c("pred", "obs")]))) } else { out <- ddply(prd, bycol, function(x) c(pred = char_mode(x$pred), obs = as.character(x$obs)[1])) if(all(x$obsLevels %in% colnames(prd))) { lev <- x$obsLevels cprobs <- ddply(prd, bycol, function(x, lev) c(colMeans(x[, lev])), lev = lev) out <- merge(out, cprobs) } } n <- ddply(prd, bycol, function(x) c(n = sum(complete.cases(x)))) out <- merge(out, n) out } #' @importFrom stats complete.cases get_averages.sbf <- function(x, prd, bycol = "rowIndex") { if(is.null(x$obsLevels)) { out <- ddply(prd, bycol, function(x) c(colMeans(x[, c("pred", "obs")]))) } else { out <- ddply(prd, bycol, function(x) c(pred = char_mode(x$pred), obs = as.character(x$obs)[1])) if(all(x$obsLevels %in% colnames(prd))) { lev <- x$obsLevels cprobs <- ddply(prd, bycol, function(x, lev) c(colMeans(x[, lev])), lev = lev) out <- merge(out, cprobs) } } n <- ddply(prd, bycol, function(x) c(n = sum(complete.cases(x)))) out <- merge(out, n) out } ################################################################### ## #' @importFrom stats complete.cases char_mode <- function(x, random = TRUE, na.rm = FALSE) { if(na.rm) x <- x[complete.cases(x)] tab <- table(x) tab <- tab[tab == max(tab)] tab <- if(length(tab) > 1 & random) sample(tab, 1) else tab[1] as.vector(names(tab)) } train_lev <- function(x) { if(x$modelType == "Classification") { if(!is.null(x$modelInfo$levels)) { lev <- x$modelInfo$levels(x$finalModel) } else { lev <- if(!isS4(x)) x$finalModel$obsLevel else unique(x$pred$obs) } } else lev <- NULL lev } #' @importFrom stats cor corr_mat <- function (object, metric = object$metrics, ...) { dat <- object$values[, grepl(paste0("~", metric[1]), colnames(object$values))] colnames(dat) <- gsub(paste0("~", metric[1]), "", colnames(dat)) dat <- cor(dat, ...) dat } caret/R/probFunction.R0000644000176200001440000000106713153613153014351 0ustar liggesusers#' @rdname caret-internal #' @export probFunction <- function(method, modelFit, newdata = NULL, preProc = NULL, param = NULL) { if(!is.null(newdata) && !is.null(preProc)) newdata <- predict(preProc, newdata) obsLevels <- levels(modelFit) classProb <- method$prob(modelFit = modelFit, newdata = newdata, submodels = param) if(!is.data.frame(classProb) & is.null(param)) { classProb <- as.data.frame(classProb) if(!is.null(obsLevels)) classprob <- classProb[, obsLevels] } classProb } caret/R/twoClassSim.R0000644000176200001440000002501313173655625014162 0ustar liggesusers#' Simulation Functions #' #' This function simulates regression and classification data with truly #' important predictors and irrelevant predictions. #' #' The first function (\code{twoClassSim}) generates two class data. The data #' are simulated in different sets. First, two multivariate normal predictors #' (denoted here as \code{A} and \code{B}) are created with a correlation our #' about 0.65. They change the log-odds using main effects and an interaction: #' #' \preformatted{ intercept - 4A + 4B + 2AB } #' #' The intercept is a parameter for the simulation and can be used to control #' the amount of class imbalance. #' #' The second set of effects are linear with coefficients that alternate signs #' and have values between 2.5 and 0.025. For example, if there were six #' predictors in this set, their contribution to the log-odds would be #' #' \preformatted{ -2.50C + 2.05D -1.60E + 1.15F -0.70G + 0.25H } #' #' The third set is a nonlinear function of a single predictor ranging between #' [0, 1] called \code{J} here: #' #' \preformatted{ (J^3) + 2exp(-6(J-0.3)^2) } #' #' The fourth set of informative predictors are copied from one of Friedman's #' systems and use two more predictors (\code{K} and \code{L}): #' #' \preformatted{ 2sin(KL) } #' #' All of these effects are added up to model the log-odds. #' #' When \code{ordinal = FALSE}, this is used to calculate the probability of a #' sample being in the first class and a random uniform number is used to #' actually make the assignment of the actual class. To mislabel the data, the #' probability is reversed (i.e. \code{p = 1 - p}) before the random number #' generation. #' #' For \code{ordinal = TRUE}, random normal errors are added to the linear #' predictor (i.e. prior to computing the probability) and cut points (0.00, #' 0.20, 0.75, and 1.00) are used to bin the probabilities into classes #' \code{"low"}, \code{"med"}, and \code{"high"} (despite the function's name). #' #' The remaining functions simulate regression data sets. \code{LPH07_1} and #' \code{LPH07_2} are from van der Laan et al. (2007). The first function uses #' random Bernoulli variables that have a 40\% probability of being a value of #' 1. The true regression equation is: #' #' \preformatted{ 2*w_1*w_10 + 4*w_2*w_7 + 3*w_4*w_5 - 5*w_6*w_10 + 3*w_8*w_9 + #' w_1*w_2*w_4 - 2*w_7*(1-w_6)*w_2*w_9 - 4*(1 - w_10)*w_1*(1-w_4) } #' #' The simulated error term is a standard normal (i.e. Gaussian). The noise #' variables are simulated in the same manner as described above but are made #' binary based on whether the normal random variable is above or below 0. If #' \code{factors = TRUE}, each of the predictors is coerced into a factor. #' This simulation can also be adapted for classification using the option #' \code{class = TRUE}. In this case, the outcome is converted to be a factor #' by first computing the logit transformation of the equation above and using #' uniform random numbers to assign the observed class. #' #' A second function (\code{LPH07_2}) uses 20 independent Gaussians with mean #' zero and variance 16. The functional form here is: #' #' \preformatted{ x_1*x_2 + x_10^2 - x_3*x_17 - x_15*x_4 + x_9*x_5 + x_19 - #' x_20^2 + x_9*x_8 } #' #' The error term is also Gaussian with mean zero and variance 16. #' #' The function \code{SLC14_1} simulates a system from Sapp et al. (2014). All #' informative predictors are independent Gaussian random variables with mean #' zero and a variance of 9. The prediction equation is: #' #' \preformatted{ x_1 + sin(x_2) + log(abs(x_3)) + x_4^2 + x_5*x_6 + #' I(x_7*x_8*x_9 < 0) + I(x_10 > 0) + x_11*I(x_11 > 0) + sqrt(abs(x_12)) + #' cos(x_13) + 2*x_14 + abs(x_15) + I(x_16 < -1) + x_17*I(x_17 < -1) - 2 * x_18 #' - x_19*x_20 } #' #' The random error here is also Gaussian with mean zero and a variance of 9. #' #' \code{SLC14_2} is also from Sapp et al. (2014). Two hundred independent #' Gaussian variables are generated, each having mean zero and variance 16. The #' functional form is #' #' \preformatted{ -1 + log(abs(x_1)) + ... + log(abs(x_200)) } #' #' and the error term is Gaussian with mean zero and a variance of 25. #' #' For each simulation, the user can also add non-informative predictors to the #' data. These are random standard normal predictors and can be optionally #' added to the data in two ways: a specified number of independent predictors #' or a set number of predictors that follow a particular correlation #' structure. The only two correlation structure that have been implemented are #' #' \itemize{ \item compound-symmetry (aka exchangeable) where there is a #' constant correlation between all the predictors #' #' \item auto-regressive 1 [AR(1)]. While there is no time component to these #' data, this structure can be used to add predictors of varying levels of #' correlation. For example, if there were 4 predictors and \code{r} was the #' correlation parameter, the between predictor correlation matrix would be } #' #' \preformatted{ | 1 sym | | r 1 | | r^2 r 1 | | r^3 r^2 r 1 | | r^4 r^3 r^2 r #' 1 | } #' #' @aliases twoClassSim SLC14_1 SLC14_2 LPH07_1 LPH07_2 #' @param n The number of simulated data points #' @param intercept The intercept, which controls the class balance. The #' default value produces a roughly balanced data set when the other defaults #' are used. #' @param linearVars The number of linearly important effects. See Details #' below. #' @param noiseVars The number of uncorrelated irrelevant predictors to be #' included. #' @param corrVars The number of correlated irrelevant predictors to be #' included. #' @param corrType The correlation structure of the correlated irrelevant #' predictors. Values of "AR1" and "exch" are available (see Details below) #' @param corrValue The correlation value. #' @param mislabel The proportion of data that is possibly mislabeled. Only #' used when \code{ordinal = FALSE}. See Details below. #' @param ordinal Should an ordered factor be returned? See Details below. #' @param factors Should the binary predictors be converted to factors? #' @param class Should the simulation produce class labels instead of numbers? #' @return a data frame with columns: \item{Class }{A factor with levels #' "Class1" and "Class2"} \item{TwoFactor1, TwoFactor2 }{Correlated #' multivariate normal predictors (denoted as \code{A} and \code{B} above)} #' \item{Nonlinear1, Nonlinear2, Nonlinear3}{Uncorrelated random uniform #' predictors (\code{J}, \code{K} and \code{L} above).} \item{Linear1, #' }{Optional uncorrelated standard normal predictors (\code{C} through #' \code{H} above)}\item{list()}{Optional uncorrelated standard normal #' predictors (\code{C} through \code{H} above)} \item{Noise1, }{Optional #' uncorrelated standard normal predictions}\item{list()}{Optional uncorrelated #' standard normal predictions} \item{Corr1, }{Optional correlated multivariate #' normal predictors (each with unit variances)}\item{list()}{Optional #' correlated multivariate normal predictors (each with unit variances)}. #' @author Max Kuhn #' @references van der Laan, M. J., & Polley Eric, C. (2007). Super learner. #' Statistical Applications in Genetics and Molecular Biology, 6(1), 1-23. #' #' Sapp, S., van der Laan, M. J., & Canny, J. (2014). Subsemble: an ensemble #' method for combining subset-specific algorithm fits. Journal of Applied #' Statistics, 41(6), 1247-1259. #' @keywords models #' @examples #' #' example <- twoClassSim(100, linearVars = 1) #' splom(~example[, 1:6], groups = example$Class) #' #' @export twoClassSim twoClassSim <- function(n = 100, intercept = -5, linearVars = 10, noiseVars = 0, ## Number of uncorrelated x's corrVars = 0, ## Number of correlated x's corrType = "AR1", ## Corr structure ('AR1' or 'exch') corrValue = 0, ## Corr parameter mislabel = 0, ordinal = FALSE) { requireNamespaceQuietStop("MASS") sigma <- matrix(c(2,1.3,1.3,2),2,2) tmpData <- data.frame(MASS::mvrnorm(n=n, c(0,0), sigma)) names(tmpData) <- paste("TwoFactor", 1:2, sep = "") if(linearVars > 0) { tmpData <- cbind(tmpData, matrix(rnorm(n*linearVars), ncol = linearVars)) colnames(tmpData)[(1:linearVars)+2] <- paste("Linear", gsub(" ", "0", format(1:linearVars)), sep = "") } tmpData$Nonlinear1 <- runif(n, min = -1) tmpData <- cbind(tmpData, matrix(runif(n*2), ncol = 2)) colnames(tmpData)[(ncol(tmpData)-1):ncol(tmpData)] <- paste("Nonlinear", 2:3, sep = "") tmpData <- as.data.frame(tmpData) p <- ncol(tmpData) if(noiseVars > 0) { tmpData <- cbind(tmpData, matrix(rnorm(n * noiseVars), ncol = noiseVars)) colnames(tmpData)[(p+1):ncol(tmpData)] <- paste("Noise", gsub(" ", "0", format(1:noiseVars)), sep = "") } if(corrVars > 0) { p <- ncol(tmpData) loadNamespace("MASS") if(corrType == "exch") { vc <- matrix(corrValue, ncol = corrVars, nrow = corrVars) diag(vc) <- 1 } if(corrType == "AR1") { vcValues <- corrValue^(seq(0, corrVars - 1, by = 1)) vc <- toeplitz(vcValues) } tmpData <- cbind(tmpData, MASS::mvrnorm(n, mu = rep(0, corrVars), Sigma = vc)) colnames(tmpData)[(p+1):ncol(tmpData)] <- paste("Corr", gsub(" ", "0", format(1:corrVars)), sep = "") } lp <- intercept - 4 * tmpData$TwoFactor1 + 4*tmpData$TwoFactor2 + 2*tmpData$TwoFactor1*tmpData$TwoFactor2 + (tmpData$Nonlinear1^3) + 2 * exp(-6*(tmpData$Nonlinear1 - 0.3)^2) + 2*sin(pi*tmpData$Nonlinear2* tmpData$Nonlinear3) if(linearVars > 0) { lin <- seq(10, 1, length = linearVars)/4 lin <- lin * rep(c(-1, 1), floor(linearVars)+1)[1:linearVars] for(i in seq(along = lin)) lp <- lp + tmpData[, i+3]*lin[i] } if(ordinal){ prob <- binomial()$linkinv(lp + rnorm(n,sd = 2)) tmpData$Class <- cut(prob, breaks = c(0, .2, .75, 1), include.lowest = TRUE, labels = c("low", "med", "high"), ordered_result = TRUE) } else { prob <- binomial()$linkinv(lp) if(mislabel > 0 & mislabel < 1) { shuffle <- sample(1:nrow(tmpData), floor(nrow(tmpData)*mislabel)) prob[shuffle] <- 1 - prob[shuffle] } tmpData$Class <- ifelse(prob <= runif(n), "Class1", "Class2") tmpData$Class <- factor(tmpData$Class, levels = c("Class1", "Class2")) } tmpData } caret/R/safs.R0000644000176200001440000014470413153613153012643 0ustar liggesusers sa_internal_names <- c('Best','Note','Random','Prob','Iter','Cycle', 'SinceRestart','Size','Similarity','Similarity_B','Resample') sa_external_names <- c('Iter','Resample') sa_func_check <- function(x) { fnames <- names(x) required <- c('fit', 'fitness_intern', 'pred', 'fitness_extern', 'initial', 'perturb', 'prob', 'selectIter') missing <- !(required %in% fnames) if(any(missing)) stop(paste("The following functions are missing from the 'func' argument:", paste(required[missing], sep = "", collapse = ","))) invisible(x) args <- lapply(x, function(x) names(formals(x))) expected <- list(fit = c('x', 'y', 'lev', 'last', '...'), fitness_intern = c('object', 'x', 'y', 'maximize', 'p'), pred = c('object', 'x'), fitness_extern = c('data', 'lev', 'model'), initial = c('vars', 'prob', '...'), perturb = c('x', 'vars', 'number'), prob = c('old', 'new', 'iteration'), selectIter = c('x', 'metric', 'maximize')) if(is.vector(x$initial)) { x <- x[!(names(x) == "initial")] expected <- expected[!(names(expected) == "initial")] } for(i in names(x)) { .args <- names(formals(x[[i]])) .check <- same_args(.args, expected[[i]]) if(!.check) { stop(paste("Arguments to function", i, "should be {", paste(expected[[i]], sep = "", collapse = ", "), "} and these were given {", paste(.args, sep = "", collapse = ", "), "}\n")) } } } sa_bl_correct0 <- function(x) { extras <- c('Best', 'Note', 'Random', 'Prob', 'Iter', 'Cycle', 'SinceRestart', 'Size', 'Resample') bl <- x[which.min(x$Iter),] bl <- bl[, !(names(bl) %in% extras)] perf_names <- names(bl) for(i in perf_names) x[, i] <- x[,i] - bl[,i] x } sa_bl_correct <- function(x) ddply(x, .(Resample), sa_bl_correct0 ) #' @importFrom utils getFromNamespace #' @export print.safs <- function (x, top = 5, digits = max(3, getOption("digits") - 3), ...) { cat("\nSimulated Annealing Feature Selection\n\n") cat(x$dims[1], " samples\n", x$dims[2], " predictor", ifelse(x$dims[2] > 1, "s\n", "\n"), sep = "") if(!is.null(x$levels)){ cat(length(x$levels), "classes:", paste("'", x$levels, "'", sep = "", collapse = ", "), "\n") } cat("\n") cat("Maximum search iterations:", max(x$iters), "\n") if(x$control$improve < Inf) { num_re <- ddply(x$internal, "Resample", function(x) sum(x$Note == "Restart")) cat("Restart after ", x$control$improve, " iterations without improvement (", round(mean(num_re$V1), 1), " restarts on average)\n", sep = "") } cat("\n") inames <- names(x$internal) inames <- inames[!(inames %in% sa_internal_names)] enames <- names(x$external) enames <- enames[!(enames %in% sa_external_names)] cat("Internal performance value", ifelse(length(inames) > 1, "s: ", ": "), paste(inames, sep = "", collapse = ", "), "\n", sep = "") cat("Subset selection driven to", if(x$control$maximize["internal"]) "maximize internal" else "minimize internal", x$control$metric["internal"], "\n") cat("\n") cat("External performance value", ifelse(length(enames) > 1, "s: ", ": "), paste(enames, sep = "", collapse = ", "), "\n", sep = "") if(x$auto) { cat("Best iteration chose by", if(x$control$maximize["external"]) "maximizing external" else "minimizing external", x$control$metric["external"], "\n") } else { cat("Best iteration chosen manually\n") } resampleN <- unlist(lapply(x$control$index, length)) numResamp <- length(resampleN) resampText <- getFromNamespace("resampName", "caret")(x) cat("External resampling method:", resampText, "\n") if(x$control$holdout > 0) cat("Subsampling for internal fitness calculation: ", round(x$control$holdout*100, digits), "%\n", sep = "") cat("\n") vars <- sort(table(unlist(x$resampled_vars)), decreasing = TRUE) top <- min(top, length(vars)) smallVars <- vars[1:top] smallVars <- round(smallVars/length(x$control$index)*100, 1) varText <- paste0(names(smallVars), " (", smallVars, "%)") varText <- paste(varText, collapse = ", ") if(!all(is.na(smallVars))) { cat("During resampling:\n * the top ", top, " selected variables (out of a possible ", x$dims[2], "):\n ", varText, "\n", sep = "") cat(" * on average, ", round(mean(unlist(lapply(x$resampled_vars, length))), 1), " variables were selected (min = ", round(min(unlist(lapply(x$resampled_vars, length))), 1), ", max = ", round(max(unlist(lapply(x$resampled_vars, length))), 1), ")\n\n", sep = "") } else { cat("During resampling, no variables were selected.\n\n") } cat("In the final search using the entire training set:\n", " *", length(x$optVariables), "features selected at iteration", x$optIter, "including:\n ", paste(x$optVariables[1:min(length(x$optVariables), top)], sep = "", collapse = ", "), if(length(x$optVariables) > top) "..." else "", "\n") perf_dat <- subset(x$external, Iter == x$optIter) perf_dat <- perf_dat[!(names(perf_dat) %in% c("Iter", "Resample"))] perf <- colMeans(perf_dat) cat(" * external performance at this iteration is\n\n") ch_perf <- format(perf, digits = digits, row.names = FALSE) ch_perf[1] <- paste(" ", ch_perf[1]) print(ch_perf, quote = FALSE) cat("\n") invisible(x) } #' @export predict.safs <- function (object, newdata, ...) { newdata <- newdata[, object$optVariables, drop = FALSE] object$control$functions$pred(object$fit, newdata) } #' @title Control parameters for GA and SA feature selection #' #' @description #' Control the computational nuances of the \code{\link{gafs}} and #' \code{\link{safs}} functions #' #' Many of these options are the same as those described for #' \code{\link[caret]{trainControl}}. More extensive documentation and examples #' can be found on the \pkg{caret} website at #' \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html#syntax} and #' \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html#syntax}. #' #' The \code{functions} component contains the information about how the model #' should be fit and summarized. It also contains the elements needed for the #' GA and SA modules (e.g. cross-over, etc). #' #' The elements of \code{functions} that are the same for GAs and SAs are: #' \itemize{ #' \item \code{fit}, with arguments \code{x}, \code{y}, \code{lev}, #' \code{last}, and \code{...}, is used to fit the classification or regression #' model #' \item \code{pred}, with arguments \code{object} and \code{x}, predicts #' new samples #' \item \code{fitness_intern}, with arguments \code{object}, #' \code{x}, \code{y}, \code{maximize}, and \code{p}, summarizes performance #' for the internal estimates of fitness #' \item \code{fitness_extern}, with #' arguments \code{data}, \code{lev}, and \code{model}, summarizes performance #' using the externally held-out samples #' \item \code{selectIter}, with #' arguments \code{x}, \code{metric}, and \code{maximize}, determines the best #' search iteration for feature selection. #' } #' #' The elements of \code{functions} specific to genetic algorithms are: #' \itemize{ #' \item \code{initial}, with arguments \code{vars}, \code{popSize} #' and \code{...}, creates an initial population. #' \item \code{selection}, with #' arguments \code{population}, \code{fitness}, \code{r}, \code{q}, and #' \code{...}, conducts selection of individuals. #' \item \code{crossover}, with #' arguments \code{population}, \code{fitness}, \code{parents} and \code{...}, #' control genetic reproduction. #' \item \code{mutation}, with arguments #' \code{population}, \code{parent} and \code{...}, adds mutations. #' } #' #' The elements of \code{functions} specific to simulated annealing are: #' \itemize{ #' \item \code{initial}, with arguments \code{vars}, \code{prob}, and #' \code{...}, creates the initial subset. #' \item \code{perturb}, with #' arguments \code{x}, \code{vars}, and \code{number}, makes incremental #' changes to the subsets. #' \item \code{prob}, with arguments \code{old}, #' \code{new}, and \code{iteration}, computes the acceptance probabilities #' } #' #' The pages \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html} and #' \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html} have more details about each of #' these functions. #' #' \code{holdout} can be used to hold out samples for computing the internal #' fitness value. Note that this is independent of the external resampling #' step. Suppose 10-fold CV is being used. Within a resampling iteration, #' \code{holdout} can be used to sample an additional proportion of the 90\% #' resampled data to use for estimating fitness. This may not be a good idea #' unless you have a very large training set and want to avoid an internal #' resampling procedure to estimate fitness. #' #' The search algorithms can be parallelized in several places: #' \enumerate{ #' \item each externally resampled GA or SA can be run independently #' (controlled by the \code{allowParallel} options) #' \item within a GA, the #' fitness calculations at a particular generation can be run in parallel over #' the current set of individuals (see the \code{genParallel}) #' \item if inner resampling is used, these can be run in parallel (controls depend on the #' function used. See, for example, \code{\link[caret]{trainControl}}) #' \item any parallelization of the individual model fits. This is also specific to the modeling function. #' } #' #' It is probably best to pick one of these areas for parallelization and the #' first is likely to produces the largest decrease in run-time since it is the #' least likely to incur multiple re-starting of the worker processes. Keep in #' mind that if multiple levels of parallelization occur, this can effect the #' number of workers and the amount of memory required exponentially. #' #' @aliases safsControl gafsControl #' @param functions a list of functions for model fitting, prediction etc (see #' Details below) #' @param method The resampling method: \code{boot}, \code{boot632}, \code{cv}, #' \code{repeatedcv}, \code{LOOCV}, \code{LGOCV} (for repeated training/test #' splits) #' @param metric a two-element string that specifies what summary metric will #' be used to select the optimal number of iterations from the external fitness #' value and which metric should guide subset selection. If specified, this #' vector should have names \code{"internal"} and \code{"external"}. See #' \code{\link{gafs}} and/or \code{\link{safs}} for explanations of the #' difference. #' @param maximize a two-element logical: should the metrics be maximized or #' minimized? Like the \code{metric} argument, this this vector should have #' names \code{"internal"} and \code{"external"}. #' @param number Either the number of folds or number of resampling iterations #' @param repeats For repeated k-fold cross-validation only: the number of #' complete sets of folds to compute #' @param verbose a logical for printing results #' @param returnResamp A character string indicating how much of the resampled #' summary metrics should be saved. Values can be ``all'' or ``none'' #' @param p For leave-group out cross-validation: the training percentage #' @param index a list with elements for each resampling iteration. Each list #' element is the sample rows used for training at that iteration. #' @param indexOut a list (the same length as \code{index}) that dictates which #' sample are held-out for each resample. If \code{NULL}, then the unique set #' of samples not contained in \code{index} is used. #' @param seeds a vector or integers that can be used to set the seed during #' each search. The number of seeds must be equal to the number of resamples #' plus one. #' @param holdout the proportion of data in [0, 1) to be held-back from #' \code{x} and \code{y} to calculate the internal fitness values #' @param improve the number of iterations without improvement before #' \code{\link{safs}} reverts back to the previous optimal subset #' @param genParallel if a parallel backend is loaded and available, should #' \code{\link{gafs}} use it tp parallelize the fitness calculations within a #' generation within a resample? #' @param allowParallel if a parallel backend is loaded and available, should #' the function use it? #' @return An echo of the parameters specified #' @author Max Kuhn #' @seealso \code{\link{safs}}, \code{\link{safs}}, , \code{\link{caretGA}}, #' \code{\link{rfGA}}, \code{\link{treebagGA}}, \code{\link{caretSA}}, #' \code{\link{rfSA}}, \code{\link{treebagSA}} #' @references \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html}, #' \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html} #' @keywords utilities #' @export safsControl safsControl <- function(functions = NULL, method = "repeatedcv", metric = NULL, maximize = NULL, number = ifelse(grepl("cv", method), 10, 25), repeats = ifelse(grepl("cv", method), 1, 5), verbose = FALSE, returnResamp = "final", p = .75, index = NULL, indexOut = NULL, seeds = NULL, holdout = 0, improve = Inf, allowParallel = TRUE) { if(!(method %in% c("cv", "boot", "repeatedcv", "LGOCV", "LOOCV"))) stop('method should be one of: "cv", "boot", "repeatedcv", "LGOCV" or "LOOCV"') if(holdout < 0 | holdout >= 1) stop("'holdout' should be in [0, 1)") if(improve < 2 ) stop("'improve' should be >= 2") if(!is.null(metric)) { if(length(metric) != 2) stop("'metric' should be a two-element named vector. See ?safsControl") if(is.null(names(metric)) || any(sort(names(metric)) != c("external", "internal"))) stop("'metric' should have names 'internal' and 'external' See ?safsControl") } if(!is.null(maximize)) { if(length(maximize) != 2) stop("'maximize' should be a two-element named vector. See ?safsControl") if(is.null(names(maximize)) || any(sort(names(maximize)) != c("external", "internal"))) stop("'maximize' should have names 'internal' and 'external' See ?safsControl") } list(functions = if(is.null(functions)) caretFuncs else functions, method = method, metric = metric, maximize = maximize, number = number, repeats = repeats, returnResamp = returnResamp, verbose = verbose, p = p, index = index, indexOut = indexOut, seeds = seeds, holdout = holdout, improve = improve, allowParallel = allowParallel) } #' @title Simulated annealing feature selection #' #' #' @description #' Supervised feature selection using simulated annealing #' #' \code{\link{safs}} conducts a supervised binary search of the predictor #' space using simulated annealing (SA). See Kirkpatrick et al (1983) for more #' information on this search algorithm. #' #' This function conducts the search of the feature space repeatedly within #' resampling iterations. First, the training data are split be whatever #' resampling method was specified in the control function. For example, if #' 10-fold cross-validation is selected, the entire simulated annealing search #' is conducted 10 separate times. For the first fold, nine tenths of the data #' are used in the search while the remaining tenth is used to estimate the #' external performance since these data points were not used in the search. #' #' During the search, a measure of fitness (i.e. SA energy value) is needed to #' guide the search. This is the internal measure of performance. During the #' search, the data that are available are the instances selected by the #' top-level resampling (e.g. the nine tenths mentioned above). A common #' approach is to conduct another resampling procedure. Another option is to #' use a holdout set of samples to determine the internal estimate of #' performance (see the holdout argument of the control function). While this #' is faster, it is more likely to cause overfitting of the features and should #' only be used when a large amount of training data are available. Yet another #' idea is to use a penalized metric (such as the AIC statistic) but this may #' not exist for some metrics (e.g. the area under the ROC curve). #' #' The internal estimates of performance will eventually overfit the subsets to #' the data. However, since the external estimate is not used by the search, it #' is able to make better assessments of overfitting. After resampling, this #' function determines the optimal number of iterations for the SA. #' #' Finally, the entire data set is used in the last execution of the simulated #' annealing algorithm search and the final model is built on the predictor #' subset that is associated with the optimal number of iterations determined #' by resampling (although the update function can be used to manually set the #' number of iterations). #' #' This is an example of the output produced when \code{safsControl(verbose = #' TRUE)} is used: #' #' \preformatted{ #' Fold03 1 0.401 (11) #' Fold03 2 0.401->0.410 (11+1, 91.7\%) * #' Fold03 3 0.410->0.396 (12+1, 92.3\%) 0.969 A #' Fold03 4 0.410->0.370 (12+2, 85.7\%) 0.881 #' Fold03 5 0.410->0.399 (12+2, 85.7\%) 0.954 A #' Fold03 6 0.410->0.399 (12+1, 78.6\%) 0.940 A #' Fold03 7 0.410->0.428 (12+2, 73.3\%) * #' } #' #' The text "Fold03" indicates that this search is for the third #' cross-validation fold. The initial subset of 11 predictors had a fitness #' value of 0.401. The next iteration added a single feature the the existing #' best subset of 11 (as indicated by "11+1") that increased the fitness value #' to 0.410. This new solution, which has a Jaccard similarity value of 91.7\% #' to the current best solution, is automatically accepted. The third iteration #' adds another feature to the current set of 12 but does not improve the #' fitness. The acceptance probability for this difference is shown to be #' 95.6\% and the "A" indicates that this new sub-optimal subset is accepted. #' The fourth iteration does not show an increase and is not accepted. Note #' that the Jaccard similarity value of 85.7\% is the similarity to the current #' best solution (from iteration 2) and the "12+2" indicates that there are two #' additional features added from the current best that contains 12 predictors. #' #' The search algorithm can be parallelized in several places: \enumerate{ #' \item each externally resampled SA can be run independently (controlled by #' the \code{allowParallel} option of \code{\link{safsControl}}) \item if inner #' resampling is used, these can be run in parallel (controls depend on the #' function used. See, for example, \code{\link[caret]{trainControl}}) \item #' any parallelization of the individual model fits. This is also specific to #' the modeling function. } #' #' It is probably best to pick one of these areas for parallelization and the #' first is likely to produces the largest decrease in run-time since it is the #' least likely to incur multiple re-starting of the worker processes. Keep in #' mind that if multiple levels of parallelization occur, this can effect the #' number of workers and the amount of memory required exponentially. #' #' @aliases safs.default safs #' @param x an object where samples are in rows and features are in columns. #' This could be a simple matrix, data frame or other type (e.g. sparse #' matrix). See Details below. #' @param y a numeric or factor vector containing the outcome for each sample. #' @param iters number of search iterations #' @param differences a logical: should the difference in fitness values with #' and without each predictor be calculated #' @param safsControl a list of values that define how this function acts. See #' \code{\link{safsControl}} and URL. #' @param \dots arguments passed to the classification or regression routine #' specified in the function \code{safsControl$functions$fit} #' @return an object of class \code{safs} #' @author Max Kuhn #' @seealso \code{\link{safsControl}}, \code{\link{predict.safs}} #' @references \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html} #' #' \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html} #' #' Kuhn and Johnson (2013), Applied Predictive Modeling, Springer #' #' Kirkpatrick, S., Gelatt, C. D., and Vecchi, M. P. (1983). Optimization by #' simulated annealing. Science, 220(4598), 671. #' @keywords models #' @examples #' #' \dontrun{ #' #' set.seed(1) #' train_data <- twoClassSim(100, noiseVars = 10) #' test_data <- twoClassSim(10, noiseVars = 10) #' #' ## A short example #' ctrl <- safsControl(functions = rfSA, #' method = "cv", #' number = 3) #' #' rf_search <- safs(x = train_data[, -ncol(train_data)], #' y = train_data$Class, #' iters = 3, #' safsControl = ctrl) #' #' rf_search #' } #' #' @export safs safs <- function (x, ...) UseMethod("safs") #' @rdname safs #' @export "safs.default" <- function(x, y, iters = 10, differences = TRUE, safsControl = safsControl(), ...) { startTime <- proc.time() funcCall <- match.call(expand.dots = TRUE) if(is.null(safsControl$metric)) safsControl$metric <- rep(ifelse(is.factor(y), "Accuracy", "RMSE"), 2) if(is.null(safsControl$maximize)) safsControl$maximize <- rep(ifelse(safsControl$metric == "RMSE", FALSE, TRUE), 2) if(is.null(names(safsControl$metric))) names(safsControl$metric) <- c("internal", "external") if(is.null(names(safsControl$maximize))) names(safsControl$maximize) <- c("internal", "external") if(nrow(x) != length(y)) stop("there should be the same number of samples in x and y") numFeat <- ncol(x) classLevels <- levels(y) if(is.null(safsControl$index)) safsControl$index <- switch(tolower(safsControl$method), cv = createFolds(y, safsControl$number, returnTrain = TRUE), repeatedcv = createMultiFolds(y, safsControl$number, safsControl$repeats), loocv = createFolds(y, length(y), returnTrain = TRUE), boot =, boot632 = createResample(y, safsControl$number), test = createDataPartition(y, 1, safsControl$p), lgocv = createDataPartition(y, safsControl$number, safsControl$p)) if(is.null(names(safsControl$index))) names(safsControl$index) <- getFromNamespace("prettySeq", "caret")(safsControl$index) ## Create hold--out indicies if(is.null(safsControl$indexOut)){ safsControl$indexOut <- lapply(safsControl$index, function(training, allSamples) allSamples[-unique(training)], allSamples = seq(along = y)) names(safsControl$indexOut) <- getFromNamespace("prettySeq", "caret")(safsControl$indexOut) } if(!is.null(safsControl$seeds)) { if(length(safsControl$seeds) < length(safsControl$index) + 1) stop(paste("There must be at least", length(safsControl$index) + 1, "random number seeds passed to safsControl")) } else { safsControl$seeds <- sample.int(100000, length(safsControl$index) + 1) } ## check summary function and metric testOutput <- data.frame(pred = sample(y, min(10, length(y))), obs = sample(y, min(10, length(y)))) if(is.factor(y)) for(i in seq(along = classLevels)) testOutput[, classLevels[i]] <- runif(nrow(testOutput)) test <- safsControl$functions$fitness_extern(testOutput, lev = classLevels) perfNames <- names(test) if(is.null(perfNames)) { warning(paste("The external fitness results should be a *named* vector;", "new name(s) are", paste(paste0("external", 1:length(test)), sep = "", collapse = ", ")), immediate. = TRUE) perfNames <- paste0("external", 1:length(test)) } if(!(safsControl$metric["external"] %in% perfNames)) { warning(paste("The metric '", safsControl$metric["external"], "' is not created by the external summary function; '", perfNames[1], "' will be used instead", sep = "")) safsControl$metric["external"] <- perfNames[1] } `%op%` <- getOper(safsControl$allowParallel && getDoParWorkers() > 1) # sa_resampled <- external <- vector(mode = "list", length = length(safsControl$index)) result <- foreach(i = seq(along = safsControl$index), .combine = "c", .verbose = FALSE, .errorhandling = "stop") %op% { sa_select(x[safsControl$index[[i]],,drop=FALSE], y[safsControl$index[[i]]], funcs = safsControl$functions, sa_metric = safsControl$metric, sa_maximize = safsControl$maximize, iters = iters, sa_verbose = safsControl$verbose, testX = x[safsControl$indexOut[[i]],,drop=FALSE], testY = y[safsControl$indexOut[[i]]], sa_seed = safsControl$seeds[i], improve = safsControl$improve, Resample = names(safsControl$index)[i], holdout = safsControl$holdout, lvl = classLevels, ...) } ## TODO save only the parts you need inside of loop external <- result[names(result) == "external"] external <- do.call("rbind", external) rownames(external) <- NULL internal <- result[names(result) == "table"] internal <- do.call("rbind", internal) rownames(internal) <- NULL selected_vars <- result[names(result) == "final"] names(selected_vars) <- names(safsControl$index) if(differences) { diffs <- try(process_diffs(result[names(result) == "diffs"], colnames(x)), silent = TRUE) if(class(diffs)[1] == "try-error") { diffs <- NULL warning("An error occured when computing the variable differences") } } else diffs <- NULL rm(result) if(safsControl$verbose) cat("+ final SA\n") if(safsControl$holdout > 0) { in_holdout <- createDataPartition(y, p = safsControl$holdout, list = FALSE) in_model <- seq(along = y)[-unique(in_holdout)] } else { in_model <- seq(along = y) in_holdout <- NULL } final_sa <- sa_select(x[in_model,,drop=FALSE], y[in_model], funcs = safsControl$functions, sa_metric = safsControl$metric, sa_maximize = safsControl$maximize, iters = iters, sa_verbose = safsControl$verbose, testX = if(!is.null(in_holdout)) x[in_holdout,,drop=FALSE] else NULL, testY = if(!is.null(in_holdout)) y[in_holdout] else NULL, sa_seed = safsControl$seeds[length(safsControl$seeds)], improve = safsControl$improve, lvl = classLevels, ...) averages <- ddply(external, .(Iter), function(x, nms) { apply(x[, perfNames, drop = FALSE], 2, mean) }, nms = perfNames) if(!is.null(safsControl$functions$selectIter)) { best_index <- safsControl$functions$selectIter(averages, metric = safsControl$metric["external"], maximize = safsControl$maximize["external"]) best_iter <- averages$Iter[best_index] best_vars <- colnames(x)[final_sa$subsets[[best_index]]] } else { best_index <- if(safsControl$maximize["external"]) which.max(averages[,safsControl$metric["external"]]) else which.min(averages[,safsControl$metric["external"]]) best_iter <- averages$Iter[best_index] best_vars <- colnames(x)[final_sa$subsets[[best_index]]] } if(safsControl$verbose) cat("+ final model\n") fit <- safsControl$functions$fit(x[, best_vars, drop=FALSE], y, lev = lvls, last = TRUE, ...) endTime <- proc.time() res <- list(fit = fit, sa = final_sa, external = external, internal = internal, all_vars = colnames(x), resampled_vars = selected_vars, averages = averages, iters = iters, optVariables = best_vars, optIter = best_iter, control = safsControl, dims = dim(x), differences = diffs, perfNames = perfNames, auto = TRUE, the_dots = list(...), times = list(everything = endTime - startTime), levels = if(is.factor(y)) classLevels else NULL) class(res) <- "safs" res } #' Ancillary simulated annealing functions #' #' @description #' Built-in functions related to simulated annealing #' #' These functions are used with the \code{functions} argument of the #' \code{\link{safsControl}} function. More information on the details of these #' functions are at \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html}. #' #' The \code{initial} function is used to create the first predictor subset. #' The function \code{safs_initial} randomly selects 20\% of the predictors. #' Note that, instead of a function, \code{\link{safs}} can also accept a #' vector of column numbers as the initial subset. #' #' \code{safs_perturb} is an example of the operation that changes the subset #' configuration at the start of each new iteration. By default, it will change #' roughly 1\% of the variables in the current subset. #' #' The \code{prob} function defines the acceptance probability at each #' iteration, given the old and new fitness (i.e. energy values). It assumes #' that smaller values are better. The default probability function computed #' the percentage difference between the current and new fitness value and #' using an exponential function to compute a probability: \preformatted{ prob #' = exp[(current-new)/current*iteration] } #' #' @aliases safs_initial safs_perturb safs_prob caretSA rfSA treebagSA #' @param vars the total number of possible predictor variables #' @param prob The probability that an individual predictor is included in the #' initial predictor set #' @param x the integer index vector for the current subset #' @param old,new fitness values associated with the current and new subset #' @param iteration the number of iterations overall or the number of #' iterations since restart (if \code{improve} is used in #' \code{\link{safsControl}}) #' @param number the number of predictor variables to perturb #' @param \dots not currently used #' @return The return value depends on the function. Note that the SA code #' encodes the subsets as a vector of integers that are included in the subset #' (which is different than the encoding used for GAs). #' #' The objects \code{caretSA}, \code{rfSA} and \code{treebagSA} are example #' lists that can be used with the \code{functions} argument of #' \code{\link{safsControl}}. #' #' In the case of \code{caretSA}, the \code{...} structure of #' \code{\link{safs}} passes through to the model fitting routine. As a #' consequence, the \code{\link{train}} function can easily be accessed by #' passing important arguments belonging to \code{\link{train}} to #' \code{\link{safs}}. See the examples below. By default, using \code{caretSA} #' will used the resampled performance estimates produced by #' \code{\link{train}} as the internal estimate of fitness. #' #' For \code{rfSA} and \code{treebagSA}, the \code{randomForest} and #' \code{bagging} functions are used directly (i.e. \code{\link{train}} is not #' used). Arguments to either of these functions can also be passed to them #' though the \code{\link{safs}} call (see examples below). For these two #' functions, the internal fitness is estimated using the out-of-bag estimates #' naturally produced by those functions. While faster, this limits the user to #' accuracy or Kappa (for classification) and RMSE and R-squared (for #' regression). #' @author Max Kuhn #' @seealso \code{\link{safs}}, \code{\link{safsControl}} #' @references \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html} #' @examples #' #' selected_vars <- safs_initial(vars = 10 , prob = 0.2) #' selected_vars #' #' ### #' #' safs_perturb(selected_vars, vars = 10, number = 1) #' #' ### #' #' safs_prob(old = .8, new = .9, iteration = 1) #' safs_prob(old = .5, new = .6, iteration = 1) #' #' grid <- expand.grid(old = c(4, 3.5), #' new = c(4.5, 4, 3.5) + 1, #' iter = 1:40) #' grid <- subset(grid, old < new) #' #' grid$prob <- apply(grid, 1, #' function(x) #' safs_prob(new = x["new"], #' old= x["old"], #' iteration = x["iter"])) #' #' grid$Difference <- factor(grid$new - grid$old) #' grid$Group <- factor(paste("Current Value", grid$old)) #' #' ggplot(grid, aes(x = iter, y = prob, color = Difference)) + #' geom_line() + facet_wrap(~Group) + theme_bw() + #' ylab("Probability") + xlab("Iteration") #' #' \dontrun{ #' ### #' ## Hypothetical examples #' lda_sa <- safs(x = predictors, #' y = classes, #' safsControl = safsControl(functions = caretSA), #' ## now pass arguments to `train` #' method = "lda", #' metric = "Accuracy" #' trControl = trainControl(method = "cv", classProbs = TRUE)) #' #' rf_sa <- safs(x = predictors, #' y = classes, #' safsControl = safsControl(functions = rfSA), #' ## these are arguments to `randomForest` #' ntree = 1000, #' importance = TRUE) #' } #' #' #' #' @export safs_initial safs_initial <- function (vars, prob = .20, ...) { sort(sample.int(vars, size = floor(vars*prob)+1)) } #' @rdname safs_initial #' @export safs_perturb <- function(x, vars, number = floor(vars*.01) + 1) { bin <- index2vec(x, vars) change <- sample(seq(along = bin), size = number) bin[change] <- ifelse(bin[change] == 1, 0, 1) sort(which(bin == 1)) } #' @rdname safs_initial #' @export safs_prob <- function(old, new, iteration = 1) { if(new < old) return(1) ediff <- as.vector(old - new) ediff <- ediff/abs(old) exp(ediff*iteration) } sa_wrapper <- function(ind, x, y, funcs, holdoutX, holdoutY, testX, testY, sa_metric, sa_maximize, lvl = lvl, last = FALSE, ...) { mod <- funcs$fit(x[, ind, drop=FALSE], y, lev = lvl, last = last,...) internal <- funcs$fitness_intern(mod, x = if(!is.null(holdoutX)) holdoutX[, ind, drop=FALSE] else x[, ind, drop=FALSE], y = if(!is.null(holdoutY)) holdoutY else y, p = ncol(x)) if(!is.null(testX)) { modelPred <- funcs$pred(mod, testX[, ind, drop=FALSE]) if(is.data.frame(modelPred) | is.matrix(modelPred)) { if(is.matrix(modelPred)) modelPred <- as.data.frame(modelPred) modelPred$obs <- testY modelPred$Size <- length(ind) } else modelPred <- data.frame(pred = modelPred, obs = testY, Size = sum(ind == 1)) external <- funcs$fitness_extern(modelPred, lev = levels(testY)) if(is.null(names(external))) { names(external) <- paste0("external", 1:length(external)) } } else external <- NULL if(sa_maximize["internal"]) internal[sa_metric["internal"]] <- -internal[sa_metric["internal"]] list(internal = internal, external = external) } ################################################################### ## #' @importFrom stats runif sa_select <- function(x, y, ## testX, testY: optional holdout data for computing ## the fitness function testX = NULL, testY = NULL, iters = 20, funcs = NULL, sa_metric = NULL, sa_maximize = TRUE, sa_verbose = TRUE, holdout = 0, sa_seed = NULL, improve = 10, lvl = NULL, Resample = "", ...) { sa_func_check(funcs) if(!is.null(sa_seed)) set.seed(sa_seed[1]) dig <- options()$digits if(holdout > 0) { in_holdout <- createDataPartition(y, p = holdout, list = FALSE) holdout_x <- x[in_holdout,,drop = FALSE] holdout_y <- y[in_holdout] x <- x[-in_holdout,,drop = FALSE] y <- y[-in_holdout] } else { holdout_x <- NULL holdout_y <- NULL } p <- ncol(x) cycle <- 1 since_restart <- 0 since_improve <- 0 last_improve <- 0 restarts <- 1 subsets <- vector(mode = "list", length = iters) internal <- data.frame(Best = rep(0*NA, iters), Note = "", Random = runif(iters), Prob = rep(1, iters), Iter = 1:(iters), Cycle = rep(0*NA, iters), SinceRestart = rep(0*NA, iters), Size = rep(0*NA, iters), Similarity = rep(0*NA, iters), Similarity_B = rep(0*NA, iters), stringsAsFactors = FALSE) external <- if(!is.null(testX)) data.frame(Iter = 1:(iters)) else NULL for(i in 1:iters){ if(i == 1) { if(is.function(funcs$initial)) { best_subset <- new_subset <- current_subset <- funcs$initial(vars = p) } else { if(max(funcs$initial) > p) stop(paste("The initial vector uses columns not in the data")) best_subset <- new_subset <- current_subset <- funcs$initial } } else { new_subset <- funcs$perturb(current_subset, vars = p) } if(length(new_subset) == 0) new_subset <- sample.int(p, 1) subsets[[i]] <- new_subset if(i > 1) { internal$Similarity[i] <- jack_sim(index2vec(subsets[[i-1]], p), index2vec(subsets[[i ]], p)) internal$Similarity_B[i] <- jack_sim(index2vec(best_subset, p), index2vec(new_subset, p)) } since_restart <- since_restart + 1 internal$SinceRestart[i] <- since_restart new_obj <- sa_wrapper(ind = new_subset, x = x, y = y, funcs, holdoutX = holdout_x, holdoutY = holdout_y, testX = testX, testY = testY, sa_metric = sa_metric, sa_maximize = sa_maximize, lvl = lvl, last = Resample == "", ...) ## Use the initial results to setup containers for ## the remaining iterations if(i == 1) { ##TODO check for name and modify if needed as with external k <- length(new_obj$internal) perf_names <- names(new_obj$internal) for(new_var in perf_names) internal[,new_var] <- NA nr <- ncol(internal) internal[1, (nr-k+1):nr] <- new_obj$internal if(!is.null(testX)) { for(new_var in names(new_obj$external)) external[,new_var] <- NA external[1, -1] <- new_obj$external } } else { internal[i, (nr-k+1):nr] <- new_obj$internal if(!is.null(testX)) external[i, -1] <- new_obj$external } if(sa_verbose){ if(i > 1) { cat(Resample, " ", format(1:iters)[i], " ", if(sa_maximize["internal"]) signif(-internal$Best[i-1], digits = dig) else signif(internal$Best[i-1], digits = dig), "->" , if(sa_maximize["internal"]) signif(-new_obj$internal[sa_metric["internal"]], digits = dig) else signif(new_obj$internal[sa_metric["internal"]], digits = dig), change_text(best_subset, new_subset, p), sep = "") } else { cat(Resample, " ", format(1:iters)[i], " ", if(sa_maximize["internal"]) signif(-new_obj$internal[sa_metric["internal"]], digits = dig) else signif(new_obj$internal[sa_metric["internal"]], digits = dig), " (" , length(best_subset), ")\n", sep = "") } } internal$Size[i] <- length(new_subset) internal$Cycle[i] <- cycle if(i == 1 || new_obj$internal[sa_metric["internal"]] < internal$Best[i-1]) { current_subset <- new_subset best_subset <- new_subset internal$Best[i] <- new_obj$internal[sa_metric["internal"]] internal$Note[i] <- "Improved" last_improve <- i since_improve <- 0 if(sa_verbose & i > 1) cat(" *\n") } else { if(i > 1) { internal$Prob[i] <- funcs$prob(old = internal$Best[i-1], new = new_obj$internal[sa_metric["internal"]], iteration = since_restart) since_improve <- since_improve + 1 if(sa_verbose) cat(" ", signif(internal$Prob[i], digits = dig), " ") } else internal$Prob[i] <- 1 if(internal$Prob[i] > internal$Random[i]) { current_subset <- new_subset internal$Best[i] <- internal$Best[i-1] internal$Note[i] <- "Accepted" if(sa_verbose & i > 1) cat("A\n") } else { internal$Obj[i] <- internal$Obj[i-1] internal$Best[i] <- internal$Best[i-1] internal$Note[i] <- "Discarded" if(sa_verbose & i > 1) cat("\n") } } if(since_improve == improve) { internal$Note[i] <- "Restart" current_subset <- subsets[[last_improve]] cycle <- cycle + 1 since_restart <- 0 since_improve <- 0 if(sa_verbose) cat(Resample, "restart, goto iter", last_improve, "\n") } } if(sa_maximize["internal"]) { internal[, sa_metric["internal"]] <- -internal[, sa_metric["internal"]] internal$Best <- -internal$Best } mod <- funcs$fit(x[, best_subset, drop=FALSE], y, lev = lvl, last = TRUE, ...) if(Resample != "") internal$Resample <- Resample if(Resample != "" && !is.null(testX)) external$Resample <- Resample diffs <- try(get_fitness_differences(colnames(x), subsets, external[, !(names(external) %in% sa_external_names), drop = FALSE]), silent = TRUE) if(class(diffs)[1] == "try-error") diffs <- NULL list(table = internal, subsets = subsets, external = external, final = names(x)[best_subset], fit = mod, diffs = diffs) } ################################################################### ## #' @method plot safs #' @importFrom stats update #' @export plot.safs <- function(x, metric = x$control$metric["external"], estimate = c("internal", "external"), output = "ggplot", ...) { int_names <- names(x$internal)[!(names(x$internal) %in% sa_internal_names)] ext_names <- names(x$external)[!(names(x$external) %in% sa_external_names)] common <- intersect(int_names, ext_names) both_estimates <- length(estimate) == 2 && all(sort(estimate) == c("external", "internal")) if(both_estimates){ if(!metric %in% common) stop(paste("'", metric, "' not computed in both estimates")) tmp_e <- x$external[, c("Iter", "Resample", common)] tmp_e$Estimate <- "External" tmp_i <- x$internal[, c("Iter", "Resample", common)] tmp_i$Estimate <- "Internal" plot_dat <- rbind(tmp_e, tmp_i) } else { if("internal" %in% estimate) { if(!metric %in% int_names) stop(paste("'", metric, "' not computed internally")) plot_dat <- x$internal[, c("Iter", "Resample", int_names)] } if("external" %in% estimate) { if(!metric %in% int_names) stop(paste("'", metric, "' not computed externally")) plot_dat <- x$external[, c("Iter", "Resample", ext_names)] } } if(output == "data") out <- plot_dat plot_dat <- if(both_estimates) ddply(plot_dat, c("Iter", "Estimate"), function(x) c(Mean = mean(x[, metric]))) else ddply(plot_dat, c("Iter"), function(x) c(Mean = mean(x[, metric]))) if(output == "ggplot") { out <- if(both_estimates) ggplot(plot_dat, aes(x = Iter, y = Mean, color = Estimate)) + geom_point() else ggplot(plot_dat, aes(x = Iter, y = Mean)) + geom_point() out <- out + xlab("Iteration") } if(output == "lattice") { out <- if(both_estimates) xyplot(Mean ~ Iter, data = plot_dat, groups = Estimate, ...) else xyplot(Mean ~ Iter, data = plot_dat, ...) out <- update(out, xlab = "Iteration") } out } ################################################################### ## #' @rdname safs_initial #' @importFrom stats predict #' @export caretSA <- list(fit = function(x, y, lev = NULL, last = FALSE, ...) train(x, y, ...), pred = function(object, x) { tmp <- predict(object, x) if(object$control$classProbs) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp out }, fitness_intern = function(object, x, y, maximize, p){ perf_val <- getTrainPerf(object) perf_val <- perf_val[names(perf_val) != "method"] perf_val <- unlist(perf_val) names(perf_val) <- gsub("Train", "", names(perf_val)) perf_val }, fitness_extern = defaultSummary, initial = safs_initial, perturb = safs_perturb, prob = safs_prob, selectIter = best) #' @rdname safs_initial #' @export treebagSA <- list(fit = function(x, y, lev = NULL, last = FALSE, ...) { loadNamespace("ipred") ipred::ipredbagg(y, x, ...) }, pred = function(object, x) { tmp <- predict(object, x) if(is.factor(object$y)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp out }, fitness_intern = function(object, x, y, maximize, p) ipredStats(object)[1:2], fitness_extern = defaultSummary, initial = safs_initial, perturb = safs_perturb, prob = safs_prob, selectIter = best) #' @rdname safs_initial #' @export rfSA <- list(fit = function(x, y, lev = NULL, last = FALSE, ...) { loadNamespace("randomForest") randomForest::randomForest(x, y, ...) }, pred = function(object, x) { tmp <- predict(object, x) if(is.factor(object$y)) { out <- cbind(data.frame(pred = tmp), as.data.frame(predict(object, x, type = "prob"))) } else out <- tmp out }, fitness_intern = function(object, x, y, maximize, p) rfStats(object), fitness_extern = defaultSummary, initial = safs_initial, perturb = safs_perturb, prob = safs_prob, selectIter = best) #' Update or Re-fit a SA or GA Model #' #' @description #' \code{update} allows a user to over-ride the search iteration selection #' process. #' #' Based on the results of plotting a \code{\link{gafs}} or \code{\link{safs}} #' object, these functions can be used to supersede the number of iterations #' determined analytically from the resamples. #' #' Any values of \code{...} originally passed to \code{\link{gafs}} or #' \code{\link{safs}} are automatically passed on to the updated model (i.e. #' they do not need to be supplied again to \code{update}. #' #' @aliases update.safs update.gafs #' @param object An object produced by \code{\link{gafs}} or \code{\link{safs}} #' @param iter a single numeric integer #' @param x,y the original training data used in the call to \code{\link{gafs}} #' or \code{\link{safs}} #' @param \dots not currently used #' @return an object of class \code{\link{gafs}} or \code{\link{safs}} #' @author Max Kuhn #' @seealso \code{\link{gafs}}, \code{\link{safs}} #' @keywords models #' @examples #' #' \dontrun{ #' set.seed(1) #' train_data <- twoClassSim(100, noiseVars = 10) #' test_data <- twoClassSim(10, noiseVars = 10) #' #' ## A short example #' ctrl <- safsControl(functions = rfSA, #' method = "cv", #' number = 3) #' #' rf_search <- safs(x = train_data[, -ncol(train_data)], #' y = train_data$Class, #' iters = 3, #' safsControl = ctrl) #' #' rf_search2 <- update(rf_search, #' iter = 1, #' x = train_data[, -ncol(train_data)], #' y = train_data$Class) #' rf_search2 #' } #' @method update safs #' @export update.safs <- function(object, iter, x, y, ...) { iter <- iter[1] if(iter > length(object$sa$subsets)) stop(paste("iter must be less than", length(object$sa$subsets))) if(is.null(x) | is.null(y)) stop("the original training data is needed to refit the model") args <- list(x = x[, object$sa$subsets[[iter]], drop=FALSE], y = y, lev = object$levels, last = TRUE) if(length(object$the_dots) > 0) args <- c(args, object$the_dots) if(object$control$verbose) cat("Refitting model to use", length(object$sa$subsets[[iter]]), "predictors from iteration", iter, "\n") object$fit <- do.call(object$control$functions$fit, args) object$auto <- FALSE object$optVariables <- colnames(x)[object$sa$subsets[[iter]]] object$optIter <- iter object } #' @export "varImp.safs" <- function(object, metric = object$control$metric["external"], maximize = object$control$maximize["external"], ...) { if(is.null(object$differences)) stop("must have used `differences = TRUE`") out <- object$differences[,metric, drop = FALSE] rownames(out) <- as.character(object$differences$Variable) if(!maximize) out[, metric, drop = FALSE] <- -out[, metric, drop = FALSE] out <- out[order(-out[, metric]),, drop = FALSE] out } caret/R/knn3.R0000644000176200001440000002132013156517754012561 0ustar liggesusers#' k-Nearest Neighbour Classification #' #' $k$-nearest neighbour classification that can return class votes for all #' classes. #' #' \code{knn3} is essentially the same code as \code{\link[ipred]{ipredknn}} #' and \code{knn3Train} is a copy of \code{\link[class]{knn}}. The underlying C #' code from the \code{class} package has been modified to return the vote #' percentages for each class (previously the percentage for the winning class #' was returned). #' #' @aliases knn3 knn3.formula knn3.matrix knn3.data.frame knn3Train #' @param formula a formula of the form \code{lhs ~ rhs} where \code{lhs} is #' the response variable and \code{rhs} a set of predictors. #' @param data optional data frame containing the variables in the model #' formula. #' @param subset optional vector specifying a subset of observations to be #' used. #' @param na.action function which indicates what should happen when the data #' contain \code{NA}s. #' @param k number of neighbours considered. #' @param x a matrix of training set predictors #' @param y a factor vector of training set classes #' @param ... additional parameters to pass to \code{knn3Train}. However, #' passing \code{prob = FALSE} will be over--ridden. #' @param train matrix or data frame of training set cases. #' @param test matrix or data frame of test set cases. A vector will be #' interpreted as a row vector for a single case. #' @param cl factor of true classifications of training set #' @param l minimum vote for definite decision, otherwise \code{doubt}. (More #' precisely, less than \code{k-l} dissenting votes are allowed, even if #' \code{k} is increased by ties.) #' @param prob If this is true, the proportion of the votes for each class are #' returned as attribute \code{prob}. #' @param use.all controls handling of ties. If true, all distances equal to #' the \code{k}th largest are included. If false, a random selection of #' distances equal to the \code{k}th is chosen to use exactly \code{k} #' neighbours. #' @return An object of class \code{knn3}. See \code{\link{predict.knn3}}. #' @author \code{\link[class]{knn}} by W. N. Venables and B. D. Ripley and #' \code{\link[ipred]{ipredknn}} by Torsten.Hothorn #' , modifications by Max Kuhn and #' Andre Williams #' @keywords multivariate #' @examples #' #' irisFit1 <- knn3(Species ~ ., iris) #' #' irisFit2 <- knn3(as.matrix(iris[, -5]), iris[,5]) #' #' data(iris3) #' train <- rbind(iris3[1:25,,1], iris3[1:25,,2], iris3[1:25,,3]) #' test <- rbind(iris3[26:50,,1], iris3[26:50,,2], iris3[26:50,,3]) #' cl <- factor(c(rep("s",25), rep("c",25), rep("v",25))) #' knn3Train(train, test, cl, k = 5, prob = TRUE) #' #' @export knn3 "knn3" <- function(x, ...) UseMethod("knn3") knn3.default <- function(x, ...) { if(!any(class(x) %in% "formula")) stop("knn3 only implemented for formula objects") } #' @rdname knn3 #' @method knn3 formula #' @importFrom stats model.matrix terms model.extract #' @export knn3.formula <- function (formula, data, subset, na.action, k = 5, ...) { if (missing(formula) || (length(formula) != 3) || (length(attr(terms(formula[-2], data = data), "term.labels")) < 1) || (length(attr(terms(formula[-3], data = data), "term.labels")) != 1)) stop("formula missing or incorrect") m <- match.call(expand.dots = FALSE) if (is.matrix(eval(m$data, parent.frame()))) m$data <- as.data.frame(data) m[[1]] <- as.name("model.frame") m$... <- NULL m$k <- NULL m <- eval(m, parent.frame()) Terms <- attr(m, "terms") y <- model.extract(m, "response") x <- model.matrix(Terms, m) xvars <- as.character(attr(Terms, "variables"))[-1] if ((yvar <- attr(Terms, "response")) > 0) xvars <- xvars[-yvar] xlev <- if (length(xvars) > 0) { xlev <- lapply(m[xvars], levels) xlev[!sapply(xlev, is.null)] } xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] RET <- list(learn = list(y = y, X = x)) RET$k <- k RET$terms <- Terms RET$contrasts <- attr(x, "contrasts") RET$xlevels <- xlev RET$theDots <- list(...) attr(RET, "na.message") <- attr(m, "na.message") if (!is.null(attr(m, "na.action"))) RET$na.action <- attr(m, "na.action") class(RET) <- "knn3" RET } #' @rdname knn3 #' @method knn3 data.frame #' @export knn3.data.frame <- function(x, y, k = 5, ...) { x <- as.matrix(x) out <- knn3(x, y = y, k = k, ...) out } #' @rdname knn3 #' @method knn3 matrix #' @export knn3.matrix <- function(x, y, k = 5, ...) { if(!is.matrix(x)) x <- as.matrix(x) if(!is.factor(y)) stop("y must be a factor") RET <- list(learn = list(y = y, X = x)) RET$k <- k RET$terms <- NULL RET$contrasts <- NULL RET$xlevels <- NULL RET$theDots <- list(...) class(RET) <- "knn3" RET } #' @rdname knn3 #' @method print knn3 #' @export print.knn3 <- function (x, ...) { cat(x$k, "-nearest neighbor model\n", sep = "") cat("Training set outcome distribution:\n") if(is.factor(x$learn$y)) { print(table(x$learn$y)) } else print(summary(x$learn$y)) cat("\n") invisible(x) } #' Predictions from k-Nearest Neighbors #' #' Predict the class of a new observation based on k-NN. #' #' This function is a method for the generic function \code{\link{predict}} for #' class \code{knn3}. For the details see \code{\link{knn3}}. This is #' essentially a copy of \code{\link[ipred]{predict.ipredknn}}. #' #' @param object object of class \code{knn3}. #' @param newdata a data frame of new observations. #' @param type return either the predicted class or the proportion of the votes #' for the winning class. #' @param ... additional arguments. #' @return Either the predicted class or the proportion of the votes for each #' class. #' @author \code{\link[ipred]{predict.ipredknn}} by Torsten.Hothorn #' #' @keywords multivariate #' @method predict knn3 #' @export predict.knn3 <- function (object, newdata, type = c("prob", "class"), ...) { type <- match.arg(type) if (!inherits(object, "knn3")) stop("object not of class knn3") if (!is.null(Terms <- object$terms)) { if (missing(newdata)) newdata <- model.frame(object) else { newdata <- model.frame(as.formula(delete.response(Terms)), newdata, na.action = function(x) x, xlev = object$xlevels) } x <- model.matrix(delete.response(Terms), newdata, contrasts = object$contrasts) xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] } else { x <- as.matrix(newdata) } argList <- list( train = object$learn$X, test = x, cl = object$learn$y, k = object$k) if(length(object$theDots) == 0) object$theDots <- list(prob = TRUE) if(any(names(object$theDots) == "prob")) object$theDots$prob <- TRUE argList <- c(argList, object$theDots) RET <- do.call( "knn3Train", argList) if (type == "prob") { return(attr(RET, "prob")) } else { RET <- factor(RET, levels = levels(object$learn$y)) return(RET) } } #' @rdname knn3 #' @export knn3Train <- function(train, test, cl, k=1, l=0, prob = TRUE, use.all=TRUE) { train <- as.matrix(train) if(is.null(dim(test))) dim(test) <- c(1, length(test)) test <- as.matrix(test) if(any(is.na(train)) || any(is.na(test)) || any(is.na(cl))) stop("no missing values are allowed") p <- ncol(train) ntr <- nrow(train) if(length(cl) != ntr) stop("'train' and 'class' have different lengths") if(ntr < k) { warning(gettextf("k = %d exceeds number %d of patterns", k, ntr), domain = NA) k <- ntr } if (k < 1) stop(gettextf("k = %d must be at least 1", k), domain = NA) nte <- nrow(test) if(ncol(test) != p) stop("dims of 'test' and 'train differ") clf <- as.factor(cl) nc <- max(unclass(clf)) Z <- .C("knn3", as.integer(k), as.integer(l), as.integer(ntr), as.integer(nte), as.integer(p), as.double(train), as.integer(unclass(clf)), as.double(test), integer(nc+1), as.integer(nc), as.integer(FALSE), as.integer(use.all), all_vote=double(as.integer(nte*nc)) ) classProbs <- matrix(Z$all_vote,nrow=nte,ncol=nc,byrow=TRUE) colnames(classProbs)<-sort(unique(clf)) bestClass <- function(x) { out <- which(x == max(x)) if(length(out) > 1) out <- sample(out, 1) out } res <- colnames(classProbs)[apply(classProbs, 1, bestClass)] votes <- apply(classProbs * k, 1, max) inDoubt <- (votes < l) if(any(inDoubt)) res[inDoubt] <- NA if (prob) attr(res, "prob") <- classProbs res } caret/R/recipes.R0000644000176200001440000015267713153613153013351 0ustar liggesusers #' @export predict.train.recipe <- function(object, newdata = stop("Please provide `newdata`"), type = "raw", ...) { if (type == "raw") { predicted <- rec_pred(method = object$modelInfo, object = list(fit = object$finalModel, recipe = object$recipe), newdata = newdata) names(predicted) <- NULL if (!is.null(object$levels) && !is.na(object$levels)) { predicted <- if (attr(object$levels, "ordered")) ordered(as.character(predicted), levels = object$levels) else factor(as.character(predicted), levels = object$levels) } } else { predicted <- rec_prob(method = object$modelInfo, object = list(fit = object$finalModel, recipe = object$recipe), newdata = newdata) predicted <- predicted[, object$levels] } predicted } ## drop dimensions from a `tibble` get_vector <- function(object) { if(!inherits(object, "tbl_df") & !is.data.frame(object)) return(object) if(ncol(object) > 1) stop("Only one column should be available") getElement(object, names(object)[1]) } ## return a vector of names role_cols <- function(object, role) { vars <- object$term_info vars$variable[vars$role %in% role] } ## Check to make sure that old syntax is not used preproc_dots <- function(...) { dots <- list(...) is_pp <- grepl("^preProc", names(dots)) if(any(is_pp)) warning("When using a recipe with `train`, ", paste0("`", names(dots)[is_pp], "`", collapse = ", "), " will be ignored.", call. = FALSE) invisible(NULL) } model_failed <- function(x) { if(inherits(x, "try-error")) return(TRUE) if(any(names(x) == "fit")) if(inherits(x$fit, "try-error")) return(TRUE) if(any(names(x) == "recipe")) if(inherits(x$recipe, "try-error")) return(TRUE) FALSE } pred_failed <- function(x) inherits(x, "try-error") ## Convert the recipe to holdout data. rename this to something like ## get_perf_data #' @importFrom recipes bake all_predictors all_outcomes has_role holdout_rec <- function(object, dat, index) { ## ho_data <- bake(object$recipe, newdata = subset_x(dat, index), all_outcomes()) names(ho_data) <- "obs" ## ~~~~~~ move these two to other functions: wt_cols <- role_cols(object$recipe, "case weight") if(length(wt_cols) > 0) { wts <- bake(object$recipe, newdata = subset_x(dat, index), has_role("case weight")) ho_data$weights <- get_vector(wts) rm(wts) } perf_cols <- role_cols(object$recipe, "performance var") if(length(perf_cols) > 0) { perf_data <- bake(object$recipe, newdata = subset_x(dat, index), has_role("performance var")) ho_data <- cbind(ho_data, perf_data) } ## ~~~~~~ ho_data$rowIndex <- (1:nrow(dat))[index] ho_data <- as.data.frame(ho_data) } #' @importFrom recipes bake prep juice has_role rec_model <- function(rec, dat, method, tuneValue, obsLevels, last = FALSE, sampling = NULL, classProbs, ...) { if(!is.null(sampling) && sampling$first) { ## get original column names for downsamping then reassemble ## the training set prior to making the recipe var_info <- summary(rec) y_cols <- role_cols(rec, "outcome") y <- dat[, y_cols] if(length(y_cols) > 1) stop("`train` doesn't support multivariate outcomes") if(is.data.frame(y)) y <- getElement(y, names(y)) other_cols <- var_info[var_info$role %in% c("predictor", "case weight", "performance var"),] other_cols <- other_cols$variable other_dat <- dat[, other_cols] ## test this with data frames and tibbles tmp <- sampling$func(other_dat, y) orig_dat <- dat dat <- tmp$x dat[, y_cols] <- tmp$y rm(tmp, y, other_cols, other_dat, orig_dat) } trained_rec <- prep(rec, training = dat, fresh = TRUE, verbose = FALSE, stringsAsFactors = TRUE, retain = TRUE) x <- juice(trained_rec, all_predictors()) y <- juice(trained_rec, all_outcomes()) y <- get_vector(y) is_weight <- summary(trained_rec)$role == "case weight" if(any(is_weight)) { if(sum(is_weight) > 1) stop("Ony one column can be used as a case weight.") weights <- bake(trained_rec, newdata = dat, has_role("case weight")) weights <- get_vector(weights) } else weights <- NULL if(!is.null(sampling) && !sampling$first) { tmp <- sampling$func(x, y) x <- tmp$x y <- tmp$y rm(tmp) } modelFit <- try(method$fit(x = x, y = y, wts = weights, param = tuneValue, lev = obsLevels, last = last, classProbs = classProbs, ...), silent = TRUE) ## for models using S4 classes, you can't easily append data, so ## exclude these and we'll use other methods to get this information if(is.null(method$label)) method$label <- "" if(!isS4(modelFit) & !model_failed(modelFit)) { modelFit$xNames <- colnames(x) modelFit$problemType <- if(is.factor(y)) "Classification" else "Regression" modelFit$tuneValue <- tuneValue modelFit$obsLevels <- obsLevels modelFit$param <- list(...) } list(fit = modelFit, recipe = trained_rec) } #' @importFrom recipes bake all_predictors rec_pred <- function (method, object, newdata, param = NULL) { x <- bake(object$recipe, newdata = newdata, all_predictors()) out <- method$predict(modelFit = object$fit, newdata = x, submodels = param) if(is.matrix(out) | is.data.frame(out)) out <- out[,1] out } #' @importFrom recipes bake all_predictors rec_prob <- function (method, object, newdata = NULL, param = NULL) { x <- bake(object$recipe, newdata = newdata, all_predictors()) obsLevels <- levels(object$fit) classProb <- method$prob(modelFit = object$fit, newdata = x, submodels = param) if (!is.data.frame(classProb) & is.null(param)) { classProb <- as.data.frame(classProb) if (!is.null(obsLevels)) classprob <- classProb[, obsLevels] } classProb } ## analogous workflows to the originals loo_train_rec <- function(rec, dat, info, method, ctrl, lev, testing = FALSE, ...) { loadNamespace("caret") loadNamespace("recipes") printed <- format(info$loop) colnames(printed) <- gsub("^\\.", "", colnames(printed)) `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) is_regression <- is.null(lev) pkgs <- c("methods", "caret", "recipes") if(!is.null(method$library)) pkgs <- c(pkgs, method$library) result <- foreach(iter = seq(along = ctrl$index), .combine = "rbind", .verbose = FALSE, .packages = pkgs, .errorhandling = "stop") %:% foreach(parm = 1:nrow(info$loop), .combine = "rbind", .verbose = FALSE, .packages = pkgs, .errorhandling = "stop") %op% { if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) set.seed(ctrl$seeds[[iter]][parm]) if(testing) cat("after loops\n") loadNamespace("caret") if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(ctrl$index), iter, TRUE) if(is.null(info$submodels[[parm]]) || nrow(info$submodels[[parm]]) > 0) { submod <- info$submodels[[parm]] } else submod <- NULL mod_rec <- try( rec_model(rec, dat[ ctrl$index[[iter]], ], method = method, tuneValue = info$loop[parm,,drop = FALSE], obsLevels = lev, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...), silent = TRUE) holdoutIndex <- ctrl$indexOut[[iter]] if(!model_failed(mod_rec)) { predicted <- try( rec_pred(method = method, object = mod_rec, newdata = subset_x(dat, holdoutIndex), param = submod), silent = TRUE) if(pred_failed(predicted)) { fail_warning(settings = printed[parm,,drop = FALSE], msg = predicted, where = "predictions", iter = names(ctrl$index)[iter], verb = ctrl$verboseIter) predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } } else { fail_warning(settings = printed[parm,,drop = FALSE], msg = mod_rec, iter = names(ctrl$index)[iter], verb = ctrl$verboseIter) predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } if(testing) print(head(predicted)) if(ctrl$classProbs) { if(!model_failed(mod_rec)) { probValues <- rec_prob(method = method, object = mod_rec, newdata = subset_x(dat, holdoutIndex), param = submod) } else { probValues <- fill_failed_prob(holdoutIndex, lev, submod) } if(testing) print(head(probValues)) } predicted <- trim_values(predicted, ctrl, is_regression) ################################## ## We'll attach data points/columns to the object used ## to assess holdout performance ho_data <- holdout_rec(mod_rec, dat, holdoutIndex) if(!is.null(info$submodels)) { ## collate the predictions across all the sub-models predicted <- lapply(predicted, function(x, lv, dat) { x <- outcome_conversion(x, lv = lev) dat$pred <- x dat }, lv = lev, dat = ho_data) if(testing) print(head(predicted)) ## same for the class probabilities if(ctrl$classProbs) { for(k in seq(along = predicted)) predicted[[k]] <- cbind(predicted[[k]], probValues[[k]]) } predicted <- do.call("rbind", predicted) allParam <- expandParameters(info$loop[parm,,drop = FALSE], submod) rownames(predicted) <- NULL predicted <- cbind(predicted, allParam) ## if saveDetails then save and export 'predicted' } else { pred_val <- outcome_conversion(predicted, lv = lev) predicted <- ho_data predicted$pred <- pred_val if(ctrl$classProbs) predicted <- cbind(predicted, probValues) predicted <- cbind(predicted, info$loop[parm,,drop = FALSE]) } if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(ctrl$index), iter, FALSE) predicted } names(result) <- gsub("^\\.", "", names(result)) out <- ddply(result, as.character(method$parameter$parameter), ctrl$summaryFunction, lev = lev, model = method) list(performance = out, predictions = result) } oob_train_rec <- function(rec, dat, info, method, ctrl, lev, testing = FALSE, ...) { loadNamespace("caret") loadNamespace("recipes") printed <- format(info$loop) colnames(printed) <- gsub("^\\.", "", colnames(printed)) `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) pkgs <- c("methods", "caret", "recipes") if(!is.null(method$library)) pkgs <- c(pkgs, method$library) result <- foreach( parm = 1:nrow(info$loop), .packages = pkgs, .combine = "rbind") %op% { loadNamespace("caret") if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], "", 1, TRUE) if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) set.seed(ctrl$seeds[[1L]][parm]) mod <- rec_model(rec, dat, method = method, tuneValue = info$loop[parm,,drop = FALSE], obsLevels = lev, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...) out <- method$oob(mod$fit) if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], "", 1, FALSE) cbind(as.data.frame(t(out)), info$loop[parm,,drop = FALSE]) } names(result) <- gsub("^\\.", "", names(result)) result } train_rec <- function(rec, dat, info, method, ctrl, lev, testing = FALSE, ...) { loadNamespace("caret") loadNamespace("recipes") printed <- format(info$loop, digits = 4) colnames(printed) <- gsub("^\\.", "", colnames(printed)) ## For 632 estimator, add an element to the index of zeros to trick it into ## fitting and predicting the full data set. resampleIndex <- ctrl$index if(ctrl$method %in% c("boot632", "optimism_boot", "boot_all")) { resampleIndex <- c(list("AllData" = rep(0, nrow(dat))), resampleIndex) ctrl$indexOut <- c(list("AllData" = rep(0, nrow(dat))), ctrl$indexOut) if(!is.null(ctrl$indexExtra)) ctrl$indexExtra <- c(list("AllData" = NULL), ctrl$indexExtra) } `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) keep_pred <- isTRUE(ctrl$savePredictions) || ctrl$savePredictions %in% c("all", "final") pkgs <- c("methods", "caret", "recipes") if(!is.null(method$library)) pkgs <- c(pkgs, method$library) is_regression <- is.null(lev) export <- c("optimism_boot") result <- foreach(iter = seq(along = resampleIndex), .combine = "c", .packages = pkgs, .export = export) %:% foreach(parm = 1L:nrow(info$loop), .combine = "c", .packages = pkgs, .export = export) %op% { if(!(length(ctrl$seeds) == 1L && is.na(ctrl$seeds))) set.seed(ctrl$seeds[[iter]][parm]) loadNamespace("caret") loadNamespace("recipes") if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter) if(names(resampleIndex)[iter] != "AllData") { modelIndex <- resampleIndex[[iter]] holdoutIndex <- ctrl$indexOut[[iter]] } else { modelIndex <- 1:nrow(dat) holdoutIndex <- modelIndex } if(testing) cat("pre-model\n") if(!is.null(info$submodels[[parm]]) && nrow(info$submodels[[parm]]) > 0) { submod <- info$submodels[[parm]] } else submod <- NULL mod_rec <- try( rec_model(rec, subset_x(dat, modelIndex), method = method, tuneValue = info$loop[parm,,drop = FALSE], obsLevels = lev, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...), silent = TRUE) if(testing) print(mod_rec) if(!model_failed(mod_rec)) { predicted <- try( rec_pred(method = method, object = mod_rec, newdata = subset_x(dat, holdoutIndex), param = submod), silent = TRUE) if(pred_failed(predicted)) { fail_warning(settings = printed[parm,,drop = FALSE], msg = predicted, where = "predictions", iter = names(resampleIndex)[iter], verb = ctrl$verboseIter) predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } } else { fail_warning(settings = printed[parm,,drop = FALSE], msg = mod_rec, iter = names(resampleIndex)[iter], verb = ctrl$verboseIter) ## setup a dummy results with NA values for all predictions predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } if(testing) print(head(predicted)) if(ctrl$classProbs) { if(!model_failed(mod_rec)) { probValues <- rec_prob(method = method, object = mod_rec, newdata = subset_x(dat, holdoutIndex), param = submod) } else { probValues <- fill_failed_prob(holdoutIndex, lev, submod) } if(testing) print(head(probValues)) } ################################## predicted <- trim_values(predicted, ctrl, is_regression) ## We'll attach data points/columns to the object used ## to assess holdout performance ## TODO what to do when the recipe fails? ho_data <- holdout_rec(mod_rec, dat, holdoutIndex) if(!is.null(submod)) { ## merge the fixed and seq parameter values together allParam <- expandParameters(info$loop[parm,,drop = FALSE], submod) allParam <- allParam[complete.cases(allParam),, drop = FALSE] ## collate the predictions across all the sub-models predicted <- lapply(predicted, function(x, lv, dat) { x <- outcome_conversion(x, lv = lev) dat$pred <- x dat }, lv = lev, dat = ho_data) if(testing) print(head(predicted)) ## same for the class probabilities if(ctrl$classProbs) predicted <- mapply(cbind, predicted, probValues, SIMPLIFY = FALSE) if(keep_pred) { tmpPred <- predicted for(modIndex in seq(along = tmpPred)) { tmpPred[[modIndex]] <- merge(tmpPred[[modIndex]], allParam[modIndex,,drop = FALSE], all = TRUE) } tmpPred <- rbind.fill(tmpPred) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ## get the performance for this resample for each sub-model thisResample <- lapply(predicted, ctrl$summaryFunction, lev = lev, model = method) if(testing) print(head(thisResample)) ## for classification, add the cell counts if(length(lev) > 1 && length(lev) <= 50) { cells <- lapply(predicted, function(x) flatTable(x$pred, x$obs)) for(ind in seq(along = cells)) thisResample[[ind]] <- c(thisResample[[ind]], cells[[ind]]) } thisResample <- do.call("rbind", thisResample) thisResample <- cbind(allParam, thisResample) } else { pred_val <- outcome_conversion(predicted, lv = lev) tmp <- ho_data tmp$pred <- pred_val if(ctrl$classProbs) tmp <- cbind(tmp, probValues) if(keep_pred) { tmpPred <- tmp tmpPred$rowIndex <- holdoutIndex tmpPred <- merge(tmpPred, info$loop[parm,,drop = FALSE], all = TRUE) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ################################## thisResample <- ctrl$summaryFunction(tmp, lev = lev, model = method) ## if classification, get the confusion matrix if(length(lev) > 1 && length(lev) <= 50) thisResample <- c(thisResample, flatTable(tmp$pred, tmp$obs)) thisResample <- as.data.frame(t(thisResample)) thisResample <- cbind(thisResample, info$loop[parm,,drop = FALSE]) } thisResample$Resample <- names(resampleIndex)[iter] thisResampleExtra <- optimism_rec(ctrl, dat, iter, lev, method, mod_rec, predicted, submod, info$loop[parm,, drop = FALSE]) if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter, FALSE) if(testing) print(thisResample) list(resamples = thisResample, pred = tmpPred, resamplesExtra = thisResampleExtra) } resamples <- rbind.fill(result[names(result) == "resamples"]) pred <- rbind.fill(result[names(result) == "pred"]) resamplesExtra <- rbind.fill(result[names(result) == "resamplesExtra"]) if(ctrl$method %in% c("boot632", "optimism_boot", "boot_all")) { perfNames <- names(resamples) perfNames <- perfNames[!(perfNames %in% c("Resample", as.character(method$parameters$parameter)))] perfNames <- perfNames[!grepl("^\\.cell[0-9]", perfNames)] apparent <- subset(resamples, Resample == "AllData") apparent <- apparent[,!grepl("^\\.cell|Resample", colnames(apparent)), drop = FALSE] names(apparent)[which(names(apparent) %in% perfNames)] <- paste(names(apparent)[which(names(apparent) %in% perfNames)], "Apparent", sep = "") names(apparent) <- gsub("^\\.", "", names(apparent)) if(any(!complete.cases(apparent[,!grepl("^cell|Resample", colnames(apparent)), drop = FALSE]))) warning("There were missing values in the apparent performance measures.") resamples <- subset(resamples, Resample != "AllData") if(!is.null(pred)) { predHat <- subset(pred, Resample == "AllData") pred <- subset(pred, Resample != "AllData") } } names(resamples) <- gsub("^\\.", "", names(resamples)) if(any(!complete.cases(resamples[,!grepl("^cell|Resample", colnames(resamples)), drop = FALSE]))) warning("There were missing values in resampled performance measures.") out <- ddply(resamples[,!grepl("^cell|Resample", colnames(resamples)), drop = FALSE], ## TODO check this for seq models gsub("^\\.", "", colnames(info$loop)), MeanSD, exclude = gsub("^\\.", "", colnames(info$loop))) if(ctrl$method %in% c("boot632", "boot_all")) { out <- merge(out, apparent) const <- 1 - exp(-1) sapply(perfNames, function(perfName) { perfOut <- if(ctrl$method == "boot_all") paste0(perfName, "_632") else perfName out[, perfOut] <<- (const * out[, perfName]) + ((1-const) * out[, paste(perfName, "Apparent", sep = "")]) NULL }) } if(ctrl$method %in% c("optimism_boot", "boot_all")) { out <- merge(out, apparent) out <- merge(out, ddply(resamplesExtra[, !grepl("Resample", colnames(resamplesExtra)), drop = FALSE], colnames(info$loop), function(df, exclude) { colMeans(df[, setdiff(colnames(df), exclude), drop = FALSE]) }, exclude = colnames(info$loop))) sapply(perfNames, function(perfName) { optimism <- out[ , paste0(perfName, "Orig")] - out[ , paste0(perfName, "Boot")] final_estimate <- out[ , paste0(perfName, "Apparent")] + optimism ## Remove unnecessary values out[ , paste0(perfName, "Orig")] <<- NULL out[ , paste0(perfName, "Boot")] <<- NULL perfOut <- if(ctrl$method == "boot_all") paste0(perfName, "_OptBoot") else perfName ## Update estimates out[ , paste0(perfName, "Optimism")] <<- optimism out[ , perfOut] <<- final_estimate NULL }) } list(performance = out, resamples = resamples, predictions = if(keep_pred) pred else NULL) } train_adapt_rec <- function(rec, dat, info, method, ctrl, lev, metric, maximize, testing = FALSE, ...) { loadNamespace("caret") printed <- format(info$loop, digits = 4) colnames(printed) <- gsub("^\\.", "", colnames(printed)) ## no 632, oob or loo resampleIndex <- ctrl$index `%op%` <- getOper(ctrl$allowParallel && getDoParWorkers() > 1) pkgs <- c("methods", "caret") if(!is.null(method$library)) pkgs <- c(pkgs, method$library) init_index <- seq(along = resampleIndex)[1:(ctrl$adaptive$min-1)] extra_index <- seq(along = resampleIndex)[-(1:(ctrl$adaptive$min-1))] keep_pred <- isTRUE(ctrl$savePredictions) || ctrl$savePredictions %in% c("all", "final") init_result <- foreach(iter = seq(along = init_index), .combine = "c", .verbose = FALSE, .packages = pkgs, .errorhandling = "stop") %:% foreach(parm = 1:nrow(info$loop), .combine = "c", .verbose = FALSE, .packages = pkgs, .errorhandling = "stop") %op% { testing <- FALSE if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) set.seed(ctrl$seeds[[iter]][parm]) loadNamespace("caret") loadNamespace("recipes") if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter) modelIndex <- resampleIndex[[iter]] holdoutIndex <- ctrl$indexOut[[iter]] is_regression <- is.null(lev) if(testing) cat("pre-model\n") if(is.null(info$submodels[[parm]]) || nrow(info$submodels[[parm]]) > 0) { submod <- info$submodels[[parm]] } else submod <- NULL mod_rec <- try( rec_model(rec, subset_x(dat, modelIndex), method = method, tuneValue = info$loop[parm,,drop = FALSE], obsLevels = lev, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...), silent = TRUE) if(!model_failed(mod_rec)) { predicted <- try( rec_pred(method = method, object = mod_rec, newdata = subset_x(dat, holdoutIndex), param = submod), silent = TRUE) if(pred_failed(predicted)) { fail_warning(settings = printed[parm,,drop = FALSE], msg = predicted, where = "predictions", iter = names(resampleIndex)[iter], verb = ctrl$verboseIter) predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } } else { fail_warning(settings = printed[parm,,drop = FALSE], msg = mod_rec, iter = names(resampleIndex)[iter], verb = ctrl$verboseIter) ## setup a dummy results with NA values for all predictions predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } if(testing) print(head(predicted)) if(ctrl$classProbs) { if(!model_failed(mod_rec)) { probValues <- rec_prob(method = method, object = mod_rec, newdata = subset_x(dat, holdoutIndex), param = submod) } else { probValues <- fill_failed_prob(holdoutIndex, lev, submod) } if(testing) print(head(probValues)) } ################################## predicted <- trim_values(predicted, ctrl, is_regression) ################################## ho_data <- holdout_rec(mod_rec, dat, holdoutIndex) ################################## if(!is.null(submod)) { ## merge the fixed and seq parameter values together allParam <- expandParameters(info$loop[parm,,drop = FALSE], info$submodels[[parm]]) allParam <- allParam[complete.cases(allParam),, drop = FALSE] ## collate the predicitons across all the sub-models predicted <- lapply(predicted, function(x, lv, dat) { x <- outcome_conversion(x, lv = lev) dat$pred <- x dat }, lv = lev, dat = ho_data) if(testing) print(head(predicted)) ## same for the class probabilities if(ctrl$classProbs) { for(k in seq(along = predicted)) predicted[[k]] <- cbind(predicted[[k]], probValues[[k]]) } if(keep_pred) { tmpPred <- predicted for(modIndex in seq(along = tmpPred)) { tmpPred[[modIndex]]$rowIndex <- holdoutIndex tmpPred[[modIndex]] <- merge(tmpPred[[modIndex]], allParam[modIndex,,drop = FALSE], all = TRUE) } tmpPred <- rbind.fill(tmpPred) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ## get the performance for this resample for each sub-model thisResample <- lapply(predicted, ctrl$summaryFunction, lev = lev, model = method) if(testing) print(head(thisResample)) ## for classification, add the cell counts if(length(lev) > 1 && length(lev) <= 50) { cells <- lapply(predicted, function(x) flatTable(x$pred, x$obs)) for(ind in seq(along = cells)) thisResample[[ind]] <- c(thisResample[[ind]], cells[[ind]]) } thisResample <- do.call("rbind", thisResample) thisResample <- cbind(allParam, thisResample) } else { pred_val <- outcome_conversion(predicted, lv = lev) tmp <- ho_data tmp$pred <- pred_val if(ctrl$classProbs) tmp <- cbind(tmp, probValues) if(keep_pred) { tmpPred <- tmp tmpPred$rowIndex <- holdoutIndex tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ################################## thisResample <- ctrl$summaryFunction(tmp, lev = lev, model = method) ## if classification, get the confusion matrix if(length(lev) > 1 && length(lev) <= 5) thisResample <- c(thisResample, flatTable(tmp$pred, tmp$obs)) thisResample <- as.data.frame(t(thisResample)) thisResample <- cbind(thisResample, info$loop[parm,,drop = FALSE]) } thisResample$Resample <- names(resampleIndex)[iter] if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter, FALSE) list(resamples = thisResample, pred = tmpPred) } ## end initial loop over resamples and models init_resamp <- rbind.fill(init_result[names(init_result) == "resamples"]) init_pred <- if(keep_pred) rbind.fill(init_result[names(init_result) == "pred"]) else NULL names(init_resamp) <- gsub("^\\.", "", names(init_resamp)) if(any(!complete.cases(init_resamp[,!grepl("^cell|Resample", colnames(init_resamp)),drop = FALSE]))) warning("There were missing values in resampled performance measures.") init_summary <- ddply(init_resamp[,!grepl("^cell|Resample", colnames(init_resamp)),drop = FALSE], gsub("^\\.", "", colnames(info$loop)), MeanSD, exclude = gsub("^\\.", "", colnames(info$loop))) new_info <- info num_left <- Inf for(iter in ctrl$adaptive$min:length(resampleIndex)) { if(num_left > 1) { modelIndex <- resampleIndex[[iter]] holdoutIndex <- ctrl$indexOut[[iter]] printed <- format(new_info$loop, digits = 4) colnames(printed) <- gsub("^\\.", "", colnames(printed)) adapt_results <- foreach(parm = 1:nrow(new_info$loop), .combine = "c", .verbose = FALSE, .packages = c("methods", "caret"), .errorhandling = "stop") %op% { if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter, TRUE) if(is.null(new_info$submodels[[parm]]) || nrow(new_info$submodels[[parm]]) > 0) { submod <- new_info$submodels[[parm]] } else submod <- NULL mod_rec <- try( rec_model(rec, subset_x(dat, modelIndex), method = method, tuneValue = new_info$loop[parm,,drop = FALSE], obsLevels = lev, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...), silent = TRUE) if(!model_failed(mod_rec)) { predicted <- try( rec_pred(method = method, object = mod_rec, newdata = subset_x(dat, holdoutIndex), param = submod), silent = TRUE) if(pred_failed(predicted)) { fail_warning(settings = printed[parm,,drop = FALSE], msg = predicted, where = "predictions", iter = names(resampleIndex)[iter], verb = ctrl$verboseIter) predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } } else { fail_warning(settings = printed[parm,,drop = FALSE], msg = mod_rec, iter = names(resampleIndex)[iter], verb = ctrl$verboseIter) ## setup a dummy results with NA values for all predictions predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } if(testing) print(head(predicted)) if(ctrl$classProbs) { if(!model_failed(mod_rec)) { probValues <- rec_prob(method = method, object = mod_rec, newdata = subset_x(dat, holdoutIndex), param = submod) } else { probValues <- fill_failed_prob(holdoutIndex, lev, submod) } if(testing) print(head(probValues)) } ################################## predicted <- trim_values(predicted, ctrl, is_regression) ################################## ho_data <- holdout_rec(mod_rec, dat, holdoutIndex) ################################## if(!is.null(submod)) { ## merge the fixed and seq parameter values together allParam <- expandParameters(new_info$loop[parm,,drop = FALSE], submod) allParam <- allParam[complete.cases(allParam),, drop = FALSE] ## collate the predicitons across all the sub-models predicted <- lapply(predicted, function(x, lv, dat) { x <- outcome_conversion(x, lv = lev) dat$pred <- x dat }, lv = lev, dat = ho_data) if(testing) print(head(predicted)) ## same for the class probabilities if(ctrl$classProbs) { for(k in seq(along = predicted)) predicted[[k]] <- cbind(predicted[[k]], probValues[[k]]) } if(keep_pred) { tmpPred <- predicted for(modIndex in seq(along = tmpPred)) { tmpPred[[modIndex]]$rowIndex <- holdoutIndex tmpPred[[modIndex]] <- merge(tmpPred[[modIndex]], allParam[modIndex,,drop = FALSE], all = TRUE) } tmpPred <- rbind.fill(tmpPred) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ## get the performance for this resample for each sub-model thisResample <- lapply(predicted, ctrl$summaryFunction, lev = lev, model = method) if(testing) print(head(thisResample)) ## for classification, add the cell counts if(length(lev) > 1 && length(lev) <= 50) { cells <- lapply(predicted, function(x) flatTable(x$pred, x$obs)) for(ind in seq(along = cells)) thisResample[[ind]] <- c(thisResample[[ind]], cells[[ind]]) } thisResample <- do.call("rbind", thisResample) thisResample <- cbind(allParam, thisResample) } else { pred_val <- outcome_conversion(predicted, lv = lev) tmp <- ho_data tmp$pred <- pred_val if(ctrl$classProbs) tmp <- cbind(tmp, probValues) if(keep_pred) { tmpPred <- tmp tmpPred$rowIndex <- holdoutIndex tmpPred <- merge(tmpPred, new_info$loop[parm,,drop = FALSE], all = TRUE) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ################################## thisResample <- ctrl$summaryFunction(tmp, lev = lev, model = method) ## if classification, get the confusion matrix if(length(lev) > 1 && length(lev) <= 50) thisResample <- c(thisResample, flatTable(tmp$pred, tmp$obs)) thisResample <- as.data.frame(t(thisResample)) thisResample <- cbind(thisResample, new_info$loop[parm,,drop = FALSE]) } thisResample$Resample <- names(resampleIndex)[iter] if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter, FALSE) list(resamples = thisResample, pred = tmpPred) } ## end initial loop over resamples and models } init_result <- c(init_result, adapt_results) rs <- do.call("rbind", init_result[names(init_result) == "resamples"]) current_mods <- get_id(rs, as.character(method$param$parameter)) if(iter > ctrl$adaptive$min) { latest <- do.call("rbind", adapt_results[names(adapt_results) == "resamples"]) latest <- latest[,as.character(method$param$parameter),drop = FALSE] latest <- latest[!duplicated(latest),,drop = FALSE] current_mods <- merge(current_mods, latest) } rs <- merge(rs, current_mods) if(iter == ctrl$adaptive$min+1) { rs <- filter_on_diff(rs, metric, cutoff = .001, maximize = maximize, verbose = ctrl$verboseIter) } if(ctrl$adaptive$method == "BT") { filtered_mods <- try(bt_eval(rs, metric = metric, maximize = maximize, alpha = ctrl$adaptive$alpha), silent = TRUE) } else { filtered_mods <- try(gls_eval(rs, metric = metric, maximize = maximize, alpha = ctrl$adaptive$alpha), silent = TRUE) } if(class(filtered_mods)[1] == "try-error") { if(ctrl$verboseIter) { cat("x parameter filtering failed:") print(filtered_mods) cat("\n") } filtered_mods <- current_mods } if(ctrl$verboseIter) { excluded <- unique(rs$model_id)[!(unique(rs$model_id) %in% filtered_mods)] if(length(excluded) > 0) { cat(paste("o", length(excluded), "eliminated;")) } else cat("o no models eliminated;", nrow(current_mods), ifelse(nrow(current_mods) > 1, "remain\n", "remains\n")) } current_mods <- current_mods[current_mods$model_id %in% filtered_mods,,drop = FALSE] if(iter == ctrl$adaptive$min) { last_mods <- current_mods } current_mods$model_id <- NULL num_left <- nrow(current_mods) if(ctrl$verboseIter && length(excluded) > 0) cat(num_left, ifelse(num_left > 1, "remain\n", "remains\n")) if(!is.null(method$loop)) { new_info <- method$loop(current_mods) } else new_info$loop <- current_mods last_iter <- iter if(num_left == 1) break } ## finish up last resamples if(ctrl$adaptive$complete && last_iter < length(ctrl$index)) { printed <- format(new_info$loop, digits = 4) colnames(printed) <- gsub("^\\.", "", colnames(printed)) final_index <- seq(along = resampleIndex)[(last_iter+1):length(ctrl$index)] final_result <- foreach(iter = final_index, .combine = "c", .verbose = FALSE, .packages = pkgs, .errorhandling = "stop") %:% foreach(parm = 1:nrow(new_info$loop), .combine = "c", .verbose = FALSE, .packages = pkgs, .errorhandling = "stop") %op% { testing <- FALSE if(!(length(ctrl$seeds) == 1 && is.na(ctrl$seeds))) set.seed(ctrl$seeds[[iter]][parm]) loadNamespace("caret") if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter) modelIndex <- resampleIndex[[iter]] holdoutIndex <- ctrl$indexOut[[iter]] if(testing) cat("pre-model\n") if(is.null(info$submodels[[parm]]) || nrow(info$submodels[[parm]]) > 0) { submod <- info$submodels[[parm]] } else submod <- NULL mod_rec <- try( rec_model(rec, subset_x(dat, modelIndex), method = method, tuneValue = new_info$loop[parm,,drop = FALSE], obsLevels = lev, classProbs = ctrl$classProbs, sampling = ctrl$sampling, ...), silent = TRUE) if(!model_failed(mod_rec)) { predicted <- try( rec_pred(method = method, object = mod_rec, newdata = subset_x(dat, holdoutIndex), param = submod), silent = TRUE) if(pred_failed(predicted)) { fail_warning(settings = printed[parm,,drop = FALSE], msg = predicted, where = "predictions", iter = names(resampleIndex)[iter], verb = ctrl$verboseIter) predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } } else { fail_warning(settings = printed[parm,,drop = FALSE], msg = mod_rec, iter = names(resampleIndex)[iter], verb = ctrl$verboseIter) ## setup a dummy results with NA values for all predictions predicted <- fill_failed_pred(index = holdoutIndex, lev = lev, submod) } if(testing) print(head(predicted)) if(ctrl$classProbs) { if(!model_failed(mod_rec)) { probValues <- rec_prob(method = method, object = mod_rec, newdata = subset_x(dat, holdoutIndex), param = submod) } else { probValues <- fill_failed_prob(holdoutIndex, lev, submod) } if(testing) print(head(probValues)) } ################################## predicted <- trim_values(predicted, ctrl, is_regression) ################################## ho_data <- holdout_rec(mod_rec, dat, holdoutIndex) ################################## if(!is.null(submod)) { ## merge the fixed and seq parameter values together allParam <- expandParameters(new_info$loop[parm,,drop = FALSE], new_info$submodels[[parm]]) allParam <- allParam[complete.cases(allParam),, drop = FALSE] ## collate the predicitons across all the sub-models predicted <- lapply(predicted, function(x, lv, dat) { x <- outcome_conversion(x, lv = lev) dat$pred <- x dat }, lv = lev, dat = ho_data) if(testing) print(head(predicted)) ## same for the class probabilities if(ctrl$classProbs) { for(k in seq(along = predicted)) predicted[[k]] <- cbind(predicted[[k]], probValues[[k]]) } if(keep_pred) { tmpPred <- predicted for(modIndex in seq(along = tmpPred)) { tmpPred[[modIndex]]$rowIndex <- holdoutIndex tmpPred[[modIndex]] <- merge(tmpPred[[modIndex]], allParam[modIndex,,drop = FALSE], all = TRUE) } tmpPred <- rbind.fill(tmpPred) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ## get the performance for this resample for each sub-model thisResample <- lapply(predicted, ctrl$summaryFunction, lev = lev, model = method) if(testing) print(head(thisResample)) ## for classification, add the cell counts if(length(lev) > 1 && length(lev) <= 50) { cells <- lapply(predicted, function(x) flatTable(x$pred, x$obs)) for(ind in seq(along = cells)) thisResample[[ind]] <- c(thisResample[[ind]], cells[[ind]]) } thisResample <- do.call("rbind", thisResample) thisResample <- cbind(allParam, thisResample) } else { pred_val <- outcome_conversion(predicted, lv = lev) tmp <- ho_data tmp$pred <- pred_val if(ctrl$classProbs) tmp <- cbind(tmp, probValues) if(keep_pred) { tmpPred <- tmp tmpPred$rowIndex <- holdoutIndex tmpPred <- merge(tmpPred, new_info$loop[parm,,drop = FALSE], all = TRUE) tmpPred$Resample <- names(resampleIndex)[iter] } else tmpPred <- NULL ################################## thisResample <- ctrl$summaryFunction(tmp, lev = lev, model = method) ## if classification, get the confusion matrix if(length(lev) > 1 && length(lev) <= 50) thisResample <- c(thisResample, flatTable(tmp$pred, tmp$obs)) thisResample <- as.data.frame(t(thisResample)) thisResample <- cbind(thisResample, new_info$loop[parm,,drop = FALSE]) } thisResample$Resample <- names(resampleIndex)[iter] if(ctrl$verboseIter) progress(printed[parm,,drop = FALSE], names(resampleIndex), iter, FALSE) list(resamples = thisResample, pred = tmpPred) } ## end final loop to finish cleanup resamples and models init_result <- c(init_result, final_result) } resamples <- rbind.fill(init_result[names(init_result) == "resamples"]) pred <- if(keep_pred) rbind.fill(init_result[names(init_result) == "pred"]) else NULL names(resamples) <- gsub("^\\.", "", names(resamples)) if(any(!complete.cases(resamples[,!grepl("^cell|Resample", colnames(resamples)),drop = FALSE]))) warning("There were missing values in resampled performance measures.") out <- ddply(resamples[,!grepl("^cell|Resample", colnames(resamples)),drop = FALSE], gsub("^\\.", "", colnames(info$loop)), MeanSD, exclude = gsub("^\\.", "", colnames(info$loop))) num_resamp <- ddply(resamples, gsub("^\\.", "", colnames(info$loop)), function(x) c(.B = nrow(x))) out <- merge(out, num_resamp) list(performance = out, resamples = resamples, predictions = if(keep_pred) pred else NULL) } caret/R/sortImp.R0000644000176200001440000000176113153613153013337 0ustar liggesusers#' @rdname caret-internal #' @importFrom stats runif #' @export sortImp <- function(object, top) { if(object$calledFrom == "varImp") { best <- switch( object$model, pam = "maxabs", "max") } else { best <- "max" } featureRank <- switch(best, max = rank(-apply(object$importance, 1, max, na.rm = TRUE)), min = rank(apply(object$importance, 1, min, na.rm = TRUE)), maxabs = rank(-apply(abs(object$importance), 1, max, na.rm = TRUE))) tiedRanks <- as.numeric(names(table(featureRank)[table(featureRank) > 1])) if(length(tiedRanks) > 0) { for(i in seq(along = tiedRanks)) { tmp <- featureRank[featureRank == tiedRanks[i]] featureRank[featureRank == tiedRanks[i]] <- tmp + runif(length(tmp), min = 0.001, max = 0.999) } } featureOrder <- order(featureRank) out <- object$importance[featureOrder,, drop = FALSE] out <- out[1:top,, drop = FALSE] out } caret/R/icr.R0000644000176200001440000001353313153613153012457 0ustar liggesusers#' @export icr <- function (x, ...) UseMethod("icr") #' Independent Component Regression #' #' Fit a linear regression model using independent components #' #' This produces a model analogous to Principal Components Regression (PCR) but #' uses Independent Component Analysis (ICA) to produce the scores. The user #' must specify a value of \code{n.comp} to pass to #' \code{\link[fastICA]{fastICA}}. #' #' The function \code{\link{preProcess}} to produce the ICA scores for the #' original data and for \code{newdata}. #' #' @aliases icr.formula icr.default icr predict.icr #' @param formula A formula of the form \code{class ~ x1 + x2 + \dots{}} #' @param data Data frame from which variables specified in \code{formula} are #' preferentially to be taken. #' @param weights (case) weights for each example -- if missing defaults to 1. #' @param subset An index vector specifying the cases to be used in the #' training sample. (NOTE: If given, this argument must be named.) #' @param na.action A function to specify the action to be taken if \code{NA}s #' are found. The default action is for the procedure to fail. An alternative #' is na.omit, which leads to rejection of cases with missing values on any #' required variable. (NOTE: If given, this argument must be named.) #' @param contrasts a list of contrasts to be used for some or all of the #' factors appearing as variables in the model formula. #' @param \dots arguments passed to \code{\link[fastICA]{fastICA}} #' @param x matrix or data frame of \code{x} values for examples. #' @param y matrix or data frame of target values for examples. #' @param object an object of class \code{icr} as returned by \code{icr}. #' @param newdata matrix or data frame of test examples. #' @return For \code{icr}, a list with elements \item{model }{the results of #' \code{\link[stats]{lm}} after the ICA transformation} \item{ica #' }{pre-processing information} \item{n.comp }{number of ICA components} #' \item{names }{column names of the original data} #' @author Max Kuhn #' @seealso \code{\link[fastICA]{fastICA}}, \code{\link{preProcess}}, #' \code{\link[stats]{lm}} #' @keywords multivariate #' @examples #' #' data(BloodBrain) #' #' icrFit <- icr(bbbDescr, logBBB, n.comp = 5) #' #' icrFit #' #' predict(icrFit, bbbDescr[1:5,]) #' @method icr formula #' @export icr.formula <- function (formula, data, weights, ..., subset, na.action, contrasts = NULL) { m <- match.call(expand.dots = FALSE) if (is.matrix(eval.parent(m$data))) m$data <- as.data.frame(data) m$... <- m$contrasts <- NULL m[[1]] <- as.name("model.frame") m <- eval.parent(m) Terms <- attr(m, "terms") x <- model.matrix(Terms, m, contrasts) cons <- attr(x, "contrast") xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] w <- model.weights(m) if (length(w) == 0) w <- rep(1, nrow(x)) y <- model.response(m) res <- icr.default(x, y, weights = w, thresh = thresh, ...) res$terms <- Terms res$coefnames <- colnames(x) res$na.action <- attr(m, "na.action") res$contrasts <- cons res$xlevels <- .getXlevels(Terms, m) class(res) <- c("icr.formula", "icr") res } #' @rdname icr.formula #' @method icr default #' @importFrom stats predict lm #' @export icr.default <- function(x, y, ...) { xNames <- colnames(x) pp <- preProcess(x, "ica", ...) x <- predict(pp, x) if(is.factor(y)) stop("y must be numeric") data <- if(is.data.frame(x)) x else as.data.frame(x) data$y <- y modelFit <- lm(y ~ ., data = data) out <- list(model = modelFit, ica = pp, dim = dim(x), n.comp = list(...)$n.comp, names = xNames) class(out) <- "icr" out } #' @importFrom stats4 coef #' @export print.icr <- function (x, digits = max(3, getOption("digits") - 3), ...) { cat("Independent Component Regression\n\n") cat("Created from", x$dim[1], "samples and", x$dim[2], "variables\n\n") if (length(coef(x$model))) { cat("Coefficients:\n") print.default( format( coef(x$model), digits = digits), print.gap = 2, quote = FALSE) } else cat("No coefficients\n") cat("\n") invisible(x) } #' @rdname icr.formula #' @method predict icr #' @importFrom stats .checkMFClasses delete.response model.frame model.matrix predict na.omit fitted #' @export predict.icr <- function(object, newdata, ...) { loadNamespace("fastICA") if (!inherits(object, "icr")) stop("object not of class \"icr\"") if (missing(newdata)) { return(fitted(object$model)) } else { if (inherits(object, "icr.formula")) { newdata <- as.data.frame(newdata) rn <- row.names(newdata) Terms <- delete.response(object$terms) m <- model.frame(Terms, newdata, na.action = na.omit, xlev = object$xlevels) if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) keep <- match(row.names(m), rn) x <- model.matrix(Terms, m, contrasts = object$contrasts) xint <- match("(Intercept)", colnames(x), nomatch = 0) if (xint > 0) x <- x[, -xint, drop = FALSE] } else { if (is.null(dim(newdata))) dim(newdata) <- c(1, length(newdata)) x <- as.matrix(newdata) if (any(is.na(x))) stop("missing values in 'x'") keep <- 1:nrow(x) rn <- rownames(x) } } if(!is.null(object$names)) { x <- x[, object$names, drop = FALSE] } if(!is.data.frame(x)) x <- as.data.frame(x) x <- predict(object$ica, x) predict(object$model, x, ...) } caret/R/caretTheme.R0000644000176200001440000000623513153613153013764 0ustar liggesusers#' @export caretTheme <- function() list( plot.polygon = list(alpha = 1, col = "aliceblue", border = "black", lty = 1, lwd = 1), background = list(col = "transparent"), bar.fill = list(col = "#cce6ff"), box.rectangle = list(col = "black"), box.umbrella = list(col = "black"), dot.line = list(col = "#e8e8e8"), dot.symbol = list(col = "black"), plot.line = list(col = "black"), plot.symbol = list(col = "black"), regions = list(col = c( "#FEF8FA", "#FDF6F9", "#FBF5F9", "#FAF3F8", "#F8F2F7", "#F7F0F7", "#F5EEF6", "#F4EDF5", "#F2EBF5", "#F1EAF4", "#EFE8F3", "#EDE7F2", "#ECE5F1", "#EAE4F1", "#E8E2F0", "#E6E1EF", "#E4DFEE", "#E2DEED", "#E0DCEC", "#DEDAEB", "#DCD9EA", "#D9D7E9", "#D7D6E8", "#D4D4E7", "#D1D2E6", "#CED1E5", "#CCCFE4", "#C8CEE3", "#C5CCE2", "#C2CAE1", "#BFC9E0", "#BBC7DF", "#B8C5DF", "#B4C4DE", "#B1C2DD", "#ADC0DC", "#A9BFDB", "#A6BDDA", "#A2BBD9", "#9EB9D9", "#9BB8D8", "#97B6D7", "#93B4D6", "#8FB2D5", "#8BB0D4", "#87AFD3", "#83ADD2", "#7FABD1", "#7AA9D0", "#76A7CF", "#71A5CE", "#6CA3CC", "#68A1CB", "#63A0CA", "#5D9EC9", "#589CC8", "#539AC6", "#4E98C5", "#4996C4", "#4493C3", "#3F91C1", "#3A8FC0", "#358DBF", "#308BBE", "#2C89BD", "#2887BC", "#2385BB", "#1F83BA", "#1C80B9", "#187EB7", "#157CB6", "#127AB5", "#0F78B3", "#0D76B2", "#0A73B0", "#0971AE", "#076FAC", "#066DAA", "#056AA7", "#0568A5") ), strip.shingle = list(col = c( "#ff7f00", "#00ff00", "#00ffff", "#ff00ff", "#ff0000", "#ffff00", "#0080ff")), strip.background = list(col = c( "#ffe5cc", "#ccffcc", "#ccffff", "#ffccff", "#ffcccc", "#ffffcc", "#cce6ff")), reference.line = list(col = "#e8e8e8"), superpose.line = list( col = c( "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black", "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black", "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black", "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black", "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black", "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black"), lty = rep(1:6, each = 6)), superpose.symbol = list( pch = c( 1, 4, 6, 0, 5, 17, 4, 6, 0, 5, 17, 1, 6, 0, 5, 17, 1, 4, 0, 5, 17, 1, 4, 6, 5, 17, 1, 4, 6, 0 , 17, 1, 4, 6, 0, 5), cex = rep(0.7, 6 * 6), col = c( "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black", "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black", "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black", "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black", "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black", "#9E0142", "#3288BD", "#F46D43", "#5E4FA2", "#66C2A5", "black"))) caret/R/train.default.R0000644000176200001440000017300413202673360014443 0ustar liggesusers#' Fit Predictive Models over Different Tuning Parameters #' #' This function sets up a grid of tuning parameters for a number #' of classification and regression routines, fits each model and #' calculates a resampling based performance measure. #' #' \code{train} can be used to tune models by picking the #' complexity parameters that are associated with the optimal #' resampling statistics. For particular model, a grid of #' parameters (if any) is created and the model is trained on #' slightly different data for each candidate combination of tuning #' parameters. Across each data set, the performance of held-out #' samples is calculated and the mean and standard deviation is #' summarized for each combination. The combination with the #' optimal resampling statistic is chosen as the final model and #' the entire training set is used to fit a final model. #' #' The predictors in \code{x} can be most any object as long as #' the underlying model fit function can deal with the object #' class. The function was designed to work with simple matrices #' and data frame inputs, so some functionality may not work (e.g. #' pre-processing). When using string kernels, the vector of #' character strings should be converted to a matrix with a single #' column. #' #' More details on this function can be found at #' \url{http://topepo.github.io/caret/model-training-and-tuning.html}. #' #' A variety of models are currently available and are enumerated #' by tag (i.e. their model characteristics) at #' \url{http://topepo.github.io/caret/train-models-by-tag.html}. #' #' More details on using recipes can be found at #' \url{http://topepo.github.io/caret/using-recipes-with-train.html}. #' Note that case weights can be passed into \code{train} using a #' role of \code{"case weight"} for a single variable. Also, if #' there are non-predictor columns that should be used when #' determining the model's performance metrics, the role of #' \code{"performance var"} can be used with multiple columns and #' these will be made available during resampling to the #' \code{summaryFunction} function. #' #' @aliases train train.default train.formula #' @param x For the default method, \code{x} is an object where #' samples are in rows and features are in columns. This could be a #' simple matrix, data frame or other type (e.g. sparse matrix) but #' must have column names (see Details below). Preprocessing using #' the \code{preProcess} argument only supports matrices or data #' frames. When using the recipe method, \code{x} should be an #' unprepared \code{\link{recipe}} object that describes the model #' terms (i.e. outcome, predictors, etc.) as well as any #' pre-processing that should be done to the data. This is an #' alternative approach to specifying the model. Note that, when #' using the recipe method, any arguments passed to \code{preProcess} #' will be ignored. See the links and example below for more details #' using recipes. #' @param y A numeric or factor vector containing the outcome for #' each sample. #' @param form A formula of the form \code{y ~ x1 + x2 + ...} #' @param data Data frame from which variables specified in #' \code{formula} or \code{recipe} are preferentially to be taken. #' @param weights A numeric vector of case weights. This argument #' will only affect models that allow case weights. #' @param subset An index vector specifying the cases to be used #' in the training sample. (NOTE: If given, this argument must be #' named.) #' @param na.action A function to specify the action to be taken #' if NAs are found. The default action is for the procedure to #' fail. An alternative is \code{na.omit}, which leads to rejection #' of cases with missing values on any required variable. (NOTE: If #' given, this argument must be named.) #' @param contrasts A list of contrasts to be used for some or all #' the factors appearing as variables in the model formula. #' @param method A string specifying which classification or #' regression model to use. Possible values are found using #' \code{names(getModelInfo())}. See #' \url{http://topepo.github.io/caret/train-models-by-tag.html}. A #' list of functions can also be passed for a custom model #' function. See #' \url{http://topepo.github.io/caret/using-your-own-model-in-train.html} #' for details. #' @param \dots Arguments passed to the classification or #' regression routine (such as #' \code{\link[randomForest]{randomForest}}). Errors will occur if #' values for tuning parameters are passed here. #' @param preProcess A string vector that defines a pre-processing #' of the predictor data. Current possibilities are "BoxCox", #' "YeoJohnson", "expoTrans", "center", "scale", "range", #' "knnImpute", "bagImpute", "medianImpute", "pca", "ica" and #' "spatialSign". The default is no pre-processing. See #' \code{\link{preProcess}} and \code{\link{trainControl}} on the #' procedures and how to adjust them. Pre-processing code is only #' designed to work when \code{x} is a simple matrix or data frame. #' @param metric A string that specifies what summary metric will #' be used to select the optimal model. By default, possible values #' are "RMSE" and "Rsquared" for regression and "Accuracy" and #' "Kappa" for classification. If custom performance metrics are #' used (via the \code{summaryFunction} argument in #' \code{\link{trainControl}}, the value of \code{metric} should #' match one of the arguments. If it does not, a warning is issued #' and the first metric given by the \code{summaryFunction} is #' used. (NOTE: If given, this argument must be named.) #' @param maximize A logical: should the metric be maximized or #' minimized? #' @param trControl A list of values that define how this function #' acts. See \code{\link{trainControl}} and #' \url{http://topepo.github.io/caret/using-your-own-model-in-train.html}. #' (NOTE: If given, this argument must be named.) #' @param tuneGrid A data frame with possible tuning values. The #' columns are named the same as the tuning parameters. Use #' \code{\link{getModelInfo}} to get a list of tuning parameters #' for each model or see #' \url{http://topepo.github.io/caret/available-models.html}. #' (NOTE: If given, this argument must be named.) #' @param tuneLength An integer denoting the amount of granularity #' in the tuning parameter grid. By default, this argument is the #' number of levels for each tuning parameters that should be #' generated by \code{\link{train}}. If \code{\link{trainControl}} #' has the option \code{search = "random"}, this is the maximum #' number of tuning parameter combinations that will be generated #' by the random search. (NOTE: If given, this argument must be #' named.) #' @return A list is returned of class \code{train} containing: #' \item{method }{The chosen model.} \item{modelType }{An #' identifier of the model type.} \item{results }{A data frame the #' training error rate and values of the tuning parameters.} #' \item{bestTune }{A data frame with the final parameters.} #' \item{call}{The (matched) function call with dots expanded} #' \item{dots}{A list containing any ... values passed to the #' original call} \item{metric}{A string that specifies what #' summary metric will be used to select the optimal model.} #' \item{control}{The list of control parameters.} \item{preProcess #' }{Either \code{NULL} or an object of class #' \code{\link{preProcess}}} \item{finalModel}{A fit object using #' the best parameters} \item{trainingData}{A data frame} #' \item{resample}{A data frame with columns for each performance #' metric. Each row corresponds to each resample. If leave-one-out #' cross-validation or out-of-bag estimation methods are requested, #' this will be \code{NULL}. The \code{returnResamp} argument of #' \code{\link{trainControl}} controls how much of the resampled #' results are saved.} \item{perfNames}{A character vector of #' performance metrics that are produced by the summary function} #' \item{maximize}{A logical recycled from the function arguments.} #' \item{yLimits}{The range of the training set outcomes.} #' \item{times}{A list of execution times: \code{everything} is for #' the entire call to \code{train}, \code{final} for the final #' model fit and, optionally, \code{prediction} for the time to #' predict new samples (see \code{\link{trainControl}})} #' @author Max Kuhn (the guts of \code{train.formula} were based #' on Ripley's \code{nnet.formula}) #' @seealso \code{\link{models}}, \code{\link{trainControl}}, #' \code{\link{update.train}}, \code{\link{modelLookup}}, #' \code{\link{createFolds}}, \code{\link[recipes]{recipe}} #' @references \url{http://topepo.github.io/caret/} #' #' Kuhn (2008), ``Building Predictive Models in R Using the caret'' #' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}) #' #' \url{https://topepo.github.io/recipes/} #' @keywords models #' @examples #' #' \dontrun{ #' #' ####################################### #' ## Classification Example #' #' data(iris) #' TrainData <- iris[,1:4] #' TrainClasses <- iris[,5] #' #' knnFit1 <- train(TrainData, TrainClasses, #' method = "knn", #' preProcess = c("center", "scale"), #' tuneLength = 10, #' trControl = trainControl(method = "cv")) #' #' knnFit2 <- train(TrainData, TrainClasses, #' method = "knn", #' preProcess = c("center", "scale"), #' tuneLength = 10, #' trControl = trainControl(method = "boot")) #' #' #' library(MASS) #' nnetFit <- train(TrainData, TrainClasses, #' method = "nnet", #' preProcess = "range", #' tuneLength = 2, #' trace = FALSE, #' maxit = 100) #' #' ####################################### #' ## Regression Example #' #' library(mlbench) #' data(BostonHousing) #' #' lmFit <- train(medv ~ . + rm:lstat, #' data = BostonHousing, #' method = "lm") #' #' library(rpart) #' rpartFit <- train(medv ~ ., #' data = BostonHousing, #' method = "rpart", #' tuneLength = 9) #' #' ####################################### #' ## Example with a custom metric #' #' madSummary <- function (data, #' lev = NULL, #' model = NULL) { #' out <- mad(data$obs - data$pred, #' na.rm = TRUE) #' names(out) <- "MAD" #' out #' } #' #' robustControl <- trainControl(summaryFunction = madSummary) #' marsGrid <- expand.grid(degree = 1, nprune = (1:10) * 2) #' #' earthFit <- train(medv ~ ., #' data = BostonHousing, #' method = "earth", #' tuneGrid = marsGrid, #' metric = "MAD", #' maximize = FALSE, #' trControl = robustControl) #' #' #' ####################################### #' ## Example with a recipe #' #' data(cox2) #' #' cox2 <- cox2Descr #' cox2$potency <- cox2IC50 #' #' library(recipes) #' #' cox2_recipe <- recipe(potency ~ ., data = cox2) %>% #' ## Log the outcome #' step_log(potency, base = 10) %>% #' ## Remove sparse and unbalanced predictors #' step_nzv(all_predictors()) %>% #' ## Surface area predictors are highly correlated so #' ## conduct PCA just on these. #' step_pca(contains("VSA"), prefix = "surf_area_", #' threshold = .95) %>% #' ## Remove other highly correlated predictors #' step_corr(all_predictors(), -starts_with("surf_area_"), #' threshold = .90) %>% #' ## Center and scale all of the non-PCA predictors #' step_center(all_predictors(), -starts_with("surf_area_")) %>% #' step_scale(all_predictors(), -starts_with("surf_area_")) #' #' set.seed(888) #' cox2_lm <- train(cox2_recipe, #' data = cox2, #' method = "lm", #' trControl = trainControl(method = "cv")) #' #' ####################################### #' ## Parallel Processing Example via multicore package #' #' ## library(doMC) #' ## registerDoMC(2) #' #' ## NOTE: don't run models form RWeka when using #' ### multicore. The session will crash. #' #' ## The code for train() does not change: #' set.seed(1) #' usingMC <- train(medv ~ ., #' data = BostonHousing, #' method = "glmboost") #' #' ## or use: #' ## library(doMPI) or #' ## library(doParallel) or #' ## library(doSMP) and so on #' #' } #' #' #' @export train "train" <- function(x, ...){ UseMethod("train") } #' @rdname train #' @importFrom stats predict #' @importFrom utils object.size flush.console #' @importFrom withr with_seed #' @export train.default <- function(x, y, method = "rf", preProcess = NULL, ..., weights = NULL, metric = ifelse(is.factor(y), "Accuracy", "RMSE"), maximize = ifelse(metric %in% c("RMSE", "logLoss", "MAE"), FALSE, TRUE), trControl = trainControl(), tuneGrid = NULL, tuneLength = ifelse(trControl$method == "none", 1, 3)) { startTime <- proc.time() ## get a seed before packages are loaded or recipes are processed rs_seed <- sample.int(.Machine$integer.max, 1L) if(is.null(colnames(x))) stop("Please use column names for `x`", call. = FALSE) if(is.character(y)) y <- as.factor(y) if(is.list(method)) { minNames <- c("library", "type", "parameters", "grid", "fit", "predict", "prob") nameCheck <- minNames %in% names(method) if(!all(nameCheck)) stop(paste("some required components are missing:", paste(minNames[!nameCheck], collapse = ", ")), call. = FALSE) models <- method method <- "custom" } else { models <- getModelInfo(method, regex = FALSE)[[1]] if (length(models) == 0) stop(paste("Model", method, "is not in caret's built-in library"), call. = FALSE) } checkInstall(models$library) for(i in seq(along = models$library)) do.call("requireNamespaceQuietStop", list(package = models$library[i])) if(any(names(models) == "check") && is.function(models$check)) { software_check <- models$check(models$library) } paramNames <- as.character(models$parameters$parameter) funcCall <- match.call(expand.dots = TRUE) modelType <- get_model_type(y) if(!(modelType %in% models$type)) stop(paste("wrong model type for", tolower(modelType)), call. = FALSE) if(grepl("^svm", method) & grepl("String$", method)) { if(is.vector(x) && is.character(x)) { stop("'x' should be a character matrix with a single column for string kernel methods", call. = FALSE) } if(is.matrix(x) && is.numeric(x)) { stop("'x' should be a character matrix with a single column for string kernel methods", call. = FALSE) } if(is.data.frame(x)) { stop("'x' should be a character matrix with a single column for string kernel methods", call. = FALSE) } } if(modelType == "Regression" & length(unique(y)) == 2) warning(paste("You are trying to do regression and your outcome only has", "two possible values Are you trying to do classification?", "If so, use a 2 level factor as your outcome column.")) if(modelType != "Classification" & !is.null(trControl$sampling)) stop("sampling methods are only implemented for classification problems", call. = FALSE) if(!is.null(trControl$sampling)) { trControl$sampling <- parse_sampling(trControl$sampling) } if(any(class(x) == "data.table")) x <- as.data.frame(x) check_dims(x = x, y = y) n <- if(class(y)[1] == "Surv") nrow(y) else length(y) ## TODO add check method and execute here ## Some models that use RWeka start multiple threads and this conflicts with multicore: parallel_check("RWeka", models) parallel_check("keras", models) if(!is.null(preProcess) && !(all(names(preProcess) %in% ppMethods))) stop(paste('pre-processing methods are limited to:', paste(ppMethods, collapse = ", ")), call. = FALSE) if(modelType == "Classification") { ## We should get and save the class labels to ensure that predictions are coerced ## to factors that have the same levels as the original data. This is especially ## important with multiclass systems where one or more classes have low sample sizes ## relative to the others classLevels <- levels(y) attributes(classLevels) <- list(ordered = is.ordered(y)) xtab <- table(y) if(any(xtab == 0)) { xtab_msg <- paste("'", names(xtab)[xtab == 0], "'", collapse = ", ", sep = "") stop(paste("One or more factor levels in the outcome has no data:", xtab_msg), call. = FALSE) } if(trControl$classProbs && any(classLevels != make.names(classLevels))) { stop(paste("At least one of the class levels is not a valid R variable name;", "This will cause errors when class probabilities are generated because", "the variables names will be converted to ", paste(make.names(classLevels), collapse = ", "), ". Please use factor levels that can be used as valid R variable names", " (see ?make.names for help)."), call. = FALSE) } if(metric %in% c("RMSE", "Rsquared")) stop(paste("Metric", metric, "not applicable for classification models"), call. = FALSE) if(!trControl$classProbs && metric == "ROC") stop(paste("Class probabilities are needed to score models using the", "area under the ROC curve. Set `classProbs = TRUE`", "in the trainControl() function."), call. = FALSE) if(trControl$classProbs) { if(!is.function(models$prob)) { warning("Class probabilities were requested for a model that does not implement them") trControl$classProbs <- FALSE } } } else { if(metric %in% c("Accuracy", "Kappa")) stop(paste("Metric", metric, "not applicable for regression models"), call. = FALSE) classLevels <- NA if(trControl$classProbs) { warning("cannnot compute class probabilities for regression") trControl$classProbs <- FALSE } } if(trControl$method == "oob" & is.null(models$oob)) stop("Out of bag estimates are not implemented for this model", call. = FALSE) ## If they don't exist, make the data partitions for the resampling iterations. trControl <- withr::with_seed( rs_seed, make_resamples(trControl, outcome = y) ) if(is.logical(trControl$savePredictions)) { trControl$savePredictions <- if(trControl$savePredictions) "all" else "none" } else { if(!(trControl$savePredictions %in% c("all", "final", "none"))) stop('`savePredictions` should be either logical or "all", "final" or "none"', call. = FALSE) } ## Gather all the pre-processing info. We will need it to pass into the grid creation ## code so that there is a concordance between the data used for modeling and grid creation if(!is.null(preProcess)) { ppOpt <- list(options = preProcess) if(length(trControl$preProcOptions) > 0) ppOpt <- c(ppOpt,trControl$preProcOptions) } else ppOpt <- NULL ## If no default training grid is specified, get one. We have to pass in the formula ## and data for some models (rpart, pam, etc - see manual for more details) if(is.null(tuneGrid)) { if(!is.null(ppOpt) && length(models$parameters$parameter) > 1 && as.character(models$parameters$parameter) != "parameter") { pp <- list(method = ppOpt$options) if("ica" %in% pp$method) pp$n.comp <- ppOpt$ICAcomp if("pca" %in% pp$method) pp$thresh <- ppOpt$thresh if("knnImpute" %in% pp$method) pp$k <- ppOpt$k pp$x <- x ppObj <- do.call("preProcess", pp) tuneGrid <- models$grid(x = predict(ppObj, x), y = y, len = tuneLength, search = trControl$search) rm(ppObj, pp) } else { tuneGrid <- models$grid(x = x, y = y, len = tuneLength, search = trControl$search) if (trControl$search != "grid" && tuneLength < nrow(tuneGrid)) tuneGrid <- tuneGrid[1:tuneLength,,drop = FALSE] } } ## Check to make sure that there are tuning parameters in some cases if(grepl("adaptive", trControl$method) & nrow(tuneGrid) == 1) { stop(paste("For adaptive resampling, there needs to be more than one", "tuning parameter for evaluation"), call. = FALSE) } dotNames <- hasDots(tuneGrid, models) if(dotNames) colnames(tuneGrid) <- gsub("^\\.", "", colnames(tuneGrid)) ## Check tuning parameter names tuneNames <- as.character(models$parameters$parameter) goodNames <- all.equal(sort(tuneNames), sort(names(tuneGrid))) if(!is.logical(goodNames) || !goodNames) { stop(paste("The tuning parameter grid should have columns", paste(tuneNames, collapse = ", ", sep = "")), call. = FALSE) } if(trControl$method == "none" && nrow(tuneGrid) != 1) stop("Only one model should be specified in tuneGrid with no resampling", call. = FALSE) ## In case prediction bounds are used, compute the limits. For now, ## store these in the control object since that gets passed everywhere trControl$yLimits <- if(is.numeric(y)) get_range(y) else NULL if(trControl$method != "none") { ##------------------------------------------------------------------------------------------------------------------------------------------------------# ## For each tuning parameter combination, we will loop over them, fit models and generate predictions. ## We only save the predictions at this point, not the models (and in the case of method = "oob" we ## only save the prediction summaries at this stage. ## trainInfo will hold the information about how we should loop to train the model and what types ## of parameters are used. ## There are two types of methods to build the models: "basic" means that each tuning parameter ## combination requires it's own model fit and "seq" where a single model fit can be used to ## get predictions for multiple tuning parameters. ## The tuneScheme() function is in miscr.R and it helps define the following: ## - A data frame called "loop" with columns for parameters and a row for each model to be fit. ## For "basic" models, this is the same as the tuning grid. For "seq" models, it is only ## the subset of parameters that need to be fit ## - A list called "submodels". If "basic", it is NULL. For "seq" models, it is a list. Each list ## item is a data frame of the parameters that need to be varied for the corresponding row of ## the loop object. ## ## For example, for a gbm model, our tuning grid might be: ## .interaction.depth .n.trees .shrinkage ## 1 50 0.1 ## 1 100 0.1 ## 2 50 0.1 ## 2 100 0.1 ## 2 150 0.1 ## ## For this example: ## ## loop: ## .interaction.depth .shrinkage .n.trees ## 1 0.1 100 ## 2 0.1 150 ## ## submodels: ## [[1]] ## .n.trees ## 50 ## ## [[2]] ## .n.trees ## 50 ## 100 ## ## A simplified version of predictionFunction() would have the following gbm section: ## ## # First get the predictions with the value of n.trees as given in the current ## # row of loop ## out <- predict(modelFit, ## newdata, ## type = "response", ## n.trees = modelFit$tuneValue$.n.trees) ## ## # param is the current value of submodels. In normal prediction mode (i.e ## # when using predict.train), param = NULL. When called within train() ## # with this model, it will have the other values for n.trees. ## # In this case, the output of the function is a list of predictions ## # These values are deconvoluted in workerTasks() in misc.R ## if(!is.null(param)) ## { ## tmp <- vector(mode = "list", length = nrow(param) + 1) ## tmp[[1]] <- out ## ## for(j in seq(along = param$.n.trees)) ## { ## tmp[[j]] <- predict(modelFit, ## newdata, ## type = "response", ## n.trees = param$.n.trees[j]) ## } ## out <- tmp ## # paramCols <- paste(".", as.character(models$parameters$parameter), sep = "") if(is.function(models$loop) && nrow(tuneGrid) > 1){ trainInfo <- models$loop(tuneGrid) if(!all(c("loop", "submodels") %in% names(trainInfo))) stop("The 'loop' function should produce a list with elements 'loop' and 'submodels'", call. = FALSE) lengths <- unlist(lapply(trainInfo$submodels, nrow)) if(all(lengths == 0)) trainInfo$submodels <- NULL } else trainInfo <- list(loop = tuneGrid) num_rs <- if(trControl$method != "oob") length(trControl$index) else 1L if(trControl$method %in% c("boot632", "optimism_boot", "boot_all")) num_rs <- num_rs + 1L ## Set or check the seeds when needed if(is.null(trControl$seeds) || all(is.na(trControl$seeds))) { seeds <- sample.int(n = 1000000L, size = num_rs * nrow(trainInfo$loop) + 1L) seeds <- lapply(seq(from = 1L, to = length(seeds), by = nrow(trainInfo$loop)), function(x) { seeds[x:(x+nrow(trainInfo$loop)-1L)] }) seeds[[num_rs + 1L]] <- seeds[[num_rs + 1L]][1L] trControl$seeds <- seeds } else { if(!(length(trControl$seeds) == 1 && is.na(trControl$seeds))) { ## check versus number of tasks numSeeds <- unlist(lapply(trControl$seeds, length)) badSeed <- (length(trControl$seeds) < num_rs + 1L) || (any(numSeeds[-length(numSeeds)] < nrow(trainInfo$loop))) || (numSeeds[length(numSeeds)] < 1L) if(badSeed) stop(paste("Bad seeds: the seed object should be a list of length", num_rs + 1, "with", num_rs, "integer vectors of size", nrow(trainInfo$loop), "and the last list element having at least a", "single integer"), call. = FALSE) if(any(is.na(unlist(trControl$seeds)))) stop("At least one seed is missing (NA)", call. = FALSE) } } ## SURV TODO: modify defaultSummary for Surv objects if(trControl$method == "oob") { ## delay this test until later perfNames <- metric } else { ## run some data thru the summary function and see what we get testSummary <- evalSummaryFunction(y, wts = weights, ctrl = trControl, lev = classLevels, metric = metric, method = method) perfNames <- names(testSummary) } if(!(metric %in% perfNames)){ oldMetric <- metric metric <- perfNames[1] warning(paste("The metric \"", oldMetric, "\" was not in ", "the result set. ", metric, " will be used instead.", sep = "")) } if(trControl$method == "oob"){ tmp <- oobTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, method = models, ppOpts = preProcess, ctrl = trControl, lev = classLevels, ...) performance <- tmp perfNames <- colnames(performance) perfNames <- perfNames[!(perfNames %in% as.character(models$parameters$parameter))] if(!(metric %in% perfNames)){ oldMetric <- metric metric <- perfNames[1] warning(paste("The metric \"", oldMetric, "\" was not in ", "the result set. ", metric, " will be used instead.", sep = "")) } } else { if(trControl$method == "LOOCV"){ tmp <- looTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, method = models, ppOpts = preProcess, ctrl = trControl, lev = classLevels, ...) performance <- tmp$performance } else { if(!grepl("adapt", trControl$method)){ tmp <- nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, method = models, ppOpts = preProcess, ctrl = trControl, lev = classLevels, ...) performance <- tmp$performance resampleResults <- tmp$resample } else { tmp <- adaptiveWorkflow(x = x, y = y, wts = weights, info = trainInfo, method = models, ppOpts = preProcess, ctrl = trControl, lev = classLevels, metric = metric, maximize = maximize, ...) performance <- tmp$performance resampleResults <- tmp$resample } } } ## Remove extra indices trControl$indexExtra <- NULL ## TODO we used to give resampled results for LOO if(!(trControl$method %in% c("LOOCV", "oob"))) { if(modelType == "Classification" && length(grep("^\\cell", colnames(resampleResults))) > 0) { resampledCM <- resampleResults[, !(names(resampleResults) %in% perfNames)] resampleResults <- resampleResults[, -grep("^\\cell", colnames(resampleResults))] #colnames(resampledCM) <- gsub("^\\.", "", colnames(resampledCM)) } else resampledCM <- NULL } else resampledCM <- NULL if(trControl$verboseIter) { cat("Aggregating results\n") flush.console() } perfCols <- names(performance) perfCols <- perfCols[!(perfCols %in% paramNames)] if(all(is.na(performance[, metric]))) { cat(paste("Something is wrong; all the", metric, "metric values are missing:\n")) print(summary(performance[, perfCols[!grepl("SD$", perfCols)], drop = FALSE])) stop("Stopping", call. = FALSE) } ## Sort the tuning parameters from least complex to most complex if(!is.null(models$sort)) performance <- models$sort(performance) if(any(is.na(performance[, metric]))) warning("missing values found in aggregated results") if(trControl$verboseIter && nrow(performance) > 1) { cat("Selecting tuning parameters\n") flush.console() } ## select the optimal set selectClass <- class(trControl$selectionFunction)[1] ## Select the "optimal" tuning parameter. if(grepl("adapt", trControl$method)) { perf_check <- subset(performance, .B == max(performance$.B)) } else perf_check <- performance ## Make adaptive only look at parameters with B = max(B) if(selectClass == "function") { bestIter <- trControl$selectionFunction(x = perf_check, metric = metric, maximize = maximize) } else { if(trControl$selectionFunction == "oneSE") { bestIter <- oneSE(perf_check, metric, length(trControl$index), maximize) } else { bestIter <- do.call(trControl$selectionFunction, list(x = perf_check, metric = metric, maximize = maximize)) } } if(is.na(bestIter) || length(bestIter) != 1) stop("final tuning parameters could not be determined", call. = FALSE) if(grepl("adapt", trControl$method)) { best_perf <- perf_check[bestIter,as.character(models$parameters$parameter),drop = FALSE] performance$order <- 1:nrow(performance) bestIter <- merge(performance, best_perf)$order performance$order <- NULL } ## Based on the optimality criterion, select the tuning parameter(s) bestTune <- performance[bestIter, paramNames, drop = FALSE] } else { bestTune <- tuneGrid performance <- evalSummaryFunction(y, wts = weights, ctrl = trControl, lev = classLevels, metric = metric, method = method) perfNames <- names(performance) performance <- as.data.frame(t(performance)) performance <- cbind(performance, tuneGrid) performance <- performance[-1,,drop = FALSE] tmp <- resampledCM <- NULL } ## Save some or all of the resampling summary metrics if(!(trControl$method %in% c("LOOCV", "oob", "none"))) { byResample <- switch(trControl$returnResamp, none = NULL, all = { out <- resampleResults colnames(out) <- gsub("^\\.", "", colnames(out)) out }, final = { out <- merge(bestTune, resampleResults) out <- out[,!(names(out) %in% names(tuneGrid)), drop = FALSE] out }) } else { byResample <- NULL } # names(bestTune) <- paste(".", names(bestTune), sep = "") ## Reorder rows of performance orderList <- list() for(i in seq(along = paramNames)) orderList[[i]] <- performance[,paramNames[i]] performance <- performance[do.call("order", orderList),] if(trControl$verboseIter) { bestText <- paste(paste(names(bestTune), "=", format(bestTune, digits = 3)), collapse = ", ") if(nrow(performance) == 1) bestText <- "final model" cat("Fitting", bestText, "on full training set\n") flush.console() } ## Make the final model based on the tuning results indexFinal <- if(is.null(trControl$indexFinal)) seq(along = y) else trControl$indexFinal if(!(length(trControl$seeds) == 1 && is.na(trControl$seeds))) set.seed(trControl$seeds[[length(trControl$seeds)]][1]) finalTime <- system.time( finalModel <- createModel(x = subset_x(x, indexFinal), y = y[indexFinal], wts = weights[indexFinal], method = models, tuneValue = bestTune, obsLevels = classLevels, pp = ppOpt, last = TRUE, classProbs = trControl$classProbs, sampling = trControl$sampling, ...)) if(trControl$trim && !is.null(models$trim)) { if(trControl$verboseIter) old_size <- object.size(finalModel$fit) finalModel$fit <- models$trim(finalModel$fit) if(trControl$verboseIter) { new_size <- object.size(finalModel$fit) reduction <- format(old_size - new_size, units = "Mb") if(reduction == "0 Mb") reduction <- "< 0 Mb" p_reduction <- (unclass(old_size) - unclass(new_size))/unclass(old_size)*100 p_reduction <- if(p_reduction < 1) "< 1%" else paste0(round(p_reduction, 0), "%") cat("Final model footprint reduced by", reduction, "or", p_reduction, "\n") } } ## get pp info pp <- finalModel$preProc finalModel <- finalModel$fit ## Remove this and check for other places it is reference ## replaced by tuneValue if(method == "pls") finalModel$bestIter <- bestTune ## To use predict.train and automatically use the optimal lambda, ## we need to save it if(method == "glmnet") finalModel$lambdaOpt <- bestTune$lambda if(trControl$returnData) { outData <- if(!is.data.frame(x)) try(as.data.frame(x), silent = TRUE) else x if(inherits(outData, "try-error")) { warning("The training data could not be converted to a data frame for saving") outData <- NULL } else { outData$.outcome <- y if(!is.null(weights)) outData$.weights <- weights } } else outData <- NULL if(trControl$savePredictions == "final") tmp$predictions <- merge(bestTune, tmp$predictions) endTime <- proc.time() times <- list(everything = endTime - startTime, final = finalTime) out <- structure(list(method = method, modelInfo = models, modelType = modelType, results = performance, pred = tmp$predictions, bestTune = bestTune, call = funcCall, dots = list(...), metric = metric, control = trControl, finalModel = finalModel, preProcess = pp, trainingData = outData, resample = byResample, resampledCM = resampledCM, perfNames = perfNames, maximize = maximize, yLimits = trControl$yLimits, times = times, levels = classLevels), class = "train") trControl$yLimits <- NULL if(trControl$timingSamps > 0) { pData <- x[sample(1:nrow(x), trControl$timingSamps, replace = TRUE),,drop = FALSE] out$times$prediction <- system.time(predict(out, pData)) } else out$times$prediction <- rep(NA, 3) out } #' @rdname train #' @importFrom stats .getXlevels complete.cases contrasts model.frame model.matrix model.response model.weights na.fail #' @export train.formula <- function (form, data, ..., weights, subset, na.action = na.fail, contrasts = NULL) { m <- match.call(expand.dots = FALSE) if (is.matrix(eval.parent(m$data))) m$data <- as.data.frame(data) m$... <- m$contrasts <- NULL check_na_conflict(match.call(expand.dots = TRUE)) ## Look for missing `na.action` in call. To make the default (`na.fail`) ## recognizable by `eval.parent(m)`, we need to add it to the call ## object `m` if(!("na.action" %in% names(m))) m$na.action <- quote(na.fail) # do we need the double colon here? m[[1]] <- quote(stats::model.frame) m <- eval.parent(m) if(nrow(m) < 1) stop("Every row has at least one missing value were found", call. = FALSE) Terms <- attr(m, "terms") x <- model.matrix(Terms, m, contrasts) cons <- attr(x, "contrast") int_flag <- grepl("(Intercept)", colnames(x)) if (any(int_flag)) x <- x[, !int_flag, drop = FALSE] w <- as.vector(model.weights(m)) y <- model.response(m) res <- train(x, y, weights = w, ...) res$terms <- Terms res$coefnames <- colnames(x) res$call <- match.call() res$na.action <- attr(m, "na.action") res$contrasts <- cons res$xlevels <- .getXlevels(Terms, m) if(!is.null(res$trainingData)) { ## We re-save the original data from the formula interface ## since it has not been converted to dummy variables. res$trainingData <- data[,all.vars(Terms), drop = FALSE] isY <- names(res$trainingData) %in% as.character(form[[2]]) if(any(isY)) colnames(res$trainingData)[isY] <- ".outcome" } class(res) <- c("train", "train.formula") res } #' @rdname train #' @importFrom withr with_seed #' @export train.recipe <- function(x, data, method = "rf", ..., metric = ifelse(is.factor(y_dat), "Accuracy", "RMSE"), maximize = ifelse(metric %in% c("RMSE", "logLoss", "MAE"), FALSE, TRUE), trControl = trainControl(), tuneGrid = NULL, tuneLength = ifelse(trControl$method == "none", 1, 3)) { startTime <- proc.time() ## get a seed before packages are loaded or recipes are processed rs_seed <- sample.int(.Machine$integer.max, 1L) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ preproc_dots(...) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if(is.list(method)) { minNames <- c("library", "type", "parameters", "grid", "fit", "predict", "prob") nameCheck <- minNames %in% names(method) if(!all(nameCheck)) stop(paste("some required components are missing:", paste(minNames[!nameCheck], collapse = ", ")), call. = FALSE) models <- method method <- "custom" } else { models <- getModelInfo(method, regex = FALSE)[[1]] if (length(models) == 0) stop(paste("Model", method, "is not in caret's built-in library"), call. = FALSE) } checkInstall(models$library) for(i in seq(along = models$library)) do.call("requireNamespace", list(package = models$library[i])) if(any(names(models) == "check") && is.function(models$check)) { software_check <- models$check(models$library) } # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # prep and bake recipe on entire training set if(trControl$verboseIter) { cat("Preparing recipe\n") flush.console() } trained_rec <- prep(x, training = data, fresh = TRUE, retain = TRUE, verbose = FALSE, stringsAsFactors = TRUE) x_dat <- juice(trained_rec, all_predictors()) y_dat <- juice(trained_rec, all_outcomes()) if(ncol(y_dat) > 1) stop("`train` doesn't support multivariate outcomes") y_dat <- getElement(y_dat, names(y_dat)) is_weight <- summary(trained_rec)$role == "case weight" if(any(is_weight)) { if(sum(is_weight) > 1) stop("Ony one column can be used as a case weight.") weights <- juice(trained_rec, has_role("case weight")) weights <- getElement(weights, names(weights)) } else weights <- NULL is_perf <- summary(trained_rec)$role == "performance var" if(any(is_perf)) { perf_data <- juice(trained_rec, has_role("performance var")) } else perf_data <- NULL # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ paramNames <- as.character(models$parameters$parameter) funcCall <- match.call(expand.dots = TRUE) modelType <- get_model_type(y_dat) if(!(modelType %in% models$type)) stop(paste("wrong model type for", tolower(modelType)), call. = FALSE) ## RECIPE the rec might produce character `x_dat` so convert if these ## models are used? These need to be re-though since no matrix results if(grepl("^svm", method) & grepl("String$", method)) { if(is.vector(x_dat) && is.character(x_dat)) { stop("'x_dat' should be a character matrix with a single column for string kernel methods", call. = FALSE) } if(is.matrix(x_dat) && is.numeric(x_dat)) { stop("'x_dat' should be a character matrix with a single column for string kernel methods", call. = FALSE) } if(is.data.frame(x_dat)) { stop("'x_dat' should be a character matrix with a single column for string kernel methods", call. = FALSE) } } if(modelType == "Regression" & length(unique(y_dat)) == 2) warning(paste("You are trying to do regression and your outcome only has", "two possible values Are you trying to do classification?", "If so, use a 2 level factor as your outcome column.")) if(modelType != "Classification" & !is.null(trControl$sampling)) stop("sampling methods are only implemented for classification problems", call. = FALSE) if(!is.null(trControl$sampling)) { trControl$sampling <- parse_sampling(trControl$sampling) } check_dims(x = x_dat, y = y_dat) n <- if(class(y_dat)[1] == "Surv") nrow(y_dat) else length(y_dat) ## Some models that use RWeka start multiple threads and this conflicts with multicore: parallel_check("RWeka", models) parallel_check("keras", models) if(modelType == "Classification") { ## We should get and save the class labels to ensure that predictions are coerced ## to factors that have the same levels as the original data. This is especially ## important with multiclass systems where one or more classes have low sample sizes ## relative to the others classLevels <- levels(y_dat) attributes(classLevels) <- list(ordered = is.ordered(y_dat)) xtab <- table(y_dat) if(any(xtab == 0)) { xtab_msg <- paste("'", names(xtab)[xtab == 0], "'", collapse = ", ", sep = "") stop(paste("One or more factor levels in the outcome has no data:", xtab_msg), call. = FALSE) } if(trControl$classProbs && any(classLevels != make.names(classLevels))) { stop(paste("At least one of the class levels is not a valid R variable name;", "This will cause errors when class probabilities are generated because", "the variables names will be converted to ", paste(make.names(classLevels), collapse = ", "), ". Please use factor levels that can be used as valid R variable names", " (see ?make.names for help)."), call. = FALSE) } if(metric %in% c("RMSE", "Rsquared")) stop(paste("Metric", metric, "not applicable for classification models"), call. = FALSE) if(!trControl$classProbs && metric == "ROC") stop(paste("Class probabilities are needed to score models using the", "area under the ROC curve. Set `classProbs = TRUE`", "in the trainControl() function."), call. = FALSE) if(trControl$classProbs) { if(!is.function(models$prob)) { warning("Class probabilities were requested for a model that does not implement them") trControl$classProbs <- FALSE } } } else { if(metric %in% c("Accuracy", "Kappa")) stop(paste("Metric", metric, "not applicable for regression models"), call. = FALSE) classLevels <- NA if(trControl$classProbs) { warning("cannnot compute class probabilities for regression") trControl$classProbs <- FALSE } } if(trControl$method == "oob" & is.null(models$oob)) stop("Out of bag estimates are not implemented for this model", call. = FALSE) ## If they don't exist, make the data partitions for the resampling iterations. trControl <- withr::with_seed( rs_seed, make_resamples(trControl, outcome = y_dat) ) if(is.logical(trControl$savePredictions)) { trControl$savePredictions <- if(trControl$savePredictions) "all" else "none" } else { if(!(trControl$savePredictions %in% c("all", "final", "none"))) stop('`savePredictions` should be either logical or "all", "final" or "none"', call. = FALSE) } if(is.null(tuneGrid)) { tuneGrid <- models$grid(x = x_dat, y = y_dat, len = tuneLength, search = trControl$search) if (trControl$search != "grid" && tuneLength < nrow(tuneGrid)) tuneGrid <- tuneGrid[1:tuneLength,,drop = FALSE] } ## Check to make sure that there are tuning parameters in some cases if(grepl("adaptive", trControl$method) & nrow(tuneGrid) == 1) { stop(paste("For adaptive resampling, there needs to be more than one", "tuning parameter for evaluation"), call. = FALSE) } dotNames <- hasDots(tuneGrid, models) if(dotNames) colnames(tuneGrid) <- gsub("^\\.", "", colnames(tuneGrid)) ## Check tuning parameter names tuneNames <- as.character(models$parameters$parameter) goodNames <- all.equal(sort(tuneNames), sort(names(tuneGrid))) if(!is.logical(goodNames) || !goodNames) { stop(paste("The tuning parameter grid should have columns", paste(tuneNames, collapse = ", ", sep = "")), call. = FALSE) } if(trControl$method == "none" && nrow(tuneGrid) != 1) stop("Only one model should be specified in tuneGrid with no resampling", call. = FALSE) ## In case prediction bounds are used, compute the limits. For now, ## store these in the control object since that gets passed everywhere trControl$yLimits <- if(is.numeric(y_dat)) get_range(y_dat) else NULL if(trControl$method != "none") { if(is.function(models$loop) && nrow(tuneGrid) > 1){ trainInfo <- models$loop(tuneGrid) if(!all(c("loop", "submodels") %in% names(trainInfo))) stop("The 'loop' function should produce a list with elements 'loop' and 'submodels'", call. = FALSE) lengths <- unlist(lapply(trainInfo$submodels, nrow)) if(all(lengths == 0)) trainInfo$submodels <- NULL } else trainInfo <- list(loop = tuneGrid) num_rs <- if(trControl$method != "oob") length(trControl$index) else 1L if(trControl$method %in% c("boot632", "optimism_boot", "boot_all")) num_rs <- num_rs + 1L ## Set or check the seeds when needed if(is.null(trControl$seeds) || all(is.na(trControl$seeds))) { seeds <- sample.int(n = 1000000L, size = num_rs * nrow(trainInfo$loop) + 1L) seeds <- lapply(seq(from = 1L, to = length(seeds), by = nrow(trainInfo$loop)), function(x) { seeds[x:(x+nrow(trainInfo$loop)-1L)] }) seeds[[num_rs + 1L]] <- seeds[[num_rs + 1L]][1L] trControl$seeds <- seeds } else { if(!(length(trControl$seeds) == 1 && is.na(trControl$seeds))) { ## check versus number of tasks numSeeds <- unlist(lapply(trControl$seeds, length)) badSeed <- (length(trControl$seeds) < num_rs + 1L) || (any(numSeeds[-length(numSeeds)] < nrow(trainInfo$loop))) || (numSeeds[length(numSeeds)] < 1L) if(badSeed) stop(paste("Bad seeds: the seed object should be a list of length", num_rs + 1, "with", num_rs, "integer vectors of size", nrow(trainInfo$loop), "and the last list element having at least a", "single integer"), call. = FALSE) if(any(is.na(unlist(trControl$seeds)))) stop("At least one seed is missing (NA)", call. = FALSE) } } if(trControl$method == "oob") { ## delay this test until later perfNames <- metric } else { ## run some data thru the summary function and see what we get testSummary <- evalSummaryFunction(y_dat, perf = perf_data, wts = weights, ctrl = trControl, lev = classLevels, metric = metric, method = method) perfNames <- names(testSummary) } if(!(metric %in% perfNames)){ oldMetric <- metric metric <- perfNames[1] warning(paste("The metric \"", oldMetric, "\" was not in ", "the result set. ", metric, " will be used instead.", sep = "")) } if(trControl$method == "oob"){ tmp <- oob_train_rec(rec = x, dat = data, info = trainInfo, method = models, ctrl = trControl, lev = classLevels, ...) performance <- tmp perfNames <- colnames(performance) perfNames <- perfNames[!(perfNames %in% as.character(models$parameters$parameter))] if(!(metric %in% perfNames)){ oldMetric <- metric metric <- perfNames[1] warning(paste("The metric \"", oldMetric, "\" was not in ", "the result set. ", metric, " will be used instead.", sep = "")) } } else { if(trControl$method == "LOOCV"){ tmp <- loo_train_rec(rec = x, dat = data, info = trainInfo, method = models, ctrl = trControl, lev = classLevels, ...) performance <- tmp$performance } else { if(!grepl("adapt", trControl$method)){ tmp <- train_rec(rec = x, dat = data, info = trainInfo, method = models, ctrl = trControl, lev = classLevels, ...) performance <- tmp$performance resampleResults <- tmp$resample } else { tmp <- train_adapt_rec(rec = x, dat = data, info = trainInfo, method = models, ctrl = trControl, lev = classLevels, metric = metric, maximize = maximize, ...) performance <- tmp$performance resampleResults <- tmp$resample } } } ## Remove extra indices trControl$indexExtra <- NULL if(!(trControl$method %in% c("LOOCV", "oob"))) { if(modelType == "Classification" && length(grep("^\\cell", colnames(resampleResults))) > 0) { resampledCM <- resampleResults[, !(names(resampleResults) %in% perfNames)] resampleResults <- resampleResults[, -grep("^\\cell", colnames(resampleResults))] #colnames(resampledCM) <- gsub("^\\.", "", colnames(resampledCM)) } else resampledCM <- NULL } else resampledCM <- NULL if(trControl$verboseIter) { cat("Aggregating results\n") flush.console() } perfCols <- names(performance) perfCols <- perfCols[!(perfCols %in% paramNames)] if(all(is.na(performance[, metric]))) { cat(paste("Something is wrong; all the", metric, "metric values are missing:\n")) print(summary(performance[, perfCols[!grepl("SD$", perfCols)], drop = FALSE])) stop("Stopping", call. = FALSE) } ## Sort the tuning parameters from least complex to most complex if(!is.null(models$sort)) performance <- models$sort(performance) if(any(is.na(performance[, metric]))) warning("missing values found in aggregated results") if(trControl$verboseIter && nrow(performance) > 1) { cat("Selecting tuning parameters\n") flush.console() } ## select the optimal set selectClass <- class(trControl$selectionFunction)[1] ## Select the "optimal" tuning parameter. if(grepl("adapt", trControl$method)) { perf_check <- subset(performance, .B == max(performance$.B)) } else perf_check <- performance ## Make adaptive only look at parameters with B = max(B) if(selectClass == "function") { bestIter <- trControl$selectionFunction(x = perf_check, metric = metric, maximize = maximize) } else { if(trControl$selectionFunction == "oneSE") { bestIter <- oneSE(perf_check, metric, length(trControl$index), maximize) } else { bestIter <- do.call(trControl$selectionFunction, list(x = perf_check, metric = metric, maximize = maximize)) } } if(is.na(bestIter) || length(bestIter) != 1) stop("final tuning parameters could not be determined", call. = FALSE) if(grepl("adapt", trControl$method)) { best_perf <- perf_check[bestIter,as.character(models$parameters$parameter),drop = FALSE] performance$order <- 1:nrow(performance) bestIter <- merge(performance, best_perf)$order performance$order <- NULL } ## Based on the optimality criterion, select the tuning parameter(s) bestTune <- performance[bestIter, paramNames, drop = FALSE] } else { bestTune <- tuneGrid performance <- evalSummaryFunction(y_dat, wts = weights, ctrl = trControl, lev = classLevels, metric = metric, method = method) perfNames <- names(performance) performance <- as.data.frame(t(performance)) performance <- cbind(performance, tuneGrid) performance <- performance[-1,,drop = FALSE] tmp <- resampledCM <- NULL } # end(trControl$method != "none") ## Save some or all of the resampling summary metrics if(!(trControl$method %in% c("LOOCV", "oob", "none"))) { byResample <- switch(trControl$returnResamp, none = NULL, all = { out <- resampleResults colnames(out) <- gsub("^\\.", "", colnames(out)) out }, final = { out <- merge(bestTune, resampleResults) out <- out[,!(names(out) %in% names(tuneGrid)), drop = FALSE] out }) } else { byResample <- NULL } ## Reorder rows of performance orderList <- list() for(i in seq(along = paramNames)) orderList[[i]] <- performance[,paramNames[i]] performance <- performance[do.call("order", orderList),] if(trControl$verboseIter) { bestText <- paste(paste(names(bestTune), "=", format(bestTune, digits = 3)), collapse = ", ") if(nrow(performance) == 1) bestText <- "final model" cat("Fitting", bestText, "on full training set\n") flush.console() } ## Make the final model based on the tuning results indexFinal <- if(is.null(trControl$indexFinal)) seq(along = y_dat) else trControl$indexFinal if(!(length(trControl$seeds) == 1 && is.na(trControl$seeds))) set.seed(trControl$seeds[[length(trControl$seeds)]][1]) finalTime <- system.time( finalModel <- rec_model(x, subset_x(data, indexFinal), method = models, tuneValue = bestTune, obsLevels = classLevels, last = TRUE, classProbs = trControl$classProbs, sampling = trControl$sampling, ...) ) if(trControl$trim && !is.null(models$trim)) { if(trControl$verboseIter) old_size <- object.size(finalModel$fit) finalModel$fit <- models$trim(finalModel$fit) if(trControl$verboseIter) { new_size <- object.size(finalModel$fit) reduction <- format(old_size - new_size, units = "Mb") if(reduction == "0 Mb") reduction <- "< 0 Mb" p_reduction <- (unclass(old_size) - unclass(new_size))/unclass(old_size)*100 p_reduction <- if(p_reduction < 1) "< 1%" else paste0(round(p_reduction, 0), "%") cat("Final model footprint reduced by", reduction, "or", p_reduction, "\n") } } finalModel <- finalModel$fit ## Remove this and check for other places it is reference ## replaced by tuneValue if(method == "pls") finalModel$bestIter <- bestTune ## To use predict.train and automatically use the optimal lambda, ## we need to save it if(method == "glmnet") finalModel$lambdaOpt <- bestTune$lambda if(trControl$returnData) { outData <- data } else outData <- NULL if(trControl$savePredictions == "final") tmp$predictions <- merge(bestTune, tmp$predictions) endTime <- proc.time() times <- list(everything = endTime - startTime, final = finalTime) out <- structure(list(method = method, modelInfo = models, modelType = modelType, recipe = trained_rec, results = performance, pred = tmp$predictions, bestTune = bestTune, call = funcCall, dots = list(...), metric = metric, control = trControl, finalModel = finalModel, trainingData = outData, resample = byResample, resampledCM = resampledCM, perfNames = perfNames, maximize = maximize, yLimits = trControl$yLimits, times = times, levels = classLevels, rs_seed = rs_seed), class = c("train.recipe", "train")) trControl$yLimits <- NULL if(trControl$timingSamps > 0) { pData <- x_dat[sample(1:nrow(x_dat), trControl$timingSamps, replace = TRUE),,drop = FALSE] out$times$prediction <- system.time(predict(out, pData)) } else out$times$prediction <- rep(NA, 3) out } #' @method summary train #' @export summary.train <- function(object, ...) summary(object$finalModel, ...) #' @importFrom stats predict residuals #' @export residuals.train <- function(object, ...) { if(object$modelType != "Regression") stop("train() only produces residuals on numeric outcomes", call. = FALSE) resid <- residuals(object$finalModel, ...) if(is.null(resid)) { if(!is.null(object$trainingData)) { resid <- object$trainingData$.outcome - predict(object, object$trainingData[, names(object$trainingData) != ".outcome",drop = FALSE]) } else stop("The training data must be saved to produce residuals", call. = FALSE) } resid } #' @importFrom stats predict fitted #' @export fitted.train <- function(object, ...) { prd <- fitted(object$finalModel) if(is.null(prd)) { if(!is.null(object$trainingData)) { prd <- predict(object, object$trainingData[, names(object$trainingData) != ".outcome",drop = FALSE]) } else stop("The training data must be saved to produce fitted values", call. = FALSE) } prd } caret/R/predict.PLS.R0000644000176200001440000000322213153613153013763 0ustar liggesusers predict.PLS <- function(object, newdata, ncomp = NULL, type = ifelse(object$isRegression, "response", "class"), ...) { if(is.null(ncomp) & !is.null(object$bestIter$.ncomp)) ncomp <- object$bestIter$.ncomp if(is.null(ncomp)) stop("the number of components must be given") # adapted from the pls package if(object$isRegression & c(type %in% c("class", "prob"))) stop("cannot get a class estimate if the original y was not a factor") if(!(type %in% c("response", "class", "prob"))) stop("type must be either response, class or prob") if(missing(newdata)) newdata <- object$x if(!is.matrix(newdata)) newdata <- as.matrix(newdata) # from coef.mvr in pls package B <- object$coefficients[, , 1:ncomp, drop = FALSE] dB <- dim(B) dB[1] <- dB[1] + 1 dnB <- dimnames(B) dnB[[1]] <- c("(Intercept)", dnB[[1]]) BInt <- array(dim = dB, dimnames = dnB) BInt[-1, , ] <- B for (i in seq(along = 1:ncomp)) BInt[1, , i] <- object$Ymeans - object$Xmeans %*% B[, , i] B <- BInt # stop # from predict.mvr in pls package dPred <- dim(B) dPred[1] <- dim(newdata)[1] dnPred <- dimnames(B) dnPred[1] <- dimnames(newdata)[1] pred <- array(dim = dPred, dimnames = dnPred) predY <- sweep(newdata %*% B[-1, , ncomp], 2, B[1, , ncomp], "+") # stop out <- switch( type, response = predY, class = { classNum <- apply(predY, 1, which.max) factor(object$yLevels[classNum], levels = object$yLevels) }, # use softmax technique here prob = t(apply(predY, 1, function(data) exp(data)/sum(exp(data))))) out } caret/R/predict.train.R0000644000176200001440000001652313153613153014452 0ustar liggesusers#' @importFrom stats predict #' @export predict.list <- function(object, ...) { out <- lapply(object, predict, ... = ...) if(!is.null(names(object))) names(out) <- names(object) out } #' Extract predictions and class probabilities from train objects #' #' These functions can be used for a single \code{train} object or to loop #' through a number of \code{train} objects to calculate the training and test #' data predictions and class probabilities. #' #' These functions are wrappers for the specific prediction functions in each #' modeling package. In each case, the optimal tuning values given in the #' \code{tuneValue} slot of the \code{finalModel} object are used to predict. #' #' To get simple predictions for a new data set, the \code{predict} function #' can be used. Limits can be imposed on the range of predictions. See #' \code{\link{trainControl}} for more information. #' #' To get predictions for a series of models at once, a list of #' \code{\link{train}} objects can be passes to the \code{predict} function and #' a list of model predictions will be returned. #' #' The two extraction functions can be used to get the predictions and observed #' outcomes at once for the training, test and/or unknown samples at once in a #' single data frame (instead of a list of just the predictions). These objects #' can then be passes to \code{\link{plotObsVsPred}} or #' \code{\link{plotClassProbs}}. #' #' @aliases predict.list predict.train extractPrediction extractProb #' @param object For \code{predict.train}, an object of class #' \code{\link{train}}. For \code{predict.list}, a list of objects of class #' \code{\link{train}}. #' @param newdata an optional set of data to predict on. If \code{NULL}, then #' the original training data are used #' @param type either "raw" or "prob", for the number/class predictions or #' class probabilities, respectively. Class probabilities are not available for #' all classification models #' @param models a list of objects of the class \code{train}. The objects must #' have been generated with \code{fitBest = FALSE} and \code{returnData = #' TRUE}. #' @param na.action the method for handling missing data #' @param testX an optional set of data to predict #' @param testY an optional outcome corresponding to the data given in #' \code{testX} #' @param unkX another optional set of data to predict without known outcomes #' @param unkOnly a logical to bypass training and test set predictions. This #' is useful if speed is needed for unknown samples. #' @param verbose a logical for printing messages #' @param \dots only used for \code{sort} and \code{modelCor} and captures #' arguments to pass to \code{sort} or \code{FUN}. #' @return #' #' For \code{predict.train}, a vector of predictions if \code{type = "raw"} or #' a data frame of class probabilities for \code{type = "prob"}. In the latter #' case, there are columns for each class. #' #' For \code{predict.list}, a list results. Each element is produced by #' \code{predict.train}. #' #' For \code{extractPrediction}, a data frame with columns: \item{obs }{the #' observed training and test data} \item{pred }{predicted values} #' \item{model}{the type of model used to predict} \item{object}{the names of #' the objects within \code{models}. If \code{models} is an un-named list, the #' values of \code{object} will be "Object1", "Object2" and so on} #' \item{dataType }{"Training", "Test" or "Unknown" depending on what was #' specified} #' #' For \code{extractProb}, a data frame. There is a column for each class #' containing the probabilities. The remaining columns are the same as above #' (although the \code{pred} column is the predicted class) #' @author Max Kuhn #' @seealso \code{\link{plotObsVsPred}}, \code{\link{plotClassProbs}}, #' \code{\link{trainControl}} #' @references Kuhn (2008), ``Building Predictive Models in R Using the caret'' #' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}) #' @keywords manip #' @method predict train #' @export #' @examples #' #' \dontrun{ #' #' knnFit <- train(Species ~ ., data = iris, method = "knn", #' trControl = trainControl(method = "cv")) #' #' rdaFit <- train(Species ~ ., data = iris, method = "rda", #' trControl = trainControl(method = "cv")) #' #' predict(knnFit) #' predict(knnFit, type = "prob") #' #' bothModels <- list(knn = knnFit, #' tree = rdaFit) #' #' predict(bothModels) #' #' extractPrediction(bothModels, testX = iris[1:10, -5]) #' extractProb(bothModels, testX = iris[1:10, -5]) #' } #' #' @export predict.train predict.train <- function(object, newdata = NULL, type = "raw", na.action = na.omit, ...) { if(all(names(object) != "modelInfo")) { object <- update(object, param = NULL) } if(!is.null(object$modelInfo$library)) for(i in object$modelInfo$library) do.call("requireNamespaceQuietStop", list(package = i)) if(!(type %in% c("raw", "prob"))) stop("type must be either \"raw\" or \"prob\"") if(type == "prob") { if (is.null(object$modelInfo$prob)) stop("only classification models that produce probabilities are allowed") } if(!is.null(newdata)) { if (inherits(object, "train.formula")) { newdata <- as.data.frame(newdata) rn <- row.names(newdata) Terms <- delete.response(object$terms) m <- model.frame(Terms, newdata, na.action = na.action, xlev = object$xlevels) if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) keep <- match(row.names(m), rn) newdata <- model.matrix(Terms, m, contrasts = object$contrasts) xint <- match("(Intercept)", colnames(newdata), nomatch = 0) if (xint > 0) newdata <- newdata[, -xint, drop = FALSE] } } else if(object$control$method != "oob") { if(!is.null(object$trainingData)) { if(object$method == "pam") { newdata <- object$finalModel$xData } else { newdata <- object$trainingData newdata$.outcome <- NULL if("train.formula" %in% class(object) && any(unlist(lapply(newdata, is.factor)))) { newdata <- model.matrix(~., data = newdata)[,-1] newdata <- as.data.frame(newdata) } } } else stop("please specify data via newdata") } if("xNames" %in% names(object$finalModel) & is.null(object$preProcess$method$pca) & is.null(object$preProcess$method$ica)) newdata <- newdata[, colnames(newdata) %in% object$finalModel$xNames, drop = FALSE] if(type == "prob") { out <- probFunction(method = object$modelInfo, modelFit = object$finalModel, newdata = newdata, preProc = object$preProcess) obsLevels <- levels(object) out <- out[, obsLevels, drop = FALSE] } else { out <- predictionFunction(method = object$modelInfo, modelFit = object$finalModel, newdata = newdata, preProc = object$preProcess) if (object$modelType == "Regression") { out <- trimPredictions(pred = out, mod_type =object$modelType, bounds = object$control$predictionBounds, limits = object$yLimit) } else { if(!("levels" %in% names(object))) object$levels <- levels(object) out <- outcome_conversion(as.character(out), lv = object$levels) } } out } caret/vignettes/0000755000176200001440000000000013207340464013363 5ustar liggesuserscaret/vignettes/caret.Rnw0000644000176200001440000003671613153613153015164 0ustar liggesusers% \VignetteIndexEntry{ A Short Introduction to the caret Package} % \VignetteDepends{caret} % \VignettePackage{caret} \documentclass[12pt]{article} \usepackage{colortbl} \usepackage{amsmath} \usepackage[pdftex]{graphicx} \usepackage{color} \usepackage{xspace} \usepackage{fancyvrb} \usepackage{fancyhdr} \usepackage[ colorlinks=true, linkcolor=blue, citecolor=blue, urlcolor=blue] {hyperref} \usepackage{Sweave} \SweaveOpts{keep.source=TRUE} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % define new colors for use \definecolor{darkgreen}{rgb}{0,0.6,0} \definecolor{darkred}{rgb}{0.6,0.0,0} \definecolor{lightbrown}{rgb}{1,0.9,0.8} \definecolor{brown}{rgb}{0.6,0.3,0.3} \definecolor{darkblue}{rgb}{0,0,0.8} \definecolor{darkmagenta}{rgb}{0.5,0,0.5} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\bld}[1]{\mbox{\boldmath $#1$}} \newcommand{\shell}[1]{\mbox{$#1$}} \renewcommand{\vec}[1]{\mbox{\bf {#1}}} \newcommand{\codeheading}[1]{\mbox{\color{darkblue}\texttt{#1}}} \newcommand{\code}[1]{\mbox{\footnotesize\color{darkblue}\texttt{#1}}} \newcommand{\pkg}[1]{{\fontseries{b}\selectfont #1}} \renewcommand{\pkg}[1]{{\textsf{#1}}} \newcommand{\ReallySmallSpacing}{\renewcommand{\baselinestretch}{.6}\Large\normalsize} \newcommand{\SmallSpacing}{\renewcommand{\baselinestretch}{1.1}\Large\normalsize} \providecommand{\SetAlgoLined}{\SetLine} \newcommand{\halfs}{\frac{1}{2}} \setlength{\oddsidemargin}{-.25 truein} \setlength{\evensidemargin}{0truein} \setlength{\topmargin}{-0.2truein} \setlength{\textwidth}{7 truein} \setlength{\textheight}{8.5 truein} \setlength{\parindent}{0truein} \setlength{\parskip}{0.10truein} \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl,formatcom=\color{darkblue}} \fvset{listparameters={\setlength{\topsep}{0pt}}} \renewenvironment{Schunk}{\vspace{\topsep}}{\vspace{\topsep}} \fvset{fontsize=\footnotesize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagestyle{fancy} \lhead{} \chead{The {\tt caret} Package} \rhead{} \lfoot{} \cfoot{} \rfoot{\thepage} \renewcommand{\headrulewidth}{1pt} \renewcommand{\footrulewidth}{1pt} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{A Short Introduction to the \pkg{caret} Package} \author{Max Kuhn \\ max.kuhn@pfizer.com} \begin{document} \SweaveOpts{concordance=TRUE} \maketitle \thispagestyle{empty} \vspace{.2in} \renewcommand{\baselinestretch}{1} <>= library(MASS) library(caret) library(mlbench) data(Sonar) library(pls) options(useFancyQuotes = FALSE) getInfo <- function(what = "Suggests") { text <- packageDescription("caret")[what][[1]] text <- gsub("\n", ", ", text, fixed = TRUE) text <- gsub(">=", "$\\\\ge$", text, fixed = TRUE) eachPkg <- strsplit(text, ", ", fixed = TRUE)[[1]] eachPkg <- gsub(",", "", eachPkg, fixed = TRUE) #out <- paste("\\\\pkg{", eachPkg[order(tolower(eachPkg))], "}", sep = "") #paste(out, collapse = ", ") length(eachPkg) } @ The \pkg{caret} package (short for {\bf{\color{blue}{c}}}lassification {\bf{\color{blue}{a}}}nd {\bf{\color{blue}{re}}}gression {\bf{\color{blue}{t}}}raining) contains functions to streamline the model training process for complex regression and classification problems. The package utilizes a number of R packages but tries not to load them all at package start-up\footnote{By adding formal package dependencies, the package startup time can be greatly decreased}. The package ``suggests'' field includes \Sexpr{getInfo("Suggests")} packages. \pkg{caret} loads packages as needed and assumes that they are installed. Install \pkg{caret} using <>= install.packages("caret", dependencies = c("Depends", "Suggests")) @ to ensure that all the needed packages are installed. The {\bf main help pages} for the package are at: \begin{center} \url{http://caret.r-forge.r-project.org/} \end{center} Here, there are extended examples and a large amount of information that previously found in the package vignettes. \pkg{caret} has several functions that attempt to streamline the model building and evaluation process, as well as feature selection and other techniques. One of the primary tools in the package is the \code{train} function which can be used to \begin{itemize} \item evaluate, using resampling, the effect of model tuning parameters on performance \item choose the ``optimal'' model across these parameters \item estimate model performance from a training set \end{itemize} More formally: \begin{center} \includegraphics[clip, width = .9\textwidth]{train_algo} \label{A:tune} \end{center} There are options for customizing almost every step of this process (e.g. resampling technique, choosing the optimal parameters etc). To demonstrate this function, the Sonar data from the \pkg{mlbench} package will be used. The Sonar data consist of \Sexpr{nrow(Sonar)} data points collected on \Sexpr{ncol(Sonar)-1} predictors. The goal is to predict the two classes (\texttt{M} for metal cylinder or \texttt{R} for rock). First, we split the data into two groups: a training set and a test set. To do this, the \code{createDataPartition} function is used: <>= library(caret) library(mlbench) data(Sonar) set.seed(107) inTrain <- createDataPartition(y = Sonar$Class, ## the outcome data are needed p = .75, ## The percentage of data in the ## training set list = FALSE) ## The format of the results ## The output is a set of integers for the rows of Sonar ## that belong in the training set. str(inTrain) @ By default, \code{createDataPartition} does a stratified random split of the data. To partition the data: <>= training <- Sonar[ inTrain,] testing <- Sonar[-inTrain,] nrow(training) nrow(testing) @ To tune a model using Algorithm \ref{A:tune}, the \code{train} function can be used. More details on this function can be found at: \begin{center} \url{http://caret.r-forge.r-project.org/training.html} \end{center} Here, a partial least squares discriminant analysis (PLSDA) model will be tuned over the number of PLS components that should be retained. The most basic syntax to do this is: <>= plsFit <- train(Class ~ ., data = training, method = "pls", ## Center and scale the predictors for the training ## set and all future samples. preProc = c("center", "scale")) @ However, we would probably like to customize it in a few ways: \begin{itemize} \item expand the set of PLS models that the function evaluates. By default, the function will tune over three values of each tuning parameter. \item the type of resampling used. The simple bootstrap is used by default. We will have the function use three repeats of 10--fold cross--validation. \item the methods for measuring performance. If unspecified, overall accuracy and the Kappa statistic are computed. For regression models, root mean squared error and $R^2$ are computed. Here, the function will be altered to estimate the area under the ROC curve, the sensitivity and specificity \end{itemize} To change the candidate values of the tuning parameter, either of the \code{tuneLength} or \code{tuneGrid} arguments can be used. The \code{train} function can generate a candidate set of parameter values and the \code{tuneLength} argument controls how many are evaluated. In the case of PLS, the function uses a sequence of integers from 1 to \code{tuneLength}. If we want to evaluate all integers between 1 and 15, setting \code{tuneLength = 15} would achieve this. The \code{tuneGrid} argument is used when specific values are desired. A data frame is used where each row is a tuning parameter setting and each column is a tuning parameter. An example is used below to illustrate this. The syntax for the model would then be: \begin{Verbatim}[fontshape=sl,formatcom=\color{darkblue},fontsize=\footnotesize,commandchars=\\\{\}] > plsFit <- train(Class ~ ., + data = training, + method = "pls", + \textcolor{red}{tuneLength = 15}, + preProc = c("center", "scale")) \end{Verbatim} To modify the resampling method, a \code{trainControl} function is used. The option \code{method} controls the type of resampling and defaults to \code{"boot"}. Another method, \code{"repeatedcv"}, is used to specify repeated $K$--fold cross--validation (and the argument \code{repeats} controls the number of repetitions). $K$ is controlled by the \code{number} argument and defaults to 10. The new syntax is then: \begin{Verbatim}[fontshape=sl,formatcom=\color{darkblue},fontsize=\footnotesize,commandchars=\\\{\}] > \textcolor{red}{ctrl <- trainControl(method = "repeatedcv",} + \textcolor{red}{ repeats = 3)} > plsFit <- train(Class ~ ., + data = training, + method = "pls", + tuneLength = 15, + \textcolor{red}{trControl = ctrl}, + preProc = c("center", "scale")) \end{Verbatim} Finally, to choose different measures of performance, additional arguments are given to \code{trainControl}. The \code{summaryFunction} argument is used to pas in a function that takes the observed and predicted values and estimate some measure of performance. Two such functions are already included in the package: \code{defaultSummary} and \code{twoClassSummary}. The latter will compute measures specific to two--class problems, such as the area under the ROC curve, the sensitivity and specificity. Since the ROC curve is based on the predicted class probabilities (which are not computed automatically), another option is required. The \code{classProbs = TRUE} option is used to include these calculations. Lastly, the function will pick the tuning parameters associated with the best results. Since we are using custom performance measures, the criterion that should be optimized must also be specified. In the call to \code{train}, we can use \code{metric = "ROC"} to do this. The final model fit would then be: \begin{Verbatim}[fontshape=sl,formatcom=\color{darkblue},fontsize=\footnotesize,commandchars=\\\{\}] > set.seed(123) > ctrl <- trainControl(method = "repeatedcv", + repeats = 3, + \textcolor{red}{ classProbs = TRUE}, + \textcolor{red}{ summaryFunction = twoClassSummary}) > plsFit <- train(Class ~ ., + data = training, + method = "pls", + tuneLength = 15, + trControl = ctrl, + \textcolor{red}{metric = "ROC"}, + preProc = c("center", "scale")) \end{Verbatim} <>= ctrl <- trainControl(method = "repeatedcv", repeats = 3, classProbs = TRUE, summaryFunction = twoClassSummary) set.seed(123) plsFit <- train(Class ~ ., data = training, method = "pls", tuneLength = 15, trControl = ctrl, metric = "ROC", preProc = c("center", "scale")) @ <>= plsFit @ In this output the grid of results are the average resampled estimates of performance. The note at the bottom tells the user that \Sexpr{plsFit$bestTune$.ncomp} PLS components were found to be optimal. Based on this value, a final PLS model is fit to the whole data set using this specification and this is the model that is used to predict future samples. The package has several functions for visualizing the results. One method for doing this is the \code{plot} function for \code{train} objects. The command \code{plot(plsFit)} produced the results seen in Figure \ref{F:pls} and shows the relationship between the resampled performance values and the number of PLS components. \setkeys{Gin}{width=.65\textwidth} \begin{figure} \begin{center} <>= trellis.par.set(caretTheme()) print(plot(plsFit)) @ \caption{ \code{plot(plsFit)} shows the relationship between the number of PLS components and the resampled estimate of the area under the ROC curve. } \label{F:pls} \end{center} \end{figure} To predict new samples, \code{predict.train} can be used. For classification models, the default behavior is to calculated the predicted class. Using the option \code{type = "prob"} can be used to compute class probabilities from the model. For example: <>= plsClasses <- predict(plsFit, newdata = testing) str(plsClasses) plsProbs <- predict(plsFit, newdata = testing, type = "prob") head(plsProbs) @ \pkg{caret} contains a function to compute the confusion matrix and associated statistics for the model fit: <>= confusionMatrix(data = plsClasses, testing$Class) @ To fit an another model to the data, \code{train} can be invoked with minimal changes. Lists of models available can be found at: \begin{center} \url{http://caret.r-forge.r-project.org/modelList.html} \url{http://caret.r-forge.r-project.org/bytag.html} \end{center} For example, to fit a regularized discriminant model to these data, the following syntax can be used: <>= ## To illustrate, a custom grid is used rdaGrid = data.frame(gamma = (0:4)/4, lambda = 3/4) set.seed(123) rdaFit <- train(Class ~ ., data = training, method = "rda", tuneGrid = rdaGrid, trControl = ctrl, metric = "ROC") rdaFit rdaClasses <- predict(rdaFit, newdata = testing) confusionMatrix(rdaClasses, testing$Class) @ How do these models compare in terms of their resampling results? The \code{resamples} function can be used to collect, summarize and contrast the resampling results. Since the random number seeds were initialized to the same value prior to calling \code{train}, the same folds were used for each model. To assemble them: <>= resamps <- resamples(list(pls = plsFit, rda = rdaFit)) summary(resamps) @ There are several functions to visualize these results. For example, a Bland--Altman type plot can be created using \code{xyplot(resamps, what = "BlandAltman")} (see Figure \ref{F:BA}). The results look similar. Since, for each resample, there are paired results a paired $t$--test can be used to assess whether there is a difference in the average resampled area under the ROC curve. The \code{diff.resamples} function can be used to compute this: <>= diffs <- diff(resamps) summary(diffs) @ Based on this analysis, the difference between the models is \Sexpr{round(diffs$statistics$ROC[[1]]$estimate, 3)} ROC units (the RDA model is slightly higher) and the two--sided $p$--value for this difference is \Sexpr{format.pval(diffs$statistics$ROC[[1]]$p.value)}. \setkeys{Gin}{width=.65\textwidth} \begin{figure} \begin{center} <>= plotTheme <- caretTheme() plotTheme$plot.symbol$col <- rgb(.2, .2, .2, .5) plotTheme$plot.symbol$pch <- 16 trellis.par.set(plotTheme) print(xyplot(resamps, what = "BlandAltman")) @ \caption{A Bland--Altman plot of the resampled ROC values produced using \code{xyplot(resamps, what = "BlandAltman")}. } \label{F:BA} \end{center} \end{figure} \end{document} caret/vignettes/algorithm.tex0000644000176200001440000000123413153613153016071 0ustar liggesusers\begin{algorithm}[H] \label{A:tune} \SetLine \restylealgo{plain} \dontprintsemicolon Define sets of model parameter values to evaluate \nllabel{A:grid}\; \For{each parameter set}{ \For{each resampling iteration}{ Hold--out specific samples \nllabel{A:resample} \; [Optional] Pre--process the data\; Fit the model on the remainder\; Predict the hold--out samples\; } Calculate the average performance across hold--out predictions \nllabel{A:perf} } Determine the optimal parameter set \nllabel{A:best}\; Fit the final model to all the training data using the optimal parameter set\; \end{algorithm} caret/MD50000644000176200001440000003140313213314354011660 0ustar liggesusers6f6cc21fc023c48b2fd1da3c8075d766 *DESCRIPTION ed77ec405550c21f4f28779c54d6dbb6 *NAMESPACE 08360abde4d985bf2c2cc1dd30476d3a *R/BoxCoxTrans.R 0b8d7141053581bad767714f01829454 *R/aaa.R f034b469f02f5746ed792b3df6336f9d *R/adaptive.R 4fb3b4c10e87d8fcffa31482cebb641e *R/additive.R 6e52cac9ed7ae025d82bb5bed1616e9b *R/avNNet.R 835fd268dbfeead50516877af1a3e385 *R/bag.R 39b4ecb2e1a95cdf32c3563af9c903c6 *R/bagEarth.R 3a4eddfd5235f3f251c4efb3e38f03b4 *R/bagFDA.R 4e518cb8171c5fe7cde637798d6ef772 *R/basic2x2Stats.R 65c1ca7112a7cdcc8e28628f7eaea7bf *R/calibration.R b2ad4fe5879962833e98030d28e3afd1 *R/caret-package.R 2a8d9100e8bde9246dbd8d734254006e *R/caretTheme.R 3e78d34eae7303cca67e799022dd7a32 *R/classDist.R d551ab18ea74306759ba4b0f23e4abca *R/classLevels.R 6e73b87584eecff7633ddea4c6bae6bb *R/common_code.R 811eea052b8febe9e598a0e77f1821be *R/confusionMatrix.R 68cdad569cc1a2130213e9a589eec336 *R/createDataPartition.R 23cc00abe2487c20a8e705a29a129ba1 *R/createModel.R 247dab2202f8f0d87e9238778b213612 *R/createResample.R bd358c1d677a7f109735776b2f71a4e3 *R/diag.R f170eb72b83ccd7bd5981fbe4d657111 *R/dotplot.varImp.train.R d0fd2c7206e59dd28be1a1775d2b1d8a *R/dummyVar.R 2946398651557b809e6d61feeb66e76c *R/expoTrans.R 756071cc18f098a912d1d7367cb8e282 *R/extractPrediction.R 09da037bb9c58a073da29796b9b1721d *R/extractProb.R c96844fe9c4989c63df7075de861a8a3 *R/featurePlot.R 4ce271b3f0b41ca9278f3c3e7e677ec8 *R/filterVarImp.R 593273fbad9299dbf55dd28374b0c654 *R/findCorrelation.R 4d7b9a093e35b3dd1df001e901e3d737 *R/findLinearCombos.R 8721bcfb1de5503a8de0e23b2198e423 *R/format.bagEarth.R 50b349543d0b01cca5f9466d15cc60d3 *R/gafs.R 97e9016988b83bb09a98dce5cfc15995 *R/getTrainPerf.R 3ed9eac63e069f20cf5595f2c515668f *R/ggplot.R 3d1ca584f519886d3d51156a7eded4f6 *R/heldout.R 5ff7ec89c2060a136cb8ffb7628fd29d *R/icr.R ead639008ac618b9f32d9168b200fe6b *R/knn3.R 8e2652baed75316a4785792a94b7c97a *R/knnreg.R 6a1ad09e15de34559068756b58484a10 *R/lattice.train.R 3aa4e165fdb6b536a326e17c3437d698 *R/learning_curve.R 7aa396a5e3cfe52e88518d7d8d3a4136 *R/lift.R 4a9bb05609710cea0b034870b1b294cd *R/maxDissim.R c77302e1fac3725e639a6ae145f621e1 *R/misc.R 41889459db2108fd300761acdaf4ff12 *R/modelLookup.R d43c1e3534feb2c320c7a9b4cdf2c2af *R/nearZeroVar.R a590b693a745431894b5784e125dcb91 *R/negPredValue.R d08a57e718b6a76d083153ab86a2161e *R/panel.needle.R a3758512bcd43571b9dac66806a492a3 *R/pcaNNet.R 79f135f3218e57ebe8c7804ce8704e9d *R/plot.train.R 59c4975ab9b690f4513242001d4d1103 *R/plot.varImp.train.R c8d1d387ff9afd804c06edd8b29434e8 *R/plotClassProbs.R 1d5a23c9bb361976b7aa7f482f7585bd *R/plotObsVsPred.R 6af06ee17128d8a85f619448294e14c1 *R/plsda.R 224c80529305b313e0854b13785e2be1 *R/posPredValue.R d733acc152865974afa098d0a0f2a37f *R/postResample.R d0e75aef80072b4bf52453060ad1a66a *R/preProcess.R f4a86d9cd391a9803093ee9b06584c08 *R/prec_rec.R 70f8701dbf574dd1718316af73b3bdf0 *R/predict.PLS.R f6216d1fd468802431eb62d514c650e6 *R/predict.train.R 565f89c4485e872653390dd41dbf5934 *R/predictionFunction.R 7101e4abf09977e2fca188c63413d04a *R/predictors.R 753c6f6c7d55e1dcc2c2a63ad4a2c696 *R/print.mars.R 8b0939913f6725abbb68dd08f885c3dd *R/print.train.R 5971970c522e33fcc24bfae7435cc08a *R/print.varImp.train.R 79858c4d63fdc4431de575c5f57ef278 *R/probFunction.R 7905c2f22a0193484e8201287f2c52cb *R/recipes.R b603dccc3c4465408b76d620c2b612d9 *R/reg_sims.R 101fcb88e2cded35f5248ef9dd78034b *R/resampleHist.R c1eefb9ce3bd03d9dda8ee168441eaf2 *R/resampleSummary.R 123f8a73dcf42bf33ebda5cbfb20842e *R/resampleWrapper.R 966366f75dc6d936fb84de1b154f93d6 *R/resamples.R f35adcfb5079916f62d20ad5356b1104 *R/rfe.R 2950adc46ce1d8c7055a6559d263f426 *R/safs.R a3a0b988af9528d9276a186b8ea70e63 *R/sampling.R e4adcc741f0e0661a5a941f51cc6a1f5 *R/selectByFilter.R dd12aedbb53676770f68a4ce3995ed34 *R/selection.R 02a0f01a6d6fa424aae80fe6806774f4 *R/sensitivity.R 16a2fefdc5987a02b52479ad58595027 *R/sortImp.R 3aeb8030cc86319f4cc7ab8d16df3e56 *R/spatialSign.R b6b29feed3ec68aa01309dde861ad6e4 *R/specificity.R 721091324001575baa0811499b0fd4fe *R/splsda.R 60caf5e68706cfe32ecb2aa079ad80e7 *R/suggestions.R beace7a0fde8085437f6462d4dc4f314 *R/thresholder.R eb68a5e4122ccbf472fdfe0ae10c704b *R/train.default.R 3624fc0a0a87a0c6a6bf4fdf9b123ace *R/trainControl.R 5e2eb3201b451bcf3c1b2dd445d8421e *R/trim.R bfaa1aa836adbd3d9652dafb850870b0 *R/twoClassSim.R 10d7b7a76e34fdc319445f83138d2769 *R/updates.R a764390033830e212f6be39f12886122 *R/varImp.R 93517def3bdaa418a35bd94b20d66dae *R/varImp.train.R 26460fb2910e26ec02ac23af60c86acc *R/workflows.R f72d43d2d8d355accd89adc01d00ef2c *build/vignette.rds 207388f37483d387a1bdb928c42bb4e7 *data/BloodBrain.RData 2f905a97a1bdf8c66c2d1859fb6c3c94 *data/GermanCredit.RData 77128138c553249554844546d9443ede *data/Sacramento.RData cada87cea215be8bc2b5388b0c31841a *data/cars.RData 53d859c2d7f604c9d40614493973b8e4 *data/cox2.RData f1de35458a0dd1e5f562ff7d2e63a0bd *data/datalist 6d654054f0e8da583c5d4d8e04f2f86a *data/dhfr.RData 757013e0dd2905bb7e083655c840c49d *data/mdrr.RData eca0c2532cc328c1d0ac5d32b3c9bbdc *data/oil.RData ecdae454e7a1a320b438d5e98e33606f *data/pottery.RData 29417712c25f42dc372865d7e657b129 *data/scat.RData 82d12ed229545b7a39820522a2af82f6 *data/segmentationData.RData 30958b520366b02a43372f65773b77ac *data/tecator.RData dd2e3e0b496321280de73ec4bb539db2 *inst/NEWS.Rd 60e19e6f057a26981fd8288e8e860796 *inst/doc/caret.R afea06692c572bfb899bf3cff466b818 *inst/doc/caret.Rnw ce150080afa7c0c8f54c1b164abed937 *inst/doc/caret.pdf df71f65e41209b750a94b70eea7a77c1 *inst/models/models.RData 35a93a3c5566775ed3c1653c1667ce46 *inst/models/sampling.RData 432f30b8821578720800c12f45f10f2b *man/BloodBrain.Rd c330e884c3512bc79ef15449850967e7 *man/BoxCoxTrans.Rd 291995591a926fa6da3455018cc85aeb *man/GermanCredit.Rd aa010cf8cac26d44658e048f176ac09e *man/Sacramento.Rd 9a0017a9f6317dbbae81648885ecc28f *man/as.matrix.confusionMatrix.Rd 988c287e9269eba9c069f52e83e3615c *man/avNNet.Rd 23d74b7e653d553c87e831314d7ef27b *man/bag.Rd 0c0ac4b6f38d9d6ab5b57177bcb8abd4 *man/bagEarth.Rd 4a2815c912f8702fd401d910592d6837 *man/bagFDA.Rd 2e82d977f33caf988658772421f56aa3 *man/calibration.Rd 6249f565744ec4b5e7cf9340f98591e3 *man/caret-internal.Rd 55db7d9684197d6c21ab2a165c3373da *man/caretFuncs.Rd 0974d49001bcd3e636383910c6d4c14b *man/caretSBF.Rd 942e4bfe9b9527e8676cded0fe87079e *man/cars.Rd ea10de177fb4c46c5f6550b4b808fc80 *man/classDist.Rd cdf595648d8fa5e4da940baf200d8dd5 *man/confusionMatrix.Rd 39b942caf4bf110653e5ba833e1019e5 *man/confusionMatrix.train.Rd 3bd135493d614c420d879eaf1b3f5d41 *man/cox2.Rd 06b06303a9403b27193a39b32ccba09f *man/createDataPartition.Rd 78c1c06b1265336475b0d1fc5b6e75f6 *man/densityplot.rfe.Rd 29e1838f8358ccb5305a60e5b40e7fa9 *man/dhfr.Rd f927eb2f183390b17c6be3cd63b7cd62 *man/diff.resamples.Rd 46a85614a5c98854578c2832ac3236a9 *man/dotPlot.Rd 62a8cccfec14d0b44d0a2466d71fe318 *man/dotplot.diff.resamples.Rd b2db87f8cc004c491fc0ca5b4c5d55e4 *man/downSample.Rd 15134d86eca425b8ef07eb57be5af3ec *man/dummyVars.Rd 78a47dfb27468cde0731f6c165a80845 *man/featurePlot.Rd f2c4e5a05fb42240cd6bb124e273287e *man/filterVarImp.Rd 5288797fbb68c5f7726f689bf3d74fa6 *man/findCorrelation.Rd c71a70407a6c5c016ce685404973c466 *man/findLinearCombos.Rd 69d9fbddbcb44979f48421c669050abf *man/format.bagEarth.Rd d9508138666dd420a78a0a8e0407cc19 *man/gafs.default.Rd c74d028a1e379d168929085f41a9246b *man/gafs_initial.Rd aa684b830b48fbe2e711f8fdcce1a2fa *man/getSamplingInfo.Rd 2ddc92ef2a397c939acd0fa73d50ed1b *man/histogram.train.Rd 8af7331e7d1c8fb5043f19d1e6148da3 *man/icr.formula.Rd 743520092182ee52d12a32d566e608b7 *man/index2vec.Rd 321f6d97d7ec7541d1d03ff30ed2e91f *man/knn3.Rd 1098f3cb238a41695832bb0f9fef455f *man/knnreg.Rd 5111fe5a91ea5519ddaeb0a94bdaf672 *man/learing_curve_dat.Rd 1fe1eafd86ac1c8323b2f5642f7246ce *man/lift.Rd 75f88d5271f0dd4b6c85c859cafb46d7 *man/maxDissim.Rd a85f0b074d76b126c0874431b53f3c29 *man/mdrr.Rd da89421aacdaf815974be019096afb6c *man/modelLookup.Rd 0190495edd4735fe2dc1b2641b77df2e *man/models.Rd 4516124e529a6e051bd0ba6a505c11a8 *man/nearZeroVar.Rd ad447c284095189092fbd66d6a12900e *man/nullModel.Rd 8fc5e573e32850cc90a68fbefad7d102 *man/oil.Rd a82df0ece140216a96dc62f131237baa *man/oneSE.Rd b5a27b66c927f61e8142412c09bcc156 *man/panel.lift2.Rd 8ae96bd41cc197737859bb36ea77bfbf *man/panel.needle.Rd 0243cc9b1a8ae83d85cb43e93978485c *man/pcaNNet.Rd 029f7c2baac9bc66aec15a93fc8ee74c *man/plot.gafs.Rd f820ab341860529c71fd613f1b44e523 *man/plot.rfe.Rd 37bb98f5782c78cb1b40d119633b1273 *man/plot.train.Rd 5532addd421b314d45a69f3c6e216967 *man/plot.varImp.train.Rd b30b5551c3201e28a0b473102587ed40 *man/plotClassProbs.Rd 7db931cb6e61762c8c4a891ea3818e60 *man/plotObsVsPred.Rd b6d7a595c006b78ef075812e5c68cce9 *man/plsda.Rd 1a300afcffc9a6bc98f30aa5764c7b7e *man/postResample.Rd d48647a71d8419b5b6d424624de48606 *man/pottery.Rd bbcbfe3344dd01a2a684149c32ab53ef *man/prcomp.resamples.Rd 4a609c33d18edb0272b32774089dbb40 *man/preProcess.Rd 9188690af12882f578ef70c292f1a8bb *man/predict.bagEarth.Rd f5bba32dfa34e84ca9216e655c724d15 *man/predict.gafs.Rd c35c78a772496c02fc7c7968e04d43e2 *man/predict.knn3.Rd c2325bf2b69e9847ac39696186109b34 *man/predict.knnreg.Rd d9035a7bd0845fe556d7f8a570906cce *man/predict.train.Rd d3db921653b0cea427f66c5dcd809567 *man/predictors.Rd 8c09c6031aaad699993eea5d5334decf *man/print.confusionMatrix.Rd 20e948a54736a88e79c968a50139267b *man/print.train.Rd f89f8b5c096d569a577169cc17dd19a2 *man/recall.Rd 296244c173655d1522384681e3c5da66 *man/resampleHist.Rd 0e7209798b50f46fa3836f16368ecbf8 *man/resampleSummary.Rd ed8530b251ffd1c5ae976609e035de35 *man/resamples.Rd e0d6f4c3ff373cab8400fbca9b8e52d3 *man/rfe.Rd 23393179e298833941192e7800e04296 *man/rfeControl.Rd f5dc6b38ac7baaa12e86eaa869e2b633 *man/safs.Rd e573b7b60dfbc22365e3b4c77eba7318 *man/safsControl.Rd 87026ff910e31bbee3ee7b5c0626308a *man/safs_initial.Rd 26771110dd12ade0e94f7054d0849bd8 *man/sbf.Rd ac1bdb6d2d3d4dc3ff03a36f9d4ccead *man/sbfControl.Rd 40f7c7148f5b0187d10374792f482c6d *man/scat.Rd c04d9cd6bb576e2757ac5f9d6251d02b *man/segmentationData.Rd e575eab310ebb80548e45e3174caa093 *man/sensitivity.Rd 269d6e3adaad2930fa75757fed992f53 *man/spatialSign.Rd 3dfb715bb56fd3c831c3fc90e2c0c19e *man/summary.bagEarth.Rd 6deee3b9c9a9ef19fe32b7e1923abe86 *man/tecator.Rd 5a00a99fc88591c0da1845fee5a5975f *man/thresholder.Rd 9569b8b60ec7145ab9cb203e3b954dff *man/train.Rd f3fd1545b85fb0ad49ceacc7808d6ca4 *man/trainControl.Rd 9f493d4196c5c497b66211229522851b *man/twoClassSim.Rd 7af9e163b318f3b5ae3d623cd51aa891 *man/update.safs.Rd dff65b8a8766ebf6b2c4f31610ff7040 *man/update.train.Rd 7c90a8ac28c8d4ff8f6448598eccf5e2 *man/varImp.Rd f5657c4e5a369dde5b93fb15e1ff23e2 *man/varImp.gafs.Rd e7f662877adfb12fa4fba0b71c73fda8 *man/var_seq.Rd 271989ec339553cfc324752a0679fab8 *man/xyplot.resamples.Rd 56d459e4b0373ffe9399006d4ff48cce *src/caret.c d3861b74b91b00b294b74da4fce1ba52 *tests/testthat.R 6f63e87fc9546c984876a04a5247a914 *tests/testthat/test_BoxCox.R 7e3b2f9319325cfa8b79d2805f5778c1 *tests/testthat/test_Dummies.R 197ef19e2c9dc63bc6c0963c3f196f12 *tests/testthat/test_bad_class_options.R 230f220a95cfcf7f2919d1d0da023394 *tests/testthat/test_classDist.R 31bf79bb2b209833b4535c5705433b64 *tests/testthat/test_confusionMatrix.R 7f7299cd0e6db15fcf596660ce1112ed *tests/testthat/test_data_spliting.R c197efa956517581698bdbace16daaf2 *tests/testthat/test_gafs.R a9708b12321661cae338d2e6d92d6190 *tests/testthat/test_ggplot.R e13baae5b4ca92e356f0c23f63e3e0c3 *tests/testthat/test_glmnet_varImp.R ac98783848f32aad537adb7c32d9a3ae *tests/testthat/test_minimal.R c8b8a1482828dd54b6c01439be284799 *tests/testthat/test_misc.R 41f0c4681cc136d44972d5ea59f28c88 *tests/testthat/test_mnLogLoss.R 8da0c472c527a5b3c302159b6b27bc6f *tests/testthat/test_models_bagEarth.R 9e3eb592117687c82e953a1fb0a23212 *tests/testthat/test_multiclassSummary.R 998f7ef756797e8082102c0954cfe9c6 *tests/testthat/test_nearZeroVar.R 666c29c6c96a8af3ba4d344e7c22f78a *tests/testthat/test_preProcess.R 086b66e46ed9b6fdf033075fa1ec0083 *tests/testthat/test_preProcess_internals.R 3f4541cb1f8feb6e8b87bd3da611f2a7 *tests/testthat/test_preProcess_methods.R e2614c27d52912759d852df6d754e02c *tests/testthat/test_safs.R dad92d2290d5074b6d95f64973956f29 *tests/testthat/test_sampling_options.R 012135cb890b9c45d39212b1d0a0f2ea *tests/testthat/test_spatialSign.R dc2bc35beae741d9299b72e7d863aaaa *tests/testthat/test_twoClassSummary.R ad1cd68c579acb27ca029c6a044de76a *tests/testthat/test_varImp.R 3504f6579c67aab95fe36ed423bae447 *tests/testthat/trim.R 960f588e277ca117530508a72dfdf21a *tests/testthat/trim_C5.R f321c90d0fc9f86bbc2f790d10adbd9c *tests/testthat/trim_bayesglm.R d9776fd3bd2bae2fed47a1a995f28807 *tests/testthat/trim_glm.R 9f3a28cd3edd0b7c44c0c611c6306082 *tests/testthat/trim_glmnet.R deb25462270f133514302d20b028b0a3 *tests/testthat/trim_rpart.R b8e3a5d921b147a3473ef65a9d15ef3d *tests/testthat/trim_train.R a1670964dd20a1f842da2c3f3b52a697 *tests/testthat/trim_treebag.R 345504afc2628bde840f3ca539596d37 *vignettes/algorithm.tex 09ced520a1e4a577dec83a1658178313 *vignettes/caret.Rnw f2307d739c6d20807ac4d892f25e5f25 *vignettes/train_algo.pdf caret/build/0000755000176200001440000000000013207340464012452 5ustar liggesuserscaret/build/vignette.rds0000644000176200001440000000034213207340464015010 0ustar liggesusersmQ 0 3A|^1/C=x-[lG|r5j!i/ߗ'c \F!OlTe%ߞARhtzM0ӊx!X$gq` 5o}xT"K[(Ti~Xb;O2^[M /rey83niwrO:I.J{I*PCz1]caret/DESCRIPTION0000644000176200001440000000233513213314354013060 0ustar liggesusersPackage: caret Version: 6.0-78 Title: Classification and Regression Training Author: Max Kuhn. Contributions from Jed Wing, Steve Weston, Andre Williams, Chris Keefer, Allan Engelhardt, Tony Cooper, Zachary Mayer, Brenton Kenkel, the R Core Team, Michael Benesty, Reynald Lescarbeau, Andrew Ziem, Luca Scrucca, Yuan Tang, Can Candan, and Tyler Hunt. Description: Misc functions for training and plotting classification and regression models. Maintainer: Max Kuhn Depends: R (>= 2.10), lattice (>= 0.20), ggplot2 URL: https://github.com/topepo/caret/ BugReports: https://github.com/topepo/caret/issues Imports: foreach, methods, plyr, ModelMetrics (>= 1.1.0), nlme, reshape2, stats, stats4, utils, grDevices, recipes (>= 0.0.1), withr (>= 2.0.0) Suggests: BradleyTerry2, e1071, earth (>= 2.2-3), fastICA, gam, ipred, kernlab, klaR, MASS, ellipse, mda, mgcv, mlbench, MLmetrics, nnet, party (>= 0.9-99992), pls, pROC, proxy, randomForest, RANN, spls, subselect, pamr, superpc, Cubist, testthat (>= 0.9.1) License: GPL (>= 2) RoxygenNote: 6.0.1 NeedsCompilation: yes Packaged: 2017-11-28 20:04:04 UTC; max Repository: CRAN Date/Publication: 2017-12-10 20:28:28 UTC caret/man/0000755000176200001440000000000013206640141012120 5ustar liggesuserscaret/man/prcomp.resamples.Rd0000644000176200001440000000740113153613153015707 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/resamples.R \name{prcomp.resamples} \alias{prcomp.resamples} \alias{cluster.resamples} \alias{cluster} \alias{plot.prcomp.resamples} \alias{plot.prcomp.resamples} \title{Principal Components Analysis of Resampling Results} \usage{ \method{prcomp}{resamples}(x, metric = x$metrics[1], ...) \method{plot}{prcomp.resamples}(x, what = "scree", dims = max(2, ncol(x$rotation)), ...) } \arguments{ \item{x}{For \code{prcomp}, an object of class \code{\link{resamples}} and for \code{plot.prcomp.resamples}, an object of class \code{plot.prcomp.resamples}} \item{metric}{a performance metric that was estimated for every resample} \item{\dots}{For \code{prcomp.resamples}, options to pass to \code{\link[stats]{prcomp}}, for \code{plot.prcomp.resamples}, options to pass to Lattice objects (see Details below) and, for \code{cluster.resamples}, options to pass to \code{hclust}.} \item{what}{the type of plot: \code{"scree"} produces a bar chart of standard deviations, \code{"cumulative"} produces a bar chart of the cumulative percent of variance, \code{"loadings"} produces a scatterplot matrix of the loading values and \code{"components"} produces a scatterplot matrix of the PCA components} \item{dims}{The number of dimensions to plot when \code{what = "loadings"} or \code{what = "components"}} } \value{ For \code{prcomp.resamples}, an object with classes \code{prcomp.resamples} and \code{prcomp}. This object is the same as the object produced by \code{prcomp}, but with additional elements: \item{metric }{the value for the \code{metric} argument} \item{call }{the call} For \code{plot.prcomp.resamples}, a Lattice object (see Details above) } \description{ Performs a principal components analysis on an object of class \code{\link{resamples}} and returns the results as an object with classes \code{prcomp.resamples} and \code{prcomp}. } \details{ The principal components analysis treats the models as variables and the resamples are realizations of the variables. In this way, we can use PCA to "cluster" the assays and look for similarities. Most of the methods for \code{\link[stats]{prcomp}} can be used, although custom \code{print} and \code{plot} methods are used. The plot method uses lattice graphics. When \code{what = "scree"} or \code{what = "cumulative"}, \code{\link[lattice:xyplot]{barchart}} is used. When \code{what = "loadings"} or \code{what = "components"}, either \code{\link[lattice:xyplot]{xyplot}} or \code{\link[lattice:splom]{splom}} are used (the latter when \code{dims} > 2). Options can be passed to these methods using \code{...}. When \code{what = "loadings"} or \code{what = "components"}, the plots are put on a common scale so that later components are less likely to be over-interpreted. See Geladi et al. (2003) for examples of why this can be important. For clustering, \code{\link[stats]{hclust}} is used to determine clusters of models based on the resampled performance values. } \examples{ \dontrun{ #load(url("http://topepo.github.io/caret/exampleModels.RData")) resamps <- resamples(list(CART = rpartFit, CondInfTree = ctreeFit, MARS = earthFit)) resampPCA <- prcomp(resamps) resampPCA plot(resampPCA, what = "scree") plot(resampPCA, what = "components") plot(resampPCA, what = "components", dims = 2, auto.key = list(columns = 3)) clustered <- cluster(resamps) plot(clustered) } } \references{ Geladi, P.; Manley, M.; and Lestander, T. (2003), "Scatter plotting in multivariate data analysis," J. Chemometrics, 17: 503-511 } \seealso{ \code{\link{resamples}}, \code{\link[lattice:xyplot]{barchart}}, \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:splom]{splom}}, \code{\link[stats]{hclust}} } \author{ Max Kuhn } \keyword{hplot} caret/man/avNNet.Rd0000644000176200001440000000745113153613153013615 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/avNNet.R \name{avNNet} \alias{avNNet} \alias{avNNet.default} \alias{predict.avNNet} \alias{avNNet.formula} \alias{avNNet.formula} \alias{avNNet.default} \alias{print.avNNet} \alias{predict.avNNet} \title{Neural Networks Using Model Averaging} \usage{ avNNet(x, ...) \method{avNNet}{formula}(formula, data, weights, ..., repeats = 5, bag = FALSE, allowParallel = TRUE, seeds = sample.int(1e+05, repeats), subset, na.action, contrasts = NULL) \method{avNNet}{default}(x, y, repeats = 5, bag = FALSE, allowParallel = TRUE, seeds = sample.int(1e+05, repeats), ...) \method{print}{avNNet}(x, ...) \method{predict}{avNNet}(object, newdata, type = c("raw", "class", "prob"), ...) } \arguments{ \item{x}{matrix or data frame of \code{x} values for examples.} \item{\dots}{arguments passed to \code{\link[nnet]{nnet}}} \item{formula}{A formula of the form \code{class ~ x1 + x2 + \dots}} \item{data}{Data frame from which variables specified in \code{formula} are preferentially to be taken.} \item{weights}{(case) weights for each example -- if missing defaults to 1.} \item{repeats}{the number of neural networks with different random number seeds} \item{bag}{a logical for bagging for each repeat} \item{allowParallel}{if a parallel backend is loaded and available, should the function use it?} \item{seeds}{random number seeds that can be set prior to bagging (if done) and network creation. This helps maintain reproducibility when models are run in parallel.} \item{subset}{An index vector specifying the cases to be used in the training sample. (NOTE: If given, this argument must be named.)} \item{na.action}{A function to specify the action to be taken if \code{NA}s are found. The default action is for the procedure to fail. An alternative is \code{na.omit}, which leads to rejection of cases with missing values on any required variable. (NOTE: If given, this argument must be named.)} \item{contrasts}{a list of contrasts to be used for some or all of the factors appearing as variables in the model formula.} \item{y}{matrix or data frame of target values for examples.} \item{object}{an object of class \code{avNNet} as returned by \code{avNNet}.} \item{newdata}{matrix or data frame of test examples. A vector is considered to be a row vector comprising a single case.} \item{type}{Type of output, either: \code{raw} for the raw outputs, \code{code} for the predicted class or \code{prob} for the class probabilities.} } \value{ For \code{avNNet}, an object of \code{"avNNet"} or \code{"avNNet.formula"}. Items of interest in #' the output are: \item{model }{a list of the models generated from \code{\link[nnet]{nnet}}} \item{repeats }{an echo of the model input} \item{names }{if any predictors had only one distinct value, this is a character string of the #' remaining columns. Otherwise a value of \code{NULL}} } \description{ Aggregate several neural network models } \details{ Following Ripley (1996), the same neural network model is fit using different random number seeds. All the resulting models are used for prediction. For regression, the output from each network are averaged. For classification, the model scores are first averaged, then translated to predicted classes. Bagging can also be used to create the models. If a parallel backend is registered, the \pkg{foreach} package is used to train the networks in parallel. } \examples{ data(BloodBrain) \dontrun{ modelFit <- avNNet(bbbDescr, logBBB, size = 5, linout = TRUE, trace = FALSE) modelFit predict(modelFit, bbbDescr) } } \references{ Ripley, B. D. (1996) \emph{Pattern Recognition and Neural Networks.} Cambridge. } \seealso{ \code{\link[nnet]{nnet}}, \code{\link{preProcess}} } \author{ These are heavily based on the \code{nnet} code from Brian Ripley. } \keyword{neural} caret/man/bagEarth.Rd0000644000176200001440000000516113206651220014127 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/bagEarth.R \name{bagEarth} \alias{bagEarth} \alias{print.bagEarth} \alias{bagEarth.default} \alias{bagEarth.formula} \alias{bagEarth.default} \alias{bagEarth.formula} \alias{print.bagEarth} \title{Bagged Earth} \usage{ bagEarth(x, ...) \method{bagEarth}{default}(x, y, weights = NULL, B = 50, summary = mean, keepX = TRUE, ...) \method{bagEarth}{formula}(formula, data = NULL, B = 50, summary = mean, keepX = TRUE, ..., subset, weights = NULL, na.action = na.omit) \method{print}{bagEarth}(x, ...) } \arguments{ \item{x}{matrix or data frame of 'x' values for examples.} \item{\dots}{arguments passed to the \code{earth} function} \item{y}{matrix or data frame of numeric values outcomes.} \item{weights}{(case) weights for each example - if missing defaults to 1.} \item{B}{the number of bootstrap samples} \item{summary}{a function with a single argument specifying how the bagged predictions should be summarized} \item{keepX}{a logical: should the original training data be kept?} \item{formula}{A formula of the form \code{y ~ x1 + x2 + ...}} \item{data}{Data frame from which variables specified in 'formula' are preferentially to be taken.} \item{subset}{An index vector specifying the cases to be used in the training sample. (NOTE: If given, this argument must be named.)} \item{na.action}{A function to specify the action to be taken if 'NA's are found. The default action is for the procedure to fail. An alternative is na.omit, which leads to rejection of cases with missing values on any required variable. (NOTE: If given, this argument must be named.)} } \value{ A list with elements \item{fit }{a list of \code{B} Earth fits} \item{B }{the number of bootstrap samples} \item{call }{the function call} \item{x }{either \code{NULL} or the value of \code{x}, depending on the value of \code{keepX}} \item{oob}{a matrix of performance estimates for each bootstrap sample} } \description{ A bagging wrapper for multivariate adaptive regression splines (MARS) via the \code{earth} function } \details{ The function computes a Earth model for each bootstap sample. } \examples{ \dontrun{ library(mda) library(earth) data(trees) fit1 <- earth(x = trees[,-3], y = trees[,3]) set.seed(2189) fit2 <- bagEarth(x = trees[,-3], y = trees[,3], B = 10) } } \references{ J. Friedman, ``Multivariate Adaptive Regression Splines'' (with discussion) (1991). Annals of Statistics, 19/1, 1-141. } \seealso{ \code{\link[earth]{earth}}, \code{\link{predict.bagEarth}} } \author{ Max Kuhn (\code{bagEarth.formula} is based on Ripley's \code{nnet.formula}) } \keyword{regression} caret/man/plot.rfe.Rd0000644000176200001440000000425213153613153014147 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ggplot.R, R/rfe.R \name{ggplot.rfe} \alias{ggplot.rfe} \alias{plot.rfe} \alias{ggplot.rfe} \title{Plot RFE Performance Profiles} \usage{ \method{ggplot}{rfe}(data = NULL, mapping = NULL, metric = data$metric[1], output = "layered", ..., environment = NULL) \method{plot}{rfe}(x, metric = x$metric, ...) } \arguments{ \item{data}{an object of class \code{\link{rfe}}.} \item{mapping, environment}{unused arguments to make consistent with \pkg{ggplot2} generic method} \item{metric}{What measure of performance to plot. Examples of possible values are "RMSE", "Rsquared", "Accuracy" or "Kappa". Other values can be used depending on what metrics have been calculated.} \item{output}{either "data", "ggplot" or "layered". The first returns a data frame while the second returns a simple \code{ggplot} object with no layers. The third value returns a plot with a set of layers.} \item{\dots}{\code{plot} only: specifications to be passed to \code{\link[lattice]{xyplot}}. The function automatically sets some arguments (e.g. axis labels) but passing in values here will over-ride the defaults.} \item{x}{an object of class \code{\link{rfe}}.} } \value{ a lattice or ggplot object } \description{ These functions plot the resampling results for the candidate subset sizes evaluated during the recursive feature elimination (RFE) process } \details{ These plots show the average performance versus the subset sizes. } \examples{ \dontrun{ data(BloodBrain) x <- scale(bbbDescr[,-nearZeroVar(bbbDescr)]) x <- x[, -findCorrelation(cor(x), .8)] x <- as.data.frame(x) set.seed(1) lmProfile <- rfe(x, logBBB, sizes = c(2:25, 30, 35, 40, 45, 50, 55, 60, 65), rfeControl = rfeControl(functions = lmFuncs, number = 200)) plot(lmProfile) plot(lmProfile, metric = "Rsquared") ggplot(lmProfile) } } \references{ Kuhn (2008), ``Building Predictive Models in R Using the caret'' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}) } \seealso{ \code{\link{rfe}}, \code{\link[lattice]{xyplot}}, \code{\link[ggplot2]{ggplot}} } \author{ Max Kuhn } \keyword{hplot} caret/man/gafs_initial.Rd0000644000176200001440000001023313153613153015043 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/gafs.R \name{gafs_initial} \alias{gafs_initial} \alias{gafs_lrSelection} \alias{gafs_rwSelection} \alias{gafs_tourSelection} \alias{gafs_uCrossover} \alias{gafs_spCrossover} \alias{gafs_raMutation} \alias{caretGA} \alias{rfGA} \alias{treebagGA} \alias{gafs_lrSelection} \alias{gafs_spCrossover} \alias{gafs_raMutation} \alias{gafs_nlrSelection} \alias{gafs_rwSelection} \alias{gafs_tourSelection} \alias{gafs_uCrossover} \title{Ancillary genetic algorithm functions} \usage{ gafs_initial(vars, popSize, ...) gafs_lrSelection(population, fitness, r = NULL, q = NULL, ...) gafs_spCrossover(population, fitness, parents, ...) gafs_raMutation(population, parent, ...) gafs_nlrSelection(population, fitness, q = 0.25, ...) gafs_rwSelection(population, fitness, ...) gafs_tourSelection(population, fitness, k = 3, ...) gafs_uCrossover(population, parents, ...) } \arguments{ \item{vars}{number of possible predictors} \item{popSize}{the population size passed into \code{\link{gafs}}} \item{\dots}{not currently used} \item{population}{a binary matrix of the current subsets with predictors in columns and individuals in rows} \item{fitness}{a vector of fitness values} \item{r, q, k}{tuning parameters for the specific selection operator} \item{parent, parents}{integer(s) for which chromosomes are altered} } \value{ The return value depends on the function. } \description{ Built-in functions related to genetic algorithms These functions are used with the \code{functions} argument of the \code{\link{gafsControl}} function. More information on the details of these functions are at \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html}. Most of the \code{gafs_*} functions are based on those from the GA package by Luca Scrucca. These functions here are small re-writes to work outside of the GA package. The objects \code{caretGA}, \code{rfGA} and \code{treebagGA} are example lists that can be used with the \code{functions} argument of \code{\link{gafsControl}}. In the case of \code{caretGA}, the \code{...} structure of \code{\link{gafs}} passes through to the model fitting routine. As a consequence, the \code{\link{train}} function can easily be accessed by passing important arguments belonging to \code{\link{train}} to \code{\link{gafs}}. See the examples below. By default, using \code{caretGA} will used the resampled performance estimates produced by \code{\link{train}} as the internal estimate of fitness. For \code{rfGA} and \code{treebagGA}, the \code{randomForest} and \code{bagging} functions are used directly (i.e. \code{\link{train}} is not used). Arguments to either of these functions can also be passed to them though the \code{\link{gafs}} call (see examples below). For these two functions, the internal fitness is estimated using the out-of-bag estimates naturally produced by those functions. While faster, this limits the user to accuracy or Kappa (for classification) and RMSE and R-squared (for regression). } \examples{ pop <- gafs_initial(vars = 10, popSize = 10) pop gafs_lrSelection(population = pop, fitness = 1:10) gafs_spCrossover(population = pop, fitness = 1:10, parents = 1:2) \dontrun{ ## Hypothetical examples lda_ga <- gafs(x = predictors, y = classes, gafsControl = gafsControl(functions = caretGA), ## now pass arguments to `train` method = "lda", metric = "Accuracy" trControl = trainControl(method = "cv", classProbs = TRUE)) rf_ga <- gafs(x = predictors, y = classes, gafsControl = gafsControl(functions = rfGA), ## these are arguments to `randomForest` ntree = 1000, importance = TRUE) } } \references{ Scrucca L (2013). GA: A Package for Genetic Algorithms in R. Journal of Statistical Software, 53(4), 1-37. \url{cran.r-project.org/web/packages/GA/} \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html} } \seealso{ \code{\link{gafs}}, \code{\link{gafsControl}} } \author{ Luca Scrucca, \code{gafs_initial}, \code{caretGA}, \code{rfGA} and \code{treebagGA} by Max Kuhn } caret/man/models.Rd0000644000176200001440000021526013206640141013700 0ustar liggesusers\name{train_model_list} \alias{train_model_list} \alias{models} \title{A List of Available Models in train} \description{These models are included in the package via wrappers for \code{\link{train}}. Custom models can also be created. See the URL below. \strong{AdaBoost Classification Trees} (\code{method = 'adaboost'}) For classification using package \pkg{fastAdaboost} with tuning parameters: \itemize{ \item Number of Trees (\code{nIter}, numeric) \item Method (\code{method}, character) } \strong{AdaBoost.M1} (\code{method = 'AdaBoost.M1'}) For classification using packages \pkg{adabag} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Trees (\code{mfinal}, numeric) \item Max Tree Depth (\code{maxdepth}, numeric) \item Coefficient Type (\code{coeflearn}, character) } \strong{Adaptive Mixture Discriminant Analysis} (\code{method = 'amdai'}) For classification using package \pkg{adaptDA} with tuning parameters: \itemize{ \item Model Type (\code{model}, character) } \strong{Adaptive-Network-Based Fuzzy Inference System} (\code{method = 'ANFIS'}) For regression using package \pkg{frbs} with tuning parameters: \itemize{ \item Number of Fuzzy Terms (\code{num.labels}, numeric) \item Max. Iterations (\code{max.iter}, numeric) } \strong{Adjacent Categories Probability Model for Ordinal Data} (\code{method = 'vglmAdjCat'}) For classification using package \pkg{VGAM} with tuning parameters: \itemize{ \item Parallel Curves (\code{parallel}, logical) \item Link Function (\code{link}, character) } \strong{Bagged AdaBoost} (\code{method = 'AdaBag'}) For classification using packages \pkg{adabag} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Trees (\code{mfinal}, numeric) \item Max Tree Depth (\code{maxdepth}, numeric) } \strong{Bagged CART} (\code{method = 'treebag'}) For classification and regression using packages \pkg{ipred}, \pkg{plyr} and \pkg{e1071} with no tuning parameters. \strong{Bagged FDA using gCV Pruning} (\code{method = 'bagFDAGCV'}) For classification using package \pkg{earth} with tuning parameters: \itemize{ \item Product Degree (\code{degree}, numeric) } Note: Unlike other packages used by \code{train}, the \code{earth} package is fully loaded when this model is used. \strong{Bagged Flexible Discriminant Analysis} (\code{method = 'bagFDA'}) For classification using packages \pkg{earth} and \pkg{mda} with tuning parameters: \itemize{ \item Product Degree (\code{degree}, numeric) \item Number of Terms (\code{nprune}, numeric) } Note: Unlike other packages used by \code{train}, the \code{earth} package is fully loaded when this model is used. \strong{Bagged Logic Regression} (\code{method = 'logicBag'}) For classification and regression using package \pkg{logicFS} with tuning parameters: \itemize{ \item Maximum Number of Leaves (\code{nleaves}, numeric) \item Number of Trees (\code{ntrees}, numeric) } Note: Unlike other packages used by \code{train}, the \code{logicFS} package is fully loaded when this model is used. \strong{Bagged MARS} (\code{method = 'bagEarth'}) For classification and regression using package \pkg{earth} with tuning parameters: \itemize{ \item Number of Terms (\code{nprune}, numeric) \item Product Degree (\code{degree}, numeric) } Note: Unlike other packages used by \code{train}, the \code{earth} package is fully loaded when this model is used. \strong{Bagged MARS using gCV Pruning} (\code{method = 'bagEarthGCV'}) For classification and regression using package \pkg{earth} with tuning parameters: \itemize{ \item Product Degree (\code{degree}, numeric) } Note: Unlike other packages used by \code{train}, the \code{earth} package is fully loaded when this model is used. \strong{Bagged Model} (\code{method = 'bag'}) For classification and regression using package \pkg{caret} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{vars}, numeric) } \strong{Bayesian Additive Regression Trees} (\code{method = 'bartMachine'}) For classification and regression using package \pkg{bartMachine} with tuning parameters: \itemize{ \item Number of Trees (\code{num_trees}, numeric) \item Prior Boundary (\code{k}, numeric) \item Base Terminal Node Hyperparameter (\code{alpha}, numeric) \item Power Terminal Node Hyperparameter (\code{beta}, numeric) \item Degrees of Freedom (\code{nu}, numeric) } \strong{Bayesian Generalized Linear Model} (\code{method = 'bayesglm'}) For classification and regression using package \pkg{arm} with no tuning parameters. \strong{Bayesian Regularized Neural Networks} (\code{method = 'brnn'}) For regression using package \pkg{brnn} with tuning parameters: \itemize{ \item Number of Neurons (\code{neurons}, numeric) } \strong{Bayesian Ridge Regression} (\code{method = 'bridge'}) For regression using package \pkg{monomvn} with no tuning parameters. \strong{Bayesian Ridge Regression (Model Averaged)} (\code{method = 'blassoAveraged'}) For regression using package \pkg{monomvn} with no tuning parameters. Note: This model makes predictions by averaging the predictions based on the posterior estimates of the regression coefficients. While it is possible that some of these posterior estimates are zero for non-informative predictors, the final predicted value may be a function of many (or even all) predictors. \strong{Binary Discriminant Analysis} (\code{method = 'binda'}) For classification using package \pkg{binda} with tuning parameters: \itemize{ \item Shrinkage Intensity (\code{lambda.freqs}, numeric) } \strong{Boosted Classification Trees} (\code{method = 'ada'}) For classification using packages \pkg{ada} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Trees (\code{iter}, numeric) \item Max Tree Depth (\code{maxdepth}, numeric) \item Learning Rate (\code{nu}, numeric) } \strong{Boosted Generalized Additive Model} (\code{method = 'gamboost'}) For classification and regression using packages \pkg{mboost}, \pkg{plyr} and \pkg{import} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{mstop}, numeric) \item AIC Prune? (\code{prune}, character) } Note: The \code{prune} option for this model enables the number of iterations to be determined by the optimal AIC value across all iterations. See the examples in \code{?mboost::mstop}. If pruning is not used, the ensemble makes predictions using the exact value of the \code{mstop} tuning parameter value. \strong{Boosted Generalized Linear Model} (\code{method = 'glmboost'}) For classification and regression using packages \pkg{plyr} and \pkg{mboost} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{mstop}, numeric) \item AIC Prune? (\code{prune}, character) } Note: The \code{prune} option for this model enables the number of iterations to be determined by the optimal AIC value across all iterations. See the examples in \code{?mboost::mstop}. If pruning is not used, the ensemble makes predictions using the exact value of the \code{mstop} tuning parameter value. \strong{Boosted Linear Model} (\code{method = 'BstLm'}) For classification and regression using packages \pkg{bst} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{mstop}, numeric) \item Shrinkage (\code{nu}, numeric) } \strong{Boosted Logistic Regression} (\code{method = 'LogitBoost'}) For classification using package \pkg{caTools} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{nIter}, numeric) } \strong{Boosted Smoothing Spline} (\code{method = 'bstSm'}) For classification and regression using packages \pkg{bst} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{mstop}, numeric) \item Shrinkage (\code{nu}, numeric) } \strong{Boosted Tree} (\code{method = 'blackboost'}) For classification and regression using packages \pkg{party}, \pkg{mboost} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Trees (\code{mstop}, numeric) \item Max Tree Depth (\code{maxdepth}, numeric) } \strong{Boosted Tree} (\code{method = 'bstTree'}) For classification and regression using packages \pkg{bst} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{mstop}, numeric) \item Max Tree Depth (\code{maxdepth}, numeric) \item Shrinkage (\code{nu}, numeric) } \strong{C4.5-like Trees} (\code{method = 'J48'}) For classification using package \pkg{RWeka} with tuning parameters: \itemize{ \item Confidence Threshold (\code{C}, numeric) \item Minimum Instances Per Leaf (\code{M}, numeric) } \strong{C5.0} (\code{method = 'C5.0'}) For classification using packages \pkg{C50} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{trials}, numeric) \item Model Type (\code{model}, character) \item Winnow (\code{winnow}, logical) } \strong{CART} (\code{method = 'rpart'}) For classification and regression using package \pkg{rpart} with tuning parameters: \itemize{ \item Complexity Parameter (\code{cp}, numeric) } \strong{CART} (\code{method = 'rpart1SE'}) For classification and regression using package \pkg{rpart} with no tuning parameters. Note: This CART model replicates the same process used by the \code{rpart} function where the model complexity is determined using the one-standard error method. This procedure is replicated inside of the resampling done by \code{train} so that an external resampling estimate can be obtained. \strong{CART} (\code{method = 'rpart2'}) For classification and regression using package \pkg{rpart} with tuning parameters: \itemize{ \item Max Tree Depth (\code{maxdepth}, numeric) } \strong{CART or Ordinal Responses} (\code{method = 'rpartScore'}) For classification using packages \pkg{rpartScore} and \pkg{plyr} with tuning parameters: \itemize{ \item Complexity Parameter (\code{cp}, numeric) \item Split Function (\code{split}, character) \item Pruning Measure (\code{prune}, character) } \strong{CHi-squared Automated Interaction Detection} (\code{method = 'chaid'}) For classification using package \pkg{CHAID} with tuning parameters: \itemize{ \item Merging Threshold (\code{alpha2}, numeric) \item Splitting former Merged Threshold (\code{alpha3}, numeric) \item Splitting former Merged Threshold (\code{alpha4}, numeric) } \strong{Conditional Inference Random Forest} (\code{method = 'cforest'}) For classification and regression using package \pkg{party} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) } \strong{Conditional Inference Tree} (\code{method = 'ctree'}) For classification and regression using package \pkg{party} with tuning parameters: \itemize{ \item 1 - P-Value Threshold (\code{mincriterion}, numeric) } \strong{Conditional Inference Tree} (\code{method = 'ctree2'}) For classification and regression using package \pkg{party} with tuning parameters: \itemize{ \item Max Tree Depth (\code{maxdepth}, numeric) \item 1 - P-Value Threshold (\code{mincriterion}, numeric) } \strong{Continuation Ratio Model for Ordinal Data} (\code{method = 'vglmContRatio'}) For classification using package \pkg{VGAM} with tuning parameters: \itemize{ \item Parallel Curves (\code{parallel}, logical) \item Link Function (\code{link}, character) } \strong{Cost-Sensitive C5.0} (\code{method = 'C5.0Cost'}) For classification using packages \pkg{C50} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{trials}, numeric) \item Model Type (\code{model}, character) \item Winnow (\code{winnow}, logical) \item Cost (\code{cost}, numeric) } \strong{Cost-Sensitive CART} (\code{method = 'rpartCost'}) For classification using packages \pkg{rpart} and \pkg{plyr} with tuning parameters: \itemize{ \item Complexity Parameter (\code{cp}, numeric) \item Cost (\code{Cost}, numeric) } \strong{Cubist} (\code{method = 'cubist'}) For regression using package \pkg{Cubist} with tuning parameters: \itemize{ \item Number of Committees (\code{committees}, numeric) \item Number of Instances (\code{neighbors}, numeric) } \strong{Cumulative Probability Model for Ordinal Data} (\code{method = 'vglmCumulative'}) For classification using package \pkg{VGAM} with tuning parameters: \itemize{ \item Parallel Curves (\code{parallel}, logical) \item Link Function (\code{link}, character) } \strong{DeepBoost} (\code{method = 'deepboost'}) For classification using package \pkg{deepboost} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{num_iter}, numeric) \item Tree Depth (\code{tree_depth}, numeric) \item L1 Regularization (\code{beta}, numeric) \item Tree Depth Regularization (\code{lambda}, numeric) \item Loss (\code{loss_type}, character) } \strong{Diagonal Discriminant Analysis} (\code{method = 'dda'}) For classification using package \pkg{sparsediscrim} with tuning parameters: \itemize{ \item Model (\code{model}, character) \item Shrinkage Type (\code{shrinkage}, character) } \strong{Distance Weighted Discrimination with Polynomial Kernel} (\code{method = 'dwdPoly'}) For classification using package \pkg{kerndwd} with tuning parameters: \itemize{ \item Regularization Parameter (\code{lambda}, numeric) \item q (\code{qval}, numeric) \item Polynomial Degree (\code{degree}, numeric) \item Scale (\code{scale}, numeric) } \strong{Distance Weighted Discrimination with Radial Basis Function Kernel} (\code{method = 'dwdRadial'}) For classification using packages \pkg{kernlab} and \pkg{kerndwd} with tuning parameters: \itemize{ \item Regularization Parameter (\code{lambda}, numeric) \item q (\code{qval}, numeric) \item Sigma (\code{sigma}, numeric) } \strong{Dynamic Evolving Neural-Fuzzy Inference System } (\code{method = 'DENFIS'}) For regression using package \pkg{frbs} with tuning parameters: \itemize{ \item Threshold (\code{Dthr}, numeric) \item Max. Iterations (\code{max.iter}, numeric) } \strong{Elasticnet} (\code{method = 'enet'}) For regression using package \pkg{elasticnet} with tuning parameters: \itemize{ \item Fraction of Full Solution (\code{fraction}, numeric) \item Weight Decay (\code{lambda}, numeric) } \strong{Ensembles of Generalized Linear Models} (\code{method = 'randomGLM'}) For classification and regression using package \pkg{randomGLM} with tuning parameters: \itemize{ \item Interaction Order (\code{maxInteractionOrder}, numeric) } Note: Unlike other packages used by \code{train}, the \code{randomGLM} package is fully loaded when this model is used. \strong{eXtreme Gradient Boosting} (\code{method = 'xgbDART'}) For classification and regression using packages \pkg{xgboost} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{nrounds}, numeric) \item Max Tree Depth (\code{max_depth}, numeric) \item Shrinkage (\code{eta}, numeric) \item Minimum Loss Reduction (\code{gamma}, numeric) \item Subsample Percentage (\code{subsample}, numeric) \item Subsample Ratio of Columns (\code{colsample_bytree}, numeric) \item Fraction of Trees Dropped (\code{rate_drop}, numeric) \item Prob. of Skipping Drop-out (\code{skip_drop}, numeric) \item Minimum Sum of Instance Weight (\code{min_child_weight}, numeric) } \strong{eXtreme Gradient Boosting} (\code{method = 'xgbLinear'}) For classification and regression using package \pkg{xgboost} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{nrounds}, numeric) \item L2 Regularization (\code{lambda}, numeric) \item L1 Regularization (\code{alpha}, numeric) \item Learning Rate (\code{eta}, numeric) } \strong{eXtreme Gradient Boosting} (\code{method = 'xgbTree'}) For classification and regression using packages \pkg{xgboost} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{nrounds}, numeric) \item Max Tree Depth (\code{max_depth}, numeric) \item Shrinkage (\code{eta}, numeric) \item Minimum Loss Reduction (\code{gamma}, numeric) \item Subsample Ratio of Columns (\code{colsample_bytree}, numeric) \item Minimum Sum of Instance Weight (\code{min_child_weight}, numeric) \item Subsample Percentage (\code{subsample}, numeric) } \strong{Extreme Learning Machine} (\code{method = 'elm'}) For classification and regression using package \pkg{elmNN} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{nhid}, numeric) \item Activation Function (\code{actfun}, character) } \strong{Factor-Based Linear Discriminant Analysis} (\code{method = 'RFlda'}) For classification using package \pkg{HiDimDA} with tuning parameters: \itemize{ \item Number of Factors (\code{q}, numeric) } \strong{Flexible Discriminant Analysis} (\code{method = 'fda'}) For classification using packages \pkg{earth} and \pkg{mda} with tuning parameters: \itemize{ \item Product Degree (\code{degree}, numeric) \item Number of Terms (\code{nprune}, numeric) } Note: Unlike other packages used by \code{train}, the \code{earth} package is fully loaded when this model is used. \strong{Fuzzy Inference Rules by Descent Method} (\code{method = 'FIR.DM'}) For regression using package \pkg{frbs} with tuning parameters: \itemize{ \item Number of Fuzzy Terms (\code{num.labels}, numeric) \item Max. Iterations (\code{max.iter}, numeric) } \strong{Fuzzy Rules Using Chi's Method} (\code{method = 'FRBCS.CHI'}) For classification using package \pkg{frbs} with tuning parameters: \itemize{ \item Number of Fuzzy Terms (\code{num.labels}, numeric) \item Membership Function (\code{type.mf}, character) } \strong{Fuzzy Rules Using Genetic Cooperative-Competitive Learning and Pittsburgh} (\code{method = 'FH.GBML'}) For classification using package \pkg{frbs} with tuning parameters: \itemize{ \item Max. Number of Rules (\code{max.num.rule}, numeric) \item Population Size (\code{popu.size}, numeric) \item Max. Generations (\code{max.gen}, numeric) } \strong{Fuzzy Rules Using the Structural Learning Algorithm on Vague Environment} (\code{method = 'SLAVE'}) For classification using package \pkg{frbs} with tuning parameters: \itemize{ \item Number of Fuzzy Terms (\code{num.labels}, numeric) \item Max. Iterations (\code{max.iter}, numeric) \item Max. Generations (\code{max.gen}, numeric) } \strong{Fuzzy Rules via MOGUL} (\code{method = 'GFS.FR.MOGUL'}) For regression using package \pkg{frbs} with tuning parameters: \itemize{ \item Max. Generations (\code{max.gen}, numeric) \item Max. Iterations (\code{max.iter}, numeric) \item Max. Tuning Iterations (\code{max.tune}, numeric) } \strong{Fuzzy Rules via Thrift} (\code{method = 'GFS.THRIFT'}) For regression using package \pkg{frbs} with tuning parameters: \itemize{ \item Population Size (\code{popu.size}, numeric) \item Number of Fuzzy Labels (\code{num.labels}, numeric) \item Max. Generations (\code{max.gen}, numeric) } \strong{Fuzzy Rules with Weight Factor} (\code{method = 'FRBCS.W'}) For classification using package \pkg{frbs} with tuning parameters: \itemize{ \item Number of Fuzzy Terms (\code{num.labels}, numeric) \item Membership Function (\code{type.mf}, character) } \strong{Gaussian Process} (\code{method = 'gaussprLinear'}) For classification and regression using package \pkg{kernlab} with no tuning parameters. \strong{Gaussian Process with Polynomial Kernel} (\code{method = 'gaussprPoly'}) For classification and regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item Polynomial Degree (\code{degree}, numeric) \item Scale (\code{scale}, numeric) } \strong{Gaussian Process with Radial Basis Function Kernel} (\code{method = 'gaussprRadial'}) For classification and regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item Sigma (\code{sigma}, numeric) } \strong{Generalized Additive Model using LOESS} (\code{method = 'gamLoess'}) For classification and regression using package \pkg{gam} with tuning parameters: \itemize{ \item Span (\code{span}, numeric) \item Degree (\code{degree}, numeric) } Note: Which terms enter the model in a nonlinear manner is determined by the number of unique values for the predictor. For example, if a predictor only has four unique values, most basis expansion method will fail because there are not enough granularity in the data. By default, a predictor must have at least 10 unique values to be used in a nonlinear basis expansion. Unlike other packages used by \code{train}, the \code{gam} package is fully loaded when this model is used. \strong{Generalized Additive Model using Splines} (\code{method = 'bam'}) For classification and regression using package \pkg{mgcv} with tuning parameters: \itemize{ \item Feature Selection (\code{select}, logical) \item Method (\code{method}, character) } Note: Which terms enter the model in a nonlinear manner is determined by the number of unique values for the predictor. For example, if a predictor only has four unique values, most basis expansion method will fail because there are not enough granularity in the data. By default, a predictor must have at least 10 unique values to be used in a nonlinear basis expansion. Unlike other packages used by \code{train}, the \code{mgcv} package is fully loaded when this model is used. \strong{Generalized Additive Model using Splines} (\code{method = 'gam'}) For classification and regression using package \pkg{mgcv} with tuning parameters: \itemize{ \item Feature Selection (\code{select}, logical) \item Method (\code{method}, character) } Note: Which terms enter the model in a nonlinear manner is determined by the number of unique values for the predictor. For example, if a predictor only has four unique values, most basis expansion method will fail because there are not enough granularity in the data. By default, a predictor must have at least 10 unique values to be used in a nonlinear basis expansion. Unlike other packages used by \code{train}, the \code{mgcv} package is fully loaded when this model is used. \strong{Generalized Additive Model using Splines} (\code{method = 'gamSpline'}) For classification and regression using package \pkg{gam} with tuning parameters: \itemize{ \item Degrees of Freedom (\code{df}, numeric) } Note: Which terms enter the model in a nonlinear manner is determined by the number of unique values for the predictor. For example, if a predictor only has four unique values, most basis expansion method will fail because there are not enough granularity in the data. By default, a predictor must have at least 10 unique values to be used in a nonlinear basis expansion. Unlike other packages used by \code{train}, the \code{gam} package is fully loaded when this model is used. \strong{Generalized Linear Model} (\code{method = 'glm'}) For classification and regression with no tuning parameters. \strong{Generalized Linear Model with Stepwise Feature Selection} (\code{method = 'glmStepAIC'}) For classification and regression using package \pkg{MASS} with no tuning parameters. \strong{Generalized Partial Least Squares} (\code{method = 'gpls'}) For classification using package \pkg{gpls} with tuning parameters: \itemize{ \item Number of Components (\code{K.prov}, numeric) } \strong{Genetic Lateral Tuning and Rule Selection of Linguistic Fuzzy Systems} (\code{method = 'GFS.LT.RS'}) For regression using package \pkg{frbs} with tuning parameters: \itemize{ \item Population Size (\code{popu.size}, numeric) \item Number of Fuzzy Labels (\code{num.labels}, numeric) \item Max. Generations (\code{max.gen}, numeric) } \strong{glmnet} (\code{method = 'glmnet_h2o'}) For classification and regression using package \pkg{h2o} with tuning parameters: \itemize{ \item Mixing Percentage (\code{alpha}, numeric) \item Regularization Parameter (\code{lambda}, numeric) } \strong{glmnet} (\code{method = 'glmnet'}) For classification and regression using packages \pkg{glmnet} and \pkg{Matrix} with tuning parameters: \itemize{ \item Mixing Percentage (\code{alpha}, numeric) \item Regularization Parameter (\code{lambda}, numeric) } \strong{Gradient Boosting Machines} (\code{method = 'gbm_h2o'}) For classification and regression using package \pkg{h2o} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{ntrees}, numeric) \item Max Tree Depth (\code{max_depth}, numeric) \item Min. Terminal Node Size (\code{min_rows}, numeric) \item Shrinkage (\code{learn_rate}, numeric) \item Number of Randomly Selected Predictors (\code{col_sample_rate}, numeric) } \strong{Greedy Prototype Selection} (\code{method = 'protoclass'}) For classification using packages \pkg{proxy} and \pkg{protoclass} with tuning parameters: \itemize{ \item Ball Size (\code{eps}, numeric) \item Distance Order (\code{Minkowski}, numeric) } \strong{Heteroscedastic Discriminant Analysis} (\code{method = 'hda'}) For classification using package \pkg{hda} with tuning parameters: \itemize{ \item Gamma (\code{gamma}, numeric) \item Lambda (\code{lambda}, numeric) \item Dimension of the Discriminative Subspace (\code{newdim}, numeric) } \strong{High Dimensional Discriminant Analysis} (\code{method = 'hdda'}) For classification using package \pkg{HDclassif} with tuning parameters: \itemize{ \item Threshold (\code{threshold}, character) \item Model Type (\code{model}, numeric) } \strong{High-Dimensional Regularized Discriminant Analysis} (\code{method = 'hdrda'}) For classification using package \pkg{sparsediscrim} with tuning parameters: \itemize{ \item Gamma (\code{gamma}, numeric) \item Lambda (\code{lambda}, numeric) \item Shrinkage Type (\code{shrinkage_type}, character) } \strong{Hybrid Neural Fuzzy Inference System} (\code{method = 'HYFIS'}) For regression using package \pkg{frbs} with tuning parameters: \itemize{ \item Number of Fuzzy Terms (\code{num.labels}, numeric) \item Max. Iterations (\code{max.iter}, numeric) } \strong{Independent Component Regression} (\code{method = 'icr'}) For regression using package \pkg{fastICA} with tuning parameters: \itemize{ \item Number of Components (\code{n.comp}, numeric) } \strong{k-Nearest Neighbors} (\code{method = 'kknn'}) For classification and regression using package \pkg{kknn} with tuning parameters: \itemize{ \item Max. Number of Neighbors (\code{kmax}, numeric) \item Distance (\code{distance}, numeric) \item Kernel (\code{kernel}, character) } \strong{k-Nearest Neighbors} (\code{method = 'knn'}) For classification and regression with tuning parameters: \itemize{ \item Number of Neighbors (\code{k}, numeric) } \strong{Knn regression via sklearn.neighbors.KNeighborsRegressor} (\code{method = 'pythonKnnReg'}) For regression using package \pkg{rPython} with tuning parameters: \itemize{ \item Number of Neighbors (\code{n_neighbors}, numeric) \item Weight Function (\code{weights}, character) \item Algorithm (\code{algorithm}, character) \item Leaf Size (\code{leaf_size}, numeric) \item Distance Metric (\code{metric}, character) \item p (\code{p}, numeric) } \strong{L2 Regularized Linear Support Vector Machines with Class Weights} (\code{method = 'svmLinearWeights2'}) For classification using package \pkg{LiblineaR} with tuning parameters: \itemize{ \item Cost (\code{cost}, numeric) \item Loss Function (\code{Loss}, character) \item Class Weight (\code{weight}, numeric) } \strong{L2 Regularized Support Vector Machine (dual) with Linear Kernel} (\code{method = 'svmLinear3'}) For classification and regression using package \pkg{LiblineaR} with tuning parameters: \itemize{ \item Cost (\code{cost}, numeric) \item Loss Function (\code{Loss}, character) } \strong{Learning Vector Quantization} (\code{method = 'lvq'}) For classification using package \pkg{class} with tuning parameters: \itemize{ \item Codebook Size (\code{size}, numeric) \item Number of Prototypes (\code{k}, numeric) } \strong{Least Angle Regression} (\code{method = 'lars'}) For regression using package \pkg{lars} with tuning parameters: \itemize{ \item Fraction (\code{fraction}, numeric) } \strong{Least Angle Regression} (\code{method = 'lars2'}) For regression using package \pkg{lars} with tuning parameters: \itemize{ \item Number of Steps (\code{step}, numeric) } \strong{Least Squares Support Vector Machine} (\code{method = 'lssvmLinear'}) For classification using package \pkg{kernlab} with tuning parameters: \itemize{ \item Regularization Parameter (\code{tau}, numeric) } \strong{Least Squares Support Vector Machine with Polynomial Kernel} (\code{method = 'lssvmPoly'}) For classification using package \pkg{kernlab} with tuning parameters: \itemize{ \item Polynomial Degree (\code{degree}, numeric) \item Scale (\code{scale}, numeric) \item Regularization Parameter (\code{tau}, numeric) } \strong{Least Squares Support Vector Machine with Radial Basis Function Kernel} (\code{method = 'lssvmRadial'}) For classification using package \pkg{kernlab} with tuning parameters: \itemize{ \item Sigma (\code{sigma}, numeric) \item Regularization Parameter (\code{tau}, numeric) } \strong{Linear Discriminant Analysis} (\code{method = 'lda'}) For classification using package \pkg{MASS} with no tuning parameters. \strong{Linear Discriminant Analysis} (\code{method = 'lda2'}) For classification using package \pkg{MASS} with tuning parameters: \itemize{ \item Number of Discriminant Functions (\code{dimen}, numeric) } \strong{Linear Discriminant Analysis with Stepwise Feature Selection} (\code{method = 'stepLDA'}) For classification using packages \pkg{klaR} and \pkg{MASS} with tuning parameters: \itemize{ \item Maximum Number of Variables (\code{maxvar}, numeric) \item Search Direction (\code{direction}, character) } \strong{Linear Distance Weighted Discrimination} (\code{method = 'dwdLinear'}) For classification using package \pkg{kerndwd} with tuning parameters: \itemize{ \item Regularization Parameter (\code{lambda}, numeric) \item q (\code{qval}, numeric) } \strong{Linear Regression} (\code{method = 'lm'}) For regression with tuning parameters: \itemize{ \item intercept (\code{intercept}, logical) } \strong{Linear Regression with Backwards Selection} (\code{method = 'leapBackward'}) For regression using package \pkg{leaps} with tuning parameters: \itemize{ \item Maximum Number of Predictors (\code{nvmax}, numeric) } \strong{Linear Regression with Forward Selection} (\code{method = 'leapForward'}) For regression using package \pkg{leaps} with tuning parameters: \itemize{ \item Maximum Number of Predictors (\code{nvmax}, numeric) } \strong{Linear Regression with Stepwise Selection} (\code{method = 'leapSeq'}) For regression using package \pkg{leaps} with tuning parameters: \itemize{ \item Maximum Number of Predictors (\code{nvmax}, numeric) } \strong{Linear Regression with Stepwise Selection} (\code{method = 'lmStepAIC'}) For regression using package \pkg{MASS} with no tuning parameters. \strong{Linear Support Vector Machines with Class Weights} (\code{method = 'svmLinearWeights'}) For classification using package \pkg{e1071} with tuning parameters: \itemize{ \item Cost (\code{cost}, numeric) \item Class Weight (\code{weight}, numeric) } \strong{Localized Linear Discriminant Analysis} (\code{method = 'loclda'}) For classification using package \pkg{klaR} with tuning parameters: \itemize{ \item Number of Nearest Neighbors (\code{k}, numeric) } \strong{Logic Regression} (\code{method = 'logreg'}) For classification and regression using package \pkg{LogicReg} with tuning parameters: \itemize{ \item Maximum Number of Leaves (\code{treesize}, numeric) \item Number of Trees (\code{ntrees}, numeric) } \strong{Logistic Model Trees} (\code{method = 'LMT'}) For classification using package \pkg{RWeka} with tuning parameters: \itemize{ \item Number of Iteratons (\code{iter}, numeric) } \strong{Maximum Uncertainty Linear Discriminant Analysis} (\code{method = 'Mlda'}) For classification using package \pkg{HiDimDA} with no tuning parameters. \strong{Mixture Discriminant Analysis} (\code{method = 'mda'}) For classification using package \pkg{mda} with tuning parameters: \itemize{ \item Number of Subclasses Per Class (\code{subclasses}, numeric) } \strong{Model Averaged Naive Bayes Classifier} (\code{method = 'manb'}) For classification using package \pkg{bnclassify} with tuning parameters: \itemize{ \item Smoothing Parameter (\code{smooth}, numeric) \item Prior Probability (\code{prior}, numeric) } Note: Not on CRAN but can be installed from GitHub at \code{bmihaljevic/bnclassify}. \strong{Model Averaged Neural Network} (\code{method = 'avNNet'}) For classification and regression using package \pkg{nnet} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{size}, numeric) \item Weight Decay (\code{decay}, numeric) \item Bagging (\code{bag}, logical) } \strong{Model Rules} (\code{method = 'M5Rules'}) For regression using package \pkg{RWeka} with tuning parameters: \itemize{ \item Pruned (\code{pruned}, character) \item Smoothed (\code{smoothed}, character) } \strong{Model Tree} (\code{method = 'M5'}) For regression using package \pkg{RWeka} with tuning parameters: \itemize{ \item Pruned (\code{pruned}, character) \item Smoothed (\code{smoothed}, character) \item Rules (\code{rules}, character) } \strong{Monotone Multi-Layer Perceptron Neural Network} (\code{method = 'monmlp'}) For classification and regression using package \pkg{monmlp} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{hidden1}, numeric) \item Number of Models (\code{n.ensemble}, numeric) } \strong{Multi-Layer Perceptron} (\code{method = 'mlp'}) For classification and regression using package \pkg{RSNNS} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{size}, numeric) } \strong{Multi-Layer Perceptron} (\code{method = 'mlpWeightDecay'}) For classification and regression using package \pkg{RSNNS} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{size}, numeric) \item Weight Decay (\code{decay}, numeric) } \strong{Multi-Layer Perceptron, multiple layers} (\code{method = 'mlpWeightDecayML'}) For classification and regression using package \pkg{RSNNS} with tuning parameters: \itemize{ \item Number of Hidden Units layer1 (\code{layer1}, numeric) \item Number of Hidden Units layer2 (\code{layer2}, numeric) \item Number of Hidden Units layer3 (\code{layer3}, numeric) \item Weight Decay (\code{decay}, numeric) } \strong{Multi-Layer Perceptron, with multiple layers} (\code{method = 'mlpML'}) For classification and regression using package \pkg{RSNNS} with tuning parameters: \itemize{ \item Number of Hidden Units layer1 (\code{layer1}, numeric) \item Number of Hidden Units layer2 (\code{layer2}, numeric) \item Number of Hidden Units layer3 (\code{layer3}, numeric) } \strong{Multi-Step Adaptive MCP-Net} (\code{method = 'msaenet'}) For classification and regression using package \pkg{msaenet} with tuning parameters: \itemize{ \item Alpha (\code{alphas}, numeric) \item Number of Adaptive Estimation Steps (\code{nsteps}, numeric) \item Adaptive Weight Scaling Factor (\code{scale}, numeric) } \strong{Multilayer Perceptron Network by Stochastic Gradient Descent} (\code{method = 'mlpSGD'}) For classification and regression using packages \pkg{FCNN4R} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{size}, numeric) \item L2 Regularization (\code{l2reg}, numeric) \item RMSE Gradient Scaling (\code{lambda}, numeric) \item Learning Rate (\code{learn_rate}, numeric) \item Momentum (\code{momentum}, numeric) \item Learning Rate Decay (\code{gamma}, numeric) \item Batch Size (\code{minibatchsz}, numeric) \item Number of Models (\code{repeats}, numeric) } \strong{Multilayer Perceptron Network with Dropout} (\code{method = 'mlpKerasDropout'}) For classification and regression using package \pkg{keras} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{size}, numeric) \item Dropout Rate (\code{dropout}, numeric) \item Batch Size (\code{batch_size}, numeric) \item Learning Rate (\code{lr}, numeric) \item Rho (\code{rho}, numeric) \item Learning Rate Decay (\code{decay}, numeric) \item Activation Function (\code{activation}, character) } Note: After \code{train} completes, the keras model object is serialized so that it can be used between R session. When predicting, the code will temporarily unsearalize the object. To make the predictions more efficient, the user might want to use \code{keras::unsearlize_model(object$finalModel$object)} in the current R session so that that operation is only done once. Also, this model cannot be run in parallel due to the nature of how tensorflow does the computations. Unlike other packages used by \code{train}, the \code{dplyr} package is fully loaded when this model is used. \strong{Multilayer Perceptron Network with Dropout} (\code{method = 'mlpKerasDropoutCost'}) For classification using package \pkg{keras} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{size}, numeric) \item Dropout Rate (\code{dropout}, numeric) \item Batch Size (\code{batch_size}, numeric) \item Learning Rate (\code{lr}, numeric) \item Rho (\code{rho}, numeric) \item Learning Rate Decay (\code{decay}, numeric) \item Cost (\code{cost}, numeric) \item Activation Function (\code{activation}, character) } Note: After \code{train} completes, the keras model object is serialized so that it can be used between R session. When predicting, the code will temporarily unsearalize the object. To make the predictions more efficient, the user might want to use \code{keras::unsearlize_model(object$finalModel$object)} in the current R session so that that operation is only done once. Also, this model cannot be run in parallel due to the nature of how tensorflow does the computations. Finally, the cost parameter weights the first class in the outcome vector. Unlike other packages used by \code{train}, the \code{dplyr} package is fully loaded when this model is used. \strong{Multilayer Perceptron Network with Weight Decay} (\code{method = 'mlpKerasDecay'}) For classification and regression using package \pkg{keras} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{size}, numeric) \item L2 Regularization (\code{lambda}, numeric) \item Batch Size (\code{batch_size}, numeric) \item Learning Rate (\code{lr}, numeric) \item Rho (\code{rho}, numeric) \item Learning Rate Decay (\code{decay}, numeric) \item Activation Function (\code{activation}, character) } Note: After \code{train} completes, the keras model object is serialized so that it can be used between R session. When predicting, the code will temporarily unsearalize the object. To make the predictions more efficient, the user might want to use \code{keras::unsearlize_model(object$finalModel$object)} in the current R session so that that operation is only done once. Also, this model cannot be run in parallel due to the nature of how tensorflow does the computations. Unlike other packages used by \code{train}, the \code{dplyr} package is fully loaded when this model is used. \strong{Multilayer Perceptron Network with Weight Decay} (\code{method = 'mlpKerasDecayCost'}) For classification using package \pkg{keras} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{size}, numeric) \item L2 Regularization (\code{lambda}, numeric) \item Batch Size (\code{batch_size}, numeric) \item Learning Rate (\code{lr}, numeric) \item Rho (\code{rho}, numeric) \item Learning Rate Decay (\code{decay}, numeric) \item Cost (\code{cost}, numeric) \item Activation Function (\code{activation}, character) } Note: After \code{train} completes, the keras model object is serialized so that it can be used between R session. When predicting, the code will temporarily unsearalize the object. To make the predictions more efficient, the user might want to use \code{keras::unsearlize_model(object$finalModel$object)} in the current R session so that that operation is only done once. Also, this model cannot be run in parallel due to the nature of how tensorflow does the computations. Finally, the cost parameter weights the first class in the outcome vector. Unlike other packages used by \code{train}, the \code{dplyr} package is fully loaded when this model is used. \strong{Multivariate Adaptive Regression Spline} (\code{method = 'earth'}) For classification and regression using package \pkg{earth} with tuning parameters: \itemize{ \item Number of Terms (\code{nprune}, numeric) \item Product Degree (\code{degree}, numeric) } Note: Unlike other packages used by \code{train}, the \code{earth} package is fully loaded when this model is used. \strong{Multivariate Adaptive Regression Splines} (\code{method = 'gcvEarth'}) For classification and regression using package \pkg{earth} with tuning parameters: \itemize{ \item Product Degree (\code{degree}, numeric) } Note: Unlike other packages used by \code{train}, the \code{earth} package is fully loaded when this model is used. \strong{Naive Bayes} (\code{method = 'naive_bayes'}) For classification using package \pkg{naivebayes} with tuning parameters: \itemize{ \item Laplace Correction (\code{laplace}, numeric) \item Distribution Type (\code{usekernel}, logical) \item Bandwidth Adjustment (\code{adjust}, numeric) } \strong{Naive Bayes} (\code{method = 'nb'}) For classification using package \pkg{klaR} with tuning parameters: \itemize{ \item Laplace Correction (\code{fL}, numeric) \item Distribution Type (\code{usekernel}, logical) \item Bandwidth Adjustment (\code{adjust}, numeric) } \strong{Naive Bayes Classifier} (\code{method = 'nbDiscrete'}) For classification using package \pkg{bnclassify} with tuning parameters: \itemize{ \item Smoothing Parameter (\code{smooth}, numeric) } Note: Not on CRAN but can be installed from GitHub at \code{bmihaljevic/bnclassify}. \strong{Naive Bayes Classifier with Attribute Weighting} (\code{method = 'awnb'}) For classification using package \pkg{bnclassify} with tuning parameters: \itemize{ \item Smoothing Parameter (\code{smooth}, numeric) } Note: Not on CRAN but can be installed from GitHub at \code{bmihaljevic/bnclassify}. \strong{Nearest Shrunken Centroids} (\code{method = 'pam'}) For classification using package \pkg{pamr} with tuning parameters: \itemize{ \item Shrinkage Threshold (\code{threshold}, numeric) } \strong{Negative Binomial Generalized Linear Model} (\code{method = 'glm.nb'}) For regression using package \pkg{MASS} with tuning parameters: \itemize{ \item Link Function (\code{link}, character) } \strong{Neural Network} (\code{method = 'mxnet'}) For classification and regression using package \pkg{mxnet} with tuning parameters: \itemize{ \item Number of Hidden Units in Layer 1 (\code{layer1}, numeric) \item Number of Hidden Units in Layer 2 (\code{layer2}, numeric) \item Number of Hidden Units in Layer 3 (\code{layer3}, numeric) \item Learning Rate (\code{learning.rate}, numeric) \item Momentum (\code{momentum}, numeric) \item Dropout Rate (\code{dropout}, numeric) \item Activation Function (\code{activation}, character) } Note: The \code{mxnet} package is not yet on CRAN. See \url{http://mxnet.io} for installation instructions. \strong{Neural Network} (\code{method = 'mxnetAdam'}) For classification and regression using package \pkg{mxnet} with tuning parameters: \itemize{ \item Number of Hidden Units in Layer 1 (\code{layer1}, numeric) \item Number of Hidden Units in Layer 2 (\code{layer2}, numeric) \item Number of Hidden Units in Layer 3 (\code{layer3}, numeric) \item Dropout Rate (\code{dropout}, numeric) \item beta1 (\code{beta1}, numeric) \item beta2 (\code{beta2}, numeric) \item Learning Rate (\code{learningrate}, numeric) \item Activation Function (\code{activation}, character) } Note: The \code{mxnet} package is not yet on CRAN. See \url{http://mxnet.io} for installation instructions. Users are strongly advised to define \code{num.round} themselves. \strong{Neural Network} (\code{method = 'neuralnet'}) For regression using package \pkg{neuralnet} with tuning parameters: \itemize{ \item Number of Hidden Units in Layer 1 (\code{layer1}, numeric) \item Number of Hidden Units in Layer 2 (\code{layer2}, numeric) \item Number of Hidden Units in Layer 3 (\code{layer3}, numeric) } \strong{Neural Network} (\code{method = 'nnet'}) For classification and regression using package \pkg{nnet} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{size}, numeric) \item Weight Decay (\code{decay}, numeric) } \strong{Neural Networks with Feature Extraction} (\code{method = 'pcaNNet'}) For classification and regression using package \pkg{nnet} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{size}, numeric) \item Weight Decay (\code{decay}, numeric) } \strong{Non-Convex Penalized Quantile Regression} (\code{method = 'rqnc'}) For regression using package \pkg{rqPen} with tuning parameters: \itemize{ \item L1 Penalty (\code{lambda}, numeric) \item Penalty Type (\code{penalty}, character) } \strong{Non-Informative Model} (\code{method = 'null'}) For classification and regression with no tuning parameters. Note: Since this model always predicts the same value, R-squared values will always be estimated to be NA. \strong{Non-Negative Least Squares} (\code{method = 'nnls'}) For regression using package \pkg{nnls} with no tuning parameters. \strong{Oblique Random Forest} (\code{method = 'ORFlog'}) For classification using package \pkg{obliqueRF} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) } Note: Unlike other packages used by \code{train}, the \code{obliqueRF} package is fully loaded when this model is used. \strong{Oblique Random Forest} (\code{method = 'ORFpls'}) For classification using package \pkg{obliqueRF} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) } Note: Unlike other packages used by \code{train}, the \code{obliqueRF} package is fully loaded when this model is used. \strong{Oblique Random Forest} (\code{method = 'ORFridge'}) For classification using package \pkg{obliqueRF} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) } Note: Unlike other packages used by \code{train}, the \code{obliqueRF} package is fully loaded when this model is used. \strong{Oblique Random Forest} (\code{method = 'ORFsvm'}) For classification using package \pkg{obliqueRF} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) } Note: Unlike other packages used by \code{train}, the \code{obliqueRF} package is fully loaded when this model is used. \strong{Optimal Weighted Nearest Neighbor Classifier} (\code{method = 'ownn'}) For classification using package \pkg{snn} with tuning parameters: \itemize{ \item Number of Neighbors (\code{K}, numeric) } \strong{Ordered Logistic or Probit Regression} (\code{method = 'polr'}) For classification using package \pkg{MASS} with tuning parameters: \itemize{ \item parameter (\code{method}, character) } \strong{Parallel Random Forest} (\code{method = 'parRF'}) For classification and regression using packages \pkg{e1071}, \pkg{randomForest}, \pkg{foreach} and \pkg{import} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) } \strong{partDSA} (\code{method = 'partDSA'}) For classification and regression using package \pkg{partDSA} with tuning parameters: \itemize{ \item Number of Terminal Partitions (\code{cut.off.growth}, numeric) \item Minimum Percent Difference (\code{MPD}, numeric) } \strong{Partial Least Squares} (\code{method = 'kernelpls'}) For classification and regression using package \pkg{pls} with tuning parameters: \itemize{ \item Number of Components (\code{ncomp}, numeric) } \strong{Partial Least Squares} (\code{method = 'pls'}) For classification and regression using package \pkg{pls} with tuning parameters: \itemize{ \item Number of Components (\code{ncomp}, numeric) } \strong{Partial Least Squares} (\code{method = 'simpls'}) For classification and regression using package \pkg{pls} with tuning parameters: \itemize{ \item Number of Components (\code{ncomp}, numeric) } \strong{Partial Least Squares} (\code{method = 'widekernelpls'}) For classification and regression using package \pkg{pls} with tuning parameters: \itemize{ \item Number of Components (\code{ncomp}, numeric) } \strong{Partial Least Squares Generalized Linear Models } (\code{method = 'plsRglm'}) For classification and regression using package \pkg{plsRglm} with tuning parameters: \itemize{ \item Number of PLS Components (\code{nt}, numeric) \item p-Value threshold (\code{alpha.pvals.expli}, numeric) } Note: Unlike other packages used by \code{train}, the \code{plsRglm} package is fully loaded when this model is used. \strong{Patient Rule Induction Method} (\code{method = 'PRIM'}) For classification using package \pkg{supervisedPRIM} with tuning parameters: \itemize{ \item peeling quantile (\code{peel.alpha}, numeric) \item pasting quantile (\code{paste.alpha}, numeric) \item minimum mass (\code{mass.min}, numeric) } \strong{Penalized Discriminant Analysis} (\code{method = 'pda'}) For classification using package \pkg{mda} with tuning parameters: \itemize{ \item Shrinkage Penalty Coefficient (\code{lambda}, numeric) } \strong{Penalized Discriminant Analysis} (\code{method = 'pda2'}) For classification using package \pkg{mda} with tuning parameters: \itemize{ \item Degrees of Freedom (\code{df}, numeric) } \strong{Penalized Linear Discriminant Analysis} (\code{method = 'PenalizedLDA'}) For classification using packages \pkg{penalizedLDA} and \pkg{plyr} with tuning parameters: \itemize{ \item L1 Penalty (\code{lambda}, numeric) \item Number of Discriminant Functions (\code{K}, numeric) } \strong{Penalized Linear Regression} (\code{method = 'penalized'}) For regression using package \pkg{penalized} with tuning parameters: \itemize{ \item L1 Penalty (\code{lambda1}, numeric) \item L2 Penalty (\code{lambda2}, numeric) } \strong{Penalized Logistic Regression} (\code{method = 'plr'}) For classification using package \pkg{stepPlr} with tuning parameters: \itemize{ \item L2 Penalty (\code{lambda}, numeric) \item Complexity Parameter (\code{cp}, character) } \strong{Penalized Multinomial Regression} (\code{method = 'multinom'}) For classification using package \pkg{nnet} with tuning parameters: \itemize{ \item Weight Decay (\code{decay}, numeric) } \strong{Penalized Ordinal Regression} (\code{method = 'ordinalNet'}) For classification using packages \pkg{ordinalNet} and \pkg{plyr} with tuning parameters: \itemize{ \item Mixing Percentage (\code{alpha}, numeric) \item Selection Criterion (\code{criteria}, character) \item Link Function (\code{link}, character) } Note: Requires ordinalNet package version >= 2.0 \strong{Polynomial Kernel Regularized Least Squares} (\code{method = 'krlsPoly'}) For regression using package \pkg{KRLS} with tuning parameters: \itemize{ \item Regularization Parameter (\code{lambda}, numeric) \item Polynomial Degree (\code{degree}, numeric) } \strong{Principal Component Analysis} (\code{method = 'pcr'}) For regression using package \pkg{pls} with tuning parameters: \itemize{ \item Number of Components (\code{ncomp}, numeric) } \strong{Projection Pursuit Regression} (\code{method = 'ppr'}) For regression with tuning parameters: \itemize{ \item Number of Terms (\code{nterms}, numeric) } \strong{Quadratic Discriminant Analysis} (\code{method = 'qda'}) For classification using package \pkg{MASS} with no tuning parameters. \strong{Quadratic Discriminant Analysis with Stepwise Feature Selection} (\code{method = 'stepQDA'}) For classification using packages \pkg{klaR} and \pkg{MASS} with tuning parameters: \itemize{ \item Maximum Number of Variables (\code{maxvar}, numeric) \item Search Direction (\code{direction}, character) } \strong{Quantile Random Forest} (\code{method = 'qrf'}) For regression using package \pkg{quantregForest} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) } \strong{Quantile Regression Neural Network} (\code{method = 'qrnn'}) For regression using package \pkg{qrnn} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{n.hidden}, numeric) \item Weight Decay (\code{penalty}, numeric) \item Bagged Models? (\code{bag}, logical) } \strong{Quantile Regression with LASSO penalty} (\code{method = 'rqlasso'}) For regression using package \pkg{rqPen} with tuning parameters: \itemize{ \item L1 Penalty (\code{lambda}, numeric) } \strong{Radial Basis Function Kernel Regularized Least Squares} (\code{method = 'krlsRadial'}) For regression using packages \pkg{KRLS} and \pkg{kernlab} with tuning parameters: \itemize{ \item Regularization Parameter (\code{lambda}, numeric) \item Sigma (\code{sigma}, numeric) } \strong{Radial Basis Function Network} (\code{method = 'rbf'}) For classification and regression using package \pkg{RSNNS} with tuning parameters: \itemize{ \item Number of Hidden Units (\code{size}, numeric) } \strong{Radial Basis Function Network} (\code{method = 'rbfDDA'}) For classification and regression using package \pkg{RSNNS} with tuning parameters: \itemize{ \item Activation Limit for Conflicting Classes (\code{negativeThreshold}, numeric) } \strong{Random Ferns} (\code{method = 'rFerns'}) For classification using package \pkg{rFerns} with tuning parameters: \itemize{ \item Fern Depth (\code{depth}, numeric) } \strong{Random Forest} (\code{method = 'ranger'}) For classification and regression using packages \pkg{e1071}, \pkg{ranger} and \pkg{dplyr} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) \item Splitting Rule (\code{splitrule}, character) \item Minimal Node Size (\code{min.node.size}, numeric) } \strong{Random Forest} (\code{method = 'Rborist'}) For classification and regression using package \pkg{Rborist} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{predFixed}, numeric) \item Minimal Node Size (\code{minNode}, numeric) } \strong{Random Forest} (\code{method = 'rf'}) For classification and regression using package \pkg{randomForest} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) } \strong{Random Forest by Randomization} (\code{method = 'extraTrees'}) For classification and regression using package \pkg{extraTrees} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) \item Number of Random Cuts (\code{numRandomCuts}, numeric) } \strong{Random Forest Rule-Based Model} (\code{method = 'rfRules'}) For classification and regression using packages \pkg{randomForest}, \pkg{inTrees} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) \item Maximum Rule Depth (\code{maxdepth}, numeric) } \strong{Regularized Discriminant Analysis} (\code{method = 'rda'}) For classification using package \pkg{klaR} with tuning parameters: \itemize{ \item Gamma (\code{gamma}, numeric) \item Lambda (\code{lambda}, numeric) } \strong{Regularized Linear Discriminant Analysis} (\code{method = 'rlda'}) For classification using package \pkg{sparsediscrim} with tuning parameters: \itemize{ \item Regularization Method (\code{estimator}, character) } \strong{Regularized Logistic Regression} (\code{method = 'regLogistic'}) For classification using package \pkg{LiblineaR} with tuning parameters: \itemize{ \item Cost (\code{cost}, numeric) \item Loss Function (\code{loss}, character) \item Tolerance (\code{epsilon}, numeric) } \strong{Regularized Random Forest} (\code{method = 'RRF'}) For classification and regression using packages \pkg{randomForest} and \pkg{RRF} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) \item Regularization Value (\code{coefReg}, numeric) \item Importance Coefficient (\code{coefImp}, numeric) } \strong{Regularized Random Forest} (\code{method = 'RRFglobal'}) For classification and regression using package \pkg{RRF} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) \item Regularization Value (\code{coefReg}, numeric) } \strong{Relaxed Lasso} (\code{method = 'relaxo'}) For regression using packages \pkg{relaxo} and \pkg{plyr} with tuning parameters: \itemize{ \item Penalty Parameter (\code{lambda}, numeric) \item Relaxation Parameter (\code{phi}, numeric) } \strong{Relevance Vector Machines with Linear Kernel} (\code{method = 'rvmLinear'}) For regression using package \pkg{kernlab} with no tuning parameters. \strong{Relevance Vector Machines with Polynomial Kernel} (\code{method = 'rvmPoly'}) For regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item Scale (\code{scale}, numeric) \item Polynomial Degree (\code{degree}, numeric) } \strong{Relevance Vector Machines with Radial Basis Function Kernel} (\code{method = 'rvmRadial'}) For regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item Sigma (\code{sigma}, numeric) } \strong{Ridge Regression} (\code{method = 'ridge'}) For regression using package \pkg{elasticnet} with tuning parameters: \itemize{ \item Weight Decay (\code{lambda}, numeric) } \strong{Ridge Regression with Variable Selection} (\code{method = 'foba'}) For regression using package \pkg{foba} with tuning parameters: \itemize{ \item Number of Variables Retained (\code{k}, numeric) \item L2 Penalty (\code{lambda}, numeric) } \strong{Robust Linear Discriminant Analysis} (\code{method = 'Linda'}) For classification using package \pkg{rrcov} with no tuning parameters. \strong{Robust Linear Model} (\code{method = 'rlm'}) For regression using package \pkg{MASS} with tuning parameters: \itemize{ \item intercept (\code{intercept}, logical) \item psi (\code{psi}, character) } \strong{Robust Mixture Discriminant Analysis} (\code{method = 'rmda'}) For classification using package \pkg{robustDA} with tuning parameters: \itemize{ \item Number of Subclasses Per Class (\code{K}, numeric) \item Model (\code{model}, character) } \strong{Robust Quadratic Discriminant Analysis} (\code{method = 'QdaCov'}) For classification using package \pkg{rrcov} with no tuning parameters. \strong{Robust Regularized Linear Discriminant Analysis} (\code{method = 'rrlda'}) For classification using package \pkg{rrlda} with tuning parameters: \itemize{ \item Penalty Parameter (\code{lambda}, numeric) \item Robustness Parameter (\code{hp}, numeric) \item Penalty Type (\code{penalty}, character) } Note: Unlike other packages used by \code{train}, the \code{rrlda} package is fully loaded when this model is used. \strong{Robust SIMCA} (\code{method = 'RSimca'}) For classification using package \pkg{rrcovHD} with no tuning parameters. Note: Unlike other packages used by \code{train}, the \code{rrcovHD} package is fully loaded when this model is used. \strong{ROC-Based Classifier} (\code{method = 'rocc'}) For classification using package \pkg{rocc} with tuning parameters: \itemize{ \item Number of Variables Retained (\code{xgenes}, numeric) } \strong{Rotation Forest} (\code{method = 'rotationForest'}) For classification using package \pkg{rotationForest} with tuning parameters: \itemize{ \item Number of Variable Subsets (\code{K}, numeric) \item Ensemble Size (\code{L}, numeric) } \strong{Rotation Forest} (\code{method = 'rotationForestCp'}) For classification using packages \pkg{rpart}, \pkg{plyr} and \pkg{rotationForest} with tuning parameters: \itemize{ \item Number of Variable Subsets (\code{K}, numeric) \item Ensemble Size (\code{L}, numeric) \item Complexity Parameter (\code{cp}, numeric) } \strong{Rule-Based Classifier} (\code{method = 'JRip'}) For classification using package \pkg{RWeka} with tuning parameters: \itemize{ \item Number of Optimizations (\code{NumOpt}, numeric) \item Number of Folds (\code{NumFolds}, numeric) \item Min Weights (\code{MinWeights}, numeric) } \strong{Rule-Based Classifier} (\code{method = 'PART'}) For classification using package \pkg{RWeka} with tuning parameters: \itemize{ \item Confidence Threshold (\code{threshold}, numeric) \item Pruning (\code{pruned}, character) } \strong{Self-Organizing Maps} (\code{method = 'xyf'}) For classification and regression using package \pkg{kohonen} with tuning parameters: \itemize{ \item Rows (\code{xdim}, numeric) \item Columns (\code{ydim}, numeric) \item Layer Weight (\code{user.weights}, numeric) \item Topology (\code{topo}, character) } Note: As of version 3.0.0 of the kohonen package, the argument \code{user.weights} replaces the old \code{alpha} parameter. \code{user.weights} is usually a vector of relative weights such as \code{c(1, 3)} but is parameterized here as a proportion such as \code{c(1-.75, .75)} where the .75 is the value of the tuning parameter passed to \code{train} and indicates that the outcome layer has 3 times the weight as the predictor layer. \strong{Semi-Naive Structure Learner Wrapper} (\code{method = 'nbSearch'}) For classification using package \pkg{bnclassify} with tuning parameters: \itemize{ \item Number of Folds (\code{k}, numeric) \item Minimum Absolute Improvement (\code{epsilon}, numeric) \item Smoothing Parameter (\code{smooth}, numeric) \item Final Smoothing Parameter (\code{final_smooth}, numeric) \item Search Direction (\code{direction}, character) } Note: Not on CRAN but can be installed from GitHub at \code{bmihaljevic/bnclassify}. \strong{Shrinkage Discriminant Analysis} (\code{method = 'sda'}) For classification using package \pkg{sda} with tuning parameters: \itemize{ \item Diagonalize (\code{diagonal}, logical) \item shrinkage (\code{lambda}, numeric) } \strong{SIMCA} (\code{method = 'CSimca'}) For classification using packages \pkg{rrcov} and \pkg{rrcovHD} with no tuning parameters. \strong{Simplified TSK Fuzzy Rules} (\code{method = 'FS.HGD'}) For regression using package \pkg{frbs} with tuning parameters: \itemize{ \item Number of Fuzzy Terms (\code{num.labels}, numeric) \item Max. Iterations (\code{max.iter}, numeric) } \strong{Single C5.0 Ruleset} (\code{method = 'C5.0Rules'}) For classification using package \pkg{C50} with no tuning parameters. \strong{Single C5.0 Tree} (\code{method = 'C5.0Tree'}) For classification using package \pkg{C50} with no tuning parameters. \strong{Single Rule Classification} (\code{method = 'OneR'}) For classification using package \pkg{RWeka} with no tuning parameters. \strong{Sparse Distance Weighted Discrimination} (\code{method = 'sdwd'}) For classification using package \pkg{sdwd} with tuning parameters: \itemize{ \item L1 Penalty (\code{lambda}, numeric) \item L2 Penalty (\code{lambda2}, numeric) } \strong{Sparse Linear Discriminant Analysis} (\code{method = 'sparseLDA'}) For classification using package \pkg{sparseLDA} with tuning parameters: \itemize{ \item Number of Predictors (\code{NumVars}, numeric) \item Lambda (\code{lambda}, numeric) } \strong{Sparse Mixture Discriminant Analysis} (\code{method = 'smda'}) For classification using package \pkg{sparseLDA} with tuning parameters: \itemize{ \item Number of Predictors (\code{NumVars}, numeric) \item Lambda (\code{lambda}, numeric) \item Number of Subclasses (\code{R}, numeric) } \strong{Sparse Partial Least Squares} (\code{method = 'spls'}) For classification and regression using package \pkg{spls} with tuning parameters: \itemize{ \item Number of Components (\code{K}, numeric) \item Threshold (\code{eta}, numeric) \item Kappa (\code{kappa}, numeric) } \strong{Spike and Slab Regression} (\code{method = 'spikeslab'}) For regression using packages \pkg{spikeslab} and \pkg{plyr} with tuning parameters: \itemize{ \item Variables Retained (\code{vars}, numeric) } Note: Unlike other packages used by \code{train}, the \code{spikeslab} package is fully loaded when this model is used. \strong{Stabilized Linear Discriminant Analysis} (\code{method = 'slda'}) For classification using package \pkg{ipred} with no tuning parameters. \strong{Stabilized Nearest Neighbor Classifier} (\code{method = 'snn'}) For classification using package \pkg{snn} with tuning parameters: \itemize{ \item Stabilization Parameter (\code{lambda}, numeric) } \strong{Stacked AutoEncoder Deep Neural Network} (\code{method = 'dnn'}) For classification and regression using package \pkg{deepnet} with tuning parameters: \itemize{ \item Hidden Layer 1 (\code{layer1}, numeric) \item Hidden Layer 2 (\code{layer2}, numeric) \item Hidden Layer 3 (\code{layer3}, numeric) \item Hidden Dropouts (\code{hidden_dropout}, numeric) \item Visible Dropout (\code{visible_dropout}, numeric) } \strong{Stochastic Gradient Boosting} (\code{method = 'gbm'}) For classification and regression using packages \pkg{gbm} and \pkg{plyr} with tuning parameters: \itemize{ \item Number of Boosting Iterations (\code{n.trees}, numeric) \item Max Tree Depth (\code{interaction.depth}, numeric) \item Shrinkage (\code{shrinkage}, numeric) \item Min. Terminal Node Size (\code{n.minobsinnode}, numeric) } \strong{Subtractive Clustering and Fuzzy c-Means Rules} (\code{method = 'SBC'}) For regression using package \pkg{frbs} with tuning parameters: \itemize{ \item Radius (\code{r.a}, numeric) \item Upper Threshold (\code{eps.high}, numeric) \item Lower Threshold (\code{eps.low}, numeric) } \strong{Supervised Principal Component Analysis} (\code{method = 'superpc'}) For regression using package \pkg{superpc} with tuning parameters: \itemize{ \item Threshold (\code{threshold}, numeric) \item Number of Components (\code{n.components}, numeric) } \strong{Support Vector Machines with Boundrange String Kernel} (\code{method = 'svmBoundrangeString'}) For classification and regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item length (\code{length}, numeric) \item Cost (\code{C}, numeric) } \strong{Support Vector Machines with Class Weights} (\code{method = 'svmRadialWeights'}) For classification using package \pkg{kernlab} with tuning parameters: \itemize{ \item Sigma (\code{sigma}, numeric) \item Cost (\code{C}, numeric) \item Weight (\code{Weight}, numeric) } \strong{Support Vector Machines with Exponential String Kernel} (\code{method = 'svmExpoString'}) For classification and regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item lambda (\code{lambda}, numeric) \item Cost (\code{C}, numeric) } \strong{Support Vector Machines with Linear Kernel} (\code{method = 'svmLinear'}) For classification and regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item Cost (\code{C}, numeric) } \strong{Support Vector Machines with Linear Kernel} (\code{method = 'svmLinear2'}) For classification and regression using package \pkg{e1071} with tuning parameters: \itemize{ \item Cost (\code{cost}, numeric) } \strong{Support Vector Machines with Polynomial Kernel} (\code{method = 'svmPoly'}) For classification and regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item Polynomial Degree (\code{degree}, numeric) \item Scale (\code{scale}, numeric) \item Cost (\code{C}, numeric) } \strong{Support Vector Machines with Radial Basis Function Kernel} (\code{method = 'svmRadial'}) For classification and regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item Sigma (\code{sigma}, numeric) \item Cost (\code{C}, numeric) } \strong{Support Vector Machines with Radial Basis Function Kernel} (\code{method = 'svmRadialCost'}) For classification and regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item Cost (\code{C}, numeric) } \strong{Support Vector Machines with Radial Basis Function Kernel} (\code{method = 'svmRadialSigma'}) For classification and regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item Sigma (\code{sigma}, numeric) \item Cost (\code{C}, numeric) } Note: This SVM model tunes over the cost parameter and the RBF kernel parameter sigma. In the latter case, using \code{tuneLength} will, at most, evaluate six values of the kernel parameter. This enables a broad search over the cost parameter and a relatively narrow search over \code{sigma} \strong{Support Vector Machines with Spectrum String Kernel} (\code{method = 'svmSpectrumString'}) For classification and regression using package \pkg{kernlab} with tuning parameters: \itemize{ \item length (\code{length}, numeric) \item Cost (\code{C}, numeric) } \strong{The Bayesian lasso} (\code{method = 'blasso'}) For regression using package \pkg{monomvn} with tuning parameters: \itemize{ \item Sparsity Threshold (\code{sparsity}, numeric) } Note: This model creates predictions using the mean of the posterior distributions but sets some parameters specifically to zero based on the tuning parameter \code{sparsity}. For example, when \code{sparsity = .5}, only coefficients where at least half the posterior estimates are nonzero are used. \strong{The lasso} (\code{method = 'lasso'}) For regression using package \pkg{elasticnet} with tuning parameters: \itemize{ \item Fraction of Full Solution (\code{fraction}, numeric) } \strong{Tree Augmented Naive Bayes Classifier} (\code{method = 'tan'}) For classification using package \pkg{bnclassify} with tuning parameters: \itemize{ \item Score Function (\code{score}, character) \item Smoothing Parameter (\code{smooth}, numeric) } Note: Not on CRAN but can be installed from GitHub at \code{bmihaljevic/bnclassify}. \strong{Tree Augmented Naive Bayes Classifier Structure Learner Wrapper} (\code{method = 'tanSearch'}) For classification using package \pkg{bnclassify} with tuning parameters: \itemize{ \item Number of Folds (\code{k}, numeric) \item Minimum Absolute Improvement (\code{epsilon}, numeric) \item Smoothing Parameter (\code{smooth}, numeric) \item Final Smoothing Parameter (\code{final_smooth}, numeric) \item Super-Parent (\code{sp}, logical) } Note: Not on CRAN but can be installed from GitHub at \code{bmihaljevic/bnclassify}. \strong{Tree Augmented Naive Bayes Classifier with Attribute Weighting} (\code{method = 'awtan'}) For classification using package \pkg{bnclassify} with tuning parameters: \itemize{ \item Score Function (\code{score}, character) \item Smoothing Parameter (\code{smooth}, numeric) } Note: Not on CRAN but can be installed from GitHub at \code{bmihaljevic/bnclassify}. \strong{Tree Models from Genetic Algorithms} (\code{method = 'evtree'}) For classification and regression using package \pkg{evtree} with tuning parameters: \itemize{ \item Complexity Parameter (\code{alpha}, numeric) } \strong{Tree-Based Ensembles} (\code{method = 'nodeHarvest'}) For classification and regression using package \pkg{nodeHarvest} with tuning parameters: \itemize{ \item Maximum Interaction Depth (\code{maxinter}, numeric) \item Prediction Mode (\code{mode}, character) } \strong{Variational Bayesian Multinomial Probit Regression} (\code{method = 'vbmpRadial'}) For classification using package \pkg{vbmp} with tuning parameters: \itemize{ \item Theta Estimated (\code{estimateTheta}, character) } \strong{Wang and Mendel Fuzzy Rules} (\code{method = 'WM'}) For regression using package \pkg{frbs} with tuning parameters: \itemize{ \item Number of Fuzzy Terms (\code{num.labels}, numeric) \item Membership Function (\code{type.mf}, character) } \strong{Weighted Subspace Random Forest} (\code{method = 'wsrf'}) For classification using package \pkg{wsrf} with tuning parameters: \itemize{ \item Number of Randomly Selected Predictors (\code{mtry}, numeric) } } \references{``Using your own model in \code{\link{train}}'' (\url{https://topepo.github.io/caret/using-your-own-model-in-train.html})} \keyword{models} caret/man/rfe.Rd0000644000176200001440000001511713153613153013174 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/rfe.R \name{rfe} \alias{rfe} \alias{rfe.default} \alias{rfeIter} \alias{predict.rfe} \alias{update.rfe} \alias{rfe.default} \alias{rfeIter} \alias{update.rfe} \title{Backwards Feature Selection} \usage{ rfe(x, ...) \method{rfe}{default}(x, y, sizes = 2^(2:4), metric = ifelse(is.factor(y), "Accuracy", "RMSE"), maximize = ifelse(metric == "RMSE", FALSE, TRUE), rfeControl = rfeControl(), ...) rfeIter(x, y, testX, testY, sizes, rfeControl = rfeControl(), label = "", seeds = NA, ...) \method{update}{rfe}(object, x, y, size, ...) } \arguments{ \item{x}{a matrix or data frame of predictors for model training. This object must have unique column names.} \item{\dots}{options to pass to the model fitting function (ignored in \code{predict.rfe})} \item{y}{a vector of training set outcomes (either numeric or factor)} \item{sizes}{a numeric vector of integers corresponding to the number of features that should be retained} \item{metric}{a string that specifies what summary metric will be used to select the optimal model. By default, possible values are "RMSE" and "Rsquared" for regression and "Accuracy" and "Kappa" for classification. If custom performance metrics are used (via the \code{functions} argument in \code{\link{rfeControl}}, the value of \code{metric} should match one of the arguments.} \item{maximize}{a logical: should the metric be maximized or minimized?} \item{rfeControl}{a list of options, including functions for fitting and prediction. The web page \url{http://topepo.github.io/caret/recursive-feature-elimination.html#rfe} has more details and examples related to this function.} \item{testX}{a matrix or data frame of test set predictors. This must have the same column names as \code{x}} \item{testY}{a vector of test set outcomes} \item{label}{an optional character string to be printed when in verbose mode.} \item{seeds}{an optional vector of integers for the size. The vector should have length of \code{length(sizes)+1}} \item{object}{an object of class \code{rfe}} \item{size}{a single integers corresponding to the number of features that should be retained in the updated model} } \value{ A list with elements \item{finalVariables}{a list of size \code{length(sizes) + 1} containing the column names of the ``surviving'' predictors at each stage of selection. The first element corresponds to all the predictors (i.e. \code{size = ncol(x)})} \item{pred }{a data frame with columns for the test set outcome, the predicted outcome and the subset size.} } \description{ A simple backwards selection, a.k.a. recursive feature elimination (RFE), algorithm } \details{ More details on this function can be found at \url{http://topepo.github.io/caret/recursive-feature-elimination.html}. This function implements backwards selection of predictors based on predictor importance ranking. The predictors are ranked and the less important ones are sequentially eliminated prior to modeling. The goal is to find a subset of predictors that can be used to produce an accurate model. The web page \url{http://topepo.github.io/caret/recursive-feature-elimination.html#rfe} has more details and examples related to this function. \code{rfe} can be used with "explicit parallelism", where different resamples (e.g. cross-validation group) can be split up and run on multiple machines or processors. By default, \code{rfe} will use a single processor on the host machine. As of version 4.99 of this package, the framework used for parallel processing uses the \pkg{foreach} package. To run the resamples in parallel, the code for \code{rfe} does not change; prior to the call to \code{rfe}, a parallel backend is registered with \pkg{foreach} (see the examples below). \code{rfeIter} is the basic algorithm while \code{rfe} wraps these operations inside of resampling. To avoid selection bias, it is better to use the function \code{rfe} than \code{rfeIter}. When updating a model, if the entire set of resamples were not saved using \code{rfeControl(returnResamp = "final")}, the existing resamples are removed with a warning. } \examples{ \dontrun{ data(BloodBrain) x <- scale(bbbDescr[,-nearZeroVar(bbbDescr)]) x <- x[, -findCorrelation(cor(x), .8)] x <- as.data.frame(x) set.seed(1) lmProfile <- rfe(x, logBBB, sizes = c(2:25, 30, 35, 40, 45, 50, 55, 60, 65), rfeControl = rfeControl(functions = lmFuncs, number = 200)) set.seed(1) lmProfile2 <- rfe(x, logBBB, sizes = c(2:25, 30, 35, 40, 45, 50, 55, 60, 65), rfeControl = rfeControl(functions = lmFuncs, rerank = TRUE, number = 200)) xyplot(lmProfile$results$RMSE + lmProfile2$results$RMSE ~ lmProfile$results$Variables, type = c("g", "p", "l"), auto.key = TRUE) rfProfile <- rfe(x, logBBB, sizes = c(2, 5, 10, 20), rfeControl = rfeControl(functions = rfFuncs)) bagProfile <- rfe(x, logBBB, sizes = c(2, 5, 10, 20), rfeControl = rfeControl(functions = treebagFuncs)) set.seed(1) svmProfile <- rfe(x, logBBB, sizes = c(2, 5, 10, 20), rfeControl = rfeControl(functions = caretFuncs, number = 200), ## pass options to train() method = "svmRadial") ## classification data(mdrr) mdrrDescr <- mdrrDescr[,-nearZeroVar(mdrrDescr)] mdrrDescr <- mdrrDescr[, -findCorrelation(cor(mdrrDescr), .8)] set.seed(1) inTrain <- createDataPartition(mdrrClass, p = .75, list = FALSE)[,1] train <- mdrrDescr[ inTrain, ] test <- mdrrDescr[-inTrain, ] trainClass <- mdrrClass[ inTrain] testClass <- mdrrClass[-inTrain] set.seed(2) ldaProfile <- rfe(train, trainClass, sizes = c(1:10, 15, 30), rfeControl = rfeControl(functions = ldaFuncs, method = "cv")) plot(ldaProfile, type = c("o", "g")) postResample(predict(ldaProfile, test), testClass) } ####################################### ## Parallel Processing Example via multicore \dontrun{ library(doMC) ## Note: if the underlying model also uses foreach, the ## number of cores specified above will double (along with ## the memory requirements) registerDoMC(cores = 2) set.seed(1) lmProfile <- rfe(x, logBBB, sizes = c(2:25, 30, 35, 40, 45, 50, 55, 60, 65), rfeControl = rfeControl(functions = lmFuncs, number = 200)) } } \seealso{ \code{\link{rfeControl}} } \author{ Max Kuhn } \keyword{models} caret/man/var_seq.Rd0000644000176200001440000000166013153613153014056 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/misc.R \name{var_seq} \alias{var_seq} \title{Sequences of Variables for Tuning} \usage{ var_seq(p, classification = FALSE, len = 3) } \arguments{ \item{p}{The number of predictors} \item{classification}{Is the outcome a factor (\code{classification = TRUE} or numeric?)} \item{len}{The number of \code{mtry} values to generate.} } \value{ a numeric vector } \description{ This function generates a sequence of \code{mtry} values for random forests. } \details{ If the number of predictors is less than 500, a simple sequence of values of length \code{len} is generated between 2 and \code{p}. For larger numbers of predictors, the sequence is created using \code{log2} steps. If \code{len = 1}, the defaults from the \code{randomForest} package are used. } \examples{ var_seq(p = 100, len = 10) var_seq(p = 600, len = 10) } \author{ Max Kuhn } \keyword{models} caret/man/update.train.Rd0000644000176200001440000000343313153613153015014 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/updates.R \name{update.train} \alias{update.train} \title{Update or Re-fit a Model} \usage{ \method{update}{train}(object, param = NULL, ...) } \arguments{ \item{object}{an object of class \code{\link{train}}} \item{param}{a data frame or named list of all tuning parameters} \item{\dots}{not currently used} } \value{ a new \code{\link{train}} object } \description{ \code{update} allows a user to over-ride the tuning parameter selection process by specifying a set of tuning parameters or to update the model object to the latest version of this package. } \details{ If the model object was created with version 5.17-7 or earlier, the underlying package structure was different. To make old \code{\link{train}} objects consistent with the new structure, use \code{param = NULL} to get the same object back with updates. To update the model parameters, the training data must be stored in the model object (see the option \code{returnData} in \code{\link{trainControl}}. Also, all tuning parameters must be specified in the \code{param} slot. All other options are held constant, including the original pre-processing (if any), options passed in using code... and so on. When printing, the verbiage "The tuning parameter was set manually." is used to describe how the tuning parameters were created. } \examples{ \dontrun{ data(iris) TrainData <- iris[,1:4] TrainClasses <- iris[,5] knnFit1 <- train(TrainData, TrainClasses, method = "knn", preProcess = c("center", "scale"), tuneLength = 10, trControl = trainControl(method = "cv")) update(knnFit1, list(.k = 3)) } } \seealso{ \code{\link{train}}, \code{\link{trainControl}} } \author{ Max Kuhn } \keyword{models} caret/man/sbfControl.Rd0000644000176200001440000001427613153613153014540 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/selectByFilter.R \name{sbfControl} \alias{sbfControl} \title{Control Object for Selection By Filtering (SBF)} \usage{ sbfControl(functions = NULL, method = "boot", saveDetails = FALSE, number = ifelse(method \%in\% c("cv", "repeatedcv"), 10, 25), repeats = ifelse(method \%in\% c("cv", "repeatedcv"), 1, number), verbose = FALSE, returnResamp = "final", p = 0.75, index = NULL, indexOut = NULL, timingSamps = 0, seeds = NA, allowParallel = TRUE, multivariate = FALSE) } \arguments{ \item{functions}{a list of functions for model fitting, prediction and variable filtering (see Details below)} \item{method}{The external resampling method: \code{boot}, \code{cv}, \code{LOOCV} or \code{LGOCV} (for repeated training/test splits} \item{saveDetails}{a logical to save the predictions and variable importances from the selection process} \item{number}{Either the number of folds or number of resampling iterations} \item{repeats}{For repeated k-fold cross-validation only: the number of complete sets of folds to compute} \item{verbose}{a logical to print a log for each external resampling iteration} \item{returnResamp}{A character string indicating how much of the resampled summary metrics should be saved. Values can be ``final'' or ``none''} \item{p}{For leave-group out cross-validation: the training percentage} \item{index}{a list with elements for each external resampling iteration. Each list element is the sample rows used for training at that iteration.} \item{indexOut}{a list (the same length as \code{index}) that dictates which sample are held-out for each resample. If \code{NULL}, then the unique set of samples not contained in \code{index} is used.} \item{timingSamps}{the number of training set samples that will be used to measure the time for predicting samples (zero indicates that the prediction time should not be estimated).} \item{seeds}{an optional set of integers that will be used to set the seed at each resampling iteration. This is useful when the models are run in parallel. A value of \code{NA} will stop the seed from being set within the worker processes while a value of \code{NULL} will set the seeds using a random set of integers. Alternatively, a vector of integers can be used. The vector should have \code{B+1} elements where \code{B} is the number of resamples. See the Examples section below.} \item{allowParallel}{if a parallel backend is loaded and available, should the function use it?} \item{multivariate}{a logical; should all the columns of \code{x} be exposed to the \code{score} function at once?} } \value{ a list that echos the specified arguments } \description{ Controls the execution of models with simple filters for feature selection } \details{ More details on this function can be found at \url{http://topepo.github.io/caret/feature-selection-using-univariate-filters.html}. Simple filter-based feature selection requires function to be specified for some operations. The \code{fit} function builds the model based on the current data set. The arguments for the function must be: \itemize{ \item\code{x} the current training set of predictor data with the appropriate subset of variables (i.e. after filtering) \item\code{y} the current outcome data (either a numeric or factor vector) \item\code{...} optional arguments to pass to the fit function in the call to \code{sbf} } The function should return a model object that can be used to generate predictions. The \code{pred} function returns a vector of predictions (numeric or factors) from the current model. The arguments are: \itemize{ \item\code{object} the model generated by the \code{fit} function \item\code{x} the current set of predictor set for the held-back samples } The \code{score} function is used to return scores with names for each predictor (such as a p-value). Inputs are: \itemize{ \item\code{x} the predictors for the training samples. If \code{sbfControl()$multivariate} is \code{TRUE}, this will be the full predictor matrix. Otherwise it is a vector for a specific predictor. \item\code{y} the current training outcomes } When \code{sbfControl()$multivariate} is \code{TRUE}, the \code{score} function should return a named vector where \code{length(scores) == ncol(x)}. Otherwise, the function's output should be a single value. Univariate examples are give by \code{\link{anovaScores}} for classification and \code{\link{gamScores}} for regression and the example below. The \code{filter} function is used to return a logical vector with names for each predictor (\code{TRUE} indicates that the prediction should be retained). Inputs are: \itemize{ \item\code{score} the output of the \code{score} function \item\code{x} the predictors for the training samples \item\code{y} the current training outcomes } The function should return a named logical vector. Examples of these functions are included in the package: \code{\link{caretSBF}}, \code{\link{lmSBF}}, \code{\link{rfSBF}}, \code{\link{treebagSBF}}, \code{\link{ldaSBF}} and \code{\link{nbSBF}}. The web page \url{http://topepo.github.io/caret/} has more details and examples related to this function. } \examples{ \dontrun{ data(BloodBrain) ## Use a GAM is the filter, then fit a random forest model set.seed(1) RFwithGAM <- sbf(bbbDescr, logBBB, sbfControl = sbfControl(functions = rfSBF, verbose = FALSE, seeds = sample.int(100000, 11), method = "cv")) RFwithGAM ## A simple example for multivariate scoring rfSBF2 <- rfSBF rfSBF2$score <- function(x, y) apply(x, 2, rfSBF$score, y = y) set.seed(1) RFwithGAM2 <- sbf(bbbDescr, logBBB, sbfControl = sbfControl(functions = rfSBF2, verbose = FALSE, seeds = sample.int(100000, 11), method = "cv", multivariate = TRUE)) RFwithGAM2 } } \seealso{ \code{\link{sbf}}, \code{\link{caretSBF}}, \code{\link{lmSBF}}, \code{\link{rfSBF}}, \code{\link{treebagSBF}}, \code{\link{ldaSBF}} and \code{\link{nbSBF}} } \author{ Max Kuhn } \keyword{utilities} caret/man/caret-internal.Rd0000644000176200001440000000353413153613153015330 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/createModel.R, R/misc.R, % R/predictionFunction.R, R/predictors.R, R/probFunction.R, % R/resampleWrapper.R, R/selectByFilter.R, R/sortImp.R, R/workflows.R \name{caret-internal} \alias{caret-internal} \alias{createModel} \alias{resampleWrapper} \alias{sortImp} \alias{caretTheme} \alias{progress} \alias{hasTerms} \alias{predictionFunction} \alias{probFunction} \alias{expandParameters} \alias{flatTable} \alias{MeanSD} \alias{sbfIter} \alias{gamFormula} \alias{bagEarthStats} \alias{cforestStats} \alias{ipredStats} \alias{rfStats} \alias{well_numbered} \alias{well_numbered} \alias{gamFormula} \alias{flatTable} \alias{ipredStats} \alias{rfStats} \alias{cforestStats} \alias{bagEarthStats} \alias{outcome_conversion} \alias{predictionFunction} \alias{hasTerms} \alias{probFunction} \alias{resampleWrapper} \alias{sbfIter} \alias{sortImp} \alias{progress} \alias{MeanSD} \alias{expandParameters} \title{Internal Functions} \usage{ createModel(x, y, wts, method, tuneValue, obsLevels, pp = NULL, last = FALSE, sampling = NULL, classProbs, ...) well_numbered(prefix, items) gamFormula(data, smoother = "s", cut = 8, y = "y") flatTable(pred, obs) ipredStats(x) rfStats(x) cforestStats(x) bagEarthStats(x) outcome_conversion(x, lv) predictionFunction(method, modelFit, newdata, preProc = NULL, param = NULL) hasTerms(x) probFunction(method, modelFit, newdata = NULL, preProc = NULL, param = NULL) resampleWrapper(x, ind) sbfIter(x, y, testX, testY, sbfControl = sbfControl(), ...) sortImp(object, top) progress(x, names, iter, start = TRUE) MeanSD(x, exclude = NULL) expandParameters(fixed, seq) } \description{ Internal functions } \author{ Max Kuhn, but \code{caretTheme} uses an expanded grid of the "Blues" palette designed by Cynthia Brewer and Mark Harrower } \keyword{internal} caret/man/sensitivity.Rd0000644000176200001440000001417313153613153015013 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/negPredValue.R, R/posPredValue.R, % R/sensitivity.R \name{negPredValue} \alias{negPredValue} \alias{negPredValue.default} \alias{negPredValue.table} \alias{negPredValue.matrix} \alias{posPredValue} \alias{posPredValue.default} \alias{posPredValue.table} \alias{posPredValue.matrix} \alias{sensitivity} \alias{sensitivity.default} \alias{sensitivity.table} \alias{sensitivity.matrix} \alias{specificity} \alias{specificity.default} \alias{specificity.table} \alias{specificity.matrix} \alias{posPredValue} \alias{posPredValue.default} \alias{posPredValue.table} \alias{posPredValue.matrix} \alias{negPredValue} \alias{negPredValue.default} \alias{negPredValue.table} \alias{negPredValue.matrix} \alias{sensitivity.default} \alias{sensitivity.table} \alias{sensitivity.matrix} \title{Calculate sensitivity, specificity and predictive values} \usage{ negPredValue(data, ...) \method{negPredValue}{default}(data, reference, negative = levels(reference)[2], prevalence = NULL, ...) \method{negPredValue}{table}(data, negative = rownames(data)[-1], prevalence = NULL, ...) \method{negPredValue}{matrix}(data, negative = rownames(data)[-1], prevalence = NULL, ...) posPredValue(data, ...) \method{posPredValue}{default}(data, reference, positive = levels(reference)[1], prevalence = NULL, ...) \method{posPredValue}{table}(data, positive = rownames(data)[1], prevalence = NULL, ...) \method{posPredValue}{matrix}(data, positive = rownames(data)[1], prevalence = NULL, ...) sensitivity(data, ...) \method{sensitivity}{default}(data, reference, positive = levels(reference)[1], na.rm = TRUE, ...) \method{sensitivity}{table}(data, positive = rownames(data)[1], ...) \method{sensitivity}{matrix}(data, positive = rownames(data)[1], ...) } \arguments{ \item{data}{for the default functions, a factor containing the discrete measurements. For the \code{table} or \code{matrix} functions, a table or matric object, respectively.} \item{...}{not currently used} \item{reference}{a factor containing the reference values} \item{negative}{a character string that defines the factor level corresponding to the "negative" results} \item{prevalence}{a numeric value for the rate of the "positive" class of the data} \item{positive}{a character string that defines the factor level corresponding to the "positive" results} \item{na.rm}{a logical value indicating whether \code{NA} values should be stripped before the computation proceeds} } \value{ A number between 0 and 1 (or NA). } \description{ These functions calculate the sensitivity, specificity or predictive values of a measurement system compared to a reference results (the truth or a gold standard). The measurement and "truth" data must have the same two possible outcomes and one of the outcomes must be thought of as a "positive" results. } \details{ The sensitivity is defined as the proportion of positive results out of the number of samples which were actually positive. When there are no positive results, sensitivity is not defined and a value of \code{NA} is returned. Similarly, when there are no negative results, specificity is not defined and a value of \code{NA} is returned. Similar statements are true for predictive values. The positive predictive value is defined as the percent of predicted positives that are actually positive while the negative predictive value is defined as the percent of negative positives that are actually negative. Suppose a 2x2 table with notation \tabular{rcc}{ \tab Reference \tab \cr Predicted \tab Event \tab No Event \cr Event \tab A \tab B \cr No Event \tab C \tab D \cr } The formulas used here are: \deqn{Sensitivity = A/(A+C)} \deqn{Specificity = D/(B+D)} \deqn{Prevalence = (A+C)/(A+B+C+D)} \deqn{PPV = (sensitivity * Prevalence)/((sensitivity*Prevalence) + ((1-specificity)*(1-Prevalence)))} \deqn{NPV = (specificity * (1-Prevalence))/(((1-sensitivity)*Prevalence) + ((specificity)*(1-Prevalence)))} See the references for discussions of the statistics. } \examples{ \dontrun{ ################### ## 2 class example lvs <- c("normal", "abnormal") truth <- factor(rep(lvs, times = c(86, 258)), levels = rev(lvs)) pred <- factor( c( rep(lvs, times = c(54, 32)), rep(lvs, times = c(27, 231))), levels = rev(lvs)) xtab <- table(pred, truth) sensitivity(pred, truth) sensitivity(xtab) posPredValue(pred, truth) posPredValue(pred, truth, prevalence = 0.25) specificity(pred, truth) negPredValue(pred, truth) negPredValue(xtab) negPredValue(pred, truth, prevalence = 0.25) prev <- seq(0.001, .99, length = 20) npvVals <- ppvVals <- prev * NA for(i in seq(along = prev)) { ppvVals[i] <- posPredValue(pred, truth, prevalence = prev[i]) npvVals[i] <- negPredValue(pred, truth, prevalence = prev[i]) } plot(prev, ppvVals, ylim = c(0, 1), type = "l", ylab = "", xlab = "Prevalence (i.e. prior)") points(prev, npvVals, type = "l", col = "red") abline(h=sensitivity(pred, truth), lty = 2) abline(h=specificity(pred, truth), lty = 2, col = "red") legend(.5, .5, c("ppv", "npv", "sens", "spec"), col = c("black", "red", "black", "red"), lty = c(1, 1, 2, 2)) ################### ## 3 class example library(MASS) fit <- lda(Species ~ ., data = iris) model <- predict(fit)$class irisTabs <- table(model, iris$Species) ## When passing factors, an error occurs with more ## than two levels sensitivity(model, iris$Species) ## When passing a table, more than two levels can ## be used sensitivity(irisTabs, "versicolor") specificity(irisTabs, c("setosa", "virginica")) } } \references{ Kuhn, M. (2008), ``Building predictive models in R using the caret package, '' \emph{Journal of Statistical Software}, (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}). Altman, D.G., Bland, J.M. (1994) ``Diagnostic tests 1: sensitivity and specificity,'' \emph{British Medical Journal}, vol 308, 1552. Altman, D.G., Bland, J.M. (1994) ``Diagnostic tests 2: predictive values,'' \emph{British Medical Journal}, vol 309, 102. } \seealso{ \code{\link{confusionMatrix}} } \author{ Max Kuhn } \keyword{manip} caret/man/plsda.Rd0000644000176200001440000001150713153613153013522 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plsda.R \name{plsda} \alias{plsda} \alias{plsda.default} \alias{predict.plsda} \alias{splsda.default} \alias{predict.splsda} \alias{splsda} \alias{predict.plsda} \alias{plsda.default} \title{Partial Least Squares and Sparse Partial Least Squares Discriminant Analysis} \usage{ plsda(x, ...) \method{predict}{plsda}(object, newdata = NULL, ncomp = NULL, type = "class", ...) \method{plsda}{default}(x, y, ncomp = 2, probMethod = "softmax", prior = NULL, ...) } \arguments{ \item{x}{a matrix or data frame of predictors} \item{\dots}{arguments to pass to \code{\link[pls:mvr]{plsr}} or \code{\link[spls]{spls}}. For \code{splsda}, this is the method for passing tuning parameters specifications (e.g. \code{K}, \code{eta} or \code{kappa})} \item{object}{an object produced by \code{plsda}} \item{newdata}{a matrix or data frame of predictors} \item{ncomp}{the number of components to include in the model. Predictions can be made for models with values less than \code{ncomp}.} \item{type}{either \code{"class"}, \code{"prob"} or \code{"raw"} to produce the predicted class, class probabilities or the raw model scores, respectively.} \item{y}{a factor or indicator matrix for the discrete outcome. If a matrix, the entries must be either 0 or 1 and rows must sum to one} \item{probMethod}{either "softmax" or "Bayes" (see Details)} \item{prior}{a vector or prior probabilities for the classes (only used for \code{probeMethod = "Bayes"})} } \value{ For \code{plsda}, an object of class "plsda" and "mvr". For \code{splsda}, an object of class \code{splsda}. The predict methods produce either a vector, matrix or three-dimensional array, depending on the values of \code{type} of \code{ncomp}. For example, specifying more than one value of \code{ncomp} with \code{type = "class"} with produce a three dimensional array but the default specification would produce a factor vector. } \description{ \code{plsda} is used to fit standard PLS models for classification while \code{splsda} performs sparse PLS that embeds feature selection and regularization for the same purpose. } \details{ If a factor is supplied, the appropriate indicator matrix is created. A multivariate PLS model is fit to the indicator matrix using the \code{\link[pls:mvr]{plsr}} or \code{\link[spls]{spls}} function. Two prediction methods can be used. The \bold{softmax function} transforms the model predictions to "probability-like" values (e.g. on [0, 1] and sum to 1). The class with the largest class probability is the predicted class. Also, \bold{Bayes rule} can be applied to the model predictions to form posterior probabilities. Here, the model predictions for the training set are used along with the training set outcomes to create conditional distributions for each class. When new samples are predicted, the raw model predictions are run through these conditional distributions to produce a posterior probability for each class (along with the prior). This process is repeated \code{ncomp} times for every possible PLS model. The \code{\link[klaR]{NaiveBayes}} function is used with \code{usekernel = TRUE} for the posterior probability calculations. } \examples{ \dontrun{ data(mdrr) set.seed(1) inTrain <- sample(seq(along = mdrrClass), 450) nzv <- nearZeroVar(mdrrDescr) filteredDescr <- mdrrDescr[, -nzv] training <- filteredDescr[inTrain,] test <- filteredDescr[-inTrain,] trainMDRR <- mdrrClass[inTrain] testMDRR <- mdrrClass[-inTrain] preProcValues <- preProcess(training) trainDescr <- predict(preProcValues, training) testDescr <- predict(preProcValues, test) useBayes <- plsda(trainDescr, trainMDRR, ncomp = 5, probMethod = "Bayes") useSoftmax <- plsda(trainDescr, trainMDRR, ncomp = 5) confusionMatrix(predict(useBayes, testDescr), testMDRR) confusionMatrix(predict(useSoftmax, testDescr), testMDRR) histogram(~predict(useBayes, testDescr, type = "prob")[,"Active",] | testMDRR, xlab = "Active Prob", xlim = c(-.1,1.1)) histogram(~predict(useSoftmax, testDescr, type = "prob")[,"Active",] | testMDRR, xlab = "Active Prob", xlim = c(-.1,1.1)) ## different sized objects are returned length(predict(useBayes, testDescr)) dim(predict(useBayes, testDescr, ncomp = 1:3)) dim(predict(useBayes, testDescr, type = "prob")) dim(predict(useBayes, testDescr, type = "prob", ncomp = 1:3)) ## Using spls: ## (As of 11/09, the spls package now has a similar function with ## the same mane. To avoid conflicts, use caret:::splsda to ## get this version) splsFit <- caret:::splsda(trainDescr, trainMDRR, K = 5, eta = .9, probMethod = "Bayes") confusionMatrix(caret:::predict.splsda(splsFit, testDescr), testMDRR) } } \seealso{ \code{\link[pls:mvr]{plsr}}, \code{\link[spls]{spls}} } \keyword{models} caret/man/xyplot.resamples.Rd0000644000176200001440000001071213153613153015745 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/resamples.R \name{xyplot.resamples} \alias{xyplot.resamples} \alias{densityplot.resamples} \alias{bwplot.resamples} \alias{splom.resamples} \alias{parallelplot.resamples} \alias{dotplot.resamples} \alias{parallelplot.resamples} \alias{splom.resamples} \alias{densityplot.resamples} \alias{bwplot.resamples} \alias{dotplot.resamples} \title{Lattice Functions for Visualizing Resampling Results} \usage{ \method{xyplot}{resamples}(x, data = NULL, what = "scatter", models = NULL, metric = x$metric[1], units = "min", ...) \method{parallelplot}{resamples}(x, data = NULL, models = x$models, metric = x$metric[1], ...) \method{splom}{resamples}(x, data = NULL, variables = "models", models = x$models, metric = NULL, panelRange = NULL, ...) \method{densityplot}{resamples}(x, data = NULL, models = x$models, metric = x$metric, ...) \method{bwplot}{resamples}(x, data = NULL, models = x$models, metric = x$metric, ...) \method{dotplot}{resamples}(x, data = NULL, models = x$models, metric = x$metric, conf.level = 0.95, ...) } \arguments{ \item{x}{an object generated by \code{resamples}} \item{data}{Not used} \item{what}{for \code{xyplot}, the type of plot. Valid options are: "scatter" (for a plot of the resampled results between two models), "BlandAltman" (a Bland-Altman, aka MA plot between two models), "tTime" (for the total time to run \code{train} versus the metric), "mTime" (for the time to build the final model) or "pTime" (the time to predict samples - see the \code{timingSamps} options in \code{\link{trainControl}}, \code{\link{rfeControl}}, or \code{\link{sbfControl}})} \item{models}{a character string for which models to plot. Note: \code{xyplot} requires one or two models whereas the other methods can plot more than two.} \item{metric}{a character string for which metrics to use as conditioning variables in the plot. \code{splom} requires exactly one metric when \code{variables = "models"} and at least two when \code{variables = "metrics"}.} \item{units}{either "sec", "min" or "hour"; which \code{what} is either "tTime", "mTime" or "pTime", how should the timings be scaled?} \item{\dots}{further arguments to pass to either \code{\link[lattice:histogram]{histogram}}, \code{\link[lattice:histogram]{densityplot}}, \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:xyplot]{dotplot}} or \code{\link[lattice:splom]{splom}}} \item{variables}{either "models" or "metrics"; which variable should be treated as the scatter plot variables?} \item{panelRange}{a common range for the panels. If \code{NULL}, the panel ranges are derived from the values across all the models} \item{conf.level}{the confidence level for intervals about the mean (obtained using \code{\link[stats]{t.test}})} } \value{ a lattice object } \description{ Lattice functions for visualizing resampling results across models } \details{ The ideas and methods here are based on Hothorn et al. (2005) and Eugster et al. (2008). \code{dotplot} plots the average performance value (with two-sided confidence limits) for each model and metric. \code{densityplot} and \code{bwplot} display univariate visualizations of the resampling distributions while \code{splom} shows the pair-wise relationships. } \examples{ \dontrun{ #load(url("http://topepo.github.io/caret/exampleModels.RData")) resamps <- resamples(list(CART = rpartFit, CondInfTree = ctreeFit, MARS = earthFit)) dotplot(resamps, scales =list(x = list(relation = "free")), between = list(x = 2)) bwplot(resamps, metric = "RMSE") densityplot(resamps, auto.key = list(columns = 3), pch = "|") xyplot(resamps, models = c("CART", "MARS"), metric = "RMSE") splom(resamps, metric = "RMSE") splom(resamps, variables = "metrics") parallelplot(resamps, metric = "RMSE") } } \references{ Hothorn et al. The design and analysis of benchmark experiments. Journal of Computational and Graphical Statistics (2005) vol. 14 (3) pp. 675-699 Eugster et al. Exploratory and inferential analysis of benchmark experiments. Ludwigs-Maximilians-Universitat Munchen, Department of Statistics, Tech. Rep (2008) vol. 30 } \seealso{ \code{\link{resamples}}, \code{\link[lattice:xyplot]{dotplot}}, \code{\link[lattice:bwplot]{bwplot}}, \code{\link[lattice:histogram]{densityplot}}, \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:splom]{splom}} } \author{ Max Kuhn } \keyword{hplot} caret/man/spatialSign.Rd0000644000176200001440000000313113206643246014674 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/spatialSign.R \name{spatialSign} \alias{spatialSign} \alias{spatialSign.default} \alias{spatialSign.matrix} \alias{spatialSign.data.frame} \alias{spatialSign.default} \alias{spatialSign.matrix} \alias{spatialSign.data.frame} \title{Compute the multivariate spatial sign} \usage{ spatialSign(x, ...) \method{spatialSign}{default}(x, na.rm = TRUE, ...) \method{spatialSign}{matrix}(x, na.rm = TRUE, ...) \method{spatialSign}{data.frame}(x, na.rm = TRUE, ...) } \arguments{ \item{x}{an object full of numeric data (which should probably be scaled). Factors are not allowed. This could be a vector, matrix or data frame.} \item{...}{Not currently used.} \item{na.rm}{A logical; should missing data be removed when computing the norm of the vector?} } \value{ A vector, matrix or data frame with the same dim names of the original data. } \description{ Compute the spatial sign (a projection of a data vector to a unit length circle). The spatial sign of a vector \code{w} is \code{w /norm(w)}. } \examples{ spatialSign(rnorm(5)) spatialSign(matrix(rnorm(12), ncol = 3)) # should fail since the fifth column is a factor try(spatialSign(iris), silent = TRUE) spatialSign(iris[,-5]) trellis.par.set(caretTheme()) featurePlot(iris[,-5], iris[,5], "pairs") featurePlot(spatialSign(scale(iris[,-5])), iris[,5], "pairs") } \references{ Serneels et al. Spatial sign preprocessing: a simple way to impart moderate robustness to multivariate estimators. J. Chem. Inf. Model (2006) vol. 46 (3) pp. 1402-1409 } \author{ Max Kuhn } \keyword{manip} caret/man/sbf.Rd0000644000176200001440000001240513153613153013167 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/selectByFilter.R \name{sbf} \alias{sbf} \alias{sbf.default} \alias{sbf.formula} \alias{predict.sbf} \alias{sbf.default} \alias{sbf.formula} \alias{predict.sbf} \title{Selection By Filtering (SBF)} \usage{ sbf(x, ...) \method{sbf}{default}(x, y, sbfControl = sbfControl(), ...) \method{sbf}{formula}(form, data, ..., subset, na.action, contrasts = NULL) \method{predict}{sbf}(object, newdata = NULL, ...) } \arguments{ \item{x}{a data frame containing training data where samples are in rows and features are in columns.} \item{\dots}{for \code{sbf}: arguments passed to the classification or regression routine (such as \code{\link[randomForest]{randomForest}}). For \code{predict.sbf}: augments cannot be passed to the prediction function using \code{predict.sbf} as it uses the function originally specified for prediction.} \item{y}{a numeric or factor vector containing the outcome for each sample.} \item{sbfControl}{a list of values that define how this function acts. See \code{\link{sbfControl}}. (NOTE: If given, this argument must be named.)} \item{form}{A formula of the form \code{y ~ x1 + x2 + ...}} \item{data}{Data frame from which variables specified in \code{formula} are preferentially to be taken.} \item{subset}{An index vector specifying the cases to be used in the training sample. (NOTE: If given, this argument must be named.)} \item{na.action}{A function to specify the action to be taken if NAs are found. The default action is for the procedure to fail. An alternative is na.omit, which leads to rejection of cases with missing values on any required variable. (NOTE: If given, this argument must be named.)} \item{contrasts}{a list of contrasts to be used for some or all the factors appearing as variables in the model formula.} \item{object}{an object of class \code{sbf}} \item{newdata}{a matrix or data frame of predictors. The object must have non-null column names} } \value{ for \code{sbf}, an object of class \code{sbf} with elements: \item{pred}{if \code{sbfControl$saveDetails} is \code{TRUE}, this is a list of predictions for the hold-out samples at each resampling iteration. Otherwise it is \code{NULL}} \item{variables}{a list of variable names that survived the filter at each resampling iteration} \item{results}{a data frame of results aggregated over the resamples} \item{fit}{the final model fit with only the filtered variables} \item{optVariables}{the names of the variables that survived the filter using the training set} \item{ call}{the function call} \item{control}{the control object} \item{resample}{if \code{sbfControl$returnResamp} is "all", a data frame of the resampled performance measures. Otherwise, \code{NULL}} \item{metrics}{a character vector of names of the performance measures} \item{dots}{a list of optional arguments that were passed in} For \code{predict.sbf}, a vector of predictions. } \description{ Model fitting after applying univariate filters } \details{ More details on this function can be found at \url{http://topepo.github.io/caret/feature-selection-using-univariate-filters.html}. This function can be used to get resampling estimates for models when simple, filter-based feature selection is applied to the training data. For each iteration of resampling, the predictor variables are univariately filtered prior to modeling. Performance of this approach is estimated using resampling. The same filter and model are then applied to the entire training set and the final model (and final features) are saved. \code{sbf} can be used with "explicit parallelism", where different resamples (e.g. cross-validation group) can be split up and run on multiple machines or processors. By default, \code{sbf} will use a single processor on the host machine. As of version 4.99 of this package, the framework used for parallel processing uses the \pkg{foreach} package. To run the resamples in parallel, the code for \code{sbf} does not change; prior to the call to \code{sbf}, a parallel backend is registered with \pkg{foreach} (see the examples below). The modeling and filtering techniques are specified in \code{\link{sbfControl}}. Example functions are given in \code{\link{lmSBF}}. } \examples{ \dontrun{ data(BloodBrain) ## Use a GAM is the filter, then fit a random forest model RFwithGAM <- sbf(bbbDescr, logBBB, sbfControl = sbfControl(functions = rfSBF, verbose = FALSE, method = "cv")) RFwithGAM predict(RFwithGAM, bbbDescr[1:10,]) ## classification example with parallel processing ## library(doMC) ## Note: if the underlying model also uses foreach, the ## number of cores specified above will double (along with ## the memory requirements) ## registerDoMC(cores = 2) data(mdrr) mdrrDescr <- mdrrDescr[,-nearZeroVar(mdrrDescr)] mdrrDescr <- mdrrDescr[, -findCorrelation(cor(mdrrDescr), .8)] set.seed(1) filteredNB <- sbf(mdrrDescr, mdrrClass, sbfControl = sbfControl(functions = nbSBF, verbose = FALSE, method = "repeatedcv", repeats = 5)) confusionMatrix(filteredNB) } } \seealso{ \code{\link{sbfControl}} } \author{ Max Kuhn } \keyword{models} caret/man/BoxCoxTrans.Rd0000644000176200001440000000641713153613153014635 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/BoxCoxTrans.R \name{BoxCoxTrans} \alias{BoxCoxTrans} \alias{BoxCoxTrans.default} \alias{predict.BoxCoxTrans} \alias{expoTrans.default} \alias{expoTrans} \alias{predict.expoTrans} \alias{BoxCoxTrans.default} \alias{print.BoxCoxTrans} \alias{predict.BoxCoxTrans} \title{Box-Cox and Exponential Transformations} \usage{ BoxCoxTrans(y, ...) \method{BoxCoxTrans}{default}(y, x = rep(1, length(y)), fudge = 0.2, numUnique = 3, na.rm = FALSE, ...) \method{print}{BoxCoxTrans}(x, newdata, digits = 3, ...) \method{predict}{BoxCoxTrans}(object, newdata, ...) } \arguments{ \item{y}{a numeric vector of data to be transformed. For \code{BoxCoxTrans}, the data must be strictly positive.} \item{\dots}{for \code{BoxCoxTrans}: options to pass to \code{\link[MASS]{boxcox}}. \code{plotit} should not be passed through. For \code{predict.BoxCoxTrans}, additional arguments are ignored.} \item{x}{an optional dependent variable to be used in a linear model.} \item{fudge}{a tolerance value: lambda values within +/-fudge will be coerced to 0 and within 1+/-fudge will be coerced to 1.} \item{numUnique}{how many unique values should \code{y} have to estimate the transformation?} \item{na.rm}{a logical value indicating whether \code{NA} values should be stripped from \code{y} and \code{x} before the computation proceeds.} \item{newdata}{a numeric vector of values to transform.} \item{digits}{minimal number of \emph{significant digits}.} \item{object}{an object of class \code{BoxCoxTrans} or \code{expoTrans}.} } \value{ Both functions returns a list of class of either \code{BoxCoxTrans} or \code{expoTrans} with elements \item{lambda }{estimated transformation value} \item{fudge }{value of \code{fudge}} \item{n }{number of data points used to estimate lambda} \item{summary }{the results of \code{summary(y)}} \item{ratio }{\code{max(y)/min(y)}} \item{skewness }{sample skewness statistic} \code{BoxCoxTrans} also returns: \item{fudge }{value of \code{fudge}} The \code{predict} functions returns numeric vectors of transformed values } \description{ These classes can be used to estimate transformations and apply them to existing and future data } \details{ \code{BoxCoxTrans} function is basically a wrapper for the \code{\link[MASS]{boxcox}} function in the MASS library. It can be used to estimate the transformation and apply it to new data. \code{expoTrans} estimates the exponential transformation of Manly (1976) but assumes a common mean for the data. The transformation parameter is estimated by directly maximizing the likelihood. If \code{any(y <= 0)} or if \code{length(unique(y)) < numUnique}, lambda is not estimated and no transformation is applied. } \examples{ data(BloodBrain) ratio <- exp(logBBB) bc <- BoxCoxTrans(ratio) bc predict(bc, ratio[1:5]) ratio[5] <- NA bc2 <- BoxCoxTrans(ratio, bbbDescr$tpsa, na.rm = TRUE) bc2 manly <- expoTrans(ratio) manly } \references{ Box, G. E. P. and Cox, D. R. (1964) An analysis of transformations (with discussion). Journal of the Royal Statistical Society B, 26, 211-252. Manly, B. L. (1976) Exponential data transformations. The Statistician, 25, 37 - 42. } \seealso{ \code{\link[MASS]{boxcox}}, \code{\link{preProcess}}, \code{\link{optim}} } \author{ Max Author } \keyword{utilities} caret/man/preProcess.Rd0000644000176200001440000002220313173720702014540 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/preProcess.R \name{preProcess} \alias{preProcess} \alias{preProcess.default} \alias{predict.preProcess} \alias{preProcess.default} \alias{predict.preProcess} \title{Pre-Processing of Predictors} \usage{ preProcess(x, ...) \method{preProcess}{default}(x, method = c("center", "scale"), thresh = 0.95, pcaComp = NULL, na.remove = TRUE, k = 5, knnSummary = mean, outcome = NULL, fudge = 0.2, numUnique = 3, verbose = FALSE, freqCut = 95/5, uniqueCut = 10, cutoff = 0.9, rangeBounds = c(0, 1), ...) \method{predict}{preProcess}(object, newdata, ...) } \arguments{ \item{x}{a matrix or data frame. Non-numeric predictors are allowed but will be ignored.} \item{\dots}{additional arguments to pass to \code{\link[fastICA]{fastICA}}, such as \code{n.comp}} \item{method}{a character vector specifying the type of processing. Possible values are "BoxCox", "YeoJohnson", "expoTrans", "center", "scale", "range", "knnImpute", "bagImpute", "medianImpute", "pca", "ica", "spatialSign", "corr", "zv", "nzv", and "conditionalX" (see Details below)} \item{thresh}{a cutoff for the cumulative percent of variance to be retained by PCA} \item{pcaComp}{the specific number of PCA components to keep. If specified, this over-rides \code{thresh}} \item{na.remove}{a logical; should missing values be removed from the calculations?} \item{k}{the number of nearest neighbors from the training set to use for imputation} \item{knnSummary}{function to average the neighbor values per column during imputation} \item{outcome}{a numeric or factor vector for the training set outcomes. This can be used to help estimate the Box-Cox transformation of the predictor variables (see Details below)} \item{fudge}{a tolerance value: Box-Cox transformation lambda values within +/-fudge will be coerced to 0 and within 1+/-fudge will be coerced to 1.} \item{numUnique}{how many unique values should \code{y} have to estimate the Box-Cox transformation?} \item{verbose}{a logical: prints a log as the computations proceed} \item{freqCut}{the cutoff for the ratio of the most common value to the second most common value. See \code{\link{nearZeroVar}}.} \item{uniqueCut}{the cutoff for the percentage of distinct values out of the number of total samples. See \code{\link{nearZeroVar}}.} \item{cutoff}{a numeric value for the pair-wise absolute correlation cutoff. See \code{\link{findCorrelation}}.} \item{rangeBounds}{a two-element numeric vector specifying closed interval for range transformation} \item{object}{an object of class \code{preProcess}} \item{newdata}{a matrix or data frame of new data to be pre-processed} } \value{ \code{preProcess} results in a list with elements \item{call}{the function call} \item{method}{a named list of operations and the variables used for each } \item{dim}{the dimensions of \code{x}} \item{bc}{Box-Cox transformation values, see \code{\link{BoxCoxTrans}}} \item{mean}{a vector of means (if centering was requested)} \item{std}{a vector of standard deviations (if scaling or PCA was requested)} \item{rotation}{a matrix of eigenvectors if PCA was requested} \item{method}{the value of\code{method}} \item{thresh}{the value of\code{thresh}} \item{ranges}{a matrix of min and max values for each predictor when \code{method} includes "range" (and \code{NULL} otherwise)} \item{numComp}{the number of principal components required of capture the specified amount of variance} \item{ica}{contains values for the \code{W} and \code{K} matrix of the decomposition} \item{median}{a vector of medians (if median imputation was requested)} \code{predict.preProcess} will produce a data frame. } \description{ Pre-processing transformation (centering, scaling etc.) can be estimated from the training data and applied to any data set with the same variables. } \details{ In all cases, transformations and operations are estimated using the data in \code{x} and these operations are applied to new data using these values; nothing is recomputed when using the \code{predict} function. The Box-Cox (\code{method = "BoxCox"}), Yeo-Johnson (\code{method = "YeoJohnson"}), and exponential transformations (\code{method = "expoTrans"})have been "repurposed" here: they are being used to transform the predictor variables. The Box-Cox transformation was developed for transforming the response variable while another method, the Box-Tidwell transformation, was created to estimate transformations of predictor data. However, the Box-Cox method is simpler, more computationally efficient and is equally effective for estimating power transformations. The Yeo-Johnson transformation is similar to the Box-Cox model but can accommodate predictors with zero and/or negative values (while the predictors values for the Box-Cox transformation must be strictly positive.) The exponential transformation of Manly (1976) can also be used for positive or negative data. \code{method = "center"} subtracts the mean of the predictor's data (again from the data in \code{x}) from the predictor values while \code{method = "scale"} divides by the standard deviation. The "range" transformation scales the data to be within \code{rangeBounds}. If new samples have values larger or smaller than those in the training set, values will be outside of this range. Predictors that are not numeric are ignored in the calculations. \code{method = "zv"} identifies numeric predictor columns with a single value (i.e. having zero variance) and excludes them from further calculations. Similarly, \code{method = "nzv"} does the same by applying \code{\link{nearZeroVar}} exclude "near zero-variance" predictors. The options \code{freqCut} and \code{uniqueCut} can be used to modify the filter. \code{method = "corr"} seeks to filter out highly correlated predictors. See \code{\link{findCorrelation}}. For classification, \code{method = "conditionalX"} examines the distribution of each predictor conditional on the outcome. If there is only one unique value within any class, the predictor is excluded from further calculations (see \code{\link{checkConditionalX}} for an example). When \code{outcome} is not a factor, this calculation is not executed. This operation can be time consuming when used within resampling via \code{\link{train}}. The operations are applied in this order: zero-variance filter, near-zero variance filter, correlation filter, Box-Cox/Yeo-Johnson/exponential transformation, centering, scaling, range, imputation, PCA, ICA then spatial sign. This is a departure from versions of \pkg{caret} prior to version 4.76 (where imputation was done first) and is not backwards compatible if bagging was used for imputation. If PCA is requested but centering and scaling are not, the values will still be centered and scaled. Similarly, when ICA is requested, the data are automatically centered and scaled. k-nearest neighbor imputation is carried out by finding the k closest samples (Euclidian distance) in the training set. Imputation via bagging fits a bagged tree model for each predictor (as a function of all the others). This method is simple, accurate and accepts missing values, but it has much higher computational cost. Imputation via medians takes the median of each predictor in the training set, and uses them to fill missing values. This method is simple, fast, and accepts missing values, but treats each predictor independently, and may be inaccurate. A warning is thrown if both PCA and ICA are requested. ICA, as implemented by the \code{\link[fastICA]{fastICA}} package automatically does a PCA decomposition prior to finding the ICA scores. The function will throw an error of any numeric variables in \code{x} has less than two unique values unless either \code{method = "zv"} or \code{method = "nzv"} are invoked. Non-numeric data will not be pre-processed and there values will be in the data frame produced by the \code{predict} function. Note that when PCA or ICA is used, the non-numeric columns may be in different positions when predicted. } \examples{ data(BloodBrain) # one variable has one unique value \dontrun{ preProc <- preProcess(bbbDescr) preProc <- preProcess(bbbDescr[1:100,-3]) training <- predict(preProc, bbbDescr[1:100,-3]) test <- predict(preProc, bbbDescr[101:208,-3]) } } \references{ \url{http://topepo.github.io/caret/pre-processing.html} Kuhn and Johnson (2013), Applied Predictive Modeling, Springer, New York (chapter 4) Kuhn (2008), Building predictive models in R using the caret (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}) Box, G. E. P. and Cox, D. R. (1964) An analysis of transformations (with discussion). Journal of the Royal Statistical Society B, 26, 211-252. Box, G. E. P. and Tidwell, P. W. (1962) Transformation of the independent variables. Technometrics 4, 531-550. Manly, B. L. (1976) Exponential data transformations. The Statistician, 25, 37 - 42. Yeo, I-K. and Johnson, R. (2000). A new family of power transformations to improve normality or symmetry. Biometrika, 87, 954-959. } \seealso{ \code{\link{BoxCoxTrans}}, \code{\link{expoTrans}} \code{\link[MASS]{boxcox}}, \code{\link[stats]{prcomp}}, \code{\link[fastICA]{fastICA}}, \code{\link{spatialSign}} } \author{ Max Kuhn, median imputation by Zachary Mayer } \keyword{utilities} caret/man/tecator.Rd0000644000176200001440000000424513153613153014061 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{tecator} \alias{tecator} \alias{absorp} \alias{endpoints} \title{Fat, Water and Protein Content of Meat Samples} \value{ \item{absorp}{absorbance data for 215 samples. The first 129 were originally used as a training set} \item{endpoints}{the percentages of water, fat and protein} } \description{ "These data are recorded on a Tecator Infratec Food and Feed Analyzer working in the wavelength range 850 - 1050 nm by the Near Infrared Transmission (NIT) principle. Each sample contains finely chopped pure meat with different moisture, fat and protein contents. } \details{ If results from these data are used in a publication we want you to mention the instrument and company name (Tecator) in the publication. In addition, please send a preprint of your article to Karin Thente, Tecator AB, Box 70, S-263 21 Hoganas, Sweden The data are available in the public domain with no responsibility from the original data source. The data can be redistributed as long as this permission note is attached." "For each meat sample the data consists of a 100 channel spectrum of absorbances and the contents of moisture (water), fat and protein. The absorbance is -log10 of the transmittance measured by the spectrometer. The three contents, measured in percent, are determined by analytic chemistry." Included here are the traning, monitoring and test sets. } \examples{ data(tecator) splom(~endpoints) # plot 10 random spectra set.seed(1) inSubset <- sample(1:dim(endpoints)[1], 10) absorpSubset <- absorp[inSubset,] endpointSubset <- endpoints[inSubset, 3] newOrder <- order(absorpSubset[,1]) absorpSubset <- absorpSubset[newOrder,] endpointSubset <- endpointSubset[newOrder] plotColors <- rainbow(10) plot(absorpSubset[1,], type = "n", ylim = range(absorpSubset), xlim = c(0, 105), xlab = "Wavelength Index", ylab = "Absorption") for(i in 1:10) { points(absorpSubset[i,], type = "l", col = plotColors[i], lwd = 2) text(105, absorpSubset[i,100], endpointSubset[i], col = plotColors[i]) } title("Predictor Profiles for 10 Random Samples") } \keyword{datasets} caret/man/findLinearCombos.Rd0000644000176200001440000000345713153613153015642 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/findLinearCombos.R \name{findLinearCombos} \alias{findLinearCombos} \title{Determine linear combinations in a matrix} \usage{ findLinearCombos(x) } \arguments{ \item{x}{a numeric matrix} } \value{ a list with elements: \item{linearCombos }{If there are linear combinations, this will be a list with elements for each dependency that contains vectors of column numbers. } \item{remove }{a list of column numbers that can be removed to counter the linear combinations} } \description{ Enumerate and resolve the linear combinations in a numeric matrix } \details{ The QR decomposition is used to determine if the matrix is full rank and then identify the sets of columns that are involved in the dependencies. To "resolve" them, columns are iteratively removed and the matrix rank is rechecked. The \code{\link[subselect:trim.matrix]{trim.matrix}} function in the \pkg{subselect} package can also be used to accomplish the same goal. } \examples{ testData1 <- matrix(0, nrow=20, ncol=8) testData1[,1] <- 1 testData1[,2] <- round(rnorm(20), 1) testData1[,3] <- round(rnorm(20), 1) testData1[,4] <- round(rnorm(20), 1) testData1[,5] <- 0.5 * testData1[,2] - 0.25 * testData1[,3] - 0.25 * testData1[,4] testData1[1:4,6] <- 1 testData1[5:10,7] <- 1 testData1[11:20,8] <- 1 findLinearCombos(testData1) testData2 <- matrix(0, nrow=6, ncol=6) testData2[,1] <- c(1, 1, 1, 1, 1, 1) testData2[,2] <- c(1, 1, 1, 0, 0, 0) testData2[,3] <- c(0, 0, 0, 1, 1, 1) testData2[,4] <- c(1, 0, 0, 1, 0, 0) testData2[,5] <- c(0, 1, 0, 0, 1, 0) testData2[,6] <- c(0, 0, 1, 0, 0, 1) findLinearCombos(testData2) } \seealso{ \code{\link[subselect:trim.matrix]{trim.matrix}} } \author{ Kirk Mettler and Jed Wing (\code{enumLC}) and Max Kuhn (\code{findLinearCombos}) } \keyword{manip} caret/man/diff.resamples.Rd0000644000176200001440000000733113153613153015321 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/resamples.R \name{diff.resamples} \alias{diff.resamples} \alias{summary.diff.resamples} \alias{compare_models} \alias{summary.diff.resamples} \alias{compare_models} \title{Inferential Assessments About Model Performance} \usage{ \method{diff}{resamples}(x, models = x$models, metric = x$metrics, test = t.test, confLevel = 0.95, adjustment = "bonferroni", ...) \method{summary}{diff.resamples}(object, digits = max(3, getOption("digits") - 3), ...) compare_models(a, b, metric = a$metric[1]) } \arguments{ \item{x}{an object generated by \code{resamples}} \item{models}{a character string for which models to compare} \item{metric}{a character string for which metrics to compare} \item{test}{a function to compute differences. The output of this function should have scalar outputs called \code{estimate} and \code{p.value}} \item{confLevel}{confidence level to use for \code{\link{dotplot.diff.resamples}}. See Details below.} \item{adjustment}{any p-value adjustment method to pass to \code{\link[stats]{p.adjust}}.} \item{\dots}{further arguments to pass to \code{test}} \item{object}{a object generated by \code{diff.resamples}} \item{digits}{the number of significant differences to display when printing} \item{a, b}{two objects of class \code{\link{train}}, \code{\link{sbf}} or \code{\link{rfe}} with a common set of resampling indices in the \code{control} object.} } \value{ An object of class \code{"diff.resamples"} with elements: \item{call }{the call} \item{difs }{a list for each metric being compared. Each list contains a matrix with differences in columns and resamples in rows } \item{statistics }{a list of results generated by \code{test}} \item{adjustment}{the p-value adjustment used} \item{models}{a character string for which models were compared.} \item{metrics }{a character string of performance metrics that were used} or... An object of class \code{"summary.diff.resamples"} with elements: \item{call }{the call} \item{table }{a list of tables that show the differences and p-values } ...or (for \code{compare_models}) an object of class \code{htest} resulting from \code{\link[stats]{t.test}}. } \description{ Methods for making inferences about differences between models } \details{ The ideas and methods here are based on Hothorn et al. (2005) and Eugster et al. (2008). For each metric, all pair-wise differences are computed and tested to assess if the difference is equal to zero. When a Bonferroni correction is used, the confidence level is changed from \code{confLevel} to \code{1-((1-confLevel)/p)} here \code{p} is the number of pair-wise comparisons are being made. For other correction methods, no such change is used. \code{compare_models} is a shorthand function to compare two models using a single metric. It returns the results of \code{\link[stats]{t.test}} on the differences. } \examples{ \dontrun{ #load(url("http://topepo.github.io/caret/exampleModels.RData")) resamps <- resamples(list(CART = rpartFit, CondInfTree = ctreeFit, MARS = earthFit)) difs <- diff(resamps) difs summary(difs) compare_models(rpartFit, ctreeFit) } } \references{ Hothorn et al. The design and analysis of benchmark experiments. Journal of Computational and Graphical Statistics (2005) vol. 14 (3) pp. 675-699 Eugster et al. Exploratory and inferential analysis of benchmark experiments. Ludwigs-Maximilians-Universitat Munchen, Department of Statistics, Tech. Rep (2008) vol. 30 } \seealso{ \code{\link{resamples}}, \code{\link{dotplot.diff.resamples}}, \code{\link{densityplot.diff.resamples}}, \code{\link{bwplot.diff.resamples}}, \code{\link{levelplot.diff.resamples}} } \author{ Max Kuhn } \keyword{models} caret/man/modelLookup.Rd0000644000176200001440000000505113153613153014706 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/modelLookup.R \name{modelLookup} \alias{modelLookup} \alias{getModelInfo} \alias{checkInstall} \alias{checkInstall} \alias{getModelInfo} \title{Tools for Models Available in \code{train}} \usage{ modelLookup(model = NULL) checkInstall(pkg) getModelInfo(model = NULL, regex = TRUE, ...) } \arguments{ \item{model}{a character string associated with the \code{method} argument of \code{\link{train}}. If no value is passed, all models are returned. For \code{getModelInfo}, regular expressions can be used.} \item{pkg}{a character string of package names.} \item{regex}{a logical: should a regular expressions be used? If \code{FALSE}, a simple match is conducted against the whole name of the model.} \item{...}{options to pass to \code{\link[base]{grepl}}} } \value{ \code{modelLookup} produces a data frame with columns \item{model }{a character string for the model code} \item{parameter }{the tuning parameter name} \item{label }{a tuning parameter label (used in plots)} \item{forReg }{a logical; can the model be used for regression?} \item{forClass }{a logical; can the model be used for classification?} \item{probModel }{a logical; does the model produce class probabilities?} \code{getModelInfo} returns a list containing one or more lists of the standard model information. \code{checkInstall} returns not value. } \description{ These function show information about models and packages that are accessible via \code{\link{train}} } \details{ \code{modelLookup} is good for getting information related to the tuning parameters for a model. \code{getModelInfo} will return all the functions and metadata associated with a model. Both of these functions will only search within the models bundled in this package. \code{checkInstall} will check to see if packages are installed. If they are not and the session is interactive, an option is given to install the packages using \code{\link[utils]{install.packages}} using that functions default arguments (the missing packages are listed if you would like to install them with other options). If the session is not interactive, an error is thrown. } \note{ The column \code{seq} is no longer included in the output of \code{modelLookup}. } \examples{ \dontrun{ modelLookup() modelLookup("gbm") getModelInfo("pls") getModelInfo("^pls") getModelInfo("pls", regex = FALSE) checkInstall(getModelInfo("pls")$library) } } \seealso{ \code{\link{train}}, \code{\link[utils]{install.packages}}, \code{\link[base]{grepl}} } \author{ Max Kuhn } \keyword{utilities} caret/man/dotPlot.Rd0000644000176200001440000000155013153613153014041 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/dotplot.varImp.train.R \name{dotPlot} \alias{dotPlot} \title{Create a dotplot of variable importance values} \usage{ dotPlot(x, top = min(20, dim(x$importance)[1]), ...) } \arguments{ \item{x}{an object of class \code{varImp.train}} \item{top}{the number of predictors to plot} \item{\dots}{options passed to \code{\link[lattice:xyplot]{dotplot}}} } \value{ an object of class \code{trellis}. } \description{ A lattice \code{\link[lattice:xyplot]{dotplot}} is created from an object of class \code{varImp.train}. } \examples{ data(iris) TrainData <- iris[,1:4] TrainClasses <- iris[,5] knnFit <- train(TrainData, TrainClasses, "knn") knnImp <- varImp(knnFit) dotPlot(knnImp) } \seealso{ \code{\link{varImp}}, \code{\link[lattice:xyplot]{dotplot}} } \author{ Max Kuhn } \keyword{hplot} caret/man/as.matrix.confusionMatrix.Rd0000644000176200001440000000257613153613153017522 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/confusionMatrix.R \name{as.matrix.confusionMatrix} \alias{as.matrix.confusionMatrix} \alias{as.table.confusionMatrix} \title{Confusion matrix as a table} \usage{ \method{as.matrix}{confusionMatrix}(x, what = "xtabs", ...) } \arguments{ \item{x}{an object of class \code{\link{confusionMatrix}}} \item{what}{data to convert to matrix. Either \code{"xtabs"}, \code{"overall"} or \code{"classes"}} \item{\dots}{not currently used} } \value{ A matrix or table } \description{ Conversion functions for class \code{confusionMatrix} } \details{ For \code{as.table}, the cross-tabulations are saved. For \code{as.matrix}, the three object types are saved in matrix format. } \examples{ ################### ## 2 class example lvs <- c("normal", "abnormal") truth <- factor(rep(lvs, times = c(86, 258)), levels = rev(lvs)) pred <- factor( c( rep(lvs, times = c(54, 32)), rep(lvs, times = c(27, 231))), levels = rev(lvs)) xtab <- table(pred, truth) results <- confusionMatrix(xtab) as.table(results) as.matrix(results) as.matrix(results, what = "overall") as.matrix(results, what = "classes") ################### ## 3 class example xtab <- confusionMatrix(iris$Species, sample(iris$Species)) as.matrix(xtab) } \author{ Max Kuhn } \keyword{utilities} caret/man/knn3.Rd0000644000176200001440000000605613156620456013302 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/knn3.R \name{knn3} \alias{knn3} \alias{knn3.formula} \alias{knn3.matrix} \alias{knn3.data.frame} \alias{knn3Train} \alias{knn3.formula} \alias{knn3.data.frame} \alias{knn3.matrix} \alias{print.knn3} \alias{knn3Train} \title{k-Nearest Neighbour Classification} \usage{ knn3(x, ...) \method{knn3}{formula}(formula, data, subset, na.action, k = 5, ...) \method{knn3}{data.frame}(x, y, k = 5, ...) \method{knn3}{matrix}(x, y, k = 5, ...) \method{print}{knn3}(x, ...) knn3Train(train, test, cl, k = 1, l = 0, prob = TRUE, use.all = TRUE) } \arguments{ \item{x}{a matrix of training set predictors} \item{...}{additional parameters to pass to \code{knn3Train}. However, passing \code{prob = FALSE} will be over--ridden.} \item{formula}{a formula of the form \code{lhs ~ rhs} where \code{lhs} is the response variable and \code{rhs} a set of predictors.} \item{data}{optional data frame containing the variables in the model formula.} \item{subset}{optional vector specifying a subset of observations to be used.} \item{na.action}{function which indicates what should happen when the data contain \code{NA}s.} \item{k}{number of neighbours considered.} \item{y}{a factor vector of training set classes} \item{train}{matrix or data frame of training set cases.} \item{test}{matrix or data frame of test set cases. A vector will be interpreted as a row vector for a single case.} \item{cl}{factor of true classifications of training set} \item{l}{minimum vote for definite decision, otherwise \code{doubt}. (More precisely, less than \code{k-l} dissenting votes are allowed, even if \code{k} is increased by ties.)} \item{prob}{If this is true, the proportion of the votes for each class are returned as attribute \code{prob}.} \item{use.all}{controls handling of ties. If true, all distances equal to the \code{k}th largest are included. If false, a random selection of distances equal to the \code{k}th is chosen to use exactly \code{k} neighbours.} } \value{ An object of class \code{knn3}. See \code{\link{predict.knn3}}. } \description{ $k$-nearest neighbour classification that can return class votes for all classes. } \details{ \code{knn3} is essentially the same code as \code{\link[ipred]{ipredknn}} and \code{knn3Train} is a copy of \code{\link[class]{knn}}. The underlying C code from the \code{class} package has been modified to return the vote percentages for each class (previously the percentage for the winning class was returned). } \examples{ irisFit1 <- knn3(Species ~ ., iris) irisFit2 <- knn3(as.matrix(iris[, -5]), iris[,5]) data(iris3) train <- rbind(iris3[1:25,,1], iris3[1:25,,2], iris3[1:25,,3]) test <- rbind(iris3[26:50,,1], iris3[26:50,,2], iris3[26:50,,3]) cl <- factor(c(rep("s",25), rep("c",25), rep("v",25))) knn3Train(train, test, cl, k = 5, prob = TRUE) } \author{ \code{\link[class]{knn}} by W. N. Venables and B. D. Ripley and \code{\link[ipred]{ipredknn}} by Torsten.Hothorn , modifications by Max Kuhn and Andre Williams } \keyword{multivariate} caret/man/plotObsVsPred.Rd0000644000176200001440000000542713153613153015171 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plotObsVsPred.R \name{plotObsVsPred} \alias{plotObsVsPred} \title{Plot Observed versus Predicted Results in Regression and Classification Models} \usage{ plotObsVsPred(object, equalRanges = TRUE, ...) } \arguments{ \item{object}{an object (preferably from the function \code{\link{extractPrediction}}. There should be columns named \code{obs}, \code{pred}, \code{model} (e.g. "rpart", "nnet" etc.) and \code{dataType} (e.g. "Training", "Test" etc)} \item{equalRanges}{a logical; should the x- and y-axis ranges be the same?} \item{\dots}{parameters to pass to \code{\link[lattice]{xyplot}} or \code{\link[lattice:xyplot]{dotplot}}, such as \code{auto.key}} } \value{ A lattice object. Note that the plot has to be printed to be displayed (especially in a loop). } \description{ This function takes an object (preferably from the function \code{\link{extractPrediction}}) and creates a lattice plot. For numeric outcomes, the observed and predicted data are plotted with a 45 degree reference line and a smoothed fit. For factor outcomes, a dotplot plot is produced with the accuracies for the different models. } \details{ If the call to \code{\link{extractPrediction}} included test data, these data are shown, but if unknowns were also included, they are not plotted } \examples{ \dontrun{ # regression example data(BostonHousing) rpartFit <- train(BostonHousing[1:100, -c(4, 14)], BostonHousing$medv[1:100], "rpart", tuneLength = 9) plsFit <- train(BostonHousing[1:100, -c(4, 14)], BostonHousing$medv[1:100], "pls") predVals <- extractPrediction(list(rpartFit, plsFit), testX = BostonHousing[101:200, -c(4, 14)], testY = BostonHousing$medv[101:200], unkX = BostonHousing[201:300, -c(4, 14)]) plotObsVsPred(predVals) #classification example data(Satellite) numSamples <- dim(Satellite)[1] set.seed(716) varIndex <- 1:numSamples trainSamples <- sample(varIndex, 150) varIndex <- (1:numSamples)[-trainSamples] testSamples <- sample(varIndex, 100) varIndex <- (1:numSamples)[-c(testSamples, trainSamples)] unkSamples <- sample(varIndex, 50) trainX <- Satellite[trainSamples, -37] trainY <- Satellite[trainSamples, 37] testX <- Satellite[testSamples, -37] testY <- Satellite[testSamples, 37] unkX <- Satellite[unkSamples, -37] knnFit <- train(trainX, trainY, "knn") rpartFit <- train(trainX, trainY, "rpart") predTargets <- extractPrediction(list(knnFit, rpartFit), testX = testX, testY = testY, unkX = unkX) plotObsVsPred(predTargets) } } \author{ Max Kuhn } \keyword{hplot} caret/man/predict.bagEarth.Rd0000644000176200001440000000511713207056443015570 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/bagEarth.R, R/bagFDA.R \name{predict.bagEarth} \alias{predict.bagEarth} \alias{predict.bagFDA} \title{Predicted values based on bagged Earth and FDA models} \usage{ \method{predict}{bagEarth}(object, newdata = NULL, type = NULL, ...) \method{predict}{bagFDA}(object, newdata = NULL, type = "class", ...) } \arguments{ \item{object}{Object of class inheriting from \code{bagEarth}} \item{newdata}{An optional data frame or matrix in which to look for variables with which to predict. If omitted, the fitted values are used (see note below).} \item{type}{The type of prediction. For bagged \code{\link[earth]{earth}} regression model, \code{type = "response"} will produce a numeric vector of the usual model predictions. \code{\link[earth]{earth}} also allows the user to fit generalized linear models. In this case, \code{type = "response"} produces the inverse link results as a vector. In the case of a binomial generalized linear model, \code{type = "response"} produces a vector of probabilities, \code{type = "class"} generates a factor vector and \code{type = "prob"} produces a two-column matrix with probabilities for both classes (averaged across the individual models). Similarly, for bagged \code{\link[mda]{fda}} models, \code{type = "class"} generates a factor vector and \code{type = "probs"} outputs a matrix of class probabilities.} \item{\dots}{not used} } \value{ A vector of predictions (for regression or \code{type = "class"}) or a data frame of class probabilities. By default, when the model predicts a number, a vector of numeric predictions is returned. When a classification model is used, the default prediction is a factor vector of classes. } \description{ Predicted values based on bagged Earth and FDA models } \note{ If the predictions for the original training set are needed, there are two ways to calculate them. First, the original data set can be predicted by each bagged earth model. Secondly, the predictions from each bootstrap sample could be used (but are more likely to overfit). If the original call to \code{bagEarth} or \code{bagFDA} had \code{keepX = TRUE}, the first method is used, otherwise the values are calculated via the second method. } \examples{ \dontrun{ data(trees) ## out of bag predictions vs just re-predicting the training set set.seed(655) fit1 <- bagEarth(Volume ~ ., data = trees, keepX = TRUE) set.seed(655) fit2 <- bagEarth(Volume ~ ., data = trees, keepX = FALSE) hist(predict(fit1) - predict(fit2)) } } \seealso{ \code{\link{bagEarth}} } \author{ Max Kuhn } \keyword{regression} caret/man/plot.train.Rd0000644000176200001440000000711713153613153014513 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ggplot.R, R/plot.train.R \name{ggplot.train} \alias{ggplot.train} \alias{plot.train} \alias{ggplot.train} \title{Plot Method for the train Class} \usage{ \method{ggplot}{train}(data = NULL, mapping = NULL, metric = data$metric[1], plotType = "scatter", output = "layered", nameInStrip = FALSE, highlight = FALSE, ..., environment = NULL) \method{plot}{train}(x, plotType = "scatter", metric = x$metric[1], digits = getOption("digits") - 3, xTrans = NULL, nameInStrip = FALSE, ...) } \arguments{ \item{data}{an object of class \code{\link{train}}.} \item{mapping, environment}{unused arguments to make consistent with \pkg{ggplot2} generic method} \item{metric}{What measure of performance to plot. Examples of possible values are "RMSE", "Rsquared", "Accuracy" or "Kappa". Other values can be used depending on what metrics have been calculated.} \item{plotType}{a string describing the type of plot (\code{"scatter"}, \code{"level"} or \code{"line"} (\code{plot} only))} \item{output}{either "data", "ggplot" or "layered". The first returns a data frame while the second returns a simple \code{ggplot} object with no layers. The third value returns a plot with a set of layers.} \item{nameInStrip}{a logical: if there are more than 2 tuning parameters, should the name and value be included in the panel title?} \item{highlight}{a logical: if \code{TRUE}, a diamond is placed around the optimal parameter setting for models using grid search.} \item{\dots}{\code{plot} only: specifications to be passed to \code{\link[lattice]{levelplot}}, \code{\link[lattice]{xyplot}}, \code{\link[lattice:xyplot]{stripplot}} (for line plots). The function automatically sets some arguments (e.g. axis labels) but passing in values here will over-ride the defaults} \item{x}{an object of class \code{\link{train}}.} \item{digits}{an integer specifying the number of significant digits used to label the parameter value.} \item{xTrans}{a function that will be used to scale the x-axis in scatter plots.} } \description{ This function takes the output of a \code{\link{train}} object and creates a line or level plot using the \pkg{lattice} or \pkg{ggplot2} libraries. } \details{ If there are no tuning parameters, or none were varied, an error is produced. If the model has one tuning parameter with multiple candidate values, a plot is produced showing the profile of the results over the parameter. Also, a plot can be produced if there are multiple tuning parameters but only one is varied. If there are two tuning parameters with different values, a plot can be produced where a different line is shown for each value of of the other parameter. For three parameters, the same line plot is created within conditioning panels/facets of the other parameter. Also, with two tuning parameters (with different values), a levelplot (i.e. un-clustered heatmap) can be created. For more than two parameters, this plot is created inside conditioning panels/facets. } \examples{ \dontrun{ library(klaR) rdaFit <- train(Species ~ ., data = iris, method = "rda", control = trainControl(method = "cv")) plot(rdaFit) plot(rdaFit, plotType = "level") ggplot(rdaFit) + theme_bw() } } \references{ Kuhn (2008), ``Building Predictive Models in R Using the caret'' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}) } \seealso{ \code{\link{train}}, \code{\link[lattice]{levelplot}}, \code{\link[lattice]{xyplot}}, \code{\link[lattice:xyplot]{stripplot}}, \code{\link[ggplot2]{ggplot}} } \author{ Max Kuhn } \keyword{hplot} caret/man/predict.knn3.Rd0000644000176200001440000000175213153613153014722 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/knn3.R \name{predict.knn3} \alias{predict.knn3} \title{Predictions from k-Nearest Neighbors} \usage{ \method{predict}{knn3}(object, newdata, type = c("prob", "class"), ...) } \arguments{ \item{object}{object of class \code{knn3}.} \item{newdata}{a data frame of new observations.} \item{type}{return either the predicted class or the proportion of the votes for the winning class.} \item{...}{additional arguments.} } \value{ Either the predicted class or the proportion of the votes for each class. } \description{ Predict the class of a new observation based on k-NN. } \details{ This function is a method for the generic function \code{\link{predict}} for class \code{knn3}. For the details see \code{\link{knn3}}. This is essentially a copy of \code{\link[ipred]{predict.ipredknn}}. } \author{ \code{\link[ipred]{predict.ipredknn}} by Torsten.Hothorn } \keyword{multivariate} caret/man/calibration.Rd0000644000176200001440000001256113153613153014707 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/calibration.R \name{calibration} \alias{calibration} \alias{calibration.formula} \alias{calibration.default} \alias{xyplot.calibration} \alias{ggplot.calibration} \alias{panel.calibration} \alias{calibration.default} \alias{calibration.formula} \alias{print.calibration} \alias{xyplot.calibration} \alias{ggplot.calibration} \title{Probability Calibration Plot} \usage{ calibration(x, ...) \method{calibration}{default}(x, ...) \method{calibration}{formula}(x, data = NULL, class = NULL, cuts = 11, subset = TRUE, lattice.options = NULL, ...) \method{print}{calibration}(x, ...) \method{xyplot}{calibration}(x, data = NULL, ...) \method{ggplot}{calibration}(data, ..., bwidth = 2, dwidth = 3) } \arguments{ \item{x}{a \code{lattice} formula (see \code{\link[lattice:xyplot]{xyplot}} for syntax) where the left -hand side of the formula is a factor class variable of the observed outcome and the right-hand side specifies one or model columns corresponding to a numeric ranking variable for a model (e.g. class probabilities). The classification variable should have two levels.} \item{\dots}{options to pass through to \code{\link[lattice:xyplot]{xyplot}} or the panel function (not used in \code{calibration.formula}).} \item{data}{For \code{calibration.formula}, a data frame (or more precisely, anything that is a valid \code{envir} argument in \code{eval}, e.g., a list or an environment) containing values for any variables in the formula, as well as \code{groups} and \code{subset} if applicable. If not found in \code{data}, or if \code{data} is unspecified, the variables are looked for in the environment of the formula. This argument is not used for \code{xyplot.calibration}. For {ggplot.calibration}, \code{data} should be an object of class "\code{calibration}"."} \item{class}{a character string for the class of interest} \item{cuts}{If a single number this indicates the number of splits of the data are used to create the plot. By default, it uses as many cuts as there are rows in \code{data}. If a vector, these are the actual cuts that will be used.} \item{subset}{An expression that evaluates to a logical or integer indexing vector. It is evaluated in \code{data}. Only the resulting rows of \code{data} are used for the plot.} \item{lattice.options}{A list that could be supplied to \code{\link[lattice:lattice.options]{lattice.options}}} \item{bwidth, dwidth}{a numeric value for the confidence interval bar width and dodge width, respectively. In the latter case, a dodge is only used when multiple models are specified in the formula.} } \value{ \code{calibration.formula} returns a list with elements: \item{data}{the data used for plotting} \item{cuts}{the number of cuts} \item{class}{the event class} \item{probNames}{the names of the model probabilities} \code{xyplot.calibration} returns a \pkg{lattice} object } \description{ For classification models, this function creates a 'calibration plot' that describes how consistent model probabilities are with observed event rates. } \details{ \code{calibration.formula} is used to process the data and \code{xyplot.calibration} is used to create the plot. To construct the calibration plot, the following steps are used for each model: \enumerate{ \item The data are split into \code{cuts - 1} roughly equal groups by their class probabilities \item the number of samples with true results equal to \code{class} are determined \item the event rate is determined for each bin} \code{xyplot.calibration} produces a plot of the observed event rate by the mid-point of the bins. This implementation uses the \pkg{lattice} function \code{\link[lattice:xyplot]{xyplot}}, so plot elements can be changed via panel functions, \code{\link[lattice:trellis.par.get]{trellis.par.set}} or other means. \code{calibration} uses the panel function \code{\link{panel.calibration}} by default, but it can be changed by passing that argument into \code{xyplot.calibration}. The following elements are set by default in the plot but can be changed by passing new values into \code{xyplot.calibration}: \code{xlab = "Bin Midpoint"}, \code{ylab = "Observed Event Percentage"}, \code{type = "o"}, \code{ylim = extendrange(c(0, 100))},\code{xlim = extendrange(c(0, 100))} and \code{panel = panel.calibration} For the \code{ggplot} method, confidence intervals on the estimated proportions (from \code{\link[stats]{binom.test}}) are also shown. } \examples{ \dontrun{ data(mdrr) mdrrDescr <- mdrrDescr[, -nearZeroVar(mdrrDescr)] mdrrDescr <- mdrrDescr[, -findCorrelation(cor(mdrrDescr), .5)] inTrain <- createDataPartition(mdrrClass) trainX <- mdrrDescr[inTrain[[1]], ] trainY <- mdrrClass[inTrain[[1]]] testX <- mdrrDescr[-inTrain[[1]], ] testY <- mdrrClass[-inTrain[[1]]] library(MASS) ldaFit <- lda(trainX, trainY) qdaFit <- qda(trainX, trainY) testProbs <- data.frame(obs = testY, lda = predict(ldaFit, testX)$posterior[,1], qda = predict(qdaFit, testX)$posterior[,1]) calibration(obs ~ lda + qda, data = testProbs) calPlotData <- calibration(obs ~ lda + qda, data = testProbs) calPlotData xyplot(calPlotData, auto.key = list(columns = 2)) } } \seealso{ \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:trellis.par.get]{trellis.par.set}} } \author{ Max Kuhn, some \pkg{lattice} code and documentation by Deepayan Sarkar } \keyword{hplot} caret/man/nullModel.Rd0000644000176200001440000000437513153613153014357 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/selectByFilter.R \name{nullModel} \alias{nullModel} \alias{nullModel.default} \alias{predict.nullModel} \alias{nullModel.default} \alias{predict.nullModel} \title{Fit a simple, non-informative model} \usage{ nullModel(x, ...) \method{nullModel}{default}(x = NULL, y, ...) \method{predict}{nullModel}(object, newdata = NULL, type = NULL, ...) } \arguments{ \item{x}{An optional matrix or data frame of predictors. These values are not used in the model fit} \item{\dots}{Optional arguments (not yet used)} \item{y}{A numeric vector (for regression) or factor (for classification) of outcomes} \item{object}{An object of class \code{nullModel}} \item{newdata}{A matrix or data frame of predictors (only used to determine the number of predictions to return)} \item{type}{Either "raw" (for regression), "class" or "prob" (for classification)} } \value{ The output of \code{nullModel} is a list of class \code{nullModel} with elements \item{call }{the function call} \item{value }{the mean of \code{y} or the most prevalent class} \item{levels }{when \code{y} is a factor, a vector of levels. \code{NULL} otherwise} \item{pct }{when \code{y} is a factor, a data frame with a column for each class (\code{NULL} otherwise). The column for the most prevalent class has the proportion of the training samples with that class (the other columns are zero). } \item{n }{the number of elements in \code{y}} \code{predict.nullModel} returns a either a factor or numeric vector depending on the class of \code{y}. All predictions are always the same. } \description{ Fit a single mean or largest class model } \details{ \code{nullModel} emulates other model building functions, but returns the simplest model possible given a training set: a single mean for numeric outcomes and the most prevalent class for factor outcomes. When class probabilities are requested, the percentage of the training set samples with the most prevalent class is returned. } \examples{ outcome <- factor(sample(letters[1:2], size = 100, prob = c(.1, .9), replace = TRUE)) useless <- nullModel(y = outcome) useless predict(useless, matrix(NA, nrow = 10)) } \keyword{models} caret/man/thresholder.Rd0000644000176200001440000000455713153613153014751 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/thresholder.R \name{thresholder} \alias{thresholder} \title{Generate Data to Choose a Probability Threshold} \usage{ thresholder(x, threshold, final = TRUE) } \arguments{ \item{x}{A \code{\link{train}} object where the values of \code{savePredictions} was either \code{TRUE}, \code{"all"}, or \code{"final"} in \code{\link{trainControl}}. Also, the control argument \code{clasProbs} should have been \code{TRUE}.} \item{threshold}{A numeric vector of candidate probability thresholds between [0,1]. If the class probability corresponding to the first level of the outcome is greater than the threshold, the data point is classified as that level.} \item{final}{A logical: should only the final tuning parameters chosen by \code{\link{train}} be used when \code{savePredictions = 'all'}?} } \value{ A data frame with columns for each of the tuning parameters from the model along with an additional column called \code{prob_threshold} for the probability threshold. There are also columns for summary statistics averaged over resamples with column names \code{Sensitivity}, \code{Specificity}, \code{J}, \code{Dist}. The last two correspond to Youden's J statistic and the distance to the best possible cutoff (i.e. perfect sensitivity and specificity). } \description{ This function uses the resampling results from a \code{\link{train}} object to generate performance statistics over a set of probability thresholds for two-class problems. } \examples{ \dontrun{ set.seed(2444) dat <- twoClassSim(500, intercept = -10) table(dat$Class) ctrl <- trainControl(method = "cv", classProbs = TRUE, savePredictions = "all", summaryFunction = twoClassSummary) set.seed(2863) mod <- train(Class ~ ., data = dat, method = "rda", tuneLength = 4, metric = "ROC", trControl = ctrl) resample_stats <- thresholder(mod, threshold = seq(.5, 1, by = 0.05), final = TRUE) ggplot(resample_stats, aes(x = prob_threshold, y = J)) + geom_point() ggplot(resample_stats, aes(x = prob_threshold, y = Dist)) + geom_point() ggplot(resample_stats, aes(x = prob_threshold, y = Sensitivity)) + geom_point() + geom_point(aes(y = Specificity), col = "red") } } caret/man/densityplot.rfe.Rd0000644000176200001440000000437313153613153015553 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/rfe.R \name{densityplot.rfe} \alias{densityplot.rfe} \alias{xyplot.rfe} \alias{stripplot.rfe} \alias{histogram.rfe} \title{Lattice functions for plotting resampling results of recursive feature selection} \usage{ \method{densityplot}{rfe}(x, data = NULL, metric = x$metric, ...) } \arguments{ \item{x}{An object produced by \code{\link{rfe}}} \item{data}{This argument is not used} \item{metric}{A character string specifying the single performance metric that will be plotted} \item{\dots}{arguments to pass to either \code{\link[lattice:histogram]{histogram}}, \code{\link[lattice:histogram]{densityplot}}, \code{\link[lattice:xyplot]{xyplot}} or \code{\link[lattice:xyplot]{stripplot}}} } \value{ A lattice plot object } \description{ A set of lattice functions are provided to plot the resampled performance estimates (e.g. classification accuracy, RMSE) over different subset sizes. } \details{ By default, only the resampling results for the optimal model are saved in the \code{rfe} object. The function \code{\link{rfeControl}} can be used to save all the results using the \code{returnResamp} argument. If leave-one-out or out-of-bag resampling was specified, plots cannot be produced (see the \code{method} argument of \code{\link{rfeControl}}) } \examples{ \dontrun{ library(mlbench) n <- 100 p <- 40 sigma <- 1 set.seed(1) sim <- mlbench.friedman1(n, sd = sigma) x <- cbind(sim$x, matrix(rnorm(n * p), nrow = n)) y <- sim$y colnames(x) <- paste("var", 1:ncol(x), sep = "") normalization <- preProcess(x) x <- predict(normalization, x) x <- as.data.frame(x) subsets <- c(10, 15, 20, 25) ctrl <- rfeControl( functions = lmFuncs, method = "cv", verbose = FALSE, returnResamp = "all") lmProfile <- rfe(x, y, sizes = subsets, rfeControl = ctrl) xyplot(lmProfile) stripplot(lmProfile) histogram(lmProfile) densityplot(lmProfile) } } \seealso{ \code{\link{rfe}}, \code{\link{rfeControl}}, \code{\link[lattice:histogram]{histogram}}, \code{\link[lattice:histogram]{densityplot}}, \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:xyplot]{stripplot}} } \author{ Max Kuhn } \keyword{hplot} caret/man/twoClassSim.Rd0000644000176200001440000001737613153613153014701 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/reg_sims.R, R/twoClassSim.R \name{SLC14_1} \alias{SLC14_1} \alias{SLC14_2} \alias{LPH07_1} \alias{LPH07_2} \alias{twoClassSim} \alias{SLC14_1} \alias{SLC14_2} \alias{LPH07_1} \alias{LPH07_2} \title{Simulation Functions} \usage{ SLC14_1(n = 100, noiseVars = 0, corrVars = 0, corrType = "AR1", corrValue = 0) SLC14_2(n = 100, noiseVars = 0, corrVars = 0, corrType = "AR1", corrValue = 0) LPH07_1(n = 100, noiseVars = 0, corrVars = 0, corrType = "AR1", corrValue = 0, factors = FALSE, class = FALSE) LPH07_2(n = 100, noiseVars = 0, corrVars = 0, corrType = "AR1", corrValue = 0) twoClassSim(n = 100, intercept = -5, linearVars = 10, noiseVars = 0, corrVars = 0, corrType = "AR1", corrValue = 0, mislabel = 0, ordinal = FALSE) } \arguments{ \item{n}{The number of simulated data points} \item{noiseVars}{The number of uncorrelated irrelevant predictors to be included.} \item{corrVars}{The number of correlated irrelevant predictors to be included.} \item{corrType}{The correlation structure of the correlated irrelevant predictors. Values of "AR1" and "exch" are available (see Details below)} \item{corrValue}{The correlation value.} \item{factors}{Should the binary predictors be converted to factors?} \item{class}{Should the simulation produce class labels instead of numbers?} \item{intercept}{The intercept, which controls the class balance. The default value produces a roughly balanced data set when the other defaults are used.} \item{linearVars}{The number of linearly important effects. See Details below.} \item{mislabel}{The proportion of data that is possibly mislabeled. Only used when \code{ordinal = FALSE}. See Details below.} \item{ordinal}{Should an ordered factor be returned? See Details below.} } \value{ a data frame with columns: \item{Class }{A factor with levels "Class1" and "Class2"} \item{TwoFactor1, TwoFactor2 }{Correlated multivariate normal predictors (denoted as \code{A} and \code{B} above)} \item{Nonlinear1, Nonlinear2, Nonlinear3}{Uncorrelated random uniform predictors (\code{J}, \code{K} and \code{L} above).} \item{Linear1, }{Optional uncorrelated standard normal predictors (\code{C} through \code{H} above)}\item{list()}{Optional uncorrelated standard normal predictors (\code{C} through \code{H} above)} \item{Noise1, }{Optional uncorrelated standard normal predictions}\item{list()}{Optional uncorrelated standard normal predictions} \item{Corr1, }{Optional correlated multivariate normal predictors (each with unit variances)}\item{list()}{Optional correlated multivariate normal predictors (each with unit variances)}. } \description{ This function simulates regression and classification data with truly important predictors and irrelevant predictions. } \details{ The first function (\code{twoClassSim}) generates two class data. The data are simulated in different sets. First, two multivariate normal predictors (denoted here as \code{A} and \code{B}) are created with a correlation our about 0.65. They change the log-odds using main effects and an interaction: \preformatted{ intercept - 4A + 4B + 2AB } The intercept is a parameter for the simulation and can be used to control the amount of class imbalance. The second set of effects are linear with coefficients that alternate signs and have values between 2.5 and 0.025. For example, if there were six predictors in this set, their contribution to the log-odds would be \preformatted{ -2.50C + 2.05D -1.60E + 1.15F -0.70G + 0.25H } The third set is a nonlinear function of a single predictor ranging between [0, 1] called \code{J} here: \preformatted{ (J^3) + 2exp(-6(J-0.3)^2) } The fourth set of informative predictors are copied from one of Friedman's systems and use two more predictors (\code{K} and \code{L}): \preformatted{ 2sin(KL) } All of these effects are added up to model the log-odds. When \code{ordinal = FALSE}, this is used to calculate the probability of a sample being in the first class and a random uniform number is used to actually make the assignment of the actual class. To mislabel the data, the probability is reversed (i.e. \code{p = 1 - p}) before the random number generation. For \code{ordinal = TRUE}, random normal errors are added to the linear predictor (i.e. prior to computing the probability) and cut points (0.00, 0.20, 0.75, and 1.00) are used to bin the probabilities into classes \code{"low"}, \code{"med"}, and \code{"high"} (despite the function's name). The remaining functions simulate regression data sets. \code{LPH07_1} and \code{LPH07_2} are from van der Laan et al. (2007). The first function uses random Bernoulli variables that have a 40\% probability of being a value of 1. The true regression equation is: \preformatted{ 2*w_1*w_10 + 4*w_2*w_7 + 3*w_4*w_5 - 5*w_6*w_10 + 3*w_8*w_9 + w_1*w_2*w_4 - 2*w_7*(1-w_6)*w_2*w_9 - 4*(1 - w_10)*w_1*(1-w_4) } The simulated error term is a standard normal (i.e. Gaussian). The noise variables are simulated in the same manner as described above but are made binary based on whether the normal random variable is above or below 0. If \code{factors = TRUE}, each of the predictors is coerced into a factor. This simulation can also be adapted for classification using the option \code{class = TRUE}. In this case, the outcome is converted to be a factor by first computing the logit transformation of the equation above and using uniform random numbers to assign the observed class. A second function (\code{LPH07_2}) uses 20 independent Gaussians with mean zero and variance 16. The functional form here is: \preformatted{ x_1*x_2 + x_10^2 - x_3*x_17 - x_15*x_4 + x_9*x_5 + x_19 - x_20^2 + x_9*x_8 } The error term is also Gaussian with mean zero and variance 16. The function \code{SLC14_1} simulates a system from Sapp et al. (2014). All informative predictors are independent Gaussian random variables with mean zero and a variance of 9. The prediction equation is: \preformatted{ x_1 + sin(x_2) + log(abs(x_3)) + x_4^2 + x_5*x_6 + I(x_7*x_8*x_9 < 0) + I(x_10 > 0) + x_11*I(x_11 > 0) + sqrt(abs(x_12)) + cos(x_13) + 2*x_14 + abs(x_15) + I(x_16 < -1) + x_17*I(x_17 < -1) - 2 * x_18 - x_19*x_20 } The random error here is also Gaussian with mean zero and a variance of 9. \code{SLC14_2} is also from Sapp et al. (2014). Two hundred independent Gaussian variables are generated, each having mean zero and variance 16. The functional form is \preformatted{ -1 + log(abs(x_1)) + ... + log(abs(x_200)) } and the error term is Gaussian with mean zero and a variance of 25. For each simulation, the user can also add non-informative predictors to the data. These are random standard normal predictors and can be optionally added to the data in two ways: a specified number of independent predictors or a set number of predictors that follow a particular correlation structure. The only two correlation structure that have been implemented are \itemize{ \item compound-symmetry (aka exchangeable) where there is a constant correlation between all the predictors \item auto-regressive 1 [AR(1)]. While there is no time component to these data, this structure can be used to add predictors of varying levels of correlation. For example, if there were 4 predictors and \code{r} was the correlation parameter, the between predictor correlation matrix would be } \preformatted{ | 1 sym | | r 1 | | r^2 r 1 | | r^3 r^2 r 1 | | r^4 r^3 r^2 r 1 | } } \examples{ example <- twoClassSim(100, linearVars = 1) splom(~example[, 1:6], groups = example$Class) } \references{ van der Laan, M. J., & Polley Eric, C. (2007). Super learner. Statistical Applications in Genetics and Molecular Biology, 6(1), 1-23. Sapp, S., van der Laan, M. J., & Canny, J. (2014). Subsemble: an ensemble method for combining subset-specific algorithm fits. Journal of Applied Statistics, 41(6), 1247-1259. } \author{ Max Kuhn } \keyword{models} caret/man/predict.gafs.Rd0000644000176200001440000000233613153613153014770 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/gafs.R \name{predict.gafs} \alias{predict.gafs} \alias{predict.safs} \title{Predict new samples} \usage{ \method{predict}{gafs}(object, newdata, ...) } \arguments{ \item{object}{an object of class \code{\link{safs}} or \code{\link{gafs}}} \item{newdata}{a data frame or matrix of predictors.} \item{\dots}{not currently used} } \value{ The type of result depends on what was specified in \code{object$control$functions$predict}. } \description{ Predict new samples using \code{\link{safs}} and \code{\link{gafs}} objects. } \details{ Only the predictors listed in \code{object$optVariables} are required. } \examples{ \dontrun{ set.seed(1) train_data <- twoClassSim(100, noiseVars = 10) test_data <- twoClassSim(10, noiseVars = 10) ## A short example ctrl <- safsControl(functions = rfSA, method = "cv", number = 3) rf_search <- safs(x = train_data[, -ncol(train_data)], y = train_data$Class, iters = 3, safsControl = ctrl) rf_search predict(rf_search, train_data) } } \seealso{ \code{\link{safs}}, \code{\link{gafs}} } \author{ Max Kuhn } \keyword{multivariate} caret/man/predict.knnreg.Rd0000644000176200001440000000154113153613153015331 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/knnreg.R \name{predict.knnreg} \alias{predict.knnreg} \title{Predictions from k-Nearest Neighbors Regression Model} \usage{ \method{predict}{knnreg}(object, newdata, ...) } \arguments{ \item{object}{object of class \code{knnreg}.} \item{newdata}{a data frame or matrix of new observations.} \item{...}{additional arguments.} } \value{ a numeric vector } \description{ Predict the outcome of a new observation based on k-NN. } \details{ This function is a method for the generic function \code{\link{predict}} for class \code{knnreg}. For the details see \code{\link{knnreg}}. This is essentially a copy of \code{\link[ipred]{predict.ipredknn}}. } \author{ Max Kuhn, Chris Keefer, adapted from \code{\link[class]{knn}} and \code{\link[ipred]{predict.ipredknn}} } \keyword{multivariate} caret/man/pcaNNet.Rd0000644000176200001440000000732413153613153013751 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/pcaNNet.R \name{pcaNNet} \alias{pcaNNet} \alias{pcaNNet.default} \alias{predict.pcaNNet} \alias{pcaNNet.formula} \alias{pcaNNet.formula} \alias{pcaNNet.default} \alias{print.pcaNNet} \alias{predict.pcaNNet} \title{Neural Networks with a Principal Component Step} \usage{ pcaNNet(x, ...) \method{pcaNNet}{formula}(formula, data, weights, ..., thresh = 0.99, subset, na.action, contrasts = NULL) \method{pcaNNet}{default}(x, y, thresh = 0.99, ...) \method{print}{pcaNNet}(x, ...) \method{predict}{pcaNNet}(object, newdata, type = c("raw", "class", "prob"), ...) } \arguments{ \item{x}{matrix or data frame of \code{x} values for examples.} \item{\dots}{arguments passed to \code{\link[nnet]{nnet}}, such as \code{size}, \code{decay}, etc.} \item{formula}{A formula of the form \code{class ~ x1 + x2 + \dots{}}} \item{data}{Data frame from which variables specified in \code{formula} are preferentially to be taken.} \item{weights}{(case) weights for each example -- if missing defaults to 1.} \item{thresh}{a threshold for the cumulative proportion of variance to capture from the PCA analysis. For example, to retain enough PCA components to capture 95 percent of variation, set \code{thresh = .95}} \item{subset}{An index vector specifying the cases to be used in the training sample. (NOTE: If given, this argument must be named.)} \item{na.action}{A function to specify the action to be taken if \code{NA}s are found. The default action is for the procedure to fail. An alternative is na.omit, which leads to rejection of cases with missing values on any required variable. (NOTE: If given, this argument must be named.)} \item{contrasts}{a list of contrasts to be used for some or all of the factors appearing as variables in the model formula.} \item{y}{matrix or data frame of target values for examples.} \item{object}{an object of class \code{pcaNNet} as returned by \code{pcaNNet}.} \item{newdata}{matrix or data frame of test examples. A vector is considered to be a row vector comprising a single case.} \item{type}{Type of output} } \value{ For \code{pcaNNet}, an object of \code{"pcaNNet"} or \code{"pcaNNet.formula"}. Items of interest in the output are: \item{pc }{the output from \code{\link{preProcess}}} \item{model }{the model generated from \code{\link[nnet]{nnet}}} \item{names }{if any predictors had only one distinct value, this is a character string of the remaining columns. Otherwise a value of \code{NULL}} } \description{ Run PCA on a dataset, then use it in a neural network model } \details{ The function first will run principal component analysis on the data. The cumulative percentage of variance is computed for each principal component. The function uses the \code{thresh} argument to determine how many components must be retained to capture this amount of variance in the predictors. The principal components are then used in a neural network model. When predicting samples, the new data are similarly transformed using the information from the PCA analysis on the training data and then predicted. Because the variance of each predictor is used in the PCA analysis, the code does a quick check to make sure that each predictor has at least two distinct values. If a predictor has one unique value, it is removed prior to the analysis. } \examples{ data(BloodBrain) modelFit <- pcaNNet(bbbDescr[, 1:10], logBBB, size = 5, linout = TRUE, trace = FALSE) modelFit predict(modelFit, bbbDescr[, 1:10]) } \references{ Ripley, B. D. (1996) \emph{Pattern Recognition and Neural Networks.} Cambridge. } \seealso{ \code{\link[nnet]{nnet}}, \code{\link{preProcess}} } \author{ These are heavily based on the \code{nnet} code from Brian Ripley. } \keyword{neural} caret/man/maxDissim.Rd0000644000176200001440000000627413153613153014362 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/maxDissim.R \name{maxDissim} \alias{maxDissim} \alias{minDiss} \alias{sumDiss} \alias{minDiss} \alias{sumDiss} \title{Maximum Dissimilarity Sampling} \usage{ maxDissim(a, b, n = 2, obj = minDiss, useNames = FALSE, randomFrac = 1, verbose = FALSE, ...) minDiss(u) sumDiss(u) } \arguments{ \item{a}{a matrix or data frame of samples to start} \item{b}{a matrix or data frame of samples to sample from} \item{n}{the size of the sub-sample} \item{obj}{an objective function to measure overall dissimilarity} \item{useNames}{a logical: should the function return the row names (as opposed ot the row index)} \item{randomFrac}{a number in (0, 1] that can be used to sub-sample from the remaining candidate values} \item{verbose}{a logical; should each step be printed?} \item{\dots}{optional arguments to pass to dist} \item{u}{a vector of dissimilarities} } \value{ a vector of integers or row names (depending on \code{useNames}) corresponding to the rows of \code{b} that comprise the sub-sample. } \description{ Functions to create a sub-sample by maximizing the dissimilarity between new samples and the existing subset. } \details{ Given an initial set of m samples and a larger pool of n samples, this function iteratively adds points to the smaller set by finding with of the n samples is most dissimilar to the initial set. The argument \code{obj} measures the overall dissimilarity between the initial set and a candidate point. For example, maximizing the minimum or the sum of the m dissimilarities are two common approaches. This algorithm tends to select points on the edge of the data mainstream and will reliably select outliers. To select more samples towards the interior of the data set, set \code{randomFrac} to be small (see the examples below). } \examples{ example <- function(pct = 1, obj = minDiss, ...) { tmp <- matrix(rnorm(200 * 2), nrow = 200) ## start with 15 data points start <- sample(1:dim(tmp)[1], 15) base <- tmp[start,] pool <- tmp[-start,] ## select 9 for addition newSamp <- maxDissim( base, pool, n = 9, randomFrac = pct, obj = obj, ...) allSamp <- c(start, newSamp) plot( tmp[-newSamp,], xlim = extendrange(tmp[,1]), ylim = extendrange(tmp[,2]), col = "darkgrey", xlab = "variable 1", ylab = "variable 2") points(base, pch = 16, cex = .7) for(i in seq(along = newSamp)) points( pool[newSamp[i],1], pool[newSamp[i],2], pch = paste(i), col = "darkred") } par(mfrow=c(2,2)) set.seed(414) example(1, minDiss) title("No Random Sampling, Min Score") set.seed(414) example(.1, minDiss) title("10 Pct Random Sampling, Min Score") set.seed(414) example(1, sumDiss) title("No Random Sampling, Sum Score") set.seed(414) example(.1, sumDiss) title("10 Pct Random Sampling, Sum Score") } \references{ Willett, P. (1999), "Dissimilarity-Based Algorithms for Selecting Structurally Diverse Sets of Compounds," \emph{Journal of Computational Biology}, 6, 447-457. } \seealso{ \code{\link{dist}} } \author{ Max Kuhn \email{max.kuhn@pfizer.com} } \keyword{utilities} caret/man/panel.lift2.Rd0000644000176200001440000000425313153613153014535 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/lift.R \name{panel.lift2} \alias{panel.lift2} \alias{panel.lift} \title{Lattice Panel Functions for Lift Plots} \usage{ panel.lift2(x, y, pct = 0, values = NULL, ...) } \arguments{ \item{x}{the percentage of searched to be plotted in the scatterplot} \item{y}{the percentage of events found to be plotted in the scatterplot} \item{pct}{the baseline percentage of true events in the data} \item{values}{A vector of numbers between 0 and 100 specifying reference values for the percentage of samples found (i.e. the y-axis). Corresponding points on the x-axis are found via interpolation and line segments are shown to indicate how many samples must be tested before these percentages are found. The lines use either the \code{plot.line} or \code{superpose.line} component of the current lattice theme to draw the lines (depending on whether groups were used} \item{\dots}{options to pass to \code{\link[lattice:panel.xyplot]{panel.xyplot}}} } \description{ Two panel functions that be used in conjunction with \code{\link{lift}}. } \details{ \code{panel.lift} plots the data with a simple (black) 45 degree reference line. \code{panel.lift2} is the default for \code{\link{lift}} and plots the data points with a shaded region encompassing the space between to the random model and perfect model trajectories. The color of the region is determined by the lattice \code{reference.line} information (see example below). } \examples{ set.seed(1) simulated <- data.frame(obs = factor(rep(letters[1:2], each = 100)), perfect = sort(runif(200), decreasing = TRUE), random = runif(200)) regionInfo <- trellis.par.get("reference.line") regionInfo$col <- "lightblue" trellis.par.set("reference.line", regionInfo) lift2 <- lift(obs ~ random + perfect, data = simulated) lift2 xyplot(lift2, auto.key = list(columns = 2)) ## use a different panel function xyplot(lift2, panel = panel.lift) } \seealso{ \code{\link{lift}}, \code{\link[lattice:panel.xyplot]{panel.xyplot}}, \code{\link[lattice:xyplot]{xyplot}}, \link[lattice:trellis.par.get]{trellis.par.set} } \author{ Max Kuhn } \keyword{hplot} caret/man/oneSE.Rd0000644000176200001440000001156213153613153013431 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/selection.R \name{oneSE} \alias{oneSE} \alias{best} \alias{tolerance} \alias{tolerance} \title{Selecting tuning Parameters} \usage{ oneSE(x, metric, num, maximize) tolerance(x, metric, tol = 1.5, maximize) } \arguments{ \item{x}{a data frame of tuning parameters and model results, sorted from least complex models to the mst complex} \item{metric}{a string that specifies what summary metric will be used to select the optimal model. By default, possible values are "RMSE" and "Rsquared" for regression and "Accuracy" and "Kappa" for classification. If custom performance metrics are used (via the \code{summaryFunction} argument in \code{\link{trainControl}}, the value of \code{metric} should match one of the arguments. If it does not, a warning is issued and the first metric given by the \code{summaryFunction} is used.} \item{num}{the number of resamples (for \code{oneSE} only)} \item{maximize}{a logical: should the metric be maximized or minimized?} \item{tol}{the acceptable percent tolerance (for \code{tolerance} only)} } \value{ a row index } \description{ Various functions for setting tuning parameters } \details{ These functions can be used by \code{\link{train}} to select the "optimal" model from a series of models. Each requires the user to select a metric that will be used to judge performance. For regression models, values of \code{"RMSE"} and \code{"Rsquared"} are applicable. Classification models use either \code{"Accuracy"} or \code{"Kappa"} (for unbalanced class distributions. More details on these functions can be found at \url{http://topepo.github.io/caret/model-training-and-tuning.html#custom}. By default, \code{\link{train}} uses \code{best}. \code{best} simply chooses the tuning parameter associated with the largest (or lowest for \code{"RMSE"}) performance. \code{oneSE} is a rule in the spirit of the "one standard error" rule of Breiman et al. (1984), who suggest that the tuning parameter associated with the best performance may over fit. They suggest that the simplest model within one standard error of the empirically optimal model is the better choice. This assumes that the models can be easily ordered from simplest to most complex (see the Details section below). \code{tolerance} takes the simplest model that is within a percent tolerance of the empirically optimal model. For example, if the largest Kappa value is 0.5 and a simpler model within 3 percent is acceptable, we score the other models using \code{(x - 0.5)/0.5 * 100}. The simplest model whose score is not less than 3 is chosen (in this case, a model with a Kappa value of 0.35 is acceptable). User--defined functions can also be used. The argument \code{selectionFunction} in \code{\link{trainControl}} can be used to pass the function directly or to pass the function by name. } \note{ In many cases, it is not very clear how to order the models on simplicity. For simple trees and other models (such as PLS), this is straightforward. However, for others it is not. For example, many of the boosting models used by \pkg{caret} have parameters for the number of boosting iterations and the tree complexity (others may also have a learning rate parameter). In this implementation, we order models on number of iterations, then tree depth. Clearly, this is arguable (please email the author for suggestions though). For MARS models, they are orders on the degree of the features, then the number of retained terms. RBF SVM models are ordered first by the cost parameter, then by the kernel parameter while polynomial models are ordered first on polynomial degree, then cost and scale. Neural networks are ordered by the number of hidden units and then the amount of weight decay. k--nearest neighbor models are ordered from most neighbors to least (i.e. smoothest to model jagged decision boundaries). Elastic net models are ordered first on the L1 penalty, then by the L2 penalty. } \examples{ \dontrun{ # simulate a PLS regression model test <- data.frame(ncomp = 1:5, RMSE = c(3, 1.1, 1.02, 1, 2), RMSESD = .4) best(test, "RMSE", maximize = FALSE) oneSE(test, "RMSE", maximize = FALSE, num = 10) tolerance(test, "RMSE", tol = 3, maximize = FALSE) ### usage example data(BloodBrain) marsGrid <- data.frame(degree = 1, nprune = (1:10) * 3) set.seed(1) marsFit <- train(bbbDescr, logBBB, method = "earth", tuneGrid = marsGrid, trControl = trainControl(method = "cv", number = 10, selectionFunction = "tolerance")) # around 18 terms should yield the smallest CV RMSE } } \references{ Breiman, Friedman, Olshen, and Stone. (1984) \emph{Classification and Regression Trees}. Wadsworth. } \seealso{ \code{\link{train}}, \code{\link{trainControl}} } \author{ Max Kuhn } \keyword{manip} caret/man/oil.Rd0000644000176200001440000000216613153613153013203 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{oil} \alias{oil} \alias{oilType} \alias{fattyAcids} \title{Fatty acid composition of commercial oils} \source{ Brodnjak-Voncina et al. (2005). Multivariate data analysis in classification of vegetable oils characterized by the content of fatty acids, \emph{Chemometrics and Intelligent Laboratory Systems}, Vol. 75:31-45. } \value{ \item{fattyAcids}{data frame of fatty acid compositions: Palmitic, Stearic, Oleic, Linoleic, Linolenic, Eicosanoic and Eicosenoic. When values fell below the lower limit of the assay (denoted as \% ## Log the outcome step_log(potency, base = 10) \%>\% ## Remove sparse and unbalanced predictors step_nzv(all_predictors()) \%>\% ## Surface area predictors are highly correlated so ## conduct PCA just on these. step_pca(contains("VSA"), prefix = "surf_area_", threshold = .95) \%>\% ## Remove other highly correlated predictors step_corr(all_predictors(), -starts_with("surf_area_"), threshold = .90) \%>\% ## Center and scale all of the non-PCA predictors step_center(all_predictors(), -starts_with("surf_area_")) \%>\% step_scale(all_predictors(), -starts_with("surf_area_")) set.seed(888) cox2_lm <- train(cox2_recipe, data = cox2, method = "lm", trControl = trainControl(method = "cv")) ####################################### ## Parallel Processing Example via multicore package ## library(doMC) ## registerDoMC(2) ## NOTE: don't run models form RWeka when using ### multicore. The session will crash. ## The code for train() does not change: set.seed(1) usingMC <- train(medv ~ ., data = BostonHousing, method = "glmboost") ## or use: ## library(doMPI) or ## library(doParallel) or ## library(doSMP) and so on } } \references{ \url{http://topepo.github.io/caret/} Kuhn (2008), ``Building Predictive Models in R Using the caret'' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}) \url{https://topepo.github.io/recipes/} } \seealso{ \code{\link{models}}, \code{\link{trainControl}}, \code{\link{update.train}}, \code{\link{modelLookup}}, \code{\link{createFolds}}, \code{\link[recipes]{recipe}} } \author{ Max Kuhn (the guts of \code{train.formula} were based on Ripley's \code{nnet.formula}) } \keyword{models} caret/man/learing_curve_dat.Rd0000644000176200001440000000534213153613153016074 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/learning_curve.R \name{learing_curve_dat} \alias{learing_curve_dat} \title{Create Data to Plot a Learning Curve} \usage{ learing_curve_dat(dat, outcome = NULL, proportion = (1:10)/10, test_prop = 0, verbose = TRUE, ...) } \arguments{ \item{dat}{the training data} \item{outcome}{a character string identifying the outcome column name} \item{proportion}{the incremental proportions of the training set that are used to fit the model} \item{test_prop}{an optional proportion of the data to be used to measure performance.} \item{verbose}{a logical to print logs to the screen as models are fit} \item{\dots}{options to pass to \code{\link{train}} to specify the model. These should not include \code{x}, \code{y}, \code{formula}, or \code{data}.} } \value{ a data frame with columns for each performance metric calculated by \code{\link{train}} as well as columns: \item{Training_Size }{the number of data points used in the current model fit} \item{Data }{which data were used to calculate performance. Values are "Resampling", "Training", and (optionally) "Testing"} In the results, each data set size will have one row for the apparent error rate, one row for the test set results (if used) and as many rows as resamples (e.g. 10 rows if 10-fold CV is used). } \description{ For a given model, this function fits several versions on different sizes of the total training set and returns the results } \details{ This function creates a data set that can be used to plot how well the model performs over different sized versions of the training set. For each data set size, the performance metrics are determined and saved. If \code{test_prop == 0}, the apparent measure of performance (i.e. re-predicting the training set) and the resampled estimate of performance are available. Otherwise, the test set results are also added. If the model being fit has tuning parameters, the results are based on the optimal settings determined by \code{\link{train}}. } \examples{ \dontrun{ set.seed(1412) class_dat <- twoClassSim(1000) set.seed(29510) lda_data <- learing_curve_dat(dat = class_dat, outcome = "Class", test_prop = 1/4, ## `train` arguments: method = "lda", metric = "ROC", trControl = trainControl(classProbs = TRUE, summaryFunction = twoClassSummary)) ggplot(lda_data, aes(x = Training_Size, y = ROC, color = Data)) + geom_smooth(method = loess, span = .8) + theme_bw() } } \seealso{ \code{\link{train}} } \author{ Max Kuhn } \keyword{models} caret/man/safs_initial.Rd0000644000176200001440000001227113153613153015063 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/safs.R \docType{data} \name{safs_initial} \alias{safs_initial} \alias{safs_perturb} \alias{safs_prob} \alias{caretSA} \alias{rfSA} \alias{treebagSA} \alias{safs_perturb} \alias{safs_prob} \alias{caretSA} \alias{treebagSA} \alias{rfSA} \title{Ancillary simulated annealing functions} \format{An object of class \code{list} of length 8.} \usage{ safs_initial(vars, prob = 0.2, ...) safs_perturb(x, vars, number = floor(vars * 0.01) + 1) safs_prob(old, new, iteration = 1) caretSA treebagSA rfSA } \arguments{ \item{vars}{the total number of possible predictor variables} \item{prob}{The probability that an individual predictor is included in the initial predictor set} \item{\dots}{not currently used} \item{x}{the integer index vector for the current subset} \item{number}{the number of predictor variables to perturb} \item{old, new}{fitness values associated with the current and new subset} \item{iteration}{the number of iterations overall or the number of iterations since restart (if \code{improve} is used in \code{\link{safsControl}})} } \value{ The return value depends on the function. Note that the SA code encodes the subsets as a vector of integers that are included in the subset (which is different than the encoding used for GAs). The objects \code{caretSA}, \code{rfSA} and \code{treebagSA} are example lists that can be used with the \code{functions} argument of \code{\link{safsControl}}. In the case of \code{caretSA}, the \code{...} structure of \code{\link{safs}} passes through to the model fitting routine. As a consequence, the \code{\link{train}} function can easily be accessed by passing important arguments belonging to \code{\link{train}} to \code{\link{safs}}. See the examples below. By default, using \code{caretSA} will used the resampled performance estimates produced by \code{\link{train}} as the internal estimate of fitness. For \code{rfSA} and \code{treebagSA}, the \code{randomForest} and \code{bagging} functions are used directly (i.e. \code{\link{train}} is not used). Arguments to either of these functions can also be passed to them though the \code{\link{safs}} call (see examples below). For these two functions, the internal fitness is estimated using the out-of-bag estimates naturally produced by those functions. While faster, this limits the user to accuracy or Kappa (for classification) and RMSE and R-squared (for regression). } \description{ Built-in functions related to simulated annealing These functions are used with the \code{functions} argument of the \code{\link{safsControl}} function. More information on the details of these functions are at \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html}. The \code{initial} function is used to create the first predictor subset. The function \code{safs_initial} randomly selects 20\% of the predictors. Note that, instead of a function, \code{\link{safs}} can also accept a vector of column numbers as the initial subset. \code{safs_perturb} is an example of the operation that changes the subset configuration at the start of each new iteration. By default, it will change roughly 1\% of the variables in the current subset. The \code{prob} function defines the acceptance probability at each iteration, given the old and new fitness (i.e. energy values). It assumes that smaller values are better. The default probability function computed the percentage difference between the current and new fitness value and using an exponential function to compute a probability: \preformatted{ prob = exp[(current-new)/current*iteration] } } \examples{ selected_vars <- safs_initial(vars = 10 , prob = 0.2) selected_vars ### safs_perturb(selected_vars, vars = 10, number = 1) ### safs_prob(old = .8, new = .9, iteration = 1) safs_prob(old = .5, new = .6, iteration = 1) grid <- expand.grid(old = c(4, 3.5), new = c(4.5, 4, 3.5) + 1, iter = 1:40) grid <- subset(grid, old < new) grid$prob <- apply(grid, 1, function(x) safs_prob(new = x["new"], old= x["old"], iteration = x["iter"])) grid$Difference <- factor(grid$new - grid$old) grid$Group <- factor(paste("Current Value", grid$old)) ggplot(grid, aes(x = iter, y = prob, color = Difference)) + geom_line() + facet_wrap(~Group) + theme_bw() + ylab("Probability") + xlab("Iteration") \dontrun{ ### ## Hypothetical examples lda_sa <- safs(x = predictors, y = classes, safsControl = safsControl(functions = caretSA), ## now pass arguments to `train` method = "lda", metric = "Accuracy" trControl = trainControl(method = "cv", classProbs = TRUE)) rf_sa <- safs(x = predictors, y = classes, safsControl = safsControl(functions = rfSA), ## these are arguments to `randomForest` ntree = 1000, importance = TRUE) } } \references{ \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html} } \seealso{ \code{\link{safs}}, \code{\link{safsControl}} } \author{ Max Kuhn } \keyword{datasets} caret/man/postResample.Rd0000644000176200001440000001405613206641143015076 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aaa.R, R/postResample.R, R/prec_rec.R \name{defaultSummary} \alias{defaultSummary} \alias{postResample} \alias{defaultSummary} \alias{twoClassSummary} \alias{prSummary} \alias{getTrainPerf} \alias{mnLogLoss} \alias{R2} \alias{RMSE} \alias{multiClassSummary} \alias{MAE} \alias{twoClassSummary} \alias{mnLogLoss} \alias{multiClassSummary} \alias{prSummary} \title{Calculates performance across resamples} \usage{ defaultSummary(data, lev = NULL, model = NULL) postResample(pred, obs) twoClassSummary(data, lev = NULL, model = NULL) mnLogLoss(data, lev = NULL, model = NULL) multiClassSummary(data, lev = NULL, model = NULL) prSummary(data, lev = NULL, model = NULL) } \arguments{ \item{data}{a data frame with columns \code{obs} and \code{pred} for the observed and predicted outcomes. For metrics that rely on class probabilities, such as \code{twoClassSummary}, columns should also include predicted probabilities for each class. See the \code{classProbs} argument to \code{\link{trainControl}}.} \item{lev}{a character vector of factors levels for the response. In regression cases, this would be \code{NULL}.} \item{model}{a character string for the model name (as taken from the \code{method} argument of \code{\link{train}}.} \item{pred}{A vector of numeric data (could be a factor)} \item{obs}{A vector of numeric data (could be a factor)} } \value{ A vector of performance estimates. } \description{ Given two numeric vectors of data, the mean squared error and R-squared are calculated. For two factors, the overall agreement rate and Kappa are determined. } \details{ \code{postResample} is meant to be used with \code{apply} across a matrix. For numeric data the code checks to see if the standard deviation of either vector is zero. If so, the correlation between those samples is assigned a value of zero. \code{NA} values are ignored everywhere. Note that many models have more predictors (or parameters) than data points, so the typical mean squared error denominator (n - p) does not apply. Root mean squared error is calculated using \code{sqrt(mean((pred - obs)^2}. Also, \eqn{R^2} is calculated wither using as the square of the correlation between the observed and predicted outcomes when \code{form = "corr"}. when \code{form = "traditional"}, \deqn{ R^2 = 1-\frac{\sum (y_i - \hat{y}_i)^2}{\sum (y_i - \bar{y}_i)^2} }. Mean absolute error is calculated using \code{mean(abs(pred-obs))}. \code{defaultSummary} is the default function to compute performance metrics in \code{\link{train}}. It is a wrapper around \code{postResample}. The first argument is \code{data}, which is \code{data.frame} with columns named \code{obs} and \code{pred} for the observed and predicted outcome values (either numeric data for regression or character values for classification). The second argument is \code{lev}, a character string that has the outcome factor levels or NULL for a regression model. The third parameter is \code{model}, which can be used if a summary metric is specific to a model function. If other columns from the data are required to compute the summary statistics, but should not be used in the model, the \code{recipe} method for \code{\link{train}} can be used. \code{twoClassSummary} computes sensitivity, specificity and the area under the ROC curve. \code{mnLogLoss} computes the minus log-likelihood of the multinomial distribution (without the constant term): \deqn{ -logLoss = \frac{-1}{n}\sum_{i=1}^n \sum_{j=1}^C y_{ij} \log(p_{ij}) } where the \code{y} values are binary indicators for the classes and \code{p} are the predicted class probabilities. \code{prSummary} (for precision and recall) computes values for the default 0.50 probability cutoff as well as the area under the precision-recall curve across all cutoffs and is labelled as \code{"AUC"} in the output. If assumes that the first level of the factor variables corresponds to a relevant result but the \code{lev} argument can be used to change this. \code{multiClassSummary} computes some overall measures of for performance (e.g. overall accuracy and the Kappa statistic) and several averages of statistics calculated from "one-versus-all" configurations. For example, if there are three classes, three sets of sensitivity values are determined and the average is reported with the name ("Mean_Sensitivity"). The same is true for a number of statistics generated by \code{\link{confusionMatrix}}. With two classes, the basic sensitivity is reported with the name "Sensitivity". To use \code{twoClassSummary} and/or \code{mnLogLoss}, the \code{classProbs} argument of \code{\link{trainControl}} should be \code{TRUE}. \code{multiClassSummary} can be used without class probabilities but some statistics (e.g. overall log loss and the average of per-class area under the ROC curves) will not be in the result set. Other functions can be used via the \code{summaryFunction} argument of \code{\link{trainControl}}. Custom functions must have the same arguments as\code{defaultSummary}. The function \code{getTrainPerf} returns a one row data frame with the resampling results for the chosen model. The statistics will have the prefix "\code{Train}" (i.e. "\code{TrainROC}"). There is also a column called "\code{method}" that echoes the argument of the call to \code{\link{trainControl}} of the same name. } \examples{ predicted <- matrix(rnorm(50), ncol = 5) observed <- rnorm(10) apply(predicted, 2, postResample, obs = observed) classes <- c("class1", "class2") set.seed(1) dat <- data.frame(obs = factor(sample(classes, 50, replace = TRUE)), pred = factor(sample(classes, 50, replace = TRUE)), class1 = runif(50)) dat$class2 <- 1 - dat$class1 defaultSummary(dat, lev = classes) twoClassSummary(dat, lev = classes) prSummary(dat, lev = classes) mnLogLoss(dat, lev = classes) } \references{ Kvalseth. Cautionary note about \eqn{R^2}. American Statistician (1985) vol. 39 (4) pp. 279-285 } \seealso{ \code{\link{trainControl}} } \author{ Max Kuhn, Zachary Mayer } \keyword{utilities} caret/man/dotplot.diff.resamples.Rd0000644000176200001440000000364213153613153017006 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/resamples.R \name{dotplot.diff.resamples} \alias{dotplot.diff.resamples} \alias{levelplot.diff.resamples} \alias{densityplot.diff.resamples} \alias{bwplot.diff.resamples} \title{Lattice Functions for Visualizing Resampling Differences} \usage{ \method{dotplot}{diff.resamples}(x, data = NULL, metric = x$metric[1], ...) } \arguments{ \item{x}{an object generated by \code{\link{diff.resamples}}} \item{data}{Not used} \item{metric}{a character string for which metrics to plot. Note: \code{dotplot} and \code{levelplot} require exactly two models whereas the other methods can plot more than two.} \item{\dots}{further arguments to pass to either \code{\link[lattice:histogram]{densityplot}}, \code{\link[lattice:dotplot]{dotplot}} or \code{\link[lattice:levelplot]{levelplot}}} } \value{ a lattice object } \description{ Lattice functions for visualizing resampling result differences between models } \details{ \code{densityplot} and \code{bwplot} display univariate visualizations of the resampling distributions. \code{levelplot} displays the matrix of pair-wide comparisons. \code{dotplot} shows the differences along with their associated confidence intervals. } \examples{ \dontrun{ #load(url("http://topepo.github.io/caret/exampleModels.RData")) resamps <- resamples(list(CART = rpartFit, CondInfTree = ctreeFit, MARS = earthFit)) difs <- diff(resamps) dotplot(difs) densityplot(difs, metric = "RMSE", auto.key = TRUE, pch = "|") bwplot(difs, metric = "RMSE") levelplot(difs, what = "differences") } } \seealso{ \code{\link{resamples}}, \code{\link{diff.resamples}}, \code{\link[lattice:bwplot]{bwplot}}, \code{\link[lattice:histogram]{densityplot}}, \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:splom]{splom}} } \author{ Max Kuhn } \keyword{hplot} caret/man/knnreg.Rd0000644000176200001440000000513013173720702013677 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/knnreg.R \name{knnreg} \alias{knnreg} \alias{knnregTrain} \alias{knnreg.formula} \alias{knnreg.default} \alias{knnreg.matrix} \alias{knnreg.data.frame} \alias{knnreg.default} \alias{knnreg.formula} \alias{knnreg.matrix} \alias{knnreg.data.frame} \alias{print.knnreg} \alias{knnregTrain} \title{k-Nearest Neighbour Regression} \usage{ knnreg(x, ...) \method{knnreg}{default}(x, ...) \method{knnreg}{formula}(formula, data, subset, na.action, k = 5, ...) \method{knnreg}{matrix}(x, y, k = 5, ...) \method{knnreg}{data.frame}(x, y, k = 5, ...) \method{print}{knnreg}(x, ...) knnregTrain(train, test, y, k = 5, use.all = TRUE) } \arguments{ \item{x}{a matrix or data frame of training set predictors.} \item{...}{additional parameters to pass to \code{knnregTrain}.} \item{formula}{a formula of the form \code{lhs ~ rhs} where \code{lhs} is the response variable and \code{rhs} a set of predictors.} \item{data}{optional data frame containing the variables in the model formula.} \item{subset}{optional vector specifying a subset of observations to be used.} \item{na.action}{function which indicates what should happen when the data contain \code{NA}s.} \item{k}{number of neighbours considered.} \item{y}{a numeric vector of outcomes.} \item{train}{matrix or data frame of training set cases.} \item{test}{matrix or data frame of test set cases. A vector will be interpreted as a row vector for a single case.} \item{use.all}{controls handling of ties. If true, all distances equal to the \code{k}th largest are included. If false, a random selection of distances equal to the \code{k}th is chosen to use exactly \code{k} neighbours.} } \value{ An object of class \code{knnreg}. See \code{\link{predict.knnreg}}. } \description{ $k$-nearest neighbour regression that can return the average value for the neighbours. } \details{ \code{knnreg} is similar to \code{\link[ipred]{ipredknn}} and \code{knnregTrain} is a modification of \code{\link[class]{knn}}. The underlying C code from the \code{class} package has been modified to return average outcome. } \examples{ data(BloodBrain) inTrain <- createDataPartition(logBBB, p = .8)[[1]] trainX <- bbbDescr[inTrain,] trainY <- logBBB[inTrain] testX <- bbbDescr[-inTrain,] testY <- logBBB[-inTrain] fit <- knnreg(trainX, trainY, k = 3) plot(testY, predict(fit, testX)) } \author{ \code{\link[class]{knn}} by W. N. Venables and B. D. Ripley and \code{\link[ipred]{ipredknn}} by Torsten.Hothorn , modifications by Max Kuhn and Chris Keefer } \keyword{multivariate} caret/man/pottery.Rd0000644000176200001440000000105613153613153014123 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{pottery} \alias{pottery} \alias{potteryClass} \title{Pottery from Pre-Classical Sites in Italy} \source{ R. G. Brereton (2003). \emph{Chemometrics: Data Analysis for the Laboratory and Chemical Plant}, pg. 261. } \value{ \item{pottery}{11 elemental composition measurements } \item{potteryClass}{factor of pottery type: black carbon containing bulks (A) and clayey (B)} } \description{ Measurements of 58 pottery samples. } \keyword{datasets} caret/man/Sacramento.Rd0000644000176200001440000000214413153613153014510 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{Sacramento} \alias{Sacramento} \title{Sacramento CA Home Prices} \source{ SpatialKey website: \url{https://support.spatialkey.com/spatialkey-sample-csv-data} } \value{ \item{Sacramento}{a data frame with columns '\code{city}', '\code{zip}', '\code{beds}', '\code{baths}', '\code{sqft}', '\code{type}', '\code{price}', '\code{latitude}', and '\code{longitude}'} } \description{ This data frame contains house and sale price data for 932 homes in Sacramento CA. The original data were obtained from the website for the SpatialKey software. From their website: "The Sacramento real estate transactions file is a list of 985 real estate transactions in the Sacramento area reported over a five-day period, as reported by the Sacramento Bee." Google was used to fill in missing/incorrect data. } \examples{ data(Sacramento) set.seed(955) in_train <- createDataPartition(log10(Sacramento$price), p = .8, list = FALSE) training <- Sacramento[ in_train,] testing <- Sacramento[-in_train,] } \keyword{datasets} caret/man/featurePlot.Rd0000644000176200001440000000255113153613153014710 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/featurePlot.R \name{featurePlot} \alias{featurePlot} \title{Wrapper for Lattice Plotting of Predictor Variables} \usage{ featurePlot(x, y, plot = if (is.factor(y)) "strip" else "scatter", labels = c("Feature", ""), ...) } \arguments{ \item{x}{a matrix or data frame of continuous feature/probe/spectra data.} \item{y}{a factor indicating class membership.} \item{plot}{the type of plot. For classification: \code{box}, \code{strip}, \code{density}, \code{pairs} or \code{ellipse}. For regression, \code{pairs} or \code{scatter}} \item{labels}{a bad attempt at pre-defined axis labels} \item{\dots}{options passed to lattice calls.} } \value{ An object of class ``trellis''. The `update' method can be used to update components of the object and the `print' method (usually called by default) will plot it on an appropriate plotting device. } \description{ A shortcut to produce lattice graphs } \details{ This function ``stacks'' data to get it into a form compatible with lattice and creates the plots } \examples{ x <- matrix(rnorm(50*5),ncol=5) y <- factor(rep(c("A", "B"), 25)) trellis.par.set(theme = col.whitebg(), warn = FALSE) featurePlot(x, y, "ellipse") featurePlot(x, y, "strip", jitter = TRUE) featurePlot(x, y, "box") featurePlot(x, y, "pairs") } \author{ Max Kuhn } \keyword{hplot} caret/man/GermanCredit.Rd0000644000176200001440000000174313153613153014764 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{GermanCredit} \alias{GermanCredit} \title{German Credit Data} \source{ UCI Machine Learning Repository } \description{ Data from Dr. Hans Hofmann of the University of Hamburg. } \details{ These data have two classes for the credit worthiness: good or bad. There are predictors related to attributes, such as: checking account status, duration, credit history, purpose of the loan, amount of the loan, savings accounts or bonds, employment duration, Installment rate in percentage of disposable income, personal information, other debtors/guarantors, residence duration, property, age, other installment plans, housing, number of existing credits, job information, Number of people being liable to provide maintenance for, telephone, and foreign worker status. Many of these predictors are discrete and have been expanded into several 0/1 indicator variables } \keyword{datasets} caret/man/safs.Rd0000644000176200001440000001427013153613153013353 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/safs.R \name{safs} \alias{safs} \alias{safs.default} \alias{safs.default} \title{Simulated annealing feature selection} \usage{ safs(x, ...) \method{safs}{default}(x, y, iters = 10, differences = TRUE, safsControl = safsControl(), ...) } \arguments{ \item{x}{an object where samples are in rows and features are in columns. This could be a simple matrix, data frame or other type (e.g. sparse matrix). See Details below.} \item{\dots}{arguments passed to the classification or regression routine specified in the function \code{safsControl$functions$fit}} \item{y}{a numeric or factor vector containing the outcome for each sample.} \item{iters}{number of search iterations} \item{differences}{a logical: should the difference in fitness values with and without each predictor be calculated} \item{safsControl}{a list of values that define how this function acts. See \code{\link{safsControl}} and URL.} } \value{ an object of class \code{safs} } \description{ Supervised feature selection using simulated annealing \code{\link{safs}} conducts a supervised binary search of the predictor space using simulated annealing (SA). See Kirkpatrick et al (1983) for more information on this search algorithm. This function conducts the search of the feature space repeatedly within resampling iterations. First, the training data are split be whatever resampling method was specified in the control function. For example, if 10-fold cross-validation is selected, the entire simulated annealing search is conducted 10 separate times. For the first fold, nine tenths of the data are used in the search while the remaining tenth is used to estimate the external performance since these data points were not used in the search. During the search, a measure of fitness (i.e. SA energy value) is needed to guide the search. This is the internal measure of performance. During the search, the data that are available are the instances selected by the top-level resampling (e.g. the nine tenths mentioned above). A common approach is to conduct another resampling procedure. Another option is to use a holdout set of samples to determine the internal estimate of performance (see the holdout argument of the control function). While this is faster, it is more likely to cause overfitting of the features and should only be used when a large amount of training data are available. Yet another idea is to use a penalized metric (such as the AIC statistic) but this may not exist for some metrics (e.g. the area under the ROC curve). The internal estimates of performance will eventually overfit the subsets to the data. However, since the external estimate is not used by the search, it is able to make better assessments of overfitting. After resampling, this function determines the optimal number of iterations for the SA. Finally, the entire data set is used in the last execution of the simulated annealing algorithm search and the final model is built on the predictor subset that is associated with the optimal number of iterations determined by resampling (although the update function can be used to manually set the number of iterations). This is an example of the output produced when \code{safsControl(verbose = TRUE)} is used: \preformatted{ Fold03 1 0.401 (11) Fold03 2 0.401->0.410 (11+1, 91.7\%) * Fold03 3 0.410->0.396 (12+1, 92.3\%) 0.969 A Fold03 4 0.410->0.370 (12+2, 85.7\%) 0.881 Fold03 5 0.410->0.399 (12+2, 85.7\%) 0.954 A Fold03 6 0.410->0.399 (12+1, 78.6\%) 0.940 A Fold03 7 0.410->0.428 (12+2, 73.3\%) * } The text "Fold03" indicates that this search is for the third cross-validation fold. The initial subset of 11 predictors had a fitness value of 0.401. The next iteration added a single feature the the existing best subset of 11 (as indicated by "11+1") that increased the fitness value to 0.410. This new solution, which has a Jaccard similarity value of 91.7\% to the current best solution, is automatically accepted. The third iteration adds another feature to the current set of 12 but does not improve the fitness. The acceptance probability for this difference is shown to be 95.6\% and the "A" indicates that this new sub-optimal subset is accepted. The fourth iteration does not show an increase and is not accepted. Note that the Jaccard similarity value of 85.7\% is the similarity to the current best solution (from iteration 2) and the "12+2" indicates that there are two additional features added from the current best that contains 12 predictors. The search algorithm can be parallelized in several places: \enumerate{ \item each externally resampled SA can be run independently (controlled by the \code{allowParallel} option of \code{\link{safsControl}}) \item if inner resampling is used, these can be run in parallel (controls depend on the function used. See, for example, \code{\link[caret]{trainControl}}) \item any parallelization of the individual model fits. This is also specific to the modeling function. } It is probably best to pick one of these areas for parallelization and the first is likely to produces the largest decrease in run-time since it is the least likely to incur multiple re-starting of the worker processes. Keep in mind that if multiple levels of parallelization occur, this can effect the number of workers and the amount of memory required exponentially. } \examples{ \dontrun{ set.seed(1) train_data <- twoClassSim(100, noiseVars = 10) test_data <- twoClassSim(10, noiseVars = 10) ## A short example ctrl <- safsControl(functions = rfSA, method = "cv", number = 3) rf_search <- safs(x = train_data[, -ncol(train_data)], y = train_data$Class, iters = 3, safsControl = ctrl) rf_search } } \references{ \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html} \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html} Kuhn and Johnson (2013), Applied Predictive Modeling, Springer Kirkpatrick, S., Gelatt, C. D., and Vecchi, M. P. (1983). Optimization by simulated annealing. Science, 220(4598), 671. } \seealso{ \code{\link{safsControl}}, \code{\link{predict.safs}} } \author{ Max Kuhn } \keyword{models} caret/man/plotClassProbs.Rd0000644000176200001440000000437613153613153015377 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plotClassProbs.R \name{plotClassProbs} \alias{plotClassProbs} \title{Plot Predicted Probabilities in Classification Models} \usage{ plotClassProbs(object, plotType = "histogram", useObjects = FALSE, ...) } \arguments{ \item{object}{an object (preferably from the function \code{\link{extractProb}}. There should be columns for each level of the class factor and columns named \code{obs}, \code{pred}, \code{model} (e.g. "rpart", "nnet" etc), \code{dataType} (e.g. "Training", "Test" etc) and optionally \code{objects} (for giving names to objects with the same model type).} \item{plotType}{either "histogram" or "densityplot"} \item{useObjects}{a logical; should the object name (if any) be used as a conditioning variable?} \item{\dots}{parameters to pass to \code{\link[lattice]{histogram}} or \code{\link[lattice]{densityplot}}} } \value{ A lattice object. Note that the plot has to be printed to be displayed (especially in a loop). } \description{ This function takes an object (preferably from the function \code{\link{extractProb}}) and creates a lattice plot. } \details{ If the call to \code{\link{extractProb}} included test data, these data are shown, but if unknowns were also included, these are not plotted } \examples{ \dontrun{ data(mdrr) set.seed(90) inTrain <- createDataPartition(mdrrClass, p = .5)[[1]] trainData <- mdrrDescr[inTrain,1:20] testData <- mdrrDescr[-inTrain,1:20] trainY <- mdrrClass[inTrain] testY <- mdrrClass[-inTrain] ctrl <- trainControl(method = "cv") nbFit1 <- train(trainData, trainY, "nb", trControl = ctrl, tuneGrid = data.frame(usekernel = TRUE, fL = 0)) nbFit2 <- train(trainData, trainY, "nb", trControl = ctrl, tuneGrid = data.frame(usekernel = FALSE, fL = 0)) models <- list(para = nbFit2, nonpara = nbFit1) predProbs <- extractProb(models, testX = testData, testY = testY) plotClassProbs(predProbs, useObjects = TRUE) plotClassProbs(predProbs, subset = object == "para" & dataType == "Test") plotClassProbs(predProbs, useObjects = TRUE, plotType = "densityplot", auto.key = list(columns = 2)) } } \author{ Max Kuhn } \keyword{hplot} caret/man/lift.Rd0000644000176200001440000001356513153613153013363 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/lift.R \name{lift} \alias{lift} \alias{lift.formula} \alias{lift.default} \alias{xyplot.lift} \alias{lift.default} \alias{lift.formula} \alias{print.lift} \alias{xyplot.lift} \alias{ggplot.lift} \title{Lift Plot} \usage{ lift(x, ...) \method{lift}{default}(x, ...) \method{lift}{formula}(x, data = NULL, class = NULL, subset = TRUE, lattice.options = NULL, cuts = NULL, labels = NULL, ...) \method{print}{lift}(x, ...) \method{xyplot}{lift}(x, data = NULL, plot = "gain", values = NULL, ...) \method{ggplot}{lift}(data = NULL, mapping = NULL, plot = "gain", values = NULL, ..., environment = NULL) } \arguments{ \item{x}{a \code{lattice} formula (see \code{\link[lattice:xyplot]{xyplot}} for syntax) where the left-hand side of the formula is a factor class variable of the observed outcome and the right-hand side specifies one or model columns corresponding to a numeric ranking variable for a model (e.g. class probabilities). The classification variable should have two levels.} \item{\dots}{options to pass through to \code{\link[lattice:xyplot]{xyplot}} or the panel function (not used in \code{lift.formula}).} \item{data}{For \code{lift.formula}, a data frame (or more precisely, anything that is a valid \code{envir} argument in \code{eval}, e.g., a list or an environment) containing values for any variables in the formula, as well as \code{groups} and \code{subset} if applicable. If not found in \code{data}, or if \code{data} is unspecified, the variables are looked for in the environment of the formula. This argument is not used for \code{xyplot.lift} or \code{ggplot.lift}.} \item{class}{a character string for the class of interest} \item{subset}{An expression that evaluates to a logical or integer indexing vector. It is evaluated in \code{data}. Only the resulting rows of \code{data} are used for the plot.} \item{lattice.options}{A list that could be supplied to \code{\link[lattice:lattice.options]{lattice.options}}} \item{cuts}{If a single value is given, a sequence of values between 0 and 1 are created with length \code{cuts}. If a vector, these values are used as the cuts. If \code{NULL}, each unique value of the model prediction is used. This is helpful when the data set is large.} \item{labels}{A named list of labels for keys. The list should have an element for each term on the right-hand side of the formula and the names should match the names of the models.} \item{plot}{Either "gain" (the default) or "lift". The former plots the number of samples called events versus the event rate while the latter shows the event cut-off versus the lift statistic.} \item{values}{A vector of numbers between 0 and 100 specifying reference values for the percentage of samples found (i.e. the y-axis). Corresponding points on the x-axis are found via interpolation and line segments are shown to indicate how many samples must be tested before these percentages are found. The lines use either the \code{plot.line} or \code{superpose.line} component of the current lattice theme to draw the lines (depending on whether groups were used. These values are only used when \code{type = "gain"}.} \item{mapping, environment}{Not used (required for \code{ggplot} consistency).} } \value{ \code{lift.formula} returns a list with elements: \item{data}{the data used for plotting} \item{cuts}{the number of cuts} \item{class}{the event class} \item{probNames}{the names of the model probabilities} \item{pct}{the baseline event rate} \code{xyplot.lift} returns a \pkg{lattice} object } \description{ For classification models, this function creates a 'lift plot' that describes how well a model ranks samples for one class } \details{ \code{lift.formula} is used to process the data and \code{xyplot.lift} is used to create the plot. To construct data for the the lift and gain plots, the following steps are used for each model: \enumerate{ \item The data are ordered by the numeric model prediction used on the right-hand side of the model formula \item Each unique value of the score is treated as a cut point \item The number of samples with true results equal to \code{class} are determined \item The lift is calculated as the ratio of the percentage of samples in each split corresponding to \code{class} over the same percentage in the entire data set} \code{lift} with \code{plot = "gain"} produces a plot of the cumulative lift values by the percentage of samples evaluated while \code{plot = "lift"} shows the cut point value versus the lift statistic. This implementation uses the \pkg{lattice} function \code{\link[lattice:xyplot]{xyplot}}, so plot elements can be changed via panel functions, \code{\link[lattice:trellis.par.get]{trellis.par.set}} or other means. \code{lift} uses the panel function \code{\link{panel.lift2}} by default, but it can be changes using \code{\link[lattice:update.trellis]{update.trellis}} (see the examples in \code{\link{panel.lift2}}). The following elements are set by default in the plot but can be changed by passing new values into \code{xyplot.lift}: \code{xlab = "\% Samples Tested"}, \code{ylab = "\% Samples Found"}, \code{type = "S"}, \code{ylim = extendrange(c(0, 100))} and \code{xlim = extendrange(c(0, 100))}. } \examples{ set.seed(1) simulated <- data.frame(obs = factor(rep(letters[1:2], each = 100)), perfect = sort(runif(200), decreasing = TRUE), random = runif(200)) lift1 <- lift(obs ~ random, data = simulated) lift1 xyplot(lift1) lift2 <- lift(obs ~ random + perfect, data = simulated) lift2 xyplot(lift2, auto.key = list(columns = 2)) xyplot(lift2, auto.key = list(columns = 2), value = c(10, 30)) xyplot(lift2, plot = "lift", auto.key = list(columns = 2)) } \seealso{ \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:trellis.par.get]{trellis.par.set}} } \author{ Max Kuhn, some \pkg{lattice} code and documentation by Deepayan Sarkar } \keyword{hplot} caret/man/icr.formula.Rd0000644000176200001440000000473713153613153014647 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/icr.R \name{icr.formula} \alias{icr.formula} \alias{icr.default} \alias{icr} \alias{predict.icr} \alias{icr.default} \alias{predict.icr} \title{Independent Component Regression} \usage{ \method{icr}{formula}(formula, data, weights, ..., subset, na.action, contrasts = NULL) \method{icr}{default}(x, y, ...) \method{predict}{icr}(object, newdata, ...) } \arguments{ \item{formula}{A formula of the form \code{class ~ x1 + x2 + \dots{}}} \item{data}{Data frame from which variables specified in \code{formula} are preferentially to be taken.} \item{weights}{(case) weights for each example -- if missing defaults to 1.} \item{\dots}{arguments passed to \code{\link[fastICA]{fastICA}}} \item{subset}{An index vector specifying the cases to be used in the training sample. (NOTE: If given, this argument must be named.)} \item{na.action}{A function to specify the action to be taken if \code{NA}s are found. The default action is for the procedure to fail. An alternative is na.omit, which leads to rejection of cases with missing values on any required variable. (NOTE: If given, this argument must be named.)} \item{contrasts}{a list of contrasts to be used for some or all of the factors appearing as variables in the model formula.} \item{x}{matrix or data frame of \code{x} values for examples.} \item{y}{matrix or data frame of target values for examples.} \item{object}{an object of class \code{icr} as returned by \code{icr}.} \item{newdata}{matrix or data frame of test examples.} } \value{ For \code{icr}, a list with elements \item{model }{the results of \code{\link[stats]{lm}} after the ICA transformation} \item{ica }{pre-processing information} \item{n.comp }{number of ICA components} \item{names }{column names of the original data} } \description{ Fit a linear regression model using independent components } \details{ This produces a model analogous to Principal Components Regression (PCR) but uses Independent Component Analysis (ICA) to produce the scores. The user must specify a value of \code{n.comp} to pass to \code{\link[fastICA]{fastICA}}. The function \code{\link{preProcess}} to produce the ICA scores for the original data and for \code{newdata}. } \examples{ data(BloodBrain) icrFit <- icr(bbbDescr, logBBB, n.comp = 5) icrFit predict(icrFit, bbbDescr[1:5,]) } \seealso{ \code{\link[fastICA]{fastICA}}, \code{\link{preProcess}}, \code{\link[stats]{lm}} } \author{ Max Kuhn } \keyword{multivariate} caret/man/confusionMatrix.Rd0000644000176200001440000001406713153613153015613 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/confusionMatrix.R \name{confusionMatrix} \alias{confusionMatrix} \alias{confusionMatrix.table} \alias{confusionMatrix.default} \alias{confusionMatrix.default} \alias{confusionMatrix.table} \title{Create a confusion matrix} \usage{ confusionMatrix(data, ...) \method{confusionMatrix}{default}(data, reference, positive = NULL, dnn = c("Prediction", "Reference"), prevalence = NULL, mode = "sens_spec", ...) \method{confusionMatrix}{table}(data, positive = NULL, prevalence = NULL, mode = "sens_spec", ...) } \arguments{ \item{data}{a factor of predicted classes (for the default method) or an object of class \code{\link[base]{table}}.} \item{\dots}{options to be passed to \code{table}. NOTE: do not include \code{dnn} here} \item{reference}{a factor of classes to be used as the true results} \item{positive}{an optional character string for the factor level that corresponds to a "positive" result (if that makes sense for your data). If there are only two factor levels, the first level will be used as the "positive" result. When \code{mode = "prec_recall"}, \code{positive} is the same value used for \code{relevant} for functions \code{\link{precision}}, \code{\link{recall}}, and \code{\link{F_meas.table}}.} \item{dnn}{a character vector of dimnames for the table} \item{prevalence}{a numeric value or matrix for the rate of the "positive" class of the data. When \code{data} has two levels, \code{prevalence} should be a single numeric value. Otherwise, it should be a vector of numeric values with elements for each class. The vector should have names corresponding to the classes.} \item{mode}{a single character string either "sens_spec", "prec_recall", or "everything"} } \value{ a list with elements \item{table}{the results of \code{table} on \code{data} and \code{reference}} \item{positive}{the positive result level} \item{overall}{a numeric vector with overall accuracy and Kappa statistic values} \item{byClass}{the sensitivity, specificity, positive predictive value, negative predictive value, precision, recall, F1, prevalence, detection rate, detection prevalence and balanced accuracy for each class. For two class systems, this is calculated once using the \code{positive} argument} } \description{ Calculates a cross-tabulation of observed and predicted classes with associated statistics. } \details{ The functions requires that the factors have exactly the same levels. For two class problems, the sensitivity, specificity, positive predictive value and negative predictive value is calculated using the \code{positive} argument. Also, the prevalence of the "event" is computed from the data (unless passed in as an argument), the detection rate (the rate of true events also predicted to be events) and the detection prevalence (the prevalence of predicted events). Suppose a 2x2 table with notation \tabular{rcc}{ \tab Reference \tab \cr Predicted \tab Event \tab No Event \cr Event \tab A \tab B \cr No Event \tab C \tab D \cr } The formulas used here are: \deqn{Sensitivity = A/(A+C)} \deqn{Specificity = D/(B+D)} \deqn{Prevalence = (A+C)/(A+B+C+D)} \deqn{PPV = (sensitivity * prevalence)/((sensitivity*prevalence) + ((1-specificity)*(1-prevalence)))} \deqn{NPV = (specificity * (1-prevalence))/(((1-sensitivity)*prevalence) + ((specificity)*(1-prevalence)))} \deqn{Detection Rate = A/(A+B+C+D)} \deqn{Detection Prevalence = (A+B)/(A+B+C+D)} \deqn{Balanced Accuracy = (sensitivity+specificity)/2} \deqn{Precision = A/(A+B)} \deqn{Recall = A/(A+C)} \deqn{F1 = (1+beta^2)*precision*recall/((beta^2 * precision)+recall)} where \code{beta = 1} for this function. See the references for discussions of the first five formulas. For more than two classes, these results are calculated comparing each factor level to the remaining levels (i.e. a "one versus all" approach). The overall accuracy and unweighted Kappa statistic are calculated. A p-value from McNemar's test is also computed using \code{\link[stats]{mcnemar.test}} (which can produce \code{NA} values with sparse tables). The overall accuracy rate is computed along with a 95 percent confidence interval for this rate (using \code{\link[stats]{binom.test}}) and a one-sided test to see if the accuracy is better than the "no information rate," which is taken to be the largest class percentage in the data. } \note{ If the reference and data factors have the same levels, but in the incorrect order, the function will reorder them to the order of the data and issue a warning. } \examples{ ################### ## 2 class example lvs <- c("normal", "abnormal") truth <- factor(rep(lvs, times = c(86, 258)), levels = rev(lvs)) pred <- factor( c( rep(lvs, times = c(54, 32)), rep(lvs, times = c(27, 231))), levels = rev(lvs)) xtab <- table(pred, truth) confusionMatrix(xtab) confusionMatrix(pred, truth) confusionMatrix(xtab, prevalence = 0.25) ################### ## 3 class example confusionMatrix(iris$Species, sample(iris$Species)) newPrior <- c(.05, .8, .15) names(newPrior) <- levels(iris$Species) confusionMatrix(iris$Species, sample(iris$Species)) } \references{ Kuhn, M. (2008), ``Building predictive models in R using the caret package, '' \emph{Journal of Statistical Software}, (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}). Altman, D.G., Bland, J.M. (1994) ``Diagnostic tests 1: sensitivity and specificity,'' \emph{British Medical Journal}, vol 308, 1552. Altman, D.G., Bland, J.M. (1994) ``Diagnostic tests 2: predictive values,'' \emph{British Medical Journal}, vol 309, 102. Velez, D.R., et. al. (2008) ``A balanced accuracy function for epistasis modeling in imbalanced datasets using multifactor dimensionality reduction.,'' \emph{Genetic Epidemiology}, vol 4, 306. } \seealso{ \code{\link{as.table.confusionMatrix}}, \code{\link{as.matrix.confusionMatrix}}, \code{\link{sensitivity}}, \code{\link{specificity}}, \code{\link{posPredValue}}, \code{\link{negPredValue}}, \code{\link{print.confusionMatrix}}, \code{\link[stats]{binom.test}} } \author{ Max Kuhn } \keyword{utilities} caret/man/predictors.Rd0000644000176200001440000000266513153613153014602 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/predictors.R \name{predictors} \alias{predictors} \alias{predictors.formula} \alias{predictors.terms} \alias{predictors.train} \alias{predictors.default} \alias{predictors.list} \alias{predictors.rfe} \alias{predictors.sbf} \title{List predictors used in the model} \usage{ predictors(x, ...) } \arguments{ \item{x}{a model object, list or terms} \item{\dots}{not currently used} } \value{ a character string of predictors or \code{NA}. } \description{ This class uses a model fit to determine which predictors were used in the final model. } \details{ For \code{\link[randomForest]{randomForest}}, \code{\link[party]{cforest}}, \code{\link[party]{ctree}}, \code{\link[rpart]{rpart}}, \code{\link[ipred:bagging]{ipredbagg}}, \code{\link[ipred]{bagging}}, \code{\link[earth]{earth}}, \code{\link[mda]{fda}}, \code{\link[pamr]{pamr.train}}, \code{\link[superpc]{superpc.train}}, \code{\link{bagEarth}} and \code{\link{bagFDA}}, an attempt was made to report the predictors that were actually used in the final model. The \code{predictors} function can be called on the model object (as opposed to the \code{\link{train}}) object) and the package will try to find the appropriate coed (if it exists). In cases where the predictors cannot be determined, \code{NA} is returned. For example, \code{\link[nnet]{nnet}} may return missing values from \code{predictors}. } \keyword{models} caret/man/scat.Rd0000644000176200001440000000146013153613153013346 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{scat} \alias{scat} \alias{scat_orig} \title{Morphometric Data on Scat} \source{ Reid, R. E. B. (2015). A morphometric modeling approach to distinguishing among bobcat, coyote and gray fox scats. \emph{Wildlife Biology}, 21(5), 254-262 } \value{ \item{scat_orig}{the entire data set in the Supplemental Materials} \item{scat}{data on the three main species} } \description{ Reid (2105) collected data on animal feses in coastal California. The data consist of DNA verified species designations as well as fields related to the time and place of the collection and the scat itself. The data frame \code{scat_orig} contains while \code{scat} contains data on the three main species. } \keyword{datasets} caret/man/predict.train.Rd0000644000176200001440000001121213153613153015156 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/extractPrediction.R, R/extractProb.R, % R/predict.train.R \name{extractPrediction} \alias{extractPrediction} \alias{extractProb} \alias{predict.train} \alias{predict.list} \alias{extractPrediction} \alias{extractProb} \title{Extract predictions and class probabilities from train objects} \usage{ extractPrediction(models, testX = NULL, testY = NULL, unkX = NULL, unkOnly = !is.null(unkX) & is.null(testX), verbose = FALSE) extractProb(models, testX = NULL, testY = NULL, unkX = NULL, unkOnly = !is.null(unkX) & is.null(testX), verbose = FALSE) \method{predict}{train}(object, newdata = NULL, type = "raw", na.action = na.omit, ...) } \arguments{ \item{models}{a list of objects of the class \code{train}. The objects must have been generated with \code{fitBest = FALSE} and \code{returnData = TRUE}.} \item{testX}{an optional set of data to predict} \item{testY}{an optional outcome corresponding to the data given in \code{testX}} \item{unkX}{another optional set of data to predict without known outcomes} \item{unkOnly}{a logical to bypass training and test set predictions. This is useful if speed is needed for unknown samples.} \item{verbose}{a logical for printing messages} \item{object}{For \code{predict.train}, an object of class \code{\link{train}}. For \code{predict.list}, a list of objects of class \code{\link{train}}.} \item{newdata}{an optional set of data to predict on. If \code{NULL}, then the original training data are used} \item{type}{either "raw" or "prob", for the number/class predictions or class probabilities, respectively. Class probabilities are not available for all classification models} \item{na.action}{the method for handling missing data} \item{\dots}{only used for \code{sort} and \code{modelCor} and captures arguments to pass to \code{sort} or \code{FUN}.} } \value{ For \code{predict.train}, a vector of predictions if \code{type = "raw"} or a data frame of class probabilities for \code{type = "prob"}. In the latter case, there are columns for each class. For \code{predict.list}, a list results. Each element is produced by \code{predict.train}. For \code{extractPrediction}, a data frame with columns: \item{obs }{the observed training and test data} \item{pred }{predicted values} \item{model}{the type of model used to predict} \item{object}{the names of the objects within \code{models}. If \code{models} is an un-named list, the values of \code{object} will be "Object1", "Object2" and so on} \item{dataType }{"Training", "Test" or "Unknown" depending on what was specified} For \code{extractProb}, a data frame. There is a column for each class containing the probabilities. The remaining columns are the same as above (although the \code{pred} column is the predicted class) } \description{ These functions can be used for a single \code{train} object or to loop through a number of \code{train} objects to calculate the training and test data predictions and class probabilities. } \details{ These functions are wrappers for the specific prediction functions in each modeling package. In each case, the optimal tuning values given in the \code{tuneValue} slot of the \code{finalModel} object are used to predict. To get simple predictions for a new data set, the \code{predict} function can be used. Limits can be imposed on the range of predictions. See \code{\link{trainControl}} for more information. To get predictions for a series of models at once, a list of \code{\link{train}} objects can be passes to the \code{predict} function and a list of model predictions will be returned. The two extraction functions can be used to get the predictions and observed outcomes at once for the training, test and/or unknown samples at once in a single data frame (instead of a list of just the predictions). These objects can then be passes to \code{\link{plotObsVsPred}} or \code{\link{plotClassProbs}}. } \examples{ \dontrun{ knnFit <- train(Species ~ ., data = iris, method = "knn", trControl = trainControl(method = "cv")) rdaFit <- train(Species ~ ., data = iris, method = "rda", trControl = trainControl(method = "cv")) predict(knnFit) predict(knnFit, type = "prob") bothModels <- list(knn = knnFit, tree = rdaFit) predict(bothModels) extractPrediction(bothModels, testX = iris[1:10, -5]) extractProb(bothModels, testX = iris[1:10, -5]) } } \references{ Kuhn (2008), ``Building Predictive Models in R Using the caret'' (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}) } \seealso{ \code{\link{plotObsVsPred}}, \code{\link{plotClassProbs}}, \code{\link{trainControl}} } \author{ Max Kuhn } \keyword{manip} caret/man/confusionMatrix.train.Rd0000644000176200001440000000510213153613153016715 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/confusionMatrix.R \name{confusionMatrix.train} \alias{confusionMatrix.train} \alias{confusionMatrix.rfe} \alias{confusionMatrix.sbf} \title{Estimate a Resampled Confusion Matrix} \usage{ \method{confusionMatrix}{train}(data, norm = "overall", dnn = c("Prediction", "Reference"), ...) } \arguments{ \item{data}{An object of class \code{\link{train}}, \code{\link{rfe}}, \code{\link{sbf}} that did not use out-of-bag resampling or leave-one-out cross-validation.} \item{norm}{A character string indicating how the table entries should be normalized. Valid values are "none", "overall" or "average".} \item{dnn}{A character vector of dimnames for the table} \item{\dots}{not used here} } \value{ a list of class \code{confusionMatrix.train}, \code{confusionMatrix.rfe} or \code{confusionMatrix.sbf} with elements \item{table}{the normalized matrix} \item{norm}{an echo fo the call} \item{text}{a character string with details about the resampling procedure (e.g. "Bootstrapped (25 reps) Confusion Matrix"} } \description{ Using a \code{\link{train}}, \code{\link{rfe}}, \code{\link{sbf}} object, determine a confusion matrix based on the resampling procedure } \details{ When \code{\link{train}} is used for tuning a model, it tracks the confusion matrix cell entries for the hold-out samples. These can be aggregated and used for diagnostic purposes. For \code{\link{train}}, the matrix is estimated for the final model tuning parameters determined by \code{\link{train}}. For \code{\link{rfe}}, the matrix is associated with the optimal number of variables. There are several ways to show the table entries. Using \code{norm = "none"} will show the aggregated counts of samples on each of the cells (across all resamples). For \code{norm = "average"}, the average number of cell counts across resamples is computed (this can help evaluate how many holdout samples there were on average). The default is \code{norm = "overall"}, which is equivalento to \code{"average"} but in percentages. } \examples{ data(iris) TrainData <- iris[,1:4] TrainClasses <- iris[,5] knnFit <- train(TrainData, TrainClasses, method = "knn", preProcess = c("center", "scale"), tuneLength = 10, trControl = trainControl(method = "cv")) confusionMatrix(knnFit) confusionMatrix(knnFit, "average") confusionMatrix(knnFit, "none") } \seealso{ \code{\link{confusionMatrix}}, \code{\link{train}}, \code{\link{rfe}}, \code{\link{sbf}}, \code{\link{trainControl}} } \author{ Max Kuhn } \keyword{utilities} caret/man/bagFDA.Rd0000644000176200001440000000516013206657326013472 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/bagFDA.R \name{bagFDA} \alias{bagFDA} \alias{print.bagFDA} \alias{bagFDA.default} \alias{bagFDA.formula} \alias{bagFDA.default} \alias{bagFDA.formula} \alias{print.bagFDA} \title{Bagged FDA} \usage{ bagFDA(x, ...) \method{bagFDA}{default}(x, y, weights = NULL, B = 50, keepX = TRUE, ...) \method{bagFDA}{formula}(formula, data = NULL, B = 50, keepX = TRUE, ..., subset, weights = NULL, na.action = na.omit) \method{print}{bagFDA}(x, ...) } \arguments{ \item{x}{matrix or data frame of 'x' values for examples.} \item{\dots}{arguments passed to the \code{mars} function} \item{y}{matrix or data frame of numeric values outcomes.} \item{weights}{(case) weights for each example - if missing defaults to 1.} \item{B}{the number of bootstrap samples} \item{keepX}{a logical: should the original training data be kept?} \item{formula}{A formula of the form \code{y ~ x1 + x2 + ...}} \item{data}{Data frame from which variables specified in 'formula' are preferentially to be taken.} \item{subset}{An index vector specifying the cases to be used in the training sample. (NOTE: If given, this argument must be named.)} \item{na.action}{A function to specify the action to be taken if 'NA's are found. The default action is for the procedure to fail. An alternative is na.omit, which leads to rejection of cases with missing values on any required variable. (NOTE: If given, this argument must be named.)} } \value{ A list with elements \item{fit }{a list of \code{B} FDA fits} \item{B }{the number of bootstrap samples} \item{call }{the function call} \item{x }{either \code{NULL} or the value of \code{x}, depending on the value of \code{keepX}} \item{oob}{a matrix of performance estimates for each bootstrap sample} } \description{ A bagging wrapper for flexible discriminant analysis (FDA) using multivariate adaptive regression splines (MARS) basis functions } \details{ The function computes a FDA model for each bootstap sample. } \examples{ library(mlbench) library(earth) data(Glass) set.seed(36) inTrain <- sample(1:dim(Glass)[1], 150) trainData <- Glass[ inTrain, ] testData <- Glass[-inTrain, ] set.seed(3577) baggedFit <- bagFDA(Type ~ ., trainData) confusionMatrix(data = predict(baggedFit, testData[, -10]), reference = testData[, 10]) } \references{ J. Friedman, ``Multivariate Adaptive Regression Splines'' (with discussion) (1991). Annals of Statistics, 19/1, 1-141. } \seealso{ \code{\link[mda]{fda}}, \code{\link{predict.bagFDA}} } \author{ Max Kuhn (\code{bagFDA.formula} is based on Ripley's \code{nnet.formula}) } \keyword{regression} caret/man/format.bagEarth.Rd0000644000176200001440000000262413153613153015423 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/format.bagEarth.R \name{format.bagEarth} \alias{format.bagEarth} \title{Format 'bagEarth' objects} \usage{ \method{format}{bagEarth}(x, file = "", cat = TRUE, ...) } \arguments{ \item{x}{An \code{\link{bagEarth}} object. This is the only required argument.} \item{file}{A connection, or a character string naming the file to print to. If "" (the default), the output prints to the standard output connection. See \code{\link[base]{cat}}.} \item{cat}{a logical; should the equation be printed?} \item{\dots}{Arguments to \code{\link[earth]{format.earth}}.} } \value{ A character representation of the bagged earth object. } \description{ Return a string representing the \sQuote{bagEarth} expression. } \examples{ a <- bagEarth(Volume ~ ., data = trees, B= 3) format(a) # yields: # ( # 31.61075 # + 6.587273 * pmax(0, Girth - 14.2) # - 3.229363 * pmax(0, 14.2 - Girth) # - 0.3167140 * pmax(0, 79 - Height) # + # 22.80225 # + 5.309866 * pmax(0, Girth - 12) # - 2.378658 * pmax(0, 12 - Girth) # + 0.793045 * pmax(0, Height - 80) # - 0.3411915 * pmax(0, 80 - Height) # + # 31.39772 # + 6.18193 * pmax(0, Girth - 14.2) # - 3.660456 * pmax(0, 14.2 - Girth) # + 0.6489774 * pmax(0, Height - 80) # )/3 } \seealso{ \code{\link[earth]{earth}} } \keyword{models} caret/man/trainControl.Rd0000644000176200001440000002477313153613153015106 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/trainControl.R \name{trainControl} \alias{trainControl} \title{Control parameters for train} \usage{ trainControl(method = "boot", number = ifelse(grepl("cv", method), 10, 25), repeats = ifelse(grepl("[d_]cv$", method), 1, NA), p = 0.75, search = "grid", initialWindow = NULL, horizon = 1, fixedWindow = TRUE, skip = 0, verboseIter = FALSE, returnData = TRUE, returnResamp = "final", savePredictions = FALSE, classProbs = FALSE, summaryFunction = defaultSummary, selectionFunction = "best", preProcOptions = list(thresh = 0.95, ICAcomp = 3, k = 5, freqCut = 95/5, uniqueCut = 10, cutoff = 0.9), sampling = NULL, index = NULL, indexOut = NULL, indexFinal = NULL, timingSamps = 0, predictionBounds = rep(FALSE, 2), seeds = NA, adaptive = list(min = 5, alpha = 0.05, method = "gls", complete = TRUE), trim = FALSE, allowParallel = TRUE) } \arguments{ \item{method}{The resampling method: \code{"boot"}, \code{"boot632"}, \code{"optimism_boot"}, \code{"boot_all"}, \code{"cv"}, \code{"repeatedcv"}, \code{"LOOCV"}, \code{"LGOCV"} (for repeated training/test splits), \code{"none"} (only fits one model to the entire training set), \code{"oob"} (only for random forest, bagged trees, bagged earth, bagged flexible discriminant analysis, or conditional tree forest models), \code{timeslice}, \code{"adaptive_cv"}, \code{"adaptive_boot"} or \code{"adaptive_LGOCV"}} \item{number}{Either the number of folds or number of resampling iterations} \item{repeats}{For repeated k-fold cross-validation only: the number of complete sets of folds to compute} \item{p}{For leave-group out cross-validation: the training percentage} \item{search}{Either \code{"grid"} or \code{"random"}, describing how the tuning parameter grid is determined. See details below.} \item{initialWindow, horizon, fixedWindow, skip}{possible arguments to \code{\link{createTimeSlices}} when method is \code{timeslice}.} \item{verboseIter}{A logical for printing a training log.} \item{returnData}{A logical for saving the data} \item{returnResamp}{A character string indicating how much of the resampled summary metrics should be saved. Values can be \code{"final"}, \code{"all"} or \code{"none"}} \item{savePredictions}{an indicator of how much of the hold-out predictions for each resample should be saved. Values can be either \code{"all"}, \code{"final"}, or \code{"none"}. A logical value can also be used that convert to \code{"all"} (for true) or \code{"none"} (for false). \code{"final"} saves the predictions for the optimal tuning parameters.} \item{classProbs}{a logical; should class probabilities be computed for classification models (along with predicted values) in each resample?} \item{summaryFunction}{a function to compute performance metrics across resamples. The arguments to the function should be the same as those in \code{\link{defaultSummary}}. Note that it \code{method = "oob"} is used, this option is ignored and a warning is issued.} \item{selectionFunction}{the function used to select the optimal tuning parameter. This can be a name of the function or the function itself. See \code{\link{best}} for details and other options.} \item{preProcOptions}{A list of options to pass to \code{\link{preProcess}}. The type of pre-processing (e.g. center, scaling etc) is passed in via the \code{preProc} option in \code{\link{train}}.} \item{sampling}{a single character value describing the type of additional sampling that is conducted after resampling (usually to resolve class imbalances). Values are \code{"none"}, \code{"down"}, \code{"up"}, \code{"smote"}, or \code{"rose"}. The latter two values require the \pkg{DMwR} and \pkg{ROSE} packages, respectively. This argument can also be a list to facilitate custom sampling and these details can be found on the \pkg{caret} package website for sampling (link below).} \item{index}{a list with elements for each resampling iteration. Each list element is a vector of integers corresponding to the rows used for training at that iteration.} \item{indexOut}{a list (the same length as \code{index}) that dictates which data are held-out for each resample (as integers). If \code{NULL}, then the unique set of samples not contained in \code{index} is used.} \item{indexFinal}{an optional vector of integers indicating which samples are used to fit the final model after resampling. If \code{NULL}, then entire data set is used.} \item{timingSamps}{the number of training set samples that will be used to measure the time for predicting samples (zero indicates that the prediction time should not be estimated.} \item{predictionBounds}{a logical or numeric vector of length 2 (regression only). If logical, the predictions can be constrained to be within the limit of the training set outcomes. For example, a value of \code{c(TRUE, FALSE)} would only constrain the lower end of predictions. If numeric, specific bounds can be used. For example, if \code{c(10, NA)}, values below 10 would be predicted as 10 (with no constraint in the upper side).} \item{seeds}{an optional set of integers that will be used to set the seed at each resampling iteration. This is useful when the models are run in parallel. A value of \code{NA} will stop the seed from being set within the worker processes while a value of \code{NULL} will set the seeds using a random set of integers. Alternatively, a list can be used. The list should have \code{B+1} elements where \code{B} is the number of resamples, unless \code{method} is \code{"boot632"} in which case \code{B} is the number of resamples plus 1. The first \code{B} elements of the list should be vectors of integers of length \code{M} where \code{M} is the number of models being evaluated. The last element of the list only needs to be a single integer (for the final model). See the Examples section below and the Details section.} \item{adaptive}{a list used when \code{method} is \code{"adaptive_cv"}, \code{"adaptive_boot"} or \code{"adaptive_LGOCV"}. See Details below.} \item{trim}{a logical. If \code{TRUE} the final model in \code{object\$finalModel} may have some components of the object removed so reduce the size of the saved object. The \code{predict} method will still work, but some other features of the model may not work. \code{trim}ing will occur only for models where this feature has been implemented.} \item{allowParallel}{if a parallel backend is loaded and available, should the function use it?} } \value{ An echo of the parameters specified } \description{ Control the computational nuances of the \code{\link{train}} function } \details{ When setting the seeds manually, the number of models being evaluated is required. This may not be obvious as \code{train} does some optimizations for certain models. For example, when tuning over PLS model, the only model that is fit is the one with the largest number of components. So if the model is being tuned over \code{comp in 1:10}, the only model fit is \code{ncomp = 10}. However, if the vector of integers used in the \code{seeds} arguments is longer than actually needed, no error is thrown. Using \code{method = "none"} and specifying more than one model in \code{\link{train}}'s \code{tuneGrid} or \code{tuneLength} arguments will result in an error. Using adaptive resampling when \code{method} is either \code{"adaptive_cv"}, \code{"adaptive_boot"} or \code{"adaptive_LGOCV"}, the full set of resamples is not run for each model. As resampling continues, a futility analysis is conducted and models with a low probability of being optimal are removed. These features are experimental. See Kuhn (2014) for more details. The options for this procedure are: \itemize{ \item \code{min}: the minimum number of resamples used before models are removed \item \code{alpha}: the confidence level of the one-sided intervals used to measure futility \item \code{method}: either generalized least squares (\code{method = "gls"}) or a Bradley-Terry model (\code{method = "BT"}) \item \code{complete}: if a single parameter value is found before the end of resampling, should the full set of resamples be computed for that parameter. ) } The option \code{search = "grid"} uses the default grid search routine. When \code{search = "random"}, a random search procedure is used (Bergstra and Bengio, 2012). See \url{http://topepo.github.io/caret/random-hyperparameter-search.html} for details and an example. The supported bootstrap methods are: \itemize{ \item \code{"boot"}: the usual bootstrap. \item \code{"boot632"}: the 0.632 bootstrap estimator (Efron, 1983). \item \code{"optimism_boot"}: the optimism bootstrap estimator. (Efron and Tibshirani, 1994). \item \code{"boot_all"}: all of the above (for efficiency, but "boot" will be used for calculations). } The \code{"boot632"} method should not to be confused with the 0.632+ estimator proposed later by the same author. Note that if \code{index} or \code{indexOut} are specified, the label shown by \code{train} may not be accurate since these arguments supersede the \code{method} argument. } \examples{ \dontrun{ ## Do 5 repeats of 10-Fold CV for the iris data. We will fit ## a KNN model that evaluates 12 values of k and set the seed ## at each iteration. set.seed(123) seeds <- vector(mode = "list", length = 51) for(i in 1:50) seeds[[i]] <- sample.int(1000, 22) ## For the last model: seeds[[51]] <- sample.int(1000, 1) ctrl <- trainControl(method = "repeatedcv", repeats = 5, seeds = seeds) set.seed(1) mod <- train(Species ~ ., data = iris, method = "knn", tuneLength = 12, trControl = ctrl) ctrl2 <- trainControl(method = "adaptive_cv", repeats = 5, verboseIter = TRUE, seeds = seeds) set.seed(1) mod2 <- train(Species ~ ., data = iris, method = "knn", tuneLength = 12, trControl = ctrl2) } } \references{ Efron (1983). ``Estimating the error rate of a prediction rule: improvement on cross-validation''. Journal of the American Statistical Association, 78(382):316-331 Efron, B., & Tibshirani, R. J. (1994). ``An introduction to the bootstrap'', pages 249-252. CRC press. Bergstra and Bengio (2012), ``Random Search for Hyper-Parameter Optimization'', Journal of Machine Learning Research, 13(Feb):281-305 Kuhn (2014), ``Futility Analysis in the Cross-Validation of Machine Learning Models'' \url{http://arxiv.org/abs/1405.6974}, Package website for subsampling: \url{https://topepo.github.io/caret/subsampling-for-class-imbalances.html} } \author{ Max Kuhn } \keyword{utilities} caret/man/caretFuncs.Rd0000644000176200001440000001006413153613153014511 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/rfe.R \docType{data} \name{pickSizeBest} \alias{pickSizeBest} \alias{pickSizeTolerance} \alias{pickVars} \alias{caretFuncs} \alias{lmFuncs} \alias{rfFuncs} \alias{gamFuncs} \alias{treebagFuncs} \alias{ldaFuncs} \alias{nbFuncs} \alias{lrFuncs} \alias{pickSizeBest} \alias{pickSizeTolerance} \alias{pickVars} \alias{ldaFuncs} \alias{treebagFuncs} \alias{gamFuncs} \alias{rfFuncs} \alias{lmFuncs} \alias{nbFuncs} \alias{lrFuncs} \title{Backwards Feature Selection Helper Functions} \format{An object of class \code{list} of length 6.} \usage{ pickSizeBest(x, metric, maximize) pickSizeTolerance(x, metric, tol = 1.5, maximize) pickVars(y, size) caretFuncs ldaFuncs treebagFuncs gamFuncs rfFuncs lmFuncs nbFuncs lrFuncs } \arguments{ \item{x}{a matrix or data frame with the performance metric of interest} \item{metric}{a character string with the name of the performance metric that should be used to choose the appropriate number of variables} \item{maximize}{a logical; should the metric be maximized?} \item{tol}{a scalar to denote the acceptable difference in optimal performance (see Details below)} \item{y}{a list of data frames with variables \code{Overall} and \code{var}} \item{size}{an integer for the number of variables to retain} } \description{ Ancillary functions for backwards selection } \details{ This page describes the functions that are used in backwards selection (aka recursive feature elimination). The functions described here are passed to the algorithm via the \code{functions} argument of \code{\link{rfeControl}}. See \code{\link{rfeControl}} for details on how these functions should be defined. The 'pick' functions are used to find the appropriate subset size for different situations. \code{pickBest} will find the position associated with the numerically best value (see the \code{maximize} argument to help define this). \code{pickSizeTolerance} picks the lowest position (i.e. the smallest subset size) that has no more of an X percent loss in performances. When maximizing, it calculates (O-X)/O*100, where X is the set of performance values and O is max(X). This is the percent loss. When X is to be minimized, it uses (X-O)/O*100 (so that values greater than X have a positive "loss"). The function finds the smallest subset size that has a percent loss less than \code{tol}. Both of the 'pick' functions assume that the data are sorted from smallest subset size to largest. } \examples{ ## For picking subset sizes: ## Minimize the RMSE example <- data.frame(RMSE = c(1.2, 1.1, 1.05, 1.01, 1.01, 1.03, 1.00), Variables = 1:7) ## Percent Loss in performance (positive) example$PctLoss <- (example$RMSE - min(example$RMSE))/min(example$RMSE)*100 xyplot(RMSE ~ Variables, data= example) xyplot(PctLoss ~ Variables, data= example) absoluteBest <- pickSizeBest(example, metric = "RMSE", maximize = FALSE) within5Pct <- pickSizeTolerance(example, metric = "RMSE", maximize = FALSE) cat("numerically optimal:", example$RMSE[absoluteBest], "RMSE in position", absoluteBest, "\\n") cat("Accepting a 1.5 pct loss:", example$RMSE[within5Pct], "RMSE in position", within5Pct, "\\n") ## Example where we would like to maximize example2 <- data.frame(Rsquared = c(0.4, 0.6, 0.94, 0.95, 0.95, 0.95, 0.95), Variables = 1:7) ## Percent Loss in performance (positive) example2$PctLoss <- (max(example2$Rsquared) - example2$Rsquared)/max(example2$Rsquared)*100 xyplot(Rsquared ~ Variables, data= example2) xyplot(PctLoss ~ Variables, data= example2) absoluteBest2 <- pickSizeBest(example2, metric = "Rsquared", maximize = TRUE) within5Pct2 <- pickSizeTolerance(example2, metric = "Rsquared", maximize = TRUE) cat("numerically optimal:", example2$Rsquared[absoluteBest2], "R^2 in position", absoluteBest2, "\\n") cat("Accepting a 1.5 pct loss:", example2$Rsquared[within5Pct2], "R^2 in position", within5Pct2, "\\n") } \seealso{ \code{\link{rfeControl}}, \code{\link{rfe}} } \author{ Max Kuhn } \keyword{datasets} \keyword{models} caret/man/findCorrelation.Rd0000644000176200001440000000557213153613153015546 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/findCorrelation.R \name{findCorrelation} \alias{findCorrelation} \title{Determine highly correlated variables} \usage{ findCorrelation(x, cutoff = 0.9, verbose = FALSE, names = FALSE, exact = ncol(x) < 100) } \arguments{ \item{x}{A correlation matrix} \item{cutoff}{A numeric value for the pair-wise absolute correlation cutoff} \item{verbose}{A boolean for printing the details} \item{names}{a logical; should the column names be returned (\code{TRUE}) or the column index (\code{FALSE})?} \item{exact}{a logical; should the average correlations be recomputed at each step? See Details below.} } \value{ A vector of indices denoting the columns to remove (when \code{names = TRUE}) otherwise a vector of column names. If no correlations meet the criteria, \code{integer(0)} is returned. } \description{ This function searches through a correlation matrix and returns a vector of integers corresponding to columns to remove to reduce pair-wise correlations. } \details{ The absolute values of pair-wise correlations are considered. If two variables have a high correlation, the function looks at the mean absolute correlation of each variable and removes the variable with the largest mean absolute correlation. Using \code{exact = TRUE} will cause the function to re-evaluate the average correlations at each step while \code{exact = FALSE} uses all the correlations regardless of whether they have been eliminated or not. The exact calculations will remove a smaller number of predictors but can be much slower when the problem dimensions are "big". There are several function in the \pkg{subselect} package (\code{\link[subselect:eleaps]{leaps}}, \code{\link[subselect:genetic]{genetic}}, \code{\link[subselect:anneal]{anneal}}) that can also be used to accomplish the same goal but tend to retain more predictors. } \examples{ R1 <- structure(c(1, 0.86, 0.56, 0.32, 0.85, 0.86, 1, 0.01, 0.74, 0.32, 0.56, 0.01, 1, 0.65, 0.91, 0.32, 0.74, 0.65, 1, 0.36, 0.85, 0.32, 0.91, 0.36, 1), .Dim = c(5L, 5L)) colnames(R1) <- rownames(R1) <- paste0("x", 1:ncol(R1)) R1 findCorrelation(R1, cutoff = .6, exact = FALSE) findCorrelation(R1, cutoff = .6, exact = TRUE) findCorrelation(R1, cutoff = .6, exact = TRUE, names = FALSE) R2 <- diag(rep(1, 5)) R2[2, 3] <- R2[3, 2] <- .7 R2[5, 3] <- R2[3, 5] <- -.7 R2[4, 1] <- R2[1, 4] <- -.67 corrDF <- expand.grid(row = 1:5, col = 1:5) corrDF$correlation <- as.vector(R2) levelplot(correlation ~ row + col, corrDF) findCorrelation(R2, cutoff = .65, verbose = TRUE) findCorrelation(R2, cutoff = .99, verbose = TRUE) } \seealso{ \code{\link[subselect:eleaps]{leaps}}, \code{\link[subselect:genetic]{genetic}}, \code{\link[subselect:anneal]{anneal}}, \code{\link{findLinearCombos}} } \author{ Original R code by Dong Li, modified by Max Kuhn } \keyword{manip} caret/man/recall.Rd0000644000176200001440000001121113153613153013651 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/prec_rec.R \name{recall} \alias{recall} \alias{recall.default} \alias{recall.table} \alias{precision} \alias{precision.default} \alias{precision.table} \alias{precision.matrix} \alias{F_meas} \alias{F_meas.default} \alias{F_meas.table} \alias{recall.table} \alias{recall.default} \alias{precision} \alias{precision.default} \alias{precision.table} \alias{F_meas} \alias{F_meas.default} \alias{F_meas.table} \title{Calculate recall, precision and F values} \usage{ recall(data, ...) \method{recall}{table}(data, relevant = rownames(data)[1], ...) \method{recall}{default}(data, reference, relevant = levels(reference)[1], na.rm = TRUE, ...) precision(data, ...) \method{precision}{default}(data, reference, relevant = levels(reference)[1], na.rm = TRUE, ...) \method{precision}{table}(data, relevant = rownames(data)[1], ...) F_meas(data, ...) \method{F_meas}{default}(data, reference, relevant = levels(reference)[1], beta = 1, na.rm = TRUE, ...) \method{F_meas}{table}(data, relevant = rownames(data)[1], beta = 1, ...) } \arguments{ \item{data}{for the default functions, a factor containing the discrete measurements. For the \code{table} function, a table.} \item{...}{not currently used} \item{relevant}{a character string that defines the factor level corresponding to the "relevant" results} \item{reference}{a factor containing the reference values (i.e. truth)} \item{na.rm}{a logical value indicating whether \code{NA} values should be stripped before the computation proceeds} \item{beta}{a numeric value used to weight precision and recall. A value of 1 is traditionally used and corresponds to the harmonic mean of the two values but other values weight recall beta times more important than precision.} } \value{ A number between 0 and 1 (or NA). } \description{ These functions calculate the recall, precision or F values of a measurement system for finding/retrieving relevant documents compared to reference results (the truth regarding relevance). The measurement and "truth" data must have the same two possible outcomes and one of the outcomes must be thought of as a "relevant" results. } \details{ The recall (aka specificity) is defined as the proportion of relevant results out of the number of samples which were actually relevant. When there are no relevant results, recall is not defined and a value of \code{NA} is returned. The precision is percentage of predicted truly relevant results of the total number of predicted relevant results and characterizes the "purity in retrieval performance" (Buckland and Gey, 1994) The measure "F" is a combination of precision and recall (see below). Suppose a 2x2 table with notation \tabular{rcc}{ \tab Reference \tab \cr Predicted \tab relevant \tab Irrelevant \cr relevant \tab A \tab B \cr Irrelevant \tab C \tab D \cr } The formulas used here are: \deqn{recall = A/(A+C)} \deqn{precision = A/(A+B)} \deqn{F_i = (1+i^2)*prec*recall/((i^2 * precision)+recall)} See the references for discussions of the statistics. } \examples{ ################### ## Data in Table 2 of Powers (2007) lvs <- c("Relevant", "Irrelevant") tbl_2_1_pred <- factor(rep(lvs, times = c(42, 58)), levels = lvs) tbl_2_1_truth <- factor(c(rep(lvs, times = c(30, 12)), rep(lvs, times = c(30, 28))), levels = lvs) tbl_2_1 <- table(tbl_2_1_pred, tbl_2_1_truth) precision(tbl_2_1) precision(data = tbl_2_1_pred, reference = tbl_2_1_truth, relevant = "Relevant") recall(tbl_2_1) recall(data = tbl_2_1_pred, reference = tbl_2_1_truth, relevant = "Relevant") tbl_2_2_pred <- factor(rep(lvs, times = c(76, 24)), levels = lvs) tbl_2_2_truth <- factor(c(rep(lvs, times = c(56, 20)), rep(lvs, times = c(12, 12))), levels = lvs) tbl_2_2 <- table(tbl_2_2_pred, tbl_2_2_truth) precision(tbl_2_2) precision(data = tbl_2_2_pred, reference = tbl_2_2_truth, relevant = "Relevant") recall(tbl_2_2) recall(data = tbl_2_2_pred, reference = tbl_2_2_truth, relevant = "Relevant") } \references{ Kuhn, M. (2008), ``Building predictive models in R using the caret package, '' \emph{Journal of Statistical Software}, (\url{http://www.jstatsoft.org/article/view/v028i05/v28i05.pdf}). Buckland, M., & Gey, F. (1994). The relationship between Recall and Precision. \emph{Journal of the American Society for Information Science}, 45(1), 12-19. Powers, D. (2007). Evaluation: From Precision, Recall and F Factor to ROC, Informedness, Markedness and Correlation. Technical Report SIE-07-001, Flinders University } \seealso{ \code{\link{confusionMatrix}} } \author{ Max Kuhn } \keyword{manip} caret/man/downSample.Rd0000644000176200001440000000256413153613153014533 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/sampling.R \name{downSample} \alias{downSample} \alias{upSample} \title{Down- and Up-Sampling Imbalanced Data} \usage{ downSample(x, y, list = FALSE, yname = "Class") } \arguments{ \item{x}{a matrix or data frame of predictor variables} \item{y}{a factor variable with the class memberships} \item{list}{should the function return \code{list(x, y)} or bind \code{x} and \code{y} together? If \code{TRUE}, the output will be coerced to a data frame.} \item{yname}{if \code{list = FALSE}, a label for the class column} } \value{ Either a data frame or a list with elements \code{x} and \code{y}. } \description{ \code{downSample} will randomly sample a data set so that all classes have the same frequency as the minority class. \code{upSample} samples with replacement to make the class distributions equal } \details{ Simple random sampling is used to down-sample for the majority class(es). Note that the minority class data are left intact and that the samples will be re-ordered in the down-sampled version. For up-sampling, all the original data are left intact and additional samples are added to the minority classes with replacement. } \examples{ ## A ridiculous example... data(oil) table(oilType) downSample(fattyAcids, oilType) upSample(fattyAcids, oilType) } \author{ Max Kuhn } \keyword{utilities} caret/man/update.safs.Rd0000644000176200001440000000332513153613153014633 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/safs.R \name{update.safs} \alias{update.safs} \alias{update.gafs} \title{Update or Re-fit a SA or GA Model} \usage{ \method{update}{safs}(object, iter, x, y, ...) } \arguments{ \item{object}{An object produced by \code{\link{gafs}} or \code{\link{safs}}} \item{iter}{a single numeric integer} \item{x, y}{the original training data used in the call to \code{\link{gafs}} or \code{\link{safs}}} \item{\dots}{not currently used} } \value{ an object of class \code{\link{gafs}} or \code{\link{safs}} } \description{ \code{update} allows a user to over-ride the search iteration selection process. Based on the results of plotting a \code{\link{gafs}} or \code{\link{safs}} object, these functions can be used to supersede the number of iterations determined analytically from the resamples. Any values of \code{...} originally passed to \code{\link{gafs}} or \code{\link{safs}} are automatically passed on to the updated model (i.e. they do not need to be supplied again to \code{update}. } \examples{ \dontrun{ set.seed(1) train_data <- twoClassSim(100, noiseVars = 10) test_data <- twoClassSim(10, noiseVars = 10) ## A short example ctrl <- safsControl(functions = rfSA, method = "cv", number = 3) rf_search <- safs(x = train_data[, -ncol(train_data)], y = train_data$Class, iters = 3, safsControl = ctrl) rf_search2 <- update(rf_search, iter = 1, x = train_data[, -ncol(train_data)], y = train_data$Class) rf_search2 } } \seealso{ \code{\link{gafs}}, \code{\link{safs}} } \author{ Max Kuhn } \keyword{models} caret/man/resampleHist.Rd0000644000176200001440000000261613153613153015060 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/resampleHist.R \name{resampleHist} \alias{resampleHist} \title{Plot the resampling distribution of the model statistics} \usage{ resampleHist(object, type = "density", ...) } \arguments{ \item{object}{an object resulting form a call to \code{\link{train}}} \item{type}{a character string. Either "hist" or "density"} \item{\dots}{options to pass to histogram or densityplot} } \value{ a object of class \code{trellis} } \description{ Create a lattice histogram or densityplot from the resampled outcomes from a \code{train} object. } \details{ All the metrics from the object are plotted, but only for the final model. For more comprehensive plots functions, see \code{\link{histogram.train}}, \code{\link{densityplot.train}}, \code{\link{xyplot.train}}, \code{\link{stripplot.train}}. For the plot to be made, the \code{returnResamp} argument in \code{\link{trainControl}} should be either "final" or "all". } \examples{ \dontrun{ data(iris) TrainData <- iris[,1:4] TrainClasses <- iris[,5] knnFit <- train(TrainData, TrainClasses, "knn") resampleHist(knnFit) } } \seealso{ \code{\link{train}}, \code{\link[lattice]{histogram}}, \code{\link[lattice:histogram]{densityplot}}, \code{\link{histogram.train}}, \code{\link{densityplot.train}}, \code{\link{xyplot.train}}, \code{\link{stripplot.train}} } \author{ Max Kuhn } \keyword{hplot} caret/man/BloodBrain.Rd0000644000176200001440000000203513153613153014426 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{BloodBrain} \alias{BloodBrain} \alias{bbbDescr} \alias{logBBB} \title{Blood Brain Barrier Data} \source{ Mente, S.R. and Lombardo, F. (2005). A recursive-partitioning model for blood-brain barrier permeation, \emph{Journal of Computer-Aided Molecular Design}, Vol. 19, pg. 465-481. } \value{ \item{bbbDescr}{data frame of chemical descriptors} \item{logBBB}{vector of assay results} } \description{ Mente and Lombardo (2005) develop models to predict the log of the ratio of the concentration of a compound in the brain and the concentration in blood. For each compound, they computed three sets of molecular descriptors: MOE 2D, rule-of-five and Charge Polar Surface Area (CPSA). In all, 134 descriptors were calculated. Included in this package are 208 non-proprietary literature compounds. The vector \code{logBBB} contains the concentration ratio and the data fame \code{bbbDescr} contains the descriptor values. } \keyword{datasets} caret/man/print.confusionMatrix.Rd0000644000176200001440000000154513153613153016743 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/confusionMatrix.R \name{print.confusionMatrix} \alias{print.confusionMatrix} \title{Print method for confusionMatrix} \usage{ \method{print}{confusionMatrix}(x, mode = x$mode, digits = max(3, getOption("digits") - 3), printStats = TRUE, ...) } \arguments{ \item{x}{an object of class \code{confusionMatrix}} \item{mode}{a single character string either "sens_spec", "prec_recall", or "everything"} \item{digits}{number of significant digits when printed} \item{printStats}{a logical: if \code{TRUE} then table statistics are also printed} \item{\dots}{optional arguments to pass to \code{print.table}} } \value{ \code{x} is invisibly returned } \description{ a print method for \code{confusionMatrix} } \seealso{ \code{\link{confusionMatrix}} } \author{ Max Kuhn } \keyword{utilities} caret/man/cars.Rd0000644000176200001440000000165513153613153013352 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{cars} \alias{cars} \title{Kelly Blue Book resale data for 2005 model year GM cars} \source{ Kuiper, S. (2008). Introduction to Multiple Regression: How Much Is Your Car Worth?, \emph{Journal of Statistics Education}, Vol. 16 \url{www.amstat.org/publications/jse/v16n3/datasets.kuiper.html}. } \value{ \item{cars}{data frame of the suggested retail price (column \code{Price}) and various characteristics of each car (columns \code{Mileage}, \code{Cylinder}, \code{Doors}, \code{Cruise}, \code{Sound}, \code{Leather}, \code{Buick}, \code{Cadillac}, \code{Chevy}, \code{Pontiac}, \code{Saab}, \code{Saturn}, \code{convertible}, \code{coupe}, \code{hatchback}, \code{sedan} and \code{wagon})} } \description{ Kuiper (2008) collected data on Kelly Blue Book resale data for 804 GM cars (2005 model year). } \keyword{datasets} caret/man/caretSBF.Rd0000644000176200001440000000334313153613153014047 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/selectByFilter.R \docType{data} \name{caretSBF} \alias{caretSBF} \alias{lmSBF} \alias{rfSBF} \alias{treebagSBF} \alias{ldaSBF} \alias{nbSBF} \alias{gamScores} \alias{anovaScores} \alias{anovaScores} \alias{gamScores} \title{Selection By Filtering (SBF) Helper Functions} \format{An object of class \code{list} of length 5.} \usage{ caretSBF anovaScores(x, y) gamScores(x, y) } \arguments{ \item{x}{a matrix or data frame of numeric predictors} \item{y}{a numeric or factor vector of outcomes} } \description{ Ancillary functions for univariate feature selection } \details{ More details on these functions can be found at \url{http://topepo.github.io/caret/feature-selection-using-univariate-filters.html}. This page documents the functions that are used in selection by filtering (SBF). The functions described here are passed to the algorithm via the \code{functions} argument of \code{\link{sbfControl}}. See \code{\link{sbfControl}} for details on how these functions should be defined. \code{anovaScores} and \code{gamScores} are two examples of univariate filtering functions. \code{anovaScores} fits a simple linear model between a single feature and the outcome, then the p-value for the whole model F-test is returned. \code{gamScores} fits a generalized additive model between a single predictor and the outcome using a smoothing spline basis function. A p-value is generated using the whole model test from \code{\link[gam]{summary.gam}} and is returned. If a particular model fails for \code{lm} or \code{gam}, a p-value of 1 is returned. } \seealso{ \code{\link{sbfControl}}, \code{\link{sbf}}, \code{\link[gam]{summary.gam}} } \author{ Max Kuhn } \keyword{models} caret/man/varImp.gafs.Rd0000644000176200001440000000333713153613153014576 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/gafs.R \name{varImp.gafs} \alias{varImp.gafs} \alias{varImp.safs} \title{Variable importances for GAs and SAs} \usage{ \method{varImp}{gafs}(object, metric = object$control$metric["external"], maximize = object$control$maximize["external"], ...) } \arguments{ \item{object}{an \code{\link{safs}} or \code{\link{gafs}} object} \item{metric}{a metric to compute importance (see Details below)} \item{maximize}{are larger values of the metric better?} \item{\dots}{not currently uses} } \value{ a data frame where the rownames are the predictor names and the column is the average t-statistic } \description{ Variable importance scores for \code{\link{safs}} and \code{\link{gafs}} objects. } \details{ A crude measure of importance is computed for thee two search procedures. At the end of a search process, the difference in the fitness values is computed for models with and without each feature (based on the search history). If a predictor has at least two subsets that include and did not include the predictor, a t-statistic is computed (otherwise a value of \code{NA} is assigned to the predictor). This computation is done separately for each resample and the t-statistics are averaged (\code{NA} values are ignored) and this average is reported as the importance. If the fitness value should be minimized, the negative value of the t-statistic is used in the average. As such, the importance score reflects the standardized increase in fitness that occurs when the predict is included in the subset. Values near zero (or negative) indicate that the predictor may not be important to the model. } \seealso{ \code{\link{safs}}, \code{\link{gafs}} } \author{ Max Kuhn } caret/man/mdrr.Rd0000644000176200001440000000333413153613153013362 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{mdrr} \alias{mdrr} \alias{mdrrClass} \alias{mdrrDescr} \title{Multidrug Resistance Reversal (MDRR) Agent Data} \source{ Svetnik, V., Liaw, A., Tong, C., Culberson, J. C., Sheridan, R. P. Feuston, B. P (2003). Random Forest: A Classification and Regression Tool for Compound Classification and QSAR Modeling, \emph{Journal of Chemical Information and Computer Sciences}, Vol. 43, pg. 1947-1958. } \value{ \item{mdrrDescr}{the descriptors} \item{mdrrClass}{the categorical outcome ("Active" or "Inactive")} } \description{ Svetnik et al. (2003) describe these data: "Bakken and Jurs studied a set of compounds originally discussed by Klopman et al., who were interested in multidrug resistance reversal (MDRR) agents. The original response variable is a ratio measuring the ability of a compound to reverse a leukemia cell's resistance to adriamycin. However, the problem was treated as a classification problem, and compounds with the ratio >4.2 were considered active, and those with the ratio <= 2.0 were considered inactive. Compounds with the ratio between these two cutoffs were called moderate and removed from the data for twoclass classification, leaving a set of 528 compounds (298 actives and 230 inactives). (Various other arrangements of these data were examined by Bakken and Jurs, but we will focus on this particular one.) We did not have access to the original descriptors, but we generated a set of 342 descriptors of three different types that should be similar to the original descriptors, using the DRAGON software." } \details{ The data and R code are in the Supplemental Data file for the article. } \keyword{datasets} caret/man/safsControl.Rd0000644000176200001440000001726713153613153014725 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/gafs.R, R/safs.R \name{gafsControl} \alias{gafsControl} \alias{safsControl} \alias{gafsControl} \title{Control parameters for GA and SA feature selection} \usage{ gafsControl(functions = NULL, method = "repeatedcv", metric = NULL, maximize = NULL, number = ifelse(grepl("cv", method), 10, 25), repeats = ifelse(grepl("cv", method), 1, 5), verbose = FALSE, returnResamp = "final", p = 0.75, index = NULL, indexOut = NULL, seeds = NULL, holdout = 0, genParallel = FALSE, allowParallel = TRUE) safsControl(functions = NULL, method = "repeatedcv", metric = NULL, maximize = NULL, number = ifelse(grepl("cv", method), 10, 25), repeats = ifelse(grepl("cv", method), 1, 5), verbose = FALSE, returnResamp = "final", p = 0.75, index = NULL, indexOut = NULL, seeds = NULL, holdout = 0, improve = Inf, allowParallel = TRUE) } \arguments{ \item{functions}{a list of functions for model fitting, prediction etc (see Details below)} \item{method}{The resampling method: \code{boot}, \code{boot632}, \code{cv}, \code{repeatedcv}, \code{LOOCV}, \code{LGOCV} (for repeated training/test splits)} \item{metric}{a two-element string that specifies what summary metric will be used to select the optimal number of iterations from the external fitness value and which metric should guide subset selection. If specified, this vector should have names \code{"internal"} and \code{"external"}. See \code{\link{gafs}} and/or \code{\link{safs}} for explanations of the difference.} \item{maximize}{a two-element logical: should the metrics be maximized or minimized? Like the \code{metric} argument, this this vector should have names \code{"internal"} and \code{"external"}.} \item{number}{Either the number of folds or number of resampling iterations} \item{repeats}{For repeated k-fold cross-validation only: the number of complete sets of folds to compute} \item{verbose}{a logical for printing results} \item{returnResamp}{A character string indicating how much of the resampled summary metrics should be saved. Values can be ``all'' or ``none''} \item{p}{For leave-group out cross-validation: the training percentage} \item{index}{a list with elements for each resampling iteration. Each list element is the sample rows used for training at that iteration.} \item{indexOut}{a list (the same length as \code{index}) that dictates which sample are held-out for each resample. If \code{NULL}, then the unique set of samples not contained in \code{index} is used.} \item{seeds}{a vector or integers that can be used to set the seed during each search. The number of seeds must be equal to the number of resamples plus one.} \item{holdout}{the proportion of data in [0, 1) to be held-back from \code{x} and \code{y} to calculate the internal fitness values} \item{genParallel}{if a parallel backend is loaded and available, should \code{\link{gafs}} use it tp parallelize the fitness calculations within a generation within a resample?} \item{allowParallel}{if a parallel backend is loaded and available, should the function use it?} \item{improve}{the number of iterations without improvement before \code{\link{safs}} reverts back to the previous optimal subset} } \value{ An echo of the parameters specified } \description{ Control the computational nuances of the \code{\link{gafs}} and \code{\link{safs}} functions Many of these options are the same as those described for \code{\link[caret]{trainControl}}. More extensive documentation and examples can be found on the \pkg{caret} website at \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html#syntax} and \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html#syntax}. The \code{functions} component contains the information about how the model should be fit and summarized. It also contains the elements needed for the GA and SA modules (e.g. cross-over, etc). The elements of \code{functions} that are the same for GAs and SAs are: \itemize{ \item \code{fit}, with arguments \code{x}, \code{y}, \code{lev}, \code{last}, and \code{...}, is used to fit the classification or regression model \item \code{pred}, with arguments \code{object} and \code{x}, predicts new samples \item \code{fitness_intern}, with arguments \code{object}, \code{x}, \code{y}, \code{maximize}, and \code{p}, summarizes performance for the internal estimates of fitness \item \code{fitness_extern}, with arguments \code{data}, \code{lev}, and \code{model}, summarizes performance using the externally held-out samples \item \code{selectIter}, with arguments \code{x}, \code{metric}, and \code{maximize}, determines the best search iteration for feature selection. } The elements of \code{functions} specific to genetic algorithms are: \itemize{ \item \code{initial}, with arguments \code{vars}, \code{popSize} and \code{...}, creates an initial population. \item \code{selection}, with arguments \code{population}, \code{fitness}, \code{r}, \code{q}, and \code{...}, conducts selection of individuals. \item \code{crossover}, with arguments \code{population}, \code{fitness}, \code{parents} and \code{...}, control genetic reproduction. \item \code{mutation}, with arguments \code{population}, \code{parent} and \code{...}, adds mutations. } The elements of \code{functions} specific to simulated annealing are: \itemize{ \item \code{initial}, with arguments \code{vars}, \code{prob}, and \code{...}, creates the initial subset. \item \code{perturb}, with arguments \code{x}, \code{vars}, and \code{number}, makes incremental changes to the subsets. \item \code{prob}, with arguments \code{old}, \code{new}, and \code{iteration}, computes the acceptance probabilities } The pages \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html} and \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html} have more details about each of these functions. \code{holdout} can be used to hold out samples for computing the internal fitness value. Note that this is independent of the external resampling step. Suppose 10-fold CV is being used. Within a resampling iteration, \code{holdout} can be used to sample an additional proportion of the 90\% resampled data to use for estimating fitness. This may not be a good idea unless you have a very large training set and want to avoid an internal resampling procedure to estimate fitness. The search algorithms can be parallelized in several places: \enumerate{ \item each externally resampled GA or SA can be run independently (controlled by the \code{allowParallel} options) \item within a GA, the fitness calculations at a particular generation can be run in parallel over the current set of individuals (see the \code{genParallel}) \item if inner resampling is used, these can be run in parallel (controls depend on the function used. See, for example, \code{\link[caret]{trainControl}}) \item any parallelization of the individual model fits. This is also specific to the modeling function. } It is probably best to pick one of these areas for parallelization and the first is likely to produces the largest decrease in run-time since it is the least likely to incur multiple re-starting of the worker processes. Keep in mind that if multiple levels of parallelization occur, this can effect the number of workers and the amount of memory required exponentially. } \references{ \url{http://topepo.github.io/caret/feature-selection-using-genetic-algorithms.html}, \url{http://topepo.github.io/caret/feature-selection-using-simulated-annealing.html} } \seealso{ \code{\link{safs}}, \code{\link{safs}}, , \code{\link{caretGA}}, \code{\link{rfGA}}, \code{\link{treebagGA}}, \code{\link{caretSA}}, \code{\link{rfSA}}, \code{\link{treebagSA}} } \author{ Max Kuhn } \keyword{utilities} caret/man/segmentationData.Rd0000644000176200001440000000315213153613153015703 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{segmentationData} \alias{segmentationData} \title{Cell Body Segmentation} \source{ Hill, LaPan, Li and Haney (2007). Impact of image segmentation on high-content screening data quality for SK-BR-3 cells, \emph{BMC Bioinformatics}, Vol. 8, pg. 340, \url{http://www.biomedcentral.com/1471-2105/8/340}. } \value{ \item{segmentationData}{data frame of cells} } \description{ Hill, LaPan, Li and Haney (2007) develop models to predict which cells in a high content screen were well segmented. The data consists of 119 imaging measurements on 2019. The original analysis used 1009 for training and 1010 as a test set (see the column called \code{Case}). } \details{ The outcome class is contained in a factor variable called \code{Class} with levels "PS" for poorly segmented and "WS" for well segmented. The raw data used in the paper can be found at the Biomedcentral website. Versions of caret < 4.98 contained the original data. The version now contained in \code{segmentationData} is modified. First, several discrete versions of some of the predictors (with the suffix "Status") were removed. Second, there are several skewed predictors with minimum values of zero (that would benefit from some transformation, such as the log). A constant value of 1 was added to these fields: \code{AvgIntenCh2}, \code{FiberAlign2Ch3}, \code{FiberAlign2Ch4}, \code{SpotFiberCountCh4} and \code{TotalIntenCh2}. A binary version of the original data is at \url{http://topepo.github.io/caret/segmentationOriginal.RData}. } \keyword{datasets} caret/man/rfeControl.Rd0000644000176200001440000001627613153613153014544 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/rfe.R \name{rfeControl} \alias{rfeControl} \title{Controlling the Feature Selection Algorithms} \usage{ rfeControl(functions = NULL, rerank = FALSE, method = "boot", saveDetails = FALSE, number = ifelse(method \%in\% c("cv", "repeatedcv"), 10, 25), repeats = ifelse(method \%in\% c("cv", "repeatedcv"), 1, number), verbose = FALSE, returnResamp = "final", p = 0.75, index = NULL, indexOut = NULL, timingSamps = 0, seeds = NA, allowParallel = TRUE) } \arguments{ \item{functions}{a list of functions for model fitting, prediction and variable importance (see Details below)} \item{rerank}{a logical: should variable importance be re-calculated each time features are removed?} \item{method}{The external resampling method: \code{boot}, \code{cv}, \code{LOOCV} or \code{LGOCV} (for repeated training/test splits} \item{saveDetails}{a logical to save the predictions and variable importances from the selection process} \item{number}{Either the number of folds or number of resampling iterations} \item{repeats}{For repeated k-fold cross-validation only: the number of complete sets of folds to compute} \item{verbose}{a logical to print a log for each external resampling iteration} \item{returnResamp}{A character string indicating how much of the resampled summary metrics should be saved. Values can be ``final'', ``all'' or ``none''} \item{p}{For leave-group out cross-validation: the training percentage} \item{index}{a list with elements for each external resampling iteration. Each list element is the sample rows used for training at that iteration.} \item{indexOut}{a list (the same length as \code{index}) that dictates which sample are held-out for each resample. If \code{NULL}, then the unique set of samples not contained in \code{index} is used.} \item{timingSamps}{the number of training set samples that will be used to measure the time for predicting samples (zero indicates that the prediction time should not be estimated).} \item{seeds}{an optional set of integers that will be used to set the seed at each resampling iteration. This is useful when the models are run in parallel. A value of \code{NA} will stop the seed from being set within the worker processes while a value of \code{NULL} will set the seeds using a random set of integers. Alternatively, a list can be used. The list should have \code{B+1} elements where \code{B} is the number of resamples. The first \code{B} elements of the list should be vectors of integers of length \code{P} where \code{P} is the number of subsets being evaluated (including the full set). The last element of the list only needs to be a single integer (for the final model). See the Examples section below.} \item{allowParallel}{if a parallel backend is loaded and available, should the function use it?} } \value{ A list } \description{ This function generates a control object that can be used to specify the details of the feature selection algorithms used in this package. } \details{ More details on this function can be found at \url{http://topepo.github.io/caret/recursive-feature-elimination.html#rfe}. Backwards selection requires function to be specified for some operations. The \code{fit} function builds the model based on the current data set. The arguments for the function must be: \itemize{ \item\code{x} the current training set of predictor data with the appropriate subset of variables \item\code{y} the current outcome data (either a numeric or factor vector) \item\code{first} a single logical value for whether the current predictor set has all possible variables \item\code{last} similar to \code{first}, but \code{TRUE} when the last model is fit with the final subset size and predictors. \item\code{...}optional arguments to pass to the fit function in the call to \code{rfe} } The function should return a model object that can be used to generate predictions. The \code{pred} function returns a vector of predictions (numeric or factors) from the current model. The arguments are: \itemize{ \item\code{object} the model generated by the \code{fit} function \item\code{x} the current set of predictor set for the held-back samples } The \code{rank} function is used to return the predictors in the order of the most important to the least important. Inputs are: \itemize{ \item\code{object} the model generated by the \code{fit} function \item\code{x} the current set of predictor set for the training samples \item\code{y} the current training outcomes } The function should return a data frame with a column called \code{var} that has the current variable names. The first row should be the most important predictor etc. Other columns can be included in the output and will be returned in the final \code{rfe} object. The \code{selectSize} function determines the optimal number of predictors based on the resampling output. Inputs for the function are: \itemize{ \item\code{x}a matrix with columns for the performance metrics and the number of variables, called "\code{Variables}" \item\code{metric}a character string of the performance measure to optimize (e.g. "RMSE", "Rsquared", "Accuracy" or "Kappa") \item\code{maximize}a single logical for whether the metric should be maximized } This function should return an integer corresponding to the optimal subset size. \pkg{caret} comes with two examples functions for this purpose: \code{\link{pickSizeBest}} and \code{\link{pickSizeTolerance}}. After the optimal subset size is determined, the \code{selectVar} function will be used to calculate the best rankings for each variable across all the resampling iterations. Inputs for the function are: \itemize{ \item\code{y} a list of variables importance for each resampling iteration and each subset size (generated by the user--defined \code{rank} function). In the example, each each of the cross--validation groups the output of the \code{rank} function is saved for each of the subset sizes (including the original subset). If the rankings are not recomputed at each iteration, the values will be the same within each cross-validation iteration. \item\code{size} the integer returned by the \code{selectSize} function } This function should return a character string of predictor names (of length \code{size}) in the order of most important to least important Examples of these functions are included in the package: \code{\link{lmFuncs}}, \code{\link{rfFuncs}}, \code{\link{treebagFuncs}} and \code{\link{nbFuncs}}. Model details about these functions, including examples, are at \url{http://topepo.github.io/caret/recursive-feature-elimination.html}. . } \examples{ \dontrun{ subsetSizes <- c(2, 4, 6, 8) set.seed(123) seeds <- vector(mode = "list", length = 51) for(i in 1:50) seeds[[i]] <- sample.int(1000, length(subsetSizes) + 1) seeds[[51]] <- sample.int(1000, 1) set.seed(1) rfMod <- rfe(bbbDescr, logBBB, sizes = subsetSizes, rfeControl = rfeControl(functions = rfFuncs, seeds = seeds, number = 50)) } } \seealso{ \code{\link{rfe}}, \code{\link{lmFuncs}}, \code{\link{rfFuncs}}, \code{\link{treebagFuncs}}, \code{\link{nbFuncs}}, \code{\link{pickSizeBest}}, \code{\link{pickSizeTolerance}} } \author{ Max Kuhn } \keyword{utilities} caret/man/dummyVars.Rd0000644000176200001440000001473713153613153014416 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/dummyVar.R \name{dummyVars} \alias{dummyVars} \alias{dummyVars.default} \alias{predict.dummyVars} \alias{contr.dummy} \alias{contr.ltfr} \alias{class2ind} \alias{dummyVars.default} \alias{print.dummyVars} \alias{predict.dummyVars} \alias{contr.ltfr} \alias{class2ind} \title{Create A Full Set of Dummy Variables} \usage{ dummyVars(formula, ...) \method{dummyVars}{default}(formula, data, sep = ".", levelsOnly = FALSE, fullRank = FALSE, ...) \method{print}{dummyVars}(x, ...) \method{predict}{dummyVars}(object, newdata, na.action = na.pass, ...) contr.ltfr(n, contrasts = TRUE, sparse = FALSE) class2ind(x, drop2nd = FALSE) } \arguments{ \item{formula}{An appropriate R model formula, see References} \item{...}{additional arguments to be passed to other methods} \item{data}{A data frame with the predictors of interest} \item{sep}{An optional separator between factor variable names and their levels. Use \code{sep = NULL} for no separator (i.e. normal behavior of \code{\link[stats]{model.matrix}} as shown in the Details section)} \item{levelsOnly}{A logical; \code{TRUE} means to completely remove the variable names from the column names} \item{fullRank}{A logical; should a full rank or less than full rank parameterization be used? If \code{TRUE}, factors are encoded to be consistent with \code{\link[stats]{model.matrix}} and the resulting there are no linear dependencies induced between the columns.} \item{x}{A factor vector.} \item{object}{An object of class \code{dummyVars}} \item{newdata}{A data frame with the required columns} \item{na.action}{A function determining what should be done with missing values in \code{newdata}. The default is to predict \code{NA}.} \item{n}{A vector of levels for a factor, or the number of levels.} \item{contrasts}{A logical indicating whether contrasts should be computed.} \item{sparse}{A logical indicating if the result should be sparse.} \item{drop2nd}{A logical: if the factor has two levels, should a single binary vector be returned?} } \value{ The output of \code{dummyVars} is a list of class 'dummyVars' with elements \item{call }{the function call} \item{form }{the model formula} \item{vars }{names of all the variables in the model} \item{facVars }{names of all the factor variables in the model} \item{lvls }{levels of any factor variables} \item{sep }{\code{NULL} or a character separator} \item{terms }{the \code{\link[stats]{terms.formula}} object} \item{levelsOnly }{a logical} The \code{predict} function produces a data frame. \code{class2ind} returns a matrix (or a vector if \code{drop2nd = TRUE}). \code{contr.ltfr} generates a design matrix. } \description{ \code{dummyVars} creates a full set of dummy variables (i.e. less than full rank parameterization) } \details{ Most of the \code{\link[stats]{contrasts}} functions in R produce full rank parameterizations of the predictor data. For example, \code{\link[stats]{contr.treatment}} creates a reference cell in the data and defines dummy variables for all factor levels except those in the reference cell. For example, if a factor with 5 levels is used in a model formula alone, \code{\link[stats]{contr.treatment}} creates columns for the intercept and all the factor levels except the first level of the factor. For the data in the Example section below, this would produce: \preformatted{ (Intercept) dayTue dayWed dayThu dayFri daySat daySun 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 1 0 0} In some situations, there may be a need for dummy variables for all the levels of the factor. For the same example: \preformatted{ dayMon dayTue dayWed dayThu dayFri daySat daySun 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0} Given a formula and initial data set, the class \code{dummyVars} gathers all the information needed to produce a full set of dummy variables for any data set. It uses \code{contr.ltfr} as the base function to do this. \code{class2ind} is most useful for converting a factor outcome vector to a matrix (or vector) of dummy variables. } \examples{ when <- data.frame(time = c("afternoon", "night", "afternoon", "morning", "morning", "morning", "morning", "afternoon", "afternoon"), day = c("Mon", "Mon", "Mon", "Wed", "Wed", "Fri", "Sat", "Sat", "Fri")) levels(when$time) <- list(morning="morning", afternoon="afternoon", night="night") levels(when$day) <- list(Mon="Mon", Tue="Tue", Wed="Wed", Thu="Thu", Fri="Fri", Sat="Sat", Sun="Sun") ## Default behavior: model.matrix(~day, when) mainEffects <- dummyVars(~ day + time, data = when) mainEffects predict(mainEffects, when[1:3,]) when2 <- when when2[1, 1] <- NA predict(mainEffects, when2[1:3,]) predict(mainEffects, when2[1:3,], na.action = na.omit) interactionModel <- dummyVars(~ day + time + day:time, data = when, sep = ".") predict(interactionModel, when[1:3,]) noNames <- dummyVars(~ day + time + day:time, data = when, levelsOnly = TRUE) predict(noNames, when) head(class2ind(iris$Species)) two_levels <- factor(rep(letters[1:2], each = 5)) class2ind(two_levels) class2ind(two_levels, drop2nd = TRUE) } \references{ \url{https://cran.r-project.org/doc/manuals/R-intro.html#Formulae-for-statistical-models} } \seealso{ \code{\link[stats]{model.matrix}}, \code{\link[stats]{contrasts}}, \code{\link[stats]{formula}} } \author{ \code{contr.ltfr} is a small modification of \code{\link[stats]{contr.treatment}} by Max Kuhn } \keyword{models} caret/man/summary.bagEarth.Rd0000644000176200001440000000205213206650603015623 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/bagEarth.R, R/bagFDA.R \name{summary.bagEarth} \alias{summary.bagEarth} \alias{summary.bagFDA} \alias{summary.bagFDA} \title{Summarize a bagged earth or FDA fit} \usage{ \method{summary}{bagEarth}(object, ...) \method{summary}{bagFDA}(object, ...) } \arguments{ \item{object}{an object of class "bagEarth" or "bagFDA"} \item{\dots}{optional arguments (not used)} } \value{ a list with elements \item{modelInfo}{a matrix with the number of model terms and variables used} \item{oobStat }{a summary of the out-of-bag statistics} \item{bmarsCall }{the original call to \code{bagEarth}} } \description{ The function shows a summary of the results from a bagged earth model } \details{ The out-of-bag statistics are summarized, as well as the distribution of the number of model terms and number of variables used across all the bootstrap samples. } \examples{ \dontrun{ data(trees) set.seed(9655) fit <- bagEarth(trees[,-3], trees[3]) summary(fit) } } \author{ Max Kuhn } \keyword{manip} caret/man/getSamplingInfo.Rd0000644000176200001440000000070613153613153015504 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/misc.R \name{getSamplingInfo} \alias{getSamplingInfo} \title{Get sampling info from a train model} \usage{ getSamplingInfo(method = NULL, regex = TRUE, ...) } \arguments{ \item{method}{Modeling method.} \item{regex}{Whether to use regex matching.} \item{...}{additional arguments to passed to grepl.} } \value{ A list } \description{ Placeholder. } \details{ Placeholder. } caret/man/varImp.Rd0000644000176200001440000002524113153613153013655 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/varImp.R, R/varImp.train.R \name{varImp} \alias{varImp} \alias{varImp.train} \alias{varImp.earth} \alias{varImp.rpart} \alias{varImp.randomForest} \alias{varImp.gbm} \alias{varImp.regbagg} \alias{varImp.classbagg} \alias{varImp.pamrtrained} \alias{varImp.lm} \alias{varImp.mvr} \alias{varImp.bagEarth} \alias{varImp.bagFDA} \alias{varImp.RandomForest} \alias{varImp.rfe} \alias{varImp.dsa} \alias{varImp.fda} \alias{varImp.multinom} \alias{varImp.cubist} \alias{varImp.plsda} \alias{varImp.JRip} \alias{varImp.PART} \alias{varImp.nnet} \alias{varImp.C5.0} \alias{varImp.glmnet} \alias{varImp.bagEarth} \alias{varImp.bagFDA} \alias{varImp.C5.0} \alias{varImp.cubist} \alias{varImp.dsa} \alias{varImp.glm} \alias{varImp.glmnet} \alias{varImp.JRip} \alias{varImp.multinom} \alias{varImp.nnet} \alias{varImp.avNNet} \alias{varImp.PART} \alias{varImp.RRF} \alias{varImp.rpart} \alias{varImp.randomForest} \alias{varImp.gbm} \alias{varImp.classbagg} \alias{varImp.regbagg} \alias{varImp.pamrtrained} \alias{varImp.lm} \alias{varImp.mvr} \alias{varImp.earth} \alias{varImp.RandomForest} \alias{varImp.plsda} \alias{varImp.fda} \alias{varImp.gam} \alias{varImp.train} \title{Calculation of variable importance for regression and classification models} \usage{ varImp(object, ...) \method{varImp}{bagEarth}(object, ...) \method{varImp}{bagFDA}(object, ...) \method{varImp}{C5.0}(object, ...) \method{varImp}{cubist}(object, weights = c(0.5, 0.5), ...) \method{varImp}{dsa}(object, cuts = NULL, ...) \method{varImp}{glm}(object, ...) \method{varImp}{glmnet}(object, lambda = NULL, ...) \method{varImp}{JRip}(object, ...) \method{varImp}{multinom}(object, ...) \method{varImp}{nnet}(object, ...) \method{varImp}{avNNet}(object, ...) \method{varImp}{PART}(object, ...) \method{varImp}{RRF}(object, ...) \method{varImp}{rpart}(object, surrogates = FALSE, competes = TRUE, ...) \method{varImp}{randomForest}(object, ...) \method{varImp}{gbm}(object, numTrees = NULL, ...) \method{varImp}{classbagg}(object, ...) \method{varImp}{regbagg}(object, ...) \method{varImp}{pamrtrained}(object, threshold, data, ...) \method{varImp}{lm}(object, ...) \method{varImp}{mvr}(object, estimate = NULL, ...) \method{varImp}{earth}(object, value = "gcv", ...) \method{varImp}{RandomForest}(object, ...) \method{varImp}{plsda}(object, ...) \method{varImp}{fda}(object, value = "gcv", ...) \method{varImp}{gam}(object, ...) \method{varImp}{train}(object, useModel = TRUE, nonpara = TRUE, scale = TRUE, ...) } \arguments{ \item{object}{an object corresponding to a fitted model} \item{\dots}{parameters to pass to the specific \code{varImp} methods} \item{weights}{a numeric vector of length two that weighs the usage of variables in the rule conditions and the usage in the linear models (see details below).} \item{cuts}{the number of rule sets to use in the model (for \code{partDSA} only)} \item{lambda}{a single value of the penalty parameter} \item{surrogates}{should surrogate splits contribute to the importance calculation?} \item{competes}{should competing splits contribute to the importance calculation?} \item{numTrees}{the number of iterations (trees) to use in a boosted tree model} \item{threshold}{the shrinkage threshold (\code{pamr} models only)} \item{data}{the training set predictors (\code{pamr} models only)} \item{estimate}{which estimate of performance should be used? See \code{\link[pls]{mvrVal}}} \item{value}{the statistic that will be used to calculate importance: either \code{gcv}, \code{nsubsets}, or \code{rss}} \item{useModel}{use a model based technique for measuring variable importance? This is only used for some models (lm, pls, rf, rpart, gbm, pam and mars)} \item{nonpara}{should nonparametric methods be used to assess the relationship between the features and response (only used with \code{useModel = FALSE} and only passed to \code{filterVarImp}).} \item{scale}{should the importance values be scaled to 0 and 100?} } \value{ A data frame with class \code{c("varImp.train", "data.frame")} for \code{varImp.train} or a matrix for other models. } \description{ A generic method for calculating variable importance for objects produced by \code{train} and method specific methods } \details{ For models that do not have corresponding \code{varImp} methods, see \code{\link{filterVarImp}}. Otherwise: \bold{Linear Models}: the absolute value of the t--statistic for each model parameter is used. \bold{\code{glmboost}} and \bold{\code{glmnet}}: the absolute value of the coefficients corresponding the the tuned model are used. \bold{Random Forest}: \code{varImp.randomForest} and \code{varImp.RandomForest} are wrappers around the importance functions from the \pkg{randomForest} and \pkg{party} packages, respectively. \bold{Partial Least Squares}: the variable importance measure here is based on weighted sums of the absolute regression coefficients. The weights are a function of the reduction of the sums of squares across the number of PLS components and are computed separately for each outcome. Therefore, the contribution of the coefficients are weighted proportionally to the reduction in the sums of squares. \bold{Recursive Partitioning}: The reduction in the loss function (e.g. mean squared error) attributed to each variable at each split is tabulated and the sum is returned. Also, since there may be candidate variables that are important but are not used in a split, the top competing variables are also tabulated at each split. This can be turned off using the \code{maxcompete} argument in \code{rpart.control}. This method does not currently provide class--specific measures of importance when the response is a factor. \bold{Bagged Trees}: The same methodology as a single tree is applied to all bootstrapped trees and the total importance is returned \bold{Boosted Trees}: \code{varImp.gbm} is a wrapper around the function from that package (see the \pkg{gbm} package vignette) \bold{ Multivariate Adaptive Regression Splines}: MARS models include a backwards elimination feature selection routine that looks at reductions in the generalized cross-validation (GCV) estimate of error. The \code{varImp} function tracks the changes in model statistics, such as the GCV, for each predictor and accumulates the reduction in the statistic when each predictor's feature is added to the model. This total reduction is used as the variable importance measure. If a predictor was never used in any of the MARS basis functions in the final model (after pruning), it has an importance value of zero. Prior to June 2008, the package used an internal function for these calculations. Currently, the \code{varImp} is a wrapper to the \code{\link[earth]{evimp}} function in the \code{earth} package. There are three statistics that can be used to estimate variable importance in MARS models. Using \code{varImp(object, value = "gcv")} tracks the reduction in the generalized cross-validation statistic as terms are added. However, there are some cases when terms are retained in the model that result in an increase in GCV. Negative variable importance values for MARS are set to zero. Alternatively, using \code{varImp(object, value = "rss")} monitors the change in the residual sums of squares (RSS) as terms are added, which will never be negative. Also, the option \code{varImp(object, value =" nsubsets")}, which counts the number of subsets where the variable is used (in the final, pruned model). \bold{Nearest shrunken centroids}: The difference between the class centroids and the overall centroid is used to measure the variable influence (see \code{pamr.predict}). The larger the difference between the class centroid and the overall center of the data, the larger the separation between the classes. The training set predictions must be supplied when an object of class \code{pamrtrained} is given to \code{varImp}. \bold{Cubist}: The Cubist output contains variable usage statistics. It gives the percentage of times where each variable was used in a condition and/or a linear model. Note that this output will probably be inconsistent with the rules shown in the output from \code{\link[Cubist]{summary.cubist}}. At each split of the tree, Cubist saves a linear model (after feature selection) that is allowed to have terms for each variable used in the current split or any split above it. Quinlan (1992) discusses a smoothing algorithm where each model prediction is a linear combination of the parent and child model along the tree. As such, the final prediction is a function of all the linear models from the initial node to the terminal node. The percentages shown in the Cubist output reflects all the models involved in prediction (as opposed to the terminal models shown in the output). The variable importance used here is a linear combination of the usage in the rule conditions and the model. \bold{PART} and \bold{JRip}: For these rule-based models, the importance for a predictor is simply the number of rules that involve the predictor. \bold{C5.0}: C5.0 measures predictor importance by determining the percentage of training set samples that fall into all the terminal nodes after the split. For example, the predictor in the first split automatically has an importance measurement of 100 percent since all samples are affected by this split. Other predictors may be used frequently in splits, but if the terminal nodes cover only a handful of training set samples, the importance scores may be close to zero. The same strategy is applied to rule-based models and boosted versions of the model. The underlying function can also return the number of times each predictor was involved in a split by using the option \code{metric = "usage"}. \bold{Neural Networks}: The method used here is based on Gevrey et al (2003), which uses combinations of the absolute values of the weights. For classification models, the class-specific importances will be the same. \bold{Recursive Feature Elimination}: Variable importance is computed using the ranking method used for feature selection. For the final subset size, the importances for the models across all resamples are averaged to compute an overall value. \bold{Feature Selection via Univariate Filters}, the percentage of resamples that a predictor was selected is determined. In other words, an importance of 0.50 means that the predictor survived the filter in half of the resamples. } \references{ Gevrey, M., Dimopoulos, I., & Lek, S. (2003). Review and comparison of methods to study the contribution of variables in artificial neural network models. Ecological Modelling, 160(3), 249-264. Quinlan, J. (1992). Learning with continuous classes. Proceedings of the 5th Australian Joint Conference On Artificial Intelligence, 343-348. } \author{ Max Kuhn } \keyword{models} caret/man/dhfr.Rd0000644000176200001440000000175313153613153013344 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{dhfr} \alias{dhfr} \title{Dihydrofolate Reductase Inhibitors Data} \source{ Sutherland, J.J. and Weaver, D.F. (2004). Three-dimensional quantitative structure-activity and structure-selectivity relationships of dihydrofolate reductase inhibitors, \emph{Journal of Computer-Aided Molecular Design}, Vol. 18, pg. 309--331. } \value{ \item{dhfr}{data frame of chemical descriptors and the activity values} } \description{ Sutherland and Weaver (2004) discuss QSAR models for dihydrofolate reductase (DHFR) inhibition. This data set contains values for 325 compounds. For each compound, 228 molecular descriptors have been calculated. Additionally, each samples is designated as "active" or "inactive". } \details{ The data frame \code{dhfr} contains a column called \code{Y} with the outcome classification. The remainder of the columns are molecular descriptor values. } \keyword{datasets} caret/man/plot.varImp.train.Rd0000644000176200001440000000275113153613153015747 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot.varImp.train.R \name{plot.varImp.train} \alias{plot.varImp.train} \alias{ggplot.varImp.train} \alias{ggplot.varImp.train} \title{Plotting variable importance measures} \usage{ \method{plot}{varImp.train}(x, top = dim(x$importance)[1], ...) \method{ggplot}{varImp.train}(data, mapping = NULL, top = dim(data$importance)[1], ..., environment = NULL) } \arguments{ \item{x, data}{an object with class \code{varImp}.} \item{top}{a scalar numeric that specifies the number of variables to be displayed (in order of importance)} \item{\dots}{arguments to pass to the lattice plot function (\code{\link[lattice:xyplot]{dotplot}} and \code{\link{panel.needle}})} \item{mapping, environment}{unused arguments to make consistent with \pkg{ggplot2} generic method} } \value{ a lattice plot object } \description{ This function produces lattice and ggplot plots of objects with class "varImp.train". More info will be forthcoming. } \details{ For models where there is only one importance value, such a regression models, a "Pareto-type" plot is produced where the variables are ranked by their importance and a needle-plot is used to show the top variables. Horizontal bar charts are used for \code{ggplot}. When there is more than one importance value per predictor, the same plot is produced within conditioning panels for each class. The top predictors are sorted by their average importance. } \author{ Max Kuhn } \keyword{hplot} caret/man/index2vec.Rd0000644000176200001440000000117513153613153014306 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/common_code.R \name{index2vec} \alias{index2vec} \title{Convert indicies to a binary vector} \usage{ index2vec(x, vars, sign = FALSE) } \arguments{ \item{x}{a vector of integers} \item{vars}{the number of possible locations} \item{sign}{a lgical; when true the data are encoded as -1/+1, and 0/1 otherwise} } \value{ a numeric vector } \description{ The function performs the opposite of \code{which} converting a set of integers to a binary vector } \examples{ index2vec(x = 1:2, vars = 5) index2vec(x = 1:2, vars = 5, sign = TRUE) } \author{ Max Kuhn } caret/man/cox2.Rd0000644000176200001440000000234413153613153013271 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/caret-package.R \docType{data} \name{cox2} \alias{cox2} \alias{cox2Class} \alias{cox2Descr} \alias{cox2IC50} \title{COX-2 Activity Data} \source{ Sutherland, J. J., O'Brien, L. A. and Weaver, D. F. (2003). Spline-Fitting with a Genetic Algorithm: A Method for Developing Classification Structure-Activity Relationships, \emph{Journal of Chemical Information and Computer Sciences}, Vol. 43, pg. 1906--1915. } \value{ \item{cox2Descr}{the descriptors} \item{cox2IC50}{the IC50 data used to determine activity} \item{cox2Class}{the categorical outcome ("Active" or "Inactive") based on the $2^2.5$ cutoff} } \description{ From Sutherland, O'Brien, and Weaver (2003): "A set of 467 cyclooxygenase-2 (COX-2) inhibitors has been assembled from the published work of a single research group, with in vitro activities against human recombinant enzyme expressed as IC50 values ranging from 1 nM to >100 uM (53 compounds have indeterminate IC50 values)." } \details{ The data are in the Supplemental Data file for the article. A set of 255 descriptors (MOE2D and QikProp) were generated. To classify the data, we used a cutoff of $2^2.5$ to determine activity } \keyword{datasets} caret/man/plot.gafs.Rd0000644000176200001440000000336613153613153014320 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/gafs.R \name{plot.gafs} \alias{plot.gafs} \alias{plot.safs} \title{Plot Method for the gafs and safs Classes} \usage{ \method{plot}{gafs}(x, metric = x$control$metric["external"], estimate = c("internal", "external"), output = "ggplot", ...) } \arguments{ \item{x}{an object of class \code{\link{gafs}} or \code{\link{safs}}} \item{metric}{the measure of performance to plot (e.g. RMSE, accuracy, etc)} \item{estimate}{the type of estimate: either "internal" or "external"} \item{output}{either "data", "ggplot" or "lattice"} \item{\dots}{options passed to \code{\link[lattice]{xyplot}}} } \value{ Either a data frame, ggplot object or lattice object } \description{ Plot the performance values versus search iteration } \details{ The mean (averaged over the resamples) is plotted against the search iteration using a scatter plot. When \code{output = "data"}, the unaveraged data are returned with columns for all the performance metrics and the resample indicator. } \examples{ \dontrun{ set.seed(1) train_data <- twoClassSim(100, noiseVars = 10) test_data <- twoClassSim(10, noiseVars = 10) ## A short example ctrl <- safsControl(functions = rfSA, method = "cv", number = 3) rf_search <- safs(x = train_data[, -ncol(train_data)], y = train_data$Class, iters = 50, safsControl = ctrl) plot(rf_search) plot(rf_search, output = "lattice", auto.key = list(columns = 2)) plot_data <- plot(rf_search, output = "data") summary(plot_data) } } \seealso{ \code{\link{gafs}}, \code{\link{safs}}, \code{\link[ggplot2]{ggplot}}, \code{\link[lattice]{xyplot}} } \author{ Max Kuhn } \keyword{hplot} caret/man/resamples.Rd0000644000176200001440000001144113153613153014407 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/resamples.R \name{resamples} \alias{resamples} \alias{resamples.default} \alias{summary.resamples} \alias{sort.resamples} \alias{as.matrix.resamples} \alias{as.data.frame.resamples} \alias{modelCor} \alias{resamples.default} \alias{sort.resamples} \alias{summary.resamples} \alias{as.matrix.resamples} \alias{as.data.frame.resamples} \alias{modelCor} \alias{print.resamples} \title{Collation and Visualization of Resampling Results} \usage{ resamples(x, ...) \method{resamples}{default}(x, modelNames = names(x), ...) \method{sort}{resamples}(x, decreasing = FALSE, metric = x$metric[1], FUN = mean, ...) \method{summary}{resamples}(object, metric = object$metrics, ...) \method{as.matrix}{resamples}(x, metric = x$metric[1], ...) \method{as.data.frame}{resamples}(x, row.names = NULL, optional = FALSE, metric = x$metric[1], ...) modelCor(x, metric = x$metric[1], ...) \method{print}{resamples}(x, ...) } \arguments{ \item{x}{a list of two or more objects of class \code{\link{train}}, \code{\link{sbf}} or \code{\link{rfe}} with a common set of resampling indices in the \code{control} object. For \code{sort.resamples}, it is an object generated by \code{resamples}.} \item{\dots}{only used for \code{sort} and \code{modelCor} and captures arguments to pass to \code{sort} or \code{FUN}.} \item{modelNames}{an optional set of names to give to the resampling results} \item{decreasing}{logical. Should the sort be increasing or decreasing?} \item{metric}{a character string for the performance measure used to sort or computing the between-model correlations} \item{FUN}{a function whose first argument is a vector and returns a scalar, to be applied to each model's performance measure.} \item{object}{an object generated by \code{resamples}} \item{row.names, optional}{not currently used but included for consistency with \code{as.data.frame}} } \value{ For \code{resamples}: an object with class \code{"resamples"} with elements \item{call }{the call} \item{values }{a data frame of results where rows correspond to resampled data sets and columns indicate the model and metric} \item{models }{a character string of model labels} \item{metrics }{a character string of performance metrics} \item{methods }{a character string of the \code{\link{train}} \code{method} argument values for each model } For \code{sort.resamples} a character string in the sorted order is generated. \code{modelCor} returns a correlation matrix. } \description{ These functions provide methods for collection, analyzing and visualizing a set of resampling results from a common data set. } \details{ The ideas and methods here are based on Hothorn et al. (2005) and Eugster et al. (2008). The results from \code{\link{train}} can have more than one performance metric per resample. Each metric in the input object is saved. \code{resamples} checks that the resampling results match; that is, the indices in the object \code{trainObject$control$index} are the same. Also, the argument \code{\link{trainControl}} \code{returnResamp} should have a value of \code{"final"} for each model. The summary function computes summary statistics across each model/metric combination. } \examples{ data(BloodBrain) set.seed(1) ## tmp <- createDataPartition(logBBB, ## p = .8, ## times = 100) ## rpartFit <- train(bbbDescr, logBBB, ## "rpart", ## tuneLength = 16, ## trControl = trainControl( ## method = "LGOCV", index = tmp)) ## ctreeFit <- train(bbbDescr, logBBB, ## "ctree", ## trControl = trainControl( ## method = "LGOCV", index = tmp)) ## earthFit <- train(bbbDescr, logBBB, ## "earth", ## tuneLength = 20, ## trControl = trainControl( ## method = "LGOCV", index = tmp)) ## or load pre-calculated results using: ## load(url("http://caret.r-forge.r-project.org/exampleModels.RData")) ## resamps <- resamples(list(CART = rpartFit, ## CondInfTree = ctreeFit, ## MARS = earthFit)) ## resamps ## summary(resamps) } \references{ Hothorn et al. The design and analysis of benchmark experiments. Journal of Computational and Graphical Statistics (2005) vol. 14 (3) pp. 675-699 Eugster et al. Exploratory and inferential analysis of benchmark experiments. Ludwigs-Maximilians-Universitat Munchen, Department of Statistics, Tech. Rep (2008) vol. 30 } \seealso{ \code{\link{train}}, \code{\link{trainControl}}, \code{\link{diff.resamples}}, \code{\link{xyplot.resamples}}, \code{\link{densityplot.resamples}}, \code{\link{bwplot.resamples}}, \code{\link{splom.resamples}} } \author{ Max Kuhn } \keyword{models} caret/man/gafs.default.Rd0000644000176200001440000001450313153613153014761 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/gafs.R \name{gafs.default} \alias{gafs.default} \alias{gafs} \title{Genetic algorithm feature selection} \usage{ \method{gafs}{default}(x, y, iters = 10, popSize = 50, pcrossover = 0.8, pmutation = 0.1, elite = 0, suggestions = NULL, differences = TRUE, gafsControl = gafsControl(), ...) } \arguments{ \item{x}{an object where samples are in rows and features are in columns. This could be a simple matrix, data frame or other type (e.g. sparse matrix). See Details below} \item{y}{a numeric or factor vector containing the outcome for each sample} \item{iters}{number of search iterations} \item{popSize}{number of subsets evaluated at each iteration} \item{pcrossover}{the crossover probability} \item{pmutation}{the mutation probability} \item{elite}{the number of best subsets to survive at each generation} \item{suggestions}{a binary matrix of subsets strings to be included in the initial population. If provided the number of columns must match the number of columns in \code{x}} \item{differences}{a logical: should the difference in fitness values with and without each predictor be calculated?} \item{gafsControl}{a list of values that define how this function acts. See \code{\link{gafsControl}} and URL.} \item{...}{additional arguments to be passed to other methods} } \value{ an object of class \code{gafs} } \description{ Supervised feature selection using genetic algorithms } \details{ \code{\link{gafs}} conducts a supervised binary search of the predictor space using a genetic algorithm. See Mitchell (1996) and Scrucca (2013) for more details on genetic algorithms. This function conducts the search of the feature space repeatedly within resampling iterations. First, the training data are split be whatever resampling method was specified in the control function. For example, if 10-fold cross-validation is selected, the entire genetic algorithm is conducted 10 separate times. For the first fold, nine tenths of the data are used in the search while the remaining tenth is used to estimate the external performance since these data points were not used in the search. During the genetic algorithm, a measure of fitness is needed to guide the search. This is the internal measure of performance. During the search, the data that are available are the instances selected by the top-level resampling (e.g. the nine tenths mentioned above). A common approach is to conduct another resampling procedure. Another option is to use a holdout set of samples to determine the internal estimate of performance (see the holdout argument of the control function). While this is faster, it is more likely to cause overfitting of the features and should only be used when a large amount of training data are available. Yet another idea is to use a penalized metric (such as the AIC statistic) but this may not exist for some metrics (e.g. the area under the ROC curve). The internal estimates of performance will eventually overfit the subsets to the data. However, since the external estimate is not used by the search, it is able to make better assessments of overfitting. After resampling, this function determines the optimal number of generations for the GA. Finally, the entire data set is used in the last execution of the genetic algorithm search and the final model is built on the predictor subset that is associated with the optimal number of generations determined by resampling (although the update function can be used to manually set the number of generations). This is an example of the output produced when \code{gafsControl(verbose = TRUE)} is used: \preformatted{ Fold2 1 0.715 (13) Fold2 2 0.715->0.737 (13->17, 30.4\%) * Fold2 3 0.737->0.732 (17->14, 24.0\%) Fold2 4 0.737->0.769 (17->23, 25.0\%) * } For the second resample (e.g. fold 2), the best subset across all individuals tested in the first generation contained 13 predictors and was associated with a fitness value of 0.715. The second generation produced a better subset containing 17 samples with an associated fitness values of 0.737 (and improvement is symbolized by the \code{*}. The percentage listed is the Jaccard similarity between the previous best individual (with 13 predictors) and the new best. The third generation did not produce a better fitness value but the fourth generation did. The search algorithm can be parallelized in several places: \enumerate{ \item each externally resampled GA can be run independently (controlled by the \code{allowParallel} option of \code{\link{gafsControl}}) \item within a GA, the fitness calculations at a particular generation can be run in parallel over the current set of individuals (see the \code{genParallel} option in \code{\link{gafsControl}}) \item if inner resampling is used, these can be run in parallel (controls depend on the function used. See, for example, \code{\link[caret]{trainControl}}) \item any parallelization of the individual model fits. This is also specific to the modeling function. } It is probably best to pick one of these areas for parallelization and the first is likely to produces the largest decrease in run-time since it is the least likely to incur multiple re-starting of the worker processes. Keep in mind that if multiple levels of parallelization occur, this can effect the number of workers and the amount of memory required exponentially. } \examples{ \dontrun{ set.seed(1) train_data <- twoClassSim(100, noiseVars = 10) test_data <- twoClassSim(10, noiseVars = 10) ## A short example ctrl <- gafsControl(functions = rfGA, method = "cv", number = 3) rf_search <- gafs(x = train_data[, -ncol(train_data)], y = train_data$Class, iters = 3, gafsControl = ctrl) rf_search } } \references{ Kuhn M and Johnson K (2013), Applied Predictive Modeling, Springer, Chapter 19 \url{http://appliedpredictivemodeling.com} Scrucca L (2013). GA: A Package for Genetic Algorithms in R. Journal of Statistical Software, 53(4), 1-37. \url{www.jstatsoft.org/v53/i04} Mitchell M (1996), An Introduction to Genetic Algorithms, MIT Press. \url{http://en.wikipedia.org/wiki/Jaccard_index} } \seealso{ \code{\link{gafsControl}}, \code{\link{predict.gafs}}, \code{\link{caretGA}}, \code{\link{rfGA}} \code{\link{treebagGA}} } \author{ Max Kuhn, Luca Scrucca (for GA internals) } \keyword{models} caret/man/print.train.Rd0000644000176200001440000000302113153613153014657 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/print.train.R \name{print.train} \alias{print.train} \title{Print Method for the train Class} \usage{ \method{print}{train}(x, printCall = FALSE, details = FALSE, selectCol = FALSE, showSD = FALSE, ...) } \arguments{ \item{x}{an object of class \code{\link{train}}.} \item{printCall}{a logical to print the call at the top of the output} \item{details}{a logical to show print or summary methods for the final model. In some cases (such as \code{gbm}, \code{knn}, \code{lvq}, naive Bayes and bagged tree models), no information will be printed even if \code{details = TRUE}} \item{selectCol}{a logical whether to add a column with a star next to the selected parameters} \item{showSD}{a logical whether to show the standard deviation of the resampling results within parentheses (e.g. "4.24 (0.493)")} \item{\dots}{options passed to \code{\link[base]{format}}} } \value{ A matrix with the complexity parameters and performance (invisibly). } \description{ Print the results of a \code{\link{train}} object. } \details{ The table of complexity parameters used, their resampled performance and a flag for which rows are optimal. } \examples{ \dontrun{ data(iris) TrainData <- iris[,1:4] TrainClasses <- iris[,5] options(digits = 3) library(klaR) rdaFit <- train(TrainData, TrainClasses, method = "rda", control = trainControl(method = "cv")) rdaFit print(rdaFit, showSD = TRUE) } } \seealso{ \code{\link{train}} } \author{ Max Kuhn } \keyword{print} caret/man/filterVarImp.Rd0000644000176200001440000000462313153613153015024 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/filterVarImp.R \name{filterVarImp} \alias{filterVarImp} \title{Calculation of filter-based variable importance} \usage{ filterVarImp(x, y, nonpara = FALSE, ...) } \arguments{ \item{x}{A matrix or data frame of predictor data} \item{y}{A vector (numeric or factor) of outcomes)} \item{nonpara}{should nonparametric methods be used to assess the relationship between the features and response} \item{...}{options to pass to either \code{\link[stats]{lm}} or \code{\link[stats]{loess}}} } \value{ A data frame with variable importances. Column names depend on the problem type. For regression, the data frame contains one column: "Overall" for the importance values. } \description{ Specific engines for variable importance on a model by model basis. } \details{ The importance of each predictor is evaluated individually using a ``filter'' approach. For classification, ROC curve analysis is conducted on each predictor. For two class problems, a series of cutoffs is applied to the predictor data to predict the class. The sensitivity and specificity are computed for each cutoff and the ROC curve is computed. The trapezoidal rule is used to compute the area under the ROC curve. This area is used as the measure of variable importance. For multi--class outcomes, the problem is decomposed into all pair-wise problems and the area under the curve is calculated for each class pair (i.e class 1 vs. class 2, class 2 vs. class 3 etc.). For a specific class, the maximum area under the curve across the relevant pair--wise AUC's is used as the variable importance measure. For regression, the relationship between each predictor and the outcome is evaluated. An argument, \code{nonpara}, is used to pick the model fitting technique. When \code{nonpara = FALSE}, a linear model is fit and the absolute value of the $t$--value for the slope of the predictor is used. Otherwise, a loess smoother is fit between the outcome and the predictor. The $R^2$ statistic is calculated for this model against the intercept only null model. } \examples{ data(mdrr) filterVarImp(mdrrDescr[, 1:5], mdrrClass) data(BloodBrain) filterVarImp(bbbDescr[, 1:5], logBBB, nonpara = FALSE) apply(bbbDescr[, 1:5], 2, function(x, y) summary(lm(y~x))$coefficients[2,3], y = logBBB) filterVarImp(bbbDescr[, 1:5], logBBB, nonpara = TRUE) } \author{ Max Kuhn } \keyword{models} caret/man/classDist.Rd0000644000176200001440000000637513153613153014357 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/classDist.R \name{classDist} \alias{classDist} \alias{classDist.default} \alias{predict.classDist} \alias{classDist.default} \alias{predict.classDist} \title{Compute and predict the distances to class centroids} \usage{ classDist(x, ...) \method{classDist}{default}(x, y, groups = 5, pca = FALSE, keep = NULL, ...) \method{predict}{classDist}(object, newdata, trans = log, ...) } \arguments{ \item{x}{a matrix or data frame of predictor variables} \item{\dots}{optional arguments to pass (not currently used)} \item{y}{a numeric or factor vector of class labels} \item{groups}{an integer for the number of bins for splitting a numeric outcome} \item{pca}{a logical: should principal components analysis be applied to the dataset prior to splitting the data by class?} \item{keep}{an integer for the number of PCA components that should by used to predict new samples (\code{NULL} uses all within a tolerance of \code{sqrt(.Machine$double.eps)})} \item{object}{an object of class \code{classDist}} \item{newdata}{a matrix or data frame. If \code{vars} was previously specified, these columns should be in \code{newdata}} \item{trans}{an optional function that can be applied to each class distance. \code{trans = NULL} will not apply a function} } \value{ for \code{classDist}, an object of class \code{classDist} with elements: \item{values }{a list with elements for each class. Each element contains a mean vector for the class centroid and the inverse of the class covariance matrix} \item{classes}{a character vector of class labels} \item{pca}{the results of \code{\link[stats]{prcomp}} when \code{pca = TRUE}} \item{call}{the function call} \item{p}{the number of variables} \item{n}{a vector of samples sizes per class} For \code{predict.classDist}, a matrix with columns for each class. The columns names are the names of the class with the prefix \code{dist.}. In the case of numeric \code{y}, the class labels are the percentiles. For example, of \code{groups = 9}, the variable names would be \code{dist.11.11}, \code{dist.22.22}, etc. } \description{ This function computes the class centroids and covariance matrix for a training set for determining Mahalanobis distances of samples to each class centroid. } \details{ For factor outcomes, the data are split into groups for each class and the mean and covariance matrix are calculated. These are then used to compute Mahalanobis distances to the class centers (using \code{predict.classDist} The function will check for non-singular matrices. For numeric outcomes, the data are split into roughly equal sized bins based on \code{groups}. Percentiles are used to split the data. } \examples{ trainSet <- sample(1:150, 100) distData <- classDist(iris[trainSet, 1:4], iris$Species[trainSet]) newDist <- predict(distData, iris[-trainSet, 1:4]) splom(newDist, groups = iris$Species[-trainSet]) } \references{ Forina et al. CAIMAN brothers: A family of powerful classification and class modeling techniques. Chemometrics and Intelligent Laboratory Systems (2009) vol. 96 (2) pp. 239-245 } \seealso{ \code{\link[stats]{mahalanobis}} } \author{ Max Kuhn } \keyword{manip} caret/man/nearZeroVar.Rd0000644000176200001440000001023613153613153014653 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/nearZeroVar.R \name{nearZeroVar} \alias{nearZeroVar} \alias{nzv} \alias{checkResamples} \alias{checkConditionalX} \alias{checkConditionalX} \alias{checkResamples} \title{Identification of near zero variance predictors} \usage{ nearZeroVar(x, freqCut = 95/5, uniqueCut = 10, saveMetrics = FALSE, names = FALSE, foreach = FALSE, allowParallel = TRUE) checkConditionalX(x, y) checkResamples(index, x, y) } \arguments{ \item{x}{a numeric vector or matrix, or a data frame with all numeric data} \item{freqCut}{the cutoff for the ratio of the most common value to the second most common value} \item{uniqueCut}{the cutoff for the percentage of distinct values out of the number of total samples} \item{saveMetrics}{a logical. If false, the positions of the zero- or near-zero predictors is returned. If true, a data frame with predictor information is returned.} \item{names}{a logical. If false, column indexes are returned. If true, column names are returned.} \item{foreach}{should the \pkg{foreach} package be used for the computations? If \code{TRUE}, less memory should be used.} \item{allowParallel}{should the parallel processing via the \pkg{foreach} package be used for the computations? If \code{TRUE}, more memory will be used but execution time should be shorter.} \item{y}{a factor vector with at least two levels} \item{index}{a list. Each element corresponds to the training set samples in \code{x} for a given resample} } \value{ For \code{nearZeroVar}: if \code{saveMetrics = FALSE}, a vector of integers corresponding to the column positions of the problematic predictors. If \code{saveMetrics = TRUE}, a data frame with columns: \item{freqRatio }{the ratio of frequencies for the most common value over the second most common value} \item{percentUnique }{the percentage of unique data points out of the total number of data points} \item{zeroVar }{a vector of logicals for whether the predictor has only one distinct value} \item{nzv }{a vector of logicals for whether the predictor is a near zero variance predictor} For \code{checkResamples} or \code{checkConditionalX}, a vector of column indicators for predictors with empty conditional distributions in at least one class of \code{y}. } \description{ \code{nearZeroVar} diagnoses predictors that have one unique value (i.e. are zero variance predictors) or predictors that are have both of the following characteristics: they have very few unique values relative to the number of samples and the ratio of the frequency of the most common value to the frequency of the second most common value is large. \code{checkConditionalX} looks at the distribution of the columns of \code{x} conditioned on the levels of \code{y} and identifies columns of \code{x} that are sparse within groups of \code{y}. } \details{ For example, an example of near zero variance predictor is one that, for 1000 samples, has two distinct values and 999 of them are a single value. To be flagged, first the frequency of the most prevalent value over the second most frequent value (called the ``frequency ratio'') must be above \code{freqCut}. Secondly, the ``percent of unique values,'' the number of unique values divided by the total number of samples (times 100), must also be below \code{uniqueCut}. In the above example, the frequency ratio is 999 and the unique value percentage is 0.0001. Checking the conditional distribution of \code{x} may be needed for some models, such as naive Bayes where the conditional distributions should have at least one data point within a class. \code{nzv} is the original version of the function. } \examples{ nearZeroVar(iris[, -5], saveMetrics = TRUE) data(BloodBrain) nearZeroVar(bbbDescr) nearZeroVar(bbbDescr, names = TRUE) set.seed(1) classes <- factor(rep(letters[1:3], each = 30)) x <- data.frame(x1 = rep(c(0, 1), 45), x2 = c(rep(0, 10), rep(1, 80))) lapply(x, table, y = classes) checkConditionalX(x, classes) folds <- createFolds(classes, k = 3, returnTrain = TRUE) x$x3 <- x$x1 x$x3[folds[[1]]] <- 0 checkResamples(folds, x, classes) } \author{ Max Kuhn, with speed improvements to nearZeroVar by Allan Engelhardt } \keyword{utilities} caret/man/histogram.train.Rd0000644000176200001440000000465013153613153015531 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/lattice.train.R \name{histogram.train} \alias{histogram.train} \alias{stripplot.train} \alias{xyplot.train} \alias{densityplot.train} \title{Lattice functions for plotting resampling results} \usage{ \method{histogram}{train}(x, data = NULL, metric = x$metric, ...) } \arguments{ \item{x}{An object produced by \code{\link{train}}} \item{data}{This argument is not used} \item{metric}{A character string specifying the single performance metric that will be plotted} \item{\dots}{arguments to pass to either \code{\link[lattice:histogram]{histogram}}, \code{\link[lattice:histogram]{densityplot}}, \code{\link[lattice:xyplot]{xyplot}} or \code{\link[lattice:xyplot]{stripplot}}} } \value{ A lattice plot object } \description{ A set of lattice functions are provided to plot the resampled performance estimates (e.g. classification accuracy, RMSE) over tuning parameters (if any). } \details{ By default, only the resampling results for the optimal model are saved in the \code{train} object. The function \code{\link{trainControl}} can be used to save all the results (see the example below). If leave-one-out or out-of-bag resampling was specified, plots cannot be produced (see the \code{method} argument of \code{\link{trainControl}}) For \code{xyplot} and \code{stripplot}, the tuning parameter with the most unique values will be plotted on the x-axis. The remaining parameters (if any) will be used as conditioning variables. For \code{densityplot} and \code{histogram}, all tuning parameters are used for conditioning. Using \code{horizontal = FALSE} in \code{stripplot} works. } \examples{ \dontrun{ library(mlbench) data(BostonHousing) library(rpart) rpartFit <- train(medv ~ ., data = BostonHousing, "rpart", tuneLength = 9, trControl = trainControl( method = "boot", returnResamp = "all")) densityplot(rpartFit, adjust = 1.25) xyplot(rpartFit, metric = "Rsquared", type = c("p", "a")) stripplot(rpartFit, horizontal = FALSE, jitter = TRUE) } } \seealso{ \code{\link{train}}, \code{\link{trainControl}}, \code{\link[lattice:histogram]{histogram}}, \code{\link[lattice:histogram]{densityplot}}, \code{\link[lattice:xyplot]{xyplot}}, \code{\link[lattice:xyplot]{stripplot}} } \author{ Max Kuhn } \keyword{hplot} caret/.Rinstignore0000644000176200001440000000024113153613153013652 0ustar liggesusersvignettes/rocVarImp.pdf vignettes/plsVarImp.pdf vignettes/filteredPred.pdf vignettes/allPred.pdf vignettes/speedup.pdf vignettes/min.pdf vignettes/algorithm.tex