ConsensusClusterPlus/0000755000175000017500000000000014147513757014610 5ustar nileshnileshConsensusClusterPlus/DESCRIPTION0000644000175000017500000000133314136067163016307 0ustar nileshnileshPackage: ConsensusClusterPlus Type: Package Imports: Biobase, ALL, graphics, stats, utils, cluster Title: ConsensusClusterPlus Version: 1.58.0 Date: 2020-4-24 Author: Matt Wilkerson , Peter Waltman Maintainer: Matt Wilkerson Description: algorithm for determining cluster count and membership by stability evidence in unsupervised analysis License: GPL version 2 biocViews: Software, Clustering git_url: https://git.bioconductor.org/packages/ConsensusClusterPlus git_branch: RELEASE_3_14 git_last_commit: d8131dd git_last_commit_date: 2021-10-26 Date/Publication: 2021-10-26 NeedsCompilation: no Packaged: 2021-10-26 21:09:07 UTC; biocbuild ConsensusClusterPlus/man/0000755000175000017500000000000014136047471015354 5ustar nileshnileshConsensusClusterPlus/man/ConsensusClusterPlus.Rd0000644000175000017500000001471514136047471022041 0ustar nileshnilesh\name{ConsensusClusterPlus} \alias{ConsensusClusterPlus} \alias{calcICL} \title{ run ConsensusClusterPlus} \description{ ConsensusClusterPlus function for determing cluster number and class membership by stability evidence. calcICL function for calculating cluster-consensus and item-consensus. } \usage{ ConsensusClusterPlus( d=NULL, maxK = 3, reps=10, pItem=0.8, pFeature=1, clusterAlg="hc",title="untitled_consensus_cluster", innerLinkage="average", finalLinkage="average", distance="pearson", ml=NULL, tmyPal=NULL,seed=NULL,plot=NULL,writeTable=FALSE,weightsItem=NULL,weightsFeature=NULL,verbose=F,corUse="everything") calcICL(res,title="untitled_consensus_cluster",plot=NULL,writeTable=FALSE) } \arguments{ \item{d}{data to be clustered; either a data matrix where columns=items/samples and rows are features. For example, a gene expression matrix of genes in rows and microarrays in columns, or ExpressionSet object, or a distance object (only for cases of no feature resampling) } \item{maxK}{integer value. maximum cluster number to evaluate. } \item{reps}{integer value. number of subsamples. } \item{pItem}{numerical value. proportion of items to sample. } \item{pFeature}{numerical value. proportion of features to sample. } \item{clusterAlg}{character value. cluster algorithm. 'hc' hierarchical (hclust), 'pam' for paritioning around medoids, 'km' for k-means upon data matrix, or a function that returns a clustering. See example and vignette for more details. } \item{title}{ character value for output directory. Directory is created only if plot is not NULL or writeTable is TRUE. This title can be an abosulte or relative path. } \item{innerLinkage}{hierarchical linkage method for subsampling. } \item{finalLinkage}{hierarchical linkage method for consensus matrix. } \item{distance}{character value. 'pearson': (1 - Pearson correlation), 'spearman' (1 - Spearman correlation), 'euclidean', 'binary', 'maximum', 'canberra', 'minkowski" or custom distance function. } \item{ml}{optional. prior result, if supplied then only do graphics and tables.} \item{tmyPal}{optional character vector of colors for consensus matrix} \item{seed}{optional numerical value. sets random seed for reproducible results.} \item{plot}{character value. NULL - print to screen, 'pdf', 'png', 'pngBMP' for bitmap png, helpful for large datasets.} \item{writeTable}{logical value. TRUE - write ouput and log to csv.} \item{weightsItem}{optional numerical vector. weights to be used for sampling items.} \item{weightsFeature}{optional numerical vector. weights to be used for sampling features.} \item{res}{ result of consensusClusterPlus.} \item{verbose}{ boolean. If TRUE, print messages to the screen to indicate progress. This is useful for large datasets.} \item{corUse}{optional character value. specifies how to handle missing data in correlation distances 'everything','pairwise.complete.obs', 'complete.obs' see cor() for description.} } \details{ ConsensusClusterPlus implements the Consensus Clustering algorithm of Monti, et al (2003) and extends this method with new functionality and visualizations. Its utility is to provide quantitative stability evidence for determing a cluster count and cluster membership in an unsupervised analysis. ConsensusClusterPlus takes a numerical data matrix of items as columns and rows as features. This function subsamples this matrix according to pItem, pFeature, weightsItem, and weightsFeature, and clusters the data into 2 to maxK clusters by clusterArg clusteringAlgorithm. Agglomerative hierarchical (hclust) and kmeans clustering are supported by an option see above. For users wishing to use a different clustering algorithm for which many are available in R, one can supply their own clustering algorithm as a simple programming hook - see the second commented-out example that uses divisive hierarchical clustering. For a detailed description of usage, output and images, see the vignette by: openVignette(). } \value{ ConsensusClusterPlus returns a list of length maxK. Each element is a list containing consensusMatrix (numerical matrix), consensusTree (hclust), consensusClass (consensus class asssignments). ConsensusClusterPlus also produces images. calcICL returns a list of two elements clusterConsensus and itemConsensus corresponding to cluster-consensus and item-consensus. See Monti, et al (2003) for formulas. } \author{ Matt Wilkerson mdwilkerson@outlook.com Peter Waltman waltman@soe.ucsc.edu } \references{ Please cite the ConsensusClusterPlus publication, below, if you use ConsensusClusterPlus in a publication or presentation: Wilkerson, M.D., Hayes, D.N. (2010). ConsensusClusterPlus: a class discovery tool with confidence assessments and item tracking. Bioinformatics, 2010 Jun 15;26(12):1572-3. Original description of the Consensus Clustering method: Monti, S., Tamayo, P., Mesirov, J., Golub, T. (2003) Consensus Clustering: A Resampling-Based Method for Class Discovery and Visualization of Gene Expression Microarray Data. Machine Learning, 52, 91-118. } \examples{ # obtain gene expression data library(Biobase) data(geneData) d=geneData #median center genes dc = sweep(d,1, apply(d,1,median)) # run consensus cluster, with standard options rcc = ConsensusClusterPlus(dc,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example",distance="pearson",clusterAlg="hc") # same as above but with pre-computed distance matrix, useful for large datasets (>1,000's of items) dt = as.dist(1-cor(dc,method="pearson")) rcc2 = ConsensusClusterPlus(dt,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example2",distance="pearson",clusterAlg="hc") # k-means clustering rcc3 = ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="euclidean",clusterAlg="km") ### partition around medoids clustering with manhattan distance rcc4 = ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="manhattan",clusterAlg="pam") ## example of custom distance function as hook: myDistFunc = function(x){ dist(x,method="manhattan")} rcc5 = ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="myDistFunc",clusterAlg="pam") ##example of clusterAlg as hook: #library(cluster) #dianaHook = function(this_dist,k){ # tmp = diana(this_dist,diss=TRUE) # assignment = cutree(tmp,k) # return(assignment) #} #rcc6 = ConsensusClusterPlus(d,maxK=6,reps=25,pItem=0.8,pFeature=1,title="example",clusterAlg="dianaHook") ## ICL resICL = calcICL(rcc,title="example") } \keyword{ methods } ConsensusClusterPlus/vignettes/0000755000175000017500000000000014136067163016611 5ustar nileshnileshConsensusClusterPlus/vignettes/ConsensusClusterPlus.Rnw0000644000175000017500000004274614136047471023504 0ustar nileshnilesh% \VignetteIndexEntry{ConsensusClusterPlus Tutorial} % \VignettePackage{ConsensusClusterPlus} \documentclass{article} \usepackage{graphicx} \begin{document} \title{ConsensusClusterPlus (Tutorial)} \author{ Matthew D. Wilkerson} \maketitle \SweaveOpts{keep.source=TRUE} \section{Summary} \texttt{ConsensusClusterPlus} is a tool for unsupervised class discovery. This document provides a tutorial of how to use \texttt{ConsensusClusterPlus}. \section{Brief description of \textit{Consensus Clustering} } \textit{Consensus Clustering} \cite{monti} is a method that provides quantitative evidence for determining the number and membership of possible clusters within a dataset, such as microarray gene expression. This method has gained popularity in cancer genomics, where new molecular subclasses of disease have been discovered \cite{hayes,verhaak}. The \textit{Consensus Clustering} method involves subsampling from a set of items, such as microarrays, and determines clusterings of specified cluster counts (\textit{k}). Then, pairwise \textit{consensus} values, the proportion that two items occupied the same cluster out of the number of times they occurred in the same subsample, are calculated and stored in a symmetrical \textit{consensus matrix} for each \textit{k}. The \textit{consensus matrix} is summarized in several graphical displays that enable a user to decide upon a reasonable cluster number and membership. A web-based version of \textit{Consensus Clustering} is publicly available \cite{gp}. For a formal description, see \cite{monti}. \\ \\ \texttt{ConsensusClusterPlus}\cite{wilkerson} implements the \textit{Consensus Clustering} method in \textit{R} and extends it with new features and graphical outputs that can aid users in class discovery. \section{Tutorial} There are three main steps to use \texttt{ConsensusClusterPlus}: preparing input data, running the program, and generating cluster-consensus and item-consensus. \subsection{Preparing input data} The first step is to gather some data for cluster analysis. These data could be the result of an experiment such as a mRNA expression microarray or immunohistochemical staining intensities. The input data format is a matrix where columns are samples (items), rows are features and cells are numerical values. For this tutorial, we use the ALL gene expression data from the ALL library. You can see the matrix d is already in the proper format. The column and row names, which correspond to the sample and gene names, will be maintained in the output. <<>>= library(ALL) data(ALL) d=exprs(ALL) d[1:5,1:5] @ For the purpose of selecting the most informative genes for class detection, we reduce the dataset to the top 5,000 most variable genes, measured by median absolute deviation. The choice of 5,000 genes and MAD can be substituted with other statistical variability filters. Users can decide what type of filtering to use or to skip filtering. Another choice would be to supply weights for sampling genes see weightsFeatures in Additional Options. <<>>= mads=apply(d,1,mad) d=d[rev(order(mads))[1:5000],] @ If one wants to transform or normalize their data, they can easily do so using other Bioconductor methods or a simple statement. We chose to use the default settings of the agglomerative hierarchical clustering algorithm using Pearson correlation distance, so it is appropriate to gene median center d using this simple statement: <<>>= d = sweep(d,1, apply(d,1,median,na.rm=T)) @ d is now ready for \texttt{ConsensusClusterPlus} analysis. \subsection{Running \texttt{ConsensusClusterPlus}} For this tutorial, we selected 80\% item resampling (pItem), 80\% gene resampling (pFeature), a maximum evalulated k of 6 so that cluster counts of 2,3,4,5,6 are evaluated (maxK), 50 resamplings (reps), agglomerative hierarchical clustering algorithm (clusterAlg) upon 1- Pearson correlation distances (distance), gave our output a title (title), and opted to have graphical results written to png files. We also used a specific random seed so that this example is repeatable (seed). \\ \\ ** Note: In practice, a much higher reps is recommended such as 1,000 and a higher cluster count such as 20. <>= library(ConsensusClusterPlus) title=tempdir() results = ConsensusClusterPlus(d,maxK=6,reps=50,pItem=0.8,pFeature=1, title=title,clusterAlg="hc",distance="pearson",seed=1262118388.71279,plot="png") @ <>= cat(sprintf("\\graphicspath{{%s}}", paste(gsub("[\\]","/",title),"/",sep=""))) cat("\n") @ The output of \texttt{ConsensusClusterPlus} is a list, in which the element of the list corresponds to results from the \textit{kth} cluster, for instance, results[[2]] is the results result of \textit{k}=2. The seed option specifies a random number seed and is used here for reproducibility of this tutorial. These list elements have the following elements: <>= #consensusMatrix - the consensus matrix. #For .example, the top five rows and columns of results for k=2: results[[2]][["consensusMatrix"]][1:5,1:5] #consensusTree - hclust object results[[2]][["consensusTree"]] #consensusClass - the sample classifications results[[2]][["consensusClass"]][1:5] #ml - consensus matrix result #clrs - colors for cluster @ See additional options section for further description of clustering algorithms and distance metrics. \subsection{Generating cluster and item consensus} After executing \texttt{ConsensusClusterPlus}, one can optionally calculate cluster-consensus and item-consensus results by: <<>>= icl = calcICL(results,title=title,plot="png") @ calcICL returns a list of two elements: <<>>= icl[["clusterConsensus"]] @ <<>>= icl[["itemConsensus"]][1:5,] @ \section{Graphic Output Description} The output of \texttt{ConsensusClusterPlus} consists of graphics, which are written to the screen, 'pdf' file, or 'png' files depending on the plot option; and numerical data which can be optionally written to a CSV file depending on the writeTable option. For large datasets, graphical displays can be quite large and plotting the consensus dendrogram above the consensus matrices may not be possible. If your dataset is large, the plot option 'pngBMP' which does not produce the consensus matrix dendrogram and uses the bitmap function rather png. Bitmap is often available natively on linux systems but can potentially be installed on other systems. \subsection{Consensus Matrices} The first graphic shows the consensus color legend. \\ <>= cat("\\includegraphics[width=60mm]{consensus001.png}",sep="") @ \\ The remaining graphics are heatmaps of the consensus matrices for \textit{k} = 2, 3, 4, 5 \cite{monti}. The consensus matrices have items as both rows and columns, which are microarrays in this example, and where consensus values range from 0 (never clustered together) to 1 (always clustered together) marked by white to dark blue. The consensus matrices are ordered by the consensus clustering which is depicted as a dendrogram atop the heatmap. To aid analysis, the cluster memberships are marked by colored rectangles between the dendrogram and heatmap according to a legend within the graphic. This enables a user to compare a clusters' member count in the context of their consensus. \\ <>= cat("\\includegraphics[width=60mm]{consensus002.png}",sep="") cat("\\includegraphics[width=60mm]{consensus003.png}",sep="") @ \\ <>= cat("\\includegraphics[width=60mm]{consensus004.png}",sep="") cat("\\includegraphics[width=60mm]{consensus005.png}",sep="") @ \\ \subsection{Consensus Cumulative Distribution Function (CDF) Plot} This graphic shows the cumulative distribution functions \cite{monti} of the consensus matrix for each \textit{k} (indicated by colors), estimated by a histogram of 100 bins. This figure allows a user to determine at what number of clusters, \textit{k}, the CDF reaches an approximate maximum, thus consensus and cluster confidence is at a maximum at this \textit{k}. See \cite{monti} for further details intepretation. \\ <>= cat("\\includegraphics[width=60mm]{consensus007.png}",sep="") @ \\ \subsection{Delta Area Plot} This graphic shows the relative change in area under the CDF curve \cite{monti} comparing \textit{k} and \textit{k} $-$ 1. For \textit{k} = 2, there is no \textit{k} -1, so the total area under the curve rather than the relative increase is plotted. This plot allows a user to determine the relative increase in consensus and determine \textit{k} at which there is no appreciable increase. See \cite{monti} for intepretation. \\ <>= cat("\\includegraphics[width=60mm]{consensus008.png}",sep="") @ \\ \subsection{Tracking Plot} This graphic shows the cluster assignment of items (columns) for each \textit{k} (rows) by color. The colors correspond to the colors of the consensus matrix class asssignments. Hatch marks below the plot indicate items/samples. This plot provides a view of item cluster membership across different \textit{k} and enables a user to track the history of clusters relative to earlier clusters. Items that change clusters often (changing colors within a column) are indicative of unstable membership. Clusters with an abundance of unstable members suggest an unstable cluster. \\ <>= cat("\\includegraphics[width=60mm]{consensus009.png}",sep="") @ \\ \subsection{Cluster-Consensus Plot} This graphic shows the \textit{cluster-consensus} value of clusters at each \textit{k}. This is the mean of all pairwise consensus values between a cluster's members. Cluster is indicated by color following the same color scheme as the cluster matrices and tracking plots. The bars are grouped by \textit{k} which is marked on the horizontal axis. High values indicate a cluster has high stability and low values indicate a cluster has low stability. This plot enables a user to view the mean cluster-consensus among clusters at a given \textit{k} and compare values of clusters across different \textit{k} via the color scheme. \\ <>= cat("\\includegraphics[width=60mm]{icl003.png}",sep="") @ \\ \subsection{Item-Consensus Plot} \textit{Item-consensus} values are the mean consensus of an item with all items in a particular cluster. An item has \textit{k} item-consensus values corresponding to each cluster at a particular \textit{k}. These values are depicted in barplots for each \textit{k}. Samples are stacked bars. \textit{Item-consensus} values are indicated by the heights of the colored portion of the bars, whose color corresponds to the common color scheme. Bars' rectangles are ordered by increasing value from bottom to top. The asterisks at the top indicate the consensus cluster for each item. \\ <>= cat("\\includegraphics[width=60mm]{icl001.png}",sep="") @ \\ This plot provides a view of item-consensus across all other clusters at a given \textit{k}. This enables a user to see if a sample is a very "pure" member of a cluster or if it shares high consensus to multiple clusters (large rectangles in a column of multiple colors), suggesting that it is an unstable or "unpure" member. These values could be used to select "core" samples similar to \cite{verhaak} that are highly representative of a cluster. Further, this plot can aid cluster number decisions. For instance, if a cluster consists mainly of members with very "unpure" items, then this evidence could be used to support a maximum cluster number at 1 below this \textit{k} or this evidence could support that this cluster is an outlier cluster. Decisions such as these are best to be made by the user in conjunction with other evidence such as consensus matrices, tracking plots, etc. \\ \\ \subsection{Additional details on options for \texttt{ConsensusClusterPlus} function} \begin{itemize} \item \textbf{d} This option specifies the data to be used in ConsensusClusterPlus. This is typically a matrix of numerical expression values, of which an example is provided in the Running ConsensusClusterPlus section of this document. When provided with a data matrix as d, ConsensusClusterPlus recalculates a distance matrix during each iteration. This recalculation is required if feature resampling is specified (pFeature less than 1). However with very large datasets (1,000's of items) and no feature resampling, this process can be time consuming and unnecessary. Alternatively, a pre-computed distance matrix can be provided as d, resulting in faster computation. An example of using a dist object as input follow below. <<>>= #example of providing a custom distance matrix as input: #dt = as.dist(1-cor(d,method="pearson")) #ConsensusClusterPlus(dt,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example2",distance="pearson",clusterAlg="hc") @ \item \textbf{distance}This option describes the distance metric to be used. A character value of one of the following metrics is accepted: pearson for (1 - Pearson correlation), spearman for (1 - Spearman correlation), euclidean, binary, maximum, canberra, minkowski. Alternatively a custom distance function cab be supplied for this argument, which accepts a numerical matrix (items as rows and features as columns) as input and returns a dist object. <<>>= #example of providing a custom distance function: #myDistFunc = function(x){ dist(x,method="manhattan")} #ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="myDistFunc",clusterAlg="pam") @ \item \textbf{clusterAlg} This option specifies the type of clustering algorithm to use: "hc" for hierarchical clustering, "pam" for partioning around medoids, "km" for kmeans. Alternatively, one can supply their own clustering function, which should accept a distance matrix and a cluster number as its arguments and returns vector of cluster assignments having the same order as the distance matrix columns. For example, this simple function executes divisive clustering using the diana function from the cluster package and returns the expected object. The last line shows an example of how this could be used. <<>>= #library(cluster) #dianaHook = function(this_dist,k){ #tmp = diana(this_dist,diss=TRUE) #assignment = cutree(tmp,k) #return(assignment) #} #ConsensusClusterPlus(d,clusterAlg="dianaHook",distance="pearson",...) @ \item \textbf{update on kmeans options} "km" option performs kmeans clustering directly on a data matrix, with items and features resampled. \item \textbf{innerLinkage} This option specifies the linkage method to use in iterative agglomerative hierarchical clustering. Not applicable to other cluster algorithms. \item \textbf{finalLinkage} This option specifies the linkage method to use in the final agglomerative hierarchical clustering. \item \textbf{distance} This option specifies the distance metric to use: "pearson" for 1-Pearson correlation coefficient, "spearman" for 1-Spearman correlation coefficient, "euclidean" for Euclidean distance. \item \textbf{tmyPal} character vector of ordered colors to use for consensus matrix. If not specified, a series of white to blue colors is used. \item \textbf{writeTable} boolean. If TRUE, write consensus matrices, ICL, and log to file. \item \textbf{weightsFeature} numerical vector of weights for sampling features. See help for further details. \item \textbf{weightsItem} numerical vector of weights for sampling items. See help for further details. \item \textbf{verbose} boolean. If TRUE, print messages to the screen to indicate progress. This is useful for large datasets. \end{itemize} \begin{thebibliography}{} \bibitem{monti}Monti, S., Tamayo, P., Mesirov, J., Golub, T. (2003) Consensus Clustering: A Resampling-Based Method for Class Discovery and Visualization of Gene Expression Microarray Data. Machine Learning, 52, 91$-$118. \bibitem{wilkerson}Wilkerson, M.D., Hayes, D.N. (2010). ConsensusClusterPlus: a class discovery tool with confidence assessments and item tracking. Bioinformatics, 2010 Jun 15;26(12):1572$-$3. \bibitem{hayes}Hayes, D.N, Monti, S., Parmigiani, G. et al. (2006) Gene Expression Profiling Reveals Reproducible Human Lung Adenocarcinoma Subtypes in Multiple Independent Patient Cohorts. Journal of Clinical Oncology, 24 (31) 5079$-$5090. \bibitem{verhaak}Verhaak, R., Hoadley, K., et al. (2010) Integrated genomic analysis identifies clinically relevant subtypes of glioblastoma characterized by abnormalities in PDGFRA, IDH1, EGFR and NF1. Cancer Cell. 17,1-13. \bibitem{gp}\texttt{http://www.broadinstitute.org/cancer/software/genepattern/} \end{thebibliography} \subsection{Changes} \begin{itemize} \item Version 1.0.1. Item-consensus calculation was corrected. Consensus matrix heat maps are now guaranteed to correspond to the scale. \item Version 1.5.1. Version 1.0.1 changes were re-incorporated into Bioc 2.9, 2.8. Version 1.0.1 was part of Bioc 2.6, but not part of Bioc 2.7. \item Version 1.11.1. For large datasets, the input data (d) was modified to also accept a distance matrix which reduces computation time, and plotBMP was added a plot type so that large consensus matrices can be plotted. Internal data structures were modified to increase speed. Distance metric options expanded ("maximum", "manhattan", "canberra", "binary","minkowski" from dist) and custom distance function option added. Partitioning Around Mediods clustering (from cluster package) was added as a clustering algorithm. Kmeans invocation was changed to run on the data matrix by default. Kmeans invocation on a distance matrix is now possible by kmdist. \item Version Version 1.35.0 Added CITATION file, updated references, and man pages. \item Version 1.51.1 Breif R code update for compatibilty with R 4.0. Deprecated kmdist clustering option. \end{itemize} \end{document} ConsensusClusterPlus/build/0000755000175000017500000000000014136067163015700 5ustar nileshnileshConsensusClusterPlus/build/vignette.rds0000644000175000017500000000032614136067163020240 0ustar nileshnileshb```b`add`b2 1# 'p+N+.-v)-.I- RzAyhdS)-/L!Ђ44ub-Z Xt%Z]?4-ީE0=(jؠjX2sRad9.nP&c0Gq?gQ~8jݣ9JI,IK+C^ConsensusClusterPlus/R/0000755000175000017500000000000014136047471015002 5ustar nileshnileshConsensusClusterPlus/R/ConsensusClusterPlus.R0000644000175000017500000006022114136047471021314 0ustar nileshnileshConsensusClusterPlus <- function( d=NULL, maxK = 3, reps=10, pItem=0.8, pFeature=1, clusterAlg="hc", title="untitled_consensus_cluster", innerLinkage="average", finalLinkage="average", distance="pearson", ml=NULL, tmyPal=NULL, seed=NULL, plot=NULL, writeTable=FALSE, weightsItem=NULL, weightsFeature=NULL, verbose=F, corUse="everything" ) { ##description: runs consensus subsamples if(is.null(seed)==TRUE){ seed=timeSeed = as.numeric(Sys.time()) } set.seed(seed) #distance=ifelse( inherits(d,"dist"), attr( d, "method" ), "pearson" ) if(is.null(ml)==TRUE){ if ( ! any(class( d ) %in% c( "dist", "matrix", "ExpressionSet" )) ) { stop("d must be a matrix, distance object or ExpressionSet (eset object)") } if ( inherits( d, "dist" ) ) { ## if d is a distance matrix, fix a few things so that they don't cause problems with the analysis ## Note, assumption is that if d is a distance matrix, the user doesn't want to sample over the row features if ( is.null( attr( d, "method" ) ) ) { attr( d, "method" ) <- distance <- "unknown - user-specified" } if ( is.null( distance ) || ( distance != attr( d, "method" ) ) ) { distance <- attr( d, "method" ) } if ( ( ! is.null( pFeature ) ) && ( pFeature < 1 ) ) { message( "Cannot use the pFeatures parameter when specifying a distance matrix as the data object, setting pFeature to 1.\n" ) pFeature <- 1 } if ( ! is.null( weightsFeature ) ) { message( "Cannot use the weightsFeature parameter when specifying a distance matrix as the data object\n" ) weightsFeature <- NULL } } else { if ( is.null( distance ) ) { ## we should never get here, but just in case message("no specified distance, setting distance to Pearson"); distance <- "pearson" } } if ( ( clusterAlg == "km" ) && inherits( distance, "character" ) && ( distance != "euclidean" ) ) { message( "Note: The km (kmeans) option only supports a euclidean distance metric when supplying a data matrix. If you want to cluster a distance matrix, use a different algorithm such as 'hc' or 'pam'. Changing distance to euclidean") distance <- 'euclidean' } if ( inherits( d,"ExpressionSet" ) ) { d <- exprs(d) } ml <- ccRun( d=d, maxK=maxK, repCount=reps, diss=inherits(d,"dist"), pItem=pItem, pFeature=pFeature, innerLinkage=innerLinkage, clusterAlg=clusterAlg, weightsFeature=weightsFeature, weightsItem=weightsItem, distance=distance, verbose=verbose, corUse=corUse) } res=list(); ##make results directory if((is.null(plot)==FALSE | writeTable) & !file.exists(paste(title,sep=""))){ dir.create(paste(title,sep="")) } ##write log file log <- matrix( ncol=2, byrow=T, c("title",title, "maxK",maxK, "input matrix rows",ifelse ( inherits( d, "matrix" ), nrow(d), "dist-mat" ), "input matrix columns",ifelse ( inherits( d, "matrix" ), ncol(d), ncol( as.matrix(d) ) ), "number of bootstraps",reps, "item subsampling proportion",pItem, "feature subsampling proportion",ifelse( is.null(pFeature), 1, pFeature ), "cluster algorithm",clusterAlg, "inner linkage type",innerLinkage, "final linkage type",finalLinkage, "correlation method",distance, "plot",if(is.null(plot)) NA else plot, "seed",if(is.null(seed)) NA else seed)) colnames(log) = c("argument","value") if(writeTable){ write.csv(file=paste(title,"/",title,".log.csv",sep=""), log,row.names=F) } if(is.null(plot)){ ##nothing }else if(plot=="pngBMP"){ bitmap(paste(title,"/","consensus%03d.png",sep="")) }else if(plot=="png"){ png(paste(title,"/","consensus%03d.png",sep="")) }else if (plot=="pdf"){ pdf(onefile=TRUE, paste(title,"/","consensus.pdf",sep="")) }else if (plot=="ps"){ postscript(onefile=TRUE, paste(title,"/","consensus.ps",sep="")) } colorList=list() colorM = rbind() #matrix of colors. #18 colors for marking different clusters thisPal <- c("#A6CEE3","#1F78B4","#B2DF8A","#33A02C","#FB9A99","#E31A1C","#FDBF6F","#FF7F00","#CAB2D6","#6A3D9A","#FFFF99","#B15928", "#bd18ea", #magenta "#2ef4ca", #aqua "#f4cced", #pink, "#f4cc03", #lightorange "#05188a", #navy, "#e5a25a", #light brown "#06f106", #bright green "#85848f", #med gray "#000000", #black "#076f25", #dark green "#93cd7f",#lime green "#4d0776", #dark purple "#ffffff" #white ) ##plot scale colBreaks=NA if(is.null(tmyPal)==TRUE){ colBreaks=10 tmyPal = myPal(colBreaks) }else{ colBreaks=length(tmyPal) } sc = cbind(seq(0,1,by=1/( colBreaks) )); rownames(sc) = sc[,1] sc = cbind(sc,sc) heatmap(sc, Colv=NA, Rowv=NA, symm=FALSE, scale='none', col=tmyPal, na.rm=TRUE,labRow=rownames(sc),labCol=F,main="consensus matrix legend") for (tk in 2:maxK){ if(verbose){ message(paste("consensus ",tk)) } fm = ml[[tk]] hc=hclust( as.dist( 1 - fm ), method=finalLinkage); message("clustered") ct = cutree(hc,tk) names(ct) = colnames(d) if(any(class(d)=="dist")){ names(ct) = colnames(as.matrix(d)) } c = fm colorList = setClusterColors(res[[tk-1]][[3]],ct,thisPal,colorList) pc = c pc=pc[hc$order,] #pc is matrix for plotting, same as c but is row-ordered and has names and extra row of zeros. if(!is.null(plot) && plot=="pngBMP"){ pc = pc[,hc$order ] #mod for no tree pc = rbind(pc,0) #no dendrogram if pngBMP oc = colorList[[1]][hc$order] #mod for no tree heatmap(pc, Colv = NA, Rowv = NA, symm = FALSE, scale = "none", col = tmyPal, na.rm = TRUE, labRow = F, labCol = F, mar = c(5, 5), main = paste("consensus matrix k=", tk, sep = ""), ColSideCol = oc) }else{ pc = rbind(pc,0) #former with tree: heatmap(pc, Colv=as.dendrogram(hc), Rowv=NA, symm=FALSE, scale='none', col=tmyPal, na.rm=TRUE,labRow=F,labCol=F,mar=c(5,5),main=paste("consensus matrix k=",tk,sep="") , ColSideCol=colorList[[1]]) } legend("topright",legend=unique(ct),fill=unique(colorList[[1]]),horiz=FALSE ) res[[tk]] = list(consensusMatrix=c,consensusTree=hc,consensusClass=ct,ml=ml[[tk]],clrs=colorList) colorM = rbind(colorM,colorList[[1]]) } CDF(ml) clusterTrackingPlot(colorM[,res[[length(res)]]$consensusTree$order]) if(is.null(plot)==FALSE){ dev.off(); } res[[1]] = colorM if(writeTable){ for(i in 2:length(res)){ write.csv(file=paste(title,"/",title,".k=",i,".consensusMatrix.csv",sep=""), res[[i]]$consensusMatrix) write.table(file=paste(title,"/",title,".k=",i,".consensusClass.csv",sep=""), res[[i]]$consensusClass,col.names = F,sep=",") } } return(res) } calcICL = function(res,title="untitled_consensus_cluster",plot=NULL,writeTable=FALSE){ #calculates and plots cluster consensus and item consensus cc=rbind() cci = rbind() sumRes=list() colorsArr=c() #make results directory if((is.null(plot)==FALSE | writeTable) & !file.exists(paste(title,sep=""))){ dir.create(paste(title,sep="")) } if(is.null(plot)){ #to screen }else if(plot=="pdf"){ pdf(onefile=TRUE, paste(title,"/","icl.pdf",sep="")) }else if(plot=="ps"){ postscript(onefile=TRUE, paste(title,"/","icl.ps",sep="")) }else if (plot=="png"){ png(paste(title,"/","icl%03d.png",sep="")) }else if (plot=="pngBMP"){ bitmap(paste(title,"/","icl%03d.png",sep="")) } par(mfrow=c(3,1),mar=c(4,3,2,0)) for (k in 2:length(res)){ #each k eiCols = c(); o = res[[k]] m = o$consensusMatrix m = triangle(m,mode=2) for (ci in sort(unique(o$consensusClass))){ #each cluster in k items = which(o$consensusClass==ci) nk = length(items) mk = sum( m[items,items], na.rm=T)/((nk*(nk-1))/2) cc=rbind(cc,c(k,ci,mk)) #cluster-consensus for (ei in rev(res[[2]]$consensusTree$order) ){ denom = if (ei %in% items) { nk - 1} else { nk } mei = sum( c(m[ei,items],m[items,ei]), na.rm=T)/denom # mean item consensus to a cluster. cci = rbind(cci,c(k,ci,ei,mei)) #cluster, cluster index, item index, item-consensus } eiCols = c(eiCols, rep(ci,length(o$consensusClass)) ) } cck = cci[which(cci[,1]==k),] #only plot the new k data. #group by item, order by cluster i w=lapply(split(cck,cck[,3]), function(x) { y=matrix(unlist(x),ncol=4); y[order(y[,2]),4] }) q = matrix(as.numeric(unlist(w)),ncol=length(w),byrow=F) q = q[,res[[2]]$consensusTree$order] #order by leave order of k=2 #q is a matrix of k rows and sample columns, values are item consensus of sample to the cluster. thisColors = unique(cbind(res[[k]]$consensusClass,res[[k]]$clrs[[1]])) thisColors=thisColors[order(as.numeric(thisColors[,1])),2] colorsArr=c(colorsArr,thisColors) sumRes[[k]] = rankedBarPlot(q,thisColors,cc=res[[k]]$consensusClass[res[[2]]$consensusTree$order],paste("k=",k,sep="") ) } ys=cs=lab=c() lastk=cc[1,1] for(i in 1:length(colorsArr)){ if(lastk != cc[i,1]){ ys=c(ys,0,0) cs=c(cs,NA,NA) lastk=cc[i,1] lab=c(lab,NA,NA) } ys=c(ys,cc[i,3]) cs=c(cs,colorsArr[i]) lab=c(lab,cc[i,1]) } names(ys) = lab par(mfrow=c(3,1),mar=c(4,3,2,0)) barplot(ys,col=cs,border=cs,main="cluster-consensus",ylim=c(0,1),las=1) if(is.null(plot)==FALSE){ dev.off() } colnames(cc) = c("k","cluster","clusterConsensus") colnames(cci) = c("k","cluster","item","itemConsensus") cci[,"item"] = names(res[[2]]$consensusClass)[ cci[,"item"] ] #type cci cci = data.frame( k=as.numeric(cci[,"k"]), cluster=as.numeric(cci[,"cluster"]), item=cci[,"item"], itemConsensus=as.numeric(cci[,"itemConsensus"])) #write to file. if(writeTable){ write.csv(file=paste(title,"/",title,".summary.cluster.consensus.csv",sep=""),row.names=F, cc) write.csv(file=paste(title,"/",title,".summary.item.consensus.csv",sep=""), row.names=F, cc) } return(list(clusterConsensus=cc,itemConsensus=cci)) } ccRun <- function( d=d, maxK=NULL, repCount=NULL, diss=inherits( d, "dist" ), pItem=NULL, pFeature=NULL, innerLinkage=NULL, distance=NULL, #ifelse( inherits(d,"dist"), attr( d, "method" ), "euclidean" ),@@@@@ clusterAlg=NULL, weightsItem=NULL, weightsFeature=NULL, verbose=NULL, corUse=NULL) { m = vector(mode='list', repCount) ml = vector(mode="list",maxK) n <- ifelse( diss, ncol( as.matrix(d) ), ncol(d) ) mCount = mConsist = matrix(c(0),ncol=n,nrow=n) ml[[1]] = c(0); if (is.null( distance ) ) distance <- 'euclidean' ## necessary if d is a dist object and attr( d, "method" ) == NULL acceptable.distance <- c( "euclidean", "maximum", "manhattan", "canberra", "binary","minkowski", "pearson", "spearman" ) main.dist.obj <- NULL if ( diss ){ main.dist.obj <- d ## reset the pFeature & weightsFeature params if they've been set (irrelevant if d is a dist matrix) if ( ( !is.null(pFeature) ) && ( pFeature < 1 ) ) { message( "user-supplied data is a distance matrix; ignoring user-specified pFeature parameter\n" ) pFeature <- 1 # set it to 1 to avoid problems with sampleCols } if ( ! is.null( weightsFeature ) ) { message( "user-supplied data is a distance matrix; ignoring user-specified weightsFeature parameter\n" ) weightsFeature <- NULL # set it to NULL to avoid problems with sampleCols } } else { ## d is a data matrix ## we're not sampling over the features if ( ( clusterAlg != "km" ) && ( is.null( pFeature ) || ( ( pFeature == 1 ) && is.null( weightsFeature ) ) ) ) { ## only generate a main.dist.object IFF 1) d is a matrix, 2) we're not sampling the features, and 3) the algorithm isn't 'km' if ( inherits( distance, "character" ) ) { if ( ! distance %in% acceptable.distance & ( class(try(get(distance),silent=T))!="function") ) stop("unsupported distance.") if(distance=="pearson" | distance=="spearman"){ main.dist.obj <- as.dist( 1-cor(d,method=distance,use=corUse )) }else if( class(try(get(distance),silent=T))=="function"){ main.dist.obj <- get(distance)( t( d ) ) }else{ main.dist.obj <- dist( t(d), method=distance ) } attr( main.dist.obj, "method" ) <- distance } else stop("unsupported distance specified.") } else { ## pFeature < 1 or a weightsFeature != NULL ## since d is a data matrix, the user wants to sample over the gene features, so main.dist.obj is left as NULL } } for (i in 1:repCount){ if(verbose){ message(paste("random subsample",i)); } ## take expression matrix sample, samples and genes sample_x = sampleCols( d, pItem, pFeature, weightsItem, weightsFeature ) this_dist = NA if ( ! is.null( main.dist.obj ) ) { boot.cols <- sample_x$subcols this_dist <- as.matrix( main.dist.obj )[ boot.cols, boot.cols ] if ( clusterAlg != "km" ) { ## if this isn't kmeans, then convert to a distance object this_dist <- as.dist( this_dist ) attr( this_dist, "method" ) <- attr( main.dist.obj, "method" ) } } else { ## if main.dist.obj is NULL, then d is a data matrix, and either: ## 1) clusterAlg is 'km' ## 2) pFeatures < 1 or weightsFeatures have been specified, or ## 3) both ## so we can't use a main distance object and for every iteration, we will have to re-calculate either ## 1) the distance matrix (because we're also sampling the features as well), or ## 2) the submat (if using km) if ( clusterAlg != "km" ) { if ( ! distance %in% acceptable.distance & ( class(try(get(distance),silent=T))!="function") ) stop("unsupported distance.") if( ( class(try(get(distance),silent=T))=="function") ){ this_dist <- get(distance)( t( sample_x$submat ) ) }else{ if( distance == "pearson" | distance == "spearman"){ this_dist <- as.dist( 1-cor(sample_x$submat,use=corUse,method=distance) ) }else{ this_dist <- dist( t( sample_x$submat ), method= distance ) } } attr( this_dist, "method" ) <- distance } else { ## if we're not sampling the features, then grab the colslice if ( is.null( pFeature ) || ( ( pFeature == 1 ) && is.null( weightsFeature ) ) ) { this_dist <- d[, sample_x$subcols ] } else { if ( is.na( sample_x$submat ) ) { stop( "error submat is NA" ) } this_dist <- sample_x$submat } } } ## cluster samples for HC. this_cluster=NA if(clusterAlg=="hc"){ this_cluster = hclust( this_dist, method=innerLinkage) } ##mCount is possible number of times that two sample occur in same random sample, independent of k ##mCount stores number of times a sample pair was sampled together. mCount <- connectivityMatrix( rep( 1,length(sample_x[[3]])), mCount, sample_x[[3]] ) ##use samples for each k for (k in 2:maxK){ if(verbose){ message(paste(" k =",k)) } if (i==1){ ml[[k]] = mConsist #initialize } this_assignment=NA if(clusterAlg=="hc"){ ##prune to k for hc this_assignment = cutree(this_cluster,k) }else if(clusterAlg=="km"){ ##this_dist should now be a matrix corresponding to the result from sampleCols this_assignment <- kmeans( t( this_dist ), k, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong") )$cluster }else if ( clusterAlg == "pam" ) { this_assignment <- pam( x=this_dist, k, diss=TRUE, metric=distance, cluster.only=TRUE ) } else{ ##optional cluterArg Hook. this_assignment <- get(clusterAlg)(this_dist, k) } ##add to tally ml[[k]] <- connectivityMatrix( this_assignment, ml[[k]], sample_x[[3]] ) } } ##consensus fraction res = vector(mode="list",maxK) for (k in 2:maxK){ ##fill in other half of matrix for tally and count. tmp = triangle(ml[[k]],mode=3) tmpCount = triangle(mCount,mode=3) res[[k]] = tmp / tmpCount res[[k]][which(tmpCount==0)] = 0 } message("end fraction") return(res) } connectivityMatrix <- function( clusterAssignments, m, sampleKey){ ##input: named vector of cluster assignments, matrix to add connectivities ##output: connectivity matrix names( clusterAssignments ) <- sampleKey cls <- lapply( unique( clusterAssignments ), function(i) as.numeric( names( clusterAssignments[ clusterAssignments %in% i ] ) ) ) #list samples by clusterId for ( i in 1:length( cls ) ) { nelts <- 1:ncol( m ) cl <- as.numeric( nelts %in% cls[[i]] ) ## produces a binary vector updt <- outer( cl, cl ) #product of arrays with * function; with above indicator (1/0) statement updates all cells to indicate the sample pair was observed int the same cluster; m <- m + updt } return(m) } sampleCols <- function( d, pSamp=NULL, pRow=NULL, weightsItem=NULL, weightsFeature=NULL ){ ## returns a list with the sample columns, as well as the sub-matrix & sample features (if necessary) ## if no sampling over the features is performed, the submatrix & sample features are returned as NAs ## to reduce memory overhead space <- ifelse( inherits( d, "dist" ), ncol( as.matrix(d) ), ncol(d) ) sampleN <- floor(space*pSamp) sampCols <- sort( sample(space, sampleN, replace = FALSE, prob = weightsItem) ) this_sample <- sampRows <- NA if ( inherits( d, "matrix" ) ) { if ( (! is.null( pRow ) ) && ( (pRow < 1 ) || (! is.null( weightsFeature ) ) ) ) { ## only sample the rows and generate a sub-matrix if we're sampling over the row/gene/features space = nrow(d) sampleN = floor(space*pRow) sampRows = sort( sample(space, sampleN, replace = FALSE, prob = weightsFeature) ) this_sample <- d[sampRows,sampCols] dimnames(this_sample) <- NULL } else { ## do nothing } } return( list( submat=this_sample, subrows=sampRows, subcols=sampCols ) ) } CDF=function(ml,breaks=100){ #plot CDF distribution plot(c(0),xlim=c(0,1),ylim=c(0,1),col="white",bg="white",xlab="consensus index",ylab="CDF",main="consensus CDF", las=2) k=length(ml) this_colors = rainbow(k-1) areaK = c() for (i in 2:length(ml)){ v=triangle(ml[[i]],mode=1) #empirical CDF distribution. default number of breaks is 100 h = hist(v, plot=FALSE, breaks=seq(0,1,by=1/breaks)) h$counts = cumsum(h$counts)/sum(h$counts) #calculate area under CDF curve, by histogram method. thisArea=0 for (bi in 1:(length(h$breaks)-1)){ thisArea = thisArea + h$counts[bi]*(h$breaks[bi+1]-h$breaks[bi]) #increment by height by width bi = bi + 1 } areaK = c(areaK,thisArea) lines(h$mids,h$counts,col=this_colors[i-1],lwd=2,type='l') } legend(0.8,0.5,legend=paste(rep("",k-1),seq(2,k,by=1),sep=""),fill=this_colors) #plot area under CDF change. deltaK=areaK[1] #initial auc at k=2 for(i in 2:(length(areaK))){ #proportional increase relative to prior K. deltaK = c(deltaK,( areaK[i] - areaK[i-1])/areaK[i-1]) } plot(1+(1:length(deltaK)),y=deltaK,xlab="k",ylab="relative change in area under CDF curve",main="Delta area",type="b") } myPal = function(n=10){ #returns n colors seq = rev(seq(0,255,by=255/(n))) palRGB = cbind(seq,seq,255) rgb(palRGB,maxColorValue=255) } setClusterColors = function(past_ct,ct,colorU,colorList){ #description: sets common color of clusters between different K newColors = c() if(length(colorList)==0){ #k==2 newColors = colorU[ct] colori=2 }else{ newColors = rep(NULL,length(ct)) colori = colorList[[2]] mo=table(past_ct,ct) m=mo/apply(mo,1,sum) for(tci in 1:ncol(m)){ # for each cluster maxC = max(m[,tci]) pci = which(m[,tci] == maxC) if( sum(m[,tci]==maxC)==1 & max(m[pci,])==maxC & sum(m[pci,]==maxC)==1 ) { #if new column maximum is unique, same cell is row maximum and is also unique ##Note: the greatest of the prior clusters' members are the greatest in a current cluster's members. newColors[which(ct==tci)] = unique(colorList[[1]][which(past_ct==pci)]) # one value }else{ #add new color. colori=colori+1 newColors[which(ct==tci)] = colorU[colori] } } } return(list(newColors,colori,unique(newColors) )) } clusterTrackingPlot = function(m){ #description: plots cluster tracking plot #input: m - matrix where rows are k, columns are samples, and values are cluster assignments. plot(NULL,xlim=c(-0.1,1),ylim=c(0,1),axes=FALSE,xlab="samples",ylab="k",main="tracking plot") for(i in 1:nrow(m)){ rect( xleft=seq(0,1-1/ncol(m),by=1/ncol(m)), ybottom=rep(1-i/nrow(m),ncol(m)) , xright=seq(1/ncol(m),1,by=1/ncol(m)), ytop=rep(1-(i-1)/nrow(m),ncol(m)), col=m[i,],border=NA) } #hatch lines to indicate samples xl = seq(0,1-1/ncol(m),by=1/ncol(m)) segments( xl, rep(-0.1,ncol(m)) , xl, rep(0,ncol(m)), col="black") #** alt white and black color? ypos = seq(1,0,by=-1/nrow(m))-1/(2*nrow(m)) text(x=-0.1,y=ypos[-length(ypos)],labels=seq(2,nrow(m)+1,by=1)) } triangle = function(m,mode=1){ #mode=1 for CDF, vector of lower triangle. #mode==3 for full matrix. #mode==2 for calcICL; nonredundant half matrix coun #mode!=1 for summary n=dim(m)[1] nm = matrix(0,ncol=n,nrow=n) fm = m nm[upper.tri(nm)] = m[upper.tri(m)] #only upper half fm = t(nm)+nm diag(fm) = diag(m) nm=fm nm[upper.tri(nm)] = NA diag(nm) = NA vm = m[lower.tri(nm)] if(mode==1){ return(vm) #vector }else if(mode==3){ return(fm) #return full matrix }else if(mode == 2){ return(nm) #returns lower triangle and no diagonal. no double counts. } } rankedBarPlot=function(d,myc,cc,title){ colors = rbind() #each row is a barplot series byRank = cbind() spaceh = 0.1 #space between bars for(i in 1:ncol(d)){ byRank = cbind(byRank,sort(d[,i],na.last=F)) colors = rbind(colors,order(d[,i],na.last=F)) } maxH = max(c(1.5,apply(byRank,2,sum)),na.rm=T) #maximum height of graph #barplot largest to smallest so that smallest is in front. barp = barplot( apply(byRank,2,sum) , col=myc[colors[,1]] ,space=spaceh,ylim=c(0,maxH),main=paste("item-consensus", title),border=NA,las=1 ) for(i in 2:nrow(byRank)){ barplot( apply(matrix(byRank[i:nrow(byRank),],ncol=ncol(byRank)) ,2,sum), space=spaceh,col=myc[colors[,i]],ylim=c(0,maxH), add=T,border=NA,las=1 ) } xr=seq(spaceh,ncol(d)+ncol(d)*spaceh,(ncol(d)+ncol(d)*spaceh)/ncol(d) ) #class labels as asterisks text("*",x=xr+0.5,y=maxH,col=myc[cc],cex=1.4) #rect(xr,1.4,xr+1,1.5,col=myc[cc] ) } ConsensusClusterPlus/inst/0000755000175000017500000000000014136067163015556 5ustar nileshnileshConsensusClusterPlus/inst/CITATION0000644000175000017500000000104414136047471016712 0ustar nileshnileshcitEntry(entry="Article", author = "Wilkerson, Matthew D. and Hayes, D. Neil", title = "ConsensusClusterPlus: a class discovery tool with confidence assessments and item tracking", volume = "26", number = "12", pages = "1572-1573", year = "2010", url = "http://bioinformatics.oxfordjournals.org/content/26/12/1572.abstract", journal = "Bioinformatics", textVersion="Wilkerson, M.D., Hayes, D.N. (2010). ConsensusClusterPlus: a class discovery tool with confidence assessments and item tracking. Bioinformatics, 2010 Jun 15;26(12):1572-3." ) ConsensusClusterPlus/inst/doc/0000755000175000017500000000000014136067163016323 5ustar nileshnileshConsensusClusterPlus/inst/doc/ConsensusClusterPlus.R0000644000175000017500000001256014136067163022640 0ustar nileshnilesh### R code from vignette source 'ConsensusClusterPlus.Rnw' ################################################### ### code chunk number 1: ConsensusClusterPlus.Rnw:37-41 ################################################### library(ALL) data(ALL) d=exprs(ALL) d[1:5,1:5] ################################################### ### code chunk number 2: ConsensusClusterPlus.Rnw:48-50 ################################################### mads=apply(d,1,mad) d=d[rev(order(mads))[1:5000],] ################################################### ### code chunk number 3: ConsensusClusterPlus.Rnw:55-56 ################################################### d = sweep(d,1, apply(d,1,median,na.rm=T)) ################################################### ### code chunk number 4: ConsensusClusterPlus.Rnw:70-74 ################################################### library(ConsensusClusterPlus) title=tempdir() results = ConsensusClusterPlus(d,maxK=6,reps=50,pItem=0.8,pFeature=1, title=title,clusterAlg="hc",distance="pearson",seed=1262118388.71279,plot="png") ################################################### ### code chunk number 5: ConsensusClusterPlus.Rnw:77-79 ################################################### cat(sprintf("\\graphicspath{{%s}}", paste(gsub("[\\]","/",title),"/",sep=""))) cat("\n") ################################################### ### code chunk number 6: ConsensusClusterPlus.Rnw:84-96 ################################################### #consensusMatrix - the consensus matrix. #For .example, the top five rows and columns of results for k=2: results[[2]][["consensusMatrix"]][1:5,1:5] #consensusTree - hclust object results[[2]][["consensusTree"]] #consensusClass - the sample classifications results[[2]][["consensusClass"]][1:5] #ml - consensus matrix result #clrs - colors for cluster ################################################### ### code chunk number 7: ConsensusClusterPlus.Rnw:104-105 ################################################### icl = calcICL(results,title=title,plot="png") ################################################### ### code chunk number 8: ConsensusClusterPlus.Rnw:109-110 ################################################### icl[["clusterConsensus"]] ################################################### ### code chunk number 9: ConsensusClusterPlus.Rnw:113-114 ################################################### icl[["itemConsensus"]][1:5,] ################################################### ### code chunk number 10: ConsensusClusterPlus.Rnw:125-126 ################################################### cat("\\includegraphics[width=60mm]{consensus001.png}",sep="") ################################################### ### code chunk number 11: ConsensusClusterPlus.Rnw:135-137 ################################################### cat("\\includegraphics[width=60mm]{consensus002.png}",sep="") cat("\\includegraphics[width=60mm]{consensus003.png}",sep="") ################################################### ### code chunk number 12: ConsensusClusterPlus.Rnw:140-142 ################################################### cat("\\includegraphics[width=60mm]{consensus004.png}",sep="") cat("\\includegraphics[width=60mm]{consensus005.png}",sep="") ################################################### ### code chunk number 13: ConsensusClusterPlus.Rnw:148-149 ################################################### cat("\\includegraphics[width=60mm]{consensus007.png}",sep="") ################################################### ### code chunk number 14: ConsensusClusterPlus.Rnw:156-157 ################################################### cat("\\includegraphics[width=60mm]{consensus008.png}",sep="") ################################################### ### code chunk number 15: ConsensusClusterPlus.Rnw:167-168 ################################################### cat("\\includegraphics[width=60mm]{consensus009.png}",sep="") ################################################### ### code chunk number 16: ConsensusClusterPlus.Rnw:178-179 ################################################### cat("\\includegraphics[width=60mm]{icl003.png}",sep="") ################################################### ### code chunk number 17: ConsensusClusterPlus.Rnw:188-189 ################################################### cat("\\includegraphics[width=60mm]{icl001.png}",sep="") ################################################### ### code chunk number 18: ConsensusClusterPlus.Rnw:203-206 ################################################### #example of providing a custom distance matrix as input: #dt = as.dist(1-cor(d,method="pearson")) #ConsensusClusterPlus(dt,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example2",distance="pearson",clusterAlg="hc") ################################################### ### code chunk number 19: ConsensusClusterPlus.Rnw:209-212 ################################################### #example of providing a custom distance function: #myDistFunc = function(x){ dist(x,method="manhattan")} #ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="myDistFunc",clusterAlg="pam") ################################################### ### code chunk number 20: ConsensusClusterPlus.Rnw:216-223 ################################################### #library(cluster) #dianaHook = function(this_dist,k){ #tmp = diana(this_dist,diss=TRUE) #assignment = cutree(tmp,k) #return(assignment) #} #ConsensusClusterPlus(d,clusterAlg="dianaHook",distance="pearson",...) ConsensusClusterPlus/inst/doc/ConsensusClusterPlus.Rnw0000644000175000017500000004274614136047471023216 0ustar nileshnilesh% \VignetteIndexEntry{ConsensusClusterPlus Tutorial} % \VignettePackage{ConsensusClusterPlus} \documentclass{article} \usepackage{graphicx} \begin{document} \title{ConsensusClusterPlus (Tutorial)} \author{ Matthew D. Wilkerson} \maketitle \SweaveOpts{keep.source=TRUE} \section{Summary} \texttt{ConsensusClusterPlus} is a tool for unsupervised class discovery. This document provides a tutorial of how to use \texttt{ConsensusClusterPlus}. \section{Brief description of \textit{Consensus Clustering} } \textit{Consensus Clustering} \cite{monti} is a method that provides quantitative evidence for determining the number and membership of possible clusters within a dataset, such as microarray gene expression. This method has gained popularity in cancer genomics, where new molecular subclasses of disease have been discovered \cite{hayes,verhaak}. The \textit{Consensus Clustering} method involves subsampling from a set of items, such as microarrays, and determines clusterings of specified cluster counts (\textit{k}). Then, pairwise \textit{consensus} values, the proportion that two items occupied the same cluster out of the number of times they occurred in the same subsample, are calculated and stored in a symmetrical \textit{consensus matrix} for each \textit{k}. The \textit{consensus matrix} is summarized in several graphical displays that enable a user to decide upon a reasonable cluster number and membership. A web-based version of \textit{Consensus Clustering} is publicly available \cite{gp}. For a formal description, see \cite{monti}. \\ \\ \texttt{ConsensusClusterPlus}\cite{wilkerson} implements the \textit{Consensus Clustering} method in \textit{R} and extends it with new features and graphical outputs that can aid users in class discovery. \section{Tutorial} There are three main steps to use \texttt{ConsensusClusterPlus}: preparing input data, running the program, and generating cluster-consensus and item-consensus. \subsection{Preparing input data} The first step is to gather some data for cluster analysis. These data could be the result of an experiment such as a mRNA expression microarray or immunohistochemical staining intensities. The input data format is a matrix where columns are samples (items), rows are features and cells are numerical values. For this tutorial, we use the ALL gene expression data from the ALL library. You can see the matrix d is already in the proper format. The column and row names, which correspond to the sample and gene names, will be maintained in the output. <<>>= library(ALL) data(ALL) d=exprs(ALL) d[1:5,1:5] @ For the purpose of selecting the most informative genes for class detection, we reduce the dataset to the top 5,000 most variable genes, measured by median absolute deviation. The choice of 5,000 genes and MAD can be substituted with other statistical variability filters. Users can decide what type of filtering to use or to skip filtering. Another choice would be to supply weights for sampling genes see weightsFeatures in Additional Options. <<>>= mads=apply(d,1,mad) d=d[rev(order(mads))[1:5000],] @ If one wants to transform or normalize their data, they can easily do so using other Bioconductor methods or a simple statement. We chose to use the default settings of the agglomerative hierarchical clustering algorithm using Pearson correlation distance, so it is appropriate to gene median center d using this simple statement: <<>>= d = sweep(d,1, apply(d,1,median,na.rm=T)) @ d is now ready for \texttt{ConsensusClusterPlus} analysis. \subsection{Running \texttt{ConsensusClusterPlus}} For this tutorial, we selected 80\% item resampling (pItem), 80\% gene resampling (pFeature), a maximum evalulated k of 6 so that cluster counts of 2,3,4,5,6 are evaluated (maxK), 50 resamplings (reps), agglomerative hierarchical clustering algorithm (clusterAlg) upon 1- Pearson correlation distances (distance), gave our output a title (title), and opted to have graphical results written to png files. We also used a specific random seed so that this example is repeatable (seed). \\ \\ ** Note: In practice, a much higher reps is recommended such as 1,000 and a higher cluster count such as 20. <>= library(ConsensusClusterPlus) title=tempdir() results = ConsensusClusterPlus(d,maxK=6,reps=50,pItem=0.8,pFeature=1, title=title,clusterAlg="hc",distance="pearson",seed=1262118388.71279,plot="png") @ <>= cat(sprintf("\\graphicspath{{%s}}", paste(gsub("[\\]","/",title),"/",sep=""))) cat("\n") @ The output of \texttt{ConsensusClusterPlus} is a list, in which the element of the list corresponds to results from the \textit{kth} cluster, for instance, results[[2]] is the results result of \textit{k}=2. The seed option specifies a random number seed and is used here for reproducibility of this tutorial. These list elements have the following elements: <>= #consensusMatrix - the consensus matrix. #For .example, the top five rows and columns of results for k=2: results[[2]][["consensusMatrix"]][1:5,1:5] #consensusTree - hclust object results[[2]][["consensusTree"]] #consensusClass - the sample classifications results[[2]][["consensusClass"]][1:5] #ml - consensus matrix result #clrs - colors for cluster @ See additional options section for further description of clustering algorithms and distance metrics. \subsection{Generating cluster and item consensus} After executing \texttt{ConsensusClusterPlus}, one can optionally calculate cluster-consensus and item-consensus results by: <<>>= icl = calcICL(results,title=title,plot="png") @ calcICL returns a list of two elements: <<>>= icl[["clusterConsensus"]] @ <<>>= icl[["itemConsensus"]][1:5,] @ \section{Graphic Output Description} The output of \texttt{ConsensusClusterPlus} consists of graphics, which are written to the screen, 'pdf' file, or 'png' files depending on the plot option; and numerical data which can be optionally written to a CSV file depending on the writeTable option. For large datasets, graphical displays can be quite large and plotting the consensus dendrogram above the consensus matrices may not be possible. If your dataset is large, the plot option 'pngBMP' which does not produce the consensus matrix dendrogram and uses the bitmap function rather png. Bitmap is often available natively on linux systems but can potentially be installed on other systems. \subsection{Consensus Matrices} The first graphic shows the consensus color legend. \\ <>= cat("\\includegraphics[width=60mm]{consensus001.png}",sep="") @ \\ The remaining graphics are heatmaps of the consensus matrices for \textit{k} = 2, 3, 4, 5 \cite{monti}. The consensus matrices have items as both rows and columns, which are microarrays in this example, and where consensus values range from 0 (never clustered together) to 1 (always clustered together) marked by white to dark blue. The consensus matrices are ordered by the consensus clustering which is depicted as a dendrogram atop the heatmap. To aid analysis, the cluster memberships are marked by colored rectangles between the dendrogram and heatmap according to a legend within the graphic. This enables a user to compare a clusters' member count in the context of their consensus. \\ <>= cat("\\includegraphics[width=60mm]{consensus002.png}",sep="") cat("\\includegraphics[width=60mm]{consensus003.png}",sep="") @ \\ <>= cat("\\includegraphics[width=60mm]{consensus004.png}",sep="") cat("\\includegraphics[width=60mm]{consensus005.png}",sep="") @ \\ \subsection{Consensus Cumulative Distribution Function (CDF) Plot} This graphic shows the cumulative distribution functions \cite{monti} of the consensus matrix for each \textit{k} (indicated by colors), estimated by a histogram of 100 bins. This figure allows a user to determine at what number of clusters, \textit{k}, the CDF reaches an approximate maximum, thus consensus and cluster confidence is at a maximum at this \textit{k}. See \cite{monti} for further details intepretation. \\ <>= cat("\\includegraphics[width=60mm]{consensus007.png}",sep="") @ \\ \subsection{Delta Area Plot} This graphic shows the relative change in area under the CDF curve \cite{monti} comparing \textit{k} and \textit{k} $-$ 1. For \textit{k} = 2, there is no \textit{k} -1, so the total area under the curve rather than the relative increase is plotted. This plot allows a user to determine the relative increase in consensus and determine \textit{k} at which there is no appreciable increase. See \cite{monti} for intepretation. \\ <>= cat("\\includegraphics[width=60mm]{consensus008.png}",sep="") @ \\ \subsection{Tracking Plot} This graphic shows the cluster assignment of items (columns) for each \textit{k} (rows) by color. The colors correspond to the colors of the consensus matrix class asssignments. Hatch marks below the plot indicate items/samples. This plot provides a view of item cluster membership across different \textit{k} and enables a user to track the history of clusters relative to earlier clusters. Items that change clusters often (changing colors within a column) are indicative of unstable membership. Clusters with an abundance of unstable members suggest an unstable cluster. \\ <>= cat("\\includegraphics[width=60mm]{consensus009.png}",sep="") @ \\ \subsection{Cluster-Consensus Plot} This graphic shows the \textit{cluster-consensus} value of clusters at each \textit{k}. This is the mean of all pairwise consensus values between a cluster's members. Cluster is indicated by color following the same color scheme as the cluster matrices and tracking plots. The bars are grouped by \textit{k} which is marked on the horizontal axis. High values indicate a cluster has high stability and low values indicate a cluster has low stability. This plot enables a user to view the mean cluster-consensus among clusters at a given \textit{k} and compare values of clusters across different \textit{k} via the color scheme. \\ <>= cat("\\includegraphics[width=60mm]{icl003.png}",sep="") @ \\ \subsection{Item-Consensus Plot} \textit{Item-consensus} values are the mean consensus of an item with all items in a particular cluster. An item has \textit{k} item-consensus values corresponding to each cluster at a particular \textit{k}. These values are depicted in barplots for each \textit{k}. Samples are stacked bars. \textit{Item-consensus} values are indicated by the heights of the colored portion of the bars, whose color corresponds to the common color scheme. Bars' rectangles are ordered by increasing value from bottom to top. The asterisks at the top indicate the consensus cluster for each item. \\ <>= cat("\\includegraphics[width=60mm]{icl001.png}",sep="") @ \\ This plot provides a view of item-consensus across all other clusters at a given \textit{k}. This enables a user to see if a sample is a very "pure" member of a cluster or if it shares high consensus to multiple clusters (large rectangles in a column of multiple colors), suggesting that it is an unstable or "unpure" member. These values could be used to select "core" samples similar to \cite{verhaak} that are highly representative of a cluster. Further, this plot can aid cluster number decisions. For instance, if a cluster consists mainly of members with very "unpure" items, then this evidence could be used to support a maximum cluster number at 1 below this \textit{k} or this evidence could support that this cluster is an outlier cluster. Decisions such as these are best to be made by the user in conjunction with other evidence such as consensus matrices, tracking plots, etc. \\ \\ \subsection{Additional details on options for \texttt{ConsensusClusterPlus} function} \begin{itemize} \item \textbf{d} This option specifies the data to be used in ConsensusClusterPlus. This is typically a matrix of numerical expression values, of which an example is provided in the Running ConsensusClusterPlus section of this document. When provided with a data matrix as d, ConsensusClusterPlus recalculates a distance matrix during each iteration. This recalculation is required if feature resampling is specified (pFeature less than 1). However with very large datasets (1,000's of items) and no feature resampling, this process can be time consuming and unnecessary. Alternatively, a pre-computed distance matrix can be provided as d, resulting in faster computation. An example of using a dist object as input follow below. <<>>= #example of providing a custom distance matrix as input: #dt = as.dist(1-cor(d,method="pearson")) #ConsensusClusterPlus(dt,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example2",distance="pearson",clusterAlg="hc") @ \item \textbf{distance}This option describes the distance metric to be used. A character value of one of the following metrics is accepted: pearson for (1 - Pearson correlation), spearman for (1 - Spearman correlation), euclidean, binary, maximum, canberra, minkowski. Alternatively a custom distance function cab be supplied for this argument, which accepts a numerical matrix (items as rows and features as columns) as input and returns a dist object. <<>>= #example of providing a custom distance function: #myDistFunc = function(x){ dist(x,method="manhattan")} #ConsensusClusterPlus(d,maxK=4,reps=100,pItem=0.8,pFeature=1,title="example3",distance="myDistFunc",clusterAlg="pam") @ \item \textbf{clusterAlg} This option specifies the type of clustering algorithm to use: "hc" for hierarchical clustering, "pam" for partioning around medoids, "km" for kmeans. Alternatively, one can supply their own clustering function, which should accept a distance matrix and a cluster number as its arguments and returns vector of cluster assignments having the same order as the distance matrix columns. For example, this simple function executes divisive clustering using the diana function from the cluster package and returns the expected object. The last line shows an example of how this could be used. <<>>= #library(cluster) #dianaHook = function(this_dist,k){ #tmp = diana(this_dist,diss=TRUE) #assignment = cutree(tmp,k) #return(assignment) #} #ConsensusClusterPlus(d,clusterAlg="dianaHook",distance="pearson",...) @ \item \textbf{update on kmeans options} "km" option performs kmeans clustering directly on a data matrix, with items and features resampled. \item \textbf{innerLinkage} This option specifies the linkage method to use in iterative agglomerative hierarchical clustering. Not applicable to other cluster algorithms. \item \textbf{finalLinkage} This option specifies the linkage method to use in the final agglomerative hierarchical clustering. \item \textbf{distance} This option specifies the distance metric to use: "pearson" for 1-Pearson correlation coefficient, "spearman" for 1-Spearman correlation coefficient, "euclidean" for Euclidean distance. \item \textbf{tmyPal} character vector of ordered colors to use for consensus matrix. If not specified, a series of white to blue colors is used. \item \textbf{writeTable} boolean. If TRUE, write consensus matrices, ICL, and log to file. \item \textbf{weightsFeature} numerical vector of weights for sampling features. See help for further details. \item \textbf{weightsItem} numerical vector of weights for sampling items. See help for further details. \item \textbf{verbose} boolean. If TRUE, print messages to the screen to indicate progress. This is useful for large datasets. \end{itemize} \begin{thebibliography}{} \bibitem{monti}Monti, S., Tamayo, P., Mesirov, J., Golub, T. (2003) Consensus Clustering: A Resampling-Based Method for Class Discovery and Visualization of Gene Expression Microarray Data. Machine Learning, 52, 91$-$118. \bibitem{wilkerson}Wilkerson, M.D., Hayes, D.N. (2010). ConsensusClusterPlus: a class discovery tool with confidence assessments and item tracking. Bioinformatics, 2010 Jun 15;26(12):1572$-$3. \bibitem{hayes}Hayes, D.N, Monti, S., Parmigiani, G. et al. (2006) Gene Expression Profiling Reveals Reproducible Human Lung Adenocarcinoma Subtypes in Multiple Independent Patient Cohorts. Journal of Clinical Oncology, 24 (31) 5079$-$5090. \bibitem{verhaak}Verhaak, R., Hoadley, K., et al. (2010) Integrated genomic analysis identifies clinically relevant subtypes of glioblastoma characterized by abnormalities in PDGFRA, IDH1, EGFR and NF1. Cancer Cell. 17,1-13. \bibitem{gp}\texttt{http://www.broadinstitute.org/cancer/software/genepattern/} \end{thebibliography} \subsection{Changes} \begin{itemize} \item Version 1.0.1. Item-consensus calculation was corrected. Consensus matrix heat maps are now guaranteed to correspond to the scale. \item Version 1.5.1. Version 1.0.1 changes were re-incorporated into Bioc 2.9, 2.8. Version 1.0.1 was part of Bioc 2.6, but not part of Bioc 2.7. \item Version 1.11.1. For large datasets, the input data (d) was modified to also accept a distance matrix which reduces computation time, and plotBMP was added a plot type so that large consensus matrices can be plotted. Internal data structures were modified to increase speed. Distance metric options expanded ("maximum", "manhattan", "canberra", "binary","minkowski" from dist) and custom distance function option added. Partitioning Around Mediods clustering (from cluster package) was added as a clustering algorithm. Kmeans invocation was changed to run on the data matrix by default. Kmeans invocation on a distance matrix is now possible by kmdist. \item Version Version 1.35.0 Added CITATION file, updated references, and man pages. \item Version 1.51.1 Breif R code update for compatibilty with R 4.0. Deprecated kmdist clustering option. \end{itemize} \end{document} ConsensusClusterPlus/inst/doc/ConsensusClusterPlus.pdf0000644000175000017500000102574214136067163023217 0ustar nileshnilesh%PDF-1.5 % 3 0 obj << /Length 1978 /Filter /FlateDecode >> stream xɒDѮȁ*CCbYƒ _ۺ%ٚ `׷~.TkqJg,2ƦԋfiyRjev?5>y'2I#I*/!vlwtP*.T#'v6c?;-bl c299uL3 Y('&6evET="V0N৅V@EbYEp*R i= lQe3E*.b$d9A¦rQ|bM%Eh(?%jA#)gO t? ?Q%(yUXavD&S!ˆy"6aA dAĨZ.rk̲?Zy}_x"kg̭2Uy뺴ly܂'yZIy?hjaXDNwH\ d=H*30#>#QAL#]aA[IYl=?dh278pl9|ᣄ>uо5@h"F ,g !$#i8%5x]"4X""EVS{ֺgnF`T*1uSS*_3&.:rܸihL΍Zq&FyTfHDe k*5T&hC4A / ނdP\=xg K;^Nĭ7[gihy _v}lK~hlg>TolncZȁvƽᾂ^3ڡ w8zpy/I%FJ֫֫Źј,PN,;±n<|*-" w(Rmn0=X{G=!br!ӗ ǖ]V?YFg⇬z-DK탢?-֛o  endstream endobj 15 0 obj << /Length 2392 /Filter /FlateDecode >> stream xڝYm_"aiA .Y钽du(Vc 3;צM>~~w3̠߭$ s[l&V q7qE34NZ:M$A|;LPW#|Xaiŕ&.¤yG$Y)~@,*ہKy֞V"LhP{ ^9z!d7Y\n 5c'I1LYg\v#;qWH79D vkS#v 4 T Oowpt2˚Hۢx=/<%#p,kLۄ-Mj#>J=pG:mG!k )5BoҬtI B%c|4B,6@RdϏtQwpchIYC!EY$G:c(Ii ˨;N/ QsEʇeN4MO֙ *e% _)HR^Mv]HԎ"0j>I͉.g3݇\7^W;$[݂3" Y$ql CehDULt^H_s"2Tմ&+̓`I骤I9_0.  sns$$r4KVL#WcBt^5X}A}va&M mPLc5*4Wl8z$eK^/I&rVh كZ-» #AB8eIJl֮6 !#ɗ9Fe6rOw6&r*kn',I2Jp)9I2$) 2ۺtbc>ssFzL5o]7(縷}gB)fckan7gq+F C6`$e yz")(l*WxLGաl J.(w -J)(Pt׊k<(iiq[?vjG-3g.<<4,Tl_qQA{{h9Ot)A_qޱWD;8j'tB-wS}+ndAV-Z?f9#=u )a|nbF9RX =E1痋촛"֊mhqq#|W c'ro #Gu&ews1^$I)MψTb ~ N$S Cdjâ8OuJ:P t^EN2>ߙ#4^ ?Jw\лJd2W6[4ߢ sT7ybAob;Tct| ,8M& 9]vI-8xœqC/89elH2to|ݺ endstream endobj 20 0 obj << /Length 1806 /Filter /FlateDecode >> stream xYYo8~0yVEثX` CŖeݴ~9ERMDr87yu6<`20$$q0LfX+ګgj8B}@@qhx;QTs7nGPf^YFMUc =u~z| P6J}F0E1T|Do`0c6{ *׊Vl{_ٱ+{Z1x%uGԚF;{Kp[Y_LYKy 9DC@ɼC "`h8Isa.BR4IAzHWOr Z0) ĶbR {/j:EW~ 5"@\X{EiE0o& A?(A"qޯ 0Ͻ-:%{_$WcX4lń=>'ኩ*࿙1~0.x UlYuB>UJ ÐVa3BRW 7i` A2DwCdv_a(9K+6Cr6[e C'hz9v8A+nc~K0W òMKxL+0C48ځ-,k)`9.{q7tG*OA7)} Ԓ}V64/j{%c--Z[Y޾ӆSD~E ɒrj(^*lE&QlTcOPKj} 7D Z)թkX:(L EnZZdsC;]Q8ywhl)VNF?5oi~&{Sa M5mao1-xIJ;j-\ LF@~tUW/EOB1O\ڑT51YT( dTJK -Vmt5e+uTذ,ႤkU:bQN%eJe@q/-j>cw+2?,|]/-{\į<5NțBɨ.uƮJ$ZN!1"о5eB5a??HJEŰry$I,tלKkZF= 4gdU/_H)-^󎻥 |Uj{f45S<^9s ja?" 4W+IwM6OzR 5o{vX22ƚ iUDa'{žd"a0nZH޴NT'K1gS?ڳlt}9O_޾е?Pp&wzʾ{_cĿۣ wb%Kg]].Sl"q1tg婫3q{`9Lypn=uRZ#AX&as97*x7g?QC)Z:=u{sEYLfP2}SׄFD{9W6%a[|9mjzt>W=aFo /`\8[ᾁcd Ծ7^PIs} '(fϜ#HH{+gݔ./_ɖUpv{F0~?FS$&\E^F> stream xڽX[oD~﯈GjshHD,}HӴH*qTI2vx=sfoŞ3Mfu^yxNFڼ("7֏/:VJe?.Y]km6_A{[s@jOLf 6S9*hܖ };m_`n'B!* ,"!ݠ~M,N8g`섷V.wl][0B&`yKK^V7ѼpEvo! iM جypa&1'[Z閝"=O7}hލMuQC/ K&x%usG~z?#>J쿈|ؿv#/үe 9GANsBL=ӿOaP?VB|IٌMukh?Cv>rQ!m6bL{il-Uj(N4*m>~.*. i[G|@ 0O ZK /(WskP d.--JmO~(͛* Wh*VQ~mRۧN5=UQE-U,E&Z\!ܺ`$;6Ү-RaəB_0v c|a`7?\A*|!K%?]rg`!:*ސW."'=lK1Ĝk7pO^I8fɓgnĸ*kjIP(Uq,` \+&PfC H`O\Q՛-@y< @jOM`DϘ uÀ5>׬KvK.X{&4e)&pK'ؾc܉'4B'LY;(Vp&)@;:RLZY[k&ZCt1q6xHZtWW! endstream endobj 31 0 obj << /Length 1399 /Filter /FlateDecode >> stream xڅWKHWp H|HY)Ү[P!3~ xw5nꪯY=:X:d6wlIM|q΋ m/^и'xk&Tŀ5X1\:,NIVGHgQHaYغrwxG=E )x'rAB ?u*>TOC WRTh 1F@nwY;@jDxQNk2|kzAsWl~S7HI&>/x\'6q2xsСh8'˱g^me|5o8ۖyeKv/BI!}~`lvHi%ůDR8- Dvatv/֪ endstream endobj 24 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 8511 /Filter/FlateDecode /DecodeParms<> >> stream x{tw( m ј1V*_ 60\Ճ2@'gsրN(֢8Y2K%rX)ј^o[y=jzOBfJݻw|PJ\S0qD]/ @=Yo׮]3gδX,_~9gn2./ v f0̙qǛL&ͶbŊ---ӟFm28quֵw}tΛ5k֎;Nם ?ѣG 3g9[[f`0̟?8p`g͚uȑ;v\s5Ç'Ѩv|8~'rJmkҤI?6`(..nVUU=z޼yJyM8TJY`0 _WL0`0ѯn|Rj߾}7pC߾}m۶lvީ|R}ɓ322 630ާg{gϞ?;222Z,GjX,Ԉ#9眶Ǽ[w}d_e˖ hε}O3f̈hC=|EHIIv|nn_F?_2 7tSEEE쓝>}矯*((2ŴiӔR)))w~wo~sҁݶСCmӵ7Wh4>޽{wG#Љkii9rRj~駻w5kRs9v؉'RfyÆ zRRRR=hߙJ{vh$ъVPPаgϞZ)5th4ztԂ > 3bĈShghJIIYjՇ~xWjÌ3f֭V֭Rj֬Yhk(Nvo?d/ z<"~߃o+PJ 2$ tභSJ|'ڝSJv7nܸm۶kGW]]}^Z_|1eʔ)S|@ $??_)էOwu];@+Ѹq#G{KWZuСlٲe˖-'N~֭7|vٲe۶m;;vNoގI&i,))nꫯjђѣoo}ر>lJ)ác>v}WmlܸǾmoCԤ.ZHݳgWj֭k׮v߯KOנKѣСC^5jݻjO]766:t(zذaJVԀO|zAMiӦ1c ={(N8]]; w'v,mѫW/m1jԨvQJo̘1|5\ӻwK.ÝꪫRSS;8஻Ϟ={ԩm={R#F 2$Λ}pҤIbȐ!]tQśkNzѣGǑ#G,o۱c._|[uVJjRヒsȎoV[w^M>ů7|->V{sxt.Bmci (qͦn޼YyY)(ڞ.G>|xذaVjmm㏟} 6޽J;FZZ[[_qZnx~wJeev.,{y>`0Dѷz_;Uǵöm6eԗ_~o߾8o>|pmyf%4 555?YK#FPJ=C;wܻw… ׯ_; 6lOӏ> ˗/_zRE<|ȑ#G/766feeiO.)222Nhljjv322 KFw~H/+++--ݼy9sO-^_bŊuX赴yCS[[[oծ5u]m1?fyܸqJ{޹sniicǎ՞]`bHr^?mܸKR/}>}۵X,_}v0u]ΎFx!>GFv$%%%Kڎm6ǵ' ;y;Zϟ1jj#mkܮ]>A{pРAb1+'d'NL0A{k0wܓ Ǝ?z쩽\$|mkb6O L:O>q\W]uNmw̘1v/yp,\_WsTYYh"֧O'xov%K֮]{W{7pÖ-[nr-Z4tkvӦM?k֬ʸq^oAARk֬QJ'55Xb͛Rwqǐ!Cg̘*))?ǏߴiӤInjS^^Zlٟ竮d23f͚5^ziY=sYtĉ>L)5`+Z[[ظtғw NA[nNpdgg|{キ1%%%8 1Ajƍnرcg뮻t I@ACC ---Ç9sf$@P\4E@( Bh@P" 4E@D~'ɧ} H\^jYRܿ΄>}Tw{M\4E@( Bh@P" 4E@( BhI{nvz݁v8 Vkccރ$3hg;MMM ND~ RSS{E@( Bh@Hf)))gK84E@( Bh@P" 4E@( B%U :c@L&'AP" 4E@( Bh@P" 4UQQa333hۭ+W^x[rh)x޲֎;-ZiӦ]vUVV: 9[֜TXXXZZzӧOݻܹs׮] S]]fV>ڪuVWW|qH @`0M&S0m9믿/[:  9jP(d6c[O>-b4O;4c' 9Y,Zm,Kl￿馛|>߶m,\ψ!%%%J)9r饗9rرcK.;wÞ8$'xnw8s\J)QUUue-X`ԨQf{k B{஘d2?{.%@P" 4E@( Bh@P" yQ({=A " 4E@( Bh@P" 4E$ ݞYTTFn^b 0`ܹMMMzM1 9E"⚚[VV:pmo|w^|sv@HNV5''d2ƶ/}N2F9;@$:ͦVk}}}lkԨQG)++ ֭8q>#v&7`ZZ6L`0e6ӧl3f4c'8fs(֡Pl6Ƕ}W^ye_}W\qw4c'4dXjkku X,ԩ.v@HNNWWW777*|>_8+z뭽{?~^;vÞנ$'xnw8s\J)QUUu 7޽{ҤIHd„ ˖-{ؓ3{v<.+&>@!8@( Bh@P" 4E@( Bh@PݠA} H\^zO584E@( Bh@P" 4E@( BhIngffEǟz)Cݺ -бE"⚚[VVzZt޼y: 9[֜TXXXZZ2 ))))))Hgy'u@rljKΞ=_~gvx% _0LKK&) ;_}3>Z8fs(֡Pl6;^6Lg|xhbj@ `Xzjy)4t:~uuusssIIInnRaǷl2ydFqYYYNr)WJ}G\r#/ގ]1 $W/fCtΠ@( Bh@P" 4E@( Bh@PJW^ |]3h@P" 4E@( Bh@P" ***v{fffQQQ4mgϞ'0ra&"H~~~qqqMM-++mN:uɒ%߿u(W^^nZsrrRӦMm :kUJ-[z8l6Z@ Я_ٳg{キW^:  94mm2`l7ޘ7o֭[z{rv/ގGaaWL S-]]3h@P" 4E@( Bh@P" T"pР>$h{4E@( Bh@P" 4E@( Bh@P@Ҫ홙EEEh_nGyD ;ۍ|H$??79r ƍ7mڴ[ѨM詪б[֜TXXXZZjllٳg^RRRRRR sv@HNuuu6M[[־}.䒁~7:  94mm2`l￟4iReee}}}$)**iNhl6B!m fslkرg=z+**t@rX,:X,?񏪪*mݣG={A$'KJJrssR>/۷o_~eKKˋ/x=2;h4z<\.RpTUUݻwܸq.kz{rv/ގ@FzBh@P" 4E@( Bh@PJ>c@z{4E@( Bh@P" 4E@( Bh@HZv=33(3?X4D󋋋kjj^oYYYxElq"Syyj1Lشiolq"S]]fVnCC… {9=F`ZZ6L`zhРAz/ 9P(Clm\O>3gix%+@>Ų~zm,KlkÆ 7o.++kjjjll4hCAHNNWWW777*|>_8^n]0O 9P(Clnw7޸{)S<g|hbj@ `Xb[<999{9Ń@HNNWWW777*|>_8>q=%Z_h4z<\.RpTUUN0!8GyDaOx뭮Խ{.%@P" 4E@( Bh@P" T"f7xi]3h@P" 4E@( Bh@P" 4UQQa333hۭkfee{.zM1 9E"⚚[VV ~kw^t8g4T^^nZsrrL&Saaaiiil?> stream xڭTn@ +tj<ѵN -AhdZevh!iIH#E,&ŏ05I,㻡zikVaAmO~mX/T.tr:VW,vT'[I .wg( @.SM.a<_9$F-33`0/-6}o0a녚R7[Nu~\԰a ]T;(;0F!ŨXr;ڱIC;Ll΂Jd ;4vohXQ!vOS*@X6bH7ď-)4`4fIJ]$Á0 <ԥ *|VdvlFv{Ljʹ҉B7E`zxqqu_\4|EɧjEP@(5m Mk0aDP`l'gzmƼ-BºW+\oM !5xA`&^gp ?imD0ǯ{@)#n%LwZE)9Hg%ѴYy endstream endobj 25 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 14841 /Filter/FlateDecode /DecodeParms<> >> stream x{tVՙr'\XPb;-eTBryihGՙӵ8]:cT*XT Ū=\ !~ɅKH9쳳oϛW=g^>g_DF}۷_qKNksrr>SvQ\\\\\m6ëo߾}ѢE֭ʺ~_ 4(7-+t'nǏohhxWo߾nݺ4TsK.)((KKK盚|/}z^^^͛WQQ<_YY9gΜ}…N VԖ-[RRRƍ̙3Gu׮]RRRF?????8//oܹǎs\bɓsrr{M7 !ƍ}v!DqqG}>;v￟RPP xSRR O>o߾^z^[袋+cVZunaƍw2dHIIɖ-[Le£mĉBI&]s5B!C444D"뮻N1lذsK[oE"!DzzzFFĉSSS?O#ȡCrrr,X0c !e]VWWׯ_O6Mq+jBc:_|bٚSigyyyGB3&;;[CE"oqB &D"+W2Dx:ׯX޽ꫯvw+{mO<9z蔔~[eX;<馛~a̿t#4a !F4drK^}_~MMMHW^q[U!ĦM"s='1cF$,5jTUUU$Ǐ駅?񏝋:-_EihSiSSSkkk#رc-D"/b֬YHdڵwqo~H$R]]4N B۷{?8qDCC@G"m۶'--_~ǎ>|.**7o⩧)w7n(((n0ٱckIIIB_%Ǭ,!ܹsZZZ3?^tYL:o߾Æ 5jԬY~ႂ%z'|I;wK-Ç;ck7okB !MO6m֭Hy^);;hjj>_\\C=Bӧҝ;w !~~͞=[:+t~׿effyyy~ڣivD"!DG322N:SNwieeeo?3K.ݵk3hѢS;qtEy';P:}_R\V5kx~zƌgΜiEGAAAFFg:ck/3f˖--ڴiS=&Ml2'OkM<76l_a2rH!ĪUڄzkAA+xmŊN-XfMX/_ֶp‡~ܹs[suXƍyddd<V6tumٲwbÆ jkmm={kv=|k{Xs9ɓo! vH$]1bĈyeff !7B/RqUWE"?OB޽{/X`={ڳgO]]]߾}SSS.gŕW^3g8~aaѣ;~>#G:˗G"UV !fΜD/^,(((3gNVVڟ9s&xBڵkT'OA8K,y$D"b~}nԄ kW$F2=ps疗;766Çəhȑ9993g\d@kNq6ͷ~{nnnQQo}饗 !^z%簱c^Z@?B.СC>[oD&M$xG}}T0a%!X>hTpƲ"-:th]].p)w]"|^X|[9w\uuu$+8sÁ<E]tu]]t?$}`)h 4X,E K@hR4`)h 4X,E K@hR4`)h 4X,E K@hR4`)h 4X,E K@hR4`)h 4X,E K@Һ ݻknݺp®Eghnn~Wl4IZt]]pwvuhPϞ= յ m !ӻ AhRtqk׾ g TTT<# *@ 6n ˉ+. 4X,E K@a݌3RSS8ܼlٲuuuK6m69xΝ?OMzu|+BvՙfK@vmpV5 4d6wܼϔ/]ܺD@21bĈ#b,qLhK۷%ڳ>ΊD"rH(hR7|)Szn$_}UTg=z4--7ߌ,$ 4`A=pu%@bX@2;u_fffkWX#o=z?_\\:,Ã+++'Nhxp]]]EEEz{}yޭ-k5vmW__b;vHXMhá~i"J7DRRRQ8lsKz㵵6mjJss)K7g^6K^DڵkMv 7!}ѧ~w 4Ѝkœ&M2?;oQ4guB|k_Y@lg…?|'W:=Z__~v%^`}{7o~MWE 0 |BY4.E M6m͛7ϟ?}x/]Q.2k֬ &lݺ5==+@J^zu]wvuE.Н;+Ijj%K܇gΜ.[R];wŋΜ9#uC.hHMM-((мڙݥ^:jumRz6nܸqF珞8W 4`{.55՛ycݿowտ/v!v뭷z}'*,?W^ׯ+t£}AVݻ-[ۤc;XW裏?O>dO=TϞ=;<;lllt,\fj@]뛚ƍo}kɓ'Æ [`2yǿ&8:yĻ*++.]UWokkkkk~Uʵ^{ُ?xʕ>l/7eoHo2}ɒ%}ill,//뭷Ξ=ۿ3gƣ?4wyG;Z_|ENNԩSkjj:555}DZon_gϞ袋L"=?dȐk֬ٹs߹ӧO뒒믿7ou֥>|xͭ^{IG׿{?:ԯ_Oܲ?AhĠA~tu-o(8|M7]~g***g&W??;&`'$?4hp߾}uuuii;VXX%'N馛LQUUݷo_uuuCCCEE333?~|̘1#G,+++**^SzD"EEEz^z)ڭ  4!?'NXlYsssIIIYYYwq#u_r_;>|8t;LyӧO3fLYYw=iҤŋˉD"SLy/aޅo{8q/o~ӳg{キpĉhw1Oz޽+W/--}w9hРܒ'_~ҤIjhh7l0q]v/v^ݰaøq8PTTS^^;`M6=y*##c֭dڵW_}uÆ ;uO< RWx24?ӏ?k׮}啕8q"//2''"++ѣ999u~ǎѣsLeeeVV։'***rss+**zqԩC9':-Wccceee^^^yyykkkkk}2229ܹsiii噙Ǐ?}tjjӧؘVVV6jԨ;wM !ę3g8={566JII9yd]]ٳgwޝwނ/FQVVҒ':ujss?b߾}H$;;ۉz & > w'N\~?яͽ{>p@mmmkks?uA?B8?=z}/njjJII)+++%Gٽ{w~ DEEEΏm̙W]uՈ#˳.Һw?CzS;%H$u(0Kvm v*A|{\'bvD`)h 4X,E K@hR4`)h 4X*8F ̽yE]4$RtqhR4`)h 4X,yo%VBƓ <.KjVh}ez)?(&xOTVUh&\PO_W17vD`G n࣌U}d\Tߙ&{7 :(Z?̍Sݤ#0|ykw W|-Du"K@Bőєl8)&IzW +iQMt-q<}j\y~rU#u~ ҳa"hT#hwP' | iCbDu-rc7M1h)ACҁB|&b5L"_7hr=Xߗ6 Bi ABAK "@ӗmo{$c F^Ke߱@ {Nk4ڟ%Ua}[s-O81&%(ߦc,dh|~AhRa>U ʗ2f29nf3$W/0xV\Ǯ(n5FN}YwM["Փ΍G /(}Wv#Z q+#h͓.MmT ʨvl]=e38ʹrT4;m7B*Givz;x)g_%kX%oX(e5&4X,<]J&u\1hE@o$)ރ&9Fbl0;^;I'PJ__}v$M #K>9sڋ*0?<|ΫwSOz&8&>yg%%Џ:M"8fʇғNM# G {O.޽U˜UHKW19Rw9Lr*sIL#3A㺉)h]ZQNg59IM4,3Ɵ1RxJM9,E }^TҜ'%QM0ܩYDrhx&y;I)xҀ[٤'5o!U14.1O\]A9hx`BABA74r'Y]YD'# FJS47>¡JI? ' QX]HTٓ4yh^e LV(_>k18,E };Zy$`4Y3ފ*sujjVH~wsl,|PΰCsQe/&RBGe.8Rs({{4DM:^/D`G.;r$mLI$tMR:1~+$M^:4bdB'ƲOR=p0ڭs0PD`H$u[oU髍MfT W.IeޥH<>%xhYݶإg0YaC:A K% {ϥZ$1_b{9&COmL;hQ*Kj1M4sqH߂r/`}o/*D٧dx%B }nLnNQ y$ʬ&(Ld;%q3}RpSrUV} JNQ M9brG Q熒.^R4`wqzq )ofML̹V#I|zbƬ7M>I 룟w,>Xl'RO [c9TfC4\#^R]pGylkEui͓4ʕ)}Ye&#liDaT2\Pyˡa4C>^hB]nABAd-4fQIK+L;cWr}rhhNW>O8_COY#cBV+?=%mC Kå חc~T0'%{TN'㏖^y-rLނy}sJ)WhRI/woP7pxd8,A^TL&E올^q)CoMhEpFIJ{F~zeM]Zcr-+෡-A{t[D`)hT8b!#Gb*eH v}te &{nrբ~?F/!@rfN1Ì4`,<t06}e\&bLUgXՋ}]&a>nzץ• % ZD`䉠4!3#%8jRI@-u:ݲ&E>qMfTJE#wi`-\K:ivB K%OG1ٮICroW$qex~|PދJ]%IQM~ [x7x]Z~_Q <B }pt ~LN&3)_;$82S a4 ʅ*m& W1{IbyŲH3gAƲybD }ZTdͱ/0eOL%<{'*}!I$<$Ā~rڟV&좍ĭR=…s}ws19s.(srťo3@z?@ K#/4t{ؚS2oYI٭rI6=銚V*zQwF5fvH}JއvVj1ti 4X*%tubbV!FZH&h:~uǷ5K@o"w yٲ JPl75<\Dq:B K~{R~Cʁ;CiO3;Mdt#FD`dhT:UCzG uxLRsHGyw m))ҏM)h2Pɘ]x!K>WϱW> |LT{ G=n$v)UI 4X,.fO#,L){0֦Ǣ~#.) ,:&$@sҫJo$S1sԖbABA'Rt(>FGTKcWSR:oFJy tAhR⨯?f<w^ p64X*t LX$x7ABi !,E #)膔8[yB4X:L~VF+""KAێ\f7t~+Γs|8sq ^R4`)8%':_TIYΓr(SN1OB ">`xDͧ!LQ.TQP^EmF)53f_D`)hT8^fܟ@iA+Q)6K%*$<큉q#$D`GЅ"=+HABYN0!7F쒥TiTP?x!K>NMc BJPA{zd;CYyv=t"h 4X*]IO?{gh(2Q:y践0 qۉ,Em;bg鿚ؿ>e.:h~W&C1H"h4Kr쬧JF$Kۿھ>zʥʁ "h 4X.PRβBXdLed%#EW CD`)"pPL~)o*%\.B6{LS7NU4X,ELn!);} ,|H>&1Eߦ\y/gPE›AhRn;J硛g|}n&rTPL/,mf(uH3ʌ{ 4X*tcc)w2 _IFKnN'sev E }]X(ӻ.thG[jENٗYMAhR+ % K}|RׄH*fXPD`GIO;$WU9hwBxL K@L ioDTߢ*Xɺ_^/;3t=Ù4X,.$1SJf.~ AMK%xO,:^v ltB }M! ]%fHyރfXO Je.̓ wĈ,E^EA\> 5VPW Z.VrZF K#??% L5ZʾAWQNp].RW !K>NMcLuJ!r8}8{\u=̇4X,.܈ $qV&4XvcNB.RQb)8'4X:1tb )㨶XJiCXiϷ2AR4`wq$;~DMĖ;7LvOk_OJR{D }:9`- 7F6cL\)Ls)oԔ?3i+Ʋ"h 4X*]I?HHPS8-;rְ˟fOKPh=))M_=q K>NABB2n~V4υ}UZut6ɞa2yN}V|ABAwʜ >SN#WQP%%]AhR&VjFr>U'M*~D5TnA }4;ͼJDeM)SJCh2*w(iڟbI34?&Uw8Lf'*L]WcB KD"CL>H|B̙s&[oKʉWs/x̥ܙJ\" \GzR[潷?Es2-h~oM=\&5zrq(,V+4X*.e>\}laD0씧H/̯2a3FvӼH|U#ſr\/ *'7 aA'vm 04!>sوo2}$,E }G7fҬW5{?Iv"hT#褧_X墊%MiVŶ.Y/ ZJ9=K"h 4X.a%(RI)> }oUefQ ;4X*t!F5?luRVL?HHR"K>ZNtmyu-)a,E # 7fd>\rtq"KAfaua=@f'jjN/D`)h]@~ѐR΃ݙ$wAMiJB'A$rD`)"p /&KP/pWN+(\0ވRDf3郎j1sԃ#^Q,E v1ޮk c4ah~-Q Ӡ$RDжs!701n%qzE K9*5?``9^)i4XH Y$Rn9oʇQ.W NA$:ɑtmC&ZBAhRhh, }D|ʱGjDABAԜO^l0AI]\8l7Pʳ!YQn41KGWqS5 b&,a21=7ߵ-e5g/"hTJ$:R4`)h 4X,E K@hR4`)h 4X,E K@hR4`)h 4X,E K@hR4`)h 4X,E K@hR4`)h 4X,E K@hR4`)h 4X,E K endstream endobj 26 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 16522 /Filter/FlateDecode /DecodeParms<> >> stream xy|T?3$! Y%dID@+֊>,,O}|(Ԗ>/_)RYP|JŲ%! [a;e~z99˙;wfL>?"3{gf!*33ѣG8pV}}w_uر#G(^ȑ#/׿FDDL0_NJJ} t#::z߾}+p>k׮SN-,,eee%''wuΜ9q\~;??v\YYY ._~O?tBB­?q֭&Mr ?r۶m#GMNN<~QXFFƧ~j/2dȦM\.i-[rΞ=rvi-w9&&16l(--}g6o޼k.g} !x>16bĈc2ƺw^UUv0z5iҤ(؇~vKJJcÇ c-Zv_p!666""bƍcݻ"%%%22rڴicƌa͘1^Qb 2˖-'LƘ ...|G6l޾}{cK.-++OHHHIIa%&&vȧz16k,7L˵n:*))ٽ{{@;:,337d=PTTԦMx/jJJJmm^f oJlUctcƍsݟ9cnΝ{%K0.\/[ƯFQDmu~yVZZv ?^z5cln{ݏ>ovϜ9q^BFFcѣ^(//2h}ȑn)<<<%%ʕ+‡L:1|S'|8qĈ .x v]رccǺ\.؆ 볲rrrc<@LL clҤIyyyMMMĴ40tPﲸ;sss{5` $%%\.cbǏQq/zݺuc3nط-XKK cl̘1??>f̘nTN,Xءu?g}իͿoo&鹹IIIƠAS'^|Gimm%> owڶn1f8 F;Ż#ce碣?W_]bE~~~xx8clwyq0=-\=)6ZR;v?>--'?ɒ%Kƍ\RRRddk׮akv<8''gСÈ#6o˗/WVV-[Ι3gm[rW_}555522gx[ne޽ ywc+W{k׮1VX h xG#G{czqc}:ujtt4c>p5==_3FvnKLL>}i:vsԩ䰰|ŠAlL>hS8q"cl˖-n{ǎv/]1CF2ƾ anjj˗/O~9sn/ c,55ڪ8 8099V@3g%%%M4^]]=o޼[o566vȑ}hUn;3t;??>11155't>~w}˗/7hb]WW7cƌ[G~6dȐ;w /ݻwSSӅ ?\sOSvwwC\ns7 cs>hMhMhMhMhMhMhM!ݻw\rĉ@aaŋ}T8h]L0!==;wܽ{/[r?*^z=#ի}W8h]TTTm_7o^dddbdUU~3T  4.:vثW/+**PABMtWSS3xල---wu+htҒag͚*@Sh4.e[~{Nw?pnڍPss-Qn[+_?7lwϏ?7ڽGm_O'Nԩeosv$G^ܺuyz.//OX^\\;u]ڧzvtt po۶m'O\lYFFh ty  `:u:s {䭷j@~+g}6&&@lٲqynGD[RR#/=z~ӧ;vg5@|vڿӧ"7' ecGۿ[\N{1c~ɒ%\@.++Ό={9u hN:M6͙3gٲe~hNϞ={mk=ydaaa ?:nݺ1chA gϞ7n\Ϟ=]RTTcǎXnUUՆ ǻTgףGl]ͺkjj?~a> -1cƬ^z{v<E̯\tO>+Vo5}ٸqcssҥK[[[chKzz{9v;vS%j=zY{[7wG{DEETTT$$$8\EkhOx҉/ٳ̙3˗/{]/q??l_|_t>A ~"$Xx90Ckkʕ+KKK-[6{}>Y<6lٲ^եK{>7|饗Ǝjժ]@ {1&MӥKɓ'?s+[n}RSSܱck׮)F/^7olEEž},DQSSӷ={ۿ[uu?>sLIII~a޽sssg̘Q\\ؿ$[;8:?[L{ر__|EZZڬYUVrhCnȑ#SL6lYDDČ3@UG?ё#G>czC]]wܱtR]ڵk˗/_`ACCɓ'.]}D7oިQjjj־}x (**zGf̘ohC3fڵk~[%ڵk_y>uPttk6tPw}wjjjCCKJJJKK$<<<))??x_QQ|ec)+?LrÇwV*//ߵkWYY٩Sڞr>ܹs|A||<ݝidҤI&M*//y7g̘ BG577ǹNڷo߈#?ޭ[Ç/\PUUէO>>eرOwԩS{={lڴ_7nܔ)SW\yĉ{fgg:{2dȻ[TTf͚3f{ʎ;|ׯojjڻw3p\Ǐ?~}}}tttcc]w裏va%%%o֬YΝ;{~_\bmXb۷o߸qkjj֮]=nܸѣG?7_xqĈ~t(4'N`]v>//0..<>>0&&--- eeeEEEqqqEEEW\С?(&&[XXءCްO<Q]]]TT_PPRRRɏ9}tjkk .]jii9qDDDӧ###SRRcgϞuQQQ/uѢEW\9|ssscSN֭[||ܹsc׮]mjj3n3...99_0""ʕ+aaaPTTo,<}?16o޼~vN0!111&&f…~k׮ yyyNJLLLHHSg͚ս{;UVV.]ֺ\?~16vfXnnN8Q]]myx`ر}]xqLLsss+**#6a4P*D1d&RN1?j_ ѪVNɫga('GAB~#32rqHgf!YE,DB 0HiV%(a:7&B:HOG iv!t(L8E $ޔ(a 7şq6btѣABb#B7_lh,At "hM}]]0Gm^4'jn4> ?zz.c<:< !RqM]K4t\^ ^R%12rBSOB%ͅS)_%"lNG~mkMxyW8E:|4@h*8\4+|t.T*)RU֌ Gz'z{R JY=}|Do_!Xc`5G,?|itw1<,D :>uʘyȎ^" HCK:Qf'7'(4je_2&|X!wm~n?4aʖ-b]ldj{#v:G;4>yrU;oc-Dt(bv󃂐Σ*=*YA4ޤWc PLr}} ꡴f21GAh 4B?lw_LW͇9m:ĞR]ˏBeUzE5Q=]@$t "hMl Xm${cTX3 ЈP-xt|I £ $9 0S:Fob+j/mZۘWgyӣu=`"hMTwqdzxwm?;?lXfSãcl>3g jй8tW&ї tH79[:;idD! `?Ah*#vgX =Ic%"GyˈUvA#~=(!]I(4Έ?mOR=4N1!I4?6o($>=i}$<8ZEe8"hM}ӝ)ʧ}6V'i;O#wU HA{ӥ.}֑FtpjNg~Ba\Z%At]Wt&4@SA!PٴI|r)\\}R* 9ŏ֐Tx4E0yG=- h4j 6Rk=|$gJ!KX}6lBu*aJ~[#]DfSAh 4+gPyNE|I{6U֥Y^_V"=H Z0(HG?Ah*#*VS#yϛؠ[,%TR&AJTx|Q$!D1 |lBiuj1[*+$V?Ah*#h:mi`m4-܈4t)J\8+G iGI)5Wdٍc{4@SAa5HHP[e$v㶱ax2! c_)>§G7KO(K?aK_&I2#|\҄rřH}'Ah*#ÖJ234V2'q:W^G 3y@_E,x[0ǤM@MhyEP]KG 齲)[PI/TVٳ{W:OXC ZJ2 hM}G\ucb³1~#tjQbV{NK &=$-MxQz0KVY N/:(P.Rz](u ]U暨n驤{c[ Ahv]۰]z0HQ}bNO<d5'@-BH.ǦJTSABi BjMF,(`5SЌ/o TAZZ#R'=ܑ'e5"݊TSc.\\J9!LnPaRkdrtKt ]FM̿zvͪdD l՚ȣ 4t84@h* ?sc`(<\Kx U}̩)kEx]V 9tHH%Kt tEK W`Z%'1WϪt$!cҟ4D AB*[a2rbC]xf']n`c࢒؞3n %̙VO}յ[J" ʾ3 8 4>NH/&3~I HIO{pyPǧ٩DTv*A:LxK}M ӯBVI,HfasCS7 ҉z;4@h*8 D*8 ^uc0#}ziT2Nf{(tG9z{Է2Vϛ%wY+T$N t "hM}]YSFc!յ̫l z 'PHh=&34>UHUL4@h*sq0@x<(>JӉX~3ux5!"RW=!T<龢6(&]쭝L̲=zf(l@E*{JOgDB/PE4f.QM%u7KoPeUƹ*i@XBhaA$Ox oJ4@SЗaVez>G1)GԧѼOVk@S2dެ@`,iZ娼(>0*]4$dtV> P7&2!hMCw߭f l?,wizP-}FtT@:z| 4AKJPe, 6z0iv*6%$vA&ċm_/#1&Z @Suǃ}6m>XfD'X2␦f{4Hh~QeH74Z_*&3^& .jtnAB4H=CiS$&ȷzrJf ?ٖ*Y?"hM!֝z4;OQ>n8DB/"ou*{zGيml>'k"lϺC hMCw*4"}QO2UR0nV},C#4Z_!4eA*s*^EdA4+\7aoe⁳Ah 4š/4W ixêmkBt!#;dT>.z4GJc zaҷlT hMCw*όd)b_Bǎ q ,Pea!_TS]:NELtiϒUwySU"hM!1wJJJ*Y[!ug}Ix}cBm@-i=4;P! i]<Xszpiˑ$ _n|GC )4BT,:Fa7wՆV]7qj4'=ibw-DW{##0)4\3iFe M=$TɈiu/ #x 4|twx4AN:fq4z}kbDi6;ݾ)cr5; 4A닞ť3V8*Vժr]* ů埨ө>h v "hM8EҼèPe9vI8EeN[V+5QGLםp"hM!]P$O;ym '҇P@ )4j]Ύ>תޭjhNePe1)i_MsC1%aUl Mد_:I> ?~!TGUU]:j=d5pUKde1v2'1JBhNlo_5KX)27 #}]HKb.mO:>!TG4!.%!N #;~K~i+eل1<Ҕ.JŤ!pibmh'QG]o;~/[Zg@@Sh4r݁WgK73hx7LTz>2`.Ge:6x4B|0IG7H2\-sCĤI:Ah 4o*Y;? G3}=o* " $)oBb*HWs2"hM8 :7tA.cg.V%%?f' "h!$ a˵'[Qg{$YI7ߒSAh 4š/tn𝯯B$^ Tjk>F@SH%!F#!"h;swS謲g $Ӱ=lC )4B3zJ7*fg6K8 4A_6" IaD!Pgp"hM8 $ jN?\#F;R{4Zw90T~3cl> >> stream x{\UU?u "] fN>=w{أiL5.zsu'KfS)%(x U{|:^)B,*--ĉ'N馛&N~#E䤦.᭷z !6mz]ڹ@W 0Ï9W~ꩧ}Z`=A=P^bccΓ'O˗/0`n;vmr͖}Ȑ!ͻr }0an޽ٳ 񢢢3ftڵ{˖-khhpǏl#Fsl3f_]o<::_~g3g^ts1cDFFv??!#F8q!$55?W_>|6-66~z͖xڵgvf8p@[(..ҥKN>,֬Y{=OS},!nBl6[ppa"""!+WT8,,,,,;3f !$==]Q={$%%B^~GGGB߰7I#/^|j[_WWf>c{EB6m+hd݄4ڐu];vܾ};EWeʹ)Q~jU !YYY/!L4IQ}B R\\(~G}֭#^(mh6/\G3g>~ɒ%.\p?|SLٰa@ .Ql^`?899׿6|𨨨^zҿJ:E2ZQѣGB~i#hpMJB)@R֜űk.:.^h;t芸O>t2͚]iiiw_kᾲΝ;IfCml'Md0EZk˗/744h˗k@ PL`a=z0 xB )4B )4B )4B )4B ),YTUUj: Rt:WVd|@WBJJJ6n(o>󒒒@ 4"99;?~|+"I& hIhIhIhIhIhIhIhIhI$+WBLq95ʫUC HH\sssZ5<44wѣG{XÇR $@Rh$@Rh$YR;pO?ݣGis̙/"""{B &ZJ|իW;u$>lllDm"hfcccŧBHhh*~L믿~7O >S>* 4Xsss߾}Ν ;+8$@Rh$@Rh$@Rh$yW]v>U^^GEEE}JQN:qO>w >`yGOO>F 9s$$$xj7-So6Nk֬6mo*(,.>)ϐ:ξvuci~cǎܸ۶m PX|MǎϜ9Dimm2dH@kټy3!}" tKKc=6fɍ{]w^=ЬY/]t -̃E"h=ǎ6FkK@͜9ngo]\~_l6i~golQQƍlrh 8p;w+qh;~ /СCi#GׯsY{dڵii 4uqĈj=m&&&23~_hK.M8W_Jm84ڀ#>g텅hڵ+$lhh(++ۻw/sp 6m;5+**:u*,((5j!t;vɿoPքLG,_gukhh ;w>SONKK[~}jj 4\KK˔)S6lؠ=8i$qqq˗/L߾Ș8%=}tXX}(JTTT\\\*(׿mCOmQ kΝe˖q=YM9@LFF /0rH˗_yu˗[ZZӃjiiqo礠ZpCۃZ_NJYfͺujjjbb8mXv8O>drr2}K/WVVYWWWG'u555UWWBBBBΝ;y> X#˚1cm !}gL@Ξ=>|'FAopz&66bٲe _~eAپ}e֯_ X 2e }bT) }Ξ=[M [RRsJW\yG;?ϯnq:III+W|']ASjnn6mZzz,4`K,ILLl{<(((##9~w}]͏niiINN޵ks޻zj@d۶ms:/rkkkcc#!D*h?A{*###66 o֭[{ݶ(Ӊ ەlۧzu,633333S&::U^_=88foܸR__> c۷o޽IIIW\)..n͛@+s̙3g{׾/w@/3g=߰ah斔tԩSt(oF0arvիW]fիWCvF?^___VVVRRrܹO?ԋ5^z1ǫvp½޻zj/,@UVVԜ:u[n<&&sΥ&ثZ__p8N'mnݚ誹nHIIʢΏ=Xqqqnjkk-[F,**b.XreLLLmmm.]~VSN ;ﴶzezԩ&L())y 敐pmvmڃPuyȑ3glnn trr;ydܮ:[M7l{i&ˑt:O>Mǔ^J(5zs544744 4m@Y}^{m*-++k޽ݺuSs΁#7Msssm׿iMMM111QطoիnjsiYVVO=\uEQ)B;[ZZvyվ踸 11clР'|244ȑ#aAPNNΣ>j#>CoT-0N!.6۶m/_lۗ,Y7|S+` ?&<<|С_E9DZc͛vΜ9m۶xK/._wo[?ᦛnn3CCC~X>񼼼S9 V|mNNs==z,^x͚5oogz߾}qqqIII[l6Ъx_~|m6[jj#<ⷪ[ѣGaaazzԩS2ڵk#GٳgffAZ[[GލڴN:>}zܹ.\X~=3Gys˗/ߺuk&v{ss>ۻwSNK%%%ӟ"##89s̡Cf͚ /xX%w}t eɓ'ժU3ΝKo~=ziTKJJ[l)++J߾};}sϞ=~ޑ:::zΝ4x_fʁرaGͥQΟ?_^^>k֬˗>|W\7={d:C222 \};r9s̙3?o,XBu֬npCw}oۼy¢ϟ?_TTo߾G5ԩSQQQG=ztVVVZZ],J3f̱cdž Lɡw#F9vXpppddY7ٳzРAӦMϞ=k׮̬~wuWn6lP^^~Kj͂w}wj>ûwﮫSfxxxBBRRRKJJԷYRR~4/..NKKLOO/**(--ׯ_EEETTTrrq"Bș3gٓ۱cI&͚59,//ώ=z7NwΝ;#^bEUUѣVh tR[[{ܹgy2gΜ={FEE X"222==O>'Oӧʕ+ կ~E)**u:yyyN,**ԩSuuuaaaTTTaaaPPPCCCeeeHHHQQQTTӧCCCkkkvSZZZNgyyyhhhaaadd$ݑŋ(((P"::t.\%***//ptؑߪZj^TTŋW\QCtڕֶ044p\t)88/mҷ@'^vܷI/TVVU[[[WWԽ{wdńSNuڕ~S))):{lkkkxx8zK.444 OWJJɓ'N!yyy})//ѣʕ+ !%//Mp&!B}gΜ +..mFDDGDDDFF755UTTDFFY&$$ŋ]t),,lhhٳBV\q3??G'NUfSSӰahGv^^^޽+**.]@Ǻw޽p'O$?pt֍Fh/^7憛Ϛ5ﮮ;vwz4}syhkmnW8oX ?oq3#>C@!111n_zú IhI JKK6yUW7h>߁ݒ>Te(O~ݽq%a@`„ &Lݻ744x>.A4@H 4@H 4L? u'$\s|mFB!.#LJ_͆ ]cǏ gܹ.Q q-[*VkAm%ZܘK >Z,6"hI>ۉNs@0!ч̙g䖠F5˜C2!S8kKV\ɪЃFj<pd#3xhhrss?@ӆR 4ذa&O\]] sC !Aop:0)3m/gs-ͥqH#].FT0}-urvntyҥ`@RABbgyPNaB]= Q0Oq#qkjKg>~2ڙy̅‗ŤW$A )Gz-A/8vb,4qϗǤ7H >Uqo8w ?C )42}3NqClw.+PP#S i31md!"1}"hI>f?_:QiL6;,E/8=(#<™sϪucf25%043N{P<=NLW KH8DB )wq+ spn~1p;% N nC )G4;G[H 8_vқrFƌġGn q?%̘!5V"hI>fEƉT:+z32Z~9㙩=/ 4@H] ?fUxxGjL/&[ZF s)> r b>L#0p[AHj4fIH!)18t;Cލp)_MbfIb$ow@!#h&?Oiw$7lK@~1&c>qh-[7O.rq}瀦9uz ?F~rK} 13G~͝x4@H] qNwnr\e^ p?˓g=䣗v0駧nE;%.v8m ӧmwemÌlF #h5&IFȳ`|-\%^ s hI bG]1Ɉ`e #h$W-H;hB7q5~r?O Vs>@R>0{w{A۟-ZHJ3~s]|Lzsofw9!hIfDD `/ӀɎE浸\-<@R1HhFR3'[/3^ʠ1~rŊq f4w~ 4@H]zՒΝ}1;C22や fm&)/x/ ]N kikl n!#hAB3%w#b0ғ KiL\=dsi&dCfr1s[jM`~_C s<@RUf RWs0RDŽx_qɼwȄK2oF'ÜCUcdnK^h}rB )4N f20ק1 >LxHfp\0츯"1χ9G5sGU?CqFPK Bf^C )DЖ!r/4~S7 ͎ƭjc@zVR2wfN`Iۃ̇)[HqWti" 4@Hʦ(JR\L}"s;qCߤꍷp/apOH/,`Jv_/bd>=A_ޏϘ;xounB8s&!mFOg;ŝo拻a9jm$eTVxBrܬoޘ6 ČɂWG0H}-&6qB3t4) i=,]:Htfހ6gZ=n̜#xDОC )LwKā_rmr[JkƿLfȷI/m`AH 4LQVF|)Ƚ\{n3d{xR`Iސ#lE.qYh|Z 뷘b?9zpX2YL-H~bdo"hI>|4X}3)B,#8ѾUC#٢w,#n{On(nj: y7FS_ٍ@Rh$\(dp#xpuGCw|H.lnhw),F}ܠfӛ9'=Gzs/4/$AH 4Lšebv`¨E@EH4j6wmx5- f)1qݿ]UISÛ"hI~%>`w=r*#_iIO}#n1%h\AhoYğ3wJ<@R։ QXdߵ"DB )tqƑ0. *<㣻t  ό>k$vQҒ})4A p,$8hMo7֛pw6p`|[[=@Rh$.80HhR̽'GGץѹ]$."hKCO\&3wn[q7^1wB-$Ll&J_'!%gӖR5Y ݮ0AH 4lS,c:.,sj|c{]$eZ <>%02leٍAqyu>@Rh$e.1wd> 1rRs u"h&n3&w30^3H݈ <@R։!ɀ%I}>XL$nhܞN~|4@H:] @%ĬdFy/ -:ɺYWGGw!"hn4KIH\hCWGmo=T@R։_r:ګ3W1ydM9;PA΂xޚ{gd-#Kv!a3ڊ33Zg8PAH 4AwXs$z={qVF_\2&{k̬s{Gnm2+ "fGuiw%tM {`[AH:f5шL&Ȱ8ζ;x)B'CS/3}⏂Rb|FF\Bx:DN 2'R7H%?šL9-)A0nZg}PO-q!hI kB=VX ?D2}`"4=j>`,0#DB )wq )́踟, efI7ABkC )G&WGp"hkC )Df$u'%e hIYM@Ιc08 ҍ$e82h|.B1/7ui bgB )42}8p?>T;.(D2} `"LL2]BAkC )DFV̌:#I9AH 4?t#l͜"hI!0 }Vi,X"hI!q+1}B )4B@f֝`+v4A3$ "hIMQ@#B{ni@W&*@]9`-vھ(H40H$7b@D2}m_cwǎ#2#uό}b$@Rp8<-tn #h 6˺_dT4@H]hn =C )42}3NM7G YAl #>$JB!#h 0bj.}} 8H4ASF)t=[j3 4@H]JBu)줅Y_Z$eZ]b|+ri֗l#km|:,C )42} ӧABitmI[;JB!#h=!%:v6Χ@r$eh`˫1&ٵg$@R[IED<;.#7vOB )GF`Y*FdfPC$@RP )#7IX<@RAB38[Q#>]IA!#hf:mx!fFzk QL.t#t{7'5q[;u]F6YB )42}GYُP1}b/gSO.Ⱦ CVnnD2}T!pr)62hd ]1O1c%H 7"( |t /1G;{ "hI8=:v/poTwna#D^{ s;R&\55%"hI>f 7n䜣y.-Ԟ#l'n/H90%*H8,(U/><<H#nWύHX! =@R-4`!Y7dPk'ڪ9sC`bIeX!7Du)8Ked}FpV 4@H]]703?>JѻE.޻;qfJUoWan!,WiKTPsW1ZK]̇fݸwqA.Ծ;wL!HoA )G &ㆨ̐wɥ+z㓮k[#zW9h>y o'2R匧.#AHʦ(J$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$@Rh$_B5 endstream endobj 28 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 14749 /Filter/FlateDecode /DecodeParms<> >> stream xy|T?g> %hE ^UA\h^ *׶"( RNBXo@Yv~<䙓3Y39s _Y $7>|p)S=zT˩222bccccc/_꯾u>>> pu\ܹsDFFF@@СCKooo^܏ ֩zo6g͚Eׯ\ ?~7|C ?|ذa&ioߦ;v,111(((44tܹt{AAARRRppphhҥKigé.^h0FMo CRRe999aС/d>>]vITRRB2񞞞W^yE// L>r}ԄO4pBNuBȨQhO={!qG1 #G'7$h4G}4!!2vXIHBƍoܸAo2BBB!a={ĉ=!ga>|9 ݻw|Y&L2s---h=_Jٻw/E $O?D1BΟ?/IB%I:r!dذa$Dze˪6l@Yz5('OT*!ӓQFBVZ%IҎ;!3gΔ$??I]F8=Cll,!$==]Qw$I/_իW=BBB*++蘘sB}]M1}YZ3wpBH|||[[~ -ZO222!'O6 n!?O!sѣGvvvKK !,,33B,&L5lذ3gKfFwywޑ/ٿkOu5Kb鐎{< .L2ү_?BH[[!dҤI}٤I.]$IK/z7Mz=<+++33"ۄ̞=mĈw4hИ1cRRRƎkl h=qc$d48E#!4S;w9MnݚӣGBȪU&L LhkO,!̞}1>|x̙aaa+Vذa޽l6ܷ:$iȑ/^\j=<<ƍo>4&x{{7СC%%%Р 8|p{{;!d޼yf#F M?~$I s+** /~A{\1ņSݽ{qqq4uuЖQ/:t(}Ik/IÇ !3f̐$iƍٜGSwJ裏Buuu:薖Ze˖+VB-Z|r#$I_}!o߾wܱT1fZ? po:sƍE9swY|CDUI>1cN0ȑ#t{vv̙3{ٷog}͛6СCC 1cƖ-[rLcnhhXpa```LLݻHپ};mԨQ*&w}---崋ȷ~,2@K4n8Bke:tK8~:mfZ%6?'?d{C-_qe˖]tR7^());w.m_555k @HѸi&:\Ph$4 (4(--=sLPPUQQA;ZCCСCp- 4o?~կ_T'\(==kh}?//;*/9Ѡ@PB4H$#F 򦦦{Z{`qq1] Iz;r @PB4 (hA!@ @PB4 (hA!@ @PB4 .0`@tt fgg?6WTTdÁ`wByӧ;rUB4 (F"P+))rEիJO>{?~|۶mgvU׬Y㠓#@DEE=*;wrA @PB4 (hAa s}ܷf/$;o޼psΒ|~[ֽinmmMNN^v̙3S@5T)))A'ɩNMMu[ZZƏ8hX\FN/ruZhgϞ5Levvɓ' txꩧ̙㠓_rݻvrٓ㠓>SBHXXK-c[[[L}omݺۛ{履~ڻwo~V߃N*p嗕GqtBP/Biɍ7޽X$mٲE~Y__/|\Qn @MddҥKcccϝ;縚ne!ʿN/QW\Hiߩu~a lΜ9AA?pk-EGGGGGw$ׯ_Ka ׯٳO>ܴ4Z8k,Wsq_oA-((hرK,a_z%EAqƊ+ DxW!-`@Gp555O<!dԨQ?!dݮjx,^8??Ϗ|ն6B7NFK4__Np|r]իW}|P~Y___XXH'Aedd,Z]#))FgBHZZڠA <4FBv:**uE뜇lz߾}}9rduu5m׮]3g:t+4c fŋ}||p}uBI:޽{.]yf'Zg"""uZML!!!=^^^rhii9sرc/] @ƌ֖tj_\v7ߴnܸݻ'w=BFq؝;w>\Q RgZZ9?yqǷ#55555UPSS#/Av…2oocǎܾ}[nEԑׯ?C#\t);;ϯ%<<>suY޽/]b :̛7o޼ynݺuٷe2󋋋?c=薖qرCիo񆫊ԩt??򀀀f{!@[XXشiӦM/-X9Ο?SOM4)33333*,,۷ʚ7oݻx ڵk=zؾ}{kk$I?UWOMM}'XXXt+**:qDHH #G Ξ:u$Iǎsu71 [n:uJqڵ+W<إ??DC=C&OqFȑ>}ܹS_yy+ǬY6n鞋-joo h߳gOIIɚ5k\]G^z%VCߺp Н 1bDW6O\~=!!VfggƮ]o.ZեǏӷN:UVVF7ʊO:傂8;0 'O !?M&S[[;kmmm<ȋ/8f̘Ѝ 2 = '=v|痔$''skf͚U.\HYٳz{V>}:#_v~!8ܹ3++k۶mܙ#""͛o;y3 fyGʩz)琒mڴh4}V'==ĉAAAǏկ~e[y\+;;(64*[gw앑ѣaaa<ڵkN3'OLKK1bT/d:rȉ'~[o9p'[uTjj+Wݻ,`W?)} )dnJOOrJQQQJJѣ5ߍ̙3gΜ/~ .tr!@ٳo***:wܸq233?%%%>>>''W^}捻=111t}}Ο?W___RRK7~={6!!… Cmmm-((9r$ݧ322xСCˇ r常b뛘8Ǐ>|ݛRUUիW1c̘1#555##533sʕF-++>|8-OAA߾}-466*oʕ+/҆~☘ѣGggg߿h4677O2c+W93}Nz={6''+WYYY_~ŋKyO]]ݟҏ?e~~Ν;wO;vիK,ioo0aBLJSN-[L &,]/K^^g}O=۷lRZZykŚL褤$߹׿uiilnooOLL|ꩧ䝷nZQQqȑŋGGG'&&N2/HOO߽{Eֲ;v|G<}۶m[`KKKnݺdɒj׮]QQQk׮̜1cFDDĉ}QU/VZUQQ1n8'_tnn.!1;;;???000//:(( .v֭;wL7n۷oWVVzxx} *tU X{Ar劗ם;w JJJF#իe^^^{{{SS͛7rss^ڳgOHKCWxWFcBB}2CΝl2BH~~djjj*))3f ݧ,//h4˫ӓޗ| !MMM7n&=S^^ᑟ뛛{Ν://H_uVnnn޽ n߾BV^;nܸ!CȷYZZ啝]PP[UUUSSc0 xM2??Guuun(,,_d;ƜPRRb6[ZZf3!&44/^|xff&!dɭZ/333gϞ=mڴ5kݾ};++~>`ZZΝ;.\HNc$əG;vLeJ 6l)=0wڬ:w`` }vZTTTSSӱ}ǎ/p Py.[-54_8qb7l0qD';Bw3L6V^g?ǫǏ?SxaK3]]{y"倵~%qŗ]]Bٳرcm>|իWcyҽz54 (7vڙ3go͜9SI^}M6ٵhCw_\9p _ou̒-'駟"@#cfq_Νr޽{C4E7nXvrIgB$駟^~EG8`Yf|O@:]``W(}#ᰰYqa.C$.`=4-*rVw[:N|t:lg};&bWAƸvpAVɽظ7xzjǷuXWW4*xF*4 (hA2B gcj*!^.ݟr:!ȋύY9^K|~奙fzQ抳gs}9)sEJd-g裏^|mǷڛܽ~ԩS;F={>E: 4ꞓޗtzxaaaAAAhh(!S `\r~MOHSTL}>L9>rvLɽYv7TSSeP{A4_QQQ=f?\XX @N8qΝ111 .trP!.{=2CWp?ϼŭ4G-r=ӐȽ4w͐[Ch]7ҿWZ5`^z9ȠN>}qhtfA ;Q&L: RF{\9zǧԦVJcoܸtM6=z lٲe˖-ڵkIII|]9h5~lr(1(Yo&ɥ0c@kUpɇ}jz)SM_2'VIkIb˗/wQ (hA U=rm8l @PȠN.n"&Z <[غ/II\Q~eItP @Pr*YO@qt*0,=ժ606UMKsg!Zʣhi;VNDb4whsay 2dŋtrZRW>Z#gp>džG⬽ RUH*2$ת)>WҎyq~WuA #9+Ec\..*LsAYZUeLˢL4=䷿%K8➜هnLIQ+9h @P}#!6q'.m};q7>+f6=D]4tAr/ \IKm^, cBRL2=,LSaWa(7ceHw޲垓6CcZκӄ @PϠeZFsԾ t-Tri1ɑr2iϘ1G6޻\RA+A} ['Ws9]#݌/mhSYnCQ-.bTs: @PB<[YOX.|KFhfU!2h5 r}9qOiiX[j .fO!4A2ͫw: daȎ @PBA-Sk^@ w72hA!}-e GwNlT7,IR2|t6;fTyVMߡ- C (d$]Y4VKeӪLO$ʝJu鵘{ڮPO}*w.lyfȠ (Tq~WML=W<ٵ7Wnp8f-mCY)!7iSenRK=UnJ >A 1w6i%ws`{q8ߦ8TɣSj0"긹64*}PeͣOfۙ3XC'B@!68e叔nVȸ}:(s[S*WŭNҞ_ 4 $ 9]OO*K}ԛ)- 4MJgOQNc wmbEI(qɒ\d eպ~hȠ:h}PLpL~Ǥr4J6t;-p}0 ẍTC\ !sqPZU_4KK4*p8-츏/ջϡm{To6qvP=FB-]訮w @Pݫ3Xg\k eS8M|B,4ʸ̗#avVBc iA duL;3؆~1#V_NYK8Y_!4W}lX*),cvѥ6f=ᴬ;tY~qAb ̏MA?HA{e؆ɔm~LK#Q6̵]&~L!82hA!@ UR49wpe g~#Z\mPTciR-U%`_Ƞ8N&.:?_Lz.f{FkN3xnK+!xjn 4tA֒:rkQ-fLsnCHO9PEo/KOͬ8eVh*X se0 N+ӲDem]? 4*nYH_KbIY˪J3m-xU%6âN{]Rbܛe0uSZ1 ;9$d͆y!ܶGQ;,aj$8rgB (hACXC4LsKeLٸgĨέ4dHhc>mdJK7ʢr;2-#v  @PȠAۗKl /jj3MŜR.ڿ)̥K-c#0'vp` 2h}u4SʭTUꎙq+2<L:g2TZ&sLyd;b|.noD},Qt!40>/g%$m$ִTtXzgXXjw2-u6x0sqKš}~ 9ugUr-:dB#Gi {Th9#IiX0aTA,2עkTWzA!4Pš3Z׉;|;L@G, =[ NHOKW#7H*`zs'$a>UVC,5*Yݿ[`dB7;}.i/ڵNNޓ.mWo=g'-;VNЅA u`բMn@}WgṊfL-],82hA!@ ULN,nuhL!z=|~܆;桑ЅA 颛^9 kMcg~zu dB >BTN;@mP$u. @PB8NNM(kk`+fi/e"rWȠ ZR;483;)2^Q)dB8ty&PGoYET] @PȠuYOt5y.]f}S,KM4qO*x-Sci(6SO̙4/?9=UoǎFB @PBTpaJ@Ar<ܧikqd3Z=i&k]j`UWqJ4 4AK%Qob%L}PO싞V>*`iaoӡ@ (d ZjU5PKK B<څA @P7ytl-Μ[N2hA!fx]fG?^S)i_}SXzɥ,Aӣ[)P~\]oc>3W"2hA!@ URhT}M;:n%%K9P nzg>QSΏ!T.4^}rk !*7D @PI\]'LN֔9D[ۚ˥Yv> PfV59i p+A @P`3[(!2hq);u̐8(!4P!:ϝ%>&Vp?Ƞ Z\dYddYYey tgB (dТcycdlvAkO8w$@-4*qqyB#bC (dRf7lvL6.%MyV"N.\Ƞ Zt4u];tiT]W] @PB>hymnu8`dB-.eF%f4 2hA!@ UUڗfC'/MfnUwᱪǡDd-8dB-.n#>n$tܙRv7! 4A O)g5f2hA!@ U` TK^iͮ;C (dTQS Z{ƳLb6,8dB8ĥe$FvEj*!'wA mkVM xB=9l @PȠEas`^Ai͋:vU @PUL.k?2;};s6HB;gR6C<ꔎ/;^+Iؑu#A[g]Jr%Di֬*kn+c2_i6k_3hc~!4uhX:rrQKQKۣD.FiTȴiyHWܴQ:"g:iFzZ*TT#!8dB8ĥRo ?2̻}}˘gvnO8yJU4.:EҪ{ KnGRKFB >6HB]@ (tϿx0U(f]QK]nfg);l=#;/ }Wnf'8dB>0L~rd[:Ʒ:Vpw4L Ƞ (7ZE6ntu!C dKa4v}?"dB#@C XK7!4P}ɕwTLȠ }I%w㮐nv. @PȠ ;kh0A @Pp.-bw @PȠBK#RA @Pp-.CP+. @PȠ/4 4A8,ZpȠ (Tq8.AfÅA 4C6 B. @PȠ2A~*C (hA}qU@ꍄ@2hA!pVʱc]T4*K}~fp>dB }iʈ. @PB4HmM/K^b$hA 4 A @Pp%-BȠ !wsf2hA!vtpe6;p!dB8=в  mx4A8S&ҽ!4P}iĈ9^\4A8nvA 4z>hT:2hA!@ UB4A8%\ & qoȠe$edB4 (hA!@ @PB4 (hA!@ @PB4 (hA!@ @PB4 (hA!@ @PB4 (hA!@ @PB4 (hA!@/- v endstream endobj 40 0 obj << /Length 1078 /Filter /FlateDecode >> stream xڝVIo6W(Mtm=o/ ʂX+I; iɱ,rf8Z*cw^(mnBM%l%i@s~TT[$D]Ja4_zk\m_2+rPR춅cƘX =~G~̿~v^#0bū'{'g9R7Hu}kB&i;$#{uX<#yf7?rE0k[X%*; }v&$sa3INaH:(M| n;Fҗ({()U&(Nאf0![wya3>Ĵ!@ gWКгiǿf5CB pO ]hY /e7xG^`I&E.i7a&Y%D$&.ńOC!q&h$i!.{K(?o?wJ1UKl"^r&0Q-c&@6Ql AK^M!N9@cSрhוk_CHXnbO&tQB,o"<3]K }j84 endstream endobj 32 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 26976 /Filter/FlateDecode /DecodeParms<> >> stream xw|TU${#@B H"˺ Ȣt]QT ,v,6z3cB$3ɜ?ƙw͹}|VVcUUU5TOd:u2g޽2_~JKKM_ ƾ{Æ tsF1~xI&n m!MFo߾@׮].L[TT$Iȑ#Xb$I\.wppHHHO>)IRIḮ  T@;; &u]Q C#NtT={}␫޽{7\s-Iŋɓ'K;v~hYlٲС^$wmJ窪*I???R@{$髯2$I;v233%Iz7y晜xLڿ`ƍ8-f\~7@BB;!o`ҥ-N%X1!4 Su]ڵku:̙3O8;9rKIIIAA@///SP*@޽.\WVV /ۚ5kulܸرcG~~ϭaŋmڴtf׮]񀋋ɓ'O\UUuȑrtt;wO?i$I~iӥqQQ;SXXعsضme2ٔ)S-V`0$$$ݺu֭[]]] dh [rYf9;;ϟ?)M\\\uh"NgzUpC2Fn ى1hA %ZBAP"A,hA %ZBAP"A,hA %ZBAP"A,hA %ZBAP"A,hA %ZBAP"A,hA %ZB]@Ôn߾U Ա7n]smے dBAV^'oe 0`֬YBСCwr1-`D@ X(Ђ J -`D@ X e˖_Cx Jլ5 Rz~֭/B%0iҤW^y%''lɒ%T B\=s9s_ھ} ^|UV5S Zs$\z5tKqqqqqqT BfeeennnnnnFP\~C]i!!!-Q gC=v3w-`򪩩1=V(r%&&^CnxQ]349/.0K@GFFX8---""B&]kܴiSAAA(Uz ^.N΃޷o_eeon0.]:}Af <7yf-C=x𠭭mRR?`Af< \wK\wkRAʧ)?H #z Sac)h)u \-p<s"ArϨtsrhAy[ Ђ &QeGwEB ssYkB-]T⫔+D@ UTX2BD@ UxdJBЂ %dr"Z9U\A X \wH eem'Z8:S*E@ X""EI e+/ E i𩱩.Ђ $d#-Ђ \pl\˹B .MeAKx֢7-`k["^,-`Y\ ~K h Ah96C2^ tV;H,a@ Ⱦ[2FQb5Q]k ^{tK@y UAh^F#Ԥ* 8>;a]*#_(쁋< hA>CWt^}<>^M4~?17[Je%ϕ (Ah:FTos41pҟ]%6;[zw0rOZfh9_P\j\eq-3#Hj]I|<ٞdyRDT{p_(++v-gg>Όq* Tg2ݞv}S:KPB*IT1Խv#˛] E 06}nzN )_IQA̸8_tŲdž45-BӗS{ajjQK˩m=qݟH `5H`p,cjxB7qj6Z& xp&=q!F,*b y0 .7{ -MQHhx:[*E@^`@.Rߓ F0|fo<݆[WS3'5dX0oܰNI2c-괺ԪS(ܓqsνPvwN+b;[cj/z7N*TqtrABJ tӭ !=VG~oXv21HjvS \#ǎ¹=֞F塞$G{` B;9*tqI*9VOQrTG 685Ђ C{u IT&/Q8'3x:cAs8rQDnÀhޞ0ɡ4'3Ia A^X5o՜!w;#PG_"AhY"4h2dD6 ]غQV˾ $_ `##6I=ϰNx42qa/]yi{{K_"lo,`Ɛ^9>) <=lMD ~LT\@]E2[Pq! ~] ImNhO$Јr $s?{8BJnLHg=1aDPX%>gGml0Ц?- TQBu +Yl}{qcq> ٥Iz#Y$t ݁İ?bH$OpDZQ}}pao`?+Qa ~o&bCF0TD*e2du/}q8u+2ie"+&  НG2b껖5hvrn+i[I;Ecѯ'c)WEO 3=y΍]hK3?>  QA_vcps8ué v.(u 9Ia2J,%RT781LI:3 [M,3Ϝ:Dv~c"&*R*PJIz0ʃ1|Ђ ܘAA[ނω8}$\궦s"wp4IG{i]+1*0"}Do#㸮<8F ؟([V*6V4qg x0ҙ^2l_hT"A/AyqP&N#2{\wJղαr9P %! "|qwl"S|IRjL_g<݂ry@Y5gURrX &>7/lāhAhQDy '׽ds=,H'%y\(Apw8+^6mNoA2M3*+@}e2ʣNm5 .p\z5ukC'V .VPZCi YelK# ēz%gƩBut9Jv29T^ A'}(ol/*$ Dz0֍!n ] fUm0&Mtґ#GN:uɒ% .jYYԩS曁>S ,/ AUN 4h3d/PA!r\qcðo}aWr&r8 +qW4/Ўt l/-c䦐Bi)^MBMby䔓[An '_W|\7j-1"s'yb-6v!^B lFN[٪"2\^LY 츸qqqW/Iڵk jժ{'Q*}tGGG77/'ٶmիyaaaQ*HZtW`@W44fu4q ;|m0w#ͷJ%H-N_Y@B(#ү.qwͱ1!Nw]S 0>C8XGZ.J6%ɦ2lp"ޓqn va@ &M4KA^^^555 B.^Dٳgϛo><993f̘1<9w܂Y(U rG.]!/(cqtp!ߵc 5Gu?yK.Z N/gܡt {(1wHhM Nr1S]n $ &v!wЧBO-|`BOo:ÙYE"_CFF[tdd+L"""d+?[l{;u̞=_.++EBK4ϡG_ })Fj4N!iav8w>Pv7ڲN %9<ǎsFohMvW:j; Jt "6P9K!9G>M#sgBҫ+ԻMH*Rk]Z9=yŗZ&ah}|Ǐ,Y$::Zs&y4QCumF$[OlݰqþpNĹ򇴨R2JI/l!g8WD`hG\'RplӨE yyAڋqtExwBqG%Jհ]54[9><WsmUmRRSO=UVV6lذ :t FkM8<111))9jHңT'QNpi8wgqطMa0rdr0+7ld]{鄗3A$|)q-|*@y\Հ#v'.Lp݌JWFj= W:uYU@׏,TufϞ={fhkQAu U djaTc8a߮mDz1g8_Lz1d]^w^NPGl D,An?31^5j۟h:\dC%?԰[HG_s.WTf)Xr9Z I&Mz] m6tW:8Y?v Ij5dpbreݽ1]#1%>-% d#WD-b\,^8{ǝٻN1[+Y_īLr" ?m*+czF<,o ,Gx ih3{cCn 18D|1{/p@J&`kC|0{'`ըOr,Eg){ Qsu5%\?=HLs|bR1r$G\yvEiQGukm=9pC;j|Y~%)ȑlv'^N  /'&<%<BwAqw" G-XU~i2fX9ކI3gr_M^vv[@hdD(5ًUž8u9{/ṛZg VʤP/20آSoKT8"/B8riK@>|g%]*~aމ.xכi"ﭷkyɓ]mnjԩh2fS6&p!v=fW,2I-t>E61; tK+JjTG9D)+ 'IX/`$5bSԤNt %O&:ӽejhy^|ܥܞɨBb;տS &>r?;8NpSF^%2JH/&d< blW:Ў^Y´rt!q=ν@? # p|-;MXOi5Vj~7P!A~qGֵmo=/ME^Έ8~q]q1t75<*̡|* Χ2Ta,1.MNKd[Xk(E73dhɈb m2[܆&]#-q=sdx:=CHlϽqhaX*Ӓ\8Ei+mQ' |ȟd;YV=% J 6!7I 훶)d}+.se`3uYbOjng* )NE}xMmvA9$qNGs$B<։m,>c-:~D>J;\xefK)W$u$&xЙsfY?Da&!ΝqhMmwBUmS~F2:OzFM;ˆWz%?;hjt9%{&Cv]ķ1p*VC_ãNt5wav1q"LkꛯnF5{}> %GJqc@n g~$W5dgԜ)J6)a=!ӓ @ DFm]!Y{ !<6>ݍGp<ʹ&N.pwRh=pK?~/ ~ٓwg-+4Ib"-b0϶p{Dt\ƅ7[J9ª^Sy>ݛzFrGQk&mְ$%ǪkgG XmAz~ÇINQyY-Cަ~&c^dJVP s | y F~Ke~N%w'18gS3"y4DL[bQ`K5WBqGo-pC V\Nǎ ƨQLbʚ;ˣl5ekPb3.Į].GAȣѾ*5E]~w~Q1D9bgjZ,S$9~ sg#lC*\hOxMۗ%K>8SD!Il>.<֟ѝ7}?L&pͪ2&MwF8 XTz}4U:ЍW/܃С+|u8S@; F݄cS8Ii~[;X3"(%4|Nt[pcj5[oΚ5LfZ0*ɞEZwPfV줼aɃda=T0/3z*u4reriJ+[x+3JJ6%K3wM-Jt*(^N26Z[x 5tg0iou~2(=ĶQf"\W`Gb=߼U 7pHc2w.wm@t} )zҕjM+mJ>ҭ+?EcҨͨ\՟vRуě%峨EL6-鬎$,^xy1w..lD@ߞ6w(7| ͯdV>E]}$gyo90N5&Ihx\({Hc:}Shߞ%KxI\}\зQ G \CdV_`+z{]5R>c ~Af {m][R577e"qc_հyL7{60fgK%<uaO(flYx]֬Ag$^|DsdD@T_aj?}-AU'H ,ᡶ>, 6z"ᒽ{Yqr⩧7sdD@Xeez =XoXw!~vkY\W#4dI+8l#8|%i ~Gq~~mmٳpN$z_ͼ7gȖjҷHc#h+`yF( e/OtAwX":ubr{m7hB"U3tDFV;ɫ3Jjx0O3M8L_f?ȇHJCnk~88p8z9w1c6LlWH.ΧCukl?U fӃ4lU}?Bk|rf=ӴF#~e CVZshsNC_i/dEQjra)[seFYr]Z7EosW$@J f??-NZTm.xϬ Z:KP|͑U?J7.3 iB-3%+yC{j5oɿ'ֵ&-ɪZPߧiQ]otmnb3g7N0$i3ۆ;ݒTjOx,]i!=3x=||]Pg]c |\i(Zkæӷ3-ٖ@U3*ɛ)7sWd?[af+:+7b۠0˙<w%xjмؿ1nZ/*N^`Psc[|}#fm4KTmc4z ke؁${Z&E~8H@:|4|öxvX1uXGqwgB^|w+j27kkFA/p6Gțc 'Ne;]eJ/]YiD_fb]-kVȨeղYwkj,y/dfh?2=ecVPUŊ>%%{/ 2BYo@Wq@c?Fnyޚn7T><?N.Yc@ Fvs8O7}s-ŚLJ'm&D[dDuqZ;Hfw'6`00b˖1f ?X]@d%sqrw.ق 꽣J}Tz>gOGw@H2THuei3pvfyȆZ/4? hICط'ۼ3'Y0ĩgX[HF~vTj6'nRͣO [ 7P7ln郭xJs?BHA9od>*Y/ǫ=}yij5s'L—_{ˊZuwyתR>j_!)*F}VJXßmqu"Z:4/O()o7T:t(11'PT׼?zhoodgg7S @O娌2R"ݻ?jηj; X1|x+.dwBر 筷ߟ;y-Y`0L4W^)++[dկJ4rӧ:uv&䟄]OFii'~ i!fa"fڲвU%ܸ;m#5f6mg9w f%5͛7wxϞ=111W}DcNS3ϙ3gMU6Jg +$Σ OI_!z\N24QumMt Yr=-uK殥-:~\zQ^֮T*s=ϟo7tvvv\\ꎸk1ӃM9i$IF,ew>ݯ3 o錴'$ڹ<Ƚ?쳤e ?,n:2$ZVVV FQ(w߭\7ޘ2eʾ}??rk^x85Jϰ6xD-Tc.s=K殥jy%vE:mV}}:;C kqIϫ.`_ܩӧ>'xi{ggs$4;1J-jz}Ñ+l܌&Gyś1l)zZ'w!16nd Vz3K?uFjQsӚedŤI,_.:[ FOPJ5U<.lܐr0s?0c]÷FShs7_N#ѩS8H2VX,bE H2yY),_tNJHgdZ@{oyyp"bGrUwxח']L%I:g3f 7]VȪ8:c [>`+= dkijk?/d"Vl :m~؟YWJw؈V7RîΈvoZZrƎAV]`~VЧ ~S8lM$gK@ں15gsё|#;u<ŋ_رFVdq.{m2hSČS|16w`-bFYٳc3w5I- vS8 ̺P3QNg(E3FP(1G!.ÇE: W+ND#18HriΝch?XP C__ˏx1-`pR:G?n-UW+#a#ʃQ.:vQ(عW_,\]UUu>Ŵ) Nn[VG ~hG^2lMFP8 d2 rzƨ&YTƗdz殥ڴ{ߟ={`1o>7~5G !/Nu7Q,efV?NصKn7 %I:qnP"&0Ls o;~"CBbE"ZgиïuUI/q䫪΢ZmE5"KYJUҒRG$W"9XX?VS">?63;$BJD?H 'c2郭[ag't G G?pjͥ7? ?a zI1)0St#:[yc2A L6b<)hɴSlEWod_~?U8!8R] q*ñ ~3q \ |9JKx]0p1WW$|ߒq.tW X>+ͫ4M/:Qh0oG^BB0{64:_edd8;;O>e˖ӹ [d @xu{‡7 >+]/D[[8BرX/#t 2<9`ǿ{߻vk׮@"FN#9Z4R^CxC\bWIZdOœ?R!, ct̟/t2T3V\9u;wܼy3g?~\xt< 7w Nw6 MQ1v٠q Dq1F?/B!HA'$$߿3fsUpj@ߗ]7n0M;pzw"c^|-Ə:~Ĭ[N_}푂.)). +++JUtLodX4`"Au a28GA%U3F4zw ooo7Έ Z\p'ʣcZAj̓/k[=4R|w)q T,C`^,_n ոqc޽VZBuxmmm;u Ph^Y ϡؿ}QNCHA>UjEPBpjx :  ^yaf#DHA?~ȑ/_.[rҥqU{0:<Ǚ+ zp-zt)/Ξ?"#5޽{ڵsuuuvvHJJ裏WбHY 4:{AϢ46?۷W*00pg\ʹo߾3g&''hbժUz(j2dΝs6lX9K[שSɮ$) A0;ke챀ЉDO.G8q˖Nc,=ڱc^z5kVDDBl2$I3Up6~FyXdu V€o&7nO$'c {dä}ն3xwwwckggAGOF;6Aq Al,^T4L 鏵vpݻw;vժUB'p$~n+tSTNksh*t"h|9M3BfB2FgΜٱcGǎx qTɐI);Q0fB'\ѳ'6nL&t cTRR Q۞θ 8^.tj@TB+wl O^I l' ;K`pgbb2(? ?mTTTiiv"5k^Up:w#=HZ3 Gf .Dj*k8CnU}7|P*ٳ.w$BQvm]=*E)ǃuD&v~۷Ѿ=X {Y'd23I͛7o<18FTp1igS K3EMx{9HJK1t(22ΑHD$^Ї84` JrlHW|v~)SXLb#vEݞhƃYceM0g[lv+a&,[)S;BG!*OmN`cQ50R?JJ\P|9wB" Z4(Wk /D%  ysl sN:sL<==v###ϟ޽N:Y?o4\4`E<7 ݯs;p7+V(|l+9]^.\ϣf͚f}+AR@unB'2x4k>!Wx|Ɔׯ_ m֬Ç\RN_ڞ:u),,O8QO$I\컁 K{6A۹R4l± B~"""rrrÇ Hz)hJ5x?855U./^§M4i I| 7'ge ,=X /,tz&M|r6m"tttM~ǟ{n#ŏhS 22\TǬY>G On-Z#hIII>III)YfEFF%wSVhx 1A C+W0|8|}a|1 ~w:tHJJ*--6Rˇr lmmJeFΟ?^zOyr ϝ;ge4'Ojnj ?}^a@cNXW8׵sgȆ|I@@KDDD@@] vppR477)[rJWW^{-+i?7KKKXZZJ}N Jr-8kup+|:RaP\C!tcԷo߃*Vmg 8hРk׮ 0 ''}7nC@KA{xxHLLtwwxט]vm޼YV8pC^˫Ǐgdd#qdaq1Rk`iţSTض _}v-r21:tСC_x??a.]dggGGGTKj?~\PlܸQT*ʤ$KKKRx;520&7^uDElق33܉#DRfffQQQSL𰶶1cvyOHObc畒n0}:GBDzyf[[[='N:Tu)i\uVC,2t01 xMs8?欲벲ܔJ Zhvl:r6Ǝ/ 6qc󉌌~Wu,JÄl0GFX愱DgΝC^P(p!&NF˘aAW5<3 GBΟGh\4D`AL6L`&t ILDϞYI 60M FkPκ.]`fh39 \k5х؁=ss3x"1! c" FF=NNBg"駟}#Gh yij +7T:o2XAAZCJ~M^.[>_.Ds(Af W;pZ 4:۽Cmi +X~* }2dyۇ1c1gj[Jh۶={Lz:u! ÊO,|U+ؽZ +&&SN,,,j֬)tƂ~dɒ={Z[W06VBb1p aBCNC|L<=g?}޽{;wtOXOT;9fGXUlW^:Um۶m70a„ t*'j:`4n SDυ$;XmnVXϯk ӧcG=~б b[d':hs'Zpq#W  +v+-̋7sgv1t,t&" +PfB,M|6mBz0ʡm Wd +!n5jTLLLfͶlꪇƂ.k`;G%ZXKB9mSiӦ٨B/tzСlhz=cƌ]v}嗳fڴiޒ j_Gb$yb#nEEXs"'Ç㫯&t&F>CGS5]ÇkԨ1bgKDq9iPyq&*tSy31e ڴAl,6of;n]z9$$cFD0V!'?ec-|zs?|`shpr¡Cط-[ $(''~8pٳg81Jfpj)t(QRopwǖ->&vvڭZ}/yvuoAZSX0cǰ? *4gaxBD"dF]lu3 1!/HIAj*RSq6nFFqރo- 77 2 UŸq8h^N:N%)!)۷TZZP>\]xȐIz55 0qw%ggY9SpjK54+H$^Ѕx5xpè : \M{T9GZ2ZưahNРD$z)%%x%\˗ 4i6m0f Z+~}AUcccz|޺zHSXkp2\Ab"p"h]Q#4h N֭[weC,誹y?tܿHNFR22P6WFh{eK24:$)h߾}N!e,r&~6!:j5cڢfM4l޽x{ˋыaA?ŋt 99P(p6ΟG\23I̞4i"tJ" 4sػ{ 9ߵA>GvhZD$}F_+Wb"!/[[G̜mQa|UЧNگ_˗[YY=v߾}3gLNNnѢŪU|}}Ο.k`k ԭ GG4hmai)L0""=J*[>dȐ;w̙3gذa.\Gg(-ȑݨ)HtL6m^{ю;f֬Y.]R( sv&"qtJJOJJk۫W/xwww{ F/--U>6*PQQn"=Bh(uDDe)ʲ%v=vU*pݑ^rӳrs;[KVF/p_{gT*mY#777<<̙3;vرc/2hРA[8iҤ*۲SmDEq="3GobbCė'$$Xb=`b,ZѶ-쁟~ߚjR]tΎ~W.]]~q?tѢEjZ{Nf͚;v $/1c`OGtH/mff5zh\ޣG3fhw}׮]]bP(j׮$: >FZ }ݨWnaAAy}37ǫV{'")4HDMD$R,h""bA HXDD"ł&")4HDMD$R,h""bA HXDD"ł&")4HDMD$R,h""bA HXDD"ł&")4HDMD$R,h""bA HXDD"ł&")4HDMD$R,h""bA HXDD"ł&")4HDMD$R,h""bA HXDD"ł&")4HDMD$R,h""bA ԩSNNNaaaϵVTSSSrŋ+R6m+R)))>>>>>>)))_KDDZxQ\nkk}lkk[TTT*˖<}mݻwoڴ³gϺ#3襠߿}T*mll*L>}:w\nΝ;Hlrlj&&&\[1z 襠t钝R.]]~qBDD0YTTԔ)S<<i-=L_ -,'µDD0MD$R,h""bA HXDD"ł&")4Hmӵkמ;w/R':uJ D4MQQAt/??VZBнbSSSWhZlY'YYY)FK k׮BнO?{Atˋ/^jAtO/߿At,;;߶mAxHXDD"ł&")4HDJ-LMMMM%~AfffһbUevE+yyyVVV"ҭW8AbAA$# ȠI(HXDD"ł&")4HDJT*%vB($77W$zu #^NNR:^r#HCj]PP0w\oooKKK;;5jxyy͙3XhUrܹ͛שSqQQQڅEEEӇ^z ARRRBCCRRR֭koo߭[tUIvvȑ#۶m;cƌ;wիW;11QhU%ZA{QRR~/7NhUk]6<<رcB'ҙ'Z=BG7xq&Lԩ͛7۴i.t*5jR>}ŋ}|| P(BBB}UC#-GWsi4f͚J'7f̘;&$$dfffff֪UK@hUPTTh~v*Q\UeggP(4Mjjv߿ ta{HQF/ȑ#773{'M$l$]Uի?#F>}Z&d2L&t*i߾? څhذJ&_>\XXʕ+BG*n>y!C}||lmm߿xΝ(???ӽ} 2cǎ?c:u EPPJO033wuuuݼy>Oyf>}jԨQ~={ꌌݻwmVt/n׮]#F]F={ܹs{o}g~"Q!RSRRrCƍ%0VzzѣGkmm $**:h4+WlܸQ,:h>|՜ڵku]C k׮Z[[=z?Gbk  ɓ'cR/Hw׸_G]9 ]xqB=k/#4!H9k/z1R+h R/Hw׸_TuR;1rȜSj/Q*K.Yf^T 5u֓0ZR+h''rw T*RUT 5Yl٬Y 3%##CHR;!{tBL0_~iڴic$#h R/Hw׸_tȑ6l:R+h^ ]~A*`AIAI HXDD"ł&")4HDMD$R,h""bA HXDD"ł&")4H*ɓmڴ3sss$MTY͚5[b)ȈI[n_~xxxaa!;vx{{;99߹s :u":t @R;99999͞=[jnٲa޽[m;ֹsg틜""ڵkN***3f̈#4,YDVϙ3SNfZ{nrr˗ܹcoo_N:o߾ѣU&&&IO+K~֭[?ׯR٫W/GGGFxɓ'k_pرcaaa%YYY5kTϟQR>WDGG9rDRivڞ={j޻wVXЏ??O?-{emAWܹs...:ƒUtWWWcLzꙘhT(.00pԨQ󎣣 [hѢE޽{ܿ>JoOZ_?33ݽlA|}}===۷oߠA~7IXTd2٭[cccwQ~4\V6===,,Ǐ믿d2ϝ;wܹիW;;;Wr[jZ611)O{| 㸸}<ޑ#G=<92:,hn ڸqrĉSSSs3gΔ~' 057s۶mo֭[d2y~~kS\\OzǷOKK+,,\nݓV ^z+W W^m?Yr_~ȑIXT⋞={6ms񞞞Æ {饗233/_mǎkeeլYMi&$$QFk׮9rL&)l;~z5oIO~N:{͚5{׬<omڴԩo]\\aÆq1);FDD#h""bA HXDD"ł&")4HDMD$R,h""bA HXDD"ł&")4HDMD$R,h""bA* ^ endstream endobj 36 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 253 43 0 R] /Length 5180 /Filter /FlateDecode >> stream x XTejYiKii䪢^2ei^f6#mYx)MAfej)fn\%K)yE1uPB Tofz(o/7mZs ľKu߿C~RQ.zQH՛9oMRu>?6r^߸ӇDWL-J476rRNO?bͿU:|)~xW#% F_Ӧ5@N(ͻZVm^2^Qw?EWe~3{iӚ[ B!B!B!B!B!m*SQWwaND/||||=}NX>MUNf~ew86Se[u/f{eT.TLn| ﲶ"<߫ G<3fyj?K_C ߚcÃ' cD$/F]b. |1Q_$Ũ/F]b߷z5.u%| L8{II|U~Ui#?_C׿W/yZy}w[/^ 0EؾRUdHU}]|~lOi̡@R߫}fgߕոA9}tl8({~ ,_Up_GRRT7ySGGo06;K:~>޾ӠE :ݡ48S2瀳}]?tKRvlcSNlhߔ]B&i<ڥ9oO.@z]8*NKNK_-׿z^(c_ZQξe=AؗVDofK_o/fb ߂sRF{ymI'쇇mZ{׷AF6ZrVbfCF'tIP9е7%%eg~SBזsq |^t;|%s-Y_|8A}iηxim\V*oIRZ;N͗5]tηгVlx|okF^Z|+kE'y[N{W%|ҫ;||>KT_zy|-פ=5}i{ZqzzzcVAZՔ/—a×oDZjHGҀ{st[-w k:|뮧ë^J4w(j.s[g6+H|av}7÷Zط'*Wߗ[W+G}춬Bd_W!|D Qf"ʺ4bco'}˼Kko(fΞ'2ccN+HV~ lkqi[##Z;ߛ+7F_ Fj0z_;}|de9tA5S=ӟk\LLYhA;&痊{<fEZw|pbNyNrD1|iT|op{_WZ7A|k{CǮ3{}Mi%dƣ](,]8*NKҐ?{]b[O/Z缾;^oK cTK#Yᛗ(01nZ=tER0J\AڿGsoރo>h6Z+uۥnu~owR }ؗH߿Qݜ2ץdirӥ I9߿as_o_K#Crq_|ӗK*/EpVJ_/_RZ_ԸI _󗌾=ع#[JQŷMdni$+|1sB92.3O' ƗHz~<2>ӝ/} 5;M!Q0.̖FjϟscH[IͪnacGH LCGzHX-xZ3nPt_Ǘ+'$Ld׫R._ &n|iVu?m]Oqe4ҭ^2I./͌׸|YЂb3]8*NK|,dE)6Xh_ 9Qe7sLW)|4lFw]i mks4u%Zy|,S| | |y>ER_iOՆ^)\}yl|-"9})s8'ow~?gz`ξo|tEn_g%O*Wߌ )t=wS_IqYԾWɞ(wܾtSt/]%Ӟyv:yt8Kumg{`t3/ ~/'GߛϿ{/c_:_ƾ9~k*<3_dKy3l+_ OJK~9ZRN_JRB@>_ OK jm;pwB (r~Qܦ÷vۇs-|,|oc.H1Φ!%|Vھ#mxk#E>s[>laydSMؾD'SJlwP`oń of1pRоUWeWljL}圿Φ~U`_I篳WmnR_gua ;~y: }_#e T"}=L=u4ik:ੋM7eocq~<#1u?_V>תxix괣W[e1%oϗ%5~3P@K|mz ЇK% [e~9*Y}4u?_VJK[xH%뾃l|pbNyNrD_h-" 5@}k~n3Ѯ[8Gq|-|>ҾK$G4֮0(N˽5?__<ߺޗ/r{/rs_9|$[ArW|9wڡ&WNy/N:p$ڡc[Uq.= _9j$کt,_{u!&n}w KIg_6 vmO@|9rn{P |9\__˛էmT_^i^ѿ/Ӵ^yDq/Y|qf:wĊZ$XaAc˷+|fl _.O—+#r婕[ֆC#J7?]uA ~uˌu.21ٛtW.l ۚ_&D]{cL= *z?"|ˏ մkE'ˬ+;?gݻ*Kޫ{r2-PeX}?3R˴Ծ\_?hU /| _____B1]j^[]7SmQkϭ\k4z ^|aC/| _mT究pEC|՛L/R/!B!][ʞrHZ_ՙ췗(CuV'{+s:6s=:mYXXʞ++}E{~H(W=G&ڠ֯}-vQHw'*?mo˺Ϗxyiٽe@*2a8uv@:۲7xٌz`u4'U)S*Ky܍\#{/"]~4Rw..w).*yo*ˈxv}E{.5]CUHNjSo> stream x  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~o{< endstream endobj 48 0 obj << /Length 1142 /Filter /FlateDecode >> stream xڝWKo6WV`HuMڢS AQr-'n;/ZE|$^|' S$VO W*c]~NHKvU]z>nƧ/B~{:H;s=^D@9 ȭJH( sڋ srUTY(k)bĠж>iMd~'Pe Ҥ/-sl*aȈN4PDK=F-jZ'8س!P?AIZجB"Gm^#j nB_1L8r}h%C/ )'T6'6I9+oiV(i %˔|Ҵʺ-6 /_[-~Q*]?`s:0F3n\g*/-@u˕β,}$'( #Cë739lcSe[tCs S@:LE@ 35W1~)ݙ8؇;%`˨m銴&P+TA8P"Ƞ+vf^qʕ&[lvrH:[%]J yqDݠQ{- Uꌣゞlg-Yg!#pqh9/99D޶` 47VY0qmJD_1`dS\ʦsŤ&O {%ӈDπs:T~=.{t-9H}Uf *0Ğ7r5iz>GiH\Q{|R֕rWeh~閚eK@^݁7zD<3T'rLk;Hf&mxή ]/~:64ܥ 9spYAC1 j~ \XAvQwR#Rz 5Sgμ7 !뻏+t[|]0n6?7g&s--bஹmM~qYɄ.FQ(FUȏ']KYI}7>R镌fUY̕.qP}˴.l=]_Ç6H_96 _)[H|D/56M endstream endobj 37 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 7341 /Filter/FlateDecode /DecodeParms<> >> stream xyxT{„ld! !(DPv6 4TPKE*^TZ(xբD-(e" (&@`aɾ{#87לs1|=1FY=4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"аFuuS\.99ھ}l6[׮]~CCf ;'g?D4q5׳缞G0`z< Ϸz OA"2`e˖UTTlm۶y 6dddDEE >ܻTWW?;w>|=zh׮]{YV\٫WQF?~ܻGX`f[ubֽ{^{-%%%99'hii9MvWDFF8w9녟ڵkE^8rȱcDM6;vK6쪫cn'++fWTTݻWDtؼyѣGOؿ`l=ZDn]vyED~_{Fno߾W_}fKJJ:ysꨨ3Arc̐!CD$55+AifذagyƜCÇHJJ7k/|慟;hXcʔ)߲eKYYٙ_4i҄ 1_,\0((hw}ɓ'󳳳7n{uu 6vƌ?|˗;p̛7{LIIyg}g=s+W>v}ƍݺu[h#cy^zumϞ=M%! n;hhhxꩧ?7sGIHHذaÌ3ϟv{`o:`4.qR"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R[=ŭz am} /J*RG"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"3k֬IKK***zG믿[g͚UVV6xoO>$33oӦS]]mP٭9r_}cH tDDDDDZ~WI&,]433qhy 7׮]V~ \9sx<'Ν;w{:::‘x=sL3Q4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"V@Z=yQ_+vସ4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@ 󓓓۶m;rȊ `k:tuӧOz"GwygcbbƏA'ح5jԨQ ϟ?~x'`NzZ= #qx]{sE*={^{:##rY;!2o޼?σI[8p7WUU]uU-z"GZDM6m4$q@` 4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"VXf_jj5|GЯw[=w4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"9Ѝ=S9SLyWt@o߾aÆ]yΙUV[=,;vիE|ĉC ʺ$ǎ>}g?utMK.]lٸqۡC ?ߌ1wvY= ,w={z7|⪳oKNN1bՃOwcƌ񽎏={vQQQXXXB毼+W.^477GFF_>##@{ァoN2r,Zsuuu@=ڪ9ȿd@4\4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@)s?Va_}\I4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) Jfj#GZ=nEIIEUVV@777WWWZ=$n0m۶Ç/))z"GvK,9~x=ƏoD|1hРիW{_O:599266ک ;輼O>:88UV!!!֎~@;vlر{x|xDDC8nÇ9vȐ!o?0"2yɓ'[=$4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"V@}|DDn18;@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP*0}o166633󫯾zG}w;v뮛>}?Vp}ǭ[0a<3VO;'%%qƍ3X=#]UU3/?~?0ƍ2eJ^^^UUCܹ5l6 ^[^^n:3o޼CFFFZ=h'|211q .z"G`+Ϸz I4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"ORY4)r;tV5LDи]]EaOUw;*~M%;Enq{w$" Pͪ KYupӡ||im($" śݍ5"U"\Z<7N6*1"PT']t "\9|ק|U'r?(Mv4] ?oEeEK|>kkv9XMD>۴hInvK}'l][D/hqy{c+}}Yxdί|˪+unont49׾'"y닏]%"/mHDJJ6KO\UP(" lir:[Z_|qRDּ|Yfő/l/r: WlaeEo_l?go܏Dd{t6~=ٶ}m{|GK~YDnW}MOT:ۭmߵm}MUW^&"[1f;oH#V9h{} cLmɭX!".xk}SDvmdP/"r:6OxܫE%VCljn>rvt9YvUmU&qUHMA]KCD?%"lm:*UՊɏӜT)"u-'YPTU;kEJO,ԭb\}Ƙ 60ƌ53L2/׿mYf̙Ƙoa<1fɅk1̝;wU~Y1_}KK˞={&MdyGNaÌ1gZr9s1]w***zG1=о}1/ի}-[6o|]wcx;vrq}| ;hP@R"4(E@) JhP@RjsY=Epv'%%o޻xRRRGZZZPPnѣڵkddoU};wp8O_u嗷itzW]r%ڵj۶mrrׯf ޽+"""Ng~\.Wǎ|bcc;u]%"!!!ݺus:ݺu w\.SN:v4Ƅ^qUaaan;--r%''V_z饾S]~gϞo߾n;99966ַ*!!K. ڵٳgHHtmַ۷VEDDttիu6w.+%%%&&w'%%+"".s8{ իJMM>*TѧO]t:tŷE]c (E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@R"4(E@) JhP@(,,LOOz hP@v'M3x|饗RRR}Hqqq~ aÆK.d̙"xq 0 ::zȐ!Y>㴴o Gؼ镕ڷo_iiihhݻ'McDdŊ^zSvoҥK?߿cLAAAZZ1ɓ111.wȑ#z^k?<~̚q8_}Uv*++O8ݳ}GlW_}ucccllllll\\wA;VDz꩹s疖N3p,y:uTWWwyG :{'Op8f͚թSlWLLfVZ%$$xlժErrnԩSYYo#G{ݻw=zןy t"и|'N1cY{?ֽ{nݺ 8;뮻:vxM7׿OWXnX`Av>%Kxxu7޸"1 ,^xڵ-z;q Jkvʺˬ><xJhP@R"4(E@) JhP@R"4(( endstream endobj 44 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 5517 /Filter/FlateDecode /DecodeParms<> >> stream x}pIy A^Z\h J]Q ci^;eLJ^/Ԗ- vaJ#Kb PyH $9pAsrZN y9x~Iit@裒~=7߬2eʡC:4nܸ[o?\paaaC=}/Q__?k֬}^r%/Nd…&Mׯ߷$IN֙h~>uh/z7^s5=P3?7oo^tE .1cF$%%%sݽ{oݥK?I?~|xg/Қ5kf͚5uݻw'I9| ƺw^ZZk׮:t(I^zuG=ztYYihټT*;wnky[<4S[/@vu}޴iӋ/XQQ4>?p={׿^lY3wvw=re˖}ᇏ|Qs]w%Is_t2p+W :ꫯ|wcǎݳgϋ/XXX%N?{>8^T+g׻Ӟ?E/vWi䥅݇ ?mчWt;/]eڗ~-f{/ ~y2:;.W.W^y;bĈAzҥKz٬ KJn._vo~cǎ?яrV3*Z2|Is@dU$馛n$I,Y띚~h @%AwQPNI%y:>@|uvϖL8z]֐NZz?IC:/u/N68vE]i[8GO8vithΎvd쒞 s?Їk8W>tkuh (@EKeܯƼiaOk"Aju-ҥ'|j؍^ػk{]UUUVVV___VV6jԨ$I*++o7_jk- mݏ8vYOWV&ՙK왻5ڣǙJ RD9@7;r;1˗/׾vm3FP~\XmƱ4 [ҕ.uMv+mKW8_Hxc+#bǎ;q^xaNK .lzw\ m(oKv #b_yYf >h:uԩS|͹iƍGĦw۷o9rdQQQmmi{pv5#b3gwT*uwwtnѫoHqь7ܦ~=Ek.xhO~򓳾Dw৫I2: *?z"ؠ Vاh <9ݲ=K/8vq+nyp{Ʊ+.+gED6e4hP{knllNJ (Jh (Vq#n4j@ [aIis_^K td@\&N8a„ 64>S]]}N??ǟzηCczٝI8cƌiӦ啔4\L5kz'A%A 4@P @%A 4@P @%A 4@P @%AewhlW_}b]sn<4vŊ ,hzGݿwв;4nܹӧO?mrժUׯozxe;49s믿~ 70p۶m;{t8[[[sرgϞÆ ӧO󅅅M`nr1@ݡO%K^{t:*tPzO=+..,((h< L=zZjŧ$ɢE.]pΝ9XcLumܸqʕM4*-----mzx7bW%3 7iҤ$I/_ZKtDٝI8}ܯ@ ,Jh (Jh (Jh (*Cc|3 G۷zh4*//VUUbWhC YcߐoɆYnf,v&=F]vӧOÙ3gfD#G)$+/J.-59?%;'IһyuЂZ=+씗̯Zp ZP~=:'Irg'5f$I-/=qڿ)N䧥8| 25^D] wN>78ܧK$IfHUI]7,I~I˨+*8{Հޙ_pU^v8V$I./ 8ܳsa$y3w˓$:44(pRP$ohdKzJo_I?=uO>G1a„իW3Hs={vN뮮]ر;hzfѭ(@G\hCJh (Jhx≶t׿k۷oذag}>Gv9gΜ˗w/o\{Wkkkߎs|̘1/mv-{ùS]]=mڴ^{ꫯ3gΖ-[ 7ps?]jkko6Ω;w_ ȲeV^}5k֤yn^oq|A9R_ჳ5ym?}&M$|s=:ujNϓϟ_TTtGΝ{MRw_oܙ1cƴiJJJ;p|@P@"a 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P @%A 4@P v{ endstream endobj 51 0 obj << /Length 2274 /Filter /FlateDecode >> stream xڕYKsFWrYʄ1+Z$CD@"$es0a%[* {̮ O+q<+bff{ⵉ$I};l}}j\&Mmqs*9OVSiicvٮ3Ghι2S$q %:ˣ7z /Q;m}֖7ȏp"xC{ :aR)V|:gO@_q^:2PR7L1n]=,(߸$vYZ|*FGxKnUO36HVWvm P()ɸ*t5ȗ?3m"J"vEF\^cuaײ.h@( aA C7<#!YS|x@4WY`@ u0qR$0I#x`x K Gd*7%=2r`K-\\Lt,ҢWɭzDCjyR 70P'ans.pPY)M#wY i^O(!dhqq| g \ZJSp0ibcp]f.D4iʕ u o?L~Fo0^.u'uDGEE] S ɫ`rHqzK{ w_vAIOd Tϸr95 <w! (c)%5wh[nxO%ptnx]U x$ oe렖tFVDa*~f䞡v!=Cqfb K fe 'Iff*4OI,"4#@HM I qBB ne pa@@4#APU[&!y y)[|#O]ʀMqܚ# y8s0l21b-' qi!EI! Myh*.B%ܢ~cF ҕf7f`聚hA$['N$zjҲk%¢$KƀTߢu>0ְ.0\4gYV9LWA̹[<*ӁNfc0[8?s@Qۢ6t8dԛ24 :Od,wkkB(OQׅK sݒ!BQRVOe\d+ _S@bx U4I* r6[,k,CcX_/bO[f'(E-cgivw\I- WOi 7,V[.#mJCeRX7)b9g0jxȓ օ}r ;NgZzՄ@|´2Oꁳ?kLǂ7̭cl>)2,|+aFQ7J!) 6q|?(ZuEf}IBRfXeq=ޯkp/$-`vi\d\$\! Bicc[O$~٬Y|XJ'D/U;UH)1F#{=N\1c`& û 8O9 =f5=a^eP'(faJe72!넹Nz<)HY$ˎ%b,Dcf2}7,w SQZ5~Jpt sxRK!noJPFMOֱժ=Wt*s6$|n8r~sd$xQ$GUMAKdtBC'm+Y93ASM!B6jA3+M9),gk e/>~Ct(ej'naHНk%hP=*!= ey7 0'J[D)J a+IB#i;tkLto]V"eY *} jya endstream endobj 45 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /ColorSpace [/Indexed /DeviceRGB 253 53 0 R] /Length 6182 /Filter /FlateDecode >> stream x |e~'MdF^J "Q9_87jD] 4z4wVs^|VC+Ʒ4'z\y$,ty3lv>;ϼg7f#*qy T_a?fmhBڴt5MzǤG_[:#u6U,jIoEl+v\tbsog% ڃ ki/=p]o6j~nV:K5lm&7OEló_R=a8Y_IVOlH++fHKc)ڷhWwV:KߢZJkN1bnԋ d}MTض!:yUԍ,"Vhhޠ l{Wې9]=JNջl&tv؇i+K}ܡKNZd+GMt5-@7Foo%mg=a_6;dd|0NJ6G7⥍i-@E-7nF(T_G3~YPQ_ϩy:g"&y1G:ňj~g\A':y]{VofD+}'UT$mh-s ^6[K^WTIJ9٩ύrM9de7*J[^phߔto*_$@;~%CvI/l~ǯ%9e#K8byBd~i~cu1$'w ߪb$藝 d?ݣߌuQ~o~ݕ߹?>d|fg͔߻PUDxz;>_ ¯8!sתXxu fzoZR3 MWX<9fQHHؤ{e^______U?}d5T80ĎwHJ:Z~:yv(_X{V//zRE~~~~~~~7G}R_5G[*ht U-ijHg?ZJ2G=bF T>~ӧA̩^'5lQ'b6룅9] eS1Q}זNxHݰM1|yh+K9#!C{ǘ%}~[P -G,wcߕ_)GLT[n2RALT[9$}oB1Qo4B&/ /_~4RT|D}d[Qˊ~񹪪fJN*~ _Lҋ_6|eJF>;+<~]s0'ܮbv|YY$9uP߸IeheYW*{A>xvѯpg-+-_EmYdsGVJ` _Oʦ_su]m4R/~hAm5.~y+m/¯Q˯xOWڨg/A~߸=8i)LI¢8hHU:bW~aϊolJkv.g R=6v~8*+"(=LB~KɯyqRe⿃%S{$ igHzMk+.~f^Nq|mVCn~Yd5__)J&^ga4ǯ{dךA /@CE8_dLfo\{.WTFف7-@}8s/ۯ9~ *˗_96d_c[RR+,s4;_ï=05;'ʹl,sHT7։ov^JWXYK߿0~.~+3#bۚ_,sTB4>+<~ݯL~Qݴ_`}\+(:~Q8 NߐPկ(W/:[fu ueկUib_ K,~L~uwKpqtJ~Me2*ᔪ{&UqWx _IPg7%]k? ./ʔ 5~J3.-&fޯ4~G3 UkW^!X,Tvee:yalS_ e-t^W* B9>AvxCE"ݯ*_ߕukG;b#_>%ܼ+ï"~]~ ~sƯt077ڏ~7~}~*IyWE~~UGc ~s/լ7~͓YGC"WA,D_5~~~~~~ך_h)*JeQwU//65^}@~3eE0j #% WW b/~~~~~~~s9-U3Ŀ=!wNA~A"29({,d#`vgb:#7}Ĝ+,mhBڴt5MzǤG_[:#u6U,jIoE|??~Cwv-̿A{pa#s/Ч6ڗT7{D?\7ji+KEn6Ӟ3~aZ/V0$'m}fE3Iwth[i+KEoQd-Yt&nԋ d}Uaͅ=fTgk{˒RLss32ŨLDOsDn\{ m oaJV g>vqZGYD%C{_Ikɽ4KBnCHH7|7qf*I/R}qWoUU%K:t+*Үo|zi~ak~leWA;v7--gEE;95}0 q__8iHns#xtiɯX1.oML1e ' ?zҞjR*DoN;Z5mnYCw@<ɯC+t `gq}hI;`}į8[7/~UWTveo > stream x g,#`a{Ϟ5{℄Έ+Z1ER+T\qFBZuDYݽyEDDDEE%$$$%%edddeeUTTTUU544455utttuu>Pwpp NNN...nnn^^^>>>~~~AAA!!!aaaQQQ111qqq III)))iiiYYY999$>///?? ~.---+++//BUUU555ֶή޾AD"GFF{ף(jlll|||bbbrrFOMMMOO 02]YYY]] \p8/D Px<~gggwwwb@}$$BW/L&onnnoo(=Jht:xg? 3`=38/ʦ;2dX,sp>x<>ȑ endstream endobj 56 0 obj << /Length 2345 /Filter /FlateDecode >> stream xZY6~ϯ0m9@ m=hOMQ(ƒ $(;'IY&HP ZQsp8q_Y GSu#S. i}r~e} O^6t yۯt퉟Oqǃhc$C8c&2{ ϕȸZЈW5q83;YUjod/EN28ƏD,cz2Ǘg&c;l+̙Cw~3+}pƯt f6}{fd52e8sJ GeL)S79 7F"Rp78 G=kM]?RfyƒKhBHba64/}q!'h69fr;MR/%^;}zd{d8:- V|M\*0ͼD|TX?AuR+չZYXxC<3%iԌ棢iLn%`y4=̯>Y?T+,&Ð!d* {DD^'._A(ß]}!s<sV;[Y6 SsѦ.aj #10Zy-YЀ8߬x{*Q[ c^)(Wm_j ¼ِOQ 6v;͠0@,FEVSљ9O(DbXDu~e[zH(*\ [sfcZpD$؞lx Q(k=rnN΂b)ъBE ybҩ,b7 QPv# xdIE| Y:2ݡF8a9KerqYbSZtp=c;·stq+t$8">aFV' ѻF/&́Fh&!.vEq+RjZgRAU=)پ2fAsY*Wq eG!򈮭^Y)Oڴ~W+GXI=I{5ΆP`p=aqaѽ[L#?FonQwA!;%⳻pzz;A ]P?*SLଙ~ 3H z28hLSz/ i̝5Jws )+Pڳ=νC9A?_Ib럦bp &v!0.wNaC]00@l!g%JpDŽ_EaZsXȒRSr v S?M:5#*WKdqtO0wjtyYpOS{u+; l^2+pO$UDt(N4um ֋&ZnGjt].npV]Aݍ2ܖ=iW `VHC/gJŽ"|ײG|LWͭIzRWuO7أEgWgHͯ{L۽/[&LR#w=5y/O}'Ig= 1M<"fͣA endstream endobj 59 0 obj << /Length 2362 /Filter /FlateDecode >> stream xڭXKs8WDUE4Dqgl&9HJx~$%ٝehfϮޤ(&rdOM4JԷa<-Fx_ _gĶG#3 f16ަw^G~+lO0=ʼn™kMr_p]2]N;$orѼWxmllɵAάƓXo|hoHL>mAiAxpց"1o[9PxC~nCq/g3ѱfYH)݈8§WħʮDηr"b$ A-=#RKz>i ob @mwGUOP5Tr;j?<t(4;LK # iK=o^W ׏|Pn{7K'bJX-1 +}!Wʸ!.@;$ Ȝ4N(@vAHYD"~;#ZўYjϴ@$ 'y;kσ8RO эĐ {A,ǐ b !#՜΁zHʹ#-i-%j0Y71@,'  S|y$Ej\j4]IX ſVa"?K`եn[ KI3@vcoW w[W8c 1ǐ]:yDZ>T0nlHxH;=}ElQR 3%AdM/%86 Ұ 80CIç;WEI 5# F+hStyPlŁƄ=u0}P6dx 9% ~./hS?Ԛݭ_\ -fDžjF㕓QAnPZu`PELŗ iH|T YlC4[A~sn3DC]lGC S\%:=ټ&Tf)W Ei ;<`##3{fJ%A.;4cx|s;^h_svhR˒ vMB"0V?^@[f86G L@1qk`&p#~#eS+T{ʆ2*X)Porp Y4$_AYa&0xY}-u7XqKf y*→Vy#~K=.{ |3W|ջ>kiYFxv{~u4ۉ?%FJ \PlҮPiiZk09tMy\e@qŸJ(WvK&\=bExdg#F Sq" v/FFD`sۈ6~ǜԺ( ܻXhaDL?gKct@O3_L7JJHP4VX|`}T#hxesbֆ6 s[W58xyh[ck8[ Z] (j- 0d iS?Ex=BΥ'oK785zZgM2_#0ҿTyʺI#tY$IQfkybKq%?_ 0tTMϏ4}9{.gT2Jcner Ь\ݫ>+#He\F[~&UDfX7_'Mr?$03dTٹ|,@ 2ƕʖ)2t~}Hz]‚}H rbp}ɵtWcW:8hl S:-&>CO]SiKM8u+ʋƦKk2! Z)Ӳyk.+hw%_Bl\;8X<> stream xڥVKo@WX=-R첻ᘴVivcifv1N݇k^.^_$eI&DGlIgƓE9n)fz j:66L+=,F&SWA:u%=~]E̺seryrxQV"70@e{Z'ݮjNiaHN||#d9Vxo/Ԋk()[#J0ENr2RR dhaTxYsA0UoΩϷHU5FS!5?+x> stream x3135R0P0Bc3csCB.c46K$r9yr+p{E=}JJS ]  b<]00 @0?`d=0s@f d'n.WO@.sud endstream endobj 77 0 obj << /Length1 2104 /Length2 14254 /Length3 0 /Length 15522 /Filter /FlateDecode >> stream xڍP\۶ 4Npw`Cиw  .%c}ɾޫ7s*2EFQS1Pdce3!PQZ:#FR::Ye 4r~I9Ƀ.6Vv++7  A| #WKS<@dtB{8Z[8G+//7Q[@h2:{|nnnLFNL Gs 7Kg 2 4E`d @ xX=\L9g{?r0+@v;l<,f6@gI9&gwg_F6Nw#W#K#w+7H* _ v [[_IX:MZہ,L"abϬfgɻ daab@w «zV-~geX߿\gG׿!L-M@sK;?@;ZtXgOze c2Ki:11; `eyO(YؙTަ?@߱@S r]N?GoW!I[6к8/<} ٘_ڙN@SEKgf_;fciT9YuYYX}L/[|ߛ c9:y ;xo)03ف]|f GΓ,`Y⿈, vSz)?T{L?_zz`_WM7c^ctW  m_{ {Ż_;7wr3+3${}K^{h?-\пZN_Yy8i_/N2_@g7п[/wn:x=&.W* h82 j%tcHGFhP7G%:ЖD'gx婝VI#>bx"FU]oukfY<{^)ھѐ\˦բtgr383a`dO#GzifyZԉOG y1:E%,;UR.8;ԛ:>E<ǠRFt?Ll7tGu 5 i-W0UYb%PA& J&)}{IZ=3ꃤR5ZҬ_D@V*"8 (Ԕ3_6g +CF6ߥUo͆E4ρr.Ghl!HF{6-b4P;ݧ:$z_ByVK՛NYT+ m07mC6\[N|nvWQ_OGsd@Fz\4%zEz |DnI_=gݲU-՟ΰ& (؀\CIQH:*}`l-CntH~5tM߇|{6*40"ţXKa6$Jp4,$pGᇦ\m4z+K}*5`*(O6vi*GmNje Gڬ)SO1ڜI,v f&^CqP>sһrOr`M|uA.-]r;ceb .?@&񚹀*er:%cJV&.6-0>U 9`^h"Isk!{Zo Sn: g@!@k 3(,̯c{c݂”/!Q3fsw.}T[#Y&@sӮPa3$̌ (ERN,&l֦, ҽoHyCQ^B!"i5j5V*!]cmY q.O(U\zaG6!2LN Rap͋XẬ$zRmE2m#Y.g1").^RP VS%Yk=;{ h$`Ϙupd@Æer%o?xٕ 9\[`gKWVj<,}^K4^b=CRK«^r{zhaX-LYΡh90^ϛhI>ɉw*tQ Ůoo5[pnl2;m:W(){,JD%ʕ;^#~xtgf5@jONnM)S0ЌˍwɴuyVw7"Ϣ+oN[ȡ/M1wG42#gT4XLt ,lޚػ[w'0\VVkjŻ#(cs{CQb tKzh">.63 ZՁcd 3y ʿ비7P9m KE뒌)߬ kJ nff9]ٸi|CR{TodV =dQ!&t6FAgS1Kyҋ.&"o'7i3̟[aBzSB|?w&ဌpzm0}WpL.tX~SqL|qJ!D:SL6 B"c&}2ـ"9vQ\$hݺ߄FZo1 nnS=SnhP'1Zۋ^z]ꋹo9Tro/>g?Ra,u7mrAUcO K<0Jf}^Nz8>p4 ˻ E?yPl{Z"dN $<-^Ts˺o*YANݥ6̗cpD:>-ixuU3&>kJp"x'˧ L* (AXG/B+%iKyr~Gۋ`KZ*6Dϳ~] zYPv4KEMv# $AL'$;Wcx*^TEh(k1nF#^*k Š@Mn]UŽKG"H;^!@e683~bJ\l =AKnd!kV ȶ`dRqVeR ܧ V $r,Y&Z!7ii)أJ`'ww ʼ1=ͅ_JӑZ&@!WO i H!q̢_ŹZLdCȾyG#|T>H*[·<_$IJp9r(}=9cOˢ@ E)V.3%ZRcyMwR.1kA3j(Rm!Uwbc1\A% .T8U'xD@Ll}K.יeXrl~eI!@YR}mGE}*@P\M ,ܯQA_Ï~nNN(q D0ݐ;\ü%Vhi,δa`lq $ǜ1Bn_ OTP7LmhYu#6\n  %`:^q;$pz;F`mL%H;X?a<܇,`,SQt5R >>J ~jD疠VLԸLP {z+c004p]fZ4+joO/#v`q^Ő}p8^r ׄR+=>DKeIR1,fbolS Nw6&v;tC6(kZRSlx#3%8jpͼ(,}{^۸5}= Ez;jn/DIQć)LJUH$FNu9W/I!NdBNK(YfS|f(Eb|; H6tTl o緦<} 9L*B8̸e1*VgɌfl LzZ~ڸv+=Õ" Y8jG嶇Zu~C\_$n;wY ?N[wnJ/cq)TR;AG!zznmN$`O0;T쑶sG(A 7!$ `Նpu o % yVDY oFN4w =ϓ@Zb*ۂѹdd||Ή$?@]1Ҋꑰڍ%|b}$LqeP2}1$F1j1Ĭ#zєN4Aܓ_)bFuwKqJaaZ:MZ+T4?5%e]TwӔ8 3x {xJyA0\ bM+L|4 ל/Sx/3264bf4 8B I2N3SީRdw)xb1/cg•"`%nzzo̡FAӪPĚ+QZ=g("$UI+V^ޤwJ(Eycw:]Ǘ@ISPQ]a PLY&nb% {7¡(JD#LBARk3j[KR"㈥*{ piڌvCot"<_?Qg aI=`-3IJnd(+Vj.c]^vLQbA8g @c MYmz$}|*G,79)ݫ/2(Q/-?ýT 4h.7.h^el)n!&dib3.E(Z9~%?-э.W^V9_㗆*-3>RvB\pIϨiQ&CrjN^J^OTh;TpuϹ+YRO|;N27k_T/|w&jc|ni>ufh,S~dcA.KCBc9ٽq [ܠ.wͅUyQ"wxj'(pZ/y`3tKF}#/oyL-C}ZfDbGM:@(&9>r}۵(;FLP~} Yʍt)9eXCR 0ӔKeև!AS[&6Q-ܹ<d+UL_XtFǜp &ͯz$Nf}ϻ eиˋ| 'G*+US1hݗi (-4=K %W&Y#'>}бOZ`ں»I8VKSz>O7I>b4/Kf#HדH\i }-+u7aX3zDcih]S( QR<,],Ll*3HգAPHO7:8^Zb[78Xa{nvȘ ] Ĭ'jMReLQANJ~B>2͆ndlj耺ٿU)8KM.d}$`>VJ#e3c%iU]2LzܳVDsjx4XuAX)3u A@Lɾ2@{پô6m~_DK~М9bΓ(qW!֐Օ6 ?"٘1D4F_-8j9UGFw>N^&Z~7<'͑V= C*6GC@_C͠$s`{?,p) ) q{7(})=%ej;H2zL_BjMh# ޴ 䌫SR-@44!OBL*qGҬEs4Ao[/|b9'DUIv 'f;M0;DΟ޶aNMgLnϸ kKi9Q~46؅Ί+yTx'HfFKK38sPs k>P˺꒭=%=ʴVnE)sCM1Fj %LG;yHULeaJ|*Nhv`j`!0푾]|-nXvk6+40>4ZuQ3tfNkϜجPU7q8lԀW|3Q[Y:T 6 ($5&h\`Qs\΂4QNRO}:P3IYAO{ &*27Lc鱬RӸٰ{~u&6xeJc%@9f|$b X[P@47jz+SAKDYɝpJlDK>-Y`+gqc5"8"O +nj.6d1C{9|ZV L#< d2Cv0 f;d_ DHwPMIX6!gZqh͟ Q^[;9`qfFFmN r,nrsQ$%U !*}hB##GYΰ=@吀s QRnRB1>ƚ_ T=0]ˆz~bU-njS\iF_Fְ#<x:;r?-+'(SO۟'D|_GqX?oٿ,>_ %I,P<1 ݬ}K`~9E 2HRIj}_,p2}Z>~=p-mg!*4dAo&[Wqkhy.k;Mv4Qu1cMA" Ͱ떎pw?( Y{|u$ 9LIO\G&%.9e>b=$9ڽh\t;Cs;yj])FôyiMPYyLo;7Q3{6z% ȹ$\Y nJwZ-Gl4b}<'/D/gD-Kp-7Ar]d&0>[VV S D|i?Fl@Vm>pJy+a4N2+9A0)4fE;c(lvxx)a̹#µ2'ߺࠡ|) zmovO6M,5hswVAX+ñ}OAQM*M0:-(j/F mWPKN;Q6pP4:|_ N,h|6 V7EgƱRз[k 9It@,TJk.EX]O$.)P< vU2Wv} /2Vs",2\ |^'0ОD Ʀ/`#?XRtz2 [ `x,+LH/WxW|ݪ+b=R zb$@dte;>G:jQFLY{%WuF.x doV&{v PJE aZ,X:食ck|{Ӻӡ9i?AMӼ3%={Z),a;LыcËr6*|AYe鹴)9yZaoa%MK,Gw7+Ұt̐N'fLh,v M5/Ҟ؊c>JYkpFkΕNmqXxq+ZD1ƷъT-kɩ2 xk,aP]p=]_kl#ݎ{UI .Io4) xFɏTHp^9AӐlvF0 jWV@]^\*$=ykKe[\|. `?m6~ԑm0p7gywI퍯ǷOt\ąg" (yY K8<U)nO?E-u|QO8K()].8xm>X੬\0* 4Ɣ;#&ƮnEVx2'v? HJқ}jQ>91{̶%YGn}BL?P>rOn 6w^dSRaù~0|ĮB'yib^Ŕ8'*c/ ̅иѝ 4{J[U@r)hytrhVn|bL:)c.GYח,pXٯp4ɖt _l1j2By:UʦlK7x< "O:U4{@k 1YQ@gvkU!̮\8-dȓa&XW2P OsLRud4 (PЈDHj9AJݜS-zS~t.XM}&}faP]VBmDe::RԬbJk62Ʃ1cG0` b_NFN^ >Mƺu'R$a~Ip,~6G^@92 &*vTC(^P;-#Z})txKe36s"k}֬?H3pӓ*rWzKrFkt%GኄU}slr=zo]E޽Cq]H"lLξ=ƒ`_u4CVGFֹU 0 dzڌUn4b$Bq8sXcܥaGKZ C#M5^KPhO1նBzݯs@ /qrޔu4n{kNR "2ʿB-b{-D&Y}XkX ٮ5hlq5˒eml]#m\.06P65] ۜҠeR`5oxbwJW}#h׈gxA/#d tee̤[ރ7%$EN;ZVy1, Y؞:\O!opiyr>GO3CC,l;b̖1G-e!(֢b rY HlǒJx!žG>̉eN0t]&plrCzR++7Y2`-NK"Wnd2B:$ܼ"7PȒpTc%5*sJ@|9ٽ8k0aնGsưA}-AC(K7p~xP^[}q(y1qsl'L[^F=>Tb?;_>|JE{vd;&erDDjFR B]la\ߑx&%M "xN14i6/݂5-Z8$&aXaBBEMҧż1 k T( o|2eK<)x%nRy?ԋ( " Xiuj 4aΘ N σIꕥ",\;O?5$"#thi$s gã. Ӎ؄q^y=K7OJ5TR.gȪa4ROOsH : 3| b3#i<_ ѹ d+Xz|MKCQ1feFwf)j-N򔟦.i{)t@QXxrڸ3hv&k>lh&ˌvmKf#ϻ]%3p zE,+s1fT /^cg<{6sO-.9RF"g3B:ڨXd;`U,6b~`7dn,-ɟ1TړqWR\dz&K1b<@Ϫn.2Ա>b7P/%,F:˽ҘGZ`T; uGHu.N9;LER`{ 4Za2RsRbJ.FDCblgUL~-07xbm0}>{&.K};x7&5ah,:NEͥ2)8\c> t/x'Ofv#fM div Fۋ = ]+V-)f]3 5#7Z.NG6S_d^@z5TylC ³(tT5CysægR~Q |IcwC8=*g")qrOdjRU.?Ҳ#ȅD4*sH2t+ϠXo<*;r"@Wknldb.vlPwi zs#?|fسXu;mc9)-P2}k `rMwcO+wFbjYZ0C,k~w?Th_jySIJtW"̨uFxLJy0i?ŞaHD2kK?sqr$:R"7eW8=+_%օK߷M^=EUtP4O\N颡*P\XPYG$(Y^5E<=ܦNA^5#Ƭ_6ID$g@Coww|ҋzvÇ\фЇL@v&yXy \Kv'*X̭ۚ]ZR[c IGpD.!}8(q#PBbG9G&wȂ\bT̬2 ֻ -> pR}ũ4HhiLrjӋ\/t_yoQ$Tt9~4@`22w \D|IQUts4;@d-eT VV hNOvM-Ĵ콴:!6_Bum1 *EU\ܯ:,>d˕6@ }Btk=1\kIIPZ}NلS/yZKcErTh~A/_ږ9i޼ 9dOv}-ШPs1nUV$pY5N}[;)\Eʬv78/SBP~+t-To__5~V?t=H&V>;y gulS5>U=ܥqD!"ф?%Dd}FGJ&; \AD)W,[jL"i7V1QH Z1ኩϱO5# Er{N:.|fuv)GcrUy$a#wPHjy6{fCtD~$ B[p"-/3 u.x+kB{ 6$%PV9Yq9oᤣ Y*:R+h믖$pʴ&˚-ZN .j{w>7'zm`^HvRSO(@ucx(pHi[xAc=uc]0sxRk*#%O~) ťT'}yd;hCS+A/`2Mc"ch&]^ au]sx')ͧǖͫt+ǧqI7?:WV)}GwT83%HrG,Ă-v#IQzquД1Qyҩߋ2Tp)zxo1($ۇӡޖSG+.hc{U?1:j\νiG|!% v\^th%\od2F' ʅZJchP(;$Kp +_c2 (a_5Gq`Bگv=4hb%0jF[T}tJ,=(AŲ1t"/lz{5Qt)< Ojԍ)VPFËD aʞҕ&`KSC$86R g1OPb2PD}E]=# e,YD$S-m 81#R`~b@tk]1'W_#$nq2ymKd2eg+G B nԙ|IYVdN8 Vi67kGY#I.ϽRV6Xwh(-ƴ8(KC)Me*f0'o+DRgqu_ݮI#Ni _6L!7~ϲtmCM2w<~PVl{PX&4XWW'iD7;!'M&-ơj90o* vAb9ݛ 3^'ns\;UòSF[HkJƧϡ|| qBXR9`{{^K(3K㶢f+U -eKuPoڤs딩 [x) ^BcJ'& Mc.q"?X j?ALZ~)QcƃDe;BHh׊\Չ ePAu슺ŃO`͝j+ih(D+4I"qYYssb"&Ch|"zs=,/kwY=ufΏ&?{-$6f <߬졾R)bVpHF2i. endstream endobj 79 0 obj << /Length1 1540 /Length2 7634 /Length3 0 /Length 8645 /Filter /FlateDecode >> stream xڍWuT]K:ninQAA@nKK$䎾wwZ3gg9>7lL:@yH AZ &|Bxll`oC!R(@MjA!u7'0@PLJP\J@ $ "&PtPǦuȕJJ;``kK@arFhmЇZAG \=<<,|P,/ ;mcKg_ ?\P[% @ 4. d?? 'W?%C~[Z[C],!^`hh!<K/t;YZ! ,=!vA`_]Jhe"A~է;;B-bc7~C HO҄  @=E \@>|\.[d+ ?-t07?Fx5`CΎ4lHs>=Y uf8yM}jzuMUyj/DB"qQ߿3X P#w?E? \H 5K-!ekRqsr1,N^rvC A SA}ȩ! =A6:`nku ˇ6kG}G  :!Q1% f酇  ;BaxVL "~!R}@d*?L#Uj Cu܉  ƛZK9T5^z7t>1Pq Pq*!bFub+ P] eߔ)٪FL[u^WpM7-;ozgr\TǛ黪2쵥%߰9>GM-!!$TP!?>~" ^eGJ׀Z\!/*x5voE,}O6y]8F2u gYc?|P'Dc'uNjd&E}P:YBRۊL4g( ڜe*~E0Mjd*. f$s̆mAUO1\Bb\V3}1;Ck]y<eM&k‡Hn|5YӲrI1KF\t6>YlՓT`Q&<#-c1H:j{4To]|3/nB_}Zs5yGR=|1yG z0V T/&]GGР>4>?"ױ)akTWS{-raVBj_7^ԆmK1x~@}}px<+{]+ ' b? зQ),\_).,ѕV Լ &Js"_ZbJ (K7.Y̜)"KK:3s~|iw n2hG[M7iOQhq$f~P`:y$]~Gz+W(KZ¨8av.iFJbjH`Fs@ix<̇J2^E\>;>:Ĩz;FlHXu0@̢9G=+titUjJg%QY*m6\@X 0#|ܓ*L{ B(8Oʼa8]?BܨQ'* !舝}r*NK ^^+vo8f+=ĖM1+&k}mK[X({ X~DY:7=ۥ37hi!7OlQFauRGV'u(sX81ؤ_窖=_$: s#);p1 >ۺݑ%Tb9 xT*~xgVIG/uˍU28sUVcO@~_g:.)LsKm3WWLec2^ Jd tmO;'Ld9,pfTމf}VF.ić->J쵊|3!y7X6:ܭ<ז^s^Z,]fŝc4.8#O}/kRV2v%n\?/g)v}L5{F} w|Y]'CÉ IH|փPEڇI!:䊬CL?q(HѨJFd}*!W*)vGPEAG͈~JEJSUrx),S˚*9"Fd9 zYuP"=ygje *QoXy㏑K71yWESu*{8uHLmŴ/2i*.jRZwt4% R"j;\XGθ48֗q; .cuFO?(G:Hՙ} 1quhf2vtM S_i mY&G)€xt?T{&4 5榵XiڰM{ZpYWi=%9T1<אLnH(4%31tfR{$pY3V,<(]__~K:2\K.+Q֭EϷD:wѭ7Nqt/ 03y_zߺf.NsjzeHSq6˨_'rmwWᚊu%a?YηJ ?b 9%|M.ue5am7W2?^V| o%CNɴ0j.:βg/Vy%ݥI&߾pMxA"6"I$\KWxL|iΛmnK3}cQr%+d+^0 CUnjv?Ǭ&KJ3v{ke,.NOgylG較2? 0w2CO/@z7= >$|Q'k}U8HZUپaFEhh<.Wyߡ>G4j>R? "5xqk(쭿jjYM  T VsWRo$MZ k-[`JHNR`aIʘRl]r9/_8,֮:yٽY ??]]t!Xyp]}9*za Z*k,C'zD\CjV9pjAAj 5H%,9nqc2Pi$|N_N:=(l0svLd: ,mW^+&҉sjZѐ5`&^ؽRUl6" EåRLm8{%Aq.u[T [_!Ń-9~6Cl+xA# '㈜X^Wiw5ٜ'PŒ@ւ;ʩcЮFNeGU +Nˀm'v/ilO3Z?I%OpHJO񫐿R!4̿cxycez.k/ =g!#rR-#EfbJrxsjiXo?X| ֋D^mim9MHx<'9K,H~e#-Jڍa|lX{UNՄ՜@cq) O&$wtWd~ga[SqXvAr>E 5V%?_%g&‚gl?8Ӷ_>rkhEϞcm=z󪧷ehM߮2;)pV*cDICzx/O>jNY~gv>gޤ #+O^Ld+Tԑh!Hjsڹ›:g19~n}6;q%:"?W`q]HE'ޙŇ=sΆTk {xP=.Y,B>ΤLrid2=zZDMz\[e{W>+rq$M3:JAWQDvb}akMX;Z5UmWQC8/%-Ut56Fi)Q=d(Vr"όuR,??݆tuSn3Iz-R7J$']raF@~mS^fFhsߏ.ÃYH>CUysI=DӦҨ%(]&!> CdKۻǏUhX2Eh/ <CZП' nQ՝$ a 35jZw|Jd"6!MG)]FO<]tz3ܶ5juƻ`3y^]gaG^SU4Ə:=SpM$ӬѮM\bOq _uV3ξ̻zZ%\n4nguV:ƪf8s~W|РeDFRucV ߺ{Tf'*X(:0M\0M_HiX,):^zUZoF@[=svʽGf[&I9׬,u5r84L?wB!v_JA'M~S&Ϗ5Hwwt{&fw3S`T3Fn*$#eB/RSx_ ߇S~C/bo/o!<{&ǖv vfd~,"c_gDy3u0KO٨Rq#/2% T O;KȕǴM'bk ԇ6Ǿw՞>\/.e^ZcЁB'*F;sMhi"հ_c>xvT&>$즁] MA_@;#u4JYFKэTL f(g8|=7>AGU FimLi |Rd*:g5 0ܯQւٖkRHN`*,(f6^}OͼNS iN?Q,d=jYC{l}*]вL1UQpmEr4'f,e?tud|U+U\B3ɘWN[͡W·_7t.#'e 0vCGC<[N#8Fx ?<'x[u7ؓBH}Da\5[4tr}79'ix(#va{!/5mC,6S`aQwɇ3胀3"LA]n;g7hi=׍hWrd}ZVih֧O(OFYZɜ U,.T'Fo*>:D}\vlaQľDVq k#0t9VUQ)*(T ~O+)/n6ܝ+^;uYL(\F&V+7z4?Yί{VlLEog2 5t9mH;H`6l٥pydY./? +"zCT][n\íGj'ߴ0:s#mٌΌ⥞)cV}ܕ˓@edJ \Ɉ~/n$Wri)ư8M߷\,Khsgg/2f6:z1|hivBjWf+mG.;m91?na.@3yín/TߦKivr(#qQ/uښt^[e@:*kq΀`[UPk)e} ^S.y RDVrto^m3 endstream endobj 81 0 obj << /Length1 2590 /Length2 22532 /Length3 0 /Length 23998 /Filter /FlateDecode >> stream xڌP\ -h47!\܂{$̝dUUk~NCI bh ttpc`ad)0Y()խ(5.֎M@2q7@`eef23 /@ut"P9:yX[ZG /w=`fE439YݼCAohbb)HCv].@s&+cD[Y-Wsp4q@;k3+m@7FEd𗳉%Pgtr824suxXۙ  )0Oyf.NnvJdE겄=W~.@3P۽?WNL@L@"2K t̬~ѫ{;R*urtX[[A|]M<7w"hi$ZAw1vO2wtm|TutU%_ `d\Q6'?|e,<g jdPs4r):f_,ϫ߆b-NH/5_Һ@tT *ͭVt"vU hlff-uev@eGW_h4K:-3[УoH 3G_' 0qq1F 8,[4z&FG7 T?D99L"D#No`LI_ `XLR+I7b0F&oE7rQ@(A(F調(okF蚿(o/LEx&vmJ7zX+hU8@dfv7&/,~mT?8ATo2ֿ/ߐ#/ ? wAQXy;Y ԣ?k5Z@ruzP9;G *Dz:g,H;I6P,' U)_2k?R gwG7G_1˯lP\ rr[w8~=h97QPv&Vrtgrr1wPs<pqAs2c@^@4Ɂ|.4a࿾^@3G30/aw5" #Zh|]P`Sh3CV]nDRЖ6%H}`5'<=%o ̍|( ߳f-dwY\gwn|;)eC3*;՜rOe 1􃋧(L`h1μPo&1rF_Idb }uXc}+Y];)u 1Ʃ|EReqg}K ~y5 \b@ccͨVv]14β{Ks+ vuQ4[--hBtF)dàN:  nvk dҋZZ ]6 ѡB_H~6 9} `̬ >#<ֿL}m } 5SdzVlƙyVު}O1U0z'np̝QHuoV Dx0hVjsnE3 ܘmܔb;jޟUzFĮsoW pUJ(ݜ7%?V .9QI_&#Np^Wn߼xa7~M0oA_ڔ2іc)3w!ɍiuN oߤ/fiq|HK" J\bո)R6cpJKpHm|!LR͆OI\@krpUqH'Δ /<r(-jʙlqyV0Zt@!pf{p`oĥb*I䑆1֢E_{AEf"&;&VFY@9=q8=#=MtT:"9kI&ɑyIW?;q8?.핿e\ʀJnj~\}}MM%W!P.^J%2?;4ѥ4*2gZS;>cu:N[Io<♗3bJU v%vR [ӯO?v̢ W/drt+<|9Wg.9dlY:rKrx4Rr&bRmDދ(Qro#Y'5?Vq(SP=?T42$uNfX)-M}ѻ;(T'徛Mo-BB.>R*S cFsv]2ǭJt3vFг-i"\Q_1Ą̑p3D&a&Ӈ~QګcRNW/R2}0N?KZMbβkT`%Qg/9,)XͲفHM< H ,Wu1GzH T%PQsf˛6d-WΠZö[l8a%<,0s6obM3T1^e=Hf0ved]U@9M8-74PKjy+ŧ88m-1}emY{mPA^wPExFz#ښ}W*ʯADP@$wtvp@ۙx#a \N6Ueq|ala,Ĵe[}1q t}NA|eC*l8{|syÑ(UJJk3ġG9kdkrwy5c,:L'*cIʦS?ߛ y65  (> pyggĢ F旅z(G+HqP[P%Y;qzT>T+"72aO[=[v~Lkal;#9Xd o=?oM%#"]8xմ"^Y$2ʨ^6jLgp+|$z#>e,8`I>Ά2D^6ƛT jb$o',Kt'd|g>u-ի^̟\Cg1X$FO>,_b4dz }>;y\t"gE$0vhcyq+3&-U|7-W;Wq0d,@ 8A2om<i5GQ^f/ffkGTq~Z@%J҈dr[8zh EY|8[2,ϑn+;ƛG. ZɅG}Ha,B2 éX=1J|w(XN1x.8R1}-&S*ꦕ0Xf*2.R 9E(I[dsg17*P0FUY+N5mHϥ0_XZ;0vNˆ$DˇIЎiTo ̯QlfvpP?Z8d!뼝Z4jP>8`)+G*e7X:Be"d♡mJAα|uܢg<^ߧH Sե|+O."')X]?./tW!iZJo]3L}gHH}quNwqL-]?S0TLeP;}hDDk Ȩ{`Im.%Y7"S5.'Ucz]6I)7g{wxpw\ے:j9iv3I$Y{ߢ$CWNJ%VM"C,؃s`gt0D8/v֥&`XRGҎ8xʜYd[D/] O,JUQ6\{yIT)x 8"콫h<mnJ{TE TEMz}5ʝ¡P\ suRZOXd9|w>8PJMP֌vj.ꐛViy7s.hFWGK]pJOn" Vp -q~׌ȉ[94t.T'4"&}WqJ (hȺ/`Udtͻ%[k#|U5TYjo{Q"/VmY6_63ܖ{Kvc#slDaV]Ǜeb0"[l`Xd=q3p@eIC \Gӽ8b%Z4YgK0N3U't \nJgd2_rϬP1C@t~Hƀ0H @~9ٌn2!oUðmPP֑*#恊ycU:.:NMp m@\]>ڦ+ vR*cLuuިǪ>jr݅ `b4ٶQ0mP=#a.y;'<$|$ RFRw,EnL_b6ײT:D= ;XYXQ=*N4Iq|;lڒqq>)a YAvZh?=qA'ፋY0'U-\$#2cl4}hћ*vSKCQ+5ѦHjP ۀ&t -N}mA/.0"Hlщk{9ܛ.pAn~' AUqD=Wp){,9Jz$ x}H"˓Ȅ)gB$ ffw@ jۿ7 uT6mk'fZ_j;!RAh]c'qGS9cAq] eqj2f-? &b< (Z-e;k_ZXlƻI控wcj?x/7UA<жB[޼ itųHg^v9d~8 @-LL<2M!>RlWVWGd&D9H)MJ?w;e W:5̨B i.Ӹ35D撞d3W1;Z zGn2#Cd% cH֣^.|4Es%>>SJX F6E!3ʵZcŖ%Q5ί1ed3=_-[ MKz`R>xT`G}H 7R$u)/u'b.#Fh`iw:)N@;,ǀ?U=\%R&6gĐ)ܘ2W'n5Ζ Y~9`笔*M;;VěCG5} }ENaD`$p<.I>?9 .6q׫ZUԝT Un??k)q1X$&ݝ'bHP+X$mih& zGQY3|d;"-Jn:Ɍ@ u([FܟqBjުW|\46P2|Cou%pUC@•]N>S)oVP0IȯduDG8JG;ZϥsdRaLBW\-y1 6/ixpYpuJOԊ!{,yPDmv F> j6,gnUyzQETT#aAqyِ {Wgzf h]\By. T#~`l 6}sx f&&Xf>M')@fե7 >9_12VO _W|ո ^N~tUd)lEĮ4xퟍ_!bo7XDP)2ޱ4`*Ԣe|`"R(;"{P$<4VfFAN."MSN;%8ga%0I8Bl;8O[4%։= %}*OR`36Kg#xeȢ6cxpOfCn;Ew!Љ֛)`k+IkO^wlկg}W*]TA$h3gTI8 k:= t>i=p@ qdz2+IN1qѡNV${=qhp_G eVUa#K,$N _S y_`U\ ,{88 3^1g>L<(F[+3"%Z}O@9i>N O0pũc{v#.e[ dI+xߠ(Ʃd+edA"@$+?Rpd ޓ+  \I>K&#M[JD1m\noa5Aĵ \68&Cħ&27wokhNc:1]# =VOU?r[y0z45h!w_ewcOM5*)ZPV9k+^n>.~)I5uE2On.K/- Pb_M3l0b Pӷ-Raxڜ'E|لR~ąN&W(k>s\ RYתgm3':;EBmn4҅^9! 5L?; Ki:s3zJ<!Susl06!j͝UJ)NJgTٱŅ~l`Zl`$pwy_d~ 4y!3TNي\\=x҈^mtk殕.Tnڑ)7}H,A$!FE97\nt!E!NqX5qf>@*yġED-)A껙*xӂG ǔFUWt-mbe9ltC>#QTD0vAv;oUϋQ^~]dM2Ӿ)dmѪ~[Ro :3eR3#_rGpIXJXx%"sDfЫN& w(jߙ[ۂmؐcbxE~[\t< 'WcP[U60lڊlVnѸ\Gsb ^,{"O,3MxP~y)w[ZɤdZZHFreP_i*e)W6EUX7W;/1&#Lg3`?ħ5^_vDw%q@UDǼ~`\gm,Wjv&itgU).585nM2p&- w* nŢ)h\C;)wa5G$##01S?9tl3<>(GXO݄ʯcҤ}Ȯ5 DW)ibK*uqֲU)rWdfdc0$}#s'>4lT>hZ=,XCW.{$rdb5ŮgCG`!=z2s }H ߍXz mօ:K_#5Fc hZf"YK%z6*wKHgwidJWV"C~8z.O5 3;Cx9(qƲ`ܪ!1HLCݕl"dp'׆uP]fgK%:e(OMQy&TY,=f 9!jY@QmJ˒.V>$A3ත\'wYjC&'E7o1饟4[XI;lp+1c: ? nxlf J~T0I/ɨ-#SW\f!ՌrR1Y{ALD~S:d#3elL0}/XnbUVo)WRGgf OOw! &3+9e^ PЉaӂ't޺ؤ4`eԙΖ|hTn#jnVh S0C)e/9< >XMӾ(g($e=a\PEZгVKSCEPLOߌ{$luLQ5D_>T: h"qmuvmb7{[^cXsFFjt *m4_S͹jf k^sT}O| aSq;LNMSC ƂG˺U.N#2|6«1q.)i6H6fNY3~Ga_JZ9.d{|)О<_ q !DqM/}̹>rX_ipɘ\X1; K 胢+&} u~oZ"XmH*<_.Lx.uro=ś;h 0;&ﶽ:a[3d[ﭪP/',m#f/2:ω=cI3m)kY­ fxh,k}S.vn}( u4Q}+*9Ǝnl(}%; vW(M>" pqaOQ#<rT0ta]h\ %B_J;~~}V}~+Tt9ȨH!$^6F5-=Ip'*R]Q7%à[P]S~鹸AJ_S>|Bisoo1ekG|k-P֌|+O`Aࢮ_NxSZr#֙Iߜ*xan _1thl۲M~jv}=&u.=sŧ3tzp Xs dT*T˜*9]YIbzM; ]:.0΂b>I uDqrf5 bq&/_A 5P1oglDEƓ> M+Ap;jɦk+aqV$!,`4Cu*/jZis̩[ j3Nrj>EuwEr؃a₭={(tY xW*ăzҜdeءC %m G+F79clV?'[Rs|2Ňa !rQW [K?Δa(imqmERBLd"; Xj8TYuԼAS=Yĺb&¾.#KZiRXKmU<ν! bJeo`CKw}ʤS_`Eb㢲@ƹbNC䐝% 5KN#H7]%ۜk.ujfӞ`59>d H1K^xNJcX&OɏĺEXpF#ѽ$Y |K9^\P;n,ۿr|:vz/ vp|pcMhRKxjlz潖Kg=f׼\g:LAXY,fVlMV_>FVSގ2|"ayhu pUSGڴAR*,\|%A<^ 2\ڬGb꬙&8+׉b:DNޓ2D,7!.c|Ea=C@ʬ,)DC]#<3{u*,Ad½hmffTi' ?~.v}T3ж҅nqcφ(Usa:T8vWgk"NWrii}KBL |}hyDa_ C!x|]F)Xg 7pD=:=[*&G!o* 1N/f16˾0?QO`[x 0_{{;7r:!⋪oJ*3Sz[D[,匏5 5VU|W܁! ֗cA?:Uz>a8U_,ZY8]w-ϫ[rKkᓸ\nuQ^28S-[ZuIF`JʣLv ߚZe No)~Nb)ehh^.&>(=(*m ZF9V.dt'V1LSDnݷڤœBٽ P[dG%`+ϪkQVw:: |׽׽ Mqq\p>x!0|ݭaw7*Vy w``~4MZ\ēKQ-⢷b=DR؋*O&f%a^fS}1'ywPlW$:pR[OQx >d: }F'2PX&gԗajBm}uiBKsL !uNr[+BR6 nz'*z]lT`(a=[Ś-=NA7 m')2-/>;nQޙMSd^7qBV(Z!䏙V8AϫXeC%& _↷+̴1Gʽs⿑^PZā^Pa ƺ/7y͟x'~mylңwPX/i<w8;{kbXuU$G|l H_k8uŢwEpH:uDN'wb?kJ9яNn/ܬq)x %Yl&ԅAV2DcG(+|X%>v9WG3lgA#y[_?MŦ@`#Ӻ)u_Xpg>C;~\rU:|Z! >NIvI{oe܁G֐LT2~l斿Аc-ʧ=Gެ=9IRB҇3S;]O"$mX/JpRc 58Q52V0znR\j.!s]:˵3* 0g˿}~m>d[;dC=f7CmV%7l+<R8_tBxǽ E ا߂YGVK1K,2>u X}RV8*;gc[#+RxŇ-T>cTO,i2TiA*} "[ u>tE' |2g g0`$Dx+Q=u[_SC؟t$]O=zlY)~1W[8I&if{c2hcD9`]"C,:S!f#d%RtFEA\d_乣t%*F!'o7;Zf2-͢ 7- ՍnOK(<o28 ɸZ 6ϗ-%:j7vgVHlujnXP+ŏa,QFv,1%hܺZPhw`p <יeϹ2b9M?gtݯh$<'bfa_[/8֪ F̓"!X࠮]xǥ 4SL-Q`f)(ȆuU; $͊8@a"LՐ<8!17DX#dPIi+yq%ԁi>7L%W{ic$Kgre|$ `p+\~5Y]޴p`wLg%%␩Ү+ |_` L Yܳ跙z #cVI ܄aßQz;I tGJ(w{3:E!sTQ6FvZvOM-{BrNKI@}e$3~(T~ ρITP~yvMMX2>SӪ'] &eVvI™fXW'1Z)׺NuR+0.2<`5wOoN%/Æ&Gii3TxW|54~>\Y!~'S(#zh`0c>dٴ v}B94ǵݜIGXCv՞au&q&΂E}1:Lz Ň%_ôRE3_i{F{NnjzӠ|_ķMz2SqrD:^.T4r>\~`QdYSr͸Mwirp;̏gwKY`ޚ0sQ pHM=̜~\h 4\#)@u;.@uq?yr^֦qPux3X&!55,L+ lZ=+f<:cQ7"vDwQ=Z"R\>FR%#AB?/ȉ@;$JA60)z)J9 cf\NqޅR6;+<* (I)>B#$ǟwS~aw` XRA=lA iث]rntV$L`< V)'TkpH!s~ tC} m҇aI'ޒ^zC>%o {m7Jo8;M!".p/dnտUXZ[7\fU#RWL! tۍ&4[4 UMKYV Џ|{eQ5)Ps_MIljjx9Pm_evY+'pDiPH}qn戹O8&'<q { n8qlR5n]&uv]1ceZ?p~ݰ3C+"Q쮘lyAI (G_Q[ ܹɳT6FxJf%ԱZ?q3!*3҅P&pZl \ݹyozPA_HͭTw/"OO呼S9kVV\xu .&"1wLɸO3F'qTo%b9]*D)(6ᴓnDhǠzr7{1=]]vдYճonXVRwE}e5FlGO`'ukLf~ɑB")T1@x, IO#Q)bJND.c 𔥎m 3K-* _bWtM꣺X> 5 8mk ?3s1-館*},aҙ201x&Zk|A8TE-9kDq pw ܸLxj^ㄾ-֤9γnCha?(?m8]P ^IH6F9;{KDIVp[nڳqȯ#AȌc1&[(K̒X]G"l^k ?v {VkF5k3װPE[ClYBr㼆I }(H>zs:'ɇ/3E ._FJ#YXW` Nyo4I 'Gji䂝&u<,280 wNf~? ֧&1qLd]679V6HqOv4]Mt42ci~p^79iv)|8jZD}>z96*TWP=ٔQYcσ+0Hc`h8\O.7( g2&_wB`v@6NprNjs9C_HԄש7 ]VP9/ofQ 1)IEhIOt Wc fK,: +]- oz WEG0Uw5Of$haNH_zoz};C5o;6l@KPK2d2E7YlyV(qI OC'Cw ۸)ڨN wiHj̝%X;|IQ.;Zyx  ԟ`#mp?̽Y柣 .Qa arj<Cu)Ob~I hb=5"C_\tO[iջk  /O#WbI"bU(wTZM<&5n9HUeFy 8d+r-Dߦv^5!zdH$cH=ue4uZސcA)2hɼ%2i f@?5HbW N=QHg/Uz?|UsK  $д~t 6ɝ`8h=l ~qYZW6.3?X 4~}{ԅ/^Z +r1)0/p!l#VcI~T=&'~q:2X˒jLPgڛN3i&}pλ53N!ČFaҚ"znv[ґC[K|Ӑ |_+8>堞~2sH0CBpxK)B ~ؐ:/=edR*j)]U']r "if٪Ȱƿ +ll\8F)l9wW^վ1#٪Kw`@,;.Je hïZFv3+R+ n9dO( v2DF(Qu.4#C4:\9v}:L|*ȖĻvVOoI,$ϏySA$7.>hv3%/2)_%dԞq=ih2JV}}g7Π*4 d_RvV )`T@d]zCf ':g#ZI?㘕O^GFٜÏ <x@NW}J&BNj ![i|AӾ{]_:^IҘv\L|띝1%VAk*RaUuLRsQ']]hrU$Y!# 0͓=m_Egf͏BDFM C5m`CuH }:y"~>YkνqaI6\AYyeIû>c|(K|YuH*1wf4;nli74&ܺrTCv:4C}69A0coOv2j]9>nn ")2HE(<їm#^)+M%t;|/Pm _L$KHk幑 a*\KO^%"JNI3] c41=(:B%VLvZ_U$ 2ҜwaʝI$KNaX]1ϝ#6pc DP$6AɆ7.l%'W̺V"a kri3lAk;rʕR\/+odg7N2*a20*,yrƋX< `p6I-٢o{5uTB\pVaMyp 1`#%3tzJFf*N<$g(3# Fi;sM\}9 zi"cV__~xǂx:@+TW#KxB:V% ҹ&\ f1b,O>nkh/t ^{\@-)~WgS3:`Q ԏAAYLi^ǵ-liʘ@ւKk]TGW[~ǸOꭧ$<\zں5,g^T. $4޵(ERLbY))o#;20 u.w Ljm^ Q|v2Q~IK;Blz5 fId ،RW'ۘcLVeq9 [RRQv9Cuz5U*eވq:ުN\Xh;g-{mg~巀LqǂZz~"S4F.S֦USVra=7R@5BE!is@DܺPrLS9|h&,>O3`_i/$x۟ oq)5C=i[9 g:\FuFDL&ɰn<7J?va1n/j*y[nRbsd0Gy٪!(_b穳 .tCf%9`SlX8bY_p&E2q2VkQu)'d 5ެnh('eK\ kM(^ջߙv14@Ah`̡ݾTF endstream endobj 83 0 obj << /Length1 1713 /Length2 10011 /Length3 0 /Length 11107 /Filter /FlateDecode >> stream xڍP-,wh݃Cnw 5{k. ;3_^uUw&W`::!,lI%uv' 255Zb3b2)9vvN;;?)S7k @  SK:8z:[[ZA^/ΜG8@lmn (B@/M @XYYL]X-E+:~ P69 25@Ox1Y./` R!PqtVӁ YNWD?MM`KVaM\^MLL^V\ `2_㹘;[;B\X\~;)K 0wR cdfm`￀5h{#$'ˋ %fcc s+5=A/z;:8,^Z[^~]L@+#dvv0YZbY_.`=v _tyחQbs9 73'fwUS뿺`'TlٗSOn?_A\/;6n6/g'Yo߆޺AhS{k;Ͽ^4 yѿU*֮AL_@li1ZU!VO%T\*fv6^6pyQeq4{8yΦl/Bx",`Ke<_3J6xyJ ~߈ KK߈?/:f xX rX_* X/):h/]/CdC;~)OV@uk/{r< yq\0Ħ>Vȝyw\xzW'{kdu7+tbKdOGmj>S&q'H5||ma۠\^`ݺx4 /(nkWYˆzB[}zl})yWيo Jo: n}n>"N.CNr;:uDc ڻ!UV&$m,V5GV_ >?"<{E祙 r:aD>ٰzԫ ;8?&@$Qm<}[qN] 7$PҽVnz d_Gp?M  J>B && 8ԘG vUA):1& res 4Rr+ly"ߨ?Q5>Q銌>lYh%ۓUjQG۟}'f6ˌĄ\{ z8oGy+Hoc,I*&u(#V^>'(0'r.U@IG?H]UKOUHiOϳMoV* fL|5pj(q=&:`Yj|*^R?eRnw͏r`YޣUpoeTW._NNjܐ6YAl]L`|*6kt5Pr#ҷ- K3VnЏQA'y}t֪f Cm Fz>)ܳX!&%:,lqz6ԉF(]Ib%2 vf?o"}D?hlm3l^-̜hI h12%E> }ZE_ _o&L[e q,7M~ %pӺزTj}m־PM)LiJ>%-Ęp>!3[= 1g4U"5F'!b ^xpG*S)vc)5s/3!]q'0W2i+ZmFda0d91HRgr?0дq;~syYgڊkI!.53;Oא:~ D+E9'cu &ɲ&p/wp @jY`zKa%8:2ʔl15~9M<*0"&lk7_8)Z\uLE He8-I~ vZWFq<&jm^^vlIο&ӼU"ug'Q**c:KP:fS,LL.Wklc< cTzs8HlrjIBkn>B'<2;b'ݰh͑8G9*Z:R+=^_F~h h2bW))=o37⯌yp.iS&9WLl4Q?pc6術:'t1*viTo4,?gaYA Q i#J=k,pa^L~ qt@dHsdds&ōr pC=iަ 8>xˢ4`8,ZԭKOyQ>upk&8'!#ωZX0aM-N2 u8>MF8lW@C,^]",p}rҦ u?FZퟳbXͪi o`{9w?a_VXMȋg4tb|d BT )OS gL=CQ2#2v4X̨jχʍ )\Vܠ5Y~*b&Dڍb L0eC%JS(Q͜Wڻt-M-=uב>x--4|A>`KRl6v^=r *a%u^fk*u{@%+#oVh m}"QJ s4((WW5 cŇ@ )#,iFf@eU)f@)i$huZVvn]DwcTG$oZb:T'8A%M2c+h"3PQ kfGҎNQjis-|U˯al΋id0 ?acWZ*d U3`"k> _ {!Obd=0R"y *lcVb)^m~-FhcfľMHS6.r71;s\]DMfJ0d)Jrݫ w~UݥpMD3t@DVpdDm&N=tY対VG<<6lqPyLx^}E) +=92bYH+]\L~"hOAxP0c~GmG7/5]^}rJ1@2]ʎ)\Z.fФ1̊ߣT.U9b~Ky.=q7t1cݝ|N#- (l-6rP:/o="\M:!!OC(K8j5.y%%8n莱 .Ʀ::,5=Nrx-QQG<փCAUPJPtMFP wi~w3 v DÍMg0E]cc  dxRn?Y E=f5|8bN p \|Ig1D+tY]D}]0 (J6<@g@?惽/1Ul ,}Ӣg.cz9w >#j+W1/-'!uܶ~s>eK;RTڜ׊W!hkփ{]2$YoU*Ky@zB*Gb)ȦdA--' RbL,WzԢ(8,KST&EMkuTx -26-F)DO߹Mƒ 66YgόE Ge)/[#W̊L s1FNg*BULOX㶶vzaO/%#,un J".S؃ JPEw %,BHK`wd)PB,:>3.~-vK{ZUdr8o63+51# !Brbغ,IުKv vlk ƿ]~#CBmGEsko~ne|CX!ahhbqFc!yּ-Aj Eh-@=VKlLp{^ -+\%dibuquyfA._3N}#O>u,E#tܻ^2T(OB*>f^)n;o 1xWde^b)fD u]3`pl=L*>5z!u $?mw΢Sq+Sdd>7t̷Y,x~62zxʻڌ|<{%NM % CGw:~/: al2Ҿ]#SA%Bi)sŖqa<q4m@I*di3 &NU 7 stsTD$% 7:i)/Dei;9y@;Nyz3~lMQQgOg "ܠΡsa6В0N=g>1 Ԡk'J]#FjơBۍd-,ܮ[/zJ50ߩ#yJlf¦LfߵA;5Z_a* Cm<̣ӟ g{+e{j9F&08 /.2 Y52h?Eſ26Y'/P^+v\1`i AAmtDܗt8$؝=V{'\5DMo/EE h;۠:Jf0GVlxORG4T($H=KohA}VD&?miY5Qw|xZS{R[|* {?-$ܦ8j;~i&*LUR6aÓoʴvힰt1+~pdbWKthU'2bb!>:v-PV E(1“7r>4"p\ez&SW^L0$J6:O-i$x(0>@qը6}o끫ų.N!:}h0HtgՒ܂740d"WUFT#Ɛ'qLH Jqx 8>ƕM׷ Cl5ՌVԧ L5bz;hL~>搜%0@<()P NciNa*_is^E+H[G3Ӊ>6sbRoO/dH$+>wb8k$،C>3\#^sP^{W2)‘HSh|+|!Yfؓ`6;{F7Bx")r'EՂK"5N:ymvL$ȫTeCtyǪE5o  S+e$PX|N>1j9̞k?AU =H.h+> `F%ی1;0` 0EP&tQ*=;>WRl5*;.@SV)ކm T LwX<: P.6_?jfv5^! _op"溧.  wF]H#p̫gg 9[mY}]Hv+s_)|tfDzwMilX /llFECg! sه&?l˹6-6#qSKv]qm&WwY;%$/UTEMσW--RgɜX &>|jr X8^TWeT 'Ana.#0Nƽ XWL(6&W2|բ/J<[d+G(n 6>:Q3Vqϸ1A318C_"ᔦњw\/ŸhG0H!39Ώc!_ pa7GJu",~P _^ wP|7ekh8ڡV9Sd)G 8enf B?J2!;WU|K@{Y#CI#A#j k+X{q&b"W̌5JWRJ> m+f3H],ze3ϾWײ5||U3FJvbϪWbT~vmfGOsBMsHkZ48ŗsK@NGCtݶ`xḣ}WiYdR c  iZh+n߻ cxx#_kxG綗suxHvcPtb6<1F5G-L.ż"H%eAZd} W=@K>6P臫G-dpY~ 8B"26;Znr:OxD-C l>j C ۲hHc-|~xxU G/sR ژ#" <(N$#pqA+ Q?tMĝPm?h='MA I [[[l}!U%T Ĥ=L6G帯w3aK˓a"Q:}v@Ʉcg\YiI '^rbwdxv 3SQl5&*;GÂmCH> K\zI:CBhl]޻)nx2xb_ ܴK [?k*p 2"Fԧ6Ai,o@GXH!+*{}uT_Zubd ]%ӴK/LtiV&awoj`xU[;Sj[1XCOj(ViH>aǬҵ+^Em Uؕy=iW;Sq(sLկG~%J$$ 7B&ܹr˝ȋXCNӀMgNUn#{B- 3֊$*4FmpZ~{Gd!w>Ywb qC* h75xMY=+s $$Ales`>sH($MNG߽B|76)*Mf|=DK 'U9!#ăpF(8ެřʜ U5k4K*:4E$a8`vR9Ϻ2szd\20aAL^p_)_NɂL$nŒ>w2X^:_PegAax;k?F endstream endobj 85 0 obj << /Length1 1584 /Length2 8146 /Length3 0 /Length 9182 /Filter /FlateDecode >> stream xڍTl6LJJǒ,, ,K,%ݩt! R]ҥ"- >=k暹g>0hK0(( Q<@ 7.ˌŠvs"ȸ6Y+O ({8x\\@ & 80(A?&3KHHw8@YAjVp{É +' }+="asgfxAm;l0@3,=]f r N(4\?d?6_pqp_ V  l!N`*"Z9< NVߕ[䥴V ՞; wp8jW)Amd``(W}70a>n l!P_MxpA!`%ٿ(&lv`8 7ȞWz]o'/C.0C`-  y}okO3~|77=._fA|_Neey9C?퓖y|yx|@/@WY4 U'T j )aJ)gk7K Z0?\J'_Yo߂=~~?n+g_z{R vV lp_avN.hB ?bcdN(Xع=lpPoaqH9(fkøVnnV>X!q|V[N( xh` suN_H8uFBL׃9|Nȿ / >8] /Pۿùj kh ߲~7 ` 0ڰj)r/1itfvEvO_1We]H؃%t.D}=%Y"Q{rkaT]%&ߝ~#{Ne|W'W^ u}eF"vvUo˦_ř0X̒Т)1Xy̜_LS+'bykzJ.{)=1 %9$Teyߒ܅w9fX 4L;A|Te.cûAhߞ˷c)xw8kQR>qp/:f='3 AGc^>uK#b7-KgYxͮP/`ѓ5iW K43:pVw-c-0y"z7'y3DMin{~X=tG[mvo*O|(ܷS7J*B;0q`v7TodW$\YoF<_<3&)Qq܆&Vj?4ݮ tąR[`Xr ڢcA- )\6w[-K'.25jlI6YBPs FYE:AwҔCT笡hM"v5UmGKr:)g]v ա O6ޒ޳dsê̻6kq"]}j<`6{^jF]2thڏ}&97Far(Gs]c!B[fXn٨2z1L^/ȷy*DݑVr6Ǒ1$9>毴ZS)p?nG&e\WЂmzP`-hZA|YRY5?d옻x" -RM4A qfTd|Rg;4'e@A$%A!t;<5b+`xJ"jHٖ(bq—zu~bg `+ϟӠ/> l9H~+y+ēu"W G%:vI 򸘪a<6w )a7sޗQ$>}fVt4L^ZjҞ#xi18 ~q'W%^F=[AGp~3c,lw B8>| 7xlӑMQK*^?;5T{@\8(iUw]T ey\m/3Z?{`iJT>WD6U8<FWTMyT#(RonI⋩_! r@KaA6PeX6B7n)LabtYw68m M` {۟]?4lk&el9+}W7f|l  &&uo]A{׹byީvv'Q>2zҷ{J۹#ڍjF8.Sv0iNG^WC5PK{YNp6Hɗ"-)7Z\'7(!֭3E#qBtLJs,aU$*W=GHSPa ~8}T^(N1J-*hlP0MzϨKlv^jz3rXQuWhqř#7;o%$+bA<+;=Wvs BL!$# hwn?Bko/^D.z$[#9]^h=9fG#^B|ʉXE/r=iNg,?ӿ%{cIO)Z`1g%R4hz VOkfIʢgz[ "C1KI@192fʹE";1z9l$$'-;03 rÕ`y|c qP?\ hɞJXw&vZǤJڗ^&^ʣ4< Zb`SxTT-X{[] 't8+) sn+850GƖ )qkmɊ@tE`Նz/pqS/I nAF+-ñDLf:egV3 fT :Xv$] a~8n7urvic-{΢>(M𕙼s>.N41L䩕^h𙣋-YN3uEJӉA.1f#ˣ( NOKb>U>W%Hq/ˡ`!kffZ{- o i>_1PjɌ]u{, KGx9%Ëje[KUJ7SMi^8+ʈwQc%M5Fꖟvَ_7eFd#ZQ1 /M8e/5$i` U](l?Wr}jd',_S $Aih2+2a0bǢ@D} 4- -ݱR^Ҹ)eݒtʥɥa"c2+jr_ eRekY4&;yshŰG.qs4ym آ8_! !Kbkgrh-6H}=5|*X^{&gaE6Y=;~8x]2&#~]=Q0elhZƗs6l]![kV}_pL᧘ǚ)C3U+ 2DNE)ZٜjXњTxL w?ݏhV8mvj˾JTj.'yB"EmտTCx8ӗm@WBpem^Jo ĄRR'ӻ=Bae~vNJW+v%mibxuky|>6Qg#k=XjזOR)f2ǽk]D=)ub wmy븵I\1 wy)Vx%]C*t`NShEs-QZD1^) Z5_1)|?#v$MEcy{|Xa{ s~}]_ }3tTوd6,U5g'V_dfp\Qdø>? #Y{oG2SEr8/,Ej,7J<ȭ\2/ 5"`|iz؄=T:,5k0XyA8F.D]1M̲ZE3H!TAzYה}["ekܱwY >8~џ?:R!6e9Hղ_LGL } .!V cC!a~ȴgeT)\Ygu=#by`9l ?*}JQc%'og sjq{3ղ c@ cT~Zp\DPX~oVTAnZm읛N&%^.']\evJ耴Q'>EK,!U4ZOᮂ!]'+>{UIң[ՇihǬ9!PA-w>ݣ?Np]Q[= z3INj3f ]eRse YmE/dIe\T^cGKG4'L~!n~yl֚1o)4(uF*I^N1vaR )FD),gHL$Ir9MR=CQ&p%bP-I78&TJDNYc=@G*y޷v Yd9hmY-䡻xLE'u O?= f<Ε&斞RD:8K*ǎh%y {t:4ũA4QopSNj4ro+j"]0k,97_z+ebS-kԩ78eґ/#0_`d+.CKnSj9{O )Tf;h;P3~U7Ey5ԧUw k >Y: vB:qҵ泇u#BtH.Fhwa\gMfG=as!6 %~|eڂ<=Zj@LN%y cz,gaaA|u/93ܘz ܽq <ΘR6s$xy&ϨkUDs23t*9ƚԿ sSu&t k Tn`Bl̍1řt|ފ UiVWk速0nͲg"> 93s+~tNG\5{⾑3άP2cETS ľ̆Fz#ϦVeVӎeO7~* O~aOwWa#Ur3rI[_=JMya qQ:XLQ,"2S H>ˇ7sW* S/iU%#?Hwn~z&t*O&ոO0"':7Sh/Qp4 sj3'۟q4,xh^Vnо=r+oN\}'{]oe,0XzR# 2/36:MjK;EŒfYAK&&"!=vQ@* ym͠k5+שy&pd綰 , G|ޯlddVVQ3?Q>)U*UgI(*QyYt =Ÿi?vY,Z ÈFoAGg/MɭƔaXw^|ڛw53ݯG_^yg{Eb!7Ji*^vdKVA)2A~3mW!10RjtLq!̮>ʶz6>ුKHߗtdAj'>Wһ%rrRá>C-s,(V_fE)(~l &+v,YE *,YRNB9eK ~ʼ"iɪ@# ^5Klaګ˚0(`R[a| <ڏk}Pdf_T> U65n=emgY<&+B[;gA+:eg{JݑTF/2]mSRxgt%T ?{4'7-'ݍf,| hNv 5xUV #D~$Ƒ-%.XYX,Q`#]QmtnU2.D~ ޺x7fU aQz\}f-)2uT]ă+ltQq19ňݗ= l\jJm~i >@ _E㲛C '4<ő_;^m]NTlmIҴ3a^Hh'zl5錜hZ3X<b7>DpDԶzGbi 4Qh܉%$.wP"Uo۩IDt ³] O!&-c姍BNW1A>s\}VV"*o2=TmRcZ@X[wwy s;fg]bq9\lY˳gv@)j&Bin~ف"ᮾ(+UtoO`$y5 _v>U.}u\i$16<)M6)Ojj2 fNl3z}E͓/_ޢdiN]߯L*| ѷtn(U'w:$w=$H&"dDlxq\7fYq5w-gq4(,R{ki8ِ -d4Sd<xfh\iSqӬ~s4QF%~lwj4.\gR+0E đ;𬆅+]IF*j B+UӘa'6b3*#l Tu>\h3|'t*Mdf b$j%fVzyfȳt\g ŕTSp=9v_(ZTܮ@զ/~&Ʋcm#I\d C>AMv*hnhh'.g MV}u6Q!~LQ{pQqNtv1ac+M_?sٲ1uQL)!ΨDj\>:C7ޔJ _]h]s21b :QsI'j.m8m&n/:L1݈̽Ⲃ&8I D[ % endstream endobj 87 0 obj << /Length1 2435 /Length2 15302 /Length3 0 /Length 16722 /Filter /FlateDecode >> stream xڍeTJwK 94 %Hw JHww7HH\>{?Zw(IE@&@I #+ @LAM^]†@Inb A:9[%#4vy*Vv++7 '>@ :#P<,,]<+Ɣ:@dejlP0vڽy45L.c潥3;3Bnb P:܀fi$DŽ@ Pr2wq7vV@{7%W{3?@MF[Xo`ebKd`lieo0$\<\fmAonV&oo Q M\lg[%@vv@{g[9M*OmAT\5]2z#!Y],,,5FV{5Ss6o^%MAfw `d6Tloַ4z5f&{˛ -C_9 wk8"I#n`x n`2Л? ,STlAf?ͦ?͊?-'cS-_dY&]GQx?ͷ)ppw\Xx;i$ƷeevxПpOTortL_ed} otW9ĝߎ7x.N5- wпުg<;] _f_1yoslL]*׻vz@)Ȕ?ĺ!Nq{?WWL_qm 8 nyRrĕG,k  $>rv3b ŀ?aj|ȇtG3qҏw(UZ˟^wQ ^`1LIOf{8uPxjY]ĖwFsȜ3aR. &:|=c-{{JJ-C&S8q`wF\$KΝu|T2pp CJ7w<.>.?5-Ms1jjԈ|*O1=vX E؂VԸštH{ Wۄ]IMx:OC.(e5+O NJ}FrzE>4#rs~z<]ԋE|Sn}U{5a ^'MnA"x/h" x3ďӲϤ(hXV[ǧH}`"4]P5iUB{SPfT zfϑhin(^}T Zzj)+qФ tr(ʗ5˃xWh a6FR7 ~rpxQ~\ ˙CaD"br__zJ8ˈ$ HJ䓞^~㇖xV J1C#127aLo?WҩeHY@F|{TͰ*bUһ)d8z`]hf 1Ay^L22P&z ;?4sKu9t=m˿V&s0UQN&E%Jt}S +jBzO4g8fm,1 Eo&I٩lJ{G-9uȴ\VSv-wy K`өX$ʹ](ؗzIԨ>=Q'bN>,Y=$ 1m׹M_Emf[9zƨ]vuξGh&\&7y2Qh?lEk |T<ꓞ)Ԯȫ>@Aܴr9 JU)[38C :}Cx_uB/VlY-o`U$KRӥvפWvn: ]XOvN Y򺴸@ ^ @^J+Zfi_:wH豬?ѧ29 G.Ili !.L2_lȎ:$_bc!GG\\52 0LMk0>F-FfWz7᥈q'=oi$;6d!T^dݴZ#=nDr 5fTmϮ07!׭w \zWܶȾZX ߬[njm󫍳?%NW`\{Sy\0@Knu`K/ zk r05rRY>2a!COyˑx>Bo1.c>Qڐcrr`C5Z򃡾#IevU貰RKN;&lA9}m9$Qza̸wE[S *ڦ .iB lZ ,e'Wf?u`N:`) R-xZ&LkR$A:Ӈ\w=̩銔Ndm @0b 4b̅= i!8Tn>[d0|:PX9~I&-Wzidrvfa'{. Lۏ6 00B[:8S:QzCҕڌB!Jich̔mO.C+^g ht9M̺/7Z_v=16C&L>}[ȸsLJ*La3F9ea͉Z[ۘEq<'t)ZB" $(0vlm!ǰƑǯc W5nk4Yy<' &{A'!ffgMPzr7+GcgdwxM5! #$,<fyt"&$} ( H@Tùvπrݩ? ̧^ّY>_6@8́I|t" ]/j5VM#9iuŭP:3$(GfPln?4DXU彶v+t(pqQYT菱MKAZd}(ݯ]hJµr5fOtoè*ѡ]:M ܋XZJ9Bq5:m臸ؖH࿊_m𡅢dWվSLQ*_&W=^/{٢]}=S\kZQ&$zn "v3unQ1@Ԉ8_5Pr|&9l~gEX W.t9_eٺл@1G+NK֢kVPǽAm+&7{zw,WY n";;z;2pRd km-%C M%>V{-kR0K 7\uþ^G- w\iuX&cÀd`>KD)2){|&ۗbb,t=rSL@Mj.ޒ3X-6"{ OH):Ò~m*' yes ϐ+T^E`{htڗXG"D cXvtsd}̢ANc/:9F A8 ]غfT'V7trQPvrcUaU`Kjx5ZKK8;(0>$5*A*Ì1}f.rTgCԇBoYݧ$QP8;}.!~ΜD.!ͪeQ'>usen5XVK jPIyarݽŰZ3?; x|<aۓ;rשּׁUT?o2pX׵G2 3BX25De)o}UW旚`+gnY `J$22#{$tcapBx=l2?&nXNwB0֙KU6sfG@Ya“>;M7~MjchRDFv_ARQRmZ9DHdlJyHkV'㹥:겵7'A+oQGLQ5s$q./(hn-:0ϹtiT@jj8i߾nrBbwA@ (wٖW+m}3 CjH=!`_l޺W X筄ʬrt!۶s$sȱZ(œGjMc@A !1J$[%zx{)z0VVm"#;"IdSl/k}GNշpJ@7Ȅȱ0Msm/UV=E}&+ݰ[w6ȓ˚ F._OjHK3HtcLG =D ?<>#Yu? s50np ;^/qH5vv}edvFY7sč J蚙0vN݆d : ؍CzV;h?"Wv/w A8#jňեhj%=2D 0́=}){K<+qܔHAG} ܒ7r}uY7&C~^øn$lw3 9'J86P;a%;ֆdQL͒! $$EڽT("|W 4A_@ʿUـjnڎ H`f,OYN|۱X]/AY=<[၎>A]@F9Ιʾ4~Y rԆ|©`ݳ?!};2k;ZDgrZn"MZsns&F`ʒGy8 0ԗD}Q]X,92wzTjj#J+G$IRp⮄tw}Cy=ERL'CNv 0T..ґzM`AKS##9y3ՃUA5Ӊ~ZPex$n4͉[io"aH{I/*Ob$9={J"I7D\%׉GMx_bwUKW{|ߌ5$Wjj4 "vds{&/MSw#&~bRbp:2%&mbjTA[ݩ,3h)b1~hfARk= ͯ跲fvkߗtf=2LLRe#3 3hqEӐgvDJ -rGRnDYV FFVG'j$j&l"_.[SJ] i %ώfA.-tc96K&>,)&$Xmoa[pH7?vUk+y9Gu|$t3#1wHRk2pdN5Ee(e{\*;06P{!}t8~u Rq1QmAa>*\Ǣd{$1^{tIl hv\ЧBX'E5KWSމ_6T^9E#w+BZQ%"t+*8*W!ߣ(u3?\&}P%^P qfjfI 붿WH\NxWbHU6%Tjglrh_ɢ۸ςVA҆kv!)>q&wIs0&6eV);,6C3B+MEh+:m/’j-esg&Nq˓' \_uQ8.!x#KQ@etpNM- hXo%aPm?.s;b0Tݭ W,%`KceU\J`T>f/9,/\oD'Q9imcSio{|V>!"cU}}{і qć} Z+ʟ$pneZH0tdUijr5}@,콶2@q A':ze #nP0!j|؇Q"E&Y1 JK|lTni vL;xPFupJ+JC?qW3վ+# ߡ FHݕXFi%V,*tS)ިf q9˄gxNm5r޽Gb Lh qfmkʲnwZHCAgDCϖ=7KU<$j|"`m$B d̻l tϖ*,2@^V+S ۚѡAܞHq}1"K;+I7BRZv T[6n(^/GqL+5eL&|Y)򒯧91VüԁOK$R]i}'զSC }dlu>}rW;sqikġk:dv v; b^q\N!ٳ5e{K+(Fvud( ҭpD; {=ǿLC\˞]w}9уI V\v:=Uڤtu1yx7Nfb孪|qFtR3kƧgE*8v_וRK`ʁ'4:Y1qL㦳]^3+gD w<8̑bVEb,هfsTΎ}پ6x`.C~ !u=ֆ<+I \e#`eĶDŧta &g'U6+ I85u"\i41(gz!\D' RT"\x#xĠ#G][g}uZqc\{w X=;&͔'SB2~.vE*ӷvm36afE:{3eOIJʋQPAԌ5~ {`<;b[n g3Op[=QPΣ? j[n|BF3܍O5QZ3vI̾W5Ĩh1ES}J @Ze^ xg\M\`m4R.&}"/6}bǚʠl t8Ggq{L-V|GlNR)7o]ȕ$O(ۖsK͹< 36CxO% Ǡ=JQL  +!=X|n :sL&޻|VÃFA`߀nFBwyЙ0Ksx/8B9`JtE6J'f=]g=jLgv~rC?yD x4nPÝ2+2I >kTlYJUόmh,s؝}$Bz3rHs+ZJdRKwJF mSrƴ؇4^A#/۹* nYN2m=mAR+͡;ٴoFBE|EaWj]Rvt+d/4Ï7nqSI  K;A6,Ck\^U@rV!V/ޭ|X:vKdr; OfcOam6J =d̩m2WT>t:T_(i4Iӕ ֗X/%N`<am+X1\b2e|@ ݽc*$6 6`#\0ZVBuX94*'!Cu֨:AE`bݲFT_\>_ޱl$\ׇLWsٖpE3J _F92 ;|LKXhV]26C3>0vDT{;GWVUf̾qNO 6[UF&^S5:fx;PQ j+zz$8~TY&-,8!Y44|L2E>[4`A4p`jr)gvg_;kGQ{(D2#}-v9Iͤ%5>s{XX}n:S]ޖt> !aqS+JbsYUD:k.3n{Y:n8˷ag/]I; ziwЕs6N*=%&pZ [G> u+=tV֭tu*tFNb퀚apj~"; i> SKB3~qϹ(gr Ǡh pRlbfH͕<ɉ/ɃĦ3kR^ )q\f7ݒU߁tViER6\(敆xmVX7+c0Xk8X*C <}X'?Ib9|VPךgQD"/"PKDNy@)LYbFe1#mS4Tmj\twHWuB6+ hϦ$*9iikR?.Ej01)Vt#5/X=f?}Uk|*lyy 4yf_$\Hyqh@Ĉ1Uϥ~IyrqQu B}K$@-Р/R*4~.nyGd_zK6\ԵSVR"Mqި 0_i:jp^P8q^/Er_f5ҕZ-x4(aע \sT^c%1,Vx!>b20/wY g4H,FKR1JG”蟒NƁ; |o>aFa/֊oRWpgQiZ⇭h|.æ3kTԫ^Iy/QJMF1o3x#~#Oz\SB]P8AJ aGE17( faϽ[PUqͭPsUkaFP*1]@[N"!T?#-o"JsqU0nr`@eHi1 / =#{ŨAzuWfOP`)%! 2u{U>==#P7mTuJTEN`Xn󄤞C"Gir?|.Sc'Z'~ )չk᫼/hc"rcByrhf'MY;ڬCfRDckVr2=v9N=oz*"AUtᢞrnQͥN)'v1#vHy:{qvѧNCLn`HZm5FFub)M^k?F7e۰eMDf=Ϟؕ3f1843~ټ8a VO J $~06%QPpjgWת$E39G:=e'A$񾓙0^W68W7걠\}j͇>[m3 [U 2.8>&;K-пis}(ʳ4V_$ 1WOC; JmYdd(ԚA<{w#˅'0dP' FKlF3ɉqv'v3U ]dմ}J]iXJfMa9.WRz8 "Vnݛ]_.xTӰ%>B`_v)Zdž&|KG]L?SUfj ntt (@7;Twkp1f~ c.cvTșNF%)b9.Gsjd`k3M2/$6?jSCкK.X*LLItq%Ofr{K˜$Eu]rT'K?ɽDK9yaP eo` }@DBoD^@U{[!l'*n5bM&_ pI\!=AH5̍@ x~O6S0EcmS ;;/[I~5s ^ͩSRV>ىzx AX =k䊑!Р͢4ʋ:tI(Ia*_Zr `Fu.u ZD>h*R dUԭz?T8[IeKH6_( ߤSzM}Oe8y\$ā N/gRra7:C"6dd><evCp#.KI?`Hz^~}=Z (l4s2l tVsX"zz(ͽze+sY s|-Ԉ%kd Nǹ|㓾q !>CĽ;KTI@uZNp9 :6;]qJpSLȵk6߬ EƼfm3ҏe m0Uڟ 5EQ@EZ{!WIrƣX =;"c|nEܢJIva ed Y>VDT}RkzɖM~ˑ荵rK< uӮ#* 3[xE2i y 4"hu'xc*-UKg ~8M@K%l>=K$/I|?!D -zJOR,8 {M@4uױ,B42&5>0gUF~\ОT>Fc^R;/= M]\VNt% iߚš˫BG[SzT^(H/6L<飡[Ph@‡($ǶpC*U/%e /XR1 gUeo$߇}YHRg@!s/^Mk}:QNsZ˕TcJQ{>.EҖ2+s5膈87W3D;],|>^HVf7a l$ݠ\58LL.Jx 65 t#jw>rUZ(smژǨC+CS.#(Ӹvqӿm4O 6BᵺE>M+6mAQ,칄:^9 ]kq! ,_Oǽ1&7|WLqk#IOIxe;@7E# dN7G%1* ]\p׸FWR,DHYu=+#.ͶE^3%A:_3|l^)] ~Q X67QI?f L{Ύn唻2`vkTNxMr|4s\Y1`=\d_lr1:dwUmS;D ot:<)cщiKwiݶxQNՔ+n8EsҲQ.w3uUZTןSpW[xLFCΨWQ +OTD`IE2fM<ϛ#B_8}k{`L ^lz:v@z I:ݺHNݮ2="ĵlMF @\M<R;`R$_>_P.a$t,G5VPa&nUM{}CLcYr씋C\,؇<)\}/tRֽ9ՙԩ^Uդfǣշ\RZl՞+BSXnP.2C6(N)<|GBO߮.GrYQ%܇+fIkݕ[q)#9iy.O\ >~-j)u/2 NIuy{~Huҟc妢Ĉ%haB'(2W??µ6> stream xڍxTT6"̀t "90 % H()] JZ߷f=繮=6;1#Re]cK! M(o;> EGm*(4PhyB"!1)!q)  J DxHT콠]F+#}=N(to\ n8p tQ`7tE= `A(qFܥݐ'9n>7 0#^`Gzn? Lȿ @`PDxtu@ gsBBJ'W"(w=psBN|P|{/= @{Cahj{C<( 54mV;*#pW*P0ツ@᎐_c8z ¡<*0hmN`@()&&*?}@΂ ;3#@(G{(Op:8BA( wv k> ;k4p῏XPLr*)!|’~I1 @HHH .. g{>#VA$jO\ g.=`׿( /BgWݑ' ۻAahz*Eo9/nD٣ՠwB3__v(R v4@//p AGC ~ 5Ϻp؄EFDBhU:}~ (G!nP'Ahߚ} 9H:exe"71յ$hQ3glGJv54#O *"y/} Y(@ao(};}frD9M? =J6d$¶L5z @r(='aɠG+wa>da[C [>$I 44|MPꈣa5܁"'Eڽb5~Z,#)ɹZ-H %s$VH,;3EEyT++Ŧb4t-ԝA_X`.5>1_Iӱhb鱸yZe ?n}1u`;dIMn=Gjƣ*מGtr''cR~ 0ɚh&B\hB:owR*B1xR3Vt`[*$w {ݶIr8Ƴ.zlWǩmKV9[)PadK^a${׭ ņ 磌2_Ovroh4]c; K Eە? PƘZ tyBϾY]H qn;r^HI@F̹!)Q!MmBU~)Tx. i߄k/QY=i%mRw?>e@^ 5* Ue [_EDw-kG*m8іWN#[I,gG, Tun7lִU 4}i)v9;ðһN%|qQ)=5 ,Kf+?ۇ) OS{ҘreGlUu=d֜M=etpH9};PhF/j$ӕ*RԼ4l^&/us]|Ob 765lkW!",k; $NX}_`ja/TL%Y1Lz><7lZ+ְ'3.E4O-l P'NU(K9I1 iFs7Vg>OE W'(J1{N~z 񏚴!Uq~&Y䟕>;xz`1) T>]Y|1B$ZFv}W}YU s0'+ԟ]1e=²Zbٿj_؞yxj3ĚTقl#nÝb/؞spqa*ӘP:q;8_Q$KLIt eWX?1uQAn-3=50P0!Jtd?Zh8_IWq̎Vsh_+ Tm9>m_m}-?Gyp*f:%ԏ-1mL2`_yD!vFAv+/iUF4 Յ@(wR(ܺC<+{hC7v}ƘXH66︇:T-l8rV~ok&x+!H`Mm$5]_xib:6GG]|̯yAcJ rn+4pn9r''+PCĎ-(ɹ,".\̛,_-l+6d6,p-N/1o_ač3o+~j /#HM\b&;}T\ԗJxr+Ew`o^朑juΎ\4Pn;bU $('<-ȷn*TNzUǵf6e5V& 7[(=Yy$BPMӛ^yD'yoZAx@[-րͱtZOעޮ.*nD5n 0LB|E1m5GeNôɧG ۳oI~$Zy%H=?3vd܀ĬBK9Ka>K^_z5s`*:GDB. ሳNNIU0%Q\xH轧Q_ ʕrl?9LFCmG z.=s/*^1c=w)j#b0_*aQRP񜯳)GMOHvFE(ܵXLVo03m7A3望ɡVQ~=#tHٺ!NccIբv$Y'<۵Ģ"%jN3 󔲶7s˫:8!f^}2u 7)8iPݝS9 <ˬ?HT=;Bg}x@`aѴr]jcYiPY7[<#8[8}1F\ OA znO?<`y20"2:m}'Εz6e'}nIyg@&J/&UQ:Z8ٸOˌEx]h<NV,G9M`25Hx暣e(@fuEAJ4QMpLc_N}LN;mfaMRƣۙrDc]"rZ~*z:,X%xt \"c/1Oc46zU. :(P>Y]"`4[rCY߫>AZ jI^)cg(~; 3}j9+aRV3G]jSض?fIS{pi'sIvㄸlXAG'r䡺ydlr ~s=ēv]ڨc_')c0dr W} [JUճOTWPSKN ٮ^R} ϕuTqXTe2bj0eK+;>_˼=I['DrSFJG @29/֕fscpȵe&-⮟j)iێNhvByFd2} /^ME铧j_M/ X_iGFVuL[vU\xPGzlFi'W\7d\Iq0_f)>+NiH5xf ڴJcп;lr*Z 3:y\ߩm+jB{p յ 5ZbkF+PLClݑHew*4q.q(R`u=aWH)SK\$/dkm,H{?WwfED~>1B94sRImuJ)wb, 4 XLw[TX֛/Rd,bܽIm|󕭍qPzlC؉W/q6__zxvP0ĠVh!Bc{Ik;_:gnfizo9r|Uq|V+5V1S:{mÙp -LՔ^ABzmeZL@`H(qHEo5iIKukFSdh߭O}&qʢN8}$lQO8cP\KXXi˅U 2Qrc=no9jNLF$đ΋%f$efo;NKjA9żO6,^*th3Ҿp9)x[CJͲFzv }a!V35],|ˋIpý[V9~)l`eYѧFv\ I}序7宒k|>l3]JWCzq, ^cIl?P(߱{ss!Fg̠ NJexގ6/hg[箄I{}n1Gy+9M&w߼a8Igj>Tfd7ݣUEGHz&w8e|񹏝1{[hreu%+p'~*8EoYk-h×tgu0s@--Jcvrmz[T|`3iRY]j97hc4TܐPTVnCga7_}oҪ,9W/,L'Yd5_=SkŦ _fZ#x^7$~5˚0M}dv[0U;zQyAշ̧Cc[޳?|-ӎwg\(\#mbf+i'0C/t7G1mvRa4ud'y3"\V{\,Tnƾ CFo}f0¸"k d#*j{oVUK5M,KR|3);"мYO0> stream xڍP-;Aܖ! ,, @$@pA;O߽_^m3jU5ފ[@@P-+ @BISΉAG فeǠ990$@@سM{&*A!y;WO./"I t[XPN=hc3 nr!% d\hЀA0J(l 9YNVL,70r9, Pڃni vˡ@gq~qXr/_߇`wH 47;!`lH+a, "tfτ?Hݟ G?<Bjo1؟$ d|l_-C,,hŁM vtIy6afx9 Gܚ?{r:,-A?^@Wld6,v?ˏ+gY@!vylJ:Z*oPw[.[Nv'7yyTX9% v_[v[s)C 0G<_r3Od w$bg/yxV y ϳ_UY]+>O8Yo9Yٹ U0/ec* ?!3}~E ?M߈o$ 8%|c `7yF/6?s-@~?smgͳ#Ak;>rr>gvי89=?@ ځ@ sPMepu8#=h:R$[j7g\"ۧ6#oV8 lu mS" 竛-YEn]87M VG}n&XO~Oח^X2b!DEsa!ju>}7rO!s=ɳֳP^M!vP8OK`:"xh{W샟RҏuB(*,c#0}FYB}OP5{,!VYUzAPuzM{R# WyX=m4N\E.9#>.*(Kֿ% \V)@d5?+^'k–Ī+Țz@ kQ (b\uX-WB]2ܤ(IiGvu]I|tSEz[>j vt{'x|QRX:ˈZ‰N~=n}$TLJ_jMHC9:BRJjTWdcq"SXff=q2qOĎu|m(^5*-W z&cH* ՗- *Ly%OuM.ޢ45,@ \Ojnl'yLR/jyyy4qh8.CόZ\ V~\ޛ-bwhdc55wkd-!3¶!uGh:uVQ>GKݯOSVvڂ'9nmhY?ľI/:qmᴁ׮0,Ijn#Ps1\d01Uz<7;_;sݞϯ.՟r R֋wMjo>শv 9q/*UF9e94(XMd_۩Xpwӻ_cfU+uz^}c]77i$K 7j{SqTʹܝRR.z3n5A^n-)_׶.*P0XłHeJGآp]xtЗbePslCd@ E+vCDog>~3K:>i֋3AZNp8,fQ1 -fQ8 JvNRz (91(EOpk!Js$zOIZ%H"Ej)(@» ZH~MxŞ͓j,w-yCmFweD]9msgj2aEfwÈm}k ΰ`_&H`վӳ-l5CXY @梎H<8X~7R=nzu8n͠L`׍zSpQ/zsfvW*ˁ&k֞T᮹Fs@-< _7,oV+ Sn2f$º18c#WmSܡdSaFZ\Y @+qf7~ 6>M&K@~CЛ<0}5xQg)SagQg?x L&_bg9 >=sLE!`K < J!δ_om@.?8T{5ĆwvΦ^diD1]hU[D=JZC@ġ[d]#P3o-̌O 5W%Z`t0SdW8PP-Lot^f'+ r>CkO"V)^$&r0UӃ^1U\Z=~KJ]iU`)XMS֟]]##d=0}f|9WFAכY[^e`Tw(X^w/N"8Vn̞9?nñz_uzz9HzeY;2Pmq]$ ӷ@/ٕ/e ޶Xӊ|호Je򓉑efD]x,#Zq<ß51OO~/yZaӃjC)2#^97D=F\%ĭi{py<D89/ʋó4T]"2bmE\~~G4l1:($C%H(sݢq :Ƽ7G'|!sqT00@q#ӍL/v\7-$=39O kw9j>EO.eԌfy"VxU8Eȳy2pt4}dg.{|ܸ56%J»\1Ncc<<o1FD%W^G*YI1w*}[#˙?5CN&OfϠ$Nc<08VߒATx$d[_fuM[t"6yj?bvBQCCZSx5,?<Ȼn8~ʪ"DtF Ţ iVAz>rZOC-hd w&DKBJFx1 HMsjvmJTG4VM,> >~Rũc܆:A0_y~\y2Oأ}f]X@٦~b5ae;lG7c9exc60UDLz}:uC1wȷwr='\X.NlLl8~=7#91]rW~Jݛ̑=uv8%MTٽ.cd2d2WE"QlarE-뀤{kgBSPwoT˷C)¢wٞl#ŞQ'fK m<Sqߕ)#n8]ikNվ,g;_9 s>`rjM:N.-X{?H ~YY>=Bg!5/șɃ Y8d%LOz#AvT[{F .wX+q &n]SPz"K 9O {-75K:F-$ˑteo -~ٴ1q/Ap~ *e x*fE)FO*N[RϝFf9ªD1%[aPz޸O+jLpº *Hc$/!(㡂1|DM#^2b GU6 ; 'E+ǩpC~_\V=nE9%OMJ" S6"UN:oCwP?wqq+i+M5UMS \1%Ї E$fȼ UǙw# {.ɦdO/F$*H62D_NJw-(KHAS8Ǐ&W~@-MHPW&Kq͘ʼ\4j"p bзa6W&g=?Zz>ݓvޒ\J$lv&u|p W|Yت1!ftFv6>zL42D^޵e>_&&>`Xͫu?$8MRF_ƈVupPq@)h^W:3Wb;4XPv3Д#NJY͡aOѩ0U'⥘xcхTI!*DҤ e '},,б$I+Z\\ƾY$xv$?f5Qtѧ`@ɼLK'A F&'[fqUG>/Pu"jɾcr1R3ݵEs5\q51Y#ץ#io (kKZˍC!=[DgXQ1eAm+0s);v vzS3zWF߾a.WGɍ;Ok`-\Ntʩ NȽP۬')fП1ve3 bb#J1 55II@{ZMW3үqyR],P"YTŸDom#"0 Qfλ;In5 _.9O;$XJ<gOAR,p˳_sa`Hj^6Nx8[Nwe/i\ c+W/XNmDS(-= Eٓ+h2 ϑvpZ0-bLo![9£_߭)9y4f&ٙ5ވfȓT5h9<<VA$xa6iIpnF>D&Lu#Tqp%q4[٢ TB]ƎI},!.|:ݔK 'mP7`滫TJ2 ٹ&ubQ(T#SZ$BwA&'*.N3ﶶaVЇar%Q8戀3{2|QE0/F3JK88}: -;t#bxN~sOsdrl7tF/Vw - 6)65͛{H`C/!ݫh`bYMެ  7GE'Vz.]o>% o2ᙵ wGV[ %KsUnR/@'9UD}_WQ u5!w@KZQyYHl㧨'8 xj;mD|4tKbVpf2_][R[JvN|*}1pxomڶV(3weѪf(Ls)Śzw9ă$Æjm%ɰCsӶFx3E4@oWYPG$yJtB_l;MqPj҄PIb]SbDyٵ>6MhtNgԕ??}X!-Ի^ӌOkױicgng5(s˔R:.NSa'-YM?x9),-kg˼,kA{ʰnyd_Xc!T&sJ|0>˗S.$ápxڤuJkېdTt1e*Ы!p$=p#m Vڀvf0ƌ0\a_ל`zߪc8c!Qx*8{oȎ| pJ B$yw8?6< 8fk :k)ritQCz}AO$p- g2#C]o>ѿ75+mq2Q9,bKGAvM#pPVBfT2uTw_%`/QUU,0 .%y'R4Hf:L%s4j44tGn2G;,<ص~Z.cFb,WƭK)ɉ?S[a͙#i+V_Mddq <="ƚ3>2mіSQmLVk)->Cʉ$LMTĜf|럼gk M|43rOV@YFCYVLmb>4ŖnPLlށV]*x#뇇mXXIfJD+rj*[]$i O LdSY,.G©V2yYkgɵ:H~Ә؊B%~ ͒\JW z<۰zr,s}0;iC'!B ]!ٛ ~u5iѸ_6nCaAyo|G fjK]x^Z$!UN?-ڎht7eNp {\,OFW:dcdEc+;k#ND@|/Lŋ K|J\kzSdrIDt%Hzֲl me T G5`ۂny(Oї4,±Vuwiwj;ހp#/EeUEX qA7+xJX_D. 8FRckQ=1ȾG}4hVco;FHm \]ϲ`j招N6 /U4Kbٿc?-٣bv .ʐ'}(sǻқmyH}gp'zԮn\Rxx7a,,qғc:J=;%I`AVfo,t( -}LqFшg-7H|MM -_itwVawê|i.(^l5BUCIe#U(x*דsU:D.7cI+{S V}%+m BCOt4,N FY&yCw W\+X0xeѻ1kmU]SnI[\;GH>PyIm o亘x</T=T~0m)c)&J*g:񮧕? Loģ/v̇c">ᦐrgBqx4n|'LnIQ | GS[(.6^7x-31ڊ2-6Bᙧ2V>5]P%W2X:-uO SXN%EY9T;L=UF772ݚebe\:!(rdV ЩO*au:A‘ו'y%vؒFoTQ}ců.+yd_':]<,isim72io\JF6]Aɟ*]3 NN_ ))]@_Ii%{IXI%LͩY%ۊ&xRYNq{  lcF#KKE 2Ąq67+{CRb`jw~j2m=`vQ٠%hB=A؀#s[zt#JEsּ8oۯ} S^o E.Վ[fҹLLAl<^ڧǞЯtC8ftQw8F$ĩ^#@V8pPG6*ޜ#SdcBj H^p廨+-ˤ3ܳz1o52N~]®=X^Xcy2f#F d~$@g(T3VWz+WRq@:48hƬX rB0t~QQsC_ւ>Q[|%0.4;Y7ƱZ_WmluC Rv+>,KK]LQR6BgHR ^{. ER}TUSU, Fj3盒nU? ЋVG9.Z\э Bu wfn0"j412})#l-, M4AG< }ݺJi|^W .@/Wd.DOǑEdZNEZKЃN61:  ?Httteϧfx KRwD+Lo2=8.]m[qxX, endstream endobj 93 0 obj << /Length1 2134 /Length2 13917 /Length3 0 /Length 15211 /Filter /FlateDecode >> stream xڍP\ c=h.844!@p'%wȽޫڽ9טkS*1 ;'Ff^: 3B9"&h h&7rz3Tdm,lN^.^ff+33 A`^)@ :"RNoy 6p-M FN@۷&F65%BP[89212:24WK' *vhhd 5FD _ 5xX\L`[v<@h_􀿇`adodi `fi(I3:9L04qYY@RD`9--m0oc3O 4y;߇kmr235 Sg{& ;Kg6o"d@'3337+X0@[ޞ {[@oK3 vz{[`ji0[!M 4 ? F?1dgG$%(IwU V66Q,_2vf _žM?׃AogffgDHO=_?z#[K-x MZWhjl2NFo bgnAZ:JZM-L,_b? rf003rXoS|۝(ag2cX98F`;"X98,oh t&F;ӛ ;oǑrr8L n73IfibyC`#kۭjh_俈- m"!'b2|K '[_qy_1Prx31|+9ސ_o2&h/{?mjFS̛3o~ fv鰳-߳amQA6[ [kooChchoYvO09Y:\Arxrr4P]OoJ T&98ym1 h82 j!peJa\;?%TeoDzW%H=B[UZ UvZN L!2 z=;xi[C7CvR98s*sr/] Q٭Cz*fֈ_w/Ij,3:\쾰q=z6$Mpc6Xğ`CG'r}]6j<Sݻ6(4hNWp$д/x3j)U0B+BCii_vp0??@b8e^ R J/4< {k0E݊, ѧ*!stouzcqj3߻^b˿ \n&.UIՙ>6XUZ_R\7~"ae5X޻#~wzފy<:oiDan7Zn5vhFiήve*֨ #x}y'xp^A6!SU$]P,m͍ ֊nO⦂g[ɾgeDKsClqr>28!_qԹDVQ#bV㢤,C>y&`ZkXp.#i~9NTh3?B -^=R:}vYU7%#g'Mirzh8eKT}UzwE"(r?DӁ`p^to41߼4Eޗo(tC5M)(KGXxjMqd)~r*lD b!ʤAm\3KDtj0T. ~ZI}U˞" 8,((Zs=֮|vle[<<Xh›7GJhS rI YunΛ`ǹ G?ݍfEtb6m02q>D[\kًڮ0[bd`ubkכVOt4^&;T(h*9"RsJ2-h3Sknc5PVdv.OsacuKB I(!:*b "x[URb0U<DN6~9N-֢ڥx*Eg'$h[[gCQIe:_.jo<|3<Ę7$NM BBۚAȒPVUPcbUE!p>)oyW"ݭ6AMQibXaEVO /,YicWҭT6>a$ .h!^-R=_ˁ|Do0pQT;==2ev@_c 1y7i~7 buTj2mݛ<ΩcwDŽAxrbǖcr<n ]$f 8vb["2rMl8GWSoJv:}RLj~+$Au\u?̚2AC1N|hS07[:І;Xw# , 4?9c3O DB 䜆o|t/,Lb%N\OO?EH5a~ZsPfj[/-qTzlKԬEJn)vx "HE$ɐ.utx_YeK[aD[9fG$ChFL pRW%Cmd0v ϏGɩQ+ ~Ond4BqϕZAS$ )W}iE х1:a1\Uk417WAObvM:jV0n+DiTs<;ϒ!ߡc)pm+%V-+ˌd\󠨛cp: \'=́We4 YpN+\&cpeTMPXv&Y2^J_5W):.saDKQOtEUx oz Mt^=D wtDHV;7RvƱ!_഻NqԋEm`/Fh-p{,KM䬭}kFF؄5a [r#4B*ĻќwGy6<(B둑  [Ф>#C[1<+q\{8 "D#X՛ 1)]{(2LJK(,jj vO i {*xEv&c!ݩbMJT[gZH'3R"voe2FMBR;t^ x/y'38AM! kN҉+b d%I-={r,Ma y0YWc99@ߛ:6Ա'S Rä51Cgg 5hִ2b[уswgHK4]y]@X"Q: D{ ϧio$>bYdUMFϞÆΫa$ WlaO\=v!$ /yHu.;:S?T/i?M:~SL)KKݽW*{y1] kQVGB{LQnT³f3ə\p}{OYj-BBj?n8g嶎d]~o߇n. 7AѸ>i*M:'%g XSi 2 6e/7"pݜ)ݭ5Zqd`FU\Kſ = n}}̭Hڙ( %:NbaƑaӸRX@h썺'gfu1bAѥ<q3U&eKWDzOD/~|U}zY^j=5M׃pw#D;{]h6{׵ۀے 5NTs`iw')9z l7zQxX@XnvynQ":$|VyTmeZoj ;${6'?c[ ~Ârmw6/#d^cji+ʹrqUlvUxA%Sк%4"q8(c.1_$`'dϼ-W/=o,\JΧMVOnkm{CA;X|${9YqRƺ7Fs§_=,-:`׵OdGXYƺJB|ع?$*8hxUpFC%}l/w"BA F %s*&zGCcwnf8Щ yI&f/ڡ;K[ /ͣd ɯ_G ݽphLVޭNxڔC"nb\A]O49 5 1]*$6ϒP?P}~l4!vlJ5D3ד|4"9b ʨ7Eͺ\b.IT[]lȽ*,oU mts`{aɏQ7۴2M*#slb1> ;bbWId q5](iaGY}~R"j5 $SPӏY<2k1&t%+Zv! M.{&B :>*/’ܺih٧ GcayiCzPr)2oZB<8 P3 o{C9>]i}jP¹ W96,35 (u8xύL7x9񃠓S^^qgR~1H.SfnJ#uΜ-{.+^ÁH㼌. dD'G֘=aȏU^s^VURAoX"*&4𲉉) ։tΆ% zb=<(F4Pz9g}e_ݠc,06>,!w)c9dl1m2T?v:ΨU(EUQ0^?YqScpd|1@O+g~zV63tƵ/rhB-@fRΡs݁ߜQ,nK|W ZP x-7Wx"Cw&-wXOu_p`xj)xvi$Xm<ϊ$T=((;VdZ.u f.ͅs!p!SmRf'}ؔߔܾS`eZ P{z2adl\*ݕLft0Z<\MY@|I:}:].n|NEtx YUEٖJ3kY?HjC|BDU "`\J@UӉG *9 ?[OwlOUHoš"Zv_xT希݃7(+| c#Ι3$nߘE*A bmh #Q*@@yNpHPBi*ֿ 6}uC1!êdONb<[ A$DVQd*5&̦9Z"^tB#J_\_cFvsU$4l@ӋʵT%gNL^ }h;>F=q {B1|a-UHٟvd2Oa'ὈJ@b;z%J(Y=Ugt8Uhhv' ZdKg NȺb)Z%iMCL `iSc: !%pn:z/ʖ7*':<>WJn*l򯇿8]uUMG0&Lrzʚs#gcD佟46_l"&.~ś̒͏5다| /Q#Tp˕+W+ƍ+U ~8!dA/Tz+E0u{u+qϞ,Ǎ8@6~r\[;pg”vNƧF/IDwb湅݊դ䯙0`p-SXJđFsJBEKʋį 4ҁ]SS-fu^'%XIJ0 ,ɶ. (Ü2%7@ 4PC5+$UG]{ksښvͯˎ(rY Ӱζf [J%)HQD N /ݐLgp0GXn9 fk(@t(B p#EV 5HJSw.!=rJEpMC5LEOC &a '+A>2c)rl}h;;G;\= ntVI h2/L7 0 ~v OKd? Qㄢ]mt*lR O'd9v>XE"OMW7HK C )>}8ܒ г2)0QRDѲ81wP{Nup88 iy ޻C4 3*QLD'rJg#,9R A!'8'e L咪ㆭ 8y9ty8 C ݪ';qЧ;0'. FR csta!D6 %!qvgLC0|lG؋y3\7N;Ȯ]aѽDX 24- xYpnۯ/[˅H zݺTſ*@/fYR$QFJHG2Kl|׫R(b&&)umGac`\ٷ#+ܵ-%ni<3NΛd1c suZe]'f]ɩ!4/YN0b?Tw}5G)҆"#|^B0ngY&53*Z3'*CRT;Krr|FDwQǂ|.rr$>a-s|&s"-@(S!8}~6G?,[&_5V%%jHW}oDrVutnjr]E28BMv| ےHuGD- W?Z%FLC?RH (>FhWb3}c{V%*87{3b͓Z&L+R[0lcph=6oy/qPy?gݮԛ\`jBζ{ hVJ&&ԝwDm˪lG}0F֢2 ԁǹI=˒Åm䃬$ɶ P"uӻ%>_*[nAT#sٟU#5ܣ:fe hh0N-j| 2Ѽ=ֹNފA8n-#R&~^6]VT2>v LjFHo13ܤ5p\|cgr팧A42nlS+y|nȡIV6 gFc;]'l~+G.023j](9cZC ubKmr͞D^qmTl>c6lȿȍz@N;|<|^3MamzE)_&l9SC:1{Rv);yiy(VcXJ@Q-ܢ:.Ѿb'hG8rVh-kGw \Nɛks9C. oLw|D,vNHm5Aa8e| 77K74s6*_!UYJkh%HC8~7,:t^TdXL?Ѻ&ʼǸ1Ϗ_cIdxsx$Ql:Qƌ[8Ս␁D _vPud$ @u r5wck*{؎ dȃpMۉ0_\L?  ;Y Dxv}̒q~]B<6,B:9"B Z'>e.r hgejt65<"C%%vcsȻHѯֽ}?{˾u\4UvqmIⲹ2#ơo0tY+cȟ,jލXV1l|4PPW&M|a2ی5K[4Z]8y bA-:eY{:(&;V ⻉"&І|iQsN1I%3 ğd+0i!Gb8I';Y?2l)qECq@7Z F gCalL|lƍ,qd%6!ԛqV9zA]ثscɯ1^Y|^,(O!KЗ" "\td$gp>}QVMY?R=lN ƤZ˨w HU<=:7C+=gR#Will%6ASFA?A(sH&x4Dn_kvW籓0؂qѓJt5EsS#y|KzG~G =ˠN˶QE1B;vsOHJ(߁9Fr@`omC=i(m[=R ]$qPVNSGFwAbKIzA=V? ![řz;Mَ!}E ɎmL˚֦M@fӤ=yyt Z[w*8U JSWܻ+Ç!ס $Ы^ǹ t#2mO4\J犱THj]9GČd'oFEhv몸> stream xڍT 8m^UTB+{Td_ʋ1 1,f5!JoM)Iv%eI .[=ﻞzw[q=^ÐD46NN,@5h4DaQv.i:0L,hCl*hV4`hD:C)$`;4P40(^,x@ 0[ÁĠ 4`C`yA>DD -嫃Bq8$3Z *̬,.Kh9"ʤJ  .$2(,&IKo)dLh,&b> "Z8\oC <rQؐ6!~ а0=+DQ~ebiiyN##:i`VS Z`6Ş@Y3ҒFo»`,*=--T~C|,UVdƦR*OPn,xl$ D}Z,vV)>Vup q[d /IL!DmcFDٛ/I=}49Z6nwݓ.o|ʁ9b6^wBjH^iV.17pT$W>H~ޅpҐjKE[-N>2?+(;P1kdߵof0 bb3B9TOCꢙGnٚ[F_P2o~_25*OKOHhG(T5e'8eJit>h8-OȾ}8@黁y*e/G#NsyuKVYLol&}КzЙR6U'\K#+.&p|xQ zQ'sWg:w$3߆8arFYظ擨k/ j&W^ ?o]sQIz[:cؽǵ!pϾ}3tQkVosRw'ҋ^v)3obGD?Ln~}?$;u^.w|ރ% SJc jHɁȺI٫QLoqJBk|Ky8GKX6F5u;t RvߡjܚwĚSmH"XeN\;ۡKӶIKX\nᾌ_|SqyC[.ܰ?K潒>Y @\rN#Zr3= +#+"v3 x ::ׄ649]ݭ$y87Ph=ݧSIC6xu8PgZꠄd=YUMEOkZ'2ZZ|R}:vV Q-FJ>߅PsXNoyt"I m>J==ۦ 2WoL ډ4E8$7JYBǗ6d\+oګ\s3g>:4yZkxGrGSz2i8nA|Fu!LЉgl;52#KEBf<7ĝ\v ]>,(Dޓ)II|pxЩj-"f zmcP%>qU㺴8TͣۇV__dnl#J#uXws C=z}X.U '9f6~`d'`G]AE۔q鏝U+ZW`{q˜nh\`{BeOŗ!J_ɍe8**;⅚#'Pyd8qŬ .TL_Ճf .P&GKŠ؟sR-]͜ endstream endobj 99 0 obj << /Producer (pdfTeX-1.40.20) /Creator (TeX) /CreationDate (D:20211026170907-04'00') /ModDate (D:20211026170907-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) kpathsea version 6.3.1) >> endobj 11 0 obj << /Type /ObjStm /N 62 /First 485 /Length 2770 /Filter /FlateDecode >> stream xZYSI~ׯذ"a f06`!$'3.$@}qJuefeULaJD&5B2 Dɔb$s^81Y0 60a eXa'g ekǬ&>2k ;쐻 *0́: F19`9m8PD(Pn[h+fkDae9h;` L@mgA A ` w0 ?@2X :##eIDˁ:0{ՀJBB"bADX W ,J duRjx~/FEo4dŰ?t!uF6:mC8?r /o\GPTI*WYIu:{~S1b' VnN'l*$Fz-2+*_Gz%kIk\H<y%rNL g{쯢of&Лi2iq76I6g?C[3qa-oAJ4rDCϴ{{!MC]Ste|>_dYŝejٞ7ݏ$xbӀU NOmٯ%BrM'JT]z'Mȏ 4وة|}Sf=tQJw_U?M6Hr8IYb &OsQҺ@씤muU{ y{>AzϻK4@&5<pJ]N&CcF%pu&L*cD:yĩD\cOJU_{E)Dē\9.DOI+P6ive2&^퓾  Z 2@#5'no@P !sni4鐉NT$ʼnN ,m$IT[CecYI)+WTJ,Ƀm&Z }=T>>^RK'lGMI.L*+qJbSY:|T|,o`>jNDxW jh@=Q ݊f,/t*|咓Vz:(]9^ڒ&G K6O&!2XiYzgl*)4CG^2H6HT#3H_=:qD'yi[(-gcy|hJeR~3`ytNH[gÌZlӚ';W)8)i%pT)dB3qR\?NMQT)iȔYD*mS=^C m\uYj]V*B3zieI,`Bgi|.ܴah+<[ZHh"Lk*f>N+}+P;rtVtZMjĥ㦡|<"]4X:e#-ԃcy 6fDQpfjsx(601/f(K%O*#p3=Ab$Fu03\)ǗxEY4inkiV1 ]ӳ/_Zǯ!_/^8^(:H;iv9lOpco߾-W pG.8B}]^ 7_?*nn<_|?}6?~ NK_~ɯկ۫ǻ7+-'/(Dt||Xuՠ(gw£-ϟ<}`fHH8G-؜ꭔeQ> u 2iyf=/CE'<ʪ+DuXj֛nod'= ^BUQ:uzGhDΤOl"g@6CD.XWUR[نtѿl9`?L3 endstream endobj 100 0 obj << /Type /XRef /Index [0 101] /Size 101 /W [1 3 1] /Root 98 0 R /Info 99 0 R /ID [<288CBAB6564F86DED6C62A556156A831> <288CBAB6564F86DED6C62A556156A831>] /Length 303 /Filter /FlateDecode >> stream xͽ/CaKgzK]UW. %bXlVf&D_`t Y~ysNWDψDA"1aZ&Kd"Y %UC KjW$ă.ZIGgɒa2Brdd & qM0W&aϚpkMSp65Mùhh*75y-kOk#k 7s pwϗ,m endstream endobj startxref 272821 %%EOF ConsensusClusterPlus/inst/NEWS0000644000175000017500000000246214136047471016261 0ustar nileshnileshVersion 1.52.0 Brief R code update for compatibilty with R 4.0. Improved messages. Deprecated kmdist clustering option. Version 1.35.0 Added CITATION file, updated references, and man pages. Version 1.11.1. For large datasets, the input data (d) was modified to also accept a distance matrix which reduces computation time, and plotBMP was added a plot type so that large consensus matrices can be plotted. Internal data structures were modified to increase speed. Distance metric options expanded ("maximum", "manhattan", "canberra", "binary","minkowski" from dist) and custom distance function option added. Partitioning Around Mediods clustering (from cluster package) was added as a clustering algorithm. Kmeans invocation ("km") was changed to run on a data matrix input by default. "kmdist" performs kmeans clustering on a distance matrix calcualted from the resampled data. In versions prior to 1.11.1, the "km" option refers to kmdist. Users wishing to use this kmeans invocation in versions 1.11.1 or later should use option kmdist. Version 1.5.1. 1.0.1 changes were re-incorporated into Bioc 2.9, 2.8. Version 1.0.1 was part of Bioc 2.6, but not part of Bioc 2.7. Version 1.0.1. Item-consensus calculation was corrected. Consensus matric heat maps are now guaranteed to correspond to the scale. ConsensusClusterPlus/NAMESPACE0000755000175000017500000000055314136047471016026 0ustar nileshnileshexport(ConsensusClusterPlus,calcICL) importFrom(graphics, barplot, hist, legend, lines, par, plot, rect, segments, text) importFrom(grDevices, dev.off, pdf, png, rainbow, rgb) importFrom(stats, as.dendrogram, as.dist, cor, cutree, dist, hclust,heatmap, kmeans) importFrom(utils, write.csv, write.table) importFrom(Biobase, exprs) importFrom(cluster, pam, diana)