ctc/0000755000175000017500000000000014147405150011156 5ustar nileshnileshctc/exec/0000755000175000017500000000000014136046747012115 5ustar nileshnileshctc/exec/ctc.php0000644000175000017500000001057614136046747013410 0ustar nileshnilesh
Ctc Demo Web application V0-1

This demo makes hierarchical clustering on your data

Upload your data (text-tabulated file)

File Description:
A first Column
A first line

$MAX_FILE) exit("File size: $taillefichier; max allowed: $MAX_FILE"); } /* ================================== */ /* We write R code in file $ID/prog.R */ /* ================================== */ $fp=fopen("$ID/prog.R",'w'); fwrite($fp,"library(ctc)\n"); /* Read Data */ fwrite($fp,"data <- read.delim('$ID/data.txt',header=$HEADER,row.names=$ROWNAMES) \n" ); fwrite($fp,"data \n"); /* Hierarchical clustering */ fwrite($fp,"hr <- hclust(dist(data)) \n"); fwrite($fp,"hc <- hclust(dist(t(data))) \n"); fwrite($fp,"dr <- as.dendrogram(hr) \n"); fwrite($fp,"dc <- as.dendrogram(hc) \n"); /* A pdf file */ fwrite($fp,"pdf(file='$ID/Rplots.pdf') \n"); fwrite($fp,"heatmap(as.matrix(data),Colv=dc,Rowv=dr) \n"); fwrite($fp,"dev.off() \n"); /* Some png images */ fwrite($fp,"bitmap(file='$ID/heatmap.png') \n"); fwrite($fp,"heatmap(as.matrix(data),Colv=dc,Rowv=dr) \n"); fwrite($fp,"dev.off() \n"); fwrite($fp,"r2atr(hc,file='$ID/cluster.atr') \n"); fwrite($fp,"r2gtr(hr,file='$ID/cluster.gtr') \n"); fwrite($fp,"r2cdt(hr,hc,data ,file='$ID/cluster.cdt') \n"); fclose($fp); /* ===================== */ /* Send command (R batch)*/ /* ===================== */ system("$R_BIN --no-save < $ID/prog.R > $ID/prog.R.out 2> $ID/prog.R.warnings"); /* ===================================== */ /* We create html page including results */ /* ===================================== */ echo "

Ctc Demo results

"; echo "A pdf file

"; echo "3 files for Freeview"; echo " or Treeview: "; echo "cdt "; echo "atr "; echo "gtr "; echo "

"; echo "

"; /* Signature */ echo "

This results made by ctc package. Code use: prog.R, Out: prog.R.out, Warnings: prog.R.warnings."; } ?>

