Biobase/DESCRIPTION0000644000175200017520000000401314516024030014637 0ustar00biocbuildbiocbuildPackage: Biobase Title: Biobase: Base functions for Bioconductor Description: Functions that are needed by many other packages or which replace R functions. biocViews: Infrastructure URL: https://bioconductor.org/packages/Biobase BugReports: https://github.com/Bioconductor/Biobase/issues Version: 2.62.0 License: Artistic-2.0 Authors@R: c( person("R.", "Gentleman", role="aut"), person("V.", "Carey", role = "aut"), person("M.", "Morgan", role="aut"), person("S.", "Falcon", role="aut"), person("Haleema", "Khan", role = "ctb", comment = "'esApply' and 'BiobaseDevelopment' vignette translation from Sweave to Rmarkdown / HTML" ), person("Bioconductor Package Maintainer", role = "cre", email = "maintainer@bioconductor.org" )) Suggests: tools, tkWidgets, ALL, RUnit, golubEsets, BiocStyle, knitr Depends: R (>= 2.10), BiocGenerics (>= 0.27.1), utils Imports: methods VignetteBuilder: knitr LazyLoad: yes Collate: tools.R strings.R environment.R vignettes.R packages.R AllGenerics.R VersionsClass.R VersionedClasses.R methods-VersionsNull.R methods-VersionedClass.R DataClasses.R methods-aggregator.R methods-container.R methods-MIAxE.R methods-MIAME.R methods-AssayData.R methods-AnnotatedDataFrame.R methods-eSet.R methods-ExpressionSet.R methods-MultiSet.R methods-SnpSet.R methods-NChannelSet.R anyMissing.R rowOp-methods.R updateObjectTo.R methods-ScalarObject.R zzz.R git_url: https://git.bioconductor.org/packages/Biobase git_branch: RELEASE_3_18 git_last_commit: 8201fbb git_last_commit_date: 2023-10-24 Date/Publication: 2023-10-24 NeedsCompilation: yes Packaged: 2023-10-24 20:24:56 UTC; biocbuild Author: R. Gentleman [aut], V. Carey [aut], M. Morgan [aut], S. Falcon [aut], Haleema Khan [ctb] ('esApply' and 'BiobaseDevelopment' vignette translation from Sweave to Rmarkdown / HTML), Bioconductor Package Maintainer [cre] Maintainer: Bioconductor Package Maintainer Biobase/NAMESPACE0000644000175200017520000000606314516003524014364 0ustar00biocbuildbiocbuilduseDynLib(Biobase, sublist_extract) import(methods) importFrom(BiocGenerics, dims, combine, updateObject, updateObjectFromSlots, getObjectSlots, annotation, "annotation<-" ) importFrom(utils, head, tail, menu, packageDescription, read.table, write.table, .DollarNames) exportClasses(aggregator, container, eSet, MIAxE, MIAME, characterORMIAME, annotatedDataset, AssayData, data.frameOrNULL, AnnotatedDataFrame, Versions, VersionsNull, Versioned, VersionedBiobase, ExpressionSet, MultiSet, SnpSet, NChannelSet, ScalarObject, ScalarInteger, ScalarLogical, ScalarNumeric, ScalarCharacter) exportMethods("[", "[[", "$", abstract, aggenv, aggfun, annotatedDataFrameFrom, annotation, channel, channelNames, coerce, combine, content, contents, description, dimnames, "dimnames<-", dims, experimentData, expinfo, exprs, featureNames, featureData, fData, fvarLabels, fvarMetadata, hybridizations, initfun, length, locked, makeDataPackage, normControls, notes, otherInfo, pData, phenoData, preproc, protocolData, sampleNames, samples, se.exprs, selectChannels, snpCall, snpCallProbability, storageMode, varLabels, varMetadata, "annotation<-", "channelNames<-", "description<-", "dimLabels<-", "experimentData<-", "exprs<-", "featureNames<-", "featureData<-", "fData<-", "fvarLabels<-", "fvarMetadata<-", "notes<-", "preproc<-", "pData<-", "phenoData<-", "protocolData<-", "sampleNames<-", "snpCall<-", "snpCallProbability<-", "varLabels<-", "varMetadata<-", "assayData<-", "se.exprs<-", "storageMode<-", "write.exprs", dim, dimLabels, assayData, pubMedIds, "pubMedIds<-", isVersioned, isCurrent, classVersion, "classVersion<-", updateObject, updateObjectTo, initialize, show, Compare, AnnotatedDataFrame, ExpressionSet) export(Aggregate, addVigs2WinMenu, anyMissing, as.data.frame.ExpressionSet, assayDataNew, assayDataValidMembers, assayDataElementNames, assayDataElement, assayDataElementReplace, "assayDataElement<-", cache, copyEnv, copySubstitute, createPackage, dumpPackTxt, esApply, getPkgVigs, isUnique, listLen, matchpt, mkScalar, multiassign, NChannelSet, note, openPDF,openVignette, package.version, reverseSplit, rowMax, rowMedians, rowMin, rowQ, readExpressionSet, read.AnnotatedDataFrame, read.MIAME, MIAME, selectSome, strbreak, subListExtract, testBioCConnection, lcSuffix, lcPrefix, lcPrefixC, updateOldESet, userQuery, validMsg, write.AnnotatedDataFrame) S3method(.DollarNames, "eSet") S3method(.DollarNames, "ExpressionSet") S3method(head, "AnnotatedDataFrame") S3method(tail, "AnnotatedDataFrame") S3method(as.data.frame, "ExpressionSet") Biobase/NEWS0000644000175200017520000001254114516003524013642 0ustar00biocbuildbiocbuildCHANGES IN VERSION 2.37 ----------------------- BUG FIXES o '$' completion on eSet and ExpressionSet works in RStudio. CHANGES IN VERSION 2.33 ----------------------- BUG FIXES o exprs<- enforces value with correct dim, dimnames. CHANGES IN VERSION 2.31 ----------------------- NEW FEATURES o tab completion implemented for eSet classes o head and tail.AnnotatedDataFrame methods introduced CHANGES IN VERSION 2.27 ----------------------- NEW FEATURES o Add write.AnnotatedDataFrame function; request of samuel.granjeaud CHANGES IN VERSION 2.21 ----------------------- USER VISIBLE CHANGES o channelNames<-,NChannelSet,*-methods allow re-naming channels o NChannelSet validity requires all assayDataElementNames() to be levels in varMetadata()$channel. BUG FIXES o Updating an AnnotatedDataFrame no longer duplicates metadata from partially matching column names. CHANGES IN VERSION 2.19 ----------------------- USER VISIBLE CHANGES o dimnames(), rownames(), colnames() and setters work on eSet-derived objects CHANGES IN VERSION 2.17 ----------------------- USER VISIBLE CHANGES o l2e(), previously deprecated, has been made defunct. o All objects made defunct in previous release cycles have been removed. This includes geneNames, getExpData, eList, reporterNames, getBiocRepos, read.exprSet, updateOldMiame, df2pD, read.pD, read.phenoData, exprData, exprList, and phenoData. CHANGES IN VERSION 2.11 ---------------------- USER VISIBLE CHANGES o 'l2e' deprecated, use 'list2env' in base instead o MIAME class moved to subclass of MIAxE virtual class NEW FEATURES o Added MIAxE virtual class to hold experiment meta-data classes CHANGES IN VERSION 2.7 ---------------------- USER VISIBLE CHANGES o 'show,eSet-method' summarizes protocolData, if available. o 'snpCall' 'snpCallProbability' accessors added for SnpSet. BUG FIXES o 'selectSome' returns short factors as character() CHANGES IN VERSION 2.5 ---------------------- USER VISIBLE CHANGES o 'protocolData' slot added to eSet class to store protocol metadata stored in microarray data files; can be accessed by protocolData and set by protocolData<-. o 'sampleNames,NChannelSet-method' returns a vector when the sample names of each channel are the same. CHANGES IN VERSION 2.1 ---------------------- NEW FEATURES o 'makeDataPacakge' method for ExpressionSet now accepts a 'description' argument for the generated manual page. BUG FIXES o combine,matrix,matrix-method would record 'NA' for entries in the second matrix with niether rows nor columns present in the first. o openPDF now checks for NULL or zero-length pdfviewer option CHANGES IN VERSION 2.0 ---------------------- SIGNIFICANT USER-VISIBLE CHANGES o 'combine' on data.frame columns with mismatched levels causes a warning, rather than error. o updateObject does not warn about duplicating locked environment, unlesss verbose=TRUE NEW FEATURES o 'combine' now works to combine rows of ExpressionSet BUG FIXES o AnnotatedDataFrame 'show' listed additional varMetadata column names incorrectly when labelDescription was not the first. NEWLY DEFUNCT CLASSES, METHODS, FUNCTIONS, DATA SETS o Defunct S4 Classes 1) annotatedDataset - class definition still exits to support phenoData conversion 2) exprMatrix - removed class definition 3) exprSet - class definition still exists to allow conversion to ExpressionSet 4) phenoData - class definition still exists to allow conversion to AnnotatedDataFrame o Defunct Generics/Methods 1) addVarMetadataEntry - S4 generic definition removed 2) as.data.frame.exprSet - S3 method removed 3) convertVarLabels - S4 generic definition removed 4) eList - S4 methods remain with .Defunct messages 5) "eList<-" - S4 methods remain with .Defunct messages 6) exprs2excel - S4 generic definition removed 7) getExpData - S4 methods remain with .Defunct messages 8) geneNames - S4 methods remain with .Defunct messages 9) "geneNames<-" - S4 methods remain with .Defunct messages 10) getUnits - S4 generic definition removed 11) getVarMetadata - S4 generic definition removed 12) iter - S4 generic definition removed 13) reporterInfo - S4 generic definition removed 14) "reporterInfo<-" - S4 generic definition removed 15) reporterNames - S4 methods remain with .Defunct messages 16) "reporterNames<-" - S4 methods remain with .Defunct messages 17) split (for use with exprSet objects) - S4 generic definition removed 18) update2MIAME - S4 generic definition removed o Defunct functions 1) df2pD - function stub with .Defunct message 2) read.exprSet - function stub with .Defunct message 3) read.pD - function stub with .Defunct message 4) read.phenoData - function stub with .Defunct message 5) updateOldMiame - function stub with .Defunct message o Defunct data sets 1) bbsym 2) eset - use sample.ExpressionSet instead 3) golubMergeSub 4) sample.eSet - use sample.MultiSet instead 4) sample.exprSet.1 - use sample.ExpressionSet instead 5) sample.exprSet - use sample.ExpressionSet instead 6) SWPD 7) swrep Biobase/R/0000755000175200017520000000000014516003524013341 5ustar00biocbuildbiocbuildBiobase/R/AllGenerics.R0000644000175200017520000001624514516003524015664 0ustar00biocbuildbiocbuildsetGeneric("abstract", function(object) standardGeneric("abstract")) setGeneric("aggenv", function(object) standardGeneric("aggenv")) setGeneric("aggfun", function(object) standardGeneric("aggfun")) setGeneric("annotatedDataFrameFrom", function(object, byrow, ...) standardGeneric("annotatedDataFrameFrom")) setGeneric("assayData", function(object)standardGeneric("assayData")) setGeneric("assayData<-", function(object, value) standardGeneric("assayData<-")) setGeneric("channelNames", function(object, ...) standardGeneric("channelNames")) setGeneric("channel", function(object, name, ...) standardGeneric("channel")) setGeneric("content", function(object) standardGeneric("content")) setGeneric("description", function(object, ...) standardGeneric("description")) setGeneric("description<-", function(object, value) standardGeneric("description<-")) setGeneric("dimnames") setGeneric("dimnames<-") setGeneric("dimLabels", function(object) standardGeneric("dimLabels")) setGeneric("dimLabels<-", function(object, value) standardGeneric("dimLabels<-")) setGeneric("esApply", function(X, MARGIN, FUN, ...) standardGeneric("esApply"), signature=c("X")) setGeneric("experimentData", function(object) standardGeneric("experimentData")) setGeneric("experimentData<-",function(object, value) standardGeneric("experimentData<-")) setGeneric("expinfo", function(object) standardGeneric("expinfo")) setGeneric("exprs", function(object) standardGeneric("exprs")) setGeneric("exprs<-", function(object, value) standardGeneric("exprs<-")) setGeneric("featureNames", function(object) standardGeneric("featureNames")) setGeneric("featureNames<-", function(object, value) standardGeneric("featureNames<-")) setGeneric("featureData", function(object) standardGeneric("featureData")) setGeneric("featureData<-", function(object, value) standardGeneric("featureData<-")) setGeneric("fData", function(object) standardGeneric("fData")) setGeneric("fData<-", function(object, value) standardGeneric("fData<-")) setGeneric("fvarLabels", function(object) standardGeneric("fvarLabels")) setGeneric("fvarLabels<-", function(object, value) standardGeneric("fvarLabels<-")) setGeneric("fvarMetadata", function(object) standardGeneric("fvarMetadata")) setGeneric("fvarMetadata<-", function(object, value) standardGeneric("fvarMetadata<-")) setGeneric("hybridizations", function(object) standardGeneric("hybridizations")) setGeneric("initfun", function(object) standardGeneric("initfun")) setGeneric("locked", function(object) standardGeneric("locked")) setGeneric("makeDataPackage", function(object, author, email, packageName=deparse(substitute(object)), packageVersion=package_version("1.0.0"), license="Artistic-2.0", biocViews="ExperimentData", filePath=tempdir(), ...) standardGeneric("makeDataPackage"), signature="object") setGeneric("normControls", function(object) standardGeneric("normControls")) setGeneric("notes", function(object) standardGeneric("notes")) setGeneric("notes<-", function(object, value) standardGeneric("notes<-")) setGeneric("otherInfo", function(object) standardGeneric("otherInfo")) setGeneric("pData", function(object) standardGeneric("pData")) setGeneric("pData<-", function(object, value) standardGeneric("pData<-")) setGeneric("phenoData", function(object) standardGeneric("phenoData")) setGeneric("phenoData<-", function(object, value) standardGeneric("phenoData<-")) setGeneric("preproc", function(object) standardGeneric("preproc")) setGeneric("preproc<-", function(object, value) standardGeneric("preproc<-")) setGeneric("protocolData", function(object) standardGeneric("protocolData")) setGeneric("protocolData<-", function(object, value) standardGeneric("protocolData<-")) setGeneric("pubMedIds", function(object) standardGeneric("pubMedIds")) setGeneric("pubMedIds<-", function(object, value) standardGeneric("pubMedIds<-")) setGeneric("sampleNames", function(object) standardGeneric("sampleNames")) setGeneric("sampleNames<-", function(object, value) standardGeneric("sampleNames<-")) setGeneric("samples", function(object) standardGeneric("samples")) setGeneric("se.exprs", function(object) standardGeneric("se.exprs")) setGeneric("se.exprs<-", function(object, value) standardGeneric("se.exprs<-")) setGeneric("selectChannels", function(object, names, ...) standardGeneric("selectChannels")) setGeneric("selectSomeIndex", function(object, ...) standardGeneric("selectSomeIndex")) setGeneric("snpCall", function(object, ...) standardGeneric("snpCall")) setGeneric("snpCall<-", function(object, ..., value) standardGeneric("snpCall<-")) setGeneric("snpCallProbability", function(object, ...) standardGeneric("snpCallProbability")) setGeneric("snpCallProbability<-", function(object, ..., value) standardGeneric("snpCallProbability<-")) setGeneric("storageMode", function(object) standardGeneric("storageMode")) setGeneric("storageMode<-", function(object, value) standardGeneric("storageMode<-")) setGeneric("varLabels", function(object) standardGeneric("varLabels")) setGeneric("varLabels<-", function(object, value) standardGeneric("varLabels<-")) setGeneric("varMetadata", function(object) standardGeneric("varMetadata")) setGeneric("varMetadata<-", function(object, value) standardGeneric("varMetadata<-")) setGeneric("write.exprs", function(x,...) standardGeneric("write.exprs")) ## Version-related generics setGeneric("classVersion", function(object) standardGeneric("classVersion")) setGeneric("classVersion<-", function(object, value) standardGeneric("classVersion<-")) setGeneric("isCurrent", function(object, value) standardGeneric("isCurrent")) setGeneric("isVersioned", function(object) standardGeneric("isVersioned")) ## updateObjectTo setGeneric("updateObjectTo", function(object, template, ..., verbose=FALSE) { result <- standardGeneric("updateObjectTo") if (!is(result, class(template))) # or strict equality? stop("updateObjectTo returned class '", class(result), "' ", "expected class '", class(template), "'") validObject(result) result }) ## Generics for Constructors: AnnotatedDataFrame and ExpresssionSet setGeneric("AnnotatedDataFrame", function(data, varMetadata, ...) standardGeneric("AnnotatedDataFrame")) setGeneric("ExpressionSet", function(assayData, phenoData=annotatedDataFrameFrom(assayData, byrow=FALSE), featureData=annotatedDataFrameFrom(assayData, byrow=TRUE), experimentData=MIAME(), annotation=character(), protocolData=annotatedDataFrameFrom(assayData, byrow=FALSE), ...) standardGeneric("ExpressionSet"), signature="assayData") Biobase/R/DataClasses.R0000644000175200017520000002236514516003524015663 0ustar00biocbuildbiocbuild# ========================================================================== # aggregator: a simple aggregator (R. Gentleman, 2001) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Data are aggregated in the environment env if they are not there then the # get assigned with initfun, if they are there they get aggregated with agfun # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .aggregator <- setClass("aggregator", representation( aggenv = "environment", initfun = "function", aggfun = "function" ), prototype = list( initfun = function(name, val) 1, aggfun = function(name, current, val) current + 1 ) ) # ========================================================================== # container: lists containing objects of specified class (R. Gentleman, 2001) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .container <- setClass("container", representation( x = "list", content = "character", locked = "logical" ), prototype = list( x = vector("list", 0), content = "object", locked = FALSE ) ) # ========================================================================== # phenoData (DEFUNCT) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setClass("phenoData", representation( pData = "data.frame", varLabels = "list", varMetadata = "data.frame" ), contains="Versioned", validity = function(object) { paste("class phenoData is defunct,", "convert using as(<>, \"AnnotatedDataFrame\")") } ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setOldClass("data.frame") setClassUnion("data.frameOrNULL", c("data.frame", "NULL")) # ========================================================================== # MIAxE: a VIRTUAL class for experiment meta-data # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .MIAxe <- setClass("MIAxE", representation("VIRTUAL"), contains="Versioned", prototype = prototype(.Versioned(versions=c(MIAxE="1.0.0"))) ) # MIAME: a class for microarray data - MIAME information (Rafael A. Irizarry) # More info: http://www.mged.org/Workgroups/MIAME/miame_1.1.html .MIAME <- setClass("MIAME", representation( name = "character", lab = "character", contact = "character", title = "character", abstract = "character", url = "character", pubMedIds = "character", samples = "list", hybridizations = "list", normControls = "list", preprocessing = "list", other = "list" ), contains=c("MIAxE"), prototype = prototype( .Versioned(versions=c(classVersion("MIAxE"), MIAME="1.1.0")), name = "", lab = "", contact = "", title = "", abstract = "", url = "", pubMedIds = "", samples = list(), hybridizations = list(), normControls = list(), preprocessing = list(), other = list() ) ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # trick so that Plobs works # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setClassUnion("characterORMIAME", c("MIAME", "character")) # ========================================================================== # annotatedDataset (DEFUNCT) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setClass("annotatedDataset", representation( reporterInfo = "data.frameOrNULL", phenoData = "phenoData", "VIRTUAL" ), contains=c("VersionedBiobase")) # ========================================================================== # AnnotatedDataFrame: A data.frame, with annotations about columns named # in the data slot contained in the metadata slot. The data slot has # columns identifying different entities (e.g., genes, samples) and # the columns contain attributes of those entities (e.g., control or # spike-in information for genes, age or sex for samples). The number # of columns in the data slot equals the number of rows in the # metadata slot. # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .AnnotatedDataFrame <- setClass("AnnotatedDataFrame", representation(varMetadata = "data.frame", data = "data.frame", dimLabels = "character"), contains=c("Versioned"), prototype = prototype( .Versioned(versions=list(AnnotatedDataFrame="1.1.0")), varMetadata = new( "data.frame" ), data = new( "data.frame" ), dimLabels=c("rowNames", "columnNames"))) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setClassUnion("AssayData", c("list", "environment")) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # eSet: A VIRTUAL class containing assay data (typically, one or many # different sets of results obtained from one or many samples in a # single experiment), phenotypic data (describing the samples involved # in the experiment), experimental data (describing the methods and # protocols used), and an annotation (linking to separately maintained # chip annotation information). # # When assayData contains several sets of results, each set must have # the same dimension (e.g., columns representing genes, rows # representing samples, all assayData members providing information # for the same number of genes and samples). # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .eSet <- setClass("eSet", representation(assayData = "AssayData", phenoData = "AnnotatedDataFrame", featureData = "AnnotatedDataFrame", experimentData = "MIAxE", annotation = "character", protocolData="AnnotatedDataFrame", "VIRTUAL"), contains="VersionedBiobase", prototype = prototype( .VersionedBiobase(versions=c(eSet="1.3.0")), assayData = list(), # use initialize to set as env, so # different instances have # different envs phenoData = .AnnotatedDataFrame( dimLabels=c("sampleNames", "sampleColumns")), featureData = .AnnotatedDataFrame( dimLabels=c("featureNames", "featureColumns")), annotation = character(), protocolData = .AnnotatedDataFrame( dimLabels=c("sampleNames", "sampleColumns")))) .ExpressionSet <- setClass("ExpressionSet", representation(experimentData="MIAME"), contains = "eSet", prototype = prototype( .VersionedBiobase( versions=c(classVersion("eSet"), ExpressionSet="1.0.0")), experimentData=.MIAME())) .NChannelSet <- setClass("NChannelSet", contains = "eSet", prototype = prototype( .VersionedBiobase( versions=c(classVersion("eSet"), NChannelSet="1.0.0")), phenoData = .AnnotatedDataFrame( data=data.frame(), varMetadata=data.frame( labelDescription=character(0), channelDescription=factor())))) .MultiSet <- setClass("MultiSet", # any element in assayData slot contains = "eSet", prototype = prototype( .VersionedBiobase( versions=c(classVersion("eSet"), MultiSet="1.0.0")))) .SnpSet <- setClass("SnpSet", # call, callProbability contains = "eSet", prototype = prototype( .VersionedBiobase( versions=c(classVersion("eSet"), SnpSet="1.0.0")))) # ========================================================================== # exprSet (DEFUNCT) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setClass("exprSet", representation( exprs = "matrix", se.exprs = "matrix", description = "characterORMIAME", annotation = "character", notes = "character" ), contains = c("annotatedDataset"), # contains VersionedBiobase implicitly validity = function(object) paste("class exprSet is defunct,", "convert using as(<>, \"ExpressionSet\")") ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .ScalarObject <- setClass("ScalarObject", contains="VIRTUAL", validity=function(object) { if (length(object) != 1L) paste(class(object), "must have length one") else TRUE }) .ScalarLogical <- setClass("ScalarLogical", contains=c("ScalarObject", "logical"), prototype=NA) .ScalarCharacter <- setClass("ScalarCharacter", contains=c("ScalarObject", "character"), prototype="") .ScalarInteger <- setClass("ScalarInteger", contains=c("ScalarObject", "integer"), prototype=NA_integer_) .ScalarNumeric <- setClass("ScalarNumeric", contains=c("ScalarObject", "numeric"), prototype=NA_real_) Biobase/R/VersionedClasses.R0000644000175200017520000000066014516003524016742 0ustar00biocbuildbiocbuild## Versions previously defined .VersionsNull <- setClass("VersionsNull", contains="Versions") .Versioned <- setClass("Versioned", representation(.__classVersion__ = "Versions")) .VersionedBiobase <- setClass("VersionedBiobase", contains="Versioned", prototype=prototype( .__classVersion__ = .Versions( R = getRversion(), Biobase = package_version(packageDescription("Biobase", NULL, "Version"))))) Biobase/R/VersionsClass.R0000644000175200017520000001054014516003524016262 0ustar00biocbuildbiocbuild## ========================================================================== ## Versions: version string information ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## methods and class defined together so available for prototypes elsewhere .Versions <- setClass("Versions", contains="list") setMethod("initialize", signature(.Object="Versions"), function(.Object, ...) callNextMethod(.Object, .asValidVersions(list(...)))) .isValidVersion <- function(versions) { tryCatch(all(as.integer(versions)==versions) && all(versions >= 0) && length(versions) > 1, error=function(err) FALSE, warning=function(warn) {}) } .asValidVersions <- function(versions) { res <- list() for (i in seq(along.with=versions)) res[i] <- if (!is.character(versions[[i]]) && .isValidVersion(versions[[i]])) versions[i] else unclass(numeric_version(versions[[i]])) names(res) <- names(versions) res } ## update setMethod("updateObject", signature(object="Versions"), function(object, ..., verbose=FALSE) { if (verbose) message("updateObject(object = 'Versions')") if (!isS4(object)) do.call(new, c("Versions", object)) else object }) ## access setMethod("[", signature=signature(x="Versions"), function(x, i, j, ..., drop = FALSE) { ## 'dispatch' on i to avoid S4 complaint about j 'missing' if (is(i, "character") && !all(i %in% names(x))) { bad <- unique(i[!i %in% names(x)]) cl <- deparse(match.call()[[2]]) stop(sprintf("'[' indices '%s' not found in '%s'", paste(bad, collapse="', '"), cl)) } as(callNextMethod(), "Versions") }) ## assign setReplaceMethod("[", signature(x="Versions"), function(x, i, j, value) { lst <- x@.Data names(lst) <- names(x) lst[i] <- .asValidVersions(value) x@.Data <- lst names(x) <- names(lst) x }) setReplaceMethod("[[", signature(x="Versions"), function(x, i, j, value) { lst <- x@.Data names(lst) <- names(x) lst[[i]] <- unlist(.asValidVersions(value)) x@.Data <- lst names(x) <- names(lst) x }) setReplaceMethod("$", signature(x="Versions"), function(x, name, value) { x[[name]] <- value; x }) ## Compare .as.numeric_version <- function(x) numeric_version(as(x, "character")) .canVersionCompare <- function(e1, e2) { if (length(e1) != length(e2)) stop(sprintf("cannot compare versions with length '%d', '%d'", length(e1), length(e2))) if (length(e1)>1 && (!all(names(e1) %in% names(e2)) || !all(names(e2) %in% names(e1)))) stop("cannot compare versions with different names") TRUE } setMethod("Compare", signature=signature( e1="Versions", e2="Versions"), function(e1, e2) { .canVersionCompare(e1, e2) e2 <- e2[names(e1)] e1 <- .as.numeric_version(e1) e2 <- .as.numeric_version(e2) callNextMethod(e1, e2) }) setMethod("Compare", signature=signature( e1="Versions", e2="character"), function(e1, e2) { .canVersionCompare(e1, e2) if (length(e2) > 1) e2 <- e2[names(e1)] e1 <- .as.numeric_version(e1) e2 <- numeric_version(e2) callNextMethod(e1, e2) }) setMethod("Compare", signature=signature( e1="character", e2="Versions"), function(e1, e2) callGeneric(e2,e1)) ## show setAs("Versions", "character", function(from) { if (length(from)) sapply(from, paste, collapse=".") else "Versioned; no version string" }) setMethod("show", signature(object="Versions"), function(object) print(as(object, "character"))) Biobase/R/anyMissing.R0000644000175200017520000000050214516003524015602 0ustar00biocbuildbiocbuildanyMissing <- function(x=NULL) { .Call("anyMissing", x); } ############################################################################ # HISTORY: # 2007-08-14 # o Created. See also R-devel thread "hasNA()/anyNA()?" on 2007-08-13. ############################################################################ Biobase/R/environment.R0000644000175200017520000000677714516003524016051 0ustar00biocbuildbiocbuild# ========================================================================== # Functions to operate with the environment: # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # .initContents; .buildBiobaseOpts; # multiassign; copyEnv # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .initContents <- function() { makeG = TRUE if( isGeneric("contents", where = .GlobalEnv ) ) if( identical(names(formals(contents)), c("object", "all.names")) ) makeG = FALSE if(makeG) setGeneric("contents", function(object, all.names) standardGeneric("contents")) setMethod("contents", "environment", function(object, all.names) { if (missing(all.names)) all.names <- FALSE as.list(object, all.names=all.names) } ) } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .buildBiobaseOpts <- function() { BioC <- getOption("BioC") if (is.null(BioC)) { BioC <- list() class(BioC) <- "BioCOptions" } Base <- BioC$Base if (is.null(Base)) { Base <- list() class(Base) <- "BioCPkg" } if (is.null(Base$urls)) Base$urls <- list( bioc = "http://bioconductor.org") ##RI: I added this to make my life easier. Should it be TRUE? ##AJR: NO. I've run across a few cases when it would completely ## break functionality, i.e. when tcltk isn't part of the R ## package (on weird, and development-based machines if (is.null(Base$use.widgets)) Base$use.widgets <- FALSE BioC$Base <- Base options("BioC"=BioC) } # ========================================================================== # RG: # multiput and multiget # ideally these will be internalized at some point # FIXME: I think Luke's Dynamic variables should be used rather than # the on.exit kludge # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - multiassign <- function (x, value, envir = parent.frame(), inherits = FALSE) { if( ! is.environment(envir) ) stop("envir argument is not an environment") if( missing(value) ) { nx <- names(x) if( any(nchar(nx) == 0) ) stop("value is missing and x does not have named components") value <- x x <- nx } lenx <- length(x) for(i in 1:lenx) { i2 <- (i-1)%%lenx+1 if( is.list(x) ) { if( is.list(value) ) assign(x[[i]], value[[i2]], envir=envir, inherits=inherits) else assign(x[[i]], value[i2], envir=envir, inherits=inherits) } else { if( is.list(value) ) assign(x[i], value[[i2]], envir=envir, inherits=inherits) else assign(x[i], value[i2], envir=envir, inherits=inherits) } } } #### Functions for lists and environments listLen <- function(x) lengths(x) .new_env_size <- function(n) { ## helper function returns suggested size for new environments that ## will be used as hashtables given expected number of elements 'n'. max(29L, as.integer(n * 1.20)) } copyEnv <- function(oldEnv, newEnv, all.names=FALSE) { if (missing(newEnv)) newEnv <- new.env(hash=TRUE, parent=parent.env(oldEnv), size=.new_env_size(length(oldEnv))) nms <- ls(oldEnv, all.names = all.names) for (nm in nms) newEnv[[nm]] <- oldEnv[[nm]] newEnv } ## Deprecated in v 2.11.2 l2e <- function(vals, envir) { .Defunct("list2env", package="base") } Biobase/R/methods-AnnotatedDataFrame.R0000644000175200017520000004763314516003524020624 0ustar00biocbuildbiocbuildsetMethod("initialize", signature(.Object="AnnotatedDataFrame"), function(.Object, data = data.frame(), varMetadata = data.frame(), ...) { tryCatch({ if (missing(varMetadata)) { if (!missing(data)) checkClass(data, "data.frame", class(.Object)) varMetadata <- data.frame( labelDescription = rep.int(NA_character_, ncol(data)), stringsAsFactors = FALSE ) row.names(varMetadata) <- as.character(colnames(data)) } else { checkClass(varMetadata, "data.frame", class(.Object)) if (!"labelDescription" %in% colnames(varMetadata)) varMetadata[["labelDescription"]] <- rep.int(NA_character_, nrow(varMetadata)) row.names(varMetadata) <- names(data) } varMetadata[["labelDescription"]] <- as.character(varMetadata[["labelDescription"]]) }, error=function(err) { stop(conditionMessage(err), "\n AnnotatedDataFrame 'initialize' could not update varMetadata:", "\n perhaps pData and varMetadata are inconsistent?") }) callNextMethod(.Object, data=data, varMetadata=varMetadata, ...) }) validAnnotatedDataFrame <- function( object ) { msg <- NULL if (!is(object, "AnnotatedDataFrame")) msg <- c(msg, paste("cannot validate", class(object), "as AnnotatedDataFrame" )) if (length(row.names(varMetadata(object))) != length(colnames(pData(object)))) msg <- c(msg, paste("all AnnotatedDataFrame pData column names", "must be present as rows in varMetadata", "and vice versa")) else if (any(row.names(varMetadata(object)) != colnames(pData(object)))) msg <- c(msg, paste("AnnotatedDataFrame colnames of data differ", "from row.names of varMetadata")) if ( !("labelDescription" %in% colnames(varMetadata(object)))) msg <- c(msg, paste("AnnotatedDataFrame varMetadata", "missing labelDescription column")) if (length(dimLabels(object))!=2) msg <- c(msg, "dimLabels must be a character vector of length 2") if (is.null(msg)) TRUE else msg } setValidity("AnnotatedDataFrame", validAnnotatedDataFrame) setAs("AnnotatedDataFrame", "data.frame", function(from) { pData(from) }) setMethod("updateObject", signature(object="AnnotatedDataFrame"), function(object, ..., verbose=FALSE) { if (verbose) message("updateObject(object = 'AnnotatedDataFrame')") object <- asS4(object) if (isVersioned(object) && isCurrent(object)["AnnotatedDataFrame"]) callNextMethod() else { ## version 1.0.0. -> 1.1.0 needs a new slot "dimLabels" to <- new(class(object)) varMetadata(to) <- updateObject(varMetadata(object)) pData(to) <- updateObject(pData(object)) to } }) annotatedDataFrameFromMatrix <- function(object, byrow=FALSE, ...) { ## contract: 'object' is matrix-like, with dim, rownames, colnames ## methods. Returns AnnotatedDataFrame with appropriate dimensions. dims <- dim(object) if (is.null(dims) || all(dims==0)) annotatedDataFrameFrom(NULL, byrow=byrow, ...) else { n <- if (byrow) dims[1] else dims[2] nms <- if(byrow) rownames(object) else colnames(object) data <- data.frame(numeric(n), row.names=nms)[,FALSE] dimLabels <- if (byrow) c("featureNames", "featureColumns") else c("sampleNames", "sampleColumns") AnnotatedDataFrame(data=data, dimLabels=dimLabels) } } setMethod("annotatedDataFrameFrom", signature(object="matrix"), annotatedDataFrameFromMatrix) annotatedDataFrameFromNull <- function(object, byrow=FALSE, ...) { dimLabels <- if (byrow) c("featureNames", "featureColumns") else c("sampleNames", "sampleColumns") AnnotatedDataFrame(data=data.frame(), dimLabels=dimLabels) } setMethod("annotatedDataFrameFrom", signature(object="NULL"), annotatedDataFrameFromNull) annotatedDataFrameFromAssayData <- function(object, byrow=FALSE, ...) { eltNames <- if (is(object, "environment")) ls(object) else names(object) if (length(eltNames)==0) annotatedDataFrameFrom(NULL, byrow=byrow, ...) else annotatedDataFrameFrom(object[[eltNames[1]]], byrow=byrow, ...) } setMethod("annotatedDataFrameFrom", signature(object="AssayData"), annotatedDataFrameFromAssayData) head.AnnotatedDataFrame <- function(x, n=6L, ...) { ## essentially, utils:::head.data.frame stopifnot(length(x) == 1L) n <- if (n < 0L) { max(nrow(x) + n, 0L) } else min(n, nrow(x)) x[seq_len(n), ] } tail.AnnotatedDataFrame <- function(x, n=6L, ...) { ## essentially, utils:::tail.data.frame stopifnot(length(x) == 1L) nrx <- nrow(x) n <- if (n < 0L) max(nrx + n, 0L) else min(n, nrx) x[seq.int(to = nrx, length.out = n), , drop = FALSE] } setMethod("dimnames", "AnnotatedDataFrame", function(x) { dimnames(pData(x)) }) setReplaceMethod("dimnames", "AnnotatedDataFrame", function(x, value) { sampleNames(x) <- value[[1]] varLabels(x) <- value[[2]] x }) setMethod("dim", "AnnotatedDataFrame", function( x ) { d <- dim(pData(x)) names(d) <- dimLabels(x) d }) setMethod("dimLabels", "AnnotatedDataFrame", function(object) { object@dimLabels }) setReplaceMethod("dimLabels", signature=signature( object="AnnotatedDataFrame", value="character"), function(object, value) { object@dimLabels <- value object }) setMethod("pData", "AnnotatedDataFrame", function(object) object@data) setReplaceMethod("pData", signature=signature( object="AnnotatedDataFrame", value="data.frame"), function(object, value) { idx <- match(names(value), rownames(varMetadata(object))) varMetadata <- varMetadata(object)[idx,,drop=FALSE] row.names(varMetadata) <- names(value) initialize(object, data=value, varMetadata=varMetadata) }) setMethod("sampleNames", "AnnotatedDataFrame", function(object) row.names(object@data)) setReplaceMethod("sampleNames", signature(object="AnnotatedDataFrame", value="ANY"), function(object, value) { if (!is.null(value) && (length(value) != dim(object@data)[[1]])) stop("number of new names (", length(value), ") ", "should equal number of rows in AnnotatedDataFrame (", dim( object )[[1]], ")") row.names(object@data) <- value object }) setMethod("featureNames", signature(object="AnnotatedDataFrame"), function(object) sampleNames(object)) setReplaceMethod("featureNames", signature(object="AnnotatedDataFrame", value="ANY"), function(object, value) { sampleNames(object) <- value object }) setMethod("varLabels", "AnnotatedDataFrame", function(object) colnames(object@data)) setReplaceMethod("varLabels", signature("AnnotatedDataFrame", "ANY"), function(object, value) { if (!is.null(value) && (length(value) != dim(object@data)[[2]])) stop("number of new varLabels (", length(value), ") ", "should equal number of columns in AnnotatedDataFrame (", dim(object)[[2]], ")") if (!is.null(value)) { ## silently ignore attempts to set colnames to NULL colnames(object@data) <- value row.names(object@varMetadata) <- value } object }) setMethod("varMetadata", "AnnotatedDataFrame", function(object) object@varMetadata ) setReplaceMethod("varMetadata", c("AnnotatedDataFrame", "data.frame"), function(object, value) { if (!("labelDescription" %in% colnames(value))) warning("'varMetadata' must have column 'labelDescription'") rinfo <- .row_names_info(value) if (0L != length(varLabels(object))) { if (0L <= rinfo) { ## not 'automatic' bad <- setdiff(row.names(value), varLabels(object)) if (0L != length(bad)) { fmt <- "'%s' not in 'varLabels()'" nms <- paste(selectSome(bad), collapse="', '") stop(sprintf(fmt, nms)) } } if (ncol(object) != abs(rinfo)) { fmt <- "varMetadata has %d row(s), 'value' has %d" stop(sprintf(fmt, ncol(object), nrow(value))) } if (0 < ncol(pData(object))) row.names(value) <- names(pData(object)) } object@varMetadata <- value object }) setMethod("[", signature(x="AnnotatedDataFrame"), function(x, i, j, ..., drop) { if (missing(drop)) drop = FALSE else if (drop) stop("'AnnotatedDataFrame' does not support drop = TRUE") if(missing(j)) { mD <- x@varMetadata pD <- x@data[i,,drop = drop] } else { mD <- x@varMetadata[j,,drop = drop] if( missing( i )) pD <- x@data[,j,drop = drop] else pD <- x@data[i,j,drop = drop] } initialize(x, data=pD, varMetadata=mD) }) ##setMethod("$", "AnnotatedDataFrame", function(x, name) `$`(pData(x), name)) setMethod("$", "AnnotatedDataFrame", function(x, name) { eval(substitute(pData(x)$NAME_ARG, list(NAME_ARG=name))) }) setReplaceMethod("$", "AnnotatedDataFrame", function(x, name, value) { x[[name]] <- value x }) setMethod("[[", "AnnotatedDataFrame", function(x, i, j, ...) pData(x)[[i]] ) setReplaceMethod("[[", signature=signature(x="AnnotatedDataFrame"), function(x, i, j, ..., value) { pData(x)[[i]] <- value for (metadata in names(list(...))) varMetadata(x)[i, metadata] <- list(...)[[metadata]] x }) setAs("phenoData", "AnnotatedDataFrame", function(from) { from <- asS4(from) ## data data <- from@pData ## varMetadata cnames <- colnames(data) varMetadata <- from@varMetadata if (all(dim(varMetadata)==0)) { varMetadata <- data.frame(numeric(length(cnames)),row.names=cnames)[,FALSE] } ## varLabels -- as column in varMetadata,or warn varLabels <- from@varLabels if (length(varLabels)>0 && !("labelDescription" %in% colnames(varMetadata))) varMetadata[["labelDescription"]] <- as.character(varLabels[cnames]) else if (length(varLabels)>0) warning("contents of varLabels ignored\n", call.=FALSE) else varMetadata[["labelDescription"]] <- rep.int(NA_character_, nrow(varLabels)) AnnotatedDataFrame( data=data, varMetadata=varMetadata, dimLabels=c("sampleNames", "sampleColumns")) }) setAs("data.frame", "AnnotatedDataFrame", function(from) AnnotatedDataFrame(data=from)) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - selectSome <- function(obj, maxToShow=5) { len <- length(obj) if (maxToShow<3) maxToShow <- 3 if (len > maxToShow) { maxToShow <- maxToShow-1 bot <- ceiling(maxToShow/2) top <- len-(maxToShow-bot-1) nms <- obj[c(1:bot, top:len)] c(as.character(nms[1:bot]), "...", as.character(nms[-c(1:bot)])) } else if (is.factor(obj)) as.character(obj) else obj } setMethod("selectSomeIndex", signature(object="data.frame"), function(object, maxToShow=5, byrow=TRUE, ...) { len <- if (byrow) dim(object)[[1]] else dim(object)[[2]] if (maxToShow < 3) maxToShow <- 3 if (len > maxToShow) { maxToShow <- maxToShow - 1 bot <- ceiling(maxToShow/2) top <- len-(maxToShow-bot-1) list(1:bot, "...", top:len) } else if (len >= 1) list(1:len, NULL, NULL) else list(NULL, NULL, NULL) }) .wrapcat <- function(lbl, nms, total, ..., indent=2, exdent=4) { lbl <- sprintf("%s:", lbl) txt <- paste(c(lbl, nms), collapse=" ") ext <- if (length(nms) < total) sprintf("(%d total)", total) else character() txt <- paste(c(lbl, nms, ext), collapse=" ") cat(strwrap(txt, ..., indent=indent, exdent=exdent), sep="\n") } .showAnnotatedDataFrame <- function(object, labels=list(0)) { lbls <- list(object=paste0("An object of class '", class(object), "'"), sampleNames=dimLabels(object)[[1]], varMetadata="varMetadata", varLabels="varLabels") lbls[names(labels)] <- labels if (ncol(object) == 0) { # early exit for empty objects cat(lbls[["object"]], ": none\n", sep="") return() } ## create a simplified object for extracting names idx <- selectSomeIndex(pData(object), maxToShow=4) idy <- selectSomeIndex(pData(object), byrow=FALSE, maxToShow=4) pData <- pData(object)[c(idx[[1]], idx[[3]]), c(idy[[1]], idy[[3]]), drop=FALSE] rnms <- rownames(pData) nms <- c(rnms[idx[[1]]], idx[[2]], if (!is.null(idx[[1]])) rnms[-idx[[1]]] else NULL) cat(lbls$object, "\n", sep="") .wrapcat(lbls$sampleNames, nms, nrow(object)) cnms <- colnames(pData) if (length(cnms) > 0) { vars <- c(cnms[idy[[1]]], idy[[2]], cnms[-idy[[1]]]) .wrapcat(lbls$varLabels, vars, ncol(object)) mnms <- selectSome(colnames(varMetadata(object)), maxToShow=4) .wrapcat(lbls$varMetadata, mnms, length(mnms)) } else cat("\n ", lbls$varLabels, ": none", sep="") } setMethod("show", signature=signature(object="AnnotatedDataFrame"), function(object) .showAnnotatedDataFrame(object)) setMethod("combine", signature(x="AnnotatedDataFrame", y="AnnotatedDataFrame"), function(x, y) { if (class(x) != class(y)) { fmt <- "'%s' objects have diffrenent classes '%s', '%s'" txt0 <- "combine,AnnotatedDataFrame,AnnotatedDataFrame-method" stop(sprintf(fmt, txt0, class(x), class(y))) } if (!identical(dimLabels(x),dimLabels(y))) { fmt <- paste("AnnotatedDataFrame dimLabels differ:\n", " %s\n", " %s\n try 'updateObject'?") stop(sprintf(fmt, paste(dimLabels(x), collapse=", "), paste(dimLabels(y), collapse=", "))) } pDataX <- pData(x) pDataY <- pData(y) pData <- combine(pDataX, pDataY) varMetadataX <- varMetadata(x) varMetadataY <- varMetadata(y) ## labelDescription is required, likely a factor with ## conflicting levels if (is.factor(varMetadataX$labelDescription) && is.factor(varMetadataY$labelDescription)) { f <- factor(c(as.character(varMetadataX$labelDescription), as.character(varMetadataY$labelDescription))) varMetadataX$labelDescription <- factor(as.character(varMetadataX$labelDescription), levels=levels(f)) varMetadataY$labelDescription <- factor(as.character(varMetadataY$labelDescription), levels=levels(f)) } vM <- combine(varMetadataX, varMetadataY) initialize(x, data=pData, varMetadata=vM) }) read.AnnotatedDataFrame <- function(filename, path, sep = "\t", header = TRUE, quote = "", stringsAsFactors = FALSE, row.names = 1L, varMetadata.char="#", widget = getOption("BioC")$Base$use.widgets, sampleNames = character(0), ...) { if(!(is.character(varMetadata.char) && (identical(nchar(varMetadata.char), 1L)))) stop("Invalid 'varMetadata.char'") ## For backward (or forward?) compatibility: if(widget) stop("Sorry: tkWidgets is not available for read.AnnotatedDataFrame") if(length(sampleNames)>0) stop("'sampleNames' argument is not supported, provide the sample", "names in the input file and use the option 'row.names'.") if(!missing(path)) filename = file.path(path, filename) pData = read.table(filename, sep=sep, header=header, quote=quote, stringsAsFactors=stringsAsFactors, row.names=row.names, comment.char=varMetadata.char, ...) ## read varMetadata section (the lines with leading "#") vmd = grep(paste0("^", varMetadata.char), readLines(filename), value=TRUE) svmd = strsplit(vmd, ": *") varNames = sub("^# *", "", sapply(svmd, "[", 1L)) varMetad = sapply(svmd, "[", 2L) ## link varMetadata names with pData colnames mt = match(colnames(pData), varNames) varMetad = ifelse(!is.na(mt), varMetad[mt], "") vmd = data.frame(labelDescription=varMetad, row.names=colnames(pData)) ## add provenance information. Alapping it on as an attribute is a ## bit tacky, if Martin likes the idea at all, maybe this can be ## made a proper slot... provenance = sprintf("Read from file %s on %s at %s.", filename, Sys.info()["nodename"], date()) attr(vmd, "provenance") = provenance AnnotatedDataFrame(data=pData, varMetadata=vmd) } write.AnnotatedDataFrame <- function(x, file="", varMetadata.char="#", ..., append=FALSE, fileEncoding="") { ## file handling from write.table if (file == "") file <- stdout() else if (is.character(file)) { file <- if (nzchar(fileEncoding)) file(file, ifelse(append, "a", "w"), encoding = fileEncoding) else file(file, ifelse(append, "a", "w")) on.exit(close(file)) } else if (!isOpen(file, "w")) { open(file, "w") on.exit(close(file)) } if (!inherits(file, "connection")) stop("'file' must be a character string or connection") writeLines(sprintf("%s %s: %s", varMetadata.char, varLabels(x), varMetadata(x)$labelDescription), file) write.table(pData(x), file, append=append, fileEncoding=fileEncoding, ...) } setMethod("AnnotatedDataFrame", signature(data="missing", varMetadata="missing"), function(data, varMetadata, dimLabels=c("rowNames", "columnNames"), ...) { .AnnotatedDataFrame(data=data.frame(), varMetadata=data.frame(), dimLabels=dimLabels, ...) }) setMethod("AnnotatedDataFrame", signature(data="data.frame", varMetadata="missing"), function(data, varMetadata, dimLabels=c("rowNames", "columnNames"), ...) { varMetadata <- data.frame( labelDescription = rep.int(NA_character_, ncol(data)), stringsAsFactors = FALSE ) row.names(varMetadata) <- names(data) .AnnotatedDataFrame(data=data, varMetadata=varMetadata, dimLabels=dimLabels, ...) }) setMethod("AnnotatedDataFrame", signature(data="data.frame", varMetadata="data.frame"), function(data, varMetadata, dimLabels=c("rowNames", "columnNames"), ...) { if (!"labelDescription" %in% colnames(varMetadata)) varMetadata[["labelDescription"]] <- rep.int(NA_character_, nrow(varMetadata)) row.names(varMetadata) <- names(data) varMetadata[["labelDescription"]] <- as.character(varMetadata[["labelDescription"]]) .AnnotatedDataFrame(data=data, varMetadata=varMetadata, dimLabels=dimLabels, ...) }) Biobase/R/methods-AssayData.R0000644000175200017520000002546614516003524017014 0ustar00biocbuildbiocbuildassayDataNew <- function(storage.mode = c("lockedEnvironment", "environment", "list"), ...) { storage.mode <- match.arg(storage.mode) ## defaults to "lockedEnvironment" assayData <- switch(storage.mode, lockedEnvironment =, environment = new.env(parent=emptyenv()), list = list()) arglist <- list(...) if((length(arglist)>0L) && ((is.null(names(arglist))) || any(names(arglist)==""))) stop("all arguments must be named") for (nm in names(arglist)) { elt <- arglist[[nm]] if (!is.null(dimnames(elt))) dimnames(elt) <- lapply(dimnames(elt), unname) assayData[[nm]] <- elt } if (storage.mode == "lockedEnvironment") assayDataEnvLock(assayData) msg <- assayDataValidMembers(assayData) if (!is.logical(msg)) stop(msg) assayData } assayDataValidMembers <- function(assayData, required) { msg <- NULL eltNames <- if ("list" == assayDataStorageMode(assayData)) names(assayData) else ls(assayData) if (!missing(required)) { absent <- required[!required %in% eltNames] if (length(absent) != 0) msg <- c(msg, paste0("'AssayData' missing '", absent ,"'" , collapse = "\n\t")) } dimsOk <- sapply(eltNames, function(elt) tryCatch(length(dim(assayData[[elt]]))>1, error=function(err) FALSE)) if (!all(dimsOk)) msg <- c(msg, paste0("'AssayData' elements with invalid dimensions: '", paste(eltNames[!dimsOk], collapse="' '"), "'")) if (length(assayData)>1) { eltRowNames <- rownames(assayData[[eltNames[[1]]]]) rowNamesOk <- all(sapply(eltNames[-1], function(elt) all(eltRowNames == rownames(assayData[[elt]])))) if (!rowNamesOk) msg <- c(msg, "'AssayData' elements with different rowNames") } if (is.null(msg)) TRUE else msg } assayDataStorageMode <- function(object) { if (is(object, "list")) "list" else if (environmentIsLocked(object)) "lockedEnvironment" else "environment" } setMethod("storageMode", "AssayData", assayDataStorageMode) assayDataStorageModeReplace <- function(object, value) { storageMode <- assayDataStorageMode(object) if (storageMode == value) return(object) names <- if (storageMode == "list") names(object) else ls(object) switch(value, lockedEnvironment = { assayData <- new.env(parent=emptyenv()) for (nm in names) assayData[[nm]] <- object[[nm]] assayDataEnvLock(assayData) assayData }, environment = { assayData <- new.env(parent=emptyenv()) for (nm in names) assayData[[nm]] <- object[[nm]] assayData }, list = as.list(object)) } setReplaceMethod("storageMode", signature=c(object="AssayData", value="character"), assayDataStorageModeReplace) assayDataEnvLock <- function(assayData) lockEnvironment(assayData, bindings=TRUE) assayDataSubsetElements <- function(object, elts, storageMode = assayDataStorageMode(object)) { if (any(duplicated(elts))) stop("'AssayData' element names must be unique") names <- if (storageMode(object)=="list") names(object) else ls(object) if (!all(elts %in% names)) stop("'AssayData' missing elements: '", paste0(elts[!elts %in% names], collapse="', '"), "'") switch(storageMode, lockedEnvironment = { assayData <- new.env(parent = emptyenv()) for (nm in elts) assayData[[nm]] <- object[[nm]] assayDataEnvLock(assayData) assayData }, environment = { assayData <- new.env(parent = emptyenv()) for (nm in elts) assayData[[nm]] <- object[[nm]] assayData }, list = { object[elts] }) } setMethod("assayData", signature=signature(object="AssayData"), function(object) object) .assayDataDimnames <- function(assayData) { switch(storageMode(assayData), lockedEnvironment=, environment = { result <- vector("list", length(assayData)) names(result) <- ls(assayData) for (nm in ls(assayData)) result[[nm]] <- dimnames(assayData[[nm]]) result }, list=lapply(assayData, dimnames)) } setMethod("sampleNames", signature(object="AssayData"), function(object) { if (!length(object)) return(character(0)) safe.colnames <- function(x) if (ncol(x) == 0) character(0) else colnames(x) switch(assayDataStorageMode(object), list=safe.colnames(object[[1]]), safe.colnames(object[[ls(object)[1]]])) }) setReplaceMethod("sampleNames", signature(object="AssayData", value="list"), function(object, value) { .names_found_unique <- function(names, table) { ok <- !is.null(names) && all(names %in% table) && !any(duplicated(names)) if (!ok) { txt <- "'sampleNames' replacement list must have unique named elements corresponding to assayData element names" stop(paste(strwrap(txt, exdent=2), colapse="\n")) } } mode <- assayDataStorageMode(object) switch(mode, lockedEnvironment = { .names_found_unique(names(value), ls(object)) object <- copyEnv(object) }, environment = { .names_found_unique(names(value), ls(object)) }, list= { .names_found_unique(names(value), names(object)) }) for (nm in names(value)) { dn <- dimnames(object[[nm]]) if (is.null(dn)) dn <- vector("list", length(dim(object[[nm]]))) dn[[2]] <- value[[nm]] dimnames(object[[nm]]) <- dn } if (mode == "lockedEnvironment") assayDataEnvLock(object) object }) setReplaceMethod("sampleNames", signature(object="AssayData", value="ANY"), function(object, value) { mode <- assayDataStorageMode(object) dims <- switch(mode, lockedEnvironment=, environment = { result <- vector("list", length(object)) names(result) <- ls(object) for (nm in ls(object)) result[[nm]] <- ncol(object[[nm]]) result }, list = { lapply(object, ncol) }) if (length(dims)==0 && length(value) !=0) return(object) # early exit; no samples to name if (!all(dims==length(value))) { txt <- sprintf("'value' length (%d) must equal sample number in AssayData (%d)", length(value), dims[[1]]) stop(paste(strwrap(txt, exdent=2), collapse="\n")) } nms <- switch(mode, lockedEnvironment = { object <- copyEnv(object) ls(object) }, environment = ls(object), list = names(object)) for (nm in nms) { dn <- dimnames(object[[nm]]) if (is.null(dn)) dn <- vector("list", length(dim(object[[nm]]))) dn[[2]] <- value dimnames(object[[nm]]) <- dn } if (mode == "lockedEnvironment") assayDataEnvLock(object) object }) setMethod("featureNames", signature(object="AssayData"), function(object) { if (!length(object)) return(character(0)) safe.rownames <- function(x) if (nrow(x) == 0) character(0) else rownames(x) switch(assayDataStorageMode(object), list=safe.rownames(object[[1]]), safe.rownames(object[[ls(object)[1]]])) }) setReplaceMethod("featureNames", signature(object="AssayData", value="ANY"), function(object, value) { mode <- assayDataStorageMode(object) dims <- switch(mode, lockedEnvironment=, environment = { result <- vector("list", length(object)) names(result) <- ls(object) for (nm in ls(object)) result[[nm]] <- nrow(object[[nm]]) result }, list = lapply(object, nrow)) if (length(dims)==0 && length(value) !=0) return(object) # early exit; no features to name if (!all(dims==length(value))) { txt <- sprintf("'value' length (%d) must equal feature number in AssayData (%d)", length(value), dims[[1]]) stop(paste(strwrap(txt, exdent=2), collapse="\n")) } nms <- switch(mode, lockedEnvironment = { object <- copyEnv(object) ls(object) }, environment = ls(object), list=names(object)) for (nm in nms) { dn <- dimnames(object[[nm]]) if (is.null(dn)) dn <- vector("list", length(dim(object[[nm]]))) dn[[1]] <- value dimnames(object[[nm]]) <- dn } if (mode == "lockedEnvironment") assayDataEnvLock(object) object }) setMethod("combine", c("AssayData", "AssayData"), function(x, y, ...) { storage.mode <- assayDataStorageMode(x) nmfunc <- if ("environment"==class(x)) ls else names if (assayDataStorageMode(y) != storage.mode) stop("assayData must have same storage, but are '", storage.mode, "', '", assayDataStorageMode(y)) if (length(nmfunc(x)) != length(nmfunc(y))) stop("assayData have different numbers of elements:\n\t", paste(nmfunc(x), collapse=" "), "\n\t", paste(nmfunc(y), collapse=" ")) if (!all(nmfunc(x) == nmfunc(y))) stop(paste("assayData have different element names:", paste(nmfunc(x), collapse=" "), paste(nmfunc(y), collapse=" "), sep="\n\t")) if ("list" == storage.mode) { aData <- lapply(names(x), function(nm) combine(x[[nm]],y[[nm]])) names(aData) <- names(x) } else { aData <- new.env(parent=emptyenv()) for (nm in ls(x)) aData[[nm]] <- combine(x[[nm]], y[[nm]]) if ("lockedEnvironment" == storage.mode) assayDataEnvLock(aData) } aData }) assayDataDim <- function(object) { nms <- if (assayDataStorageMode(object) == "list") names(object) else ls(object) if ( length( nms ) == 0 ) return( NA ) d <- dim( object[[ nms[[1]] ]]) names(d) <- c( "Features", "Samples", rep("...", max(length(d)-2, 0))) d } ##FIXME: RG says I don't know if you should ignore non-matrix objects or ## not - for now I have put in an informative error message assayDataDims <- function(object) { nms <- if (assayDataStorageMode(object) == "list") names(object) else ls(object) if (length(nms) == 0) return(matrix(integer(0), nrow = 2, ncol = 0, dimnames = list(c("Features", "Samples"), character(0)))) d <- sapply(nms, function(i) dim(object[[i]])) rownames(d) <- c("Features", "Samples", rep("...", nrow(d)-2)) colnames(d) <- nms d[,order(colnames(d)), drop=FALSE] } Biobase/R/methods-ExpressionSet.R0000644000175200017520000002445514516003524017752 0ustar00biocbuildbiocbuildsetMethod("initialize", "ExpressionSet", function(.Object, assayData, phenoData, featureData, exprs=new("matrix"), ... ) { if (missing(assayData)) { if (missing(phenoData)) phenoData <- annotatedDataFrameFrom(exprs, byrow=FALSE) if (missing(featureData)) featureData <- annotatedDataFrameFrom(exprs, byrow=TRUE) .Object <- callNextMethod(.Object, phenoData = phenoData, featureData = featureData, exprs = exprs, ...) } else if (missing(exprs)) { if (missing(phenoData)) phenoData <- annotatedDataFrameFrom(assayData, byrow=FALSE) if (missing(featureData)) featureData <- annotatedDataFrameFrom(assayData, byrow=TRUE) .Object <- callNextMethod(.Object, assayData = assayData, phenoData = phenoData, featureData = featureData, ...) } else stop("provide at most one of 'assayData' or 'exprs' to initialize ExpressionSet", call.=FALSE) .harmonizeDimnames(.Object) }) .harmonizeDimnames <- function(object) { err <- function(conflicts) stop("assayData element dimnames conflict: ", paste(names(conflicts), collapse=", ")) okNames <- list(featureNames(featureData(object)), sampleNames(phenoData(object))) dimNames <- .assayDataDimnames(assayData(object)) dimConflict <- function(dimNames, okNames, dim) { nm <- lapply(dimNames, "[[", dim) isConflict <- !sapply(nm, function(x, y) { is.null(x) || isTRUE(all.equal(x, y, check.attr=FALSE)) }, okNames[[dim]]) isNamed <- sapply(lapply(nm, names), length) > 0 isNull <- sapply(nm, is.null) if (all(!isConflict & !isNamed & !isNull)) return (FALSE) if (any(isConflict & !isNull)) err(isConflict[!isNull]) TRUE } if (dimConflict(dimNames, okNames, 1)) featureNames(assayData(object)) <- okNames[[1]] if (dimConflict(dimNames, okNames, 2)) sampleNames(assayData(object)) <- okNames[[2]] object } setAs("exprSet", "ExpressionSet", function(from) { from <- asS4(from) desc <- from@description desc <- if (class(desc)!="MIAME") { txt <- "missing or mis-formed MIAME 'description' in original object; creating new, empty description" warning(paste0(strwrap(txt, indent=2), collapse="\n ")) MIAME() } else updateObject(desc) exprs <- from@exprs phenoData <- as(from@phenoData, "AnnotatedDataFrame") annotation <- from@annotation dims <- dim(exprs) if (all(dim(from@se.exprs) == dims)) { se.exprs <- from@se.exprs colnames(se.exprs) <- colnames(exprs) .ExpressionSet(phenoData=phenoData, experimentData=desc, annotation=annotation, exprs=exprs, se.exprs=se.exprs) } else { txt <- "missing or mis-formed 'se.exprs' in original object; creating ExpressionSet without se.exprs" warning(paste0(strwrap(txt, indent=2), collapse="\n ")) .ExpressionSet(phenoData=phenoData, experimentData=desc, annotation=annotation, exprs=exprs) } }) setValidity("ExpressionSet", function(object) { msg <- validMsg(NULL, isValidVersion(object, "ExpressionSet")) msg <- validMsg(msg, assayDataValidMembers(assayData(object), c("exprs"))) if(class(experimentData(object)) != "MIAME") msg <- validMsg(msg, "experimentData slot in ExpressionSet must be 'MIAME' object") if (is.null(msg)) TRUE else msg }) setAs("ExpressionSet", "data.frame", function (from) data.frame(t(exprs(from)), pData(from))) as.data.frame.ExpressionSet <- function(x, row.names=NULL, optional=FALSE, ...) as(x, "data.frame") setMethod("exprs", signature(object="ExpressionSet"), function(object) assayDataElement(object,"exprs")) setReplaceMethod("exprs", signature(object="ExpressionSet",value="matrix"), function(object, value) assayDataElementReplace(object, "exprs", value)) .esApply <- function(X, MARGIN, FUN, ...) { parent <- environment(FUN) if (is.null(parent)) parent <- emptyenv() e1 <- new.env(parent=parent) multiassign(names(pData(X)), pData(X), envir=e1) environment(FUN) <- e1 apply(exprs(X), MARGIN, FUN, ...) } setMethod("esApply", signature=signature(X="ExpressionSet"), .esApply) setMethod("makeDataPackage", signature(object="ExpressionSet"), function(object, author, email, packageName, packageVersion, license, biocViews, filePath, description=paste(abstract(object), collapse="\n\n"), ...) { if( missing(email) || !(is.character(email) && (length(email) == 1) && grep("@", email) == 1 ) ) stop("invalid email address") sym = list( AUTHOR = author, VERSION=as.character(package_version(packageVersion)), LICENSE=license, TITLE = paste("Experimental Data Package:",packageName), MAINTAINER = paste0(author, ", <", email, ">"), BVIEWS = biocViews, DESCRIPTION = description, FORMAT = pD2Rd(phenoData(object))) res = createPackage(packageName, destinationDir=filePath, originDir = system.file("ExpressionSet", package="Biobase"), symbolValues = sym, unlink=TRUE) ##save the data file datadir = file.path(res$pkgdir, "data") dir.create(datadir, showWarnings=FALSE) outfile = file.path(datadir, paste0(packageName, ".rda")) assign(packageName, object) save(list=packageName, file = outfile) return(res) }) setMethod("write.exprs", signature(x="ExpressionSet"), function(x, file="tmp.txt", quote=FALSE, sep="\t", col.names=NA, ...){ write.table(exprs(x), file=file, quote=quote, sep=sep, col.names=col.names, ...) }) readExpressionSet <- function(exprsFile, phenoDataFile, experimentDataFile, notesFile, path, annotation, ## arguments to read.* methods exprsArgs=list(sep=sep, header=header, row.names=row.names, quote=quote, ...), phenoDataArgs=list(sep=sep, header=header, row.names=row.names, quote=quote, stringsAsFactors=stringsAsFactors, ...), experimentDataArgs=list(sep=sep, header=header, row.names=row.names, quote=quote, stringsAsFactors=stringsAsFactors, ...), sep = "\t", header = TRUE, quote = "", stringsAsFactors = FALSE, row.names = 1L, ## widget widget = getOption("BioC")$Base$use.widgets, ...) { if (!missing(widget) && widget != FALSE) stop("sorry, widgets not yet available") ## exprs if (missing(exprsFile)) stop("exprs can not be missing!") exprsArgs$file=exprsFile ex = as.matrix(do.call(read.table, exprsArgs)) ## phenoData if (!missing(phenoDataFile)) { phenoDataArgs$file=phenoDataFile pd = do.call(read.AnnotatedDataFrame, phenoDataArgs) if (!identical(sampleNames(pd), colnames(ex))) stop("Column names of expression matrix must be identical to\n", "the sample names of the phenodata table.\n", "You could use 'options(error=recover)' to compare the", "values of 'sampleNames(pd)' and 'colnames(ex)'.\n") } else { pd = annotatedDataFrameFrom(ex, byrow=FALSE) } obj = ExpressionSet(ex, phenoData=pd) ## FIXME: these should probably added to obj before, or simultaneously to, exprs; ## as is this can provoke a lot of copying ## experimentData if (!missing(experimentDataFile)) experimentDataArgs$file=experimentDataFile if (!is.null(experimentDataArgs$file)) experimentData(obj) <- do.call(read.MIAME, experimentDataArgs) ## annotation if (!missing(annotation)) annotation(obj) <- annotation ## notes if (!missing(notesFile)) notes(obj) <- readLines(notesFile) validObject(obj) obj } setMethod(ExpressionSet, "missing", function(assayData, phenoData=AnnotatedDataFrame(), featureData=AnnotatedDataFrame(), experimentData=MIAME(), annotation=character(), protocolData=AnnotatedDataFrame(), ...) { .ExpressionSet( assayData=assayDataNew(exprs=new("matrix")), phenoData=phenoData, featureData=featureData, experimentData=experimentData, annotation=annotation, protocolData=protocolData, ...) }) setMethod(ExpressionSet, "environment", function(assayData, phenoData=annotatedDataFrameFrom(assayData, byrow=FALSE), featureData=annotatedDataFrameFrom(assayData, byrow=TRUE), experimentData=MIAME(), annotation=character(), protocolData=annotatedDataFrameFrom(assayData, byrow=FALSE), ...) { .ExpressionSet(assayData=assayData, phenoData=phenoData, featureData=featureData, experimentData=experimentData, annotation=annotation, protocolData=protocolData, ...) }) setMethod(ExpressionSet, "matrix", function(assayData, phenoData=annotatedDataFrameFrom(assayData, byrow=FALSE), featureData=annotatedDataFrameFrom(assayData, byrow=TRUE), experimentData=MIAME(), annotation=character(), protocolData=annotatedDataFrameFrom(assayData, byrow=FALSE), ...) { assayData <- assayDataNew(exprs=assayData) .ExpressionSet(assayData=assayData, phenoData=phenoData, featureData=featureData, experimentData=experimentData, annotation=annotation, protocolData=protocolData, ...) }) .DollarNames.ExpressionSet <- .DollarNames.eSet Biobase/R/methods-MIAME.R0000644000175200017520000001617114516003524015763 0ustar00biocbuildbiocbuildsetMethod("isCurrent", signature(object="MIAME", value="missing"), function(object, value) { cver <- callNextMethod() MIAMEres <- all(c(cver, "pubMedIds" %in% names(getObjectSlots(object)))) if("MIAxE" %in% names(cver)) { res <- c(cver["MIAxE"], MIAMEres) names(res) <- c("MIAxE", "MIAME") } else {res <- MIAMEres; names(res) <- "MIAME"} res }) setMethod("updateObject", signature(object="MIAME"), function(object, ..., verbose=FALSE) { if (verbose) message("updateObject(object = 'MIAME')") object <- asS4(object) if (isVersioned(object) && isCurrent(object)["MIAME"]) callNextMethod() else object <- updateObjectFromSlots(object, ..., verbose=verbose) classVersion(object) <- classVersion(class(object)) object }) # ========================================================================== setMethod("show", "MIAME", function(object) { tmp <- c("samples","hybridizations","normalization controls","preprocessing") Index <-c(length(object@samples) > 0, length(object@hybridizations) > 0, length(object@normControls) > 0, length(object@preprocessing) > 0) cat("Experiment data\n") cat(" Experimenter name:",object@name,"\n") cat(" Laboratory:",object@lab,"\n") cat(" Contact information:",object@contact,"\n") cat(" Title:",object@title,"\n") cat(" URL:",object@url,"\n") # deal with legacy MIAME objects! pmids = try( pubMedIds(object), silent=TRUE ) if (!inherits(pmids, "try-error")) cat(" PMIDs:",pmids,"\n") # end of dealing! if(length(object@abstract) > 0 && all(object@abstract!="")) cat("\n Abstract: A",length(strsplit(object@abstract," ")[[1]]), "word abstract is available. Use 'abstract' method.\n") else cat(" No abstract available.\n") if(any(Index)) cat(" Information is available on:", paste(tmp[Index],collapse=", "),"\n") nO = notes(object) if (length(nO) > 0) { cat(" notes:\n" ) if( is.list(nO) ) { nms = names(nO) ##a print width for the values, so we stay inside the margins pw = options("width")[[1]] - 6 for(i in 1:length(nO) ) { cat(" ", nms[i], ":", sep="") cat(" ", strbreak(nO[[i]], width=pw, exdent=0), sep="\n ") } } } } ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("abstract","MIAME",function(object) object@abstract) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("samples","MIAME",function(object) object@samples) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("hybridizations","MIAME",function(object) object@hybridizations) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("normControls","MIAME",function(object) object@normControls) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("preproc","MIAME",function(object) object@preprocessing) setReplaceMethod("preproc", "MIAME", function(object, value) { object@preprocessing <- value object }) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("pubMedIds","MIAME",function(object) object@pubMedIds) setReplaceMethod("pubMedIds","MIAME",function(object,value){ object@pubMedIds = value object }) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("otherInfo","MIAME",function(object) object@other) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("expinfo","MIAME", function(object) { tmp <- c(object@name, object@lab, object@contact, object@title, object@url) names(tmp) <- c("name","lab","contact","title","url") return(tmp) } ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("notes", signature(object="MIAME"), function(object) object@other) setReplaceMethod("notes", signature(object="MIAME", value="list"), function(object, value) { object@other <- value object }) setReplaceMethod("notes", signature(object="MIAME", value="character"), function(object, value) { object@other <- append(object@other, value) object }) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MIAME <- function(name = "", lab = "", contact = "", title = "", abstract = "", url = "", pubMedIds = "", samples = list(), hybridizations = list(), normControls = list(), preprocessing = list(), other = list()) { .MIAME(name=name, lab=lab, contact=contact, title=title, abstract=abstract, url=url, pubMedIds=pubMedIds, samples=samples, hybridizations=hybridizations, normControls=normControls, preprocessing=preprocessing, other=other) } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - read.MIAME <- function(filename=NULL,widget=getOption("BioC")$Base$use.widgets,...) { if(!is.null(filename)) { miame <- scan(filename,what="c",quiet=TRUE,sep="\n",...) MIAME(name=miame[1], lab=miame[2], contact=miame[3], title=miame[4], abstract=miame[5], url=miame[6]) } else if(widget) { requireNamespace("tkWidgets", quietly=TRUE) || stop("Requires tkWidgets") tmp <- tkWidgets::tkMIAME() MIAME(name=tmp$ExperimentName, lab=tmp$LabName, contact=tmp$ContactInfo, title=tmp$ExperimentTitle, abstract=tmp$Description, url=tmp$URL) } else MIAME() } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("combine", c("MIAME", "MIAME"), function(x, y, ...) { if (identical(x,y)) return (x) for (sl in names(getSlots(class(x)))) { if (identical(slot(x,sl),slot(y,sl))) next slot(x,sl) <- switch(sl, ## multiple elements possible name=, lab=, contact=, title=, url=, pubMedIds=, samples=, hybridizations=, normControls=, preprocessing=, other= { c(slot(x,sl),slot(y,sl)) }, ## just a single entry abstract= { paste(slot(x,sl), slot(y,sl), collapse="\n") }, .__classVersion__= { stop("'MIAME' objects have different class version strings") }, ## unknown { warning("\n unknown or conflicting information in MIAME field '", sl,"'; using information from object 'x'") slot(x,sl) }) } x }) Biobase/R/methods-MIAxE.R0000644000175200017520000000037614516003524016036 0ustar00biocbuildbiocbuild# ================================== # MIAxE Class Methods # ---------------------------------- setMethod("show", signature=signature(object="MIAxE"), function(object) { cat(class( object ), "\n", sep="") }) Biobase/R/methods-MultiSet.R0000644000175200017520000000016414516003524016674 0ustar00biocbuildbiocbuildsetMethod("initialize", signature(.Object="MultiSet"), function(.Object, ...) callNextMethod()) Biobase/R/methods-NChannelSet.R0000644000175200017520000002175214516003524017276 0ustar00biocbuildbiocbuildNChannelSet <- .NChannelSet .init_NChannelSet <- # copy constructor, validation selectMethod(initialize, "ANY") setMethod("initialize", "NChannelSet", function(.Object, assayData, phenoData, ...) { mySlots <- slotNames(.Object) dotArgs <- list(...) isSlot <- names(dotArgs) %in% mySlots if (missing(assayData)) { assayData <- do.call(assayDataNew, dotArgs[!isSlot], envir=parent.frame()) } if (missing(phenoData)) { phenoData <- annotatedDataFrameFrom(assayData, byrow=FALSE) } if (is.null(varMetadata(phenoData)[["channel"]])) { varMetadata(phenoData)[["channel"]] <- factor(rep("_ALL_", nrow(varMetadata(phenoData))), levels=c(assayDataElementNames(assayData), "_ALL_")) } ## ensure sample names OK -- all assayData with names; ## phenoData with correct names from assayData nms <- if (storageMode(assayData) == "list") names(assayData) else ls(assayData) assaySampleNames <- vector("list", length(nms)) names(assaySampleNames) <- nms for (nm in nms) { cnames <- colnames(assayData[[nm]]) assaySampleNames[[nm]] <- if (is.null(cnames)) { sampleNames(phenoData) } else cnames } sampleNames(assayData) <- assaySampleNames sampleNames(phenoData) <- sampleNames(assayData) do.call(callNextMethod, c(.Object, assayData = assayData, phenoData = phenoData, dotArgs[isSlot])) }) .invalid_NChannelAssayNames <- function(object) { phenoChannels <- levels(varMetadata(object)[["channel"]]) assayChannels <- c("_ALL_", assayDataElementNames(object)) setdiff(union(assayChannels, phenoChannels), intersect(assayChannels, phenoChannels)) } setValidity("NChannelSet", function(object) { msg <- validMsg(NULL, isValidVersion(object, "NChannelSet")) if (!"channel" %in% names(varMetadata(object))) { txt <- "\n 'NChannelSet' varMetadata must have a 'channel' column" msg <- validMsg(msg, txt) } else { channel <- varMetadata(object)[["channel"]] if (!is(channel, "factor")) { txt <- paste("\n 'NChannelSet' varMetadata column 'channel'", "must be class 'factor'") msg <- validMsg(msg, txt) } else if (0 < length(levels(channel))) { if (length(.invalid_NChannelAssayNames(object))) { txt <- 'NChannelSet levels(varMetadata(object)$channel) / assayDataElementNames() mismatch; see ?"channelNames<-,NChannelSet,character-method"' txt <- paste(strwrap(c("\n", txt), exdent=2), collapse="\n ") msg <- validMsg(msg, txt) } } if (!("_ALL_" %in% levels(channel))) { txt <- paste("\n 'NChannelSet' varMetadata 'channel'", "requires '_ALL_' as a level") msg <- validMsg(msg, txt) } } if (is.null(msg)) TRUE else msg }) .assayDataGets_NChannelSet <- function(object, value) { phenoData <- phenoData(object) ## update channel names, making some attempt to preserve order from <- channelNames(object) to <- assayDataElementNames(value) lvls <- c(from[from %in% to], to[!to %in% from], "_ALL_") varMetadata(phenoData)$channel <- factor(as.character(varMetadata(phenoData)$channel), levels=lvls) .init_NChannelSet(object, assayData=value, phenoData=phenoData) } setReplaceMethod("assayData", c("NChannelSet", "environment"), .assayDataGets_NChannelSet) setReplaceMethod("assayData", c("NChannelSet", "list"), .assayDataGets_NChannelSet) setMethod("channelNames", "NChannelSet", function(object, ...) { nms <- assayDataElementNames(object) lvls <- levels(varMetadata(object)$channel) if (all(nms %in% lvls)) ## FIXME: this accomodates invalid (previous) NChannelSet instances ## order to match channelNames nms <- lvls[lvls %in% nms] nms }) setGeneric("channelNames<-", function(object, ..., value) standardGeneric("channelNames<-")) setReplaceMethod("channelNames", c("NChannelSet", "character"), function(object, ..., value) { if (!is.null(names(value))) { ## re-name & re-order channelNames(object) <- as.list(value) } else { ## re-order if (!all(sort(value) == sort(channelNames(object)))) stop("'value' elements must include all channelNames()") varMetadata(object)$channel <- factor(varMetadata(object)$channel, levels=c(value, "_ALL_")) validObject(object) } object }) setReplaceMethod("channelNames", c("NChannelSet", "list"), function(object, ..., value) { from <- unlist(value, use.names=FALSE) if (!all(sort(from) == sort(channelNames(object)))) stop("'value' elements must include all channelNames()") to <- names(value) if (any(duplicated(to))) stop("duplicated channelNames are not allowed") assayData <- assayData(object) levels(varMetadata(object)$channel) <- c(value, list("_ALL_" = "_ALL")) if (is.list(assayData)) { idx <- match(from, names(assayData)) names(assayData)[idx] <- to } else { env <- new.env(parent=emptyenv()) for (i in seq_along(value)) env[[ to[i] ]] = assayData[[ from[i] ]] if (storageMode(object) == "lockedEnvironment") assayDataEnvLock(env) assayData <- env } assayData(object) <- assayData object }) setMethod("channel", signature = signature( object = "NChannelSet", name = "character"), function(object, name, ...) { if (length(name) != 1) stop("\n 'NChannelSet' channel 'name' must be one element", "\n was: '", paste0(name, collapse="', '"), "'") obj <- selectChannels(object, name) # subset phenoData appropriately sampleNames(phenoData(obj)) <- sampleNames(assayData(obj)) ExpressionSet(assayData(obj)[[name]], phenoData = phenoData(obj), featureData = featureData(obj), experimentData = experimentData(obj), annotation=annotation(obj), protocolData=protocolData(obj), ...) }) setMethod("selectChannels", signature = signature( object = "NChannelSet", names="character"), function(object, names, ...) { if (any(duplicated(names))) stop("NChannelSet' channels 'names' must be unique") channelNames <- channelNames(object) badNames <- !names %in% channelNames if (any(badNames)) stop("NChannelSet' channels 'names' must be channels") dropChannels <- channelNames[!channelNames %in% names] if (0 == length(dropChannels)) return(object) ## assayData assayData <- assayDataSubsetElements(assayData(object), names) ## phenoData -- drop unneeded info metadata <- varMetadata(object)[["channel"]] okMetadata <- !metadata %in% dropChannels phenoData <- phenoData(object)[,okMetadata] ## reduce factor levels varMetadata(phenoData)[["channel"]] <- factor(metadata[okMetadata], levels=unique(c(names, "_ALL_"))) initialize(object, assayData = assayData, phenoData = phenoData, featureData = featureData(object), experimentData=experimentData(object), annotation=annotation(object), protocolData=protocolData(object), ...) }) setMethod("sampleNames", signature=signature(object="NChannelSet"), function(object) { assayData <- assayData(object) nms <- if (storageMode(object) == "list") names(assayData) else ls(assayData) res <- vector("list", length(nms)) names(res) <- nms for (nm in nms) res[[nm]] <- colnames(assayData[[nm]]) ident <- sapply(res[-1], function(elt, ref) all(elt==ref), res[[1]]) if (all(ident)) res[[1]] else res }) setReplaceMethod("sampleNames", c("NChannelSet", "list"), function(object, value) { assayData <- assayData(object) sampleNames(assayData) <- value phenoData <- phenoData(object) sampleNames(phenoData) <- sampleNames(assayData) protocolData <- protocolData(object) sampleNames(protocolData) <- sampleNames(assayData) .init_NChannelSet(object, assayData=assayData, phenoData=phenoData, protocolData=protocolData) }) Biobase/R/methods-ScalarObject.R0000644000175200017520000000114314516003524017460 0ustar00biocbuildbiocbuildmkScalar <- function(obj) { switch(typeof(obj), character=.ScalarCharacter(obj), logical=.ScalarLogical(obj), integer=.ScalarInteger(obj), double=.ScalarNumeric(obj), stop("no scalar class implemented for type: ", typeof(obj))) } setMethod("show", "ScalarObject", function(object) { cat(object, "\n") }) setMethod("show", "ScalarCharacter", function(object) { if (is.na(object)) cat(NA, "\n") else cat(sprintf('"%s"\n', object)) }) Biobase/R/methods-SnpSet.R0000644000175200017520000000374614516003524016353 0ustar00biocbuildbiocbuildsetMethod("initialize", "SnpSet", function(.Object, assayData = assayDataNew(call = call, callProbability = callProbability, ...), phenoData = annotatedDataFrameFrom(assayData, byrow=FALSE), featureData = annotatedDataFrameFrom(assayData, byrow=TRUE), experimentData = MIAME(), annotation = character(), protocolData = phenoData[,integer(0)], call = new("matrix"), callProbability = matrix(numeric(), nrow=nrow(call), ncol=ncol(call), dimnames=dimnames(call)), ...) { callNextMethod(.Object, assayData = assayData, phenoData = phenoData, featureData = featureData, experimentData = experimentData, annotation = annotation, protocolData = protocolData) }) setValidity("SnpSet", function(object) { assayDataValidMembers(assayData(object), c("call", "callProbability")) }) setMethod("exprs", c("SnpSet"), function(object) assayDataElement(object, "call")) setReplaceMethod("exprs", c("SnpSet", "matrix"), function(object, value) { assayDataElementReplace(object, "call", value) }) setMethod(snpCall, "SnpSet", function(object, ...) { assayDataElement(object, "call") }) setMethod(snpCallProbability, "SnpSet", function(object, ...) { assayDataElement(object, "callProbability") }) setReplaceMethod("snpCall", c("SnpSet", "matrix"), function(object, ..., value) { assayDataElementReplace(object, "call", value) }) setReplaceMethod("snpCallProbability", c("SnpSet", "matrix"), function(object, ..., value) { assayDataElementReplace(object, "callProbability", value) }) Biobase/R/methods-VersionedClass.R0000644000175200017520000000771314516003524020061 0ustar00biocbuildbiocbuild## ========================================================================== ## Versioned: mix-in class to add version information ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## initialize -- see VersionedClasses setMethod("initialize", signature(.Object="Versioned"), function(.Object, versions = list(), ...) { .Object <- callNextMethod(.Object, ...) classVersion(.Object)[names(versions)] <- versions .Object }) ## validity setValidity("Versioned", function(object) { msg <- NULL if (!isVersioned(object)) msg <- validMsg(msg, "missing version string") if (is.null(msg)) TRUE else msg }) isValidVersion <- function(object, nm) {# utility msg <- NULL if (!isS4(object)) msg <- validMsg(msg, "not an S4 object") if (isVersioned(object) && !all(isCurrent(object)[nm])) { vers <- isCurrent(object)[nm] vers[is.na(vers)] <- FALSE names(vers) <- nm bad <- names(vers[vers==FALSE]) msg <- validMsg(msg, paste0("out-of-date class version '", bad, "'")) } msg } ## isVersioned setMethod("isVersioned", signature(object="ANY"), function(object) FALSE) setMethod("isVersioned", signature(object="character"), function(object) { ## need to check getNamespace("Biobase") during Biobase installation length(object) > 0 && nchar(object)>0 && (isClass(object) || isClass(object, where=getNamespace("Biobase"))) && extends(getClass(object), "Versioned") }) setMethod("isVersioned", signature(object="Versioned"), function(object) ".__classVersion__" %in% names(attributes(object))) ## classVersion setMethod("classVersion", signature(object="ANY"), function(object) .VersionsNull()) setMethod("classVersion", signature(object="character"), function(object) { if (isVersioned(object)) attr(getClass(object)@prototype, ".__classVersion__") else callNextMethod() }) setMethod("classVersion", signature(object="Versioned"), function(object) { if (isVersioned(object)) { if (isS4(object@.__classVersion__)) object@.__classVersion__ else ## force update to S4 instance ## user needs to recognize need for update updateObject(object@.__classVersion__) } else callNextMethod() }) setReplaceMethod("classVersion", signature(object="Versioned", value="Versions"), function(object, value) { object@.__classVersion__ <- value object }) ## isCurrent setMethod("isCurrent", signature(object="ANY"), function(object, value) NA) setMethod("isCurrent", signature(object="Versioned", value="missing"), function(object, value) isCurrent(object, class(object))) setMethod("isCurrent", signature(object="Versioned", value="character"), function(object, value) { # vers <- classVersion(value) # if(!all(names(vers) %in% names(classVersion(object)))) { # res <- FALSE # names(res) <- value # return(res) # } vers <- classVersion(value) if (extends(class(object),value) && isVersioned(object) && all(names(vers) %in% names(classVersion(object)))) { res <- classVersion(object)[names(vers)] == vers names(res) <- names(vers) } else { res <- FALSE names(res) <- value } res <- c(S4=isS4(object), res) res }) ## show setMethod("show", signature(object="Versioned"), function(object) callNextMethod()) Biobase/R/methods-VersionsNull.R0000644000175200017520000000053614516003524017574 0ustar00biocbuildbiocbuild## Unversioned ## setMethod("initialize", signature(.Object="VersionsNull"), function(.Object, ...) { if (!missing(...)) warning("ignoring arguments to '.VersionsNull()')") .Object }) setMethod("show", signature(object="VersionsNull"), function(object) print("No version")) Biobase/R/methods-aggregator.R0000644000175200017520000000336514516003524017256 0ustar00biocbuildbiocbuildsetMethod("initialize", signature(.Object="aggregator"), function(.Object, aggenv=new.env(hash=TRUE), ...) { callNextMethod(.Object, aggenv=aggenv, ...) }) # ========================================================================== setMethod("aggenv", "aggregator", function(object) object@aggenv) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("initfun", "aggregator", function(object) object@initfun) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("aggfun", "aggregator", function(object) object@aggfun) # ========================================================================== Aggregate <- function(x, agg) { if( !is(agg, "aggregator") ) stop("second argument must be an aggregator") if( is.null(x) || length(x) == 0 ) return() if(is.character(x)) { for( i in 1:length(x) ) { nm <- x[i] if( !exists(nm, envir=aggenv(agg), inherits=FALSE) ) assign(nm, envir=aggenv(agg), initfun(agg)(nm, x)) else { v1 <- get(nm, envir=aggenv(agg)) assign(nm, aggfun(agg)(nm, v1), envir=aggenv(agg)) } } } else if(is.list(x)) { nms <- names(x) for( i in 1:length(x) ) { nm <- nms[i] if( !exists(nm, envir=aggenv(agg), inherits=FALSE) ) assign(nm, envir=aggenv(agg), initfun(agg)(nm, x[[i]])) else { v1 <- get(nm, envir=aggenv(agg)) assign(nm, envir=aggenv(agg), aggfun(agg)(nm, v1, x[[i]])) } } } else stop("bad type for Aggregate") } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Biobase/R/methods-container.R0000644000175200017520000000301214516003524017103 0ustar00biocbuildbiocbuild# ========================================================================== setMethod("content", "container", function(object) object@content) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("locked", "container", function(object) object@locked) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("[", "container", function(x, i, j, ..., drop = FALSE) { .container(content = content(x), x = x@x[i], locked = locked(x)) } ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("[[", "container", function(x, i, j, ...) { x@x[[i]] } ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setReplaceMethod("[[", "container", function(x, i, j,..., value) { if( locked(x) ) stop("cannot assign into a locked container") cv <- class(value) cont <- content(x) if( !extends(cv, cont) ) stop("the container is class '", cont, "' the object is class '", cv, "' cannot assign") x@x[[i]] <- value x } ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("length", "container", function(x) length(x@x)) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("show", "container", function(object) { cat("Container of ", content(object), "\n", sep="") print(object@x) } ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Biobase/R/methods-eSet.R0000644000175200017520000007126714516003524016042 0ustar00biocbuildbiocbuild# ========================================================================== # eSet Class Validator # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("initialize", signature(.Object="eSet"), function(.Object, assayData, phenoData=annotatedDataFrameFrom(assayData, byrow=FALSE), featureData=annotatedDataFrameFrom(assayData, byrow=TRUE), experimentData=MIAME(), annotation=character(0), protocolData=phenoData[,integer(0)], ...) { ## NB: Arguments provided in '...' are used to initialize ## slots if possible (when called from some subclass). ## Otherwise, extra args in '...' are added as elements ## to assayData. We do this to allow subclasses to ## rely on default contructor behavior for initializing ## slots. ## ## NB2: Extra args to the assayData constructor will ## be passed along as long as current class doesn't ## have a slot with a matching name. mySlots <- slotNames(.Object) dotArgs <- list(...) isSlot <- names(dotArgs) %in% mySlots if (missing(assayData)) assayData <- do.call(assayDataNew, dotArgs[!isSlot], envir=parent.frame()) else { checkClass(assayData, "AssayData", class(.Object)) nms <- if (storageMode(assayData)=="list") names(assayData) else ls(assayData) dupNames <- nms %in% names(dotArgs[!isSlot]) if (any(dupNames)) warning("initialize argument(s) '", paste(nms[dupNames], collapse="' '"), "' also present in 'assayData'; argument(s) ignored") } if (!missing(phenoData)) checkClass(phenoData, "AnnotatedDataFrame", class(.Object)) dimLabels(phenoData) <- c("sampleNames", "sampleColumns") if (!missing(featureData)) checkClass(featureData, "AnnotatedDataFrame", class(.Object)) dimLabels(featureData) <- c("featureNames", "featureColumns") ## create the protocolData, if necessary if (!missing(protocolData)) { checkClass(protocolData, "AnnotatedDataFrame", class(.Object)) dimLabels(protocolData) <- c("sampleNames", "sampleColumns") } ## coordinate sample names adSampleNames <- sampleNames(assayData) if (all(sapply(adSampleNames, is.null))) sampleNames(assayData) <- sampleNames(phenoData) pdSampleNames <- sampleNames(protocolData) if (all(sapply(pdSampleNames, is.null))) sampleNames(protocolData) <- sampleNames(phenoData) ## where do feature names come from? assayData or featureData adFeatureNames <- featureNames(assayData) if (all(sapply(adFeatureNames, is.null))) featureNames(assayData) <- featureNames(featureData) ## create new instance from 'extra' dotArgs, and from instance for (s in names(dotArgs)[isSlot]) slot(.Object, s) <- dotArgs[[s]] callNextMethod(.Object, assayData=assayData, phenoData=phenoData, featureData=featureData, experimentData=experimentData, annotation=annotation, protocolData=protocolData) }) updateOldESet <- function(from, toClass, ...) { # to MultiExpressionSet from <- asS4(from) ophenoData <- asS4(phenoData(from)) metadata <- ophenoData@varMetadata if (all(dim(metadata)==0)) { warning("replacing apparently empty varMetadata") metadata <- data.frame(numeric(ncol(ophenoData@pData)))[,FALSE] } if (!is.null(metadata[["varName"]])) { row.names(metadata) <- metadata[["varName"]] metadata[["varName"]] <- NULL } else if (!is.null(names(ophenoData@pData))) { row.names(metadata) <- names(ophenoData@pData) } if (!is.null(metadata[["varLabels"]])) { names(metadata)[names(metadata)=="varLabels"] <- "labelDescription" metadata[["labelDescription"]] <- as.character(metadata[["labelDescription"]]) } ## phenoData pData <- ophenoData@pData phenoData <- AnnotatedDataFrame(data=pData, varMetadata=metadata) ## sampleNames if (any(sampleNames(assayData(from))!=sampleNames(phenoData))) { warning("creating assayData colnames from phenoData sampleNames") sampleNames(assayData(from)) <- sampleNames(phenoData) } ## reporterNames if (length(from@reporterNames) == dim(from)[[1]]) { if (any(sapply(assayData(from),rownames)!=from@reporterNames)) warning("creating assayData featureNames from reporterNames") featureNames(assayData(from)) <- from@reporterNames } else { warning("creating numeric assayData featureNames") featureNames(assayData(from)) <- 1:dim(from)[[1]] } if (sum(dups <- duplicated(featureNames(assayData(from))))>0) { warning("removing ", sum(dups), " duplicated featureNames") from@assayData <- lapply(from@assayData, function(elt) elt[!dups,]) } ## description description <- from@description if (is(description,"MIAME")) { if (length(from@notes)!=0) { warning("addding 'notes' to 'description'") description@other <- c(description@other,from@notes) } if (length(from@history)!=0) { warning("adding 'history' to 'description'") description@other <- c(description@other,from@history) } } else { warning("'description' is not of class MIAME; ignored") description <- NULL } ## reporterInfo if (any(dim(from@reporterInfo)!=0)) warning("reporterInfo data not transfered to '",toClass, "' object") ## new object object <- new(toClass, assayData = from@assayData, phenoData = phenoData, featureData = annotatedDataFrameFrom(from@assayData, byrow=TRUE), experimentData = updateObject(description), annotation = from@annotation) validObject(object) object } setAs("eSet", "ExpressionSet", function(from, to) updateOldESet(from, "ExpressionSet")) setAs("eSet", "MultiSet", function(from, to) updateOldESet(from, "MultiSet")) updateESetTo <- function(object, template, ..., verbose=FALSE) { if (verbose) message("updateESetTo(object = 'eSet' template = '", class(template), "')") ## cannot instantiate a 'virtual' class, so use accessor functions ## to update class components. Better than direct slot access? funcs <- c("assayData", "phenoData", "experimentData", "annotation") eval(parse(text=paste(funcs,"(template)<-", "updateObject(", funcs, "(object), ..., verbose=verbose)"))) result <- try(featureData(template) <- featureData(object), silent=TRUE) if (inherits(result, "try-error")) featureData(template) <- annotatedDataFrameFrom(assayData(object), byrow=TRUE) vers <- classVersion("eSet") classVersion(template)[names(vers)] <- vers # current class version, eSet & 'below' only template } setMethod("updateObject", signature(object="eSet"), function(object, ..., verbose=FALSE) { if (verbose) message("updateObject(object = 'eSet')") object <- asS4(object) if (isVersioned(object) && isCurrent(object)["eSet"]) return(callNextMethod()) ## storage.mode likely to be useful to update versioned classes, too storage.mode.final <- storageMode(object) storage.mode <- if (storage.mode.final == "lockedEnvironment") "environment" else storage.mode.final additionalSlots <- setdiff(slotNames(class(object)), slotNames("eSet")) names(additionalSlots) <- additionalSlots if (!isVersioned(object)) { object <- updateESetTo(object, new(class(object), storage.mode=storage.mode), ..., verbose=verbose) storageMode(object) <- storage.mode.final } else if (classVersion(object)["eSet"]=="1.0.0") { ## added featureData slot; need to update phenoData object <- do.call(new, c(list(class(object), assayData = updateObject(assayData(object), ..., verbose=verbose), phenoData = AnnotatedDataFrame(data=pData(object), varMetadata=varMetadata(object)), featureData = annotatedDataFrameFrom(assayData(object), byrow=TRUE), experimentData = updateObject(experimentData(object), ..., verbose=verbose), annotation = annotation(object)), lapply(additionalSlots, function(x) slot(object, x)))) } else if (classVersion(object)["eSet"]=="1.1.0") { ## added scanDates slot object <- do.call(new, c(list(class(object), assayData = updateObject(assayData(object)), phenoData = updateObject(phenoData(object)), featureData = updateObject(featureData(object)), experimentData = updateObject(experimentData(object)), annotation = annotation(object)), lapply(additionalSlots, function(x) slot(object, x)))) } else if (classVersion(object)["eSet"]=="1.2.0") { ## added protocolData slot, removed scanDates slot scanDates <- object@scanDates protocolData <- phenoData(object)[,integer(0)] if (length(scanDates) > 0) { protocolData[["ScanDate"]] <- scanDates } object <- do.call(new, c(list(class(object), assayData = updateObject(assayData(object)), phenoData = updateObject(phenoData(object)), featureData = updateObject(featureData(object)), experimentData = updateObject(experimentData(object)), annotation = annotation(object), protocolData = protocolData), lapply(additionalSlots, function(x) updateObject(slot(object, x))))) } else { stop("cannot update object of class '", class(object), "', claiming to be eSet version '", as(classVersion(object)["eSet"], "character"), "'") } object }) setMethod("updateObjectTo", signature(object="eSet", template="eSet"), updateESetTo) setValidity("eSet", function(object) { msg <- validMsg(NULL, isValidVersion(object, "eSet")) dims <- dims(object) if (ncol(dims) > 0) { ## assayData msg <- validMsg(msg, assayDataValidMembers(assayData(object))) if (any(dims[1,] != dims[1,1])) msg <- validMsg(msg, "row numbers differ for assayData members") if (any(dims[2,] != dims[2,1])) msg <- validMsg(msg, "sample numbers differ for assayData members") ## featureData if (dims[1,1] != dim( featureData(object))[[1]]) msg <- validMsg(msg, "feature numbers differ between assayData and featureData") if (!identical(featureNames(assayData(object)), featureNames(featureData(object)))) msg <- validMsg(msg, "featureNames differ between assayData and featureData") ## phenoData if (dims[2,1] != dim(phenoData(object))[[1]]) msg <- validMsg(msg, "sample numbers differ between assayData and phenoData") if (!identical(sampleNames(assayData(object)), sampleNames(phenoData(object)))) msg <- validMsg(msg, "sampleNames differ between assayData and phenoData") ## protocolData if (dim(phenoData(object))[[1]] != dim(protocolData(object))[[1]]) msg <- validMsg(msg, "sample numbers differ between phenoData and protocolData") if (!identical(sampleNames(phenoData(object)), sampleNames(protocolData(object)))) msg <- validMsg(msg, "sampleNames differ between phenoData and protocolData") } if (is.null(msg)) TRUE else msg }) setMethod("preproc", "eSet", function(object) preproc(experimentData(object))) setReplaceMethod("preproc", signature=signature(object="eSet"), function(object, value) { ed <- experimentData(object) preproc(ed) <- value object@experimentData <- ed object }) setMethod("show", signature=signature(object="eSet"), function(object) { cat(class(object), " (storageMode: ", storageMode(object), ")\n", sep="") adim <- dim(object) if (length(adim)>1) cat("assayData:", if (length(adim)>1) paste(adim[[1]], "features,", adim[[2]], "samples") else NULL, "\n") cat(" element names:", paste(assayDataElementNames(object), collapse=", "), "\n") .showAnnotatedDataFrame(protocolData(object), labels=list(object="protocolData")) .showAnnotatedDataFrame(phenoData(object), labels=list(object="phenoData")) .showAnnotatedDataFrame(featureData(object), labels=list( object="featureData", sampleNames="featureNames", varLabels="fvarLabels", varMetadata="fvarMetadata")) cat("experimentData: use 'experimentData(object)'\n") pmids <- pubMedIds(object) if (length(pmids) > 0 && all(pmids != "")) cat(" pubMedIds:", paste(pmids, sep=", "), "\n") cat("Annotation:", annotation(object), "\n") }) setMethod("storageMode", "eSet", function(object) storageMode(assayData(object))) setReplaceMethod("storageMode", signature=signature( object="eSet", value="character"), function(object, value) { ad <- assayData(object) storageMode(ad) <- value object@assayData <- ad object }) setMethod("sampleNames", signature(object="eSet"), function(object) sampleNames(phenoData(object))) setReplaceMethod("sampleNames", signature=signature(object="eSet", value="ANY"), function(object, value) { pd <- phenoData(object) sampleNames(pd) <- value ad <- assayData(object) sampleNames(ad) <- value prd <- protocolData(object) if (nrow(prd) == 0) { prd <- pd[,integer(0)] } else { sampleNames(prd) <- value } object@phenoData <- pd object@protocolData <- prd unsafeSetSlot(object, "assayData", ad) }) setMethod("featureNames", signature=signature(object="eSet"), function(object) featureNames(assayData(object))) setReplaceMethod("featureNames", signature=signature(object="eSet", value="ANY"), function(object, value) { fd <- featureData(object) featureNames(fd) <- value ad <- assayData(object) featureNames(ad) <- value object@featureData <- fd unsafeSetSlot(object, "assayData", ad) }) setMethod("dimnames", "eSet", function(x) { list(featureNames(x), sampleNames(x)) }) setReplaceMethod("dimnames", "eSet", function(x, value) { featureNames(x) <- value[[1]] sampleNames(x) <- value[[2]] x }) setMethod("dim", "eSet", function(x) assayDataDim(assayData(x))) setMethod("dims", "eSet", function(x) assayDataDims(assayData(x))) setMethod("[", "eSet", function(x, i, j, ..., drop = FALSE) { if (missing(drop)) drop <- FALSE if (missing(i) && missing(j)) { if (!missing(...)) stop("specify genes or samples to subset; use '", substitute(x), "$", names(list(...))[[1]], "' to access phenoData variables") return(x) } if (!isVersioned(x) || !isCurrent(x)["eSet"]) x <- updateObject(x) if (!missing(j)) { phenoData(x) <- phenoData(x)[j,, ..., drop = drop] protocolData(x) <- protocolData(x)[j,, ..., drop = drop] } if (!missing(i)) featureData(x) <- featureData(x)[i,,..., drop=drop] ## assayData; implemented here to avoid function call orig <- assayData(x) storage.mode <- assayDataStorageMode(orig) assayData(x) <- switch(storage.mode, environment =, lockedEnvironment = { aData <- new.env(parent=emptyenv()) if (missing(i)) # j must be present for(nm in ls(orig)) aData[[nm]] <- orig[[nm]][, j, ..., drop = drop] else { # j may or may not be present if (missing(j)) for(nm in ls(orig)) aData[[nm]] <- orig[[nm]][i,, ..., drop = drop] else for(nm in ls(orig)) aData[[nm]] <- orig[[nm]][i, j, ..., drop = drop] } if ("lockedEnvironment" == storage.mode) assayDataEnvLock(aData) aData }, list = { if (missing(i)) # j must be present lapply(orig, function(obj) obj[, j, ..., drop = drop]) else { # j may or may not be present if (missing(j)) lapply(orig, function(obj) obj[i,, ..., drop = drop]) else lapply(orig, function(obj) obj[i, j, ..., drop = drop]) } }) x }) ## $ stops dispatching ?! ##setMethod("$", "eSet", function(x, name) `$`(phenoData(x), name)) setMethod("$", "eSet", function(x, name) { eval(substitute(phenoData(x)$NAME_ARG, list(NAME_ARG=name))) }) .DollarNames.eSet <- function(x, pattern = "") grep(pattern, names(pData(x)), value=TRUE) setReplaceMethod("$", "eSet", function(x, name, value) { phenoData(x)[[name]] = value x }) setMethod("[[", "eSet", function(x, i, j, ...) phenoData(x)[[i]]) setReplaceMethod("[[", "eSet", function(x, i, j, ..., value) { phenoData(x)[[i, ...]] <- value x }) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - setMethod("assayData", "eSet", function(object) object@assayData) setReplaceMethod("assayData", signature=signature( object="eSet", value="AssayData"), function(object, value) { object@assayData <- value object }) assayDataElementNames <- function(object) { if (storageMode(object) == "list") names(assayData(object)) else ls(assayData(object)) } assayDataElement <- function(object, elt) assayData(object)[[elt]] .validate_assayDataElementReplace <- function(obj, value) { if (!is.null(value)) { dimvalue <- dim(value) dimobj <- dim(obj)[seq_along(dimvalue)] if (!isTRUE(all.equal(unname(dimvalue), unname(dimobj)))) stop("object and replacement value have different dimensions") } if (!is.null(value)) { if (!is.null(dimnames(value))) { ## validate and harmonize dimnames vd <- Map(function(od, vd) { if (is.null(vd)) ## update vd to contain indexes into matrix od <- seq_along(od) else if (!setequal(od, vd)) stop("object and replacement value dimnames differ") od }, dimnames(obj), dimnames(value)) ## re-arrange value to have dimnames in same order as obj value <- do.call(`[`, c(list(value), vd, drop=FALSE)) } dimnames(value) <- dimnames(obj) } value } assayDataElementReplace <- function(obj, elt, value, validate=TRUE) { ## 'validate' added later, needs to be last for position matching if (validate) value <- .validate_assayDataElementReplace(obj, value) storage.mode <- storageMode(obj) switch(storageMode(obj), "lockedEnvironment" = { aData <- copyEnv(assayData(obj)) if (is.null(value)) rm(list=elt, envir=aData) else aData[[elt]] <- value assayDataEnvLock(aData) assayData(obj) <- aData }, "environment" = { if (is.null(value)) rm(list=elt, envir=assayData(obj)) else assayData(obj)[[elt]] <- value }, list = assayData(obj)[[elt]] <- value) obj } `assayDataElement<-` <- function(obj, elt, ..., value) ## 'value' is always the last argument, but needs to be 3rd for ## assayDataElementReplace assayDataElementReplace(obj, elt, value, ...) setMethod("phenoData", "eSet", function(object) object@phenoData) setReplaceMethod("phenoData", signature=signature( object="eSet", value="AnnotatedDataFrame"), function(object, value) { object@phenoData <- value if (nrow(protocolData(object)) == 0) { protocolData(object) <- value[,integer(0)] } object }) setMethod("pData", "eSet", function(object) pData(phenoData(object))) setReplaceMethod("pData", signature=signature( object="eSet", value="data.frame"), function(object, value) { pd <- phenoData(object) pData(pd) <- value phenoData(object) <- pd object }) setMethod("varMetadata", signature=signature(object="eSet"), function(object) varMetadata(phenoData(object))) setReplaceMethod("varMetadata", signature=signature( object="eSet", value="data.frame"), function(object, value) { pd <- phenoData(object) varMetadata(pd) <- value object@phenoData <- pd object }) setMethod("varLabels", signature=signature(object="eSet"), function(object) varLabels(phenoData(object))) setReplaceMethod("varLabels", signature=signature( object="eSet", value="ANY"), function(object, value) { pd <- phenoData(object) varLabels(pd) <- value object@phenoData <- pd object }) setMethod("featureData", signature(object="eSet"), function(object) object@featureData) setReplaceMethod("featureData", signature=signature( object="eSet", value="AnnotatedDataFrame"), function(object, value) { object@featureData <- value object }) setMethod("fData", signature=signature(object="eSet"), function(object) pData(featureData(object))) setReplaceMethod("fData", signature=signature( object="eSet", value="data.frame"), function(object, value) { fd <- featureData(object) pData(fd) <- value object@featureData <- fd object }) setMethod("fvarMetadata", signature=signature(object="eSet"), function(object) varMetadata(featureData(object))) setReplaceMethod("fvarMetadata", signature=signature( object="eSet", value="data.frame"), function(object, value) { fd <- featureData(object) varMetadata(fd) <- value object@featureData <- fd object }) setMethod("fvarLabels", signature=signature(object="eSet"), function(object) varLabels(featureData(object))) setReplaceMethod("fvarLabels", signature=signature( object="eSet", value="ANY"), function(object, value) { pd <- featureData(object) varLabels(pd) <- value object@featureData <- pd object }) setMethod("experimentData", signature(object="eSet"), function(object) object@experimentData) setReplaceMethod("experimentData", signature=signature( object="eSet", value="MIAME"), function(object, value) { object@experimentData <- value object }) setMethod("description", signature(object="eSet"), function(object, ...) { experimentData(object) }) setReplaceMethod("description", signature=signature( object="eSet", value="MIAME"), function(object, value) { object@experimentData <- value object }) setMethod("notes", signature(object="eSet"), function(object) otherInfo(experimentData(object))) setReplaceMethod("notes", signature=signature( object="eSet", value="ANY"), function(object, value) { ed <- experimentData(object) notes(ed) <- value object@experimentData <- ed object }) setMethod("pubMedIds", signature(object="eSet"), function(object) pubMedIds(experimentData(object))) setReplaceMethod("pubMedIds", signature=signature( object="eSet", value="character"), function(object, value) { ed <- experimentData(object) pubMedIds(ed) <- value object@experimentData <- ed object }) setMethod("abstract", "eSet", function(object) abstract(experimentData(object))) setMethod("annotation", "eSet", definition = function(object) object@annotation) setReplaceMethod("annotation", signature=signature( object="eSet", value="character"), function(object, value) { object@annotation <- value object }) setMethod("protocolData", "eSet", function(object) { tryCatch(object@protocolData, error = function(x) { phenoData(object)[,integer(0)] }) }) setReplaceMethod("protocolData", signature=signature( object="eSet", value="AnnotatedDataFrame"), function(object, value) { test <- try(object@protocolData, silent = TRUE) if (inherits(test, "try-error")) object <- updateObject(object) object@protocolData <- value object }) setMethod("combine", signature=signature( x="eSet", y="eSet"), function(x, y, ...) { if (class(x) != class(y)) stop("objects must be the same class, but are '", class(x), "', '", class(y), "'") if (any(annotation(x) != annotation(y))) stop("objects have different annotations: ", annotation(x), ", ", annotation(y)) if (!isCurrent(x)[["eSet"]]) x <- updateObject(x) assayData(x) <- combine(assayData(x), assayData(y)) phenoData(x) <- combine(phenoData(x), phenoData(y)) featureData(x) <- combine(featureData(x), featureData(y)) experimentData(x) <- combine(experimentData(x),experimentData(y)) protocolData(x) <- combine(protocolData(x), protocolData(y)) ## annotation -- constant x }) Biobase/R/packages.R0000644000175200017520000000707714516003524015255 0ustar00biocbuildbiocbuild# ========================================================================== # Functions to operate with packages: # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # createPackage; package.version; dumpPackTxt # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # uses strings.R # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - createPackage <- function(pkgname, destinationDir, originDir, symbolValues, unlink=FALSE, quiet=FALSE) { ## check arguments for (a in c("pkgname", "destinationDir", "originDir")) if (!is.character(get(a)) || length(get(a))!=1) stop("'", a, "' must be character(1)") ## check whether destinationDir, originDir exist and are directories for (a in c("destinationDir", "originDir")) if(!file.exists(get(a)) || !file.info(get(a))$isdir) stop("'", a, "' must be a directory (", get(a), ")") ## locate / remove / create destination directory pkgdir = file.path(destinationDir, pkgname) if (!quiet) cat("Creating package in", pkgdir, "\n") if (file.exists(pkgdir)) { if (unlink) { unlink(pkgdir, recursive=TRUE) if (file.exists(pkgdir)) { stop("directory '", pkgdir, "' exists and could not be removed; ", "remove it manually or choose another destination directory") } else { if(!quiet) cat("existing", pkgdir, "was removed.\n") } } else stop("directory '", pkgdir, "' exists; use unlink=TRUE ", "to remove it, or choose another destination directory") } ## if (file.exists) ## predefined symbols symbolValues = append(symbolValues, list(TODAY=date(), PKGNAME=pkgname)) ## copy (from strings.R) copySubstitute(dir(originDir, full.names=TRUE), pkgdir, symbolValues, recursive=TRUE) return(list(pkgdir=pkgdir)) } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - package.version <- function(pkg, lib.loc = NULL) { curWarn <- getOption("warn") on.exit(options(warn=curWarn),add=TRUE) options(warn=-1) desc <- packageDescription(pkg, lib.loc, "Version") if (is.na(desc)) stop("package '", pkg, "' does not exist") desc } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dumpPackTxt <- function (package) { # stolen from "library" to get descriptive info out on stdout pkgpath <- find.package(package) # outFile <- tempfile("Rlibrary") # outConn <- file(outFile, open = "w") docFiles <- file.path(pkgpath, c("TITLE", "DESCRIPTION", "INDEX")) headers <- c("", "Description:\n\n", "Index:\n\n") footers <- c("\n", "\n", "") for (i in which(file.exists(docFiles))) { writeLines(headers[i], sep = "") writeLines(readLines(docFiles[i]) ) writeLines(footers[i], sep = "") } # close(outConn) # file.show(outFile, delete.file = TRUE) } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ##strictly internal, not for export ##take an AnnotatedDataFrame object and create a valid format ## section for a man page pD2Rd <- function(pD) { if(!inherits(pD, "AnnotatedDataFrame") ) stop("only works for AnnotatedDataFrames") fmt = "\\format{\n The format is:\n An \\code{ExpressionSetObject} with covariates:\n" covs = "\\itemize{" vMD = varMetadata(pD) vL = varLabels(pD) for(i in 1:length(vL) ) { item = paste0("\\item \\code{", vL[i], "}: ", vMD[i,1]) covs = paste(covs, item, sep="\n") } paste0(fmt, covs, "\n}\n}\n") } Biobase/R/rowOp-methods.R0000644000175200017520000000277714516003524016250 0ustar00biocbuildbiocbuildsetGeneric("rowMedians", function(x, na.rm=FALSE, ...) { # Backward compatibility for rowMedians(imat=...) if (missing(x)) { args <- list(...); if (is.element("imat", names(args))) { x <- args$imat; .Deprecated(msg="The name of the matrix argument for Biobase::rowMedians() has been changed from 'imat' to 'x'."); } } standardGeneric("rowMedians") }) setMethod("rowMedians", signature(x="matrix"), function(x, na.rm=FALSE, ...) { na.rm <- as.logical(na.rm); hasNAs <- TRUE; # Add as an argument? /2007-08-24 .Call("rowMedians", x, na.rm, hasNAs, TRUE, PACKAGE="Biobase"); }) setMethod("rowMedians", signature(x="ExpressionSet"), function(x, na.rm=FALSE, ...) { rowMedians(exprs(x), na.rm=na.rm, ...); }) setGeneric("rowQ", function(imat, which) standardGeneric("rowQ")) setMethod("rowQ", signature(imat="matrix", which="numeric"), function(imat, which) { if (any(is.na(imat))) stop("cannot handle missing values.") if (length(which) != 1 || !is.finite(which)) stop("'which' must be length one and finite numeric") if(is.integer(imat)) imat <- structure(as.numeric(imat), dim=dim(imat)) .Call("rowQ", imat, which, PACKAGE="Biobase") }) setMethod("rowQ", signature(imat="ExpressionSet", which="numeric"), function(imat, which) rowQ(exprs(imat), which)) rowMin <- function(imat) rowQ(imat, 1) rowMax <- function(imat) rowQ(imat, ncol(imat)) Biobase/R/strings.R0000644000175200017520000000366614516003524015170 0ustar00biocbuildbiocbuild# ========================================================================== # Functions to deal with strings: # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # strbreak # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - strbreak <- function(x, width=getOption("width"), exdent=2, collapse="\n") { width <- as.integer(width) if(is.na(width) || width<=1) stop("invalid argument 'width'") exdent <- as.integer(exdent) if(is.na(exdent) || exdent>width) stop("invalid argument 'exdent'") ww <- width-exdent lb <- paste0(collapse, paste(rep(" ", exdent), collapse="")) rv <- character(length(x)) for(i in seq(along.with=x)) { first <- 1 last <- width if(nchar(x[i])>width) { f <- seq(width+1, nchar(x[i]), ww) first <- c(first, f) last <- c(last, f+ww-1) } rv[i] <- paste(substring(x[i], first=first, last=last), collapse=lb) } return(rv) } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lcSuffix <- function(x, ignore.case = FALSE) { x <- as.character(x) if( ignore.case ) x <- toupper(x) nc <- nchar(x, type="char") for(i in 1:min(nc)) { ## The +1 and +2 are because substr is funny ss = substr(x, nc - i + 1, nc) if( any(ss != ss[1] )) { if (i == 1L) # trailing char mismatch return("") return(substr(x[1], nc - i + 2, nc)) } } return(substr(x[1], nc - i + 1, nc)) } lcPrefix <- function(x, ignore.case=FALSE) { x <- as.character(x) if (ignore.case) x <- toupper(x) nc <- nchar(x, type="char") for (i in 1:min(nc)) { ss <- substr(x, 1, i) if (any(ss != ss[1])) { return(substr(x[1], 1, i-1)) } } substr(x[1], 1, i) } lcPrefixC <- function(x, ignore.case=FALSE) { .Call("lc_prefix", x, ignore.case) } Biobase/R/tools.R0000644000175200017520000002711714516003524014634 0ustar00biocbuildbiocbuild# ========================================================================== # Uncategorized tools for Biobase # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # testBioCConnection # openPDF # listLen; reverseSplit # rowQ; rowMedians; rowMin; rowMax # copySubstitute # isUnique # cache # userQuery # ========================================================================== testBioCConnection <- function() { ## Stifle the "connected to www.... garbage output curNetOpt <- getOption("internet.info") on.exit(options(internet.info=curNetOpt), add=TRUE) options(internet.info=3) ## First check to make sure they have HTTP capability. If they do ## not, there is no point to this exercise. http <- as.logical(capabilities(what="http/ftp")) if (http == FALSE) return(FALSE) ## find out where we think that bioC is bioCoption <- getOption("BIOC") if (is.null(bioCoption)) bioCoption <- "http://www.bioconductor.org" ## Now check to see if we can connect to the BioC website biocURL <- url(paste0(bioCoption,"/main.html")) options(show.error.messages=FALSE) test <- try(readLines(biocURL)[1]) options(show.error.messages=TRUE) if (inherits(test,"try-error")) return(FALSE) else close(biocURL) return(TRUE) } # ========================================================================== openPDF <- function(file, bg=TRUE) { OST <- .Platform$OS.type if (OST=="windows") shell.exec(file) else if (OST == "unix") { bioCOpt <- getOption("BioC") pdf <- getOption("pdfviewer") msg <- NULL if (is.null(pdf)) msg <- "getOption('pdfviewer') is NULL" else if (length(pdf)==1 && nchar(pdf[[1]])==0) msg <- "getOption('pdfviewer') is ''" if (!is.null(msg)) stop(msg, "; please use 'options(pdfviewer=...)'") cmd <- paste(pdf,file) if( bg ) cmd <- paste(cmd, "&") system(cmd) } return(TRUE) } # ========================================================================== reverseSplit = function(inList) { if (length(inList)==0) { return(inList) } lens = sapply(inList, length) nms = rep(names(inList), lens) vals = unlist(inList) split(nms, vals) } # ========================================================================== copySubstitute = function(src, dest, symbolValues, symbolDelimiter = "@", allowUnresolvedSymbols = FALSE, recursive = FALSE, removeExtension = "\\.in$") { ## Check integrity of arguments (...lots of bureaucracy) mess = NULL if (!is.list(symbolValues) && !is.vector(symbolValues)) mess = "'symbolValues' must be a list or vector." if (!all(sapply(symbolValues, is.character))) mess = "'symbolValues' must only contain characters." if (is.null(names(symbolValues)) || any(names(symbolValues)=="")) mess = "'symbolValues' must have non-empty names." if (!(is.character(symbolDelimiter) && length(symbolDelimiter)==1 && all(nchar(symbolDelimiter)==1))) mess = "'symbolDelimiter' must be a single character." if (!is.logical(allowUnresolvedSymbols)) mess = "'allowUnresolvedSymbols' must be of type logical." if(!is.null(mess)) stop(mess) ## Here the actual subsitution and copying work is done ## cin and cout are single files or connections cpSubsCon = function(cin, cout) { txt = readLines(cin) for (i in seq(along.with=symbolValues)) { txt = gsub(nm[i], symbolValues[[i]], txt, fixed=TRUE) if (any(is.na(txt))) stop("trying to replace ", nm[i], " by an NA") } ## check for unresolved symbols if(!allowUnresolvedSymbols) { re = regexpr(paste0(symbolDelimiter, ".+", symbolDelimiter), txt) wh = which(re>0) if(length(wh)>0) { ml = attr(re, "match.length") mess = "UNRESOLVED SYMBOLS:\n" mess <- paste0(mess, paste(sapply(wh, function(i) { paste("Line", i, ":", substr(txt[i], re[i], re[i] + ml[i])) }), collapse="\n")) stop(mess) } } ## finito writeLines(text=txt, con=cout) } ## Substitution on filenames subsFileName = function(x) { res = gsub(removeExtension, "", x) for (i in seq(along.with=symbolValues)) { res = gsub(nm[i], symbolValues[[i]], res) if (any(is.na(res))) stop("trying to replace ", nm[i], " by an NA") } return(res) } ## Iterate over character vectors of filenames and ## recursively descend into directories cpSubs = function(src, dest) { usage = paste("\n* Usage:", "\n* with recursive=FALSE:", "\n* 'src' a connection open for reading or a file name AND", "\n* 'dest' a connection open for writing or a file name", "\n* with recursive=TRUE:", "\n* 'src' a vector of file and directory names and 'dest' a directory name\n\n") if (!recursive) { ## {file,connection} to {file,connection} if ((("connection" %in% class(src) && isOpen(src, rw="r")) || (is.character(src) && length(src)==1)) && (("connection" %in% class(dest) && isOpen(dest, rw="w")) || (is.character(dest) && length(dest)==1))) { if(is.character(dest)) dest = subsFileName(dest) cpSubsCon(src, dest) return(invisible(NULL)) } } else { ## recursive: file(s) and/or directory(ies) to directory if (is.character(src) && is.character(dest) && length(dest==1)) { ## if 'dest' does not exist, create if (file.access(dest) != 0) { if (!dir.create(dest)) stop("'dest' does not exist, and cannot be created: ", dest) } ## process src isdir = file.info(src)$isdir for (k in seq(along.with=src)) { ## name of source file or directory (without path) tmp = unlist(strsplit(src[k], .Platform$file.sep)) tmp = subsFileName(tmp[length(tmp)]) ## name of destination file or directory (with path) destname = file.path(dest, tmp) if (isdir[k]) { if(!dir.create(destname)) stop("directory cannot be created: ", destname) cpSubs(dir(src[k], full.names=TRUE), destname) } else cpSubsCon(src[k], destname) } ## for k return(invisible(NULL)) } ## if(is.character...) } ## if(recursive)else stop(usage) } ## cpSubs ## DO IT! nm = paste0(symbolDelimiter, names(symbolValues), symbolDelimiter) cpSubs(src, dest) } # ========================================================================== note <- function(...) { ## A "less drastic" version of warning() if (nargs() > 0) { message <- paste("Note:",...,"\n") cat(message) } } ## ================================================== isUnique = function(x){ rv = rep(TRUE, length(x)) if(length(x)>=2) { ord = order(x) ox = x[ord] ## compare consecutive values neq = (ox[-length(ox)]!=ox[-1]) ## a value is unique if neither its predecessor nor successor ## in the ordered vector are the same rv[ord] = c(neq, TRUE) & c(TRUE, neq) } return(rv) } ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## O.Sklyar, EBI, 2006 matchpt <- function(x, y) { storage.mode(x)="double" if (is.vector(x)) x <- matrix(x, ncol = 1L, nrow = length(x)) if (!(is.matrix(x) && is.numeric(x))) stop("'x' must be a numeric matrix.") if (!missing(y)) { storage.mode(y)="double" if (is.vector(y)) y <- matrix(y, ncol = 1L, nrow = length(y)) if (!(is.matrix(y) && is.numeric(y))) stop("y must be a numeric matrix.") if (ncol(x) != ncol(y)) stop("x and y must have the same number of columns.") } else { y <- NULL } res <- .Call("matchpt", x, y, PACKAGE = "Biobase") res <- as.data.frame(res) rownames(res) <- rownames(x) return(res) } ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cache <- function(expr, dir=".", prefix="tmp_R_cache_") { pexpr <- parse(text=deparse(substitute(expr))) pexpr <- as.list(pexpr[[1]]) name <- as.character(pexpr[[2]]) RHS <- pexpr[[3]] cachefile <- file.path(dir, paste0(prefix, name, ".RData")) if(file.exists(cachefile)) { load(cachefile) assign(name, get(name), envir=parent.frame()) } else { dir.create(dir, recursive=TRUE, showWarnings=FALSE) assign(name, eval(RHS, envir=parent.frame()), envir=parent.frame()) save(list=name, file=cachefile, envir=parent.frame()) } invisible(get(name, envir=parent.frame())) } ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - validMsg <- function(msg, result) { if (is.character(result)) { append(msg, result) } else msg } checkClass <- function(object, expected, prefix="", call.=FALSE, ...) { if (!is(object, expected)) stop(prefix, " '", deparse(substitute(object)), "' is class '", paste(class(object), collapse="', '"), "' but should be or extend '", paste(expected, collapse="', '"), "'", call.=call., ...) } ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - userQuery <- function(msg, allowed=c("y","n"), default = "n", case.sensitive = FALSE) { ## Prompts the user with a string and for an answer ## repeats until it gets allowable input if(interactive()){ repeat { allowMsg <- paste0("[", paste(allowed,collapse="/"), "] ") outMsg <- paste(msg, allowMsg) cat(outMsg) if(case.sensitive) ans <- readLines(n=1) else ans <- tolower(readLines(n=1)) if (ans %in% allowed) break else cat(ans, "is not a valid response, try again.\n") } return(ans) }else{ return(default) } } unsafeSetSlot <- function(obj, slot, value) { ## This function _assumes_ that there is exactly on references to ## 'obj'; the number of references is not usually detectable from ## casual perusal of the code, because R only maintains the ## _illusion_ of pass by value. Use this with the greatest care, ## if at all. invisible(.Call("unsafe_set_slot", obj, slot, value)) } subListExtract <- function(L, name, simplify=FALSE, keep.names=TRUE) { ## Return a list or vector obtained by extracting the element named ## 'name' from each inner list of L. ## ## L - list ## name - character vector length 1, name of inner list element ## simplify - return an atomic vector or error if TRUE ## keep.names - if TRUE, keep names of L on result ## ## this is just a mockup, to play with the desired interface ## and behavior. will be replaced with a C version. .Call(sublist_extract, L, name, simplify, keep.names) ## f <- function(x) { ## wh <- match(name, names(x), 0) ## if (wh > 0) ## x[[wh]] ## else # would be nice to have index in msg ## stop("bad inner list, no element named ", name) ## } ## if (!simplify) ## ans <- lapply(L, f) ## else { ## ans <- sapply(L, f) ## if (is.list(ans)) ## stop("unable to simplify") ## } ## if (!keep.names) ## names(ans) <- NULL ## ans } Biobase/R/updateObjectTo.R0000644000175200017520000000144314516003524016402 0ustar00biocbuildbiocbuildsetMethod("updateObjectTo", signature(object="ANY", template="ANY"), function(object, template, ..., verbose=FALSE) { if (verbose) message("updateObject(object = 'ANY', template = 'ANY') default for object = '", class(object), "' template = ", class(template), "'") if (class(object)==class(template)) object else { tryCatch(as(object, class(template)), error=function(err) { stop("\nupdateObjectTo:\n ", "cannot convert object of class '", class(object), "' ", "to template class '", class(template), "'")}) } }) Biobase/R/vignettes.R0000644000175200017520000000673414516003524015506 0ustar00biocbuildbiocbuild## Functions to detect and open vignettes: ## uses tools.R getPkgVigs = function(package=NULL) { pkgs <- .packages() if( !is.null(package) ) { if( !is.character(package) ) stop("`package' must be a character vector of package names") rows <- match(package, pkgs) if( all(is.na(rows)) ) stop("packages '", paste(package, collapse="', '"), "' are not loaded") if( any(is.na(rows)) ) warning("packages '", paste(package[is.na(rows)], collapse="', '"), "' are not loaded") pkgs <- pkgs[rows[!is.na(rows)]] } vigrds = file.path(find.package(pkgs), "Meta", "vignette.rds") ## construct data frame with: package, path, title pkgVigs = vector(mode="list", length=length(vigrds)) for(j in seq(along.with=vigrds)) { if (file.exists(vigrds[j])) { v = readRDS(vigrds[j]) f = v[, "PDF"] f = ifelse(f=="", as.character(NA), file.path(dirname(dirname(vigrds[j])), "doc", f)) tit = v[, "Title"] tit[tit==""] = as.character(NA) rv= data.frame(package = pkgs[j], filename = f, title = tit, stringsAsFactors=FALSE) pkgVigs[[j]] = rv } } ## for j do.call(rbind, args=pkgVigs) } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - openVignette = function(package=NULL) { vig = getPkgVigs(package) if (is.null(vig)) { txt <- "" if (!is.null(package)) { ss <- if (length(package)==1) "" else "s" pkgs <- paste(package, collapse=", ") txt <- sprintf(" for package%s %s", ss, pkgs) } warning("no vignettes found", txt) } else { hasnofile = is.na(vig$filename) vig$title[hasnofile] = paste(vig$title[hasnofile], "[-]") vig = vig[order(hasnofile, tolower(vig$package), tolower(vig$title)), ] index = menu(paste(vig$package, "-", vig$tit), title = paste("Please select a vignette:", if(any(hasnofile)) "(entries marked by '[-]' have no PDF file)" else "" )) if (index>0) { vif = vig$filename[index] if(!is.na(vif)) { openPDF(vif) cat("Opening", vif, "\n") ## browseURL(paste0("file://", vig[index])) } else { stop("Sorry, no PDF file could be found for this vignette.\n", "Please reinstall the package with built vignettes.") } } } } #----------------------------------------------------------- # add package vignettes to the menu bar of the Windows Rgui ##---------------------------------------------------------- addVigs2WinMenu = function(pkgName) { if ((.Platform$OS.type == "windows") && (.Platform$GUI == "Rgui") && interactive()) { vigFile = system.file("Meta", "vignette.rds", package=pkgName) if (!file.exists(vigFile)) { warning(sprintf("%s contains no vignette, nothing is added to the menu bar", pkgName)) } else { vigMtrx = readRDS(vigFile) vigs = file.path(find.package(pkgName), "doc", vigMtrx[, "PDF"]) names(vigs) = vigMtrx[,"Title"] if (!"Vignettes" %in% winMenuNames()) winMenuAdd("Vignettes") pkgMenu = paste("Vignettes", pkgName, sep="/") winMenuAdd(pkgMenu) for (i in seq(along.with=vigs)) winMenuAddItem(pkgMenu, names(vigs)[i], paste0("shell.exec(\"", vigs[i], "\")")) } ## else ans = TRUE } else { ans = FALSE } ## else ans } Biobase/R/zzz.R0000644000175200017520000000166214516003524014326 0ustar00biocbuildbiocbuild# ========================================================================== # Biobase package initialization # ========================================================================== .onLoad <- function(libname, pkgname) { ## need contents to load at library attach - not at build time .initContents() ## in environment.R .buildBiobaseOpts() ## in environment.R } .onAttach <- function(libname, pkgname) { msg0 <- "Vignettes contain introductory material; view with 'browseVignettes()'. To cite Bioconductor, see 'citation(\"Biobase\")', and for packages 'citation(\"pkgname\")'." msg <- strwrap(paste(msg0, collapse=""), exdent=4, indent=4) packageStartupMessage(paste(c("Welcome to Bioconductor\n", msg), collapse="\n"), "\n") addVigs2WinMenu("Biobase") } .onUnload <- function( libpath ) { library.dynam.unload( "Biobase", libpath ) } Biobase/README.md0000644000175200017520000000063614516003524014424 0ustar00biocbuildbiocbuild[](https://bioconductor.org/) **Biobase** is an R/Bioconductor package that implements base functions for Bioconductor. See https://bioconductor.org/packages/Biobase for more information including how to install the release version of the package (please refrain from installing directly from GitHub). Biobase/build/0000755000175200017520000000000014516024030014232 5ustar00biocbuildbiocbuildBiobase/build/vignette.rds0000644000175200017520000000052114516024030016567 0ustar00biocbuildbiocbuildR]K0M׺/?`äD>;hd{Lh˘Mr==ޛ !-iy~q'; r .`Z ts X+| Q|9s>LrPzR,+C)߹H av,)R&9bΗZ"YhLyCthnOwO{ NEʕ0Juʇaz!f*"Tb"Yam!^s6cf@2>ZlP>/lfEPQ9΍G?z3Biobase/data/0000755000175200017520000000000014516003524014051 5ustar00biocbuildbiocbuildBiobase/data/SW.rda0000644000175200017520000101314014516003524015072 0ustar00biocbuildbiocbuild7zXZi"6!X])TW"nRʟXgqjn]L$Զ֢̩+.D _hy=\0B U 6*=.ok/YFFb[#L@Yn;|fjݿøecǙniҝk5M"IRM4&ۭǪw5,I'@M1k,ۧ7 {Y@!D!E64O\8Aav1T"HLL|+^3gWdK'ܗ,1H&(,IJ!~!-TW+=6Ir#2>{+K^ 7 _6=ԃxz?!qty Y@.Ans"8OT>\hX&SA\}V/+"J6Q+[6~6q6iTgI`n b!+muw Uw5tHs$u9tlc.Ӵiҙ\9^/S@ @@7blDb%}?~Ox\!ܾ",$n<^eo`Qa4VV=o[| &XM5t!a0v74HefG=F?"yUhƫ5-,+K۴233i4T>DWp _~ Ӵ'SM1dj :Ǵ,HJ8A\ş _͛wl%℔3WSOY\52>ɤΥSa=d5Zhذmb:tnE#gŸXY mw+9 шJ)N@ܠɪТ1 PĮz-X~/m7n %0rIOC41JvXetb̪fOHE NYĩh+x61ay[7vb~9}Ƞ pg59IzFOKY8(7-Ke6^[]o.k_Br6bq(G\ii1Fo+V~4.dh@`#%e 5xN}&U,~./W@{ic }N=B7mc[8ǪWRu*fx*S5dFIv/\)FLl3f\z}0$#/nz 0\a.YLveT.bAi)VDqugخ? ccjy|\Z()D!Ǯ;G6IRῦA]đhlJ: c|͟@{gvdޫlSU!tk]/ay`Fu~oVΌdE)P'jO1 77`+z#EAz7IF0UfA٩HP}/i ~=r \[2Cu]L|ڲ6JŤaك6\Q)|W;@xeF}]zi5-FRm:܆XC_f'b0 IRnCM#3l;7Ӵ'Ks/.V+׹4ӣa)2g?+hD.M.}EpSwވ 6) ٔEfwF5sk)'ރ 4G[T<ŰgZXI2Vr((n3^auөVùb@5b|- b'2Jø&wod54T0rGDë5@"Qa+#әCL^j`ۉAԊ<A#'鑼UYxySeKJrp?T!OӸu ;T$Ac%7Npy"]͔A/ iٵDAexr{W^ߨ̢ARC@Pr8s Ӌ,"Va-5W=4z*,`Ƚ䜫ZJ٠<͊2^gp~;MZ3PX+k>ebsfZ8ň8}5(^aO!1MR킗4(UVBFe\ۚ*e }LWWcnh!SY>5C6և \)Tt$zv g$|t~ {=\#»#ö>8r^;W- | TZx5B -I$Z52_P6  CjGYJ9YJmrS :ulWJ;0{`vOd[Ez&R.`/΍$#oH=?%|5lgB%C^k"=I`RƤ TcqyF t)#qyiW6I7'P0u<"G5S-!FpSac2 ^EK 3QoǞAY 2}@y"rf??`{ƒӭRqr[ФB(sμAod!/+<T8䚳I'p" p5(C2u`€aMz} *1x9*A~h¥ۙ`~`@6b۟Td+=K_pzlE,Yi2b=B~{Kv[HkC?_Ex56,;e.cYĵ,PL4w$o%@@[Ǝ`rxq]nU:< ꙧH#9ZA:dB<n50ƄMxխWn`vt+Ǩsa|dLJV5];2.ftYf͵i@) v pԷ ˝RFWucԢAQh(rBc˶^~V@ r熓e#o'1p>4z24wzH-=Z˿3#W2y7BE'{R#qB+M^~4t%JqiC KdK+\}N15ϒTK)B5,:vލތ6*КBt/;l')#H!90a+x5`LҠR3V(ٽLnF&pRb=e'6OO7%9}Jyc"y5SNyʌJQU"8LR*2(i=Cl6B%wanj!G\:!yYB9( 7;5sutvUs#U)oD'7co$4įtCv8]405vzy cb""Zcգ=;Q\ί[;:on;eQʃNߢ4d9eH߇E "ecזAjr+}',dq3@lf3W{`O9otoմ0#n- $<="1ubX9"@=ǴFt ut4p9#7BRR1Gx$%sǘˮmUBӀp>͛eN-Y>ɵ ֏]Z3bɲQӑ.e懗MFEˣCpf)8j}$Zrdn-AņTO| ].UT z#Dͼ%Fy%Hl;Rv#x ObVJ+V Űe2m(>i>7VˣH;AζBiMu{6rWrTv} 76a(R%݄; c'!ݍMnݵ8gU{~Vpمo|\3kcPuJ嶺<>ƛ ݊mߋeoN6BV2unU*n{:Dn!. BDPèu$=(&Rj2:XCd( ^5jȬL^ҌISks GJr*MD.}H^Z0x4;SLtQ#gU˸ۧ]~=NQبY=gy;hKl:L~uxn6 g֑Ӫ%/hvVc-M|84[gNJbu0V,+=]~>RoPY& ]2Zp׹pO;mЉ8 {o6$+ 2>dL3^(}$@}] Sz}JlVf"װ YJkç{KJ#\e4^w\m6 B3 U\6=?Bl6*BJ4N)ȻLb|x/dJ+ <(fXl+zG;[ }K((3j$'fv.B # h%8ҙe()]9Z0)+^,l_tb:< ~#xX4W6]-q" 'U(Ƈ:=Az/99d[ǃkP*ۡN#'܄<ɝ{}^O@ 4ֲ*.2>;uQ[\Ƴ ɞ}yalUm4w~b -"w` u%ˈTTu%w|^@:lpNf23FFO6\/ɤIvCY!X#pdX45t49_l&x8nBɂGi_`0T2G|#-[)?5 M:a[_Шp<\x_!Y{fDӬ9'w: {#aLMeP۩xF5+[ӲX)q?]$FhwD}z\X+nO=tOTs hmme%_uiirS=1 e.xPb(49e:>uѤ,%P FHrА{si6m\6;~:!v [v*jӍ_I9z'v5Oۜ(1Ccz,xv)eTe΢jZsksOUN*}a_ ?XYJ͹^}B̵, &5\P?g֐R*Laƍ vkxIϰ>5d奪0IJْ!TW+:tC?G/$GqP}-X\ PJ B] FѫT%'>& X:ALLZaC%N(Ψ8L%mMJ_nyVCkU) Q@_/рP:Gx?Hl X|^)fd&ցqW,sگ@6βlس}zy4Ʊx5P8E22JDeUTD#qGw5Ÿ F,v~eɴ |x\C;s,?f٣Xγ34 *XTGJA1,200f_"]!jenKiꗍQ^= ɵN7uJ Shq\sAaے`J)(:vf[3SȱI^`-`߽3XYgVr}zуtd% Z`f@a&d:W]* ynh/o=M²'z̎./ 0A7׼ӀU+XJ/M}Yyϣ֍TnͲKUY}h`G#%\GvOo03rZN!h[3ucb3xO:`_j۴;1:Qe7 $ôsK7=%կF8 "zw[EE@%ra=H]!0LJ6DV"@G7{e"^Enya˭9<'v ,؄P׹Ó'hAwA1YZE x>!4 i"B"O^ra_jx+hF?2DZ]0^9ho  0k[>R#7 ^xdޭQ.6K^Pz$*bRȮM҅諤c )Tj#C7:8$[ܞT]BL))6vʟÇ=SBʴfrF&7F[W˄H#)XC,/63c5tl֡v)\.ډJ4-ae]M x;T u)-rK^?~3~A^vM СkXIR /5Y=WZv.+%[f>X;e%#T6 yZ?Yq {\HsҢ譧mykDx.rYvN.TmQ Ug.r=vsFJp3NM|͇\;ʫ$?ExNfeW]L*]l@%1b̡@<"9v2`@fz%΁`gp|M|im<ؙ:{?SU<¼pfS0Dmȇۛ^J58v)zѾ:JEko25dx}Attd{jcDFD9i{T9/uN4-kr7얿l WXvԹlML\q6CV^{M%yYx.&=sOuB?W\f!I~s]/nҼͶPg6ekm67aFM+ІL0sѽh>'s60+  6c;JihzY .:~5 .R+ΞBz~o ZNƺ6q\ܕ@8NȦ]SuZY3X=ȧ`O"~ ̑$AbQ!qRf%AC~'j_ iy= (0Pz&?4G8}Nŋ1J0j@?g2~ n0F) T|$5hs/٤P#e'[}TI*fB2qM9Սi1 _%gj[/ŧU6~XTe&vLqN `̀. <.Y+|nXQ;LdS't>mUOu6&*5.u+P}옞.#痣5h$aGǗC1ϋDdp-u*HJC u[vVG wL${Kk;j(HI r`$gxJ1REjfȇQ.=,["X1f*nID*uϦl*3yQ) 9?ۧ|U^S D\@N k:8JZǩ~&^ʗƢYS/р/.;H:d&zW2&YyەR # $a-M'gζ5[bC^g~õ4^vJ NNToh'`n*Ky Z΅H#V;5`݈uX#q1k_73oYA%NU0B4t6ᲟsYS ?h1" 3[K{_!(rW d!M8WxIA]qϐG.6͵YefG= OU -ɉYS1lH q`9G?(~d*S?g 8N1AVxg`p|V6wME 0bZ , nh8Lo9U` UjIXxEa1S!Ө)ba<8? Z,Kk9H$ vTlk<ݧ%Hu?R'*"J G2~D >IH) ȿg7%㿏vW_͖,Kh5w2x%{8TtJyá`߯4폈AŶ;w.G.L⑯['G-1 j\P~ډ!:x[FףS U>FSyY4-B 3Xpi{d3Su3]%ahA@Qђ:}WX*'5&$vE)Xl/`uXbK3҂mV9Sۗ9Z+>yCa; 뱚ВWQ-xN'8'X1N\Il  M>9ǘ+IkZ&,TkNsEg7s21su7''Ć ̄:Myej"ѶP+kO|侂}=:uA,]_`/$wnixH76Q,k'txs$=l$\OݱFq&epR9JxG "L;VEAݳ,, 9*X>8T̀/duOL]|/u|b>4%^8!^o_Bht5,ogdz:ZscEFwqKf, #5ۑ6wo΅o. nN1J&Q uD^"SEi g )+I@)SaD3geCsavFWw^XO3w럷/MrrAü@U,\Rjgl?cL Md!ٹic#\ʹLv(Ѥ~hݶ5 Ca#~4-h;p]N]tArǰn4B,u`!)`AW3:pYB~YcԌi('N^ȇ?J/2}tyBhT k9;iVSw7&]u>#Vbs "/Z=B*Vʢj= TmLMhbx3opa itglJ :v܉ qr6=GsXsaRJhr`|("قH|}*0}-JVtpsYh"D)|pCLŇ!]QcCkV:h:Sg&s(SU uB ˺yid1]{ȂP*],W Pz4S{&\Fk4.I_bʤ"B~$E%H UrAÁk^ǩIF^[ 8ك7l޸e"! *mX>*z4ujۛM ƵT-Ks^tEų;g0pDT_NړLzˤev6/f#A a 05sfvH$Nb6вFm;s:mgGxع`!XxR=܄eșo%FWd]_uحـx#O> ag~9>Dx;2O^y0Rk[J+qV2tǘYo`HiCw+nd~Z[J8OzўT˒ ;Nk4"q=e*twF@deHW_sski޵4rnE`$vm -pf*O%-DI,|T :z J#Ddkha9ApvH7[65M@`OLFUGJO۴YʚïE-\ֵ4\y>P'|KU܅?}NA 3FɑRQO7SB1\׻>tfaivLp>⎌;LD]& ] y*: :LLx!El}OmR$nWz82k u # mヅqdDdXO&hM`e8A>௹!7Y%.`@B1Ngy<0&XCjPM@T"k14e1qOYX?WvlkqVIFY򔐓x,//}{;,6"c'vP~3K @)P~!rY"=8-p v_kjZ7+4 2“m#ES<@yUŇN'(S<#NȇDR8]aVޤoB_{0%藐bDrQUA8 jOqg]Do~̺3 ;2le>Ɋ|AJ\LaHGB$_ )6z…I}iy^S!.0?)c/̆b'9Z.?`)DJ(v'/5$ wl2ٸKd Hч،z#:XB-ᶽ ǟ)5*j eqmIeg-۶`ZvrH-w^_5H1NQckD^pt) 6Rw/Z`zh3 dw'*]vT~T3L|Ͷ Y 3Q\{RFa{^Z؀eGq~.Ř$F{g滖Ads~iHz zAE e"3 Vp^eo0:_sX&}/sgGI@0R1&W7'3& B!$>m _BzUpXS, [IgŲ3gMNZYj>1n1H}KO>eN70D8%8f;dYf>p YO"i23}ݳIP.K3DS6'IăNt:,L lKuImS3v&Je:ͭGŴ8K/poozېO뽌kcdjAje&{}lX K\5L߮Gݐv9'ź9,ߋ6ڀNЍeZ6b; ObMl'mvcU CDM<7-F#й pP d_ZpT-=(֓ՄѢHj?rW+ G_͓*Zc6LD,s@D;%(ͪA.zUM'UJӓ;Un"4Z!5Bi-|Z5F+'~e3[9A6AE+\QC[7iqq_30B2n1'3 )\JEp4պ=i1j܀qf| 6QYf">~?'l\S,+ʽ_A ϗ4R_I#^  済2&EC gW?#g %{ws6|{=]B=ח3Q U|PAXxivfݪjXr^tnmTWq|Ĝc=XweT@:zHGVC6êK?V8(BP/.!ſ*kGݘ@]࿈qcPV| r_E#jI`6UP`YGcj\jY̆jM47_\*}$օCNW>5jvǜucӧj=TG ͅ2(79_ o18ҧ&|laIg9.[b19h(~|p]jltp}&cmbi(Ʌh)f /ҽx0)| +2Täqm!e a{R~? rQ#?ePT氊qwYZ$폭* MMF5ۙiZܑgF%F ԓxHq":}dYAE)bje@H9}ݐ &.HX m!s5w)HטǞ=촆ϛXޜOM IKkЙd$#.5 .SG +ÁズC*3+N|UP]*0^cF*^% _x;5âsG\B9viB[bh- '+C̸'4gZHBYyL_aވx'Am $RaUT2& ~S@.3oѯ M<[a7*1W`W⛀) 7}!vHvtx?0LBk:zY!tfֵtnTzYЋd qVVtmd#PQ419^S2? 2r;AG>[B6Ƶ9jM 7NјzEe`]$V"h(=;YD"bc+F+l %@ǃ:foo.NI_>E6V6?nAso=˽hYn󆍟`BiQ[ն1jCffl N!+lہ=&(ןM-n}FӽN=5e yMf#hPZ<RV)ا ԕQ1W זQnrFՇ5%SLX#vKp%جFҋ'-Z#Ogp?Ñs -),JV]E!os=+0 փK,}1dZ$ERqħ#Rpa) YSł*x=g}w41DMEBD=opBڶR*3L ?#T9e).5XGxp15|+uy<&wmtMeL;3lu)4 5Go͹Ƒ!־ld㏕-'E\x̫jeσUTf4Ć\mo&P`%Sy]p؇}":ʠQ=1_|4qvSG?w-Ssq;:ڝdCU ]՟W1ixP,{dxPHg.p)}*?>Y#ތȰݐ&~ yIk0:dabU h^y;In$rFiH<} T1:M+ \ F>\Nx!@Nd=[?WO]?8킻s+@63H>3]Pr98ƝVuޯy)|g4)4`s7vo cMMN%L ZIP/^p㟦9h:Г_AHՐ/y+ | r( m7eZjg螣jژ -k0-]k9iz;JE3֩ŠJNXx1;݂\Ljtv gn9\[M5=39X ǜ7.ƙ~` o'8{k߫ԗgauHk \Jqi{p1tFۚG(hȁଵ*CEnsߪ˕17u<ԍ %.\[3=8sL]׭L̕ :Qؖ+WTk'hH<\d 8Lx?_}GغU4~jj;۶D@)i1>R4<47̳0Xc/itk#o_2ؒW=&wVG͟JՃ6CWd|9ـfjAڻjfLೄS~Nm&f-`ֽP782d7qnH$wxA #\{Di˲17'a?.e*Qpᄠk%+Mkb S$ɤ?V-y24(iG @kz\pjE"/%yf"[At7zBYyw5z \ n% úaE-$+$PҒY`20!1\BV8Jm>}v!mbû[rAMp%7iyXKڅYHLv3PO/ @ߍKlX2'd߅gdz9l;I7CR\YӖ~D͋{W9r /؄/hQ̰]tUj^ݶ*7Nځb4fȦ hvƒΪT‡dF!rjg.|X%ЅsIwR B!t:!r\u,a'7)cvBdk \:rt`f2Į[r24%o1bܯr=]3%Y3RC%nyi&0E9b3sΤ,LQ$H fgݚ^W+Qgr%2dт@qT]Tt?6ս^K$+r;ԴH#MyQKb< ķI*~'a o9$ x[%dsh՘Czb5aJEJqn*BAk_^-K'Ӥ&ǴuT A}̛\ ]mI }BT.(Jl?4uǾ $ZLdǽ:JҘm4/g߂.<`Ҩz yxtK<(+ W==Eǰ&ߨܷpKc+ʢ*`n!_ (i9mNR [W7۞DsUdHj+nˊգ+Ys;^| f+̦ iiϚ539h+L$שAc=HynqwZد)dĸ~3 }BFy}~f6HV\`)96%Ql尲Igq{ S-qO  DSQZ *(/WKQ לFֳfo<+]`⭪lvMHtP}AH9pb  ?``Όr c`'QjB*W߳\Y EI6^(#4 d%D'Cy VX/cn!Vr}tܿtF7:q73S;i PF-|q-q9 e~jٟ8mN$T*|Obxv;@a^߾0SY88e"삍lI7o#489!NmP޶uӍӞlk F ATnQ\ݒzq*a2ސ6ƽ,͕C`_#wANƅ6ukŸ,?<::Ell\\n&욖d_do1lŪ=F3>S&}@l .%]?=GY@)6-BWkZ+0f.κ=Kd֫#ǁwoV"_Hmgh8B{-8o 򚀫5ざU# OL5"rTr WNQ_e[TI׳[y٤׆ڌIMAuȷlpkZ~մ4pҠFgY'PT+nz<).H|D#"5 -0ڟ/- 1sntkp*`0c`F&BQ'V'>v$3_T}("FyYF`9<4,[O"snSXwl'Tמr38|sZ^q"R?_rAZ`Ml/yiOjy L)t߅ZxK_5ԟ\G*w7̤o]T-/}7؏6ٹK|s}F ^QQ`X)GMaqLH (' շwÄW-=iG5x; *pZOLNaOwüW~ԸYsĸ_pn[΢ѿi=iN&BhnȻ_2WٍH52c~ElPi-&X-b/J$gf9qѪUSS&I}Vt?@i:qo4@2bߨ"+bzdo))ܽ9~\v¾Ga y{Z|5Ͻ/zo@{dRV LۤXD8>܍w !M>ʒ7悭P<iTAB]Dv`+ajۥ6Nd pZ#rB R|}J)iʸQh/TTl^pv;xSD48 LN'wm^RǷ6(*%w[0-[JNgˀ1,GkH=}Dy1Rv(\1WI'T$tqkJi Q T Q?K.'LMȋRYop\:>©";bpdb6<ú0-up)ʉτZEd4N7:ArBYa*`YxS.TYyڬr Yur-'?cSC*@>ΪB@oPWNzЁAʒaCVs,k]j/x_6V/N-((5loH~rXa};6aZ/FG|N;aw.~CFc(Ԙ|G2@AlErM;8Dk>]6$8=CT%*bG:V)yj7񽲧3j_[oT gMV^:9xwEodHeȁTh]%#6" $BGH( zTL,ݾxx{,Sf^5 i3(rX:_qT<.U'cՆ8/#⟼1aƆDE"y. s@"]׶\\T+qQ|"C%W[!9dE ћ3rL&8uuFRw C28&{i#R[@e1QM/90G$EpVN¤V1k-Ml4[Appi~9p{V V‚?B ajLM 2gafLJnvS7x%n"RsK}:([:\ AϏZEx1 btA9T.2+SUI.bCm:Ilrd߆A0l2K'0iS9"nHvv%L(qQCwo&bD@ $\i 2O, rEn[j 6[K-pL,=p/&U1YFzP%+(Xf9#[sGͬ6W[vKntE<{UGFf\W+}tŤ{t頴Ik XfD6Yg b$t02l^Л'7)8WSIP dmq^kHif&7[T~Y# NHI4&ͽ$‹#tgv6$١"G(fƣT4(gf> zڊˑU-w5\khz1)Ԏ7\".Mdj&PKРw`O>A^EBH^@j Ўog2A ` 4/J I_pMIyPjf1Ua'ʟ4E+z?ݧ`\o]#c|P*^?t Y)h&jRIhcw 6vK澧.;utf#Oʥ9z K(>đ" %PE-CJE(&87Ri77q, `^Z,иc}0+j9"B-JA(a|p}Jn͒f6#(7nҳEBkPƺ]3;ܦl yrG/HVШ%cmi1&ǏߕՏ_Aț8t>q ~Q D0cF?FhJy%tct?Sap z,W/%2b u8O[z%v^ҿ 0iA& Jr.L>"t <"jz΀l&۔pS0,'|[DZ,nI&MK4=p 1iV|-,t3%־KC\Sna=YA8[PvEv|VA4 ęK#'3r-tߍQT 3|n~{ WF [iPaJ1GE욟Qgzi*.toGfـsF S= (C( ajD"y7$ @pڅq g[ gF,j/²-ԮV:sW (E6O ryTJhNxj!ώ*GKy9awz33*$1]:2;w=l}.aҝ+)bdXۧd@br5(҉,r]YLkLF@q}hRZme25Ǔ7F ,`=džH(A{]WX_ޔ,LJ{',cږ7"5p :FxdmY}H_;*@VEfw)(OQ &%c":ͱin\9j)El滀<<`$^"({hOh`-f+ihqN.lEEwxCU6\ns&1"X->cw,g~GqRigaڬ^~ωֹ<7nm8Km-SI X}rSZ4\ucI 7]m_%=sQC8i{ rS݆tocc襂ߨPV42woE+;Iu쐫ǹ 3gI|'զ`yp1p˒(ǿ /1=!؃ƙ=պ} }j#wm s)m\g/B A4Y%^s̈́6] Jx<vn#g@"ScB E^%!674d2P6֢*˘;+NWښ6Wj`` ?8_2xF 8k\RqaRp|$+&!G5hM >i{4 OV-]֑yg=YZDWZBn>Y(nCjqAEx#ϟ0ŗMz^WhuJb~,r Cy :A8U+TtmS yW?hًT4'㳩޸Җo)?)^WR}I'nlM@ ٩hWῈ˄LUZU> ETܓ:$ь5ΉF~hj ξu>;S œi#|M!dȅ shNmsWZ;QB ^߫yv x(cuʀَ6r=}p~^Tqε0&i#%ٰb0ȆO2u * NW?d6n[)w)PQ݃IC8{E0/ ~ `C[{)E~Xl6Qfs0KL_vD!$<\fg9 ]q4R܎ȳR>se_hyCQx]7̊ՉWn5nk (_9*!=2Qϕ8cl 5*ǝV[V#\׹Kǿ91 YH B&݊0>q=n( \ӞhcTV Dk)5ެfJpQ*YЏqqQtW,ȿFh[m \٪܉^^c2Y1eIPu۱,m1f%^I>`)ħ'/^ l@BHۭ(~E}[z~xa!gqe@띁r ˶ 󭴺3TL8߲g,͝Vu<:yVg RB12 ֺM@DևЩςd;(FpL q/"1U=GcIcjX#_C2> 4rߎhT dhꙔ q th&K) ?_nrBThZep*R^Q~༚=q= 1t{,@K5Lx:2FLRAPgK|WTÛ.y+&wS3r9EXd^-A"" djhDTc`3hGՀ9mtEcVݖk-kѝssQW?wM+ U*TF-ʨݽe)+͗bl dXe)I=]v.@r+V$- ôԯKW#}Qwӷ1CriXBLGk;" :Zoӛ5doHrThGv3 *pq"?S õ"Ա8fԷ;W "iIOc Hdfl,fI p עuG9WB1SpMO]_4R"7 L<5U<?M왽xoLWE 5%e ,Zw/EzBq}? iB-eiI!QuD"^t, mG7Gh"+R;WdoUO.j[~`L%$X0[cmɻJe˛>$) F WTejQ9vX1@;S7EIClOY?`Y4H%+vv ϳ38^%`08h{/.dRoZ`?(0a1Fn~$ץx11[-H%j tEhMGYy*ط1Q w.8-?!eD`>$d__;2J1Dž2'GO`*ʵJ*~NѸeXpiS=H-~o$A8O O~nNz:diLfueA<<@2ބ]ZB<4-E:{k ޟQ@?BVp4@6gAС~"]tٓa,UkR=cd=+A#P2aNo=o83yQۏ(ZsE^ r0_0u9 u5~n=X^޷( ,SC_GCkh/e8 @gc_`~btQխL#DSʊJF%ǧv%] K~?!㳮GAPй^aeLiwQ/t0#ΰ`0=q &=3:鹝ד#Å )s?S[>W&լ`փ`Qu(Ϊ pB7HT`ov}e.9̂29~Dg 幅}dARoVmJu5l4]jXm;tؑf-`!Ʒxsk7 kjJL;+`s{U D*@Nn)~Ț!?Jb!񯅡-]o:<2xʉKM7ZKw0?e[Di^>Nh2pGJqUg0&pQ9=][oWbosqG ˀcb$3dB=MF u}Fbİˑ"!63䄘.[I@?0ed>ߕ1:(ƅm)ym50bՓy 'Sg;Qeӎ%&ʭO H48wP"C msRGOuO}]p'jF&8KTkhox)ۧˇB@[ԜKn˄(0:gxXNfWݎJnď~@,(ͼ!=[j+"G&A86r.BLkyӍ۬B#n\[O0Z-Օ[(ՎdDRnn68=qƜDR'2t/7/czX2aCczWY&k[FycH,_oͅL3V&i];vkZ/mձ4ް9cqHniUF7By#э،m*'g<~Xb- E"XE/9 ɬ.'VT 9JfJصNNK(OuJH7?/lAۜfGC@=Ը~rʛ%2?ԁHGXe0xnzz+m#H6Ni%H "$[5I2ܒdә[vpswBTՌ 0*2Q۪*t):[!\ʽ}:(i/$wxlk (.P]%FڝD]ݕ>k(_U}~Z_|xo !̮qIV}wYቬ_Ԉb\<-Q01(!p{ɔĠWUI"Zb\F"Þbu?t}4}jiFZc1fm*ՠ*,NRWSNX4aeN? {~\ ۃPl9q;MWm]4Oo(%Sښʁ+$(1XJhʄaZ :!Au.gdV_C%<&ϙWW~ f-pzߘPecrKMMyo8J '4bayp,%TӦ1N5YWh7S֬g0bW+k^^@ӭ5Uڞ) DXϺsj{C3JJG6`Is1%ix[ T3S2i;\D2X6Q  ktlm-aU2Dљ:{| eC±i`rm-V$%DMpd!X sdVTUZƆ2HRRr-R+ĦV4Ф:n`sj1$ ? +( C0' wxh ҌJ3",_.}P *F/ڗi_|b\ >?CM|Is(V]n,b__ٹVMpP@1AQWsVPŐʊ#WܹUaO#\?%|{/ezDJt7a훒CD[׋|>+#@iXsvnLX̊h_sɚa ENY()?C?\lq*Ԙ/\JL00KIo<9xn m3~sdzHx4wNX+{ $1uΦlEfvQ\X=Q5Q ekW B4XBfS0 x#A2E|=!"+V Ev$0 CiU׹+ݴ̇IX܅H;:F܃9<.F?.}B 6L UWtR7Dm| pc 9mK8{.H/'L#S\{%9"9 i.`2r2LH)ʡ!?8KVU(, 8DVgVh_~=6,dZNǐSh3x5u§Mʾ:8H+V6aP|6ƥ<:FA,B{T"ʻ!U̝*e!11ǨBmv{8$65_CJpKjx"j( ~ #Ťw_6w.wi?Z4<b}#!+|Z\ r 48{o8LH ֌Y%|.IL Յid3q}LbEfGO!rWP=F+܏s)SX DMɀ cV "O&1uȝ"T<قڍAIR~n$ Ί5P$NrlK qyn[2KQ6i8tI|`m33RB d.[Fk4xM6V'SQPp"*\ـ2qT )_}9<1Dp٢bd1Vv3>`mW$Y}4XcRGtgp!Hi#iȚ+7,$e;ld'+92"Oo Gu֧u" $HAI̪TpJTW0LZc\,a[LiIM'`J7(W35AX`B`Կ[Y]xe82ځj*]fyT-" E%$?U$]u "CcG2k&;5\4,1 (jk*n,8#>'x¸ 7@߱ҭ֕nk6Ḏ$V{~#"AZ)0` [32 ;EJ*`Mҡ]^㤩X)+ 0WPnk(GH`SIE+LY)`=!9OENi; n@|\q5@2SС^:pzy!x) F)匱f9lN2aAبϬ G*gAQѺʬ')NYXw^& A]q,e:̝)%!6)L7r)VxjdhkƤ9PkkB?L3fNZ 6/:*>em H tf5(Ϋ⧔њ.9㪨;~ W+Z"U@0O.^bɕ= m>HdY 5:(4*Bޡ $_\t_ұZ7&zDwo[#Oޅ:N).Gl`Nd[A#w0FbYzQ$/j99 c1 4x29A{.;32vƠ"& ȳ݋miĚt'>rU!D05Ukj*?۫!ct(oI`EC8| ۶*v ԥ՜M6uv`_k(;EWfJA^ݙ,k؎ڮy>PSO3pHXst\"RDc["32)&bQ/O4AVO+iA\6p`ˮ1 `iUV) 'Apd_JTMF3Cbܴ gXCZJ)%&|.LQ>@綩ܼzan*`T8/Rm(٨MDy0D뭂f( pRblZc7xQFv30-ڏE6 ?f/EgP6x`4/;= d'%Da t$:к6Jmf m*%_:8P~NLtF|Uڤ`79UjMGHDi೏BN\*ZB K^esnݥs .'ZƑ L3ďqAtz^dZsQIWotG3UԳoS=Cs Fx#z%OXd-Fp~{9ԗ3RfQ HP -@)rZȆ{+,}T*.F!| m{9io9dt@8&_湒K1أJuOi᠛icz *ϊ O4#ܻcuIu-rPY9%#iKx~nVX Bt8i7<4篗Hv~c_A/` ߗK| e*@؟@2dn+UI`I䃩_W`84b|;XC y4Xdq뜞{c+*-0U, B[3wB syr~bT(I!N\=ܜoIԃPF3݉`'IcnA:ZǡîzNg0aUw7Kz{Tgr[[ȉRO Hq✊zCՌ[Q'g=tt~`I [HqRY (f2(rVg a9uHE]A{O)]c o,־!:YTmƺ<~ANRCeN#xϿ2tlVcSH(聇i+wBsssH%qL/|DШ1*i qEYFGM*|ިf[vmZTE[?Sh,HOS#.~/Y =3 g6ٻ39R+mp}EܬRu8BٓY/|HU9{&_# #l $#;ɠ p [:cƺm1Za"VjA+Bʝ{i~w4+pM\8~zEYz[ 'V%:˫3up7|Q%DC0 ϵϽ0c9eOR]+kTqk_ڕGC`Z}v A#9hRF (L5#l}ӤGfZiM#(4 u@'5sgG-W]uk4Ξ}qs{;9;Е>Yö.f1@9 %u//R-m^'+(L?w^AB^ 0"'6E=MHqP(!{?ۅ  &&nhRv&/)/4sbufݡ(VJքkqHvUϡ៼EVɤ0fexpGs@~h>h%՟[EkWNDu!lo0~z c,^,H: k;~U5t>k4z E)9"R&շqaG`L_|֋ScWbLgWTM[hɤB1*L”?R2@w ^ճ5ۈq|LF~Ha \jsXu c Nh zɪ<[zW*)F#[ƣV ,6m?Z:46>l|XeBP6Hi)RёIM?0<',h#Vu N)w}UauP|f;HZz y| ‘ wJuNH{Nb^ϋ":_Dc[ [F@ӦprQ@FHݡCS劉#Ur[Zf1EQo+q%c|򶺟TGZ዁=]NQ@h{h܋1(w֪ghbN

lѣU¨$)k$r5yj,PUkB[J@SK@ }|psg)˷uo4~qY6p k~Gd򳠰A.Q3݃'罾j}jD.:n1o2j'֏;^u_]1w'l8Md6XFi1]{Q69Ԑdv7z/wB hԶ|>7@)CJOzT6/m]џ:WMv!@u8W:L2js !|;a{QRyaNlN>Zba ;qp RNjA:*C @C I/5FƕN]Vޒ1òxF"7k"خ׼Nw"?#/ffǒw HOyr+Z@̑]mx- p7O0¤C Ba`ºS޷ta+jd> 9,N /遤T1X]wraUZ wI-o2"7(ͬ\.jV3r~㰐INhl=7`;|$z*XwݱxN>*|)gn٘ JmdJR>$hۓLR&K1Ρ:a[ Jc+Ҩ ʖ˶hvIK*'=W`&XdC~bTNnB|GKEr"Vf?ou~x3&&3C}%3_g8(xxohf,mQ-g3Sc͝Klr8M 4'`r>3OFNHpiBٺc'{`iK66$X>#AZ$kݭaS'w&TUBDߧČ20)Hp5Y;` +&^¥:ߞZG}wAܫlwsՍihȋt;9 h,*yg~Ult~.?kz8oJd{L-+*I3 ߔDnmtkMMUOM:/rm/Ų/l,@iF- Aqs!>Q%꼌 ޏq;v&|)!J8 ٞO?'jfZs~D,wp٬)Lkq”RikZ''XDlRȰՖ.2S%| I@~8jUI o!#mVLd9 _ J4EHLۣ&)Zc&@qӽRR]ӛ?aFU]?>3j7E%λo(ڟ38C4ٻ^c@=aW^ w>E;e@̛5zx\$"~EJ$| *lnG m $N@%r ͋_aB:̓r`S1ey Q `fC7dJO3b22MGz1iq"-Mq:gKD$NAx_aV~cES﯆/p=Y8E$~ݑF4kjԓQzoa ʊ/aO}3Gٰӗ.l l)~:A鬪>ga lTVGr7g,ɽ.`fVW`NpG#^x9/  `܏ W^ɷm8Ї7/aOX{X5@ \xKq1wn )C12ic ®P]袡<ʲHy8w]sl[֫gQ_9;VND EL(mOYEV߇;Eu$/I[mnT̄ j>e޷( ysR5X܃b:#)H`VVg |YK޹*hS2a+ ٯnKZ\IA6y N>rߋ,G,t TQc<^M\7|<³0s9;w\ N44+ 0ύ-H-'.ֵxiIU=H#5ɾG`ѓ Τ flWW $>U5(8t"dW.vmňMVFk {䃖D 46 k=mB)fgfoDVouDȸT 0h]qga-n%u܄KƏ|ǨFxZw/n]jŬ ;|DaE3.#/ y_۱&lg:x+kLqӘ9WkOG"w6+8/Migv9SvőŌY slv k_ƹ-rXͰU(G=VUF7T-#< WHC*_2v=p.+1\4sҮ/ukZm?~,k$+̫&ChDnCXwϰ!S7QQL^A) mQZwƘ'"'[AAlH.;x:e@A> j8@#eHU=uS$ |S1ے)N91m+[py|?-=B>8 =#̔Uj"Ll xlΒ赉&fyTmʚ>RP@1ef~oߘ rb;NԳ<PBQ ^ rE.EwQ " A~`oIy8\C+0OT \B-qhz D#y5rY%3X |8Oky滰m7-5B"]UNϳӡJ95_z=f4[X'{' S紩Sv 2,ؿ ap:bBp|µx ق Goyѽf@riW)U,m)ɵ[aH<*wYx 6N$m\gV$"딵2ʝ{0qjU ;Z])ax<EF_T A A)|VѝəAQܙ;m6_z}@F[X} : 8)2ZNu/N65WeG0ZVM{^':tؖ,5877ST4"pd'nX}yAu?=!0iGT-yvf):mBL. P܈u ~6PkaϮ -[;Oo}Jٛc+{K%Z-M f4h ~$11ta x3Fg^)S/*fX0Mts^1 1tS<߸J5uNlhwʖ3 ehY5kP 5RMEͻ']&J(5qJ2˧oQy~X36Iχ/DV;5JqJMY_,eUC ^" iqt5{GV[ɉ*LWr$f{ش'U+Le$kV؉fX$ !l=E'6.= WM%@V((Orbp#] Նsa 7'uI턑CݼLZI 9VyAUm $θVݣ91|~A!BLgf_@Pc>Dj_O҃VA SaP^1rgY#G`+(jxcrc#̾ȧb@i3 9z~:ln|nhE(Ь;iڙ0ƍPqpY o舐Ԡ_V7Q:\.ȷ T!֡ >/ t/- eX8棭5:&2 ;]_yR2yȚ Ljy?<(=56}-S d46, Ï,biWE4 i1{(_< ͔pޕRVBu#K ӗKFr.!N+}BœeiElgǕntk<ۃL-P7%DZǭC Ya> tb!8hU Lb%byfk=&GCj҇ ]%}Q1i=g Pu.[?ezHi"Vp^ {lSX8 -}6M3t;`ID5Fl*!\a2pe`T݄mLkgWGh;:G'-nBS#`0Cdg9qnxڊS0ߑ)l2cSLeck#YBm[&3i]qCBOY+)x0iWv9{/ e_hH$|޸noOgvuE(a*۟ T44vOvHē7?^:5ۥi*4жt$*wDz9QU9@o6< \yy-?[~^LuPD#|DfG. rK>Y;-F{.ۊ~yR Q8szXث&55uPB\U6;ϭ A ,2&Yqj{t#09tѪ}0ɇ(\_Tg^k:9TAgϷh-&{MuTi: bоvC1gY|oRwyzR u2EⳉrdOyFkD//M8Ta:-7kxR|1m/JU{'uETpAUu-2 MD_y.fWomox捹I{_WȂ̉=j2pQǀ Ϊ䕋RvÀ`.4"&iIj\EmkfԃCV~g?hPmfMaK-MfWr~rsSz7#EKaa[=S{)+&d Y\"Kx8°yš+Tֺ&-6ѵV%ʝ6*\u< 6X]ٵR 7q H@("Lu "YDl\QQ?̦ >>~ I2_g8>$CބlZ2ZDZ|e;kY:)&k@RNWyv{Pcm+wԡ`GWFRTL%&+N.XZL1z vSġoff >Kw<>@%¹ꠃ$3.^PbQS%>7!IŸLA<&'}ݻvݴHFf3_bڽ;V{._3D8<؏.E .3q$x$xn,;C }gG[F>IfcB* cwʬPZ:c I~0tNՠ!iQ87ԃ0;N~"XO_DuUo^ˆ8@QBgI5>/ sۗ0tbAW9Ppx~ Ī`f`>a3[x`Z]㩼u5W{˩ݹKO/%-c[_̷G5dΌ\.JYhk\z-2S_i2K}a>CͤJ0w0TJ'ivP P a8[W]gq:JQ7ruLKIJmދ$c|oԮn AQD$D0 DFᐙuLj| ޫH P6tzD@M6Wω"ILS"|Cν֦Lh&8L*u ~l, =\a^>PRZ;.I! Due"ĜEz7,j6zUqc6"9B8ýRU~IsӕYAR\$mwSʆ'+q:N!bS*x_'1v׀#482kkxL1:Ôwbo\AZP|%ȱiϳ&ubVwr4 Qb0۟dRg;ti8d2cga4x9~)lc⮗y/S K-pdWUZS5|/&R''72%|T:'(AgʸNY"1=iꢫ tn~HGxy+/ رN]6Ik}MH{Sn5z 2qL4 `5G4a/q ;¤_E.[ z>*72bZq5_<)@q,n V1B푰80 3Ax+~>8:̑,lZa 3n&t#ܲW T|:AG%(.hmc)T4fG(JyUT YAF4 P-FЖe lCĔGkq(_mvLX-E; kZOu:ռNzk[WnEGZ|:VwKf5E͞0$42kJX9|4)ɗ; Y#7uCsC纲i=?r2~2ecWܼ:ØTD(5n$bS l/jC_Dt(q]̹Kf;c(r]~y !35脣w l7aVa)3s|Pޙr^" oh7C(ODtpEM[<\k*٨ v5,jˣnPrԸ+-̎vo\_Q2~G#W9wq].nG •@C>?"!P1.paGmnS~z7c&SJ?H|JF/-dx!un{V{ s9ɲOp+PELDT, 60P;7̕Z8%\~b-8ymNWE1pW91@""0mTl;[ @s7xUdC$9C6(w9^x14:ӛ]DŽҋ}rx#3 ;EFTalW˕r G(((*d`XbVN^Dl.۾ & AW%+6^!PtI]޳\JC}vHEW, e>lLtfpsêB v$cPs0y ԌEW,}'2oߜ(qFg ͌KIC#G0]('8uk uŔf{κmpJdԥ\cpä6EK:dυ4Fn0?<+|ӳbvic^(ыѣW$e8{Sawh,!p9ko1$ 9")bC= 1}F2!@;HMNX?yY->Ez?k[ #e"m8Mxɍ0^?6&a\/FG2B55JXgE/anACC(=~3/eKkr=}ԑzolRG.u7`x?r.&3j;qEU:FC/^|b8VŤ#0򀠲Vwm0t Nw`T/ߢ/=J*8>R{VlEԅq:gyW¤+ЮE9G׍gx8PGI#9i8$Ł`G4ӳ{H6>pɖ; mOѓ=e*)+,n+d+*mОy}.ՁґR_wpt8k\^۰ǘ 1#_v~F5S!k^uƲ$W2pPb4-*MGuP9'j۝y*4PKk4aD&%k]Kag}04> *PHURd7/#  *h4Gԁ5]k.{'Sѥå:t1_(z~O*kD)^@c1#:C\6s)1B<`j  )tBI,gx_hu).u /?pP)ζUj?%}G[>zŇ6Yti/,ݎ}PngZ- 플+s=f.5긟Q_@f0 @z6|vUL]{iEH~J!MKO&!v& >dfm\2rdX{PY/3 bѬt"XeV~%sGq6HT Smp^g $l\憉(TUU= 2 Sgo(9-jѕRjEaT;h5{Zi]ɞLվf¥M?ԑـ>uqlI*妤Wվ/ { H2j=e.0x[_q+gf@{QFeq tzO<[H~U>^]FxM+{GAߛgט`4O 0!,Սa[Z,9hu G{r:D'=Du4.>ñU f`G֦ʯbB_R?rP zQYyrtB3], 4cKՂe"Y> ]%vT(ewxƭըsҮdz؝e1mhUgS[Ĭllkޣ5kX]{KC?|`7^t:f9t7P!8;Hy$32+@;@*} k?o ^&Z.4&#(bb I1/-+}[ W܏v@?] sC< N#Oh6v@[(Yly@7, !Uj[%\̧dv-[iUHIbOX D[sI۔y# PUwn Cxa4 c=cIrKG,Ύbٛ-(Gw3GЮn3@ zNv9SȏjM^N!IYNo7oFq=r+ 1_GIq&Ԑh"0 8dsB '5%}EahCvl߇_K䑬 m;x}GbqIzN jCk6-Tuj-&4H|^?)8OaLk@ K[& n`nJ>P DzX`rȉSu?% [yBc9} tƦdY |M]2cY~˹[1dy鲽=XF-+ jm3hfF<%ӈrv(лI_ SaSU]3*LZ sfIk}vPǨ4Me!`8rY&Y2t;t6/gQJj_tB Unb*d;-y "ؼ'18߂%+iq$cT_9;ِ mi.t$Ufe}׉cV1ꤼ-hW\,H~"ҺGܘc8W>,C.HU[O"]*|?I |d16ڢȞQD6:면[0!v4G=i4`)jJo`p.d卒zT܎ì+~j:*e8FY2{'Jz2V |EB{E. | A2דRIEѶ0;k'S}zEG]xO)EX0WuCz% "~Vd6):@>1biFЈoA?Nn T<}|SޣHaoQ (}0eڔρ`6KX[Oz%ά6\Q C4E"}!g)oʰYWkb_ӱcg'@E]wqBDu.( CԋNrd;GvR]]AtSM%ًidH<ŨA4:VA"#A Y'A>>3 uc!dAjvHQѝ]|LBG5;6tobD>ӧ ĥUgⷵC-od(QQ^1pL(<'ՀÇnQ&*!ӗ3(0B(=ܲ3nu?FTG>B5>_jA>@Y]o/9$^{N$iOWx$*f330*9 Qgzp^+X#̊a m#t =@4oM;wu`Q}0*UT_;}*Cf(T]B)o `V&{>X~(gͽ"5ZME v1%2Y\۹v\µڥ&gDc9Fop =1E Gg熹 {3+PNMr#aTL,[>8wŠ똧`OK4wc[$fY\`Q$+(鬃O *# ,FKQ-*N^y6jf"Ű>^s07QaMrnDq~jT>n$&MSH/cXso=${Ti!ݪX/ Gx6[*0"[][nRfQzhˑC|o/!]msk3-lN6=:hT=A΄.;y+)(;ƅ݄].*$Ո6?wƗnM˟J!5OzAïR^2^dY;@Ľ9η&#1{/+F:n<8`xW7`ULng=.M *qOj):]2ȀQ݆ͻ{5m4g>[Χ -bq%&ѩΗFnJU]Vk%eIN V7w@r%p*i8gؑcWωuӊt@$\S ivNbpG'LI#V[ _TPae#E# .ۂ}>@0 IWKjlP\8k|5ݧ'4B [0H?X?ddf#E*J!뮶'S?ZqфfVIL)̟Bb]_ ~2Nuꤢ@QAz9:(%{} fZB:J,KxQ2Hꂿч^LBk-*)*3EqaN?$'W pekPĘڕ+1?*`+n,m<h}W`4LxBHM/|y`h +?;@.?^AHʉZǺOJ(_WtR jߣ *p-=EÛc2ȗgǩ"3 )#1]۷Z8v#uz.bCvDX+Fv[=9IBy~p6s{~O5`]J |qJp[F'ѐpe!$9`4 JW3u;4G$njJ뫞b;UǪٱb}43ҩZ];0W)ˏ`(ٛPq?Et$" 9ZJӅ.| zG:ADY6xen<ס 4ϩ3=fq/W!d1_cpZvB!}Co\?.fDGcY&3<%ܯf1+qvz[qj9bx4Km_&XKX|WA0.״+(ؒqK]ok"|-lµ1Oo)giSɆ:ͅJSkM?ۂs$<݌R8oI<|ؒ;חYn9T"Q6lӇeh m-sk8?>!'.hPTKfC\:R2|L ?x^"u6C+gysoچo^$~j .O>tOR_CZf&t5[vZ+~K)1d([+J:|憿$1Y%3 ׅA3pI zUškֽwU#@אYg/luׅaFq#er p;mgkynTHiЇw[&_*fp^Pȣ|;t! .0il;x_ #dټ㚀V%Puxʔ߉bw늜CO❦fbȝ`q`F\ERQ?DMp`v$[si-{C3=f#Ú#&oJgn_Os>LLSnd7c3zӂӄZgہeebN+ísN9CSZUp9OQ{/5r9PaRiS:}/BXfϡ(Ay> rX(1q~*ibhYza1vܱ6 `O&^zdk:"^Df7>cop2.!x@mV1tJj/p;f:<{+DrHYYrύc@`1\/H޺,L׽N&z9BBӔ &a eWTWu*,t &Lr (7_ؾ0pQհ[k2"4>yB$ [;1*LCRZ1{ pX@0,4=> MeT3 \s. PlC,"V/~U}^úsHM82ruip^}״>IUhMx=jzI}AJEea` NEy[#23N[I$)@ճ\YCd}m1hl5!wܤRS?gSkƇ9#HIw9$ꉃ0ZW:V1Qcz 􆑌öAdgCpvR\L kb/Ʋ3J 5x䰜H+`M᠑#9IJOj :W}X*:Sj )R\5_N%CqC+zWuffZϋPIpm-A p,Y⍔btcw.DI>C3HZ8caX-몽"L?@hڤZXc-A Wwm +=ςnKq\b3q[DbdJ|M`AW醟qhv Oà( &vL9rCA[qIL:RiKۤt+دlEƝտn|g9-/9?3QAr4VHrɀV16 XdߗI ) RM@y{0E 0o>5zڿUB.hmm= 1YC7}(4ۓ4_jז5Q4W Ih۴tĮؘMFz,SZN'i<. C7dl-?3v#7I`0se<r Qe1/,&L'J%l|Gf4D T`9X FL]=ۯUִ<2{o/\9X^x!% 7-VA Xç {un&vM}X H_ԑgH7d5[L YM -j zb,# `1/&N_r ?T7s^CraLFhۿ#|;}%}u#w=/q>'CBKLbM=3$jiyoc+mœ}SQA&b9In=L8{OX. | ۀ<=w+ZkώXPȧ( ^ WN wi cRFx]n# Q} &ᒠן,?jIǽدѫE-j <0䢐ly l]8V![6曫-~-5]wp]Q3'dQfG${Pi<Nz`ęcB/,-xQWL ƣAx_$fDd$M$vYn4aNRݗ`B Aec\QڇH uo)u.,"b/9^@8VA^6o^\)8:K>! UCҋhz5ETp@ W=^3" 5(2q%kF 6CSK'їH+Nr d aP}c/kX:ƇUŏ#)2`2p/exbp To*0`/i1 uj%ƌJV}3ȶ&q$P2M=$3H4%޸"9"0 R8DK`<ԂvD{h"'G8"JVhf76 4[ !{L> .Q"a.RԬ԰P֗Nn aFq0a"b?xsel(IV[r}c%1@VggRfk⏳5Nzp_i[H^0Ak `%yn^|q'R0 aH}"`6bйeu ,/d'u@JL ܰ 9 Ҟsw9P:Co0j >kPlVK;,x?۸W #oPU#.鮫Frj^=L4WVOA[sJ%sVqiq&ARgdguwF,ΝQP,Rt|! a׵'\C+z{?(Mv'] ,ﻦ xg#<0>xNa!o_.9wYt nS0JYFT 3H3:‰yޖ̼Uxq6O9ȌV<2/ВB: 73WPj 3,yr,(i4Eȿ!qBǀaA>%QliJĂH,6XX%$,bOo"eY׼)Mc2A9Gc  Hv'!`CL5K27lu3 7#({>#kWK1Gvo~of{1=pYQveTK̓l $9S)bFzCdQU60IzAZY":`wD)e6E %=24YOpJqMԅ*jZ[X[j'h.T?Qô (EeG ܟ?%D@Ha/b=kumNXoH,弈 繌ٚz5o:7/[bs ̶І1gF1L8]݇VʦW'[ IzCP@sH!t`n|{CD|7E]?\Ġ Y!j8 K:Q%U^Yܞ@Xjuaaae+[8ᠧ^IR;6.TAl"myd򤈳 ;=Wc\.[cQaj| Oͩ7;"Q JJaL#RV6LKӧ` d]#Tl5991иb4IOPְ}Sn,V?COteCl;knxAyUN"dG}PgW0Z)B,l.{,_HePȸ'E s Za@h0uH[ǧgإG?wYlD;N0n[4#/Li4p{9/O0rew:v/ %*B=PO;`+;A֬ZqHת k`TmW3342H(npY?^.y>0ghYu؃g[8Vh=Jwl6FݙV bGq^(Fƕ/DYmA괿; Pq3nv#J6pM#0ؼ}풫hN!rRwZ[-LX8kƠHI䇛g_ xb%3b]혬4k2AR`1=8R6w{ %)v+/uO)9UxuRo<ݖ5X,!~Hݹ&ۙ1/7[Yw"ZlEeӓľոȽG#B8Wx矢<2| @xX#6^\vLPw_2@h@э*GŐb$Ƹ['4PЎ#J-bi-(a8!: {#:?Q:/ROfApb<3ȣV[i$s7l$d ݼ*@RwQZFCw#7)VzDIag y!yf>5 7W Nl#ɭ71 _T^|`gQb0[0Uqw}YJVL{XVV}1Ekc5,-Xp"[X{d}|UAX%ƒ F́ݔ{[J T,TbpU/b`:M;ХǿeRza[s&4?Hi"֢ Q,Ռi͘H9JUFIiĕj6pEjy!8(HJqƌ 1{-I.KX&)fK1%U]IҾVCқ>]o#.phE^Ug_3+ H+ S#=Q$}i0{FCM:as42c~V̼$"ZtRG}-7w̫J팤:HBW"gjE F^2Qp(9N`;xKQd*ubp`RQǓ AhQv>qЦڇ̉.&kO~ Bv'@"h_E =N8v|iuO)SRODVzZԥzT8fM8D:yS,_.9JgSQs.bzm&Z e$O> O.QQ|{:坾%px^z/6FGvy@AthScsl+g55ٮk?t yyx@k}MKTߍ4 R_FB7KʓXT 8t_r\ 7n?eU,zwb̏ m J J&_L'+#{Wߤ{W2gVVRK-8cZ[W*ڤiGu\Q\j xD]]{`JG#GXt{[zl(DПkV/Q" {Qѣ^]XAo^] $Dz5~f17 iH70*'lO T 9'_/w?ijY^* vI4Ęb '򜲐/M$ه-ZaPڈ#q*)%ʀpLVSZ,{6p^e.NcXpdQdX?BL_r8>Qx:bpz5P yG(Xj}ckDj)y8\=TⲲj>*C[güZ.}[R͹*6I|uz-ϣPգeqȵ}k;tHPqՐ}2=nF8(e۶}7 PƖyap/29L>3syߦ^d~vL A!@.y::'XklgD%)PNk.$nRHD dBDkllć# WЅ&\tMY &fduDKx_䗎B7ĶCS mKiAU"(Pfc9UOvoQ5St&GG&<>h^s[+kF%;vͳV[{4_B(t$c Y#X"^KYxr/Ruǰ'ڠ̬eq@ @8<٥p|/yDNZbO F}b32S5ˍI lpTqu݃0]p)7nMm_Ϟ0eri&&gTRw+94)0#uMcнZZpp΃B[>TɷIRC1ӑm>,:G?,1sU`<S^#4uy@j䃔/aEΫ:b)'wg `c &Z$j),N]1#ILEy- E54yt6+6b|JaM0W{j1#Q3ݑܖp`Kfk4DHӭvIM1J\=-w - ֈtqqV 崸g+^en˅Vm!Q<-᱗z*.o {EErGO~Lٳ,58 ۏSOvp?mv M P}s m.U547F甯|וCoEOrq%>;d\w$vdzһ ީQ}#/[;y!D#Xȧ)Z '9S!R͒Yh6yX󋌖E>%\ϤDZp%"C"zJ_<2'i`R :o+fl33!J.^6͍XENY-ˆOݩqSs;v\m⑞-vnL-/e[7XX(`-z|E@@+(~evEmЩrۏ;iui]R_mTfaí%[u ԚYY`{u6u[r ֨=F,t3aomlq쯌-`iN|tRwzDLB͘,zˮQj4=ㅸ4ӹײ&8&J7$1U+U1ߔK3dndB($F`>6JBv(ڬpg&f)L0Lv%<*8xOS<"yPskZ(Ur1mA-ڡEurQ/HAZG$Q,`CJ'@OAWRiUNDM po;=4'"@ISh ogSHFeK:l״5exc )J O,m(b 4Awra7loUɨso594Zt.e!̈́҈"+#KY0/Wg`Ӎi#`EBoB+NzN\=v2X/ctub(Ʒ,ݵӐo*{&™pt7zILhMXG;VA/HMH͐U@`?㽯rN* vM?<L ,6 \_ PZi!fRDPeM]D8]f&d`R@{LOh$h&U_O,1:^4ب*?!)q Z_ JHwg '%QqK,;;6RQtI2F^[3!*GjC E"e5%ba&)jC%`X?=(KzU t{`߁QE/ .~Xs b#Om({;JWJc~?g2rLU:ܝQX:(!/lCύb&fvv}Tjn g)"_H im#4+[V#30=.lzFN1_dd'Ƒb]W`Y)m!r.Chh Wgy~ ߫})9W%F$;,tgz_EI/:'ÓKn`P Ӹ"H My F2G1Hr#0S `YR4Aj&&<+>.N-NM5/ rRέz,*GʌpNƼ80XHyk[-DTO{{ qڋ8lDyn[rqIr ;:nd*DwX>hZ?~GKؤH6dS^Z{t|?@2-r5E-cgŠY \"#0LSmeS[] Ŭ'?o'RQqٷ*%w.PG-;!A˙\_ tFFMU:>ZE7)%(LzQrr\RK6G 2|  WQrPF#xO(1۽, Τx)~<`03[-ֳ &q0ٷGj h`(scɲ,?B&α>E|nz.T'LPe ?ﯤO`ZNC*DCсFa,?g3bå'}?[ׅwP֋_0JuFpH%as[h,AB>'P_w4sOR‘UGwΕ;L12fƠ-6'-JM4.r'lSr{?Se66~UI@à:'GLVb!irָ?^:3H5A`IQѹNzrx56ph;&iufqq5x4xK' F=sq!<` ]4p8+ %d- $swNfFT#``C4e8I𠙼 A̼>D?7e-품`\saQAHy P~F6RW;ofM*F{+l,<괆> o=RڜsE"ח'O<:\cA1j//sX$faH 7OmPƫ$ F&_v#/$4:45,D˅6#Sq/d'¹H\U-Uécy7|'!?e,kFݧj/UsB7~Müɻ2ISxoKQ=b>!X`HL KgOE?8-t~x)O_׏ -+sH2EGd[3'u(׹<*P *s COlR9[O Unr72Xe*r$o_}hI'g&%x-4}#;] 78B]k3/|"_)1[MV L(x,N#:LXlM@ܕ8s=5#hY"wM_{=Q񚍠 ' \afw %")caܦx6~~  !]Ӂ@w ={`SWM>jw_l45u^^+ fsHW@7CEᬖMj naćX\B.wv815<| " Ji.}?5ƚVi /r)݁DEN zd:5.Gps丨>NȪaJG/ S0|hܓQ岃OoڕF֤[$K84fpi{{T4'ObQ׹lb^5̏p<})@{,돊z;j琇+/_) !Zm)!FuIl"L=Su=ld}ˉS^*1i{u˅gtid&z p*/iFr+#.}Y>Ĝx< G$J&\,>S#YO}_-O+/s<0=KVv~ c^1!M2 ܔmXxuh|4 21Kܕ/; KR*'Ә~U-W%к#$b#˂tⶂ+8+XTBeU [ix*/{Lў q4.1 FfQ1P`,5aȃm>:;!NӀ#GTm@?ڬQ_7fkz6b"`*`Nj[aEb%8ml S Gm)~=QMW(;F"aĝ>: m'G$-4*AɎ(3L㨀d)+Pu]t ص<h[-Wr/G'aݵH֠m#%& cLCVđNb2;u I,Uч-,&Aq29{o~sj8!$,L _0^R Beg2Hfgԭ,;=%4+_srmm7LqS HXqT? ,?aKPm`lar{H0%NW2FKc聓*L"קH?cNH;f`7S0ּTL]iȇ,-,L.v@N9)m:kT[[=яLMBM{St, DB`%'a &^x6+sB㲍e.-ԉ[`БxsPD8:˝,ƻ4gwj(D۔E_{LT˅~,ny.) c?꧿$M:e)=GA̯lx~;C);L؉iEZB,C7;DlebUt_~@41H$*ih-a[+gZ.<A4i>ߓ%B䊹e of{t<]=%b:yA$e+װ6 )LO$ՖM.xK'V%Sih_b)t4Sn!9ѹ м=[t^46Wg@$qռG P PIɷ%Ér 8xo77lU`_nyDDߡP}qߖA08Nt@<@1贩f,f %[m>pN ?yn%]*1tIV 泪aoI 2C2G^qwj.b | u F+ Lu,h ׉Ek 9>y@]Ȥaf ^ ({a`zU5U)8d\ɖNvĻ- 3v".pE.!Y5/ciR8<,X jںwĶ jzITųX! z?Vɠxs7D?әH[J幩@pdR-M./ZqL=lo[d]j"mq uu?8D:J_=4C? !fOWBToCɬh/p&~l|?aS]nؤ_Sq/&ڿHOdTMSDG1AOVX=Ug?1'HV" :1Xk ysSjs![29!;w/s 9v;3B׆Ƙ.OuI3)$Nu8e~ڴ}1F šKS=áNM;$"<ߺSOIı~4xafcܥSG3+2:Cm>^axѲz(?d jΌnRq̬AY 9!d"rd>DdsLZ&QLӰ `6r]S өa7)u6#'[v*PxqG3v%=2ݽZG?X;SnyAFΩLgLQ@94O3dV!0& ʪr˟&1=wXpa~(&,`tQ37'X+puQe.wZ[Bvjpc(f[N&_?H:j(W ΅H@F~5M `]:n3ٕ454.~Fƅ,U>pd_7*+2[GEmGW^M. hX@DwσyEJX~˻ 9 K' V U:Bx,SS61 GdDfQ!54' 2).1LA_: FݭH|ܡ R̲/ķ7]LRSxVîgٚYP8P 2[!b㹽4͔.I#2w{+0JczƢ&G@ru`d=E75ie}(t}$er&$6N0*Vp?}?~3*PxP"~oƒ>@4l_trw]R_%Âo*(\1J: πzЍl;PXtj,iI/a)ѷ~Bje3U}L'܄uKqAJX.Q~B$L!sZaԬM=X[ D_@.{(7ɈAn| Ɛ@ۖ:谉|Pn;_3}IeՅE($A!𱥡߬ ]u!m$]gD σ@ö 0+v4E5yr6Jex*̿BcC7=Sb~Qa ja<]L0^PhqQ?[ڼD5ALRD[Hs[>ϮI5:.$bE$-l]&%iJ_a82bODՈēA!y=ml?>G j @G PnHHD ZNtImi׋o[^]QsY"@} k;jV8r .fzǟ'5ǰT@NS(RwJ")KĬ\3GJikIpMcOK oף Vb,93ݽT:X̽϶I[~@n:DIpE_ Fg)LDI>~He[4AP(-͌bQ mf3n{6>J}9 kR,GgIOLRe6{T(d \b" Ya&-jO ㆭ"[*$d0KA`I.R7ؓkdRkCg(e1,LkMďGRTӃW{Z)}ZXx;*CYUnQy"4^y@:8z@NLFj;/7&fak'9@Բ bp,[[f.T\JJ?T,}M-3KUJ rWf";ȥO2{+\7܊)dqɵO\D޺e{̸F]4P|d JF$F'1:[^2 #sɶ8 ޫxsloa|wk@Yz+WÐQ 4ҵi1N]#h8D+fwaV_YQ<^Q25W8s$|B]T%: 1zwt 1/<ת?@ ԕuSBF_?/Nn1 9MW@Zkqpk0qj֮0DF` b  I: e^';2Qa D{;vh'Zp*CLB^AF%޺j:=#S01DxF1@haij!zYLTǏ)@О2ԘǺ6l mK,/d%ŕ=Zoai`s* Eau ,X5\ě%Ap%;P`V%p2-RF^dҷҜ|8|/1.6+ZjqwϷNfU џwe.&Wxgѝc-mö+wM.)+6؝wG4"Q4g&b<5Y=,^܌)5yQ"$iZ mtaɁ"8:,no_._r@-AUtOM̕A!ݍ-AsXiDN!S?ZP/݀uϽQL 5݂h[_?تq.ITg6nA]BUAqhemI|.&v9W^^mHb!fVal_,0VhD*F)L NycBDоoiu%"*uژH*Y }d{A&lv2?po4Sr3KV}E`#KYxd@ǸݠKXG`i?!s,C9Іޛ`Ir_l c^RaG)rts =uqʠ-0/IC4:VR:ʏ'g^2O@;ꐩc'δd7N7G]+4`wE1szq6:9b7qbǑ!mK[DzpfJB, /FK̒ {^'V;K"[Z'/WO/_V.ze a).'wh|ў_1!źab~M,J%ybI  lVn0~* ʞǴsX>~D#8\w/4[4k:ZXsv Yvt5vB217 jId];7ޱsi2+=d1!]pc.Dfpi21Gp[Y uհU}[sΞ c$T #5Ӡ'@@᭙e ?+l?R.VcH;@2f>2d<lznl{]LD9 PPܻU3:d 5DbIh#HW~&v9itirܬboLΰ0O-:_;̣1,B}#@c«Vs"X0"~X;2eH/Mb%DlxTU}3ESCa} Y1{xSMuD[~HByli=[K|l G4J1mދH`#Fox?P:'Y-Ab99E  Zyy a\H=v4_AĐ&GF 1,)/Y_z䝟h Bn9GdLQح `T㯴ϠP l>s^:{ϖe')FzV5\֠mkb &S_OYFv F7\DVt .he}vsBVj?*!\XVfyd_[V}#F\XiT?3S=.~Zc6,Eܓbt-<j,&ަzͤްއ^!SUi_K)a9KH}lך6M4G]]S6}9k|I+APX$ $ **i^\F-1ʀB]tM`}Jep^.Zm..TQ'0~72# 2i6{wЋ-bSbH2)V>(~|sTmQc |Gd4 ӚJԨSDD%cwB1D)~ amto 4p^hv1ڏ-.Zϔt#/-`tEm?+*T%/dZLFsƕ,udHs}*{1Eֽv7EsBʠ9!d0kN*"2ӢwNEDо^~+Xc~Gk<$ uM1+b"Qf;~ڍ?Hs#*iھ4sQx G}wY6+OL4!vcElw2mj'A6Nϗ4!iQ4S$8ס9QxZJm)d_X m$wٺ%=?R,y~C$RQ`^LbBǢYå;}Nu6MZ:]??zr!7"y)/Pֻ`F\u@ULJ\%u#X4$+˷ G8*ۛ3HӇbDс4 f,T-I+ `.SAHw֨ou sW0vISq0{W<~!@`CB{eO!fr|D۾qb4Ԕ (*>ljvr}L8j}ÚWIrz.* *C Aqd^p†x4 t[Unb<$k8%V\y0i&D<)MقSr-:Amןfo5&*}t{VW+5#Z< mgt:)PM\Gw;=24%Pua^B «* 9:Kb8T\  17u,o %O@h E3MWo"Vu~B\:ƸTsA՞Ͱ;u YDӸ5*%11W,~fU5G%ia"G|[BZW/mt;o~hrC|U6UR dP ,Q&e#D djwh/@W]/URMϮHOM6%OGk`,֎iWe'v\yOtGgb0  "=cHdpЀ- J^dp`0F1`0FDan]:$_K@\I1*wBn)@e N-ʀLK PO$ؿ T\ӈŗ{K69ZoʰYRe(~$w8DJuCĉLf3EoG3] |^ٔWl_u5ГmMS~4ODxԭGm'|bƛ]D7HtN, 9^* Fш$ NdyLGX$zǦN1lP3:ɷ>NYɅ %m=Db(Gp}cND>CNO6pZ XBԷ OUX66 %|%<-1(dY#I1v#''ӃiwxhH7]O,$wOY vy'\TϽ`nf%Qś8HA݆aW௕kJL:qR ÞAXTa)c8l3M%?3^=E<^ׇ#zh֘F:*CQd$~D 4h0#fFpimjK`^ ؆Mu$>n]TOoĄKUrВF[8-.}=1fTǶ6L!$v* C:c.N6S?8A XPA|˙EG /ϡ7 M&ap2 _1ٟ^n*GT٭/OPƍ=*+rYN?3d5 \4zi5:>uio$TF(OW-F|_zN;^6;BĬL5[`tBEDTvnȖV?vmr LԺ5D"(CA~k8)P^6\PCqI,$\"<+`U8Uo elY ;ܝޙM[;\=f$5i@wloםStR\6^<AGkuv>nerAF18:L6OX0x efYFXE뽵&_pr 6riYT4%'uQFdؙ5+\g\7/ˇ y J}K=J }D+NkCfUvШb<Ľ7JE!-=j) Ҫ4?y=Ttbn.VD'l*b.dFβZwszsJ\ $`+p5\SE2bӖ#iP1 lY`VUʛ<p*]eSI|قPJ<5va<'3lL ,]]O:^L}RnF7fHzkQL:g 4tO7I gA8}Q$_AnpȰ3~5ssXk}YHg0DID ġh}uw0n]g>_@;!ǯd:ev9lGEK`jY3+5m?{:+Ig"lq<'Cat>b_*_d~Nl~_r@l詎O DzkXu.HqiRXH2įtEP'c22aD'cﴉ'U7q36/UeuX^޷xH7&!P:OEzCs)ڜ!({D: ݈['kV3 `.=17 YnW%\WiY={̺FIi{xrRE;BxNCE;`U`#T6s8b~z5 /?uHB>F.ghUGtt?WSrƁu4uJP w/W2;;t_>M<&Գ;YSȀΏ (Jĕڨ*6m⌋@1 e9Y.JP^ kן7!AIx%Cńi޴Ii|H{f. W$ O Q_мŹ}6r'G6K85Ē8]M|e.YR+B >COE]"]HGT9WjF !b?g/ v,(FTgʻWR.]u0(DċcfHD.4=VJbN0#%Yz|]9.OW qW4Oe`ɸv=SNޮf(E7".uEluLх"GNOgzRuV =7 0ײ=u&u_sީȘS41M4$X'=G˥l5?^>74ݞotMH{ !';i_Q?H/nevp${;y":I7~cc1NR0FB.ޝd"iX ץ'$֟|^(޲<͊֟@uDG!L 3ȕec\굣#WOpKOn:9zcQ!7xxfNZ1YS +/7`[g+",W4%CL>uJ+PT"$6!`FcJ0DL( PY"e6lZ_Zsן:㡊aHDE xHև?~ܹx-h93D4O3>o 狋R6n/[='Wd*.p q2=z")]xrS9i3V@G6,T#=Z7XX# ŬspVߎdCV4C\jݫ &m G$@6dN֨\y̑pQNd9J^ ĻX 7y -摣Rh)oSYADDdQPdzI%atabڣ3DX] R\p[3eg4RmxO$L{4j _4EѲ_sL_ؖM=kqi81f.лqP0H|sK9v/0ql `qw)dP1}J*iK“  g둊W m͠ ޕS3Uh y(T2s"& ]J/^ ]ZN h2qnt.7 րW޶k?@V^+2ZJ< ̆FթvQ'P]ȂS4]HGDC/՝C4R1Ԙp0D=WӘFSYqy+&h9/{*i#<Hr^e^Uj"&"t!V+n[=1 q|DR"վy{OKÂ)Z@Jah}WV. Kؖk$YoN˽f&|"k6hݞoU$?Es樮, ՞ fNqƝ;33T%Ĕ!$^S:igQ:xBtc&9@ˑxa p;5EVv(q9sBInmuU<2UOɧؐ?Kk$qCI&.ΝNi//34?ӝh_`gKZ#ϫw2Ur<*vQAP̴Kقu&ȡAG! ),Xhē+#3ȓ cŚ|<"A>k,9HH\طw)~&g0P bRotFe~}t҄Q/)ŝ{Vi.P|0/j)-bs&8[ާezIn#xto3j1#\^}עիa`{;fr4vZjRo7V $һ,)4*}7'.fguWc+tY[w}7{>L>9*Y>#‚wS޾9G~`u0[!ƑS `RΧfiRp\ߑF<^Sz B-yiZ;Kw& <}7"'89:E7!G /di(;W*5MD̹`(+R| T89 ѠGS2:p'uS x@$[|SШ@S$m\40O?\T4(sm@#/U]FJ\G<{J@xU6k4ti-WZ;+}B THGϥ(yyP"z3̓B(rقbkS!qһsj}qgӂZ)]͂@[)DU۞Qy>ǰuƓaj7S= gKq5NKcL10_ȾoYEM!EK>T3}LĈɴ.cUîe  Q,NcgL6NJ=l[[et?H2ׂʍ;J%~g,u6m{K/AGOש-؄ *,S>S}Ly:v\; pqf8ekϠkQ=qY+]w$H&~e8܎c&v&UD(íj; 5]U滑@&վqwr7U@  U/?,9 M40ݑN [|gōd@:HQgCC?J3]H;6FDZOHax/b3dp֞ =:z9 X#I89Р ML\iI J?P'_C8hcq?xodo.C_Ii]"Tћp/4jvKl0q𪄫;D4k]2B쩉H&a6lw LVےCB}\>h/v=#'&<~P|-'CsEa%cK wma}dDV!pT].ie9:,N>̢yFcHGdo'Hi !TǏo瘨fgP=iǞ/c߻C5$.xPtxWDB]By4WwK=&@fv]q ?w3!:PFNW NjLςŷ9\i|¹_$}*iczO^(vba?p!}0{kGk,M5oXF> 3jYeX,>Rp_.*ˣ;x<*ݥQZh0C9['cA Q0n?F[2Dˋ}zc`"bEJj1mM%K0T 8  mُKQ(ϯbcpP9+>H DL/srSvcӢ!&0Ҽd>3Pâo̍Vsȇ@L{g=1|JDX*%oL'`@@WqUU!Ö~7=]QP(GPt O7HbJ [Bn: pk5G?;L7JО@:1b\!Phۤ)  j(wg+oྮS a, R!vȤx>=:#C:JiY]Zż ctX]VJs{aY:_o_UcԜ(l^F48mk]GfC=""N=H紭tvZfmw#cQNgz?mq6єHp3dlK\"anc8IrV9Z2Sf M` T8!݆ZyxE뵤 Mr\=){rwd1e5?` OǠiűOO:B9h壮#HQW r2߶bq".Goa#ݺ?wu:rD?%E=ZTD9Oݫ&/[ Δ ;X~<29iʄQfl 0.bL" wQN&Jz+9wx ML<; u1(h4͝YdtF}NnjpRCvgGԲ>90?)3ƙV35jF$c((B@ C!-a,eH?m6*r[۴i4`m"~y2M@% OdA kUzWdsd{N"o| lW?,k#ThYi},ͮF6vC_pV%|^asGtɢ/ /z HŀR?o'(,HM0."ИWpc6E m&~B4e5~$v@| N#-tp =췂NtQC}G]8jalnFK:SEIU [ơ.MdfѴ,c"y{C$9F6FHo"Wyg1i[hQ+о@p}GhVɶ4({5WغZJ{w,Fv"J.Z$ (%|,A=?xbVz?x 6p`'XA@WH^GFLVr3IiP;O-lNVrJBr- 5+)QPF]JC_`솞No|`;vSEStG &p,KXZx̣:#ep&nOG17^3 )PTjTyc kUkA$P. co"ɪ]#R/ebG0%1c<+OU.Y1h%C:Tб7;Lx$9! taXe6`_ft*7so*١es?Ceh7H/x6]8"t.0N53jvK2WhI0 ;L8Fњ7 H!oy s;G by\ܮ&'rmp,,^^jS *WEL!DZjT)= 1QRr2:n\r,<@+wwospy4ƽ,͙Dp&!eB8P{/駼gqO83, X6FV478鼒y>,S/܈:5򸍪]\2]T-'RM![=ۚN!Kÿ5mKΐ8Nz :+(MnQJ#se`g-wfG^!A\5\8lT)~7~M#Og!T|p)xXlG̙@ @uU5k)F1VK.AEJ}ʅdIޑ?vsj6k_Q$et'1;gu7e lRL," 2Bw9XVb)Aޞn?2ڗ dɘ**.4]7SOdr]TK j B# Ƞ2Nfe hp=Ϣ>cT ]!3k##k:UJukłEo:1BgGh V.^z#H)~S{0N!-)!iX^JaTy*6XUZDTSCڄ%xlF5unį.+(ЭI()lZ:Sc;KBQQ`Vn=#ʄ'e|,e*x&%3\J #ĀN{BwaV& H R;RW{Դƛ$-0ƢDǐHF}S8a)W;G­+vO )  3u+8UguL=vpQ>)C7+i_LwK`Gz\ ?j6 Ym(m=MGB`y׼pnu$00XR>0%eJ+aK ?wRՐn )途Ϯ%Nu;|81]\X?'gIloQk̕BhyIc ti" Fi((,f?պwNAbM4@Wp'dv,˝pM`J]~e.ui3:CpмM`c̞`weӌE9g캳3dVD>(^s{\MT 5ļLs$¸`~!!(+&,(Ƈ s}|m|ΘyPIӀV.Bur +a1FN)EIAUF;ȄO|.9Zf }N=&N0S{^*M !kIԜWqk`Bv@[aA?$X4_,Bxx!'NPZ9Mֱ⤉ؕ5G͎'w(עWSITrqGyTWsx|yM}bqӊ+F!Ğʬ~s}@MM" ڶ{+=7NǢ˄0Ѷxe70tȩ==:Z8DvT6"@k璘*QJo eO{oG ʓF}L`+:d8IJ}^0z*ڜQ9"ҵJ8|eYӉfDgK]j.Kʥ$Tp%eŠAL!oelc+sov-%BW`f ]]#DisH pVO7m KXsYvbWK5+")kd1N~+cg9,&$cFcx>=Ui#e]dFhuSd= j*0ڪpGu\vI^}QUpc$?o34 wl6Tr S&BHmG`\iHN~> S +j6N]Q">@ЏU-iG>&j46OO Әc/R5|ٚØnP.r(dnn PG(:k6hcRT3ćzpD Kݸz)xzXSrnʈlaϟ 1v(k93u#mJۓy5n\g/mu\-3%`!d |5qzA J汀ժn{na5苋8 Җw > tTG}:xvҲwtbFYE*ʀjPIfƂr.)`p:y8|aRݘn35V>_}Ft2͵T'd`9bK9K+xի<3kDwomKL_GòP3hw(Ow9jNA)u;qvr0^.Sl@uOȵXdī±VrεCoz_`CI򻞫 fz%g'Eo}uqU7F@s¨I3'dž0D͆~GU~ʝ ?y9l)?[;Sԩi"_2(g8#s(UxU@qRjbʜAo=YE[Q9a(ƶoaÕQl ";VE±cH@4yxEqUr gz,>nw(}`}Qvxo J2ϹhApoVWLI}:Z&a7(hXjۦF n&`Ix)NLA8L eT~A|G^1*40V@0 UX`*O?QzuųW:#SkT{@ 1l҃@MDQlusO_*(9crۤ6Aeѵ١TrRnz;Q э'00 9p!5e)_I9jf5k@1l\VGV{pCrb޳]6mAw%"b]7Hw?:嬅*< w#I| `ԝ΃Y"۾|ZQ›R1+^vš}^[۟Ъ܂nsK<rSSwt7]W'%T. TZ&@;EP{oք&bm)JH+,ӌ.dɥ(k w='Vƨ*Xq`*s8D_7zʦ<cH\vPS=w\{ BfWG撉 7L{Yf䛦 {IlZ@S5U:G4XN€Ht KEǸ4RD;-vn$yFcʐv5_}f\r F=`篙-q E`d<;D@+r72zWЀn(p}IaPuMm\]ZRn?-:O3#Aj^1<*z=6Ĭ,OS g2} HS ,h"=TO9.[#4N J^=0EGv&x~ܫ0(`> ɴY-SOsM`#5 H!GGv{%caqE4q}Z @$ )DXD|_"$=§E.;w2/m:xKx n^9sv&rJi։[$BHM{@ dZIC H%N ,5/5'M$Ea {p*ԥO275NR4;u+*_=N6ŊFЇXwS|t{p}C(M9SLWsPV9 +U%hͲ" :PV9! [ JA<_~L ')Q؞{ Td㰬 L猭O2cfC!|`cx9|=RU5pctz Ԣ;d4%i $vIAk)aﴺJZ'h"]nj]mwv!HV[z9uY6U߫JmQ.J{8?Zohztݪ Łl.CDtV%pR&1FuΤ_@P`,zp lZVFڀ* \yٟ$0yl겙tX 9CtNG uIK}Mÿ4 K!['Nkq_Cu?ׇM5ģr^”^øJs L0 M*)22?Ϝ>s!aVpǵfv*l9}8XĒI7Cܩx:b{F^$/FujE0vܭ8f ,$k` 8%Yo"yb\pr9 3PD :uJ5n)BI)pŀ0\%DV:+n8Zٛa.2 ,ǹtd>nNYi+|- pۏg"} 3:}=\}Mx+0 QL_k: Ev"R)kz݂ QY| 7N?>QnU-?gp:9bgMW߱V1hb$R)tsxoUE("$t79݈5pNJAfO{MoǻWZJPLWiE6І&j]PRJ ;nbO%|Ϻem|@RW|jpQB֭Hk&A(NU.!:{ q(_\AݟY%xd6tI{idp/a\!rSaZKD3zfvl䖨.d:[r]9<2norݪ a*f_wGH~#+`+aaA2k/{c_%&FD}COuW9&7MٖA7\%-6$j00QW}_V Oa!`*Dj <ΓrG~'ICOqXJ ne*rس 7qA$6H8Sty:iKq%v)Y5EH+cWcC$K(d5&L9ܤ"[|=|Ļ)7&~ȖߘOsΎT-D<`b),N+Ϭq29*1,HOMi5V ]|LlN7mw#jJi~Cig8="l? x ;!Mt舨}7*5ࠔydC J(UQ:B>=5xR';ܼxM]o憲c t9$ G}~hsbX?S[~/5r"Q-Ŏ|kh tvkbA@Fc^J hOA^SzF>$C˚&=Tr/+W3ZX@!9!unztk}zX 3 L:8bPQ,7Gml z;_L)8@t q@HZP{ jÜ='3EH$M F{1ُP87%Zj7sOvahOO܁4kI_]XMquY6?E1=>K-AVЅH黻%$V )#z i3C7mQ&v+KVC^ԯPM0 _"cx' `_2"ū'}uYEl\ϳ"wOQnkJ:%zrefIDX܂#Y0Evd +ς(r|녀a$){($"Ӏ>_vri$v1Ȧ*&ι~.-F+FD_ǿ'jtl[|HHt(э=:sEYoj؟wPHTa@LRf=&6u>JW2jYֽSH2v7"쎲4w?ӭ6i&{hh`jB u}?,eՊni|L.,US?p?١vhBQށVsHg#FnJJm 6R1pa;s&alp2S76y ^aj"~L{4 8 , kSI$[ zn\Zn1hX{ gl2yw{2 M]E1 wF;m$dW8AIAGaiKA7-Yy1g6H|7-<}KqhQ_30'!HOΌbQ8u6֘7Ϲ $#yLK0c *`K5:<;}KEgoZ ~y_JA@ 给Pn6Ј4KϿ᪣H$iVUU㯯TF G24 _4CcJ"R^,@<7$y]2&`xYjupbQN6Wc2 J\pqab1FB7C?sw2!_pw;Dd/ͻ,!''Wb+P?$3HtwKVspgbx\ZWφKeU`[zg3x+r<?Rd x?cWĻbOP! b/x˫G<,7 eq {/}hicxL͒_uCD- Hkm@la%5f>s_T^[8^̱C/kϻAbQ҂(P)Tt4$/蜲s7# Ɋ0Łz$Cf;SUx Dh97al_'+,3Y NWkQo3G9}Yg0I{Hv"< o:8T-V\MTz6m||wtr93c7q(rg?oO/`'typZM]ttF,J\_em,+/lfy%uhfI1 E?ՎY߳ ʹ:Q*hf57Eˇކ-n`OzpBH[,KuAŀ݃۟kIϱܻг.~ոĀHo|a2` YoݡjS|]^l=dC' Ŏ2vNsM~Z2$]jw1H?|fcA|\mW'46% |7. p\C[x{iW*^.rՀ@p5ǰx6vG^8Ag!1$ ,seK-,`n1/}U48юPa| PP^C;@[y_X^a݊ cTCM`]XQp0ˤL|V<%b@i>gp OؙX̆2wJ&\5 \U5}5W7HQuZ1_YeP&F,h4ܲ&ê gp1[SׄRvin+3¼!3D1  ?E88rm8l$;~ E7wSHo#=:lE,ܑV*2=X,?Zj{!s?۰۞ < . n"9 [1_FDphу0y߮ik6{JQL Ѹ?0sV3GjhN6>].p\Q5˦d!S:VSae =9og98Υ%^%Kf ijAE لiiiY[w`3Ctm^FVi4b3\tnm ̲@`}7\O/IVV^ s3vK ;g^F^YnSt!2_9:a[(/Xjkׇ4LJp5+@"o0=6^-#+7y$+VK!\(岎b f7&m%eBsסND\5{iRfe |!+2<._˼rmbgރc{/)aDW?NpeFbU8[9{ډEJX+X?=6R^R83VQ01 ni,.JS!afmcp; dS] tu8-?w^0Sif e8պzFG-e_X a]O 1X:،R-E.3+NR>T=3&R6z(@a^mC?w(<<J%ER܆a48OӲ{wt?9UPw%j6?}e.^Ic>\DzgϘ G667L݈zh}>W?fDhg,7@KXp8jDij|G:wcEj0,GI@8֠(]C|-0 ׸>`WLn#)\OnL̳L}Cp{cy| ѧl}rz/iT ؁.MZdwiH"/]f:6'>]-dIYMZ@jw$!5+/T$ې[nẇwlz#gIDz}I}M6ϙ1xȆ6~(n$jXY ֬܈/ sMʮ8Zy[ n•! U+xwzBH ;sh,;ndxcPkK)`X)fr?N/F"2ݎO :C"O}9tX9zHA^9I7NzA>oU@Ew6kIvE}[rԦOjO9ELӑ #e!Fa~\_۠6^h)nP{Tc:zx=vq6gW?OEnnv\]V9]shI(e+jZޕ|'͕%$ȂV|`_AU(Jү׈e6WY0_Yb.op V?zC3qj1^r<T8)Wmc2 GĽ N зRx`i:w9ut"!8A)TͬwƸJYde4wXm?dmk,ss'>/܌N?~֢؟)2Tp$K=t*g4()VvŢ>S:. ,EQyـVkRMy]h"CyWmK?PTyS_>XP&˰&FuHآeE6AOB3A9" чv8еh{FCr>zhmIQP,@MBmQˆQc;+ZEYy[8-$cܭW , h1ɿ,TFJgp_M+U([+/ΪxxnsBi&B D7UK~^2qOXCL oϘ=6q`D&ڈ'#ㄤ !# ׶Ǘx'1 c,bڀPZPv [wc#s}io/|Ħ5gkFH7&:bAB!9Mk>wVR3ks Z{ !r^>]<6c܅:_ɵGsKܛa7q1r (=k3a_ t^1aӒ8@@ /O_ٖIzzA>%icvyDT1Ge! _sza֝qQuMеCiFcs5ĉxb ̊Mv6}MDzy+BdȻe4[p,jԣ'Ȭ>Mk:WBO,F+Z(G:j#oFw7{ged^9&":t+byBV!&Xs%[o&Y<_1T[ \}F@V&U R5ܹN?ORn FšNT$l<?qS27ua-Ti*ɗXxu_'`hƦ&EɌͮ^VEQ'ƍmAEf;U`1;eWtC񙵢:B_!5MJx=7Ml]LUuc(@@/0;:}  KWZ>лPp5:Uvӵ >cUO; (:i/:nuT:CzHDRK #Ӑqnwi]ǟ`'XE.] NChcV| eӦ./eM! ]"4.($]``g몳8R䐃@J^xe崙bXclu.ne7}>Ö91܋ʹ/'ֺ٠۫@Nr#C6@se6%_4GnD'g}w]btJ"-Dŷb ݏ0;;qiY:VY~LY SQ-CﹰɄ<9v޹q$ŘձQ'_[Kr[^Rd f ~kT%vr)'3lp0cl̼/+^›FѸ؍a!RHZ;vG:\qa \?߂Q(ds Ev 1c5h(@#3˛Ⱥ؉55e"թ8oMUFbA֧\L 3tA%"XUGu PM#S-]"JEAiף/p +?:>:-j?]ݪlؓsy*6+\+o 5.Y rPx @8’v{<'S-G A zvl1,h=O8x0}@Xnl'azN?{-m'_xEnw6{ċ^ﱅIB˫|粲 Ei<ſL<L4Ѳ9LQ< #JKt|6jeΐ9X&r,l,stlf, s$yK s!뻕o^(Ã^JkYyNE8ECV Ox4s9w3).Qde#0HR |&ݕ`j-os_3 *W*K}kV%kl~$[%YL2EBU}FWkNa9 "qǃEk.Ab䅈 ddYՓv4}sSlWȘ^acq\eV"7{-µ#)h2((e$zJ~0QnhQ }z3#>0뀥5{T@g RZ BnB`KH zXؽ0\au_wOOK`jǁcխ_ lnU |#_bsaxϝ@D8d?KDz  s׺`E^Vzʱ?2W3q-2'0=6:<~A*UB4@X?FpE^yԭ?!yFK}Ե Plaij%/^bYX7  W 7uO[U&kH|U2 3|Nwp.ڶJK^NZH縡h3ϐLDG 莹XH7xagN qK5`KU ݢ]KK-F+pmXN*Zp#%b:ZX'wGX45lXb p_6]|&& $<Jw{ H$x17ԩhCt^µG[^lxS\wi.DK.[PVY K'to<4%Q3?h'aqyX5w0匵 B>Nw|qQ3I no#9Xi)jJ h^-_ "8xl֫8h%k$& 5mNVLi:LnBbJ?;Qғ" 7m盵Q%#\MM\pA1%lX(&D!h;{#{ ,wrS#WsK*soAMFBfBIC}{fJ mXUpmB;3kE򠭾c/9=SSE1Nb7 :;G+6"_!g\N2*Є?e$&/s >ˈ}i?! ܥo{\ #dkFn1үwN p3|o8KFǗJA"J5ۛ2uM.XQ5•PS/ 栳jXdm O=)? 9[/ﵧfuf͵U`A{DEZs^܄>^EXrT|w 7xiۧ7c-*~ٙbjpO="Di,86)RCPIA߅bN>AF閼-# ru9n>*K˨^: >@GyTB ~c-ni?)"."t hE^"+\F_h dtJvB\0BC.g[lʪ&#4н_mIqPdy^CMÕ 8$u)bO_6T'G)A9lrr+f3aQ>Sɗ\J:Eh>! jmMTΙ˜ϔJI!Uᒥ\"2C}2$KiVA X!/JU&1&Y34:=#fxPیC"[B@1Qe JfNqKoVڀkE_Y sWy"-Ul I'UtF<ؔʓVpZ&Ste!Ŋ5r/o=?ժn^艀2^C5Ћ^4 o82Oez0YR_ ; ڣ9јDlFFr4 ?Z+'h 2H?HD!K+aA ̉wWBW72[j[St~jJ9r_΃dwp(5O]Zo_MobY݇ *Y~ϠRbQϘf7i95l HM~t/>mI2A&'Ea,e[쯸Z{Xitg>GyM!wrXm3;ĬO Y-Z,j90q:?3wѺY_x'R5 _;vh+31_m_=5&b #sۂbcW0YUF%i$ӽFVoYZ{:OU>:)Ǔ$ݷ"îjkͳ.VUf(C+S8cEce(%m%ݓ1< lxET$TdVD<="^ '-c&A%Kc .;%aqvͮ86Bz<&TU5;cch[*H囀hwk w?tK`kk`فA}eNޘp ~;+P[ܑ'C l57'6naG-l'07U(6F>ɓj_B8=駮 Ŋaz|X3 Z{>AhX,ME2e/-,/N?J$꣑܎$vj5:k]5ZD;7YE|h l*"f~+p`K6z׹E05/_hnP%`YbYKcF vkcďll1/Yb>KK0[+(Vڴs&ke`G#]JWIPJ|Vs+.UXTP&[v7q;oiX?;`-g1׭k2WI%YW" ,urf1Nqivچ}/~;vlt:̈&ۇ2)ţf4, (DZpT؋C{_Qg_ FTRD͓z@~)n%f[LfX0DT ~>( k9"w'5 7K7.!mwֺ1oD2>ǒ;FJXJø|;^lgj\%bKBm"0! R/ݐ*90uW$^60Pĝ/=\NqAОI`+,gAD4!gcDdt-gNun՚  /VߗlUقs׹[=Š8WʘEF}Ynetsc6}Jt1(zF*yZ(IqfD$*=Fr ģVgJz+m0QZ_]IJGk5 EJM ;:r0'ߎ)vk2|Zn<;E3HIC)N~N~P!bgh a{s؊K[^|&}M+ngMb#MzV\BZ$1wH )p_V(+8N@J&R"ӈ'i;2q1IL;9ɴgW\l!E9 u3T*٣U|*ˠ¬W#?"Lf8$pư[*h;E,r(T]WRi>y*aUy?}$1@ x[x8Trsti\!6@6 Wm'|! -!}t>(D#kPn6xU%ǷUˆBn}(kt]>[ _zPJ? cy/0{rF`,-cltAM>'c#Q]cdM1`,Kx8 ́;F\D8|_5lJVwE)W4@U\w`f:\om@Ǽo~ϝ KQix:.H|2ze}D تJCVxKf8PB,zH)u:Qf{` Ҹ6 'Hy%e:Qsfhmyg[鈵!Ȓ`35K*֑*!L Vx{x+PpO02 U7Ex< ¶Lwö-eDnTExdi=jWwIK] 83h>OcB rn%c*,_yIud24 SJl9TK{xf:%7eރۖ׀B?4s7dt-ʒFX}5T9 UZ nN[خީQ^?Y(| nSwg@E7" ,jcu!7W03 >D~7QP>,]اܬNн%8RZfdft,{l6-(FMp``)XJ0D0e)Z[vH;\ ;1S 3g@<j2'H 8,TcBj$`,^i@wJlZDr24C> Uh2EF`ʞG}#JBnlVny"-$AGAAqeGaITT ޤ_7˱gx;5b>-z<?7Jl `| 9ɵKA#l b@: S0wZ} v ꪖMf̊MoDZi yv TXٶR_;[Kq/./S۱Qktcy֢T0Ѧ FO\nn汎4Oba/7ã PK*zҷs6 rc de901UzH#"FW;<CGڈ2<PaId'p]K1_I H؞r EwZso -n&IΌDw Xr^ldPH9[ M 7NK#aq(+gr@=A V`q`j,ݎRܑ'~V.tiWx587,xMbSSe۰ll4U̸XE

\u46Е輞+~RZ0MGd1m1 7Gb'BsfDI6V3!j 84S@Ԝj2yPF5ꁑ ހ=(ިP+ =Aކ=فXa1ΙpW,֥A4. t4 {$P\Z CKkc}τrBVt W & 'd֍ܐC}]۪ӗ1pGަӵJnv7cQHF{9>ԅPVGˌvI ʕ^+ BvҎ 8icJ=ݢB>{%PO,HI+\ɗERq D/y@6I8$yeb4{8Dzd7KG+~HhB2t'7 ~ה}N&;h甈[p.gCwYTmbjL%9RեNɂbޤa~TN2 M+kzo@S !!mNnm(W4#FWGw"|a 2j("|FWν4X@;ˈGB0߸c`KL[|*)} w'Oel߀#: kz d;/5SX7K5lf@{H;;qY~ iΦ3&ᆱVF~+sqw\p̵8ܞъغPs-L:#I(>MmSҏ"8SW68Ÿ:Rf)sǡ'"P5Q6q[8۬v]m{: H|a[n#[,\͢rhpRl>=dQhGKU6wȉph~߽eUN{)Dȫx1xޒОfLF|ҭ~rKy g+^v\mUcF:1T@Cz_GJA rcRR]w@oB$#&\"XlZWWbu7=ۺ_3 RUtR$RIMG mM1gR4.JPφwg6\lzi ͶeNz@)[l | ksrMb~~}b6ڳ 7NPXWsBwzKp9H[5?TՒ p5B2 -Es.`/ wb.*?Uk;+ޯ2.kƸ`\DyZw͏;;Z8VEBi y]BYAh$rxQ ?ٝTΡsU]F5ÿ J|iW,xpίI):< w#|GFr5b5)4z]D@v:.uWcMSJ1tKH&۠a2:Iyon|U>q,~i f=fnt2@=7.SJ{yL; b>-e72r;2OkTzMѐ8E`bZN$nպ&a DP*AC,?VPrfUU3̻>3$jwp#b7,ytm>N PX &KMux "$TZ{kQjVÍ׸FAX鿌u,-8I²!wF:x 35:;53h${X\c+$[,ݽ+ڰ,ږ8YukѠѦ(RtBҿu[kG 2%|F#" *94Ё#$NK3Ҩɣ 8I3~SlKz'W(:b6&z~h괛"ޑ[ϏC a*r­6č mV0,C:J̓}?cighWmPKu6MؘnLm6&i7M@pm$7]/}F5[0)YCoqF>s< d>w?p7*l I4 Wx \P3`sd巚6+x%,.#̂AquG+QJ>tdikEcIH 2n/ cHh&y/fNyk]٥N"QkH4%&u`׶%/Iߴ[&@ wUA'/n.`K-C!E?Bdo RB؎/[mߞ݆{Sg<:?=Jǟ}S$~D:G5Uҧ_h῭UnEκT^V=cUR~1%a5u_.inVRzLΤ15t:vWَqo${XiVϘzy@pB[^WĻp؁m+$& !']=]2T2I_Xٖh 0Uixf"*s f"MW,EOվ7RɄ[mN}\9!;Z\|$$' pq *O"E/ 1" ,:~7࿓xA{_b5d&7wg؟`{Wa WQQUzW5P`PNLV%=޽Y#yTnJ,34/k kծ%gB9#t[l=? _9S+M9"b#4 >}~TegeJt59hH +1A<-%vXܺk+c'ga1rT ψǦsqT]~[-[E%-FdLՆ_X6KN[j ZN83Qx%.cyPt{_9u AvZ sM!]Dc)}?{g &ʒG&}cۢO^i}ԱR:Hl͵D@,<ᙻWGٮiAD$[M:Ϝ}K;U\],+(iK%лoakI2,~?+!7/[LVvtBrBgwskdխJ^V]%Wovpc[Ը[Kt UY7!OP}[>\c&^*D%JP[YW#u @N'dgSZ B~Jtpk+ onQvR@mgJsrzs\ᬕzWڰF2։h,q܈P$$}bs-UBx7SFK srNƣ Mu^Q(EQ xs}vF1O];: O-\&tKc݉HOjEsxgk2JQ(JS赸\6*T$.m2ZG䦤C=̼o$߉@Anmm[ͭ)BWzٳSJlJ΋.ѣi@GoD+޻njty ѣ  ÃŰⶒ)%&p?e= dnAKЖ樓%Vs;Q%ˑ# NKUK]SFׁJB>K@gG;Ɨh8JJҶ]|={ag%+|]L mQU4u3'.W˓rru$Aur0 n^qtRUͧ<'@~AYDU=j*L符PAu#mݜw}Z"*%7T}օhYW= A2Zf!`UfJ^>3t80۴6όNz6:Zf91NZX*IM >G$\! 29Ά,f7>.e8鰡 AćCFō<_, FN$!05/g޲al?cy3 VB7*D}k)3;21h1H=m1+h\nӂ~&hz&PT,Zmk _Clڙl8.B榌;kȺi$qZv {+"L~UHw/UIYj4{G:0Ť, M9c7uS=k: o1[iQtPS#R+v ;#:>Ԩ59! u ᓴi:_;H_ +.n>Aګ"JdG&&2;~""Fs$(]gdOiBNeIĨ%R8%qvxN, !BAc~2[ P]Kƾ"gC@c-6Lگ%jbx桱.enNLII67Sg!6Vz=.5gr;U)iHgkiY\c:,Svگ_>k۔8o4;43U#d9V ~UvQuh+ըJ[~M*0wos<11>nR$.mu5.ηrĢ®h~ N$ N/ d ʅ}DklfMt h xD:C1iQ-`Z0leBsA+<ļd?Ҁ&(~hT8hpuO'o]A956rmk5[tK |ωI3j NQj{V~Q=ؐU|EoW@W-|`ȑ=~!PPh *^ Nf!`{VFhu&bx:.䣨R4ݭ1ajZ8i7'4"  큗!gh y߈r1jsuLЦ]n`' ĶҖ m>5|rxڤRӛE3jAt<"F9U)k5g斖uH$8~8պ,ՎO/ Ȏ|z6<ېT4C&+KD x)S4N<|Ц6p*K(j|x蔟`y|XXԌ(U3 `+H*K o\E%\(%iʁViyv>vQAQ=pW"nˢnAqV ºeێN"^1S[yP ri$ ptY8pc}_АgHVPRj|\@tSe/r6)KjoS./!>*u!P=H8\˓y;A%5W`fN%gLi_B!xH7)ed%t`cerZRL.*-qWGIھAsQB':[nt\ֻDl-VOR?< ٌ}yBéhċ&WL/]/+T VQ0LxiA_pu!#ˈviYKgamA,Ԋ1qM`JyrGiYLsa9pp%^)H*[1 yL8Tu h?|a@ kscMB=}M63FvH``uH$1y5 bSt2:qU$KvRqu-k"#LE]vzO@+T"@ _ew]Hd>pT#(и[fiᤙW/MζV*70Ze+=5#w,9&a41Y2z"F:ɽ(|rw?uN<&jA9KnḨeվZajLk.#ui"HIL` E1+53-iɏf6Tw%0m,zO}eN+]sf:r-GJ甪*K2Yw,0H) o R\'rz|_U|D !!Z):TT; a1٩.㴭_ kMn6ɖ424hK 2L uE|Ur0x&MU>QdmbGq[+ 0SMVPsQ-P7ɧ"_E|[ ( <ɰD%`kF}(](UN \O%P{??:IIL9'/-߽z<(jaI r2 mv51/ jݶ8YϭkȸQI1, 8' +:bO䷸O1SD*y??8%ЇY$A ΄i>Zy'6m;^=­k_G2؅]M _=)<à%s@W{zڽwOwc|_: @3j vӪҪ)z^mndE(9jԞ~5mji(Ys3͋+'U{Ro!wz] i &+aDP6|қ%UgYG9^5ˠPuwe=̅0vaeP%UfXzgu@pyvYm (V}ܠ}1eh@Op$ՔV83·!v " Iz%6}KQbg7U^9aI(svn*S ˑ !LI5v gcdUtL ^Jx DKD@݉CRmU,.Ktּ.$!S3V-ϥ R|erUػǗ Un*Bj5Dŗ>#4o蚄1y%m]+y+n`dtij_ر&qW;[ryF;  c35:5u5&!ko^ %{}}e>̽Bo9b'N)cKR]z~3=Q,/A&?"J`V{:⓺m1y.Uq;3 ԵۮorR VAUC_E5S9 EDI! Ql̍gc/G/7\k dx) $$Dh,YYWJQ  դg-ReA8Q`j~gvp4\Pn!BR+kA!b4=2X;w̌dEBjHTfPA19ɅuKg\ӣM};67p-!AQhĴZnj|(E nz5śa?8v ǵVwel ^-oj썥*;3ӄ}`IeK}.8-$cz,[-?ːHx4CGe(1IJ7Tӊ VpD9٨{p_-U.7f[d[+'_a%mh78U:{j5(rc0IAdH]Z0DoX"y5r|C9;i\bEV:#Ԝ@ٍ3'8rE}$}mNQevx 7=Q>#Dl v|`6Qm}H-~QRg^1~ 7B/#jž+|ĝ:ӵy.q ==ԿqRفZsVymTú &At~w~lXeme2dPb͓o!oC'<@LܟUY =VNiby(`C!N"w T8 P1b~B9s(7ULw"=`{!fD*k5l`گښ)(!f€VZ0X!(n*beMʉҵ$GݛȷYM&%N*HXxH<BƋqË7sR8ֈha&KLJP(@bH ^[&_)G/={Z5.w*Cs"c[=:?+ VJU?x%䛢KMceE= - 7HYR@ȲjY>B}UF&"Tӄc{Q6w |t2,=窿&Xe;<w6G-0\Ԭeǥf%V1/SWbQ['tqc_3s=c<p/F7r;2t֘Yy#7 yk-yoh(f+AcoӒL]U?DݨfZ>֬J+pWY- rwIMM!eB\^2"󷴎?G*ƟDu@[Am ^*Z g>ZP G]dq!)Prҟ#] :p)k~CXT#YqT;떔Olu.'g4b ة! Q_]|>RTI=M Vf\88%(W)'f>7)  R2O_G/br;>6l@Xz5Gd$[l"FV%))L\ּg!|Ml.qk!Y0*vi}/ǧCY7WI?;rsVN'V4D# ?AG,20.C~+fh >;7Ch|;`Hq*vb3;/W)AJ>=>3[&UDKI)V:.Ktv>2qw\rwIC;Ȫ{BdXje e~!lB Y/0 +sUV9|έyܲ= @NBQar sJ| D{D;gL/E xxiҗu}i{#:iPpI[mc鬷?>Yh&)S4Sm 8 HN"piv8S/plU};{"Ycy-8.ֶ .U](gg"ܥpq$,_~O:o=~wlp,IڟNcbV `OCEgצp-Sd- `%z3.HZ)E; $-B'PC+@e!܈WKMԥ}>!&Ts{4k \kH+?͂yf״bϼ"p83POʫep52 `BwTxlw3*Dh3D}_ep$C3*5;0><~\Wv2 -I]zx3#*GƏSZ0^*")-r%AH:h5v%XT A8?#_*PW1A, ySb|VNG\=@G]&Q=|,d k.ojy>;9(N~z܀˿y/NKt@$PukPtu ьIH%d.h! ["SOt+LŕdZRu./{pO=jDQ+C>mFuU '+>ȨMkz!0(0; G1ź󯳖]2p*.z\ľnT6,~ڃ)px Nax~s2 hD ʪQ8#_㱑Mj/%-}u[~Ԧ{*G^E@4]WɃw#BrQ :`qhTt!CE@6epٵ g. װmBbQ ~4ΐfyh9%RG[A=z0ʥcđ4ugPl­'mg?;1hT#i Ps07r/P~G,r];fm_CxEroLld\`GAͨL(5ۘ}4 V:5V2_mb4jIKŕ7*TVilL+VN hˮ8:LaDXw~bqibLgsXa@%]DˡӖ9 .8 CJjDAm#7-m`emr%,X"= 0i*2\ K`"_OyKT A+B MR6,Y2,E#VoH pB8*t "8;wϱ!-_co*ʛ]A=H'U%mJ>ΎzkS TRa̟pGqV5b-iυI,0G!MwqP:A7mc K)EXUfsAt5/ 9,s dr 8!mûA[;[ʪS0#P+r*x~'UR ]ɛy֯g =^ =B[(bK*uj"**_ EdMq{^$%K6KKM7mbS*{6Q{%x\ 7,QZ\͏oh|ͳS@5ɜsi@69XH>Jh<& C;*²JHj?%7}*8d UFZU6/xǩ'To,lk_q"~t_pd*]&=̈#jZjRݫՒUlZE; Xڟ)BQZ6bI6hc5P fA*# aЅq*;c ~Io]S6n5Pa؋XQ5|C `@Ԍ,DY,ҟn5v"LT+ C}p\gA1I^܆#/yO N ^E0x1Xl;oCEg;jB88KF^YsES .ɺ74Ru5L=?(Ж(gهe!Sò:KN`j/Px@a?/\f0@cEjμ3){!mY&L8 ڥ,$#UX(0ӻ=R 5vn\F;qJfCVjNl]2+:\<Ľ?|.!g|tM%'8PSQ{=fba_)F@gRΩSRc855C l%Ȓ!(EZoM2f1!lZ!o VEuWm8*KԊ`O` ނ `*H~["شѴfe|ySktٸH WO]%~/j@N?P/;oIDg>^ԏ5rAŞ熲*(Ԧ9!O!azĸ+x#(AX{Nb Ytf"=(.-Ȗiu~(w%:֝-c$5YL[LQJ73rwzx 6뒅 `,^R›=ܡPAa -B n^-T|E}!]q>]w/9K WӾ7Ѯ*cv'(D-<]Sv#jl L j飨 "ut1[ L"?x޾N=H?t9V.u @-~<#;nqwL䚵ɼ dUYuv`@ZZlܺNgn~RmcB,G4 n)%?w7Z5V~jow g):XQqMO8Y e]?L jG{ȶEw t*NwA ¡^C5hBxh`Rg_\ ž 7~OjƗ[sCpQjacq=>{/-伽׈rL Oe~\L5_G'z" y BD_@;[0ԭT_*C.[E%x5x3M(-FpCy)YѴ eXe0ZxgplY^yr^s>$Hͅ`n![ p\us[1L HMG_߭8.[,ޅTV ez<_-L8Fʵ dk9S}Dy;:'CI|hz3aPkE뒄'"s4um.>7A܄~>W 7xeh׀FDq՞cz+2 al%cE'~_?ј]G#=ab6}fNr*DX\p1s>v)cf=P4Yz}_d0Z?%^$7O\+}"+'ጹ+$Pv$ˏEMdG^9ڣV+K΢ӊ#v]; pt~~)QgYׇL;WZmq@BVc oLdu<SR}ю5~' 3FL1OL͸CC̥E/sp]è9rTv5?`Q:]:6axi@DG);HP8Ig=ݩn6ܤyy\WALgRhc,7U&t4{?"#6Cߞ#=SjA7) Mv#gp/v6ETޛ>Yuyu'$V'PL ,ʾS5r| 2#eqLv+oNTπDIѢAWxދWnu֑sZMj[{1ς&!ryE4︫0Ӓ(ڮ@b|4zN_SXYy7u^k abڵ "^چk>OmAaۺ S%XT\uH:͒_afU^s5CƵHlb`~vg 2Cf6qJ?Tyy177,> <5-㟇(jY, _KCF0/E79,S_L's5K+4A9kB3V. e2ݘ[i"q &]$DZvM# \Dɐ~SXS{`4L v,tp}2xJ$do}.^*Աp4mn%5 =8ǘXӁF iOıa2 ڞy Q*3 ܷIUfGTwLĘ"]ul.?b^׮;}j^=8,vzPڼq d`Hė_'FsexMshl ])@!h d3!7Is*O2њ$<fhA_Vƀ&T.CTQU"V z,bK;|:LUu6=R8G2E:}%„*V%a8hK {Yΐ-+o^LއsgncUTJ]٨bSa$z" Vuϕg Sb?-L\&JzY|GȐ1k gΜ2 !ir6 mLu94?f_X3&drC^zx`i>8u/F?t3?PLXK ~Jт'~{h[:gKзGTˁ,UԎs[Tm`ga?G3SaH} >8+V -<ʈ7 gxRAWKB Ãj ĩK3X.0qhY׆m"  I| Hr\_8$I|g6>^UȽЅ%<$>o8&%O9&f$]ޑCinP$ȈGjʿ|["6@iv5J%e L~YfϐxX)MdYcHE,QFX[Ew-l/!lq[ż7-n,_ΜD6n4q/׌d̓$'5AϷdG7ެ Z\iF,x"p3uܭ;m/{h>h|ӆ5P8 '^nvSos~FF2CGr:^%aǗ\(;h8I !\hڵh:>VJ[9Bs^PJr[JGӚ! )pO1mdFqm!6GH5XDڃZ ]Z5_<<\o۹9~:3{2MIEAy&ȋ5h\FOk /IЖKc J4'%H~Rm Xuq}YdMW-l8 *W9!%q(mL7f$GBbenJ E+ AkCm/7v6&CC:bg܈&vьr/;{V/Nښ>-\3! 1 zPџR^ch4\:U>";|{NȡDz7b&'͍]~ zd"=0ߓ׭餦[8>`SfV7ě++{%W%FIߜ0K7flXsuCsmjdGi^Ah Py!ΔԘGfP 08 =])9k_1J-cW!X]"1R{/Q^{nQӓ=xтvaUq lju∰D,NiDQaǙ-x?jRyP^tSIzEܤ\?I,wşyn5Lg _U& sþW¡5u_༮.ב_g`cjc<_ΑB@"?%^iيoMH˃m.Zg 6жHa INNOۜ[gӸx?G=؏\ʜ^OݓQ:˞mOu,'U %ƍMgx`SyN߹კ4blV7<7ri:: Q[ ޏ$IRX]5-e0?̼]oyC A긪bzZȔ1 dJF,E{>C6lRz`3#e?&%TZDnL' KU䒰]Y/~g^(@{_KMDKEEҒ| !xkLjUejbZ[F6 chu)$oҿüLl fX.-B_q]9E1n.0Mp U/8%\ߖC:< V{jXY]߰/m m *: ׆kH, -Yki3i\-: }K3MβxOf$l+9?Ha3bȉeQ08|p@"k 0Յ|1C'YzڎOVL"I 8=MvnyJOfvh]$:H4&,AE! &RȞw9Q6u0F#VYFq`&fc&n F+SV=1=|؅O_jBc!|R/jyR#L_zթx2M2jG"4( zߦ#>۸ʖ/18,cLpHl;]qިűp\럝B0eJdmLoZ>Lx"Re%cn:/AOmC<(r`꼚{r]=.9я"JDD;ۢ3)2a0j\M:+ 6d=p|$֩UqR#nIW_+R$k;Q%WyS˛B>dCk&HRf\lt!g*̈ڞɓIB ?Eo(.bB^8x,].2ӝ0jbTv*py*-Jc!@F><&͞2^(]g{sFގ{,R䥦:L^!w|{YL߯y7;OS\RE%㄂*JY4oVڟ:Q:(c:PC58G@\m)l[Mh BUl 4T&c~UdiPFȩ0c@ 9%U(21~l`b? 9Q+<?\$6ՇdüjUQR{ l67iWaS|~%ukYfƌ87& bLtAMپEfCVfailph:Sѱa_yf}!QYFG Z`l`f0=)v]5d(՝^YBg8ea-L#EC$EEBSO| ޖi]C}(C~_KeT%瀿b hL`>YRkПN[hm޺;m ?tKʝf`%}ɥ`\R>ቜ&7|#3;N$> IΑevQ0fECcJ/čx9P(ŝ\\:aGS >9e$ɮc "bFs᧬%7oc3Pbw}a_vH|!ƉGʅ남}'Xͨ+.5P+*c_ʐ!%">5xG,}P3qw.'4XxkK;*/ge^0S?"LdBlQپ<ȧ9( n_z%V(UGkͺ%Լ[Q7 -0'FZ5L/kۨ5-~^S,f 󼘪 UN_Jo;#zf5ނcҨ~C%XbNz݉NPL.Ùg}wQ;zR)rb Жn!8h&Tʊ=J$e&~xVcgm+ZrZ`a$>hTzygKhF,ӟL\+< Qͨsp뭶e,g< B8cx}cݨ2Jl5Y+ȕ %O`7K#ޥB@p^P =ϔ.Ο%, WҲk&|z?, c ;J(X>"kDf"ʸ n[*_ DDt&dG;U cIsՙYpJI-ZC)…CK}[ޢ:Fd.o6;x7SV&[Q87i rVp#v1`' [G22A[W/cIqK?v3!w;M[K'A @%|HbjPoΣ\N T1xa};, Q f k5 `MiZԵ C;.ȏTdjR'9 ڸA @jh4-MNMl ÙCfq`$./`OذJYG;6\HYā5DW[978yOjvXr6L~dq(? 浾3WoJ,1td)Vѧ #-gNzJKNT7 f՛MoW7 ^L/!V+j r جq]kp͜IR>xLo}w1.VީQөqo=&顯Pؽftڨa'w:UAROH5y[phG6@JLԨ~l_z;=$M5;X|qr \_M.Ȕ jzc*2.A.şy]g,˽@Y5&ŐG.=%ʪ؜ :LVt؜Z$85W'jRos~]=DR<8d>k#iU T܁'\*g.wmM< :-T$\Z~˥+,-6MrX2I~K[/&u[r~l,4֮ϙk#4jL`nԾVXo}`QtKC-vdCRRxL[M37;aEIWք65Yq$(%ׯFjM(y D4͛/}0&)u|*VU&;2|{oV"8'@1^URĜp;[mmQqq*T |) 8|z["zYn=PwD5 3Z`#u Ó a-&H:<ރX j5zS_دbt 9pՄ9<ÿ>-0oN2[b;X% j|[uS0_ 7յZq(&`>lf[qWs6>Ff+Xfvp:Wj-{^NcM+a@d pH')l"+9/U_6 yft2QNW{l{g{cFhiձwLY1`rzCFݬ.3+BQ{7cP IX$-9prGSgF=\7n$>@Xԯݿ^ԨJǦFջTsFbM2E+S65&M6"wt2%Gyo\BlOMP[CF!};a+^4#Df$OۇPi=z RmBG# ,.OkfMDULT^26/] F!J*&+ū $'S"WEPrpS{w lȎmSr?쎫˘=@+"-5TI]_ 8*oj $=`G̼ӳBsMGDG/oKRX#i&Pѝhy#ɭk٭q^Bt.gRh',j7E:16si} m2l\SBoB*AE ] R0ѯ-ɱ5M\wISa~!W yĴs? w\y&  G^'Gy L,8Kt!l^i&2mr@C4GsLnl fŎo|YtFe$(\)`a4:Cȶ<]}ߧ~݈/xw{X:Q4yhe CVCgkx.ـe߉Z8N˜ MCbdpoIm Rt.)$ )1幧JǫW ^Ӯ04낳a"hG*iCKyŁnԀyqZnی,aoU <aB0yKvn_Mǟj&n* > G˺Wƿ|, Χ4NhF5THNnN!8`p1U xNe]˱NueL|ҟ ~Sqcz N>PkS:o!Eg_-CYGT.{uN½rt z ,fk  pnS 7(Z4:jnhQvs-`>42im+yV@Yw3+)>c0{ȋš)'Ԍs{"6H #~z:w??Jb{I8:{cˆ%oZj'+,c"{$.|v&ssT9`70DvS HKuJ (5˼3mIk]1-`Y`*":T3D)W'h Mwŵx[PA(뾇(r^Dl]"gLlGȸ{+u&t T¡^EBm[W4rr%A9ks#&@l.eQ٢'8K[0TCn__4J̈́vSA[ ?B׏Aydx_Rha"[|/MwfRhZ1Ԡ=t#0QpE.@J [ʶ%PWpoNTiqW2f8-AIڨ7$rZEx(} 4O\uonOl1bdb)Zb0<ϗw)b+tH0.Pi}Mk0`>4ًQgTw |E0&K5( weH2B';~Z{ڳon͒9ԨM<M,EcLmsqv*mM_A;"i=uǑ2^Av*:Gh]'eadT]8'V#$I(R3 ˱HโX[TOC} nÛi><]vI40~6XdOM$_b29#ܺ`|{w7::yr A4JbH?G\#U5=TI[a7.jrO@QZ2&cS zX:"Ұ`+fX+1C~$%G䔉xb)ף-TN>f/Nzɽ]y},sD ԖG I#MdpFJUE zC:@R|D탫2zɀR;Ϙ2+{%L \g;zw0/4HH*DqV,ĻK@n(XVe6Q 0* [Qvwx5VˊC'L ]|67 "!HU귮Z_V;Z/Dh^eLwe̸yãJOQ)p^zWΝj͇)`q&3$a3n# MƸV/gaۅܐè;'?dKE6Q]WFs؟9Ԥ0O"NGC 9v1ddx,Xې ΢PNX$# ݗP Cynp9|$}235(ot#rxn$q]/t O;&%1N] * ]k_[&>H'NrJS#~ r$ K=.i rj$)/H%],EwO1nr*|v 5Qo1`12^<9u"+9%H/W&%9jî3/JwkyJL# KOoPXݏ/ $aqo?_@ۤ V|c*K # np^zmL"fËG7t.9ĩ: !I ~RF3paݥD6*'FXS5WkWͱ3OV~[Gn|rEwDhCjѯ`6ȉSU`96uKr?e,||Z}^d'Ђ%'R[M ɀ 2U@ \h17Yɬ 9ZP~Q֩A~?\uk. amGꇧVPVh g,v (=_h$X],k}5hOO,<Ƅ <}iu)uyJn˹_BXkقW_]VL1чxLOj!rACf\G9eoӥbɒJud # 6_Q\q SSQOHw^F[)u&S em9FF_(gG@n%ژ}Q(4 {]$*6\jqSLJ,Mb;80L[z+'|c֯'=u`z]D8gc Y2rիTzuGO3CLJeMnݽvi/m\a`j&j$-4qiM={nOn l 7z"B\?((-k> \A'̹bуI}EԐ, 5Rj”j5v}Q?*g{`:<ط !"E 1ԕ.Is A*=T{cxb-u.8e4j,d8zwft6դ= zgE{Qx?5`"HW[N%+au%OQ'SO; fiZ5"| (sbUD5 !6ZP %wJƀ*OBYD`Uۅ(R\ʂ+o2TGe矄>'VaI ̀mkpL#@[oYk?0ӓ[-[PAnvm! 0.dT[+ ͙s 9 ;-Us4S>vf[Z<Fsu։ $W|tTR_8؋L76` E=NCqѮBuhmony-BSvϥ+eMίh .yDbשMIx8Klpg2wcH2[zr] хI3I<2n!ɩ:WuH K 8Udbz$o\1k*Yl(cu5PQPY!;5 &:5ٍ {YrRbWQ UY\i(̈́SP>\X y2= QOfV'o9"WEjyC&}+sSFO(Tq1 h~?%]:mUuQ%07i <Bv汅_s.xBK5>b^ I#-&bOON;e^9{arlpI_;}:+FcTKeЉK))A[>z{,4NY? 1p`NݖաV#cX<okKH ̂ho]:_ep $O@=/j 4%_Ո}-}j~ lwOW&rhnI O~y,TҟD X)U ~Հ`#FN|-D|o`,[ 4{SasAܪoSR/+:s]|ګv -@i|(+.SP٦A#}>Y_6J^ϧMɐ>9*o,)GDZJM{Z'ߗΫfu /0L` UI/N‘켥L ZL0jIz]PX|)]8njb.FpV )Ǐw*1u?s]7!XQ_2RUϭDjmXr SO~mߣBy+yRd-Խt")4to`M !zWc^YF u"HV\FInߛ§a & If&t]pv o(~*o1-K4j6EdÌ_u(BY$3j4 MyO"J?33 X@USGV7)"Q^nfrl'D"4?S}VEoAxd:HKJYTTND`s|j9J֢XV$ljV,Zu^64eIoty $m_tM&a%L%(5~jZpCh9-z.dlb3ɪ}, Apg- F<JO ~էU^)znʭ\p~\DL%xg%_-H&u} ;غ+h6tkAogSMU|э!p9ř!?{cA<#&=^ l;fv%$1CP6,X5 [144CBZ#=0iRmKYbo {X\im&_ x9HIM?sxۣ%GfS@4]l׃}n@Z=86x~'`"vϋ.+YB Uɵv_E/3FWb gr "DOl@zz) V{"H 4[NAjq(nR F(^gM?g@5'| hiSqaC"Ijg[LCS>}U/"dMBhgE!](V gVm3}*Iz9c2+@G6j3[ӉD_@՟"W߉&N&'XA3O%\zqhēQ˰N]=2-^nX'͢o֢% Rޚ>qcBΙk0h˴'Z$! Hk!3u %66WT֏kv >R"Y, :͆TMYKJ&[I lcQܹA# Р4aލmt2 oZ!oh.[dOO@)f8 ߫+M 28Ȥ׏8NUT$K,uռj=#.kMG#%9^wb$]}FmQrG-AwoE+O.,Ů޺ bZUHr'_-QwԴsH'?<4-37LJFaIԈ.bIOԤ HLb+Hr v?'bgf*.o+,q<Tp%yR*@?mc^ +P @<,+v B< u23%2 _H贛,'y[훺Gl3"hЯN#ry;V=(OJr0}OH _ 6XIzX:%xjfTߨqam9I{WPRs2A.NXcm(6`%CcOmcPri u/M׊\"g',MU}Sx }='ќH~b˓F(WMӫwPD!S(SNoZ!׵J V]Gs[mbگ9Q@5ü- s!;RV5A(Ca\/M9僖l.CLA;3I>w)6<a1?q>DȰR,jJY׿|[(wpM-Gh"f,d;P94$ڡ7sh''bO{z1^BH% B7I/igsu!& <⤷Vºa駳]0ҩ}XMĨC[tBuz tGC5l9Mg#oum".eA^J4*zp$ @Vxm&-7;[BMPzC|#ȶ:WgZcf~@|:ǝB^? el.OKkפo[GS'ZEwgZ:?oL9շ/;9XVc8l '<Bܼj&o4s!peɦRl3xyF cu̩GT`46myɅCr , ޿)yY>lG0cK/qMissDK-9!ufԩprgY[>܀|:T|,ʷv6 W(v\4^|`R tD?xOm$ v&8wUҰY3,~`Kϵ}`/Łۭ+M`2eobT)tI:}hqq=P^`wD/ u m'b߭O*? 9PYZ. N"K4Ե) ~;C)[n)J WqhܪGs_dxeʮdlbG8ϔPO2mL0I\#=NUĔ!L5 \sq՘xoqZ-N{t$/L*w]1y*L#ǢYC}4,hb6NK=툻'Rxa[G-V|"|u׻Qgd}er;V>peK/|c3?!sǷ-NW(M/+5l.;_c~/%sw8*'?q}kHɔyhPŷ9RTD; HbKs_kmK2,ޣT,,3s~Y*5Rﶢ _ǻ*%:u}Hie]>40XGqE[K}jONsŎ|eZKw:k4}`̨pe>SǸBPR}Vűp\1K:jHU,cDg_T揊d ԙOYšk,cFϏNE8$"fSE?Rͩy\[3׌1oAXͺg4 SjA* 7opṭw i ܬUP,}+߹BN/c;W;-ܢ*l`,Ҽ%rsVf}z@!Nʖ2[ę# a߼.D5VSol8ý Sݓd$Pk䝵wJĈ_wYnhv},«Lo%snd?[y.k[zە吥͈QߋC]—24opyn1&&_aʝr\&Q&`mtsi'sw૽O0WeNf\Qe:%'Lsִ6"{;[۪|7ol@vXԳk4ؕOҒ" z R6;<)1<ҀGt1+= 2E.G2lVko7'5ےJoz*E@bj=^t򆵗@hȧbQ`}Q7NҢYs18A~CI^ݓ5H-Mٵ- sG)dv@4.Com| TGG)og1FJY#li,=/_1O3;lʹM#!@,x&'2 2>U86PQeϛhү(y$"YUSEʽ!nqwݤs@oT ( %I߫j^ϤFXMvjެuFvzWj13͢gRO)rAξvEo,ǐ v>[0 ]57.ʊ"n7N*E.٨ec=2N-2 t5Zu~0iFI~e}A6I8o Ԃn#t#C 0ک`.>H(L_E| Nƌ}khgii'vOY蟎%l|V6kƟ0crYXlhM'wLo3ɪ (mXDeTGj=Bgt&Ƀ0sNק}l"j%5!9ou"`B2Zàh͒-TVh o=02ΟE>k#yߕ;r;Xb<~=Ɍz[fhg8VN:Bڟ@2R׬kZҗGKOaJy~--z >`>PrMDibpհqõ=#; ^tEmOU~9}4rvC("mg+>?Wsg}dGlؗEy+\lox] @%wc敏1v"xxozpf~^DIX6My@XanN ,bC`CVZh{rHf+}G AHDsvWt$QKgߣG3cy0em+97 xc}[yl]?#KWkZBU˘cѬ'` 8/شiA68m>R2Xxlƞ41Q|*#c/  f#"R!Hu:e<?Ɲf QU(S\>?XlaMmsK+TjF*Bf8b>e| sz̛1>gT[? zF6U14@ʔ4N~=`JGm%A] Yi*E:k9mL 72d fEF0c#z.7*r [~+4AcwծLp"ͪYl?qF+=auQA {m?;:/6-9 ?2%@nt /9s|EJ>MnY= !7 ːgBlOrgS©X5|(X-4e1'ml{{Y"]ۆZ]WɇC*@V7%az) Cv(8F%V4R/*ct6FhT %ߞvpB x%KI 'GYjfFahaYwQ!?'cRS(\mw~7;-+nvh07+ؾ/i rݞr|Y6<4`SeT n QXZn&U.pJ'Y@m_@f+𚓀's[\Ek kҤ|L*8 #5eIɕd13$)TZ-bY$pQoڧO3XZXp^ 5eDف$7k,|<> {]h% du}t&ɉITu]tkЪN ,@PB'kHIBuU,q>B(|7sG.^,[f;-Q"7kv +I ]yq!\>!}x<b@7qtvQlpL%`o%WwD͹UMF| 3>"|PDvG+-r\̻PIi!V Z8_M 58t XXy~#sY1Ă` E,53p2_X퉶Њ-ⓑ_^|` MN vHz301cyT?F /B-suDʝ!ܝ1j#.rMZչSߧmř{a# B@.+ZM~69u 6D[pno# ;SG)-T)\Fdu&.a4F 1Ct%ݛ^b"@!R6*Az*%*I%BG O#(a%? PS T﹡N3]60R9+axj"Tמ|nn0k/F|.8*rF~qB;pB,yh**)QvX+8v=yo;c#K$=@ݗEZl$mFSM{=δXnv-5Qޏ"ɚ;&Lm~Qpx/6"$0;ach|ɹ`l{ (UY hE\U^wu5'&Kٮ6ヽxK qL 4Oe\| cZ|dPV?P?[]$z]2u4 \ShESnNM0u},?X_ E % ?i ̓& u%/5KĶς N(2V DR!Mٰ}5?FlH˺Xrtyxѽ/y&/`7Wa"? RØM G+%\=NH&._pɭ-NjKc;$ҎrCH^y+}4?iD?j76-B~C+ӳVQk̖ghRowhgejuL |zҏJW%YS5Faow廭!ob^_6F#tvԷjl3z?%Ч(_;ݕaH4@AM-ݡ YPN0K8{i%0t$#,Y>mdT2r<5z_Pn`SA,d fϺD^tQ(7uz>ϑvc M[uE#bҶ8dYy_ślk5)x{/K<՞Y&P֪[ 05^ >Ej/!ʲ+;b|\~]HYo"ٻ9|>h\Ǒw.#1 `Wsr_|kO +j -p6|Hhâ+)~)6;*7?PRnySd3WeO"U7OggE(=^WyD׉ ǜp9@p;RqeVY椋Mulj*CZYY[\YNrw ޘ/3ad_Q2P# }y$/"[duܑ#j c {Ҡ&9xkPoKu(O%?;fP6Pxg>+$St;<] nW7sr]Bh 1OaXS3 5χ*mm`|7z &M+̾4Zvʿi 9.#eIpQw W$D ֊ %ݖ9t2НJF\TAqhx[]kd* [$ ߛK5-ӽ|n~CPgfKP`jMT\0?lFkVN$]D.nVSvQ5\YI@>_B<#fnf%D=?&mQkuʪfm)$ۡ",lS"UQ`klV=3f%̛+-yHM:8~ܐY7៲nr >$ZqJYT,FcG2?vKN9 ǁZ@ެ^2SwZ4TLV F9:, N{|wZ]7z 7E9_ k}׉dBvzP @tEj3(BO &]~wt kwG&`EƵӌ6R5t?#"Azቼ<Maq6iҹB$}^qSՂ$w z?.u;gߦ6'WSr,25@@jRIJ !%ԧ0V>d6<J|8)@xZoжq)ۥ?' {{83eFK2*a[XJϚVnx)GTr155Y<>,% h^T/pRlC ΀Ne@]< E9ylOŢ_ pÎT~HFvo=,蛨{6ͽd[BSe:C>'kLĄXOVXͩ;iB S6-45 bU<}ỈMmŀG8eag/dre&@bͤWx]\<˨(fˁ^5dmFU,w}O ,=nߛ+V?z>Xw4Jƶ\R(~ƣYZNũMl;V@ay.RXרвF 8/LIUQ t B+=Y؃!ħzeW+UpC?ҳ#iU01ۦvZ ==p|-MЏ%vnM& zLtMo92tȵAu5ZvTؿÕᐻ0؛>Mr$.I;GLI>MœFR: u(P9{w ^&kȨH ?'\sLE25~3d9t(g0-0o/y'0ѡ,Ss]n 1e6Bt?5~|۴`wMIđ_>H~\Gz;S꺥FT#/!ĩ|[aGIRNNqrZj@(> \ao\D t毦?~ee-wf1f!O$ M<3 5veVY #Y+X^@.=Kbb_#TDR03lh  #v%_RI;2KՒp;Bף7`ў6.ՃZ3,:Zk.̸H/yq|O75!mƦB]DBl F-髨,nO/B 83 {us݄z6tKZ̕&>!^9.Bxus.~qbt28!?R5P YF634VB&2RZC;ιN1h$MIĿbΏ2V3s,"c1m$*9AP^iaq|ub~ݨmsY5FѼFg7Ӯ~(cfÏaD2ȇ4{0zJo{}W ˬ~΀ܞ%x=L2',4 "'(0νMtp. 5븂vG&xXl̤I0{t%Gɓ ڂXQZG\.f#Z=`DtBƎv`Rԟ%ygAuv3/}'>  @~R4_1%V+S%֫E̽+W`oc5/&vr9`X:{3P'>T϶ `cUp^qsIBiSI&ٜwVZGQ0r~Q)}AK!Ra e _ -ʭ2SK(rsh/R[%P0W1uer}]ݐ3 a!:?Q% MbhEľ;|*>C,s l)%ׯ6/io 6ssUBjI<k UxtƉ&w]Ws5<(t,s+b <Q/f `}d 2L$AOBTdӁ~ #:ƪ<ȨXiu'WlZEFA/]n/>RFD]xgy+mU*DZc gH|ˡMAݭṗ  <$>TwV_(zҕ]aL 1sBwLdCP8T7_Ym /aqfKړlprzYu/`ʣ+I &; ֧xX}UNe(NPl- [g cD,9HXP#InRIuHԑ< oO[`}aS4k'NAȮch~5(#~NO_xYCaq:nս Ņ0J&<%uiX#Qg諀`;q;.}lH&4 ՕF_SS>)8Zup`rTGhs){ALćvHa>` CmN ! ަ3FC-OITuSQHwØAE[Vgsn;J)0a=8H,%Cu4&YݼH0`t[r&ƤF)LXi b@D]ԉ(T;䜾j1Cj̢j@0a CÆM+t6d p}BSfa{Mڍ's(Z:fEYV$E 6Meo.X^۔k\cԀ]s?Lbk [?JqnDF%PM]}Vz۴,4a퇫J犹&Cse8")ɬ*g9mR+mKџ6;7_F V-n#Pr{/nRq"ğcY]]^ąrꪢZ:H\Jk9v5Dz"z= GW2jaK@\5{ LDvSZ []7}X9~94L BI#41v@ü},B-KZnjcwwBAJSK!٣5g.I$r_mQdePٳ^ ZRm22odQI~UDZ,8`f2򛕁X!!8#3?cDJ#Ă󙸙kkt7վOEV8;)>iMgCឡlإ{A}'d?*{j E4&^.0RϰlO#\K Dq{l߈]I4߯P҈ze{ǯ?a Yj;EO4F, SY-"跕wN.t?d8qDZ܅,]}P0\^C&(j)v'N :FzzEү!@ 7. kqL-ߺ>һſ6[ 5JFJS2nF̴nu?HOD y0zO"zF᪒$KX&P+I}+YQDCI *;5#f!hv6{)Ht-`8RL-B36,Gesۗ%? z>>b r\י,m`U&:I渼ȧ) p5]yczKryA y:hY:̙O25cpBe| .'q5`imHD{AgE^+HukE%S8RJ|Y_ R\'\үj}eęvI>m T><9pQZZ2R)gb>;A"0 82l# Z!pXʺt3o[0_HdWwOz?NNkfU/힃}bM&{vefЉ;Kq:AseHL m FզՌ@M%tքjg@QBQ zX['oM >yepoJvS"H}!*l+ΰU9KMej6[J`] 6>p?DvZ+^,2L2R{req**dH/᮹*(qy0i*IS4(-hHwNǥaȓuH@I=y`7v[]e?}VjpZHJ$7jg!%# 6喿PVu%aSI|do$ۈZ]3 rFg9RЁz:h3mrT) V7?E9 jN,k Τ̊`**L)S8>lgu؉F]Sj]ިEJ }GerINBB?B-kS0zjy36TcX]}yD_k PН\vN$eoG RP`& ` 52N/C~#ODHHe&,8aóbrd2X3)ihJ2As;v/y;D/0k Mwҁitm'd7]|lnE /DbDWl'fHW26{ItNtFS<,8/pG"A0 _tTz;eބАG!MMwuw|AKted͘c.}[xApd`@+ɲ́ w@`JTz!ݫlqh )݀(WBfˏnE*(}\1spDޝ7G'ZJEL;^ۥ7Z=F&%}T"xᴨ-!N;eⶪ,{=P<|?>Ͻtk,T3Xv-= $GbT||qo?5YWa19I[ b91K[F͝C>Bc%;v`6W$514!F?,qt5GI;pOůib$vVK;p/&$9 {_M1nPd#m9ANwnֻ4{_ǝ8%%B@~ѴSܧ \ 5[A{C=J8-JȍMmkWZhӋ@&ӝ02ᛷC#>0~UnP W2C5C kh~qIkp/i9 B¨,Y셖OS+ b*@^@ÀHj...(oiah,^yV.'IOehŁi;Nt@#4!kVstcH%U5W_ Z@YNZVKO L:=V]I?DG4AO1JƊD\)${ك,xOM*ґ9ssg|@ *RmlO7u"/_~ +8Г.=NoY*r-m!yei/[}+Z،/q >̘⼄XUrYueN"xs֌z6tk6(MNY6vc#Q5ţ:mVWnrXYX|JS0ǟ B8C>㝷0|k-26xP;Fp-`,ݓ\| >I [b& 6O|5 qU¡;S1&SzD\1$2,MǗb<p;GNz#n(V8+'utIuʅxqLC5p-?[݅ʁkM"c#pe$f2%7YIL'YO,Iw7yIT1PS3s?U;%e :ο!w1ra:' 0RbѓK_rk ZOuò F"f pGS„~ P'qF&!EB|rK:G!(~dj`^TIU3;43>o{ّiZяfDr|Y4!-u^5 (4܃cb/Uɣ^I[L5[M3{\8qۂ̤W1Z.6ɴgdaPwTȀVj?sh.0s犍v9 Y>|rRb^ֹi˩f}3 ad.(K=`'ղ򾿸Ç/pbǽ ^d8z6`\"?NA"V[.%1MAc}NVW\p7vʂ_Eq)pU_a (?yWdjrM]Wd)ȿd*)W:I9R9mtIJJ~;)CL>PޮZ.S aU4 raq\s?HK ˜o @h֔?(¾V-QDĕp(2ۭ9J!F!0fj | Ƀ{o|tl -c]. ̳j'R`_a]?kҩ&Ѡp j*ʯc2dRA1q.3Ɵ(b6T<.7*Z>V 1 [$Rh nx"OG7th5=V+j\|_cখv#~ {JȝSNS4ɟO"MɅm`dNaM>LKi'θxv_(ыKvDyF`E*[2%ߞ f[?wYZr^3^ߺп 0| w?dWO(trU{,V%ƯC$O0`P敛R(mF/L P@(&A+^ATݖM0#'dQ9B9v=TL+9Li&:m_="{ZtGdfoHRKh|EH]? m NT\drBL7h _u}$p&fT$SkD?rMy+FƗ4OC&qXEj"Dc WR*WQot<7zV b$#Dlp|r<%,ye,$v|TQ!+댹+>ۻZDTVcCg`y\J`9K.Y/,J׆Y763j;)ޟW K8Y,Ԇ3[|4?'`3}e?6 SVs- hB霏:WzRPH/ee.u4- YBd8C Wr]!L MkB4@ѿ$oȴy 9a{?P!7O҈v;a-^s!~mY |/$n) RAby2zNR-^z}#JjnT@DmbfM5^{̖GwKWq)9p8M*YNjMB,"nd#3޸hE2cq}SA)& 3au؏82U tD狴 7+4# PKĺDg;HJD T ˼bGuXlȫG64snO[M}p. ,|`FaKYѦ%mg\ ́k},g*o{CxX81i|A(Of)\6Zt+%JOȞ21+3)|LW:&Iyёc D&iӘ<1]ལZ#;ԩSOA ![]? 0Gd>")pDwIᱻywD`>覼G5;[3\6-18D {Į`РJfF{؊\/@>M$F`73?1^uyz?%%iOԌߣ?v:KډYW~+NǃA˸Up>É#W."ORdbav|ilTI|3lؠdp2[{ 坠كy\E'$3|5T,,3aYym:/%|t58>1m=l[d>c. ؞vT;8'k8F\^pxn!#nq* cdO+1P$U%-$ gLDȦcStpEoufIi/5~#DMb~,Ӳ~/妕 {1L7j5] -%r8M;"*F5X0P}VER%86(l(aPƭl.(!O[#2_q;JʩaQb벆VtqeQqEo$:•w[R XR\fv`jPnb-'aF[eM0'М𮿉nD](`+챝E_x]\`B"oi?[w[̗g@}P&t29Ew^㥪xY?L/a#E2Ol:{U_FBbw]l`Yiی?%X|y&;)V0IT` hjօ /iAM33LV 62ڪ 0.dH; oȜVpX4U6)H5oD#V1p[뷏PKZl#}A,va]Y28G%tw.y[1wM167hg޿'JK^GiOcdbtOe-J&O/ CKXx软O܄4Ѡ1xv$ wz@ "e3n/$.>U?c4*VqMUxhsi&CtpƩ$\x7;}o{GgŰE$)w .ʃGLgKt2ƒ[G񍓌E} WQ8)›S${:ضHː^#vOQWY/ <Qս/y9V0I]RDuCKBfj)DpF4ۘ=BXI sQW/`9,c-j-@0v#dW^MkvLsX6䎱%p' %73O@ 1I#&}lސ-qhgBQE{u$Dָq8[aRHm\w<ܟ ͖LqG:a~} fZ~f-E X|~Yv}3SK CvV>^;*LԄeX . ;n۽=Pw{jԼU|x AQq#z,n>V-~P->M۠Q=<ؐo9|δF@NF`gդ(.?K?0@ܶ,Ӑq;b[.}G.@߹B>ݘpQQL- ^Qfjh9þ9jrsZ\)"J~I`ۑU=fn ՉW*Ayt_ęr[p.46bcg-DJ%[EZN5(M-qx*ۑo;KUە8U5@dSOCguU,`ӇԞchr&xկS)a ڰ?~{7YpnI{!,yY}{[1g ٘zHfu'p=MuN6$%:O,! y@5N~Nmk~3 Jzhc:I_HXjx|! /}2v5LfěWwj6)wT4t9D?#Uxu6Gf}l0k(3ׯ ?qP-΃ttR+Jv~˙׎m} e৖i:<ضe+k`@ԕ6A3 8T~'U=߷fZv8g xNNEʣBgy ҸU`A! bJ0o-:v(c^ph܅=W+Be VÛZK4̓coMq|wn;VD\ϔ IYQbVE=HE}. |8$yqy9g B~xYCc<Sʼn>/lkD9ϫ5]6iv5^OrlrFFtyIgitQOဒ W>hEa|lE-ҧ]>`4!q zeVvؽ;@#挞rw6oBW@c 5ma7[!~]5K͇Z Fz۾`2H5tumؽR3|Y9Z8m38z}i%ڬ4Tם7S&]PpCkI5r[QzV˜݂)5CN4.RZtj4AV;US4s u`??8Pl6{!CȒ!pN0GmWhx3w%Vjп>K/T/J–XTL xx<ѺCN(}κ<0{]"aNhE.Ap\>+"'}dP(3 Q &bC&͕UQ@cY,"E*m)wNs!"𿹧6CrjOӉ] 1ԗ1j4`k8Z? qW.c9Ox\=^x,8ׄFhmMp(=Ԕ]sR3AwB(D7R^D.) '݄hPKFwx 7 Zk @1sSW\RS`&ꘇ~Xpߙ"+P9AFX.\DmijEMnU m 98-o316C6l s^fwҐ0<BfbMɎ865%C?Q&(-<ڇ})хʕqpo`l`]lURރ/4)oBWd0ɧ@#^aK7z繫ʂ=wC͛JaB's8RE/&k~ m/T mI-.SE,^%CZz”$ӅCiSتߏa/oNsnR7'vs&P`h1)j }exiZNi?iJW/,"4y3SWvQ<ޑW^k0pO(Mz0Hvsro,e&,$\ӷ3{%r=H2fu֛Ú]suI~- rpY)hj=p@30 B>h"(R[:hjۏ뒃bUY\nȵ>k߿se6rs- = ?Dԁ7yu3C dQ:13.0#7GGm_m:)> g5cEsY;Y%9轧&L>sOyhkiUK}ݿ'2}oKPq|4Sayj F;=` ,}R혥N V4QKBEZ5 ﾿bТO9;TvXPy2Wθ~nx_uۍiփnǛBVhL /}g?NJ :*'\ȬV?ɞwZ>Ms]x_^p?HV9"G>\j@V*= 74<\{^p J1u?0H '};\A>ϔI=gҖFiJU4h'_it1w\=VXO7oy$Y-j^}$s :N`tB=>Dl&0qlA+ %Q[5ϗü-PnLx|sM&nJ=|[C؏W;%66}xץlO'EOt?AAv*gO@Xu\(ckAufgN&^i{=p1K$03LwBsg,իn>D2 t$rqL=a?fuWD lLT@v,bصi`W %?ũ%I[Ad琉EdpXU)K_ݶ1ag* rwRja`d>1KoX 'q0`%? 0-^M;>MoF ޚ 6 !ℇڸ ]M9 04{!VRͨl@3~}I'LhĵO$۲Z&LL@~gy/t5?' Z"Y^;ѐ P!P̸->q:anMr[Z9r\Px]ЈYB0T{8=>367 z6WÎUĆOߤ|IYRI]zFsN,G;E3M'Wn?. lFZ I3UJ3eXhn3 QWtNFus0~iDb@\Y[`I 7jXNlItAqٞaxBDz)) ]jz q 6}-.Kň5$:s`7Ϟȶe!Xs^p=ؠph 沂caq+`D7Z{j*ea/E%ōY2\$Cc[*d=:ȭ(Dҍr770+!Lp$/Xo=m|&\鉩u'|% 2nAET6u$9˞_9iBG^{'Ml!H|)&$됁tOo#^o@eFqgxT6֪$$[+%:|#ch Aw>-_u>,Ⱅy[]5"qys6.p4RI&Li037?},5DR4\~[8Q{j.SF[7 )Tɖ޼B܁\3$Ba.es #OhBzfPD䳀:N6O˛sK)([Zk)d<ܷq{AlpdΖB+fߵ;~$(Z0-1m9FT8?nURAq|@+,~Op.bи)6 G}"~<*͜4%mhKKq^¸rÖ#*ʍY% { lMfEfΜiRT-hW'JEYmyg&ZU~t{D 2M^0^e) |>S p S>(Z"9$MΖ Alҡ˩\]̜G0".gZ\ ?ea'Em|g7.ܱ<+uat9 O j×IFkW䦧MnhRa=X\ίP+ ]+z4.3ynrU%\dT%萆=ND [kZ) 2+ᘪV=ZCrbtM)Ƴ "YVl44p 'O!: j$ Yogıw.y cu7{\Ы hI2wR7s( #rKf"2B*vKCg~mcd7Q ֙-Mv٩p}+KnC|,!,Pݵ+ŧ]My5{ŧV&y@4=ZSi'XչeoV&5?U ?ӓYzPq7ﻠi ᕯgkD7u bEkWl1 ]T_=]I%P *ll,|E*eF\]?p/Sև|js މpl GƩ-VKua2GFYG7zr"~ iwfwi.< le$>5tOr,̟wxk(I;,ćn4`s@' 74^y52Ȉ)$ 4{z 0< Յ([2% lz ٞ:zh0-|fd8^&-kV[eÒ+Y`UkM|5zqkCS'U&w7ޒP){Bˁي+q#5eJ#0jF3*>FwWfIWhO@&ZLD&H_BP~h  ](X$3_ݬZ"6 nw SU G -doYȉv @Vb]3K=V_B&R YR41dhvtCMT&7ɞ 9%NmLաmh0e BڪYhd{ƶ 3ΈL(.G x.zo|^D"dfLRJgz%Ƀ FtQ7[rgKq9/ 歓%;R .BL8(́b⣸'L-377d*.!Oᒀ7CɕZ v宙^/OѵCHϷl9^$v`Nhq!W.kshf(m24hAgJ3QʎHfqaUHGҵpQ,t'o<в:q?aeA[X k"Fȫm/َKD#GjM|9ח  [y]3k{ ~B(D=dVہI)JI?/(+0n)8FH~S_/ѵm{n Ό =@P{.V9 i m 2s\oqu8g1BYW6tAM|a^Y0&[nGďkiL-hNǜ:3M1Q7^g0{0%͏LH*BgSI?6T"lsկf4D~<< $'`kG_Q~ tRFR{Ż Hƿsz "-X@ wh.wB-kp5O_52;soWۺa',gD@k[ F'.e> fkP@fp5> Jm4K@~NC2F n"s˱Dk'()5:<)'6b)Jk`#mIRTTuC2&kEg VJ;w,Ɗ+,2PB.:W+`()'zoF !"Y~Dx):IMj%͏bOY@]NxWև<05*8juͻm0'䙈LqnlBC.uK\/ViHozgKǑ?;[xP ID B@(_)1Tضj|@ut V[5v}*Yz)Xouɒh-gKyOf (?I]N]< P˩},}&{??HtCzz蓳!ɝ48XɃd[f:ǖ6rnuс'EOou_ϧ`u~O]щ.Es֜ot_Tڦ* C5HǐXdS~7Emnp&B@b)}5~]C~8R<3g/X9"I0yڋGp+hgSddD>}Lx |ɿ# r)Q~J,TX2$v:AzN:sa 7XW#Tl+` /DL8Y[8Y\gn_7HŠMϣm(pԚ[5T*GXPoڈJѱ H wc98(ХπIB-z5G`dJ*ޟϤldNzK}7^uj񦈡bC2k@ VvgbZ'`*tک4 ,ֻru(Fsuf~tL10p;Snb*NJSb;Dh.g>AW[ΖK8#!lMR4&>*{gB.2?16vQÕ۝IY\n#ܯj36I>8@oք(sQh;㍁{c4P[]C7mvt8mH6Sݮ0Q8AunNDK+@ ޓTquwh OLE夨:0$<FCR4$T-|ϋ Gٛs=q!Xȁ/:E=%.:bcH `h;g< MC@nJLcWWy9(,1a#[n*9Ԧ@+[ˢ*`k1ƒ,Y8YojBpDp07=r)DMuy<[v99&>B]Q;k?9$kZp ցY@8և_@."H^\,VoTx:$@]A@$V< ǂOh佗z9*qHͯvNHqM+C'2A5ԀmrB.^{ qݮ o9M= HVh^N9UcYh >ժa|?5bY#0bOzb!ϯ~O8v@z {~XAD~?i.G~?3 GcsE==W*ߋo,68|6U>r Rcq:a༐+p"W sl(.|[B@UG¢#7N|d~sy&{Pѳ s]pn~vvY|~vi D~r{ LHp )rOע[,IyiH|LPN)T=?Kڈꗝ|I{C%a1b]Gfq0=0k)(񳔏(+*Cpj)TwqПkJFQe1$ߚGiʠDH/b xRxH tvkva]Q& ;YF"֟j-=w&A.ɳ#vN I\#އҩ"եS|ڞ/-kqiIKڝEc;$T'ǪmoCy澴ߪ}~O DehjGjyq A,Sa1@,zr^TJJDGy2ܖ˴䑐Iz'"ZN~Vf ƅ!$|+,ӳ15vU+bK(2ԗ鋜ɚʘr`>NoP~PT a8:J G2vlv_-pď5NZŵ/?=gE޾[ `'kPE>(Y3MI>7Tai*c" RT+~a [BUHuN$7sݝ]/neY~mA7/6GxT}鲐H>9pSAj4^YhePXm^q:|̋]ff:=99>я4fm?E\]Zi.FrnFk?E S)Db8r@xg6,y=xTEP{Obcsa5MQE7"Qq4j$0gߤМ?BaQP#~;.:INm&(orz[rO֊txnv 9`zqv3DbWQY+. @V9[忨̇tY--e=;)}O E23OJ636F5Ll̋V3b zBB@rŘi{gՁ5Nl_ P&d S}m* $w,JY0@(&W|k 46cͯjpb ֘o]N#5QyI>ZT/u`j#5J\`.?Z)cOe6~0*Ǫ3`Z5ro{/&oG[›;.u^"0*&$jT:*yVqSΞl EuU^6rc]<Y"~"b6ڂ8!>A6>nk\BIrmQBreOc=FJ;ϧi^"8GAtHlؒݶPʣ)^UTOs66A<+x)܀?w78Py&R))ynVQc-R1pƅ)T&q0g3``+_x\uIEp0t^ItT0 G*ؽ<#јh}< OݤI}+}n_⒈-3D& gaf;[d\xby5q{8p3eEXh[/fnڬ3 V&_kvB5CC=Pkk!]P;[<`܀RsٜD`褅FbCCrW#6^t٪͈4t93a r3ri(xKϣY6:&7|4;dKn qёEC׽?e| Mtʗ%K?ֹ3d<10JሚMQi4$Pn#֠$)9-moR@ Ѫ|"S]˭8el)pi% NMyXmW @# J5XSyQoUuԤB%CFӦmW(= Rse-B"$ux72kyp1]uQQ+J R0Vg,lɻ :F>jۮT/ TX& ?wMju6qȘQz:<.B(GKL=ꕙgMٝB#*Q-NĞ?u:9P" os5Xiذ=b+D٬Hݎ,=huhH$f]4uɋ N#I{v_nyMGx'K : C8#=F޽$^wS°'vJ et?]Lp'R\I'G$6l`CvsYL!PKيLS$4ѽ,Ix},c~Wy{>,6TjF`6n*C׺S53^u ?^ ū 9w#y#6{i@mħݶn/NJ|Pcv͂[RkCW /-%k-W9+{e0M+~.x7~4(JR4-Ь QX_~C~Ή䵛LX-뻏9H f tW n*xҹ'_h%00!o{s4I&pU9=V7RDOVa83Z}wi9B(ov_kt6q] &'TQA0#%3M LXr*OFShѷބ٠OJ"ޑ ~r<ܾU`l*[, HS>īXdV4_ YVK~e^zyq\}C7>8zIIzL&OjAT Ed% J!uf9k^Uykˊgvp#7$mLRn城^RV)DKi0?w-5R&:~p21.H!Q E^`sq] 1~gʟJB4@nC4;Xw0,44eavZg2'F]X0 Ve@p.j?(_8a=L"̢و~LŻMKa6O{>iv1)V }lo( X/Ԣt??fByLsbK\Uܜ~8l׏thl%,W1aʗQůD-(eb&\33>I[g ۱P)?F*vn=D~a B`qQY7̔6΢* A,QH̴IJ&"c?ϓPK,L#qwdlue(;+ uֵT,o\e+ JlX'dmyR VkJUɰ(T~WO4%R!+K#Aa;:0u7KZLiϥL?)JA,tćI2 V~r) nQ[9;)(eQ?]ƌD +7] j0z,lZI"y1b(dπh! [X RRSH ! l1`"}KLy^8y(|la"Ta 0Yu+ww=Z{ ^#1p[(:Xe@Q 2ڹA@!9Xu .3_*0%Sgxg=m.6jnSFչO//\e6.wzj0d2LM{ƚ}0!9hZod??,IkC 6Gk t]6x}twk[ R4j`]㩔 1E;yҝ@-83ΣoiPg|v:*[vg*6hh[8: y$_O~p]naCZGnT_ %DK%66+3f씀bDjf|[QPΙje {#7ʅnME։ zwç a'VT(k(v~{]8J5KbjD6y=\r8Uj(MaxFXX"xng;'>T0Vh) v?^YOrarrI,zhMwbTC~c4' TZULr"#ϩ"j+}OYP-u@8P*ߞbiuTќV L,^i8+-z&;ta#[+<  il)0j9GdAR>RWʂ^ וwe?}~rp.7xIʞ3\̵@q- Rgc_QoM.u|9Os]!S%:j`0 ׵BGT#ɿ#[ڝn>\:81Q@d99fUL5\1-@Ra0"M-4;gGdxnsjԨ?G, @)0Ξ?4qbW}_af "oSOvdA8!U(ݧMJ8l U۸>YBqn9eB;XG3*ѝ-oZ݊e3RFMB2p tƗP햦+4"#Bȯ"5`ph5a9m3Dv<1]N6XjXI"`nע7J\N^}9Cfԕ23ܟ7 Ogn򝙲__{&DOJ.M[ Vәdv00ȨiBuɜ)8nAOlm ,J,h@\-F9qoj{^`}EG/(rl<RB>T7"C\$= @nfX)f70u^Ә&$z 7WbzBkio*sN+ fr:Q߂=FpֵX3's VZS?Ҧ$D UKl)`ϳWwg:<N$-DP7`{͊S #M+Лm]x\cIi$/Q<87>F/vL |\Ϋiv\pa5O@MJ#UocWrM$foշixЮ3Bvqy3>LivYI.ZWi]ob PG70zVA{CWey7됪:1~4-H2Ʀ 1R4pA@?t͝٬lԮͼ5ʭ!l2뚯*c+,;-vtII;˼Hdkr u[RFgƳ$t RL`Jk.`'E5념|_QD.Sܾa  eq0x5Go=z@c,J`zUL.ilB 꼔 y)=#/l NgK15 [Og{2ItMM%S&~'kH 9;CoB muNݼ@_uHDsZ;kx[)Ś=0GX #+8X- BvwaJ'+ &O+36{5'S X(Rڌ WXI:#^IW&2b39Y^dgxJE0W.cD%3Q%PoKˡuSg+ݑ~:Z_E\QY):@}52YZQݒS=wo&lw$bgŁX @P7{2D/4}h wG~k~(.<-Z J?s r}(p9xtK^/=LJmĶ7 Tt;u( 򘷓$V.D*bW$1RGzֱ6~t/rv0[Qa c%RcaR#f⭜WCK3WB Bu:Soae\@oCTJ?8nJ5tǼAr/_sIńh#d1]z(85DX?$-2U e"}` 9E&8$ W" ǣ0/ex|Vl1Ս$)Z?\mo.leG,f(cn:bfV=C2Jit&0}\1Z[WtFdS?@&Z{G;"N0ȩ BPk2YʴN0ckX(@@Qt#)ud<ٱˏ'Œk4TM{n(L%V!q>M]-t)>c)5a-"̠I\ý_kVU+F]` e F!4zT,&F[k%q* F}k<6x/ّV_8!/9O _?tr;np^V[c1K;Cc,6u7Wjr4U $>=v@L:KڎxsK(RO: dp/ m^uGC \( ŁwE' TY/O91Hqc&s֥!W=w`1FZ'.Fr-ny#B㑵qMu+BHG-QjFƘ,-(mUv~Uf.hm?-N&-=Z="#5娍RpD,OzȌ'6k8T[q-'_q>,xW*ުBvVT@WBtQ/6 pxc>MVv3dqI)ՀANJ8>%xI;J4 ya6!Y9 RtH8T8{WGs6 vZb`AՐ%01!Gط 0M,u? ψ ,g2f#(f"<kH w?.#njb{])O2/s>;B:Q|pˠ=08z$[hP:t6՗[:R a0ZT!@ h!<6ߋi4rG PyN3c2r!Ww|'޾ٺxC'0uO7` kUۛ'1~*(Ve!8""QkcmtZ>ƗӅ,fJ*~4X {3D-7Wg_X D h;$VyS`}ڶ5Cſ2X [}ԼFY%*zYY~$@Ԟѕxhe\pЊkXh&7۫gv3c!f.` )P²u?g-Խ#%]'t)j:B e' /k(3nmC(#Lb#2u5d7#YZ&4|"3 :FBÃctz[dNЎsspb&@coͿlSJ˪*x~#Øgyf^5 aJv6وLin"ɏ򫥶%By3N!ٓz%KY%v Z=mi+yg7bNcO4Xxs鶜VFTUB|kd>sH9`x`%L_ÕȌgh2C+k1`8y'}ZD" ~rI8?'`, B S#DpRŘ? 7gӯ/erx7>IqV< e AOu쫩I~vU6zr|")WNmg<:'A,3qFQ /bl /+DzY tYɬdP2DEsR {?ƵjME]Hyѯ5[ ݃t]97R=>_@"f71cկWr(k$`Ji),ߵ]E-f{SʤwI2o46~ʥ Gx8ؔa[xS.meonT%(SUuX8`HIe1\Xt6H_ArqM`)We*"%a3ZwWbi$i'T2[E*}ͪb,E (IPp;=*M!I`ՠ;W݇J F tk;U5PAa bT_\ Ӂ8_? k/W]V/G_|k!OŀxCuz{ _m7S[[potaL]˽7I`'wF;Ǜpmzd nm(C&'o31ʈK_F*W‹o9mү  t'sdaԕ8% NZ |MAwYxS+gdkb$e}'A֕1 ЙHkeVD뜣o˴+*5.Py2KleI4\$#OO =p$0f`G6zF@1ìDCL%ATÝ@dhAݾfߚx>p,sJh `v؝# a0=AX_:@{3L@iw} 9ZwPs[[Ү٦dJ*EКB,"qxϙ5nX Y;K MfPZ䓀Au+4|4^sӥ40?bRJVȴj!g#g 9焘QTJ9*XbCARK `g#Jcj_BwYљ`L >E;HFjX S⁋yq7Np=z9s3V /w,[.&b0n 5|~s237 q^uzhBJbUg|t[0FI%t]zCOQ$t-Fl8g./<ޞx~mk̉^B+i9jHEz.ڮ}uF^7t>_]R ӛl>J!%|r׻4#r~=FWִz5\ţy<M/=,u:Z70Α`}jy݈=#d(0u=VcrKs+ytAIm2K>DZf3U|>ӏ6yn gUo6 ƾrȣ,b= ~>ONǎUm%Þ>1f٬O' N-Z1(!jSmNR9 t%ˆӪDॐn k|僙^o6/y'_ Z;2C"BUras3E55&Kg4Sb{5Q.LF5yX Y4 ǭ<=̔zqA<!>(11gB?j0?f~D o6L빆p2Nb 33d<ڟ#Jeh+ƞ!:CĆc@VSU툆Wt,xs"e\QbD$m u)p*Ha~p xa7Ug18G}y[ FϭZ)(h7Qtk+Ot8 |@.1SՆ3)c8iӎո|F)S2tۈgnmswP?k3&xdH"j8߹,7 j{~EADŽk{ш[}۷c$ ] ` mn?}`g" V49 Ts8L 0~l[5@󀕊d-kC; cO-z_Injz 20 ?Om4ܘM9WC׾EjWUj2h uRȺ>>iT媲чZM:37shf-L҆e  ݟlwŇf {ᐘ_apz ?'-9H<kq$LswҖDNf =Ĺ1ptTTV vi~+,llfR6*G8*2؝JW ڙ'@Ќm+v2V68_ē_!톍We=P_LU;] ߻x^Bx!7yI;Kw9ySOIfaJl}kϜ*FF6 Sʲ?A40dA,IBr@w-<Ł}174 :SFJ 4Ь+_Z}sX/87L)1:3}p*}LLֆϷ^c% =`{v 򳹧s;p΁tH f>?$KD$HĔ^:'<8d.NL]Uڮћ J=6n_@kq/H;7| >F=i`O8d)7.b$(]wˣ pT9Y~+ QGe֏s=444R\o5yubgоBVEq4zZҦwn R޲\/{ZKG_ I ^weK~}ƾS!bJB?dT%5!@?NŬZKMx6"d1O5~E,jqosB쁼۰mTr%,, Uڤ/hۚJsIn8 sL$9T]qBwBx%S!C|U eu&`'if ;wj$f&ϸ Z j$8RDs 8 -QPƑ6g6i˺QX{(Ëf״[o5^/iS6zoHçh 563v ઠW>?jXv(LJzJMyU!q_hVw?0aL4;$V1flz:]5-my"op^/q4Dօ-g,8 Sq23 ^;a$%e#MjRmnmYKIN']jؿvi τ7(#dqiĝ-^v-,g/Zfv@|U.a۵^sS:hOj,Qg&lk.\uIڂ}7a,T?b _N؃9wƯP'; H=VW %,B"v;7J[RgKKF4CO=ҰĔ59:&B/}O2<=V eҮ\R3W1izZ+%e P˃'Rl1&GBsMeM.AK"yX rwip>MN YzR4:Hm#T1S6;k93U}J+KW4"o jcrZIvaPZ`Wg$"8Jnl/VBpFcԟ ;jomHnbk:DO͛xE3 -tFϽ ng0/&:(IB$YF(g-g2y7['aFil6Z%in(XO) c?!n-]{j[ MZNqs.LcL\)|: 1ڵP5s(H y(e\T8Lx 2`10N*'WS_T= \ Vsf\rwudZ@8I֬3()J(Rà HK*/Fm-SY؈aUOyj"2$GyXq@&ЅdFWZc B~HA7g%}fWjw&|rӨ/U =:F]PU5La]KHV*,ʛm8zk$%v'esUPw`Θf`2v30QnRlE(>΢ځvNoU7(\Ւ,>s8 Q#rxM!\DSWuC]/0B\|ǠnكEM$^2E$=Ȅ/jāE"n{p`y5*Sh;/ r/0E׶$M;stb60)KlxM=na垥x1%#êz\ԷL/!.VSu-emIz(W2,wn)Dg*!/> D3G&%Z%]~ _"mBpe@ٝx\GBU{m>9vfwjOI;I̯iWX , Gn4/f7q)R2#`7T8aqw8$GWAs0Hs뒘g6{1% *[5һqa<@R152qUwHxn67)@ 5 j3C/Ew5Kdw4_ XN~/x&뢫~#a\%ElBl6C똘 WBcvSf(Ma{]q,I$,SwexQ*%?:٘KPc[ MR#7 l]_&WM{Kܰuj@HO+hKPW]Tə_kC]Yé*÷DKƸ4Ki@}0NC=̆n1.iDžeB2 JlW{B 4hZ /;qu.nHyw}H)?lif~:z\ *+uHN ԁ@2=SW8@o+u꬘a$L߾=4ƕCH#,L0TOr[g$`@0vK!cZ sːO4kɯWY~?7iFe8m3x,*W~ &FA}DR 5`xʦ1Z?߈UVj($]g7C ξXe 9KG#s$^s[j)EF?b='k^fLN 6sŞ./-ot]4 cLovj(c:hd_TL:Y#mƓt8cQ\ gw1Sbigb0.2$|.t 3[xy*2vm|A>i7 skJ<êuB 9v!͚OԼ$c{c[rUԵl7M Pvi?& qmIOC|(Bq,[h6 (Xx X?)V%]:Z7@U([ӈ=l{gUtX$@:QjjZ^+wՑ굘_ix81IŦ.g1-Ø318+R7Z䋁1K5 ,R I9͈Q@l~qNHեqŸ I {1kTiC@{wB>BپF _Ky>^4L' Y3؈ @ DdepJv@VuNp2VxҒK~<~„ F8zםvq:B`T7yrX eۼ31t&ʝdezfYY?y|US->%`ta@6F0V5վnQOnPh "$*֎1_c?Y|D(yk^xM 9 C٤HaEtؐ]-[jU¤ ~ R Wc1_jۧ@IsixW. 4֓` CCt1-:A1lC&+\l5N?ӝ P{Ueʏ>Tyϵ`$뗋e:|?(@uڏCt4{g.^2~i9Tsm>ˣU:]"?}`?'s-~ ohWG{s_2UI5?NjCCއ3NJGm.eh* ӋQjtt_pO=1T p܊P'!ҰrEGƓCbӶzW4<GpUx y+@Qitl]դvB tDP^#:<,0savVg0U_`{]i K\`*"0{7疵g`{ryC>;"g%?v>'K>`R%/c-5n!T]ʪic[̬74E `Y?z^Z0U ;2+P>3.Kh@Tyxj4w!@|grYsk5xc>rq%r̈\u%R;}lRfc㎉mlUWDYڝBK\t]>/jG o<ʾ2{ (Ô/ݘ/@Ғt%T3!B=±>@RP& zLn}d8%%^CũFC .Y&Jd#x5OWՌ=uL/vb?c$mѓ.emvd2BHA#E ?_2WРDRCadD'fYlfu_гcrf[darc%{˜b_LȀhh3cPh|Yg!}ans4ivan3xc4iL'62U72XsTY칦;uOl*pD4'FєnrrA7LX4VV=/-ڊ<#^[;h.uy" K' ݔ(|e짩 x,LVFbkYC}˜1[.kUܮp񫎮4 ťdog_Gc2=EM_:̻vdΥ.@UتP{tj #;YX.._ߎd]>Fp٫4wf|d*'?!jC,uoUxZafx% ԣȥrPI3,%Gkh F2"Kd,~Jt-F Ld2 ;MN2EeVVqR܏6a10lh/j.UKs.p*AoڠQEq'($& D]DPuSbҸ!QF[n;:*qrTwU x2CN&V,ܪ!斓"uh++n=ZR!QXd-R`DY-4[I{%Y5852aǁb:yBRΞf)gYxP7j0SН μ4%dB*^0~FZڠŦ'򧇌 Ihe"poDAx=DrFXۨ;z T*d&b-hޟBb_'a*A ]/  :"RJul,2R#JxZ.)%6Eġi{IZN;@dֶ<a|%[iolƦǜ9$R 7WȜѯ^K?'6(%eK!Xf"*I5\Ifj[bNnɋ,h| * (9<(M E'_¤V/ʓ;?Co˖wJVOb=\5Ufx˭oCVnygrܸ7Vv^n@mگT5;&OU~4N8"+Xo+LA`S ~ #0.-Pk4;b4oE a(xO$GoYOy P}8Tw΂xs>4a *}0s`A "֧N. S2뜯ix'=mCm3+&xGf.65=I`xAGb駑pfHfoJC(:t^Ӟ,XLukWu7o@kD@DsN wd UȀf _0(]>x& յXKB!oKiբ݈YPs!g:B/=͡>cL8Fb# ++(װ(a?PZ7ka4Kigm. ;Lˏ ϧښPsr,}#.Bg\MT[m`oѪ1.C~D,T-4SƆTPHcL?:o}K㥜^#*xώQQ L߾=*)18!έt(0y+c#aec+&" jY2d~A6/%S54\dOM;P{.I$u9LB^z`ݶ&@%hdP5O@SN{IʆkZo!l8Hc&4X0i}ཟ2tXH=%Rm%9s'OyMt'*iތzq4E!5N4qI'\tJڗ\1Vg#&>=aw##0_Cjuq&elbz8_7#w>;>)?g FQkpq/][h[Z' z`-lxb󶯥r.m̞L@D-߮4.pWw .|ڨ_ֳϽ Rmp_{.U}3R %hrǪrpSi37~ Wc2<]r}[bimS%M^NM ZnU#з-vC* E+J;;E>Psv}஍-!qKOi8 ^q`$27.OHgc7=Y.)@ |kPT+IO0UԚ#)6jN:Ipl}=sq7jw9}~ 0e^z->٨CF; " *DR)GLgٛ5$7k{8k7Ҫ_B~4(n\󴛈7UJѻo-^dƩH{Ol,B{=3Afql_Wb~bΦ?|,{Xqu^vG1"EtJK-W[F$] 6&sMGUr6w.0 DViH!d|s m&׍S|~+:';F g݈ jNܘ{dgcNJK\"l a49<Bx>BX*"e࿁BiGocS@W &-7h^6Vs`H گ6OT<QCGZ|3睵H.ɸ4xa-sn;l]d-{?ZyΛFx'-dQQ]Qbt8ƄhK|Ӫl7Pt %S1qN\Obħ 8Mk^=W_ys* tY5Pϔ8-*XP aEo bsF_eL~&Utty-%x›u .9Q`DUK\;$#W;fAWs y=v*qU[ͫ~11ߴ*\%R8d-SsxTgT6u?*}]TJ x|;6']/n՘<-pë2AiL~wsI8Ga rjP2ox& v7;z۲q&@406慝O&PYaJsr[I"л{!f4e8GwLs{L!f7!+\%N#Ud$>󈕇i"8P`rmtʱAJwT /_$F͎{Z˛,iiimI".Gw;½2Y njl&٩yPzk,"Gʖ*ګcRr 6Y=|B3[oPxh=pWJYM|p/r1dŝkz,^I[=U >j"J,~2]'(I47b?ʽncڟ2 (8׵L@8Mד3+pB3wgNZ6'!Fc'=euQжkjqq/1播>R_v"{|E `[):k{|5.'㸑|d@wz\ff CIA"BX&IJvP8 b)vNZV_H6פauX? DaeI &4*\>XJ7^^JmM%JqgRU{0~s}#_(A (9Ɏ*-YߩUc9tRT1 [E[C X( HMFo #i.r26 Oyʌ9rD"[)HJ%j!_+Kd:a&D-}.p:ĪTL*ɃNNW "{ ?dlbEG$&K ~L!m^m͕{79,EϢ P`dX{b 62JCeMzsḦY\xm ̈ǓGyb)jbO`iD&.d-_Hc5mXZ u`?OǣEx8v{IwggKuLN!"fwWS7B_L*PsrI K! Lkʞ7NgQdYd/&r #6lj?B}bjcvZҺw^ 뤅+Ӏ30)(v6r"B1f:1-[jd򯮑RX@BMYB.ng,gMW fuKJm7'I?U,_4V3F]/]d/xx)zRMA>0\b*Xmi#t)߻hcUdgjTA7 ,x>QR:Sx9R0v\-+{x^fO2='\Iu;\"m I@EM=ХsqD5/E Ssvrd S!q6 bP'Vǵ0 պnoace̙Nvc6EAݦϔP:21gY2 KlmW:k/u)̎nXg+6FP6">9UV#{_.@MA~ wE%!ϒbņ {{{*CZk4 Z diťՋ"3]em[Z'ԓU 8-(h O49s"|鿙{G5.&yEyoWX11,L.)޴ əwڮ;| zog6mV]]Bc3`H NUc&hq0YUxyC=gbD>hFmn *W7kB0kH(:B/M^ M=.z9y^_͆ Һne2~84MX @unJ+jBYJvڇ=+mw2s66KWY@\YNtDowl^ =oӖj%Z-@;p\{9 Vxw F&x7]LJR@4Ubnl6m\eG+B5zOG/JBٟQA ,ϴP&앤kK3#G— ;um!gۗүSb2*N`}[zhE׳c7E24p @78`bk ]y'v]*:9]>u׊<WEB}'̜O9I5? Ya_2w[׽叟) (Z8K2DJC)te|m\ [ݸƘny2p uiI>x?9ZGWI %8̙^g=';ҡYoc@ZݘY'.%[ i""):[Db~ RRgI=jwy TH͑P4Amyqǥ d77awiݙlK?u\,5 UD}L)5v%Y8\6J[,@'wATcs|M)ezyG"A'?y]A"3~`usDG2Yl1PUM0ԶCտ-!gO`a IAE|Y G&y3 q%Tݪm{>@(ۺv* ۰|{5Yu3:LK,blnrs6U8X\SzhZmӹmfM<+dDiV.ZOѡ"M$ƿGL#1:;Zi/A/]ou%I`EYjpSf=Y3{Pi TEh/BQ$;>w$k LDæv2'Q{::/Y$mWĕ*a%f 빞aiȯ &Cj8_2ss) ^CـPoyRbV |2B( ~U8wbY]:̋, ?L:l0=<4}wSu ePP`b"o/)P!o pifͲ%'ms)QY#*~Ij Ac%hgfBљX~eهB +u T:(SBLI5xҗ{tKafFg F%psB:$= t2j$񇴎$U=6-CGL>8?з9_OwF7{Hk`@ Uʹj;U\REA#8"-z:ԑvgy#/"@*ZNyB4'Xo.7S مyW6o&#S83ho&^Yi7׵qO {p9hbv(_s >럲$ '|p2Ue8񧈪lhUXW2Q=-ME8^`J btOyveF qX8Q3JMgk2J˸lH^TYz e+=9u`TV:8zhE9֛{,m9=o[WA#PوZ'M7G73Рokxxo@/pB_5Dw kf")(8*W*0autB&I"_u^u@-q2Pg| /_}j6 KOuF! ]1b솉{Gyɒ.M_hnא0Y"˺Z+@?nD*|@oitP7;@Yۉ,:nSA0:*hZ1%o4iAJ3* g:]-:J!XPըc,~h0ϋms A0'LE 2kPe*fbYGHv9GeY2gטK2Z Mgam9ؘ_([`]@xiʦOĦ3]WZ!)Rˍ2u#Ncv.O> K9ZyZlK8ԺjSzGSHa_~oC 9R 飤~&<*q^2R fۋDceVZjUΛX1PX-{ݴPm .*\ fl F>tkθTϰg:q=` g)yp~2;GVI0?$\?#XrBw{a0Dhp&ʎ-4Q [', T&*#@.@ DhTGܘJ״JW!7DPs=M ?˶JɋH>%m׉ԞV{۬4%:"n~$&@]ͻ|>Ìm)|m0/޻dQTeW]S5(^@&#ʓWN7%xHJaۖu{ң>>=ށ R]U|4Պ-P ٕ0X {qFhv֖[+ʥDQXQJ~PF93+) J 7~c/%>|Eso>?DU;Fs=ӳj(܈BMu W8^`CgO| p'T ] ow[iRA(M̨y۽qUZ ,E @CET1!X 4"'V&{NI[Wr[t็dC|v :ꗵSgF^GcY}3ZPb=j"8jB_!ޱj,`#KX3Yg#$'y=3W'rb;xB--UR5s9rzY,|ڝɿv5^׋r%ǁMݤޗʁpZ"!xLܷ™_ om-i?ޛRt"qO>SZzGOTdl\܉珉JnPQ6ڶJ,ry[?u>;~4[w"kv]rCE{K!^WC 2շ5dUKB~MCs }H@)@f?6z8uluEDd81fgH* ԡh }PmY6Q YGs$Əm/U̦V6?g#WbY.)Bz@v4M&sP")2 WfOÓUV&i./K$Ο*vg!T>tRG>fz.'Χ{ce&%V3Fֵ}:o@Xaeyɚlu- k/ԓ9]lՅf\ly6Q,̲/oezA%" ͠1:&/ svڥ,=oxx+EGJք"@mί{^iDAtǹtGEǵ1bgNK.XA)O".VL/v*vi-Q19 %?3mOME_wA_syyOkG`EFkev; j) rŊWYerm $[FDq/75m[K#95.FF@\J9 \L K>)Uo&h7E.9K a8mS?#p<(VyTrGW8 FMwQ͝-خ4NUFD'uܵfDxԙ~ҟk8&+\&R3DGaȕw%|S~-,+6} ,3JÈc߬Xͮ'>LJs5_C3F,o=?v]Y2kAaz4DJ'cf^-iOCOc@yE{UcE)_h6⠜z!u>Y\#n1dau±KA% S^C{<96WRB7d=R_Xn(Dab۠]]>f%4ɏ'qABX{dִxTH#P9'ܿV*;تԂ=.K51 Ȇgbi0ŗJkئ۵y 5ԇ?tѓbT%(Ř;^Q;&xM6͓+jPu~]ljۨm6"]xq7GCEQ F]V() _n$`CrvC2m f=A85ݟ_ dž@eWh@-5.yp4Vqr@8M[% p$pL'&DIdX(A-2؈09B wWcqY=JplTW}xU "q^>G" Ƥ9`na&w]&oQN͂bl-MfQGqSKn9(qmC s^I{E&B}B!;@ <[M;k`UfהHHnQ/(ى5&/A pm o!G?M}P⩴<92<78h5 ^|1:l{z QMIZ 98v{=ѷ*!b@> ;ʞKunXC aK[5Xm~%S3&+To5ݠһ|(t|AZmJ)]H}8Px/ /Ua0lǧ5 h$>MM_̏/_iR=se{H$74vsl-msXӡ?~?'M@P1I4ZR6]׻!#U"B 5Ѷ SOւTKda-'ToBN mZTR@a7ո+L|xk/$S@qٚNzK.bctu=e$V4BN-Z~[_ 9û0–Ӯ~^\4ȾY玠Q[xͲe j2z "=6Fι\!s2TVb2HLtb#QTWUÝ8| fm㝤v::EdsR}Ѭ`]Y ))'0YD*WP籄.>^NDWP谒R"<# IJX3Ich& \1kdA!$̒.|dҕ u //yT O;B 3ZH{ԒrkDLP =hi-OAQb+&/ٛѸ(- ƍkizTLXvK [p$є=_>Tl f_4'dfDN{"jaBndg%o2q=B(d|{ (-emGA*yfp.ͻGww#):~C:# tgmE#}u6`C#xfz@6X3*y҉޽$QJЍ{;z gyȟ@kƮU&f_#O3ނE")Iy'IS:4]fbµyv}+ TNϹY7{8Q;tjlRPcMfɵ'Z$~x'EP{]APyqPT7 xu:rU@.S~SbxjBmM4^wR#!@)@@d{ov`67ʬK"0Ib>^^| [vwsX')e>#vy{mpm͠ƦeNq/")1g>f xZe3$b N|ͼfzH:<@!Z_!dPޮG4UV +gVqcl\ A"~VRwRa2͟偰~W t}7J4%Hm+JZX\H:P AH8dp"i,~~Hi?[Zуo4T7FAL5((t3[{@l $nD+| ,4szXMǷW,VNE)pmeK' +(5M81'箵!Ed%Z:u7tȌ8QaC5k# {bW>H;HY G)Aع )el`e*||Ǽ|O=QiI@K'&NғI'6CK>ŝťۭ6TePۆX=@l~?OݻM_3xe`#bQyQpz/ߕ/<&Pi~]T[@S cYb08Q@ZդKryj/5Q늳dmT kTpmYw<(١E[XuǰdF bOBz+ћa#[TO˅`\өHk>F2MF`~?tQ"/<,A~nLb `4k̰Ah%-?nofɼ]Q.ſgd-@@fYp { >-GTW1~@bilXm$V]1i0龿R!Iqj}>sG' AqK5Ĵ_7ToU;:S P ?ynw֠8CNU`BgۻB5V5%KȮʝxA<Ӧ·@..j _\Kz Fo5Pu HSBY-@G-(s>;)+cENUs# Gs]Ghe> ӣ(zEle di8LY3ˮ'tCpshPު ".-TXc\ F;NpOs(oqLPðB''vY?KPlt{jʑ -X۹\],x5`}PKzAp( @wj$kmº4%\Q m9{B@Z3cqE}6CܨW'14CqutkLOhaBPs9pzglh.Z: Ps'L?}N3inI=4ҫ}cT {v&5+0@'2ܡ ['q}Eo5 nq_LeqipF}$+kVɗP:/} ۊj v'DwJѳB^af:a R:/ZfDijؘ;PNU"6'_1|Z΁?Of8k=l^H%C#_ %cg~1?Ԛ Gh%7aGQgW!G%s)e g(4;Dz픢`_I *I&(S'+2Fz˓ g:_d(vY!RG` rlr g.+!,T# OS9*>JMԫԃ f^6R0nʚjQH, umW|_ea܋J ?E)(E%d\xB#׼ HWb6=mʪLD>CNsV?;7˭OG⿄w3()ĵsD ;א5&R]j0L|zc^'=_&A+ nK,7> 8M.V%DgCm8x`D~ Ah]umwLԧn5xg7.|ǃݫL}P/יs'zdQuB{GN~rUjF u%,̪Fk)@S3Pm1&u>T3 ,dׇ]›gM4#h>^DZ`@TtW79ק#:>o~_\dp9]LZ`4ݤv i$u^SxҺ7dɋlY!eJ6Q"&C$-qYgj%Lɷ me}ckQS_elr1,sxt[]WU|=MؾP30D!X󸍣FC`Ep뫔0rC2FSgHK l6%xp ly/YNuOv0C28s4'򏸀N2dެX<+f/ŋ j3k|%nWܦU-+WM,΀Ђ 7wM򭕋vӽQ:pͰjˌZ+g;HVǯ^Cf.|bgIXR:WbRi??¡gmr6)M?v+"Ɨ;4LK6jȉMf׿۲sCZFO !6Tg.n+CibÖ]&Wuq K} 1YMxKU"h$^iqR:%؈B<*4͝.?EPP=P.~˓t1`ѱ 9?5"<}s1eDH2,kRTp qnv۱bkVX;J,H6)8.{1[\z-` Ȧ](p)DA4׵.ǾL szJʫoJ A'D.7w݀i#lO` -ς0~pzQWJQ9.*"Z!/k-o%u8WuнϿA+OtWU|hQy|)袂`TSXFAvz ;b{1HuiEƾ""OÙO pc f۾֑HBX )"SA;N]ϝx,s+#c@RgL#TdLP-hg4T ~C]7U(? n8ԊRUU^P h^?uV$莏U';`vE$ ǣOQ{Xl*& ûfLb%~[u*p#pgT["RgPl`F9"f]";j:xZ a#aXDF!Yw0Y ;oV`ҶkM}g$U₀44_7g2nܺUxO%I"ATE][2]rW~K֜`Y**+r fkMpMOk~U&h46"NײA4)McZqfJ3.سOq[MZ*32~{w{_)V0qA5<rrNaɑ[NnBƩ(lOi;TR$C9%Z*udV&0muD&ڏVOwv15bEc0XtOGʄNqf$2X=8I6kǝ,%M&Ò8[oCRǿy0 H9Fw.RaOy,Cs˿.HOq[2I-z9tz5FXJ) ә%EjM1I[<>C9УD;?fVGlN|oz4nNw['Fpd`mgVGM{ w4-~fV>:% cNو HEb0MbDg٠ze;Bbx: J'7ѡ;.&v"ѥJxGi͆B xy;/v_⊿)p10X^_vf$P秕~dpJvw];=5ʛRܵ)DRتץu]+b5&-|ÊQƄ-cdM ֨ 'D:ʅLrpsWy'.yLrxg:gbnd$7x` LD)(gDP95>/L+ )uT#pE^FkJqH&jm-g9&r 66p_\nһټ5= cJ=L- B-ȺƝh9Uӫq;cb>tMLP޸N){B0{.;޺(0,_Ҧ/S/E_JoQ$b&I(CZW5iT uJ?ɉ7 #UW, )0Tl*A}ya!ԫ<;#)>NwއhOD`n%ճ.CQBq"j1Ge+y 껮2"E47"v%4:HV+_LG QW1-TSFqx ێ6*..mn8GiU;$X"=gD0#ճ0P̄c/]ο3B%r%l~F9|Yd"2Gκ*gp:q2eK"K6: vL]eSdy0xLxA)9igpibL ~`bKl[6?g$d۞Ɖ HM\ x'7|-rmvZS#0t1iJl"Xͻ c 6]zE砅d:J{} [H ~.R| Vq'bTs&"v!+=J-gCUʟÌ()ѨB&Є*. [v#:=Yui."X;:&s(GB14KD45Sx؃~ٕǫk|鵼:`BLW)oD7sCDҙq{z_sk8)uR,\CB/ >F7n| HK`Q.VĐ/O>~mG ΈzydNv40t<⿗Xn ]Ԁ:pLը6ʳvx!6>Mʡ`słAg/jw<87p쭒p* ׮}GmX1ksj.."n2HL({ ,çarA[wvA3Dr(p`RN!=(Rg]퀖hg4'PQp܋ Ljv:g9!yۗ< ]"~5AeGUMZv!vaRpNS|gdi)WvdQeٵ9r%&,鸚"k(zmq\&`pd>ӧw]_\gvv=af9}Ht>k L9umF7wH [Wn̖6N{J{~Th'ܦ'*2e|s1g=ڭGr?>4O~!v~$eTt'El=@+sS#uЦ;%!?Kdwi6zE x: I!{?O|(i#`60,l(WǶ[c-DU|:nlҹmwlЖtiFD'yGn'ɴ[# f@US|yEcV/pW#Մ7'x$N̂ނb E|(yCZh|Pk" HWkɖS^0]7Ɏ$ IWá6mӐJ:3Jy⭩fhumh᠀['<τh{5k'K5I 5{m j2HCJ%ǻeE>FD$l-!+_l_>i>tcX拙=!^EZ~6O nUܜ>Ę3fmvjΉ\,}.ڽƂIMUHq45+en4gP*}T*"WNhm)Yya? i yfC?6LGr&l!*I癹Ϋ;ɬځ2[/[3+}jS0 >9^P۩fvx/l,݀D"o 5!oUEd:nHR-NzjXGw]Yܯ'꼭 K&0-6=JBN.6:Bul?OxzI%*SD-kz8{%a]0C)ol1z y6.޸`)W'2!2N)CvH!چԄ*SA=Rqjl"_ JZiu@ٹUֈdϬ>gj{\^}U^^NZl;V5X 9i O7&'8RNq.N6 ~ro_dn*sG,9/*2)Mf١tInXs'7NSuƾ}p My*s')Pg à-ü"RAS)wR!3+|K&~3>8L#|aO^ 20 72ͱ?jϷq4`{Ξ0}'\ٺXADaı1 tyj"/SȀ R ?7hwfPmq_ Rԋ#OYДֆh )].hq ; myO&-쐖Bf {w[Ng}E@AJb@ֵG[k1 ??<܏n4 b죧~kk`h ydWlJ9\5t݉{ލpopZDeRd6DϦĔ0)`OVԎ uy 4xLiFkZ vNJ?"ҿ`45MR%+=|~GPu7(|W$3q~MyOثLad<iɦY9 fS)6#d!3ũOΠ[jȱU:+;>WoCpyz W:AƼ{chR,޹w#׻~;,~VeyYj`i'xIC v0l(dxSPNgKoX[џtZp ˡP\/F^:4́R a] OCCds fK:TcgM}>QݮqeySU_׈J m*:zuwত opSA_E E)w1K]Yo<>}Z@KIЃ )Aڔ-Dyn5Y:| ވ%!w V긇Jn-XqSzh1%zb;gEmA;ꃤE|YQq̹whR' >WO>smPvu+Ĵҵ FiUT >=!Tj+g8 0bB PxM`6Aq4j^*p2؝>FI%g=?׿U_ h9Gk ;P/A^sJ\ތ`2u(}6P ,Rþ5,/omX/o3oʚ(@;?_  m/k^"s~Ĩ~XW*9Acwjsu41 C@75&ccJ9/+j%k. :+gNz(n2 ?"I$)+9C*.("/|Ɣ*9oK|2^zi<EoJA7a{"<:J0YΨVP YnQ5&Dj9F==tge^Nmw1o(py:y~~򟕃xPI-ޑVhʺKCT64Eqmh}1/QR1qhD!ק|0PP"Y==NRRIֆ/s["v}.StǕ Z1&u8zMy5:(rT5zR,e#rMC.׷Vgp,>v \]]vY`S r3/\鱷N}o*- fQXHΆvqbJg;p5`RK #? )-RlU]J'O ;in;LUTBp 2sZE3ҍ:׈T.vs{ƈ5|HNW]A³[u,XAs8fRzR h4ICP$'dMkhR`tm56ۆ8bUwְ:wk&~OL""O[{5G?=e1UDž? ief`$d^^%^C`_(VtJ@OT= A_E1Or#[E g sh]IJ)z},42ӄqم AL*|%>6'Z_iɄͪ>~\f+1vIC7})%dӜ3 [{lykEf*fTQ F&EP(0:OC18ֳ9}-J}_}jX׎TbO8<N:m| eIXa.(!t-"Zq6 O֭i bن{gX NqnI^_*?IGg({/Ρ 6lCE#"/X>މ /f8[yNI7;(3D?Voo 4X6cOmբo5lr#.~E[3ظ$D^Aשx;[ҿ4փSF^gl/o<kƆz=[= E?8g#i,̾yXyWwcB>/pwuluHK2>bv_= YƿfQuS?vFĨ G E'v:;҆r.Į 0V=jydRM{V\nG#wvPH.4BtObOĻ]h+g',y2-#Kz?̭щq c֕<|K*'sdWvg@د`:봸%wF<塜̎> *f--|Q\ , lRoJ.UW4ф̕)՞NhDn 1{f4E`O;'Tv >kjn~LȟG1 LY +8q;~U*7#-ht_ͣ[_ ʖ*Wxq[mu=D3:|iIџa`56(3vҞ"dKEv}&JuڴEq?`HXp>RܱL &9BVJ۞H&X[A6LK)]%I5|-OSo ; wo/e@@N!`}@^:_OXjR"$ƲhPXRD i{7M }7 4H;Ǭ> QFVaMKeOU]Q RU&h7Uz1QR#ͿՖX{ DFCV`cLWB8~kV&PO/ǵ[v\wwb*|漡(2QNH}0iKj#NQ G}NX-nwQ 9e7֑c b~\-,/@)& .˖X>s @; V##cUvZ:hD~{/#+:9i/J͍CT(@VZIOɤ”BTk aGBJVL>6uTR=$&djFX伣ăҦCtcwѲ )NEa]ɜLp5J鐇煂͍fYL,xȖӺF fGxSxbE9A?pG6*= G7XcR¶Ϲn7v&>ysbf,Oۮy Y>ֆҩHdzɖSł΋Զr1crQtX..wrͶ+}wPez!8RQnx'KS{:<%m Hiؽrh[aaicWJ+Ŋ8K(P٘VBۢ66"OwPxSeP>b>)q?jU[0/vLwqHI1eA$c +ZN Osr=k(XE`Q3mhyGT{2⋚w["UNG֠oe)seaw[Am-rݛ&b:Wn[U%![5P9: WA$|@';֬c[NQUO9!!zOܴ߮cTգjP)#*͚\%Qv==m<&wiX@s9*(Ҥ@*^f#zh dBvOoH -0߇⣾/OZc% !>p1XAtQA wَ#Tg㈖JFks?zq:yf6 r"e{NEuWrOQ:o<1NS #|`s6=D6Шb#FT<n'i/Wbh ::_,4p}={9wF_c,AY,4]tƳ,y+j MS#1hVR W/s#8 q<+<4CxrFkHpF52$ IYV}6+0 ?pq=`!v~\[Y66;wrl\庅 LΌbԵ54N2KrQ2}V5_%~ ,\Sp=IR ]Ii&nLbTA#OAxV}:YD|5{BQd~[o[(8ss_*dW٠˺2? y7qZ=¿ʋEnʟ9#} xq%焘A/ٙu5gZsQ:,n6MW4%(Ŕb vۮ IoUEaGG~og'Z|(ٰN e%堋7ٚ-ȡ>X\JM2T7ϻ4V(W)u!Isz$>P-e'rdlƥgk0gZ&ݶz0J!'rƵ Rs3x ha_ ˁW`o:ו|Q^0b O3|8 GZ$L='{TBi#m&dRʴ75Cm} E$9a5{1LyذkedZ Tf/3f\|3x4} 9c& bĢzOvuhͱϲqjPHϰƃW^l,(E~eSҔ5:?Ad9rJi36o.$*i}ě9_Cb}ͳ ‡'4\+Jɜ'RT5~x id?KkY0fM"n)Gy0 2*׶JPff}ܶCLŇڰ11KR &DjS\Kdw@&]@Q@wW.ڀRiMde+wI 'OO\SD(;bb|DC!+WUd8J)K\kHY>W~PQנ_W*^0yNA\CѢ%gr] k_Ir28oIV*L(*-*6 &zK*cs_ ꀫYV3YIDr(CmP٧:HI>(Oj ~",d ߧ?KÓ>Y&פwwYn_>[TlD½GW)ʖ坸q2%OZ4a+5O|C'E  Ltn/ֿ(zjC[E%e)$[X-9U |*sC$gċO% }te Rqg_:2 &#YY%x~q56LwX> ]TЋz';氈gA8!(yW˳L٧{4(Kػ>*xzHI\+%7)n~#2kI-L0js C/_B8i\6kL#sRĤ6LH;5 yM'qV=sN!;$ N؆#m 9UsiIwڠ$ 5ZE.bY=OIqm dFPR>e=twq3,Q@i:+D~҆($NWu!( Mvgz,kCSZB w8;W@we[s 2x{.7/ĮgRFn މ+Wm Z}H aXNy1%+ҥiY2^pgN*oze_"2TP]Io}vя#):xDAvom2ZA5{T "@8hpLw* qI`1Xx_vUDibi5ݼ(![zkz?TW*E.%* XHU<1pw#􅯭g-}ŝ GnP$ăhݦwCf`)!`Du>l&6V=A Ҧ,6^Ge\''eS Aq1>ނ:euHEyoR?d}ՒG y pW9R&.=3+XEO8՟#qF>B_Z&%-٭2%-)DʷOK0L0݄!*T# hxSˤrjEzÞF T /+ޘr.G=پ~SeI4 ͺdq?3^ e;ɡIi啴Zn g+"͍'*lmOTvY,RkNCZ ;򵅓RX(&zt J86X c4E0ɥD<ڍ4~p!(wھ:=^h Cݻ}(>g` + ѱm0&؞a{=cےm;Z;q͋*Xe oK |mFgVF*qKtλ꒞)[DsWi!nJm6sRKSڊ#j.5E9̛%LY=XuSѰ~OUcUk srS1qa_orb"KTF|he+j' { ?IS2J L\R:U6b\oUZނwى鄃I8JBa5KU :./zi2CQUt1IX<2_*fqɎ[LxF!r` 3bҐAA\0ɢ-s@r (ֲ0;׵w!T GW) 6:y(QXOAgi*›ð(<_m]%غvk`EB& LELVR0z,jBlP{UI>WR,vz$VU/~|UK.Y1}1yV!oajf4궳WGzrK8`{w+`sv@z7NMGzN# ` #޲mTVsu3wY\WfWN~6cě/վ}FhJ&JKa XS/4Ż||h̹W(y' oru?u:l?\a˷<^.5ͺv}uA[a^aGC>ung*?-^nE8spG R^4%:;T WBif)=%A%M6B\h0#JJ :yw^6|j(5G=@ܠ($Of'ː3>$6 ~Dev Ke fEJ"ZF3sstjS [ }ikfG,1.i׏~r6L q(D W#-+ z9zޭFmA2w@Ct9_#Vbpy8Ћ`lR#y3yL B,g٫T>ƨt\*`%bG 8 -@$! ,R7fs:w"M=77p,Tf֦nlGu;@`h q.,.o%NFT>%)AcTLQ|08'~N5V?#N❍fgެ+ʓP8Cob rWc;!~ ed%Z]ʻzFrQ8B&t0~.P}ν y8j! ]zk&jy8< Lš; y0GܙA$kf#Ʈέ+5VUnb&.}H3; )⪴sb7s@y߯rʋV)@UIi3S6#.FjY;ӴLԭUw^wk''λ2e-XfsPESѸ=m.ek8i;/ |$2Jf,"o6ډ/sSv᳚F?PΈ -W99QsTHvkێC5jx9Tj [b8E-{f#|& ܏)(Tmu|k pP=1 L+EanoO% l~旾R܆g`:L/Wz*#aڪ͎WO ]񃒄ZN qP4mʗS̎ؒk 2+v-v0^52$3p'<3"o#@A$BLX|2 J&dh(}h7}j:FoψXue舿#](H;##~?~A[pFo ~t[as+V4rZ}NbJ/KJ-VpT4V]` _ Phxrg[ڮ*:~W)9?rͰol-v)xcX; ,C3yUkc|O_1@d#{;GWi WCpOIr|gÉNn*3xF?!h{;nOW*ktxqUdcBFqeGU> z$Fk臑@)}S'}[ 9ZTtw|U\j!M -aw%ďBuQiV Xed]`7_q5Zw Q&`|ͣD +yǮ;@ɷМN t]&^PeེwOdMRV,O1x){nDް$墛0f1x'F r7gzjP}~?gP#\0g\"iё7*WgOvi@$( šRQJ$8;`5//[^@nz?x'c`"V_]B͂(0Ƨ9fV`D((՟h'R9+L'[RGHe&|4BCn92|C4_vhaQ|^Cil,~~~S'l@A8`#} 8j"t2R2+]&\cEG1AD_wjZLyvsyߜla3:d]Nao(d99jBoQ!Fw1-rāZph!i땅*dփ k9:1N3_>2 Nadtϙ=V )a + v" +0y|]? |[&CjSהJsd6#*cZ1Fm,ԴU;"xĊ&T8TwAτٚxACG-Q& @+LŸ@& i] m U4[ [{ 8iEgh\g@& Ge!ǐ݃2b8~=qDzvNPf.b 3yz_͙X^Wi*b jTG#% @>Rn.Q_h+,#5.@!I#7Ȼ /'"Q+@q#R}%Ѯw-05wol\=~֤I߷AQyَw7*i-f&ϢQe#աՐ)t Y)Pyno2Cݏؖ vaҺ 7Fc5|j+3?vO֢R $IQ8yT`iW} al'Nge]僾3K H4; XȘ(;^YN| BS{7 \fZ/PҺY`ay4&vۂjH6ΗEm-I߭-dO]]9[^BcG6A__#y2q~(x;KV:?;͓m8A#`/KORōsF&u=nllM=MŜG`RlS4= pOq"'oWF 4iM!$ltsu=Ma*L{_h=-eu;H@rK͇gֹ3)}=MB;*0WX 4#|(Z9y!)9VXr|BӁNmagL1xb*H%$>VDܜ[hgY ض> ц`Qi I[T'y1%0.r}H%|ABͳVMI}1|_ Ud7®X19~&; 9)GLAziouZSz3 vfuIsy'9HsU)E% | u``[ Ŕ ,`nT FAd*&$/UOгq1tN;̅sE:'$VzSV4""K4KɬIIei} m4_`N'Oc2ԗugD}M:q@C/ktrq_bʝ5,v[i;=}9sv){ `^ހ.jzg}PObo'gyl!UVⓨx/Adϱ(cBBݱAR2YX&.#>\}goBΖ8r_(!2ْGn?I-~pFw ~1v Fw'BNfͪDKB8jK4+AF =$g.ӻ-똡;ZANiN4m :?Op[݄Pw]Fp8"BÓU]"z Ò/+'K{ iAXB2wm <)M ,%Er յ{X͋96aN(/@1jjR+UI"ӋC'E]Mes]Ǖ[?OC_(tKquFF0ZF/94oAwc E$*hH{taf;@}>:LƲX ZlE ϵ{H ͏muhS]R}n;Vi"?/VoRx Xg""JhAM=-If=KX[ZHY-Ln*~|✶r2!kح7D G4MV&F0报[ṖIdS쾜yoAjW-'h<м.F(6pH-T ܢ\DK бpbslJ6;mloI} !y M5 $%=9KIJjc4^ǍJ}NR31#bo:&/8͙XgjԈuӠ.1Eqpٹ.VM璲&$An`Kr/:|fGA1״ :;7bi*f'^m D3.ܗK"@XІu꣩]<% a[7-:hVU #\/l^ñ\'zXJz S%PiY׀e^|E?Y74 _Btz6Xi#xC[W4nRh/Yqs 8,=`{&@Z'ReY|-Y:^H0m5C.zӰ}zd*4,BZ!X>GX8?7TTFf!Rh"!ݛУK) J+%}UoM2t[;S2yOֲ/t(?Y%h׹ėڼ(]B>΋uY#xG(ߋbb .,"*K(X6;p@O#P҂Dm7xq_(%GC o?ד ϴhiq.Yod6|]" b2:{*Kg3z06br(!S?~TE-~x H;VƱ ̍n~ Ι_89vBZm'ud&/D(]5n2>_^o#V|~hٸ\V=FkM] h>4p%o5ख^|y8>N8hz'kzL~CΞ({yVVΒe.#aI[@t%);Ӳϗҕ?,ۯ,D'џ;!jr#sw#ZoHb缅6e; JɈᚔO%=L4>p5s`5iՍ28.:*]ء%wQuLpp*сsN63m+xe:^IFrzetv a?(=#5 Qnacu~c#>\y"* sz3劘BANMq%1oT *K`(v*ƩҢl ̼ȉJpO$flNy*]Ƶj9&*7$Pc~]DXu13 6: NX5K84dRS#}aPhgYHCSWw)#%=dV#^-Z,aD%.I\n[bGiIڊޭ،ܢk54- %& /&g< s8kWclˈ##NxxBMϤb~g1\7G HU[D>_wҭɢJTSP^rOz[:VKweVb8Qz>8 #~?FQr!ۃ\G` "I49 ė퐓 ̀+-)r&C%Qa}s^) ,L'FkXJvF4#.dʨK1G¤Z ,D&֚﵂FKf]cf3b5Lj5ý'ўI S淪ew@r|435T>2OT6nS 5jZEOr3o-p.&DV"o8 uR7[Ԣ{!e"4T%Otmk|>!ʔ4NWW}Y'SP}Y1)XD*C CI&//PqA" ھM&-hz29Β՗y9X֣f4;Ñ)[_*z3Ĭކ`xi@cTBO,.4v ;\ɤ Jt1/R+FAN.I$Ղ_ս ,3 ^ʇ. 4cDf2ݳ즱;vTY͊hG eFY6 O4ְC;Pd0jR`KX:٫UUr/gJ_`Avw_`UU' p c[Be=5Yq%h,XzEqo-@njm]:% fxVV h2@fMr2BQ܄婸ζfMrxCʅӤ̧r {ygUZeګٕ)H^\:%KF}Lg q-B5%!`d|͒LtDj>⧭Ji9D Z̩6{ B*- PҾx$Q:ލ&Eo͌*kU,Eѥ:4K0+N3 L`0y,ĜWsʽME֑U`SQQG c$gYn.2_0gݔ[ex~-H변^.zPY Kq7RmF-ǐX`ؙ^´V0>?S^qwZ~&(@q~9ô$0(93IZ\enG_73q%gˊARDAm"dvg Fp\jZ IޮAOq4Z+ [Dk/*ĕ8Y-ǵȱ(NZ ryeXB>'h n "s|%܌jxi-{ 8WfYn-xr oQX7 F'iu3W<1#f>~- /qE!m-a6̔AG5zejPE\_Ǫ lPu=w=DT9 T@-:]In=%}"R=苹yyEo7झ^Hs8UҨē6:k?r?|.wN~% FHmj&KܐU'!aki܌o庵(dzQP O+8)5 WXfT(-->lUh@.MzühO8eDI()1jzT[cG,& 3S=/~"@) OL= ' >;ɲ-rОyk &iUCGtf,H@ Ga%ye9$ +T1| $]$'\a0 &)A2gN[n7}>Т.XX"4V$+X^j ч:Q ng!pZ@3Єҍ8N_S;ZwߔIZ3F% 4mLNi ONPPrߔDj_[m@*bn>p,;->Suu1ךR; ]Cw" {?幨s]gvbtZJT8l B 3oيY,v)ʔcDnYՒ;)]j3j) ۄwLN\/`F-/I"YјG-Ao٤J fA>oKȤbWb4Lc+˸_@c)0k J;x,}w)1T[C?[ak˙ӚvKD_ eD;a>XsF;2 zWE?x˵9`3)ўoCJ~M#Ъ#3DR)Ϯ a".uF{eB髑 2n'axC| ejO|q(;o_%dQhYk9H7^|A dvMH^8nϬ=_E ʿ7<`5 G" FjFdžcqӤ"j+ !?k5ԇUTv?.^/}ee3=}Qw+φŘ+$hvmB|gB' xwEH_TXBԨ>0 YZBiobase/data/aaMap.R0000644000175200017520000000302414516003524015212 0ustar00biocbuildbiocbuildaaMap <- structure(list(name = structure(c(1, 5, 4, 6, 14, 8, 9, 10, 12, 11, 13, 3, 15, 7, 2, 16, 17, 20, 18, 19), .Label = c("alanine", "arginine", "asparagine", "aspartic.acid", "cysteine", "glutamic.acid", "glutamine", "glycine", "histidine", "isoleucine", "leucine", "lysine", "methionine", "phenylalanine", "proline", "serine", "threonine", "tryptophan", "tyrosine", "valine"), class = "factor"), let.1 = structure(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20), .Label = c("A", "C", "D", "E", "F", "G", "H", "I", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "V", "W", "Y"), class = "factor"), let.3 = structure(c(1, 5, 4, 7, 14, 8, 9, 10, 12, 11, 13, 3, 15, 6, 2, 16, 17, 20, 18, 19), .Label = c("ala", "arg", "asn", "asp", "cys", "gln", "glu", "gly", "his", "ile", "leu", "lys", "met", "phe", "pro", "ser", "thr", "trp", "tyr", "val"), class = "factor"), scProp = structure(c(1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 2, 2, 1, 1, 2), .Label = c("nonpolar", "polar"), class = "factor"), hyPhilic = c(FALSE, NA, TRUE, TRUE, FALSE, NA, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, NA, TRUE, TRUE, NA, NA, FALSE, NA, NA), acidic = c(NA, NA, TRUE, TRUE, NA, NA, FALSE, NA, FALSE, NA, NA, FALSE, NA, FALSE, FALSE, NA, NA, NA, NA, NA)), .Names = c("name", "let.1", "let.3", "scProp", "hyPhilic", "acidic"), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20")) Biobase/data/geneCov.R0000644000175200017520000000076514516003524015572 0ustar00biocbuildbiocbuildgeneCov <- structure(list(cov1 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), cov2 = c(1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1), cov3 = c(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3)), .Names = c("cov1", "cov2", "cov3" ), row.names = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"), class = "data.frame") Biobase/data/geneCovariate.rda0000644000175200017520000000066314516003524017322 0ustar00biocbuildbiocbuild=L@Ǐhh!wr" ~aaL %m_:3栉FbĈ+z- TKKFRSrJF H`FJy}?y-[<;̓;)=q<*ṍ;GBI\P"Q<"@``` XXHl yE.1I(C/ ?Biobase/data/geneData.R0000644000175200017520000036527314516003524015724 0ustar00biocbuildbiocbuildgeneData <- structure(c(192.742, 97.137, 45.8192, 22.5445, 96.7875, 89.073, 265.964, 110.136, 43.0794, 10.9187, 751.227, 76.9437, 105.378, 40.4826, 58.1706, 257.619, 129.056, 61.7251, -40.9349, 284.407, 178.745, 79.7368, 9903.19, 61.2671, 120.544, 50.0962, 42.5285, 36.8936, 234.698, 26.9561, 58.124, 40.616, 125.063, 49.9943, 33.1246, 148.494, 66.6936, 19.1364, 165.75, 179.989, 151.72, 553.87, 72.2579, -30.1595, 65.1004, 1781.95, 3311.18, 4478.99, 3835.31, 4252.98, 5449.81, 79.7636, 3.75133, 44.3623, 197.782, 831.418, 541.391, 117.151, 144.719, 70.46, 55.4337, 224.167, 238.342, 130.794, 54.0728, 107.263, 382.255, 36.9832, 22.9605, 6.29927, 17.1529, 216.932, 190.178, 113.476, 50.7945, 1139.56, -18.287, 17.2761, 17.7039, 15.8655, 123.621, 174.661, 25.4169, 17.0339, 102.591, 67.8606, 754.361, 1.86526, 121.892, 14.5586, 3175.57, 40.8068, 18.1273, 22.5912, 14.4076, 64.5555, 17.8468, 412.283, 8.93417, -28.9985, 28.59, 316.157, 139.423, 8.50093, 60.8199, 37.7096, 35.6071, 192.835, 24.9388, 29.4782, 268.752, 13.0213, 65.5145, 464.122, 65.3482, 185.137, 165.366, 240.969, 51.1941, 6.66395, 48.6114, 36.5343, 412.338, 141.939, 36.4318, 52.9437, 61.3229, 65.3667, 68.6627, 10.9786, 23.8657, 5.01524, 177.065, 45.8588, 50.9341, 407.17, 16.8144, 24.3676, 139.241, 101.986, 126.172, 81.2844, -7.15113, 57.5308, 118.845, 3351.76, 286.108, 183.669, -0.944537, 21.8096, 16.7794, 405.217, 78.5843, 1705.65, 71.6915, 16.6355, 3211.06, 80.4291, 15.9308, 86.4344, 12.4541, 13.0163, 138.419, 16.6741, 20.1171, 323.881, 132.963, 3.27231, 113.622, -4.52738, 145.533, 19.0251, 28.0719, 128.004, 333.392, 17.6846, 92.238, 141.285, 17.7226, 1937.11, 54.0638, 15.8039, 29.8451, 76.3667, 445.892, 143.263, 202.725, 24.9869, 963.851, 79.9563, 56.2773, 321.199, 738.774, 100.949, 188.097, 18.1364, 355.357, 74.2606, 133.454, 98.7327, 694.948, 92.4006, 25.0186, 250.085, 3876.44, 117.049, 122.154, 67.1931, 7.30897, 84.6283, 49.592, 335.108, 66.4654, 86.0123, 72.9268, 44.994, 9.38836, 444.915, 92.0446, 10.0007, 18.8823, 58.7393, 13.3018, 569.842, 37.662, 40.3649, 226.662, 12.82, 391.518, 110.782, 7.59043, 194.394, 27.4265, 7.68662, 65.2073, 119.647, 16.0125, 1281.78, 226.635, 10.8538, 17.5639, 1335.61, 86.3719, 62.4806, 195.822, 244.137, 14.4861, 46.9659, 195.317, 5.81787, 184.517, 22.0721, 199.422, 16.2109, 6.64863, 161.7, 44.5963, 505.617, 110.631, 185.215, 27.4203, 24.4519, 216.36, 255.058, 309.114, 4667.83, 112.576, 91.4096, 633.803, 2329.11, -31.0105, 2809.33, 9.45511, 2.93526, 245.995, 132.075, 25.4559, -78.1238, 9.77901, 66.6104, 78.5702, 60.3145, 40.4373, 50.5534, 93.9559, 152.835, 57.4955, 2847.08, 90.0681, 336.346, 333.8, 117.994, 36.3703, 75.0352, 53.314, 286.113, 291.484, 73.877, 3858.49, 11.1541, 26.7391, -19.123, 8.3213, -175.867, 316.537, 3205.89, 1633.98, 490.371, 69.9426, 24.3604, 148.338, 42.0539, 166.386, 11.0695, 466.869, 918.454, 105.831, 6336.55, 94.5106, 124.549, 78.9894, 57.1918, -10.0784, 3.87075, 109.668, 77.1675, 457.371, 90.2235, 2193.88, 97.9357, 67.4934, 12.5044, 87.9604, 1136.1, 52.8251, 205.778, 47.9478, 37.0896, 29.8769, 163.502, 52.9366, -6.26854, 24.8778, 2172.91, 2117.27, 34.5438, 3.18616, 181.501, 32.5297, 105.013, 292.29, 63.8859, 174.173, 95.0869, 280.535, 109.507, 1354.61, 1961.83, 64.2933, 34.5335, 92.1684, 6.89252, 118.755, 40.8079, 229.027, 100.052, 26.8675, 48.7903, 145.687, 1698.05, 165.572, 3.01315, 14.9219, 115.39, 222.809, 52.0182, 17.2658, 33.2661, 61.0926, 13.8854, 638.578, 622.462, 1695.75, 685.856, 122.788, 13.867, 234.63, 327.099, 45.4667, 34.1512, 10.0776, -57.7591, 33.2443, 43.9199, 345.91, 157.343, 276.585, 551.108, 401.466, 26.783, 344.651, 99.7442, -80.8385, 19.5091, 66.3027, 87.1783, 8.25017, 37.6927, 113.722, 78.6986, 24.9035, 6.32616, -36.7863, 30.8709, 48.0258, 347.951, 6.1035, 20.7713, 59.5264, 119.503, 27.8618, 35.1162, 92.8325, 190.052, 11.9853, -53.8608, -0.760266, 789.487, 349.556, 252.402, 148.234, 158.495, 7.5498, 258.37, 4.04513, 2.94722, 11.3329, 37.8421, 29.3296, 153.122, 328.971, 287.74, 59.2783, 52.3302, 70.1602, 285.172, 110.687, 442.733, 55.6486, 37.2868, 81.0269, 239.965, 582.627, 858.9, 230.119, 58.5767, 13.7181, 1739.95, 72.151, 286.243, 265.477, 652.056, 5.14324, 27.5791, 238.494, 310.136, 35.5071, 23.6182, 2080.61, 376.363, 545.377, 66.1117, 82.6331, 54.9434, 11.3511, 259.183, 153.759, 16.8873, 30.2569, 1505.73, 1937.31, 233.214, 3250.14, -22.2448, 269.912, 84.6064, 233.003, 248.216, 150.127, 4.59592, 129.867, 19.7505, 24.819, 63.576, 190.533, 26.7016, 446.512, 22.4641, 299.434, 253.692, 85.7533, 126.196, 8.83135, 3.60093, 30.438, 25.8461, 181.08, 57.2889, 16.8006, 16.1789, 515.004, 40.907, 97.4932, 7.45801, 15.7926, 113.69, 74.6095, 50.2372, -83.9302, 208.099, 101.3, 55.5632, 8501.62, 37.474, 75.9854, 27.9532, 33.7186, 35.1697, 102.467, -2.37297, -1.69785, 34.713, 98.0369, 19.8722, 4.91484, 70.9219, 5.60854, 20.8099, 300.024, 790.943, 546.343, 1758.42, 159.484, -64.7658, 19.7163, 2370.97, 3270.14, 3937.24, 5529.02, 5758.12, 5870.02, 36.0172, 20.7365, 54.8022, 44.7054, 501.091, 377.234, 128.234, 181.278, 93.6398, 64.7447, 180.978, 190.311, 67.1193, 30.2595, 73.1682, 237.818, 42.2591, 13.4121, 19.1633, 27.1722, 162.563, 120.161, 84.9185, 53.818, 5154.31, 3.74538, 36.0095, 15.2357, 23.9183, 95.3586, 103.08, 42.3577, 23.4741, 92.3486, 24.4368, 777.105, 5.41691, 92.031, 34.3359, 3548.02, 3.2361, 9.65582, 9.13811, -1.38469, 56.5676, 1.12837, 440.35, 4.28296, -30.0532, 16.6452, 278.807, 169.568, 21.1695, -394.553, 16.4941, 38.4721, 78.9517, 3.10118, 30.1089, 167.865, -3.0867, 44.0921, 436.574, 44.5892, 163.138, 194.529, 214.829, 55.8029, 11.3476, 14.958, 25.3529, 384.259, 72.7142, 12.4748, 27.1124, 66.3107, 66.8159, 63.0803, 92.1722, 0.177197, -38.9859, 171.192, 34.0826, 4.07801, 373.017, -0.769524, 6.01475, 89.9168, 84.6254, 107.521, 74.2868, -20.7531, 148.301, 94.944, 4323.17, 232.94, 121.714, 69.4382, 5.72227, 7.3986, 415.275, 28.8216, 1315.01, 36.1148, 67.0027, 2593.65, 24.3428, -17.6152, 50.0729, 9.31312, -23.0799, 86.1644, -8.1025, 19.6846, 235.001, 73.4631, 13.8193, 59.9681, 2.94767, 157.69, 47.6266, 61.1661, 104.139, 379.143, 23.7638, 71.4745, 87.7626, 30.7267, 1499.43, 39.9567, 7.69656, 2.28445, 59.4088, 330.876, 105.898, 176.47, 1.81061, 851.733, 20.8281, 45.8031, 649.608, 1163.7, 55.8623, 151.278, -16.7101, 277.792, 42.7732, 241.785, 131.357, 616.905, 54.4591, 41.0307, 212.55, 4456.75, 212.208, 115.759, 58.1292, -15.082, 90.8461, 20.9174, 277.822, 44.4367, 68.6069, 16.3172, 3.4138, -3.38286, 285.917, 126.127, 0.609841, 59.5828, 4.21187, 8.49004, 870.198, 13.2164, 14.4078, 203.901, 14.9982, 252.349, 74.7691, 10.7374, 170.651, 97.6762, 33.0937, 35.1276, 200.758, 24.2109, 808.399, 176.946, 10.668, 23.3083, 2208.33, 62.0363, 40.6219, 64.4413, 104.971, 22.7284, 600.467, 361.212, -6.01692, 291.5, 21.2316, 473.545, 20.4983, 31.2972, 150.28, 111.154, 182.812, 93.91, 372.524, 72.3758, 15.8334, 147.966, 267.088, 813.374, 2995.08, 66.3044, 46.9761, 1468.57, 2370.87, -59.0063, 3676.6, 148.159, 12.0201, 220.69, 111.018, 55.0777, -66.3389, -13.7223, 76.5278, 53.8695, 194.842, 131.637, 235.74, 240.715, 247.238, 122.939, 3743.96, 573.17, 387.269, 251.052, 107.653, 37.0203, 137.625, 33.853, 238.052, 863.607, 35.8266, 3568.89, 1.50669, 27.7993, -5.28788, 11.2962, -125.024, 408.582, 3515.46, 2218.3, 511.181, 41.3118, 15.083, 116.584, 9.54446, 142.225, -26.1006, 363.157, 728.89, 93.9206, 7294.08, 22.3793, 107.922, 31.4733, 101.262, 57.8828, -28.1437, 59.2715, 66.1019, 377.694, 78.6573, 3324.68, 50.878, 71.3438, 9.54178, 54.2085, 2764.5, 20.1416, 167.67, 10.6369, 22.4401, 48.3359, 70.4437, 19.7066, 52.0355, 25.3512, 3017.39, 2812.14, 11.6979, 77.0231, 212.566, 16.6308, 82.0771, 185.749, 34.072, 101.539, 181.17, 197.009, 75.3342, 2147.25, 1587.88, 151.32, 30.4737, 123.478, 2.23759, 69.8942, 26.9286, 79.6353, 117.308, -34.0231, 42.9693, 217.778, 1353.85, 116.874, 3.5022, 22.7868, 57.4058, 161.722, 29.8741, 9.53801, 33.8521, 24.413, 17.7637, 520.449, 591.734, 2062.22, 996.584, 78.1948, 45.329, 167.125, 401.967, 34.1303, 21.5371, 2.24541, -26.3753, 32.5026, 29.1886, 206.237, 93.309, 200.928, 487.538, 337.674, 30.2136, 278.321, 118.652, -52.243, 17.923, 21.0778, 55.3885, 2.27909, 47.3832, 88.2588, 49.7464, 32.1044, -1.05329, -4.33992, 18.2626, 40.7261, 333.625, -7.93034, 19.45, 57.6465, -755.812, 21.0434, 33.7346, 106.43, 268.848, 8.83568, -46.6535, -1.72494, 623.697, 231.072, 198.967, 469.976, 269.123, 68.4686, 316.445, 7.37585, 33.8574, 8.8682, 21.018, 10.5003, 67.5913, 1110.82, 295.222, 83.4115, 11.1847, 126.866, 373.091, 71.2689, 713.406, 58.4652, 22.5675, 232.293, 236.371, 469.914, 762.529, 103.91, 60.7067, 5.59537, 3355.81, 84.9986, 230.098, 272.078, 563.61, 24.53, 13.1461, 221.654, 274.996, 5.44171, 24.4863, 2227.03, 392.032, 508.608, 93.93, 31.5536, 31.0355, 3.83873, 230.849, 242.947, 13.9151, 3.29854, 1556.68, 1911.55, 146.58, 4013.99, -13.4229, 211.98, 72.7237, 186.692, 165.056, 214.073, 9.80107, 84.4112, 89.002, 26.9743, 11.6784, 169.962, 33.1578, 271.494, 23.4589, 233.138, 183.306, 176.757, 77.9216, 33.0632, 14.6883, 46.1271, 57.2033, 164.926, 67.398, 37.6002, 10.1495, 622.901, 62.0314, 74.0299, 19.4069, 25.1962, 187.796, 82.8271, 61.671, -28.705, 239.039, 118.699, 68.5976, 9453, 44.7525, 126.374, 29.261, 35.842, 36.5703, 97.901, 34.4333, 52.6747, 82.4409, 77.1769, 32.2058, 24.6518, 118.632, 60.3028, 10.7195, 152.424, 150.249, 173.624, 599.857, 42.4559, -28.2104, 39.1968, 1693, 2670.94, 3822.94, 2961.39, 3739.82, 4788.63, 82.2737, -0.597615, 44.8314, 206.137, 620.729, 436.198, 84.4842, 191.682, 64.3478, 79.7282, 237.773, 207.319, 97.155, 38.0971, 74.1949, 388.945, 23.294, 16.9304, 3.03659, -0.338279, 166.482, 169.273, 177.832, 58.2412, 600.494, -3.03599, 0.533814, 10.2753, 22.7978, 94.4468, 177.465, 28.9386, 18.9332, 120.461, 84.3285, 1208.68, 11.7631, 201.403, 16.3046, 1820.51, 18.7009, 8.06063, 17.7927, 4.91404, 64.3351, 9.33222, 495.373, 11.3434, -26.9727, 32.8212, 309.36, 132.574, 4.76155, 85.7358, 41.2689, 63.5624, 96.1371, 13.489, 40.0346, 288.847, 32.9084, 53.8278, 371.229, 68.3952, 128.63, 266.452, 269.956, 47.743, -0.199725, 67.7454, 30.8355, 394.639, 99.8759, 32.5865, 49.5398, 56.054, 78.8531, 85.9725, -3.55993, 26.8936, 0.485286, 277.25, 60.7702, 36.151, 466.838, -4.87448, 9.19057, 137.726, 117.944, 122.385, 91.1349, -9.44844, 90.8404, 78.8022, 2793.21, 217.035, 142.901, 58.8769, -25.6195, 16.2116, 472.011, 76.1839, 975.155, 25.4608, 23.3196, 3219.65, 98.2355, 11.5571, 62.0855, -3.89868, 0.364566, 133.15, 14.9364, 30.4366, 247.264, 230.803, 0.868223, 114.364, -1.38195, 202.254, 24.8141, 56.6022, 142.538, 404.582, 26.6696, 110.596, 159.432, 20.0713, 1981.21, 79.788, 20.2375, 32.2108, 78.4334, 534.38, 194.198, 268.142, 19.7106, 1151.71, 33.9701, 40.1148, 189.034, 458.814, 111.326, 243.659, 11.1631, 410.494, 64.8875, 86.9771, 150.6, 897.232, 70.4278, 41.771, 266.278, 3561.69, 96.4136, 139.54, 65.321, 1.92815, 70.2624, 23.7333, 334.227, 37.4708, 55.9757, 42.6704, 24.337, 56.2867, 462.89, 176.691, 6.97726, 12.3479, 61.623, -40.8948, 496.399, 12.4289, 16.7948, 234.34, 18.1656, 744.438, 52.0471, 26.1707, 277.678, 59.6709, 8.88736, 67.9387, 166.966, 38.5175, 2748.11, 285.982, 11.8812, 17.6829, 1051.91, 156.014, 48.2021, 159.216, 139.037, 18.6021, 45.0407, 180.731, 2.32048, 184.486, 16.5329, 105.691, 41.7953, 0.693056, 116.963, 26.7144, 244.615, 117.343, 108.422, 59.9884, 23.0708, 201.693, 373.406, 331.275, 2239.38, 114.994, 116.796, 628.728, 1887.55, -81.7433, 2448.39, 8.64014, 5.43453, 255.595, 117.117, 76.3595, -37.4766, 6.22211, 136.229, 89.6268, 50.2193, 77.6374, 95.2023, 98.8803, 175.198, 125.214, 2868.78, 173.548, 471.518, 404.532, 181.375, 39.4546, 103.158, 105.342, 387.073, 537.699, 75.7463, 2560.07, -0.373076, 12.8639, -12.5198, 15.1326, -117.8, 395.382, 3143.06, 1271.65, 721.257, 61.8619, 23.3659, 172.881, 28.6697, 171.244, 14.1655, 375.339, 840.046, 93.8486, 6579.89, 40.5256, 138.575, 62.4509, 109.496, 24.4152, 24.7544, 105.943, 71.9599, 331.429, 105.756, 1786.61, 128.158, 84.3728, 20.6126, 157.824, 1300.7, 48.2448, 229.14, 61.0324, 21.6207, 32.5197, 173.512, 33.0107, -3.57515, 38.8318, 2115.7, 2353.56, 37.2077, 26.4637, 204.545, 45.8613, 170.981, 324.006, 46.7089, 243.086, 84.3667, 312.187, 83.842, 7748.04, 1548.52, 131.897, 47.1247, 131.118, 4.11246, 124.225, 34.5025, 197.734, 91.6667, 22.7796, 84.4513, 143.789, 905.632, 179.091, 1.12619, 33.9309, 69.3337, 190.008, 51.8768, 21.6014, 26.3087, 55.8036, 2.06138, 629.873, 494.789, 1648.93, 627.546, 104.333, 9.70183, 196.457, 264.936, 30.9323, 23.3243, 2.87676, -56.3115, 40.8574, 29.4056, 243.143, 155.89, 368.955, 729.211, 331.715, 28.1446, 513.724, 123.675, -68.25, 15.495, 86.2276, 76.1181, 5.3182, 33.6867, 134.632, 48.2266, 24.8465, 0.541914, -19.0799, 12.4705, 64.7863, 362.379, 8.82454, 12.3041, 73.1326, 147.117, 40.8124, 50.4434, 76.3825, 264.597, 12.1591, -75.3722, 4.81662, 650.118, 239.454, 215.675, 206.716, 129.04, 1.6552, 240.097, 10.8357, 9.03269, 15.9011, 26.9514, 10.7637, 106.479, 301.017, 362.135, 72.0019, 55.6966, 174.68, 332.694, 388.184, 337.534, 18.5135, 12.4759, 118.672, 261.799, 207.092, 600.212, 192.576, 47.1807, 4.08804, 2498.19, 63.1878, 312.842, 326.4, 455.249, 1.25862, 24.361, 278.501, 324.997, 10.9836, 10.5946, 1666.93, 553.31, 634.472, 64.7392, 62.0543, 37.4184, 17.2002, 260.407, 185.728, 16.1287, 21.148, 1761.11, 1776.92, 257.1, 3288.88, -8.50769, 338.949, 66.6674, 336.641, 298.4, 195.258, 0.368562, 116.449, 16.639, 39.5593, 55.6773, 156.71, 31.7113, 304.809, 39.417, 355.204, 291.385, 135.575, 93.3713, 28.7072, 12.3397, 70.9319, 69.9766, 161.469, 77.2207, 46.5272, 9.73639, 669.859, 54.4218, 54.5277, 20.6246, 46.5057, 210.58, 101.534, 93.2235, -27.9979, 236.428, 131.834, 55.6881, 8595.65, 43.902, 90.4021, 38.6436, 43.8173, 37.0274, 146.239, 17.5947, 55.7056, 42.4596, 107.861, 37.0137, 30.3256, 118.691, 63.5276, 13.9764, 118.693, 82.6372, 135.163, 426.569, 3.26054, -37.3464, 24.3987, 931.981, 1916, 2995.59, 1712.31, 2266.59, 3491.7, 51.4973, -8.47943, 31.2879, 116.343, 668.082, 560.846, 101.776, 202.534, 63.019, 102.178, 216.3, 217.761, 109.506, 35.9229, 103.339, 336.965, 31.0905, -15.2399, -0.903413, -14.1061, 248.735, 173.702, 117.493, 59.7341, 658.421, -5.98093, 11.4078, 12.9648, 24.8195, 124.794, 174.559, 19.3623, 26.6189, 113.723, 84.2596, 730.314, 8.62522, 134.993, 18.4485, 2612.13, 28.5711, 5.85333, 19.1999, 11.1325, 56.7737, -1.59376, 501.236, 13.8976, -23.0042, 37.1873, 403.88, 109.777, 10.3207, 67.3778, 47.4344, 55.8759, 108.988, 13.9802, 43.1862, 208.604, 2.65486, 48.6217, 465.519, 60.0952, 129.701, 250.405, 265.694, 36.3271, 17.8139, 60.2125, 28.2217, 362.904, 114.494, 16.9474, 45.4437, 52.1385, 40.8464, 81.6387, 0.849691, 21.6048, -2.29043, 190.222, 66.5821, 46.4369, 467.278, -0.835582, 18.1039, 115.949, 98.4812, 128.012, 67.5637, 11.2539, 77.5852, 91.8056, 3072.51, 192.841, 161.071, 40.22, 31.2705, -61.0733, 436.333, 60.0639, 1420.69, 41.971, 16.3495, 2453.11, 104.167, 13.7932, 89.1047, 4.4386, 8.19584, 89.7832, 14.4443, 54.3745, 249.8, 187.791, 6.62558, 127.032, -5.58777, 191.617, 17.9258, 78.5784, 148.488, 364.183, 46.72, 97.8402, 130.051, 11.396, 1414.58, 117.664, 26.8048, 35.6676, 51.7222, 382.114, 196.659, 264.509, 14.1542, 1326.21, 64.8629, 39.6481, 175.793, 529.609, 80.6403, 118.342, 12.7879, 358.9, 58.4443, 123.854, 126.945, 763.094, 63.7269, 27.4686, 229.632, 3045.6, 94.6744, 108.665, 65.6258, -2.53157, 80.7287, 42.6169, 346.969, 37.3218, 57.9184, 48.6221, 32.3597, 17.1126, 475.902, 139.969, 2.52464, 13.3328, 50.5703, 8.63196, 724.818, 13.4701, 25.8875, 175.004, 26.7092, 628.343, 74.8407, 9.15695, 270.383, 43.9764, 10.0378, 66.9586, 159.203, 42.1448, 26.7318, 223.828, 3.47616, 15.4544, 1094.93, 112.442, 34.9869, 136.226, 173.703, 18.477, 40.0883, 153.399, 7.51711, 160.627, 11.9868, 215.151, 54.3479, 3.20111, 134.432, 44.7578, 371.959, 115.912, 58.0414, 89.2656, 25.785, 199.259, 238.99, 303.492, 3536.17, 129.548, 139.689, 2010.77, 2790.52, -77.6557, 3973.05, 7.47499, 1.14975, 254.188, 81.2887, 71.8499, -57.1317, 5.93088, 172.465, 79.6828, 29.3946, 50.5614, 73.798, 78.9586, 147.887, 106.963, 2915.08, 138.89, 385.115, 360.427, 115.041, 41.4827, 76.5293, 60.0774, 341.52, 761.418, 75.7623, 3682.01, 7.51078, 12.0506, -7.89719, 15.0758, 7.52292, 408.186, 4604.16, 2217.51, 505.422, 54.4029, 23.8248, 200.161, 26.5075, 116.292, 8.75973, 523.481, 968.806, 100.517, 4694.22, 64.1784, 119.122, 140.46, 63.7561, -22.7521, 12.7108, 116.718, 79.158, 322.951, 94.8393, 3026.42, 111.845, 74.4425, 44.2425, 97.9837, 2370.01, 29.0707, 180.18, 39.32, 24.889, 38.6347, 225.425, 31.989, 6.76259, 27.4242, 3134.73, 2830.51, 43.1838, 47.3681, 153.038, 19.7044, 224.179, 304.823, 82.7017, 226.486, 59.1124, 248.867, 88.2029, 1392.41, 1592.51, 72.3257, 43.4622, 128.944, 1.62062, 95.1037, 27.9533, 196.074, 86.6898, 20.6985, 86.8609, 104.507, 1146.21, 188.642, 0.59902, 41.9507, 92.7837, 224.49, 40.3968, 14.2285, 34.5061, 57.1294, 5.34327, 506.241, 522.548, 1160.22, 666.347, 97.9268, 17.7801, 218.052, 297.688, 32.3167, 19.5057, 26.6114, -37.5517, 43.6972, 24.0573, 288.353, 185.134, 254.767, 677.218, 346.054, 22.2505, 390.636, 124.853, -65.7515, 21.0519, 80.5353, 73.7944, 7.61247, 29.269, 119.968, 17.3605, 20.3198, 10.4502, -25.2877, 22.1264, 72.1742, 369.995, -5.68748, 11.8066, 50.6633, 173.014, -16.4234, 51.4102, 99.1137, 242.912, 9.02829, -77.6078, 7.24242, 528.138, 304.759, 189.418, 159.408, 179.094, 21.2023, 215.018, 6.69187, 0.00887041, 21.1965, 22.7721, 16.2251, 96.8354, 365.602, 347.427, -0.262678, 59.5886, 79.8423, 278.584, 145.429, 323.227, 54.4142, 10.4668, 76.9657, 284.822, 68.987, 825.444, 189.224, 40.9088, 1.28765, 2874.21, 69.2813, 288.84, 286.696, 481.875, -0.170312, 22.9568, 311.733, 331.046, 7.13579, 18.7409, 2532.58, 528.613, 548.603, 31.1731, 80.8461, 33.7246, 10.1153, 268.561, 155.212, 5.48352, 16.9418, 361.75, 179.567, 217.952, 4233.25, -13.5292, 212.173, 60.0119, 338.307, 315.376, 177.603, 1.57145, 166.478, 29.04, 46.9514, 42.201, 211.624, 36.6217, 340.978, 25.7452, 314.818, 270.719, 64.4939, 24.3986, 5.94492, 36.8663, 56.1744, 49.5822, 236.976, 41.3488, 22.2475, 16.9028, 414.165, 29.0704, 54.9849, 25.0496, 15.3157, 137.39, 83.4986, 38.113, -29.9097, 152.327, 109.355, 56.396, 9198.53, 40.5637, 99.6214, 34.4854, 21.1038, 24.0568, 127.068, 30.9068, 36.449, 50.3563, 72.3561, 38.7689, 23.3383, 82.8794, 33.5234, 10.7876, 95.3272, 163.14, 193.159, 859.045, 11.4879, -45.8195, 38.9076, 2813.41, 3973.08, 4775.69, 3090.42, 4237.75, 4789.47, 76.4602, 5.07097, 27.6003, 41.1004, 571.461, 390.73, 96.9881, 190.287, 55.4916, 59.3796, 167.976, 186.738, 136.675, 30.0487, 43.4217, 218.95, 24.8622, 10.0734, 1.39476, 23.0263, 183.237, 102.385, 88.0268, 75.8551, 3378.38, 3.59555, 65.0242, 12.96, 99.2189, 89.2497, 121.01, 22.2028, 26.8139, 90.0344, 74.5531, 679.41, 13.4006, 117.134, 13.4128, 3201.35, 23.3641, -5.30554, 20.1253, 9.54839, 38.7718, -4.62199, 348.54, 13.8821, -18.3141, 17.2074, 306.792, 104.859, 12.6733, 94.0531, 21.6537, 43.6782, 89.4138, 13.6566, 38.0548, 189.276, 28.5149, 31.4913, 361.772, 62.0669, 152.595, 177.347, 153.814, 91.3033, 15.3481, 24.1763, 8.74242, 240.273, 138.468, 23.0748, 35.8972, 66.074, 44.1937, 52.9221, 25.4535, 11.5091, -23.6341, 138.393, 25.068, 22.5468, 407.637, 4.04739, 20.0476, 77.704, 82.5094, 63.1586, 81.2566, -14.8375, 83.8227, 92.7443, 3811.76, 193.545, 134.644, -17.3857, 19.9229, 7.74658, 340.509, 73.6392, 1432.34, 18.8084, 8.87588, 2627.62, 35.1561, 5.30396, 70.8928, -13.8029, 11.239, 114.716, 5.44362, 21.3368, 204.602, 136.36, -2.31789, 85.5356, -0.247811, 173.264, 12.6704, 90.7857, 104.594, 247.158, 4.83192, 69.3472, 89.6663, 20.5333, 1435.34, 31.4634, 47.8388, 21.6173, 36.6126, 304.094, 90.4853, 176.797, 5.51239, 1034.81, 42.2959, 31.9282, 561.815, 1445.61, 83.6597, 137.314, 20.7974, 284.287, 58.4877, 96.2139, 114.396, 572.889, 50.0257, 21.7261, 215.397, 4848.85, 138.355, 95.7016, 41.1985, -2.8474, 63.9182, 17.0448, 325.229, 66.8436, 43.8797, 22.1161, 26.9722, 17.6747, 416.37, 132.339, 1.41274, 8.88926, 27.3809, 6.57349, 1139.67, 7.90949, 16.9425, 161.962, 13.7585, 621.043, 94.3556, 8.18545, 198.797, 207.15, 13.595, 59.9965, 156.247, 37.4272, 1797.91, 173.597, -7.73911, 9.15676, 1813.15, 55.28, 44.1372, 139.674, 139.307, 5.67999, 12.0538, 199.397, 6.77999, 120.684, 14.8007, 385.285, -3.4299, 2.18153, 91.8316, 48.117, 367.658, 114.124, 65.8494, 65.9354, 7.48233, 143.672, 199.44, 657.109, 4029.17, 59.3436, 49.4573, 1927.59, 2961.98, -33.9927, 3411.82, 60.5111, 0.298467, 181.269, 74.6144, 37.7439, -110.18, 19.0457, 29.6359, 60.9489, 28.0187, 26.8489, 33.3419, 85.0067, 133.816, 137.412, 3241.26, 98.0283, 395.614, 184.099, 94.8942, 42.2762, 101.342, 40.6483, 253.774, 923.643, 25.4809, 3804.5, 17.1477, 16.7315, -17.8845, 7.19612, -99.2543, 328.887, 4042.05, 1991.19, 456.9, 35.7412, 22.631, 114.018, 19.7603, 118.914, 4.47381, 312.442, 141.333, 73.7581, 6317.23, 44.7439, 90.1649, 47.5125, 41.0167, -5.88861, -1.31689, 50.2078, 52.9975, 306.946, 55.2381, 2807.46, 62.2553, 56.1606, 18.2972, 71.7201, 2288.21, 16.0303, 192.889, 24.1359, 11.582, 35.1956, 138.472, 19.3633, 31.5201, 22.3016, 3295.13, 3040.62, 40.9435, 198.743, 166.185, 27.0079, 111.59, 289.5, 51.6072, 128.174, 116.62, 195.124, 94.2059, 1940.92, 1827.06, 58.5186, 45.1064, 124.442, 118.75, 94.8991, 1.10459, 101.25, 72.7004, 8.5148, 48.5702, 238.499, 1447.28, 122.661, 5.3293, 28.0415, 86.0212, 128.135, 76.4239, 12.8664, 30.3877, 19.3263, -8.55452, 403.789, 426.469, 2773.18, 1844.36, 82.3998, 13.0372, 153.673, 352.845, 23.6871, 15.78, 55.5372, -18.7618, 23.9722, 41.5831, 271.406, 120.728, 224.949, 541.299, 233.333, 22.2221, 254.824, 155.811, -35.171, 6.93843, 43.0696, 91.5986, 1.78595, 36.7053, 81.0342, 52.6775, 32.0319, -14.4679, -24.2608, 21.3777, 62.3007, 286.02, 11.041, 8.48455, 68.3051, 128.355, 36.9841, 152.66, 37.0811, 168.305, -7.80055, -37.1137, 9.36955, 753.432, 304.638, 180.115, 366.813, 162.324, 51.4895, 425.48, 11.9353, 37.1344, 11.3044, 15.0707, 2.81377, 87.062, 890.038, 275.697, 82.7545, 48.8611, 134.64, 442.328, 92.7822, 297.06, -4.19166, 23.5474, 210.476, 284.862, 326.488, 643.018, 149.103, 57.9264, -4.35968, 2422.79, 90.8871, 214.643, 214.658, 673.626, -14.3901, 23.2702, 253.467, 314.393, 14.1398, 21.0437, 2730.59, 458.75, 440.822, 101.206, 71.8985, 27.3093, 2.20914, 193.891, 125.925, 20.2388, 16.0322, 1773.4, 1622.36, 167.252, 4208.54, -1.83895, 194.467, 52.4202, 155.889, 170.929, 146.268, -3.25423, 92.3306, 28.2821, 36.1026, 52.9031, 105.939, 26.8284, 356.127, 14.4032, 238.684, 212.025, 76.3569, 85.5088, 28.2925, 11.2568, 42.6756, 26.1262, 156.803, 37.978, 61.6401, 5.33328, 654.078, 19.5271, 58.0877, 12.4804, 16.6833, 104.159, 73.1986, 51.0869, -26.9004, 159.505, 98.1799, 31.3003, 8729.83, 28.5819, 59.8854, 15.9339, 26.0026, 19.8649, 65.0798, 19.4564, 27.137, 34.748, 104.56, 19.4119, 20.5827, 69.0769, 38.0418, 3.04198, 81.5155, 147.757, 163.458, 552.006, 13.402, -30.6321, 22.4197, 2773.8, 3533.69, 4276.28, 4859.32, 5339.43, 6045.84, 61.8061, 13.5139, 64.2732, 66.8357, 534.92, 557.232, 97.7246, 183.791, 74.0598, 72.8653, 158.024, 209.394, 66.7261, 42.101, 45.9945, 234.313, 12.8276, 12.8547, 13.4486, 17.9294, 129.778, 93.4386, 90.2193, 65.7247, 265.693, 2.95618, 1.60701, -0.761071, 25.1805, 113.248, 128.501, 13.2872, 33.0942, 143.403, 62.9061, 472.386, 9.46665, 146.648, 20.1751, 2055.84, 10.4128, 1.51498, 7.61478, 10.1273, 50.1046, 17.1919, 416.904, 16.3986, 316.922, 31.7997, 271.918, 140.767, 3.43293, 93.2234, 30.2287, 60.9735, 81.2301, 13.1852, 15.6828, 244.004, 8.03442, 41.195, 450.588, 101.569, 122.576, 203.771, 165.58, 47.3593, -0.578794, 40.8826, 19.258, 317.049, 95.6767, 35.6291, 37.5118, 9.52143, 26.7085, 57.821, 7.38804, 21.5466, -4.09123, 174.045, 26.0275, 28.2087, 372.743, 7.89114, 9.26315, 77.7341, 92.1451, 40.0276, 59.0001, 11.3105, 109.624, 71.8631, 2826.91, 183.907, 115.486, 30.823, 25.6218, 4.40317, 456.183, 42.8331, 1406.38, 9.25876, 21.9462, 3057.25, 43.3653, 13.7308, 45.042, -5.66411, 1.81244, 92.4059, 3.38841, 27.4057, 195.913, 170.641, 13.7318, 77.4835, 11.8705, 170.034, 27.2993, 48.4951, 112.256, 288.233, 15.8018, 90.4763, 135.063, 17.4997, 1447.35, 20.3943, 9.1535, 11.2232, 52.4492, 263.404, 88.8359, 240.531, 13.914, 952.742, 25.8131, 33.9627, 399.248, 981.156, 99.5194, 113.287, -3.55475, 321.253, 64.8132, 153.21, 108.544, 689.428, 40.1967, 24.1371, 219.8, 6103.53, 183.204, 117.629, 66.3195, 1.21957, 50.7251, 13.9721, 215.827, 33.5278, 29.0743, 26.98, 3.84226, 15.2119, 416.473, 94.0782, 5.65606, 6.8239, 29.7649, 33.117, 922.994, 2.95855, 25.7804, 182.436, 14.506, 558.625, 50.9544, 7.1015, 232.798, 176.539, 13.849, 55.0411, 112.844, 38.1649, 2629.76, 208.982, 8.91111, 3.69219, 2237.49, 87.4336, 29.7085, 92.6406, 108.641, 12.5881, 24.5561, 277.109, 0.0555992, 168.556, 21.9422, 242.008, 13.2175, -5.18207, 67.707, 18.8392, 200.762, 93.2498, 131.197, 38.8349, 11.7789, 150.893, 281.69, 697.327, 2363.54, 98.4533, 49.2495, 1184.74, 1743.97, -146.388, 2625.96, -0.550366, -20.5783, 166.122, 111.555, 47.8556, -13.3038, 10.5148, 96.0369, 50.6197, 17.8413, 29.8171, 29.9881, 68.2329, 338.401, 242.223, 3103.45, 51.3296, 407.96, 247.109, 131.532, 38.6406, 100.263, 14.9409, 363.97, 1696.09, 55.9993, 3141.21, 10.7468, 9.4833, -10.1759, 4.94772, -94.8137, 363.273, 3357.76, 1370.01, 1055.43, 37.2194, 11.6967, 151.487, 45.4293, 122.312, 9.85712, 312.931, 619.899, 86.0735, 6098.96, 35.2556, 118.982, 42.6033, 50.3781, 8.79439, 10.0094, 77.1799, 41.375, 356.719, 79.1635, 2399.43, 93.6127, 87.3683, 8.51886, 80.539, 1489.71, 23.1329, 196.416, 32.6198, 28.1255, 27.9306, 120.298, 36.3136, -6.53911, 11.5249, 1818.98, 2629.42, 20.5239, 25.569, 176.01, 16.4979, 106.83, 255.7, 47.4432, 202.329, 148.584, 166.122, 72.5939, 1147.63, 1571.36, 64.2836, 40.9947, 149.732, 6.98837, 76.7431, 32.6061, 241.995, 193.953, 71.849, 43.091, 231.441, 1173.24, 148.46, 6.25035, 27.2836, 61.9131, 116.848, 61.847, 26.8595, 6.40947, 30.8911, 0.516717, 420.763, 460.661, 1361.44, 591.884, 53.3154, 11.9007, 168.517, 250.081, 17.9015, 16.7667, 7.98321, -32.7506, 44.1567, 33.2017, 203.785, 118.136, 30.1383, 623.624, 321.933, 15.0102, 304.391, 109.031, -35.2096, 7.28756, 68.1562, 76.94, 3.84083, -8.66032, 74.518, 45.4732, 5.2473, 0.674253, -38.8464, 58.6034, 54.2982, 400.585, 1.74185, 11.5801, 59.9533, 165.597, 41.3708, 49.7561, 53.7959, 173.169, 1.11088, -44.2055, 0.345534, 788.229, 233.738, 193.153, 503.509, 170.926, 47.5674, 250.997, 5.58086, 23.2777, 19.559, 32.0773, 10.4892, 84.8054, 591.492, 310.91, 89.6526, 62.3684, 388.848, 401.377, 87.3499, 492.338, 28.0653, 9.77436, 165.732, 180.625, 486.538, 543.039, 110.879, 53.3282, -2.68911, 2656.67, 48.7383, 212.146, 226.983, 507.041, -4.7378, -7.00055, 303.127, 344.683, 12.0315, 20.7854, 2086.7, 136.541, 442.067, 55.9435, 39.8863, 38.2014, 6.7952, 184.694, 172.747, 11.6976, -5.41524, 1350.98, 1425.73, 166.823, 3207.93, -5.10412, 250.141, 35.7243, 188.316, 202.637, 156.022, -13.1372, 78.0865, 51.5613, 33.0572, 43.5617, 171.992, 38.991, 279.015, 27.166, 205.697, 225.357, 160.505, 98.9086, 30.9694, 23.0034, 86.5156, 75.0083, 211.257, 110.551, 33.6623, 25.1182, 704.781, 56.3164, 96.632, 21.9102, 93.1759, 296.287, 110.631, 69.0242, -45.6312, 316.931, 177.533, 84.8437, 10085.3, 49.2893, 129.419, 55.8445, 47.7015, 57.4157, 262.579, 18.5628, 59.6477, 26.4046, 103.898, 42.146, 42.6331, 147.797, 60.9828, 9.54646, 152.298, 169.078, 145.287, 499.943, 20.5481, -56.7485, 67.8308, 1331.06, 3001.52, 3922.8, 4656.49, 5809.61, 5387.85, 84.3291, 0.756365, 54.4841, 73.8793, 622.534, 510.803, 84.813, 146.505, 51.5387, 80.7284, 194.901, 226.182, 56.4972, 40.503, 95.5123, 367.258, 68.4181, 10.4643, 5.74156, 35.7209, 270.832, 183.729, 117.556, 93.8117, 2347.97, -6.84587, -3.51601, 16.7883, -6.77262, 143.695, 173.604, 25.7165, 22.5593, 95.8189, 100.242, 875.514, 5.64484, 159.059, 12.8777, 1445.57, 56.5075, 6.67706, 20.3672, 16.6175, 71.0378, 0.121618, 770.457, 16.0536, -21.241, 35.6843, 289, 130.207, 23.7289, 76.6311, 28.5373, 41.6551, 103.677, 23.7724, 24.5001, 227.616, -17.4642, 88.1088, 390.704, 46.2814, 241.579, 239.095, 246.333, 68.2692, 3.72669, 43.3918, 34.893, 430.311, 139.544, 18.7085, 39.5034, 65.418, 60.8044, 87.8751, 20.2779, 30.6158, -1.06324, 181.367, 59.5764, 46.5235, 526.11, 11.1662, 24.8809, 125.538, 107.588, 102.268, 71.5763, 19.1748, 97.0634, 86.1694, 2280.98, 185.979, 143.129, 59.7806, 20.6691, 4.16593, 458.62, 80.0684, 1405.23, 114.141, 15.0017, 2784.51, 67.3431, 12.9932, 82.6335, 2.46988, 8.19852, 126.301, 58.2465, 21.3715, 342.757, 92.0834, -0.662, 132.709, -6.37538, 173.21, 7.82848, 145.062, 126.06, 389.761, 28.5087, 95.2023, 151.083, 18.2265, 1746.7, 81.1804, 13.7397, 33.0161, 80.331, 500.006, 168.432, 199.011, 22.4592, 1266.08, 96.4681, 52.4657, 165.172, 439.903, 58.831, 232.393, 20.3798, 390.69, 76.8212, 102.604, 115.513, 694.082, 95.4191, 31.7582, 292.824, 4843.85, 243.369, 150.37, 73.6126, 13.5536, 84.8325, 44.2015, 397.304, 52.6378, 56.2434, 58.5563, 48.2016, 22.27, 533.109, 180.547, 10.7022, 15.3744, 66.0203, 2.8568, 380.877, 23.7808, 23.4922, 192.561, 18.2562, 395.242, 160.002, 25.6545, 277.682, 44.8341, 3.6194, 64.0872, 145.975, 51.5657, 143.639, 241.318, 16.6696, 22.2736, 979.66, 101.48, 14.9272, 194.998, 272.543, 30.1638, 38.2265, 156.142, 4.26759, 162.979, 25.2755, 123.551, 23.4759, 2.36219, 141.662, 36.5043, 675.211, 135.162, 74.976, 206.357, 20.2907, 205.251, 318.483, 363.072, 1549.66, 74.9918, 77.6235, 730.908, 2267.07, -15.9843, 2228.87, -1.32209, 16.2259, 287.157, 113.905, 28.5838, -71.7309, 6.32725, 59.1934, 103.09, 124.573, 168.993, 274.755, 452.09, 306.868, 62.5394, 2406.87, 759.884, 520.693, 322.543, 99.4452, 69.2543, 82.2784, 47.2046, 302.587, 425.728, 70.1185, 2643.65, 25.8529, 15.5019, -27.9583, 21.1836, -159.404, 411.162, 1610.64, 847.52, 619.837, 55.6259, 11.2342, 129.321, 29.6711, 128.191, 2.12969, 458.098, 967.869, 139.49, 6744.25, 61.7619, 125.268, 63.4657, 70.7754, -29.0252, -4.19204, 91.809, 69.6631, 308.223, 148.843, 1253.53, 95.4669, 58.6777, 7.81241, 103.607, 1040.22, 28.6589, 235.102, 44.9815, 24.0025, 19.831, 212.84, 31.8595, -26.5714, 32.8036, 1424.39, 1609, 42.2412, 3.4899, 146.294, 31.1852, 70.3539, 367.704, 74.8138, 210.733, 73.2453, 290.952, 154.544, 1375.25, 1880.28, 115.808, 67.2951, 125.921, 2.02108, 142.316, 36.4292, 130.832, 87.7579, 13.7819, 62.8137, 131.189, 1762.44, 234.36, 2.26835, 24.7566, 130.982, 267.213, 50.1711, 11.7085, 45.9508, 47.0628, -5.0788, 642.114, 690.187, 1158.76, 224.69, 129.032, 10.1764, 219.981, 320.364, 48.4923, 22.6838, 4.00794, -51.6805, 40.6299, 62.9865, 405.183, 213.955, 349.216, 787.593, 375.517, 52.7782, 576.754, 133.512, -81.2397, 30.8676, 93.9739, 116.764, 0.861936, 27.6728, 110.052, 89.8018, -26.8523, -29.9146, -33.5474, 49.7079, 33.9368, 323.446, -2.84178, 19.3021, 63.4884, 134.071, 91.5641, 27.7786, 94.1995, 219.683, 4.70264, -76.1152, -7.59186, 770.503, 487.319, 190.619, 146.871, 193.463, 1.49736, 433.626, 8.95326, 8.46145, 32.2166, 30.7369, 82.9398, 163.432, 487.778, 308.937, 30.117, 41.7749, 39.3079, 288.488, 121.753, 478.74, 36.5597, 17.859, 50.2198, 371.859, 670.302, 2002.02, 224.547, 64.1557, 0.410534, 1522.33, 91.8752, 293.092, 308.702, 576.066, 6.09243, 32.27, 284.832, 318.128, -0.548151, 16.6889, 722.22, 571.163, 667.587, 45.1672, 90.5216, 47.5207, 17.3392, 314.547, 112.627, 11.9066, 15.2477, 1232.75, 2182.13, 212.534, 2586.28, -28.1626, 273.352, 88.6858, 235.716, 288.56, 147.061, -52.4786, 182.97, 36.2152, 33.1716, 58.5177, 181.279, 70.0673, 393.73, 35.3598, 400.955, 267.019, 65.9631, 81.6932, 14.7923, 16.2134, 30.7927, 42.3352, 235.994, 47.769, 31.4423, 38.7576, 472.087, 36.2044, 52.731, 23.772, -2.286, 110.536, 116.742, 51.7352, -62.9474, 152.188, 124.795, 33.4283, 5398.15, 7.59488, 52.935, 20.0904, 23.8035, 18.3142, 67.9807, 5.85058, 26.2214, 35.91, 61.4678, 26.795, 20.733, 53.9483, 40.4661, 5.0816, 122.23, 255.646, 144.067, 701.339, -18.0681, -50.5899, 46.573, 3409.56, 3670.05, 4113.84, 4652.41, 5529.77, 4934.23, 72.5007, 21.6755, 49.6503, 123.648, 645.022, 405.539, 174.681, 138.473, 76.3049, 41.9885, 175.705, 186.137, 61.5467, 32.3343, 28.5536, 190.158, 19.6626, 1.0001, 19.8489, -3.43857, 126.72, 113.821, 124.49, 48.9977, 1474.59, 6.59068, 26.293, 15.1744, 31.0988, 164.839, 105.427, 15.3515, 7.64309, 75.7023, 58.9412, 426.069, 22.7863, 93.8675, 36.6998, 3752.44, 15.5375, -37.2626, 40.972, 2.83778, 29.8097, 7.85899, 383.393, 8.59187, -14.6747, 22.0106, 314.445, 91.1368, 3.31941, 55.9907, 13.6873, 85.1964, 75.6375, 24.9673, -19.4126, 154.493, 9.51653, 7.00295, 172.512, 54.844, 206.315, 114.929, 161.489, 18.9867, 17.967, 20.58, 16.5985, 317.839, 68.4194, 0.632673, 24.8422, 42.741, 55.0761, 29.1132, -9.59971, 1.92886, 24.2057, 212.31, 23.1776, 46.685, 327.569, -19.7231, 16.127, 102.909, 89.4731, 88.002, 55.5039, 3.78602, 98.7201, 59.1011, 3677.21, 168.304, 97.5727, 62.7741, 6.98695, 7.7722, 287.765, 31.1771, 1034.85, 41.1973, 14.484, 1973.97, 26.3003, 13.0387, 70.2444, -23.7586, 3.61405, 144.866, 12.9588, 12.1978, 228.561, 69.1006, -12.9076, 33.1189, -12.0223, 107.954, 20.2041, 56.6382, 72.1951, 231.902, 4.51244, 59.7258, 97.1518, 14.8023, 1446.33, 31.1922, 17.7331, 23.9397, 34.4429, 275.279, 89.5355, 150.161, 12.1368, 733.126, 33.8044, 32.9493, 428.544, 908.692, 55.2216, 122.623, 12.5489, 234.033, 12.3606, 79.2471, 132.363, 477.632, 48.276, 18.9685, 170.293, 3218.18, 133.185, 71.059, 42.2979, 17.1591, 62.4136, 20.5905, 328.759, 23.5485, 28.9632, 32.4677, 15.6095, 29.6611, 263.733, 83.1204, 10.8203, 0.0645667, 20.8901, 17.402, 2317.54, -1.71971, 15.5579, 175.414, 17.9223, 132.269, 49.3328, 20.0075, 161.866, 96.6339, -1.22723, 28.5114, 69.8331, 19.9071, 3594.62, 184.264, 36.2862, -0.250289, 2657.7, 66.4338, 45.9629, 158.683, 84.2689, 11.0174, 12.8382, 461.884, 1.2479, 186.49, 40.9668, 410.214, 35.1459, 7.58523, 86.1551, 74.4591, 147.043, 50.2503, 155.398, 38.0677, 17.9086, 81.876, 262.617, 923.903, 3372.24, 65.0195, 56.1913, 1989.38, 3297.89, -48.9684, 3520.01, 21.7884, 29.6134, 186.365, 93.1961, 103.971, -22.6964, 8.73567, 93.5217, 99.9293, 319.164, 444.212, 623.513, 437.966, 126.152, 79.5352, 4437.69, 981.041, 287.177, 166.311, 91.5453, 43.8078, 137.337, 17.6704, 163.841, 1149.64, 21.6281, 4237.01, -4.72068, 6.06603, -8.07375, 31.8066, -59.8348, 267.843, 4094.25, 2536.1, 392.48, 30.4019, 16.2788, 103.038, 23.8032, 63.9377, -3.16035, 280.371, 679.892, 60.1188, 5272.74, 36.681, 77.0613, 9.46983, 82.3953, 23.5921, 7.82025, 53.0366, 38.2291, 162.251, 71.3313, 3289.3, 71.1382, 36.5156, 10.9756, 96.3876, 2250.24, 23.9772, 155.927, 11.0189, 32.6098, 26.072, 63.7697, 10.0424, 54.173, 28.7016, 3204.18, 2521.5, 14.6506, 45.914, 140.744, 55.0265, 55.2523, 173.877, 40.5893, 88.8999, 244.048, 208.946, 84.1878, 1234.61, 1959.86, 100.845, 34.196, 121.971, 6.00279, 65.4532, 25.6252, 205.105, 145.486, 14.5797, 28.9883, 418.138, 1054.41, 192.451, -6.77577, 3.52808, 43.4975, 133.57, 29.8818, 5.54331, 28.0327, 17.1614, 4.50518, 438.525, 568.957, 1341.85, 823.083, 11.0206, 5.28213, 145.935, 238.488, 20.9897, 17.3526, 5.4934, -24.8509, 27.9785, -11.0401, 170.731, 60.0793, 147.971, 354.996, 333.375, 37.7786, 352.022, 115.454, -30.8254, 9.93972, 47.3987, 68.3317, 67.7091, 49.2164, 77.5302, 36.9154, 8.39283, 4.92543, -20.5218, -0.730059, 47.7373, 518.214, 9.22062, -24.8561, 49.1153, 105.805, 29.2637, 15.3461, 45.0949, 179.074, 12.3872, -16.1917, 9.87644, 785.672, 164.981, 181.252, 397.135, 215.004, 56.6237, 304.372, 25.614, 65.028, 8.81296, 18.3069, 9.54185, 25.4821, 1084.56, 225.453, 44.6071, 38.2034, 47.3505, 405.11, 80.4995, 317.942, 19.5663, 18.4398, 160.898, 180.688, 313.737, 1445.36, 99.1103, 48.6681, 12.3674, 2653.13, 83.7136, 229.497, 249.714, 488.489, 54.2498, 23.6874, 174.373, 258.626, 72.8444, 5.42297, 3475.67, 259.205, 396.013, 56.4187, 31.3486, 48.0814, 13.669, 168.408, 159.795, 29.286, 0.992278, 1970.63, 2206.93, 93.7185, 4695.35, -8.87077, 220.34, 81.2755, 132.113, 159.9, 87.984, -9.8868, 88.2923, 38.6535, 7.80274, 8.33834, 164.635, 37.4181, 173.935, 21.2248, 218.935, 213.479, 56.9039, 97.8015, 14.2399, 12.0375, 19.7183, 41.1207, 175.64, 24.7875, 23.1008, 31.4041, 456.496, 34.4118, 35.4588, 24.184, 9.00485, 123.767, 149.329, 48.4943, -31.4359, 182.803, 86.0768, 42.3172, 7851.25, 23.629, 64.1861, 24.7383, 11.3737, 13.9659, 67.9566, 26.2278, 8.82339, 25.1295, 95.496, 20.6417, 25.9931, 55.5277, 39.5032, 6.61344, 91.9547, 135.592, 138.774, 662.183, -71.7969, -43.3654, 53.0483, 2500.59, 3411.11, 3853.04, 4628.45, 5465.07, 5404.54, 62.1373, 48.0582, 49.8266, 46.3265, 539.881, 420.27, 121.429, 101.841, 67.6596, 49.3447, 155.066, 240.654, 30.8823, 25.8423, 35.7027, 208.684, 14.2983, 2.92394, 15.392, 7.00862, 159.539, 77.6879, 71.3888, 44.6516, 966.339, 18.009, 14.3594, 16.2639, 32.865, 135.098, 124.688, 10.4324, -158.624, 77.4182, 52.9351, 541.812, 9.68571, 110.694, 21.3595, 3766.64, 11.7948, -41.5181, 32.1378, 18.3991, 44.214, 25.6868, 332.747, 20.8813, -22.3464, 41.9897, 372.205, 89.3285, 0.688826, 47.3014, 7.46991, 87.8979, 69.1955, 24.0044, -5.65372, 178.113, -27.5173, 16.9593, 308.891, 51.437, 180.81, 116.305, 257.957, 28.8561, 41.9913, 9.78746, 32.055, 337.631, 78.1148, 14.6921, 15.7892, 72.4446, 46.0098, 38.0461, -7.25167, -77.7694, -6.12358, 151.401, 50.853, 31.6659, 375.203, -15.4885, 23.6577, 82.6901, 79.2893, 77.364, 64.7703, -5.01044, 70.8695, 109.516, 3949.6, 143.33, 95.621, 43.3468, 17.4263, 0.0576889, 316.743, 36.0296, 1039.75, 20.8679, -7.13015, 2136.31, 32.4043, 35.4223, 57.7617, -19.3941, 15.0063, 137.011, 15.0828, 10.3074, 209.233, 26.6425, 75.8138, 42.3457, -12.372, 129.54, -0.808758, 115.298, 111.984, 277.088, 48.9072, 60.702, 89.4102, 11.8831, 1280.76, 7.54955, 21.8121, 26.8602, 27.1097, 276.223, 69.8056, 141.762, 9.92208, 471.624, 18.7722, 34.121, 330.872, 803.91, 89.2639, 202.322, 17.1598, 204.002, 19.8715, 69.9369, 139.112, 475.68, 38.5653, 10.3207, 179.287, 5019.1, 131.735, 96.5819, 52.7207, 118.578, 66.3749, 11.2237, 262.136, 37.3264, 37.2226, 44.4505, 9.80769, 28.258, 311.98, 145.188, -13.876, -6.60292, 27.446, 52.3413, 1437.92, 14.9031, 6.43931, 191.186, 62.2038, 533.959, 52.2601, -0.812122, 163.045, 97.5818, 4.27843, 49.925, 117.116, 26.2354, 107.634, 183.655, 44.0061, 10.6966, 1861.3, 68.6117, 55.3026, 120.201, 143.756, 24.2935, 7.63267, 273.163, 6.46505, 130.595, 24.3482, 570.118, 10.9965, 18.2516, 73.701, 42.386, 281.665, 51.0993, 156.168, 71.8904, 15.0406, 96.8189, 267.787, 1033.72, 4213.76, 63.4817, 29.8674, 2468.85, 3093.27, -23.3657, 4172.56, 54.6128, 25.3713, 141.131, 50.7424, 64.7935, 39.3548, 9.35458, 97.9677, 77.4194, 36.3783, 56.15, 80.5102, 160.375, 422.177, 186.838, 4189.58, 261.971, 290.421, 145.819, 110.678, 30.1821, 62.6842, 32.8513, 212.074, 1073.22, 14.7815, 4803.12, -52.8976, 9.0613, -7.8137, 12.2626, -79.6776, 256.768, 4118.03, 2597.5, 487.991, 32.4547, 22.1637, 87.9791, 31.6146, 66.199, 23.917, 219.436, 676.787, 66.6259, 6602.19, 28.4735, 96.0434, 31.4449, 51.5631, 62.1528, 14.7575, 38.9174, 50.5804, 226.292, 1.33535, 3972.17, 79.3392, 82.5123, -8.05703, 57.3154, 2779.82, 50.7459, 362.999, 31.716, 45.9685, 32.3122, 83.0068, 17.4939, 25.959, 15.3953, 3793.5, 2909.96, 28.6528, 32.7872, 125.396, 45.0034, 59.3125, 207.221, 67.8755, 95.7511, 134.838, 221.671, 92.718, 953.289, 1358.65, 115.183, 42.0618, 260.924, -5.67053, 106.906, 15.4698, 86.5805, 138.179, 6.36567, 42.2539, 263.136, 1555.94, 152.362, -0.750177, -10.2169, 39.3872, 10.9171, 38.3977, 24.2579, 37.0798, 22.001, -68.9469, 364.56, 513.066, 1020.6, 725.306, 74.2402, 4.32573, 152.556, 149.95, 30.4155, 9.87658, -2.83936, -14.2585, 37.5048, -4.54525, 231.427, 40.9725, 179.04, 472.655, 298.223, 30.6501, 226.595, 217.446, -11.2347, 7.99247, 44.5376, 34.1872, 56.2715, 65.826, 68.4123, 33.5924, 27.0132, -0.932949, -26.6856, 22.9653, 54.7115, 385.224, 52.8945, 4.19935, 39.7645, 126.784, 10.7498, 25.48, 30.5649, 230.8, -49.7404, -19.0299, 0.534617, 761.77, 199.883, 145.558, 381.822, 330.34, 130.641, 331.091, 19.2022, 61.6367, 3.28127, 21.4743, 21.9916, 58.4991, 676.788, 206.801, 256.74, 53.8124, 250.424, 275.746, 49.6752, 682.774, 5.10634, 24.2536, 265.575, 259.757, 114.583, 789.964, 113.886, -120.217, -17.5734, 3283.41, 77.2334, 190.75, 246.745, 438.071, 17.5467, -6.3988, 190.05, 250.068, 65.1947, 22.333, 2626.26, 342.48, 354.569, 97.9919, 39.7226, -4.73579, 71.337, 140.925, 253.267, 39.1377, -0.0626833, 2094.61, 2349.06, 100.454, 5027.34, -5.0921, 197.648, 33.0178, 154.763, 215.446, 74.4776, -30.5011, 71.1762, 78.434, 9.63535, 38.429, 95.5045, 35.9276, 350.806, 41.0651, 155.007, 147.564, 135.608, 90.4838, 34.4874, 4.54978, 46.352, 91.5307, 229.671, 66.7302, 39.7419, 0.398779, 601.335, 54.0765, 60.2642, 29.7032, 13.1253, 165.21, 113.737, 66.3324, -26.3253, 275.02, 143.596, 124.882, 9906.75, 57.0429, 101.061, 38.8725, 40.5822, 37.3897, 85.4896, -16.7811, 58.4851, 49.3878, 74.32, 31.5766, 36.5884, 127.344, 29.8857, 16.9064, 129.385, 134.197, 161.823, 603.143, 14.8066, -24.1965, 49.6252, 1397.65, 2582.35, 4196.47, 1871.55, 2697.63, 3957.01, 52.7505, -1.9, 33.6619, 105.523, 538.821, 404.586, 82.7721, 231.526, 65.5417, 103.837, 254.894, 167.249, 63.5263, 33.6277, 82.7237, 447.998, 22.9679, 17.0239, 6.46696, 14.6832, 173.033, 173.092, 236.388, 95.0014, 1603.25, -4.79112, 14.3931, 12.9168, 45.525, 123.521, 160.284, 63.7235, 52.2413, 115.725, 76.4369, 647.946, 10.8287, 196.504, 30.8472, 2082.26, 24.9831, 7.45908, 29.2904, 3.96332, 63.3964, 5.05391, 523.434, 3.81431, -26.9582, 25.5166, 272.893, 104.55, -3.29841, 29.0413, 34.7569, 123.341, 136.982, 21.1208, 33.4306, 252.045, 28.2319, 46.8118, 460.704, 36.2471, 140.332, 322.058, 301.488, 28.6611, 17.8804, 69.2656, 30.5353, 428.04, 89.2726, 21.6357, 40.5838, 64.8148, 81.0943, 89.0303, 9.78984, 31.5737, -64.844, 181.883, 69.0185, 36.0617, 396.731, -5.39451, 18.3907, 135.384, 99.2002, 102.87, 97.414, 815.247, 102.809, 87.5921, 3294.23, 293.865, 170.835, 57.4489, 14.6789, 20.4225, 467.575, 65.7655, 1022.23, 36.5604, 17.9342, 2621.21, 69.9044, 5.62125, 61.0467, 7.16121, 8.74683, 159.503, -6.5198, 30.0345, 215.707, 242.766, 9.23312, 122.68, -3.09805, 230.551, 25.0568, 73.4859, 148.278, 309.373, 29.2142, 133.58, 161.551, 25.4871, 1284.19, 110.777, 27.8657, 33.4392, 99.1692, 382.291, 180.04, 290.715, 26.878, 1354.88, 49.6606, 32.0053, 100.544, 275.601, 139.466, 145.483, 18.9868, 350.785, 62.5827, 142.035, 166.257, 824.404, 54.5118, 41.2395, 214.626, 2876.39, 117.19, 145.883, 77.1433, 21.0514, 88.9109, 35.9333, 342.005, 31.9545, 92.5985, 53.7139, 21.4681, 27.0079, 421.99, 191.869, 10.0729, 24.6545, 73.4274, -5.67084, 508.396, 16.2005, 20.4873, 199.64, 20.8818, 602.088, 53.0939, 11.985, 283.946, 33.3808, 7.65265, 79.7055, 179.645, 71.8716, 2280.1, 271.502, 18.3756, 16.292, 899.497, 106.102, 36.3051, 172.514, 84.6076, 14.9555, 42.3853, 76.7314, 9.74661, 177.697, 28.1345, 79.7277, 46.0504, 3.37234, 173.442, 37.7323, 281.782, 192.507, 65.114, 54.3543, 28.8901, 207.512, 302.66, 312.493, 2511.98, 115.631, 84.6329, 767.382, 1931.97, -74.91, 2442.8, 6.76813, 9.87214, 280.934, 164.196, 45.6826, -55.5401, 11.0881, 126.062, 188.277, 17.0563, 95.9991, 148.692, 109.747, 149.315, 464.839, 2018.08, 295.362, 520.54, 361.875, 118.235, 39.8868, 76.292, 52.8225, 393.946, 411.312, 82.4469, 3684.05, 5.70422, 15.3688, -18.2261, 20.1009, -139.096, 322.853, 3536.29, 1415.81, 782.34, 58.8639, 19.9128, 172.436, 37.7876, 145.228, 8.84162, 527.972, 978.775, 115.247, 3620.29, 39.7757, 117.731, 73.8482, 82.0633, -8.08212, 8.88042, 114.975, 74.6192, 412.158, 116.883, 1723.88, 140.51, 55.4878, 29.5934, 126.615, 937.356, 25.1989, 80.04, 8.7691, 21.9003, 76.7322, 310.711, 35.1739, -11.3853, 31.0779, 2667.19, 2861.65, 55.9846, 24.2809, 201.009, 37.3568, 245.946, 321.117, 55.7212, 248.928, 83.1845, 301.538, 65.4351, 1978.58, 1469.72, 128.82, 51.2861, 129.685, -17.8222, 135.186, 16.9915, 148.667, 68.2773, 35.807, 130.481, 63.6107, 1220.17, 162.351, -0.850396, 29.6177, 65.2407, 199.876, 45.451, 17.4884, 1687.26, 65.1685, -0.458492, 640.976, 443.544, 1000.16, 530.158, 92.305, 16.7319, 211.431, 421.328, 42.7661, 23.1612, 19.5893, -41.9418, 67.1385, 24.0513, 278.235, 207.151, 354.466, 796.341, 370.781, 12.3542, 340.021, 101.469, -77.2604, 20.2691, 90.9995, 88.3706, 11.782, 31.0455, 105.789, 87.4514, 20.9132, 2.51492, -21.3631, 18.128, 97.4119, 289.648, -0.886138, 6.81447, 81.1169, 197.282, 25.0956, 42.3875, 108.956, 231.877, 11.0389, -81.2323, 7.01839, 732.505, 264.916, 224.387, 218.727, 161.252, 9.47757, 354.758, 11.3622, 18.4517, 28.7067, 31.1141, 27.7379, 123.108, 383.613, 297.234, 11.0615, 90.0501, 89.7434, 345.844, 129.75, 365.013, 29.9642, 33.6507, 64.2794, 272.773, 265.781, 752.182, 223.423, 50.9474, -4.21796, 1864.68, 43.8291, 270.01, 318.279, 587.201, -5.85108, 23.5828, 287.82, 330.953, -2.55689, 16.6618, 1450.23, 567.114, 589.9, 78.5015, 39.0382, 42.769, 29.0629, 276.211, 135.465, 3.88573, 12.61, 912.208, 663.228, 288.022, 3034.4, 189.179, 286.524, 62.3556, 379.114, 292.434, 197.347, -4.49651, 120.196, 27.3089, 59.2932, 68.8523, 178.683, 37.8029, 285.409, 25.2501, 320.904, 258.658, 63.4432, 70.5733, 20.3521, 8.51782, 39.1326, 39.9136, 222.287, 62.9876, 35.1225, 2.98167, 674.334, 48.572, 90.2266, 19.6438, 7.90277, 172.95, 74.9809, 65.8276, -18.7649, 217.385, 104.273, 41.7587, 9269.15, 46.7404, 59.8996, 17.0458, 41.1433, 19.2095, 113.046, 9.25781, 31.0843, 23.1894, 80.0615, 22.9088, 19.8219, 64.5628, 1.59616, -3.92957, 106.196, 198.033, 242.284, 780.726, 21.2847, -37.9727, 33.1548, 3225.72, 3930.01, 4756.24, 5051.09, 5411.19, 5341.82, 48.9417, 18.8431, 77.9987, 61.1681, 579.578, 398.83, 87.6531, 141.597, 54.4746, 44.0052, 148.141, 201.392, 88.0201, 15.68, 32.9481, 203.989, 10.3677, 11.4256, 19.3874, 37.8795, 170.047, 90.0128, 109.125, 42.046, 389.255, 6.18134, 51.0467, 22.6883, 74.2571, 144.772, 122.08, 3.81317, 26.7613, 64.7226, 72.9707, 642.128, 1.42032, 107.479, 27.3876, 4332.08, 12.988, -17.4797, 27.6168, 25.2248, 35.1496, 2.71006, 412.996, -3.03517, -23.2741, 13.488, 429.321, 119.51, -0.0278592, 63.9798, 32.4618, 46.5545, 89.1795, 57.5241, 14.5249, 209.735, -1.74408, 29.3106, 369.08, 43.4709, 173.913, 138.194, 119.037, -29.4263, 6.58678, 50.6164, 25.5873, 368.14, 110.281, 14.0098, 35.9248, 55.6823, 27.6514, 33.9682, -6.56723, 7.08044, 1.08545, 141.452, 32.0375, -66.6585, 422.12, -1.94732, 14.131, 99.5792, 82.1444, 106.177, 92.9003, -10.7343, 53.8349, 94.3465, 4913.77, 163.125, 121.302, 38.5655, 4.60806, 22.7875, 474.352, 57.8392, 1343.88, 37.8733, 11.6468, 2134.67, 20.7209, -0.262148, 60.1439, 9.54504, 11.0515, 85.3045, 17.2096, -10.0328, 249.915, 80.3918, 12.3823, 79.3767, -24.3948, 154.531, 65.6515, 45.5399, 120.194, 286.588, 20.0277, 84.3456, 114.626, -3.70138, 1408.67, 55.6233, 86.996, 44.146, 56.8192, 330.901, 94.1995, 198.394, 20.956, 1004.99, 34.7985, 43.6125, 458.303, 1105.91, 85.4095, 239.99, 14.5133, 367.98, 70.3372, 159.58, 113.518, 627.214, 48.9686, 18.9257, 215.514, 5072.36, 198.417, 108.445, 43.7502, 15.3726, 60.6967, 28.7406, 372.747, 26.8717, 36.0099, 28.4521, 16.6598, 16.615, 395.562, 89.2151, -3.48287, 0.949098, 24.0036, 17.1753, 2020.4, 9.37298, 22.2364, 194.071, 17.2649, 733.02, 63.9442, 12.6841, 161.425, 97.0986, 8.80042, 58.5091, 110.127, 30.2948, 792.965, 185.47, 25.4438, 15.206, 1653.84, 96.7924, 46.6804, 129.393, 139.963, 3.9302, 23.1836, 349.028, -13.9703, 205.086, 23.3787, 565.436, 11.5014, 25.2942, 115.304, 30.4287, 467.942, 78.5613, 332.408, 68.0818, 26.654, 139.279, 305.494, 968.042, 4295.6, 66.1099, 47.9075, 1671.49, 3009.75, -51.6177, 4419.01, 1.49445, 33.3544, 208.223, 80.8896, 109.391, -47.5517, -1.54634, 112.731, 55.4344, 121.317, 126.149, 186.27, 234.836, 431.412, 199.881, 4633.97, 550.201, 313.787, 260.752, 97.9721, 26.1838, 57.8575, 41.7102, 212.398, 1386.77, 42.3915, 4815.65, 7.77927, 16.2139, -14.3346, 7.23423, -36.5622, 382.237, 5040.27, 2787.18, 663.805, 47.069, 13.1205, 120.841, 25.3661, 123.813, -13.3061, 296.745, 768.182, 62.1101, 7337.71, 51.5785, 93.0793, 59.6659, 55.9502, 6.17613, 15.2514, 61.4079, 64.7212, 282.774, 87.2862, 4089.22, 49.6829, 57.329, 10.3485, 66.0395, 2900.05, 26.7714, 179.807, 16.8715, 21.8325, 41.8975, 93.0038, 17.5775, 4.26559, 9.86239, 4223.25, 2841.06, 20.8292, 31.5969, 124.771, 13.3185, 101.18, 220.587, 24.4661, 114.014, 217.8, 222.152, 97.8749, 1328.36, 1628.74, 119.543, 55.8618, 198.105, 17.7912, 131.838, 12.0612, 89.1887, 160.229, 16.6904, 55.4143, 297.18, 1501.55, 177.512, -3.47425, 7.49265, 73.3793, 130.814, 49.1007, 20.585, 22.3491, 28.9578, -14.2241, 477.958, 695.053, 1797.77, 1188.65, 75.4384, 5.40401, 148.423, 168.659, 21.3487, 23.8646, 13.9465, -31.1664, 10.517, 42.0685, 185.579, 127.054, 255.91, 405.051, 452.185, 17.8215, 418.522, 183.725, 20.8731, 20.8792, 31.9397, 62.6096, 5.9791, 17.6778, 64.7069, 30.6733, 17.734, -0.770045, -12.5623, 5.15007, 40.9506, 408.107, 2.22234, -2.07164, 58.2916, 129.924, 57.7661, 16.038, 58.9447, 213.212, 26.9509, -26.1956, -3.61176, 648.933, 272.632, 131.979, 386.255, 313.417, 87.9249, 374.494, 22.2172, 53.833, 46.8675, 49.705, -13.3931, 60.8839, 829.741, 263.664, 171.084, 32.7409, 171.323, 253.907, 105.42, 553.365, 12.8651, 27.5378, 522.891, 439.887, 489.785, 806.483, 135.509, 57.6252, 4.23123, 3305.96, 62.7559, 223.958, 300.78, 586.625, 60.3832, 16.7481, 203.739, 329.75, 29.9522, 2.0116, 2821.25, 456.575, 442.349, 88.1746, 33.6031, 6.54673, 30.7566, 197.82, 212.203, 24.5808, 22.5957, 2147.63, 2914.48, 175.206, 6133.12, -12.2493, 264.909, 81.9187, 120.393, 197.285, 152.217, -14.6336, 90.9128, 37.7668, 16.6599, 31.4279, 138.896, 22.406, 316.208, 22.2439, 244.162, 216.155, 78.2126, 94.5418, 14.1554, 27.2852, 41.7698, 49.8397, 181.522, 46.2777, 28.1342, 17.7506, 540.255, 42.9071, 72.4584, 20.6693, 24.6885, 124.837, 108.469, 45.7015, -34.298, 162.256, 120.737, 49.9029, 7969.59, 30.7302, 77.3764, 36.5985, 29.1573, 30.6495, 108.717, 24.0504, 28.6438, 29.9055, 94.9414, 27.9779, 16.9136, 82.0327, 52.7458, 10.6833, 104.433, 141.173, 155.572, 489.626, -23.2247, -47.1546, 36.6282, 3832.06, 4173.52, 4636.95, 4251.54, 5318.93, 4684.27, 74.8463, 10.7062, 57.8296, 49.8605, 480.33, 427.257, 86.2199, 130.797, 67.4093, 32.5288, 163.479, 189.271, 59.1629, 33.477, 31.8509, 226.835, 20.3279, 7.70438, 17.391, -17.6818, 178.158, 126.103, 106.483, 65.3268, 192.701, 5.72163, 7.87614, 17.3802, 7.25462, 107.479, 130.882, 19.0447, 22.8006, 95.6079, 64.857, 540.998, 2.98843, 104.51, 13.8843, 3127.05, 15.1634, -20.1506, 31.8186, 9.41495, 62.762, 2.31336, 318.532, 15.8975, -31.2221, 28.2393, 358.525, 113.643, 2.6089, 79.5849, 27.9021, 72.6205, 118.595, 19.8483, 11.0152, 192.243, 44.7104, 40.9957, 309.898, 68.6476, 141.44, 175.615, 212.777, 30.6944, 10.4933, 17.5478, 17.2951, 284.513, 115.904, 7.71463, 22.3834, 63.3352, 51.9875, 41.5452, 5.70349, 17.5473, 3.36623, 196.457, 32.0315, 40.8864, 390.245, -6.20708, 18.8825, 107.995, 89.682, 83.529, 86.4903, -14.662, 80.7351, 77.1165, 4714.97, 174.416, 125.587, 34.9933, 15.3988, 7.72275, 373.108, 58.9034, 1091.26, 22.5644, 10.6076, 2825.84, 31.0684, 3.06087, 66.2265, -12.3439, 18.2999, 156.12, 3.64407, 8.4741, 202.573, 99.9544, -3.61491, 66.551, -4.67678, 143.992, 7.87179, 102.047, 112.608, 232.685, 16.5717, 65.0425, 101.624, 15.5074, 1336.5, 28.023, 19.2818, 21.8167, 54.3966, 319.706, 103.576, 203.31, 3.55299, 1068.35, 28.3274, 26.3981, 252.545, 703.073, 54.1925, 217.043, 6.1789, 257.203, 51.0011, 122.56, 104.892, 669.295, 55.4482, 14.6155, 192.87, 3837.67, 164.49, 98.1155, 44.7301, -3.83686, 65.8807, 15.7527, 224.901, 35.5609, 42.3085, 38.2248, 23.7824, 36.5926, 329.908, 151.346, 2.20718, -6.77795, 32.9619, 9.10169, 1484.18, -1.97644, 9.40026, 184.919, 18.7039, 675.331, 80.7041, 7.85682, 157.12, 292.043, 5.51988, 54.3092, 113.512, 22.944, 0.00333823, 203.611, 18.8989, 15.0135, 1072.25, 84.0077, 45.5236, 166.489, 143.034, 16.4508, 24.3721, 270.51, 0.128169, 231.787, 15.2198, 491.515, 56.7006, 2.14923, 76.0331, 25.3416, 315.647, 60.7932, 93.3669, 61.774, 24.7379, 142.502, 273.436, 559.009, 4565.57, 91.3635, 51.3326, 1216.42, 2264.58, -10.6544, 3693.04, 2.36806, 7.91398, 182.291, 68.3882, 99.9411, -29.8436, 13.0513, 111.624, 60.5107, 56.3676, 43.5945, 57.6264, 92.3869, 222.841, 117.365, 4733.16, 154.346, 378.059, 194.359, 111.34, 23.7334, 109.848, 32.1758, 206.46, 1041.33, 5.56239, 4024.79, 10.4667, 14.2839, -17.2184, 20.4523, -79.7605, 264.947, 3918.19, 2872.76, 628.093, 39.0135, 18.5584, 137.049, 25.2468, 99.8514, 6.99163, 309.396, 812.051, 55.7119, 4544.12, 43.3877, 91.4044, 34.6002, 32.6657, 24.6652, 10.2426, 54.852, 57.2348, 303.057, 87.6017, 3190.4, 67.4407, 62.8154, 6.78031, 73.504, 2679.17, 14.6392, 132.44, 29.5628, 33.7716, 29.6722, 115.932, 23.4293, -5.8544, 14.3031, 3444.45, 2869.71, 28.9977, 4.27229, 186.639, 28.0031, 89.4065, 246.739, 48.2378, 103.241, 161.446, 270.958, 125.482, 1006.52, 1669.62, 164.343, 60.0043, 163.457, 3.32663, 74.8823, 21.1182, 150.393, 153.827, 23.2867, 39.983, 295.462, 1489.4, 198.153, 8.37534, 9.11512, 77.9832, 116.607, 81.8224, 30.7223, 19.276, 26.9488, 2.9106, 411.878, 445.727, 874.957, 500.034, 69.2402, 32.9342, 150.361, 151.8, 31.3103, 16.5552, -3.76102, -45.0008, 54.7287, 41.5445, 218.859, 119.3, 216.473, 601.634, 417.205, 16.8544, 385.101, 92.1054, -34.8347, 7.67655, 20.2027, 62.5156, 19.8893, 36.8451, 84.4214, 43.7161, 20.6758, 14.1665, -17.9138, 3.66986, 51.094, 386.478, 2.78177, -23.3501, 85.6016, 106.723, 24.712, 19.2536, 63.4195, 141.174, 4.08547, -40.6516, 5.0975, 852.823, 297.981, 185.162, 353.931, 197.236, 51.9685, 254.8, 21.2191, 23.4201, 19.4266, 15.4119, 6.83701, 57.5619, 788.663, 192.798, 92.6476, 58.0558, 103.424, 402.939, 78.4368, 482.728, 12.8727, 20.3747, 304.571, 280.536, 868.772, 681.686, 154.107, 56.8466, 4.34006, 3009.56, 78.9415, 224.968, 260.592, 495.764, 27.1459, 25.2768, 271.342, 280.424, 67.1491, 11.4204, 2824.45, 379.401, 432.295, 86.7501, 51.2107, 13.8727, 12.0495, 162.998, 144.218, 29.2461, 10.0415, 1747.69, 2279.5, 194.048, 4077.38, 10.459, 267.847, 63.0694, 173.069, 268.178, 108.644, -11.9445, 71.3147, 72.9171, 42.753, 46.8353, 106.018, 39.0425, 297.051, 19.9168, 239.654, 175.866, 83.0943, 75.3455, 20.6251, 10.1616, 80.2197, 63.4794, 177.979, 61.8372, 20.6908, 13.764, 364.233, 34.743, 46.9686, 51.7133, 30.1908, 133.826, 141.43, 74.9533, -37.9804, 199.741, 101.196, 45.6627, 8569.94, 21.5053, 71.6353, 45.2345, 16.2124, 29.3611, 155.95, 17.4717, 6.67245, 25.5961, 84.4995, 34.4475, 27.0618, 87.2791, 53.0348, 22.1029, 83.485, 145.652, 78.7713, 552.023, -7.45341, -38.1208, 52.3868, 951.709, 2054.2, 3593.47, 2363.09, 3394.98, 5280.83, 73.6465, -3.59805, 11.6322, 39.7948, 474.48, 446.417, 83.9094, 82.0596, 4.65439, 25.0958, 132.912, 160.376, 46.9679, 21.0982, 39.5596, 172.825, 57.0022, 15.1321, 6.89282, 10.249, 231.956, 84.717, 162.506, 105.706, 368.552, 20.8338, 3.34395, 22.629, 16.5794, 112.52, 120.17, 25.3857, 18.5757, 76.1544, 56.769, 710.362, 25.2881, 104.82, 17.9295, 2166.34, 33.6051, -68.8391, 27.5807, 6.22118, 87.7027, 11.1385, 226.395, 15.0665, -8.00193, 38.6553, 297.233, 97.0745, 14.7636, 36.9007, 27.4486, 93.4518, 133.967, 1.93178, -31.4089, 125.988, 27.2904, 34.3379, 306.955, 76.0012, 117.52, 127.058, 162.262, 26.3359, 9.83787, 9.8701, 2.59895, 221.225, 120.925, 13.4816, 16.825, 55.9125, 50.2382, 20.5871, -8.9378, -0.825097, 4.93097, 87.2036, 38.8415, 63.1551, 342.044, 1.55868, 43.3275, 59.2687, 76.2816, 54.1066, 35.1053, -18.1485, 87.1477, 69.0928, 3061.22, 142.504, 61.3115, 19.8458, 16.7309, 26.7999, 291.012, 68.0085, 1341.42, -5.03949, 11.985, 2462.38, 33.7193, 31.9753, 87.5545, -0.64562, 23.9027, 118.133, 4.938, 16.1042, 202.256, 54.5443, -18.7757, 42.8026, -23.1493, 109.216, 20.9903, 168.211, 96.529, 255.983, 24.6469, 57.3531, 60.9461, 16.7617, 1194.77, 65.8861, 41.8083, 35.2495, 39.6414, 315.246, 91.0557, 99.0671, -13.6988, 735.746, 41.1719, 47.3791, 177.377, 614.182, 59.8693, 30.885, 22.5553, 243.968, 35.9511, 63.6658, 99.4039, 522.82, 60.6395, -1.66086, 159.967, 4483.8, 129.281, 39.2241, 32.5089, 10.4541, 33.5574, 26.8906, 213.557, 39.2447, 45.558, 42.9064, 41.2092, 25.2691, 416.211, 131.378, 14.8044, -12.8104, 41.5559, 25.2181, 910.831, 43.8009, 26.3252, 154.752, 12.9101, 687.584, 88.6125, -0.336495, 198.312, 94.2741, 17.5389, 51.9669, 88.3272, 36.4551, 461.577, 165.445, 36.2047, 24.8808, 1081.74, 36.55, 23.7109, 159.069, 233.972, 12.9205, 28.5951, 108.56, -6.12013, 191.418, 12.2177, 231.754, 37.0556, 6.70182, 87.9948, 36.1115, 612.477, 84.2877, 40.2468, 80.9183, 20.9539, 127.597, 149.293, 690.077, 3202.51, 68.2316, 36.8647, 2056.22, 2154.64, -9.95432, 3391.38, 25.0875, 8.04776, 165.387, 38.9222, 34.9766, -69.0935, 15.7108, 63.4733, 94.4522, 24.1385, 45.2206, 61.5433, 70.8851, 185.287, 135.227, 2325.45, 147.141, 439.105, 249.862, 60.6961, 28.8159, 67.1284, 0.982107, 222.603, 862.449, 30.9948, 3355.67, 2.58366, 11.8532, -18.402, 13.2898, -102.745, 346.194, 3064.76, 1603.25, 369.522, 18.631, 32.082, 88.5522, 17.4802, 80.5616, 4.62538, 260.651, 728.888, 81.0913, 4699.84, 99.8263, 83.0734, 37.3094, -12.5336, 61.8152, 15.6515, 60.4089, 63.2578, 340.254, 69.8406, 2758.39, 46.0112, 48.4845, 3.00775, 29.5308, 2099.51, -6.78946, 174.172, 9.25558, 45.1605, 26.3615, 156.608, 31.6536, 24.1051, 6.58549, 2570.12, 2601.37, 27.6198, 9.27717, 127.368, 55.0356, 62.7111, 242.408, 37.2933, 89.3639, 80.0193, 181.817, 116.242, 902.432, 1249.58, 80.8068, 52.1335, 136.944, 9.19369, 71.6054, 18.0322, 88.5453, 98.5185, 20.4774, 55.4713, 149.533, 1363.19, 149.736, -1.52306, 4.68956, 110.182, 101.287, 41.1006, 12.8158, 48.2847, 38.6703, 6.17504, 315.271, 417.669, 917.604, 526.949, 86.7901, 5.49079, 143.844, 167.758, 47.3894, 21.3244, 2.5463, -7.53348, 26.1854, 49.2212, 385.217, 96.6181, 210.713, 551.058, 243.31, 15.2205, 219.578, 72.9952, -46.7619, 7.65478, 47.2021, 53.3323, 134.446, 30.1702, 60.0559, 72.6591, 27.7802, 11.7253, -21.2467, 19.6256, 43.3206, 260.447, 22.5582, -12.5203, 83.1298, 100.778, 73.4488, 19.4349, 60.313, 83.9283, 12.583, -42.8756, 6.82419, 793.746, 326.453, 137.1, 256.042, 131.438, 29.7611, 318.512, 13.3918, 13.7316, 27.2708, 54.9233, 18.3137, 110.58, 875.888, 253.193, 40.8993, 44.3985, 70.4717, 352.11, 80.2816, 311.052, -21.727, 20.0393, 70.7562, 179.195, 217.285, 569.148, 198.792, 62.9297, -7.06251, 2414.78, 116.931, 194.218, 159.881, 385.724, 23.8568, 14.4838, 245.611, 197.367, 99.2812, 2.62564, 1601.98, 300.787, 375.428, 117.816, 70.1534, 25.8099, 25.0521, 242.021, 143.848, 24.7516, 9.49541, 1610.07, 1234.16, 100.479, 4545.04, -15.8535, 132.319, 54.0656, 168.764, 231.665, 73.7824, -13.5897, 134.05, 52.493, 13.629, 32.2955, 71.1854, 58.7573, 389.896, 17.564, 159.716, 143.938, 89.3372, 68.5827, 15.9231, 20.2488, 36.4903, 24.7007, 105.778, 54.7061, 27.6193, 12.9047, 620.004, 28.1586, 49.6642, 16.4545, 27.6512, 125.316, 83.1231, 62.1944, -43.3921, 179.797, 108.527, 61.2552, 8328.77, 27.2929, 61.2444, 24.9717, 23.3693, 24.7045, 80.3862, 13.1025, 14.058, 25.7586, 95.8448, 17.5522, 11.7202, 46.8633, 19.37, -3.87819, 97.6268, 126.247, 151.156, 593.651, 12.4314, -33.8106, 22.1085, 4461.43, 5802.7, 6060.91, 4086.23, 5676.56, 5252.6, 113.113, 122.966, 423.178, 48.5391, 711.508, 541.712, 110.042, 165.886, 76.3206, 39.4698, 183.316, 179.084, 70.8899, 29.984, 36.0984, 212.015, 10.657, 12.9578, 12.4452, 9.72711, 135.855, 112.589, 100.713, 43.1201, 65.7495, -4.33284, -0.353979, 9.78135, 2.40246, 113.384, 108.119, 15.8645, 16.1352, 77.5753, 28.2062, 550.153, 11.4208, 108.602, 12.7647, 4361.74, 18.7189, -6.71526, 13.7928, 2.6998, 42.8679, 3.04152, 577.023, 6.81695, -33.8613, 28.6891, 323.837, 144.178, -0.204522, 54.4277, 12.9936, 46.847, 61.8186, 15.4617, 19.7307, 233.956, 13.7186, 19.5749, 359.412, 52.5534, 197.571, 141.737, 142.417, 17.3591, -1.58291, 20.88, 16.6252, 239.4, 110.505, 13.056, 4.91238, 48.4446, 26.072, 40.4425, -0.057119, 4.31744, 3.55702, 211.343, 35.0582, 32.3002, 432.547, -19.1825, 9.51985, 84.1913, 94.2885, 123.165, 79.0483, -11.4864, 78.9365, 82.8418, 2930.72, 155.284, 107.217, 39.1289, 26.7801, 9.41311, 385.342, 40.9863, 1405.31, 20.5272, 16.6352, 1806.13, 36.4705, 2.26179, 45.9531, -1.86616, 9.38855, 164.578, -0.27847, 13.6962, 218.181, 120.039, 11.5751, 51.5134, -6.85612, 190.775, 8.15471, 62.5651, 82.6708, 298.427, 18.8969, 55.542, 93.0269, 21.6652, 1345.85, 44.3509, 14.3534, 17.6052, 25.6272, 334.12, 100.373, 178.179, 55.6927, 688.725, 42.0559, 18.2529, 223.116, 530.782, 67.9175, 99.6496, 5.35416, 256.393, 35.4812, 111.821, 92.1831, 531.768, 45.3206, 19.816, 142.631, 4859.73, 249.207, 103.439, 47.2751, 9.05566, 52.3237, 10.8053, 261.957, 38.8147, 29.6072, 39.9453, 18.349, 23.3791, 413.473, 113.186, 2.09751, 7.43113, 11.7495, 12.2955, 1782.61, 19.2064, 14.4603, 209.874, 6.45993, 1194.03, 77.9975, 19.6906, 186.337, 60.5553, 5.50611, 32.9364, 92.4704, 15.2531, 7.7857, 188.105, 11.737, 7.2607, 3617.54, 71.8314, 31.2533, 111.588, 121.778, 15.4925, 10.2916, 373.124, -5.67633, 263.947, 28.3399, 511.64, 28.4413, 0.574707, 68.9702, 20.9132, 272.211, 63.9764, 48.3643, 30.8804, 21.9132, 122.642, 233.14, 1010.75, 5954.55, 69.8307, 43.5644, 685.638, 2882.43, -83.7943, 3310.72, -0.662038, 15.7596, 188.547, 61.6832, 52.9313, -30.2268, 8.68393, 73.6295, 83.5782, 122.053, 276.064, 478.966, 220.497, 100.523, 203.143, 4325.4, 1204.45, 317.819, 165.436, 105.013, 17.2486, 89.6286, 19.6521, 165.066, 1597.74, 32.3071, 3807.53, 8.59767, 23.1666, -12.7933, 8.29188, -76.8493, 250.028, 4850.56, 2571.96, 649.683, 35.8371, 13.2905, 109.861, 18.661, 88.348, -7.57178, 285.068, 774.966, 66.5567, 4813.55, 32.302, 83.0898, 20.6217, 46.1896, -8.74484, 19.2316, 50.1061, 53.0092, 336.649, 52.5886, 4113.01, 66.7013, 69.1918, 13.2679, 81.2299, 2784.21, 57.2455, 493.228, 51.2349, 22.1017, 24.0103, 74.66, 7.29694, -6.52568, 14.8964, 3829.49, 2508.11, 27.265, 13.3097, 191.151, 52.0473, 59.4327, 508.603, 18.7608, 138.484, 142.005, 208.164, 87.9654, 956.885, 1678.65, 126.171, 33.5949, 209.168, 3.14731, 86.6463, 12.9521, 188.472, 247.983, 14.3525, 45.611, 325.842, 1110.41, 250.488, 0.118744, 15.712, 57.1836, 148.356, 22.0745, 10.0903, 29.8132, 22.3227, -6.73099, 452.967, 642.795, 3101.61, 1906.24, 83.7163, 6.33219, 144.829, 172.174, 16.5198, 6.6039, 11.7319, -15.1945, -8.16856, 69.3211, 183.732, 118.473, 164.074, 496.539, 546.727, 15.4349, 460.542, 112.704, -24.5723, 14.6984, 58.4225, 65.6001, 3.60186, 25.3583, 71.0586, 36.3139, 10.6933, -5.65051, -18.0382, 0.915797, 15.0201, 694.094, 1.26846, 8.0124, 55.5302, 97.4134, 31.2342, 17.4901, 57.458, 106.358, 9.61853, -12.591, 0.139887, 592.938, 241.521, 190.222, 796.422, 507.855, 172.553, 334.769, 14.3157, 50.7952, 8.26035, 20.5055, 19.4919, 78.6369, 1046.35, 367.375, 15.7459, 42.2202, 392.361, 626.004, 94.4381, 293.149, 13.0971, 18.8269, 187.413, 229.444, 475.299, 808.413, 110.807, 57.2558, 1.20242, 3338.31, 58.0464, 235.895, 268.525, 585.18, 0.460327, 25.8225, 365.538, 328.021, 11.4567, 22.2974, 4049.75, 363.501, 443.315, 88.0459, 37.9932, 28.3565, 22.1575, 191.576, 148.362, 10.7204, 9.84052, 881.215, 756.276, 123.841, 3855.89, -7.62355, 227.628, 44.8431, 134.087, 223.436, 95.7585, 9.15849, 75.5934, 34.1658, 19.5753, 35.3076, 69.8382, 26.808, 216.754, 1469.03, 190.992, 182.317, 91.0615, 87.405, 20.1579, 15.7849, 36.4021, 47.4641, 223.689, 62.0684, 40.6454, 13.3902, 569.133, 48.5457, 65.2693, 17.8828, 17.8083, 132.419, 54.7312, 84.2989, -30.5948, 195.324, 109.446, 52.2385, 8663.51, 42.2334, 88.0712, 24.4171, 35.6076, 39.693, 100.474, 21.742, 30.3021, 43.7021, 116.99, 23.6911, 27.313, 84.3709, 49.9739, 13.2802, 217.396, 367.256, 332.381, 930.928, 5.36648, -52.6525, 23.6439, 1362.9, 1763.15, 2298.72, 3454.28, 3828.45, 3727.14, 62.2097, 13.5778, 56.544, 53.5262, 481.904, 402.718, 99.6078, 162.308, 69.0339, 61.0306, 155.209, 206.509, 59.7551, 33.1553, 52.3652, 278.303, 16.0722, 11.0232, 12.9863, 24.7943, 150.402, 139.517, 94.6878, 45.6489, 1290.84, 3.43024, 12.9193, 7.68004, 33.7241, 119.821, 173.552, 34.6971, 31.6987, 131.983, 85.5727, 621.437, 3.78157, 162.985, 18.0843, 1465.47, 17.9788, -9.77655, 19.0585, 4.2578, 48.7836, 6.20112, 465.464, 11.8042, -17.8159, 36.906, 344.095, 117.624, -60.686, 70.5839, 24.5116, 57.8507, 106.437, 23.974, 29.632, 199.984, 23.5255, 18.0818, 465.204, 47.253, 110.568, 210.712, 189.16, 25.4456, 14.1781, 33.2616, 29.6363, 312.489, 112.39, 19.7958, 31.6101, 23.2446, 67.7264, 63.1741, -1.28236, 15.6809, -22.4669, 164.455, 35.2809, -16.8447, 308.41, 15.6924, 13.6633, 108.893, 89.4569, 97.3631, 80.1768, 353.866, 114.01, 75.672, 1931.77, 216.261, 154.741, 24.8446, 11.0583, 10.2016, 437.672, 44.1626, 1150.15, 33.3331, 25.9648, 2849.15, 56.2084, 21.5655, 61.6313, 0.5633, 6.6802, 142.206, -1.52441, 14.2807, 227.428, 154.188, 2.73304, 135.888, -6.55262, 146.762, 13.6927, 59.0275, 149.335, 322.438, 18.4279, 131.005, 124.646, 12.9452, 1413.51, 63.8342, 15.1334, 24.8349, 53.312, 329.991, 112.056, 260.494, 15.5461, 1383.65, 37.1371, 26.8427, 243.959, 606.582, 98.9069, 61.6406, 16.9089, 340.449, 49.6253, 149.616, 120.192, 667.523, 49.9381, 24.8398, 225.262, 3546.96, 136.091, 121.874, 51.4883, 8.84598, 69.2017, 20.1963, 285.056, 41.1304, 47.4723, 45.6532, 21.6557, 34.7265, 446.774, 84.824, 11.7275, -7.08199, 48.6305, 28.8085, 1075.68, 12.0825, 25.3304, 192.562, 26.608, 392.937, 66.2018, 6.86363, 251.672, 91.9728, 22.2643, 74.2767, 126.254, 37.9815, 209.963, 191.709, 12.6392, 6.46965, 1395.67, 95.0177, 42.7501, 125.366, 101.043, 24.6033, 34.9832, 459.64, -2.3563, 194.104, 32.6242, 208.027, 104.251, -0.780733, 105.502, 37.781, 291.185, 1161.23, 235.632, 46.5727, 27.6308, 159.657, 300.935, 557.992, 2116.27, 1054.46, 73.9035, 1217.01, 1460.15, -88.8, 1992.36, 6.53622, 5.29332, 225.701, 125.598, 116.968, -27.5739, 9.55741, 179.675, 89.3978, 88.787, 315.728, 345.216, 335.878, 168.616, 439.822, 3306.11, 1049.26, 547.481, 286.447, 99.1406, 38.4488, 114.556, 45.9393, 273.941, 1111.15, 39.4502, 2902.01, 6.15638, 23.0667, -14.1021, 9.35298, -116.857, 452.608, 3544.92, 927.414, 756.701, 41.3498, 23.6982, 211.032, 35.4816, 123.105, 23.9056, 353.035, 743.73, 79.2366, 5514.38, 42.0635, 127.181, 44.6466, 43.0307, -0.20449, 19.4447, 66.9031, 55.2938, 399.75, 81.2312, 2672.37, 64.994, 67.4257, 10.9589, 71.4969, 2093.8, 14.6523, 28.02, 34.3509, 21.8848, 29.0589, 128.662, 20.666, -1.34474, 21.2585, 1646.82, 2867.21, 37.065, 42.8606, 207.514, 26.1821, 153.811, 274.655, 45.6786, 170.145, 173.887, 234.359, 60.399, 1349.8, 1600.49, 78.0854, 43.6012, 203.56, 6.03428, 131.07, 26.5348, 97.5548, 161.412, 16.7075, 71.5095, 280.713, 1207.67, 155.317, 6.33112, 30.6113, 62.8205, 164.324, 47.1694, 16.4894, 24.9893, 38.3245, 1.62452, 499.28, 442.922, 1074.38, 605.84, 60.6398, 16.3385, 188.24, 272.834, 30.0742, 22.7793, 6.38199, -41.293, 37.8102, 33.2661, 223.882, 126.257, 295.781, 524.562, 420.12, 16.3514, 287.683, 95.448, -39.3764, 15.5204, 65.131, 69.1624, 7.15867, 23.082, 106.437, 53.8414, 13.3305, -0.569408, -24.9162, 30.1215, 80.6879, 429.743, 7.23502, 6.9824, 55.0579, 178.074, 15.6577, 58.2782, 66.9708, 163.589, 9.62151, -61.7727, 1.91402, 805.173, 262.389, 80.9406, 322.827, 125.727, 18.9264, 204.438, 38.7136, 40.4771, 13.2167, 31.9875, 5.56237, 82.045, 542.137, 304.213, 40.4456, 57.2924, 116.115, 283.383, 88.494, 402.55, 16.2518, 16.7579, 245.128, 287.116, 367.802, 1390.38, 175.099, 55.0086, -3.22419, 2509.98, 49.9448, 240.87, 250.352, 577.222, 17.2906, 10.8333, 290.135, 354.61, 3.13894, 47.0525, 2374.41, 394.607, 452.372, 57.5241, 42.6069, 40.0522, 20.0476, 202.874, 146.704, 18.5251, 8.70428, 747.181, 746.294, 210.542, 2534.57, -4.78982, 265.571, 47.9046, 255.362, 222.945, 202.534, -1.89679, 75.6935, 108.222, 31.3858, 47.6782, 134.868, 18.6868, 315.229, 23.4902, 256.412, 183.381, 95.9377, 84.4581, 27.8139, 14.3276, 35.3054, 47.3578, 183.585, 40.6705, 35.5333, -6.86196, 520.495, 36.3279, 80.8682, 16.4829, 12.1731, 101.991, 83.9226, 48.5502, -37.918, 182.143, 109.243, 72.062, 9703.19, 33.9123, 59.607, 11.2079, 28.1836, 29.3086, 87.4065, 12.4074, 33.7019, 34.2866, 60.5425, 28.0745, 8.17936, 56.7914, 43.755, 1.30735, 380.761, 949.318, 873.601, 2133.17, 8.94132, -49.4911, 13.8909, 3635.18, 4155.44, 5029.35, 5097.63, 5885.63, 5158.47, 76.3571, 40.6937, 129.156, 44.6594, 532.827, 407.366, 150.024, 166.733, 79.4228, 52.9089, 146.577, 212.089, 58.6137, 25.1409, 57.365, 218.192, 22.9141, 9.60791, 16.0146, 16.0711, 193.675, 131.629, 90.5224, 78.5255, 2666.04, 1.83676, 107.723, 8.9607, 166.211, 87.4163, 137.844, 58.0048, 18.4808, 84.3373, 69.2211, 501.736, -0.0219398, 110.627, 27.8748, 3428.02, 18.2661, -0.552943, 9.04877, -7.55392, 34.7136, -22.0775, 438.31, 8.01353, -10.6556, 11.7081, 286.784, 142.977, -1.75306, 92.0008, 17.9923, 43.3699, 69.9862, 7.03824, 15.2385, 266.447, 13.9918, 44.109, 343.971, 106.388, 193.132, 259.72, 146.305, 27.5627, 11.8241, 28.1245, 10.5465, 298.405, 72.1411, 8.54124, 19.1003, 28.5318, 19.2189, 50.9797, -6.94101, 12.6264, -19.0878, 132.13, 32.4503, 34.6964, 356.571, -4.75583, 15.0408, 90.0344, 83.563, 72.9321, 89.6479, -9.24438, 112.635, 89.945, 4708.72, 307.156, 106.495, 35.6991, 21.3087, 11.8785, 403.283, 45.9825, 1190.18, 17.3389, 12.962, 2253.57, 26.0812, -9.33715, 45.8318, 4.25198, -0.235197, 95.423, 12.242, 21.7191, 207.132, 110.167, 18.8907, 62.423, -2.17878, 188.407, 4.73582, 57.3755, 91.7946, 346.722, 5.35646, 88.8214, 112.848, 12.5417, 1366.66, 55.1934, 13.0844, 33.9986, 60.4339, 318.644, 107.152, 207.756, 10.0655, 908.623, 24.9347, 30.1607, 784.132, 1581.78, 61.0361, 208.332, 9.41051, 272.553, 35.7506, 287.011, 130.155, 675.119, 37.0291, 27.0153, 197.177, 4754.66, 130.537, 106.092, 67.2723, 6.46507, 102.061, 32.6796, 343.667, 49.9468, 37.6753, 17.743, 23.795, 28.4899, 391.945, 100.785, -5.28743, 24.6998, 36.4727, 5.44548, 1542.53, 15.6564, 1.72514, 175.246, 16.8081, 592.958, 58.0536, 16.8238, 196.898, 173.092, 19.4727, 32.409, 157.622, 40.8702, 1926.03, 209.951, 19.1415, -1.09743, 1946.8, 90.6256, 54.4008, 133.856, 87.6597, -6.63018, 31.2292, 373.655, 4.77085, 326.268, 36.6104, 415.757, -10.3339, 5.03371, 145.241, 98.7188, 232.926, 65.1305, 305.526, 39.0101, 16.5698, 133.832, 318.781, 1051.04, 3344.31, 57.0384, 52.8896, 2427.39, 3146.21, -33.1885, 3671.85, 53.1269, 0.677284, 226.086, 112, 58.5344, -26.5842, 14.5561, 69.9531, 57.5755, 159.83, 196.863, 377.648, 271.063, 130.595, 473.57, 4174.7, 926.876, 384.274, 269.828, 174.097, 8.58941, 98.2331, 31.5614, 230.974, 1317.19, 34.6345, 4225.96, -7.23611, 32.0804, -8.18457, -19.4876, -79.0781, 318.325, 3938.1, 2173.5, 627.963, 36.4799, 30.1577, 104.443, 20.5033, 100.631, 11.327, 310.695, 737.578, 93.6738, 6463.77, 28.3647, 78.8394, 40.2777, 41.681, -9.14832, -1.23541, 59.2399, 39.7863, 330.049, 51.3537, 2981.12, 48.1936, 44.3643, 2.1581, 71.4727, 2383.25, 25.6787, 195.431, 18.1804, 18.4473, 13.8278, 89.4967, 13.0111, -36.4418, 14.1874, 2983.45, 3025.66, 27.0738, 100.308, 166.18, 19.0582, 73.1515, 268.685, 35.5036, 137.303, 194.318, 233.562, 76.5329, 1958.33, 1834.38, 83.1306, 43.8636, 188.715, 4.5986, 86.2513, 14.9692, 37.6332, 80.6467, 8.96311, 46.4031, 361.995, 1489.12, 152.357, -11.4613, 42.1186, 60.9955, 145.517, 49.2345, 22.0977, 26.0827, 29.9162, -4.43161, 498.882, 516.328, 1400.31, 753.996, 67.8413, 11.8069, 128.401, 314.835, 15.3117, 14.2839, 5.99399, -27.0365, 25.2353, 26.3329, 205.1, 108.31, 208.561, 440.486, 485.368, 24.4458, 332.205, 108.732, -33.8566, 3.19337, 64.9522, 71.5209, 4.01805, 36.4773, 88.9457, 39.8483, 21.7754, 1.84143, -20.8023, 9.08591, 48.9682, 312.86, 2.54359, 10.9099, 39.17, 141.846, 40.0549, 26.9255, 54.3649, 213.655, 14.2068, -21.6539, -3.26063, 610.592, 240.758, 181.643, 705.632, 323.292, 112.908, 669.242, 21.5416, 77.7138, 9.21672, 28.6409, 8.29647, 52.3091, 1202, 299.665, 181.463, 49.5697, 118.863, 366.126, 99.5636, 271.68, 22.9561, 21.5974, 330.821, 275.754, 551.549, 755.334, 142.136, 45.7811, -6.41456, 3184.69, -7.71132, 269.67, 334.009, 579.92, -11.1694, 37.5901, 224.289, 312.906, 23.2579, 14.2944, 2260.91, 453.288, 511.297, 63.2891, 35.8314, 36.5171, 21.961, 165.049, 126.496, 17.4001, -4.83672, 2869.42, 3314.75, 216.978, 4321.76, -3.40488, 302.999, 55.3171, 215.658, 234.406, 229.894, 2.80647, 51.6358, 46.0148, 30.7832, 36.3961, 104.452, 28.7967, 270.453, 10.2954, 299.513, 298.381, 179.845, 87.6806, 32.7911, 15.9488, 58.6239, 58.1331, 192.221, 53.2711, 57.5078, 21.5091, 401.43, 57.8427, 53.4837, 6.53565, 26.9214, 204.75, 103.289, 74.191, -30.488, 144.421, 107.088, 36.6448, 6945.46, 26.3551, 72.2323, 34.9787, 31.9271, 39.3662, 88.351, 20.2063, 47.751, 39.3882, 93.421, 38.4229, 24.4473, 97.0614, 48.2842, 20.4114, 149.48, 91.9974, 99.0099, 489.616, -47.5854, -50.1208, 40.9994, 2056.61, 3297.7, 5375.36, 1481.99, 2634.74, 5005.51, 58.5187, -2.27154, 49.6001, 104.546, 589.112, 435.819, 197.43, 162.421, 88.937, 59.6806, 220.031, 148.895, 145.55, 38.3616, 130.29, 441.142, 22.7215, 5.45075, 0.541475, -2.7933, 143.731, 151.581, 122.392, 64.1095, 241.961, 9.33198, 2.84321, -0.0813966, 13.0512, 137.274, 152.312, 17.9966, 24.0255, 56.6119, 19.8654, 602.892, 18.9863, 128.256, 5.18994, 3225.78, 20.0576, -22.8684, 24.0201, 23.255, 52.3609, 9.78681, 378.532, 7.86409, -10.9199, 39.3368, 509.703, 98.3465, 4.3278, 30.9841, 15.7241, 72.934, 131.086, 17.678, -8.3158, 206.659, 15.5542, 30.9563, 526.82, 40.1954, 157.392, 186.118, 463.845, 25.6804, 18.7586, 30.2144, 26.5379, 426.224, 72.4541, 27.7973, 43.7178, 38.8451, 29.4314, 65.894, -1.37091, 17.5584, -18.2047, 175.757, 43.0175, 59.291, 360.72, 2.91078, 8.54141, 144.081, 107.063, 115.136, 118.639, 14.3273, 78.5512, 77.0416, 3784.57, 205.474, 129.544, 46.1631, -6.58117, 6.7294, 407.759, 50.2326, 732.503, 31.4596, 22.3868, 1987.59, 135.708, -2.7049, 85.6406, -1.73791, -0.253871, 128.843, -3.70685, 48.5898, 210.508, 211.484, -16.6187, 69.303, -20.0826, 159.374, 28.6098, 45.1189, 138.511, 418.071, 24.5252, 58.6564, 113.994, 9.71542, 1149.7, 62.2579, 28.4784, 50.1206, 53.1632, 382.944, 205.593, 292.019, 4.40127, 972.107, 11.6381, 33.2306, 137.403, 382.1, 107.61, 274.315, 3.02641, 402.868, 51.989, 161.62, 144.589, 700.349, 72.0878, 12.6023, 195.966, 4706.92, 92.8416, 92.2657, 41.3558, 7.73853, 70.9883, 18.9096, 306.337, 35.7701, 77.9582, 44.4995, 22.9144, 39.9449, 370.19, 129.158, 18.4312, -3.72863, 33.1532, 16.5481, 750.471, 15.7297, 17.9517, 227.91, 29.0455, 1137.05, -10.154, 17.0133, 205.213, 27.6867, 9.59297, 64.6394, 171.64, 20.2732, 551.24, 215.793, 22.2288, 13.2424, 2093.72, 118.054, 55.8656, 181.877, 114.434, 25.1648, 37.2732, 199.615, -2.11748, 194.627, 20.2581, 225.932, 125.897, 14.3432, 97.1932, 17.4086, 236.933, 73.5888, 59.5797, 55.2935, 22.0871, 195.733, 225.552, 383.538, 4529.62, 88.9723, 147.116, 818.793, 2845.39, -117.257, 3771.48, 9.29057, 40.9826, 197.999, 138.397, 98.8488, -66.7108, 18.8726, 147.691, 59.8272, 155.593, 127.694, 169.62, 116.026, 124.979, 123.351, 4635.37, 489.761, 411.588, 329.29, 94.3519, 36.1513, 92.763, 33.1402, 247.683, 589.211, 17.2803, 5472.93, -0.0945169, 20.9166, -16.4756, 4.16099, -103.032, 310.225, 5160.17, 2308.51, 711.944, 67.0825, 26.3465, 252.606, 30.0716, 81.0213, 10.7387, 415.856, 831.018, 77.574, 5768.87, 38.7843, 188.789, 57.3272, 19.5062, 4.65378, 21.8456, 59.9341, 55.3942, 286.712, 145.81, 3762.74, 125.689, 65.3176, 63.5216, 114.212, 2204.63, 105.805, 734.733, 21.1044, 31.2069, 24.5646, 141.729, 14.2803, -0.0164678, 7.31915, 3652.55, 3571.21, 18.3819, 23.5022, 126.492, 57.9871, 378.767, 275.041, 86.5916, 194.384, 84.5018, 268.68, 66.6054, 1165.89, 1102.24, 131.127, 39.04, 127.934, 6.77768, 93.8452, 36.2621, 244.989, 113.863, 19.5587, 83.6092, 90.1186, 1144.37, 222.243, -0.112485, 3.04715, 39.3341, 174.551, 9.39525, 8.86476, 34.0683, 38.2249, 21.4314, 534.847, 423.109, 1412.79, 1009.59, 69.7896, 5.09325, 184.737, 197.544, 19.5185, 1.42929, 0.732096, -25.099, 48.13, 22.9186, 194.558, 133.921, 302.006, 589.515, 316.913, 6.54445, 244.15, 140.078, -54.1407, 5.48896, 54.3901, 49.1413, 32.6048, 35.0332, 115.283, 45.2265, 21.2021, 2.61183, -23.157, 23.1803, 60.5066, 644.764, 7.54052, -10.2434, 80.3851, 120.091, 28.2656, 38.8046, 69.4305, 211.22, 16.6813, -51.1497, 15.4236, 773.751, 236.359, 220.25, 444.252, 197.603, 22.1516, 163.368, 4.38515, 32.3105, 21.5567, 34.8164, 7.38586, 83.7836, 690.248, 289.526, 55.7817, 58.9882, 376.087, 409.305, 135.194, 479.253, -7.37725, 0.122464, 93.6764, 187.529, 100.787, 663.026, 156.812, 46.7963, -3.89443, 4278.74, 53.7028, 236.132, 274.988, 476.378, -19.3199, 32.5085, 185.91, 297.545, 21.7566, -28.1106, 3377.88, 361.914, 433.109, 63.4572, 54.1816, 33.141, 18.6417, 195.832, 131.329, 26.9925, 15.6661, 2709.4, 1378.63, 237.151, 4236.67, -12.2979, 277.669, 60.6225, 364.282, 250.075, 168.212, -24.2041, 93.1122, 16.1807, 38.0609, 49.8754, 118.717, 32.9751, 239.852, 20.653, 237.043, 310.96, 152.467, 108.032, 33.5292, 14.6753, 114.062, 104.122, 305.567, 107.237, 41.1337, 3.10536, 757.495, 83.1914, 108.545, 42.4696, 40.3873, 265.771, 140.76, 74.7106, -54.5634, 316.037, 188.792, 94.3601, 9186.23, 70.3766, 131.602, 56.8246, 40.0859, 48.3323, 187.831, 40.0367, 63.2577, 23.5424, 133.267, 40.1676, 26.7121, 157.43, 93.5228, 27.2889, 195.412, 267.395, 209.605, 582.488, 25.0043, -29.4005, 41.4228, 1071.56, 2141.77, 2913.78, 4131.25, 4546.89, 3987.55, 60.5533, 8.11091, 70.4294, 91.2818, 621.923, 558.21, 86.4503, 157.802, 72.6112, 46.4297, 176.787, 196.865, 92.815, 50.2916, 85.7762, 331.161, 48.8162, 20.6512, 10.9181, -0.905975, 233.632, 204.266, 172.993, 103.938, 1614.46, 20.4997, 12.0684, 15.2499, 37.1182, 133.572, 145.011, 29.0069, 20.7526, 72.8516, 102.421, 734.952, 10.8608, 148.424, 14.2887, 1699.09, 40.0938, 4.5551, 22.2042, 20.2862, 66.5785, 8.12938, 438.409, 9.16017, -26.0217, 40.6845, 334.96, 166.697, 11.0599, 85.3465, 65.1488, 70.9823, 226.982, 18.595, 30.777, 213.079, 17.112, 47.8895, 488.479, 80.2266, 206.459, 170.515, 305.913, 59.6001, 12.9898, 66.436, 38.64, 452.142, 147.568, 31.2212, 39.9977, 86.5661, 37.2774, 76.2522, -5.98051, 26.4634, -30.1757, 144.372, 65.8211, 61.777, 448.511, 17.0231, 39.0015, 141.992, 107.897, 105.584, 80.5216, 203.611, 79.6198, 110.707, 2188.94, 418.162, 185.003, 40.7064, 16.2165, 13.4062, 427.505, 93.5351, 1818.93, 62.4827, 16.2637, 2446.46, 70.9351, 19.1831, 99.676, 2.48638, 27.4741, 141.248, 27.3096, 25.9065, 252.931, 113.078, 6.87179, 116.856, -18.8597, 147.415, 36.6545, 109.731, 120.15, 318.348, 22.4257, 107.673, 135.75, 42.688, 1507.05, 64.8156, 12.377, 38.9106, 72.865, 483.677, 150.884, 183.042, 30.0473, 1264.23, 67.7055, 43.9821, 83.8563, 235.309, 83.3796, 153.38, 21.2252, 339.996, 64.6378, 173.331, 98.6056, 743.576, 87.6906, 50.6009, 267.82, 3831.35, 133.764, 103.796, 65.1927, 4.23406, 102.03, 38.5771, 412.567, 80.7445, 84.7391, 66.967, 51.0009, 26.7375, 480.525, 124.697, 10.7221, 27.7304, 59.3173, 69.1332, 415.189, 34.8442, 30.0275, 196.203, 8.14025, 170.304, 111.209, 9.7514, 266.524, 49.1039, 18.0585, 63.3793, 193.721, 30.783, 120.978, 227.752, 11.044, 14.0334, 1425.13, 63.0943, 42.0432, 197.522, 223.889, 22.6631, 51.5177, 250.103, -4.79409, 200.241, 16.6868, 102.159, 22.8715, 4.64345, 209.266, 49.3408, 468.176, 106.673, 172.501, 43.7646, 34.6348, 216.858, 260.969, 302.636, 1863.93, 111.276, 81.7995, 685.466, 1808.08, -10.9104, 2189.63, 17.3143, -0.330623, 290.932, 141.705, 11.9967, -93.7383, 17.2784, 47.8672, 113.007, 68.5187, 60.3833, 107.685, 111.365, 95.6294, 16.0335, 2125.74, 189.074, 403.838, 266.738, 106.865, 34.9085, 106.845, 66.5682, 325.85, 296.042, 63.2891, 2926.16, 14.8828, 25.1732, -18.4655, 14.9405, -182.623, 345.625, 2151.06, 622.274, 515.647, 40.7728, 28.5061, 117.372, 35.1721, 121.707, 12.6398, 452.022, 1037.91, 99.5648, 6397.87, 83.2929, 112.015, 70.6735, 42.6805, 75.0421, 24.7328, 117.228, 67.4218, 359.033, 98.0862, 2005.45, 57.4873, 57.8876, 7.38197, 77.2251, 677.15, 30.288, 81.2351, 32.8085, 35.7945, 29.5189, 151.22, 48.3396, 7.56941, 33.6318, 1287.71, 1373.77, 45.7599, 31.5629, 109.559, 54.1209, 111.934, 339.228, 72.705, 131.702, 71.9102, 263.616, 120.872, 1364.11, 2092.8, 87.4137, 56.3817, 95.6377, -4.18302, 130.424, 45.2359, 187.043, 65.6953, 18.7438, 55.2051, 105.641, 1499.26, 167.485, 2.11053, 21.5399, 117.773, 217.44, 51.3506, 18.8601, 40.4956, 53.5845, 5.83571, 660.491, 664.955, 1574.65, 478.21, 129.376, 15.2661, 260.743, -8466.18, 49.5091, 33.2026, 9.27869, -61.5478, 66.153, 40.8323, 360.081, 178.816, 218.49, 485.663, 352.142, 25.7411, 348.956, 149.195, -85.781, 22.1877, 74.7517, 88.4789, 2.98481, 41.6607, 87.5974, 80.5128, 40.4506, 2.68361, -41.1939, 30.8733, 64.0993, 310.536, 16.2474, 16.2138, 48.1475, 178.396, 26.3308, 32.5856, 77.08, 161.854, 39.5347, -79.1266, 7.97024, 791.045, 366.511, 245.5, 77.9898, 164.441, -4.43778, 290.684, 3.41354, -0.254222, 34.5304, 48.6374, 14.6504, 4470.95, 319.764, 203.609, 28.2099, 53.0766, 55.7597, 257.995, 149.451, 354.238, 69.3679, 29.4672, 93.0593, 319.169, 169.189, 983.872, 237.993, 57.6727, -2.76582, 1531.69, 33.0223, 262.881, 253.669, 772.192, -2.05733, 30.0128, 262.16, 321.552, 6.10686, 18.6129, 889.943, 504.265, 567.512, 93.0405, 88.32, 58.962, 30.366, 271.145, 149.116, 27.7497, 28.916, 1564.67, 1988.77, 229.076, 4052.49, -20.0849, 304.424, 94.6692, 234.158, 280.213, 163.26, -0.523823, 95.161, -5.09898, 35.5848, 51.4191, 218.051, 43.3184, 501.531, 27.493, 287.333, 262.567, 180.834, 134.263, 19.8172, -7.91911, 93.4402, 115.831, 300.689, 119.666, 79.9829, 5.95347, 595.908, 66.6783, 136.044, 41.4669, 17.6882, 317.314, 177.441, 112.964, -49.0879, 269.485, 240.35, 71.4727, 9889.05, 72.777, 136.208, 46.6026, 49.1144, 56.4269, 247.966, 30.2897, 15.9976, 43.3184, 98.5873, 52.8215, 29.895, 104.566, 51.2824, 14.161, 105.061, 121.308, 98.4066, 449.081, 90.946, -3.12303, 52.178, 787.855, 2671.19, 4881.61, 1094.09, 1992.91, 4568.23, 43.1294, -2.45485, 35.8078, 194.779, 1149.07, 472.645, 153.465, 155.811, 78.5674, 67.3687, 196.392, 224.741, 103.921, 37.9265, 121.149, 330.471, 44.5184, -25.7326, -5.03244, 12.0736, 249.667, 152.511, 106.064, 91.2649, 163.929, -15.2783, 22.2097, 32.284, 19.4569, 90.3666, 154.363, -2.0974, 28.5418, 56.7267, 66.856, 807.89, 16.8584, 107.983, 20.4714, 3460.35, 47.6155, -5.06083, 36.6995, 25.7782, 67.9857, -7.1937, 510.066, 8.34297, -22.6467, 17.5439, 409.735, 115.789, -2.30007, 27.6526, 31.344, 46.8879, 149.112, 20.8777, 57.4851, 259.185, 1.47103, 50.97, 345.388, 42.0308, 240.033, 129.362, 257.606, 31.0306, 4.59672, 45.0933, 33.1438, 436.701, 175.625, 33.768, 39.8363, 80.3382, 29.0026, 49.2988, 5.05956, 23.5987, -10.8797, 176.337, 54.4923, 58.8794, 439.405, -3.61493, 38.4084, 128.262, 92.448, 157.364, 96.7016, -26.1654, 90.6717, 132.453, 3486.82, 246.219, 187.849, 15.8017, 16.9958, 3.98389, 506.407, 76.9606, 1854.34, 61.4706, 7.87159, 2154.92, 63.9216, 21.003, 126.628, 15.2875, 14.8456, 155.615, 12.7579, 33.5934, 316.255, 98.0338, -0.155925, 114.746, -1.48718, 154.094, 17.3349, 147.235, 156.007, 418.399, 21.6388, 108.515, 142.459, 24.9952, 1218.14, 11.8222, 7.9083, 37.2163, 85.4512, 491.36, 183.883, 208.501, 50.3986, 1077.88, 124.843, 50.9061, 135.342, 408.804, 99.3985, 192.397, 22.2958, 286.63, 70.1096, 55.9491, 137.51, 721.507, 98.5957, 19.5054, 251.092, 4551.91, 122.042, 152.411, 60.2571, 27.1888, 100.811, 39.2265, 467.092, 64.3961, 76.1911, 83.2083, 46.4905, 18.0486, 489.009, 74.2649, 4.50381, 29.8879, 49.1869, 0.631129, 1000.79, 11.3707, 18.8654, 238.469, 23.2369, 718.064, 89.7505, 9.75831, 170.33, 28.7157, 8.9678, 112.746, 78.4019, 25.9762, 169.867, 206.853, 23.486, 6.17877, 1152.77, 192.186, 58.7668, 225.352, 306.653, 30.2744, 32.5775, 69.0377, 8.76418, 167.482, 12.9271, 212.637, -13.1019, -10.4586, 155.464, 56.8248, 599.134, 92.2997, 51.1154, 33.7343, 23.6795, 203.75, 179.768, 436.384, 4338.32, 118.207, 111.672, 1810.67, 3395.32, -38.9316, 4429.26, -5.22744, 14.8681, 271.399, 145.53, 35.5675, -92.9327, 27.1228, 101.219, 70.1528, 144.957, 104.611, 156.323, 158.986, 185.459, 73.1768, 3557.53, 318.342, 360.28, 392.819, 134.733, 37.7964, 67.7007, 49.1147, 243.646, 643.462, 36.4443, 3379.99, 6.81798, 23.0309, -17.2907, 19.7955, -93.9038, 331.732, 4460.44, 2559.39, 403.001, 19.597, 18.4828, 201.77, 39.4426, 128.766, 9.73723, 568.667, 964.267, 91.0142, 5593.77, 80.4497, 91.9147, 96.3875, 77.823, -10.0185, -0.552131, 104.977, 67.3361, 298.984, 103.676, 3175.74, 76.1713, 42.9305, 23.5164, 80.5255, 2942.06, 46.0359, 211.746, 24.4057, 36.5004, 28.4086, 189.812, 24.9993, 2.04241, 8.26861, 3992.39, 2822.58, 6.13577, -24.8298, 114.667, 45.6519, 113.635, 345.131, 41.3414, 204.028, 46.206, 286.119, 137.48, 874.469, 1530.73, 144.398, 50.0945, 106.27, 18.9696, 185.828, 42.4012, 109.506, 106.629, 0.265347, 114.964, 79.697, 1196.91, 181.206, -5.2015, 34.0159, 105.566, 275.02, 36.3232, -2.9961, 44.4439, 52.9923, 14.0299, 662.469, 689.304, 1951.98, 1049.51, 110.576, 6.38378, 257.273, 272.63, 46.4421, 8.63581, -10.7732, -50.931, 62.8756, 35.9405, 363.809, 210.738, 326.868, 518.104, 360.48, 17.5659, 389.966, 147.554, -85.8457, -4.62999, 67.4847, 72.5869, 17.7463, 72.1119, 106.536, 52.8706, 30.1552, 1.41616, -38.1398, 42.2391, 48.2987, 245.317, -2.8878, -8.54974, 67.0057, 85.5775, 68.6865, 58.0009, -100.96, 153.806, 8.89852, -52.7776, 13.7009, 741.804, 342.906, 213.806, 246.234, 249.977, 6.98249, 313.301, 4.85294, -6.65, 11.7382, 44.1473, 26.9037, 150.331, 373.791, 225.069, -13.2615, 71.2087, 77.8136, 316.181, 121.96, 535.475, 4.9466, 23.6025, 102.613, 253.591, 38.0866, 1595.16, 184.578, 67.1935, -1.492, 2918.08, 45.1199, 272.804, 333.432, 845.986, 4.28768, 32.6207, 233.91, 363.863, 21.951, 11.784, 1891.02, 329.09, 486.907, 64.4783, 66.7354, 46.4086, 33.8196, 233.154, 136.06, 47.6797, 6.52799, 340.142, 141.886, 266.149, 5408.5, -0.330254, 249.207, 91.4136, 217.254, 223.499, 125.535, -26.3701, 124.581, 23.0902, 27.3877, 63.5235, 91.5899, 30.2485, 414.683, 32.0805, 292.537, 337.14, 85.4146, 91.4031, 20.419, 12.8875, 22.5168, 58.1224, 146.081, 24.0654, 23.4953, 5.66012, 381.23, 24.8852, 43.8619, 21.6548, 38.31, 88.0773, 75.8888, 63.2349, -22.5916, 148.114, 94.9754, 24.3627, 8872.19, 16.6944, 25.9624, 14.2291, 26.7874, 18.7009, 67.1026, 22.4741, 9.27033, 47.5063, 63.1381, 15.6287, 16.4874, 48.3661, 29.3514, 5.19944, 80.6699, 130.446, 92.6789, 991.455, -47.5568, -27.8809, 34.8781, 1764.84, 3354.22, 5156.98, 2924.77, 4220.09, 5945.49, 54.869, -14.7753, 17.6952, 106.033, 752.364, 315.533, 201.13, 132.043, 53.3268, 38.1879, 153.224, 164.918, 84.4463, 21.762, 54.4231, 199.737, 8.43104, -21.5154, 24.0447, 16.0306, 175.385, 123.68, 85.9635, 69.9593, 838.797, 42.3079, 9.28645, 7.80179, 41.7727, 147.448, 124.652, 14.7371, 31.7192, 37.8179, 42.2796, 488.885, -46.2152, 132.058, 5.27287, 4440.33, -0.0718337, -57.624, 4.71695, 5.46426, 39.1079, 12.6737, 321.994, 9.97344, -17.4564, 26.4203, 428.175, 105.465, 2.87448, 38.7378, 9.81193, 62.2688, 78.2701, 21.3358, -49.4748, 144.854, 23.4393, 19.4808, 341.139, 32.9906, 129.144, 185.672, 168.829, 6.00401, 33.8803, 9.36118, 14.9659, 247.173, 82.8192, 13.4658, 22.9884, 47.6126, 45.9863, 14.9616, -17.078, 13.3633, -10.6613, 149.949, 16.9201, 32.2351, 303.763, 17.3263, 12.6098, 90.374, 67.1811, 96.5753, 30.4414, 5.25392, 97.9433, 84.0109, 4791.92, 158.83, 70.5196, 25.2591, 10.6006, 4.74133, 328.929, 29.5291, 1108.02, 25.4939, 9.86538, 1881.79, 38.0273, 18.6363, 47.8304, -10.7556, 19.3657, 156.49, -4.6479, 24.3279, 177.577, 99.0255, -20.2743, 18.2502, -21.5958, 204.768, 13.9135, 30.9209, 41.149, 384.304, 4.3501, 56.0264, 84.2963, 5.9091, 1111.55, 18.1803, 35.6877, 36.4223, 28.7847, 336.821, 113.682, 153.298, -12.3375, 703.197, 6.54321, 3.4003, 365.171, 948.665, 57.6749, 140.807, -47.5884, 230.304, 35.2882, 92.0679, 119.55, 594.026, 47.8285, 1.59722, 141.695, 4590.73, 91.6325, 73.205, -7.3732, 4.2271, 54.6507, 13.1526, 354.281, 25.637, 31.0081, 29.8338, 2.26946, 26.7666, 362.02, 115.711, 11.7932, -32.3943, 32.0935, 29.629, 2198.45, 10.5357, 2.06974, 160.126, 17.9661, 557.344, 30.7372, 5.81217, 173.58, 28.031, 113.638, 44.2328, 119.839, 13.3271, 3588.49, 180.036, 12.2911, 6.12067, 2513.45, 130.452, 43.649, 164.033, 86.9239, -4.89138, 2.61077, 318.083, -9.8494, 226.599, 27.9181, 709.636, 58.3088, 8.21628, 53.439, 27.9726, 152.485, 56.2261, 35.4081, 49.3529, 23.6595, 101.075, 201.208, 1349.67, 4097.11, 57.5865, 46.8813, 2496.72, 4302.08, -14.5668, 4226.52, 7.23516, -10.6584, 199.645, 25.6556, 88.8947, -27.3404, 7.1847, 123.708, 54.1917, 95.0836, 53.2071, 87.2175, 65.777, 141.115, 127.916, 4586.4, 188.076, 373.932, 177.252, 58.2959, 22.0144, 78.9151, 8.43176, 264.651, 1104.78, 17.8202, 4534.5, 3.39535, 11.9647, -7.74796, -0.772443, -26.6313, 295.923, 4712.16, 3425.1, 614.955, 22.927, 10.8969, 148.503, 14.3999, 80.8697, 12.8348, 329.268, 673.343, 56.6204, 5771.56, 24.6675, 110.65, 35.7516, 41.8782, 44.7822, 19.8892, 41.73, 19.3424, 298.774, 37.7131, 3728.22, 36.5436, 48.8184, 28.1586, 54.0515, 3337.96, 20.775, 279.927, 18.8433, 32.674, 14.6679, 29.86, 12.9458, 19.2027, -2.83335, 3800.89, 3485.23, 20.018, 6.81922, 171.361, 23.6272, 82.1207, 183.374, 27.095, 260.132, 108.528, 184.085, 61.5014, 1167.08, 1433.71, 135.186, 31.2864, 434.736, 17.5452, 91.0749, 21.8009, 99.108, 210.107, 20.1143, 54.7748, 175.689, 1361.39, 270.05, 1.2547, -11.7241, 29.3876, 138.432, 10.7093, 10.0032, 10.2681, 18.3958, 7.03457, 512.672, 440.222, 1362.39, 910.424, 44.8842, 3.24524, 103.19, 183.772, 15.0041, 5.54029, -8.76264, -22.0844, 38.0021, -25.9207, 264.602, 55.2672, 206.417, 594.362, 448.783, 20.5519, 336.445, 171.817, -39.842, 8.79081, 50.1709, 58.1773, 46.4573, 46.5964, 43.8317, 37.5065, -2.50102, 9.116, -12.1285, -5.29367, 36.3098, 370.765, 6.12811, -26.2998, 59.922, 99.4379, 23.3231, 38.6395, 41.8341, 163.323, 2.35223, -33.2088, -0.318706, 700.347, 149.244, 149.939, 444.315, 197.612, 65.3287, 672.978, 20.2036, 60.3929, 2.13584, 16.3533, 25.6992, 33.6586, 1906.36, 228.049, 17.1178, 48.7949, 146.708, 209.255, 89.5143, 329.467, -84.1617, 9.28273, 73.3277, 150.263, 402.813, 724.912, 93.5619, 26.9338, -3.23502, 4343.81, 84.6119, 176.598, 273.432, 468.032, 20.1705, 20.3546, 250.216, 300.855, 31.8932, -0.101973, 2796.81, 353.51, 464.394, 110.78, 19.739, 21.7774, -1.61634, 189.76, 178.32, 10.1773, 29.4681, 2330.43, 1832.11, 163.47, 4295.36, 1.24901, 169.036, 51.2922, 162.709, 210.078, 101.101, -44.4698, 60.07, 31.3394, 30.0544, 26.2902, 162.19, 23.6549, 193.004, 15.0567, 284.328, 304.22, 157.989, -8.68811, 26.872, 11.9186, 48.6462, 73.4221, 142.913, 98.8425, 51.5609, 52.9338, 501.744, 61.9548, 49.8289, 34.6108, 18.0297, 156.179, 87.3699, 37.4892, -21.2394, 193.205, 104.147, 48.4806, 9682.71, 36.3847, 76.8974, 24.4563, 50.9666, 51.7285, 73.0255, 24.2106, 81.0265, 47.44, 82.9362, 22.7492, 30.1752, 86.5914, 36.8239, 14.7646, 162.673, 253.176, 234.595, 516.142, 3.69034, -48.9365, 65.8244, 1617.96, 2640.46, 3657.65, 3819.17, 4090.65, 4454.83, 74.8586, 30.8665, 115.707, 89.1666, 506.21, 387.529, 136.212, 126.173, 62.8923, 40.0836, 202.828, 177.232, 78.8619, 45.8239, 79.8199, 403.987, 19.3334, -4.33529, 11.4801, 9.01189, 195.923, 148.046, 137.08, 88.7213, 1731.1, 5.7097, 65.7457, 11.6924, 164.186, 62.7575, 170.711, 27.103, 19.0265, 77.2922, 43.5574, 689.458, 17.2022, 158.953, 19.0796, 1570.76, 11.1243, -47.8425, 10.6524, -0.824531, 67.9613, 18.0697, 456.784, 4.19371, -26.2001, 62.0666, 313.22, 106.68, 5.68857, 98.9954, 27.1199, 81.5302, 135.078, 13.4029, 2.27847, 222.449, 27.6569, 36.3149, 319.741, -3.24216, 86.4926, 279.68, 302.545, 0.710896, 9.79766, 35.8284, 20.4802, 428.874, 93.8246, 8.23201, 37.7287, 72.151, 65.6202, 47.0053, 0.315092, 21.1461, -8.71233, 164.907, 41.8224, 39.359, 424.272, 3.92809, 14.0193, 129.938, 118.107, 110.441, 57.8896, 903.554, 84.1557, 90.7458, 2653.41, 355.276, -1816.64, 7.02804, 8.16405, 9.63254, 371.113, 68.6348, 875.156, 22.8315, 12.7834, 2908.65, 73.0268, 19.0389, 97.903, -18.5831, 30.1621, 141.008, 15.9366, 20.1853, 627.3, 247.215, -17.4408, 89.5689, -11.199, 164.223, 25.376, 43.2611, 165.297, 467.893, 13.1353, 98.6927, 140.993, 11.9114, 1813.87, 67.8542, 25.6188, 22.4116, 82.7, 460.699, 124.313, 238.174, 8.88709, 1043.82, 25.7917, 39.0679, 109.691, 209.892, 103.859, 245.403, 10.1044, 311.758, 35.0417, 156.112, 129.443, 773.753, 54.0158, 19.2496, 195.573, 3191.4, 60.8176, 85.4708, 78.6881, 8.26688, 106.968, 22.7105, 343.198, 33.6467, 58.9204, 30.6993, 21.9813, 34.1661, 397.846, 172.861, 18.11, -14.0195, 49.0661, 19.4589, 485.993, -5.94627, 19.3554, 203.228, 15.4995, 182.748, 33.6588, 12.4801, 250.566, 89.4413, 1.24338, 62.8193, 135.39, 26.084, 66.58, 304.39, 15.5656, 0.0976848, 2026.74, 93.9433, 50.5064, 136.347, 107.083, 0.193948, 56.348, 559.336, -1.34568, 131.805, 28.0195, 78.0697, 40.3857, 4.25619, 106.778, 46.9773, 146.015, 120.829, 175.308, 45.3821, 24.7305, 164.084, 298.482, 265.155, 1623.42, 120.842, 74.8246, 873.725, 1696.78, -58.2311, 2161.09, 154.495, 21.3336, 230.491, 137.396, 34.7623, -58.6789, 11.4523, 69.9525, 116.551, 48.5494, 151.926, 187.422, 154.078, 123.855, 95.9424, 2044.5, 491.992, 529.63, 340.004, 120.157, -10.32, 69.8532, 34.5671, 327.885, 636.459, 80.0114, 3073.94, -1.47433, 16.6172, -27.206, 24.0632, -93.0832, 310.202, 2273.54, 1030.79, 692.127, 50.6523, 0.0949905, 163.055, 35.4072, 126.346, -0.203757, 441.602, 770.905, 125.032, 5956.98, 36.5848, 162.222, 51.3298, 20.8305, 15.5991, 25.9609, 58.655, 52.9268, 333.587, 96.7429, 1602.47, 97.4173, 86.7895, 21.8971, 89.7959, 1174.03, 25.7309, 35.7276, 57.156, 44.3944, 28.3338, 128.169, 32.7755, 138.659, 15.3786, 1535.37, 3200.62, 62.304, 183.76, 149.049, 8.71382, 196.735, 309.498, 178.323, 237.073, 96.5753, 272.477, 80.7959, 1641.59, 1393.03, 88.4958, 49.7455, 107.804, 1.72709, 216.482, 37.8761, 263.464, 95.4082, 18.0926, 73.9372, 119.028, 1342.88, 259.724, 1.22813, 23.9773, 57.3953, 183.088, 45.7202, 18.3849, 26.61, 55.6054, -0.706882, 556.393, 421.879, 1167.84, 517.988, 59.9694, 3.20685, 206.993, 312.68, 22.9889, 18.4686, 4.63857, -30.2465, 89.4418, -33.5483, 234.894, 140.073, 299.794, 647.004, 226.003, 15.86, 335.638, 67.1859, -51.8662, 31.7451, 83.9066, 41.8285, 42.0325, 32.7291, 119.85, 39.4677, 30.8266, 5.43731, -28.7512, -1.65284, 78.5071, 261.552, 8.97927, -51.5476, 51.7288, 150.168, 14.6407, 45.8702, 87.2712, 130.708, 6.04671, -55.0078, 3.91318, 826.722, 190.35, 215.967, 315.772, 185.466, 37.9453, 186.14, 14.3975, 23.4929, 25.426, 17.2156, 6.52523, 68.4645, 390.197, 373.666, 48.2707, 70.0616, 151.743, 201.533, 140.316, 349.969, -33.2442, 15.2186, 98.48, 276.547, 25.9707, 517.012, 214.317, 33.5505, -2.96451, 2726.88, 90.5135, 245.165, 318.465, 467.27, 13.3121, 23.4317, 308.334, 305.01, 47.6936, 5.27658, 1097, 378.496, 613.637, 52.5746, 39.5571, 49.8384, -12.1801, 195.255, 178.577, 11.7318, 12.5255, 1648.03, 1427.1, 243.458, 2091.88, -6.21422, 272.611, 59.9022, 424.443, 250.476, 211.563, -42.4763, 97.4135, 21.3433, 34.6708, 59.0011, 191.443, 28.995, 282.507, 21.9004, 223.679, 247.843, 146.8, 85.0212, 31.1488, 12.8324, 90.2215, 64.6066, 187.132, 92.0846, 48.1247, 15.7267, 659.613, 58.0325, 88.3787, 36.9725, 28.012, 249.872, 130.509, 69.9946, -38.734, 294.238, 168.992, 79.3437, 10396.1, 58.1014, 104.428, 59.6125, 27.7013, 60.7026, 189.186, 37.1239, 87.2832, 32.3454, 129.234, 49.4815, 39.3013, 144.819, 89.547, 19.1634, 192.314, 233.304, 232.416, 691.134, 15.2424, -29.8916, 37.2982, 1198.8, 2378.58, 2860.87, 3879.76, 4507.62, 4098.65, 54.4923, 16.7083, 98.5723, 84.3737, 596.467, 434.575, 73.1467, 163.036, 53.4802, 58.4489, 204.88, 196.61, 89.4526, 47.7735, 90.0391, 348.738, 51.0633, 11.8902, 2.31597, 9.60877, 242.327, 149.534, 153.576, 132.633, 3006.34, 2.60968, 109.943, 25.9401, 70.5182, 118.336, 173.694, 17.664, 5.00616, 93.2511, 73.8148, 848.672, 14.9824, 104.303, 18.5045, 2350.16, 52.1706, 4.98633, 24.2924, 15.9269, 63.3791, 4.59506, 336.982, 17.333, -22.031, 35.598, 288.123, 154.099, 6.85971, 196.454, 46.4389, 45.5724, 129.7, 16.933, 31.0391, 193.007, 11.3017, 68.8202, 365.599, 81.2111, 171.59, 180.212, 300.681, 32.2205, 8.08239, 55.0635, 43.0479, 415.1, 140.86, 27.6083, 50.3935, 108.081, 46.7669, 93.0661, 4.387, 32.655, -36.8072, 128.504, 67.4608, 49.1855, 430.627, 7.29553, 30.7981, 115.461, 99.4041, 120.119, 79.4284, -8.70355, 129.377, 111.452, 2636.2, 283.657, 152.508, 10.2713, 21.833, 12.0283, 384.157, 111.401, 1552.5, 70.0416, 9.38613, 3105.92, 69.0755, 14.0697, 72.8632, 1.86091, 12.6286, 165.686, 23.575, 29.6849, 291.643, 136.994, 12.2572, 116.667, -9.89752, 162.058, 14.9847, 135.385, 134.205, 282.957, 31.3019, 79.3672, 129.701, 25.2638, 2063.8, 85.4085, 22.2778, 35.5618, 68.1409, 477.608, 159.587, 177.912, 12.3833, 1504.4, 89.2294, 36.7813, 100.322, 178.409, 74.2343, 145.029, 22.5529, 338.865, 70.4458, 143.998, 137.354, 718.835, 92.2865, 44.6636, 294.612, 3153.36, 107.572, 127.595, 66.1574, 20.5912, 123.183, 38.7749, 538.56, 54.1507, 73.0012, 55.4213, 58.4307, 28.2636, 558.944, 130.972, 9.68121, 34.9358, 75.5451, 10.1148, 242.757, 25.2692, 31.3001, 186.852, 23.7675, 243.991, 124.371, 12.6768, 219.736, 74.2949, 15.8069, 64.9143, 141.896, 46.0688, 18.6799, 228.678, 17.3736, 14.7902, 904.369, 30.203, 39.7144, 200.381, 242.083, 29.385, 39.6679, 217.316, 0.453118, 146.591, 27.3242, 99.2733, -6.54072, 6.56623, 172.795, 67.0636, 498.539, 140.281, 126.26, 77.8774, 31.0841, 234.303, 259.19, 271.516, 3717.97, 94.2988, 71.7809, 694.162, 1565.52, -7.65442, 2008.76, 56.0799, 14.7563, 254.124, 152.548, 3.96758, -112.889, 23.7309, 43.959, 115.697, 21.7522, 84.5736, 143.954, 144.098, 98.6888, 48.2402, 1436.37, 341.351, 401.483, 309.221, 93.2162, 48.3087, 76.9098, 46.6884, 273.507, 266.358, 67.4139, 2866.11, 20.2726, 16.3465, -29.4872, 11.5116, -204.174, 332.45, 1994.19, 1184.78, 392.023, 44.7525, 36.1219, 110.905, 39.2748, 117.471, 22.0005, 513.787, 927.413, 125.58, 6498.24, 84.7558, 104.13, 57.8553, 58.1969, -28.5082, 6.40566, 107.818, 92.3361, 404.992, 83.7837, 1459.51, 76.4665, 66.6122, 7.24202, 113.211, 954.436, 22.4689, 32.1727, 48.0985, 27.3616, 36.9859, 179.13, 47.7911, 188.365, 28.236, 1653.81, 1759.21, 48.8833, 146.243, 159.633, 35.2368, 116.22, 359.115, 77.2792, 145.838, 81.4343, 290.231, 152.031, 1603.45, 1937.63, 75.9467, 61.9098, 80.9726, -7.0814, 134.276, 49.8239, 185.681, 94.0413, 17.4167, 59.2552, 106.439, 1243.49, 162.989, 9.0091, 38.2842, 146.055, 211.768, 48.178, 23.925, 73.9306, 64.0879, 45.589, 662.33, 516.529, 687.539, 140.826, 134.102, 11.9479, 255.559, 640.483, 50.5054, 26.5233, 13.8135, -62.5521, 50.5043, 56.0148, 340.46, 193.713, 234.002, 565.911, 286.525, 28.1796, 349.433, 101.645, -92.2694, 10.4707, 75.8019, 98.9545, 2.58892, 45.9471, 159.292, 98.5365, 29.5933, 5.29836, -33.1193, 22.5066, 63.4782, 291.064, 17.8339, 13.534, 89.7338, 138.021, 53.3355, 47.8456, 114.431, 128.613, 13.7885, -87.8064, 3.74718, 738.26, 314.237, 239.549, 134.137, 186.247, 3.33742, 190.915, 8.25899, -1.16246, 27.3675, 39.4051, 25.0474, 148.14, 212.304, 266.504, 11.992, 54.1384, 35.5603, 284.945, 148.733, 329.237, 36.8865, 18.7155, 77.6382, 324.99, 42.4623, 979.981, 210.802, 68.029, -0.70452, 929.993, 122.7, 286.294, 204.529, 657.229, 4.27519, 29.4157, 249.475, 231.63, 10.1838, 15.7454, 1418.74, 554.93, 590.865, 83.5738, 96.2179, 65.2052, 28.1082, 274.239, 144.532, 18.8459, 15.9159, 568.05, 826.803, 177.082, 2839.7, -25.3921, 214.296, 88.9582, 262.805, 197.053, 159.425, -1.24586, 152.398, 20.8587, 32.8964, 87.765, 159.64, 58.8501, 504.189, 31.6534, 273.78, 202.284, 93.8829, 79.2998, 22.342, 11.139, 42.0053, 40.3068, 170.583, 53.3866, 31.8358, 15.2116, 590.156, 28.7707, 91.5539, 16.9959, 24.8743, 141.803, 91.7096, 42.8123, -44.2136, 197.745, 109.586, 42.6647, 8365.8, 40.3792, 68.447, 22.6792, 30.9739, 43.9691, 104.818, 23.3193, 30.0672, 36.1116, 96.675, 24.9362, 18.2112, 79.414, 73.7415, 11.4693, 125.129, 234.052, 180.548, 780.294, 20.5804, -27.1269, 27.4847, 2573.87, 3477.17, 4471.09, 4331.77, 5276.04, 5664.37, 67.9535, 25.6475, 76.769, 68.6645, 569.912, 448.872, 84.3918, 151.687, 70.5891, 46.049, 163.378, 205.215, 85.3799, 20.69, 52.4086, 217.039, 28.319, 8.98009, 2.49221, 7.2658, 132.225, 113.424, 90.7812, 49.4236, 194.233, -2.22783, 12.3812, 2.20869, 11.5695, 99.7647, 128.898, 19.5615, 35.292, 94.5332, 67.4591, 554.534, 7.66178, 125.216, 14.4581, 2937.07, 16.2097, -13.3297, 8.89613, 0.268704, 53.3312, -3.18541, 400.768, 7.91864, -22.0276, 27.0425, 307.79, 117.905, 1.04752, 62.4551, 47.2319, 47.9187, 95.9799, 22.9395, 20.0366, 186.816, 31.649, 46.0998, 480.031, 60.3285, 164.009, 200.208, 161.315, 56.6931, 9.0717, 23.3418, 29.9439, 311.585, 105.587, 18.0468, 27.286, 52.2595, 41.7338, 41.9092, -6.27292, 15.0346, 2.49389, 158.706, 47.6087, 63.6269, 371.786, 14.0691, 20.6185, 83.1104, 88.1335, 74.1428, 88.3365, -16.7579, 109.776, 78.3542, 3723.43, 181.918, 127.877, 39.8845, 36.89, 6.36301, 370.387, 60.0514, 1250.16, 45.784, 17.0307, 2659.47, 39.4764, 8.75707, 67.4581, 3.32201, 6.27112, 109.75, 0.0379001, 18.788, 219.604, 83.3589, 0.223356, 72.8466, -3.92575, 115.845, 15.8586, 100.997, 110.407, 293.455, 34.1911, 77.0416, 120.623, 13.4395, 1331.91, 31.2241, 8.70833, 25.7259, 59.1483, 305.94, 77.5733, 178.913, 16.5687, 1227.09, 25.6378, 25.5943, 424.363, 1060.22, 66.4364, 214.827, 10.2609, 326.249, 58.4576, 316.629, 103.313, 630.475, 56.2809, 20.6089, 197.695, 4188.16, 130.831, 85.652, 54.0967, -0.698646, 50.5705, 16.5062, 228.745, 39.6945, 45.1939, 13.7713, 24.4483, 23.2166, 421.695, 141.163, 5.23799, 14.9818, 42.4541, 14.3148, 1018.29, 44.1777, 18.0954, 174.692, 1.13532, 177.388, 76.7073, 6.18476, 211.823, 91.4271, 3.23425, 43.7706, 118.826, 27.0587, 2702.13, 235.38, 10.0865, 5.50446, 2175.88, 51.4997, 50.5894, 95.3916, 148.45, 6.40436, 23.5829, 330.852, -0.310719, 207.436, 21.3795, 284.009, 36.3695, -7.45753, 108.835, 28.6744, 351.821, 81.5486, 162.442, 66.8129, 7.60735, 162.102, 287.533, 631.07, 3388.32, 79.7706, 57.3322, 1271.83, 2471.53, -29.1697, 3267.69, 5.95262, 32.91, 194.936, 86.4109, 53.1509, -41.465, 15.2884, 72.1419, 64.2053, 201.034, 164.92, 232.637, 267.261, 104.615, 246.293, 3545.06, 668.983, 390.615, 206.928, 113.631, 17.5142, 107.777, 23.6411, 285.105, 894.496, 30.4761, 3370.49, 9.77489, 18.472, -14.7844, 16.7371, -113.75, 389.444, 3420.63, 1801.31, 572.056, 43.4844, 11.8425, 99.7886, 17.1879, 101.741, 12.4638, 282.006, 757.723, 68.368, 7042.88, 49.1817, 100.521, 41.5229, 48.4048, 1.87017, 1.50182, 73.7493, 47.2105, 326.063, 51.7689, 2653.49, 66.4281, 77.9568, 11.6907, 52.1105, 1675.42, 34.4654, 294.214, 24.6104, 17.815, 28.1464, 124.825, 28.0614, 5.60878, 17.4288, 2473.69, 2296.06, 14.6744, 4.47085, 168.622, 27.3937, 86.2253, 270.465, 40.3882, 117.987, 86.8032, 230.207, 85.7811, 1289.93, 1702.7, 145.237, 63.6695, 125.432, 3.0438, 89.7088, 21.3173, 132.6, 116.694, 15.4594, 45.2788, 184.129, 1587.01, 157.617, -0.493317, 9.90994, 97.5666, 144.692, 34.5865, 7.931, 40.2999, 27.9275, -3.58742, 485.435, 437.813, 1452.56, 574.669, 86.8385, 23.5322, 171.905, 224.899, 32.7434, 13.9438, 13.343, -40.59, 25.1954, 44.9909, 245.033, 127.305, 177.074, 440.508, 290.957, 15.9839, 294.587, 101.032, -35.4977, 6.72849, 46.2628, 58.8674, 0.475095, 34.3861, 130.95, 54.8103, 15.4945, -0.39281, -21.281, 6.00761, 72.1088, 250.751, -0.406172, 7.80526, 59.6821, 132.221, 36.7295, 23.074, 56.5949, 293.273, 6.76556, -46.7689, 3.47536, 748.806, 294.336, 146.912, 271.733, 219.698, 62.569, 345.02, 3.13008, 30.308, 6.17931, 18.9706, 13.9386, 89.2086, 748.361, 358.791, 109.327, 49.8742, 110.424, 319.118, 98.7191, 310.937, 29.6553, 22.2504, 123.248, 201.381, 272.266, 1368.36, 143.957, 51.4594, 4.59039, 2751.79, 72.3933, 219.441, 271.931, 494.064, 10.4994, 15.2219, 236.647, 314.185, 5.56465, 11.6035, 2087.89, 422.794, 390.361, 66.1281, 66.8283, 41.6442, 17.8877, 207.359, 185.938, 15.4422, 0.0721809, 2390.02, 2842.8, 188.211, 3583.67, -13.5936, 213.801, 72.5324, 184.59, 223.815, 144.363, -0.491996, 95.4303, 53.5745, 23.847, 43.1828, 122.662, 50.3786, 318.681, 22.925, 283.962, 180.556, 103.855, 71.6552, 19.0135, 7.55564, 57.5738, 41.8209, 133.279, 52.0164, 29.9264, -5.35282, 461.23, 48.5346, 40.2298, 8.39896, 17.7428, 117.473, 77.9277, 63.8059, -23.6993, 203.531, 106.757, -12.6489, 9345.94, 33.9219, 84.325, 26.541, 20.4447, 12.9576, 129.619, 39.302, 32.4333, 36.6902, 94.5572, 27.0847, 15.2479, 64.4091, 52.7497, -2.53228, 77.664, 85.4302, 81.7355, 981.646, 38.5142, -17.5833, 27.7867, 1552.46, 3626.69, 5900.96, 965.54, 2335.83, 5219.36, 56.3916, 11.4089, 8.23804, 45.1092, 590.292, 404.212, 158.902, 172.453, 70.8063, 75.0311, 132.294, 227.772, 40.4406, 32.6849, 55.5681, 186.463, 15.9432, 7.08868, 9.96418, -12.0555, 204.795, 136.208, 67.8371, 47.1633, 130.277, -3.05798, 15.524, 0.394058, -0.575181, 116.937, 137.411, 15.8249, 27.7821, 56.4698, 72.6469, 793.019, -3.20777, 166.785, 20.0154, 3257.57, 27.9982, -0.0363981, 25.4436, 10.4671, 38.5609, 3.58018, 404.834, -4.70361, -11.9295, 43.1111, 84.1063, 69.6939, 1.9759, 77.2344, 12.9422, 45.3537, 51.7135, 8.80947, 7.73061, 130.009, 9.35285, 34.4833, 433.679, 27.4743, 158.522, 215.065, 179.114, 26.4954, 9.3366, 23.7929, 13.452, 199.349, 105.274, -0.691375, 17.7547, 4.10314, 35.5965, 44.8385, -0.221245, 14.5359, -16.4445, 105.255, 38.4129, 66.9824, 382.957, 15.7831, 14.7568, 67.7456, 74.4817, 85.8083, 79.3688, -11.9028, 95.3734, 88.6175, 3638.23, 179.778, 81.8201, 21.4498, 25.1334, 13.3877, 373.739, 41.2316, 1690.04, 42.6084, 26.4521, 2174.18, 35.9456, 17.0905, 26.4139, 12.1516, 7.7893, 101.429, 3.61813, 25.9043, 165.546, 165.029, 2.21347, 41.351, -15.7535, 196.906, 5.87379, 71.1112, 112.901, 307.683, 13.0548, 71.6915, 87.8448, 13.656, 1324.22, 68.4614, 13.8467, 15.6624, -2.11244, 297.141, 107.993, 217.546, 8.23705, 872.009, 70.5007, 20.4041, 198.528, 839.796, 78.6212, 64.8983, 6.00077, 245.485, 54.9742, 172.73, 102.901, 624.53, 66.6335, 29.4896, 180.67, 5833.66, 116.569, 74.2093, 58.8941, 11.4795, 38.9307, 24.9464, 238.739, 50.3452, 25.8187, 30.6562, 27.1836, 24.7247, 461.369, 149.096, 4.03206, 31.8861, 58.9681, 4.73846, 1079.05, 10.5102, 10.7358, 171.903, 21.6532, 1614.61, 69.1148, -1.06577, 246.209, 60.9519, 8.55947, 53.5345, 107.852, 15.5495, 1089.79, 100.743, -9.84966, 8.50146, 2509.63, 88.4241, 11.468, 93.436, 136.846, 14.834, 12.8876, 87.0857, -4.64621, 227.816, 12.562, 421.94, 16.9143, 2.74598, 63.8839, 17.5857, 413.069, 87.988, 46.8763, 79.4983, 23.5537, 156.533, 142.026, 625.897, 3069.9, 93.4094, 50.3598, 1902.77, 3014.6, -71.304, 3680.73, -1.80914, 19.1538, 190.056, 52.2877, 60.5452, -23.5987, -1.91455, 103.818, 31.699, 134.021, 37.0279, 52.1777, 73.3428, 276.737, 287.212, 3643.06, 113.995, 339.686, 198.545, 79.3342, 98.5352, 82.1863, 22.447, 239.447, 1430.28, 32.5284, 3884.78, 15.1339, 17.3066, -6.03283, 29.8269, -58.3026, 313.006, 4781.54, 2323.54, 536.467, 29.7574, 10.0447, 152.661, 18.8966, 109.161, 2.93635, 301.283, 646.211, 59.3143, 5632.2, 42.6628, 82.368, 50.862, 63.6873, 6.28557, 6.79988, 64.1165, 61.7862, 296.761, 68.4204, 3511.48, 62.6788, 66.0424, 16.0121, 83.9819, 2693.64, 33.3963, 541.391, 24.8203, 25.8722, 20.7669, 405.887, 16.5432, -11.8931, 9.47242, 3512.12, 3913.11, 28.1157, 0.942018, 198.992, 24.5918, 133.321, 320.601, 45.0174, 152.439, 49.5598, 168.985, 72.77, 1044.1, 1593.03, 99.944, 41.6344, 239.253, 8.03384, 87.8811, 27.0239, 50.1334, 137.746, 18.3693, 123.532, 217.189, 1474.25, 160.646, 6.16888, 6.51786, 69.9984, 131.152, 16.941, 3.84455, 34.2437, 24.9068, -3.62168, 379.14, 373.372, 1373.67, 1082.74, 83.0411, 12.5, 133.863, 195.145, 23.0121, 6.82277, -9.81922, -3.47117, 56.0757, 31.1144, 260.057, 144.496, 207.943, 650.587, 296.833, -2.61181, 309.397, 84.0845, -43.7302, 14.4997, 120.602, 62.3774, 2.61724, 20.4225, 101.752, 37.9427, 12.9264, 7.63623, -20.0477, 25.8764, 65.8894, 314.29, 7.61551, 10.3069, 53.5564, 145.203, 68.0812, 86.306, 55.2896, 122.202, -1.52974, -65.4116, -0.873269, 628.029, 288.948, 178.474, 669.091, 180.865, 48.6863, 312.838, 7.52951, 49.6373, 15.7523, 26.4832, 19.6958, 88.0791, 1157.78, 369.865, 2.1029, 56.2654, 225.17, 370.433, 102.009, 376.608, 26.6551, 15.7319, 40.9501, 158.392, 127.145, 1200.37, 146.255, 36.6009, -2.10472, 4898.71, 45.5338, 188.234, 170.369, 404.419, 9.80528, 11.8492, 255.268, 323.192, -8.35253, 12.1275, 3268.36, 445.377, 382.372, 50.5897, 52.3964, 32.0701, 5.56768, 212.712, 106.366, 9.38988, -15.6778, 2116.01, 678.949, 264.591, 3558.35, -10.315, 182.813, 51.2728, 221.997, 214.561, 231.79, -3.55962, 98.0544, 21.0206, 52.5622, 46.7389, 144.45, 30.4269, 304.96, 14.9017, 230.878, 247.59, 64.434, 64.2369, 12.1686, 19.9849, 44.8216, 46.1087, 187.407, 65.9154, 37.8611, 13.1884, 367.433, 31.1489, 36.2151, 41.0271, 34.7923, 126.114, 129.627, 50.1246, -38.6532, 181.623, 90.1958, 37.4389, 8252.65, 23.7046, 46.6156, 30.6529, 14.6951, 16.9243, 91.4007, 25.4601, 20.7603, 30.3978, 59.0705, 24.7106, 16.143, 72.0106, 30.1115, 1.63297, 197.797, 499.756, 352.708, 1662.26, 6.94581, -38.1436, 53.7229, 2323.13, 3276.53, 3914.43, 3999.14, 4771.61, 4448.73, 81.5114, 13.4753, 55.5644, 39.1224, 489.808, 346.004, 118.373, 107.175, 76.3004, 30.3936, 143.483, 173.181, 52.6598, 27.0883, 48.0123, 209.379, 30.3679, 2.3115, 28.1439, 3.83654, 188.775, 87.3997, 136.297, 100.923, 3595.46, 7.79922, 187.656, 16.3697, 141.183, 79.4596, 112.344, 20.7649, 16.9782, 84.3264, 44.8918, 629.055, 22.3966, 99.9854, 26.0274, 2532.94, 18.3218, -23.3218, 33.7587, 11.0642, 56.9848, 14.2393, 293.748, 15.9607, -14.1471, 29.6764, 382.133, 128.27, 4.71653, -220.107, 12.1819, 79.097, 205.179, 13.0671, 3.55578, 151.32, 16.0169, 30.5214, 198.184, 76.6212, 140.886, 113.38, 178.667, 22.2304, 13.2707, 26.3927, 23.7605, 264.064, 95.6504, 19.7899, 21.6213, 56.3858, 30.2128, 48.8188, 3.19005, 18.608, -20.9676, 151.208, 35.7417, 47.3164, 333.499, 8.86286, 55.5017, 94.081, 86.7739, 54.8253, 68.9776, -18.072, 129.709, 67.4869, 3659.51, 277.895, 84.8364, 28.3289, 33.0593, -11.8278, 360.766, 57.256, 1069.6, 18.9821, 8.01176, 2442.02, 38.3782, 12.7976, 77.7258, -3.5095, 8.89093, 161.079, 9.12265, 8.02902, 220.578, 74.5015, 3.18391, 46.0466, -12.0782, 113.445, 30.5579, 149.118, 115.344, 285.885, 11.0866, 63.4076, 119.496, 21.3215, 1227.09, 51.6233, 45.6924, 35.5513, 34.4882, 299.461, 86.7734, 120.669, 5.09833, 672.499, 38.728, 52.5188, 515.891, 1046.02, 72.8346, 92.867, 12.066, 282.087, 44.848, 274.913, 130.913, 538.964, 60.7766, 25.2943, 217.75, 4273.07, 104.672, 87.2302, 60.3566, 11.6709, 83.4133, 19.6816, 239.786, 73.9264, 36.0309, 33.3687, 26.1832, 28.3214, 337.965, 127.288, -0.606596, 54.0417, 31.1683, 13.4045, 805.616, 10.0587, 20.1677, 187.757, 11.2774, 328.201, 84.7311, 2.97481, 216.429, 119.826, 15.2975, 77.9347, 92.9012, 22.1988, 349.427, 189.126, 38.4599, 40.6279, 1433.23, 48.5369, 28.5485, 160.872, 143.716, 4.11928, 21.8384, 239.402, 10.6622, 278.97, 21.3151, 294.656, -10.3959, 8.45477, 97.329, 60.5502, 278.355, 107.299, 245.074, 44.4103, 7.58657, 134.182, 252.512, 497.34, 2769.34, 86.3409, 34.5141, 1142.92, 1870.69, 2.52721, 2870.88, 79.2371, 37.1837, 169.325, 107.026, 30.3164, -42.5712, 17.7072, 63.9556, 82.9713, 105.271, 210.32, 312.184, 385.856, 132.273, 86.1813, 3268.61, 1024.69, 442.88, 159.222, 90.5501, 30.9035, 129.247, 34.7197, 196.487, 730.505, 44.1833, 2962.86, -1.73042, 34.7037, -17.6214, 16.2378, -134.863, 191.506, 3243.49, 1811.76, 489.651, 50.6778, 23.61, 114.661, 22.8506, 101.677, 10.8915, 231.014, 642.812, 94.4195, 5150.34, 59.8757, 101.893, 32.2673, 17.2878, 45.2713, 13.6043, 80.8419, 55.7107, 366.833, 55.2646, 2756.04, 99.2655, 57.991, 4.07751, 73.0566, 1760.5, 26.4565, 120.745, 29.9676, 44.3971, 30.3502, 111.041, 35.1207, 134.878, 26.4519, 2476.15, 2520.83, 50.1819, 157.964, 128.774, 44.9872, 81.1903, 197.019, 33.9799, 108.207, 116.09, 240.46, 120.025, 1987.3, 1480.16, 64.9968, 136.84, 109.756, 11.1087, 78.8428, 38.8894, 123.502, 93.0791, 27.0456, 40.8247, 180.841, 1124.35, 148.854, 0.0595516, 10.5117, 72.4034, 108.195, 41.2199, 27.2082, 33.6403, 34.726, -11.3763, 361.092, 480.253, 795.996, 373.703, 64.0276, 20.7283, 180.364, 456.108, 27.8536, 28.7937, 1.9343, -21.0062, 40.4928, -92.5084, 277.745, 94.2212, 165.025, 449.793, 202.659, 17.8172, 251.218, 83.4933, -38.6925, 23.1082, 54.3242, 65.7657, 38.7528, 74.0051, 47.5855, 52.602, 7.69903, 1.74712, -29.3427, -2.28681, 42.1297, 294.078, 18.4532, -8.80464, 60.0974, 116.354, 9.94368, 21.8901, 58.8993, 177.867, 10.6735, -52.5324, 14.8375, 978.88, 273.75, 172.095, 286.423, 146.15, 26.1367, 168.8, 23.6742, 45.756, 32.3425, 9.63194, 14.6851, 83.4002, 529.178, 346.757, 49.8069, 35.9698, 116.649, 322.733, 101.629, 397.616, 19.1037, 13.7456, 104.526, 79.0888, 246.038, 1287.93, 177.426, 57.425, -3.21138, 2319.23, 113.941, 204.927, 223.964, 441.536, 85.3879, 13.6376, 227.602, 57.5928, 130.555, 5.87376, 2155.53, 290.081, 376.909, 92.0564, 59.0583, 31.764, 16.2211, 215.908, 142.984, 16.4043, 7.04334, 1406.45, 1583.27, 131.581, 3462.2, 7.78682, 172.987, 45.3099, 220.598, 198.221, 165.068, -19.3646, 100.473, 51.6015, 20.089, 28.9834, 102.521, 35.5309, 318.736, 22.7341, 216.652, 137.959, 175.615, 78.7068, 17.378, 8.96849, 61.7044, 49.4122, 144.784, 75.0043, 60.4772, 10.0385, 790.943, 72.4567, 73.5309, 21.088, 40.2213, 210.561, 91.7803, 134.588, -40.7251, 234.953, 116.069, 62.0706, 4652.85, 45.1485, 74.5315, 29.4477, 33.8544, 35.2928, 102.621, 28.4838, 89.5884, -53.8352, 71.216, 31.3545, 23.4662, 68.812, 38.833, 16.6207, 188.116, 312.653, 309.973, 976.528, 19.5267, -29.0792, 51.8841, 5396.98, 6268.57, 8007.31, 2593.41, 2792.5, 3654.3, 58.9553, 6.23455, 57.7551, 143.242, 721.32, 547.635, 96.8654, 185.231, 96.0878, 57.448, 214.696, 204.236, 119.729, 30.2444, 85.6485, 334.249, 28.3019, 12.3808, -0.686965, 8.30199, 201.313, 154.514, 120.003, 128.271, 3949.66, -3.90832, 1.37556, 0.115654, 186.293, 120.317, 131.966, 33.6554, 4.97229, 30.5327, 38.4677, 695.874, 12.178, 130.613, 15.9664, 5821.41, 16.7248, 6.4599, 24.2949, 9.85454, 57.8458, 5.81503, 386.676, 1.52247, -33.954, 33.4058, 476.008, 126.252, 1.43033, 197.113, 30.9481, 55.8244, 162.076, 31.361, 12.9281, 225.702, 25.0649, 45.294, 320.477, 64.669, 127.117, 183.385, 217.682, 39.2494, 6.07408, 40.667, 38.1994, 441.567, 89.4277, 46.6241, 41.042, 78.1778, 55.5426, 74.4574, 7.8187, 37.2687, -41.0933, 179.983, 48.8883, 30.8553, 419.733, -3.71759, 17.7796, 124.578, 127.804, 163.667, 96.6763, -13.882, 124.082, 102.447, 4538.63, 324.173, 180.668, 30.695, 24.5073, 16.98, 477.005, 62.9815, 1144.85, 39.2256, 28.1562, 2343.16, 123.996, 11.7146, 83.3672, 3.66428, 8.77839, 116.246, 4.90859, 66.3551, 246.004, 221.677, 24.1278, 93.6095, -4.99042, 163.165, 22.1886, 95.5136, 125.46, 359.16, 29.7101, 86.7899, 163.985, 55.433, 1347.3, 102.779, 12.6033, 21.714, 57.3163, 335.173, 192.821, 263.324, 8.9268, 789.193, 49.4697, 50.0177, 240.026, 484.841, 101.277, 248.77, 7.27135, 318.83, 34.0554, 346.501, 111.967, 689.406, 55.0139, 43.8142, 233.662, 3559.32, 69.8729, 146.993, 67.9381, 9.17022, 110.155, 33.0339, 451.23, 37.8454, 53.2007, 65.4184, 23.8741, 41.1479, 439.898, 137.748, -0.908171, 78.0279, 33.4717, 8.48149, 586.873, 11.0941, 20.149, 279.665, 18.8279, 254.824, 69.7076, 21.5575, 221.416, 91.442, 13.8932, 77.73, 155.463, 26.8256, 29.1519, 245.039, 6.1962, 28.6359, 2230.02, 56.2641, 54.0002, 198.39, 127.556, 19.2836, 23.3047, 311.924, 5.13927, 169.6, 31.9776, 350.559, 59.0126, 2.91583, 141.862, 68.935, 256.027, 112.449, 282.703, 42.7275, 26.8873, 280.86, 337.124, 184.335, 4173.32, 109.806, 108.091, 562.811, 2741.53, -84.3726, 4270.95, 179.225, 18.4595, 243.641, 143.951, 48.7157, -70.68, 21.74, 104.49, 87.1547, 88.9827, 73.4805, 91.6722, 105.905, 187.846, 45.3425, 5038.63, 180.624, 379.443, 287.845, 131.404, 55.7563, 73.7012, 70.7104, 279.954, 373.029, 67.3803, 4449.96, 31.9084, 23.4199, -22.3056, 13.9423, -123.237, 342.9, 5462.8, 2935.58, 702.04, 52.6377, 22.3381, 154.689, 23.6823, 89.1286, 12.0212, 526.41, 956.31, 177.783, 4498.55, 53.5631, 130.637, 54.5388, 61.6913, -43.8786, 3.27369, 157.966, 74.2671, 313.025, 93.83, 4302.85, 141.049, 50.9147, 68.8394, 104.932, 2188.28, 117.768, 274.929, 34.8144, 27.2235, 74.775, 129.955, 28.7763, 90.857, 13.7552, 3576.69, 2815.26, 52.9943, 365.15, 137.886, 30.0445, 274.657, 274.697, 37.5881, 128.01, 44.2284, 305.179, 88.4655, 2241.64, 1805.29, 69.6289, 70.4976, 125.397, -5.50171, 143.371, 45.7598, 297.246, 77.6654, 14.813, 48.7161, 127.716, 896.443, 186.552, 1.34836, 34.5627, 63.0341, 179.091, 50.86, 20.601, 30.4051, 37.0237, 9.2402, 540.935, 490.287, 4264.45, 2419.55, 99.7098, -30.8367, 200.178, 464.518, 37.6414, 16.7089, 1.40506, -2.41517, 38.5733, 50.9868, 214.045, 154.325, 249.752, 595.099, 383.625, 21.3787, 406.865, 64.4162, -43.9011, 14.5308, 72.7384, 75.3724, 12.3926, 45.137, 113.16, 32.784, 20.6045, 6.76257, -11.4918, 16.1775, 60.4131, 441.265, 1.55004, 10.2899, 91.4198, 150.975, 27.8935, 23.1338, 108.075, 139.205, 1.73812, -66.9157, -7.14961, 699.37, 246.651, 229.445, 210.434, 179.067, 31.2431, 122.683, 4.80586, 33.7739, 17.8987, 42.1504, 26.7045, 113.626, 316.855, 322.177, -10.3397, 44.6522, 198.4, 292.841, 147.858, 409.597, 39.3989, 15.6542, 113.361, 211.954, 261.276, 738.004, 184.868, 61.379, 6.79516, 2955.87, 62.8045, 297.49, 304.946, 746.325, 7.84412, 43.0373, 186.879, 319.566, 1.83518, 14.2545, 3321.83, 545.889, 611.534, 133.235, 53.9387, 41.8259, 6.69247, 225.888, 150.876, 19.3394, 17.7364, 497.67, 345.194, 157.833, 3569.07, -15.6659, 259.549, 77.8127, 390.22, 296.982, 277.797, -26.6793, 124.435, 23.6537, 59.3599, 63.8332, 114.49, 39.6802, 291.709, 24.2746, 297.74, 287.749), .Dim = c(500, 26), .Dimnames = list(c("AFFX-MurIL2_at", "AFFX-MurIL10_at", "AFFX-MurIL4_at", "AFFX-MurFAS_at", "AFFX-BioB-5_at", "AFFX-BioB-M_at", "AFFX-BioB-3_at", "AFFX-BioC-5_at", "AFFX-BioC-3_at", "AFFX-BioDn-5_at", "AFFX-BioDn-3_at", "AFFX-CreX-5_at", "AFFX-CreX-3_at", "AFFX-BioB-5_st", "AFFX-BioB-M_st", "AFFX-BioB-3_st", "AFFX-BioC-5_st", "AFFX-BioC-3_st", "AFFX-BioDn-5_st", "AFFX-BioDn-3_st", "AFFX-CreX-5_st", "AFFX-CreX-3_st", "AFFX-hum_alu_at", "AFFX-DapX-5_at", "AFFX-DapX-M_at", "AFFX-DapX-3_at", "AFFX-LysX-5_at", "AFFX-LysX-M_at", "AFFX-LysX-3_at", "AFFX-PheX-5_at", "AFFX-PheX-M_at", "AFFX-PheX-3_at", "AFFX-ThrX-5_at", "AFFX-ThrX-M_at", "AFFX-ThrX-3_at", "AFFX-TrpnX-5_at", "AFFX-TrpnX-M_at", "AFFX-TrpnX-3_at", "AFFX-HUMISGF3A/M97935_5_at", "AFFX-HUMISGF3A/M97935_MA_at", "AFFX-HUMISGF3A/M97935_MB_at", "AFFX-HUMISGF3A/M97935_3_at", "AFFX-HUMRGE/M10098_5_at", "AFFX-HUMRGE/M10098_M_at", "AFFX-HUMRGE/M10098_3_at", "AFFX-HUMGAPDH/M33197_5_at", "AFFX-HUMGAPDH/M33197_M_at", "AFFX-HUMGAPDH/M33197_3_at", "AFFX-HSAC07/X00351_5_at", "AFFX-HSAC07/X00351_M_at", "AFFX-HSAC07/X00351_3_at", "AFFX-HUMTFRR/M11507_5_at", "AFFX-HUMTFRR/M11507_M_at", "AFFX-HUMTFRR/M11507_3_at", "AFFX-M27830_5_at", "AFFX-M27830_M_at", "AFFX-M27830_3_at", "AFFX-HSAC07/X00351_3_st", "AFFX-HUMGAPDH/M33197_5_st", "AFFX-HUMGAPDH/M33197_M_st", "AFFX-HUMGAPDH/M33197_3_st", "AFFX-HSAC07/X00351_5_st", "AFFX-HSAC07/X00351_M_st", "AFFX-YEL002c/WBP1_at", "AFFX-YEL018w/_at", "AFFX-YEL024w/RIP1_at", "AFFX-YEL021w/URA3_at", "31307_at", "31308_at", "31309_r_at", "31310_at", "31311_at", "31312_at", "31313_at", "31314_at", "31315_at", "31316_at", "31317_r_at", "31318_at", "31319_at", "31320_at", "31321_at", "31322_at", "31323_r_at", "31324_at", "31325_at", "31326_at", "31327_at", "31328_at", "31329_at", "31330_at", "31331_at", "31332_at", "31333_at", "31334_at", "31335_at", "31336_at", "31337_at", "31338_at", "31339_at", "31340_at", "31341_at", "31342_at", "31343_at", "31344_at", "31345_at", "31346_at", "31347_at", "31348_at", "31349_at", "31350_at", "31351_at", "31352_at", "31353_f_at", "31354_r_at", "31355_at", "31356_at", "31357_at", "31358_at", "31359_at", "31360_at", "31361_at", "31362_at", "31363_at", "31364_i_at", "31365_f_at", "31366_at", "31367_at", "31368_at", "31369_at", "31370_at", "31371_at", "31372_at", "31373_at", "31374_at", "31375_at", "31376_at", "31377_r_at", "31378_at", "31379_at", "31380_at", "31381_at", "31382_f_at", "31383_at", "31384_at", "31385_at", "31386_at", "31387_at", "31388_at", "31389_at", "31390_at", "31391_at", "31392_r_at", "31393_r_at", "31394_at", "31395_i_at", "31396_r_at", "31397_at", "31398_at", "31399_at", "31400_at", "31401_r_at", "31402_at", "31403_at", "31404_at", "31405_at", "31406_at", "31407_at", "31408_at", "31409_at", "31410_at", "31411_at", "31412_at", "31413_at", "31414_at", "31415_at", "31416_at", "31417_at", "31418_at", "31419_r_at", "31420_at", "31421_at", "31422_at", "31423_at", "31424_at", "31425_g_at", "31426_at", "31427_at", "31428_at", "31429_at", "31430_at", "31431_at", "31432_g_at", "31433_at", "31434_at", "31435_at", "31436_s_at", "31437_r_at", "31438_s_at", "31439_f_at", "31440_at", "31441_at", "31442_at", "31443_at", "31444_s_at", "31445_at", "31446_s_at", "31447_at", "31448_s_at", "31449_at", "31450_s_at", "31451_at", "31452_at", "31453_s_at", "31454_f_at", "31455_r_at", "31456_at", "31457_at", "31458_at", "31459_i_at", "31460_f_at", "31461_at", "31462_f_at", "31463_s_at", "31464_at", "31465_g_at", "31466_at", "31467_at", "31468_f_at", "31469_s_at", "31470_at", "31471_at", "31472_s_at", "31473_s_at", "31474_r_at", "31475_at", "31476_g_at", "31477_at", "31478_at", "31479_f_at", "31480_f_at", "31481_s_at", "31482_at", "31483_g_at", "31484_at", "31485_at", "31486_s_at", "31487_at", "31488_s_at", "31489_at", "31490_at", "31491_s_at", "31492_at", "31493_s_at", "31494_at", "31495_at", "31496_g_at", "31497_at", "31498_f_at", "31499_s_at", "31500_at", "31501_at", "31502_at", "31503_at", "31504_at", "31505_at", "31506_s_at", "31507_at", "31508_at", "31509_at", "31510_s_at", "31511_at", "31512_at", "31513_at", "31514_at", "31515_at", "31516_f_at", "31517_f_at", "31518_i_at", "31519_f_at", "31520_at", "31521_f_at", "31522_f_at", "31523_f_at", "31524_f_at", "31525_s_at", "31526_f_at", "31527_at", "31528_f_at", "31529_at", "31530_at", "31531_g_at", "31532_at", "31533_s_at", "31534_at", "31535_i_at", "31536_at", "31537_at", "31538_at", "31539_r_at", "31540_at", "31541_at", "31542_at", "31543_at", "31544_at", "31545_at", "31546_at", "31547_at", "31548_at", "31549_at", "31550_at", "31551_at", "31552_at", "31553_at", "31554_at", "31555_at", "31556_at", "31557_at", "31558_at", "31559_at", "31560_at", "31561_at", "31562_at", "31563_at", "31564_at", "31565_at", "31566_at", "31567_at", "31568_at", "31569_at", "31570_at", "31571_at", "31572_at", "31573_at", "31574_i_at", "31575_f_at", "31576_at", "31577_at", "31578_at", "31579_at", "31580_at", "31581_at", "31582_at", "31583_at", "31584_at", "31585_at", "31586_f_at", "31587_at", "31588_at", "31589_at", "31590_g_at", "31591_s_at", "31592_at", "31593_at", "31594_at", "31595_at", "31596_f_at", "31597_r_at", "31598_s_at", "31599_f_at", "31600_s_at", "31601_s_at", "31602_at", "31603_at", "31604_at", "31605_at", "31606_at", "31607_at", "31608_g_at", "31609_s_at", "31610_at", "31611_s_at", "31612_at", "31613_at", "31614_at", "31615_i_at", "31616_r_at", "31617_at", "31618_at", "31619_at", "31620_at", "31621_s_at", "31622_f_at", "31623_f_at", "31624_at", "31625_at", "31626_i_at", "31627_f_at", "31628_at", "31629_at", "31630_at", "31631_f_at", "31632_at", "31633_g_at", "31634_at", "31635_g_at", "31636_s_at", "31637_s_at", "31638_at", "31639_f_at", "31640_r_at", "31641_s_at", "31642_at", "31643_at", "31644_at", "31645_at", "31646_at", "31647_at", "31648_at", "31649_at", "31650_g_at", "31651_at", "31652_at", "31653_at", "31654_at", "31655_at", "31656_at", "31657_at", "31658_at", "31659_at", "31660_at", "31661_at", "31662_at", "31663_at", "31664_at", "31665_s_at", "31666_f_at", "31667_r_at", "31668_f_at", "31669_s_at", "31670_s_at", "31671_at", "31672_g_at", "31673_s_at", "31674_s_at", "31675_s_at", "31676_at", "31677_at", "31678_at", "31679_at", "31680_at", "31681_at", "31682_s_at", "31683_at", "31684_at", "31685_at", "31686_at", "31687_f_at", "31688_at", "31689_at", "31690_at", "31691_g_at", "31692_at", "31693_f_at", "31694_at", "31695_g_at", "31696_at", "31697_s_at", "31698_at", "31699_at", "31700_at", "31701_r_at", "31702_at", "31703_at", "31704_at", "31705_at", "31706_at", "31707_at", "31708_at", "31709_at", "31710_at", "31711_at", "31712_at", "31713_s_at", "31714_at", "31715_at", "31716_at", "31717_at", "31718_at", "31719_at", "31720_s_at", "31721_at", "31722_at", "31723_at", "31724_at", "31725_s_at", "31726_at", "31727_at", "31728_at", "31729_at", "31730_at", "31731_at", "31732_at", "31733_at", "31734_at", "31735_at", "31736_at", "31737_at", "31738_at", "31739_at"), c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"))) Biobase/data/reporter.rda0000644000175200017520000000376014516003524016411 0ustar00biocbuildbiocbuildo/F p~ w&;3GG>D@jPP}tbTJnR,?KE1Т/}g凳;8 ;cgw;͟G'u5֋ vzoCϥǣ8t~uc}/x]!*o|_p[>EROX^O(}7٤ nMmj>Q:gx:Ά:Goz[ރ/5E}}RSkp'$iL>t>Tsmvtuih9&|\+ӻy=WZT+Οkj~\OgוgUu2}~}vӴp:/dnG Wi2]E'zݬzŧ{trr~]g͑ﱞf鵎zEua~Ob؜DEXǼ>EuavלD^G5r|{;zRZajI^DhI֚Dxo8Zk&=Zk&輞M. <7GAk?2zq8: \FmwyHɟ:YXFѧOG]~~QQmafYVHޣs:9fisdG[G :+,۱6ط$!ZћahCE0|t_ze/^幼|{o9=rE(t.G FG[֮%ڡvPйn`4:EYtP蠰 @ + +C>}>>Kqy 4 4 4 4 4*4*4*rEWX$hThThTh4h4h4h4a 94eKֲAAa eލX:椄Kh,9, ﹵$ϛ!53tu,DY>shh{mE.цBŃ,d YЧЧ A#{=G!L4=GP*)F=#eQ*)l2GTqđ<'6%mS9YͨUwQ?G3C%٨y yQGs%5g-;l6unBR|:JΒP (E |{SG 8&56:Z$sN K2 < (ȣ < (!{QG{QG{QG{*߄TLR3I*HUb|TAj3-|b$.r )X`E]8-{4RitHQ( |T?'4!Y؇S,ه3p! 2pP>aPXͣ|G7T?8N?X} 1v ;q8s\38N<v 1 CcV,?u9ux]myBԏ ,Biobase/data/sample.ExpressionSet.rda0000644000175200017520000021623414516003524020644 0ustar00biocbuildbiocbuild7zXZi"6!XY])TW"nRʟXgqjn]L`?(BcI# ")pw濽rl+t !ט~(U4e\HÐop(v "jS% VDŻ!?[[<}C.DI*>Sw uZjAjT4_'PJ3و bȯ7y~aSig3U+gS|mG ڕ?C!JSrNEjZ0;nP2`7a\?OërU߁Q_ .9b;qyfV.e 5kh9f9D]Eq%F=@w&RfŋB@F&-pVPT˜lMuW35#F]+TteGu݈&N&0x݊qZw 07Mdxˌqpj \kl\]*]*O\وrKU="Jɒx>TbGU!]af#y~{x?H8P;>x2X%jXv9?zlD4Ha%/PAIs9sOjIbe$Qx)Po_},愓y/gOD4e}߯;('7t8RӸ4%2)Kd@O#W~ ihcLD8G3Fk#ý†#+ n/wa`zJUrq;'W']hpf>m5? \kW`*Q#fϾPS$ #p?@ M=\cXTjQ{L}d!op_o I;dwHq$+.0ig;1]Chg?g ֔@ǵ'wr-nrӇjJ ަ cJ> Xk↝^N٩x~L@82L}_~M-u|k^ ZnOu:%+G]g^*ĜVd&s$1vcENqmICOp }wl`B((exM'{BB)cljgN!EnfoKH-fn x#rڴO,0Wld MUJ4>so_ÿ[W=+#nSIah.[Ek peә1q@p_ XL 7}Hp'@*cPK|0$Rܺ/^vUZܻPdFI&c8V]њ8 h%[!Սʷzm(ɷx-9F5ǗXiO!`T%Ez~$aJ'p!O3+DN]h3q5Z~F|'?+#Tq.G"lphm(8>. ]Y_B^NKD]r(*C8+ƒO2ɝW1T.QydVV"ot|2 =|./ګؑD}k1g6Q2{wXݣ Elq. F;CėSPTJZ]*̣pT?Lz IªҔG8;z;y,CzO@.#(ة,'@Y;NFG&N*Ephd}WTlT|b;YFf_ 9Լi7ԟgG0b颟3ㅕUCI |nץ#M| KдpIR7d DMqYa+GF{١/WXޑ^Tw./. ǼN3^MGv` }f0GN43_&s7(V}@_mS8hd2|N-8*EFFi$Cn _h 1!J_޹d&K*I[dGǛ; E{OꬣIaMpyPX^2PTseWBFlUkR r^gJ'Al7lMF5H BQ8l)jZl:k*k Ҕ%}1DLuX_@"I~5Q /e7E:W~T+g ~@pwl$Aw F#_̐qq{w2$5Bp% Yr$UY^`w-"(\7DVmw!ƂIx 3mds\MQjT.QK:(o*ԪsD mk?:]*< _a&|UĩmP;Z쫬FVUm=t( dN>K? {oԂܨM' eD'm4 6L6ܻ+6Wc0E͵ JLʱ\.M )ZMm97Wهٔ(c۟<N.-ZdT*V$ϛA?;ݻ\*5kSoLV`٫=i|r!4Enէo:<4RM_g<*}},A1 Y’tb!%qYejQ{ҜR2ŁA }G:`TP 77 {,\&zӈsH浾Uqlccj0r2MEgP FBܳkwcCɖ_=wE]ZpeJ>|<3,ss{y%Mә;1© $7WyY{LTs q!F !1*6zKy6緾HTvaY%~g"UP Ѐ~A_˶EevQ$T3H"XTXWu0$H~((L[8}xזː]WUe'tz;N/ے_'S)o& rХC`")>ZxgS ܡ^:FPv^Q Aі+ 3@ZPDF⍶߃aU|f,-x9_7@0X}aDv꬈jcYB b@ʠcJLx8v_dC펬>aOiƤ:LBf0Kp2>ݚjyt3 {;N;MƆHtkQ;fZxgì|3oW50)!6Adsڧj\]~O鏄OiOwȶe~ȳ%ڜu e E:V.^?*ed Tyչ\JA: 0n@AyMfjAE8;&5Co qN6,к%Z(+se LJBxwܞN^WF]}\@oD)ÇH4Go6 |) =u #m{:a))v0ӊ0{Ja}|w7[s锡*6F Ck XyI\))S͂{֨.mDgs-JXDg5;8k XWh AȦHF҃zl+NE$tt=O+)r1^N%g?'/E~W1pW ة$$䯯z"AfzCrCh49<ngKtwaSqhlsFWĄ {j?pHWՅ|ۏ X6pT+wBUw {M~Xi-G D#y*&*K-af=[ 2Ewj!MՓ , $e#|ٱhu,CHKRP<5v'[A/>u@xv]q2&xX7i¼1=ݺYr~38EG״ *,*FӿFez/Jnxѥla2]6G~h 7p#9P% 6w`znd!@bG{ݸÚ /Bi [ &5pGkVl!FHXC:O,t^N;;t. kbb(iP) <`^C+J3ج-`Q۲# H' 4x)ae 5$? fvD)Tn<ۗ+ lkxaZX:ǰ-uA|Ld5w+Xl[Q!5<݋" ʡgJ_zW/ݠ4F,&4!JKW:ުP[Bθ"mAq5r?L\rǁ" Ϩs}r6d?I H1Z [^tzߦ73.L: 7dEx+1vFٮv9eGi/'0pp]0hMAsLiK25CCbXЩpų{K|OYL+Hio (NAi;bx>DQ`~\Q>w*KPX&;_כjt#&Oޣ;`br̞nɢLX:gt1l2iKXVh/.AP=kKm\SP*jBpq a&7]}{I-NŬS'E !Rc3Yc_ STr[=/Lqvi\\^iI޶R$ȓ_r.7rhʼnPOʧ;KUo)ftغ:VWc6՞E3`T%=#\ ](HsBkSck8ƅjo 2Owޤ8hs#h6TVʧ,S9yhfjV^w$xڻ 0osFsHt3C#$lU;=aܙz8 -ʩU1׳sLEof7.*cZ1x{ [zY᮸ADοxlRbVٴ)lB {63TWN_񥝯_6t4ݺﰗLGƸ;iz,%s 8\ 'Uz|8ˆu$;ሬ5$6 }=yše"2XLy[6TvczB)FOeqlЯT8 SMW soZ5~jR"u1KwZ>UTw|_Vŏ?0 yñ0\o_\33`W"@1<.v#3 V|uo2s{2M ::\OPZ,_#kŸĉY""{XJ Y^Z}2M}&]=NGҭ!6d!™[BޢX2_o. O}m{TA|2^;gσ0u,KS TGHGuKnya5H$x,pjΈ{V;(Va xӘWúR˜xq Zب'1ǭi[ko5tq#oc#Rh{t @2nLY>EzmX8y'iU_y'Iw0]c#LL;_o+Eڗ$~!I<m8+.$VSEnqis״PjVZR]ZA b׿:#޴ȑo Vn/SMK3,UZ,/Y b'.'&a;*DC2`i?72^ np`GC`pY-xs<3˚¦ @,Ļ 8V\xv<bWmJdeM zYG3f֧J1\a-NƐ 0?`C! Xџ}yڇ,|rXA``9%-YӱKB] ;Ka L<&K;)U k#K#4ZB'V3m%Ǵ f%]^yՇ[4Brڥ:dOܾ9=~W]ߐ*Qk4Uf5HJ$):ln\=Sbv[Yks7杛ƿPe1p1LLֹ|66a k>Ea ?\A|3"s`V#瑭[Ԋ|2(%|A]y8}Fh!a*޺fDQ-tI>^ TPd2_!'K儊D bla2v..Zw]xgo AQS,7<d28&r^3DeADjqm@r~CC#V~ Km=j/h#.MD״zWammvWun541o+̓{?p7cPhrDk(Uy0Ѹ= ;_{Bn;#Ә jT1s+i}p+E5:[PՑ q~ wP`9Msqd2`7%J_dHx`.!SPȂˍdSQlܓ!;'aW"Cк]2.[5u446WSb~b }1&ʀ PyT;uU’C| }L~N gBUO>*["B)i>'%zr-AC1w8IT2Qg-_M|-6oH+T:w jR,a}Ԍ|yJI\9*S;ն$+Pf\\3u lf;&G #ʷe)Kr8p}:ED,Xew~:42HSۘxe:nڠGnܔpbSC 84H Z\Mr/IT<oPE֮*Q:OtnpZ I*zu5{/}ݻߔaLAp / 2U6/F f'WwJ *ݓ਌.5 QS6'$ s26RNui CnϲWsp]D͔~6at fW^]Rr5L3ߞg/'`1Ք,vulk0N<#Bϱ۱OH~ACL& aVx%w8ou&[PȅTAo(U:랸}&"'MqZnrWA@ZfG<>b.Te{˨;vc2+] n=WjKŐQjWɤs9,ERSshn6jx,|fOWe2_%HF)Y:2aĩ -ݻ$ ."P_r^bevc}:"unll|8K8{nKb ,ӑ|8z*-ɚq$FCaLƀOCc_Ot󜨘v@6ja]p GdJ vǜ@<&=g "qä jPMg~6jsXסJ_HAnU m;襸UAFH<$>a͇Aڒ8fX-|ٶ\x #gP]PwSL9﷗u:lˏs\@{zIe? dwQu3ˏbB쨏%g f(4#eyڌLa5$7Oo.+\g&8 >8 麸)uצ?j =3ԖPxqC[q[Qlx|P|9᳢@J"vZ"ű 1z9ړ11Sjh .pRKsMϠOû`8 =xZa rUݛvc1z3Ƚ]LX: ܫtPIpı)g4&`0I3%H T 0?Jh ̼YfW(I=Y$ 鋖Ϛ8L gh!Ld#9~#tɉ]c A㏢چѵPZ`a=e#gsLg}"ӭt3 ^貌 EkZaHZΧ:ceSSm^>jX9<@jG?ċdsIv RhBbUkk´bWzt'KCy$l5EifոEkLl sT(v)9-xУAӃɀ?ɚu:Qm@9+aOuS35g9ȏ/pVK].ـpvtƾ髀MO:yt6X5Z`xjĻ(w,y5Āۦjǜڌg~:1Jל*dAG~tc ꐖ5w}jSC@@ӽ k)-rL_po2ؽdsAꂲXo DT?zlN߻7#Sv F:_BURԡ|X$d\9*<ӕU WhGMvt21C02zYK\+I`^ltߗH{6V]ޗLW!MS+1m21YXFl {&Y=3}#kuW0{hEi]( *Uڹ7LHo5Q|4;qž% mL@Wtj_ %Z36xglkCA{@p;sӰs5Vh,/ 3 "S6 ZشizD\$mL\ Jqq-VWq|3W r~*,t--\kr;Sf;]!Yl."D_˞$~ݭ9P.YecflXz0kr |VȖ;J@@9QR⥆|HKşӼfybްA*@"G[47~v"Ulk1R4'm(Je@~ V$%]Bz1 RTS=auuZ{x'9C*9{RNh8莞&sabr*RaW9/¼E ,TZbv[X]H-.jKȌjpz6 $iuc*՟tii>k WLjEy%ΨcD,plLUq(WkJ Ŗx8(QtoxA3O۔&¾;en(\2U0m ~O9fSЛ5uS4PةK1Ρʶ\HzK\{9~Nynw RKHJ47Kr!| }A"dkC D+NFRKQŮ\c:!!тQrWL ѯ@\"yYWhY<ӎFk^>")#q&?ѱsK槕Ր]w~rZAkXW@Yc2$9\ u04VBXT#şS8RzШ'4wI\#INehă2'SjfRރob㝐f!/07Ę$Jhph3ϳ(K@w=c֩uY:Rڻx5MWi'wW6%C B smijlVրV0y=jBȤb#ytBKc--S@WY .a^S@;:(EF3Tdw//G-rbTO'phE\|ʟh%`dLa}@h5%G1os8:Wy bd v>X*ogyҿQé'O(;Qo1z}՚AFk*Pf8 !i^޳*G"_Rq̔/![.:B\O`Ik2ȑ~bKwdhYߛ f,bdL7!Zn4|S6eNa={툥w&4AS.ܭ+HfVx09jPݑGzZw~ftz=}ʅ =+qE`A6@J`?&딅Ql(H_X@ 9$*MQ [+z4e_0!.'F?Ai !/y*;M'>B_5z$/r3@^"(;{iڅ a1xeWљS|.Z>ȝ]9c%Q%}.yG`ңڬSII޶H1G}>ԉI-M{'غJ9r/Y:v %- 4c{+>AMq >5G "0N<9r*Š8y԰|\$"oJDLz[+3xS͹:lMy7Ig`7v,-23 ,3 #DH'zͶH܃#W`ٿvdK֚_s]-Wr2:2+wwi.4^о)GMUDތo@Tzo&Fe1p,'sXæ/NM=ߊ^vZD 0t:2HS_2T'^z)ky,z!dFc>vV;يUH->kJŔį{T!Bhj,(A7{n/]rC VdCyȕ'/ tǑ7}&̉.u(L?*,jr؃)0틩TWU|ױf7=r3`F@5AzPUܘpŬuA5VGj uAzʏ1/4biç %vO5 BHqYRb;5 BzZ:aSy^ ~{vg<7zvI!YAbu/^)3FlQkEbE8V=үObX44@T ;oK( ޛ"u'xRW/tnÑxyp @f%2_c JL-|j @i&_uλOһ#Qrn2emznQS K٪ƱJMO`qȌOC('?MP,qJSp]' o e,ȱU N(H]k{Py:Sm[s(#Qb%h ^9ecj@tc'.9{{q0NKu=a_AZz.HJ%)ْ{:g>G%|R1ͦh]ci4-xA~ޟƧu]\?Q9tVM"]\_ wd8ijKe= & Z<OH/o_,S-}3G 9Ʈ=OP<u!d|0GUpa&Redw"ILrXwz>pfᎰqxBΦKkym晔eQ٦QZM옛&HK ئL (>`uvZeҁԹ[.ߝ>I,l Ic[uuqKF"%k'ah"{$zҸoh~9j9F)\ԇ pdz;#60rdZ9tgІxL]s.&ESLIos )wr:45y0 |.U){a ^FmɄ8#&~2@B&f)c-(d?!|a%!8x1L3ia[^RѝsYtLDEJfفq$2|Mރ˹QEL^U׿Џ%S0GD`c!+>v:! vڣItFsh^.#vjY >`?n黑(bzR=֡e6|,ڪkO$!uZYƝMBw~}jb c›^SiEӫ9!<^2@dR~.HrCrrY竛UWR;Yԣ}< }^üToA@}855l-`$M_(rvSB} ;!rKKpҝVb.|"^^m>hlF¸]:g_sς^=<H %CSc<{P<W.ByA,4G:ۅx <׌k1lSzA̧^Fg@L_rE/*3V+>v?;<{O9c}8qpl*N?YHwUܽ&׍i 9 JjU_uQU'r[&F5t@}oD@c% FqӑV T8qƯ2eF؉1A1ޛO?56+慏fq^(!hcBW9!+ .G =$iu?;@W#eg2l@z„S)b oI!)1C .wT3bDdug~n-4{`sa$P5d,rߍ3Rmgk(H!1RSyPkO 8`mD\U?ߗ8(3B%3gW7l;f4(ҟ袅gUӃ&_CENT2עJIY1IC4`!ĘX!f:y\ydzUA 5 QLEU}hv0T'gYU#vnQ <7 mq(U<}Y}kA[BYvMG{3G:A+Lg]|vyuw,EL1i*^P8TMRn9؏{tdo9A<̤?w;9i#e s''8zǂb{=.ȨL;ؕi@%}r=ѴbuMgI=J4~@ hZ~<)H6rbn4}O_9J%_Mw&jƟ9™mdK캆3*+y񙰭 ?2)dy1gCBIIPb4Q&8aH._~/eV$!,@nEn!&l(LI?:Qkѫg"2>G8E盩[FmS;[^ cot۶)cR`erѤ DXU/Vn?^q&]-؜k4+|T 枇mrN 5z+4[չzAب-L$q [3M$ sg`Fg:t?i虻ybK-NxBD뚴2ꤨE&z?恔FRP#,Ge iyάu1dZTvTem˲j}ENAכx5m5[Ե~+H%8ةtR6Sj74TA5u遐X'篒@]iEvU$C'^`Uʽ,@O4bTݟ< iOEsN.ĂaFrQ W|֋ + 3@+^|8s'j; Qv8+pkΌioLܲg8ɭH΍U)'!U#K,GN+QkxmC .z5_7+0؀.8 &oaSϙq#̝SLy-]6d4#һu hHd=8gLJ4/G*NAv\Vtg6P򈞮hcͱ3+3Y6KF`.%RYQSc?FNCuD=P24Dgƹ|4`a{/((jޱ5.~uY:1)gF,)=iHiKR-9rgzFεTmjo'VgD`k-Iܟ m̓C'$)]L,io8/]|}sbEFpE 7{R}o$C0$w O T(ʎ:t27[lFe-;2gfk=),=)?Z~Wkd[xjgjiCzZ=,o'FuzF5pشY~8=@I[P ^Z.\q75<A+IJqVh^*/:_9SjpU׎A'N0 O_TjLcq 6΃6fu+n+''/ ,h<]XsR Bb3˓@ivbhuݓ= `y# s`9#Nk#M/09X3W(^v*=[}T}ál+GkoB#ѧl >p~ -R(+xN&L&3oK Z-KR|NUrZRr7wjyhU5^V5 M";8)q5ÆaQNZ` na{*{p4OF'@i&dj\C"=gţf<<~6a|J:08b=P.N7U>6KΜ;XEp , +Pe6..x觝inuLd83J 7Ó-h>Dvde\3s4ٯx~Cr4E3j[]LKD~-%gPhud C Xʳ5 DG"ۢ |Z;ÇXR\>p-%B:StH36*쉘 m|aj6<p\Nȟ %0%QlC/Qh>UA&hI8 Z5ոɓBw[J\UщX?qivD٤?[Xȍ}@&ǒ>p}/¾0_;y1ca q.?liYaETW$F%5ąY $<0G0 3njYJ {N6>?&8$YnVMkw|Pv*7&4ֹ@R!]ٲʇ.pbG~tvܣ6ᾘ9R\C l80sxNXlZ+G@kfޅYkiW)JsFw >94xp _kRPӵ+bФ8doL-8Q3E`bsAZ=](ueҹ:C~:>qSji 7ryd(!dĸGfаɐS+i&[B'}!]^كck=?޴'!9&%wߴ2Ssew`2-YfӇSwlܶZ_' (:A: aWլ"D؃Y2HO$Ai7{RQR +w(W?-U/0q$+XL;p·9UO ]1r68Y90#~1,sCT5[swMX?s v \EN? +c87CGwNpɌϲ pZN`U$QgWHR qaFLh'x|'^q<+Tp:>1Qޜ ,ܞ:|nEO`fDXqO+{-H}q[wm'OrdÌw⼐m ]*|1cdLĀƛ4<с:kH330ayMܩtc8u6bÖƏh .HYh4`F])gi*K[X$H*3ʝe7,fz2~/oOV;$@v}N= da:uQHiC$䶇;$BXC?]o&dG<_poQ76nn< %nG*pJk¥/N6PZEiFD=TV~J2wnokk|uSjZ6X]mޯ 0t9aguXFPOn>gp, GCI/J42AOs's`p"F` ߖe?u[ ׍sOU$簢DYLusq b70kP T^P|\MV%+Ŕgա&2WV t =( WyOSBE&_b}| VpCJiI1W: mmpO$3w!%=k&4^:4ɳ3-=*pX-e4TnQєVМiKZ 3X`5_td 9B"xl؎~Jb)t+V!鿬NV?v,74&,  u[oR9.tV?YCwŊmh]DnqPJ1`m3 g5OnS2ιv+h8,d,CfW-ff%JqT^fڧ~ah{dk:qWEM`Neĥ맴ԁOk^kEQ _9I3"A$gJ"aldV]L R@>{ .ER5۬L UWwD:܋}! "|;j_મ>"-w%*uIsv)kc=g,8e7>3DrZNÒmM7H RJbh>兂[N (,;vˁ 0{㖚B $N!w]O'Ɛ|JZnYYdzY.~FM]]iEEΧ w,Y +U[w?]÷I  Z/?3 KQ)hgDkTxMʹW&k9CL=soǘڰlzVgeRIۘ^{)-S 6i f^qԮq]bKx>ECH"y;-Uw$e˻I 6='bq{9vHˑ 8e?]/+S>5Э901 Hb:H,%=6kkBz)R䨽pPG9Hޑ`hl)smmBڶݻ 't w1ikt9P[{2wF K@D,ga%_25mzwsaPs%6\(lR(rk|omO>`ߥYh̶"$K*̻xh+@_sRNnJ(+GʆI[-rRHXAlͻwě:Ř2rY|a oK'^ ǪJQ2 m i[\CGqNĭ>:ZQe)KTa Rţ4rļG1s&G:t.-M"Ɂ>2:V67{e\'[X8]3?p6֍f͐07dxerFq^0$7<=5Iq7Pc2=v4&ԽR?SȂqڱebx{>ngX]ZRP؛8 A QT PQ/I#@7PUnC7n3<@\YlF_|:` *B*EFڵ@7BrJkZả¥mSʔoo3w*9Ż:cl/L]U*{QQ8)n0A(xLFlM{/QGNxb.7 A\)0^[J.[3^ 7at'啂'(_QOc#XHAEB6˸_'a`u 3q <:\g#Z[2):`T)GqF]taݻUܱ(@%<^ j#Z#EٞdE̒M?lW|]"I/|!&rCL,;xZ%@_fk,)*XĻeDv-#Hlc<`>"fƠa#]eߵCժs G(S_^9J0}V;Q&)d=8gq{GXőK@I%]_{/:)&3ǧ ʹQ{0 ZSH#vC4\SAtdNZQyn!z!kXa/)qv`F'%#:JwpDۋs / ZQz4YP ܴ2RFIf趿߷{o+:yw;&:p`=dF(+Ȁg3DŽLFƶhT;m5KrQҦD[uLJ8=\'$GsYrIÓ'ocQH{cgQ0 ]pٱg((RrkAQ!YmrmQB?kR•zm[VO`훀צ Dqn"#5ϓwG*?״"t]{jo"uQ3;T^k d{Dl֩Z'}~JL- v?R ]ל{Dbq-^2 M&s̮EеMSM%['5Aԕ'u"=cZHZ/2esOtH0l27=PMrw[}.FfXv ApE6UJm1?\cMlRY_#21*!4"lƉn,Q?7IIbAޡk *bAHeg 02UΡx[E;GT0"AK;/0dT%떶Dln mM)|rL:=Qdj"-4|Fꓝ˄&O6X5rRv<"W%Yf.i*9Z$uy=oեa6,J,K9/q|,Ks @" Z;z >3wOIazM_<6v!לdfKPv|'zSeX癜vVs R/tR\q-"8m7Wùٲ-Rz}էs,!>~\QGH9=; ăt1F~9#Q_ ( YeӔ!* T˘a{)J956EXT K>O[^ i"LvSZ-;{RJf]o.ON1*?t .z[ SVZjT+A8k+I@Օ ްJqa[ ] Upr5T9n}.ms7̤nȲK>q͞3F5Rʊ8cdY{c]`6ׯ5Kxxi]] Y.h4auEgxzFsSWHAOXrg%7L+va{wo!oLLj2 }YcQ)M 5 /-ƄnF G%+04˯NˍBɌ؃Ǻ1 7UDXlO F뇽H"p?aJv?BEhl똖|4T D,JMWM6{9I'g;r[+Ǫbixa'Ct^ɜ?mT~m _=Bތa"v;diZY{8hʕ||Th}=_;utGY3 q^@X=9;ӧd {J iوO دD0$cL4GA:"wG[.S5qOhiwƉuHh3dY6g2ę 0  '/:ԑ&NlL ludkwc/J )O4M(ADd79=t?"$Fm&UήG(JZp56@IdYkR2C8הO,MEuVGo5x>`>e DJ(m~'g OLfCB.  }RE@W(w2P+]Y-Pq$ty۳5F\sJ!v[? 2=;f)aw|T|0Ӆ8w3aoI {0iԍWǝn  I{<*m@v)cB|Z?@ 3)4mޢ^H;nzG1f6C;=#5a9+%ƭvXH oB@}`۳j;7&CĆ& bݫv`*oޝʒOI{+)w4"AѨ!_bhB!L{gP ~!C,;v302&&PC| ,=NQlױ̷!Ӛ ڌ8$SчtxȏJRf/wVw7PhArnAH+pO ɱycB(V# >{@51bJ_w"}%l6Ζ:awr9ALJǩO;dHUq`JW~K"ūR , A;BeV܌ ։5?u2,*X,V5c|L &1kg w'w 3M6&~^Z?,- Y9ozCUU4E߯AQ᨞[xڮlAV5IR>#7eG>aalbeTy,"}kVcgĻ_)g\%^\J䅓BYyЃ#@C-'6HQ+Fu{4oFTf !ˋqPI+8w\Bu;Lؚy?ֱ{\0ʼ!0`,^)ݷz[M[o7KIfS2F2;`e9?8zBtyGg[!EY8n6W<\J:' Ln pj_l@5ڲij⿥rerHM>ܬPG}C,6@"]γfA]wH^D52!Yl?nb74B_+g$9:NhoTNt1!Zӱ MS֍0wW!Q|JΤXN0zI3/E bxYh@% uTؙɢF1SicG"11@30Ė akj@OaexG%8`FSKg\8-D3jVSe y$ν#nW7bT#AXhd:(s1η;!2T] zvh "NmDEj9~RV= V<_[ZR{}ˑZ{l\t_h·!L4M8( =[~ZitLs>;HNoRHx~o8pãG8ۺ̬xL0[I24^c[V  ga|,k3p>#\ܐ&4uvPΑ}j$$س 3i,llm=n[^×3yK巃"; c0e/ ׌{_۞?dlAA,;΃^{G~g(['(&uӟ(_wKfc]mlCH3CNX7(&H^EdZ36>-3c(Y_eK3~y4Mҭ E%.Ud=uKyp Q M?!|.vdΩ4I@@p.nOͮǿe{R:Įg "\~t`|IcK oi zi3b[m@*p30ٹVN|R]]X.iogO%%P@LE$iS9Kc)2LmmZjAo7_4~0UQڿ`-KOؿ_Q==![YIŇtJW%2 ) |q|uyfP1 4w͠.$ln|>5SC.P;b/\,6i<՗S[,.=(sj?Ǖ2~&)m8Ϧ* (Eaէ[];zmSX55MR=PP|].)nsP$v=\ 1,w]yZ'e9;f16z4 d1hd0:prJ+ZOTK3 @52 |9!}I@Bg Py t6N!8L2.]P/C~8e<QSe` Hdu ݷ1k<1|VֆFNsȵZs4e Ps]ye4ecÄ3^ U+vj{4l\vĪFb$U dD޻tua+^w]oe 4-HLSp2e&qō>ƩAjy t4M+nAF 2(6Ɛ14B3R anNQgXjQGR![ >[A݄Veq~jUKJvBZRMX|<,?7ҭ[^8jX=zfqH@ke<=r뜉?lٷ 5/,FC~Fney[+JuW\p0\`YUQ2 8u|]k|U+oc= ѿۥXA] W5ĻZ߷t?TT|[8)/ywTpVge\[eF, y<@xN};6O$ߧ\%(' 9;Fp Kz\ nq ,]"hiR{aU։Zɳ+)qW-wsw-qbms֫8{NtNb>pKz-jBoK+%Lݹ p焓eT^(Kߘڮrݾkل##-ưQ>Oh{:};EA-uo *.{ez*O. 96ov9r|ݜV\,똁1 F3r$ @0v3AQFLsF39{܃*sM8٠U6-v)X&P{]|-]MgwpyrE}G&10P:D `#Y:Bk!)rY;i=9ބKXKo!("^"%1/3JԝoC[%hGvK0>&X4VQ|wM&zn&>=6Zoe_!<_)ϴgyd=&w:\=Hr;smwv5ϧsvh-M=F^Wsd5٫na_^8jB sXH9Sӛ\{y \Wq(6!䨐Avg'xpxr tLjW/-{[c+zrrGd qT]^eFčmEn>1$bz%pUvɣ)]D%`/^oӬE{  D#mdFT\htHЊ-n[r Ҷ_C,RWL4 >,F\]?vj7Ug-CHIE1rpSW)&]v"lH h il( 8 uh Cֺ *(_]a}]l$X(Vm$+XizIZM%J*7Hd 0aVq8% V^Qcy Gs>J'%!ٺ󙇖o(@uUΝ*\,z/Ogǻጆ /K"- Y,&łGAAmؕ>< $ewl<"l;PCKi3% 90i ކ~cvgєR74jVADUxٕe9$6fEm^IB%~\CMS3]@/Y1=_d}3 W!VotpU80bmҧza ?je]k`P2[vj*<ݡv t֧manT>ë d}''B ]ֶ[0;j9m v6in&>ZVB"bXf-2rqce԰+I,XYYrlj }NrSle`hDhĉ%DH0TWaĒ1=G>zR h&]#%(fX0Wjޚ udeUT@65צi R\U:b+z^c;w^ ^h;NsIE#$>@JHe33򳿋 -oh=U3rJ2r}UMhh3*!/$ߟVLk_'j0Eςwgj|Co) f;<: "_w }$0bfxc-m*ewN u/P$Nsy36Œ)5oUF\\ 0ӶXQloW\qgBFyt ͯfڡfaH]w Cz/:E/ ! */NW&1.~W7&!z5߱=[7 QH73˰پB2.'m`-Ew|A[$0 4jt\9r-<NH3?:84uCg?a[-0Xy߸X 8MýNh=!^"pTW}1rMΨaԘa_~:*.*PQTre~|'=?e)%c5}vBF1e}8u.fF/c_`!4[9ȵD*)2!J$w#]DMlܺt>^̇:oP~|JTLu-'0m2#i+0S̜f5GNo.jv䛵)FX"mW[oIqd(}ٿDt (Gk'T(0 YU{+:áVdN)f=karU,NB^@SA_N5g-b Ls~n`ae}g7W\2 O:QYvVrU; WԡU:T۫xa&k xUH}}Rm`تZR\W)`wߩR%4;vǓU"(˚=g39χ`0 yٌH48TwyI!Q,7eIz`Dv$1jT:tZؗh#)ߚڤeag:9ԫ=N!*o"l9l aWӍ> 2JfìkcA %)/4ɂvVVHndzkCB5 *}LO,UX)9ݽ+%+!'WiRԽ :Jݛ[ɨe^jdy|F a'gj8Zfb^:W{T3};m ^Ρ7mLnGmH0F k ,Lj4 TVy`*ۡe-q^-(8xD y]d,J4lB/`YbF?]KQߏLv*wes5ggXqP&!2m7*_G{4bvԿ=)juts(|.N]WSL6kk$SoSO?h84!~<x7Ɏ~zxqRX&&ܞoⷣ62p},X)YYn#dVʶs3! r/"?CB+#_pQF@9xWCpIUcWߏuΙI;ݛa@N%FAO2:`?6|B-bLUijpn.˓ՠSR>0b}\p2LWVdNls 0ثMГs(B`(3fC*?J~-CbHhzu_uQ, tGzC: j7ADM9a`\qs!ܡLdhdg|(ڭ [c;PU%ьQSIdTڟ;w v SCsβ^6Ty'KVX\DhrAW8#Y !8`sQ bKO,QI}Qzk?,y^jEǑmM+@@Dʶtv@ZJy@]hwSߤ%s0QeDVl\f,eU-m\1UvC4aKS [lzYb|ڧvՓQҪO,V#j-gI˔Ď m (ԵPehy,k]RgG~d{wFin" WJzNqvSaKThw㐟D|{i."S|oRnS;KJގ̵6;vrOp~ٺ8ɹǴ!-swޖ[@p_TݕT07 DťZP'E 9_u;s|K51A EPƅ=[GFcOP}J@b2k+svwp?x|C<+ `^y_օdK'ts1+dе{fx})iΙWi?[# t -e?#oXYfĺ2E̼ҦFa^_auQ%O/EH Ə^>t{8Q=@oBkw!%*W@BݩD;QU;f8%Eb6gCWs?[ޫy/q!37w:7>>~,M=ax:mL.{ݓ).Ioy㜄%Q|;1A~{^(l 1*HQ*G oaq}xoYJt^CKp+DTY׏wd1H1ۡ!۽V)Jg)4:2pf3R@naZ'E" &1,t'4YtV2إ[_uqӾ $ix.pJ:oxD9эp h7~:MWi%aQ!zz-)'AfA*IBԯFBPH`xQ;q J9;WM&%n&C{LPO3G ߼ER@CחRLU7"ܧnC5Eku1DuvVn`R 5T3J]V.q{_ݏz ,5ZljB{J*.+I484Z2@SWmk R>2DcԑsZ(ஹJa\e!Ā$EnD{ʘ49Mcƹ9)%`[ FAJFI0tl 1?2O]1/;)-j=Y0I*6;qB5-wDY f_]TqŐ,nHz8)ěp}~\"=2YFBXY" EhiJ*.L_f R>vSܿ|Sd")7ҐuB!PS^c=YWZNW4ψE\+CcÆ4Fr?wѝ6Ĥ" JG=+`i7icۮygVq[W whELe.V6 c]BY#z <+[ ,|'N(>ʌS'V+9.zUIe4Tp;8xU}/`ɷep#<䩷lY>RjFq^oi>mwΌexg+fiJ OŬ˂,O {ȐЗbO-+i.{lSN6Ė_?X4YP#||UƊJt$w$ݧPn0w=&059kLg^ ,V~˩0D\ cN)vVYhkX tǏ: D&X'W$8 x'S)R;}3-CVEhݳeSn}R, $eK?g3tQ=^z<ޅ|ەUaleL٬~ܒ {NWn4ޅ BSv}):i||R 66l?Nr_+,j\卿YQRt9y ΤM% ፎAqV-E*ᓗO'嗠{Pz琈0A X9<&F]8IxʪrԞRb읦&.pH1P(rK+G ǝ AP_nG8X؟"EjgLHHDK='n)9 %1`Q[]ޗGG50{f*8bFE^V!ػ=7-ZSv|QÑ a(ow:RBJJfفf7(Ż*-1q 13/w}e 6</-Pl4D6ju!VJ>gɪ נ"'V,԰qKgE3{c^/.mkU=26*kEHÈƋcj55m? Wce@;r`3id rz2kh ษVœxA\H3\mZ/ܣḌ!V%R^!ATOp1{-H?1xe7f5yFf!o. ^I,`F{ {YAk-@V[wo;87$&YX]t K6m0{L AUFs>'*֑cCqoNU9.BǶi[]\OhJ뀥 @O]_YGg|*юzlC;Sis%IECg9 ,Ӓrx( Ehl4Mm V; 4Y (sT+4Yq/'p'DcJ?ޙy<" F;v|4;(֕ Ӵ縠|l(u[;+lw__ՠv 1V_"ASxYhPt\+OOjjm&H5sh^;J.QNjg(td5ɏ8c] ljW늬?Cn_Ll(sx\&m)<_D\/sbe/JP18g7uڃY$$~bnt+hYXҞ7ޡsc)X0db}ӾpP'j;Lč4cȎ6g6譺NB{52> }1 {פRbpR_5umj+ {!˔O9Iŧ5$}a}"f9!JPԓ} ؾ. Tn1*Y?CEƕ7[ejpY2h 3V ;*VV]EUCr-x_W Ku$h:( ˳{*e f~_LD&(0*Uj:a+D/ȫ/V,;zJ+ھ#po'spw3w{hΑn`JcQלxah|) ,eOv?7G*?g+uiZKExvc{1Zߖ[DġZښ)4 ;>D.yҰ% 5,3DEgȾ]xpFL蘏[C#/u#qB%MO5Cizg+%%uKO{6 j1\Y[*W^.Q*U"5`% 3yP2siB1jBSl?A < tIyVEC]$2^#T7!3]L\F1Ԭ}Ҙ|)pNUT.51Vd۱1%kŕ(A7l‡:qta g-Iʒ`XcxZO{gUo~9] ; 5P F-togu߯ǵzU>`Qҟ3|WD0)vX奱8yedMaK5ҁy2Jj:n@[6*ۀ6|$,ߞyGef?A&d4{-h!~$;"`֭HB&/ǐ#EuSQq 13/1u8 A%\1c6w3Ҡgh-W~P=eK=z c`'EK'(*tм0[=nlİ&1xim><2W,sMŎZ͞GP8PZ !7vN)c-. ZX|Z8}kN#,C4Fs'QWZ@7nIy(E.oAɅ){ϨQl̷A`" O]6f( | ͭG.i4b0vO}3uc WJ2MV1#(NBA3<^ZHOFįirǻ%y@ ,k.wIxG "bܨu\l$NFZoCQj,nnZ<~^ΊZ{y$v|1=Mφ" pG:7dT 16jyZv1Ya)մELríQ_-/pL.)xJ{tD*r.hf-:gǨ xRJBb h}Wʩ9B >. ݊N1Ϙ V P, w v_VX!#$L1%+2Ag2\L@\;+'h>H8_vcN~fW8l@ҁlax•PaBW8UW<9Y*\ S18ie|ht} !T+2%R,ǻpZcT_%!^BΑ Sәt,8/xyc:|;9L##GV#>+Vnw-DG)Ż~օqIl]fu%dL$*/RE޵U?T t0jxiџ܋ !_ϏЖגt+_%S0F'/7)1dbAKYq+ orwT[ h[&bU;`}ɝ8L 0KK0dz?*i1{/x2|j+n|fTp/0й vXXϔ10(kf~/È?s [c]@#ǡ* - n&,A8X0]E{vhʦWϿKiX'*#E´68?/0X&Dr,,=  ,R$K:VV;k #X}:1.t %q}R+F8|2O?fM f՝nH)d 5._ S5a+f1l.1!Omz{5&8,(S)y,˥;vaXg6i7;%Uaf7I4jp |F`AIs7tF!tjB|tJ]q(%TFVCSc6Fg2ā_O`6LҳRxMfJLW)vN /~DWnrĄHq=kKȫINJHa.))ܡ u܎; sM".y Ah}V9Y]"F*An;|ةb+<:|IUtojBN򿶹^m\ًHl̉0vn3HgWڠ"=B)@- <6a([(mroU80ؓٺy)py@y02l 5jp[6Msg@_bCyuNAcX)xsE-!%ѺaDU#6WHQO>CgXU{:- k Eٌ5RJSƝ:*Pj*@\TuRQw^~\b Uil o9x >2ٱr k.x ʻl+c(6~"}P&E!-P8؈v܌s<\ȹH 4n\6FT: W.K5[ٳuj8~!G A8xnP,1+s=LAty5 *ϕ8 2únv9wB~Ni䱊)Tz,}v"ɗny\l&ղa0Yn&XWظP$U[Wǣs|b3D m({냤0;w` Д( >16r|3mKaO8{rN<c%p6xBDr3+A^e~Śd4 g=CQ6_u`\$g4 9NyWg84K+`T pήJeEMV#jFط:Tij!BN<$Aʟ3`y(66& ']_C+}A+R[c )^ He$ZZ@BmGʀ%UPqW<7Su ~*epNpUN?mhHF3AwcQ|(23n]l5V濏[C$/*u've2< ReXs@CIO;C OǛ L󙫔|_m 䩚*܉*4o, -zwGU?I,zYpZk3/%8k0"\b0xZHI㊽θQpKDu zkID E`V Pgyehi {V(60&5;lY 3"v[:$>UVQuKbL&vۻj+?c H_$/Y%h$Mqɓ%;U3HKB$ r uR;XDlfb蠃 B!YvtXPKG%\Bf\.*|k S=BSQc/i`E aԽV(_a%$k6t)t$̷fq΋Mdw YZ T8J~l^fi$U)qx:; 6]zcNZ^AD, ,F2GPo`ro^W(4p 9L ۻOW^>mk0- Y ̓B8dDˬEoh~2w(5L~cNᤞڥ "~|_~hÞ5Z/٬u4eEZΨ`N0-TA¼~\sܐdh>3nbKpo[okӷ0~}{ ygZc8vqZP37㞅Cv %u$;}qQgڌ=UE~Fʿڔv B׉͎ҥ"~C4IPOҎ,tjmlQo<U}?7&3۾Dd1)e5)_yxWN6}^!tw-FE ѷ#!D-P g-N8 `:'hZ ,:54j]wЇ6duWXgtMar\<UJU[USgGLf.[z1XwFQ<,[NdiGh *'DѧXBէ*&P'מ PשWo,m/O fXt9}L CұWS qG @b~NGLxHׄvt}&2 ?n5{-ҿLT_UOs>"WC`Ob; q~"KR},8Rxh֏֟,x**t| _i^+n%λXhx.sPYYM4[ //8H1 IimHl;BJnB96EPVe/1tNcf}^m+J f**js5||Aԇ'zA)⯏PgVV/MBgI#pM20a-y^*o'?a|gwmH|/fkQ ץo2Ǡ bҚP2:D@OG.j MGॾhS:IM̔' `Pip%ַŹ7Q_v(XbL^+hD'yi㳇<sy, 4X[Xvv0ߕ|-yzc'ˬlJ;5c)u޸I  18${i.KfdaږAf{H!H`ʢJ;tcύIy&d/zzPnàR@02O9-:|.=~iS.)e2Rs[9)pCsڍ6:)#f!z9|gT%S]fs]nWkk.ae}@sE$WԼ( M Xu7V+]̉wZ|-4ze~=ŃōRs&2/"e͢y1^7+Ғ.8#)Jai_DfRxS]kZ;Sd2 i6g$HkPRjI+sh">Q6hj.\g BA.u 5- z @geLF#/b_YI4u\8~!_ŏǨqGCRܤBZ(uqZM0'ӻڢkR&&X΄e!w%7"Vv '[vy@Vq, }{G_bS9/R5>?ӛ:(ALV;z(A/4 3Z5R(^icLx8y<&^jbmc;kvN]'{@˪*;R;hlP6 Zsb^ALb(iXÅi(TmH~\osAӖ!R:iWZ`,_f0b5z|a sGqxu[;L l sSW^䫸L90&Qd%$ [ִ_3Y{:]i"zC{ g^[pؼŨ+gRDS1zy`.SF FnAZGC03Rz>E%ǔr, ,m|f T ,'E^6Z-GdFQrlcoe8qZs {8!̏3NY~k[vKX̿$Gsl,Rq՞r?_D)nsk Xf`2]pf}N6 CɃT'.I,"t^ł1ݱPׯ/xOjTz?зqi%OKcRyxJO|aIPfgگDIH u2ѩxPoCZ΢P+>($"P\QL]Y $`WbԵa܍YӌkV(6]0-U-4ˏέ!PsK%̮M3PQق]]W` 1~2 iѤ;g)@oڡd$ wB7^ɽ ;wxyR7(ugl@"4]5txw/ ‡՜$Xcs8| AJ1QaffڄK?$q%ص 3 "$xpki ߷6'9~|26ܩgh8񮀫d.G ڂQV颩4*[[ngۦ=kcV4KieOjoew;j8%f V:@2"lWѫBV1vYS Ղ{ɇDYC2}5fzB9[|觼m#as<3u* !ކz!z=+LZ Y=Bpƈ\+t e`wx;g?V"Et0Q&3mXR0w7ޣl 4̱`/LiJiUi+D8vdx)UVt):-\1JmП￶H8!9:d{,wM)swg-Ed 3S% -\>uKʻ?AʫQoEQȼ6P7)eEP-o$JGxvJxd ÓbY*; !#5G4[e̺!i;O)Ixo6sSfotA- p0MYM /&}tѲgMPivsm]j !kKJ ,x̥;pܘU`!y%> L:IoPA ,c:Hv,I!<7(iW7䓹S?6#CY=fUwkFUfwO6Vy]<"'r9i. ~#+K;T'ȪE@?ޮ[ *|=7+2'Eƒ2{mzֲp}L|s3%F @j+[f1|ǒ.G9 )Dis?0(czKtۂk溬&΄'%P 7>pD)4phk5 Sщ ]Urc;}j \{caZўF3Jk|;vEc=\;ߓ{t|^fmK[Ql røoqr뎜m*'iihJږ!3*qN;&Gm+t"hb^Zٸu)U:Q4.Jof&]>\fW\M 7>MMg4:*ϟjz1{I̢@8'rLhIxxH턹 GIb$ WwX BI_w]7̔ (GPM~E][Y2KW!PPx%MLPq8YN ~y!S~9^܇fT9-i7SF4-գ#KZ7YQGtv6݆uɊ8 aOORpW75%GLnj^ p>A,.:P x BmgyuVDϸ5֐=#[たw-\6hI|l\TNS< 4b(>bhR(Ԧa(cPJۓraPYmR(}bhxapU荢oP*0_/$Q!]ZmJཀྵj.P|oo/w^6f[6G95/b?@F 1.92Y:PZ/OA& jNEf޷ f%IMhk=ۻai[<_b-&u[w R>3|jXЪq2Ӥ^"Gۜz]ixt(zlww0ˍŶqfJ xf+RP# }X6g((blóڂhp1QF8g{>!o/񋲯+Ν(+{1{ksh S{q @n'!..OV7vBm#?`#k3jzLh-,rG(_ćp4l__ebIlo^#fng_ML\ `m+JuЪXaeH<ナYI"6D#rWཱི08]3Iҫ!@CʝZ۹Ī~1J^I+uWD{ gA#]={e9$t6"Uv z4>t;jH8|YWqMQЁo򒮿R#)=%xZӾE%pc"yD`1wNvPCms(93Ϻ݅;}XLY#\zVv,O-J$mc옧yqO5bI "^z\B^+ 2s򹢄t^@4ɭ- x(ݔTRxHP!Hw&INF#S.D1RwZ1QkW?tu=%w~^Ѥ)oVҐNI{Dy3]ma6Ev L=b<P+s93|4#3M//-'37?Fe6OGPB6>ܬ}Q)PXtUg273! r9oJ}\"~(cz( 7˥f%j**S{ @i|\ўӯKv[dQ0S%[  c =޳Z|"q_LJƷc l&.wBൽ 6DX~ b0:(V0feQ#D '1#]q}7f:>F~APҹW 3eʓ%A[ o &laH!B͇0q'5[mɇ4pq&R#zTl@t%nKb9;T)Pp2r X0sv:,hƟdhI*<պ6K(9Y(ZR䯨ΥAj\JF#,т";*WTbB (WxGdqv;Ï=$+BY`Esi-?8R  L 'Fⅇ'lyϾ7oH*Eeh&zԳOQXIOd,K" ɤsS/ҤX+SBpaUrӥ5|' ӬZ */ Zb/mMOWW>n:؞1!!خllFHaE#m Sw_ˌ [(sV*3Qa aֈӒ1iM&y#OrY[̬<5[ =4i!8>,eI(C뽈Ao)-2.uNrX%Be$cg0dq4I9Ԭloڃ8ۅ[.btaG ;=F N *f'H/f4pC 3\7*Q[H F욤uנ$9U~kD~q IJh#Tf1sInAB+8ǍshBx5!ӌ8w Il8Lro#X kmEgz^KÉlC݃%K+!yGˤ?:llNʊ1_ h\wռBYrŸ8YFꧧbL@BL C[iX + AةWN'ż@/5*nm2}r$y׌O b 8. .I -N=b8m`n&zP `4-0"(62ٲ؜lBF;s阈`j-fDPVءQXbe$n#@W>.sCVvJ8bHǤrsA0DE6cs1%l3msJxl(A~ Lv\e\ƍ,is4G$nc 3 6>~W~>Z7 N=]{h&%*'2 [jI~,Υ`oe Txu) kUPompzаI`̕^2/_9Ó A"v(73V]v%j%'e0纀uhWrL)ePt} Q̘-Q%=0}r`֗ !@#Vc 0M'n]OUV]A7r`'xHg}e0) LҔIglĆN7^:ƨTJSMۨ=T*B3 .;TDns)'L-TN!&-K]`]({{mY2@Q Fq8R䕊6ćerZ%Fy!u&)nv`s`.=6Pu$Fr$ֶ2C%|%a§^eMf&MCEquW`ͱ6ҢDH7N~`|툢 W$7bskB#=-Ky0AS9R+v,S(Ga F6!mx9)q*(ͽUt7 Dv! pY}TVTLl]c;*<@!@V.I@-Tqp _a>3|qkY='kyb$ScpqxT|H̭vSBRLQ s$$tEY~h3 ,c2 f_ǁ<X=U1hzKP#:.pcȔj 3&>Y>GX~v{JbN%`"ڟYD#'˓Ry?sNJJ/oPB|@_?uu8q/M,>1Ƅ:$JU#UZʂXh6CԿgc^i}QYa3$*F UҺu=G *|lqީ=G&A;,.[Ii2Ht XI4>6Vk53!cMchg!m89F0~xXF|7F etr6n|9h=tKR&E37&ks)4@-g~\뷞?5:5zLUt0'(r`$%t rmǡh wcp*6-Xp_R:uSX.9CuV޲ٱtS*~-yH  ֘ѐ r{`)5Ę?Ph]xh?}u} H%;wfMT]*[uoz$D/5 ,q̔v;ab'T>4|4KJpΒ$k?ٺX""/3I.SDd|sF@d_%n9S/qg-%ìCuWQi_>KAR"^3wb,z A5zgsAUWx{]Ɠ4e7$$MG9[W\o*Vo%~K`Y_ӞJVEVӬP{"D"YxqÏӟZ3ˍR81m]yrzI[{5Ɋr-'OT2!9՗hבI Y  sZ_z(3ޚh/U(c !nbn@>Ȧ蝇,X!/T3 %r>Th$U9q1#?.@p8&NvGXC88RPE$6$/TotQ<"~;?f| 0a7vM#`r73!s@8wrk2!Ȑo-/s1wjگ\\N=P+|{ CSS dW#DzXQ*1QI%J* 4k|V7*vХRAo4Bnb cٳ%u3FЛ`L\#ء] F9QNp܁ip籋ЅJ앦1*dЭHvX"d<ֱ A6Mpʯaj/H9`8ϛ2aAMAZ vs\X=gV u*]޲FewU@HF=O fI!yl\c/䬨Leܨ^*@E"@= 26+ۘ6mv)Srr٧C*T`~W!+pPVPR`@p ]°y<7tLv?g7PROzq AAL(8w$Xl+~ߑI0}+JBy+Uz?AJ&GundT,x)jDÐԾH&v+/ H{O Ц_M":Dw?q=+š#t~״~N/طX? X?>T1RV:zsAX")A[`&DG֓#\Wtn{^wշ͗ Y_GLwG_>a`VP'.pBdJ+٨[ =Wy<>=GD~)6@N>U5MKlj'NA\p/+̋ma4DeuZF}Pdf w%g:/|.nƛX+DIGnQ ,,=ߗ~ dJ}aCMSj`fj㔕1D( O -gvq!NPzںY)L2)PaN?Ꞝd9Due &b#{ZEHcXO2[_xOɈf!r娍")}6fo JOCa᧼T'=#'CZct@yQ-\͵_iHK&/W nK/48)a$헧(k={:pVrF$xk!Ư0=Yӛ 1Pgt@;n/h.K㾮.~;;CZ+ڄ A>zW:kjJLsy ռX>6EoL#^[TN >scoiEɊ4ծưV,s$=‹t%p|^I  ?W+f6bQir@>L:ȅJ;p;Jt/?1S;T$q ҡ>7OI-\WV 4@%H6:93 4deT7u ሐmI:4WAl%a@Y)zA7`[ȾhͩؖNsv}ߡQ]⦱ y=8Hhi(TXaKz=ct"U.5^צQkAC-)d + mCDm,5# g^s78Ln%\xCI[7P&6F00V3'ʴ\.>OarI)9,kIKk ;EXm@l*ooLf` S,Ŏ=8֢p0-sӿ>Ld\{f;y^䍼ML#Ր=t[/6XgD,"V+wNG C@"/e(4`4vm$jMr`01i'.vcM3bxshUZY` NkI-?qcx[!8lRsF'JIᢠ9%m+Qz VŽrH` lT.ȰyƮ r_Uǝ}ҙVA'9GR'?X44:^}QSdŃ9Z;ӥ{Ĵ9բWghhS^#"؞ݚ2F]ɉZ4Tl>>Z[91xu1=TPl4 6]0-=)RqPe=vWz 8 KwʣSZA;M:83p;ę¡ѷa)J 7!5|L1X?R wq@M}KpfHMiZb6TucD҄=PX7ɠS[I0Q#3X5 @>G{+Y_z QadUgLRεR_kFI{'5Ņ 6uzx*V9|Ӑű.>7i7H$(EXR-Ѳ/@#4PbAr]ӕ:'%v'yMzgW#wqehb /WP\nDEOm (5 ) (`% %-3f6fs!DR94X$ٕC ԰­?zdx.Iݪ~ca@MT6`x N񊞻 tr==0i۞ov덞5 QyZ*5zX'sNéix $h;fW @_U2KK ##-U[Kth$XDQ7Bq%VT(i 6@KvAsM] l%HA,>ۀQ>b̹֥ߝ*])w2`2 I\"/@F\EDG+ˉw;Zk#_x 9Sk4@l+ aellC62G2Bf>JrҸѳ6b qoZ= eجm_*v"w5wbRJ.U!W؁V>I u~žl^+0e >QQieFh5x6;'i*;[Q?Ȼ mԓyaEa#/y% `#ax0֋ZۅHy}NFrFK91VR3N.เ褶̡& BT@qī@jx*sr f!j1Y ^X=.\u%`v>O by>(%#r tRҌڻ ES &;.g=G>w$%W(+dv#53TgTl~' 8FaӭZc`]38LZj6gŽi{+)'m`n\3* 53}M״ҍa*"7$?|ÙJПWo;]8V> S 5K¶eWwW"w D)w)K|x&9ЙȄ̪B"iBdi ` Wwa(@4ɦH݌IE6$ϲOJ1Bn2mz_x)|>+7W:6=RnSڣc?v^ØZXC&C$ׇ0k'GK_ldtW愪Fv 1pod5ѽvЇ^$ D&ǘqNppwo݅[+&U%%+Fyԍ1-s6I kM(Zl+>t= |:heRWyZ^ë\iX_?; >oRE;Pڍy86jYpj$݅iLHTq$ϐ,0%a|Mv4{#^ޗNKȼ\QPpH&C=W!(ߌ&d -Gg-.Pz,Bwl?H"lo*9w<+ڄ<_GQ cq u ɒf& E>&׃6dΒ}Z-B!vB<*HUc M [".~ةm?{œ]T)Y*V_Q"Z0~זLN4bl\Is<&9ʻwz+\ͿGjXEk8I . QEP !%a'$݆ iJwq8բE'HyۅSEx|$bCN‚"ErA*S=BIDHAB[s'qE8'ɾ*kKV =5a*1QxBjVc EGԕH8P꯰X&9MQHU"O5vz,5AB>% ,oXgd =`1M@q}¦!;* SH"`F7|K^l,GjUr"r[>ղB-u=n N'EnDed_xTܤ_贔:زiA/ͰN 8]V`3区NeI1Q^:ghAʵR~BL^"V X)/gB tw'g1uB Nܞ'n\ZǺ^^0`f8Yy4DBмprKLq"J{&x{՗8~4xFaj2?CLLlٛ'׽*!=adXgz5+X#' ⫯#>jðX<VYI>M?֢#kv"5qʀKE3NkH3mmYme#gCRo\*۾d, 0̭rz{7Ft%rEX,l | J+^.9C5o͆PfmC "뷢I_pxy>WUA4g, ˜0AfoAcC q/gŤ >䰺XE y"ɢ yd@0 v~cNM:`_Z \]RRrōpO) Sg Ȣ ƀ{r< lb8+W9Dt_2x, N,281u-X;D6p񽈊A vdk a r)xjm k k[wā~M,qc*+ɟ*kO5&kOmGI*B°-h6jbYRqh|s\מ=18-{*} Ԃmk~_cXjS,:OCv̭KaP/"M0az0ium:V^4EGͥ ɔAUVvaNd&f&*rE10l{yW"16aW;zNR0bhn-9X xÁpq1: j爗[wCW r-Y$~Z']/P#oqu1FD; 5GfbMn;&.H2%[sPt$Eu:9x+_h}(Q%iA6\O4#_5~9|Y9^dDtfqf~~>UôPqr1%gڽ%S“Ǵ:Bx3\.q^|c8ZRJU/Raꫠ_zϪҚ!`3H; km@Oz\ǵrQgE`wfBWFV)fyXTysq.܎|U<ļl~]Pj8 c,I}~)i|q/AwM':ؑ4[+GE X&Nw}ż[q\f uaN2+?^˫^S/_XhOӾt+$7/;xKo[~ݤxRj4e1Aq#-ĹyH_}5fnPS9Ʊa~$2\5$mW/xѷ$}ΠzG/U .hLi>G=z \I4M2Ɯ^hoL %01>l\O"zxHtBgspH*B͜IP Vbʂ[4wȏut!\ɼxA 7l$ hmhW^$œ$M~Χp4 A'MBFq mbvz 0WeS7R)ѕ #5OJ~ZV1nRdኋ*:O`a_ M|xŒci%7bf ,+regcA~[1hz4X}"YPxM7;=y~>p5L ca戬90)"yLLTl|^1>{ iM\|ƚAv8~r5}bѼ-ߍώhy<$y"TlM& f"tʱj5| '=N Z <2OvC2&k 'J7Jv?aHf8C.>Yh`tQhxE^{رhܒhm;KY]m͇-OOϘRo р )f祐oıBWۂ][9q>b׿ą9oyYG |eV8@Lb$7!6י0c}O ~oT ouHRoӾt~;Yk8LUJcD<2gzfk kDȨp!vVM1&=D$^qNLҟiD )檂l4@U0Qp'cI̐v@[ZAf/TK8Ni6F&F4mtT1yˀB! |<^6U@8WJj1vAN qIUd#'3줕حtW\=".p=ړꙭ+txUEKeTva5 G99X&.ae$W\N&(q=$p#_(˅ѕ~*'u|<9xE bh$T8@-e#pu| ݟWKց|u,à?3h  dMƢDr&|SWHG V$QySN u ޤ,nP^-\lv;1F!!_|4"ih^Q2z#ò#l}Ƚ8#haL7JMNQعsؑ'vw侥 $U}cT>HS|-W@I~~q\rH=qcޘ51cAĻ9ZJHgN ,OfưHfK#\ ~B_\iJ`)z:ŧ RE~E#fk_C#jHljȎi>L5GT-8+z1>0 YZBiobase/data/sample.MultiSet.rda0000644000175200017520000004674014516003524017602 0ustar00biocbuildbiocbuild7zXZi"6!X{GM])TW"nRʟXgqjn]L]') G޸yijV]i4ҢIUQm xH6{off z6IUbRg1|apkT,9/b'U?.<'QV"ut :C|5~vKqJv@6~LnЙ7%GD ^ՉA3M3[\HɎ P|#jKDokbh=M༱8˴t;NK PkֆNAڑXfL4ilESB0+Q"N3^@ @{t p,c,mp^VA+b4&/4$tguK!VS֥|Z;?p&z?ٍ_es̤-V~GZ5 `a*E%&r"`\O3ظt|6M̏e/gf=_=g.{4BX~[Ga˷wǥ]ޡLO4+C%:K^IP2~wyyd^&T(-s-i{#/u3y[Է(]kǒiMqagVM⩯' t Wj@%!"ճ3%[NogotnDR}$ڿ`Hd=#Y305#rQÉtbߔnj*|[sdlmfv8  TR[jvOhmk4u2X&ψJvNŵ'h#8JbO:}g;XzӽLr aTH>eL|l4 &Vwt)V}jYri0? ~_k/W㒙:ԏO80^ySS=BiF*E)VH͙r5Rzn'B(7`}&W~* ^o ?{+zg`̙]:1kFaX[:Ѻ4a)tTCMb dSY- p&E,UW)v*D>^v\PW@T>QO~NNrDwC<D×RrV<4EAf9ڴL[̔kjV'#];;ӫeoO&OA}%x Tئ(0tG}DsIɣ`&v$ïHœuelZiA}AIȔÕ+$'-5EK1{t7Mfdޛ=ȟ񩖭{$;}+vu3T)|l+6HHG[Z(-wS꡻*Rӝqw>:*tB^IOh}?G$y4<k[Zu" NgvP#lP29A5 m"hTK+}[VҸ^.#ȫ+ =h+ }LpTxFYj @^[Ԇnq(}1v>L8::46|ӹU Y?O1`{kC<;:$ͽ: 4L{oYG }&_U (H 3pʮ͞H\ZS|N1|^fƄun[D$37LbߣaBdͨ #y~,\1fʠS ӑ>ZQ'd89R%Z͂wS(z.ťuK¶1J2 #BLC v(¢a;&վviBC'صlB…ƴ}DgY#7܃4.(8,p,59h)?sc /pPmEgŝE`@e *&Ϣtn$-/#u\ALJLwcۓ4DJT+@j!;#+w\E{vGHk0}+Yi*r۴1[P$.^>ވde=ǫ^P PXg p+4j5F"#TiՊ#c >͸-}0d٠ p!b\!Z FB̎>~Olov& z݌l|AhTE }#7a"|K,Uv=9j!0gUէ,6܃TdֳE$zUzx,OL<,A8>"e*tr\oU[<93֗Ni;™DSa ٽIaEv鿁iul;(07u}Rb @qKsh5@o] DX[Z#gT:Q5>E}Yl;` e=ؽf?qVU6eCF~abBrvU>,`j)+_V'd!iDH-p`+z}D3 yeÌjQ۟p*2\>`%MquW$$sx Jj/|3v X].a6 ˪$ * g-eG.C;e> D#7\ƪxWб1ES[[0*I^~| `VI[rlUٍn̊(ޕlbKp1S{V;^8wQM,TEgjt82ՎQ pFJpmOj[y8t$Pjo\H"K l5\mKdEN^ک̣N.aeV=⌴9bImeSM-{=ܘ;Wx`m~ߡ<( CA015gKՁ{`wyP^^mYR߳]'25,D7opɑKD*^x'Q3f՗;:E^Ws\  YoK R {?Kp7e c4ʀ ϱz źU4mIQT3#x 7dCDN[ (6+.yp 8%~}ƀtte5~:)'&pD?^fb{ds>^qmlOW0:(Jq(/I%J'ǺBoQOq7"D@%t^b^.𛴾ꗾ/W_AjZTfmn (o9BGn u<*/PנTKﴽ4*LY'Iǃy~3ćX[mlL Tx⏛ mx(ͬ*3G_`š.؆t\l#N6݀GZ8c6r4{٨I90#y~VMBv*5r=u0EAKfOf űF' $|UZ*(1KnR!a! &X̜FN&2s._~U\y*B.2-m܇+*رzfQ#v5p)x"#_HcVðot#WX=b y܌NȯUi>Y&0Zxw\wO5%V釿~jvn "ҫ#IՍ4n]\}C0HĭK{Bه6 06ia6g{ "& (*:C$Kv `>N _̎RO>r*{[:LN:W^*tt$: qyF/u!R*w@gBN@,(;_E/~q4cƳ HA' g5K 5|-OO}#o PwڮI>rkۜ/ZYTCsA \?R2YPdzD tV:uUU)\&ׯ2nafa59gm});j*GHvNn %zvdrRQHE ,0Y bѳh_F6B?l}+yUi!Nv{ю 0 wͲΐv#3+l Ӻ0 QKjINQ+@K)fe~v6T8e7բ Lw/ÊvQ&s?p f-=Q&|c:*1UHvUWMI308ӥI+Kj1 )}HI\m:( 0;@ D-K `|oi/[#k_ 1Ƭ#RbD,?BI~`!?.Wdv[-.x;kAm!{t]q6#f ڱ籤-"Z)fg~9#b1W>.z"i=uKhՍ@lȲD)1) YUh2.F"qߧг&UQlNЈ""(ԏ6^V]9J&8fȷqƆmTzFEc]yNjFEVE7,^:sL;|4~*:輖0}cVx e@iubE 8z%U HĊx+OLʦ/Q+gR`Em~ϴD-w=ErGr`=Fkn8-jF|Қm;.I42ŝmH澩ŗ x~ۢDx#DN}]|p>T㋈ -SY/$1qEX1N3Vd'<;Wty $ "2OWWi"9Do6җ>8ze`9]o|Rͨt7E@Lin*Śi"!!9 6=CUfϜA,`䮱7Y^]Ԥ5,24gMad90#[EANva"}hDHH0CjQt [Zuӆz˂@Ov1^B֓V$;fBC<[I*L\s}{Qxo$eWYJaV6C]^q#/Wvmcd>c XYJg?]ȅJiٕ|~`= p~6 ,Xjă'f\Q &0pۢ:8tY@Jr@0NpnE`:"q"ں_YFЈA}РCxeD'B???pڝ5JUӯ{@ȘifywY> Zd3[E8XKJH oYJ(:Ρ%?㚉X 8gDFŌɻ<%"Y߁*ڇqC)QO[~ZXF\t2f/@3e^g`dQnEbU(-9l(F"ˬ,'KŸ5c\|ɾa] dG}a(p6#u^{Җ0@ p]鍷7{m@qÜ}K""ic< :_L:H'M2SE4 iβOrX=0w;WHx.whE=x܆)B<8 LD "/ @&I軂0,iY!N"Mݖ`PF xɜ7ld#X3n/H~Je90|ky=Gjgs&y[RT(ҒӘ3Ik9յ,2y>ssڧ2~7!QKpj~ޚ祹P7 }x`,Ҭ)9ШW<%VsO.P:ͫ,FL8A".έK]c9;#aF eCƻAfxN؊KM{HnmDpQo@"qɝ$LgU? ɱ9YxڟiUk,fxp 9S.qfsWRbeߒ ,8NOp­b٠咣/T_g/~ϸU8yI~"|/U gMh4Xd6gmJ eq:ԣ_jP ܴ+UU&l;RY*xܠˁ FB#:fs"U"701=D dr~vyɪjbhdЎ|y faC7^Avun*NOɅьoC}؃-`(Z \qvH'ٴv>Vp!%1'tI-\!^(e@ioV|z:KdnkNgzZӾ/ w_ TFX4KGv'hnDE&ps9tr}Ϟ_[Ijhnoe $w'[O4 sD,t@NE@6:=]oR'㑭19}U9a DHΐO=(]\2}秸*K irca#GfAдAo`?Vg7ԓ}V.1)~N)]=Y)YOrKyX|F2pԇ#&\+4zm?gƺY;YE%5_*'CTn<2bGE1&# >oJ}UD?J/aGHsЧ,lՅᗍxMPƿlp ӷ R*6!dhi7q'/^/|-$m4'n!, |EF7?*~C _9xDk|ᨏ4ޯwX9c %A4.*( b@6ii}ͺq'YĤS= w?߿i05<+6Ddd+mA7o"dHeD@brw8CEb9gmBY _5\h%.a_E@:Ŋ:NJ(w%VUY *QS5-vstbMo[n1&bDZ %>\27r|JSBKM=s N,(Š50&B 1Eu~%|qAP?@b7hU@bƤYQ]Ӹ_,,:lHAԹN.[Ju-#J&R)|]x+˗!p>1!VK$VP;驌Ҥ/q]3/Q󚤤ju7r%;/vOaIJBj$x;1LJo\9rnDAij*^;I@EAOt]UUQJϬ]i ]{ѣDdS{˶,qٳo[4%R2j% I#e|J $KM&n3Qj/&Dѩ>`6C.Kd!o(/b _ɒZ^NHXjILfnH&*͗a:AUՊmE2C36 daWIw# F{jW;ڜGӒvdҍHG Uډ +(}d6FJIo8fWa>e~6,pf)+l{mɸaX Z *Dl +m%ܰ}_j}*L OY߭guqKĒvڱ5 =5e^ɒɯOr31X8$?t^6g&6&w]8wWUr?nAMK̄&=2GU,*.@ȴ8.I oCMis2ۿ2t6;r^"~l;*'Y]7,'u"j6~ %׸M4 a1T ?@O] rC>7lk9ZXq}m`klgcB \s<#xQ.Dy5-לЉC$',)&HQ 9(?dHI#SU Hg&njkpwgV޸gTTba1[Ä#I2HB^T|ŽH,*ϷVz̝ݿS{*h7PPr7umrZﮥ9|T-8ϠJ^ȥ7TNyHqXbڇ/#nLU1"O%җ_7Kڮ-7Xد3?5# 7ˮ&d=߁~v4C% \S3 5%.LTw[X+<"REo7!ɿ&c@s*!^tgn&G' |&;8f;hxfB!X]]=^?_44Bi'JbK燥3iWn~tݦ:9 9ZBL-p"T@z[ux낱[˯UK{YrZE퓻!R MɦXP kd h*ʐasOʠVQWO3V؏O$vquOd׃m!Z,fvnQ CwPLU>X+&dؤQParN0q ˏD͸my40ocwtޑRlkIPn sYto2Nբ_ Q!0G*۫俳}N߿C!v^/"yDJɗV@8k:2d?J'4̭]x14lilEܵHayjK _z%1憚oL}9VE|Ya^J:+.8Ieѽ Az$~*US HS]rx 5kbBMqBq gD'Rk &∜mJUiE`"#D7:h4(6HMlZ`seQ{Rn {5cUr{h\0/4 ,/rP쁕D!OKNg®yؿG&;䳈Gy3ѯ"EyWB2^C%C``86I] }qh?AB]ɛ}qp Cͭ350QNQgP( G饒F2>xzj@D4?@4;΃6H ؜c-5,W+gY<HV;>1 #@J/zmzA 쀟\uc/;a!&b8+'W'-b_TGR:< 3ΜG$9§ ) ١V([Ѽ"(0Fxq$U <z}^ [?ԜK,> o`%+GK%ɺv˨|7<+ N)H[' t_p $yHSš7o#CZ GZK.au]TgGT/q rBX @L ^l,z =b:Ş780D ]R .W19w}߅n-qPV'tr)?=L%ҩV)oMNL-[>\>2'_ʷ(i@Ɂ _ :au ]"`+bcnE[mHٕ؝qpzo6W9! '7"U(~\w"AuѢOKby[tϋFBK39W~1wQ=:KMMfoFQB@ GH=uqz ㉭C uFs3z$2/7Qosu+m`W_G^!u.Ĭ \۔~%q^o훌F9-.L#PJ7V\K?;YS80 ܹ<HېRyoW0IK`ZmQv(ZKoJb4\`u{+GԬxN^i7DzoYHwP$^zyPvZUI[AeNH{ǖh`\$Iᣍ[{gc;,@&ٯ2CP{N %&ѤSE:=Ur?F זm5}xg daF@le FAuf'?uM9`:L{項IL8$g`tS$wuO5[:K?N]]HH5'w:u W{2?C>|Gg}'ȍblϹ+ }p*x09L mx8_faX3sf8oteD0FIg!Xᇟ:kN7gvE^ G SAJ0AeEh]OvÝȆ41QWLy(vʑ C=ĭ`tiwRLWEfIUs5SDW::wof}&A04zv3 7Aq7؏'yoOg1w`Y0ΎfܗgdV~RO|Tru'tOpzj2Dƞ4^M +x=9i ,q|_B*&ZS,B!}zK/ύl ; |k$EIBͦ 9$B, |mVit4V:Ʊ!bfSJ%ܶ#r*!W,CݬAZZB:/[sVo)d\??mS)W<-!3C={07a7rsNGCaAܻ;_`WKMU FmYlW~,YWdsawmO y10Rf} cY)H#YPjsm3d (WkdDi(S˘TN =9 qwP * 3#ML B4!2+#Uf㺝u`6PR8[ 5^;ab4Um _99h;)*3u҈j 0a@.T/?YP ⸷,)>}{AH I3Zx4F1A$Dt"VԆz Go tIzG *1s+[7(Tf i_o^Yo&.>wY$ӎL9ΒT : y^bHnn߿1'ו,P!(mRgD9VcQ+9$l5&"Q|K7RW?* $tZHYXPwi6(3GHo> *vS2k2GE7[`k C,v^nn%ԏ8?uOWz# Ki̷@NRM0%2kyVOGttL6#Յfe58 Nhhftʓ8+tۮ.˓ߐ'xLjš"=:fW$(BN/hQXzh>u |7}Ƚ0kVlOO[; \xk.u?I U5Ӏ5֙w/HYvf M",-76?;Jǂ<|ONjn hm~G秦hɚYJ*.DG%%>i-%XuFM?ɄbBmZ ?!VW0aBn pˬsfpժC:/V2귱ƕc8r߉dFM(_0in ?}sgXǧQJkqd&Ay3-hXh^)ӘIA% V=;q ocXfsNj%ġڝb#^Hh)ϲG1(6_2 Pdt#хD$΂v5C!"Pkʄ ǵ6Y#Ti=#<΅$P\_5 [i#Cd9drjnFv 㘹yв3 :=0/*@(M>3Ⱦe*XLT/v6♡J3J{@;'Fԧ߁3QO1Aڟ: A)UyB4= ?:];򁐷g/ԯYAvIW0+w:lz;{E>= r3]A>pj_Kx0.-CyMm!y9% D79y[W^O1"^sXUDye!rmhp~fSOXZy@S(Q! }֎w{T)=<8ŖSZSO4mh=-t*x#iִz @%KF㿢b!/))5$ #^^.?0KnC^ۇ =?VD$ŞaS :SثBڏvG͂X>|۬1VE3'8?9OXduX 5&utW jy}Vպ%RU \S$_ ٔkӘWN9K뇀gQݵєb˹D Cqx R X\>vw۞N:ɐw^"T.dژL]X-39ɺ e[#vd~nma ~vB_hxWLۇ(9WTu"UaB-EU޽ .bnz-Jc;Q/tX)1hjb x1q]"jnY3ѢQ TD^1-M} "фF|IlYޚyxiGa rCͬaKN;iB'os"+6/\b dt7 &V陯WfwvL 1)GD/,F5ٮ~MoKl SyHj5F_̡&ˤLkQOxu՗k;BBA%\q 9v;lB&<|EnuBpz rH[78ߝrU)xfknm_)ݐdZ/k#O! ? ҠIߤ%wlbLiI0\>bP" lxUH8fȶU 4|3-:u3 $@_Abz0y ϚXԈ#DVv{M?%JgQI<R9BvxI'KBckgp(O_W&Sa쎈W]x |xbeu.̮ .4Vǡ}~GvGg'##i7dzӪ!vQ{8} ; 'LR.ʻ [aGˊ03WJ–^ھJLY̐ ;=؏R 8/H!̔x Owa5V k @աd%Xsi=_^&Te6{GCYxz0VPlMߣ"Ef5h+Mv̀K8,T"Qp+K[ya+볪m;쌇>%@cy+ZɮԢ6'bI]q6h@=5zݾ[)e=z@7C :aCKJ5{!Nҭx7Eqf}@=dEaM I;.20 YZBiobase/data/seD.rda0000644000175200017520000004317714516003524015270 0ustar00biocbuildbiocbuildBZh91AY&SY;èo"b1 !$~Nàzz`7׀8'>{ۀz(U*I(EE@P$((}}S Cܾ}SUS}Gl9 i$H#A2`0C `i&FUO& )@*R=@ 2@4dh `@"%OA =MI@D FOPAѢH4@4hhA"DSdzSɚj<ILSM !S2hLh0F(|L"D|E u*@

/z_; """'B{qXQQdY QTD QJ<C\1֍VmgFբNٱ:mb6,mVqV#QUmbьdmF(ѣjkVm;llXkXcicb+f֋VmNmk4구UEFdk55ZcN5Uf4ƶ-V3Ikjֶj1VE4ћ;3hgDPkkFc[m[XTlQb5APXƣUbٌN˨[[ghiF H6mTZđ3hdgm6h[lklcYحYڋm;Nhi1ѬƂ͈[-AD-kTEZ-UDUjqc`cjhѶm1#lcfu֨سմj3ֵSghڍYVƵUֈ"/ DT@$ T%(|`7/?~zW~k8_"G?q b[uZ_{)tMw?)~qSQ᷽j+~9稽o@ Q(5L,d.%KdԪѧnҞ9>f{5h@&ۤUM>{L1orƖy|ĖЅ 5uTp ̜JG [埢vaUyaf=nSX"vVSU.VƍGQ1I%{xgsk@Vcih7.H,K3ˉ{yw~ e@RZmD3mBw ZUeȰ :LB*Jf {N?-m[SOΤ[޾o,3@VZ.cA6*z|r8\+Qh 0UËbOsb?] c͐N!sa[Jk|PccOM9ur2pma }_ 'DhruK)⍭5@6⇂hriHwܽU C8&qVG86 6zz3i'-γ (|7D o}'6j{%Ԇ&oV3kfOXln4@ 4ADCv⊪ " "752 (v@)Λ}XTtt*iV2LeAC!U63P6NPO;JҌ6L`GZ9Ƴڂ4)/Y--Ѿ2i<6[7YTrי%+3vo:r5UbmJ) %yJEt,Ri[VIn1M1diwLjw\iªz@=GÓYyy?' 6"o=pch&0b:7fg!n΅E6aVn߇F[v ],l9mq:X@|^O9Xrw>$%NZԼ5W -wF 6M[zZcYӜ> NqS[^Fսh߶0܀Ás&+c _jt:,K#΂^ijKw>j6w~$zsX "[==RujG@*'39v96[v13d|z%WTv|s".^93 / xn $0.L`` {?| 4{ 7RI Q^C2II$ L)$M*f]EL9֖Z* UkoT+A\AI `$(IRAI $f읭"no0%֫08dB֐`H0H$Q$%ܐIrVW!;UYwZZ&Uۛq$&ZE.I0LA& x2ՕSW{L]蛴'Vz҅Z0Hx:LyPh*t& ͶԣYg.NG`:/6?]jOQJD*LEDh@U/(fw L1 ʪT )*H `KD:$ĠT=/>w\wTEv_j;8FB3ݡd5e2UJ«+00BM "F8K> ("NAIM RHIk'IW- 0$""L ,F `AI& %d(9bG62rmE*O{f``Q_?_#7S: w&"y~Rb"E&emY[{OQ0>KW^ t,׵u᣽U]n"VӤ=$IQ"HoE`Щ-Ǥ:z1ԣ`@#St66u)W!4r{jR fV\G6inIn\[ts!+]?I6웼Z[6p&^4f 4 v3J!YY5KlpKq.(Ǖp|X=O?@ңTv2O6=TNpG%^sޒ 0%&I bãi=g(}OT!dt[DK|׶=ȇC6y]Dwv@I'tnIea`]ip껢* عrKsT"WW1D?8b+{ߝArDW7T.pD[@D+l`ncrliayYDr4 gMɢoVKY'o{T=!\WNݔ/XЈ̶w3~Fz,?64SfFiHXT_")4y8 qOcC׼(_k}~8(Ko[ eK#/ ~=^+6}pEV]wƊ},jM860z.jj缾|+$Bz090hr]1R$[zX^b%bں36E~ JA vZ =lT?)c3z-^9j!g;Yqù]3*T_jրbjԲ$*.J1 wf2s vUKUhgu`xf+|yGE4g\7lY 4vٹgiXC<oTB3{7.M#+ ~)N5FQɁ&c]ұ=ŠURAy/E(Yc̖OǓd5 !J{jZc^Ԧ%2O`o.Wbcx3ꇭ7'{ƁwARFy7;A7'A /v.tu e.Nx^k#r˻Fׅ˄펩d5[gA:4Lsm|5aFX]dH<.9_0q+<ؒ)6CHbD'ulX E|ܟ,+eI{5AI;֝=F7OOS jxd\*1{$-ZlϮ-+ h ͙ډ;\ĖژG &ShfO%^Z|R Bsݟ}$~.`;Ssr%YLL[."s|Isň۞׀0 6 rL)5$Ԧ<^~1o6L \/}Z $Ib=gae=W\żLFJh*4V7ٶLѬsT##1(ē%)L4us] M︮o@WxM;= ~SW$r}.]9a ^,KS >*]t<^ZZrBq Lߓ-޽CN^Stۧd },J ˹VEHjs,qzz7OX ՙ-a6ƚYnl(0TVfbbėrvF+*Pܔ0Uŧi1;FIv~8CIqz;5r@NNKyi([l|iJNo uhRj r#UҒ}تsvK*FeIs LvaXDZV^'e#dP҆d^XKg4̂N2AZYl<_3#Y^bzRɻpvyZ5U7p-gX0*z1FXΗfq괶[Cۭ{h ?oi}=^K;AI+w.`sWȒg`qMz P,&꫙rˀc"-tF9FrBE TY~8'Zr&Hu!ڼ&yFȔ'HXKm%ߋZa#1XG?(y?XmMUHw:tN83Jk%N Cv9c8:1q0va,}IˡKr9HwgV ]V$tZ^dB[JşS ^FJ}൐RqeJql  L_RIë:^K _lNqt7$AZF <KpCv29 }kt6M%Ʈ6t')!A/ 6n\1c¹KO'~8 w`kLIbL-{!#vWH}vڨbW Q!&);gM&+!d6yPYFn/< ^i4}Quٍvzg-Se.ܞ=KdZm^&)hSlzz+% %7fhNL|m@ t:[̝ L'M9,K%kaH,Lê]Y)l=4#W>,PRlY.Ӷˑԗ}N\|$\zWZµ4R)lI{D&Йt:v}n'=1,/ZOG,tF)341_@#C*{$Z $6&SvF1p kgBZ is* "7*ji->Sb:P?qp(Jk3Vfjs2d\7I(M]D*"/)dn]UׁX- .N2ݴlJhJԶ%6gw_BeJh9;B8 [Mt-gg\],ӭ_ᬉz!ƵpkޕWtߴ~6IE_4Aphv%I&5)wQ}\L>R;'Vz=!Rxf!CoC/->5װewitoGj3Ӆ0 ٳ0ÊFտۥ" pfAh"._oJ ԅްqX8 4o'. JlĜħCpqh_dTK(kn.ҩ?S)QZ7{V: ~I+HhX9/:&i+ jQO-)ͫAbZ8T}|ӉbE=3m3ay,l QCP8w+lE%h· W~TScjYL)JMm^- w* 1fcU6_CWW1l-;bXJi}qj Ƃҫ>~: 6}+ eҔsZMf=ڹjav\n>U&6CB9o̐;|֔x}#{eER2o]ReUH USKj'3<"4ЫӢKl590CC빌C:-Ax'.0.}qeg*!2)ij.{; wCL/ T{ZOJ]01\62Y} WE(]q[ь!s5Ģ!VJ,^ifVXvI:sY[l@S# VzQ,{FWI%4v1S}Kjm2HPAR惛ӅbAD˩:(+F+Za*CѲYX <2ͷ*ܝWq\ $}QgL*&Lk(KYu7x2¯d]dM#ZwysuaAiJ<`ysVšaS@U/g@ V37sM?3d8Rːö$dh҄IS\ PdMxX8}-iP9I,I5Ot/Ž^L/Om*y2t/) 'Tn / #G@ sE\D&vƩ VM핋$`p8sr/91K{{/LBp%@>HW=1sar"gpRS.LՅp8;6>/TvnʊWanJK.Ʈh!lhϕ~9G6CN5׉ZMb|r#J)1;m`%v*◗ql&]מ2 kBN;;)D#ٔ2H7`{@(iczEdJܝԁHɍUbX,DI)CRIR `kfPUD6z0 e? 1nP1ͬh;dnL햆7Rj(',!-!Y+nƥg3[h݁MAS+RN쳘Fio]G&!3B{VRHqH*#ǘxZ~ 3ދ74 ,D!͸l$ljsNz 5fu{7F)Jk /Vg;#g6WPJMjF2Ne$8Fqw^J.$C I>+І u-n*/)9\I&_03tq(+_*>q.\Bwr=Q5}=ɠ_(扞U;~5p[;u2pT]wƔpcF{#j :[d1C+ ڥܙ?e .1ZI%* H'Y,r3/QLh1<8N1fWsn܌["l+ɌIDWeze r oSy(>V=XL;m{YNT>Eg|>Gɬe q!zpjДA=|zzf4\qn$6&0IArsp*#}'UJJc=9gdQjv u[>,TykQM3څj*Q8INl%FUf!<5.V]wRK^Zz$Xi-s'ya!}0Qzig {%q[xNf&+X^W;\jz9$Wz vkbnwR .UM_T5YRzӒ2PwҕIІ^SL1R\LKTq8IHR,ؕQfh5B9_T,S\W'-5\E+Kd7:@ͷ:bN*4ᆄcI1-o%-pf֨emo- j%6HYSڜPKN<5E#WxQ) dSdDփy*yW<%6/bW5=^/A_ҏvq#CӐ|b#y|AP2!Ue&?#;icU)WgV?c"07Wu|MS1qt0| kn4]Cvf[ ޗOĂz/?|Ӄ^7n|#|=uzq<y?P{'mρ3z_x/._fíۆ73b8 mH5*+Jlѩu\0sd)z.ʑ>)Fnx7{;\%Uq]<+FT5=Vp;l7=| ѱ:#\ -^o@z.86$[4PqUo f{pfbx09 6xƛϽsLF†%^vlJ,`sX3n~'Av+|JcT$"!EE8w[Y<=q'|8lj"}=K5KA{;Aղ^hyJDVv8Ѥ`gw4(L7 ,.ҏu'RX=qLLJn̡1qd3Zt4!u8?w=[<1dD+<.<̜&{2+ȭuާ} THb4aY|ZAz{,hH 7(}`V}tPTwD(zΠg$&[k,ϜűP֦2s.0>sm<$SzW/ ,Ţ&y(d죄lƶo8t:r^?`;9`b@;t?w(J8&fC@`|w]wwfPnѢX߆9Xjbz {&/(B v-rCF^d2I XUGGJeY%{!"AgEh0ձ'lK3A:]ƞe.G=y^u K9J C l@R/}ֵ\5X@' ֲ~~a׆͇YχW{zÞ1c?9pƋ@c˖Be0brn\y-{?ObD" 9},gћ6ffffffjRtwz35(g);3˻339dYX*)SS$CxF*FswUUm[9s;5%3T@cNjfffiwffdXh&wNTW,̋JP.\o"WiqPR%Ƀ pe,Q( Dl: #{ᡶMAhgvuwG1&(A)(֦!jj,d$kJT HfnOy}EyQ>>}oz?;dla|#tV{'VaٞńQQ(}ΔXw0bvõvi Cɔ^]G`V;0 Vj́&ZYڥԱiO:z/K=aHl)asOc{;J\VX78ג;h[OAmr1U:KWX˸"Ў.Nk΁Ѭgm g|fB>5dRtq';~yFv3y]s@-ِoU>!񘊊I* b""o~Or~y1)bk"UvDY~ۣ*ЕE&$3:kKZ(oUNi]\MjRSyA~2Tak J"u&(c|HsV2&k洳1]EΘ/22JT?y{g e B4:HSul:B"]}ۇWe>hn;rV>SKG]f o&]pnw!QHs\ Q1!44v!}xNMUU+TKUA~p-Y#O\vEY? #DliH2%IP31+#+c_;]w߯QUw۾̆09eUDT9svѦWQ@Ѥ\kz0n _S%Wz3xng<ʣM~*B1I7Cyr=6<')ueu0%JXOSX_IԸ8t,*w|Տmʙ{ Xi-'~2;ҩ5pLd+׷/m1s<^h6h[Vb I9̣ܢq?/MSڟ1oFۻ^~`6_O;ԻmK<4[J'CֹimӍBYq0kݻ 3bq8QZSm&pس H j̽gT[U€4"bW^2b{YQam6Dh\be|b7z d1wV\SIph ޹n'2Rw((DŽx7?}oyG}YQyڷ,($$,j!ծcݍ{3"a+xƯrMw(qnT,ar>wݑlE(Δf%$k*vbr^H|Oc{UbLO~"rZMEC|AUs.xb vfYffoDAutxk^?˞E  dqB26b|]G+ntIش"0qA0`;Ceo̬]ޗ72![vH:§@}Tqj ߈OT*FBsbĎSfʂ"b.:Y.aIh1Mh=SHTkF\m ZMԨ̏>si-6^O+&{E0{w&6px\W/R 8xDyAPmtꊖg= *aޕC0^h9rm/MSnޯ9 Gqq^un/khH Pva zjK>ҝjj붣vnkUSz^YU@DSGG'3QKS+O(Oe+S.$jdvV!U,VdxtwZVvڟ (y0 ǹՕ3W3jb9Z9Tg 6C&VjgUPFs7r2 ozދ@=@>PPhJC7J\^FB&S/yAՂnb.\̪1uýN@p[[ɪFREH8([,Uq' rp5E*.y@ʪ 8f {bGnEg*-lt̊H{XQqNdBuuZ3֯ .V%&1NhA[루mػ)(2/SdKۨBߕs:;,UNQg}NM%Wn -sp Ts&8٤R0#.|ex?9f_gJUglȇjRoU!w~:x7YBP= mŽKQQAD6Tgvp} ڴni +4x>>I31 8m7"1L|ec{~o4w&GN6Yz[=^,;xy慗#*ڛ Mc/9>cA9Y\rإ|iwh9~s N}j::0&U`e?/!E8-xmRiZ5PZ\5;M@ 7i`^weӪ{?UsjYvmmrs~"TsQ Ȱrt`AH 3D"3j^<3&m7Z1 Uh\Zcd&u#ћ\f7f5廞&(Xy0Q'cy͖hv{j9-˅ˬK n9t-SIflxrzFtfԃF B58s: tj۞OwX~>>b !EEEA$UIS\E%E>!^o1yiȼCt9at+kݞnJmKGФcW2/B IYlkqLύ;3mbV+w,rs5K%* S=ߡr!{giW}7kc+EbǽnNs3kfnf&FWSxٳHrsT3F֎ӖW%epz,{ޕXAmHD7q'`vszt4Z|< ܜs_hkC}9M+}V8GrrC6u1x{2frntt]-tThR%WH DRA}~Ooqy~O*F֭^&jh\a9FפBרSXNJ; OM^1􆎻ibYQk|[imҭgcH 6wq}`P >9 &w^TnwWd pcLp5r\,U$Ϯh7ӛ?YP(ѯv-Ƨ|!1i=sπ|bk wyo$W0ry]T"* EQ]B@'Biobase/inst/0000755000175200017520000000000014516024030014110 5ustar00biocbuildbiocbuildBiobase/inst/CITATION0000644000175200017520000000146614516003524015261 0ustar00biocbuildbiocbuildcitEntry(entry="Article", author = "W. Huber, V. J. Carey, R. Gentleman, S. Anders, M. Carlson, B. S. Carvalho, H. C. Bravo, S. Davis, L. Gatto, T. Girke, R. Gottardo, F. Hahne, K. D. Hansen, R. A. Irizarry, M. Lawrence, M. I. Love, J. MacDonald, V. Obenchain, A. K. {Ole\'s}, H. {Pag\`es}, A. Reyes, P. Shannon, G. K. Smyth, D. Tenenbaum, L. Waldron, M. Morgan", title = "{O}rchestrating high-throughput genomic analysis with {B}ioconductor", journal = "Nature Methods", year = "2015", volume = "12", number = "2", pages = "115--121", url = "http://www.nature.com/nmeth/journal/v12/n2/full/nmeth.3252.html", textVersion = paste( "Orchestrating high-throughput genomic analysis with Bioconductor.", "W. Huber, V.J. Carey, R. Gentleman, ..., M. Morgan", "Nature Methods, 2015:12, 115.") ) Biobase/inst/Code/0000755000175200017520000000000014516003524014767 5ustar00biocbuildbiocbuildBiobase/inst/Code/DESCRIPTION0000644000175200017520000000031114516003524016470 0ustar00biocbuildbiocbuildPackage: @PKGNAME@ Title: Greek mythology package Version: @VERSION@ Author: @AUTHOR@ Description: Package automatically created on @TODAY@. Maintainer: Some One <@AUTHOR@@mtolympus.gr> License: LGPL Biobase/inst/Code/R/0000755000175200017520000000000014516003524015170 5ustar00biocbuildbiocbuildBiobase/inst/Code/R/get@PKGNAME@.R0000644000175200017520000000013314516003524017272 0ustar00biocbuildbiocbuild## for example, a very simple accessor function: get@PKGNAME@ = function(n) @PKGNAME@[n] Biobase/inst/Code/man/0000755000175200017520000000000014516003524015542 5ustar00biocbuildbiocbuildBiobase/inst/Code/man/@PKGNAME@.Rd0000644000175200017520000000074714516003524017323 0ustar00biocbuildbiocbuild\name{@PKGNAME@} \docType{data} \alias{@PKGNAME@} \title{Greek mythology package: @TITLE@} \description{Greek mythology package: @TITLE@} \usage{ data(@PKGNAME@) } \format{@FORMAT@} \details{According to @AUTHOR@'s Theogony, Zeus lay with Mnemosyne for nine days, and she gave birth to the Muses, who rejoice in their bright dancing places on Mount Helicon.} \seealso{\code{\link[@PKGNAME@:get@PKGNAME@]{get@PKGNAME@}}} \examples{ data(@PKGNAME@) @PKGNAME@ } \keyword{datasets} Biobase/inst/Code/man/get@PKGNAME@.Rd0000644000175200017520000000053614516003524020017 0ustar00biocbuildbiocbuild\name{get@PKGNAME@} \alias{get@PKGNAME@} \title{Accessor function - Greek mythology package: @TITLE@} \description{Accessor function - Greek mythology package: @TITLE@} \usage{ get@PKGNAME@(n) } \arguments{\item{n}{Integer.}} \value{A character vector of the same size as \code{n}.} \examples{ data(@PKGNAME@) get@PKGNAME@(1:3) } \keyword{datasets} Biobase/inst/ExpressionSet/0000755000175200017520000000000014516003524016730 5ustar00biocbuildbiocbuildBiobase/inst/ExpressionSet/DESCRIPTION0000644000175200017520000000032414516003524020435 0ustar00biocbuildbiocbuildPackage: @PKGNAME@ Title: @TITLE@ Version: @VERSION@ Author: @AUTHOR@ Description: Data Package automatically created on @TODAY@. Maintainer: @MAINTAINER@ Depends: Biobase License: @LICENSE@ biocViews: @BVIEWS@ Biobase/inst/ExpressionSet/man/0000755000175200017520000000000014516003524017503 5ustar00biocbuildbiocbuildBiobase/inst/ExpressionSet/man/@PKGNAME@.Rd0000644000175200017520000000026414516003524021256 0ustar00biocbuildbiocbuild\name{@PKGNAME@} \docType{data} \alias{@PKGNAME@} \title{@TITLE@} \description{@DESCRIPTION@} \usage{ data(@PKGNAME@) } @FORMAT@ \examples{ data(@PKGNAME@) } \keyword{datasets} Biobase/inst/doc/0000755000175200017520000000000014516024030014655 5ustar00biocbuildbiocbuildBiobase/inst/doc/BiobaseDevelopment.R0000644000175200017520000001452614516024025020563 0ustar00biocbuildbiocbuild## ----echo=FALSE, message=FALSE------------------------------------------------ library(Biobase) ## ----------------------------------------------------------------------------- getClass("eSet") ## ----------------------------------------------------------------------------- getValidity(getClass("eSet")) ## ----eval=FALSE--------------------------------------------------------------- # obj <- new("ExpressionSet", # phenoData = new("AnnotatedDataFrame"), # experimentData = new("MIAME"), annotation = character(), # exprs = new("matrix")) ## ----eval=FALSE--------------------------------------------------------------- # assayDataNew("environment", elt) ## ----warning=FALSE------------------------------------------------------------ data(sample.ExpressionSet) storageMode(sample.ExpressionSet) tryCatch(assayData(sample.ExpressionSet)$exprs <- log(exprs(sample.ExpressionSet)), error=function(err) cat(conditionMessage(err))) ## ----eval=FALSE--------------------------------------------------------------- # exprs(sample.ExpressionSet) <- log(exprs(sample.ExpressionSet))` ## ----------------------------------------------------------------------------- getClass("ExpressionSet") getValidity(getClass("ExpressionSet")) ## ----------------------------------------------------------------------------- setClass("SwirlSet", contains="eSet") ## ----message=FALSE------------------------------------------------------------ setMethod("initialize", "SwirlSet", function(.Object, R = new("matrix"), G = new("matrix"), Rb = new("matrix"), Gb = new("matrix"), ...) { callNextMethod(.Object, R=R, G=G, Rb=Rb, Gb=Gb, ...) }) ## ----------------------------------------------------------------------------- setMethod("initialize", "SwirlSet", function(.Object, assayData=assayDataNew( R=R, G=G, Rb=Rb, Gb=Gb), R = new("matrix"), G = new("matrix"), Rb = new("matrix"), Gb = new("matrix"), ...) { if (!missing(assayData) && any(!missing(R), !missing(G), !missing(Rb), !missing(Gb))) { warning("using 'assayData'; ignoring 'R', 'G', 'Rb', 'Gb'") } callNextMethod(.Object, assayData=assayData, ...) }) ## ----eval=FALSE--------------------------------------------------------------- # new("SwirlSet") ## ----eval=FALSE--------------------------------------------------------------- # setMethod("initialize", "MySet", # function(.Object, ...) { # .Object <- callNextMethod(.Object, ...) # }) ## ----------------------------------------------------------------------------- setValidity("SwirlSet", function(object) { assayDataValidMembers(assayData(object), c("R", "G", "Rb", "Gb")) }) ## ----eval=FALSE--------------------------------------------------------------- # myFancyFunction <- function(obj) { # assayData(obj) <- fancyAssaydData # obj invalid... # phenoData(obj) <- justAsFancyPhenoData # but now valid # validObject(obj) # (obj) # } ## ----------------------------------------------------------------------------- data(sample.ExpressionSet) classVersion(sample.ExpressionSet) obj <- updateObject(sample.ExpressionSet) ## ----------------------------------------------------------------------------- isCurrent(sample.ExpressionSet)[c("eSet", "ExpressionSet")] ## ----------------------------------------------------------------------------- setClass("MySet", contains = "eSet", prototype = prototype(new("VersionedBiobase", versions=c(classVersion("eSet"), MySet="1.0.0")))) obj <- new("MySet") classVersion(obj) ## ----------------------------------------------------------------------------- setClass("MySet", contains = "eSet", prototype = prototype( new("VersionedBiobase", versions=c(classVersion("eSet"), MySet="1.0.1")))) isCurrent(obj) ## ----------------------------------------------------------------------------- setMethod("updateObject", signature(object="MySet"), function(object, ..., verbose=FALSE) { if (verbose) message("updateObject(object = 'MySet')") object <- callNextMethod() if (isCurrent(object) ["MySet"]) return(object) ## Create an updated instance. if (!isVersioned(object)) ## Radical surgery – create a new, up-to-date instance new("MySet", assayData = updateObject(assayData(object), ..., verbose=verbose), phenoData = updateObject(phenoData(object), ..., verbose=verbose), experimentData = updateObject(experimentData(object), ..., verbose=verbose), annotation = updateObject(annotation(object), ..., verbose=verbose)) else { ## Make minor changes, and update version by consulting class definition classVersion(object)["MySet"]<- classVersion("MySet")["MySet"] object } }) ## ----------------------------------------------------------------------------- classVersion(updateObject(obj)) ## ----------------------------------------------------------------------------- classVersion(new("AnnotatedDataFrame")) ## ----------------------------------------------------------------------------- setClass("SwirlSet", contains = "eSet", prototype = prototype( new("VersionedBiobase", versions=c(classVersion("eSet"), SwirlSet="1.0.0")))) classVersion(new("SwirlSet")) ## ----------------------------------------------------------------------------- obj <- new("SwirlSet") classVersion(obj)["MyID"] <- "0.0.1" classVersion(obj) ## ----------------------------------------------------------------------------- classVersion(updateObject(obj)) ## ----------------------------------------------------------------------------- sessionInfo() Biobase/inst/doc/BiobaseDevelopment.Rmd0000644000175200017520000006023514516003524021103 0ustar00biocbuildbiocbuild--- title: "*Biobase* development and the new `eSet`" author: - name: "Martin T. Morgan" - name: "H. Khan" affiliation: "Vignette translation from Sweave to Rmarkdown / HTML" date: "`r format(Sys.time(), '%d %B, %Y')`" package: Biobase vignette: > %\VignetteIndexEntry{Notes for eSet developers} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} output: BiocStyle::html_document --- Revised 4 September, 2006 -- `featureData` slot. Revised 20 April 2007 -- minor wording changes; `verbose` and other arguments passed through `updateObject` example; introduce a second variant of `initialize` illustrating its use as a copy constructor. Revised 4 November, 2010 -- `experimentData` slot as *MIAxE* class. *MIAME* class is now subclass of *MIAxE*. # Introduction These notes help *developers* who are interested in using and extending the `eSet` class hierarchy, and using features in *Biobase*. The information here is not useful to regular users of *Biobase*. This document illustrates the *Biobase* structures and approaches that make it it easy for developers to creatively use and extend the `eSet` class hierarchy. The document starts with a brief description of the motivation for change, and a comparison of the old (before August, 2006) and new `eSet`s and related functionality (e.g.,the *Versioned* class and `updateObject` methods). We then illustrate how `eSet` can be extended to handle additional types of data, and how new methods can exploit the `eSet` class hierarchy. We conclude with a brief summary of lessons learned, useful developer-related side-effects of efforts to revise `eSet`, and possible directions for future development. # Comparing old and new What is an `eSet`? - Coordinate high through-put (e.g., gene expression) and phenotype data. - Provide common data container for diverse Bioconductor packages. Motivation for change (August, 2006). - What was broken? Complex data structure. Inconsistent object validity. No straight-forward way to extend `eSet` to new data types. - What forward-looking design goals did we have? Flexible storage model. Class hierarchy to promote code reuse and facilitate extension to new data objects. Methods for updating serialized instances. Key features in the redesign. - Simplified data content. - Structured class hierarchy. - Alternative storage modes. - More validity checking. - Conversion of example data in *Biobase*, and many other data sets elsewhere in Bioconductor, to *ExpressionSet*. - *Versioned* class information (in the development branch). - `updateObject` methods (in the development branch). # A quick tour ```{r echo=FALSE, message=FALSE} library(Biobase) ``` ## The `eSet` object: high-throughput experiments Purpose. - Coordinate and contain high-throughput genomic data. Structure: virtual base class. ```{r} getClass("eSet") ``` - `assayData`: high-throughput data. - `phenoData`: sample covariates. - `featureData`: feature covariates. - `experimentData`: experimental description. - `annotation`: assay description. - See below, and `?"eSet-class"` ### `assayData`: high-throughput data Purpose. - Efficiently and flexibly contain high-volume data. Structure: *list*, *environment*, or *lockEnvironment* class union. - Each element of *list* / *environment* / *lockEnvironment* is a matrix - Rows: *features*, e.g., gene names. - Columns: *samples* represented on each chip. - All matrices must have the same dimensions, row names, and column names. - Subclasses determine which matrices *must* be present. - See `?"AssayData-class"` ### `phenoData`: sample covariates Purpose. - Contain and document sample covariates. Structure: *AnnotatedDataFrame*. - `data`: *data.frame*. - Rows: sample identifiers. - Columns: measured covariates. - `varMetadata`: *data.frame*. - Rows: measured covariate labels. - Columns: covariate descriptors. - See `?"AnnotatedDataFrame-class"` ### `featureData`: feature covariates Purpose. - Contain and document feature covariates specific to the experiment; use the `annotation` slot for chip-level descriptions. Structure: *AnnotatedDataFrame*. - `data`: *data.frame*. - Rows: feature identifiers. These match row names of `assayData`. - Columns: measured covariates. - `varMetadata`: *data.frame*. - Rows: measured covariate labels. - Columns: covariate descriptors. - See `?"AnnotatedDataFrame-class"` ### `experimentData`: experiment description Purpose. - Summarize where and how the experiment was performed. Structure: *MIAxE* virtual class In Biobase version 2.11 the *MIAxE* virtual class was introduced as a general container for experiment meta-data. The *MIAME* class is now a subclass of *MIAxE*. See `?"MIAxE-class"`. The *MIAME* class structure is as follows - `title`: experiment title. - `name`: experimenter name(s). - `preprocessing: list` of pre-processing steps. - Additional slots. - See `?"MIAME-class"`. ### `annotation`: assay description Purpose. - Link experiment to annotation package. Structure: *character* - Label identifying annotation package. ## Important `eSet` methods Initialization. - `eSet` is `VIRTUAL`, initialize via subclass `callNextMethod` Accessors (get, set). - `assayData(obj); assayData(obj) <- value`: access or assign `assayData` - `phenoData(obj); phenoData(obj) <- value`: access or assign `phenoData` - `experimentData(obj); experimentData(obj) <- value`: access or assign `experimentData` - `annotation(obj); annotation(obj) <- value`: access or assign `annotation` Subsetting. - `obj[i, j]`: select genes $i$ and samples $j$. - `obj$name; obj$name <- value`: retrieve or assign covariate `name` in `phenoData` ### Additional `eSet` methods - `show`. - `storageMode`: influence how `assayData` is stored. - `updateObject`: update `eSet` objects to their current version. - `validObject`: ensure that `eSet` is valid. The `validObject` method is particularly important to `eSet`, ensuring that `eSet` contains consistent structure to data. ```{r} getValidity(getClass("eSet")) ``` The validity methods for `eSet` reflect our design goals. All `assayData` members must have identical row and column dimensions and `featureNames`. The names and numbers of samples must be the same in `assayData` and `phenoData` slots. Validity methods are defined for the classes underlying each slot as well. For instance, the validity methods for `AnnotatedDataFrame` check that variables used in `pData` are at least minimally described in `varMetadata`. ## Subclasses of `eSet` *Biobase* defines three classes that extend `eSet`. `ExpressionSet` (discussed further below) is meant to contain microarray gene expression data. *SnpSet* is a preliminary class to contain SNP data; other classes in development (e.g., in *oligo*) may provide alternative implementations for SNP data. *MultiSet* is an `ExpressionSet`-like class, but without restriction on the names (though not structure) of elements in the `assayData` slot. ### `ExpressionSet` Purpose: - Contain gene expression data. Required `assayData` members. - `exprs`, a matrix of expression values. Important methods. - Initialization (additional details below): ```{r eval=FALSE} obj <- new("ExpressionSet", phenoData = new("AnnotatedDataFrame"), experimentData = new("MIAME"), annotation = character(), exprs = new("matrix")) ``` - `exprs(obj), exprs(obj) <- value`: get or set `exprs`; methods defined for *ExpressionSet*, *AssayData*. ### *MultiSet* and *SnpSet* *MultiSet*. - Purpose: flexibly contain a collection of expression data matricies. - Required `assayData` members: none. *SnpSet*. - Purpose: contain genomic SNP calls. - Required `assayData` members: `call`, `callProbability`. # Comments on `assayData`: high-throughput data storage The `assayData` slot is meant to store high-throughput data. The idea is that the slot contains identically sized matrices containing expression or other data. All matrices in the slot must have the same dimension, and are structured so that rows represent 'features' and columns represent 'samples'. Validity methods enforce that row and column names of slot elements are identical. For technical reasons, creating instance of *AssayData* is slightly different from the way this is usually done in [R]{.sans-serif}. Normally, one creates an instance of a class with an expression like `new("ExpressionSet", ...)`, with the ... representing additional arguments. *AssayData* objects are created with ```{r eval=FALSE} assayDataNew("environment", elt) ``` where `elt` might be a matrix of expression values. For the curious, the reason for this setup stems from our desire to have a class that `is` a list or environment, rather than a class that has a slot that contains a list or environment. The `is` relationship is desirable to avoid unnecessary function calls to access slots, and requires that a class `contain` the base type (e.g., *environment*). Until recently an [R]{.sans-serif} object could not `contain` an *environment*. The `assayData` slot of `ExpressionSet` objects must contain a matrix named `exprs`. Nonetheless, the `ExpressionSet` validity method tries to be liberal -- it guarantees that the object has an `exprs` element, but allows for other elements too. The prudent developer wanting consistent additional data elements should derive a class from `ExpressionSet` that enforces the presence of their desired elements. The *AssayData* class allows for data elements to be stored in three different ways (see `?storageMode` and `?"storageMode<-"` for details): as a `list`, `environment`, or `lockedEnvironment`. Developers are probably familiar with `list` objects; a drawback is that `exprs` elements may be large, and some operations on lists in [R]{.sans-serif} may trigger creation of many copies of the the `exprs` element. This can be expensive in both space and time. Environments are nearly unique in [R]{.sans-serif}, in that they are passed by reference rather than value. This eliminates some copying, but has the unfortunate consequence that side-effects occur -- modifications to an environment inside a function influence the value of elements outside the function. For these reasons, environments can be useful as 'read only' arguments to functions, but can have unexpected consequences when functions modify their arguments. Locked environments implemented in *Biobase* try to strike a happy medium, allowing pass by reference for most operations but triggering (whole-environment) copying when elements in the environment are modified. The locking mechanism is enforced by only allowing known 'safe' operations to occur, usually by channeling user actions through the accessor methods: ```{r warning=FALSE} data(sample.ExpressionSet) storageMode(sample.ExpressionSet) tryCatch(assayData(sample.ExpressionSet)$exprs <- log(exprs(sample.ExpressionSet)), error=function(err) cat(conditionMessage(err))) ``` ```{r eval=FALSE} exprs(sample.ExpressionSet) <- log(exprs(sample.ExpressionSet))` ``` The `setReplaceMethod` for `exprs` (and `assayData`) succeeds by performing a deep copy of the entire environment. Because this is very inefficient, the recommended paradigm to update an element in a `lockedEnvironment` is to extract it, make many changes, and then reassign it. Developers can study `assayData` methods to learn more about how to lock and unlock environment bindings. *Biobase* allows the experienced user to employ (and run the risks of) environments, but the expectation is that most user objects are constructed with the default `lockedEnvironment` or `list`. A longer term consideration in designing *AssayData* was to allow more flexible methods of data storage, e.g., through database-hosted arrays. This is facilitated by using generic functions such as `exprs()` for data access, so that classes derived from *AssayData* can provide implementations appropriate for their underlying storage mode. # Extending `eSet` A designer wanting to implement `eSet` for a particular type of data creates a class that 'contains' `eSet`. The steps for doing this are described below. One example of such a class is `ExpressionSet`, designed to hold a matrix of gene expression values in the `assayData` slot. ```{r} getClass("ExpressionSet") getValidity(getClass("ExpressionSet")) ``` The data structure of an `ExpressionSet` is identical to that of `eSet`, and in fact is inherited (without additional slot creation) from `eSet`. The main difference is that the validity methods of `eSet` are augmented by a method to check that the `assayData` slot contains an entity named `"exprs"`. A valid `ExpressionSet` object must also satisfy all the validity requirements of `eSet`, but the developer does not explicitly invoke validity checking of the parts of the data structure inherited from `eSet`. ## Implementing a new class: a *SwirlSet* example We want the *Swirl* data set (see the `SW` two color data set that motivates this class) to contain four elements in the `assayData` slot: `R, G, Rb, Gb`. To derive a class from `eSet` for this data, we create a class, and provide initialization and validation methods. We create a class as follows: ```{r} setClass("SwirlSet", contains="eSet") ``` Notice that there are no new data elements in *SwirlSet* compared with `eSet`. The `initialize` method is written as ```{r message=FALSE} setMethod("initialize", "SwirlSet", function(.Object, R = new("matrix"), G = new("matrix"), Rb = new("matrix"), Gb = new("matrix"), ...) { callNextMethod(.Object, R=R, G=G, Rb=Rb, Gb=Gb, ...) }) ``` A slightly different `initialize` method allows the user to specify either the `assayData` or the `assayData` content. In advanced use, this has the advantage that `initialize` can be used as a 'copy constructor' to update several slots simultaneously. ```{r} setMethod("initialize", "SwirlSet", function(.Object, assayData=assayDataNew( R=R, G=G, Rb=Rb, Gb=Gb), R = new("matrix"), G = new("matrix"), Rb = new("matrix"), Gb = new("matrix"), ...) { if (!missing(assayData) && any(!missing(R), !missing(G), !missing(Rb), !missing(Gb))) { warning("using 'assayData'; ignoring 'R', 'G', 'Rb', 'Gb'") } callNextMethod(.Object, assayData=assayData, ...) }) ``` The structure of the `initialize` method is a bit different from those often seen in [R]{.sans-serif}. Often, `initialize` has only `.Object` as a named argument, or, if there are other named arguments, they correspond to slot names. Here our initialize method accepts four arguments, named after the `assayData` elements. Inside the `initialize` method, the named arguments are passed to the next initialization method in the hierarchy (i.e., `initialize` defined for `eSet`). The `eSet` `initialize` method then uses these arguments to populate the data slots in `.Object`. In particular, `eSet` places all arguments other `phenoData`, `experimentData`, and `annotation` into the `assayData` slot. The `eSet` `initialize` method then returns the result to the `initialize` method of *SwirlSet*, which returns a *SwirlSet* object to the user: ```{r eval=FALSE} new("SwirlSet") ``` General programming guidelines emerge from experience with the `initialize` method of `eSet` and derived classes. First, an appropriate strategy is to name only those data elements that will be manipulated directly by the `initialize` method. For instance, the definition above did *not* name `phenoData` and other `eSet` slots by name. To do so is not incorrect, but would require that they be explicitly named (e.g., `phenoData=phenoData`) in the `callNextMethod` code. Second, the arguments `R, G, Rb, Rg` are present in the `initialize` method to provide defaults consistent with object construction; the 'full' form of `callNextMethod`, replicating the named arguments, is required in the version of [R]{.sans-serif} in which this class was developed. Third, named arguments can be manipulated before `callNextMethod` is invoked. Fourth, the return value of `callNextMethod` can be captured... ```{r eval=FALSE} setMethod("initialize", "MySet", function(.Object, ...) { .Object <- callNextMethod(.Object, ...) }) ``` and manipulated before being returned to the user. Finally, it is the responsibility of the developer to ensure that a valid object is created; `callNextMethod` is a useful way to exploit correctly designed `initialize` methods for classes that the object extends, but the developer is free to use other techniques to create valid versions of their class. A validity method might complete our new class. A validity method is essential to ensure that the unique features of *SwirlSet* -- our reason for designing the new class -- are indeed present. We define our validity method to ensure that the `assayData` slot contains our four types of expression elements: ```{r} setValidity("SwirlSet", function(object) { assayDataValidMembers(assayData(object), c("R", "G", "Rb", "Gb")) }) ``` Notice that we do not have to explicitly request that the validity of other parts of the *SwirlSet* object are valid; this is done for us automatically. Objects are checked for validity when they are created, but not when modified. This is partly for efficiency reasons, and partly because object updates might transiently make them invalid. So a good programing practice is to ensure validity after modification, e.g., ```{r eval=FALSE} myFancyFunction <- function(obj) { assayData(obj) <- fancyAssaydData # obj invalid... phenoData(obj) <- justAsFancyPhenoData # but now valid validObject(obj) (obj) } ``` Assigning `fancyAssaydData` might invalidate the object, but `justAsFancyPhenoData` restores validity. # *Versioned* One problem encountered in the Bioconductor project is that data objects stored to disk become invalid as the underlying class definition changes. For instance, earlier releases of *Biobase* contain a sample *eSet* object. But under the changes discussed here, `eSet` is virtual and the stored object is no longer valid. The challenge is to easily identify invalid objects, and to provide a mechanism for updating old objects to their new representation. *Biobase* introduces the *Versioned* and *VersionedBiobase* classes to facilitate this. These classes are incorporated into key *Biobase*class definitions.*Biobase* also defines `updateObject` methods (the `updateObject` generic function is defined in the `r Biocpkg("BiocGenerics")` package) for conveniently updating old objects to their new representation. ```{r} data(sample.ExpressionSet) classVersion(sample.ExpressionSet) obj <- updateObject(sample.ExpressionSet) ``` The version information for this object is a named list. The first two elements indicate the version of R and Biobase used to create the object. The latter two elements are contained in the class prototype, and the class prototype is consulted to see if the instance of an object is 'current'. These lists can be subsetted in the usual way, e.g., ```{r} isCurrent(sample.ExpressionSet)[c("eSet", "ExpressionSet")] ``` Versioned classes, `updateObject` and related methods simplify the long-term maintenance of data objects. Take the fictious *MySet* as an example. ```{r} setClass("MySet", contains = "eSet", prototype = prototype(new("VersionedBiobase", versions=c(classVersion("eSet"), MySet="1.0.0")))) obj <- new("MySet") classVersion(obj) ``` This is a new class, and might undergo changes in its structure at some point in the future. When these changes are introduced, the developer will change the version number of the class in its prototype (the last line, below): ```{r} setClass("MySet", contains = "eSet", prototype = prototype( new("VersionedBiobase", versions=c(classVersion("eSet"), MySet="1.0.1")))) isCurrent(obj) ``` and add code to update to the new version ```{r} setMethod("updateObject", signature(object="MySet"), function(object, ..., verbose=FALSE) { if (verbose) message("updateObject(object = 'MySet')") object <- callNextMethod() if (isCurrent(object) ["MySet"]) return(object) ## Create an updated instance. if (!isVersioned(object)) ## Radical surgery – create a new, up-to-date instance new("MySet", assayData = updateObject(assayData(object), ..., verbose=verbose), phenoData = updateObject(phenoData(object), ..., verbose=verbose), experimentData = updateObject(experimentData(object), ..., verbose=verbose), annotation = updateObject(annotation(object), ..., verbose=verbose)) else { ## Make minor changes, and update version by consulting class definition classVersion(object)["MySet"]<- classVersion("MySet")["MySet"] object } }) ``` The code after `if(!isVersioned)` illustrates one way of performing 'radical surgery, creating a new up-to-date instance by updating all slots. The `else` clause represents more modest changes, using methods to update stale information. `updateObject` then returns a new, enhanced object: ```{r} classVersion(updateObject(obj)) ``` As in the example, versioning helps in choosing which modifications to perform -- minor changes for a slightly out-of-date object, radical surgery for something more ancient. Version information might also be used in methods, where changing class representation might facilitate more efficient routines. ## *Versioned* versus *VersionedBiobase* The information on [R]{.sans-serif} and *Biobase* versions is present in `eSet` derived classes because `eSet` contains *VersionedBiobase*. On the other hand, *AnnotatedDataFrame* contains *Versioned*, and has only information about its own class version. ```{r} classVersion(new("AnnotatedDataFrame")) ``` The rationale for this is that *AnnotatedDataFrame* is and will likely remain relatively simple, and details about [R]{.sans-serif} and *Biobase* are probably irrelevant to its use. On the other hand, some aspects of `eSet` and the algorithms that operate on them are more cutting edge and subject to changes in [R]{.sans-serif} or *Biobase*. Knowing the version of [R]{.sans-serif} and *Biobase* used to create an instance might provide valuable debugging information. ## Adding *Versioned* information to your own classes The key to versioning your own classes is to define your class to `contain` *Versioned* or *VersionedBiobase*, and to add the version information in the prototype. For instance, to add a class-specific version stamp to *SwirlSet* we would modify the class definition to ```{r} setClass("SwirlSet", contains = "eSet", prototype = prototype( new("VersionedBiobase", versions=c(classVersion("eSet"), SwirlSet="1.0.0")))) classVersion(new("SwirlSet")) ``` See additional examples in the *Versioned* help page. It is also possible to add arbitrary information to particular instances. ```{r} obj <- new("SwirlSet") classVersion(obj)["MyID"] <- "0.0.1" classVersion(obj) ``` ```{r} classVersion(updateObject(obj)) ``` There is additional documentation about these classes and methods in *Biobase*. # Summary This document summarizes *Biobase*, outlining strategies that developers using *Biobase* may find useful. The main points are to introduce the `eSet` class hierarchy, to illustrate how developers can effectively extend this class, and to introduce class versions as a way of tracking and easily updating objects. It is anticipated that `eSet`-derived classes will play an increasingly important role in *Biobase* development. # Session Information The version number of [R]{.sans-serif} and packages loaded for generating the vignette were: ```{r} sessionInfo() ``` Biobase/inst/doc/BiobaseDevelopment.html0000644000175200017520000244253514516024026021336 0ustar00biocbuildbiocbuild Biobase development and the new eSet

Contents

Revised 4 September, 2006 – featureData slot. Revised 20 April 2007 – minor wording changes; verbose and other arguments passed through updateObject example; introduce a second variant of initialize illustrating its use as a copy constructor. Revised 4 November, 2010 – experimentData slot as MIAxE class. MIAME class is now subclass of MIAxE.

1 Introduction

These notes help developers who are interested in using and extending the eSet class hierarchy, and using features in Biobase. The information here is not useful to regular users of Biobase.

This document illustrates the Biobase structures and approaches that make it it easy for developers to creatively use and extend the eSet class hierarchy.

The document starts with a brief description of the motivation for change, and a comparison of the old (before August, 2006) and new eSets and related functionality (e.g.,the Versioned class and updateObject methods). We then illustrate how eSet can be extended to handle additional types of data, and how new methods can exploit the eSet class hierarchy. We conclude with a brief summary of lessons learned, useful developer-related side-effects of efforts to revise eSet, and possible directions for future development.

2 Comparing old and new

What is an eSet?

  • Coordinate high through-put (e.g., gene expression) and phenotype data.
  • Provide common data container for diverse Bioconductor packages.

Motivation for change (August, 2006).

  • What was broken? Complex data structure. Inconsistent object validity. No straight-forward way to extend eSet to new data types.
  • What forward-looking design goals did we have? Flexible storage model. Class hierarchy to promote code reuse and facilitate extension to new data objects. Methods for updating serialized instances.

Key features in the redesign.

  • Simplified data content.
  • Structured class hierarchy.
  • Alternative storage modes.
  • More validity checking.
  • Conversion of example data in Biobase, and many other data sets elsewhere in Bioconductor, to ExpressionSet.
  • Versioned class information (in the development branch).
  • updateObject methods (in the development branch).

3 A quick tour

3.1 The eSet object: high-throughput experiments

Purpose.

  • Coordinate and contain high-throughput genomic data.

Structure: virtual base class.

getClass("eSet")
## Virtual Class "eSet" [package "Biobase"]
## 
## Slots:
##                                                                
## Name:           assayData          phenoData        featureData
## Class:          AssayData AnnotatedDataFrame AnnotatedDataFrame
##                                                                
## Name:      experimentData         annotation       protocolData
## Class:              MIAxE          character AnnotatedDataFrame
##                          
## Name:   .__classVersion__
## Class:           Versions
## 
## Extends: 
## Class "VersionedBiobase", directly
## Class "Versioned", by class "VersionedBiobase", distance 2
## 
## Known Subclasses: "ExpressionSet", "NChannelSet", "MultiSet", "SnpSet"
  • assayData: high-throughput data.
  • phenoData: sample covariates.
  • featureData: feature covariates.
  • experimentData: experimental description.
  • annotation: assay description.
  • See below, and ?"eSet-class"

3.1.1 assayData: high-throughput data

Purpose.

  • Efficiently and flexibly contain high-volume data.

Structure: list, environment, or lockEnvironment class union.

  • Each element of list / environment / lockEnvironment is a matrix
  • Rows: features, e.g., gene names.
  • Columns: samples represented on each chip.
  • All matrices must have the same dimensions, row names, and column names.
  • Subclasses determine which matrices must be present.
  • See ?"AssayData-class"

3.1.2 phenoData: sample covariates

Purpose.

  • Contain and document sample covariates.

Structure: AnnotatedDataFrame.

  • data: data.frame.
    • Rows: sample identifiers.
    • Columns: measured covariates.
  • varMetadata: data.frame.
    • Rows: measured covariate labels.
    • Columns: covariate descriptors.
  • See ?"AnnotatedDataFrame-class"

3.1.3 featureData: feature covariates

Purpose.

  • Contain and document feature covariates specific to the experiment; use the annotation slot for chip-level descriptions.

Structure: AnnotatedDataFrame.

  • data: data.frame.
    • Rows: feature identifiers. These match row names of assayData.
    • Columns: measured covariates.
  • varMetadata: data.frame.
    • Rows: measured covariate labels.
    • Columns: covariate descriptors.
  • See ?"AnnotatedDataFrame-class"

3.1.4 experimentData: experiment description

Purpose.

  • Summarize where and how the experiment was performed.

Structure: MIAxE virtual class

In Biobase version 2.11 the MIAxE virtual class was introduced as a general container for experiment meta-data. The MIAME class is now a subclass of MIAxE. See ?"MIAxE-class". The MIAME class structure is as follows

  • title: experiment title.
  • name: experimenter name(s).
  • preprocessing: list of pre-processing steps.
  • Additional slots.
  • See ?"MIAME-class".

3.1.5 annotation: assay description

Purpose.

  • Link experiment to annotation package.

Structure: character

  • Label identifying annotation package.

3.2 Important eSet methods

Initialization.

  • eSet is VIRTUAL, initialize via subclass callNextMethod

Accessors (get, set).

  • assayData(obj); assayData(obj) <- value: access or assign assayData
  • phenoData(obj); phenoData(obj) <- value: access or assign phenoData
  • experimentData(obj); experimentData(obj) <- value: access or assign experimentData
  • annotation(obj); annotation(obj) <- value: access or assign annotation

Subsetting.

  • obj[i, j]: select genes \(i\) and samples \(j\).
  • obj$name; obj$name <- value: retrieve or assign covariate name in phenoData

3.2.1 Additional eSet methods

  • show.
  • storageMode: influence how assayData is stored.
  • updateObject: update eSet objects to their current version.
  • validObject: ensure that eSet is valid.

The validObject method is particularly important to eSet, ensuring that eSet contains consistent structure to data.

getValidity(getClass("eSet"))
## function (object) 
## {
##     msg <- validMsg(NULL, isValidVersion(object, "eSet"))
##     dims <- dims(object)
##     if (ncol(dims) > 0) {
##         msg <- validMsg(msg, assayDataValidMembers(assayData(object)))
##         if (any(dims[1, ] != dims[1, 1])) 
##             msg <- validMsg(msg, "row numbers differ for assayData members")
##         if (any(dims[2, ] != dims[2, 1])) 
##             msg <- validMsg(msg, "sample numbers differ for assayData members")
##         if (dims[1, 1] != dim(featureData(object))[[1]]) 
##             msg <- validMsg(msg, "feature numbers differ between assayData and featureData")
##         if (!identical(featureNames(assayData(object)), featureNames(featureData(object)))) 
##             msg <- validMsg(msg, "featureNames differ between assayData and featureData")
##         if (dims[2, 1] != dim(phenoData(object))[[1]]) 
##             msg <- validMsg(msg, "sample numbers differ between assayData and phenoData")
##         if (!identical(sampleNames(assayData(object)), sampleNames(phenoData(object)))) 
##             msg <- validMsg(msg, "sampleNames differ between assayData and phenoData")
##         if (dim(phenoData(object))[[1]] != dim(protocolData(object))[[1]]) 
##             msg <- validMsg(msg, "sample numbers differ between phenoData and protocolData")
##         if (!identical(sampleNames(phenoData(object)), sampleNames(protocolData(object)))) 
##             msg <- validMsg(msg, "sampleNames differ between phenoData and protocolData")
##     }
##     if (is.null(msg)) 
##         TRUE
##     else msg
## }
## <bytecode: 0x561eecf11230>
## <environment: namespace:Biobase>

The validity methods for eSet reflect our design goals. All assayData members must have identical row and column dimensions and featureNames. The names and numbers of samples must be the same in assayData and phenoData slots. Validity methods are defined for the classes underlying each slot as well. For instance, the validity methods for AnnotatedDataFrame check that variables used in pData are at least minimally described in varMetadata.

3.3 Subclasses of eSet

Biobase defines three classes that extend eSet. ExpressionSet (discussed further below) is meant to contain microarray gene expression data. SnpSet is a preliminary class to contain SNP data; other classes in development (e.g., in oligo) may provide alternative implementations for SNP data. MultiSet is an ExpressionSet-like class, but without restriction on the names (though not structure) of elements in the assayData slot.

3.3.1 ExpressionSet

Purpose:

  • Contain gene expression data.

Required assayData members.

  • exprs, a matrix of expression values.

Important methods.

  • Initialization (additional details below):

    obj <- new("ExpressionSet",
               phenoData = new("AnnotatedDataFrame"),
               experimentData = new("MIAME"), annotation = character(),
               exprs = new("matrix"))
  • exprs(obj), exprs(obj) <- value: get or set exprs; methods defined for ExpressionSet, AssayData.

3.3.2 MultiSet and SnpSet

MultiSet.

  • Purpose: flexibly contain a collection of expression data matricies.
  • Required assayData members: none.

SnpSet.

  • Purpose: contain genomic SNP calls.
  • Required assayData members: call, callProbability.

4 Comments on assayData: high-throughput data storage

The assayData slot is meant to store high-throughput data. The idea is that the slot contains identically sized matrices containing expression or other data. All matrices in the slot must have the same dimension, and are structured so that rows represent ‘features’ and columns represent ‘samples’. Validity methods enforce that row and column names of slot elements are identical.

For technical reasons, creating instance of AssayData is slightly different from the way this is usually done in R. Normally, one creates an instance of a class with an expression like new("ExpressionSet", ...), with the … representing additional arguments. AssayData objects are created with

assayDataNew("environment", elt)

where elt might be a matrix of expression values. For the curious, the reason for this setup stems from our desire to have a class that is a list or environment, rather than a class that has a slot that contains a list or environment. The is relationship is desirable to avoid unnecessary function calls to access slots, and requires that a class contain the base type (e.g., environment). Until recently an R object could not contain an environment.

The assayData slot of ExpressionSet objects must contain a matrix named exprs. Nonetheless, the ExpressionSet validity method tries to be liberal – it guarantees that the object has an exprs element, but allows for other elements too. The prudent developer wanting consistent additional data elements should derive a class from ExpressionSet that enforces the presence of their desired elements.

The AssayData class allows for data elements to be stored in three different ways (see ?storageMode and ?"storageMode<-" for details): as a list, environment, or lockedEnvironment. Developers are probably familiar with list objects; a drawback is that exprs elements may be large, and some operations on lists in R may trigger creation of many copies of the the exprs element. This can be expensive in both space and time. Environments are nearly unique in R, in that they are passed by reference rather than value. This eliminates some copying, but has the unfortunate consequence that side-effects occur – modifications to an environment inside a function influence the value of elements outside the function. For these reasons, environments can be useful as ‘read only’ arguments to functions, but can have unexpected consequences when functions modify their arguments. Locked environments implemented in Biobase try to strike a happy medium, allowing pass by reference for most operations but triggering (whole-environment) copying when elements in the environment are modified. The locking mechanism is enforced by only allowing known ‘safe’ operations to occur, usually by channeling user actions through the accessor methods:

data(sample.ExpressionSet)
storageMode(sample.ExpressionSet) 
## [1] "lockedEnvironment"
tryCatch(assayData(sample.ExpressionSet)$exprs <- log(exprs(sample.ExpressionSet)), 
    error=function(err) cat(conditionMessage(err))) 
## cannot change value of locked binding for 'exprs'
exprs(sample.ExpressionSet) <- log(exprs(sample.ExpressionSet))`

The setReplaceMethod for exprs (and assayData) succeeds by performing a deep copy of the entire environment. Because this is very inefficient, the recommended paradigm to update an element in a lockedEnvironment is to extract it, make many changes, and then reassign it. Developers can study assayData methods to learn more about how to lock and unlock environment bindings. Biobase allows the experienced user to employ (and run the risks of) environments, but the expectation is that most user objects are constructed with the default lockedEnvironment or list.

A longer term consideration in designing AssayData was to allow more flexible methods of data storage, e.g., through database-hosted arrays. This is facilitated by using generic functions such as exprs() for data access, so that classes derived from AssayData can provide implementations appropriate for their underlying storage mode.

5 Extending eSet

A designer wanting to implement eSet for a particular type of data creates a class that ‘contains’ eSet. The steps for doing this are described below. One example of such a class is ExpressionSet, designed to hold a matrix of gene expression values in the assayData slot.

getClass("ExpressionSet") 
## Class "ExpressionSet" [package "Biobase"]
## 
## Slots:
##                                                                
## Name:      experimentData          assayData          phenoData
## Class:              MIAME          AssayData AnnotatedDataFrame
##                                                                
## Name:         featureData         annotation       protocolData
## Class: AnnotatedDataFrame          character AnnotatedDataFrame
##                          
## Name:   .__classVersion__
## Class:           Versions
## 
## Extends: 
## Class "eSet", directly
## Class "VersionedBiobase", by class "eSet", distance 2
## Class "Versioned", by class "eSet", distance 3
getValidity(getClass("ExpressionSet")) 
## function (object) 
## {
##     msg <- validMsg(NULL, isValidVersion(object, "ExpressionSet"))
##     msg <- validMsg(msg, assayDataValidMembers(assayData(object), 
##         c("exprs")))
##     if (class(experimentData(object)) != "MIAME") 
##         msg <- validMsg(msg, "experimentData slot in ExpressionSet must be 'MIAME' object")
##     if (is.null(msg)) 
##         TRUE
##     else msg
## }
## <bytecode: 0x561eed4d2608>
## <environment: namespace:Biobase>

The data structure of an ExpressionSet is identical to that of eSet, and in fact is inherited (without additional slot creation) from eSet. The main difference is that the validity methods of eSet are augmented by a method to check that the assayData slot contains an entity named "exprs". A valid ExpressionSet object must also satisfy all the validity requirements of eSet, but the developer does not explicitly invoke validity checking of the parts of the data structure inherited from eSet.

5.1 Implementing a new class: a SwirlSet example

We want the Swirl data set (see the SW two color data set that motivates this class) to contain four elements in the assayData slot: R, G, Rb, Gb. To derive a class from eSet for this data, we create a class, and provide initialization and validation methods.

We create a class as follows:

setClass("SwirlSet", contains="eSet") 

Notice that there are no new data elements in SwirlSet compared with eSet. The initialize method is written as

setMethod("initialize", "SwirlSet",
          function(.Object,
                   R = new("matrix"),
                   G = new("matrix"),
                   Rb = new("matrix"),
                   Gb = new("matrix"),
                   ...) {
            callNextMethod(.Object,
                           R=R, G=G, Rb=Rb, Gb=Gb,
                           ...) 
            }) 

A slightly different initialize method allows the user to specify either the assayData or the assayData content. In advanced use, this has the advantage that initialize can be used as a ‘copy constructor’ to update several slots simultaneously.

setMethod("initialize", "SwirlSet",
          function(.Object,
                   assayData=assayDataNew(
                   R=R, G=G, Rb=Rb, Gb=Gb),
                   R = new("matrix"),
                   G = new("matrix"),
                   Rb = new("matrix"),
                   Gb = new("matrix"),
                   ...) {
              if (!missing(assayData) &&
                  any(!missing(R), !missing(G), !missing(Rb), !missing(Gb))) {
                  warning("using 'assayData'; ignoring 'R', 'G', 'Rb', 'Gb'")
              }
              callNextMethod(.Object, assayData=assayData, ...)
          })

The structure of the initialize method is a bit different from those often seen in R. Often, initialize has only .Object as a named argument, or, if there are other named arguments, they correspond to slot names. Here our initialize method accepts four arguments, named after the assayData elements. Inside the initialize method, the named arguments are passed to the next initialization method in the hierarchy (i.e., initialize defined for eSet). The eSet initialize method then uses these arguments to populate the data slots in .Object. In particular, eSet places all arguments other phenoData, experimentData, and annotation into the assayData slot. The eSet initialize method then returns the result to the initialize method of SwirlSet, which returns a SwirlSet object to the user:

new("SwirlSet")

General programming guidelines emerge from experience with the initialize method of eSet and derived classes. First, an appropriate strategy is to name only those data elements that will be manipulated directly by the initialize method. For instance, the definition above did not name phenoData and other eSet slots by name. To do so is not incorrect, but would require that they be explicitly named (e.g., phenoData=phenoData) in the callNextMethod code. Second, the arguments R, G, Rb, Rg are present in the initialize method to provide defaults consistent with object construction; the ‘full’ form of callNextMethod, replicating the named arguments, is required in the version of R in which this class was developed. Third, named arguments can be manipulated before callNextMethod is invoked. Fourth, the return value of callNextMethod can be captured…

setMethod("initialize", "MySet",
          function(.Object, ...) {
              .Object <- callNextMethod(.Object, ...)
          })

and manipulated before being returned to the user. Finally, it is the responsibility of the developer to ensure that a valid object is created; callNextMethod is a useful way to exploit correctly designed initialize methods for classes that the object extends, but the developer is free to use other techniques to create valid versions of their class.

A validity method might complete our new class. A validity method is essential to ensure that the unique features of SwirlSet – our reason for designing the new class – are indeed present. We define our validity method to ensure that the assayData slot contains our four types of expression elements:

setValidity("SwirlSet", function(object) {
    assayDataValidMembers(assayData(object), c("R", "G", "Rb", "Gb"))
})
## Class "SwirlSet" [in ".GlobalEnv"]
## 
## Slots:
##                                                                
## Name:           assayData          phenoData        featureData
## Class:          AssayData AnnotatedDataFrame AnnotatedDataFrame
##                                                                
## Name:      experimentData         annotation       protocolData
## Class:              MIAxE          character AnnotatedDataFrame
##                          
## Name:   .__classVersion__
## Class:           Versions
## 
## Extends: 
## Class "eSet", directly
## Class "VersionedBiobase", by class "eSet", distance 2
## Class "Versioned", by class "eSet", distance 3

Notice that we do not have to explicitly request that the validity of other parts of the SwirlSet object are valid; this is done for us automatically. Objects are checked for validity when they are created, but not when modified. This is partly for efficiency reasons, and partly because object updates might transiently make them invalid. So a good programing practice is to ensure validity after modification, e.g.,

myFancyFunction <- function(obj) {
    assayData(obj) <- fancyAssaydData # obj invalid...
    phenoData(obj) <- justAsFancyPhenoData # but now valid
    validObject(obj)
    (obj)
}

Assigning fancyAssaydData might invalidate the object, but justAsFancyPhenoData restores validity.

6 Versioned

One problem encountered in the Bioconductor project is that data objects stored to disk become invalid as the underlying class definition changes. For instance, earlier releases of Biobase contain a sample eSet object. But under the changes discussed here, eSet is virtual and the stored object is no longer valid. The challenge is to easily identify invalid objects, and to provide a mechanism for updating old objects to their new representation.

Biobase introduces the Versioned and VersionedBiobase classes to facilitate this. These classes are incorporated into key Biobaseclass definitions.Biobase also defines updateObject methods (the updateObject generic function is defined in the BiocGenerics package) for conveniently updating old objects to their new representation.

data(sample.ExpressionSet) 
classVersion(sample.ExpressionSet) 
##             R       Biobase          eSet ExpressionSet 
##      "2.13.0"      "2.11.5"       "1.3.0"       "1.0.0"
obj <- updateObject(sample.ExpressionSet)

The version information for this object is a named list. The first two elements indicate the version of R and Biobase used to create the object. The latter two elements are contained in the class prototype, and the class prototype is consulted to see if the instance of an object is ‘current’. These lists can be subsetted in the usual way, e.g.,

isCurrent(sample.ExpressionSet)[c("eSet", "ExpressionSet")]
##          eSet ExpressionSet 
##          TRUE          TRUE

Versioned classes, updateObject and related methods simplify the long-term maintenance of data objects. Take the fictious MySet as an example.

setClass("MySet",
         contains = "eSet",
         prototype = prototype(new("VersionedBiobase",
                               versions=c(classVersion("eSet"), MySet="1.0.0"))))
obj <- new("MySet")
classVersion(obj)
##        R  Biobase     eSet    MySet 
##  "4.3.1" "2.62.0"  "1.3.0"  "1.0.0"

This is a new class, and might undergo changes in its structure at some point in the future. When these changes are introduced, the developer will change the version number of the class in its prototype (the last line, below):

 setClass("MySet",
          contains = "eSet",
          prototype = prototype( 
              new("VersionedBiobase",
                  versions=c(classVersion("eSet"), MySet="1.0.1"))))
isCurrent(obj)
##      S4       R Biobase    eSet   MySet 
##    TRUE    TRUE    TRUE    TRUE   FALSE

and add code to update to the new version

setMethod("updateObject", signature(object="MySet"),
          function(object, ..., verbose=FALSE) {
              if (verbose) message("updateObject(object = 'MySet')")
                  object <- callNextMethod()
              if (isCurrent(object) ["MySet"]) return(object)
              ## Create an updated instance.
              if (!isVersioned(object))
                  ## Radical surgery – create a new, up-to-date instance
                  new("MySet",
                      assayData = updateObject(assayData(object),
                          ..., verbose=verbose),
                      phenoData = updateObject(phenoData(object),
                          ..., verbose=verbose),
                      experimentData = updateObject(experimentData(object),
                          ..., verbose=verbose),
                      annotation = updateObject(annotation(object),
                          ..., verbose=verbose))
              else {
                  ## Make minor changes, and update version by consulting class definition
                  classVersion(object)["MySet"]<-
                  classVersion("MySet")["MySet"]
                  object
              }
          })

The code after if(!isVersioned) illustrates one way of performing ’radical surgery, creating a new up-to-date instance by updating all slots. The else clause represents more modest changes, using methods to update stale information. updateObject then returns a new, enhanced object:

classVersion(updateObject(obj))
##        R  Biobase     eSet    MySet 
##  "4.3.1" "2.62.0"  "1.3.0"  "1.0.1"

As in the example, versioning helps in choosing which modifications to perform – minor changes for a slightly out-of-date object, radical surgery for something more ancient. Version information might also be used in methods, where changing class representation might facilitate more efficient routines.

6.1 Versioned versus VersionedBiobase

The information on R and Biobase versions is present in eSet derived classes because eSet contains VersionedBiobase. On the other hand, AnnotatedDataFrame contains Versioned, and has only information about its own class version.

classVersion(new("AnnotatedDataFrame"))
## AnnotatedDataFrame 
##            "1.1.0"

The rationale for this is that AnnotatedDataFrame is and will likely remain relatively simple, and details about R and Biobase are probably irrelevant to its use. On the other hand, some aspects of eSet and the algorithms that operate on them are more cutting edge and subject to changes in R or Biobase. Knowing the version of R and Biobase used to create an instance might provide valuable debugging information.

6.2 Adding Versioned information to your own classes

The key to versioning your own classes is to define your class to contain Versioned or VersionedBiobase, and to add the version information in the prototype. For instance, to add a class-specific version stamp to SwirlSet we would modify the class definition to

setClass("SwirlSet", contains = "eSet",
         prototype = prototype(
             new("VersionedBiobase",
                 versions=c(classVersion("eSet"), SwirlSet="1.0.0"))))
classVersion(new("SwirlSet"))
##        R  Biobase     eSet SwirlSet 
##  "4.3.1" "2.62.0"  "1.3.0"  "1.0.0"

See additional examples in the Versioned help page.

It is also possible to add arbitrary information to particular instances.

obj <- new("SwirlSet")
classVersion(obj)["MyID"] <- "0.0.1"
classVersion(obj)
##        R  Biobase     eSet SwirlSet     MyID 
##  "4.3.1" "2.62.0"  "1.3.0"  "1.0.0"  "0.0.1"
 classVersion(updateObject(obj))
##        R  Biobase     eSet SwirlSet     MyID 
##  "4.3.1" "2.62.0"  "1.3.0"  "1.0.0"  "0.0.1"

There is additional documentation about these classes and methods in Biobase.

7 Summary

This document summarizes Biobase, outlining strategies that developers using Biobase may find useful. The main points are to introduce the eSet class hierarchy, to illustrate how developers can effectively extend this class, and to introduce class versions as a way of tracking and easily updating objects. It is anticipated that eSet-derived classes will play an increasingly important role in Biobase development.

8 Session Information

The version number of R and packages loaded for generating the vignette were:

sessionInfo()
## R version 4.3.1 (2023-06-16)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 22.04.3 LTS
## 
## Matrix products: default
## BLAS:   /home/biocbuild/bbs-3.18-bioc/R/lib/libRblas.so 
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_GB              LC_COLLATE=C              
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## time zone: America/New_York
## tzcode source: system (glibc)
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] Biobase_2.62.0      BiocGenerics_0.48.0 BiocStyle_2.30.0   
## 
## loaded via a namespace (and not attached):
##  [1] digest_0.6.33       R6_2.5.1            bookdown_0.36      
##  [4] fastmap_1.1.1       xfun_0.40           cachem_1.0.8       
##  [7] knitr_1.44          htmltools_0.5.6.1   rmarkdown_2.25     
## [10] cli_3.6.1           sass_0.4.7          jquerylib_0.1.4    
## [13] compiler_4.3.1      tools_4.3.1         evaluate_0.22      
## [16] bslib_0.5.1         yaml_2.3.7          BiocManager_1.30.22
## [19] jsonlite_1.8.7      rlang_1.1.1
Biobase/inst/doc/ExpressionSetIntroduction.R0000644000175200017520000001474314516024030022226 0ustar00biocbuildbiocbuild### R code from vignette source 'ExpressionSetIntroduction.Rnw' ################################################### ### code chunk number 1: init ################################################### options(width=65) ################################################### ### code chunk number 2: install-pkg (eval = FALSE) ################################################### ## if (!require("BiocManager")) ## install.packages("BiocManager") ## BiocManager::install("Biobase") ################################################### ### code chunk number 3: loadlib ################################################### library("Biobase") ################################################### ### code chunk number 4: convert (eval = FALSE) ################################################### ## library(convert) ## as(object, "ExpressionSet") ################################################### ### code chunk number 5: read-table-geneData ################################################### dataDirectory <- system.file("extdata", package="Biobase") exprsFile <- file.path(dataDirectory, "exprsData.txt") exprs <- as.matrix(read.table(exprsFile, header=TRUE, sep="\t", row.names=1, as.is=TRUE)) ################################################### ### code chunk number 6: exprsFile (eval = FALSE) ################################################### ## exprsFile <- "c:/path/to/exprsData.txt" ################################################### ### code chunk number 7: geneData-peak ################################################### class(exprs) dim(exprs) colnames(exprs) head(exprs[,1:5]) ################################################### ### code chunk number 8: ExpressionSet-basic ################################################### minimalSet <- ExpressionSet(assayData=exprs) ################################################### ### code chunk number 9: pData ################################################### pDataFile <- file.path(dataDirectory, "pData.txt") pData <- read.table(pDataFile, row.names=1, header=TRUE, sep="\t") dim(pData) rownames(pData) summary(pData) ################################################### ### code chunk number 10: geneCovariate-geneData-name-match ################################################### all(rownames(pData)==colnames(exprs)) ################################################### ### code chunk number 11: colnames ################################################### names(pData) ################################################### ### code chunk number 12: sapplyClasses ################################################### sapply(pData, class) ################################################### ### code chunk number 13: simpleSubsetting ################################################### pData[c(15, 20), c("gender", "type")] pData[pData$score>0.8,] ################################################### ### code chunk number 14: metadata-create ################################################### metadata <- data.frame(labelDescription= c("Patient gender", "Case/control status", "Tumor progress on XYZ scale"), row.names=c("gender", "type", "score")) ################################################### ### code chunk number 15: AnnotatedDataFrame ################################################### phenoData <- new("AnnotatedDataFrame", data=pData, varMetadata=metadata) phenoData ################################################### ### code chunk number 16: AnnotatedDataFrame-subset ################################################### head(pData(phenoData)) phenoData[c("A","Z"),"gender"] pData(phenoData[phenoData$score>0.8,]) ################################################### ### code chunk number 17: annotation ################################################### annotation <- "hgu95av2" ################################################### ### code chunk number 18: R.MIAME ################################################### experimentData <- new("MIAME", name="Pierre Fermat", lab="Francis Galton Lab", contact="pfermat@lab.not.exist", title="Smoking-Cancer Experiment", abstract="An example ExpressionSet", url="www.lab.not.exist", other=list( notes="Created from text files" )) ################################################### ### code chunk number 19: ExpressionSetFinally ################################################### exampleSet <- ExpressionSet(assayData=exprs, phenoData=phenoData, experimentData=experimentData, annotation="hgu95av2") ################################################### ### code chunk number 20: ExpressionSet-minimal ################################################### minimalSet <- ExpressionSet(assayData=exprs) ################################################### ### code chunk number 21: helpExpressionSet (eval = FALSE) ################################################### ## help("ExpressionSet-class") ################################################### ### code chunk number 22: showExpressionSet ################################################### exampleSet ################################################### ### code chunk number 23: usingDollar ################################################### exampleSet$gender[1:5] exampleSet$gender[1:5] == "Female" ################################################### ### code chunk number 24: featureNames ################################################### featureNames(exampleSet)[1:5] ################################################### ### code chunk number 25: sampleNames ################################################### sampleNames(exampleSet)[1:5] varLabels(exampleSet) ################################################### ### code chunk number 26: exprs ################################################### mat <- exprs(exampleSet) dim(mat) ################################################### ### code chunk number 27: first10 ################################################### vv <- exampleSet[1:5, 1:3] dim(vv) featureNames(vv) sampleNames(vv) ################################################### ### code chunk number 28: males ################################################### males <- exampleSet[ , exampleSet$gender == "Male"] males ################################################### ### code chunk number 29: ExpressionSetIntroduction.Rnw:490-491 ################################################### toLatex(sessionInfo()) Biobase/inst/doc/ExpressionSetIntroduction.Rnw0000644000175200017520000004307614516003524022601 0ustar00biocbuildbiocbuild% NOTE -- ONLY EDIT THE .Rnw FILE!!! The .tex file is % likely to be overwritten. % %\VignetteDepends{Biobase} %\VignetteIndexEntry{An introduction to Biobase and ExpressionSets} %\VignetteKeywords{tutorial, environment, graphics, ExpressionSet} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[12pt]{article} \usepackage{amsmath,fullpage} \usepackage[authoryear,round]{natbib} \usepackage{hyperref} \usepackage{theorem} \usepackage{float} \usepackage{ifthen} \newcommand{\scscst}{\scriptscriptstyle} \newcommand{\scst}{\scriptstyle} \newcommand{\R}{{\textsf{R}}} \newcommand{\code}[1]{{\texttt{#1}}} \newcommand{\term}[1]{{\emph{#1}}} \newcommand{\Rpackage}[1]{\textsf{#1}} \newcommand{\Rfunction}[1]{\texttt{#1}} \newcommand{\Robject}[1]{\texttt{#1}} \newcommand{\Rclass}[1]{{\textit{#1}}} \newcommand{\Rmethod}[1]{{\textit{#1}}} \newcommand{\Rfunarg}[1]{{\textit{#1}}} %% Excercises and Questions \usepackage{theorem} \theoremstyle{break} \newtheorem{Ex}{Exercise} \theoremstyle{break} \newtheorem{Q}{Question} %% And solution or answer \newenvironment{solution}{% \begin{center} \begin{minipage}{0.75\textwidth} %% \color{blue} }{ \end{minipage} \end{center} \bigskip% } \bibliographystyle{plainnat} \title{An Introduction to Bioconductor's \Rclass{ExpressionSet} Class} \author{Seth Falcon, Martin Morgan, and Robert Gentleman} \date{6 October, 2006; revised 9 February, 2007} \begin{document} <>= options(width=65) @ \maketitle \section{Introduction} \Rpackage{Biobase} is part of the Bioconductor project, and is used by many other packages. \Rpackage{Biobase} contains standardized data structures to represent genomic data. The \Rclass{ExpressionSet} class is designed to combine several different sources of information into a single convenient structure. An \Rclass{ExpressionSet} can be manipulated (e.g., subsetted, copied) conveniently, and is the input or output from many Bioconductor functions. The data in an \Rclass{ExpressionSet} is complicated, consisting of expression data from microarray experiments (\code{assayData}; \code{assayData} is used to hint at the methods used to access different data components, as we will see below), `meta-data' describing samples in the experiment (\code{phenoData}), annotations and meta-data about the features on the chip or technology used for the experiment (\code{featureData}, \code{annotation}), information related to the protocol used for processing each sample (and usually extracted from manufacturer files, \code{protocolData}), and a flexible structure to describe the experiment (\code{experimentData}). The \Rclass{ExpressionSet} class coordinates all of this data, so that you do not usually have to worry about the details. However, an \Rclass{ExpressionSet} needs to be created in the first place, and creation can be complicated. In this introduction we learn how to create and manipulate \Rclass{ExpressionSet} objects, and practice some basic \R{} skills. \section{Preliminaries} \subsection{Installing Packages} If you are reading this document and have not yet installed any software on your computer, visit \url{http://bioconductor.org} and follow the instructions for installing \R{} and Bioconductor. Once you have installed \R{} and Bioconductor, you are ready to go with this document. In the future, you might find that you need to install one or more additional packages. The best way to do this is to start an \R{} session and evaluate commands like <>= if (!require("BiocManager")) install.packages("BiocManager") BiocManager::install("Biobase") @ %% \subsection{Loading Packages} The definition of the \Rclass{ExpressionSet} class along with many methods for manipulating \Rclass{ExpressionSet} objects are defined in the \Rpackage{Biobase} package. In general, you need to load class and method definitions before you use them. When using Bioconductor, this means loading \R{} packages using \Rfunction{library} or \Rfunction{require}. <>= library("Biobase") @ \begin{Ex} What happens when you try to load a package that is not installed? \end{Ex} \begin{solution} When using \Rfunction{library}, you get an error message. With \Rfunction{require}, the return value is \Robject{FALSE} and a warning is printed. \end{solution} \section{Building an ExpressionSet From .CEL and other files} Many users have access to .CEL or other files produced by microarray chip manufacturer hardware. Usually the strategy is to use a Bioconductor package such as \Rpackage{affyPLM}, \Rpackage{affy}, \Rpackage{oligo}, or \Rpackage{limma}, to read these files. These Bioconductor packages have functions (e.g., \Rfunction{ReadAffy}, \Rfunction{expresso}, or \Rfunction{justRMA} in \Rpackage{affy}) to read CEL files and perform preliminary preprocessing, and to represent the resulting data as an \Rclass{ExpressionSet} or other type of object. Suppose the result from reading and preprocessing CEL or other files is named \Robject{object}, and \Robject{object} is different from \Rclass{ExpressionSet}; a good bet is to try, e.g., <>= library(convert) as(object, "ExpressionSet") @ %% It might be the case that no converter is available. The path then is to extract relevant data from \Robject{object} and use this to create an \Rclass{ExpressionSet} using the instructions below. \section{Building an ExpressionSet From Scratch} As mentioned in the introduction, the data from many high-throughput genomic experiments, such as microarray experiments, usually consist of several conceptually distinct parts: assay data, phenotypic meta-data, feature annotations and meta-data, and a description of the experiment. We'll construct each of these components, and then assemble them into an \Rclass{ExpressionSet}. \subsection{Assay data} One important part of the experiment is a matrix of `expression' values. The values are usually derived from microarrays of one sort or another, perhaps after initial processing by manufacturer software or Bioconductor packages. The matrix has $F$ rows and $S$ columns, where $F$ is the number of features on the chip and $S$ is the number of samples. A likely scenario is that your assay data is in a 'tab-delimited' text file (as exported from a spreadsheet, for instance) with rows corresponding to features and columns to samples. The strategy is to read this file into \R{} using the \Rfunction{read.table} command, converting the result to a \Rclass{matrix}. A typical command to read a tab-delimited file that includes column `headers' is <>= dataDirectory <- system.file("extdata", package="Biobase") exprsFile <- file.path(dataDirectory, "exprsData.txt") exprs <- as.matrix(read.table(exprsFile, header=TRUE, sep="\t", row.names=1, as.is=TRUE)) @ %% The first two lines create a file path pointing to where the assay data is stored; replace these with a character string pointing to your own file, e.g, <>= exprsFile <- "c:/path/to/exprsData.txt" @ %% (Windows users: note the use of \verb+/+ rather than \verb+\+; this is because \R{} treats the \verb+\+ character as an `escape' sequence to change the meaning of the subsequent character). See the help pages for \Rfunction{read.table} for more detail. A common variant is that the character separating columns is a comma (``comma-separated values'', or ``csv'' files), in which case the \Robject{sep} argument might be \Robject{sep=","}. It is always important to verify that the data you have read matches your expectations. At a minimum, check the class and dimensions of \Robject{geneData} and take a peak at the first several rows <>= class(exprs) dim(exprs) colnames(exprs) head(exprs[,1:5]) @ %% At this point, we can create a minimal \Rclass{ExpressionSet} object using the \code{ExpressionSet} constructor: <>= minimalSet <- ExpressionSet(assayData=exprs) @ % We'll get more benefit from expression sets by creating a richer object that coordinates phenotypic and other data with our expression data, as outlined in the following sections. \subsection{Phenotypic data} Phenotypic data summarizes information about the samples (e.g., sex, age, and treatment status; referred to as `covariates'). The information describing the samples can be represented as a table with $S$ rows and $V$ columns, where $V$ is the number of covariates. An example of phenotypic data can be input with <>= pDataFile <- file.path(dataDirectory, "pData.txt") pData <- read.table(pDataFile, row.names=1, header=TRUE, sep="\t") dim(pData) rownames(pData) summary(pData) @ %% There are three columns of data, and 26 rows. Note that the number of rows of phenotypic data match the number of columns of expression data, and indeed that the row and column names are identically ordered: <>= all(rownames(pData)==colnames(exprs)) @ %% This is an essential feature of the relationship between the assay and phenotype data; \Rclass{ExpressionSet} will complain if these names do not match. Phenotypic data can take on a number of different forms. For instance, some covariates might reasonably be represented as numeric values. Other covariates (e.g., gender, tissue type, or cancer status) might better be represented as \Robject{factor} objects (see the help page for \Robject{factor} for more information). It is especially important that the phenotypic data are encoded correctly; the \Robject{colClasses} argument to \Rfunction{read.table} can be helpful in correctly inputing (and ignoring, if desired) columns from the file. \begin{Ex} What class does \Rfunction{read.table} return? \end{Ex} \begin{Ex} Determine the column names of \Robject{pData}. Hint: \Robject{apropos("name")}. \end{Ex} \begin{solution} <>= names(pData) @ \end{solution} \begin{Ex} Use \Rfunction{sapply} to determine the classes of each column of \Robject{pData}. Hint: read the help page for \Rfunction{sapply}. \end{Ex} \begin{solution} <>= sapply(pData, class) @ \end{solution} \begin{Ex} What is the sex and Case/Control status of the 15th and 20th samples? And for the sample(s) with \Robject{score} greater than $0.8$. \end{Ex} \begin{solution} <>= pData[c(15, 20), c("gender", "type")] pData[pData$score>0.8,] @ \end{solution} Investigators often find that the meaning of simple column names does not provide enough information about the covariate -- What is the cryptic name supposed to represent? What units are the covariates measured in? We can create a data frame containing such meta-data (or read the information from a file using \Rfunction{read.table}) with <>= metadata <- data.frame(labelDescription= c("Patient gender", "Case/control status", "Tumor progress on XYZ scale"), row.names=c("gender", "type", "score")) @ %% This creates a \Rclass{data.frame} object with a single column called \code{labelDescription}, and with row names identical to the column names of the \Rclass{data.frame} containing the phenotypic data. The column \Robject{labelDescription} \emph{must} be present; other columns are optional. Bioconductor's \Rpackage{Biobase} package provides a class called \Rclass{AnnotatedDataFrame} that conveniently stores and manipulates the phenotypic data and its metadata in a coordinated fashion. Create and view an \Rclass{AnnotatedDataFrame} instance with: <>= phenoData <- new("AnnotatedDataFrame", data=pData, varMetadata=metadata) phenoData @ %% Some useful operations on an \Rclass{AnnotatedDataFrame} include \Rmethod{sampleNames}, \Rmethod{pData} (to extract the original \Robject{pData} \Rclass{data.frame}), and \Rmethod{varMetadata}. In addition, \Rclass{AnnotatedDataFrame} objects can be subset much like a \Rclass{data.frame}: <>= head(pData(phenoData)) phenoData[c("A","Z"),"gender"] pData(phenoData[phenoData$score>0.8,]) @ %% \subsection{Annotations and feature data} Meta-data on features is as important as meta-data on samples, and can be very large and diverse. A single chip design (i.e., collection of features) is likely to be used in many different experiments, and it would be inefficient to repeatedly collect and coordinate the same meta-data for each \Rclass{ExpressionSet} instance. Instead, the ideas is to construct specialized meta-data packages for each type of chip or instrument. Many of these packages are available from the Bioconductor web site. These packages contain information such as the gene name, symbol and chromosomal location. There are other meta-data packages that contain the information that is provided by other initiatives such as GO and KEGG. The \Rpackage{annotate} and \Rpackage{AnnotationDbi} packages provides basic data manipulation tools for the meta-data packages. The appropriate way to create annotation data for features is very straight-forward: we provide a character string identifying the type of chip used in the experiment. For instance, the data we are using is from the Affymetrix hgu95av2 chip: <>= annotation <- "hgu95av2" @ %% It is also possible to record information about features that are unique to the experiment (e.g., flagging particularly relevant features). This is done by creating or modifying an \Robject{AnnotatedDataFrame} like that for \Robject{phenoData} but with row names of the \Rclass{AnnotatedDataFrame} matching rows of the assay data. \subsection{Experiment description} Basic description about the experiment (e.g., the investigator or lab where the experiment was done, an overall title, and other notes) can be recorded by creating a \Rclass{MIAME} object. One way to create a \Rclass{MIAME} object is to use the \Rfunction{new} function: <>= experimentData <- new("MIAME", name="Pierre Fermat", lab="Francis Galton Lab", contact="pfermat@lab.not.exist", title="Smoking-Cancer Experiment", abstract="An example ExpressionSet", url="www.lab.not.exist", other=list( notes="Created from text files" )) @ %% Usually, \Rfunction{new} takes as arguments the class name and pairs of names and values corresponding to different slots in the class; consult the help page for \Rclass{MIAME} for details of available slots. \subsection{Assembling an \Rclass{ExpressionSet}} An \Rclass{ExpressionSet} object is created by assembling its component parts and callng the \code{ExpressionSet} constructor: <>= exampleSet <- ExpressionSet(assayData=exprs, phenoData=phenoData, experimentData=experimentData, annotation="hgu95av2") @ %% Note that the names on the right of each equal sign can refer to any object of appropriate class for the argument. See the help page for \Rclass{ExpressionSet} for more information. We created a rich data object to coordinate diverse sources of information. Less rich objects can be created by providing less information. As mentioned earlier, a minimal expression set can be created with <>= minimalSet <- ExpressionSet(assayData=exprs) @ %% Of course this object has no information about phenotypic or feature data, or about the chip used for the assay. \section{\Rclass{ExpressionSet} Basics} Now that you have an \Rclass{ExpressionSet} instance, let's explore some of the basic operations. You can get an overview of the structure and available methods for \Rclass{ExpressionSet} objects by reading the help page: <>= help("ExpressionSet-class") @ When you print an \Rclass{ExpressionSet} object, a brief summary of the contents of the object is displayed (displaying the entire object would fill your screen with numbers): <>= exampleSet @ \subsection{Accessing Data Elements} A number of accessor functions are available to extract data from an \Rclass{ExpressionSet} instance. You can access the columns of the phenotype data (an \Rclass{AnnotatedDataFrame} instance) using \verb+$+: <>= exampleSet$gender[1:5] exampleSet$gender[1:5] == "Female" @ %% You can retrieve the names of the features using \Rfunction{featureNames}. For many microarray datasets, the feature names are the probe set identifiers. <>= featureNames(exampleSet)[1:5] @ %% The unique identifiers of the samples in the data set are available via the \Rfunction{sampleNames} method. The \Rfunction{varLabels} method lists the column names of the phenotype data: <>= sampleNames(exampleSet)[1:5] varLabels(exampleSet) @ %% Extract the expression matrix of sample information using \Rfunction{exprs}: <>= mat <- exprs(exampleSet) dim(mat) @ \subsubsection{Subsetting} Probably the most useful operation to perform on \Rclass{ExpressionSet} objects is subsetting. Subsetting an \Rclass{ExpressionSet} is very similar to subsetting the expression matrix that is contained within the \Rclass{ExpressionSet}, the first argument subsets the features and the second argument subsets the samples. Here are some examples: Create a new \Rclass{ExpressionSet} consisting of the 5 features and the first 3 samples: <>= vv <- exampleSet[1:5, 1:3] dim(vv) featureNames(vv) sampleNames(vv) @ %% Create a subset consisting of only the male samples: <>= males <- exampleSet[ , exampleSet$gender == "Male"] males @ \section{What was used to create this document} The version number of \R{} and the packages and their versions that were used to generate this document are listed below. <>= toLatex(sessionInfo()) @ \end{document} Biobase/inst/doc/ExpressionSetIntroduction.pdf0000644000175200017520000056344314516024030022604 0ustar00biocbuildbiocbuild%PDF-1.5 % 66 0 obj << /Length 2194 /Filter /FlateDecode >> stream xڕX[۶~[ &qyJڤug2ɤLyDHbM}-vI]L%>Ow޼蕎Ujzڭ2bmV+Tjv1qoEc߭7v;;7]K]Ͱ韸\ߢTI>"? /?ʙmtM9L*T)dя묈eOe?̻֭~_Ne[R~d=TEceKLQHVR+ΔBYq-O{\T\sٿ8XbL qʦvqZy·'kAV31[ d5&WI~]P\ Q&)7t7|p989-/>mdKY3XDS2t@:_! Gٶr+UHdNइrcT0Zz;C}^=ۮ/ ̌^̎1e\b% 2#%qHBDGK3^zql6Ejr5m# {/!ɏin{jkгrwE)st;/Y8i^/GZJu0RQXe<>XJhXTS9WA!#dF ~%URܥ i#559 8~f $e0V J)fb@G3bvD#a8ﵰhRFP:-^U)mgo !RRESATZ}J}~AeR 9:C7mRRUwfp1AĀz(/MȻap&UL)RE U[}Dא0Y^mbn[贈o> stream xڥXK8WxsYk )) "Y$ ` =eDz$~bQg:CbTz}쇷2qXHl,dQFBn_lw2Au_;_:߱ ntAo6fPz%2K]EQ+)qXqs_tJ']7U$ʾ T"t 08wWqK ~ަQm P֕KgAWr;~eIES U%sQRQH (~2 LCG3T(S5m)k|[z:k5x6ɂdSԞ%m7 VycjP q5ug#psyk$,tR#"͔ Ks9jd4 Oz]V H|CZ>oD)L)$ݏiLLܑYZUXO%8Qbں!8Y dto13Lx x{Gkΰ^ ?L3q9ͱSmqˡ^[b{O6Չ7l,E*6tB>@2> 5oNwސ*,gAdGAB48H*KH 4wq!Œ?W`eʹ>SHMed0Nz G/Δƹ+x׌7e9hFJ|R7D`D6\*PZ_E*<}eқJ)QNt"C)|n``Hg^ʧ(O$d Yqص!߅Iց0v.\_Gfhr}|3)HB45 pl]e[`1Qj(,bVէd뱪];\E]eQеgNZ4֬ ~ni!QjDP*B 貴lK"Pl2d_:ל@g#hkuaNIAӭF"2'$%k#J*_BJԡ_bh~{sy,)gN{_oHUF\J~~[*14G>Z۠ r'|uul}TZXk^b%FN*dI}~7^&)͟?"{TaliްȄu,v;_~H.$JowahtPMz{~Jm_=2@x8p;aԓsmۇ^^" -f!>^a;;JgLUCp"0 جE=_Lٟv#cm/|уv׍xo6E|f1Ye%q?ܞ膠7;D*n.' "8pʥ w/ar7u 48+ [E."gDF[g`%J^oJ*(F)kE<,9U?A`UGWT ӈIOz Y!/;blWˑq?%^&;li2u FOW4G?_L7w m~P6c_0j*Z\p809~ 9'(u?lZkk;JVbۉl+hj}_۩ ^4}sp561w $38fXgCc<3"𞡜'$sѷ0ߛuu`.CΥP'P^3y'tkT7έe3RAZu7,1=Yi% 4>ۈ4w} r{~Y8'9p0d=m  `7v<."GӴYcBW|yvSD nf\%lK0cT7խq!~]ۣȪt= 2,ﱷjJ+;tHg (MՉw!)]y[„zDmz/F="J%񕡝 /_Fi'Wrɣ>h5 Km8S̈I.v՛If)K/K{s&!;O:lf:ܼZ}wIJE W> stream xڝX[sܶ~싹]NڤIJ!.V/[p (}"pwUHQ]o,3zs\} wX$6WOߝ_LJ11A db: "uzm׫f {(-S=ݕ>=S>xZ+1 ;mL6/ye 'A\A]{`%Nf X&Ve0*T? ed0a۵5Zu (}azE1E5-ޭpyN[jklJ Cz4P]K Լs7hÜF5{bت:bF ٶG=ʏ jkW_ E{U;2-8N31;x GNFs BpWs%Cڢ٪f36EYm)j"A@OéOzVPd~[*H?v[0 A>Ԩ؍ ^[Y\=x]#6 d,iH/Q8 +q*d$-6\,hL-B70RN<:vx(iJD#wW7덮ʺ楽@ʏ~UW#\z$Q֓2qOɗ$RӺ_!HoiKec HܗGEwFэVfCٍ׏aT; l0+y AzTo<#k· {*"d1x+?X-v:ހ#)te/vŌ_,>0LOoJCW:Nă9Pg8ssm Veq45SdzW{4b -K.45 ܀bU[[qrq+w~IlRpXz9V]ӱhP-'f^Z[kh[Di?p MBf)\SwIsZ5>&I`8ˋHMf{jϤ=&{JEGnt j-궳Ȱѽ*+KaŮw˱+tlcAp0& /`u9װQ ULYbg fG?SHv2zq\׽oȠlcT6~Wze4/<!v[hdj61Uw;ԓȩO]lvS.Yw%vG-J pFEe5㑹?HR,v`ŕ Ind=*o8 Z 6*E66t]3_4%=3oZ?lӣhf|Hplou<)A1:>~@ugm*&Z՝v f><9xvV|"2V5u%DŽ@&S! t=yb[X?Ƚ yp ^<=Y Ko季\9_寎|(sGa OLztw{GvgGQ(v_K½9VUv?X q狷/Na' endstream endobj 94 0 obj << /Length 1516 /Filter /FlateDecode >> stream xڕWYs6~ϯ%Bp[wƎ6i&rIe$bG"5$Uš#bL=9Wj9͵@pIU60R`2| ǣ$#'<#OWӸ?}<xT7=??X7^ߋn4L%XZMr"\j 42g݇*7KTKj HEY.Sͬ27/QA>뤬OzCFc%Un VFss ,`[0STKdL@XU6T0bh8|!K|dm[ܝ]q٘l@{7 ԶA5©Le(Hs*IWM \Kമk98v`r#5^͋.Cq5ib5wUyhKEy *onu (|uA^wrQq<^,j&Z44 v=ėزhʿ]ZDJuU7ˢ c{bXy/AI\-\l},CGoz /]LlͿtaJ+u-jCw-2§L}ihJXp#)Er-<8s)? @$wBXHm6A,|iї ~+>/0t uy,7rfx]e{iB%j֧f6ZjiX/q}zBe43,|Kt! *|79V)ǘ^ÎOw듶9_UBYe؎i; l6)M ໺m۽a:99/Y~ q  v4׿}$4ڌƺGrЧ|XZKhThAihíer^Pw.d|{2Ks*b;8q>`x+ak2<Dad&Y'c> stream xڝWK6W{)Qi恶h7!Ɂi[, p(鶇]17pɛDju[jDžSݮE;&QYdhGa|Vu:t덌vޚ *XAmDž?Br,@bn^ӛ9"Û<F[,o=x=lY3K2F`!PPtq6zqxlt~:D爁gҶTB%m{y 0ZaqW* YzSSMyBQ4)`SǒUj<6 7'*$F>STit;f}$n G_W2Y OuFVS1#YzZ؇ڌo̅W8sq]k>bz T:dC69ɢY^DBdC 8`R { UeX;wKbONT* Pey O>ii;lCc o]2j>řLƢ&8$ D2VB74u@4ӏ$ p"E)+v"+Z>/uYBu_%(XSR@򅧌<_Dt5رf> 4[C"p#ԸKn13PMfBCsUoJ~x8eG1FkጉኋÑ30[8>)bB?-\rW%dl `Jl1q'j M:f̸jQ O$P/*4K3C")|·GUg% endstream endobj 107 0 obj << /Length 1701 /Filter /FlateDecode >> stream xڥXێ6}W5C$M$-Z4m+ѶYtv3ʶ\_,"s~R%3!RpZτLIf|6x<_(ͅ|!;P4rx~EgS=sgMcp.h3d"L\:$7(1wWEQLfK\kh._}ziLԴ[nc;N JI<* !ˀ9+|W ^8]o׫.%T.R߾_dhDђ8Z2bBV$?닍 uo*2r[ݏ#CUQmm]SYɫ8-9|ݗ oZVNau)LRi j];5(}e%CO\d$yTBn^ZqTt7M_dnШu&wjziMgl_ }aL <@$hE9Qv+!ТZ|+*4x9O`ÙĈu R_tY[4#_~ !6I<߱W$d#Xu?t۷v8z(َp 󃳯^.:#m}ADr5g+fœ;>MjKG3t%m_d]㭐(ݧ}̎*dR.5MfsMJm֪ؑΎuYXxTuZ&>)9jXʏANbOsCz k9A0%|*2jዣ"g{nWD}mk|)#IA-%FD"kT5H 1N>iVFryR+33>%SHE½'wl-Œ]`%yJcӂ(Ιە &ľaվu:p mქ;D)8Xi8鑕s31 hDQӓ9kd0([9Ч*I@(d8u/Vo]-Q 9 *(_$0hlOv4CI08qpZ8G;`YJ2D(9:Div#m^T9`ֺB}0#˱1>J*$H)5 )**3}_ $w9*`d/,Ǟoe- g>y1S2 {fˣvcSA1S,Ӝѥ'^[ڂ#+N|pC1&Ǘ@0%qQy/ @hbeܺF<_j^8˄'Lث#4*i0:xLY|mMɅT,^ߚxXrf endstream endobj 112 0 obj << /Length 1821 /Filter /FlateDecode >> stream xڵXIoFWBRŐ=(8M{mHKJʡ츿o#E)t]A{7/ol~$jdjdQN>zg$ f_Vb1U-ϋ_a('sQQ0ӵJ*Hr}VucdQ)S]UԸ ,!)8O{FTqpB%ֿ=Jkiј礩1 씴xJqtNFME 0WbaQr}bw[q148My?혬qYUu[S7ޙq GsB?S,4OԽb ?E^7?vw7ߛV"q[[WcQ%U;4=}7e??l!}Lկ&B[h8~  D7Gi Y3=`y٤0w"VtDFձrkeԎOnd^ݴLyL0 =wqJ@Wh;KblxqM+nr#n/P9qa^, j^=usĸJ.ۭYQ1?M; =t8AjlyԞ18p9SgWӧZ#w=޺gP9/iGv˙Oۚ7> J1,LAJ,ѽP?2Lj'N1}~**2.2@,^9zFȇar N@$;9+׾ g&*T;^yg)<ਸ{ThƾsztLP [Z` ;b=`eX#ƹ^(HK>~w3 d'> stream xڝXݓ4_qQ-Y r0$,w9%RV+?yZ ESuqE"H =In:KȵSu?͢E[:R1$1)%d>,pl$T5{ 6 D__Foc;OovG%0e{q+׶kZcU wUc:I_=u,pH瑭#rd*()s`\NP `$ză^4G+xۺin/ʇ:ەY>#Qd F>YLZl `t+TA$Ja^hJCz58fle`Q)?FرҟMwjPy~MƔB'վ.0aV™"U9LH-߃RcasvxqaO(cI5DݺҵFڵ[۝b1nm]`pO /ESw݊6LQ7p XLlw_a(<ͰkɎ˚pvAL/o'j1#t#0lpP8I"@oՠŸ^ivY8gV|o q`,+yr ͘Г=yHw)8e³!8LL_8ԠzPRU$RŦlh:˰^ʒ1 :Lxݙ-$HzZs|ua χۜa7MFP` W}DZ ަ{AyNICOsV=Vvtwx&-+ξ Z3:6]pnQ| FKpAbWI ,ga&tGANMA& $Ȣ ~{0P&SJPVAz: Aa?9-e ~K X 6\+!*9㛭cEp~8) }`<&Y˒hca/yE֟+|7{4'-'0.=S1@Kc,M@xic@ CRG 4)Lcy2=ǥ'W7O  endstream endobj 123 0 obj << /Length 1351 /Filter /FlateDecode >> stream xڕWn6}W5WH]l->4.zIX,M%Kd_bj8<rui)$V !fv}V?s_=k4yU*= 4f?-C:ģ1"'] htUGuSm"U\ʝ*uE@T>Z^ DxPR沏(gcq E :SPN5q>qv_Wʪb`NYjI ^.q?GtRxҲ8Z*7FW(mV'(-7G @ 6O{:@MiUQȱ(0x*:16ĭZCV sd4/1qlTsbfCur B hwe7NDgcVwU( t3U,! Qg( Y9C[fI6,Vo* /BPE=ZBƚnj&BB'IwGѲAJr J0ۮX"Xb;mg 7 hw( wmJk[OTp'X]eqBa ̰Q{³0%a+K+-yÔ|dGbn5Y$,>`ٹ#. u$7Ï;KNt7ϟ1oaƝ[,׷W/{QD^{&$@&âV @ X^ eYt5ORd/I?SkMgH'i`IjA{wnd] fK1Y!l!&v N36q#tLXfH"@!VRߞ%.ߴ/OV'݉Ṋt)e^]E%WN"2uW1TݙnTC],V^ Jך8&lK >5y), bS;Q> stream xڕVmo6 _N% v^m7,':O)>Hߜ|bH71iF6ewX2 φp|)%Pf_.師bN U;UUEs]TR֛B_1T\PҠ\:x7JƲe' U ,:-F :paYkYz7K KR+H$⩏`r g䂡$0+sEe9a/ٿjœŞ2E{XWmj3!uHT^A6=wNe!=3HKƢXn"B$mF,2h069\Ro]֚*v)I% 0<G7q4F'K#]煪0yNwCxwNJ²Y{KDc̛2-3Շ@J&<FҴEԇ"X&vgz]kt)A^/ģ{K͸g1FQۆRvP-*}WCY=]AFZ{of "?هjB'Dɱ$m`!|}XApN>p>w#{ ̈́PZOmjl @&w>8/]F*Rk8 =! Zk7Gv%_m?T3۫@f^"w+_]PW z>vX&rk_-L8:IUQ-*twm9AּV-OeaIëϟ}Wn(v߇y  i2MUz j^]^Wm.?E5jӾkLvĿ;m '`Kڵv1 #}US-NY̓.+{Hou! ;ûQkzuX̑Wįt16:߸=%@\cu0k,cvCڎ_0%Lvn害2O`ν.94ۏ,m&j;j }HX |b7 50 'Vc endstream endobj 131 0 obj << /Length 1285 /Filter /FlateDecode >> stream xڵWr6}W葚 !\HLdYNJG6Dk^\_Rvĕ&}g.˓!#!J\gގ<:򰏰x6^`fn`= V#XR*ubvԫb+jPϓ3 \*xdSOpj[cYI%Ӳ ZhrQ+ ԂVuKzWC Fu[Dku^Du,M^}/VvBŝ=jѩɣ"Ol"Z9lB}9 *>[Bg0RYсECSVH3+<!xJ Yyٚx% {,_)&f JK}$|~>hm y6ppQdɇ!D{@,|57kt ~wlW_\/ِB!? ϗ-O' .i8?3p&*a^P}5~D"ň2."%k_sD𡱚W"|Vҗ`|6 //:_]%(a']EÁ}IFbr<|.A<:][k\lY6U4 ̧(|7$.q6K7߃(qrEZl5qM'0@H|')Ft-JoAL]a|,8&KQW铆w_BHQR%?mqV4YvJDbAFDǾ endstream endobj 134 0 obj << /Length 161 /Filter /FlateDecode >> stream x337U0P0U0S01CB.c I$r9yr\`W4K)YKE!P E? 00(?;h0a$>z A?$h LF N8\ù\=Y endstream endobj 138 0 obj << /Length 376 /Filter /FlateDecode >> stream xڭԽN0.}BrHD::ht.ƣ oMW=_! q5җw䯂~PQ./Q/huki7ZﯹՉ? ^? !Rx&/"R=!+"X:b^ʝ(GRbIiU]5A]JӮ*Yj+v#3eUCB7e yUOlִ#% SPMS3?hW5꠲(۰iW2!VHl`Vb aR!TC̣:(-_?R@6rU,0on~ &+A#̛'[TDj|w9Q}Q43KXej7-}?@9 endstream endobj 139 0 obj << /Length 441 /Filter /FlateDecode >> stream xڍԽN0pG"y#/Ij;E*EL @0;I$ld|wN|TPկu|vrwyr8?S**c>U|ݎs?,WݪRfn@f+$*dVwft'D\!cZ$)zQ"g 4:q``KP%ihj/"CS[7fh1Trs 8H6eaöh[K+5OS.+to2w̆a 0n}Y촿\'k(ĭKа@"f5n1s,qcv~^"y6jc#Y . N]H<קbàsB8KTPb*p;>ZEI؈! l:ݐ|R {LPs@y7$ endstream endobj 140 0 obj << /Length 307 /Filter /FlateDecode >> stream x}N0 ]e%=J! &t02`NGء:c;Ev诱ݶnjlشVOZa_]w]Εlwe_?<> stream xѽN `H$mD'utj7:249 ޜt'F;mN|]pIꮗ%fү/o_k#3A3Xh'PTd]_Nt> stream xu;N0RXr#$ UeHJ ԉDr@2#+Gkxх.K}T(fJ, VaI誒e\חGt)-uq'd&̠!=%cIGQ1Bt9Ԉ]b&lP6,/ֽi=c~ErW{dO GޑH^r.bHfMhW1eoYSXc1DŽ]1\q싁&5>m4,:P>q1_ ZCW(L k}1Q[+\ksos<: endstream endobj 143 0 obj << /Length 305 /Filter /FlateDecode >> stream xmN@Ǘ\A>m!Бg"VJ--4ZãݣdX<HX~~S=+PP-=EPT1n6͛;~(z'l#zR<y'Ď&58wS"E)@Q%Tkc --cx_`'GYBO z/8g7F[Qk aP@-@>))¬JPD ׊tSn=Z֩e> stream xuӱn0`#$/~ZB#%dBJS کCթءU;7(<1w%]g٘9|ov{/oqucۧ<2}6V.|~xk2Kf6<!?`^ B#jhE=.#$hP., z.ݭ:KX"! j*#Z:k*XVtX!둖}{b"xp΃ FLi]11Q] gl/H9ħc63-lĐ3'U&00g6rGُe P)a+f:2q1%] 3)ZG^xɻR>7 endstream endobj 145 0 obj << /Length 270 /Filter /FlateDecode >> stream xڍбN!P 1wۑg&ZY+h Ƨ 9oD x da{uym0zfߌDDӽyFË $zP,FpHaC3ę|Wla`BE6,:LP(uQQ6ID&p !#8Z+> stream xmN0e%{HR R$2 Ā #f(yw+EU#%swO\6@6ӭ;덶nۻ֝~]};xiyu ]8Tˆ8 DiXb 'ca4%o+.V*-\xk'2+9cNy*> stream xұN0`["G8%QHHd@1#C+G2flR8*1Ζ/sWc758úik \7`oh+:;|tX=ACj'_'h2Gq6sL%'hcX&†%rG( Nl8x9ffbWGGG6QE#[Dٗ5tw+t=-q;OO endstream endobj 148 0 obj << /Length 354 /Filter /FlateDecode >> stream x}1N0ЉRXr#$ VE"T ()@!9GQ|F2IvTIg[<՗fg.ӵ5m\u˻z4m[L몿3_o_FWԘYCD.Y((̃bEP`h=EމwY=I!*IT-BT-$Z8 8D@22x~_/kΛ=FQ(Nn(GgK瀥ހ endstream endobj 152 0 obj << /Length 317 /Filter /FlateDecode >> stream x}ӽN00,} L&k"NUx4G`=$_H蟒gLݯ.e?08C{'gߙ ÍL1>T&/X%״vFt#OL,wK =f$٠Xv7Xϊab`rC6Mx! !t,; fzs64ejvJA VmSUT`P9{TQ:( E)Wl}S%~A;QF,0aBԏ}X[Q`Ip(E7 endstream endobj 153 0 obj << /Length 356 /Filter /FlateDecode >> stream x}ұN@ PG"rHRN'" & H$>_ 3jl.W>V S0s,rnJE">u+ST~Fq^S|cKSܨzc>),wa d04qO-:.m%!zcŒ{aGpḧ́vdT5dC2C41"$Y,> stream xڍбN02Dŏ{HBC;F*E"L 0v(}%g媗N+eJ^{>AˁO2lC^>?߸>HNjNIB:H(uZJ3\vgy .+=3a 6cƜb)aj6׮e).UecDm\g!]frUʷ?7㆘p endstream endobj 155 0 obj << /Length 248 /Filter /FlateDecode >> stream xڭ1N0Љ\X&G\-*ҲH@Q%Ů@h9J2Ed3c' $J,M},tIg6^,9^i{wpעy 2ޏhvwWd/zvOɳ+P+g971jz\#: bzPc3ʾ[<ʩ Yez5BTrdVbb\sNUoo|BP#QJ\nBm endstream endobj 156 0 obj << /Length 293 /Filter /FlateDecode >> stream xmнN0> stream xeнJ@ )2/Ey),J--GG#Lv߲_C8PKә^=~`drzymVwn{Mݎ<*/gf8 iq: 4rtӴ/ɾ\RnQM >Jcd#渒rZъ| LZƨG1Qޟ -"eY{Х{h]2hV%[@URmK٢Doz|_eŧ endstream endobj 158 0 obj << /Length 313 /Filter /FlateDecode >> stream xeбN02XG_Ҁ0eTD$02`%Z$/1Ե>k/ffjstrjܜZik:3v=E{c|jq{ij]-CmfYAzhq {w@񃫮 P~c5 Pe(g䂎 rjAX3c 7?FƐ.*>fE@"P;CR7aAwB>!dĻcLRR!|lA N}; endstream endobj 159 0 obj << /Length 230 /Filter /FlateDecode >> stream xm;N0\DG\X E"T+*r 9&- 6Ix(>4cNj :=&~rU- c^_9iSRq@;p [ ;O6ߝ[+~ ?4tY·;M}s")z33@"F9LF?sxQ ~G endstream endobj 160 0 obj << /Length 250 /Filter /FlateDecode >> stream x]1JP ) h6`XW0XQr;36d>ns9ҟSǯ Fn$n0vgnw7qN6< J]a ՉHӐPg*W*Yejgh!S`ہ?^auDZR}\|d[jM0K T˙andWKvMouWȷ Җd endstream endobj 161 0 obj << /Length 222 /Filter /FlateDecode >> stream xڭαN02Xŏ{p-R)ԡ XIG!q Nɺo˂2r8*7W2ͨ*W -'m5e{lzA0Pi/IHQ 2sO0P1rgvyH4È R`FB vw'򑼟0OZ U endstream endobj 162 0 obj << /Length 290 /Filter /FlateDecode >> stream xmѱJ@YR#d^@sQsU +P]d@L 3?:\.y >y~1?Y7 <θ9I'juuBWxU{ɯ/oZ]q5<횉) dQ.QI$*E"X{H~xԎ80(>0B41_젅!Ih9`O4M1&-Fs_+ Iʡ'I-Qq  QV2t6R֓x҄ ʊK'F(`˜y7( endstream endobj 166 0 obj << /Length 101 /Filter /FlateDecode >> stream x3532Q0P02T06R06P03RH1*  2ɹ\N\ \@a.}O_T.}gC.}hCX.O Ƞ Hpzrr& endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 815 /Length 2088 /Filter /FlateDecode >> stream xZ[o}篘/ c8YEm=Ȓl kDɿ(k4$EQ-9q0ře P=&CI-L :<<3gR2y9Ѹ7nP)̈́)8wTF,hLS8? 홁3y B gR ˬQJ`Q$\1 {g`{e1-BʠC#;/Qy$R@I 0 F p?UU]`q pqYr4&420Ei΂ё-: x-j>n8 BM@Um#@(p@ 8Z+DPњ:(GGcEM="mH\Rg5eG%P !r lQ>Z :@@LVHA2]YD@&tq)S@:68Dy`N!7:q09^k99`xEvqkV\{Y̪ek٫/Ys_8YQSQfN͖YWW{n)n7G"moc5mb/bX|!6nH2*iޏB7j6i&5ѤJ]5^˩y}8<.co5OςwYTq`M34g:oJ8j2="uz[ ;=6Ex96IYethNOM\Ng;9קA-bRC3~w32Vij>˧⻖:x>6iii'Frmr_5eKu[/݄{?mxX~d֤eѹ!,Wo..śǧCU}(n\ͷ\5zN, +b^m'}&cenB0K!37l]6F\_!nЙ*yF?$]%MlMIz&3D>h!;E ~VBvB iEys^NRKCH36eSTgJ'0)E'EG 6oSM:ӫF[DAՃ*+>}ZԾw:KB!Ue3b@MRPvB%l7ۇ>dŇizr^=l/753f|?#dK7ǜgZnϡIRNp[Hb&C'p`d2nEP پ߄LЊE쾵͆5FjFDυ|/Пsܻ̈o)̮!_> o<* m(;^䫲/0SL'^N&oA1k> stream xڍ; @) 41D!(SZYZ * "9Z,-R8J"_3iKOf@€ \m3'Cg,::NtqyH [b<$(3UؙJ7#0K5eycf*ى•]XԪuMȩ%E=(?C}YUmE4KL$ ;e[%o?g2JO endstream endobj 174 0 obj << /Length 212 /Filter /FlateDecode >> stream x36׳4R0P0T52U06V07UH1*26 `rɹ\N\ Ɔ\ .}O_T.}gB4P[,@\@,r@@ J(,؎B\a;10 ? * lUF>uLP j %P1Ô!)(&\=YL endstream endobj 175 0 obj << /Length 96 /Filter /FlateDecode >> stream x323P0Pb#CCB. \.'O.p KLz*r;8+r(D*ry(17 6 \\\ endstream endobj 176 0 obj << /Length 146 /Filter /FlateDecode >> stream x337U0P0T52U05SR LM@q\r.'~ HKW4K)YKE!P E xP(%, *P :&!sHC(67j=P F!'~\=Q0 endstream endobj 177 0 obj << /Length 122 /Filter /FlateDecode >> stream x323P0Pb#ScCB.CS I$r9yr+r{E=}JJS ]  b<]*0c0|` 17 6 \\\a&t endstream endobj 178 0 obj << /Length 236 /Filter /FlateDecode >> stream xڕαj0x^3tOPI$uLJc-"?E1C{ROP>Ng啛c\{;~NRNJ˚얧%[&[cBvybOv#kF7;E vq, tha:71@ej^v)ga$Тb%G堜W;$ h[mv\\(Bq0RFƟtSӆ'9H endstream endobj 179 0 obj << /Length 266 /Filter /FlateDecode >> stream xeJ0)- ^=,l,tDa]=yQPћ>Zeac&!$t<g\Vj|W6M7/nzMՍZŪX﮸7 = pcqq`K0KPᤏ!ttt1{6ǫGCBn , $) Ml)\?L0G/< ̟^#2:@O=x=' endstream endobj 180 0 obj << /Length 320 /Filter /FlateDecode >> stream xڭJ@',Z;/I,L!he!Vj)(\ehyaQ2\V^QQ`zVz2LWtjE jX۪aѫ>nd:aP@4xPѻK:6ov'N ^Ɓ@Nznf'$@;O6~ D4_so>K55=a|> stream xڍҽN0`G,G=NаE*E"L @0G#d`ܝ*֗s|wmsѬ†F{+| K~#[ ï7kn-cTKͪ#ߚI t!B!ѐ0SiA@ ?Qf|:@sQ!-DJ9I'2#vi_*QdX3Γ*0 > stream xڽ?@&G`'a%U0Vb[ǣ(9Badba*fͿW|3G:T3py)6gj[)r+ʺ^sb]}Iz!L= 1#5uD&CӾa2  )rjl7Lxٮ0P%BK8%x4OOpf);_BDypɣ endstream endobj 183 0 obj << /Length 277 /Filter /FlateDecode >> stream xڍJ0) l{Xm[A(+؃{ =o?Oأ8423YsRt|JUNeEO9aYpT_=kc3f%嘭.'u͊1RcZF'o0-n{%&c[0  $_ҀFĘHv10Vp hĤmcQJع>9R 䥐+ F "ƅxL{X[UW n endstream endobj 184 0 obj << /Length 359 /Filter /FlateDecode >> stream xuAK0W a&v ɃQoVTvJ{iBG?_S% )@ ă|7[iu|cl{! M{TuD{y>CXWkI֍t 1~7~cx\S)ƴo2M  endstream endobj 185 0 obj << /Length 240 /Filter /FlateDecode >> stream xmοJ0/d/ T W::(nVر4f/q+nxbMM4]&wnɞsdM=LJ[Cn 9it=PLV2~JLWdYQgUz1h|QM0C^![|EUBV:GV~Ƽf8)I͡#訥3o> endstream endobj 186 0 obj << /Length 210 /Filter /FlateDecode >> stream x}1j0Ox!9  4zSR( mIGQt 'g {-t7Vi}#jy>yU+Y}-cqVwOq{-ŭUڵvМhoj4lfGb'z^>0pq48^ bL3c;8d/llZy?bLR endstream endobj 187 0 obj << /Length 257 /Filter /FlateDecode >> stream xmнJ@ [ hHN,L!he!Vz!n:_+lg`bu&4`f秮N%X3V+3;\7RØ7W|}}N%+fC &iA7USy_UzFܧO> stream xuϱj0h0ܢ7R5 Ph%H3fhiW[G#x`pNn3wp]n d?R)_x%ζ$2Od-gd8S0G DSăvH\QԈYfJ< ze@4'+^L+ , Yewo9>qPN"Gv}SH0%sKotV endstream endobj 189 0 obj << /Length 201 /Filter /FlateDecode >> stream x}б 0#Z(IG:v(A !|ʮ4,kLEH ֦(beI3V%@0X@VuvZV4jeյ5yaF3ӽ)c]9[TڧvO`c~n*< e3 endstream endobj 190 0 obj << /Length 288 /Filter /FlateDecode >> stream x}J@gLsy%ܞE<Vbv/G )Sgvʅ,Ӝ*:JJ|A_:r?|ŅX4J,t[5~ t叾O7(tdl"o!v$:E 1#5ۨa6N33 Ko7 ftS( AȪAf- 0#7M+C/eRK( > stream x}=@'S^#N$P6Xºt єpyrKgQ+?\.`ebgֺ˞R8[5 +A Qȅ+ZYβa&ͭ`H$sihkmyf UuSLqOV endstream endobj 192 0 obj << /Length 162 /Filter /FlateDecode >> stream x323P0P0b# 3sCB.# I$r9yr+p{E=}JJS ]  b<]l10!fba`` 0`E ?؁ (H { j@A@Ā A@7]r bJ? endstream endobj 193 0 obj << /Length 256 /Filter /FlateDecode >> stream xڅ?J@YR^a. ̜lYuSZYZ h9Z,=0GH9EFDf}msp2Ksȧfubz&z[om]KH#wnRS|*% ,8K ?>4 AU= –O{©Ew??/ pû)\hs9G*322$-&DL| qq%$輥k$N endstream endobj 194 0 obj << /Length 157 /Filter /FlateDecode >> stream x323P0P0b#K3KCB.#S I$r9yr+r{E=}JJS ]  b<]#00&01# L0<^D:lf'W W endstream endobj 195 0 obj << /Length 256 /Filter /FlateDecode >> stream xڍJ0FE. O`Zgfea.gB\KAE]|6/x2Ồh6q I_lJ\fIzOzqy%%_\Pd. . FzVrg P_&oPHx\HҾ7䁰$ZJ޿[BmD$ lJSUAg,IA Tr"!":iE?. endstream endobj 196 0 obj << /Length 200 /Filter /FlateDecode >> stream xmϱ @  Y VOtR vtr'uTtG#t1.:Id`ѐB:DxA3:tO8MPoȌP/:Yz?fiQ$&P+cp؎\<\Re XV~+EO֩@6*Im"ʒG-H+KprĕL9cN<5#r endstream endobj 197 0 obj << /Length 218 /Filter /FlateDecode >> stream xu=@PL BD1D+ cr4,)O웙͛pDI_D|>r@ijVlVlf٤s9.{6D|6}6&Bԩ'3rr"DJ"J4jI--eüSC_9Et8z0S[Ҫ#v w{ a!V5mM7 GUiK~|[/ endstream endobj 198 0 obj << /Length 261 /Filter /FlateDecode >> stream x}бN0?P?X$ELJȀb &ނ`ċdcC3D9E ĎDwSdf<2EaZ'yd,65-KJ/%S PZLJ;JR2WdT jW~}AKj@5\Rzu?  2"ɼ ]6mظW8 [+| h]DJ.7M5&3+`tR} endstream endobj 199 0 obj << /Length 183 /Filter /FlateDecode >> stream x36׳4R0P0b#CB.c I$r9yr+[p{E=}JJS ]  b<]??`5@0nϙ; ?Tp`Q&pA?D0$'\\\M endstream endobj 200 0 obj << /Length 219 /Filter /FlateDecode >> stream xmAEL Tҩh0('v H7E@ĶG&{Y1M89MBPa[9I%&],xw!=pBz˄SF6Fi;t8!rppy`#;Ěj5{? z eЩO7H0`8Rbsr(M$Y2 endstream endobj 201 0 obj << /Length 189 /Filter /FlateDecode >> stream xeA P!ay@=LW"UhU-ZLLs;R(5=3t "$yF%,0qX^j5mv1CV gk`8ln9 8Uv}PR.s 8T endstream endobj 202 0 obj << /Length 204 /Filter /FlateDecode >> stream xm1j0g<D,#:\LBcvnҫ& уh7?_GAQUtVxA]rXbszƠܓ.Qn9Fi^ eL eKEMK0ԶAxgM96a;L,,!WIdQ>ɣ.Lj~jv7;yge߾O=)(qcpq endstream endobj 203 0 obj << /Length 256 /Filter /FlateDecode >> stream xU1K0W(4֞[<99 5"8cҘ״  <I g<3|¢pܟ=DqEEm(/jsJ5]g$o\Se65nvb q\Z0"z!k ;H:H,$ =,<#d[CPT`<ǛVVHw1"3D /ce3.@0 0xV%Nu= endstream endobj 204 0 obj << /Length 247 /Filter /FlateDecode >> stream xEJ1 ^='0l# {ɃBQPѫG#eǙ !|LIb{8oyߵ㸑PO1a] {}İ-د=(Wd)%3 o&i&,PGJn*?(ɖʤ%r-J -ʬV浖>s'c³ f'cxt(-&- ?x>a endstream endobj 205 0 obj << /Length 252 /Filter /FlateDecode >> stream x]J@ \=:/A ɃAQ<>J! -Y3nd3ceAڿsM^r|GcZ,*Td _GU+~jMq[p?b@A-3O"d‰hHЀM401NF$Bƴ m/-LL;0;&ӏ؇D20`Cx#DH2>?o6pr/{g%S\/[ endstream endobj 206 0 obj << /Length 247 /Filter /FlateDecode >> stream xڅѱN02D{pҦ!JȀS ت4G#dP A}ROϖK-'sYΥ.(Rա̫F+Y7zus!s"u <&E-QM(gQ닭߰!D]M΂.E$f]G~0X>~iMa` /m} yS+2\x|-bV: endstream endobj 207 0 obj << /Length 172 /Filter /FlateDecode >> stream xe1 @ i͒@VbvB/Q<`E:Cx0RDhJS:h> stream xmJ@/8OfwpA.ZV2(h>#tqiϑ{g> stream xڅнJP1zͦ +BBT}> stream x3634R0Pb#CSCB. m@ $ɥs{IO_T.}gC.}hCX.O!'W ( endstream endobj 214 0 obj << /Length 208 /Filter /FlateDecode >> stream xڍҽ 0[[' I'|д@ໄ\.]=0փa:=)%!i> 2xށc@&]CuŘPq"p3q%ѫN(WUyx98 V6q1 D=$D/$|d endstream endobj 215 0 obj << /Length 305 /Filter /FlateDecode >> stream xmJPO"pyfaa]Vbv ɣQ)#\83w.x9zuhI5t^Sҽj-%]2on۸+n$>?^];z,i<H90w{1c]< h=Q=6 zh,݌$d1b׆ا#XA}ăiM֩S-dpAí$ r0cGݑ"y*\'5 К?)ԜhVVQnܽ endstream endobj 216 0 obj << /Length 229 /Filter /FlateDecode >> stream xő; @72M4(SZYZZ( h"8P+q3z ;MVYmcsd4ٟ9ą!8~̸+fܒ^ ke"e, tGd?˄b$U5Ҋfl$*lMgn CJhVʷ3Fip endstream endobj 217 0 obj << /Length 214 /Filter /FlateDecode >> stream xڭ1 @E'l&G\@7E1#BBBQRgEv>'S &3!3c4#NqRdn uS:]L> stream xu=n@gbi|eYGH@TDjh> X VyyD%JC80/*v[ dvջ\/_Gvxv+١hJʞ2Ն(W FOFFl@&%`}b zdeL,>2~dgygL[41Ƕ hKyJ BasQ D endstream endobj 219 0 obj << /Length 281 /Filter /FlateDecode >> stream xڕ=N0’!sHE"T ()@`)<؋$'{Iן5-5tA-ukZw75oZOv3RpC/^Rk-=ԣ/qZqg XxqdWjIpnIUi+W%KK"5-CiK #;A58E, k΢SvYlK S^`%*#G4dPɲ1:^.eiiC%>+^ ~ endstream endobj 220 0 obj << /Length 131 /Filter /FlateDecode >> stream x3634R0P0b#KsCB.#1s<L=\ %E\N \. ц \. 5 7?D # P?P1?H{pzrrD endstream endobj 221 0 obj << /Length 162 /Filter /FlateDecode >> stream x3332Q0Pa3 ebUej 䃹 \.'O.pSS.}(BIQi*S!BA,C}?7T10@ 6P?|'W [ endstream endobj 222 0 obj << /Length 161 /Filter /FlateDecode >> stream x3137U0P0bcSCB.cK I$r9yr+[r{E=}JJS ]  b<]oH?1"~`? L7?bl'W n endstream endobj 223 0 obj << /Length 223 /Filter /FlateDecode >> stream xE1N@ E?b%790;"E"T (AKq%GH"4o4v]_+^sk{w6[{T^o(=fKdJ~|Q_stgj8UR:EZ ʷcVG@VjU'3rع: Fg u1vM#bj2;4@* endstream endobj 224 0 obj << /Length 173 /Filter /FlateDecode >> stream x3135S0P0R5T0P03VH1*26 (@ds<M=\ %E\N \. ц \. Xv8'=3,X w'C=`?`A<7@ ? r  ,t endstream endobj 225 0 obj << /Length 166 /Filter /FlateDecode >> stream x+@i*6#06&$  (D@@/G[58"e9P!Zj Z)%eʡ^Rv3:N[|LuM+C]MD ! a9PIcУd/-x>o;w*!aVB78\ d endstream endobj 226 0 obj << /Length 234 /Filter /FlateDecode >> stream x}N0(C['4R[$2 ĀlUGK$/ 0ղOeu%\s][E;jjXƇZw䟸-?_o-p НiB1E mQ,GE!A0)29÷N3DhIA i17VpH4Y0Ml3ÐEgP1jDEKێ(k endstream endobj 227 0 obj << /Length 126 /Filter /FlateDecode >> stream x3530T0Pb 3SCB.c I$r9yr+[p{E=}JJS ]ry(000```` H0@,0%#zl'W  endstream endobj 228 0 obj << /Length 266 /Filter /FlateDecode >> stream xmбN0|G/qCyfίF0t^ߟlߣO;O$9 1!rHdڈ4f&pBl9{Ð68,ִ/vKqbҷ+tي%+NC7"EB8сVP #RI*h~j:Rᕤ[Il`Φʗ'& endstream endobj 229 0 obj << /Length 258 /Filter /FlateDecode >> stream xڅN` {@ $g%^Ltr0NzGh< @= icu]RHRb)U?XHUw>5?1r~geΛ{p~z< 7g!ґRUcR;Q2QP:X Ja2m0{tƔyl[J8 XϠ-AvHxiOzMYSgčV6oGbǝ2ClčLU[ϟ]~(6?d endstream endobj 230 0 obj << /Length 216 /Filter /FlateDecode >> stream xڭбjP r7DpI *NJ'utP-4|-7_խmzޏs/{Ck#ґS]ŲdbkFR̋&1 {*|ZL4XL_m̛3ul󇚴] I@BI /s'sABNjAOB/#&-'5o#Rԑ endstream endobj 231 0 obj << /Length 253 /Filter /FlateDecode >> stream xڥ1N0 `?uGx^:bF4G  Gءj]&`>EIc;Gy:r>fG}=~@{M;vyJn-2ЀL]_~EI-jV8Yz&? }Bs훃$ShjMM|wSSYN-Nm8NZT2f5JD 2Mr[μ̐51= x_d endstream endobj 235 0 obj << /Length 216 /Filter /FlateDecode >> stream x}=@FPL t.˂V$$RheaB5ͣ():B ٗu?P@ވ tx(i@IRGN2TBT ʖt܎&)iT3j v:Lμ\{%@H G*rx>9k,V Rsꖶv7ja9W ~o7o WH%gWHe8p7T endstream endobj 236 0 obj << /Length 215 /Filter /FlateDecode >> stream xڍP KnG/E'Ltr0N GzI``poRH.Mtc\M|E@c˨-=+nI=rOT 0Ș)T `WV B‚>` }$P{efw]UaldQj7e&Tdu;[UnY:=~Y endstream endobj 237 0 obj << /Length 197 /Filter /FlateDecode >> stream xm 0ES o'}I$ IOS ;EhDCý$AZQ '3mvXQ,qQ(=H4iIsVGQ;2iQ0rwN8v5/ 1EP ȅP!y5bG46jSJ endstream endobj 238 0 obj << /Length 197 /Filter /FlateDecode >> stream xm 0[:n#4NZ NT]:v("6~Gc N/9JQ8AmQ`ˮ Lve9r`98&{P9zgϼ&j˗aYƍaDRH֎D@;a%wGPݳ$LDS3+1L)3i36zDX([O endstream endobj 239 0 obj << /Length 171 /Filter /FlateDecode >> stream xڭ1 @49t n!he!Vjih!kW/#SL N 4!6a؀Zt;(vfA(:"}BVsJBp܇#Nxr #u_[X s endstream endobj 240 0 obj << /Length 171 /Filter /FlateDecode >> stream xڵ1@5$p,HEVJ--4Z8 G ЙLi q8Ew>$rAnA0JAo nx]A '*U>QPjĴc#1Ș@(rt5tQ=P:R/t endstream endobj 241 0 obj << /Length 163 /Filter /FlateDecode >> stream x3532Q0P04WеP01Q0TH1*22(Cs≮=\ %E\N \. ц \.  ? C@l ? ?```Ga#2"[n> stream x3532Q0P02& fF )\\@ IrW0 s{*r;8+r(DUry(070`PF1FAPĀ? G?P<Dr \\\YUB endstream endobj 243 0 obj << /Length 154 /Filter /FlateDecode >> stream x3532Q0PBS#J1*21(%s<L=\ %E\N \. ц \. dKCHyـ D?LBAd^d? Փ+ Nl endstream endobj 244 0 obj << /Length 148 /Filter /FlateDecode >> stream x3532Q0P04S54Q06Q04TH1*24 (s< ͹=\ %E\N \. ц \.  3P170C=?? ??0HI.WO@.sk. endstream endobj 245 0 obj << /Length 99 /Filter /FlateDecode >> stream x3532Q0P02 )\\  Ir p{IO_T.}g E!2E@!ncr {XM endstream endobj 246 0 obj << /Length 154 /Filter /FlateDecode >> stream x3532Q0P0UеP05S0TH1*25PAssLr.'~PKW4K)YKE!P E0Q({zd&!dh2#V? jP, 'W &QL endstream endobj 247 0 obj << /Length 124 /Filter /FlateDecode >> stream x3532Q0P02 & )\\f@ IrW04 s{*r;8+r(DUry(0T0c 1a@4g?P\=]) endstream endobj 248 0 obj << /Length 127 /Filter /FlateDecode >> stream x3532Q0PP0T05V01RH1*2 (Cds<LL=\ %E\N \. ц \. <|&?؃IybP2?.d"'W ?Oz endstream endobj 249 0 obj << /Length 108 /Filter /FlateDecode >> stream x3532Q0P04R0T01W02UH1*2(Aes<M≠=}JJS ]  b<]@8r SK+ endstream endobj 250 0 obj << /Length 149 /Filter /FlateDecode >> stream x3532Q0P0P06R0T03RH1*26PAcTr.'~8PKLz*r;8+r(D*ry(030$`f lvnȸ:c? ~&.WO@.AW endstream endobj 251 0 obj << /Length 313 /Filter /FlateDecode >> stream xmJ1Yr#d^@k[ۂP+<'Aћt }_%,/gH+aC&?88g?fx[3'~rso/q44o:ǧ;ϗ'X|WM@|/Ēemث:l zj_ͥl*R,e`w[uRie.7۽ endstream endobj 252 0 obj << /Length 294 /Filter /FlateDecode >> stream xu1N0ЉRDr#$Kv%*K" * D h>;#Å;AP<)3f҃>'NzOxSzwn_~&_a,Z}<~sG14ZPr.25 QWQHyRdX>Y'?1bMƵЦvc]FT0x7:cRvج_K }n㿪UY]> stream xeϱ 0-}V[P+AAAQZLDߠnxilKB .ݠ|BRVS3 B#Jckd>>z HdJF򥵔l)R&uL/R0:Yڷ)FUcKYjoZ!H3Ycd_EUZU(QK H䎸fBHKJ)L endstream endobj 254 0 obj << /Length 248 /Filter /FlateDecode >> stream x};n@A.``ZKHqDQ2|=–.y dYgjXRI 'ZUuIP~pbNu+bnt<c=7QQ`c &[@7adS4=\/0rΑzӀ4)7.(yp)&7l%!0:RFMek9txag \_Z|_%׫9 endstream endobj 255 0 obj << /Length 258 /Filter /FlateDecode >> stream xڍ1NPPL |sVv#YD ,nFkf#PR7> stream xڅѽn@ `  $HJd@j9h< xC>Ҵ}XoV< endstream endobj 257 0 obj << /Length 213 /Filter /FlateDecode >> stream x}ѽ 0+ 'Z]?`A'qRGEI}4Ci\(Z_.\HPHmθG݈616uhJ3YpbW1Ht< fCzDˈ#_sd\ ¯ECkə½ E r^aȜh"VHrsdj4s(A4CrZ еPߦ endstream endobj 258 0 obj << /Length 198 /Filter /FlateDecode >> stream xڅϽ 0[Fj3:9::(:G#tPB \?at:[`f.)^)> stream xu1JP )L#d.Id +BBB:/k!? ˂bK3Uq*%c9(*ePe}>Jʊ39k垳ʼnm庐EyD_Qկ@wXU9}SOH0 zl??tvq#ǽ.̢O'Τdo{"k}k ꧝L42n^}&Ratq:b6o+H-:OE endstream endobj 260 0 obj << /Length 165 /Filter /FlateDecode >> stream x3532Q0PbSc3CCB.c I$r9yr+s{E=}JJS|hCX.O`Y Hv!#!|=lGCH|0!#( rzrrSq endstream endobj 261 0 obj << /Length 178 /Filter /FlateDecode >> stream x}1 @ a9$m Fp A+ RK EBbV9oS=#jKrZ!xw endstream endobj 262 0 obj << /Length 258 /Filter /FlateDecode >> stream xڅ1N0e>i*B7," &H`CIBPdܠ^&C5Ssv|tA3.3TN1=ˋEJ]'jvJQPPґv%[:7t5|{odԖ![h􃔕컑d96&ڼX 9y ԃy9e(} ؉iPfnn\;<t endstream endobj 263 0 obj << /Length 238 /Filter /FlateDecode >> stream xuбJ@R f>! L2` A+ R-V$6ÌÎw6#JVB 9«N且7\g_FH9o.ՙ^m)7+̓#վâbB%Z32|%J#YYl tͦ dѠP,&Z#vVtn'0Ytx?D*!kާ endstream endobj 264 0 obj << /Length 219 /Filter /FlateDecode >> stream xڅϱj@_,i| ^δ1KuE.eGQ|K qea"89G#?|鋊uR/nT5^(}56':?k~9RS3@)"=Fgh3b)BC#I6<C<`E,b ^99zGE.Xv > stream xڅѻNP!$ (mI5D+ cZZFs< @IA8-1 y{I t樻gcڝ+nk1-_]zG'vUJ)-FZ";ިf0r~0_e_RLWfE^]NrB9Be"1OdBL ?+/I[Z(*QO+>OɃOc]$3wQ7D ֖ endstream endobj 266 0 obj << /Length 270 /Filter /FlateDecode >> stream x]1N07sH$,-D $(PR@)SXfĮpVŦZ:mhڼf'aEu;S>P3ĦnՔ+Myǚ'8'x`^bYȓg bA@ٟٜ4ʫA9msLzEBNI:ڠnpԯR.-QD> stream x}1 @ ir ܬ$An!he!Vji(XQ]g} c}9WjXN}h endstream endobj 268 0 obj << /Length 242 /Filter /FlateDecode >> stream xu1n@б\XG`.$*KT*>#WI'gfgab y,diRçk6;)Wl^z>YeF*UjtHU[!%Hz#uPuiZ=8ꁎ'Ξ1N:p u!TqUL GxS6:nPkGrkwO3z\" endstream endobj 269 0 obj << /Length 262 /Filter /FlateDecode >> stream xUбN0 PW*y'$_@@ot`b@L ĎOɮcnKkK)p?pbŪWvwW>{> stream xڅαJ@i2O`! 'B,B:_,`aaǙ]Bca6 [ +-=Z|2tNϸm1Vb;z{}|&w`8b!aܧ> stream xڭ1@@1&p1D+ ch#PZpf'F$.Dzp:S@F!$Oet8EO&@WO7?/%c%GQ$|@m FܿD^)KҶ0a$"TQWy&_Kۙ R endstream endobj 272 0 obj << /Length 233 /Filter /FlateDecode >> stream xڅ1N@ PG)"#ɬ&PFZHPQ ]"qt\c0e~졁?vlON7Q:9 Fb/_8ZI<Nbd1Z^ߟoo.$}ǝ!Amuf> stream x}бJ@9R#d^@ kL!he!V`hyWݵ?qtr; YtblqʧդSuLUG2,RTL:*]-:o~q4bi4,GvHqD CJT![Q|-< endstream endobj 274 0 obj << /Length 222 /Filter /FlateDecode >> stream xmN@D6 )U$\ AE2EHtS .]XY@͓vvfk5zuK6T9^~?=dJxF u }J]iǨ{l3P͔,N.]r |71Ղ]g?.H??ҙUz6 Er_n^] endstream endobj 275 0 obj << /Length 259 /Filter /FlateDecode >> stream xmбN@%L#케rKZL0Xy| _7x-?kr1J_1L/7 M[OoT7(\<Үn~zrwwŞ=?z> stream xeN0 u%p~Hr'*EL &C0G#t)lSۿoUZ"Hgg5{|~x+}+/AwDDBdT9ՙ6U&L6ZbHAW FY1_?(dhB̐2 Cfr\3[5:UFq "⻎ Fx endstream endobj 277 0 obj << /Length 201 /Filter /FlateDecode >> stream x}н 0H->*B08Q;  Q 3t8O\, f36[|>^WЋS+> stream xu?N0 ]uG/mQlH017#V(=BKv*$OkO:j#;_96tzq7`}Ga}%qkz{}zwsA-{o9'`fGy )OZX#Ba `o ``C*BbQ>*g1O`ӆa$ "ҧ[bšriΖ,JufR꜊* h2k f{\'iגr>1f2ǢW,2f7_LLn1 endstream endobj 279 0 obj << /Length 207 /Filter /FlateDecode >> stream x}= @i> stream xڕϱ 0sn'0M[[V08G#ttU;QRDtLYL{'L2#_bw ZS)*z@U,Qmє7xw4_dXk$?[@n@ G\C̕u!U837>_0 endstream endobj 281 0 obj << /Length 216 /Filter /FlateDecode >> stream xڝб0 $ &:9'ut\G -&T pwÈa #!GauLv{im3KIkao:L: iyҖg_> stream xڅбN0PW"OUj H01 &jWO ?!qw6D|>w-݊nν{ ;yh( m G뭻#o/-{j/JhāhG N?IRtRvRLM?$ͷ6SN$(p>!/)ԼKYXLͅdN;F$t>E2'"Ϙ4)p-|ⷊ endstream endobj 283 0 obj << /Length 162 /Filter /FlateDecode >> stream x3532Q0P0b33CCB.c I$r9yr+[p{E=}JJS|hCX.O {LA08v0& =hAԃ d}F%\=mh endstream endobj 284 0 obj << /Length 216 /Filter /FlateDecode >> stream x}1j0`xKt86pR@3e(Z5c( zҳ!C+eە"yn)pǣ3'[<{I_'Nʗvk_7('B<P; !,G GIJHIPjhŠ]Ɛ\fa:Và'f$ ?U?~ endstream endobj 285 0 obj << /Length 198 /Filter /FlateDecode >> stream xm1j@*x%¥V *v¸JRHkh>AB^fV)~LUx)d*{y-V; ^yײ{e'|^{)5r*8se%5(Et){o `{VfdNjW|n.Գ墺p%Euщ,7>F`1wCG,0w endstream endobj 286 0 obj << /Length 225 /Filter /FlateDecode >> stream xm=N048fH"-D $(PRv.]X#!|ŌgyoOyÞ,n,Ş f2w\2>n.ؒ9#zЈ-1p҅FcFR+M*ȝaZ~)\?(ߴa<-֊w%<2%RTN:ȱP5772L n endstream endobj 287 0 obj << /Length 266 /Filter /FlateDecode >> stream x}бN0 P:TO[+D$G1!j#8vbiSB'쌊S|b- m6*.$t۫3J6}?%wY X7:([x0/Xw?.1}Ď~4;V!0X^G`Yi|3KK[륰ӃrIsz ãFav+_ endstream endobj 288 0 obj << /Length 267 /Filter /FlateDecode >> stream x}нJA ,[ Gy[ZYZZ(ZtҼ^F8" $:j[Z6utv ִZq=`uMsc5\VSjMC-[(m1D9˜h8K,LbRVz;g?Y[Z#J}9Ovʼn N n[pe%WE?ul~و6mCl8d`PWghF endstream endobj 289 0 obj << /Length 203 /Filter /FlateDecode >> stream xڅα @ B~\ N܂'+~B1`A%!DyH>-Pd|Mt8E'ZKUyAoJ4!6B0s>a~1[GBTG@ \hYc&W=倢'ci4XQ\K5g)YMbW) k: endstream endobj 290 0 obj << /Length 229 /Filter /FlateDecode >> stream x]1JAE`]О^5XWpA#H ޣQNPLYb" O~IgD^c^up;a|<`o}~|b_S¸} |N$@'" CCwDǦX]X<M"J= ЋVM67xQmKҠk:Άj*9hwcf{ endstream endobj 291 0 obj << /Length 199 /Filter /FlateDecode >> stream xu1@PL &T$&ZY+h ތpJ 8FHO!XccQ>Fp4 1|*]QpCi 훑𷂈Z~]K9@ae%d p-5J҃J!Mq^.q@GaOkn endstream endobj 292 0 obj << /Length 191 /Filter /FlateDecode >> stream xm1 @ )ir4Y݀] F0Xz#XZ,;fASOFcM9MiIOZI)Q  iBj̚%]/#fjFִ65؂q h," g |U^e>*414,e{)3c'Θ9{6a8opo{ endstream endobj 293 0 obj << /Length 200 /Filter /FlateDecode >> stream xeͱ 0+[|VP Nj}EбCiˡBKd0L)1ok)>XJ쎘h֔Z4s)t9_h4S$oR^2Ӱh!l P؞ZɅ'z3Ē@mP,g({b_%C>G ׇid endstream endobj 294 0 obj << /Length 214 /Filter /FlateDecode >> stream xeέP <]ʏ#6يM@! X(jSqe`QtM(1_r1qZ.ۦ[t{:&arFnnQz(9(4w^7'NӪVsmՆڐi{-J@U* ֵR_ZX\ZhF`FS|g endstream endobj 295 0 obj << /Length 242 /Filter /FlateDecode >> stream xUϱN0 PW"y'$_@Znt`b@LXnRB>cꌝ "5q8g筭lߦmcj|vJݝm83ͅ}m"(>(g@@ĉiB$}J|D| >&A2 ʕ/*O}b1rt1'IK?tQ fTr%?B-z."&~he )x-;w! endstream endobj 296 0 obj << /Length 261 /Filter /FlateDecode >> stream xUϱN0:D%{H]#" & `ő:t&2fjg8EZ]/WTeEZӪ7;OKZï4X<9=}ޱ<ܐbKϊlr;}mGvð&d$0 nΓ :ye~3Sc?@hD ɑv!F]Ko țo|-xc`3O-'yZ?2lm{ endstream endobj 297 0 obj << /Length 246 /Filter /FlateDecode >> stream x}нJ@9R,Ly; 'BBGr#L?bX~0;yhK: mbCyݍn{wEݎ=5O`uy,'qQG9Ɋ6WZIlqmԉ]FFdFNKecϡpZ*K*f#Ȓr{=ۥk)i6osҨWx%H K%l)^x쀪 endstream endobj 298 0 obj << /Length 181 /Filter /FlateDecode >> stream xeϱ 0  zO`j3:9::(:G |>BGx:h_;dF(hi8tvG 5(͂.eBYӆ'hj@ #ZJf[Y`I];{n!Aȱ>$.u'Jz~gWFfx endstream endobj 299 0 obj << /Length 244 /Filter /FlateDecode >> stream xmN0C[O@fTD$Sad*hy>B VD Kt?ۛvʷ27w]uK-_|MKR=󽯩W> stream xuN0 n%o@Kio$qHt@1#(}w"çwlvִHmM^"cӊ(>5-1ta{wEÎ# yf.*0P Gp ~$OfHm F9՞xdP4Ƌ$5vSr`ءܿ4ȖVwluy@lCĭUB]_l e.{ endstream endobj 301 0 obj << /Length 243 /Filter /FlateDecode >> stream xڅ1N@ E=JMLfIH" * D r!e4P,L4vN6r&IS&yJeb!»㝔+96qws!^rUi $Cl_T|DQpA8Bi ĔM6"  NPBLShXROi6[ڠė 78yM endstream endobj 302 0 obj << /Length 272 /Filter /FlateDecode >> stream x}=N0'Jai!sH,eHJ re(MXH'k~_ߞo:iBZ鷲so6~g^y?p}/]5\7RZJA<9g dRHD>#GDA"etGG dQP> stream xڅ=N0RDrN@]YZHPms3|!e + ;y3+hyּe>> stream x3635Q0P04F f )\\@$2ɹ\N\@.}0PRTʥ`ȥm`@#\\\hE*a endstream endobj 308 0 obj << /Length 327 /Filter /FlateDecode >> stream xڕӿj0q%C `*B]WC:Nm-vG#dt&?RiD ~i]_\V;WzG*I꒚M dߑ%)YRtZ@m^HwYmVaܶbN4RbXMΔ\uNnnb| mbީLE捴]$ⱱ7!3ilz.2Ob'z>уt!򸴏97 טC.k&) 7Lʬ k ͹!!KkK!#ܥm<Fk(4J@?mG/c endstream endobj 309 0 obj << /Length 258 /Filter /FlateDecode >> stream x1n0` x'b R"5SS۱Cd(9BFcWGRZ}l_Y1S#=e}EeEzYNzm6|<>I/O^捪ko?n>CK(I֪ov^سs`'rVr\w I˼ދ/np=g?;ؗ= 13rً E7Z1ӌk kmgj.=WMs endstream endobj 310 0 obj << /Length 228 /Filter /FlateDecode >> stream xڕ= t y G('v3#NI4:(IӾH~iՍE[LK;nc<`gq\$A95(8;H(beYc6,wh*.9)"1RH HP+whyś(/*P#qRDҥLSc_擽P[+^& I)Jt*Jl)sŪJSN2\U\ endstream endobj 311 0 obj << /Length 105 /Filter /FlateDecode >> stream x331Q0P0bS #CB.C I$r9yr+r{E=}JJS. @-\. A(9TH:հ endstream endobj 312 0 obj << /Length 157 /Filter /FlateDecode >> stream x330T0P0bs #CB.3K I$r9yr+Yr{E=}JJS ]ry( 0!(c2~f0H`0fc0P<ƨ1C0;cC r 6n6 endstream endobj 313 0 obj << /Length 209 /Filter /FlateDecode >> stream xڳԳ0U0P0b c #CB.s I$r9yr+[p{E=}JJS ]  b<]8J,fn0ªc5CX@Y bGb}e1ce H,ln~ #BBP`pb~Y 0SFY䱠I'W T4# endstream endobj 314 0 obj << /Length 270 /Filter /FlateDecode >> stream xڕJ@'LsL 'BB> stream xݑ=N@FJisX[N"GTPR; 9BJGZ0; Jifw<~EqUQAg9T )fT3j4wTN\IM}MoOhf7s,hSv`ځ_ hv= {H 񞡱B [r%kT3. 0=;  ڿv>;bC _\Af #c,'4/+;hq1h?7p% endstream endobj 316 0 obj << /Length 243 /Filter /FlateDecode >> stream xڵN0/`?BdS` Heꀘh XI-#d`stgۿ~Iy)x 5_XQ&oG\7vWEF<z{O5 Tb!ȣO!2J`@;PP<;Gg3E9c̈*l09t / inm';)),bߘ^Jq݂zlgF endstream endobj 317 0 obj << /Length 253 /Filter /FlateDecode >> stream xҽN0T"GȽu~n! & 7+Q!ʟĄd嗋l4\jU<sMo4HQ {N^Kls/dKɮꑚgʱw_ s=$p8E . (sׅ42*ȱ| ]6&ܴLpڋ_IHGN!X>] 7#f".F?^Q 3ҙ b= endstream endobj 318 0 obj << /Length 244 /Filter /FlateDecode >> stream xڅJ1g"0M!`Dy[ZYZZ(ںy}<•aǙP1|?IO :1H=>cTPc;Ocw!^_[^ʙ;V8?dmgPj\Rq :dĄ* |Vbn;gE d1o( ؁ahDBc!D[o1En %in6N:\Z` æ]H_I<?y뭜 endstream endobj 319 0 obj << /Length 175 /Filter /FlateDecode >> stream xн 0>B L*)j3:9vtPtnG#8f:M|~3z> stream xڥ?J@'X&G\@HBL!he!RK E֛L2ɮ9o[,Ƴw565>UU7v1.tqoYKtq ˣ|QђCDF"RcB|&;J e%wpU3B?O|G(^'f ]THد|X9/O8E.> stream x373P0P0bsC cCB.33 I$r9yr+q{E=}JJS ]  b<]0$0a aÐef0x:`P?H e00?C(v q'W l2 endstream endobj 322 0 obj << /Length 138 /Filter /FlateDecode >> stream x3635Q0Pacc CB.# I$r9yr+Yp{E=}JJS ]  b<]``0f+ɃԂ 0a@\\\٥; endstream endobj 323 0 obj << /Length 243 /Filter /FlateDecode >> stream xѱJ@)nMD BzQ|-#w_Z˷euG|]KkhFrw[r??ܓ[]rKn7-74B,? X -,fXNpMV%\{`r_ |7fZlP \X~r['-pG NZpZY̊4_HWn$ endstream endobj 324 0 obj << /Length 107 /Filter /FlateDecode >> stream x3635Q0Pac cCB.#K I$r9yr+Yr{E=}JJS ]  b<]0a\= endstream endobj 325 0 obj << /Length 232 /Filter /FlateDecode >> stream xҽjA W#>WZL+vrp!ET+ -vXqt;';됱j-->xsiNY-gOّy+#CYEI O$Rx%4DJʤn ׮UH@Y$߸Np⧤D@(Ax^ 9Eۄip xviC endstream endobj 326 0 obj << /Length 184 /Filter /FlateDecode >> stream xѱ@ & &]xHLtr0NUy{ጃ zw6d4JBGqlfiG{1+P)QEz@-ibc|!Pi ౮!`{.TV6ߡA_y48+po endstream endobj 327 0 obj << /Length 231 /Filter /FlateDecode >> stream xڵ0kHnЂ0 &2`A3<#02^KL%!_s{I!.qa@CT9 +@P% 7 v+@x0> stream x͒N@ ]uG_.!MBH 02<Gx۹F:.˓"J:lN錞c|,5<WO(m(KѭEGWbtK=b$(#!@5@oJ 4{aŌfJ`o}4.lO%wm_mte4](z`_TU` endstream endobj 329 0 obj << /Length 169 /Filter /FlateDecode >> stream x;0 t#' VbTD$02`nQzT dj20XY陞c+4xRps?aq@iA W<ix=   E^6ɱC:_:Wѫ}O_ /h m Ij^ endstream endobj 330 0 obj << /Length 259 /Filter /FlateDecode >> stream x]1N@4;ۊB$\ Q%ڬ\vY)yTk.拊57 UIJ/Kn6O\k*ybx[~|nXp8HDF#々~7'QȔ^;LKZ+45qj@.dtv!"ieh֔j]dV絳Su ?hgcfKxhGZ endstream endobj 331 0 obj << /Length 186 /Filter /FlateDecode >> stream x3534S0P0R5T01Q07SH1*21 (Cds<L =\ %E\N @QhX.OON2bH$;&=A$3?8HAN7PJ`$H `( E` qzrr:p endstream endobj 332 0 obj << /Length 187 /Filter /FlateDecode >> stream x1 @   fl1[ZYZZ(Zkyt {O!(VhpZ0(j. 匴F91J3FNPf4W.dI K#ZX+ސ8 w6 .n N<sUv848n endstream endobj 333 0 obj << /Length 270 /Filter /FlateDecode >> stream xڅN@EPL'~ >X<&ZY+h+| K$\gfX){ʪߗu%B-k_Weʡ/ϯ7/nyS壼'7e"0қ0Dr92DI-٨l+s@!٘b4Hfoq!C?I?b`6|tC t} lLD2r1uIU'TuIk*T%5P%5!.>Z/1 endstream endobj 334 0 obj << /Length 310 /Filter /FlateDecode >> stream xڅ1N@б\XG\8M,  * D "To+l"0DQXO]yx:NbYٔOG8'M~ea חG/pl%ގqtg%Qm3 "Vϊ<X1f3j ԄMVl!ey o+ =̃Zy[coFG\{SZƛЦQ?䍉`߈=m;4M?l½};YTjĭjө IPZlklku釾2#}UJ.҆Rymaɽ endstream endobj 335 0 obj << /Length 137 /Filter /FlateDecode >> stream x3337W0P04  )\\&f  ,ɥ`bƥU()*Mw pV0wQ6T0tQ```c;0D0I~0Y"I ?&D(I"\=VI endstream endobj 336 0 obj << /Length 301 /Filter /FlateDecode >> stream x}MJ0)YؖG_]x>.]W҅h=Je? گiftߟ ChÞ6 s/\knCs%ux^ߟ\s>k o@B,D'DdZ"-,-B/63"x甙k p7q|$pF暿 dL@AvZHFӬYM5k|,ZdIeb4j`Mg!@Tt`[Bͻ.A8Ew̕bԊW'bt7}t endstream endobj 337 0 obj << /Length 305 /Filter /FlateDecode >> stream xڍN@LJlA gEr&ZY+h=> @IA烋 |gf.K xQz!eY^#[E{_o8_c#>UX>)EৣNGG#"qhfH8fEAEI=-Β%$#쵂H\Wfä hgcgݺi8iZG`s+,25\i`2[[E3)D/bZ1.8G IUuuR:X&oݴ]֯"Mߴo endstream endobj 338 0 obj << /Length 225 /Filter /FlateDecode >> stream xڽнj0 ['Pt!tP2;4qh~?G$C@Bw&,+]po1}R28^~в$IF~{͒/wu|'ܯ8&旘knLM@;&ED-tw>5 pU/jh:؊,PW+D5^ԝhma#:YVp=Dӊb~9ag/uwiS]]q endstream endobj 339 0 obj << /Length 285 /Filter /FlateDecode >> stream xڭѽJ@Y lGȼ&H +PN-`bu>r"X?L6']x\c[awO}͚L> stream xڕ1PDXl 磈V&&ZY+h G(ˆAB,ٙ}P!#y8ф.fsULԖI%+]'R5w=%1.iFe:o[ xcmrD/+lQa^n%k\h[%~Ҭ5.NnwZb.HhC5~X endstream endobj 344 0 obj << /Length 204 /Filter /FlateDecode >> stream xڕ1@EXL `EHaRK &vp4,- JBg7N @\e(D͡+QT쎜⇬Uz`.d㉻<U&);Q rDQMԱ@a1PıMmc ]y Z ~/:] {>tٴc_> stream x3532Q0P02PеP0P0TH1*22(Cs<̹=\ %E\N \. ц \. 4|H (\=di endstream endobj 346 0 obj << /Length 118 /Filter /FlateDecode >> stream x3532Q0P0VеP06T0TH1*22 (Cds<̹=\ %E\N \. ц \. d {?q=Z@'W /z endstream endobj 347 0 obj << /Length 169 /Filter /FlateDecode >> stream x3532Q0P0SеP01U0TH1*2 (Cds<-=\ %E\N \. ц \.  @D@D`Hȃ@L<` 6SI3a*F#JS1a*IFA aMOF endstream endobj 348 0 obj << /Length 100 /Filter /FlateDecode >> stream xU=@@ww]YD'J!* BVPd *^QcQ1H-Q1V}uF i6;?@a\2 endstream endobj 349 0 obj << /Length 143 /Filter /FlateDecode >> stream x3532Q0P0P54Q06Q04TH1*24 (s< M=\ %E\N \. ц \. ?aC? ??PՓ+ .q- endstream endobj 350 0 obj << /Length 99 /Filter /FlateDecode >> stream x3532Q0P02F )\\@$2ɹ\N\@.}0PRTʥ(Dry(3773pzrr{ endstream endobj 351 0 obj << /Length 174 /Filter /FlateDecode >> stream x3532Q0P0SеP01U0TH1*2 (Cds<-=\ %E\N \. ц \. @`"j@&~ f0H@L`F؃ ! D4$f6a&I#$l0L  *@'W OF endstream endobj 352 0 obj << /Length 108 /Filter /FlateDecode >> stream x3532Q0P02F & )\\  ,ɥ`hȥU()*Mw pV(Dry(3773r - endstream endobj 353 0 obj << /Length 113 /Filter /FlateDecode >> stream x3532Q0P0Q0T01W01RH1*@hd Irs{=}JJS ]  b<]C=l q~!nr P endstream endobj 354 0 obj << /Length 103 /Filter /FlateDecode >> stream x3532Q0PP0T01V02UH1*2 (A$s<M≠=}JJS ]  b<]` .WO@.E, endstream endobj 355 0 obj << /Length 125 /Filter /FlateDecode >> stream x3532Q0P04T06R01P03RH1*2(äs<,=\ %E\N \. ц \.  v  S 1? ;\=:] endstream endobj 356 0 obj << /Length 279 /Filter /FlateDecode >> stream x}J@H&A'B* NK E;GˣL1fv7//fTЂ*iqI%Ұp{UM+o5ƼWTbǒ'lP~_' DD4 ͆o\享[v{d3 zBRD!t-2f.bamzCξS8̐`.`LcovaW4Uu b譫Tиv7 n{ endstream endobj 357 0 obj << /Length 205 /Filter /FlateDecode >> stream x}ϱ 0[|Fq+ vtr'utPty>JЂVCAn C>)NB<pmkq jZZpTvfJp4A!|ܚRieuݪ,;鷸"Umddgf$/qF+Q+]KC8ptj䐆ŀ "#$ʣN[ywa endstream endobj 358 0 obj << /Length 208 /Filter /FlateDecode >> stream xڍб 0Д[ DZ N⤎S ;!b #wBaj/9A]FG oPjT ߂[|>^Wn\1ڹ^Wöe;>w"ȑbne!'pΈlr1wE@vؒi`b5olOkuV lL$=o endstream endobj 359 0 obj << /Length 244 /Filter /FlateDecode >> stream xڭбN0 `:TG_ҖpCL &`J~> Uq,ĉ_]"hKZ_=n ; Z0+5RaK~5C%'>;*\ $U+u+}e'}^ܧ_"dj_V˿*'1S9}q2.Wl9ɒCТfeDE3vgZyٴfȅ endstream endobj 360 0 obj << /Length 200 /Filter /FlateDecode >> stream xڭб 0H-} LSZ N⤎Q;\Oh 䃻 jh1W/qz1pAf@Pki| }Qa|cpÖqA# KN2lɠw:RE99[CO#/Jǎmݐg'7ΐl9gXɣ endstream endobj 361 0 obj << /Length 158 /Filter /FlateDecode >> stream x3532Q0P0bK3CCB.3 I$r9yr+q{E=}JJS|hCX.O@D~DBD00H2? Iy0i߀ZNĥf2TV? r > endstream endobj 362 0 obj << /Length 153 /Filter /FlateDecode >> stream x3532Q0P0b 3CCB. HrW01r{*r;8+. ц \. A=e?0a``'d~"$}6$.0hO$8,'W k[8 endstream endobj 363 0 obj << /Length 241 /Filter /FlateDecode >> stream xڝ1N@4M/R.JHJ t(>BqLM󊝑v*.s|Q傷}-1e&oﴪlؖdL_;2;.Ȭ5&r2x:J缮4U3izdS!a1O*.}'%6+_%tlsp,)9SamG{Kj>t{}Ȫ}M zG endstream endobj 364 0 obj << /Length 124 /Filter /FlateDecode >> stream x3532Q0P0bK3CCB.3 I$r9yr+q{E=}JJS|hCX.O?$DC=9Pn I.WO@.^4 endstream endobj 365 0 obj << /Length 115 /Filter /FlateDecode >> stream x3532Q0Pb3CCB.cS I$r9yr+r{E=}JJS|hCX.O7@s ?F?H\=u endstream endobj 366 0 obj << /Length 168 /Filter /FlateDecode >> stream x1 @ 4!#X> stream xEнJ@9RLG> stream x3532Q0P0b 3CCB. HrW01r{*r;8+. ц \. 000LC"A"YFsĐ@$R@?,Փ+ V~ endstream endobj 369 0 obj << /Length 213 /Filter /FlateDecode >> stream xڭб 0-}{O`@U8 kTfИXi${NRuZ:AW` D{JPhݯ=RO39ǰOX",@,scm$61/Vq?*{b\ Sg% nQ6Zi/Zt"Md!N r endstream endobj 370 0 obj << /Length 199 /Filter /FlateDecode >> stream xe1@5&pj,$&ZY+hGqblGN}> stream x10gLxжXX &v08Fg<G <`v2$)"SUr¢8((kR(J:)g%A[=D:4Lhn&~^i/c.ĭn,c endstream endobj 372 0 obj << /Length 197 /Filter /FlateDecode >> stream xڽ @ p؞:jotr'utPtnG#tt(K>ȟK'S7xp> stream xбJA WLspas1WZYUP{}<2M"6>,|,*/u(/)+sџF\)upCoַ1l!RÆ=BeƘس O$8?QCF70d> stream xڥϽ 0H>AAA9>ZL@3wS̰o8xp|)30-l1Y2rf3ǝtC)"l˒PK^QtJ*X endstream endobj 375 0 obj << /Length 259 /Filter /FlateDecode >> stream xuJ@'LyMr.'BBNK Eኃ()2dოgw\nZe+tyiZtW?zEN>?^_K^  )t"Y33BsrA㙢ƑJF :jD.$ &0X@ X {i6zCEPL> VlqZ`I'<EHf|F[(<|,ޛ endstream endobj 376 0 obj << /Length 137 /Filter /FlateDecode >> stream x3532Q0P0bK3CCB.3 I$r9yr+q{E=}JJS|hCX.O@DH2` #d?# rzrrӄ endstream endobj 377 0 obj << /Length 190 /Filter /FlateDecode >> stream x1@EXL DhI)L0VjiQ8%q/a67?h!!Jl%r|8IuNW 6{C6kl< l&E.6*NT+nZ!D~/!rG(Q @53`cɭRN=B[2r\U;~W) endstream endobj 378 0 obj << /Length 204 /Filter /FlateDecode >> stream x}1@!$p,A+D ,ZZhQ8–[lXH42gƧQL!E4)tx81aHI4L d;d+#+t=Ȳ͂89\-<~H+O _* h ~[+"S'F־1ƦMOMW`HG>?-(RMǠS,p/Ҋ) endstream endobj 379 0 obj << /Length 221 /Filter /FlateDecode >> stream xڍ1j@*v.M8`raR.]$؝"`!(:–[,g*_QF)iz4Nii)|}՚)Ǩ%>;T3iTshJ߰gu]'}+e $olD3Aa]O3^yy۪ 9ܰIt2/+~}_&Mx)//'1 endstream endobj 380 0 obj << /Length 243 /Filter /FlateDecode >> stream x]j@ e<'ZꡐLBcd>?ŏl i$~9h.=SM5\߸l |,;~_X./$5U;lV3xXjrW=G.:F 7qfg(L8Hic*ebMbS ôqEܨPMewe6NŨ{1!Xwd n& endstream endobj 381 0 obj << /Length 215 /Filter /FlateDecode >> stream xڽбJ@?lf!䈁w'BB;ͣQ)S3 kac&l xq[Ng*J͙E+^O)}⢤Nq|tp`G~9{AdibEZju#` "uB4BhTMlq$7;p@Y'sfդeg6Q_-H_U}c endstream endobj 382 0 obj << /Length 200 /Filter /FlateDecode >> stream x}б 0+->B l#Q7IGQ.)5.!44歧4QtTxAxe-iO1HVtOD9ӎ1ɷ֖`X i^)^N?:0fVR𜜩L-gDyX/f1NId S2c2'qHp' endstream endobj 383 0 obj << /Length 225 /Filter /FlateDecode >> stream x}1n0 Ed0EG0/ ԡȔdР7 dPK#O'O *k!XnKVz>uөg^3e݋}N7Oo#XnkR 0,H"`nX,2d;F)ԃ"G ٦)eC$9َ}r9H>Gime2bֿɯꢻNǀf endstream endobj 384 0 obj << /Length 223 /Filter /FlateDecode >> stream xڭ=0 S1T#4T HbF(=BN1#2|QlSL``: Ҍ f}a^cstz=^NЀ`|U|+Q܏JfL5IbG|86*Um%1x(VDFN{ܙmw^{Ǜ)5xu Vϗr endstream endobj 385 0 obj << /Length 208 /Filter /FlateDecode >> stream xڕ;n14s5,r%[D ")S$"r4Gp`(RF}?i7> stream xڥ1N@Y478n- T)UL(ԛ,IdUq n#t-l#k&ĖH endstream endobj 387 0 obj << /Length 225 /Filter /FlateDecode >> stream xu1N0E49BM,)@T@"萒(9K. #3?pW=w<~(ё6[;ϝFOْSxϟ_dw7qB#h%^J"s-,&ï& M ugTi: d)ȧֿHee_3 Y}ETԼ4rs$jYh%t;#k} endstream endobj 388 0 obj << /Length 166 /Filter /FlateDecode >> stream xŎ1 @EH!%q1[ZYPUx!㎝Vd7<[W-SÉ@fޒYFLXr;)svdJ9{ %_@"-0*rࡐZ'pGb4"mz!IoMSK?7W endstream endobj 389 0 obj << /Length 283 /Filter /FlateDecode >> stream x}J@Hfa4]<Vr YlWX `D9-4oɿ3eP=յj隣{^u\\:ݙ{z|bu~*.r冻D6 !#"%I\(3}Cc{mPD߄%:N4@&qTDMK2v ;Q9(nhK Idvd="Т>y &ɹf{[ӎ N4:58x'_'/t endstream endobj 390 0 obj << /Length 178 /Filter /FlateDecode >> stream x= @ L2'pH-,J--ףy2ŒmkO1rX54])/ UԎ URvL,=&dk6>s]PFX`* tB &66aQְsdmN|*38w ]ZZ錀 endstream endobj 391 0 obj << /Length 141 /Filter /FlateDecode >> stream x3532Q0PbS3#CB.c3 I$r9yr+q{E=}JJS ]  b<]0000PX?Po?=``D xr "cn endstream endobj 392 0 obj << /Length 177 /Filter /FlateDecode >> stream xՐ P ES YgխP+A'qRGAEOS ;\%CA0$B̘F5h>M¶1d4xTvA*^NIlBYڢMNNSyq" ɑ8t:e n ^(gGƒ'gz\9 %r endstream endobj 393 0 obj << /Length 231 /Filter /FlateDecode >> stream xڭοJ@=R#d$G \%'BBCܣ796[D@~9nֺLҮFR\3dQֽTvRT>o_Z_j7zh}+F e>XLΙ垞tQ8rnl`l`Kv❷ xuw0$nz_,ǟM 7ݲ]X`DtqY/W ^ endstream endobj 394 0 obj << /Length 127 /Filter /FlateDecode >> stream x3532Q0P0b33CCB.cK I$r9yr+[r{E=}JJS|hCX.Oc`'\{0 ?0%\=Rm endstream endobj 395 0 obj << /Length 175 /Filter /FlateDecode >> stream x1@O75pD ,ZZh:JD<@J ˆbb%3򎃮i0f3c3n[6DM8eŠ8NDRrpEEVn4TKUT|(UBMҸHȿ(? endstream endobj 396 0 obj << /Length 170 /Filter /FlateDecode >> stream x1 P t*d |BB`A'qRGE> stream xڕ=@ #0e't$$RheaB5pJ 6&Wd^狔cy9ƹjzPRei.;-+RGN R[&U|H-+֤|Z3/PDx"_  {MءlQ5򃠳RkD0qM]Is Fk,Uel m*:9n endstream endobj 398 0 obj << /Length 235 /Filter /FlateDecode >> stream xڵ1N0EEirqd":K" * D ra8 j$\<̟|Ҷ9~JSJ/q]Ngr |y@T2bH!iY)0DI~B& #;NvWV #tb9w?1&쵹+'KUwι9mkQڎHQ*mAi7t-} endstream endobj 399 0 obj << /Length 230 /Filter /FlateDecode >> stream xڵ=n@4@XZDGEJJ "9G k*U4hgޛq1*=,y\-@~jݜ'~Ӽ"~Jnm}r3;r^pAՒELZ[jCm`&H[d+RAv MFM7#zBL#PoNmz'[z >YgY$jcƛqH"WڔVU!, endstream endobj 400 0 obj << /Length 172 /Filter /FlateDecode >> stream xڽα 0@εIG882:Ht>85g<G5oHYc\lːIN͌Od>"YJq&S"EE\-u׋p*X&.EZ7-}K7-^D_~417yi endstream endobj 401 0 obj << /Length 227 /Filter /FlateDecode >> stream xM=N0j K.Yo?)@[%h(pGH"1&+Ai4絻RF.x/~-O_yUì o[^fv'^TGnBe*TRUCQf4.,B"tF) F#a~̇ Lͥ2~"1e`9Cf1YD5- VM4kcЇA-ʭ endstream endobj 402 0 obj << /Length 177 /Filter /FlateDecode >> stream xڭб 0+ 4%q- ftr'>#t =/u AIn(ƚ!kxB%N_C!Q-$Ft9_Ռ$h+3;tA|y=8ނM?`|ҋ-xI ,vQOzxE:Vv܄#Jsk|jVmx endstream endobj 403 0 obj << /Length 165 /Filter /FlateDecode >> stream xϱ 0]r cptBp" hX ;;rpcHQT2kv%d‚ϧ˞L%SrPE^ />" _*?_^ӗw/ķ=yD-L@@+z]l endstream endobj 404 0 obj << /Length 201 /Filter /FlateDecode >> stream x]α0# $XJD1D'㤎]GQx!Ԥ%Coƒb Ly۵-(v$S+NQkg͂g\:]:r9쒮 < د׼C|V{ˀʠB6נ?b}gk{[[\2e endstream endobj 405 0 obj << /Length 194 /Filter /FlateDecode >> stream xuʱ 0-yFcB`A'qRGE(} 1AX>%E4v+g$'txE 9ʵ5o3t > stream xen1 } p~r$7 1юZ(yc+ d/dj I8&,‚}bTl+bY\2L5N{Gs/Pܠ 1?3W-%_} endstream endobj 407 0 obj << /Length 251 /Filter /FlateDecode >> stream x]1N@б\D&Gع؎HT+  * ()@*>Vu,7O?_f竂RlSqAENObQ4xz|M=%&>ǤgL6aV[2(̭v 9LJt'XX=YjUI+.~ЉgPws+CF`CHeD%;#7R NJCwX}xU~ endstream endobj 408 0 obj << /Length 223 /Filter /FlateDecode >> stream xڥ@Ba2 .HK^rh(<%anY .l;kXㄓ%jP89Ssߤ/]'R5-4GGʷ _* R#>^SoVAԘ5auHKxcO(, m chr >O k>:p6gȹGN;­z endstream endobj 409 0 obj << /Length 154 /Filter /FlateDecode >> stream x3532Q0P04&& fF )\\  ,ɥ`l̥U()*Mw pV0wQ6T0tQ``|F ~8!"AD=$A= HԱ5 ?h .WO@.h endstream endobj 410 0 obj << /Length 234 /Filter /FlateDecode >> stream x}j0h0G=Ae'S!M  ԡtJ2vHhʏG#x`t/jJ)TBuuu|F6+9U|Eۖݳ%C̲kqf}N^*)_ %"י2S]`GNMOtdf@C)  (RX%&aȁbrq7jzor0qy42LXC#y|Pov} endstream endobj 411 0 obj << /Length 261 /Filter /FlateDecode >> stream x]=N@ !䇰4HE"T+*Ar!ehYS|٣޼ijjhk62hs6/|NXj,wz~Gga,d(cE.q  ~@1Bn+~Pcѩ*)&e7RcD5V_BV!1 #ctiCK*f ӱ`=k@o{|_ᅪ endstream endobj 412 0 obj << /Length 203 /Filter /FlateDecode >> stream xڭ1 0y'0mV Nī&;ƼtxA?Y> stream xڭбJ1YXf[ x{wVbuZZ(ںytG2E8s J#L2ìbSG+t48zr}Gze=k)o-=8qRs+$W89ps q+h<d"4IzrP?2BFRN"*:O^2 ixΝ)5]@\tDXs&݈w[! endstream endobj 414 0 obj << /Length 262 /Filter /FlateDecode >> stream xm1N0E i @%ҲH@m (9,+c7k4V^]#O//~c{~zp#-yn9p"H:QiST.*NU2JUrAd S\1V`"iUǬ(ǯ3&aFEd+B @ogh&ùJe.bA.VFN[Y-bķ? endstream endobj 415 0 obj << /Length 199 /Filter /FlateDecode >> stream xڝϱ0[|VI;`A<#0:ך@, mD)Π90 R |J_cz<]Pp+0ځΨT13z5W/j'Z|V7J!̫Hi\LP &2]p';5صB3i}kXok endstream endobj 416 0 obj << /Length 256 /Filter /FlateDecode >> stream xڍN0`?BZcR$2 Ā:c":;G#d8.H7￵QE֖܎5[,Z{P%B܉RX (#:@PLPQgh 4?'jpB|F!{Y\i~0~Z6xfqQeNe7 1=ŧď\!Ɯ^3yN9/} m endstream endobj 417 0 obj << /Length 261 /Filter /FlateDecode >> stream xm1N0ЉRXr#d.I춑E"TjAms%Gp"ˊEzmwխ^ttїξ۾N77m}k[fϏWﯵA:mxP)E*"(@J 1UT-Ru* sb8/D"D"?p"N. ˰R+Wv#ffzp9vNs# SS5Aތj endstream endobj 421 0 obj << /Length 95 /Filter /FlateDecode >> stream x3Գ0W0P04F :Ő  Yɹ\N\@U()*Mw pV0wQ6T0tQg?P!Փ+ ( endstream endobj 422 0 obj << /Length 95 /Filter /FlateDecode >> stream x36ѳ0U0PP0T06V02QH1*@h HrJs{(r{*r;8+r(D*ry(@ 0 endstream endobj 423 0 obj << /Length 246 /Filter /FlateDecode >> stream x]ѽj0`0=ANJc!-,~? :%tۛ gxonQbGP&QH/X֐`C`^!g i&^2P{ԾQ`|J'Ql¦g9nٞQ7R&Mb?;F;klJjIr~V6̢NM;!) ; {vF=B&?Ň endstream endobj 424 0 obj << /Length 279 /Filter /FlateDecode >> stream xmұN0"G'p H01 9y4?J ;;&M9Y\^md-uxZk]4;;TORP݅*^~}~?A>7~ |x@0\+!Ч_BBeb̠&s {7C1 f3b5> stream xuJ0 9, l=,AГ Gˣra83Iʪ/CӁ2\gƞ#W-Z,e{c>?^\^˵yMyT@SQjqd,;B1 ͘QAF |+hOE!Xxy M[!"C278^P<ѧx> stream xuбN02D@(.CHHd@b* *5G#d0g'1OwWWŒ2RkzU{fW{{uTOQVrpC9 msʞqUOA p ~x,.,=<fx$i~a J2Xw84pPG=9vx8GC ta9p> stream x3635V0P0bK3 CB. HrW01r{*r;8+r(D*ry(00?&@ddIfd?I~I{y?p829ho|HPՓ+ j6 endstream endobj 428 0 obj << /Length 350 /Filter /FlateDecode >> stream xmAJ@7dEzs"SYr!ԥBb+ x`A.B6a/odxR51VcTݣ2VT&XI~^d2 ȮC - ϣA;#:o[sF4P9vcaر?:v9@v ]|hl2g.#_'9.:;G U5uC,W endstream endobj 429 0 obj << /Length 324 /Filter /FlateDecode >> stream xeұJ@/d8'0IMBV08PE[u7D39.4f.w%'2 |\$)<:%m'ʚTCGj'KSd( /S~ҝl endstream endobj 430 0 obj << /Length 293 /Filter /FlateDecode >> stream x]бN@Pl} M3D+ cM,h([R\U_e׺toTENE*gyPJ%OUrGeT]%ۇdS~QN@ a{F4讉>C]6q aO̪qӂphA;'[tž {%V^*"iFVZw_F/ DŽ3G9r:C;> stream xUϱN0?` @BR$2TuF@R?Z$^ďCUYb컳u/ /l- kZ]W/ﴮ(bk(:Ֆ>(_?ܲT7,vTmr^HT[ s碆ou@3xMT#zU#iGu;*Y}(92&4i)uQEmfbD%bp&a)u=ԯ9ߕUH Z endstream endobj 432 0 obj << /Length 263 /Filter /FlateDecode >> stream x]J0s/ymYw{qa]=yOQpEaͣ|=tI6?:UX*Tt>+XtZ55tE}/P,o/QA#+dG[;y]Ċ&rG|!nMʶr9&s"s< 8%v\-AEpA&}jXnEr0#SwDJx'4;wsl_o"ٛrwi\p(tg endstream endobj 433 0 obj << /Length 217 /Filter /FlateDecode >> stream xu=n@4A<ełRa).*J CxG.,gD4v! _{x S A^N2TG&(Jܧ7⪵~-uS[ Wu$ bJ hƤ!ˌJp3""Q4zj"| Ĉ404Lg(HIBI_YU!'J endstream endobj 434 0 obj << /Length 246 /Filter /FlateDecode >> stream x}ѽ@,ibr)BRT&bqu`k7Hi;wbNl@^U``CԇOr[`Z̡/ .V38Q!%)y\HX֔ң>t u5Zl\?dEqbƒ63kkSǬM><9,A٣ئZ5⋪]!6E*)z!Pk$ endstream endobj 435 0 obj << /Length 210 /Filter /FlateDecode >> stream xڍ1J@ [,L^@\@7@B@L@+ yRXE!.#lBM"_39= d鸤P]]h*  %Ǩ =?ܣΩDmIZ7o+d? &/EP"xdQFXpyH3y-Ό ;,TlUQy|R> ?bkFW endstream endobj 436 0 obj << /Length 182 /Filter /FlateDecode >> stream xڝ= @ [03(@PL!he!Vji(XQ$-4`yjZ53 yCBE̢1,{ Cw4O endstream endobj 437 0 obj << /Length 311 /Filter /FlateDecode >> stream x]1N0`C} -mV*E"L  Fb`1a*< n+{Fs|O:wb<խ"=H)iqoD:?=ԙH"KQ,4acv J*Ō,ѓP/ЕoWw@'!9H.h VUq0PL†bxn h'ƍ|PLj1ϑ:v[BdfBOP0BZQ\}%80p B?- endstream endobj 438 0 obj << /Length 251 /Filter /FlateDecode >> stream xUαJ@ [y#;/I`C8<8O0Ub) W'A,7YLNgsz*,?Wf`{%W5W%ޢRlg gl,Rcޜ5C.1y6sNú4KH9 =nNU,uJ7N TlD)bx!?n{Hv1DT7RT5 Y*qwN29"'.޽LVN%#Q a endstream endobj 439 0 obj << /Length 214 /Filter /FlateDecode >> stream xMϱJ@I&y,GHL!he!V\hy<–[;g(|,?9riU˴b^^hۑ}UMVd;z%aGvOgv ~Ll|*C>pD6aF&y+\(?6/Y g!.)ӼP &!+GeƷfkږ[/д9h}GZ' endstream endobj 440 0 obj << /Length 254 /Filter /FlateDecode >> stream xMοJ@oI{Ý$L!he!Vj)`!1kaGGH"\5ǯaqQre%璜2zjʧ'*Jn8/(:%%=R:㌒5fQfD5jlp,3a ]o^ʘ5M P+l'e> W P&%7XN֩t王SvC&o5b,&u6pc(A] w endstream endobj 441 0 obj << /Length 196 /Filter /FlateDecode >> stream xU= 1 S h6l-,J- =x=JrşDDx3j)ƘbSָRĕ1@/9$9 15ޤ dtsVї(ksiU7ǃU)?aIb cENz'KQPO<6 )'w/nL -EB endstream endobj 442 0 obj << /Length 226 /Filter /FlateDecode >> stream xM1j0d0A.jh ĐPt2mI Cu4%GءDeRI|BTLo t\\>p 3u7Vg-bG}.Vw]:l#RsPI;Rz < H`х#JCs;H ehQHs&I翃edgc6/s~#Cr_ɓǃC endstream endobj 443 0 obj << /Length 189 /Filter /FlateDecode >> stream xڥͱ P# " *C AAM TEk(>chp~pܹC!$txC7!>+)=5( = x$"$iBFJJYJJ˻%D~ь柼Yإibc)g'lB 5F֨]-\/N endstream endobj 444 0 obj << /Length 241 /Filter /FlateDecode >> stream x]ͱJ@ba B4ɑ@*L!he!Vz) )vy}K S|30rVr%_d\ S6n^ִ(y%(Y_sFɒ2NZ2R?n-bk#3qnOdzty|.; b+z9lzH#tB8CLFZb3v]zqnwfwaoUdZ ԀT@h6 endstream endobj 445 0 obj << /Length 225 /Filter /FlateDecode >> stream xMϱJAo` f^@7GV؀H"xXpBѮk#\"^r`+f?sx9/yqN^KLq;/*21N>.R]ɓZ 6_`v ̴s( EDynܠ {Ob{b8#%=i2 @' Tl(r} F|SPs endstream endobj 446 0 obj << /Length 239 /Filter /FlateDecode >> stream x]ϽJ@1 }36pA<VrZ * br{(J_!O )]#ok913K.'%cW%R> stream xڥ1 @EX t$ L!he!Vj)(rM\ ~}>wU>$]HYDQLbJX xɷH"ZMYVx@h egR4ah#Kju4ӒJ&YHrb`.j\+hcc%*t!AfM* endstream endobj 451 0 obj << /Length 207 /Filter /FlateDecode >> stream xڥ1 @EXS 8ͮ(VbB9ZRZX&^x hec5a㣤 jtLaLbJXV oD$N8x 0lX@/C7蔻B f 4VVkφcx}A#/k TZ;ƺԷt%E" }bS[. endstream endobj 452 0 obj << /Length 134 /Filter /FlateDecode >> stream x323P0PP01P02P0TH1*24 E,!2ɹ\N\ \@a.}O_T.}gB4PO,C}?K` @cs3; CPՓ+ a'V endstream endobj 453 0 obj << /Length 136 /Filter /FlateDecode >> stream x323P0PP5T02P04PH1*24(YBs< =\ %E\N @QhX.O9   fv6> $'W  ' endstream endobj 454 0 obj << /Length 95 /Filter /FlateDecode >> stream x323P0PaCKCCB. \.'O.p KLz*r;8+r(D*ry(177? 'W  endstream endobj 455 0 obj << /Length 105 /Filter /FlateDecode >> stream x323P0PaCKcCB.CrAɹ\N\ \@Q.}O_T.}gC.}hCX.O9 Ėc `3Փ+ ( endstream endobj 456 0 obj << /Length 147 /Filter /FlateDecode >> stream x323P0PP5T02P01VH1*24(As< =\ %E\N @QhX.O9 Ėc L1?K` @cs3; CPՓ+ L2 endstream endobj 457 0 obj << /Length 137 /Filter /FlateDecode >> stream x323P0P0W01P0T0TH1*24 (YBds< =\ %E\N @QhX.Oxd$,  (< X3pzrrV'h endstream endobj 458 0 obj << /Length 172 /Filter /FlateDecode >> stream xU˽ P ( "ǩ rjj@fϥy)gBápe—$>%|4'2$g-?+n}NgAJYM@;V 5&#Q SC!6J(l@u C+st5 endstream endobj 459 0 obj << /Length 94 /Filter /FlateDecode >> stream x363U0P0T0P0"CB.#3D"9ɓK?\ȌKCHx*r;8+r(D*ry(6#' endstream endobj 460 0 obj << /Length 172 /Filter /FlateDecode >> stream xUM PE> stream x337U0B#3K# CB. D"9ɓK?\ĂKCKW4K)YKE!P E?r k& endstream endobj 462 0 obj << /Length 181 /Filter /FlateDecode >> stream x1 @/BnV@` A+ RK Er#Ep"[9-6 :'r"qMg Ɂn?QVpZHKXr;V3֤rjvT ,d<[ih1 ' %WqJ|k;pQvGƺ~J~JHw endstream endobj 463 0 obj << /Length 193 /Filter /FlateDecode >> stream xѱ 0_:n#xO`Rd@+AAA(}j]Arnc6ܗ<2|Lڇ) džBnIK^nGՌ# o#6;JN-(_)/|bAU+V]U"sbh9RI+[9hJm+܇Ͽi&c|/?yJkzo endstream endobj 464 0 obj << /Length 165 /Filter /FlateDecode >> stream x3534W0P0bSCsCB. I$r9yr+Xp{E=}JJS ]  b<]```d𿁁? R@J " I;ddG&\=( endstream endobj 465 0 obj << /Length 227 /Filter /FlateDecode >> stream xҿj0d0P= ";͐:v:;4$[@ŏуdPB@ ohMgsNy#_p{F_Z퓖 skx;|]>?rFm+U%E+H>x(I L:QGӢŒJrѠj0G]rnu\dHHIoDE[UE/t< endstream endobj 466 0 obj << /Length 216 /Filter /FlateDecode >> stream xڕj@? ̡y@ L҂z  (}> stream xuбj0d=A-pHRB;u(@19G#d`d |' 󟖋;}O5\RQ`ȻO}c~[zIc%a,D!Q$mbG2bWh*^jL/.i AjS]3}`qd;<z<ĠuH> stream xڥѽ 0ةP+AAAѹ}> stream xڽJ@ƿ%``  h`xp` A+@--|tv)-­WXZdow*;9-8㒏 >+1*R̸*gZ֔Sz-eJ~{}ty{9+Sb 頁Ș2ԠFJ -_5J5f҂Fvh4P"VeF T߄iӹ{ =#0s@7IMlVMts~!|.G9#٘0\f {qo@W5/XI endstream endobj 470 0 obj << /Length 220 /Filter /FlateDecode >> stream xڽ=0$N`!!U'D::htq@ZmIjlB-$CϐOj^gHs`[1e ,_z?Kse0C (eml dE|QbM*mhVK;-Fi,IUAmluΧl.CNZ=xں%giz@6 7 endstream endobj 471 0 obj << /Length 202 /Filter /FlateDecode >> stream xڅѽ 0+n/ t N&X؏+blkqRv= (+%66l8T(ԏPL]jFyb8QbL51|=3;*X(mu }6f\-~ͽ xTk݋6o]ÖoW1\9_?D߭k endstream endobj 472 0 obj << /Length 180 /Filter /FlateDecode >> stream x3333V0P0b3 PH1*25\Dr.'~)PKW4K)YKE!P E?|@``PL1C(F*  %CA(6ŃF1dP(UPP9J>TxHJ(`\=|3 endstream endobj 473 0 obj << /Length 296 /Filter /FlateDecode >> stream xŒj0OxܢGн@kg!M ԡm-@^[^[WI qUutqE+ z+̟00=}c~ =T`!gA@jT, 8_=eCAMF^ |:I *@=N` ڝ 垻ḱ69&>0s!of &jɤbu gϫC0IF)Zm* endstream endobj 474 0 obj << /Length 130 /Filter /FlateDecode >> stream x373T0P0b3K3 CB.31s<L=\ %E\N \. ц \. ? Ph707000c~4ȫ_4,q.WO@. endstream endobj 475 0 obj << /Length 112 /Filter /FlateDecode >> stream x3634W0P0a#3 CB.# I$r9yr+Yp{E=}JJS ]  b<]A~y) \=i endstream endobj 476 0 obj << /Length 295 /Filter /FlateDecode >> stream xeұJ@ )^@>IDb<VbB29,|2IHyEqwv0Wlfl~_ڑ0)>a:q{q kY Ԥ/Mj[:cЌvt֡XQ(jE/:A f SZ xv;]EoclZP7cC+O+h8"ΰk=8Eѳ>̡(Ɲ0M4yt^i$&"귁g^* endstream endobj 477 0 obj << /Length 152 /Filter /FlateDecode >> stream x33г4R0P0bSs3 CB.S HrW05r{*r;8+r(D*ry(*P 2C@,dBPBՃ)A0@\=R endstream endobj 478 0 obj << /Length 258 /Filter /FlateDecode >> stream x}J1 ] {-(tdibVp> stream x]ѱJ@ Lᾁ'p<8O0)V"*+ϑ:Ygw{tx-(9bA1=3?k*hmuAoh]MN-V+rn`f \uǦxY> `=jx烷li'^ b8vUx谈 endstream endobj 480 0 obj << /Length 280 /Filter /FlateDecode >> stream xڽn@ Ǎ2 y/D%dCJS کC!Q&<#02\M90qwYSL)ݭ(K(3SR7n oN>f3?_h/{B@J lF3@.!-@A> Aވݜ*PB QAo"|s Fà \Ji oץ%Ocj{:T~LpaE `M5(QlWq2 endstream endobj 481 0 obj << /Length 184 /Filter /FlateDecode >> stream x3336Q0Pa3C3 CB.S3 I$r9yr+q{E=}JJS ]  b<]dEL0 JP 0QR(ڡfZ D}L1Nqzrr) endstream endobj 482 0 obj << /Length 252 /Filter /FlateDecode >> stream xڥҽj0p [hd`e3$)C 2@!!G3U?& w0 ,N=j7>FTҿUx4F=E_%\ᵀ=/ɸh endstream endobj 483 0 obj << /Length 289 /Filter /FlateDecode >> stream xe;N@rai=`;qѰR.@T@I.J|7a҈$Ci>˳؝I}^M iI/y78K6'of֘)nb-}~|bvwE)XQd9!a"[d72EW:,wX=0;rؙnW-WzUR,k9M<Iz:HxDLՐc|c=1;2؉^]Aĺ7_lo'kH;tۀ_"=\lhsoW endstream endobj 484 0 obj << /Length 160 /Filter /FlateDecode >> stream x3731R0P0b3s3 CB.31s<̌=\ %E\N \. ц \. A70``a~@ m :y 4!B3  4'W +q endstream endobj 485 0 obj << /Length 210 /Filter /FlateDecode >> stream xҽ 0+!vuФZj? N⤎nBh>PWj#:,{)=F(c[eZJ *8~91d plp/ër endstream endobj 486 0 obj << /Length 333 /Filter /FlateDecode >> stream xڍAK0 ^{6LSaNAODGaRAaԉ.x ?dJg9*9g9Цӯ'9+ezӉL/h[%=tvuLx0ȶ `ka5@!F֠%~ CnɱCȅsZnpIm1u2c!/Wܣ[P `Q P{&{6Gq.L!qvNCQ&yи7> stream xJ@ P<(=jsɃ QPsh(y#3݃HH6쟅Tg',|Vt~AO%aeIʃXSeXԷfwE%[z{o2`cG{! S8A(_fX$:X ^c)xH"U'4FUi*RWg #V]@"  -@2O-s^x½ endstream endobj 488 0 obj << /Length 247 /Filter /FlateDecode >> stream x]J@K'phJB`<'у(>JM?v76Us]\po˚w%}ТuK=x}uK ;%ÆK[~.xvnЧl;! {:@~UB>V?gjaH/!I!9B#$ K$,9Bd$i2I'嘜igf]H LhRdBsKF2+g6e$as+voC27]B-=f endstream endobj 489 0 obj << /Length 229 /Filter /FlateDecode >> stream xuϱJAba yh+RPK E;1 tƽpS|?;?xžjs3TC=-r+SrgkkrKyrM͒a{ծlB-`a:`u)xuwGW2&e˯ɦnh huaǨk} [ bԪob"EzONoɌla endstream endobj 490 0 obj << /Length 213 /Filter /FlateDecode >> stream xѱ 0; 4X-P vtr'uTt7)7&/“ h4"rMӘzd endstream endobj 491 0 obj << /Length 203 /Filter /FlateDecode >> stream xڝ 0OKдv vtrAPGAEA0G#8:ANȹ-Lp;"dJ Z_V[UglJ#IWc>NҽIs-0pu@܀_x vZհu/{#ҡ^EA^UzN4 E A2;Wa V4'VhLr endstream endobj 492 0 obj << /Length 212 /Filter /FlateDecode >> stream xڽϱ0$7 x/$N$ &:9'utf,ƣ Fp $K8q b~bNe/DF4AFGi[?2%72byg6Nh:]hBQ֩L)϶?$nId[XmFiǞzՊuA63` ^j endstream endobj 493 0 obj << /Length 210 /Filter /FlateDecode >> stream xu1j0g<7 41'z(S$ MHXGQ|JW\(T 7uN3uki1}.Gq%Cf&u#U])Yϧz\R׹fi WOp_PI! I@*#f%#~,K{ǏT#,ΰq`(nYsLޖF^V2 endstream endobj 494 0 obj << /Length 156 /Filter /FlateDecode >> stream x33T0P0bc3sCB.cc I$r9yr+s{E=}JJS ]  b<]000```!$T ?h A30c T" h2FG&\=ak# endstream endobj 495 0 obj << /Length 275 /Filter /FlateDecode >> stream xڝN0?+C$/~ @pKV*E"L02`ȣD`7я$7d*:}$ X endstream endobj 496 0 obj << /Length 167 /Filter /FlateDecode >> stream xα @ ;:'zx: 7:9: *:{G;s]!3pck8YǸh PsNA^/r9E l BuL[VeTɎdÞ@`_wV| 䈚 oafaosK endstream endobj 497 0 obj << /Length 125 /Filter /FlateDecode >> stream x323P0P0b#S3sCB.#C I$r9yr+r{E=}JJS. @-\. ? :  .WO@.P endstream endobj 498 0 obj << /Length 161 /Filter /FlateDecode >> stream x33T0P5U52P02T03WH1*22 (Xs<L=\ %E\N \. ц \. 6 ! Ր#0$z $!03`a |\=[3 endstream endobj 499 0 obj << /Length 220 /Filter /FlateDecode >> stream x1@`CW ,I0Q ne!V*Z'7J+)Shfe=1fOA2∇n'MxӞ#슓U|<)dg9P1csK^4Ї g Z7-Vj]p azկTP)*ܨF7́ ,a 0@ A/vP`iCiyA_ endstream endobj 500 0 obj << /Length 110 /Filter /FlateDecode >> stream x323P0P0b#S3KCB.#C I$r9yr+r{E=}JJS. @-\. ? C 1cqzrrp^ endstream endobj 501 0 obj << /Length 203 /Filter /FlateDecode >> stream x=@H\@ȜM B0X({+ba8垫|>2Pԏ~?Ѥ$|@jRRod5Ԍ;*gX@l$u8lSyEȞn!X#xiTCƩFHjODO'0vBJ#n $"&ݏ endstream endobj 502 0 obj << /Length 159 /Filter /FlateDecode >> stream x3534W0P0bSCCB. HrW01r{*r;8+r(D*ry(0a@R` `$@z ɀ a/ m?C&\=?qjS endstream endobj 503 0 obj << /Length 209 /Filter /FlateDecode >> stream xڝ= @GR2MtbSZYZZ(ډr2EH|((v̛ݝGa_ endstream endobj 504 0 obj << /Length 218 /Filter /FlateDecode >> stream xڭн0 p[*y#4"t7p  }4бCHpH'n[~8{`zz9> stream xڭϱjA` H;eTI%>: fsᅦ2ts.zwVlJRc铪&^}.I OIEsJՈW@w D[wS`$C F AG# nZѝtz;Ymΐ#[GGq.z sE3:g endstream endobj 506 0 obj << /Length 144 /Filter /FlateDecode >> stream x36׳4R0P0a3CB.c HrW06r{*r;8+r(D*ry(0`?l(g?6g u@lC{ pP endstream endobj 507 0 obj << /Length 213 /Filter /FlateDecode >> stream xMͱN@б\DTd""R.HE) h!kfg:[\ꗺXS)Ks"Z;׌oY2=7Ro0ͬ&a8YZi4 %:1X[z83L̺E[y!8}?+O2dWtm8 \\ղuY endstream endobj 508 0 obj << /Length 160 /Filter /FlateDecode >> stream x36׳4R0P0R5T06V03TH1*26PA3#Lr.'~PKW4K)YKE!P Ea9$luPفX$N#Ccagc{  00?r Jm endstream endobj 509 0 obj << /Length 162 /Filter /FlateDecode >> stream x1 @ᷤL fqC@Vb--+'Gˑ<@Ⱥ!X l3pjZ>DŽm:L#c^[z?.6 6KNJV- -reByDz 7U}`(D,uxI0nҷWR hhKob endstream endobj 510 0 obj << /Length 202 /Filter /FlateDecode >> stream x]= @Y6sݬ+0Z *ZGQr!n5|ś7ȈBR[^0$)?G19]/bLւ :c:k{-Ŭ`m88u t&p2 lB̘Ϙ> stream xeɱJ@; $p M!澀dF 1` A+ Bv362e]X'qι>giF'5Tkè;.:TQ݆UwG_oTZSE%yB7zȷ CD`Al`^Ѓ\F&i!Qڤ5#+]VڂQS"w)͊S28`?ah֌+.1%t}z= endstream endobj 512 0 obj << /Length 236 /Filter /FlateDecode >> stream xMJ0?0> stream xeпJ@o \`^By]  @-G̣R^w]9 Opj8>xPS5ZOLIppu%?^^qDzŷ;JW\ׅˡ~ lr&Vg{'´N2;s8Gvn=ЪQob]pл ~^8:g007~ʞJT Ͼ4sM^!yJ[X' endstream endobj 514 0 obj << /Length 197 /Filter /FlateDecode >> stream x=ϱ 08nzO`Z j;:9 y> stream xڽ P FҡмVn?`A'qRGE7f}>BŚނ*3$|9VuQۀ}+5͞1%kTڤ|18Ux*%V738 \A&rOP deyܿ>X ?c\%#'q(IfNĴ) endstream endobj 516 0 obj << /Length 131 /Filter /FlateDecode >> stream x337U0PbC33CB.c# I$r9yr+q{E=}JJS ]  b<] >00013 A9 CaՓ+ t^@ endstream endobj 517 0 obj << /Length 259 /Filter /FlateDecode >> stream x]J@Of!"." E0pA.Z v |˝gH0??pNNmnҮwYUϹ勧7wk"nssa q[{_AꭅBaD4%;>#p{%*édlW]HO˷df 3ÂױtK҇FoMfl=o,"E"pLΉ~WhFF*4& !3DWZnvj endstream endobj 518 0 obj << /Length 257 /Filter /FlateDecode >> stream xmJ0'y h[ 'i((ysƙ$;dfjj5u=5mMrPٿf~jg6wW`G*`Z@y`5@N08F  xP f͡HmVJ[\8 )qYTN KJ8L3#ęgDUk-2gB8&%1Dw>vq endstream endobj 519 0 obj << /Length 206 /Filter /FlateDecode >> stream xڥj@@CkB  A GAẸMb/hffӱZ'd?$u{<l(潽x3\h*fTK> stream xڭбJ@?4y1[8O0Z *ښ<>=BKD+f+.yG\4P -Kn;r׼ΥLGrSm `# JT&e 0m?HMF3CP J@#J2 _.N^v2%5+w:gY9Cb)@;@f,BMB~2YGW e endstream endobj 521 0 obj << /Length 257 /Filter /FlateDecode >> stream xuпJ@o"0y!Dr1SZ) ɣQ[X2N[3.脋%?NEav \d^j??^(]_sNs0y("=I 5poIu~ѽv ڧ5F r q/oAz Fx`cο=!)a$ܠkkR:5.̈% endstream endobj 522 0 obj << /Length 219 /Filter /FlateDecode >> stream xڥJ@ Ci X/b ͡PB,M$G#xP .C3;&z8YQ> stream xmN0Fȃ%/~/IQ:F*E"02@bH͏GȘ!s[uY:9˅/|.|U_ݔOZ~̺1/ 2l~||}&ǹ/L'bFzNEؠtX !v$tS2WSK8Zdef-UwN: VBDXMvU=+OD6($8ㇸb+N==BZ!r5B<$gVZ}F=sӘ{~ endstream endobj 524 0 obj << /Length 262 /Filter /FlateDecode >> stream xuJ@O};/I$7 \` A+ RKAE;Gˣ#L2&" _ɚ3.5%LErHk.2J__(\rNorn2 h!P#a]a:x-}bh~mh!?0B~! ?#;CsŨ^JԴIPG^`M !A#`xBo~^}gt tچpYzLG%NC:k>y endstream endobj 528 0 obj << /Length 179 /Filter /FlateDecode >> stream x10 P ' [P)`b@L=Z22%8 b-[.Q]SAcJtBG,cV6gl -5%(͊n eBNQG@@x> stream xmѱN0`[,ݒG=NDSR$2 Ā #5o5,I'Ǒߥ^L/F>7y\״+:08Otx["XA%CVg?C鑭#]:r]=Y!Tzҕ*'&TzCii ZvJl<\yV&-bSd2]|3g̹b'ܻIIIe87P /Ū endstream endobj 530 0 obj << /Length 241 /Filter /FlateDecode >> stream xڅj@'*4)9 i HO={HHh>J!Gtv RT>ݙtTp z.=rކoZVyէ5/3WeTXD:" (ΕR]#a9Ri@G&IV>JOѯA@MlzG//ۢ endstream endobj 531 0 obj << /Length 218 /Filter /FlateDecode >> stream xڵѿ 0[IS?`A'qRGEg}>!Lrpu\[h}b\NڬJaU㩄+(eŽ2OAkgK ܗX] i!:h'Q]'A],c!Lɻ#mnaM endstream endobj 532 0 obj << /Length 99 /Filter /FlateDecode >> stream x3533W0PbK3KCB.c1s<-=\ %E\N \. ц \. ` 8 .WO@.dn| endstream endobj 533 0 obj << /Length 275 /Filter /FlateDecode >> stream xu1N@!SfDGd])L0Vj ͜pJ o0!$${\]ltq_Zm7YGxӶ"%sOTFdv U;=/9ңu@@ K\~*D@#x!@C@ 8:$Eh$@ A99S6<xqOVP?Җ#thC6C 57p+dI$8yFۊ.Jz endstream endobj 534 0 obj << /Length 186 /Filter /FlateDecode >> stream xϽ 0->B L+P+AA{G#8fl@~4I)yAyIvR V՞gTvI)uMl:;qNFw%Ή(0GKSIBS/J?, endstream endobj 535 0 obj << /Length 239 /Filter /FlateDecode >> stream xmнj0` ['2⡐NJcv͏GAH.D KVO+܄ ?k¸o\aׂyǦs `W;` f5Vgh轟R3cDŽKTᇈcDuQDa\|zvI'ٹꔪ=Eܭ!N艭0RLD.D&XB[Ny Rtsl^L6ȮOph o7: endstream endobj 536 0 obj << /Length 212 /Filter /FlateDecode >> stream xڍͿn0/P:2{j"BRJ%2T*bFVl?Zޤ~gC]Y=U/<㒧V|( -ٟnnx 2板~dW..y[lG͒0"0"&d ap-nDɏpJ&JI4:ŷHZRץ9DiKyʯ&[Ck:y endstream endobj 537 0 obj << /Length 202 /Filter /FlateDecode >> stream x͏=@FXL 肠БHaRK p= G ~bbagfv8# %A$DX_848yWglgl)VrOlDl沋$s1An =4>OB QEMFEA~V)dMQ9Kyj> stream xuϱJ0dA hZR^N⤎y>J!ci f '?k|p[sSCo;BܕLnws =7\?Pg$̀ȂB$È! U&c5*!N`)ESreX U&Dw5dd$T?2!DmnZ.{/yr endstream endobj 539 0 obj << /Length 268 /Filter /FlateDecode >> stream xڕ1J@'L#8$L!heRK E,xd:#L2 aX&3?9> stream x32ҳ4V0P0bC33KCB.K 'r9yr+Xr{=}JJS ]  b<]7C6Փ+ J endstream endobj 541 0 obj << /Length 90 /Filter /FlateDecode >> stream x32ҳ4V0P0bC3scCB. 'r9yr+Xp{=}JJS ]  b<]S pzrr Z endstream endobj 542 0 obj << /Length 179 /Filter /FlateDecode >> stream x= @GR^Mr0XuG*9Jrqc ,c|jy'zJ*,oEf؝N3`kg\S ݇  ClA>iEdEǠX$_dwU6ᛄlPva5\س@|4(B endstream endobj 543 0 obj << /Length 149 /Filter /FlateDecode >> stream x͊1 @DX'pwM˅-,JSZ(Z'Gۣ,-$O ,ov!VKݎu+בAJf+ٲw+ql9:'u00ÇP` =B]K(2_?בyS endstream endobj 544 0 obj << /Length 221 /Filter /FlateDecode >> stream xڕ0 :TG_K 9`H01@w+ɣQ;T1Ąd}8o=~RFc'~s<I3#=M~XVGFUGU(G5]N7Vs0"n ‚Yhe5 ؚ"i q+i!!i`CZB@WguJE 7XDMHwnmm endstream endobj 545 0 obj << /Length 201 /Filter /FlateDecode >> stream x]1N@RXzMw ( HPQ *D $*G({[XƤka}μG_SkZ_//魾Z}}<[p]~?o]FAbA~/ɱ"s7Kbn48d:&T(Aͤ(%Zb7{.;ӧ|iTe1U]MvۭQg endstream endobj 546 0 obj << /Length 135 /Filter /FlateDecode >> stream x3632T0P0R5T06V05WH1*26PAS Lr.'~PKW4K)YKE!hP,?R?`E1@lq ?\= e endstream endobj 547 0 obj << /Length 237 /Filter /FlateDecode >> stream xEͱN02Dŏ{SAȀbFHj?Z&!9$?c.iA M抌?h 4i#QwjuC55=դ]cb$ʩC5ʁ 1"Ⱦt lrqx3r?e#8fdS(N]|el2 2PE8Z0[G\ DVEbz endstream endobj 551 0 obj << /Length 114 /Filter /FlateDecode >> stream x31V0P04F )\\@$l Ir p{IO_T.}gC.}hCX.O 3o R@5@@@]\\\C8; endstream endobj 552 0 obj << /Length 223 /Filter /FlateDecode >> stream x퓱@ 8tm$ &:9'ut  ij!09䒯r№cFx3MP|Nΐdlq!XrlA#)" L#cS'^mr^Lr+¸J9q@\JZ!%ts7y"O&$gj&7]tgh,B} l = endstream endobj 553 0 obj << /Length 312 /Filter /FlateDecode >> stream xڽj02n#XOPKz)C:NM ?ŏ1U )ϲuwVJK%oݭՍV7+E놪WYztT5Orj|/5US<]bf Zs`q0>p7O\1 <^ rC]M\=)gpVK腁ANOlVpV![^tޕ?dc ,c忘/S$l6C{mF^r!Hts^J endstream endobj 554 0 obj << /Length 402 /Filter /FlateDecode >> stream xՔN@l6< 5wy&RheaBh< @9aY]H$;;3;y~ә볍γ-ݙ~իowFߛqEJVW_~xVB*=\g:Ի@]V}JU! endstream endobj 555 0 obj << /Length 245 /Filter /FlateDecode >> stream xڝj1 9沏y ݋k{쩇ғAћ=H؃߲CL`-lo =|oK.aN<|-dT^mlFmٌWcoqn> HɁX 98;[e"D}禇Mw,,#V j su몄=]}cSY}]w`O` V ~֖༶_%j~ endstream endobj 556 0 obj << /Length 200 /Filter /FlateDecode >> stream xڳ432Q0P0bKCK CB. 1s<,L=\ %E\N \. ц \. ᠁L$<Ɏ`2" Hz)ɏNɌHH3 @$+G0L0&D2\d 9iĄQ&$B3L.WO@.up endstream endobj 557 0 obj << /Length 107 /Filter /FlateDecode >> stream x3533V0P0acK CB.s I$r9yr+s{E=}JJS ]  b<]?\$ ( !.WO@.!8 endstream endobj 558 0 obj << /Length 169 /Filter /FlateDecode >> stream xڳ4ҳ4Q0P0b sK CB. C I$r9yr+Xr{E=}JJS. @-\. d` FL0b3Ŵ'Y`aedddG0=Y`3L~dd$1\=Y2 endstream endobj 559 0 obj << /Length 228 /Filter /FlateDecode >> stream x34037T0P0bK J1*4" \.'O.pK#.}(BIQi*S!B4ИX.OP0$$$6H#Xp63XP- e4CHlFP6Bzl{#? p{ְEsvx: [!)3?6|@b@1 neK6"Igszrr endstream endobj 560 0 obj << /Length 405 /Filter /FlateDecode >> stream x}=NPLJPwlV$HaRK ֏xQ8³Äw>7kU:YӍR=TYl-{?]#ފE\חGQT%Ty'"" D%ВdЀ(0Z@5QVD5Ǡ}۱(et"+Fr$ ; BI~鞜1PW!)fh=h۩﨏5`"!&7]kJZ.Yo'd-&$c%4>Cf~Ml3EHL1f XB ].֗0IAYeUÆ1:iCH_²Sq#F mnw',ڻ)8oĵkc endstream endobj 561 0 obj << /Length 542 /Filter /FlateDecode >> stream xڭ=j1q S #HHf'o3"T)Le[vhruAE{woo~yoy{WkO~=|>]u?~|nq!옟3OkddJƬ`*-DPxeZ&ҡ*H іP%[] !,_FX4&d e} M=a'P UIe![WI*fBA$Ul~ml!\T}ȆtlAF4BR<2aM;gES!`huhZFs }M!dy]4AMD3ΫM0Т-f1oKt `ˆFL lLK)]`̔.݃i5i?0d;ou4p筊䖿zOwx2yL>V 6@e|wZ|kd>D?/_зd8 endstream endobj 562 0 obj << /Length 308 /Filter /FlateDecode >> stream xڥ1N@gCA2 G`.@lI|&Rhea|x <Ć0̲ϼDmd`ggCګT״}Iz>\|ʼn|Ƣ=,VgGTaˊ+lvuLC! xr~`]T VIm o0/m+H-8٠HŴ̃%'b eA lR(~ FYtG%4xڂ~V *L ^TjCyĺ=LKg 9鏀-uO endstream endobj 563 0 obj << /Length 274 /Filter /FlateDecode >> stream xڽ1N0E"4>BHح,-D $(PR%>Z#l"WAg}{+nǚ^يXq{NiQy͖K9TꞺ=(te!LJBzpLa'=0s EsB5qgZoVVPJ}!J,D;'^Ezdg|F WѮ9!!9&g1#&$| 3fkj`GsA?M[ũt }gz endstream endobj 564 0 obj << /Length 271 /Filter /FlateDecode >> stream xұj@ 3 Z+4fHS@:u(hyD оY~wW!7˩]%vβ˷<#Z qMUѨL྄Gc endstream endobj 565 0 obj << /Length 275 /Filter /FlateDecode >> stream xڍj0 e2hCI PhS۱CCZJf endstream endobj 566 0 obj << /Length 369 /Filter /FlateDecode >> stream xڭN0/K~H*J#HHd@uFL x?GVn*Pb;]V-YsZx]XDsV4a]4ÍzxR-DQ nŰQhk$"THtPpA|ANmCb=\I*WEI?AFc.gTET{H~?d&>CKF (,@aR7C;aʀ a Gi11X"bW t>XV MNq2вI3 :f=>;3 s\raj.YI]l!fq5; „sp endstream endobj 567 0 obj << /Length 210 /Filter /FlateDecode >> stream xڳ0S0P0b cCCB.ssJrW07 s{*r;8+r(D*ry(0o`Ie1 Xp( Ube0`V`Y1b`X@=p8 h=?zzu/a50,`t ih endstream endobj 568 0 obj << /Length 146 /Filter /FlateDecode >> stream x31V0P0bcKCCCB.cb%r9yr+p{=}JJS|hCX.O ?D PB1X/y`i؁A0za?J.WO@.3 endstream endobj 569 0 obj << /Length 111 /Filter /FlateDecode >> stream x31V0P0aCCB.cSJrW06 s{*r;8+r(D*ry(0o`&A(1` r .s endstream endobj 570 0 obj << /Length 258 /Filter /FlateDecode >> stream xӿJ@+ }s8@88O0X`e,,ME}I @Xabfn?w^ͧ{]]"kvfř{~zlu~]+\kv2HɎY@КѩY`;zjeRZ58J$}¤A/yB$Uީ>?ï~_8zѝn7wEf7a9j=)BVM endstream endobj 571 0 obj << /Length 198 /Filter /FlateDecode >> stream xұ @ ДBE j;:9: * nS:vc!K.!K| %)E!֒639-ij)UT US*]@cfWl:%uW+~Ž> stream xڽN0utKʼnnJ+ &T9}>Jc(;۲,Ȑ|>.Uu(Gko+.h+u #4Ox?wh6tRdD gft: sQģ_zm>rU"Q-Ø whJ"5v[\nil4r?:XTG2oJI~E⁦$lt?,m/p{" endstream endobj 573 0 obj << /Length 285 /Filter /FlateDecode >> stream xҽN0`W"GȽrON" & ㊁GiŏCgmfȈb}E)^yEd^Mqz`V|IƮ,on>f>A@BN j]D;hH Q1Q󍊶e7F8XxiVWE} ?r^ ;jfԠӪUX{#[t屿-YպvZmc|y'˿ \p [a endstream endobj 574 0 obj << /Length 184 /Filter /FlateDecode >> stream xѽ 0-y'06 ftr'uTܚGQ;祝\݃~ +0.0xH:: eOPZPwA%ޮ#r5 )&;3D"Z*rLD^cj&Uؑˈ^t;;jUxa|t-?>W`na o? endstream endobj 575 0 obj << /Length 296 /Filter /FlateDecode >> stream x]1N0E"\)sHR4HE"TjA-G\0hŒO?h,5yK%k5k(2Uof7Էrm>?^M{zjy6Þ1 (+bv`柀UJ"~# N>t%%1!*0jQAzj:ޖ> stream x= @ )2(I#XQr)uv! jc_13{b-lHlH\J@2$]kH)F1!AtG "Ù`*Coz_kjSӵrgFOT&.Y<,I(d&t^Pkԏ-b0P0+f endstream endobj 577 0 obj << /Length 199 /Filter /FlateDecode >> stream x= @ ir &H~@` A+ RK Ex )SHY,{| iP2(mc)}"lǨR.ft:w9X._nY#4RFH}Uʨ|#yAmܚ[+wcw蟒/sk2WVr @T" endstream endobj 578 0 obj << /Length 370 /Filter /FlateDecode >> stream xڝұJ@YR#d_@E),J--˂/+_#֙l XowvYcc3?4V?ip97ٰwήLg縮¼<>lyybN͍5.O/B{7UD) R=8[Q+Vj3ZIFuv[H1ZV'呢Q jI X5kKHH0ʱ> stream xڍ=N0F'Jɍ$,-D $(KI:(VnrR2|Ю%[o쌟f]s֚ڜcjsyazSۓ<}Ӷ[ݕiTu0Tw01T4"LBG `"'$$PƌDPiMB A-BsT'!Q(+Β[>5PK9NT> stream x373Q0P04ff & )\\@ IrW05 s{*r;8+r(D*ry(0!<S;SAX~0aT=(r * endstream endobj 581 0 obj << /Length 344 /Filter /FlateDecode >> stream xڕұN02DGR҅HHd@1#f(yw+R:Ш_e{X6\w ux]i_^cشmaeCxZPp)"b~8yxɘLXbj45NP .s>* ؈)Kr)׉4n,I4x\sf{4RQV:+uYPVbyI9Y4~جId2qd2+bx&u zIzA\D3|xwP@i-hJN* 7}?: endstream endobj 582 0 obj << /Length 348 /Filter /FlateDecode >> stream xڝ=N0&G/٠UV[EZHPQ *A-GR<_BO<nw P+~^ J n¾ww]ʭo1.|}~p S6Ϯ>cL3:'V<Z^O1{ ֚JDR‚& L.Zȴޒ?:3D 5 ϭ00322 d:ɨ<^˫2{U|vRMThD<<hU錩& (QX.]8񐐍p3d|+}e'C)ij'{=Lp. endstream endobj 583 0 obj << /Length 252 /Filter /FlateDecode >> stream xұN0Z,G=NDմK"E"L 02*[(y"3$9wYv1Ǔ]jO)i}2 KX>^ɯo7CɎ->*̤޾C0X',Phv@*(@w@+000@u h8rN[l@*( F``R_Og+誤;z endstream endobj 584 0 obj << /Length 328 /Filter /FlateDecode >> stream xұJ@YR!D +PGG&ŒufgT8Qju492iM4~Me6^{]^)<=>r}~lj]nUmko(O@ gwt(Z NG :ri_ќb%6'Uo)<`/2yI3"oEcQمgRrlM'}9HyHr/͉'cLܓdNq2;S-5vS&{/J3mRy'm$ endstream endobj 585 0 obj << /Length 361 /Filter /FlateDecode >> stream xڝ=N@rai{p"G,  * D h%7>EǼYCD ֳow~&Icw;38r\Yismz,a'ƦCt.27y%&jZ@'za Bl&BFdZ6( x$'j s1%3B17%WLI6laڳP\ "+TxKkX.^k3gC>v:ijE` I7xh! sO&sUSS{[KP+fj_bgVP:zO{T330k endstream endobj 589 0 obj << /Length 141 /Filter /FlateDecode >> stream x363S0P04P52V"CCCB.C# L.9ɓK?\ЈK(PRTʥ`ȥm` `P0C  Ȱ! 0`< `r W( endstream endobj 590 0 obj << /Length 151 /Filter /FlateDecode >> stream x363S0P04P52V"SCCB.C# L.9ɓK?\ЈK(PRTʥ`ȥm` `P?` @>@170 0|pcs3; XՓ+ xr5 endstream endobj 591 0 obj << /Length 185 /Filter /FlateDecode >> stream x3736V0P0aK #CB.3# I$r9yr+q{E=}JJS ]  b<]C\4 @C{-4;fҌP] A 0hiF4J˃i`ae/F!]BބA endstream endobj 592 0 obj << /Length 347 /Filter /FlateDecode >> stream xӽJ@ )Ӥ}EVSZ]!Vji(7  Orq|63`gO]!{-d> 9\d% c| Iq"!Y8O`Zƶ֌IRumnYuvLb\d_H׾\ƂTH3 I-sƫIaMUZRl,TʧXIۿa4Te* r;־<'l(u^ф W˝XÔ4ļ:Obn<*ߙ/nBn&_^ZV(,toJʤXXK endstream endobj 593 0 obj << /Length 279 /Filter /FlateDecode >> stream xڍAK0~ L+%x Ƀxr; Mhf7vӃ$QAgi_]Ǻ> stream xœN0 }>BЖ^*D$n@L(} I4!ϯo.J]TW#*oy|xK%z.x@GF D[,e@2Y]d=86jh֠f|5gNÓYv?NWJ)^xby LMIGUJGo'KE`mz%5q37]q$AvuD B$'$~ endstream endobj 595 0 obj << /Length 278 /Filter /FlateDecode >> stream xڭӽN0:D%8i H01 &`"̣Q3D6D,d~o.J5Kkzum&K;V^m=R]#5;x|C َ**ݑIF((a;+aƦj!hmqp&b0W>I-ۊDUjN+W42Y2mAc:Ch':dn4up!uU#鿺Ml|Ce24Ew{#޴?^ endstream endobj 596 0 obj << /Length 333 /Filter /FlateDecode >> stream xuN0/D$4~HRhKHd@1#8G#dl>+db?ݟwV,d%OWr})7b]Hw7> stream x}J0 9`^@輀e͢ ɃxR|> stream xՐJ@'KޠI  ēzTdh(y=F]lvAg.rS}g9+YUײݼ<-璱ZM&-W = I?(wta@.(BDa 4`j5,DeDIs_[_ +Θm$@ޑ i xu%2qi֥/+^' endstream endobj 599 0 obj << /Length 230 /Filter /FlateDecode >> stream xڭ@'l&o`MF,@S^uX`}}}+Sg6ػW33_f8'3]G4fnP)P/XF,|Q׫OQiSfNIس @lUlhmt 3OV GMwڰMmps$r1'RVIƐ4 9{ qf"1w{4ï}fc endstream endobj 600 0 obj << /Length 250 /Filter /FlateDecode >> stream xұn02XOr/@@`@J̀Svj }eNET6"%tlu:= (vH]z qqŀQG)g#O\FNcz4SzB%~|E}P Jw*,Ym3G†I4e ^aܢr:X|dwI沽%6Q!@ `rώ< j'~/Wf6ʎ 19 endstream endobj 601 0 obj << /Length 236 /Filter /FlateDecode >> stream xڍбJ@H0MMa!L!heqX偊>>>–WqƋJd횳7Ӗ9wK~j镼pGSZ֒dլMldPdg߆cl?MY'G-IXE&SbDof{ jp endstream endobj 602 0 obj << /Length 314 /Filter /FlateDecode >> stream xڝ;N0E’ { Q4DHLEJcD6)k;9>iVRVϢ.R'XQu)KR/oX_+n-DQ& ü&en[Z~ Cn#0)s0``_p`r*se(ڃ$-SnFȷ0a>2݄LcMp C~ޏ zpi6CB3Gt6Q:xF=fL}.Hysz)܀Eћ1()Qܗ6LY$\Vlv endstream endobj 603 0 obj << /Length 178 /Filter /FlateDecode >> stream x3332S0P0bSK cCB.S1s<LM=\ %E\N \. ц \. @?BAU2 J{{ H1?R @5 T BS00R (0f?`\=] endstream endobj 604 0 obj << /Length 130 /Filter /FlateDecode >> stream x363S0P0b#s CB.## I$r9yr+q{E=}JJS ]  b<]?00``E@Yr?H? #.WO@.6 \ endstream endobj 605 0 obj << /Length 110 /Filter /FlateDecode >> stream x363S0P0b#  cCB.#c I$r9yr+s{E=}JJS ]  b<]1GB" 1oqzrrz?pY endstream endobj 606 0 obj << /Length 190 /Filter /FlateDecode >> stream xұ P#tU u ̠;55DS5h>JC-8F4$"1iw_V1Ө֔Ĩ^r;ʖS P ߢ109Ӄ~%8{<3.1 `N<gţY(lJKQXo 4_`}Mi\ծ endstream endobj 607 0 obj << /Length 170 /Filter /FlateDecode >> stream xϱ 0 ): I}> stream xڭ0KHnB&N$Ltr0NUx4Gpd &&߯}j>]b UnBIJ9]! BkA > td# # :ګ^Ԅ/B/ (/)} f>,E,r3/FדG}oI\2i6C=,c1ҭ5yVvӲ{ endstream endobj 609 0 obj << /Length 167 /Filter /FlateDecode >> stream x3132W0P0aCS#CB.c3 I$r9yr+q{E=}JJS ]  b<]01?GF  ?0I@ `L0 " fsh'W c endstream endobj 610 0 obj << /Length 242 /Filter /FlateDecode >> stream xUαJ@YR7p4 ; BBQ8Ȁ/6e8ccwf݉JtXQhQ]X/X"Ν\Xl^bqe, z~zb}yJvC'1{<+; /̴cwz c{NDhHl4 oC _zeJb;? [tZ/s endstream endobj 611 0 obj << /Length 168 /Filter /FlateDecode >> stream x3132W0P0R5T0P07QH1*26 (Bds<M=\ %E\N \. ц \. ~TBNÉzH07ȃpI("0@"L|`z?В?r ~'W Bf endstream endobj 612 0 obj << /Length 180 /Filter /FlateDecode >> stream x3332S0P0Q5T0T05RH1*25 (Cds<LM=\ %E\N \. ц \. 0TH1;Ŏ!P d=%P^@{xH1`oR$`(rzrr;7 endstream endobj 613 0 obj << /Length 226 /Filter /FlateDecode >> stream xmбJA` bto+W1WZYUb)DQpvB$I 3g|4l441lf6ԍĤ[~x&5bMjr艺*R _H+p"VhXx&znP vDJpp8ML:>Q}mڌHC*t=c endstream endobj 614 0 obj << /Length 277 /Filter /FlateDecode >> stream xmJ0)9}bu{XГ* =ͣQ&li&fe! yJKZdF2QJ.JNOo)1y )18&>?^1]Sɖ9[2 G0:0()ƬL f D /F0H"Xx4pBeq[n$#i}Wv .|P;O05PّǭQc8uuWqUk@Yyz ޔxy, endstream endobj 615 0 obj << /Length 225 /Filter /FlateDecode >> stream x͑1@EXL (HHaRK v9G$8KDK7d#ɥ!M|::xǢMSGug c4ZV~B+\ωG`2` =n@+JV3AcfhFn ] 3|V_,v>l-Odp8뺭SU^*;]2" >e endstream endobj 616 0 obj << /Length 293 /Filter /FlateDecode >> stream xu1J@7Lbs3'0 fWL!XEa !ser%{Fccf?df8].|iKfׅ,ӫY&Ue5y}k??_L^PK;"Jbd([TOnO:PvS2PJ ~#݅w;14ZK-~-΋3z&ۣd*ިALʯR 5  Z0D+5 )) "׈k7r|,GVp(8b"U %|9|1Gla5׵3b endstream endobj 617 0 obj << /Length 304 /Filter /FlateDecode >> stream x}ѱN0KNJȀbF xFߙ|y~L2_ՄצZ^EvèC HZdV-dz@W%|k66@T1jڡZNkW~m4~(??%-D^VSAMn5+6ءZCb%c}Md#7ko}5bc!XO0'0? endstream endobj 618 0 obj << /Length 228 /Filter /FlateDecode >> stream xڭпjAY7y;d WBL@#\"7B\<)2ůet2I,%M%;]݌ōg9ە6q. ۅ7/MZ]:z _N TMVAmm*[ TA\B !,hAS-/tX;φg/hlOg2']=y^ endstream endobj 619 0 obj << /Length 300 /Filter /FlateDecode >> stream xڍJ0)=rymn.u{֓=(7ۛћ04ΤA($$eu<Kܟa9o s<*ƙ{uvJggY}Ow:[mNk*0lI V> stream xڥԽN0p[,y`?YP H01 &`dcXnDzl^"7fX27XpMo\aa~}7)U~êiC`&C8.)R%CJhx6&*Zi\#˼Iw>k endstream endobj 624 0 obj << /Length 467 /Filter /FlateDecode >> stream xڕAK0 '$@΁<'(( kg{46/Y:;I^^w4ݟ2w DdLgMndW@fHߧ@t`1r :-i>`rAvSgM  _l/3F|'mx5l;iVʷY"?IiQZl7_ٚ^JC.jKP;W ;[+7 endstream endobj 625 0 obj << /Length 320 /Filter /FlateDecode >> stream xڅѽN0> stream xJ@YrX˾$n@V0<'((Pl|>J!®3Y|vBIXڙu=:7qk*P%^q`yo+,oesk??^]Y>8;{fkN61>Qc |}tT:PCr53yP]$p *DH0#}(X ](Ah9ڧofgܧPGR> stream xuJ0Ю2 c9=yOQPQaly>J!/iv^t%fTe22J&쓥>t^٢`L3swŋkx)9~fRP+ A \BmD [UV\GPM %DZzij8F)j_5@ jWtgVu TkݗA wra`} =UfŰA>\0(z'ATNjoNΚ ԨQ_p{ٗ/ '])WTG*"ݓ+-KyQՊ+_ը) 5 mUANxc]xՎkvS ] endstream endobj 628 0 obj << /Length 308 /Filter /FlateDecode >> stream xmҽN@%$7/j869D ,ZZh^mer :?,wHف ;W.a[?uSct v^zNWOԺø{y0zg|EwPxlG"^OھIG(T5Rt"}8S$99.f px1I/Ȑ̸ƣ"$ ?7v0ɰfb}]+bD,X&ǣ ➉^IǝJᖐ 6pGdAJ98 <x)dKLqVg0Om/д endstream endobj 629 0 obj << /Length 427 /Filter /FlateDecode >> stream xmұn0_@ޠ v"ԡd̐2:u4GQ@D0{GRmj I"-C5S|Z|Tץ%rv}'+Y|U,,V_78JYo]թ+lh hswOx$eAMax6kvBFtԂ"ޫuSDQM489уNW*( rJҵ$XXnvy2ZVKdGM,.PuV+b!HXn5ms7jQ Y% xv dd=(qgꠜĽDz=Gz}iP0(z[)ܕh,_:R)"SZSceSbX;Te##I endstream endobj 630 0 obj << /Length 284 /Filter /FlateDecode >> stream xбN0?`ɋ߀ iTKHd@bF$@ 1DԏG#xj. ;_5;*K5Q:> stream xmN@ (I 8$jR$2 ĀR(y>m "C.lJ:P9iI/}Eь}.j>PQ6oզ+mǜ'[/ 4}x~pKscxh 'V,lo.1#΀a_\f@ NΡW\AGߣS4U{6g^-hTj > ȢV -ٮST0I ]"\_Cf[#t܄ Z搝9Nb{>D^>0 endstream endobj 632 0 obj << /Length 243 /Filter /FlateDecode >> stream xұn0`G"7hcDDJeꀘcVb<#x̀|T3W7dp;][7i I {99/fSTJ%񍥸m*0:c74ZCS][6EwiߧW9i+}O>kv*l,YQ]Ɏ?~tTQs;6 X 9Y endstream endobj 633 0 obj << /Length 374 /Filter /FlateDecode >> stream x}ҽN087@(!@ dQ7[CAn'h YBC,!GgCA~x%E_ZR Nlǂ@SFUb[1+", Qk]2\B+ۡhK!Ѫ#Zl[oJ(}tMm҇Kp 7Vw),yy -%8^R1|M *$%+]՝ڙ\4 :K; endstream endobj 637 0 obj << /Length 154 /Filter /FlateDecode >> stream x313R0P04U07Q06T042PH1*T.9ɓK?s{*r;8+r(D*ry(7?P _?w} |PA m+ >0<`|xs{??P X€Փ+  /D endstream endobj 638 0 obj << /Length 415 /Filter /FlateDecode >> stream xڍԿJ0 Wb?Sf }@}T ( C-( SȴL> stream x=N0D"y"NJȀbFz(&v\ҧn?57v8߲NnlFnCN}~|zw8쑳tKf{O!U^ؖJgCUt ΅)᜛Bރw2ؼ f:*e\&>ƅc9*>0.`}ͫNSyb}(rk`wYjg/g0dh"c8+,i@`{8v4:_p_^hhs-!d&d̸NL FjʜL gZ#:{ endstream endobj 640 0 obj << /Length 453 /Filter /FlateDecode >> stream xJ@ 9,@i4IB1PAГ( -u&@Cfwg?INc:$dD/{,יnr.K.J}nM୾Y23*]嘱vw}d`Y "7+/ endstream endobj 641 0 obj << /Length 129 /Filter /FlateDecode >> stream x353Q0P04&  )\\ !,ɥ`lΥU()*Mw pV0wQ6T0tQ?``a% ,@ [r o ; endstream endobj 642 0 obj << /Length 338 /Filter /FlateDecode >> stream xڝJ0 =rՃE`<'(ɅD|Cɏ B5Lgd_jv+gJOM%.Z;1oDqt)7,T==>ߊb~v*Q,e+,@-C*ql`a[i!Anp ,]v ݝ<-ctnKd G,ׁ렷>nj/8da"@!bh 9ƄuA+Da H v䰉Y]GoآzS*5{u.xpO}|;`Z\K0LWPG6S q.>Po endstream endobj 643 0 obj << /Length 288 /Filter /FlateDecode >> stream xڽN0 uo.HCL cDhy>Nl;b>vlǿkj;ê'lkVX^_Z\RՒnoqX;/Q0 ɨ;q;@fa[q7mpᒤk`-zL3.&x|Mp}w̿q|Q119DoTG=27bc\,d pYG>v) xd( endstream endobj 644 0 obj << /Length 318 /Filter /FlateDecode >> stream x1K0<:V O8=Z)ˣR03FSzܷgUr EKWI}oO*Y_o.^$gzhՌĿ~Krj8ETVM+dZ!݆mi|`Ɂ=|͛6B+ U\h߳z+Q/.C_G9_ȮɽǴZNbR7̤_BHsx5:ys4=$?8Nm.ju>4C endstream endobj 645 0 obj << /Length 147 /Filter /FlateDecode >> stream x313R0P0bcsCCcCB.cARɹ\N\ \ a.}O_T.}gC.}hCX.Oy 1&VROhw=X~` c.WO@.F endstream endobj 646 0 obj << /Length 123 /Filter /FlateDecode >> stream x313R0P0bc C#CB.cCJrW06 s{*r;8+]b<]?0 31C=C(1'W % endstream endobj 647 0 obj << /Length 220 /Filter /FlateDecode >> stream x1n0?`-!8Q[H$2 C @ r`@yv]kߖ> stream xڽN0 ]u䥏PEF"D$02 (}o.NpN:cߴŮLC5ni`Ew\wX>Rbycj,7TS݆ seN; s;)䜔, ~8s'ڥV`jzcv [fߝ'%yAssJ`y#r؍ШC7NOTMUB 0r-uTN} ^ś ɋ endstream endobj 649 0 obj << /Length 201 /Filter /FlateDecode >> stream xѽ 0+[CP N(GIqpӎxi'0?w%;}< y=q> stream xmOJ0tQ&GH.t BЕ q.]( .d:73G̢b&/_m֧͹]ڞT>ƾT]k\٦I#oj۩kUp*[ݕT]=ng3!r"W(hL2@A.C`/0I qH1C%|b2P E|Qebm5R sPoeC<7ĹKZ?,0 =,) 1-^L4;3"Q{ ëx>$9V]w^ endstream endobj 651 0 obj << /Length 215 /Filter /FlateDecode >> stream xҽ 0+ 7 hjA3:9: *>Zɘ-tq\.OMsj7m9{P [R+D6ydbFel8G6F1&qy}ó-5i(KwEj1ob5+iWMO:E TiRgpг9iMu3R}oݘN. endstream endobj 652 0 obj << /Length 221 /Filter /FlateDecode >> stream xұ 0[b-jA( vtr'utPG:v]*u $p0@}y0΃#>]KlନLϧx1AHF%h\X\(>$2ɊXƫl=̷XU:/&uYju#]Y&R.YBQP%)RM4훸!Y>%~i KxwU endstream endobj 656 0 obj << /Length1 1440 /Length2 6583 /Length3 0 /Length 7566 /Filter /FlateDecode >> stream xڍwT[.E M *& ! $қH;ҋp"H;"Hc9wZw{f=3 HW$ TR@B| q?p$B!PP0Sc@-$ J I@@AHo % TmZ|@u$+ 4w p5 =f%?S{iS d G,ʼnwv)`UtvP P$.&$. : =?|N@[lP-xP ߆K ZC?ѱjohOgee WUur)?Fyy;ЋWH+( Eb؅Ͽ㫆Eb=~=svC? w0m$P ?L org';#e_v߀v;xA`; CϮV5 ;r;,y@¿p2j @`i[os. y`@a {m#ȟ2;TC A>AQ {J"@/@χ@b.@l>@[$ b O/I\o$ ID#_Y@\P(lMoׅC!1$D*Ⱦ&{ݔ&V._ 2ҧ4J' ([ٿіw97~TC/u7^',cpr%P]8 D26v]췽tNĻݣ,VSnnk*N׼K/hkAhk,rD}?k1:pExK S@[%|O_ ;{l!2%^zEfrIγ\7_{YP(5a֧*&4R[0O6o\-!OD:œ>=Ukk:>߷p}#VV|_ >bg yGMzOkqבPEN2 K 7_E6m /SljqUć-$B QjC<+f6*%U.u =)E.5r=\Io7ək=Ga}?f)Y"Hu:FnLl)2T^MqF\_C/ܱ!W㘂,&ЖfݓrNvcbf2:UBG"͖g¦ {J;*t}3*DCj $VR:p=[%Gk}i5.3  g$Z&OR=J&k0vJЗ[vnx9`^lsU∎/ƃWr!5BTۄع7=]}'ImCZC\0?."}F7^]zy4UyLEiݝy}C !m3Z`_vBMgwliJ*Qαx]'n۱b4_P˘1yrVd ~ Y(!Jyjʕ( { \c8%G 6pu^~Tic%#$̹{QS'`3pY{=ZayHa}/56 )<da5 'eV>5H!ђ]' 1VloDžz:*~jQzq[e&~G!6pCS5i52} _FDpY]W\pwp%7  !i2VbmX?2?;x6\힇8dQ 0F$t 0ǹeϭŖp-[l_w$>cA⹙ϤD‡w7,7Nn㝼~7ԯ P~û]Mǽ̦p< %O;y|̥7b%0y%åGrrzZ}F܈@}iWkUQy櫌[T5I= ?X+Y8-d0K6(;zdžZ=^R2skճ? :\o(b[;]#զ:X2ڞ-3 Bv~/܅Gs!7 ,aA#sBJӋ6DN<ߏH29_*O s1.@hT%nYB{Y뒹Y|ab+!$g"V; F#DewM`\ݬ4Ӿp뛬cHl1T9r_bT%/) ܛ`u"͆t--T#_uko޹sg.LEWR'G3FcH>G5m(y­.{d%EEO8uϦ37w 9Y'视ޒ X]|a .TY HO)#ջC2\ ^dVO!}nKJpOMT*!NxÕ维!aojMFzA j+ O4)­.O)3lKF]mCҫ{o]UH2%WuxW fH+;?|+9Y&h4,eUW[z7)MY|q\tG&ApF`B~Whw}hWaPIcMV2rR^^oqtk?$>3jۗsqy9=^Fi۟UDӬ8,`'HY8n'+5*e죭RzFCĈZyu-N.tՠW*J}tRRŹ=a bem=$ 6^݂?["00Tb$ Y-+`<1Od8Wٕ/pB' z_2?!8_)S˝4::5_T߻1cRtɏr؇8^úVd߫\Zjn Q# #zhRͧ F֏4OC}9RV81x|Z.MFun[2Nnb3́M I[kU]1eb-?#+7I (YZ.iOdžSnF%=gg^rCܲrJ dU,%Y]4 d_o%_nD0˫iҫY%Lp*M xLWQIt%ό10J%ӝÖJрD~_fߋh?hx8#\mO{W~4蛣?EsF5&.%u{I:x@QȒVL=]2EfT~T/ w ؜Dsxd!rH𵡁dͼreӦs9;{/pNޗ<(Ξt&)ieS1RsoKx-: OO$lz/a>9hTꔲG9%9K})p6[ &{%?<ꉤYP&Ҫx$Vr~4g5}-]{ł‘<7kq?Buv|ݮOQb"VVblR+h`%O[=w7kaf0稪~m\Bg52uJ+Sƨ` w܃"2$͐F rvnQ3M6^G)̞ͭӴdA4nnI7;z>.] 4Wcc~S]*8/:߀mɷEL"=E2yħƩJŕ\ڮ"qdaä\Y{W X1a! &7,ur ;jpj:~!)}GHSzg$u0 TzO'FbZ+zs}P𝯊iQygjGCtt0O[Ng @^ͫQ>G9E#@F", A;xH+ qTeZ`^[yUк׹ؽ>Q*xu\FpV(eǔh-G%еY^%yke~g ^E)s9 ".Ѽ`b"$/A"w5GmMʘ~oO}LTf 2}^:'~آ-MìYZ`/4f=Q_2fKc+;Ař>*Ik}eV4K39مE_75D:1Kv.dÎU{#_80BNw9$ݖ2|n#4^N¥^ n1 O3>: endstream endobj 658 0 obj << /Length1 1383 /Length2 6141 /Length3 0 /Length 7090 /Filter /FlateDecode >> stream xڍtT-);"AzwAtQ%!@hҫtw HPH{{c72Ɨo5k=ad"AA"ha1<@CXLJܦ0 or!ט&}G.1 <ED /En _>0?@LNNFw:@Ap>u r 0(%hMrPxЎc~ 0BL&B 0uMhO \``(:כLtH(YAD]_` 0`p= 0'Ơ 8↸y`. kAj !n"n0_#*s}Zp GOK:p08w7"E@$ŀE7BB~ HP?= QP?TL ; N0Q0 Z{b߿߬A]C}ZV&wL]KHťr) U@'Uniհ7e-?JoN W..|G spYw.7dzP:hе.>F] 17e2jpŀ]; |pV8R F@~9L\JB@^k!KI|Įb~k *GS(_7z$gk7") vG[ ׍kP( &FBBjX=JX4~a9Tq2uV D-y-߱<- Iھ^>I0Ƕξg{Y䖰-yOe) h<{1}e a[.&c̢Oqe`Cf!@:>bM$#Qc*{{Tܭي fxG};EqƧh5cd67 ͆{LINyJDbD"E7;7!DؕL1"{R ؑ>#Ά[CQua\~<^zD,GaUd1ԙ:p?g";F 6܍AJ5ɹdOZX Yb82Z$Xa?gVoyE}ڠ+3+R̓͢~Ir8. /|mĝA2MnDOCʷ#o "e&./hr &cXmz~o z4(ʧ'0P6%œi;r&9AO^˞]v3Ր1`AvvXy _܀2!;JAsw87">A~Py-V9 ǀgcS&L7C!x=8ӌz mE` 60!6é+7iǘsڍ{hCU}xT- Y#Om  d"EwIfk]iϹYE8M"~z?q 6۞̝I66R?*PsD-ȠQw_]i)MUtS˰h嵡8c%w m#w[2~b r.jp٥oX'uS f\ֺ$=?Ma^bY5_UuNn>/jnPOV? ƣ]DDΕFL~R~š2~nQtF9k?K,4A,9qprCvDƍHȋxXsx*4Mߨ=^̋'t|T#bLsδSN.FDu Oݱa<0zI |:sʊd2˒~Nm`㘮@zF}M1Gd+1+yJbTBou dpth8# ܔc4ӄ:$q\ ٠S$ "P*u yWƨ] 2IC ?1sb@8$ Msnc8txYtpXW{,Έ(='ڍKkzݩ|T\-z8jaڈ;9Pԙ҅ɛRܗu,!d/D@> ((Pӿ0 LߩF$Zs6E8 MBKR+)S Z$R7kL/\<:XO1s!523?Q 5ǒ|h7n<n ְm̌ xǻ!AORMbR\E zJ]/_O$_-V/?jY2WNC\)8+VOT*C[;ѕrkNxM3| DL,sSٳp5c ݘD > A]B7&TY ξNXn9SUu?%!p~1Ke1=1N:ß=lHFF g2T:ᾌPaX-)'t(_Nv~<1λF𴛊uY&g)/6NwWQPmNKZd$Ca=ѧUHZl Jb7m̻xrU^(5Redm+=V?}bq%uC%yRoB s)i//Kme$xnvStڐvU>h~:'qmZ J|Ԓ3kuS'_lhw{9}I']B0bG F|[H`W,>km 'g6f0P+]SctRڵ bzsotϣe rub5߅HL,(bg[& c.]g_Wœ)1L[8z6a[I94N“eō`XY\zVQi"֍⣹▞oAT6wX9UȍXb.(@kef tR΢;E[NH3e@9L}cWHk;Ň?sNU{^`quE: 6+@7$KGt EK;\:_y6ʗ' U@,y+WnH@m`?;5=wj.*IFmM~H@Q+2iC6E[l,ŘL=rET6vPߞg6] 6`{pf-p&ep@II1U: !608$BqXʾ1Bz%2r4ȔL?5+Ĩ6v9o73+CG/HWELA\=%=7(e0K1ѲRRGM1n`cg%KhCnޔ3EZPdM⯓ԽDvlb~7rTT)L xn e6-Yw7PG~?ܢ>Rz av(v5˷''tK%:u':bX6P}+KFo8y<+]ܬyÝ :AjT骷O3^I+VxjW_n`)쭹 сq- &v5g|еFvתOƚ6K-x>rdDOg߂=I/U سe3` n i ~wXg<Ig_8=tm5'-*2}~HT87 CοkUA?i xֈ}qJ`zM"9ÕGv̇M8uxz$! 7:|^z)pF$$0ymTbkEm4j5yo_nóoej]!箈X](x&55wOD# .tqt9d-7Й%FEm;U nBؘ>(+Ukr20-~`VKS91=bT#kSqw`~G$C8+KsyޘЩgjwgDoly,n 5?Y9լt-QumhB.(ԨQUX2%iK^ ^zvfR(Gcja\TA1SrFw,8n [B8Mz☤M::9EHGQo鱱>JEsZYem9vݕDjt0}:( PN&ݲa Ϲ0&Ϸg8pTvyT\ŽOekć^QK~6! X$$HpQ#*quWJ>Grrho$Ҍ!o@okj٨S_P(n$lӭg[43Np0mRhzɺ*jک?!I- Ez+WF&B36`fbIQiҒ73|$_o*Rl)n=dܷ@Vhy;imwMܒ+r=l"Jk39—2_% dW*y##+bc\/mŋcGg]FITR=[0v&,eP1 u[݇;4kѣ-3& 4?V$8jG*e q1gև͹E}6p#:Ev7?--JH P& hh:^Nt.P-Z1x7`O ja.:uZƚ}u蓷Q(s2lP\ ̦ x%n=kq)O 5bc?jD &^5HiA9fn6N ǸFoYU\DMi8nvU<ɸ6eJ/1Tnt1ٯ?^HqW{fzo39524}!urP endstream endobj 660 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS 9_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZK endstream endobj 661 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> endobj 170 0 obj << /Type /ObjStm /N 84 /First 768 /Length 5565 /Filter /FlateDecode >> stream x\ko&5_c7 U,Xvu|aQ8ןr{7Тm})ߞOerOub|S":4BSnOx@H-ɂ$R&ɞ!C!MTrjmdW/rH)CRu3AQfΐe3"T}SFNS q]%HPJD'B##ZC|Cr>Gfj̇$OOzUBh- a:H,ABe bs>ËdNv)6n܆.[;oѻ;t}~%,)o٦nzCҠE^7l6Vu6( *.J P $ `a͕(w.10/L$ ˱o:,s 9nX- P TA #(P"g rx⌐4@'x 3,W%!8b׀@ -h}H])&tNxSW: :vJJ'7 m)Hܝ:}޾yݖxt^D~wf=G@3' @b;lV"g% b8ef"O򞹉+aj*0mCV<.Ga2h.Al3ZQk0E Y+RÌcv|?m-YF\nu*d; (vXFl8@jJ- uPv5Ӣ8 5ҠIm4|XMbixz@°C%ftq!&bG<-ΏۃRo GѩK(-~)e0CÐKP.Usd0m78PV#:AyN9Zr;C B2(xF! CB!CBakhHB^fM(2 uC2 "^A_@ "Ġ/B c {v+]џ X{1cWxClե$ G{fVʲarUntTg@+ )D'I2[R zO'(*) 7BDz[[o m`-P Bz[(Xo  ,tY$I <Gnsᑟ@\c]wa]|#q` uoLÝwI \m+\HQŽ8Ƴĕ,h hy*xr(\Ig'TӟOXAHy˾Ag%c4;  BV&Vò[cU9HϪri* UBVYUgU9QAh%g%iB%iB5R(Uhe@ H2 RAʀD*ʲ3^"e@` HR{Ԧ&Q29[&)Jk0HY ))Hi@/H)M!#eXTɎbeAbF'Z3l&#ַJf 5[8lɒQ¡mphC-2[8l`-L`lp0UĆ~^=81?x5a~S&ϓY<} ch Y =0S1{:)ń%?SPY|5J'fcC>B@ Kk!3ɹfR[!`kYKNQqٟY'rho;|{F;B|2Z[EXJ41%@jV!rXzp*R@dU<Ȇ>cbmLS2Ŕ ~1_L"XL-b>#OA؜Fw8-> +*>b,u;GqE\zhf/mvd9{hcι/eIۣI.n'4IN 0|rcb-!PgN-UR.%׼/sNkײw4-α=t%CNKcLriEH?`2.`_T\=|;8cx*Zo;N6z+c 'qvP2)d)N SWJ0䜳 9+a98AʄDEƃd,4[$˷ߢ:ğ>(*?[TEŪߢV +SҸ4R)Qɐ9Nq2d!s lgC82J:JeY^VgJ5mN#)&xȿÌl8Xr9ؗK~s 8*EvL@p$E!_"AJ400ݡdI~Hk#,CE@ 9R!ȏvS%jy@H>' 'v4 &!) \eabIAܾds^k4eK/&z8TZjO5 $%uCknkMd۾.₝p4;1ԝ'޾gc͔>-t)_Qĭ0!Q7A ?Y Y ? 5N,gTqFhhQQ #*T c1&ДySET-f{,:fo5kfF_ޠmޠ8%F8%f8%f^uZ:w;tl'?sN)sJ!/%pO5K7&$W!&ACRVHۉpJ ,-`%}Ykc` ƻqI]=XO8WjjEkl^Xw/ͥT8ZL .3e9u<+kpJ$oB`p0ep#D%JzѥZ[R) %9 D*Rٮ!24Ȯk_L r^o]+5dٳNٳN۳N۳Nc۳Nd7ݢ \mU|U~chDi s6"3 e.;#^1|-%Υ3ogmDpݝ7H( X{"3}f<7g'Dv=~O3}ie 3[vї618&vĎq'kޢ߳)j58+;0ڑV]N*9D7GP]/'rT%C$]i+,g>Q@Ƨ$2`̧։OlOlۭěɛ==7z(nP W/n<-KkYˏ/}^VW'9.!#8Q/_?@U GWo>y\wϽ盗~5b/Aȋ߆u&KO/9>Aco?E>,fy.rgE^E,DQ^_˛t@_5m* ԋT2@=^ޕVh}yߣso@ Zguœ0-iRL'NJ7Ŧ^該-d<_kֺpZDzp=̮̓;?BWw3v}!+o@˒4$+MX%v`xPnkeVNVo8kS9ϛŐv6b-4@x1kP/&h߇t%y#C85j6d3EpmԺ\G-T}OMnp}1jW̶]6ۉ(KpM 8zۗϿy{x6->O~iPx&4HHi˿rS͒Ů oRְ{&6I< CL-~ +O'9,ڲ'tIfτߙ"6E]yKB}&ўLZ%ʐmhy'#Z{_ֳ2wSj{x' ͤC堭TKzzW,EhDۼj/ZբY [~߲S+dMܐ!fGWyo_],F̰}bQʊ;5wa|M))?e endstream endobj 674 0 obj << /Type /XRef /Index [0 675] /Size 675 /W [1 3 1] /Root 672 0 R /Info 673 0 R /ID [<0E9ECDA2D1AF83463B7D50479B9F416A> <0E9ECDA2D1AF83463B7D50479B9F416A>] /Length 1992 /Filter /FlateDecode >> stream x%wOW0z:žaĎF+lHhz[! !Z(/ b{νsys{ ^ p#jEBN-NjEQ+(ʫZDfQQ}"JkV6񒨪je9DM5W+B'\.[hZyD^OzݰZDAFjE5T(*@b(!J( Rn3S-'|usB=<ԛVXG,ZZ gc_MD[k.R+FTߥ\˂O+_ihAWf¯B *Ӣ1Ew/YM5Vt-h%dhAHIt nEt,J&Ԅ $Ձ?XAh5ƏC,S }wBa0@A20d 3Q#|EC}[8a: R߱z"B#o=wRn Loׇn0c "`v-x9sy7a~mx ,΃E9aqAx,IFQfX ?Cm0+* ko]X6hZæ>YEA:saϰSlCf`6. {°*pH=8|GFQƱ8|V`ogbpUVWOጦz%k? bF~WpMl!Bv[ipw[ O(xX5_iߵ7<]*EXo0fe!HX>*kawM 9n+BA-'aXnws  VPn E:AQ *1Jb+T|eZATG( 1*(V[ZU;ԇ*av ?,!ìV]]H߬޾^,O'5}@cJ5ѠMA#Мj-XFkZMQh,ő9OZ[:huK"h&C{˒D&U&;!wo X0@ )Vf@ r$U7+vkK0` X2䲴0L`sD&iiXl3.E)=m0uԴf?CӺWv;̇ὒH-^+; vQˠiʓK*v>P5xIWS.DYsu~B]} ~# 5Y_BSmI]k> յ%\,[}szx<ڳ.:fl:׉RKfǻd[;izzWSϊzMBܟtn0եC)nVkZ#Qt EsH)7ZxRcgB;ԍ@ jM|vdʽ(jA4V5MO}5ͭ[1(j7:hO:΢?&N掲N7 endstream endobj startxref 187995 %%EOF Biobase/inst/doc/esApply.R0000644000175200017520000000216614516024026016427 0ustar00biocbuildbiocbuild## ----message=FALSE, echo=FALSE------------------------------------------------ library(Biobase) data(sample.ExpressionSet) ## ----------------------------------------------------------------------------- sample.ExpressionSet exprs(sample.ExpressionSet)[1,] pData(sample.ExpressionSet)[1:2,1:3] ## ----------------------------------------------------------------------------- rbind(exprs(sample.ExpressionSet[1,]), sex <- t(pData(sample.ExpressionSet))[1,]) ## ----------------------------------------------------------------------------- medContr <- function( y, x ) { ys <- split(y,x) median(ys[[1]]) - median(ys[[2]]) } ## ----------------------------------------------------------------------------- apply(exprs(sample.ExpressionSet[1,,drop=F]), 1, medContr, pData(sample.ExpressionSet)[["sex"]]) ## ----------------------------------------------------------------------------- medContr1 <- function(y) { ys <- split(y,sex) median(ys[[1]]) - median(ys[[2]]) } esApply( sample.ExpressionSet, 1, medContr1)[1] ## ----echo=FALSE--------------------------------------------------------------- sessionInfo() Biobase/inst/doc/esApply.Rmd0000644000175200017520000000616314516003524016751 0ustar00biocbuildbiocbuild--- title: "esApply Introduction" author: - name: "R. Gentleman" - name: "V. Carey" - name: "M. Morgan" - name: "S. Falcon" - name: "H. Khan" affiliation: "Vignette translation from Sweave to Rmarkdown / HTML" date: "`r format(Sys.time(), '%d %B, %Y')`" package: Biobase vignette: > %\VignetteIndexEntry{esApply Introduction} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} output: BiocStyle::html_document --- # A note on `esApply` {#a-note-on-esapply .unnumbered} `ExpressionSet`s are complex objects. `exprs(ExpressionSet)` produces $G \times N$, where $G$ is the number of genes on a chip and $N$ is the number of tissues analyzed, and `pData(ExpressionSet)` produces $N \times p$, where $p$ is the number of phenotypic or demographic, etc., variables collected. Abstractly, we are often interested in evaluating functions $f(y;x)$ where $y$ is an $N$-vector of expression results for a specific gene and $x$ is an $N$-dimensional structure, coordinated with $y$, that distinguishes elements of $y$ for processing in the function $f$. A basic problem is to guarantee that the $j$th element of $y$ is correctly associated with the $j$th component of $x$. As an example, let's consider `sample.ExpressionSet`, which is an *ExpressionSet* supplied with Biobase. We will print a little report, then the first $N$-vector of gene expressions and some covariate data: ```{r message=FALSE, echo=FALSE} library(Biobase) data(sample.ExpressionSet) ``` ```{r} sample.ExpressionSet exprs(sample.ExpressionSet)[1,] pData(sample.ExpressionSet)[1:2,1:3] ``` Now let's see how expressions and a covariate are related: ```{r} rbind(exprs(sample.ExpressionSet[1,]), sex <- t(pData(sample.ExpressionSet))[1,]) ``` A function that evaluates the difference in median expression across strata defined using an abstract covariate `x` is ```{r} medContr <- function( y, x ) { ys <- split(y,x) median(ys[[1]]) - median(ys[[2]]) } ``` We can apply this to a small *ExpressionSet* that gives back the data listed above: ```{r} apply(exprs(sample.ExpressionSet[1,,drop=F]), 1, medContr, pData(sample.ExpressionSet)[["sex"]]) ``` That's a bit clumsy. This is where `esApply` comes in. We pay for some simplicity by following a strict protocol for the definition of the statistical function to be applied. ```{r} medContr1 <- function(y) { ys <- split(y,sex) median(ys[[1]]) - median(ys[[2]]) } esApply( sample.ExpressionSet, 1, medContr1)[1] ``` The manual page on `esApply` has a number of additional examples that show how applicable functions can be constructed and used. The important thing to note is that the applicable functions *know* the names of the covariates in the `pData` dataframe. This is achieved by having an environment populated with all the variables in *phenoData(ExpressionSet)* put in as the environment of the function that will be applied. If that function already has an environment we retain that but in the second position. Thus, there is some potential for variable shadowing. # Session Information The version number of R and packages loaded for generating the vignette were: ```{r echo=FALSE} sessionInfo() ``` Biobase/inst/doc/esApply.html0000644000175200017520000233657014516024027017206 0ustar00biocbuildbiocbuild esApply Introduction

Contents

A note on esApply

ExpressionSets are complex objects. exprs(ExpressionSet) produces \(G \times N\), where \(G\) is the number of genes on a chip and \(N\) is the number of tissues analyzed, and pData(ExpressionSet) produces \(N \times p\), where \(p\) is the number of phenotypic or demographic, etc., variables collected.

Abstractly, we are often interested in evaluating functions \(f(y;x)\) where \(y\) is an \(N\)-vector of expression results for a specific gene and \(x\) is an \(N\)-dimensional structure, coordinated with \(y\), that distinguishes elements of \(y\) for processing in the function \(f\). A basic problem is to guarantee that the \(j\)th element of \(y\) is correctly associated with the \(j\)th component of \(x\).

As an example, let’s consider sample.ExpressionSet, which is an ExpressionSet supplied with Biobase. We will print a little report, then the first \(N\)-vector of gene expressions and some covariate data:

sample.ExpressionSet
## ExpressionSet (storageMode: lockedEnvironment)
## assayData: 500 features, 26 samples 
##   element names: exprs, se.exprs 
## protocolData: none
## phenoData
##   sampleNames: A B ... Z (26 total)
##   varLabels: sex type score
##   varMetadata: labelDescription
## featureData: none
## experimentData: use 'experimentData(object)'
## Annotation: hgu95av2
exprs(sample.ExpressionSet)[1,]
##        A        B        C        D        E        F        G        H 
## 192.7420  85.7533 176.7570 135.5750  64.4939  76.3569 160.5050  65.9631 
##        I        J        K        L        M        N        O        P 
##  56.9039 135.6080  63.4432  78.2126  83.0943  89.3372  91.0615  95.9377 
##        Q        R        S        T        U        V        W        X 
## 179.8450 152.4670 180.8340  85.4146 157.9890 146.8000  93.8829 103.8550 
##        Y        Z 
##  64.4340 175.6150
pData(sample.ExpressionSet)[1:2,1:3]
##      sex    type score
## A Female Control  0.75
## B   Male    Case  0.40

Now let’s see how expressions and a covariate are related:

rbind(exprs(sample.ExpressionSet[1,]),
            sex <- t(pData(sample.ExpressionSet))[1,])
##                A         B         C         D         E         F        
## AFFX-MurIL2_at "192.742" "85.7533" "176.757" "135.575" "64.4939" "76.3569"
##                "Female"  "Male"    "Male"    "Male"    "Female"  "Male"   
##                G         H         I         J         K         L        
## AFFX-MurIL2_at "160.505" "65.9631" "56.9039" "135.608" "63.4432" "78.2126"
##                "Male"    "Male"    "Female"  "Male"    "Male"    "Female" 
##                M         N         O         P         Q         R        
## AFFX-MurIL2_at "83.0943" "89.3372" "91.0615" "95.9377" "179.845" "152.467"
##                "Male"    "Male"    "Female"  "Female"  "Female"  "Male"   
##                S         T         U         V        W         X        
## AFFX-MurIL2_at "180.834" "85.4146" "157.989" "146.8"  "93.8829" "103.855"
##                "Male"    "Female"  "Male"    "Female" "Male"    "Male"   
##                Y        Z        
## AFFX-MurIL2_at "64.434" "175.615"
##                "Female" "Female"

A function that evaluates the difference in median expression across strata defined using an abstract covariate x is

medContr <- function( y, x ) {
    ys <- split(y,x)
    median(ys[[1]]) - median(ys[[2]])
 }

We can apply this to a small ExpressionSet that gives back the data listed above:

apply(exprs(sample.ExpressionSet[1,,drop=F]), 1, medContr, pData(sample.ExpressionSet)[["sex"]])
## AFFX-MurIL2_at 
##       -12.7935

That’s a bit clumsy. This is where esApply comes in. We pay for some simplicity by following a strict protocol for the definition of the statistical function to be applied.

medContr1 <- function(y) {
   ys <- split(y,sex)
   median(ys[[1]]) - median(ys[[2]])
}
esApply( sample.ExpressionSet, 1, medContr1)[1]
## AFFX-MurIL2_at 
##       -12.7935

The manual page on esApply has a number of additional examples that show how applicable functions can be constructed and used. The important thing to note is that the applicable functions know the names of the covariates in the pData dataframe.

This is achieved by having an environment populated with all the variables in phenoData(ExpressionSet) put in as the environment of the function that will be applied. If that function already has an environment we retain that but in the second position. Thus, there is some potential for variable shadowing.

1 Session Information

The version number of R and packages loaded for generating the vignette were:

## R version 4.3.1 (2023-06-16)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 22.04.3 LTS
## 
## Matrix products: default
## BLAS:   /home/biocbuild/bbs-3.18-bioc/R/lib/libRblas.so 
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_GB              LC_COLLATE=C              
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## time zone: America/New_York
## tzcode source: system (glibc)
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] Biobase_2.62.0      BiocGenerics_0.48.0 BiocStyle_2.30.0   
## 
## loaded via a namespace (and not attached):
##  [1] digest_0.6.33       R6_2.5.1            bookdown_0.36      
##  [4] fastmap_1.1.1       xfun_0.40           cachem_1.0.8       
##  [7] knitr_1.44          htmltools_0.5.6.1   rmarkdown_2.25     
## [10] cli_3.6.1           sass_0.4.7          jquerylib_0.1.4    
## [13] compiler_4.3.1      tools_4.3.1         evaluate_0.22      
## [16] bslib_0.5.1         yaml_2.3.7          BiocManager_1.30.22
## [19] jsonlite_1.8.7      rlang_1.1.1
Biobase/inst/extdata/0000755000175200017520000000000014516003524015547 5ustar00biocbuildbiocbuildBiobase/inst/extdata/exprsData.txt0000644000175200017520000032475714516003524020265 0ustar00biocbuildbiocbuildFeature A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AFFX-MurIL2_at 192.742 85.7533 176.757 135.575 64.4939 76.3569 160.505 65.9631 56.9039 135.608 63.4432 78.2126 83.0943 89.3372 91.0615 95.9377 179.845 152.467 180.834 85.4146 157.989 146.8 93.8829 103.855 64.434 175.615 AFFX-MurIL10_at 97.137 126.196 77.9216 93.3713 24.3986 85.5088 98.9086 81.6932 97.8015 90.4838 70.5733 94.5418 75.3455 68.5827 87.405 84.4581 87.6806 108.032 134.263 91.4031 -8.68811 85.0212 79.2998 71.6552 64.2369 78.7068 AFFX-MurIL4_at 45.8192 8.83135 33.0632 28.7072 5.94492 28.2925 30.9694 14.7923 14.2399 34.4874 20.3521 14.1554 20.6251 15.9231 20.1579 27.8139 32.7911 33.5292 19.8172 20.419 26.872 31.1488 22.342 19.0135 12.1686 17.378 AFFX-MurFAS_at 22.5445 3.60093 14.6883 12.3397 36.8663 11.2568 23.0034 16.2134 12.0375 4.54978 8.51782 27.2852 10.1616 20.2488 15.7849 14.3276 15.9488 14.6753 -7.91911 12.8875 11.9186 12.8324 11.139 7.55564 19.9849 8.96849 AFFX-BioB-5_at 96.7875 30.438 46.1271 70.9319 56.1744 42.6756 86.5156 30.7927 19.7183 46.352 39.1326 41.7698 80.2197 36.4903 36.4021 35.3054 58.6239 114.062 93.4402 22.5168 48.6462 90.2215 42.0053 57.5738 44.8216 61.7044 AFFX-BioB-M_at 89.073 25.8461 57.2033 69.9766 49.5822 26.1262 75.0083 42.3352 41.1207 91.5307 39.9136 49.8397 63.4794 24.7007 47.4641 47.3578 58.1331 104.122 115.831 58.1224 73.4221 64.6066 40.3068 41.8209 46.1087 49.4122 AFFX-BioB-3_at 265.964 181.08 164.926 161.469 236.976 156.803 211.257 235.994 175.64 229.671 222.287 181.522 177.979 105.778 223.689 183.585 192.221 305.567 300.689 146.081 142.913 187.132 170.583 133.279 187.407 144.784 AFFX-BioC-5_at 110.136 57.2889 67.398 77.2207 41.3488 37.978 110.551 47.769 24.7875 66.7302 62.9876 46.2777 61.8372 54.7061 62.0684 40.6705 53.2711 107.237 119.666 24.0654 98.8425 92.0846 53.3866 52.0164 65.9154 75.0043 AFFX-BioC-3_at 43.0794 16.8006 37.6002 46.5272 22.2475 61.6401 33.6623 31.4423 23.1008 39.7419 35.1225 28.1342 20.6908 27.6193 40.6454 35.5333 57.5078 41.1337 79.9829 23.4953 51.5609 48.1247 31.8358 29.9264 37.8611 60.4772 AFFX-BioDn-5_at 10.9187 16.1789 10.1495 9.73639 16.9028 5.33328 25.1182 38.7576 31.4041 0.398779 2.98167 17.7506 13.764 12.9047 13.3902 -6.86196 21.5091 3.10536 5.95347 5.66012 52.9338 15.7267 15.2116 -5.35282 13.1884 10.0385 AFFX-BioDn-3_at 751.227 515.004 622.901 669.859 414.165 654.078 704.781 472.087 456.496 601.335 674.334 540.255 364.233 620.004 569.133 520.495 401.43 757.495 595.908 381.23 501.744 659.613 590.156 461.23 367.433 790.943 AFFX-CreX-5_at 76.9437 40.907 62.0314 54.4218 29.0704 19.5271 56.3164 36.2044 34.4118 54.0765 48.572 42.9071 34.743 28.1586 48.5457 36.3279 57.8427 83.1914 66.6783 24.8852 61.9548 58.0325 28.7707 48.5346 31.1489 72.4567 AFFX-CreX-3_at 105.378 97.4932 74.0299 54.5277 54.9849 58.0877 96.632 52.731 35.4588 60.2642 90.2266 72.4584 46.9686 49.6642 65.2693 80.8682 53.4837 108.545 136.044 43.8619 49.8289 88.3787 91.5539 40.2298 36.2151 73.5309 AFFX-BioB-5_st 40.4826 7.45801 19.4069 20.6246 25.0496 12.4804 21.9102 23.772 24.184 29.7032 19.6438 20.6693 51.7133 16.4545 17.8828 16.4829 6.53565 42.4696 41.4669 21.6548 34.6108 36.9725 16.9959 8.39896 41.0271 21.088 AFFX-BioB-M_st 58.1706 15.7926 25.1962 46.5057 15.3157 16.6833 93.1759 -2.286 9.00485 13.1253 7.90277 24.6885 30.1908 27.6512 17.8083 12.1731 26.9214 40.3873 17.6882 38.31 18.0297 28.012 24.8743 17.7428 34.7923 40.2213 AFFX-BioB-3_st 257.619 113.69 187.796 210.58 137.39 104.159 296.287 110.536 123.767 165.21 172.95 124.837 133.826 125.316 132.419 101.991 204.75 265.771 317.314 88.0773 156.179 249.872 141.803 117.473 126.114 210.561 AFFX-BioC-5_st 129.056 74.6095 82.8271 101.534 83.4986 73.1986 110.631 116.742 149.329 113.737 74.9809 108.469 141.43 83.1231 54.7312 83.9226 103.289 140.76 177.441 75.8888 87.3699 130.509 91.7096 77.9277 129.627 91.7803 AFFX-BioC-3_st 61.7251 50.2372 61.671 93.2235 38.113 51.0869 69.0242 51.7352 48.4943 66.3324 65.8276 45.7015 74.9533 62.1944 84.2989 48.5502 74.191 74.7106 112.964 63.2349 37.4892 69.9946 42.8123 63.8059 50.1246 134.588 AFFX-BioDn-5_st -40.9349 -83.9302 -28.705 -27.9979 -29.9097 -26.9004 -45.6312 -62.9474 -31.4359 -26.3253 -18.7649 -34.298 -37.9804 -43.3921 -30.5948 -37.918 -30.488 -54.5634 -49.0879 -22.5916 -21.2394 -38.734 -44.2136 -23.6993 -38.6532 -40.7251 AFFX-BioDn-3_st 284.407 208.099 239.039 236.428 152.327 159.505 316.931 152.188 182.803 275.02 217.385 162.256 199.741 179.797 195.324 182.143 144.421 316.037 269.485 148.114 193.205 294.238 197.745 203.531 181.623 234.953 AFFX-CreX-5_st 178.745 101.3 118.699 131.834 109.355 98.1799 177.533 124.795 86.0768 143.596 104.273 120.737 101.196 108.527 109.446 109.243 107.088 188.792 240.35 94.9754 104.147 168.992 109.586 106.757 90.1958 116.069 AFFX-CreX-3_st 79.7368 55.5632 68.5976 55.6881 56.396 31.3003 84.8437 33.4283 42.3172 124.882 41.7587 49.9029 45.6627 61.2552 52.2385 72.062 36.6448 94.3601 71.4727 24.3627 48.4806 79.3437 42.6647 -12.6489 37.4389 62.0706 AFFX-hum_alu_at 9903.19 8501.62 9453 8595.65 9198.53 8729.83 10085.3 5398.15 7851.25 9906.75 9269.15 7969.59 8569.94 8328.77 8663.51 9703.19 6945.46 9186.23 9889.05 8872.19 9682.71 10396.1 8365.8 9345.94 8252.65 4652.85 AFFX-DapX-5_at 61.2671 37.474 44.7525 43.902 40.5637 28.5819 49.2893 7.59488 23.629 57.0429 46.7404 30.7302 21.5053 27.2929 42.2334 33.9123 26.3551 70.3766 72.777 16.6944 36.3847 58.1014 40.3792 33.9219 23.7046 45.1485 AFFX-DapX-M_at 120.544 75.9854 126.374 90.4021 99.6214 59.8854 129.419 52.935 64.1861 101.061 59.8996 77.3764 71.6353 61.2444 88.0712 59.607 72.2323 131.602 136.208 25.9624 76.8974 104.428 68.447 84.325 46.6156 74.5315 AFFX-DapX-3_at 50.0962 27.9532 29.261 38.6436 34.4854 15.9339 55.8445 20.0904 24.7383 38.8725 17.0458 36.5985 45.2345 24.9717 24.4171 11.2079 34.9787 56.8246 46.6026 14.2291 24.4563 59.6125 22.6792 26.541 30.6529 29.4477 AFFX-LysX-5_at 42.5285 33.7186 35.842 43.8173 21.1038 26.0026 47.7015 23.8035 11.3737 40.5822 41.1433 29.1573 16.2124 23.3693 35.6076 28.1836 31.9271 40.0859 49.1144 26.7874 50.9666 27.7013 30.9739 20.4447 14.6951 33.8544 AFFX-LysX-M_at 36.8936 35.1697 36.5703 37.0274 24.0568 19.8649 57.4157 18.3142 13.9659 37.3897 19.2095 30.6495 29.3611 24.7045 39.693 29.3086 39.3662 48.3323 56.4269 18.7009 51.7285 60.7026 43.9691 12.9576 16.9243 35.2928 AFFX-LysX-3_at 234.698 102.467 97.901 146.239 127.068 65.0798 262.579 67.9807 67.9566 85.4896 113.046 108.717 155.95 80.3862 100.474 87.4065 88.351 187.831 247.966 67.1026 73.0255 189.186 104.818 129.619 91.4007 102.621 AFFX-PheX-5_at 26.9561 -2.37297 34.4333 17.5947 30.9068 19.4564 18.5628 5.85058 26.2278 -16.7811 9.25781 24.0504 17.4717 13.1025 21.742 12.4074 20.2063 40.0367 30.2897 22.4741 24.2106 37.1239 23.3193 39.302 25.4601 28.4838 AFFX-PheX-M_at 58.124 -1.69785 52.6747 55.7056 36.449 27.137 59.6477 26.2214 8.82339 58.4851 31.0843 28.6438 6.67245 14.058 30.3021 33.7019 47.751 63.2577 15.9976 9.27033 81.0265 87.2832 30.0672 32.4333 20.7603 89.5884 AFFX-PheX-3_at 40.616 34.713 82.4409 42.4596 50.3563 34.748 26.4046 35.91 25.1295 49.3878 23.1894 29.9055 25.5961 25.7586 43.7021 34.2866 39.3882 23.5424 43.3184 47.5063 47.44 32.3454 36.1116 36.6902 30.3978 -53.8352 AFFX-ThrX-5_at 125.063 98.0369 77.1769 107.861 72.3561 104.56 103.898 61.4678 95.496 74.32 80.0615 94.9414 84.4995 95.8448 116.99 60.5425 93.421 133.267 98.5873 63.1381 82.9362 129.234 96.675 94.5572 59.0705 71.216 AFFX-ThrX-M_at 49.9943 19.8722 32.2058 37.0137 38.7689 19.4119 42.146 26.795 20.6417 31.5766 22.9088 27.9779 34.4475 17.5522 23.6911 28.0745 38.4229 40.1676 52.8215 15.6287 22.7492 49.4815 24.9362 27.0847 24.7106 31.3545 AFFX-ThrX-3_at 33.1246 4.91484 24.6518 30.3256 23.3383 20.5827 42.6331 20.733 25.9931 36.5884 19.8219 16.9136 27.0618 11.7202 27.313 8.17936 24.4473 26.7121 29.895 16.4874 30.1752 39.3013 18.2112 15.2479 16.143 23.4662 AFFX-TrpnX-5_at 148.494 70.9219 118.632 118.691 82.8794 69.0769 147.797 53.9483 55.5277 127.344 64.5628 82.0327 87.2791 46.8633 84.3709 56.7914 97.0614 157.43 104.566 48.3661 86.5914 144.819 79.414 64.4091 72.0106 68.812 AFFX-TrpnX-M_at 66.6936 5.60854 60.3028 63.5276 33.5234 38.0418 60.9828 40.4661 39.5032 29.8857 1.59616 52.7458 53.0348 19.37 49.9739 43.755 48.2842 93.5228 51.2824 29.3514 36.8239 89.547 73.7415 52.7497 30.1115 38.833 AFFX-TrpnX-3_at 19.1364 20.8099 10.7195 13.9764 10.7876 3.04198 9.54646 5.0816 6.61344 16.9064 -3.92957 10.6833 22.1029 -3.87819 13.2802 1.30735 20.4114 27.2889 14.161 5.19944 14.7646 19.1634 11.4693 -2.53228 1.63297 16.6207 AFFX-HUMISGF3A/M97935_5_at 165.75 300.024 152.424 118.693 95.3272 81.5155 152.298 122.23 91.9547 129.385 106.196 104.433 83.485 97.6268 217.396 380.761 149.48 195.412 105.061 80.6699 162.673 192.314 125.129 77.664 197.797 188.116 AFFX-HUMISGF3A/M97935_MA_at 179.989 790.943 150.249 82.6372 163.14 147.757 169.078 255.646 135.592 134.197 198.033 141.173 145.652 126.247 367.256 949.318 91.9974 267.395 121.308 130.446 253.176 233.304 234.052 85.4302 499.756 312.653 AFFX-HUMISGF3A/M97935_MB_at 151.72 546.343 173.624 135.163 193.159 163.458 145.287 144.067 138.774 161.823 242.284 155.572 78.7713 151.156 332.381 873.601 99.0099 209.605 98.4066 92.6789 234.595 232.416 180.548 81.7355 352.708 309.973 AFFX-HUMISGF3A/M97935_3_at 553.87 1758.42 599.857 426.569 859.045 552.006 499.943 701.339 662.183 603.143 780.726 489.626 552.023 593.651 930.928 2133.17 489.616 582.488 449.081 991.455 516.142 691.134 780.294 981.646 1662.26 976.528 AFFX-HUMRGE/M10098_5_at 72.2579 159.484 42.4559 3.26054 11.4879 13.402 20.5481 -18.0681 -71.7969 14.8066 21.2847 -23.2247 -7.45341 12.4314 5.36648 8.94132 -47.5854 25.0043 90.946 -47.5568 3.69034 15.2424 20.5804 38.5142 6.94581 19.5267 AFFX-HUMRGE/M10098_M_at -30.1595 -64.7658 -28.2104 -37.3464 -45.8195 -30.6321 -56.7485 -50.5899 -43.3654 -24.1965 -37.9727 -47.1546 -38.1208 -33.8106 -52.6525 -49.4911 -50.1208 -29.4005 -3.12303 -27.8809 -48.9365 -29.8916 -27.1269 -17.5833 -38.1436 -29.0792 AFFX-HUMRGE/M10098_3_at 65.1004 19.7163 39.1968 24.3987 38.9076 22.4197 67.8308 46.573 53.0483 49.6252 33.1548 36.6282 52.3868 22.1085 23.6439 13.8909 40.9994 41.4228 52.178 34.8781 65.8244 37.2982 27.4847 27.7867 53.7229 51.8841 AFFX-HUMGAPDH/M33197_5_at 1781.95 2370.97 1693 931.981 2813.41 2773.8 1331.06 3409.56 2500.59 1397.65 3225.72 3832.06 951.709 4461.43 1362.9 3635.18 2056.61 1071.56 787.855 1764.84 1617.96 1198.8 2573.87 1552.46 2323.13 5396.98 AFFX-HUMGAPDH/M33197_M_at 3311.18 3270.14 2670.94 1916 3973.08 3533.69 3001.52 3670.05 3411.11 2582.35 3930.01 4173.52 2054.2 5802.7 1763.15 4155.44 3297.7 2141.77 2671.19 3354.22 2640.46 2378.58 3477.17 3626.69 3276.53 6268.57 AFFX-HUMGAPDH/M33197_3_at 4478.99 3937.24 3822.94 2995.59 4775.69 4276.28 3922.8 4113.84 3853.04 4196.47 4756.24 4636.95 3593.47 6060.91 2298.72 5029.35 5375.36 2913.78 4881.61 5156.98 3657.65 2860.87 4471.09 5900.96 3914.43 8007.31 AFFX-HSAC07/X00351_5_at 3835.31 5529.02 2961.39 1712.31 3090.42 4859.32 4656.49 4652.41 4628.45 1871.55 5051.09 4251.54 2363.09 4086.23 3454.28 5097.63 1481.99 4131.25 1094.09 2924.77 3819.17 3879.76 4331.77 965.54 3999.14 2593.41 AFFX-HSAC07/X00351_M_at 4252.98 5758.12 3739.82 2266.59 4237.75 5339.43 5809.61 5529.77 5465.07 2697.63 5411.19 5318.93 3394.98 5676.56 3828.45 5885.63 2634.74 4546.89 1992.91 4220.09 4090.65 4507.62 5276.04 2335.83 4771.61 2792.5 AFFX-HSAC07/X00351_3_at 5449.81 5870.02 4788.63 3491.7 4789.47 6045.84 5387.85 4934.23 5404.54 3957.01 5341.82 4684.27 5280.83 5252.6 3727.14 5158.47 5005.51 3987.55 4568.23 5945.49 4454.83 4098.65 5664.37 5219.36 4448.73 3654.3 AFFX-HUMTFRR/M11507_5_at 79.7636 36.0172 82.2737 51.4973 76.4602 61.8061 84.3291 72.5007 62.1373 52.7505 48.9417 74.8463 73.6465 113.113 62.2097 76.3571 58.5187 60.5533 43.1294 54.869 74.8586 54.4923 67.9535 56.3916 81.5114 58.9553 AFFX-HUMTFRR/M11507_M_at 3.75133 20.7365 -0.597615 -8.47943 5.07097 13.5139 0.756365 21.6755 48.0582 -1.9 18.8431 10.7062 -3.59805 122.966 13.5778 40.6937 -2.27154 8.11091 -2.45485 -14.7753 30.8665 16.7083 25.6475 11.4089 13.4753 6.23455 AFFX-HUMTFRR/M11507_3_at 44.3623 54.8022 44.8314 31.2879 27.6003 64.2732 54.4841 49.6503 49.8266 33.6619 77.9987 57.8296 11.6322 423.178 56.544 129.156 49.6001 70.4294 35.8078 17.6952 115.707 98.5723 76.769 8.23804 55.5644 57.7551 AFFX-M27830_5_at 197.782 44.7054 206.137 116.343 41.1004 66.8357 73.8793 123.648 46.3265 105.523 61.1681 49.8605 39.7948 48.5391 53.5262 44.6594 104.546 91.2818 194.779 106.033 89.1666 84.3737 68.6645 45.1092 39.1224 143.242 AFFX-M27830_M_at 831.418 501.091 620.729 668.082 571.461 534.92 622.534 645.022 539.881 538.821 579.578 480.33 474.48 711.508 481.904 532.827 589.112 621.923 1149.07 752.364 506.21 596.467 569.912 590.292 489.808 721.32 AFFX-M27830_3_at 541.391 377.234 436.198 560.846 390.73 557.232 510.803 405.539 420.27 404.586 398.83 427.257 446.417 541.712 402.718 407.366 435.819 558.21 472.645 315.533 387.529 434.575 448.872 404.212 346.004 547.635 AFFX-HSAC07/X00351_3_st 117.151 128.234 84.4842 101.776 96.9881 97.7246 84.813 174.681 121.429 82.7721 87.6531 86.2199 83.9094 110.042 99.6078 150.024 197.43 86.4503 153.465 201.13 136.212 73.1467 84.3918 158.902 118.373 96.8654 AFFX-HUMGAPDH/M33197_5_st 144.719 181.278 191.682 202.534 190.287 183.791 146.505 138.473 101.841 231.526 141.597 130.797 82.0596 165.886 162.308 166.733 162.421 157.802 155.811 132.043 126.173 163.036 151.687 172.453 107.175 185.231 AFFX-HUMGAPDH/M33197_M_st 70.46 93.6398 64.3478 63.019 55.4916 74.0598 51.5387 76.3049 67.6596 65.5417 54.4746 67.4093 4.65439 76.3206 69.0339 79.4228 88.937 72.6112 78.5674 53.3268 62.8923 53.4802 70.5891 70.8063 76.3004 96.0878 AFFX-HUMGAPDH/M33197_3_st 55.4337 64.7447 79.7282 102.178 59.3796 72.8653 80.7284 41.9885 49.3447 103.837 44.0052 32.5288 25.0958 39.4698 61.0306 52.9089 59.6806 46.4297 67.3687 38.1879 40.0836 58.4489 46.049 75.0311 30.3936 57.448 AFFX-HSAC07/X00351_5_st 224.167 180.978 237.773 216.3 167.976 158.024 194.901 175.705 155.066 254.894 148.141 163.479 132.912 183.316 155.209 146.577 220.031 176.787 196.392 153.224 202.828 204.88 163.378 132.294 143.483 214.696 AFFX-HSAC07/X00351_M_st 238.342 190.311 207.319 217.761 186.738 209.394 226.182 186.137 240.654 167.249 201.392 189.271 160.376 179.084 206.509 212.089 148.895 196.865 224.741 164.918 177.232 196.61 205.215 227.772 173.181 204.236 AFFX-YEL002c/WBP1_at 130.794 67.1193 97.155 109.506 136.675 66.7261 56.4972 61.5467 30.8823 63.5263 88.0201 59.1629 46.9679 70.8899 59.7551 58.6137 145.55 92.815 103.921 84.4463 78.8619 89.4526 85.3799 40.4406 52.6598 119.729 AFFX-YEL018w/_at 54.0728 30.2595 38.0971 35.9229 30.0487 42.101 40.503 32.3343 25.8423 33.6277 15.68 33.477 21.0982 29.984 33.1553 25.1409 38.3616 50.2916 37.9265 21.762 45.8239 47.7735 20.69 32.6849 27.0883 30.2444 AFFX-YEL024w/RIP1_at 107.263 73.1682 74.1949 103.339 43.4217 45.9945 95.5123 28.5536 35.7027 82.7237 32.9481 31.8509 39.5596 36.0984 52.3652 57.365 130.29 85.7762 121.149 54.4231 79.8199 90.0391 52.4086 55.5681 48.0123 85.6485 AFFX-YEL021w/URA3_at 382.255 237.818 388.945 336.965 218.95 234.313 367.258 190.158 208.684 447.998 203.989 226.835 172.825 212.015 278.303 218.192 441.142 331.161 330.471 199.737 403.987 348.738 217.039 186.463 209.379 334.249 31307_at 36.9832 42.2591 23.294 31.0905 24.8622 12.8276 68.4181 19.6626 14.2983 22.9679 10.3677 20.3279 57.0022 10.657 16.0722 22.9141 22.7215 48.8162 44.5184 8.43104 19.3334 51.0633 28.319 15.9432 30.3679 28.3019 31308_at 22.9605 13.4121 16.9304 -15.2399 10.0734 12.8547 10.4643 1.0001 2.92394 17.0239 11.4256 7.70438 15.1321 12.9578 11.0232 9.60791 5.45075 20.6512 -25.7326 -21.5154 -4.33529 11.8902 8.98009 7.08868 2.3115 12.3808 31309_r_at 6.29927 19.1633 3.03659 -0.903413 1.39476 13.4486 5.74156 19.8489 15.392 6.46696 19.3874 17.391 6.89282 12.4452 12.9863 16.0146 0.541475 10.9181 -5.03244 24.0447 11.4801 2.31597 2.49221 9.96418 28.1439 -0.686965 31310_at 17.1529 27.1722 -0.338279 -14.1061 23.0263 17.9294 35.7209 -3.43857 7.00862 14.6832 37.8795 -17.6818 10.249 9.72711 24.7943 16.0711 -2.7933 -0.905975 12.0736 16.0306 9.01189 9.60877 7.2658 -12.0555 3.83654 8.30199 31311_at 216.932 162.563 166.482 248.735 183.237 129.778 270.832 126.72 159.539 173.033 170.047 178.158 231.956 135.855 150.402 193.675 143.731 233.632 249.667 175.385 195.923 242.327 132.225 204.795 188.775 201.313 31312_at 190.178 120.161 169.273 173.702 102.385 93.4386 183.729 113.821 77.6879 173.092 90.0128 126.103 84.717 112.589 139.517 131.629 151.581 204.266 152.511 123.68 148.046 149.534 113.424 136.208 87.3997 154.514 31313_at 113.476 84.9185 177.832 117.493 88.0268 90.2193 117.556 124.49 71.3888 236.388 109.125 106.483 162.506 100.713 94.6878 90.5224 122.392 172.993 106.064 85.9635 137.08 153.576 90.7812 67.8371 136.297 120.003 31314_at 50.7945 53.818 58.2412 59.7341 75.8551 65.7247 93.8117 48.9977 44.6516 95.0014 42.046 65.3268 105.706 43.1201 45.6489 78.5255 64.1095 103.938 91.2649 69.9593 88.7213 132.633 49.4236 47.1633 100.923 128.271 31315_at 1139.56 5154.31 600.494 658.421 3378.38 265.693 2347.97 1474.59 966.339 1603.25 389.255 192.701 368.552 65.7495 1290.84 2666.04 241.961 1614.46 163.929 838.797 1731.1 3006.34 194.233 130.277 3595.46 3949.66 31316_at -18.287 3.74538 -3.03599 -5.98093 3.59555 2.95618 -6.84587 6.59068 18.009 -4.79112 6.18134 5.72163 20.8338 -4.33284 3.43024 1.83676 9.33198 20.4997 -15.2783 42.3079 5.7097 2.60968 -2.22783 -3.05798 7.79922 -3.90832 31317_r_at 17.2761 36.0095 0.533814 11.4078 65.0242 1.60701 -3.51601 26.293 14.3594 14.3931 51.0467 7.87614 3.34395 -0.353979 12.9193 107.723 2.84321 12.0684 22.2097 9.28645 65.7457 109.943 12.3812 15.524 187.656 1.37556 31318_at 17.7039 15.2357 10.2753 12.9648 12.96 -0.761071 16.7883 15.1744 16.2639 12.9168 22.6883 17.3802 22.629 9.78135 7.68004 8.9607 -0.0813966 15.2499 32.284 7.80179 11.6924 25.9401 2.20869 0.394058 16.3697 0.115654 31319_at 15.8655 23.9183 22.7978 24.8195 99.2189 25.1805 -6.77262 31.0988 32.865 45.525 74.2571 7.25462 16.5794 2.40246 33.7241 166.211 13.0512 37.1182 19.4569 41.7727 164.186 70.5182 11.5695 -0.575181 141.183 186.293 31320_at 123.621 95.3586 94.4468 124.794 89.2497 113.248 143.695 164.839 135.098 123.521 144.772 107.479 112.52 113.384 119.821 87.4163 137.274 133.572 90.3666 147.448 62.7575 118.336 99.7647 116.937 79.4596 120.317 31321_at 174.661 103.08 177.465 174.559 121.01 128.501 173.604 105.427 124.688 160.284 122.08 130.882 120.17 108.119 173.552 137.844 152.312 145.011 154.363 124.652 170.711 173.694 128.898 137.411 112.344 131.966 31322_at 25.4169 42.3577 28.9386 19.3623 22.2028 13.2872 25.7165 15.3515 10.4324 63.7235 3.81317 19.0447 25.3857 15.8645 34.6971 58.0048 17.9966 29.0069 -2.0974 14.7371 27.103 17.664 19.5615 15.8249 20.7649 33.6554 31323_r_at 17.0339 23.4741 18.9332 26.6189 26.8139 33.0942 22.5593 7.64309 -158.624 52.2413 26.7613 22.8006 18.5757 16.1352 31.6987 18.4808 24.0255 20.7526 28.5418 31.7192 19.0265 5.00616 35.292 27.7821 16.9782 4.97229 31324_at 102.591 92.3486 120.461 113.723 90.0344 143.403 95.8189 75.7023 77.4182 115.725 64.7226 95.6079 76.1544 77.5753 131.983 84.3373 56.6119 72.8516 56.7267 37.8179 77.2922 93.2511 94.5332 56.4698 84.3264 30.5327 31325_at 67.8606 24.4368 84.3285 84.2596 74.5531 62.9061 100.242 58.9412 52.9351 76.4369 72.9707 64.857 56.769 28.2062 85.5727 69.2211 19.8654 102.421 66.856 42.2796 43.5574 73.8148 67.4591 72.6469 44.8918 38.4677 31326_at 754.361 777.105 1208.68 730.314 679.41 472.386 875.514 426.069 541.812 647.946 642.128 540.998 710.362 550.153 621.437 501.736 602.892 734.952 807.89 488.885 689.458 848.672 554.534 793.019 629.055 695.874 31327_at 1.86526 5.41691 11.7631 8.62522 13.4006 9.46665 5.64484 22.7863 9.68571 10.8287 1.42032 2.98843 25.2881 11.4208 3.78157 -0.0219398 18.9863 10.8608 16.8584 -46.2152 17.2022 14.9824 7.66178 -3.20777 22.3966 12.178 31328_at 121.892 92.031 201.403 134.993 117.134 146.648 159.059 93.8675 110.694 196.504 107.479 104.51 104.82 108.602 162.985 110.627 128.256 148.424 107.983 132.058 158.953 104.303 125.216 166.785 99.9854 130.613 31329_at 14.5586 34.3359 16.3046 18.4485 13.4128 20.1751 12.8777 36.6998 21.3595 30.8472 27.3876 13.8843 17.9295 12.7647 18.0843 27.8748 5.18994 14.2887 20.4714 5.27287 19.0796 18.5045 14.4581 20.0154 26.0274 15.9664 31330_at 3175.57 3548.02 1820.51 2612.13 3201.35 2055.84 1445.57 3752.44 3766.64 2082.26 4332.08 3127.05 2166.34 4361.74 1465.47 3428.02 3225.78 1699.09 3460.35 4440.33 1570.76 2350.16 2937.07 3257.57 2532.94 5821.41 31331_at 40.8068 3.2361 18.7009 28.5711 23.3641 10.4128 56.5075 15.5375 11.7948 24.9831 12.988 15.1634 33.6051 18.7189 17.9788 18.2661 20.0576 40.0938 47.6155 -0.0718337 11.1243 52.1706 16.2097 27.9982 18.3218 16.7248 31332_at 18.1273 9.65582 8.06063 5.85333 -5.30554 1.51498 6.67706 -37.2626 -41.5181 7.45908 -17.4797 -20.1506 -68.8391 -6.71526 -9.77655 -0.552943 -22.8684 4.5551 -5.06083 -57.624 -47.8425 4.98633 -13.3297 -0.0363981 -23.3218 6.4599 31333_at 22.5912 9.13811 17.7927 19.1999 20.1253 7.61478 20.3672 40.972 32.1378 29.2904 27.6168 31.8186 27.5807 13.7928 19.0585 9.04877 24.0201 22.2042 36.6995 4.71695 10.6524 24.2924 8.89613 25.4436 33.7587 24.2949 31334_at 14.4076 -1.38469 4.91404 11.1325 9.54839 10.1273 16.6175 2.83778 18.3991 3.96332 25.2248 9.41495 6.22118 2.6998 4.2578 -7.55392 23.255 20.2862 25.7782 5.46426 -0.824531 15.9269 0.268704 10.4671 11.0642 9.85454 31335_at 64.5555 56.5676 64.3351 56.7737 38.7718 50.1046 71.0378 29.8097 44.214 63.3964 35.1496 62.762 87.7027 42.8679 48.7836 34.7136 52.3609 66.5785 67.9857 39.1079 67.9613 63.3791 53.3312 38.5609 56.9848 57.8458 31336_at 17.8468 1.12837 9.33222 -1.59376 -4.62199 17.1919 0.121618 7.85899 25.6868 5.05391 2.71006 2.31336 11.1385 3.04152 6.20112 -22.0775 9.78681 8.12938 -7.1937 12.6737 18.0697 4.59506 -3.18541 3.58018 14.2393 5.81503 31337_at 412.283 440.35 495.373 501.236 348.54 416.904 770.457 383.393 332.747 523.434 412.996 318.532 226.395 577.023 465.464 438.31 378.532 438.409 510.066 321.994 456.784 336.982 400.768 404.834 293.748 386.676 31338_at 8.93417 4.28296 11.3434 13.8976 13.8821 16.3986 16.0536 8.59187 20.8813 3.81431 -3.03517 15.8975 15.0665 6.81695 11.8042 8.01353 7.86409 9.16017 8.34297 9.97344 4.19371 17.333 7.91864 -4.70361 15.9607 1.52247 31339_at -28.9985 -30.0532 -26.9727 -23.0042 -18.3141 316.922 -21.241 -14.6747 -22.3464 -26.9582 -23.2741 -31.2221 -8.00193 -33.8613 -17.8159 -10.6556 -10.9199 -26.0217 -22.6467 -17.4564 -26.2001 -22.031 -22.0276 -11.9295 -14.1471 -33.954 31340_at 28.59 16.6452 32.8212 37.1873 17.2074 31.7997 35.6843 22.0106 41.9897 25.5166 13.488 28.2393 38.6553 28.6891 36.906 11.7081 39.3368 40.6845 17.5439 26.4203 62.0666 35.598 27.0425 43.1111 29.6764 33.4058 31341_at 316.157 278.807 309.36 403.88 306.792 271.918 289 314.445 372.205 272.893 429.321 358.525 297.233 323.837 344.095 286.784 509.703 334.96 409.735 428.175 313.22 288.123 307.79 84.1063 382.133 476.008 31342_at 139.423 169.568 132.574 109.777 104.859 140.767 130.207 91.1368 89.3285 104.55 119.51 113.643 97.0745 144.178 117.624 142.977 98.3465 166.697 115.789 105.465 106.68 154.099 117.905 69.6939 128.27 126.252 31343_at 8.50093 21.1695 4.76155 10.3207 12.6733 3.43293 23.7289 3.31941 0.688826 -3.29841 -0.0278592 2.6089 14.7636 -0.204522 -60.686 -1.75306 4.3278 11.0599 -2.30007 2.87448 5.68857 6.85971 1.04752 1.9759 4.71653 1.43033 31344_at 60.8199 -394.553 85.7358 67.3778 94.0531 93.2234 76.6311 55.9907 47.3014 29.0413 63.9798 79.5849 36.9007 54.4277 70.5839 92.0008 30.9841 85.3465 27.6526 38.7378 98.9954 196.454 62.4551 77.2344 -220.107 197.113 31345_at 37.7096 16.4941 41.2689 47.4344 21.6537 30.2287 28.5373 13.6873 7.46991 34.7569 32.4618 27.9021 27.4486 12.9936 24.5116 17.9923 15.7241 65.1488 31.344 9.81193 27.1199 46.4389 47.2319 12.9422 12.1819 30.9481 31346_at 35.6071 38.4721 63.5624 55.8759 43.6782 60.9735 41.6551 85.1964 87.8979 123.341 46.5545 72.6205 93.4518 46.847 57.8507 43.3699 72.934 70.9823 46.8879 62.2688 81.5302 45.5724 47.9187 45.3537 79.097 55.8244 31347_at 192.835 78.9517 96.1371 108.988 89.4138 81.2301 103.677 75.6375 69.1955 136.982 89.1795 118.595 133.967 61.8186 106.437 69.9862 131.086 226.982 149.112 78.2701 135.078 129.7 95.9799 51.7135 205.179 162.076 31348_at 24.9388 3.10118 13.489 13.9802 13.6566 13.1852 23.7724 24.9673 24.0044 21.1208 57.5241 19.8483 1.93178 15.4617 23.974 7.03824 17.678 18.595 20.8777 21.3358 13.4029 16.933 22.9395 8.80947 13.0671 31.361 31349_at 29.4782 30.1089 40.0346 43.1862 38.0548 15.6828 24.5001 -19.4126 -5.65372 33.4306 14.5249 11.0152 -31.4089 19.7307 29.632 15.2385 -8.3158 30.777 57.4851 -49.4748 2.27847 31.0391 20.0366 7.73061 3.55578 12.9281 31350_at 268.752 167.865 288.847 208.604 189.276 244.004 227.616 154.493 178.113 252.045 209.735 192.243 125.988 233.956 199.984 266.447 206.659 213.079 259.185 144.854 222.449 193.007 186.816 130.009 151.32 225.702 31351_at 13.0213 -3.0867 32.9084 2.65486 28.5149 8.03442 -17.4642 9.51653 -27.5173 28.2319 -1.74408 44.7104 27.2904 13.7186 23.5255 13.9918 15.5542 17.112 1.47103 23.4393 27.6569 11.3017 31.649 9.35285 16.0169 25.0649 31352_at 65.5145 44.0921 53.8278 48.6217 31.4913 41.195 88.1088 7.00295 16.9593 46.8118 29.3106 40.9957 34.3379 19.5749 18.0818 44.109 30.9563 47.8895 50.97 19.4808 36.3149 68.8202 46.0998 34.4833 30.5214 45.294 31353_f_at 464.122 436.574 371.229 465.519 361.772 450.588 390.704 172.512 308.891 460.704 369.08 309.898 306.955 359.412 465.204 343.971 526.82 488.479 345.388 341.139 319.741 365.599 480.031 433.679 198.184 320.477 31354_r_at 65.3482 44.5892 68.3952 60.0952 62.0669 101.569 46.2814 54.844 51.437 36.2471 43.4709 68.6476 76.0012 52.5534 47.253 106.388 40.1954 80.2266 42.0308 32.9906 -3.24216 81.2111 60.3285 27.4743 76.6212 64.669 31355_at 185.137 163.138 128.63 129.701 152.595 122.576 241.579 206.315 180.81 140.332 173.913 141.44 117.52 197.571 110.568 193.132 157.392 206.459 240.033 129.144 86.4926 171.59 164.009 158.522 140.886 127.117 31356_at 165.366 194.529 266.452 250.405 177.347 203.771 239.095 114.929 116.305 322.058 138.194 175.615 127.058 141.737 210.712 259.72 186.118 170.515 129.362 185.672 279.68 180.212 200.208 215.065 113.38 183.385 31357_at 240.969 214.829 269.956 265.694 153.814 165.58 246.333 161.489 257.957 301.488 119.037 212.777 162.262 142.417 189.16 146.305 463.845 305.913 257.606 168.829 302.545 300.681 161.315 179.114 178.667 217.682 31358_at 51.1941 55.8029 47.743 36.3271 91.3033 47.3593 68.2692 18.9867 28.8561 28.6611 -29.4263 30.6944 26.3359 17.3591 25.4456 27.5627 25.6804 59.6001 31.0306 6.00401 0.710896 32.2205 56.6931 26.4954 22.2304 39.2494 31359_at 6.66395 11.3476 -0.199725 17.8139 15.3481 -0.578794 3.72669 17.967 41.9913 17.8804 6.58678 10.4933 9.83787 -1.58291 14.1781 11.8241 18.7586 12.9898 4.59672 33.8803 9.79766 8.08239 9.0717 9.3366 13.2707 6.07408 31360_at 48.6114 14.958 67.7454 60.2125 24.1763 40.8826 43.3918 20.58 9.78746 69.2656 50.6164 17.5478 9.8701 20.88 33.2616 28.1245 30.2144 66.436 45.0933 9.36118 35.8284 55.0635 23.3418 23.7929 26.3927 40.667 31361_at 36.5343 25.3529 30.8355 28.2217 8.74242 19.258 34.893 16.5985 32.055 30.5353 25.5873 17.2951 2.59895 16.6252 29.6363 10.5465 26.5379 38.64 33.1438 14.9659 20.4802 43.0479 29.9439 13.452 23.7605 38.1994 31362_at 412.338 384.259 394.639 362.904 240.273 317.049 430.311 317.839 337.631 428.04 368.14 284.513 221.225 239.4 312.489 298.405 426.224 452.142 436.701 247.173 428.874 415.1 311.585 199.349 264.064 441.567 31363_at 141.939 72.7142 99.8759 114.494 138.468 95.6767 139.544 68.4194 78.1148 89.2726 110.281 115.904 120.925 110.505 112.39 72.1411 72.4541 147.568 175.625 82.8192 93.8246 140.86 105.587 105.274 95.6504 89.4277 31364_i_at 36.4318 12.4748 32.5865 16.9474 23.0748 35.6291 18.7085 0.632673 14.6921 21.6357 14.0098 7.71463 13.4816 13.056 19.7958 8.54124 27.7973 31.2212 33.768 13.4658 8.23201 27.6083 18.0468 -0.691375 19.7899 46.6241 31365_f_at 52.9437 27.1124 49.5398 45.4437 35.8972 37.5118 39.5034 24.8422 15.7892 40.5838 35.9248 22.3834 16.825 4.91238 31.6101 19.1003 43.7178 39.9977 39.8363 22.9884 37.7287 50.3935 27.286 17.7547 21.6213 41.042 31366_at 61.3229 66.3107 56.054 52.1385 66.074 9.52143 65.418 42.741 72.4446 64.8148 55.6823 63.3352 55.9125 48.4446 23.2446 28.5318 38.8451 86.5661 80.3382 47.6126 72.151 108.081 52.2595 4.10314 56.3858 78.1778 31367_at 65.3667 66.8159 78.8531 40.8464 44.1937 26.7085 60.8044 55.0761 46.0098 81.0943 27.6514 51.9875 50.2382 26.072 67.7264 19.2189 29.4314 37.2774 29.0026 45.9863 65.6202 46.7669 41.7338 35.5965 30.2128 55.5426 31368_at 68.6627 63.0803 85.9725 81.6387 52.9221 57.821 87.8751 29.1132 38.0461 89.0303 33.9682 41.5452 20.5871 40.4425 63.1741 50.9797 65.894 76.2522 49.2988 14.9616 47.0053 93.0661 41.9092 44.8385 48.8188 74.4574 31369_at 10.9786 92.1722 -3.55993 0.849691 25.4535 7.38804 20.2779 -9.59971 -7.25167 9.78984 -6.56723 5.70349 -8.9378 -0.057119 -1.28236 -6.94101 -1.37091 -5.98051 5.05956 -17.078 0.315092 4.387 -6.27292 -0.221245 3.19005 7.8187 31370_at 23.8657 0.177197 26.8936 21.6048 11.5091 21.5466 30.6158 1.92886 -77.7694 31.5737 7.08044 17.5473 -0.825097 4.31744 15.6809 12.6264 17.5584 26.4634 23.5987 13.3633 21.1461 32.655 15.0346 14.5359 18.608 37.2687 31371_at 5.01524 -38.9859 0.485286 -2.29043 -23.6341 -4.09123 -1.06324 24.2057 -6.12358 -64.844 1.08545 3.36623 4.93097 3.55702 -22.4669 -19.0878 -18.2047 -30.1757 -10.8797 -10.6613 -8.71233 -36.8072 2.49389 -16.4445 -20.9676 -41.0933 31372_at 177.065 171.192 277.25 190.222 138.393 174.045 181.367 212.31 151.401 181.883 141.452 196.457 87.2036 211.343 164.455 132.13 175.757 144.372 176.337 149.949 164.907 128.504 158.706 105.255 151.208 179.983 31373_at 45.8588 34.0826 60.7702 66.5821 25.068 26.0275 59.5764 23.1776 50.853 69.0185 32.0375 32.0315 38.8415 35.0582 35.2809 32.4503 43.0175 65.8211 54.4923 16.9201 41.8224 67.4608 47.6087 38.4129 35.7417 48.8883 31374_at 50.9341 4.07801 36.151 46.4369 22.5468 28.2087 46.5235 46.685 31.6659 36.0617 -66.6585 40.8864 63.1551 32.3002 -16.8447 34.6964 59.291 61.777 58.8794 32.2351 39.359 49.1855 63.6269 66.9824 47.3164 30.8553 31375_at 407.17 373.017 466.838 467.278 407.637 372.743 526.11 327.569 375.203 396.731 422.12 390.245 342.044 432.547 308.41 356.571 360.72 448.511 439.405 303.763 424.272 430.627 371.786 382.957 333.499 419.733 31376_at 16.8144 -0.769524 -4.87448 -0.835582 4.04739 7.89114 11.1662 -19.7231 -15.4885 -5.39451 -1.94732 -6.20708 1.55868 -19.1825 15.6924 -4.75583 2.91078 17.0231 -3.61493 17.3263 3.92809 7.29553 14.0691 15.7831 8.86286 -3.71759 31377_r_at 24.3676 6.01475 9.19057 18.1039 20.0476 9.26315 24.8809 16.127 23.6577 18.3907 14.131 18.8825 43.3275 9.51985 13.6633 15.0408 8.54141 39.0015 38.4084 12.6098 14.0193 30.7981 20.6185 14.7568 55.5017 17.7796 31378_at 139.241 89.9168 137.726 115.949 77.704 77.7341 125.538 102.909 82.6901 135.384 99.5792 107.995 59.2687 84.1913 108.893 90.0344 144.081 141.992 128.262 90.374 129.938 115.461 83.1104 67.7456 94.081 124.578 31379_at 101.986 84.6254 117.944 98.4812 82.5094 92.1451 107.588 89.4731 79.2893 99.2002 82.1444 89.682 76.2816 94.2885 89.4569 83.563 107.063 107.897 92.448 67.1811 118.107 99.4041 88.1335 74.4817 86.7739 127.804 31380_at 126.172 107.521 122.385 128.012 63.1586 40.0276 102.268 88.002 77.364 102.87 106.177 83.529 54.1066 123.165 97.3631 72.9321 115.136 105.584 157.364 96.5753 110.441 120.119 74.1428 85.8083 54.8253 163.667 31381_at 81.2844 74.2868 91.1349 67.5637 81.2566 59.0001 71.5763 55.5039 64.7703 97.414 92.9003 86.4903 35.1053 79.0483 80.1768 89.6479 118.639 80.5216 96.7016 30.4414 57.8896 79.4284 88.3365 79.3688 68.9776 96.6763 31382_f_at -7.15113 -20.7531 -9.44844 11.2539 -14.8375 11.3105 19.1748 3.78602 -5.01044 815.247 -10.7343 -14.662 -18.1485 -11.4864 353.866 -9.24438 14.3273 203.611 -26.1654 5.25392 903.554 -8.70355 -16.7579 -11.9028 -18.072 -13.882 31383_at 57.5308 148.301 90.8404 77.5852 83.8227 109.624 97.0634 98.7201 70.8695 102.809 53.8349 80.7351 87.1477 78.9365 114.01 112.635 78.5512 79.6198 90.6717 97.9433 84.1557 129.377 109.776 95.3734 129.709 124.082 31384_at 118.845 94.944 78.8022 91.8056 92.7443 71.8631 86.1694 59.1011 109.516 87.5921 94.3465 77.1165 69.0928 82.8418 75.672 89.945 77.0416 110.707 132.453 84.0109 90.7458 111.452 78.3542 88.6175 67.4869 102.447 31385_at 3351.76 4323.17 2793.21 3072.51 3811.76 2826.91 2280.98 3677.21 3949.6 3294.23 4913.77 4714.97 3061.22 2930.72 1931.77 4708.72 3784.57 2188.94 3486.82 4791.92 2653.41 2636.2 3723.43 3638.23 3659.51 4538.63 31386_at 286.108 232.94 217.035 192.841 193.545 183.907 185.979 168.304 143.33 293.865 163.125 174.416 142.504 155.284 216.261 307.156 205.474 418.162 246.219 158.83 355.276 283.657 181.918 179.778 277.895 324.173 31387_at 183.669 121.714 142.901 161.071 134.644 115.486 143.129 97.5727 95.621 170.835 121.302 125.587 61.3115 107.217 154.741 106.495 129.544 185.003 187.849 70.5196 -1816.64 152.508 127.877 81.8201 84.8364 180.668 31388_at -0.944537 69.4382 58.8769 40.22 -17.3857 30.823 59.7806 62.7741 43.3468 57.4489 38.5655 34.9933 19.8458 39.1289 24.8446 35.6991 46.1631 40.7064 15.8017 25.2591 7.02804 10.2713 39.8845 21.4498 28.3289 30.695 31389_at 21.8096 5.72227 -25.6195 31.2705 19.9229 25.6218 20.6691 6.98695 17.4263 14.6789 4.60806 15.3988 16.7309 26.7801 11.0583 21.3087 -6.58117 16.2165 16.9958 10.6006 8.16405 21.833 36.89 25.1334 33.0593 24.5073 31390_at 16.7794 7.3986 16.2116 -61.0733 7.74658 4.40317 4.16593 7.7722 0.0576889 20.4225 22.7875 7.72275 26.7999 9.41311 10.2016 11.8785 6.7294 13.4062 3.98389 4.74133 9.63254 12.0283 6.36301 13.3877 -11.8278 16.98 31391_at 405.217 415.275 472.011 436.333 340.509 456.183 458.62 287.765 316.743 467.575 474.352 373.108 291.012 385.342 437.672 403.283 407.759 427.505 506.407 328.929 371.113 384.157 370.387 373.739 360.766 477.005 31392_r_at 78.5843 28.8216 76.1839 60.0639 73.6392 42.8331 80.0684 31.1771 36.0296 65.7655 57.8392 58.9034 68.0085 40.9863 44.1626 45.9825 50.2326 93.5351 76.9606 29.5291 68.6348 111.401 60.0514 41.2316 57.256 62.9815 31393_r_at 1705.65 1315.01 975.155 1420.69 1432.34 1406.38 1405.23 1034.85 1039.75 1022.23 1343.88 1091.26 1341.42 1405.31 1150.15 1190.18 732.503 1818.93 1854.34 1108.02 875.156 1552.5 1250.16 1690.04 1069.6 1144.85 31394_at 71.6915 36.1148 25.4608 41.971 18.8084 9.25876 114.141 41.1973 20.8679 36.5604 37.8733 22.5644 -5.03949 20.5272 33.3331 17.3389 31.4596 62.4827 61.4706 25.4939 22.8315 70.0416 45.784 42.6084 18.9821 39.2256 31395_i_at 16.6355 67.0027 23.3196 16.3495 8.87588 21.9462 15.0017 14.484 -7.13015 17.9342 11.6468 10.6076 11.985 16.6352 25.9648 12.962 22.3868 16.2637 7.87159 9.86538 12.7834 9.38613 17.0307 26.4521 8.01176 28.1562 31396_r_at 3211.06 2593.65 3219.65 2453.11 2627.62 3057.25 2784.51 1973.97 2136.31 2621.21 2134.67 2825.84 2462.38 1806.13 2849.15 2253.57 1987.59 2446.46 2154.92 1881.79 2908.65 3105.92 2659.47 2174.18 2442.02 2343.16 31397_at 80.4291 24.3428 98.2355 104.167 35.1561 43.3653 67.3431 26.3003 32.4043 69.9044 20.7209 31.0684 33.7193 36.4705 56.2084 26.0812 135.708 70.9351 63.9216 38.0273 73.0268 69.0755 39.4764 35.9456 38.3782 123.996 31398_at 15.9308 -17.6152 11.5571 13.7932 5.30396 13.7308 12.9932 13.0387 35.4223 5.62125 -0.262148 3.06087 31.9753 2.26179 21.5655 -9.33715 -2.7049 19.1831 21.003 18.6363 19.0389 14.0697 8.75707 17.0905 12.7976 11.7146 31399_at 86.4344 50.0729 62.0855 89.1047 70.8928 45.042 82.6335 70.2444 57.7617 61.0467 60.1439 66.2265 87.5545 45.9531 61.6313 45.8318 85.6406 99.676 126.628 47.8304 97.903 72.8632 67.4581 26.4139 77.7258 83.3672 31400_at 12.4541 9.31312 -3.89868 4.4386 -13.8029 -5.66411 2.46988 -23.7586 -19.3941 7.16121 9.54504 -12.3439 -0.64562 -1.86616 0.5633 4.25198 -1.73791 2.48638 15.2875 -10.7556 -18.5831 1.86091 3.32201 12.1516 -3.5095 3.66428 31401_r_at 13.0163 -23.0799 0.364566 8.19584 11.239 1.81244 8.19852 3.61405 15.0063 8.74683 11.0515 18.2999 23.9027 9.38855 6.6802 -0.235197 -0.253871 27.4741 14.8456 19.3657 30.1621 12.6286 6.27112 7.7893 8.89093 8.77839 31402_at 138.419 86.1644 133.15 89.7832 114.716 92.4059 126.301 144.866 137.011 159.503 85.3045 156.12 118.133 164.578 142.206 95.423 128.843 141.248 155.615 156.49 141.008 165.686 109.75 101.429 161.079 116.246 31403_at 16.6741 -8.1025 14.9364 14.4443 5.44362 3.38841 58.2465 12.9588 15.0828 -6.5198 17.2096 3.64407 4.938 -0.27847 -1.52441 12.242 -3.70685 27.3096 12.7579 -4.6479 15.9366 23.575 0.0379001 3.61813 9.12265 4.90859 31404_at 20.1171 19.6846 30.4366 54.3745 21.3368 27.4057 21.3715 12.1978 10.3074 30.0345 -10.0328 8.4741 16.1042 13.6962 14.2807 21.7191 48.5898 25.9065 33.5934 24.3279 20.1853 29.6849 18.788 25.9043 8.02902 66.3551 31405_at 323.881 235.001 247.264 249.8 204.602 195.913 342.757 228.561 209.233 215.707 249.915 202.573 202.256 218.181 227.428 207.132 210.508 252.931 316.255 177.577 627.3 291.643 219.604 165.546 220.578 246.004 31406_at 132.963 73.4631 230.803 187.791 136.36 170.641 92.0834 69.1006 26.6425 242.766 80.3918 99.9544 54.5443 120.039 154.188 110.167 211.484 113.078 98.0338 99.0255 247.215 136.994 83.3589 165.029 74.5015 221.677 31407_at 3.27231 13.8193 0.868223 6.62558 -2.31789 13.7318 -0.662 -12.9076 75.8138 9.23312 12.3823 -3.61491 -18.7757 11.5751 2.73304 18.8907 -16.6187 6.87179 -0.155925 -20.2743 -17.4408 12.2572 0.223356 2.21347 3.18391 24.1278 31408_at 113.622 59.9681 114.364 127.032 85.5356 77.4835 132.709 33.1189 42.3457 122.68 79.3767 66.551 42.8026 51.5134 135.888 62.423 69.303 116.856 114.746 18.2502 89.5689 116.667 72.8466 41.351 46.0466 93.6095 31409_at -4.52738 2.94767 -1.38195 -5.58777 -0.247811 11.8705 -6.37538 -12.0223 -12.372 -3.09805 -24.3948 -4.67678 -23.1493 -6.85612 -6.55262 -2.17878 -20.0826 -18.8597 -1.48718 -21.5958 -11.199 -9.89752 -3.92575 -15.7535 -12.0782 -4.99042 31410_at 145.533 157.69 202.254 191.617 173.264 170.034 173.21 107.954 129.54 230.551 154.531 143.992 109.216 190.775 146.762 188.407 159.374 147.415 154.094 204.768 164.223 162.058 115.845 196.906 113.445 163.165 31411_at 19.0251 47.6266 24.8141 17.9258 12.6704 27.2993 7.82848 20.2041 -0.808758 25.0568 65.6515 7.87179 20.9903 8.15471 13.6927 4.73582 28.6098 36.6545 17.3349 13.9135 25.376 14.9847 15.8586 5.87379 30.5579 22.1886 31412_at 28.0719 61.1661 56.6022 78.5784 90.7857 48.4951 145.062 56.6382 115.298 73.4859 45.5399 102.047 168.211 62.5651 59.0275 57.3755 45.1189 109.731 147.235 30.9209 43.2611 135.385 100.997 71.1112 149.118 95.5136 31413_at 128.004 104.139 142.538 148.488 104.594 112.256 126.06 72.1951 111.984 148.278 120.194 112.608 96.529 82.6708 149.335 91.7946 138.511 120.15 156.007 41.149 165.297 134.205 110.407 112.901 115.344 125.46 31414_at 333.392 379.143 404.582 364.183 247.158 288.233 389.761 231.902 277.088 309.373 286.588 232.685 255.983 298.427 322.438 346.722 418.071 318.348 418.399 384.304 467.893 282.957 293.455 307.683 285.885 359.16 31415_at 17.6846 23.7638 26.6696 46.72 4.83192 15.8018 28.5087 4.51244 48.9072 29.2142 20.0277 16.5717 24.6469 18.8969 18.4279 5.35646 24.5252 22.4257 21.6388 4.3501 13.1353 31.3019 34.1911 13.0548 11.0866 29.7101 31416_at 92.238 71.4745 110.596 97.8402 69.3472 90.4763 95.2023 59.7258 60.702 133.58 84.3456 65.0425 57.3531 55.542 131.005 88.8214 58.6564 107.673 108.515 56.0264 98.6927 79.3672 77.0416 71.6915 63.4076 86.7899 31417_at 141.285 87.7626 159.432 130.051 89.6663 135.063 151.083 97.1518 89.4102 161.551 114.626 101.624 60.9461 93.0269 124.646 112.848 113.994 135.75 142.459 84.2963 140.993 129.701 120.623 87.8448 119.496 163.985 31418_at 17.7226 30.7267 20.0713 11.396 20.5333 17.4997 18.2265 14.8023 11.8831 25.4871 -3.70138 15.5074 16.7617 21.6652 12.9452 12.5417 9.71542 42.688 24.9952 5.9091 11.9114 25.2638 13.4395 13.656 21.3215 55.433 31419_r_at 1937.11 1499.43 1981.21 1414.58 1435.34 1447.35 1746.7 1446.33 1280.76 1284.19 1408.67 1336.5 1194.77 1345.85 1413.51 1366.66 1149.7 1507.05 1218.14 1111.55 1813.87 2063.8 1331.91 1324.22 1227.09 1347.3 31420_at 54.0638 39.9567 79.788 117.664 31.4634 20.3943 81.1804 31.1922 7.54955 110.777 55.6233 28.023 65.8861 44.3509 63.8342 55.1934 62.2579 64.8156 11.8222 18.1803 67.8542 85.4085 31.2241 68.4614 51.6233 102.779 31421_at 15.8039 7.69656 20.2375 26.8048 47.8388 9.1535 13.7397 17.7331 21.8121 27.8657 86.996 19.2818 41.8083 14.3534 15.1334 13.0844 28.4784 12.377 7.9083 35.6877 25.6188 22.2778 8.70833 13.8467 45.6924 12.6033 31422_at 29.8451 2.28445 32.2108 35.6676 21.6173 11.2232 33.0161 23.9397 26.8602 33.4392 44.146 21.8167 35.2495 17.6052 24.8349 33.9986 50.1206 38.9106 37.2163 36.4223 22.4116 35.5618 25.7259 15.6624 35.5513 21.714 31423_at 76.3667 59.4088 78.4334 51.7222 36.6126 52.4492 80.331 34.4429 27.1097 99.1692 56.8192 54.3966 39.6414 25.6272 53.312 60.4339 53.1632 72.865 85.4512 28.7847 82.7 68.1409 59.1483 -2.11244 34.4882 57.3163 31424_at 445.892 330.876 534.38 382.114 304.094 263.404 500.006 275.279 276.223 382.291 330.901 319.706 315.246 334.12 329.991 318.644 382.944 483.677 491.36 336.821 460.699 477.608 305.94 297.141 299.461 335.173 31425_g_at 143.263 105.898 194.198 196.659 90.4853 88.8359 168.432 89.5355 69.8056 180.04 94.1995 103.576 91.0557 100.373 112.056 107.152 205.593 150.884 183.883 113.682 124.313 159.587 77.5733 107.993 86.7734 192.821 31426_at 202.725 176.47 268.142 264.509 176.797 240.531 199.011 150.161 141.762 290.715 198.394 203.31 99.0671 178.179 260.494 207.756 292.019 183.042 208.501 153.298 238.174 177.912 178.913 217.546 120.669 263.324 31427_at 24.9869 1.81061 19.7106 14.1542 5.51239 13.914 22.4592 12.1368 9.92208 26.878 20.956 3.55299 -13.6988 55.6927 15.5461 10.0655 4.40127 30.0473 50.3986 -12.3375 8.88709 12.3833 16.5687 8.23705 5.09833 8.9268 31428_at 963.851 851.733 1151.71 1326.21 1034.81 952.742 1266.08 733.126 471.624 1354.88 1004.99 1068.35 735.746 688.725 1383.65 908.623 972.107 1264.23 1077.88 703.197 1043.82 1504.4 1227.09 872.009 672.499 789.193 31429_at 79.9563 20.8281 33.9701 64.8629 42.2959 25.8131 96.4681 33.8044 18.7722 49.6606 34.7985 28.3274 41.1719 42.0559 37.1371 24.9347 11.6381 67.7055 124.843 6.54321 25.7917 89.2294 25.6378 70.5007 38.728 49.4697 31430_at 56.2773 45.8031 40.1148 39.6481 31.9282 33.9627 52.4657 32.9493 34.121 32.0053 43.6125 26.3981 47.3791 18.2529 26.8427 30.1607 33.2306 43.9821 50.9061 3.4003 39.0679 36.7813 25.5943 20.4041 52.5188 50.0177 31431_at 321.199 649.608 189.034 175.793 561.815 399.248 165.172 428.544 330.872 100.544 458.303 252.545 177.377 223.116 243.959 784.132 137.403 83.8563 135.342 365.171 109.691 100.322 424.363 198.528 515.891 240.026 31432_g_at 738.774 1163.7 458.814 529.609 1445.61 981.156 439.903 908.692 803.91 275.601 1105.91 703.073 614.182 530.782 606.582 1581.78 382.1 235.309 408.804 948.665 209.892 178.409 1060.22 839.796 1046.02 484.841 31433_at 100.949 55.8623 111.326 80.6403 83.6597 99.5194 58.831 55.2216 89.2639 139.466 85.4095 54.1925 59.8693 67.9175 98.9069 61.0361 107.61 83.3796 99.3985 57.6749 103.859 74.2343 66.4364 78.6212 72.8346 101.277 31434_at 188.097 151.278 243.659 118.342 137.314 113.287 232.393 122.623 202.322 145.483 239.99 217.043 30.885 99.6496 61.6406 208.332 274.315 153.38 192.397 140.807 245.403 145.029 214.827 64.8983 92.867 248.77 31435_at 18.1364 -16.7101 11.1631 12.7879 20.7974 -3.55475 20.3798 12.5489 17.1598 18.9868 14.5133 6.1789 22.5553 5.35416 16.9089 9.41051 3.02641 21.2252 22.2958 -47.5884 10.1044 22.5529 10.2609 6.00077 12.066 7.27135 31436_s_at 355.357 277.792 410.494 358.9 284.287 321.253 390.69 234.033 204.002 350.785 367.98 257.203 243.968 256.393 340.449 272.553 402.868 339.996 286.63 230.304 311.758 338.865 326.249 245.485 282.087 318.83 31437_r_at 74.2606 42.7732 64.8875 58.4443 58.4877 64.8132 76.8212 12.3606 19.8715 62.5827 70.3372 51.0011 35.9511 35.4812 49.6253 35.7506 51.989 64.6378 70.1096 35.2882 35.0417 70.4458 58.4576 54.9742 44.848 34.0554 31438_s_at 133.454 241.785 86.9771 123.854 96.2139 153.21 102.604 79.2471 69.9369 142.035 159.58 122.56 63.6658 111.821 149.616 287.011 161.62 173.331 55.9491 92.0679 156.112 143.998 316.629 172.73 274.913 346.501 31439_f_at 98.7327 131.357 150.6 126.945 114.396 108.544 115.513 132.363 139.112 166.257 113.518 104.892 99.4039 92.1831 120.192 130.155 144.589 98.6056 137.51 119.55 129.443 137.354 103.313 102.901 130.913 111.967 31440_at 694.948 616.905 897.232 763.094 572.889 689.428 694.082 477.632 475.68 824.404 627.214 669.295 522.82 531.768 667.523 675.119 700.349 743.576 721.507 594.026 773.753 718.835 630.475 624.53 538.964 689.406 31441_at 92.4006 54.4591 70.4278 63.7269 50.0257 40.1967 95.4191 48.276 38.5653 54.5118 48.9686 55.4482 60.6395 45.3206 49.9381 37.0291 72.0878 87.6906 98.5957 47.8285 54.0158 92.2865 56.2809 66.6335 60.7766 55.0139 31442_at 25.0186 41.0307 41.771 27.4686 21.7261 24.1371 31.7582 18.9685 10.3207 41.2395 18.9257 14.6155 -1.66086 19.816 24.8398 27.0153 12.6023 50.6009 19.5054 1.59722 19.2496 44.6636 20.6089 29.4896 25.2943 43.8142 31443_at 250.085 212.55 266.278 229.632 215.397 219.8 292.824 170.293 179.287 214.626 215.514 192.87 159.967 142.631 225.262 197.177 195.966 267.82 251.092 141.695 195.573 294.612 197.695 180.67 217.75 233.662 31444_s_at 3876.44 4456.75 3561.69 3045.6 4848.85 6103.53 4843.85 3218.18 5019.1 2876.39 5072.36 3837.67 4483.8 4859.73 3546.96 4754.66 4706.92 3831.35 4551.91 4590.73 3191.4 3153.36 4188.16 5833.66 4273.07 3559.32 31445_at 117.049 212.208 96.4136 94.6744 138.355 183.204 243.369 133.185 131.735 117.19 198.417 164.49 129.281 249.207 136.091 130.537 92.8416 133.764 122.042 91.6325 60.8176 107.572 130.831 116.569 104.672 69.8729 31446_s_at 122.154 115.759 139.54 108.665 95.7016 117.629 150.37 71.059 96.5819 145.883 108.445 98.1155 39.2241 103.439 121.874 106.092 92.2657 103.796 152.411 73.205 85.4708 127.595 85.652 74.2093 87.2302 146.993 31447_at 67.1931 58.1292 65.321 65.6258 41.1985 66.3195 73.6126 42.2979 52.7207 77.1433 43.7502 44.7301 32.5089 47.2751 51.4883 67.2723 41.3558 65.1927 60.2571 -7.3732 78.6881 66.1574 54.0967 58.8941 60.3566 67.9381 31448_s_at 7.30897 -15.082 1.92815 -2.53157 -2.8474 1.21957 13.5536 17.1591 118.578 21.0514 15.3726 -3.83686 10.4541 9.05566 8.84598 6.46507 7.73853 4.23406 27.1888 4.2271 8.26688 20.5912 -0.698646 11.4795 11.6709 9.17022 31449_at 84.6283 90.8461 70.2624 80.7287 63.9182 50.7251 84.8325 62.4136 66.3749 88.9109 60.6967 65.8807 33.5574 52.3237 69.2017 102.061 70.9883 102.03 100.811 54.6507 106.968 123.183 50.5705 38.9307 83.4133 110.155 31450_s_at 49.592 20.9174 23.7333 42.6169 17.0448 13.9721 44.2015 20.5905 11.2237 35.9333 28.7406 15.7527 26.8906 10.8053 20.1963 32.6796 18.9096 38.5771 39.2265 13.1526 22.7105 38.7749 16.5062 24.9464 19.6816 33.0339 31451_at 335.108 277.822 334.227 346.969 325.229 215.827 397.304 328.759 262.136 342.005 372.747 224.901 213.557 261.957 285.056 343.667 306.337 412.567 467.092 354.281 343.198 538.56 228.745 238.739 239.786 451.23 31452_at 66.4654 44.4367 37.4708 37.3218 66.8436 33.5278 52.6378 23.5485 37.3264 31.9545 26.8717 35.5609 39.2447 38.8147 41.1304 49.9468 35.7701 80.7445 64.3961 25.637 33.6467 54.1507 39.6945 50.3452 73.9264 37.8454 31453_s_at 86.0123 68.6069 55.9757 57.9184 43.8797 29.0743 56.2434 28.9632 37.2226 92.5985 36.0099 42.3085 45.558 29.6072 47.4723 37.6753 77.9582 84.7391 76.1911 31.0081 58.9204 73.0012 45.1939 25.8187 36.0309 53.2007 31454_f_at 72.9268 16.3172 42.6704 48.6221 22.1161 26.98 58.5563 32.4677 44.4505 53.7139 28.4521 38.2248 42.9064 39.9453 45.6532 17.743 44.4995 66.967 83.2083 29.8338 30.6993 55.4213 13.7713 30.6562 33.3687 65.4184 31455_r_at 44.994 3.4138 24.337 32.3597 26.9722 3.84226 48.2016 15.6095 9.80769 21.4681 16.6598 23.7824 41.2092 18.349 21.6557 23.795 22.9144 51.0009 46.4905 2.26946 21.9813 58.4307 24.4483 27.1836 26.1832 23.8741 31456_at 9.38836 -3.38286 56.2867 17.1126 17.6747 15.2119 22.27 29.6611 28.258 27.0079 16.615 36.5926 25.2691 23.3791 34.7265 28.4899 39.9449 26.7375 18.0486 26.7666 34.1661 28.2636 23.2166 24.7247 28.3214 41.1479 31457_at 444.915 285.917 462.89 475.902 416.37 416.473 533.109 263.733 311.98 421.99 395.562 329.908 416.211 413.473 446.774 391.945 370.19 480.525 489.009 362.02 397.846 558.944 421.695 461.369 337.965 439.898 31458_at 92.0446 126.127 176.691 139.969 132.339 94.0782 180.547 83.1204 145.188 191.869 89.2151 151.346 131.378 113.186 84.824 100.785 129.158 124.697 74.2649 115.711 172.861 130.972 141.163 149.096 127.288 137.748 31459_i_at 10.0007 0.609841 6.97726 2.52464 1.41274 5.65606 10.7022 10.8203 -13.876 10.0729 -3.48287 2.20718 14.8044 2.09751 11.7275 -5.28743 18.4312 10.7221 4.50381 11.7932 18.11 9.68121 5.23799 4.03206 -0.606596 -0.908171 31460_f_at 18.8823 59.5828 12.3479 13.3328 8.88926 6.8239 15.3744 0.0645667 -6.60292 24.6545 0.949098 -6.77795 -12.8104 7.43113 -7.08199 24.6998 -3.72863 27.7304 29.8879 -32.3943 -14.0195 34.9358 14.9818 31.8861 54.0417 78.0279 31461_at 58.7393 4.21187 61.623 50.5703 27.3809 29.7649 66.0203 20.8901 27.446 73.4274 24.0036 32.9619 41.5559 11.7495 48.6305 36.4727 33.1532 59.3173 49.1869 32.0935 49.0661 75.5451 42.4541 58.9681 31.1683 33.4717 31462_f_at 13.3018 8.49004 -40.8948 8.63196 6.57349 33.117 2.8568 17.402 52.3413 -5.67084 17.1753 9.10169 25.2181 12.2955 28.8085 5.44548 16.5481 69.1332 0.631129 29.629 19.4589 10.1148 14.3148 4.73846 13.4045 8.48149 31463_s_at 569.842 870.198 496.399 724.818 1139.67 922.994 380.877 2317.54 1437.92 508.396 2020.4 1484.18 910.831 1782.61 1075.68 1542.53 750.471 415.189 1000.79 2198.45 485.993 242.757 1018.29 1079.05 805.616 586.873 31464_at 37.662 13.2164 12.4289 13.4701 7.90949 2.95855 23.7808 -1.71971 14.9031 16.2005 9.37298 -1.97644 43.8009 19.2064 12.0825 15.6564 15.7297 34.8442 11.3707 10.5357 -5.94627 25.2692 44.1777 10.5102 10.0587 11.0941 31465_g_at 40.3649 14.4078 16.7948 25.8875 16.9425 25.7804 23.4922 15.5579 6.43931 20.4873 22.2364 9.40026 26.3252 14.4603 25.3304 1.72514 17.9517 30.0275 18.8654 2.06974 19.3554 31.3001 18.0954 10.7358 20.1677 20.149 31466_at 226.662 203.901 234.34 175.004 161.962 182.436 192.561 175.414 191.186 199.64 194.071 184.919 154.752 209.874 192.562 175.246 227.91 196.203 238.469 160.126 203.228 186.852 174.692 171.903 187.757 279.665 31467_at 12.82 14.9982 18.1656 26.7092 13.7585 14.506 18.2562 17.9223 62.2038 20.8818 17.2649 18.7039 12.9101 6.45993 26.608 16.8081 29.0455 8.14025 23.2369 17.9661 15.4995 23.7675 1.13532 21.6532 11.2774 18.8279 31468_f_at 391.518 252.349 744.438 628.343 621.043 558.625 395.242 132.269 533.959 602.088 733.02 675.331 687.584 1194.03 392.937 592.958 1137.05 170.304 718.064 557.344 182.748 243.991 177.388 1614.61 328.201 254.824 31469_s_at 110.782 74.7691 52.0471 74.8407 94.3556 50.9544 160.002 49.3328 52.2601 53.0939 63.9442 80.7041 88.6125 77.9975 66.2018 58.0536 -10.154 111.209 89.7505 30.7372 33.6588 124.371 76.7073 69.1148 84.7311 69.7076 31470_at 7.59043 10.7374 26.1707 9.15695 8.18545 7.1015 25.6545 20.0075 -0.812122 11.985 12.6841 7.85682 -0.336495 19.6906 6.86363 16.8238 17.0133 9.7514 9.75831 5.81217 12.4801 12.6768 6.18476 -1.06577 2.97481 21.5575 31471_at 194.394 170.651 277.678 270.383 198.797 232.798 277.682 161.866 163.045 283.946 161.425 157.12 198.312 186.337 251.672 196.898 205.213 266.524 170.33 173.58 250.566 219.736 211.823 246.209 216.429 221.416 31472_s_at 27.4265 97.6762 59.6709 43.9764 207.15 176.539 44.8341 96.6339 97.5818 33.3808 97.0986 292.043 94.2741 60.5553 91.9728 173.092 27.6867 49.1039 28.7157 28.031 89.4413 74.2949 91.4271 60.9519 119.826 91.442 31473_s_at 7.68662 33.0937 8.88736 10.0378 13.595 13.849 3.6194 -1.22723 4.27843 7.65265 8.80042 5.51988 17.5389 5.50611 22.2643 19.4727 9.59297 18.0585 8.9678 113.638 1.24338 15.8069 3.23425 8.55947 15.2975 13.8932 31474_r_at 65.2073 35.1276 67.9387 66.9586 59.9965 55.0411 64.0872 28.5114 49.925 79.7055 58.5091 54.3092 51.9669 32.9364 74.2767 32.409 64.6394 63.3793 112.746 44.2328 62.8193 64.9143 43.7706 53.5345 77.9347 77.73 31475_at 119.647 200.758 166.966 159.203 156.247 112.844 145.975 69.8331 117.116 179.645 110.127 113.512 88.3272 92.4704 126.254 157.622 171.64 193.721 78.4019 119.839 135.39 141.896 118.826 107.852 92.9012 155.463 31476_g_at 16.0125 24.2109 38.5175 42.1448 37.4272 38.1649 51.5657 19.9071 26.2354 71.8716 30.2948 22.944 36.4551 15.2531 37.9815 40.8702 20.2732 30.783 25.9762 13.3271 26.084 46.0688 27.0587 15.5495 22.1988 26.8256 31477_at 1281.78 808.399 2748.11 26.7318 1797.91 2629.76 143.639 3594.62 107.634 2280.1 792.965 0.00333823 461.577 7.7857 209.963 1926.03 551.24 120.978 169.867 3588.49 66.58 18.6799 2702.13 1089.79 349.427 29.1519 31478_at 226.635 176.946 285.982 223.828 173.597 208.982 241.318 184.264 183.655 271.502 185.47 203.611 165.445 188.105 191.709 209.951 215.793 227.752 206.853 180.036 304.39 228.678 235.38 100.743 189.126 245.039 31479_f_at 10.8538 10.668 11.8812 3.47616 -7.73911 8.91111 16.6696 36.2862 44.0061 18.3756 25.4438 18.8989 36.2047 11.737 12.6392 19.1415 22.2288 11.044 23.486 12.2911 15.5656 17.3736 10.0865 -9.84966 38.4599 6.1962 31480_f_at 17.5639 23.3083 17.6829 15.4544 9.15676 3.69219 22.2736 -0.250289 10.6966 16.292 15.206 15.0135 24.8808 7.2607 6.46965 -1.09743 13.2424 14.0334 6.17877 6.12067 0.0976848 14.7902 5.50446 8.50146 40.6279 28.6359 31481_s_at 1335.61 2208.33 1051.91 1094.93 1813.15 2237.49 979.66 2657.7 1861.3 899.497 1653.84 1072.25 1081.74 3617.54 1395.67 1946.8 2093.72 1425.13 1152.77 2513.45 2026.74 904.369 2175.88 2509.63 1433.23 2230.02 31482_at 86.3719 62.0363 156.014 112.442 55.28 87.4336 101.48 66.4338 68.6117 106.102 96.7924 84.0077 36.55 71.8314 95.0177 90.6256 118.054 63.0943 192.186 130.452 93.9433 30.203 51.4997 88.4241 48.5369 56.2641 31483_g_at 62.4806 40.6219 48.2021 34.9869 44.1372 29.7085 14.9272 45.9629 55.3026 36.3051 46.6804 45.5236 23.7109 31.2533 42.7501 54.4008 55.8656 42.0432 58.7668 43.649 50.5064 39.7144 50.5894 11.468 28.5485 54.0002 31484_at 195.822 64.4413 159.216 136.226 139.674 92.6406 194.998 158.683 120.201 172.514 129.393 166.489 159.069 111.588 125.366 133.856 181.877 197.522 225.352 164.033 136.347 200.381 95.3916 93.436 160.872 198.39 31485_at 244.137 104.971 139.037 173.703 139.307 108.641 272.543 84.2689 143.756 84.6076 139.963 143.034 233.972 121.778 101.043 87.6597 114.434 223.889 306.653 86.9239 107.083 242.083 148.45 136.846 143.716 127.556 31486_s_at 14.4861 22.7284 18.6021 18.477 5.67999 12.5881 30.1638 11.0174 24.2935 14.9555 3.9302 16.4508 12.9205 15.4925 24.6033 -6.63018 25.1648 22.6631 30.2744 -4.89138 0.193948 29.385 6.40436 14.834 4.11928 19.2836 31487_at 46.9659 600.467 45.0407 40.0883 12.0538 24.5561 38.2265 12.8382 7.63267 42.3853 23.1836 24.3721 28.5951 10.2916 34.9832 31.2292 37.2732 51.5177 32.5775 2.61077 56.348 39.6679 23.5829 12.8876 21.8384 23.3047 31488_s_at 195.317 361.212 180.731 153.399 199.397 277.109 156.142 461.884 273.163 76.7314 349.028 270.51 108.56 373.124 459.64 373.655 199.615 250.103 69.0377 318.083 559.336 217.316 330.852 87.0857 239.402 311.924 31489_at 5.81787 -6.01692 2.32048 7.51711 6.77999 0.0555992 4.26759 1.2479 6.46505 9.74661 -13.9703 0.128169 -6.12013 -5.67633 -2.3563 4.77085 -2.11748 -4.79409 8.76418 -9.8494 -1.34568 0.453118 -0.310719 -4.64621 10.6622 5.13927 31490_at 184.517 291.5 184.486 160.627 120.684 168.556 162.979 186.49 130.595 177.697 205.086 231.787 191.418 263.947 194.104 326.268 194.627 200.241 167.482 226.599 131.805 146.591 207.436 227.816 278.97 169.6 31491_s_at 22.0721 21.2316 16.5329 11.9868 14.8007 21.9422 25.2755 40.9668 24.3482 28.1345 23.3787 15.2198 12.2177 28.3399 32.6242 36.6104 20.2581 16.6868 12.9271 27.9181 28.0195 27.3242 21.3795 12.562 21.3151 31.9776 31492_at 199.422 473.545 105.691 215.151 385.285 242.008 123.551 410.214 570.118 79.7277 565.436 491.515 231.754 511.64 208.027 415.757 225.932 102.159 212.637 709.636 78.0697 99.2733 284.009 421.94 294.656 350.559 31493_s_at 16.2109 20.4983 41.7953 54.3479 -3.4299 13.2175 23.4759 35.1459 10.9965 46.0504 11.5014 56.7006 37.0556 28.4413 104.251 -10.3339 125.897 22.8715 -13.1019 58.3088 40.3857 -6.54072 36.3695 16.9143 -10.3959 59.0126 31494_at 6.64863 31.2972 0.693056 3.20111 2.18153 -5.18207 2.36219 7.58523 18.2516 3.37234 25.2942 2.14923 6.70182 0.574707 -0.780733 5.03371 14.3432 4.64345 -10.4586 8.21628 4.25619 6.56623 -7.45753 2.74598 8.45477 2.91583 31495_at 161.7 150.28 116.963 134.432 91.8316 67.707 141.662 86.1551 73.701 173.442 115.304 76.0331 87.9948 68.9702 105.502 145.241 97.1932 209.266 155.464 53.439 106.778 172.795 108.835 63.8839 97.329 141.862 31496_g_at 44.5963 111.154 26.7144 44.7578 48.117 18.8392 36.5043 74.4591 42.386 37.7323 30.4287 25.3416 36.1115 20.9132 37.781 98.7188 17.4086 49.3408 56.8248 27.9726 46.9773 67.0636 28.6744 17.5857 60.5502 68.935 31497_at 505.617 182.812 244.615 371.959 367.658 200.762 675.211 147.043 281.665 281.782 467.942 315.647 612.477 272.211 291.185 232.926 236.933 468.176 599.134 152.485 146.015 498.539 351.821 413.069 278.355 256.027 31498_f_at 110.631 93.91 117.343 115.912 114.124 93.2498 135.162 50.2503 51.0993 192.507 78.5613 60.7932 84.2877 63.9764 1161.23 65.1305 73.5888 106.673 92.2997 56.2261 120.829 140.281 81.5486 87.988 107.299 112.449 31499_s_at 185.215 372.524 108.422 58.0414 65.8494 131.197 74.976 155.398 156.168 65.114 332.408 93.3669 40.2468 48.3643 235.632 305.526 59.5797 172.501 51.1154 35.4081 175.308 126.26 162.442 46.8763 245.074 282.703 31500_at 27.4203 72.3758 59.9884 89.2656 65.9354 38.8349 206.357 38.0677 71.8904 54.3543 68.0818 61.774 80.9183 30.8804 46.5727 39.0101 55.2935 43.7646 33.7343 49.3529 45.3821 77.8774 66.8129 79.4983 44.4103 42.7275 31501_at 24.4519 15.8334 23.0708 25.785 7.48233 11.7789 20.2907 17.9086 15.0406 28.8901 26.654 24.7379 20.9539 21.9132 27.6308 16.5698 22.0871 34.6348 23.6795 23.6595 24.7305 31.0841 7.60735 23.5537 7.58657 26.8873 31502_at 216.36 147.966 201.693 199.259 143.672 150.893 205.251 81.876 96.8189 207.512 139.279 142.502 127.597 122.642 159.657 133.832 195.733 216.858 203.75 101.075 164.084 234.303 162.102 156.533 134.182 280.86 31503_at 255.058 267.088 373.406 238.99 199.44 281.69 318.483 262.617 267.787 302.66 305.494 273.436 149.293 233.14 300.935 318.781 225.552 260.969 179.768 201.208 298.482 259.19 287.533 142.026 252.512 337.124 31504_at 309.114 813.374 331.275 303.492 657.109 697.327 363.072 923.903 1033.72 312.493 968.042 559.009 690.077 1010.75 557.992 1051.04 383.538 302.636 436.384 1349.67 265.155 271.516 631.07 625.897 497.34 184.335 31505_at 4667.83 2995.08 2239.38 3536.17 4029.17 2363.54 1549.66 3372.24 4213.76 2511.98 4295.6 4565.57 3202.51 5954.55 2116.27 3344.31 4529.62 1863.93 4338.32 4097.11 1623.42 3717.97 3388.32 3069.9 2769.34 4173.32 31506_s_at 112.576 66.3044 114.994 129.548 59.3436 98.4533 74.9918 65.0195 63.4817 115.631 66.1099 91.3635 68.2316 69.8307 1054.46 57.0384 88.9723 111.276 118.207 57.5865 120.842 94.2988 79.7706 93.4094 86.3409 109.806 31507_at 91.4096 46.9761 116.796 139.689 49.4573 49.2495 77.6235 56.1913 29.8674 84.6329 47.9075 51.3326 36.8647 43.5644 73.9035 52.8896 147.116 81.7995 111.672 46.8813 74.8246 71.7809 57.3322 50.3598 34.5141 108.091 31508_at 633.803 1468.57 628.728 2010.77 1927.59 1184.74 730.908 1989.38 2468.85 767.382 1671.49 1216.42 2056.22 685.638 1217.01 2427.39 818.793 685.466 1810.67 2496.72 873.725 694.162 1271.83 1902.77 1142.92 562.811 31509_at 2329.11 2370.87 1887.55 2790.52 2961.98 1743.97 2267.07 3297.89 3093.27 1931.97 3009.75 2264.58 2154.64 2882.43 1460.15 3146.21 2845.39 1808.08 3395.32 4302.08 1696.78 1565.52 2471.53 3014.6 1870.69 2741.53 31510_s_at -31.0105 -59.0063 -81.7433 -77.6557 -33.9927 -146.388 -15.9843 -48.9684 -23.3657 -74.91 -51.6177 -10.6544 -9.95432 -83.7943 -88.8 -33.1885 -117.257 -10.9104 -38.9316 -14.5668 -58.2311 -7.65442 -29.1697 -71.304 2.52721 -84.3726 31511_at 2809.33 3676.6 2448.39 3973.05 3411.82 2625.96 2228.87 3520.01 4172.56 2442.8 4419.01 3693.04 3391.38 3310.72 1992.36 3671.85 3771.48 2189.63 4429.26 4226.52 2161.09 2008.76 3267.69 3680.73 2870.88 4270.95 31512_at 9.45511 148.159 8.64014 7.47499 60.5111 -0.550366 -1.32209 21.7884 54.6128 6.76813 1.49445 2.36806 25.0875 -0.662038 6.53622 53.1269 9.29057 17.3143 -5.22744 7.23516 154.495 56.0799 5.95262 -1.80914 79.2371 179.225 31513_at 2.93526 12.0201 5.43453 1.14975 0.298467 -20.5783 16.2259 29.6134 25.3713 9.87214 33.3544 7.91398 8.04776 15.7596 5.29332 0.677284 40.9826 -0.330623 14.8681 -10.6584 21.3336 14.7563 32.91 19.1538 37.1837 18.4595 31514_at 245.995 220.69 255.595 254.188 181.269 166.122 287.157 186.365 141.131 280.934 208.223 182.291 165.387 188.547 225.701 226.086 197.999 290.932 271.399 199.645 230.491 254.124 194.936 190.056 169.325 243.641 31515_at 132.075 111.018 117.117 81.2887 74.6144 111.555 113.905 93.1961 50.7424 164.196 80.8896 68.3882 38.9222 61.6832 125.598 112 138.397 141.705 145.53 25.6556 137.396 152.548 86.4109 52.2877 107.026 143.951 31516_f_at 25.4559 55.0777 76.3595 71.8499 37.7439 47.8556 28.5838 103.971 64.7935 45.6826 109.391 99.9411 34.9766 52.9313 116.968 58.5344 98.8488 11.9967 35.5675 88.8947 34.7623 3.96758 53.1509 60.5452 30.3164 48.7157 31517_f_at -78.1238 -66.3389 -37.4766 -57.1317 -110.18 -13.3038 -71.7309 -22.6964 39.3548 -55.5401 -47.5517 -29.8436 -69.0935 -30.2268 -27.5739 -26.5842 -66.7108 -93.7383 -92.9327 -27.3404 -58.6789 -112.889 -41.465 -23.5987 -42.5712 -70.68 31518_i_at 9.77901 -13.7223 6.22211 5.93088 19.0457 10.5148 6.32725 8.73567 9.35458 11.0881 -1.54634 13.0513 15.7108 8.68393 9.55741 14.5561 18.8726 17.2784 27.1228 7.1847 11.4523 23.7309 15.2884 -1.91455 17.7072 21.74 31519_f_at 66.6104 76.5278 136.229 172.465 29.6359 96.0369 59.1934 93.5217 97.9677 126.062 112.731 111.624 63.4733 73.6295 179.675 69.9531 147.691 47.8672 101.219 123.708 69.9525 43.959 72.1419 103.818 63.9556 104.49 31520_at 78.5702 53.8695 89.6268 79.6828 60.9489 50.6197 103.09 99.9293 77.4194 188.277 55.4344 60.5107 94.4522 83.5782 89.3978 57.5755 59.8272 113.007 70.1528 54.1917 116.551 115.697 64.2053 31.699 82.9713 87.1547 31521_f_at 60.3145 194.842 50.2193 29.3946 28.0187 17.8413 124.573 319.164 36.3783 17.0563 121.317 56.3676 24.1385 122.053 88.787 159.83 155.593 68.5187 144.957 95.0836 48.5494 21.7522 201.034 134.021 105.271 88.9827 31522_f_at 40.4373 131.637 77.6374 50.5614 26.8489 29.8171 168.993 444.212 56.15 95.9991 126.149 43.5945 45.2206 276.064 315.728 196.863 127.694 60.3833 104.611 53.2071 151.926 84.5736 164.92 37.0279 210.32 73.4805 31523_f_at 50.5534 235.74 95.2023 73.798 33.3419 29.9881 274.755 623.513 80.5102 148.692 186.27 57.6264 61.5433 478.966 345.216 377.648 169.62 107.685 156.323 87.2175 187.422 143.954 232.637 52.1777 312.184 91.6722 31524_f_at 93.9559 240.715 98.8803 78.9586 85.0067 68.2329 452.09 437.966 160.375 109.747 234.836 92.3869 70.8851 220.497 335.878 271.063 116.026 111.365 158.986 65.777 154.078 144.098 267.261 73.3428 385.856 105.905 31525_s_at 152.835 247.238 175.198 147.887 133.816 338.401 306.868 126.152 422.177 149.315 431.412 222.841 185.287 100.523 168.616 130.595 124.979 95.6294 185.459 141.115 123.855 98.6888 104.615 276.737 132.273 187.846 31526_f_at 57.4955 122.939 125.214 106.963 137.412 242.223 62.5394 79.5352 186.838 464.839 199.881 117.365 135.227 203.143 439.822 473.57 123.351 16.0335 73.1768 127.916 95.9424 48.2402 246.293 287.212 86.1813 45.3425 31527_at 2847.08 3743.96 2868.78 2915.08 3241.26 3103.45 2406.87 4437.69 4189.58 2018.08 4633.97 4733.16 2325.45 4325.4 3306.11 4174.7 4635.37 2125.74 3557.53 4586.4 2044.5 1436.37 3545.06 3643.06 3268.61 5038.63 31528_f_at 90.0681 573.17 173.548 138.89 98.0283 51.3296 759.884 981.041 261.971 295.362 550.201 154.346 147.141 1204.45 1049.26 926.876 489.761 189.074 318.342 188.076 491.992 341.351 668.983 113.995 1024.69 180.624 31529_at 336.346 387.269 471.518 385.115 395.614 407.96 520.693 287.177 290.421 520.54 313.787 378.059 439.105 317.819 547.481 384.274 411.588 403.838 360.28 373.932 529.63 401.483 390.615 339.686 442.88 379.443 31530_at 333.8 251.052 404.532 360.427 184.099 247.109 322.543 166.311 145.819 361.875 260.752 194.359 249.862 165.436 286.447 269.828 329.29 266.738 392.819 177.252 340.004 309.221 206.928 198.545 159.222 287.845 31531_g_at 117.994 107.653 181.375 115.041 94.8942 131.532 99.4452 91.5453 110.678 118.235 97.9721 111.34 60.6961 105.013 99.1406 174.097 94.3519 106.865 134.733 58.2959 120.157 93.2162 113.631 79.3342 90.5501 131.404 31532_at 36.3703 37.0203 39.4546 41.4827 42.2762 38.6406 69.2543 43.8078 30.1821 39.8868 26.1838 23.7334 28.8159 17.2486 38.4488 8.58941 36.1513 34.9085 37.7964 22.0144 -10.32 48.3087 17.5142 98.5352 30.9035 55.7563 31533_s_at 75.0352 137.625 103.158 76.5293 101.342 100.263 82.2784 137.337 62.6842 76.292 57.8575 109.848 67.1284 89.6286 114.556 98.2331 92.763 106.845 67.7007 78.9151 69.8532 76.9098 107.777 82.1863 129.247 73.7012 31534_at 53.314 33.853 105.342 60.0774 40.6483 14.9409 47.2046 17.6704 32.8513 52.8225 41.7102 32.1758 0.982107 19.6521 45.9393 31.5614 33.1402 66.5682 49.1147 8.43176 34.5671 46.6884 23.6411 22.447 34.7197 70.7104 31535_i_at 286.113 238.052 387.073 341.52 253.774 363.97 302.587 163.841 212.074 393.946 212.398 206.46 222.603 165.066 273.941 230.974 247.683 325.85 243.646 264.651 327.885 273.507 285.105 239.447 196.487 279.954 31536_at 291.484 863.607 537.699 761.418 923.643 1696.09 425.728 1149.64 1073.22 411.312 1386.77 1041.33 862.449 1597.74 1111.15 1317.19 589.211 296.042 643.462 1104.78 636.459 266.358 894.496 1430.28 730.505 373.029 31537_at 73.877 35.8266 75.7463 75.7623 25.4809 55.9993 70.1185 21.6281 14.7815 82.4469 42.3915 5.56239 30.9948 32.3071 39.4502 34.6345 17.2803 63.2891 36.4443 17.8202 80.0114 67.4139 30.4761 32.5284 44.1833 67.3803 31538_at 3858.49 3568.89 2560.07 3682.01 3804.5 3141.21 2643.65 4237.01 4803.12 3684.05 4815.65 4024.79 3355.67 3807.53 2902.01 4225.96 5472.93 2926.16 3379.99 4534.5 3073.94 2866.11 3370.49 3884.78 2962.86 4449.96 31539_r_at 11.1541 1.50669 -0.373076 7.51078 17.1477 10.7468 25.8529 -4.72068 -52.8976 5.70422 7.77927 10.4667 2.58366 8.59767 6.15638 -7.23611 -0.0945169 14.8828 6.81798 3.39535 -1.47433 20.2726 9.77489 15.1339 -1.73042 31.9084 31540_at 26.7391 27.7993 12.8639 12.0506 16.7315 9.4833 15.5019 6.06603 9.0613 15.3688 16.2139 14.2839 11.8532 23.1666 23.0667 32.0804 20.9166 25.1732 23.0309 11.9647 16.6172 16.3465 18.472 17.3066 34.7037 23.4199 31541_at -19.123 -5.28788 -12.5198 -7.89719 -17.8845 -10.1759 -27.9583 -8.07375 -7.8137 -18.2261 -14.3346 -17.2184 -18.402 -12.7933 -14.1021 -8.18457 -16.4756 -18.4655 -17.2907 -7.74796 -27.206 -29.4872 -14.7844 -6.03283 -17.6214 -22.3056 31542_at 8.3213 11.2962 15.1326 15.0758 7.19612 4.94772 21.1836 31.8066 12.2626 20.1009 7.23423 20.4523 13.2898 8.29188 9.35298 -19.4876 4.16099 14.9405 19.7955 -0.772443 24.0632 11.5116 16.7371 29.8269 16.2378 13.9423 31543_at -175.867 -125.024 -117.8 7.52292 -99.2543 -94.8137 -159.404 -59.8348 -79.6776 -139.096 -36.5622 -79.7605 -102.745 -76.8493 -116.857 -79.0781 -103.032 -182.623 -93.9038 -26.6313 -93.0832 -204.174 -113.75 -58.3026 -134.863 -123.237 31544_at 316.537 408.582 395.382 408.186 328.887 363.273 411.162 267.843 256.768 322.853 382.237 264.947 346.194 250.028 452.608 318.325 310.225 345.625 331.732 295.923 310.202 332.45 389.444 313.006 191.506 342.9 31545_at 3205.89 3515.46 3143.06 4604.16 4042.05 3357.76 1610.64 4094.25 4118.03 3536.29 5040.27 3918.19 3064.76 4850.56 3544.92 3938.1 5160.17 2151.06 4460.44 4712.16 2273.54 1994.19 3420.63 4781.54 3243.49 5462.8 31546_at 1633.98 2218.3 1271.65 2217.51 1991.19 1370.01 847.52 2536.1 2597.5 1415.81 2787.18 2872.76 1603.25 2571.96 927.414 2173.5 2308.51 622.274 2559.39 3425.1 1030.79 1184.78 1801.31 2323.54 1811.76 2935.58 31547_at 490.371 511.181 721.257 505.422 456.9 1055.43 619.837 392.48 487.991 782.34 663.805 628.093 369.522 649.683 756.701 627.963 711.944 515.647 403.001 614.955 692.127 392.023 572.056 536.467 489.651 702.04 31548_at 69.9426 41.3118 61.8619 54.4029 35.7412 37.2194 55.6259 30.4019 32.4547 58.8639 47.069 39.0135 18.631 35.8371 41.3498 36.4799 67.0825 40.7728 19.597 22.927 50.6523 44.7525 43.4844 29.7574 50.6778 52.6377 31549_at 24.3604 15.083 23.3659 23.8248 22.631 11.6967 11.2342 16.2788 22.1637 19.9128 13.1205 18.5584 32.082 13.2905 23.6982 30.1577 26.3465 28.5061 18.4828 10.8969 0.0949905 36.1219 11.8425 10.0447 23.61 22.3381 31550_at 148.338 116.584 172.881 200.161 114.018 151.487 129.321 103.038 87.9791 172.436 120.841 137.049 88.5522 109.861 211.032 104.443 252.606 117.372 201.77 148.503 163.055 110.905 99.7886 152.661 114.661 154.689 31551_at 42.0539 9.54446 28.6697 26.5075 19.7603 45.4293 29.6711 23.8032 31.6146 37.7876 25.3661 25.2468 17.4802 18.661 35.4816 20.5033 30.0716 35.1721 39.4426 14.3999 35.4072 39.2748 17.1879 18.8966 22.8506 23.6823 31552_at 166.386 142.225 171.244 116.292 118.914 122.312 128.191 63.9377 66.199 145.228 123.813 99.8514 80.5616 88.348 123.105 100.631 81.0213 121.707 128.766 80.8697 126.346 117.471 101.741 109.161 101.677 89.1286 31553_at 11.0695 -26.1006 14.1655 8.75973 4.47381 9.85712 2.12969 -3.16035 23.917 8.84162 -13.3061 6.99163 4.62538 -7.57178 23.9056 11.327 10.7387 12.6398 9.73723 12.8348 -0.203757 22.0005 12.4638 2.93635 10.8915 12.0212 31554_at 466.869 363.157 375.339 523.481 312.442 312.931 458.098 280.371 219.436 527.972 296.745 309.396 260.651 285.068 353.035 310.695 415.856 452.022 568.667 329.268 441.602 513.787 282.006 301.283 231.014 526.41 31555_at 918.454 728.89 840.046 968.806 141.333 619.899 967.869 679.892 676.787 978.775 768.182 812.051 728.888 774.966 743.73 737.578 831.018 1037.91 964.267 673.343 770.905 927.413 757.723 646.211 642.812 956.31 31556_at 105.831 93.9206 93.8486 100.517 73.7581 86.0735 139.49 60.1188 66.6259 115.247 62.1101 55.7119 81.0913 66.5567 79.2366 93.6738 77.574 99.5648 91.0142 56.6204 125.032 125.58 68.368 59.3143 94.4195 177.783 31557_at 6336.55 7294.08 6579.89 4694.22 6317.23 6098.96 6744.25 5272.74 6602.19 3620.29 7337.71 4544.12 4699.84 4813.55 5514.38 6463.77 5768.87 6397.87 5593.77 5771.56 5956.98 6498.24 7042.88 5632.2 5150.34 4498.55 31558_at 94.5106 22.3793 40.5256 64.1784 44.7439 35.2556 61.7619 36.681 28.4735 39.7757 51.5785 43.3877 99.8263 32.302 42.0635 28.3647 38.7843 83.2929 80.4497 24.6675 36.5848 84.7558 49.1817 42.6628 59.8757 53.5631 31559_at 124.549 107.922 138.575 119.122 90.1649 118.982 125.268 77.0613 96.0434 117.731 93.0793 91.4044 83.0734 83.0898 127.181 78.8394 188.789 112.015 91.9147 110.65 162.222 104.13 100.521 82.368 101.893 130.637 31560_at 78.9894 31.4733 62.4509 140.46 47.5125 42.6033 63.4657 9.46983 31.4449 73.8482 59.6659 34.6002 37.3094 20.6217 44.6466 40.2777 57.3272 70.6735 96.3875 35.7516 51.3298 57.8553 41.5229 50.862 32.2673 54.5388 31561_at 57.1918 101.262 109.496 63.7561 41.0167 50.3781 70.7754 82.3953 51.5631 82.0633 55.9502 32.6657 -12.5336 46.1896 43.0307 41.681 19.5062 42.6805 77.823 41.8782 20.8305 58.1969 48.4048 63.6873 17.2878 61.6913 31562_at -10.0784 57.8828 24.4152 -22.7521 -5.88861 8.79439 -29.0252 23.5921 62.1528 -8.08212 6.17613 24.6652 61.8152 -8.74484 -0.20449 -9.14832 4.65378 75.0421 -10.0185 44.7822 15.5991 -28.5082 1.87017 6.28557 45.2713 -43.8786 31563_at 3.87075 -28.1437 24.7544 12.7108 -1.31689 10.0094 -4.19204 7.82025 14.7575 8.88042 15.2514 10.2426 15.6515 19.2316 19.4447 -1.23541 21.8456 24.7328 -0.552131 19.8892 25.9609 6.40566 1.50182 6.79988 13.6043 3.27369 31564_at 109.668 59.2715 105.943 116.718 50.2078 77.1799 91.809 53.0366 38.9174 114.975 61.4079 54.852 60.4089 50.1061 66.9031 59.2399 59.9341 117.228 104.977 41.73 58.655 107.818 73.7493 64.1165 80.8419 157.966 31565_at 77.1675 66.1019 71.9599 79.158 52.9975 41.375 69.6631 38.2291 50.5804 74.6192 64.7212 57.2348 63.2578 53.0092 55.2938 39.7863 55.3942 67.4218 67.3361 19.3424 52.9268 92.3361 47.2105 61.7862 55.7107 74.2671 31566_at 457.371 377.694 331.429 322.951 306.946 356.719 308.223 162.251 226.292 412.158 282.774 303.057 340.254 336.649 399.75 330.049 286.712 359.033 298.984 298.774 333.587 404.992 326.063 296.761 366.833 313.025 31567_at 90.2235 78.6573 105.756 94.8393 55.2381 79.1635 148.843 71.3313 1.33535 116.883 87.2862 87.6017 69.8406 52.5886 81.2312 51.3537 145.81 98.0862 103.676 37.7131 96.7429 83.7837 51.7689 68.4204 55.2646 93.83 31568_at 2193.88 3324.68 1786.61 3026.42 2807.46 2399.43 1253.53 3289.3 3972.17 1723.88 4089.22 3190.4 2758.39 4113.01 2672.37 2981.12 3762.74 2005.45 3175.74 3728.22 1602.47 1459.51 2653.49 3511.48 2756.04 4302.85 31569_at 97.9357 50.878 128.158 111.845 62.2553 93.6127 95.4669 71.1382 79.3392 140.51 49.6829 67.4407 46.0112 66.7013 64.994 48.1936 125.689 57.4873 76.1713 36.5436 97.4173 76.4665 66.4281 62.6788 99.2655 141.049 31570_at 67.4934 71.3438 84.3728 74.4425 56.1606 87.3683 58.6777 36.5156 82.5123 55.4878 57.329 62.8154 48.4845 69.1918 67.4257 44.3643 65.3176 57.8876 42.9305 48.8184 86.7895 66.6122 77.9568 66.0424 57.991 50.9147 31571_at 12.5044 9.54178 20.6126 44.2425 18.2972 8.51886 7.81241 10.9756 -8.05703 29.5934 10.3485 6.78031 3.00775 13.2679 10.9589 2.1581 63.5216 7.38197 23.5164 28.1586 21.8971 7.24202 11.6907 16.0121 4.07751 68.8394 31572_at 87.9604 54.2085 157.824 97.9837 71.7201 80.539 103.607 96.3876 57.3154 126.615 66.0395 73.504 29.5308 81.2299 71.4969 71.4727 114.212 77.2251 80.5255 54.0515 89.7959 113.211 52.1105 83.9819 73.0566 104.932 31573_at 1136.1 2764.5 1300.7 2370.01 2288.21 1489.71 1040.22 2250.24 2779.82 937.356 2900.05 2679.17 2099.51 2784.21 2093.8 2383.25 2204.63 677.15 2942.06 3337.96 1174.03 954.436 1675.42 2693.64 1760.5 2188.28 31574_i_at 52.8251 20.1416 48.2448 29.0707 16.0303 23.1329 28.6589 23.9772 50.7459 25.1989 26.7714 14.6392 -6.78946 57.2455 14.6523 25.6787 105.805 30.288 46.0359 20.775 25.7309 22.4689 34.4654 33.3963 26.4565 117.768 31575_f_at 205.778 167.67 229.14 180.18 192.889 196.416 235.102 155.927 362.999 80.04 179.807 132.44 174.172 493.228 28.02 195.431 734.733 81.2351 211.746 279.927 35.7276 32.1727 294.214 541.391 120.745 274.929 31576_at 47.9478 10.6369 61.0324 39.32 24.1359 32.6198 44.9815 11.0189 31.716 8.7691 16.8715 29.5628 9.25558 51.2349 34.3509 18.1804 21.1044 32.8085 24.4057 18.8433 57.156 48.0985 24.6104 24.8203 29.9676 34.8144 31577_at 37.0896 22.4401 21.6207 24.889 11.582 28.1255 24.0025 32.6098 45.9685 21.9003 21.8325 33.7716 45.1605 22.1017 21.8848 18.4473 31.2069 35.7945 36.5004 32.674 44.3944 27.3616 17.815 25.8722 44.3971 27.2235 31578_at 29.8769 48.3359 32.5197 38.6347 35.1956 27.9306 19.831 26.072 32.3122 76.7322 41.8975 29.6722 26.3615 24.0103 29.0589 13.8278 24.5646 29.5189 28.4086 14.6679 28.3338 36.9859 28.1464 20.7669 30.3502 74.775 31579_at 163.502 70.4437 173.512 225.425 138.472 120.298 212.84 63.7697 83.0068 310.711 93.0038 115.932 156.608 74.66 128.662 89.4967 141.729 151.22 189.812 29.86 128.169 179.13 124.825 405.887 111.041 129.955 31580_at 52.9366 19.7066 33.0107 31.989 19.3633 36.3136 31.8595 10.0424 17.4939 35.1739 17.5775 23.4293 31.6536 7.29694 20.666 13.0111 14.2803 48.3396 24.9993 12.9458 32.7755 47.7911 28.0614 16.5432 35.1207 28.7763 31581_at -6.26854 52.0355 -3.57515 6.76259 31.5201 -6.53911 -26.5714 54.173 25.959 -11.3853 4.26559 -5.8544 24.1051 -6.52568 -1.34474 -36.4418 -0.0164678 7.56941 2.04241 19.2027 138.659 188.365 5.60878 -11.8931 134.878 90.857 31582_at 24.8778 25.3512 38.8318 27.4242 22.3016 11.5249 32.8036 28.7016 15.3953 31.0779 9.86239 14.3031 6.58549 14.8964 21.2585 14.1874 7.31915 33.6318 8.26861 -2.83335 15.3786 28.236 17.4288 9.47242 26.4519 13.7552 31583_at 2172.91 3017.39 2115.7 3134.73 3295.13 1818.98 1424.39 3204.18 3793.5 2667.19 4223.25 3444.45 2570.12 3829.49 1646.82 2983.45 3652.55 1287.71 3992.39 3800.89 1535.37 1653.81 2473.69 3512.12 2476.15 3576.69 31584_at 2117.27 2812.14 2353.56 2830.51 3040.62 2629.42 1609 2521.5 2909.96 2861.65 2841.06 2869.71 2601.37 2508.11 2867.21 3025.66 3571.21 1373.77 2822.58 3485.23 3200.62 1759.21 2296.06 3913.11 2520.83 2815.26 31585_at 34.5438 11.6979 37.2077 43.1838 40.9435 20.5239 42.2412 14.6506 28.6528 55.9846 20.8292 28.9977 27.6198 27.265 37.065 27.0738 18.3819 45.7599 6.13577 20.018 62.304 48.8833 14.6744 28.1157 50.1819 52.9943 31586_f_at 3.18616 77.0231 26.4637 47.3681 198.743 25.569 3.4899 45.914 32.7872 24.2809 31.5969 4.27229 9.27717 13.3097 42.8606 100.308 23.5022 31.5629 -24.8298 6.81922 183.76 146.243 4.47085 0.942018 157.964 365.15 31587_at 181.501 212.566 204.545 153.038 166.185 176.01 146.294 140.744 125.396 201.009 124.771 186.639 127.368 191.151 207.514 166.18 126.492 109.559 114.667 171.361 149.049 159.633 168.622 198.992 128.774 137.886 31588_at 32.5297 16.6308 45.8613 19.7044 27.0079 16.4979 31.1852 55.0265 45.0034 37.3568 13.3185 28.0031 55.0356 52.0473 26.1821 19.0582 57.9871 54.1209 45.6519 23.6272 8.71382 35.2368 27.3937 24.5918 44.9872 30.0445 31589_at 105.013 82.0771 170.981 224.179 111.59 106.83 70.3539 55.2523 59.3125 245.946 101.18 89.4065 62.7111 59.4327 153.811 73.1515 378.767 111.934 113.635 82.1207 196.735 116.22 86.2253 133.321 81.1903 274.657 31590_g_at 292.29 185.749 324.006 304.823 289.5 255.7 367.704 173.877 207.221 321.117 220.587 246.739 242.408 508.603 274.655 268.685 275.041 339.228 345.131 183.374 309.498 359.115 270.465 320.601 197.019 274.697 31591_s_at 63.8859 34.072 46.7089 82.7017 51.6072 47.4432 74.8138 40.5893 67.8755 55.7212 24.4661 48.2378 37.2933 18.7608 45.6786 35.5036 86.5916 72.705 41.3414 27.095 178.323 77.2792 40.3882 45.0174 33.9799 37.5881 31592_at 174.173 101.539 243.086 226.486 128.174 202.329 210.733 88.8999 95.7511 248.928 114.014 103.241 89.3639 138.484 170.145 137.303 194.384 131.702 204.028 260.132 237.073 145.838 117.987 152.439 108.207 128.01 31593_at 95.0869 181.17 84.3667 59.1124 116.62 148.584 73.2453 244.048 134.838 83.1845 217.8 161.446 80.0193 142.005 173.887 194.318 84.5018 71.9102 46.206 108.528 96.5753 81.4343 86.8032 49.5598 116.09 44.2284 31594_at 280.535 197.009 312.187 248.867 195.124 166.122 290.952 208.946 221.671 301.538 222.152 270.958 181.817 208.164 234.359 233.562 268.68 263.616 286.119 184.085 272.477 290.231 230.207 168.985 240.46 305.179 31595_at 109.507 75.3342 83.842 88.2029 94.2059 72.5939 154.544 84.1878 92.718 65.4351 97.8749 125.482 116.242 87.9654 60.399 76.5329 66.6054 120.872 137.48 61.5014 80.7959 152.031 85.7811 72.77 120.025 88.4655 31596_f_at 1354.61 2147.25 7748.04 1392.41 1940.92 1147.63 1375.25 1234.61 953.289 1978.58 1328.36 1006.52 902.432 956.885 1349.8 1958.33 1165.89 1364.11 874.469 1167.08 1641.59 1603.45 1289.93 1044.1 1987.3 2241.64 31597_r_at 1961.83 1587.88 1548.52 1592.51 1827.06 1571.36 1880.28 1959.86 1358.65 1469.72 1628.74 1669.62 1249.58 1678.65 1600.49 1834.38 1102.24 2092.8 1530.73 1433.71 1393.03 1937.63 1702.7 1593.03 1480.16 1805.29 31598_s_at 64.2933 151.32 131.897 72.3257 58.5186 64.2836 115.808 100.845 115.183 128.82 119.543 164.343 80.8068 126.171 78.0854 83.1306 131.127 87.4137 144.398 135.186 88.4958 75.9467 145.237 99.944 64.9968 69.6289 31599_f_at 34.5335 30.4737 47.1247 43.4622 45.1064 40.9947 67.2951 34.196 42.0618 51.2861 55.8618 60.0043 52.1335 33.5949 43.6012 43.8636 39.04 56.3817 50.0945 31.2864 49.7455 61.9098 63.6695 41.6344 136.84 70.4976 31600_s_at 92.1684 123.478 131.118 128.944 124.442 149.732 125.921 121.971 260.924 129.685 198.105 163.457 136.944 209.168 203.56 188.715 127.934 95.6377 106.27 434.736 107.804 80.9726 125.432 239.253 109.756 125.397 31601_s_at 6.89252 2.23759 4.11246 1.62062 118.75 6.98837 2.02108 6.00279 -5.67053 -17.8222 17.7912 3.32663 9.19369 3.14731 6.03428 4.5986 6.77768 -4.18302 18.9696 17.5452 1.72709 -7.0814 3.0438 8.03384 11.1087 -5.50171 31602_at 118.755 69.8942 124.225 95.1037 94.8991 76.7431 142.316 65.4532 106.906 135.186 131.838 74.8823 71.6054 86.6463 131.07 86.2513 93.8452 130.424 185.828 91.0749 216.482 134.276 89.7088 87.8811 78.8428 143.371 31603_at 40.8079 26.9286 34.5025 27.9533 1.10459 32.6061 36.4292 25.6252 15.4698 16.9915 12.0612 21.1182 18.0322 12.9521 26.5348 14.9692 36.2621 45.2359 42.4012 21.8009 37.8761 49.8239 21.3173 27.0239 38.8894 45.7598 31604_at 229.027 79.6353 197.734 196.074 101.25 241.995 130.832 205.105 86.5805 148.667 89.1887 150.393 88.5453 188.472 97.5548 37.6332 244.989 187.043 109.506 99.108 263.464 185.681 132.6 50.1334 123.502 297.246 31605_at 100.052 117.308 91.6667 86.6898 72.7004 193.953 87.7579 145.486 138.179 68.2773 160.229 153.827 98.5185 247.983 161.412 80.6467 113.863 65.6953 106.629 210.107 95.4082 94.0413 116.694 137.746 93.0791 77.6654 31606_at 26.8675 -34.0231 22.7796 20.6985 8.5148 71.849 13.7819 14.5797 6.36567 35.807 16.6904 23.2867 20.4774 14.3525 16.7075 8.96311 19.5587 18.7438 0.265347 20.1143 18.0926 17.4167 15.4594 18.3693 27.0456 14.813 31607_at 48.7903 42.9693 84.4513 86.8609 48.5702 43.091 62.8137 28.9883 42.2539 130.481 55.4143 39.983 55.4713 45.611 71.5095 46.4031 83.6092 55.2051 114.964 54.7748 73.9372 59.2552 45.2788 123.532 40.8247 48.7161 31608_g_at 145.687 217.778 143.789 104.507 238.499 231.441 131.189 418.138 263.136 63.6107 297.18 295.462 149.533 325.842 280.713 361.995 90.1186 105.641 79.697 175.689 119.028 106.439 184.129 217.189 180.841 127.716 31609_s_at 1698.05 1353.85 905.632 1146.21 1447.28 1173.24 1762.44 1054.41 1555.94 1220.17 1501.55 1489.4 1363.19 1110.41 1207.67 1489.12 1144.37 1499.26 1196.91 1361.39 1342.88 1243.49 1587.01 1474.25 1124.35 896.443 31610_at 165.572 116.874 179.091 188.642 122.661 148.46 234.36 192.451 152.362 162.351 177.512 198.153 149.736 250.488 155.317 152.357 222.243 167.485 181.206 270.05 259.724 162.989 157.617 160.646 148.854 186.552 31611_s_at 3.01315 3.5022 1.12619 0.59902 5.3293 6.25035 2.26835 -6.77577 -0.750177 -0.850396 -3.47425 8.37534 -1.52306 0.118744 6.33112 -11.4613 -0.112485 2.11053 -5.2015 1.2547 1.22813 9.0091 -0.493317 6.16888 0.0595516 1.34836 31612_at 14.9219 22.7868 33.9309 41.9507 28.0415 27.2836 24.7566 3.52808 -10.2169 29.6177 7.49265 9.11512 4.68956 15.712 30.6113 42.1186 3.04715 21.5399 34.0159 -11.7241 23.9773 38.2842 9.90994 6.51786 10.5117 34.5627 31613_at 115.39 57.4058 69.3337 92.7837 86.0212 61.9131 130.982 43.4975 39.3872 65.2407 73.3793 77.9832 110.182 57.1836 62.8205 60.9955 39.3341 117.773 105.566 29.3876 57.3953 146.055 97.5666 69.9984 72.4034 63.0341 31614_at 222.809 161.722 190.008 224.49 128.135 116.848 267.213 133.57 10.9171 199.876 130.814 116.607 101.287 148.356 164.324 145.517 174.551 217.44 275.02 138.432 183.088 211.768 144.692 131.152 108.195 179.091 31615_i_at 52.0182 29.8741 51.8768 40.3968 76.4239 61.847 50.1711 29.8818 38.3977 45.451 49.1007 81.8224 41.1006 22.0745 47.1694 49.2345 9.39525 51.3506 36.3232 10.7093 45.7202 48.178 34.5865 16.941 41.2199 50.86 31616_r_at 17.2658 9.53801 21.6014 14.2285 12.8664 26.8595 11.7085 5.54331 24.2579 17.4884 20.585 30.7223 12.8158 10.0903 16.4894 22.0977 8.86476 18.8601 -2.9961 10.0032 18.3849 23.925 7.931 3.84455 27.2082 20.601 31617_at 33.2661 33.8521 26.3087 34.5061 30.3877 6.40947 45.9508 28.0327 37.0798 1687.26 22.3491 19.276 48.2847 29.8132 24.9893 26.0827 34.0683 40.4956 44.4439 10.2681 26.61 73.9306 40.2999 34.2437 33.6403 30.4051 31618_at 61.0926 24.413 55.8036 57.1294 19.3263 30.8911 47.0628 17.1614 22.001 65.1685 28.9578 26.9488 38.6703 22.3227 38.3245 29.9162 38.2249 53.5845 52.9923 18.3958 55.6054 64.0879 27.9275 24.9068 34.726 37.0237 31619_at 13.8854 17.7637 2.06138 5.34327 -8.55452 0.516717 -5.0788 4.50518 -68.9469 -0.458492 -14.2241 2.9106 6.17504 -6.73099 1.62452 -4.43161 21.4314 5.83571 14.0299 7.03457 -0.706882 45.589 -3.58742 -3.62168 -11.3763 9.2402 31620_at 638.578 520.449 629.873 506.241 403.789 420.763 642.114 438.525 364.56 640.976 477.958 411.878 315.271 452.967 499.28 498.882 534.847 660.491 662.469 512.672 556.393 662.33 485.435 379.14 361.092 540.935 31621_s_at 622.462 591.734 494.789 522.548 426.469 460.661 690.187 568.957 513.066 443.544 695.053 445.727 417.669 642.795 442.922 516.328 423.109 664.955 689.304 440.222 421.879 516.529 437.813 373.372 480.253 490.287 31622_f_at 1695.75 2062.22 1648.93 1160.22 2773.18 1361.44 1158.76 1341.85 1020.6 1000.16 1797.77 874.957 917.604 3101.61 1074.38 1400.31 1412.79 1574.65 1951.98 1362.39 1167.84 687.539 1452.56 1373.67 795.996 4264.45 31623_f_at 685.856 996.584 627.546 666.347 1844.36 591.884 224.69 823.083 725.306 530.158 1188.65 500.034 526.949 1906.24 605.84 753.996 1009.59 478.21 1049.51 910.424 517.988 140.826 574.669 1082.74 373.703 2419.55 31624_at 122.788 78.1948 104.333 97.9268 82.3998 53.3154 129.032 11.0206 74.2402 92.305 75.4384 69.2402 86.7901 83.7163 60.6398 67.8413 69.7896 129.376 110.576 44.8842 59.9694 134.102 86.8385 83.0411 64.0276 99.7098 31625_at 13.867 45.329 9.70183 17.7801 13.0372 11.9007 10.1764 5.28213 4.32573 16.7319 5.40401 32.9342 5.49079 6.33219 16.3385 11.8069 5.09325 15.2661 6.38378 3.24524 3.20685 11.9479 23.5322 12.5 20.7283 -30.8367 31626_i_at 234.63 167.125 196.457 218.052 153.673 168.517 219.981 145.935 152.556 211.431 148.423 150.361 143.844 144.829 188.24 128.401 184.737 260.743 257.273 103.19 206.993 255.559 171.905 133.863 180.364 200.178 31627_f_at 327.099 401.967 264.936 297.688 352.845 250.081 320.364 238.488 149.95 421.328 168.659 151.8 167.758 172.174 272.834 314.835 197.544 -8466.18 272.63 183.772 312.68 640.483 224.899 195.145 456.108 464.518 31628_at 45.4667 34.1303 30.9323 32.3167 23.6871 17.9015 48.4923 20.9897 30.4155 42.7661 21.3487 31.3103 47.3894 16.5198 30.0742 15.3117 19.5185 49.5091 46.4421 15.0041 22.9889 50.5054 32.7434 23.0121 27.8536 37.6414 31629_at 34.1512 21.5371 23.3243 19.5057 15.78 16.7667 22.6838 17.3526 9.87658 23.1612 23.8646 16.5552 21.3244 6.6039 22.7793 14.2839 1.42929 33.2026 8.63581 5.54029 18.4686 26.5233 13.9438 6.82277 28.7937 16.7089 31630_at 10.0776 2.24541 2.87676 26.6114 55.5372 7.98321 4.00794 5.4934 -2.83936 19.5893 13.9465 -3.76102 2.5463 11.7319 6.38199 5.99399 0.732096 9.27869 -10.7732 -8.76264 4.63857 13.8135 13.343 -9.81922 1.9343 1.40506 31631_f_at -57.7591 -26.3753 -56.3115 -37.5517 -18.7618 -32.7506 -51.6805 -24.8509 -14.2585 -41.9418 -31.1664 -45.0008 -7.53348 -15.1945 -41.293 -27.0365 -25.099 -61.5478 -50.931 -22.0844 -30.2465 -62.5521 -40.59 -3.47117 -21.0062 -2.41517 31632_at 33.2443 32.5026 40.8574 43.6972 23.9722 44.1567 40.6299 27.9785 37.5048 67.1385 10.517 54.7287 26.1854 -8.16856 37.8102 25.2353 48.13 66.153 62.8756 38.0021 89.4418 50.5043 25.1954 56.0757 40.4928 38.5733 31633_g_at 43.9199 29.1886 29.4056 24.0573 41.5831 33.2017 62.9865 -11.0401 -4.54525 24.0513 42.0685 41.5445 49.2212 69.3211 33.2661 26.3329 22.9186 40.8323 35.9405 -25.9207 -33.5483 56.0148 44.9909 31.1144 -92.5084 50.9868 31634_at 345.91 206.237 243.143 288.353 271.406 203.785 405.183 170.731 231.427 278.235 185.579 218.859 385.217 183.732 223.882 205.1 194.558 360.081 363.809 264.602 234.894 340.46 245.033 260.057 277.745 214.045 31635_g_at 157.343 93.309 155.89 185.134 120.728 118.136 213.955 60.0793 40.9725 207.151 127.054 119.3 96.6181 118.473 126.257 108.31 133.921 178.816 210.738 55.2672 140.073 193.713 127.305 144.496 94.2212 154.325 31636_s_at 276.585 200.928 368.955 254.767 224.949 30.1383 349.216 147.971 179.04 354.466 255.91 216.473 210.713 164.074 295.781 208.561 302.006 218.49 326.868 206.417 299.794 234.002 177.074 207.943 165.025 249.752 31637_s_at 551.108 487.538 729.211 677.218 541.299 623.624 787.593 354.996 472.655 796.341 405.051 601.634 551.058 496.539 524.562 440.486 589.515 485.663 518.104 594.362 647.004 565.911 440.508 650.587 449.793 595.099 31638_at 401.466 337.674 331.715 346.054 233.333 321.933 375.517 333.375 298.223 370.781 452.185 417.205 243.31 546.727 420.12 485.368 316.913 352.142 360.48 448.783 226.003 286.525 290.957 296.833 202.659 383.625 31639_f_at 26.783 30.2136 28.1446 22.2505 22.2221 15.0102 52.7782 37.7786 30.6501 12.3542 17.8215 16.8544 15.2205 15.4349 16.3514 24.4458 6.54445 25.7411 17.5659 20.5519 15.86 28.1796 15.9839 -2.61181 17.8172 21.3787 31640_r_at 344.651 278.321 513.724 390.636 254.824 304.391 576.754 352.022 226.595 340.021 418.522 385.101 219.578 460.542 287.683 332.205 244.15 348.956 389.966 336.445 335.638 349.433 294.587 309.397 251.218 406.865 31641_s_at 99.7442 118.652 123.675 124.853 155.811 109.031 133.512 115.454 217.446 101.469 183.725 92.1054 72.9952 112.704 95.448 108.732 140.078 149.195 147.554 171.817 67.1859 101.645 101.032 84.0845 83.4933 64.4162 31642_at -80.8385 -52.243 -68.25 -65.7515 -35.171 -35.2096 -81.2397 -30.8254 -11.2347 -77.2604 20.8731 -34.8347 -46.7619 -24.5723 -39.3764 -33.8566 -54.1407 -85.781 -85.8457 -39.842 -51.8662 -92.2694 -35.4977 -43.7302 -38.6925 -43.9011 31643_at 19.5091 17.923 15.495 21.0519 6.93843 7.28756 30.8676 9.93972 7.99247 20.2691 20.8792 7.67655 7.65478 14.6984 15.5204 3.19337 5.48896 22.1877 -4.62999 8.79081 31.7451 10.4707 6.72849 14.4997 23.1082 14.5308 31644_at 66.3027 21.0778 86.2276 80.5353 43.0696 68.1562 93.9739 47.3987 44.5376 90.9995 31.9397 20.2027 47.2021 58.4225 65.131 64.9522 54.3901 74.7517 67.4847 50.1709 83.9066 75.8019 46.2628 120.602 54.3242 72.7384 31645_at 87.1783 55.3885 76.1181 73.7944 91.5986 76.94 116.764 68.3317 34.1872 88.3706 62.6096 62.5156 53.3323 65.6001 69.1624 71.5209 49.1413 88.4789 72.5869 58.1773 41.8285 98.9545 58.8674 62.3774 65.7657 75.3724 31646_at 8.25017 2.27909 5.3182 7.61247 1.78595 3.84083 0.861936 67.7091 56.2715 11.782 5.9791 19.8893 134.446 3.60186 7.15867 4.01805 32.6048 2.98481 17.7463 46.4573 42.0325 2.58892 0.475095 2.61724 38.7528 12.3926 31647_at 37.6927 47.3832 33.6867 29.269 36.7053 -8.66032 27.6728 49.2164 65.826 31.0455 17.6778 36.8451 30.1702 25.3583 23.082 36.4773 35.0332 41.6607 72.1119 46.5964 32.7291 45.9471 34.3861 20.4225 74.0051 45.137 31648_at 113.722 88.2588 134.632 119.968 81.0342 74.518 110.052 77.5302 68.4123 105.789 64.7069 84.4214 60.0559 71.0586 106.437 88.9457 115.283 87.5974 106.536 43.8317 119.85 159.292 130.95 101.752 47.5855 113.16 31649_at 78.6986 49.7464 48.2266 17.3605 52.6775 45.4732 89.8018 36.9154 33.5924 87.4514 30.6733 43.7161 72.6591 36.3139 53.8414 39.8483 45.2265 80.5128 52.8706 37.5065 39.4677 98.5365 54.8103 37.9427 52.602 32.784 31650_g_at 24.9035 32.1044 24.8465 20.3198 32.0319 5.2473 -26.8523 8.39283 27.0132 20.9132 17.734 20.6758 27.7802 10.6933 13.3305 21.7754 21.2021 40.4506 30.1552 -2.50102 30.8266 29.5933 15.4945 12.9264 7.69903 20.6045 31651_at 6.32616 -1.05329 0.541914 10.4502 -14.4679 0.674253 -29.9146 4.92543 -0.932949 2.51492 -0.770045 14.1665 11.7253 -5.65051 -0.569408 1.84143 2.61183 2.68361 1.41616 9.116 5.43731 5.29836 -0.39281 7.63623 1.74712 6.76257 31652_at -36.7863 -4.33992 -19.0799 -25.2877 -24.2608 -38.8464 -33.5474 -20.5218 -26.6856 -21.3631 -12.5623 -17.9138 -21.2467 -18.0382 -24.9162 -20.8023 -23.157 -41.1939 -38.1398 -12.1285 -28.7512 -33.1193 -21.281 -20.0477 -29.3427 -11.4918 31653_at 30.8709 18.2626 12.4705 22.1264 21.3777 58.6034 49.7079 -0.730059 22.9653 18.128 5.15007 3.66986 19.6256 0.915797 30.1215 9.08591 23.1803 30.8733 42.2391 -5.29367 -1.65284 22.5066 6.00761 25.8764 -2.28681 16.1775 31654_at 48.0258 40.7261 64.7863 72.1742 62.3007 54.2982 33.9368 47.7373 54.7115 97.4119 40.9506 51.094 43.3206 15.0201 80.6879 48.9682 60.5066 64.0993 48.2987 36.3098 78.5071 63.4782 72.1088 65.8894 42.1297 60.4131 31655_at 347.951 333.625 362.379 369.995 286.02 400.585 323.446 518.214 385.224 289.648 408.107 386.478 260.447 694.094 429.743 312.86 644.764 310.536 245.317 370.765 261.552 291.064 250.751 314.29 294.078 441.265 31656_at 6.1035 -7.93034 8.82454 -5.68748 11.041 1.74185 -2.84178 9.22062 52.8945 -0.886138 2.22234 2.78177 22.5582 1.26846 7.23502 2.54359 7.54052 16.2474 -2.8878 6.12811 8.97927 17.8339 -0.406172 7.61551 18.4532 1.55004 31657_at 20.7713 19.45 12.3041 11.8066 8.48455 11.5801 19.3021 -24.8561 4.19935 6.81447 -2.07164 -23.3501 -12.5203 8.0124 6.9824 10.9099 -10.2434 16.2138 -8.54974 -26.2998 -51.5476 13.534 7.80526 10.3069 -8.80464 10.2899 31658_at 59.5264 57.6465 73.1326 50.6633 68.3051 59.9533 63.4884 49.1153 39.7645 81.1169 58.2916 85.6016 83.1298 55.5302 55.0579 39.17 80.3851 48.1475 67.0057 59.922 51.7288 89.7338 59.6821 53.5564 60.0974 91.4198 31659_at 119.503 -755.812 147.117 173.014 128.355 165.597 134.071 105.805 126.784 197.282 129.924 106.723 100.778 97.4134 178.074 141.846 120.091 178.396 85.5775 99.4379 150.168 138.021 132.221 145.203 116.354 150.975 31660_at 27.8618 21.0434 40.8124 -16.4234 36.9841 41.3708 91.5641 29.2637 10.7498 25.0956 57.7661 24.712 73.4488 31.2342 15.6577 40.0549 28.2656 26.3308 68.6865 23.3231 14.6407 53.3355 36.7295 68.0812 9.94368 27.8935 31661_at 35.1162 33.7346 50.4434 51.4102 152.66 49.7561 27.7786 15.3461 25.48 42.3875 16.038 19.2536 19.4349 17.4901 58.2782 26.9255 38.8046 32.5856 58.0009 38.6395 45.8702 47.8456 23.074 86.306 21.8901 23.1338 31662_at 92.8325 106.43 76.3825 99.1137 37.0811 53.7959 94.1995 45.0949 30.5649 108.956 58.9447 63.4195 60.313 57.458 66.9708 54.3649 69.4305 77.08 -100.96 41.8341 87.2712 114.431 56.5949 55.2896 58.8993 108.075 31663_at 190.052 268.848 264.597 242.912 168.305 173.169 219.683 179.074 230.8 231.877 213.212 141.174 83.9283 106.358 163.589 213.655 211.22 161.854 153.806 163.323 130.708 128.613 293.273 122.202 177.867 139.205 31664_at 11.9853 8.83568 12.1591 9.02829 -7.80055 1.11088 4.70264 12.3872 -49.7404 11.0389 26.9509 4.08547 12.583 9.61853 9.62151 14.2068 16.6813 39.5347 8.89852 2.35223 6.04671 13.7885 6.76556 -1.52974 10.6735 1.73812 31665_s_at -53.8608 -46.6535 -75.3722 -77.6078 -37.1137 -44.2055 -76.1152 -16.1917 -19.0299 -81.2323 -26.1956 -40.6516 -42.8756 -12.591 -61.7727 -21.6539 -51.1497 -79.1266 -52.7776 -33.2088 -55.0078 -87.8064 -46.7689 -65.4116 -52.5324 -66.9157 31666_f_at -0.760266 -1.72494 4.81662 7.24242 9.36955 0.345534 -7.59186 9.87644 0.534617 7.01839 -3.61176 5.0975 6.82419 0.139887 1.91402 -3.26063 15.4236 7.97024 13.7009 -0.318706 3.91318 3.74718 3.47536 -0.873269 14.8375 -7.14961 31667_r_at 789.487 623.697 650.118 528.138 753.432 788.229 770.503 785.672 761.77 732.505 648.933 852.823 793.746 592.938 805.173 610.592 773.751 791.045 741.804 700.347 826.722 738.26 748.806 628.029 978.88 699.37 31668_f_at 349.556 231.072 239.454 304.759 304.638 233.738 487.319 164.981 199.883 264.916 272.632 297.981 326.453 241.521 262.389 240.758 236.359 366.511 342.906 149.244 190.35 314.237 294.336 288.948 273.75 246.651 31669_s_at 252.402 198.967 215.675 189.418 180.115 193.153 190.619 181.252 145.558 224.387 131.979 185.162 137.1 190.222 80.9406 181.643 220.25 245.5 213.806 149.939 215.967 239.549 146.912 178.474 172.095 229.445 31670_s_at 148.234 469.976 206.716 159.408 366.813 503.509 146.871 397.135 381.822 218.727 386.255 353.931 256.042 796.422 322.827 705.632 444.252 77.9898 246.234 444.315 315.772 134.137 271.733 669.091 286.423 210.434 31671_at 158.495 269.123 129.04 179.094 162.324 170.926 193.463 215.004 330.34 161.252 313.417 197.236 131.438 507.855 125.727 323.292 197.603 164.441 249.977 197.612 185.466 186.247 219.698 180.865 146.15 179.067 31672_g_at 7.5498 68.4686 1.6552 21.2023 51.4895 47.5674 1.49736 56.6237 130.641 9.47757 87.9249 51.9685 29.7611 172.553 18.9264 112.908 22.1516 -4.43778 6.98249 65.3287 37.9453 3.33742 62.569 48.6863 26.1367 31.2431 31673_s_at 258.37 316.445 240.097 215.018 425.48 250.997 433.626 304.372 331.091 354.758 374.494 254.8 318.512 334.769 204.438 669.242 163.368 290.684 313.301 672.978 186.14 190.915 345.02 312.838 168.8 122.683 31674_s_at 4.04513 7.37585 10.8357 6.69187 11.9353 5.58086 8.95326 25.614 19.2022 11.3622 22.2172 21.2191 13.3918 14.3157 38.7136 21.5416 4.38515 3.41354 4.85294 20.2036 14.3975 8.25899 3.13008 7.52951 23.6742 4.80586 31675_s_at 2.94722 33.8574 9.03269 0.00887041 37.1344 23.2777 8.46145 65.028 61.6367 18.4517 53.833 23.4201 13.7316 50.7952 40.4771 77.7138 32.3105 -0.254222 -6.65 60.3929 23.4929 -1.16246 30.308 49.6373 45.756 33.7739 31676_at 11.3329 8.8682 15.9011 21.1965 11.3044 19.559 32.2166 8.81296 3.28127 28.7067 46.8675 19.4266 27.2708 8.26035 13.2167 9.21672 21.5567 34.5304 11.7382 2.13584 25.426 27.3675 6.17931 15.7523 32.3425 17.8987 31677_at 37.8421 21.018 26.9514 22.7721 15.0707 32.0773 30.7369 18.3069 21.4743 31.1141 49.705 15.4119 54.9233 20.5055 31.9875 28.6409 34.8164 48.6374 44.1473 16.3533 17.2156 39.4051 18.9706 26.4832 9.63194 42.1504 31678_at 29.3296 10.5003 10.7637 16.2251 2.81377 10.4892 82.9398 9.54185 21.9916 27.7379 -13.3931 6.83701 18.3137 19.4919 5.56237 8.29647 7.38586 14.6504 26.9037 25.6992 6.52523 25.0474 13.9386 19.6958 14.6851 26.7045 31679_at 153.122 67.5913 106.479 96.8354 87.062 84.8054 163.432 25.4821 58.4991 123.108 60.8839 57.5619 110.58 78.6369 82.045 52.3091 83.7836 4470.95 150.331 33.6586 68.4645 148.14 89.2086 88.0791 83.4002 113.626 31680_at 328.971 1110.82 301.017 365.602 890.038 591.492 487.778 1084.56 676.788 383.613 829.741 788.663 875.888 1046.35 542.137 1202 690.248 319.764 373.791 1906.36 390.197 212.304 748.361 1157.78 529.178 316.855 31681_at 287.74 295.222 362.135 347.427 275.697 310.91 308.937 225.453 206.801 297.234 263.664 192.798 253.193 367.375 304.213 299.665 289.526 203.609 225.069 228.049 373.666 266.504 358.791 369.865 346.757 322.177 31682_s_at 59.2783 83.4115 72.0019 -0.262678 82.7545 89.6526 30.117 44.6071 256.74 11.0615 171.084 92.6476 40.8993 15.7459 40.4456 181.463 55.7817 28.2099 -13.2615 17.1178 48.2707 11.992 109.327 2.1029 49.8069 -10.3397 31683_at 52.3302 11.1847 55.6966 59.5886 48.8611 62.3684 41.7749 38.2034 53.8124 90.0501 32.7409 58.0558 44.3985 42.2202 57.2924 49.5697 58.9882 53.0766 71.2087 48.7949 70.0616 54.1384 49.8742 56.2654 35.9698 44.6522 31684_at 70.1602 126.866 174.68 79.8423 134.64 388.848 39.3079 47.3505 250.424 89.7434 171.323 103.424 70.4717 392.361 116.115 118.863 376.087 55.7597 77.8136 146.708 151.743 35.5603 110.424 225.17 116.649 198.4 31685_at 285.172 373.091 332.694 278.584 442.328 401.377 288.488 405.11 275.746 345.844 253.907 402.939 352.11 626.004 283.383 366.126 409.305 257.995 316.181 209.255 201.533 284.945 319.118 370.433 322.733 292.841 31686_at 110.687 71.2689 388.184 145.429 92.7822 87.3499 121.753 80.4995 49.6752 129.75 105.42 78.4368 80.2816 94.4381 88.494 99.5636 135.194 149.451 121.96 89.5143 140.316 148.733 98.7191 102.009 101.629 147.858 31687_f_at 442.733 713.406 337.534 323.227 297.06 492.338 478.74 317.942 682.774 365.013 553.365 482.728 311.052 293.149 402.55 271.68 479.253 354.238 535.475 329.467 349.969 329.237 310.937 376.608 397.616 409.597 31688_at 55.6486 58.4652 18.5135 54.4142 -4.19166 28.0653 36.5597 19.5663 5.10634 29.9642 12.8651 12.8727 -21.727 13.0971 16.2518 22.9561 -7.37725 69.3679 4.9466 -84.1617 -33.2442 36.8865 29.6553 26.6551 19.1037 39.3989 31689_at 37.2868 22.5675 12.4759 10.4668 23.5474 9.77436 17.859 18.4398 24.2536 33.6507 27.5378 20.3747 20.0393 18.8269 16.7579 21.5974 0.122464 29.4672 23.6025 9.28273 15.2186 18.7155 22.2504 15.7319 13.7456 15.6542 31690_at 81.0269 232.293 118.672 76.9657 210.476 165.732 50.2198 160.898 265.575 64.2794 522.891 304.571 70.7562 187.413 245.128 330.821 93.6764 93.0593 102.613 73.3277 98.48 77.6382 123.248 40.9501 104.526 113.361 31691_g_at 239.965 236.371 261.799 284.822 284.862 180.625 371.859 180.688 259.757 272.773 439.887 280.536 179.195 229.444 287.116 275.754 187.529 319.169 253.591 150.263 276.547 324.99 201.381 158.392 79.0888 211.954 31692_at 582.627 469.914 207.092 68.987 326.488 486.538 670.302 313.737 114.583 265.781 489.785 868.772 217.285 475.299 367.802 551.549 100.787 169.189 38.0866 402.813 25.9707 42.4623 272.266 127.145 246.038 261.276 31693_f_at 858.9 762.529 600.212 825.444 643.018 543.039 2002.02 1445.36 789.964 752.182 806.483 681.686 569.148 808.413 1390.38 755.334 663.026 983.872 1595.16 724.912 517.012 979.981 1368.36 1200.37 1287.93 738.004 31694_at 230.119 103.91 192.576 189.224 149.103 110.879 224.547 99.1103 113.886 223.423 135.509 154.107 198.792 110.807 175.099 142.136 156.812 237.993 184.578 93.5619 214.317 210.802 143.957 146.255 177.426 184.868 31695_g_at 58.5767 60.7067 47.1807 40.9088 57.9264 53.3282 64.1557 48.6681 -120.217 50.9474 57.6252 56.8466 62.9297 57.2558 55.0086 45.7811 46.7963 57.6727 67.1935 26.9338 33.5505 68.029 51.4594 36.6009 57.425 61.379 31696_at 13.7181 5.59537 4.08804 1.28765 -4.35968 -2.68911 0.410534 12.3674 -17.5734 -4.21796 4.23123 4.34006 -7.06251 1.20242 -3.22419 -6.41456 -3.89443 -2.76582 -1.492 -3.23502 -2.96451 -0.70452 4.59039 -2.10472 -3.21138 6.79516 31697_s_at 1739.95 3355.81 2498.19 2874.21 2422.79 2656.67 1522.33 2653.13 3283.41 1864.68 3305.96 3009.56 2414.78 3338.31 2509.98 3184.69 4278.74 1531.69 2918.08 4343.81 2726.88 929.993 2751.79 4898.71 2319.23 2955.87 31698_at 72.151 84.9986 63.1878 69.2813 90.8871 48.7383 91.8752 83.7136 77.2334 43.8291 62.7559 78.9415 116.931 58.0464 49.9448 -7.71132 53.7028 33.0223 45.1199 84.6119 90.5135 122.7 72.3933 45.5338 113.941 62.8045 31699_at 286.243 230.098 312.842 288.84 214.643 212.146 293.092 229.497 190.75 270.01 223.958 224.968 194.218 235.895 240.87 269.67 236.132 262.881 272.804 176.598 245.165 286.294 219.441 188.234 204.927 297.49 31700_at 265.477 272.078 326.4 286.696 214.658 226.983 308.702 249.714 246.745 318.279 300.78 260.592 159.881 268.525 250.352 334.009 274.988 253.669 333.432 273.432 318.465 204.529 271.931 170.369 223.964 304.946 31701_r_at 652.056 563.61 455.249 481.875 673.626 507.041 576.066 488.489 438.071 587.201 586.625 495.764 385.724 585.18 577.222 579.92 476.378 772.192 845.986 468.032 467.27 657.229 494.064 404.419 441.536 746.325 31702_at 5.14324 24.53 1.25862 -0.170312 -14.3901 -4.7378 6.09243 54.2498 17.5467 -5.85108 60.3832 27.1459 23.8568 0.460327 17.2906 -11.1694 -19.3199 -2.05733 4.28768 20.1705 13.3121 4.27519 10.4994 9.80528 85.3879 7.84412 31703_at 27.5791 13.1461 24.361 22.9568 23.2702 -7.00055 32.27 23.6874 -6.3988 23.5828 16.7481 25.2768 14.4838 25.8225 10.8333 37.5901 32.5085 30.0128 32.6207 20.3546 23.4317 29.4157 15.2219 11.8492 13.6376 43.0373 31704_at 238.494 221.654 278.501 311.733 253.467 303.127 284.832 174.373 190.05 287.82 203.739 271.342 245.611 365.538 290.135 224.289 185.91 262.16 233.91 250.216 308.334 249.475 236.647 255.268 227.602 186.879 31705_at 310.136 274.996 324.997 331.046 314.393 344.683 318.128 258.626 250.068 330.953 329.75 280.424 197.367 328.021 354.61 312.906 297.545 321.552 363.863 300.855 305.01 231.63 314.185 323.192 57.5928 319.566 31706_at 35.5071 5.44171 10.9836 7.13579 14.1398 12.0315 -0.548151 72.8444 65.1947 -2.55689 29.9522 67.1491 99.2812 11.4567 3.13894 23.2579 21.7566 6.10686 21.951 31.8932 47.6936 10.1838 5.56465 -8.35253 130.555 1.83518 31707_at 23.6182 24.4863 10.5946 18.7409 21.0437 20.7854 16.6889 5.42297 22.333 16.6618 2.0116 11.4204 2.62564 22.2974 47.0525 14.2944 -28.1106 18.6129 11.784 -0.101973 5.27658 15.7454 11.6035 12.1275 5.87376 14.2545 31708_at 2080.61 2227.03 1666.93 2532.58 2730.59 2086.7 722.22 3475.67 2626.26 1450.23 2821.25 2824.45 1601.98 4049.75 2374.41 2260.91 3377.88 889.943 1891.02 2796.81 1097 1418.74 2087.89 3268.36 2155.53 3321.83 31709_at 376.363 392.032 553.31 528.613 458.75 136.541 571.163 259.205 342.48 567.114 456.575 379.401 300.787 363.501 394.607 453.288 361.914 504.265 329.09 353.51 378.496 554.93 422.794 445.377 290.081 545.889 31710_at 545.377 508.608 634.472 548.603 440.822 442.067 667.587 396.013 354.569 589.9 442.349 432.295 375.428 443.315 452.372 511.297 433.109 567.512 486.907 464.394 613.637 590.865 390.361 382.372 376.909 611.534 31711_at 66.1117 93.93 64.7392 31.1731 101.206 55.9435 45.1672 56.4187 97.9919 78.5015 88.1746 86.7501 117.816 88.0459 57.5241 63.2891 63.4572 93.0405 64.4783 110.78 52.5746 83.5738 66.1281 50.5897 92.0564 133.235 31712_at 82.6331 31.5536 62.0543 80.8461 71.8985 39.8863 90.5216 31.3486 39.7226 39.0382 33.6031 51.2107 70.1534 37.9932 42.6069 35.8314 54.1816 88.32 66.7354 19.739 39.5571 96.2179 66.8283 52.3964 59.0583 53.9387 31713_s_at 54.9434 31.0355 37.4184 33.7246 27.3093 38.2014 47.5207 48.0814 -4.73579 42.769 6.54673 13.8727 25.8099 28.3565 40.0522 36.5171 33.141 58.962 46.4086 21.7774 49.8384 65.2052 41.6442 32.0701 31.764 41.8259 31714_at 11.3511 3.83873 17.2002 10.1153 2.20914 6.7952 17.3392 13.669 71.337 29.0629 30.7566 12.0495 25.0521 22.1575 20.0476 21.961 18.6417 30.366 33.8196 -1.61634 -12.1801 28.1082 17.8877 5.56768 16.2211 6.69247 31715_at 259.183 230.849 260.407 268.561 193.891 184.694 314.547 168.408 140.925 276.211 197.82 162.998 242.021 191.576 202.874 165.049 195.832 271.145 233.154 189.76 195.255 274.239 207.359 212.712 215.908 225.888 31716_at 153.759 242.947 185.728 155.212 125.925 172.747 112.627 159.795 253.267 135.465 212.203 144.218 143.848 148.362 146.704 126.496 131.329 149.116 136.06 178.32 178.577 144.532 185.938 106.366 142.984 150.876 31717_at 16.8873 13.9151 16.1287 5.48352 20.2388 11.6976 11.9066 29.286 39.1377 3.88573 24.5808 29.2461 24.7516 10.7204 18.5251 17.4001 26.9925 27.7497 47.6797 10.1773 11.7318 18.8459 15.4422 9.38988 16.4043 19.3394 31718_at 30.2569 3.29854 21.148 16.9418 16.0322 -5.41524 15.2477 0.992278 -0.0626833 12.61 22.5957 10.0415 9.49541 9.84052 8.70428 -4.83672 15.6661 28.916 6.52799 29.4681 12.5255 15.9159 0.0721809 -15.6778 7.04334 17.7364 31719_at 1505.73 1556.68 1761.11 361.75 1773.4 1350.98 1232.75 1970.63 2094.61 912.208 2147.63 1747.69 1610.07 881.215 747.181 2869.42 2709.4 1564.67 340.142 2330.43 1648.03 568.05 2390.02 2116.01 1406.45 497.67 31720_s_at 1937.31 1911.55 1776.92 179.567 1622.36 1425.73 2182.13 2206.93 2349.06 663.228 2914.48 2279.5 1234.16 756.276 746.294 3314.75 1378.63 1988.77 141.886 1832.11 1427.1 826.803 2842.8 678.949 1583.27 345.194 31721_at 233.214 146.58 257.1 217.952 167.252 166.823 212.534 93.7185 100.454 288.022 175.206 194.048 100.479 123.841 210.542 216.978 237.151 229.076 266.149 163.47 243.458 177.082 188.211 264.591 131.581 157.833 31722_at 3250.14 4013.99 3288.88 4233.25 4208.54 3207.93 2586.28 4695.35 5027.34 3034.4 6133.12 4077.38 4545.04 3855.89 2534.57 4321.76 4236.67 4052.49 5408.5 4295.36 2091.88 2839.7 3583.67 3558.35 3462.2 3569.07 31723_at -22.2448 -13.4229 -8.50769 -13.5292 -1.83895 -5.10412 -28.1626 -8.87077 -5.0921 189.179 -12.2493 10.459 -15.8535 -7.62355 -4.78982 -3.40488 -12.2979 -20.0849 -0.330254 1.24901 -6.21422 -25.3921 -13.5936 -10.315 7.78682 -15.6659 31724_at 269.912 211.98 338.949 212.173 194.467 250.141 273.352 220.34 197.648 286.524 264.909 267.847 132.319 227.628 265.571 302.999 277.669 304.424 249.207 169.036 272.611 214.296 213.801 182.813 172.987 259.549 31725_s_at 84.6064 72.7237 66.6674 60.0119 52.4202 35.7243 88.6858 81.2755 33.0178 62.3556 81.9187 63.0694 54.0656 44.8431 47.9046 55.3171 60.6225 94.6692 91.4136 51.2922 59.9022 88.9582 72.5324 51.2728 45.3099 77.8127 31726_at 233.003 186.692 336.641 338.307 155.889 188.316 235.716 132.113 154.763 379.114 120.393 173.069 168.764 134.087 255.362 215.658 364.282 234.158 217.254 162.709 424.443 262.805 184.59 221.997 220.598 390.22 31727_at 248.216 165.056 298.4 315.376 170.929 202.637 288.56 159.9 215.446 292.434 197.285 268.178 231.665 223.436 222.945 234.406 250.075 280.213 223.499 210.078 250.476 197.053 223.815 214.561 198.221 296.982 31728_at 150.127 214.073 195.258 177.603 146.268 156.022 147.061 87.984 74.4776 197.347 152.217 108.644 73.7824 95.7585 202.534 229.894 168.212 163.26 125.535 101.101 211.563 159.425 144.363 231.79 165.068 277.797 31729_at 4.59592 9.80107 0.368562 1.57145 -3.25423 -13.1372 -52.4786 -9.8868 -30.5011 -4.49651 -14.6336 -11.9445 -13.5897 9.15849 -1.89679 2.80647 -24.2041 -0.523823 -26.3701 -44.4698 -42.4763 -1.24586 -0.491996 -3.55962 -19.3646 -26.6793 31730_at 129.867 84.4112 116.449 166.478 92.3306 78.0865 182.97 88.2923 71.1762 120.196 90.9128 71.3147 134.05 75.5934 75.6935 51.6358 93.1122 95.161 124.581 60.07 97.4135 152.398 95.4303 98.0544 100.473 124.435 31731_at 19.7505 89.002 16.639 29.04 28.2821 51.5613 36.2152 38.6535 78.434 27.3089 37.7668 72.9171 52.493 34.1658 108.222 46.0148 16.1807 -5.09898 23.0902 31.3394 21.3433 20.8587 53.5745 21.0206 51.6015 23.6537 31732_at 24.819 26.9743 39.5593 46.9514 36.1026 33.0572 33.1716 7.80274 9.63535 59.2932 16.6599 42.753 13.629 19.5753 31.3858 30.7832 38.0609 35.5848 27.3877 30.0544 34.6708 32.8964 23.847 52.5622 20.089 59.3599 31733_at 63.576 11.6784 55.6773 42.201 52.9031 43.5617 58.5177 8.33834 38.429 68.8523 31.4279 46.8353 32.2955 35.3076 47.6782 36.3961 49.8754 51.4191 63.5235 26.2902 59.0011 87.765 43.1828 46.7389 28.9834 63.8332 31734_at 190.533 169.962 156.71 211.624 105.939 171.992 181.279 164.635 95.5045 178.683 138.896 106.018 71.1854 69.8382 134.868 104.452 118.717 218.051 91.5899 162.19 191.443 159.64 122.662 144.45 102.521 114.49 31735_at 26.7016 33.1578 31.7113 36.6217 26.8284 38.991 70.0673 37.4181 35.9276 37.8029 22.406 39.0425 58.7573 26.808 18.6868 28.7967 32.9751 43.3184 30.2485 23.6549 28.995 58.8501 50.3786 30.4269 35.5309 39.6802 31736_at 446.512 271.494 304.809 340.978 356.127 279.015 393.73 173.935 350.806 285.409 316.208 297.051 389.896 216.754 315.229 270.453 239.852 501.531 414.683 193.004 282.507 504.189 318.681 304.96 318.736 291.709 31737_at 22.4641 23.4589 39.417 25.7452 14.4032 27.166 35.3598 21.2248 41.0651 25.2501 22.2439 19.9168 17.564 1469.03 23.4902 10.2954 20.653 27.493 32.0805 15.0567 21.9004 31.6534 22.925 14.9017 22.7341 24.2746 31738_at 299.434 233.138 355.204 314.818 238.684 205.697 400.955 218.935 155.007 320.904 244.162 239.654 159.716 190.992 256.412 299.513 237.043 287.333 292.537 284.328 223.679 273.78 283.962 230.878 216.652 297.74 31739_at 253.692 183.306 291.385 270.719 212.025 225.357 267.019 213.479 147.564 258.658 216.155 175.866 143.938 182.317 183.381 298.381 310.96 262.567 337.14 304.22 247.843 202.284 180.556 247.59 137.959 287.749 Biobase/inst/extdata/pData.txt0000644000175200017520000000131314516003524017337 0ustar00biocbuildbiocbuild# id: case identifier # gender: sex of the patient at time of study begin # type: is the patient a case or a control in this study? # score: Huffmann-Berelizka score of psychocognitive transcendance. id gender type score A Female Control 0.75 B Male Case 0.4 C Male Control 0.73 D Male Case 0.42 E Female Case 0.93 F Male Control 0.22 G Male Case 0.96 H Male Case 0.79 I Female Case 0.37 J Male Control 0.63 K Male Case 0.26 L Female Control 0.36 M Male Case 0.41 N Male Case 0.8 O Female Case 0.1 P Female Control 0.41 Q Female Case 0.16 R Male Control 0.72 S Male Case 0.17 T Female Case 0.74 U Male Control 0.35 V Female Control 0.77 W Male Control 0.27 X Male Control 0.98 Y Female Case 0.94 Z Female Case 0.32 Biobase/inst/scripts/0000755000175200017520000000000014516003524015604 5ustar00biocbuildbiocbuildBiobase/inst/scripts/esetTesting.R0000644000175200017520000000140614516003524020226 0ustar00biocbuildbiocbuild######################################## ##EXAMPLES set.seed(123) x1 <- matrix(rnorm(500), nc=10) y1 <- matrix(100+runif(500), nc=10) eL1 <- new.env() assign("exprs", x1, eL1) assign("y1", y1, eL1) eL2 <- list(exprs=x1, y1=y1) var1 <- sample(1:3, 10, replace=TRUE) var2 <- sample(c("M","F"), 10, replace=TRUE) pD1 <- data.frame(var1, var2) vL <- list(var1="Variable 1", var2="Variable 2") pheno1 <- new("phenoData", pData=pD1, varLabels=vL) ##now how do we get the eList v1<-new("eSet", eList=eL1, phenoData=pheno1) v2<-new("eSet", eList=eL2, phenoData=pheno1) esApply(v1, 1, mean) esApply(v2, 1, mean) #c0 <- try( combine(v1,v2) ) # error c1 <- combine(v2,v2) v3 <- v2 pData(v3)$var3 <- 1:10 v3@phenoData@varLabels$var3 <- "var 3 label" c2 <- combine(v2,v3) Biobase/inst/scripts/getBioC.R0000644000175200017520000001236514516003524017252 0ustar00biocbuildbiocbuild# This function gets and installs the required Bioconductor libraries. # # libName: a vector of character string for the name of the library to be # installed. Valid names include "all" - all the released packages, # "affy" - packages "affy" plus exprs, "CDNA" - packages "CDNA" plus # exprs, and "exprs" - packages "Biobase", "annotate", "genefilter", # "geneploter", "edd", "Roc", and "tkWidgets". # destdir: a character string for the directory where the downloaded # packages will be stored. # isDevel: a boolean indicating whether the released (FALSE) or # developer (TRUE) version will be downloaded and installed. # verbose: a boolean indicating whether any error related to the # downloading process will be (TRUE) printed. Error messages will # still be returned but invisible if berbose is set to FALSE. # bundle: a boolean indicating whether packages will be downloaded as # bundles (TRUE) or individual packages (FALSE). Valid bundle # (e. g. "all", "exprs") or package ("tkWidgets", "annotate") have to # be used in each case. # getBioC <- function (libName = "exprs", destdir = NULL, isDevel = FALSE, verbose = TRUE, bundle = TRUE){ on.exit(options(show.error.messages = TRUE)) PLATFORM <- .Platform$OS.type DESTDIR <- ifelse(is.null(destdir), getwd(), destdir) messages <- NULL packs <- NULL if(bundle){ for(i in libName){ packs <- c(packs, getPackNames(i)) } }else{ packs <- libName } repository <- getPkgDisc(isDevel) for(i in packs){ sourceUrl <- getDLURL(i, repository, PLATFORM) fileName <- getFileName(sourceUrl) # check the connection instead of downloading directly which # will write files of 0 size in the directory even when # the connection is not there. options(show.error.messages = FALSE) tryMe <- try(url(sourceUrl, "r")) options(show.error.messages = TRUE) if(inherits(tryMe, "try-error")){ messages <- c(messages, paste("Get", i, "failed")) }else{ close(tryMe) download.file(sourceUrl, fileName, mode = getMode(PLATFORM), quiet = TRUE) options(show.error.messages = FALSE) tryMe <- try(installPack(PLATFORM, fileName)) options(show.error.messages = TRUE) if(inherits(tryMe, "try-error")){ messages <- c(messages, paste("Install", i, "failed")) } } } if(is.null(messages)) messages <- "Download was successful" if(verbose) print(messages) return(invisible(messages)) } getPackNames <- function (libName){ error <- paste("The library is not valid. Must be:", "all, exprs, affy, or CDNA", sep = "\n") AFFY <- "affy" CDNA <- c("marrayInput", "marrayClasses", "marrayNorm", "marrayPlots") EXPRS <-c("Biobase", "annotate", "genefilter", "geneplotter", "edd", "ROC", "tkWidgets") switch(libName, "all" = return(c(EXPRS, AFFY, CDNA)), "exprs" = return(EXPRS), "affy" = return(c(EXPRS, AFFY)), "cdna" =, "CDNA" = return(c(EXPRS, CDNA)), stop(error)) } getMode <- function(platform){ switch(platform, "unix" = return("w"), "windows" = return("wb"), stop("OS system not surported")) } installPack <- function(platform, fileName){ if(platform == "unix"){ system(paste("R CMD INSTALL ", fileName, sep = ""), TRUE) }else{ if(platform == "windows"){ install.packages(fileName, .libPaths()[1], CRAN = NULL) }else{ stop("The OS system is not supported") } } } getDLURL <- function(pakName, rep, platform){ sourceURL <- NULL isPkg <- FALSE version <- 0 higherV <- FALSE for(i in rep){ if(gsub("^Package: *(.*)", "\\1", i) == pakName){ isPkg <- TRUE } if(isPkg && regexpr("^Version:", i)[1] > 0){ if(gsub("^Version: *(.*)", "\\1", i) > version) higherV <- TRUE else higherV <- FALSE } if(platform == "windows"){ if(isPkg && higherV && regexpr("Win32URL", i)[1] > 0){ sourceURL <- gsub("^Win32URL: *(.*)", "\\1", i) isPkg = FALSE } }else{ if(isPkg && higherV && regexpr("/Source/", i)[1] > 0){ sourceURL <- gsub("^SourceURL: *(.*)", "\\1", i) isPkg <- FALSE } } } return(sourceURL) } getPkgDisc <- function (isDevel){ on.exit(options(show.error.messages = TRUE)) if(isDevel) URL <- "http://www.bioconductor.org/packages/devel/distrib/PACKAGES" else URL <- "http://www.bioconductor.org/packages/release/distrib/PACKAGES" con <- url(URL) options(show.error.messages = FALSE) tryMe <- try(readLines(con)) options(show.error.messages = TRUE) if(inherits(tryMe, "try-error")) stop("The url for BioC PACKAGES is incorrect") close(con) return(tryMe) } getFileName <- function(url){ temp <- unlist(strsplit(url, "/")) return(temp[length(temp)]) } Biobase/inst/scripts/getBioCHelp0000644000175200017520000000227514516003524017662 0ustar00biocbuildbiocbuildGetBioC is a function that gets the required Bioconductor libraries from correct web sites and install them to the R library on a local machine. The function takes the following arguements: libName: a character string for the name of the Bioconductor library to be installed. Current valid names include "all" - all the released packages; "affy" - package "affy" plus packages included in "exprs"; "CDNA" - package "CDNA" plus packages included in "exprs"; and "exprs" - packages "Biobase", "annotate", "genefilter", "geneploter", "edd", "Roc", and "tkWidgets". destdir: a character string for the directory on a local machine where the downloaded packages will be stored. isDevel: a boolean indicating whether the released (FALSE) or developer (TRUE) version of the packages will be downloaded and installed. verbose: a boolean indicating whether any error related to the downloading process will be (TRUE) printed out on the screen. Error messages will still be returned but invisible if verbose is set to FALSE. Source getBioC.R on a local machine and run the function with proper arguements will allow for obtaining and installing all the required packages for a Bioconductor library. Biobase/inst/scripts/getBioCPkgNames.R0000644000175200017520000000214214516003524020670 0ustar00biocbuildbiocbuild# This function provides a widget for users to select packages to # download from Bioconductor. # getBioCWidget <- function(bundle = TRUE){ nameList <- list() popList <- function(toPut){ nameList[[toPut]] <<- "BioC Package" } if(bundle) pkgNames <- getBioCBundle() else pkgNames <- getBioCPkgNames() trash <- sapply(pkgNames, popList) selected <- listSelect(nameList, "Select packages from the list", NULL, NULL) toGet <- NULL for(i in names(selected)){ if(selected[[i]]){ toGet <- c(toGet, i) } } getBioC(libName = toGet, destdir = NULL, isDevel = FALSE, verbose = TRUE, bundle = bundle) } getBioCPkgNames <- function(){ pkgNames <- NULL biocURL <- getDefaultRep(bioCOnly = TRUE) repository <- getRep(biocURL[[1]]) for(i in repository){ if(isPak(i)){ pkgNames <- c(pkgNames, gsub("^Package: *(.*)", "\\1", i)) } } return(unique(pkgNames)) } getBioCBundle <- function(){ return(c("exprs", "affy", "cdna")) } Biobase/inst/scripts/makeExpressionSetPackage.R0000644000175200017520000000373014516003524022657 0ustar00biocbuildbiocbuild ##take a phenoData object and create a valid - sort of - format ## section for a man page pD2Rd <- function(pD) { if(!inherits(pD, "AnnotatedDataFrame") ) stop("only works for AnnotatedDataFrames") fmt = "\\format{\n The format is:\n An \\code{ExpressionSetObject} with covariates:\n" covs = "\\itemize{" vMD = varMetadata(pD) vL = varLabels(pD) for(i in 1:length(vL) ) { item = paste("\\item \\code{", vL[i], "}: ", vMD[i,1], sep="") covs = paste(covs, item, sep="\n") } paste(fmt, covs, "\n}\n}\n", sep="") } makeExpressionSetPackage = function(expS, author, filePath=tempdir(), version = "1.0.0", license, email, biocViews="ExperimentData", packageName ) { if( !inherits(expS, "ExpressionSet") ) stop("only works for ExpressionSets") if( missing(email) || !(is.character(email) && (length(email) == 1) && grep("@", email) == 1 ) ) stop("invalid email address") if( !is.package_version(version) ) version = package_version(version) if(missing(license) ) license= "The Artistic License, Version 2.0" if( missing(packageName) ) pkgname = deparse(substitute(expS)) sym = list(AUTHOR = author, VERSION=as.character(version), LICENSE=license, TITLE = paste("Experimental Data Package:",pkgname), MAINTAINER = paste(author, ", <", email, ">", sep = ""), BVIEWS = biocViews, DESCRIPTION = "place holder 1", FORMAT = "An instance of the ExpressionSet class") res = createPackage(pkgname, destinationDir=filePath, originDir = system.file("ExpressionSet", package="Biobase"), symbolValues = sym, unlink=TRUE) ##save the data file assign(pkgname, expS) save(list=pkgname, file = file.path( res$pkgdir, "data", paste(pkgname, ".rda", sep=""))) return(res) } library(ALL) data(ALL) makeExpressionSetPackage(ALL, author="Robert Gentleman", email="rgentlem@foo") x=pD2Rd(phenoData(ALL)) Biobase/inst/scripts/query.packages.R0000644000175200017520000001523014516003524020652 0ustar00biocbuildbiocbuild# This function queries the repository for packages and finds the urls # for all the packages a given package depends on. The urls will be # returned as list that contains the repository, url, and version # number of the package and a list of the urls for all the packages the # package depends on. # # pkgName: a character string for the name of the package whose # dependency will be queried. # pkgVersion: a integer for the version number of the packages on # which a given package depends. Default is to get the largest versin # number. # type: a character string for the type of the package. Should be # either "unix" or "windows". # repositories: a list of urls for the respositories to be # searched. The default is bioconductor and then CRAN. # query.packages <- function (pkgName, pkgVersion = NULL, type = "unix", repositories = getDefaultRep(bioCOnly = FALSE)){ on.exit(options(show.error.messages = TRUE)) pkgFound <- FALSE collectedItem <- NULL pkgPat <- getPkgPat(pkgName) returnList <- list(repository = NULL, packUrl = NULL, version = ifelse(is.null(pkgVersion), -1, pkgVersion), type = ifelse(is.null(type), .Platform$OS.type, type), depends = NULL) tempRep <- NULL tempSUrl <- NULL tempZUrl <- NULL tempDep <- NULL tempVer <- -1 listReady <- FALSE doList <- function(){ if(is.null(pkgVersion)){ if(tempRep == paste(getOption("repositories"), "/PACKAGES", sep = "")){ tempSUrl <<- paste(getOption("repositories"), "/", pkgName, "_", tempVer, ".tar.gz", sep = "") tempZUrl <<- avlCheck(pkgName) } if(tempVer >= returnList$version){ returnList$repository <<- tempRep if(!is.null(tempSUrl) && !is.null(tempZUrl)) returnList$packUrl <<- ifelse(type == "unix", tempSUrl, tempZUrl) returnList$version <<- tempVer if(!is.null(tempDep)) returnList$depends <<- formatLine(tempDep) listReady <<- TRUE pkgFound <<- FALSE } }else{ if(tempVer == returnList$version){ returnList$repository <<- tempRep if(!is.null(tempSUrl) && !is.null(tempZUrl)) returnList$packUrl <<- ifelse(type == "unix", tempSUrl, tempZUrl) returnList$version <<- tempVer if(!is.null(tempDep)) returnList$depends <<- formatLine(tempDep) listReady <<- TRUE pagFound <<- FALSE } } } for(i in repositories){ pakRep <- getRep(i) tempRep <- i for(j in pakRep){ if(isPak(j)){ # doList whenever we see a match if(pkgFound) doList() if(regexpr(pkgPat, j) == 1) pkgFound <- TRUE else pkgFound <- FALSE } if(pkgFound){ switch(sub("(^.*): .*", "\\1", j), "Version" = tempVer <- sub("^.*: *(.*)","\\1",j), "SourceURL" = tempSUrl <- sub("^.*(http://.*)","\\1",j), "Win32URL" = tempZUrl <- sub("^.*(http://.*)","\\1",j), "Depends" = tempDep <- getDepends(j)) } } # do list again in case the match is the last one if(pkgFound) doList() # Taken out to be in line with the new format of PACKAGES # if(listReady) # break } if(listReady) return(returnList) else{ toPut <- ifelse(is.null(pkgVersion), "", paste(" Version", pkgVersion)) print(paste("Can not find package ", pkgName, toPut, " in repositories", sep = "")) return(NULL) } } getDefaultRep <- function (bioCOnly = FALSE){ if(bioCOnly) return(list(BioC = "http://www.bioconductor.org/packages/release/distrib/PACKAGES")) else return(list(BioC = "http://www.bioconductor.org/packages/release/distrib/PACKAGES", CRAN = paste(getOption("repositories"), "/PACKAGES", sep = ""))) } getRep <- function(rep){ on.exit(options(show.error.messages = TRUE)) con <- url(rep) options(show.error.messages = FALSE) tryMe <- try(readLines(con)) #for testing using a local file only #tryMe <- try(readLines("PACKAGES")) options(show.error.messages = TRUE) if(inherits(tryMe, "try-error")) stop(paste("Invalid repository url", rep)) close(con) return(tryMe) } getPkgPat <- function(pkgName){ return(paste("Package: *", pkgName, sep = "")) } isPak <- function(aLine){ return(ifelse(regexpr("Package:.*", aLine) == 1, TRUE, FALSE)) } getDepends <- function(dep){ on.exit(options(show.error.messages = TRUE)) depList <- NULL options(show.error.messages = FALSE) tryMe <- try(sub("^.*: *(.*)","\\1",dep)) options(show.error.messages = TRUE) if(tryMe == "" || is.null(tryMe) || is.na(tryMe)){ depList <- NULL }else{ dep <- sub("^.*: *(.*)","\\1",dep) deps <- unlist(strsplit(dep, ",")) for(i in 1:length(deps)){ depList[[i]] <- deps[i] } } return(depList) } formatLine <- function(aLine){ return(gsub("^ *(.*)", "\\1", aLine)) } avlCheck <- function(pkgName){ on.exit(options(show.error.message = TRUE)) options(show.error.messages = FALSE) tryMe <- try(url(paste("http://cran.r-project.org/bin/", "windows/contrib/", pkgName, ".zip", sep = ""), "r")) if(!inherits(tryMe, "try-error")){ close(tryMe) return(paste("http://cran.r-project.org/bin/", "windows/contrib/", pkgName, ".zip", sep = "")) } tryMe <- try(url(paste("http://cran.r-project.org/bin/", "windows/base/", pkgName, ".zip", sep = ""), "r")) if(!inherits(tryMe, "try-error")){ close(tryMe) return(paste("http://cran.r-project.org/bin/", "windows/base/", pkgName, ".zip", sep = "")) }else{ return("Unavailable") } } Biobase/inst/testClass.R0000644000175200017520000000100414516003524016200 0ustar00biocbuildbiocbuild#some simple test classes to see if things are working at all library(methods) setClass("foo", representation(a="numeric", b="numeric")) setClass("bar", representation(c="numeric", b="character")) setClass("baz", "foo", representation(d="list", e="logical")) #load up Biobase so we can test library(Biobase) f1 <- new("foo", a=10,b=15) l1 <- list(a=f1) nc1 <- new("container", x=l1, content="foo", locked=FALSE) b1 <- new("bar", b="AAA", c=10) #this should fail... nc1[[1]] <- b1 nc1[[1]] v<-nc1[1] Biobase/inst/unitTests/0000755000175200017520000000000014516003524016117 5ustar00biocbuildbiocbuildBiobase/inst/unitTests/VersionedClass_data/0000755000175200017520000000000014516003524022034 5ustar00biocbuildbiocbuildBiobase/inst/unitTests/VersionedClass_data/1.8/0000755000175200017520000000000014516003524022342 5ustar00biocbuildbiocbuildBiobase/inst/unitTests/VersionedClass_data/1.8/AnnotatedDataFrame.Rda0000644000175200017520000000165314516003524026461 0ustar00biocbuildbiocbuildVo@w4/(x P(ƍɀU"P"չ@L,#;3TF;b[A !*}=|S$It Ԍ ?)IZ*lq\o"ZaIJcu1A}1 ,IKt RNo BqZ =(4F*qxH!sP{>ڮg^WWOmSj6<*1%j5aF?c1O4t0q{ahS܁2_F<Ei^_!(P'8<] qaDF< (>,:{d--m4|X]bK.mB;hۛط`ha1 u仗 w]*Mh얶Lf{%D;fvf &ӳ`h*X (mv7ؾDEz KJ.q.R + 7AT52 [ AVSI,wƏ`B> ?]e ;*r?ye+lYs5rN=f͛9#i,4MhUl2e+f,{ʪVUˍ:/"_V`7.`RA4Ԁ&84 EM-H$SF% RUKEZj<.=5dzX4jhY+j01QX뱘豬 UEot[Y7EN<#7%Jwo>s-4'sF34+ߌqxw><_`b|baa5xgmB݈>=̼'66766fI,e9fxEΫ+@ M\U]huM=ĕ[M\_]3?%GY3]}tscd=B{8>g]ء% Biobase/inst/unitTests/VersionedClass_data/1.8/ExpressionSet.Rda0000644000175200017520000001110614516003524025604 0ustar00biocbuildbiocbuildyx\udKKط+|56ŚMˈHƖ)O'i,,$&&5뗄PHI,tK)K )  5yh6c~_?Ɵ}wg3wlݣ)va)qsn>fv(OQ;#+zA=QO20˳;dІ6 mhCІ6 mB%?L3VaR@OJH2N劯1t 4̎lt xKlv%ZڵL-q-höBΑoyVH hKhnl [C3WLO:b6;-a,atm1߂ma8lke 6q˵a8x&ߙgv7F[kߺs|, ć"5iMddHrDb@< EkhGUc7G"Z #hgl48 FC-[nn'v|`-Y[`-:||(&eGPEk3r X8 *6 CfT#*6CMfT-PMr 470ЌlFEQ&^ѡ3FG_ /"FpIѠZP5J 4S5i"6jTVF 7"n*҄lTNd`QhBC5]LL-H4|ѡH=fY:΢,RUg,5|+YJf|%S.\. М\^g!wg ;}=௔W<#u3g{7%֥OoX~ஆ*?GRԉ.Sj|@qrO{9[ܙyaƗ){5 =~ DxDy{h7Ewc5{;A}~i!;l?&< .$DZ7YNn2N@%Ѝ*uޏfw qy9/"3&s^)&6¦w)urR'=^Tj[<Ԗ> 腳ZKݍ>.8%zt3֭J}6`3p;0-\~y sFB~S?k>tWza,*V(_fZͷ=..=/ s%ze| Codk[T28b,Zg{15Ƴ!㳌!_yp2Ddޮ96/ݣ JpogGm*uη ֻ?{gNup~>/d; "c$NyT>b%b=)r_FK;.P&f?qZej :7@l%`/zspwQ?Jn\@WF%~Pӄ'p'qP|،D_$bri`8ڎyAՒ?[~rEYsJӟ1?t>T>b| _E}]ĦZDG^>c:zp'svU3x p.@ Z=K_ 0}3kBs?n i̟'C˒n5>&$':/IMJgÿ}o-&!Ft7M6Qșc|LB>eCFI9cWǾ_/P2o;9gD^Yz<$Nѱ凯碶gWA-^FK6$.Y>jXqk>{< X3:/S'Ih^lR@wVgx%9EY=g/1%-J'Y%ߕ> H|גNp_`\OJYԀQ_>' VjRg0vG"]7q] cWEONaoޮaj!-&`bx떸OUw-WSO+Ew _K<[ /6y}8)^|)g \}CFlwu4p ΋&v.{^2yi@bMޏ-]zxK&noVontt]ǃNCJ#W7sjR75'=.MBb-B}ϬJLYȬv{|'~'ɌS">sw|[?,-)v+]| 様ڂ% =ٖԊ\~zRpZeɑ)1u]3u+MO!ChڃM_Fz,I&߬sd}~@.C=#ʫ;ۘ{~wZkY`6yY7OC#1hQ?J]BoHL"JkqI./5GmS'ktl_ЏXs7#2Z?ԌL -D<^M,"[\:_+ZYGn^rO1'Kᙻd'<q4Ԓ=/ Ѳzu}o;<{]UJ=`l) ]Y}P" .ha.|ڧ~XYvIK*=yH,:_{ ro"ŚrþxU#]F6Iׄy:ݯTwTN&x5ƫI1Z}b]/kG$ʌݡ@/VX DyPGDk0Ayg <*M7 5 /#FUD$H#"ʾ@& "A2"5XD0WZ]HiQcX94V: v jr( fX~#0[F5VdO*OW9T1W+v W2+y ?xËÏׇ~tC/tO^u{ji C ?W?L7>3aFys4mRRFV[tVq= EOH[C[e*_-L&[@ҩi꺢bI\̺ W$SNnjָI)z#ev<*N;l/ tc ot_0,s3(z")E VowTNɞNJNfJgiTa.[N&A[(sNNsKi9:]N8_#A{urSE+S3YiݙU'1gУ'rrfQnwnG7oo&1dō{"lF*\^K2مLՆzc}&2b;ZdbYn}Vq^=`$!.L-ڛωdfzkxLN$s6+$3n⦓hI&ز׎ G$ل;Mµb!FJ-V);v{BLѾ,覲\dOKzSC 8EAzi2[{Nӳޕ#}QH-Rg JyiU;EUQ' TA-đ 'daѻ]ٔpl^O8;+q^7]b yxlphJl؅y7,w'v%g;dUSl*;+z\VySf)R 9 iiw!ٛNzq:w v+SM+P?HOXjEk.-N=L6%岩}ѬF3^,`>:=%/6X|^\XS$z]|'u8 g_r{QdEBiobase/inst/unitTests/VersionedClass_data/1.8/MIAME.Rda0000644000175200017520000000134514516003524023625 0ustar00biocbuildbiocbuild}TKo0 v_{3-%}lu 4;[!ˌ-TCygsi#i6 b[??R:9ݻ˲l=[Xt[˲]znM/&oY.K70Ha/㽷ߝnr (1"O,vU*bH(dLk{)ǨNy\^'K(T^eET&;"?wc嚲)DRL T"2wX< !1t(|8-=4G`h &S!+9@լSRD p/48PwdvLl|κ֦BI}8@E*d|M;LYgy?'`$gދ!d-l5#,DE*"B`IꔉX4h3O S5*+[Vf:Np@-r8t\Nqc%ZMY{˭(܌#kOmJvY* ձs,L=*y HrmkP%Yh7r g(ʕVcF"ryYД%F,xXv}7K0ϛ^f1<<e ιrڕO&Ku2m~ U#∺gLv\(n[*-F'w&bqQӓӁ52qr u|^yMg*e^Uj|/'U y'tnQ;T}OBiobase/inst/unitTests/VersionedClass_data/1.8/exprSet.Rda0000644000175200017520000001075414516003524024433 0ustar00biocbuildbiocbuild͚ dUyaaط8fӵRŒgg f!i_WPUi(!-G M4D@ AAЁ|߫fFsNN8{_wVJT(lL;BPj]jre(>R,^%U zzMlcnS/ʌQpW@ B;:6c?75r ~v8s]‹?Ա_SjJGq R<);ٜ}m>;x<1 L߯yFS(jDx'@X-YݯYVuFd`q@xx.-[̟ XM'p: k@w _/`ԧ"F#pGyd`'|dyh@d>;`9Uo{b#lZ{Rgt(u6-888! 69U0 A be [ b58{KMCrz#y()ϣ+v. v6Wu>fTZ@1D^1>c׸&p䧐+?.b VB4DrV$ÿoaOh;GFg}.@IP;<7/$N':IMÿC۽8&RMnl0șg\{J -94`R!sr!DG~XOQ2ah9D^Y|<$Nױoxgڠ I0#Ԭ58 ߾k^/{{un_$wrMaРb4s#9nYӿT㧀O@}:߅n lU=0 s`^(F:/n]]1&>zڄF7Ұxki(~Kx1OuI\K']hz $φyy}8 ě^|Ic \}C=&lulA=!w!6[+6fhQKu<(hy_I$Jp@M慤ߋ'>gfzj}3#h^& dV=L^ F)Gw~~P׵[zSVFilj r->ѣ[oR+~s戴RO:/*v[d^k7<^B- Ծ!&MV;*-\ǔx38! a/K^VKKIkI1K%G晿ΫK\u*/5Xԭ=GzX>l7cIm:G։}>[O>.ܚ}!z81߳Hʷ42A^^<"mT@| zC45.[nZbڋ)F=w89=۪_Џs'#2? Ԍ{8Z[Ijy>Y;D;,#'uvW䵺|sWw{]j='8{r{a|K/zN/O}{\ d}+ Ѻ!zo;<ٻA3!gz:ճ|g`ߝx:٧x4E||ڧH٣vIK*=yH,:_2|{᝚GXz.1ȷ"K}9JJ ZZnHVPsyùI bm6ؑFZio`[[#{om'6ؑFZi-:{G;l m\a_*т Xt3Pm8,b\ll b3Q)}G-LwM EҩTo )C&>=-Ӡ55EdӯЎ-"D"heߞ } Fh/FeAm0?q]/]&~[sd"w>Jh pZhona5OƢFXoGQ?7 z6\z *G%d*>ŢDOO _x?HDXMx:nh4kYosP}Tr [;|~{X$ !"I֩X &قș&&qɚ4] ₈ o25HO(~DC5e+d!&cK+@ ɣ߻Ђ.2'Z_+<4k"ƚb[[Sx֤"bTolc1I̝7U<5d\=jteW~|uƗ᥯ >zbg\{v>; 0?"bkO|-w>Qmj}mX524>6-##c޴cceyyMn]RzjNhȳfg%Gї5~⭺gX ]r 4\Qv7N.U2VJ=w7& "mΚw9K6gK' 7ќ5rJ [ڸ k 2nM6Ԩv+}{'s{Rc J 9])By9P-%y*_*e}On0ŞrbXϤQߠ޾G^ܠ!Riʱ}\ی&n /'9n\|jZ| 6pVڣ(ẟ4NY*_vqƙ(WhpQ +K'Bom`M>g=H.?%+Biobase/inst/unitTests/VersionedClass_data/1.8/phenoData.Rda0000644000175200017520000000165714516003524024706 0ustar00biocbuildbiocbuildVOA~P"<({t[lXHMP8p2lаlh~3vfn$II)JN_B&r̹vV$)5)_a@AH AE"#yc$Rҿ̼v[R@?ѓYS^?%愵O 'W#+ˍ5#4R++k^<[xFwu1;x6u- Sn>Fd7 FA8DSeC>ی[ k+>0%v l 8~z˂H=KHƏײƵ*@.| B:Wpny M/$jXW{uqdc"cȰ =+wkE\uCm9N+=â7e$4 1;[6%1)ol;Md-+.t%z|y6{=ױ{XLt\0,-wc.A, am_5q ڱ}Ժ'ڙ=\%~GC;8u8ۨ }.z Biobase/inst/unitTests/VersionedClass_data/2.0/0000755000175200017520000000000014516003524022333 5ustar00biocbuildbiocbuildBiobase/inst/unitTests/VersionedClass_data/2.0/AnnotatedDataFrame.Rda0000644000175200017520000000176614516003524026457 0ustar00biocbuildbiocbuildVoHw4_U mY8iVV*D qX:±VpΙG q〴 8xcLlJ+~7_q˨ު*SrxA-ౠ(x~@ DQ1V)mwP$twI<יdS,4eKynQB90c\ 6dz,yv=2C,); 0EC(EXNlêk tD]_j@Πύ4aF$cDHpN0q' O`Ƚ. ,Xƭ ^6HsU,R{>9 } E5>'e(Q Z,|.-{h{8tOqa@V'L,hYYږ-ӎfkH>C;Z`zq3U9vLmS/dKehmr2YDY\ r d|]D{Re=(Z]qE¢17gdg-k^M,͛>>{ϫz@9qX/_'U+,ЕDɑbVT^ߦ㮡TRKiUkIM Sj-<ۨKM_㕡;_mZܕt'c,ʇO#M Biobase/inst/unitTests/VersionedClass_data/2.0/ExpressionSet.Rda0000644000175200017520000001132614516003524025601 0ustar00biocbuildbiocbuild[ ty%c6pjljS] UV+Kтm`9H;ewg3;k!4Wn[ X&^įWCLY+`SO1FpMy1/<M _2Nn}܃2vtDpomٌ={?{NqY(> ^Mf ddS9}1yҸG.z|!O$bK8^3ynb6L`u#9pwр4 z1^0&`#?~x0v6 Q`kEZ#|lp/Q i/S^2Ba^AцkD֦>o[$j>.B%4=9g/0IAWƹiEO+O<x蚝 1"}Ǯt!C~ P_`Wv! z0 }FM 0y ͕dB: wȞ 9آv1FtxB Iyyߎ[E#Rȿ l9^ctʎk0tCyrI䇘#HN\RTK 0'!;^[Ajes{v-PQZx1Q`>L-ZwdfhCf 5H1E}yԛnxZ|-AnMDI|WH5yWu $k:}<ڱ P ry }iM6ys#>:(B9: ̀Gԅ^zZR]GA#{r+k@|;]<^sNg"V~A2RGmq3A0(r=eD8yڃz-Qk-ʑ%_#ĵ]5V=E = l7cQy#-Cȥ#Io|Qf 㨇cET(ҳF4CD^ T [ssC7gA b~%EM83!oJdI\FϞ #H=Qгܕ$e -i҄VCqn##i־Icm6L[7j;\q>ClcIA稵=G;l 6ӖCMzhgqvXmO^TJuɆj-XlO7c6lq]lg `c}&F6|g¨V}.&l}ٝ#t$H%&]NnOM/N2>.INt(ndch*ownwdXj;=Av1Lt ?Mr/m'Fb}.r}?H&n-E ̰Av1p.x2hyz(b~TGhʇ ۠|r՗J|gL|)TԻ0zq/UCUР/C)ɹ;-Ϊ 9JD9g%~YXPmpFҸK)["(As3:{wVO8!SrkՊ_T&aiߚlSV r*5&h7ZWeSMCU rrzMfg">(n73XA^::hٻPKfz4TSw)V[}C٦f`vmuF焸:ݯbUb=4f6sqfCn5d;Fb#DW,u)=. tafGl&M7qBD]⛌#FMD"#ow $j26r Mb>1e OOKV(k bk)Zx1вk*w+!m1_u< 6Rg==1*(Zn8)}x=Wk >=t˃OҷyluW<6>{| ZF >O_}s=VozgMhKy#uV0eNlܺ^X /+I@(=MQ^71C8.=M:ņlVڼ.Jj*s^ҧI*eQVH.kfAF LTsfXeB÷+*5a՚/\i{>gsVЮՊn3|^Zf%4c,U^VrM_pcM= z3`;b?.g?;YO)n+9Biobase/inst/unitTests/VersionedClass_data/2.0/MIAME.Rda0000644000175200017520000000143314516003524023614 0ustar00biocbuildbiocbuildUMO@5ćJKU9DW{1-UP-Z'uN'tƆ@hYͼy3^\m^l&I,q@˕e:,%NNG/I2xtө輲f: ٢vUB^wOʦZa1W=(-҈P Y,JZ ~i34coGh2LyTTxD]Q0tf](UV^atp JТp~/9)c!GNhQ,`f MPV 6 ND.y,(7 ui`a$7Ҵb?]+i: / yFXAJR0DKfdSb q&hMKE.RaQT䪨-IZsG>iPF14~lQ[͓n/WӖUaSKkE`C}g,G3{Rob7BS םjdc2 hVGRh6:QFS/xCO*UZ꫷Iܿ:Ϲ7b>}¼w𻡣hmـV2VhsSe{,4;RkK6jX0٧v?AL=)5vJ30,BUN0;|wEYn{~jYSꅱL;99= )?ZL^r:Vo'%$PBiobase/inst/unitTests/VersionedClass_data/2.0/MultiSet.Rda0000644000175200017520000000105314516003524024530 0ustar00biocbuildbiocbuildVn0vQ Ilt&U褩w6ۺ(@IIWeҐ ssj}>Br95Yqre'X5~6]uF6-O |Ƿ`7V{3:߭Ķ  E{;Gh ѦNe;;Ƹծ 2%'zf^tCJ;ys3V{\f8l "ᤐ*t\Uv;Btuc{kQSzQ %gKCԱfE_l47 ӊM{vSn˒ zj˜7FsۇV+] U'9Pyjq$5lA=D0&J/XH>-y6 2 Lpj>v6Ŝ7ԃ9e[Go]zB_Bud Biobase/inst/unitTests/VersionedClass_data/2.0/ScalarCharacter.Rda0000644000175200017520000000016114516003524026003 0ustar00biocbuildbiocbuild r0b```b`b@& `d`ɉ9EE%E i4rbAȊ0@^ d"bwOJ, a" 4Biobase/inst/unitTests/VersionedClass_data/2.0/SnpSet.Rda0000644000175200017520000000114114516003524024174 0ustar00biocbuildbiocbuildVn0u XAD$I±#Q,mR]Pɉ;q6x WS󑺿 ok+uLZ~5j[ *6x_p)LPq^{v2YRS"z7] un9qh5 x,{ >)[B m9?Kn\g1$W&XT NmaE*HYsEpGy3_wp˝meܥlܪ׬:}[ Go.(eJhgAq+d011qͱF,9Τ_IG&]ܙDTBbgFJy_t.e60jsЦ1]2MŁVlMCPn94͟kYASKTCU3k+@_\ 3;CʎjG_]]>̛$-9P"h bF%e /$mtC ۝[NZ lPr(ʯY}yE'JSFԄ2^BpFaGg1>'Ԯ88:Ѐǿ$ Biobase/inst/unitTests/VersionedClass_data/2.0/Versioned.Rda0000644000175200017520000000021714516003524024721 0ustar00biocbuildbiocbuild r0b```b`b@& `d`ҜaEřy) ̒hz9PE@E ` hD$U 19;1=DVX  ]LEv0H0?Biobase/inst/unitTests/VersionedClass_data/2.0/VersionedBiobase.Rda0000644000175200017520000000026714516003524026213 0ustar00biocbuildbiocbuild r0b```b`b@& `d`aEřy)NIũ ̒hjsjお2013  `b@X@ּb`A (TM`' @M r@T 19;1=jL9h T,Rq XsBiobase/inst/unitTests/VersionedClass_data/2.0/Versions.Rda0000644000175200017520000000015114516003524024570 0ustar00biocbuildbiocbuild r0b```b`b@& `d`aEřy `"ϚX d2iBQ^ d"+gwOJ, a8Biobase/inst/unitTests/VersionedClass_data/2.0/VersionsNull.Rda0000644000175200017520000000015614516003524025430 0ustar00biocbuildbiocbuild r0b```b`b@& `d`f.Հ~uc6*.RH=yK~ZMTc ;\;oD_@qºWA5p2 QrM[δ|ƲmYV [A}XC#\ mրv3p/b/ ?.@ڶa~?uAIc3v7[cgglPOSmXv}g߁C]Wypx?e] lS_oA;o/ B COC痞<>.+$ +@hg {C> @wSd|=}}_tYnG |aEIÚ>`}k#w3vqW63chggK*pB g;D|0 0\eSsעo/|zZkY 5\o]2ܾK-9#=Qn=؆%ֹɥ\US cSxqѾ6oC s_A2 99ؼy?cA) ؅߆\/$w!R $akv[H&O8Śs1[$As ]C{"f9qtSz Σ{o义= l0/FঁD{k]B ۉ'NZGqZ_,H_@ǁ^"d'ÅA#"+׉L} "H\>8qNʗ2'%t>X7Ѿ]gW/bn7b3x&5;@6#~ho)@|-C]?x+"bPC |A{7[0G4W5ڏi+?W {"0`rM 7N*.v.F eaܹi  Wve۔cP&?D9G\u@~OZeȇ=W t? W' RR¸m6}t~-l,Q\ Fo?(MzȽtX}gyn_DN9Xt_Q< }8rh^~w(gaWBSqW~)/"5o~ @ .pNF> 4 빎b螅 𢎓6s{HW{C܅>Aϫ§)7 ߼uSAe[7^kCY =GJ R|}@D zɺOC 'c;&W;O\}7F ɀ{ۈjy+"v.{79nC}}Eޏ ?aZW1^7 ,x~'F=GHoNNŝ/E |z/KAO!Ϥ1^q'Af;_݌z!@9h)H@="ow7զ[v7&$ [|\Cwz[i|WGKwi_un3C}g_}8=>|O_B;Zzk4@>tнQe#TkSL&gȷ? X~Q<"%M]|Z9nB5_C5[G$9-d~4tg+hAǮ?-ڃdCAvȉ{y1gk96Xvm"\=c% }rS߅= C :G-u| 4?yxe B@oIˮ. Md$o(Ntf jЌbDl#x;Vu>YC=lc;IAw=oq>wy~{>OQ76|n1 p ܱ\[t6Q]{3T,_:h4!/*zQѴ5G w@584E%nT‡JzN{Lt?KD퇻F 9S(D[:%[,WS)޵j`h5Sӫ_k%Ǧ mbוە!\WE(Dgzɪ)+尷-+yϊKJTLUЫR0=p25d$UvC)iޒ)%1W JyM 6eR3jQC6K\Sꦜ bԷPmҼV.ϩUPʲRRPguC֊jf\UvTc6Z*c #檴lTt.|EUz Hay'd&+\$ Vw>+9YjFU ]+Z CYz yVEکP*UY)4LU.+Ԋ-T stD/4L JТ V-pUs7,e]+6Er4 ZIc_vMl^#0I5Q]Vsu=z]ڌ;ӹeSTMՀ98%X[d!4`F$E&_8*u-5sͮuBSo͑m lotL;NǡZؐͅZ_pUjMR@缦9}a=9 2???i {"HQ1j3pɬ={k|N-*=|{bѡx,1&R[h^[ZZQrTUuE3r4k;`2D]'}7zxOVDբ8nwUgu[p3N 7%UB``T'459b_үį~+ͻAh> $[ҹ=P~Gm89=gvrMJwv!礹Xo[׬5|7s\o!$Vz+Fb#DO,8X C¤\x$[x&k'Dԅ "noB$"!Hx(=M0KTԅ QS%Dܖ+Bآx MD K2OOKvIqѓkPO m#az2Kzxil9[GJӺ#Ew:^c|Nȸj\ʨT@z}#ϼ|{.SԼǞcUOk7}is#c/;lS}3F^;v}#m!F[] :扮lfrbT ƳZ5v7Jv׭n1h(@ؾGhؕ7іH(='\3ĨV0Gvvv6TŬcNrVN zuCNYprB`02`KzK+Z9x0rr9_ދbL*yz 8{q\vU{gqVvk䨓a zq1/YCyZPCՍ"J|Y׋՛2ٓV=)5y1x(ד8"ySŻۜ&vQ^܄sKࡁg^q&7xP/&`n^PQsfC=5sM9or~ ^boǧ/W5 c.Biobase/inst/unitTests/VersionedClass_data/2.0/phenoData.Rda0000644000175200017520000000174614516003524024676 0ustar00biocbuildbiocbuildVAo6fl'eHvt[6R,;}(( 6-ÀD, ;~=P`[=R$-1-vx{O{{$Evn!TAWAUo <9}aW̓?i iG'':HUW ^𔤠l\CFYuS `>#)NU.hu&:`c& 6H &- ['KIJHPGE0J k -Z݊7ڡU]|:֢"UNG-J(ma=3dZӘ\x6ZݱZ$QoY=}a7[-0WqǶ8Laఙc`y{aBѶhIޱ"9zk6EvɉΫ8.vhE:GLkNj߲-6-4Tg/ei "5;~{W8gHh$M!}/q{rO?=_`S_<)}SENӯM&Kt0Fuo@l٘,,CT%bM%$#70SF桤P?6=oV39+$*Fg8gSeHnG2(Qg l=VQ;zJG=Vڃ;oۃc8 :޸"bhڻO|n :3`6y S+8 xEߐOZHfL }Ma ~; &`i+lHJi赯lg|H Wa尷Wjd830%ЏXLEG \ψFVX`ECJ`do#Ptk|yr\8"oHkHuf=CzYOsb^/خS Biobase/inst/unitTests/VersionedClass_data/devel/0000755000175200017520000000000014516003524023133 5ustar00biocbuildbiocbuildBiobase/inst/unitTests/VersionedClass_data/devel/AnnotatedDataFrame.Rda0000644000175200017520000000177014516003524027252 0ustar00biocbuildbiocbuildVoHw4_U mY8iVV*D qX:±VpΙG q〴 8xcLlJ+~7_q˨ު*SrExA-ౠ(x~@ DQ1V2V]Cax ]0:('A\gMC/͸E 3wSXŒqihϲD% P 2  bxh=)q0 $13sS\Xj*G-Ą j0dH+&1%b葙`0`--cQ" ucYԳRnTʀZ`T[`DQ1<ɺ̘,d H0y)(z1IF멘mh&UnlZ8杒˼;e'<9i? r)Gzi{88 o^׻{a'_}KemɣgU t%|r97ťv7qetk(Ul.Ԓ`ZvuqkRhÔZKj3y6RGn#xeW&{nweG7=_y1 Biobase/inst/unitTests/VersionedClass_data/devel/ExpressionSet.Rda0000644000175200017520000001264114516003524026402 0ustar00biocbuildbiocbuild\ $ey{ep)99%ΰ0 {kkfJAxQy& "`DI @@]Ww]3yz[z0",ҁQ "#1[/j]ɤ1>CcRD59 È 9s-:3q{Y)U Vq6R)Ú>TUqڦKqW %VwV%ʌ*pțs:]ݘ@ߢЊ>qaHƒ}cT-q=ZIOSXN5gB5Ķ%qB,Х3Z6]}jޯX̅j|^&Ƶ`n۔*L]1ZZy.="fb/Qбfe#bTI`Um5C}ecRgwU*qA䔯2f& *n-vD2Y"WKЏb!ν19g'g72MsVUȇe缈OݚZm%)sv݆溂oȱ&>f[kUbLNsA.*E-K3B؝aW <1 rqq:^p걖:k&L%0**Jq>j~!3O e5]+w5_*UݷZf1 ЗڞV Cl-u]^ҹ`qWV5bA!rߚR.8'+.sna 7 6".{'/^_ZtVSQ^9 9%Lea|{ܬ,!a晦G1MCj]PƖ[A~]羖U2m3om-}jtsg|ݷ֜o4-7eepeC: cݖuOpu >_2voq&p`?Z-rM#\~3 <% &cI/elco½`m">qο!}+M> ]l h-ŴN/8P4OFm&t_Awr٬g1~xb|;]4 $\o]O|ud#9~zЍ0g!w3;t p$Yqϵ8> `cplةpuc /0mglk'hkgõ{@5HG}` 6(ƽFXKa?!a|% GuO/0,LTW1^ن9s"/ zDPx#Unr99z 8ĔE1hclD  4y/!5ؼ~7c {xDqc~r^>Ϟ#1Fܵa-m/& ['?>| $kAsH@;p" Z_5qk O%:?؃&0 yި?p8^0:`#?~x0v& 8-V|JuI_@CN%{=" XC^<|+"!VpC:)_Rn'z8I}UhO3dg 'W/naofDkFm O#+yJxpOk^[RI4|.Xב[ph.';[? ͯb$p_6![n>o"(NON5)88w~c^wt7lD"gn[G(n(oS= 0Iycr+1Q?j)!F#_KȄrAqr7(Fgq^0ybk 6(.P"a(퇄_#Iw)b:+b<НӸ>r<ƭyY?T K8~i\A_8 .r V4*8ו׳QFpzs5A*\GI>ʟ/^Ik=HW!Q|bv=fi07op*SC[ԛy[75PV!sڞ$~|^:J6z@D0Fd%:v$4ju\v q"}8ylĐ+ 8#F(v^s!KS""؍Y@p-PGw#(*&/?C<>-)ԤnԼ|;w-?-(p}ҏ1~?~&}իyI"k#CzW]׺C䭟XvSo կqjm| Emu'=tw%wUfo:OJv;01Zpσv쥅z]9iԾ!ܛm"71JF|Sl!ϵMZo< #zQiKuyJ/OPA#sA8%B=ĺ*b$#x><D"S^K9עsO֢IDuj Tuh"6}(ÿ<|ϑba}}ǷB>0ky]T(ҳF 4kCNJLyzm mA [{hbZ!Rרw'ߧCmS'+fѳ~~D?qÏjƝ"ΈjVd cT"' [s]s}}gA oc|9Eu83!oJdI\FϞ #J=Pг$e { n -6/2@lƚ <]C{6kƾI bstv$ÈvRv#'ƆIA먆# rqzpúh{fkIXlR т Xt3>_ `cll0K01kp66;F'; Gkڝ۶kl4=eI)rC /:Kc[d"͸;eccC۷ϥ쀛}8An1F=D/"rP~e'Fw} s\w_e_ϥ2鄛[\!-F" b=$悖 'd7R՛PAT_T@\A@2^l`l}&`MoL&锟*(*t*T:*P~FKQ頛IgfOf]&9/TS =ss|i/&,E"3M4Fh14F;Q1m==XΑs#IYVim崶rZ[9VNk+im崶rZ[9WVN7db~Mk_گi״kZ5 Tk⏿_2uKxӾMw_oS-QC) |QT~/e/۫9T 92]JRTe\P/׌*yS7N'Pn\*g0m%>GР/C)SE]wZ5]r^-rj풘:֡U m(Tgj}T\xDl8FQS Hb1fIuC9nMtOVپ˹/鼞%Ŧ{|DPmz;g&M:zG/4~_TEGG=PecH ]UǴ]|ED3,߼\CY;7\cB-u+fosVk\#{8f(J`8cw2'GdzI&¤螁&4@p!o&Dtq OY' .Gy}dh|)Zё1ԯёmŚϮ*Czj񫾤fI@+(4N.Ϲ{Mы5=}USkC9XprLuf|\[[[[[[[[[ݯpm?"ZTwB&{WқZzYb,6mCwmeL-+Ǡ)ybR?E컣YTgUeSɛ>zmEG1'FQk^J+.ej97 Y63+r^5|oY*kU 29C/.Dc,2V2;QM= x| ~o֟I$3ɗ07ĸj]Biobase/inst/unitTests/VersionedClass_data/devel/MIAME.Rda0000644000175200017520000000144214516003524024414 0ustar00biocbuildbiocbuild}UMo@u ڊO!!q#cTJ8 ܢzb޵v5?)3v&[(q{3oތ_>y$n#:a''g~:$;gэb!;:Y,$7W͵L}4?Xܻ#Z3Q n~P6፨_w7u]u꘩Qn20iDiE XZ5Aw :t:MK*eD "|prLu(mS Z*GRxPU9@D%t(?%=4C4`,h &%, j)Sv+#zxޟep<TfCpflkbj0Wu4(y%熊4=gj[W_Y=`Ҷ Rk+L[V*4=zn'b1, "M64QܽW/߽~xu>F2r&=c]v>gML,PLqNoEY|s|q[clBiobase/inst/unitTests/VersionedClass_data/devel/MultiSet.Rda0000644000175200017520000000221614516003524025332 0ustar00biocbuildbiocbuildXo4w-v7emA`H>:PHCB%YΉ_ !58s6 %InV9 {;NCB 8=mah#rzʅvs~mYgq0=c̱ɏM%f(A煼qh$[(,BXn WpRR ĥq2((S6j.НGb UʹqBWS;Ējw._kIHY:G)ch HamX@D33U6 }y+Џ}uh-z,<914"" ZI^g7sו4^unb5ySn(t/0˄0,YsD'QaPD(b@jubt/VaGj>};:P{IW]Ms,Zl{)df(HqQXhi,U5Y>Q9XEA+٦t}jyHe8/mj3^XӔ;c :]šŔ &mM-)~Q%b?v[ ubd_#˼{>$$*9SO;:f:#\%q@|s2XT 1$U^WVff S|{2!cOR]J~Vsmݛ+FKs"ym-LeNww-Y?Βz!E;փ7<ɫ_AG%2LkzŃsHyk⌴shMR!%>qJUAхAeϕzS\Ͳbi|*{+ Ϗs_JCr 8D?Hz+Ea:Obi^;)STTeoǚ7KuR̃J9V0\;vЯ1?[̆l+=?J""`kD\?" =*6,\ ' ) ׈t2FQtEXUjDtF2혢F>?&Ԏ`>*+^7}(.Z7P +Biobase/inst/unitTests/VersionedClass_data/devel/NChannelSet.Rda0000644000175200017520000000144214516003524025726 0ustar00biocbuildbiocbuildWKo0 i^m=0` +}t 4=x[Jcԑ I֝v'YRݤz(*@6C$ŏgxu\O&S1  i*B`{4rHWDш+=FJl'CM>QF.3D9ѕ(cHi#}ɂ 6xfCtO R! p2&ӌUΌ\+.y8d!OLx6_ZҒg $qʂF'Oղ'{!nYcn-@g(8jH0p6. I$n(G%~xb.Koٺ`]# JxN{[|-;HKG 幬63$x=MiOizP78hG 0ϰbʽwݽ L$j]ȶKVE׳ * 7pI.w4Wx7xwx0w^U*f nDlmY{W (ּ3~[Vc> k1ed1kN%*h>"ՊI, .{MNgz><kd aPEB g⺨,ty^e/ _ LBiobase/inst/unitTests/VersionedClass_data/devel/SWPD.rda0000644000175200017520000000101414516003524024374 0ustar00biocbuildbiocbuildUMO0 M:@*Btka\ap)[Tj&< M$wy/6vB&2mxZ&< <\ݜaj-w}ܰzA;PJ/a g_8"ח ɅObJF dn56;D?U EBn}yH@8pDScO񤒣)ĭ@O&9j'5.9KYAJnפ^=D&[$ӈhO"zu`8jriYmHVԸ%\hx(Q+b㔈kDcmoj*#IJ{BÙ?f݀Biobase/inst/unitTests/VersionedClass_data/devel/ScalarCharacter.Rda0000644000175200017520000000016114516003524026603 0ustar00biocbuildbiocbuild r0b```b`b@& `d`ɉ9EE%E i4rbAȊ0@^ d"bwOJ, aZBiobase/inst/unitTests/VersionedClass_data/devel/ScalarInteger.Rda0000644000175200017520000000015514516003524026307 0ustar00biocbuildbiocbuild r0b```b`@& `d`aҼɉ9Ey%E ̼`I0FQȚX\ 4BnTى@&vb?)Biobase/inst/unitTests/VersionedClass_data/devel/ScalarLogical.Rda0000644000175200017520000000015314516003524026262 0ustar00biocbuildbiocbuild r0b```b`@& `d`aҼɉ9E>@#3XQ&$U{Abrvbz*)3?)$9Biobase/inst/unitTests/VersionedClass_data/devel/ScalarNumeric.Rda0000644000175200017520000000016014516003524026310 0ustar00biocbuildbiocbuild r0b```b`@& `d`aҼɉ9E~E | I P59'hnPu$&g'z؝2A`hEBiobase/inst/unitTests/VersionedClass_data/devel/SnpSet.Rda0000644000175200017520000000232314516003524024777 0ustar00biocbuildbiocbuildX[o6ıe@ӹ,*-{hnoC Pp)y{D#E*"ivȀ-Q99o~upU8Nթ6w֫8mkHJcA$A>9aFۼ?ze 8}K[&?Sp5V^ɛsy ?!^be$X7%0n&Pzzu0?T/-vͧo'b }ᯄx(Dtз,h*^-Ivޖvexs^jJmx>w0`B1z(H,rmM+w' b5#7z2#V=5D!͎P"A)"*Đ @ޜ%EhMz.\Pe9F$" GM]LN&ףےs*9҈8F5A,D7e:eAvRazcNGZ[gxQP>T*:z7VX,>61gys5S_Z *+x-:,Z6 ar91@?I@O,T9 Y"Pf; 3CMR ܧ4 xQsWn))Q8*&E]g2"Vx}nXC*vʉ_vy,_j5}i b/]- Ç%Qؙū>(~}qk&W;Չj=+.6=o+kL'j4lo <u]J[ (%țQ5e}N6gcKs̬x G_[Y{ʪu7|Gc;v9fF1qHeCO&Y$.N| q"/7T+0mG=1#aǻ1eW"8mA|/c[x0|s/|ϻ?4kw?>_lz<ſ~ђ%fvZR);+mt+ $w\tYD k;Ժ~w4O"nzsaHvC_,Aj&Ա㷤F OLUb+4~gcF/f|tC?Cd8]$ZL&7:p'Dev/1Sx o>8"eB^g8 rpȹfBIpB67Rc[{%Lcg2MQK }TL ð~Ā\>Xogc+`ioK2v()|̢J|O=C:ZhZm`"R^kritXKP&ޔ >@MwU|rӸ6@zZ?)_ޥoFqئ[Iܒe6*guJ5| y.9jKE2*e\$iGOC5ScbFCmDe\:*e2c^@ן =v0.1a`_ԗ|+oqy ܶM ʌ/ypDDh>ѣ e[MNhb|zfZpZ:FrPsW _JnSSZZ3t|ajn;a]R(sbh z50}ĈD\ ܤo۠n9l;*>UKQ8 4=:d2JY ux# 6cäU-Mƒ3Tn֮"hCϻ'1T  n7j/uN#SFTs@T.L$2i5LYX op3hta#ly9HWdUטU} {-ѯѲ1̶cT4n!}QJ8X_ㄞ #o3I8Bq jəR8h8fd9G[*w?Tb~QBn&:~8NXfBi?^6fZn{f,-ӱj5pU$i`4+. ">뇗"KFu$8NtI$,.҄hfs4'ߝ˓~q2=j-auOjj*5[N$usܐ1S_)X_yCb(m+BɅCd 3>`p%[GĠ辛oR-P!EOd=] 7)dG@": }kz.9!laeX.vn\TNAϽ ǻ0$QܝPca96Nk7ȓ&~!q+z+AѨ ߍSgA3RL +F q:(`v=0|ij%T/*1 O+lw0gGR|M(Aօ0/ }0kol&QKzR@qq+UpV2>0_9E&]_`13Vd0gY:b2lk~qI#hnY_P8i&F׋Oo,'$ZoUyZQܝbQS)} IvKGW jaxTA _+MoT|h(UxT>hÿfR'JF=E8$zs;i~&u߰?ҝirI9ɳr"k%1y@mo W"9|bP%S7R<~Ydp^m=Z/Im+`R8dfqWםCVzs;bkkpPz#1p-,#z^ CmzI3L9Q@#:rJcټA,h' v;};$3꺼 *y4ڶ =a. 0+ N6R]#\pRmK@~亩7Aݷb982zbV:R (Z2a|w* u3p+,< UWgꉡ}[ a}$n˻x)&we)cm#^(8/|3)aI(Va 5ۇ_@0}لJD? jjδ)\ݛ>̋M}Q9ه(]A5B,^y 1qeH(s]p[?ʫ\y E9"pNu zp361" 'k:Y%, !@SCʉ/2ɝox^L.ў `'|E2za8`3#!ag7GZTfFnWJ}cpR0 +pJY$+.#:FRy-i1D cB:㨘6j5կ4Wnߨ+(M5y/,gt.+&燠heX %PT_>2ru =%s\F`Յ6?)u}Oġd j')tL$[&IPmwú**3?a{CoQ$EއW+_cܳd\[8u# ?;JΓ\oit^?,|hO7ml"tkS pbL v#EpYj3L* W0&λ%< Ԉ0j{" }"17wI4:ms]p8Db.B+w"P ъBxE \qupV8xOV$C%\$u֠ŰTZCˣOth?:>Yl =%1?ñZE)ԗAAs,s цLDK)C= xBAma>*Et "rS{k^<R A@@ 6킂2uk12AXZOP_gur x/PDOX0iom%pzxZȗ(O f) so ٍ=_#];C$IWxa6LPAb⵼/wMg?NQs0l ^>Fu!ߦ&ʕːmW&~<[ Tpy&"њ.w1ճW9:\_ wʫ { Pwe2ñza0c YwzݑFHT$p¶m T~2'4J[6vWI-٧w}|hoȲ8p?.ڔcQx L#U@%\k@o7f0绾F ep yNn,z\PЁN!3v/[{Hq%v2d iq4JQ4uԯWѝy&뢿.c)D [r2kw8 aB˳yP\ʓma (6L9ACl?by (D W$'bm P[<ڍpN-GF4XgPWsQH=sHn/Ҝ~~J  Ztv{Q%h|bZdjmDO&02z{jfƭiʛ?򧰑V@-+8њ u"V>N<UObrؓ-~o.p`%C7yn}mv _xJ2Ak=HUn i o4-u&XF}mƒcw WSe3Ȃ0"&2 k-E^{ml3͉LP~mİd^eɄGC^Jz 87[]J TA>Ge4/ {+,ZQdW-Q9ą67'PyX2BQޟ0%PjjtI?9&CR@roG(ϣr2,_9W}e4NH{%2d(wL(P3 r^Й=h*Fn{\RE_aa256ZuRMsn7v9m|mO)Z1U&[-ʜJT:xT&qc}5h:2ӱ;VX zUW "OC+@VC+ԫ!#քxRĈBtpXϡ9Y*5>7v""Oh"'Xp4uh4y hȖa2@h5^(ڠFA]-!CrUfyDiJZs]@o:,J<{Ӏ) zea"SXӓgSx$OS-܅5l~^bfɹ`iD$__)' MDZj hC3΅*F.8`wR4]+V<ڋUVPB_ZQ AB͞nh{G w׸SêvHf{6S#bCPVHƬ?s(>4$NnN5Ԏj<"wS]{8Gkkm؞N>b ӛsK[W'k1pN)m#L>jr$ۥ iS1t{C>`^o4o{M*Θ+ хPCg1k3A Po @@Q%# *KgCSJQ 'Ewy)X+)2RD,(חe዆s LH qԏǢs+)ÃI ѐ۴.Xfϖ}Zk zϕ 9˱PBR o\XEUcQTY URЪgZT4m46K`àhfB˔Ǜ"uVlj&H– UnTr0p"eƦ>X 8DxXue}E*3kgJŜzF&]B W>4+w;rUnnV g?AOadF/뎫JN޻i)`Axu'} $g*d{K'7TCqSmn̶s##٨ " JOS?6)Tj ZJ6H? ) #~L;63lki!ݨpeZ]0z 2/ϡ PԄ.C !}uf1y;5 /ZYHYH =\΃.1*=uDzDGT]?Æߠtn>DBqnJ$ _Glz< TܡI.d#4oSu!or=OA$PXPɋ Nt!\C5^ K̥9B"VtHlkptf(fPjڵm8fLA>{,gd g;]2ZS=l,8zcbS9Rpq3(΋P\;Pc,r=Z6e>Ϙt٨71S%ĦMTiK8K6xǀgULc4]_'a? Y)Ahkm ч9jm(QnTAB*كM E-׭,DSYyy&`}oqBJ-3ې$6#:x`/!}6E`J6T'BjS 'DciK]!a)x%&,\} "d&j;z_\HgpXE%|ԥ *i >{AB1Mye8GJEoc`p.4-GI@'!"DΡ/%,*o? rD0ZP 5R>%M xCbJE a~H8gEw@0X8;a{7T!v(QIZهW.8|HRGmzAs]nG.o;vCAC[ua^ gbw黠]9M051?vw,9}D[(x!&ܜ&?@!;:SD,֧`hH԰8Sgm|#,JCUFՃKY!xD)JR[f]" +5#?ےRL`s<ˍhPDMb:_BUmS6D1%9n5M!A!j ֙90b&ߟK#j%X8߶9PgEǪS 0d ,}+GRԱ <탻9Dk禇I6gae Y\-^fX>z+XZ%H&[hnz8DžӺ`#cg~x}je&X2sW5TS^"*jǞfj{~.C桒cgoآZ KYV|)c=W"s*eU=/az7+i3_ٚV4ZvGaFޡ1* Tk(ۻʝ$tahZ8KeZ65!׾!D\%_QJs$)YS'%.}@+Q 6A%eC{kM#KD˘m6o6Z&jo5yx2!VRfi;Vfy!4_|X[;mZHW`! [?}q`wy剃s$bߴ"1Pasd懁2MJ&K)U;WOCIlbS%;׳3ll%(s Bvhƨg  XԲ!rAle~WnP-mٹ@5җ>t ڹ7<(+"kTA@ Cj gY]#Y)6L\w&SH w+}lOqᜠQ%f 70j^ Q{*Rhc36gI jnf?)M:bn(߁ Rv,!6{q,X~WT b<ԁ*&vkUͮһi2~ 2Ztߛkug| & WFuLP|^۾ƫ<{Yc?1>M{x"ij(6*f?;!uhUJE75ìDC]uP@'E*zj`Bz~+'ޟQ8DڇbXxRXcj2=WTWEcB,Rz[Bk7EH+Fb!x.sIT 3Q;VI3Yypupx ~[7 ]N+P ؇ ,c>.E-3m[eޤ)5$)](TǛl&ib=3 (JJ!Kpםp26pPUWW%z8o&5}Mn;pvaHlN܍h3~%$RntZGtp*y$I hjBtiT#yaa%lt$}[t1]8oŒ-{ †=8^j1rNFY?B } &H#:u/ >.tuTTXǨdα*6]٨'-lX~!f0Mb1ʢJ3YC~zl@SC<[8nAm@c)vN6 pC\PЄ$o Z0a8Fyqngce$_|L|®PLõ#FԡcËקǐ F|R|0.YnfgmgE9n-n gSy Җ1,I0&&AuU~SGuPSjXkt0G4t^pw(;Zu"!7.qGe}a*<\({/KRջ;6KRۓ梨;RaLj4H=]v/Thk%вqW *IZ}G},~tc<U(R<J~P# , ~>{cVoBcӵgxS {4jl_Չ.DB1lŀC"{ ibbӕ) 0P >#7g)b}`]=F9J }c,~F!r%/gd{T# ?H%̤'5F06MvMxyB:)F.;Qz-><Hڝ< tX]`Q}Hv0VA)a %LE*4 R UeTE,ݖg ,^ƕ,@$X#}}~hdkpP3.oP[Wt$"n_2w1VګWwHXfcmZ\bBFݦm'4Aaft&v"BIjO1"U#.?~㓠ԫpi^Noo\Y0|`IÚbzQ C5 K'뜄%2"pD%Ұ E1XthaK7eՆmNɦ-п19,Z8K6CCPit8xZËJ [x4Ld,ZC rh$ξ1܊:yDt(CeKB du]h*Y!fVs /µ=&uN^]=$Y?~w-C#2j?h$p OSo2ptR̒f9^ܜ4 Z[ on%vQ*>HTZ fBᕵ]6CuF3`O앆MQT'4~@l3:~f(Σ8cwW[D%;07 T jY7f4&T3|iC( W8w۞z{r4nVJ/ N#x,a]B1 ψ0 knW8x$p烧3r .لr@z)ߔٯ'o"=t wH3v0uЮX[ PHͦrޟr*"O3[9ԇ#]oKhQy]8g &Jm#3Uc)Kd{X}5hwGpx/\H'{x *J|B;KL{DQKE/FDu}'B7e[^Y )xT-߯>ǘIږM`&V J6COMB&Z6P]FP.>Sg7Q)r!OR q_+62:LwBS&y: 70mw/ҹk~IKW`QDV/ʡ]= ,Y\O-iS<K߰a3c 9)j >?4RY o˄nB͚Gω6pA2SPȗm%.3-؆|I%?01x 0Sn%%bŏsB¿ƗA5e:HFFSP\}֢ <';S 6ìl{oJec#D@]3ln b{u-yYfh6Nk-ILX%ma{ը>K +zVB[%Wد"|{-c8tEn)nEEF>һ #j,}%֟1Y9,y!VlP r?U|aa1RvZF I;~zhIq!W\'0&HWVFK6sM !U& |}vT1BY=3%͹#"sQpY6 Ϩgj̮#*-DXreg3\䁏KhKt@qs]ځu?AO P]hPZZxǏů]׻1T&7'|Y :* [N.Vy6'K0ըoE*2*v _,a%V&AJ䱋K(lFq'by77f=!q ĸչ!L ~x9k&8%W 3m1.dPB+X)Ȼx`lDw,%ZvVvMJ!l6\7#fh Ż ǡ(†HxK2Cŏ+'VеfOZAͬ@ @–Yá ?~:(J.KC MEuW[K$F0 ,E,oT Hc3pFJ|GoHY "^C|9 Yfsw.j\)H-h)ݬI\^moUŦ0~`b8MH^!ws-sCgxLI13z*TbXb  FZC84F3Ջ8M^ X C!}pt|qr N}(63BD/_cLϡj?@Mimbxq6ʰ-"ْfNZ~oJ-"*ޟ4n{7K^$<zJ.}PNhDOMơPqmcY˃Cz)+? L&ZP&!{%8{vj mV PWt3NՀה[z0Ρ3a(H5Y2tZ^yp3ej.ނ؆r۔'E-6kȒT"Bh{Lic.SxvX`ZʰԾ Qks4Xmh-,y̨y׎؟҃~],hNmDuw=ڇHBXO29>+ڃѱEPs6exg#\FR%(URH Lba]UqZs"V#a%МTZ\Qi 5X/PܙY(*-sl$xOolpQ!|R"nIH<=aB- }Lj}-Ճ|nJq8g5sjZ093$0)<2ᐔ.`cκM,=l%4fWeS{` `M2yMYȯ.Kz)\eVuN]w=/A7ƸƚứBBX@* #, @_eMu<;0fuUky9קwXlZ&9v]A$Zc‚ɐPv++EZD<\AKia"~Qy!GU:V(kF(#kJ˳ p l]wֆ(R>al"Iȥf?7^ܷ_xd`XC IH?3Cf]))'_~|a|2džfA8ɾ>, } H+id|(4˼oى bB]XC$+*0mcs?["Ew>Vb΃VP nYm9܆" H6 '䐗8^eFx7^U{ *=_^ʮ*C1}A@8's\jbDx[ 6-*wwRa`hTE* o"7JxkbtBd06pٝ>U:a*4+} Lϙ#7Cx:&Vϥ3aM+>F۰b 6۾4MXAx7'q)byS|,7WT0!3(}F~Z۾= "_Ш#*a};?}m-RV;2&Jn @吞L3(pjH7|KrEae,zk!œEՕz['KHڹ^7ElKK8mnEdh 6KAmL$nkTde *_21.KM\wsDIK1H}YT IQ퀢j .$4ds)A @]uZzÄ]Nב?Hޜ'7qԐ>z'X\e q?^y0vفjtx)+AOI C-X >NF 0.E4(Kf)حG K5tݼx}נ ئ&IL~URЕ@K_#c`L۱Rݩ E*E. ƘَK J%۱ ~*4:܉Ye=}lxn J f%sFVSĹf*vA+co3 Vv)wXuB%OV#]esj|yij*S4zG!X>Q >աGRR.ǭt%taЦzbG1O#|  j6?,Z-2YNrdz^#s3<6y>믡tjAP|]i@Ծ&2YP޷bP_}aogX-,w >Xִ@[IГpk?E$)bl{<1新NE--ßG) 2$[aQV7KYĮJB|/SpJ^^׶qkwBzZF-\EVj.nyl427̉:b܌MM9{<fC\x[i-ەsY(ˍmBђnJ-<,BF`ClbLSzۑIcܯnr %נ%VaA^TEаT}wBPvd%0 r ݔoPh?6c ! ăD/R,R8,i.mS-l}F6 9"TyC%]} %E\Bv~>6|P,=XIrG"OaK0rh KmRFE$0Z5tBm2/B@Gy\"\̍P;wRApN6?&2 X#5!4F,ri3MBȜPK3CKc@hns`oާAP"t ]7i/C/Mdj, tn,TZMO,U6 BZH@T )XV4ʰEUd;[KC=kl7ޢlL*tDa<ڕρGj H/n+l ;^C,҇)NKh.?72ys^d:<Nl[,=Ήb_HhZMen-J*< ':ݿ7)ΰs f \ԧOА& 3˺nmzi N u9$2Z0X-1޾0 4 ReBq;\7:1PO:+zsz " v8?sJ0l %U2<' hE2ã73?6˂(;ĽLf RPūRC0\Jm8lyǽSj2\Z+wp ME0{W^A*S]cF5{^%f@N/=T)еA^*nx,z5=hX4Ic#?5KɣY=y䦜y BZ?Քnlm߳HT 1(VY3= <"`&@ ⊷FkTuvr/,2Vq(dr@کvP[p Ƨ,:)֩K֡1a[ps\`e 9b2\~'=i.fr9UӬWwi@L2j>a6L54{rO!QSr?&MXO#4`XP)Ug6bAGJ rn4{jxaN5`Jz:*YXyӈ{nmgZڵh m +L4SN:+QH!mo6W/>KoTT0h?TY5TSp%9$O uOO 'ϼ8_ITn2=\DD*HAק3*s@WbtJlUn"[ʣ&8KB]!#Q{|JR#5 `ARy٫D#SP[l.HȳBxNg{eBɒOOXXz5*F\jf;oH z>+z p, skQEĄ( 6_iFUXxTZwo dVI}F*ܟ mۡPYb,tVƅks6(l鍤.?P)ȣ:rEyK Tn]Hy1AQ,l;?N!2ٍ9 imAHЍDY'M󀻬0dPzr h}}[X7J}QlC|"}_-%e3Kb(=ɪ/k6BҍS$OYY, ׄ:Z|Hq lRi. Ä@vޭں{o{фAvQĔc{+ke}P1X.J,\C Halဴ D񏗁]*ȩ=k"Wg"#tZOB7|_$>-^Ӡ ]_~!pفMM`.OCTDM|tyODߒ%/M"(G<#]*B\1P<[ʐ>*\Q`^Dg66$z)aN,d$ݥˬU&=A"5jM%zoJSvw O IΪ9ےʡ$sy9mRTʲw,Ec>yts)_ψ(]7eAQ}*6ÚzlLV/ce\LZC'G[lrZoSW;xBՅ&Uf[56n#B>Ss#ƛ9l]X1 6 B^-QY2͝qy3*“S[OzZ#$gLu tf;)Ft*z}Jc"URT$w"#<[77,#BM> %eղbtG~⭼z*:UԮ"coS8{+}3X46%$<S,QrA =vip D(&Ԭʼ3fM)Mf1 k!K$EٞNtR$GZx>'Ӊ8\&^= n1/e8+S%=BJv xC$bca2\{U7ӊ&µ3wv6Q|ߛOg;<hڞ? ʋX3^_@6`^m5`,"yqov>bCQFDO:rdLf'Aivw*G1B@ho9B*:Gs +/J,&cvtyt(;,~fr/,aڐFqCF 1$| kSx~Gz`KڥM45S7I-=lnLx;ν~v 1Q$nt@Gn";ɗY>jBEXv* lH-Ipp%\ &Y+a;(K*џ#pqꋩxmd:{/FS7%·hf݂bKƁR#0'^5DasAA+Wnvod2lN29‹ a/!!g7yM Lw|MKd}?q]q᰽N-"1/吏ӊ̂)6Av`e۾OS^!ҡKÑ8S*A=bq E9[.Y=su=|TL2MtƔ !c־Wwf'qK ؄6bδ4r bf8]m,4I8EaFs43y F89߽ʬ! ~uճL;âhNTkǙX4C3Eu0qRh@D<8:;dnDW %9KeDvaUY[ؑlZGL_ la\foWY*:cРSg:Ij{&Ŕù 4ٛ &Eћ;=M˚ v;ݘ߽ve2i&qs>LY&y S\ʺs*Rm֔AZ.HoGEk'4xvT?0 o!Na7뽧ÒD(޵܉Dbϲ2үښBmǚm'  Vfyg ňtl/ۇCr`O7DEEӹ.FB8nM42 ?%6 ldi <Т?Z|p _ꩇ>21_ڦ*]/B`ʕņ̔͝5%Uxs,[_̸_UÔ,{0֮O.Yw*(yl/3aǗSF |x$ =f0'gu1fϾh06W"C}^CdqLh?ܩ&S),&8V3ew.ᰠ[>ߗ|?euj b=(lS2Kw) Ǜ g]/"YLdZPl(;K[s~ =/.J\ Q9X6rQa5h"LnJ|P$=Juw SWNvḙ-!%Al U~g $[_>+*OQk cTҶtmv&8"䚨X[u2Sy@)o\H&FM9ȒEҽ%`x_TD,{M#T<RLs^QWl\uu S#Pw)UپZ@'4y.O14nMtwԝJ^)a " Cz?E]j܈n@AJ{= C凶A&<ₘ^KVyH^9mWҔw{ƻTvM<mu+cF!_e#㑩EXXP$YC]Q{3p? t{e')"&/yj Ta`Br bfc8 ;B-{30᪇o:@bWbV@0:#Vf n,&7DMiLLGVd~ USv<~XH@0 U{4W $(ں6=s/ʾv!MҮ=2 -.aѮ q\LlYɜTlTY:-әf#Ug*EIE Lɞ&LXZ c^FԱ [yg{lxsؗs{v۲Dlxͦ~ߚYdu?fAB(\+?|t6Sz**Gm FW-d0!O31SdnƋ[tw*G9eZ}GSV|5WR%m(aI`p|vE"uM$O_&2Db}L`Tvv|ES#7',x¿hQ F፲pTh9VV80aQͥt. =qha#jxnP*~*ѣ&,^B;yՃ`E#q#vhOQ,ǕT(vF޿= :#d{Bm]rd#t%)#J Zj -'ޕ eHMbEyZXsiK:cf_H1:k9gF/l.qNH*T!ccG^h[ {rϢRr<`XfCYJCuCuy$[hqBmq"ejv]r4Зթάv?6߫+<2|3{h.B7oAgyo=)i=& 5"VbZwXjK15<ڕk{eQ$J9À_M"#7@owAOP1N|XK,\Pܾ)rF?"ei&:qtm-n\ۮ᫰Erk k1NosUΘ{m~CT~O6pϊ6FYnwMqy~VVT< )TdYGg'Лxa".xWd)Į2}f'RBFv(DyeXoI6ĉ49"eq+SޖI'in<:@ϿNTRxkE]K󹈜&F88_m?MYu;nZ]$G%CѳYe>1kk*azX j2N4EgY9)EjAKd {*/E]XcB:.dzV8#50ŊDqz C8I`QNx[Τt9'k嶨V%n{ۏq?J8(H.^F֩؏zomMpE(Z[ ey5p-ǁH$Dۍ\9 3WښPLi:3|ˑn'..Wju5*uh#;E^ҡ} Z=AykLiOoːFaӨ=YS?{_kc_SR2b*Q6 QfRb[ֵԙMi{KlФP<]i uAK9}Q6dn~yͯn:0*}}D1yGwbdk^]ڝL:4ؖlYOz7k}mq+?RUmVqAȽwu 4.7E37@"B/,LJE⦛6HO#qTf{EK5Q˴XEzJNb5#532çVK AubUNj [ ;^YZ"LDUq>;C<0MD ر}C?*˻_CWZXE6P0V\s1;PA Ѭµ)JG\BgȮly)&n 0Ĭ3d7BBT\qaY 4`.=:Sck? (Mhg̦/%y /<@b-svHRӇ s~`$SogumˢÈQ~2M:v]>`%G51R2e CZCٕH98Og&-c.vцyk&y [Hḡסb Ri^Z=l[ `kNn+vt~&j/J"BiuOnH:f/` _ XqGgEj7{DhJ%Of4 jQqi -Q 'T1ٻ;K2! .X:tRMin{8x 4g7qBtims]lQDnw,c߆̤AI?o3%igS)>V`((aS)w·AW맊s\GwDllͩPN(gܘyy7j bޱVt%Mbu*i>&T0+w/C1])ZGXyߥhb0zydeB(0r%4>\|z*,0yzapVguUS?EK'0 f6e?vSߖ|'a MHW\T =1ƋQԢ]qU:QLxk 4MaDԾYJEt-c?d0N1r d%hij ˔5D_z$TPx^ߺo[fVc:K4H~W}0JhidM8iSSsşS,vNy4SYT O%9槰\)$:_ڙkYqGI8ճDJ֥# e&Q¶6Adm q$"Wjn;kvp7 C䌊MVSbRe:@`sp1G&W~ݙJTIXRnfzN3ZO/0\(ڨ%Bf:b}N]':􉂝;t] POٔ ~.BDѻ[{Y^Xuۻ'rB*U,1(D5Z{Wm;v9z~Q{jW7UqR !Z@P|.q)^"o|Pz #dH5.q+j?w۬jZFw5<$w-:xKLeTcssEX .LW| @,G2Y}MBg!61ޟ-bq( X^ƬzEG2VS7sDL{x$QR3}&?M1TBۥvA? ׅHhh]w9&%(tm?4FWW^cu7TneaFHm; j$Hgw[oZE~w%~Yd,o ׊Y]Nl$VX/K.bOG^h8(:49u1QcjKd_9PB-Yּ1Oע]J左SMqrq]ˮ.g@$) mc\Iq.VBP Rӡ= FVĻ}zLy?Jo,J? a kMlKe'_!c)3抦Wst" kj2gضvM-}&vRRY~* Y7}ʙ*/ P`r`5̐;`Ue& _<$iä/*H2lʧu1;m59ݸ4L*Zۘj~wZMz5.NwVW`Ź)X9rf,oЉ=tا*RTcWj< k܁Ih%LOf1M[>K.o iG\kj)VNGH EKdR>ɵϞjW*!: Q$IwR%8ڞ#5cٶG\z|{ iXja![/^0`σE0eO<"2LUӈF.۩f9V<ۮs(o&cW*)~G(bK]㘇Z#ǰqVHS͟I/b;{Bp|f8~p6L&"PH 65UD>ig u 0AÍF+Ӛv[ti#2d>$ dz~(=+V*<񂓆5ފ8n2Jטh~E:(bmӑB3tws7*p)ul) yt~LPWt[ia9edJ\Չ3[\& 7,? &(i|]B*#j~X%ŻBJn \zT"e=υʡK,j 5^ʩj Lbu[W+Ѳ{7k8&`0A}:!i=&®ڭC܏CxU (c,얒P~)e„3SE:{:T m_U.(yp9$^ns<$L!t0R),~WL ו3Kpa3ۢ,:CD3f>}9"[G$~[L+eʞŏE)LHngG e|m, C4ae(JgsNQ'q[NfՂGL4߃<6*EdY $Y|bD㰘˘n7LfcHkFݥ~t{0Ewie3 h\#M`'rҪ bYƢ-x<:YEC{,DH_ߝ:b5g eytRaQǂ:-nsaD($㿲g d(} F<^n0l/*$ S5:BRgIPF )gB=2uZֲ=^ҳ$v1aXt~EBhx)aM#QVBqmY|* 5X]~a*L=4;L`̬P믫&IqbȺ@C8HŰ?{RǮgיE.0kkIWAn8ߦ8.>+옂9 7+hP#К'G&3%NZ;SgS*N=%hjO3FCg? )Ѝ L UD8M K4 NïvŠmuK1bӧVGE$\nQۙӗ7nK{{&HBfD.LU[勅?~I)ӷ:"TaVK#BlM=и˔Rtcw}y]پ/%Dud˷0i7+&8^yt'JlO&yy]ңk;5[&֫F6Ӏ戫k]l(w:_8h?-͡dؔX/Ya~>2B.GIpjA@FH^ʈ7R RSY {aͶ +p9xc@d *LLxuwVR[(+Ez|"Oɶ)8\zU*:g"HlJӆi2]KUcBa1|Mmyԟtc2N'ZKmE5)d??.po@M_v wqzScw 'GU,+njd|*K3pah>GϘ y&GW'(a|X2`AyuR#(eհ4kq^V 3"7wD*pQSGi#[s`g1=\?x]%92Ҫ0<Mc$ &zN`MЊpQ7>9OHK:qע39-"'H{+]>@g\4II~/"FxYy櫓ZAuAaE^R*e7D`c/]ќ m[rlpۨ`8 Psx0 xO8tl 9[0M=kq><Ϛvi)og40.#@zIG|S)qo )> D/]BdB0^ גD1FYK1zK20eɱJIKM_1qWweK :C'Ɖ"V?[҃qb$c+-dTC^(P 4DTሚ)GKtDqx-/56wYMuXg׹poh@]4D( s{+X/-- W:AȻJ]f"GeK5T sF͝4 <ځr5%&%Rc1r0p*8N$~5;Zy\BG0tPWNS*y|MQ8V9wxrMĨ ?yDy Cy3w+ x)XzUWFX:Lɢ'&ԂΧr8@6!̀DE pyoB}c羇(wcQw){xx]q1Z8:7#$8SM84's2\/}. sv+:˒,\vכ[~a"|?| }RåȴVeޔxX5؞/NWhjCȇ^fjKÈRfЅ=fh&NDsw@SEe-$$B^~^#<*:DŽ{c}.V,lYFAN՟ T̯)flslv8Mf,Y)fZfA -!SIē2swheԸytZS_D69^S:_k>cq whZu2$'Hj а$AinsD_/u4F@<6Y})*/Qʽ,[址Aovjg*kWg=.(v^L'tҘDE,ij ]}4ѸUkWw@hōɫūXcoՔ-EJ|2dH3YP@DߑeAV:  -r<9?Y<(j*(|{/{2ł\6Zҁ;nԡS + y^,pAXkdT^:78]D cP%zM `s)b}K 8QHv[ m84i6}o} >CUʄ( ~ cn21&QS Ϸl}vH'ax! }'3ʚ[HƩ;'x. j64 q<,zxp.6 Rk{FRoLM bAeU0GK95 \ދ5BGG6u'IҔgƉD j 4Gewi=]-nW\Lcz7 !SֿPtO4c OPg֍!A>cqS}2J!&#|Tku |+s ](O4!W Y3I7@AR"p *443VDpu&kT%KB,€8hV7sb5u5~*\ՌTP6QN|yGkL[%W*Kit`7f}yI \-T(Lt tB8%#wح]}{ ܺ&̿NrB.d2^OG+'{(I㐆RW` rXL2&aX #jg345өAOߢ\kP{eۺZRn7 vet!q$B6"ϛ\J, B*NiC坙V6D"]njO$J'ps찧bP߭,kzFj@r" ,L5n;\dC~!k N32 SbGwI$ښ>PnZ55-JsݱŷC!qk=JiX.UoFCE߅ь|twa*{VRlYZ/20xJUR oQ`te.bҸ+~8شSʧLF(c2䋙8v*vJvv5;?^].QWu}1=SܴeB#5Ҥ$ /Vσ_jBVrQ,An`[#} 1OBdPLǷP x<^̤ ˉ9M\fɟgE7BC}0IT܆хY_ *oJ |ϺWEiDl$%l/Ty^S _Yc)e_D6qjդ`L|dwRiYʻ0ՉX"E]K6~fWٴKC4΃A1!DaQιTm}TNAї؂[t9p$bXIo ۲-öpL/Z$[2;E1#h//]Q|l[3CTsِOnz]t)YL*5an`&*3Ȯ0дŔT[;9< 7C4ĕ}|:M4WHF"ɲAAhQx_^t#DᖘޑXN36uqXpdC-?(DAkjUNG?L'< P[Vn '<73uO 5Wӥh\ѨYψ~.!33n.b'hh\v % tF[mrrߡ[@?sr$AnqA byD9}{i#MҐO (QԒ:+É5o~(z}UM%g'9(ь`#_Ol_+icVЬb6jD':C+SrVCyvk8A?h=2fʴ{dFb0+髥oA ?qd@3^e1p~>A{\9E% SkbaDND^t,{orشW;x ӻJ٬k5 5U;Į! hbЏvj%}W+(T\,!ݵ&q`X*0ļ)5vFy:TMmټL=}٦9Hgc~{f(ОgWA$IB)rƘr#|gԆ zYC֑GO|36frQ%VGΨM# "ps*I.J.މ.$ rpūt̋g魛rCKn;A<Ԥ-3N.(l <q7"II(8G@5fn@;n7Ԡ:_1/l3=Δ\ƠVLtU 0q\.9ЙOL| t͎U 5. p7L'wrgFx_[xn0ϵrhuy"ح{-립ͽ8&گŦ@prn^Ņ'}[['*nQ*wv Ȟ]ZkvTci 48=TJ4,+}Dc YIP㩡4Rvw z$Ggѝڻ[U9*,=Hc.C4Ea\Yi<@ek1hzB~UN3 Cs18~ti7 : }$лy2NjjOIƲJ1hkʆŘMqqdq1y@`wj_Xip9 qE2ypTN3;ZǡȆӓ* &3$B؟&(cj׬rT(n#ek$8nM WTPinjukV|GdI2h/f  Ӝ&y IՕ7 Hhm.^7<۟1\]MS#jOHz8rbc ,sJls\2f4b`@SXuZ[YE>|<Ѽ"nNR-GnH{)Zٹ4(929Ʀα\/pzL5aHKkA]P}1`ΑQ,Oh`[`c߂@D[%vmUmӔf$~˩nf!]p^-34(A{0|򓾤CDI5s/˶p_EQ^upϹ(#7GIHʏmB2a bq>ϣkѩ2sОeb09US?lxLaFpQ裗/% |sW`wΡ#g) Qfvb}qm9%NMʕCHpĨ37T[ָ:#\B&H퇻br/pBN7 ݷM*ݽuۨqڛ%MH繯ǩvԃ'`xoaZG;^߲H4=v#PU,@pK ܌T +(t?{5327#6iFY9_I (voy<:Yib ;I&R֩'mGT$׊ܹc+>fUĨwj,$%H[]3'h/g7.ylOLalkMbkۇ dSAT R| M?\F@9#j[bC 'q8K P_9DfnOo|>9Z9Nfo`#VE}EY\>aŚfҥKqh$g+f d0}RHo3K ѝ7wGS*g]$rkRrl;2FSʩih(rfEp5Ai7Puwȡ9nL>< d- AQ0 1]v4a$I-9ϽAlV]9_ų k1B[Z2je,qf2T\aʞ*?yeQ.{QF)i.~mMbKX2Ü߲K13SҢٷn2C%tu2ENbz}SY{MZs& #[hαlyKAM_^})#wa߁}z,@| vY,i2 c0U Z"ˢlUwX~%Va< $l!$<a Cd;k~巚U]75>]f2(Tp5dSz r^Je\K+4Q*JgvY, fq-O8v4^!KRTtivUgӍgwk.bC~D _0&y탮<@bvP ue*Uk6sQ`mG!CMMux{P iG¥«M.**&Po/~/G2%)jm|( Us*Z+< r2Y`l=u♉8}y]XžښaԈ2M\E]X瘘uHeeخHO(\'H# /qwwԙ"wGKw@ڵ!*N&na87wdX7dQ}G|*Np&g"#BmƓBHX_ƾVſT:Fv?4O) 2qJ̓Ć##H*l/ >,: Pt팊)ⲙC1^N+Ϸw0Sʆ~p\bQkji힩o{!wy睅ٷ!gy^PDAy(! IC$Gy]CӥvuEGoí^؞Q裼l΃>oW> Tѓ4h7Y SlwEޞE SoEh~+hW 4m4)eNφf)!M=]Y~N* m![v_3??M b]cF3  X:AIz7w'H5EQ[em6t:ۻ/۪n#B5oD:m9fQY"a: ֥VL/Mݧ;O^u;֠Ki]]4cl# K<7Hx/ Сds+ϙB[fV3UKc7Us@Gi[2y% c4l)xm<36r~'oApL1UB)]𔩔?1,4QV4CRaL8Eԙ%eGQ)J9/%{H 1sw]숷v<ќ`>SILpj+mz "HLQ( 67tstE}K$(6V.NTJ[Kw9sryձm^=^qt0vMlǓQ `Vۡqv_?VQXA'+ }X'@ h&2JۂEHhKmm 'ڦ]نÚyw5OifhLXv',:pV[:h5P/yNbkԌRb|M:JА8@)PGL0CզTz/q>OEئxe[ -{1;ˉk&nt)gm!ⶮy9Di@yһ*|[y)O-0 j.uj׉i=@}nO絘Vbd؍FU\ZeXLsh" 0lL<8p(3_EcW&H)Z&=Cg Jl_UfsQr<> &N%zO(V6Lx*$\AaqhMm+79%9ejzӅ5RsRj&IK.]}f~qdKsWjѻ&gA5sCJ3,C/no:`bPQ;Q6-!@I#+kb)cv5bI/1%Q׮`E(!<9)ցǹ_뚨Oe$MZ+];a(鿴6Iyb,+δ4* 6J(>-(cDg[ӴϣX_Ww*%ҌwuCM[z4D`3ʈhʱyEp MWg-j=ۢtA[Rd9S)U-qDJY5W0i'‹dU* 图HKܴguil?mGwQ KMd\>;f>zJHxjtD $pn0מ-y!h3bFRS q. ]ç)n.kWv IjwmYUc q 0UH^ph/>7bw%YLj[V<ޙ@W$jJ?0J LD~rWTTol sx~W4"〿BPi ^iGk=8L *AX{?t}lK88; $ov8N4sГ,c"!lk!{dvw H 薕5q_LEUt!c(qwM?-݃H__ &`Q#dֈς4ÝmMBQNnӿ9 dtR+.X=$&q8{*12v W`7d&1t5`̈mnm5Iݒqto&{PH|ڨtHD$Ej䳚~y u2%MIL*l{[V*QԳ_*ҙC`97ΜaQi-➬D\cOIu)[zhUR[7c?@8FՍ!K!_xcKw~ɪիOŌ"FU$߃BϑMwĨS9ey4yOV\PLz[Va1 ,b@7×vAGNR%PdOko ,@"r K7u ЯC@8 e7[JS/bzw"t>ޝr*6xK{)8`ZH/Ng&`eH7N'Ks999 0*CjϕJ//ⓑMQ|v7mE9o{!+ fo]p_ &¹Zm~µcziU ͥ[n}y ž^3}8t B+4l{H_Ddݞbȭ <p R]@`rC87%/ff$0Ĵ#,>:\&bOoMz_FiktRX28S@n_=U Շ!Tu$d Q2j€BKwH%TlӺ|+a!Wmė ISǐRT 2!b?oԆRJ>o9J]ުEѷK#$F# Ss_ՕFܫR()kW?ve8z}rkbݱ`ǷUҝKS lFfȶsT&%ST߼wض}>~}P&CfqMT 0y|sj\l2?5<],Cw6/m[cP`UkY ȏ Uu E"Z`MWbٹQ)黅~aXƼKbPYSǓrbDC8kߏ?*Tw1\XfGE:$6)I I_aaf8 wIy'N. -R L5nj:U*\==ǯQ\ H< r}1:?66[✾s@*L8A2N_/a<}S'O ۿ ahACp\-(w>)Ԅ4]ӥ9# P }DVWċUBâZqB DߣJX^XEliQ$OSy(Fy8_:nEiԃ0ekC :KMGkb GBAuD~fP-s9 U#8`VEHݽX#= խ2ʥw.<,9̟uލe INf0T6sOO.Am MA^NTx0~ 5J4|1ސYb(^_gtL%:XT+$bɶVۺcB=(&5IV$Pu0'C"!MTc{(J0{Vqk g67 EqF--eV>[NTTnY:A֚HPe((*C;Nɫ*0zOQ"J=9ہn/MwU'cnR'i>͇J5K ewH916:rŌqumiĞۃBƶ)[dULuPa15 d.SɊ9eiIC ^_fơ!0b-Bx-Hmk 〘8>0k$qV1EtƠ^dwcq܉G̅b2ZmlE `$@֭|ϖe7e}&jk˒Hxxlj:C DE3(fҮb\tO M"%0|SLMUz5VbSdqFX*xE#y.O~b37|8/"ɻ!8p<$6c&WVB.0>qvLZûB"&h:y[>^w@+'#KO*k7OxƸ{,\FsOW{pcH%a$Dtq{Ŏle; >6O塽8`Y'ˤrA<:L0*|5*V .&At :iƓ?wڴtI+#{ww^V.DZ'` 6 Q"pˊT]]}:³E6Jࡏ&1u'']S(j=qYKiӡ/80XYb[⡚j_=Fd>8TnK8BvHh3B9'ܡ?9וbU2C7LiIU^f{zC[z:Dc$+٨/o=̍6_d;g9fm%ӋstVlg|:~tG~2qg?Ҟܗ;7㘥 Q#P~$wxvɸ >~5r>5cvKOpmY.>O7Sx"+CX=TY67Cgt'tI#< G>oڅ%(u\yl4j|68ЗFX@iBl*m؆5AWOÄ[(uI#+!=$Cl,2eX0jwOPflTEz9x/]n2QF$\^x6̰}IٝΛaj.umbNt&h[kg(z*ky*RG@~èͷo7gl7ƕM?󍄀K.2mZcKa~q>Λs8EҘMeMr%rS ݖ3AQ!jH (9e (ejӜK=]精" *>uU{W{'dFR}[6cXvlUXVM`xFS^+S2.qG]f'ZܚilMd \dJJ,I VnqREMA}IvbXa%kk;[rKȡA~# ΣS:* ^"P߄^P㯮|(5iL7 ܊lc\P}eѷ˹qviLtƶ1/mYS)CAq5ӕ6tJC*£L,d# ꮽ@g[4#{{pwJ2hw7KpjӇ+<itxP{U7t]$eʍ !ˢFeS1]*=J˒,\l4O [@ &EdVO T8 ˛L&|_C?RPҴ_AM6staޙš:`C8yT!$s!84~}o'!8\eq*LK? =_LY(6pV߭egwlFDmYO>"E1n{iO>45x#EjծsQ-fL|>4ˢpoľ21.%6/6[8F| -E\m<53) V]6K /\,Bԅ1C<-λuE2lna JlaUc >gTc$jS#jx'CLm=NXZY,GE/`&j:?OCIq.ʣ i_?fw 1_krDOuKeJDˢ, .z\ T!׹ vtb׃UbO*Irjbz쉑 ^FZ@2aGP vbX9ϼ"+]z<1lh4K#*G.(mmyߗ9_ym926Ge)W"I:'\)ˬ"RT9Cl`Sňgz\:}sѫ@ȕrzFbqp7+[#9viu6pMԕl.`o]mSF{YB1m Bmȷ&`T95~L'r mQ :yK:M.(!ȟC=(G[qB߃g>ς8@'.ypc6zrS!,I<mV>N _Ĵ(0 ye-(~+*ςp}ɚ4 imQ|C)+n[vA\-܀wUٲ'I+FpoË^hE>Ezj7!U,81^ =7'Q=fȀO0j"ϛc_(Ҽ Iz;k\lL4+:p(4)qyGKa>"*V>\~- ormX=S/ᩖ%0,79!,?"S3^z,QK ^+ }K}B9ahKAϮ[$Ul+N͑NԔrXJ_$Y8ey>5d?ci#St,[jbswbsBRުDE;N0 Bhi3:F+HiWO0$O9"jlQ{r'UZZJ|] K`Ÿb|I"|WSԭ_rCpT;(A+W5 MpVӊ\RO_2p0\J:M9ey=!r6{T9/WԌNye%X?ˈmoY< !-EJ׵DwTU;$t醚>^LTbyMpIl,\DlDz PҾ#E:? @DmbV!#> tdW\vƱ]duʉPgg aF9 I"'V32Ӿy۽06u;+VSxW;{|[{0 /Xq#j2,qE{wU'L8ڗUdQ ȃ%r͜_?ටo;j%KcMCi\meIM3>}gT[ k %70F؂‰ qAIG\SA*Kx}DBD2tfk:Vzԓo9ץF}h[a\D Q'. y" !XKk{KnC(E06Vx<) DSK$f:S)\F^7O g/"guĒ^N}|A9idoيJc`X.(㋩FI1+{=ښ̵_; @}0@7{G]U#wNu..je~a,l DНDt*ԕb@z4q:LE~65}V[Bs1\>_`XjfyFfv(nUjGM27'}%"bsи(rw`FYlA?*6)ے;`2 LhIHY&@¹>CPEUqss<ܤXLe%SY'}Pk42NsYl=wX$z 9kA)*{sOY2cBZlwxPUޞNS8*N\iu׵?Ո}.!=&AR'0's bm0ṘNGYE^:DK1^u&YV ҆xx2_254DgwD9aWeZM~o+!6fOk?im!mGGEw7ݙ޴NED9 Ȥ@Fa@`Qpٌ2Nئtl۲ݩYm9Lz*C#{wkO5T)?/ͬZj6tU2@B/{w}2Y95I295dFRs g YJ[`M ȴʋQ1.>R!fV[g:$=嫊PiQm\?+CA{Q{f|#`^e3( ҷ*st6&?gcqHL$=x,i1LT^}c;S4:֮OZ;R2NdgeQxˏJW.Lh'}oEŶi=v,-[ev/”O!mYc)eju}1h8fq\1A&2#.OghDoXDuQyY҉lT^ȑM1sQw6i NFyn%wSW1ڛ눖o: F},mt{s& 3Xj*#=*'+`xɊ4aչ|Om!ǾmeЊށ Rөmdӗ0jsQI/, I㞧7zoZ^|7/~lSjXA;S lsꄔi ydyx"4AhZ\1|$H#It'~i8é׵~eHDϖ=c$FE]7V0A㤡⠱/Mt]M9٦۾fGDWMH-q2Y]}:{Lly%銝#ҦF-+D^*?/E+[VB3̡SQ͔emGo'ضt`=1V f.)Ĉ60[MuNUoc+WrVKo<|֌_`{k@&<)2n3-4\WE6P_qS]ˣB-Em:R4_l5ww fݱ} ܂;= *'z~/o(t<f=8$=^* hWkQ$ 9֯(\!rYCZ0<DV@?L[>`;­N2qOU;*׊N=A[?Vxзa3'=F{ l9/5 ž,AƾrJCRӱ`6>U_‹8jלּmNd fD:g@RJXKGMN, 9.|@Ģq{H88>>hL#v 5ce,e^JuӬB}Oo2CntS\XeVM5,B,\ 8C/FdLOw-]2d4$lq3cxxNsgٓmT|}$˨:w'a¯ZR1qz:f`SUAU6S.mj:Х*J'u'D}o(covPw#Hzd6&qy^@wlo&P^ش j4/":C*'}-lڢ6+o @ب4.kY,%@vYNX~Cfk WC5E,YM%2 _MDg=+6㹦gk=/WHnh[>k+1:{/h1TĐۗJEbp5/l tQr mÝYh[Ѥ]Cؒ3E;scw)[4MS۔Wb[TL+v>.{8jtv^'a)7DvaZkmn3[e&%NW8 ^afB/ڲ+%ڶ݇m$Fyvi/Kl$TmN+*ݦӁ^SSNPt& /4f4xB/fwD}y;fu WeQI<_Y<C" wRԢ) gw;#'S38A١nA#abq*qT]׾<q0L k2)1bGS[JNPSF_ғi 1S:G̒"^*@)qfN yRv,g*ߟ}~A̡[l^ )Q3Q8ZHm%c=*>_,rqk :_*Zaz!>_d dEʛiKUv1T'i0g~/t) )}|(+N&B5"}d[7 DjR c>"kv-X}j}:.ks/i9Ks:MGAd|$=!ߠXW5S2䏡A< pױ* v>s׹8&sl?qb#.B]w?YnX>]]691| V8nK4*z|[L `a^Њ:OrC||B_kMb)^Cr,3/oDEhܴiQiW1Rv8y[~-}I2w,\A?3ěha>|eMrw8x{ nKc OD3! DOj+_Y\͞`r!ߪ8#]>_c:8BQ ;Mi3y}Ff{bԠ~' $U rteE`rd":jDu W^IΟ=ꈈSIat,WE {\21),myj|Bg`AW:SUW#L!0iw8kKoڧB9 m?q8k{,LpoY($Q7 ^K \.sSyN)lꡛ5=t^lP͕׾RWhy"Bg//OrLp$*7C4p Aꍳ\:8 (8 8# ׳FOy# gepMe~ts#}^cۻ_?HrMM9b kI *!qx/ߎnFìS2Kl[)3Јp{^d QnջQBYy:ӉlU]Hɝ ::1 Qg7F" COGfYu8ZݒsO7Kˡpzp_&bLN dE3:_KNmfyp}tVdņ=#3HI+ V!k!wN̶BF[>f(<8^i5<۟`.{Ʊ^%Ba:o/8&>u5htkR d RMQ&U;."tjDo H\*Pw)6mfS.l{>߿#Gflevh=-4Uٟ,㥻p< 0۹QWnM -[ts4%,HQɞ9h0bM\ExQ 0H_%[_PڲL%|d.#_*AO % ^Ol2 yLБeJ#hSai +ayxRPy*02 {~ʽ ծӥ!eoъ݉Ť@1UOmm^C6cd@{pm0Jg~"G[d\ۣX<[+E'y XL:B#UpZ[=;(f7y_qBI_ s9B!N籛A6"C.8} dcHYejj,NNwʹz c5(`.i|'_A!:y} 6թJ}P<΁H84~Z^IH`bs&SE5Pv`k/3zj M1>5}5:haRߒ&=/N_kèы厭+DMX$JrݾI͢WE083Ym>~l+x Vl /zDƉ!I5A3)&@7g8xpFS|S#F*lG00}>#9 Nk R&I%pk[0MgbrAk<P4bLC%՞kd(àk2(SBVOy 8kgKp:kK4@~Aum[RlFAfys<= `lokRe Ulj Emߜ7 * ?XĊ.#Hs 6N19o%-"1Oåׂkf?NaثW`` wib-rVAa.!}vBX=tb o'fu' Be \Xl7TYnL_5*$0 z\}4c!Ŷ↓*ܱ]DŽr}>SYjDTPi UnGN>ZW(Ipluh"?I8a.-'Eh7#ԜL6&G:n?￾F{pyu١@4}`1-&޶*xf p&a?q툳zz)Oi#8\FFH,qwm+~'Ki*gA &) o kf,j%V)@vX6XF zI>zU] XoFaغ"?45 WTÌZ{` OeP#!O*%#)x\.!չOYݚHf`]lԳ\ 3@M@C~j,O~Lw)CXS0(fde"%CJKFVEf=hV=6Wekۦ@N)u\>8HޓjBԱ[!;|?w|v8+y}A,uGf IP SFwjcVrR{س(aCmaUfvziWa^S8'W^d"T.8q˾,D?^K㐜Wp~L(%um0q;4PaZ9} ~jw&zlvR[Q= 6HLѣE|E!3`~MG722bMid`1a{ Jn' L1t+~qiP}ȿ9S|^($u&$FgZhu%l_~9uIޔ|nNqH_v2|Pz)iyXնlgut~Yl OxW>UxQ*GKnNbںĜF}IN`WNFWFl ]3zbbTx;]'q>e&OLIk71-hO2yB.%m'C(sYǘNGwkƻxك_<>:EڎR۩0ֶk$)wVvmDsCD7ttHw}؇!*TKF5E'7h){l?fG|IX`zǓz鹋/".VQkV3TYҒʮk[O;єBݜ (HXJIH3IGy5GGd(M>ٜ)bj+\p^'#:.GI,je"bbHUY ;U+yD2Y<a$ׁ|*#z&.YĂGmyb=m_ǫ_/~ҍ}0qDsxde԰t wGM}Ը>"vQw~!@F ;D0GwmsڋSpq#7D:l:Ʊ[ HG씥qr <^{ 4tϒlЏrEhMUb6g ?.17yPQw؉vZc[h QtSS%Az:׎M'o=bRWȗ[M [+c}H '0^:e[(Rk^[L\ 搚rEZ [ؗ\[ajU+r<7` aCUH}kj2xETSatm{.}Nn!yMpP{g?6Zs$r/Fo_ӪMHߔ$ty9~ ᢮hG~ƮTF~>`P5jŽmɇN &EV/[j<[t[i?%v#E tIS3+qqK ]*uT'C =GR/m& *nn@a6eWCKaJUrB>!wl>cs{{?5{m6nkS~YB?(kϗ<ap,Hl;H ]+yz+mv.9*!.&y*yO>Q ڣyFF_=Wksc+gH{1!ruoCq pNFIJS1 G;mmqVuM85[zp:,&MWNL{jliqvoDkT0:N~$m_K-L yk]<i=iP~UzY{N ݹv8އc*Tk@V0)[OaQw@P߁\Mk6[nt/+,ߜׂAm(R҃ mwOYD ]eckf[ID>Oe>wy.OOET3xEھSf.Yc.ti|zNw'e?jة¥aWLl=ViSz5?pHn'ŃQ<9VrϢMRc@ӡtj\j=Nb]-.p]/O޼,{>򧦝P u{iSQ܅]{S7Тt/Fjo*g$䢖xGWñ!O\lC$tXYF4QC}N)DH# ssygc[Hdߓmi͋Z?oنYyl5?W3+M^"M_uꚙ{ip^Xc$T۩띣$'~8Ksq.cVy~"6{iaꇗ@YPF$ǨQpK)%wC[:Cg|*-(`ֵJcKgX bh|cSbUEa榽UJR/ srq yѝFL|^l"j2Mʱ8*}+=c+e 難 VjntIvF8 N?oEy`EECdlmIF1`c۝n-/3SHb;5M|6S:&ND[hh|U4߼ble)ܪrFB:*ϝp/RWQV]]n.]/ϔlrFm27^Kr Bu6Ҷhsp06*uV_Djw8p2bp/MYWnsM;#%LE[F4g_V1 D=W* #Q f8ksBa9;22@WZN*l~@sWM#(yޙE/:#/w`.7Hlˎࣘ(lb(lK; l!:߼m:BT5G{Շ$D,Iԕ\S_K\ٓvpEZ_ߨlkBNë"5eEvq`x '}sBy E}E}ϘVE6OA}F~J [cVW8g,g'(Y:rf\ҟY.CZ⡐D7\1wUjkģ<߫<_fM8}4.,‡E&ǼbCi&ʻ=ߴvi!=#8rEhH* M-$" Zc?guϒ zИsb=b?Q'%w?֒rDN(nf*x!4S<=|m+̻=H+]H4v3tS ~L˃ .7թޒ3gQD^be){4 41$,P xm,{z!jڜ:}ťgy+EC^Pw$o5 F RTٍU+W$z|]#㩚{ET, Kڠ 5LWo5s>+rvHpcf%9|7)Cѫ[sIkmEbvk4[k_/[|a W!Vl>سɘr@#Px܃ ,2Ł=!ti.P\(=M9F*.$S>P{Dy9A#d|u?Eu);0i,."؄E¦u&%D>9tZ]5=IkK? ؙH\aؚ\[%Z~`H N HT?o-e(?@gڋy6} FZ qWcrtJ:kYt)ֽ8m6̷RY?< 'jrHMjkUYTSG- NHMJ*Qj~'U\DrE)yկ$T3j uC/s@ 8`A̒Zpv8^<ÜW(EC@T unT#]^k.2 ~<?SH*B|[dEE.Ǧ5#,&-IYa3.rY4$Zfp1s<a+i^HL5[w1%p{[=: |u=uIRFi}vҨ`NgļqEю3m_d;)lр(ԥhRJqS8#SJB+  C#?,1U _|D;R;tϕZ7EU~D?:ܺ//5X@yXK?{SG]lgުbkk~[uil#e.s1-bjC|KEYU)#C/(W qǴRF[~-Fe86=psp9c*vD z],iY{'F. _"Q(k0Ct@T4/JZ6(1:Wʕ4: a 8(~i92ҼG.;gi_D,éC'>wɾm U#ջTgTmq>9/ls*yŠ@#Nfp0)<\}8:7ԗ[}# _|)i`{Wbw ;/8ن2 fSr}>Nv$X\W5EADB"hAtU$1!*ڝP9+ѫpҴi<׾ʋEI_lpp+i|ؤ͡ip龫cbo3<j,k7?LN+"Nrx>HZ*\ ]ȠY>֗gD:wc}E NuL1mN~9s_ie \J%*iz;N-dRE'=7"|~WO,[2 KCh {[$J8W҇@DI3On-7Mx*IMIKZʳU `-%A~]W8qUkmD9dx4B& nu"v=mB%{")//pΦo1$)1wQVEnw O"!:cqZ-娣Q_+|?un4pD~/oɋa2lFZy 9z@Ȧ j!tin0_Mh?Mdf1{[.`Sׯ^tab?zc#A`'R!ч;_ND*veAï|Gt틇}bל4=оOvγW|NJX{$ᐶcr1c ;׵yrsvb͋anm2PZd\\RKΕ|:ޞMqBvkr/%eldt>x3нf{y2ԝzj,`vn/+ Z XDR(`<Ql"S}R RdAήfXDd<2C?$KTطc:?Ou7S>"Aok@X` ]HuCַw{i!sh_;DUI{)3o* `ꚅT/s}:jQ8>$pXgHS?\?vN;oBiobase/inst/unitTests/VersionedClass_data/devel/container.Rda0000644000175200017520000000022214516003524025541 0ustar00biocbuildbiocbuild r0b```b`b@& `d`Ҝy%yE ̒h@B P$ARJL0H-?)+5M1[N~rvj UnkrNbq1yȆ! T4ٝ2A`w(Biobase/inst/unitTests/VersionedClass_data/devel/eset.rda0000644000175200017520000017137114516003524024575 0ustar00biocbuildbiocbuildlTT6]؂ *) Hwfa%VLlżk^}}ֽgy߽gwOgUר***mUڶߎkڨ"|VVҦSrEEiEY#~;_;^nT^_o!OV..M(K'ideQW^ʼTOeRxB}mn@agEϋ;+SF(3ح[,E`{tGanRj̠)*]C;[e9.i(ʮ뱿FS%>/4tNs}FR}[p֟[Z ɛ7#wu_Ew_GґWZ"JYE x??UN*4o)7"Y%7+(=Ԙ|S}I[J|rxgshڇS'R H1_w8}5cjJ#Z}:><-nys3.oy|1EѺqF+iuM_.gs?wR{y|ٝ&7k҄]WQߺRr~{HD+쮯sx}RRtfVcE>f,U_#$Yk3}MhUtmo4/VLH#_.DZL{D/ 8/,KWʯL0YzoD;NGGR3_5L!>GoH _Dѫ>tߖGy)P.l*Q45_<3Vs?E=6_?M -,ox8PQ2s7`܁ 8B.Ea ǛIG2_1޺:er?L#ک{LkUfٵ R%U˫ "|̯~rSǧQo OSHc-ۻk7X6EcWA$:Tׅj|?deē8ki[O}d}CP;Q.ړߨB<ŪwCfmKHXv%N}Z/q>7hKNPvc9߅7oG w-su\ݼh "81A*WLQ5 ? Iڝߠdb+khѿ4KyHwf\ v>G6G33ɸsTRa,6u6xInfϦ[2D R"Dɖ=!{>]@I*r '\K2Z=||PSWyS>eEZ ꊲ]:8md =yTלߠQ4N_ec߬ޕb?C6O60Ypwϩ"3vgGJa}Xxn !XN vIny<|_nI  ;-95ߣ^+m:nTknǯkRGW (%4)M'ㅍf3yWluqLp# Ŷ-<3D2T|#\~H@'yf8 M/~ ?d 9Ի@}>vieV05a*TXASo˧a;8k*H{AO^yB uNl摐#F~'ɫ?q7VQDWG\?@,@~Xm ^5y }(,>WrqQ>O~nN_Xv>kK)6J|Rc".U4BQG{ńzటY|MY{ǰ'I3'<]Ge.9/{$ȵR^6׍ҷ"Β)o =!"nþGv}H*?M_I]LsKoe}DȮ'xCL$jLxgFN-.oNmd[ykg)Z aYR)创cmmK=B݄#Zѓ (x- Ti`hT_^17%O0@2 _8y7X D/>JbR w(:9LD܊z{{0[X1x>٬đ>Rv/=($9P\,Rlqnz}3'MEt{m'| V~׾YXcw2#.#'R.X '2[:zO2X_0:Our7J~OVڙy2' .Ïc7|*7 \a[4m/xs'#;2|m9p3 ֥4pS6@γFpd<;ߧ~)xrw1nШFG67)Y -l60Sz7w~"iXR/1O\úTq9; v=gP]sH@)W]$;ry3pݚCK(.8Cxk v~{ng"E+`'wq JC/q@?ՈnTY΢vµyݠW?yI1=^oK$ߧy{FR9t@g'.*_z~,*՗Rމ,3F |Y^uߛW _A;Fzm|l}ґzO8jQIH7 @Jˀ[XxM |?"x/?? 9=O"; y/fnOݿL8=@:I_ ,E ܌>2/ )R=O6O!/k( a.`Gz!'VL޻b~1ܺ}T a`UɇW-BzpFA9S-V a/Ӭ>&~ŕ5ï-F ۣE.EKmCnRvu> [-$)dB^`LKe1&rÆT~j >O΃xӑwG(2чMiͩ&{pgFi鸞{י+WP*9(>_̖4' |q Ppp6t xέLD >!Pz: |eٓB"7ekVyq!GK8%<8K~]S.{p)'mfytnp-4yJ=C˿SWXߦ7\ Hy:K1ᗣZ/>wRN?kmo8.Ӽ\aȳ|~!7o/ ?)^S\ɯoR_z%6WpLOYL L3ՀYgۆI# 8?<O3O29fnS{/ 5aahg6 ˠv_(ټD~]۞zod!-D[n<9 >NjJ yͥuSQvHۥ;h%qcEeVxGNB пhhd!!0.jOSMO5ˋ'x 24f,пHj"!'=C  Dbv{Jc@W([Qc*tu͓{MaG65Ò@wISȳob"+|Bt,(J3Bɣ۠?LkMG<͂_Tyx7}ը+ڈC ds Ù*t@7tbw(u؏JoӹOsၘgKiJgE~ϩnwt22ôA^]>AchC)) ~SxE>df *8ԏv|'urcOO#+uS[b>#GP |<0EzX zXZ@c򿡓멥Z `z>xygC܇o8._G|8ۃ9F?΄0 ]pLʞ)d$i4(ApdʰG~|$:뚾z-EhZ~VK%CK`9sJ'y( y38xsrm? A^U^_ %_! y呺?Zߘjo9/y(F^OZ'l'jjeAǽ9$ND`u YGA,Ot-HNNo_ g`5` ;;6Ֆ9/RD/u${ن{彤Hwd(8yoi٠:~U Yr.l SAtWpomY;?'2pWz u?l)rW2C`E_ע.GowGi7TPHqiF,쿰[G$2|1%F%Q/IAΓ6n'NnK$KuqWGǀ+7KLQg r`_ }ހF-0ݫ 9TAwmJ)eFVb$Sg.#=vl;rn#n%`MJꚒA"..P(-_ʮ W"eD 6!>dz-zEf_H!47?F2+tV>p:?t*? xIBzZ@>r1.$RWng4MQгB#_{񀏬d ^h4DZ`|2lp3hŹC0RwtyWW)teWg(q3a(5qzOP,t_&m1 rT0ZX [tVqf=tݖMfGZF5 l_>+=`C~gGYY«]QcKO*ɢHe! ^[r ^ߧN!uNNxJ~Qҟ =@\(rĎ_fS=p- Q WĊ+ñwe G|Bsq!4BeMZ]Ɇi}PO Ĕt8nXE?c : ` Q'H|o71mYj`b;pk=Ё)s\ aagZUB'QtOZXEpǯ3D~5 `8ŮM *KE)$UpUWM r=W(n/_d2"30H0XR^,w&v > ֦Xg6./N+Q8N?^&ijMثJs]Z?x!+kPw|> R( Y/$nnXհӑ™>?BG0xW8]OltuLn!-!/:&Y5rCVL~d'T]. JIxꉩH 5.CZ]:@=#+,7 t̙b|Q*Z-Woɻ<+}NTf@=/rbrOD\Դ)u%M)oxS|8XMoA`w"_w h |kgOKF# 9'RqOLJWOR9o4#9z`@!ϝ, !e'PDVZ|G ;< }:jOĵ SSGb5Yciې'W>r_ַ}zѧaW1 g-wkBߡnJEj~h_WSWkܰ73a9xufE~>v",oCEBJil((3пCG .O$ĝRm2IP[n!Ql"t~l$lPÞbPۓxp"E/%uӆ_b”١_-9rV7al"ޓ:@V\DS]#8|E Mɩ/ib>#, %CgHEc7V7PED٫HJr'ݰ㈗ٝ@A (N'.yKm28~~~B Bx]LO_UwI7Cwlؗ5#;zRT.*noq Y;ur.А"tࣙKE^Rx?B>P!fQmw! ^;߬h*LE'AV'5/uIWo7}"#_\vhYtk0GYRͱ`kzYV7>c C1^"EsytCR:xwJ$v@ #^>C:D-^NG AvS'~#>չL>BNj߈x֌'pjڗn/pH+c%SM>Ct7zt`Us@%aFΕaї GfG2dG`{=s`aB3Y.kzA{q+[-c>j1h}y@4kYi ߏ|Zd LkPHC?Y;m7}x< |5Uza;cZ!ybLш+t֛z`oCSSD!pm#ZuG:2g4jw.b3}?n|A<$y0b8yyװn~w T[漤Qd΁G?<qkػ˨ߤ}G< 3B?TYPi(~N~q7p! n8o\{A0.k ܗeuY==Ḡ̢1Tytψ!b$Y5d9y@AmKg1VcU4v {wq|LtoW坨wO:_X7});F>ƾy95~C34~Gg#i{VQlyUX/Xo-Q7+\} h]9N]9@o.o`\k=li8>YQNĽU6-'񖩂|ߎFj#Tqh!fyB|>Y!'%y8 }_cXF6-)}1#|MžPNO@? |4p:jcLH5+ֆgjo.DU⼐ ## G`]'XrlҖnbz /y88 ZX},?NԹ8Y>~ E)SCLi%WO\'72g#?*+ۡGD[p1p/왐Srq_8ہ~зa=:>X4SC_Å9רH8c- aR̾]Chc%cx_:BVvǚmd(llqn&d[/NKAgoWYdSA5~/ WĹs2 $c-elɧ8Ǵy(g #(x:!bzE=/#Oc(dq$F_$#W.6NP%av軣;E^O')if[C9B7H0݈xFwO*?-څ8n-I=+:ryy sf(e$x}E{#BC:N 4E4z:xi蚹<7N3bCkF#?uTEì ላaC\9tŔXvn qWzL[ :(ܠģGݞ\BՁsɨGu\:~D^]3b=':|F(ynKm {kYUf})mY&>b0xx?_};9/$=ryNڇc6֣l:J"oq߹>U/?ͦx#b?g%CuY]^EĈ(Ȑ?zt R/$JNC:#H7Χ8F\9,8lT )8:OGd w,_/EΣq_qe ױ7Y&a+Pe1M&a"'l9ÄU D'gL\0Q 9E8gaP v3Tl#LYk*qk; ;E'eN:b 9] euARԁG׍KɿӅá#t/E{7w #Scx\B' C<=&-Z!֓8͗ݚ>P ~b-vzK َvJvoA]|~/_YA=ݞiccFڗ.O)G;Ӈ5g"k<{SDpi Ij/7xsܕmtC,u4}C}$uJ'>.jY8IŸt1oMB+UaGob=* Kg` a>A,Q׆n&]8¶}ϓ"O\>H+)(uvAB]lPJ1es9's Aug_( /µ/ħ?\sZE'Fye-efƶ%#ÈmNK ȫO ?Jsvu%W` fc{cLZXW# a?=V2[ s/?QS抅4"W柑F__ 3".qLqTͬu;J ^e/]aG7ݰ${sԲ>#Cϙ-OS|`4G- eXco$qɁUb`9ٰ#5ba|ވ8E#&-/yu%ء/ofS[~_=B?rRC~^l.>\|J[q kY *+_N?Q"w@/.כu^ ?.Fk (aXO"^'"o~2}9D+:{2鷇?*8 \qt ;(Σtin?7c"_ ^c|9s x ExYF }R̫4D&CU@j"k3}Q3륫WYԠ3f'_>{gggx}?qP:]2;߫Nj;0^QXנ< / s^P7y hf'3 d-}KC_Ykس+5&;DnfwlCYUsS7 dxyE/9Rxc|($O;ݏ[UugЇU_T<q۬쮨#)]g8w`RSz sA>co~_ 9P )ُy~$OfUvy<+( ˻~+y}À[A?9^;m$9o /%vZo^35esQ9)N#awo&>c>D?íc*EyYbseA갓O6v<Л>Tf3gk_c`׋uݭ:}7[vxkN"tb(5sTo~}L]؜ԋ_Mۀog09z d-67/V*ÞO.#^;e GG=݋yɡ&#Wc^S.X4wAL.D63gk7mkb1zSh617)Fhp8]n;Oa?29^Jpn/C'\>s5BݗSKWǧ E"Ri&_b2D1Og>٭_Ey"O>t !)f곽 ejZ\ kys> f VB~ sN[uƜY3 :#> 1|7vܻOA/?<#7#پS#w5r'GJnj'=C":|7˹vg5n)#SNqf\6EW<%-L*d:2ͨ.'T`?䟜L蒔sݱ^ ܛnЯ'1G|fTGv$e~"ϩ(q1?BvgUX?ڡ>mGdB/MJh87z@[-!+%%Ԅ+qgx'CpqLMy:;Oxs#j9'm~gY'Gj]g ehey(g{Sr;~1xĨ2?v7#$ eDF_H^q>z-9oz6Hw蟜KqD_GNuհo6u) m$9.t9@9y\c]8StAnHBv4ut ) 'f-pZAԀ&IX_9l?IbFznQ0`#ԟ= ;UB  :(WW@|a/9Yu1H=ψ:LyUQi р7E> !(z(A냉E_}bb+3u7oERDxaexuQ3"<"XF_7'{U67ssjqnŸ ;3=MW؜bFsI1O?!o@l}swIl^CV<',9d:sC_e6$qIU7평ɵC\]7GB\̔D+4ºT7!J#ɟiJ?OL{?$0 pfw컧3&S@M`Om5De[#ׯo܈>[L1\pL|C F=v# /` FyQk)}~|<d261|u}Jޫ_Zo6׷G(q35&Q uckݶ?9 33 ;&8k 9Mڡ.6xu>ķTsإ/>W,^Qf=MF}x^ԝҺRskN_ qu tV8'?+pju؃1:|88? 5%(MH,(g[09}4 F\go BU1w&>xѥ;Ct! $ZC=tgw 'O$6byS1T$Ӡ7,'6:e;hx/iշG}V_OAZHZ ;{<X!6y/. \ uA?3/C?c c(K+({l,_Wh.W`Q4VW|)m4l0ve${^߳\`^}Q |J/Kl~af:-B_Oq\ ٠3=mBꮸN_q&#OD|%}&>WaH)i>}PK璕/?mIAhQ +úgN&߃^> 8$sg25#<8ηR2iC-t3S]@oGB7#>g<)c}J?EPqG}D%$N}(bp/ -)}IC'zuUh_Z;rNi+y<!vVPLy bSg/Ʊ9n-|}C/F_< 'GH#_ 辟2T<-|p!M "R}׀KZZĹl;(CQ'”jԹ :S!_! P%Zr;xiJ?!OQ(m?3c#Y_[p0}B*tYՖk@Ѹmo+uI2֏{lxmjpU7Df9M{8͹ą {Hj>Oc_Kg-wtz2*3+u''a}jO}p]o612Zp7Θ>A2ӗ9.cKU'# j=lyb /PB}J]wm?lEYܪm]Zu?ksySQ)nzͶ޽'#?NOmt\rWa)eXf]eolI`u8.auty11'OO ?r̠x_<4곑}~]tb=yU>;曥EU1w??#Nڋ<7 ΍lA?|s8 Zd_.~v-j۴Tm [#o-/[I4oW&,ޒ'c;K]iio+E]%2Z3Nܦ4b"cyzR="G)9>Oyeצr(J ^'݉K;uD}oD<ނX;*Bp##7dibpٞ1$*v~{Qp`&ݶL+?GD2s)A 2?8:})Y7alA+L7h꬞xdrftr? 8ÃC~Q@7UFAOk؆ǽ6㼿X?_9(֯~ W[ܷy!/vºoݵ ]淿ߍ瘒 \`똷~SVCa|NNkCf,9 o>@?T+U[0@W`_y9G$GG]\ U@_:X[^rF6)}\Q<cߩ7t(t߬ tļv*>|y ]t?cFv'yAgg y<CS_)|tѿ9 (e I_eх?mzL?wh lCy>mztuxnp'M) t(3%oc,YQEfve6Fq:""ׯ֓}ސ|7+V ?|x|  ~ 9ɦ ^[RةL+7yF <0Yb.Y;}+n% 網áP.7&YvAT<8},/E o0*] b3+Ld \;s 'r7 9z&1麦1j!cRK-auD=ůggP4M<ӭg};} 韠{_rh*t%j!E ~Crȸ[~2>2HRn Twqj+B< u,a MFN9Y~诊Gw:%!ޅ`$?:>{〔Hw`cuog%=:;Dэ 1P,0 ԏﯽ`۳ĉ\:-tjÍA+.(gC{Stb^m} KnS/*,N5sfǍoh(7p~aX{Px D׽zknNu z~N>=m8W_4%GGC3J\^ UEZ(F1wP!&|щ+}{x>ᷗW_fݧbg;-],u%Ks<>wj+mY-ĨPx#WoïGǐ_lB0"WMCk礵~U%k@>Wx^ XݞoyMLk֦OГ|~ݞiR{w&gƓoNj\&">G?0}{zك"#{L#xwF9q?W<9M7{B cS/I=wS'^rܡ&c枇v>te+:U^◢!i&S{4<5*?ugwVn2O>.}vWJ&|/??sxwKߣT< WZ]G}e;GkAn=NnK QOwUgZ8JZſDxj:.:m_W>DQ _1n=oy <;Qt!44 } "8'Ox)ݼk`u>Ѣ+: {IST^oP|Zu͹Oُ~{nG/Y"ENOF?v pE QtƢ Z}uF7"9e pUp/saϏ2(YYׂ̓<{ܗokG2G+%upOo^K?F;t,_d,!h21 '+'ݱ/tr[ (kxu?6u45Excayp~', ވHA1aG>S9,G~ %,Qt2[27Jp7xjsbWF(pB*jT8|[o:ylzX\ M1?<55C?OD;Mrp*_ul\T#J M+UqP pkkѡthlմ؏ҹâi (|grnQ0-&Û-#q1q;U\t;}"XWslyu6oJWFbRzs'N~+K9,Re/'*wSi\9O V[&}'`עR"sWҭ e^=3u>Ϟ4EtA˅DZU&kԻ#mW<%VHlB6JN 8o.N%I=FysZo^^i9a2IB47@|no|2ԁ=D7zzbJ>&26xV߬P->uIEΧ:{zb/+-]tOiKuU?dRskFjt=D|@H<qn첩tFρ֚ܿ/~ӌQ/uZhƿQ.Lga'O*6?{~namGǸ?єvQGV* Rq@U7\%-7o 𺂮/qǥM6ML/OymnmĽwz)s/d5#R(o▂#+syc w^x;6qZZ gv'Cz85/# +1rAĹ?x6$>t`-P߷:he0KkT_؀9}kpڲg]61ןs],zS{Ah_קյT?G:' S7~Oݲ@Ko|7;>NOV4n,u;og{4O?`Ckik9fjG|B?ZCVߗhqt>. $Yr X,&p^B@l/_Bk6a>I-ΧhT(Rx9vO)t}~EOp=mfS֚߳iXNf1N…j'O7,}2N_V爿e{l0f3K>$._."ȱ{>%?lGp.9h~N=]ՙp!0/=c+u$K~:_coY3}6'~iݜɿF.c=YGE/g0yQx: \a/owv%pA.h?<~fڛzBq,KWޣFMo5QSZp5RVU-zس~% N3:WhbKGKkJ%.>oHLM N~LLeB~kxU6 l=3wMb`g?). eY>WoTʼ34̜ C;#KntE!Opi ӱ_oe꡵rK/EF5+qOVufS=Ԇo˸:1q ;, \̾ۋlI΅;ׅy9sǭ?u!_ؼ^qK˄nckG1CmN`7i&̽0\[pt*n_ C@3W}>|g_F (?D|bm#^7iF׌o"׻TSt`9}/^n5++;++vJg`/¶_s#:]HuMm5{ۯMvUys1qw쑙 |.Tױωbw/F{jC#ˢW@-z!it%,`~[M#_ μv~>@<-ucw K=O\f ՠvNR}&ɏſ wb G'Ska ?Qɣ{=8e֝$0dGqGr!v3ܓ z_ e|H-A}T<-5}v"t *Y@9). /sJSG O_NoSn~aá.WyGǍN7ݯ{Ɨ*|$հBzx+A^='gln!n0cYÿޛoM9wI|B?sv|֬}I7/`ɣ}>P\BsJu8 zCWMDp* ՉzCW>:~5kyF.N= t[rk[o-~td*L^+:ssE'I_{WUbfE7~F8#'*6xƒɼ+?`cڪ-w7o{o]EE6 q.&m};9_u.oն[r} >жӛ4$ >*6Q[^s{'dժ>qR̫yF{ԏ[z`YKyyvZ3C.$^^=\C)xA|Ds@5^ ]W(C6QSh:N>?x8~FwDoWح sLχ߿+KV蝹`s#A)O&qR!*|0Kĭ9-Q sOck.WHߺgsc_o[sI9JyRcF4hٚC"&x6L=l7j!^-~| ?;\Ջ^WuWv3s6K ]M<336<8C7>F #?zCxz٦yoe38LL a_3/W6qOfjdK-zqOJǿ woL#_6 #3X+̧m=>HbLcntVC=w>f49 :ϼ}_wy~!n+=>̀0Ti~e#%Nt㕏<ӯPJU>܊o-#OsLg\d@$qitkc9zU''{'uk>[Əwt<@| o= ϗ?%y]N\_h2Z&G'˻#\o{O!F-|Q{YJZ ~Mz>Њ`1ږ<ώvZ_%}SK|? ɳ~8n3qϘ?SVwɟ0_(Y-O~c{v]_^K?O܇~QjEc OI>j^b{ źJ˺sy֋FM,i7rJoZIm]E})v蚺,t\BL|7O,LӠ^AyEXHt˼Nij^K9~%.|x\ Ym yjc:PX+)ҷv{%udA2$9+ 7K߀ _DWReC⩀^uKu^_k/6Vrb*908ҹ?(SYO`T;xAM4k"~ث ෡Sfsky~g喜؇ŏ}: .mۢ}7b_0G-w|m}nϧiOn/xaΗԬO>9z`¼Ѥ.ۗєzK|_pEwBīSB˅&CVy}Nz~{\5S=oՆdL{}^ ocN5ي O~~.o{]B#; |h~u.~B;2_y3 [y`wVgKpUȼP=C\S [t9- enf ux'HO|@'9JYӋOԱAӰ[ OXD?9lf {|ٳ:2:k0OMǸ./)Z1oSK8/EOO?}HżVO,R?''Ni/λ7:0lWdlLO| IXۆ{nϴVu9CmϽtRzGO3%Y*v<z+>*h=lVΎ9Ǿ+CO/=Ε9+ƛ͈2c%.Y G ́?n95m*}x+ɶ96~7>U]B -a7ou_XsՂ:PlVwı>W=RK"oH)}4zf[aҷj|03›1ަ5wǾ76>ٵкu7S٧#bs2_3ns=hc$w.Y~stv:h }=aI]C<7q>b |L#Et:fOmۂ>fR_o-sco_ /#(O^gI0!#랦 v'z4Jyl ̿T޳^?x+}m'TDtqلj;w2)y^Ώ]xzcj/r&Ǥgd{AbW&:O آTx O4B_:z_/V:+uͰf<|A3Z>[,#Ofڂ%, VZ"ؔ^zs Sbi>m݃ _w+sKSqϞ nE|avdH*:KD>%vHy2<\D91g*7\x̻m:c*>y'i7qqMݩ-fm㖎KAs)CG#z#%}F(ZfG-G׿/钚 <ڲ0ϻڂNܘ\dBt:>Ĝn?ae|Jǚ4OԤ؟޺?=x{וnM;7- U=vܯ(Ow79e;vfH x"x:UU/}kJӺgQ+JXPbg$%0끝j_Wl׶\?\oG;x]֧>ZV!@鬷2A_dLs=l,3Ӓ$n!8:ꤾޚ3c'Z;q|f>qO>^ߜE7tR#;Jxi#&9?ʹie`қLF>@k.؜Pu.jH\v/ y>u׵Em*I^eٛ\F<]^K|d;y)s_NWK Z8W)2_Ltb/Ny|$Vط_[&,yc߱XJΓ?ǽC?ij\ JVxu9Ub½NA`n`^r5ջ@S畦QG't{^SkrH/7 Dr[&GȫfcOz.U]/?m-R!C=.>OGYT| i=Uf:n._ϒUjQgJel}CbIE__wDeBЊ0p"'#Zgi)frCؤQ^6̀_7؈98=-V'[kk7 RCq_vW?4CIJs`S!:}3rz}zyx&Mȧb^oιɽ\)pi;/q)Ƚy{'R1[#Mo+ .k~{be rAyBI4<|}5{lB=AAe| _>R{Z36?[ y?;[\XD7.OgtS˩mu+ Tm>'67WUD4|'oj,Qiؑ|'gOѹ͹ N[^xi)~ֈ[<3zie^74ue3n/:(ש{m2ӔOoBj&.%ﺻB37'7/ڵM8&Mǎ r/+\ʻ]LNc3<0j رapTEq:Zc3+XC/R9~nϗV# :!M<&TN_cDry6{~XWI{s&͘E<Wa Ԭ;ӥ$sU'c/Fup+O(| ֜|{ߝypI"V_Q0ƴYs_?=Ot#O |Y}z6&q,e,v ^Ћ};z˜Cxvap+3}/',4U=d*OuNgRj}~E^఑oI|]p NkE|,5d`:.6+:]'@dUfyy⚐_WG-3˲87;1y/DWTԵ|!]8mukAt6?_LR= N'S먿T!s,m>ǏVa#GYՓF]a<9+g/10>;w෩0. `۠7zSZWF*^, >Z(3˿'kgЧ5̷E9K/wkCiM__j:'٪*'J!OqcB{۹mb*d>V"^nϹ3[<|?,8| /ߧe{.H9Ï~L^+z?fnK+fef?{si̻8Fzsp8 vyuiξ}.I3C5U6emᇩ g P17n_/um舟Ӿ6uB! ۻ]ƎRo^^F3e':+'{ޟpx?,Nef__>(P%9+J?T4/tʘ=q=d>WPC;lqŸ]Y:'̭g߳-a8t_҇e- 껩vKمh=Mh\W >gK6kp-|sxÚˠs)uVD\;mp+ǁ{#2vً|XM|ȭ>t|BM/l['q.2dޚ4J}eV gGp7|YOH+dJWPÒ;Ÿ:Z*A\)qHRk~C2z>k̍O0liSt9woĽ o&Lo'v:o;#u/ߴ1%<=S.-07tp<f},*8=0C\a6Yikk{{4!gGؑ=ۿIo~tݣ:1;zq7 rFp24+%Qȓ+eDL®8 }-?߮?;-ej k{W:эeNR27n$Jw!o i 1ܿԟ"B韮IwVw#TI[.?7^mgUu~8e_鵭|^jeCO?sT}/~ۛ-PXt#j3e1zKf!ω[|[aoFcL\=]/u."A)]{S7Yt؎=Xw[X[tZ-5BYƮ:Է6T?#ϗ9\rfgo:އgn͘H~#)KA HY5^xB]gL"zғ\ۄٷp~~ħS/?t%,=JzXEg|Z9\ǡ8FXv4FP?z[G;R˻2<_i3?ʾ}©4i=>Uͯ^|i?]Bnu^; yN8B- G'nSklpoNsS%աđ^vG|C)?e2D'#~}=<Ex@^Y ^oQ]|`޲Xϣ4{c7<:g}GU Cќ0WjhxJcɟ?c2%/{XR¯7wn с ~G6xG'=3OT\xĩc<";홨 _/^oR>5&orlƢ)_;S}{O^=qL_wbvLDޒ}+MQ!+hH=O|>U!eo T/I@T.|wЋx6'9n':-w38CloD5OGi͡36o /wiǽL&bӚEdqb9얇F^nb׊Q࿬^ڊ>K|#{s'b^|>'ڔ9}g<5˼Ǚ%yP3,kiܑynZOBXwLyXr>x:-?*vZEtTgW'l뭹M>J?s $ L'/#zPVgIwz{vmU+HӭKBuW jwZ} /jB=}~ɺ"[}1J?bqU-+/K?B݌.8B<_6?Zt h c#8|(մvV׍TEf~ <sx7y5ߔׂoܑp~_F"-L^3mz^mܖuRľ߁'x ^qGΒ/\%|-'xEsgx3#};'/G1No=E|ۉ֖:/^{ۉK$'q?=)|حx + ;O?Ǽ-x֓=s o\}?gnB-Vx!W 'p2Vq3d^U1 eG/snUjMe.x{ ޓ^]x3ܣ~[|?H5=^/l٨弸×(naW|{`%|Ǧ_z+z;E5֞ٶFo'tVӕ @?«'6FЇػRk赝~kܣxo+;jFN}>'u^CuB-6s~8׋i3ҟn%FK''zV._s{%*nw™[!IBH~J^3 u4 kJշf*~J~|sj 2'ғ:{2ٯ"ݢz9 N6j,v?'|iF0>~5gz}@kxlu׺C֞q6vQ襴NPׯ~ z,툷=ȷJ_3bI_,rW`ǃ~6҇\쮢< h|߲;<朧Cx4}aOY^rb~c#xv 3ؒ:G0#x t?ODc&:~nn~W2dqM% f(/<+}_k.t//p_^2o&9{Io%*F T8wKoľ]Ǒ/)KOJ<㲛hyOWՌuSj,qs{Tf&Kj$}27hh$Y&Ŋ<=k~+.ۥ 7Ǖ8ۊUӗOFD?*;Y-_=sHc=n ;nJZxQ2zU9$ɔ|7.K.OJ6$%N }p.;8#kObgNvn N/:;}?nWEniM.7(6172kҋXtM"w[vy9V'0q_v8~~-Dpe.;⥱2*28Wz -fEZ-.\nNj;|~x%_6󭚀yMglMt_pno$$N\;1>uDQK|=FehmDa][uU<]O!]x.ac;"+<4ٛ8賧cnQL<}H9éoW.N(zƧ2Pɖ͖y'ҁ8qfu%.xpuc/i]sɇc_?2o+2.L~w=Ce sÃosgчv UD+:ƨXaķ1è'`~(~v|se93:) /'; ϸ7#ʓy,}w?Ns_Nnρge-3a{'yn;4 [m>ܿb*~n_S7[ם|*\c]gZY_r 9JW+ _KVKD_YLIuq1l[>v5w=(7Uv=#~ϣ{xP`7kTp'`z\iլ:E{5b%~Wܗ =E)D揤H_RZOS?pϱ ?:߁)7$?3qZ{O_#O;xnJ(6{⪪RmT51ܿ8kBj=sFBO׆/zoWM$I$-f|"v1#b-g"b{QWno8b>ۉ8S߮[y/g oCEvҀ=Zv!9kh3 ùr|ZY]Ӗufb}nqG̚ 3&*7/z]]1OxޫB?lhvfo* {j'o37*:}oU83nyOV6!/{V\= K}r\+ǨeDwyUpⷒ3i Fԏߢ>SBӥM8`^żYk?M'G7gKǓ:>V~!s—W{@BĹYns_f%zF ?p%|m3G5N&;c5dOoJ p~|:nM?ⱷ {si](j#Slm/,b4b̧~ y+14.łQϕ,~^-$2!@OC<;ÿ+z+8Gxi!s M珩cKcs82śVs6C>vxQxM8π;!+t+ᡜ\TM-EtW=o{N;Wk/q ʮuӴ-/CPͬnNy>0TJxHb'v#ɻu<<*ݗL/*K9{2ڄ{ԇ89]GOK~{{=zL|6Ce ! f]`6lV^K}|ۢ[6zFA%vgli|-yG+3`~ef+lh3],:8+sTKp/ιnn #cڽǧ*_]o+<_}[)>9RGV9-e]Oޟ~={yV:=Ul?~a,GYݴZׄ} yECfW '~+NM|e=S666Lp2sa⁸s9GtD7-$v%g$#P$ѕX}6MߚW5!z~uGfvУ̥*}ȰY~/Z! #f[Ktgf3x`/Ro9gUSF';86;vӑq[.e}V^{LY3|C-n#E^0ʒ~'1|Og̹yuI(;]{?u,hD׻s\0Wњ}U YTƸ ^|!"'_/0_e?8.o|aa;y޳gMw'e5b~ ۽'ukd+Kioe~= 6 v!_u|[:ggB]{lo=%_ǤSbW5Ydp)웡oʖk[iڌWNr\3l?rSDYְnsSJb8mn;8;ƃrY6|뿨p: ѷ,b9xɘJ]{(hcO\%b& gKobG}kw9W"4Ϟyx$B}|{Ӱzg^@ |d yD߮Gi|?vY?~? }a<U%wa7FE~ KOCd2{@|[ԣM_J~;uU?1~k)F-_|6H.nCCeM;]"P 6hȳ4n~uM'lCŋ1m1~ *7Yg_qr!>vbtQ?Z/DۦxC4x· yFɣxAwpI#?;>Z{)\cF,f R3|[ o%lbSNY kB_ط]/[n`yyޟkc(rTo>~ m뼿O^Mʏ]3vOZiǔȺv'4R7{ "q-rDsEk:͡1 ubض1o^-56v<Åۛi R/q^WMѫ~hqWdaϒ#rӬb[W{E7gbB=lx|t*NYvqcObVƓ9}Ε<q/ßa[?ϋKU.O%1yA⡑;طd;")w9֓zOgպKc_IU[{;mnq|j#7o6Gk"ڠ( !z;=ç_G-+ oㄬ>-}7R!qm37'OeAZż6;/,ž4~|}KUgzk涅8stu GÕ^" /ЧQZGE[~u}? [w>%:op@A<"Y_O{Y { |GOvҮ.qO&ⱧF/ϙp]胭$ϟr}#u'J>e{WETJ?ƒ7M#ƒVf~ N_3eZL7 2˾yso9mɓ|˫Y{ݮeݰY砱 3p!ty ˉoy~3-nm|"Z\j&u>Uby#{T߇-u;;2ye_VoF]pN_v<q w8%0F-yUq8-^pN_.p儜kvih-V#ٗd{g4_m}Mƕ#k_}./ߕOOG?l>R}>?TQ6_c 7zzeI0bf/uwDӼ޼bGE^?uIƃ`$Z o~L pxN=o- Nb yQo":2#~7u $ ~uܟ)rY_KGȇ|3Rs /'"{mNE#K-9 n>E䷏S33e]>g{-HÑ/ ۞J? rs6z~!/L_-P9^^WE-эcLmNx?47aD k]OH%oܽ7#6vzYV݄WV51|#6q*&cOU ^liX7n6&w/s5x@6ys& -Q3u?԰ [%̃WBv3~?}em\p6%}3e۴ϥlwBq-⟁rK7A=8Ɛ/:⏾ 2?k8SCc|sMKKIm*sC;.?g;}=4۵<[&bWCDH=ďd}GoHFm#1VSC?etįzOtn"%+u)`']#tv@3~pT9(\ޮJCOo=\ќ52;VaG%uh7J6|s O8C~ B$7_9}MzzcX8kk7f㯺m`߄4~CSa1+_L'j)gECU$-ō/64^SwO46TQl$໑zC a⑱7+~¿M]C/ ߕѩ!7W7*[t],b6<|_mP ~Cٲ T^ĝ .)ޮNj[zJ I͘X1Xx[m d@~p=Ng>m@ wmsET/9OPd\-OQd>Y[5tM~7"'+mש˘9u+}͟jqԧbG8r)~3W쎪dMYRoڲөu?"'Ⱥ9#GH0̾G I'hCR-@(xgvOPϷV<v])9~gS~AQ!yïR_r,]\i߃ 6") ~ .f?jcރPO(5#pbu+rEi0{?5Ljߕ(~ɮkMm2dL^uVs2tG;؈ɾ`<)7eQƥ"B:BE6 Wi8)b~w [5m qYd\vpe#z/~CG¥#fZ؏οz.L܍?NE^z]&ѓ;̩ٮOI+zWIfs( ~ {s(4⇙m3ҍ2 m{vZ"fuLg6xC3 p쀘O[)J|_H,)'}DϗQ-v9$4;Dƕ̒}Ơ|reH^ .ݗ,!߻f us6"k8y |bVawފJN."nZ73O/B;WQʾY33YQ=}<{~i"G<+LM~t¾ /X{+'$qvG+_qd^JV2=Qx?]3gW*jMaĭ|?<w9Ev4v{4xBN>+#'}p[&uY 3h«y]g˯sN~G]_Ѽ'~{c߀#{Ŧ>|r#瀇!l;6[ӳJyf8iCv#n#% ݿS<.~7!HB L$DZC?\ڙ _`릍J#"_77Dg"2e>s)/Jm_ҥ|p@N|~&q<,y[ȼKUݨkM<ۦFU K"3b#N8#fF>peH G,9e#:ÏԚsOg:u^`1rÃOySOAdbOξ?lڃȝ\xqnl ~CGӁsgi=cg< q3r0a6bpA7Vo ؿ)}}}%?q7X֕ɺIό/z Αv'MEd;o3ˮm,s恧߬]-"8X&k -8wzYzc$CVsZB;n/F_I|=2"oΏwga^#UXfm4+>fo_J[@~<_3~LzOw@n _-*7l)gUmc]gII`K{b(u 7k[[{=ͅ5qlYSSyv}C>hȁ5J#y cw;rf&$'H?-]~K0O2nP L2sѮ{A)sBy\pFagjx_7댔=@\3l}t d>\ YoI\rߑ|ۣ9%[WWm%ȑ/zڙ2%2ϑ󻬗/!Eǜ.$`w dȣsBS1vT &+="<yη(E/~_%gKZ˕E;_qS}Y1\(S|&^Ȝϼ:'Aϑ[ϛ\)9oTs9/=.`{O uby;)2ks7xw׆>%.}uXaJ: ?~)/xj1Isk'ϩkqo|Uy0Oitu>}p!qzmN,e^OKW7k'vU`kLocd'#3;aMяG ߉>)쯘;o*q]Yx}dnU/|”/Ą-cS>+>p 㶿 x^9xku 9jkv:mb6W~׶k [?ΛulK{.-:έ)y$OI^)XwWؽþ?ec+~Ē"8a U}}|9/WcMǝDXWϨiW=yĕ^^%.А3>N:5׊EYC}-xlo.Y<{C^bW\Gyɉҟ¹ {c9y[^כֿs=1.Lx_o|[OkJ"~/Z)̷|R{&qk\G/Y Ɏw/O`uX~+$7!; ֺu W<'?d,q>aH;h1Q="c Ƀ|($kp?O*þr dx _0!W<_t.˽0m1-YǑIlwކ)-e2g_Kw %ocU?#u'%cIF t$q難3%Λ&Ȩ [=1xALέ5!=b l%şw(>/uL}%_0%u[}@?Гqde'RJzRw!2 ba*7-'3N}~p)2P>'*мe>b؏}^Q/ ~?{@m /-3Z>uKǧkO8fD/wmx}e=} }\Ww8cxl|' yam #NTshGmxOϗ%?nv䕾)菈 ֚eɖ B>x'm:ÿg~6xĔX_cKY\K^֫i."'hUESUYۜ1iѺh1Q~Q5T◷ӥ]36GU =_}هGA~C:꽋~d>zݩׁɕo[pv>>iÝ'(~mt ?p P{n!Βw~3 1IM3_E"qZCr$#f&]o;%ީ 2w!.e%=ET#ob?կwc~SO6iY1S2>sUD|*Y}>׆_.z+#TAl(";w'WX#I2a޽ըPEv'$$C>=J;q)Ĺb8KFza`fXԏyġWo~\:sՋ>标Ìؓe>MI_e\+;Ζ|YϜϱ3$VA3 K&\ G ƀ{:g_x<+\zb?mHOLEA.fZ?lr&u =_-nLi\HIø%&:~9Q/ &ɫD?9ݺ?["EnJIẞ8N_Ϣ7݇<*y\?#/lY~+ϴwzZyPL]Yqęt$N·Sy@~vtX6{Ÿ؇Q|N^j[m~c9VgVy4bd{; r\|Hd`̧~ϒ)#=:ȫj-smTLH{ugs%_y0?nE 쓤_+.=G~pȿF^+>,5YW72Dީ6*7~XOxã~F].SCD"n9|?+}>4wk'*W`j}%b| ^i*-y^䉾z:F\;O/ϰ>S [|&>s$j1zyϽ\K܈^< n௾d_ߨ)=xyힻ݉s"u*S?fz}Oŏj:oW"| yGu㟋ec7j;h"yS.xֺQz^)J&{כs&ϙ| I!Zޜ䤯6}[G~igzgdXVkSCߦ?_[:N_BFsEd좡Oΐ}.Y嵢ٟ:G\5l ĸs`sQ"j23;2r_XZ6p q^dӲ- u3_f~ sKr{um16`[0BaëP 'n_ƂgT./7ov8 L#J`s3uM/xIa8gR9:C0sxW~=Z'kY=>H|]I O!?8{"n%L)xu{D_d+'NU-rs6#G+`oGej yuƽ",d)ą]7]х}9GkQ2y6aSI\eq<ߜ#F3x 4;yOɄInS<B&`nw$w&~`<.~>;Cd'Nx"qD ;ayx5dG6&S ,rABSOu FI^/>ZOV"Qf!đDxTHE|<)MMzH< CeC|Y8pG2,<`5`OX9_ϘO7D<&wK!O$ WU@VOsv ge!: <g-<{FWG=9Ãy?~ڿz]?G|zb-{%^'6g§8*ySG|yA&zԿg!X;K^Fȃ;t؇w??*kQXilY-$w=w1|k9<|~H90 H=m"!P6g7ƒ}Zl{}mϴ_pp_Cæc?L2'IGHOS5<ZE%icE=mdh]}}99xA[1IY[";&Eԣ岿cb?'H˻7{f BB ZO1'r;;/ M=RUxPj) >EQz݈fl/,7rgeE:g=bI}b5G5aҰ˞Co“f:r.}?1wFֿ=+}s2FƧZNq<'@6o6SScKQ!_S?aW|~L%,1Ҥ=iޮ{@~vgԷxKKoOi+|O1w>?+5J>ifDh30^"*Hu(c19ğl?u۷+c\vg7]\B~OxPQ#{DA.d| EM^  Bx q G ?FG,(Oҿz7 {"٫8ic/}c X|?[; ^BH\ey{5޶. *̟`WC2 s$j%x6]x<= #Z|xK;`d^w"=-peėgtbwl}>W|M/~y;H'> g yy8ɯxFy0p^᱇IB>K>{d.ߍ[ nBeǔe]:i^)w*G:| knO|o͎zE3lA7z-,~Pe'Co~ױ1''A_팼JXG_\'_I8_?~ ؊< k&/ 7$_Bck!r&66"h="ڗ}g#ܪٯNRs=:q:G3VEy[""w9gvE/L'{0/q>#R _0 @z#jZ]s[c8QW)[+"^s|9>{>^{=tz1n q䩊ީŃek7Xp;gB Y%Sg!`yzMgxXKK>kE r,a)q͒''H$Q.{N4D esv6-N=>57,[X1#ga ԷW_/q ] c=Fk8=ysْؗgӭ?uHyo=7J/ dՈ==s!gp٠9K*2 g= &vNid^[+K_C=*g$?nbko+SeǹX)HܸDpw92+-bKb$4O zyߒ89쌞#vb_c"2+ӟY}=;0#}vw]~,<"[撆0$PW2 CF'7b92#^:}磍_8W>b8904|2vg蕰Wyh8^R?Z(p-͈ O7E~Ax7" ]>voo'6T>X cs"e_{ﶍc{]kr9WEWw$9=%NtVs;qaW sE#}_ CE{6eW1zj˙|kN$.?MCf,v~ˡ#/}߈HDk;8ѷ;E ħ O,&=-xx@ނVd߶Aydw<-ha8oS@Y*dІK9 {iK[t{zJNY؃7}ȾƼ- yb6wÑ81πrG|=V}?i'.ӮHkuzo{TXڗ|]iǖfq&+4ч Ӈۉ2N~sܧOu E+iƙSǹ_ovă`oCV,d\p.%%N)yX歃[_=e:dUuk/yeK;D,Yڼ"f#;#_Mx'egoĻKS>MH;?\)RαIу/nawc+~YOu x΍Ku cUnwy.sدᳰPߑ2r+w@^: T,~iysRoJ3լȱcoBh^>5jꁲn3Ӣ$/UQrw)E'8Ht:z<'GSO"o%?لk*n;%7__F Wy3+'D"#?cϒ/uw4򆆟0Ք"c/U]<*QଖxDN<~u/uAALJ_efuyM ;u!321DLܬ.wZxjceI>(3tEUȺQءޅm2=e.EB۬W /<=ƾGOs[՞q2`f] >H"۹7$8I\I)xH?Bf%Mz_ׅwr b.}YRi-gg~>c*xs%^צ5f$ogϮ7?x:uůc!C+ُ1n`3ɻ4]iWwGAG;Q)wgutGsnT|~& 瑌ks\ryhOMJSiV?n~hfz%oa@)l^YFxy"ҟ¯`=oD#>2U?8C ![xVJ=='=88UO_+~/x}s%"s"{ 7ުY)q?y=Vs<:宒>sGXT}inO2z]{YnBo~J\5z}M]:84m\w\98'4-Wurwuf˫{݁k?8228̘U-?mO M4;FԧgS{|{;ymOJΏٷ2/O5 sT9=>| ,^6sa͸1 IMOA"  i;6@奉 7;n]8(.<8&0)f3_{_/sH_npv9{}?}ͻbY/w4)lw؀3=7qDy;N w?qeÜ9N >\'84):ο;h;檅n~mw_qrFެ=\wE2F2FEy̢QQ2Be.(s袌E2>e|.\6d+57+c4+c4+c4+c4+c(c(c(shq{SFΧFEEEUUUUYgVeY68VeVe] wըΉ2FWe]9tUU2B2B2Bg?i ol& 6KQiSi{&ghr6(w49.{ެ({W2BEbR4I,&Eb2(3(3ܭLUbR4ɨШx:Jr2FEbR4I,&wN([Lw*MuEƦScL1):d[>tLr2RV WN(W(ƤSQN+՝hmLfeoi%N(3lQbTaqQ΢PKE:MEH2jU5ɪQnUfժ̪զչ'i\PUtUk̪k!M)5X}2N2N[)5X}fggAyoT޻(MGivVgӬh"wzA=fE]dVtYEf2:]|bmrUwN#)w1lTaQP:T|biV WܽG.hSrQBݣfr]~EyrUϛdVtYMf1+Y̊cVǬ?fE'Ǭh#̊cV|Ǭ>f2>2>2>EǬ=f1+Ǭ=f1[=V73[UlUƨǬx>fWeǬs̮ γH:S|MMq̊1Ijmmiz\cqVjQE;EXǢ?g|YUh1-!-T4E<IKZ /iQ2C___GvyZo֦9e w6E=eFէ N֋DAܺ>*nRJ*òJ^|.)ʪkpk[7^\.Y􆪠yYk~) k UinW~1y]n7Biobase/inst/unitTests/VersionedClass_data/devel/exprSet.Rda0000644000175200017520000001114014516003524025212 0ustar00biocbuildbiocbuildZ ty3%Ř )ZcCd6Z-L!Gilfg-D@j' PHI< $+< @I PR vsfgVHN{N}W}c=zc2;3nXn+f1)7LjkfM7*33 :B_>fՀ^Z6e&RJ<9aZji19KWNU_iB|IкL[gl׶m04;WoۋU?]Uƀi h7";q03$ m+DM^L?]d4 ?؆uop p;xx<ׅ}!G3PzA!6@%}o0&bͿ',m99;CGe B:MIo CG쳠2 elO;Qv{g_ OA=#fy9lx7c~Gxoc,0c;V1Б^pvv9\X{'HpN>#!1]q?m՗p֟п}|~~~~S?d >da:H$+zwasdsFzz B[&^sWCLk`7N11&G"8׿gt_P&qϡx'Lr|sy~΃R#w= _z?gI#8 {' I LJq5r1[$As ×{"f9qtSz ͣ{o义= l0/FঁG{k]B ۉ'NZGqZW,H_@'^"N yGD#V& Bn|q✔/)7eh/O?K}N}?5%lB_~aofLkv6lG2hoI)bp1(A= a-#ǁ[h=?rM9c&b t'8F쥑BwI4rY+;~ mʱgf(#Q: p c?DqP-2Cy/OC&w9"]tNv0v2ڵeu7Q}NN*౞({Y/8i3Gtu7 ]̹:)|q|ͻ8,^1D_&}1x릸9UI\sďKXCKYx|}K}"d8 -݉7q:2h 6bLCGFT(v^s)߻qX䥜ȁ5v+Q&q{uMyK;y<04Ϩ>|E p*wR7uYh/=>?>xMǝ*0|YL9h)H@="ow7զ[v7& [|\Cw̜z[i|WCKwi6_un3C<^Rn߁Z.@]ݗl#kA<Yo<eZjZΥ{yJBcWoկOP C>sAhwxz8Ed;w|ǡ7A($r=e>yr)pZ)⮵)G'yJOw0qoQyTܟ/S}C5%9o9F4\z1rVG|`Ν}c $=~ ?kQjG{O8{rLo,38js]4 nrv*} )lI ػw=C Hƛ[P-:=->u#@s`j&MB3|etw)QB..8A Z_?7#}3fbmm9ziwc/Eנ%5[}IQFR^nrfJA'Uhg$5W[2%hJ^5Sq>z՚qP+(a*VQSjR1eAS6BCӴR19jIQXʬa*zAX^S*|ˎZMtcF [u$\VYaPҪ<ɽ5LDg%!+\Z(e[I 3JYσi Pdv8j@;tV)%~V֡%Xtǖ%yPVպe!_^-v+y.f͓fdV.f\-9 ^I)nkKZaNSYڹ7KQ`y:wb U9kr,,Q/Yh؂ g5n-ٵf4wt~j9b܂㍮ \r094QPjKnSJAj B7Ӎ1Gz\Ry ͒/D Q"z[xOq-:SӬv>)Z咏cwj]oW<6'USR|k 9S/W9_긊aGLhƉX2 Q ^kՖQ@88d]YÃ.?9)Sa"~ rގ``T39_үįz~+;KAj^nvr-U)?#6RnGnoٮ#}yTrGbݯaݱ{=i6%fo5a *k'ɩoފGx: 0NŸ'ǐ0)&1DkD!kt D̃ "lD$H(]M0KT̃ QS%D‘kȃpDo !..CD{ZBGq]CQGcM10h PˮhbЫt̒\;b֑"ZmHn'=k)\Wz ;\1g{[^~1w?{/}ny p~ ^{ =Woyg-hGA<1Gw5k[d,P!spF=]ӑ'o3#MP{NPfQw5oP=mjUF=?宜2f^_1d0?53jPjV4spkrpUYr{A՜Ts*wq\NU{oqVN䨓a zqx#.1/Y(+eyZPEՍ"J\0 ՛ ٓV=)">.5{1(ד"9Kųſۜ&NQ^sK⡁g^u&/xTQ9/&`^4_P*sVG=5M;or^b8W5;۝-Biobase/inst/unitTests/VersionedClass_data/devel/golubMergeSub.rda0000644000175200017520000050735614516003524026405 0ustar00biocbuildbiocbuildtyfg}'a)%Rvn=۶d(9a?⯍᧻nka3iw}`D\ߑvc{ߗltE]Jl/w^֞vܟhmDvoY=?ծW^moesyxƽ'Ͻ-߽\řvD9~7O |<@Z=I[2~.ߛ~]vquq/m{ZyWL x;֩Jweyzy`#ywܐ繋w,̾ZBv|w[݁>u 1sO׮O}W;}nI8[37u0󃹟~kg7{kwWne>کaߞMd/T c6xktwѓmsuwͻ=x,x8wgޛio=c }ࣷ3Y?fsKG'n-/ }7<w٬|Fg2sw{yr^F<3?rqpZ[ڇ?]>;;ӟa]nͼ{;9u,vo oj'ܶѼ|L?3yڏ;<@\~P{0x}!pxu</+מ3#< ܯ|k.ג[;G' 2`ڢR\Z~98nͻ[__t{!A׬y/߳[#8ޑ-#R;~ZyÇй|D'e70xa' y^?+zN+D?$ʾNN_ȉQᇱtۃ[~ٟۨl>{pWi-9r&ph] \@lӑ#8񇟕_ z#SOd}5$/Px3?_/ڸKK/5:ڃrܯ;2{T_zzL7MDBإGSg!-=qJ_Ÿr&Z{58wq&CDN<zu,|7E|U󁗡Wᣡ={Ne#\%,x}#9>?DΉ܃yM en_?bz\_E}%d'";گ|<{ސ8CW}])|zQrkZv>v#?vjv]_k̇?G+{9}>v] [, Ƚ[ggKεbKue^a;}&oݛ33z9w._5xd}bߎM5}3>vy]f v Gzȑ1zs'y| Q[Ik_sla6t57g}5cّⳓk9=ww=ȁ9;֮oرÁ|g! wZ'דWe^|gϞsS7޾o|m&+\sZϞ3~#Fޑߘ]YK+nh~f`%_NZiG}!/w'lIE_Poܰ%3/L.|(>Xomr=q#9zO> Lρ==FуC`_^zNo{$r8ٟ;vo2orأ?DO{[k=!Hw?e[j/>L.3^EZ_0~f >cG<_ϡߋYrDu[ykEڗzd>Nчs[u_G^}[kl^Gw;H=?{Fg#ppc%E^g%םjuyt mmKr@o7s v ^'2vKv} q_f¯a7šOt[+8ro~<v^i-:57r<';'[b}3WÉo}?yO.Əv䳥ם_aWy\_?8|o{S':(])A' ~8O/6q>;3W2 N.~1}"|_'هs}sZ-|5GFNnj+j?FI<1zPO^vݝq̸[kj짲ֵ{LÇ >M;YL?3[ޯ}pKҾSWLg>'3.G' ޝ m^X363{^g/y)_?;'?Gn+z<` 8Mv4=|@wBtphkΌ3Jw\|Z?s o͸D¿ޛOX~ ~3x=+ы;fgow3ѻ=m*GOܟ/o\z. ?;q=)>C>ܓJ$DK;'ד?OٳCG3ůo%l)JuIk<z~Kt/}2q~Szf<3\޻ӗm-';TڙySџb G;Ӄ{3}ՑE?{Kv pޱ/־wkr'y~=W4r|~_LJ9v#^9bno_>/{-vvݯux۲JVه^Kܳ֞wHoCzW#794 9|ϞC$ggޒ#7w== t$z| ڸ *~+EOu!- %уodփ>{EľRzԦ_hk!9==qDghφ3p"b0\^|o𿲳EONNo^c?y%8D'ͥx$.uKxe@/;t?vb5R'Kc?1{c=ɏY皿uf]ޞV#<͏|xEWߓsMBg1rz >&ѯs'tSأBHxOCM %t~"p/_j~oqf~8O!~>\-zZ'ޗ-ץZ_7k횞y_ۺރDfo.x{tkZi#m4ۼUF7iߝ=qwgXI[}ɗĩt}I>X]^N40^d"_kq_[ /:e˸Oo9to6g`/ϵ<M/8=d7qڟ]p!t|m|_GL^ޮ{pď` ݣMf|}ASi#?S8OL=cCm ."9do5{y߉:kE/.n8_l׷N γ-7Sovy ceϛᴑ8=ve7>?x u`||9?B ~u17gS3yЁ|خ_i A7?(xz ?5v2zc2~v+'?,.rqnup6rSKFg?rS[ q>.־nnϗ}P~Dg<\i[nX3[r޳XkBc<~쟷[8Ϫ̳]sxWC?inYpze$yݩ:7F^d:w`?168xI1.|7jc?_xOٯc/qS_<)8,q-;0a/Cwt#c䱔߀C~xn  N/E72&^z섏>#則վa7:~7uȃDqV^7~?\ ʗ'}s#^)+2Na.t8-;| Ӕ oyOТk=!qw?y;_;_lSuPԹ!t$? ; ~5yC3h"?#hWg-}G3.;G`d֥䵌Ł'>$myJ?1u?Cq_^޶g\ɧ$]L+/~-d3E: _ꔤt~_Ky1D`'!Zoħȹ|+>b!N><6^ݟϫ{%?.ePݯ|Tڬwk:MQK5N$r8#;Kk~"xeAwpmU)OC'hi1O񗲇$y91uS׵F ':r88gO9>Zx7'#oSDCw ^S=U~G森#9J3!r+#<=6qE]Mqf7Zʛ;V[):~$_iV&;)Թ ONk 4.yS3b4ω+*}\Ͱ}P^}_O_p'Kz}?|>{0{fUr[?ed/~fɣ60zž^G/}|j4כ/9KHpE"<*_S~xN~aoc׳^ >km|˃:{aSm<-sJN +-{gkZt"Pq;ǮA`s,Cq%uݭ (qҥۗ!X)?N>#7bo/ =7W+?]섁˺u& ?CW_i-;\qCRLj+V?\|<u##v6^EGM.G[/_ߜ6kuԡTgrGj_#i[wѱاeIɮyg^~_|[[[B]|cy?>:To}q/y}'=|KOS<6=d+~s?l<<-G>%#zq/m8~yHg=/9;ɱɗW;G?( ^!^~j?kw)qudm_L]~ƕ8~kpP 0.v_I^.ǟٳFR/pƓ8:/M2z5jN/Ճ%Q_@OD8r}՝C7 4dO86goMOXuy\~~lCuoyL~pkeY8){Cm#*T}}eGF'}#.ʎkY= n(;~xvyKږi~ɑo^~|<r#gfB^3k-xb?}x:vݜ/%_\|߮+~n/9ꓲwBcّ!?8yXp~81~(^<'"oƿN/tsi/>_=aADfch";~?|pZuwЧqȣJ@1] ]60:i.߻CKuxcYmn9kzݷem7Z+.7 J>U q+ߌOVOoꨲ{s=v9zXnϺM(S0.\ͼ_RGprkZX@zT}/<=ؽz34#Dױ&96䝪~ =7w|#'u#_^|'T/K޶<*|%`/Cg Oa8y|o4?0Z{o"9~=yO&2+7]|'8&[ zuyp~5:"oLgZAʫoo;@yGO+>KO ~l]&mES5Msx_|ǪsZNޑ/*_</3_J.PwOwR +KkT|xOlķSjϑ+?Z/[D秡wג!NV)< N꼵QkRxy+o7sv7='Z?煩R&/5Xw_/_zԽ WGBἧ~,ثcDΨ<@s#^ 'T+ݖkpoKp)zs*yh~]a'YԗWoNR}vNnY6\YyG\s*|f%u6f|$RC|G9V%'~vb!sCrxS[7ֆV r_y-&www^~~R~{9 ];o˯'zyfFY~ϕg5|')НiW;3nvŌǪx잗BC:ݲGikM00V֢Gc'=vwvM -:>GFxGOGϭE??_{fW>[-q{ ޽_3?~_Qԓِ#撿,gCWX YHu| ~ωˮ|蛷9su#+Nk5?ugUzGJ7X}^ޭ-yD汥;ssॺ $ r˱?_~LN.гk?'oʯ{.5 |_}UY~zy?ϥo]o Sr*{s&tV ǨlV>'y9?/|0pƾ<)Ү\oZr#3~f{O'AqrġuNH϶W|Ky\ h|Hp߳ ӫՕWρ?܏}+|0yK7/#eG$olk>|+֡+;DRw*ުN"#T'ZwrJ;y^^q6q%r py95R7b@SYoc soNSM{_ |=&E^} );m Nz/a1H_Js<#87꣇߮S§SKLgQNF.E?^y6z#]cɳ Ng?yi#8A>uw'4sz"YM5n9]܀OmU)_Rƞ^?#>MOBmO<\.%ol&˜ ~HK|̹Hbt\oprαWNGCn9KI% '.o?:|\փ]~I'ؗ3#f?Eyue|\GJ>]ſwmu's[ ݑz4DqbwgD^9d7s:mrcu煌N*}ΤS{O'7?m]98}>q97DSAn6˹u-ε'݃ BlSzkO.Vv_|yO1O5O'w.\OƎ>7:O>c2[" d8 b:@_e}''wG"߅opv-(Z;&??9;|^m1?{36;MOʎB?Bg#87KןZ‹UXI;,۲O7d/r߬&nޣ҉OOq'eW2yZ Z"f萸7jqyNUO_(u6ߙo/cxFg={t4' Kabp|8ӭ\oN]ʺ}3~OvF+9a.w<|Rꕪs+|]Y5ߑP`}:riYJ8דāH̹+f[򋬿s7S?Iz?x&U\Wί^}B?[sOz2pw[v,nf%|gϟ>SD=;сvq=㗗"nCޮ:h_{bعq WOyA; ± y8u-~?VbC/-pa& Nf5bߪޝ!>qt#@_3寸ƞU$HwՃ?5?a'a99'hCc3n/U_\L~T89SwG/4-%+Ov2ٷ[vG7-7gcIV8f]wߕw<~Wt 7t<_q'فcÅ6>~~1rR> ? /šyz%nRݒ_/!v)E?yܬNv_| mƗ<“ʎM>@7G:yT}$y1ujQΝ˸ #ϰG3T9nXȹ?˾Ϳa?w=g9Zt:ztׯĎkWRgMLЧ!0ߏ~K";^/Nޚ;8}O!.G}I؝We?ӾVoO)Kr˙+bu:v)⓷>}9k{id\7 yPK# ~̢=_$\B+ =|_g˛|>N zm=Ź윰޺|Sr~<#=cҼ'C'pcx^:9 ߑ..j=謺tp6+4vy3oj"r<"?;LNO]Cz'`3:7lA<k7wz!>_~7ޕy8lC;W}_} ueog&w9可s/3> Wn/xH]K˃6>-q9׾Ic/cG@Ư |%L8n>TL~[rxΌ̿s>~ŧ+i8ѷẛ)iy5@՟EF?U;ݒ~ɫy~'ȣxFþ=~O@rf{Q./k,ߥ]|A8:O2>v.uZjŒ?m&~>R߇k'q3eW'T|j'M;(сq? Αԧa)96Ù?=μw~v[wE }|6 ~Z z/Ac?q[qd=!B\\7/OVtTēAYgyt?~h+F;+ u OG#4V/d_ r~"g{ ,)ps Uߠ+֞7|Vo!?GJuJ}Mn0< .-z{,%\NCy^<؁s_hwջ^E^FاЧÁ9.Vd] / Bď}3͋#< Q'o=/8P%@SG}K+#̺_80vzze'o.o K/t~~r#}g}u8e.D>wWru9G8JK1~v_=@w3^^8AEccG|-_{9~]u,y Og{Rƙպ+xW'E`|}a3{|Һkwأ[]թȸ-,8qmx^rg /`?;AWRb}Rg<|Xrݩa9JU豥7Ew S\rϊMYO:'6ϡ~KϫN&Ε:f~]"~, =/}~DnE_Y}'G?t=8>}dZkdZHzzxr*/ͺ/v<(~_?MoMKwȏ|u*1ú/㸐$뤮e éÈoK2_EّE~#.Lx'W7G<| 3ïk7דY'~'ߪa~]??H1&N湕~o[sKfoo8ޢ|7u-}l#gZ~FYȋ΂C^w|c^q)j-/D!?c>'m$s_s"N:'xiPŝ /~y:kw]y| ƇվR;tS]iyO}zsxosMge⻂Dž/5qgYeCM\kXG|ݪgC9_%_Z~OdG2B^]N߁8az o>Oe-{/O]1xϿxŹW3֌G~4Q<*7oYc#|~G.uW?]%;"aXߪӵv"Pq2o9 ~U_Hݘ훼˱0\m~WAoͱߋ[\v-qrH~ʃ<~^C\j<.ǎN&u?|JN/gS6ʳڑ~P\Uz)Gԃ(y& ~|OKВ6Ϫz:'#OyM[s?yK_<G%9Q=bi'V/M<K+}y>z^ Jogl$-9|-^;-zJZ'tw#.i}_ٷ c>CU f/ٿC:ƅ<͂||t<cw?+ZH3㮺yn8_!Z҃M+8Am|OoS!W&+\~}&R?|ޓ>n+$JGY=p`}ȟ <q*7Gԏ-ALrFշ=Ӌ_Frz~<㯼<,o,=:rxFCO?y[~pc˰ZO޳2/yO`9_P|( }cUם]9ܳ[Ld?A|?\NFx$ 9|Y0cYwr%}UwxнYd.: ~׹[1m?vNsr:h)fF}2/x?5*~|rq[Z y/|zGݧ qp +u>o'E~|Rax Ғ7W>O6ms_=m%o[mBSK^r2ٹEGthQuo:U@%hg]S8/mq\BّFٷpX? >@ÇVtwԩGѯ+>AQwBF[PT}_84DuǾS }FGX_'oP պ/O>o䴪8*t~5k??~t W~%mͿwF,7뭷>^+<\zټ^@e~_]4r\HD@U:EeWwI*`?@fș)#~,䩫~k =_!Zg~.߷ C}KEzH>5;l%GW| g /B*tֳƟ<%C瀁O9n&>)8튗4^R?F??o{zKM*K=g#uj?;W:9j5G[*nxG}yvͱ\'8WMu8oGӋSoZw΅Yc7gW >ř8S)q1M<'?_lq_[ʼn/ԃ:sSǦU_??_q[r4~Ccx-Mk@nLq՛V/_IبO9U粨si}SO)qJ_i7|Ca+ou^BƕuYu||? ~ܠ_}2̿#YG!4]o%ُͯDW Ի7ɳ ǽ_l]ۜ)nyy1]q[/_f+חwe:_9 sc`^BKH=WccDr݃] ~}G(xsQb[󜇰3~u K3_?18O*!+~Jᗿ-o9֯]y[΍ӛ2<|󁫃:WB 󶏞ߟ*>_kS+>=fU&:긡v/S~ k}'xo|S{η:tّ+.:tAVsMw/gCc AMѼ/^>| yZsX_o_ugS|гUWKWX!ɱci)o;-+Ź9|u\;!O_0n|PӍ=e?3>twrZ%]?/r/O/ .rGE97yy^= t ^*w_!r533[otz[_= f [+C;gN_w;^9]y^_!y;'GUļGїGRI |.g_=HTG?ω#x:qzc]SƧB_M7sk7zU,u;Mszy?Luokt}b>n1G˵tҢG}Ĺ_#r{k}"7{@M~s_82OzU> Ga'afB硇7[:E78O9h#&D9Ncڸ:95z:=;_5I\ow}ר.n]ܲZrԋϡsoǖSHi:3`]շ˸W@+]"w-}+e%F-Y:I ?LU8qe}8UuӊЛCp]9E9~OPxZo[ǡ?}PF 9|mCZq;D}患{!qKa`_l&ofsao|\=|(pZm~_r 'u F;}K9/b_K{3V7f!|r2>~^Nomg2/D•Ɍsk^: ֽ2X?7@/6T?93N^xiuJiPw^Wp nz#Z ~?AC|}$uȪt~V}6Xgt}T\hׯe|_)~ݟO$ ?uQa$@_RW@u`pVuҏMva{їWްB%xُЭ]L@Gq##nǾ%>m:HN<5?xh~;__Eiu^vqԽ5we=u߱[wЧ}wѫսǥ^JoAOoJAXY3\Ggꖢ>B5:CUqIunhk/}9ya`4l0J{=%;!sVǡ a?JqJ^p|?kI3^jKK,7359)͖{!㣃VѹJp𝶀 Vs :OJ8gO:N叙aHB ٧UeS1W[\د?e|Zuޘ' \z<7Z>uJ&+rn}|2/3׻ӯ<ީ6ޞ|~% @'/ƾc<4{29ч[^Uz4曺jUO~g8GFNDGʏ<Üg? 3u.Zkɑ9D^-'3F{/;hcHow&uwou!v#ti5mc'W6翉wW9[N YQ҇*_=ϯ/@έ<_c,s"|<|[A^sP_WA]ok-X3z6=??~)/_Kuկfl໥Ϟ}g[NѪeOO ]$> W%ߒGoj_AMmŧvg|8an*x1ȧ7]r908o=;ש:1kQ?P<<-^r>*?z9>Ѩ:,?E3ȋAį㦱v}9*؇}O'[|c<ޑKoI䢜[tL; +?w*5uSq7yg;̇\^  ʛ@_8 q\ߝ?Oߢ ޓ_脺!T(ݼD։5jCxkσmm^_w[zfUL[m`x~/л9Ow&!NWl-KɻX;8K.$';dž?$ߦ>L zĎOWr:1\&ߡ[: Q3vbv2/]yi?vbyf^M˾Tpf?Uy KfvgS_͂'p\oZ'tF}Hs>/:-jtMsnxuwL [2_\|N_'OnGOo[䛑ߩ[Qz!<|x_z"{ċwr9}>}:ܬߋ罜ھZ{"A3g6އF[=oqsza-z~q ո;:. 9 \.#Gs >|x \O0$aU'D\8{S욽q-|)z? >ҟ>3ZO!\Ӈ;^NU}t=b꼎>z!Q̃oG|E=u3K'JLLwTaQG&c]o!℞k}?uw{#ic/9qda7=֮[~ziG[||D:O}"ȋ =r6u]r637=ʹ-]JsGTqo<>Tq/_]3vfoŧC~#+nLޱ8(ŋkyZ޽8|r)%|>jk+-߻k/|% >C>$?wX:t9tO>}e1v @u{$uN :@vU6wuJ/p9 tΑ{}y,W~B~V\zt|og^O$'3'׆|tncpTMτ8/w-=7WGw(CGc/Na:C[G=};t/9x] 9_Vޥ7|dU> [S}|{^?v]9uOۏŎ][|4>O{}>;\p}'7#gΦ;v3~s2t(7rr8F^SGT~}%8Cf?YoL> 3ą1yxE7v8# >nel|'x^?|8:xyuO53Ɂ;-8/+~9v[ 9}ǯFV5M#3Pw:SOg^/o>L#)yy Tܾs~Ι/%+x.#tY\}ܐrXG$~}ZsdS/]yȻ76qM2ޒ3P7hI?G_A_m-9Y2~KI|+6We9d|V}<̏_}2r4D~#󁷁.=N}>f<8]hǀWm_|]|!O~K_Q3qU~u1{9uV";nƞg]ÏdBGw`?{Z?_*<@O3vsO³ѳ_T^9==cTރo};#Hυ䗰^:"Z^;DƧ^{م豾Wy>Cm|o̷@{>XC3C N";Z|==FGM㥗Sme__rkZ`qLo6Cc9Tѷ [{+7Z9y.] ׂ=O7Z${Py<ٿr>M [vg9jc:eg.}ё_k2z'/y:$84W^g-;SPԗZ Os}wA~—gĎ~J.Mw;tOg<||}|ϸЁs&^[}ru@Z||d 5uؓq7˓}v x8\~;ǹ꜡W;p*>+ ~s߉_f<_OgSHu䍢HZځ[s >]Iܓᪧ"~_~wM^GPq{󳅮\y:G=KU~a?/䱢BzpþWy8czgW~EX'<}k9ɁnD3F_~.|woXGxyo䰭>an({q^Zߒ8Px1 z}#r1ΘxE2?>epu8:t|/qWCSG_[E~టM_^qmDo_9Iz{U!|_>ޠ@ȕȁe}U%!"+ٿ.ϨzO#ُIyz7fՃ.s;M_Yh}ւͧ \-ig._+ߢ GHy14:&Z'MM7ߗ߽>;mfi4>{3G?W6Ns.8GӠlo?}!Ǣ|cW ٷN R<+xZv)E@!doP79~Q}Df^Ӣ|x9MNn5^|U<[ޣ@799{轼V돎/^ӟ!S-+~`cQo^Cؐ}?dWz}VO[g=j}b|c9Z8|#z/E^:.}?z^}gVa =P\yS[_<7z0T7Fr#=\C/o -{3y\wh"=o~a>f9'|vS|M?Gx}h6o}nE~N 떿sgc}~SY9s.^y:'~9[5| sk'^/>:FYOe~ԡ{Cԩp<sY3^goɇm[Lꁀc^mOsy룾m?'.Op|qNb/RS"zԅvg:V=5vhNd.r:_vv94Sry.kQGNZOpz4pK.%o_xh~j]kp}|/uo+{xfbWS}z<+v_oV翅/7#tO萸CxOr5ھ%A7!߹_'_y\twԁ'VW_Οy̼2v^u9!'r^}pA|'|C@|ׯ&.Bρ[Ahuh-'yp#֞ }FQ>ϓ'_x'uNR6q׃窾8W;cy_|~buV}>9>L^B&:代y"ޖicHZ|0$~98sn';7x/=$+;}=yͷЪ,} %!AS叶Vމ'Niߟ~ï{qASOX(y;=~2]zP].2{/K>V}V7~9~ 'SBSb|^P%2Ŗ`m9u/Wo\~)#xk[ҟuΏ){8:\zO}EqO|IA||Jm+tug7ٻaDƛu@W2} <.dc۲{ٙf_1y?QW>*_o{z;yy1r\~WyKDVSWܲѫ>}95r#c,KW 'Va[۩JDc$( r4IlB a9}{U#r8C WIː!9!EIdvF(#qӼ[s}='gYΫ`%Y~7~(w뗇KGY7Dq\:ѫi x3~K>{rϯ}0>^|CGO>df>]џt=;$߫I?,^j|Ik3Az@u[xl_:$<﮼w#u{qom''^+O e|˿<ׇ8/@Igz4㸒{όC[q^wy@gߺ;cS!_ ?}8䋸DžgwO;d{oƟd+ov#i>~@ ;yC~gϑuͬ$N|W؛[Ch},=9%rC}:ynMGCNn|A~1s^g֩@>$=Tw8|K}l\E>#B^;[c/+NkqW/x;/ӟkwgpŇDncyU.'.r?w>Ϲy_ޓT_~ȾC/.WCƉ_EފC҃w2^C@>(b99"WgP'_O #G_?>S'ا_T׏nK8}gG7+}CooG\'yzXf]Ϻ_J._79u:gyρ9N>Y ]zߕ]Ϲ;1t H]'~0(eMG?!jgK;K/H^c);/L߇?.kN ey[גu'CG/'yk76C7%VZI;7Lk?<\38>WI|B~|ov+|? }qf{Vq'ZYvyfqfpwEL0rNyE*G"v4yUɷv>䷈+/:ePyx~*x;S9"{nB/\ E?g@g5^WO߾?1|F`;[B {t`Rw~FuK01E~18{YqNof;/4_g_ g3S&>'=os="?kkOS#|,s0nwۑGO/1틉oD~f>}uu # ^{Pdч+䇿Xe/1|u:/}WSA g9y.>nxxdO$o\xE xm}}8u&oc3懗D ؔ/ߞN^r?9Ow`u|֧>B?~x?>+wR=#.o΃G'O|{ ži BSt{5wůXJ˹<%9/1Y n÷׮|;ums(,ǯwdma^S`_ȼ+?'z<a@{_ZrGƕ?]/=B]i暑7:B|XG =ow9y8xq8KLρD?1o ''>~%6[~ϔ;Ͼ/fU?/MkN-/K9瘿79\t Ky>?·'c f?E4"'ȡO.C^6cg3}V&{.'>C>iwON~55/.<:W؟68ȍCeEGfgſU*9_MƗܘw֍;u,n}~{;:>՝}p͜7ވ~|^}#pWؽ4&|~$@8Ca7~K?9WkY?d|Ɓ~1jKӁ̟~Ə[g4pfy᧳sY?nG#eMqrn7?Ɵb^91L$Zǚ WMÑ_ 6K94<ݠ:?䳧r9Lǝ>wߏ3=K.L8"Z>[ӏC+~ޞq)+C~ea5׷̗}:?K|gB<.\x Rg|}xw+WNMt8Ǿ?/^yMѹ9yw#A9X ~OG/mιd>6wX/y;3wh%CWԥf>M_{y_;9K^䚸jiMk>Ջ ߚ{??'r$zGH_u]Yy,8y?>ߣI} n'\T~ڸFWoTOK~/qy RޭZf@zB4neʭ^^JG?m'vwGMY^~(yF./r>_I/%|1uLY~\~}ɂcڼ 9W1u+WߓZڋ]Hrj/;SOhiSA.?g*,ޟFqi>:O%? p]9gg\H]"#WWFΫoO\^ g x:o<)ɹծ >`pe!r⃫z#xk }Wg7+_=;i0(ϫufˉ;LKގ?嫋'`|_:8=>u#>kDߖ)?[=89}o܆'/}BЏP=ǁ+%a4ov|(܈> s3_U狏y֏>X'2>W\*Ó؛W![<"W={OKG/E22G>G5>yoq/=gЯz5gyJMW\2o~]Jyn{_=%ަNJ+Kg&_5OD?Z_i罙} 63(,FɃ^L?WwW6H{N;[~10ͳynq2nFO/O3pk>:ξW}+qn|/ۓ+C< I<ŭwC;{~_~:`;ub\b]@.y1 7щ<19duov7\ G'~[cW|%=Wx}=DnWOqs=3yt=5Zcw+`#g.Υ¯Q׷\u_g/$|N?7`]|w;o Οh\}q Wokf#:׼-qBu\7N?~.?`=cpwA~w$\S:^}tm98WR~<2G/{yn45xpЅkU\Rdo~"1G7jDn'[^~C=dO;pG/^cHppɝY~1L[XYM-r_{x{/4ysO/oCaw5T ~#VG/q:..o-"?_W-|h8w-f?|ƁjtzD꠪髀'kb5^?N-?y~fɯJwcG~/`*>nUr1ϑ~%up ੥o ]8_.VOKf]S?5]M=\+r09wf^9}?N'K|keʽOw8ϟ?yId~0t!?~ퟗy|יHdW.1)эqnSۼn+F|J\<7Oַqȅs?ɓ<~ONFgWWs>o8?{8O3~ 㹵)_;(.\/o{ ~:]tky#뜯Y~8: 8d{KM{1>'NQ|^5_sON;gᬯs"K91 ħ8n'u%K8-o}Nƻ䫱3AGg|_n7|_G||#|ݹCKOЋ탧ynoޗޑYV`w#呩sUO|ں{~9TwFR}`:_>v yg%831&qΓNOT)o0{v}^~ʹЗਟJx!z V9о?/ՁLjg&7.zZyxCù;ߙ<̛/+\P#ɹq_aO|d\9݁Э8uE7˻ßGS:RkO%\_?O4|_/Y2S'7N̓ˋw-oqe?o/8G7F}O\q?oC3m|9pչGn8,kgџnݱ6=? w,r̷ĕqOo#=>lD濷sq|YWUgrtN{-WE/QNw|8}jgѣf/ůѺ*^Ϗ§UܟuNoxڹ~ujKS?8/]WrRW#ouq=G.|M%(]^pwGٿ3(y <;_V+y >&1摤HOt:; ~/go 4.\O^zKqs߱.#ٯ '/-=%˒78y:cl8N_g;EejS^[3z|W@ÕYϭ+<,] 7S>[}~vu姕r49>y%!Op8[ ޣNR܊}{=йaLJEl9yMs^y6/fe.}z::λyKTfW~z}qygÍ'",O}qb |ѻxjpnǣOYS~JIGVn =ќsU=̯Ɨ4cYou wsK#ol&˳a~/yS}7;/So&ϹeW!y>9ވ]A9~ޝ0'?l?ljǨ[Q_7gǨŸ/zWW$= kWs{~>yO3}=Nr[GU2{=Wp5f~Wy8Wf@z5z)_Q< =OeoS-7ty>BzaZe>%_dԫqex,|н3P5o9bX䂼ӑ{3__\~1dzo~qW''/_#3?kVEs`^Bw䥶?g~oO.gIN?ȿo/8̹9$$KߍW9$?ᐺd9yudOypo!䆾-_R{rrRuуEOK_e9WF=W/\ _gorO.x.f5ԡ_ē۞3ǻW罬MG8'G}'ߑUf_>ݩ9sA^]=G'ܺp8kYa<_}JMO_=ko#ğv+އ×琿M>η[yӶgϸOs=}F^Yxt6]wGܡ0珠G෩ߘ/ GsߝyOK@:CXyWЇ>뼒臍O:2L}5:bپ3&<>Oy+l_j?ސs>q.v>B6P?Wyy3|љ^Wi4o+O?|ǣϥ7zt/|#3sWrM_xMrd= .}^O'_&Dc߄>ȃ=7w_2~]F^?cSv얃m4o=uC\;}}5r֏;}J~<卨CF{9A:܍W~G_th_ٻc=|U珼 דq7O8 s,ƍWY֋{Z@l_C[K/wѼ~y\ W/>n͇K'`G/!~߄}=A~g ^1elŲK!Ϧ\W;z˿o;:ӟG]LW^SsTqƥrukWDk=q9YS~g593oI>'gsv}Ϛ&ٝqמOſ/!?WCtu3^uy?Gu &oHy83z#[?$;߂vt,o;A!˿=\q'qTvZ98Ł'Ws1r<Yz= ?=|yKSZG=z p.~n>˾5[r<ӟ߃3H>o**><Éߛqm~;be[G"ABT|jK<'؏*x +q'Euc~dDƱ+w˝u|Cgw~A#;_T@HE"W''<9pO%io>;쯂ÈOI;hi\}y܃Ǝ;(Ij q(n4@>6;'+ܔ7\&{e{f]?t=ϓ_}4+m}aֳ9Q?2/] n>+SJwW|\sˏq<ڸipx.y?L=+:=3uFzmNd|0Ï~{q zmg?|1@?Hy$r]y{JMBEvտX;U~Gj; }O}K~Ο&.qg)pyл>=ߥϗs>^$KWk}wv{f׹S?_;y^+̘ vyHZ|V }\+>sތvXSLOu.S?'Z̃JIڃ쫏 b^ {zCKz}Ϯ/ru<7~z)>FOZg ?{i<8T9O=B3|?:pGS8{y}=kynkA{ڗ9;֝B/DW>O7`L==S`j>;(?y*GAp?KA4.g84ۡm~?un梟+ϓ/޽3Gw{rxSQE=7qZә'?̇}!w?dsૠ~ ^x~F/p|pb[?wU3{^%}u$Oqwθ~a§@ Kg~ϵC7֋=r[=|IzZ.#s?{gws§G/ / \ѷ}"7p+<'+Es?|_3[?w.{<\񫰟}O">d]BW{O~;'__.O]}ar.ߵo[缣 v={4=sor-_}y_Es:dqHP)/~ۿȩKxh*KSE_2!^N=E/?J/_е<,U:wޯ(á~K{Ğgn3o/ :?&wH)>ߍ3c%|3O͇]7zo7wo$Oa?쿵|>{+YV(㾣QnֽoYE95Ӓw=;CJB3o(4jq2osk3G/I_:@g?=>K2?/]?=69~&;?oD߇ϵ~gܑ+UGќ_ruOE^ }1㼔y7'yt(Gef|spZ|v=O}b詯a'VQ.rI=򏯿gaӍ?#E3%9/rfmq]ѫѝuVe_kO8(3z8r|wy?ćw9gJ)+gXY"7|=L}ެ>_lyo:ƿ'*ò}&%`=}xĎݟqkT+Ⱥp3-&8 k-Wy\}bDV@~_{į]?bWxls=}=J~87gr~ 9E.-Y?ڸ7e\ `|K&WY^g_Dzאָ!/8woW;7L_sǞK~BlG_tdԎG_ё89\T;7AO'q>W9o_K_O'qgiLR+/e%PGo={ѺXG8z'ʞsovO98*^{=G81=Ӄą|ѯU=.%u'ӳ֖N_)]]xF~KwڸfoyADWvI͋|r79^$KWS/$\7=߾ǥ˺?9z!>@??8>b٥sqRy6g"c'Wc;%7?7.;߇6;᜘}H~[^<?փ 9 d⡞ dz&z8>ϧ8ko|+w_{I/dr=uuwstk˲oW;=@CbwkvS择|tQ/߇7m֗}g'S=>?mr:k8tE?{tc$.S?=_]Y]ܿއ~Ϲyߗˇh<5 a| 5ӕHDPO:OcM?yvDŽ^W=2+'˰9^G+?gޕp0Xb3_~>χOq"7o<9y3>n<܉>*Y{sn ڏ ӑJ':'rIndvg`IǛTw_J.G9x"5/7}#?8;®Q>iyCOzvZ9u}eq~_~7!gȃ)O%/yז~ӹSwaZwf̿q[+uOOO[ZIx Ϸ̧A_o?O}#ϬkpZ/rb\Rd<_r!!=?1W>n&>zd^=9|+O>ׂ=}4Է~{}g9D#rsYǕ|fv8' Mm:D#@K_ȼόOޏ<{<|dJ<ןyk8[bAӷ?:>1{'CUx0r@?Q8}vgqm>Ϗ`0|<6GN$;|<?}/à/xDǙN}y{P>E/ѝ~V=, E-Nl+= r}IoT7 5]G .'QiߒgW~4|݋w\1vl׋\ 7ΤNڸ~e˯v=/g־{;j=ss8E{Wz*}^*<[w].zWQ;d<%i-3W/^gzcw},%.Bn;N;`".?`Lj뇇ic|§/ }޾[O|_+%/ԝ$Z}Tg즙\;0:No_5NwHN<&~F0C7D/yHGLLp)Wfgkynlvzzr} qN4EM/<Wx{~b,|Rnu+ĩ/3;D8_|ճ_Z3?2|pWucz8hph0 BW3] }#÷=o#ص|o=ޟ|N>Aljޭ”'+y{Oq?6^0};B+p/'s?q \=-S1{g3}y5K<= A[g?1? X\U}1= /.n}cWaf͟sx2o>AWq8G?3W:5t7}<ęjnoeakr\Gw`[=ls>?D>؛'Bgw- '  t.'86=X@y+scJ>ek—՗f~wg#~*|~q>:>[Wf.ُC^qĻc?לY],kqfip{·?8wc>H?-_߰%z+<7} C~cysѿ}hWs_+r\,~{Uȅ@_>瓯;5}?4Ó?G~(P>\.yOON vdW򟾛<?m{:7zUطms3u9{eW9 ȉƕOw[C (^:5r`o;@}ky:<79m䙱_a՟罔~x#nGhZ|yx{ݓm伶q;syA?At#Jo ϊ.?ǹ91L'(}C^u1fy ȑYbq߱:O9N"cƑ?_cMNo{=0WlE?ï)3y@f^˸{#M\:!%!\_,c2O=_ҷƺm c}9{,yy7O8]G৊ӓٟS~=roGoތ]sY%~0ơb17l=CMxΥG^zH҃䱄$ߊ].% z6z`uCL>G7z.F/}g=0qձaN_q}7;-_"9|q"Oc_y]9

z%|?+p󗷯b{("쿺hS|=Ϝ|z2vܡ/oƏ7WF$-ң{}iL:茾w v/;I}R׀RsW&{,ʷƧ7r>| CO.~;} 何o|_C+wd>=LARUs$?{ݍX>LUxEJ\@&>%_F|E5z| Nf^0'!bG_Z{ԍ W"/s?C^ӹMҧّ4k"@:'{D!1Qgz*>']?vvIqv*A^k啯z_I穋@/pGs߶3?}哳ݓ÷\x98/_aF|=?ҟ{+޷:H܄_S<~޷Ϗͼ~;xq_k;v|:}J._8y.ybW_WI?0KW->z~XupoV0 3aG8OGɻхs?M#84ù0qrk?)􁼗^OGN/VL=ye3O~-qLto$= zwvztsظ/͐ 7??33|援'~9zU5}scsc/}UH|W㝞L=Q|o/.#[^<:Ugeqܯ/${AݰċoK;} I]EP Tt$z:-oy(D }`G\%?_.~1\v_swv^0yKu2^53=:qùXi=zϙUp"?d߼7?Dnߜwiku/~~} τJOHV'loңgiς\ l{gOǛɻȿc׼gW_PػΧx~E8֟|WW˃?c/CNqi6><5=5z\Q\{e~ǏG|1gWpBSgCWK_"K~q}f+a9-/B9CoaC/|;L'39g/rպ?}~*];b̏$~6B|s9ؔ>vO*\$y,fu_kyDz~2>|ƿyg gwG98;4̍ϭ}|^OZ;AGpn+>^\cS>CwW4z&:rc)uI>?^g~ >u?cNr<=~y'Z>qCsKTF^cctә_ yQ_˃w\gr]Hl={K&i޽2>r}+>N#'JgQޯΞS7rПFCueN֟N{tNS{QЇOwG֟~L? z  ^Y?$~eW/H}A>8z_w+w1;7Oe<8? W}!qZꜱZ:~I )~bq2>/|)sW=|޽:@.B9r~'ek)5bڷ2ksǼǒ όgiQыQ>zݞS.|5zfhv ?Drf{$~B? nr;}hbɻ/tܐӣs9`ӫox4?+ TZzr仠xO CKSc4v2#7_c~} Sa/ˇKU2֡| ZyuH0:Vzsm|wvnlH^KS =+9]oDwt>dg j>Sh\맾0cc]?ԉg4}2e^>2Nqu2r 7^zGoN39L_:_jӛ ?G:֛ʣ#5wpVԽ_v?y_y|VMk$-炾N}2x.3#QYuY8/.>wz!zU?7?k,co'_.$\-pFsNӗ~yyuR/AkPX=8k/[/h'0tzTy<1/hSzy7e3#]ރoOg揟Gp.NuNY'dhi+sU s=t(~%ΔO7oy~zȏM3 ^|uT;?qR)p6(fXO%ϗ=/+zą;7|J8' ]sɟǍOƉNߓ+)⧫o3~:}:V/o?~tc rIN"^^}v~8}wzZpͼTw;#Gc8MX>?_zޯ3}G'?~? {Y|jx8+@{~qqrM>2PA9E[o8kK}ἒcĽw'|,E ΢s.^{ا:<1OS/Ջ?|౶n|GTה.u7\W=̣G?y7a>m 7>k?֏_ xU9:<\_i|g{8-/l=_|>׳C> ěġo$^:\t;;#dpT%PƉ&47S)v^ƕ|Sj~Vwn3xG᳥kz`n!h%\p їyp"\UK*rM{#ӫgV4 ۗHprnwS#y.?+ 佛 ۏ2|y;2~=;o&oe#Wÿ+G_f[|x>_ |?|`wysdë7gHy}c[:prc777[yХ<ѿo й<Ñť'׵{;t7xJa]]D֓>ھwy~&Od>믓~4 -o<z?.~xp#Ӷ_!4_/ON'j\fo>cr+'|:v>`evۤ|=<畋g7S>}sٵ'3^|^G{6>vu}<F>4BOLܬuSwыo+˛__S ]3csu,_W*r Po$o9!'̟]ǟ%ADGm~Q'[k9=l3j[_syb1HTtF~u÷gy֕~\ zݩE@G;Y >? ~j;sHgvh;^v+b\mS1'?wnfzA0_<ߓ>@?qg{{H[>}Ɓϟ?E} {0\r?}E׏ŞOJ?~A@\8{Rz ;zw/}P|_>ۼ*˕~M?[C[ʇϧ.|O~r<3^x/r2낮wwޟ'_N{_p>|&r?c^:Tܒ{ⲧ<~PvyO}rnuE.VYS>#o+Y#'99wx͡L߿o?'bbggM_g-Rsg%%Y{_?'o@ gS}] uSωV/s>M}b\_v,yD Eԯ g<1!W|}y)}BլhpoG~'"~cB?38CЉ~ r~5ށGI=|&{Oo\C_GW> #g\}Ǘ߽>;)ě?&[/z}[UD^w^G~uǁq]^\h7z#vG>{Lu T,9y~WtlY:Z|k|VW;{ط/~.>F/ѵaO;7ok;w{HGI^s7>W@gu FA^<ƍߛW*Ez.ț nry:deh|w7!O'f}Z}&zIYԡ=y8PߋLOe~:U8Go,/5~p:##'/Ѹر\F(uP0oqU[+XXW? NqAO_^$=q޾%stw~8&ίNd^Q8+;}\S]C_}+j_Hz\9ϠGO7F'ȧ 3/|G>9@2O=.u+4~|-}cߋ]{V^#3u*#/|iO0 ?O{==>a23|ʵ8Jםܔwp.F.ܕ}u\F~_~_HVU\Wה8u%/A\ }[ᓙu+%ЏKcrFp1 @/|Q~^{{uQ^%^D N;|bѹl}z657807=?d9峩l/C$þEzzǍϢyojXQu_Wѫ7C_gƿrnk':Tߋf獽_c nX,z?#{ள"ʧoέ/w4 |a3C'%~wo_nԞy#z t\ƋOʓ߳8ߋ9iSΑk3\v Z_IXWIro۱ÿ3+ӷ11w~k"ܼ5`VFwGw%+;"=U8ĎR'ĵwO {/,_?c?aG%Oymkﲟ?kb?sEŷov^:{L=fI>9\&g=g߰||0IUY<>kSrʹ88wÁ<_q?s>:蛃Ou ȥOe9woqR>s Uυ۾>q_uo,uEGCwOAE'py;N9DK:^r9sϏ9߂3ߞ:K…_6~=i_x/;=>d7+g]Ч7z >?zȮA-O@N"\uS?a/<ԧO65Q~1/Jޭ9N'_7>]]9OdK_A;&/#zc$O4>2ۊ<'?{/qWXIOV޷&n8 ׁǁNb^I]-|Eta_{ӾGTNN>0p;g|&oN)+Tnἑ?ឦOl|꿒'Pf}8YlCRgߚEt:_GB|do}96^ϕ3KW>sbMi+~r̾me~Gsm&W#Zou>}y%Ӌȓٟuu/88V3SqWKx^?'q[-ө <9_ÁƗC|yNlBW3V}Cq<7u5g~z Z?z< wݛ^W|_{-+^"e{~;%#_{,DgӇxN?ZwtWxi+^.N93d8z3:'~poOnK+}]G~ _78{zۇ+Z\+=:Yw0tYv7 /:_̋~Eۑo\K>t;,O^@ #b%PA!-'B IJđ H7cl,Ծ/ګ؞agzB!$(E~==7~&ߧcO~+v2}ty&zni%w+ox;s}Bχ{o3_;=lx$:}޷|8畜vg~UE>Y|]Ol?x|VE=u{<ʿ͝Ɨߵ=CO;'.+D#Nv&;k|=m?mAGs-g{oV;wPwK>1^78ƾ- Cέu&GGM}[q>wyV|G v X{qǷc7?JO16/eOW\^O^G وO?uFo|:?;Wu- }toį>>t+{V ȹ3?|_:޼NbzWOXgzg뗇9\6z_ݿ~O.i;Nɾ~IX_^b|ȾyBη%Ufsoވ '8bΧEΟZ;7=z4r.Zy=S|< E4}~NO#Oᣟns.ӍU}>tUW!./!ZOCx _^tx~p!3pm>2' ~>u+GygW/i\$?>HyDN=@T<^w:&~w4=^ޤ<|гN{fusӷ+9,S~9&?KF}5F?c'.\ypiÑz)_us+~:s?bvȹS#.S ^2#_P}>a]N<;nyoeG>y姯kt ^ _py~vNŒL7\[pVf_wWroV?X6kߓ{n'IM6̿PG,#x4߅7}Z.!oI*.y؛?\<4},N}yTn[#o}]ɧy~ܫչշnǺo~^_qmz^d8O8AQ} !tgr멗G<~ LHvE`w?Z}]ԁ<;\|C{y5,USG{ox> KsRgw>g$=~ PK~~;9J<_Jo kG=\uUxgWン:Y #¹ы/9gG{uwGq +ޫO:Í^dO- -Okȃ9Эxx|Os_ º]*>;'h5ԏL}GWC K/\J.o ]e'Xԭg|;  =0{a|χ{xة?%_Jw<޿y+gsP'|v;B(t0@S,P[~X֯lW>vo?wO8&^/S~ ]N"?O pMg;oS>R<};*;f ?@@Zt[q|Pх:kN5|xʼ_f?3a8sm_OcK^˦ջ-z=8=1?{]=yDGIoz_2][G}wo_~wOObc2ܣWq~/.%Q ]i1z⑞;{+əS}Oq 6~N~Ƕ7v=zϹ+Փy?я>6W>v~~7ީ^ipqvo[$6F1/z&z{~O|󁻀]'ٽ_' "?j< ^%j缟ާ/^)Κ=6G| 7_n~+;SO_|r.5>~ &yw]|s⣇?rzU ȿ'6t},vp}~񏮟맹coM$_] ϮΞ:ՓZӂ NGC?Cw<='X?MM[D?\r;ʼnOLov}zx}/=CooDs3bxW0KkKk}ӇE`Z?I~Lz.@w!>[+{>[9Dzw)R^m}Kaޛg@uV9y Oiy<:ng_=ec?=NƟ@{jo Nߠ~Lp?/Urtcru Kwϭ[Cl󙿵NA:\Y~û\9TOI8>O܁>icw=zBչap"__zՇ呞_)|OqWck^|u6;>Tv Ã'+9N5~v"4LCz݌^%ˁ#u6'nnh?}Sߖ3`yugY_$~5zqn/'w]~=pT Nۑfwˡu#~虽v& >yO3C-}r1;̞_0yh_7>9w{*#G9W]b|vxc?w7u&>O)OB.;P& ӉKSz=ݫG0_"gZ/8S7G_yCxݫ_=zرVo~/D?q4M#/"iN^?̓[ܜh[-;36oU_H>}?}jw>Evw`V5gGL_C!Szq]j}G9^y5$j|x>bZngDOmg=ycd^6vMJL}[y2}>Ywqݷ:׉CGRU~)zv~Ɵ羴^'F'[?~zϫŵ;.?}]ĺ?uZgz {/J8y/3|tnЋ?SGL_ߤ~(=syq:|z9:N<yg7{F뛟x9Y_ԱЯ#_ǧt8>ԯ_$C^|y৕wJ.M|o7[ 7c3S./rHJk軈^]8ç|??{.W;\v.|}sq8zRw}䇕0}cxbOZ/V8\S@?п?y/7:gzI뉟2x zoyO3<8l~9<~wSg嗨{;{]?C_ Az-L>歿 y }lgm>mM W_0u҃[8v^vU_]R{$d}:guyi;'?>|lyLo{Θ7Z+#'{4nUW Nz%G]~ҧS}[˫S/Ժc8Wؑ)U-oؓ/_|u_un7o~TqH!7Og^^Ƈϳk;';ɛ~665=nM_C|ʩ3p'nsV=O_;Cw|`xNbU؅腟IStuѓ} u8/Z?~V B*oo}7\ϥ߽ r">ysR|Oq*߀^S7ݎٿ}b_)kޟc#?noKIj4S^Al\O==vez8[4}$'>IO8(Mi<]ȹ_xy?>'Źw^cu{x._uг=>E'֍:O]#=N=pϣ=;ry/K?Z?dL_\?߳w_zsׇx:zG3x: 1~cu?U?عP\,OϢ/^^ ݱ' SaS9u⪇o.}ӿ&\<~&uZ}(=__t7z =A>(r*Wr˷>8gpTy_ǢC s^9a\o5g{>䏫 ݿH~|~Ǿ_sğ8N~6/o:߷D;uw|ygO>y#TI/L>&z[x,w?V |ϼs{㫿p핱mZ_6}U86_|k} ~!{]|6yYIsASvZGqpu'B/'ő7b ԭ/YOߣ.&~ G'|}\>}Wcރ?ЇQq ߄7xi'98?spX >=t;_ }Cwׇߏ^ў>Bw'7񵾿r%i1=M/?,};Y7S\ě+9u뱿q=}p(a?|ى>#.?@>[|ћ'~G}Ox`8'/y>r`sѓ8 ?: &^y86P4} /gM߃;O9{SVss^>ArKQ.׫|e#Ys׫|~]?`|nZ_ő'O]X/_߹:'gNqN|D|g#_S^֍[_Ƨ"zix!|ϩ]1q1>u>jyz?_p䧈GgKyL?w|>ƿoyܼ5tN+w%3[>{|xhwu׿~H}pʜcɏu?\#FL{U %|v׷Oo<]:pÏur}d'?8?CG3 Ofl wgJ߽חz\O]u'Wj.aO雵^q%|ҡ y"XSs}>ߧ~6aK. n׽ U>퟾J[7y%ǝw=k_6g/wy*@#o@߿yK׃/7ogtͫk?^>:a''c/70m9DN>` 5v}]_}վC}Ӹ ?b!^xl]ess|z]:~Ar9ߕ 7}>*yD;N%IoJzs/φ&/o4o^ZCG9r]II('>y_[yMߴNҿww_Sw@'+y7\=zό_e:v{:9 ~E+r|ng{ߧOm-[I'7.=uk;<8NCɥ?_pG:S#NO6y/1F~??pSvN=y=`WyO>g={߿^oe߾{z_/λutW@rzYgz<Ǐ2yR|7~6O@>ZWq_7>1DOq btt3}m{[q zz7?#;@~ۿ@6uy-|Oo^^w,/_iVGu/Nw;oc}qWg?|?<ЇugP^?= (0{]{{bOk|#tou 8}4>aރ['~$ϱ:O ?9AT6Eؑ_y9>G/{9YA|ͺv߃v׀o?GyO}x9w{<7^/] z>xxGgO|s+V3z9˛({gV`ߑ+aBx~*3+>:p;&=lR|H_ >B:fzz;gC{O1z{Eb|W3 Jg_os+}!m;S7W8*pgl}EI%?+J^9ȯ[/ s:.taY~Üp<3Sw6~O^Q] ˹:}Oׄ>zyk7ž~ :^ =p:z3~}yww%$z->#˩ 'OU#/W;%{3y>u|S!;я>{!׷/ؼnp'o{n5agic껄N䯩O '~GsӏKg#v7ۜ> GszYPyN?_L~}Ε|Q_yu#eqǾ8o_tn&O~=GuW^+}tEE0_0;!bJTn|R|}ůO~Kԛxr|z!_ +U<xiݦOS]N}Sͣ5OyB._.UQ-ɫ/I_^7qO}BF>pUdz뵺vy'ɣ)L=0mFg&'m_u}rTW}6zuS~=_B?=?}շn3&VvGx pė^WViT?gy/QɡPxț|`E;Oo':9^;MZ7}ZG䩝O'/Cɵ|x)=yȝ;(,8Ҹg!7 N:u 9N:ѓrzMvsw;WN_T%dƑ}i? :չM)[~xkeo38ix:9Gg>Oej_?v^SQWL_ Ɏ#8y.I? XC ݩ;]Qׇ:gI Nr}FNx^Qk3||Ohkώ ӏRy'ac|&?f_PWzv0GnSP)>9$Ǟ}8zѻO|+\'ڛ/u!'=gzb8x^? 6rQ|Aw'cCu}L~E&_}˛$//QH_wec;)e?^yHxM?ڕ^?Ư9wl~޾Cm_\1ۚ~-{Ы=<+/O?ȯ'Ё";?G?kJ}/|_k߿^z/dC> Ƒnw-n;v\nKou_+oyD~y?D]_+?/\(^\ߏ;$z<ϳ,4.i3;1'>;P~ ٹ#pq9pgF_ZN{emKNA!B.O~OϞ׎^?b8{>-qJu}J&O&^?=;Ñk@n>'|ߞC=8ǿd}3{~>EU| U/w~.盺3}񾞣b :^zh՟d\Okp"zi}`#1ynInLs֣/VpcC?:][ʿf9/~0y7]@rY[>{o;~38yB#O޿r>|^[rS[yuu]I^<;؛V?rOybk37.i~wޫ)zyGsjoP|䩾V2%~벯敽\lW积3\RDrV^_8'Чӹ< SoA[_\w|8N*~t1}\ Y@f_^⇁̯u"Go_,͍zoz<+y Os^«<\yGyǖ5Gks?^>]揯i}'dD:#嫡G w|pDolnJYl>Y;t{N>'>==_9[U8z=pZwJAf}`u,}1~|)`WN^;|uFy_Wgio_NJYzeO7cx!k+_vr9<`zk>y O-^zco4^/={nj]eϞo)go_Sz<|,Jx?>ҋ|^IWHi'Ko9.o^܎NAE?'O-Ƚ+ֺ(}'CMf#7'~>f_ѣŗI^)%^D_Vo=9CӿZ(p>λ5rU~wNyR{r?>Sn>S)~e;񔟶\h]^y_c~p}VgĎq.Gz;c~.=w_#KܑiuSǓ/t/,,b]Kv[7˳@y|P}j?ܨNDCz}bh~ofO/i^>B~QͥW_jŲߓ'>qQtf[UmރM>t~/xWʏa<"y/fQO@˾\K^Z3:0ܧsn]W/?rܟ9~NO=xWb'}}V7ٷ} zg?zϳůo}+uS^@W"+?J0ǧ7ou]/.(#_7=?Uy_Ƭ28\u;ۇmzȞgu n| ՗zx_}{C?7?`.osyWW#8f_Co2y?~6vO=~iݠ׫=O)[=W~ePooᗯ΀_Yyn\)w\Coo|6^׳ѕZoŧ?J3`>ynkO\Ox>E|`޿^Z? Vu=_nk7~4~"qu?ɸoj=S:ݢ<G^8j7I>z2zZ³|x<'cw }>c?Oo\)otujo=9wOa%x@E+9qx4iwpcC/h9ѭ~Pp/SK쟼^z\C~Տ9'N$.r>3{y ~I<7z)<(V͹+6xsewyFG/4o'?#>?߰s#i/kr\SCO7_ĿiuM҃ O&iymc?'D=^ߡss{ʊ %vҼ}k]џ.ɛ/:_ܣӋϦw?1_]/E`߿/%h;\ۚػb+!<8 <9>TGNw*=%v&>@?)ixch|_}Г >qXyy;=vU#z.q+ŝֽs7dtwlt_#?d?#/?ǐs'#r5tBqW)O:2}7>Dy_Cn?gOx˓{8N/k;hp~p㷯bKz_|zݹ>y3[&ñ4/z?ɭm>] q"=>[Kǎй&G6XX=wtqּ:/^m:}_Nszs`G>~= nw7IGOD홞3}WzR^r=FO`$_j!y+iO@?ާN sb'7';z?m.@7_tq-zU߉^Gy- }p}5ٳ71#p@7<vq _|&7|A}+ro5^; 8sXv=Г;/z[u݃k7}=zQ4?J8Q =iz|&3?kA~3y s~ͿE'鲗 |e_Wb}][ sč;qsG9xz~N/.sdA>W6Nxx86/Bϣcɳ/[6@OS6G:zuBp[ƿ.Y?v>/_gW }!YguX~˳ݼ.'ۗCs>&=±kxfWYݕUruw~DS4q;yLޜsnEwwe_ɟ>Ϡx+=Zz?h A>^$\/?z98u5O|{?~፨`!OF񕿼4^^o9qyI}L6[ ;ߐ?r}sܧ:{ۅ|1&gwo,-/|CxgNg{ GYc/gW=Hul]?ձO ۿu?{piɯU ,.?wQGU7}Om?^o'S_ٻǚ/bp'7-?~OÅ#f8B· ={ՏkR?ɻ{yӗogKߺo^ ~!n񀓻v?z⟀#Ise[ O*G]Dݒo}ۖ擷,G >N|#/^)|'Υ{蜝O>=}j3}zGW9xLgm.~<Z䇀_~v&~|硯YcS[͏ :g/^}p=rs5z8蚼nk ';#+T_g^_;>ҳFyu>qwkoV078_ΐ|W_#$N:}]/ubC,+9ʬ~DOb{u.}qx}kř76P_]w ._)_w|d~~rkkg}cm7Aɓwp=x]Ӈ_zpg؍ġ/ ]ǔ㯄7]c~SrpOdǿ~vI~yrioA׿N!-X~Itώ~U_˷Hg?.ylX;qSc'= >:^q6|x|ݸ?<=pϧu_ӯޫ~)zz=ӹ{>:gټs| ע>{mwtv^>>>jmps]=h7/qȏk>_|~!븖^7򇲷ݢ;~+aW8RLyOS' =~?Yj|ͯ/))e>k(ս:ZY''_w}uIs}^Dp9:Iߙ<ɣC:g/ģpL$|<7^#|sʛJ߆?L_u#h?^ zɷ;W?<|iwK8 ϫ>b棾r-yI.e,q-" S\^>vc'׿/GDZc{]~#׭~y 0N_# wo~r//v<9r|gkc"?׫h~M;2rt_O}~k_W~6d;˕/oxi|1}[O@&A_$Jyڛ/[~'ހn_28ބ_ݯ'#s%~8_sW4*y^> Cay,yׇ ~cGӼF|wm\Y툅tvw|{^B:߸UZ|j1_x/z$?@~W{cFLZ'/ܓ<{J>??R(lɻ7} .t?~G?Cu\W"9GS܇CNw d߂_|_#OK}=G|`k/t}7)6>+X>U٥[kz:/u?I^յ~gqw:?l~>Br=o\];@6'g+|ݜwE}})?;z͓wz:pg{˿v~sSƿ$s7PJy)9/ODgdd䑩jM{Uh7k|&*n; ]n[J^xu vO9y#:"uD\F~, Q ~AO}?ʻϫIxSU'W#:6]¿͡{O*.-<ޱӌ^-^9}2\\tcg[`z;\v"?;Q~.u:Ykq~o%'~v~E)gʓx<'=xx'o? G]+KW;  sMz~?w=w'}%'>yCyG~S]׋{wy/}˃d?/toFǃ #fGO߱͏4yF=#gI9-ˏ>{1#COת['r{]/ޭ>K޼M^;e?~ BO3zM |G~~ұӬ=8y8+C8]-KNGl7}"|Ttk/3˘t>&sq]_sׯ ~fGGlb(;>ՑLEo6;Doe7~x9>FnO|ӫೳYyW^ё<<ǎoѣ8#?9\/P$tȇz~Dw9O6.KyM)7"+8p^L/z7@~ ɞ0(=|y O _5Kׅ_l9;^'~Ysp.w^Xc.neMlI+n፞sn֫X]\#3K.;nk) 6\z!7?Gc毯TK~ϟ^7uiӰ[^Kx3{P(dr-}o>!'Gp=>(|kz}+uwԟ|7yo$OEC?G2VE˅f~W7h|i5'YUO~UVGN]Qrh>ؼdwxϯp// esyԣN>&o~|nAd?>:[<-95~ ӭK}޳Y:z'ձGt|eaGKI~}U~ \7zCa.^p(ɾY]෡c\'K_G‡\- ?䗑_/4zaC.\ZNoc/H2vU z;˿A<:s `W_>8x=Ggu~TS.:/^O{/~4y/7Gгu뎏?9yg+GmwuCpɥqW_Q_υ~8~U3;L O5yo /gsӟ=r"/ٷ)9FQeg ^Bo7f{vpqä_{~Z q}uA;XyO.x?\Jwc/g gW{O>U/">N{??R~c}cI܌_c;wܢ{7?ί7~.r8{_PҹI^O|<-ݎ^ywg&OB>Ύ:_/[ݑO8=g^U;Ynw“e/gG>{Oh^^O A> ;xzůT7:=:|;^_~s|‘zq &ꥧVs'8;/gw><ԯPO;Í?}/㽟P~uEpn3~8k3LuOo?ʗ_HC_ 86>3OBSʓ4u>ˠW_С޷y+yio^Oߦcbo+GNxxܑ~^:}o'? uqyy[=qmKq*<"*ӯ$gO/wP\\Jr8ϼg|^U?Y/oVp_-{yco}z974Gɲ U)n?}xh/=`Zxo, k߉}Lx}'Oq[[g7Y^~7-ޢa8Z\Xyc/{{PuCLFW__[+>|\o_vWp).1x&貼©gos@\u³6wݫkk D]8~zK}y$g>iK'~_*Nq+'hq^uri86e=O`GJ83/2S+{wK/6wk@{طַWJM=DnQ/Gf+S@]l\FU>K">;';>8}1;?j99 1?A yEr^N:,^yw wq򻦟]:˓q]|9Ov#(|=9( 52tzy~GOƿ~z}/p忼Cz=ԙ=B%|/?YpF#WSwk70rד;`zn'o?=2G{&BA:>?ǧ;{Q3dtޒO窳a׀1uKS\_ӻ~3c{v~gA_/G之?>yc ^#x!Nމ9㧔t߅5xG><{Rʳ_ n Wv 5ң&^wruc?/N>yn-}ø{7_ג cWw }IWZ_k8YL|F~GM?B!m>,':a˹~^DsK ?#Tg{9Ը.B\Uܧ=\MDcF~\}_|2/`^H{ȷKNF/˥蔟oqٓ37Wʟ_]ѷHcOA1>Ll$?F~>W鼎|w[;={6g+sŏ*.0`W?6_/E}$u8q_s^V>9y^T"_ v5htX]ԛ/i_)aI7 vp|?X?#w?RtVZ.Ἡ=aCnJO4O~K|y1\{+uBܝ޷8<}&O=w\p"A A\8h#n.=OGf䀸DYc?o7BCy_Yo-M+~N]%vגVO>%`3+qN]ާZ-ϋ>x7E`{>w]t15ۗ[?oU{ou|;+RRAJ]q~p|O=RC6{n귻_?G[}rssϭ&;p;:)צ||uՉNn~Qq~z .s+/7g$yS?#Hnoc'Y?'OH_jS;S|qu <رowtno 'oNM߳KGI;Cx<&u]Г䥨OÿY@![yAGoe'?y#USMٓ ?'>+Ω/<>[2춑gS<~yVw?%7?+{;xM9cߟh"ztƿYяucq3ԋ'7o󝿵Yg1 ~l.[ _+@~#\Xu9Jy^ ν}eO'\z}|ɫև4x5n簣~6HߋO^ 3{=WA򒿔bɧCwתoaG:'~zÁO>Ɠ>Dԉ_qg^{gۄ2:_Eq&C~ .b; spD3Zͥ=z Ok>|&k~;Ts @MW^^}doT=}:z<ح Dž7@%g7VP>2f_>3$y2-B]w?sg/\^~oc~}&}+,T~ܽ.^N?sOKO`coٳkzћ٥D^޸4ćߗ:ΓS:oiv&c5&*ȟO+ˏ߽?ӏ󏭟Uįo~o~-zub=x}7DtAoGxɟ3~\+\]Wo'ߴ5'wooxϭNznɿ..18!>S$'O5z%k6_<¹QOoTޠ:s!r9u6{'q5~ywtzk?9_p>u΅}}u]]q.uM7ws6r O"Fy8r^a}VJ_;-;C[ߋ +g}wN3?^ӝl!}yY4u._āx>'wg Cf_z7{W^.No_9֏/ `ȵz~G!VE=^⃇[*Ϲ~x׫ٍ]ߙ͹pN=ؗo^3!ƗGɷpkw_ >Ùa Q A_znw}92>ڱySvVz+٭7%π]ꡦ^}N=RyCyL7v$>}};}*A}TH.\-\Sϯ~>8<5~_mF֝͡ݎnԃWȕ&|({O85io7}gkJ Z?rn!yȫ|M7Nؗů '˓?ă}:z+zu06ō'ާތ|'+d;Tk3~w8K~q9os}zZ_䟫gs' 8boT<s'>{{~vM>xf͇~KwBw4 ?uAéxyp^]M~iw}^3~ FgA/zW}R~U#=U/pacyFo?9E?PB~__#y|"~M]^L_Ko_v~=|W;ᷥ.Zgݽwš;_o<;/7?g~<#G09j}ى )>}7q,rlσxB}_kso}zi7=hqD|6_{9+_Mȯ1-?wMh{uw B>>X}9cq;vz.睜ŷf{~Go?9Ӽ=W&Ƛ;? SY|;3.~"yC-g[gz}/5q4 oOn~:ΫWhW3L8=ut{SyBA?]U'\uk\߅ԹwM^.Yvl3xKCSHS[w؏u_w/\>U yMHЧ_#zO_d\?/=rWOwl?>lcW1}?ɌO8=|]ʫ]9Ы:7_i_MWxg?߃c`/gy?SB_̎ gI\߯W t6xڍKo|=y=Ŀ5}ϥWZџ=:֯zOQ~ym][+zo?7u<_cxVə)>D?lu%c\¥lt>-^!yA|}s;b|q|6CBz=?o'_xw5#΂?K7ȅ`d!Eҁ\)_H/ \F夸pzvBؒѮ}g{fgHeđ,hv0Tp$%@BU?׷Os;r8O߇:/szexO}h\=8ҧWqow}m?e_"7:GgAw?|։  O=;=Ův=t'ŋ,}~|c)Oo$ĻN\ﭓgA_^Gt'T`xm_ƻ<`I]iݒs8 X}~r!6?yW7ʮ&@5Ow}.? >=:xCggB sk )7x;==^ۧÝ>S?=$z勺1qPܟG9_//fS/4^O#WT^h.ĵBnz.φwj<կO<@* vOop_\QuyP㻊mʯ~{~1ww+`T9w><}zן~"o5;lv>oڝk^)ocWx~?uֳ=<]}KN6?]㟽/#]G=8}ؗp5RMB| s+a7ZǷgOyS g/~7<.m֝:1F;dΣ :wsV>Z]4>}xK~[>m7i~';q+o 5v5MZ C#j=no3veq/~Kso\ꯥS]jr'ËD_9jϯ{9"} ?>>pϝjqɧ?!|ui!/GJ>]zcy dE^g6+u$٣^m3>'{>+_<㏩+|G}|琗_?C8~R'ۮ =05Y֏qy-~£b˓[wo7~{ϧvGYֵGYN_Ar 5 ~u37}%]iaWYfz{"/29N=03ջtw2}SOq='$Rvw[7}׃}u)_$X_m :w=o=yM㯘x a\^[/v}&?8ؑJz<L|j瓿PonOKΈcQgN1uj(.wX.:j_'_i_[GG%A7ыW+G㯮O.]⯊ guz7דGr2_+?_3\Q1x"ˎ;ث}F}x7{Ļf} Ϡ%9.&F~߳#m5f߳okuT,k__OGy=KzN~ 7ܧ<~}/ǚG oL֑LߕEY'OΞw7K[xnuGg;E;qW>Ƴ&'G&>qCaWSo'\"|B%o7Ǟ'?&^qMR2;^Aϱ}oct:u;*h{/D# evČ\ǣ7=oxW/_޽1qA?;(^O*}Vߨe/wvߙ8_r K\hCƗgqvsFCh8_+#8x5_ĎZ#N ^#S>㹬jcWrJ?ě=k#?you?x-?oyHl^ҫ D ϛD~çgp}Ÿ>c;/^Cī3x8kWwMz{2]On7kkd } 9uΝN>;ӭgs@=Qt|~gכ׬쪱cz߿gᓟ/tqiΣk{6_oεg|_}u'~_]r#{v;z?z7^rC=G3 _Pc'!8^,aj{'O^6[lŻaS's2^\;+>H8O>tqS)] I${&wȧ/dgпbU9r?__em\y\j?_*ěG~qᇵEn9fSy˿?p ג֏o֋x"};w8ɞGoxv̧㷜z-ܾ={/Bnʋ=׾bol4?{w_[ݯuv򞧒B1K_SNVW~7c[O݊yq0SOǯ7h_N\mНy(;}\ϯ>[oz \{+{sB~C9tvKgϑ>RB|>^z z) _` osqg'~? ϋynxxœs}^}=~Sqy1<c ~ u={^}ͩl}L?s=XK'_;Gyk}oѻoLtީۉ}ߪgkw~ӄy8zi]eO o<}yȱ|g}ɧ5u9kN~|z^G/VGN=|r_]*^~,9}On.Dnۏ,/VWZY_&.5=w5[>pԦ}38Vӱ?Kdp_i459|S[7*zc_yj|\jHgyÓ냽/wzx^g]cͳQ!' #諵}O~U\oz_:wWpFpx]O>ÛGBZy|A칿KffgRy?}ofC/.īc'|w߸Ϳ|-V\ߔ9g[iO߉w N O~#(//^7nظKs!{+@.JrSnVck'N3376'ZC˝gNtת_ ;zPߖ0ח` ~Ε=% ol_j_s{ǻsfUU|q{/N=>GY܃]NX/ju,wթ\G/^xg/gK:ou82 I?UԝXϷ:~&'@ YdkOg? 99"}K}' '/G8W>+"b7;H߷NE/y@o?|>Iԓ">zq{9{E&Q;?}aK~5>?qq{89c/yspm9`e/WO .Wp(o!/OdI9P!|d?YG<ɩiwûI<>'#F^'8O]IoYC|L g?x(T'[gx%jo`!p{DƱ/~qup?{{ߦNZ<?> Y#}b/_k(>%N|YD'nzy@}G3uWo =/uOU ǯ޼{!FG_x*q+m>kVS-8.:M|ӥ'xuuzYiytp-'~}8~]x^sQѣ]5 .?q*_/:{Xwpi=M;P%#~)Oh)4Z<\ԈڿojS؞lߙ=Ud瑯cY~|mNP%'7L ߅S&G~5,%q3> 8lx×xO&O ϴ@˳{:g'>/}?w^,7@O ߯Q\\}{^o}xp'wNfYA}/|~xy~~o>yvw޳~???ɟ3y=}_Yoh>O { k%1>C}ɞ{u#!fWͯCz>%P3 WkݽWw>\/'N&G'Woz_ϗ3+>x>}O\Jʧո3-v+{q9}?$_@[}N]Fq{_Y!|ۓs-oyG3y\yOdwo䏈wt§_o'Q|}P+2_wSzpn'|HG VY5?O\Ůǿ!/ťؚC˯7LGs]*~6=dzͧ:>[}ആB<]>;߸ex-Ŀl_̯=׺wMS:ޫJ\5?*Lб֛z%gcz}wֽ:~OyZx!3WnQW8kud~_U:u-p7kc]\> {;vz~?C~yK?/pwҧηyG{ŏ-;=nJ\7þ8÷߽NGпޏk 706&`g~WÁ>%1>!'urjzYcwX8ÙDusoz}eś6yE1q.wi~SO\[|ydq}{p6[~7To?vhzƞGݨ}#~x''9>YL?M߆#틇z.&oĻ+};~0Lm?~+v̥S#ΔW ;u54[}W.w8 v|uuT?zT7'SUK^oQVb+>RP'/_/axo쮖wg%ޡ}}_M_O>|=q-=>0dXux~'\t@ǫO$z&n os,K'qF~ۍF>/y&?Һ#x}"$~.=w.v4/gDz ~䊼oz_\?v}}oꑲ7uo*w= oއϜs5N#?\!/:/uCˏ"h^yp{\&=(^ކ]n_a/<:4~;yy|[p9n=~ <W#+.U2Gۻ/qR篩篓:䣯;~`+ q@x}C>$7?ST&\)w^Sw nH^|gʣsfװoqxJ侃wϭ:lё<÷?ѣfj/D~MNއ|ȯeyud%ɐfQ:>%Ouۿ? ;w?2w_/b >:/|hM nVBn^I~oxO$' pR^.aɯ+5ou$ByN$?cWGy_[Ǽsexw1a'̾==Kfnsw~Wc&$M[YdÚgg$w<p umwu)o@^8>W">޳v>{$ 4{ הbeT}$yKSaQeg!}􎺴/=D|<{yw>y}Ο"gߵi6qnO=yz|B`W"v'7ߗסԟKWc~u}y-w~<.9S ^<Oȍ.;.i]%/N_vp)"ܖxMy֕u᦬ >⨳o<~p_ iɲuo%~XWYP;9O`ϩ_ x//v/`}_ϾG`wC?%G> ?^u|v5#?CN'kX,{_vؙK!{ɾWķw}}gmsɔY^v=# ߭S9R?wSXFבk//#j}~I?#mc͇{^{ԯcڼgw/} sCW)g6T]|G}p ;M9#wc#􅸲>Y ukpcO-c忆?jr<]ģt>!$%"?h<`}NC#*V{b7}ߋg>_8Gbf |K>~cOp.?Ň5?_\͝#wvW4tϕz=kyt]\Gx:~~zϨo=vg﹯ɗ.Zn|wyo糃w-^+x]Ʈ#rW]Kϼ9#ċ#h1>-8|J~<{t}vY TynxuOG&;p/٧8[w?}}%SOH]O^R7c>թ;[<|~]ձyz}M84z2_L7ܾG7:~xoS~mwxa]GވObX鬎up^>jyHHGqBqEoCr;k/~߆ϊ|Or/8|n \8{}xc={$]:sѯE=~zZvnԙo8cvw]۳]b̞u=ygO ܡǭK ?A&ϟOT|к&OG_txB&sx;S~go ;Ao:@Q|M^YDyngi}N~}&.}!*xs4}aԷU0}~58,{k}>xX>C>N8Kgȳ9o~ڬyo cϼs&o3'~^٩=u8zA_NÍ+|-G~-Oţ*ON)OāvLv N5. C:D_1Mԛyj_?WهEzf⬽߇gA:^3xhzeӿ G7c#y9}#}O*B'M>x.v#\:7uxWzd?^'/?/ Pc?o~;z%3v4}ly+g_C.?7qi(M}EC7:?r+#k؛᪆f CO[K}z ȽCG7rSݦyezS8><7pOz_¿EKo[<`:g+%<k|ݟ8<+kA~!8uكXhuHOμ׏m|O}>S;S{<˿?N,G/ǻN|'ojEֵ9yrO[(}/ n{OÞ|hlGv1< "oRGi#r>c8=;S 8\֯~[?rw ~ul/<|aY;UWD>/ggo<y^[-b8u_C[wor+.M?M}}&_ƞ"GMyJf~;~?rp淶}7J>'.WSV`8]1Σ9c FY<;P>/NE?FP //~^ox-y/~=aWɏ>e<{r|oe'nq/w79#q#8>lO}]8a9U%F.=U_um#}91~{|{'&7'0هc+?"mփ<|a|hHŗ4r|u}n=뾧z_xcnWWMN7<<}qC2&þ_Ӈ=NW:9uOo|G>Gx9뇜ROxԳñ](/o7_zM=}Ƿ:_u݇:~Fpl֧zZz>|`zpHS׬^O%:'w.KA4}#~8Ї;OMs?y':-dq5K~ǟ~W/T)Ku]Onn{1v:ȷ7x8?.ց8υ깟_f'w#'y>yd?t{}Oz㇊O[m.u->U{#k\:u`xÍ~vvG|Eë.Lc_slIK/pAs\Z^kk}xZ7]O]j>?=}q.v)|oy}L@\Pi~Bݡ|}vn8xCoy<<;?Ç=ㄷv:4ޯCпZR}G/*ugW7G`W7kpoոpLW3y ^>7vKar0оw~޳74N+˱:WV#fyqzm'^gۼ߉+`Tߡvg` _CpM߱|}v>޾czÛþPgOOO} w '?7y~z[s.JA_}~o#Vrkԟ`SϯϞ~?L^/OٜO6~wݺ>޼򗍗]o wM>83o_^|wyd}C*v56༒'7nx,Կ{ Q{g}nj'>'H.o+&%NE?=KzǺ`L&g_SZ'vy#ow}gw\v_Ϳ?s#~,mw#<1WysIulJ {<6_>mٝW|z]Zclj' 'xĉĵ+sE8kaǾ/n^n݈GM{#>n*]]Oo=`G?D[5yל8{ ㌇W~z%ǮSW>d͗WO$o|`l] 4z߀wN?/6r\Û.G =ޱaf:կ/G}Y|Hg;?y9╗5{&z3Ju͞B3Q?^BnOmɬ{G~7_pd'-|>,G tyQv0=O=ܹ:֛n~Gw#z hӈoED9;WW5#3gƋ~f_][hDN3x+0si.xgҼ_?_﹏5Y7Oō'%wWVu/.wpJ?o8:AZA]Nڃc}nyq_>lg{j\F'-fZ?]h\.>7hϡoݥ}x޿C>a]j5>~ȯxӧzȇ\9bBvy?Ae٩"أap֞-ZGxG7{+iꀽVξ({𽓗t߿{ݑ^?_H1;h<_rz}|~!touh۷,OOv}|z=BOOcԯ ^{|oꦇz-^ũ4|G8z,|~þ _{C7;w_=nݯ/gaK{=5=NGޜ v1rD^:iyG<+<0~byr<&yANGL:788[~sس?΃y>;rӾ;:<.t|ow|yL8򜻓%~?7ɢO'׊Kĩcy:?p{%Kzz(kxGi}7z)\1bɏ ^>d25>l:ە/7ϑ#ݗ82ޠuַ:q?8y5ڇٽl ??<>_݄u_3L{r-+~q%wO{℻\7v\ፖg?'_6q6||bs~DU^n71%>2xO'o|j ?X>N\ᩞ+>Ѻ\zDoycF/?G\7npȑʋ_'%!GĥGudݡ'O}ccz皸$;}nڟOo~5~{9\'Dz]Ǿ?.W?gR7(޳7 .Թ{JJ.w}^{}UHynTBu7xy7pz.߇F<^ēW{u ?>wQgUߊw.!?} 칫xG߿<ߣ^4|dݯSz:9)'O73?77&8 =+ݟyR}Ы5~w#?<1|Y}vW}yĩ^CG;q~zֺWO/D=nTgr1S_B>¿܃՝~Λ?~pX[g=p H%.q&s|ױpnz؋8?}B>[~cOį%̲?<+;!37o惍Lo(WN>>T`=n=b\s|BɓK—{{z벯< X->ķA;8/&/kw;u p/>9,dx19wT2v_uSv'Oc57=wgKYySɉͫhOxk빞/ܽ_7ø ո|<=yî ٭㷤O~/|9\ԱYp K~Luv?w?'}k 7{^LSŠN~? guq῀/ojó9OP7x>dcãu/;z9<..ΟWN2nGsKĥ'N87Z|d~kկYx,| }LG7ťY~'|u7o|~%ͳ}E1Z+`_:Z*1>xpw;K.8K`Y8{|]m]e?ݍ u7?p61[sD?z״♚u). ?n?E?vy3Ǟ7|ؕx!lp!_ϻ:3'猏(|ƮPGx]z|Eo=Bvp2ŕ'cCz^t^zŭ_՝|ޗj}Ŏyo~>S<ɿ&?.f~8yɾd>W=8Hx'`w {Ju~S߲{m_j>7~_u=݇.uUuL>7=O7w5{r 9PiphˉN.a&nVQV_ <%pGձuN}5kœ#[_ߨo >oy$} ԯW|K׵~ʃlա~%7r;kV< Eww6ܔ ov}v:OWo}}u+ƫOz4g⧂/p0u$'-^FG=O;/v<}>>p|`Mz}l=;TNN^lw$mI>v`wo#ouv:o_K/IƏ8xZ 8;kpͫ]Szck=_^ZSB޿P|Xr['RF_4syM-ε_؅J|4")OLgexɏSX3~{_lߋ>?ޮ]r&ґ'I={[x5P4(v?ޓ5{}vKuw3͛v1D>J:vj}owڻ{?P+~{n_4.pG<^\fqex]D}7{(}N0q;񩋭/yE$}>.GxG&W8t]g)]׳7'7ꚟY7r?nvgs /pAZW|_PDZ>\|qkC]!YѼY~=Ļ7>?B'G[^]l/CipƫN>)}ӆg?,ww_Ǖs_|&8m6|<}Jpr5[ZHX,n.;vz}֩~ 3R;qRz,7}{NŇʃ^Ժ OBO[mŏ^[~ҽz5%BɳȳG2v:_n% Z_Mx:!?~GwKzos[~KQ=-G߻r8PxG~'n^_{|Q 7O9>s!7q϶m>O]NO֯d3qSy O+K?-s"P}Χ.`ąYK,Xߍ{b/zp]N~?>sgg'&./.Dxud-A\`g;{GO 'k^9|N[|V6U98݄LE.}ih /ǦJ%gz^^_ x5xW<N];:Mǰ׌n7M_ O]I{/cGszy G^ZGo/o?/p6gN<&|Ufo}|pxvm^N7dƁ?ܞWv>+u!:#c8{}:_=y/5xZ'yc3}>sK{<׾R_On4ę^^ٮta=]O^O]k^Aݥ֋|x3q81[_'r#2s .3 /1<݇|7/No>#sq7 :3S'\T~}V'|6o!0xIs>h|Z_K'ީnoK+dlxi]WDN󡞜+z9>~*ۋb;;y}]g|LL_OgGocťGOZzx&^&ēwznE\OxuB~ֺ O})W:Z7&^v!qλ'Uͧ/yu:^sO{%؇}#}Gwz+Y(G̩q^aO~BS\T<"oKg;Q^jXNt?OYw7qK_ų׻ qAz6}7?PpO|D|uw˭'Y~;?[}#%]?uVӑ>埲ͻ~ \Eg(w[ugË|_;~/ ɏ}_X{WZo__w>[+GaOψw]N,y#n=随o"ǜ=3o\yħnJ߳~􉔿c^T\]?u%g)?j\piOeo|!? dMx>p԰_œvod<-\³~/?"<>*奧v+^K={ŏ?WyP%':8y|GʓN\RyꨟO>dVG(~>gӋv+z_v}qdm>/(_G 磮X|\}ҹޖ??c)~@aϲ ^k6~f}&*AOCᆯkvd׽Gnb}CވѺOAN3ԁ?܀gk{Ϛͧ:x7?Ώ֑} /8|?  oٵ=w y=|O)߼K~i)ɛ7NOG|g7?[\7u~}S?3yvo=W(y6u[S''/W?-ޒ\^|Kpw-˿8|#+;)Kx>qIyr7u&{y-s%~ju~9>>&uUrUju 3玬qw򀼶I8+Y=Czۑާ> c/‰?h'-Nrz~`߯nc+/t o!KA[Z}8^w7OvkG+{zĵ_͈?w__eIaɷeɗG]{3y/>um]]i_4}=Gpٹ?>.vWqb/N]x!;qM{~/n\8FrMܫ?8x#m]َGSu+rAއ0مկjιu{=| |Sv1o ԇl|'wz٧ sW|& =g h\tꌺԵuX}թk_8feyA5{aw~JvGy.nbpfp~_;{.l'_sv%Hql]x?=H&?i~O'g;?رZś F>NLeؿ}'{nO}f wgO`×Ϭ4S?Dߟ8= n}Gw?:<_d=T|y)꛾3~獗-0r}~:/Y?:x.UT]Wp! 3GͯzWG oU#3 }h}?D:.ۆTMwIi\p҃s!{>"G;Qrxej#\Ǘ·o<;McV뀽^GK?\*{_%/پ_~'pO48Sp_O$ԟwkw-GB)>zmJpsL\^_w}t?_kKա__wpn7v˶Ňw?v?p'7 ?TﶿnEP^7;`myrhמN]idδ^[/p~ vu4"O_z~xyuouѫm_Xx;]`p9)vs}}5LWg~6$+?oQ?u\ O/Qѿ/#oϏYO]"p{cҗ73;adk=/zxfz"F:?Q>.vN部ߴy֟MIJKˠ=&f|{gƗ}=cv9P}3uj=~`xy1dzԍW^سO?9ٱ8GD?P?-7j5rygrx㯞#}.rLNnS_:[pط7 g(?:|Wz֩y`W4y#ѯXupDSwimPGEt:߃~WWҧ#>x\:7<:v/dQ?>߮?Y#7ԑzJ$Hkyz}ӯPW&\ues]l/Σނ>ď{y'Էt<|&z?u( N/.|x;ocR'4gyxyM.O /| Ӻg~qgO{K/%'S`Ww8{{/YYgӯ\>k>R떿v.AP=zI|OVm╽߄skFo[7^_yn'a.ԣ},B#m_/[g^jʼn_w%7Un΃o>}?y𢈣Szͮ{+^c_{4a˗c_w/'>~/#OɈYǓ~k o=y_5U~y>y)N6u~W^nw&#:_ߓ9#]MGbש_|k(,S}/_Bzp߇׸v{nÑ} г/BY~īc!tx^xёI{9[񧌞ϔ{&^Oa~Qoܼ8~v4^^i wᄆJpR]o.bE=ou^ѼO;>NĿ3$<*;ܓgHo B./oꡬ}/T-<ߝsuW.>e?Y ?!.O~yȃ{Is>OZ%tjv}w~<*ꢇ~~:;s8֝=ջ>>gCEgG璣_?ԍWs%Ʒ;s'n\=tǽn^#x{|$x5:Wc?#K#BΛWvGC!OC)L>NsS|v}C?K} IJvvŻ:Q\KnK營%vG'΃lnk׋߉>f_vgu,?dzT\={I.…<[uTw%7 =w)+~8Ѯc=ٛlN35o,Buq;F8/~F_y~7u/To+ Ϳup/OSZWߊmى3V3v#})/gȟ !#ϓȯMZ/ԧ~_)ކGm{8:7zR>Ǜv}w0usm!/>^+3͇xNgӗ~;vx'^dpw'+A{NX/*CN=Ozv0(p\LsrN#ng+}4@~W'o꿷}"N++;;y/¿|_@ˍ1D}6\d寞i^9}:9M+EH$JB( ?)z)h4DK6v}_ګv{ng<8vO۞IB " DA ! P]ϩoss}u9wnY^߀8X&(6q3S폷bw _/fHCþcSN~ԥу븿ɳtѮn}N7fU{oWk=W߼6|wqYG|}x^̟k8?SZ/ +Ne1z-O}xZ-_o}܌/ҺS,F~s7r^GWQ[>)S?g<>bx_lEѫ3_gvdu%7#Nj_^Dpб{{_pa3X?)E38|ۑO>8s~~7|ˣy%crjG}W~q'#>4}]W*?kSǠ/' BMA^8-dv3!G A/8}N_x|2t8aQ'V_km/c߳'M>6) C+}S~|ty6_Oo.?KN>S/%vΥwMonw; .޳>/G ^~&QZ[<=ǯ"3zQ=ZqٿZ|!ɝ_7.;ZǛ3\bꝊ?y._OQ?go7lBr>|*_§w ޡ#b_^WbD7K&m}ʋ/ygY?y5=m3^BzF~#Ыcݫ{c%`nnN1ݬ轵Q6{?Þ/^\u$³ǟˏcfN''C+S(~ac} O^y^peLo͏8 ޏ{?iM<3܆NS|w?\Ǜٿ[י~6ټ:KIlwo{w߼vo-bs%?%q6dҟ v>$_e5n>pMyuΗ/ȏǧj~ɰwqumխ|x${!axe~-h?M},3>9AQ8=g_Z͕p)y6MG>":\r>ȏ Oyvc߅/{8A|:h'?>}myw3eOç]ycM>hϴ\Fq`v¬;{~wFrq8{V?JSw{qcx 7M|i}/OulNzcA}:X~xrCW8y{|̣{/[٧9|3ruqp uyp ȵSl934򭬗}O]?<>߸{m:\ˇ9y싽y~$@D^}؏œ;ꀮ'U KCh ybyOqG'k3P}_[cW#ٗ-)UQ yW4>ϔw#MUvxv=<6r@a{>=6̞5`·˱צDᙣد0W_Cz⣓}i=ȿ}}@e}|rT?S kzuW}ǛDC[q/'o+:`~"zx O;GSBoT7L }"SGV~ui7뒿Q^_;(~'T|ϯ?f<-v߳qySWoI~Gv~k?7!ߵ⹓//0uoaoWM~KyOx9w]]=?uUz"ٿܝo?_^two6T &_SO8.w>'aw֏}`?]w x؃ɹ =H~O?ƫ)98vjauaǽ*+>j}LD< GACzÅƯzo%W8;|3ٺ׈cjAF{t'y'8yG\9[|+}g^@^=Brݩ.{%?os>G9zv_ÎG-/v}6y/+W+ՋȫʎQݼuOO[嗾ywv=="n3oC!gq;OcOx~G)?9?*n|?-?|5I /& O9y.y!>PWj=L<>gSGN,Z|S݂TV!'>'`Gy۶'ɛ|1OqWb}\q/Z=!ǽ77:ߋO|zB+X]6;v=),㱔̮V޸ ?O)W޽Y`Y/OsEěGr_+w+H/w5ىk}~oƦQ]"e_>~:\xÿw)'7ӏ+KO_;pN#:S?;brOң_wp:ocY;nx~Ӌk| qXܾ. &Qzo#J^M~6}".dE&yo׿w;Լ^ZG{{8+#^Mi ez^xxy>9(-V^<+?tyw3{>Ś7z4}ssSNs'W/sf3yuǨ' ]*=&ϱ GI)Y%_cv?=i{vO>{6{{q|xr.>yfp?]}|~?y>kM^xȕÙX%(ߙ?7ޙ[]ñf<[{|k#/ȣNaDy灜~9ϟ(NI?wvyR׎zuOa_{c?{o%ϋCnŃk{8<\0#qKߝnu_>rvy_U_΀}" /L LK/,Wz/~GpB}ڧ_ךuC,7Go7XO=ͮ`^Ώ%?>u[Ot=[ o)>; XWb_K;=Oκ=aۗ;>ǿHǭo|p'7ǎ #Q ̾wW?>:wG;ln7"¡67G+׵?嗊e'ޛ|y'k<:u7|:u? {:GL!''8y?(+/A1&OWek!m9o/ f"¥7on^n0 W@.׬3<(FNſGqO Gx>^>94hW6#Eg_{e<_uwEx:M8z4Jx7uߑpIvD-Oߨ'!^ {l2V4ۿ>I rxS;ZB:>9+`G:sUumͿ$GS΂/>ƳNv/э 3N=s =F߮}ԅ/gcƻ:'i_nÛޱ#EzyBx3~7/D'ya]s" 'oSg]Ol/?~`?n/ߒKOY?gG\=<ϭexKO=zc~|*K֛u?8;[;rrTws)τc'[ӋGc6,4N*_6|*=<'H& oAE<[7Y>t<r_oqVXvx5>,uo1G/^T(No0p2r`_oWO; ߴΛwYĝu'm}o`鳸e'W63z~WU>vp~)Xo>PϚOCz\Q{ut;l}?/N~Н:發f!o{G9#?k]Gn{OC? wC ~^{к~Kxp}q>p 8;|xIi؝ug}zs7W'c~u h?ĉ؍q1G;z/D`x{CxN+z G[0~|OҙҷU5_G=|X)y{?kđoh!7ա=yv41co%U}x#oߴ/O֗wS=S޳u ^.v2}LYMDWyvgܮwg7Z"ՇAJmjo)vx\)t=Mٛ,9V1|zG}yg3'F3ߐn==Y|eMO3~'?~ȝ};~,or5qK WS u<O?k}~u{?ƧO #A?KzSoՋ_=ޞgOSuފ>ںq [|zCc?:#/̫y:vY~Qgk{]&IM{~>.3';xpXJy/yoHޫ|0t?zN|^Gޯ_84Rv-YG[|ϱ _?gG /gi\cG9?ku7o+^k31x/M>b/AԓdK&qOӲ_:g(OobK| /ں`g/s0.r]}ɞ1'ܥkp9 +dOt/zq'Z_,`~󳭻~^{tqzolS?o18{}Y_j+k}_}|f%gGo{Ǘ3=X~|/pՏw~yIcSOc~&oǿNٝr3!΃O׸?o\(o$Ż'1vzk;C#uz6h\ o gi<}W)_RwW;ȿGo^np>%?{'/߼?vO08u}&oyGv;{>Os_6 "G>Ӿ8y^<,Csم7ťSJq>_H?/7كw/,?{so=ʳ!a*a {}='94y*?fo}: |{V=p=$> }x-ү%=}.Q.80~$7;?} ׍efeyg{jp[yWg4z=^wpE7gYG߫Kn^շ=BY'wyX<+>͵0&^^JQyX%_{mm uvDF_'a_u;z|T~/μ~k>~N?>W#C福C}#R~Lʼn G5y]X8_zw2 +^駣}?[W^($?r?׃Lع]̺R.gV}7Qr~_fsz|e/x -/|#Ury%G_Rt1t|־q^H>?;z`O^i.vTݶTy:xy橛kO$쇟|:k_v?ݐӕr}`]>u:^~#&\\y~7KN~}OoG{+-n?86'cvk#rgzOu>sx;}\*J|O\Oޥ,XY"zMGx$փ:Jؙ먮4y?xMSk)λO'hxuwq'\[߳:}J>ND]s8v? SOo|[ɕAސ>KL~8}~ ^rޱěWi֗yx[Þ:ѳ߳P0{i׿ǟ+ GkEM?9U jˡ֏}dr[~RoQ'>>&/ P=~,-婳~CKj~r嗐k[mk|_g_uS;KG-bd녝o=IG ]?/g?=<xNQ#ۮ: ?F>±O eQ7÷Ư?[0Ǝ`>x_O:#sF~`ϋ@zSӭUh3q#o}E'l/gS?{S>u=rG}a v]w,lx^On8=ؾKOQMu x<;f,uo櫏N;dCW}Gc}o_Ir!?U}]Hsh_zOq.~(Aͭ/8$jumx@&.㽪3<{;?Z޶}o{9ί{?rá%u/HO3[g/>WW`ç#I?'~i_{d'ZG:pzG}8hp~g P*n=>Hwts%/Y:Dlyo*;.@~8I~Krƿ __7w7?gxW'}`Nȃɕ='ѿ_CopԉW+ Xdcɏ$z?N>wnއ[/Qx^JO=[|߷u?|}82^;>DNIuϻֺķGU5;Z xr&Ϋ/9񿩇?g7Κ?t'6;߱ϲGFg?~=ɓ=ܱA\ySS&Į| _7m^_ؽ>ˍ#<;Qx&X=S.{g{>|;gi[Kyz<\?rgȇϞ˾O}݉=Lu$zf/t=jv?9^ԅwws6;Ggux]z8 uz~kܓ G}?Bׁ?^꼳~OU_my"N%oNߐWy<>؇Łb81Gwߟޙ>]~WnH&j·7xlқ'otxu=|<}E犯gN|ϰO3p{.i݇7o>Ń;}^:ϡ>>a}>/5uGԾ|_kϮwS˧O/`^yUx%X'7{~dgofK:8Yp ={1=< u˗SLWqmvPuf׈GQk7K<~ĮggwË:I^1{S9O?dx)}&K~wN s8k3ɇSK~N8"};WiXůworl6_7z+ŧ?s:7?sGZ7f} #s~/`G] j_8|@w8I[mw*;cKux' 0^2?y0t BLoc'}!Nl}OY񠱛كcmv{}|W (.ѻy5ώ:yG^(9/ѿ O'}\.O?V;_.];R|yrTԳե7No5Ku5?3zZKusnw3y}u_ބguOo n['KuE>9_xh}K䑣33KY&p=up|uq9<7y`'Cc{%O:w/U}1o1 _BRq P{krYy4uwyu?'3~ >_%>& 7Y^ѭ߶>̯|:-Qg._RJkGԭʧ qϚ Ӹ W_nT/=q| {SQnB^J^gSG%Zr_xy]k"L}=#ޣ39R\@ߓkx)&a/9Fe[?HsvŹ7IIy~8ݏu&˟"W靳=DžuxyxxGGzǯ]`~xN쯉S6nWmn?g^# Oo^sP_~s?%w3Ο~Lx_c18}q3;8?/_w,T}.eNFOyyv}'w%>u'<>{N[q~:8u.=fߑkqK_w:9%n5q#PLjZ(hGzG>ۭ.ܵNːc?=8\B<NungR~6cw5ǚo->}85wp׳>d~Q{u1E?R-> {b&V|oQ&~}O :}W./c0cnŷkL~f_?|'&om~Yÿ]/p<{8 be_׮ N}n+OdKonNm>Yj#cM&>t/ ^~|7s{@ۼ7^`K~{}T޻ oo[{`]g+{뛽>ynׁO;}ג:%ՉoFw^ZN| *UyCWy~3}p@&+P]};uR?`aʛfG[Fް_뭛σ#^i\'&'.a[_sЏpn0l93v$~s(p!/7~4<y4rVH?}~' oxqZ=3Owqr_K7[G}B߈K< σ[ FKmGS"y+6>'\?3޺u>>:>tdw /_W'x}#gk~8ھ>僣pj|lI ?=)$۟g ={^?]r8%A~`׈[1_]a&7Ǟ}}q꾓=V5{xOvt~<qg7:zgSoo'N'0-^u­S_ҧ@_~'1xn`kv\^ N=[>pgJ/]}3Nv8?:b8swaOxO%̻Γ}*V]̃}~\7N^5#.lNMki{?4Kph]ho] _oAߝKY++J ;ٵ.pY韹/y0uߩ/X`>6/aPTE ~O}?AfqkכEs0udحN}~[u yoq;S[7?&mk ⣓Ns -=q 8t#=!ޏK?:/<3=Rwu>>;x[zgytjHޱ>}g=Gw.ϗ/gпG@^5%ՑLC}=|UAIo#܊{ŋ7䱤 x>A߿=b>O|Z?_W]3zO7ů0mpux'y3yT=o^/ >c?^Wv#`yW[{>.~xWl%`ß7Қ~Qzg;B> yJ'x?;W~;Np9|Bz9wX %aE(şT=7܅~6oӰ|Oćح Rkv{?H&>$uPpӛױO1uTt`/~.B}'_Yw|ɍOtk~XW,<| y߀ggӏyE;L;Ó?Rj]r6͏sϾxyϑ/:Ig_/6}~up^|U>-yOJnMȹ;5>^wPCNy+'v<,c@< }vw&u/ <['Cx':)~^8yTg=o/;{y(^, u={HO_Me{/ݨnnY+YءueO1^8_{?#b;Z7o}\: /-੗ TyG~'~!/|c2_^ t#y/5 8R︘gU_cYbx{=>o.7}8xNǖWPG p>Aߒ u|5=Dv ?GiL]?C9bBo8N_~'_/<փ+9ߗ??s?򁞅ᕯƬ3qK.^4qYן}rdw19)/w#>徯g.&o}3?QWڿ ;y+wq퓩[ʞmu7ӯ1N.>Vo#0u]{O׭|+ 7CSW=եgƎkvzoxy|"p69KNV'9Լ18 ٓ}ob?<gROĿ<8?_m/z4{o.OͶWO'cy\Ϲ=\H۷=MO܎=vYV<+{?{÷™xQ-?mMOx.?N2}9=ב{hc?:z<{"?oZ>S^Gz|{}OzׅK><~?8+HSo՟kmo\{^};~^ 7XUrɺ/|&M6y'log>PO Fnr Ko'O:cݿbQ>-Uu*GL}ͩ/wG/'cOeyVx5:.kסv_طv}AM\ |8=þp! ݿvn+N=^1}'<+g@_h"og_LջuN~~43wQ?ǫ]|-jx&SU>;ѧ^l_[Gw֟: }-oLϭ&/h3侷.Y~8[z3#}M^./ɞG>KCG9o2cO ܗgo`ӳ&O]{yXG}W~{yG\/c C>_t]vDkޒOǬx bʳ ]ƒo_XJOkW3􁂷ƒ_{/'Z_!z~q O]~q]kw ~uխZ/Gt$gpiH/ KV_Y=o4Nv\WL&φ/Z>֋TGz=W4~pC;<;X|^X|?k|pO]Muώ?$"?ޝ~wv<+&!?Bv}q0~/O-}.p8!Obs}3X`{l^tC .zE߱L̏w{nu1 |x?2-/O+?|^nzy'X.Hw8|`%pΤw+~GxqOO}Jԥ_2y-x(zOWU5WHn_}H_MNz=GP~oqc~85坈}g+.:yo3=G^ڿ9'y8 k_=5gʿ-Ŏ͟xԇޡ_Ÿ}y'^Gy^*xw|Fx7O ǝ9Lw`'MkDg$Nx_W$=+;Zk> f{GOe˳ ]G'=J}rAGh0HOƞ yE3~6^\p}6X?k3 ?1;D_+䷰'. fq~c7?&bq=iyEWIfzRG{u:[6 ?=7@yqOio3?þ)og&k9="~_@^cnOY7W{5OA\B_Wvzg?ș _|_@}O'^ZpSB^?UqD~Qˍ:^[/tf5;y凘764|Xq_\qU|o1_s7ZG {7Gφ_T_jU_'/ٱwO皸y/å>g÷6~ė+ȏNǚOy|& ֽ}W{5/h҃ҼgGOweu}t}(TpayP*=U~myp3q_ël}S:os?/{20sK gW9? 8g-ccԅgAyZ[NǺ5nzyñsw+Vq=ϟk_3M~s'UϯSO}&\~8 w.?E-]< G?KW>4qzuyB<*WI jJ7o޽V_sor8w?疟">GIp. ;[^OP?ƾe+z;\3)_ovycwhWXwvC>xM-9fwXܤy_w}^A>[~ ^Tߤdz#?}n@^Ov=$?wwn~ ɟYgRDq|?}k{"O7>kѮc!፳oޮ^J{ o1%WM8*ٔ<~'~w䣒ow8:{;S ?yG}B緪ėˮ'酫[yC*OT><):KRkkm6^O}8 R [_jݞ.Nj#=N~x\$OiMqe.{_/ޟh??'?ɟ䁾 ~'O_XvxGFϝ 5h>;.Naıg_>އCGrA~0%oy9~8(O^)o\1CW9AMm}kvvaggcǓ{loW_7V!t*n'OFȾM /8wQ'%bOݷ-<}CNYGx]}?~]{zw{o=z W'zα.nُ.Nt}C4ocGՋN{௱WñӼX$gE~bBvR߅5slN 7!Sx:one{Y!bu4Սp.>٧֏'G<#w֑^Tz+znwfU*ް)z~s6uc୓'ζ?닏C]8/W3Y]>Z>g|}0}e}<>?QGϯ~عvZ\mϵ8ևe|1)yϝY f;_Mx&ɫ.R_{##meDgG<ܩ8N?N[݇'_ v'.o~̗G鼫_7xMݗc?qX?޿n}1qptGۧ߸C[(6}{v{Çz;O˽|&oOv!ULxpyHy:lȏOtT'2;|*ހ+;y QCq0퓮WBvzoŞC>y! jǏzu'/gOxrSn 8ͫ>dz6D˓:tq3 UwnUog}řN!dgɳz>"<~2@\Ng~w(B.k_Xdz uoީ;W|_nǂ[|wO\Tnls(s<=~;|m}[^'GzYu#Wב~_u'C{D}p?3xQqtKOOuxBi l?|PM^qrJA^n^hKăP~s_xzgWSSuX꾭76wZ uEzxŏßv?]] d׿uO_;RG__Ο}}zG%G xғ`?Oq)|'OL?[+Atփu bQ3*ܯ1?|Џ~WLJ<)grpy7ۧOE>ÏK?@O苧~ӗSGO?ߪ?G7KiaI=~h{=cג^ o_e?lݗ~[ﮣ^x}yu[OËs5Ǻ7Yu{GckWx.Dn}D=:7ٛ"Ug`x$}e?C懱UoԟwVg8$y=>C=B\=O~_ =^^|+^ytuxzՙݕ.R͵g:gqZ!Q:'1Sv_]+GڟǺ|@I_-ujwKp._V?joH}`wO֧c<}]}VhV(>x쾝[}ă3uqn ?;E}sNؑ0TkKq[ocNn|]N_ķ6yGxONver}|}m_oKxgofVG^e] .;m#gk vi_N?>>7{DI'?y//9zgwG~GN>kvaӷ/uY@ϰ[S 4^u+Cѣ/w_%w^E f'U9~Fr>c:;3\nm}qo?>=O' 3<?q꨾ٺ_"tts<)2{>Tp.'p=W\?߲-7}v1;<,{w rgs<_1d yg9Ry')gLwo7_c]G!y]^>Ƈ6}@u(cz߽8#!=1>U9"oZynyz3҉_f/7]ʋ(_>}`|| szO? rNo_//ߋ{GZၯ,B[¬u}̙~wx8}ԕ?gO[|/ yZd[hUE8س/x~EG[x/K(+ `7!_f~>܈ ~ Yv_~8E ~/xׇcGpWg|݈t2co_JS忨£=:3ͯGQ-]{|:[)-_\=o;+L.˷׍j.'Owy9/3zs)ܚ= ?ꅯ5ߝ,hC]߈WWjzbZybxܿ+893_==Q~I⹚j ky*bK?@/u#zWW^srgxrv|s:?zcǾ^ 0VIhh'<[JrZq{:i_`רK2Nztϸa_~yaOlqN}ėÅYϵ?~؊7?O/~@Gz;}&ڏn2| >ӗo>x|>'^u DY?r}f5N<[}AȿC~@>?|* O653Qc|e}f4}8ux@J"O˧o9?<Oa]ag˹z_V~9`x=x:5Ə𷋃BP䅵6O7>Uy[re_oů$>ЍO< ȟxfx]x{\j>hL}}78:>}\/=6 =ާuIvtr?sˈK=' n}eem«MGzOip!rF}N^?js;.%O"5O?^˾'W_z_뇛|6?^|uC⳧z쿱S·?;n:=P ?s>uyYUp/Z)N% n.Hz~xÓKA'~Ǟ%=vF7O]^Q=%%J_p>}H7ؑ}pM_X]wrjw֑ӯQ_tuhǬ7R`nN{ؿGOsȃ7Gb';=C_{%ؿ~'N7J|Oƒ9L=:T?.s7|^w9qpͩ[w>K8MbLCz̃< |>_%N}2O|:-.1g{N~{.?~NĿ~_=Ƴ5}i%8XŻHwۢ?m6/7˗d/s#4ʫ烧S/G'o]Pox/N;ugzǕU':? W~!杼'jv5#^|%pW7t O<[}.{qi>/c/G|%\Z/kpsݓ/ )??'ه @>G?S~7W|ڱ+|`{< |Ey)ZG<:-')\}slbך}vkśKgw7gu"3ƻ /">%7?uLc;yDǟS D$On>O/673 /@Tg' 99^x&([%P]ɛ0~+_}7';cO6o/:9>{Mqyȍ\uzʋg!OXyp3wy.vgʟ&IzK;-8u!nЇW9Cy픇yExz_'ZG^\i= /ǨyV_0y{A;?]wzn՞y%@. (>{4͗u.SF?ËT;Low}^hQ8чFN[=܀Zg7W*"dxgmw+=<Ox:93q+";y)X?gY}xz.^>;݆?wjY8ZO]<ߓ/Y?&jpLýwv w}ɡYz򫶇ӟny>]]!A"=tϜr>;Lx(}9kkv6+{rEt{er?*fOkTw E<_ooQ;s# &G R]9t{x,a#;^_n{w]ożgpsQٛxg`wɣ&/PiOg;zN`uz﫣z/yF\n</>Z\ź<38玏uz;l |=7Oen8ɏ[!1?^.~ >6xl=uu>q[v;{~!17 }R~~F:7v+qbsh}OG^_egq)%xV*gÇ#Gϔ:rr3\*>pxQ]O{vWY3S7/ w/ղ+p;oVOv9??`G8}a˯eɻ_Q_C8k#r3W/biԩ]O_-O9=Iޑ''']GMG9_=s>vO$G-i+X~Wa=b;ɧ&o]{~&O[x /o 3 5~g;;- gv{SY3ALW<7oC}߳}yK_ƾ]ݯ}AAzw[~~nK ~b}翿1 'Rp򑆗/dÖׁgᄡt{ ;i@ҿ?~X]]ޔLL{x+ᕂΗ G5H'Z㰿6>{>yAI~Uw~iӝOG7M^q8+~ }wOg Θ>q郝/_^_g_囎!u'8ԛ> c4p'N~|bwHOׇGyEc?\w> x8X8Y{)O^A<^x-}qɹk<#~:;HO7<uyry>{^%olv1qx| $Jm|cs~>|U>OO7k#a4ANv|%/C^?~߫_Sy;ShݩǻzYǏ?:C=75-<HEO/ydQɟ?vVS>!hs<$ {fԍϷ^NoG߮qd'>Nrz/xɝ>c+Q|nv$|?~ԫ꯭~$]x&/Cң{xWvԟdz1UpC߉wiO1=%ükN<3z vk_O~֥=dyoxw߿>u;«'nn_p}?_wh?$ {2=]ڞn:xL+٩pZfy w#5EOnxķMgٿ.ɍ |u}I[ݜ&'_t}בWMlϋ;UVPA/I~N5;|xhK?֑:sU"g_ͯ7O]_]<ss}i.% z>{_[Ovv/c8qOpuXsA:}'Y^~ 꼞PUwv]} 8JB@r;mh|{NFұ;4L:M_KW,++YoɖteK~b" $s!M` Ii:'ktt}^{?k/ %<~*A?':cDz1>2U*D_|%}Wt =O%.fg_!=zVoG>A?@AeYrg_=GM#9(^ޣ:VwsN'|& F~S'O.>=?zT .B<' B~8ԗ'7a=&] >;?o oAkr"e?+?}-i>o8fUgy ϝN`%wL=Kgubվ.$:}3i#r x+wV _-7tt>Y7Vn'.zUA<^A 7'L?Mpn?s5,> niօ|{ )Z>q=3g-O]SHLf;aB_M}9km{w3vM%~%ѳHh?_icXN_&{JAt7 ,?濒熟t+7[=GHϝVM ৉^?;t,;)9 }P_^w1o9J?W$C\ݛ|g{7=%.])xH9#} ~7h}Y_qUW9$_,BwƏy%vb>%^~ ~zh?-OF=$H˳BowPHGob]LMg?bA.#D_֛HOvW4B|!|I?YYz.\9ߝ겞~L /ę`oOWxʓ>?/]9ߟI*BID/@f!wGߛY=Ths+O鯰CоΩ?LȉgGrEC^?ďb=|<~_OϏ)yXz9*q)5NXO(/Ď|#;!uW]Kwع'̧+~8ҫ@?wj<Ւ _kyIsN>~/WW;ǘ+_{ސu6z*z=C3ȯ^΅/t>|ГRCGtg߂"%Pd?Xo$:x"A߀μG?9]j+|ˊ;oٯ@|7 Qoc;nt 9x$s_ s\?[Á"?hWh~?eϕfB xN)s_+]G.?6}e2|;y ٸߊ|r{?>?|M[|z_Wćw.9?<瑃O|5>T艩^xd3ĭυ}ZG>~Ӈ>ׁۭ9 ;.~9?^q;_`G/)>|E01s+W8oWߙ1:H|>r$\ y~tǑɳ39Ko'nta_^sȍ&96?. q}6]=sw~|m'0/.0x>9VO[}1~.ÿ?'~+?O~p9;ރb^n} x^ <|t-O+ȻKOg?N +|!vFgi|ԩ9:G?_Jh$X:X' -L]wKWQ1t['  h~^ *7)#rM9~a]_K#YHLԙO7푾} 1=ϼ/8ޕ7?3Ềy;wЫ"`gE9'~WcwŸÏܠq@_A??-| yƼ=x >"ߡyJr,$VJ_s}Vr~'5/Ϋ!z/?vW~C {'մc>&l^ؙ._~/9ȑm+̋}~zǘcv;%`?=5ر7I_N~f2k&9쟍W|gx>U!sNݬ}YOO_Dy{,&]'\_x{I>j* 8{]s:]BE=iCsn{aOa̟a!Ÿg|A*臼p>\|/.?4W=v[sϛ|Ox|i*.Br3o?cӁ1z;7ރ/:d>{~f?D<5t$:ƷP'k*C?96>AK8oS39+; ? >!?pN:%PwznLwgufkaEgwAw'+S<Q佼SѵNkgc ][r DCC({&~ℾ~Q1NIoтo<O$5{E/u^>g.cMW0%_|;;>*B}3_)*yW*B'O|a?x ԭ9,yhY/Q9`0Gg4ݓϔi==C/~o8-!F:q<=:gOЋ㯄Mvџ{ynbz`=3~ c_r·侀^>}qת< ~ܫy/AϦC:F?88zR ('pոD>\ߟJ QǁM':Xޓsw5>Mn#>+|rv*%9߈K+r$~']C3o4p~7]85 :hO޿OȳG(T~2{Ԏٵt.3͢KX`>+T>* >&.mB4XYOɗs=8OD VS;I"OFOŗO$|}} }^Q^;y4Ϡ_H-A%E7J~O=N$(y4Now!!y?G8JE4w 휣ǁ?->n;a%7W&ʛduЋ|/B'ћ8%qɟP8Hw=wy ypƧux9 :-C'&8%(@G { As2 :qğW{?-?KR^ȫfvc7ރF]ګ+ş`o|gao t*ym{&|'w+|~#1eQͰ˃UO Ƚ?qA%Lӊڵ8ncߐo"ch<};P8]}ƞyb^'x@t4V%Be_A=Q!7 #?WHcfܲCo֬DZ?~8vK0:?3'໓Z/DQtxSO:gԎg<)$ZM|/۵5 u$/ MsuB /agC'}֛4_y4a=X/+s"Io&B|E>{`~27XRWSY8 u>39 :1zXcC/9Eo-.qlː?XȣcPԑ<}3Ȯ5>5?Wq+վOJ1D=**">|)dΦ&&VK3)nr%S/k䕅~9F߉F'_'uDb:×'%y# 9M41 ܮ߆Ə 4?j?1|y?%3yi3:<]!7\N] Ƌ{SQ:G3>~771??'_|>#e~%wa'>~Of/Y^-Յ<[]kHŸ'N %q3 /0v\L|>%=K?K<NV|H>WÐȫG~+r'9ȅ=TF|t)p3&ny}]SlGX'o) c~^%x | !HpE߄>)GuӺbgpr1} 5G<+M:/ z==Ä+)w߬}s/z >Nc#7V_W mg=~!|/a郎ZΌ$X'E稇} _54X>N׎;Mԛ׊x@W_CW@Ĺ`!On즪cW%spJ|CgŹs|6>)i _-|(z Y OhσϻKߍ|Hϱ,  ?"GGy蜎?ۤ~Nx=&rt}wHz>y8O𑌇^ϩNM&/c2ېw.s7?<U{lKO 1Jw4>\ߠ>~a =!SrM<^pNGh~aw&T~gſzZg#x%7O߲߉knզ~sB>|i 79o!7gQ;gR|hW|ٛz_sGO>"zBiv] ,:q7 GuPG~FwG,wޤT N9/rY^i!<r5cYd_rv|M~_弮'~*]'GgJԝCw71~j3Kc(eG@Ϗ]za?"{_<| &fGحB\xB:*j8,>:՜ރ$^{z!sgQ ]7`Wy8GӢ/1(|vV|:Iq\ G|>=*A4~ }Qު`?Aؤqo|̃猺3~Oe=)o],ϙ]|ރeNw _>z Ne݃W>:F/Ay_]OPu_ݢvCwFaW\uЫJ1DLL7?c[Ɓ+vIŻ[dB>jo+}.? sGwGF<>ך_.[y@'NiGց&_h^-z;z1w&Aס;؃7ߩ|LqŁw!\ء=ㄞӼo:zEij"Eφ\OsN࿡|ԯݩyÏxs _葑D_&v rvQ_F/<v1uKC|&|x|?H@#ޥs i^?/ gREg Jk>*['巏 zgV`þ$|ϋ1ߙ<> . =y$?v yOGƏu#0|fzꇽEAnXV;[ OWʓ}O*oy[FC}W&ygOxu|H[}O^e=wB5w:}1C~FV?sz,~<,~"w!sD|97zg1ƉNߡ󻅿?"Ћzfq]{5yDKGd? =XJΥFގ)gqě\q jE^j<б}_. ^{}E'/f'! T4>.:3[(+z{ĝPϛ=УZ-{4tW|xYStCvӽH_;,a$_zj᧌h }Iz^d0Uo<{Щ۬xnsCmd|'}~ux2o,0k{ |oZg]Ί[~%<_'nA9# 9]ϣ".8$C΄jQ7|]m69C:97?9|gUQX?Ow39, :]2=㿙#o:psznrTi7=uV!q^!;NsqUߛ 8XD̾~ğyYy,o u?ܫ:ꖯ:B 4/m2?R>#??v>>8nCOlWh) g_Yz2tt}Vy~EMr~kW^zW"wz.篠^=A|9zBօE<1fU`'>sMoG^?[<^ ~_ñosNomj|Wߍ?{GnXƥ^nxZ}KDI4A_|9"o>:G@׽  }}[|\~ø{+qF>uObbH/kx=udo6}z[?zNoǟH!ߠq(ƃ_=.ʇgkvo4=koyB~$/ڇnaB~Z}ω"}>4. C+}/N-i颮j\jxٴ@g?/῀~u;#p#3I1?G_ }!Sػ~DOB^-/|/ avG'Mki嬝ǾС5-b/ȵw6K{ '4;Iw Oi~/F} Zz ;Щ'Fo(>HNG2]o6dɧ}/zOb'1'gR$ H=9^wj_Iwȯw.:`oy ~$UYW+z=E>[II_SK>E%o#zߩCe=vz)O|}Kx89(e~nEAq=k]V/z"گVH#7\:xgG~}O2_S Oqcדi|1{#|{Dݏoʟo~_r-oxfcIQ\8xa}}yqޭ^}G~9jש}ߤh^ W:[${19E޽OzSa7=ų>~|{M>_ƒ@&^X܎wIXiaLn8ܮB ]gZz{zN'7;+qkb9kz_\b'4)~7ue~:W=[ZW!78-ǔ_Jt"Hs!n cy]+K?܅R'炜JQ\Gk}uUtmkv4 ;O _<MHNEΝ`P(uItJ|3 }<+eVfőe0>}ɠ4|nȏeZ\4֕nJ{ԯG(IG> 6=hߐH)̿s?Dy=QzN։c_NQ?_ B .]dhh|I#G/ܸMͭKN~UWuvtCypem]3}_怡j3@?*PtY?}=\?}3y@k*J;pciF] 7t=`pjժ]5To^ھP v=Fx@;"nԳr^ GE m+< ЏVWjAwe(=387:?.Px@^7ZFލ`vp+V|`EQWh3TVe@e[gzpp/@4v]Rw p(oq塨džbcՐ=VF,=XYtmXVz]?jwJJ˺y@^)|'M_ ԆAEKٖh` \ָYPi/cU_`ݵu]ԣU+GvExPyUul-P(Fx- D 3{4P|KEPt~# hpDy*1*]*?]Hk@NMz'k}/m69IPf\ݺ X;wW"܍ҵZi{7.Ea.|cj]sX:+ɍ.u#rE/E_Į:#UUb4*jb"t5r (5)r浶(s0rb5`Z=(?Kl**lUF@]C 2 v宸c]ܕ- (GU^Yd]d<~4e܁pW=R nC[9P?}٪Wͼ4s|^|)@׮݁"^ .igFtv lF:U.S0N;^LC~1Vո:>3$׮Uu5C$bGl*ЋP;h:23(.0~1`tX.⫫QqθuPUʵ޴g[e>AY?d).۪|5Be }eKY\˃ohy v6?U1s qҝl+Vf|+"-j|ūp=EOR?_2t3NPw>^ Y@Mº Puպ>#  g%Ì]4];ytu>*ۙs3!kFGAW)s2rQ-jsT87@[Fۜ=/Ƭ<ҏ\;XhTlG}-h0cSFWm;g@m۸gf(DXzߓ;@m;D~T<( ׮Ϸ}Uwʮp+' GBA ȭW4E@r BLKu<صukd`ɁYv|wvCKX埣/?Q/a_z;Cxv ;~SsZsD07aTs=:<ʑtxmpLUc @34is Y8vhrMg#hf wD)5sh^Awҭ0t{ t6;|lR5=@4Q@΍!:ϒPQ Py@;(F DW\{_Gmv (n0B>.+XpchVC^%Wnμ^y@v @ZQS˗S@SxX]5wvd]fAܩ\Ãv]9K3Ye5' *ONHN&08@ a$Q#]EӄPr ֤s מc a} znGNQ@UTmRFUk+3ۻ?7DOhKN]E(Jٗcj垩kLW]͜ĺvLm0WֈXrϸm^;.z]#zza3pgl0S@.VM]8@S820~]vW];rw}ۢyMBAi:@γ$ΤWbWm[mjs|sq銜 \#VuaTqt;uN[TU73֪kz7.WFPamt]|~֍ѝҶt P9e#msŕS#5mYfp>azz%DMyH54nRLGh ꑛR`{X#DEA]zn#̎FIҵ]G[Vyv^ud5y58[s8M"uGm 5VxpԠvIu\ی@ҰSIm'MmS3ϔE4"./L9e0i0 3smcE@|ti?ɪuFJ5P'܇\3" idJN_rw(sG[V AW9' UɹF@Ch|?MuUW;"d[#*Jȣw=ŀ<׆ߤ<ˮo߹knnUs/Ɯ+7/ڴu;ǯA7.ܸs4y^]]s7\޴m%}5tE-n߼wn}Ͷ]7--.qqn־፼7-mZtbaV} .l³٬~p醅]wl_aMwܲ}ێ?65]ww-0 w,-ʷ,nq[qoƝKWo^ؽ]aֿuܰciq玥݋K?}ˎUk׸/SXӅ5,q7߫I~~.ƅ\Xze.ť]aewn^rqɦ|t`Wj`1x)fM:XRߏ~bW-&{ދ-W1Gˊp? (m e R^=}̞<vvd겉OTP.nN_#ġ@9W 0Ѫ@zZ=4uWOW̆^vz]6\?^}aűݻ7C;gwx|ֽ{Qx.a]o6ƿP5Z}@̋ncT^qF#؍v"s{kye\tO [ݴ%oiӦ]WQ'IN#F˂r3Lݙ"+AXǘ>^=e2y?򛖌ԧG#ivA;}띴?Кbvg)/Y؂VB݃h^JKb̓Rv8k2ɩK!1Kkٳ.w ;1Q11ۈ _q83;}ʞbNoCNK{oeft Ōٻj=YƗG<yRPKe ҖXKT,j7ɜƒZ~gPqi;3ԡg_lw_Pkz۹Al.uXʺh|.;3|5-,vL qalc͘"KXWĚsVuLX ]' ~mRr?T!ﳄ%[ _}8҇-i"0Yo2̟oUP,sGw{GQ0H NLM\vրHg;=Fj|8GBA[ cGN,D1b r3z(r WYH$-oƅ)mq{6@oށ^6s?ȥ- F蛽5֫/ !OQ`œ,oՓ&|b\CZ{Jay4OYxZ|&s1n|ֲ]ovM٪n2Wz4ao3^BrfRxHxؾ||C 3o%bo_s?todk11ϟB{_,CGla/Q,Zg"BH?YY(oT$~-%9_!>UWH4bC(M~^ɞY~Zba~-䧕>WN!gqgo_0ϓ'Wϻ/xvݫ,nPby 9}S>c,=eYxgu4f-w yD/X/̳ A~߭`,dT/ %?z&ɱ1s9BzZ5}LJٸVv0`> ͨh~m@yl0 a0窇6`o~,f" M;`_Ɇ3?o!=/+Ѕ&u?ZN㮾(=͵U ~&躺OsjĿdoʱfy|.59gm. \ۜwF3/I8G+ 1>dO \ٽR2Ia$w<|'v|x>#ǵQX&se$+rK{͌45:i.#Q:ir~M @lo/sp3η߾Ē9d O~s= >~$m'[6;>gꍳ'sErNžOy>h׊_eGBrIn{Ur O4<s*{͠qڕܶN}T PvBssGp*y ~lIyZ@)7m|aװo3eW;:y3'!!k(-^JJ@|јkq;[x' 2r)OsF<.n(;}/Ԧ|gIBtm19oZY4ԇ wVQxMO0_ݾdSyrW0uPkBruK(LpCzONثwEh!k!. }(.3oJeklI7) >闌Gs3_'Fzůd\%y 4/|v.TE}Xbv$)t4+Tݟ?3f ~@ݴ~g"gZ;;ߥ򸵯q|ID{3̖F$Annn/ϮΒ]YqҷXJ_G-؅(Wɟm$> }l?8wxe4s?rdY3&^+)+tb˅,dl{gyTa~'Y7y$g0m˻nSW#l~ſLz}x~˄I+{ #y WC;qyc󡏜)׳2ؑ܇"nkk=Ŭͫ# ^gte7{J8I|똲6RWB>.Vm1G)d\YZwa2e_9i3&)"mu$?/6Q6~nqnV9Fb7*#_IS3g/K; G<9fV?vn~Ŷ^i# ??2i?_G|댸R=W}"/}`w\!uk6 u~}Hu~Jj$y]݉a둬 eoŽ9t meMg`Gv}0v~3~ _&=$?@W:ȗgF@VkmkϜmle/xp KnxTCy[ \[ӽ+}sucҋ(o#b~[C& 7 2:&Ew`S ;/}M{\hl$ʩu+~o=,o1o@Q׹RN|yiM󿥼Wnr0ɛ*3ǘ7m7Ÿ~AzhtBa\a#,;Z oʀ_7w02O 4z`{?w+X`/vbJŢ3b}8Qܩwh\' ϑ [NqC06x>)x\K.+~SW*0ɝ=z<f s}~ӄڪhaԗ=8сjEshz^ z7.%;0sΰzuGgQ|xEWt[;@շZu\ /lb&[nW]!/g_{gGOϿ]!@,^vL˱z&7lKq_{&~ZȌsFqDdY 35ys/bOϣ%""oXw{ O6Yd= Gð _:W6|T534j6Bn 53R/. eb{eE'ۿaxN ݸ"[s/Q#{XUcf=?yg!/F_=t4ŷn H6q`U֜Y`a&1''V!o)a(G0N?wwCia'1zw O v1_r4$Q7k}{OD~7i#{ 2P?0J#|4<]!hYl[sZܧ ♇X"QV~?7 W^| KGhyoQnс+A>-Z|Eb!ףfoo S5N/d4z/nO<8^F')B}c3g$>ccN|3\d;Sh$}A9NXX#LƼ {\Vrن<> yk:QJ#C= qAVcOn;pAT\oXkZJ'gkˋ ;˿{|!Լ-Pg ?%MB>#;yd[ݚ!'h'~6}'G!~q0mF:)PHw'.k{w3oy5/^NZ >p8F:?>d(su!CsHv1~-~9|8~7 ˍ_F?y[|:m6Rc3X[QR4MKfGB?jǬxP `?vmu\"kGk6cpH"z[, ?2u!.'giO%}1m#%SPO Nԡf|}L|2+t#$*@V!ۍ <@>2)g6]|XҀIa*n`U>/žhZ>HϷwpVaAZ~00}D≆SG󢂍7f1C|)?-A?f"(هLy. 1yO /{ENFI7Z5pfb2,l0(m$} rD"vwo&1R}eNA;;[hܶj#6Q?}g?'go4צ4ꨊ+|]@0k~իy. \/H<-ؖ58X{kԂT%TMxߏ~2 7' FcS86n|i$y@,wpsQCa|箑g^&vqdxǁNjEj+|q_ŧ_aM;(ܞfz^p ܿ$s\z}b2]@9tἌt3gn}`&NlxlWS!'f4OS]n0;]Q6^atǡo1oh.u/ mwx[v O܈R)]qwgQwbX}^_2^x=qK/{Ɨ~|܎a^b;x~![3S~"ibޯ10kGB5e7W%eP6Q( ʝ̀SRP5wnwk^&oyEP׆!o<SkH4@[LJ :ieBdWaO=.p*?9iF$o"\<erF0o1wi]pIcF?6eYX(cn+h]M'{8}CVpt o-V;{*3AH9Uw[受}@|w#ȏK5ׄ[6a;w~ 6< l[~0*!׭[d6YeT>7jmu(RrG ^9AH+T.4Qͤ'|RWr{ CM(Y5c]R֍W$\UAf]l/ѕu=kx2?zlgsK1!!Hӧe&DCYҵ8 T`7 f9Q8w쇶 02M)4ޚoQƖ;x|KH{LnhF‡4)m^}f0ZxF63WqJlg-Qƚ'CO)/ñ9/Þ@\xG|}Іñyp\`X1N3^O#m0HH=rd4V5;%m0qUHwnVLKh73ʌ6-nU/خLQl2G Ph׹Aކ!i:c̃MOcAOd׺dn.awzN 41-'PY؆76!< 2.m('7mŷmCv;C?wWPns{y[3o 9?Í>'b{\4+lgd uòR"q?YQBEұ A3_(~.n6 M|T"胶x_Ӟ0oFdӕHnrXcѵ4o&~pl;4Oj|Gـ'οi=~ ]h>7SQE%Aw_,pW| |]f(@|gb>$}_ 1lD|2`ޅm'8CnN{܌ Q>mhK8Z j uuyT. ]9_F|h&OK>g镤;G#]} 0nh[Nw4Qo },lV? -GhRl\,z0m1l}@#n5BXuˆ k,ޘ\u>+~vc~QG6.π(Kx-◂QvQg K^ 97b0R7[ݭ]3ڣ|=c8!|pt| MCX}>eG`G6oӻ4 (gwx ߿ܚi^n0il?)H3%O@!Ge#QL/7s6moF'ى{(Gp_Si'Hݎu yVYlycV[ 56_OnQ^t R{ |&Z߂SH_7AY_73ft ͈jjᏗC }WE&"wA(?4#H=  Ҿ/TlBq,`ƹw\3?^}%u1DV WU>r膼x^x_!ٿeޛ('v.kV!rE&i_4ۧN G?SiH{c>HW'܀`c1ؾ*:As9ʞ&ڃv%06[O{[Af?D>l8H4o nYț4[ҹ ,X̂< A{LM,G`V۵V++$VS[܊V,怅GmY-K؍cK`o"bѶp,p\<'O*b'5 ڛ97<+ ǎf̈`{D"ܩ0hHIDqsZ7#g*U(IM[{|;܌~[f|Əs)^ctye)nh3NYmʷaCyjϞ^cE^>Ϩ_sml D|wcLyb#;z:c4:4qBt>e1D)Ɏ?A`{rna/'xZ<%v7#mĻ&< مCK55f(_ݎ?Y9[LB6?~va9˸;a^MZwȋ;4"L >lyDښ5ċ;@C'c3އo1n"fҁƶn[Ԗ0ϯ>adu?_,1eǼ(A9^u?v_< rbIY7 V#L']/鋚{"=SnGTхHM ҈ Mh7 =W5Ysh1>y =NKq[F۲kQsx o}.}O&A;~+UXciE *%6d5lڟ{|q޵@faW5 uX^&ܴiîzʱFC~ɏ1أr/WDTaGO4e:מ42F-Mhi.om3>o}_@j-3;*bQWlhoe=NCVcsq4yco.of#>%=yBO3dx=b6 ?gw2e)Q#qXMGa!,RN|ƗXqD?>>e'JBy[FڴjoC~\ i2cI&~Ln| ec= ߇ǾIQIn+a6r'`;Bq Q 72+tz&Џ-8~%g ;SywqyS}.:ܤ}Q"g.Nw`dЗ~;swQ hOu9 y =|obDSh $G{ZƹB>Dr\f]CIzꮢ?N IП`/6̈́C=b?q8רg؏uW8r}0`y朽6'ROsoDʄ_靄|ȹ!>FPm /7X+ n)( =9Ca'y1fkn-4>Z6Z琯 ^zv̪eVbAxvF7?q-5Xu~,v^]BEY/xzY"_ [?wߗ4B\y/FzߧۚÞhs=̆'6zۊ\ /^0շ'vD#Q6CƅAjLe$} ."~_KCZnG% ?b_+]m'#]':hbuu,eoŸ!/7 ^_ـwH"9>?WRJ @^\8ʇCNʬwK0m+LI [b}^( 9:dg1`+y[1D3 xg x 6s3?+c [އkx̋W8^A#SE%:(]xM'f=g2ӿMqD\oA8@}Őw/qC݇;h?RrsS/aWQ7gƭs moO\s8MO,L86;}zd&ǾӉ aa^̻bBU8ɝVʬ&ϲC&CY#oqh=eC7NLF/"mj=[9AA} szؕaX{_EXRL~f-7 O-oC}a/y8"v2hK ~~9ZS&~"a9k⍆M?w% YdϵK݇};ǫFMk`\C"w0u`Eȃ4&ybKḼwFbj1?eqϋ4ǣzׂ~D~$sqv};ĘJ'p\`z!sl#r?WOϬe/qcj0ϵ!oznxe1P 'kX27{ۭ{NX} A^"l1`~uc5gk"mv=ˡwX7!W }k]ù^}VNji!lo0)}xl2y`,fR{A]bkh{Vgm/"!8^X)'ͣ8ѧ֣ X-m7J. ?~直^台"z %CmY0-`=q>F;٥{i뇠ک.ߧ=b'"OǞ%ߖ_읂x9 1~\7{9<ՉCInm 1 #v-UǟǠ`9Kˏ1)A~};#zد ~pHH5Vykx= -?z<*./ OhhScVܐ P5j ?8DM#'wt7*9d/Q^~MRR<ϵd(X 򷥯]: ij8.{< :h-O'B}jq8#ȷF~?7U0Kyƨw;u魸ȯQnWυQ,2?<ߢϏߍuyM{ēAW[o~ }g\y|ixzNv88KC5vO;do?jcϭX2^|f9! NV#?-!~&Г{;wl> ۗCj}է\\m|ZOǡ=7dƽ|pD6/?ӇW~ߣZ{d[OIoU<فC_@^~(b=}tˬWw~NʂaZ1^zzwqkh3WW\$8"/VrY辰xԑJvKTkQ#&&.o}ͅ9b| TvȿYu%<;"7Y#^^P:\Ov~WHoۜYwn;,B }Vs?!%d E?Ϙ 'w¿ ΅\[c_5|qz޻=A/|s:|E[T؋1k?kp.4YtzT]~垘?GG/czj:~~yTS}Y[7sD8S)}R:!Ny2Z~-5OC7JPIR_dojVK[wL r+DS)c*3):O ƐmSz[ĭT&1˧T[1_O_&qӏ-m~ ?)!PU=!GLW?TP-7 ,OnTkKǯ's*^nfm_'o֖*_;oQS}JO3E~9" LHE5:r ?wLJ oKRTJ/ EjO7ů A)s%^' mjS;/S=}v@cįޖj {xBL/>_Ls/~¯%_'j&AWW{*̟* ]߳?)?o*!"*Yǟ+o;O~Km2>Tgb~/)W!GET_RRUש▊oUn1*8m5hH[~j_'T{/ȁ g#_ʏ?ů/޷^+kO_J.:_iDJŹJ/{wLUįT~훀KЇIG%/eWU`"* ?_KYC~amdS@hRyaj[_A-bFפ~ PZY[FcZӧ;);Jy2VI;B\&[_ ogK8>R_'AxB?OWI1~jQp%>똊7 zI )T/!RR l}Zui;&Ч_,¼~:y[*ůO{-NwLpeOHQtY-+AggK$?/} boywU|._.p?Nr}%~ޜ)z\:_Sϟ' Ng_ $0~U%/*uLy|$EEשWuO@:3RS0ů)*kK+3:OO:1T/8'_n/3+Q9R>KJRUW*qq:M^OWq*yzRb~\1~@gU*Oռ/[xϛ*>UT;_i?~K׉U$l[YRzF2^U^'$O); ^l?֖_/"gK/'-O <ϧ<SUI JqNϥ RW)O ggWhR~9Kto7/T*U;~8++S)l|2,;Out|Sï:}ݧ@U_ ;ݧJ_I-1~%*^"=)~T8^Wo$#RʯEuv.NQU$ 8A~BS}D bdI_$-Qk*|5wO_v\~jS;/P*/+ʞN TK>iiiK5b9UI]/ zPLDQ_D)~|<-J1^e- b*ȩ OdzTx@vGP/2 *߯J~z@*;bU?-U%vHP~n ~`;:Jo7wq^vzPj:J,jmrJҖv oZ!m/vHW]ٛ' i;=ǯogߵC:"C8DRY]c*ȩ>)~eA RkKAJWοZ[*_ٻK U_4A?JqI-zYTR!i9~^{6Pί~hێWz$ K _~em |"]8Az-4_s- #!P<)~a}Ŵy g8)iiK_DQoKuqKۣ_1/u~]yT VL7ש-}R[ J{R=~ cRŽbZ7hg:_K-~!N~cڮwӖuLq>1~~7}gSUM췴;_,7Z{]  #E2_ߕ~NUW -PaqZ[<Uo ៕qc%ޫ1U'ů11nuʟ *ɯW9*S___wp[*;_ϴ:ƿt!~UD jmTL]&AWϋ: e#7TU0'uAQ.+UC|s+YT Tn;ܲ, ߈kY)R¯ק_o)~7*K]/̇~)?NJv7]u*DJWgUSI֖v穝=q$NpvxUCY.c%(.wLK%o-E 1g q [:T׋ƿ]&wzOT;9_-)ڎϤTgq T9o-/<_.T6~U|"_,RxTNzN1湳|._-+߫1](NI9vG;1'a-¸x|T-Ht~UcM yvK-/K_<._Y#b\-jsOᗴ*7g*~P'P,~|uJ?uL,]^&Aoc;MD8, u_?}*J!Q_'r%(Ko11U_>z_<ޗ=\oYTl¸|~!N㗷R~@"wz[qzv8}b?,5KǼha}?!CSmc^6پDєT==A߳\dZGXo_<ݓ='=Ed?t|Z7 }(ih>tDcp-:6n"|6s #tlV>YS?Xc0~6DBXzFLmlp\/6Z*\7rt󵍔ѹEux +fY>=c(zǏ}~Q3{Ԍ5GxQscأ<9?j㏚{Լ5G{Q=6Wqոjs5r=ma ġIӊC#|}fgvئTB*+- V۲Dçb/z@0wv~;1+JD+JD+J+JD@@@@@@@@@@@@HHHHHHHHHHHHDDDDDDDDDDDD V*XUhUѪU V*ZU`UUEV*XU`UѪUE LLL LLL LLL LL ~qxuوlt_v ֪زG`#]z;mߟ_G?M+tWg]}͇lX&ԟ.χNŪ.?9h{R6/ih|2;N6掕Пd m7\}?ku;]m^{<~ m6K_.fӥ--ͱv"xvjo\{WvЗ7'FlUX8XwDūxUہJz7=}3 |xz/FM{ExuVe _駗Ⱦ?6ߛ-nݟlo؋q[p<XNqʄ7}S+\?໛|m=жt[v{Yi۩tz_sty|N>m&[{쟏qqloO?-Biobase/inst/unitTests/VersionedClass_data/devel/sample.exprSet.1.rda0000644000175200017520000017141314516003524026703 0ustar00biocbuildbiocbuildlTTY5YJ$Es7MM91+1q9ǜ{>zs-Sk׮:a^֪Ѫ***mUڶێmQQمڳXWn^^PH/1Rin^IIIIWv߫~_@+W؟;+ҋ cI="EY'Q(Qy)KekOwOv;',^ܩ@:\n/@o!UTORVe'w8QEۓ6v#Ii7vh Ezmle NSGqw8EL!COTICNi2WqIRڝb*F^nvC—@*\J=A!w.Ygby\nic*<^;ʈVY#Q)de~j2?s# $-RViݒS^ddJo;VPp{.i+8Ӷ%$kFuwWҶѿ_SM_.ws_R{yٝ&97믎Xhф_W:QRJj{IDL/̣䘬:(|̺Yj{;qJFHZ}&ef?4ޖdedP,\2ulOE:q^XUڿ\0YlDV;OGGR3_5L!>lHVXD1>}{wߖGyX!l V_ 5_2:s?E?>]aT$ӟ[Y8p eHnq-\ay7Jœe)$ܟc$uu7qngYGS$Ჭ,Dٵ R%U˻ "įAJSǧQ6 /SHs-ۻk/D6U^ӊcWAv$u:TBօj|?dQ|$${ik}}CPh$8Sړ"<ŪwcVmKI\v%M},~>7pKNRv8J؅믷hG w-suZݼh@b<1aPMQ5 ? Iڃߠdb+kh`ѿµxHwf\ q9G5GW33MȤstRc,7u~xI%gϡU]F"NpvmvMGk.WdipdEZR}Z%-bddh>ovuS>>eG\=:8med =yTǂߠ4N_ec߬ޕa?æ7O70Yxwϩ7vgGHaXE 'dg8MG45ialߋC;s|%-T/@ԠPD`»ѨSu;~]ЌF_)}T[< \]Rpb 2Y8n?h.~544QfO! l;g]}1?H+>9OD<҂qy y1rJ망h&o`7Ŗ>pZ?N҇?*Z“קSmΗ q)WɟO_WTe>_(zެ}1m^@38g@_~S1;t>IZOW.uFnK/~|D1>{x/rt2T{u %"/D迈ǰQǦk_7 OW\2Gҵ[Ycy?6p!JoI5 Irb 9EKib'6/Z88ւu6U{b2!,K~|,-miGʫpD+zyL%pS;t?- ր6& H`7yBؓϾWbǓGX8@#hV?>RR_@P?n#֡EG X҉[2|/nk3'4G8ԩE$>7GϷE"N3_Իmiwy/L~/To?o{mM|DهBVS}˝[ő{$ONQ觙pF߄p壟OF}`ߥ7ud<8@`?A!:PYC IWޞAn²FدiŸ^J޻:S O[f\"Daeq܆pѨ W:r~{Myc ć&^} ȞLG _[d u)|;-j`w榺M/'l~5S\8E0"rX ^C4j oBBbKۅ kTG#݃ߥf7[S(.M_}}eTpa(PёOW~)\uy\/a=BOa3/:oU49̾ /څl.ɈDŘHUBx<C+A~lܝ, 4t$Y\*sD'2엃d1K(>8yk q{ig*(`'5wq JC/q@?ՉnTYcf0Cs۫lQzr^9nS-W aӭ>v~ŕ7ï-G ۣMyEJiCZ~vu>;<'0GH)- q+Kɹ()6'.Slڱ=: :|׏\ۻ#gQ6)t/`(ӒLw/Nf_mhsR{і7' #,v_lAp8快zK8!]xL= |ʷcGX^d30zEFq$I-}N^u<=d 53WBKy.'g~XNn[w&GS Ò?mD>3VH(j(FaPo.%adua:>}Lrż%:CPQo,jT*L/+ɣK7|7noO-"OoIV&XaaUfA1 q(lOCn!<}NO4 1z\v䋎,/81zʐHC@ ](z$.u5KP6 8ԿǼTm›'Îlk%Aqgg>DUb?G!΅UX:, fޅRF A/ Zx.zb_nEQ o q=*C ds Ù*t@W xtwH| gȷlս@Pn86B >u؏JoyOxၘgKie|IB.gE~ϩnwt22ôa^]1AciC)~SxEEdnO"85u|'upcOO*uW[RT P z~ _1yՑ?ZOߘjo9/y(F>^iOڈ'=&jjeAǽ8dAD`} كGC,Ot-LNNo.@g`5pˬ ;u:69/RdOu"{ن[峤Xwd$8yJni٠6~U r. SItWpo];(8'2]pWz u?n)rWC`A_բ.GowGi7DHHqiF쿨[G& 2| %F%Q/E.6m'N^K$Ku"qWĂh(7KLPgr`_ }Mސ-ݫ 9VAwm!F>H$]GvZFO^/A!..P-qʙ_ʩ WeF"5!>z/rU" ywQ\S;fNY:C)p+|8şB:BʟBah<`d!=-$ߞB΄ pOiKe7ҳWb& gHY/սxGVvvzb-e2>r yׄ!rC@p':e<쫛+O3]8Y@$OЏIn8 'P(R/SNҷ똃C\97y}(-,v}]8nˎ&3I#uFOGquP ]FNM}w  W ̸|=9( &#c )vwFFZioX9[T I;DAL\[::rf$R:~3aב'=Yjdb;pk=ׅ) sZ aioZ&UB'QtOZTEprǯ3B~= `4վm U%òFGjM?xP*fA ro|CW(~/_d1"3(X08R^w&n > ֶ7Xg/N+Q8QpN?^&ijM𫸫KsC]Z#?x!+kPwz>^ RhMBY/$nnXհӑ;™ ?ַ}z1aW gwkޡnJEj~x +5n*SXNk.pYw:K۰t*td*e|hK{p_d0u/cvOuUy! rX}'$ק:Q /,_u.D|r.c`-xcz jK)"X?RMoq5*|}%o,6<4k78%q'_1}0๓~)K>wJv+F"L{矣gPEPSWgtҥF?[p~1%VH?3ҳ5+[ܷuND 2b}y#2hӐVaGޏ=P:DT yH+'7'CЎIwvl(dU!*g:7[  _/j}-:W n^nwigM6WG +Z\[ % [Ny^4 +u.G ds't2]Ex(םs5ބ~V>!D|*4 "z~E6-6 =.? w WİQ\C7\ Ý!y]E.d C?s6Ǭ'i=e/Эx 3cnuПIeu.ӏ6"^7/: xw:\GU]QpҍЙh-yYi.CoM;_+tv#oF<6AvpY7wL!l9uQ ;0 o#?.`֮s ]v+'μR\+ *}W ?j%?u/$dSC v\N~ ~c/$伴@@}{~K}_DEΪ,G3/B˓dc>l|%(UhV*h096|jI_u %!ȷ|1N<3ty_9,fABC Q$P=oD\n! nu}!Zy,~m~/O|g?+%I^Yn0טőBqagtG'Ղ|I3֗4TsZ~/SR%U`g_ú%E:"Yin,Mį4=@[1\h7135/yQ*pt`ޤH{1&"k; Y>Y;N!%9|PGu7 !)Ӱe㹢Kq'iŹw 9ȃ#?uS2%|'k`ӽY_w>'<a XO:y þ'L'bB܎ UvYW">aMi};ݬIM9sCˢ{|-n|.#%sgzbpIR Yqyk~6,B_]e,\}Ns8E6? zz"tgC:qq'q8w/Ea*)}*t+[t/ðbq )U5xqy/IXWa)^ & h3?=wbʹd<@|==wmVd$+RGcmiRk¯mg8\Afv8A_O \mlv#ƁgL \hʺBL8^9vz_3='I0P0}|'j'nq_a.>kGoV4z)x r|vk?R{9rɅ\]*ޚA<{"0J}ڰ>{ݠoD[n(-SЂGќC?2}bCmOJ)8pư!l[S"v-V491s6tG }#e-<;/~=LJ'xhtԓՓƘt ͣ3G1YsIYkJù]"n^;kAQ|^fR%6@;; + g˄3̵K=r$ӚWa)<yO뱳'u?x'_5"Ypu:-0gGA`"z*8 \M̀ΠNW7ے*[)a7o@b_iwFij6{Qi.ĩ 1|7@Ln|+=ϙS:PAob<L};N,:F|A ~k-_ڈ><{ πgnQoI u&*!.C?gwq}8SU^qܘ5СЁ -wvu>Q8AIG?ǹ*x+iQ,Ajڢ {kYUf)mY.>bxx_?},$=ryMڇ6֣|8:Z"oq߹U/?ͦғx#b?g-CuaU[EƊ(ʐ?zv Z/$NC;#0Χ:F^9,8lV <;!O>Gd w,_/CΣqsXqeשY'a**Qi9M&Ge"'|9ÄU zaӰǂ/Dsč/Q'3];Boq Z~KkqϸGxȧbX % ^;n;<(Ź+d谡8Xxh7 @IVCOLUg}]PgնqN?aa*U3aGeob=*ߍKg` aA,Qז"n&]·ϓ"O}Q֘SP4xy+rx<g%??p.e% AF*d;x3[{7s1Nc7A ;!/ o5aˮ][V~QS1qwصKPLm6CY%nluE;{ biϡko-Yf_t*VzjuKQ+li7o@14 <*ʤ879`dE;ܽ f Qvkn6w#ht>Ώf|G}/a;Mr6O[ ]] uGMb{U] 4d#_D~ ?I!?Wv2d9~اASb%Ib݄0<}]sJ?r./[428=X6|ר.пڡ$sn "dBWZ*7ONߘUz>PeyJbCތʴ >sjNJ~wH^z$E NUl 䒉z\V51}2]Db%se$?vu 6,r)t;']~n=P/|ǰ$  `v>' cXg3'#}:ćE) ٢jr6NB?>B+w()l$~K|P2:_<A[AO0 29NQ[n=&@>mKnGۜ|uNW98p62f'Jԁnf>F~z#be6Kruۉ~Q _|0Ji?|En?Q j9NE\(dȚY _|zwoԻ;Im7e}F393G8ӏ&xW"Ai+F"_^sA~˰N3I}RoƱ3qa_iGk=zyq&G aMt[<(x3KC_8G%9x|_Oѧ3~B>1=\|z>ֲ?'"2UW~A,xq#QE^\<} 7' :~&]<( <)۵ :Q,]=zOEOBferWK8:w0tK֝u'2hTy,|Xqn[ ^C=n!~r[sSl$G|t"¸'p޴< |_mP2g5`F8>:ۍ[\9Z>qq2giCq9QRkE;L|pF't,hpt䝞\|]؇, qs*gX~ơ?.' yiJԓ*Cq?s7ؽGbRQb娯r><9Ciou'PQC+ ~:VA6z:$2s&|wӽYmJPH5;%)JOgq'e(t xd Jb?#ߟ}wjj绶-ή7E)ynk{3ݠo'K5(I9'+x:A?}59'_,5x;d|EqB* R+yxV&rj:n^B_ohKH뒾qb`? X'Աcz7Mh !Bܹ=Nsg0lwcsPug:^mk!?ʮ8I!ˊ:'Um-(ɃQKB|,ͅEuw'y\7K)} ,iPR=}u Myv>@aJ=4qnAFjӷ[^S`2yv|BZ/#\\rv>@~ m`_{6C˘:`nHV~펷#/N`^hCV/+ouT;]Ƣ'O)'_OX|%?`=p<L"njgVWag'=6{n7g$1~$>=;T\{*}rRHIMp'yA_gǶlI3֭tmB ^4:޿ix.M⼸F7:C]k~Z8 8_偼 q"0VߟƵzcKwew3.D>_EȳVż [gc"꧜g/H-A عU?q^p$d} KԦ t&c{ sDO3I} s}( 0*~o it}Sfy¯Ї3*[9BuS87OEDGt{lN1o9ۂ 7]챹P 6`+WV ^29أҝ6A^W}eZB8dRM#ǭ'X ?rl.fjGk5pva]wj`S{C~pg-c~ 'NΎ|}|h6;s*&2}s'_"%QqW7nDVvޭeXw.8&v頞`wuch5Ze(ܔ>LHB>r uB2A+y}>:>%U/m7uc[#_^:_ 1SN-|A΁c0L栥-DΚy{gp^# .&)~H4F(_M2؋E6\ؼvGsF~AE9Nbٷ\ؿȓS jR&AW|nM6=5|Gs}h`;ӧc_sO݇fwV_'Ά[.@}qJ.|w";p@nsWM7~?) 9֘ Ŝ 9UB[@o5z|-D2w uP};/ec,#| =*TD}cr:ĵC@S\%OB]>+tB ɫaG#oCG2F+v`;%ᷮ#rA#eusl吕k7vFMwUI+dPX L8%)nKgo薳>B%B(88G}(VIP(v4U+lV{{S9!b->ϖ_Yy͍cs3Z? 0x9W~u_߅F x@HY;CF{?e꩸(|+y[h: BL/!>ɯֵϵ {%3CozsZŹ IiLsI ɻqc}bJƽ$Ψ[ eR#ԝ:+*un98.mc>U, u̵oo]0O3 }2= A ӗ9.%cT'# j?nyb: PBsJ]gm?lEYm]Z >ksy~SQ-nyŽͷ}&#?Hm|\rVWa)ӴeXf]eo9lIP(w8-a1\<=~#ꔜqwdo̧<ҶoSQud9lr~x{$97<lA\ *Gy恑1ٍ4OY^x L{;a~8z^[s& |KYIF^9 d0yء +0G6հRoq\}4uWJ: 9F݃Nd :W!?,dJ*5lyGޛq?`,柯s`NfM|K_q+%΁<^:a]ރZN)e_bnFsLM|ߝ}.u[)~ 娣0l>xs4絋!svQa\ԅ7PQi5Ϻ-ta{Yz|ɏ#!#..*bD-pH?I]9tnߔ>oe_s^ :uon:a^;>>y>:1u##DB)[Q\ȬDUzr~)Ǜoo/w/7?*O<#4!{^*>;|=wE6"^A6W)d}6k!;je<0†7BSe"~yAČlE#=4 E*i<|>!^JסoCL'J%&/>C;Ǧ?gʉif˹B.E^)aey̅pH v t]Ql}ϙd|%} G_B'>*l:_nykC%_)<֪_L7.q]Dƚrq]o+cBSqpNּ/mQ>'}k)_nwg+1DkCʭAePSs'ay&W9iLMSEW+b#ļ [u數*Sc85% 8c6 >(䭔su9lx~-GD (z,43YgYoludGtH3Ab !|}l{vߟ8q\b4Q'Q\xOf=$r?7E)7dl6bT[)>gn(pF2xgǎ @t݋7IQ Dm}UMJOڍ]2|s>߫Aؗh{Y!;7NGg>@G"-|MqSⅸEĉ.ޜs%Ļɟ4#, ϧiךE/Py/l"LZUn<9G.ydqarc?w$=A}SʯPpzupWvIs&z}ށdѾ૱t\qaoKlQKaF~;0٨F[~5#/LE;֣`ϳE0OCװ-s? VCo-?:HMlU q:u^ޜT?WMGv⚟.Rt?$icgWpaEW J~o,:%Wk!Q.3Q_ > ?]5wJ2'ы?~A<_X ?eŏ< -ȃ})v$sRY WSTVԁcqxB#!q`!Ӱ4?~=0z#t=7q]QٍTi춥 8X.Ԥ 9߃b7Ԟo9*d$ʩF]'uR A@ݹӈ=gŘ`NJ:Y㽶:KسNCF>[V-u*{GoVqڰ~MAC_qAQb:8ن5ɷ~`ӟ'VA!݅Hwԯ^W*'K&=wzkԬFMk9 c.Ajyhٍm975X/z]jzo&oKpΔ/qvlv2$졢kSú7[ݖ}9J^}M9nud-kBa:-Tu#Up|&x + Zx\9zpݼDnT~tצvK F;:}z2"ތMV3≊ 8'I/2+6,n)~+;8GQ?~W셷3n;<ů>Р xkwR߱=u49KտcV7mL(Nj[-qcc|QWu~{gK=8_NOy^i N_ߴVK yJm.Ť/. Kۇro9#dF~1|ԕUɿ#`73&NN'\ wSSr/Sz?" z.WD38gCC r }#!>\ýF^NU Xf'-{]%$nO} {z%}P[ `l Уq%wqS}7WXxki8FsmxwrY!8My '/]3< +OD4༙6=3\a=§G{ȺI޾yΣ߾K}U;4F봷 {͏yNuOn*B ci3s9Ţ11ԍu}\]+K*_L?z0p?e~- nd;ǚzӾaE^vֽ^?MVJ>n6L9ιAc&z(vćN)>?l},oXkG~C92q>رK.ub%p wv5xyN+oc#^9n|6O=,cw 7tBgj[wQTfƩ=5(k=oiV .\ȹq8yi,|3>bG]Q9N!sI}$eu8{:XKj?A\yf^.?gCU9 ?3戾RGZÏ5Fe0g`s7\I;+kT82֓uZr<퟉ls>  6j'qpP gYRݭv7h'tXDzt= kDV3V}5Xѫ滞unԁoOXJ]HHA-OBsnWOZvؿ5ŏX>W,%OynUOPբa= M|W^43s'tfTs1D@/d]&ƌN_iý0>Kݱ3s,V[9F? _|/bB_us~5F;s@ymAؙ1=ľC>$6L].ธ>V֞Z)1G? /t.RhQSm\g6KmhSWzޠr ~PuP컽V\ػkJ~]ؘ犚>wz%=7 +>F=`̉/!'v;{qzQEM0!|u}]UTvk~_ Cde:[ jmn$oH\z0Iky'~pt2v6o<؃SfIR N6~wd,b7=o b _ ]6̇HdMGs1 >߲hZ^_{g(MlĝSp ;w=u TD6W&>B~ם|$Kpԍ|Sjo|G_ /yǙ DՃ}r8 3=բ|x>h{PRc m[;e׽uŽ_]]vs<=߻UxSA+ī80nMU~|?e,r.~4/:Oz[VPGsLCg^e*z(8%8s#u؟CRI@ݧ8đ|\6ϩ #=_>9vڔsTg.3ǿ[hnWgͺt < Cu/~:q^? J=DpդK=GI"P7ŽCWg2n@ǽ5+꺶֢KOvzp䵢;;g=K]t2yQݟսwUE,vjQtsqj>s<{b9n>`,yy ^MB1zzrzSayVu\Txo=P?Qn۫n`vзsPLU^m~m!(m;I{LR be>׿pyI_J'N˼J:gdǹm@8k8Ū5TWk'z_e:9BKe>y MT?ٻ TQᥘ\ѕ~r?NiK7ufcgϊjyGDvUʐ9d|؛oiZN 6'_8NNQa'w䞍nOj)#ߊk j246r{18[U>۝S׬GLY*08f AS69$p/br߉8j#yM6qS-}2 WUPH:cG1qsj0?7=mW6?_6s;˄5Ӌ,zeml6OƾD ߲4y {&|ɔ>e;?#5|6!4A8`%?DcpW㊮jFS=#uX7{cS 뉯KOpL:6W;[H@=^3 %|L_+*~ޒ<"4Z}`gSKhnu ʩ 󵌢;7g <_SXxt_h}x5{Z~{ \ 侬{j p='wmk_f}s /{D[՟e]ԗkbI5 /ėx(Ģϴ> eWD̛{4A<+W'x5/͐8>=U1uj@"}[i'YRGvat/HRq_Cp Lt,_=$ E\gTk}۹V_kcpM/*Kp~B#l>H,S=Fw -9zD91q."|oJ~*:e6W9G'8A~Vnyh}XHwҶ-?y+E@yJ s~rvG&| p/+n|I4ꓣh&M !})M(y  \4x'o(t-,O:U\-\HobO w%<χFW+*ɜ7`^vg-lu_[k u.3>̽EGIx>[PjkPwr4tD-u1^OM}ߟK: 0nLvo錮Yȗ=a3/sO_쯃}ϼ! xruV:'0R9n_mGTm"ٚsr℘v{ !xEBŽV*n؟s 2q\b ~ތ/#{> QB}tz_~qSӦo؇lyhws]5k%4[ϛvFl`_7E^.}a x=W-a5|7?8z;QH; s/վ$ęџGYimѿ Ź&}̧ 9>##mM_Cpjw{wn]zYw3}:BI.Ǝ;'5siwF~-=gW;p6F{粚7NLPiW5<s#6A?RDc ϱh$چx(-xYz/C!o6'2g9u?2dys2>ҟijjwGc)$ǖK=:wbؗ.vyIUM@wMmcyJ.󹟒gE7f^֫ON*a2L{F'ߊAA,ve#p-J H/3_Bo:Iۨ^^ iΓTA?۬~賕>R?$h-[Ϣ`%2^M |PG?2e.SJ=i%~2|075K Ɗ[fgKT_PyMó$*% Na#VS׫j(pU@Xy{Й~w& o:;߰jtzFk:H"3OxWٝw2<IðYsԊf/8U)3v:8<\%^Y\L|HxV ~w0[2jκdw+zGÛ2TNK?}!D|NXTmd>O|[r_;Id~Q;|M^%ij<[ ^0uy1+q@J, 9u>7^'ml]޼lfQ|tMrtK*9.qް-1#* -xD+΍>I&L3OikC|!K6Qʧ|yLNMjsM݃Wﺇ{]ΝDߺsCO [M_`Bodq}3#^cgW,SUKۇJ.`$=>{d e{]hы-zFZ ةvmv}G?Um}Zke?; $?z+E4N< 1-KSqN뭙Fus;K5H5r/\KgS4!:,k  ":vs[O~9[?g# L-&N\迱o[׿aa+BžVqL7ռΉTd2waty/8 }Y=s^~TsfnbZ9('קk݄|*%望˕ܛq*8&:x2z7_/Vp.$'qxNãWÊ&T,ι̇`E#uu;c0 Ņ@t$qF7ѿ=JVAUj}bCjZsUED'y&~Ś-~O{$+q!ٜϡ6뮜g8 s0?0CjVuK~[[?C&-hG_ )>M :I&{iQ .ԛơ,iR/4S =~3|r]ۄSjtpK/Wr^je/ ~+: |TD06 z6>N GN%<_WU=6bn7r+E8fz|I?k8:҄zKXsYoRn ?xmL5J*'}0y ۫hl#7Y|j?7oیYKwo@͚I3]ᩏȳvfHE+OR{1pşcKUzta=5E#W9E>W|C\+9G\{89;`tP-aɇ ݉7P_ .b _hL{}5D72I^ 'zէ'q}lc)_b'( wc9K1`_q gb:?62GZTO4ѻ}_2ݍEUA*#rdM6A ZF4SΉ`K;nc,9ny5kd= LےլtP_>{0!z+Ccz~%Ut J2^4u!~%Lj5pol7I=]$p6{$+}1*8XU?`P\~`3hym:\sEO`6cJx%#D>}ϙ\1QSeSF~zl}F s/kR&9kX!įMg? e(mॏecsʡv8+sn8.dx]'1<[;:٪ɹ N]<Ǔu~,wܷzCw^d[O5Ӕ.͑:+ʡ҆K's+Ĕby^ ?\=8w_oqɃ71w!qxA}lo|B/u+^s-9̹tD_>. s?R.m%Aĵ'} gy?*Sow4q܊=O'{ݔ¶%qn~"CYO7oYfj)qv}×2qKtw;,,{uȥQ$&7d`_.c:Xܨ=6NsF ‘\`Nf8vbsfݼc:bZMت ^3r sCSO!~oW_?Sh|*u0}>r難wnR}v0|Ϲ|^10GS,<|3iA?Sn&ŷfD <üR_.? ҵ7uӁEdzV /oǞy>Q6]u<8o'q_etf =]tMU7y3 z7H}߸˾PɃEg^UX'x|G^`FO9Fbw}_. V}Leֽ[|(}o3'mf~nK5a!ϵ;D?XoG{WֿG3vTv"l2oسo}5EG ٞaڑ%OrpP!ԛkzC}[iCUq\;3|5/iv}xFߌ?"^ º>kɛUYs/eFo.'=-M} A|8("C\sɬ%1ZtFwLq:u#kdN5jGza帟+zu*??,\/9.'˯~/IysK[ Q([>%VwpěS.$½ xzYmB6gDO{97Y[J9nwȗ:WV*Ct2wPWt5^FUΗy P? :x`?1-5Inu'`l'PJD* y-٧BtM!|o򾢿/ݣw_SZF@Z”o$N_Wx g#~o[:Nynm!ry73ĦfM[t>kJ=crvaN/6[D'nyh%^ v {|؛>27w)yR,̧~pϋ{MO~6#ZC̛{] wx9/];F>=鹉+TqDŽ~%ٯ\ؒb'\DGAu~vuǶޚ3N8P/9N-at1UoIp$ hOpg7Y1YRN]ԍ<ݺ+ԩXWpuvu&Ӈ헬{!/c*p>'3MrW o?pN[; tw庑8ϲs+MPȫ^L ,oGU78/9rnR[N^]Sυ;3}?-k]Lgک-uOu5˧U#~![?OI,s]* nu}wܬ,Yc?s"rdkdƟc]WKmmB|ൗD+/{G^cz؍݊}ps:T sxkۂo= k>g %s&!SǙF=M(OV2*;)7< abr6P^穹=񶒿^j ~Ș[O#}bXae?d_'To3ws/vI<#]rIly"{gzo>׸w^6|'yu"_)+t4k[p>!XY|?^:WO7g?co}AjKD ~-yҧׄo˼e١꽓롇] *o[2V ľx@g,j}xq^O)s?~|^R2?r6؝a# Zù(G~&{7iBy_F'g5ޮeWʜ6W:zx`_wqM_=u\[*sZ3w*ΒE-몆?b&YQy;dY^loo^Jz-uL߁Cm xWG"ގx+ڃ|{5zI9)1*<ʢ*wv9{E*!O-#~_ly>GW&9uN%'V7=a 0-|t ?b>OyOTO_P;f:L'mOy%sMvהYrb6abзXz5>BGΫ1%fҞs/Voij/|k#I6 N:Xx/ymgwǟ|ќ:WĿO8.#OY/_G?f`q>"*z;?X|8|0%{/r.cOKwwޣNi.o_ 9**ᩦ3wOas*wp)f^?^~ ԻGŽ%ua>qaR&7]$a=zk"_: :/ };{xeqt9<2jtFxqV͒y nuVٽRF[h@mq;}|a5ey֔3+e>鯂[s-fзVWM_OP+ȓS3-4qmLwvDΜDBk'b81Urgp>Ta, YSoG̽v=@GQ>,˧E>m]j!ַxyT ʬj9czr3;u{罺*/t#φ`gV1B +Gv6zgX VUό?VM?\dl¹ouܣ:Dk'ǵyZvOtx'W'~+:>`Dػa-3.1]߄ )U uf ģ|n'v)vR!:][E<.?qJ9+g_l.:ZC1opF9nPlfA*2 cBlqpR< OfjC#|?ސ1C3x2[,\B1A, ;Cn ?ko;Bs'2g؀TH)x*{[1^06'o!s;Pno5g3tcG״ݍ? sa+ݟEԒ_D1Ow3QQvNtc.ސP7MBl2tu wCT)v<~nGN>O[#|>Σ}b['MX;I}q''ף>:.1g?\漐~Wiv؅ iosG͖yߑo/W/-egwגw| o?fWfΆ?Œ<=AM/" :GW~KO0r>[|zjYr Yە]RMѷe-쟃+uiRֵفGؓ< |*jӳ[v'o|MۨoyMاX4ZaF}U;yX/X_0./h _cѡ1~"s>Gaˑ~Z]vE9'ߨݖSm+gY{,-'bm7J&n# ~| :v(}dV.5 ?4trzT; b cns,/H݁Fw, (ȍ.] Yi!o>7xΉ/#KSgݰ29sS?Q#Z{x}c1C uQiI:eMh9rYG3: 軾,ϗ=A]ZK8=&9( -^;FGp`-y䱵K 85\ak%/p}QroO:{gJQJbG׶Zu(S vs>gS:P~,=bk{_cg`_wz`zyĮ:Gdvy]yus0l˾,.g\^}lN󉯀XW7>FY YAfywȻ 񓲛߃>ٛ2-+> kp;t0L: =3Sѳu.#6ua^c%)ڰYڎG| WxGXwH­=4u~}V+I8nO|Q?g9p A"ԬkYyGwK_quU_UKm !GIDU..:'Si-\#y2SnW߲Ʊ#?#%̧^ Og F:C<}taF?i8@=\sϣ?s>׆>_w^341ey,JO?=@2M%wa艌g7AV~'fJYKOC䔡2{?O|;ۀAԣ\Fݠ^~Yst5q )q-F -}쀎|]aJ"_Izy.sfw]45YJ:=~8ֶFeG6h?D@XuP ~} |VAIƠv:!oFiCbE̷ Px!4 $aK^`_WPӥyu"i:N|9{'z+:/yCL;A.j!J^QqL/un_++\5#O(y.Q:d.tsӭur-_`$Βnoj@+5̇*~e)nWq&7gdfň}mF 6V=!7kOs҆e.լℸD3D~:=O z?Tֵ >9/2A cΗ#E $/B>3yo%n8;ynJXٯ) OkWvFhˆ^[GQ:# kNN}|m?;}`zLs7gv J%=3z47BVg}K~۷1q쳀SߤeAswOS=sW;ViӆDGP+vٮi~>2ԏҷ%_-`}*ϗt^suscs^dCn/0{PA-æc>V;UX /ѠO$K?8혦]P x`kfB]vV xL6y;3w%1G-9?S~`>j]F=wי}y9d뚐E~[Zտ68xWN̽ ?8˘ޱb*ޙ}YIֱwefwݜBgo\+Ş߶dzAȋ7e=~3שE.I\ 9J>D{3&y98>dlK(r7?gS EG K>kߧvX;dn5LCHOf!7)H_KYxQ;-&}B쬼xw䝙-J[IwԂ%>Uº ?¼]S+o?P ? og2ϓ;k;dW2[ad.>b۠ϊSO8G|>=eCb_gډԢCY1)l}޻~DPT9," 6牍a?%\Խ>J_-H9]YUWD;ǘ. ڿzޭi&ad+U'gNH#oܣ/#.< k s:'x>=z0YV A럯nfJoͲd_i3bZ3Qģf~8>GX7gG8J%gK~<ه<[c%< h}{ݛq%_tߧ%|&&d~0$s>*Ƈ|gSk)mjk[C.?o=}=4ב۵|ἅ{ PD3H#ݤďe}oLğN}1NE?evƯ&zz[wm#!+u)d'_'l/v` ~ptx=raWd!ooGXSLUaq+")0X+ՈZ!)?W|`N y;o^$Z-ff؟N/ C#|-NSW;L4ͮ95." ewaݣd{\iz&6?LUʾxdʛ}Tȑ X9Su{je=^YS=;7o:ܓ/,ƛa{4p?d_dQb%.*x&O}~(Wbom}my/`+r4$VJ-\5ut>b:Q7Y?o(q U .FAoMD=3uI.ZR?e* LG^3pUˁFx<;Y-D.4Uڿw79#J|kP&L׮DZvu"W|pʖ_qۅ Ɵ}|;*xۆ;tLoWaija/L#)]>'㫠]w:Yn7~Po + .g yU웰to6ujn8"25}R+킝uYeO9M}?!}=yz?T/H&nԻB~"}xdM?h.j9?~/w%{t;a:UͪV㖈-H[+B"G{::=3'KgI֫fh7g/~+y,|y2^[(x|eB8Jf2 cH ={|y"\I)'x u2;(6p|f~IeƺȾ_-ҖE70c3l'vG3̲f,[u7YנOӓdь#4zfaiVGWI@b;O$i[qׄKے?\si?yר/9T.IcR gIw"b6'&[ro׌u-=PW>r!aJ=t̳IlOCp;έ̣Q{yJff\=K4t촪\YO ~Hߟ7Ƶ}D[Y }qy8D9~5we=_{:Zs3%R#WȫJ]Sj~VcǞ`U(W15,^ 쟕҉7ʸԶ4@hPӌ>&2EXqCv!^4j^oUxrh7Q {$ =m,+'T6evg{"ȻȯuPST$zG')|󜽁u *.(%џq[H0= ~൜ǩз}l.Y u733 r)C=wEٳFa/~J~ώGe\Epɳ|=~&73 "Ձ_ |M7}>#tE֭}%KdP4;; cdɾRv?ז~R.~ AIeEtk>fA>)qsdq'<"r9xY^k>Em39w#-ĺ3Π$*~;eȥ]y$n_8X+k~sd p 1y6:0K3#iN5=C'$Δ^}]%|+7s*us؜j+z; ziJ$xF/֜`cęGi胥wDWу۲~iΤn O_.Axz[1ϳa:)ށ _ٗ>M3R/qߍKo$h:q)}̸_<4w,Y32QhA&ΥPN;(e#ƪ My6'aȺ`Y7iL9}.s<{0Ă^{y5vfUBx[tE%_umy 9O?+C{F>~$yȊuNK@m֘k!I?k澗E.I,cu1,~50|9Fh% ʆ#;%ǖ-ߡOWAӝ#WA.pM&eoY W9YoR(9ڑ ?ß?}B%u+3f)}9܊ޖ8m)ySyvu s>9keUWî-"P#q̲ر%2O~Y2(c2dܠ+pAEyV-ާW+}preukF>諹q_!O3J7{"rq͜i9 d].=sW(./*eݾsQ}E1΄/Wx_e|)Y$nieo/a'NW=v5chD3z:D9cJ7[& uE<xtэ]b&O?<9t՛}mz;g'~x6ϨkMȔ^d]J6bwN.r_'U~㷞/Sd?~{~z6W'>EW3wHwx>7'"zE&~U(ySwaW%4Ӊ6nOlS,F Ó(P["ثUOA?{Bg9rHmrs)כ]nHA/xd&yb'D~y1( \#Ay%t!ﺡfj%+v zºgސ}2^_gG_=?31i(~˸{OĪEOWCCKo7 7`ަ>\j~BNY5/MG-,# ^#e]aG>y|y;DUǹv2 }{:>u=ZN\>wėGy%O\:T_'XI ҙ/j~K|S0%_w8gM.$BW||f!5:}i&}_|]7ι!!<.],Px[y6ej*GNC'bupwȨs>I`W5cwx$?ϥ/#"% FĎw }WJ΁ߴ> @C3طk> QW _b?:03X=cS jYjHȾ{97z<Ͼy~7C/xbrŸXuy{kcG\/6+!$}KGcV>C{YK{B3m˓/e&ߊ?.I+ Nʾ n]yq5)=GzCG߿_'w;z/a}"3`߄bU_b~g<?Iy_o65Civ@Ou)c//Z␝ey?}z0wMϊYAk"[]h6X\6<5q[y.7J`é/Y&P]_a7:{.WcfCՓL^Қn; [ħ+/{ 9、a5xS?^y-q(6o?7bO4|u+h\ 8WNc=s?ȗ|[чb^Ed=>X:}F]H;W8uSN1N^hzge/7w1+Xj6 _3n{Ǻ _4.eƞtE=1Ხ#f8i0wljW{m\𝯰W/2g_xy9fK9{2{Gѥz>?g$9"P 9?7`Sَ.O?iA%>>38ҞTr9P><{l্{aJ.꾑'W?c9.XYw/Գ=8fɘM]W5$~HpF-`2*|RMj@7Reg]/"ܫC/u^n̏{1y";7 $9K w5o aK{eU$ͺ|D`r}w;ڝG#}[<@%V =:}?%ZɷD W geyW5J;<ȇgFFn,EFTQO77WI/ԃO2@-_:wx#V6$~b?ق*=m)+d$bD'`_!_౗_ҧ.kycx] eo`$oeݭ2}9K#;/T.1<_e;6 {֝|¢w%m[f"8'kÏߗ ^1Ɵ> qк$r{J˴}UzOC͙:xWKJGnkBj(h)MUw ψ=G=~W%n-"DD~L_K'!z:"%5+V=zG'{ ;&R[Fvm3D-{%A$i?^u$S2\s(lY eׯ}!@[Ig]{4OGNE/s[+ެi͹ K>DG'ƻ< ѯX礿8( ߱~;:^uo9ۆ\7fq/׶>/%zv *rKNpUW~?}G?o ?>)kwZ~IYzN~KOQxMcnmpFh[ߜ9"[sx䴓~-8e4#.w 'A i?[~t^=!L` af}bχ4s[d_з>j2/w|}'/+72)T vt Bį sEC(pbhU;썂HysV/>۷\޴OĞv> ~AB pەؗ_8}@6||Cg l *D=yTge_>.98J Ԟmn#liA)~Ku;TDȓ_dܤ#Q<,A (<N O/#&^gxE>G |̅cB}4XD {%ts0zƤ) ?C-5+~FoM෸f畽|i]9r M< AXO!^ޒzo16KO}hLQST?(;)&]`^Z!;~bdm<HGǾE~{1~mCs./]#Ǽ/(z|3?){#z+-I\c[ݥ?z4<5챊9s3C}e3 ."(̿#sz=#|L\u  E8V׍hƎ2x#wE^Vf3T'VsQ/ οYOxӢ{ab{gΥ+G%3Lo897{`rwRT;O FfZzk8JvkGoC$"?F'-1 qwE>ms#:Ăf;?߇#~^?c&Ы$_RV#T|̒q=.=n{t3e$~e q2#,i5i6#'uC=g |m?BXA"xHxG(∅e2W9`O<^R6w;W1b4e޶ڏg w`gK~\ 'o!^?~ G~ҟZ ~}ȈxqVc/"R&0~z\|9Y]d:>-||?N~@s _d &ȼɫ]Kyqʫ?^Qz6W/&vxtR%z.~>Yw㗀[? ~c>Av{4Zx}+g'yFv=D'|oM>)zE3lvA7z-~PCo~3׳! 1'3'!_J\OE\Z/_S8_b ~ ܆<g!/ 쬞7$&^¶sk/L-~}dƱ{E6Eװ_3\c 4z%$5t>'fIս$xE {^Hq؏E[_oGH|_Mm{jm~7~vOɳW9jÿ= 'D_ g<&ys]GKcK]V46z-/U @OZ ?1b!ru䱫[đcϸbg `}U7)gDfk*cQߺMǟ4S:vFr_pCC)e_ ɇh}񝑏^5dS%~3Mqgƍ%lp'Eɼ>d~9W%} WgYv&g_қ"[:8ꌾWal[_L~Nݜ#io$%Z%7SoM2= {pY=XIKz63r|pgWv\]Pv‹$xCӈ؝ݯW¿_)[sHhY ..J>b/7O $k.wyaӑ8U_쇊x%:agdw~z0_0{ЮVQ_љxrL8濳^_< ɼX}H׮/#J0~?ƻHHX7ߵ 57Z>R7wqz6s [}o({B {yyi)?loO?@3X#yi)pf8m9^3~=i!!xTP$Xn?v ao8_@|/ $,}@zWmY Qx2U'#Vև6RK^ܪ;5ȟՌKtt]4_ۊ'f#}tzGDIVyy$WWO?mqݺ^bN;y/C/ ȹWPF+2^)Y-n2O? Ώ}jb>s~ |uPe[]܆߿Tc}k+/:=ysc #z&󲍎"ľ:~1{e,/qh 'U3|qqHKR_aw,@^Y9nċoASP9.( N0-ZrZ^ۑ2V$xd~ /z$Q8 ${h@Mzo~'& ˘RJS2|v(y'ْW%fG z>2]?K~+G%՚Mϲ.(!6̮.)cX~c8dWC3]hWqǕ.z9f<ob-b lR=m`ȽJYw1;ԧ? Ox^³#%ȓWCy E_'׽C#W#}wru.};2>[1-KtћǙ}6E- N%GVg-!5ZysP3t!u޿j5O߯# g^~*G|pTp߲fؿo{tY)4/n5rd]i '55Ы IɫX(PFh礛ع,LY,Ax{!2įdE=oD!.>1Ւf 8২C %[tVI=3;︌8M۔_~](x^cJÓknFJJ֧UN_ùH-SY]U.N1NC>~ mN;ysvs~fs}*J%OEΧ${ /7ު]%q?=Vs<:n>sݪY4}iO2{ܶXKmFo}L\-z }基~urj޴4qrjHiWU١F;T9f2:G+1۔emfզjpMYzݦ̪MU]kO Ӹ);^) 2RF;MUF;UCf"iWioveveF3jWiovu-{ި7);GiqUgӢh",wzA=EY]dQtEE2z]T|bkr-UZw^#)w1bTaQPzT|bm6 FWܹG-&eکP¨\Qɬ\q_aU+orSy,n(ɢ?(E,cQXǢ$EEEXmdQE},cQ|XbUgUgUƧ XǢ=EXǢ=۝ŦfYlcQ<X⦌MXcQtŭyV<X)Yq OTc++T4E8{#9iWM]6-vU[]]kXޱ*zǪXjS~M/;%h*j0+wP}IA%'dU6Yc5muwj.|-_XՑmT8VEXMƱTͪhɢc#ZsuShk*Fhy*Ǫhy*Ύ{*Ǫ{*Ǫ{*Ǫ{dժ$UIF^N/M2d՝̍>42.*Ȫ" gu3h# gu*wltmdUXmiUDRp8]~veF\ gSp8[#Φ!l)zȦ!Ǧp6)p< nS$Φl;ͨ$Φ q63cS8cS4MAlJǦxl gSp8)^MrlJig7ix¯Ë /^7ix"ExË^D6jx"ElË /^$6Hjx"n=c'WTU;95m?N_{o^~unUqEMqyL'6ee5ٷ]DEQaݢ\ޢb=nj[_Q^U_RVP~4DuEQ~YvMSf=?;A8|kϿHyMoV UX-n}K|f,߱)0Nou>Ο<Ǿtl 6ڤIcr'iDM^QSPU?)N%AU9a n.~g7x7/͟_]d\doO^uD~Mv޿嚺ل5FiЄ58_UBiobase/inst/unitTests/VersionedClass_data/devel/sample.exprSet.rda0000644000175200017520000026426014516003524026547 0ustar00biocbuildbiocbuildlXT>]؂ *) HwbaC;0Z[yk9=?s/Ùs^]zkB=FuUQQiҶ=v_۷FEWk"en~NYZY~"XM+z%&(" F%&/+\;_;^3*_?Syqבt$r- ^an]W}'XHI U~rtsj` >Τ-%z UNy9N4 )yy$ۘvY1|5-k>_[y?7B{ՏTɼù]q7ɼs>iҢg?h8#7k]iӗ{<܏v]_p^>z+hv m?4'AWq'ܿ/.J*(^{_YUt^7Kb.~G=WIo&Lv<Z]2, S?҈ QƱ).A0(K3 ҕ+.Lޛ#r>ӑkǑ>a㤔 v71/egiQjk>q3qy^ % ۨJCT.M. 징}O<"yQ ~ldzSBxK '=T~T? wB;%ƒj:Ck몟tC}ÓX: ƼM&'UyPx-Ieg%,դuaƼIȲvwInIz4 ܭ> [_E}(]got~AORy!bU;!A¶%Fj,;Xz'B8x%' (כG w-su\ݼh "81A*WLQ5 ? Iڝߠdb+khѿ4KyHwf\ v>G6G33ɸsTZRa,6u6xInfϦ[2D R"Dɖ=!{>]@I*r '\K2Z=||PSWyS>Ϯ~["?kuEY.MSi2Lo>57hS>G.@ 7+wǤp\?Nԃ?*ZCÒ֧Qm ·z| q)fWɛO _WTeF_(Hvo?аXw?k/)kC: xz$5+?(> "6%esD?Z>qݽv:@]݋QVY?M'p"_čccӎI㧉+6wߣi1rZϱܸo9@Ir ?9EMil+6OZ88ڂu6Ekb2!,K*q|̿-mGҳpD+zyO%xS?t>- ւMh Lnr'}ČO}cxK |`,pe^[}HJ%K~) A~X|AN'%-e^.| _Bi@O2(舲/s;K_n%VIH[O3> 8G?ӭƝH7Knxq !VxICu֦N ̃N=S\e9R_`?qwv&c̸D _ W:r~a{Mm ć&^} ȎLF"_[d u)x;͟jdoM/'l~5Q\(Y0ρ"_ ^]4j ^W #Ǜ, Ė BV)SGx;K4o,{Pa]3(.9@$ 8#DGS}n<n!8\zzg\?t{9̮/܅l.|Ɉ:DňTH,&| }U?6|Fg:,L  .z9_SyA2Çͥ]!5pa? =e3;N_8IjD,zEs`gKD;nЫ֟Ƽu$XqRh}/NԷ%}dSɼ=i#:h\r/wc`? K)Ddm#Y^uߛW _A;jvҶb>C6>oc OrܨYxNfA$e eS,<~&>rOtƗw⟄؉RC' ]O?nC7Dܧ_&p mfeԄD"nF{ۗd'VɁ_x_u nܰtG#+k&]]1 Zn>cf*0Cs۫l1zpFA9S-V a/Ӭ>&~ŕ5ï-j"\A"~L %{!7B?E;:oܭwJMEʔgo!/ x ~`gg%2KvaC*k5N`q'A<;ƣvYb X[&T =8QZ:uJ+n4J&慭ϗ?en, 艼.B)ou{ <.:3F   yp;r?s#/s$O?-lN#_-rq|d컴&H wYUbpѹrI5O$Β_}?Av bi?Y\ Gj_iնַ) >mxCp9RޱRLg #O]|Zrۅ4/|!|:_HmeMA;ۋ7cʡWA׷4q x!\3<@Sc ~> q5-}r;qYd!oNφ7?Uox^Gs? ޭs@k`B\O}ը+ڈC ds Ù*t@7tbw(uh؏JoӹOsၘgKiJgE~ϩnwt22ôA=^]>AchC)) ~SxE>df *8ԏv|'urcOO#+)-1b~wIeo~q=,hxl,tQm u߱~~XwR-L h0=fF<3ޡmCvȷ|Y/F}z#>AK AkgBX e|T.O&ed Ch4(o2e#?q>uM_\|"4-?^' Х_?ʡ%09nISORB99 *^ڬ9g?Tۋ:ٝ8zv=@TH/oyy{䐅E| ؆jp!'$&oy/)zݽc9Yy8 Bq[srZ{6_UKE@ܸ nT[b Lt6ܕ(z]1[jĹ̻DP%ء|0Cu:ڶ U15=wo /,B) _LG|A~I il kdRn; R}gU?`1%z{%#ׂ6xaqec!7;o ajGCFFU]{yDYp幑 HO! &EOB4yiO/\gL 8ɣ%ղ_+1c&@g(Y!/ֿxGVvrv|-e0>| y!r@p); :e<쫫+W3U8nOЏIn8 '@(PR/OҶ胈^NC\l9y}-,v}]8nˎ&a3I#u5}M";׬4Ja:QgVoVxpe>ࡊ|2tRYp>tAey}BiFn8htGDS?jm~'Cϱ;"\P'؟< XLQ=c Gػ! T(kة|?(nZb=P{bj=5}w$7?G}9d{lt?.9V쟝OɽoڞsEa9#O$i_ME~%*gjZM"=7 80vqoF)V_!؟;(_O8ǥv&ϮePutE7%_G {9x:CQӰ]ztbzZꝝHr=\wJZ| =!~sAMoH^\pUexN/M/?%%r?q abSom@^ }~f" buaވY/LhB<|=?7PߕE9,J6 pOuχ^(E@^,BUH>>!S#~ ~{Cus46zOW|FޡZ2j(crڎQۨ[A.8dtqgN&-|O1傮찠td[S~ǀgC[鑗L('b<]QL󉨟K6?U=]N2)o~-O㡛}cnTkM5ǸVx+ydș<ڈ{:>\zyva>Л xdI);"2W֑ ;LQYQ{"]XҞ?/Kۆ g8k[wuU*bVFҰ"_užyių|l<7.Qg ~zG,$WJ[ eCAT8<qy"!DBk#y@ORbBw b;dC'q8gS7.ޞLŻ1-z|/7?6l}~jΑ d.hBESD;| .9ādB.APB-{Ǻ7\CtD}O߆diMQ7p<Bv(zQ#kĽ؟utڽwN;+*1Gܕߵ:_5xL{c AaЩox99+VZM>V2/~#UX3wWu 2j_N!:-%?k3DXxi'kήy@ƫ?B.@~% ?fFtp&!څaKzn%EUav_B_{|"*GD.{e X}jˉVU.or ?ὰc/thе)ժY)e&g]xy2 <C[u9ZHL59#Gξ nZGy,wcuwnm_ O5 kW6o;n%Uͅ d:W>[H[^D_f&x q-> ރ́}e 톺WgqdPom/Q l k=Lm<Ԯ9d|?)j)I*3cAfג" d,4AHW.spJ%.x״?Tu k83E#>4F^8b2wOXoR7ꁽNRLᏀkL(ѨM_}Ϝz?> (#ji؏Ћ}\Q%8|4\ lAN_ú)PmF=@9~?`ĭ{`2{<.~n2:Psf ˓Cy  _;/< 5gsgP1p_)eFM 33W0O3FSu7?#}Df]7 /Zħb-GZW5'q3>ӽYoXw>+?~aYOy5ͫit?nNf>7^UvYU >͔!Rw~wYC AEX%x'a]FIĠ;~ݑ3r~lXtKRX6p,ć-]4iʉiǑB+zN_]PT(W෮i3?䇡El?C1gkqұXS<0Q:Lp%QqgX{ԛ7 ŔshzNk,ɌI_9G# Ӥ΅_XCϰ̬+p3l1T 1:Op%8(]0zT]}pvBF&|Cbsȝ׮º~>.ƺxk!ެhs(4SG3rm)VXSqꂎ9z~su{k^pgN)Eir: um9!Lv4RsFsA7˼ϒ=]?)1O6BiO ߍmӌXnj-3l.Pxrz<10 /NࣁQOVKmrF] . ?S~x|',O@Y8JFz1%b=duy|a }1ð%ߎ˲DC?'|0]ԙB ?5$]ru>-~6r#b9N ~4JKNp ž 0-Ag:}+/vۣE38E:A\>\sT36R0&kk54>V2x%#dk^hwY8Fv()FJoJvz.tFxUJ6[l/pE+8K/O2{OQȖ|ZsLkQ_;W cgO.x}BCQ%&_Us@\y X׈:A>d83١ owy=CgP{ϫm_.f ?#N ¤Sij6{R>i.ĩtk1|GL]k 3u@)%!ǃ-x+wXy,*y|OC]}xv-\PQu&*#.C?Gq}8Sbb#ع1+ġC_=#[n3m5Їcpp"u{sURGv?SW Uy$izsq0΂.yvx`]o}Q8/+eV~[eg|`ȩw9YhX(8 q p}A[QgMDOWmxyZ,_#8(sG_W %QD#$cg ĉg91c ^}kW׵.lxSsW\l 8>a~zA~h69+Ꟗ; G?X~XtܗZo+"FFDѣtόf??$F~Vv5/@ p> |7 ag/HjHy闔8 }EGvŰ3 +j7 U^:N/qmz59 ?aq&dvRLqQG $,6]dZzULF5C~{*e}Ys?U(i#Z58> fd2yZș,9 M㞡dgʚ]S\I {"-( c/h<yO_ÿ"9~D6.af߫nrb6M7{ E~!ysSsb^>ư3y*8`Gu_[x_ ݯmu7EQy"_x.@EG1|㄀EP*V'vBz{~6'vr#p򕤉b~"ptP{9n;<4KvxgqR+̤ؐ猜>*WMscس#?q]\]gnȧT6 rA8-f}ܻwoQ_KT4{guն`mjeD=떏zD*Aѯ8QuqУd3U 4b ~ebR~sgE>8 Ag{K,}_'ahb=? xkFgZI9'; jݍ+ˑ7G~ti ᄾS)PяQE>e/=ĕhV7 E=E&rD즿,D,B?t\EOOn b ͪ{hvMqևnY>T4r=t|$Dq=)b"y\)a{_ )2X d[]6 c)ɊURDM-:(spAhι/")CsJ`^]F7<˰ap_mCc`] `G: |)ϑS0`?_<$E{ p4i[qȿ1]hh~::N'r__~s a=15vǥ+tzϓCPh~9lROb=|٭S +oW?.p@ȸow/O[Yiw̧u{==&!n A\{:Q1z[r[3}Xx-2#G<@$\^-,Oq߉y8)]&A 19ĂXG~7oX:OR7<zbӘO:3t*I&h$_5vTyy? ֣bݐt` q {m(fEK3p!l+7<*ӈœ^G[d P?+f9s+ 2z w~'hśb<؃wtG¹ёQ?.ZƿEZeg˿îCjQ>otA/+xEgi->5_gկ2qiS[iȷp];;_T\ _gK}1UNWU*ŹQe}u u$.Ϡ#ఓᔲuV)5/ ec 5guC3b3ƘB1opsE)Y}iI:R|bt9RTpPJ2/q DY?Wumn䞯<:@} K?'>^kքZC[a@l q;OKp?`o&{zl'fs7FhwBj+{8l3ļTQ~nT~6@!1%7'-0a)пjϣNsʫn{Yf A0y*YeR[Pw$+TYy/< /"_"=!'z]ݫ$'O4xJL\d;IpGk@i_NxFG#? Fg;a΍RlWJkԠ_Fu2q[^Ѱ[l9't,t\I_}0^_?{zjцS>_RASu,ݾ9gYzLZpߤy"mxt\_ OBpݜ)X '!β sۤB 1(/wyRm-|2="L <.q; q{QesGd6Ųc&s Aug_( /µ/ħ?\sZE'1[n=&>mKGۜ|uNW986'KAnsǦ>17gPCYl-`DM+~Ӱ{\F~; ~1s@.1Q(7xwy6) wv oQ A?gR:xGp̧?NE?LE1|=j .: |[$Kj̆}F</17Qm~!-\/]p}|_6=Ezrv0 rDbs Tڊ[XPgh#vܻ;G|7G qxY]QGSpߣo&yo|r:jNCS\ϯI̪)֍`yVPε wV. ~sQs %:wjI=.s"^J2'ȵ>f/kːţ~sR#ԝF&YߢMZO}P|3[GWg#0,"ʂa'v<Л>Tf5u௱{_E:4V>뛀-5':EV1O|A*7 ?J&.zlN pE˃x&m73"o:Ou5Al ~Tvn];K^HO=;ߌ,֏R'9gs4 Vo;!cD^'s"CsfEv!`R{t69~zEl'՝BEIlkv&INXYOˈNQOb}b^rC՘{@( ?ŝa)j%6ž .0|Y"ͫ_[,şڶXs;&ڧ乍~bl pZl(N׾>ΓeO'af8E[$P !@>木P})l.H߯q&Ooȩjyk YBfa-u'Kv\Ǒ4cPǎ 4)>[(S֏{}sB$;!€6I@ߍRHa_BҪ:Ewy9[W[q~Jdu\&? Wxc8Pyi9EcY ^e#`>ېgސw'Nyo ( V{pb;}ÿgB6>D]J< :[tp8<@:QğO1tvWQ6]~eHnǰàG觰ـluBٺWcO>nxïՇ(z_'5;,+;Ve]1DV'B6$vAuZIsE֥,Iw5WZPB lx%wN6!_ M*h05;d .Eނ%9Bo&:fLL4_e<VZA>=߁ókΗ>54u36oaG^ڟDCfoV+muSU;]Ġ;O~'_OX2Nsj|>|#ͻJB`8pyU)Da8'?k߫:a@f Y|g!Zy0\EO9Ϙ_fk.r)G[s.⼔(Iƈ0<#pM I5Y֎ú֔`2xi&ےeJ :{oiRGڬ_41m?Dj.s=_ ݮym Gb?@Z {䖷E4xF7a ȫOU$)HQpyDCZL,C[O ~x=G8.ڗ"}ÿ-#qFjV2~ݤ>V٠e"LĹ![ *4%>]˧csYA$'q=v?y as1S:^Ӵ S@χ(ۛN&6զ? s?+G?OS0qurr@|p<3E}߱ΘO]4#?$6%./}~%}FmeZgxcoFZ6 WPgLxo4+]UMt?/ OP'$c9CS^}\u?Bq5Z#Ӽ^#/)yY4Iԅ1Y36oo̱Qk/Ae_W;ߏ}F +I{1y#&|'Wq;;]/`^H|ب/12gi4t9 QqTuZ%&>G~bO \youؗīl}!.~W 6a P-q\!潒n /&8: g"ۤpAEB68O=<|"oӵ ,b~GoMo61h2k~@\Ku_u$Mz.9_SKXq_Qĸ dMa/wFiBeA93"O冱i5b:c~ll08P~39wQ=s.AwƦ ]x'Dr;; lX<|"xƾ`Br('Qߘ1`1?a-ð)s|2:}@jؑ,P Cqdd 鈜om|u[;G9t8O]u\A dgBS֟ oWtYkMAhgӆΰ(#[?z52%賶~>j׌SR}q^b S4hدl3x`xo9l]Uwu|s6!|j%+3 C"WLI ]8~icOJ$G|:^X=? v2Q!;ޗqOꠛٞB^z{F?2A8N#T)'G?'*Y&qC|fmMM"<3uD WmuJ[σ5AⴇgJ΋\?[~gE679vKGh]_M}.c>i$K>S@(A1B/pi] \˓8-uGe(d5X^R:Aۣ`S'6*!9$D:WVn6 B_')yCz`~l#kfWWN>˟}2|C\v>Pr_$cY+qצFXx].|ˡOdH)ʹg@ۜK\H^+P]4%tFrpOg/Pe&pt_=lOM閳S+-7Y P\ &48~'"]Q7HfuR6ǥoxu 8ù]\ ?> 8O,WC!{eJOsn_Qh}jŅs}uo<ncTԥb[cmwȏӓg릜%q6~ 4u#vWv[6sDE;K<2wy.]^L%`SCc%3/A ldk'i_þXOGffs-}̝:stO" {s9[߬=!@ kE1/Em͡uu|ke%~+F $;[R]D~,y8}ɿ+-=mre?DF x6ԞFL #OOj_br:%w)=0ϟڔWYNڛ=RgIwblQﳷ .Σ< YF}sاEi,u8\gu I_sA?^XI-9%zJQ$#QLǜd o`2nl}J zjЊ~)8.>'':g%uc#A'Y@j[2y%E|MQ#q8?WN9k0ep8ȕvFm |gHo [|_Aw~'ĂD/1w#9$GC>:-?džPg>SE{:(_0Ez+4 g:=,C'/ fsYw?}yhAgtaqx,. b%*BaODfs&q5ev~s%_5~Y\F(.CVDWd"uzr~*Ǜoo/w#/6?2W<#4!k^*:;|=wEA^|+> | s֩ n}Jm36[ lClp'_y8gIxU9 a2h_1 "nb8a:z~Gy)T]cu SYJ&-f2C?y`Vx5;o DSe"~yB,E#5?E*i<|>JסoCLoGJ%&->C.;&?g‰id;B΅ aey̅xHn tXQl}9d|% }:t+xN.'}k _wg+0Xk}<ʭ`eQSs%b y&W9itmSEU+b#@[´索*c185%&;ab7 >H䭔sulx~-GD/|,43YgYoludGtH3Ab !|}l{vߟ8q\b4Q'Q\xOf=$r?7E)7dl6bT[)>gn(pF2xgǎ @t݋7IQ Dm}UMJOڍ]2|s>߫Aؗh{Y!;7NGg>@G"-|MqSⅸEĉ.ޜs%Ļɟ4#, ϧiךE/Py/l"LZUn<9G.ydqarc?w$=A}SʯPpzupWvIs&z}ށdѾ૱t\qaoKlQKaF~;0٨F[~5#/LE;֣`ϳE0OCװ-s? VCo-?:HMlU q:u^ޜT?WMGv⚟.Rt?$icgWpaEW J~o,:%Wk!Q.3Q_ > ?]5wJ2'ы?~A<_X ?eŏ< -ȃ})v$sRY WSTVԁcqxB#!q`!Ӱ4?~=0z#t=7q]QٍTi춥 8X.Ԥ 9߃b7Ԟo9*d$ʩF]'uR A@ݹӈ=gŘ`NJ:Y㽶:KسNCF>[V-u*{GoVqڰ~MAC_qAQb:8ن5ɷ~`ӟ'VA!݅Hwԯ^W*'K&=wzkԬFMk9 c.Ajyhٍm975X/z]jzo&oKpΔ/qvlv2$졢kSú7[ݖ}9J^}M9nud-kBa:-Tu#Up|&x + Zx\9zpݼDnT~tצvK F;:}z2"ތMV3≊ 8'I/2+6,n)~+;8GQ?~W셷3n;<ů>Р xkwR߱=u49KտcV7mL(Nj[-qcc|QWu~{gK=8_NOy^i N_ߴVK yJm.Ť/. Kۇro9#dF~1|ԕUɿ#`73&NN'\ wSSr/Sz?" z.WD38gCC r }#!>\ýF^NU Xf'-{]%$nO} {z%}P[ `l Уq%wqS}7WXxki8FsmxwrY!8My '/]3< +OD4༙6=3\a=§G{ȺI޾yΣ߾K}U;4F봷 {͏yNuOn*B ci3s9Ţ11ԍu}\]+K*_L?z0p?e~- nd;ǚzӾaE^vֽ^?MVJ>n6L9ιAc&z(vćN)>?l},oXkG~C92q>رK.ub%p wv5xyN+oc#^9n|6O=,cw 7tBgj[wQTfƩ=5(k=oiV .\ȹq8yi,|3>bG]Q9N!sI}$eu8{:XKj?A\yf^.?gCU9 ?3戾RGZÏ5Fe0g`s7\I;+kT82֓uZr<퟉ls>  6j'qpP gYRݭv7h'tXDzt= kDV3V}5Xѫ滞unԁoOXJ]HHA-OBsnWOZvؿ5ŏX>W,%OynUOPբa= M|W^43s'tfTs1D@/d]&ƌN_iý0>Kݱ3s,V[9F? _|/bB_us~5F;s@ymAؙ1=ľC>$6L].ธ>V֞Z)1G? /t.RhQSm\g6KmhSWzޠr ~PuP컽V\ػkJ~]ؘ犚>wz%=7 +>F=`̉/!'v;{qzQEM0!|u}]UTvk~_ Cde:[ jmn$oH\z0Iky'~pt2v6o<؃SfIR N6~wd,b7=o b _ ]6̇HdMGs1 >߲hZ^_{g(MlĝSp ;w=u TD6W&>B~ם|$Kpԍ|Sjo|G_ /yǙ DՃ}r8 3=բ|x>h{PRc m[;e׽uŽ_]]vs<=߻UxSA+ī80nMU~|?e,r.~4/:Oz[VPGsLCg^e*z(8%8s#u؟CRI@ݧ8đ|\6ϩ #=_>9vڔsTg.3ǿ[hnWgͺt < Cu/~:q^? J=DpդK=GI"P7ŽCWg2n@ǽ5+꺶֢KOvzp䵢;;g=K]t2yQݟսwUE,vjQtsqj>s<{b9n>`,yy ^MB1zzrzSayVu\Txo=P?Qn۫n`vзsPLU^m~m!(m;I{LR be>׿pyI_J'N˼J:gdǹm@8k8Ū5TWk'z_e:9BKe>y MT?ٻ TQᥘ\ѕ~r?NiK7ufcgϊjyGDvUʐ9d|؛oiZN 6'_8NNQa'w䞍nOj)#ߊk j246r{18[U>۝S׬GLY*08f AS69$p/br߉8j#yM6qS-}2 WUPH:cG1qsj0?7=mW6?_6s;˄5Ӌ,zeml6OƾD ߲4y {&|ɔ>e;?#5|6!4A8`%?DcpW㊮jFS=#uX7{cS 뉯KOpL:6W;[H@=^3 %|L_+*~ޒ<"4Z}`gSKhnu ʩ 󵌢;7g <_SXxt_h}x5{Z~{ \ 侬{j p='wmk_f}s /{D[՟e]ԗkbI5 /ėx(Ģϴ> eWD̛{4A<+W'x5/͐8>=U1uj@"}[i'YRGvat/HRq_Cp Lt,_=$ E\gTk}۹V_kcpM/*Kp~B#l>H,S=Fw -9zD91q."|oJ~*:e6W9G'8A~Vnyh}XHwҶ-?y+E@yJ s~rvG&| p/+n|I4ꓣh&M !})M(y  \4x'o(t-,O:U\-\HobO w%<χFW+*ɜ7`^vg-lu_[k u.3>̽EGIx>[PjkPwr4tD-u1^OM}ߟK: 0nLvo錮Yȗ=a3/sO_쯃}ϼ! xruV:'0R9n_mGTm"ٚsr℘v{ !xEBŽV*n؟s 2q\b ~ތ/#{> QB}tz_~qSӦo؇lyhws]5k%4[ϛvFl`_7E^.}a x=W-a5|7?8z;QH; s/վ$ęџGYimѿ Ź&}̧ 9>##mM_Cpjw{wn]zYw3}:BI.Ǝ;'5siwF~-=gW;p6F{粚7NLPiW5<s#6A?RDc ϱh$چx(-xYz/C!o6'2g9u?2dys2>ҟijjwGc)$ǖK=:wbؗ.vyIUM@wMmcyJ.󹟒gE7f^֫ON*a2L{F'ߊAA,ve#p-J H/3_Bo:Iۨ^^ iΓTA?۬~賕>R?$h-[Ϣ`%2^M |PG?2e.SJ=i%~2|075K Ɗ[fgKT_PyMó$*% Na#VS׫j(pU@Xy{Й~w& o:;߰jtzFk:H"3OxWٝw2<IðYsԊf/8U)3v:8<\%^Y\L|HxV ~w0[2jκdw+zGÛ2TNK?}!D|NXTmd>O|[r_;Id~Q;|M^%ij<[ ^0uy1+q@J, 9u>7^'ml]޼lfQ|tMrtK*9.qް-1#* -xD+΍>I&L3OikC|!K6Qʧ|yLNMjsM݃Wﺇ{]ΝDߺsCO [M_`Bodq}3#^cgW,SUKۇJ.`$=>{d e{]hы-zFZ ةvmv}G?Um}Zke?; $?z+E4N< 1-KSqN뭙Fus;K5H5r/\KgS4!:,k  ":vs[O~9[?g# L-&N\迱o[׿aa+BžVqL7ռΉTd2waty/8 }Y=s^~TsfnbZ9('קk݄|*%望˕ܛq*8&:x2z7_/Vp.$'qxNãWÊ&T,ι̇`E#uu;c0 Ņ@t$qF7ѿ=JVAUj}bCjZsUED'y&~Ś-~O{$+q!ٜϡ6뮜g8 s0?0CjVuK~[[?C&-hG_ )>M :I&{iQ .ԛơ,iR/4S =~3|r]ۄSjtpK/Wr^je/ ~+: |TD06 z6>N GN%<_WU=6bn7r+E8fz|I?k8:҄zKXsYoRn ?xmL5J*'}0y ۫hl#7Y|j?7oیYKwo@͚I3]ᩏȳvfHE+OR{1pşcKUzta=5E#W9E>W|C\+9G\{89;`tP-aɇ ݉7P_ .b _hL{}5D72I^ 'zէ'q}lc)_b'( wc9K1`_q gb:?62GZTO4ѻ}_2ݍEUA*#rdM6A ZF4SΉ`K;nc,9ny5kd= LےլtP_>{0!z+Ccz~%Ut J2^4u!~%Lj5pol7I=]$p6{$+}1*8XU?`P\~`3hym:\sEO`6cJx%#D>}ϙ\1QSeSF~zl}F s/kR&9kX!įMg? e(mॏecsʡv8+sn8.dx]'1<[;:٪ɹ N]<Ǔu~,wܷzCw^d[O5Ӕ.͑:+ʡ҆K's+Ĕby^ ?\=8w_oqɃ71w!qxA}lo|B/u+^s-9̹tD_>. s?R.m%Aĵ'} gy?*Sow4q܊=O'{ݔ¶%qn~"CYO7oYfj)qv}×2qKtw;,,{uȥQ$&7d`_.c:Xܨ=6NsF ‘\`Nf8vbsfݼc:bZMت ^3r sCSO!~oW_?Sh|*u0}>r難wnR}v0|Ϲ|^10GS,<|3iA?Sn&ŷfD <üR_.? ҵ7uӁEdzV /oǞy>Q6]u<8o'q_etf =]tMU7y3 z7H}߸˾PɃEg^UX'x|G^`FO9Fbw}_. V}Leֽ[|(}o3'mf~nK5a!ϵ;D?XoG{WֿG3vTv"l2oسo}5EG ٞaڑ%OrpP!ԛkzC}[iCUq\;3|5/iv}xFߌ?"^ º>kɛUYs/eFo.'=-M} A|8("C\sɬ%1ZtFwLq:u#kdN5jGza帟+zu*??,\/9.'˯~/IysK[ Q([>%VwpěS.$½ xzYmB6gDO{97Y[J9nwȗ:WV*Ct2wPWt5^FUΗy P? :x`?1-5Inu'`l'PJD* y-٧BtM!|o򾢿/ݣw_SZF@Z”o$N_Wx g#~o[:Nynm!ry73ĦfM[t>kJ=crvaN/6[D'nyh%^ v {|؛>27w)yR,̧~pϋ{MO~6#ZC̛{] wx9/];F>=鹉+TqDŽ~%ٯ\ؒb'\DGAu~vuǶޚ3N8P/9N-at1UoIp$ hOpg7Y1YRN]ԍ<ݺ+ԩXWpuvu&Ӈ헬{!/c*p>'3MrW o?pN[; tw庑8ϲs+MPȫ^L ,oGU78/9rnR[N^]Sυ;3}?-k]Lgک-uOu5˧U#~![?OI,s]* nu}wܬ,Yc?s"rdkdƟc]WKmmB|ൗD+/{G^cz؍݊}ps:T sxkۂo= k>g %s&!SǙF=M(OV2*;)7< abr6P^穹=񶒿^j ~Ș[O#}bXae?d_'To3ws/vI<#]rIly"{gzo>׸w^6|'yu"_)+t4k[p>!XY|?^:WO7g?co}AjKD ~-yҧׄo˼e١꽓롇] *o[2V ľx@g,j}xq^O)s?~|^R2?r6؝a# Zù(G~&{7iBy_F'g5ޮeWʜ6W:zx`_wqM_=u\[*sZ3w*ΒE-몆?b&YQy;dY^loo^Jz-uL߁Cm xWG"ގx+ڃ|{5zI9)1*<ʢ*wv9{E*!O-#~_ly>GW&9uN%'V7=a 0-|t ?b>OyOTO_P;f:L'mOy%sMvהYrb6abзXz5>BGΫ1%fҞs/Voij/|k#I6 N:Xx/ymgwǟ|ќ:WĿO8.#OY/_G?f`q>"*z;?X|8|0%{/r.cOKwwޣNi.o_ 9**ᩦ3wOas*wp)f^?^~ ԻGŽ%ua>qaR&7]$a=zk"_: :/ };{xeqt9<2jtFxqV͒y nuVٽRF[h@mq;}|a5ey֔3+e>鯂[s-fзVWM_OP+ȓS3-4qmLwvDΜDBk'b81Urgp>Ta, YSoG̽v=@GQ>,˧E>m]j!ַxyT ʬj9czr3;u{罺*/t#φ`gV1B +Gv6zgX VUό?VM?\dl¹ouܣ:Dk'ǵyZvOtx'W'~+:>`Dػa-3.1]߄ )U uf ģ|n'v)vR!:][E<.?qJ9+g_l.:ZC1opF9nPlfA*2 cBlqpR< OfjC#|?ސ1C3x2[,\B1A, ;Cn ?ko;Bs'2g؀TH)x*{[1^06'o!s;Pno5g3tcG״ݍ? sa+ݟEԒ_D1Ow3QQvNtc.ސP7MBl2tu wCT)v<~nGN>O[#|>Σ}b['MX;I}q''ף>:.1g?\漐~Wiv؅ iosG͖yߑo/W/-egwגw| o?fWfΆ?Œ<=AM/" :GW~KO0r>[|zjYr Yە]RMѷe-쟃+uiRֵفGؓ< |*jӳ[v'o|MۨoyMاX4ZaF}U;yX/X_0./h _cѡ1~"s>Gaˑ~Z]vE9'ߨݖSm+gY{,-'bm7J&n# ~| :v(}dV.5~;_{_7܉XQ > qjѝtyh }釼ˎ])N_{Nz<ΗRefY~btÎ8/50K~ʻ(&6C:c ͨ AF]F3 k*jP y]gR1axXv)}lKg5 `χjprWp}';vVy:(h?/7K?q&1sԏ%|z{ކg߁ #yWB@>K}]\}a_Ekoq{&c\n֬~X8$o/^Hx:mknD]8Vrs/: q7|֖&>^"8,n%6`1uQñFJo|vJ[owU ~Yd5S`ǷD<}\/HL69>MݨX>cB}˰e?r$ v+>-| O?pY ?8ɹ^;} ?Mp4}V!OC 2l2c!'߆E=ڼ8G7x;v jwzr~S{?h#ޯ˾YUb5(]nz.m7Tf }3BGw їRU\I+ѷŚbΨ!W٧W%*O`K𛊤jƈ#ǚjÕ"yv 葟G\;7_5˜kߣ߄:V=3T >; viIZ~~_OALƍW.UsQO₼=/Aߓ:qEG/$B/Do pN!$,oxiyj>NC= eWA#>vsVG7¹)o;oAle6x }mBlG;= ZOƆAʤNt7O0)[؟a}7k!N;' /@!v49xii)JH[1Μ+[Oߔ, {Z,'GY[#aIGu}Ԕ{ vzV+d v7&Ϲ y⢪=O?x waywt6 uD]P K)wق}^&,\pnkGӚa͆z _Zg;bvB^Gd~u!Nָa;١l`ΎC_s*r~*1Kv0wVp 8c$?%HRܐeԱwߡW[uK?'ƕB?;~6qWzo}_QnjzG~7T&_1N}[,1F΀]b1ztp2ep\-sz^Go34T~COF14HEiP,N?v苊u΍ >[Q"~@|.]F|QL9c /'$wm<%)pMțFMu$m葌QF"3 ⍼$%󛊼9%Q MnK~ lxR?nHۇ-*L3y;I̗6KO{gSa]7avF_gE_r>I?έgʹys/Q\%?%YYv"%죈~I!}v7;NІϻßuw` :y 9EPd.\; y.JW') ?|;{p.3R1O/*}ǘ+>Qޤ ,A34Yl~ ۷@Y_\.| LGD*Yw!>(x'{aϡ㯢t ?*yOݻc/7_fxK~@;5A+}|ggn 58~ОG ^~zsz8弎B:.\ =o5U@D8OCK Ͷ(x4b~ɹȒQӔUuYWV_?b//{;Mdž_u5gogTb"/K&a Ge_ߕ/6GjnLSϳ[^V/a:oQ'N8ƙz'`sʹ~ ϙ&Wom~mE7wf$Wt0ϟTa{8>!ï ]/ 9ˑw_ ?2 qHUS zyIxQ{RS¯K_SzR> 8iU?ej>5"z' p*楀gk'=rIZ?TI>*] ]~?#W4%`gyO {u8*>-zR&:e>B~Og9cʒ~^hDž_Fe~êcFH^O>ՀG!71}Kc7ՂΆ\{?+;;Tu>3uΩ㌼9z~8QBk>MT<O~7n8D&W`Wү6 '"rkw${t;N_U_l%^ LI?O:G!r(ة3{q\{x~]bΘ?y`K>6: $^["uHZ?G7wִ#~t.on/>f/%4& |pGoygQW_5;tfh~3p0cT4C?@H)#8VUwK_l{$9-) 7 ;{ųBM_iig9gy4)s;OezXEfX+cACk9BrzɳIk> QطGQR>#rW4ghpZe|opϻcZ>ov 1c'l *EPcMހ^<6AGnIux)ovs5-k0/Ǣ³q؏Ov=OPCR:OX~u%FOea7pH?2ߥg"|l.2Tcΐs??SZ'aooq+U>q?`=B/e˹Iw)C2G~K\U GA"`fC\y|!Ƶޞnsq`E<,n:bՠ`/>9ԧU`~zb \d 6gOjۺ5Wk]+y&ox tʹR_z^ΐ"O"#_V%@ CNGb}J\y9j SH!2U|~/~{O&hUv(gXq*xW1c!mV%r]t;g~MHq~v¯Hw:'MBQyס/K ?$pC >մ3}T~Dyn!)LG^WE9c3~zi{!Z¥9GEvS?91슸F+ҧa+Y٢\|wq"9+K7bqBSn,Jyox v;#Ҭ8{3c Wqe GuBXq'B뿀+zf<2)}# \o@ج;+ܹw37Ts4]ֵ!4_3cd9'!=Cؙ({X{n×~qнnE3q|7ϔ'0Wq7#?@?Њϡʹ1kpmR)S7 Y8vXɓm`_tPb%nP3xn F9>=&/za>4XLZ8/g6/#!/nXg _,pBYo_}7#=cD͢'N™{6Δx^~"w.; h{LUO Ȗ1 <0}Q"p¨ݨCt|};|"MVGxǑ'u`#'{z~~x $]Sje*g*üז `.#(_ԏfy7Pf!q!31tHO<829Q!+aϗ˹'[^s 8nǟxgu ua? ;b/u䍼 \9+qΪm6lBZʲ {oL-뗀g!U>vu;6.Sv?zyƼ9|Kyw<]R}bv\> ~x)?uA2ާǶ۔*\n?>^ww~ ~P9j.㷘?fy=w>w+ksԵ|UȿqzuJ^O įJoc;pUdkę@ S8) G?U4w#!ϭjcFO+ѐQ39azٵ̴A{]Uq['F~/Gf}m-9xĻqWjG] WCtBQXKr97DΙZ/AeLs;z'gCf~Cz/7+ު'艖g]Yq*s;<ܬMH~*}:}wW6vHEXX4.k}pT(WƮBB,̗JX=/;{ Ƶb+~?ޭ9@J񪏁~ ~f^uGpN@'u72gLkCsس{{IkC_!}~_WGP#e_>c_֨ӰVi+3!#w ߼**Dk GgI` ਖ਼ϟþxG0[zo!x'KlhRT:j5"a?ZΙo<7LcxI伴_>(=ſafA~.W^c'6Zy da#7d r+Qwrj Ԑ?>Aa1ryļFUɜ>H?8 ɖzвWþɻ*j۝"+& y{~79p҃㫶@:.ÂmC쉸nfeoη uQ]vJ#|njSǞٕꭶ~.D| n8 p^~+c?TS_Qiw9#ﰾkD{U؄g~(^ d}%xo#=..Z@O/ (Kyqv,VtKjԟG5v߽~kV699yAf]˦`}2vr4?pK`P_r}CCC~BQG>#Ї*6䗌1qH!xNJ&\ɓ?=\Kۜk~zꇃaw|( ~vxɧ5hu*~ %tV(ֳ{"鷕A[3w8r懺x^"C}%c{zClt{IΔIF軘e|WoTc%?% ܎zg-uC:g'%;?67SÌC?T*'ojWزa*xc9gVx4jX6 N 臌xguo"^8#1lg`'7eJ Y~z:WSoYp~8T/x . PlW0_FwgO@Ƣ@RQA~*规M+-%gK<{$v:q..*~U'f.|s"I_x9cȃ/^GkY7>D=݀ΐsϣ|{PqZ\zb:`Kz^_oqC9՚x;yG~ǾW+n~nO.y@߷uxH#_}MၳT#}z>.3"WO9he3XOc}6ݲ{JR5sA7gPg= 3iR/ 5iA| ~ ɾ#t]kT9Z56k?ĔENAGߏzƂ'zO;e_EGcA%|-cW{~ć?~GzH~g8SVV_ xu{sw,7Jx_E [qrt؍qwL @>a~w7GK5^5[%⎓D| Xp΂cC8 ^5+/s@Wԓy}hx`z[K>@/d8Ikbogȏz*k/Kѵ风\R|ˏ*k8G>wmɞ.zॽժ*:߶V%65XO#,dV6{]k C;@< #n7 tU*|ZOz xsj 쫈ȇ(h 4ԃ87ƻ"?cCe5֯[R-ѫR.oܜg^Fcx鏽.;#wZqRYzu \0?K첎F-k) #_FxhBNy!/gTޏ~;T P <8o%{9 uv<)esQ%# 29ǽw^5d8q_Q꧊?G7)ni ;^}|g|Թ_Wmt('9JQixϪ{UQ=OMۮ q; /0&>1@#2C;xN> @Fs>>X({iq|;cʬ_6}^0)BoRE1fE}4֑P{>053װo^@9eO|x 9JqTswsX \ cϿ3}Y6-9KLz}{qf<I_ հc/#ZR 60*|{d6HmO&aTO 8HEMM z䁩r"ʐIAgTȟ_~r ~l"\=g)⿹c]sI) +>UGag# r iV<3L=? f*BZx~^җ+Qrkۀ5knW'y ~غA>\8SP9j_OCgD ;s_@ṪB?=QMЇR3yg E$#?+l}0~(]P6w@G]o;Tc)gky=}~kd*lymC>\q,FD]*٢'olE'7 hzA}gSp^=qly*3xBҡw3q zL,뜰HYI#OLy+CO^z5 ZxA{7<'= 5.]\h/cS@~GǨ/nDC᜘RX?+Qꑦ@\+bSҖ'Nٍ)~H2F>%Άٹ"bߏHOpNCFM~MWs}z5mRe zIl}C+>  ^ն֝&|O̐DqcAo~-Gط8wI=1OZߡ%X]!%كu(ܵ%Bi~OtV4;@TYM+q='?M۵Xό!+S>3 zC?}529oi8z84`8G$Ÿz!KChzl_|c0~C? Fdԟ,US=SO4WYp;/rb䇥9?6m-ْǁ3BЗ0,P!eTF?{w谹-p?I8b2 kѐ׈-X'[sROy1mkx^[WT8S!ٞbg"|'o#N\U;oMG_Ew_&v!b^m<tV>2 _0@v6Z v?^?67`} B%N}z6-T`+[ +Cx=ʕGu<{}&?7A|%+UfkؗG "OU<|9vJXv8gF&;پ ^s@>_~gNkaFzCgZ/VdB-GpI{_&}ߘ\ ^,9CӅ< _sBsg'~|T,YO>[⻻jm7-ΑiF|0*V}#mHdu{|pӂ8c_T,qGsTcw/_}\r_H> ̗>}PTf߉ "J}C25,j$=ni;F},[ 9isl)p̃߾!t_3zK^{WY< [~@|e\91g977%<&`v깆@35zw5ᑏxgtWN JOK߬qPm}#vߺYc{}h:W'xfةw\ h{ :@?'A^w.Nl\9yil.gaWFE>w~b_Q![ .8Z )[ U:Au:6ygp*G( ViFq޴m@O&g:^u0zneF+fc>_A'}.N GR!rNMR9~_P}Ց_,ߌ!D-ֺ txq(U̓>Dd1aC3;C8"kqk]ĕ#XMXc<`6w˪;H $#>/E!_sCv5N_N~;P`UY`98]OTo]yN?mΠoQ_|͡BD v\;%mEF:oc?Z0s\k.fM~͈9/ z~|+'|*Z0nYk5Ƃ}ȣl}Wlȧ'?MsƿjĹ!oa!ag'>q,·qA/d? y#WՅ x^6*{>x~Ϡ)" q}o99kнxzMI~]*綖H8}i"u4*|1:KWU]6ڸ_jL5t!x'/[ <;pN%we^mROEx`8_?1#)}tI8pf[֫b!o΀g`r;G>;}6n@\2/\+ťqÚť]mM²I5?g(ߦ]ҼIEU5vu.߷ H;2zONT^7b|R69d?o}C׺۰[/zw,JgE{T{׷m!k~]m;N7qzaySc*o-m =?`|[Ʒ__a|[Ʒ\Zw0wz\9<f|orn}El$>疑tឱ^^~~-7_GLJEyzo_.?P/g?__׷ܼ X~V:rvP>v?_[[1 k[-`zlh//ϴxok77231ֿw3h'z[VF}G6BO՟࣍GM͢6Bm}js͡6>_m||jgggggggggggggVS}cܪѪѪѪѪѦѦѦ͡ͷm2oa6F6F6F6F6F6F6Fvmڵly׽>'~1icOC?m~k#ovU_{[鯍ӿ8-^^uhh>j-g٦}k5b,E,ͲX4b,[6>ﺶ>fY,eh#FSw-5vDBfY,ehŢYo]iX퉚mhrm1`˩Ҿkn/5>h6Ƣfc,Rcc+ZlkWջ¿5FB5Xjl5XƪKfm,X5٬6u5h3l棏櫿MP[= lŦiџ?E;6͡ެu nk_c}۵YkjUom4 @s5dFWORY'kݿ8q[}m8ͨ6NzﯯK}>j-纣zi,UDVzf-jȪ"6[T}cǭ޺]ukEz>X*۵+]QWFhkSvv.V_vEd\a>kAV6Y5dlUcX5Ǫ?VjUIV6>6>6>jȪY#X5Ǫ>VjզϦϦOAVj~U{j~U{j}3]ͬvmjU|c觍Q{ͱj6Wo?kU|~8%7ͱkFYfq6:ڴv]cjM;64Ǧ?6/D?ml^myՐ6z,M<6ovݗy뾤Mlf6ful>ֳ:VǸ6>V/l}T86|;h櫣7fqlV}DfuldTj[}4c,M<64c,MlV/}v4clM=64clM=64clM=64c< MGB6l6]'yA^P7ve4?f%d[}cw_mN5[dlME64?QF64gXokȦ?6Ҧ?6zIlk_okkL]ckǮ1qv-cbj'Z֡)QS܇"\7ʽK"wO~q^8.#z^yl7ܯȋȏj*z5[Z7y2ȼ]ed[8/>xzSg9tCrs86Yz!!z_'dO|]zG#O~&" e^R2>oc"G܋\)Wyn;^*?y7)"9Ίq:ujD&yRk;+|wIn"Ϣ8~ί&2.'퐼j*r\/u!G@V!v[}pzo-m{OSL%㠝0&N=VG{vZI(D5]}G}vvZ桃\V䲍>˾i,Gy.s\wUٷ/ym B皸HkJ*i.x*[云W쾉?OUjK%?{P~x܉Kd_/}Ak[׎M8:I;IDמxT[shO ^i#v/qr&xE\C;7\.b HGqY<9 yī C{}/RD.ΦN !{0>L&ϧH*&3qS>S_R<~LKm!|rѾyxIvrK;&;]\&=F9q9~}'xԗLy?8C7>'7Jw;'oć>&ާ=:ysG;_D.Y$ǏD>=SDL>}p]#YƲozP~U'qY 'Ӳn_ުVr+'uMS߫~R̈́oxMc2__e&?qhC#ܩ\w ~$W21vSx]ƴ.iGӮ~G֕vԅzQq?q|1Ⱥ3ׅv|6}*7'/K\D} z]L;Ly#Q7{g?/O5MGcy1?#9|v)vQ}O/'?ǔc[ԣ/R?JT丱{gL^MB~BZ_'hQ./9s?? >#'sY1%v|<7yZ;YkRN|^'А~'=ySWy~C<Uvuy3Lk"?bLZ9~y'Ɨ/oȏI^: DdMCق1BDyowx?u0ghKqq\?B&&]`/\75BY޴;n7W]=AwAO}nkU~Ks o~8kk9Ί;l꫆]qoy^3;$ޖ'sp5>"KMƸ;yaL\H" q2!CKMLE>Gt~d7/L;R3 3>15Pq{3k?|!#qb܈zQ<2:Vuy}i Kd3>,#c\AyDqrQu=6zQq/_Qo}2.'rg\M3>ܲ?s'P~ĞAI#8\g{Ə7^so5{)עW)Wg5]Ɖ&;gIA=ɼ0Ss31kWL?]?]]6&.F߂8Y~O|݈q]vϓiƇ¸e'#CoGδKs$D92If9n!M>p>ùߨw8wMޓEKGgʅQen5~`qshɗIܘ?s(S~ȸY/B|#N Lvq wo:1'y#IꟳӌN4#ߘ 8L8S?8~טC#vyKg3qu&_{܇q Kelݸi/_ "!-TW9+<-bɛ0qȧHgxMn#%!81-xٜgjB\-/@ɛ ofKW0Y[W$N|Hӗ3 ]g<e3?1'"Mٖn\_P_b}6ynd\3NO^w`7G9g0-&͸ ,[['.)O')2_Kof _xz|%-ߋ^?d58Y桵||o'"D^G{y K|POq"U³8O~'O?|sA$f@y%F~|=QFѻM;Cou %\'yM34Hd8/| ys|We^ s!8|vr͙Jݘ''޴sO̷f<~291Bjw:Q0Bys-?DO0fO\~| 1omw}J^qAx'ky2 ӎ?OC'|ޢ^!!zGqgi7oqlיL̸?2qU֏Mz8MiODO]?q oWGrXF9'n&|'R&~%&8ft'!#y'7)gkx# Qۗ$Ne<'5ٌ_"N"O2Hce'L8zM%_3>IL&Sޏ~-~駳^5f׉S[2K|I>y\qr^}L|x6^GN?~ 8y6ߴ%6̼ΟC.aOI¬ݐזq'u'?7 ^8ȝ&?Ju*?Ҿsij䙘M|W|N3>N>Qyz/>u\ě«|0WL~zz䁉CJ}O{Bļ_[y642P#g"I|-̺^<0Ό;>b9ɫ5$?G~t9%%2Q쐉6b=سd=D8d/-'1Zq>яd} yv^oցS2~A"2NN㙇A8(W$`Mi?M9y2uf|P9gd>i/{qDnc^q%5Ro]ɛgSYwK;@f5yo3ϚD'^P9^N^YA&|QaXWx&yFsXJB%V-;f>+rDh?%O<⿚4&^f:ԯ\O'_!w8oED=d=1zv}'q=nuҿ[1o~wȸOsd7yvLw?=\S |,O ƳYȘ.[G{/[emujɉgK{}c0 !NHN(a6ĖIn;r'3SUTuQE%s)<(CA:[!TfD~~{ZZw/ٯ}4(ﶞ0xEזy=}k/ziM #(~s߬9~rmy) o%_uCU慟"k^4q춎?O+F.1Ȼgި->>z<'(I_=<|iǷԍ?5C=xFYUZ7yW<x`S-D(.TwIߜ{߷?LB_V<<^[b //ogS&9 o|-N7j%7[77^# oq)?~fINQ;C.σ7Lx8eV|wkG\N3ۿ7z#ϡ.ɟW»gSa[>­ɕ1kIK}l;yh|Dmwkm̷zp6]QkD'cw|R.!U)G?..!_To>':q-xv]go<? Hݔ|6<|eqx.$_xPޟOC?=rzKx뒯?o8ÛVǐƯ졾2-[Q|2Y_#yp8~('g|*疈W |gI$=!kOc"&2xyz<< _8]/xo>gE`Ex>?laqe>k?]3ڟCqi7^6dN9Wszb< -O+d|=X *8^O=OIܿ72e֓οgg=͏Gk=\&܌৵6߷OoGE~1ǔ_;׍o܃n A80sX_ }s4,/&/xn|xqB=:.kͳ_%{&G\~Iퟩ~MܡS^,.w}?F| oWoкC~@@|..<.V{WF?G`gb_xPFG5 n@\wU+zy'-EȯC=`<Ѫ#o(G\]ūF~}UƝ/x으-WSֿ8~2/*jgQm\uoы7/;8 n5oC."^QG}W-mG{y ~b}z`ß2#Ŀ]l]|#?7ů'p'}8gw[ڋA/z?)>^C嵡;Q?qY_~TCk=,x|Uu"`=ďTC^s<$unOh8m| ~-as!A.~x{i*>5<]_񫣄8'}|.9|Z+֗[KRï·yyAs sg 8Rg|^ynKq}$)_ȯ򻯱y~}s 'oK9F?=H>) ooz!ԡ>g/8|<7w>s|+2 ⇹/.o_ue8Å{HQyJ~xVzuk?CQUzU~ f Wq8WG!W֏/{fg8Y_8$8 k_-$|)a7ROPf~!A ^$/:?ƹkxq8;]ڟ#Z.98"/&v 'lUz؏=qE+JKFϯ.-F\|,~8<<#XpYKϝ߷?fG~Irn'蛈'9MsJ⑇W*Γ- 髎WJ&൫g=#N-߸]CoQu gn\|5_*~ yRg%o9x >/;|Wh`Hޕ_ wκեuUw 1|Z]|U?Gf8 ?YܽN8G>&y][Y{/pfy}I <+~/~ >?wͻy5g_~<ės<{9ϖۿ:Sg\\޳Oܗ߂28%w ^->?=?e;]|sA{#~cwIoEA;/+,y|%,ޥG䛞~s'4K}-ܼsaj@wѳQ=c?Ce_WG?޺d=1x^w;pڬGȑxnӺwͫ o]3pxӱ/g3 osXWzqz;o/_;J߆P[)Ӊo}sf>2diCt^;8DaԳ3W_Ξ9<"dɓzy}tėYw{\~/Zju 'd?\=cn'g~y8d??z|~wG<8q=ʸaFy#n;}uS)2O[uar=ٿ|8 z;__B~Fܵ݉s_䛱K;\o.K9i>sW3o[>{#xx9O/(m>olȱszE9+eF"O '=\fgzо}b'.V=[|(?ƞѺ\~xr9SX>WLyQ?@ܘ7p z}>'x5iww;z.M^~?7?aM嗊g:ed۷<}͞{Td=+ɱx}̳Mٕߋ\ %NFS>߄m9-~z{?7v? !/Y}=HOM_֡Z?8k8GY<|$a|cW?C*yiq: 4~Br7?F9iߴcA=1GM.cp.v[spylXxwFُo6;߱x,IOk\O>7w}dA2z]P(p¼fKqGX o9G/\H|88:/O /]g,>!pG\ ~+;^xIޏl_{}O/~w$@} ?S< 5>oGNɿ.ߺz۾dCc׳| $>G[%E~2.8 G0d{^z@J/|k9_@] iis2w2i'v?J:gϑ gq{.Óxx8[\rcL018Qy ߋ/-J>FUwD߶~&㓿/?\o?sO}.>'핗G qAKclj]8;i~zW'cٯ3̏qJ/vƋ8?.xH'==u􉸛7}r]yT}l}xf8_I`<z>{1A<>cFۼSq;7lȫ8Y])]X)p3_ 緰'<<K8MnoŻyIW\nZ+\/rǴ *ވ\o>8{7u>\MG?:;}yԕDxOzYW>sOdQ?x/*3Io݅?=W!ɣKf+gٮ7'\{P~֥ o8}Oҷ~j |g<js]~oj3 cpy~d[Nއ$䕏}./'u|'r<=|xzK~ "j3fv_i*~xʸ3#ksVS}_Y<'QOh}ݟ.sڧR9'PWOŋ/D#k/p,]ϸ~!N/uhp}~8-uw_ߋ<{ñ??S[˛ÓW菢5߬:e6[7' |=y/O V=}k-'wo#z{%gd\_G3uAqs0ɕ>n0N{З==& _ûW{k$\Fd_.]##ȿj3pW'?P~Y|N;<+i/@/g \ <}@O~6eoЋ9:izI~:xn8gkn"x>fvH=\\k?֯~o\+ h/?|kK|}>Edz=8<|$xey.zL8-ubE.!/?<ѣ#upt7W#.ã?qCύ<",?uns6+ϣ?m~gE/ț4O?I>)Я5q7>w|%rg|(ycqKk;s5߉ۣnmqx9gG/v$'\θ]_>>\oo2e><.&NѪd_|R"?7q{HeXpլGM#񰼨q|8 >߅Wl< ϑ#x 7r~qvW}Oُ?eZKzOEO B륲nxys,W\~~7\ H9Q^~#/T ׎ޠoNY_v>#X_n3x\Oϋoyf~mLy_<|~OA#='`7_ZK?**uKg>'2p}뾛u~|߾ыYq>0ջ3C7Sׇgf^U*?R̃|5uw?_gRd}zn|;ZV!;Bےy \FߞG<$Ϧ1}8|A?[tu=#&|^"G="үJ%N(yn}l)?53sαRzr6|u^-S+_SNG:uF>>\;\3Ӭ,ǟmV.# @e=o* @=z`~sG{.w~|D'x# ѷ .^ T_O8e[c_>4ޕ|{"o]<~>x{N_W鱯>v02뮏!>8zʟ/>gizuιQq>ubQ>>'\Nᡧsazm=Mr]}|Tˣx s[cDyɞS<~[<^}~͑-ϒf~w߬?Y~_s]i<&^L"ʞ/=~:TA/{^x|b|O Wύ'y98N/p;DC=wē_BOлQ_[񭛓W=kgȏ%97O8p uR8W6M:$/3O\Lo9oÍP˹_W/,q#?Rw|g~_?K3}/S%?랧2זzWKyt9E5I_%2P^OQ'wyWC}OãGߌn%򫬫+}@īpȑ>"~hy<z}Ss}-u_N'?$_-|g/=O|}[xO:8=ދW1Y#y?rOYByeҟέÓJ>~WuzÿswA3L /GsS 8yϼIwH^Qu/c\oo_gfI+&Gp;z5S ~/zRy]qNC8| loCxm=rD.]{늇\[oŋ2pyH|:Kw:;}Ϧ}B_wO_9'qž`_2i?GqfŃmdOԩ9_Wb_ե3qry8W8c=w^].?SE>Y8L08{+.f 4qemֳo"o||;|m/j=}~ pڏO:<(zp]u{/jX٧M^(xS>zSl&-Sv,L^V_*x-C!^)Nz\e<~7_[>wvK;/ػ#+SoׅS _\iK禋s8]8s-ÿ'[gv>o؟?>/syه_ʼi ;JߊY_[fx}O s>/ʧqQ^/LcT7'm}}x'kg%~'gF)? x?ſcʺM<\ %>]PsqyEEDЫNg ]}*OK|}x<|u; tݞGya/ω>U#OE)bKy{~zvUx~[ΕkY8{r_OE1#~p;}گ]:9qWGԝ##:T? sku}%gZ}~,8v&r}\ /_=?:?<u?9'Yoϝ8MYGy|ޜA+e~ xB/3Mp,?{}>7_$/|_ϣu)W-[[~yo{$9ɺJBL'NK- U_yQ`nW4+/3syN+_vξ \9g['i8a_sk 97V}Hw%Hi8>~~ҧEL<'˸x"ޝx.O7[gZplq?> ȓz;>Q.<*_7C5  ^9m"zU cx)~GVO!;r5^ }Ly`W'*f{,n[.~_gDz(<-ϋ7\O:x w֙z"*G=1_py<:f佼qr 2?.nf]<p[z9Qg[C>6a_k|"gwF?ǘ_E b hqYNCG'3=)#[h=ȥz38}^\4)/di|Kz/ܳ>+p,<{D;}Wx\g?Εgc}*~>woG;Usu%. ѿEIZ/}7 j_P<_ nO>P$o ͂w}~>^=a'z'>znN/R|-Y~z=iso֑>q~Iz΃8bWإoG2W?St/)jȩ5oOir:Υkֱ笾p z;~:9 ؇/r|P q<<~cS\/<AOg<85D_FFr}Շuc{^V+~\_S΄9 Z;7Q>NO7oG?" X3<`_Nv:]~IxV ?{Q)Wsȥz2N| ywg-y]ݺ"F~RxO֭.E W3;ŋй?)|/??/:kpȑ>{z{.@e8ϹzA֣|x^uUG ?0N7Tr\\D\}?:/7GCaJ8y^x;./$m?| #2>13q#q.v1 3~s Mww|^}{.1|FB{zKmy_\M]/mh~ϯ''/M{;gۧ|:czNg_:ÇOu?\ [''N>|}MOpԿ㉽̏ %1~Qz皶^=e9)> ҺW'r_©\=ʻOu H<'Cۗ2z>򈏊j~K-_"_Wɯ5눏_"y}Hȳo'Q}p2><)8k'O&&VʗrG'?OS~8`zz§6Ɲqf{'W#q>9>Eiof=ϊ2>yW+x1V[^z$Ɗ;zr)|-Ǽ~.^~5ǂg3ڏc`ˉçwXяoR~!p+@7z~9zL~*/៷C s%θ}>sE9xk̳Öԑ7y"䡴C-z]9z^M.'>d{|^~@JX_,q)|XSO=}./gיgufw8^%R<ѾCy~/g<%rUsm|{I~Ϭ?Gow`I-+e3K~+&>/e'}Ѻ$v.zIQxr}oS)=<qKs}^xgڿȣ}| ݬQoxЬG;?y~[ѓ=_u~SÿT<' ?\N<)= RO/!cQ3R܀x#~7ƒR/ fyŸ_xp}A3凛8uGi>,On_>3>!?J8\fy[)N}RK$㧏I뿩ln'ϗȳMǟ'?q VSqdġl?1|>՗ZOhÕWsñٵ[Wy;k;[¾⡈o{^U'ao׋oeuշk;}%﷯NuY?|eE̎£ z}'-gqU~WMүKǨ#k\?ֶN[RD4'㗜Y慊?x |Wq/b 3=J'>h5z az=)'NgE럆Sk'**c􉺋O|3Ry.}?ZAG0q59}Axc W{2.OW!P'_D.f^ӣl۰o&~z <$닧/co\ǻy'ܕW硏^e5qEWym`q\<|6/yGa?8)<>oVAw7N/4 ϳsh\O>7]/D׺?qSƅ)l8A/;ܺ;=9 uÞ ſ9<:{qU󚹞~7~g;ߍ]_T#_o,qp)˼dZ{<ׂZj>4?;Az\Wp{z+PwQE<?7r=fT,}$xf߸GwIU( sK;=ϕ7?7&7w#5>?)r>s{qnj<}җ]_L;G7F G |I}"*^F~e~5;')ixmge3o[7_găWW>yezc~QSDZxL=D<)zˣw|ϳ{l d-+ M{]׷OE?`ꗂŏ Һ 7_~:Qϗqȟ~g)/EGy ˼C3#~/ކD\/LP3 )Λ#E6ow8|<~vr" InGFN|_)oe|ce| _x~^q8L?//xAA]ܗ/T ?S(WV߀'~pyb}67NxZwq=?h=#?չ>둃>=3{A"?Oϙ#} P$3/@uoq+q?~ɼ3#Lq<͇gx\츼iIz䐟\.cg7s>k >1|qwJ;?gO'q ޜ{z'oo̿p;_FևO{]xv쯆\p+/xY|GB| zq;r}xIOW2Aߨ! ȷd_ |Z?R^Sϟg}nY%~fw/Us#_'?%8!N/ ?%9t׺ȃ关loF_9lK=|/{[кœic깛S;W#o:G<2h|xޱ}ԾC'zF. /a'r}?zT[όc3g=?wOws}xE>ou'cpG8nǝ/#gpfy߳O{g)no\4o#|R񾯊m̃:H%-ӇQ<,}gʗe{_9LqxV[ nE=8쾁g,qf_v9ϡNQ-z,w <1lW'Gq6<n3OwǽM3ETN-lWоyy>u| OOЏ|5"ކ;gE^_W }M7EOp|޿<}_9=pťp%tu:GQy;~ >u˻&Y)ޟڿ,.m?Cw?#xPng3s˸uw].>ߏ+Nz{“)ސ xoRq^J~)n~IMFn"OKsW):.)^/1υ0LK8~n!+g>'1Q>x'߇Y7G|'i^qҏ/?>c'~iy/s3NxFI0~8dWyi?f}畯㹣㿴|!:I<}>eGN}?$>G|de%ٟ=_ҏ;}qqxd^)ss ^ԹLGagX˼˖?>s9P>zWx=oZoL?&8 oSy s4+F}7 9/wh^8 zEs"DWcg_Ez /~9~?3&7/:M<9.?k3߿Xꕥh&?a7 ]ܱK=S?gi]E/{_;Kcoo}9讛y^UũWDU<}>Go2sq>|y-+/{8./oS>+7?7bD>(GQϼSɻ+~3 fcG1k3ar##o8/=.rߕWNPޅbϦE%{8efk5ynI|sd7"׺ n=G >h_۞@+ '[܄+~/K9u|aτ7xpAu$ޤrgsÇop-yGur ~myϹ~OC39foܞ-zN$;ݑr:K=`GG>O'ϰO?8gĝf][~pG}e{^|:Zo[+ϑIs'^ṣ]>ljorw]/:_9a*n{ln{l>'\ǮpcWOZw]~n{ =&@O;o_:#y.}?37O>}|]sd$o|z҅/I_~샿̥ ? ³ϝ;ٛkc\1Wc1zq=pzSW;Oq7c1zq3Ƹc܌1n:o:on^˛11‹W31Ƌc^sxqg1}7k>118Ο_\qqŽ;x7^x/cò ˲7,ް,{ò ˲wa߅ۻ0mް,{ò,yЮ|n|cqXaYeeow){eqؖa[ږWXxg3$|о}7lް1{-ޡ11F>c_~Ҍo [7lޡ~hk>;YMfoXՐCk{fzzgc;n=$t}LB[9=9..mHΘͱYL h}7cV7cV7s{|C-иA{H/ԋcV/a~?61c?ƹ?ƹlF8\zg(Wl%Z K: sׯ-Z [h5l-xgs읋c.L-Y"]ڙjgjաe1Yf|o,et;F{h>731et7nc=^߽80jئհMaV#Yg5ՈV#Yg5ՈV&Vc|1߈}V5Zg5bՈ}V#Yg[ Zg5Ո{VFܳqj=V636[mYg5"Ո|V/1g5lj؜cyD>.-yhq>7ޙ6g?F?F9,jX1=?6WӎϟYc]vg=z?o/Zq}a!rX< { 3\_zDB끰¶Vgsa1^ZWXϑl]ctX8 wgx,&Zڜnwչ>9Y˳g=,zX<W ۳g=lz؞=a{Y۳g=lz؞=ZNZNZ(;eGLI;7{Ya-Z[(μFa[_\+Gziíg?8fpc8fءͰCa6mڌg36یgsa9 Gߌg3@6l\Xj9mHf qg6 $n3,fX@6#dz96یfD9lFg#s߳?!<Q\?>??'Ww<;|[o>/^+׮>ܝݦ߭LKg/}·~x>3{ܸ#?\7 0z>v?\K?=/_}ʍ?|׮>[X׮޼ÿgo^W|]1ox敛/! /_'W~;?G\.oէ˯tOo>}rƭ|ͧ[_8?Koܘ3U_0yO_:G>scԜvkNׯ|r杵?[^v^W?w/v%LqI?Hѭۊ×^>Ͻ; oXr=ko\^;{w'ww{|IMqOZSvk~3?;뜽3};9sÃ'\k:w|n}sLYwv|6ڧǵkmwCrc{']g~n͵ߝc|=c}u{;o#w[{v\|必?>tiN]N7sr_"._s!էoyFv37^v=KWuE)/_O&ޟ]#wv3wGo 3eY'nܼrsO] v!8O]eRtpgJԸ~Y9 Mo|S{!7Biobase/inst/unitTests/VersionedClass_data/devel/swrep.rda0000644000175200017520000027200614516003524024772 0ustar00biocbuildbiocbuilde%iz9tdʖ2 3$l[dIgF~ثzy꩚OO쓲W^yW^}Wi'Wԏg~g_y*_yc_yzCzuuuuuuu]]]]]]]]7Xxuuuuuuu`,zWWWWWWWWo _]]]]]]]7Xyuuuuuuu`7X}uuuuuuu+_ycQ h}su{ퟧh{^\\\u?\pu?\pu?\pu?\pu?\pu?\pu?\pu?\pu?\pu?\pu?\pu?\pu?\pu?\pu?\pu?3~_?מΔ^o}^O_Ի^_A߯?????ϧ///// jZ:o7o7!!!GGGG11111Ÿ' Ÿ' Ÿ' ʟ)ʟ)ʟ)ʟ)ʟgƟgƟgƟgƟgΟ9Ο9Ο9_____%_%_%_%_%_W_W_Ww;w;_5_5_5_5_ 7 7 7-----wwwww===?????#?#?#?#??O?O?O3?3?3?3?3̿/ ¿/ ¿/ ¿/ ¿/+ʿ+ʿ+ʿ??ƿoƿoƿoƿoƿ;ο;ο;οʏ+OgRz>No;N $jZzFfV7;w7o7?????C?C?C?#?#?#?#?#?c?c?c?c??O?O?OS?OS?OS?OS?OS?3?3?3?3?s?s?s? / / / / /K/K/K/K/+++w;w;wkkkkoooo[o[o[o[o[;;;;{{{GGGG'''ggggg_____W_W_W???77777www~9>6s|\c1{>}{}G}'!1 )G}~}A}a}Q}q}I 0(#3 +w______oo7o7?????C?C?C?#?#?#?#?#?c?c?c?c?O?O?O?OS?OS?OS?OS?OS?3?3?3?3?s?s?s?/ / / / / /K/K/K/K+++w;w;kkkkkoooo[o[o[o[o;;;;;{{{GGGGG'''gggg_____W_W_W??77777ww_v|\ys4g}>SE??/zN Mk[ۼo7o7?????C?C?C?#?#?#?#?c?c?c?c?c?O?O?O?OS?OS?OS?OS?O3?3?3?3?3?s?s?s/ / / / /K/K/K/K/K+++w;w;kkkkkoooo[o[o[o[;;;;;{{{GGGGG'''gggg______W_W_W??7777wwwG۪Mϫϧ/c+++3s ?+W} }+}};Soױo7o7;????|!!!GGGGt1111k$ Ÿ' Ÿ' Ÿ'ɱ)ʟ)ʟ)ʟ)ʟ{ ƟgƟgƟg2s?s?s?c/ / / / 8K/K/K/K?XW_W_W_Ww;w;ckkk^G7 7 7 { ----wwwwi۞{{{?cGGG_{|?O?O?Ot13?3?3?3?¿/ ¿/ ¿/ ¿Kʿ+ʿ+ʿ+ʿ{ ??q1oƿoƿoƿoο;ο;ο;οW}!}}1} })Y?X?T?\?R?Z?VXT\RZW7///ׯԯֱ ׫ zޯOѧG'u1o7o7ߎ=???=?C?C?C?Cc#?#?#?#?⏎=?c?c?描=?O?O?O?OcOS?OS?OS?OS?O=?3?3?ώ=?s?s?s?sc/ / / / /=/K/K/=++++cw;w;{ 5_5_5_{ 7 7 7 7ͱ----{ ww{ ====?????{ #?#?#?{ ?O?O?O?Oӱ?3?3?3?3?{ ¿/ ¿/ ¿{ +ʿ+ʿ+ʿ+ʿ??8777;wwww?x y/(^>~A[;{:>^_I_E_U?C?K?G?O@HCK=՛EoooOֻ.>{ 7o7oc????C?C?C?C?<#?#?#?#?c?c?c?c??O?O?O?9S?OS?OS?OS?Oc?3?3?3?s?s?s?s?? / / / /c/K/K/K/++++:w;w;_5_5_5_7 7 7 7 s1----www====1?????#?#?#?O?O?O?Ot13?3?3?3?¿/ ¿/ ¿/ ¿+ʿ+ʿ+ʿ+z1???=777wwww}}a}Q}q}I}iE?D?L?B?J?F?NDLBJFW7//ӯЯүѱ+URw5z>MYDLBJFo7o7c??cC?C?C?C?=?#?#?#?#cc?c?ccO?O?O?O?O=?OS?OS?OS?OSc3?3?3cs?s?s?s?Ϗ=/ / / / c/K/K/Kc++++⯎=;w;w_5_5_7 7 7 7 { ----wwwݱ===={ ????ñ?#?#??O?O?O?O?{ 3?3?3?3?/ ¿/ ¿/˱+ʿ+ʿ+ʿ+ʿ{ ??c77cwwwwsnz֗їӏOOOOԿױ$} }+zFfVv{ zjg:o7o7o!!!!x1GGGGG11Ÿ' Ÿ' Ÿ' Ÿ' r1)ʟ)ʟ)ʟ)ʟƟgƟgƟgΟ9Ο9Ο9Ο9~1_____%_%__W_W_W_Wu1w;w;ߏ=kk每=ooooco[o[o[o[o=;;={{{{c=GG=''''cgggg柏=___=_W_W_W_Wc??{ ƿoƿoƿ{ ;ο;ο;ο;οxp }5} l\|BbRw}U"%6vzޭ:>FWO_@_H_D[W_?P?X?T[W_PXo7c~!!!!x1GGG1111{ Ÿ' Ÿ' Ÿ' Ÿ'ɱ)ʟ)ʟ)ʟgƟgƟgƟgƟ{ 9Ο9Ο9Ο9Ο____\%_%_%_%y1W_W_W_W_Ww;翿{kkkk>ooooco[o[o[׿T;;;;c{{{{=^;#?#?#?#??O?O?O?Ot13?3?3?- ¿/ ¿/ ¿/ ¿{ +ʿ+ʿ+ʿ+ʿ??ƿoƿoƿoƿoο;ο;ο;ο;O?^?ުI/ I)iYO/o:~~~~~=CA|]w____бo7o7;???8C?C?C?C?c?#?#?#?#?:c?c?c?>?O?O?O?Oc?OS?OS?OS?OS?=3?3?3?;s?s?s?s?c/ / / / 8K/K/K<++++cw;w;~15_5_5}17 7 7 7 7----{1wwww1====????p1#?#?#x1O?O?O?O?O?3?3?3?3|1/ ¿/ ¿/ r1+ʿ+ʿ+ʿ+ʿ??c777cwwwwG+k{7BR}[}ޥ}=}C#:>>V__P_X_TGO?@?H?D?LGO@HDo7!!!!x1GGG1111Ÿ' Ÿ' Ÿ' Ÿ' r1)ʟ)ʟ)ʟgƟgƟgƟgƟgΟ9Ο9Ο9Ο9~1___%_%_%_%__W_W_W_Wu1w;w;_5_5_5_5}17 7 7 7 7---wwwww1====????#?#?#?#x1O?O?O?O?O?3?3?3¿/ ¿/ ¿/ ¿/ r1+ʿ+ʿ+ʿ+ʿ?oƿoƿoƿoƿoο;ο;ο;ο;>^?ܾ>QX\:2TUOѧ,qIiYy{ _L_B_Jom:o7o7۱{ !!!!GGGѱ1111{ Ÿ' Ÿ' Ÿ' Ÿ'ɱ)ʟ)ʟgƟgƟgƟgƟ{ 9Ο9Ο9Ο9Ο___ű_%_%_%_%_{ _W_W_W_Wձw;ߏ=kkkkcooooo=o[o[o=;;;;c{{{{==GGGGc''''⟎=gg柏=____c_W_W_W_W_=?q1oƿoƿoƿoƿoο;ο;ο;ο;?^?ܾ>IBJFNYeԬU>FW﫿z֗їWWOOOko}o7o!!!!GGGG11111̟' Ÿ' Ÿ' Ÿ' Ÿ𻶿)ʟ)ʟ)ʟgƟgƟgƟgƟg9Ο9Ο9Ο9Ο91J____%_%_%_%_W_W_W_W_Ww;w;kkkkkoooo~o[o[o[;;;;{{{{{GGGG'''''~Wfgg;. ¿/ ¿/ ¿/ ¿+ʿ+ʿ+ʿ+ʿ򯯽?7777wwww^_?ܾ~kt1*exQ'iL} )9{ _\_R_Zo[v(8$ +;{ 7o7c????=?C?C?C?Cc#?#?#cc?c?c?c?描=?O?O?O?OcOS?OS?OSc3?3?3?3?ώ=?s?s?s?sc/ / / c/K/K/K/K/=++++cw;_5_5_5_5}17 7 7 7 7--wwwww1====????#?#?#?#x1O?O?O?O?O?3?3?¿/ ¿/ ¿/ ¿/ r1+ʿ+ʿ+ʿ+ʿ?87777cwwwwOnL\RZVߢs.>2iߛv}}>GMCKGOEMCKGk^eJ)iY9y/o_7o7!!!!!GGG1111 Ÿ' Ÿ' Ÿ' Ÿ' ʟ)ʟ)ʟ)ʟgƟgƟgƟgƟg9Ο9Ο9Ο9Ο9____%_%_%_%__W_W_W_Ww;kkkkkooooo[o[o[o;;;;;{{{{GGGGG''''ggg_____W_W_W_W??ƿoƿoƿoƿoƿ;ο;ο;ο;ο׿x>v^>=Oqs9DxoOO>oy'-Ǐ;?Ϗ8?>Ϗ/ǷxVz7[z~|wΏǓg;w:y[Ϗo;?x2l~g!o}mǷq~|:?>Ow>}6l~ϛ?o=?;ΏO=g{}Ƿ~~||~<{6l~}oϏ8?>Ϗ';6ַv~|ǧd~'y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>?y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>y>ǽ4y˝lz%Zt3LeB;xX D7 *Јs@0 D g3Dg/1%yV{Y^\̿yu*gƙ? kz-+3873~^Z^^Wf֙uozz2/ gΙ? kz-+39w3~^Z^^Wfޙw˯zz2/Kg34鵼>^+g3|^2e>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/y|6m>oy|6m>oy|6m>oy|6m>oy|6m>oy|6m>oy|6m>oy|6m>oy|6m>oy|6m>oy|6m>oy|6m>oya>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>sa>s|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>i>si>si>si>si>si>si>si>si>si>si>si>si>si>si>si>si>si>si>si>si>si>si>si>s[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-? a#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7Fa#o7F9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?Csϡ9?CsG|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G|?G~#?x^S97?ix=^ky}x^gƙqoۯzz23̿p_|5ׇ땙̿p_8w?ix=^ky}x^;gΙszz23̿t_~5ׇ땙̿t_:W_xMze_9|.2|.2|.2|.2|.2|.2|.2|Z^^Wf6|.2|.2|.2|.2|.2|.2|.2|.2|.2|.2|.2|.2|.2|.2|.2|.a>?0|~a>?0|~a>?0|~a>?03~ׇ땙0|~a>?0|~a>?0|~a>?0|~a>?0|~a>?0|~a>?0|~a>?0|~|5|k>_|5|k>_|5|k>_|5|g௯+3|5|k>_|5|k>_|5|k>_|5|k>_|5|k>_|5|k>_|5|k>_|5|k>sm>sm>sm>sm>sm>sm>sm>s__|n6|n6|n6|n6|n6|n6|n6|n6|n6|n6|n6|n6|n6|n6|n6|n?5ׇ뵹~__g4鵼>^38?ix=^ky}x^[g֙u_8/O^̿p_8/;g4鵼>^39?ix=^ky}x^{gޙw_:/O^̿t_:/Wzz2Wl>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/误N2e>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/y|^2e>/y|^2m>oy|6m>oy|6m>oy|6m>oy|6m>o误Le>oy|6m>oy|6m>oy|6m>oy|6m>oy|6m>oy|6m>oy|6m>oy|90|90|90|90|90|90|90|90|90|90|90|90|90|90|90|90|90|90|90|90|90|90|90|90|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1|c>|>1\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?\K~p.%?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn-?[~pn[ɓO~o]_|[o_W_?O<{??aΟ8OzO3|s~4珙ٜ?nΗs~s9М?d ?9ۿocҙ{us+ks9sο3?̇t^y O9؜os9r>/Ohfџ?/3s9e?6矜=y9͜~s9}:翘owGOl^l쏞7Cs9g5os'O~cos9?ss9Ԝɓ3ۙv;og3ۙv;og3ۙn7fw3n7fw3njjjjjjjjjjjj:ߧ~}:ߧ~}:ߧ~}o{~ߛ޼7y}o{~ߛ޼g6g6g6g6g6g6g6g6g6>>>3|>?g3|1_/f3b1_/f3b1_/g3˙r9_/g3˙r9_/gffffffffffffW3j5_fW3j5_fW3ÙÙÙÙÙÙ<<<<<<<<<<<<<<<<<<<<<<<<|>oy3ϛ|f>7|>oy3ϛ|>|>|>|>|>|>|>???????????????????????????????????3?v3L?7g>is939̙f'oi~/ˇӜp~|8_>/??h~h~~f~~~~b>>>?g3|>?ggggggggggggg3b1_/f3_/f3b9_/g3˙r9_/g3˙r9????????????_fW3j5_fW3j5_fgggggg7777777|>oy3ϛ|f>7|>oh>h>h>h>h>h>xxx˶Wݪ[u+\26Ed$0YB$Aɘ " 1DL9'c2 ]eZ~3~9/K/K/K/K++++kkkoooooo[o[o[o[;;;{{{{{ _Gy%<)_MgzkʗF/¿_R?C#/</sp,/ p,/ 2˒a|Y:_ w/{w/{Svp/ïΗ|98_Η/_"E/_k '9I}NsR>g9Y}sV>g9O_%_%_%_%_W_W_W_W_W_5_5_57 7 7 7 -----www====_/ Iꋟ<҃x鋟x!㥯$ʗx~xOKe|Y8_Ηoo/ zu|Y8_Ηe|Yxp,]:_Ηe/}e|;_Η׫{w/{ս|98_Η|98_Η|9xzp\"E/_" ]'D.<ٻ;{p]w\|+텞ϊ-~BO?ka{?T({%ow?'5a_%~?/T_W+_W+_o7o7o7GGG]ߥ]ߥ]ߥ]ߥ]ߥ]f7of3f7]_UJJJJJJJZZZk5Ϳ_k5Ο9Ο9Ο9ÿo7 ÿo7 ÿo[-˿o[-˿___w;ǿw;ǿw{=Ͽ?(QG?(QG?$I'O>'9I}NsR>'9Y}sV>g9Y}sV%_%_%_%_%_W_W_W_W_5_5_5_7 7 7 7 7 ----www=====_/GZ/}/F;~~^K.PW#\x[|oNx-,K⯉y~kɥgWsג{r.~y_;ho9ro$>S| r,~=@y!E//xFwγڝy~Bջ#~{^ӫwYu1?|Ы߽ۓ"^|+z^x__ϿA[_W+_W+uo7o7#?#?#?#.r˰KK.of3f7of3f7JJJJJJJJjkkk_k5?9Ο9Ο9Ο9>?o7 ÿo7 ÿo-˿o[-˿/ -____;ǿw;ǿwϿGYG?(QG?8?$I'OsR>'9Y}sR>g9Y}sV>g9y/K/K/K/K/+++kkkkzoooooo[o[o[o;;;;n{{{{s ῼC|Sw?,~w_W+_W+:?o7oGGGGiwiwi.of3f7of3f7JJJJJJJJjkkk_k|9Ο9Ο9Ο9>?o7 ÿo7 ÿo-˿o[-;?[-____;ǿw;ǿwϿG?(QG?(QG'O?>'9I}Ns>'9Y}sV>g9Y}sV'9sV>g9Y}sV>g9Y}sK/K/K/K/+++kkkooooo[o[oo[;;;{{{{{ _>џ/~~zΗe|Y8_^./ p,/ WΗe|Y8_Η׫sΗe|Y:_^.yΗe|;_^^:_j?yz|98_Η|9xzp/rp^=8_._a"e~磻 _Y|pީWzG# =u?I5񷄞G| <ݫ=SXr?OxC={zۊ(L-?(ⷋ#|O\W+_W+_7o7?7GGGw9..^.?[2f7of3f7K++++++++{Ϳ_9m:?9Ο9Ο9ΟK ÿo7 ÿo7K-˿o[-;~* / / /;ǿw;ǿw;=Ͽa(QG?(QG^$I'OsR>sV?|;Y}sV>g9Y}sVџג Bm̿7sג r >O|BZr9K㟋߇u^K.=-t_ {j|)%>x;|W9?&>x;)_Pg_/靽wSǻ+^Ͽwęo矵Ͽ*^|w_!^57s^}Ы<+>x}NB>ՇCx}B>Շ?-W+_W+֒o7oGGGG_..rof3f7of3f7|WWWWWWWWͿ_?s?s?s?s?7 ÿo7 ˿o7[-˿o[-;?____ǿw;ǿ;Ͽ{3YG?(QGO?(I'O?R>'9sV>g9Y}sV>g9Y}sK/K/K/+/K++kkkkooo[oo[o[o;;;;{{{// K<Η_|Y8_Ηsf|Y8_Η9p,/ t,/K{־4Ͽ^o{}+ůQ|YaW{,n{ ϿI-'ğAW+_W+_p4uo7o?#?#?#?#ȿKߋaw9?@e7of3f7of3f____________5Ϳ_?s?s?s?s|o7 ÿo7-ÿo[-˿o[|_____;ǿw;ǿw;=Ͽ?(QG?(IG?$I'OsR>A}sV>g9Y}sV>g9Y}_%_%_%_%_W_W_W5?5_5_5_5_7 7 7 7 ---;?wwwww==={_/0'p,:FOp,/ b3-yΗe1?t,/Kww/Η|98_ΗΗ|98_Η_Η|98_Η}_俛k7n<ً;t~w?GNj,|[Ŀ^_^?J:~gŇ;ˉ(w]wRYa_W+_o7o7mGGGGwiwiw9?f7of3f7of3l+++++AJcyͿ_?s?s?s?s?7 ÿo7|o7׾l[-˿o[|_____;ǿw;ϿwO{=8CG?(Q| IG-'O?$I}NsR4?Y}sV>g9Y}sV>g9y/K/K/KrK؇Χ+++jkkkkoooo}+Zo[o[o;;;;n{{{{_/o /_???????????????????xS<,N~'/Խ\k7R|mao?]%~׋"|O<|%{"})Sω,|O\W+_W+_o7o7?#?#?#?#?Kiwi7of3f7of3f7]____________k5?s?s?s?s?7 ÿo7 ˿o7[-˿o[-˿/ / / / / ǿw;ǿw;Ͽ{}?(QG?(Q'O?$I>'9I}sV>g9Y}sV>g9Y}sV/K/K/K/K+++kkkkkooooo[o[o[;;;;;{{{ { _/x;x:x9<?Tx-|,wsOGx-?_(=R<2AAAAAAAAAAAAAA~_xK;{}9SBW/B^ykWIxB?,55?`탽}Ä^}Ы?JX zP̿kj_W+_55?o7o76GGG5ſ߃a]]|`3f7of3f7o6?_____|/ZZZZk5=?9Ο9Ο9Ο/ÿo7 ÿ[-v~%˿o[-˿o/ / / ߗ_1?w;ǿwS=?Ͽ{=qJ,BG?(q$IKO?$I'9I}NsR|>g9Y}sV>g9Y}sV>g9%_%_%__+++kkk߿.5_ 7 7 -o[o[o[o;;;˝Ew==9_/ ?se 9p,/ p,/ b{[:_Ι9 t,=-/Kt,/{s{9w/|98gΗ|9x;8_Ι|98_Ηs|98_Η/__P;{iw^k"įZ _{}A|g{#O=|ua#'?\h߇.{*+_W+:?o7o7GGGGG]^ f7of3f7of3f______=RZZZͿ_Ο9Ο9Ο9Ο9>?o7 ÿo7˿o[-˿o[|_____;ǿw;n{=Ͽ?(QG?8?$i~'O?$I>'9iP>g9Y}sV>g9Y}sV|_%_%_|_WK+++jkkkkoooo_---wwww7?===_/ _/#x~\|Y~ p,/ oΗe|Y8_A8_Η9t,/Kw/{~|98_Η|9|98_Η|9|98_Η|߇!EAAAAAAAAAAAAAAAAAao >C#N?}=oXr/W|[~_PQ~>~xdS?BĿ_ca_W+_o7oGGGG_ߥ]ߥ]|`3f7of3f7ofAJJJJJkͿ_?s?s?s?s?7 ÿo7|o_o[-˿o[-v/ / / / /ǿw;7{=Ͽa(QG??4R'O?$I}NsR4?Y}sV>g9Y}sV>g9y/K/K/Kr+j~%_W_W_W5?5_5_5_5_7 7 7/[o[o[o;;;;{{{_/ _/ۿ%vg =u_H1QO>ۇO?SH' _|ѯ{ ſ'W+_W+o7o7GGGbGi8.r~of3f7of3f7^_____KE^_Ͽ{ZZZZͿ_{/s?s?s?s? ÿo7 f~%˿4˿o[-˿o^____{/w;ǿw;Ͽ{=Ͽ?Ð(QG?8R'O$I'O?R>'9T>g9Y}sV>g9Y}sVK/K/K/^W5i+++j~%_5_5_5_5=ooo-ο{o[o[o[{wwww{{{_/ _>ßǞ4|fz*I"Hx$^<xɑ&2!քXO5qQ?iϢ}|9b)Hx$^<xk/\/bM\ryTr\/GW"+q^x(^<Ox,^<&2q^JH>-z%*+Gz%*+Q^J|5b)Hx$^<xk/ո\bM\WryTWrը\F"kq^x(^<Ox,^<&2q^ZH>-z-*kGz-*kQ^Z|=b)Hx$^<xk/\bM\ףryTףr\G7"qޘx(^<Ox,^<&2qވFH>-z#*Gz#*QވF|3b)Hx$^<xk/͸\obM\7ryT7rͨ\oFE\S/ŋIx/ŋ"_&.׋\/Bi&.׋\/?"*׋\/roEr5% Qx/ċYx/bMer뭐|ZVT?VTrvx;.S/ŋIx/ŋ"_&.qɧŚ\oGz;\oGz;*QގDwr3% Qx/ċYx/bMer띐|ZNTw?NTwrnx7.׻S/ŋIx/ŋ"_&.׻q ɧŚ\Fz7\Fz7*׻QލEr7% Qx/ċYx/bMer뽐|Z^T?^Tr~x?.S/ŋIx/ŋ"_&.qɧŚ\Gz?\Gz?*QޏDr}0% Qx/ċYx/bMer}냐|ZAT?ATr}O_kEOJVBz''iz'|B g&8N(^$y/Ƌgy/Ǣ2< Qz$YzX2~fKr\Ɨe|9.q_r}%)XHVd$Y=MVϒd/񕤌3XRW2|$.+q_J\WbդNBz''iz'|&e|52#q_j\W2k_E%e|mJ?գd8Y=IVOճd͸oe|3.㛱E,zŔ~,$Gqz&gyJ`ɗK")㋐~fK".#q_e|E\XVRƷc!Y=JVՓd4Y=KVϓUK\RƷ2L`IߊV򑸌oe|+.[qߊoǢ2= Qz$YzX2~fKv\Ʒe|;.qߎv}')XHVd$Y=MVϒd/񝤌3XRw2|$.;q߉N\wbݤNBz''iz'|&e|72#qߍn\w2kߋE%e|oJ?գd8Y=IVOճdٞ,O4t':͉Dgo6Кh(M4t&* DC_.ٖ,Ktv%:M΢DgO&ْ,I4t$:+ ΂Dg?Ўh(G4t# ͈bDC/ي,Etv":+BDgن,C4t!:M"DgЂh(A4t * DC~,?tv:͇Cgz,=4t:+Cgߡvh(;4t MCCϡr,9tv:+ ΂Cgn,74t: ͆bCgjh(54t* BCCf,3tv: M"Cgb,14t:+ Cg^h(/4t ͅBCoZ,-tv:+ Bg_V,+4t: M΢BgORh()4t* BC?N,'tv: ̈́bBg/J,%4t:+ BBgFh(#4t M"BCB,!tv:+ Bg~>,4t:̓Agv:h(4t* ACߠn6,tv :M΢AgϠf2,4t :+ ΂Ag^.h(4t  ͂bACV*,tv :+BAgN&,4t :M"AgF"h(4t* Ac`uy}>}^>k`w!O)OSkdw!O)OSrp9G#}}}}}}}}}}}>r>r>r>r>r>rp9G#}>r>r>r>r>r>r>r>r>r>r>rp9d9d9d9d9d9G#}>rp9d9d9d9d9d9d9d9d9d9d9G#}>rp9GGGGGG#}>rp9GGGGGGGGGGG######}>rp9G###########CCCCC}>rp9G#CCCCCCCCCC!!!!!}>rp9G#!!!!!!!!!!}}}}}}>rp9G#}}}}}}}}}}}>r>r>r>r>r>rp9G#}>r>r>r>r>r>r>r>r>r>r>rp9d9d9d9d9d9G#}>rp9d9d9d9d9d9d9d9d9d9d9G#}>rp9GGGGGG#}>rp9GGGGGGGGGGG######}>rp9G###########CCCCC}>rp9G#CCCCCCCCCC!!!!!}>rp9G#cxoSq7N)8xo)8xo⍓8鍓8鍓8鍓8Sq7N)8xoSq7NzoSq7NIoIoIoIo)8xoSq7N)8'q7N)8x7Nz7Nz7Nz7NzoSq7N)8xo⍓8xoSq'q'q'q'q7N)8xoSq7NIoSq7N)8鍓8鍓8鍓8鍓8xoSq7N)8x7N)8xoIoIoIoIoSq7N)8xoSqxoSq7Nz7Nz7Nz7Nz7N)8xoSq7N)8Sq7N)8'q'q'q'qxoSq7N)8xo)8xo⍓8鍓8鍓8鍓8Sq7N)8xoSq7NzoSq7NIoIoIoIo)8xoSq7N)8'q7N)8x7Nz7Nz7Nz7NzoSq7N)8xo⍓8xoSq'q'q'q'q7N)8xoSq7NIoSq7N)8鍓8鍓8鍓8鍓8xoSq7N)8x7N)8xoIoIoIoIoSq7N)8xoSqxoSq7Nz7Nz7Nz7Nz7N)8xoSq7N)8Sq7N)8'q'q'q'qxo\Kq7.%޸xo\%޸xo\⍋޸荋޸荋޸荋޸Kq7.%޸xo\Kq7.zo\Kq7.Eo\Eo\Eo\Eo\%޸xo\Kq7.%޸q7.%޸x7.z7.z7.z7.zo\Kq7.%޸xo\⍋޸xo\Kqqqqq7.%޸xo\Kq7.Eo\Kq7.%޸荋޸荋޸荋޸荋޸xo\Kq7.%޸x7.%޸xo\Eo\Eo\Eo\Eo\Kq7.%޸xo\Kqxo\Kq7.z7.z7.z7.z7.%޸xo\Kq7.%޸Kq7.%޸qqqqxo\Kq7.%޸xo\%޸xo\⍋޸荋޸荋޸荋޸Kq7.%޸xo\Kq7.zo\Kq7.Eo\Eo\Eo\Eo\%޸xo\Kq7.%޸q7.%޸x7.z7.z7.z7.zo\Kq7.%޸xo\⍋޸xo\Kqqqqq7.%޸xo\Kq7.Eo\Kq7.%޸荋޸荋޸荋޸荋޸xo\Kq7.%޸x7.%޸xo\Eo\Eo\Eo\Eo\Kq7.%޸xo\Kqxo\Kq7.z7.z7.z7.z7.%޸xo\Kq7.%޸Kq7.%޸qqqqxo[q7n-޸xo-޸xo⍛޸鍛޸鍛޸鍛޸[q7n-޸xo[q7nzo[q7nMoMoMoMo-޸xo[q7n-޸7q7n-޸x7nz7nz7nz7nzo[q7n-޸xo⍛޸xo[q7q7q7q7q7n-޸xo[q7nMo[q7n-޸鍛޸鍛޸鍛޸鍛޸xo[q7n-޸x7n-޸xoMoMoMoMo[q7n-޸xo[qxo[q7nz7nz7nz7nz7n-޸xo[q7n-޸[q7n-޸7q7q7q7qxo[q7n-޸xo-޸xo⍛޸鍛޸鍛޸鍛޸[q7n-޸xo[q7nzo[q7nMoMoMoMo-޸xo[q7n-޸7q7n-޸x7nz7nz7nz7nzo[q7n-޸xo⍛޸xo[q7q7q7q7q7n-޸xo[q7nMo[q7n-޸鍛޸鍛޸鍛޸鍛޸xo[q7n-޸x7n-޸xoMoMoMoMo[q7n-޸xo[qxo[q7nz7nz7nz7nz7n-޸xo[q7n-޸[q7n-޸7q7q7q7xosưc1la 0a.aƹ qn8'a0Asƹ1l8`K0!sưc1l&` 0aŹqn8_/sŹ}1l8'_/ދsŰb{1l^ K/΋aŹyqn8'^ /΁羋sŹw1l8].a箋sŰbu1l&] .AÞaŹsqn8\K.!王sŹq1l8'\ .~sŰbo1l[ -naŹmqn8'[-^sŹk1l8ZK-ΡNsŰbi1l&Z ->aŹgqn8Y,a.sŹe1l8'Y,AsŰbc1lX K,!aŹaqn8'X ,s~Ź_1l8W+svŰb]1l&W +ފanŹ[qn8VK+ΡΊsfŹY1l8'V +΁羊s^ŰbW1lU *aîaVŹUqn8'U*A瞊sNŹS1l8TK*!玊sFŰbQ1l&T *~a>ŹOqn8S)ns6ŹM1l8'S)^s.ŰbK1lR K)Na&ŹIqn8'R )΁>sŹG1l8Q(a.sŰbE1l&Q (AaŹCqn8PK(!sŹA1l8'P (sİ~b?1lO 'aĹz=qn8'O'މsĹv;1l8NK'ΡΉsİrb91l&N 'þaĹn7qn8M&a箉sĹj51l8'M&A瞉sİfb31lL K&!ÎaĹb1qn8'L &~sĹ^/1l8K%nsİZb-1l&K %^ItV :EAgEY"tV: @g}=Y4T Ł@Cm5Ph tV:ξ@g]-Y tV: EΞ@gM%Y4T ~@C=PhtV:ŀ^@g-Y tV: >@g Y4T E@C PhtV:?gYsV9 ?gퟳY3T ?CݟPgsV9EΞ?g͟YsV9 ~?gY3T ~^?CPgsV9~>?gYsV9 E~?gY3T ~>C}PgsV9}>gmYsV9 }ξ>g]Y3T E}>CMPgsV9}~>g=YsV9 |^>g-Y3T |>>CPgsV9E|>g YsV9 |=g}Y3T {=C힡uPgsV9{ξ=gݞmYsV9 E{Ξ=g͞eY3T {~=C]PgsV9z^=gUYsV9 z>=gMY3T Ez=CEPgsV9z;CPfgsV9Ev;gYbsV9 v:g}Y^3T u:CmPZgsV9뜅uξ:g]YVsV9 EuΞ:gMYR3T u~:C=PNgsV9t^:g-YJsV9 t>:gYF3T Et:C PBgsV9t9g}Y>sV9 s9g휳uY:3T s9CݜmP6gsV9EsΞ9g͜eY2sV9 s~9g]Y.3T r^9CUP*gsV9圅r>9gMY&sV9 Er9gEY"3T r8C}=PgsV9q8gm5YsV9 qξ8g]-Y3T Eq8CM%PgsV9q~8g=YsV9 p^8g-Y 3T p>8C PgsV9Ep8g YsV9 p7gY~3T o7C훡Pf|sV9ߜoξ7gݛYzsV9 EoΞ7g͛Yx3T o~7CPfvsV9ݜn^7gYtsV9 n>7gYr3T En7CPfpsV9ܜn6g}YnsV9 m6gmYl3T m6C]PfjsV9ڜEmΞ6gMYhsV9 m~6g=Yf3T l^6C-PfdsV9ٜl>6gYbsV9 El6g Y`3T l5C}Pf^sV9לk5g횳uY\sV9 kξ5gݚmYZ3T Ek5C͚ePfXsV9֜k~5g]YVsV9 j^5gUYT3T j>5CMPfRsV9ԜEj5gEYPsV9 j4g}=YN3T i4Cm5PfLsV9Ӝiξ4g]-YJsV9 EiΞ4gM%YH3T i~4C=PfFsV9ќh^4g-YDsV9 h>4g YB3T Eh4C Pf@sV9Мh3gY~>sV9 g3g홳Yz<3T g3CݙPvf:sV9ΜEgΞ3g͙Yr8sV9 g~3gYn63T f^3CPjf4sV9͜f>3gYf2sV9 Ef3gYb03T f2C}P^f.sV9˜e2gmYZ,sV9 eξ2g]YV*3T Ee2CMPRf(sV9ʜe~2g=YN&sV9 d^2g-YJ$3T d>2CPFf"sV9ȜEd2g YB sV9 d1g}Y>3T c1C혡uP:fsV9ǜcξ1gݘmY6sV9 EcΞ1g͘eY23T c~1C]P.fsV9Ŝb^1gUY*sV9 b>1gMY&3T Eb1CEP"fsV9Ĝb0g}=YsV9 a0gm5Y 3T a0C]-Pf sV9œEaΞ0gM%YsV9 a~0g=Y3T `^0C-P fsV9`>0g YsV9 E`0g Y3T `/CPerV9_/g헳YrV~9 _ξ/gݗY2T} E_/C͗PerV|9_~/gYrV{9 ^^/gY2Tz ^>/CXUw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW Uw]E*zWѻUw]E*zWѻUw]*xW e^~oׯ~ś/ӻ˯o/{/}껷ڿ~OO۟P?mǯo}7|x/x_>_o^~>~WWɇǯ}_>?~|//śow۟y7o|Jyx>~ͷ}?~÷?~Oow>C?}ӿ}?O>=?OO7m|߯~ooo|w飽O?_蟞׏_?}|W{wO7a?ƯZ~~%_?o?77՟zӫ8#g|3q|1gq|1gq|1gqzgqzgq~gq~gq~gqyqgqyqgq}qgq}qgq}qgzQ3qF=Ψ8gz:_?fqOO}F6ѧ>miO}ӢO>-ӢO>-ӢO>-ӲO>-ӲO>-f6٧>miO}f6է>miO[}Vէ>miO}vݧ>miO;}Nvӧ>iO;}nvۧ>iO}nvӪO>ӪO>:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$:K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;K$;Kfg,%dvΒY2;Kfg,%dvΒY2;Kfg,%dvΒY2;Kfg,%dvΒY2;Kfg,%dvΒY2;Kfg,%dvΒY2;Kfg,%dvΒY2;Kfg,%dvΒY2;Kfg,%dvΒY2;Kfg,%dvΒY2;Kfg,%dvΒY2;Kfg,%dvΒY2;Kfg,%duΒY:KVg,Y%duΒY:KVg,Y%duΒY:KVg,Y%duΒY:KVg,Y%duΒY:KVg,Y%duΒY:KVg,Y%duΒY:KVg,Y%duΒY:KVg,Y%duΒY:KVg,Y%duΒY:KVg,Y%duΒY:KVg,Y%duΒY:KVg,Y%duΒY:Kvg,ٝ%dwΒY;Kvg,ٝ%dwΒY;Kvg,ٝ%dwΒY;Kvg,ٝ%dwΒY;Kvg,ٝ%dwΒY;Kvg,ٝ%dwΒY;Kvg,ٝ%dwΒY;Kvg,ٝ%dwΒY;Kvg,ٝ%dwΒY;Kvg,ٝ%dwΒY;Kvg,ٝ%dwΒY;Kvg,ٝ%dwΒY;Kvg,ٝ%tΒYr:KNg,9%tΒYr:KNg,9%tΒYr:KNg,9%tΒYr:KNg,9%tΒYr:KNg,9%tΒYr:KNg,9%tΒYr:KNg,9%tΒYr:KNg,9%tΒYr:KNg,9%tΒYr:KNg,9%tΒYr:KNg,9%tΒYr:KNg,9%tΒYr:Kng,%vΒYr;Kng,%vΒYr;Kng,%vΒYr;Kng,%vΒYr;Kng,%vΒYr;Kng,%vΒYr;Kng,%vΒYr;Kng,%vΒYr;Kng,%vΒYr;Kng,%vΒYr;Kng,%vΒYr;Kng,%vΒYr;Kng,%:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K:K%6~_>||N|y8w܁s8w܁s8w܁s 87pnsM87qnĹs&M8w܉s'Ν8w܉s'Ν8w܉s]8w܅s]8w܅s]8w܍s78w܍s78w܍s=8܃s=8܃s=8܋s/ν8܋s/ν8܋s -[8pn¹s "j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j yȫ@^*W U yȫ@^*W U yȫ@^*W U yȫ@^*W U yȫ@^*W U yȫ@^*W U yȫ@^*W U yȫ@^*W U yȫ@^*W U yȫ@^*W U yȫ@^*W U yȫ@^*W U yȫ@^*WJU"yȫD^%*WJU"yȫD^%*WJU"yȫD^%*WJU"yȫD^%*WJU"yȫD^%*WJU"yȫD^%*WJU"yȫD^%*WJU"yȫD^%*WJU"yȫD^%*WJU"yȫD^%*WJU"yȫD^%*WJU"yȫD^%*WJU"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"&j"j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!j!6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#6j#                                                  .".".".".".".".".".".".".".".".".".".".".".".".".&6(`OeY _=~W_=~W_=~W_=~W_=~W_=~W_=~W_=~W_=~W_=~W_=~W_=~W_=~ǯ>~_}Wǯ>~_}Wǯ>~_}Wǯ>~_}Wǯ>~_}Wǯ>~_}Wǯ>~_}Wǯ>~_}Wǯ>~_}Wǯ>~_}Wǯ>~_}Wǯ>~_}Wǯ>~+|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{ ^·o/|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|{Ʒ7oo|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|>}o|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|߾ŷ/}o_|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|~÷o?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|÷?|?;orBiobase/inst/unitTests/VersionedClass_data/raw/0000755000175200017520000000000014516003524022625 5ustar00biocbuildbiocbuildBiobase/inst/unitTests/VersionedClass_data/raw/exprs.tab0000644000175200017520000001406214516003524024461 0ustar00biocbuildbiocbuild"39" "40" "42" "47" "48" "49" "41" "43" "44" "45" "AFFX-BioB-5_at" -342 -87 22 -243 -130 -256 -62 86 -146 -187 "AFFX-BioB-M_at" -200 -248 -153 -218 -177 -249 -23 -36 -74 -187 "AFFX-BioB-3_at" 41 262 17 -163 -28 -410 -7 -141 170 312 "AFFX-BioC-5_at" 328 295 276 182 266 24 142 252 174 142 "AFFX-BioC-3_at" -224 -226 -211 -289 -170 -535 -233 -201 -32 114 "AFFX-BioDn-5_at" -427 -493 -250 -268 -326 -810 -284 -384 -318 -148 "AFFX-BioDn-3_at" -656 367 55 -285 -222 709 -167 -420 8 -184 "AFFX-CreX-5_at" -292 -452 -141 -172 -93 -316 -97 -197 -152 -133 "AFFX-CreX-3_at" 137 194 0 52 10 27 -12 -60 -148 12 "AFFX-BioB-5_st" -144 162 500 -134 159 14 -70 -468 17 97 "AFFX-BioB-M_st" 48 207 58 -140 -3 -69 -89 182 -100 -83 "AFFX-BioB-3_st" -591 -960 -517 -321 -643 -1014 -355 -322 -373 -375 "AFFX-BioC-5_st" -622 -622 -24 -439 -502 -906 -173 -319 -139 -426 "AFFX-BioC-3_st" -342 175 -99 -149 -129 -193 -165 -137 -234 -187 "AFFX-BioDn-5_st" 294 171 13 -56 -31 331 -139 144 -103 23 "AFFX-BioDn-3_st" 241 -71 -77 117 247 303 144 -100 65 -34 "AFFX-CreX-5_st" -7 -163 -182 -31 -100 -273 -111 -201 117 25 "AFFX-CreX-3_st" -108 -445 -150 -243 -498 -566 -161 -408 -94 -171 "hum_alu_at" 45815 20958 25880 41275 11195 21777 28991 42401 27924 21229 "AFFX-DapX-5_at" 57 21 41 84 -20 182 67 9 -807 -774 "AFFX-DapX-M_at" 422 137 70 178 188 272 32 274 -355 -286 "AFFX-DapX-3_at" -185 -83 -12 -172 -75 -135 21 -26 -41 -54 "AFFX-LysX-5_at" -48 30 37 -14 -29 -12 -43 31 7 112 "AFFX-LysX-M_at" -181 81 -15 -271 -19 -270 -103 -93 -1700 -664 "AFFX-LysX-3_at" -4 300 49 73 150 -44 26 115 -2658 -1383 "AFFX-PheX-5_at" -132 -76 -52 18 -119 -183 -86 -84 -207 -208 "AFFX-PheX-M_at" -2 -234 -120 -2 -82 -206 -137 -228 -256 -178 "AFFX-PheX-3_at" 115 -49 -23 16 -63 109 -68 -12 103 431 "AFFX-ThrX-5_at" 41 24 -37 -23 -44 -88 -10 38 -59 -44 "AFFX-ThrX-M_at" -50 -52 -70 102 -24 -94 -29 -74 -90 -78 "AFFX-ThrX-3_at" -202 -370 -254 18 -232 -510 -167 -377 -249 -262 "AFFX-TrpnX-5_at" 113 -35 51 8 31 -39 -62 21 -51 -53 "AFFX-TrpnX-M_at" -557 -616 -340 -462 -701 -3766 -262 -673 -3006 -2939 "AFFX-TrpnX-3_at" -687 -409 -149 -212 -366 -403 -189 -353 -1899 -1534 "AFFX-HUMISGF3A/M97935_5_at" -289 -417 -153 -191 -413 -358 -158 -372 -1725 -1573 "AFFX-HUMISGF3A/M97935_MA_at" -195 -589 -124 52 -437 -257 -56 -312 -1694 -1365 "AFFX-HUMISGF3A/M97935_MB_at" 135 96 194 203 54 85 14 -31 126 77 "AFFX-HUMISGF3A/M97935_3_at" 267 373 532 1466 650 652 165 331 321 341 "AFFX-HUMRGE/M10098_5_at" 57 -175 -55 -18 1453 10309 104 307 223 -115 "AFFX-HUMRGE/M10098_M_at" -238 -304 -341 -189 632 6028 53 -62 53 -238 "AFFX-HUMRGE/M10098_3_at" -337 -371 -313 -233 362 3806 -109 -182 254 12 "AFFX-HUMGAPDH/M33197_5_at" 6339 10756 15439 7760 14640 10093 10171 12489 20411 16760 "AFFX-HUMGAPDH/M33197_M_at" 5199 10207 14345 9582 10675 10127 17294 16066 21334 14799 "AFFX-HUMGAPDH/M33197_3_at" 9045 21238 17735 16248 17262 19092 21971 19426 21580 17467 "AFFX-HSAC07/X00351_5_at" 19541 9857 15363 6858 11636 17374 9902 13309 20371 10761 "AFFX-HSAC07/X00351_M_at" 27768 13271 20794 12511 14738 23936 17778 16775 25052 15420 "AFFX-HSAC07/X00351_3_at" 24477 17671 20166 18311 15303 21605 20434 14547 22296 17384 "AFFX-HUMTFRR/M11507_5_at" 149 218 497 254 217 366 159 677 118 140 "AFFX-HUMTFRR/M11507_M_at" 19 -8 399 100 -6 -236 -90 473 -68 -109 "AFFX-HUMTFRR/M11507_3_at" 229 -61 859 216 222 138 81 795 72 89 "AFFX-M27830_5_at" 6418 92 207 170 1491 12616 281 584 30139 15215 "AFFX-M27830_M_at" 27707 2029 2582 851 2967 13679 765 1365 9827 12263 "AFFX-M27830_3_at" 456 344 822 323 963 816 -6 685 211 190 "AFFX-HSAC07/X00351_3_st" 622 601 1041 968 1218 4062 1668 1122 1562 546 "AFFX-HUMGAPDH/M33197_5_st" 72 -68 129 -56 35 -252 133 252 -16 53 "AFFX-HUMGAPDH/M33197_M_st" 267 257 8 268 95 0 220 124 308 131 "AFFX-HUMGAPDH/M33197_3_st" -70 440 158 84 262 294 183 223 180 66 "AFFX-HSAC07/X00351_5_st" -299 -155 -232 -132 -105 -105 -90 -245 -211 -399 "AFFX-HSAC07/X00351_M_st" 193 660 435 -4 133 1062 216 516 166 -52 "A28102_at" 241 430 96 65 260 91 261 555 308 472 "AB000114_at" -38 4 31 -212 28 68 45 168 34 249 "AB000115_at" 251 131 138 1147 128 327 123 149 219 585 "AB000220_at" 98 68 40 35 46 96 51 31 167 202 "AB000409_at" -260 181 -120 -77 0 -354 125 134 121 161 "AB000449_at" 149 70 283 285 833 190 353 372 249 275 "AB000450_at" 275 406 113 172 390 199 259 122 209 360 "AB000460_at" 2573 1963 1082 1548 2222 2867 2548 884 1128 1604 "AB000462_at" 168 81 111 239 246 102 566 175 142 197 "AB000464_at" 1151 1021 530 582 592 750 181 454 336 383 "AB000466_at" -885 -1036 -1281 -451 -1046 -1940 -322 -990 -394 -355 "AB000467_at" -883 -800 -703 -369 -1123 -1394 -781 -1115 -538 -872 "AB000468_at" -106 16 272 769 1766 -170 767 247 515 258 "AB000584_at" -685 -260 -315 -277 -420 -331 62 105 102 -297 "AB000895_at" 147 -891 -124 -365 -637 -331 -518 -490 -10 -444 "AB000896_at" -328 114 -63 -39 -59 -633 7 -165 123 148 "AB000897_at" -77 -23 -114 -56 -57 -247 -112 -43 111 54 "AB000905_at" 301 79 163 -27 138 185 89 182 228 139 "AB001106_at" 111 228 261 180 863 266 258 182 305 191 "AB001325_at" 1016 521 695 853 872 1839 475 898 719 781 "AB002314_at" -60 -202 -6 8 -139 -2 145 74 103 86 "AB002315_at" 190 -8 311 195 285 44 50 185 246 210 "AB002318_at" 1233 510 1111 802 1652 2356 410 591 584 359 "AB002365_at" 207 551 13 -67 -8 141 3 64 -28 40 "AB002366_at" 0 -266 33 39 38 -58 18 -26 -163 -216 "AB002380_at" 43 -16 149 136 35 112 46 221 164 30 "AB002382_at" 767 604 176 346 583 705 403 141 60 185 "AB002409_at" 195 105 -171 102 -103 -236 82 -64 -143 -20 "AB002559_at" 1214 1080 1053 674 708 1260 1051 1747 1320 730 "AB003102_at" 461 537 868 432 1263 750 615 545 252 439 "AB003103_at" 48 187 41 92 445 91 150 93 80 63 "AB003177_at" 311 1037 887 342 1019 750 749 761 472 849 "AB003698_at" 115 175 189 159 705 279 298 199 231 148 "AB004884_at" 494 585 864 754 1655 1028 629 569 355 930 "AB006190_at" 473 859 525 542 852 948 422 771 348 489 "AC000061_cds2_at" 82 860 217 235 149 823 194 247 226 216 "AC000061_cds3_at" -70 -77 -105 -142 -149 -138 -54 -60 -38 -93 "AC000062_at" -14 30 -27 -27 -16 -49 14 19 -66 -81 "AC000064_cds1_at" 226 632 253 250 402 527 137 286 145 127 "AC000064_cds2_at" 111 286 84 86 218 205 167 245 40 161 "AC000066_at" -74 -86 -19 -54 -39 -79 -73 28 34 -57 Biobase/inst/unitTests/VersionedClass_data/raw/pData.tab0000644000175200017520000000130114516003524024341 0ustar00biocbuildbiocbuild"Samples" "ALL.AML" "BM.PB" "T.B.cell" "FAB" "Date" "Gender" "pctBlasts" "Treatment" "PS" "Source" "39" 39 "ALL" "BM" "B-cell" NA "" "F" NA NA 0.78 "DFCI" "40" 40 "ALL" "BM" "B-cell" NA "5/16/1980" "F" NA NA 0.68 "DFCI" "42" 42 "ALL" "BM" "B-cell" NA NA "F" NA NA 0.42 "DFCI" "47" 47 "ALL" "BM" "B-cell" NA "9/5/1986" "M" NA NA 0.81 "DFCI" "48" 48 "ALL" "BM" "B-cell" NA "2/28/1992" "F" NA NA 0.94 "DFCI" "49" 49 "ALL" "BM" "B-cell" NA NA "M" NA NA 0.84 "DFCI" "41" 41 "ALL" "BM" "B-cell" NA NA "F" NA NA 0.99 "DFCI" "43" 43 "ALL" "BM" "B-cell" NA NA "F" NA NA 0.66 "DFCI" "44" 44 "ALL" "BM" "B-cell" NA "11/19/1998" "F" NA NA 0.97 "DFCI" "45" 45 "ALL" "BM" "B-cell" NA "11/19/1998" "M" NA NA 0.88 "DFCI" Biobase/inst/unitTests/VersionedClass_data/raw/varMetadata.tab0000644000175200017520000000064714516003524025555 0ustar00biocbuildbiocbuild"labelDescription" "Samples" "Sample index" "ALL.AML" "Factor, indicating ALL or AML" "BM.PB" "Factor, sample from marrow or peripheral blood" "T.B.cell" "Factor, T cell or B cell leuk." "FAB" "Factor, FAB classification" "Date" "Date sample obtained" "Gender" "Factor, gender of patient" "pctBlasts" "pct of cells that are blasts" "Treatment" "response to treatment" "PS" "Prediction strength" "Source" "Source of sample" Biobase/inst/unitTests/test_AnnotatedDataFrame.R0000644000175200017520000002652514516003524022775 0ustar00biocbuildbiocbuilddat <- list(x=factor(1:10), y=I(1:10), z=I(letters[1:10])) obj1 <- new("AnnotatedDataFrame", data=data.frame(x=factor(1:10), y=I(1:10), z=I(letters[1:10]), row.names=LETTERS[1:10]), varMetadata=data.frame( labelDescription=names(dat), class=sapply(dat, class), typeof=sapply(dat, typeof), mode=sapply(dat, mode), row.names=c("x","y","z"))) obj2 <- local({ obj2 <- obj1 sampleNames(obj2) <- letters[1:dim(obj1)[[1]]] obj2 }) checkAsp <- function(obj1, obj) { cidx <- colnames(obj1) checkTrue(all(sapply(obj[,cidx, drop=FALSE], typeof)==sapply(obj1, typeof))) checkTrue(all(sapply(obj[,cidx, drop=FALSE], class)==sapply(obj1, class))) checkTrue(all(sapply(obj[,cidx, drop=FALSE], mode)==sapply(obj1, mode))) } checkData <- function(obj1, obj2, obj) { checkTrue(all(colnames(obj1) %in% colnames(obj))) checkTrue(all(colnames(obj2) %in% colnames(obj))) checkAsp(obj1, obj) checkAsp(obj2, obj) } checkVarMetadata <- function(obj1, obj2, obj) { checkTrue(all(colnames(obj1) %in% colnames(obj))) checkTrue(all(colnames(obj2) %in% colnames(obj))) checkTrue(all(rownames(obj1) %in% rownames(obj))) checkTrue(all(rownames(obj2) %in% rownames(obj))) checkAsp(obj1, obj) checkAsp(obj2, obj) } check <- function(obj1, obj2, obj) { checkData(pData(obj1), pData(obj2), pData(obj)) checkVarMetadata(varMetadata(obj1), varMetadata(obj2), varMetadata(obj)) } checkUnchangedPData <- function(p1, p2, p) { checkTrue(all(sapply(colnames(p1), function(nm) { identical(p[1:dim(p1)[[1]],nm], p1[,nm]) }))) checkTrue(all(sapply(colnames(p2), function(nm) { identical(p[dim(p1)[[1]] + 1:dim(p1)[[1]],nm], p2[,nm]) }))) } testEmptyCombine <- function() { obj <- new("AnnotatedDataFrame") checkTrue(identical(obj, combine(obj, obj))) } testAnnotatedDataFrameCombine <- function() { oldw <- options("warn") ## duplicate sampleNames checkTrue(identical(obj1, combine(obj1,obj1))) ## two distint pData obj <- combine(obj1, obj2) check(obj1, obj2, obj) checkTrue(identical(varMetadata(obj1), varMetadata(obj))) # varMetadata unchanged checkTrue(identical(varMetadata(obj2), varMetadata(obj))) ## warning about coercing pData factors obj2a <- obj2 pData(obj2a)[["x"]] <- factor(letters[1:10]) on.exit(options(oldw)) options(warn=2) checkException(combine(obj1,obj2a), silent=TRUE) options(oldw) ## varMetadata with different numbers of columns obj4 <- obj2 varMetadata(obj4)[,"int"] <- 1:dim(varMetadata(obj1))[[1]] varMetadata(obj4)[,"char"] <- I(letters[1:dim(varMetadata(obj1))[[1]]]) obj <- combine(obj1, obj4) checkUnchangedPData(pData(obj1), pData(obj4), pData(obj)) check(obj1, obj4, obj) ## varMetadata content mismatch obj3 <- obj2 varMetadata(obj3)[,1] <- varMetadata(obj3)[,4] colnames(varMetadata(obj3)) <- colnames(varMetadata(obj2)) checkException(combine(obj1, obj3), silent=TRUE) ## varMetadata multi-column mismatch obj3 <- obj2 varMetadata(obj3)[,1:2] <- varMetadata(obj3)[,4:3] colnames(varMetadata(obj3)) <- colnames(varMetadata(obj2)) checkException(suppressWarnings(combine(obj1, obj3)), silent=TRUE) ## varMetadata extra columns obj5 <- obj2 pData(obj5)[,"int"] <- 1:dim(pData(obj1))[[1]] pData(obj5)[,"char"] <- I(letters[1:dim(pData(obj1))[[1]]]) varMetadata(obj5)[c("int","char"),] <- NA obj <- combine(obj1, obj5) checkUnchangedPData(pData(obj1), pData(obj5), pData(obj)) check(obj1, obj5, obj) ## varMetadata with conflicting information (NAs) obj6 <- obj2 varMetadata(obj6)[2,"typeof"] <- NA checkException(suppressWarnings(combine(obj1, obj6)), silent=TRUE) } testVarMetadataAssign <- function() { ## previously coerced labelData to 'character' obj2 <- obj1 varMetadata(obj2) <- varMetadata(obj1) checkTrue(identical(obj1, obj2)) to <- AnnotatedDataFrame(data.frame(Sample=1:5)) df <- data.frame(labelDescription="foo", row.names="Sample") varMetadata(to) <- df checkTrue(validObject(to)) ## avoid varMetatadata duplication via partial match ## https://stat.ethz.ch/pipermail/bioconductor/2014-February/057883.html adf <- AnnotatedDataFrame(data.frame(xx=1:5)) varMetadata(adf)["xx", "labelDescription"] <- "lbl" adf$x <- 1:5 checkIdentical(c("lbl", NA), varMetadata(adf)$labelDescription) } testMetadataFactors <- function() { pd = data.frame(covar="Z", stringsAsFactors = TRUE) vmd = data.frame(labelDescription=I("Meta 'covar'"), stringsAsFactors = TRUE) rownames(vmd) = colnames(pd) rownames(pd) = "Z" a = new("AnnotatedDataFrame", data=pd, varMetadata=vmd) ## factor recode should throw a warning oldw=options("warn") on.exit(options(oldw)) options(warn=2) pd = data.frame(covar=LETTERS[1]) rownames(pd) = LETTERS[1] b = new("AnnotatedDataFrame", data=pd, varMetadata=vmd) checkException(combine(a,b), silent=TRUE) options(oldw) } testNoSharedCols <- function() { obj1 <- new("AnnotatedDataFrame", data=data.frame(x=factor(1:10)), varMetadata=data.frame(labelDescription="x", row.names=c("x"))) obj2 <- new("AnnotatedDataFrame", data=data.frame(y=factor(1:10), row.names=letters[1:10]), varMetadata=data.frame(labelDescription="y", row.names=c("y"))) obj <- combine(obj1,obj2) checkTrue(all(pData(obj)[1:10,colnames(pData(obj1)),drop=FALSE]==pData(obj1))) checkTrue(all(pData(obj)[11:20,colnames(pData(obj2)),drop=FALSE]==pData(obj2))) } testPhenoDataFactors <- function() { data(sample.ExpressionSet) suppressWarnings(obj1 <- updateObject(sample.ExpressionSet)) obj2 <- obj1 sampleNames(obj2) <- letters[1:dim(obj1)[[2]]] obj1 <- phenoData(obj1) obj2 <- phenoData(obj2) obj <- combine(obj1, obj2) checkTrue(all(pData(obj)[1:nrow(obj1),colnames(pData(obj1)),drop=FALSE]== pData(obj1))) checkTrue(all(pData(obj)[nrow(obj1)+1:nrow(obj2),colnames(pData(obj2)), drop=FALSE] == pData(obj2))) } testDimLabels <- function() { x <- new("AnnotatedDataFrame") y <- x y@dimLabels <- c("x","y") checkException(combine(x,y), silent=TRUE) } testNewCovariate <- function() { x <- new("AnnotatedDataFrame",data=data.frame(x=1:10)) x$y <- 1:10 checkTrue(validObject(x)) x[["z"]] <- 1:10 checkTrue(validObject(x)) x <- new("AnnotatedDataFrame",data=data.frame(x=1:10)) varMetadata(x)$meta1 <- TRUE x[["w"]] <- letters[1:10] checkTrue(identical(dim(varMetadata(x)), as.integer(c(2,2)))) checkTrue(identical(varMetadata(x)["x",,drop=TRUE], list(labelDescription=as.character(NA),meta1=TRUE))) x <- new("AnnotatedDataFrame",data=data.frame(x=1:10)) pData(x) <- pData(x)[1:5,,drop=FALSE] checkTrue(validObject(x)) checkTrue(identical(as.vector(dim(x),"integer"), as.integer(c(5,1)))) } testReplaceCovariates <- function() { ## previously tried to update rather than replace varMetadata adf <- new("AnnotatedDataFrame", data=data.frame(x=1:3)) pData(adf) <- data.frame(y=1:3) checkTrue(validObject(adf)) checkEquals("y", varLabels(adf)) pData(adf)[,"z"] <- 3:1 checkTrue(validObject(adf)) checkEquals(c("y","z"), varLabels(adf)) checkEquals(data.frame(y=1:3, z=3:1), pData(adf)) pData(adf)[,"y"] <- NULL checkTrue(validObject(adf)) checkEquals("z", varLabels(adf)) checkEquals(data.frame(z=3:1), pData(adf)) } testNewCovariateOnEmptyADF <- function() { adf <- new("AnnotatedDataFrame", data=data.frame(1:3)[,FALSE,drop=FALSE]) ## was failing to create varMetadata labelDescription pData(adf)$x <- 1:3 checkTrue(validObject(adf, complete=TRUE)) obj <- obj1 pData(obj)[["Z"]] <- NA checkTrue(validObject(obj, complete=TRUE)) } testBadInitializeArugments <- function() { checkException(new("AnnotatedDataFrame", data=NULL), silent=TRUE) checkException(new("AnnotatedDataFrame", varMetadata=NULL), silent=TRUE) checkException(new("AnnotatedDataFrame", data=data.frame(), varMetadata=NULL), silent=TRUE) } testNewWithVarMetadata <- function() { df <- data.frame(x=1:6, y=rep(c("Low", "High"),3), z=I(LETTERS[1:6]), row.names=paste("Sample", 1:6, sep="_")) metaData <- data.frame(labelDescription=c( "Numbers", "Factor levels", "Character")) ## standard obj <- new("AnnotatedDataFrame", data=df, varMetadata=metaData) checkTrue(validObject(obj)) ## varMetadata with inconsistent row names -- silent conversion row.names(metaData) <- 1:3 obj <- new("AnnotatedDataFrame", data=df, varMetadata=metaData) checkTrue(validObject(obj)) checkTrue(all(row.names(varMetadata(obj))==names(pData(obj)))) } testAnnotatedDataFrameFrom <- function() { ## empty matrix m <- matrix(0,0,0) a <- annotatedDataFrameFrom(m, byrow=TRUE) checkTrue(validObject(a)) checkTrue(all.equal(c(0,0), as.vector(dim(a)))) a <- annotatedDataFrameFrom(m, byrow=FALSE) checkTrue(validObject(a)) checkTrue(all.equal(c(0,0), as.vector(dim(a)))) ## matrix m <- matrix(0,5,10, dimnames=list(letters[1:5], LETTERS[1:10])) a <- annotatedDataFrameFrom(m, byrow=TRUE) checkIdentical(letters[1:5], sampleNames(a)) a <- annotatedDataFrameFrom(m, byrow=FALSE) checkIdentical(LETTERS[1:10], sampleNames(a)) ## assayData -- empty env ad <- assayDataNew() checkTrue(validObject(annotatedDataFrameFrom(ad, byrow=TRUE))) checkTrue(validObject(annotatedDataFrameFrom(ad, byrow=FALSE))) ## assayData -- empty list ad <- assayDataNew(storage.mode="list") checkIdentical("list", storageMode(ad)) checkTrue(validObject(annotatedDataFrameFrom(ad, byrow=TRUE))) checkTrue(validObject(annotatedDataFrameFrom(ad, byrow=FALSE))) ## assayData -- non-empty env ad <- assayDataNew(m=m) checkIdentical("lockedEnvironment", storageMode(ad)) a <- annotatedDataFrameFrom(ad, byrow=TRUE) checkIdentical(letters[1:5], sampleNames(a)) a <- annotatedDataFrameFrom(ad, byrow=FALSE) checkIdentical(LETTERS[1:10], sampleNames(a)) ## assayData -- non-empty list ad <- assayDataNew(m=m, storage.mode="list") checkIdentical("list", storageMode(ad)) a <- annotatedDataFrameFrom(ad, byrow=TRUE) checkIdentical(letters[1:5], sampleNames(a)) a <- annotatedDataFrameFrom(ad, byrow=FALSE) checkIdentical(LETTERS[1:10], sampleNames(a)) } testAnnotatedDataFrameDimnames <- function() { adf0 <- AnnotatedDataFrame(data.frame(x=1:5, y=5:1, row.names=letters[1:5]), data.frame(foo=1:2, row.names=c("x", "y"))) adf <- adf0 dimnames(adf) <- dimnames(adf) checkIdentical(adf0, adf) adf <- adf0 exp <- list(LETTERS[seq_len(nrow(adf0))], letters[seq_len(ncol(adf0))]) dimnames(adf) <- exp checkIdentical(exp, dimnames(adf)) df0 <- varMetadata(adf0) rownames(df0) <- exp[[2]] checkIdentical(df0, varMetadata(adf)) adf <- adf0 dimnames(adf) <- NULL checkTrue(validObject(adf)) checkIdentical(list(as.character(1:5), colnames(adf0)), dimnames(adf)) } Biobase/inst/unitTests/test_AssayData.R0000644000175200017520000000446614516003524021165 0ustar00biocbuildbiocbuildcheckAssayDataCombine <- function(nr, nc) { obj1 <- assayDataNew(exprs= matrix(runif(nr*nc), nrow=nr, ncol=nc, dimnames=list( if (nr > 0) letters[1:nr] else NULL, if (nc > 0) LETTERS[1:nc] else NULL))) obj <- combine(obj1,obj1) checkTrue(!identical(obj, obj1)) # different environments checkTrue(identical(obj1$exprs, obj$exprs)) storageMode(obj1) <- "list" obj <- combine(obj1,obj1) checkTrue(identical(obj1, obj)) # same list checkTrue(identical(obj1$exprs, obj$exprs)) if (nc > 2) { ## combine distinct cols obj1 <- assayDataNew(exprs= matrix(runif(nr*nc), nrow=nr, ncol=nc, dimnames=list( if (nr > 0) letters[1:nr] else nr, LETTERS[1:nc]))) obj2 <- obj1 sampleNames(obj2)[3] <- letters[3] obj <- combine(obj1, obj2) checkTrue(all(dim(obj$exprs)==c(nr,nc+1))) checkTrue(identical(obj$exprs[,1:nc],obj1$exprs)) checkTrue(identical(obj$exprs[,nc+1], obj2$exprs[,3])) } if (nc > 1) { ## inconsistent data -- list, otherwise both copies change! storageMode(obj1) <- "list" obj2 <- obj1 obj2$exprs[,1] <- runif(nr) checkException(combine(obj1, obj2), silent=TRUE) } } testAssayDataNew_named_dims <- function() { nms0 <- list(letters[1:5], LETTERS[1:2]) nms <- Map(setNames, nms0, nms0) exprs <- matrix(0, nrow=5, ncol=2, dimnames=nms) checkIdentical(nms0[[1]], featureNames(assayDataNew(exprs=exprs))) checkIdentical(nms0[[2]], sampleNames(assayDataNew(exprs=exprs))) } testAssayDataCombine <- function() { checkAssayDataCombine(5,3) checkAssayDataCombine(0,0) checkAssayDataCombine(1,0) checkAssayDataCombine(0,1) } testAssayDataCombineRows <- function() { m <- matrix(1:20, nrow=5, dimnames=list(LETTERS[1:5], letters[1:4])) obj <- assayDataNew(exprs=m) obj1 <- assayDataNew(exprs=m[1:3,]) obj2 <- assayDataNew(exprs=m[4:5,]) checkEquals(obj, combine(obj1, obj2)) obj3 <- assayDataNew(exprs=m[3:5,]) checkEquals(obj, combine(obj1, obj3)) # overlapping } Biobase/inst/unitTests/test_DataClasses.R0000644000175200017520000000106014516003524021465 0ustar00biocbuildbiocbuildtestNew <- function() { ## create instances of non-virtual objects with simple call to "new" nms <- ls(getNamespace("Biobase"),all=TRUE) classes <- gsub(".__C__", "", nms[grep(".__C__", nms)]) isVirtual <- sapply(classes, function(nm) getClass(nm)@virtual) res <- lapply(classes[!isVirtual], function(x) suppressWarnings(new(x))) } test_MIAME_construction <- function() { checkTrue(validObject(new("MIAME"))) checkTrue(validObject(MIAME())) checkIdentical(new("MIAME", name="mytest"), MIAME(name="mytest")) } Biobase/inst/unitTests/test_EsetSubclasses.R0000644000175200017520000004736314516003524022246 0ustar00biocbuildbiocbuildbaseClass <- list(eSet = NULL) ## featureSubclases <- ## list(PmOneChannelExpressionSet = c("pm"), ## PmMmOneChannelExpressionSet = c("pm", "mm"), ## PmMmOneChannelSNPSet = c("pm", "mm")) featureSubclases <- NULL targetSubclasses <- list(ExpressionSet = c("exprs"), MultiSet = c("myElt", "yourElt"), SnpSet = c("call", "callProbability")) allClasses <- c( baseClass, featureSubclases, targetSubclasses ) allSubclasses <- c( featureSubclases, targetSubclasses ) exprsEnabledSubclasses <- c("ExpressionSet","SnpSet") nonEmptySubclasses <- exprsEnabledSubclasses modes <- c("lockedEnvironment","environment","list") .features <- 20 .samples <- 10 helperNew <- function(obj, ...) { .pData <- data.frame(numeric(.samples), row.names=I(1:.samples))[,FALSE] .fData <- data.frame(numeric(.features), row.names=I(1:.features))[,FALSE] args <- function(names) { obj <- lapply(names, function(nm) new("matrix", nr = .features, nc = .samples)) names(obj) <- names c(obj, list(phenoData = new("AnnotatedDataFrame", data=.pData), featureData = new("AnnotatedDataFrame", data=.fData) )) } argsSnpN <- function(n) { list(call = new("array", dim=c(.features,.samples, n)), callProbability = new("array", dim=c(.features,.samples, n)), phenoData = new("AnnotatedDataFrame", data=.pData), featuerData = new("AnnotatedDataFrame", data=.fData)) } argsSnpDetail <- function(names) { obj <- lapply(names, function(nm) { if (nm != "copyNumber") new("array", dim=c(.features, .samples, 2)) else new("array",dim=c(.features, .samples, 3)) }) names(obj) <- names c(obj, list(phenoData = new("AnnotatedDataFrame", data=.pData), featureData = new("AnnotatedDataFrame", data=.fData))) } dots <- if (length(list(...))>0) list(...) else NULL switch(obj, SnpSetDetail = do.call(new, c(obj,argsSnpDetail(allClasses[[obj]]), dots)), SnpSet2 = do.call(new, c(obj,argsSnpN(2),dots)), SnpSet4 = do.call(new, c(obj,argsSnpN(8),dots)), eSet = new("eSet", ...), ## default do.call(new, c(obj, args(allClasses[[obj]]), dots))) } helperFillWithNoise <- function( obj ) { aData <- assayData(obj) storage.mode <- storageMode(obj) names <- if (is(aData,"environment")) ls(aData) else names(aData) if (is(aData,"environment")) aData <- new.env(parent=emptyenv()) adim <- as.numeric(dim(obj)) n <- prod(adim) for( nm in names ) { if (length(adim)==2) aData[[nm]] <- matrix(runif(n), nr=adim[[1]], nc=adim[[2]]) else aData[[nm]] <- array(runif(n),adim) } sampleNames(aData) <- sampleNames(obj) featureNames(aData) <- featureNames(obj) if (storage.mode=="lockedEnvironment") lockEnvironment(aData, bindings=TRUE) assayData(obj) <- aData obj } testNewSubclassCreation <- function() { for (mode in modes) lapply( names(allSubclasses), new, storage.mode=mode) } testStorageMode <- function() { lapply(names(allSubclasses), function(s) { obj <- new(s) checkTrue(class(assayData(obj))=="environment") obj <- new(s, storage.mode="list") checkTrue(class(assayData(obj))=="list") obj <- new(s, storage.mode="environment") checkTrue(class(assayData(obj))=="environment") ## is helperNew behaving? obj <- helperNew(s) checkTrue(class(assayData(obj))=="environment") obj <- helperNew(s, storage.mode="list") checkTrue(class(assayData(obj))=="list") obj <- helperNew(s, storage.mode="environment") checkTrue(class(assayData(obj))=="environment") }) ## update storage modes data(sample.ExpressionSet) storageMode(sample.ExpressionSet) <- "environment" checkTrue(storageMode(sample.ExpressionSet)=="environment") storageMode(sample.ExpressionSet) <- "lockedEnvironment" checkTrue(storageMode(sample.ExpressionSet)=="lockedEnvironment") storageMode(sample.ExpressionSet) <- "list" checkTrue(storageMode(sample.ExpressionSet)=="list") storageMode(sample.ExpressionSet) <- "environment" checkTrue(storageMode(sample.ExpressionSet)=="environment") } testNewValidSubclasses <- function() { for (mode in modes) lapply(names(allSubclasses), function( s ) { obj <- new(s, storage.mode=mode) checkTrue(validObject(obj)) }) for (mode in modes) lapply(names(allSubclasses), function(s) { obj <- helperNew(s, storage.mode=mode) checkTrue(class(obj)==s) checkTrue(validObject(obj)) }) } testPreallocSubclasses <- function() { for (mode in modes) lapply(names(allSubclasses), function(s) { obj <- helperNew(s, storage.mode=mode) checkTrue( all( dim(obj)[1:2] == c( .features, .samples ))) checkTrue( all( dim(phenoData(obj)) == c( .samples, 0 ))) }) } testInitializeWithNames <- function() { ## do names applied to one component get picked up? exprs <- matrix(1:10, ncol=2, dimnames=list(list(), c("A", "B"))) phenoData <- new("AnnotatedDataFrame", data=data.frame(x=1:2, row.names=c("A","B"))) obj <- new("ExpressionSet", phenoData=phenoData, exprs=exprs) checkTrue(identical(sampleNames(obj), c("A","B"))) exprs <- matrix(1:10, ncol=2) phenoData <- new("AnnotatedDataFrame", data=data.frame(x=1:2)) obj <- new("ExpressionSet", phenoData=phenoData, exprs=exprs) checkTrue(identical(sampleNames(obj), c("1", "2"))) exprs <- matrix(1:10, ncol=2) phenoData <- new("AnnotatedDataFrame", data=data.frame(x=1:2, row.names=c("A", "B"))) obj <- new("ExpressionSet", phenoData=phenoData, exprs=exprs) checkTrue(identical(sampleNames(obj), c("A", "B"))) } testValidation <- function() { errMsg <- c("sample numbers differ between assayData and phenoData", "sampleNames differ between assayData and phenoData", "sample numbers differ between phenoData and protocolData", "sampleNames differ between phenoData and protocolData" ) for (mode in modes) lapply(names(allSubclasses), function(s) { obj <- helperNew(s, storage.mode=mode) checkTrue(validObject( obj )) phenoData(obj) <- new("AnnotatedDataFrame") checkEquals( validObject( obj, test = TRUE ), errMsg) }) } testNColSubclasses <- function() { for (mode in modes) lapply(nonEmptySubclasses, function( s ) { obj <- new( s, storage.mode = mode ) checkTrue( ncol( obj ) == 0 ) }) for (mode in modes) lapply(names(allSubclasses), function( s ) { obj <- helperNew(s, storage.mode=mode) checkTrue( ncol( obj ) == .samples ) }) } testSubsetEsetSubclasses <- function() { subset <- function(s, ...) { obj <- helperNew(s, ...) obj1 <- obj[1:15, 1:5] checkTrue(validObject(obj1)) checkTrue(all(dims(obj1)[1:2,] == c( 15, 5 ))) ## original unmodified if (storageMode(obj)!="environment") { checkTrue(validObject(obj)) checkTrue(all(dims(obj)[1:2,] == c(.features,.samples))) obj <- obj[1:15, 1:5] checkTrue(validObject(obj)) checkTrue(all(dims(obj)[1:2,] == c( 15, 5 ))) } } for (mode in modes ) lapply(names(allSubclasses), subset, storage.mode=mode) } testAssayDataReplacement <- function() { lapply(names(allSubclasses), function( s ) { obj <- helperNew(s) assayData(obj) <- new.env() }) } testAssayDataElement <- function() { checkObj <- function(obj) { m <- new("matrix",0, nr=0, nc=0, dimnames=list(list(),list())) checkTrue(identical(assayDataElementNames(obj), "exprs")) checkTrue(identical(assayDataElement(obj, "exprs"), m)) obj <- assayDataElementReplace(obj, "exprs", m) checkTrue(identical(assayDataElement(obj, "exprs"), m)) } checkObj(new("ExpressionSet")) checkObj(new("ExpressionSet", storage.mode="list")) checkObj(new("ExpressionSet", storage.mode="environment")) } testOtherSlots <- function() { for (mode in modes) lapply(names(allSubclasses), function( s ) { obj <- helperNew(s, storage.mode=mode) experimentData( obj ) <- new( "MIAME" ) annotation( obj ) <- new( "character" ) }) } testShow <- function() { # just 'does it show' capture.output( for (mode in modes) lapply(names(allSubclasses), function( s ) { obj <- helperNew (s, storage.mode=mode) tryCatch(show(obj), error=function(e) checkTrue( 1==0 )) }) ) } testSampleNames <- function() { nameCheck <- function( obj ) { checkTrue( all( sampleNames( obj ) == sampleNames( phenoData( obj )))) checkException( sampleNames( obj ) <- 1:(.features+1), silent=TRUE ) sampleNames( obj ) <- letters[ 1:dim( obj )[[2]] %% 26 ] checkTrue(all(sampleNames(assayData(obj)) == sampleNames(obj))) checkTrue(validObject(obj), "original") orig <- sampleNames(obj) mod <- 1:length(orig) obj1 <- obj sampleNames(obj1) <- mod checkTrue(all(sampleNames(obj) == orig)) if (storageMode(obj)!="environment") checkTrue(validObject(obj), "after modification") else checkEquals(validObject(obj, test = TRUE ), "sampleNames differ between assayData and phenoData") checkTrue(all(sampleNames(obj1)==mod)) checkTrue(validObject(obj1)) sampleNames(assayData(obj)) <- mod validObject(obj,test=TRUE) checkEquals(validObject( obj, test = TRUE ), "sampleNames differ between assayData and phenoData") } for (mode in modes) lapply(names(allSubclasses), function(s) nameCheck(helperNew(s, storage.mode=mode))) } testExprs <- function() { exprsCheck <- function(obj) { newExprs <- switch(class(obj), SnpSet2 = { ex <- new("array", dim = c(.features, .samples, 2)) ex[,,] <- runif(length(ex)) ex }, SnpSet4 = { ex <- new("array", dim = c(.features, .samples, 8)) ex[,,] <- runif(length(ex)) ex }, SnpSetDetail = { ex <- new("array", dim = c(.features, .samples, 2)) ex[,,] <- runif(length(ex)) ex }, { ex <- new("matrix", nr = .features, nc = .samples) ex[,] <- runif(length(ex)) ex }) fNames <- featureNames(obj) sNames <- sampleNames(obj) oldExprs <- exprs(obj) exprs(obj) <- newExprs checkTrue( identical(unname(exprs(obj)), newExprs)) if (storageMode(obj)!="environment") checkTrue(!identical(exprs(obj), oldExprs)) sampleNames(assayData(obj)) <- sNames featureNames(assayData(obj)) <- fNames checkTrue(validObject(obj)) obj } lapply(exprsEnabledSubclasses, function(s) exprsCheck(helperNew(s))) for (mode in modes) lapply(exprsEnabledSubclasses, function(s) exprsCheck(helperNew(s, storage.mode=mode))) ## copy semantics lapply(exprsEnabledSubclasses, function(s) { obj <- helperNew(s, storage.mode="lockedEnvironment") oldExprs <- exprs(obj) obj1 <- exprsCheck(obj) checkTrue( identical(exprs(obj), oldExprs)) checkTrue(!identical(exprs(obj1),exprs(obj))) checkTrue(validObject(obj1)) }) lapply(exprsEnabledSubclasses, function(s) { # lockedEnvironment implicit obj <- helperNew(s) oldExprs <- exprs(obj) obj1 <- exprsCheck(obj) checkTrue( identical(exprs(obj), oldExprs)) checkTrue(!identical(exprs(obj1),exprs(obj))) checkTrue(validObject(obj1)) }) } testCombineEsetSubclasses <- function() { combineEmpty <- function(s, ...) { if (s=="MultiSet") return(TRUE) obj1 <- new(s) obj2 <- new(s) obj <- combine(obj1,obj2) checkTrue(validObject(obj)) } combineObj <- function(s, ...) { obj1 <- helperFillWithNoise(helperNew(s,...)) obj2 <- helperFillWithNoise(helperNew(s,...)) sampleNames(obj2) <- letters[1:length(sampleNames(obj2))%%26] obj <- combine(obj1,obj2) checkTrue(validObject(obj)) checkTrue(all.equal(obj[,1:.samples],obj1)) checkTrue(all.equal(obj[,(.samples+1):(2*.samples)],obj2)) } for (mode in modes) lapply(names(allSubclasses), combineEmpty, storage.mode=mode) for (mode in modes) lapply(names(allSubclasses), combineObj, storage.mode=mode) } testSetAs <- function() { setClass("SwirlSet", contains="eSet", where=.GlobalEnv) setMethod("initialize", "SwirlSet", function(.Object, assayData = assayDataNew( R=R, G=G, Rb=Rb, Gb=Gb, ...), phenoData = annotatedDataFrameFrom(assayData, byrow=FALSE), featureData = annotatedDataFrameFrom(assayData, byrow=TRUE), experimentData = new("MIAME"), annotation = character(), R = new("matrix"), G = new("matrix"), Rb = new("matrix"), Gb = new("matrix"), ... ) { callNextMethod(.Object, assayData = assayData, phenoData = phenoData, featureData = featureData, experimentData = experimentData, annotation = annotation) }, where=.GlobalEnv) setValidity("SwirlSet", function(object) { assayDataValidMembers(assayData(object), c("R", "G", "Rb", "Gb")) }, where=.GlobalEnv) checkNewAndOld <- function(new, old) { if (class(old)=="exprSet") { pDataOld <- slot(slot(old, "phenoData"), "pData") exprsOld <- slot(old, "exprs") sampleNamesOld <- as.character(pDataOld$Samples) geneNamesOld <- rownames(exprsOld) } else { pDataOld <- pData(old) exprsOld <- exprs(old) sampleNamesOld <- sampleNames(old) geneNamesOld <- geneNames(old) } checkTrue(identical(pData(new), pDataOld)) checkTrue(all.equal(exprs(new),exprsOld,check.attributes=FALSE)) checkTrue(identical(sampleNames(new),sampleNamesOld)) checkTrue(identical(featureNames(new),geneNamesOld)) } checkNewGolubMerge <- function(new,old) { checkTrue(identical(pData(new),pData(old))) checkTrue(all.equal(exprs(new),exprs(old),check.attributes=FALSE)) checkTrue(identical(sampleNames(new),sampleNames(old))) checkTrue(identical(featureNames(new),featureNames(old))) } checkNewSampleEset <- function(new, old) { if (class(old)=="eSet") { pDataOld <- slot(slot(old, "phenoData"), "pData") assayDataOld <- slot(old, "assayData") exprsOld <- assayDataOld[["exprs"]] } else { pDataOld <- pData(old) exprsOld <- exprs(old) sampleNamesOld <- sampleNames(old) geneNamesOld <- geneNames(old) } checkTrue(identical(pData(new),pDataOld)) checkTrue(all(names(assayDataOld) == names(assayData(new)))) dups <- duplicated(old@reporterNames) mapply(function(x,y) checkTrue(all.equal(x[!dups,],y,check.attributes=FALSE)), assayDataOld, assayData(new)) checkTrue(identical(sampleNames(new),old@sampleNames)) checkTrue(identical(featureNames(new),old@reporterNames[!dups])) } opts <- options() options(warn=-1) ## would like to be able to specify storage.mode, but how to specify?... fp <- system.file(package="Biobase", "unitTests", "VersionedClass_data", "devel", "exprSet.Rda") load(fp) suppressMessages(e <- as(exprSet,"ExpressionSet")) checkNewAndOld(e,exprSet) library(golubEsets) data(Golub_Merge) gm <- as(Golub_Merge,"ExpressionSet") checkNewGolubMerge(gm,Golub_Merge) pubMedIds(gm) = "10521349" checkNewGolubMerge(gm,Golub_Merge) fp <- system.file(package="Biobase", "unitTests", "VersionedClass_data", "devel", "sample.eSet.rda") load(fp) suppressMessages(es <- updateOldESet(sample.eSet, "SwirlSet")) checkNewSampleEset(es, sample.eSet) options(opts) removeClass("SwirlSet", where=.GlobalEnv) } testFeatureNamesReplace <- function() { e <- new("ExpressionSet", exprs=matrix(nrow=5,ncol=2)) featureNames(e) <- letters[5:1] checkIdentical(letters[5:1], featureNames(e)) checkTrue(validObject(e)) } testExtraSlotClassInitialize1 <- function() { setClass("ExtraSlotSet", contains="eSet", representation=representation( extraSlot="character"), where=.GlobalEnv) ## pass if no error e <- new("ExtraSlotSet") removeClass("ExtraSlotSet", where=.GlobalEnv) } testExtraSlotClassInitialize2 <- function() { setClass("ExtraSlotSet", contains="eSet", representation=representation( extraSlot="character"), where=.GlobalEnv) e <- new("ExtraSlotSet", R=matrix(0,5,3), G=matrix(0,5,3), extraSlot="hello", storage.mode="environment") checkEquals("hello", e@extraSlot) checkEquals(c("G", "R"), ls(assayData(e))) checkEquals("environment", storageMode(e)) removeClass("ExtraSlotSet", where=.GlobalEnv) } testExtraSlotClassInitialize3 <- function() { setClass("ExtraSlotSet", contains="eSet", representation=representation( extraSlot="character"), where=.GlobalEnv) e <- new("ExtraSlotSet", assayData=assayDataNew( R=new("matrix"), G=new("matrix"), storage.mode="environment"), extraSlot="hello") checkEquals("hello", e@extraSlot) checkEquals(c("G", "R"), ls(assayData(e))) checkEquals("environment", storageMode(e)) removeClass("ExtraSlotSet", where=.GlobalEnv) } testExtraSlotClassInitialize4 <- function() { setClass("ExtraSlotSet", contains="eSet", representation=representation( extraSlot="character"), where=.GlobalEnv) oldopts <- options() options(warn=2) on.exit(options(oldopts)) checkException(new("ExtraSlotSet", assayData=assayDataNew( R=matrix(0,3,5), storage.mode="environment"), R=new("matrix")), silent=TRUE) removeClass("ExtraSlotSet", where=.GlobalEnv) } testEsetUnsafeSetSlot <- function() { library(Biobase) data(sample.ExpressionSet) orig <- sampleNames(sample.ExpressionSet) obj <- sample.ExpressionSet obj <- `sampleNames<-`(obj, letters[1:26]) checkIdentical(sampleNames(obj), letters[1:26]) checkIdentical(sampleNames(sample.ExpressionSet), orig) } testEsetfeatureDataAccess <- function() { data(sample.ExpressionSet) checkTrue(all(dim(fData(sample.ExpressionSet))==c(500,0))) checkTrue(all(dim(fvarMetadata(sample.ExpressionSet))==c(0,1))) checkTrue(length(fvarLabels(sample.ExpressionSet))==0) adf <- new("AnnotatedDataFrame", data=data.frame(x=rep(0,500)), varMetadata=data.frame(labelDescription=c("X"))) obj <- sample.ExpressionSet featureData(obj) <- adf featureNames(obj) <- featureNames(obj) checkTrue(validObject(obj)) checkTrue(all(dim(fData(obj))==c(500,1))) checkTrue(all(dim(fvarMetadata(obj))==c(1,1))) checkTrue(fvarLabels(obj)=="x") obj <- sample.ExpressionSet fData(obj) <- pData(adf) checkTrue(all(dim(fData(obj))==c(500,1))) checkTrue(all(fData(obj)==pData(adf))) # Names differ fvarMetadata(obj) <- varMetadata(adf) checkTrue(all(dim(fvarMetadata(obj))==c(1,1))) checkTrue(all.equal(fvarMetadata(obj), varMetadata(adf), check.attributes=FALSE)) fvarLabels(obj) <- "y" checkTrue(fvarLabels(obj)=="y") } Biobase/inst/unitTests/test_ExpressionSet.R0000644000175200017520000001506014516003524022116 0ustar00biocbuildbiocbuildtestCombineFeatureData <- function() { data(sample.ExpressionSet) # use as source for exprs data suppressWarnings(obj <- updateObject(sample.ExpressionSet)[1:20,1:10]) obj1 <- new("ExpressionSet", phenoData=phenoData(obj), exprs=exprs(obj)) obj2 <- obj1 pData(featureData(obj1))[["x"]] <- FALSE pData(featureData(obj1))[["y"]] <- FALSE varMetadata(featureData(obj1)) <- data.frame(labelDescription=c("the x", "the y"), row.names=c("x", "y")) validObject(obj1) sampleNames(obj2) <- letters[1:dim(obj1)[[2]]] pData(featureData(obj2))[["y"]] <- FALSE pData(featureData(obj2))[["z"]] <- TRUE varMetadata(featureData(obj2)) <- data.frame(labelDescription=c("the y", "the z"), row.names=c("y", "z")) validObject(obj2) obj <- combine(obj1,obj2) checkTrue(all(varLabels(featureData(obj1)) %in% varLabels(featureData(obj)))) checkTrue(all(varLabels(featureData(obj2)) %in% varLabels(featureData(obj)))) ## conflicting feature pData pData(featureData(obj2))[["y"]] <- TRUE validObject(obj2) checkException(suppressWarnings(combine(obj1, obj2)), silent=TRUE) } testCombineRows <- function() { data(sample.ExpressionSet) obj <- sample.ExpressionSet checkEquals(obj, combine(obj[1:250,], obj[251:500,])) checkEquals(obj, combine(obj[,1:13], obj[,14:26])) ## overlapping checkEquals(obj, combine(obj[1:300,], obj[250:500,])) checkEquals(obj, combine(obj[,1:20], obj[,15:26])) } testAddTextNotes <- function() { eset <- new("ExpressionSet") notes(eset) <- "a note" checkTrue(identical(notes(eset), list("a note"))) notes(eset) <- "another" checkTrue(identical(notes(eset), list("a note", "another"))) } testExtraSlotExpressionClassInitialize1 <- function() { setClass("ExtraSlotExpressionSet", contains="ExpressionSet", representation=representation( extraSlot="character"), where=.GlobalEnv) ## pass if no error checkTrue(validObject(new("ExtraSlotExpressionSet"))) removeClass("ExtraSlotExpressionSet", where=.GlobalEnv) } testExtraSlotExpressionClassInitialize2 <- function() { setClass("ExtraSlotExpressionSet", contains="ExpressionSet", representation=representation( extraSlot="character"), where=.GlobalEnv) e <- new("ExtraSlotExpressionSet", exprs=new("matrix"), extraSlot="hello", storage.mode="environment") checkEquals("hello", e@extraSlot) checkEquals("exprs", ls(assayData(e))) checkEquals("environment", storageMode(e)) removeClass("ExtraSlotExpressionSet", where=.GlobalEnv) } testExtraSlotExpressionClassInitialize3 <- function() { setClass("ExtraSlotExpressionSet", contains="ExpressionSet", representation=representation( extraSlot="character"), where=.GlobalEnv) e <- new("ExtraSlotExpressionSet", assayData=assayDataNew( exprs=new("matrix"), storage.mode="environment"), extraSlot="hello") checkEquals("hello", e@extraSlot) checkEquals("exprs", ls(assayData(e))) checkEquals("environment", storageMode(e)) removeClass("ExtraSlotExpressionSet", where=.GlobalEnv) } testDollar <- function() { data(sample.ExpressionSet) s1 <- sample.ExpressionSet$sex s2 <- sample.ExpressionSet$se # we expect partial matching to work checkTrue(!is.null(s1), msg="$sex broken") checkTrue(!is.null(s2), msg="$se broken (pmatch)") checkEquals(s1, s2, msg="pmatch equality") } testSubset2 <- function() { data(sample.ExpressionSet) es <- sample.ExpressionSet x <- runif(ncol(es)) ldesc <- "Random variate" es[["RVar", labelDescription=ldesc]] <- x checkEquals(es[["RVar"]], x) checkEquals(varMetadata(es)["RVar", "labelDescription"], ldesc) } testHarmonizeAssayDataDimnames <- function() { checkHarmonizeOne <- function(exprs) { es <- new("ExpressionSet", exprs=exprs) checkTrue(validObject(es)) } checkHarmonizeTwo <- function (exprs, se.exprs) { es <- new("ExpressionSet", exprs=exprs, se.exprs=se.exprs) checkTrue(validObject(es)) okNames <- list(featureNames(featureData(es)), sampleNames(phenoData(es))) dimNames <- Biobase:::.assayDataDimnames(assayData(es)) checkTrue(all(sapply(dimNames, identical, okNames))) } checkCreation <- function(exprs, se.exprs) { checkHarmonizeOne(exprs) checkHarmonizeTwo(exprs, se.exprs) ## names on both dimnames nexprs <- exprs dimnames(nexprs) <- lapply(dimnames(nexprs), function(x) { names(x) <- as.vector(letters[seq(1, length(x))]) x }) checkHarmonizeOne(nexprs) checkHarmonizeTwo(nexprs, se.exprs) ## names on colnames nexprs <- exprs cnms <- colnames(nexprs) names(cnms) <- letters[seq(1, length(cnms))] colnames(nexprs) <- cnms checkHarmonizeOne(nexprs) checkHarmonizeTwo(nexprs, se.exprs) ## names on rownames nexprs <- exprs rnms <- rownames(nexprs) names(rnms) <- letters[seq(1, length(rnms))] rownames(nexprs) <- rnms checkHarmonizeOne(nexprs) checkHarmonizeTwo(nexprs, se.exprs) } se.exprs <- matrix(0, 5, 2) exprs <- matrix(0, 5, 2) dimnames(exprs) <- list(LETTERS[1:5], letters[1:2]) dimnames(se.exprs) <- NULL checkCreation(exprs, se.exprs) dimnames(se.exprs) <- list(LETTERS[1:5], NULL) checkCreation(exprs, se.exprs) dimnames(se.exprs) <- list(NULL, letters[1:2]) checkCreation(exprs, se.exprs) ## errors dimnames(se.exprs) <- list(letters[1:5], letters[1:2]) checkException(checkCreation(exprs, se.exprs), silent=TRUE) dimnames(se.exprs) <- list(LETTERS[1:5], LETTERS[1:2]) checkException(checkCreation(exprs, se.exprs), silent=TRUE) dimnames(se.exprs) <- list(letters[1:5], LETTERS[1:2]) checkException(checkCreation(exprs, se.exprs), silent=TRUE) } testExprsReplacement <- function() { exprs <- se.exprs <- matrix(1:50, 10, 5) eset <- ExpressionSet(list2env(list(exprs=exprs, se.exprs=se.exprs))) exprs(eset) <- exprs(eset) checkTrue(validObject(eset)) ## shuffled names ok exprs(eset) <- exprs(eset)[sample(rownames(eset)), sample(colnames(eset))] checkTrue(validObject(eset)) checkException({ exprs(eset) <- exprs(eset)[, 1:3] }, silent=TRUE) checkException({ exprs(eset) <- exprs(eset)[, c(1:4, 1)] }, silent=TRUE) } Biobase/inst/unitTests/test_NChannelSet.R0000644000175200017520000002301414516003524021443 0ustar00biocbuildbiocbuildtestNew <- function() { ## default constructor obj <- new("NChannelSet") checkTrue(length(channelNames(obj))==0) } testNew2 <- function() { ## assayData from arguments not matching slots obj <- new("NChannelSet", R=matrix(0,10,5), G=matrix(0,10,5)) checkTrue(all(c("R", "G") %in% channelNames(obj))) checkTrue(all(dim(obj)==c(10,5))) } testNew3 <- function() { ## explicit assayData, infered phenoData obj <- new("NChannelSet", assayData=assayDataNew( R=matrix(0,10,5), G=matrix(1,10,5))) checkTrue(all(c("R", "G") %in% channelNames(obj))) checkTrue(all(c(10,5)==dim(obj))) obj <- new("NChannelSet", R=matrix(0,10,5, dimnames=list(NULL, LETTERS[1:5])), G=matrix(0,10,5, dimnames=list(NULL, letters[1:5]))) checkTrue(all(c("R", "G") %in% channelNames(obj))) checkTrue(all(c(10,5)==dim(obj))) obj <- new("NChannelSet", R=matrix(0,10,5, dimnames=list(NULL, LETTERS[1:5])), G=matrix(0,10,5)) checkTrue(all(c("R", "G") %in% channelNames(obj))) checkTrue(all(c(10,5)==dim(obj))) obj <- new("NChannelSet", R=matrix(0,10,5), G=matrix(0,10,5, dimnames=list(NULL, LETTERS[1:5]))) checkTrue(all(c("R", "G") %in% channelNames(obj))) checkTrue(all(c(10,5)==dim(obj))) } testNew4 <- function() { ## no assayData, zero-row phenoData data <- data.frame(x=numeric(), y=numeric(), z=numeric()) varMetadata <- data.frame(labelDescription=character(ncol(data)), channel=factor(rep("_ALL_", ncol(data)))) phenoData <- new("AnnotatedDataFrame", data=data, varMetadata=varMetadata) checkTrue(validObject(new("NChannelSet", phenoData=phenoData))) } testNew5 <- function() { ## explicit assayData, phenoData R <- matrix(0, 10, 3, dimnames=list(NULL, LETTERS[1:3])) G <- matrix(1, 10, 3, dimnames=list(NULL, LETTERS[1:3])) assayData <- assayDataNew(R=R, G=G) data <- data.frame(x=numeric(ncol(R)), y=numeric(ncol(R)), z=numeric(ncol(R))) varMetadata <- data.frame(labelDescription=character(ncol(data)), channel=factor(rep("_ALL_", ncol(data)), levels=c("R", "G", "_ALL_"))) phenoData <- new("AnnotatedDataFrame", data=data, varMetadata=varMetadata) obj <- new("NChannelSet", assayData=assayData, phenoData=phenoData) checkTrue(nrow(varMetadata)==ncol(data)) checkTrue(all(varMetadata(obj)[["channel"]] == "_ALL_")) } testNew5a <- function() { ## explicit assayData, phenoData; no names R <- matrix(0, 10, 5) G <- matrix(1, 10, 5) assayData <- assayDataNew(R=R, G=G) data <- data.frame(x=numeric(ncol(R))) varMetadata <- data.frame(labelDescription=character(ncol(data)), channel=factor( rep("__ALL__", ncol(data)), levels=c("R", "G", "_ALL_"))) phenoData <- new("AnnotatedDataFrame", data=data, varMetadata=varMetadata) obj <- new("NChannelSet", assayData=assayData, phenoData=phenoData) } testNew6 <- function() { ## silently add 'channel' to varMetadata R <- matrix(0, 10, 5) G <- matrix(1, 10, 5) assayData <- assayDataNew(R=R, G=G) data <- data.frame(x=numeric(ncol(R))) phenoData <- new("AnnotatedDataFrame", data=data) obj <- new("NChannelSet", assayData=assayData, phenoData=phenoData) checkTrue(validObject(obj)) varMetadata <- data.frame(labelDescription=character(ncol(data))) phenoData <- new("AnnotatedDataFrame", data=data) obj <- new("NChannelSet", assayData=assayData, phenoData=phenoData) checkTrue(validObject(obj)) } testAssayDataGets <- function() { assayData <- assayDataNew(R = matrix(0, 10, 5), G = matrix(1,10,5)) obj <- NChannelSet(assayData = assayData) exp <- -1 * assayData(obj)[["G"]] assayDataElement(obj, "G") <- exp checkIdentical(exp, assayData(obj)[["G"]]) exp <- assayData(obj)[["R"]] assayDataElement(obj, "G") <- NULL checkIdentical("R", channelNames(obj)) checkIdentical("R", assayDataElementNames(obj)) checkIdentical(exp, assayData(obj)[["R"]]) } testDifferentSampleNames <- function() { ## channels have different identifiers assayData <- assayDataNew(R = matrix(0,10,5, dimnames=list(NULL, LETTERS[1:5])), G = matrix(1,10,5, dimnames=list(NULL, letters[1:5]))) obj <- new("NChannelSet", assayData = assayData) checkTrue( all(sampleNames(obj)[["R"]] == LETTERS[1:5]) && all(sampleNames(obj)[["G"]] == letters[1:5]) ) } testSampleNamesUpdate <- function() { assayData <- assayDataNew(R = matrix(0,10,5), G = matrix(1,10,5)) obj <- new("NChannelSet", assayData = assayData) sampleNames(obj) <- list(R=LETTERS[1:5]) checkTrue(validObject(obj)) checkTrue(all(sampleNames(obj)[["R"]] == LETTERS[1:5])) sampleNames(obj) <- list(R=LETTERS[5:1], G=letters[5:1]) checkTrue(validObject(obj)) checkTrue(all(sampleNames(obj)[["R"]] == LETTERS[5:1]) && all(sampleNames(obj)[["G"]] == letters[5:1])) ## drop to character when smaple names identic sampleNames(obj) <- LETTERS[1:5] checkIdentical(LETTERS[1:5], sampleNames(obj)) checkIdentical(list(G=LETTERS[1:5], R=LETTERS[1:5]), eapply(assayData(obj), colnames)) checkException(sampleNames(obj) <- list(LETTERS[1:5]), silent=TRUE) # unnamed repleacement checkException(sampleNames(obj) <- list(X=LETTERS[1:5]) , silent=TRUE) # misnamed repleacement } testSelectChannels <- function() { obj <- new("NChannelSet", assayData=assayDataNew( R=matrix(0,10,5), G=matrix(1,10,5))) objR <- selectChannels(obj, "R") checkTrue(channelNames(objR) == "R") checkIdentical(dim(obj), dim(objR)) objRG <- selectChannels(obj, c("R", "G")) checkTrue(all(c("R", "G") %in% channelNames(objRG))) checkIdentical(dim(obj), dim(objRG)) checkException(selectChannels(obj, c("G", "G")), silent=TRUE) } testSelectChannelsCommonPhenoData <- function() { obj <- new("NChannelSet", assayData=assayDataNew( R=matrix(0,10,5), G=matrix(0,10,5)), phenoData=new("AnnotatedDataFrame", data=data.frame( r=letters[1:5], g=LETTERS[1:5], both=1:5), varMetadata=data.frame( labelDescription=c( "r data", "g data", "both data"), channel=factor( c("R", "G", "_ALL_"))))) objR <- selectChannels(obj, "R") checkIdentical("R", channelNames(objR)) checkTrue(all(c("r", "both") %in% names(pData(objR)) & !"g" %in% names(pData(objR)))) checkIdentical(c("R", "_ALL_"), levels(varMetadata(objR)[["channel"]])) objG <- selectChannels(obj, "G") checkIdentical("G", channelNames(objG)) checkTrue(all(c("g", "both") %in% names(pData(objG)) & !"r" %in% names(pData(objG)))) checkIdentical(c("G", "_ALL_"), levels(varMetadata(objG)[["channel"]])) objRG <- selectChannels(obj, c("R", "G")) checkTrue(all(c("R", "G") %in% channelNames(objRG))) checkTrue(all(c("r", "g", "both") %in% names(pData(objRG)))) checkTrue(all(c("R", "G") %in% levels(varMetadata(objRG)[["channel"]]))) } testChannel <- function() { obj <- new("NChannelSet", assayData=assayDataNew( R=matrix(1,10,5), G=matrix(2,10,5)), phenoData=new("AnnotatedDataFrame", data=data.frame( r=letters[1:5], g=LETTERS[1:5], both=1:5), varMetadata=data.frame( labelDescription=c( "r data", "g data", "both data"), channel=factor( c("R", "G", "_ALL_"))))) robj <- channel(obj, "R") checkTrue(validObject(robj)) checkTrue(all(varLabels(robj) %in% c("r", "both"))) checkIdentical(assayDataElementNames(robj), "exprs") gobj <- channel(obj, "G") checkTrue(validObject(gobj)) checkTrue(all(varLabels(gobj) %in% c("g", "both"))) checkIdentical(assayDataElementNames(gobj), "exprs") } testChannelNames_replace <- function() { obj <- NChannelSet(R=matrix(-1, 5, 5), G=matrix(1, 5, 5)) checkIdentical(c("G", "R"), channelNames(obj)) channelNames(obj) <- c(Gn="G", Rd="R") ## rename checkIdentical(c("Gn", "Rd"), channelNames(obj)) channelNames(obj) <- c("Rd", "Gn") ## reorder checkIdentical(c("Rd", "Gn"), channelNames(obj)) checkTrue(all(assayData(obj)[["Gn"]] == 1)) exp <- "'value' elements must include all channelNames()" obs <- tryCatch(channelNames(obj) <- "X", error=conditionMessage) checkIdentical(exp, obs) obs <- tryCatch(channelNames(obj) <- c(X="Gn"), error=conditionMessage) checkIdentical(exp, obs) exp <- "duplicated channelNames are not allowed" obs <- tryCatch(channelNames(obj) <- c(X="Gn", X="Rd"), error=conditionMessage) checkIdentical(exp, obs) } Biobase/inst/unitTests/test_SnpSet.R0000644000175200017520000000110414516003524020511 0ustar00biocbuildbiocbuildtestSnpSetAccessors <- function() { set.seed(1) nms <- list(paste("rs", 1:100, sep="_"), LETTERS[1:10]) m <- matrix(runif(1000), 100, dimnames=nms) n <- matrix(runif(1000), 100, dimnames=nms) sset <- new("SnpSet", call=m, callProbability=n) checkEquals(m, snpCall(sset)) checkEquals(n, snpCallProbability(sset)) m <- matrix(runif(1000), 100, dimnames=nms) n <- matrix(runif(1000), 100, dimnames=nms) snpCall(sset) <- m snpCallProbability(sset) <- n checkEquals(m, snpCall(sset)) checkEquals(n, snpCallProbability(sset)) } Biobase/inst/unitTests/test_UpdateObject.R0000644000175200017520000001361614516003524021661 0ustar00biocbuildbiocbuildtestUpdateObjectToDefaults <- function() { x <- 1:10 checkTrue(identical(1:10, updateObjectTo(x, 10:1))) x <- as.numeric(1:10) checkTrue(identical(as.integer(1:10), updateObjectTo(x, integer()))) checkTrue(!identical(as.numeric(1:10), updateObjectTo(x, integer()))) } testUpdateObjectToSetClass <- function() { setClass("A", representation(x="numeric"), prototype=prototype(x=1:10), where=.GlobalEnv) a <- new("A") a1 <- new("A",x=10:1) checkTrue(identical(a, updateObjectTo(a, a1))) setClass("B", representation(x="numeric"), where=.GlobalEnv) b <- new("B") checkException(updateObjectTo(a, b), silent=TRUE) setAs("A", "B", function(from) { b <- new("B") b@x <- from@x b }, where=.GlobalEnv) obj <- updateObjectTo(a,b) checkTrue(class(obj)=="B") checkIdentical(obj@x, a@x) removeMethod("coerce", c("A","B"), where=.GlobalEnv) removeClass("B", where=.GlobalEnv) removeClass("A", where=.GlobalEnv) } testUpdateExpressionSet <- function() { opts <- options() options(warn=-1) obj <- new("ExpressionSet") checkTrue(all.equal(obj, updateObject(obj))) checkTrue(!identical(new("ExpressionSet"), updateObject(obj))) # different environments obj <- new("ExpressionSet", storage.mode="list") checkTrue(identical(obj, updateObject(obj))) checkTrue(identical(new("ExpressionSet", storage.mode="list"), updateObject(obj))) # same class -- list data(sample.ExpressionSet) classVersion(sample.ExpressionSet)["eSet"] <- "1.0.0" checkException(validObject(sample.ExpressionSet), silent=TRUE) suppressMessages(obj <- updateObject(sample.ExpressionSet)) checkTrue(isVersioned(obj)) checkTrue(all(isCurrent(obj))) checkTrue(validObject(obj)) checkTrue(identical(lapply(ls(assayData(obj), all=TRUE), function(x) x), lapply(ls(assayData(sample.ExpressionSet),all=TRUE), function(x) x))) checkTrue(identical(annotation(obj), annotation(sample.ExpressionSet))) suppressMessages(obj1a <- updateObjectTo(sample.ExpressionSet, new("ExpressionSet"))) ## next better written as(sample.ExpressionSet, "MultiSet") suppressMessages(obj1b <- updateObjectTo(sample.ExpressionSet, new("MultiSet"))) obj2 <- updateObject(obj) # stop after eSet options(opts) } testUpdateESetMisc <- function() { opts <- options() options(warn=-1) idx <- c("phenoData", "experimentData", "featureData") fun <- function(nm) isS4(eval(parse(text=paste(nm,"(obj)", sep="")))) load(system.file("unitTests", "VersionedClass_data", "devel", "sample.exprSet.rda", package="Biobase")) suppressMessages(obj <- as(sample.exprSet, "ExpressionSet")) checkTrue(validObject(obj, complete=TRUE)) checkTrue(all(sapply(idx, fun))) load(system.file("unitTests", "VersionedClass_data", "devel", "sample.eSet.rda", package="Biobase")) obj <- as(sample.eSet, "MultiSet") checkTrue(validObject(obj, complete=TRUE)) checkTrue(all(sapply(idx, fun))) load(system.file("unitTests", "VersionedClass_data", "devel", "eset.rda", package="Biobase")) obj <- as(eset, "ExpressionSet") checkTrue(validObject(obj, complete=TRUE)) checkTrue(all(sapply(idx, fun))) options(opts) } testUpdateMiscPreviousInstances <- function() { opts <- options("warn") options(warn=-1) on.exit(options(opts)) rda <- dir(system.file("unitTests", "VersionedClass_data", package="Biobase"), full.names=TRUE, recursive=TRUE, pattern="^([^(ExpressionSet)]).*\\.Rda") ok <- sapply(rda, function(nm) { env <- new.env(parent=emptyenv()) load(nm, env) tryCatch({ eapply(env, function(elt) { suppressMessages(obj <- updateObject(elt)) checkTrue(isS4(obj)) checkTrue(validObject(obj, complete=TRUE)) }) TRUE }, error=function(...) FALSE) }) checkTrue(all(ok), msg=sprintf("failed: '%s'", paste(rda[!ok], collapse="' '"))) } testUpdatePreviousExpressionSet <- function() { opts <- options("warn") options(warn=-1) on.exit(options(opts)) rda <- dir(system.file("unitTests", "VersionedClass_data", package="Biobase"), full.names=TRUE, recursive=TRUE, pattern="^ExpressionSet.*\\.Rda") ok <- sapply(rda, function(nm) { env <- new.env(parent=emptyenv()) load(nm, env) tryCatch({ eapply(env, function(elt) { suppressMessages(obj <- updateObject(elt)) checkTrue(validObject(obj, complete=TRUE)) ## S4 idx <- c("phenoData", "experimentData", "featureData") ok <- sapply(idx, function(nm) { isS4(eval(parse(text=paste(nm,"(obj)", sep="")))) }) checkTrue(all(ok)) ## content checkIdentical(exprs(obj), slot(elt, "assayData")[["exprs"]]) checkIdentical(pData(phenoData(obj)), slot(slot(elt, "phenoData"), "data")) checkIdentical(varMetadata(phenoData(obj)), slot(slot(elt, "phenoData"), "varMetadata")) nms <- names(getSlots("MIAME")) nms <- nms[!nms %in% ".__classVersion__"] lapply(nms, function(nm) checkIdentical(slot(experimentData(obj), nm), slot(slot(elt, "experimentData"), nm))) }) TRUE }, error=function(...) FALSE) }) checkTrue(all(ok), msg=sprintf("failed: '%s'", paste(rda[!ok], collapse="' '"))) } Biobase/inst/unitTests/test_VersionedClass.R0000644000175200017520000001162714516003524022234 0ustar00biocbuildbiocbuildnonvirtualClasses <- NULL instanceDir <- system.file("unitTests", "VersionedClass_data", package="Biobase") .setUp <- function() { nms <- ls(getNamespace("Biobase"),all=TRUE) classes <- gsub(".__C__", "", nms[grep(".__C__", nms)]) classes <- classes[!classes %in% "phenoData"] isVirtual <- sapply(classes, function(nm) getClass(nm)@virtual) nonvirtualClasses <<- classes[!isVirtual] } testNewVersioned <- function() { new("Versioned") new("VersionedBiobase") ## Biobase:::.unversionedObj v <- new("Versioned", versions=list(x="1.0.0")) checkTrue(classVersion(v)["x"]=="1.0.0") ## use class definition defined in RUnit.R ## a <- new("A") ## checkTrue(all(classVersion(a) == classVersion(new("VersionedBiobase", versions=list(A="1.0.1"))))) ## checkTrue(all(a@x==10:1)) ## a <- new("A", x=1:10) ## checkTrue(all(classVersion(a) == classVersion(new("VersionedBiobase", versions=list(A="1.0.1"))))) ## checkTrue(all(a@x==1:10)) ## a <- new("A", x=1:10, versions=list(x="1.0.1")) ## checkTrue(all(a@x==1:10)) ## checkTrue(all(classVersion(a) == classVersion(new("VersionedBiobase", versions=list(A="1.0.1",x="1.0.1"))))) } testIsVersioned <- function() { checkTrue(isVersioned(new("VersionedBiobase"))) checkTrue(isVersioned("VersionedBiobase")) checkTrue(!isVersioned(1:10)) } testClassVersion <- function() { classVersion(new("Versioned")) classVersion(new("VersionedBiobase")) checkTrue(is(classVersion(new("VersionedBiobase")),"Versions")) checkTrue(all(classVersion("VersionedBiobase") == classVersion(new("VersionedBiobase")))) } testClassVersionReplace <- function() { ref <- obj <- new("VersionedBiobase") classVersion(obj)["x"] <- "1.0.0" checkTrue(all(classVersion(obj)[names(classVersion(ref))] == classVersion(ref))) checkTrue(classVersion(obj)["x"] == "1.0.0") y <- new("Versions", y="1.0.1") classVersion(obj)[names(y)] <- y checkTrue(all(classVersion(obj)[names(classVersion(ref))] == classVersion(ref))) checkTrue(classVersion(obj)["x"] == "1.0.0") checkTrue(classVersion(obj)["y"] == "1.0.1") checkTrue(classVersion(obj)["y"] != "1.0.0") obj <- ref classVersion(obj) <- y checkTrue(classVersion(obj)["y"] == "1.0.1") } testClassVersionSubset <- function() { obj <- new("Versions", x="1.0.0") checkTrue(obj[1]=="1.0.0") checkTrue(obj["x"]=="1.0.0") checkException(obj["y"], silent=TRUE) } testClassVersionCompare <- function() { obj <- new("Versions", x="1.0.0", y="2.0.1") checkTrue(all(obj == c(x="1.0.0", y="2.0.1"))) checkTrue(all(obj == c(y="2.0.1", x="1.0.0")), msg="versions in different order") checkTrue(!any(obj == c(y="1.0.0", x="2.0.1")), msg="incorrectly named elements") checkTrue(!all(obj == c(y="1.0.0", x="1.0.0")), msg="one element incorrect elements") checkException(all(obj == c(x="1.0.0", z="2.0.1")), msg="different version elements", silent=TRUE) checkException(obj == c(x="1.0.0"), msg="different version lengths", silent=TRUE) ## as above, but comparing version objects checkTrue(all(obj == new("Versions", x="1.0.0", y="2.0.1"))) checkTrue(all(obj == new("Versions", y="2.0.1", x="1.0.0"))) checkTrue(!any(obj == new("Versions", x="2.0.1", y="1.0.0"))) checkTrue(!all(obj == new("Versions", x="1.0.0", y="1.0.0"))) checkException(all(obj == new("Versions", x="1.0.0", z="2.0.1")), msg="different version elements", silent=TRUE) checkException(obj == new("Versions", x="1.0.0"), msg="different version lengths", silent=TRUE) } testIsCurrent <- function() { checkTrue(is.na(isCurrent(1:10))) checkTrue(all(isCurrent(new("VersionedBiobase")))) } testDevelInstanceArchived <- function() { ## archived devel instance? instances <- sub(".Rda", "", list.files(path=file.path(instanceDir, "devel"), pattern=".*.Rda")) checkTrue(all(nonvirtualClasses %in% instances), msg=paste(nonvirtualClasses[!nonvirtualClasses %in% instances], collapse=" ")) } testDevelInstanceIsCurrent <- function() { ## overall class is current instanceEnv <- new.env(parent=emptyenv()) lapply(nonvirtualClasses, function(cls) { cls <- paste(cls, ".Rda", sep="") load(file.path(instanceDir, "devel", cls), instanceEnv) }) instances <- sub(".Rda", "", list.files(path=file.path(instanceDir, "devel"), pattern=".*.Rda")) instances <- instances[!instances %in% "Versioned"] current <- sapply(instances, function(obj) { vers <- isCurrent(get(obj, env=instanceEnv))[c("S4", obj)] all(vers[!is.na(vers)]) }) currentv <- current[!is.na(current)] checkTrue(all(currentv), msg=paste(names(currentv)[!currentv], collapse=" ")) } Biobase/inst/unitTests/test_cache.R0000644000175200017520000000166714516003524020356 0ustar00biocbuildbiocbuildtest_cache_basic <- function() { pre <- "tmp_R_TEST_" cfile <- file.path(tempdir(), paste(pre, "theVar.RData", sep="")) on.exit(file.remove(cfile), add=TRUE) expensive <- function(n) n + 1 cache(theVar <- expensive(5), dir=tempdir(), prefix=pre) checkEquals(6, theVar) checkTrue(file.exists(cfile)) ## call again remove(theVar) cache(theVar <- expensive(5), dir=tempdir(), prefix=pre) checkEquals(6, theVar) } test_cache_infunc <- function() { pre <- "tmp_R_TEST_" cfile <- file.path(tempdir(), paste(pre, "theVar.RData", sep="")) on.exit(file.remove(cfile), add=TRUE) expensive <- function(n) n + 1 aFunc <- function() { m <- 1 cache(theVar <- expensive(m), dir=tempdir(), prefix=pre) theVar } val <- aFunc() checkEquals(2, val) checkTrue(file.exists(cfile)) ## call again remove(val) val <- aFunc() checkEquals(2, val) } Biobase/inst/unitTests/test_checkClass.R0000644000175200017520000000026414516003524021346 0ustar00biocbuildbiocbuildtestCheckData_S3ExtendedDataFrame<- function() { df <- data.frame(foo=1:2) class(df) = c("bar", class(df)) Biobase:::checkClass(df, "data.frame") checkTrue(TRUE) } Biobase/inst/unitTests/test_combine.R0000644000175200017520000000076714516003524020727 0ustar00biocbuildbiocbuildtestCombineOne <- function() { data(sample.ExpressionSet) checkIdentical(sample.ExpressionSet, combine(sample.ExpressionSet)) } testCombineTwo <- function() { data(sample.ExpressionSet) x <- sample.ExpressionSet checkTrue(all.equal(x, combine(x[,1:5],x[,seq(6, ncol(x))]))) } testCombineThree <- function() { data(sample.ExpressionSet) x <- sample.ExpressionSet y <- combine(x[,1:5],x[, 6:10], x[,seq(11, ncol(x))]) checkTrue(all.equal(x, y)) } Biobase/inst/unitTests/test_copyEnv.R0000644000175200017520000000062314516003524020725 0ustar00biocbuildbiocbuildbasic_test <- function() { env1 <- new.env(hash=TRUE, parent=emptyenv()) env1$a <- 1:3 env1$b <- "foo" env1[[".hidden"]] <- 3.1 z <- copyEnv(env1) checkEquals(env1$a, z$a) checkEquals(env1$b, z$b) checkTrue(!exists(".hidden", z)) z <- copyEnv(env1, all.names=TRUE) checkEquals(env1[[".hidden"]], z[[".hidden"]]) env1$a[1] <- 10L checkEquals(1L, z$a[1]) } Biobase/inst/unitTests/test_esApply.R0000644000175200017520000000406014516003524020716 0ustar00biocbuildbiocbuildtest_esApply_base <- function() { data(sample.ExpressionSet) target <- with(pData(sample.ExpressionSet), apply(exprs(sample.ExpressionSet), 1, sum)) current <- esApply(sample.ExpressionSet, 1, sum) checkIdentical(target, current) } test_esApply_lexical_scope <- function() { data(sample.ExpressionSet) f <- function() { x <- 0 function(y) x <<- x + 1 } target <- with(pData(sample.ExpressionSet), apply(exprs(sample.ExpressionSet), 1, f())) current <- esApply(sample.ExpressionSet, 1, f()) checkIdentical(target, current) } test_esApply_local_scope <- function() { data(sample.ExpressionSet) target <- with(pData(sample.ExpressionSet), apply(exprs(sample.ExpressionSet), 1, function(x) { xx <- split(x, sex) mean(xx[[1]]) - mean(xx[[2]]) })) current <- esApply(sample.ExpressionSet, 1, function(x) { xx <- split(x, sex) mean(xx[[1]]) - mean(xx[[2]]) }) checkIdentical(target, current) f <- function(x) { xx <- split(x, sex) mean(xx[[1]]) - mean(xx[[2]]) } current <- esApply(sample.ExpressionSet, 1, f) checkIdentical(target, current) f <- function(x, s) { xx <- split(x, s) mean(xx[[1]])-mean(xx[[2]]) } sex=sample.ExpressionSet[["sex"]] current <- esApply(sample.ExpressionSet, 1, f, s=sex) checkIdentical(target, current) } test_esApply_global_args <- function() { data(sample.ExpressionSet) f <- function(x, t) t*sum(x) target <- with(pData(sample.ExpressionSet), apply(exprs(sample.ExpressionSet), 1, f, 10)) current <- esApply(sample.ExpressionSet, 1, f, 10) checkIdentical(target, current, msg="unnamed global arg") current <- esApply(sample.ExpressionSet, 1, f, t=10) checkIdentical(target, current, msg="named global arg") } Biobase/inst/unitTests/test_subListExtract.R0000644000175200017520000000356314516003524022270 0ustar00biocbuildbiocbuildlibrary("Biobase") ## simple test list innerL <- list(i=4L, d=1.23, l=FALSE, n=NULL, na=NA, s="foo", c=3+4i, r=charToRaw("g")) len <- 20L L <- rep(list(innerL), len) names(L) <- paste("X", 1:len, sep="") ## unit tests for basic API test_extract_all_types <- function() { for (w in names(innerL)) { if (is.null(innerL[[w]])) want <- vector(mode="list", length=len) else want <- as.list(rep(innerL[[w]], len)) names(want) <- names(L) checkEquals(want, subListExtract(L, w)) } } test_simplify_extract_all_types <- function() { for (w in names(innerL)) { if (is.null(innerL[[w]])) next else want <- rep(innerL[[w]], len) names(want) <- names(L) checkEquals(want, subListExtract(L, w, simplify=TRUE), msg=paste("extracting", w)) } } test_basic_extract <- function() { want <- as.list(rep(4L, len)) names(want) <- names(L) checkEquals(want, subListExtract(L, "i")) checkEquals(names(L), names(subListExtract(L, "i"))) checkEquals(NULL, names(subListExtract(L, "i", keep.names=FALSE))) } test_simplify_extract <- function() { want <- rep(4L, len) names(want) <- names(L) checkEquals(want, subListExtract(L, "i", simplify=TRUE)) } test_simplify_fails_extract <- function() { L[[1]] <- list(d=matrix(1:10, ncol=2)) checkException(subListExtract(L, "i", simplify=TRUE), silent=TRUE) } test_extract_bad_inner <- function() { L[[3]] <- list(foo=1) checkException(subListExtract(L, "i"), silent=TRUE) } test_extract_from_empty <- function() { checkEquals(list(), subListExtract(list(), "foo")) ## but you can't simplify checkException(subListExtract(list(), "foo", simplify=TRUE)) } Biobase/inst/unitTests/test_unsaveSetSlot.R0000644000175200017520000000377014516003524022127 0ustar00biocbuildbiocbuild## Use of unsafeSetSlot is currently 'safe' inside a repelacement ## method, because under specific conditions the object is duplicated ## (referenced exactly once) on the way in. This test tries to catch ## any changes to R that eliminate this duplication, and hence ## invalidates the unsafe slot assignments used in Biobase testUnsafeSetSlotInSlotAssignment1 <- function() { ## calls like set(x) <- value setClass("A", representation=representation(x="numeric"), where=.GlobalEnv) on.exit(removeClass("A", .GlobalEnv)) setGeneric("set<-", function(object, value) standardGeneric("set<-"), where=.GlobalEnv) setReplaceMethod("set", signature=signature(object="A"), function(object, value) { Biobase:::unsafeSetSlot(object, "x", value) }, where=.GlobalEnv) on.exit(removeMethod("set<-", c(object="A"), .GlobalEnv)) on.exit(removeGeneric("set<-", .GlobalEnv)) b <- a <- new("A", x=1:10) set(a) <- 10:1 checkIdentical(a@x, 10:1) checkIdentical(b@x, 1:10) } testUnsafeSetSlotInSlotAssignment2 <- function() { ## calls like x <- "set<-"(x, value) setClass("A", representation=representation(x="numeric"), where=.GlobalEnv) on.exit(removeClass("A", .GlobalEnv)) setGeneric("set<-", function(object, value) standardGeneric("set<-"), where=.GlobalEnv) setReplaceMethod("set", signature=signature(object="A"), function(object, value) { object@x <- value Biobase:::unsafeSetSlot(object, "x", value) }, where=.GlobalEnv) on.exit(removeMethod("set<-", c(object="A"), .GlobalEnv)) on.exit(removeGeneric("set<-", .GlobalEnv)) b <- a <- new("A", x=1:10) a <- "set<-"(a, 10:1) checkIdentical(a@x, 10:1) checkIdentical(b@x, 1:10) } Biobase/inst/unitTests/utilities.R0000644000175200017520000000235114516003524020256 0ustar00biocbuildbiocbuild## these assume we're in Biobase/inst/unitTests createCurrentInstances <- function(instanceDir = "VersionedClass_data") { require("Biobase") classes <- getClasses("package:Biobase") isVirtual <- sapply(classes, function(nm) getClass(nm)@virtual) nonvirtualClasses <- classes[!isVirtual] instances <- sub(".Rda", "", list.files(path=file.path(instanceDir, "devel"), pattern=".*.Rda")) need <- nonvirtualClasses[!nonvirtualClasses %in% instances] if (length(need)!=0) { cat("need:", need, "\n") lapply(need, function(cls) { cat("creating", cls, "\n") assign(cls, new(cls)) save(list=cls, file=file.path(instanceDir, "devel", paste(cls, ".Rda", sep=""))) }) } else cat("no instances need creating\n") } createComponentClasses <- function(ExpressionSet, vers="devel", instanceDir = "VersionedClass_data") { MIAME <- experimentData(ExpressionSet) AnnotatedDataFrame <- phenoData(ExpressionSet) cat("creating MIAME\n") save(MIAME, file=file.path(instanceDir, vers, "MIAME.Rda")) cat("creating AnnotatedDataFrame\n") save(AnnotatedDataFrame, file=file.path(instanceDir, vers, "AnnotatedDataFrame.Rda")) } Biobase/man/0000755000175200017520000000000014516003524013713 5ustar00biocbuildbiocbuildBiobase/man/Aggregate.Rd0000644000175200017520000000230214516003524016065 0ustar00biocbuildbiocbuild\name{Aggregate} \alias{Aggregate} \title{A Simple Aggregation Mechanism. } \description{ Given an environment and an aggregator (an object of class \code{aggregate} simple aggregations are made. } \usage{ Aggregate(x, agg) } \arguments{ \item{x}{ The data to be aggregated. } \item{agg}{The aggregator to be used. } } \details{ Given some data, \code{x} the user can accumulate (or aggregate) information in \code{env} using the two supplied functions. See the accompanying documentation for a more complete example of this function and its use. } \value{ No value is returned. This function is evaluated purely for side effects. The symbols and values in \code{env} are altered. } \author{R. Gentleman } \seealso{ \code{\link{new.env}}, \code{\link{class:aggregator}} } \examples{ agg1 <- new("aggregator") Aggregate(letters[1:10], agg1) # the first 10 letters should be symbols in env1 with values of 1 Aggregate(letters[5:11], agg1) # now letters[5:10] should have value 2 bb <- mget(letters[1:11], env=aggenv(agg1), ifnotfound=NA) t1 <- as.numeric(bb); names(t1) <- names(bb) t1 # a b c d e f g h i j k # 1 1 1 1 2 2 2 2 2 2 1 } \keyword{programming} \keyword{methods} Biobase/man/Biobase-package.Rd0000644000175200017520000000236414516003524017144 0ustar00biocbuildbiocbuild\name{Biobase-package} \alias{Biobase-package} \alias{Biobase} \docType{package} \title{Biobase Package Overview} \description{ Biobase Package Overview } \details{ Important data classes: \code{\link{ExpressionSet}}, \code{\link{AnnotatedDataFrame}} \code{\link{MIAME}}. Full help on methods and associated functions is available from within class help pages. Additional data classes: \code{\link{eSet}}, \code{\link{MIAxE}}, \code{\link{MultiSet}}. Additional manipulation and data structuring classes: \code{\link{Versioned}}, \code{\link{VersionedBiobase}}, \code{\link{aggregator}}, \code{\link{container}}. Vignette routines: \code{\link{openVignette}}, \code{\link{getPkgVigs}}, \code{\link{openPDF}}. Package manipulation functions: \code{\link{createPackage}} and \code{\link{package.version}} Data sets: \code{\link{aaMap}}, \code{\link{sample.ExpressionSet}}, \code{\link{geneData}}. Introductory information is available from vignettes, type \code{openVignette()}. Full listing of documented articles is available in HTML view by typing \code{help.start()} and selecting \code{Biobase} package from the \code{Packages} menu or via \code{library(help="Biobase")}. } \author{ O. Sklyar } \keyword{package} Biobase/man/ScalarObject-class.Rd0000644000175200017520000000227114516003524017643 0ustar00biocbuildbiocbuild\name{ScalarObject-class} \docType{class} \alias{ScalarObject-class} \alias{ScalarCharacter-class} \alias{ScalarLogical-class} \alias{ScalarInteger-class} \alias{ScalarNumeric-class} \alias{mkScalar} \alias{show,ScalarObject-method} \alias{show,ScalarCharacter-method} \title{Utility classes for length one (scalar) objects} \usage{ mkScalar(obj) } \arguments{ \item{obj}{An object of type \code{character}, \code{logical}, \code{integer}, or \code{double}} } \description{ These classes represent scalar quantities, such as a string or a number and are useful because they provide their own validity checking. The classes \code{ScalarCharacter}, \code{ScalarLogical}, \code{ScalarInteger}, and \code{ScalarNumeric} all extend their respective base vector types and can be used interchangeably (except they should always have length one). The \code{mkScalar} factory function provides a convenient way of creating \code{Scalar} objects (see the examples section below). } \author{Seth Falcon} \examples{ v <- list(mkScalar("a single string"), mkScalar(1), mkScalar(1L), mkScalar(TRUE)) sapply(v, class) sapply(v, length) } \keyword{classes} Biobase/man/abstract.Rd0000644000175200017520000000231614516003524016007 0ustar00biocbuildbiocbuild\name{abstract} \alias{abstract} \alias{pubMedIds} \alias{pubMedIds<-} \alias{experimentData} \alias{experimentData<-} \title{Retrieve Meta-data from eSets and ExpressionSets.} \description{ These generic functions access generic data, abstracts, PubMed IDs and experiment data from instances of the \code{\link{eSet-class}} or \code{\link{ExpressionSet-class}}. } \usage{ abstract(object) pubMedIds(object) pubMedIds(object) <- value experimentData(object) experimentData(object) <- value } \arguments{ \item{object}{Object, possibly derived from \code{eSet-class} or \code{MIAME-class}} \item{value}{Value to be assigned; see class of \code{object} (e.g., \code{\link{eSet-class}}) for specifics.} } \value{ \code{abstract} returns a character vector containing the abstract (as in a published paper) associated with \code{object}. \code{pubMedIds} returns a character vector of PUBMED IDs associated with the experiment. \code{experimentData} returns an object representing the description of an experiment, e.g., an object of \code{\link{MIAME-class}} } \author{Biocore} \seealso{\code{\link{ExpressionSet-class}}, \code{\link{eSet-class}}, \code{\link{MIAME-class}}} \keyword{manip} Biobase/man/addVig2Menu.Rd0000644000175200017520000000165114516003524016312 0ustar00biocbuildbiocbuild\name{addVigs2WinMenu} \alias{addVigs2WinMenu} \concept{addVig2Menu} \concept{addVig4Win} \concept{addVig4Unix} \concept{addNonExisting} \concept{addPDF2Vig} \title{Add Menu Items to an Existing/New Menu of Window} \description{ This function adds a menu item for a package's vignettes. } \usage{ addVigs2WinMenu(pkgName) } \arguments{ \item{pkgName}{\code{pkgName} - a character string for the name of an R package} } \details{ The original functions \code{addVig2Menu}, \code{addVig4Win}, \code{addVig4Unix}, \code{addNonExisting}, \code{addPDF2Vig} have been replaced by \code{addVigs2WinMenu}, please use those instead. } \value{ The functions do not return any value. } \author{Jianhua Zhang and Jeff Gentry} \examples{ # Only works for windows now if(interactive() && .Platform$OS.type == "windows" && .Platform$GUI == "Rgui"){ addVigs2WinMenu("Biobase") } } \keyword{interface} Biobase/man/annotatedDataFrameFrom-methods.Rd0000644000175200017520000000245014516003524022212 0ustar00biocbuildbiocbuild\name{annotatedDataFrameFrom-methods} \docType{methods} \alias{annotatedDataFrameFrom} \alias{annotatedDataFrameFrom,AssayData-method} \alias{annotatedDataFrameFrom,matrix-method} \alias{annotatedDataFrameFrom,NULL-method} \title{Methods for Function annotatedDataFrameFrom in Package `Biobase'} \description{ \code{annotatedDataFrameFrom} is a convenience for creating \code{\link{AnnotatedDataFrame}} objects. } \section{Methods}{ Use the method with \code{annotatedDataFrameFrom(object, byrow=FALSE, ...)}; the argument \code{byrow} \emph{must} be specified. \describe{ \item{\code{signature(object="assayData")}}{This method creates an \code{AnnotatedDataFrame} using sample (when \code{byrow=FALSE}) or feature (\code{byrow=TRUE}) names and dimensions of an \code{\link{AssayData}} object as a template.} \item{\code{signature(object="matrix")}}{This method creates an \code{AnnotatedDataFrame} using column (when \code{byrow=FALSE}) or row (\code{byrow=TRUE}) names and dimensions of a \code{\link{matrix}} object as a template.} \item{\code{signature(object="NULL")}}{This method (called with 'NULL' as the object) creates an empty \code{AnnotatedDataFrame}; provides \code{dimLabels} based on value of \code{byrow}.} }} \author{Biocore team} \keyword{methods} Biobase/man/anyMissing.Rd0000644000175200017520000000133214516003524016322 0ustar00biocbuildbiocbuild\name{anyMissing} \alias{anyMissing} \title{Checks if there are any missing values in an object or not} \description{ Checks if there are any missing values in an object or not. } \usage{anyMissing(x=NULL)} \arguments{ \item{x}{A \code{\link[base]{vector}}.} } \value{ Returns \code{\link[base:logical]{TRUE}} if a missing value was detected, otherwise \code{\link[base:logical]{FALSE}}. } \details{ The implementation of this method is optimized for both speed and memory. } \author{Henrik Bengtsson (\url{http://www.braju.com/R/})} \examples{ x <- rnorm(n=1000) x[seq(300,length(x),by=100)] <- NA stopifnot(anyMissing(x) == any(is.na(x))) } \keyword{iteration} \keyword{logic} Biobase/man/assayData.Rd0000644000175200017520000000152214516003524016114 0ustar00biocbuildbiocbuild\name{assayData} \alias{assayData} \alias{assayData<-} \title{Retrieve assay data from eSets and ExpressionSets.} \description{ This generic function accesses assay data stored in an object derived from the \code{\link{eSet}} or \code{\link{ExpressionSet}} class. } \usage{ assayData(object) assayData(object) <- value } \arguments{ \item{object}{Object derived from class eSet} \item{value}{Named list or environment containing one or more matrices with identical dimensions} } \value{ \code{assayData} applied to \code{eSet}-derived classes returns a list or environment; applied to \code{ExpressionSet}, the method returns an environment. See the class documentation for specific details. } \author{Biocore} \seealso{\code{\link{eSet-class}}, \code{\link{ExpressionSet-class}}, \code{\link{SnpSet-class}}} \keyword{manip} Biobase/man/cache.Rd0000644000175200017520000000506614516003524015254 0ustar00biocbuildbiocbuild\name{cache} \alias{cache} \docType{methods} \title{Evaluate an expression if its value is not already cached.} \description{ Cache the evaluation of an expression in the file system. } \usage{ cache(expr, dir=".", prefix="tmp_R_cache_") } \arguments{ \item{expr}{An expression of the form \code{LHS <- RHS}, Where \code{LHS} is a variable name, \code{RHS} is any valid expression, and \code{<-} must be used (\code{=} will not work).} \item{dir}{A string specifying the directory into which cache files should be written (also where to go searching for an appropriate cache file).} \item{prefix}{A string giving the prefix to use when naming and searching for cache files. The default is \code{"tmp_R_cache_"}} } \details{ This function can be useful during the development of computationally intensive workflows, for example in vignettes or scripts. The function uses a cache file in \code{dir} which defaults to the current working directory whose name is obtained by \code{paste(prefix, name, ".RData", sep="")}. When \code{cache} is called and the cache file exists, it is loaded and the object whose name is given on the left of \code{<-} in \code{expr} is returned. In this case, \code{expr} is \emph{not} evaluted. When \code{cache} is called and the cache file does not exist, \code{expr} is evaluted, its value is saved into a cache file, and then its value is returned. The \code{expr} argument must be of the form of \code{someVar <- {expressions}}. That is, the left hand side must be a single symbol name and the next syntactic token must be \code{<-}. To flush the cache and force recomputation, simply remove the cache files. You can use \code{\link{file.remove}} to do this. } \value{ The (cached) value of \code{expr}. } \author{ Wolfgang Huber, \email{huber@ebi.ac.uk} Seth Falcon, \email{sfalcon@fhcrc.org} } \section{Note}{ The first version of this function had a slightly different interface which is no longer functional. The old version has arguments \code{name} and \code{expr} and the intended usage is: \code{foo <- cache("foo", expr)}. } \examples{ bigCalc <- function() runif(10) cache(myComplicatedObject <- bigCalc()) aCopy <- myComplicatedObject remove(myComplicatedObject) cache(myComplicatedObject <- bigCalc()) stopifnot(all.equal(myComplicatedObject, aCopy)) allCacheFiles <- list.files(".", pattern="^tmp_R_cache_.*\\\\.RData$", full.name=TRUE) file.remove(allCacheFiles) } \keyword{manip} \keyword{array} Biobase/man/channel.Rd0000644000175200017520000000135014516003524015611 0ustar00biocbuildbiocbuild\name{channel} \alias{channel} \title{Create a new ExpressionSet instance by selecting a specific channel} \description{ This generic function extracts a specific element from an object, returning a instance of the ExpressionSet class. } \usage{ channel(object, name, ...) } \arguments{ \item{object}{An S4 object, typically derived from class \code{\link{eSet}}} \item{name}{The name of the channel, a (length one) character vector.} \item{...}{Additional arguments.} } \value{ An instance of class \code{\link{ExpressionSet}}. } \author{Biocore} \examples{ obj <- NChannelSet( R=matrix(runif(100), 20, 5), G=matrix(runif(100), 20, 5)) ## G channel as ExpressionSet channel(obj, "G") } \keyword{manip} Biobase/man/channelNames.Rd0000644000175200017520000000274414516003524016605 0ustar00biocbuildbiocbuild\name{channelNames} \alias{channelNames} \alias{channelNames<-} \title{Retrieve and set channel names from object} \description{ This generic function reports or updates the channels in an object. } \usage{ channelNames(object, ...) channelNames(object, ...) <- value } \arguments{ \item{object}{An S4 object, typically derived from class \code{\link{eSet}}} \item{value}{Replacement value, either a character vector (to re-order existing channel names or a named character vector or list (to change channel names from the vector elements to the corresponding names).} \item{...}{Additional argument, not currently used.} } \details{ \code{channelNames} returns the names of the channels in a defined order. Change the order using the replacement method with a permuation of the channel names as \code{value}. Rename channels using the replacement method with a named list, where the vector elements are a permutation of the current channels, with corresponding names the new identifier for the channel. } \value{ \code{character}. } \author{Biocore} \examples{ ## channelNames default to alphabetical order of channels obj <- NChannelSet( R=matrix(runif(100), 20, 5), G=matrix(-runif(100), 20, 5)) channelNames(obj) channelNames(obj) <- c(Gn="G", Rd="R") ## rename channelNames(obj) channelNames(obj) <- c("Rd", "Gn") ## reorder channelNames(obj) all(assayData(obj)[["Gn"]] <= 0) all(assayData(obj)[["Rd"]] >= 0) } \keyword{manip} Biobase/man/class.AnnotatedDataFrame.Rd0000644000175200017520000002141314516003524020771 0ustar00biocbuildbiocbuild\name{AnnotatedDataFrame} \docType{class} \alias{class:AnnotatedDataFrame} \alias{AnnotatedDataFrame} \alias{AnnotatedDataFrame-class} \alias{AnnotatedDataFrame,missing,missing-method} \alias{AnnotatedDataFrame,data.frame,missing-method} \alias{AnnotatedDataFrame,data.frame,data.frame-method} \alias{dimLabels} \alias{dimLabels<-} \alias{[,AnnotatedDataFrame-method} \alias{[[<-,AnnotatedDataFrame-method} \alias{[[,AnnotatedDataFrame-method} \alias{$<-,AnnotatedDataFrame-method} \alias{$,AnnotatedDataFrame-method} \alias{coerce,AnnotatedDataFrame,data.frame-method} \alias{combine,AnnotatedDataFrame,AnnotatedDataFrame-method} \alias{initialize,AnnotatedDataFrame-method} \alias{coerce,data.frame,AnnotatedDataFrame-method} \alias{coerce,phenoData,AnnotatedDataFrame-method} \alias{head.AnnotatedDataFrame} \alias{tail.AnnotatedDataFrame} \alias{dim,AnnotatedDataFrame-method} \alias{dimnames,AnnotatedDataFrame-method} \alias{dimnames<-,AnnotatedDataFrame-method} \alias{dimLabels,AnnotatedDataFrame-method} \alias{dimLabels<-,AnnotatedDataFrame,character-method} \alias{ncol,AnnotatedDataFrame-method} \alias{pData<-,AnnotatedDataFrame,data.frame-method} \alias{pData,AnnotatedDataFrame-method} \alias{varMetadata<-,AnnotatedDataFrame,data.frame-method} \alias{varMetadata,AnnotatedDataFrame-method} \alias{sampleNames<-,AnnotatedDataFrame,ANY-method} \alias{sampleNames,AnnotatedDataFrame-method} \alias{featureNames,AnnotatedDataFrame-method} \alias{featureNames<-,AnnotatedDataFrame-method} \alias{show,AnnotatedDataFrame-method} \alias{updateObject,AnnotatedDataFrame-method} \alias{varLabels<-,AnnotatedDataFrame-method} \alias{varLabels,AnnotatedDataFrame-method} \title{ Class Containing Measured Variables and Their Meta-Data Description. } \description{ An \code{AnnotatedDataFrame} consists of two parts. There is a collection of samples and the values of variables measured on those samples. There is also a description of each variable measured. The components of an \code{AnnotatedDataFrame} can be accessed with \code{\link{pData}} and \code{\link{varMetadata}}. } \section{Extends}{ Versioned } \section{Creating Objects}{ \code{AnnotatedDataFrame(data, varMetadata, dimLabels=c("rowNames", "columnNames"), ...)} \code{AnnotatedDataFrame} instances are created using \code{AnnotatedDataFrame}. The function can take three arguments, \code{data} is a \code{data.frame} of the samples (rows) and measured variables (columns). \code{varMetadata} is a \code{data.frame} with the number of rows equal to the number of columns of the \code{data} argument. \code{varMetadata} describes aspects of each measured variable. \code{dimLabels} provides aesthetic control for labeling rows and columns in the \code{show} method. \code{varMetadata} and \code{dimLabels} can be missing. \code{as(data.frame, "AnnotatedDataFrame")} coerces a \code{data.frame} to an \code{AnnotatedDataFrame}. \code{\link{annotatedDataFrameFrom}} may be a convenient way to create an \code{AnnotatedDataFrame} from \code{\link{AssayData-class}}. } \section{Slots}{ Class-specific slots: \describe{ \item{\code{data}:}{A \code{data.frame} containing samples (rows) and measured variables (columns).} \item{\code{dimLabels}:}{A \code{character} vector of length 2 that provides labels for the rows and columns in the \code{show} method.} \item{\code{varMetadata}:}{A \code{data.frame} with number of rows equal number of columns in \code{data}, and at least one column, named \code{labelDescription}, containing a textual description of each variable.} \item{\code{.__classVersion__}:}{A \code{Versions} object describing the R and Biobase version numbers used to created the instance. Intended for developer use.} } } \section{Methods}{ Class-specific methods. \describe{ \item{\code{as(annotatedDataFrame, "data.frame")}}{Coerce objects of \code{AnnotatedDataFrame} to \code{data.frame}.} \item{\code{combine(, }:}{Bind data from one \code{AnnotatedDataFrame} to a second \code{AnnotatedDataFrame}, returning the result as an \code{AnnotatedDataFrame}. Row (sample) names in each argument must be unique. Variable names present in both arguments occupy a single column in the resulting \code{AnnotatedDataFrame}. Variable names unique to either argument create columns with values assigned for those samples where the variable is present. \code{varMetadata} in the returned \code{AnnotatedDataFrame} is updated to reflect the combination.} \item{\code{pData()}, \code{pData()<-}:}{Set and retrieve the data (samples and variables) in the \code{AnnotatedDataFrame}} \item{\code{varMetadata()}, \code{varMetadata()<-}:}{Set and retrieve the meta-data (variables and their descriptions) in the \code{AnnotatedDataFrame}} \item{\code{featureNames()}, \code{featureNames()<-}:}{Set and retrieve the feature names in \code{AnnotatedDataFrame}; a synonym for \code{sampleNames}.} \item{\code{sampleNames()}, \code{sampleNames()<-}:}{Set and retrieve the sample names in \code{AnnotatedDataFrame}} \item{\code{varLabels()}, \code{varLabels()<-}:}{Set and retrieve the variable labels in the \code{AnnotatedDataFrame}} \item{ \code{dimLabels()}, \code{dimLabels() <- }}{Retrieve labels used for display of \code{AnnotatedDataFrame}, e.g., \sQuote{rowNames}, \sQuote{columnNames}.} } Standard generic methods: \describe{ \item{\code{initialize()}:}{Object instantiation, used by \code{new}; not to be called directly by the user.} \item{\code{as(, "AnnotatedDataFrame")}:}{Convert a \code{data.frame} to an AnnotatedDataFrame.} \item{\code{as(,)}:}{Convert old-style \code{phenoData-class} objects to \code{AnnotatedDataFrame}, issuing warnings as appropriate.} \item{\code{validObject()}:}{Validity-checking method, ensuring coordination between \code{data} and \code{varMetadata} elements} \item{\code{updateObject(object, ..., verbose=FALSE)}}{Update instance to current version, if necessary. See \code{\link{updateObject}}} \item{\code{isCurrent(object)}}{Determine whether version of object is current. See \code{\link{isCurrent}}} \item{\code{isVersioned(object)}}{Determine whether object contains a 'version' string describing its structure . See \code{\link{isVersioned}}} \item{\code{show()}}{Abbreviated display of object} \item{\code{[,}:}{Subset operation, taking two arguments and indexing the sample and variable. Returns an \code{AnnotatedDataFrame}, i.e., including relevant metadata. Unlike a \code{data.frame}, setting \code{drop=TRUE} generates an error. } \item{\code{[[}, \code{$}:}{Selector returning a variable (column of \code{pData}).} \item{\code{[[, ...]]<-}, \code{$ <- }:}{Replace or add a variable to \code{pData}. ... can include named arguments (especially \code{labelDescription}) to be added to \code{varMetadata}.} \item{\code{head(, n = 6L, ...)}, \code{tail(, n=6L, ...)}}{Select the first (last for tail) \code{n} rows; negative \code{n} returns the first (last) \code{nrow() - n} rows.} \item{\code{dim()}, \code{ncol()}:}{Number of samples and variables (\code{dim}) and variables (\code{ncol}) in the argument.} \item{\code{dimnames()}, \code{rownames()}, \code{colnames()}:}{row and column names.} } } \author{V.J. Carey, after initial design by R. Gentleman } \seealso{ \code{\link{eSet}}, \code{\link{ExpressionSet}}, \code{\link{read.AnnotatedDataFrame}} } \examples{ df <- data.frame(x=1:6, y=rep(c("Low", "High"),3), z=I(LETTERS[1:6]), row.names=paste("Sample", 1:6, sep="_")) metaData <- data.frame(labelDescription=c( "Numbers", "Factor levels", "Characters")) AnnotatedDataFrame() AnnotatedDataFrame(data=df) AnnotatedDataFrame(data=df, varMetadata=metaData) as(df, "AnnotatedDataFrame") obj <- AnnotatedDataFrame() pData(obj) <- df varMetadata(obj) <- metaData validObject(obj) } \keyword{classes} Biobase/man/class.AssayData.Rd0000644000175200017520000000754314516003524017171 0ustar00biocbuildbiocbuild\name{AssayData-class} \docType{class} \alias{AssayData-class} \alias{AssayData} \alias{assayData,AssayData-method} \alias{combine,AssayData,AssayData-method} \alias{featureNames,AssayData-method} \alias{featureNames<-,AssayData-method} \alias{sampleNames,AssayData-method} \alias{sampleNames<-,AssayData,ANY-method} \alias{sampleNames<-,AssayData,list-method} \alias{storageMode,AssayData-method} \alias{storageMode<-,AssayData,character-method} \alias{assayDataNew} \alias{assayDataValidMembers} \title{Class "AssayData"} \description{ Container class defined as a class union of \code{list} and \code{environment}. Designed to contain one or more matrices of the same dimension. } \section{Methods}{ \describe{ \item{combine}{\code{signature(x = "AssayData", y = "AssayData")}: This method uses \code{cbind} to create new AssayData elements that contain the samples of both arguments \code{x} and \code{y}. Both AssayData arguments to combine must have the same collection of elements. The elements must have identical numbers of rows (features). The numerical contents of any columns (samples) present in the same element of different AssayData must be identical. The storageMode of the AssayData arguments must be identical, and the function returns an AssayData with storageMode matching the incoming mode. See also \code{\link{combine,eSet,eSet-method}}} \item{featureNames}{\code{signature(object = "AssayData")}} \item{featureNames<-}{\code{signature(object = "AssayData", value = "ANY")}: Return or set the feature names as a character vector. These are the row names of the AssayData elements. \code{value} can be a character or numeric vector; all entries must be unique.} \item{sampleNames}{\code{signature(object = "AssayData")}} \item{sampleNames<-}{\code{signature(object = "AssayData", value="ANY")}: Return or set the sample names. These are the column names of the the AssayData elements and the row names of \code{phenoData}. \code{value} can be a character or numeric vector.} \item{storageMode}{\code{signature(object = "AssayData")}} \item{storageMode<-}{\code{signature(object = "AssayData", value="character")}: Return or set the storage mode for the instance. \code{value} can be one of three choices: \code{"lockedEnvironment"}, \code{"environment"}, and \code{"list"}. Environments offer a mechanism for storing data that avoids some of the copying that occurs when using lists. Locked environment help to ensure data integrity. Note that environments are one of the few R objects that are pass-by-reference. This means that if you modify a copy of an environment, you also modify the original. For this reason, we recommend using lockedEnvironment whenever possible. } } Additional functions operating on \code{AssayData} include: \describe{ \item{assayData[[name]]}{Select element \code{name} from \code{assayData}.} \item{assayDataNew(storage.mode = c("lockedEnvironment", "environment", "list"), ...)}{Use \code{storage.mode} to create a new list or environment containing the named elements in \code{...}} \item{assayDataValidMembers(assayData, required)}{Validate \code{assayData}, ensuring that the named elements \code{required} are present, matrices are of the same dimension, and \code{featureNames} (rownames) are consistent (identical or \code{NULL}) across entries.} \item{assayDataElement(object, element)}{See \code{\link{eSet-class}}} \item{assayDataElementReplace(object, element, value, validate=TRUE)}{ See \code{\link{eSet-class}}} \item{assayDataElementNames(object)}{See \code{\link{eSet-class}}} } } \author{Biocore} \seealso{ \code{\link{eSet-class}} \code{\link{ExpressionSet-class}} } \keyword{classes} Biobase/man/class.ExpressionSet.Rd0000644000175200017520000002343414516003524020127 0ustar00biocbuildbiocbuild\name{ExpressionSet} \docType{class} \alias{class:ExpressionSet} \alias{ExpressionSet} \alias{ExpressionSet-class} \alias{ExpressionSet,missing-method} \alias{ExpressionSet,environment-method} \alias{ExpressionSet,matrix-method} \alias{exprs,ExpressionSet-method} \alias{exprs<-,ExpressionSet,matrix-method} \alias{initialize,ExpressionSet-method} \alias{coerce,exprSet,ExpressionSet-method} \alias{coerce,eSet,ExpressionSet-method} \alias{coerce,ExpressionSet,data.frame-method} \alias{esApply,ExpressionSet-method} \alias{updateObject,ExpressionSet-method} \alias{makeDataPackage,ExpressionSet-method} \alias{as.data.frame.ExpressionSet} \alias{write.exprs} \alias{write.exprs,ExpressionSet-method} \title{ Class to Contain and Describe High-Throughput Expression Level Assays. } \description{ Container for high-throughput assays and experimental metadata. \code{ExpressionSet} class is derived from \code{\link{eSet}}, and requires a matrix named \code{exprs} as assayData member. } \usage{ ## Instance creation ExpressionSet(assayData, phenoData=annotatedDataFrameFrom(assayData, byrow=FALSE), featureData=annotatedDataFrameFrom(assayData, byrow=TRUE), experimentData=MIAME(), annotation=character(), protocolData=annotatedDataFrameFrom(assayData, byrow=FALSE), ...) ## Additional methods documented below } \arguments{ \item{assayData}{A \code{matrix} of expression values, or an \code{environment}. When \code{assayData} is a \code{matrix}, the rows represent probe sets (\sQuote{features} in \code{ExpressionSet} parlance). Columns represent samples. When present, row names identify features and column names identify samples. Row and column names must be unique, and consistent with row names of \code{featureData} and \code{phenoData}, respectively. The assay data can be retrieved with \code{exprs()}. When \code{assayData} is an environment, it contains identically dimensioned matrices like that described in the previous paragraph. One of the elements of the environment must be named \sQuote{exprs}; this element is returned with \code{exprs()}. } \item{phenoData}{An optional \code{AnnotatedDataFrame} containing information about each sample. The number of rows in \code{phenoData} must match the number of columns in \code{assayData}. Row names of \code{phenoData} must match column names of the matrix / matricies in \code{assayData}.} \item{featureData}{An optional \code{AnnotatedDataFrame} containing information about each feature. The number of rows in \code{featureData} must match the number of rows in \code{assayData}. Row names of \code{featureData} must match row names of the matrix / matricies in \code{assayData}.} \item{experimentData}{An optional \code{MIAME} instance with meta-data (e.g., the lab and resulting publications from the analysis) about the experiment.} \item{annotation}{A \code{character} describing the platform on which the samples were assayed. This is often the name of a Bioconductor chip annotation package, which facilitated down-stream analysis.} \item{protocolData}{An optional \code{AnnotatedDataFrame} containing equipment-generated information about protocols. The number of rows and row names of \code{protocolData} must agree with the dimension and column names of \code{assayData}.} \item{\dots}{Additional arguments, passed to \code{new("ExpressionSet", ...)} and available for classes that extend \code{ExpressionSet}. } } \section{Extends}{ Directly extends class \code{\link{eSet}}. } \section{Creating Objects}{ \code{ExpressionSet} instances are usually created through \code{ExpressionSet()}. } \section{Slots}{ Inherited from \code{eSet}: \describe{ \item{\code{assayData}:}{Contains matrices with equal dimensions, and with column number equal to \code{nrow(phenoData)}. \code{assayData} must contain a matrix \code{exprs} with rows representing features (e.g., probe sets) and columns representing samples. Additional matrices of identical size (e.g., representing measurement errors) may also be included in \code{assayData}. Class:\code{\link{AssayData-class}}} \item{\code{phenoData}:}{See \code{\link{eSet}}} \item{\code{featureData}:}{See \code{\link{eSet}}} \item{\code{experimentData}:}{See \code{\link{eSet}}} \item{\code{annotation}:}{See \code{\link{eSet}}} \item{\code{protocolData}:}{See \code{\link{eSet}}} } } \section{Methods}{ Class-specific methods. \describe{ \item{\code{as(exprSet,"ExpressionSet")}}{Coerce objects of \code{\link{exprSet-class}} to \code{ExpressionSet}} \item{\code{as(object,"data.frame")}}{Coerce objects of \code{\link{ExpressionSet-class}} to \code{data.frame} by transposing the expression matrix and concatenating \code{phenoData}} \item{\code{exprs(ExpressionSet)}, \code{exprs(ExpressionSet,matrix)<-}}{Access and set elements named \code{exprs} in the \code{AssayData-class} slot.} \item{\code{esApply(ExpressionSet, MARGIN, FUN, ...)}}{'apply'-like function to conveniently operate on \code{ExpressionSet} objects. See \code{\link{esApply}}.} \item{\code{write.exprs(ExpressionSet)}}{Write expression values to a text file. It takes the same arguments as \code{write.table}} } Derived from \code{\link{eSet}}: \describe{ \item{\code{updateObject(object, ..., verbose=FALSE)}}{Update instance to current version, if necessary. See \code{\link{updateObject}} and \code{\link{eSet}}} \item{\code{isCurrent(object)}}{Determine whether version of object is current. See \code{\link{isCurrent}}} \item{\code{isVersioned(object)}}{Determine whether object contains a 'version' string describing its structure . See \code{\link{isVersioned}}} \item{\code{assayData(ExpressionSet)}:}{See \code{\link{eSet}}} \item{\code{sampleNames(ExpressionSet)} and \code{sampleNames(ExpressionSet)<-}:}{See \code{\link{eSet}}} \item{\code{featureNames(ExpressionSet)}, \code{featureNames(ExpressionSet, value)<-}:}{See \code{\link{eSet}}} \item{\code{dims(ExpressionSet)}:}{See \code{\link{eSet}}} \item{\code{phenoData(ExpressionSet)}, \code{phenoData(ExpressionSet,value)<-}:}{See \code{\link{eSet}}} \item{\code{varLabels(ExpressionSet)}, \code{varLabels(ExpressionSet, value)<-}:}{See \code{\link{eSet}}} \item{\code{varMetadata(ExpressionSet)}, \code{varMetadata(ExpressionSet,value)<-}:}{See \code{\link{eSet}}} \item{\code{pData(ExpressionSet)}, \code{pData(ExpressionSet,value)<-}:}{See \code{\link{eSet}}} \item{\code{varMetadata(ExpressionSet)}, \code{varMetadata(ExpressionSet,value)}}{See \code{\link{eSet}}} \item{\code{experimentData(ExpressionSet)},\code{experimentData(ExpressionSet,value)<-}:}{See \code{\link{eSet}}} \item{\code{pubMedIds(ExpressionSet)}, \code{pubMedIds(ExpressionSet,value)}}{See \code{\link{eSet}}} \item{\code{abstract(ExpressionSet)}:}{See \code{\link{eSet}}} \item{\code{annotation(ExpressionSet)}, \code{annotation(ExpressionSet,value)<-}}{See \code{\link{eSet}}} \item{\code{protocolData(ExpressionSet)}, \code{protocolData(ExpressionSet,value)<-}}{See \code{\link{eSet}}} \item{\code{combine(ExpressionSet,ExpressionSet)}:}{See \code{\link{eSet}}} \item{\code{storageMode(ExpressionSet)}, \code{storageMode(ExpressionSet,character)<-}:}{See \code{\link{eSet}}} } Standard generic methods: \describe{ \item{\code{initialize(ExpressionSet)}:}{Object instantiation, used by \code{new}; not to be called directly by the user.} \item{\code{updateObject(ExpressionSet)}:}{Update outdated versions of \code{ExpressionSet} to their current definition. See \code{\link{updateObject}}, \code{\link{Versions-class}}.} \item{\code{validObject(ExpressionSet)}:}{Validity-checking method, ensuring that \code{exprs} is a member of \code{assayData}. \code{checkValidity(ExpressionSet)} imposes this validity check, and the validity checks of \code{eSet}.} \item{\code{makeDataPackage(object, author, email, packageName, packageVersion, license, biocViews, filePath, description=paste(abstract(object), collapse="\n\n"), ...)}}{ Create a data package based on an ExpressionSet object. See \code{\link{makeDataPackage}}.} \item{\code{as(exprSet,ExpressionSet)}:}{Coerce \code{exprSet} to \code{ExpressionSet}.} \item{\code{as(eSet,ExpressionSet)}:}{Coerce the \code{eSet} portion of an object to \code{ExpressionSet}.} \item{\code{show(ExpressionSet)}}{See \code{\link{eSet}}} \item{\code{dim(ExpressionSet)}, \code{ncol}}{See \code{\link{eSet}}} \item{\code{ExpressionSet[(index)}:}{See \code{\link{eSet}}} \item{\code{ExpressionSet$}, \code{ExpressionSet$<-}}{See \code{\link{eSet}}} \item{\code{ExpressionSet[[i]]}, \code{ExpressionSet[[i]]<-}}{See \code{\link{eSet}}} } } \author{Biocore team} \seealso{ \code{\link{eSet-class}}, \code{\link{ExpressionSet-class}}. } \examples{ # create an instance of ExpressionSet ExpressionSet() ExpressionSet(assayData=matrix(runif(1000), nrow=100, ncol=10)) # update an existing ExpressionSet data(sample.ExpressionSet) updateObject(sample.ExpressionSet) # information about assay and sample data featureNames(sample.ExpressionSet)[1:10] sampleNames(sample.ExpressionSet)[1:5] experimentData(sample.ExpressionSet) # subset: first 10 genes, samples 2, 4, and 10 expressionSet <- sample.ExpressionSet[1:10,c(2,4,10)] # named features and their expression levels subset <- expressionSet[c("AFFX-BioC-3_at","AFFX-BioDn-5_at"),] exprs(subset) # samples with above-average 'score' in phenoData highScores <- expressionSet$score > mean(expressionSet$score) expressionSet[,highScores] # (automatically) coerce to data.frame lm(score~AFFX.BioDn.5_at + AFFX.BioC.3_at, data=subset) } \keyword{classes} Biobase/man/class.MIAME.Rd0000644000175200017520000001154114516003524016140 0ustar00biocbuildbiocbuild\name{MIAME} \docType{class} \alias{class:MIAME} \alias{MIAME} \alias{MIAME-class} \alias{abstract,MIAME-method} \alias{combine,MIAME,MIAME-method} \alias{expinfo,MIAME-method} \alias{hybridizations,MIAME-method} \alias{normControls,MIAME-method} \alias{otherInfo,MIAME-method} \alias{preproc} \alias{preproc,MIAME-method} \alias{preproc<-,MIAME-method} \alias{preproc<-} \alias{notes,MIAME-method} \alias{notes<-,MIAME,list-method} \alias{notes<-,MIAME,character-method} \alias{pubMedIds,MIAME-method} \alias{pubMedIds<-,MIAME,ANY-method} \alias{samples,MIAME-method} \alias{show,MIAME-method} \alias{updateObject,MIAME-method} \alias{isCurrent,MIAME,missing-method} \alias{samples} \concept{abstract} \concept{expinfo} \concept{hybridizations} \concept{normControls} \concept{preproc} \title{ Class for Storing Microarray Experiment Information } \description{ Class \code{MIAME} covers MIAME entries that are not covered by other classes in Bioconductor. Namely, experimental design, samples, hybridizations, normalization controls, and pre-processing information. The \code{MIAME} class is derived from \code{\link{MIAxE}}.} \section{Slots}{ \describe{ \item{\code{name}:}{Object of class \code{character} containing the experimenter name} \item{\code{lab}:}{Object of class \code{character} containing the laboratory where the experiment was conducted} \item{\code{contact}:}{Object of class \code{character} containing contact information for lab and/or experimenter} \item{\code{title}:}{Object of class \code{character} containing a single-sentence experiment title } \item{\code{abstract}:}{Object of class \code{character} containing an abstract describing the experiment} \item{\code{url}:}{Object of class \code{character} containing a URL for the experiment} \item{\code{samples}:}{Object of class \code{list} containing information about the samples} \item{\code{hybridizations}:}{Object of class \code{list} containing information about the hybridizations} \item{\code{normControls}:}{Object of class \code{list} containing information about the controls such as house keeping genes} \item{\code{preprocessing}:}{Object of class \code{list} containing information about the pre-processing steps used on the raw data from this experiment} \item{\code{pubMedIds}:}{Object of class \code{character} listing strings of PubMed identifiers of papers relevant to the dataset} \item{\code{other}:}{Object of class \code{list} containing other information for which none of the above slots does not applies} } } \section{Methods}{ Constructor methods: \describe{ \item{\code{MIAME()}:}{ \code{MIAME(name = "", lab = "", contact = "", title = "", abstract = "", url = "", pubMedIds = "" , samples = "", hybridizations = list(), normControls = list(), preprocessing = list(), other = list())}: Creates a new \code{MIAME} object with slots as defined above.} } Class-specific methods: \describe{ \item{\code{abstract(MIAME)}:}{An accessor function for \code{abstract}.} \item{\code{combine(MIAME,MIAME)}:}{Combine two objects of \code{MIAME-class}, issuing warnings when ambiguities encountered.} \item{\code{expinfo(MIAME)}:}{An accessor function for \code{name}, \code{lab}, \code{contact}, \code{title}, and \code{url}.} \item{\code{hybridizations(MIAME)}:}{An accessor function for \code{hybridizations}.} \item{\code{normControls(MIAME)}:}{An accessor function for \code{normControls}.} \item{\code{notes(MIAME), notes(MIAME) <- value}:}{Accessor functions for \code{other}. \code{notes(MIAME) <- character} \emph{appends} character to notes; use \code{notes(MIAME) <- list} to replace the notes entirely.} \item{\code{otherInfo(MIAME)}:}{An accessor function for \code{other}.} \item{\code{preproc(MIAME)}:}{An accessor function for \code{preprocessing}.} \item{\code{pubMedIds(MIAME), pubMedIds(MIAME) <- value}:}{Accessor function for \code{pubMedIds}.} \item{\code{samples(MIAME)}:}{An accessor function for \code{samples}.} } Standard generic methods: \describe{ \item{\code{updateObject(object, \dots, verbose=FALSE)}}{Update instance to current version, if necessary. See \code{\link{updateObject}}} \item{\code{isCurrent(object)}}{Determine whether version of object is current. See \code{\link{isCurrent}}} \item{\code{isVersioned(object)}}{Determine whether object contains a 'version' string describing its structure . See \code{\link{isVersioned}}} \item{\code{show(MIAME)}:}{Renders information about the MIAME information } } } \references{ \url{http://www.mged.org/Workgroups/MIAME/miame_1.1.html} } \seealso{ \code{\link{class:characterORMIAME}}, \code{\link{read.MIAME}} } \author{ Rafael A. Irizarry } \keyword{classes} Biobase/man/class.MIAxE.Rd0000644000175200017520000000234714516003524016217 0ustar00biocbuildbiocbuild\name{MIAxE} \docType{class} \alias{MIAxE} \alias{class:MIAxE} \alias{MIAxE-class} \alias{show,MIAxE-method} \title{MIAxE objects} \description{ The \code{MIAxE} virtual class is a general container for storing experiment metadata. Information such as experimental design, samples, normalization methods and pre-processing information can be stored in these objets. The \code{MIAxE} class is virtual and \code{MIAxE} objects cannot be instantiated directly. The following classes derive directly from the \code{MIAxE} class: MIAME. } \section{Slots}{ Introduced in \code{MIAxE}: \describe{ \item{\code{.__classVersion__}:}{A \code{Versions} object describing the \code{MIAxE} version number. Intended for developer use.} } } \section{Methods}{ Standard generic methods: \describe{ \item{\code{show(object)}}{Informatively display object contents.} } } \author{Biocore team} \seealso{ Related classes \code{\link{MIAME-class}}, \code{\link{ExpressionSet-class}}. Derived classes \code{\link{MIAME-class}}. } \examples{ # Create a new class MyData <- setClass("MyData", contains="MIAxE") MyData() # MIAxE objects cannot be instantiated directly try(new("MIAxE")) } \keyword{classes} Biobase/man/class.MultiSet.Rd0000644000175200017520000001225514516003524017061 0ustar00biocbuildbiocbuild\name{MultiSet} \docType{class} \alias{class:MultiSet} \alias{MultiSet} \alias{MultiSet-class} \alias{initialize,MultiSet-method} \alias{coerce,eSet,MultiSet-method} \title{ Class to Contain and Describe High-Throughput Expression Level Assays. } \description{ Container for high-throughput assays and experimental metadata. \code{MutliSet} is derived from \code{\link{eSet-class}}. \code{MultiSet} differs from \code{\link{ExpressionSet-class}} because \code{MultiSet} can contain any element(s) in \code{assayData} (\code{ExpressionSet} must have an element named \code{exprs}). } \section{Extends}{ Directly extends class \code{\link{eSet}}. } \section{Creating Objects}{ \code{new('MultiSet', phenoData = [AnnotatedDataFrame], experimentData = [MIAME], annotation = [character], protocolData = [AnnotatedDataFrame], ...) } \code{updateOldESet(oldESet,"MultiSet")} \code{MultiSet} instances are usually created through \code{new("MultiSet", ...)}. The \code{...} arguments to \code{new} are matrices of expression data (with features corresponding to rows and samples to columns), \code{phenoData}, \code{experimentData}, \code{annotation}, and \code{protocolData}. \code{phenoData}, \code{experimentData}, \code{annotation}, and \code{protocolData} can be missing, in which case they are assigned default values. \code{\link{updateOldESet}} will take a serialized instance (e.g., saved to a disk file with \code{save} object created with earlier definitions of the \code{eSet-class}, and update the object to \code{MultiSet}. Warnings are issued when direct translation is not possible; incorrectly created \code{oldESet} instances may not be updated. } \section{Slots}{ Inherited from \code{eSet}: \describe{ \item{\code{assayData}:}{Contains zero or more matrices with equal dimensions, and with column number equal to \code{nrow(phenoData)}. Each matrix in \code{assayData} has rows representing features (e.g., reporters) and columns representing samples. Class:\code{\link{AssayData-class}}} \item{\code{phenoData}:}{See \code{\link{eSet-class}}} \item{\code{experimentData}:}{See \code{\link{eSet-class}}} \item{\code{annotation}:}{See \code{\link{eSet-class}}} \item{\code{protocolData}:}{See \code{\link{eSet-class}}} } } \section{Methods}{ Class-specific methods: none Derived from \code{\link{eSet-class}}: \describe{ \item{\code{updateObject(object, ..., verbose=FALSE)}}{Update instance to current version, if necessary. See \code{\link{updateObject}} and \code{\link{eSet}}} \item{\code{isCurrent(object)}}{Determine whether version of object is current. See \code{\link{isCurrent}}} \item{\code{isVersioned(object)}}{Determine whether object contains a 'version' string describing its structure . See \code{\link{isVersioned}}} \item{\code{sampleNames(MultiSet)} and \code{sampleNames(MultiSet)<-}:}{See \code{\link{eSet-class}}} \item{\code{featureNames(MultiSet)}, \code{featureNames(MultiSet, value)<-}:}{See \code{\link{eSet-class}}} \item{\code{dims(MultiSet)}:}{See \code{\link{eSet-class}}} \item{\code{phenoData(MultiSet)}, \code{phenoData(MultiSet,value)<-}:}{See \code{\link{eSet-class}}} \item{\code{varLabels(MultiSet)}, \code{varLabels(MultiSet, value)<-}:}{See \code{\link{eSet-class}}} \item{\code{varMetadata(MultiSet)}, \code{varMetadata(MultiSet,value)<-}:}{See \code{\link{eSet-class}}} \item{\code{pData(MultiSet)}, \code{pData(MultiSet,value)<-}:}{See \code{\link{eSet-class}}} \item{\code{varMetadata(MultiSet)}, \code{varMetadata(MultiSet,value)}}{See \code{\link{eSet-class}}} \item{\code{experimentData(MultiSet)},\code{experimentData(MultiSet,value)<-}:}{See \code{\link{eSet-class}}} \item{\code{pubMedIds(MultiSet)}, \code{pubMedIds(MultiSet,value)}}{See \code{\link{eSet-class}}} \item{\code{abstract(MultiSet)}:}{See \code{\link{eSet-class}}} \item{\code{annotation(MultiSet)}, \code{annotation(MultiSet,value)<-}}{See \code{\link{eSet-class}}} \item{\code{protocolData(MultiSet)}, \code{protocolData(MultiSet,value)<-}}{See \code{\link{eSet-class}}} \item{\code{combine(MultiSet,MultiSet)}:}{See \code{\link{eSet-class}}} \item{\code{storageMode(eSet)}, \code{storageMode(eSet,character)<-}:}{See \code{\link{eSet-class}}} } Standard generic methods: \describe{ \item{\code{initialize(MultiSet)}:}{Object instantiation, used by \code{new}; not to be called directly by the user.} \item{\code{validObject(MultiSet)}:}{Validity-checking method, ensuring that all elements of \code{assayData} are matricies with equal dimensions.} \item{\code{as(eSet,MultiSet)}:}{Coerce the \code{eSet} portion of an object to \code{MultiSet}.} \item{\code{show(MultiSet)}}{See \code{\link{eSet-class}}} \item{\code{dim(MultiSet)}, \code{ncol}}{See \code{\link{eSet-class}}} \item{\code{MultiSet[(index)}:}{See \code{\link{eSet-class}}} \item{\code{MultiSet$}, \code{MultiSet$<-}}{See \code{\link{eSet-class}}} } } \author{Biocore team} \seealso{ \code{\link{eSet-class}}, \code{\link{ExpressionSet-class}} } \examples{ # create an instance of ExpressionSet new("MultiSet") } \keyword{classes} Biobase/man/class.NChannelSet.Rd0000644000175200017520000002053414516003524017454 0ustar00biocbuildbiocbuild\name{NChannelSet-class} \docType{class} \alias{NChannelSet-class} \alias{NChannelSet} \alias{class.NChannelSet} \alias{assayData<-,NChannelSet,environment-method} \alias{assayData<-,NChannelSet,list-method} \alias{channelNames,NChannelSet-method} \alias{channelNames<-,NChannelSet,character-method} \alias{channelNames<-,NChannelSet,list-method} \alias{channel,NChannelSet,character-method} \alias{sampleNames,NChannelSet-method} \alias{sampleNames<-,NChannelSet,list-method} \alias{selectChannels,NChannelSet,character-method} \alias{initialize,NChannelSet-method} \title{Class to contain data from multiple channel array technologies} \description{ Container for high-throughput assays and experimental meta-data. Data are from experiments where a single \sQuote{chip} contains several (more than 1) different \sQuote{channels}. All channels on a chip have the same set of\sQuote{features}. An experiment consists of a collection of several N-channel chips; each chip is a \sQuote{sample}. An \code{NChannelSet} provides a way to coordinate assay data (expression values) with phenotype information and references to chip annotation data; it extends the \code{\link{eSet}} class. An \code{NChannelSet} allows channels to be extracted (using the \code{channels} method, mentioned below), and subsets of features or samples to be selected (using \code{[, ]}). Selection and subsetting occur so that relevant phenotypic data is maintained by the selection or subset.} \section{Objects from the Class}{ Objects can be created by calls of the form \code{NChannelSet( assayData, phenoData, ...)}. See the examples below. } \section{Slots}{ \describe{ \item{\code{assayData}:}{ Object of class \code{\link{AssayData}}, usually an environment containing matrices of identical size. Each matrix represents a single channel. Columns in each matrix correspond to samples, rows to features. Once created, \code{NChannelSet} manages coordination of samples and channels. } \item{\code{phenoData}:}{ Object of class \code{\link{AnnotatedDataFrame}}. The \code{data} component of the \code{AnnotatedDataFrame} is \code{data.frame} with number of rows equal to the number of samples. Columns of the \code{data} component correspond to measured covariates. The \code{varMetadata} component consists of mandatory columns \code{labelDescription} (providing a textual description of each column label in the \code{data} component) and \code{channel}. The \code{channel} of \code{varMetadata} is a \code{factor}, with levels equal to the names of the \code{assayData} channels, plus the special symbol \code{_ALL_}. The \code{channel} column is used to indicate which channel(s) the corresponding column in the \code{data} component of \code{AnnotatedDataFrame} correspond; the \code{_ALL_} symbol indicates that the \code{data} column is applicable to all channels. \code{varMetadata} may contain additional columns with arbitrary information. Once created, \code{NChannelSet} coordinates selection and subsetting of channels in \code{phenoData}. } \item{\code{featureData}:}{ Object of class \code{\link{AnnotatedDataFrame}}, used to contain feature data that is unique to this experiment; feature-level descriptions common to a particular chip are usually referenced through the \code{annotation} slot. } \item{\code{experimentData}:}{ Object of class \code{\link{MIAME}} containing descriptions of the experiment. } \item{\code{annotation}:}{ Object of class \code{"character"}. Usually a length-1 character string identifying the chip technology used during the experiment. The annotation string is used to retrieve information about features, e.g., using the \code{annotation} package.} \item{\code{protocolData}:}{ Object of class \code{"character"}. A character vector identifying the dates the samples were scanned during the experiment.} \item{\code{.__classVersion__}:}{ Object of class \code{\link{Versions}}, containing automatically created information about the class definition Biobase package version, and other information about the user system at the time the instance was created. See \code{\link{classVersion}} and \code{\link{updateObject}} for examples of use. } } } \section{Extends}{ Class \code{"\linkS4class{eSet}"}, directly. Class \code{"\linkS4class{VersionedBiobase}"}, by class "eSet", distance 2. Class \code{"\linkS4class{Versioned}"}, by class "eSet", distance 3. } \section{Methods}{ Methods with class-specific functionality: \describe{ \item{\code{channel(object, name, ...)}}{ \code{signature(object="NChannelSet", name="character")}. Return an \code{ExperessionSet} created from the channel and corresponding phenotype of argument \code{name}. \code{name} must have length 1. Arguments \code{...} are rarely used, but are passed to the \code{ExpressionSet} constructor, for instance to influence \code{storage.mode}. } \item{\code{channelNames(object)}, \code{channelNames(object) <- value}}{ \code{signature(object = "NChannelSet")}. Obtain, reorder, or rename channels contained in \code{object}. See \code{\link{channelNames}}. } \item{\code{selectChannels(object, names, ...}}{ \code{signature(object = "NChannelSet", names = "character")}. Create a new \code{NChannelSet} from \code{object}, containing only channels in \code{names}. The \code{...} is not used by this method. } \item{\code{object[features, samples]}}{ \code{signature(object = "NChannelSet", features = "ANY", samples = "ANY")}. Create a new \code{NChannelSet} from \code{object}, containing only elements matching \code{features} and \code{samples}; either index may be missing, or a character, numeric, or logical vector. } \item{\code{sampleNames(object) <- value}}{ \code{signature(object = "NChannelSet", value = "list")} assign each (named) element of \code{value} to the \code{sampleNames} of the correspondingly named elements of \code{assayData} in \code{object}. } } Methods with functionality derived from \code{\link{eSet}}: \code{annotation}, \code{annotation<-}, \code{assayData}, \code{assayData<-}, \code{classVersion}, \code{classVersion<-}, \code{dim}, \code{dims}, \code{experimentData}, \code{experimentData<-}, \code{featureData}, \code{featureData<-}, \code{phenoData}, \code{phenoData<-}, \code{protocolData}, \code{protocolData<-}, \code{pubMedIds}, \code{pubMedIds<-}, \code{sampleNames}, \code{sampleNames<-}, \code{storageMode}, \code{storageMode<-}, \code{varMetadata}, \code{varMetadata<-}, \code{isCurrent}, \code{isVersioned}, \code{updateObject}. Additional methods: \code{coerce} (\sQuote{as}, to convert between objects, if possible), \code{initialize} (used internally for creating objects), \code{show} (invoked automatically when the object is displayed to the screen) } \author{Martin Morgan } \seealso{ \code{\linkS4class{eSet}}, \code{\linkS4class{ExpressionSet}}. } \examples{ ## An empty NChannelSet obj <- NChannelSet() ## An NChannelSet with two channels (R, G) and no phenotypic data obj <- NChannelSet(R=matrix(0,10,5), G=matrix(0,10,5)) ## An NChannelSet with two channels and channel-specific phenoData R <- matrix(0, 10, 3, dimnames=list(NULL, LETTERS[1:3])) G <- matrix(1, 10, 3, dimnames=list(NULL, LETTERS[1:3])) assayData <- assayDataNew(R=R, G=G) data <- data.frame(ChannelRData=numeric(ncol(R)), ChannelGData=numeric(ncol(R)), ChannelRAndG=numeric(ncol(R))) varMetadata <- data.frame(labelDescription=c( "R-specific phenoData", "G-specific phenoData", "Both channel phenoData"), channel=factor(c("R", "G", "_ALL_"))) phenoData <- AnnotatedDataFrame(data=data, varMetadata=varMetadata) obj <- NChannelSet(assayData=assayData, phenoData=phenoData) obj ## G channel as NChannelSet selectChannels(obj, "G") ## G channel as ExpressionSet channel(obj, "G") ## Samples "A" and "C" obj[,c("A", "C")] } \keyword{classes} Biobase/man/class.SnpSet.Rd0000644000175200017520000001254614516003524016532 0ustar00biocbuildbiocbuild\name{SnpSet} \docType{class} \alias{class:SnpSet} \alias{SnpSet} \alias{SnpSet-class} \alias{exprs<-,SnpSet,matrix-method} \alias{exprs,SnpSet-method} \alias{snpCall,SnpSet-method} \alias{snpCall<-,SnpSet,matrix-method} \alias{snpCallProbability,SnpSet-method} \alias{snpCallProbability<-,SnpSet,matrix-method} \alias{initialize,SnpSet-method} \title{ Class to Contain Objects Describing High-Throughput SNP Assays. } \description{ Container for high-throughput assays and experimental metadata. \code{SnpSet} class is derived from \code{\link{eSet}}, and requires matrices \code{call}, \code{callProbability} as assay data members.} \section{Extends}{ Directly extends class \code{\link{eSet}}. } \section{Creating Objects}{ \code{new('SnpSet', phenoData = [AnnotatedDataFrame], experimentData = [MIAME], annotation = [character], protocolData = [AnnotatedDataFrame], call = [matrix], callProbability = [matrix], ...) } \code{SnpSet} instances are usually created through \code{new("SnpSet", ...)}. Usually the arguments to \code{new} include \code{call} (a matrix of genotypic calls, with features (SNPs) corresponding to rows and samples to columns), \code{phenoData}, \code{experimentData}, \code{annotation}, and \code{protocolData}. \code{phenoData}, \code{experimentData}, \code{annotation} and \code{protocolData} can be missing, in which case they are assigned default values. } \section{Slots}{ Inherited from \code{eSet}: \describe{ \item{\code{assayData}:}{Contains matrices with equal dimensions, and with column number equal to \code{nrow(phenoData)}. \code{assayData} must contain a matrix \code{call} with rows representing features (e.g., SNPs) and columns representing samples, and a matrix \code{callProbability} describing the certainty of the call. The content of \code{call} and \code{callProbability} are not enforced by the class. Additional matrices of identical size may also be included in \code{assayData}. Class:\code{\link{AssayData-class}}} \item{\code{phenoData}:}{See \code{\link{eSet}}} \item{\code{experimentData}:}{See \code{\link{eSet}}} \item{\code{annotation}:}{See \code{\link{eSet}}} \item{\code{protocolData}:}{See \code{\link{eSet}}} } } \section{Methods}{ Class-specific methods: \describe{ \item{\code{snpCall(SnpSet)}, \code{snpCall(SnpSet,matrix)<-}}{Access and set elements named \code{call} in the \code{AssayData} slot.} \item{\code{exprs(SnpSet)}, \code{exprs(SnpSet,matrix)<-}}{Synonym for \code{snpCall}.} \item{\code{snpCallProbability(SnpSet)}, \code{snpCallProbability<-(SnpSet,matrix)<-}}{ Access and set elements named \code{callProbability} in the \code{AssayData} slot.} } Derived from \code{\link{eSet}}: \describe{ \item{\code{updateObject(object, ..., verbose=FALSE)}}{Update instance to current version, if necessary. See \code{\link{updateObject}} and \code{\link{eSet}}} \item{\code{isCurrent(object)}}{Determine whether version of object is current. See \code{\link{isCurrent}}} \item{\code{isVersioned(object)}}{Determine whether object contains a 'version' string describing its structure . See \code{\link{isVersioned}}} \item{\code{sampleNames(SnpSet)} and \code{sampleNames(SnpSet)<-}:}{See \code{\link{eSet}}} \item{\code{featureNames(SnpSet)}, \code{featureNames(SnpSet, value)<-}:}{See \code{\link{eSet}}} \item{\code{dims(SnpSet)}:}{See \code{\link{eSet}}} \item{\code{phenoData(SnpSet)}, \code{phenoData(SnpSet,value)<-}:}{See \code{\link{eSet}}} \item{\code{varLabels(SnpSet)}, \code{varLabels(SnpSet, value)<-}:}{See \code{\link{eSet}}} \item{\code{varMetadata(SnpSet)}, \code{varMetadata(SnpSet,value)<-}:}{See \code{\link{eSet}}} \item{\code{pData(SnpSet)}, \code{pData(SnpSet,value)<-}:}{See \code{\link{eSet}}} \item{\code{varMetadata(SnpSet)}, \code{varMetadata(SnpSet,value)}}{See \code{\link{eSet}}} \item{\code{experimentData(SnpSet)},\code{experimentData(SnpSet,value)<-}:}{See \code{\link{eSet}}} \item{\code{pubMedIds(SnpSet)}, \code{pubMedIds(SnpSet,value)}}{See \code{\link{eSet}}} \item{\code{abstract(SnpSet)}:}{See \code{\link{eSet}}} \item{\code{annotation(SnpSet)}, \code{annotation(SnpSet,value)<-}}{See \code{\link{eSet}}} \item{\code{protocolData(SnpSet)}, \code{protocolData(SnpSet,value)<-}}{See \code{\link{eSet}}} \item{\code{combine(SnpSet,SnpSet)}:}{See \code{\link{eSet}}} \item{\code{storageMode(eSet)}, \code{storageMode(eSet,character)<-}:}{See \code{\link{eSet}}} } Standard generic methods: \describe{ \item{\code{initialize(SnpSet)}:}{Object instantiation, used by \code{new}; not to be called directly by the user.} \item{\code{validObject(SnpSet)}:}{Validity-checking method, ensuring that \code{call} and \code{callProbability} is a member of \code{assayData}. \code{checkValidity(SnpSet)} imposes this validity check, and the validity checks of \code{eSet}.} \item{\code{show(SnpSet)}}{See \code{\link{eSet}}} \item{\code{dim(SnpSet)}, \code{ncol}}{See \code{\link{eSet}}} \item{\code{SnpSet[(index)}:}{See \code{\link{eSet}}} \item{\code{SnpSet$}, \code{SnpSet$<-}}{See \code{\link{eSet}}} } } \author{Martin Morgan, V.J. Carey, after initial design by R. Gentleman } \seealso{ \code{\link{eSet}}, \code{\link{ExpressionSet}} } \keyword{classes} Biobase/man/class.Versioned.Rd0000644000175200017520000000525114516003524017247 0ustar00biocbuildbiocbuild\name{Versioned} \docType{class} \alias{Versioned-class} \alias{Versioned} \alias{initialize,Versioned-method} \alias{isVersioned,Versioned-method} \alias{classVersion,Versioned-method} \alias{classVersion<-,Versioned,Versions-method} \alias{isCurrent,Versioned,missing-method} \alias{isCurrent,Versioned,character-method} \alias{show,Versioned-method} \title{Class "Versioned"} \description{ Use this class as a `superclass' for classes requiring information about versions. } \section{Methods}{ The following are defined; package developers may write additional methods. \describe{ \item{\code{new("Versioned", ..., versions=list())}}{Create a new \code{Versioned-class} instance, perhaps with additional named version elements (the contents of \code{versions}) added. Named elements of \code{versions} are character strings that can be coerced using \code{\link{package_version}}, or \code{package_version} instances.} \item{\code{classVersion(object)}}{Obtain version information about instance \code{object}. See \code{\link{classVersion}}.} \item{\code{classVersion(object) <- value}}{Set version information on instance \code{object} to \code{value}; useful when \code{object} is an instance of a class that contains \code{VersionClass}. See \code{\link{classVersion}}.} \item{\code{classVersion(object)["id"] <- value}}{Create or update version information \code{"id"} on instance \code{object} to \code{value}; useful when \code{object} is an instance of a class that contains \code{VersionClass}. See \code{\link{classVersion}}.} \item{\code{show(object)}}{Default method returns \code{invisible}, to avoid printing confusing information when your own class does not have a \code{show} method defined. Use \code{classVersion(object)} to get or set version information.} } } \author{Biocore} \seealso{ \code{\link{Versions-class}} } \examples{ obj <- new("Versioned", versions=list(A="1.0.0")) obj classVersion(obj) A <- setClass("A", contains="Versioned") classVersion("A") a <- A() a # 'show' nothing by default classVersion(a) B <- setClass("B", contains="Versioned", prototype=prototype(new("Versioned",versions=list(B="1.0.0")))) classVersion("B") b <- B() classVersion(b) classVersion(b)["B"] <- "1.0.1" classVersion(b) classVersion("B") classVersion("B") < classVersion(b) classVersion(b) == "1.0.1" C <- setClass("C", representation(x="numeric"), contains=("VersionedBiobase"), prototype=prototype(new("VersionedBiobase", versions=c(C="1.0.1")))) setMethod("show", signature(object="C"), function(object) print(object@x)) c <- C(x=1:10) c classVersion(c) } \keyword{classes} Biobase/man/class.VersionedBiobase.Rd0000644000175200017520000000201114516003524020523 0ustar00biocbuildbiocbuild\name{VersionedBiobase} \docType{class} \alias{VersionedBiobase-class} \alias{VersionedBiobase} \title{Class "VersionedBiobase"} \description{ Use this class as a `superclass' for classes requiring information about versions. By default, the class contains versions for R and Biobase. See \code{\link{Versioned-class}} for additional details. } \section{Methods}{ set \code{\link{Versioned-class}} for methods. } \author{Biocore} \seealso{ \code{\link{Versioned-class}} } \examples{ obj <- new("VersionedBiobase") classVersion(obj) obj <- new("VersionedBiobase", versions=list(A="1.0.0")) classVersion(obj) A <- setClass("A", contains="VersionedBiobase") classVersion("A") a <- A() classVersion(a) obj <- new("VersionedBiobase", versions=c(MyVersion="1.0.0")) classVersion(obj) B <- setClass("B", contains="VersionedBiobase", prototype=prototype(new("VersionedBiobase",versions=list(B="1.0.0")))) classVersion("B") b <- B() classVersion(b) removeClass("A") removeClass("B") } \keyword{classes} Biobase/man/class.Versions.Rd0000644000175200017520000000546214516003524017125 0ustar00biocbuildbiocbuild\name{Versions} \docType{class} \alias{Versions-class} \alias{Versions} \alias{initialize,Versions-method} \alias{[,Versions-method} \alias{[<-,Versions-method} \alias{[[<-,Versions-method} \alias{$<-,Versions-method} \alias{Compare,Versions,Versions-method} \alias{Compare,Versions,character-method} \alias{Compare,character,Versions-method} \alias{updateObject,Versions-method} \alias{show,Versions-method} \alias{coerce,Versions,character-method} \title{Class "Versions"} \description{ A class to record version number information. This class is used to report versions; to add version information to your own class, use \code{\link{Versioned-class}}. } \section{Methods}{ The following are defined; package developers may write additional methods. \describe{ \item{\code{new("Versions", ...)}}{Create a new \code{Versions-class} instance, perhaps with named version elements (the contents of \code{...}) added. Named elements of \code{versions} are character strings that can be coerced using \code{\link{package_version}}, or \code{package_version} instances, \code{Versions-class} objects.} \item{\code{object["id"]}}{Obtain version information \code{"id"} from \code{object}.} \item{\code{object["id"] <- value}}{Create or update version information \code{"id"} on instance \code{object}.} \item{\code{object[["id"]]}}{Obtain version information \code{"id"} from \code{object}. The result is a list of integers, corresponding to entries in the version string.} \item{\code{object[["id"]] <- value}}{Create or update version information \code{"id"} on instance \code{object}.} \item{\code{object$id}}{Obtain version information \code{"id"} from \code{object}.The result is a list of integers, corresponding to entries in the version string.} \item{\code{object$id <- value}}{Create or update version information \code{"id"} on instance \code{object}.} \item{\code{show(object)}}{Display version information.} \item{\code{updateObject(object)}}{Update \code{object} to the current \code{Versions-class} representation. Note that this does \emph{not} update another class that uses \code{Versions-class} to track the class version.} \item{\code{as(object, "character")}}{Convert \code{object} to character representation, e.g., \code{1.0.0}} \item{\code{object1 < object2}}{Compare \code{object1} and \code{object2} using version class information. Symbols in addition to \code{<} are admissible; see \code{?Ops}} } } \author{Biocore} \seealso{ \code{\link{classVersion}} \code{\link{isCurrent}} \code{\link{isVersioned}} } \examples{ obj <- new("Versions", A="1.0.0") obj obj["A"] <- "1.0.1" obj obj["B"] <- "2.0" obj obj1 <- obj obj1["B"] <- "2.0.1" obj1 == obj obj1["B"] > "2.0.0" obj["B"] == "2.0" # TRUE! } \keyword{classes} Biobase/man/class.VersionsNull.Rd0000644000175200017520000000143714516003524017756 0ustar00biocbuildbiocbuild\name{VersionsNull} \docType{class} \alias{VersionsNull-class} \alias{VersionsNull} \alias{initialize,VersionsNull-method} \alias{show,VersionsNull-method} \title{Class "VersionsNull"} \description{ A class used to represent the `version' of unversioned objects. Useful primarily for method dispatch. } \section{Methods}{ The following are defined; package developers may write additional methods. \describe{ \item{\code{new("VersionsNull", ...)}}{Create a new \code{VersionsNull-class} instance, ignoring any additional arguments.} \item{\code{show(object)}}{Display ``No version''.} } } \author{Biocore} \seealso{ \code{\link{classVersion}} } \examples{ obj <- new("VersionsNull") obj obj <- new("VersionsNull", A="1.0.0") # warning obj } \keyword{classes} Biobase/man/class.aggregator.Rd0000644000175200017520000000373014516003524017433 0ustar00biocbuildbiocbuild\name{aggregator} \docType{class} \alias{class:aggregator} \alias{aggregator} \alias{aggregator-class} \alias{initialize,aggregator-method} \alias{aggenv,aggregator-method} \alias{aggfun,aggregator-method} \alias{initfun,aggregator-method} \concept{aggenv} \concept{aggfun} \concept{initfun} \title{A Simple Class for Aggregators } \description{ A class of objects designed to help aggregate calculations over an iterative computation. The aggregator consists of three objects. An environment to hold the values. A function that sets up an initial value the first time an object is seen. An aggregate function that increments the value of an object seen previously. } \section{Creating Objects}{ \code{new('aggregator', aggenv = [environment], initfun = [function], aggfun = [function])} } \section{Slots}{ \describe{ \item{\code{aggenv}:}{Object of class 'environment', holds the values between iterations} \item{\code{initfun}:}{Object of class 'function' specifies how to initialize the value for a name the first time it is encountered} \item{\code{aggfun}:}{Object of class 'function' used to increment (or perform any other function) on a name} } } \section{Methods}{ \describe{ \item{\code{aggenv(aggregator)}:}{Used to access the environment of the aggregator} \item{\code{aggfun(aggregator)}:}{Used to access the function that aggregates} \item{\code{initfun(aggregator)}:}{Used to access the initializer function} } } \seealso{ \code{\link{Aggregate}} } \details{ This class is used to help aggregate different values over function calls. A very simple example is to use leave one out cross-validation for prediction. At each stage we first perform feature selection and then cross-validate. To keep track of how often each feature is selected we can use an aggregator. At the end of the cross-validation we can extract the names of the features chosen from \code{aggenv}. } \keyword{methods} \keyword{classes} Biobase/man/class.characterORmiame.Rd0000644000175200017520000000062414516003524020516 0ustar00biocbuildbiocbuild\name{class:characterORMIAME} \docType{class} \alias{class:characterORMIAME} \alias{characterORMIAME-class} \concept{characterORMIAME} \title{Class to Make Older Versions Compatible} \description{This class can be either \code{character} or \code{MIAME}.} \section{Methods}{ No methods defined with class "characterORMIAME" in the signature. } \seealso{See also \code{\link{MIAME}}} \keyword{classes} Biobase/man/class.container.Rd0000644000175200017520000000330514516003524017271 0ustar00biocbuildbiocbuild\name{container} \docType{class} \alias{class:container} \alias{container} \alias{container-class} \alias{[,container-method} \alias{[[<-,container-method} \alias{[[,container-method} \alias{content,container-method} \alias{length,container-method} \alias{locked,container-method} \alias{show,container-method} \concept{content} \concept{locked} \title{A Lockable List Structure with Constraints on Content} \description{Container class that specializes the list construct of R to provide content and access control } \section{Creating Objects}{ \code{new('container', x = [list], content = [character], locked = [logical])} } \section{Slots}{ \describe{ \item{x}{list of entities that are guaranteed to share a certain property} \item{content}{tag describing container contents} \item{locked}{boolean indicator of locked status. Value of TRUE implies assignments into the container are not permitted} } } \section{Methods}{ Class-specific methods: \describe{ \item{\code{content(container)}}{returns \code{content} slot of argument} \item{\code{locked(container)}}{returns \code{locked} slot of argument} } Standard methods defined for 'container': \describe{ \item{\code{show(container)}}{prints container} \item{\code{length(container)}}{returns number of elements in the container} \item{\code{[[(index)} and \code{[[(index, value)}}{access and replace elements in the container } \item{\code{[(index)}}{make a subset of a container (which will itself be a container)} } } \examples{ x1 <- new("container", x=vector("list", length=3), content="lm") lm1 <- lm(rnorm(10)~runif(10)) x1[[1]] <- lm1 } \keyword{methods} \keyword{classes} Biobase/man/class.eSet.Rd0000644000175200017520000003267514516003524016223 0ustar00biocbuildbiocbuild\name{eSet} \docType{class} \alias{class:eSet} \alias{eSet} \alias{eSet-class} \alias{[,eSet-method} \alias{$,eSet-method} \alias{$<-,eSet-method} \alias{[[,eSet-method} \alias{[[<-,eSet-method} \alias{abstract,eSet-method} \alias{annotation,eSet-method} \alias{annotation<-,eSet,character-method} \alias{assayData,eSet-method} \alias{assayData<-,eSet,AssayData-method} \alias{assayDataElement} \alias{assayDataElement<-} \alias{assayDataElementNames} \alias{assayDataElementReplace} \alias{combine,eSet,ANY-method} \alias{combine,eSet,eSet-method} \alias{description,eSet-method} \alias{description<-,eSet,MIAME-method} \alias{dimnames} \alias{dimnames<-} \alias{dimnames,eSet-method} \alias{dimnames<-,eSet-method} \alias{dim,eSet-method} \alias{dims} \alias{dims,eSet-method} \alias{experimentData,eSet-method} \alias{experimentData<-,eSet,MIAME-method} \alias{exprs,eSet-method} \alias{exprs<-,eSet,AssayData-method} \alias{featureData,eSet-method} \alias{featureData<-,eSet,AnnotatedDataFrame-method} \alias{featureNames,eSet-method} \alias{featureNames<-,eSet-method} \alias{fData,eSet-method} \alias{fData<-,eSet,data.frame-method} \alias{fvarLabels,eSet-method} \alias{fvarLabels<-,eSet-method} \alias{fvarMetadata,eSet-method} \alias{fvarMetadata<-,eSet,data.frame-method} \alias{initialize,eSet-method} \alias{ncol,eSet-method} \alias{notes,eSet-method} \alias{notes<-,eSet,ANY-method} \alias{pData,eSet-method} \alias{pData<-,eSet,data.frame-method} \alias{phenoData,eSet-method} \alias{phenoData<-,eSet,AnnotatedDataFrame-method} \alias{pubMedIds,eSet-method} \alias{pubMedIds<-,eSet,character-method} \alias{preproc,eSet-method} \alias{preproc<-,eSet-method} \alias{protocolData,eSet-method} \alias{protocolData<-,eSet,character-method} \alias{sampleNames,eSet-method} \alias{sampleNames<-,eSet,ANY-method} \alias{show,eSet-method} \alias{storageMode,eSet-method} \alias{storageMode<-,eSet,character-method} \alias{varLabels,eSet-method} \alias{varLabels<-,eSet-method} \alias{varMetadata,eSet-method} \alias{varMetadata<-,eSet,data.frame-method} \alias{storageMode,eSet-method} \alias{storageMode<-,eSet,character-method} \alias{updateObject,eSet-method} \alias{updateObjectTo,eSet,eSet-method} \alias{listOrEnv} \alias{SW} \concept{exprs} \concept{annotation} \concept{combine} \concept{description} \concept{ncol} \concept{notes} \concept{featureNames} \concept{sampleNames} \title{ Class to Contain High-Throughput Assays and Experimental Metadata } \description{ Container for high-throughput assays and experimental metadata. Classes derived from \code{eSet} contain one or more identical-sized matrices as \code{assayData} elements. Derived classes (e.g., \code{\link{ExpressionSet-class}}, \code{\link{SnpSet-class}}) specify which elements must be present in the \code{assayData} slot. \code{eSet} object cannot be instantiated directly; see the examples for usage. } \section{Creating Objects}{ \code{eSet} is a virtual class, so instances cannot be created. Objects created under previous definitions of \code{eSet-class} can be coerced to the current classes derived from \code{eSet} using \code{updateOldESet}. } \section{Slots}{ Introduced in \code{eSet}: \describe{ \item{\code{assayData}:}{Contains matrices with equal dimensions, and with column number equal to \code{nrow(phenoData)}. Class:\code{\link{AssayData-class}}} \item{\code{phenoData}:}{Contains experimenter-supplied variables describing sample (i.e., columns in \code{assayData}) phenotypes. Class: \code{\link{AnnotatedDataFrame-class}}} \item{\code{featureData}:}{Contains variables describing features (i.e., rows in \code{assayData}) unique to this experiment. Use the \code{annotation} slot to efficiently reference feature data common to the annotation package used in the experiment. Class: \code{\link{AnnotatedDataFrame-class}}} \item{\code{experimentData}:}{Contains details of experimental methods. Class: \code{\link{MIAME-class}}} \item{\code{annotation}:}{Label associated with the annotation package used in the experiment. Class: \code{character}} \item{\code{protocolData}:}{Contains microarray equipment-generated variables describing sample (i.e., columns in \code{assayData}) phenotypes. Class: \code{\link{AnnotatedDataFrame-class}}} \item{\code{.__classVersion__}:}{A \code{Versions} object describing the R and Biobase version numbers used to created the instance. Intended for developer use.} } } \section{Methods}{ Methods defined in derived classes (e.g., \code{\link{ExpressionSet-class}}, \code{\link{SnpSet-class}}) may override the methods described here. Class-specific methods: \describe{ \item{\code{sampleNames(object)} and \code{sampleNames(object)<-value}:}{Coordinate accessing and setting sample names in \code{assayData} and \code{phenoData}} \item{\code{featureNames(object)}, \code{featureNames(object) <- value}:}{Coordinate accessing and setting of feature names (e.g, genes, probes) in \code{assayData}.} \item{\code{dimnames(object)}, \code{dimnames(object) <- value}:}{Also \code{rownames} and \code{colnames}; access and set feature and sample names.} \item{\code{dims(object)}:}{Access the common dimensions (\code{dim}) or column numbers (\code{ncol}), or dimensions of all members (\code{dims}) of \code{assayData}.} \item{\code{phenoData(object)}, \code{phenoData(object) <- value}:}{Access and set \code{phenoData}. Adding new columns to \code{phenoData} is often more easily done with \code{eSetObject[["columnName"]] <- value}.} \item{\code{pData(object)}, \code{pData(object) <- value}:}{Access and set sample data information. Adding new columns to \code{pData} is often more easily done with \code{eSetObject[["columnName"]] <- value}.} \item{\code{varMetadata(object)}, \code{varMetadata(eSet,value)}}{Access and set metadata describing variables reported in \code{pData}} \item{\code{varLabels(object)}, \code{varLabels(eSet, value)<-}:}{Access and set variable labels in \code{phenoData}.} \item{\code{featureData(object)}, \code{featureData(object) <- value}:}{Access and set \code{featureData}.} \item{\code{fData(object)}, \code{fData(object) <- value}:}{Access and set feature data information.} \item{\code{fvarMetadata(object)}, \code{fvarMetadata(eSet,value)}}{Access and set metadata describing features reported in \code{fData}} \item{\code{fvarLabels(object)}, \code{fvarLabels(eSet, value)<-}:}{Access and set variable labels in \code{featureData}.} \item{\code{assayData(object), assayData(object) <- value}:}{ \code{signature(object = "eSet", value = "AssayData")}: Access and replace the \code{AssayData} slot of an \code{eSet} instance. \code{assayData} returns a list or environment; elements in \code{assayData} not accessible in other ways (e.g., via \code{exprs} applied directly to the \code{eSet}) can most reliably be accessed with, e.g., \code{assayData(obj)[["se.exprs"]]}.} \item{\code{experimentData(object)},\code{experimentData(object) <- value}:}{Access and set details of experimental methods} \item{\code{description(object)},\code{description(object) <- value}:}{Synonymous with experimentData.} \item{\code{notes(object)},\code{notes(object) <- value}:}{ \code{signature(object="eSet", value="list")} Retrieve and set unstructured notes associated with \code{eSet}. \code{signature(object="eSet", value="character")} As with value="list", but \emph{append} value to current list of notes.} \item{\code{pubMedIds(object)}, \code{pubMedIds(eSet,value)}}{Access and set PMIDs in \code{experimentData}.} \item{\code{abstract(object)}:}{Access abstract in \code{experimentData}.} \item{\code{annotation(object)}, \code{annotation(object) <- value}}{Access and set annotation label indicating package used in the experiment.} \item{\code{protocolData(object)}, \code{protocolData(object) <- value}}{Access and set the protocol data.} \item{\code{preproc(object)}, \code{preproc(object) <- value}:}{\code{signature(object="eSet", value="list")} Access and set \code{preprocessing} information in the \code{\link{MIAME-class}} object associated with this \code{eSet}.} \item{\code{combine(eSet,eSet)}:}{Combine two \code{eSet} objects. To be combined, eSets must have identical numbers of \code{featureNames}, distinct \code{sampleNames}, and identical \code{annotation}.} \item{\code{storageMode(object)}, \code{storageMode(eSet,character)<-}:}{Change storage mode of \code{\link{assayData}}. Can be used to 'unlock' environments, or to change between \code{list} and \code{environment} modes of storing \code{assayData}.} } Standard generic methods: \describe{ \item{\code{initialize(object)}:}{Object instantiation, can be called by derived classes but not usually by the user.} \item{\code{validObject(object)}:}{Validity-checking method, ensuring (1) all assayData components have the same number of features and samples; (2) the number and names of \code{phenoData} rows match the number and names of \code{assayData} columns} \item{\code{as(eSet, "ExpressionSet")}}{Convert instance of class \code{"eSet"} to instance of \code{\link{ExpressionSet-class}}, if possible.} \item{\code{as(eSet, "MultiSet")}}{Convert instance of class \code{"eSet"} to instance of \code{\link{MultiSet-class}}, if possible.} \item{\code{updateObject(object, ..., verbose=FALSE)}}{Update instance to current version, if necessary. Usually called through class inheritance rather than directly by the user. See \code{\link{updateObject}}} \item{\code{updateObjectTo(object, template, ..., verbose=FALSE)}}{Update instance to current version by updating slots in \code{template}, if necessary. Usually call by class inheritance, rather than directly by the user. See \code{\link{updateObjectTo}}} \item{\code{isCurrent(object)}}{Determine whether version of object is current. See \code{\link{isCurrent}}} \item{\code{isVersioned(object)}}{Determine whether object contains a 'version' string describing its structure . See \code{\link{isVersioned}}} \item{\code{show(object)}}{Informatively display object contents.} \item{\code{dim(object)}, \code{ncol}}{Access the common dimensions (\code{dim}) or column numbers (\code{ncol}), of all memebers (\code{dims}) of \code{assayData}.} \item{\code{object[(index)}:}{Conducts subsetting of matrices and phenoData components } \item{\code{object$name}, \code{object$name<-value}}{Access and set \code{name} column in \code{phenoData}} \item{\code{object[[i, ...]]}, \code{object[[i, ...]]<-value}}{Access and set column \code{i} (character or numeric index) in \code{phenoData}. The ... argument can include named variables (especially \code{labelDescription}) to be added to varMetadata.} } Additional functions: \describe{ \item{assayDataElement(object, element)}{Return matrix \code{element} from \code{assayData} slot of \code{object}.} \item{assayDataElement(object, element, validate=TRUE) <- value)}{Set element \code{element} in \code{assayData} slot of \code{object} to matrix \code{value}. If \code{validate=TRUE}, check that value row and column names of conform to object.} \item{assayDataElementReplace(object, element, value, validate=TRUE)}{Set element \code{element} in \code{assayData} slot of \code{object} to matrix \code{value}. If \code{validate=TRUE}, check that row and column names of value conform to object.} \item{assayDataElementNames(object)}{Return element names in \code{assayData} slot of \code{object}} \item{\code{updateOldESet}}{Update versions of \code{eSet} constructued using \code{listOrEnv} as \code{assayData} slot (before May, 2006).} } } \author{Biocore team} \seealso{ Method use in \code{\link{ExpressionSet-class}}. Related classes \code{\link{AssayData-class}}, \code{\link{AnnotatedDataFrame-class}}, \code{\link{MIAME-class}}. Derived classes \code{\link{ExpressionSet-class}}, \code{\link{SnpSet-class}}. To update objects from previous class versions, see \code{\link{updateOldESet}}. } \examples{ # update previous eSet-like class oldESet to existing derived class \dontrun{updateOldESet(oldESet, "ExpressionSet")} # create a new, ad hoc, class, for personal use # all methods outlined above are available automatically .MySet <- setClass("MySet", contains="eSet") .MySet() # Create a more robust class, with constructor and validation methods # to ensure assayData contains specific matricies .TwoColorSet <- setClass("TwoColorSet", contains="eSet") TwoColorSet <- function(phenoData=AnnotatedDataFrame(), experimentData=MIAME(), annotation=character(), R=new("matrix"), G=new("matrix"), Rb=new("matrix"), Gb=new("matrix"), ...) { .TwoColorSet(phenoData=phenoData, experimentData=experimentData, annotation=annotation, R=R, G=G, Rb=Rb, Gb=Gb, ...) } setValidity("TwoColorSet", function(object) { assayDataValidMembers(assayData(object), c("R", "G", "Rb", "Gb")) }) TwoColorSet() # eSet objects cannot be instantiated directly, only derived objects try(new("eSet")) removeClass("MySet") removeClass("TwoColorSet") } \keyword{classes} Biobase/man/classVersion.Rd0000644000175200017520000000361514516003524016662 0ustar00biocbuildbiocbuild\name{classVersion} \alias{classVersion} \alias{classVersion<-} \alias{classVersion,ANY-method} \alias{classVersion,character-method} \title{Retrieve information about versioned classes} \description{ These generic functions return version information for classes derived from \code{\link{Versioned-class}}, or \code{\link{VersionsNull-class}} for unversioned objects. The version information is an object of \code{\link{Versions-class}}. By default, \code{classVersion} has the following behaviors: \describe{ \item{\code{classVersion(Versioned-instance)}}{Returns a \code{Versions-class} object obtained from the object.} \item{\code{classVersion{"class"}}}{Consults the definition of \code{class} and return the current version information, if available.} \item{\code{classVersion(ANY)}}{Return a \code{\link{VersionsNull-class}} object to indicate no version information available.} } By default, the \code{classVersion<-} method has the following behavior: \describe{ \item{\code{classVersion(Versioned-instance)["id"] <- value}}{Assign (update or add) \code{value} to \code{Versions-instance}. \code{value} is coerced to a valid version description. see \code{\link{Versions-class}} for additional access methods.} } } \usage{ classVersion(object) classVersion(object) <- value } \arguments{ \item{object}{Object whose version is to be determined, as described above.} \item{value}{\code{Version-class} object to assign to object of \code{Versioned-class} object.} } \value{ \code{classVersion} returns an instance of \code{\link{Versions-class}} } \author{Biocore team} \seealso{\code{\link{Versions-class}}} \examples{ obj <- new("VersionedBiobase") classVersion(obj) classVersion(obj)["Biobase"] classVersion(1:10) # no version classVersion("ExpressionSet") # consult ExpressionSet prototype classVersion(obj)["MyVersion"] <- "1.0.0" classVersion(obj) } \keyword{manip} Biobase/man/contents.Rd0000644000175200017520000000151414516003524016040 0ustar00biocbuildbiocbuild\name{contents} \alias{contents} \title{Function to retrieve contents of environments} \description{ The contents method is used to retrieve the values stored in an environment. } \usage{ contents(object, all.names) } \arguments{ \item{object}{The environment (data table) that you want to get all contents from} \item{all.names}{a logical indicating whether to copy all values in \code{as.list.environment}} } \value{ A named list is returned, where the elements are the objects stored in the environment. The names of the elements are the names of the objects. The \code{all.names} argument is identical to the one used in \code{as.list.environment}. } \author{R. Gentleman} \seealso{\code{\link{as.list.environment}}} \examples{ z <- new.env() multiassign(letters, 1:26, envir=z) contents(z) } \keyword{manip} Biobase/man/copyEnv.Rd0000644000175200017520000000164114516003524015627 0ustar00biocbuildbiocbuild\name{copyEnv} \alias{copyEnv} \title{List-Environment interactions} \description{ These functions can be used to make copies of environments, or to get/assign all of the objects inside of an environment. } \usage{ copyEnv(oldEnv, newEnv, all.names=FALSE) } \arguments{ \item{oldEnv}{An environment to copy from} \item{newEnv}{An environment to copy to. If missing, a new environment with the same parent environment as oldEnv.} \item{all.names}{Whether to retrieve objects with names that start with a dot.} } \details{ \code{copyEnv}: This function will make a copy of the contents from \code{oldEnv} and place them into \code{newEnv}. } \author{Jeff Gentry and R. Gentleman} \seealso{\code{\link{environment}}, \code{\link{as.list}}} \examples{ z <- new.env(hash=TRUE, parent=emptyenv(), size=29L) multiassign(c("a","b","c"), c(1,2,3), z) a <- copyEnv(z) ls(a) } \keyword{utilities} Biobase/man/copySubstitute.Rd0000644000175200017520000001107514516003524017254 0ustar00biocbuildbiocbuild\name{copySubstitute} \alias{copySubstitute} \title{Copy Between Connections or Files with Configure-Like Name-Value Substitution} \description{ Copy files, directory trees or between connections and replace all occurences of a symbol by the corresponding value. } \usage{ copySubstitute(src, dest, symbolValues, symbolDelimiter="@", allowUnresolvedSymbols=FALSE, recursive = FALSE, removeExtension = "\\\\.in$") } \arguments{ \item{src}{Source, either a character vector with filenames and/or directory names, or a connection object.} \item{dest}{Destination, either a character vector of length 1 with the name of an existing, writable directory, or a connection object. The class of the \code{dest} argument must match that of the \code{src} argument.} \item{symbolValues}{A named list of character strings.} \item{symbolDelimiter}{A character string of length one with a single character in it.} \item{allowUnresolvedSymbols}{Logical. If \code{FALSE}, then the function will execute \code{\link[base:stop]{stop}} if it comes across symbols that are not defined in \code{symbolValues}.} \item{recursive}{Logical. If \code{TRUE}, the function works recursively down a directory tree (see details).} \item{removeExtension}{Character. Matches to this regular expression are removed from filenames and directory names.} } \details{ Symbol substitution: this is best explained with an example. If the list \code{symbolValues} contains an element with name \code{FOO} and value \code{bar}, and symbolDelimiter is \code{@}, then any occurrence of \code{@FOO@} is replaced by \code{bar}. This applies both the text contents of the files in \code{src} as well as to the filenames. See examples. If \code{recursive} is \code{FALSE}, both \code{src} and \code{dest} must be connection or a filenames. The text in \code{src} is read through the function \code{\link[base:readLines]{readLines}}, symbols are replaced by their values, and the result is written to \code{dest} through the function \code{\link[base:readLines]{writeLines}}. If \code{recursive} is \code{TRUE}, \code{\link[Biobase:copySubstitute]{copySubstitute}} works recursively down a directory tree (see details and example). \code{src} must be a character vector with multiple filenames or directory names, \code{dest} a directory name. One use of this function is in \code{\link[Biobase:createPackage]{createPackage}} for the automatic generation of packages from a template package directory. } \value{ None. The function is called for its side effect. } \author{Wolfgang Huber \url{http://www.dkfz.de/mga/whuber}} \keyword{connection} \keyword{programming} \examples{ ## create an example file infile = tempfile() outfile = tempfile() writeLines(text=c("We will perform in @WHAT@:", "So, thanks to @WHOM@ at once and to each one,", "Whom we invite to see us crown'd at @WHERE@."), con = infile) ## create the symbol table z = list(WHAT="measure, time and place", WHOM="all", WHERE="Scone") ## run copySubstitute copySubstitute(infile, outfile, z) ## display the results readLines(outfile) ##-------------------------------------------------------------- ## This is a slightly more complicated example that demonstrates ## how copySubstitute works on nested directories ##-------------------------------------------------------------- d = tempdir() my.dir.create = function(x) {dir.create(x); return(x)} unlink(file.path(d, "src"), recursive=TRUE) unlink(file.path(d, "dest"), recursive=TRUE) ## create some directories and files: src = my.dir.create(file.path(d, "src")) dest = file.path(d, "dest") d1 = my.dir.create(file.path(src, "dir1.in")) d2 = my.dir.create(file.path(src, "dir2@FOO@.in")) d3 = my.dir.create(file.path(d2, "dir3")) d4 = my.dir.create(file.path(d3, "dir4")) d5 = my.dir.create(file.path(d4, "dir5@BAR@")) writeLines(c("File1:", "FOO: @FOO@"), file.path(d1, "file1.txt.in")) writeLines(c("File2:", "BAR: @BAR@"), file.path(d2, "file2.txt.in")) writeLines(c("File3:", "SUN: @SUN@"), file.path(d3, "file3.txt.in")) writeLines(c("File4:", "MOON: @MOON@"), file.path(d4, "@SUN@.txt")) ## call copySubstitute copySubstitute(src, dest, recursive=TRUE, symbolValues = list(FOO="thefoo", BAR="thebar", SUN="thesun", MOON="themoon")) ## view the result listsrc = dir(src, full.names=TRUE, recursive=TRUE) listdest = dir(dest, full.names=TRUE, recursive=TRUE) listsrc listdest cat(unlist(lapply(listsrc, readLines)), sep="\n") cat(unlist(lapply(listdest, readLines)), sep="\n") } Biobase/man/createPackage.Rd0000644000175200017520000000503114516003524016720 0ustar00biocbuildbiocbuild\name{createPackage} \alias{createPackage} \title{Create a Package Directory from a Template} \description{ Create a package directory from a template, with symbol-value substitution } \usage{ createPackage(pkgname, destinationDir, originDir, symbolValues, unlink=FALSE, quiet=FALSE) } \arguments{ \item{pkgname}{Character. The name of the package to be written.} \item{destinationDir}{Character. The path to a directory where the package is to be written.} \item{originDir}{Character. The path to a directory that contains the template package. Usually, this will contain a file named \code{DESCRIPTION}, and subdirectories \code{R}, \code{man}, \code{data}. In all files and filenames, symbols will be replaced by their respective values, see the parameter \code{symbolValues}.} \item{symbolValues}{Named list of character strings. The symbol-to-value mapping. See \code{\link[Biobase:copySubstitute]{copySubstitute}} for details.} \item{unlink}{Logical. If \code{TRUE}, and \code{destinationDir} already contains a file or directory with the name \code{pkgname}, try to unlink (remove) it.} \item{quiet}{Logical. If \code{TRUE}, do not print information messages.} } \details{The intended use of this function is for the automated mass production of data packages, such as the microarray annotation, CDF, and probe sequence packages. No syntactic or other checking of the package is performed. For this, use R CMD check. The symbols \code{@PKGNAME@} and \code{@DATE@} are automatically defined with the values of \code{pkgname} and \code{date()}, respectively. } \value{ The function returns a \code{list} with one element \code{pkgdir}: the path to the package. } \seealso{\code{\link[Biobase:copySubstitute]{copySubstitute}}, the reference manual \emph{Writing R extensions}.} \author{Wolfgang Huber \url{http://www.dkfz.de/mga/whuber}} \keyword{programming} \examples{ sym = list(AUTHOR = "Hesiod", VERSION = "1.0", TITLE = "the nine muses", FORMAT = "Character vector containg the names of the 9 muses.") res = createPackage("muses", destinationDir = tempdir(), originDir = system.file("Code", package="Biobase"), symbolValues = sym, unlink = TRUE, quiet = FALSE) muses = c("Calliope", "Clio", "Erato", "Euterpe", "Melpomene", "Polyhymnia", "Terpsichore", "Thalia", "Urania") dir.create(file.path(res$pkgdir, "data")) save(muses, file = file.path(res$pkgdir, "data", "muses.rda")) res$pkgdir } Biobase/man/data.aaMap.Rd0000644000175200017520000000140214516003524016126 0ustar00biocbuildbiocbuild\name{data:aaMap} \alias{data:aaMap} \alias{aaMap} \docType{data} \title{Dataset: Names and Characteristics of Amino Acids } \usage{data(aaMap)} \description{ The \code{aaMap} data frame has 20 rows and 6 columns. Includes elementary information about amino acids. } \format{ This data frame contains the following columns: \describe{ \item{name}{amino acid name} \item{let.1}{one-letter code} \item{let.3}{three-letter code} \item{scProp}{side chain property at pH 7 (polar/nonpolar)} \item{hyPhilic}{logical: side chain is hydrophilic at pH 7} \item{acidic}{logical: side chain is acidic at pH 7} } } \source{ Nei M and Kumar S: Molecular evolution and phylogenetics (Oxford 2000), Table 1.2 } \examples{ data(aaMap) } \keyword{datasets} Biobase/man/data.geneData.Rd0000644000175200017520000000134714516003524016627 0ustar00biocbuildbiocbuild\name{data:geneData} \alias{data:geneData} \alias{geneData} \alias{data:geneCov} \alias{geneCov} \alias{data:geneCovariate} \alias{geneCovariate} \alias{data:seD} \alias{seD} \docType{data} \title{Sample expression matrix and phenotype data.frames.} \usage{data(geneData)} \description{ The \code{geneData} data.frame has 500 rows and 26 columns. It consists of a subset of real expression data from an Affymetrix U95v2 chip. The data are anonymous. The covariate data \code{geneCov} and \code{geneCovariate} are made up. The standard error data \code{seD} is also made up. } \format{ A 500 by 26 data frame. } \source{ The J. Ritz Laboratory (S. Chiaretti). } \examples{ data(geneData) data(geneCovariate) data(seD) } \keyword{datasets} Biobase/man/data.reporter.Rd0000644000175200017520000000227314516003524016760 0ustar00biocbuildbiocbuild\name{reporter} \alias{data:reporter} \alias{reporter} \docType{data} \title{Example data.frame representing reporter information} \description{ The \code{reporter} object is a 500 by 1 data frame. The rows represent the 500 probe IDs in the \code{geneData} data. The values in \code{reporter} are the predefined probe types for the probes. \code{reporter} is used in conjunction with the \code{geneData} object and its associates. } \usage{data(reporter)} \format{ A 500 by 1 data frame } \details{ There are 10 predefined probe types: \itemize{ \item \code{AFFX-} Quality Control (QC) \item \code{_f_} SequenceFamily \item \code{_g_} CommonGroups \item \code{_s_} SimilarityConstraint \item \code{_r_} RulesDropped \item \code{_i_} Incomplete \item \code{_b_} AmbiguousProbeSet \item \code{_l_} LongProbeSet \item \code{_at} AntiSenseTarget \item \code{_st} SenseTarget } } \source{ Affymetrix GeneChip Expression Analysis Data Analysis Fundamentals (\url{http://www.affymetrix.com/Auth/support/downloads/manuals/data_analysis_fundamentals_manual.pdf}) } \examples{ data(reporter) ## maybe str(reporter) ; plot(reporter) ... } \keyword{datasets} Biobase/man/data.sample.ExpressionSet.Rd0000644000175200017520000000170514516003524021210 0ustar00biocbuildbiocbuild\name{data:sample.ExpressionSet} \alias{data:sample.ExpressionSet} \alias{sample.ExpressionSet} \docType{data} \title{Dataset of class 'ExpressionSet'} \usage{data(sample.ExpressionSet)} \format{ The data for 26 cases, labeled A to Z and 500 genes. Each case has three covariates: sex (male/female); type (case/control); and score (testing score). } \description{ The expression data are real but anonymized. The data are from an experiment that used Affymetrix U95v2 chips. The data were processed by dChip and then exported to R for analysis. The data illustrate \code{\link{ExpressionSet-class}}, with \code{assayData} containing the required matrix element \code{exprs} and an additional matrix \code{se.exprs}. \code{se.exprs} has the same dimensions as \code{exprs}. The phenoData and standard error estimates (se.exprs) are made up. The information in the "description" slot is fake. } \examples{ data(sample.ExpressionSet) } \keyword{datasets} Biobase/man/data.sample.MultiSet.Rd0000644000175200017520000000126314516003524020142 0ustar00biocbuildbiocbuild\name{data:sample.MultiSet} \alias{data:sample.MultiSet} \alias{sample.MultiSet} \docType{data} \title{Data set of class 'MultiSet'} \usage{data(sample.MultiSet)} \format{ The data for 4 cases, labeled a to d and 500 genes. Each case has five covariates: SlideNumber: number; FileName: name; Cy3: genotype labeled Cy3; Cy5: genotype labeled Cy5; Date: date. } \description{ The expression data are real but anonymized. The data are from an experiment that used Affymetrix U95v2 chips. The data were processed by dChip and then exported to R for analysis. The phenoData, standard error estimates, and description data are fake. } \examples{ data(sample.MultiSet) } \keyword{datasets} Biobase/man/defunct.Rd0000644000175200017520000000250414516003524015633 0ustar00biocbuildbiocbuild\name{Deprecated and Defunct} \title{Biobase Deprecated and Defunct} \alias{class:annotatedDataset} \alias{annotatedDataset} \alias{annotatedDataset-class} \alias{initialize,annotatedDataset-method} \alias{class:exprList} \alias{exprList} \alias{exprList-class} \alias{class:exprMatrix} \alias{exprMatrix} \alias{exprMatrix-class} \alias{class:exprSet} \alias{exprSet} \alias{exprSet-class} \alias{initialize,exprSet-method} \alias{class:phenoData} \alias{phenoData-class} \alias{initialize,phenoData-method} \alias{data:sample.eSet} \alias{sample.eSet} \alias{data:sample.exprSet.1} \alias{sample.exprSet.1} \alias{data:sample.exprSet} \alias{sample.exprSet} \alias{df2pD} \alias{read.pD} \alias{read.exprSet} \alias{read.phenoData} \alias{geneNames} \alias{geneNames,ExpressionSet-method} \alias{geneNames<-} \alias{geneNames<-,ExpressionSet,character-method} \alias{getExpData} \alias{getExpData,eSet,character-method} \alias{eList} \alias{eList,eSet-method} \alias{eList<-} \alias{eList<-,eSet,AssayData-method} \alias{reporterNames} \alias{reporterNames,eSet-method} \alias{reporterNames<-} \alias{reporterNames<-,eSet,character-method} \alias{updateOldMiame} \alias{l2e} \alias{biocReposList} \description{ The function, class, or data object you have asked for has been deprecated or made defunct. } \keyword{internal} Biobase/man/description.Rd0000644000175200017520000000137414516003524016532 0ustar00biocbuildbiocbuild\name{description} \alias{description} \alias{description<-} \title{Retrieve and set overall experimental information eSet-like classes.} \description{ These generic functions access experimental information associated with \code{\link{eSet-class}}. } \usage{ description(object, \dots) description(object) <- value } \arguments{ \item{object}{Object, possibly derived from class \code{\link{eSet-class}}.} \item{value}{Structured information describing the experiment, e.g., of \code{\link{MIAME-class}}.} \item{\dots}{Further arguments to be used by other methods. } } \value{ \code{description} returns an object of \code{\link{MIAME-class}}. } \author{Biocore} \seealso{\code{\link{eSet-class}}, \code{\link{MIAME-class}}} \keyword{manip} Biobase/man/dumpPackTxt.Rd0000644000175200017520000000075614516003524016456 0ustar00biocbuildbiocbuild\name{dumpPackTxt} \alias{dumpPackTxt} \title{Dump Textual Description of a Package } \description{ Dump textual description of a package } \usage{ dumpPackTxt(package) } \arguments{ \item{package}{Character string naming an R package} } \details{ dumps DESCRIPTION and INDEX files from package sources } \value{ \code{stdout} output } \author{} \note{ Other approaches using formatDL are feasible } \examples{ dumpPackTxt("stats") } \keyword{ models } Biobase/man/esApply.Rd0000644000175200017520000000552314516003524015624 0ustar00biocbuildbiocbuild\name{esApply} \alias{esApply} \title{ An apply-like function for ExpressionSet and related structures. } \description{ \code{esApply} is a wrapper to \code{apply} for use with \code{ExpressionSet}s. The application of a function to rows of an expression array usually involves variables in \code{pData}. \code{esApply} uses a special evaluation paradigm to make this easy. The function \code{FUN} may reference any data in \code{pData} by name. } \usage{ esApply(X, MARGIN, FUN, \dots) } \arguments{ \item{X}{An instance of class \code{\link{ExpressionSet}}.} \item{MARGIN}{The margin to apply to, either 1 for rows (samples) or 2 for columns (features).} \item{FUN}{Any function } \item{\dots}{Additional parameters for \code{FUN}.} } \details{ The \code{pData} from \code{X} is installed in an environment. This environment is installed as the environment of \code{FUN}. This will then provide bindings for any symbols in \code{FUN} that are the same as the names of the \code{pData} of \code{X}. If \code{FUN} has an environment already it is retained but placed after the newly created environment. Some variable shadowing could occur under these circumstances. } \value{ The result of \code{with(pData(x), apply(exprs(X), MARGIN, FUN, ...))}. } \author{V.J. Carey , R. Gentleman } \seealso{ \code{\link{apply}}, \code{\link{ExpressionSet}} } \examples{ data(sample.ExpressionSet) ## sum columns of exprs res <- esApply(sample.ExpressionSet, 1, sum) ## t-test, spliting samples by 'sex' f <- function(x) { xx <- split(x, sex) t.test(xx[[1]], xx[[2]])$p.value } res <- esApply(sample.ExpressionSet, 1, f) ## same, but using a variable passed in the function call f <- function(x, s) { xx <- split(x, s) mean(xx[[1]]) - mean(xx[[2]]) } sex <- sample.ExpressionSet[["sex"]] res <- esApply(sample.ExpressionSet, 1, f, s = sex) # obtain the p-value of the t-test for sex difference mytt.demo <- function(y) { ys <- split(y, sex) t.test(ys[[1]], ys[[2]])$p.value } sexPValue <- esApply(sample.ExpressionSet, 1, mytt.demo) # obtain the p-value of the slope associated with score, adjusting for sex # (if we were concerned with sign we could save the z statistic instead at coef[3,3] myreg.demo <- function(y) { summary(lm(y ~ sex + score))$coef[3,4] } scorePValue <- esApply(sample.ExpressionSet, 1, myreg.demo) # a resampling method resamp <- function(ESET) { ntiss <- ncol(exprs(ESET)) newind <- sample(1:ntiss, size = ntiss, replace = TRUE) ESET[newind,] } # a filter q3g100filt <- function(eset) { apply(exprs(eset), 1, function(x) quantile(x,.75) > 100) } # filter after resampling and then apply set.seed(123) rest <- esApply({bool <- q3g100filt(resamp(sample.ExpressionSet)); sample.ExpressionSet[bool,]}, 1, mytt.demo) } \keyword{models} \keyword{methods} Biobase/man/exprs.Rd0000644000175200017520000000147614516003524015353 0ustar00biocbuildbiocbuild\name{exprs} \alias{exprs} \alias{exprs<-} \alias{se.exprs} \alias{se.exprs<-} \title{Retrieve expression data from eSets.} \description{ These generic functions access the expression and error measurements of assay data stored in an object derived from the \code{\link{eSet-class}}. } \usage{ exprs(object) exprs(object) <- value se.exprs(object) se.exprs(object) <- value } \arguments{ \item{object}{Object derived from class \code{eSet}.} \item{value}{Matrix with rows representing features and columns samples.} } \value{ \code{exprs} returns a (usually large!) matrix of expression values; \code{se.exprs} returns the corresponding matrix of standard errors, when available. } \author{Biocore} \seealso{\code{\link{eSet-class}}, \code{\link{ExpressionSet-class}}, \code{\link{SnpSet-class}}} \keyword{manip} Biobase/man/featureData.Rd0000644000175200017520000000250414516003524016430 0ustar00biocbuildbiocbuild\name{featureData} \alias{featureData} \alias{featureData<-} \alias{fData} \alias{fData<-} \alias{fvarLabels} \alias{fvarLabels<-} \alias{fvarMetadata} \alias{fvarMetadata<-} \title{Retrieve information on features recorded in eSet-derived classes.} \description{ These generic functions access feature data (experiment specific information about features) and feature meta-data (e.g., descriptions of feature covariates). } \usage{ featureData(object) featureData(object) <- value fData(object) fData(object) <- value fvarLabels(object) fvarLabels(object) <- value fvarMetadata(object) fvarMetadata(object) <- value } \arguments{ \item{object}{Object, possibly derived from \code{\link{eSet-class}} or \code{\link{AnnotatedDataFrame-class}}.} \item{value}{Value to be assigned to corresponding object.} } \value{ \code{featureData} returns an object containing information on both variable values and variable meta-data. \code{fvarLabels} returns a character vector of measured variable names. \code{fData} returns a data frame with features as rows, variables as columns. \code{fvarMetadata} returns a data frame with variable names as rows, description tags (e.g., unit of measurement) as columns. } \author{Biocore} \seealso{ \code{\linkS4class{eSet}}, \code{\linkS4class{ExpressionSet}} } \keyword{manip} Biobase/man/featureNames.Rd0000644000175200017520000000161514516003524016624 0ustar00biocbuildbiocbuild\name{featureNames} \alias{featureNames} \alias{featureNames<-} \alias{sampleNames} \alias{sampleNames<-} \title{Retrieve feature and sample names from eSets.} \description{ These generic functions access the feature names (typically, gene or SNP identifiers) and sample names stored in an object derived from the \code{\link{eSet-class}}. } \usage{ featureNames(object) featureNames(object) <- value sampleNames(object) sampleNames(object) <- value } \arguments{ \item{object}{Object, possibly derived from class \code{eSet}.} \item{value}{Character vector containing feature or sample names.} } \value{ \code{featureNames} returns a (usually long!) character vector uniquely identifying each feature.\code{sampleNames} returns a (usually shorter) character vector identifying samples. } \author{Biocore} \seealso{\code{\link{ExpressionSet-class}}, \code{\link{SnpSet-class}}} \keyword{manip} Biobase/man/getPkgVigs.Rd0000644000175200017520000000120214516003524016247 0ustar00biocbuildbiocbuild\name{getPkgVigs} \alias{getPkgVigs} \title{List Vignette Files for a Package} \description{ This function will return a listing of all vignettes stored in a package's \code{doc} directory. } \usage{ getPkgVigs(package = NULL) } \arguments{ \item{package}{A character vector of packages to search or \code{NULL}. The latter is for all attached packages (in \code{\link{search}()}).} } \value{ A data.frame with columns \code{package}, \code{filename}, \code{title}. } \author{Jeff Gentry, modifications by Wolfgang Huber.} \seealso{\code{\link{openVignette}}} \examples{ z <- getPkgVigs() z # and look at them } \keyword{utilities} Biobase/man/internals.Rd0000644000175200017520000000061114516003524016177 0ustar00biocbuildbiocbuild\name{Internals} \alias{aggenv} \alias{aggfun} \alias{content} \alias{expinfo} \alias{hybridizations} \alias{initfun} \alias{locked} \alias{normControls} \alias{otherInfo} %classes \alias{data.frameOrNULL-class} \alias{listOrEnv-class} %methods \alias{contents,environment-method} \title{Internals} \description{ Use help.search("your keyword", package="Biobase"). } \keyword{internal} Biobase/man/isCurrent.Rd0000644000175200017520000000371114516003524016162 0ustar00biocbuildbiocbuild\name{isCurrent} \alias{isCurrent} \alias{isCurrent,ANY,ANY-method} \title{Use version information to test whether class is current} \description{ This generic function uses \code{\link{Versioned-class}} information to ask whether an instance of a class (e.g., read from disk) has current version information. By default, \code{isCurrent} has the following behaviors: \describe{ \item{\code{isCurrent(Versioned-instance)}}{Returns a vector of logicals, indicating whether each version matches the current version from the class prototype.} \item{\code{isCurrent(ANY)}}{Return \code{NA}, indicating that the version cannot be determined} \item{\code{isCurrent(Versioned-instance, "class")}}{Returns a logical vector indicating whether version identifiers shared between \code{Versioned-instance} and \code{"class"} are current.} } Starting with R-2.6 / Bioconductor 2.1 / Biobase 1.15.1, \code{isCurrent(Versioned-instance, ...)} returns an element \code{S4} indicating whether the class has the `S4' bit set; a value of \code{FALSE} indicates that the object needs to be recreated. } \usage{ isCurrent(object, value) } \arguments{ \item{object}{Object whose version is to be determined, as described above.} \item{value}{(Optional) character string identifying a class with which to compare versions.} } \value{ \code{isCurrent} returns a logical vector. } \author{Biocore team} \seealso{\code{\link{Versions-class}}} \examples{ obj <- new("VersionedBiobase") isCurrent(obj) isCurrent(1:10) # NA A <- setClass("A", contains="VersionedBiobase", prototype=prototype(new("VersionedBiobase", versions=c(A="1.0.0")))) a <- A() classVersion(a) isCurrent(a, "VersionedBiobase") # is the 'VersionedBiobase' portion current? classVersion(a)["A"] <- "1.0.1" classVersion(a) isCurrent(a, "VersionedBiobase") isCurrent(a) # more recent, so does not match 'current' defined by prototype removeClass("A") } \keyword{manip} Biobase/man/isUnique.Rd0000644000175200017520000000076414516003524016013 0ustar00biocbuildbiocbuild\name{isUnique} \alias{isUnique} \title{Determine Unique Elements} \description{ Determines which elements of a vector occur exactly once. } \usage{ isUnique(x) } \arguments{ \item{x}{a vector} } \value{A logical vector of the same length as \code{x}, in which \code{TRUE} indicates uniqueness.} \seealso{\code{\link[base:unique]{unique}},\code{\link[base:duplicated]{duplicated}}.} \author{Wolfgang Huber} \examples{ x <- c(9:20, 1:5, 3:7, 0:8) isUnique(x) } \keyword{logic} \keyword{manip} Biobase/man/isVersioned.Rd0000644000175200017520000000255514516003524016503 0ustar00biocbuildbiocbuild\name{isVersioned} \alias{isVersioned} \alias{isVersioned,ANY-method} \alias{isVersioned,character-method} \title{Determine whether object or class contains versioning information} \description{ This generic function checks to see whether \code{\link{Versioned-class}} information is present. When the argument to \code{isVersioned} is a character string, the prototype of the class corresponding to the string is consulted. By default, \code{isVersioned} has the following behaviors: \describe{ \item{\code{isVersioned(Versioned-instance)}}{Returns \code{TRUE} when the instance have version information.} \item{\code{isCurrent("class-name")}}{Returns \code{TRUE} when the named class extends \code{\link{Versioned-class}}.} \item{\code{isVersioned(ANY)}}{Returns \code{FALSE}} } } \usage{ isVersioned(object) } \arguments{ \item{object}{Object or class name to check for version information, as described above.} } \value{ \code{isVersioned} returns a logical indicating whether version information is present. } \author{Biocore team} \seealso{\code{\link{Versions-class}}} \examples{ obj <- new("VersionedBiobase") isVersioned(obj) isVersioned(1:10) # FALSE A <- setClass("A", contains="VersionedBiobase", prototype=prototype(new("VersionedBiobase", versions=c(A="1.0.0")))) a <- A() isVersioned(a) removeClass("A") } \keyword{manip} Biobase/man/lcSuffix.Rd0000644000175200017520000000330214516003524015763 0ustar00biocbuildbiocbuild\name{lcSuffix} \alias{lcSuffix} \alias{lcPrefix} \alias{lcPrefixC} \title{Compute the longest common prefix or suffix of a string} \description{ These functions find the longest common prefix or suffix among the strings in a character vector. } \usage{ lcPrefix(x, ignore.case=FALSE) lcPrefixC(x, ignore.case=FALSE) lcSuffix(x, ignore.case=FALSE) } \arguments{ \item{x}{ a character vector. } \item{ignore.case}{ A logical value indicating whether or not to ignore the case in making comparisons. } } \details{ Computing the longest common suffix is helpful for truncating names of objects, like microarrays, that often have a common suffix, such as .CEL. There are some potential problems with the approach used if multibyte character encodings are being used. \code{lcPrefixC} is a faster implementation in C. It only handles ascii characters. } \value{ The common prefix or suffix. } \author{ R. Gentleman } \seealso{ \code{\link{nchar}}, \code{\link{nchar}}} \examples{ s1 <- c("ABC.CEL", "DEF.CEL") lcSuffix(s1) s2 <- c("ABC.123", "ABC.456") lcPrefix(s2) CHK <- stopifnot CHK(".CEL" == lcSuffix(s1)) CHK("bc" == lcSuffix(c("abc", "333abc", "bc"))) CHK("c" == lcSuffix(c("c", "abc", "xxxc"))) CHK("" == lcSuffix(c("c", "abc", "xxx"))) CHK("ABC." == lcPrefix(s2)) CHK("ab" == lcPrefix(c("abcd", "abcd123", "ab", "abc", "abc333333"))) CHK("a" == lcPrefix(c("abcd", "abcd123", "ax"))) CHK("a" == lcPrefix(c("a", "abcd123", "ax"))) CHK("" == lcPrefix(c("a", "abc", "xxx"))) CHK("ab" == lcPrefixC(c("abcd", "abcd123", "ab", "abc", "abc333333"))) CHK("a" == lcPrefixC(c("abcd", "abcd123", "ax"))) CHK("a" == lcPrefixC(c("a", "abcd123", "ax"))) CHK("" == lcPrefixC(c("a", "abc", "xxx"))) } \keyword{ manip } Biobase/man/listLen.Rd0000644000175200017520000000147014516003524015616 0ustar00biocbuildbiocbuild\name{listLen} \alias{listLen} \title{Lengths of list elements} \description{ This function returns an integer vector with the length of the elements of its argument, which is expected to be a list. } \usage{ listLen(x) } \arguments{ \item{x}{A list} } \details{ This function returns a vector of the same length as the list \code{x} containing the lengths of each element. The current implementation is intended for lists containing vectors and the C-level length function is used to determine length. This means no dispatch is done for the elements of the list. If your list contains S4 objects, you should use \code{sapply(x, length)} instead. } \author{Jeff Gentry and R. Gentleman} \seealso{\code{\link{sapply}}} \examples{ foo = lapply(1:8, rnorm) listLen(foo) } \keyword{utilities} Biobase/man/makeDataPackage.Rd0000644000175200017520000000375514516003524017177 0ustar00biocbuildbiocbuild\name{makeDataPackage} \alias{makeDataPackage} \alias{makeDataPackage,ANY-method} \title{Make an R package from a data object} \description{ This generic creates a valid R package from an R data object. } \usage{ makeDataPackage(object, author, email, packageName=deparse(substitute(object)), packageVersion=package_version("1.0.0"), license="Artistic-2.0", biocViews="ExperimentData", filePath=tempdir(), \dots) } \arguments{ \item{object}{An instance of an R data object.} \item{author}{The author, as a character string.} \item{email}{A valid email address for the maintainer, as a character string.} \item{packageName}{The name of the package, defaults to the name of the object instance.} \item{packageVersion}{The version number, as a character string.} \item{license}{The license, as a character string.} \item{biocViews}{A character vector of valid biocViews views.} \item{filePath}{The location to create the package.} \item{\dots}{Additional arguments to specific methods.} } \details{ The function makes use of various tools in R and Bioconductor to automatically generate the source files for a valid R package. } \value{ The return value is that from a call to \code{link{createPackage}} which is invoked once the default arguments are set up. The data instance is stored in the data directory with a name the same as that of the resulting package. } \note{Developers implementing derived methods might force correct package name evaluation by including 'packageName' in any \code{callNextMethod()}.} \author{R. Gentleman} \seealso{\code{\link{createPackage}}} \examples{ data(sample.ExpressionSet) ## package created in tempdir() s1 <- makeDataPackage(sample.ExpressionSet, author = "Foo Author", email = "foo@bar", packageName = "FooBarPkg", packageVersion = "1.0.0") } \keyword{manip} Biobase/man/matchpt.Rd0000644000175200017520000000330014516003524015636 0ustar00biocbuildbiocbuild\name{matchpt} \alias{matchpt} \docType{methods} \title{Nearest neighbor search.} \description{ Find the nearest neighbors of a set of query points in the same or another set of points in an n-dimensional real vector space, using the Euclidean distance. } \usage{ matchpt(x, y) } \arguments{ \item{x}{A matrix (or vector) of coordinates. Each row represents a point in an \code{ncol(x)}-dimensional real vector space.} \item{y}{Optional, matrix (or vector) with the same number of columns as \code{x}.} } \details{ If \code{y} is provided, the function searches for each point in \code{x} its nearest neighbor in \code{y}. If \code{y} is missing, it searches for each point in \code{x} its nearest neighbor in \code{x}, excluding that point itself. In the case of ties, only the neighbor with the smaller index is given. The implementation is simple and of complexity \code{nrow(x)} times \code{nrow(y)}. For larger problems, please consider one of the many more efficient nearest neighbor search algorithms. } \value{ A \code{data.frame} with two columns and \code{nrow(x)} rows. The first column is the index of the nearest neighbor, the second column the distance to the nearest neighbor. If \code{y} was given, the index is a row number in \code{y}, otherwise, in \code{x}. The row names of the result are those of \code{x}. } \author{ Oleg Sklyar \email{osklyar@ebi.ac.uk} } \examples{ a <- matrix(c(2,2,3,5,1,8,-1,4,5,6), ncol=2L, nrow=5L) rownames(a) = LETTERS[seq_len(nrow(a))] matchpt(a) b <- c(1,2,4,5,6) d <- c(5.3, 3.2, 8.9, 1.3, 5.6, -6, 4.45, 3.32) matchpt(b, d) matchpt(d, b) } \keyword{manip} \keyword{array} Biobase/man/multiassign.Rd0000644000175200017520000000406314516003524016544 0ustar00biocbuildbiocbuild\name{multiassign} \alias{multiassign} \title{Assign Values to a Names} \description{ Assign values to names in an environment. } \usage{ multiassign(x, value, envir = parent.frame(), inherits=FALSE) } \arguments{ \item{x}{A vector or list of names, represented by strings.} \item{value}{a vector or list of values to be assigned.} \item{envir}{the \code{\link{environment}} to use. See the details section.} \item{inherits}{should the enclosing frames of the environment be inspected?} } \details{ The \code{pos} argument can specify the environment in which to assign the object in any of several ways: as an integer (the position in the \code{\link{search}} list); as the character string name of an element in the search list; or as an \code{\link{environment}} (including using \code{\link{sys.frame}} to access the currently active function calls). The \code{envir} argument is an alternative way to specify an environment, but is primarily there for back compatibility. If \code{value} is missing and \code{x} has names then the values in each element of \code{x} are assigned to the names of \code{x}. } \value{ This function is invoked for its side effect, which is assigning the \code{values} to the variables in \code{x}. If no \code{envir} is specified, then the assignment takes place in the currently active environment. If \code{inherits} is \code{TRUE}, enclosing environments of the supplied environment are searched until the variable \code{x} is encountered. The value is then assigned in the environment in which the variable is encountered. If the symbol is not encountered then assignment takes place in the user's workspace (the global environment). If \code{inherits} is \code{FALSE}, assignment takes place in the initial frame of \code{envir}. } \examples{ #-- Create objects 'r1', 'r2', ... 'r6' -- nam <- paste("r",1:6, sep=".") multiassign(nam, 11:16) ls(pat="^r..$") #assign the values in y to variables with the names from y y<-list(a=4,d=mean,c="aaa") multiassign(y) } \keyword{data} Biobase/man/note.Rd0000644000175200017520000000124214516003524015146 0ustar00biocbuildbiocbuild\name{note} \alias{note} \title{Informational Messages} \description{ Generates an informational message that corresponds to its argument(s). Similar to warning() except prefaced by "Note:" instead of "Warning message:". } \usage{ note(...) } \arguments{ \item{\dots}{character vectors (which are pasted together) or NULL} } \details{ This function essentially cat()'s the created string to the screen. It is intended for messages to the user that are deemed to be 'informational', as opposed to warnings, etc. } \author{Jeff Gentry} \seealso{\code{\link{warning}},\code{\link{stop}}} \examples{ note("This is an example of a note") } \keyword{utilities} Biobase/man/notes.Rd0000644000175200017520000000142314516003524015332 0ustar00biocbuildbiocbuild\name{notes} \alias{notes} \alias{notes<-} \title{Retrieve and set eSet notes.} \description{ These generic functions access notes (unstructured descriptive data) associated \code{\link{eSet-class}}. \code{notes() <- } is unusual, in that the character vector is appended to the list of notes; use \code{notes() <- } to entirely replace the list. } \usage{ notes(object) notes(object) <- value } \arguments{ \item{object}{Object, possibly derived from class \code{eSet-class}.} \item{value}{Character vector containing unstructured information describing the experinement.} } \value{ \code{notes} returns a list. } \author{Biocore} \seealso{\code{\link{ExpressionSet-class}}, \code{\link{SnpSet-class}}} \keyword{manip} Biobase/man/openPDF.Rd0000644000175200017520000000177214516003524015504 0ustar00biocbuildbiocbuild\name{openPDF} \alias{openPDF} \title{Open PDF Files in a Standard Viewer} \description{ Displays the specified PDF file. } \usage{ openPDF(file, bg=TRUE) } \arguments{ \item{file}{A character string, indicating the file to view} \item{bg}{Should the pdf viewer be opened in the background.} } \details{ Currently this function works on Windows and Unix platforms. Under Windows, whatever program is associated with the file extension will be used. Under Unix, the function will use the program named in the % option "pdfViewer" (default is 'acroread'). -- the code checks pdfviewer! % and that's the option that options() documents. option "pdfviewer" (see \code{help(options)} for information on how this is set.) The \code{bg} argument is only interpreted on Unix. } \value{ This function is executed for its side effects. The specified PDF file is opened in the PDF viewer and \code{TRUE} is returned. } \author{ Jeff Gentry} \examples{ \dontrun{openPDF("annotate.pdf")} } \keyword{utilities} Biobase/man/openVignette.Rd0000644000175200017520000000166614516003524016662 0ustar00biocbuildbiocbuild\name{openVignette} \alias{openVignette} \title{ Open a Vignette or Show Vignette Selection Menu} \description{ Using the data returned by \code{vignette} this function provides a simple easy to use interface for opening vignettes. } \usage{ openVignette(package=NULL) } \arguments{ \item{package}{character string indicating the package to be used.} } \details{ If \code{package} is NULL then all packages are scanned for vignettes. The list of vignettes is presented to the user via the \code{menu} command. The user may select one of the vignettes to be opened in a PDF viewer. } \value{ No value is returned; this function is run entirely for the side effect of opening the pdf document in the PDF viewer. } \author{R. Gentleman } \seealso{\code{\link{vignette}}, \code{\link{openPDF}}, \code{\link{menu}}, \code{\link{getPkgVigs}}} \examples{ if( interactive() ) openVignette("Biobase") } \keyword{ utilities } Biobase/man/package.version.Rd0000644000175200017520000000163414516003524017265 0ustar00biocbuildbiocbuild\name{package.version} \alias{package.version} \title{Report Version of a Package} \description{ Will report the version number of a requested installed package } \usage{ package.version(pkg, lib.loc = NULL) } \arguments{ \item{pkg}{The name of the package} \item{lib.loc}{a character vector describing the location of R library trees to search through, or `NULL'. The default value of `NULL' corresponds to all libraries currently known.} } \details{ This function is a convenience wrapper around \code{package.description}, and will report simply the version number of the requested package. If the package does not exist or if the DESCRIPTION file can not be read, then an error will be thrown. } \value{ A character string reporting the version number. } \author{Jeff Gentry} \seealso{\code{\link{package.description}}} \examples{ package.version("Biobase") } \keyword{utilities} Biobase/man/phenoData.Rd0000644000175200017520000000252714516003524016113 0ustar00biocbuildbiocbuild\name{phenoData} \alias{phenoData} \alias{phenoData<-} \alias{varLabels} \alias{varLabels<-} \alias{varMetadata} \alias{varMetadata<-} \alias{pData} \alias{pData<-} \title{Retrieve information on experimental phenotypes recorded in eSet and ExpressionSet-derived classes.} \description{ These generic functions access the phenotypic data (e.g., covariates) and meta-data (e.g., descriptions of covariates) associated with an experiment. } \usage{ phenoData(object) phenoData(object) <- value varLabels(object) varLabels(object) <- value varMetadata(object) varMetadata(object) <- value pData(object) pData(object) <- value } \arguments{ \item{object}{Object, possibly derived from \code{\link{eSet-class}} or \code{\linkS4class{AnnotatedDataFrame}}.} \item{value}{Value to be assigned to corresponding object.} } \value{ \code{phenoData} returns an object containing information on both variable values and variable meta-data. \code{varLabels} returns a character vector of measured variables. \code{pData} returns a data frame with samples as rows, variables as columns. \code{varMetadata} returns a data frame with variable names as rows, description tags (e.g., unit of measurement) as columns. } \author{Biocore} \seealso{\code{\link{eSet-class}}, \code{\link{ExpressionSet-class}}, \code{\link{SnpSet-class}}} \keyword{manip} Biobase/man/protocolData.Rd0000644000175200017520000000137014516003524016636 0ustar00biocbuildbiocbuild\name{protocolData} \alias{protocolData} \alias{protocolData<-} \alias{protocolData<-,eSet,AnnotatedDataFrame-method} \title{Protocol Metadata} \description{ This generic function handles methods for adding and retrieving protocol metadata for the samples in eSets. } \usage{ protocolData(object) protocolData(object) <- value } \arguments{ \item{object}{Object derived from class eSet} \item{value}{Object of class AnnotatedDataFrame} } \value{ \code{protocolData(object)} returns an AnnotatedDataFrame containing the protocol metadata for the samples. } \author{Biocore} \seealso{\code{phenoData}, \code{\link{AnnotatedDataFrame-class}}, \code{\link{eSet-class}}, \code{\link{ExpressionSet-class}}, \code{\link{SnpSet-class}}} \keyword{manip} Biobase/man/read.AnnotatedDataFrame.Rd0000644000175200017520000000617314516003524020605 0ustar00biocbuildbiocbuild\name{read.AnnotatedDataFrame} \alias{read.AnnotatedDataFrame} \alias{write.AnnotatedDataFrame} \concept{AnnotatedDataFrame} \title{Read and write 'AnnotatedDataFrame'} \description{ Create an instance of class AnnotatedDataFrame by reading a file, or save an AnnotatedDataFrame to a file. } \usage{ read.AnnotatedDataFrame(filename, path, sep = "\t", header = TRUE, quote = "", stringsAsFactors = FALSE, row.names = 1L, varMetadata.char="#", widget = getOption("BioC")$Base$use.widgets, sampleNames = character(0), ...) write.AnnotatedDataFrame(x, file="", varMetadata.char="#", ..., append=FALSE, fileEncoding="") } \arguments{ \item{filename, file}{file or connection from which to read / write.} \item{x}{An instance of class \code{AnnotatedDataFrame}.} \item{path}{(optional) directory in which to find \code{filename}.} \item{row.names}{this argument gets passed on to \code{\link{read.table}} and will be used for the row names of the phenoData slot.} \item{varMetadata.char}{lines beginning with this character are used for the \code{varMetadata} slot. See examples.} \item{sep, header, quote, stringsAsFactors, ...}{further arguments that get passed on to \code{\link{read.table}} or \code{write.table}.} \item{widget}{logical. Currently this is \emph{not} implemented, and setting this option to \code{TRUE} will result in an error. In a precursor of this function, \code{read.phenoData}, this option could be used to open an interactive GUI widget for entering the data.} \item{sampleNames}{optional argument that could be used in conjunction with \code{widget}; do not use.} \item{append, fileEncoding}{Arguments as described in \code{\link{write.table}}}. } \details{ The function \code{\link{read.table}} is used to read \code{pData}. The argument \code{varMetadata.char} is passed on to that function as its argument \code{comment.char}. Lines beginning with \code{varMetadata.char} are expected to contain further information on the column headers of \code{pData}. The format is of the form: \code{# variable: textual explanation of the variable, units, measurement method, etc.} (assuming that \code{#} is the value of \code{varMetadata.char}). See also examples. \code{write.AnnotatedDataFrame} outputs \code{varLabels} and \code{varMetadata(x)$labelDescription} as commented header lines, and \code{pData(x)} as a with \code{write.table}. } \value{ \code{read.AnnotatedDataFrame}: An instance of class \code{AnnotatedDataFrame} \code{write.AnnotatedDataFrame}: \code{NULL}, invisibly. } \author{Martin Morgan and Wolfgang Huber, based on \code{read.phenoData} by Rafael A. Irizarry.} \seealso{\code{\link{AnnotatedDataFrame}} for additional methods, \code{\link{read.table}} for details of reading in phenotypic data} \examples{ exampleFile = system.file("extdata", "pData.txt", package="Biobase") adf <- read.AnnotatedDataFrame(exampleFile) adf head(pData(adf)) head(noquote(readLines(exampleFile)), 11) write.AnnotatedDataFrame(adf) # write to console by default } \keyword{file} \keyword{manip} Biobase/man/read.MIAME.Rd0000644000175200017520000000245114516003524015746 0ustar00biocbuildbiocbuild\name{read.MIAME} \alias{read.MIAME} \title{ Read MIAME Information into an Instance of Class 'MIAME' } \description{ Reads MIAME information from a file or using a widget. } \usage{ read.MIAME(filename = NULL, widget = getOption("BioC")$Base$use.widgets, ...) } \arguments{ \item{filename}{Filename from which to read MIAME information.} \item{widget}{Logical. If \code{TRUE} and a filename is not given, a widget is used to enter information.} \item{\dots}{Further arguments to \code{scan}.} } \details{ Notice that the \code{\link{MIAME}} class tries to cover the MIAME entries that are not covered by other classes in Bioconductor. Namely, experimental design, samples, hybridizations, normalization controls, and pre-processing information. The function \code{\link{scan}} is used to read. The file must be a flat file with the different entries for the instance of MIAME class separated by carriage returns. The order should be: name, lab, contact, title, abstract, and url. Alternatively a widget can be used. } \value{An object of class \code{\link{MIAME}}.} \author{Rafael Irizarry } \seealso{\code{\link{MIAME}},\code{\link[tkWidgets]{tkMIAME}} } \examples{ miame <- read.MIAME(widget=FALSE) ##creates an empty instance show(miame) } \keyword{file} Biobase/man/readExpressionSet.Rd0000644000175200017520000000732314516003524017656 0ustar00biocbuildbiocbuild\name{readExpressionSet} \alias{readExpressionSet} \concept{ExpressionSet} \title{Read 'ExpressionSet'} \description{ Create an instance of class ExpressionSet by reading data from files. \sQuote{widget} functionality is not implemented for readExpressionSet. } \usage{ readExpressionSet(exprsFile, phenoDataFile, experimentDataFile, notesFile, path, annotation, ## arguments to read.* methods exprsArgs=list(sep=sep, header=header, row.names=row.names, quote=quote, ...), phenoDataArgs=list(sep=sep, header=header, row.names=row.names, quote=quote, stringsAsFactors=stringsAsFactors, ...), experimentDataArgs=list(sep=sep, header=header, row.names=row.names, quote=quote, stringsAsFactors=stringsAsFactors, ...), sep = "\t", header = TRUE, quote = "", stringsAsFactors = FALSE, row.names = 1L, ## widget widget = getOption("BioC")$Base$use.widgets, ...) } \arguments{ \item{exprsFile}{(character) File or connection from which to read expression values. The file should contain a matrix with rows as features and columns as samples. \code{\link{read.table}} is called with this as its \code{file} argument and further arguments given by \code{exprsArgs}.} \item{phenoDataFile}{(character) File or connection from which to read phenotypic data. \code{\link{read.AnnotatedDataFrame}} is called with this as its \code{file} argument and further arguments given by \code{phenoDataArgs}.} \item{experimentDataFile}{(character) File or connection from which to read experiment data. \code{\link{read.MIAME}} is called with this as its \code{file} argument and further arguments given by \code{experimentDataArgs}.} \item{notesFile}{(character) File or connection from which to read notes; \code{\link{readLines}} is used to input the file.} \item{path}{(optional) directory in which to find all the above files.} \item{annotation}{(character) A single character string indicating the annotation associated with this ExpressionSet.} \item{exprsArgs}{A list of arguments to be used with \code{\link{read.table}} when reading in the expression matrix.} \item{phenoDataArgs}{A list of arguments to be used (with \code{\link{read.AnnotatedDataFrame}}) when reading the phenotypic data.} \item{experimentDataArgs}{A list of arguments to be used (with \code{\link{read.MIAME}}) when reading the experiment data.} \item{sep, header, quote, stringsAsFactors, row.names}{arguments used by the \code{\link{read.table}}-like functions.} \item{widget}{A boolean value indicating whether widgets can be used. Widgets are NOT yet implemented for \code{read.AnnotatedDataFrame}.} \item{\dots}{Further arguments that can be passed on to the \code{\link{read.table}}-like functions.} } \details{ Expression values are read using the \code{\link{read.table}} function. Phenotypic data are read using the \code{\link{read.AnnotatedDataFrame}} function. Experiment data are read using the \code{\link{read.MIAME}} function. Notes are read using the \code{\link{readLines}} function. The return value must be a valid \code{ExpressionSet}. Only the \code{exprsFile} argument is required. } \value{ An instance of the \code{\linkS4class{ExpressionSet}} class. } \author{Martin Morgan } \seealso{\code{\link{ExpressionSet}} for additional methods.} \examples{ exprsFile = system.file("extdata", "exprsData.txt", package="Biobase") phenoFile = system.file("extdata", "pData.txt", package="Biobase") ## Read ExpressionSet with appropriate parameters obj = readExpressionSet(exprsFile, phenoFile, sep = "\t", header=TRUE) obj } \keyword{file} \keyword{manip} Biobase/man/reverseSplit.Rd0000644000175200017520000000163114516003524016672 0ustar00biocbuildbiocbuild\name{reverseSplit} \alias{reverseSplit} \title{ A function to reverse the role of names and values in a list. } \description{ Given a list with names \code{x} and values in a set \code{y} this function returns a list with names in \code{y} and values in \code{x}. } \usage{ reverseSplit(inList) } \arguments{ \item{inList}{ A named list with values that are vectors. } } \details{ First the list is unrolled to provide a two long vectors, names are repeated, once for each of their values. Then the names are \code{split} by the values. This turns out to be useful for inverting mappings between one set of identifiers and an other. } \value{ A list with length equal to the number of distinct values in the input list and values from the names of the input list. } \author{ R. Gentleman } \seealso{ \code{\link{split}}} \examples{ l1 = list(a=1:4, b=c(2,3), d=c(4,5)) reverseSplit(l1) } \keyword{ manip } Biobase/man/rowMedians.Rd0000644000175200017520000000315414516003524016315 0ustar00biocbuildbiocbuild\name{rowMedians} \alias{rowMedians} \alias{rowMedians,matrix-method} \alias{rowMedians,ExpressionSet-method} \title{Calculates the median for each row in a matrix} \description{ Calculates the median for each row in a matrix. } \usage{rowMedians(x, na.rm=FALSE, ...)} \arguments{ \item{x}{A \code{\link[base]{numeric}} NxK \code{\link[base]{matrix}}.} \item{na.rm}{If \code{\link[base:logical]{TRUE}}, \code{\link[base]{NA}}s are excluded first, otherwise not.} \item{...}{Not use.} } \value{ Returns a \code{\link[base]{numeric}} \code{\link[base]{vector}} of length N. } \section{Missing values}{ Missing values are excluded before calculating the medians. } \details{ The implementation of \code{rowMedians()} is optimized for both speed and memory. To avoid coercing to \code{\link[base]{double}}s (and hence memory allocation), there is a special implementation for \code{\link[base]{integer}} matrices. That is, if \code{x} is an \code{\link[base]{integer}} \code{\link[base]{matrix}}, then \code{rowMedians(as.double(x))} would require three times the memory of \code{rowMedians(x)}, but all this is avoided. } \author{Henrik Bengtsson} \seealso{ See \code{rowMeans()} in \code{\link[base]{colSums}}(). } \examples{ set.seed(1) x <- rnorm(n=234*543) x[sample(1:length(x), size=0.1*length(x))] <- NA dim(x) <- c(234,543) y1 <- rowMedians(x, na.rm=TRUE) y2 <- apply(x, MARGIN=1, FUN=median, na.rm=TRUE) stopifnot(all.equal(y1, y2)) x <- cbind(x1=3, x2=c(4:1, 2:5)) stopifnot(all.equal(rowMeans(x), rowMedians(x))) } \keyword{manip} Biobase/man/rowQ.Rd0000644000175200017520000000207014516003524015131 0ustar00biocbuildbiocbuild\name{rowQ} \alias{rowQ} \alias{rowQ,matrix,numeric-method} \alias{rowQ,ExpressionSet,numeric-method} \alias{rowMin} \alias{rowMax} \title{A function to compute empirical row quantiles.} \description{ This function computes the requested quantile for each row of a matrix, or of an \code{ExpressionSet}. } \usage{ rowQ(imat, which) rowMax(imat) rowMin(imat) } \arguments{ \item{imat}{Either a matrix or an \code{ExpressionSet}.} \item{which}{An integer indicating which order statistic should be returned.} } \details{ \code{rowMax} and \code{rowMin} simply call \code{rowQ} with the appropriate argument set. The argument \code{which} takes values between 1, for the minimum per row, and \code{ncol(imat)}, for the maximum per row. } \value{ A vector of length equal to the number of rows of the input matrix containing the requested quantiles. } \author{R. Gentleman} \seealso{ \code{\link{rowMedians}}. \code{rowMeans()} in \code{\link[base]{colSums}}(). } \examples{ data(sample.ExpressionSet) rowMin(sample.ExpressionSet) rowQ(sample.ExpressionSet, 4) } Biobase/man/selectChannels.Rd0000644000175200017520000000127014516003524017135 0ustar00biocbuildbiocbuild\name{selectChannels} \alias{selectChannels} \title{Create a new NChannelSet instance by selecting specific channels} \description{ This generic function extracts specific elements from an object, returning a instance of that object. } \usage{ selectChannels(object, names, ...) } \arguments{ \item{object}{An S4 object, typically derived from class \code{\link{eSet}}} \item{names}{Character vector of named channels.} \item{...}{Additional arguments.} } \value{ Instance of class \code{object}. } \author{Biocore} \examples{ obj <- NChannelSet(R=matrix(runif(100), 20, 5), G=matrix(runif(100), 20, 5)) ## G channel as NChannelSet selectChannels(obj, "G") } \keyword{manip} Biobase/man/selectSome.Rd0000644000175200017520000000230614516003524016306 0ustar00biocbuildbiocbuild\name{selectSome} \alias{selectSome} \title{Extract elements of a vector for concise rendering} \description{ Extract the first and last several elements of a vector for concise rendering; insert ellipses to indicate elided elements. This function is primarily meant for developer rather than end-user use. } \usage{ selectSome(obj, maxToShow=5) } \arguments{ \item{obj}{A vector.} \item{maxToShow}{The number of elements (including "...") to render.} } \details{ This function can be used in 'show' methods to give users exemplars of the tokens used in a vector. For example, an \code{\link{ExpressionSet}} built from a yeast experiment might have features enumerated using systematic gene names (e.g., YPR181C) or standard gene names (e.g., SEC23). The \code{\link{show}} method for \code{\link{ExpressionSet}} uses \code{selectSome} to alert the user to the tokens used, and thereby to indicate what vocabulary must be understood to work with the feature names. } \value{ A string vector with at most \code{maxToShow} plus 1 elements, where an ellipsis ("...") is included to indicate incompleteness of the excerpt. } \author{Martin Morgan } \examples{ selectSome(1:20) } \keyword{utilities} Biobase/man/snpCall.Rd0000644000175200017520000000155014516003524015577 0ustar00biocbuildbiocbuild\name{snpCall} \alias{snpCall} \alias{snpCall<-} \alias{snpCallProbability} \alias{snpCallProbability<-} \title{Get and retrieve SNP call and call probability data.} \description{ These generic functions access the calls and call probabilities stored in objects. } \usage{ snpCall(object, ...) snpCall(object, ...) <- value snpCallProbability(object, ...) snpCallProbability(object, ...) <- value } \arguments{ \item{object}{Object, possibly derived from class \code{SnpSet}.} \item{value}{Matrix with rows representing SNP calls or call probabilities and columns samples.} \item{...}{Additional arguments available to methods.} } \value{ \code{snpCall} returns a matrix of SNP calls; \code{snpCallProbability} returns the corresponding matrix of standard errors, when available. } \author{Biocore} \seealso{\code{\link{SnpSet-class}}} \keyword{manip} Biobase/man/storageMode.Rd0000644000175200017520000000133314516003524016453 0ustar00biocbuildbiocbuild\name{storageMode} \alias{storageMode} \alias{storageMode<-} \title{Retrieve or set storage mode for eSets.} \description{ These generic functions report or change the storage mode used for \code{assayData}. } \usage{ storageMode(object) storageMode(object) <- value } \arguments{ \item{object}{Object, derived from class \code{eSet}} \item{value}{Character vector containing \code{"lockedEnvironment"},\code{"environment"}, or \code{"list"}. See \code{AssayData-class} for details.} } \value{ \code{storageMode} returns a length-1 character vector } \author{Biocore} \seealso{\code{\link{AssayData-class}}, \code{\link{eSet-class}} \code{\link{ExpressionSet-class}}, \code{\link{SnpSet-class}}} \keyword{manip} Biobase/man/strbreak.Rd0000644000175200017520000000157014516003524016022 0ustar00biocbuildbiocbuild\name{strbreak} \alias{strbreak} \title{Break Character Strings to Fit Width} \description{ Inserts line breaks (\code{collapse}) into input character strings. The main intention of this function is to prepare long strings for printing, so the output is not wider than \code{width}. } \usage{ strbreak(x, width=getOption("width"), exdent=2, collapse="\n") } \arguments{ \item{x}{a character vector} \item{width}{a positive integer giving the width of the output.} \item{exdent}{a positive integer specifying the indentation of subsequent lines after the first line.} \item{collapse}{a character. This is inserted to break lines.} } \author{Wolfgang Huber \url{http://www.ebi.ac.uk/huber}} \seealso{\code{\link{strwrap}}, \code{\link{substring}}} \examples{ longString = paste(rep(LETTERS, 10), collapse="", sep="") cat(strbreak(longString)) } \keyword{character} Biobase/man/subListExtract.Rd0000644000175200017520000000353414516003524017167 0ustar00biocbuildbiocbuild\name{subListExtract} \alias{subListExtract} \title{Extract the same element from the sublists of a list} \description{ Given a list of lists, this function can be used to extract a named element from each sublist. } \usage{ subListExtract(L, name, simplify = FALSE, keep.names = TRUE) } \arguments{ \item{L}{A list of named lists} \item{name}{The name of the element in the sublists that should be extracted. This should be a length one character vector.} \item{simplify}{When \code{TRUE}, the return value will be an atomic vector. If any extracted sublist value has length not equal to one and \code{simplify=TRUE}, an error will be raised. When \code{FALSE}, a list is returned containing the extracted elements.} \item{keep.names}{If \code{TRUE} (default), the names of \code{L} will be attached to the returned vector.} } \details{ This function is implemented in C and is intended to be faster than calling \code{lapply} or \code{sapply}. } \value{ If \code{simplify=FALSE}, a list will be returned having the same length as \code{L}, but with each element containing the element named \code{name} from the corresponding inner list of \code{L}. When \code{simplify=TRUE}, an atomic vector will be returned containing the extracted elements. If any of the inner list elements do not have length one or cannot be put inside an atomic vector, an error will be raised. } \author{Seth Falcon} \examples{ list_size = 500000 innerL = list(foo="foo", bar="bar") L = rep(list(innerL), list_size) system.time({j0 = sapply(L, function(x) x$foo)}) system.time({j1 = subListExtract(L, "foo", simplify=TRUE)}) stopifnot(all.equal(j0, j1)) LS = L[1:3] names(LS) = LETTERS[1:3] subListExtract(LS, "bar", simplify=TRUE) subListExtract(LS, "bar", simplify=FALSE) subListExtract(LS, "bar", simplify=TRUE, keep.names=FALSE) } \keyword{manip} Biobase/man/testBioCConnection.Rd0000644000175200017520000000102014516003524017727 0ustar00biocbuildbiocbuild\name{testBioCConnection} \alias{testBioCConnection} \title{A function to check internet connectivity to Bioconductor} \description{ This function will attempt to determine if the user has internet connectivity to the Bioconductor website. This is useful in many situations dealing with code that uses automated downloads and other such things. } \usage{ testBioCConnection() } \value{ TRUE if a connection is possible, FALSE if not. } \author{Jeff Gentry} \examples{ z <- testBioCConnection() } \keyword{utilities} Biobase/man/updateObjectTo.Rd0000644000175200017520000000276114516003524017124 0ustar00biocbuildbiocbuild\name{updateObjectTo} \alias{updateObjectTo} \alias{updateObjectTo,ANY,ANY-method} \title{Update an object to the class definition of a template} \description{ The \code{updateObjectTo} generic function returns an instance of \code{object} updated to the class definition of \code{template}. It requires that the class of the returned object be the same as the class of the \code{template} argument, and that the object is valid. Usually, updating proceeds by modifying slots in \code{template} with information from \code{object}, and returning \code{template}. Use \code{\link{as}} to coerce an object from one type to another; \code{updateObjectTo} might be useful to update a virtual superclass. By default, \code{updateObjectTo} has the following behavior: \describe{ \item{\code{updateObjectTo(ANY-object,ANY-template)}}{Attempt \code{as(ANY-object,class(ANY-template))}.} } } \usage{ updateObjectTo(object, template, \dots, verbose=FALSE) } \arguments{ \item{object}{Object to be updated.} \item{template}{Instance representing a template for updating object.} \item{\dots}{Additional arguments, for use in specific update methods.} \item{verbose}{A logical, indicating whether information about the update should be reported. Use \code{message} to report this.} } \value{ \code{updateObjectTo} returns a valid instance of \code{template}. } \author{Biocore team} \seealso{ \code{\link[BiocGenerics]{updateObject}}, \code{\link{Versions-class}} } \keyword{manip} Biobase/man/updateOldESet.Rd0000644000175200017520000000200614516003524016702 0ustar00biocbuildbiocbuild\name{updateOldESet} \alias{updateOldESet} \title{Update previously created eSet object to current eSet structure} \description{ This function updates \code{eSet} objects created in previous versions of Biobase to the current class structure. Warnings indicate when coercions change how data in the \code{from} object are altered. If the \code{from} object was not a valid object of the original eSet class, then \code{updateOldESet} may fail. } \usage{ updateOldESet(from, toClass, ...) } \arguments{ \item{from}{Object created using a previous version of the eSet class.} \item{toClass}{Character string identifying new class, e.g., \code{"ExpressionSet"}} \item{...}{Additional arguments passed to the initialization method for class \code{toClass}} } \value{ Valid object of class \code{toClass}. } \author{Biocore} \seealso{\code{\link{eSet-class}}, \code{\link{ExpressionSet-class}}, \code{\link{SnpSet-class}}} \examples{ \dontrun{ updateOldESet(oldESet, "ExpressionSet") }} \keyword{manip} Biobase/man/userQuery.Rd0000644000175200017520000000122714516003524016210 0ustar00biocbuildbiocbuild\name{userQuery} \alias{userQuery} \title{A function to query the user for input} \description{ This function will output a given message and seek a response from the user, repeating the message until the input is from a valid set provided by the code. } \usage{ userQuery(msg, allowed = c("y", "n"), default = "n", case.sensitive = FALSE) } \arguments{ \item{msg}{The output message} \item{allowed}{Allowed input from the user} \item{default}{Default response if called in batch mode} \item{case.sensitive}{Is the response case sensitive? Defaults to \code{FALSE}} } \value{ The input from the user } \author{Jeff Gentry} \keyword{utilities} Biobase/man/validMsg.Rd0000644000175200017520000000117414516003524015753 0ustar00biocbuildbiocbuild\name{validMsg} \alias{validMsg} \title{Conditionally append result to validity message} \description{ This function facilitates constructing messages during S4 class validation, and is meant for developer rather than end-user use. } \usage{ validMsg(msg, result) } \arguments{ \item{msg}{A character vector or NULL.} \item{result}{Any vector.} } \details{ This function appends \code{result} to \code{msg}, but only if \code{result} is a character vector. } \author{Martin Morgan } \examples{ msg <- NULL validMsg(msg, FALSE) # still NULL msg <- validMsg(msg, "one") validMsg(msg, "two") } \keyword{utilities} Biobase/src/0000755000175200017520000000000014516024030013722 5ustar00biocbuildbiocbuildBiobase/src/Rinit.c0000644000175200017520000000157014516003524015163 0ustar00biocbuildbiocbuild#include #include #include SEXP anyMissing(SEXP); SEXP rowQ(SEXP, SEXP); SEXP rowMedians(SEXP, SEXP, SEXP, SEXP); SEXP rowQuantiles(SEXP, SEXP); SEXP unsafe_set_slot(SEXP obj, SEXP slot, SEXP value); SEXP lc_prefix(SEXP, SEXP); SEXP sublist_extract(SEXP, SEXP, SEXP, SEXP); /* Automate using sed or something. */ #if _MSC_VER >= 1000 __declspec(dllexport) #endif static const R_CallMethodDef R_CallDef[] = { {"anyMissing", (DL_FUNC)&anyMissing, 1}, {"rowQ", (DL_FUNC)&rowQ, 2}, {"rowMedians", (DL_FUNC)&rowMedians, 4}, {"unsafe_set_slot", (DL_FUNC)&unsafe_set_slot, 3}, {"lc_prefix", (DL_FUNC)&lc_prefix, 2}, {"sublist_extract", (DL_FUNC)&sublist_extract, 4}, {NULL, NULL, 0}, }; void R_init_Biobase(DllInfo *info) { R_registerRoutines(info,NULL,R_CallDef,NULL,NULL); } Biobase/src/anyMissing.c0000644000175200017520000000403414516003524016215 0ustar00biocbuildbiocbuild/*************************************************************************** Public methods: anyMissing(SEXP x) TO DO: Support list():s too. Copyright Henrik Bengtsson, 2007 **************************************************************************/ /* Include R packages */ #include SEXP anyMissing(SEXP x) { SEXP ans; int n, ii; PROTECT(ans = allocVector(LGLSXP, 1)); LOGICAL(ans)[0] = 0; n = length(x); /* anyMissing() on zero-length objects should always return FALSE, just like any(double(0)). */ if (n == 0) { UNPROTECT(1); return(ans); } switch (TYPEOF(x)) { case REALSXP: for (ii=0; ii < n; ii++) { if ISNAN(REAL(x)[ii]) { LOGICAL(ans)[0] = 1; break; } } break; case INTSXP: for (ii=0; ii < n; ii++) { if (INTEGER(x)[ii] == NA_INTEGER) { LOGICAL(ans)[0] = 1; break; } } break; case LGLSXP: for (ii=0; ii < n; ii++) { if (LOGICAL(x)[ii] == NA_LOGICAL) { LOGICAL(ans)[0] = 1; break; } } break; case CPLXSXP: for (ii=0; ii < n; ii++) { if (ISNAN(COMPLEX(x)[ii].r) || ISNAN(COMPLEX(x)[ii].i)) { LOGICAL(ans)[0] = 1; break; } } break; case STRSXP: for (ii=0; ii < n; ii++) { if (STRING_ELT(x, ii) == NA_STRING) { LOGICAL(ans)[0] = 1; break; } } break; case RAWSXP: /* no such thing as a raw NA */ break; default: break; /* warningcall(call, _("%s() applied to non-vector of type '%s'"), "anyMissing", type2char(TYPEOF(x))); */ } /* switch() */ UNPROTECT(1); /* ans */ return(ans); } // anyMissing() /*************************************************************************** HISTORY: 2007-08-14 [HB] o Created using do_isna() in src/main/coerce.c as a template. **************************************************************************/ Biobase/src/envir.c0000644000175200017520000001112314516003524015214 0ustar00biocbuildbiocbuild/* Copyright R. Gentleman, 2003 */ #include #include #include #include /* fast computation of row order statistics */ SEXP rowQ(SEXP inmat, SEXP which) { SEXP ans; int i, j, nrow, ncol, medval; double *rowData; /* we can do integers later */ if( !isMatrix(inmat) || !isReal(inmat) ) error("'imat' must be a numeric matrix"); /* FIXME: should check for FINITE/NA */ if( !isNumeric(which) || length(which) != 1 ) error("'which' order statistic must be numeric"); /* subtract one here, since rPsort does zero based addressing*/ medval = asInteger(which) - 1; PROTECT(ans = getAttrib(inmat, R_DimSymbol)); nrow = INTEGER(ans)[0]; ncol = INTEGER(ans)[1]; /* sanity check */ if( medval < 0 || medval >= ncol ) error("cannot calculate order statistic on object with %d columns", ncol); PROTECT(ans = allocVector(REALSXP, nrow)); rowData = (double *) R_alloc(ncol, sizeof(double)); for( i=0; i min_nc) break; } ans = mkString(prefix); Free(prefix); UNPROTECT(1); return ans; } #ifdef ALLDONENOW ##looks like we need to either expose some of the ls functionality ##or copy a lot of code - my preference is to expose the ls ## code looks a lot like do_ls; but we get the objects too... ## with a duplicate - I suppose -- otherwise it will be a problem.... SEXP envToList(SEXP env, SEXP allnames) { SEXP nms, ans; int i, k, n; if( !isEnvironment(env) ) error("argument must be an environment"); if( !isLogical(allnames) ) error("second argument must be a logical"); all = asLogical(allNames); if (all == NA_LOGICAL) all = 0; /* Step 1 : Compute the Vector Size */ k = 0; n = length(env); for (i = 0; i < n; i++) { if (VECTOR_ELT(env, i) == R_NilValue) k += BuiltinSize(all, 0); else if (isEnvironment(VECTOR_ELT(env, i))) { if (HASHTAB(VECTOR_ELT(env, i)) != R_NilValue) k += HashTableSize(HASHTAB(VECTOR_ELT(env, i)), all); else k += FrameSize(FRAME(VECTOR_ELT(env, i)), all); } else error("invalid envir= argument"); } /* Step 2 : Allocate and Fill the Result */ nms = allocVector(STRSXP, k); ans = allocVector(VECSXP, k); k = 0; for (i = 0; i < n; i++) { if (VECTOR_ELT(env, i) == R_NilValue) { BuiltinNames(all, 0, nms, &k); } else if (isEnvironment(VECTOR_ELT(env, i))) { if (HASHTAB(VECTOR_ELT(env, i)) != R_NilValue) { HashTableNames(HASHTAB(VECTOR_ELT(env, i)), all, nms, &k); } else { FrameNames(FRAME(VECTOR_ELT(env, i)), all, nms, &k); } } } UNPROTECT(1); sortVector(ans, FALSE); return ans; } #endif Biobase/src/matchpt.c0000644000175200017520000000351114516003524015533 0ustar00biocbuildbiocbuild/* finds nearest neighbour, either for every point in one array (if only one is given) or nearest neighbour in the second array for every point in the first */ /* O.Sklyar, EBI, 2006 */ #include #include #define INDEX(i, j, n) ((i) + (j)*(n)) /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ SEXP matchpt(SEXP x, SEXP y) { int * dimx; double dist, mdist, tmp, *dx, *dy, *pd; int i, j, k, index, nptx, npty, ncol, noY, *pidx; SEXP res, namesres, idx, d; dimx = INTEGER(GET_DIM(x)); nptx = dimx[0]; ncol = dimx[1]; dx = REAL(x); if (y != R_NilValue) { dy = REAL(y); npty = INTEGER(GET_DIM(y))[0]; noY = 0; } else { dy = dx; npty = nptx; noY = 1; } PROTECT(d = allocVector(REALSXP, nptx)); PROTECT(idx = allocVector(INTSXP, nptx)); pd = REAL(d); pidx = INTEGER(idx); for (i = 0; i SEXP rowMedians_Real(SEXP x, int nrow, int ncol, int narm, int hasna, int byrow); SEXP rowMedians_Integer(SEXP x, int nrow, int ncol, int narm, int hasna, int byrow); /* TEMPLATE rowMedians_(...): - SEXP rowMedians_Real(...); - SEXP rowMedians_Integer(...); */ #define METHOD rowMedians #define X_TYPE 'i' #include "rowMedians_TYPE-template.h" #define X_TYPE 'r' #include "rowMedians_TYPE-template.h" #undef METHOD SEXP rowMedians(SEXP x, SEXP naRm, SEXP hasNA, SEXP byRow) { int narm, hasna, byrow; SEXP ans; int nrow, ncol; /* Argument 'x': */ if (!isMatrix(x)) error("Argument 'x' must be a matrix."); /* Argument 'naRm': */ if (!isLogical(naRm)) error("Argument 'naRm' must be a single logical."); if (length(naRm) != 1) error("Argument 'naRm' must be a single logical."); narm = LOGICAL(naRm)[0]; if (narm != TRUE && narm != FALSE) error("Argument 'naRm' must be either TRUE or FALSE."); /* Argument 'hasNA': */ hasna = LOGICAL(hasNA)[0]; /* Argument 'byRow': */ byrow = INTEGER(byRow)[0]; /* Get dimensions of 'x'. */ PROTECT(ans = getAttrib(x, R_DimSymbol)); if (byrow) { nrow = INTEGER(ans)[0]; ncol = INTEGER(ans)[1]; } else { nrow = INTEGER(ans)[1]; ncol = INTEGER(ans)[0]; } /* Double matrices are more common to use. */ if (isReal(x)) { ans = rowMedians_Real(x, nrow, ncol, narm, hasna, byrow); } else if (isInteger(x)) { ans = rowMedians_Integer(x, nrow, ncol, narm, hasna, byrow); } else { UNPROTECT(1); error("Argument 'x' must be a numeric."); } UNPROTECT(1); return(ans); } /* rowMedians() */ /*************************************************************************** HISTORY: 2013-01-13 [HB] o Added argument 'byRow' to rowMedians() and dropped colMedians(). o Using internal arguments 'by_row' instead of 'by_column'. 2011-12-11 [HB] o BUG FIX: rowMediansReal(..., na.rm=TRUE) did not handle NaN:s, only NA:s. Note that NaN:s does not exist for integers. 2011-10-12 [HJ] o Added colMedians(). o Now rowMediansInteger/Real() can operate also by columns, cf. argument 'by_column'. 2007-08-14 [HB] o Added checks for user interrupts every 1000 line. o Added argument 'hasNA' to rowMedians(). 2005-12-07 [HB] o BUG FIX: When calculating the median of an even number (non-NA) values, the length of the second sort was one element too short, which made the method to freeze, i.e. rPsort(rowData, qq, qq) is now (...qq+1, qq). 2005-11-24 [HB] o By implementing a special version for integers, there is no need to coerce to double in R, which would take up twice the amount of memory. o rowMedians() now handles NAs too. o Adopted from rowQuantiles.c in Biobase of Bioconductor. **************************************************************************/ Biobase/src/rowMedians_TYPE-template.h0000644000175200017520000001355714516003524020675 0ustar00biocbuildbiocbuild/*********************************************************************** TEMPLATE: SEXP rowMedians_(...) GENERATES: SEXP rowMedians_Integer(SEXP x, int nrow, int ncol, int narm, int hasna, int byrow) SEXP rowMedians_Real(SEXP x, int nrow, int ncol, int narm, int hasna, int byrow) Arguments: The following macros ("arguments") should be defined for the template to work as intended. - METHOD: the name of the resulting function - X_TYPE: 'i' or 'r' Authors: Adopted from rowQuantiles.c by R. Gentleman. Template by Henrik Bengtsson. Copyright: Henrik Bengtsson, 2007-2013 ***********************************************************************/ #include #include #include /* Expand arguments: X_TYPE => (X_C_TYPE, X_IN_C, X_ISNAN, [METHOD_NAME]) */ #include "templates-types.h" #if X_TYPE == 'i' #define PSORT iPsort #elif X_TYPE == 'r' #define PSORT rPsort #endif SEXP METHOD_NAME(SEXP x, int nrow, int ncol, int narm, int hasna, int byrow) { SEXP ans; int isOdd; int ii, jj, kk, qq; int *colOffset; X_C_TYPE *rowData, *xx, value; xx = X_IN_C(x); /* R allocate memory for the 'rowData'. This will be taken care of by the R garbage collector later on. */ rowData = (X_C_TYPE *) R_alloc(ncol, sizeof(X_C_TYPE)); /* R allocate a double vector of length 'nrow' Note that 'nrow' means 'ncol' if byrow=FALSE. */ PROTECT(ans = allocVector(REALSXP, nrow)); /* If there are no missing values, don't try to remove them. */ if (hasna == FALSE) narm = FALSE; /* When narm == FALSE, isOdd and qq are the same for all rows */ if (narm == FALSE) { isOdd = (ncol % 2 == 1); qq = (int)(ncol/2) - 1; } else { isOdd = FALSE; qq = 0; } value = 0; /* Pre-calculate the column offsets */ colOffset = (int *) R_alloc(ncol, sizeof(int)); // HJ begin if (byrow) { for(jj=0; jj < ncol; jj++) colOffset[jj] = (int)jj*nrow; } else { for(jj=0; jj < ncol; jj++) colOffset[jj] = jj; } // HJ end if (hasna == TRUE) { for(ii=0; ii < nrow; ii++) { if(ii % 1000 == 0) R_CheckUserInterrupt(); int rowIdx = byrow ? ii : ncol*ii; //HJ kk = 0; /* The index of the last non-NA value detected */ for(jj=0; jj < ncol; jj++) { value = xx[rowIdx+colOffset[jj]]; //HJ if (X_ISNAN(value)) { if (narm == FALSE) { kk = -1; break; } } else { rowData[kk] = value; kk = kk + 1; } } if (kk == 0) { REAL(ans)[ii] = R_NaN; } else if (kk == -1) { REAL(ans)[ii] = R_NaReal; } else { /* When narm == TRUE, isOdd and qq may change with row */ if (narm == TRUE) { isOdd = (kk % 2 == 1); qq = (int)(kk/2) - 1; } /* Permute x[0:kk-1] so that x[qq] is in the correct place with smaller values to the left, ... */ PSORT(rowData, kk, qq+1); value = rowData[qq+1]; if (isOdd == TRUE) { REAL(ans)[ii] = (double)value; } else { if (narm == TRUE || !X_ISNAN(value)) { /* Permute x[0:qq-2] so that x[qq-1] is in the correct place with smaller values to the left, ... */ PSORT(rowData, qq+1, qq); if (X_ISNAN(rowData[qq])) REAL(ans)[ii] = R_NaReal; else REAL(ans)[ii] = ((double)(rowData[qq] + value))/2; } else { REAL(ans)[ii] = (double)value; } } } } } else { for(ii=0; ii < nrow; ii++) { if(ii % 1000 == 0) R_CheckUserInterrupt(); int rowIdx = byrow ? ii : ncol*ii; //HJ for(jj=0; jj < ncol; jj++) rowData[jj] = xx[rowIdx+colOffset[jj]]; //HJ /* Permute x[0:ncol-1] so that x[qq] is in the correct place with smaller values to the left, ... */ PSORT(rowData, ncol, qq+1); value = rowData[qq+1]; if (isOdd == TRUE) { REAL(ans)[ii] = (double)value; } else { /* Permute x[0:qq-2] so that x[qq-1] is in the correct place with smaller values to the left, ... */ PSORT(rowData, qq+1, qq); REAL(ans)[ii] = (double)((rowData[qq] + value))/2; } } } /* if (hasna ...) */ UNPROTECT(1); return(ans); } /* Undo template macros */ #undef PSORT #include "templates-types_undef.h" /*************************************************************************** HISTORY: 2013-04-23 [HB] o BUG FIX: The integer template of rowMedians_() would not handle ties properly. This was because ties were calculated as '(double)((rowData[qq] + value)/2)' instead of '((double)(rowData[qq] + value))/2'. 2013-01-13 [HB] o Merged rowMedians_Integer() and rowMedians_Read() into template rowMedians_(). 2013-01-13 [HB] o Using internal arguments 'by_row' instead of 'by_column'. 2011-12-11 [HB] o BUG FIX: rowMediansReal(..., na.rm=TRUE) did not handle NaN:s, only NA:s. Note that NaN:s does not exist for integers. 2011-10-12 [HJ] o Added colMedians(). o Now rowMediansInteger/Real() can operate also by columns, cf. argument 'by_column'. 2007-08-14 [HB] o Added checks for user interrupts every 1000 line. o Added argument 'hasNA' to rowMedians(). 2005-12-07 [HB] o BUG FIX: When calculating the median of an even number (non-NA) values, the length of the second sort was one element too short, which made the method to freeze, i.e. rPsort(rowData, qq, qq) is now (...qq+1, qq). 2005-11-24 [HB] o By implementing a special version for integers, there is no need to coerce to double in R, which would take up twice the amount of memory. o rowMedians() now handles NAs too. o Adopted from rowQuantiles.c in Biobase of Bioconductor. **************************************************************************/ Biobase/src/sublist_extract.c0000644000175200017520000001170714516003524017320 0ustar00biocbuildbiocbuild#include static SEXP list_el(SEXP list, SEXP name) { SEXP elmt = R_NilValue; SEXP names = getAttrib(list, R_NamesSymbol); SEXP cur_name; const char *cname = CHAR(name); int i, found = 0; for (i = 0; i < length(list); i++) { cur_name = STRING_ELT(names, i); if (cur_name == name || strcmp(CHAR(cur_name), cname) == 0) { elmt = VECTOR_ELT(list, i); found = 1; break; } } if (!found) error("no element named '%s'", cname); return elmt; } Rboolean checkScalarLogical(SEXP v, Rboolean na_ok) { if (!isLogical(v)) error("expecting a logical vector, found a %s", type2char(TYPEOF(v))); if (length(v) != 1) error("expecting a logical vector of length one, found length %d", length(v)); if (!na_ok && LOGICAL(v)[0] == NA_LOGICAL) error("found NA where TRUE/FALSE needed"); return TRUE; } static void fill_integer(SEXP L, SEXP name, SEXP dest) { SEXP el; int *ansi; int i; ansi = INTEGER(dest); for (i = 0; i < length(L); i++) { el = list_el(VECTOR_ELT(L, i), name); if (length(el) != 1) error("unable to simplify, element %d has length %d", i, length(el)); ansi[i] = INTEGER(el)[0]; } } static void fill_double(SEXP L, SEXP name, SEXP dest) { SEXP el; double *ansd; int i; ansd = REAL(dest); for (i = 0; i < length(L); i++) { el = list_el(VECTOR_ELT(L, i), name); if (length(el) != 1) error("unable to simplify, element %d has length %d", i, length(el)); ansd[i] = REAL(el)[0]; } } static void fill_logical(SEXP L, SEXP name, SEXP dest) { SEXP el; int *ansi; int i; ansi = LOGICAL(dest); for (i = 0; i < length(L); i++) { el = list_el(VECTOR_ELT(L, i), name); if (length(el) != 1) error("unable to simplify, element %d has length %d", i, length(el)); ansi[i] = LOGICAL(el)[0]; } } static void fill_complex(SEXP L, SEXP name, SEXP dest) { SEXP el; Rcomplex *anscplx; int i; anscplx = COMPLEX(dest); for (i = 0; i < length(L); i++) { el = list_el(VECTOR_ELT(L, i), name); if (length(el) != 1) error("unable to simplify, element %d has length %d", i, length(el)); anscplx[i] = COMPLEX(el)[0]; } } static void fill_string(SEXP L, SEXP name, SEXP dest) { SEXP el; int i; for (i = 0; i < length(L); i++) { el = list_el(VECTOR_ELT(L, i), name); if (length(el) != 1) error("unable to simplify, element %d has length %d", i, length(el)); SET_STRING_ELT(dest, i, STRING_ELT(el, 0)); } } static void fill_raw(SEXP L, SEXP name, SEXP dest) { SEXP el; unsigned char *ansr; int i; ansr = RAW(dest); for (i = 0; i < length(L); i++) { el = list_el(VECTOR_ELT(L, i), name); if (length(el) != 1) error("unable to simplify, element %d has length %d", i, length(el)); ansr[i] = RAW(el)[0]; } } SEXP sublist_extract(SEXP L, SEXP namev, SEXP simplify, SEXP keep_names) { SEXP name, el, ans, ansnms; int i; if (!isNewList(L)) error("'L' must be a list"); if (!isString(namev) || length(namev) != 1) error("'name' must be a character vector of length one"); name = STRING_ELT(namev, 0); if (name == NA_STRING) error("'name' cannot be NA"); checkScalarLogical(simplify, 0); checkScalarLogical(keep_names, 0); if (LOGICAL(simplify)[0]) { if (!length(L)) error("can't extract from an empty list when simplify=TRUE"); el = list_el(VECTOR_ELT(L, 0), name); if (length(el) != 1) error("unable to simplify, element 0 has length %d", length(el)); PROTECT(ans = allocVector(TYPEOF(el), length(L))); switch (TYPEOF(el)) { case REALSXP: fill_double(L, name, ans); break; case INTSXP: fill_integer(L, name, ans); break; case LGLSXP: fill_logical(L, name, ans); break; case CPLXSXP: fill_complex(L, name, ans); break; case STRSXP: fill_string(L, name, ans); break; case RAWSXP: fill_raw(L, name, ans); break; default: error("unample to simplify when type is '%s'", type2char(TYPEOF(el))); break; } } else { PROTECT(ans = allocVector(VECSXP, length(L))); for (i = 0; i < length(L); i++) { SET_VECTOR_ELT(ans, i, list_el(VECTOR_ELT(L, i), name)); } } if (LOGICAL(keep_names)[0]) { ansnms = duplicate(getAttrib(L, R_NamesSymbol)); setAttrib(ans, R_NamesSymbol, ansnms); } UNPROTECT(1); return ans; } Biobase/src/templates-types.h0000644000175200017520000000162114516003524017240 0ustar00biocbuildbiocbuild/* * Sets type-specific macros */ #define CONCAT(x,y) x ##_## y #define CONCAT_MACROS(x,y) CONCAT(x,y) /* Data type macros for argument 'x' */ #if X_TYPE == 'i' #ifndef METHOD_NAME #define METHOD_NAME CONCAT_MACROS(METHOD, Integer) #endif #define X_C_TYPE int #define X_IN_C INTEGER #define X_ISNAN(x) (x == NA_INTEGER) #elif X_TYPE == 'r' #ifndef METHOD_NAME #define METHOD_NAME CONCAT_MACROS(METHOD, Real) #endif #define X_C_TYPE double #define X_IN_C REAL #define X_ISNAN(x) ISNAN(x) #endif /* Data type macros for result ('ans') */ #ifndef ANS_TYPE /* Default to same as 'x' */ #define ANS_TYPE X_TYPE #endif #if ANS_TYPE == 'i' #define ANS_SXP INTSXP #define ANS_NA NA_INTEGER #define ANS_C_TYPE int #define ANS_IN_C INTEGER #elif ANS_TYPE == 'r' #define ANS_SXP REALSXP #define ANS_NA NA_REAL #define ANS_C_TYPE double #define ANS_IN_C REAL #endif Biobase/src/templates-types_undef.h0000644000175200017520000000032314516003524020417 0ustar00biocbuildbiocbuild#undef CONCAT #undef CONCAT_MACROS #undef METHOD_NAME #undef X_C_TYPE #undef X_IN_C #undef X_ISNAN #undef ANS_SXP #undef ANS_NA #undef ANS_C_TYPE #undef ANS_IN_C #undef X_TYPE #undef ANS_TYPE #undef MARGIN Biobase/tests/0000755000175200017520000000000014516003524014302 5ustar00biocbuildbiocbuildBiobase/tests/test-all.R0000644000175200017520000000004614516003524016152 0ustar00biocbuildbiocbuildBiocGenerics:::testPackage("Biobase") Biobase/tests/test-rowMedians.R0000644000175200017520000000570714516003524017523 0ustar00biocbuildbiocbuildlibrary(Biobase) set.seed(1) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Consistency checks # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # rowMedians() by rowQ() rowMedians2 <- function(imat) { nr <- ncol(imat) half <- (nr + 1)/2 if (nr%%2 == 1) { return(rowQ(imat, half)) } else { return((rowQ(imat, half) + rowQ(imat, half+1))/2) } } cat("Consistency checks:\n") set.seed(1) for (kk in 1:20) { cat("Random test #", kk, "\n", sep="") # Simulate data in a matrix of any shape nrow <- sample(2000, size=1) ncol <- sample(2000, size=1) x <- rnorm(nrow*ncol) dim(x) <- c(nrow, ncol) # Add NAs? nas <- sample(c(TRUE,FALSE), size=1) if (nas) { nna <- sample(nrow*ncol, size=1) x[sample(length(x), size=nna)] <- NA } na.rm <- nas t1 <- system.time({ y1 <- rowMedians(x, na.rm=na.rm) }) t2 <- system.time({ y2 <- apply(x, MARGIN=1, FUN=median, na.rm=na.rm) }) # When all values of 'y2' are NA, 'y2' is logical if (is.logical(y2)) y2 <- as.double(y2) stopifnot(all.equal(y1,y2)) cat(sprintf("rowMedians()/apply(): %.3g\n", (t1/t2)[3])) if (!nas) { t3 <- system.time({ y3 <- rowMedians2(x) }) stopifnot(all.equal(y1,y3)) cat(sprintf("rowMedians()/rowMedians2(): %.3g\n", (t1/t3)[3])) } } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Benchmarking # - - - - - - - - - - - - - - - - - - - - - - - - - - - - cat("Benchmarking:\n") # Simulate data in a matrix of any shape nrow <- 1000 ncol <- 1000 x <- rnorm(nrow*ncol) dim(x) <- c(nrow, ncol) gc() t0 <- system.time({ for (rr in 1:20) y0 <- apply(x, MARGIN=1, FUN=median, na.rm=FALSE) }) gc() t1 <- system.time({ for (rr in 1:20) y1 <- rowMedians(x, na.rm=FALSE) }) gc() stopifnot(all.equal(y0,y1)) cat(sprintf("rowMedians()/apply(): %.3g\n", (t1/t0)[3])) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Consistency checks # - - - - - - - - - - - - - - - - - - - - - - - - - - - - cat("Consistency checks without NAs:\n") for (kk in 1:20) { cat("Random test #", kk, "\n", sep="") # Simulate data in a matrix of any shape nrow <- sample(1000, size=1) ncol <- sample(1000, size=1) x <- rnorm(nrow*ncol) dim(x) <- c(nrow, ncol) t0 <- system.time({ y0 <- apply(x, MARGIN=1, FUN=median, na.rm=FALSE) }) t1 <- system.time({ y1 <- rowMedians(x, na.rm=FALSE) }) stopifnot(all.equal(y0,y1)) } # for (kk in ...) cat("Consistency checks with NAs:\n") for (kk in 1:20) { cat("Random test #", kk, "\n", sep="") # Simulate data in a matrix of any shape nrow <- sample(1000, size=1) ncol <- sample(1000, size=1) x <- rnorm(nrow*ncol) dim(x) <- c(nrow, ncol) # Add NAs nna <- sample(nrow*ncol-1, size=1) x[sample(length(x), size=nna)] <- NA t0 <- system.time({ y0 <- apply(x, MARGIN=1, FUN=median, na.rm=TRUE) y0[is.na(y0)] <- NA }) t1 <- system.time({ y1 <- rowMedians(x, na.rm=TRUE) }) stopifnot(all.equal(y0,y1)) } # for (kk in ...) Biobase/vignettes/0000755000175200017520000000000014516024030015143 5ustar00biocbuildbiocbuildBiobase/vignettes/BiobaseDevelopment.Rmd0000644000175200017520000006023514516003524021371 0ustar00biocbuildbiocbuild--- title: "*Biobase* development and the new `eSet`" author: - name: "Martin T. Morgan" - name: "H. Khan" affiliation: "Vignette translation from Sweave to Rmarkdown / HTML" date: "`r format(Sys.time(), '%d %B, %Y')`" package: Biobase vignette: > %\VignetteIndexEntry{Notes for eSet developers} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} output: BiocStyle::html_document --- Revised 4 September, 2006 -- `featureData` slot. Revised 20 April 2007 -- minor wording changes; `verbose` and other arguments passed through `updateObject` example; introduce a second variant of `initialize` illustrating its use as a copy constructor. Revised 4 November, 2010 -- `experimentData` slot as *MIAxE* class. *MIAME* class is now subclass of *MIAxE*. # Introduction These notes help *developers* who are interested in using and extending the `eSet` class hierarchy, and using features in *Biobase*. The information here is not useful to regular users of *Biobase*. This document illustrates the *Biobase* structures and approaches that make it it easy for developers to creatively use and extend the `eSet` class hierarchy. The document starts with a brief description of the motivation for change, and a comparison of the old (before August, 2006) and new `eSet`s and related functionality (e.g.,the *Versioned* class and `updateObject` methods). We then illustrate how `eSet` can be extended to handle additional types of data, and how new methods can exploit the `eSet` class hierarchy. We conclude with a brief summary of lessons learned, useful developer-related side-effects of efforts to revise `eSet`, and possible directions for future development. # Comparing old and new What is an `eSet`? - Coordinate high through-put (e.g., gene expression) and phenotype data. - Provide common data container for diverse Bioconductor packages. Motivation for change (August, 2006). - What was broken? Complex data structure. Inconsistent object validity. No straight-forward way to extend `eSet` to new data types. - What forward-looking design goals did we have? Flexible storage model. Class hierarchy to promote code reuse and facilitate extension to new data objects. Methods for updating serialized instances. Key features in the redesign. - Simplified data content. - Structured class hierarchy. - Alternative storage modes. - More validity checking. - Conversion of example data in *Biobase*, and many other data sets elsewhere in Bioconductor, to *ExpressionSet*. - *Versioned* class information (in the development branch). - `updateObject` methods (in the development branch). # A quick tour ```{r echo=FALSE, message=FALSE} library(Biobase) ``` ## The `eSet` object: high-throughput experiments Purpose. - Coordinate and contain high-throughput genomic data. Structure: virtual base class. ```{r} getClass("eSet") ``` - `assayData`: high-throughput data. - `phenoData`: sample covariates. - `featureData`: feature covariates. - `experimentData`: experimental description. - `annotation`: assay description. - See below, and `?"eSet-class"` ### `assayData`: high-throughput data Purpose. - Efficiently and flexibly contain high-volume data. Structure: *list*, *environment*, or *lockEnvironment* class union. - Each element of *list* / *environment* / *lockEnvironment* is a matrix - Rows: *features*, e.g., gene names. - Columns: *samples* represented on each chip. - All matrices must have the same dimensions, row names, and column names. - Subclasses determine which matrices *must* be present. - See `?"AssayData-class"` ### `phenoData`: sample covariates Purpose. - Contain and document sample covariates. Structure: *AnnotatedDataFrame*. - `data`: *data.frame*. - Rows: sample identifiers. - Columns: measured covariates. - `varMetadata`: *data.frame*. - Rows: measured covariate labels. - Columns: covariate descriptors. - See `?"AnnotatedDataFrame-class"` ### `featureData`: feature covariates Purpose. - Contain and document feature covariates specific to the experiment; use the `annotation` slot for chip-level descriptions. Structure: *AnnotatedDataFrame*. - `data`: *data.frame*. - Rows: feature identifiers. These match row names of `assayData`. - Columns: measured covariates. - `varMetadata`: *data.frame*. - Rows: measured covariate labels. - Columns: covariate descriptors. - See `?"AnnotatedDataFrame-class"` ### `experimentData`: experiment description Purpose. - Summarize where and how the experiment was performed. Structure: *MIAxE* virtual class In Biobase version 2.11 the *MIAxE* virtual class was introduced as a general container for experiment meta-data. The *MIAME* class is now a subclass of *MIAxE*. See `?"MIAxE-class"`. The *MIAME* class structure is as follows - `title`: experiment title. - `name`: experimenter name(s). - `preprocessing: list` of pre-processing steps. - Additional slots. - See `?"MIAME-class"`. ### `annotation`: assay description Purpose. - Link experiment to annotation package. Structure: *character* - Label identifying annotation package. ## Important `eSet` methods Initialization. - `eSet` is `VIRTUAL`, initialize via subclass `callNextMethod` Accessors (get, set). - `assayData(obj); assayData(obj) <- value`: access or assign `assayData` - `phenoData(obj); phenoData(obj) <- value`: access or assign `phenoData` - `experimentData(obj); experimentData(obj) <- value`: access or assign `experimentData` - `annotation(obj); annotation(obj) <- value`: access or assign `annotation` Subsetting. - `obj[i, j]`: select genes $i$ and samples $j$. - `obj$name; obj$name <- value`: retrieve or assign covariate `name` in `phenoData` ### Additional `eSet` methods - `show`. - `storageMode`: influence how `assayData` is stored. - `updateObject`: update `eSet` objects to their current version. - `validObject`: ensure that `eSet` is valid. The `validObject` method is particularly important to `eSet`, ensuring that `eSet` contains consistent structure to data. ```{r} getValidity(getClass("eSet")) ``` The validity methods for `eSet` reflect our design goals. All `assayData` members must have identical row and column dimensions and `featureNames`. The names and numbers of samples must be the same in `assayData` and `phenoData` slots. Validity methods are defined for the classes underlying each slot as well. For instance, the validity methods for `AnnotatedDataFrame` check that variables used in `pData` are at least minimally described in `varMetadata`. ## Subclasses of `eSet` *Biobase* defines three classes that extend `eSet`. `ExpressionSet` (discussed further below) is meant to contain microarray gene expression data. *SnpSet* is a preliminary class to contain SNP data; other classes in development (e.g., in *oligo*) may provide alternative implementations for SNP data. *MultiSet* is an `ExpressionSet`-like class, but without restriction on the names (though not structure) of elements in the `assayData` slot. ### `ExpressionSet` Purpose: - Contain gene expression data. Required `assayData` members. - `exprs`, a matrix of expression values. Important methods. - Initialization (additional details below): ```{r eval=FALSE} obj <- new("ExpressionSet", phenoData = new("AnnotatedDataFrame"), experimentData = new("MIAME"), annotation = character(), exprs = new("matrix")) ``` - `exprs(obj), exprs(obj) <- value`: get or set `exprs`; methods defined for *ExpressionSet*, *AssayData*. ### *MultiSet* and *SnpSet* *MultiSet*. - Purpose: flexibly contain a collection of expression data matricies. - Required `assayData` members: none. *SnpSet*. - Purpose: contain genomic SNP calls. - Required `assayData` members: `call`, `callProbability`. # Comments on `assayData`: high-throughput data storage The `assayData` slot is meant to store high-throughput data. The idea is that the slot contains identically sized matrices containing expression or other data. All matrices in the slot must have the same dimension, and are structured so that rows represent 'features' and columns represent 'samples'. Validity methods enforce that row and column names of slot elements are identical. For technical reasons, creating instance of *AssayData* is slightly different from the way this is usually done in [R]{.sans-serif}. Normally, one creates an instance of a class with an expression like `new("ExpressionSet", ...)`, with the ... representing additional arguments. *AssayData* objects are created with ```{r eval=FALSE} assayDataNew("environment", elt) ``` where `elt` might be a matrix of expression values. For the curious, the reason for this setup stems from our desire to have a class that `is` a list or environment, rather than a class that has a slot that contains a list or environment. The `is` relationship is desirable to avoid unnecessary function calls to access slots, and requires that a class `contain` the base type (e.g., *environment*). Until recently an [R]{.sans-serif} object could not `contain` an *environment*. The `assayData` slot of `ExpressionSet` objects must contain a matrix named `exprs`. Nonetheless, the `ExpressionSet` validity method tries to be liberal -- it guarantees that the object has an `exprs` element, but allows for other elements too. The prudent developer wanting consistent additional data elements should derive a class from `ExpressionSet` that enforces the presence of their desired elements. The *AssayData* class allows for data elements to be stored in three different ways (see `?storageMode` and `?"storageMode<-"` for details): as a `list`, `environment`, or `lockedEnvironment`. Developers are probably familiar with `list` objects; a drawback is that `exprs` elements may be large, and some operations on lists in [R]{.sans-serif} may trigger creation of many copies of the the `exprs` element. This can be expensive in both space and time. Environments are nearly unique in [R]{.sans-serif}, in that they are passed by reference rather than value. This eliminates some copying, but has the unfortunate consequence that side-effects occur -- modifications to an environment inside a function influence the value of elements outside the function. For these reasons, environments can be useful as 'read only' arguments to functions, but can have unexpected consequences when functions modify their arguments. Locked environments implemented in *Biobase* try to strike a happy medium, allowing pass by reference for most operations but triggering (whole-environment) copying when elements in the environment are modified. The locking mechanism is enforced by only allowing known 'safe' operations to occur, usually by channeling user actions through the accessor methods: ```{r warning=FALSE} data(sample.ExpressionSet) storageMode(sample.ExpressionSet) tryCatch(assayData(sample.ExpressionSet)$exprs <- log(exprs(sample.ExpressionSet)), error=function(err) cat(conditionMessage(err))) ``` ```{r eval=FALSE} exprs(sample.ExpressionSet) <- log(exprs(sample.ExpressionSet))` ``` The `setReplaceMethod` for `exprs` (and `assayData`) succeeds by performing a deep copy of the entire environment. Because this is very inefficient, the recommended paradigm to update an element in a `lockedEnvironment` is to extract it, make many changes, and then reassign it. Developers can study `assayData` methods to learn more about how to lock and unlock environment bindings. *Biobase* allows the experienced user to employ (and run the risks of) environments, but the expectation is that most user objects are constructed with the default `lockedEnvironment` or `list`. A longer term consideration in designing *AssayData* was to allow more flexible methods of data storage, e.g., through database-hosted arrays. This is facilitated by using generic functions such as `exprs()` for data access, so that classes derived from *AssayData* can provide implementations appropriate for their underlying storage mode. # Extending `eSet` A designer wanting to implement `eSet` for a particular type of data creates a class that 'contains' `eSet`. The steps for doing this are described below. One example of such a class is `ExpressionSet`, designed to hold a matrix of gene expression values in the `assayData` slot. ```{r} getClass("ExpressionSet") getValidity(getClass("ExpressionSet")) ``` The data structure of an `ExpressionSet` is identical to that of `eSet`, and in fact is inherited (without additional slot creation) from `eSet`. The main difference is that the validity methods of `eSet` are augmented by a method to check that the `assayData` slot contains an entity named `"exprs"`. A valid `ExpressionSet` object must also satisfy all the validity requirements of `eSet`, but the developer does not explicitly invoke validity checking of the parts of the data structure inherited from `eSet`. ## Implementing a new class: a *SwirlSet* example We want the *Swirl* data set (see the `SW` two color data set that motivates this class) to contain four elements in the `assayData` slot: `R, G, Rb, Gb`. To derive a class from `eSet` for this data, we create a class, and provide initialization and validation methods. We create a class as follows: ```{r} setClass("SwirlSet", contains="eSet") ``` Notice that there are no new data elements in *SwirlSet* compared with `eSet`. The `initialize` method is written as ```{r message=FALSE} setMethod("initialize", "SwirlSet", function(.Object, R = new("matrix"), G = new("matrix"), Rb = new("matrix"), Gb = new("matrix"), ...) { callNextMethod(.Object, R=R, G=G, Rb=Rb, Gb=Gb, ...) }) ``` A slightly different `initialize` method allows the user to specify either the `assayData` or the `assayData` content. In advanced use, this has the advantage that `initialize` can be used as a 'copy constructor' to update several slots simultaneously. ```{r} setMethod("initialize", "SwirlSet", function(.Object, assayData=assayDataNew( R=R, G=G, Rb=Rb, Gb=Gb), R = new("matrix"), G = new("matrix"), Rb = new("matrix"), Gb = new("matrix"), ...) { if (!missing(assayData) && any(!missing(R), !missing(G), !missing(Rb), !missing(Gb))) { warning("using 'assayData'; ignoring 'R', 'G', 'Rb', 'Gb'") } callNextMethod(.Object, assayData=assayData, ...) }) ``` The structure of the `initialize` method is a bit different from those often seen in [R]{.sans-serif}. Often, `initialize` has only `.Object` as a named argument, or, if there are other named arguments, they correspond to slot names. Here our initialize method accepts four arguments, named after the `assayData` elements. Inside the `initialize` method, the named arguments are passed to the next initialization method in the hierarchy (i.e., `initialize` defined for `eSet`). The `eSet` `initialize` method then uses these arguments to populate the data slots in `.Object`. In particular, `eSet` places all arguments other `phenoData`, `experimentData`, and `annotation` into the `assayData` slot. The `eSet` `initialize` method then returns the result to the `initialize` method of *SwirlSet*, which returns a *SwirlSet* object to the user: ```{r eval=FALSE} new("SwirlSet") ``` General programming guidelines emerge from experience with the `initialize` method of `eSet` and derived classes. First, an appropriate strategy is to name only those data elements that will be manipulated directly by the `initialize` method. For instance, the definition above did *not* name `phenoData` and other `eSet` slots by name. To do so is not incorrect, but would require that they be explicitly named (e.g., `phenoData=phenoData`) in the `callNextMethod` code. Second, the arguments `R, G, Rb, Rg` are present in the `initialize` method to provide defaults consistent with object construction; the 'full' form of `callNextMethod`, replicating the named arguments, is required in the version of [R]{.sans-serif} in which this class was developed. Third, named arguments can be manipulated before `callNextMethod` is invoked. Fourth, the return value of `callNextMethod` can be captured... ```{r eval=FALSE} setMethod("initialize", "MySet", function(.Object, ...) { .Object <- callNextMethod(.Object, ...) }) ``` and manipulated before being returned to the user. Finally, it is the responsibility of the developer to ensure that a valid object is created; `callNextMethod` is a useful way to exploit correctly designed `initialize` methods for classes that the object extends, but the developer is free to use other techniques to create valid versions of their class. A validity method might complete our new class. A validity method is essential to ensure that the unique features of *SwirlSet* -- our reason for designing the new class -- are indeed present. We define our validity method to ensure that the `assayData` slot contains our four types of expression elements: ```{r} setValidity("SwirlSet", function(object) { assayDataValidMembers(assayData(object), c("R", "G", "Rb", "Gb")) }) ``` Notice that we do not have to explicitly request that the validity of other parts of the *SwirlSet* object are valid; this is done for us automatically. Objects are checked for validity when they are created, but not when modified. This is partly for efficiency reasons, and partly because object updates might transiently make them invalid. So a good programing practice is to ensure validity after modification, e.g., ```{r eval=FALSE} myFancyFunction <- function(obj) { assayData(obj) <- fancyAssaydData # obj invalid... phenoData(obj) <- justAsFancyPhenoData # but now valid validObject(obj) (obj) } ``` Assigning `fancyAssaydData` might invalidate the object, but `justAsFancyPhenoData` restores validity. # *Versioned* One problem encountered in the Bioconductor project is that data objects stored to disk become invalid as the underlying class definition changes. For instance, earlier releases of *Biobase* contain a sample *eSet* object. But under the changes discussed here, `eSet` is virtual and the stored object is no longer valid. The challenge is to easily identify invalid objects, and to provide a mechanism for updating old objects to their new representation. *Biobase* introduces the *Versioned* and *VersionedBiobase* classes to facilitate this. These classes are incorporated into key *Biobase*class definitions.*Biobase* also defines `updateObject` methods (the `updateObject` generic function is defined in the `r Biocpkg("BiocGenerics")` package) for conveniently updating old objects to their new representation. ```{r} data(sample.ExpressionSet) classVersion(sample.ExpressionSet) obj <- updateObject(sample.ExpressionSet) ``` The version information for this object is a named list. The first two elements indicate the version of R and Biobase used to create the object. The latter two elements are contained in the class prototype, and the class prototype is consulted to see if the instance of an object is 'current'. These lists can be subsetted in the usual way, e.g., ```{r} isCurrent(sample.ExpressionSet)[c("eSet", "ExpressionSet")] ``` Versioned classes, `updateObject` and related methods simplify the long-term maintenance of data objects. Take the fictious *MySet* as an example. ```{r} setClass("MySet", contains = "eSet", prototype = prototype(new("VersionedBiobase", versions=c(classVersion("eSet"), MySet="1.0.0")))) obj <- new("MySet") classVersion(obj) ``` This is a new class, and might undergo changes in its structure at some point in the future. When these changes are introduced, the developer will change the version number of the class in its prototype (the last line, below): ```{r} setClass("MySet", contains = "eSet", prototype = prototype( new("VersionedBiobase", versions=c(classVersion("eSet"), MySet="1.0.1")))) isCurrent(obj) ``` and add code to update to the new version ```{r} setMethod("updateObject", signature(object="MySet"), function(object, ..., verbose=FALSE) { if (verbose) message("updateObject(object = 'MySet')") object <- callNextMethod() if (isCurrent(object) ["MySet"]) return(object) ## Create an updated instance. if (!isVersioned(object)) ## Radical surgery – create a new, up-to-date instance new("MySet", assayData = updateObject(assayData(object), ..., verbose=verbose), phenoData = updateObject(phenoData(object), ..., verbose=verbose), experimentData = updateObject(experimentData(object), ..., verbose=verbose), annotation = updateObject(annotation(object), ..., verbose=verbose)) else { ## Make minor changes, and update version by consulting class definition classVersion(object)["MySet"]<- classVersion("MySet")["MySet"] object } }) ``` The code after `if(!isVersioned)` illustrates one way of performing 'radical surgery, creating a new up-to-date instance by updating all slots. The `else` clause represents more modest changes, using methods to update stale information. `updateObject` then returns a new, enhanced object: ```{r} classVersion(updateObject(obj)) ``` As in the example, versioning helps in choosing which modifications to perform -- minor changes for a slightly out-of-date object, radical surgery for something more ancient. Version information might also be used in methods, where changing class representation might facilitate more efficient routines. ## *Versioned* versus *VersionedBiobase* The information on [R]{.sans-serif} and *Biobase* versions is present in `eSet` derived classes because `eSet` contains *VersionedBiobase*. On the other hand, *AnnotatedDataFrame* contains *Versioned*, and has only information about its own class version. ```{r} classVersion(new("AnnotatedDataFrame")) ``` The rationale for this is that *AnnotatedDataFrame* is and will likely remain relatively simple, and details about [R]{.sans-serif} and *Biobase* are probably irrelevant to its use. On the other hand, some aspects of `eSet` and the algorithms that operate on them are more cutting edge and subject to changes in [R]{.sans-serif} or *Biobase*. Knowing the version of [R]{.sans-serif} and *Biobase* used to create an instance might provide valuable debugging information. ## Adding *Versioned* information to your own classes The key to versioning your own classes is to define your class to `contain` *Versioned* or *VersionedBiobase*, and to add the version information in the prototype. For instance, to add a class-specific version stamp to *SwirlSet* we would modify the class definition to ```{r} setClass("SwirlSet", contains = "eSet", prototype = prototype( new("VersionedBiobase", versions=c(classVersion("eSet"), SwirlSet="1.0.0")))) classVersion(new("SwirlSet")) ``` See additional examples in the *Versioned* help page. It is also possible to add arbitrary information to particular instances. ```{r} obj <- new("SwirlSet") classVersion(obj)["MyID"] <- "0.0.1" classVersion(obj) ``` ```{r} classVersion(updateObject(obj)) ``` There is additional documentation about these classes and methods in *Biobase*. # Summary This document summarizes *Biobase*, outlining strategies that developers using *Biobase* may find useful. The main points are to introduce the `eSet` class hierarchy, to illustrate how developers can effectively extend this class, and to introduce class versions as a way of tracking and easily updating objects. It is anticipated that `eSet`-derived classes will play an increasingly important role in *Biobase* development. # Session Information The version number of [R]{.sans-serif} and packages loaded for generating the vignette were: ```{r} sessionInfo() ``` Biobase/vignettes/ExpressionSetIntroduction.Rnw0000644000175200017520000004307614516003524023067 0ustar00biocbuildbiocbuild% NOTE -- ONLY EDIT THE .Rnw FILE!!! The .tex file is % likely to be overwritten. % %\VignetteDepends{Biobase} %\VignetteIndexEntry{An introduction to Biobase and ExpressionSets} %\VignetteKeywords{tutorial, environment, graphics, ExpressionSet} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[12pt]{article} \usepackage{amsmath,fullpage} \usepackage[authoryear,round]{natbib} \usepackage{hyperref} \usepackage{theorem} \usepackage{float} \usepackage{ifthen} \newcommand{\scscst}{\scriptscriptstyle} \newcommand{\scst}{\scriptstyle} \newcommand{\R}{{\textsf{R}}} \newcommand{\code}[1]{{\texttt{#1}}} \newcommand{\term}[1]{{\emph{#1}}} \newcommand{\Rpackage}[1]{\textsf{#1}} \newcommand{\Rfunction}[1]{\texttt{#1}} \newcommand{\Robject}[1]{\texttt{#1}} \newcommand{\Rclass}[1]{{\textit{#1}}} \newcommand{\Rmethod}[1]{{\textit{#1}}} \newcommand{\Rfunarg}[1]{{\textit{#1}}} %% Excercises and Questions \usepackage{theorem} \theoremstyle{break} \newtheorem{Ex}{Exercise} \theoremstyle{break} \newtheorem{Q}{Question} %% And solution or answer \newenvironment{solution}{% \begin{center} \begin{minipage}{0.75\textwidth} %% \color{blue} }{ \end{minipage} \end{center} \bigskip% } \bibliographystyle{plainnat} \title{An Introduction to Bioconductor's \Rclass{ExpressionSet} Class} \author{Seth Falcon, Martin Morgan, and Robert Gentleman} \date{6 October, 2006; revised 9 February, 2007} \begin{document} <>= options(width=65) @ \maketitle \section{Introduction} \Rpackage{Biobase} is part of the Bioconductor project, and is used by many other packages. \Rpackage{Biobase} contains standardized data structures to represent genomic data. The \Rclass{ExpressionSet} class is designed to combine several different sources of information into a single convenient structure. An \Rclass{ExpressionSet} can be manipulated (e.g., subsetted, copied) conveniently, and is the input or output from many Bioconductor functions. The data in an \Rclass{ExpressionSet} is complicated, consisting of expression data from microarray experiments (\code{assayData}; \code{assayData} is used to hint at the methods used to access different data components, as we will see below), `meta-data' describing samples in the experiment (\code{phenoData}), annotations and meta-data about the features on the chip or technology used for the experiment (\code{featureData}, \code{annotation}), information related to the protocol used for processing each sample (and usually extracted from manufacturer files, \code{protocolData}), and a flexible structure to describe the experiment (\code{experimentData}). The \Rclass{ExpressionSet} class coordinates all of this data, so that you do not usually have to worry about the details. However, an \Rclass{ExpressionSet} needs to be created in the first place, and creation can be complicated. In this introduction we learn how to create and manipulate \Rclass{ExpressionSet} objects, and practice some basic \R{} skills. \section{Preliminaries} \subsection{Installing Packages} If you are reading this document and have not yet installed any software on your computer, visit \url{http://bioconductor.org} and follow the instructions for installing \R{} and Bioconductor. Once you have installed \R{} and Bioconductor, you are ready to go with this document. In the future, you might find that you need to install one or more additional packages. The best way to do this is to start an \R{} session and evaluate commands like <>= if (!require("BiocManager")) install.packages("BiocManager") BiocManager::install("Biobase") @ %% \subsection{Loading Packages} The definition of the \Rclass{ExpressionSet} class along with many methods for manipulating \Rclass{ExpressionSet} objects are defined in the \Rpackage{Biobase} package. In general, you need to load class and method definitions before you use them. When using Bioconductor, this means loading \R{} packages using \Rfunction{library} or \Rfunction{require}. <>= library("Biobase") @ \begin{Ex} What happens when you try to load a package that is not installed? \end{Ex} \begin{solution} When using \Rfunction{library}, you get an error message. With \Rfunction{require}, the return value is \Robject{FALSE} and a warning is printed. \end{solution} \section{Building an ExpressionSet From .CEL and other files} Many users have access to .CEL or other files produced by microarray chip manufacturer hardware. Usually the strategy is to use a Bioconductor package such as \Rpackage{affyPLM}, \Rpackage{affy}, \Rpackage{oligo}, or \Rpackage{limma}, to read these files. These Bioconductor packages have functions (e.g., \Rfunction{ReadAffy}, \Rfunction{expresso}, or \Rfunction{justRMA} in \Rpackage{affy}) to read CEL files and perform preliminary preprocessing, and to represent the resulting data as an \Rclass{ExpressionSet} or other type of object. Suppose the result from reading and preprocessing CEL or other files is named \Robject{object}, and \Robject{object} is different from \Rclass{ExpressionSet}; a good bet is to try, e.g., <>= library(convert) as(object, "ExpressionSet") @ %% It might be the case that no converter is available. The path then is to extract relevant data from \Robject{object} and use this to create an \Rclass{ExpressionSet} using the instructions below. \section{Building an ExpressionSet From Scratch} As mentioned in the introduction, the data from many high-throughput genomic experiments, such as microarray experiments, usually consist of several conceptually distinct parts: assay data, phenotypic meta-data, feature annotations and meta-data, and a description of the experiment. We'll construct each of these components, and then assemble them into an \Rclass{ExpressionSet}. \subsection{Assay data} One important part of the experiment is a matrix of `expression' values. The values are usually derived from microarrays of one sort or another, perhaps after initial processing by manufacturer software or Bioconductor packages. The matrix has $F$ rows and $S$ columns, where $F$ is the number of features on the chip and $S$ is the number of samples. A likely scenario is that your assay data is in a 'tab-delimited' text file (as exported from a spreadsheet, for instance) with rows corresponding to features and columns to samples. The strategy is to read this file into \R{} using the \Rfunction{read.table} command, converting the result to a \Rclass{matrix}. A typical command to read a tab-delimited file that includes column `headers' is <>= dataDirectory <- system.file("extdata", package="Biobase") exprsFile <- file.path(dataDirectory, "exprsData.txt") exprs <- as.matrix(read.table(exprsFile, header=TRUE, sep="\t", row.names=1, as.is=TRUE)) @ %% The first two lines create a file path pointing to where the assay data is stored; replace these with a character string pointing to your own file, e.g, <>= exprsFile <- "c:/path/to/exprsData.txt" @ %% (Windows users: note the use of \verb+/+ rather than \verb+\+; this is because \R{} treats the \verb+\+ character as an `escape' sequence to change the meaning of the subsequent character). See the help pages for \Rfunction{read.table} for more detail. A common variant is that the character separating columns is a comma (``comma-separated values'', or ``csv'' files), in which case the \Robject{sep} argument might be \Robject{sep=","}. It is always important to verify that the data you have read matches your expectations. At a minimum, check the class and dimensions of \Robject{geneData} and take a peak at the first several rows <>= class(exprs) dim(exprs) colnames(exprs) head(exprs[,1:5]) @ %% At this point, we can create a minimal \Rclass{ExpressionSet} object using the \code{ExpressionSet} constructor: <>= minimalSet <- ExpressionSet(assayData=exprs) @ % We'll get more benefit from expression sets by creating a richer object that coordinates phenotypic and other data with our expression data, as outlined in the following sections. \subsection{Phenotypic data} Phenotypic data summarizes information about the samples (e.g., sex, age, and treatment status; referred to as `covariates'). The information describing the samples can be represented as a table with $S$ rows and $V$ columns, where $V$ is the number of covariates. An example of phenotypic data can be input with <>= pDataFile <- file.path(dataDirectory, "pData.txt") pData <- read.table(pDataFile, row.names=1, header=TRUE, sep="\t") dim(pData) rownames(pData) summary(pData) @ %% There are three columns of data, and 26 rows. Note that the number of rows of phenotypic data match the number of columns of expression data, and indeed that the row and column names are identically ordered: <>= all(rownames(pData)==colnames(exprs)) @ %% This is an essential feature of the relationship between the assay and phenotype data; \Rclass{ExpressionSet} will complain if these names do not match. Phenotypic data can take on a number of different forms. For instance, some covariates might reasonably be represented as numeric values. Other covariates (e.g., gender, tissue type, or cancer status) might better be represented as \Robject{factor} objects (see the help page for \Robject{factor} for more information). It is especially important that the phenotypic data are encoded correctly; the \Robject{colClasses} argument to \Rfunction{read.table} can be helpful in correctly inputing (and ignoring, if desired) columns from the file. \begin{Ex} What class does \Rfunction{read.table} return? \end{Ex} \begin{Ex} Determine the column names of \Robject{pData}. Hint: \Robject{apropos("name")}. \end{Ex} \begin{solution} <>= names(pData) @ \end{solution} \begin{Ex} Use \Rfunction{sapply} to determine the classes of each column of \Robject{pData}. Hint: read the help page for \Rfunction{sapply}. \end{Ex} \begin{solution} <>= sapply(pData, class) @ \end{solution} \begin{Ex} What is the sex and Case/Control status of the 15th and 20th samples? And for the sample(s) with \Robject{score} greater than $0.8$. \end{Ex} \begin{solution} <>= pData[c(15, 20), c("gender", "type")] pData[pData$score>0.8,] @ \end{solution} Investigators often find that the meaning of simple column names does not provide enough information about the covariate -- What is the cryptic name supposed to represent? What units are the covariates measured in? We can create a data frame containing such meta-data (or read the information from a file using \Rfunction{read.table}) with <>= metadata <- data.frame(labelDescription= c("Patient gender", "Case/control status", "Tumor progress on XYZ scale"), row.names=c("gender", "type", "score")) @ %% This creates a \Rclass{data.frame} object with a single column called \code{labelDescription}, and with row names identical to the column names of the \Rclass{data.frame} containing the phenotypic data. The column \Robject{labelDescription} \emph{must} be present; other columns are optional. Bioconductor's \Rpackage{Biobase} package provides a class called \Rclass{AnnotatedDataFrame} that conveniently stores and manipulates the phenotypic data and its metadata in a coordinated fashion. Create and view an \Rclass{AnnotatedDataFrame} instance with: <>= phenoData <- new("AnnotatedDataFrame", data=pData, varMetadata=metadata) phenoData @ %% Some useful operations on an \Rclass{AnnotatedDataFrame} include \Rmethod{sampleNames}, \Rmethod{pData} (to extract the original \Robject{pData} \Rclass{data.frame}), and \Rmethod{varMetadata}. In addition, \Rclass{AnnotatedDataFrame} objects can be subset much like a \Rclass{data.frame}: <>= head(pData(phenoData)) phenoData[c("A","Z"),"gender"] pData(phenoData[phenoData$score>0.8,]) @ %% \subsection{Annotations and feature data} Meta-data on features is as important as meta-data on samples, and can be very large and diverse. A single chip design (i.e., collection of features) is likely to be used in many different experiments, and it would be inefficient to repeatedly collect and coordinate the same meta-data for each \Rclass{ExpressionSet} instance. Instead, the ideas is to construct specialized meta-data packages for each type of chip or instrument. Many of these packages are available from the Bioconductor web site. These packages contain information such as the gene name, symbol and chromosomal location. There are other meta-data packages that contain the information that is provided by other initiatives such as GO and KEGG. The \Rpackage{annotate} and \Rpackage{AnnotationDbi} packages provides basic data manipulation tools for the meta-data packages. The appropriate way to create annotation data for features is very straight-forward: we provide a character string identifying the type of chip used in the experiment. For instance, the data we are using is from the Affymetrix hgu95av2 chip: <>= annotation <- "hgu95av2" @ %% It is also possible to record information about features that are unique to the experiment (e.g., flagging particularly relevant features). This is done by creating or modifying an \Robject{AnnotatedDataFrame} like that for \Robject{phenoData} but with row names of the \Rclass{AnnotatedDataFrame} matching rows of the assay data. \subsection{Experiment description} Basic description about the experiment (e.g., the investigator or lab where the experiment was done, an overall title, and other notes) can be recorded by creating a \Rclass{MIAME} object. One way to create a \Rclass{MIAME} object is to use the \Rfunction{new} function: <>= experimentData <- new("MIAME", name="Pierre Fermat", lab="Francis Galton Lab", contact="pfermat@lab.not.exist", title="Smoking-Cancer Experiment", abstract="An example ExpressionSet", url="www.lab.not.exist", other=list( notes="Created from text files" )) @ %% Usually, \Rfunction{new} takes as arguments the class name and pairs of names and values corresponding to different slots in the class; consult the help page for \Rclass{MIAME} for details of available slots. \subsection{Assembling an \Rclass{ExpressionSet}} An \Rclass{ExpressionSet} object is created by assembling its component parts and callng the \code{ExpressionSet} constructor: <>= exampleSet <- ExpressionSet(assayData=exprs, phenoData=phenoData, experimentData=experimentData, annotation="hgu95av2") @ %% Note that the names on the right of each equal sign can refer to any object of appropriate class for the argument. See the help page for \Rclass{ExpressionSet} for more information. We created a rich data object to coordinate diverse sources of information. Less rich objects can be created by providing less information. As mentioned earlier, a minimal expression set can be created with <>= minimalSet <- ExpressionSet(assayData=exprs) @ %% Of course this object has no information about phenotypic or feature data, or about the chip used for the assay. \section{\Rclass{ExpressionSet} Basics} Now that you have an \Rclass{ExpressionSet} instance, let's explore some of the basic operations. You can get an overview of the structure and available methods for \Rclass{ExpressionSet} objects by reading the help page: <>= help("ExpressionSet-class") @ When you print an \Rclass{ExpressionSet} object, a brief summary of the contents of the object is displayed (displaying the entire object would fill your screen with numbers): <>= exampleSet @ \subsection{Accessing Data Elements} A number of accessor functions are available to extract data from an \Rclass{ExpressionSet} instance. You can access the columns of the phenotype data (an \Rclass{AnnotatedDataFrame} instance) using \verb+$+: <>= exampleSet$gender[1:5] exampleSet$gender[1:5] == "Female" @ %% You can retrieve the names of the features using \Rfunction{featureNames}. For many microarray datasets, the feature names are the probe set identifiers. <>= featureNames(exampleSet)[1:5] @ %% The unique identifiers of the samples in the data set are available via the \Rfunction{sampleNames} method. The \Rfunction{varLabels} method lists the column names of the phenotype data: <>= sampleNames(exampleSet)[1:5] varLabels(exampleSet) @ %% Extract the expression matrix of sample information using \Rfunction{exprs}: <>= mat <- exprs(exampleSet) dim(mat) @ \subsubsection{Subsetting} Probably the most useful operation to perform on \Rclass{ExpressionSet} objects is subsetting. Subsetting an \Rclass{ExpressionSet} is very similar to subsetting the expression matrix that is contained within the \Rclass{ExpressionSet}, the first argument subsets the features and the second argument subsets the samples. Here are some examples: Create a new \Rclass{ExpressionSet} consisting of the 5 features and the first 3 samples: <>= vv <- exampleSet[1:5, 1:3] dim(vv) featureNames(vv) sampleNames(vv) @ %% Create a subset consisting of only the male samples: <>= males <- exampleSet[ , exampleSet$gender == "Male"] males @ \section{What was used to create this document} The version number of \R{} and the packages and their versions that were used to generate this document are listed below. <>= toLatex(sessionInfo()) @ \end{document} Biobase/vignettes/esApply.Rmd0000644000175200017520000000616314516003524017237 0ustar00biocbuildbiocbuild--- title: "esApply Introduction" author: - name: "R. Gentleman" - name: "V. Carey" - name: "M. Morgan" - name: "S. Falcon" - name: "H. Khan" affiliation: "Vignette translation from Sweave to Rmarkdown / HTML" date: "`r format(Sys.time(), '%d %B, %Y')`" package: Biobase vignette: > %\VignetteIndexEntry{esApply Introduction} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} output: BiocStyle::html_document --- # A note on `esApply` {#a-note-on-esapply .unnumbered} `ExpressionSet`s are complex objects. `exprs(ExpressionSet)` produces $G \times N$, where $G$ is the number of genes on a chip and $N$ is the number of tissues analyzed, and `pData(ExpressionSet)` produces $N \times p$, where $p$ is the number of phenotypic or demographic, etc., variables collected. Abstractly, we are often interested in evaluating functions $f(y;x)$ where $y$ is an $N$-vector of expression results for a specific gene and $x$ is an $N$-dimensional structure, coordinated with $y$, that distinguishes elements of $y$ for processing in the function $f$. A basic problem is to guarantee that the $j$th element of $y$ is correctly associated with the $j$th component of $x$. As an example, let's consider `sample.ExpressionSet`, which is an *ExpressionSet* supplied with Biobase. We will print a little report, then the first $N$-vector of gene expressions and some covariate data: ```{r message=FALSE, echo=FALSE} library(Biobase) data(sample.ExpressionSet) ``` ```{r} sample.ExpressionSet exprs(sample.ExpressionSet)[1,] pData(sample.ExpressionSet)[1:2,1:3] ``` Now let's see how expressions and a covariate are related: ```{r} rbind(exprs(sample.ExpressionSet[1,]), sex <- t(pData(sample.ExpressionSet))[1,]) ``` A function that evaluates the difference in median expression across strata defined using an abstract covariate `x` is ```{r} medContr <- function( y, x ) { ys <- split(y,x) median(ys[[1]]) - median(ys[[2]]) } ``` We can apply this to a small *ExpressionSet* that gives back the data listed above: ```{r} apply(exprs(sample.ExpressionSet[1,,drop=F]), 1, medContr, pData(sample.ExpressionSet)[["sex"]]) ``` That's a bit clumsy. This is where `esApply` comes in. We pay for some simplicity by following a strict protocol for the definition of the statistical function to be applied. ```{r} medContr1 <- function(y) { ys <- split(y,sex) median(ys[[1]]) - median(ys[[2]]) } esApply( sample.ExpressionSet, 1, medContr1)[1] ``` The manual page on `esApply` has a number of additional examples that show how applicable functions can be constructed and used. The important thing to note is that the applicable functions *know* the names of the covariates in the `pData` dataframe. This is achieved by having an environment populated with all the variables in *phenoData(ExpressionSet)* put in as the environment of the function that will be applied. If that function already has an environment we retain that but in the second position. Thus, there is some potential for variable shadowing. # Session Information The version number of R and packages loaded for generating the vignette were: ```{r echo=FALSE} sessionInfo() ``` Biobase/vignettes/legacy/0000755000175200017520000000000014516003524016414 5ustar00biocbuildbiocbuildBiobase/vignettes/legacy/Biobase.Rnw0000644000175200017520000003247614516003524020464 0ustar00biocbuildbiocbuild% % NOTE -- ONLY EDIT Biobase.Rnw!!! % Biobase.tex file will get overwritten. % %\VignetteIndexEntry{Biobase Primer} %\VignetteDepends{} %\VignetteKeywords{Expression Analysis} %\VignettePackage{Biobase} \documentclass{article} \usepackage{hyperref} \textwidth=6.2in \textheight=8.5in %\parskip=.3cm \oddsidemargin=.1in \evensidemargin=.1in \headheight=-.3in \newcommand{\Rfunction}[1]{{\texttt{#1}}} \newcommand{\Robject}[1]{{\texttt{#1}}} \newcommand{\Rpackage}[1]{{\textsf{#1}}} \newcommand{\Rmethod}[1]{{\texttt{#1}}} \newcommand{\Rfunarg}[1]{{\texttt{#1}}} \newcommand{\Rclass}[1]{{\textit{#1}}} \newcommand{\classdef}[1]{% {\em #1} } %%FIXME: Jianhua, can you go through the current class definitions for %%exprSet and phenoData etc and update the documentation here accordingly. \begin{document} \title{Textual Description of Biobase} \maketitle \section*{Introduction} Biobase is part of the Bioconductor project. It is meant to be the location of any reusable (or non--specific) functionality. Biobase will be required by most of the other Bioconductor libraries. \section{Data Structures} Part of the Biobase functionality is the standardization of data structures for genomic data. Currently we have designed some data structures to handle microarray data. The \classdef{exprSet} class has the following slots: \begin{description} \item[exprs] A matrix of expression levels. Arrays are columns and genes are rows. \item[se.exprs] A matrix of standard errors for expressions if they are available. It will have length 0 if they are not. \item[phenoData] An object of class \verb+phenoData+ that contains phenotypic and/or experimental data. \item[description] A description of the experiment (object of class MIAME) \item[annotation] A character string indicating the base name for the associated annotation. \item[notes] A set of notes describing aspects or features of the data, the analysis, processing done, etc. \end{description} These data are extremely large and complex. To deal with them effectively we will need better tools for combining data and documentation. The \verb+exprSet+ class represents an initial attempt by the Bioconductor project to provide better tools for documenting and handling these large and complex data sets. The expression data represent experimentally derived data. In most cases these data will benefit from making use of biologically relevant meta-data. The meta-data are very large and diverse. In order to facilitate interactions and explorations we have taken the approach of constructing a specialized meta-data package for each chip or instrument. Many of these packages are available from the Bioconductor web site. These packages contain information such as the gene name, symbol and chromosomal location. There are other meta-data packages that contain the information that is provided by other initiatives such as GO and KEGG. These data can then be linked to the \verb+exprSet+ via the \verb+annotation+ slot. The \textit{annotate} package provides basic data manipulation tools for the meta-data packages. The \texttt{phenoData} class has the following slots: \begin{description} \item[pData] A dataframe where the rows are cases and the columns are variables. \item[varLabels] A list of labels and descriptions for the variables represented by the columns of \verb+pData+. \item[varMetaData] A \Rclass{data.frame} defining meta-data for the variables contained in the \Robject{pData} slot. \end{description} Instances of this class are essentially \verb+data.frame+'s with some additional documentation on the variables stored in the \verb+varLabels+ and \Robject{varMetaData} slots. %%FIXME: does this currently exist? It should be easy to require that %%the names of the pData data.frame are the same, and in the same %%order as the column names of the exprs A mechanism for ensuring that the elements of the \verb+phenoData+ slot of an instance of \verb+exprSet+ are in the same order as the columns of the \verb+exprs+ array is needed. It is important that these be properly aligned since analyses will require this and automatic tools for checking will probably be better than ad hoc ones. In addition to the class definitions a number of special methods (or functions) have been defined to operate on instances of these classes. Some particular attention has been paid to subsetting operations. Instances of both \verb+phenoData+ and \verb+exprSet+ are closed under subsetting operations. That is, any subset of one of these objects retains its class. There are also specialized print methods for objects of both classes. We consider an instance of an \verb+exprSet+ to be an expression array with some additional information. Thus there are two subscripts, one for the rows and one for the columns. For that reason subsetting works in the following ways: \begin{itemize} \item If the first subscript is given then the appropriate subset of rows from \verb+exprs+ and \verb+se.exprs+ is taken. All the data in \verb+phenoData+ is propagated since no subset of cases was made. \item If the second subscript is given then the appropriate set of columns from \verb+exprs+ and \verb+se.exprs+ is taken. At the same time the corresponding set of {\em rows} of \verb+phenoData+ are taken. \end{itemize} \subsection{An exprSet Vignette} In the data directory for Biobase there is a small anonymized data set. It consists of expression level data for 500 genes on 26 patients. The data can be accessed with the command \verb+data(geneData)+. There are three artificial covariates provided as well. These can be accessed using \verb+data(geneCovariate)+ once the Biobase library is attached. %%FIXME: is there a better way to do this? The following vignette shows how to read in these data and to create an instance of the \verb+exprSet+ class using those data. The first step is to create an object of \verb+phenoData+ calss. This object is used to store the phenotype data. We will use the example data frame \verb+geneCovariate+ to create such an object. <>= library(Biobase) @ %%<>= %%data(geneCov) %%data(geneData) %%covN <- list(cov1 = "Covariate 1; 2 levels", %% cov2 = "Covariate 2; 2 levels", %% cov3 = "Covariate 3; 3 levels") %% %%pD <- new("phenoData", pData=geneCov, varLabels=covN) %%eSet <- new("exprSet", exprs=geneData, phenoData=pD) %% %%@ <>= data(geneCovariate) head(geneCovariate) phenoD <- new("phenoData", pData=geneCovariate, varLabels=list("sex"="Female/Male","type"="Case/Control","score"="Testing Score") ) phenoD @ We also need a \verb+MIAME+ object to represent the background information, such as the names of the experimenter and laboratory, for this data set. <>= descr <- new("MIAME", name="Pierre Fermat", lab="Francis Galton Lab", contact="pfermat@lab.not.exist", title="Smoking-Cancer Experiment", abstract="An example object of expression set (exprSet) class", url="www.lab.not.exist", other=list( notes="An example object of expression set (exprSet) class") ) descr @ Moreover, we need a \verb+data.frame+ object to group the reporters (probes) at this data set (chip). The definition of probe types is applied from \textit{Affymetrix GeneChip Expression Analysis Data Analysis Fundamentals} (\url{http://www.affymetrix.com/Auth/support/downloads/manuals/data_analysis_fundamentals_manual.pdf}), and the result is stored in the \verb+data.frame+ object \Robject{reporter}. This is a one-column data frame. The rows represent the probe ids in the data set, and the values in the data frame are the predefined types associated with each probe. <>= data(reporter) head(reporter) @ The data frame \Robject{geneData}, containing 500 probes and 26 samples, is a subset of real expression data from an Affymetrix U95v2 chip. The \Robject{seD} is a \Rclass{matrix} object containing the standard errors of \Robject{geneData}. Finaly, we can put all objects together to create the \verb+exprSet+ object. <>= data(geneData) data(seD) exSet <- new("exprSet", exprs = geneData, se.exprs = seD, phenoData = phenoD, annotation = "hgu95av2", description = descr, notes = descr@other$notes, reporterInfo = reporter ) exSet @ If instead, you have the data stored in files, e.g. \texttt{.csv} files and want to read it in using \Rfunction{read.table} you will need to do some conversion. \Rfunction{read.table} reads data into a \Robject{data.frame}, and this is fine for the phenotypic data, but not for the expression data. You will need to convert the \Robject{data.frame} into a matrix. The code example gives a short example of the commands that you would need to execute if you have the expression data stored in a file named \texttt{myexprs.csv} and the phenotypic data in a file named \texttt{mycovs.csv}. \begin{verbatim} myExprs = read.csv("myexprs.csv") myExprsmat = as.matrix(myExprs) myCovs = read.csv("mycovs.csv") if( ncol(myExprsmat) != nrow(myCovs) ) print("ERROR: these should be the same") \end{verbatim} You should probably also check to ensure that you have the appropriate samples names used as row names for \Robject{myCovs} and as column names for \Robject{myExprsmat}, and they must be in the same order. So, again some pseudo-code that gives the essential ingredients is given next. If you are unclear on the difference between a \Robject{matrix} and a \Robject{data.frame} then you should consult one of the very many introductory texts on using R as well as the manual pages and documents that come with R. \begin{verbatim} if( !all.equal( row.names(myCovs), dimnames(myExprsmat)[[2]] ) ) print("ERROR: samples names are wrong") \end{verbatim} Now, we are almost ready to create an instance of an \Robject{exprSet} object. The missing piece is a list of descriptions for the covariates that constitute the phenotypic data. Suppose that we have two variables, one the age of the patient in years and the other the particular translocation they are known to have. And suppose that in the \Robject{data.frame} \Robject{myCovs} the column names are \texttt{age} and \texttt{translocation}. Then we could make up the covariate descriptions as follows. \begin{verbatim} covDesc = list(age="age of the patient in years", translocation="known translocation") \end{verbatim} The purpose of this level of documentation is to help others who might want to re-analyze your data, or you, if at some time in the future you need to go back and see what was done. By carefully annotating the data, in a self-describing way, you increase the chances that you will understand what was done. Below is the simplest form for creating an \Robject{exprSet}. We note that typically you would fill in more details, like the name of the chip used and some additional data describing the experiment itself. \begin{verbatim} myphenoData = new("phenoData", pData=myCovs, varLabels=covDesc) myEset = new("exprSet", exprs=myExprsmat, phenoData=myphenoData) \end{verbatim} \section{Aggregate} When performing an interative computation such as cross--validation or bootstrapping it is often useful to be able to aggregate certain intermediate results. The \verb+Aggregate+ functions (and soon the Aggregate class) provide some simple tools for doing this. The strategy employed is to maintain the summary statistics in an environment. This is passed to the iterative function. It does not need to be returned since environments have a {\em pass--by--reference} semantic. Once the function has finished the environment can be queried for the summary statistics. One simple task that people often want to carry out is to determine in a cross--validation calculation which genes are selected the most often. In some sense these genes may form a more stable basis for inference. Achieving that using an Aggregator is very straight forward. At each iteration we will pass the names of the selected genes to the Aggregator. It has two functions, one for initializing and one for updating (or aggregating). The aggregator also has an environment. This environment stores the data that is being aggregated. For our cross--validation example the process goes as follows: \begin{enumerate} \item At each iteration Aggregate is called with the list of genes selected. \item For each gene in that list we check to see if it was selected before. \begin{enumerate} \item If not then \verb+initfun+ is called with that gene name. The value returned by \verb+initfun+ is then associated with the gene name in the aggregation environment. \item If so, then the current value is obtained and \verb+agfun+ is called with the the gene name and the current value. This returns a new value that is then associated with the gene name in the aggregation environment. \end{enumerate} \end{enumerate} Basically we are using this as a form of updating hash table. At the same time we are slightly subverting R's usual pass--by--value semantics. %\section*{Resampling exprSet's} %need to fill this in again \section{Session Information} The version number of R and packages loaded for generating the vignette were: <>= toLatex(sessionInfo()) @ \end{document} Biobase/vignettes/legacy/Bioconductor.Rnw0000644000175200017520000000577314516003524021552 0ustar00biocbuildbiocbuild% % NOTE -- ONLY EDIT THE .Rnw FILE!!! The .tex file is % likely to be overwritten. % %\VignetteIndexEntry{Bioconductor Overview} %\VignetteDepends{} %\VignetteKeywords{Documentation} %\VignettePackage{Biobase} \documentclass[12pt]{article} \usepackage{times} \usepackage{hyperref} \textwidth=6.2in \textheight=8.5in %\parskip=.3cm \oddsidemargin=.1in \evensidemargin=.1in \headheight=-.3in \newcommand{\scscst}{\scriptscriptstyle} \newcommand{\scst}{\scriptstyle} \bibliographystyle{plainnat} \begin{document} \title{What is Bioconductor} \maketitle \section*{Prequisites} Bioconductor is a project to develop innovative software tools for use in computational biology. It is based on the R language ({\url www.r-project.org}). You should already be quite familiar with R before using Bioconductor. There are several on--line resources that can help you get started using R. They can be found from the R website. Some users find this a very steep learning curve; your experience may be similar. Bioconductor packages provide flexible interactive tools for carrying out a number of different computational tasks. They are generally not as fast as other analysis tools (since they are interactive) and often reflect current ideas. Most can be improved and interested users should file bug reports and feature requests on the Bioconductor mailing list. Bioconductor welcome collaboration in many different forms. These include new packages, fixes or additions to existing packages and help on different projects that are currently underway. Please see the {\em Current Projects} web page to see if there are any projects that are intersting to you. \subsection*{How to report a bug} Please provide enough information for us to help you. This typically includes the platform (windows, Unix, Macintosh) that you are using as well as version numbers for R and for the package that seems to be working incorrectly. Include a small complete example that can be run and demonstrates the problem. In some cases it is also important that you describe what you thought you should get. Please note: \begin{itemize} \item bugs in R should be reported to the R community \item missing features are not bugs -- they are feature requests. \end{itemize} \section{Bioconductor Design} Bioconductor relies on the R package system to distribute code and data. Most packages use S4 methods and classes (as described in {\em Programming with Data} by J. M. Chambers). This adherence to object oriented programming makes it easier to build component software and helps to deal with the complexity of the data. One of the important Bioconductor packages is {\em annotate}. This package provides access to various genomic annotation data. This package makes use of various web resources and precompiled data packages to provide tools for exploring biological data. \section{Session Information} The version number of R and packages loaded for generating the vignette were: \begin{verbatim} <>= sessionInfo() @ \end{verbatim} \end{document} Biobase/vignettes/legacy/HowTo.Rnw0000644000175200017520000000575014516003524020153 0ustar00biocbuildbiocbuild% % NOTE -- ONLY EDIT THE .Rnw FILE!!! The .tex file is % likely to be overwritten. % % \VignetteIndexEntry{Notes for writing introductory 'how to' documents} %\VignetteDepends{} %\VignetteKeywords{Expression Analysis} %\VignettePackage{Biobase} \documentclass[12pt]{article} \usepackage{times} \usepackage{hyperref} \newcommand{\Rfunction}[1]{{\texttt{#1}}} \newcommand{\Robject}[1]{{\texttt{#1}}} \newcommand{\Rpackage}[1]{{\textit{#1}}} \newcommand{\Rmethod}[1]{{\texttt{#1}}} \newcommand{\Rfunarg}[1]{{\texttt{#1}}} \newcommand{\Rclass}[1]{{\textit{#1}}} \textwidth=6.2in \textheight=8.5in %\parskip=.3cm \oddsidemargin=.1in \evensidemargin=.1in \headheight=-.3in \newcommand{\scscst}{\scriptscriptstyle} \newcommand{\scst}{\scriptstyle} \bibliographystyle{plainnat} \begin{document} \section*{How to write a HowTo} One of the goals of the Bioconductor project is to produce (and encourage others to produce) documentation on how to perform various tasks. Our main interest is in tasks associated with computational biology. However, we hope to produce HowTo documents for a wide variety of tasks. R has a very good mechanism for documenting individual functions, methods and classes. However, there are many situations where the task that we want to perform requires the use of many components. In other cases we would like to document the overall purpose of an R package rather than the individual functions. In this document we provide some advice on how to construct a document to describe how to perform a task. In most cases HowTo's will be written using \Rfunction{Sweave} in the \Rpackage{tools} package. In this document we give some general advice on how to write a HowTo. Of courese there is no \textit{right} way to do this but we feel that we can provide a few design principles that will help authors write better HowTo's. These design principles are listed below: \begin{itemize} \item It should be short (2 pages at most) and explicit. \item It should be about a single topic. \item It should contain runnable code and rely on data that are available in R or the libraries needed to carry out the task being documented. \item HowTo's should not be about single functions. The function documentation is the right place to document that. HowTo's should document a process or task and will typically involve several functions. \item To paraphrase Paul Halmos, you should imagine that you are writing a document for a friend who is as smart and has the same general level of knowledge as you but who does not know how to do the specific task at hand. \item Make use of the indexing system. The title of the document should be included in the \verb+% \VignetteIndexEntry+. It should contain the word \verb+HowTo+ to easily allow for programmatic manipulation and sorting of the HowTo's. \end{itemize} \section{Session Information} The version number of R and packages loaded for generating the vignette were: \begin{verbatim} <>= sessionInfo() @ \end{verbatim} \end{document} Biobase/vignettes/legacy/Qviews.Rnw0000644000175200017520000001164614516003524020372 0ustar00biocbuildbiocbuild%\VignetteIndexEntry{quick views of eSet instances} %\VignetteDepends{Biobase, ALL} %\VignetteKeywords{Data representation, Analysis} %\VignettePackage{Biobase} % % NOTE -- ONLY EDIT THE .Rnw FILE!!! The .tex file is % likely to be overwritten. % \documentclass[12pt]{article} \usepackage{amsmath,fullpage} \usepackage[authoryear,round]{natbib} \usepackage{hyperref} \textwidth=6.2in \textheight=8.5in %\parskip=.3cm \oddsidemargin=.1in \evensidemargin=.1in \headheight=-.3in \newcommand{\scscst}{\scriptscriptstyle} \newcommand{\scst}{\scriptstyle} \newcommand{\Rfunction}[1]{{\texttt{#1}}} \newcommand{\Robject}[1]{{\texttt{#1}}} \newcommand{\Rpackage}[1]{{\textit{#1}}} \newcommand{\Rmethod}[1]{{\texttt{#1}}} \newcommand{\Rfunarg}[1]{{\texttt{#1}}} \newcommand{\Rclass}[1]{{\textit{#1}}} \textwidth=6.2in \bibliographystyle{plainnat} \begin{document} %\setkeys{Gin}{width=0.55\textwidth} \title{quick view tools for eSets} \author{VJ Carey} \maketitle \tableofcontents \section{Introduction} In teaching a course where a large number of datasets are introduced over a short period of time, the relationship between data content and software infrastructure can be hard to master. This document introduces a number of experimental approaches to getting rapid access to key elements of eSet derivatives. We will work with the ALL data for demonstration. <>= if (!("Biobase" %in% search())) library(Biobase) if (!("ALL" %in% search())) library(ALL) if (!("ALL" %in% objects())) data(ALL) <>= library(Biobase) library(ALL) data(ALL) ALL @ \section{An alternative to the current show method} It could be nice to tell the package from which the dataset was loaded. <>= dataSource = function(dsn) { if (!is(dsn, "character")) dsn = try(deparse(substitute(dsn))) if (inherits(dsn, "try-error")) stop("can't parse dsn arg") dd = data()$results if (is.na(match(dsn, dd[,"Item"]))) return(NULL) paste("package:", dd[ dd[,"Item"] == dsn, "Package" ], sep="") } <>= setGeneric("peek", function(x,maxattr=10)standardGeneric("peek")) setMethod("peek", c("eSet", "numeric"), function(x,maxattr=10) { ds = dataSource(deparse(substitute(x))) if (!is.null(ds)) ds = paste(" [from ", ds, "]", sep="") else ds = "" cat(deparse(substitute(x)), ds, ":\n", sep="") cat("Platform annotation: ", annotation(x),"\n") cat("primary assay results are:\n") print(dim(x)) cat("sample attributes are:\n") vn = rownames(varMetadata(x)) ld = substr(varMetadata(x)$labelDescription,1,50) dd = data.frame("labelDescription[truncated]"=ld) rownames(dd) = vn if ((ndd <- nrow(dd)) <= maxattr) show(dd) else { cat("first", maxattr, "of", ndd, "attributes:\n") show(dd[1:maxattr,,drop=FALSE]) } cat("----------\n") cat("use varTable to see values/freqs of all sample attributes\n") cat("----------\n") }) setMethod("peek", c("eSet", "missing"), function(x,maxattr=10) { ds = dataSource(deparse(substitute(x))) if (!is.null(ds)) ds = paste(" [from ", ds, "]", sep="") else ds = "" cat(deparse(substitute(x)), ds, ":\n", sep="") cat("Platform annotation: ", annotation(x),"\n") cat("primary assay results are:\n") print(dim(x)) cat("sample attributes are:\n") vn = rownames(varMetadata(x)) ld = substr(varMetadata(x)$labelDescription,1,50) dd = data.frame("labelDescription[truncated]"=ld) rownames(dd) = vn if ((ndd <- nrow(dd)) <= maxattr) show(dd) else { cat("first", maxattr, "of", ndd, "attributes:\n") show(dd[1:maxattr,,drop=FALSE]) } cat("----------\n") cat("use varTable to see values/freqs of all sample attributes\n") cat("----------\n") }) setGeneric("varTable", function(x, full=FALSE, max=Inf) standardGeneric("varTable")) setMethod("varTable", c("eSet", "missing", "ANY"), function(x, full=FALSE, max=Inf) varTable(x, FALSE, max)) setMethod("varTable", c("eSet", "logical", "ANY"), function(x, full=FALSE, max=Inf) { ans = lapply( names(pData(x)), function(z)table(x[[z]]) ) tans = lapply(ans, names) kp = 1:min(max,length(tans)) if (!full) ans = sapply(tans, selectSome, 3)[kp] else ans = tans[kp] names(ans) = names(pData(x))[kp] ans }) setGeneric("varNames", function(x) standardGeneric("varNames")) setMethod("varNames", "eSet", function(x) names(pData(x))) @ We use \texttt{peek} to get a concise view: <>= peek(ALL) @ \section{Sample characterization} Getting a handle on sample characterization requires survey of variable names. <>= varNames(ALL) @ In addition, we need to know values taken. This can be very cumbersome. We have a few parameters on how much detail is provided. <>= varTable(ALL, max=4) @ In the above, we are only showing 4 attributes. By default all attributes would be shown. Note that the report on range of values is truncated and is character mode. We can show the full range of values using the \texttt{full} parameter. <>= varTable(ALL, full=TRUE, max=4) @ \end{document}