From f3792824d7e9b48f9e440234369722844ec26988 Mon Sep 17 00:00:00 2001
From: lgatto MSnbase
+ MSnbase
(Laurent Gatto and Lilley 2012) aims are
providing a reproducible research framework to proteomics data analysis.
It should allow researcher to easily mine mass spectrometry data,
explore the data and its statistical properties and visually display
these. MSnbase
+ MSnbase
also aims at being compatible with the infrastructure implemented in
-Bioconductor, in particular Biobase.
+Bioconductor, in particular Biobase.
As such, classes developed specifically for proteomics mass spectrometry
data are based on the eSet and ExpressionSet classes.
The main goal is to assure seamless compatibility with existing meta
data structure, accessor methods and normalisation techniques. This vignette illustrates MSnbase
+ This vignette illustrates MSnbase
utility using a dummy data sets provided with the package without
describing the underlying data structures. More details can be found in
the package, classes, method and function documentations. A description
@@ -198,11 +198,11 @@ Parallel support is provided by the BiocParallel
and various backends including multicore (forking, default on Linux),
simple networf network of workstations (SNOW, default on Windows) using
sockets, forking or MPI among others. We refer readers to the
-documentation in BiocParallel.
+documentation in BiocParallel.
Automatic parallel processing of spectra is only established for a
certain number of spectra (per file). This value (default is 1000) can
be set with the MSnbase
+ MSnbase
is able to import raw MS data stored in one of the
Questions and bugs
Introduction
-Speed and memory requirementsBiocParallel
+
setMSnbaseParallelThresh
function.Data structure and content
Importing experiments
-XML
-based formats as well as peak lists in the
mfg
format3.Importing experimentsOnly spectra of a given MS level can be loaded at a time by setting
the
msLevel
parameter accordingly in
readMSData
and in-memory data. In this document,
-we will use the itraqdata
data set, provided with MSnbase.
+we will use the itraqdata
data set, provided with MSnbase.
It includes feature metadata, accessible with the fData
accessor. The metadata includes identification data for the 55 MS2
spectra.
Version 2.0 and later of MSnbase +
Version 2.0 and later of MSnbase provide a new on-disk data storage model (see the benchmarking vignette for more details). The new data backend is compatible with the orignal in-memory model. To make use of @@ -294,10 +294,10 @@
See also section @ref(sec:io2) to import quantitative data stored in
-spreadsheets into R for further processing using MSnbase.
+spreadsheets into R for further processing using MSnbase.
The MSnbase-iovignette[in R, open it with
vignette("MSnbase-io")
or read it online here]
-gives a general overview of MSnbase’s
+gives a general overview of MSnbase’s
input/ouput capabilites.
See section @ref(sec:io3) for importing chromatographic data of SRM/MRM experiments.
@@ -443,7 +443,7 @@?ReporterIons
for details about how to generate new
ReporterIons objects.
@@ -538,7 +538,7 @@Chromatogram objects
mtof_bpc <- chromatogram(mtof, aggregationFun = "max")
See the Chromatogram
help page and the vignettes from
-the xcms package
+the xcms package
for more details and use cases, also on how to extract chromatograms for
specific ions.
openMSfile
(mzML
, mzXML
, …).
Below we first download a raw data file from the PRIDE repository and
create an MSmap containing all the MS1 spectra between acquired
@@ -655,7 +655,7 @@ Customising your plots The MSnbase
plot
methods have a logical plot
parameter
(default is TRUE
), that specifies if the plot should be
printed to the current device. A plot object is also (invisibly)
returned, so that it can be saved as a variable for later use or for
customisation.
MSnbase +
MSnbase
uses the package to generate plots, which can subsequently easily be
customised. More details about can be found in (Wickham 2009) (especially chapter 8) and on http://had.co.nz/ggplot2/. Finally, if a plot object has
been saved in a variable p
, it is possible to obtain a
@@ -724,8 +724,8 @@
mzID
from the mzID
+the mzR package
+or mzID
from the mzID
package. The MSnbase
package relies on the former (which is
faster) and offers a simplified interface by converting the dedicated
identification data objects into data.frames
.
@@ -831,10 +831,10 @@ MSnbase +
MSnbase
is able to integrate identification data from mzIdentML
(Jones et al. 2012) files.
We first load two example files shipped with the MSnbase +
We first load two example files shipped with the MSnbase
containing raw data (as above) and the corresponding identification
results respectively. The raw data is read with the
readMSData
, as demonstrated above. As can be seen, the
@@ -944,7 +944,7 @@
MSnbase +
MSnbase
is able to calculate theoretical peptide fragments via
calculateFragments
.
@@ -1004,7 +1004,7 @@@@ -1317,12 +1317,12 @@Quality controlMSnbase +
MSnbase allows easy and flexible access to the data, which allows to visualise data features to assess it’s quality. Some methods are readily available, although many QC approaches will be experiment specific and @@ -1140,8 +1140,8 @@
Focusing on specific MZ values## - - - Processing information - - - ## Data loaded: Wed May 11 18:54:39 2011 ## Updated from version 0.3.0 to 0.3.1 [Fri Jul 8 20:23:25 2016] -## Curves <= 400 set to '0': Tue Apr 30 16:23:48 2024 -## Spectra cleaned: Tue Apr 30 16:23:49 2024 +## Curves <= 400 set to '0': Tue Apr 30 17:23:48 2024 +## Spectra cleaned: Tue Apr 30 17:23:48 2024 ## MSnbase version: 1.1.22 ## - - - Meta data - - - ## phenoData @@ -1215,7 +1215,7 @@
Reporter ions quantitationBiobase +that extend the well-known eSet class defined in the Biobase package. MSnSet instances are very similar to ExpressionSet objects, except for the experiment meta-data that captures MIAPE specific information. The assay data is a matrix of @@ -1249,9 +1249,9 @@
Reporter ions quantitation## - - - Processing information - - - ## Data loaded: Wed May 11 18:54:39 2011 ## Updated from version 0.3.0 to 0.3.1 [Fri Jul 8 20:23:25 2016] -## Curves <= 400 set to '0': Tue Apr 30 16:23:48 2024 -## Spectra cleaned: Tue Apr 30 16:23:49 2024 -## iTRAQ4 quantification by trapezoidation: Tue Apr 30 16:23:51 2024 +## Curves <= 400 set to '0': Tue Apr 30 17:23:48 2024 +## Spectra cleaned: Tue Apr 30 17:23:48 2024 +## iTRAQ4 quantification by trapezoidation: Tue Apr 30 17:23:50 2024 ## MSnbase version: 1.1.22
MSnbase
also supports the mzTab
format, a light-weight,
tab-delimited file format for proteomics data. mzTab
files
can be read into R with readMzTabData
to create and
MSnSet instance.
See the MSnbase-io vignette for a general overview of MSnbase’s +
See the MSnbase-io vignette for a general overview of MSnbase’s input/ouput capabilites.
library(Rdisop)
@@ -1472,7 +1472,7 @@ Data imputationx <- impute(naset, "min")
processingData(x)
## - - - Processing information - - -
-## Data imputation using min Tue Apr 30 16:23:52 2024
+## Data imputation using min Tue Apr 30 17:23:51 2024
## MSnbase version: 1.15.6
@@ -1544,7 +1544,7 @@ Please read ?MsCoreUtils::impute_matix()
for a
description of the different methods.
normalize.quantiles
function of the preprocessCore
+normalize.quantiles
function of the preprocessCore
package.
quantiles.robust
: Applies robust quantile
normalisation (Bolstad et al. 2003) as
implemented in the normalize.quantiles.robust
function of
-the preprocessCore
+the preprocessCore
package.
vsn
: Applies variance stabilisation normalization
(Huber et al. 2002) as implemented in the
-vsn2
function of the vsn
+vsn2
function of the vsn
package.
max
: Each feature’s reporter intensity is divided by
the maximum of the reporter ions intensities.
MSnbase
provides one function, combineFeatures
, that allows to
aggregate features stored in an MSnSet using build-in or user
defined summary function and return a new MSnSet instance. The
@@ -1696,13 +1696,13 @@
Of interest is also the iPQF
spectra-to-protein
summarisation method, which integrates peptide spectra characteristics
@@ -1716,7 +1716,7 @@
Note that if samples are not multiplexed, label-free MS2 quantitation -by spectral counting is possible using MSnbase. +by spectral counting is possible using MSnbase. Once individual spectra have been assigned to peptides and proteins (see section @ref(sec:id)), it becomes straightforward to estimate protein quantities using the simple peptide counting method, as illustrated in @@ -1736,7 +1736,7 @@
Such count data could then be further analyses using dedicated count methods (originally developed for high-throughput sequencing) and -directly available for MSnSet instances in the msmsTests +directly available for MSnSet instances in the msmsTests Bioconductor package.
siquant <- quantify(msexp, method = "SIn")
processingData(siquant)
## - - - Processing information - - -
-## Data loaded: Tue Apr 30 16:23:47 2024
-## Filtered 2 unidentified peptides out [Tue Apr 30 16:23:48 2024]
-## Quantitation by total ion current [Tue Apr 30 16:23:54 2024]
-## Combined 3 features into 3 using sum: Tue Apr 30 16:23:54 2024
-## Quantification by SIn [Tue Apr 30 16:23:54 2024]
+## Data loaded: Tue Apr 30 17:23:47 2024
+## Filtered 2 unidentified peptides out [Tue Apr 30 17:23:47 2024]
+## Quantitation by total ion current [Tue Apr 30 17:23:54 2024]
+## Combined 3 features into 3 using sum: Tue Apr 30 17:23:54 2024
+## Quantification by SIn [Tue Apr 30 17:23:54 2024]
## MSnbase version: 2.29.5
exprs(siquant)
MSnbase +
MSnbase
provides functionality to compare spectra against each other. The first
notable function is plot
. If two Spectrum2 objects
are provided plot
will draw two plots: the upper and lower
@@ -1828,7 +1828,7 @@
Currently MSnbase +
Currently MSnbase
supports three different metrics to compare spectra against each other:
common
to calculate the number of common peaks,
cor
to calculate the Pearson correlation and
@@ -1886,7 +1886,7 @@
MSnbase +
MSnbase provides, among others, a ReporterIons object for iTRAQ 4-plex that includes the 145 peaks, called iTRAQ5. This can then be used to quantify the experiment as show in section @ref(sec:quant) to @@ -2165,7 +2165,7 @@
In summary, when experiments with different samples need to be combined (along the columns), one needs to (1) clarify the sample names @@ -2231,7 +2231,7 @@
The next code chunk illustrates the averaging function using three replicated experiments from (Tan et al. -2009) available in the pRolocdata +2009) available in the pRolocdata package.
library("pRolocdata")
@@ -2267,7 +2267,7 @@ Averaging MSnSet instances## Q7KJ73 2 2 2 2
## Q7JZN0 0 0 0 0
We are going to visualise the average data on a principle component
-(PCA) plot using the plot2D
function from the pRoloc
+(PCA) plot using the plot2D
function from the pRoloc
package (L. Gatto et al. 2014). In
addition, we are going to use the measure of dispersion to highlight
averages with high variability by taking, for each protein, the maximum
@@ -2295,12 +2295,12 @@
MSnbase +
MSnbase
can also be used for MSE data independent acquisition from
Waters instrument. The MSE pipeline depends on the
-Bioconductor synapter
+Bioconductor synapter
package (Bond et al. 2013) that produces
-MSnSet instances for indvidual acquisitions. The MSnbase
+MSnSet instances for indvidual acquisitions. The MSnbase
infrastructure can subsequently be used to further combine experiments,
as shown in section @ref(sec:comb2) and apply top3 quantitation
using the topN
method.
## R version 4.3.3 (2024-02-29)
-## Platform: x86_64-pc-linux-gnu (64-bit)
+## R version 4.4.0 Patched (2024-04-24 r86483)
+## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 22.04.4 LTS
##
## Matrix products: default
@@ -2332,98 +2332,99 @@ Session information## [8] methods base
##
## other attached packages:
-## [1] gplots_3.1.3.1 msdata_0.42.0 pRoloc_1.42.0
-## [4] BiocParallel_1.36.0 MLInterfaces_1.82.0 cluster_2.1.6
-## [7] annotate_1.80.0 XML_3.99-0.16.1 AnnotationDbi_1.64.1
-## [10] IRanges_2.36.0 pRolocdata_1.40.0 Rdisop_1.62.0
-## [13] zoo_1.8-12 MSnbase_2.29.5 ProtGenerics_1.34.0
-## [16] S4Vectors_0.40.2 mzR_2.36.0 Rcpp_1.0.12
-## [19] Biobase_2.62.0 BiocGenerics_0.48.1 ggplot2_3.5.1
-## [22] BiocStyle_2.30.0
+## [1] gplots_3.1.3.1 msdata_0.43.0 pRoloc_1.43.2
+## [4] BiocParallel_1.37.1 MLInterfaces_1.83.0 cluster_2.1.6
+## [7] annotate_1.81.2 XML_3.99-0.16.1 AnnotationDbi_1.65.2
+## [10] IRanges_2.37.1 pRolocdata_1.41.0 Rdisop_1.63.0
+## [13] zoo_1.8-12 MSnbase_2.29.5 ProtGenerics_1.35.4
+## [16] S4Vectors_0.41.7 mzR_2.37.3 Rcpp_1.0.12
+## [19] Biobase_2.63.1 BiocGenerics_0.49.1 ggplot2_3.5.1
+## [22] BiocStyle_2.31.0
##
## loaded via a namespace (and not attached):
-## [1] splines_4.3.3 bitops_1.0-7
+## [1] splines_4.4.0 bitops_1.0-7
## [3] filelock_1.0.3 tibble_3.2.1
## [5] hardhat_1.3.1 preprocessCore_1.61.0
## [7] pROC_1.18.5 rpart_4.1.23
-## [9] lifecycle_1.0.4 doParallel_1.0.17
-## [11] globals_0.16.3 lattice_0.22-6
-## [13] MASS_7.3-60.0.1 MultiAssayExperiment_1.28.0
-## [15] dendextend_1.17.1 magrittr_2.0.3
-## [17] limma_3.58.1 plotly_4.10.4
-## [19] sass_0.4.9 rmarkdown_2.26
-## [21] jquerylib_0.1.4 yaml_2.3.8
-## [23] MsCoreUtils_1.14.1 DBI_1.2.2
-## [25] RColorBrewer_1.1-3 lubridate_1.9.3
-## [27] abind_1.4-5 zlibbioc_1.48.2
-## [29] GenomicRanges_1.54.1 purrr_1.0.2
-## [31] mixtools_2.0.0 AnnotationFilter_1.26.0
-## [33] RCurl_1.98-1.14 nnet_7.3-19
-## [35] rappdirs_0.3.3 ipred_0.9-14
-## [37] lava_1.8.0 GenomeInfoDbData_1.2.11
-## [39] listenv_0.9.1 parallelly_1.37.1
-## [41] pkgdown_2.0.9.9000 ncdf4_1.22
-## [43] codetools_0.2-20 DelayedArray_0.28.0
-## [45] xml2_1.3.6 tidyselect_1.2.1
-## [47] farver_2.1.1 viridis_0.6.5
-## [49] matrixStats_1.3.0 BiocFileCache_2.10.2
-## [51] jsonlite_1.8.8 caret_6.0-94
-## [53] e1071_1.7-14 survival_3.6-4
-## [55] iterators_1.0.14 systemfonts_1.0.6
-## [57] foreach_1.5.2 segmented_2.0-4
-## [59] tools_4.3.3 progress_1.2.3
-## [61] ragg_1.3.0 glue_1.7.0
-## [63] prodlim_2023.08.28 gridExtra_2.3
-## [65] SparseArray_1.2.4 mgcv_1.9-1
-## [67] xfun_0.43 MatrixGenerics_1.14.0
-## [69] GenomeInfoDb_1.38.8 dplyr_1.1.4
-## [71] withr_3.0.0 BiocManager_1.30.22
-## [73] fastmap_1.1.1 fansi_1.0.6
-## [75] caTools_1.18.2 digest_0.6.35
-## [77] timechange_0.3.0 R6_2.5.1
-## [79] textshaping_0.3.7 colorspace_2.1-0
-## [81] gtools_3.9.5 lpSolve_5.6.20
-## [83] biomaRt_2.58.2 RSQLite_2.3.6
-## [85] utf8_1.2.4 tidyr_1.3.1
-## [87] generics_0.1.3 hexbin_1.28.3
-## [89] data.table_1.15.4 recipes_1.0.10
-## [91] FNN_1.1.4 class_7.3-22
-## [93] prettyunits_1.2.0 PSMatch_1.6.0
-## [95] httr_1.4.7 htmlwidgets_1.6.4
-## [97] S4Arrays_1.2.1 ModelMetrics_1.2.2.2
-## [99] pkgconfig_2.0.3 gtable_0.3.5
-## [101] timeDate_4032.109 blob_1.2.4
-## [103] impute_1.76.0 XVector_0.42.0
-## [105] htmltools_0.5.8.1 bookdown_0.39
-## [107] MALDIquant_1.22.2 clue_0.3-65
-## [109] scales_1.3.0 png_0.1-8
-## [111] gower_1.0.1 knitr_1.46
-## [113] reshape2_1.4.4 coda_0.19-4.1
-## [115] nlme_3.1-164 curl_5.2.1
-## [117] proxy_0.4-27 cachem_1.0.8
-## [119] stringr_1.5.1 KernSmooth_2.23-22
-## [121] parallel_4.3.3 mzID_1.40.0
-## [123] vsn_3.70.0 desc_1.4.3
-## [125] pillar_1.9.0 vctrs_0.6.5
-## [127] pcaMethods_1.94.0 randomForest_4.7-1.1
-## [129] dbplyr_2.5.0 xtable_1.8-4
-## [131] evaluate_0.23 mvtnorm_1.2-4
-## [133] cli_3.6.2 compiler_4.3.3
-## [135] rlang_1.1.3 crayon_1.5.2
-## [137] future.apply_1.11.2 labeling_0.4.3
-## [139] LaplacesDemon_16.1.6 mclust_6.1.1
-## [141] QFeatures_1.12.0 affy_1.80.0
-## [143] plyr_1.8.9 fs_1.6.4
-## [145] stringi_1.8.3 viridisLite_0.4.2
-## [147] munsell_0.5.1 Biostrings_2.70.3
-## [149] lazyeval_0.2.2 Matrix_1.6-5
-## [151] hms_1.1.3 future_1.33.2
-## [153] bit64_4.0.5 KEGGREST_1.42.0
-## [155] statmod_1.5.0 highr_0.10
-## [157] SummarizedExperiment_1.32.0 kernlab_0.9-32
-## [159] igraph_2.0.3 memoise_2.0.1
-## [161] affyio_1.72.0 bslib_0.7.0
-## [163] sampling_2.10 bit_4.0.5
+## [9] lifecycle_1.0.4 httr2_1.0.1
+## [11] doParallel_1.0.17 globals_0.16.3
+## [13] lattice_0.22-6 MASS_7.3-60.2
+## [15] MultiAssayExperiment_1.29.2 dendextend_1.17.1
+## [17] magrittr_2.0.3 limma_3.59.10
+## [19] plotly_4.10.4 sass_0.4.9
+## [21] rmarkdown_2.26 jquerylib_0.1.4
+## [23] yaml_2.3.8 MsCoreUtils_1.15.7
+## [25] DBI_1.2.2 RColorBrewer_1.1-3
+## [27] lubridate_1.9.3 abind_1.4-5
+## [29] zlibbioc_1.49.3 GenomicRanges_1.55.4
+## [31] purrr_1.0.2 mixtools_2.0.0
+## [33] AnnotationFilter_1.27.0 RCurl_1.98-1.14
+## [35] nnet_7.3-19 rappdirs_0.3.3
+## [37] ipred_0.9-14 lava_1.8.0
+## [39] GenomeInfoDbData_1.2.12 listenv_0.9.1
+## [41] parallelly_1.37.1 pkgdown_2.0.9.9000
+## [43] ncdf4_1.22 codetools_0.2-20
+## [45] DelayedArray_0.29.9 xml2_1.3.6
+## [47] tidyselect_1.2.1 farver_2.1.1
+## [49] UCSC.utils_0.99.7 viridis_0.6.5
+## [51] matrixStats_1.3.0 BiocFileCache_2.11.2
+## [53] jsonlite_1.8.8 caret_6.0-94
+## [55] e1071_1.7-14 survival_3.6-4
+## [57] iterators_1.0.14 systemfonts_1.0.6
+## [59] foreach_1.5.2 segmented_2.0-4
+## [61] tools_4.4.0 progress_1.2.3
+## [63] ragg_1.3.0 glue_1.7.0
+## [65] prodlim_2023.08.28 gridExtra_2.3
+## [67] SparseArray_1.3.7 mgcv_1.9-1
+## [69] xfun_0.43 MatrixGenerics_1.15.1
+## [71] GenomeInfoDb_1.39.14 dplyr_1.1.4
+## [73] withr_3.0.0 BiocManager_1.30.22
+## [75] fastmap_1.1.1 fansi_1.0.6
+## [77] caTools_1.18.2 digest_0.6.35
+## [79] timechange_0.3.0 R6_2.5.1
+## [81] textshaping_0.3.7 colorspace_2.1-0
+## [83] gtools_3.9.5 lpSolve_5.6.20
+## [85] biomaRt_2.59.1 RSQLite_2.3.6
+## [87] utf8_1.2.4 tidyr_1.3.1
+## [89] generics_0.1.3 hexbin_1.28.3
+## [91] data.table_1.15.4 recipes_1.0.10
+## [93] FNN_1.1.4 class_7.3-22
+## [95] prettyunits_1.2.0 PSMatch_1.7.2
+## [97] httr_1.4.7 htmlwidgets_1.6.4
+## [99] S4Arrays_1.3.7 ModelMetrics_1.2.2.2
+## [101] pkgconfig_2.0.3 gtable_0.3.5
+## [103] timeDate_4032.109 blob_1.2.4
+## [105] impute_1.77.0 XVector_0.43.1
+## [107] htmltools_0.5.8.1 bookdown_0.39
+## [109] MALDIquant_1.22.2 clue_0.3-65
+## [111] scales_1.3.0 png_0.1-8
+## [113] gower_1.0.1 knitr_1.46
+## [115] reshape2_1.4.4 coda_0.19-4.1
+## [117] nlme_3.1-164 curl_5.2.1
+## [119] proxy_0.4-27 cachem_1.0.8
+## [121] stringr_1.5.1 KernSmooth_2.23-22
+## [123] parallel_4.4.0 mzID_1.41.0
+## [125] vsn_3.71.1 desc_1.4.3
+## [127] pillar_1.9.0 vctrs_0.6.5
+## [129] pcaMethods_1.95.0 randomForest_4.7-1.1
+## [131] dbplyr_2.5.0 xtable_1.8-4
+## [133] evaluate_0.23 mvtnorm_1.2-4
+## [135] cli_3.6.2 compiler_4.4.0
+## [137] rlang_1.1.3 crayon_1.5.2
+## [139] future.apply_1.11.2 labeling_0.4.3
+## [141] LaplacesDemon_16.1.6 mclust_6.1.1
+## [143] QFeatures_1.13.7 affy_1.81.0
+## [145] plyr_1.8.9 fs_1.6.4
+## [147] stringi_1.8.3 viridisLite_0.4.2
+## [149] munsell_0.5.1 Biostrings_2.71.6
+## [151] lazyeval_0.2.2 Matrix_1.7-0
+## [153] hms_1.1.3 future_1.33.2
+## [155] bit64_4.0.5 KEGGREST_1.43.1
+## [157] statmod_1.5.0 highr_0.10
+## [159] SummarizedExperiment_1.33.3 kernlab_0.9-32
+## [161] igraph_2.0.3 memoise_2.0.1
+## [163] affyio_1.73.0 bslib_0.7.0
+## [165] sampling_2.10 bit_4.0.5
This part will be automatically updated when the object is modified with it’s ad hoc methods, as illustrated later.↩︎
The identification data can also be passed as dedicated
-identification objects such as mzRident
from the mzR package
-or mzID
from thr mzID
+identification objects such as mzRident
from the mzR package
+or mzID
from thr mzID
package, or as a data.frame
- see
?addIdentifionData
for details.↩︎
The code to generate the histograms has been contributed
diff --git a/articles/v01-MSnbase-demo_files/figure-html/idvis-1.png b/articles/v01-MSnbase-demo_files/figure-html/idvis-1.png
index 6203c03b006f8310ad8955c32558ded3f58de357..1085b04cb3647effb51a3390e2c4807bf2a68208 100644
GIT binary patch
literal 83398
zcmd43Wmr^S^fr7bF$hrsNq@qqbV;X*hyzM@H`3A_f`rl_T}pR1Ly6MT!w5qoAPrK|
z?;h0W`9GiD_j*4)=emT!nX}K{Yp=N1z1E(0ax#*HS1GST5JU)n{!{^i@LV7WNB{CA
z@ITtv!#d#CB?D>6r{FiZ4#gY1!LKW?pR3zL5KSQFA6EFnwlM_#2f?2{R&q&Rn{@vG
zbM!nvS5?-{aW`?ZZV+zU45XjREx3e)ThAd}s!T$pvfV
zTZz{mbL08xCJKjG_`jZVhgpAeb4$w?=fBv`(+|Lt#_Q}&GXgI|xpte42P?yAXO*e0
zixfp#bqY%<&Z$Jy{2$#n>LmFlUi)z+yuf@g{uyr)(o}SZg7hk$K-lolSqSoYg2(Pt
zf18qWNcR+}+r>fPIZrh`;7_i@0JqatJwKg3FY5O`+o?a@NAG3aIep$`RNk6_2O*AD
z3f#6@@g2v_a+XuwH{>NH17Tg&R-QXa(<5!fVud!ItC~k^ref%sNNni-e0}jo{VLnu
z!2zEe0|ceXw_f|mM(cfID-f0;cD^Ha@L3zqMIer@wi*uQo66N<%gIS~%YT!B3w=2K
z@jxsRcDko~UPZnkrND4&=z-WF96n?iF7iy`HpHTEzHf7$ZJOq(qFG~YwJQffqVzL(
za^&nyztdsMzk1lycK7(255Gla#_4*E)o@}#*(y!eX-?y2H+8NBwymtJM9uSeFW7kz
z6G9w*;( TN%ir9G%lAuVWcT&z^l;H41vYYM#r
z$?2=9mz)>FvU=;PcI`91`Zznrg4|$$|Nn(Jbvs;$y9Xx+C9KSj# gQMa4ssiz%EGf ~6nSpx-(Pg@})q-uY*z>7S;CRCH9y#Bxq(Q$$9K<;|^23qAr%sU+bDnt&g
zsKfJcU5BhpgXT$ZQO^``vTTTu#)^_iayJVF@QSsVotEl-zFhjJ=g*+{_W}|7)w=3s
z-3{V%pR;QdUw8{9s^TLw1CO$b4O$xPLjYRmxDyCGjAds?=U#?{xHL0{lv@cSBYY%R
zTby_{A89*lJxZ{=qsg{KJ3Tg){xCiAip}ZgBggvsBIT$N8}yO4%&yFL0K4?Fj~my|
z%~yX_m%KQ_kclDtQY{U1lbfEdHSBS!eV=j!pVv9#TNWfZX_k;8@!d4$D$KAHHan11YM-r!r
zdQW~oYs~(Q5xStc5mv$4C=6&fL9YGvrt%;`;seiyG?k*T(i}9A<0NT^yb+8Nz)J6V
zCrc{-#s6OjbH01;UsT70L^GL$`=G2ZOY=E(*7#^yMGAyXg#);`l~@p3bQJt}%wk^L
z1G83FdbW2c=F=Z7qSn?}VDIjpCCSXGf9wAG23owOAMQp`+O?QoL%6)aKq?Qe9vlcB
z1M)bv&_jI813$2kzS$KG#6Z|N{hINpp2iq6D;m|^Igo&JLd76HLn%3#OO;2_^vp9(
zQ+r5|-&M2A#HbNDsiGe~6{vJBL4?xrw3G-TOX)Hl$vkQ@T6XA!(@?A^wEC<49k&;V
zo!%Wm)Fw^iu%9zeR`|T1S{dOJj6?!EVNwGgS}eYK`@Z0=Gk}rKb0L^iE^(2M3Y1bK
zkUJsOq)#6BF_)@