ctc/demo/0000755000175000017500000000000014136046747012115 5ustar nileshnileshctc/demo/00Index0000644000175000017500000000002414136046747013243 0ustar nileshnileshctc Ctc demo file ctc/demo/ctc.R0000755000175000017500000000265514136046747013024 0ustar nileshnileshcat ("\n\n C T C \n D E M O \n\n") cat("\n------ Standard clustering with R (not ctc): -------\n") data(USArrests) h = hclust(dist(USArrests)) plot(h) readline("Next") cat("\n------ Get the ``heatmap'': -------\n") heatmap(as.matrix(USArrests)) readline("Next") cat("\n------ BUILDING HIERARCHICAL CLUSTERING WITH ANOTHER SOFTWARE -------\n") cat("\n------ Write data table to Xcluster file format -------\n") r2xcluster(USArrests,file='USArrests_xcluster.txt') readline("Next") cat("\n------ Write data table to cluster file format -------\n") r2cluster(USArrests,file='USArrests_cluster.txt') readline("Next") cat("\n------ Hierarchical clustering (need Xcluster tool by Gavin Sherlock) -------\ntry:\n\nh.xcl=xcluster(USArrests)\nplot(h.xcl) ") readline("Next") hr = hclust(dist(USArrests)) hc = hclust(dist(t(USArrests))) cat("\n------ USING OTHER VISUALIZATION SOFTWARES -------\n") cat("\n------ Export hclust objects to Newick format files -------\n") write(hc2Newick(hr),file='hclust.newick') readline("Next") cat("\n------ Export hclust objects to Freeview or Treeview visualization softwares -------\n") r2atr(hc,file="cluster.atr") r2gtr(hr,file="cluster.gtr") r2cdt(hr,hc,USArrests ,file="cluster.cdt") readline("Next") cat("\n------ Clustering and Export hclust objects to Freeview or Treeview visualization softwares -------\n") hclust2treeview(USArrests,file="cluster.cdt") ctc/DESCRIPTION0000644000175000017500000000126314136067410012667 0ustar nileshnileshPackage: ctc Version: 1.68.0 Date: 2005-11-16 Depends: amap Title: Cluster and Tree Conversion. Author: Antoine Lucas , Laurent Gautier biocViews: Microarray, Clustering, Classification, DataImport, Visualization Maintainer: Antoine Lucas Description: Tools for export and import classification trees and clusters to other programs License: GPL-2 URL: http://antoinelucas.free.fr/ctc git_url: https://git.bioconductor.org/packages/ctc git_branch: RELEASE_3_14 git_last_commit: c273353 git_last_commit_date: 2021-10-26 Date/Publication: 2021-10-26 NeedsCompilation: no Packaged: 2021-10-26 21:11:36 UTC; biocbuild ctc/man/0000755000175000017500000000000014136046747011744 5ustar nileshnileshctc/man/read.eisen.Rd0000644000175000017500000000447614136046747014263 0ustar nileshnilesh\name{read.eisen} \alias{read.eisen} \title{Read expression data from a file formatted for Eisen clustering} \description{ The input for Eisen-clustering is a slight variation of a tab delimited file. This method reads the expression data from such files as a matrix and provides optional additional information on the experiments as attributes. } \usage{ read.eisen(file,sep="\t",dec=".", format.check = TRUE) } \arguments{ \item{file}{The relative or absolute path to the file to be read, as internally forwarded to the read.table function. } \item{sep}{Separator of fields, passed on to read.table. } \item{dec}{Passed on to read.table. This is particulary helpful for the interpretation of data from localised spreadsheet programs.} \item{format.check}{TRUE or FLASE: to disable file format check.} } \details{ The software of Michael Eisen and its plain tab separated format for the presentation of gene expression data prior to their clustering is supported by many hard- and software providers, both as an input for their tools and as resulting from the analysis and normalisation of the chip images. To be able to read and write this format, the Bioconductor suite is enabled to easily reanalyse or extend older experiments that might have been analysed with the Eisen tools before. } \value{ A numerical matrix is returned. It is a complete analogue of the Eisen-format, except the descriptions, weights and other information being passed to attributes. The first row will be the column names, the first column will be the respective row name. A second row that has a first empty field is referred to via the attribute "second.row". A column NAME is stored in the attribute "NAME". } \author{Steffen Moeller} \references{Michael Eisen Lab http://rana.lbl.gov/ Michael Hoon's Cluster 3.0 http://bonsai.ims.u-tokyo.ac.jp/~mdehoon/software/cluster/ Eisen M.B., P.T. Spellman, P.O. Brown, and D. Botstein. 1998. Cluster analysis and display of genome-wide expression patterns. /Proc. Natl. Acad. Sci. USA /, 95:14863-14868. De Hoon M.J.L., S. Imoto, J. Nolan, and S. Miyano. Open source clustering software. Bioinformatics *20* (9): 1453--1454 (2004). Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \keyword{cluster} ctc/man/xcluster.Rd0000644000175000017500000001022514136046747014104 0ustar nileshnilesh\name{xcluster} \alias{xcluster} \title{Hierarchical clustering} \description{Performs a hierarchical cluster analysis on a set of dissimilarities (this function launch an external program: Xcluster).} \usage{ xcluster(data,distance="euclidean",clean=FALSE,tmp.in="tmp.txt",tmp.out="tmp.gtr") } \arguments{ \item{data}{a matrix (or data frame) which provides the data to analyze} \item{distance}{The distance measure used with \emph{Xcluster}. This must be one of \code{"euclidean"}, \code{"pearson"} or \code{"notcenteredpearson"}. Any unambiguous substring can be given.} \item{clean}{a logical value indicating whether you want the true distances (\code{clean=FALSE}), or you want a clean dendrogram} \item{tmp.in, tmp.out}{temporary files for Xcluster} } \details{ Available distance measures are (written for two vectors \eqn{x} and \eqn{y}): \itemize{ \item Euclidean: Usual square distance between the two vectors (2 norm). \item Pearson: \eqn{1- \mbox{cor}(x,y)}{1 - cor(x,y)} \item Pearson not centered: \eqn{1 - \frac{\sum_i x_i y_i}{\left(\sum_i x_i^2 \sum_i y_i^2 \right) ^{1/2}} }{1 - [ sum x_i y_i ] / sqrt[ sum x_i^2 * sum y_i^2 ] } } Xcluster does not use usual agglomerative methods (single, average, complete), but compute the distance between each groups' barycenter for the distance between two groups. This have a problem for this kind of data: \tabular{rll}{ A \tab 0 \tab 0\cr B \tab 0 \tab 1\cr C \tab 0.9 \tab 0.5\cr } Ie: a triangular in \bold{R}\eqn{^2}, the distance between A and B is larger than the distance between the group A,B and C (with euclidean distance). For that case it can be useful to use \code{clean=TRUE} and that mean that you must not consider A and B as a group without C. } \value{ An object of class \bold{hclust} which describes the tree produced by the clustering process. The object is a list with components: \item{merge}{an \eqn{n-1} by 2 matrix. Row \eqn{i} of \code{merge} describes the merging of clusters at step \eqn{i} of the clustering. If an element \eqn{j} in the row is negative, then observation \eqn{-j} was merged at this stage. If \eqn{j} is positive then the merge was with the cluster formed at the (earlier) stage \eqn{j} of the algorithm. Thus negative entries in \code{merge} indicate agglomerations of singletons, and positive entries indicate agglomerations of non-singletons.} \item{height}{a set of \eqn{n-1} non-decreasing real values. The clustering \emph{height}: that is, the value of the criterion associated with the clustering \code{method} for the particular agglomeration.} \item{order}{a vector giving the permutation of the original observations suitable for plotting, in the sense that a cluster plot using this ordering and matrix \code{merge} will not have crossings of the branches.} \item{labels}{labels for each of the objects being clustered.} \item{call}{the call which produced the result.} \item{method}{the cluster method that has been used.} \item{dist.method}{the distance that has been used to create \code{d} (only returned if the distance object has a \code{"method"} attribute).} } \note{ \emph{Xcluster} is a C program made by \emph{Gavin Sherlock} that performs hierarchical clustering, K-means and SOM. \emph{Xcluster} is copyrighted. To get or have information about \emph{Xcluster}: \url{http://genome-www.stanford.edu/~sherlock/cluster.html} } \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \examples{ # Create data set.seed(1) m <- matrix(rep(1,3*24),ncol=3) m[9:16,3] <- 3 ; m[17:24,] <- 3 #create 3 groups m <- m+rnorm(24*3,0,0.5) #add noise m <- floor(10*m)/10 #just one digits # And once you have Xcluster program: # #h <- xcluster(m) # #plot(h) } \keyword{cluster} \author{Antoine Lucas, \url{http://mulcyber.toulouse.inra.fr/projects/amap/}} \seealso{\code{\link{r2xcluster}}, \code{\link{xcluster2r}},\code{\link[stats]{hclust}}, \code{\link[amap]{hcluster}}} ctc/man/hclust2treeview.Rd0000644000175000017500000000334014136046747015372 0ustar nileshnilesh\name{hclust2treeview} \alias{hclust2treeview} \title{Hierarchical clustering and treeview export} \description{ This function compute hierachical clustering with function hcluster and export cluster to treeview files format. } \usage{ hclust2treeview(x,file="cluster.cdt",method = "euclidean",link = "complete",keep.hclust=FALSE) } \details{This function producte all 3 files needed by treeview, with extentions: cdt, gtr, atr.} \arguments{ \item{x}{numeric matrix or a data frame or an object of class "exprSet".} \item{file}{File name of export file.} \item{method}{the distance measure to be used. This must be one of \code{"euclidean"}, \code{"maximum"}, \code{"manhattan"}, \code{"canberra"} \code{"binary"} \code{"pearson"}, \code{"correlation"} or \code{"spearman"}. Any unambiguous substring can be given.} \item{link}{the agglomeration method to be used. This should be (an unambiguous abbreviation of) one of \code{"ward"}, \code{"single"}, \code{"complete"}, \code{"average"}, \code{"mcquitty"}, \code{"median"} or \code{"centroid"}.} \item{keep.hclust}{if TRUE: function returns a list of 2 objects of class hclust} } \value{ if keep.hclust = FALSE, function return 1. else function returns 2 objects of class hclust, first: hierachical clustering by rows, second: hierarchical clustering by columns } \author{Antoine Lucas, \url{http://mulcyber.toulouse.inra.fr/projects/amap/}} \seealso{\code{\link[stats]{hclust}}} \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \examples{ data(USArrests) hclust2treeview(USArrests,file="cluster.cdt") } \keyword{cluster} ctc/man/r2xcluster.Rd0000644000175000017500000000424114136046747014351 0ustar nileshnilesh\name{r2xcluster} \alias{r2xcluster} \title{Write to Xcluster file format} \description{Converting data to Xcluster format} \usage{ r2xcluster(data,labels=FALSE,description=FALSE,file="xcluster.txt") } \arguments{ \item{file}{the path of the file} \item{data}{a matrix (or data frame) which provides the data to put into the file} \item{labels}{a logical value indicating whether we use the frist column as labels (NAME column for xcluster file)} \item{description}{a logical value indicating whether we use the second column as description (DESCRIPTION column for cluster file)} } \note{ \emph{Xcluster} is a C program made by \emph{Gavin Sherlock} that performs hierarchical clustering, K-means and SOM. \emph{Xcluster} is copyrighted. To get or have information about \emph{Xcluster}: \url{http://genome-www.stanford.edu/~sherlock/cluster.html} } \details{ Software \emph{Xcluster}, made by \emph{G. Sherlock} needs formatted input data like: \preformatted{ NAME DESCRIPTION GWEIGHT V2 V3 V4 EWEIGHT 1 1 1 gbk01 Gene1 1 0.9 0.4 1.4 gbk02 Gene2 1 0.6 0.2 0.2 gbk03 Gene3 1 1.6 1.1 0.9 gbk04 Gene4 1 0.4 1 1 } Line begining with \code{EWEIGHT} gives weights for each column (variable). Column \code{GWEIGHT} gives weights for each line (individuals). } \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \examples{ ## Create data set.seed(1) m <- matrix(rep(1,3*24),ncol=3) m[9:16,3] <- 3 ; m[17:24,] <- 3 #create 3 groups m <- m+rnorm(24*3,0,0.5) #add noise m <- floor(10*m)/10 #just one digits r2xcluster(m) ## And once you have Xcluster program: \dontrun{ system('Xcluster -f xcluster.txt -e 0 -p 0 -s 0 -l 0') h <- xcluster2r('xcluster.gtr') plot(h,hang=-1) } } \keyword{file} \author{Antoine Lucas, \url{http://antoinelucas.free.fr/ctc}} \seealso{\code{\link{xcluster}}, \code{\link{xcluster2r}}, \code{\link[stats]{hclust}}, \code{\link[amap]{hcluster}}} ctc/man/hc2Newick.Rd0000644000175000017500000000164214136046747014053 0ustar nileshnilesh\name{hc2Newick} \alias{hc2Newick} \title{Convert hclust objects to Newick format files} \description{ Convert hclust objects to Newick format files. } \usage{ hc2Newick(hc, flat=TRUE) } \arguments{ \item{hc}{a \code{hclust} object (as returned by the function \code{hclust} in the package \code{stats})} \item{flat}{a boolean (see section value).} } \value{ If \code{flat=TRUE} the result is a string (that you can write in a file). If \code{flat=FALSE} the result is a list (of lists). Each list is consituted of the elements \code{left}, \code{right} and \code{dist}. } \examples{ data(USArrests) h = hclust(dist(USArrests)) write(hc2Newick(h),file='hclust.newick') } \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \author{ Laurent (laurent@cbs.dtu.dk) } \keyword{manip} \keyword{cluster} ctc/man/r2gtr.Rd0000644000175000017500000000416414136046747013300 0ustar nileshnilesh\name{r2gtr} \alias{r2gtr} \alias{r2atr} \alias{r2cdt} \title{Write to gtr, atr, cdt file format} \description{Write data frame and hclust object to gtr atr, cdt files (Xcluster or Cluster output). Visualisation of cluster can be done with tools like treeview} \usage{ r2gtr(hr,file="cluster.gtr",distance=hr$dist.method,dec='.',digits=5) r2atr(hc,file="cluster.atr",distance=hc$dist.method,dec='.',digits=5) r2cdt(hr,hc,data,labels=FALSE,description=FALSE,file="cluster.cdt",dec='.') } \details{Function \code{\link{hclust2treeview}} compute hierarchical clustering and export to all files at once.} \arguments{ \item{file}{the path of the file} \item{data}{a matrix (or data frame) which provides the data to put into the file} \item{hr,hc}{objects of class hclust (rows and columns)} \item{distance}{The distance measure used. This must be one of `"euclidean"', `"maximum"', `"manhattan"', `"canberra"' or `"binary"'. Any unambiguous substring can be given.} \item{digits}{number digits for precision} \item{labels}{a logical value indicating whether we use the frist column as labels (NAME column for cluster file)} \item{description}{a logical value indicating whether we use the second column as description (DESCRIPTION column for cluster file)} \item{dec}{the character used in the file for decimal points} } \examples{ # Create data set.seed(1) m <- matrix(rep(1,3*24),ncol=3) m[9:16,3] <- 3 ; m[17:24,] <- 3 #create 3 groups m <- m+rnorm(24*3,0,0.5) #add noise m <- floor(10*m)/10 #just one digits # use library stats # Cluster columns hc <- hclust(dist(t(m))) # Cluster rows hr <- hclust(dist(m)) # Export files r2atr(hc,file="cluster.atr") r2gtr(hr,file="cluster.gtr") r2cdt(hr,hc,m ,file="cluster.cdt") } \keyword{cluster} \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \author{Antoine Lucas, \url{http://antoinelucas.free.fr/ctc}} \seealso{\code{\link{r2xcluster}}, \code{\link{xcluster2r}},\code{\link[stats]{hclust}},\code{\link[amap]{hcluster}}} ctc/man/r2cluster.Rd0000644000175000017500000000554214136046747014166 0ustar nileshnilesh\name{r2cluster} \alias{r2cluster} \title{Write to Cluster file format} \description{Converting data to Cluster format} \usage{ r2cluster(data,labels=FALSE,colname="ACC",description=FALSE, file="cluster.txt",dec='.') } \arguments{ \item{file}{the path of the file} \item{data}{a matrix (or data frame) which provides the data to put into the file} \item{labels}{a logical value indicating whether we use the frist column as labels (ACC column in cluster file)} \item{colname}{a character string indicating what kind of objects are in each row. YORF, MCLID, CLID, ACC can be used: see details. } \item{description}{a logical value indicating whether we use the second column as description (NAME column for cluster file)} \item{dec}{the character used in the file for decimal points} } \details{ Software \emph{Cluster}, made by \emph{M. Eisen} needs formatted input data like: \preformatted{ ACC NAME GWEIGHT GORDER V3 V4 V5 EWEIGHT 1 1 1 gbk01 Gene1 1 1 0.9 0.4 1.4 gbk02 Gene2 1 2 0.6 0.2 0.2 gbk03 Gene3 1 3 1.6 1.1 0.9 gbk04 Gene4 1 4 0.4 1 1 } First field of first line (i.e "ACC") is a special field, that tells program what kind of objects are in each row. Four special values are defined with web link (when visualize with TreeView): \itemize{ \item YORF \url{http://genome-www.stanford.edu/cgi-bin/dbrun/SacchDB?find+Locus+\%22UNIQID\%22} \item MCLID \url{http://genome.rtc.riken.go.jp/cgi-bin/getseq?g+R+UNIQID} \item CLID \url{http://genome-www4.stanford.edu/cgi-bin/SMD/source/sourceRes\-ult?op\-tion=CloneID&criteria1=IMAGE:UNIQID&choice=cDNA} \item ACC \url{http://genome-www4.stanford.edu/cgi-bin/SMD/source/sourceRes\-ult?op\-tion=Number&criteria=UNIQID&choice=cDNA} } Line begining with \code{EWEIGHT} gives weights for each column (variable). Column \code{GWEIGHT} gives weights for each line (individuals). } \note{ \emph{Cluster} is a program made by \emph{M. Eisen} that performs hierarchical clustering, K-means and SOM. \emph{Cluster} is copyrighted. To get or have information about \emph{Cluster}: \url{http://rana.lbl.gov/EisenSoftware.htm} } \examples{ # Create data set.seed(1) m <- matrix(rep(1,3*24),ncol=3) m[9:16,3] <- 3 ; m[17:24,] <- 3 #create 3 groups m <- m+rnorm(24*3,0,0.5) #add noise m <- floor(10*m)/10 #just one digits r2cluster(m) } \keyword{file} \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \author{Antoine Lucas, \url{http://antoinelucas.free.fr/ctc}} \seealso{\code{\link{xcluster}}, \code{\link{r2xcluster}}, \code{\link[stats]{hclust}}} ctc/man/xcluster2r.Rd0000644000175000017500000000465214136046747014357 0ustar nileshnilesh\name{xcluster2r} \alias{xcluster2r} \title{Importing Xcluster/Cluster output} \description{Converting Xcluster/Cluster output (.gtr or .atr) to R hclust file} \usage{ xcluster2r(file,distance="euclidean",labels=FALSE,fast=FALSE,clean=FALSE, dec='.') } \arguments{ \item{file}{the path of a \emph{Xcluster/Cluster} file (.gtr or .atr)} \item{distance}{The distance measure used with \emph{Xcluster/Cluster}. This must be one of \code{"euclidean"}, \code{"pearson"} or \code{"notcenteredpearson"}. Any unambiguous substring can be given.} \item{labels}{a logical value indicating whether we use labels values (in the .cdt file) or not.} \item{fast}{a logical value indicating whether we reorganize data like R (\code{Fast=FALSE}) or we let them like \emph{Xcluster/Cluster} did} \item{clean}{a logical value indicating whether you want the true distances (\code{clean=FALSE}), or you want a clean dendrogram (see details below).} \item{dec}{the character used in the file for decimal points} } \details{ See \bold{xcluster} for more details. } \value{ An object of class \bold{hclust} which describes the tree produced by the clustering process. } \note{ \emph{Xcluster} is a C program made by \emph{Gavin Sherlock} that performs hierarchical clustering, K-means and SOM. \emph{Xcluster} is copyrighted. To get or have information about \emph{Xcluster}: \url{http://genome-www.stanford.edu/~sherlock/cluster.html} \emph{Cluster} is a program made by \emph{Michael Eisen} that performs hierarchical clustering, K-means and SOM. \emph{Cluster} is copyrighted. To get or have information about \emph{Cluster}: \url{http://rana.lbl.gov/EisenSoftware.htm} } \references{ Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. } \examples{ # Create data set.seed(1) m <- matrix(rep(1,3*24),ncol=3) m[9:16,3] <- 3 ; m[17:24,] <- 3 #create 3 groups m <- m+rnorm(24*3,0,0.5) #add noise m <- floor(10*m)/10 #just one digits r2xcluster(m) # And once you have Xcluster program: # #system('Xcluster -f xcluster.txt -e 0 -p 0 -s 0 -l 0') #h <- xcluster2r('xcluster.gtr') #plot(h,hang=-1) } \keyword{file} \author{Antoine Lucas, \url{http://mulcyber.toulouse.inra.fr/projects/amap/}} \seealso{\code{\link{xcluster}}, \code{\link{r2xcluster}}, \code{\link[stats]{hclust}}, \code{\link[amap]{hcluster}}} ctc/Changes0000644000175000017500000000205114136046747012462 0ustar nileshnilesh18/12/2006 * add references to man pages. 09/11/2005 1.5.1 * new function hclust2treeview 12/07/2005 * a demo and a vignette file 17/06/2005 * example ctc.php for a web application 27/05/2005 * new function read.eisen 08/12/2004: 1.2.8 * minor changes on doc. 16/10/2003: 1.2.5 * Bug fixed for R CMD check. (Examples using Xcluster program cannot be executed). 05/09/2003: 1.2.4 * New release only for Windows. (Just 1.2.3 correctly compiled). 22/07/2003: 1.2.3 * bug fixed with option dec=',' for r2gtr, r2cdt, r2cluster * option colname="ACC" with r2cluster 06/02/2003: 1.2.2 * Major bug fixed on function r2cdt * 2 more parameters on function r2cdt * Bug fixed on function r2gtr 15/01/2003: 1.2.1 * Bug fixed on functions r2gtr and r2cluster * Add links on help files. 22/11/2002: 1.2 * 3 new functions: r2gtr, r2atr, r2cdt * Option dec='.' for functions r2cluster, xcluster2r. 12/11/2002: 1.1-1 * Option description=Boolean in r2xcluster and r2cluster * Fixed some minor bugs (_ remplaced by <- for R 1.6) ctc/vignettes/0000755000175000017500000000000014136067410013167 5ustar nileshnileshctc/vignettes/ctc.Rnw0000644000175000017500000000732114136046747014445 0ustar nileshnilesh% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- % building this document: (in R) Sweave ("ctc.Rnw") \documentclass[a4paper]{article} \title{Ctc Package} \author{Antoine Lucas} \SweaveOpts{echo=FALSE} %\usepackage{a4wide} %\VignetteIndexEntry{Introduction to ctc} %\VignettePackage{ctc} \usepackage{url} \begin{document} \maketitle \tableofcontents \section{Overview} {\tt Ctc} package provides several functions for conversion. Specially to export and import data from Xcluster\footnote{\url{http://genome-www.stanford.edu/~sherlock/cluster.html}} or Cluster\footnote{http://rana.lbl.gov/EisenSoftware.htm} software (very used for Gene's expression analysis), and to export clusters to TreeView or Freeview visualization software. \section{Aim} \begin{itemize} \item To explore clusters made by Xcluster and Cluster . \item To cluster data with Xcluster (it requires very low memory usage) and analyze the results with R. Warning: results are not exactly the same as hclust results with R. \end{itemize} \section{Usage} Standard way of building a hierarchical clustering with R is with this command: %<>= <>= data(USArrests) h = hclust(dist(USArrests)) plot(h) @ Or for the ``heatmap'': <>= heatmap(as.matrix(USArrests)) @ \subsection{Building hierarchical clustering with another software} We made these tools \begin{description} \item[r2xcluster] Write data table to Xcluster file format <>= library(ctc) r2xcluster(USArrests,file='USArrests_xcluster.txt') @ \item[r2cluster] Write data table to Cluster file format <>= r2cluster(USArrests,file='USArrests_xcluster.txt') @ \item[xcluster] Hierarchical clustering (need Xcluster tool by Gavin Sherlock) \begin{verbatim} > h.xcl=xcluster(USArrests) > plot(h.xcl) \end{verbatim} It is roughtly the same as \begin{verbatim} > r2xcluster(USArrests,file='USArrests_xcluster.txt') > system('Xcluster -f USArrests_xcluster.txt -e 0 -p 0 -s 0 -l 0') > h.xcl=xcluster2r('USArrests_xcluster.gtr',labels=TRUE) \end{verbatim} \item[xcluster2r] Importing Xcluster/Cluster output \end{description} \subsection{Using other visualization softwares} We now consider that we have an object of the type produced by 'hclust' (or a hierarchical cluster imported with previous functions) like: <>= hr = hclust(dist(USArrests)) hc = hclust(dist(t(USArrests))) @ \begin{description} \item[hc2Newick] Export hclust objects to Newick format files <>= write(hc2Newick(hr),file='hclust.newick') @ \item[r2gtr,r2atr,r2cdt] Export hclust objects to Freeview or Treeview visualization softwares <>= r2atr(hc,file="cluster.atr") r2gtr(hr,file="cluster.gtr") r2cdt(hr,hc,USArrests ,file="cluster.cdt") @ \item[hclust2treeview] Clustering and Export hclust objects to Freeview or Treeview visualization softwares <>= hclust2treeview(USArrests,file="cluster.cdt") @ \end{description} \section{See Also} Theses examples can be tested with command {\tt demo(ctc)}.\\ \noindent All functions has got man pages, try {\tt help.start()}.\\ \noindent Ctc aims to interact with other softwares, some of them: \begin{description} \item[xcluster] made by Gavin Scherlock, http://genome-www.stanford.edu/\~\/sherlock/cluster.html \item[Cluster, Treeview] made by Michael Eisen, http://rana.lbl.gov/EisenSoftware.htm \item[Freeview] made by Marco Kavcic and Blaz Zupan, http://magix.fri.uni-lj.si/freeview \end{description} \noindent If you want to cite amap or ctc in a publication, use~: Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. \end{document} ctc/build/0000755000175000017500000000000014136067410012256 5ustar nileshnileshctc/build/vignette.rds0000644000175000017500000000031214136067410014611 0ustar nileshnileshb```b`add`b2 1# 'fO.I +G+)O)M.S(W*æ % Ml ba DX%Z]?4-ީE0=(jؠjX2sRad9.nP&c0Gq?gQ~`nݣ9JI,IK+~Ũctc/R/0000755000175000017500000000000014136046747011372 5ustar nileshnileshctc/R/xcluster2r.R0000644000175000017500000001250514136046747013635 0ustar nileshnileshxcluster2r <- function(file,distance="euclidean",labels=FALSE,fast=FALSE,clean=FALSE,dec="."){ #------------------------------------------------------- # # Created : 26/11/01 # Last Modified : Time-stamp: <2002-11-22 11:48:29 lucas> # # Description : Read Xcluster output (Xcluster make # Hierarchical cluster analysis) to # analyse and plot the result. # Author : Antoine Lucas # lucas@toulouse.inra.fr # See Also : plot.hclust (library mva) # # Xcluster : Xcluster is a C program that performs # hierarchical clustering, K-means and # SOM. # Xcluster is copyrighted. # To get or have information on Xcluster: # # http://genome-www.stanford.edu/~sherlock/cluster.html # # Licence : GPL (xcluster2r, not Xcluster) # # #------------------------------------------------------- # # # Example: # source('xcluster2r.R') # h <- xcluster2r('data.gtr') # library(mva) # plot(h,hang=-1) # # #------------------------------ # Determin if it is a .gtr or # .atr file #------------------------------ ext <- substr(file,nchar(file)-2,nchar(file)-2) if( (ext=='a') || (ext=='A') ) { premierelettre <- 'A' atr <- TRUE } else { premierelettre <- 'G' atr <- FALSE } #------------------------------ # reading file #------------------------------ if(atr){ premierelettre <- 'A' } else { premierelettre <- 'G' } data <- read.table(file,sep='\t',dec=dec) data1 <- as.character(data[,2]) i1 <- (substr(data1,1,1)==premierelettre)*(-1) #si i1 -1 => Gene, #Si i1 0 => Cluster data1 <- as.integer(substr(data1,5,nchar(data1)-1)) data1 <- data1*i1+i1+data1*(1+i1) data2 <- as.character(data[,3]) i2 <- (substr(data2,1,1)==premierelettre)*(-1) data2 <- as.integer(substr(data2,5,nchar(data2)-1)) data2 <- data2*i2+i2+data2*(1+i2) if(substr(distance,1,1)=="e") { Hheight <- 2 / (data[,4] +1 ) #Distance = Euclidean } else{ Hheight <- 1-data[,4] #Distance = pearson (centered or not) } rm(data) #---------------------------------------------------- # Giving ordered distances #---------------------------------------------------- if(clean){ Hheight <- cummax(Hheight) } #---------------------------------------------------- # Reorganizing data (Not essential, # but gives the same look as R) # Fast=T skip this part #---------------------------------------------------- if(!fast){ for(i in 1:length(data1)){ if(abs(data1[i])>abs(data2[i])){ tmp <- data2[i] data2[i] <- data1[i] data1[i] <- tmp} if(data1[i]>0 && data2[i]<0) { tmp2 <- data2[i] data2[i] <- data1[i] data1[i] <- tmp2 } } } #---------------------------------------------------- # Order the clusters #---------------------------------------------------- liste <- list("1"=c(data1[1],data2[1])) for(i in 2:length(data1)){ if(data1[i]<0 && data2[i]<0){ liste[[as.character(i)]] <- c(data1[i],data2[i]) } if(data1[i]>0 && data2[i]<0) { tmp <- as.character(data1[i]) liste[[as.character(i)]] <- c(data2[i],liste[[tmp]]) liste[[tmp]] <- c() } if(data1[i]<0 && data2[i]>0) { tmp <- as.character(data2[i]) liste[[as.character(i)]] <- c(data1[i],liste[[tmp]]) liste[[tmp]] <- c() } if(data1[i]>0 && data2[i]>0) { tmp1 <- as.character(data1[i]) tmp2 <- as.character(data2[i]) if(data1[i]<=data2[i]) { liste[[as.character(i)]] <- c(liste[[tmp1]],liste[[tmp2]]) } else { liste[[as.character(i)]] <- c(liste[[tmp2]],liste[[tmp1]]) } liste[[tmp1]] <- c() liste[[tmp2]] <- c() } } #-------------------------------- # Giving the outputs #-------------------------------- Hmerge <- cbind(as.integer(data1),as.integer(data2)) Horder <- -liste[[as.character(length(data2))]] Hlabels <- as.character(1:(length(data2)+1)) Hmethod <- "average" #Hdist.method <- "Pearson" #Hcall <- "Xcluster" #-------------------------------- # Getting labels on .cdt file #-------------------------------- if(labels){ if(atr) { filetxt <- paste(substr(file,0,nchar(file)-4),'.txt',sep='') data <- read.table(filetxt,nrows=1,sep='\t',dec=dec) Hlabels <- as.character(t(data[4:length(data)])) } else { filecdt <- paste(substr(file,0,nchar(file)-4),'.cdt',sep='') data <- read.table(filecdt,skip=1,sep='\t',dec=dec) data1 <- as.character(data[,1]) data1 <- as.integer(substr(data1,5,nchar(data1)-1)) data2 <- as.character(data[,2]) Hlabels[data1+1] <- data2 } } tree <- list(merge=Hmerge,height=Hheight,order=Horder,labels=Hlabels,method=Hmethod) class(tree) <- "hclust" tree } ctc/R/r2xcluster.R0000644000175000017500000000403114136046747013630 0ustar nileshnileshr2xcluster <- function(data,labels=FALSE,description=FALSE,file="xcluster.txt"){ #------------------------------------------------------- # # Created : 10/12/01 # Last Modified : Time-stamp: <2002-11-12 13:17:15 lucas> # # Description : Write to Xcluster file format (Xcluster make # Hierarchical cluster analysis) # Author : Antoine Lucas # lucas@toulouse.inra.fr # See Also : xcluster2r # # Xcluster : Xcluster is a C program that performs # hierarchical clustering, K-means and # SOM. # Xcluster is copyrighted. # To get or have information on Xcluster: # # http://genome-www.stanford.edu/~sherlock/cluster.html # # Licence : GPL (r2xcluster, not Xcluster) # #------------------------------------------------------- # # # Example: # source('r2xcluster.R') # r2xcluster(data) # system('Xcluster -f xcluster.txt') # h <- xcluster2r('xcluster.gtr') # library(mva) # plot(h,hang=-1) # #------------------------------------------------------- data <- as.data.frame(cbind(1,data)) # If the name column does not exist -> creation # of this column else: put column name on # first place. if(!description){ if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,2]),data) } } else{ data <- cbind(as.factor(data[,3]),data[,-3]) } if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,3]),data[,-3]) } levels(data[,1]) <- c(levels(data[,1]),"1","NAME","EWEIGHT") levels(data[,2]) <- c(levels(data[,2]),"1","DESCRIPTION") data <- rbind(1,data) nom <- c("NAME","DESCRIPTION","GWEIGHT",names(data)[-c(1,2,3)]) data <- rbind(nom,data) data[2,1] <- "EWEIGHT" # NA will be replaced by "" in the file #data[2:length(data[,1]),2] <- NA data[2,2:3] <- NA # Write file write.table(data,file,sep='\t',row.names = FALSE,col.names = FALSE,na="",quote=FALSE) } ctc/R/r2cdt.R0000644000175000017500000000444514136046747012542 0ustar nileshnileshr2cdt <- function(hr,hc,data,labels=FALSE,description=FALSE,file="cluster.cdt",dec="."){ #------------------------------------------------------- # # Created : 20/11/02 # Last Modified : Time-stamp: <2003-07-22 16:52:28 lucas> # # Description : Write data object to cdt # file (Xcluster or Cluster output). # Should be use with r2gtr # Visualisation of cluster can be # done with tools like treeview # # Author : Antoine Lucas # lucas@toulouse.inra.fr # # Licence : GPL (r2xcluster, not Xcluster) # #------------------------------------------------------- # # n <- dim(data)[1] # Add GWEIGHT column data <- as.data.frame(cbind(1,data)) # If the name column does not exist -> creation # of this column else: put column name on # first place. (column NAME in the file) if(!description){ if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,2]),data) } } else{ data <- cbind(as.factor(data[,3]),data[,-3]) } # column YORF in the file if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,3]),data[,-3]) } # add GID column GID <- paste ('GENE',0:(n-1),'X',sep='') data <- cbind(as.factor(GID),data) # Put data in right order data <- data [hr$order,] m <- dim(data)[2] data[,5:m] <- data[,5:m][hc$order] colnames(data)[5:m] <- colnames(data)[5:m][hc$order] # Round data data[,5:m] <- signif(data[,5:m], digits = 4) levels(data[,1]) <- c(levels(data[,1]),"1","GID","AID","EWEIGHT") levels(data[,2]) <- c(levels(data[,2]),"1","UNIQID") levels(data[,3]) <- c(levels(data[,3]),"1","NAME") data <- rbind(1,data) nom <- c("GID","UNIQID","NAME","GWEIGHT",names(data)[-c(1,2,3,4)]) names(data) <- nom data[1,1] <- "EWEIGHT" data <- rbind(c("AID",NA,NA,NA,paste('ARRY',hc$order-1,'X',sep='')),data) # NA will be replaced by "" in the file # data[2:length(data[,1]),2] <- NA data[2,2:4] <- NA # Write file if(dec==',') { data<-apply(data,2,function(u){chartr(".",",",u)}) data[data=="NA"]<-NA } write.table(data,file = file,sep = '\t',row.names = FALSE,col.names = TRUE,na="",quote=FALSE) } ctc/R/zzz.R0000755000175000017500000000023014136046747012350 0ustar nileshnilesh.noGenerics <- TRUE .conflicts.OK <- TRUE .onLoad <- .First.lib <- function(lib, pkg) { if("amap" %in% .packages(all=TRUE)) require("amap") } ctc/R/hc2Newick.R0000644000175000017500000000166414136046747013341 0ustar nileshnileshhc2Newick <- function(hc, flat=TRUE) { dist <- 0 if (is.null(hc$labels)) labels <- seq(along=hc$order) else labels <- hc$labels putparenthesis <- function(i) { ## recursive function ## i: index of row in hc$merge j <- hc$merge[i, 1] k <- hc$merge[i, 2] if (j < 0) { left <- labels[-j] if (k > 0) dist <- hc$height[i] - hc$height[k] else dist <- hc$height[i] } else { left <- putparenthesis(j) } if (k < 0) { right <- labels[-k] if (j > 0) dist <- hc$height[i] - hc$height[j] else dist <- hc$height[i] } else { right <- putparenthesis(k) } if (flat) return(paste("(", left, ":", dist/2, ",", right, ":", dist/2, ")", sep="")) else return(list(left=left, right=right, dist=dist)) } n <- putparenthesis(nrow(hc$merge)) if (flat) n <- paste(n, ";", sep="") return(n) } ctc/R/xcluster.R0000644000175000017500000000626114136046747013373 0ustar nileshnileshxcluster <- function(data,distance="euclidean",clean=FALSE,tmp.in="tmp.txt",tmp.out="tmp.gtr"){ #------------------------------------------------------- # # Created : 10/12/01 # Last Modified : Time-stamp: <2002-11-12 09:48:10 lucas> # # Description : Execute Xcluster (Xcluster make # Hierarchical cluster analysis) # Author : Antoine Lucas # lucas@toulouse.inra.fr # See Also : xcluster2r # # Xcluster : Xcluster is a C program that performs # hierarchical clustering, K-means and # SOM. # Xcluster is copyrighted. # To get or have information on Xcluster: # # http://genome-www.stanford.edu/~sherlock/cluster.html # # Licence : GPL (r2xcluster, not Xcluster) # # #------------------------------------------------------- # Xcluster flags #------------------------------------------------------- # # -g 0|1|2 ; 0 indicates no gene clustering, 1 indicates non-centered metric, 2 indicates centered metric when clustering genes. 2 is default. # -e 0|1|2 ; 0 indicates no experiment clustering, see above for 1 and 2. 0 is the default. # -p 0|1 ; whether to use pearson correlation (1), or Euclidean distance (0). 1 is the default. # -s 0|1 ; whether to make a SOM (1). 0 is the default. # -x specify x dimension of SOM # -y specify y dimension of SOM # -r 0|1 ; whether to seed the random number generator with the time when making a SOM. 1 is the default. # -k num ; how many k-means clusters to make. num is an integer, greater than 1, and preferably less than a gazillion. # -l 0|1 ; whether to log transform the data. # -u string ; a unique identifier by which to name the output files, instead of basing their names on the input file. eg -u 888 will generate 888.cdt as an output file. #------------------------------------------------------- # # # Example: # source('r2xcluster.R') # system('Xcluster -f xcluster.txt') # h <- xcluster2r('xcluster.gtr') # library(mva) # plot(h,hang=-1) # #------------------------------------------------------- r2xcluster(data,file=tmp.in) #------------------------------------- # CASE DISTANCE=EUCLIDEAN #------------------------------------- if(substr(distance,1,1)=="e") { script <- paste ("Xcluster -f",tmp.in," -e 0 -p 0 -s 0 -l 0") system(script) tree <- xcluster2r(file=tmp.out,distance="euclidean",labels=TRUE,fast= TRUE,clean=clean) } #------------------------------------- # CASE DISTANCE=PEARSON #------------------------------------- if(substr(distance,1,1)=="p") { script <- paste ("Xcluster -f",tmp.in,"-g 2 -e 0 -p 1 -s 0 -l 0") system(script) tree <- xcluster2r(file=tmp.out,distance="pearson",labels=TRUE,fast= TRUE,clean=clean) } #------------------------------------- # CASE DISTANCE=NONCENTEREDPEARSON #------------------------------------- if(substr(distance,1,1)=="n") { script <- paste ("Xcluster -f",tmp.in,"-g 1 -e 0 -p 1 -s 0 -l 0") system(script) tree <- xcluster2r(file=tmp.out,distance="pearson",labels=TRUE,fast= TRUE,clean=clean) } script <- paste ("rm ",substr(tmp.in,0,nchar(tmp.in)-3),"*",sep='') system(script) tree } ctc/R/read.eisen.R0000644000175000017500000000167614136046747013544 0ustar nileshnileshread.eisen <- function(file,sep="\t",dec=".",format.check=TRUE) { f<-read.table(file=file,header=TRUE,sep=sep,dec=dec) rownames(f)<-f[,1] if (format.check & colnames(f)[1] %in% c("UNIQID","YORF","MCLID","CLID","ACC")) { stop(paste("This is not a proper Eisen-formatted file ('",file,"').",sep="")) } if ("NAME"==colnames(f)[2]) { colstart<-3 } else { colstart<-2 } if (""==rownames(f)[1]) { rowstart<-2 } else { rowstart<-1 } r<-f[rowstart:nrow(f),colstart:ncol(f)] if (2==rowstart) { attr(r,"second.row")<-f[1,colstart:ncol(f)] } else { attr(r,"second.row")<-NULL } if (3==colstart) { attr(r,"NAME")<-f[rowstart:nrow(f),2] } else { attr(r,"NAME")<-NULL } return(r) } ctc/R/r2gtr.R0000644000175000017500000000555114136046747012563 0ustar nileshnileshr2gtr <- function(hr,file="cluster.gtr",distance=hr$dist.method,dec=".", digits=5) { #------------------------------------------------------- # # Created : 20/11/02 # Last Modified : Time-stamp: <2005-04-05 16:06:45 lucas> # # Description : Write hclust object to gtr atr # files (Xcluster or Cluster output). # Visualisation of cluster can be # done with tools like treeview # Author : Antoine Lucas # lucas@toulouse.inra.fr # See Also : plot.hclust (library mva) # # Licence : GPL #------------------------------------------------------- height <- hr$height if(substr(distance,1,1)=="p") { height <- 1 - height } else { height <- height +1 height <- height[1] / height # height <- (( 2 / height ) -1 ) / (( 2 / height[1] ) -1) } height <- signif(height, digits = digits) n <- length(height) node <- 1:n node <- paste ('NODE',node,'X',sep='') merge1 <- hr$merge[,1] merge11 <- paste ('NODE',merge1,'X',sep='') merge12 <- paste ('GENE',-1-merge1,'X',sep='') merge1[hr$merge[,1]>0] <- merge11[hr$merge[,1]>0] merge1[hr$merge[,1]<0] <- merge12[hr$merge[,1]<0] merge2 <- hr$merge[,2] merge11 <- paste ('NODE',merge2,'X',sep='') merge12 <- paste ('GENE',-1-merge2,'X',sep='') merge2[hr$merge[,2]>0] <- merge11[hr$merge[,2]>0] merge2[hr$merge[,2]<0] <- merge12[hr$merge[,2]<0] data <- data.frame(cbind(node,merge1,merge2)) data <- cbind(data,height) write.table(data,file=file,row.name=FALSE,col.names=FALSE,quote=FALSE,sep='\t',dec=dec) } #----------------------------------- # Cosmetic modifications for r2atr #----------------------------------- r2atr <- function(hc,file="cluster.atr",distance=hc$dist.method,dec=".", digits=5) { height <- hc$height if(substr(distance,1,1)=="p") { height <- 1 - height } else { height <- height +1 height <- height[1] / height } height <- signif(height, digits = digits) n <- length(height) node <- 1:n node <- paste ('NODE',node,'X',sep='') merge1 <- hc$merge[,1] merge11 <- paste ('NODE',merge1,'X',sep='') merge12 <- paste ('ARRY',-1-merge1,'X',sep='') merge1[hc$merge[,1]>0] <- merge11[hc$merge[,1]>0] merge1[hc$merge[,1]<0] <- merge12[hc$merge[,1]<0] merge2 <- hc$merge[,2] merge11 <- paste ('NODE',merge2,'X',sep='') merge12 <- paste ('ARRY',-1-merge2,'X',sep='') merge2[hc$merge[,2]>0] <- merge11[hc$merge[,2]>0] merge2[hc$merge[,2]<0] <- merge12[hc$merge[,2]<0] data <- data.frame(cbind(node,merge1,merge2)) data <- cbind(data,height) if(dec==',') { data<-apply(data,2,function(u){chartr(".",",",u)}) data[data=="NA"]<-NA } write.table(data,file=file,row.name=FALSE,col.names=FALSE,quote=FALSE,sep='\t') } ctc/R/hclust2treeview.R0000644000175000017500000000147214136046747014660 0ustar nileshnileshhclust2treeview <- function(x,file="cluster.cdt",method = "euclidean", link = "complete",keep.hclust=FALSE) { if("amap" %in% .packages(all=TRUE)) { hr <- hcluster (x,method =method, link=link) hc <- hcluster (t(x),method =method, link=link) } else { hr <- hclust(dist(x,method =method), method=link) hc <- hclust(dist(t(x),method =method), method=link) } basefile = strsplit(file,"\\.")[[1]] if(length(basefile>1)) basefile = paste(basefile[-length(basefile)],collapse=".") r2atr(hc,file=paste(basefile,".atr",sep="")) r2gtr(hr,file=paste(basefile,".gtr",sep="")) r2cdt(hr,hc,x ,file=paste(basefile,".cdt",sep="")) if(keep.hclust) return(list(hr,hc)) else return(1) } ctc/R/r2cluster.R0000644000175000017500000000404114136046747013441 0ustar nileshnileshr2cluster <- function(data,labels=FALSE,colname="ACC",description=FALSE,file="cluster.txt",dec='.'){ #------------------------------------------------------- # # Created : 05/07/02 # Last Modified : Time-stamp: <2003-07-22 16:53:00 lucas> # # Description : Write to Cluster file format (Cluster make # Hierarchical cluster analysis) # Author : Antoine Lucas # lucas@toulouse.inra.fr # See Also : r2xcluster # # Xcluster : Cluster is a program that performs # hierarchical clustering, K-means and # SOM. # Cluster is copyrighted. # To get or have information on Cluster: # # http://rana.lbl.gov/EisenSoftware.htm # # Licence : GPL # # #------------------------------------------------------- # # # Example: # source('r2cluster.R') # r2cluster(data) # #------------------------------------------------------- n <- length(data[,1]) data <- as.data.frame(cbind(1,1:n,data)) # If the name column does not exist -> creation # of this column, else: put column name on # first place. if(!description){ if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,3]),data) } } else{ data <- cbind(as.factor(data[,4]),data[,-4]) } if(!labels){ data <- cbind(row.names(data),data) } else{ data <- cbind(as.factor(data[,4]),data[,-4]) } levels(data[,1]) <- c(levels(data[,1]),"1",colname,"EWEIGHT") levels(data[,2]) <- c(levels(data[,2]),"1","NAME","EWEIGHT") data <- rbind(1,data) nom <- c(colname,"NAME","GWEIGHT","GORDER",names(data)[-c(1,2,3,4)]) names(data) <- nom data[1,1] <- "EWEIGHT" data[1,2:4] <- NA # NA will be replaced by "" in the file #data[2:length(data[,1]),2] <- NA #data[2,3] <- NA # Write file if(dec==',') { data<-apply(data,2,function(u){chartr(".",",",u)}) data[data=="NA"]<-NA } write.table(data,file,sep='\t',row.names = FALSE,col.names = TRUE,na="",quote=FALSE) } ctc/inst/0000755000175000017500000000000014136067410012134 5ustar nileshnileshctc/inst/doc/0000755000175000017500000000000014136067410012701 5ustar nileshnileshctc/inst/doc/ctc.Rnw0000644000175000017500000000732114136046747014157 0ustar nileshnilesh% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- % building this document: (in R) Sweave ("ctc.Rnw") \documentclass[a4paper]{article} \title{Ctc Package} \author{Antoine Lucas} \SweaveOpts{echo=FALSE} %\usepackage{a4wide} %\VignetteIndexEntry{Introduction to ctc} %\VignettePackage{ctc} \usepackage{url} \begin{document} \maketitle \tableofcontents \section{Overview} {\tt Ctc} package provides several functions for conversion. Specially to export and import data from Xcluster\footnote{\url{http://genome-www.stanford.edu/~sherlock/cluster.html}} or Cluster\footnote{http://rana.lbl.gov/EisenSoftware.htm} software (very used for Gene's expression analysis), and to export clusters to TreeView or Freeview visualization software. \section{Aim} \begin{itemize} \item To explore clusters made by Xcluster and Cluster . \item To cluster data with Xcluster (it requires very low memory usage) and analyze the results with R. Warning: results are not exactly the same as hclust results with R. \end{itemize} \section{Usage} Standard way of building a hierarchical clustering with R is with this command: %<>= <>= data(USArrests) h = hclust(dist(USArrests)) plot(h) @ Or for the ``heatmap'': <>= heatmap(as.matrix(USArrests)) @ \subsection{Building hierarchical clustering with another software} We made these tools \begin{description} \item[r2xcluster] Write data table to Xcluster file format <>= library(ctc) r2xcluster(USArrests,file='USArrests_xcluster.txt') @ \item[r2cluster] Write data table to Cluster file format <>= r2cluster(USArrests,file='USArrests_xcluster.txt') @ \item[xcluster] Hierarchical clustering (need Xcluster tool by Gavin Sherlock) \begin{verbatim} > h.xcl=xcluster(USArrests) > plot(h.xcl) \end{verbatim} It is roughtly the same as \begin{verbatim} > r2xcluster(USArrests,file='USArrests_xcluster.txt') > system('Xcluster -f USArrests_xcluster.txt -e 0 -p 0 -s 0 -l 0') > h.xcl=xcluster2r('USArrests_xcluster.gtr',labels=TRUE) \end{verbatim} \item[xcluster2r] Importing Xcluster/Cluster output \end{description} \subsection{Using other visualization softwares} We now consider that we have an object of the type produced by 'hclust' (or a hierarchical cluster imported with previous functions) like: <>= hr = hclust(dist(USArrests)) hc = hclust(dist(t(USArrests))) @ \begin{description} \item[hc2Newick] Export hclust objects to Newick format files <>= write(hc2Newick(hr),file='hclust.newick') @ \item[r2gtr,r2atr,r2cdt] Export hclust objects to Freeview or Treeview visualization softwares <>= r2atr(hc,file="cluster.atr") r2gtr(hr,file="cluster.gtr") r2cdt(hr,hc,USArrests ,file="cluster.cdt") @ \item[hclust2treeview] Clustering and Export hclust objects to Freeview or Treeview visualization softwares <>= hclust2treeview(USArrests,file="cluster.cdt") @ \end{description} \section{See Also} Theses examples can be tested with command {\tt demo(ctc)}.\\ \noindent All functions has got man pages, try {\tt help.start()}.\\ \noindent Ctc aims to interact with other softwares, some of them: \begin{description} \item[xcluster] made by Gavin Scherlock, http://genome-www.stanford.edu/\~\/sherlock/cluster.html \item[Cluster, Treeview] made by Michael Eisen, http://rana.lbl.gov/EisenSoftware.htm \item[Freeview] made by Marco Kavcic and Blaz Zupan, http://magix.fri.uni-lj.si/freeview \end{description} \noindent If you want to cite amap or ctc in a publication, use~: Antoine Lucas and Sylvain Jasson, \emph{Using amap and ctc Packages for Huge Clustering}, R News, 2006, vol 6, issue 5 pages 58-60. \end{document} ctc/inst/doc/ctc.pdf0000644000175000017500000041656114136067410014162 0ustar nileshnilesh%PDF-1.5 % 4 0 obj << /Length 1480 /Filter /FlateDecode >> stream xڥWK6WT"Z$ER I-PH@6]Wˎ{odK6Mу-㛇^_gy頌vyty+S{x>E77$'8S,3Ҵ*3()BBaYS`w $%:4(+J*|Vِ3;$!$58/ ~FJG:W6RA@nnTQbajU `/UG t|:Iue/Ȏ/ t% ]L3a~+t0ҫNMY"w|Vt4[<;) ®t56~ 3YV5޲ >,%lʦ-͜'54 hi;.JpJҼ,î^{X#^5-D9V"m-['\mAthn}{rg` (]q$qZJ$Ÿ&MrB:o ܚ1Ɓ u3ÚYEJo!gVP0=US.̏4M7%Htb,deuO^j:9`zW@Vxҙ|_SQM We9W Vy`t;ƺ ݀^?K ws/\v#9 #x(QvB h1enL$xB`mv0X)ᒼ y|Y~,.>K@BP 0=JJ9 sEF҇VE ?:FgUdzu @b d7h#BьoCCjUT-϶8u4rI]lV0ؚo0%$Dq1R˶txBUݡ+ SgI\o%Pr#N{?DSwGĶDw/k I @n;Y ̞G6"u7 *: ?H,d;Q/8͸"pzcf?a<; ~/e(ئmLh]@ƔzdZn`@$SO'DG߭ƿj/ {J*P\Ȁ,4,SZM _YY# .2igUt51fW,Q"m b5~Z ߋeO ޴L04r(4 VU<Q¬nj8kx8 1s~s%2ƯfE'uzzW>daM[b`c];-$4\vt5f50\÷4* վ` endstream endobj 20 0 obj << /Length 918 /Filter /FlateDecode >> stream xWN@}W7mJBKZRTIC/q )jAU4<;szo&3$*FSOH@yi7x_~l 9Hs 4 1KA.@꥟AA5k/.mw0I/ $'0#ZhҔ{Gs]>MNPʼn'0qFhQ.ˁ/ ݠMCnJqV:_rVt..n4T.$hſ 0u[PKǗ`mA'8ɭ%IJh7\ |P(H5@ =[hB :ikqǪH PPE,?ɖİʘ AsZpnV2j0]sPJƴW0aoVT|4gጟ5Lq˄ q @!8YE v@ld4m~!J58BAN} W.  vnBE_Xad1t6v5WX #DlLۗ=;{ ʞڮ#Lv sc Hjd?*fvjTe89f*QSl4$(jЂ_U۶Z1R*]ݸ<_` `tHHU 7 @_g endstream endobj 1 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpC9cykD/Rbuild38996171f99785/ctc/vignettes/ctc-002.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 23 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 24 0 R>> /ExtGState << >>/ColorSpace << /sRGB 25 0 R >>>> /Length 3131 /Filter /FlateDecode >> stream xv|^ Җs۱ /X3#q8ӧP s (j^6y|,S;tMv]c;џ}Ssbv2?K]~U׮`e5S74ק+?vqJA˦usV vX2Uآ۩/퇌rZsr {_Wup))TKY))Rr.zȯ4_ۥ+AXDc[ycFH FsK Ѕ < Q,c13.͎ Roum"AzR֐JT!mAj3Hi3i)fGѸe]y6'ncڶw4^˼oW_ʷW0ypFn(o*[9|eP.SI-NsEYCQCY -,eSY#ZCOe=xA&=-褣$3((QT?Oeg/b=Y.=((ʚITMOeTMn:ZHOE5TCVg$ʊHTDOeMT3آ#eZV)(QYEGY1},%̈́A/QuA35M65Y35CQ35CQ3,hfVGJJTLOe$*:B&ajȚ Sh#j1eEYI}NIusZGTȪ e2V}/Z\oGVj;݆qõj+h{*k|u 𤋮DE'DK@T)öP%ۑkz;rEQoG({*k\;ѶM2>\.c`fgF 6քQ6&ÿ796`·z?ݝF0Ս9xھ6Tx>=mT1nQtӘ_o!pϰܽ =)Ii116׊t{E.{%la̰ذY~w8oL JWX P,^.c" #}} 6G2ۺMp9LwsWf03\':e̿ ǭVPoW< 8ic0}rx8ݚV6?Gڷe}{W]F_qGj0/^ ̫ߚ[_ys+A[m~4P1?4GSb%0cgXln|h|"P{}lf'Hi쫺MpDsy9c`}xMD~-k+܌f4M>`թ8ϡkhsFc ^$cQdk?`|æ@5u)]{:nB<#i4x}3l5 2ʮNffkj7hDxh驔+an%Qf} 0[CCBp4n8aGc8|@h|̃sk +9G" cu9}exo2n 8>y0Ǜ@<"O`G<_{iB "xt d_0n X_h'dLƭ_҇s4uJⱿ}ø5?Q_ q'q4CB`:׈s/^_"C'MO9Ȁ?<`ϥ8G?籿}Ǹ5P M97pn )@? HX_s@9Oh9  ? le[כzFWέ3/> >>snq4P9O' q Fέ޽po'1?ůIаץzÛYS6FKi̓#7!mE=6VbK)QüJƨ%|##zħPlVbKF%IN1"KFaf n0/KQl|V endstream endobj 27 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 30 0 obj << /Length 1640 /Filter /FlateDecode >> stream xڵXYoF~ϯV iAQ+($4E$d%yo\CFhsٙo9v_^Dk̗mxf{&\w=s0ʝ5 x*0q1Zxgy++^.k'PH~N&J#Fd'uM،6B%J@ęY4G; ppۋl_+wg($2 `|N[3#E_к'( 7e?/Ck/0@Q|F'ͮQ\ƩOXeX%F\P^-N~!` zY;C aAi!Mb@%eokuCR̼CQye[V XY>֍9@ V+ MSKfvv`X=$((;$Y-3w$KsbcoieL#^աhC:-C ʼn] t7dPB!|}ɾ*y8'L(e&>`׸x)h2~ڏ\]tFY 2qs58Ӵ$>?uYmVTfߴ%GƵt$13-DJ<-I9Xv{=@$"Ծ%{ls9_pcxA̰, %%5_h6N:tfqYQu[:5*6I!TtG+}b;[ @WMi9H~ɾ"Ѵ-uڣ}5x|?T$Zo["eWDÂV]vٞbJBdȌ{yٮA6`˓rx%WvY+ݶe* u@Uizۈ:2*{A!dXBeBNDFAxn d5>Qn'e ˆY6-Pugp ,ǝ0fp=oo9k *j]DL1QkyQ$y㸕3L}lU8LOSϓ](6`W~Ò*qΎx3Rn1kf^-/ZSCr/6:czӒ [pn߂$ϊD$8(fKR8c^1Dl-1WԹ8*aUBq g79://;/}GIfwj#y^BS:(w%~EJlYE?K~#1gOy{BqFyZ2$6{{Ѥ㕐`7%gai@)`Lߛ[^ S# y} Zg{$K -E&Da-%̶rA K'J2{TVMoB_V(OG v"ݷU|r73ooN(F&Ez (I N $Bl+OL#Ky\@GGI- endstream endobj 33 0 obj << /Length 104 /Filter /FlateDecode >> stream x313T0P04W0#S#CB.)T&9ɓK?\K(̥PRTʥ`ȥm``P73`v(PՓ+ L5* endstream endobj 37 0 obj << /Length 119 /Filter /FlateDecode >> stream x313T0P02Q02W06U05RH1*24PA#STr.'~PKW4K)YKE!P EoB@ a'W $o&| endstream endobj 45 0 obj << /Length 149 /Filter /FlateDecode >> stream x3135R0P0Bc3csCB.c46K$r9yr+p{E=}JJS ]  b<]00 @0?`d=0s@f d'n.WO@.sud endstream endobj 55 0 obj << /Length1 1890 /Length2 12078 /Length3 0 /Length 13247 /Filter /FlateDecode >> stream xڍP۲ `.w@pw !@p@pw \_>U[Tݣ$UTa13I:3Xxbr@  +"%*R#M&nf'gg q@N^ /  yF`S@H)fg6p~;>4& ß# gly;bg9{W~ gg{^ff777&#'&;GsAZ r9L 7U"%@\xXM@No. GiY=/cٿ d'ldbbgcod5AIY&gwgFNvoFF`k#7?37H( <'Ge [S1;A&om`fll3E3ق\@,,,\@r7`#=O |foE|f?^NF ߊ&D ` 6qDwtXf`?_zoejgkˬ(%&*OWщڹ9Y, \o>Fw5['c׿w,yhr]_Qoj? ouq~[95ߦV뤝@?M;IA`gf/;f )9xT@{[,m T濏53cX98FFoWF/&a3 8#`CqE!.,q! UC_4Cc ֙mf#kD&(K7k/ϕ2UVN| |m<"kI*/ѽ2s^ŅQks\A >}Vs *aHr3IsV7PQ{SK%d|?$hBҷuwu3KL\"S'hu,gf=Y+ >?7i~ED+S2I{Fm j/ <^jՄ=䮢,ȎT89zEulsr4;iZ?wnFE(' ,tX{Y:*⁐! s)zj6(]֩GGڠT(㐌Dq6ClM9,% gh{j}sg+@Q&Q]*qһpMذcqF))Yt)XQ1'OybΧrJ~,ѭ졋Mm#B9QB1'މ zT,Ve)`KMwFGsJ)3y~lu"іg{;/?D'uK':6jL"g—6{Tu;+x 0n+ oG~0;J6M|H}NZx7efآIs/†au 撄' 9ADYr6Kxl|?MuEfÙ.1)pkgV.^R<  +)ݒ@jxpE{jqSfJ:t!΃5ůu^egۃWF3w5ޫ/*&/eNd}9G*Bګ\wX4973}ׁ"}u(\J/S줨k4ynŤXTq+ h"@y;[M&8:;VKԏ3%Pʻ,Jl2NͪO@]mU>ƟJd'ay`mnҔ2[!^ ?-:m~y>hg74H6X9b(Jaؗ!Oe>k i9eV3 =:;%*v@A71Bί.n==5Rرq6J:?;_[Sjћc j.p|m1ūaW < ;+ծ9owHJo rRxwa:Hkɘ\~ ! c[B.+&?b_SS#?6"h*t&p86bi.?ᘜl}p;eߕ,McKn#] 32NfNsg=2trR chyQ8:#ow^#:|P|ӴNMKDwfP(}RѦko›$kx>fc#+ꇸZv==FѺz~@X)ާ~``a}Xs '_ZPUk} VϹl K>Z攙g!])Ew:^9J!! oK^sUH8^6\l.x-[~5*;rI!5<&Dϵn5vsEmI78F }I{dK1Ч8¹ A,j$? 49T0x<eS&?oƆa0Ƭ=TѓV_c}["X'>q4ea!畾%3?aq:[O/}EKtM|!6FЮduZ߭8#4.s!nZ#^*sܒ0_M;](faD~˩fx a(]irkYW+\0΂tfOL]\Q5/}Ҡ%mT| T)ኴ[r@TT\|A;޲x6 h;~ڼ%tߚv`<-D*kwp'+#A:lk0a4J^„wsO*(#.Y gR3̭-L"iZޡw$ʳ~RO Bt!}Vz'ݣ=^jLr`EM5&ش?(jCyĦELCꦕ;?z{`U>?L NtY  Ȁ-g)cL*5WaYT=r>L1( OCj|7*'O%z* 3MEk<wXC$U{5uESk .rdL)ȑ`%Srp@~0RUcx.I,Pa.y_{Q,Z26/Ab R sE.fYD4Q]Z\_E >8'N)dLpA4VMhyy,n ~ϧf5Vxl&5A05]bt. wscAV>B0u$yDx?(`rcv݈*¯IԔٝ3#Yږ~٪XHf8jwd.po ˖YЃV.j:өWb"Dz vֽ.)aig&7_GwIt_:BFCCaW )IOHήlѸPr5a#R)dҒG̉}\|GDRZ%y"Nb+n9K4mq+NV$DACBIms ݐ=W}omި$od:ע6ڄ́fI)VFͤA?2Վ )L[+~ס@+rv!e%ʊ\mK?%҄ )z`QgZ( nRs~_~e3EDZA4gb>\xv whHu+jR.P$/Zpo vr.)r-|TÆ Xe]8FQ9o>@'RՁ!6HT>XK/b䰊hHx+-t>gx>*rӞ;S˿ hhJ6SV) `ye|'b#:W"Cx!\55}[i0 9 ߏѦrӫ1V>7HCWQ6 ?2"7=*z;Epz*4?,O' }$TNIR~"34~G590TDߺRFZO?XZjo L"+ɦ{VcM=Zz糞XKl,y8m:{Z8p3M qlHu+U Ʀ_0PϠ) WA7鍪s5iOaݜX+HrؓEZ2H5xPR\U빍 WJZA˖3ukag7sUؾ'K_'k[s a#inGJ98wb&/Фh)>V2;JS6fe \@=^2J{!6j{yS1a^VlQHdJXBO7e4Μ4cm sNpk!t6Y"Zx;b:p{V`hB:b r>됦vZz0bl^L:xjOWXIc!/-ٲ O/0TeQ,w`qdD([6~!!Dr9R f-N^A2B蘑#+ྟ:yITh%Dtj_,YLj2 [oHplYxebe>4n!܍"e_tD AAC_Ê3qcoޥzOFz03P Ԁw!D(Z:c5.BhU8Dɇw!)u6}Fj vWvJGp/ *_6~D #mv*T#\&jCl:p:\j7dC̕#-G+8 ^ K3?v~ B;10)YJFtȦ; 5 md0cQ _m/V~!¡\3s;*SyiՆJl! qB'7vOۨT6gp?,<$e/c%RnY}G)h[ ,* IGߛ4ZyFM9J\yEXTpkd)QŪj?W@QHĆ5#(o:컊_l NH9}~Uxo|P D藞8|׬1)CWii~/lAAa}^` CY"rQ'2_ML8Iu41 jO4r,8e F~XhJv9y%wz&عp%.:[t2BFj&huY3q!Lq4,i{ə 2Ͼ+#5F(k-ڼ 6id%⚷*Qp^>4؝}񞭸N[&mӜLט4Qr5ؤOOe׸ Lm:LJ93q [&Vknh'Z}zR<O_?*k[2 g?9ǧy?-r _W;H%kK7eö́( i_S/-ó]z0;AU9u?i :_Ju =SicΰJi5M_AjDaU1k˥:T#Қ~QTkMq'a8 VdGeQ!9LZ534Z|jcJ4k:BNίn!%N- R*:丨άςm`! Jx.c`6{e|𭀿Qt#Tzz ︾9=/ŃQ>(RsMz,M7V8T$QWwc6\7C}!B*ʾu*)e]DFIeϟY64_㕩iیYK/˼/U:Ih- ͅ1Šsq0U 9ϸYт?`bl](?\DAgc7{FW-#u)[rT&' 0s+ѕ_M.de"4&O`u]cd?]!nFjF~s77}oG84].d7ڰ։]3Rz[|feӶ*{!NT>8+boF"(Eu8pq֙9+wwa ]|3* 2 Hk|䎝p4Z:殺2P~޳+ N)vKbILZp;,M>rSfu5:Tl1x_/T"R^a[cPFRá[T1ףjNWtjdKwżFY78YhrV:]ؒ5v_Kle>dcή-3d2Ӌ፴z8qt׷GȡĆ`ϹTX_jc&C f!eD[T:'9JwD'.:D6}}xz>OƇW ދ0}̇KU F(Q<@lMCF9hἤh]I˭N87`я{+XI2n&zO6$ҫTO$3|V%Z ^3uy8;DGG3&yY>mqPagfZ ߃+03RWp*q9Ƽ_2.1oowyN:&;KRDSF`&]ޗI҂4 ,Gm8*r~2:~:^S چl"8NL/['0p67!I<4w S5E&ϵ<<ط|W~KOQ%\q j(3; /ԫZgS-׿x}VNZ"UJKalex,!\p7]UZo'߉$D %yGJM$<8!G^`v"SP6 ~uV5oFMs ~)&lE݉:\5S74-rP侁7H}k0gPӝ\" IlP,~y)1{L8q"sߏnX zr1 `3&-' ̣S!j"YOϏnT# s\0j۷×0H]22n^tj̚rz:=zG'p3b uBb|.<n6a]xR\lUIC 7ӫ gUڴKOKuh/S/`$ ʆ"_~Rq@V^3hj| lbHǥ^0r}ɻچ]p=a'5Xw/O;.?[#d@Dvogf M%G_T|rkr.|9e+oNjB ގqf?vE Fut , N໱ɞ+v5_&|:y9QKD~G)lד,fV)E'Y(wL:NjwydW򋿢ě.6O9ήUFR~jSYKu.ÃÒa7{e4o$ϱnj4ZgSGmUT-;h//aK@o7uVvH?Ϗ=DS(=3"ǭJ[A/9Ϙw0!ȞW 3`Ho7P'pfA88H Yo ~T#r,~]\F%;D%uO?4 [xђWqNYجs?䡗xDƱg5oBQ_![@.!:[+v"v$Υ.!*Wڥ&irkwr slH:x#˚WBp;e(hLDQ 09eb?,2PԷ| %ş۵"y[+>w~R.LOuwб854`?Fl&dB1X2xdc: B^[Z09J6`Z?' Z[M')p3W?R ds_@V[DUs]bI+bn:Z}ް/,e'`{pz2"x#f. Hhl4w-E_]v,=$%-jYMm5*-&A߄"ָP'ˑ}HNR: !viu!|ݥO<3?|\`NT|.ze* ,<6pqhgO0˃r菟k0%x|8ez5/̊R곆$~]%>8Axȃگݴ)B"xZb"{ֽINA1h,]1Sd2eН)m|;? AA"燩YkE1lw#ݵg|MbEviХ6ޚ^g2b_)j1irݨ+.q 'oѪHMx!YsQ>̩8ƊiY{=E{/čZbé;{9\v*eӏ]:/_a.k:a!V,if\SzdH6ג톸d pKG'ToBZJ?RF21Qt!Òu+Yԓz,>P ?ѧo+ Ke:{&ߩ 4rmރs|F6tA#"׮yvY lK$juV\SInH.0lcD3Ё~|N+ai@ћ ̙+~$iA'q+iH^Ld+ZME)q!;׮N} [e 7 CጕtbSս]%Ve%TnZ~tI +D*x˓jnB޾.UqqI ۪(5!vb>^c]<i\EW#CK^5'> O͍L`cT *o¡qL̊Y{_a#LCz 5+-% w+fPsh{ش~xyU%}ӕqAv걫9HW&M_K@l)+8/+A퓲_Ƕ}sƏuAsIFE_Oe:E7o $?!wAWFCk5{ G Mp> BY}>xG U L7~"ͻfq¤Ѧ-g(Fo }6^@} Md/HѴ]4 Qr mGV(ԗ$B"lAˮKNY+R6AUVc0`;$o(C.Gl C-C9=,]Js endstream endobj 57 0 obj << /Length1 2407 /Length2 20641 /Length3 0 /Length 22031 /Filter /FlateDecode >> stream xڌPݲapwwwww N@!kpw'g'ս*2O{^rb%Uza3;ș *`bbe`bb#'Wr+#::Yفx0u;Č@3+ ?v<1cW+3<@t#pt~K??TfnnN¶@G+Sc@hjgjtT|En4►Kgu8)H G@ntÚ6D#k?lv>ѕJS,z/ϋt||RӦxGa%<}g ԰mAWOU.s{nrtxxb˦B%&xn?rKyx㪺p"~utph`6V&t#)@~ e\-l\/ FJ'Uk2~mp510'IweP^j8ΖUl|& Vnf*f5`@=MJs4%V zjJqa$*Q10R0n/Np3R3xq%CHsn$nadUv|ccIF|L%0)|- 髃gAk0uu߾  ^r&bdC&_r+1\;[DFHijquag}LUJŬr&}5%$[s8knaSds%M3nv o4iB^^>K|$Ջc ;~V0JŠ 6-˰,}0HI%9$e&#"GHD.K͢4T!DFfPHہ}8 Dž`!7 Is/g\uMIm)DB,x1V&ؓ'iJ=vC"˹Bd3g#ZЭ-n,LAO1-lQfP&;d&ݡ~꫇cbN;{~n,vkJgAiad h,:f$D3Ubq]p[U]16esCז"*)RtʪbDGAs&;vلi!(}ONZuwM8K0_) ;Zhpm op<iH:&,,Ke.G jP DONmv*Ie? cK~ÿ,ڠ9FH01L(Ճ4eY^~n\WyEҶ ?hXT2.Jy hM|] UprNVNUP11 Z$"!K۔2M߽+6C꿼RήBTSzv}Ygy5.-Pv9+Ԛ'(ᷬQ>2fBҭHԪhy~{^؀ eV= Ѱ)$DJEu+V.YOG!YzB$wj9&1Q6T6&+č{33zlXF|eܿ4 F Ns̢@H10+vyf2=qPJ rK?*GKrrIYP [ml8KC7񘅇!%2aө?:%a[8)%OTMQxڈlV˵0ؓXOk>QhðFijr(4+Euz.[ 8 g&.q)m=ypDJŽ~y,Qb+1^CD| InX;Tp6{ͧZ%IYh$"W O;wRz$Sew̉c)Ǧ wܥ,2-"ϗuN'TW%tHF$zxTȸ9)l=*p]n4#zTD TDm~7̞a/zs~-ϯ:?xw!g(PBtkVY ZjhyY:o`aA\hQخ,E/JH2\40 ^@4"6~\,+z\&i߳l[7ERq_Wp^gL{OTLCcKQ%(2?f}uo8ȉ2iGqbz& "=EUi;󔘻} ,e2CA 6TSud0AmF[{vYNpg`7uqTbźNTKϏޞbhtupv=44̴vT,ixUcˆ>*4-riDW9DβT~;WØ -Y23K._]6fD.]z|FA1)Nˉp; ]UU9??&U.R$V.~~6ؒL3joݔ6RH{j=ytqdHmjT^W{xnOѢg繟A%húv8\ؿI"YRKi.4~HKS馮Q.zzX4BQfp4>w/f/LkRM2)R%JQK UgoBq)~!6vTЎ` EKFs m/%#VoWJfJigjڧ)#\hS1{=yCŏF 'iw\.d+ .p>ݴ+3xwGHt;VW3W |iwK--{N &$eoxˠ[mI;:  iXwlu_MMj;~'቎\4#|RvFA8/JNٸ4On"W]lnX 5c--7zO #?yJ|m.WT*aZmIA) MgWHڶrݞ?.lxF.wBʏ0fjS 9N3=&rP u?MguvB!xX]aX}z sG9լz uJf y!Ux^F$ F4rMP =B jɻsOV~ : 6=}Ř}V(V01]jm_ ʴ#\(Rm85ފR+=׍XZ>@ 1`q&ŢX*u47m"ՠsAhW~|p[;)pDݗ" \\!I%,u][Z*<$}GZB- $42KHڄU0{PK {2e;a?Z`PQr8\kTqմQ>.aW% 92Ӑt(|_7`l,q~7xn^3HY'?/$`Mͧii%&:;\?NjnB(u S؃7~H΋W 'j"Qn@}}5$M>P"JLs*>'Sf(6F^Z/7:ļgQ|=I'pX q*@4N&ݮnθ:bJ4pjN ѫqA5cyS]WZ+L|-뚳mlMb K T& An>ta: WU*P:Ϯ3I=y vh, _4OZuAB8Rvox5 !f i|0H1`NY=]$!G򃯕֊ſq!>?QWYc8LY4U-cYw/HouCo$V)}\x:yԪضu FϞ³~7k{I[IXizt =n<ї&Q1Q3"E'K {Q3Act4ZU>N-wK7հ -"!w:GftSo]20)셁^!|q.ۣl@XѭYWB+l&-gGo @yOeå Ǚ[,PV.ԃٳ}|rDe~\JX{KsFbU\>fN?u@,2T0sr>妝_;#GI &`Fս@>Jǘj *E᷊vϚ f}BĻsI{Xˢ #-P;h9CcR"&SLpDQ)&%Z1:-{=EXAFF,u1E)a{_^.N쒸=NMf̡ڹPڨPRӦ ꐮH}:mٻcM4`*CHK=#WR<qJx +!Cϔ}쥹RA")v߸\n /jh4,a''ka8Hy+='fY[8^-7^ɲ8l9HU4 \'+hkL6?))zrxeX39 B? x;rDz-Mvcξ k՛<}O]V:֞VԂ'_,y5^2ӮY+y' tg%DG&W]!D]H?\T38>Px`x,{Ą1Jf#-]QՇCHPXbRsbSyk붼qː_O~{Nϋh_i |B+|^bľOEfw o`_ĴvYѪ+ȿfw?bn#:wS76`۟hvh"_Oz\9IHym!.!)x je[ /@Sz5z'EhxPp1R:rWU?$;KAFL5yF$3؇B"'Kn+8eֵPl;UA/Oy%6(a,/KP/9Ү,,\t} Gn6qU Edm'ԈeӐvرo?(>_G86[__pm+K0+[}6ívjub=]It4+wwjWqw1CKU{+b՘cz{Wag,MgQ$ϥ'7a/ i]|)a?GW)О6t@\ s' (!;͘f3Xd:: A]~tyHHdz@5]J{J|Q9o#,&)nxto3Fb8gB; Z̫7W (9.\uT9E֓<zbuVA\ޟ"cy=6`gb?!r(h*uߌ˅0 Za^zmwkX4r>;$Fa/8'9GH׋VSa2Cb$QMDN\|,K-. k+U{\5~frp/ɟP2dCCDOS gn̑si3,H]'c |@@㛆.DXpUysp!Ji0937ov<;,#H6 1Y^ e!X}?{& _5wt(\__4r4VY +.H+)30~Qa)6(VLV?Wjd¼(@/$IX c,R,*0U7 L&I[KGiBtuAKm|~;.K~+LZ,ڹy@Nّ\t[5\ 뜯vgz)7e}v֌ZA_Crmu /Ny=eS)V x+aٜ.w.3'CpYQg)G'MYpƊw.)cl B?&*? ͥJ}|Y i,T_Ri\{?L{LDcYcX!Vzq\;X)> kvWsxƷ rRUIS]k؏b%ؚ/ycr03pO`M:>V>khailjJ{Cf@S%X_kYŁ,H0S |.V#arS)!ٟ&Ջn*ۤ-u\xאH_`HM*IWزaeލCf]tbw$Y{~]X;  o\#M$kr>Q=t V#C/l3n% ؙbcg[Տ5H{cHc{H7:ژ3i4Aly<NfW˜U;Ud}%hFlb,xOLM܋pJ2qOX=ΠKsKb B<,S50er@46\FHiWC DrԦJl1ɵF*_ufE>}A} {Q'5{:z +E%%Sy(zt8fȉ~* Coܠ$@R|C-Tbt#I'eG!7Ǻz`0<}ŲW9K\+Ѥ\ `R(R=/g =}:imA:lDN Gg# `ljXe'!{ps<7cuY,FRĮ*9WSiMmN郊~ht5:^Yw?-wDT#Mζ-w./kiԍ4bR~N TE/E1{'%|u.WtS{&ь Vl5\i?,Lo z#!)Lc:` ؔbwA: vm[m. tUCfڤ Κ*=3YHTpn$x:rigq g:VP(+"!Z2d,B h2VwgAfOjNݬ3ܢ  C\:PG4mҶLtNgN26Tw!o {xRi ЍPҎtgLf4Ƥ8X@?E[Yj?z$#:= ׄgµ:MiTy6G+uX~#^ Daq:.:|')U͘v|uΆ8uy4!Y ֏7 |1ԓ %}=(Ž>C*P3ا<93T_`|sdH73>IG#Mc\tk6fLӣ4Zv)% V2íz_r3IzZ-=UTgռJ*iT^ŗjӑigIJs9,bT;#M0`[v'y,TXzh+zf zTURlW 0ds7QE!e0;>FZd㐕<0MuВ+ms >PGXT+k.$@X(̋M3Su|4Ώ3"W0Y< &gHg% ,-U3,XD}0I3Mqc_6sۿ_\S&u>h+rcLڵk~ $u 94F$H?=&~@jgF}u@ID?OkgQĎ*P J֭&jg3OjݼTo:OHŢLOhҵо9A^2w.>I~:GlipyvWL*/9bHdN,hp:9W|q( C5!]}de2u8^^mws{#W0g:Yu}"LSn6l\\nJ}xuQ;>T|gxVg`Hp[k|"b؝?H(ḳ@G_adX|.NVcOuzZ)iz'UkeBQs4d5ɽoٞ=A 8<7o?U|\& lCUJĈVy>R+ڃa123z([R=,xְ=!MGUX6쎶9橹[E&YfG:ǁ]y:0k*HS "n󺪹2>2~l9S| /ؼJ-MWKԒ*WNJY-Q`H_ZMtʎӌ*1]lMgnY|=6rO^+̍).!^|D,(wo3B͵>L.xkI\ 9"2`~1 9 a?eCha0)PZV'-M '7^N)봋/+"6{_32-e(;zG\d5UK륒>D;K|6tEA{_ϵɓ\"S҉O0*QSM|TO4(̚Q3NMLs@ X6m-^hZ#Мb*V>MYX 68,:? ;7Ƕֆ~{>ArPa=%s"m7hM_6t'@Dz#ʆ3JNO~=m.^BfF[ v?֘~|n龀,`Fcto4xtOԼQ sT'xO&q (]#mL4|f{j(J})Rnڜp;f˗pxJ1a-XF~ vj&K~| Q;)BhFfn,9*޶L^[0`_(~EޑkFź3T׫0UK>t03iR$}=(Jlz|N=Gn4wI<^0_DĘΌht>G$lj/Wce:wrt'H||ʾQ,V}hAX+GoBG+GFyM~m8ɧh[]Z2X"ZG-BhGuҴƾwgø !q=y Խ[h eCoPYi:m ՚z'N!=ŵϛ^Rsť~GBfgl9JO;.QIxNDYOT= u+,&mIjtf ᠥjH(%\G"n2>57o엻1;պp$*Ɗ0<˻ SUa$jX/f%i^".c}e!ZtGjx@¶tǂKujzVw |;r`-*4qlӴuY1dd:p2d W5WW;N|m7e);z˻N˫ _2Pb^ t(A*Xl@ѱ4|R®!CEX FMf'-"¹Ƅ$tZ2u-Z _8x䝣FiW2Plzo%5kFKV1+5*J%~p5A󄏺 $I! ~#m[eD .QVCs(*i, /6ˣXsa AevS-~2..ĕ^|w!xN?I_GfNnȄ ,/eW'm(@Dv97h+xYͲ13@ ^p&c} ăirAt}xf1"0aKVN#zҟ ĺ~bLs5X E곃y m4tH?d|5J}Nź41E5!iHךpq/Z@uI| R8~"Y+l (RUȌؼgTESJHZ2U/By;~K3TMX')6(\MTC=&e uWE7 H-xz-ȃI?=:w,a3B )nGyNaCɔɴ1w<}7о> f(Ui䇸?VKw}K@R =2z1_|H fX2ys0&0R=&l>,G lZ7SABۏ]&BI H&>#=}4+؄fu/.E呛~ %_zV ęA>*$3?ޑ'CRyW(!>Ɂ R^1%V:Jǭ;Yo7XGNgcu29WC؅m$xW{ʠ&4Nq!QY/QR(*=(&Fڐ>OCn4h NzzD6-ux |`ގ`OƼ]R 8ґȥ1Vtϯ'IRA+~0КսNjC)́R* z7b"2eQS\&ԴcXk2Blš֧4nIvHj#1<^Tq͊{T )AJʭCPVSrx>ty#8?qLm/e嵰B|lr׎wV51 i-e%Z|"xoYZ-\]gWJ[kƔi0_2- 4fc#Cr Ooٽ@V>)}Ȏͮ`m1w:%=CUsBk- EKRyj^ *Eti"U1xg{r7;o#9*uju/[.S})azR"62"*Xa/niP7p|]roW5up i =.ٖX,[ὂdQ69{8mJMiB`iy[7=:M/jZs+Z&[`+N~fЂ "Y.b*QzjN**TG2Ed'x酙Sd}*T?~'z+`3trqY)XKZ!ITDQgT1vkF& ^ǁ{x'':]Q^тTָv_"%JK"sXS"/HXA>?o2W>וn6ab3zm6tjq43wA /ҽ\0 񝒵%}@Bslr&0tfc@͏6RpUPJykQgclh<+..C@A JB @Xl S)$ڴg-J_?|7RؔjE2ȁKiuoNG Z= { rzP6%\v`: :OzC)%c_36M߷k>wy A?s,~bRb]xa+ yr!Gth/؊*+/-ҬXkww~GoQF.q"iDj#a-Vz#7eNȤ, !֊_x,\p#NbNM4KDc;W |>NTfoŏBʒy4t_kk 8x|7㌓l K"t G[JV<@oP(:/&9e!L:J# uC8.2M' eFM@PbUNݥءgssէ}&dtSO HU/Gnd}^!uvB).<̴(gE]^fH 4\Gg4m-3#- ex!to\Bɽ=?IG[ŬO-^o$޳8gZ jqfEd[6î{^̭AdixuY YEϱ4 0HO hS6D< ΰ%ChN=({]Y`2cy G`ce\Ȱ8ypԥVRέV]MTٸU_{?ӥNaǽ4ĵh50+ndCKSyuoIVK+ǚ*DU8Lᡰs|hod|3"J&^b&Y6``H2pl"0w0U/r=0y{5v#ý~X)y,G]k@Xw( 0fGϖ)廙?Ę@Fa(MFԣ.O8^r_1B!,#n0Vj p8rLU[6,Sh ,4jŕ֑ _͌.ZIUT8u$Uu9)ʹ,]_yCߙL*qȤ 픢6@.(E$6+CW$-b׷%q+k(qQnx^:9.{oMܩD`Dp&Fu存2K;$f/2OkR,K􇔼yR &CӉF7sgHcgc'!-V> M2~!{ѢgoVA.m5B A^]_u2q{@DTFLhƘj7X#=& YH,WR".0RjLtU5^WuɷlrjW^OS;*7a ia[z.ΨPdكH_ -\H Ts {'^Pg .!QVy$SaݭZ48׺av9 !Akаwڂe(IЎߌ^ЙeJzɨ'l~~ e9!+Ź5R<:}cw KF5}Rr۪E lg(Hv`W ]l$x('`U[yr;{FhR˽zN- /Y$P88QUX L M:JHѺĖآIy[ϭ~HJ*=o*NR IՇYZԪjG\MX+33@FVf8jךmgoei*ƻ٩p0cKel$}^\ +6qoK0୾oLt~ǒ]HPb%#FԽ ۶ubqs[Xy$6 LF.~f_toIw ZmdNSz\!i_2Wqډ?sIkZ3;Ӏ""q7g)$h(\X*U5^V̴9l'^ι/ ).ql-) ީBB`X!r{0v#l}e :z ؘA ul =BOegp"l>GT9DD,v%SLc78H ^BQ~Yҭ]=˜HťsPTaxkRc.oD^AD++6baOKQ5q"QP˖V_&vzto _oIǯp?߸~tB90AAUҐ,K R`@;PVM A8~3!_S¢))%XV+0nTS>_uq"ߒ*tMT `9G:RҾ#iF;S1Ge:\"H6w֡kc0#"쪍!o雕a#EQtf!8ޒoca=d6;St;$/pgf^XjUFmTԵ\xM'^U)ծq~\<* TbdwcیU6 ̬JnʨS3 ΔQ \Ȼjb(Q 8}4Y6.,I_ Tp5rubЏ (`2Ȅ깚_fVJTF8jw} jRwZ&!++YgPlFc:|Jb@s#s=w}s<טHHxSXkܱXS'T!%rv{ S"*^Ml}LW[7#uEyxeԗ}-=;7ZA0 /٘û'8GKTo*L2Μ0ڨeW<ͬ-anџ$T[Sޛ0&~5ˌjLowjjB#ڪrmۆV&KѦRP| ^}ebrL^W{:{x.o* DCpy[LBKEX\DBvdLN"ExFQ4AٿI'gjVbn/6A" qһg<ԝD*M$@ɽ t.KOu% ʻڻnTud=bC Ή~S>?{xL[iy-נt2JL5cIR`ycÙU:wYGqn;hg&)t8qEX ø\_g9Q s TV(JA&kKR!ywOw"qϥ]R- i40R$|*\ W_57|ni6;eN1%[H')UWƘ!EHHA-V<Npq f/ 3)<$RsUEm8)o2y{̝rJAtӏ󣉩>$VNG5x&'D~(<]?&|V:Ω!CZ]cjk펡NPLxRAK-a? cv:x&Jf\%lWUвΫ{$8?Ǹ; F(nAHr;V ~sS)%lbt\Ȅf++8wS|ݵ~shRS*1(y%/ۨc:沟8̚NWnfO^̤ Jgnj%L ߚr*mX>"Mtr<IFoxWiDLۦҥ`]*@Ub49D 8%lY,d$a]m9荋DM'\*t endstream endobj 59 0 obj << /Length1 1635 /Length2 8743 /Length3 0 /Length 9813 /Filter /FlateDecode >> stream xڍ4Z6"zg$zE3QctF%{މNQD$7}[gĠ% q*8‘\@Q6/| 01п8LP ./, B@;#j}|@Q qTP&YG'OyXl^!i(j nE0AUUtqww9p;"%80 @EA!_ Aп:a\8Z!A(.`C.wp[ %~xy)wB0d{+=_B]> Y ~P=0tvjWSCdp ίPݱ{uvpGw Xjģ9B܅pĬH@P ϯN$]NN&0+ @"\& 00` qT Cwy ^GёR58G7~/@DX $wM]*í"ma`w-u;BAy' E㷇]RM&k[uxk굡}>2cfeA'QZiQJp(fH:|$l©հʩb%1dն!MҢ2?+ذ&_6/ /7VUKR.u$YmH35U'5l[}8a};k$ezeҕ™JX1hcdVE喉BWUbnXC ʻpŹˬud_gk=;̋6!-Vma|X/\܆F.n 4KMa1~4植cq^.K ֮U=kdm9! y?s4߰y\2 z[8Y_?ĊiV͸I:%K>{|0~S;^ul}Je&G5bK) we!\S oeM<7|nJ,l'|ėH.y6H0[o,=!Kކ%qES*4~`uz`CEm䶽C)K(B$ʅOkbWF+!.t!@LgyM%;V:-}ؘoIi{<8%uzuؤwtD<lk)! dIQZ#L4T`-`\edMN䯃BFLKe_$h|[$/u{)$ыd&[}.=U{ Q|~?HOFT]^-xb%PjGtA|+r?靤oabhzp2&)s[`sڂњ4 y*oh޺X![s*PT b&T)!~\[~6cmX~\Hr3 %TyB(G+h[7i#zUNkfCa']|4f^ swYDebz-Uz+']-&Y$e]nŪK*PI,hO^PhxW>9WO:˩@3)(*m~)Eއ q4}~>LhvU/ ,$iOX߈B0>;bQ5K[=>u*;Dg{ʢ}5@e%qV &0QT㦞g\*dd) SL2xo@UJ~@2eWb)?|ץΆ!QCNLUt'nIÛBu"o+U*Q''&v=H\mb.Hz̒L' ;v]֊RA9]{* O\D1; F0o]'ʾss/^JvMeJhu27S'xTl6{StɖTY9p' twbOu>7E cK>+BdVHcp?s?x_ժ6tU,]Lt%6RϡҿVI'Ȝ˸#Nדhx:*Ķ[w= 4b aTWu_cH#3K퇅> f}AV 5n3y,+oXUl~?ڮxa3"=^&aVL$3NŢl?>H ,xlzЮ*/,{.f@Ǻf.NEn*J@H2FU*W.hd\D:Nh_K|C=}_A v{ i'YKR37DUkP;oz7:I$( _ƫ ?{*H:T-E F)g+,`a F ܣ Mȫ)E.2=lFUtlx(cAUT0TwOs1Gz&5꜇BŨ1h.>^ˁWGIߙr$)\. pY 3ޫ,Ws[ڡ!}BА12<ѝp=8 Iqr?/6ʑRk6ZX5~]ZrNIsFK=a>_E-uZ\dVg gIK~^#R雏 xI?Z~Gm PҐ"S.]}*Bn-tcl#v![ޏk)LW=dF9Fn8UBjxǛ"8!e G $}|0q݈' 2n՗-LfRo} E[{yR 8s9µ\p! QỶq`Dq4mx،&3Vf{߃e+jV x#@>v牁ڮbk q"/J[͑JN[ȴ*\Z/lqB"ҟ0|:A$REðZ 30RՂ\]k ],!h"HG R~0|Oo ^ѭgDa#-&%z(⍤*ڊ)guFCkəN/{Zsj?})|ɜSb~4m1hlFrET;P˪% ;=AF6A_L88SE۸svIj,ґŋ4-+jfW!g2M}̀iEvw:@-Y~ǎ"zTj.IUeerUa7l'4DO11_$/<Ҹ_:/`bZ=K1Uʱ[h4{P]3Ox O7/]o ?W(Zm%լ~(Tah?zqp.Lȩ _CRֳ7B5Ndlڦ]6 ^:I>(Hrsߔt=ht_ja yAi4ݰs,+}uW7|ع2֋yyBe@3̤\H%-yA-ZhV=鎮GBNos 4OO3_\8 Ŕci~a#V^Ф`"2e@6oQ[Ia}#yZO f>XvQzl@ YyCq|0R,/{4`-: 5j`s[yެ c?q̱C>N)gĉPK"f|H,5?g#' W ^:2yrE5LʄSrBrq@>kTO'{ZWwx}>i_5rYDQ+T~qnp-{^m69`Mf/O5tY5'3t'VmSCoCgg/V`ڋ[)p$m<\Un jk]^bDeO+0볁ZקUqpj%v7Sќ[ѽ3 Ysvu<&k[5nKChyZDDYrS;?.\m$-^瀢K5X_2iV4 I+'= DK ]?|}vo)+N5aT`UD"e/e?OCV0:H>>Dzy&*'Q?uBSPh^Ņs%/Fmۺ5c q8Da钭u D1M'dC[$=5Ztf79>>x4ϴΐ` 2YڢxjEvam+j) \+29@Г60_.^QͣS6؍TmTא+i> /n(  OQӮu *':T*!1[UutR+$sZt#+FMmNrY\F%>PTSzĆ0FqR崔G2q[p#;q,(eoy7lpEvgKue* nw Wvv([.JU|CO?:8I$b&h70̲4XcW_.r'|&XŶ.['qꜰd߫i 7{ZEe4ˠL؛.AVoQQ yC"xж?]~pSV:>q}J.jGsfҘ/~ϭDnIr7tٵ2D_l1Cn}u>9>ps?8JSʍ=`DsM+(Q bZ!]e$dhP3LPW~Un?ZrUWI4bS(XPA r/-&zc8Ix$$ >,b}JNmx0cS͘3{.ˀC̋#$neqZ qҵD3; #ѥ9yt)|);ho[5PF2Qq/  "GU~yb~"D( /ṰsJP D Ccq(W[iާ_/*Cv۽Y K3GfX#D-F=),@-cLЭ Ŀ߻+T/dL۲0<\6yKwabBX͟#{O]GE5VXyC"r NqkLnJi`lH$+NH_:Y$ȇ}wY7c 7V7bl;?rD)g=8;oLk3*ഀr:PQlو&<&VKk7- c!g =ۆԂI/Y)~/>P,'|և4Q;]=>N[uLT._lu`a3˯e]Ԭ1O= ikgy>- f>Up[s6!e֮ZtBۂegRI(]iv s厹Q qġ& 7Fo?v='rAd˚|zl$f)er#y;h'FX$.,sn "#fQ#{G{)KH [tyՑKpQ-+gKn;|cʣPcv SY7߶>6TGe5a]ޭr1$)*۰2mP5q._V{&a$I Vs-:0[ 5qg{Nj{YY_Xͤfj|@YR\`eYt"p8^ѢM־As_>SC/$%%ORUg!h;K(h]6p&ܐC:,yg ;-2WUSb:K,0\(ߠn/H̟X O\Nۛ.ho욶$T 3ҽ5{) 2,zd$I2!Cժrj)hɓt~Xcýg\W>տ;f< ߫ asR*4ŕapcY,y~rzmܭZ9HRHQc&7}5f쓳l֞fC| Ag~+uWL&32EL0`ZZ*o7ۇȑ)J y}ϲ\*Fǭ]2V}e~'NM$\Gܰuo&*|=s?ҨQ!o_ kQγ醁 H<$~psj|*Zal 9@5MHOE-7L}G)q\&-(ILFl[]k>5V G:q-b9z7&+6*t CIsql<9cѸI:tPG;CNh7䓻^s 3#Кh58/_K00~neb7(v/8f^rn8P-C iZRy>OV(n8X(cw7԰Ѡ8 [l`vsx3}ʐ.~a"̕o?V-5^ŽA >g->[)tƘF<ڹsr"km@_qУNj)z0t cQI=ɡ€ n$TGCSGʏ=n4w%^M<_ LaKU'f9O1ĵ۹jHYᮕo~qzeyV*{zjky")e*؟qBJsL:jC=܆0$ٙD^=g)K'OTH,on\?Y |4@F"p'}崨^2UȈe_ixԬİy 7U?DߺMC"]sřc^oXgx%ԊRP]=6y=Ao/S+$tAnFÆCvۢH_e1qp HNe:XO=R~ Tb/D0]>ݵ)oNPNTyw?ZeЌa/z]egtmM6FpZtJ8;$TRh]댗.*MڌDN@!jN ]s[ёc&|k Ilͩ2阍f¹([6vG94k?ûgŤ8&wߖՈq$ g-6E| -`.ΐw43OB$W6҆5c{LR6SE;پl9eURQUQh1R˗{+0w t a%2̿Nd*m.ضK|"8H|עw"SHߋFߺzc&C%CGo[4H}]˝J5 JsO?'Vب !ƷuJն kx+ !: ls™(j6{^ᤎ ~fAJ)^1 '~$m(r̊u&7_op _qݯԔ3X"jd3}{ΏQUO5O?zGrw곡x3?ڴ4C6&KN#VW2BL>ȀPԙ{{h\>Kz~BuGb?6;+V!Ja9_i#0V$6?X@~?8 endstream endobj 61 0 obj << /Length1 1464 /Length2 7175 /Length3 0 /Length 8159 /Filter /FlateDecode >> stream xڍT6LtIP H HwwH tHw*!JJt!4ȇg_֬5^w=w\ac疵E@wn>8@^SO llPw/1. D+~'Si"5O','"@"] O-@D@p>P{c`sD~dW(h  @ B}]YˋwAKsp=b U0@  `u#Gڹ{\!; <<W}U 3Xx@Pog;>P= 4xܽݹ /C yAa ;ߙJ]v:AaJˊ[y$AO ߵ݇dH/_U3!QUN"bB v[K|W3`wWjuyBVl`w 'b  0q^H5zurrHo/_E+ ?;$@Ow]Ož͟;?࿢8 )y`5epY;k"Ɛ?; zWY=6Bݔ[;Y - ݠn7?;nw-οTD6_Hru/$[E[oxyH;]y;+ x~#Q Wo$vy!\|^_Ƀ=\]7*}W@ 0 ,.J֋{kDjm8w޵!K̐3ٗ7Oeo|Ŏlz|wm7Ռ;7F7lM/=:n~7.~FNQr] El~Vǻ.~f$p-&k˝7$i-Z#\go|V_N?]*3wf6G?%+oXFA,h95&v˭n_Nlݳ՘ސAX8ߟ*~67Uj!?ш.= )6AC1ﻦ㲋e$syxϽln-Z'gJbJ3B~.1'46)ֱV8G-Ԥ$!q3JWFo4UX6g}̔[qLU&k)N.bY*7Qz{䯺lO 9^whYWzL1I2[At滩UkR; Mz땝&㶸C.iF~evX?HmЩꉡHr\ Џ{qT(4B;\9(#nrJ׻RJG~hv;c۶:ܾ%o[Q?>-?>Ab0c ˴+Yb9ª_=kXKr~Ugm41 (Fic948I͛1c.<繥?_4bǂ,-hVJ=~eP!(=`žk&\ l M'+s q(I3A7nAi(-b'DSapT)lM^OVI[EuB lglⴲl>!Qb/ M B7ݙFasr̉8ސ8.8ri{OF6.xD5.wxlj%9 (iegMDyqVs'3 Q7kiBQ=W@N֟Q8cCx\j~êJٗ'~ {HK-PLBAZ)^BtAʦlw۟?28 EyjTSoÓܫ#>#ӣvfqh^"!i_WZ/$?J)rpr̛Kj9gP/Z2M(`S>7@ ?/C=PCI+2@Qao) )s"aNQiZZ/aJ,._l ~lg( ofJ# ’lXl0'8 }]wiB+y]Edr+Өi!]Ϋ2qyx FR.;47Z禔2[P%0$x8s@}Alb˽3HPfom@Z~{H_#>Z߼zʗE=;)d9g|U$6G& lE'(_A`ɼ;%ݼ,d#AHrχgxʎƨ`q=8$m!89k;*\W;U P!S+Kit'$'tf8khpM䚜ړ{cRf=!Z#gResay ֎"w]:݉7IBv'!H1f 9ss^sGRǬLH _KٰL@~E"gD}SBıVg3m/nB/ delO,PJ6 (0]RInI)>ZnHΖG.s˼}P4V!{ aȧ\w3:PxxCcz+ziOKSaz=2~/&(hSTrZ`F~Rh2qSJŲ)DoRkrI,1͞ol[PlAT]dGcѾ+STX+̕/tpW>[\~N2{ʃeF]@e8&իlb練lz/^!M.LcTcJLMkon: [ BB>0.Im(h[Rc+AnT`]e@+O$߾\P5MciA٩54_OR7yzk6CZ R#կRj@k| EmtkT_W;ծۅвzUs>G*4wDQO2Ʊ׽_ fWUL\rׂ'bƸ(QxS)f@'y咲|n YD= iy3@IB>[wmi#TWxvV= q$Oh8u()(Y~FusLh-uLY;1ܝイ] E4W kء#PkavE Z%/'v W=܋qD(35S.BGմOy6YzSĐ”Q]䧥;mh(qZ#wo}A dl6gfuvlo04F5 Oy@:("G:)ưq"逮ZƬttEDS![&-{)Y'D]-]U:{,'zɚ,l,_{cqоi )+6iznage[H_|H{c.zA_zUF#4 ͨG9 WNVIC?ly+X׺z9jU*xY®L!XԾ!^Am6/31B| 5$|aJ l2:X>rg+1c> xý }S*Fzȇ)E2>2rIoL̕0G;xpa _+9m*@% 4 Mr&{ ;,6daJT<Kq#X2(b夰O~[PFTEUpI^uY@V2fC<^ai1Yhw4Y6e=-l}ȷ@oȀ%˖>ΚMwEFÅYE}'\8X]^[RHr<,s؆!yS s3 #~D$E4S u $h զ5%EMSd(5pZ &-9붒͗2;J s1xQxo;R"ITwڣF* .[8-~5Kߥ#m $n)4 tԃL9(9il/}ʜ-J*@TQ|ȪY3CNðoAB5yMA@hYWO=yZIakqkK뛳EyV41g{i\6>j_a1]jMWzUhPfIT !Dc1"F a q@|l7ci,`2Z: B"."uoR&r؝`yF,ǃq;}XPE:q t)+` 4GiGltc>qU8>"g/$Wz9׎m_f#2 KUV)ƚO]%dv;;[H-ZeM -J>1&&0Bm0M=,i/)|ѢD&ߴdnGy鈪3\$ Y|oG{nU_IO<%$UN>S[q<|`{{Cco^Hpn5*f9*J}ڋ[x8Q-Ś #} PpҒ1$=[&a.2j\r Z;?_͗^i29^|%o: 8G,+ټx$!ܺ3 pοvG@\oCf%I^%~h^}qD!6 ܙ!)ܴd Z˹P- ge0ܪeL49 !业tNyt.O%ͩ'Mͪ NwoEY-zyv '+\:x5 YP.0I-ԍg-I {4  ,;fÜtkqDOL3;l8 lңseZ?Zxu endstream endobj 63 0 obj << /Length1 1373 /Length2 6096 /Length3 0 /Length 7038 /Filter /FlateDecode >> stream xڍwTl7ҍ #FnPBc6F74 !tJJ7H! !Ny~;;gw3 #E@5}I$&f0/- !ˮQ:qG:n1,d@>0G@z~H S_G "##%'E `8@rc*BnSE# !+,+vB y0 E@ݡ"\`^MN(_0 (`(  w"Sm=_Ww'!;`nP Ꮏn^L< s;`4h y`n'd  GyOB0[sp/<௳ {Goas8FE3@R2'Nnc8aF/BzCA08cPd#ah5<'[ p7\f:VIU @ sg#0.@Ն;!25ҿy&/ B< H|O ݿ?hz6V;o;( ]0ojD& u4 .A/oP#ˆahxaŐ%5ovJHH$؏sI #a!8 ` 8!$S\ y~+Ș:(_ H$f_NCh(dn|TvVrWpmDafW0`0:'|S%=W y֫ǭo^%%-VK|GLy=3"C-MnTHsQ ]]0=f^-KzY6!`oV X;NKG}ts:oU'$h'A8jU4|LԫɊ. 8WFLPi"n+64M,lgA-tejq uY<J |~ΌXz^Pij<@E{H6̒z*֪r6YwW͔%IOǘ=OC SAQ|`jo0(97!7q3TX ~(r'QDREE9/$6Z#Q QiqJ :uܮq=.gmnXN|\2~eZ/ SߴJ*K[ "`AOt>>{{\S*gȷ ^5Z踓݋|lQ_tzO`Qcvԥ{c5.qv]_$[7(4$ZyP,l#l}"kU[/-uinDdH>pG+fܚz`{AEWrkl>^yӏ&IqTt>V48˳mXmǿ`Uޒ|9]\Ti=&Fu^V—LkvCÍD9)'jgVߦYwqHARK=O՜4r$.4me] 91 ts]4)Vyv!9_"~ d|* GM5jH3l=xZʼnĨ; i8=GH=y[B~u:od-t$х>gv-VsOzmvJ/11r QqΎ!enIdRPY)/;<Ig^\]RKlu#5dFTڭ`B"#ֳ{ 9T#t,E/yi-i;Ǘ dZiiɒiRה"& NJA3(oSK˞01/|bCFCE@7{3ZlR}Qj5ʊA,Qx[4GG\8Yg3X^b%MƵ^8ٱڰ,X斞Ѽh,[gp0ߺj)yq_DnPOgYҷXaBs+n;'h=uo ﱵUtxZɷ,#&I0SZR=. Ӌ)Qw([r}FsVoȴ}0jg-@B!˓Tn]/Շ5)ۜZ,$Ģ'V6֪vt}v pgJztCXL Aw'*dw~in0>jBL[=lz+A`FR~>,%fC3f&n)K"ֺEyFM *VQg)&X*pǀ #Ȩa8@Gg_(*1lF V_Г 1ՎdT[E+bE蒋:y`=.Tfvt{ }LTzJg2U2f> <}՗'CoB19BųWFsXKUw'w)v zkjsȃZQBM;,/o#v6>,l "" XV?Ɉϑ7AEY ?0Lj3U5{ȜGͧW #M0z^#{1zD(źMU>)PY [5οДEG>>PۏOj:-%OԾ\И~\8 sXƭrH/} L^e}NO.( į{? qp3;|+q,Y|(G^Cq/&?gIU~Hgn›k-W 2K%#[j^%M#҅HDrin󓙿\K5r} я;9Y4TjP1c2>ܒ_hL[_^:cKMWf}pjgݚ7sD0T=[X鷴9I UK[yV$MyS8gIYܸ=̈́6*w) ]I t)Rut6Wp8W' /FUT\p+s?zm'JUDǮ9WvMhNw/zY -dp ќ{ONU)vf63V{dHDBt~A0u1WcΉ~f,Dǜ4/kn_vM (mF簪ŔK> 7k^?~\& !i"뭆l*Dە@NȚYRGEѮBȻ .Ⲩ+CTZm0W(dI?r>aV1|R43or/}Be$yى9ْ?N >#~H1*3j07}iON!zN$WX?;Av5njsϿS2PpMJ'OS_>k:qt3 NOߏo8|\n%T64*xƓ䫂g@S[28$7]oN1X.6=ߛ/$9 ţjcb!+Gfd$7t/y5:)vTp<^!cq! \8AM4 Xy'Fgؾpkט(=9O\rB['B3N#y &u{YfrHT'By^$."ו3O.`l8aIE@\z1~W<<iq9<ɧ>}X{ǹg'cԀL|}3usnB\"އ_ QI0,p@v珆ϵHkgiάphVoӉYJ9abV:Brc٪=]Ivo-b D'񎰇l,bɧ"صa{^6W*8{m;J&i>e -`G ? {+y^PZpvy*s%gSE| 3IG$^"汞JQ~e!72}{D5>Ju.Cϐ+%Ҭ<MHE_dq uh;߀TF J4U*7-"yXz(!B>u|.;֧H4]!:H;AJOqNJwOWXyRjYiiκriJ#nPQiYA5Vb w7cfwSY~8UQS!6s8:&*,p>G5K:"{ '2x+Ԏ1%_VthE1myZYDbAogogܾ3,楶`U._C@襼֣x VQrw7?φҤTo HW"I]:Xh@wɌ#83E*4<;;A x3Q=a×@ ~Q8 54~lFk+m{lv(V?mxnnNl:"Vtٽ /TnkΖM峣q)mF[6Ē)CFw?YIXȪl](72)-ORT,^| [nZ5Dlqq|M> stream xڍvTl7%1:I(nI 1 ch$$QA@$$.%E@RywW_}~uc3QUg\ ŠB@uCS ,!XO_Z8F/:uP,z!@.X(+<08rc@3]m/8/gD_ "w'BCa04 D\.O8𶖁6+;B=}x u;i R5B= <Oɚ(gu4 Ga}@`0G: P.GpY޾p]=*tp,P ȁpo << B{]#C.p_x) 3:](pd1]0x ';<(Y.HZ[B68Qqef1"X] (W[W~o_obG,(ۂ0BoGUBxb7DoWK_t5;#|mBPEz>Z1 s *-~}( /U0ODο%.% b0@~xI i ` H CB.h >% [Gab0x8 aI4=Wr)Zf 1-4d/s"1Gt5Uf/pobRMςRLGWS#mpQp_x߉ n$l1.d<驘=jRZhEmD8 VR(^C%^0 d+Qg t2幹O; +!Ç8 =O⹢q[ߒ8vڡK2 W}\nQ6 Dcf2]TUyIvp\ uyΟɨy|uI:.\:4=̃?nn jnj-7=. 5\<~UO9s}e}6aHB@: G!ZX1"-(q;E}Z5eРrz-i,l%mղݚr1SB sZmB8$)UrI1՝2v/GJފc{vmf |[˃(~)ҦPݯt/}5$Lȏ2l\}%6r:JGN~%@8>.X-z˰f7*sonή?,ʧ?tXFԐ!uxNMg@ϖFy=iK3n3CHxN~MsL`xm6agA8!ZЅ@q.ȧv!@+LkFm2~ϊe- ; , O}]F64]a4M:՛ @G+&IsFROr!_q*;0Z]ǹmUJM3 ΊMQc_SNF%ED"ߎ5+L㖷24jO+9kD 4w| $o"Dž8a#Ӌ؛zg]1<>^|HNTQ|ƽjHp8~D/g;oI*oސ^|bHC)پˡ3+~_: )Ip^ߓ{(Ux4ei zV[b[hwe9&Ӳ_>9.X4VwO&S ؜*> g}YsrN%XA{]c*cYJŏ4_^? AxBCy޷g{(rGBtY!NvV컘WCJ+ܒ7ȵ{1Ŷe4 %)Ԅ1jɰ|~̅o˃qlk]#fCpj7~`d.&sC'-M7-*2tS]mepWץ>D,OWniLT@FFD{kqOm.pf&P4J_M|EtjqAyM⊒UMTj~#.'1HcH,.[(vKl4i$1&DϘ)6< n˛][$g.7̓?>n~`Go*q/͎;*w5We`GuX5Zv("]zN|Hsu8nmrF^ɯs:Μ]~G[qU+ҟy ޥl]5jkܟ5ѻL&ܤҪ2#ygWxyAԶ._W}`2[hV%!Ҥׅx0;m lew|CwVs k1md!2U*f[GyYa;݌:# gD^`V gOl}wX`[^jo L6Zaumu}x_p$t\1x`Wcؓ`ܫ[l<{ySPen~ƀ(=4{ޕnһ6gצ,e9Ijl,_n Onkw^ޥ>Ǔt%G^w~_8?_֢[לT>͒@)5;J?v~ jcSۏ$SLʁJ5@+联Z=]Hxt50ꨢ\_|J>kdsۇEW*e'M}eRt8ݖ)"%W#_G|يVWlW;Q)zcK_ pu ;- D? gKB([;}r mEJ4>sYo0 ݼjl3r m#^lS4)JlٞPxy@c:xFf̽$K *!j eȀIe^+qzo3i);\bG?ӓ o*(>s?@2*1u>M NI6tB:S PBq3EKx_K^抠-/WCI\Ow8׼NK\AV EwMSG'gP;bەQ{m=X~y кDP˲B'XꝮVKZ&=߽'[vody_=0֛i27KUΝٵx/~MUCgiKyD%,, Wk;{ME^${3t\{͌TfKI{4'-Ʒ1Ē!ܳTŎFm`JHfj Ki Sh1z/>ɉ BJ{2 j~: 3WD m{1 ӷ1$桳! cR%0:߯:|^4ĵX: ;hFJMh(f7ɬE_6 鐤=!B(ټ nER 9N6 2_q|=9k^LuЉ#nf&/W6$~ ̣#̢{u=Gb# >=\/. ~esmZ ә[{wZ ~ p[<7?as:YgAh' {!Y/̻|,6nFdjxߨjK)q.יn9o gLvt옇麵j#ҫ3^4"rli ԣ3ˀkbgӃRk-ρu_2)K3&C)!1J66΁~ۅefR%|*\-ռJ՗ #^8UVWsJ`u T>&gb^pj娑dK{ugke"Kmi{ҷP_) EbVY-F] :qto/guxB3hFP%G`t0kˠ -䍝hFWeYOMTq:&[ovt% gu۬!'?gBCՊ.`)(p.iG:I4.#dŽdٖحbԝXpaAybFP,r%[L-x\^-eV吔UfޟIyM>ЪWgC?)$K|FTop\NSܳE}8 > ȅ9J*~|"UMcu%F%\A ]Uo*$Hh$ve{E6UY$erXIX!|?Fyj5`eBEd}Xܭr3Rl[5xZ=J?g^ 1JұI4B.c?3{ʽgìKmϝw#zQ.l[]\Rt|ҍKɭuB!,e>ʒ_%g>2>p |mS |^K-/kUj_[vd~Q36[Id<@ )=)5Vxv׫S(ȪpEHs\`~wdpu-.F>CY~MUq*kw ӚӖdZ,#9 wҎkz o~F_vzP܏X lzh׋LsNsig#:0{~D^ΌUP] Y,gu7]DhUrzb;@}M墄. _sO=yQ$% ewj:ԑ6#ٴ1+˥W|p{7UV^0k'لZNTC.#AlDu,"Gn,p|ωM0fy&)+n㽝pa+`Bե,S}w۷'[э/z!slUj944! JnX*ӝ}IP-GU):=@?[|;bL#Ykv/3|kWDtY h՗NZ!3k&5c:$j &.k@ǽVPfH)~ S#^ݭ*y}G$D B*^t7J5kǪ/q9:F1=P.O`$D,X-\:~⥙_mK BCL1+4:JJ9l7"P~g)8{n2ɞ N⑝4'B6RMT.XJVs09L,ųhnW'qG.Y,Dݟo;B=! &meE4E1RTmw$u[3xtGB<vMS㐟߹R.ѱ$CDE%~zKg?1P endstream endobj 67 0 obj << /Length1 1677 /Length2 9745 /Length3 0 /Length 10830 /Filter /FlateDecode >> stream xڍT6LwCHw00-RݍHKwHKRJ|9s}k֚y~VSS,sxD2j>.^,FF] KŨvv8Dq2YLPv|(PH#/CgQ, b P(;.X2kc,w=b@pcF `=+s8Qݝ dl.`g7%wu=Oc\X]_b+; x@!`ˣ+ x QRh8aej@.;da`yB`+ АW{9 oC@A 䥴wr@w;%,e0 d!`[3V;;fiKWGn=$ţ?2k0 #$` u=ďz;:8[B?X. 70 X`k ?`!#Gp !ѡEyKy #,a1v\Q18gq/ =X sbumWRcӌ/SY9]oГYk2߬9_H%v,oʱK.{on@kIj3מn2A?^]SWrG?2c0f>{G}_HܶN ]g^q` cy:48'5щ4Qr<;A _WYJ]^N  'D#L{K֜GRfG퓀=mu+L,OIZKhN<~ 5ph$@4Buxf֓.b;ݚ)Y) MUp"N%7H^샡 Xˇ~iHw7b#,ܚIi??\)1RPh~BvL&S m-9?/]߿CǪk_)GA5a_n}ǬTH0mn  k}ΪV~ %Tld]w3cs#BR*AYdWDT @c!į~O  9Bd&%ʂ1); 7J ٵ(=eɩ<,TP/m{+SDO{I#0ԭYt#7a3(-bmj#k d!pa8 :m:dQ_DY6:gv3?l!tyAqn~ڶbЮU Md!$"B:7Fm,ԥP"./ q{Z;[jm;(eRZ*b5`”?߉ɶ̞ gQf>YPL,ٛ=NNdn.{@ӜϽY+!$߬oK<^TMEF˞y:tob#~%\Jvhf42#hzR oJ0k!Ԯ }3 ?#mS4}[DEK[gcW#ty\Sd-=䙬PPTFO/6"gß{787=zU(;B|&CnAB. ܚ Gkq.dIWD8Dj$jmWm4\-69ġ&C#*buIP.."`ttʨWJ FDE}J/xpX޵U*jToBB^?2BFNC9V޾8؆`;rDXǠQ7]{pB, ضJk|.% {'9 lKYm|п3?˫$Fҽ]}O֒;w4t1OH`"S(Dv{X6/ 8:a螸mWZgv]`k|'&.?m"/CK+A'θ`5|#5:~J:)(WDtB|rCnhii,(G*v?ӧ,Yg1m1+\0*EoĞS3yOˉU1(*cݑ6tㅆi}[li[^t%3Vг-x g50/5ܔWi!2ū4ߺ0y)Q[\\e+Mo%60mNdW{]7%8m,Ӊ ZrV{,t,NN&c֟z: &WW_В"Dl; 5HxeC:mvS=0|) JԿ`dvXt㍥<(В;+g݉LfRc8)!! yVDŽix 416miU:[lSJ=8ɐ YWK+NW,/skO.ʗ2L"4-.ha F(2Sn@8̻C8TZuFTY&+rzƬ}# 1G4 |rD@p./c#Z05&x+7@!|%;/!p?Mv8> t eQƧ܌9*!;:_7\)j/+;o n 7fsYNӺЕϲ\=kˀC툴A/ijMXbm`qÎ641¢8x^V˶x -Rt]P2+f_NlƁ)0sT|qdmb/7J_B^' \ev$/gx"ETyI_hu\</za͕,S2?\Ce+mnl~bg4ݶo?{j(qḡ:X`kmKD@Lٹi,*[]fXTOmZR0䒲fD%w&r׵x}Ym,aƛ4.?6}}ף,K-gwv#g.:Uǚ49 %\.W)a8I^kzk!SXAzeg\q8G}Ҧ\ɷ&AwBORf'Ϫ7'sc$ 85/tWc9VbJ׺%Җe='pT^`ɭp[uc= C٭%8Ajr{wyk}dEOJ_CLJ$云9[RAS~ZB:#[csn$\/[O$u4atOy1I~fn!+ߩ-$t:eLHf \5UwF';%ONhƲ*b~x+\IE1=iA6+Su8TϦa|H0-r.>ox6t`r<,cEf =3 ,W) :KXm9rtB)w/d"Sl2kJDYo1HaH)/:.FJNG ˤ v׾S0vf̃i ;v[D {Z_-6CEwv.lX}޷-0b[$yёVOQ0쎽_oƥ1G[ɓi $#{v,KG^[_]-HV/)c;jz&@ciԕfN"po2jIDlz.nږIߎolgos>Ңk w * Gs{H"M/ ŹL}EhVY0^ogX~ʉ>>$%~4CXh^fFIl : L$>`l7h|7mɝR ܃DyTս襘X^0*o,n?yS> !6YV)2<|׼PIcxb֎GJ)@ț{.{*9| _uEwa6s-%: 1)Xww 3h4nH">huɅVZnK3d!f}2jxetQ:*bXpU%JAMz߾j;łcֆ#9U/gkɞ0bcSNu\bC'lnzsk?{S7tI~xRzP'DJ+dt1g%"7Z,Dݺ(^[3ȫf8}_eJ+~Y`g4E N|WFnjuR*rCh}Zt3[eQ-S;͞b&ͤ*d^{Mп02>Y ѽ[&\3<'']~38{sbQ++<$#ciNUCJ lgsR? SU0ɤpwj]J $;_쪉q*<#ν -.M7#͌8Q./$21g(aU ^ߒDYȪ[l ӷ2 &UL:JJZCAF?H,9I>Do|]R?κ /IzU>:Bp |=|VO55iqƇb]Yt\ؑ~C47y?t|MV-0%^貮d:Y,!xizw}ex/]|߻cN+{-rxX ^v9,DHP.i,*MHœ;E4),ӥ7|yr։%'J*#0/ҋR4F}kH'{ĸY77tƥ!æ5ion#U|}-$2vM \uAd7Hڒdh`{/$_Ex \Ҭ (ڋk3RHS;<(*.S7}Z!jÓ }XD GZP75!N-d%9(V n;zly I^ش$|#@%WoP bQ`Z:>"%YQѯ|>·}e<"BwPv[v.Qo{u>Xm!YÜ8vB]8Ϯ9$mI~E2Ӕ1k s8WTr2Y Y$"729+r^v_L~TGsXx:YvG!2sKظGjJZ_yu ڕ'xH4}ܑVKl}7Ϟ@iXw]| DxeH*-5p˟3+F*E`_^Y`h,-xIQ)y^,XraW*6^i֑|ԠE'")fpH '1xC-mw7{3[mQq6&_?\-a* ㈊/i.QD%Rnho1PoY< ꚪ$q ^~i҄Dܗ㘔FRErb&@8}rn3v٧W>[تZJưo߀O<Frw Rv UvwOptUN.B;p =/艿{vgr<ܧEƶoΊfkMpFb~ 6&e2MW9Y6w>p+u$οn mƀiHV+'Q"߂fi_]%4/ N2 {i"t\ @D ̔Ή>sZ@&Z#0K׎'H9rm S9fR,,mn'; dJm Oŀ:'Do%Po +^/d>`WjITWܲ ;EmJ^qgӨY(=MFUZT;n? &Xq!koSKyYO?&= 8Vn@0@ǰTٹ3۶r@ Q/"3$ش]wT ǢJ/9r!=kV߹az:/n*|r~`qLȬAj^`sPk3JyQˆ{+[mڛrXўwceyf%X>Kh.DtmCY"W ,5;ԩM1ɎS/g [.RiO}xkVcC7Ъ\2⸝HEt`EXq8ldž b.皪n:4\aUNc] TT񧎺!1+;%*0̮nr&1z8l=ז1;7$o%I$dUh̀~tՐw"b4^>`/WxAzZ3u,b\=Q&>Nީ~8:3$}uI :+i o/Dž??I?}ٞ!U3F̛:&&`°I"#NRK:x:L28K:xό~[mK"MoT&FjWLE*V6}7^f+!«J;摹V2%?dKU{P5Strud-TmsܲA|lu@+,8HśO;9 OK/"GtTwr6)~Vuþ8&Ld~G| lNDԡ\@BKC0،(jLm*v={~p /Ԅ}y⩉-tBDC1nQ3lk)*uzʤ`ECHm./Ba?FNu"E8?iv\;v{[]beʢ~3|(kn7_vmtCv+Z M+|C*Mw65P&[}?IHe᣺yI 9yG&ք藥h(|}? - S3S(fI 셁}tn집pk^ox_;d3fe)$;DOH-9>I2G8GdM Wg*V;&.i ^|3:U*wǐ`)#/n૦JV[j\RuW[~a⺕md\gJɼ7Vg؞~4WdT3P_4lcy'=r² #Y#.J 7?r{sۖ1%=\܃0 m, 5F6V" y|#cX&U7xC2;E,VZvYW/Od]zlFҌQ .74Lq;FR 5<3J&IWApͬ]a{>%w'9>zynJe5BCɌѽX -7?<.Ït/`N^D;Wbo,ni|$o*ˌP4E/ov8m>Q- ( fݬ&JeN?cTY*E2jl;>˦J: :ьAXWw ,n/;ʜ}'C'vJCftoH1VIGNug֤Mݯӻl:֚?y$[~l+!yD`lo}(0ϟSw-geLb{wGlbб7|W+,Pl̹/jWQtz,B/>N϶v#49g. m?2gyrP-vmӜʷTp:P;]O:)&Dx! (> stream xڍveT-$5иwmi\w h- %̝~kuU]4$, Y(RT@nv NAقH PJU;N>!N~!  vHyZ`']?LNAA~ֿ W[ 3'] A+ Yӓэj- 4@n W%W3Gпͱllvi f `krr;Y\ JUgd o%u+lmd uTe!^V/oaf`f%U@VB`,\m!nn2NR`GG W}Ҷ {s{N`O'W+N. XPo5Ѓ@^6ve vXA[Z?hnf ''0Y:5Pz Pr>3AsKk+nII `qHBUpQ!03'LΥ `w# /B_bC[_ P/?!qPCXdi^t,$fdl&kTX%ڿ vu8AgzA ^Ulkxffh@xyyg @;X]~-/C//P p84#(S_$0q濑 _E'B.PI&p8кN_0~S|:SN@hy? tu߽B dmPk惚в]qB mM;)T'? h]n`W,x[B? I#[࿞ mvl!jWJԓmsOɝ-v }1)Oޅ@jڠh!2vb:"MvnJmmxܼG_yHH]-.k^o@ KZxp!ד*d`un,̅닔A]m^B g,$&  &ev,Z Wv^WiwU=ֿtIJ}Y厚Ăyl HaJdY KQCN29P^Q/b5?ZvQ W8? JIFLԪD :j;Xt,KᱤCDMGUM4gCxg5uZPAV0JRE53@s(DpntzHVɁꡧ㗰H'$9>\{5Qu*R8pv,8X{̪I7Kdp[f&\~\6SӖy KBNSUGb$KN=gb؄1 6祶9bou -3h xP}$INv;a7NeرuTXfM)6imFQ砦NcNdлw^w>-3'CqNcf!E0(hUC#'.a=)jqu܋L>  T@ }=Tg25a^lD-7}Ks^״|ԓT˵rQ~_ QzzV&~ED'{DENK>5ܠ/ `L 0[ ۙ׋8KpEё9e2l$Y0ü%Re )xAF~2M{L $y ?Tdt,Y 9 :*wL4G*dij7)ۉ|w#F+tCWw4MamK#O0=Sghd4fMJ*2oR 3e_qM3glMbK}qï2/5{$FPqÍYQDqI:bI*{yūS탹w.syK9eUs#G<,ӈ% LY+D;7l?]i鋎Zsf=ޮZ^0Vug<0TҎ<* k ;y[1SD ^T=Ub KuӀCu$s68Yց_1B0,X85WznW3;:FNÜ3ܖw&J,/-Rվc.:#DڡZqLpa' S߇קTnr ,in"Ց{2 p>R'[-FeE|)6PR4KjLIMTݎ4*]wFHܯty@QRt2|Ht6;{WtSExj2Eݷ3V"j3ք8 ͵U` cMeL‚ǺT;>EkeuŜ]BaQ#F@ˤ7eFߏ}M6F,NX):>ωzokw >P9/#NeOj`ݠ 2e_9v Œ$o3\ [j3CD:%cFmhȅ=Y6|4a'GY sεxT-üX"Xx?)2g6/jj3TKČ2m.X5)?7?.w"\:zs`i夈Ii$Od_AƕT&uLyl8G]X;ep.62XGZA; sꁢޅb#^1={EGys:FwMY%ٽ$ A qFL|SRu:ILr`])^r`]<+"5P7X.Ð90XNT]UP-Tf.+R*O&y$y:k'H/X7yjT% C#dC$/S152ލy{׫E6gf+}z$CM2:Z6S?&kxf qߨ ʥWX_PX=d8F͆HzF&>E$mK8}e>u_s=[B1LqvׅB@3Ols||@w5 X?~4B1nԁŝ>MJ3祱k B}LcPRj]5~S1. 2]= XkڹdۋAt[ij')e!3>XmVoOtZWzj vݴ(^(&t w҈8X;\!fvIS\ 4Hlի\RAߤz:OSOU]5,n"IbmQ[\Op mFw*s[n- "Cn (M"[1,G[lZJQ>ӷa?/e3\=\虾ă8vOla5sVm9.g 95OKx-iY%]w$q (1"^ cbc.: sƣ|С]$2=XkꤻI1OSwpH">0E!SGT[g2/`ͧܭ-`evHAGI2 %kG3 RXWFe6]Hdf68OhIe4&]ODdS?B٤gƗ'UD2ifF"q-j_tC Vs0cvkna5rsPJFe!mtBCǺԜxsƨȻ t7=âgvѬj?zT,2!kYƷۧe~N%8;T++8K|ie4.f06&kI`^G^\Ah99&FI39nAh ΢6U83%iUT>=lk,8C2+rS!}1y)&m # MZc., Ve.,\BlPa1k4z]`C@$ygW%z0'lY6Kl#6 "tl'響$9azu ~9f UX\ Q'Eىy*KOv(0 Rt{ONkm *y3TM%{$NU2װ5 $JySUP#Vo;O6,-쩚t}Te`)SYfݹ)@պ= 5d,Wl%,Fc"4k0XA=e:5L2$% oɐxݑB^ު!+p,NS\ݡ 55e7`zH7ړ4gsT$[=y4gmOgi+򙶃Vx0|fnR@gZd[7J]FTfL.!qn`õؠo{7b&Ԟ+𭦕 s:d@ qxrdYraʒM1z7Jr9Ռ)oO0NQI fJd+qȔSv?ϖW˰TN`N}aK#4hM㞏KOs]e, Qm‰sY*ۯmO;GH^L?9Li?Zf PVcD&lk[[p9O ."!#96vCr+Q$>mmHpWETsN+zETY%8F6KK.@!"{iqMM=l]҆v8>V >klV4qnl71^'ر`jvlɔe;x`R%>h^I ;*kݷFp)KpI Js^^T^ gSghIpG,ܵI<վp'hnnuP1NUn楷̴{dT**R kk.g;eNqL6.FF!xfd@9mj믡c %>-F! =&/SYo3Qml(`cɚ?fjo-g{7E亝یĄA3S%)CƂƋG)^@Gс&U};G#MnIrrMJ&#u6:Q8c㳋 KM8 2)lG<'P/Z@ϡ4S4r `,'bAaޕ,֧8V|F +|>I;1ZygFfUz!ݑю箸BƕV@"0bW> z޶gA&pNG$nhcy𩙄?`Uz1dg}B(vڴڔ(*(5hG&L{ꩋ}֐Urӡ\Bwv}D8%GqCnDQB5"w/<3ϯx ~v:^7iЊ ϥ `&_>S/ͿErBbKe{]of:} vN1 kVfCP\mVJh8USa~<Nz% Wg121:t5V;DLyؔU3RIKX%f `DS% t|k[뤸pid7YudpzRn@C?Ş{ 9dNUMYL\j˟&j U >yП:DtxR]mڋc|k3s+޸ ۵J<#AߖY,:⨶܄"Y( cΩDꔫQBM:EWy_~c^1@8eivyzdg8[rͰ$j~vDW;apY%$@"$s4@!4Ğt3uV$uſ tVpI}YV0 <"o|k7Ȯ5ǽi')ze?ѽB&RG@~*R4춸|Js>Ul D@<*X[a.XwVW=Kl>= U==9 덃A pRgm] @Xv&OQQZ{DFH}l?/[J#`E `~缈fũ5h~}%vÇ^2"_x-RgB '}5<$ ?Oϒ+N9k_cGFZ\*M)F55}N6|uGi{Yjtp-H[SKw 0FWq_d "I> 9]Pk|R+~v\䟐PG '8becE)m&c㹬3\58vڮ<` W\kSTNSZbɞAn  > c~$ٯBIO5(lbFq^! CTo^% 5b*xD۴T]T'L ғ3ڦo&RYfïIk}O%~ǯ;x,u4e)~3O|rC_)1a5,O1;s+(ŸrR 5}HdOW 6 r-\&?c 1̥m:A0H-'_RP{y4ax3k'W2nOJw?H4>Ƒ.~l_J3 pxF!]h1ߟn&/_- .VXZ ڈ{U1%2FT涘0 a?v3m[]R()(<#P7E:呼q~٭h6IsWĝrWdYkٹerHtZuM;Gh8{+_ޣ0hLV,nlަ2"?[L#k}TPrKsRTR41z.D. f5x4΢N#Ẵ"acɝXSU)C 279'Dؗ-Yr3泅dOg -k\CYl9F: u8Ѐt1(sVׁ|ܲ.QDY0q*6#%h7qgۮdgS-tL #w Bf^(hʪУ-ÿ=@@ ,aPDfDa照ʷyxrYgfKIr{V$XZUGĪOm^Hs4SfSw}gT_ ytR1pOT6ĉ6oVW̲ HrgIr0~# ʸgUcUԖO*9d-nkJ5I cW5k-i=%t7F-@I?ǒ&?/}ý}mS\x\|xKoY\4 bn$a52k8,'޽u^50~=e4q4Ce\+wnოδ#o!ypPdSY:)dG[hotZV(VgU[sv1I5՝NxZMp#CuAM}2 ߏMP˵&Gí:c&vZPQ(^AݽZG2H#m;zh - uŏ8J.s 9@ٙlq2KP` I`<6lqPqrѬG߈\UrLJ4Q0,2XuCqϰX^ ;C{~3."Aԗt岫K 8)j$;|؁+[֚5ZD +ۖskZ=b7DGLC_΢iҩogVХ]|YO1[P#id<(s_* 0Bw8jNGOK uivt+%}M4k]p7d=4!?6X|DzO17SW>dQTS R ^=F$Kثo/;z<7 2"Mh"(u9C.ߐ$|c<=ga!eӷ=<1>\U:feKm8cz߫8ܑ]g-^Uބَ wĤTcWF+LyxÐ>/KJdWhOMT4ۧ+CS)3)x#'De3/Cr7nUg1,Dqz$Ū(,C>Aa%0M^5IH[FL[uL1[,>?7IQ.WvDrKU?USE 133e#))ߎmʟ+mئ>' # F}OTg|&>}̯bw V*Xo: 1C3DZ,;_j(кy8DvoG-Q5Ay[Du"ᾬ o~KY7C#A~=KvkDY̏A֗_ ŻδSr #m ']c&T] ՙx,he_Fru6d%2E!L@>M0\k5~,:A&$qW嶉?)SaSψqá<8&g {֞JWVtADT7՝(Y?U>>Z/3ntDwH֫4E4GY`|5/GYiT-㟇\8弑´o,5z~1l#%A↏D9FB1{hWKPvՂŚǂ1qů|+Jw6dume1ΓWcťzg16<},i*\a0slOw.&fO7&¬^BS!87oDczf5D38ܫX ~oFT;'YRq\29XyJ YbiO/'ZW g: |I$v=rέu Rģ虦MvFPQrO|4dӦ6t[/BJ7򰀩ʬ}!ꎛnd4pME*.EbF?!SDrǥ *͓CAّ lc- 2S")](psB.$kw]C6Angve$;'Ģ5~rz\8#U#zd煋)~$0>BQ]":)AaW:poi;K_xԍ=Yhwy#QLð\T>4%j1/'4@ q |T'D@#"@,&D/<ɓўy! JH1p;-)zy4iI>| i,12z5lݲ ,BWMI *JW4(89d|`.ۦBt,6U ^Ek3nXz;\ޑNӺd $⮢ϐ,Eڇ͘Hn\CbcIE &{Fv]È!:ɂS4!b&lr͸p_v5leZ]*B`Ks d\^ Hv(½+G u6럷]TEg-T endstream endobj 71 0 obj << /Length1 1671 /Length2 11244 /Length3 0 /Length 12317 /Filter /FlateDecode >> stream xڍP.R\ wR,@ P )Z)Pk<{Ͻ?d&׷J]UjBଜlB)mN76nNC!BrO2i P (:8|BB.B@@ `tRPw'5)ϿFs& ?˟I{ @; WFk8AՕ hc:Y1\pk&rrYh @ K@'=8C,@N-e_,/p{ hnwB+%PUfY@@;͞ ,:?c0O,ۃ pI@Opm!PW翐%baG:3HAo'dV 8CKr̭HSoO 7 p'g?089`s8 d`'d~ ~?>>=1 s#fQTe+߾m$Ѭ`>'7wvrzz\ @n spMu`U$+Q.}dH\5Dϸs"$;~F\*|l'5^J"mA4d%zSvn` "{.;+ rD6,!}29e(^]ssPDSmMHtY;e1xNnK7<&N->n.ᰜ 8 iiU,>B!IM&tGo(D.g+, LDֺId-, ζڮ6Kx'H7 SZ̆N-'6ɇBkDB=~Sҏ^T [Ƅcxe9FI&x u}8ZWj.q9PӞT}N;# ᴤ9phU ͜DU4#*lfN'J6I}_QLb5˚V!{p8TH6TyӶsx_G%+Fi}7za(:¤yl@J~HU=0۵q.l}zn_cL+[* _MoӷmH_h^Ru ooHY p6Aպ,t!DsHK8R.0M+E%K7"'53-#4[(9%ncs*0~~bGgoDg" Y YiXnkM4yoNh[^mf re^zSGkHL3IYf Ektj@@ z|ftͅ4\O烮6ѭH|O5/3&aMŀ櫹&h:Uvq{,޳/SVvB'{K776l1xRDb߯,p;eytqǏHSS2.W,Jaҁr ^rt%򫫩;Gݼ +=C 2K_o)ț}!T9v bH\7؉Ϫ$J4q7hXɆR`l_o᧷-׾>IB/[U,,OsXodG} 8\-ݔE{Io*z4s|rN"jX~dg`ċxWȰ˻x'V&w`մS5yN-ʣ|J2V"H3v̹y퉞umHKvŚʣ^R2oss;h9+}vm=gHM}piC2j5,/) I *`?;*?Y ut9BI3`luN؇"{dޅ>Eeҧ _%&7ey>XJ#:gC2R/F`J S~euD7bTGUB5Fu-j-w1?^B"#P89_"WpH(~TfC%;4ɭձ-㚑 g-2Ѷ*PޟwG97?2tb.Z:;f_Fkodϩ^#a}[ꄤQOz7#pUc͑_ݷ{Ɖm6@NeZa008hEa7T$()z2v\\m(UY?*.Kf9ɛ ,TM{>.Ω۟v&'˙VG~@оk4!lWv]8^v^1XE5%WK) Ɍ\F"!'0 {|ׄr?1xN݃fxAC [j$ll"_2Oo,/ꙹ?; 2 + 7L)r}w7b~`XJ.DϪcoG){ >D欉L:r0au=a efWU5q(mD2N gQ'p>DhK|53_IWaѣz5l(Y*G,DZDŸvdISL1$Sb)ujKcVSW4v ֌^&Dk(+oCаm%:d;/ Qϒ\RbB"_ .\o2`=[/x9Ҭt=iL{o-HR@eC;XK|؃Wex:?HWZMxNN [ hU4Z; ;F]/\$lEGL$~v~oD ]~-5(WJyw>{!3Aj*J%TNSTj 2,=<5rY=x`ua^Zh6|5vBxm ! r棗뇞Ͻ 4^#+#!3wޡarؗp]bWei}StH\mFlѵڹ " zUty/ W@'HֻmպHF0/#LH{b\]D-pLkЗ2 K .|-qZjaY\^‡=]BbmFzǨE( ȧES$_+=Z& <@ӿ!/ƚz_MMi/yzpop0"^3=O|u&}c֋N,x1YK?U@ MvMT>WԐad/2ہAm V[uK&1񒝳am._%vvb#igT_vɊ0Q F⦬LTg4.H P u$ڣP-D$L.c dzT}sUF`Νn塂u|L[Xy2rܤv1{.13˰8#WXA3̂2_qi7=Rkz\3W>y;յhȱZ 2Oq;rt8R` ;e{۾ŏ;톐,F{@զqb=am+dG?c%yd9&*.F:Ǐ`a̿7|ఈe4;v%GnW##9nz WrݛѾ}MNudŝK5WmjudY`6U6d J 7YTKNIV^I1e&G HK2}G}c X().E A=Q"}Hl<2 .ԊVl DRREsL9t{R4;u ?zb O9 Pjj]:n>Y3ܕnҋW]93-ܷw"9s777Vv׉Ee_f~7 uP]2I^{aK/cIyEalhNLdz팋JTӗyfhkDg (Tk.+: >[I[J`&hmA  dvL[BkQ}[c3aP4PO&5;Q1ždn>mUOzorcBx]ɻ-U P<XJBܹ45xl2ZυA/OPfee+@}s`w#ҿEcRB\M~^#!~o6nCIWwN+_9hqw+aM_Jϒĵ^RuWy| `݄I~owR8&uDd.Zkj($i5hB1G VxG$ |G56M n'JcՂxX+jǿs/k#&Ä(lCQYn4m?Wh y+Fb`[VGYAs$3mf}C)+ֽ՚7SrŘI6=@v \dl3 J$d087w+YpRz[t-5AvT? Lɋ)sf/ڲٹ?˜ P.E+is1ľ~O1;V<{~ Kר[\ =_b$2JQͭ"Ju^<#NE)r#;hxwuwy.і&{z*ҭ@d5BzHBp14l^]FBCDŽ.y&\*w$e/LR_-\Me=x:%ٳPEGl<+-?'f޳*M u2܅Mo'W"U䋏W2P&K-砟1yi"LnBߎR]n韔.F`YJff$exG2<( ۖ]/01I"iL؇hjnLr)rFl#JMx M"[Ll KAC&O:mKeK?F; 0x[CEloniU (E`qX룰QcфuBVqhY<.dW1|s' VgY e/bf]鷅IGu ~F?u85Fމ5B='uFi~{^ v: 2FS]8Y}/ɅP2 Si6Eq wZ 4w9eVbgTK/=\C k\г P1oGBd3e*:  ?H$\oLgl§\A:#%Y'zZ5žo i`b, v% 9++_Tc}YYd>/ ZaT5P 0i2IälVlUlI"/J6_@:(d\ʱ6macڣuHHjg/ ͺ7=vba:eEGwP=pPI.xi@Աq1 bP(ͼ: Fzxg.-9u*#zR} ckNK`M*8:J#86(TI*c$@5rk:u;6-ș>"h۶;WX9iŠ Q{}ߎxp9VSjsVȔNT>q%fF0O8f֎3KgFֽ>#?Q˫[)ZGsaڐ.T h,Y%cKHdTd%\~o7В| i9A| {0k[䢷hYu⩲R_oh7κu՟nr=HQEf2'`BK@n%GZ 9w٬VbNV"UMfKq뿨!sK m`+z܂"ah!Ajyݹ蝟5CiJ\PCvΜϬ[O[bB'sadD%xn!튙="&|SH~p)y@%J 8 ۑՖc7 ܽ Z^0=G/1PA ~ @x%zb&f˗C{ǃc2kLUj("V84UEFƐAxˬNY&6uɂ6{i2vZը%+QxZG'M{c5&x,y?݊!S;Ь&N!i'^iϮ_7;HDr ٬B\B"ݳS(]y3=uՂ!avnYM[KS)F;RK :Y?Nsټ?j5Avi9w@2)Rim%C;K5$J Z^ EXzv&*tcRVZ(b "MX?yMr\Q`w:j'n;>lEdو2ΞG:$^=ϵ^&i YI*YdDvAyw&?r=7:&Iur(ڜ%Ⱦ3%$(XʂnVU=+5_fZv!eh"z|'Tp۞t _daDg`UmP~H-Q'8C\mdQeī:NJ+!4rrRD| 8l 1 Q4+3+ Ax2ri PiP8$L6ݴrwACWce,,3z?23No}mށN&Q߅r-8tx=G##rK 3%=K 緼oO ?;m``d&>b/[)?o̸ˣ?Җğ xۼ(t]ۤM-Kdw[<6[-Gc946Wm 0o+{h+;yʳ)ב:. Z&Zb(}ӥQqjS?o/k2jz= 6Ѥ+g)Oa \Gg~nu,kRn@r<DCuK+3HT}S =%48K  !ȹݥX{=Ѝx}XX, |}H]|[mjfT]L۲,?1E pTL†XKQ'I*~0fPe!!WҫfהVisUoB-C-ϟ-q(?Y1 fZ~T>U'"lz/L&1חX SfԻqFd!}`C !>#Z+Vb6,4WJKJ@]_.풢ې5 GݤXثr6vS.̬;iKC]^f~i)`Qq a 1iptүg1Grsiv=Z3J&۲[vqV:PɨIzn٦r!;s:ӡDM2|( ^=9"0TQ4m7^WȡzC4sr6}%C WJn]K~Jc-Şy?L{qd"փijtt$/TT{~e`aj3#ĨrqBB:Tkv̈́[XxЇïiEX Q~XPT0ZUjvh)Ɍ n`-8gsb|)P!Ah+(0+{K_=h6/r`@@F2afqopct*UFQ5u"9oB'uwbKT#H ʡxԶ}W|e܃%ĭaD2%uȬ޶{b?ʣXvVV%m3R7?Nn2zv _^7^rtĤ1J!ǎPeJIQc4 EWdڷTAŕ_VåD0{rZ?VIQvc[7'eKQ &:RkQ|؉5#G;Fg9m~2Ba/厰PFª>P&ufTK$x&6!_@ad/xSQ'Vkٛ|[r>RJa.FU4-}2`/4KDND wP\۷zD2, 皛 0_;oQ9\lhr!gk`Th(Vյm7~>S=TWtމ뤚&9b9"B2"EЮ/k"ÉV ?.{vfq_\^˅rXYZ9pz jVnGh+c" 9^֎C2C3i4 4 M@ެ"JNүW^ݐbMPOfVr%QIRoWt.F1ԋ +#5V{! She(i!-] MCBRPh/'>qIxC໥w_.Y߯*R>,1Dr8Vb]؏rQ+,,:5K*}m]n"g CTђ/> wTlGle؞1fiiTnΩkuTUIJ EUP=(ٕ'{)ckO18_/M1-I;Nܓ_q]ⱙ}E'<[B6+ʐ4y9YyxuT=3Nh6If<[gv1>fȃEX,?N 10%_Տ^ݢj$ldzzr+-NF~[2aFyzb~vC+}Ļ -𪸢XSM']y|?"&󖵻[Wx"[퍺נd!KM+n-g+FBReutI) )+%9l=9([Lp]SpD 2sp&ڻ$(+K悫q/1ளwCZzE ̯1Vr" h0޸[0#(qg)˲0 ,P+b`&GYDƊ5I%Q̇wꀵ@^»7'Woh/Bc/s3c:Ցuޞ+ WJ̃75$f?_ǭˉb$lŪN*eg4mWm &sɡr:L!Ǿghd,{<2ˁ9UXAo9f}gܧPlwI(P#+D?9$α$~1T:$RӫkȆ0enǯ\!= ){% P_ r\61oݹ3.$W}Wox?oQ8R]2} endstream endobj 73 0 obj << /Length1 2008 /Length2 12985 /Length3 0 /Length 14214 /Filter /FlateDecode >> stream xڍP\ 4www]w Bpxso=Ϲ\HQNL΅ "`ddgdd!#Sr1Lގ_"NfF.2Q#C9{; `fd7@ G3s!wttG /w@# @BPZ8p30:;YSܭ\,ffNnf-li jiB !21spq35s|dH6ۀpLL @Vv9:yZY̭l ..#;߆F6FnFV6FnR}tO&NV.V6{dcbv"fv.0r23'??w jvVfR|`,\l,3G%f)~?zvwakenlfpqr5 `lfae'oqNV10S{;?14?-W),lc1X8\hdO3p]ǔS? g=Kf?4edc4bL\qwWߊ]mlSm7⃷.; g vTŕ33rZ)] ŭ.?_#ٟ~#G1_#L>Z)sKOˏKŇ_ghP~<(;g!X8̓Q2KqWӿ*fp(OM2s;n"1303Y[7 nP'Nw8ͷ@vAEJUK(uic_Np 2#Y Qyfucx\qNUG=h;p4Y+'bGPŷɰCZvؗyXE|/KX.tP(wPrg i`|/bYw6T{IAP&ȽOҤ1WJbVr聶'}&zsJ`28qILv62jAg:P78#`јK( CG8јʹC{ziɜo1߃Ch} wEySdUNZ=`=sq5\)vY (l,UZJg {]\I Ng/wwfO)6cVBkU h9r*dHu_OɅT?"X4Uqژ@ rQąS,rÎ%b.PEG힁9ekzؼ IMXaj۶%#tI xzCԪsoF^v/3B`[cu2675607G Z _mq6*4/}cI+Pڐ{VPDL ӬmHzA;Ҽ[q$Z6-AXkn~ ;n潮%ew&ؗ\)>϶xó2s g^BJ 7#, N9ܽF#_{2؎`}%k a sFY3ESPzH~ԃ]i(݈=fh0L 2@iWB8rd _l$(@(e륔L=nr/B D`Άɳ/o&|0˰F+y틃oŞIC*Vy Sq eҤO۟@T{WQL&ARѻHY:&EP39^tȣA p p)^91޶; =rBnjd9u}n؀5w.E]DVuC{l)]SxPls.•*^zQas czw И²>4{CrCYXۜT B5.\$Fvar?5Y D n&8y)&Dck l]}f$'?~ҔS}MkXs]Vd Ugq/PͳU8^ >ϼ 0K}LHTb\%,eҙY&7ߖc8c_4C3v>1jϊE R'M:Y2Lkî uv.TE zAGc*2޷]zL]qCw\ҟd,}/KNvAa҄go3?>Wjmѭ`ݓޅS~Da4\.MUv۷Y!}~3t aJ"-˄!*4*J|c#z:ަŁk~%/Mlʡcmv;v w>'9n~$ CB}ʗ}\\/osOP~Á@0%S^R D!m Ae y'@E{b}G^/XWiwJµ ۩Vhb%Q~ T; K* ضu6p-Fjܬl^tф˪|JQ0|v_n&GރMr6+) =&x>a0Px4fv3 ҍXw teϚK^J(jLj§h\M3-sq6: Xu٠^OJr]}x+na𸮷s>`G ;cѵYe_ pR:D/jQtDPDn 9z֢EnI۵fK S>32vվIJ]^be"Dyʊ)5ᱍwxcTr4.WRP,Pm? `n( :P+n>Sǝg.4 :uKΦp-: p85J)E4~v9 6Xa7,4+7T5F'ޝ€;YYr8O씉5"Rs?9KDWDZ&%,E"u nJ"uIY*403dbB) LSV!ag&;X5-DB&^Yncy^w~ŗ\}Ocz bF {VeO.Д :><"%@zFNKw!m _E0~E*]DjJX.:ޜr쑕:2I)N76ɒ:S ou_Է듨/|]ITxl/;MjYb4:V`[: -BQ. F-&j8m7٨gF .ΰ~z,U9#? 8@YQ$eqs Wc{nFxm.4uKI93|R37HҸ1?h_bQ֨7ӓDgT/r_#;/%XŬru&wh BH]~U&0ѷ-,̽zTf]omcLz- }I-tj$6rigl< X2^8T gN ZXˢlfmjJĉ/ _@&2؜^S[ϵӘ 99K bSM8 /K_Y?;_S:ddqPPmےGjL*-r$SU7Z h [MJl!n@zރAỐW{gc WALQփ6˫<>K1Ɲ.=%<Ԋ629)»Arި %ɷ)OoF^u΃y5:50T]zTd{% 9O+Dy]Fi ̕HӒX>p0.*1RaJ^;V"qnC [v$ڬԐkxǖ^ ?MM!N^`M쒼|}F̨݈BP9ŸpƳ> l6 :4'~NTB_e)~1uḔB4Zyiguuؕ%^@E=$s㮃v;ԾCޯ.}oP/WYdkqs{AG+t&$ +_<<^8<)un]\K{gb D.>ѬD7?> wM>٩k .Sͣ?ras%@iH n~tR˂#Dʃrj?"fF^= qrBe˭p*C୔͞9 r)Vb uwXaYqc` \IX. =={Pw-ȫAtõ|))զӃ N'mB;Eye[O5y 6_.XM:H"m+gTѤHhŤN /8Yw%R%x/5\b{MRӚ' g>e?I5tr#ZY%="Gujp{6 8OzJn~vʙ[)5c l'֘k+.u ;w`3p3Ke+?15A + |[N5Ӹо덺?(:jbbx=ky|^A`~t~+˜ɟ?|ȆRPq5f׭8[@ѢtmY1I[uFwz ~^ʣ7";Y#U:_Am|,nMbROiɝ6+LΤ^ײ|r{gbfG= [+&-SN .4qR\:V{ >7h9AUsp 1ՒSN֖&vlo< o="zYG/= GMY8PY-0۔sE5LcE1ԬzZ;o#.%#Wotu2m\eDM'@c^"ϳVai%>M916B yŴN_ZUH6y~[ѨB"ăYR?x?0ӵ7hZ[Uz4"l-1xe XrcxOO6vA͏GH/g%b4!f_|6_#\8')772CZ15%r?&O'Ҟ4Ly:Oʻ1T Z؏J Zt/$c1<йH*2iv4cۖ$rTRAWXBaXxͼW0H8VE NzKнJ{ \.LQTۀ!u*1k#o-JєuÙ~~D'5H[\͛O0& wh~k[Αx{ebF7J9AH8 3*ɻ !:u[X4A!!{Χ`foIAܖ:E]c2p|om|ڋbuU'J6ި67-~b= bAIC=)~M QP:P`"FZr{$tflQ9>2k¥Sc'/:r>fWy/% % "h{j {aKAh*FDNYa&m22U!Q։֜=w ()G0M+5}À{u^J %KL+f|p5Q;Τk\6EȘ UluؿFia w,S{~ciM ;"bpٚ ꈸI A]6EWU*8;#cƌʨI˷qYCGk~&/<s-"LuPr4Ŗ]N(II={.X[+>[mRYvp'A%-6:뒯svƹ"=FKO^uw1. >~M!mx_kY%LZ-(DglgۺB2ݧ魳N $& f=}MALQܓXbbKEAPH~?6P!r072}} JlD0]+,;CSyx)%j"Pkl3z|[Xך6aqDٗ&T`)8LfzʍO-ބm Iܵ'_!@8ro| iK!GlR?2VdgR rS"Hl|=kVEgNqAWIr$I,h4Uyyjs+薄xv sonǸ,eפEtvB:ҁH ʪ0V$894զy_g//]|kFNum;g~̉FeB(#⽵̻XZV*+)K vFw05`dDC_ 0 A+ cF>\3nBan<#5{jP `~\9)b`n_IQd9vZzsC@7kn띧$bW?lݹSzfm) i2y6Y1"HU*4ybI"ӵގ :iTUVwGvG:@M?.#ϭ;r+euc&3uQZWJ9CHJ%~l@>bxY W!1a`ܐg̓B#9HY!Õ/pT%?wg+6ɿެ˃XlI3O;73ZHtlx2COJ(ܣGHYf*m1ɾW9,({xŎp>Q r#gE,U!M%[[hMzpnW0,:ǼMJ$zw:VotXY!Cg$9LžbX]un}0/8rm?D Ԑ3_R}+aK h\\<G|їt!m/PY: ^S ;۹ l-ykDP}$*4s.'$3W+jl5{ր 4-**Dѳty'Vͅy=ˮg?Q*S>r>:ԋ kH v̂\P*ן4AjUeK놼>4cc,]nRPT'7f xL5 GLH PuP+Q__>fEĻNF*~K&8Siekg%T ./u]20 Pܔ;C~y>HvvXʪN9Xg:],9r*HI1ɎBWLٶF)ml EQzܾ) khVuv%U%Xnn:ŀ&DtMVX5>'KB<_?' c4>b#)I9.Lv3^NfrZY׷:Q@{wY}Ԡ}OEb^_>_ endstream endobj 75 0 obj << /Length1 1712 /Length2 4326 /Length3 0 /Length 5385 /Filter /FlateDecode >> stream xڍt 4m~LE(EZ}_B5f1ØaL/Y*JȞ"[JBv*ߏz|ߙsf溷纟!~3KquC$P%%JKKRP!!+m C8"AiG& 6-3&*$$p@ W'HR8`, h2THJ#H@RQQ^l;PwApH0FPhD$X84*X U @%$3"b,d4L._I@+,nIP<$48$@3F++WnI ?~goH$AG:FO x2G#px訛푑$+,AZmoY$ 2tFN3A 08  ;KQZC@Mdp4@hO$UފvJn\là($*k*) pH vf4OypP{|=(/ ߞ/L诎44, .%-r!pIf0D@W{¿WCw-"Y4 WvpY8? };*KHo~R@% 7ke(^} \u#5:8O4 GAb|vk8ڌHm)$WHg zv$_RrDBРpPFR$(綂HS;oC$A([m$)%B22£Z`?HVDD[{Fўh$tTr* V!>.%sK'm. MioԟG NKem>q9wj|ґ=bW;YOORㆵ.KPG-^z,p-%Nꪜ(g8Y6#F~j=5/jL7HɎ6ÍLMp5\J:ssNGS6FpRUQaţUZ/YF08럍DM`[oeV9՞UZolнp>}cU#Q$&(P𝎾5Xca[vҽf/M;HYyJB+dU%fH ;U_-B|3͸ ɧ usU(\nFٓ}(>suOCS0:(neѨ<9ݣtq$¦?ĎhFA094e"eXʸ)S]/1{Q2eXZ~!:/;MY.8%`ЊYxęa:{gͨI/R2U#I\ N<gbeaFq@$5XCtL"ʣ/+Oy$q~ ~(R-Q%Eɹ]]w+߻PHGFs ·t?Vmq lo^{ Ks t4,yf\.ʠ|b'aUF +W kr^{w]ҵOZؐߣ|,{&+%:0:Ӿ/|hNHgp%Bs3:'E"r\rIKqA;Uؽ^>żԆls>s/kRlu;SmDoc#R"y{33HUf| 븈; aAcWC Q)dY`td7QY'C8'}u:=]׃ o}NzⱙF|M[L^ZށN՜MtdZurvc998d&7Y PB=+ Ic=O\"^D;!-|^n`:lѵښKC7S3õ>{k-XS-8N簹z&xPi`@U7.O}Xe8+^nBk/`qs/J[pv%"aA-=6k\(iRIC83|Պ~z`LTIă YT䩙,?1'kJJ8S\V d[UƇh*t `ȕP9FBɯɼn \뤸#\W H)n-99稥/۔5)"e婤s;8kz#n痗E{k5k)\JOa,_Q}8Yu}2DuCD8W.Jbʴ)!bo1usV|rr'* ؜߬ fq鐅 &$ap^a=G&Hz'CLn]nbno-)ܯ.^Ź^*ވf3ow0)^G`k!b_T/}N->J^ToibTCvz=ܦ-V`*J"LeS-Y/+߱ t¨'7~GrC 7/'U 4 /J7+5͐tT]*׬6'V~Lyge?t9KOWоԱ zZ,9Ub=֎b&zSW`qSp6󡔥%nn~ZVUUtyZĭy6,c湂er>Ѵgbx؏qT eɶ4DB9!tv8sۋ$epS1?MTmE{QLƒk? L{֧:iƖ = iL$IJAL7zI-YkUؓ+ٔ̓Q#kBs. 3hKgr1ӓ{f{߼|AR_i`坚1CߗQQsUy)i.LJpKH~ [~lЬxZnrl#_G.J×rN*5,8>b}2-rP&8-Z/]O QJb>VN WqwEKژI1c{[Af} Z9ʍeWtީwݞ.r3mw,19 wZMG\H~?jZ 60>O?TsY]X^ Dzn{I> "5H1hțč`K4\Kz>|&Re:&TcXմl ]ž_kYggFq7 kS5Ve'GqYțjg4xҲ>dշE▾2 5j;-7(?XX! /6 0Hfæݚ]Dڍ2B0Tg=x!Ք9kUh)B!lhYo 9AHǾt1m'"\g,GDIt+/d~xl f3QHÀ+dse9fUv9O5?kk1~Vc~3P?#x#~=O!ݐS۹qh|~AkB7oz+lZƯq M;MSxZq/qҀ\6MS4{Cz]DO-T $y䮮|`a: ꏩ.+W7ĉru$\XCI|툭h%νkP[D(y$i y+l$Qй?dמkK(E1)<d 0jt)RcsL˕2ckek)1%X "^{8:fۼ-*:s{fMBCI~NͣluMv !eJ'gO]**҈q.qds!օ(nEF#vsӥ6(wTKXqX2&/Y(hӗTݧV'Jۚd䞴LgY+ &s0>1# yxxnx=_֛r & 98TŠO^,qǽh*̋T2K|+g#,&ģ9xZ`ѐl_XdW!1yc[w$MWp9Ou"O9ǘgO-w&J7*zϲWg(sz(?=1Atͮ@, ]*;)TC2h3FzndM[갞L{ ]Ytݯ.ħs@=$t endstream endobj 78 0 obj << /Producer (pdfTeX-1.40.20) /Creator (TeX) /CreationDate (D:20211026171136-04'00') /ModDate (D:20211026171136-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 16 0 obj << /Type /ObjStm /N 57 /First 440 /Length 2805 /Filter /FlateDecode >> stream xZ[S~NźN*@dsa\)&16I~n1؇S5R[uՒG3Ȕ3Lif02t0%陊,Z L zZ1)iä wTIa\o@~#ۚV&Ff@D"LP2dk tD o Y ",p.'L贠A60'@bEsK kc{@❀B1oxp,X|fG@8ز(a, t=iJL@7-!0@8DJ@=V 'OzUAvd\j dV)X^"ۚ|g'l}36i0!ᅮ]`ʞW gdXq m$2EZ6h?OeNqvT 3_M|N ~^fr fUE9]*FÜ_fr2h`H6bI5x ,8eƋ<+glVd MA~M֋a)yGss_ ܿOU!UptB'^>ȰfCakl5Zt@ AػЇ|_A|t}_Sx4>ս}Ne-!QR#i8I͢7[ {,Rﲭ9[Y@Ҽ]H+pnZѧ^z}H{Ue D[O]?ltMAwͶ NNɦE9/5b{9y" hyOq{`Ҋ:Lr:`5 ӆ*v2aZ) /zzڲZMaԉBG̭t$~ ޤ@rR,G{8%[zIިݥit$Jd1j۳F'2ŢmL+"PÃ`*Ere[8(Y1 : t]:ߊ%Y1z7[I'fX3!Q";I:*5l@xCKP蚨UhkפQz/y+A7Rit mq Ԇ9z* :af8th X!6&Wu$& 6(SfuxtRiRo$F1QWODMzljȚZW[il'hgmQWws|:(jR(eT_zW[R@(;==v=V59)ႇ<'ˋ x {,sF|3`TQ XY)W,7om_7<>\^f|s~ { K>>*/ɐ|+^]yΫ'|ƿwQjX{;8xzȈ9F"ހF.6 rgs _d5h{>|ɸ"E( ?.1WV~x?j%nGD0H4hiOGbiKnZe,v|u740d1^UV@sx`E_98|M5[+n(nuSqT|E«VNnՇ޽EJғQ?9^kN4Dݏϟ6kL\D7fxfw6j8E/FVghQÝ"mXv aNK"͟v޾^=gi )wt l! Rm[ xC, [e^vvB|;+x灻F틽:], sGz,ǰmWcXRŬ,sLr8(0>K^O79"@nBq+:(}z~0^Ы4W0)tP)gdEAh5kG+ooliI[+6tu|y퉊מVm.FwdlLWVn.e;k1֛$f٪+fs#ڬԊ%n:֒lJK:W̴nbs7[M Kwvw'Ֆnﰼ[ZG5[N^u7&k $AzG1]^Q1&19%~ d% endstream endobj 79 0 obj << /Type /XRef /Index [0 80] /Size 80 /W [1 3 1] /Root 77 0 R /Info 78 0 R /ID [<2A0B8A263E35D643A5E3F257A83F855B> <2A0B8A263E35D643A5E3F257A83F855B>] /Length 218 /Filter /FlateDecode >> stream x%K2CQz^ICa Z7C1hh(|]TI%)7R 03(N ΝQYHV ` aJV'0g5ocduc2*:lXۄ*Ԡ[ ;Ѐ]w/CTz+&ЮZud?dױ_=9e}9՟q endstream endobj startxref 138140 %%EOF ctc/inst/doc/ctc.R0000644000175000017500000000317114136067410013577 0ustar nileshnilesh### R code from vignette source 'ctc.Rnw' ################################################### ### code chunk number 1: ctc.Rnw:45-48 ################################################### data(USArrests) h = hclust(dist(USArrests)) plot(h) ################################################### ### code chunk number 2: ctc.Rnw:51-52 ################################################### heatmap(as.matrix(USArrests)) ################################################### ### code chunk number 3: ctc.Rnw:61-63 ################################################### library(ctc) r2xcluster(USArrests,file='USArrests_xcluster.txt') ################################################### ### code chunk number 4: ctc.Rnw:66-67 ################################################### r2cluster(USArrests,file='USArrests_xcluster.txt') ################################################### ### code chunk number 5: ctc.Rnw:92-94 ################################################### hr = hclust(dist(USArrests)) hc = hclust(dist(t(USArrests))) ################################################### ### code chunk number 6: ctc.Rnw:101-102 ################################################### write(hc2Newick(hr),file='hclust.newick') ################################################### ### code chunk number 7: ctc.Rnw:106-109 ################################################### r2atr(hc,file="cluster.atr") r2gtr(hr,file="cluster.gtr") r2cdt(hr,hc,USArrests ,file="cluster.cdt") ################################################### ### code chunk number 8: ctc.Rnw:113-114 ################################################### hclust2treeview(USArrests,file="cluster.cdt") ctc/NAMESPACE0000644000175000017500000000016114136046747012406 0ustar nileshnilesh export(hc2Newick,hclust2treeview,r2cdt,r2atr,r2gtr,r2cluster,r2xcluster, read.eisen,xcluster,xcluster2r)