ggplot2/0000755000177400001440000000000013031552555012026 5ustar murdochusersggplot2/inst/0000755000177400001440000000000013031512434012773 5ustar murdochusersggplot2/inst/CITATION0000644000177400001440000000061612664047404014146 0ustar murdochuserscitHeader("To cite ggplot2 in publications, please use:") citEntry(entry = "book", author = "Hadley Wickham", title = "ggplot2: Elegant Graphics for Data Analysis", publisher = "Springer-Verlag New York", year = "2009", isbn = "978-0-387-98140-6", url = "http://ggplot2.org", textVersion = "H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2009." ) ggplot2/inst/doc/0000755000177400001440000000000013031512434013540 5ustar murdochusersggplot2/inst/doc/extending-ggplot2.R0000644000177400001440000005653213031512434017237 0ustar murdochusers## ---- include = FALSE---------------------------------------------------- knitr::opts_chunk$set(collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 7, fig.align = "center") library(ggplot2) ## ----ggproto-intro------------------------------------------------------- A <- ggproto("A", NULL, x = 1, inc = function(self) { self$x <- self$x + 1 } ) A$x A$inc() A$x A$inc() A$inc() A$x ## ----chull--------------------------------------------------------------- StatChull <- ggproto("StatChull", Stat, compute_group = function(data, scales) { data[chull(data$x, data$y), , drop = FALSE] }, required_aes = c("x", "y") ) ## ------------------------------------------------------------------------ stat_chull <- function(mapping = NULL, data = NULL, geom = "polygon", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ## ------------------------------------------------------------------------ ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_chull(fill = NA, colour = "black") ## ------------------------------------------------------------------------ ggplot(mpg, aes(displ, hwy, colour = drv)) + geom_point() + stat_chull(fill = NA) ## ------------------------------------------------------------------------ ggplot(mpg, aes(displ, hwy)) + stat_chull(geom = "point", size = 4, colour = "red") + geom_point() ## ------------------------------------------------------------------------ StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = rng) mod <- lm(y ~ x, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm() ## ------------------------------------------------------------------------ StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, params, n = 100, formula = y ~ x) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = seq(rng[1], rng[2], length = n)) mod <- lm(formula, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm(formula = y ~ poly(x, 10)) + stat_lm(formula = y ~ poly(x, 10), geom = "point", colour = "red", n = 20) ## ------------------------------------------------------------------------ #' @inheritParams ggplot2::stat_identity #' @param formula The modelling formula passed to \code{lm}. Should only #' involve \code{y} and \code{x} #' @param n Number of points used for interpolation. stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ## ------------------------------------------------------------------------ StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", setup_params = function(data, params) { if (!is.null(params$bandwidth)) return(params) xs <- split(data$x, data$group) bws <- vapply(xs, bw.nrd0, numeric(1)) bw <- mean(bws) message("Picking bandwidth of ", signif(bw, 3)) params$bandwidth <- bw params }, compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, y = d$y) } ) stat_density_common <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, bandwidth = NULL, ...) { layer( stat = StatDensityCommon, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(bandwidth = bandwidth, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, colour = drv)) + stat_density_common() ggplot(mpg, aes(displ, colour = drv)) + stat_density_common(bandwidth = 0.5) ## ------------------------------------------------------------------------ StatDensityCommon <- ggproto("StatDensity2", Stat, required_aes = "x", default_aes = aes(y = ..density..), compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, drv, colour = ..density..)) + stat_density_common(bandwidth = 1, geom = "point") ## ------------------------------------------------------------------------ ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ## ------------------------------------------------------------------------ StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", default_aes = aes(y = ..density..), setup_params = function(data, params) { min <- min(data$x) - 3 * params$bandwidth max <- max(data$x) + 3 * params$bandwidth list( bandwidth = params$bandwidth, min = min, max = max, na.rm = params$na.rm ) }, compute_group = function(data, scales, min, max, bandwidth = 1) { d <- density(data$x, bw = bandwidth, from = min, to = max) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ggplot(mpg, aes(displ, drv, fill = ..density..)) + stat_density_common(bandwidth = 1, geom = "raster") ## ----GeomSimplePoint----------------------------------------------------- GeomSimplePoint <- ggproto("GeomSimplePoint", Geom, required_aes = c("x", "y"), default_aes = aes(shape = 19, colour = "black"), draw_key = draw_key_point, draw_panel = function(data, panel_scales, coord) { coords <- coord$transform(data, panel_scales) grid::pointsGrob( coords$x, coords$y, pch = coords$shape, gp = grid::gpar(col = coords$colour) ) } ) geom_simple_point <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePoint, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_simple_point() ## ------------------------------------------------------------------------ GeomSimplePolygon <- ggproto("GeomPolygon", Geom, required_aes = c("x", "y"), default_aes = aes( colour = NA, fill = "grey20", size = 0.5, linetype = 1, alpha = 1 ), draw_key = draw_key_polygon, draw_group = function(data, panel_scales, coord) { n <- nrow(data) if (n <= 2) return(grid::nullGrob()) coords <- coord$transform(data, panel_scales) # A polygon can only have a single colour, fill, etc, so take from first row first_row <- coords[1, , drop = FALSE] grid::polygonGrob( coords$x, coords$y, default.units = "native", gp = grid::gpar( col = first_row$colour, fill = scales::alpha(first_row$fill, first_row$alpha), lwd = first_row$size * .pt, lty = first_row$linetype ) ) } ) geom_simple_polygon <- function(mapping = NULL, data = NULL, stat = "chull", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePolygon, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_simple_polygon(aes(colour = class), fill = NA) ## ------------------------------------------------------------------------ GeomPolygonHollow <- ggproto("GeomPolygonHollow", GeomPolygon, default_aes = aes(colour = "black", fill = NA, size = 0.5, linetype = 1, alpha = NA) ) geom_chull <- function(mapping = NULL, data = NULL, position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, geom = GeomPolygonHollow, data = data, mapping = mapping, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_chull() ## ------------------------------------------------------------------------ theme_grey()$legend.key new_theme <- theme_grey() + theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ## ------------------------------------------------------------------------ new_theme <- theme_grey() %+replace% theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ## ----axis-line-ex-------------------------------------------------------- df <- data.frame(x = 1:3, y = 1:3) base <- ggplot(df, aes(x, y)) + geom_point() + theme_minimal() base base + theme(text = element_text(colour = "red")) ## ------------------------------------------------------------------------ layout <- function(data, params) { data.frame(PANEL = c(1L, 2L), SCALE_X = 1L, SCALE_Y = 1L) } ## ------------------------------------------------------------------------ mapping <- function(data, layout, params) { if (plyr::empty(data)) { return(cbind(data, PANEL = integer(0))) } rbind( cbind(data, PANEL = 1L), cbind(data, PANEL = 2L) ) } ## ------------------------------------------------------------------------ render <- function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) { # Place panels according to settings if (params$horizontal) { # Put panels in matrix and convert to a gtable panels <- matrix(panels, ncol = 2) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(c(1, 1), "null"), heights = unit(1, "null"), clip = "on") # Add spacing according to theme panel_spacing <- if (is.null(theme$panel.spacing.x)) { theme$panel.spacing } else { theme$panel.spacing.x } panel_table <- gtable::gtable_add_col_space(panel_table, panel_spacing) } else { panels <- matrix(panels, ncol = 1) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(1, "null"), heights = unit(c(1, 1), "null"), clip = "on") panel_spacing <- if (is.null(theme$panel.spacing.y)) { theme$panel.spacing } else { theme$panel.spacing.y } panel_table <- gtable::gtable_add_row_space(panel_table, panel_spacing) } # Name panel grobs so they can be found later panel_table$layout$name <- paste0("panel-", c(1, 2)) # Construct the axes axes <- render_axes(ranges[1], ranges[1], coord, theme, transpose = TRUE) # Add axes around each panel panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_width_l <- unit(grid::convertWidth( grid::grobWidth(axes$y$left[[1]]), "cm", TRUE), "cm") axis_width_r <- unit(grid::convertWidth( grid::grobWidth(axes$y$right[[1]]), "cm", TRUE), "cm") ## We do it reverse so we don't change the position of panels when we add axes for (i in rev(panel_pos_h)) { panel_table <- gtable::gtable_add_cols(panel_table, axis_width_r, i) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$right, length(panel_pos_v)), t = panel_pos_v, l = i + 1, clip = "off") panel_table <- gtable::gtable_add_cols(panel_table, axis_width_l, i - 1) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$left, length(panel_pos_v)), t = panel_pos_v, l = i, clip = "off") } ## Recalculate as gtable has changed panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_height_t <- unit(grid::convertHeight( grid::grobHeight(axes$x$top[[1]]), "cm", TRUE), "cm") axis_height_b <- unit(grid::convertHeight( grid::grobHeight(axes$x$bottom[[1]]), "cm", TRUE), "cm") for (i in rev(panel_pos_v)) { panel_table <- gtable::gtable_add_rows(panel_table, axis_height_b, i) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$bottom, length(panel_pos_h)), t = i + 1, l = panel_pos_h, clip = "off") panel_table <- gtable::gtable_add_rows(panel_table, axis_height_t, i - 1) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$top, length(panel_pos_h)), t = i, l = panel_pos_h, clip = "off") } panel_table } ## ------------------------------------------------------------------------ # Constructor: shrink is required to govern whether scales are trained on # Stat-transformed data or not. facet_duplicate <- function(horizontal = TRUE, shrink = TRUE) { ggproto(NULL, FacetDuplicate, shrink = shrink, params = list( horizontal = horizontal ) ) } FacetDuplicate <- ggproto("FacetDuplicate", Facet, compute_layout = layout, map_data = mapping, draw_panels = render ) ## ------------------------------------------------------------------------ p <- ggplot(mtcars, aes(x = hp, y = mpg)) + geom_point() p p + facet_duplicate() ## ------------------------------------------------------------------------ library(scales) facet_trans <- function(trans, horizontal = TRUE, shrink = TRUE) { ggproto(NULL, FacetTrans, shrink = shrink, params = list( trans = scales::as.trans(trans), horizontal = horizontal ) ) } FacetTrans <- ggproto("FacetTrans", Facet, # Almost as before but we want different y-scales for each panel compute_layout = function(data, params) { data.frame(PANEL = c(1L, 2L), SCALE_X = 1L, SCALE_Y = c(1L, 2L)) }, # Same as before map_data = function(data, layout, params) { if (plyr::empty(data)) { return(cbind(data, PANEL = integer(0))) } rbind( cbind(data, PANEL = 1L), cbind(data, PANEL = 2L) ) }, # This is new. We create a new scale with the defined transformation init_scales = function(layout, x_scale = NULL, y_scale = NULL, params) { scales <- list() if (!is.null(x_scale)) { scales$x <- plyr::rlply(max(layout$SCALE_X), x_scale$clone()) } if (!is.null(y_scale)) { y_scale_orig <- y_scale$clone() y_scale_new <- y_scale$clone() y_scale_new$trans <- params$trans # Make sure that oob values are kept y_scale_new$oob <- function(x, ...) x scales$y <- list(y_scale_orig, y_scale_new) } scales }, # We must make sure that the second scale is trained on transformed data train_scales = function(x_scales, y_scales, layout, data, params) { # Transform data for second panel prior to scale training if (!is.null(y_scales)) { data <- lapply(data, function(layer_data) { match_id <- match(layer_data$PANEL, layout$PANEL) y_vars <- intersect(y_scales[[1]]$aesthetics, names(layer_data)) trans_scale <- layer_data$PANEL == 2L for (i in y_vars) { layer_data[trans_scale, i] <- y_scales[[2]]$transform(layer_data[trans_scale, i]) } layer_data }) } Facet$train_scales(x_scales, y_scales, layout, data, params) }, # this is where we actually modify the data. It cannot be done in $map_data as that function # doesn't have access to the scales finish_data = function(data, layout, x_scales, y_scales, params) { match_id <- match(data$PANEL, layout$PANEL) y_vars <- intersect(y_scales[[1]]$aesthetics, names(data)) trans_scale <- data$PANEL == 2L for (i in y_vars) { data[trans_scale, i] <- y_scales[[2]]$transform(data[trans_scale, i]) } data }, # A few changes from before to accomodate that axes are now not duplicate of each other # We also add a panel strip to annotate the different panels draw_panels = function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) { # Place panels according to settings if (params$horizontal) { # Put panels in matrix and convert to a gtable panels <- matrix(panels, ncol = 2) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(c(1, 1), "null"), heights = unit(1, "null"), clip = "on") # Add spacing according to theme panel_spacing <- if (is.null(theme$panel.spacing.x)) { theme$panel.spacing } else { theme$panel.spacing.x } panel_table <- gtable::gtable_add_col_space(panel_table, panel_spacing) } else { panels <- matrix(panels, ncol = 1) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(1, "null"), heights = unit(c(1, 1), "null"), clip = "on") panel_spacing <- if (is.null(theme$panel.spacing.y)) { theme$panel.spacing } else { theme$panel.spacing.y } panel_table <- gtable::gtable_add_row_space(panel_table, panel_spacing) } # Name panel grobs so they can be found later panel_table$layout$name <- paste0("panel-", c(1, 2)) # Construct the axes axes <- render_axes(ranges[1], ranges, coord, theme, transpose = TRUE) # Add axes around each panel grobWidths <- function(x) { unit(vapply(x, function(x) { grid::convertWidth( grid::grobWidth(x), "cm", TRUE) }, numeric(1)), "cm") } panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_width_l <- grobWidths(axes$y$left) axis_width_r <- grobWidths(axes$y$right) ## We do it reverse so we don't change the position of panels when we add axes for (i in rev(seq_along(panel_pos_h))) { panel_table <- gtable::gtable_add_cols(panel_table, axis_width_r[i], panel_pos_h[i]) if (params$horizontal) { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$right[i], length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i] + 1, clip = "off") } else { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$right, length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i] + 1, clip = "off") } panel_table <- gtable::gtable_add_cols(panel_table, axis_width_l[i], panel_pos_h[i] - 1) if (params$horizontal) { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$left[i], length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i], clip = "off") } else { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$left, length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i], clip = "off") } } ## Recalculate as gtable has changed panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_height_t <- unit(grid::convertHeight( grid::grobHeight(axes$x$top[[1]]), "cm", TRUE), "cm") axis_height_b <- unit(grid::convertHeight( grid::grobHeight(axes$x$bottom[[1]]), "cm", TRUE), "cm") for (i in rev(panel_pos_v)) { panel_table <- gtable::gtable_add_rows(panel_table, axis_height_b, i) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$bottom, length(panel_pos_h)), t = i + 1, l = panel_pos_h, clip = "off") panel_table <- gtable::gtable_add_rows(panel_table, axis_height_t, i - 1) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$top, length(panel_pos_h)), t = i, l = panel_pos_h, clip = "off") } # Add strips strips <- render_strips( x = data.frame(name = c("Original", paste0("Transformed (", params$trans$name, ")"))), labeller = label_value, theme = theme) panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t strip_height <- unit(grid::convertHeight( grid::grobHeight(strips$x$top[[1]]), "cm", TRUE), "cm") for (i in rev(seq_along(panel_pos_v))) { panel_table <- gtable::gtable_add_rows(panel_table, strip_height, panel_pos_v[i] - 1) if (params$horizontal) { panel_table <- gtable::gtable_add_grob(panel_table, strips$x$top, t = panel_pos_v[i], l = panel_pos_h, clip = "off") } else { panel_table <- gtable::gtable_add_grob(panel_table, strips$x$top[i], t = panel_pos_v[i], l = panel_pos_h, clip = "off") } } panel_table } ) ## ------------------------------------------------------------------------ ggplot(mtcars, aes(x = hp, y = mpg)) + geom_point() + facet_trans('sqrt') ## ------------------------------------------------------------------------ facet_bootstrap <- function(n = 9, prop = 0.2, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, strip.position = "top") { facet <- facet_wrap(~.bootstrap, nrow = nrow, ncol = ncol, scales = scales, shrink = shrink, strip.position = strip.position) facet$params$n <- n facet$params$prop <- prop ggproto(NULL, FacetBootstrap, shrink = shrink, params = facet$params ) } FacetBootstrap <- ggproto("FacetBootstrap", FacetWrap, compute_layout = function(data, params) { id <- seq_len(params$n) dims <- wrap_dims(params$n, params$nrow, params$ncol) layout <- data.frame(PANEL = factor(id)) if (params$as.table) { layout$ROW <- as.integer((id - 1L) %/% dims[2] + 1L) } else { layout$ROW <- as.integer(dims[1] - (id - 1L) %/% dims[2]) } layout$COL <- as.integer((id - 1L) %% dims[2] + 1L) layout <- layout[order(layout$PANEL), , drop = FALSE] rownames(layout) <- NULL # Add scale identification layout$SCALE_X <- if (params$free$x) id else 1L layout$SCALE_Y <- if (params$free$y) id else 1L cbind(layout, .bootstrap = id) }, map_data = function(data, layout, params) { if (is.null(data) || nrow(data) == 0) { return(cbind(data, PANEL = integer(0))) } n_samples <- round(nrow(data) * params$prop) new_data <- lapply(seq_len(params$n), function(i) { cbind(data[sample(nrow(data), n_samples), , drop = FALSE], PANEL = i) }) do.call(rbind, new_data) } ) ggplot(diamonds, aes(carat, price)) + geom_point(alpha = 0.1) + facet_bootstrap(n = 9, prop = 0.05) ggplot2/inst/doc/extending-ggplot2.Rmd0000644000177400001440000011762513031512434017561 0ustar murdochusers--- title: "Extending ggplot2" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Extending ggplot2} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set(collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 7, fig.align = "center") library(ggplot2) ``` This vignette documents the official extension mechanism provided in ggplot2 2.0.0. This vignette is a high-level adjunct to the low-level details found in `?Stat`, `?Geom` and `?theme`. You'll learn how to extend ggplot2 by creating a new stat, geom, or theme. As you read this document, you'll see many things that will make you scratch your head and wonder why on earth is it designed this way? Mostly it's historical accident - I wasn't a terribly good R programmer when I started writing ggplot2 and I made a lot of questionable decisions. We cleaned up as many of those issues as possible in the 2.0.0 release, but some fixes simply weren't worth the effort. ## ggproto All ggplot2 objects are built using the ggproto system of object oriented programming. This OO system is used only in one place: ggplot2. This is mostly historical accident: ggplot2 started off using [proto]( https://cran.r-project.org/package=proto) because I needed mutable objects. This was well before the creation of (the briefly lived) [mutatr](http://vita.had.co.nz/papers/mutatr.html), reference classes and R6: proto was the only game in town. But why ggproto? Well when we turned to add an official extension mechanism to ggplot2, we found a major problem that caused problems when proto objects were extended in a different package (methods were evaluated in ggplot2, not the package where the extension was added). We tried converting to R6, but it was a poor fit for the needs of ggplot2. We could've modified proto, but that would've first involved understanding exactly how proto worked, and secondly making sure that the changes didn't affect other users of proto. It's strange to say, but this is a case where inventing a new OO system was actually the right answer to the problem! Fortunately Winston is now very good at creating OO systems, so it only took him a day to come up with ggproto: it maintains all the features of proto that ggplot2 needs, while allowing cross package inheritance to work. Here's a quick demo of ggproto in action: ```{r ggproto-intro} A <- ggproto("A", NULL, x = 1, inc = function(self) { self$x <- self$x + 1 } ) A$x A$inc() A$x A$inc() A$inc() A$x ``` The majority of ggplot2 classes are immutable and static: the methods neither use nor modify state in the class. They're mostly used as a convenient way of bundling related methods together. To create a new geom or stat, you will just create a new ggproto that inherits from `Stat`, `Geom` and override the methods described below. ## Creating a new stat ### The simplest stat We'll start by creating a very simple stat: one that gives the convex hull (the _c_ hull) of a set of points. First we create a new ggproto object that inherits from `Stat`: ```{r chull} StatChull <- ggproto("StatChull", Stat, compute_group = function(data, scales) { data[chull(data$x, data$y), , drop = FALSE] }, required_aes = c("x", "y") ) ``` The two most important components are the `compute_group()` method (which does the computation), and the `required_aes` field, which lists which aesthetics must be present in order to for the stat to work. Next we write a layer function. Unfortunately, due to an early design mistake I called these either `stat_()` or `geom_()`. A better decision would have been to call them `layer_()` functions: that's a more accurate description because every layer involves a stat _and_ a geom. All layer functions follow the same form - you specify defaults in the function arguments and then call the `layer()` function, sending `...` into the `params` argument. The arguments in `...` will either be arguments for the geom (if you're making a stat wrapper), arguments for the stat (if you're making a geom wrapper), or aesthetics to be set. `layer()` takes care of teasing the different parameters apart and making sure they're stored in the right place: ```{r} stat_chull <- function(mapping = NULL, data = NULL, geom = "polygon", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ``` (Note that if you're writing this in your own package, you'll either need to call `ggplot2::layer()` explicitly, or import the `layer()` function into your package namespace.) Once we have a layer function we can try our new stat: ```{r} ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_chull(fill = NA, colour = "black") ``` (We'll see later how to change the defaults of the geom so that you don't need to specify `fill = NA` every time.) Once we've written this basic object, ggplot2 gives a lot for free. For example, ggplot2 automatically preserves aesthetics that are constant within each group: ```{r} ggplot(mpg, aes(displ, hwy, colour = drv)) + geom_point() + stat_chull(fill = NA) ``` We can also override the default geom to display the convex hull in a different way: ```{r} ggplot(mpg, aes(displ, hwy)) + stat_chull(geom = "point", size = 4, colour = "red") + geom_point() ``` ### Stat parameters A more complex stat will do some computation. Let's implement a simple version of `geom_smooth()` that adds a line of best fit to a plot. We create a `StatLm` that inherits from `Stat` and a layer function, `stat_lm()`: ```{r} StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = rng) mod <- lm(y ~ x, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm() ``` `StatLm` is inflexible because it has no parameters. We might want to allow the user to control the model formula and the number of points used to generate the grid. To do so, we add arguments to the `compute_group()` method and our wrapper function: ```{r} StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, params, n = 100, formula = y ~ x) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = seq(rng[1], rng[2], length = n)) mod <- lm(formula, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm(formula = y ~ poly(x, 10)) + stat_lm(formula = y ~ poly(x, 10), geom = "point", colour = "red", n = 20) ``` Note that we don't _have_ to explicitly include the new parameters in the arguments for the layer, `...` will get passed to the right place anyway. But you'll need to document them somewhere so the user knows about them. Here's a brief example. Note `@inheritParams ggplot2::stat_identity`: that will automatically inherit documentation for all the parameters also defined for `stat_identity()`. ```{r} #' @inheritParams ggplot2::stat_identity #' @param formula The modelling formula passed to \code{lm}. Should only #' involve \code{y} and \code{x} #' @param n Number of points used for interpolation. stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ``` ### Picking defaults Sometimes you have calculations that should be performed once for the complete dataset, not once for each group. This is useful for picking sensible default values. For example, if we want to do a density estimate, it's reasonable to pick one bandwidth for the whole plot. The following Stat creates a variation of the `stat_density()` that picks one bandwidth for all groups by choosing the mean of the "best" bandwidth for each group (I have no theoretical justification for this, but it doesn't seem unreasonable). To do this we override the `setup_params()` method. It's passed the data and a list of params, and returns an updated list. ```{r} StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", setup_params = function(data, params) { if (!is.null(params$bandwidth)) return(params) xs <- split(data$x, data$group) bws <- vapply(xs, bw.nrd0, numeric(1)) bw <- mean(bws) message("Picking bandwidth of ", signif(bw, 3)) params$bandwidth <- bw params }, compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, y = d$y) } ) stat_density_common <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, bandwidth = NULL, ...) { layer( stat = StatDensityCommon, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(bandwidth = bandwidth, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, colour = drv)) + stat_density_common() ggplot(mpg, aes(displ, colour = drv)) + stat_density_common(bandwidth = 0.5) ``` I recommend using `NULL` as a default value. If you pick important parameters automatically, it's a good idea to `message()` to the user (and when printing a floating point parameter, using `signif()` to show only a few significant digits). ### Variable names and default aesthetics This stat illustrates another important point. If we want to make this stat usable with other geoms, we should return a variable called `density` instead of `y`. Then we can set up the `default_aes` to automatically map `density` to `y`, which allows the user to override it to use with different geoms: ```{r} StatDensityCommon <- ggproto("StatDensity2", Stat, required_aes = "x", default_aes = aes(y = ..density..), compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, drv, colour = ..density..)) + stat_density_common(bandwidth = 1, geom = "point") ``` However, using this stat with the area geom doesn't work quite right. The areas don't stack on top of each other: ```{r} ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ``` This is because each density is computed independently, and the estimated `x`s don't line up. We can resolve that issue by computing the range of the data once in `setup_params()`. ```{r} StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", default_aes = aes(y = ..density..), setup_params = function(data, params) { min <- min(data$x) - 3 * params$bandwidth max <- max(data$x) + 3 * params$bandwidth list( bandwidth = params$bandwidth, min = min, max = max, na.rm = params$na.rm ) }, compute_group = function(data, scales, min, max, bandwidth = 1) { d <- density(data$x, bw = bandwidth, from = min, to = max) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ggplot(mpg, aes(displ, drv, fill = ..density..)) + stat_density_common(bandwidth = 1, geom = "raster") ``` ### Exercises 1. Extend `stat_chull` to compute the alpha hull, as from the [alphahull](https://cran.r-project.org/package=alphahull) package. Your new stat should take an `alpha` argument. 1. Modify the final version of `StatDensityCommon` to allow the user to specify the `min` and `max` parameters. You'll need to modify both the layer function and the `compute_group()` method. 1. Compare and contrast `StatLm` to `ggplot2::StatSmooth`. What key differences make `StatSmooth` more complex than `StatLm`? ## Creating a new geom It's harder to create a new geom than a new stat because you also need to know some grid. ggplot2 is built on top of grid, so you'll need to know the basics of drawing with grid. If you're serious about adding a new geom, I'd recommend buying [R graphics](http://amzn.com/B00I60M26G) by Paul Murrell. It tells you everything you need to know about drawing with grid. ### A simple geom It's easiest to start with a simple example. The code below is a simplified version of `geom_point()`: ```{r GeomSimplePoint} GeomSimplePoint <- ggproto("GeomSimplePoint", Geom, required_aes = c("x", "y"), default_aes = aes(shape = 19, colour = "black"), draw_key = draw_key_point, draw_panel = function(data, panel_scales, coord) { coords <- coord$transform(data, panel_scales) grid::pointsGrob( coords$x, coords$y, pch = coords$shape, gp = grid::gpar(col = coords$colour) ) } ) geom_simple_point <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePoint, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_simple_point() ``` This is very similar to defining a new stat. You always need to provide fields/methods for the four pieces shown above: * `required_aes` is a character vector which lists all the aesthetics that the user must provide. * `default_aes` lists the aesthetics that have default values. * `draw_key` provides the function used to draw the key in the legend. You can see a list of all the build in key functions in `?draw_key` * `draw_panel()` is where the magic happens. This function takes three arguments and returns a grid grob. It is called once for each panel. It's the most complicated part and is described in more detail below. `draw_panel()` has three arguments: * `data`: a data frame with one column for each aesthetic. * `panel_scales`: a list containing information about the x and y scales for the current panel. * `coord`: an object describing the coordinate system. Generally you won't use `panel_scales` and `coord` directly, but you will always use them to transform the data: `coords <- coord$transform(data, panel_scales)`. This creates a data frame where position variables are scaled to the range 0--1. You then take this data and call a grid grob function. (Transforming for non-Cartesian coordinate systems is quite complex - you're best off transforming your data to the form accepted by an existing ggplot2 geom and passing it.) ### Collective geoms Overriding `draw_panel()` is most appropriate if there is one graphic element per row. In other cases, you want graphic element per group. For example, take polygons: each row gives one vertex of a polygon. In this case, you should instead override `draw_group()`. The following code makes a simplified version of `GeomPolygon`: ```{r} GeomSimplePolygon <- ggproto("GeomPolygon", Geom, required_aes = c("x", "y"), default_aes = aes( colour = NA, fill = "grey20", size = 0.5, linetype = 1, alpha = 1 ), draw_key = draw_key_polygon, draw_group = function(data, panel_scales, coord) { n <- nrow(data) if (n <= 2) return(grid::nullGrob()) coords <- coord$transform(data, panel_scales) # A polygon can only have a single colour, fill, etc, so take from first row first_row <- coords[1, , drop = FALSE] grid::polygonGrob( coords$x, coords$y, default.units = "native", gp = grid::gpar( col = first_row$colour, fill = scales::alpha(first_row$fill, first_row$alpha), lwd = first_row$size * .pt, lty = first_row$linetype ) ) } ) geom_simple_polygon <- function(mapping = NULL, data = NULL, stat = "chull", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePolygon, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_simple_polygon(aes(colour = class), fill = NA) ``` There are a few things to note here: * We override `draw_group()` instead of `draw_panel()` because we want one polygon per group, not one polygon per row. * If the data contains two or fewer points, there's no point trying to draw a polygon, so we return a `nullGrob()`. This is the graphical equivalent of `NULL`: it's a grob that doesn't draw anything and doesn't take up any space. * Note the units: `x` and `y` should always be drawn in "native" units. (The default units for `pointGrob()` is a native, so we didn't need to change it there). `lwd` is measured in points, but ggplot2 uses mm, so we need to multiply it by the adjustment factor `.pt`. You might want to compare this to the real `GeomPolygon`. You'll see it overrides `draw_panel()` because it uses some tricks to make `polygonGrob()` produce multiple polygons in one call. This is considerably more complicated, but gives better performance. ### Inheriting from an existing Geom Sometimes you just want to make a small modification to an existing geom. In this case, rather than inheriting from `Geom` you can inherit from an existing subclass. For example, we might want to change the defaults for `GeomPolygon` to work better with `StatChull`: ```{r} GeomPolygonHollow <- ggproto("GeomPolygonHollow", GeomPolygon, default_aes = aes(colour = "black", fill = NA, size = 0.5, linetype = 1, alpha = NA) ) geom_chull <- function(mapping = NULL, data = NULL, position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, geom = GeomPolygonHollow, data = data, mapping = mapping, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_chull() ``` This doesn't allow you to use different geoms with the stat, but that seems appropriate here since the convex hull is primarily a polygonal feature. ### Exercises 1. Compare and contrast `GeomPoint` with `GeomSimplePoint`. 1. Compare and contract `GeomPolygon` with `GeomSimplePolygon`. ## Creating your own theme If you're going to create your own complete theme, there are a few things you need to know: * Overriding existing elements, rather than modifying them * The four global elements that affect (almost) every other theme element * Complete vs. incomplete elements ### Overriding elements By default, when you add a new theme element, it inherits values from the existing theme. For example, the following code sets the key colour to red, but it inherits the existing fill colour: ```{r} theme_grey()$legend.key new_theme <- theme_grey() + theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ``` To override it completely, use `%+replace%` instead of `+`: ```{r} new_theme <- theme_grey() %+replace% theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ``` ### Global elements There are four elements that affect the global appearance of the plot: Element | Theme function | Description -------------|-------------------|------------------------ line | `element_line()` | all line elements rect | `element_rect()` | all rectangular elements text | `element_text()` | all text title | `element_text()` | all text in title elements (plot, axes & legend) These set default properties that are inherited by more specific settings. These are most useful for setting an overall "background" colour and overall font settings (e.g. family and size). ```{r axis-line-ex} df <- data.frame(x = 1:3, y = 1:3) base <- ggplot(df, aes(x, y)) + geom_point() + theme_minimal() base base + theme(text = element_text(colour = "red")) ``` You should generally start creating a theme by modifying these values. ### Complete vs incomplete It is useful to understand the difference between complete and incomplete theme objects. A *complete* theme object is one produced by calling a theme function with the attribute `complete = TRUE`. Theme functions `theme_grey()` and `theme_bw()` are examples of complete theme functions. Calls to `theme()` produce *incomplete* theme objects, since they represent (local) modifications to a theme object rather than returning a complete theme object per se. When adding an incomplete theme to a complete one, the result is a complete theme. Complete and incomplete themes behave somewhat differently when added to a ggplot object: * Adding an incomplete theme augments the current theme object, replacing only those properties of elements defined in the call to `theme()`. * Adding a complete theme wipes away the existing theme and applies the new theme. ## Creating a new facetting One of the more daunting exercises in ggplot2 extensions is to create a new facetting system. The reason for this is that when creating new facettings you take on the responsibility of how (almost) everything is drawn on the screen, and many do not have experience with directly using [gtable](https://cran.r-project.org/package=gtable) and [grid](https://cran.r-project.org/package=grid) upon which the ggplot2 rendering is build. If you decide to venture into facetting extensions it is highly recommended to gain proficiency with the above-mentioned packages. The `Facet` class in ggplot2 is very powerfull as it takes on responsibility of a wide range of tasks. The main tasks of a `Facet` object are: * Define a layout; that is, a partitioning of the data into different plot areas (panels) as well as which panels share position scales. * Map plot data into the correct panels, potentially duplicating data if it should exist in multiple panels (e.g. margins in `facet_grid()`). * Assemble all panels into a final gtable, adding axes, strips and decorations in the process. Apart from these three tasks, for which functionality must be implemented, there are a couple of additional extension points where sensible defaults have been provided. These can generally be ignored, but adventurous developers can override them for even more control: * Initialization and training of positional scales for each panel. * Decoration in front of and behind each panel. * Drawing of axis labels To show how a new facetting class is created we will start simple and go through each of the required methods in turn to build up `facet_duplicate()` that simply duplicate our plot into two panels. After this we will tinker with it a bit to show some of the more powerful possibilities. ### Creating a layout specification A layout in the context of facets is a `data.frame` that defines a mapping between data and the panels it should reside in as well as which positional scales should be used. The output should at least contain the columns `PANEL`, `SCALE_X`, and `SCALE_Y`, but will often contain more to help assign data to the correct panel (`facet_grid()` will e.g. also return the facetting variables associated with each panel). Let's make a function that defines a duplicate layout: ```{r} layout <- function(data, params) { data.frame(PANEL = c(1L, 2L), SCALE_X = 1L, SCALE_Y = 1L) } ``` This is quite simple as the facetting should just define two panels irrespectively of the input data and parameters. ### Mapping data into panels In order for ggplot2 to know which data should go where it needs the data to be assigned to a panel. The purpose of the mapping step is to assign a `PANEL` column to the layer data identifying which panel it belongs to. ```{r} mapping <- function(data, layout, params) { if (plyr::empty(data)) { return(cbind(data, PANEL = integer(0))) } rbind( cbind(data, PANEL = 1L), cbind(data, PANEL = 2L) ) } ``` here we first investigate whether we have gotten an empty `data.frame` and if not we duplicate the data and assign the original data to the first panel and the new data to the second panel. ### Laying out the panels While the two functions above has been decievingly simple, this last one is going to take some more work. Our goal is to draw two panels beside (or above) each other with axes etc. ```{r} render <- function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) { # Place panels according to settings if (params$horizontal) { # Put panels in matrix and convert to a gtable panels <- matrix(panels, ncol = 2) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(c(1, 1), "null"), heights = unit(1, "null"), clip = "on") # Add spacing according to theme panel_spacing <- if (is.null(theme$panel.spacing.x)) { theme$panel.spacing } else { theme$panel.spacing.x } panel_table <- gtable::gtable_add_col_space(panel_table, panel_spacing) } else { panels <- matrix(panels, ncol = 1) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(1, "null"), heights = unit(c(1, 1), "null"), clip = "on") panel_spacing <- if (is.null(theme$panel.spacing.y)) { theme$panel.spacing } else { theme$panel.spacing.y } panel_table <- gtable::gtable_add_row_space(panel_table, panel_spacing) } # Name panel grobs so they can be found later panel_table$layout$name <- paste0("panel-", c(1, 2)) # Construct the axes axes <- render_axes(ranges[1], ranges[1], coord, theme, transpose = TRUE) # Add axes around each panel panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_width_l <- unit(grid::convertWidth( grid::grobWidth(axes$y$left[[1]]), "cm", TRUE), "cm") axis_width_r <- unit(grid::convertWidth( grid::grobWidth(axes$y$right[[1]]), "cm", TRUE), "cm") ## We do it reverse so we don't change the position of panels when we add axes for (i in rev(panel_pos_h)) { panel_table <- gtable::gtable_add_cols(panel_table, axis_width_r, i) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$right, length(panel_pos_v)), t = panel_pos_v, l = i + 1, clip = "off") panel_table <- gtable::gtable_add_cols(panel_table, axis_width_l, i - 1) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$left, length(panel_pos_v)), t = panel_pos_v, l = i, clip = "off") } ## Recalculate as gtable has changed panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_height_t <- unit(grid::convertHeight( grid::grobHeight(axes$x$top[[1]]), "cm", TRUE), "cm") axis_height_b <- unit(grid::convertHeight( grid::grobHeight(axes$x$bottom[[1]]), "cm", TRUE), "cm") for (i in rev(panel_pos_v)) { panel_table <- gtable::gtable_add_rows(panel_table, axis_height_b, i) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$bottom, length(panel_pos_h)), t = i + 1, l = panel_pos_h, clip = "off") panel_table <- gtable::gtable_add_rows(panel_table, axis_height_t, i - 1) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$top, length(panel_pos_h)), t = i, l = panel_pos_h, clip = "off") } panel_table } ``` ### Assembling the Facet class Usually all methods are defined within the class definition in the same way as is done for `Geom` and `Stat`. Here we have split it out so we could go through each in turn. All that remains is to assign our functions to the correct methods as well as making a constructor ```{r} # Constructor: shrink is required to govern whether scales are trained on # Stat-transformed data or not. facet_duplicate <- function(horizontal = TRUE, shrink = TRUE) { ggproto(NULL, FacetDuplicate, shrink = shrink, params = list( horizontal = horizontal ) ) } FacetDuplicate <- ggproto("FacetDuplicate", Facet, compute_layout = layout, map_data = mapping, draw_panels = render ) ``` Now with everything assembled, lets test it out: ```{r} p <- ggplot(mtcars, aes(x = hp, y = mpg)) + geom_point() p p + facet_duplicate() ``` ### Doing more with facets The example above was pretty useless and we'll now try to expand on it to add some actual usability. We are going to make a facetting that adds panels with y-transformed axes: ```{r} library(scales) facet_trans <- function(trans, horizontal = TRUE, shrink = TRUE) { ggproto(NULL, FacetTrans, shrink = shrink, params = list( trans = scales::as.trans(trans), horizontal = horizontal ) ) } FacetTrans <- ggproto("FacetTrans", Facet, # Almost as before but we want different y-scales for each panel compute_layout = function(data, params) { data.frame(PANEL = c(1L, 2L), SCALE_X = 1L, SCALE_Y = c(1L, 2L)) }, # Same as before map_data = function(data, layout, params) { if (plyr::empty(data)) { return(cbind(data, PANEL = integer(0))) } rbind( cbind(data, PANEL = 1L), cbind(data, PANEL = 2L) ) }, # This is new. We create a new scale with the defined transformation init_scales = function(layout, x_scale = NULL, y_scale = NULL, params) { scales <- list() if (!is.null(x_scale)) { scales$x <- plyr::rlply(max(layout$SCALE_X), x_scale$clone()) } if (!is.null(y_scale)) { y_scale_orig <- y_scale$clone() y_scale_new <- y_scale$clone() y_scale_new$trans <- params$trans # Make sure that oob values are kept y_scale_new$oob <- function(x, ...) x scales$y <- list(y_scale_orig, y_scale_new) } scales }, # We must make sure that the second scale is trained on transformed data train_scales = function(x_scales, y_scales, layout, data, params) { # Transform data for second panel prior to scale training if (!is.null(y_scales)) { data <- lapply(data, function(layer_data) { match_id <- match(layer_data$PANEL, layout$PANEL) y_vars <- intersect(y_scales[[1]]$aesthetics, names(layer_data)) trans_scale <- layer_data$PANEL == 2L for (i in y_vars) { layer_data[trans_scale, i] <- y_scales[[2]]$transform(layer_data[trans_scale, i]) } layer_data }) } Facet$train_scales(x_scales, y_scales, layout, data, params) }, # this is where we actually modify the data. It cannot be done in $map_data as that function # doesn't have access to the scales finish_data = function(data, layout, x_scales, y_scales, params) { match_id <- match(data$PANEL, layout$PANEL) y_vars <- intersect(y_scales[[1]]$aesthetics, names(data)) trans_scale <- data$PANEL == 2L for (i in y_vars) { data[trans_scale, i] <- y_scales[[2]]$transform(data[trans_scale, i]) } data }, # A few changes from before to accomodate that axes are now not duplicate of each other # We also add a panel strip to annotate the different panels draw_panels = function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) { # Place panels according to settings if (params$horizontal) { # Put panels in matrix and convert to a gtable panels <- matrix(panels, ncol = 2) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(c(1, 1), "null"), heights = unit(1, "null"), clip = "on") # Add spacing according to theme panel_spacing <- if (is.null(theme$panel.spacing.x)) { theme$panel.spacing } else { theme$panel.spacing.x } panel_table <- gtable::gtable_add_col_space(panel_table, panel_spacing) } else { panels <- matrix(panels, ncol = 1) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(1, "null"), heights = unit(c(1, 1), "null"), clip = "on") panel_spacing <- if (is.null(theme$panel.spacing.y)) { theme$panel.spacing } else { theme$panel.spacing.y } panel_table <- gtable::gtable_add_row_space(panel_table, panel_spacing) } # Name panel grobs so they can be found later panel_table$layout$name <- paste0("panel-", c(1, 2)) # Construct the axes axes <- render_axes(ranges[1], ranges, coord, theme, transpose = TRUE) # Add axes around each panel grobWidths <- function(x) { unit(vapply(x, function(x) { grid::convertWidth( grid::grobWidth(x), "cm", TRUE) }, numeric(1)), "cm") } panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_width_l <- grobWidths(axes$y$left) axis_width_r <- grobWidths(axes$y$right) ## We do it reverse so we don't change the position of panels when we add axes for (i in rev(seq_along(panel_pos_h))) { panel_table <- gtable::gtable_add_cols(panel_table, axis_width_r[i], panel_pos_h[i]) if (params$horizontal) { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$right[i], length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i] + 1, clip = "off") } else { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$right, length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i] + 1, clip = "off") } panel_table <- gtable::gtable_add_cols(panel_table, axis_width_l[i], panel_pos_h[i] - 1) if (params$horizontal) { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$left[i], length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i], clip = "off") } else { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$left, length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i], clip = "off") } } ## Recalculate as gtable has changed panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_height_t <- unit(grid::convertHeight( grid::grobHeight(axes$x$top[[1]]), "cm", TRUE), "cm") axis_height_b <- unit(grid::convertHeight( grid::grobHeight(axes$x$bottom[[1]]), "cm", TRUE), "cm") for (i in rev(panel_pos_v)) { panel_table <- gtable::gtable_add_rows(panel_table, axis_height_b, i) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$bottom, length(panel_pos_h)), t = i + 1, l = panel_pos_h, clip = "off") panel_table <- gtable::gtable_add_rows(panel_table, axis_height_t, i - 1) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$top, length(panel_pos_h)), t = i, l = panel_pos_h, clip = "off") } # Add strips strips <- render_strips( x = data.frame(name = c("Original", paste0("Transformed (", params$trans$name, ")"))), labeller = label_value, theme = theme) panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t strip_height <- unit(grid::convertHeight( grid::grobHeight(strips$x$top[[1]]), "cm", TRUE), "cm") for (i in rev(seq_along(panel_pos_v))) { panel_table <- gtable::gtable_add_rows(panel_table, strip_height, panel_pos_v[i] - 1) if (params$horizontal) { panel_table <- gtable::gtable_add_grob(panel_table, strips$x$top, t = panel_pos_v[i], l = panel_pos_h, clip = "off") } else { panel_table <- gtable::gtable_add_grob(panel_table, strips$x$top[i], t = panel_pos_v[i], l = panel_pos_h, clip = "off") } } panel_table } ) ``` As is very apparent, the `draw_panel` method can become very unwieldy once it begins to take multiple possibilities into account. The fact that we want to support both horizontal and vertical layout leads to a lot of if/else blocks in the above code. In general this is the big challenge when writing facet extensions so be prepared to be very meticulous when writing these methods. Enough talk - lets see if our new and powerful facetting extension works: ```{r} ggplot(mtcars, aes(x = hp, y = mpg)) + geom_point() + facet_trans('sqrt') ``` ## Extending existing facet function As the rendering part of a facet class is often the difficult development step, it is possible to piggyback on the existing facetting classes to achieve a range of new facettings. Below we will subclass `facet_wrap()` to make a `facet_bootstrap()` class that splits the input data into a number of panels at random. ```{r} facet_bootstrap <- function(n = 9, prop = 0.2, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, strip.position = "top") { facet <- facet_wrap(~.bootstrap, nrow = nrow, ncol = ncol, scales = scales, shrink = shrink, strip.position = strip.position) facet$params$n <- n facet$params$prop <- prop ggproto(NULL, FacetBootstrap, shrink = shrink, params = facet$params ) } FacetBootstrap <- ggproto("FacetBootstrap", FacetWrap, compute_layout = function(data, params) { id <- seq_len(params$n) dims <- wrap_dims(params$n, params$nrow, params$ncol) layout <- data.frame(PANEL = factor(id)) if (params$as.table) { layout$ROW <- as.integer((id - 1L) %/% dims[2] + 1L) } else { layout$ROW <- as.integer(dims[1] - (id - 1L) %/% dims[2]) } layout$COL <- as.integer((id - 1L) %% dims[2] + 1L) layout <- layout[order(layout$PANEL), , drop = FALSE] rownames(layout) <- NULL # Add scale identification layout$SCALE_X <- if (params$free$x) id else 1L layout$SCALE_Y <- if (params$free$y) id else 1L cbind(layout, .bootstrap = id) }, map_data = function(data, layout, params) { if (is.null(data) || nrow(data) == 0) { return(cbind(data, PANEL = integer(0))) } n_samples <- round(nrow(data) * params$prop) new_data <- lapply(seq_len(params$n), function(i) { cbind(data[sample(nrow(data), n_samples), , drop = FALSE], PANEL = i) }) do.call(rbind, new_data) } ) ggplot(diamonds, aes(carat, price)) + geom_point(alpha = 0.1) + facet_bootstrap(n = 9, prop = 0.05) ``` What we are doing above is to intercept the `compute_layout` and `map_data` methods and instead of dividing the data by a variable we randomly assigns rows to a panel based on the sampling parameters (`n` determines the number of panels, `prop` determines the proportion of data in each panel). It is important here that the layout returned by `compute_layout` is a valid layout for `FacetWrap` as we are counting on the `draw_panel` method from `FacetWrap` to do all the work for us. Thus if you want to subclass FacetWrap or FacetGrid, make sure you understand the nature of their layout specification. ### Exercises 1. Rewrite FacetTrans to take a vector of transformations and create an additional panel for each transformation. 2. Based on the FacetWrap implementation rewrite FacetTrans to take the strip.placement theme setting into account. 3. Think about which caveats there are in FacetBootstrap specifically related to adding multiple layers with the same data. ggplot2/inst/doc/extending-ggplot2.html0000644000177400001440000522662113031512434020005 0ustar murdochusers Extending ggplot2

Extending ggplot2

This vignette documents the official extension mechanism provided in ggplot2 2.0.0. This vignette is a high-level adjunct to the low-level details found in ?Stat, ?Geom and ?theme. You’ll learn how to extend ggplot2 by creating a new stat, geom, or theme.

As you read this document, you’ll see many things that will make you scratch your head and wonder why on earth is it designed this way? Mostly it’s historical accident - I wasn’t a terribly good R programmer when I started writing ggplot2 and I made a lot of questionable decisions. We cleaned up as many of those issues as possible in the 2.0.0 release, but some fixes simply weren’t worth the effort.

ggproto

All ggplot2 objects are built using the ggproto system of object oriented programming. This OO system is used only in one place: ggplot2. This is mostly historical accident: ggplot2 started off using proto because I needed mutable objects. This was well before the creation of (the briefly lived) mutatr, reference classes and R6: proto was the only game in town.

But why ggproto? Well when we turned to add an official extension mechanism to ggplot2, we found a major problem that caused problems when proto objects were extended in a different package (methods were evaluated in ggplot2, not the package where the extension was added). We tried converting to R6, but it was a poor fit for the needs of ggplot2. We could’ve modified proto, but that would’ve first involved understanding exactly how proto worked, and secondly making sure that the changes didn’t affect other users of proto.

It’s strange to say, but this is a case where inventing a new OO system was actually the right answer to the problem! Fortunately Winston is now very good at creating OO systems, so it only took him a day to come up with ggproto: it maintains all the features of proto that ggplot2 needs, while allowing cross package inheritance to work.

Here’s a quick demo of ggproto in action:

A <- ggproto("A", NULL,
  x = 1,
  inc = function(self) {
    self$x <- self$x + 1
  }
)
A$x
#> [1] 1
A$inc()
A$x
#> [1] 2
A$inc()
A$inc()
A$x
#> [1] 4

The majority of ggplot2 classes are immutable and static: the methods neither use nor modify state in the class. They’re mostly used as a convenient way of bundling related methods together.

To create a new geom or stat, you will just create a new ggproto that inherits from Stat, Geom and override the methods described below.

Creating a new stat

The simplest stat

We’ll start by creating a very simple stat: one that gives the convex hull (the c hull) of a set of points. First we create a new ggproto object that inherits from Stat:

StatChull <- ggproto("StatChull", Stat,
  compute_group = function(data, scales) {
    data[chull(data$x, data$y), , drop = FALSE]
  },
  
  required_aes = c("x", "y")
)

The two most important components are the compute_group() method (which does the computation), and the required_aes field, which lists which aesthetics must be present in order to for the stat to work.

Next we write a layer function. Unfortunately, due to an early design mistake I called these either stat_() or geom_(). A better decision would have been to call them layer_() functions: that’s a more accurate description because every layer involves a stat and a geom.

All layer functions follow the same form - you specify defaults in the function arguments and then call the layer() function, sending ... into the params argument. The arguments in ... will either be arguments for the geom (if you’re making a stat wrapper), arguments for the stat (if you’re making a geom wrapper), or aesthetics to be set. layer() takes care of teasing the different parameters apart and making sure they’re stored in the right place:

stat_chull <- function(mapping = NULL, data = NULL, geom = "polygon",
                       position = "identity", na.rm = FALSE, show.legend = NA, 
                       inherit.aes = TRUE, ...) {
  layer(
    stat = StatChull, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

(Note that if you’re writing this in your own package, you’ll either need to call ggplot2::layer() explicitly, or import the layer() function into your package namespace.)

Once we have a layer function we can try our new stat:

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  stat_chull(fill = NA, colour = "black")

(We’ll see later how to change the defaults of the geom so that you don’t need to specify fill = NA every time.)

Once we’ve written this basic object, ggplot2 gives a lot for free. For example, ggplot2 automatically preserves aesthetics that are constant within each group:

ggplot(mpg, aes(displ, hwy, colour = drv)) + 
  geom_point() + 
  stat_chull(fill = NA)

We can also override the default geom to display the convex hull in a different way:

ggplot(mpg, aes(displ, hwy)) + 
  stat_chull(geom = "point", size = 4, colour = "red") +
  geom_point()

Stat parameters

A more complex stat will do some computation. Let’s implement a simple version of geom_smooth() that adds a line of best fit to a plot. We create a StatLm that inherits from Stat and a layer function, stat_lm():

StatLm <- ggproto("StatLm", Stat, 
  required_aes = c("x", "y"),
  
  compute_group = function(data, scales) {
    rng <- range(data$x, na.rm = TRUE)
    grid <- data.frame(x = rng)
    
    mod <- lm(y ~ x, data = data)
    grid$y <- predict(mod, newdata = grid)
    
    grid
  }
)

stat_lm <- function(mapping = NULL, data = NULL, geom = "line",
                    position = "identity", na.rm = FALSE, show.legend = NA, 
                    inherit.aes = TRUE, ...) {
  layer(
    stat = StatLm, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  stat_lm()

StatLm is inflexible because it has no parameters. We might want to allow the user to control the model formula and the number of points used to generate the grid. To do so, we add arguments to the compute_group() method and our wrapper function:

StatLm <- ggproto("StatLm", Stat, 
  required_aes = c("x", "y"),
  
  compute_group = function(data, scales, params, n = 100, formula = y ~ x) {
    rng <- range(data$x, na.rm = TRUE)
    grid <- data.frame(x = seq(rng[1], rng[2], length = n))
    
    mod <- lm(formula, data = data)
    grid$y <- predict(mod, newdata = grid)
    
    grid
  }
)

stat_lm <- function(mapping = NULL, data = NULL, geom = "line",
                    position = "identity", na.rm = FALSE, show.legend = NA, 
                    inherit.aes = TRUE, n = 50, formula = y ~ x, 
                    ...) {
  layer(
    stat = StatLm, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(n = n, formula = formula, na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  stat_lm(formula = y ~ poly(x, 10)) + 
  stat_lm(formula = y ~ poly(x, 10), geom = "point", colour = "red", n = 20)

Note that we don’t have to explicitly include the new parameters in the arguments for the layer, ... will get passed to the right place anyway. But you’ll need to document them somewhere so the user knows about them. Here’s a brief example. Note @inheritParams ggplot2::stat_identity: that will automatically inherit documentation for all the parameters also defined for stat_identity().

#' @inheritParams ggplot2::stat_identity
#' @param formula The modelling formula passed to \code{lm}. Should only 
#'   involve \code{y} and \code{x}
#' @param n Number of points used for interpolation.
stat_lm <- function(mapping = NULL, data = NULL, geom = "line",
                    position = "identity", na.rm = FALSE, show.legend = NA, 
                    inherit.aes = TRUE, n = 50, formula = y ~ x, 
                    ...) {
  layer(
    stat = StatLm, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(n = n, formula = formula, na.rm = na.rm, ...)
  )
}

Picking defaults

Sometimes you have calculations that should be performed once for the complete dataset, not once for each group. This is useful for picking sensible default values. For example, if we want to do a density estimate, it’s reasonable to pick one bandwidth for the whole plot. The following Stat creates a variation of the stat_density() that picks one bandwidth for all groups by choosing the mean of the “best†bandwidth for each group (I have no theoretical justification for this, but it doesn’t seem unreasonable).

To do this we override the setup_params() method. It’s passed the data and a list of params, and returns an updated list.

StatDensityCommon <- ggproto("StatDensityCommon", Stat, 
  required_aes = "x",
  
  setup_params = function(data, params) {
    if (!is.null(params$bandwidth))
      return(params)
    
    xs <- split(data$x, data$group)
    bws <- vapply(xs, bw.nrd0, numeric(1))
    bw <- mean(bws)
    message("Picking bandwidth of ", signif(bw, 3))
    
    params$bandwidth <- bw
    params
  },
  
  compute_group = function(data, scales, bandwidth = 1) {
    d <- density(data$x, bw = bandwidth)
    data.frame(x = d$x, y = d$y)
  }  
)

stat_density_common <- function(mapping = NULL, data = NULL, geom = "line",
                                position = "identity", na.rm = FALSE, show.legend = NA, 
                                inherit.aes = TRUE, bandwidth = NULL,
                                ...) {
  layer(
    stat = StatDensityCommon, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(bandwidth = bandwidth, na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, colour = drv)) + 
  stat_density_common()
#> Picking bandwidth of 0.345


ggplot(mpg, aes(displ, colour = drv)) + 
  stat_density_common(bandwidth = 0.5)

I recommend using NULL as a default value. If you pick important parameters automatically, it’s a good idea to message() to the user (and when printing a floating point parameter, using signif() to show only a few significant digits).

Variable names and default aesthetics

This stat illustrates another important point. If we want to make this stat usable with other geoms, we should return a variable called density instead of y. Then we can set up the default_aes to automatically map density to y, which allows the user to override it to use with different geoms:

StatDensityCommon <- ggproto("StatDensity2", Stat, 
  required_aes = "x",
  default_aes = aes(y = ..density..),

  compute_group = function(data, scales, bandwidth = 1) {
    d <- density(data$x, bw = bandwidth)
    data.frame(x = d$x, density = d$y)
  }  
)

ggplot(mpg, aes(displ, drv, colour = ..density..)) + 
  stat_density_common(bandwidth = 1, geom = "point")

However, using this stat with the area geom doesn’t work quite right. The areas don’t stack on top of each other:

ggplot(mpg, aes(displ, fill = drv)) + 
  stat_density_common(bandwidth = 1, geom = "area", position = "stack")

This is because each density is computed independently, and the estimated xs don’t line up. We can resolve that issue by computing the range of the data once in setup_params().

StatDensityCommon <- ggproto("StatDensityCommon", Stat, 
  required_aes = "x",
  default_aes = aes(y = ..density..),

  setup_params = function(data, params) {
    min <- min(data$x) - 3 * params$bandwidth
    max <- max(data$x) + 3 * params$bandwidth
    
    list(
      bandwidth = params$bandwidth,
      min = min,
      max = max,
      na.rm = params$na.rm
    )
  },
  
  compute_group = function(data, scales, min, max, bandwidth = 1) {
    d <- density(data$x, bw = bandwidth, from = min, to = max)
    data.frame(x = d$x, density = d$y)
  }  
)

ggplot(mpg, aes(displ, fill = drv)) + 
  stat_density_common(bandwidth = 1, geom = "area", position = "stack")

ggplot(mpg, aes(displ, drv, fill = ..density..)) + 
  stat_density_common(bandwidth = 1, geom = "raster")

Exercises

  1. Extend stat_chull to compute the alpha hull, as from the alphahull package. Your new stat should take an alpha argument.

  2. Modify the final version of StatDensityCommon to allow the user to specify the min and max parameters. You’ll need to modify both the layer function and the compute_group() method.

  3. Compare and contrast StatLm to ggplot2::StatSmooth. What key differences make StatSmooth more complex than StatLm?

Creating a new geom

It’s harder to create a new geom than a new stat because you also need to know some grid. ggplot2 is built on top of grid, so you’ll need to know the basics of drawing with grid. If you’re serious about adding a new geom, I’d recommend buying R graphics by Paul Murrell. It tells you everything you need to know about drawing with grid.

A simple geom

It’s easiest to start with a simple example. The code below is a simplified version of geom_point():

GeomSimplePoint <- ggproto("GeomSimplePoint", Geom,
  required_aes = c("x", "y"),
  default_aes = aes(shape = 19, colour = "black"),
  draw_key = draw_key_point,

  draw_panel = function(data, panel_scales, coord) {
    coords <- coord$transform(data, panel_scales)
    grid::pointsGrob(
      coords$x, coords$y,
      pch = coords$shape,
      gp = grid::gpar(col = coords$colour)
    )
  }
)

geom_simple_point <- function(mapping = NULL, data = NULL, stat = "identity",
                              position = "identity", na.rm = FALSE, show.legend = NA, 
                              inherit.aes = TRUE, ...) {
  layer(
    geom = GeomSimplePoint, mapping = mapping,  data = data, stat = stat, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, hwy)) + 
  geom_simple_point()

This is very similar to defining a new stat. You always need to provide fields/methods for the four pieces shown above:

draw_panel() has three arguments:

Generally you won’t use panel_scales and coord directly, but you will always use them to transform the data: coords <- coord$transform(data, panel_scales). This creates a data frame where position variables are scaled to the range 0–1. You then take this data and call a grid grob function. (Transforming for non-Cartesian coordinate systems is quite complex - you’re best off transforming your data to the form accepted by an existing ggplot2 geom and passing it.)

Collective geoms

Overriding draw_panel() is most appropriate if there is one graphic element per row. In other cases, you want graphic element per group. For example, take polygons: each row gives one vertex of a polygon. In this case, you should instead override draw_group().

The following code makes a simplified version of GeomPolygon:

GeomSimplePolygon <- ggproto("GeomPolygon", Geom,
  required_aes = c("x", "y"),
  
  default_aes = aes(
    colour = NA, fill = "grey20", size = 0.5,
    linetype = 1, alpha = 1
  ),

  draw_key = draw_key_polygon,

  draw_group = function(data, panel_scales, coord) {
    n <- nrow(data)
    if (n <= 2) return(grid::nullGrob())

    coords <- coord$transform(data, panel_scales)
    # A polygon can only have a single colour, fill, etc, so take from first row
    first_row <- coords[1, , drop = FALSE]

    grid::polygonGrob(
      coords$x, coords$y, 
      default.units = "native",
      gp = grid::gpar(
        col = first_row$colour,
        fill = scales::alpha(first_row$fill, first_row$alpha),
        lwd = first_row$size * .pt,
        lty = first_row$linetype
      )
    )
  }
)
geom_simple_polygon <- function(mapping = NULL, data = NULL, stat = "chull",
                                position = "identity", na.rm = FALSE, show.legend = NA, 
                                inherit.aes = TRUE, ...) {
  layer(
    geom = GeomSimplePolygon, mapping = mapping, data = data, stat = stat, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  geom_simple_polygon(aes(colour = class), fill = NA)

There are a few things to note here:

You might want to compare this to the real GeomPolygon. You’ll see it overrides draw_panel() because it uses some tricks to make polygonGrob() produce multiple polygons in one call. This is considerably more complicated, but gives better performance.

Inheriting from an existing Geom

Sometimes you just want to make a small modification to an existing geom. In this case, rather than inheriting from Geom you can inherit from an existing subclass. For example, we might want to change the defaults for GeomPolygon to work better with StatChull:

GeomPolygonHollow <- ggproto("GeomPolygonHollow", GeomPolygon,
  default_aes = aes(colour = "black", fill = NA, size = 0.5, linetype = 1,
    alpha = NA)
  )
geom_chull <- function(mapping = NULL, data = NULL, 
                       position = "identity", na.rm = FALSE, show.legend = NA, 
                       inherit.aes = TRUE, ...) {
  layer(
    stat = StatChull, geom = GeomPolygonHollow, data = data, mapping = mapping,
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  geom_chull()

This doesn’t allow you to use different geoms with the stat, but that seems appropriate here since the convex hull is primarily a polygonal feature.

Exercises

  1. Compare and contrast GeomPoint with GeomSimplePoint.

  2. Compare and contract GeomPolygon with GeomSimplePolygon.

Creating your own theme

If you’re going to create your own complete theme, there are a few things you need to know:

Overriding elements

By default, when you add a new theme element, it inherits values from the existing theme. For example, the following code sets the key colour to red, but it inherits the existing fill colour:

theme_grey()$legend.key
#> List of 5
#>  $ fill         : chr "grey95"
#>  $ colour       : chr "white"
#>  $ size         : NULL
#>  $ linetype     : NULL
#>  $ inherit.blank: logi TRUE
#>  - attr(*, "class")= chr [1:2] "element_rect" "element"

new_theme <- theme_grey() + theme(legend.key = element_rect(colour = "red"))
new_theme$legend.key
#> List of 5
#>  $ fill         : chr "grey95"
#>  $ colour       : chr "red"
#>  $ size         : NULL
#>  $ linetype     : NULL
#>  $ inherit.blank: logi FALSE
#>  - attr(*, "class")= chr [1:2] "element_rect" "element"

To override it completely, use %+replace% instead of +:

new_theme <- theme_grey() %+replace% theme(legend.key = element_rect(colour = "red"))
new_theme$legend.key
#> List of 5
#>  $ fill         : NULL
#>  $ colour       : chr "red"
#>  $ size         : NULL
#>  $ linetype     : NULL
#>  $ inherit.blank: logi FALSE
#>  - attr(*, "class")= chr [1:2] "element_rect" "element"

Global elements

There are four elements that affect the global appearance of the plot:

Element Theme function Description
line element_line() all line elements
rect element_rect() all rectangular elements
text element_text() all text
title element_text() all text in title elements (plot, axes & legend)

These set default properties that are inherited by more specific settings. These are most useful for setting an overall “background†colour and overall font settings (e.g. family and size).

df <- data.frame(x = 1:3, y = 1:3)
base <- ggplot(df, aes(x, y)) + 
  geom_point() + 
  theme_minimal()

base

base + theme(text = element_text(colour = "red"))

You should generally start creating a theme by modifying these values.

Complete vs incomplete

It is useful to understand the difference between complete and incomplete theme objects. A complete theme object is one produced by calling a theme function with the attribute complete = TRUE.

Theme functions theme_grey() and theme_bw() are examples of complete theme functions. Calls to theme() produce incomplete theme objects, since they represent (local) modifications to a theme object rather than returning a complete theme object per se. When adding an incomplete theme to a complete one, the result is a complete theme.

Complete and incomplete themes behave somewhat differently when added to a ggplot object:

Creating a new facetting

One of the more daunting exercises in ggplot2 extensions is to create a new facetting system. The reason for this is that when creating new facettings you take on the responsibility of how (almost) everything is drawn on the screen, and many do not have experience with directly using gtable and grid upon which the ggplot2 rendering is build. If you decide to venture into facetting extensions it is highly recommended to gain proficiency with the above-mentioned packages.

The Facet class in ggplot2 is very powerfull as it takes on responsibility of a wide range of tasks. The main tasks of a Facet object are:

Apart from these three tasks, for which functionality must be implemented, there are a couple of additional extension points where sensible defaults have been provided. These can generally be ignored, but adventurous developers can override them for even more control:

To show how a new facetting class is created we will start simple and go through each of the required methods in turn to build up facet_duplicate() that simply duplicate our plot into two panels. After this we will tinker with it a bit to show some of the more powerful possibilities.

Creating a layout specification

A layout in the context of facets is a data.frame that defines a mapping between data and the panels it should reside in as well as which positional scales should be used. The output should at least contain the columns PANEL, SCALE_X, and SCALE_Y, but will often contain more to help assign data to the correct panel (facet_grid() will e.g. also return the facetting variables associated with each panel). Let’s make a function that defines a duplicate layout:

layout <- function(data, params) {
  data.frame(PANEL = c(1L, 2L), SCALE_X = 1L, SCALE_Y = 1L)
}

This is quite simple as the facetting should just define two panels irrespectively of the input data and parameters.

Mapping data into panels

In order for ggplot2 to know which data should go where it needs the data to be assigned to a panel. The purpose of the mapping step is to assign a PANEL column to the layer data identifying which panel it belongs to.

mapping <- function(data, layout, params) {
  if (plyr::empty(data)) {
    return(cbind(data, PANEL = integer(0)))
  }
  rbind(
    cbind(data, PANEL = 1L),
    cbind(data, PANEL = 2L)
  )
}

here we first investigate whether we have gotten an empty data.frame and if not we duplicate the data and assign the original data to the first panel and the new data to the second panel.

Laying out the panels

While the two functions above has been decievingly simple, this last one is going to take some more work. Our goal is to draw two panels beside (or above) each other with axes etc.

render <- function(panels, layout, x_scales, y_scales, ranges, coord, data,
                   theme, params) {
  # Place panels according to settings
  if (params$horizontal) {
    # Put panels in matrix and convert to a gtable
    panels <- matrix(panels, ncol = 2)
    panel_table <- gtable::gtable_matrix("layout", panels, 
      widths = unit(c(1, 1), "null"), heights = unit(1, "null"), clip = "on")
    # Add spacing according to theme
    panel_spacing <- if (is.null(theme$panel.spacing.x)) {
      theme$panel.spacing
    } else {
      theme$panel.spacing.x
    }
    panel_table <- gtable::gtable_add_col_space(panel_table, panel_spacing)
  } else {
    panels <- matrix(panels, ncol = 1)
    panel_table <- gtable::gtable_matrix("layout", panels, 
      widths = unit(1, "null"), heights = unit(c(1, 1), "null"), clip = "on")
    panel_spacing <- if (is.null(theme$panel.spacing.y)) {
      theme$panel.spacing
    } else {
      theme$panel.spacing.y
    }
    panel_table <- gtable::gtable_add_row_space(panel_table, panel_spacing)
  }
  # Name panel grobs so they can be found later
  panel_table$layout$name <- paste0("panel-", c(1, 2))
  
  # Construct the axes
  axes <- render_axes(ranges[1], ranges[1], coord, theme, 
    transpose = TRUE)

  # Add axes around each panel
  panel_pos_h <- panel_cols(panel_table)$l
  panel_pos_v <- panel_rows(panel_table)$t
  axis_width_l <- unit(grid::convertWidth(
    grid::grobWidth(axes$y$left[[1]]), "cm", TRUE), "cm")
  axis_width_r <- unit(grid::convertWidth(
    grid::grobWidth(axes$y$right[[1]]), "cm", TRUE), "cm")
  ## We do it reverse so we don't change the position of panels when we add axes
  for (i in rev(panel_pos_h)) {
    panel_table <- gtable::gtable_add_cols(panel_table, axis_width_r, i)
    panel_table <- gtable::gtable_add_grob(panel_table, 
      rep(axes$y$right, length(panel_pos_v)), t = panel_pos_v, l = i + 1, 
      clip = "off")
    panel_table <- gtable::gtable_add_cols(panel_table, axis_width_l, i - 1)
    panel_table <- gtable::gtable_add_grob(panel_table, 
      rep(axes$y$left, length(panel_pos_v)), t = panel_pos_v, l = i, 
      clip = "off")
  }
  ## Recalculate as gtable has changed
  panel_pos_h <- panel_cols(panel_table)$l
  panel_pos_v <- panel_rows(panel_table)$t
  axis_height_t <- unit(grid::convertHeight(
    grid::grobHeight(axes$x$top[[1]]), "cm", TRUE), "cm")
  axis_height_b <- unit(grid::convertHeight(
    grid::grobHeight(axes$x$bottom[[1]]), "cm", TRUE), "cm")
  for (i in rev(panel_pos_v)) {
    panel_table <- gtable::gtable_add_rows(panel_table, axis_height_b, i)
    panel_table <- gtable::gtable_add_grob(panel_table, 
      rep(axes$x$bottom, length(panel_pos_h)), t = i + 1, l = panel_pos_h, 
      clip = "off")
    panel_table <- gtable::gtable_add_rows(panel_table, axis_height_t, i - 1)
    panel_table <- gtable::gtable_add_grob(panel_table, 
      rep(axes$x$top, length(panel_pos_h)), t = i, l = panel_pos_h, 
      clip = "off")
  }
  panel_table
}

Assembling the Facet class

Usually all methods are defined within the class definition in the same way as is done for Geom and Stat. Here we have split it out so we could go through each in turn. All that remains is to assign our functions to the correct methods as well as making a constructor

# Constructor: shrink is required to govern whether scales are trained on 
# Stat-transformed data or not.
facet_duplicate <- function(horizontal = TRUE, shrink = TRUE) {
  ggproto(NULL, FacetDuplicate,
    shrink = shrink,
    params = list(
      horizontal = horizontal
    )
  )
}

FacetDuplicate <- ggproto("FacetDuplicate", Facet,
  compute_layout = layout,
  map_data = mapping,
  draw_panels = render
)

Now with everything assembled, lets test it out:

p <- ggplot(mtcars, aes(x = hp, y = mpg)) + geom_point()
p

p + facet_duplicate()

Doing more with facets

The example above was pretty useless and we’ll now try to expand on it to add some actual usability. We are going to make a facetting that adds panels with y-transformed axes:

library(scales)

facet_trans <- function(trans, horizontal = TRUE, shrink = TRUE) {
  ggproto(NULL, FacetTrans,
    shrink = shrink,
    params = list(
      trans = scales::as.trans(trans),
      horizontal = horizontal
    )
  )
}

FacetTrans <- ggproto("FacetTrans", Facet,
  # Almost as before but we want different y-scales for each panel
  compute_layout = function(data, params) {
    data.frame(PANEL = c(1L, 2L), SCALE_X = 1L, SCALE_Y = c(1L, 2L))
  },
  # Same as before
  map_data = function(data, layout, params) {
    if (plyr::empty(data)) {
      return(cbind(data, PANEL = integer(0)))
    }
    rbind(
      cbind(data, PANEL = 1L),
      cbind(data, PANEL = 2L)
    )
  },
  # This is new. We create a new scale with the defined transformation
  init_scales = function(layout, x_scale = NULL, y_scale = NULL, params) {
    scales <- list()
    if (!is.null(x_scale)) {
      scales$x <- plyr::rlply(max(layout$SCALE_X), x_scale$clone())
    }
    if (!is.null(y_scale)) {
      y_scale_orig <- y_scale$clone()
      y_scale_new <- y_scale$clone()
      y_scale_new$trans <- params$trans
      # Make sure that oob values are kept
      y_scale_new$oob <- function(x, ...) x
      scales$y <- list(y_scale_orig, y_scale_new)
    }
    scales
  },
  # We must make sure that the second scale is trained on transformed data
  train_scales = function(x_scales, y_scales, layout, data, params) {
    # Transform data for second panel prior to scale training
    if (!is.null(y_scales)) {
      data <- lapply(data, function(layer_data) {
        match_id <- match(layer_data$PANEL, layout$PANEL)
        y_vars <- intersect(y_scales[[1]]$aesthetics, names(layer_data))
        trans_scale <- layer_data$PANEL == 2L
        for (i in y_vars) {
          layer_data[trans_scale, i] <- y_scales[[2]]$transform(layer_data[trans_scale, i])
        }
        layer_data
      })
    }
    Facet$train_scales(x_scales, y_scales, layout, data, params)
  },
  # this is where we actually modify the data. It cannot be done in $map_data as that function
  # doesn't have access to the scales
  finish_data = function(data, layout, x_scales, y_scales, params) {
    match_id <- match(data$PANEL, layout$PANEL)
    y_vars <- intersect(y_scales[[1]]$aesthetics, names(data))
    trans_scale <- data$PANEL == 2L
    for (i in y_vars) {
      data[trans_scale, i] <- y_scales[[2]]$transform(data[trans_scale, i])
    }
    data
  },
  # A few changes from before to accomodate that axes are now not duplicate of each other
  # We also add a panel strip to annotate the different panels
  draw_panels = function(panels, layout, x_scales, y_scales, ranges, coord,
                         data, theme, params) {
    # Place panels according to settings
    if (params$horizontal) {
      # Put panels in matrix and convert to a gtable
      panels <- matrix(panels, ncol = 2)
      panel_table <- gtable::gtable_matrix("layout", panels, 
        widths = unit(c(1, 1), "null"), heights = unit(1, "null"), clip = "on")
      # Add spacing according to theme
      panel_spacing <- if (is.null(theme$panel.spacing.x)) {
        theme$panel.spacing
      } else {
        theme$panel.spacing.x
      }
      panel_table <- gtable::gtable_add_col_space(panel_table, panel_spacing)
    } else {
      panels <- matrix(panels, ncol = 1)
      panel_table <- gtable::gtable_matrix("layout", panels, 
        widths = unit(1, "null"), heights = unit(c(1, 1), "null"), clip = "on")
      panel_spacing <- if (is.null(theme$panel.spacing.y)) {
        theme$panel.spacing
      } else {
        theme$panel.spacing.y
      }
      panel_table <- gtable::gtable_add_row_space(panel_table, panel_spacing)
    }
    # Name panel grobs so they can be found later
    panel_table$layout$name <- paste0("panel-", c(1, 2))
    
    # Construct the axes
    axes <- render_axes(ranges[1], ranges, coord, theme, 
      transpose = TRUE)
  
    # Add axes around each panel
    grobWidths <- function(x) {
      unit(vapply(x, function(x) {
        grid::convertWidth(
          grid::grobWidth(x), "cm", TRUE)
      }, numeric(1)), "cm")
    }
    panel_pos_h <- panel_cols(panel_table)$l
    panel_pos_v <- panel_rows(panel_table)$t
    axis_width_l <- grobWidths(axes$y$left)
    axis_width_r <- grobWidths(axes$y$right)
    ## We do it reverse so we don't change the position of panels when we add axes
    for (i in rev(seq_along(panel_pos_h))) {
      panel_table <- gtable::gtable_add_cols(panel_table, axis_width_r[i], panel_pos_h[i])
      if (params$horizontal) {
        panel_table <- gtable::gtable_add_grob(panel_table, 
          rep(axes$y$right[i], length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i] + 1, 
          clip = "off")
      } else {
        panel_table <- gtable::gtable_add_grob(panel_table, 
          rep(axes$y$right, length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i] + 1, 
          clip = "off")
      }
      panel_table <- gtable::gtable_add_cols(panel_table, axis_width_l[i], panel_pos_h[i] - 1)
      if (params$horizontal) {
        panel_table <- gtable::gtable_add_grob(panel_table, 
        rep(axes$y$left[i], length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i], 
        clip = "off")
      } else {
        panel_table <- gtable::gtable_add_grob(panel_table, 
        rep(axes$y$left, length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i], 
        clip = "off")
      }
    }
    ## Recalculate as gtable has changed
    panel_pos_h <- panel_cols(panel_table)$l
    panel_pos_v <- panel_rows(panel_table)$t
    axis_height_t <- unit(grid::convertHeight(
      grid::grobHeight(axes$x$top[[1]]), "cm", TRUE), "cm")
    axis_height_b <- unit(grid::convertHeight(
      grid::grobHeight(axes$x$bottom[[1]]), "cm", TRUE), "cm")
    for (i in rev(panel_pos_v)) {
      panel_table <- gtable::gtable_add_rows(panel_table, axis_height_b, i)
      panel_table <- gtable::gtable_add_grob(panel_table, 
        rep(axes$x$bottom, length(panel_pos_h)), t = i + 1, l = panel_pos_h, 
        clip = "off")
      panel_table <- gtable::gtable_add_rows(panel_table, axis_height_t, i - 1)
      panel_table <- gtable::gtable_add_grob(panel_table, 
        rep(axes$x$top, length(panel_pos_h)), t = i, l = panel_pos_h, 
        clip = "off")
    }
    
    # Add strips
    strips <- render_strips(
      x = data.frame(name = c("Original", paste0("Transformed (", params$trans$name, ")"))),
      labeller = label_value, theme = theme)
    
    panel_pos_h <- panel_cols(panel_table)$l
    panel_pos_v <- panel_rows(panel_table)$t
    strip_height <- unit(grid::convertHeight(
      grid::grobHeight(strips$x$top[[1]]), "cm", TRUE), "cm")
    for (i in rev(seq_along(panel_pos_v))) {
      panel_table <- gtable::gtable_add_rows(panel_table, strip_height, panel_pos_v[i] - 1)
      if (params$horizontal) {
        panel_table <- gtable::gtable_add_grob(panel_table, strips$x$top, 
          t = panel_pos_v[i], l = panel_pos_h, clip = "off")
      } else {
        panel_table <- gtable::gtable_add_grob(panel_table, strips$x$top[i], 
          t = panel_pos_v[i], l = panel_pos_h, clip = "off")
      }
    }
    
    
    panel_table
  }
)

As is very apparent, the draw_panel method can become very unwieldy once it begins to take multiple possibilities into account. The fact that we want to support both horizontal and vertical layout leads to a lot of if/else blocks in the above code. In general this is the big challenge when writing facet extensions so be prepared to be very meticulous when writing these methods.

Enough talk - lets see if our new and powerful facetting extension works:

ggplot(mtcars, aes(x = hp, y = mpg)) + geom_point() + facet_trans('sqrt')

Extending existing facet function

As the rendering part of a facet class is often the difficult development step, it is possible to piggyback on the existing facetting classes to achieve a range of new facettings. Below we will subclass facet_wrap() to make a facet_bootstrap() class that splits the input data into a number of panels at random.

facet_bootstrap <- function(n = 9, prop = 0.2, nrow = NULL, ncol = NULL, 
  scales = "fixed", shrink = TRUE, strip.position = "top") {
  
  facet <- facet_wrap(~.bootstrap, nrow = nrow, ncol = ncol, scales = scales, 
    shrink = shrink, strip.position = strip.position)
  facet$params$n <- n
  facet$params$prop <- prop
  ggproto(NULL, FacetBootstrap,
    shrink = shrink,
    params = facet$params
  )
}

FacetBootstrap <- ggproto("FacetBootstrap", FacetWrap,
  compute_layout = function(data, params) {
    id <- seq_len(params$n)

    dims <- wrap_dims(params$n, params$nrow, params$ncol)
    layout <- data.frame(PANEL = factor(id))

    if (params$as.table) {
      layout$ROW <- as.integer((id - 1L) %/% dims[2] + 1L)
    } else {
      layout$ROW <- as.integer(dims[1] - (id - 1L) %/% dims[2])
    }
    layout$COL <- as.integer((id - 1L) %% dims[2] + 1L)

    layout <- layout[order(layout$PANEL), , drop = FALSE]
    rownames(layout) <- NULL

    # Add scale identification
    layout$SCALE_X <- if (params$free$x) id else 1L
    layout$SCALE_Y <- if (params$free$y) id else 1L

    cbind(layout, .bootstrap = id)
  },
  map_data = function(data, layout, params) {
    if (is.null(data) || nrow(data) == 0) {
      return(cbind(data, PANEL = integer(0)))
    }
    n_samples <- round(nrow(data) * params$prop)
    new_data <- lapply(seq_len(params$n), function(i) {
      cbind(data[sample(nrow(data), n_samples), , drop = FALSE], PANEL = i)
    })
    do.call(rbind, new_data)
  }
)

ggplot(diamonds, aes(carat, price)) + 
  geom_point(alpha = 0.1) + 
  facet_bootstrap(n = 9, prop = 0.05)

What we are doing above is to intercept the compute_layout and map_data methods and instead of dividing the data by a variable we randomly assigns rows to a panel based on the sampling parameters (n determines the number of panels, prop determines the proportion of data in each panel). It is important here that the layout returned by compute_layout is a valid layout for FacetWrap as we are counting on the draw_panel method from FacetWrap to do all the work for us. Thus if you want to subclass FacetWrap or FacetGrid, make sure you understand the nature of their layout specification.

Exercises

  1. Rewrite FacetTrans to take a vector of transformations and create an additional panel for each transformation.
  2. Based on the FacetWrap implementation rewrite FacetTrans to take the strip.placement theme setting into account.
  3. Think about which caveats there are in FacetBootstrap specifically related to adding multiple layers with the same data.
ggplot2/inst/doc/ggplot2-specs.Rmd0000644000177400001440000001277313031512434016707 0ustar murdochusers--- title: "Aesthetic specifications" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Aesthetic specifications} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} library(ggplot2) knitr::opts_chunk$set(fig.dpi = 96) ``` This vignette summarises the various formats that grid drawing functions take. Most of this information is available scattered throughout the R documentation. This appendix brings it all together in one place. ## Colour Colours can be specified with: * A __name__, e.g., `"red"`. R has `r length(colours())` built-in named colours, which can be listed with `colours()`. The Stowers Institute provides a nice printable pdf that lists all colours: . * An __rgb specification__, with a string of the form `"#RRGGBB"` where each of the pairs `RR`, `GG`, `BB` consists of two hexadecimal digits giving a value in the range `00` to `FF` You can optionally make the colour transparent by using the form `"#RRGGBBAA"`. * An __NA__, for a completely transparent colour. * The [munsell](https://github.com/cwickham/munsell) package, by Charlotte Wickham, provides a wrapper around the colour system designed by Alfred Munsell. ## Line type {#sec:line-type-spec} Line types can be specified with: * An __integer__ or __name__: 0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodash, as shown below: ```{r} lty <- c("blank", "solid", "dashed", "dotted", "dotdash", "longdash","twodash") linetypes <- data.frame( y = seq_along(lty), lty = lty ) ggplot(linetypes, aes(0, y)) + geom_segment(aes(xend = 5, yend = y, linetype = lty)) + scale_linetype_identity() + geom_text(aes(label = lty), hjust = 0, nudge_y = 0.2) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ``` * The lengths of on/off stretches of line. This is done with a string containing 2, 4, 6, or 8 hexadecimal digits which give the lengths of consecutive lengths. For example, the string `"33"` specifies three units on followed by three off and `"3313"` specifies three units on followed by three off followed by one on and finally three off. The five standard dash-dot line types described above correspond to 44, 13, 1343, 73, and 2262. The `size` of a line is its width in mm. ## Shape {#sec:shape-spec} Shapes take four types of values: * An __integer__ in $[0, 25]$: ```{r} shapes <- data.frame( shape = c(0:19, 22, 21, 24, 23, 20), x = 0:24 %/% 5, y = -(0:24 %% 5) ) ggplot(shapes, aes(x, y)) + geom_point(aes(shape = shape), size = 5, fill = "red") + geom_text(aes(label = shape), hjust = 0, nudge_x = 0.15) + scale_shape_identity() + expand_limits(x = 4.1) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ``` * A __single character__, to use that character as a plotting symbol. * A `.` to draw the smallest rectangle that is visible, usualy 1 pixel. * An `NA`, to draw nothing. Note that shapes 21-24 have both stroke `colour` and a `fill`. The size of the filled part is controlled by `size`, the size of the stroke is controlled by `stroke`. Each is measured in mm, and the total size of the point is the sum of the two. Note that the size is constant along the diagonal in the following figure. ```{r} sizes <- expand.grid(size = (0:3) * 2, stroke = (0:3) * 2) ggplot(sizes, aes(size, stroke, size = size, stroke = stroke)) + geom_abline(slope = -1, intercept = 6, colour = "white", size = 6) + geom_point(shape = 21, fill = "red") + scale_size_identity() ``` ## Text ### Font size ### Font face There are only three fonts that are guaranteed to work everywhere: "sans" (the default), "serif", or "mono": ```{r} df <- data.frame(x = 1, y = 3:1, family = c("sans", "serif", "mono")) ggplot(df, aes(x, y)) + geom_text(aes(label = family, family = family)) ``` It's trickier to include a system font on a plot because text drawing is done differently by each graphics device (GD). There are five GDs in common use (`png()`, `pdf()`, on screen devices for Windows, Mac and Linux), so to have a font work everywhere you need to configure five devices in five different ways. Two packages simplify the quandary a bit: * `showtext` makes GD-independent plots by rendering all text as polygons. * `extrafont` converts fonts to a standard format that all devices can use. Both approaches have pros and cons, so you will to need to try both of them and see which works best for your needs. ### Family ### Justification Horizontal and vertical justification have the same parameterisation, either a string ("top", "middle", "bottom", "left", "center", "right") or a number between 0 and 1: * top = 1, middle = 0.5, bottom = 0 * left = 0, center = 0.5, right = 1 ```{r} just <- expand.grid(hjust = c(0, 0.5, 1), vjust = c(0, 0.5, 1)) just$label <- paste0(just$hjust, ", ", just$vjust) ggplot(just, aes(hjust, vjust)) + geom_point(colour = "grey70", size = 5) + geom_text(aes(label = label, hjust = hjust, vjust = vjust)) ``` Note that you can use numbers outside the range (0, 1), but it's not recommended. ggplot2/inst/doc/ggplot2-specs.html0000644000177400001440000035663613031512434017142 0ustar murdochusers Aesthetic specifications

Aesthetic specifications

This vignette summarises the various formats that grid drawing functions take. Most of this information is available scattered throughout the R documentation. This appendix brings it all together in one place.

Colour

Colours can be specified with:

Line type

Line types can be specified with:

The size of a line is its width in mm.

Shape

Shapes take four types of values:

Note that shapes 21-24 have both stroke colour and a fill. The size of the filled part is controlled by size, the size of the stroke is controlled by stroke. Each is measured in mm, and the total size of the point is the sum of the two. Note that the size is constant along the diagonal in the following figure.

sizes <- expand.grid(size = (0:3) * 2, stroke = (0:3) * 2)
ggplot(sizes, aes(size, stroke, size = size, stroke = stroke)) + 
  geom_abline(slope = -1, intercept = 6, colour = "white", size = 6) + 
  geom_point(shape = 21, fill = "red") +
  scale_size_identity()

Text

Font size

Font face

There are only three fonts that are guaranteed to work everywhere: “sans†(the default), “serifâ€, or “monoâ€:

df <- data.frame(x = 1, y = 3:1, family = c("sans", "serif", "mono"))
ggplot(df, aes(x, y)) + 
  geom_text(aes(label = family, family = family))

It’s trickier to include a system font on a plot because text drawing is done differently by each graphics device (GD). There are five GDs in common use (png(), pdf(), on screen devices for Windows, Mac and Linux), so to have a font work everywhere you need to configure five devices in five different ways. Two packages simplify the quandary a bit:

  • showtext makes GD-independent plots by rendering all text as polygons.

  • extrafont converts fonts to a standard format that all devices can use.

Both approaches have pros and cons, so you will to need to try both of them and see which works best for your needs.

Family

Justification

Horizontal and vertical justification have the same parameterisation, either a string (“topâ€, “middleâ€, “bottomâ€, “leftâ€, “centerâ€, “rightâ€) or a number between 0 and 1:

  • top = 1, middle = 0.5, bottom = 0
  • left = 0, center = 0.5, right = 1
just <- expand.grid(hjust = c(0, 0.5, 1), vjust = c(0, 0.5, 1))
just$label <- paste0(just$hjust, ", ", just$vjust)

ggplot(just, aes(hjust, vjust)) +
  geom_point(colour = "grey70", size = 5) + 
  geom_text(aes(label = label, hjust = hjust, vjust = vjust))

Note that you can use numbers outside the range (0, 1), but it’s not recommended.

ggplot2/inst/doc/ggplot2-specs.R0000644000177400001440000000370013031512434016354 0ustar murdochusers## ---- include = FALSE---------------------------------------------------- library(ggplot2) knitr::opts_chunk$set(fig.dpi = 96) ## ------------------------------------------------------------------------ lty <- c("blank", "solid", "dashed", "dotted", "dotdash", "longdash","twodash") linetypes <- data.frame( y = seq_along(lty), lty = lty ) ggplot(linetypes, aes(0, y)) + geom_segment(aes(xend = 5, yend = y, linetype = lty)) + scale_linetype_identity() + geom_text(aes(label = lty), hjust = 0, nudge_y = 0.2) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ## ------------------------------------------------------------------------ shapes <- data.frame( shape = c(0:19, 22, 21, 24, 23, 20), x = 0:24 %/% 5, y = -(0:24 %% 5) ) ggplot(shapes, aes(x, y)) + geom_point(aes(shape = shape), size = 5, fill = "red") + geom_text(aes(label = shape), hjust = 0, nudge_x = 0.15) + scale_shape_identity() + expand_limits(x = 4.1) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ## ------------------------------------------------------------------------ sizes <- expand.grid(size = (0:3) * 2, stroke = (0:3) * 2) ggplot(sizes, aes(size, stroke, size = size, stroke = stroke)) + geom_abline(slope = -1, intercept = 6, colour = "white", size = 6) + geom_point(shape = 21, fill = "red") + scale_size_identity() ## ------------------------------------------------------------------------ df <- data.frame(x = 1, y = 3:1, family = c("sans", "serif", "mono")) ggplot(df, aes(x, y)) + geom_text(aes(label = family, family = family)) ## ------------------------------------------------------------------------ just <- expand.grid(hjust = c(0, 0.5, 1), vjust = c(0, 0.5, 1)) just$label <- paste0(just$hjust, ", ", just$vjust) ggplot(just, aes(hjust, vjust)) + geom_point(colour = "grey70", size = 5) + geom_text(aes(label = label, hjust = hjust, vjust = vjust)) ggplot2/tests/0000755000177400001440000000000012553440452013170 5ustar murdochusersggplot2/tests/testthat.R0000644000177400001440000000007212553440463015154 0ustar murdochuserslibrary(testthat) library(ggplot2) test_check("ggplot2") ggplot2/tests/testthat/0000755000177400001440000000000013031552555015030 5ustar murdochusersggplot2/tests/testthat/test-scale-discrete.R0000644000177400001440000000460412775463100021024 0ustar murdochuserscontext("scale_discrete") # Missing values ---------------------------------------------------------- df <- tibble::tibble( x1 = c("a", "b", NA), x2 = factor(x1), x3 = addNA(x2), y = 1:3 ) test_that("NAs translated/preserved for position scales", { p1a <- ggplot(df, aes(x1, y)) + geom_point() p2a <- ggplot(df, aes(x2, y)) + geom_point() p3a <- ggplot(df, aes(x3, y)) + geom_point() expect_equal(layer_data(p1a)$x, c(1, 2, 3)) expect_equal(layer_data(p2a)$x, c(1, 2, 3)) expect_equal(layer_data(p3a)$x, c(1, 2, 3)) rm_na_x <- scale_x_discrete(na.translate = FALSE) p1b <- p1a + rm_na_x p2b <- p2a + rm_na_x p3b <- p3a + rm_na_x expect_equal(layer_data(p1b)$x, c(1, 2, NA)) expect_equal(layer_data(p2b)$x, c(1, 2, NA)) expect_equal(layer_data(p3b)$x, c(1, 2, NA)) }) test_that("NAs translated/preserved for non-position scales", { p1a <- ggplot(df, aes(y, y, colour = x1)) + geom_point() p2a <- ggplot(df, aes(y, y, colour = x2)) + geom_point() p3a <- ggplot(df, aes(y, y, colour = x3)) + geom_point() expect_equal(layer_data(p1a)$colour, c("#F8766D", "#00BFC4", "grey50")) expect_equal(layer_data(p2a)$colour, c("#F8766D", "#00BFC4", "grey50")) expect_equal(layer_data(p3a)$colour, c("#F8766D", "#00BFC4", "grey50")) rm_na_colour <- scale_colour_discrete(na.translate = FALSE) p1b <- p1a + rm_na_colour p2b <- p2a + rm_na_colour p3b <- p3a + rm_na_colour expect_equal(layer_data(p1b)$colour, c("#F8766D", "#00BFC4", NA)) expect_equal(layer_data(p2b)$colour, c("#F8766D", "#00BFC4", NA)) expect_equal(layer_data(p3b)$colour, c("#F8766D", "#00BFC4", NA)) }) # Ranges ------------------------------------------------------------------ test_that("discrete ranges also encompas continuous values", { df <- data.frame(x1 = c("a", "b", "c"), x2 = c(0, 2, 4), y = 1:3) base <- ggplot(df, aes(y = y)) + scale_x_discrete() x_range <- function(x) { layer_scales(x)$x$dimension() } expect_equal(x_range(base + geom_point(aes(x1))), c(1, 3)) expect_equal(x_range(base + geom_point(aes(x2))), c(0, 4)) expect_equal(x_range(base + geom_point(aes(x1)) + geom_point(aes(x2))), c(0, 4)) }) test_that("discrete scale shrinks to range when setting limits", { df <- data.frame(x = letters[1:10], y = 1:10) p <- ggplot(df, aes(x, y)) + geom_point() + scale_x_discrete(limits = c("a", "b")) expect_equal(layer_scales(p)$x$dimension(c(0, 1)), c(0, 3)) }) ggplot2/tests/testthat/test-facet-.r0000644000177400001440000000275712567340422017343 0ustar murdochuserscontext("Facetting") df <- data.frame(x = 1:3, y = 3:1, z = letters[1:3]) test_that("facets split up the data", { l1 <- ggplot(df, aes(x, y)) + geom_point() + facet_wrap(~z) l2 <- ggplot(df, aes(x, y)) + geom_point() + facet_grid(. ~ z) l3 <- ggplot(df, aes(x, y)) + geom_point() + facet_grid(z ~ .) d1 <- layer_data(l1) d2 <- layer_data(l2) d3 <- layer_data(l3) expect_equal(d1, d2) expect_equal(d1, d3) expect_equal(d1$PANEL, factor(1:3)) }) test_that("facets with free scales scale independently", { l1 <- ggplot(df, aes(x, y)) + geom_point() + facet_wrap(~z, scales = "free") d1 <- cdata(l1)[[1]] expect_true(sd(d1$x) < 1e-10) expect_true(sd(d1$y) < 1e-10) l2 <- ggplot(df, aes(x, y)) + geom_point() + facet_grid(. ~ z, scales = "free") d2 <- cdata(l2)[[1]] expect_true(sd(d2$x) < 1e-10) expect_equal(length(unique(d2$y)), 3) l3 <- ggplot(df, aes(x, y)) + geom_point() + facet_grid(z ~ ., scales = "free") d3 <- cdata(l3)[[1]] expect_equal(length(unique(d3$x)), 3) expect_true(sd(d3$y) < 1e-10) }) test_that("shrink parameter affects scaling", { l1 <- ggplot(df, aes(1, y)) + geom_point() r1 <- pranges(l1) expect_equal(r1$x[[1]], c(1, 1)) expect_equal(r1$y[[1]], c(1, 3)) l2 <- ggplot(df, aes(1, y)) + stat_summary(fun.y = "mean") r2 <- pranges(l2) expect_equal(r2$y[[1]], c(2, 2)) l3 <- ggplot(df, aes(1, y)) + stat_summary(fun.y = "mean") + facet_null(shrink = FALSE) r3 <- pranges(l3) expect_equal(r3$y[[1]], c(1, 3)) }) ggplot2/tests/testthat/test-scale-manual.r0000644000177400001440000000371112567704140020536 0ustar murdochuserscontext("scale_manual") test_that("names of values used in manual scales", { s <- scale_colour_manual(values = c("8" = "c","4" = "a","6" = "b")) s$train(c("4", "6", "8")) expect_equal(s$map(c("4", "6", "8")), c("a", "b", "c")) }) dat <- data.frame(g = c("B","A","A")) p <- ggplot(dat, aes(g, fill = g)) + geom_bar() col <- c("A" = "red", "B" = "green", "C" = "blue") cols <- function(x) ggplot_build(x)$data[[1]][, "fill"] test_that("named values work regardless of order", { fill_scale <- function(order) scale_fill_manual(values = col[order], na.value = "black") # Order of value vector shouldn't matter expect_equal(cols(p + fill_scale(1:3)), c("red", "green")) expect_equal(cols(p + fill_scale(1:2)), c("red", "green")) expect_equal(cols(p + fill_scale(2:1)), c("red", "green")) expect_equal(cols(p + fill_scale(c(3, 2, 1))), c("red", "green")) expect_equal(cols(p + fill_scale(c(3, 1, 2))), c("red", "green")) expect_equal(cols(p + fill_scale(c(1, 3, 2))), c("red", "green")) }) test_that("missing values replaced with na.value", { df <- data.frame(x = 1, y = 1:3, z = factor(c(1:2, NA), exclude = NULL)) p <- ggplot(df, aes(x, y, colour = z)) + geom_point() + scale_colour_manual(values = c("black", "black"), na.value = "red") expect_equal(layer_data(p)$colour, c("black", "black", "red")) }) test_that("insufficient values raise an error", { df <- data.frame(x = 1, y = 1:3, z = factor(c(1:2, NA), exclude = NULL)) p <- qplot(x, y, data = df, colour = z) expect_error(ggplot_build(p + scale_colour_manual(values = "black")), "Insufficient values") # Should be sufficient ggplot_build(p + scale_colour_manual(values = c("black", "black"))) }) test_that("values are matched when scale contains more unique valuesthan are in the data", { s <- scale_colour_manual(values = c("8" = "c", "4" = "a", "22" = "d", "6" = "b")) s$train(c("4", "6", "8")) expect_equal(s$map(c("4", "6", "8")), c("a", "b", "c")) }) ggplot2/tests/testthat/Rplots.pdf0000644000177400001440000000737113005672525017017 0ustar murdochusers%PDF-1.4 %âãÏÓ\r 1 0 obj << /CreationDate (D:20161031114606) /ModDate (D:20161031114606) /Title (R Graphics Output) /Producer (R 3.3.1) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 7 0 obj << /Type /Page /Parent 3 0 R /Contents 8 0 R /Resources 4 0 R >> endobj 8 0 obj << /Length 24 /Filter /FlateDecode >> stream xœ3TðR0TÈR(ä Å#sÄwv•endstream endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /MediaBox [0 0 504 504] >> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font <<>> /ExtGState << >> /ColorSpace << /sRGB 5 0 R >> >> endobj 5 0 obj [/ICCBased 6 0 R] endobj 6 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óûendstream endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus 96/quoteleft 144/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space] >> endobj xref 0 10 0000000000 65535 f 0000000021 00000 n 0000000163 00000 n 0000000386 00000 n 0000000469 00000 n 0000000570 00000 n 0000000603 00000 n 0000000212 00000 n 0000000292 00000 n 0000003298 00000 n trailer << /Size 10 /Info 1 0 R /Root 2 0 R >> startxref 3555 %%EOF ggplot2/tests/testthat/test-dotplot.r0000644000177400001440000000456412771277527017703 0ustar murdochuserscontext("Dotplot") set.seed(111) dat <- data.frame(x = LETTERS[1:2], y = rnorm(30), g = LETTERS[3:5]) test_that("Dodging works", { p <- ggplot(dat, aes(x = x, y = y, fill = g)) + geom_dotplot( binwidth = 0.2, binaxis = "y", position = "dodge", stackdir = "center" ) df <- layer_data(p) # Number of levels in the dodged variable ndodge <- 3 # The amount of space allocated within each dodge group dwidth <- .9 / ndodge # This should be the x position for each before dodging xbase <- ceiling(df$group / ndodge) # This is the offset from dodging xoffset <- (df$group - 1) %% ndodge - (ndodge - 1) / 2 xoffset <- xoffset * dwidth # Check actual x locations equal predicted x locations expect_true(all(abs(df$x - (xbase + xoffset)) < 1e-6)) # Check that xmin and xmax are in the right place expect_true(all(abs(df$xmax - df$x - dwidth/2) < 1e-6)) expect_true(all(abs(df$x - df$xmin - dwidth/2) < 1e-6)) }) test_that("Binning works", { bp <- ggplot(dat, aes(y)) + geom_dotplot(binwidth = .4, method = "histodot") x <- layer_data(bp)$x # Need ugly hack to make sure mod function doesn't give values like -3.99999 # due to floating point error expect_true(all(abs((x - min(x) + 1e-7) %% .4) < 1e-6)) bp <- ggplot(dat, aes(x = y)) + geom_dotplot(binwidth = .4, method = "dotdensity") x <- layer_data(bp)$x # This one doesn't ensure that dotdensity works, but it does check that it's not # doing fixed bin sizes expect_false(all(abs((x - min(x) + 1e-7) %% .4) < 1e-6)) }) test_that("NA's result in warning from stat_bindot", { set.seed(122) dat <- data.frame(x = rnorm(20)) dat$x[c(2,10)] <- NA # Need to assign it to a var here so that it doesn't automatically print expect_warning(ggplot_build(ggplot(dat, aes(x)) + geom_dotplot(binwidth = .2)), "Removed 2 rows.*stat_bindot") }) test_that("When binning on y-axis, limits depend on the panel", { p <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_dotplot(binaxis='y') b1 <- ggplot_build(p + facet_wrap(~am)) b2 <- ggplot_build(p + facet_wrap(~am, scales = "free_y")) equal_limits1 <- (b1$layout$panel_ranges[[1]]$y.range == b1$layout$panel_ranges[[2]]$y.range) equal_limits2 <- (b2$layout$panel_ranges[[1]]$y.range == b2$layout$panel_ranges[[2]]$y.range) expect_true(all(equal_limits1)) expect_false(all(equal_limits2)) }) ggplot2/tests/testthat/test-stat-sum.R0000644000177400001440000000260312565146574017721 0ustar murdochuserscontext("stat_sum") test_that("handles grouping correctly", { d <- diamonds[1:1000, ] all_ones <- function(x) all.equal(mean(x), 1) base <- ggplot(d, aes(cut, clarity)) ret <- layer_data(base + stat_sum()) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_true(all_ones(ret$prop)) ret <- layer_data(base + stat_sum(aes(group = 1))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_equal(sum(ret$prop), 1) ret <- layer_data(base + stat_sum(aes(group = cut))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_true(all_ones(tapply(ret$prop, ret$x, FUN = sum))) ret <- layer_data(base + stat_sum(aes(group = cut, colour = cut))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_true(all_ones(tapply(ret$prop, ret$x, FUN = sum))) ret <- layer_data(base + stat_sum(aes(group = clarity))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_true(all_ones(tapply(ret$prop, ret$y, FUN = sum))) ret <- layer_data(base + stat_sum(aes(group = clarity, colour = cut))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_true(all_ones(tapply(ret$prop, ret$y, FUN = sum))) ret <- layer_data(base + stat_sum(aes(group = 1, weight = price))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), sum(d$price)) expect_equal(sum(ret$prop), 1) }) ggplot2/tests/testthat/test-boxplot.r0000644000177400001440000000214112771277527017672 0ustar murdochuserscontext("Boxplot") # thanks wch for providing the test code test_that("geom_boxplot range includes all outliers", { dat <- data.frame(x = 1, y = c(-(1:20) ^ 3, (1:20) ^ 3) ) p <- ggplot_build(ggplot(dat, aes(x,y)) + geom_boxplot()) miny <- p$layout$panel_ranges[[1]]$y.range[1] maxy <- p$layout$panel_ranges[[1]]$y.range[2] expect_true(miny <= min(dat$y)) expect_true(maxy >= max(dat$y)) }) test_that("geom_boxplot for continuous x gives warning if more than one x (#992)", { dat <- expand.grid(x = 1:2, y = c(-(1:5) ^ 3, (1:5) ^ 3) ) bplot <- function(aes = NULL, extra = list()) { ggplot_build(ggplot(dat, aes) + geom_boxplot(aes) + extra) } expect_warning(bplot(aes(x, y)), "Continuous x aesthetic") expect_warning(bplot(aes(x, y), facet_wrap(~x)), "Continuous x aesthetic") expect_warning(bplot(aes(Sys.Date() + x, y)), "Continuous x aesthetic") expect_warning(bplot(aes(x, group = x, y)), NA) expect_warning(bplot(aes(1, y)), NA) expect_warning(bplot(aes(factor(x), y)), NA) expect_warning(bplot(aes(x == 1, y)), NA) expect_warning(bplot(aes(as.character(x), y)), NA) }) ggplot2/tests/testthat/test-theme.r0000644000177400001440000001674512771277527017324 0ustar murdochuserscontext("Themes") test_that("Modifying theme element properties with + operator", { # Changing a "leaf node" works t <- theme_grey() + theme(axis.title.x = element_text(colour = 'red', margin = margin())) expect_identical(t$axis.title.x, element_text(colour = 'red', margin = margin(), vjust = 1)) # Make sure the theme class didn't change or get dropped expect_true(is.theme(t)) # Make sure the element class didn't change or get dropped expect_true(inherits(t$axis.title.x, "element")) expect_true(inherits(t$axis.title.x, "element_text")) # Modifying an intermediate node works t <- theme_grey() + theme(axis.title = element_text(colour = 'red')) expect_identical(t$axis.title, element_text(colour = 'red')) # Modifying a root node changes only the specified properties t <- theme_grey() + theme(text = element_text(colour = 'red')) expect_identical(t$text$colour, 'red') expect_identical(t$text$family, theme_grey()$text$family) expect_identical(t$text$face, theme_grey()$text$face) expect_identical(t$text$size, theme_grey()$text$size) # Descendent is unchanged expect_identical(t$axis.title.x, theme_grey()$axis.title.x) # Adding element_blank replaces element t <- theme_grey() + theme(axis.text.y = element_blank()) expect_identical(t$axis.text.y, element_blank()) # Adding a non-blank element to an element_blank() replaces it t <- t + theme(axis.text.y = element_text(colour = 'red')) expect_identical(t$axis.text.y, element_text(colour = 'red')) # Adding empty theme() has no effect t <- theme_grey() + theme() expect_identical(t, theme_grey()) expect_error(theme_grey() + "asdf") }) test_that("Adding theme object to ggplot object with + operator", { p <- qplot(1:3, 1:3) p <- p + theme(axis.title = element_text(size = 20)) expect_true(p$theme$axis.title$size == 20) # Should update specified properties, but not reset other properties p <- p + theme(text = element_text(colour = 'red')) expect_true(p$theme$text$colour == 'red') tt <- theme_grey()$text tt$colour <- 'red' expect_true(tt$inherit.blank) tt$inherit.blank <- FALSE expect_identical(p$theme$text, tt) }) test_that("Replacing theme elements with %+replace% operator", { # Changing a "leaf node" works t <- theme_grey() %+replace% theme(axis.title.x = element_text(colour = 'red')) expect_identical(t$axis.title.x, element_text(colour = 'red')) # Make sure the class didn't change or get dropped expect_true(is.theme(t)) # Changing an intermediate node works t <- theme_grey() %+replace% theme(axis.title = element_text(colour = 'red')) expect_identical(t$axis.title, element_text(colour = 'red')) # Descendent is unchanged expect_identical(t$axis.title.x, theme_grey()$axis.title.x) # Adding empty theme() has no effect t <- theme_grey() %+replace% theme() expect_identical(t, theme_grey()) expect_error(theme_grey() + "asdf") }) test_that("Calculating theme element inheritance", { t <- theme_grey() + theme(axis.title = element_text(colour = 'red')) # Check that properties are passed along from axis.title to axis.title.x e <- calc_element('axis.title.x', t) expect_identical(e$colour, 'red') expect_false(is.null(e$family)) expect_false(is.null(e$face)) expect_false(is.null(e$size)) # Check that rel() works for relative sizing, and is applied at each level t <- theme_grey(base_size = 12) + theme(axis.title = element_text(size = rel(0.5))) + theme(axis.title.x = element_text(size = rel(0.5))) e <- calc_element('axis.title', t) expect_identical(e$size, 6) ex <- calc_element('axis.title.x', t) expect_identical(ex$size, 3) # Check that a theme_blank in a parent node gets passed along to children t <- theme_grey() + theme(text = element_blank()) expect_identical(calc_element('axis.title.x', t), element_blank()) }) test_that("Complete and non-complete themes interact correctly with each other", { # The 'complete' attribute of t1 + t2 is the OR of their 'complete' attributes. # But for _element properties_, the one on the right modifies the one on the left. t <- theme_bw() + theme(text = element_text(colour = 'red')) expect_true(attr(t, "complete")) expect_equal(t$text$colour, 'red') # A complete theme object (like theme_bw) always trumps a non-complete theme object t <- theme(text = element_text(colour = 'red')) + theme_bw() expect_true(attr(t, "complete")) expect_equal(t$text$colour, theme_bw()$text$colour) # Adding two non-complete themes: the one on the right modifies the one on the left. t <- theme(text = element_text(colour = 'blue')) + theme(text = element_text(colour = 'red')) expect_false(attr(t, "complete")) expect_equal(t$text$colour, 'red') }) test_that("Complete and non-complete themes interact correctly with ggplot objects", { # Check that adding two theme successive theme objects to a ggplot object # works like adding the two theme object to each other p <- ggplot_build(qplot(1:3, 1:3) + theme_bw() + theme(text = element_text(colour = 'red'))) expect_true(attr(p$plot$theme, "complete")) # Compare the theme objects, after sorting the items, because item order can differ pt <- p$plot$theme tt <- theme_bw() + theme(text = element_text(colour = 'red')) pt <- pt[order(names(pt))] tt <- tt[order(names(tt))] expect_identical(pt, tt) p <- ggplot_build(qplot(1:3, 1:3) + theme(text = element_text(colour = 'red')) + theme_bw()) expect_true(attr(p$plot$theme, "complete")) # Compare the theme objects, after sorting the items, because item order can differ pt <- p$plot$theme tt <- theme(text = element_text(colour = 'red')) + theme_bw() pt <- pt[order(names(pt))] tt <- tt[order(names(tt))] expect_identical(pt, tt) p <- ggplot_build(qplot(1:3, 1:3) + theme(text = element_text(colour = 'red', face = 'italic'))) expect_false(attr(p$plot$theme, "complete")) expect_equal(p$plot$theme$text$colour, "red") expect_equal(p$plot$theme$text$face, "italic") p <- ggplot_build(qplot(1:3, 1:3) + theme(text = element_text(colour = 'red')) + theme(text = element_text(face = 'italic'))) expect_false(attr(p$plot$theme, "complete")) expect_equal(p$plot$theme$text$colour, "red") expect_equal(p$plot$theme$text$face, "italic") }) test_that("theme(validate=FALSE) means do not validate_element", { p <- qplot(1:3, 1:3) bw <- p + theme_bw() red.text <- theme(text = element_text(colour = "red")) bw.before <- bw + theme(animint.width = 500, validate = FALSE) expect_equal(bw.before$theme$animint.width, 500) bw.after <- p + theme(animint.width = 500, validate = FALSE) + theme_bw() expect_null(bw.after$theme$animint.width) red.after <- p + theme(animint.width = 500, validate = FALSE) + red.text expect_equal(red.after$theme$animint.width, 500) red.before <- p + red.text + theme(animint.width = 500, validate = FALSE) expect_equal(red.before$theme$animint.width, 500) }) test_that("All elements in complete themes have inherit.blank=TRUE", { inherit_blanks <- function(theme) { all(vapply(theme, function(el) { if (inherits(el, "element") && !inherits(el, "element_blank")) { el$inherit.blank } else { TRUE } }, logical(1))) } expect_true(inherit_blanks(theme_grey())) expect_true(inherit_blanks(theme_bw())) expect_true(inherit_blanks(theme_classic())) expect_true(inherit_blanks(theme_dark())) expect_true(inherit_blanks(theme_light())) expect_true(inherit_blanks(theme_linedraw())) expect_true(inherit_blanks(theme_minimal())) expect_true(inherit_blanks(theme_void())) }) ggplot2/tests/testthat/test-qplot.r0000644000177400001440000000114612302672540017326 0ustar murdochuserscontext("qplot") test_that("qplot works with variables in data frame and parent env", { df <- data.frame(x = 1:10, a = 1:10) y <- 1:10 b <- 1:10 expect_is(qplot(x, y, data = df), "ggplot") expect_is(qplot(x, y, data = df, colour = a), "ggplot") expect_is(qplot(x, y, data = df, colour = b), "ggplot") bin <- 1 expect_is(qplot(x, data = df, binwidth = bin), "ggplot") }) test_that("qplot works in non-standard environments", { env <- new.env(parent = globalenv()) expr <- quote({ `-1-` <- 10 x <- 1:10 qplot(x, breaks = 0:`-1-`) }) expect_is(eval(expr, env), "ggplot") }) ggplot2/tests/testthat/test-geom-boxplot.R0000644000177400001440000000044012651451472020545 0ustar murdochuserscontext("geom_boxplot") test_that("can use US spelling of colour", { df <- data.frame(x = 1, y = c(1:5, 100)) plot <- ggplot(df, aes(x, y)) + geom_boxplot(outlier.color = "red") gpar <- layer_grob(plot)[[1]]$children[[1]]$children[[1]]$gp expect_equal(gpar$col, "#FF0000FF") }) ggplot2/tests/testthat/test-facet-labels.r0000644000177400001440000001137512771277527020536 0ustar murdochuserscontext("Facet Labels") get_labels_matrix <- function(plot, ...) { data <- ggplot_build(plot) layout <- data$layout labels <- get_labels_info(layout$facet, layout, ...) labeller <- match.fun(layout$facet$params$labeller) # Create matrix of labels matrix <- lapply(labeller(labels), cbind) matrix <- do.call("cbind", matrix) matrix } get_labels_info <- function(facet, panel, ...) { UseMethod("get_labels_info") } get_labels_info.FacetGrid <- function(facet, layout, type) { if (type == "rows") { labels <- unique(layout$panel_layout[names(facet$params$rows)]) attr(labels, "type") <- "rows" attr(labels, "facet") <- "grid" } else { labels <- unique(layout$panel_layout[names(facet$params$cols)]) attr(labels, "type") <- "cols" attr(labels, "facet") <- "grid" } labels } get_labels_info.FacetWrap <- function(facet, layout) { labels <- layout$panel_layout[names(facet$params$facets)] attr(labels, "facet") <- "wrap" if (!is.null(facet$params$switch) && facet$params$switch == "x") { attr(labels, "type") <- "rows" } else { attr(labels, "type") <- "cols" } labels } test_that("labellers handle facet labels properly", { labels <- list(var1 = letters[1:2], var2 = letters[3:4]) expect_identical(label_value(labels), labels) expect_identical(label_value(labels, FALSE), list(c("a, c", "b, d"))) expect_identical(label_both(labels), list(c("var1: a", "var1: b"), c("var2: c", "var2: d"))) expect_identical(label_both(labels, FALSE), list(c("var1, var2: a, c", "var1, var2: b, d"))) }) test_that("labellers handle plotmath expressions", { labels <- list(var1 = c("alpha", "beta"), var2 = letters[3:4]) expected_parsed <- list( list(expression(alpha), expression(beta)), list(expression(c), expression(d)) ) expect_identical(label_parsed(labels), expected_parsed) expected_parsed_multi <- list(list( expression(list(alpha, c)), expression(list(beta, d)) )) expect_identical(label_parsed(labels, FALSE), expected_parsed_multi) }) test_that("label_value() handles factors", { labels_chr <- list(var1 = letters[1:2], var2 = letters[3:4]) labels <- lapply(labels_chr, factor) expect_identical(label_value(labels), labels_chr) }) test_that("labeller() dispatches labellers", { p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() expected_cyl_both <- cbind(paste("cyl:", c(4, 6, 8))) expected_am_both <- cbind(paste("am:", 0:1)) # Rows and cols dispatch with facet_wrap() p1 <- p + facet_wrap(~cyl, labeller = labeller(.rows = label_both)) p2 <- p + facet_wrap(~cyl, labeller = labeller(.cols = label_both)) expect_equal(get_labels_matrix(p1), expected_cyl_both) expect_equal(get_labels_matrix(p2), expected_cyl_both) # facet_wrap() shouldn't get both rows and cols p3 <- p + facet_wrap(~cyl, labeller = labeller( .cols = label_both, .rows = label_both)) expect_error(ggplotGrob(p3)) # facet_grid() can get both rows and cols p4 <- p + facet_grid(am ~ cyl, labeller = labeller( .cols = label_both, .rows = label_both)) expect_equal(get_labels_matrix(p4, "rows"), expected_am_both) expect_equal(get_labels_matrix(p4, "cols"), expected_cyl_both) # Cannot have a specific labeller for a variable which already has a # margin-wide labeller p5 <- p + facet_wrap(~cyl, labeller = labeller( .rows = label_both, cyl = label_value)) expect_error(ggplotGrob(p5)) # Variables can be attributed labellers p6 <- p + facet_grid(am + cyl ~ ., labeller = labeller( am = label_both, cyl = label_both)) expect_equal( get_labels_matrix(p6, "rows"), cbind( paste("am:", rep(0:1, each = 3)), paste("cyl:", rep(c(4, 6, 8), 2)) ) ) # Default labeller is used for other variables p7 <- p + facet_grid(am ~ cyl, labeller = labeller(.default = label_both)) expect_equal(get_labels_matrix(p7, "rows"), expected_am_both) expect_equal(get_labels_matrix(p7, "cols"), expected_cyl_both) }) test_that("as_labeller() deals with non-labellers", { p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() lookup <- c(`0` = "zero", `1` = "one") # Lookup table p1 <- p + facet_wrap(~am, labeller = labeller(am = lookup)) expect_equal(get_labels_matrix(p1), cbind(c("zero", "one"))) # Non-labeller function taking character vectors p2 <- p + facet_wrap(~am, labeller = labeller(am = function(x) paste0(x, "-foo"))) expect_equal(get_labels_matrix(p2), cbind(c("0-foo", "1-foo"))) }) test_that("old school labellers still work", { my_labeller <- function(variable, value) { paste0("var = ", as.character(value)) } expect_warning(p <- ggplot(mtcars, aes(disp, drat)) + geom_point() + facet_grid(~cyl, labeller = my_labeller)) expected_labels <- cbind(paste("var =", c(4, 6, 8))) expect_identical(get_labels_matrix(p, "cols"), expected_labels) }) ggplot2/tests/testthat/test-fortify.r0000644000177400001440000000227112554471162017657 0ustar murdochuserscontext("Fortify") library(sp) test_that("Spatial polygons have correct ordering", { make_square <- function(x = 0, y = 0, height = 1, width = 1){ delx <- width/2 dely <- height/2 Polygon(matrix(c(x + delx, x - delx,x - delx,x + delx,x + delx , y - dely,y - dely,y + dely,y + dely,y - dely), ncol = 2)) } make_hole <- function(x = 0, y = 0, height = .5, width = .5){ p <- make_square(x = x, y = y, height = height, width = width) p@hole <- TRUE p } fake_data <- data.frame(ids = 1:5, region = c(1,1,2,3,4)) rownames(fake_data) <- 1:5 polys <- list(Polygons(list(make_square(), make_hole()), 1), Polygons(list(make_square(1,0), make_square(2, 0)), 2), Polygons(list(make_square(1,1)), 3), Polygons(list(make_square(0,1)), 4), Polygons(list(make_square(0,3)), 5)) polys_sp <- SpatialPolygons(polys) fake_sp <- SpatialPolygonsDataFrame(polys_sp, fake_data) # now reorder regions polys2 <- rev(polys) polys2_sp <- SpatialPolygons(polys2) fake_sp2 <- SpatialPolygonsDataFrame(polys2_sp, fake_data) expect_equivalent(fortify(fake_sp), plyr::arrange(fortify(fake_sp2), id, order)) }) ggplot2/tests/testthat/test-scales.r0000644000177400001440000001257413004712457017452 0ustar murdochuserscontext("Scales") test_that("buidling a plot does not affect its scales", { dat <- data.frame(x = rnorm(20), y = rnorm(20)) p <- ggplot(dat, aes(x, y)) + geom_point() expect_equal(length(p$scales$scales), 0) ggplot_build(p) expect_equal(length(p$scales$scales), 0) }) test_that("ranges update only for variables listed in aesthetics", { sc <- scale_alpha() sc$train_df(data.frame(alpha = 1:10)) expect_equal(sc$range$range, c(1, 10)) sc$train_df(data.frame(alpha = 50)) expect_equal(sc$range$range, c(1, 50)) sc$train_df(data.frame(beta = 100)) expect_equal(sc$range$range, c(1, 50)) sc$train_df(data.frame()) expect_equal(sc$range$range, c(1, 50)) }) test_that("mapping works", { sc <- scale_alpha(range = c(0, 1), na.value = 0) sc$train_df(data.frame(alpha = 1:10)) expect_equal( sc$map_df(data.frame(alpha = 1:10))[[1]], seq(0, 1, length.out = 10) ) expect_equal(sc$map_df(data.frame(alpha = NA))[[1]], 0) expect_equal( sc$map_df(data.frame(alpha = c(-10, 11)))[[1]], c(0, 0)) }) test_that("identity scale preserves input values", { df <- data.frame(x = 1:3, z = letters[1:3]) p1 <- ggplot(df, aes(x, z, colour = z, fill = z, shape = z, size = x, alpha = x)) + geom_point() + scale_colour_identity() + scale_fill_identity() + scale_shape_identity() + scale_size_identity() + scale_alpha_identity() d1 <- layer_data(p1) expect_equal(d1$colour, as.character(df$z)) expect_equal(d1$fill, as.character(df$z)) expect_equal(d1$shape, as.character(df$z)) expect_equal(d1$size, as.numeric(df$z)) expect_equal(d1$alpha, as.numeric(df$z)) }) test_that("position scales updated by all position aesthetics", { df <- data.frame(x = 1:3, y = 1:3) aesthetics <- list( aes(xend = x, yend = x), aes(xmin = x, ymin = x), aes(xmax = x, ymax = x), aes(xintercept = x, yintercept = y) ) base <- ggplot(df, aes(x = 1, y = 1)) + geom_point() plots <- lapply(aesthetics, function(x) base %+% x) ranges <- lapply(plots, pranges) lapply(ranges, function(range) { expect_equal(range$x[[1]], c(1, 3)) expect_equal(range$y[[1]], c(1, 3)) }) }) test_that("position scales generate after stats", { df <- data.frame(x = factor(c(1, 1, 1))) plot <- ggplot(df, aes(x)) + geom_bar() ranges <- pranges(plot) expect_equal(ranges$x[[1]], c("1")) expect_equal(ranges$y[[1]], c(0, 3)) }) test_that("oob affects position values", { dat <- data.frame(x = c("a", "b", "c"), y = c(1, 5, 10)) base <- ggplot(dat, aes(x, y)) + geom_col() + annotate("point", x = "a", y = c(-Inf, Inf)) y_scale <- function(limits, oob = censor) { scale_y_continuous(limits = limits, oob = oob, expand = c(0, 0)) } base + scale_y_continuous(limits = c(-0,5)) expect_warning(low_censor <- cdata(base + y_scale(c(0, 5), censor)), "Removed 1 rows containing missing values") expect_warning(mid_censor <- cdata(base + y_scale(c(3, 7), censor)), "Removed 2 rows containing missing values") low_squish <- cdata(base + y_scale(c(0, 5), squish)) mid_squish <- cdata(base + y_scale(c(3, 7), squish)) # Points are always at the top and bottom expect_equal(low_censor[[2]]$y, c(0, 1)) expect_equal(mid_censor[[2]]$y, c(0, 1)) expect_equal(low_squish[[2]]$y, c(0, 1)) expect_equal(mid_squish[[2]]$y, c(0, 1)) # Bars depend on limits and oob expect_equal(low_censor[[1]]$y, c(0.2, 1)) expect_equal(mid_censor[[1]]$y, c(0.5)) expect_equal(low_squish[[1]]$y, c(0.2, 1, 1)) expect_equal(mid_squish[[1]]$y, c(0, 0.5, 1)) }) test_that("scales looked for in appropriate place", { xlabel <- function(x) ggplot_build(x)$layout$panel_scales$x[[1]]$name p0 <- qplot(mpg, wt, data = mtcars) + scale_x_continuous("0") expect_equal(xlabel(p0), "0") scale_x_continuous <- function(...) ggplot2::scale_x_continuous("1") p1 <- qplot(mpg, wt, data = mtcars) expect_equal(xlabel(p1), "1") f <- function() { scale_x_continuous <- function(...) ggplot2::scale_x_continuous("2") qplot(mpg, wt, data = mtcars) } p2 <- f() expect_equal(xlabel(p2), "2") rm(scale_x_continuous) p4 <- qplot(mpg, wt, data = mtcars) expect_equal(xlabel(p4), waiver()) }) test_that("find_global searches in the right places", { testenv <- new.env(parent = globalenv()) # This should find the scale object in the package environment expect_identical(find_global("scale_colour_hue", testenv), ggplot2::scale_colour_hue) # Set an object with the same name in the environment testenv$scale_colour_hue <- "foo" # Now it should return the new object expect_identical(find_global("scale_colour_hue", testenv), "foo") # If we search in the empty env, we should end up with the object # from the ggplot2 namespace expect_identical(find_global("scale_colour_hue", emptyenv()), ggplot2::scale_colour_hue) }) test_that("Scales warn when transforms introduces non-finite values", { df <- data.frame(x = c(1e1, 1e5), y = c(0, 100)) p <- ggplot(df, aes(x, y)) + geom_point(size = 5) + scale_y_log10() expect_warning(ggplot_build(p), "Transformation introduced infinite values") }) test_that("Scales get their correct titles through layout", { df <- data.frame(x = c(1e1, 1e5), y = c(0, 100)) p <- ggplot(df, aes(x, y)) + geom_point(size = 5) p <- ggplot_build(p) expect_identical(p$layout$xlabel(p$plot$labels)$primary, "x") expect_identical(p$layout$ylabel(p$plot$labels)$primary, "y") }) ggplot2/tests/testthat/test-coord-polar.r0000644000177400001440000000340012555424654020416 0ustar murdochuserscontext("coord_polar") test_that("Polar distance calculation", { dat <- data.frame( theta = c(0, 2*pi, 2, 6, 6, 1, 1, 0), r = c(0, 0, 0.5, 0.5, 1, 1, 0.75, .5)) scales <- list( x = scale_x_continuous(limits = c(0, 2*pi)), y = scale_y_continuous(limits = c(0, 1)) ) coord <- coord_polar() dists <- coord$distance(dat$theta, dat$r, coord$train(scales)) # dists is normalized by dividing by this value, so we'll add it back # The maximum length of a spiral arc, from (t,r) = (0,0) to (2*pi,1) maxlen <- spiral_arc_length(1 / (2 * pi), 0, 2 * pi) # These are the expected lengths. I think they're correct... expect_equal(dists, c(0, -1.225737494, -2, -0.5, -5, -0.25, -0.6736885011) / maxlen) # The picture can be visualized with: # ggplot(dat, aes(x=theta, y=r)) + geom_path() + # geom_point(alpha=0.3) + coord_polar() }) test_that("Polar distance calculation ignores NA's", { # These are r and theta values; we'll swap them around for testing x1 <- c(0, 0.5, 0.5, NA, 1) x2 <- c(0, 1, 2, 0, 1) dists <- dist_polar(x1, x2) expect_equal(is.na(dists), c(FALSE, FALSE, TRUE, TRUE)) dists <- dist_polar(x2, x1) expect_equal(is.na(dists), c(FALSE, FALSE, TRUE, TRUE)) # NA on the end x1 <- c(0, 0.5, 0.5, 1, NA) x2 <- c(0, 1, 2, 0, 1) dists <- dist_polar(x1, x2) expect_equal(is.na(dists), c(FALSE, FALSE, FALSE, TRUE)) dists <- dist_polar(x2, x1) expect_equal(is.na(dists), c(FALSE, FALSE, FALSE, TRUE)) # NAs in each vector - also have NaN x1 <- c(0, 0.5, 0.5, 1, NA) x2 <- c(NaN, 1, 2, NA, 1) dists <- dist_polar(x1, x2) expect_equal(is.na(dists), c(TRUE, FALSE, TRUE, TRUE)) dists <- dist_polar(x2, x1) expect_equal(is.na(dists), c(TRUE, FALSE, TRUE, TRUE)) }) ggplot2/tests/testthat/test-stat-hex.R0000644000177400001440000000032512746502457017675 0ustar murdochuserscontext("stat-hex") test_that("can use length 1 binwidth", { df <- data.frame(x = c(1, 1, 2), y = c(1, 1, 2)) p <- ggplot(df, aes(x, y)) + stat_binhex(binwidth = 1) expect_equal(nrow(layer_data(p)), 2) }) ggplot2/tests/testthat/test-build.r0000644000177400001440000000311212776737601017300 0ustar murdochusers# Test the complete path from plot specification to rendered data context("Plot building") df <- data.frame(x = 1:3, y = 3:1, z = letters[1:3]) test_that("there is one data frame for each layer", { nlayers <- function(x) length(ggplot_build(x)$data) l1 <- ggplot(df, aes(x, y)) + geom_point() l2 <- ggplot(df, aes(x, y)) + geom_point() + geom_line() l3 <- ggplot(df, aes(x, y)) + geom_point() + geom_line() + geom_point() expect_equal(nlayers(l1), 1) expect_equal(nlayers(l2), 2) expect_equal(nlayers(l3), 3) }) test_that("position aesthetics coerced to correct type", { l1 <- ggplot(df, aes(x, y)) + geom_point() d1 <- layer_data(l1, 1) expect_is(d1$x, "numeric") expect_is(d1$y, "numeric") l2 <- ggplot(df, aes(x, z)) + geom_point() + scale_x_discrete() d2 <- layer_data(l2, 1) expect_is(d2$x, "integer") expect_is(d2$y, "integer") }) test_that("non-position aesthetics are mapped", { l1 <- ggplot(df, aes(x, y, fill = z, colour = z, shape = z)) + geom_point() expect_named( layer_data(l1, 1), c( "x", "y", "fill", "group", "colour", "shape", "size", "PANEL", "alpha", "stroke" ), ignore.order = TRUE ) l2 <- l1 + scale_colour_manual(values = c("blue", "red", "yellow")) d2 <- layer_data(l2, 1) expect_equal(d2$colour, c("blue", "red", "yellow")) }) test_that("strings are not converted to factors", { df <- data.frame(x = 1:2, y = 2:1, label = c("alpha", "beta"), stringsAsFactors = FALSE) p <- ggplot(df, aes(x, y)) + geom_text(aes(label = label), parse = TRUE) expect_is(layer_data(p)$label, "character") }) ggplot2/tests/testthat/test-stat-bin2d.R0000644000177400001440000000206012650514214020071 0ustar murdochuserscontext("stat_bin2d") test_that("binwidth is respected", { df <- data.frame(x = c(1, 1, 1, 2), y = c(1, 1, 1, 2)) base <- ggplot(df, aes(x, y)) + stat_bin2d(geom = "tile", binwidth = 0.25) out <- layer_data(base) expect_equal(nrow(out), 2) # Adjust tolerance to account for fuzzy breaks adjustment expect_equal(out$xmin, c(1, 1.75), tolerance = 1e-7) expect_equal(out$xmax, c(1.25, 2), tolerance = 1e-7) }) test_that("breaks override binwidth", { # Test explicitly setting the breaks for x, overriding # the binwidth. integer_breaks <- (0:4) - 0.5 # Will use for x half_breaks <- seq(0, 3.5, 0.5) # Will test against this for y df <- data.frame(x = 0:3, y = 0:3) base <- ggplot(df, aes(x, y)) + stat_bin2d( breaks = list(x = integer_breaks, y = NULL), binwidth = c(0.5, 0.5) ) out <- layer_data(base) expect_equal(out$xbin, cut(df$x, adjust_breaks(integer_breaks), include.lowest = TRUE, labels = FALSE)) expect_equal(out$ybin, cut(df$y, adjust_breaks(half_breaks), include.lowest = TRUE, labels = FALSE)) }) ggplot2/tests/testthat/test-annotate.r0000644000177400001440000000301712751141452020000 0ustar murdochuserscontext("annotate") test_that("dates in segment annotation work", { dt <- structure(list(month = structure(c(1364774400, 1377993600), class = c("POSIXct", "POSIXt"), tzone = "UTC"), total = c(-10.3, 11.7)), .Names = c("month", "total"), row.names = c(NA, -2L), class = "data.frame") p <- ggplot(dt, aes(month, total)) + geom_point() + annotate("segment", x = as.POSIXct("2013-04-01"), xend = as.POSIXct("2013-07-01"), y = -10, yend = 10 ) expect_true(all(c("xend", "yend") %in% names(layer_data(p, 2)))) }) test_that("segment annotations transform with scales", { # This should be a visual test, but contriubtion documentation does not # explain how to make one ggplot(mtcars, aes(wt, mpg)) + geom_point() + annotate("segment", x = 2, y = 10, xend = 5, yend = 30, colour = "red") + scale_y_reverse() }) test_that("annotation_* has dummy data assigned and don't inherit aes", { custom <- annotation_custom(zeroGrob()) logtick <- annotation_logticks() library(maps) usamap <- map_data("state") map <- annotation_map(usamap) rainbow <- matrix(hcl(seq(0, 360, length.out = 50 * 50), 80, 70), nrow = 50) raster <- annotation_raster(rainbow, 15, 20, 3, 4) dummy <- dummy_data() expect_equal(custom$data, dummy) expect_equal(logtick$data, dummy) expect_equal(map$data, dummy) expect_equal(raster$data, dummy) expect_false(custom$inherit.aes) expect_false(logtick$inherit.aes) expect_false(map$inherit.aes) expect_false(raster$inherit.aes) }) ggplot2/tests/testthat/test-coord-train.r0000644000177400001440000000243012567704140020412 0ustar murdochuserscontext("coord_train") test_that("NA's don't appear in breaks", { # Returns true if any major/minor breaks have an NA any_NA_major_minor <- function(trained) { ns <- names(trained)[grepl("(\\.major)|(\\.minor)$", names(trained))] for (n in ns) { if (!is.null(trained[n]) && any(is.na(trained[n]))) return(TRUE) } return(FALSE) } scales <- list( x = scale_x_continuous(limits = c(1, 12)), y = scale_y_continuous(limits = c(1, 12)) ) # First have to test that scale_breaks_positions will return a vector with NA # This is a test to make sure the later tests will be useful! # It's possible that changes to the the way that breaks are calculated will # make it so that scale_break_positions will no longer give NA for range 1, 12 expect_true(any(is.na((scales$x$break_positions())))) expect_true(any(is.na((scales$y$break_positions())))) # Check the various types of coords to make sure they don't have NA breaks expect_false(any_NA_major_minor(coord_polar()$train(scales))) expect_false(any_NA_major_minor(coord_cartesian()$train(scales))) expect_false(any_NA_major_minor(coord_trans()$train(scales))) expect_false(any_NA_major_minor(coord_fixed()$train(scales))) expect_false(any_NA_major_minor(coord_map()$train(scales))) }) ggplot2/tests/testthat/helper-plot-data.r0000644000177400001440000000142112771277527020370 0ustar murdochusers# Transform the data as the coordinate system does cdata <- function(plot) { pieces <- ggplot_build(plot) lapply(pieces$data, function(d) { plyr::ddply(d, "PANEL", function(panel_data) { scales <- pieces$layout$get_scales(panel_data$PANEL[1]) details <- plot$coordinates$train(scales) plot$coordinates$transform(panel_data, details) }) }) } pranges <- function(plot) { layout <- ggplot_build(plot)$layout x_ranges <- lapply(layout$panel_scales$x, function(scale) scale$get_limits()) y_ranges <- lapply(layout$panel_scales$y, function(scale) scale$get_limits()) npscales <- plot$scales$non_position_scales() npranges <- lapply(npscales$scales$scales, function(scale) scale$get_limits()) c(list(x = x_ranges, y = y_ranges), npranges) } ggplot2/tests/testthat/test-aes.r0000644000177400001440000000315112565146727016753 0ustar murdochuserscontext("Creating aesthetic mappings") test_that("aes() captures input expressions", { out <- aes(mpg, wt + 1) expect_equal(out$x, quote(mpg)) expect_equal(out$y, quote(wt + 1)) }) test_that("aes_q() uses quoted calls and formulas", { out <- aes_q(quote(mpg), ~ wt + 1) expect_equal(out$x, quote(mpg)) expect_equal(out$y, quote(wt + 1)) }) test_that("aes_string() parses strings", { expect_equal(aes_string("a + b")$x, quote(a + b)) }) test_that("aes_string() doesn't parse non-strings", { old <- options(OutDec = ",") on.exit(options(old)) expect_equal(aes_string(0.4)$x, 0.4) }) test_that("aes_q() & aes_string() preserves explicit NULLs", { expect_equal(aes_q(NULL), aes(NULL)) expect_equal(aes_q(x = NULL), aes(NULL)) expect_equal(aes_q(colour = NULL), aes(colour = NULL)) expect_equal(aes_string(NULL), aes(NULL)) expect_equal(aes_string(x = NULL), aes(NULL)) expect_equal(aes_string(colour = NULL), aes(colour = NULL)) }) test_that("aes_all() converts strings into mappings", { expect_equal( aes_all(c("x", "y", "col", "pch")), aes(x, y, colour = col, shape = pch) ) }) test_that("aes evaluated in environment where plot created", { df <- data.frame(x = 1, y = 1) p <- ggplot(df, aes(foo, y)) + geom_point() # Accessing an undefined variable should result in error expect_error(layer_data(p), "'foo' not found") # Once it's defined we should get it back foo <- 0 expect_equal(layer_data(p)$x, 0) # And regular variable shadowing should work f <- function() { foo <- 10 ggplot(df, aes(foo, y)) + geom_point() } expect_equal(layer_data(f())$x, 10) }) ggplot2/tests/testthat/test-scale-date.R0000644000177400001440000000252312772220436020135 0ustar murdochuserscontext("scale_date") base_time <- function(tz = "") { as.POSIXct(strptime("2015-06-01", "%Y-%m-%d", tz = tz)) } df <- data.frame( time1 = base_time("") + 0:6 * 3600, time2 = base_time("UTC") + 0:6 * 3600, time3 = base_time("Australia/Lord_Howe") + (0:6 + 13) * 3600, # has half hour offset y = seq_along(base_time) ) test_that("inherits timezone from data", { # Local time p <- ggplot(df, aes(y = y)) + geom_point(aes(time1)) sc <- layer_scales(p)$x expect_equal(sc$timezone, NULL) expect_equal(sc$get_labels()[1], "00:00") # UTC p <- ggplot(df, aes(y = y)) + geom_point(aes(time2)) sc <- layer_scales(p)$x expect_equal(sc$timezone, "UTC") expect_equal(sc$get_labels()[1], "00:00") }) test_that("first timezone wins", { p <- ggplot(df, aes(y = y)) + geom_point(aes(time2)) + geom_point(aes(time3), colour = "red") + scale_x_datetime(date_breaks = "hour", date_labels = "%H:%M") sc <- layer_scales(p)$x expect_equal(sc$timezone, "UTC") }) test_that("not cached across calls", { scale_x <- scale_x_datetime(date_breaks = "hour", date_labels = "%H:%M") p1 <- ggplot(df, aes(y = y)) + geom_point(aes(time2)) + scale_x p2 <- ggplot(df, aes(y = y)) + geom_point(aes(time3)) + scale_x expect_equal(layer_scales(p1)$x$timezone, "UTC") expect_equal(layer_scales(p2)$x$timezone, "Australia/Lord_Howe") }) ggplot2/tests/testthat/test-geom-ribbon.R0000644000177400001440000000040312661224621020323 0ustar murdochuserscontext("geom_ribbon") test_that("NAs are not dropped from the data", { df <- data.frame(x = 1:5, y = c(1, 1, NA, 1, 1)) p <- ggplot(df, aes(x))+ geom_ribbon(aes(ymin = y - 1, ymax = y + 1)) expect_equal(layer_data(p)$ymin, c(0, 0, NA, 0, 0)) }) ggplot2/tests/testthat/test-labels.r0000644000177400001440000000155412746404452017443 0ustar murdochuserscontext("Labels") test_that("Setting guide labels", { expect_identical(xlab("my label")$x, "my label") expect_identical(labs(x = "my label")$x, "my label") expect_identical(ylab("my label")$y, "my label") expect_identical(labs(y = "my label")$y, "my label") # Plot titles expect_identical(labs(title = "my title")$title, "my title") expect_identical(labs(title = "my title", subtitle = "my subtitle")$subtitle, "my subtitle") # whole plot annotations expect_identical(labs(caption = "my notice")$caption, "my notice") expect_identical(labs(title = "my title", caption = "my notice")$caption, "my notice") # Colour expect_identical(labs(colour = "my label")$colour, "my label") # American spelling expect_identical(labs(color = "my label")$colour, "my label") }) ggplot2/tests/testthat/test-data.r0000644000177400001440000000170312775174506017114 0ustar murdochuserscontext("Data") test_that("stringsAsFactors doesn't affect results", { old <- getOption("stringsAsFactors") on.exit(options(stringsAsFactors = old), add = TRUE) dat.character <- data.frame(x = letters[5:1], y = 1:5, stringsAsFactors = FALSE) dat.factor <- data.frame(x = letters[5:1], y = 1:5, stringsAsFactors = TRUE) base <- ggplot(mapping = aes(x, y)) + geom_point() xlabels <- function(x) x$layout$panel_ranges[[1]]$x.labels options(stringsAsFactors = TRUE) char_true <- ggplot_build(base %+% dat.character) factor_true <- ggplot_build(base %+% dat.factor) options(stringsAsFactors = FALSE) char_false <- ggplot_build(base %+% dat.character) factor_false <- ggplot_build(base %+% dat.factor) expect_equal(xlabels(char_true), letters[1:5]) expect_equal(xlabels(char_false), letters[1:5]) expect_equal(xlabels(factor_true), letters[1:5]) expect_equal(xlabels(factor_false), letters[1:5]) }) ggplot2/tests/testthat/test-guides.R0000644000177400001440000000123412773535751017423 0ustar murdochuserscontext("Guides") test_that("colourbar trains without labels", { g <- guide_colorbar() sc <- scale_colour_continuous(limits = c(0, 4), labels = NULL) out <- guide_train(g, sc) expect_equal(names(out$key), c("colour", ".value")) }) test_that("Colorbar respects show.legend in layer", { df <- data.frame(x = 1:3, y = 1) p <- ggplot(df, aes(x = x, y = y, color = x)) + geom_point(size = 20, shape = 21, show.legend = FALSE) expect_false("guide-box" %in% ggplotGrob(p)$layout$name) p <- ggplot(df, aes(x = x, y = y, color = x)) + geom_point(size = 20, shape = 21, show.legend = TRUE) expect_true("guide-box" %in% ggplotGrob(p)$layout$name) }) ggplot2/tests/testthat/test-function-args.r0000644000177400001440000000514712771314543020761 0ustar murdochuserscontext("function-args") filter_args <- function(x) { all_names <- names(x) all_names <- setdiff(all_names, c("self", "data", "scales", "coordinates", "...")) x[all_names] } test_that("geom_xxx and GeomXxx$draw arg defaults match", { ggplot2_ns <- asNamespace("ggplot2") objs <- ls(ggplot2_ns) geom_fun_names <- objs[grepl("^(geom|annotation)_", objs)] # These aren't actually geoms, or need special parameters and can't be tested this way. geom_fun_names <- setdiff( geom_fun_names, c("geom_map", "annotation_custom", "annotation_map", "annotation_raster", "annotation_id") ) # For each geom_xxx function and the corresponding GeomXxx$draw and # GeomXxx$draw_groups functions, make sure that if they have same args, that # the args have the same default values. lapply(geom_fun_names, function(geom_fun_name) { geom_fun <- ggplot2_ns[[geom_fun_name]] draw <- geom_fun()$geom$draw_layer draw_groups <- geom_fun()$geom$draw_group fun_args <- formals(geom_fun) draw_args <- c(ggproto_formals(draw), ggproto_formals(draw_groups)) draw_args <- filter_args(draw_args) common_names <- intersect(names(fun_args), names(draw_args)) expect_identical(fun_args[common_names], draw_args[common_names], info = paste0("Mismatch between arg defaults for ", geom_fun_name, " and ", class(geom_fun()$geom)[1], "'s $draw and/or $draw_group functions.") ) }) }) test_that("stat_xxx and StatXxx$draw arg defaults match", { ggplot2_ns <- asNamespace("ggplot2") objs <- ls(ggplot2_ns) stat_fun_names <- objs[grepl("^stat_", objs)] # These aren't actually stats, or need special parameters and can't be tested this way. stat_fun_names <- setdiff( stat_fun_names, c("stat_function") ) # For each geom_xxx function and the corresponding GeomXxx$draw and # GeomXxx$draw_groups functions, make sure that if they have same args, that # the args have the same default values. lapply(stat_fun_names, function(stat_fun_name) { stat_fun <- ggplot2_ns[[stat_fun_name]] calculate <- stat_fun()$stat$compute calculate_groups <- stat_fun()$stat$compute_group fun_args <- formals(stat_fun) calc_args <- c(ggproto_formals(calculate), ggproto_formals(calculate_groups)) calc_args <- filter_args(calc_args) common_names <- intersect(names(fun_args), names(calc_args)) expect_identical(fun_args[common_names], calc_args[common_names], info = paste0("Mismatch between arg defaults for ", stat_fun_name, " and ", class(stat_fun()$stat)[1], "'s $compute and/or $compute_groups functions.") ) }) }) ggplot2/tests/testthat/test-aes-grouping.r0000644000177400001440000000240712567371021020573 0ustar murdochuserscontext("Aesthetics (grouping)") df <- data.frame( x = 1:4, a = c("a", "a", "b", "b"), b = c("a", "b", "a", "b") ) group <- function(x) as.vector(layer_data(x, 1)$group) groups <- function(x) length(unique(group(x))) test_that("one group per combination of discrete vars", { plot <- ggplot(df, aes(x, x)) + geom_point() expect_equal(group(plot), rep(NO_GROUP, 4)) plot <- ggplot(df, aes(x, a)) + geom_point() expect_equal(group(plot), c(1, 1, 2, 2)) plot <- ggplot(df, aes(x, b)) + geom_point() expect_equal(group(plot), c(1, 2, 1, 2)) plot <- ggplot(df, aes(a, b)) + geom_point() expect_equal(groups(plot), 4) }) test_that("label is not used as a grouping var", { plot <- ggplot(df, aes(x, x, label = a)) + geom_point() expect_equal(group(plot), rep(NO_GROUP, 4)) plot <- ggplot(df, aes(x, x, colour = a, label = b)) + geom_point() expect_equal(group(plot), c(1, 1, 2, 2)) }) test_that("group aesthetic overrides defaults", { plot <- ggplot(df, aes(x, x, group = x)) + geom_point() expect_equal(groups(plot), 4) plot <- ggplot(df, aes(a, b, group = 1)) + geom_point() expect_equal(groups(plot), 1) }) test_that("group param overrides defaults", { plot <- ggplot(df, aes(a, b)) + geom_point(group = 1) expect_equal(groups(plot), 1) }) ggplot2/tests/testthat/test-layer.r0000644000177400001440000000341412771313513017305 0ustar murdochuserscontext("Layer") # Parameters -------------------------------------------------------------- test_that("aesthetics go in aes_params", { l <- geom_point(size = "red") expect_equal(l$aes_params, list(size = "red")) }) test_that("unknown params create warning", { expect_warning(geom_point(blah = "red"), "unknown parameters") }) test_that("unknown aesthietcs create warning", { expect_warning(geom_point(aes(blah = "red")), "unknown aesthetics") }) # Calculated aesthetics --------------------------------------------------- test_that("Bare name surround by .. is calculated", { expect_true(is_calculated_aes(aes(..density..))) expect_true(is_calculated_aes(aes(..DENSITY..))) expect_false(is_calculated_aes(aes(a..x..b))) }) test_that("Calling using variable surround by .. is calculated", { expect_true(is_calculated_aes(aes(mean(..density..)))) expect_true(is_calculated_aes(aes(mean(..DENSITY..)))) expect_false(is_calculated_aes(aes(mean(a..x..b)))) }) test_that("strip_dots remove dots around calculated aesthetics", { expect_equal(strip_dots(aes(..density..))$x, quote(density)) expect_equal(strip_dots(aes(mean(..density..)))$x, quote(mean(density))) expect_equal(strip_dots(aes(sapply(..density.., function(x) mean(x)))$x), quote(sapply(density, function(x) mean(x)))) }) # Data extraction --------------------------------------------------------- test_that("layer_data returns a data.frame", { l <- geom_point() expect_equal(l$layer_data(mtcars), mtcars) l <- geom_point(data = head(mtcars)) expect_equal(l$layer_data(mtcars), head(mtcars)) l <- geom_point(data = head) expect_equal(l$layer_data(mtcars), head(mtcars)) l <- geom_point(data = nrow) expect_error(l$layer_data(mtcars), "Data function must return a data.frame") }) ggplot2/tests/testthat/test-add.R0000644000177400001440000000027512755074127016672 0ustar murdochuserscontext("Adding plot elements") test_that("Mapping class is preserved when adding uneval objects", { p <- ggplot(mtcars) + aes(wt, mpg) expect_identical(class(p$mapping), "uneval") }) ggplot2/tests/testthat/test-aes-setting.r0000644000177400001440000000252012654700727020420 0ustar murdochuserscontext("Aes - setting values") test_that("Aesthetic parameters must match length of data", { df <- data.frame(x = 1:5, y = 1:5) p <- ggplot(df, aes(x, y)) set_colours <- function(colours) { layer_data(p + geom_point(colour = colours)) } set_colours("red") expect_error(set_colours(rep("red", 2)), "must be either length 1") expect_error(set_colours(rep("red", 3)), "must be either length 1") expect_error(set_colours(rep("red", 4)), "must be either length 1") set_colours(rep("red", 5)) }) test_that("alpha affects only fill colour of solid geoms", { df <- data.frame(x = 1:2, y = 1) poly <- ggplot(df, aes(x = x, y)) + geom_polygon(fill = "red", colour = "red", alpha = 0.5) rect <- ggplot(df, aes(xmin = x, xmax = x + 1, ymin = 1, ymax = y + 1)) + geom_rect(fill = "red", colour = "red", alpha = 0.5) ribb <- ggplot(df, aes(x = x, ymin = 1, ymax = y + 1)) + geom_ribbon(fill = "red", colour = "red", alpha = 0.5) expect_equal(layer_grob(poly)[[1]]$gp$col[[1]], "red") expect_equal(layer_grob(rect)[[1]]$gp$col[[1]], "red") expect_equal(layer_grob(ribb)[[1]]$children[[1]]$gp$col[[1]], "red") expect_equal(layer_grob(poly)[[1]]$gp$fill[[1]], "#FF000080") expect_equal(layer_grob(rect)[[1]]$gp$fill[[1]], "#FF000080") expect_equal(layer_grob(ribb)[[1]]$children[[1]]$gp$fill[[1]], "#FF000080") }) ggplot2/tests/testthat/test-stats.r0000644000177400001440000000075412746412407017337 0ustar murdochuserscontext("Stats") test_that("plot succeeds even if some computation fails", { df <- data.frame(x = 1:2, y = 1) p1 <- ggplot(df, aes(x, y)) + geom_point() b1 <- ggplot_build(p1) expect_equal(length(b1$data), 1) p2 <- p1 + geom_smooth() expect_warning(b2 <- ggplot_build(p2), "Computation failed") expect_equal(length(b2$data), 2) }) test_that("error message is thrown when aesthetics are missing", { p <- ggplot(mtcars) + stat_bin() expect_error(ggplot_build(p), "x$") }) ggplot2/tests/testthat/test-stat-density.R0000644000177400001440000000067212536601134020562 0ustar murdochuserscontext("stat_density") # and stat_ydensity test_that("compute_density succeeds when variance is zero", { dens <- compute_density(rep(0, 10), NULL, from = 0.5, to = 0.5) expect_equal(dens$n, rep(10, 512)) }) test_that("compute_density returns useful df when <3 values", { dens <- compute_density(c(1, 2), NULL, from = 0, to = 0) expect_equal(nrow(dens), 2) expect_equal(names(dens), c("x", "density", "scaled", "count", "n")) }) ggplot2/tests/testthat/test-geom-text.R0000644000177400001440000000150112540117275020036 0ustar murdochuserscontext("geom_text") # compute_just ------------------------------------------------------------ test_that("vertical and horizontal positions are equivalent", { horiz <- compute_just(c("left", "middle", "right"), c(0, 0, 0)) vert <- compute_just(c("bottom", "center", "top"), c(0, 0, 0)) expect_equal(horiz, vert) }) test_that("inward moves text towards center", { expect_equal( compute_just(c("inward", "inward", "inward"), c(0, 0.5, 1)), c(0, 0.5, 1.0) ) }) test_that("outwards moves text away from center", { expect_equal( compute_just(c("outward", "outward", "outward"), c(0, 0.5, 1)), c(1.0, 0.5, 0) ) }) test_that("inward points close to center are centered", { expect_equal( compute_just(c("inward", "inward", "inward"), c(0.5 - 1e-3, 0.5, 0.5 + 1e-3)), c(0.5, 0.5, 0.5) ) }) ggplot2/tests/testthat/test-geom-rule.R0000644000177400001440000000216312565147416020035 0ustar murdochuserscontext("geom_rule") # tests for geom_vline, geom_hline & geom_abline df <- data.frame(x = 1:3, y = 3:1) p <- ggplot(df, aes(x, y)) + geom_point() p_col <- ggplot(df, aes(x, y, colour = factor(x))) + geom_point() test_that("setting parameters makes one row df", { b <- p + geom_hline(yintercept = 1.5) expect_equal(layer_data(b, 2)$yintercept, 1.5) b <- p + geom_vline(xintercept = 1.5) expect_equal(layer_data(b, 2)$xintercept, 1.5) b <- p + geom_abline() expect_equal(layer_data(b, 2)$intercept, 0) expect_equal(layer_data(b, 2)$slope, 1) b <- p + geom_abline(slope = 0, intercept = 1) expect_equal(layer_data(b, 2)$intercept, 1) expect_equal(layer_data(b, 2)$slope, 0) }) test_that("setting aesthetics generates one row for each input row", { b <- p + geom_hline(aes(yintercept = 1.5)) expect_equal(layer_data(b, 2)$yintercept, rep(1.5, 3)) b <- p + geom_vline(aes(xintercept = 1.5)) expect_equal(layer_data(b, 2)$xintercept, rep(1.5, 3)) b <- p + geom_abline(aes(slope = 0, intercept = 1)) expect_equal(layer_data(b, 2)$intercept, rep(1, 3)) expect_equal(layer_data(b, 2)$slope, rep(0, 3)) }) ggplot2/tests/testthat/test-facet-map.r0000644000177400001440000001252312771277527020045 0ustar murdochuserscontext("Facetting (mapping)") df <- expand.grid(a = 1:2, b = 1:2) df_a <- unique(df["a"]) df_b <- unique(df["b"]) df_c <- unique(data.frame(c = 1)) test_that("two col cases with no missings adds single extra column", { facet <- facet_grid(cyl~vs) layout <- facet$train(list(mtcars)) loc <- facet$map(mtcars, layout) expect_equal(nrow(loc), nrow(mtcars)) expect_equal(ncol(loc), ncol(mtcars) + 1) match <- unique(loc[c("cyl", "vs", "PANEL")]) expect_equal(nrow(match), 5) }) test_that("margins add extra data", { facet <- facet_grid(a~b, margins = "b") layout <- facet$train(list(df)) loc <- facet$map(df, layout) expect_equal(nrow(loc), nrow(df) * 2) }) test_that("grid: missing facet columns are duplicated", { facet <- facet_grid(a~b) layout <- facet$train(list(df)) loc_a <- facet$map(df_a, layout) expect_equal(nrow(loc_a), 4) expect_equal(loc_a$PANEL, factor(1:4)) loc_b <- facet$map(df_b, layout) expect_equal(nrow(loc_b), 4) expect_equal(loc_b$PANEL, factor(1:4)) loc_c <- facet$map(df_c, layout) expect_equal(nrow(loc_c), 4) expect_equal(loc_c$PANEL, factor(1:4)) }) test_that("wrap: missing facet columns are duplicated", { facet <- facet_wrap(~a+b, ncol = 1) layout <- facet$train(list(df)) loc_a <- facet$map(df_a, layout) expect_equal(nrow(loc_a), 4) expect_equal(loc_a$PANEL, factor(1:4)) expect_equal(loc_a$a, c(1, 1, 2, 2)) loc_b <- facet$map(df_b, layout) expect_equal(nrow(loc_b), 4) expect_equal(loc_b$PANEL, factor(1:4)) loc_c <- facet$map(df_c, layout) expect_equal(nrow(loc_c), 4) expect_equal(loc_c$PANEL, factor(1:4)) }) # Missing behaviour ---------------------------------------------------------- a3 <- data.frame( # a = c(1:3, NA), Not currently supported b = factor(c(1:3, NA)), c = factor(c(1:3, NA), exclude = NULL) ) test_that("wrap: missing values located correctly", { facet <- facet_wrap(~b, ncol = 1) layout_b <- facet$train(list(a3)) loc_b <- facet$map(data.frame(b = NA), layout_b) expect_equal(as.character(loc_b$PANEL), "4") facet <- facet_wrap(~c, ncol = 1) layout_c <- facet$train(list(a3)) loc_c <- facet$map(data.frame(c = NA), layout_c) expect_equal(as.character(loc_c$PANEL), "4") }) test_that("grid: missing values located correctly", { facet <- facet_grid(b~.) layout_b <- facet$train(list(a3)) loc_b <- facet$map(data.frame(b = NA), layout_b) expect_equal(as.character(loc_b$PANEL), "4") facet <- facet_grid(c~.) layout_c <- facet$train(list(a3)) loc_c <- facet$map(data.frame(c = NA), layout_c) expect_equal(as.character(loc_c$PANEL), "4") }) # Facet order ---------------------------------------------------------------- get_layout <- function(p) ggplot_build(p)$layout$panel_layout # Data with factor f with levels CBA d <- data.frame(x = 1:9, y = 1:9, fx = factor(rep(letters[1:3], each = 3), levels = letters[3:1]), fy = factor(rep(LETTERS[1:3], each = 3), levels = LETTERS[3:1])) # Data with factor f with only level B d2 <- data.frame(x = 1:9, y = 2:10, fx = "a", fy = "B") test_that("grid: facet order follows default data frame order", { # Facets should be in order: # CBA for rows 1:3 # cba for cols 1:3 lay <- get_layout(ggplot(d, aes(x, y)) + facet_grid(fy ~ fx) + geom_point()) expect_equal(as.character(lay$fy), c("C","B","A")[lay$ROW]) expect_equal(as.character(lay$fx), c("c","b","a")[lay$COL]) # When adding d2, facets should still be in order: # CBA for rows 1:3 # cba for cols 1:3 lay <- get_layout(ggplot(d, aes(x, y)) + facet_grid(fy ~ fx) + geom_blank(data = d2) + geom_point()) expect_equal(as.character(lay$fy), c("C","B","A")[lay$ROW]) expect_equal(as.character(lay$fx), c("c","b","a")[lay$COL]) # With no default data: should search each layer in order # BCA for rows 1:3 # acb for cols 1:3 lay <- get_layout(ggplot(mapping = aes(x, y)) + facet_grid(fy ~ fx) + geom_blank(data = d2) + geom_point(data = d)) expect_equal(as.character(lay$fy), c("B","C","A")[lay$ROW]) expect_equal(as.character(lay$fx), c("a","c","b")[lay$COL]) # Same as previous, but different layer order. # CBA for rows 1:3 # cba for cols 1:3 lay <- get_layout(ggplot(mapping = aes(x, y)) + facet_grid(fy ~ fx) + geom_point(data = d) + geom_blank(data = d2)) expect_equal(as.character(lay$fy), c("C","B","A")[lay$ROW]) expect_equal(as.character(lay$fx), c("c","b","a")[lay$COL]) }) test_that("wrap: facet order follows default data frame order", { # Facets should be in order: # cba for panels 1:3 lay <- get_layout(ggplot(d, aes(x, y)) + facet_wrap(~fx) + geom_point()) expect_equal(as.character(lay$fx), c("c","b","a")[lay$PANEL]) # When adding d2, facets should still be in order: # cba for panels 1:3 lay <- get_layout(ggplot(d, aes(x, y)) + facet_wrap(~fx) + geom_blank(data = d2) + geom_point()) expect_equal(as.character(lay$fx), c("c","b","a")[lay$PANEL]) # With no default data: should search each layer in order # acb for panels 1:3 lay <- get_layout(ggplot(mapping = aes(x, y)) + facet_wrap(~fx) + geom_blank(data = d2) + geom_point(data = d)) expect_equal(as.character(lay$fx), c("a","c","b")[lay$PANEL]) # Same as previous, but different layer order. # cba for panels 1:3 lay <- get_layout(ggplot(mapping = aes(x, y)) + facet_wrap(~fx) + geom_point(data = d) + geom_blank(data = d2)) expect_equal(as.character(lay$fx), c("c","b","a")[lay$PANEL]) }) ggplot2/tests/testthat/test-munch.r0000644000177400001440000000417412556122066017311 0ustar murdochuserscontext("Munch") test_that("interp works", { single_interp_test <- function(start, end, n) { i <- interp(start, end, n) info <- paste0("start: ", start, "; end: ", end, "; n: ", n) expect_equal(length(i), n, info = info) expect_true(start %in% i, info = info) expect_false(end %in% i, info = info) expect_true(all(i >= start), info = info) expect_true(all(i <= end), info = info) } single_interp_test(0, 1, 1) single_interp_test(0, 1, 2) single_interp_test(0, 1, 7) single_interp_test(-23, 56, 1) single_interp_test(-23, 56, 4) single_interp_test(31.276, 34.443, 1) single_interp_test(31.276, 34.443, 100) }) test_that("munch_data works", { single_munch_test <- function(data, dist=NULL, segment_length = 0.01) { md <- munch_data(data, dist, segment_length) # all rows of dat are in md expect_equal(nrow(merge(md, dat)), nrow(dat)) expect_true(nrow(md) >= nrow(dat)) } dat <- data.frame(x = c(0, 60, 30, 20, 40, 45), y = c(1, 1, 2, 2, 2, 2), group = c(1L, 1L, 1L, 2L, 2L, 2L)) dist <- dist_euclidean(dat$x, dat$y) dist[dat$group[-1] != dat$group[-nrow(dat)]] <- NA single_munch_test(dat, dist) single_munch_test(dat, dist, segment_length = 10) single_munch_test(dat, dist, segment_length = 100) dist <- coord_polar(theta = "x")$distance(dat$x, dat$y, list(r.range = range(c(0,dat$y)), theta.range = range(dat$x))) dist[dat$group[-1] != dat$group[-nrow(dat)]] <- NA single_munch_test(dat, dist) single_munch_test(dat, dist, segment_length = 10) single_munch_test(dat, dist, segment_length = 100) dist <- coord_polar(theta = "y")$distance(dat$x, dat$y, list(r.range = range(c(0,dat$x)), theta.range = range(dat$y))) dist[dat$group[-1] != dat$group[-nrow(dat)]] <- NA single_munch_test(dat, dist) single_munch_test(dat, dist, segment_length = 10) single_munch_test(dat, dist, segment_length = 100) }) ggplot2/tests/testthat/test-empty-data.r0000644000177400001440000000655312651677766020271 0ustar murdochuserscontext('Empty data') df0 <- data.frame(mpg = numeric(0), wt = numeric(0), am = numeric(0), cyl = numeric(0)) test_that("layers with empty data are silently omitted", { # Empty data (no visible points) d <- ggplot(df0, aes(mpg,wt)) + geom_point() expect_equal(nrow(layer_data(d)), 0) d <- ggplot() + geom_point(data = df0, aes(mpg,wt)) expect_equal(nrow(layer_data(d)), 0) # Regular mtcars data, x=mpg, y=wt, normal points and points from empty data frame d <- ggplot(mtcars, aes(mpg, wt)) + geom_point() + geom_point(data = df0) expect_equal(nrow(layer_data(d, 1)), nrow(mtcars)) expect_equal(nrow(layer_data(d, 2)), 0) # Regular mtcars data, but points only from empty data frame d <- ggplot(mtcars, aes(mpg, wt)) + geom_point(data = df0) expect_equal(nrow(layer_data(d, 1)), 0) }) test_that("plots with empty data and vectors for aesthetics work", { d <- ggplot(NULL, aes(1:5, 1:5)) + geom_point() expect_equal(nrow(layer_data(d)), 5) d <- ggplot(data.frame(), aes(1:5, 1:5)) + geom_point() expect_equal(nrow(layer_data(d)), 5) d <- ggplot() + geom_point(aes(1:5, 1:5)) expect_equal(nrow(layer_data(d)), 5) }) test_that("layers with empty data are silently omitted with facet_wrap", { # Empty data, facet_wrap, throws error d <- ggplot(df0, aes(mpg, wt)) + geom_point() + facet_wrap(~cyl) expect_error(layer_data(d), "must have at least one value") d <- d + geom_point(data = mtcars) expect_equal(nrow(layer_data(d, 1)), 0) expect_equal(nrow(layer_data(d, 2)), nrow(mtcars)) }) test_that("layers with empty data are silently omitted with facet_grid", { d <- ggplot(df0, aes(mpg, wt)) + geom_point() + facet_grid(am ~ cyl) expect_error(layer_data(d), "must have at least one value") d <- d + geom_point(data = mtcars) expect_equal(nrow(layer_data(d, 1)), 0) expect_equal(nrow(layer_data(d, 2)), nrow(mtcars)) }) test_that("empty data overrides plot defaults", { # Should error when totally empty data frame because there's no x and y d <- ggplot(mtcars, aes(mpg, wt)) + geom_point() + geom_point(data = data.frame()) expect_error(layer_data(d), "not found") # No extra points when x and y vars don't exist but are set d <- ggplot(mtcars, aes(mpg, wt)) + geom_point() + geom_point(data = data.frame(), x = 20, y = 3) expect_equal(nrow(layer_data(d, 1)), nrow(mtcars)) expect_equal(nrow(layer_data(d, 2)), 0) # No extra points when x and y vars are empty, even when aesthetics are set d <- ggplot(mtcars, aes(mpg, wt)) + geom_point() + geom_point(data = df0, x = 20, y = 3) expect_equal(nrow(layer_data(d, 1)), nrow(mtcars)) expect_equal(nrow(layer_data(d, 2)), 0) }) test_that("layer inherits data from plot when data = NULL", { d <- ggplot(mtcars, aes(mpg, wt)) + geom_point(data = NULL) expect_equal(nrow(layer_data(d)), nrow(mtcars)) }) test_that("empty layers still generate one grob per panel", { df <- data.frame(x = 1:3, y = c("a", "b", "c")) d <- ggplot(df, aes(x, y)) + geom_point(data = df[0, ]) + geom_point() + facet_wrap(~y) expect_equal(length(layer_grob(d)), 3) }) test_that("missing layers generate one grob per panel", { df <- data.frame(x = 1:4, y = 1:2, g = 1:2) base <- ggplot(df, aes(x, y)) + geom_point(shape = NA, na.rm = TRUE) expect_equal(length(layer_grob(base)), 1) expect_equal(length(layer_grob(base + facet_wrap(~ g))), 2) }) ggplot2/tests/testthat/test-sanitise-dim.r0000644000177400001440000000313212540545060020552 0ustar murdochuserscontext("sanitise_dim") test_that("sanitise_dim returns NULL for zero-length inputs, with appropriate warnings", { expect_identical(sanitise_dim(NULL), NULL) n <- integer() y <- expect_identical(suppressWarnings(sanitise_dim(n)), NULL) expect_warning(sanitise_dim(n), "`n` has length zero and will be treated as NULL.") }) test_that("sanitise_dim returns the first element or NULL for non-positive integer inputs, with appropriate warnings", { n <- 1:2 expect_identical(suppressWarnings(sanitise_dim(n)), 1L) expect_warning(sanitise_dim(n), "Only the first value of `n` will be used.") n2 <- 0:1 expect_identical(suppressWarnings(sanitise_dim(n2)), NULL) expect_warning(sanitise_dim(n2), "Only the first value of `n2` will be used.") expect_warning(sanitise_dim(n2), "`n2` is missing or less than 1 and will be treated as NULL.") }) test_that("sanitise_dim returns a NULL for missing inputs, with appropriate warnings", { n <- NA_integer_ expect_identical(suppressWarnings(sanitise_dim(n)), NULL) expect_warning(sanitise_dim(n), "`n` is missing or less than 1 and will be treated as NULL.") }) test_that("sanitise_dim returns a positive integer or NULL for non-integer inputs, with appropriate warnings", { n <- 1.5 expect_identical(suppressWarnings(sanitise_dim(n)), 1L) expect_warning(sanitise_dim(n), "Coercing `n` to be an integer.") n2 <- 0.9999999 expect_identical(suppressWarnings(sanitise_dim(n2)), NULL) expect_warning(sanitise_dim(n2), "Coercing `n2` to be an integer.") expect_warning(sanitise_dim(n2), "`n2` is missing or less than 1 and will be treated as NULL.") }) ggplot2/tests/testthat/test-geom-freqpoly.R0000644000177400001440000000044112665061514020717 0ustar murdochuserscontext("freqpoly") test_that("can do frequency polygon with categorical x", { df <- data.frame(x = rep(letters[1:3], 3:1)) p <- ggplot(df, aes(x)) + geom_freqpoly(stat = "count") d <- layer_data(p) expect_is(d$x, "integer") expect_equal(d$x, 1:3) expect_equal(d$y, 3:1) }) ggplot2/tests/testthat/test-ggsave.R0000644000177400001440000000325312573545247017421 0ustar murdochuserscontext("ggsave") test_that("ggsave creates file", { path <- tempfile() on.exit(unlink(path)) p <- ggplot(mpg, aes(displ, hwy)) + geom_point() expect_false(file.exists(path)) ggsave(path, p, device = "pdf", width = 5, height = 5) expect_true(file.exists(path)) }) # plot_dim --------------------------------------------------------------- test_that("guesses and informs if dim not specified", { png(width = 10, height = 10, units = "in", res = 300) on.exit(capture.output(dev.off())) expect_message(out <- plot_dim(), "10 x 10") expect_equal(out, c(10, 10)) }) test_that("uses 7x7 if no graphics device open", { expect_equal(plot_dim(), c(7, 7)) }) test_that("warned about large plot unless limitsize = FALSE", { expect_error(plot_dim(c(50, 50)), "exceed 50 inches") expect_equal(plot_dim(c(50, 50), limitsize = FALSE), c(50, 50)) }) test_that("scale multiplies height & width", { expect_equal(plot_dim(c(10, 10), scale = 1), c(10, 10)) expect_equal(plot_dim(c(5, 5), scale = 2), c(10, 10)) }) # plot_dev --------------------------------------------------------------------- test_that("function passed back unchanged", { expect_equal(plot_dev(png), png) }) test_that("unknown device triggers error", { expect_error(plot_dev("xyz"), "Unknown graphics device") expect_error(plot_dev(NULL, "test.xyz"), "Unknown graphics device") }) test_that("text converted to function", { expect_identical(body(plot_dev("png"))[[1]], quote(grDevices::png)) expect_identical(body(plot_dev("pdf"))[[1]], quote(grDevices::pdf)) }) test_that("if device is NULL, guess from extension", { expect_identical(body(plot_dev(NULL, "test.png"))[[1]], quote(grDevices::png)) }) ggplot2/tests/testthat/test-stats-function.r0000644000177400001440000000163112650520260021144 0ustar murdochuserscontext("stat_function") test_that("uses scale limits, not data limits", { dat <- data.frame(x = c(0.1, 1:100)) dat$y <- dexp(dat$x) base <- ggplot(dat, aes(x, y)) + stat_function(fun = dexp) full <- base + scale_x_continuous(limits = c(0.1, 100)) + scale_y_continuous() ret <- layer_data(full) full_log <- base + scale_x_log10(limits = c(0.1, 100)) + scale_y_continuous() ret_log <- layer_data(full_log) expect_equal(ret$y[c(1, 101)], ret_log$y[c(1, 101)]) expect_equal(range(ret$x), c(0.1, 100)) expect_equal(range(ret_log$x), c(-1, 2)) expect_false(any(is.na(ret$y))) expect_false(any(is.na(ret_log$y))) }) test_that("works with discrete x", { dat <- data.frame(x = c("a", "b")) base <- ggplot(dat, aes(x, group = 1)) + stat_function(fun = as.numeric, geom = "point", n = 2) ret <- layer_data(base) expect_equal(ret$x, 1:2) expect_equal(ret$y, 1:2) }) ggplot2/tests/testthat/test-utilities.r0000644000177400001440000000433212771277527020222 0ustar murdochuserscontext("Utilities") test_that("finite.cases.data.frame", { # All finite -------------------------------------------------------------- expect_identical(finite.cases(data.frame(x = 4)), TRUE) # 1x1 expect_identical(finite.cases(data.frame(x = 4, y = 11)), TRUE) # 1x2 expect_identical(finite.cases(data.frame(x = 4:5)), c(TRUE, TRUE)) # 2x1 expect_identical(finite.cases(data.frame(x = 4:5, y = 11:12)), c(TRUE, TRUE)) # 2x2 # Has one NA -------------------------------------------------------------- expect_identical(finite.cases(data.frame(x = NA)), FALSE) # 1x1 expect_identical(finite.cases(data.frame(x = 4, y = NA)), FALSE) # 1x2 expect_identical(finite.cases(data.frame(x = c(4, NA))), c(TRUE, FALSE)) # 2x1 expect_identical(finite.cases(data.frame(x = c(4, NA), y = c(11, NA))), c(TRUE, FALSE)) # 2x2 expect_identical(finite.cases(data.frame(x = c(4, NA), y = c(NA, 12))), c(FALSE, FALSE)) # 2x2 expect_identical(finite.cases(data.frame(x = c(4, 5), y = c(NA, 12))), c(FALSE, TRUE)) # 2x2 # Testing NaN and Inf, using miscellaneous data shapes -------------------- expect_identical(finite.cases(data.frame(x = c(4, NaN))), c(TRUE, FALSE)) expect_identical(finite.cases(data.frame(x = Inf)), FALSE) expect_identical(finite.cases(data.frame(x = c(4, 5), y = c(-Inf, 12))), c(FALSE, TRUE)) }) test_that("add_group", { data <- data.frame(f=letters[7:9], x=1:3, y=4:6, group=c(1, -1, 1)) expect_true(has_groups(add_group(data[2:4]))) # explicit group column expect_true(has_groups(add_group(data[1:3]))) # discrete column expect_false(has_groups(add_group(data[2:3]))) # no group or discrete column }) test_that("find_args behaves correctly", { test_fun <- function(arg1, arg2 = FALSE, ...) { find_args(...) } # Missing args are removed expect_false("arg1" %in% names(test_fun())) # Ellipsis is not an element expect_false("..." %in% names(test_fun())) # Args are added expect_true(all(c("arg1", "arg2", "arg3") %in% names(test_fun(arg1 = 1, arg2 = 1, arg3 = 1)))) # Defaults are overwritten expect_true(test_fun(arg2 = TRUE)$arg2) }) ggplot2/tests/testthat/test-geom-tile.R0000644000177400001440000000065412651446071020021 0ustar murdochuserscontext("geom_tile") test_that("accepts width and height params", { df <- data.frame(x = c("a", "b"), y = c("a", "b")) out1 <- layer_data(ggplot(df, aes(x, y)) + geom_tile()) expect_equal(out1$xmin, c(0.5, 1.5)) expect_equal(out1$xmax, c(1.5, 2.5)) out2 <- layer_data(ggplot(df, aes(x, y)) + geom_tile(width = 0.5, height = 0.5)) expect_equal(out2$xmin, c(0.75, 1.75)) expect_equal(out2$xmax, c(1.25, 2.25)) }) ggplot2/tests/testthat/test-scales-breaks-labels.r0000644000177400001440000002060412620173071022144 0ustar murdochuserscontext("Scales: breaks and labels") test_that("labels match breaks, even when outside limits", { sc <- scale_y_continuous(breaks = 1:4, labels = 1:4, limits = c(1, 3)) expect_equal(sc$get_breaks(), c(1:3, NA)) expect_equal(sc$get_labels(), 1:4) expect_equal(sc$get_breaks_minor(), c(1, 1.5, 2, 2.5, 3)) }) test_that("labels must match breaks", { expect_error(scale_x_discrete(breaks = 1:3, labels = 1:2), "must have the same length") expect_error(scale_x_continuous(breaks = 1:3, labels = 1:2), "must have the same length") }) test_that("labels don't have to match null breaks", { expect_true(check_breaks_labels(breaks = 1:3, labels = NULL)) expect_true(check_breaks_labels(breaks = NULL, labels = 1:2)) }) test_that("labels don't have extra spaces", { labels <- c("a", "abc", "abcdef") sc1 <- scale_x_discrete(limits = labels) sc2 <- scale_fill_discrete(limits = labels) expect_equal(sc1$get_labels(), labels) expect_equal(sc2$get_labels(), labels) }) test_that("out-of-range breaks are dropped", { # Limits are explicitly specified, automatic labels sc <- scale_x_continuous(breaks = 1:5, limits = c(2, 4)) bi <- sc$break_info() expect_equal(bi$labels, as.character(2:4)) expect_equal(bi$major, c(0, 0.5, 1)) expect_equal(bi$major_source, 2:4) # Limits and labels are explicitly specified sc <- scale_x_continuous(breaks = 1:5, labels = letters[1:5], limits = c(2, 4)) bi <- sc$break_info() expect_equal(bi$labels, letters[2:4]) expect_equal(bi$major, c(0, 0.5, 1)) expect_equal(bi$major_source, 2:4) # Limits are specified, and all breaks are out of range sc <- scale_x_continuous(breaks = c(1,5), labels = letters[c(1,5)], limits = c(2, 4)) bi <- sc$break_info() expect_equal(length(bi$labels), 0) expect_equal(length(bi$major), 0) expect_equal(length(bi$major_source), 0) # limits aren't specified, automatic labels # limits are set by the data sc <- scale_x_continuous(breaks = 1:5) sc$train_df(data.frame(x = 2:4)) bi <- sc$break_info() expect_equal(bi$labels, as.character(2:4)) expect_equal(bi$major_source, 2:4) expect_equal(bi$major, c(0, 0.5, 1)) # Limits and labels are specified sc <- scale_x_continuous(breaks = 1:5, labels = letters[1:5]) sc$train_df(data.frame(x = 2:4)) bi <- sc$break_info() expect_equal(bi$labels, letters[2:4]) expect_equal(bi$major_source, 2:4) expect_equal(bi$major, c(0, 0.5, 1)) # Limits aren't specified, and all breaks are out of range of data sc <- scale_x_continuous(breaks = c(1,5), labels = letters[c(1,5)]) sc$train_df(data.frame(x = 2:4)) bi <- sc$break_info() expect_equal(length(bi$labels), 0) expect_equal(length(bi$major), 0) expect_equal(length(bi$major_source), 0) }) test_that("no minor breaks when only one break", { sc1 <- scale_x_discrete(limits = "a") sc2 <- scale_x_continuous(limits = 1) expect_equal(length(sc1$get_breaks_minor()), 0) expect_equal(length(sc2$get_breaks_minor()), 0) }) init_scale <- function(...) { sc <- scale_x_discrete(...) sc$train(factor(1:100)) expect_equal(length(sc$get_limits()), 100) sc } test_that("discrete labels match breaks", { sc <- init_scale(breaks = 0:5 * 10) expect_equal(length(sc$get_breaks()), 5) expect_equal(length(sc$get_labels()), 5) expect_equivalent(sc$get_labels(), sc$get_breaks()) sc <- init_scale(breaks = 0:5 * 10, labels = letters[1:6]) expect_equal(length(sc$get_breaks()), 5) expect_equal(length(sc$get_labels()), 5) expect_equal(sc$get_labels(), letters[2:6]) sc <- init_scale(breaks = 0:5 * 10, labels = function(x) paste(x, "-", sep = "")) expect_equal(sc$get_labels(), c("10-", "20-", "30-", "40-", "50-")) pick_5 <- function(x) sample(x, 5) sc <- init_scale(breaks = pick_5) expect_equal(length(sc$get_breaks()), 5) expect_equal(length(sc$get_labels()), 5) }) test_that("scale breaks with numeric log transformation", { sc <- scale_x_continuous(limits = c(1, 1e5), trans = log10_trans()) expect_equal(sc$get_breaks(), c(0, 2, 4)) # 1, 100, 10000 expect_equal(sc$get_breaks_minor(), c(0, 1, 2, 3, 4, 5)) }) test_that("continuous scales with no data have no breaks or labels", { sc <- scale_x_continuous() expect_equal(sc$get_breaks(), numeric()) expect_equal(sc$get_labels(), character()) expect_equal(sc$get_limits(), c(0, 1)) }) test_that("discrete scales with no data have no breaks or labels", { sc <- scale_x_discrete() expect_equal(sc$get_breaks(), numeric()) expect_equal(sc$get_labels(), character()) expect_equal(sc$get_limits(), c(0, 1)) }) test_that("suppressing breaks, minor_breask, and labels", { expect_equal(scale_x_continuous(breaks = NULL, limits = c(1, 3))$get_breaks(), NULL) expect_equal(scale_x_discrete(breaks = NULL, limits = c(1, 3))$get_breaks(), NULL) expect_equal(scale_x_continuous(minor_breaks = NULL, limits = c(1, 3))$get_breaks_minor(), NULL) expect_equal(scale_x_continuous(labels = NULL, limits = c(1, 3))$get_labels(), NULL) expect_equal(scale_x_discrete(labels = NULL, limits = c(1, 3))$get_labels(), NULL) # date, datetime lims <- as.Date(c("2000/1/1", "2000/2/1")) expect_equal(scale_x_date(breaks = NULL, limits = lims)$get_breaks(), NULL) # NA is defunct, should throw error expect_error(scale_x_date(breaks = NA, limits = lims)$get_breaks()) expect_equal(scale_x_date(labels = NULL, limits = lims)$get_labels(), NULL) expect_error(scale_x_date(labels = NA, limits = lims)$get_labels()) expect_equal(scale_x_date(minor_breaks = NULL, limits = lims)$get_breaks_minor(), NULL) expect_error(scale_x_date(minor_breaks = NA, limits = lims)$get_breaks_minor()) # date, datetime lims <- as.POSIXct(c("2000/1/1 0:0:0", "2010/1/1 0:0:0")) expect_equal(scale_x_datetime(breaks = NULL, limits = lims)$get_breaks(), NULL) expect_error(scale_x_datetime(breaks = NA, limits = lims)$get_breaks()) expect_equal(scale_x_datetime(labels = NULL, limits = lims)$get_labels(), NULL) expect_error(scale_x_datetime(labels = NA, limits = lims)$get_labels()) expect_equal(scale_x_datetime(minor_breaks = NULL, limits = lims)$get_breaks_minor(), NULL) expect_error(scale_x_datetime(minor_breaks = NA, limits = lims)$get_breaks_minor()) }) test_that("scale_breaks with explicit NA options (deprecated)", { # NA is defunct, should throw error # X sxc <- scale_x_continuous(breaks = NA) sxc$train(1:3) expect_error(sxc$get_breaks()) expect_error(sxc$get_breaks_minor()) # Y syc <- scale_y_continuous(breaks = NA) syc$train(1:3) expect_error(syc$get_breaks()) expect_error(syc$get_breaks_minor()) # Alpha sac <- scale_alpha_continuous(breaks = NA) sac$train(1:3) expect_error(sac$get_breaks()) # Size ssc <- scale_size_continuous(breaks = NA) ssc$train(1:3) expect_error(ssc$get_breaks()) # Fill sfc <- scale_fill_continuous(breaks = NA) sfc$train(1:3) expect_error(sfc$get_breaks()) # Colour scc <- scale_colour_continuous(breaks = NA) scc$train(1:3) expect_error(scc$get_breaks()) }) test_that("breaks can be specified by names of labels", { labels <- setNames(LETTERS[1:4], letters[1:4]) s <- scale_x_discrete(limits = letters[1:4], labels = labels) expect_equal(as.vector(s$get_breaks()), letters[1:4]) expect_equal(as.vector(s$get_labels()), LETTERS[1:4]) s <- scale_x_discrete(limits = letters[1:4], labels = rev(labels)) expect_equal(as.vector(s$get_breaks()), letters[1:4]) expect_equal(as.vector(s$get_labels()), LETTERS[1:4]) s <- scale_x_discrete(limits = letters[1:4], labels = labels[1:2]) expect_equal(as.vector(s$get_breaks()), letters[1:4]) expect_equal(as.vector(s$get_labels()), c("A", "B", "c", "d")) s <- scale_x_discrete(limits = letters[1:4], labels = labels[3:4]) expect_equal(as.vector(s$get_breaks()), letters[1:4]) expect_equal(as.vector(s$get_labels()), c("a", "b", "C", "D")) s <- scale_x_discrete(limits = letters[1:3], labels = labels) expect_equal(as.vector(s$get_breaks()), letters[1:3]) expect_equal(as.vector(s$get_labels()), LETTERS[1:3]) }) test_that("only finite or NA values for breaks for transformed scales (#871)", { sc <- scale_y_continuous(limits = c(0.01, 0.99), trans = "probit", breaks = seq(0, 1, 0.2)) breaks <- sc$get_breaks() expect_true(all(is.finite(breaks) | is.na(breaks))) }) test_that("minor breaks are transformed by scales", { sc <- scale_y_continuous(limits = c(1, 100), trans = "log10", minor_breaks = c(1, 10, 100)) expect_equal(sc$get_breaks_minor(), c(0, 1, 2)) }) ggplot2/tests/testthat/test-facet-layout.r0000644000177400001440000001021712771277527020603 0ustar murdochuserscontext("Facetting (layout)") a <- data.frame(a = c(1, 1, 2, 2), b = c(1, 2, 1, 1)) b <- data.frame(a = 3) c <- data.frame(b = 3) empty <- data.frame() test_that("grid: single row and single col equivalent", { row <- facet_grid(a~.)$train(list(a)) col <- facet_grid(.~a)$train(list(a)) expect_equal(row$ROW, 1:2) expect_equal(row$ROW, col$COL) expect_equal(row[c("PANEL", "a")], col[c("PANEL", "a")]) row <- facet_grid(a~.)$train(list(a, b)) col <- facet_grid(.~a)$train(list(a, b)) expect_equal(row$ROW, 1:3) expect_equal(row$ROW, col$COL) expect_equal(row[c("PANEL", "a")], col[c("PANEL", "a")]) }) test_that("grid: includes all combinations", { d <- data.frame(a = c(1, 2), b = c(2, 1)) all <- facet_grid(a~b)$train(list(d)) expect_equal(nrow(all), 4) }) test_that("wrap and grid equivalent for 1d data", { rowg <- facet_grid(a~.)$train(list(a)) roww <- facet_wrap(~a, ncol = 1)$train(list(a)) expect_equal(roww, rowg) colg <- facet_grid(.~a)$train(list(a)) colw <- facet_wrap(~a, nrow = 1)$train(list(a)) expect_equal(colw, colg) }) test_that("grid: crossed rows/cols create no more combinations than necessary", { facet <- facet_grid(a~b) facet$params$plot_env <- emptyenv() one <- facet$train(list(a)) expect_equal(nrow(one), 4) one_a <- facet$train(list(a, empty)) expect_equal(nrow(one_a), 4) two <- facet$train(list(a, b)) expect_equal(nrow(two), 4 + 2) three <- facet$train(list(a, b, c)) expect_equal(nrow(three), 9) four <- facet$train(list(b, c)) expect_equal(nrow(four), 1) }) test_that("grid: nested rows/cols create no more combinations than necessary", { one <- facet_grid(drv+cyl~.)$train(list(mpg)) expect_equal(one$PANEL, factor(1:9)) expect_equal(one$ROW, 1:9) }) test_that("grid: margins add correct combinations", { one <- facet_grid(a~b, margins = TRUE)$train(list(a)) expect_equal(nrow(one), 4 + 2 + 2 + 1) }) test_that("wrap: as.table reverses rows", { one <- facet_wrap(~a, ncol = 1, as.table = FALSE)$train(list(a)) expect_equal(one$ROW, c(2, 1)) two <- facet_wrap(~a, nrow = 1, as.table = FALSE)$train(list(a)) expect_equal(two$ROW, c(1, 1)) }) test_that("grid: as.table reverses rows", { one <- facet_grid(a~., as.table = FALSE)$train(list(a)) expect_equal(as.character(one$a), c("2", "1")) two <- facet_grid(a~., as.table = TRUE)$train(list(a)) expect_equal(as.character(two$a), c("1", "2")) }) # Drop behaviour ------------------------------------------------------------- a2 <- data.frame( a = factor(1:3, levels = 1:4), b = factor(1:3, levels = 4:1) ) test_that("wrap: drop = FALSE preserves unused levels", { wrap_a <- facet_wrap(~a, drop = FALSE)$train(list(a2)) expect_equal(nrow(wrap_a), 4) expect_equal(as.character(wrap_a$a), as.character(1:4)) wrap_b <- facet_wrap(~b, drop = FALSE)$train(list(a2)) expect_equal(nrow(wrap_b), 4) expect_equal(as.character(wrap_b$b), as.character(4:1)) }) test_that("grid: drop = FALSE preserves unused levels", { grid_a <- facet_grid(a~., drop = FALSE)$train(list(a2)) expect_equal(nrow(grid_a), 4) expect_equal(as.character(grid_a$a), as.character(1:4)) grid_b <- facet_grid(b~., drop = FALSE)$train(list(a2)) expect_equal(nrow(grid_b), 4) expect_equal(as.character(grid_b$b), as.character(4:1)) grid_ab <- facet_grid(a~b, drop = FALSE)$train(list(a2)) expect_equal(nrow(grid_ab), 16) expect_equal(as.character(grid_ab$a), as.character(rep(1:4, each = 4))) expect_equal(as.character(grid_ab$b), as.character(rep(4:1, 4))) }) # Missing behaviour ---------------------------------------------------------- a3 <- data.frame( a = c(1:3, NA), b = factor(c(1:3, NA)), c = factor(c(1:3, NA), exclude = NULL) ) test_that("missing values get a panel", { wrap_a <- facet_wrap(~a)$train(list(a3)) wrap_b <- facet_wrap(~b)$train(list(a3)) wrap_c <- facet_wrap(~c)$train(list(a3)) grid_a <- facet_grid(a~.)$train(list(a3)) grid_b <- facet_grid(b~.)$train(list(a3)) grid_c <- facet_grid(c~.)$train(list(a3)) expect_equal(nrow(wrap_a), 4) expect_equal(nrow(wrap_b), 4) expect_equal(nrow(wrap_c), 4) expect_equal(nrow(grid_a), 4) expect_equal(nrow(grid_b), 4) expect_equal(nrow(grid_c), 4) }) ggplot2/tests/testthat/test-position-stack.R0000644000177400001440000000274712776710015021113 0ustar murdochuserscontext("position-stack") test_that("data is sorted prior to stacking", { df <- data.frame( x = rep(c(1:10), 3), var = rep(c("a", "b", "c"), 10), y = round(runif(30, 1, 5)) ) p <- ggplot(df, aes(x = x, y = y, fill = var)) + geom_area(position = "stack") dat <- layer_data(p) expect_true(all(dat$group == 3:1)) }) test_that("negative and positive values are handled separately", { df <- data.frame( x = c(1,1,1,2,2), g = c(1,2,3,1,2), y = c(1,-1,1,2,-3) ) p <- ggplot(df, aes(x, y, fill = factor(g))) + geom_col() dat <- layer_data(p) expect_equal(dat$ymin[dat$x == 1], c(-1, 0, 1)) expect_equal(dat$ymax[dat$x == 1], c(0, 1, 2)) expect_equal(dat$ymin[dat$x == 2], c(-3, 0)) expect_equal(dat$ymax[dat$x == 2], c(0, 2)) }) test_that("can request reverse stacking", { df <- data.frame( y = c(-2, 2, -1, 1), g = c("a", "a", "b", "b") ) p <- ggplot(df, aes(1, y, fill = g)) + geom_col(position = position_stack(reverse = TRUE)) dat <- layer_data(p) expect_equal(dat$ymin, c(-2, -3, 0, 2)) }) test_that("data with no extent is stacked correctly", { df = data.frame( x = c(1, 1), y = c(-40, -75), group = letters[1:2] ) base <- ggplot(df, aes(x, y, group = group)) p0 <- base + geom_text(aes(label = y), position = position_stack(vjust = 0)) p1 <- base + geom_text(aes(label = y), position = position_stack(vjust = 1)) expect_equal(layer_data(p0)$y, c(-75, -115)) expect_equal(layer_data(p1)$y, c(0, -75)) }) ggplot2/tests/testthat/test-stat-density2d.R0000644000177400001440000000103112633013511020770 0ustar murdochuserscontext("stat_density_2d") test_that("uses scale limits, not data limits", { base <- ggplot(mtcars, aes(wt, mpg)) + stat_density_2d() + scale_x_continuous(limits = c(1, 6)) + scale_y_continuous(limits = c(5, 40)) ret <- layer_data(base) # Check that the contour data goes beyond data range. # The specific values below are sort of arbitrary; but they go beyond the range # of the data expect_true(min(ret$x) < 1.2) expect_true(max(ret$x) > 5.8) expect_true(min(ret$y) < 8) expect_true(max(ret$y) > 35) }) ggplot2/tests/testthat/test-range.r0000644000177400001440000000065212556523035017271 0ustar murdochuserscontext("range") test_that("continuous ranges expands as expected", { r <- continuous_range() r$train(1) expect_equal(r$range, c(1, 1)) r$train(10) expect_equal(r$range, c(1, 10)) }) test_that("discrete ranges expands as expected", { r <- discrete_range() r$train("a") expect_equal(r$range, "a") r$train("b") expect_equal(r$range, c("a", "b")) r$train(letters) expect_equal(r$range, letters) }) ggplot2/tests/testthat/test-grid-utils.R0000644000177400001440000000026612651671745020231 0ustar murdochuserscontext("Grid utilites") test_that("width_cm and height_cm work with unit arithmetic", { x <- 2 * unit(1, "cm") expect_equal(width_cm(x), 2) expect_equal(height_cm(x), 2) }) ggplot2/tests/testthat/test-facet-strips.r0000644000177400001440000000526112771277527020615 0ustar murdochuserscontext("Facet Strips") strip_layout <- function(p) { data <- ggplot_build(p) plot <- data$plot layout <- data$layout data <- data$data theme <- plot_theme(plot) geom_grobs <- Map(function(l, d) l$draw_geom(d, layout, plot$coordinates), plot$layers, data) facet <- layout$render(geom_grobs, data, plot$coordinates, theme, plot$labels) layout <- facet$layout strip_layout <- layout[grepl("^strip", layout$name), 1:4] as.list(strip_layout) } p <- ggplot(mtcars, aes(disp, drat)) + geom_point() test_that("facet_wrap() builds correct output", { wrap <- p + facet_wrap(~cyl) wrap_expected <- list( t = c(3, 3, 3), l = c(3, 7, 11), b = c(3, 3, 3), r = c(3, 7, 11) ) expect_equal(strip_layout(wrap), wrap_expected) }) test_that("facet_wrap() switches to 'bottom'", { wrap_b <- p + facet_wrap(~cyl, strip.position = "bottom") wrap_b_expected <- list( t = c(4, 4, 4), l = c(3, 7, 11), b = c(4, 4, 4), r = c(3, 7, 11) ) expect_equal(strip_layout(wrap_b), wrap_b_expected) }) test_that("facet_wrap() switches to 'left'", { wrap_l <- p + facet_wrap(~cyl, strip.position = "left") wrap_l_expected <- list( t = c(3, 3, 3), l = c(13, 8, 3), b = c(3, 3, 3), r = c(13, 8, 3) ) expect_equal(strip_layout(wrap_l), wrap_l_expected) }) test_that("facet_wrap() switches to 'right'", { wrap_r <- p + facet_wrap(~cyl, strip.position = "right") wrap_r_expected <- list( t = c(3, 3, 3), l = c(14, 9, 4), b = c(3, 3, 3), r = c(14, 9, 4) ) expect_equal(strip_layout(wrap_r), wrap_r_expected) }) test_that("facet_grid() builds correct output", { grid <- p + facet_grid(~cyl) grid_expected <- list( t = c(3, 3, 3), l = c(3, 5, 7), b = c(3, 3, 3), r = c(3, 5, 7) ) expect_equal(strip_layout(grid), grid_expected) }) test_that("facet_grid() switches to 'x'", { grid_x <- p + facet_grid(am ~ cyl, switch = "x") grid_x_expected <- list( t = c(6, 6, 6, 3, 5), l = c(3, 5, 7, 8, 8), b = c(6, 6, 6, 3, 5), r = c(3, 5, 7, 8, 8) ) expect_equal(strip_layout(grid_x), grid_x_expected) }) test_that("facet_grid() switches to 'y'", { grid_y <- p + facet_grid(am ~ cyl, switch = "y") grid_y_expected <- list( t = c(3, 3, 3, 4, 6), l = c(4, 6, 8, 3, 3), b = c(3, 3, 3, 4, 6), r = c(4, 6, 8, 3, 3) ) expect_equal(strip_layout(grid_y), grid_y_expected) }) test_that("facet_grid() switches to both 'x' and 'y'", { grid_xy <- p + facet_grid(am ~ cyl, switch = "both") grid_xy_expected <- list( t = c(6, 6, 6, 3, 5), l = c(4, 6, 8, 3, 3), b = c(6, 6, 6, 3, 5), r = c(4, 6, 8, 3, 3) ) expect_equal(strip_layout(grid_xy), grid_xy_expected) }) ggplot2/tests/testthat/test-geom-hex.R0000644000177400001440000000054112771277527017656 0ustar murdochuserscontext("geom_hex") test_that("density and value summaries available", { df <- data.frame(x = c(1, 1, 1, 2), y = c(1, 1, 1, 2)) base <- ggplot(df, aes(x, y)) + geom_hex() out <- layer_data(base) expect_equal(nrow(out), 2) expect_equal(out$density, c(0.75, 0.25), tolerance = 1e-7) expect_equal(out$count, c(3, 1), tolerance = 1e-7) }) ggplot2/tests/testthat/test-stat-bin.R0000644000177400001440000001117612775207621017664 0ustar murdochuserscontext("stat_bin/stat_count") test_that("stat_bin throws error when y aesthetic present", { dat <- data.frame(x = c("a", "b", "c"), y = c(1, 5, 10)) expect_error(ggplot_build(ggplot(dat, aes(x, y)) + stat_bin()), "must not be used with a y aesthetic.") expect_error( ggplot_build(ggplot(dat, aes(x)) + stat_bin(y = 5)), "StatBin requires a continuous x" ) }) test_that("bins specifies the number of bins", { df <- data.frame(x = 1:10) out <- function(x, ...) { layer_data(ggplot(df, aes(x)) + geom_histogram(...)) } expect_equal(nrow(out(bins = 2)), 2) expect_equal(nrow(out(bins = 100)), 100) }) test_that("geom_histogram defaults to pad = FALSE", { df <- data.frame(x = 1:3) out <- layer_data(ggplot(df, aes(x)) + geom_histogram(binwidth = 1)) expect_equal(out$count, c(1, 1, 1)) }) test_that("geom_freqpoly defaults to pad = TRUE", { df <- data.frame(x = 1:3) out <- layer_data(ggplot(df, aes(x)) + geom_freqpoly(binwidth = 1)) expect_equal(out$count, c(0, 1, 1, 1, 0)) }) test_that("can use breaks argument", { df <- data.frame(x = 1:3) out <- layer_data(ggplot(df, aes(x)) + geom_histogram(breaks = c(0, 1.5, 5))) expect_equal(out$count, c(1, 2)) }) test_that("fuzzy breaks used when cutting", { df <- data.frame(x = c(-1, -0.5, -0.4, 0)) p <- ggplot(df, aes(x)) + geom_histogram(binwidth = 0.1, boundary = 0.1, closed = "left") bins <- layer_data(p) %>% subset(count > 0) %>% .[1:5] expect_equal(bins$count, c(1, 1, 1, 1)) }) # Underlying binning algorithm -------------------------------------------- comp_bin <- function(df, ...) { plot <- ggplot(df, aes(x = x)) + stat_bin(...) layer_data(plot) } test_that("Closed left or right", { dat <- data.frame(x = c(0, 10)) res <- comp_bin(dat, binwidth = 10, pad = FALSE) expect_identical(res$count, c(1, 1)) res <- comp_bin(dat, binwidth = 10, boundary = 5, pad = FALSE) expect_identical(res$count, c(1, 1)) res <- comp_bin(dat, binwidth = 10, boundary = 0, pad = FALSE) expect_identical(res$count, 2) res <- comp_bin(dat, binwidth = 5, boundary = 0, pad = FALSE) expect_identical(res$count, c(1, 1)) res <- comp_bin(dat, binwidth = 10, pad = FALSE, closed = "left") expect_identical(res$count, c(1, 1)) res <- comp_bin(dat, binwidth = 10, boundary = 5, pad = FALSE, closed = "left") expect_identical(res$count, c(1, 1)) res <- comp_bin(dat, binwidth = 10, boundary = 0, pad = FALSE, closed = "left") expect_identical(res$count, c(2)) res <- comp_bin(dat, binwidth = 5, boundary = 0, pad = FALSE, closed = "left") expect_identical(res$count, c(1, 1)) }) test_that("Setting boundary and center", { # numeric df <- data.frame(x = c(0, 30)) # Error if both boundary and center are specified expect_error(comp_bin(df, boundary = 5, center = 0), "one of `boundary` and `center`") res <- comp_bin(df, binwidth = 10, boundary = 0, pad = FALSE) expect_identical(res$count, c(1, 0, 1)) expect_identical(res$xmin[1], 0) expect_identical(res$xmax[3], 30) res <- comp_bin(df, binwidth = 10, center = 0, pad = FALSE) expect_identical(res$count, c(1, 0, 0, 1)) expect_identical(res$xmin[1], df$x[1] - 5) expect_identical(res$xmax[4], df$x[2] + 5) }) test_that("weights are added", { df <- data.frame(x = 1:10, y = 1:10) p <- ggplot(df, aes(x = x, weight = y)) + geom_histogram(binwidth = 1) out <- layer_data(p) expect_equal(out$count, df$y) }) # stat_count -------------------------------------------------------------- test_that("stat_count throws error when y aesthetic present", { dat <- data.frame(x = c("a", "b", "c"), y = c(1, 5, 10)) expect_error( ggplot_build(ggplot(dat, aes(x, y)) + stat_count()), "must not be used with a y aesthetic.") expect_error( ggplot_build(ggplot(dat, aes(x)) + stat_count(y = 5)), "must not be used with a y aesthetic." ) }) test_that("stat_count preserves x order for continuous and discrete", { # x is numeric b <- ggplot_build(ggplot(mtcars, aes(carb)) + geom_bar()) expect_identical(b$data[[1]]$x, c(1,2,3,4,6,8)) expect_identical(b$data[[1]]$y, c(7,10,3,10,1,1)) # x is factor where levels match numeric order mtcars$carb2 <- factor(mtcars$carb) b <- ggplot_build(ggplot(mtcars, aes(carb2)) + geom_bar()) expect_identical(b$data[[1]]$x, 1:6) expect_identical(b$data[[1]]$y, c(7,10,3,10,1,1)) # x is factor levels differ from numeric order mtcars$carb3 <- factor(mtcars$carb, levels = c(4,1,2,3,6,8)) b <- ggplot_build(ggplot(mtcars, aes(carb3)) + geom_bar()) expect_identical(b$data[[1]]$x, 1:6) expect_identical(b$layout$panel_ranges[[1]]$x.labels, c("4","1","2","3","6","8")) expect_identical(b$data[[1]]$y, c(10,7,10,3,1,1)) }) ggplot2/tests/testthat/test-geom-violin.R0000644000177400001440000000233612775537331020372 0ustar murdochuserscontext("geom_violin") test_that("range is expanded", { df <- rbind( data.frame(x = "a", y = c(0, runif(10), 1)), data.frame(x = "b", y = c(0, runif(10), 2)) ) p <- ggplot(df, aes(1, y)) + geom_violin(trim = FALSE) + facet_grid(x ~ ., scales = "free") + coord_cartesian(expand = FALSE) expand_a <- stats::bw.nrd0(df$y[df$x == "a"]) * 3 expand_b <- stats::bw.nrd0(df$y[df$x == "b"]) * 3 expect_equal(layer_scales(p, 1)$y$dimension(), c(0 - expand_a, 1 + expand_a)) expect_equal(layer_scales(p, 2)$y$dimension(), c(0 - expand_b, 2 + expand_b)) }) # create_quantile_segment_frame ------------------------------------------------- test_that("create_quantile_segment_frame functions for 3 quantiles", { density.data <- data.frame(y = (1:256)/256, density = 1/256) # uniform density qs <- c(0.25, 0.5, 0.75) # 3 quantiles expect_equal(create_quantile_segment_frame(density.data, qs)$y, rep(qs, each = 2)) }) test_that("quantiles do not fail on zero-range data", { zero.range.data <- data.frame(y = rep(1,3)) p <- ggplot(zero.range.data) + geom_violin(aes(1, y), draw_quantiles = 0.5) # This should return without error and have length one expect_equal(length(layer_grob(p)), 1) }) ggplot2/NAMESPACE0000644000177400001440000002566013005674053013255 0ustar murdochusers# Generated by roxygen2: do not edit by hand S3method("$",ggproto) S3method("$",ggproto_parent) S3method("+",gg) S3method("[",uneval) S3method("[[",ggproto) S3method(as.character,uneval) S3method(as.list,ggproto) S3method(autoplot,default) S3method(drawDetails,zeroGrob) S3method(element_grob,element_blank) S3method(element_grob,element_line) S3method(element_grob,element_rect) S3method(element_grob,element_text) S3method(finite.cases,data.frame) S3method(format,ggproto) S3method(format,ggproto_method) S3method(fortify,"NULL") S3method(fortify,"function") S3method(fortify,Line) S3method(fortify,Lines) S3method(fortify,Polygon) S3method(fortify,Polygons) S3method(fortify,SpatialLinesDataFrame) S3method(fortify,SpatialPolygons) S3method(fortify,SpatialPolygonsDataFrame) S3method(fortify,cld) S3method(fortify,confint.glht) S3method(fortify,data.frame) S3method(fortify,default) S3method(fortify,glht) S3method(fortify,lm) S3method(fortify,map) S3method(fortify,summary.glht) S3method(ggplot,data.frame) S3method(ggplot,default) S3method(grid.draw,absoluteGrob) S3method(grid.draw,ggplot) S3method(grobHeight,absoluteGrob) S3method(grobHeight,zeroGrob) S3method(grobWidth,absoluteGrob) S3method(grobWidth,zeroGrob) S3method(grobX,absoluteGrob) S3method(grobY,absoluteGrob) S3method(guide_gengrob,colorbar) S3method(guide_gengrob,legend) S3method(guide_geom,colorbar) S3method(guide_geom,legend) S3method(guide_merge,colorbar) S3method(guide_merge,legend) S3method(guide_train,colorbar) S3method(guide_train,legend) S3method(heightDetails,stripGrob) S3method(heightDetails,titleGrob) S3method(heightDetails,zeroGrob) S3method(interleave,default) S3method(interleave,unit) S3method(limits,Date) S3method(limits,POSIXct) S3method(limits,POSIXlt) S3method(limits,character) S3method(limits,factor) S3method(limits,numeric) S3method(makeContent,labelgrob) S3method(makeContext,dotstackGrob) S3method(plot,ggplot) S3method(predictdf,default) S3method(predictdf,glm) S3method(predictdf,locfit) S3method(predictdf,loess) S3method(print,element) S3method(print,ggplot) S3method(print,ggplot2_bins) S3method(print,ggproto) S3method(print,ggproto_method) S3method(print,rel) S3method(print,theme) S3method(print,uneval) S3method(scale_type,AsIs) S3method(scale_type,Date) S3method(scale_type,POSIXt) S3method(scale_type,character) S3method(scale_type,default) S3method(scale_type,factor) S3method(scale_type,hms) S3method(scale_type,logical) S3method(scale_type,numeric) S3method(scale_type,ordered) S3method(str,uneval) S3method(summary,ggplot) S3method(widthDetails,stripGrob) S3method(widthDetails,titleGrob) S3method(widthDetails,zeroGrob) export("%+%") export("%+replace%") export(.pt) export(.stroke) export(AxisSecondary) export(Coord) export(CoordCartesian) export(CoordFixed) export(CoordFlip) export(CoordMap) export(CoordPolar) export(CoordQuickmap) export(CoordTrans) export(Facet) export(FacetGrid) export(FacetNull) export(FacetWrap) export(Geom) export(GeomAbline) export(GeomAnnotationMap) export(GeomArea) export(GeomBar) export(GeomBlank) export(GeomBoxplot) export(GeomCol) export(GeomContour) export(GeomCrossbar) export(GeomCurve) export(GeomCustomAnn) export(GeomDensity) export(GeomDensity2d) export(GeomDotplot) export(GeomErrorbar) export(GeomErrorbarh) export(GeomHex) export(GeomHline) export(GeomLabel) export(GeomLine) export(GeomLinerange) export(GeomLogticks) export(GeomMap) export(GeomPath) export(GeomPoint) export(GeomPointrange) export(GeomPolygon) export(GeomQuantile) export(GeomRaster) export(GeomRasterAnn) export(GeomRect) export(GeomRibbon) export(GeomRug) export(GeomSegment) export(GeomSmooth) export(GeomSpoke) export(GeomStep) export(GeomText) export(GeomTile) export(GeomViolin) export(GeomVline) export(Position) export(PositionDodge) export(PositionFill) export(PositionIdentity) export(PositionJitter) export(PositionJitterdodge) export(PositionNudge) export(PositionStack) export(Scale) export(ScaleContinuous) export(ScaleContinuousDate) export(ScaleContinuousDatetime) export(ScaleContinuousIdentity) export(ScaleContinuousPosition) export(ScaleDiscrete) export(ScaleDiscreteIdentity) export(ScaleDiscretePosition) export(Stat) export(StatBin) export(StatBin2d) export(StatBindot) export(StatBinhex) export(StatBoxplot) export(StatContour) export(StatCount) export(StatDensity) export(StatDensity2d) export(StatEcdf) export(StatEllipse) export(StatFunction) export(StatIdentity) export(StatQq) export(StatQuantile) export(StatSmooth) export(StatSum) export(StatSummary) export(StatSummary2d) export(StatSummaryBin) export(StatSummaryHex) export(StatUnique) export(StatYdensity) export(aes) export(aes_) export(aes_all) export(aes_auto) export(aes_q) export(aes_string) export(alpha) export(annotate) export(annotation_custom) export(annotation_logticks) export(annotation_map) export(annotation_raster) export(arrow) export(as_labeller) export(autoplot) export(benchplot) export(borders) export(calc_element) export(combine_vars) export(continuous_scale) export(coord_cartesian) export(coord_equal) export(coord_fixed) export(coord_flip) export(coord_map) export(coord_munch) export(coord_polar) export(coord_quickmap) export(coord_trans) export(cut_interval) export(cut_number) export(cut_width) export(derive) export(discrete_scale) export(draw_key_abline) export(draw_key_blank) export(draw_key_boxplot) export(draw_key_crossbar) export(draw_key_dotplot) export(draw_key_label) export(draw_key_path) export(draw_key_point) export(draw_key_pointrange) export(draw_key_polygon) export(draw_key_rect) export(draw_key_smooth) export(draw_key_text) export(draw_key_vline) export(draw_key_vpath) export(dup_axis) export(element_blank) export(element_grob) export(element_line) export(element_rect) export(element_text) export(expand_limits) export(facet_grid) export(facet_null) export(facet_wrap) export(find_panel) export(fortify) export(geom_abline) export(geom_area) export(geom_bar) export(geom_bin2d) export(geom_blank) export(geom_boxplot) export(geom_col) export(geom_contour) export(geom_count) export(geom_crossbar) export(geom_curve) export(geom_density) export(geom_density2d) export(geom_density_2d) export(geom_dotplot) export(geom_errorbar) export(geom_errorbarh) export(geom_freqpoly) export(geom_hex) export(geom_histogram) export(geom_hline) export(geom_jitter) export(geom_label) export(geom_line) export(geom_linerange) export(geom_map) export(geom_path) export(geom_point) export(geom_pointrange) export(geom_polygon) export(geom_qq) export(geom_quantile) export(geom_raster) export(geom_rect) export(geom_ribbon) export(geom_rug) export(geom_segment) export(geom_smooth) export(geom_spoke) export(geom_step) export(geom_text) export(geom_tile) export(geom_violin) export(geom_vline) export(gg_dep) export(ggplot) export(ggplotGrob) export(ggplot_build) export(ggplot_gtable) export(ggproto) export(ggproto_parent) export(ggsave) export(ggtitle) export(guide_colorbar) export(guide_colourbar) export(guide_legend) export(guides) export(is.Coord) export(is.facet) export(is.ggplot) export(is.ggproto) export(is.theme) export(label_both) export(label_bquote) export(label_context) export(label_parsed) export(label_value) export(label_wrap_gen) export(labeller) export(labs) export(last_plot) export(layer) export(layer_data) export(layer_grob) export(layer_scales) export(lims) export(map_data) export(margin) export(max_height) export(max_width) export(mean_cl_boot) export(mean_cl_normal) export(mean_sdl) export(mean_se) export(median_hilow) export(panel_cols) export(panel_rows) export(position_dodge) export(position_fill) export(position_identity) export(position_jitter) export(position_jitterdodge) export(position_nudge) export(position_stack) export(qplot) export(quickplot) export(rel) export(remove_missing) export(render_axes) export(render_strips) export(resolution) export(scale_alpha) export(scale_alpha_continuous) export(scale_alpha_discrete) export(scale_alpha_identity) export(scale_alpha_manual) export(scale_color_brewer) export(scale_color_continuous) export(scale_color_discrete) export(scale_color_distiller) export(scale_color_gradient) export(scale_color_gradient2) export(scale_color_gradientn) export(scale_color_grey) export(scale_color_hue) export(scale_color_identity) export(scale_color_manual) export(scale_colour_brewer) export(scale_colour_continuous) export(scale_colour_date) export(scale_colour_datetime) export(scale_colour_discrete) export(scale_colour_distiller) export(scale_colour_gradient) export(scale_colour_gradient2) export(scale_colour_gradientn) export(scale_colour_grey) export(scale_colour_hue) export(scale_colour_identity) export(scale_colour_manual) export(scale_fill_brewer) export(scale_fill_continuous) export(scale_fill_date) export(scale_fill_datetime) export(scale_fill_discrete) export(scale_fill_distiller) export(scale_fill_gradient) export(scale_fill_gradient2) export(scale_fill_gradientn) export(scale_fill_grey) export(scale_fill_hue) export(scale_fill_identity) export(scale_fill_manual) export(scale_linetype) export(scale_linetype_continuous) export(scale_linetype_discrete) export(scale_linetype_identity) export(scale_linetype_manual) export(scale_radius) export(scale_shape) export(scale_shape_continuous) export(scale_shape_discrete) export(scale_shape_identity) export(scale_shape_manual) export(scale_size) export(scale_size_area) export(scale_size_continuous) export(scale_size_date) export(scale_size_datetime) export(scale_size_discrete) export(scale_size_identity) export(scale_size_manual) export(scale_x_continuous) export(scale_x_date) export(scale_x_datetime) export(scale_x_discrete) export(scale_x_log10) export(scale_x_reverse) export(scale_x_sqrt) export(scale_x_time) export(scale_y_continuous) export(scale_y_date) export(scale_y_datetime) export(scale_y_discrete) export(scale_y_log10) export(scale_y_reverse) export(scale_y_sqrt) export(scale_y_time) export(sec_axis) export(should_stop) export(stat_bin) export(stat_bin2d) export(stat_bin_2d) export(stat_bin_hex) export(stat_binhex) export(stat_boxplot) export(stat_contour) export(stat_count) export(stat_density) export(stat_density2d) export(stat_density_2d) export(stat_ecdf) export(stat_ellipse) export(stat_function) export(stat_identity) export(stat_qq) export(stat_quantile) export(stat_smooth) export(stat_spoke) export(stat_sum) export(stat_summary) export(stat_summary2d) export(stat_summary_2d) export(stat_summary_bin) export(stat_summary_hex) export(stat_unique) export(stat_ydensity) export(theme) export(theme_bw) export(theme_classic) export(theme_dark) export(theme_get) export(theme_gray) export(theme_grey) export(theme_light) export(theme_linedraw) export(theme_minimal) export(theme_replace) export(theme_set) export(theme_update) export(theme_void) export(transform_position) export(unit) export(update_geom_defaults) export(update_labels) export(update_stat_defaults) export(waiver) export(wrap_dims) export(xlab) export(xlim) export(ylab) export(ylim) export(zeroGrob) import(grid) import(gtable) import(scales) importFrom(lazyeval,f_eval) importFrom(plyr,as.quoted) importFrom(plyr,defaults) importFrom(stats,setNames) importFrom(tibble,tibble) ggplot2/NEWS.md0000644000177400001440000011344113031512130013111 0ustar murdochusers# ggplot2 2.2.1 * Fix usage of `structure(NULL)` for R-devel compatibility (#1968). # ggplot2 2.2.0 ## Major new features ### Subtitle and caption Thanks to @hrbrmstr plots now have subtitles and captions, which can be set with the `subtitle` and `caption` arguments to `ggtitle()` and `labs()`. You can control their appearance with the theme settings `plot.caption` and `plot.subtitle`. The main plot title is now left-aligned to better work better with a subtitle. The caption is right-aligned (@hrbrmstr). ### Stacking `position_stack()` and `position_fill()` now sort the stacking order to match grouping order. This allows you to control the order through grouping, and ensures that the default legend matches the plot (#1552, #1593). If you want the opposite order (useful if you have horizontal bars and horizontal legend), you can request reverse stacking by using `position = position_stack(reverse = TRUE)` (#1837). `position_stack()` and `position_fill()` now accepts negative values which will create stacks extending below the x-axis (#1691). `position_stack()` and `position_fill()` gain a `vjust` argument which makes it easy to (e.g.) display labels in the middle of stacked bars (#1821). ### Layers `geom_col()` was added to complement `geom_bar()` (@hrbrmstr). It uses `stat="identity"` by default, making the `y` aesthetic mandatory. It does not support any other `stat_()` and does not provide fallback support for the `binwidth` parameter. Examples and references in other functions were updated to demonstrate `geom_col()` usage. When creating a layer, ggplot2 will warn if you use an unknown aesthetic or an unknown parameter. Compared to the previous version, this is stricter for aesthetics (previously there was no message), and less strict for parameters (previously this threw an error) (#1585). ### Facetting The facet system, as well as the internal panel class, has been rewritten in ggproto. Facets are now extendable in the same manner as geoms and stats, as described in `vignette("extending-ggplot2")`. We have also added the following new fatures. * `facet_grid()` and `facet_wrap()` now allow expressions in their facetting formulas (@DanRuderman, #1596). * When `facet_wrap()` results in an uneven number of panels, axes will now be drawn underneath the hanging panels (fixes #1607) * Strips can now be freely positioned in `facet_wrap()` using the `strip.position` argument (deprecates `switch`). * The relative order of panel, strip, and axis can now be controlled with the theme setting `strip.placement` that takes either `inside` (strip between panel and axis) or `outside` (strip after axis). * The theme option `panel.margin` has been deprecated in favour of `panel.spacing` to more clearly communicate intent. ### Extensions Unfortunately there was a major oversight in the construction of ggproto which lead to extensions capturing the super object at package build time, instead of at package run time (#1826). This problem has been fixed, but requires re-installation of all extension packages. ## Scales * The position of x and y axes can now be changed using the `position` argument in `scale_x_*`and `scale_y_*` which can take `top` and `bottom`, and `left` and `right` respectively. The themes of top and right axes can be modified using the `.top` and `.right` modifiers to `axis.text.*` and `axis.title.*`. ### Continuous scales * `scale_x_continuous()` and `scale_y_continuous()` can now display a secondary axis that is a __one-to-one__ transformation of the primary axis (e.g. degrees Celcius to degrees Fahrenheit). The secondary axis will be positioned opposite to the primary axis and can be controlled with the `sec.axis` argument to the scale constructor. * Scales worry less about having breaks. If no breaks can be computed, the plot will work instead of throwing an uninformative error (#791). This is particularly helpful when you have facets with free scales, and not all panels contain data. * Scales now warn when transformation introduces infinite values (#1696). ### Date time * `scale_*_datetime()` now supports time zones. It will use the timezone attached to the varaible by default, but can be overridden with the `timezone` argument. * New `scale_x_time()` and `scale_y_time()` generate reasonable default breaks and labels for hms vectors (#1752). ### Discrete scales The treatment of missing values by discrete scales has been thoroughly overhauled (#1584). The underlying principle is that we can naturally represent missing values on discrete variables (by treating just like another level), so by default we should. This principle applies to: * character vectors * factors with implicit NA * factors with explicit NA And to all scales (both position and non-position.) Compared to the previous version of ggplot2, there are three main changes: 1. `scale_x_discrete()` and `scale_y_discrete()` always show discrete NA, regardless of their source 1. If present, `NA`s are shown in discete legends. 1. All discrete scales gain a `na.translate` argument that allows you to control whether `NA`s are translated to something that can be visualised, or should be left as missing. Note that if you don't translate (i.e. `na.translate = FALSE)` the missing values will passed on to the layer, which will warning that it's dropping missing values. To suppress the warnings, you'll also need to add `na.rm = TRUE` to the layer call. There were also a number of other smaller changes * Correctly use scale expansion factors. * Don't preserve space for dropped levels (#1638). * Only issue one warning when when asking for too many levels (#1674). * Unicode labels work better on Windows (#1827). * Warn when used with only continuous data (#1589) ## Themes * The `theme()` constructor now has named arguments rather than ellipses. This should make autocomplete substantially more useful. The documentation (including exampes) has been considerably improved. * Built-in themes are more visually homogeneous, and match `theme_grey` better. (@jiho, #1679) * When computing the height of titles, ggplot2 now includes the height of the descenders (i.e. the bits of `g` and `y` that hang beneath the baseline). This improves the margins around titles, particularly the y axis label (#1712). I have also very slightly increased the inner margins of axis titles, and removed the outer margins. * Theme element inheritance is now easier to work with as modification now overrides default `element_blank` elements (#1555, #1557, #1565, #1567) * Horizontal legends (i.e. legends on the top or bottom) are horizontally aligned by default (#1842). Use `legend.box = "vertical"` to switch back to the previous behaviour. * `element_line()` now takes an `arrow` argument to specify arrows at the end of lines (#1740) There were a number of tweaks to the theme elements that control legends: * `legend.justification` now controls appearance will plotting the legend outside of the plot area. For example, you can use `theme(legend.justification = "top")` to make the legend align with the top of the plot. * `panel.margin` and `legend.margin` have been renamed to `panel.spacing` and `legend.spacing` respectively, to better communicate intent (they only affect spacing between legends and panels, not the margins around them) * `legend.margin` now controls margin around individual legends. * New `legend.box.background`, `legend.box.spacing`, and `legend.box.margin` control the background, spacing, and margin of the legend box (the region that contains all legends). ## Bug fixes and minor improvements * ggplot2 now imports tibble. This ensures that all built-in datasets print compactly even if you haven't explicitly loaded tibble or dplyr (#1677). * Class of aesthetic mapping is preserved when adding `aes()` objects (#1624). * `+.gg` now works for lists that include data frames. * `annotation_x()` now works in the absense of global data (#1655) * `geom_*(show.legend = FALSE)` now works for `guide_colorbar`. * `geom_boxplot()` gains new `outlier.alpha` (@jonathan-g) and `outlier.fill` (@schloerke, #1787) parameters to control the alpha/fill of outlier points independently of the alpha of the boxes. * `position_jitter()` (and hence `geom_jitter()`) now correctly computes the jitter width/jitter when supplied by the user (#1775, @has2k1). * `geom_contour()` more clearly describes what inputs it needs (#1577). * `geom_curve()` respects the `lineend` paramater (#1852). * `geom_histogram()` and `stat_bin()` understand the `breaks` parameter once more. (#1665). The floating point adjustment for histogram bins is now actually used - it was previously inadvertently ignored (#1651). * `geom_violin()` no longer transforms quantile lines with the alpha aesthetic (@mnbram, #1714). It no longer errors when quantiles are requested but data have zero range (#1687). When `trim = FALSE` it once again has a nice range that allows the density to reach zero (by extending the range 3 bandwidths to either side of the data) (#1700). * `geom_dotplot()` works better when facetting and binning on the y-axis. (#1618, @has2k1). * `geom_hexbin()` once again supports `..density..` (@mikebirdgeneau, #1688). * `geom_step()` gives useful warning if only one data point in layer (#1645). * `layer()` gains new `check.aes` and `check.param` arguments. These allow geom/stat authors to optional suppress checks for known aesthetics/parameters. Currently this is used only in `geom_blank()` which powers `expand_limits()` (#1795). * All `stat_*()` display a better error message when required aesthetics are missing. * `stat_bin()` and `stat_summary_hex()` now accept length 1 `binwidth` (#1610) * `stat_density()` gains new argument `n`, which is passed to underlying function `stats::density` ("number of equally spaced points at which the density is to be estimated"). (@hbuschme) * `stat_binhex()` now again returns `count` rather than `value` (#1747) * `stat_ecdf()` respects `pad` argument (#1646). * `stat_smooth()` once again informs you about the method it has chosen. It also correctly calculates the size of the largest group within facets. * `x` and `y` scales are now symmetric regarding the list of aesthetics they accept: `xmin_final`, `xmax_final`, `xlower`, `xmiddle` and `xupper` are now valid `x` aesthetics. * `Scale` extensions can now override the `make_title` and `make_sec_title` methods to let the scale modify the axis/legend titles. # ggplot2 2.1.0 ## New features * When mapping an aesthetic to a constant (e.g. `geom_smooth(aes(colour = "loess")))`), the default guide title is the name of the aesthetic (i.e. "colour"), not the value (i.e. "loess") (#1431). * `layer()` now accepts a function as the data argument. The function will be applied to the data passed to the `ggplot()` function and must return a data.frame (#1527, @thomasp85). This is a more general version of the deprecated `subset` argument. * `theme_update()` now uses the `+` operator instead of `%+replace%`, so that unspecified values will no longer be `NULL`ed out. `theme_replace()` preserves the old behaviour if desired (@oneillkza, #1519). * `stat_bin()` has been overhauled to use the same algorithm as ggvis, which has been considerably improved thanks to the advice of Randy Prium (@rpruim). This includes: * Better arguments and a better algorithm for determining the origin. You can now specify either `boundary` or the `center` of a bin. `origin` has been deprecated in favour of these arguments. * `drop` is deprecated in favour of `pad`, which adds extra 0-count bins at either end (needed for frequency polygons). `geom_histogram()` defaults to `pad = FALSE` which considerably improves the default limits for the histogram, especially when the bins are big (#1477). * The default algorithm does a (somewhat) better job at picking nice widths and origins across a wider range of input data. * `bins = n` now gives a histogram with `n` bins, not `n + 1` (#1487). ## Bug fixes * All `\donttest{}` examples run. * All `geom_()` and `stat_()` functions now have consistent argument order: data + mapping, then geom/stat/position, then `...`, then specific arguments, then arguments common to all layers (#1305). This may break code if you were previously relying on partial name matching, but in the long-term should make ggplot2 easier to use. In particular, you can now set the `n` parameter in `geom_density2d()` without it partially matching `na.rm` (#1485). * For geoms with both `colour` and `fill`, `alpha` once again only affects fill (Reverts #1371, #1523). This was causing problems for people. * `facet_wrap()`/`facet_grid()` works with multiple empty panels of data (#1445). * `facet_wrap()` correctly swaps `nrow` and `ncol` when facetting vertically (#1417). * `ggsave("x.svg")` now uses svglite to produce the svg (#1432). * `geom_boxplot()` now understands `outlier.color` (#1455). * `geom_path()` knows that "solid" (not just 1) represents a solid line (#1534). * `geom_ribbon()` preserves missing values so they correctly generate a gap in the ribbon (#1549). * `geom_tile()` once again accepts `width` and `height` parameters (#1513). It uses `draw_key_polygon()` for better a legend, including a coloured outline (#1484). * `layer()` now automatically adds a `na.rm` parameter if none is explicitly supplied. * `position_jitterdodge()` now works on all possible dodge aesthetics, e.g. `color`, `linetype` etc. instead of only based on `fill` (@bleutner) * `position = "nudge"` now works (although it doesn't do anything useful) (#1428). * The default scale for columns of class "AsIs" is now "identity" (#1518). * `scale_*_discrete()` has better defaults when used with purely continuous data (#1542). * `scale_size()` warns when used with categorical data. * `scale_size()`, `scale_colour()`, and `scale_fill()` gain date and date-time variants (#1526). * `stat_bin_hex()` and `stat_bin_summary()` now use the same underlying algorithm so results are consistent (#1383). `stat_bin_hex()` now accepts a `weight` aesthetic. To be consistent with related stats, the output variable from `stat_bin_hex()` is now value instead of count. * `stat_density()` gains a `bw` parameter which makes it easy to get consistent smoothing between facets (@jiho) * `stat-density-2d()` no longer ignores the `h` parameter, and now accepts `bins` and `binwidth` parameters to control the number of contours (#1448, @has2k1). * `stat_ecdf()` does a better job of adding padding to -Inf/Inf, and gains an argument `pad` to suppress the padding if not needed (#1467). * `stat_function()` gains an `xlim` parameter (#1528). It once again works with discrete x values (#1509). * `stat_summary()` preserves sorted x order which avoids artefacts when display results with `geom_smooth()` (#1520). * All elements should now inherit correctly for all themes except `theme_void()`. (@Katiedaisey, #1555) * `theme_void()` was completely void of text but facets and legends still need labels. They are now visible (@jiho). * You can once again set legend key and height width to unit arithmetic objects (like `2 * unit(1, "cm")`) (#1437). * Eliminate spurious warning if you have a layer with no data and no aesthetics (#1451). * Removed a superfluous comma in `theme-defaults.r` code (@jschoeley) * Fixed a compatibility issue with `ggproto` and R versions prior to 3.1.2. (#1444) * Fixed issue where `coord_map()` fails when given an explicit `parameters` argument (@tdmcarthur, #1729) # ggplot2 2.0.0 ## Major changes * ggplot no longer throws an error if you your plot has no layers. Instead it automatically adds `geom_blank()` (#1246). * New `cut_width()` is a convenient replacement for the verbose `plyr::round_any()`, with the additional benefit of offering finer control. * New `geom_count()` is a convenient alias to `stat_sum()`. Use it when you have overlapping points on a scatterplot. `stat_sum()` now defaults to using counts instead of proportions. * New `geom_curve()` adds curved lines, with a similar specification to `geom_segment()` (@veraanadi, #1088). * Date and datetime scales now have `date_breaks`, `date_minor_breaks` and `date_labels` arguments so that you never need to use the long `scales::date_breaks()` or `scales::date_format()`. * `geom_bar()` now has it's own stat, distinct from `stat_bin()` which was also used by `geom_histogram()`. `geom_bar()` now uses `stat_count()` which counts values at each distinct value of x (i.e. it does not bin the data first). This can be useful when you want to show exactly which values are used in a continuous variable. * `geom_point()` gains a `stroke` aesthetic which controls the border width of shapes 21-25 (#1133, @SeySayux). `size` and `stroke` are additive so a point with `size = 5` and `stroke = 5` will have a diameter of 10mm. (#1142) * New `position_nudge()` allows you to slightly offset labels (or other geoms) from their corresponding points (#1109). * `scale_size()` now maps values to _area_, not radius. Use `scale_radius()` if you want the old behaviour (not recommended, except perhaps for lines). * New `stat_summary_bin()` works like `stat_summary()` but on binned data. It's a generalisation of `stat_bin()` that can compute any aggregate, not just counts (#1274). Both default to `mean_se()` if no aggregation functions are supplied (#1386). * Layers are now much stricter about their arguments - you will get an error if you've supplied an argument that isn't an aesthetic or a parameter. This is likely to cause some short-term pain but in the long-term it will make it much easier to spot spelling mistakes and other errors (#1293). This change does break a handful of geoms/stats that used `...` to pass additional arguments on to the underlying computation. Now `geom_smooth()`/`stat_smooth()` and `geom_quantile()`/`stat_quantile()` use `method.args` instead (#1245, #1289); and `stat_summary()` (#1242), `stat_summary_hex()`, and `stat_summary2d()` use `fun.args`. ### Extensibility There is now an official mechanism for defining Stats, Geoms, and Positions in other packages. See `vignette("extending-ggplot2")` for details. * All Geoms, Stats and Positions are now exported, so you can inherit from them when making your own objects (#989). * ggplot2 no longer uses proto or reference classes. Instead, we now use ggproto, a new OO system designed specifically for ggplot2. Unlike proto and RC, ggproto supports clean cross-package inheritance. Creating a new OO system isn't usually the right way to solve a problem, but I'm pretty sure it was necessary here. Read more about it in the vignette. * `aes_()` replaces `aes_q()`. It also supports formulas, so the most concise SE version of `aes(carat, price)` is now `aes_(~carat, ~price)`. You may want to use this form in packages, as it will avoid spurious `R CMD check` warnings about undefined global variables. ### Text * `geom_text()` has been overhauled to make labelling your data a little easier. It: * `nudge_x` and `nudge_y` arguments let you offset labels from their corresponding points (#1120). * `check_overlap = TRUE` provides a simple way to avoid overplotting of labels: labels that would otherwise overlap are omitted (#1039). * `hjust` and `vjust` can now be character vectors: "left", "center", "right", "bottom", "middle", "top". New options include "inward" and "outward" which align text towards and away from the center of the plot respectively. * `geom_label()` works like `geom_text()` but draws a rounded rectangle underneath each label (#1039). This is useful when you want to label plots that are dense with data. ### Deprecated features * The little used `aes_auto()` has been deprecated. * `aes_q()` has been replaced with `aes_()` to be consistent with SE versions of NSE functions in other packages. * The `order` aesthetic is officially deprecated. It never really worked, and was poorly documented. * The `stat` and `position` arguments to `qplot()` have been deprecated. `qplot()` is designed for quick plots - if you need to specify position or stat, use `ggplot()` instead. * The theme setting `axis.ticks.margin` has been deprecated: now use the margin property of `axis.text`. * `stat_abline()`, `stat_hline()` and `stat_vline()` have been removed: these were never suitable for use other than with `geom_abline()` etc and were not documented. * `show_guide` has been renamed to `show.legend`: this more accurately reflects what it does (controls appearance of layer in legend), and uses the same convention as other ggplot2 arguments (i.e. a `.` between names). (Yes, I know that's inconsistent with function names with use `_`, but it's too late to change now.) A number of geoms have been renamed to be internally consistent: * `stat_binhex()` and `stat_bin2d()` have been renamed to `stat_bin_hex()` and `stat_bin_2d()` (#1274). `stat_summary2d()` has been renamed to `stat_summary_2d()`, `geom_density2d()`/`stat_density2d()` has been renamed to `geom_density_2d()`/`stat_density_2d()`. * `stat_spoke()` is now `geom_spoke()` since I realised it's a reparameterisation of `geom_segment(). * `stat_bindot()` has been removed because it's so tightly coupled to `geom_dotplot()`. If you happened to use `stat_bindot()`, just change to `geom_dotplot()` (#1194). All defunct functions have been removed. ### Default appearance * The default `theme_grey()` background colour has been changed from "grey90" to "grey92": this makes the background a little less visually prominent. * Labels and titles have been tweaked for readability: * Axes labels are darker. * Legend and axis titles are given the same visual treatment. * The default font size dropped from 12 to 11. You might be surprised that I've made the default text size smaller as it was already hard for many people to read. It turns out there was a bug in RStudio (fixed in 0.99.724), that shrunk the text of all grid based graphics. Once that was resolved the defaults seemed too big to my eyes. * More spacing between titles and borders. * Default margins scale with the theme font size, so the appearance at larger font sizes should be considerably improved (#1228). * `alpha` now affects both fill and colour aesthetics (#1371). * `element_text()` gains a margins argument which allows you to add additional padding around text elements. To help see what's going on use `debug = TRUE` to display the text region and anchors. * The default font size in `geom_text()` has been decreased from 5mm (14 pts) to 3.8 mm (11 pts) to match the new default theme sizes. * A diagonal line is no longer drawn on bar and rectangle legends. Instead, the border has been tweaked to be more visible, and more closely match the size of line drawn on the plot. * `geom_pointrange()` and `geom_linerange()` get vertical (not horizontal) lines in the legend (#1389). * The default line `size` for `geom_smooth()` has been increased from 0.5 to 1 to make it easier to see when overlaid on data. * `geom_bar()` and `geom_rect()` use a slightly paler shade of grey so they aren't so visually heavy. * `geom_boxplot()` now colours outliers the same way as the boxes. * `geom_point()` now uses shape 19 instead of 16. This looks much better on the default Linux graphics device. (It's very slightly smaller than the old point, but it shouldn't affect any graphics significantly) * Sizes in ggplot2 are measured in mm. Previously they were converted to pts (for use in grid) by multiplying by 72 / 25.4. However, grid uses printer's points, not Adobe (big pts), so sizes are now correctly multiplied by 72.27 / 25.4. This is unlikely to noticeably affect display, but it's technically correct (). * The default legend will now allocate multiple rows (if vertical) or columns (if horizontal) in order to make a legend that is more likely to fit on the screen. You can override with the `nrow`/`ncol` arguments to `guide_legend()` ```R p <- ggplot(mpg, aes(displ,hwy, colour = model)) + geom_point() p p + theme(legend.position = "bottom") # Previous behaviour p + guides(colour = guide_legend(ncol = 1)) ``` ### New and updated themes * New `theme_void()` is completely empty. It's useful for plots with non- standard coordinates or for drawings (@jiho, #976). * New `theme_dark()` has a dark background designed to make colours pop out (@jiho, #1018) * `theme_minimal()` became slightly more minimal by removing the axis ticks: labels now line up directly beneath grid lines (@tomschloss, #1084) * New theme setting `panel.ontop` (logical) make it possible to place background elements (i.e., gridlines) on top of data. Best used with transparent `panel.background` (@noamross. #551). ### Labelling The facet labelling system was updated with many new features and a more flexible interface (@lionel-). It now works consistently across grid and wrap facets. The most important user visible changes are: * `facet_wrap()` gains a `labeller` option (#25). * `facet_grid()` and `facet_wrap()` gain a `switch` argument to display the facet titles near the axes. When switched, the labels become axes subtitles. `switch` can be set to "x", "y" or "both" (the latter only for grids) to control which margin is switched. The labellers (such as `label_value()` or `label_both()`) also get some new features: * They now offer the `multi_line` argument to control whether to display composite facets (those specified as `~var1 + var2`) on one or multiple lines. * In `label_bquote()` you now refer directly to the names of variables. With this change, you can create math expressions that depend on more than one variable. This math expression can be specified either for the rows or the columns and you can also provide different expressions to each margin. As a consequence of these changes, referring to `x` in backquoted expressions is deprecated. * Similarly to `label_bquote()`, `labeller()` now take `.rows` and `.cols` arguments. In addition, it also takes `.default`. `labeller()` is useful to customise how particular variables are labelled. The three additional arguments specify how to label the variables are not specifically mentioned, respectively for rows, columns or both. This makes it especially easy to set up a project-wide labeller dispatcher that can be reused across all your plots. See the documentation for an example. * The new labeller `label_context()` adapts to the number of factors facetted over. With a single factor, it displays only the values, just as before. But with multiple factors in a composite margin (e.g. with `~cyl + am`), the labels are passed over to `label_both()`. This way the variables names are displayed with the values to help identifying them. On the programming side, the labeller API has been rewritten in order to offer more control when facetting over multiple factors (e.g. with formulae such as `~cyl + am`). This also means that if you have written custom labellers, you will need to update them for this version of ggplot. * Previously, a labeller function would take `variable` and `value` arguments and return a character vector. Now, they take a data frame of character vectors and return a list. The input data frame has one column per factor facetted over and each column in the returned list becomes one line in the strip label. See documentation for more details. * The labels received by a labeller now contain metadata: their margin (in the "type" attribute) and whether they come from a wrap or a grid facet (in the "facet" attribute). * Note that the new `as_labeller()` function operator provides an easy way to transform an existing function to a labeller function. The existing function just needs to take and return a character vector. ## Documentation * Improved documentation for `aes()`, `layer()` and much much more. * I've tried to reduce the use of `...` so that you can see all the documentation in one place rather than having to integrate multiple pages. In some cases this has involved adding additional arguments to geoms to make it more clear what you can do: * `geom_smooth()` gains explicit `method`, `se` and `formula` arguments. * `geom_histogram()` gains `binwidth`, `bins`, origin` and `right` arguments. * `geom_jitter()` gains `width` and `height` arguments to make it easier to control the amount of jittering without using the lengthy `position_jitter()` function (#1116) * Use of `qplot()` in examples has been minimised (#1123, @hrbrmstr). This is inline with the 2nd edition of the ggplot2 box, which minimises the use of `qplot()` in favour of `ggplot()`. * Tighly linked geoms and stats (e.g. `geom_boxplot()` and `stat_boxplot()`) are now documented in the same file so you can see all the arguments in one place. Variations of the same idea (e.g. `geom_path()`, `geom_line()`, and `geom_step()`) are also documented together. * It's now obvious that you can set the `binwidth` parameter for `stat_bin_hex()`, `stat_summary_hex()`, `stat_bin_2d()`, and `stat_summary_2d()`. * The internals of positions have been cleaned up considerably. You're unlikely to notice any external changes, although the documentation should be a little less confusing since positions now don't list parameters they never use. ## Data * All datasets have class `tbl_df` so if you also use dplyr, you get a better print method. * `economics` has been brought up to date to 2015-04-01. * New `economics_long` is the economics data in long form. * New `txhousing` dataset containing information about the Texas housing market. Useful for examples that need multiple time series, and for demonstrating model+vis methods. * New `luv_colours` dataset which contains the locations of all built-in `colors()` in Luv space. * `movies` has been moved into its own package, ggplot2movies, because it was large and not terribly useful. If you've used the movies dataset, you'll now need to explicitly load the package with `library(ggplot2movies)`. ## Bug fixes and minor improvements * All partially matched arguments and `$` have been been replaced with full matches (@jimhester, #1134). * ggplot2 now exports `alpha()` from the scales package (#1107), and `arrow()` and `unit()` from grid (#1225). This means you don't need attach scales/grid or do `scales::`/`grid::` for these commonly used functions. * `aes_string()` now only parses character inputs. This fixes bugs when using it with numbers and non default `OutDec` settings (#1045). * `annotation_custom()` automatically adds a unique id to each grob name, making it easier to plot multiple grobs with the same name (e.g. grobs of ggplot2 graphics) in the same plot (#1256). * `borders()` now accepts xlim and ylim arguments for specifying the geographical region of interest (@markpayneatwork, #1392). * `coord_cartesian()` applies the same expansion factor to limits as for scales. You can suppress with `expand = FALSE` (#1207). * `coord_trans()` now works when breaks are suppressed (#1422). * `cut_number()` gives error message if the number of requested bins can be created because there are two few unique values (#1046). * Character labels in `facet_grid()` are no longer (incorrectly) coerced into factors. This caused problems with custom label functions (#1070). * `facet_wrap()` and `facet_grid()` now allow you to use non-standard variable names by surrounding them with backticks (#1067). * `facet_wrap()` more carefully checks its `nrow` and `ncol` arguments to ensure that they're specified correctly (@richierocks, #962) * `facet_wrap()` gains a `dir` argument to control the direction the panels are wrapped in. The default is "h" for horizontal. Use "v" for vertical layout (#1260). * `geom_abline()`, `geom_hline()` and `geom_vline()` have been rewritten to have simpler behaviour and be more consistent: * `stat_abline()`, `stat_hline()` and `stat_vline()` have been removed: these were never suitable for use other than with `geom_abline()` etc and were not documented. * `geom_abline()`, `geom_vline()` and `geom_hline()` are bound to `stat_identity()` and `position_identity()` * Intercept parameters can no longer be set to a function. * They are all documented in one file, since they are so closely related. * `geom_bin2d()` will now let you specify one dimension's breaks exactly, without touching the other dimension's default breaks at all (#1126). * `geom_crossbar()` sets grouping correctly so you can display multiple crossbars on one plot. It also makes the default `fatten` argument a little bigger to make the middle line more obvious (#1125). * `geom_histogram()` and `geom_smooth()` now only inform you about the default values once per layer, rather than once per panel (#1220). * `geom_pointrange()` gains `fatten` argument so you can control the size of the point relative to the size of the line. * `geom_segment()` annotations were not transforming with scales (@BrianDiggs, #859). * `geom_smooth()` is no longer so chatty. If you want to know what the deafult smoothing method is, look it up in the documentation! (#1247) * `geom_violin()` now has the ability to draw quantile lines (@DanRuderman). * `ggplot()` now captures the parent frame to use for evaluation, rather than always defaulting to the global environment. This should make ggplot more suitable to use in more situations (e.g. with knitr) * `ggsave()` has been simplified a little to make it easier to maintain. It no longer checks that you're printing a ggplot2 object (so now also works with any grid grob) (#970), and always requires a filename. Parameter `device` now supports character argument to specify which supported device to use ('pdf', 'png', 'jpeg', etc.), for when it cannot be correctly inferred from the file extension (for example when a temporary filename is supplied server side in shiny apps) (@sebkopf, #939). It no longer opens a graphics device if one isn't already open - this is annoying when you're running from a script (#1326). * `guide_colorbar()` creates correct legend if only one color (@krlmlr, #943). * `guide_colorbar()` no longer fails when the legend is empty - previously this often masked misspecifications elsewhere in the plot (#967). * New `layer_data()` function extracts the data used for plotting for a given layer. It's mostly useful for testing. * User supplied `minor_breaks` can now be supplied on the same scale as the data, and will be automatically transformed with by scale (#1385). * You can now suppress the appearance of an axis/legend title (and the space that would allocated for it) with `NULL` in the `scale_` function. To use the default lable, use `waiver()` (#1145). * Position adjustments no longer warn about potentially varying ranges because the problem rarely occurs in practice and there are currently a lot of false positives since I don't understand exactly what FP criteria I should be testing. * `scale_fill_grey()` now uses red for missing values. This matches `scale_colour_grey()` and makes it obvious where missing values lie. Override with `na.value`. * `scale_*_gradient2()` defaults to using Lab colour space. * `scale_*_gradientn()` now allows `colours` or `colors` (#1290) * `scale_y_continuous()` now also transforms the `lower`, `middle` and `upper` aesthetics used by `geom_boxplot()`: this only affects `geom_boxplot(stat = "identity")` (#1020). * Legends no longer inherit aesthetics if `inherit.aes` is FALSE (#1267). * `lims()` makes it easy to set the limits of any axis (#1138). * `labels = NULL` now works with `guide_legend()` and `guide_colorbar()`. (#1175, #1183). * `override.aes` now works with American aesthetic spelling, e.g. color * Scales no longer round data points to improve performance of colour palettes. Instead the scales package now uses a much faster colour interpolation algorithm (#1022). * `scale_*_brewer()` and `scale_*_distiller()` add new `direction` argument of `scales::brewer_pal`, making it easier to change the order of colours (@jiho, #1139). * `scale_x_date()` now clips dates outside the limits in the same way as `scale_x_continuous()` (#1090). * `stat_bin()` gains `bins` arguments, which denotes the number of bins. Now you can set `bins=100` instead of `binwidth=0.5`. Note that `breaks` or `binwidth` will override it (@tmshn, #1158, #102). * `stat_boxplot()` warns if a continuous variable is used for the `x` aesthetic without also supplying a `group` aesthetic (#992, @krlmlr). * `stat_summary_2d()` and `stat_bin_2d()` now share exactly the same code for determining breaks from `bins`, `binwidth`, and `origin`. * `stat_summary_2d()` and `stat_bin_2d()` now output in tile/raster compatible form instead of rect compatible form. * Automatically computed breaks do not lead to an error for transformations like "probit" where the inverse can map to infinity (#871, @krlmlr) * `stat_function()` now always evaluates the function on the original scale. Previously it computed the function on transformed scales, giving incorrect values (@BrianDiggs, #1011). * `strip_dots` works with anonymous functions within calculated aesthetics (e.g. `aes(sapply(..density.., function(x) mean(x))))` (#1154, @NikNakk) * `theme()` gains `validate = FALSE` parameter to turn off validation, and hence store arbitrary additional data in the themes. (@tdhock, #1121) * Improved the calculation of segments needed to draw the curve representing a line when plotted in polar coordinates. In some cases, the last segment of a multi-segment line was not drawn (@BrianDiggs, #952) ggplot2/data/0000755000177400001440000000000013031512434012727 5ustar murdochusersggplot2/data/seals.rda0000644000177400001440000004560212540260054014537 0ustar murdochusersBZh91AY&SY¿~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà2+íî÷}V•žîëµÝëïx¸a|Úè>w^yëÇ{wqÝ»n×Y¼=SíݾûÚÛ±Kž{Þk€ÞòU¶Ú÷\û·Ó{ÙÊï»u»½lÚö{{Û|>ûÛçoƒ¶½Œ÷{Ãä>¾rY«ï‹lÃo½îô½ì ¡ ©UP—Áí½WcÐѤɉ´ž€LLz†Ñ4ɦ Ÿ˜@ɦ&˜š`LŒÔž˜hêb4i¦&˜š4ÓM SÚSôÑ”ò˜L'¡1£@ÐÒ¢?f2 ššcSL ´˜ž„`h˜š2dôQàLL £L˜˜šb<‰€i  2ÐÐ4MLÁ00&™ 0MPêy И&OTýLLL&˜› ˜žš§š`MF=&Ð €Ñ=G¢m6„Ó#SÃHÓ ˆÔð§„ÄÓF&&˜<&˜¤üª#F0&ÐÓI“CЙhÈÔÚhÐhŒSF¦ÄÍG”hшi<™0š2cA2bi„ÅOÉ‚1Qú`¦ÄÕ=£&€§ŒM2DPªŸˆM#L‰“hL˜<=)›U§äi©äÉ“M4ž†FdÉ©šd`”ý4dÑŠy ™OF†&šjm4ž§“F”Á¦ÔñÅ<™2§šdɪ ‘˜‚b 2 †€ ¦ '¢6¦ ¡¦A=ŠŸ‰ƒTý †Bz „ôLÑ¢i&™¡¢m ¦¦¦i=˜bcBz™Q@8wztÝd u—:–Cߘy!å(ÒQQèü Ád!ÞAÓÁ¦bÕSb bB[@'ü*¿ó¼Úùî_ çGp˜ïb¨¥¦#ðqè„PÍ™ìÕ…Y¸ŠyG~HÜ£­3C-Åg…À¬·ö‹³ ¬Îer~ÿ~î6¦noš\-óîA‹ÞÊG€Äbà.\ðI&s•Êk~ÅB   (&ƒúßá©]ºt“®ý€ì Y¶Tv^­D–ýÇ—mÇRiµH‡|ŠØj­œ!s#"Ž ­¦\× ãnÈn˜[aÐ>2«®OxP€ظÕav5è¤ÓÄž+ÐRê4¨xY.–6Í j6'Ì÷BÒ¯[SK¥€Cú/xËÄãH…˜HHu’1½Ûv$0paƒ✇aàeõ(`×QtÕÌpó`èÖ_¡÷.]½L Ií<×…óÖ[&d“§Þ}J( $#kÙ&š¾Âa°Ïû%߆¶a dzp}™ÀÓâŒK¿þcÝ<4Ù¼÷} Ž1ö Ò„®œ{°‘Ïm¨¹º:VùŒ°IsØÙ¦÷°1mO3ÙÞ±%ÜÀÀ¸}:JÆØAÇß.(Œ¿‹O]|®Â–kŠ¡ë ,k/ôhή ˆ¾}Põž—1Œ9áþUÉò‰êõbôPõf™ž:Jtørs{œ©xʺ‡ JÞÇßð›Hz24Æ¡hõõ8$Ô?lv–y9>í};Yn¸,áÿd¤ ¦,,½$×tÛWÍ7>Ã3ëÐà7)è«£W¸:ú†¿î ÿÕÿó—€p†MQ’Ög£³—2{IQ—’¶ÿñ³¯-+yÄŠÑÛ2TÚ Ú·(w6&ÓeôXe<Žae/c»?/8ä3¨Åd¾ 6Øÿ+Wš9Ó^b¦-ã:Ø¡Çl»)¬ìµÖ›8q™0\&è³±Ò‡¶õ¶êêDH£Ëƒˆ6c&ñafYÆó ¯\æ^éëNv0€;d©× þ-ø–xýéohM5=E×ò?j´æÇó•iÍ–ð­0ðÉ˺ø–àsÊ ÑwÔ¾³x\¨Xê`®{§üfJ‚?¦`6¡Ü莽WøŠ¹ÍÖ:{’]^6¥à1…ܹ•%§5a*Ïöó/èIŽ“F”ŒÕ®\!«ŸSÓ[ÚiÇd »=ÆŒ±.É­ZiT¯mº¤ƒÊ&noH;:i©@OÃÏ3V Hsß:œ”¦ÉÔJ¹i—_T^bJ¶4ïfÁxEÆç+MŽüh!Óÿ¾Æ{^pEÇšZJØÁÜ= :riAêܪÂg®šÕ¿F‡1ðÆI?ø)´òHØs$V8íO[Ï…qôYÙ¦²¯ uª&Ö`!c;¼bðG‚7¤Ù ‰‚Æß,¼§~¾õŒ]ÿ}±¿÷¼xš†Ãÿ5L© • gaXR¼:[h:Å~µRëô÷‡º ¨¤Óˆ7WÞè¯#9KtÖF·/:]Ì›÷ ~Dܸ! Äì¿­ÆÐ`oâud. eóÜR«ÀPºÛÚT©±z²ßÒZ®Á>J`sõGEB¡üøÿïóe±Æ˜¼½,òxQ=ÉÇÜ• Ÿ}»nšÖnÓˉ¿Àîíx[Ðk…¦Þ£ñ•Jô1N³Ðiƒ/¸Y<¼Ç½«l1ÙiG}I%|˜ƒ2:õÛÌ|£ÔœO¯{Wü]НHúÝŠWeÞàÌ%FéHvá9aäØÔÒ¹ýàÿ,kÈÝ•l€¿Y£x3M`”D\Ø?¦ŠFŽÈý­ƒ§Žµ.ÈÄjXÉ“¥_dD9鯷†.Q§Tyu¦ƒ•Zmâ^YU€u:þ¬M2º bâ“Õ=©<Ç%~gW´,Òµy°¥i—'[¦6°íõ‰@™/Æ ÝS§w£˜L™>‡í±‘üèF³1-!Ñ7ì56q̾½Úî«/J@á% ™Wëó]h§-l«?+gj)‹šuÿ‡UMD*ÈN…F à ŽýƒÖøÛâå8oY^,²¨[®É‚ˆ;Lïóˆ¾v?ž-.ªÅIÿ0évÊòÿ ³#OêU!TkZOKÁ­½‰Žûä[­¯Ùf†Ú —K»8×ÕIð`GV1!´z¹\Nu»<Ï]ŒäóX —ÕM5Æp$(CЙb¾Ôô ^h“lFœ5yÞŸ*#Eˆ2ו‡ÊÃBÒÆtKÀé®R_.ãSçÎéž)j[W0|c¿Æ»>Žjò>Fý’£(K¢¤ÃÔä§kÐlP†Ø^Ózá_Àå H…‚þ Þ¾lK¢^¤äeVÄÍ-aM·Õw³æ€2X¥…Öáõ²´†ÌfE¡Ydq ×o]w!¬p—|â¬8„ù–yfÙÏÁŽAe âÌÍýç+ÆïI©Š‚`[Ý©{y®R%f;;cô‘–þˆýÛ3h6<Ö²º{ŒWÐþ¥Ï”7FOâ©V`©ZÑ/[sk·ôÎRî˜R*dE’àŽlýL7±þ³mb&ÈH û+wK/TÓ6¬•óÅ(…Ž5øåý"mÇ&÷²o'h;cAßãYNDþoÀ3ú^öw4 ß՚ο’œ²Ð<ã¥îWû#$«\« }Qöí‚€,¿ljmѨLdæÏ0,׊ãõ,™FgTæ²>†=®ÂÐìšúÿâ‹°8¥nk¾šƒ6(1qâÑQ ¿"¨ˆ%mèœK«µ“úÐx1›ÚûŽäò®Z-§¶“Y­‡B¿75Þö”!€µù«^ê?¬¥xð¿[ ×eÎÖÂ’ÕrÚ^f.!§,po5çh¬Xß®“ ½JÉÑ´/'FD´ÜƒKöù1p™$ß3¾ý<ÌÓîk”ØÇû˜Á(À¸‡+t²°~9.”F“â¸ÔÄ¥¡ïŽÓ¶ž=àÒD·¾Tß ¦/¾ßŽ£|K«ÉRX‹:Jà„:}9ÄV/¼ó˲‚#¤ç ½LªÇ$O4{Ïq[‘M6ÁRÛGÊô=þBµÂIgûæÚâWÛñá¿IËFØm§†–E£ÿ…Þ4KB£ë@íÂ’#©¦Ê‡>7@ËÅ=܆òhPÙ\´"4+ùqÊè_²~‡iõpZfBHU£·W “TN4ÆÐ[¨MÈ5ké•פÍ£Û¹U¾¹‚ÇÎa¦Àk¬œNá5MŠ4‘ÃààÛ†àòŽ÷.gÍOVú.§Ök ²Ð)\~Þâs¾¾þ;ª¡$G_Ïfû®µ:á"Æ¡È$‚Hn$ŒñQBˆ!D¢Q(‚?ÒïE‘ßÙ1øÀß°ã¾CCµÏݬHÓÅ–ìo8‹ùy_ÌÂôzù¯ú‹’ÆQï½óÿ‰µêìBsЃ _À)óËú?å§9 :Ææx=AŠeïŽËw=_ÄB4dJTÊàe ¸È­Q°|ÿåÉÊXß .NgÏiƨNö›÷¾\ 4¦E÷ɶÙ=[œÙ§f}O½­LÌ㣟I.ÈÃS2% úF œ}™7~ÑxÃQThâ‡QNc³˜ðüƒ©1–#uo¸ëpáÕvˆ÷ªØ¬U?~lyºQ2ZN<§34ÿƒæAŒòé,¨ÞFHQ™ëžþèD[ ¦¨š¡;{Æ(†¦zkÕ23tfʰ|ë~K¬ÛåEBÛÃ1Âf/ꩬŠFRå”!ü»S/ûÏþÛø ÿ7z> Ê“ Èè•%¢,ÞtÃÎv|$ƒ@uZ¾`Ù¶#Ý‘ïÍ¢&—4ß)ÕøÝõÌwõ×Nãñ!ÕŸ!Š­+ãeeš}ú@M'):ç£q¶?ñç×ö, ‰ŒfÝE_Šù¯,ðÕÍ~½ñ¤<šd\óÞÜì!Zs?Ç®^oËTæò}ïÞ>å{² ‚HzÄTØ÷“?NåB²ýî•<*cs¯[k%ú‹sVO7«ÛCÕÅEà ßjTw{{ CÛ*œu|ApÕßÓ´eHœq ¯±Îr("÷ÓË[.œx ïAõj%(›ºDÇeÏàBÛ Re î¢Ì™<þØSŠ£ÒŸ ì·,2Ë4-ÐëùË ÞùRíì=Ð$}Z\èœ7Þò<ÍØùØ¡?ñM ¨ ý‘d‘$ÖŸ4c“+Êu•¢Pz%î\ÝÔuu¥Å0bÖ7.9¿ªöÒ¹I±B ³œN ê¢Ñ½ì‡}t&ß®½ŽîÉËÕé ÑBœ¹øT¶èõtx ( KUXT9®|çP/ï\K›ÍH~àH I%@ACúì‡ðÇI,¥ ßFØ!´™c͹sÁˆ&“ÇVÉ5 ÆÏ%i[“ᬵ?Åûš;Ôe˜@8t>5m½¬Aš[µÿ®‹+èž¾²8‘Zg+ûKÜH뿼lAµ«~ ¥›ÝÍætõž»¬@ˆŒ:õ×ßsÐÙµ`>K2Ô‰«ú¸‹ÆÀ0Cõ¨oO—‹v P³ÊÞ 4ðí¿[ö­ùä÷t*,Ûꘉߒ´!XÝžÛ’¢7ýt>\Q ‰<=&|°„ƒ™jpšžlŠ9ó:¸ÉÌ¥±)µCÇoõOl]uF}¡ŸgÕÎÛ ÅȼâÇd!~ó¦A@›UB®a´5bFEóEîÙ¢²¥äYÌÔÍ®Dð½!ÓÉuñ:¾¦™–zJøûI8Wþtd±¨¾ÀÌ?jdå×£„O¿~Ò€Eˆ˜d2×aÓQnW²äÒ߀ƒƒ½z¯a¨6 -Ìe|Î.¡£i‹òÒ~oZœ4ÿÚ5wƒI@ÇÑ¥›æ¼Wv>ÕYØDNHÑîÎýi¿–ÊqÒkoÔ€§¨«ä³åýVüCåñ•ôÁÈÞ•âx*ôG¦4ÿßK¢lµ.Åõ¤©‘K ê<ë[ž="E7ïN‘©€ä,¶èÎhÍš–ÔÇhû"l‰{ʯÙpÂÐ{BÝO–hÊÙ‰û2BLã¯fqm±8â¨û3ö<åÛ3¿ô¡‹²‹HŽ®›™ˆ—8ª"öø©³ EµQÀymgUÎ11&«?™ÜwŒ:òÖ'ß(‚б¸O »:~ù šqŽÃ)û>FÉúRóZ´å 8x,GÒ‹LoBxý~áÛQ¦ê%Œ‰¹JýIæ=žËxˆà /°Ñ[q[$6;4KuÎ.±æºæV"+#R÷VŸÂFõã'÷îÓMXtr¨ )då…qzñˆ;ÿÁqß<*`;ã²}óâÏÃÏ5Äñ1ù¼5Õö`±®ùŽN­ê¿OÇMŸmˆ—jF+ïq´ì­mÙS®>'=†Ób¼™ünîû²£ã6ƒ/È$ƒú¡$ÇØ¢H/@ ²H0hAŽzH2‚H9/2®¾Óž³T<¸÷IÙ€Ïw¨+ŸVzœä’1ú‹‚K[hŽoò³æ#_cçº\ înë+8íP$ƒÍ†ñH8ÿx:;‹¾3êÃrðô_g t¸X½TòH4Zª‘±eŠ¿èq'ðU{ÜYGøcÞß]>© ‚¼f?£å‹`h\‰eõ­¬ ÝÀ9Ùy>»þ7CÝb¢I©È}Ïg{¿mâ#ÙñNÀ\y±{®µN‡ßîãÉñà ïCäMѨ–¬§À›ÕZ–´pXª¥³µá‚ ¼ç ØDjúhÀ‰ùgDT*¢OeþGr¶Uæ#¿ù¿’Aâü&ï]¿š«zÛÜõމ É\q¼&>+ I÷Ö`g9¶=ž¯cÇ¥çï/2ܘ ‰$|Åw%àf©°Â]¯ß›[Mš´Íéº_~Sµúþ¾8š½†N Iö}+Õiµv¡‘¶¶A-Å^pÝ<ßÏAº«ªÒª–EaAA@ S9C;4ÃMÒ°æ]Š­\¡Š…숞¾ÂÂŒ}² UÂO L@ ‚>¹]%Äç \]MÊ¿jãt*db,9MŽ£UÎAî;îx¬K](&ÉHÙÈxgDpÓþýªÁi–‹v’}-³Fº÷¸Ôæ§Ã@óᆀšEXæóØb>Nº–ÌþܸԤêÊgÙ«k–ýÜXó³™è_"YóÅEü ×ëgÚ2µ's¤3V¯Zw?áŠlH–84tMt}–°PâÄäg¼­P†8=%Aî6Ô!nÃ.- å[ÂJ•]& •RÐ2,óŠ´¿Ž„ÞCt  î~õqÇ׸…'Ñí÷ 剈¢Ý^”õV>;ìãCgÀq †°ûذòvÈ>œçº°)Bg4BŒðûex å@üÉÙö£#øÕC:‹'ÃwH–YoºuéZ˜ÿh¯©’šxç®rÈí9·bè^s!¤ MØ k„~]|¿ä]6FÀ]ä“0w ©) · i²Bw#à\JÄúkå«(­q\qÅcµˆ“ð &å7h«„^{¡‚Œ*K{±×RPsuÚY—TÜ%uÛ6;Ç"\ßKHÒ=r|XüuÆ+ìo~õb®2]HfÇÇ"`¢æ…°Þ’@öãXzGyÝéïfU¨gçeã(Æý4ÙÐvЮ¬$"b™ŸPwÊ"iËfoqÅ”™–¥Žøè£4w;lèá™§Š‹dÎ÷SןÛ-Ì»W¾¦5…£F/g~¾m™%OÀ:»z¸¢G‚›˜…^@ÐÒûÒÉÙTl»Í9çÍ)…÷÷Šˆëâkç©FTÈp±…€¶¿Ù¬ý²Dˆçº.N8¨ ¾¿¬Ó4j]Á÷æ¬ïÜQ‘Q¹nõÔä~­Ç“6ÊB[c:C×&}²T‘ø`¹U‚È·)€{ëm ;åXݲ_½ ´n#‚üçøÅý‹¹â(|‡ßt•B±^ÒGžàЍâr 3ÐÐpG¿lŽkÍâäÐÏ_lþzû^ç"ƒ«V²`sTØÛ­ËÁ AÄÌóI ÂA·’AïAµA‚$ƒg$ƒk$ƒöAéDQVÈ"ôA©ÊÊÊF†Ê>!¹.eU8Z¿²ù†ê/é¨Ðdï°øµæ9/S·”ÿRÁ~2H³¿Åq-AÜŸ~ØÕLmé“eÐ9ö<ó¿2]—HÇØúWUaTÂçYÝ =À–ôÔ¼1)ü[çÖûüŸƒ Y/ÁúR02-ÞÑ37ÿ.‡»¬˜7´Ñ Ç‚,¢÷u™ªTª·q¹ºó 4]q:Fæ44U8óª«wmç Òÿuv)SC¶óôÓ4ìãð–˘µýXà38Ñd¹JZzi™I|¼» Rô›sIK•sl‘¡fF¹²#¬ Vø’ULJ””{Ðé«È~ëQ#6Í]ý%8—#¡§öÈÀˆŽâ Çß9JÌ‘ÓC@UK‹V|gbÃߢˆöÉÿ“}^~qô‚78ùŠ–îŠ“WÃç\-®ä“¸¿ˆýMÎÁz”Ã{q+ªCÁW»tîÃá|{qßXâïªnH#«Î‚Áé6­Mh!u¸o4‡mßwc¶×róàé»)Þa¯ ûÊà‚)dìþY­å¢×p¿u¯6þÑZ÷ë ïÝlÃÚš ‡\j#=t×]´1}Ä›‚¿¾Ky7 ŠÜM.«Q'_lA×/1\5Aàûï2n!G£u7U­²A:æ9‚ÈÏHЭCΫgðþÙ ˆ†âÆ’3Qáøêˆ##‘Ò¬‚+_¦îÅZÚ ŽÞ÷Ó÷` Ž·Š¢²ßLÄé 7·~3±{ärP¸MdýÉáíÁ|T6}¶gÓ¾ÆWn®H#îÓþqÌ{Öä%íákØ ‹ÆS£Ó`‚0 9¢Ý{"W™eöË+ð•w Žu^7)ulAºŸ‹€ÁVìIXî_Ù ‰ÿúý|Ó>ë³MÈ#Ót­u¦™ ƒ‡ª’äâ[GÝuí\¦ž ˆ‹á„ýòWNkr—íëÜJé[FSUvï|¬F£›QÑ0AlÃï%áÚ õócïOK$fÿ°Ù=d>Ù±H¡{óú˜ï|ö‘þ’#ÙîÁ;EÑþady«Ã±üÏtÛF’õܮŷì6 Œ…–30ÁX¹¿ [5€ÐáïU 5`Þ¬[ÔA $ä=¬ð£]q¡ªò®`³‹E¿á2j}e½ºïÂT½ûÌTÜvÁv7ÂË%™¢Ü('œÂ"þ¾«`ù·ŸìVÿœ‘q¸¢ï9úÌÜÒvu¨9WçsÀB·l¿[D×^V&(•ëÑÜú‰Fªã. ÿ"OñFõ¶/¸Å£× b€p©°aüÕ`’ uÒÆçòc"¿¢úb!&ù“|ÐÐà9-0»gL5Þ>ð7H8ŠªU­$µ—Ùùõ¡Õ²a ‡)DM1{¸Ö„ Sç?–Ÿ”xóGís“S6԰įj ýL€Þ¤c;^ۺʿ•žºé¶q¶+¾‡5 ŸVׄ|ÔÓe“ìhkЉƒ™ÁE‰õž'çN §¾æ0_ÃW‚¥ †3û×¢†ßÚ„I—¡éå½_¶킬*éæ&Çqˆ‚p’##S·!qYg^Ûù]æhŸ´³æ5lä˜Õ+/Ñàñ¼“›É¯O·ªN§õŒÿªcA: €àš?¶><ÑC*ËÍå)¦¡ œ«›.¯x.Þ¯èÎóóËtˆÈ~›Õ3Ÿzíjñ_™°Xó¯,åšZ6¿›rE{¦óíé±–zªiô–àÊÓÆ¿ØEºÞÃüú?â^"¢‘x¥’<à·¦žmÿ·(£DŠ,Þ{Í}R1C\K’ÄLOÙ$£íê•mÕ—è  üòûêe)‚–GùRý­ö#×2䆩öç…­šàóܤÙùãÑE–bÕ‡Î^Àv°TSU³‘ÿJn“lË{ÖA`¨\i˜Û(9êac’Ö?›˜“Cd®Zÿ âöÅ͆GÊ­¯pÖ:î ê£Í£[¼"×t™—»Üt ±ÆëEþ^àìNÖ ?[¬“4×{ßý/YcoÓðZ‡¡Ø‘mïH4‹Ë–MUä°´%p¼¤70ô¡£%ëÅô°áÃ0Â0÷akÏ–íç‹#Õbn55cå$2“»”±~æ÷G‹‹kE™‹èîél0¨AdÑPGüAÂú±_<=1ê6]+^çÛšgÓx‡~"4—ý:ƒëý>¨õ2ÚŠ p'Ȩ{ÖŸ5Lh £°½8§âFB¬¥7:Ì÷$0÷Κ‡»¿÷¯l°Å"pÕp¶aúø^Æ2{º±'uïTRZä9êi»Èæd© 9©ä-xõûÆŸ¹­Ii è{†:”~éó󦑂{ÁdÅ¢ ób¶‰_dر´±Éí”md?åñ-Þ0Èåê D óá÷§«‡ú|¶Rk¥wò™£éïÄxüüD×@޾KM‘‚5—õIz=®²ë…ÔÎ?…<<”´ün\Ä|ll =ôû2xÎ S­Y›ËòÏ¿SÚÐØãS­ã4­y˜][©fAˆˆ›T–™iYña“úKly3Þ›è妒ØøØI, Øq·iB$S¥H‰š¾„2•Í×ZbÆÒâ_×°¨‘Näùñ³cÚ¶¢_q|Nø®‡Û‹Ä“u¯FÄóÄ\kÛ¢›ðª‹ð­Ögä_…l†.7•xŸ©E<®Æû»T>ÀTçØ>ÐëèôkCb”ªîªb9²Ç%£R2¬%gxšás¼>E“éò“î Í©¨ ô¬hC%`5ÑË̇¹Z¯Wv\¼t¯eÝöC¹^‘õäö`^zqµÐ騵ØFîªD°Ø••›îÁ¼Å¥Ph'ˆ5í›—Þ 0«­FL•®ñfü@1¤MÆ‹²¬È?ÝåQOºðÌ^ó‰‡ \øQŽÉçÕÀO2Èñ#Bª]›iÁ<ë%TÌZ-IV!‘O[ríÒÐ-C×â¿MnaÅo*‰%™Ö „rM­€&ö¡Yv?—«ƒr=EcÀª~¢ˆóèAµz‚«eg;°nô&m9¼$uÚEΕ—7@6+͟еì‡)üLÈ{žR‡å êä•Ñ»#ÅN3úŠï^‡ý'ƒ XYÞ΢Gò1u,Y°¥³±Ë1Ž)5LiZ#ãkéÒ8ËËø¬,€ó¢XÆì©[HÙ¥OÂ_SÔYj—)ÂÆùðQFÝIÍì]Î@˜¥­58°<)¥»®ˆ¬GGÊ}'ZzÊÇYýA;£Á‘3Â!lÈÍóª»B†½Ê ŽttBñÄÙRlˆºž /«73,vÅ`p’Ç-[,v;ƒën”w¼Fïš‘=æëâôñ·ßnH,ÄK®°QéɉêYH÷â# ß`)–)7nŠij=- \ËãX:¥…Ô0jÛzó=o8©+HÖVÿ€2Í×ÿojëъʺ¿OrKEh†äݾ‡ÒŒê•„íÞ*—L–ªTy›H$îù{ISë†íùû¯º´¯hHÿJ>Ä}+M™{°,0ϽO•óFªé¨pÝ ­]€ùTèb32×ox®Fæ)h{%*®r©MaNÁmÓ¢KÜ”V|šã]§tÆö³øe-Ù t°Ògô‰îÙ쬮Æ0ïõ*÷ 8ISE‡æÁµõ–žÅ)µÏ£Y]úê.=4¿=÷/Eq‘³ÖÖùfÑi½¸ú×ÍçàÓH$‚NWs-Ðy¤Æïì]ºO-§Þý€×Sèvï"µ{ÿuÍÐóðX8J´¨ „$B! €„„€@BB@ H͆Π²Û‘¯ŠŒ¨þŸß&’‡úúf37,óÆ…D¹sarÁÙÑèç—Ü/Ì Àƒ¯¸S廉:Éñ‚2)Q©;.hCì3„¨–+ävHp˜Øˆ“);aÃ*H÷nØÎÈe75»„7.3s¿Ñ‡+É<`?2ÛÓ&¶‹÷x+´»ùÓüî •˸Ej?2h(Èo‘H»íZ×R[•WÂΛáŽZ^¾Õÿ½{1é6­™¤[³’V0V_‡í{7à“ãó$ën¶Dé|Ô„ÜyV™ºëïN„HJ×Tºª)/â7‹EÿÇRO‚0ÛÌ¡ß$О7ë·ÌÍ"Ë¥[~±+ÎÊaåɘPeóSB¼W±ÎÍøó[uJlçU ±«WÊÌ=¥?„q< Oz‹Â{E ›cýÎJfjíµ#ÛÂx£ôúOþ_;·óÔ¯î~é3ˆ¦€rEôƒ½ÔíÇ.[Dº'è4±eWÚ+.Ú+±1JJo é¶-Gû­ ô™â ·‹çZ=^UWÅ!" ¢d’`#ö#ýÚc3½ti z©»FN÷šñQó°¿âº<ü4öPæÃ¨ûürN+¤áÿ‡ïVb”¹H5! Ý»-¿<«ØCj7>ÒÔmÖ˜ˆI[•÷MÁÄ÷áC=ñv¿³gœ@ (êû,"¢Dý1mgî:ßÉÝ4EômS;qМ‡ÑaÎè¢ûóÍ;Ð^KMC}—î*®³ÈþÏšå~u®¦$µ¾'Hg̵fÜ¢É :w^rÉS,ä ÷ìŒÓý j*±°WÒDõÞ—_3c8cþë“å¨[«¥LîŸÕgͬE¬ˆF³têiDuÈûS¨v¯éŠò7rV ±kI¿#Wê½6ÆÏ˜ šëº¼öó›òZ&tm‰¨žçèÖ¹Ùë&S#ñ°ym"±QëxŸ9ÁJc¡#N·=é {³éfÿaB¼Ê}âNWï¦ä[ÆA¨ÝјPÃÌÝ›÷~„c"Ó„÷^w-žµ w+Kc4@¬Tô& 7“j¿‹2ae kS m&øæñ;Îpì.¥ë3›ßëùo¥}ÕÁi³„rÔÌu¿igÕCóþ¯6T/3 ŠäéN§Õ ©ÓHÁ°10èK?©NàÆ#¹öpwîŽZä4ëÓD¹öc¸KßIÞ}ƒé¥ ,‰¯4Œ2(ÇØJZ˜†ñ­µ›…S•ÚÇY`â´ ñ+&"ÐßêßÔ5ÁAxþ½˜5Ôð‡Ì©Cæ4”òœ¢ûÌjÌÛºghÉo )ýŸ—à}aEt×nDÓ×ßFªÊ"ïä7Scªî¼kËWÁn¼¸[ª¼OÛpOºµ„zhÄ —#À•Ý#%ëó¦á&ISçñLA°2½€–t0°+ßt;=ú?XÓ” Ÿ°¥×†BvPl¢WÐØAÏþÚù¥'NŸÞ‹¹žÔZlcV"ǶF´)fJGØ9!N³(Ò@ Ÿa`DÃéký}V2À¦©Ø¦!$ÉïéTD‡éçêËyª&LT-gŸXjgK(&¡w±Ï¿e«Ö¾*ÙI{*et剢漳•NÓEéÙüäLáÕHQç–Q²Á ¨…álû' >n‘iߢ¸tÊ»µ8PúÛKqúÄäÇÙ‹þvÚÆÝ"±vââÏ-}ïkkÏ]ÙwTÔ°#!Ùhô¬yõ5;ËŒ1$RH+$‚°ÂG˜‚ëС‚~üÚúSEü~qÖŒÌÜ4g9êæŽSФ“”jóHË!·+/ÿDêŒ)bkú³">»ZƒŒ.i ·(vÛa¥çÙfÁTtgœ ‰Õœû‡##ûrí[·2ÁÜôÉ-˜yzjÍMiÇûO2N‹·gUÈÌæ’2£yÝEÑÌi’äýغêÌS½¼Qtn¸þBäQûæg5ÖmŠlºç¶"ÁÏjGt¤pÌeg{æ9fêsÍkgiHYE:¤ç'¥}.ó@zµ'Nƒý†›<„Àç ª1=Ž8'½aj¦&9>&·éj1ØÚú™& tÉÀN®»¹rºJPj¨êʆ·'øÓ™Ä‹ŠøÜš™5Úå­4"‚ öøIR‰kÞð?6P¯½‚¸ A¼]gõY˜ÃH‡|)Šè#Ë¿™ TDÐ …66Ëô 7<õ~þkÁÒðòÀ!ª <”“óbÙ K>É%õÄ ¶ÜE§SâË8ÆÏL5žƒzëjGƒúåB4†Ìh³éWÑYSéþÝÆ²ktþ‡n~»œÊÝæÓ7RW–oVy¢ù"ˆ‚8¤æ Œ[wúv#/h¨à¤>giØõg¬|Z¤ÅS¨»ÃžS>/î-3–Ö:Ÿ5€¢ª~Ë­Û òë°xÐ…m)èË9*Ùžà>™D¬ ÷a‚©Ð+PsµI(åBè'å?Dבd$ºˆFi†Ž^–QMÏFÒ¼¯¥ZÛÁ€}]ë‘ôk· ŸeéÖ]êU1ŸR'-añ3ø¸Ù?EÜ£/=çââk.µõQNª\Íc ý¾¸qú½S+¼~Å}O[ÐÝx'w*kf½õBØTø–xÕW'¯}…õ@N '¢¬\ƨx"‡Ú/Æ’ý['«%ë5Þm ¨Y AðL¾ »V^ö&*_oVì7±­®ô£ƒØ¾þ!¢õŠ¥T¤ì¥žã”¹R=ßQ<ìk·nÏžÁj¸`6¼Y ®„ózça¬K„/ÂÈfVÄÕé9¶GÄ_$ Ÿ•åYÒtå-kŒl‹ž LÑ}øí‡˜Ê·ŽÉZê´’oUŒí;m²d²`iÿ°ü5˜£œõp¿úŠØöÍß-C–Š•e‰¬ç‰ £ù…ù&ÞPÜáíêá·ëCÀä òùï ¨©Š˜±ªQŽÊòi’Ãñ‘ðþjg¾¡Åý-Ä¡šZ¾ìJtÔÀ¬Zˆ^â\kJ|vš1zö§ñmP‰ÉlìZA%€^Ä[] 1rºÚVÌ&ú‚þóùÏ©ý wøZ C=qW>šÌ—±K. Ma7"Ð?±Bwöº¹Ð¦;%¸ý[Ö´¶ÛÝU9.ÜZÝó]]íŒS°síÙ]E­Ëó„ÀA(„í ç —z¯äÅU6›¤~Ç·çþîÓçkÈ#w-μ+!ßL{y߈|}£81ó¶ÈÃõQôâïŽðPYñíA_¢²oôש󳷪ý*‘ +Ö%±¢>é¬÷µëEßë`ÐOô·"X¾¼pûþ]* Ï•¨Ód©ãþhüìN°ÞÚ*ÜAµšs7$èé°‚wÔŸf …ã«+—˜íåÓ;Ô›‚³u—”cãÕ»ÇHµ8 ˆìh’â\‡ÈéÉóN¥ü’FJBÔQ‘Öy–­ãk¹¦d³úg¶]ˤÃ"&óúºZ;wºŽ¹ ®jޝ €÷…ïvÚƒ/.¼ôÐÖ6³VÛæXê]d“B?Ò¦øp·ÉmÙrè7Kœa73øN§r´Kƒf,Ü«9•xˆjqèì¸Aß´ú ¬OtŠxx&)ì˜1¬ë7áîþHD;ûl)HÛNhCKsˆNüNF&íí?ƒe ȘV§ûsÁ![éñMŽIE¾~%•ı#%‘åÍÎkŽd<õ'©à5\" T²ƒö]“Ùéi%¯4½MV²Dd 'c¼:¾³°”ٷˆ„®ÄœÙF3Õ™ÓŹßGS“\¹àãÙr×ïÏ\ÐQ¯ò €rÛÙõfIâ©ë»nE2ѯ)æ¶­ë/f¦"y5àg_RÀ'ãô† ]6g |ä±ÃN>ƒ²Ò‰ë¯Tà 2qî9׉îcy?ràßäîŽb¾·Þ¢3tJ¡)<ýNÁìXÄo8²¶(h°ÙD´ó _‘Û,ɯX,"˜HïJõ„wåÅËá¾½¾·£æì)õQðf@Zï»>¨˜;¶n Õ*ElS&XAræUûª=ËÖQдF9ñì‚·7g%ùÌØ—hœdiµ#¼Yæþùn)QÈŒþ?Åûl¶ì^íÖjJîÔ|ÿØ_sjšÌ‹;ât+´–+µ¨Ýþ±Þ÷l¹ÙÀ?ô—´óNK£5ùŽ‹áBM˜J÷¾—Êù“ƶ™|è .›ï2{–÷s ǵʔí²Àë)We a"ð·¡¡åß^Âo1º~zEóŒ¡XCß”[£Ëîšr£þ h°ö/ é|°–Æ^˜©™#>.a8›^*ÃoãÁóÕë Ìj2 ^à†Ê¨mÏŒZï«Ü‰ÿï?«Á²:PmB,Š!€ÖŸuû1[ð¤}ÎDï¨ÎÅ Nú®Kn`24¿å-åH6ý ŽÔ«Ž³§ c]XÙ¦¯÷»[˜ˆá&’\ÂÆIW 3IÉI¬Ä7Î_±ßÌ=BÖÝÀ¥IôÜ^n2ªl‹t6k”›U"w’Ò˜TÍ·Ùè/löQæ‹€©+û+D¨­ßaP,}²,ƾ.И]g#è¼Ü´Éôuˆßðÿ6ß–Ó=G°âMm]ôÉ‚‘€×±ûƯ;Yœo­…¢–WYÊTÌb¦“H’TŠä®Žc¾ŽÝ—”»¦M=I²G/*—>‹EÆ)[ôJ«)öÿ9]ô¬œ.+õß_r„ìŸ ã9H>3ëD<€îÃû+Ü“Žâ£Êù8à·á›7"µô`jo©VðÈ­Å~¿3a©f›éRO9¨Á°ð4J7ÙÆ´kkAÑ™Mo’åïéüM„dGøù¡jUU¥jghÜiD„r¤JÂëϪ¼U>©-WëÓJ¤ @)±o!Eı(j>„ù‘8FwOãŒbŽ(1¿aS¨“qý³ïÆÛÞ§xÙ›3;¦0G=`Éy£œ˜Íùƒ˜Y›àµwìå,´æ°×…ü„ùQì律Få"æwþ¦4aD7‰‡Ã tD´†½ÇÕ¿uÕæT3^t$3Ò‹âC®ÝFü  ¶©PÛƒZæAüà3:¬9Ñ“Ö^›© Ù×hú-Aõ×—ÄMi›´&I¾ ÂVt¼bt¸|$ÝÇïgcýpÚ;Á{qâ^h@bµÚo?€H*àU ©N® µ§ua†+qr)nº›[,„6ZÇ®sq#>O©S²Ú*œ‘jxé7»¬§…ôC`C7ô„a`wíw”£v­ZûL]nÈð2ð†*w¡ïÂàHž¢¢† Κµ‚Ak3f sýûÆÇ#3R'ü>‚¬\xà ÕBÖÌÛÿ8ʘ1J’®zVU/ø0Œ)ø|«DÕø]Þ/¼í”û¡åàµC£UÎðkÙ«=º•ƒâ½ÓÅÛÞ§O,¦L(aBTȬiöìÅ3Ð@¹* X¡Z‚+¹v¶[i4*Pë¨ô"ØY|Æ(]˜UºÕã`,ÁHcÙö#?Z²ñù>³Q¶ŽðV]9¶Å,yX» ]Z}[ôÑh?fΓ֗Õ+­Õg"×-a^…+Ý‘ô°Ä aS‚Ç —YõBèš±Ò>¯+¨~¶ãML Ï¥ßR·1Çm®Ø1„œgæ`5:Æ K‡¯6d&) xñ Œ¬^|e¸HäÝ™|¿õv®³gMËBåìQÅ+-,ì&_xëÞ飰°Ä×R€ãŸ‚Îú6_%þzº»˜ú&¯ÑBuj¨©A%=«tãLIWdX<^~a·ÝÆÄÊc/÷æÕ¤}Ò¯_>9b˜ŠH‘%‘¶3h°•éÛ ÷c³ÄÛ[û¾ŠÂï®ægAvÊVl˜—öc™µ¶ˆ¬©Šý²VªÆ¥;í¥×WFSŠÈVçHîà ‚ø½*DRŠzDm¹½á÷8¢w<+a ?»çÉ´Ã.lC¤Ò“[Y€QAÌ<ØÉÚþLèû¹ûb nޝ p¯“˜‹í¶ašl|4 ºo¸¹üRÞûßç‡.š;W]tdöi I5)ê‘@rÐ2Œ„§ ·øØ_AW˜—}­ lé®zèÀتÿaTç¬$²ÁzvbtäEù„EX£§Ý}¿¥³Þ“ðb§7âÞ¿ˆØ1Í4ld´ ·ÎåGÃÔÐí‘ÔîÛ\Aª· ¾Z#Ö £!|\WGú£T^(*†î ¸+#€rZæ½"Qk«*,ÍVP› äQ€C4sWÅ—·màfª8ë[w¸xÙxŸ˜ Za" ½fÙ¤ƒ2Aî#dÍþí2‚¥@ÒÅi”üJößãÕ;b’» a€‹ÿ›Såþ–å‘¶Ïgc³ìT3Ñ"îÊ*&5Ûbf&3KUÿ\çÖ]2OÔ¯4wèÜ$[<çxäÒpš×8Sau¥$ƒá$ƒb$ƒFI$I¸IÜ’ÚIä’ ÉT"(‚?"ßCÏศ›1ýñ²½#wyæêzÝa »LhÛ%q¸,ŸÄr=Fn¦Vúõù†tÄNx¨¯ÒáDÃÅÝ¿M‘l„P¹úlþëq¢á uëÏÞô- ^E¯.Ýg§ Þñó«- ›~Eo·ýS) §'‡¡¯Å±k7 †Ó›24¨7£Æ¹á®nŒ¤Ø« œûA äþjCo–TRaûjÉÚAV”Ô-—ªÌ«Ù[Íäó¬¸ó(@LõYch Ùj•Ï2þA" d‰7<Ù$Ûú]ÇäxÞNʼnî={D¢W¦„ý&w²È¹pÖÖóéü™Ç=\E{”+ï¡Âwirð‚¹GŠJÚÌÁTáÖPí„%d»Âx²fã‘à¡éôð{ÆÃÊŸ«š?Û‡Ò¡žžo²O½×EÙ\É›só,’w¸çI<§ä£@`4"Æ ÑSàâQtKòò¤=¤³îuòád±AQ„Þ’›`TÛpI—F±±vðô®È¶î™“ñFÍÉJ»C?:_±ºýŒ Wr%lðr*ŒÕÙuxoÿ܈þ  Ä…bÔRnS³Rmƪ'\ W[ Öc°üу^Äd™O˜i—Ê=!®ðËMº+ª{£WùÁ’Ë]|ßõñÚ/(ò¸”WȬ¢¤Ý  ~Ù»?LV‹š¨v²¨±ì@Û¹c°Òãj›{_¡Ã Zÿß ,Å>éÛXÕ ÛGû®{›ÓañòU÷%A™k&¡^Ûjå™´ÜÕÞóY§Ý&¢˜ÉȦrk?ŒïÈ»rN5in•TøU};ý9¶NW$ÀHé0)¢@ÿLQ² R')T~¦"ÐÞå·VˆÌ/IËÒØ}‘¬ {ec“D›KìDÂØöÖ)«ˆS•Yb#Á`×Õ%&õOŠgöOÍ ·•›"^ôÊB˜$˜¨í´WZþŸ³K9Hþê¯sPõh”ié‹£•¸±ÜÛ¶v`á?u ïÑŸD‘B]ž¯«Ù¥WxÒÅß|¡êH,ÓzU“ÄÖ&–àìõ$×·»’cÀ‚e'ó*.(€)øfvµß´\Þea†ÊÓ¨V5_íƒëÇõÜL;Žcd±º@;·E~åmSþAÈÏüT¬ ô·½¨b_•`µP,]u ¯ÔT÷ £÷ùÞ}hø‚^=C}TêVê–Í”F7GêÙ\^ Òº†c2ª’­ ó¤¯ECfŒ¤Zq ³zE…æüŒä+ àt8öžæ3Ì9dk³êï½ë–+_²MŽ©Êùg¡vˆo4öÀóðÔ&¥æãq¹/†ð)9©þÖ\¿«ƒ²êþŒv²Êèe —ŸÅ5xNCeáa³¬»ÝšÊIX­P.ÜZS¬ŸoîëÎÀ9ÔìÀ… >Ã¥‹jóˆÅPÿÙf¡¢Øzêìì"·»‰…ÎVîKÓ äÔ:‹Ê¿ÎbƒºkܨOqyñ<ƒd¾ öÖj›LŠâ ¶Ã¾ÛlÔÖ¤›®P<}ª±›gûmáœáó´p ÇÊ€ÿ°ž,“RÙPrUÄMõy@ .&k#™hU’CãlÀÙ¤ÎÖ…Å«Zöšwa­¢¹Phæšñ©hÖžCÅýoû\Œ´ã´ÂÛ §¤šr- tŒ'wÓBå‰Õ¨uðàß8 úcSÛ}¬ô`›ò¾È'oz€ß Ñ ¬¦YÙG¤ÄM¢×ά¯:F»nhWùðz4£æ¿Æ‡­ 71·f‡4¬bhCú(ºbqÄ•5B*sP͵ØÇ¨ý‰Ë@:ºÕGÁ+bŸèÔ%לúj/PlÝ^u_ÚnKRSŒ?9w¸ëŠæ;ßLk§oPAÄI,ª… iO&5IRSÚ ’\’ÏWøaX $@J_[N‘ÙÙŠòÎ|@ƒ@ M, #aOaãÝôËäñY#¥ã;€ô4«¸Éü5~½í,Ïç^ÜMè,u›3$ôw<ë–¶ºdÁøÔo‰£B%Ò®ñ‚XÏü¹¬ÔÚ¡²Om=ùêÇ9]‡uûº„]‰,zXÙês#1\QâyU^H¤ ‘PÚ¦}ºµubò­”© Ù$ÒˆØ^W„èð¹ß.j¸Øòëž*³Û#IõÂt3Ñí«—nr6%[qê1¾ËÛtåæg×ì]×= úÊAÿ°tyÇ`w\˜^Õ{¨ mŸ­Ïâõ0Y`£—álÔ¾zLêþl+âçxûøeqÌè&cEO»ÇùÍÖÍsÍ(ÜÛ6Ô7Y"æ¶SÐÌ Ê«Ý#H4Ó»˜c‡‘ fA<ç êvh01 ÃY ‰’‡Èñ[Osü˜V°•î·zú:¹G[y›™Ž›Á¾Üà Íéª,̣Ѓ&žaÓ¨bwmM’Gž+ÖQBE2"›+7?Àó@Â4¿Îú3fìÅÌ8„#h|}ñ•Š¿r°Î¼õ”¢OGÎØ+MFÈB½cfÕ }uE¸nzÈ«c)jÿ Ñ4Ù^)(¢Ñd]—¯ÍŠ LÏ[µ$e¦ B›_”Ó<Ï`R±n Æ0M4‹ÑÕ8;Ôä-] ÄÌ!iuæDibc§¼ŽpÃÒA ÇŸ>‚7F°hLŠ(Ûë6o* C0c¨[ô-hv€d™ŽÙ´ªæd m:˜—8áž1@Ïp0Íãór9§ËŽv®e9¨Íg4^ÉU¢2•`ân!e³€ëÚºÂBG´Äsé›Õ‚ûrA ~ÚžÇÁ&†Û‰<#3 À×#È¥kÖ#f6#«­£YÃùq°É‘…:4Ömu:PYo˜8ËÔ¡ž"Q€@ãaÍz?>“³/ñŽú®ºÃg£íàÓ¼t­]*š4X/§iY¾hûYê¶Yö{6°ƒ7Á‘ }º~ÍÇé”m$¬,láíî<È h›þY„›nÁ›ßB›Þèì_8yÜV°8t t9öhÝÖÁ/ýs ظ>v8ɱ´jÇ‚<ÿ‘µÕ´QSÒ©Õ*=}_Ås“Ö¡‘ÿŠæ„öî©Qóï݃åÚë7׸…sò=ºmœx:Jü܈zÙuÎ9z#-µŽs)³loTRýÒÕéËXÔ»¬Ù‡EnÕfLþÅU²ï°U-M“IT42c@ÄÀ„Èd?„a#D2,:tH¨7Be“$WÄDÑÐ"F“–˜¥6¥µ [fú† $Äv’™+J±¯¨µaœ^â#C?ñB|bí`O.ŠªÖ~*íû[pT±·Ý*‚XÓx`B Õ+uw§œ’4NÜxꕆ¥ß/ðQßÔ56©mÕü¬6òów<Ìߥ;Ybš=ñjUEëû¹‚Te«o¢øôU™3\¥6aË¢ªzÇN¾¶ká·6gÒ³¹,L²ÇÞÌhÔVFTb¦×ÁA$ñ¶D:N5¢Hˆjú00Eð¯ß¹Øš¦a®šNš•cÕ²¢î ©Ù3¯?{’ .fººˆœþ—í7[YgÙO)´=ñþD5\a…Ö|–1”íÁ;®3UÓÃZÈÁ¯§UtÅ]ŽDÝ(áPL´HŽdUR«cš+˜•ˆ«!‡+Þ5-G¶9ºz–õ„’”ûu¦0ZSíÚ5 úÇa°¦Ø¼’ýN Âêo㢓õ†„ʪ¶«*­årI%kNr)è_ ØA" 2©:6õ§)ÎRÿ*®TºF¥²ÃMyh|,áA&¨m·•i¯!áÅÓ(1.,‡c‘A³T,ï"C*ªTúI8®S˜Š82… ’wÚu…‘ñmlT]z\OtЋÇun’oªMÔïÜU"C­%b,ÈaTÈJ!usi*/ÍJH¶û±†«]kÓ¥{/G$èxæåÆj¶1ULMÍ—ÅŒXb†÷\A“jÚSˆ©s~¤¦T·zåâ Nž(ã‡F褶O‚p¢!_Õ¨ÈR‚Ô —Mhàc#,h€àmƒ‰¿JRI!Ì´cY ˆfSIiø™~å„®jOòM—8#nPÚ°ˆh"ã!´ÆäEÏд`Ë$ìø>ÓÙtw¶Ž«ìÚSé0Y°Ã0-ÔÌ‘H{6.`ÄT<8›JÆÁºÊÔ›s ¤3 [s¶äª5FÏ#bjÈe#$d ªoœŒ=óh¼¬ÔŠ…/ÇZ©Æ¼à,Y…`AóhD B m"ÚlHM¶ÛrÚ¦aØ+F(b¼b+»«›sm¦„˜ŠÐª´vmÇ!EìéF ¼þž[q‡‚Ò’àH0+i*8朻B°G”ñ™±¬ŒDµ ¯-~iU8.¬2Å4¨µÑbÿø"E¥›ç-&‚Ö´`‹ûž-v_«^É\" îdȪV͇"0_MD aŸQé†íjظ™ZáhÍN‹’”—8·: ’95B”AG0ˆYi¸Tš<AyÂL„P`‹QUd™‡¸¢Áˆ LxY+LŠè§N¤ÇÉETÓlm m±ŒcmNR( +„S$ˆ¾…0ŠN¡ª*€Ëèý‰â4j”J9ßi»R;÷k9U"ªZ48Üɵçzï¡éž6–÷YÖ¶ßh9Ø— ¬ºìONèØþRâ(ÕÒ†ò¬˜IuëvøÃ;W’A±ˆfÓ±;ZC“•f\A‚pU’®õç-™ûÊY6ùšô/•N£ 6ÈnôçÊigÍ|RÂÀ& IÑ»Gã™(mTÑ$DdìY™N»Ôÿ‚¬¥ô¾ •cdUQÕ²¨¨ªƒ”jÓD"mõ6oä*N”92u™úçe6s¶èÕxPØjKÅ]Ç%6A2j#J¨2]€TDH%n7‹K -,Ê‘è³ ˆHŠY©FpíÆ,\© h®[a‘-* e®µ¿•[MºÖŠ”Ð g÷X¤c¨²TzèLè8*›™â\ú$lôxÖQ¡&Ö½]Š+t¢"ib¥Õ¦ Û$´…@ ºZqšR(@8€èÛVļG„*µ´†JÝR¢ª8 Œc΃„iQDâQ"â+5OyzÝ}R±é%u JôóÁDÛñ|‹K¨ÚPqÅ0,Ò ïXÚàì¿*õbì¼7[¢9w“ÏLÜ)sÊ%:T¾"W}Ü=#O{^er°':&Ûe=qˆ¹E70§wT ÖI§ÒOÏ "¬ ¸; ÷«‚z¼´8ZÈ,ïFŠ0˜ à‚ë盃ÏÔ¾¿ºÕFº·¨m®Ã!Â÷O—½ ßUG®7,‹[™´d~7Zc…Ð7HO)eêÖðN6lŒ§X‡å@&äÉ:ƒ@SÈ–«j€È0&!÷ ã:爯¹<&DwÍz6F'ó;â=dµ1BVŸ£cucmŒŽUjf~Tùëh{Ú Ã!^9Æ[l ¾Yë-v67ûv‰eNêëlNRç±U^ÍS--ìÛsÏÛ¹ÁæªÀy_+\<ç ³mDe@J!8}q¤µúáB2’ËßtÌXDÕ‡&–=3Þñû$¸!SÚå €KÍÕ;¹Å݋é5¨ÖÉ·3_$8rgNäJó/ëXBcd/²Å0Á¬rW¹7KÎ.>À¹+ÆO‚3 1͹øÚ-d!_) etÁQÕr<-ÔâgE;C°®[Ì¡×Q^?ê©½Š¬Ô¤ÉÉü퇭sS@D„ÁqÍ{A8Ü1ÀÌzþådØ2Ì"˜aæß ™ÀŽpÄŠ#ßðÂüA^:$:ý"HÙ–è›x Å b<¥§‘b_èÓY™°Ë‚Q #È €Ï4vº‹±«¼Î\$,ûݘl+Ô.É1šîÎHà‹^ËšæÄ£·ø»’)„„ý€ggplot2/data/midwest.rda0000644000177400001440000017120112540257620015104 0ustar murdochusersBZh91AY&SYXvþ—cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà¦~ø>{ß:Í–»¶í\jòäû³®Ÿ\÷Û¶{>ujûÞïwÏ-°AHH¬%k 뮩ë›W¯{·>ÝíÞÞû¾íîûÝï½¾ÝÛÛë»:{[ÝζûÙïn¾ù÷)‰C#ï`;¬•_m¾í^½vÚRìÒ©öÍîK¯»Úܦ7³^òï{w¦]÷²Ü+¬eKÖÝÃs¶ÐtPª¥ti×N´iT]ÝRhmÜ.ïm¶ë¯´œÖs½¾ç½ ÝgÞÌø½{§¼}ï¯{kéžÝÖ ß{ÇzGh+í®´*#½×½Éß=÷uJݦíÕÛ¶–î®¶ªjŸmÏ´t³¹Ï¼g–«^ÝKï;Âh[yuíÞñYÔgWÙ®­{»³§kîï[6õvV»»îôõ½zô«Ç¾Ú÷ª-ݹ}ï¶ïµ®;ºsÙåw‹.Öuèh»këå{îj¾Š¶¶=¾ïWžÚûyÞîwßw»3Ï®ZnÖ÷wQÝ›n½zÌóï½y﻽ßy÷o±×_wwN÷•¬ËÚöë=hÏní™El¶ë¶Æ«zÕ»]ØÕ¶®<íÌko­Íµ*t×uÛ™Ñ&®ÖÓSrh¾Î*š2@ÀÓLdÓ# ‚`a`#L&L™0)°Œ#%?FF`` …S 2F&€&˜Fba0& Ñ„ÀÓMMÐ#C4 4ɦMF…<Ñ= PŠÈA É£L&˜™G€M5<2Ã@2 M0&Âa2d™…3F1MOÑ‚)š`“L M C“FŒšiŠ…S 4Èd Œ@!£@i4ÓÅ<˜&L&¦ÀŒ˜ša0 ÓM22hi¦šb 2i¡3J~ši P‰ B 4ÈÈ2Äš4¦ ™“ ‰€ 蓞FÐ&¤À M“H``4L44i10 ¨1$@€ŒM`ôL L#ÀA= M00 lL €š4ddÁ2i¦L&š`FF™2dɦRÏ•×6¶‰a=Swß)Ð+4Êqî–ŒË]»´î|°Ôî­ãgaSöê飶;oG¿=×û<þꉬ¨Ôó9!$ ]rî®ç¿h°M Ný¨ ôªwf‡3„BH›.çƒCÛ=Šý‹»ªiûцÀAƒc²Øixê'?ñi¿\a ˆÂ$³ùø«w{ ŒƒÈ¢FH"ç^”ôoöÜ5 @ÍÖûÐm—gì}>¶b–tó,#¬•(ïsìN¢zŒ¢ìÑo;RéšÄÄÇ¿–Ý®ô_·èýâ‰|(p~>­òBó’SMšâª^®'qi¹’¼ÁûŽÁfƒTÓk ƒae ­ƒý ‡š²`åqt6ŠòÆdŠoÙtÅy2i–íQNoÒ<¯Õ PÇG˜£!þ’ÞÐ?fò-aÝã.];h¥}ÙYUK(Œy+£ £¹Mµ«IΛ¯’” %I¬åíú©ÂµHËŸâF´v±k]N KbnºÇè¯K"çg¡Läà~úñGpòoºªg‚ýÍÍã3§ Àt¿dpgiÕhª¢ã£ñ«Lµpãoë×'tdÔjnN´Ñ4àgôìÚ¶/V›7ìgصebýéuƒ¿—vØö4•¸È j2~&f~V4*«dÒÍ;¦F£S©H  •*±£ç,m‘”¥•žL¾«J{²±sh%³Í b#~¶i §Òßy6X¾ÁQ—Jší£g7žf´‡òõ½wÛÖÚÌøéOs5àëªèf*@ÛÎß`ã_Ø> t_K“Mç“ÐJe³ÞðôðÞñYÛ~¾¹šX+ZüÕ›zš6ÕšŠe:œšöÆWÙúÜ™Ú<´­\܊̾}Ýü-Ôîm¬Þlõ¼þ~žª˜Ò@:-éÉt™£Ùbø×k^+‰IÒmé¯Ü|~Cã¼ÀÚõ§ýM¾ÄM3NÎOsj­_Ço'6©à¦œ˜Ä qz¿í“ÿœ`e%Fý^Ô¢;¨KDtÑÛ¾mÏZ¥üÝoYîÝ»·`ëk=;‡3YÎçgùÜí‹>P¡DÒ… ) ÈP§X™2dÉÖÐPP1ÐPŸŸ$H” .Q"D‰ %˜·?>H‘"D‰/ÏOP$H‘"Qä‰$H“7ßûþâoâßáþÿ°e¸_ §ßÏ¿Øhü v:Ö18Ó¿òÁTöç¸MVÃCÂÝF‚W3)dÂð­¯m¡IÚ›Wèq4÷ú~Úˆ°‚ í'E¶ûÍÃ÷Y6M›6lÙ²fÍ›6lѦ£FrÍ›h6mœÙ³fÍ›4iLÑ£FmY@\¬q§¤k¶êo ҿ˹¸4QºëVX!ëXÿ¾¿“ƒ`Õgu?5—ßò߯o=[þ¾Ísûký·óßeAù šÈõ(SÏÁò§QØE9ÏÙIJGïhtÌGŽ $bäÑ0„€G%r!ûÄß)Ó$©zlÙÓ1ÃQû5Ðèt?KŸ*G ËŸ=======—žž.^̹râK—'0\©rìeéK—/X\¹z‚Ê…ËØ.\±e‚Å‹,ÈX±bÅ‹Ñèôz:u€ƒ“• »¡Ü¶8€x¹—êÒYñ{^÷J äëÑŽØÐ:@åÒ½åÀÝÜIÔI¸to”ÙŠÆ“>÷“3X²E’&SH³õ3ñ¯Kc•‡™‹J[|P@õln5ǧ ¢÷ÿJ“Úë©ä¡[?ÃI@ñNª/ýNéìf!’£ðû-œûÅ@©Ó?>Œãö‚Iù1tlƒà­¨j2ZÆ úÌ)ÕŸ‘›ÎÜzØ=³ ý¼vœäÍÒ/‚¨¹Æðc¸¯µˆI>K/z¦©à<ÑÇqñúÞå_øÝ\´¶ŠlY#¡jÙáî<_– ;ó•²ÈÛlzÛœ8€‹žcÒÊc¦ü'Å#<»çwYH ?ï¦àoX¨D™L×t®ývë7 z±ó[JdN Y»7qU‚b‚/{\†ëu±œcR>Ç “‹Ù—®ý5v_yNﯱ-Vj|ù_ÇEŠ€Ö,KÃjê@$r>»³¦µR­]¨€ôï·înòL±”‹õêY ç2PA?u¬ïK^ƒ~J;r€=¾[|ª7]1‰› † Î׉þôÕco‰€€cjÕƒRÀ¨Þ§~T&{Yh™¦‚böÅX׎£é"šö½¿iSA_³èÍíÎ(…ÝucêkZ¡’MñÐ|ÚÝœåb ŽšyD`‰W»Ö¨8ˆ(cÞG|–²`˜îmK†Ëwêu&]GÉå6—HC ±Ñ÷>þeº?q1`vÊrñŸ¸Zî>È #”ƒ×õTíy¾ŸO´cs.*çòò䵉•¼¦'h¾'ï䯂…P3‚!¶¦w'?·» Ï!•œþöÜ.ŠW=ˆpÄ©êÔ@Ò¦F!€ÃhëϦ~X>0ÑC¡+,0ÈÚáü= Ée+zLk¤íábDì±´* 2ÚZBêy‹±;9¡S 'u^ÊéA%ÊN0Õ«†y03Äü—Û@üät««§è €˜ük8ÿ-j$¼O´’ ¼Åã±Ó×Aë³–Ôê!›ýî,"ý¹ÚÓE€"5Ï,âÓÓà­0O{üäMaâôØ÷•_+»ÁÂ×Ð`ª,Ôü41ÎÜî…ˆF)¥4úÏðо>­·ÛØüË ,%-Ÿµ®¢.ÇÃïÅíüë·ëQŽDO2OÜPºë7˜é?ÅðpÀŒdÕæž`Ë9??c3{•ÈÂÃDRé{è-ó~3\ ëz[‡µ€Çf¥T© ”Oï€ ã>„çµµ“Ĩ˶Ë}t,” 7ö&׌´¨BYçËiÑ·åîñ ¨°ø9Püôƒþ»}sa;ÎÇ`1Ÿå"aþµ¾—ª)ZªÄ!½ŒÈŒÉ¼¹Ù&µ­}è0––¨cƳ/’›¹°é“’UåÜx’gCgû·Ö4LAÞx§ÊîÒNÐZ,Ûw]$øy#à|Õ†ãðÜvsüd„d·í‚¯¹lˆ D‘@‹i„¦ô¶HÏ&×ôIö>Â@ð¥“z|¼œ#‰ÎbÚ_ö˜ÕæÏ*ñ¯«w©ƒwà†€ï*ôždtÏ—œëQ/ýQ“ {3©ÄR sv“‚OåƒóîPÀ…% ·þ‰ƒÉ£" ¾)¦N§ñ‘°P¬8ÜZˆîa0j†àwßÌû‡ˆ"É«ãùx‚À¹·ïB„h<è€Ï~vÚJyÝ“¼paÉ/1ßÎxµ_¶Ý×”Í$l€(ZvßXWÒ~CÄ¢ùʇ3‹ÕsË%žÞd!yTøÊaE0hMY4}H£‹¯'¬P'.)¾¢Ärµ—?yi[8bç?-ωúV Ú* ¼„f–ȽYâYÒ5 ”iBNc1”ýe\èQ–ýÝ¥ÁÃNŽ kïGêjuÛâØ?ÿ׿§] öJ¹¼ÃMàYТÛÛ,Œï}ï}¶—ÀzâÕ¥‹ž7MX•gÈÃ3ú1äï›G]iÒ¼Kg¼y˜o|üXç º<”:¿^e×ÿßO(óÞ½Vlö } g¾ÔF ÔºKN}ýy¬˜F¿R||ÝÚºÔ¶2†3Ïp²ì[ü¡°ÚPukã¬m*5jcʸi«OУ¬âóP¿Šõó¤\ þMÄŸ–dß Š©´)Œë·×>k²Úo«ðÕ뛎c„]Jç”ñ”{Ìà"#OGˆwŒEÑÁZ¥„@VÑî¢@ÒP‘è" #>ˆÍ±C\5ÝBz€äµ#j]”MQRÝ1ð">4àˆ=dohŒ@ý€òæ‰tMaj”oÝ2ÈßÑÚ Þ‡uYÊ>@´ ÏSÀqæ #Q#Vˆþפÿª-Ÿuºtö‡Œq$Dª¡ @Ȉ(}È^l é¡0†… z©O,Zîs†FMm\Ôa¡SDÏXÌIr@"ÆI"HPHÏ ˆI$ŠII  $A‚(’($($I("€¤HE"‘ P$Š@EAŠ)$E R ’( €H¤( ’E ‘I ‚H€H‚Dö1bˆH„Š„(’’D €A‰JY2% ‚)’A#˸: ‰½Oú#Ó½@h,=wêÌe£ƒ¢ @~$V©PY³4œAJeP%9Ì"(( ¤Z`ŽFŠ©Á"p:Z$âäÀ²Ê€6?@ƨ†,†£¤‹   ‡r TIâ¡Ê Šë±Pƒe ! œ€J'PªÍe\…•v…° õ™`Yc‚Œ”°ç’S°(¸2ETˆÂÊ`11…•qf&C#œ±Aƒ—X6Jìcª¡aœŸdÑA498Fº6@F'Ä9P¡)yGÆ:7…Ì ŠT+|`õ2#ñt³5žŒúf f&bä[Šˆ€€¨PY°Λ,u+F£€mÈ@WX€ÑÉÛ.ejì ™W•]¸Ìöé÷DM…bèýÚ«ÝÅð ,h€2h X' ¯(%=…”ƾ¯_“_U•F¥MÝ@€a¬BŠÈ0¾Å"OÑî1)v‰Sa¯î°–Cj$Ò¢Ç,ÝõID,4èûKÆtˆ$hÕдþ-ëP˜ RÀ‰ Ò*èGCE¶€I,ˆ‚ N½@Ý EÕ’@ÎCæ@w¿ëWÓÓ|@º Š8Å$>‚"aK"¬ø‘ï¢)ãbÛH4õ©!®@ÝFª€#å@Jë°dHà[„>ºä@Œ TD¢ë HŽD‚lè}ÎæX€Déˆ"$â ¢ Ú$ Ò5(@ç!ä@-èv¨7Ár®·Çë£ëyýÝÓ0¹Îl:·1H"Hæ‰ Ò$ :Á a Uã@²Dî¢ 4Ô@õ5 D“‡@ˆaIªF ADA#†!Ià¢8ˆÔ¢1¨'’*è’'È€þ3%Î@ƒ˜G¶†I„¢´@¿ øý6$“ð¢ì[Øéï"N=TH >TAî,WÖ T'_“ „ )¢0ѵÀ@hÖ9 ú g–¬ v먈1ËçGDˆ· Oe{¨ã@ŒrK :+J€è¡=A,¨DgRÈŽ‡%½™ƒœ®­p›Ñs@LÐÁnÇžpLs ‚9ÐúPßt“™Ï³2r…}è 9Î@AyžE ¾ÐÓÉ( †™ø!ÁÉŸyϼÁ÷ßg3>ÎN"îŽgÝëhðÖ}l"0;\Æ5ìJ9T"G¼ˆì£I@ úˆ–›^ãÈÛ0¨ìH÷‘OÊb8#@‰6hÈ¢#GŽŽâÀ ?WaëøŸºÆ‘ÖÞæ¯9aßEÓøV}¤U«q3üžé×öÿ¯Ý€bÆ5‡¾€ÄKÈ‚rOfÌ#QYD䣮@?õ0TE9gÑö=ôMyÊØ¢ $о«ê!õ!ž¸±"Æû‹@vP™¡2³~NãPîI±—DÑP ×6«QëØßȧˆÄÖ1¨iQŽDË­‚$™}ñ`Б7ô>Ä?T4kòGÞ@xµ#‹C7±ÞMP"ƒü·¿@n猡 ZÃqXc×De­TÑážB,"*H ª0‚ ˆaˆæC¼"LÓ šò/*H™@AW´ØBc~b4Hþ?sX|œjÛ„R;õ¦®1ª¢E;4Ç«q/¦Žÿ?ût>¬5úñÂìâ/ÚÊì”t~EwZô-Ht‘$ÁIkK $G †Að 0öv·@Ú­ i›Ø0Šó‘ù;Ô%òJ°¢#ôF= ªè5DQ?n5Ž!åF¨‡a\P?Z'”—˜ weß8ÒÈ5¢ç=sä£ícùæÏ‰×\­Xn¤¥C.­„I‘ššf}x߇ÏTip3ûî~ŸÈ¨{ ^·¾é‘ä .‚œÑNy]÷$›ÿ„Å ž÷Y_=V¨1Ñ{5ÇÃ×]ÏuÄÕM Ú4”LÂÞ\h_ë ŽÒúÊ/àü^—²gœ%T*Ý[Þ{Yý|@"Mõãñò<ÅÂ(,‚ße&ι!ñuöùy\ÌDìòÜ=ž·ë›jm³ël>C‹âÉ¿c@é‘4Äjh™IàjnžWü^^ô§´kQíDá÷Û²©‹×,ÕÜ~ã{ô–R9hÞ£µ‹£}5µê'»Œu³é¼¹ú%!¶èñ7-ØÀ|ŽaD\äK“ê”°¿—> ð<äyÈ›:ø¦!!jL³jê¸èj÷ `#tí1!ß}Ä ò;u\C’…—ïa¢ŒK0óÖ±Ë7íùµþý·¾Q¬ îžQ w­÷¥¾k÷µéX÷%Ã1+ĺŽ-.°·Â¬ÿ’JÙ5ƒä+##H©u½ ÞªØÒ†ºÅ£ «Òã]çŸÙJ t3–7”r¨DO}ÒïbØ åÙÀjœ¹AüqZ\Qºm90^|…k6ÁŒñC ¬—Õ(xÓ'Oóå§5îOPx莊/loÅýêåçUþì$*7Ù‚À×Û›“?™=øP!Rƒøû‘&52‚iÁ³‰ª˜r×v—.Ö~5iq{Z¨7¬‹¤ßyP:&¨îŒÞ{šh! N7!ÉßõwZÁ¶ú»XpÃCm.É(({2BJõ B@ !W¬Y.0@¯ôAƒ{ɠ娥›köB‰rÞýöý&Él´ãg×ZThÜô›’ˆ#ÝQh¹m%N „HÔpØæÊk8pê¼>>e‹ç«S<”=ëöt¬=Ú4~Žút)D}VÐâö¡Õž÷«0º%¿v ÞT_4Ø"&|mͬâìóÇ}é2É,Þw~޲ö^7ž$·Ûƒ.ª» ƒ«í#Ä«Žv%Mõa@spAÎ%]¬è=ß‚¹Wã*Bî7M `€ ié&-Œ+DÑÒ°¢IJË/5È™#:ºL„˜ü€"l‰$@µ¢ó,Õ$qˆ âÔ˜‹Æ_ìç´ÖÚ7kÍØµäxêgY,`™Íîüшê'ŒÅ8Œ ¿ÂÜ2'ÿEâš©œºí¸𜪺÷Gí“GÊl)v¼Eo8Š-`z¿}ü¸öŸîˉ²^sšU7Åé!bC6‰€¼êYmê¡\G¦ˆ†„$RH%âî°ò¢&hiuPXæ°x9¼ïÜ¥Mx]Ü8£ý,ÏðÃáF"â/‘ ²4Ì»COL3"'òlæ¨&C à`CH†ñh€&{ìÖÓ>U·mÍÒrÌ­x=é©"nqph r?âç­^h±ì@æ=áò6¯ïÏÁº8It@ÜVª+S±ª™Ó«óipÃ?áNW’æ1å\üɽ}¸·j¯µMû!YšÏŒ“C‹ùú^Hªr纈¨³?“|غZ7Ebq" H VaÈX¾5ƶsp«öŸãŠºq¾O“™tÐç¤#µ=ný‘á~ÃÛ /S: õ ]ƒç(a 2~¨k "šé>< ¨:q娺Çämx—×öUÆñù¿Óä¶XT&1ö—ßeéûo™ ª¹šžŸUÂÈŸ6¡uî §ónsÛ5Ëmž:ÒpÛ†LŽô¡µîX üÁ»-¾J¾6!<—›-à»úóÍùs©Fݯ¡«þþÜ:÷Mp1^©³2Èÿrh!"„ „L… Ñißk¾fì—yÞ†¯“¬Þ¸ÞÓ9ÆÀýoõ¥~3j\vBiÔ$ª€­Š ni«Òeç¹´IŸû’ûæbëÉèû˜`?=>n@•möøì3)ëÕÞ^;¸ ›s½wð¿ìòZ6YÉŒròn•c]ÜäÅ)Í¥ÝÐ:% U”KU;1/nŽÜzgŽøáàYý¿õG §ð@ã1쵘lWé[žŠZÍ¢o¨oŠ…áß~½MäØY#ý.eNý4´f©Ò«?ÊÏÐÿe ½œ_WÎkß^Í©EÞ k¶Øz€3•š Ô ¼ áëÄ*†ÿ8ÐýÒ¡ý•LM!Ý€oD\}¦§ßXqa#l0¶ÇÅMJª<‹ÁzÇJ‘l ë”; +¾PÃx”y c‡¶$øæë62« ÚP&â¸ÕZ£–±GÊš²·]ÞGq¢Gtþµ˜¦ÛV¢o™¸âº‹ˆب$ž(g¦ôqTI”gü,@› {Ó4ü óCLSQxe'–(}«œ‡ýŠá%~oµÚ@ŽX•ú½6žêe×ãµVáþŸø#³‚Ç[É5ô_{²°$ÍΘ—Yb *á= h³íª7âUÚõ"µ ìã›Íj6Ø|¨@^»ôZ‘Ê{£ò0H?,£4}[ÂÉöW-ÈPÔÐ^¸Szb3Çðâ¥ç×FOÚ¡ª›–’ Œ‰H‘ÿ¾³· K}“‘œ¬µÿ]ax ªhKºj$0øG„—:R<¡Ë6P+ÐÔãYš)xD—DIôÇ+ÁÄž/´œÀCÛÞ@ Ò!ÖtâDdö!Õ0p„5ÚôŠ‘ÙArr G¨e#|ˆ VÁ7s_»T»¯~ùÄcAjèbþˆ˜—Üõ¥÷?ì6t –GP¹q»^x&LVÿ „O‚ËÿZ߯()BûÛ€+êh@–x2¡C{uý$¿áBélKÅ5뜚øÉ d;€¾lòù2Ø`f" AiË$Âï˜u¼æ0:WÀ±ffví¦ÿ¸áÈóÒ‘®ƒØ€ú¶tîû~x²zY„þqÌìÉ¥#•—ÐF””Q\}ëüR¡oºgo‡²è–ðæò6~¾ye›® Ø"ŠPâô5ç÷ P€[D,¶‚ÖmÁUãõ×6FôýdÕ¿÷)Sù„²õ§aBÑú·v„"/ìE|½,·šñ‹ÛÓb¼8ØëâÈѺ.ÜÇÐÝß gF}Œ°[‚¹`È6c¨ØëFÛ UˆÀBá"š'Uª#_(GÞxž ië%0¡¶—"'AwGîè¶O¯MHô>ìœ_ùÒbÇ_ó³$®#Þ•,öÚO_:QùdÛ…o6™“n¤I½o¢¢ \…ñÒAlæ%P %º~½5H3ÀRëg¹Ä/œ†—Âý1‰‹»—$ ²t}²§÷J…]â Tòyúc$d)âé9{Œµ»O•Ôº5šw­åeh8ߤÃ6à¤Bü•Øæ h)Ît£ø[Ö€6]ï™8ßY2»yXÃÕéãQÑ£$wך¶Õ‹uëóiô93%ç´E±o[8'ÞVøÓ !\B ã&’æý4ä Ê•¶S/‰´--ˆ)@z6'ÍT0ÕZì‚®ràÙò $Y«Ÿ‡RŠb[d/guê3Æì/ "ñ×ΔIËÕ–´ Ÿ 1º’Á³¾V¹‰ôӶȉ‰0¡‰˜9›WâÆQºÝî[t¥>à;pïîg\‘ë1ìÍ” â›÷ È+Œ€àããÌðôÙ§ƒ‰ÙLØü :’ßxGë<\¡"òôå·Ý Ôã+¶u·Ûÿ"R܃HÕï“ø÷Ç•tGæÝÆ6T¸…_zPöa¾ÚÓ_2í¿¬vǯit®ª×uÐbxuxPùx]õ!ý2up DC\äpYÕ?јà„ÿ6#úCY3UF/W_v¬ySñ²ü>¸¨ÓÁ+z3ûÇ–8ˆ ´Ïɸÿ¾­Ó…ôÛël½‚ ô4Ž}Â'é¡L ăÙÒ¸ó+ê aüÿ ˜:Ô¹˜H2. ˜êŽ9MH„Æ/ {×c!ŽÓ}¤¼Ýå*FÄSóÊžÖúZ^'Îy/AXE[BŠºC³uG¦JJ.;¹Žâ€š=ü-¨sŽà-‚Fš¸©~­ª>¹CÐ:U%D°dÅødêv™KµƒÓÚhŒ“R2¾xlèæ\óÑâ•Û°°/‘W¶¾¸ýý©0`{ ºÑ~rÖò§‰Ä¿Æq¸6Sì}–/o¾ÉA·Œl\— '@†x‰ÂíÌò ÆšV(i9•Eé9xcTE/ÚÌ•'T8~^_H…rÌþú¾mz݆<¸N7EÆ‚Ÿ iá”HL4±Hš›–?CV¥P¼Ý`AöoŸ‰Q£îÚ3þY ƒ›e¥Áãd ³Œ¬ZK­„”V§:­–ÅÏA·¦'ÙòÁðàNîÞtúdLå1¾¢WÓäöËÒûîÈY³÷{§ Ü2tIØY¦šqDG||xÏ4p¨ápÂXZ ®$ÔõÎîZGQ„s¥4ŸöàÕ>ËËG_Ÿîü×aÙ_8 x<—%£ˆ sžçë•þhÉ í]¿Í~* ‰o“í5®üÂðÌ9Œ"5Ç‹ëF.ò|›¬~nÚµØú¤+îCŽ@€Þ¯ñ?˜šAó{+£×›ÉFToË)ò‚ˆ‚Á‘³p0n!c°5žxnpßOÛQaæ»u¡»L4Á ö¸¶ ΠÚÍÖXÙ?¬f €é `.܈ptíª'œªà"êL%‚·›å減a‡ëOÕ;üè¨OXÇÙ ·âpJM¥6*¥V1e°˜â‰‚ß\g1=K[­ýû69¼P-¿ÙR¤ñ³ÇÃP>Ràø}³‚€ð ¤0f,Æ^H,Fæy0± sèûÇóUS6æx@,wmN¾¹ ýˆŒñ OôM¾äÙ¯9 ¤âô. QPÌ|Ëä†VGZþ‰•*¤ÓÆ‚ßy?Î ÍšÆ9„gRÙ-‰uUnÞøáÁÉæPcÇÁH?‚c§Of º|Ká’ÚÝ[=žq;>ìÇJí¼€ yÑ¿õÆ©>~sóÜìÍ\ü†%:osþ2eÈ&RÂ|Ì‘ 7ýW¿‰ä`ƒ¥û mÜü â O}üCÌ5BçÁ›Ø„e‚ BÐŒOh®*Ð)0’Èv”´_Zz|×|ÿ£ëµ‡l¸E¶Ð}ÏŽtaË%T88üÃY˜»Ýî}eŸ1Ž÷_µkÖø?rŠC&VìCÙÑbŸ‹¥{¢ü¿[ÛV¸Ÿ•2Eüž1Z—Ùõ©˜w+Š|l¥ü*Ùóeîf1ÀìPB…@–?•_o—Âx_ƒö=¬%’Ú^鬷E…ÄìO‹°T…²¯x7ùë!ÔLGr0d BùôiU±€zy¼Uxi÷òÏ{ëHèÔ’Ép šžâ™!ƒ£Øùð•åêk&ô.-ÿ–ÓÁ)Ÿ JëOÂSoj|FĶ t]üƒÌî Èe<øª™Ÿïïb† .y#Ç}³)‡Ç´=Šo{4Fmèd4qJñxOîNx8¥Ç'œÎˉȂќX¸Þõ vºÄ{ó%ìHƒEæA…8`Ø!#ºÒ2Íæ»FéM0ss&Aå ;‡rº÷rÃ+;"^(¿û¦ùÍË/rú#¬ñ/ÆSÌÀZüO$äRí)jS-Æ¢ 2øŠÈÍ~Dø=f‡±ó Á²ÚPÕÄacÐÁmÎV(u°ÈÛ‹Û¥éªMœ>¦=T¡‰˜Jí ÐÊ¥òªË@uÂ) Æ[MCÓ÷"¾èqCÒn·“‚ú@_¡]##VîIðcgýL‹@>Cp€§T“Õíb6Þ{ç^¥Me„J+êÅ^Æ7/Õ‰àëÊࢬ«Ö‰iM+üêc_ÐæyýÍWåüW'”KüG‡YlCkaÿléœM‹ùj·Œüª“(Ü'múZQ%ÔÕqø{¼Îa±·Vü2FOZp´çv]s±æ”°ÕÝ!í{‰3ž®0 ¡ðMg[–6Bk…Sñ ¡cK…´äl $ˆ¡@iA3mg¡Õ²ûW!’x9ðä@')F$ØÞ[”>½Ÿ#?é«¶?,ND¡õ(âK\Ìmd02õÚH1©°ÅSXvÎ>…HN7’Ÿ©y˜ópe,M&—'~ÆP½ª0 Ì1ö¹®âüæ Ñ€g…‹"D&;t9F‘C`>ÕQ£Yi2Uè£Ë“¤¼*a©§Á¹~Aw¯2ô·Mm3<ïæí{ÀÏÆÿu|m:ÔdѼ+Ò| FB@@F~4sy>},În)á†W<ûMˉ‚5k‰Qaጾ %Õ‰c3óÎÆã'§"4 ÷aôF z°¦‹hzöPÁÀås¶FåCÖ±Go]0x›0†".êMs8ÆÝ';\Þ÷6§[´U¤.~Xëk âÙø¦ Ѩv Lý’úh! v„ÄÐh§rC|ðÃ,ß«ª3G¸(e½›jáÈ<]¸ý^>´Ù_ñ„ŧÕÿûþý…ßå~×î‹fáöbD_/ïkmúŠ]e†ŸÚÞ‰µùñôg;NõšPWIu§;·}ÈM°‡§´i4D¿Mç~Xˆ‡V±SöÅûl,w€ÂÜrÑ) ,;ƇjQ†jFÕ„¡Z„¬¥ ï<»ÙD2Mt¦hö,¶æóý†!Eqlk¶.;ºñ;(öß|òb:(€Ó½ÞqK! P+qݘ1ô8†ÑôkKá‚FPclËLž¶oIÕ²€áÐïlh1C^8uá’óÒ¡ÛÌ þ>C#”éÊâ¡Í’촚ΫÆl·gÆÒˆÌklç'h‚ö]N·ÛÚ¦‡ùdÊEÑ誜[¯ çáÇç³›8O®ýEG[~¾f_¤¨ý‹ Ñ‚X5‘»n]¢æÖ.´©Î6ÐŽI_ý|XjöIá8Ck6c#Æa‰,$RRˆnjך?5ñ`\üï`6ÿ¯/UéØ>)¥çÁÜ·å²ûEîJÍ+vö·M"-Y‡°˜­^ó±ZÍA¡Ð¹ùQïÓ£rœaçZ¶ÿ â¶Ì$S—¬Î¥|øsÔ€<|VBË•pçy4±Ïo—¾‡´¯Šö¿™ä•¢]ð(UvÕP‚ÔÕôãšáÒotrXW}™`Ö}í™ß×õ<Œå¿°¾KÌ޲öæD¤u¸ËýÿõfØÃØtëÛFPHÖ‚@CBH§Èû&=!ç¥~ùH¢é,\AÊX À %€›È=ÁªÊŠxÛO döÊÖÚ†rêÞMȰ™oÔÚcÀ-ŽÛ‚|Ÿ(©·<ÛÙ?T$ÌÂ@(Ç=\/Ü7­Y@3öÞÔ/B ð[>{@™Fš§$aê.‡OíÉY¶VXY›¼œ/ž'Ü®\–ÛOXåWèŒL›edpÑMv®ï_ê®ÇÒ-ü˜šºË¡µ 7ãÔi6{üf½2¥Sê°$:ký±ÉmåwÒÜ4€w %M¼0cûž®r€ƒ…‰¯b°{»’å0!Ïë—Fê€ÅÕq KIMœyã„''_-”±6uC…—ñÞ±µøÿú3ñçY­7@]7mÀîÖX Ÿ$ ,ªëÑüÞ£|4(Mó ŸÃfÒ=!ÕažFÙEå]ÅVz)hÍŸ¹!¾ô ÞÍØóºUC@åŠQ »LõéÝGh tû!â.@Ä–uë4íª@TqêDi9Ö÷ÊDæï~ÇE UßX쪩XªÌÞÒMØm½^‡¹…|ì­,G³Elà±ø@Æ`j“i6ü;;ÏÔC0çBcë˜uW§_ßEwPÕÏõY·„B§Ï®Ø÷ ¡šÇ¼.oÄž¼:¾ž©Ú$=4?k3 ë 1.F“šÿa`¶{Ê]ÇŸ¸øcÁ°·ó…¶L 27èç-t&>ÊÆ`•Q dôê{¯®YM܆¡5%}è!ét±ãô˜(Æ]@¤uÝ„—PÖV§õr2h‹ÛšX}§p?‡äXÿ5Y4e\—$¤¯O0¿ú¹Éñ÷ 1ÇÒèLûZù.z%\‡…Ê´ÐáÔSOɱ˜Úôñ¡D"UOVÊuõk‡A‡Ru˔ìâ’Ö›CiQŸ;é%ã:¤j49I¶oS_¦ÿr8z6›“3ÍrñU.ßgÞµ0<\6ñ,RËb›àB‚·È[ô]CÎ6˜¯‹éË@9Ù)Ϲ鿆T:» ‡CÂð¥L\žáhÄ ë?’à¢x•|ÛÊYj»O™;•†]RJ ì—™&p’Œ Òi¿.À(4ûmÐûº,Ýùõʳ Ú· ÇY¿”)“êVç ù$/ 5ëM%hÃw´ß¶ÆçØüíSHÝc{à‘€×°u¿ó𻄖Kz鲯¡Œ§7ƨ ‹‡îŽÝª×n5oeÚi¦€y—eÊCÀðuð&V~ÃiµÍólÒåÐjq_ú/ow…á^Ž]ºWÖô48æŒC›n¯ó0¯Öq¬0õ&¡…p¦¡ÔVaY¸"µvVž¼é3òB-BµN›Ö-_Ôg=,ÖfBÐàÆû Š.| ß’Ô†ŒRdÖ5é ©Q¼ì~ÚPÅ jèQ°uʦBóS¨w½\þÕFµ_Ú­a|ötLG.+Yú]_—UèvCÉ¡ž@·G7ºÜßç—€(è]šÞ© v—g0ðÏ­?—c3Ä>(ãJ TaÄ"FhqoóðL <îæÁ™WÀ;Ê+&$îÆ¬,G8ê­™ÉéCáKyŸ JAG{|›4O^‰‡Cln!ŽCM›mJüWÝomrsû—iÑ* HÕ°¬‹=PþiY}­‰=[×'5'ÁùhÈ#Ïvµ^+t7[}bß6e?ÆÕe ìÿ…I­ÝSÊňðª[ë!Σõ®¯u™ÂoᵜQƒ'ÁD6ý!ÜÑbeã’ô]wd½®ê£â¤ef;œw5òÑ%ŠØ' òn6ãrŒiHmÀ™6bÈ1Ü(o§]‹p¶ÙXN¦-"úÜÆW ý#,Ãq5\I„ú¯–œüõV6»Ö¾´n¾"ó‡QœÆ\ÜרÿÕAõ ÿ°¤67Þ×H××{T“bÕD%vÕ¦jû!…q.ËŽ ‘Wgø|ˆùÏõ,JNæ‰o¡ò,°Fè‹–»Þ=ã£Ó,´×ê2] Íç·öÁ¶äÍPðÜo¦éZ†&«H‡á4cãTTf׿Øã‘®÷Z ¾×E¢|7“x$g´ÿ3ªY m‰q¢a ú…ÃÄPÀì;žÝŠ2ˆo¶‘Ÿ°üÆÁõé±FvÕüÍ‘üd_‚¹Pûcp ލÍìR8µ1ÍÞkˆ#Ó€.pØTs4­Ûǃ¥à ËÂÙ¼ŠqyîæÐØ[aÎp6ÉÎ/ ÚÎFxíÚ÷Ø”þÜúG{ë kÃ’Û¸í‡/e{Ò0ˆÊR>y©x[Z9CL»V»Nàv0[#è!fÒ ŠÈdYË#ÅÀ)Àvn)‡ñÒ¦laùrwG•€zͳm½²Ìá™é5Õ½ wb8W•DèÐÚ^öø‹§ëÅÿc`¬„M»´ËØÎ°Ôèa;g'YÖ3~a©ö~ áž ©zKÔ:‡Ô¼A ¨‡¤AQI’Ñ-Ôl룢ÓúYúñM —“átÌ:[”à'ÌÖaËçyݪ®ú›çå{Úç1@N,YÝŸù¯vžàõÅ„Ië^ãÚj¦O…·h«Uãxr~©©óÖ·—Ξ6çô©œ— qDBrßHI¼ƒ¿õÜnz(Δæ¿Bu_êi+[O½V9Wònª)-ûjȤnÃS/°ñÀ&‹Ó¢;<»ÖPÂ@šr?&cî±Øiжµ Ûè¢] ôŽèos§{ûŒ›€ûë 2!Déæ HB+Òâ&j”Ô¹Òî1œ&é#ÌUgœ÷½¦ Ü*:5˜„èŒVÛë¡I9¼ÈºÖÉP(TGÔ ¸õD$²w¸óÄŽ¶¬RQÚXšËƹtCyMŸwA /RG³úZêr( º¶„0h^ë¢ÃÜšÜËž¿ß%ßú»½OÛþÎÁê·NÄÈ©–"‰7j7ŠZ{hèvå‰ 1³Ë„O+OPìEö>ð5R”€ ˜¹ð(é¡ÜYyk†møÊÄe³Ï>.Ø#±Bx`Žè»¥Z/3NÙüV>ÉIYV¡4 9½å©d w°ÐA®ga˜p½ØEM,!A„<#½¾ÆÿÉöYŒC… ºHóǘÁ"Nã=CzÔÇ¡Ïò?áóìžk aö‹5ÒM]}±‚;²ûÑSH›°…TY“Ç5ï ‰æÚý´‡úŽÐÀ«ÀeýZšÿBˆ$Õx-Fô_Ãjªóôæ£>—Ó½ùÆà¹<_ßnÐ:ôòœyžD¸?ðʱ#—gölWÐ#ýífàO¥½R?Gß²œPçä;‡Zó@@¬|ŠiÂãÀ­Ë÷Ö§׳›¯\ÿÜ¢ágžð³±zµ !T¼ iº‰—âè™È¥/Ê£,Ó‚‚e* Ï^Ö_Îâzf:½÷ó·Šá×ÿ €=1î•pÌÛ_ð[;Ý›ê“Óˆ~Et {øbaBgÒÀÞП<ëî™3çcH®òƒ„įfpyÉÔÍèIÒ]I"šd…e*'+‹±‹Ø£ÿ´Þfœ7X>m®Í†*š<ž½ß±\ì^#ïKs\¨ß4cY–rC\EV }`Âæjç/ã+ù¢„¦ì d±i{XÆó‚ü îÝ]\ë,fåb7 ™rw虂a…_¿f¶2I¸I÷ž,¾?ïOë%‚+½Á©Ð`Q>¢5b¼ì\Ý—Å6AÙŠðÏMé=Båß÷t¶?"Òyž|Úÿt¼¶Šag,«æÊp'j¸œvÒ$«n DŒ‡%tSÌ¥ßWyemIÝõÄZq,áÂ|~ê³ßH©›²‘«VP"Ö˜WÒòÍ@è«fñɇ 2O"Ó®ôÙúÒ˜¢P(2uÝí†Z:ýÿ²»D&£œ¬&²[2¯ÏJŒ=ÜËì‹]îS=ÎÖ¬ÌG%sñ³‚²¦¸Ø ë:üÝ`pœV,ÍYž¤Û"í›ÊʳꖦvIðyw tuœ²Y‹…O.Y Œÿfj7T­[ YÉÛ ÍP ÐÕ¤ÎÁ’àŸÞ{,^X¶Jb†+ ª®J€FaZdÁºë™“CÃ7j¡,̾†d®Îò,ÎÑ™¯&üÒu^Àö/Ép«®¯JLÇKvemdô£#3Xà݃·„% K'CÓ!Ë!F+Ô¯íé_ÄÏðø¥ ÑÓÓ¦í`Þéñåi[ä%ß|‡`«Ë¦õšÃ VÍÚ• ž›·r¶Sîù'níw‡Ráò¢P •á½­_^ÑYÕÑÿµ'……öåŸr—.íê‹û²­OÔÌ£f/æ]_Ò t€ƒòú×P‚7ĵ@9P–&‡†—•Ž.##4gÓí–¼GäsÌ"<8`zØ'”Pœ\KÊB¼A[ÀJYj^T ˆÝl–$iA)ã»§óêd’ÜÙu‘™‹çùW’‘ÔÄ”¹¯³6µMŠ®I”ðz$„ÊöÅÚ¿ÝI,±7e8G[“F­tÇä®L­ýÙS\¤ÄQ£uØÏQ¤ÙøßXû­ŽÎ;Þ¦ÂÆý‰.&QÝ&ë˜5ŒÏ5¡#ŽõßÞJM,°šQ÷{ìÎBÔ'LNòä}N証§²Ð·DŒÑÍg|–˜¿Šãã¥ê‰ÿ^ÈZü'#_~Œ’«ÛÚ2wÎ\š{‹8ˆíb!œäuî‡þ.óûíþ½Œ‡¿¨±uy}¡oœ£ñÓ¤¡Ô‡‡°È|a*ýkúÈ­Í ^¸h.S>*ð?§¯ÙﯴKÒÕÞÏÇŸ4ŠÆU ¥{:K¯Öǰˆln²Bþ HJÞäÕÒ«9õz怤Ušû¼DçƒäEËæÃSDú¤ÓóΠr|_?”mvi# }|i Èµí¢ž žºktŠ™aøž7EY.˜4uúŸ.Z±¸Ùj*ã”z¾Ú™jËOÕß`íõÝ4™'E×ǧ.zÕäðD\×T½a{¡á˜¤;·—Fª®¿ š[p;â•»cÊψ»:øá¨²Jø›î«)ÄêÙ®GøÛë@ÔÎM×W"ñèu²®äˆ• rÓf/JÒ Cô}ÃywUD¥÷Ç^ªÐé[€×þñ¤ãLN$ñxT+¸SCÒvYÆÏÃ÷¿èÆ,ìih*FÖ8Qõÿ¿dÒχnfKR~qNâÕùGÛœ’S^×éºìCÉH¯Þž§c&Œ~…å­¥Ö'_«ûu‚ûÁm·§‡½§bÂÃÀ¶ÖÎg|Í-É¡ø&å𞇠Õ)ÍçGÆÀá[©Û8P¥N%½5£ˆ€ß÷¡yn#s¬Iw2Æ?hfâÅêù™µefPf?týöz¸MÕaTÉ}seþÜ«ÅÑÔŒ§YŠø< óïì‚lÛÍ[?Éq,Z· ÍÖ‡(ÓýöJkÆÀŸCu¹NÃnMůÒA›Œ'ØŒŸA­[ñqôÜ^e¹*¥ùÑW{§{X¨ˆmˆ¤;Ùž~<É>Tկ««9”™kÅvõ–ßþlzñY°?êGv—m¶Ô*¡~Æ„~hÁ°ä»ñ×8ôéi|RŠÒÌ}y,ó´ÿ߯Zš'ÜœL z/?‰ÏÙ‚˜óíƒèç±/ôµzrÚúƒñxeÚÖäMÕRrÞPf5y¼ü.žãùk= iLt~·†)¡Gc¥Ê¼Z™•‰zù‹Â‡”Oú};‹@»wö¼ç{¤É¤dÄ·m¨í–Æÿ“IžŠÿ{$²$µØã|ê5ò*ü?ØèšqW‘¿aJ9Mì5ºÏŽÁ §9ëêLs;ÑØø‰.jhM²(:ôÕ?õ[šÃû>4‘®j­“Ó€ÀÃðšMe˜¨K}HJʧ嶶ÂþãëÕ¿–H†ˆÍL¯Â¡Hì7z‡Ó)jHS(è8'Àñ« v½£ÔêïâR©] ½Ö˜û’ôz/Nx³yݵW!˜Î·"êLÚ«AÚ6þ|µµ€¯:•·¦+m ý¨Âï&LÌ}2¦o@úû˜ŸøtËðÈ,£6ßv5”-ÕDÕ»|9H’yÁÎĺÉþ;_øÕy›&– Ó=Û¯Ì:c-V[2é²Ýð{yÕ:5çt¶k§1Aq²›AþݪæOîHÝ’]1žpqV… Ôäkú¶O\>fÚsþV3õ—v;¯ýç—Ö)Ól³Ö£¯mɬ•(à#šn+æa²ëùÚZÎÃà ÚŒ7H²~jÙÏ^C œŠ+ºêäÇUQüOùñîS²Éd²þn¿ 3“‹tÉŠ¤Ýh4Þ¥jjœQ¢ûîY·™ß;f4¶¸Œ6Æ%ƒÏO œ©œZ ¬].-Ø[ˆï¬^wÑè° J…ië-®¼”íAìŒÁ(ÿšT•>+Z-ŽÇRU“d3˜Zýc-ËÞ÷ÂmH¿©Ñ=ÝÁvá{y¯¬¶BLìý{ÎÑi;Õ`ÌŒNµ²f›S±‰A0 ¶žEY™:JËÀ°9©Ã’rgôí;ç0ô3»Ò3{¦<»ËüÇõþC ¶·I /›{ÿÜda{ú:ÒZ*”aZ*ZÓ‡Ÿ!1lw;e­Ø„^øïߦ“Ÿs%M÷ºÏCA‹ÊyÆXý¬òÕ+ªkËÓ„C8·¾yÞ†ÞIì^ÑOµÂpÚ9œ‡:×öuÑÀF÷èŠÒ÷µVe¨Q°9ï 3&¾WíDx–c’¸öÉ”HüÅp¢-µY÷¶ôKGâ[Æ %vüÖ…‘N#&K¸@b¹‰JÏ;ÊVVŠø})g<õAŒé¼c…´­Ó…½—&4v~^ x¸ùH7\ùÒ2&Xn´f‡¢—Oáã¬KºóÚË´uæùXxÊ(4¾`·6<·­lÔ’Y:[o ËíD°Â<Çsåäû 1H_]²Iõ÷ás¥û«.ôv¬œº·f÷i^KY*-‘¡y1fõ÷_k)[àœ |äVŸ°ñ&L$¯?çNáë~¡]IE$ìÞ™.ÞG;ÿJö YŸ¹ ¯èªGí/H§}ÿIÓÏÝänøÒV{ÿ_í4n¦¤/nöMQ]YÁÅ3˜y0U‚«é‹8ÒÐxÚ9>;_>U´’:—üóUÒ-Ne‹$Æ5+c*“’§­Á»éÜcÑ–û{qòñÐÕÃb3ô«aÛV¸zßûé9Ï(ÝÏÝÞHÃ^©Óë'¾6Qð'Ié¨õö$ôLBz#Éü˜ë¿å™×Xø²t‘Š1=Ý ß&“ºéw§Z~Cvs.†ÎzJØÁüä(Ì+ؘÙÙÞ‹ŒÖÝïy9å!¤Zò†š-†—Ï¢EF®âÅ}!üÉÁ×s³$¼¤?³”“ pï²{]G‘ÑÕNJÅQ}ŸþÃbᨃ¹’0 ”}þ$«ŽÒé’_ù>qù÷äã@úO}ùßT8ºOÔ!sÂÛKÑY¦?ñð+öݔNPdçš-Ãèšqë_¾tê²Èû"W©b zªrøžKü}“´0œvœÈ/¬­êxÙÔ¢.ôtý6Ê´T5x«ïLèýÏ6=η©ìŽÆ‹óîš,3ŒfVÅ&lduìËDy•‘ ‡Œç®?È û6, ˜¦RT:Ó¨ÊT*¹4©Ô¦7öõæÉÍÞª;¦ÒµGÒ‰TÕxÁÕ¨•"½uúS?Ä7Îpm4—±ßmÁ`£á¬¢Ù¸€>muá+§A‡„¢ƒ«µŒLü6þlÖ§Ö$,;Æ¥oÂ8à¼=”Z ‹mo;Þ;jdsc/N¾…niW*#ƒoÚˆ©óŃä¸Ê«w‰eó“¨é`Ø›,½ÈeÓ|·ÅLÌ<Xž‹å\ºíQÕVðuš’&8{…—}7YŸ?ƒŠìû"z^Gñiª±‘úšœð&šýTvo¢’(ý¸…¬ôgpOÇsƒYo°CÅT«Üj|·9讘èfÕd#\çš­DyU m`ádÿÆ–Vr3Ì\o¨Yä߇ȳÕú±u¤[Ka°a~¯n¹³‘›)-ðÌøòÐ b~náeëBÅüTÿ,°Êzùžëß~÷BJ¹ùïqɪñØî¼ ¬4‘KwÌçtiž4ÇšãZO¤Ò–E\ߣªª`ý>ö¡Ã ÍÔó?~Þª"oŽðãðØão©)ÏIèOcg.“#óaçæE°Dy\¶®8È9 ÌøiÖEÌ5YÑniJMÖqÉ#ÁÌ»“hè×À@ÅEè¬0m²ÓÃ}O9ìTàø{ÎGXê’M£ÃÔúò+9óßyJåSwë ×@%KøXVè¸óàð¨9¬²PÔ‘“³W®¦Ìß¾¼tî&M-¾ëÀk½p»Jû]9Õ®–(:èw}™?¾q_‘ŽŸ¦Düb“·ìñÕŽ|Æexÿ½eÁ[Í¿ù~ ¬³‹Æû‚õþI n)å`½‰+Jÿ.gåÇÇ·êHQ‹ª²ÇÜÆ"$Ξ+u@„ÉB[/wãG.Œ‘ìüÉŸ{¹Þ<Òx^Ã;·`­Ì*æ7S÷®ó¯¢ç´þPQ+×XGÐß1¨Ù•½4¿fdµ®?Y^§‘¯üîÿ­uÕõ©KZ\ÚÈÓ@’‘'µl°(]PF_Oð…íÚ¡;|ø†AîWÇäã;öç] )î'Îñmq\w&åã®:zKMÊôŸãEþÕ¢‘¾Ü!ŒqÇóapMá´ß =2ŒLÜ}–}­–•M_ŠÐíð·|Ä^×»FÍÔÕÍÉû#ÍÅaw£ãÎo…¥€iü’}7Ò¢ÉÏ÷æ—]±¬£8ð­1e2Âßéôz= ñŽš‹¿•šr+ݧÑö33ÛÚæ{eÏ1)Œ2÷§îƒ!ÕÈ„xÛ^V_]ÉøâèÔËcpj*æêð“Ô—+ëõß O0iý Ϧ%èê¸Ôçx ðÑí¶oãøŸÛ­)T~jp¾œÏ¬´¼øòNgkfý¡9ËV‡¯NœÓ3K­9ËEÂðþ@È%¹¥ÁžV ýmý_®Â3Ùª·ŸÆ’õîÄ´@ýæ3b80³—st׫?êÌ~ÌWki4©ÌåE~*œ¨»å€¢¹ÏõLa¤¨€*yå•x¢&pH]Æà`S89ì]†ËmHµ‹eû G€êgÊPŽà×Þ‰o–SëWé?1Ú7àmë?Áì²âáÒˆ_¬ÆûAWdF µÏÿyOMôý¬6÷„¢, a¾™–Ôz½©tÄ‘ñšŸ¦­þøt:ßüÜ÷ÒW@P­ü;ZK°BH Nõ®MEnû´y%3âýiÊ †ñµ,š—9VOÍ—ª!£ï÷,nY'ôi§û[\TUŽ;hzª¡¿DÞ~!O±ï=9 ¾…‘Ù$ ÿÞ| ³2Ŧs*êÅþöTê!‹xU´–U,Áõt‚[<‹æâR6`/©)×kX'“‘ÛëÒ¼Þ"ie÷ÝvvÎ$a“¬Ú5?å%„ƒz¢V·=_†®8¾uož¿ ÈÝ8×û3®ï]\wôsïØ¡ ò²æNúÖuóñ* Nò”õ¸ýÞä{=(ÁònHv]š<ÝÒÜ$ .¡9 Èªõç,WJþË×m:DÛí»„'Åx9Lƒ¶ŸÂˆþs¥ÆÊ“…+jȳ¼~¶²dÇ©æX‚‘ïJ5u~¹ÄcoßÜÒq¨Úr×>èt|Îß>º¨±S#Çʼn¢3v¡¼Œü^QË8³$zVü²—/’ó¾·œÍiz æ¶÷dgèÓßL‹*‹è˜Ë4´/IAKWSúX…ûNÙ"s%¹Ôðñ0[.ÆáBá6'20s|5›+1ïîy†ÎLÖ¿ ïHÓüNcj=ü j}äƒ'”ˆî®à²u á¬Ûé×í¨U®º¨…±ÇPj"jºÆ(çòœå˜²Ná1¬ÁÃy³ýuLó{$TtX1ÄÒ\-¦8Àï{ÔO0ß„Hyh~ô<Ÿ©6¤ÒW=Ž_—˜š­÷‹°pÏmóc/ÒR¹ÐÂ)3eÉ«6é±fÏsþUð <ÓÆeë7úz\’?¨¸ Á!´©ü1Iq 0#²['7óEâ=ˆåçr£ý»Ï³dáj,âU=§‚3€/X‚è¸òp­±''ºi­Ñèa õl÷;*÷CÉ,õÏwe…7=ùªÆÂ¤£×¦rG3 `Q˜æ78¼g¥ÿmįâ=jZ™q¼zlR ý«äÔ;WK¿Õò«H§ÄlÍkŽ*è´}wk^’Lϸ¤˜§$DYeh$€ÇÕ*W‰WM' „ª}e‘ê Í<Êhµ”µ-aO¹Ð½8´¿¦'1ÈÊPž‘ª¨%¥©ê&Ö6 3HR<béèGA019c—G@2°N{fÁjì¹ÒD"Û7‘Ȧa`–@.Á*ta!9 0U*”#hµš½‘]Ålï#9ª¹ojÍ+‡i l³Ñ_ù‹–>ž@]?àS1nÔch©Ùë7Éõ¹.¥AÈ€ׄ?}O£Í[À˜$Â8²˜ÆÃÒâ‘PéÍŠN§ÐÓCð;=~¯IåB¡N÷ˆ~ð4˜Bˆ{Zú=b6¹Ëåz_ü¸Õ(ÝÙdôœenBÁzéçCH€’¡Q”šP›ë£·J\„oœqTÙUд 2)¼Äl(SŸs6äÅŠ„~ËaH|‡L¤ÿ¢_õÏQ@ò¢mv ”hÅÁBéä169Y•pD|¤4&O>Â΀¤à—§„âB$‹< ´à<ñŽa3¬BÓ|à²!"Dp@0D€‘d BD„‰H¤A%H†D¤K"È‘("‘ JA‘7O¢âHIF@Ë‚ Ú x¦p_@aŃ™¡>ŸO8–|A!³ñ’0|Ú d‚I"ŠA ‚,€H”ˆHd`‚È–O™šš¯–kòF2š#eš„lò ´¶r¡ˆ#(ÆNÎà;!{µ*9mÿD&¢¬w[gy´ƒ—j0Žëô?µ–¢)ÚÌS‰G_íÇ"XŠœTDîß…+õ«ö¾û¦‰8,ׇËHÙ‡€ëø&eY“Þv{}`‚¾ ¦¥âÓ¡þÕ䣎Îò ‚A2õçG­· ˆ÷©Ÿ]/˜M =9\B Üoœ#J®¯hÖIEÁAåM]ÇÑþ½D?ÝU®DK8»;Ø>ý OLCýaß–è¬ê1u¼¤yP$¥v4áŒ'£8 ÂcI©yE€Ó‚mDù²ó8 ”]©À+o™÷.›+³esIþ9K™9ä¡…Ü;ÎvÝUÃÉ=Nȳzõ±ò!†CG÷l©M½àˆbÔø¡˜<þ×+l£«ŸÞÀ“þ(k•ɪ´Ð{ô½k|h—z×cx1Òo ÷ 5Ήì 'Àíš㗢l ¬Òõ¬æñ½£r9„憠ÛF*(ð9ëXË`?ƒsu±Q„ŠÆ¶o|“ä›7Ó“˜oÊ,öÝÃIÏxýŽvïŠóöë×~Õ‡µ‚§FŒrvŒúî^Îð#¿Ü.ÿ VcU㑪P«â‚òóÈ0ˆé8&Aˆ—ÄšÙ"**H tU‚<°„ÉjÉ‘hɳ´‚R© *ôÀþ8†w*IˆŽß-Ï‹ïïúÙL ¶'s9”C䙤7˜bnÇ7._vCýo{¹ãþŒ½‡sÊ^@U®-K:³Ee×Îm2¢(W=N$m³øÿ—÷kí°%Q“VzË[%_L••™Ê¿â‚;«¤…RŽ‘E¿í¯$ÔfKߥ×Z]œ+ê™§x´‡’…È¡8q°+m>þ;«Ç9?¦—žÁÊÁð¶;ÛUP­_ ŠŒ¬Ö©˜¬’TH³l‰¬Å¤òĘVu¶Lƒè­B2 Ù×níM2ÉCf¹ž‹µÕülßFNm’º]}ßéáðÞ÷}=Ž3ofGkq[(¬ÿ 1ç“'B’ùrà ñzb¹?ìùl%®×\§Â±™G¡?ºÑgÊ¡â`û÷„ê|jE9#ÙŒÖ𞆺HO;®´ü~Éx 6O1¡/åIÛHê’ pXLp©,IV;¶++}²¡…øLÉ™’±Ž …c¨d‚,«H ¥($Šc2{ÈË­ùÄM=ŽÔÿ¿ëÎmöü0ÿâˆqm'+I⡎À”‰Ó*ÓPÛ•á1wq’žîÕÉ‹ÑyÜRá9Õ'váெ‰³^áí)÷f gøìK˜µ,U(ÅŽ1®LW ëÀ>ö‰`ƲÅ~mQPpKp7kB"ŽËÔªØÊ‹É—3ÂnÐG Ý0¤,Aí…ÀÌÓ‘8lÉÞQ¹A©uíÔ­*éÀd›ÇwˆÚŽÀ†w•b$|bE…ýíËëPA•*¡pY"Ô²id øKÛ{´E{éaÛ÷íן¦ð”~¬I¿ó…Ù›«X)[½IäÝå*ÞÖ‡O¾ÚÊ|€ Ãe¤iãü»¸ï‡€²Þ‹ËwóyÏ™ýbGî#§ßÚ=ZGÈ4g9âÏ šJâA: 5/ËZnÝþÆQÓŸh Cä`g8(Y`œ ÷gDsc˜6Ž\ómø\½Þ}$Ù:,©¸*†´÷öÊœ?" ²¨N‚]4M£Ëϼ€¼à ¹>=néÿQæ yÆxá'EçG›Ž”,Aäi ¦Vý*¿/ñ(kî€xÞç‘r3#æ‰RÝ{ŒÝ뀲À’·‘Da1ÓÎ÷o‚æè»³²ònÃΈ£³êo—ÆûI-Ć€†beS¶™#ð‹ºHºX)olWl,(Ùovž i"8ÿ{M´0u-'l¿°·ÌrŤ”4//ݽœš2Ä&4ÿ¾‚X4Iö¼g¸±K²C€vƒ§Q h²0 K£C‘à„=Af<¤°IªE™¿¡]‰S¼=Ñs€¨à[€3l§ÒÚl—gŸo@ŒÀ²ÁxóÈŽ›lÑCXŽô1÷N%vr`Í )€Ä`—‘D³^ƒ{G€âá?¶ ]ÿAàA€¹¨wb1<âuE}þ UfÓ ,¬ñèØø}d\|±2 ëž ,”¡$ññs6 .ù¢&3rñfшÆéüµ84ôÄ PœR<¶äžúV¥®”Ïg‚~?2´ú¡^¶Úì‡7æè­¬ƒPÉçË=[H†½½|eš 5ž¿üÉ͸û¼qibnèu $ÄQªŒ‘ ‚þD<ø®>Ù(-Ö ;1ŽrªÞ.N(BŒ†Àzq ¥ƒÒ ¡Mô„$ `f“ Ðãs¡÷™ ‘I"‘‚I#ó¦('àˆË3ψ̼˜‡aµ_èžÇ4IÒm²>>+¹;üãÔØ×/zñ×mÛø^CzkTîæÿ|Ù_Õ?ÓeÈ>­PºÊ*HMšÂ¹6:"lN[ºs58‹eš„—,@¦°½’Ùô˜âÁgÁ<$ €L<Í (쎭׸@€@ D º9Öö…# ˆÛuÝÕòLñ[K°—[Z¿P­ŽR'‚pbdUDE'éuÚïëß–»GŒÓAþÏVü?´ÅÔ )h`(<›½–ÈÂûi’À€•¡Ìk.žNŸçy£‚…ÌìËœ§á!@$‹›B®•€«Õa€I®È,Ø Ý’Öü¥èYƒ4$Z數7#AKAb!Å€ˆ(Kè*Ï%åIÕŸ¬8P2ž `Î ^”¬À ä·#g¥a MÀ¨bŠ1qÏ«á•4³Fu,H=qýŸBü­aêc¨A²«®«=>d ÂoK÷ç­Š;æ0`>D¼ ‡(¦êØÜ`^Ñ¡¬nCÖ„BlÍÀ±¿–ço:²K– «¹¦ÄH¾Q•‡šô»ª6VI@2IMüÕ”²ë;ˆu3ÀóöI³?ì.ê'Œ¡¨>§£n¡}}ô¤Ý¶V£¥p DÁ™wá6±#ÚÀL«²Âþ_ H¾ªÒû¸ ðsFL×1}füO<?¼¹ï|3ëD±f1À›˜´öwÂE ï*±{»H9Ñz¨Â µn¤ÞýŠH>%‘“лmzØ}ü;&_óë5= ûÓ‡6“Á7ÏT=»Ó\ëÒü›GjÑ=ÜËÑ-7³a›uŸåéØÓ"þôîù*f¨ ;}>n6õÔvûy¿¾Ñ`bð`„&•oÎÕÙƒ5’¢¯ÂÐÅ?ϹŠì|xïj0@)]³ñòG—20tòÜf´ !‰‚ü· YÆ'é×ý~ƒ+ãñ÷œÆINĶ‹``J2nâ!·ú†øý’µgoÑç5?6•új  Háx @¢9&„…xŠ.ŦnKieÇsEjýÐIŒ"0GÈ Ì`„`‰´Æd 4aÁŠ“ªdƒ#.º !ë¼(»¥ª()C,EP°Ý àYOrUx8 -% çbç3žrÿ\‰³¼¤R4q¢Eˆ²ƒðI"AA¤¢§°ÃÕXp‡ÒU|Ø¿ú§‡#—Är%w9¤4ÙC¥·ãˆâ²rTŒÅYiÀ啨ÔW9P5¯`oµ»ŽûQ)@©F:S> imJÒ~DáT&–yk± 7 þq=å…pàÏâôôK_3^´é‰%î£&Íõ;›¸<×—äG4b»ê®Ül¿ž}2?ªguïÚÔ_/1.*Ò¯ËtœŸ²§(]B;ù êîý_ш¯_ÛPƤñAƒ<>?*P3ìГÁ-ñS[H@T- Œ­$ôÖ«5vª°j@j;P•i4€x7¡À@૎|u÷¸à9²ß’ ÚÌ‘~VÛ®¾öá⪨%¸¯ŒYÚ0s–åÔàæ¯¤=Xjž¨!‘…®èsןsä 5ím˜õF]\cVW>ý[ ;pËÒÆÝ~©<ãÃi3Âåú㤆^m«¯Ü:Ú­Ô‚H®ZÈõµLyɬè‡6Ì<^ òLx@µ@|€}@EÉ Y9æÖŸO¡xc<ös>ù-—Bû©¼ú¤æÑ¸"Ä,4†›A£[íûÓ¬ŽîåNù8ß÷ãǶÜî‹HN†}œô±sè<€d ÌD™Š^‹ƒhCÉ|9ú[ï9@t“¬U–A"É_´ã8LTlÈ`&ÏZ¼àg»oØð¢Ê@Ž¬Æ €† ÀÇT¬J"0”ûóêM3ÐÀÝ,¸.Ï!-KžôT5ßs*óïîÂâ=Ã5«ñ»›nå»xmïÈ`ùOzŒ43s3³@é—S¹ÀÓbýC_ cT ¥j!ªl~O•»»Òœ‹?ÜMH&oÿz°p×_ûL%žÞr Ðà ø)·ç=_—Kù£!ï'‘ÒsAÎòC‘ð×t_þÿké± I¡£¶0jƒ¤ßB©£—†‹ëPâh~ M ›I+åL/‚™ÉƒêB¨ ¬Vòš$)A]Ä⢩ұ&xáMÅÍ\(ffå&APÌ„vpÖkI’(‘KÁÄ8:¹àÐTû3ညs9Ÿi eÇb‘ŽB¿þvZ®Ûiª÷Ûb.b“CÌî"V/f çfN@}Fîkˆíºì¾§£Nèƒ%³’¿ðôˇ›¶†Û ¨Ë% B0…Æ'“­º :£Úöûõ›ê–Õ¥E`(ÞK„áLy9Ò<#¤îoéCsÔ¼.8ôÓksÉ—ßV£ê!@î×Á”¢1ªö&Ä0 Xdɨ"(^IkAÞV¹!¶ÝV ¨=²iÎT˜&@ŽZM]JÀ’Ê5!üÁÄ6úÌRp¹¥ËÆ@[«Ö¿jõ§§Œ2Æêá»Î¾(þ‚ þÀÄoVåÛlFáænö膂>BmWÔõk× üXI’ ÀLah¹KÝí0ÒP3¾Ø`ÊOxR`†ˆðÅÎ[ó&vtJKP3ÑûÚ7·çeõn3ù@ir¤wUFŸ3‚d%–䙩¶­^µù¥ë]óìÝg§§ùö~eå3òæ  H•CŒµx”Á œ!__ì…Á±* UX ÌT’Ü|¨: d mžµ–1ûxÝ~ëG!b—*ívËØ($)B€Æ1Òct75üÑ …¹@¤!žóO^ÿ_ÍcøÆ¶,I á±om%Tš Vv™€;„-?Ø.±6Yo&#+¥¤ÁIæ2Iåßhä2ëR¯Hò6š VéÿOÜúÀm õ›v±Vx¨E¡ÒÜ x8‚…V„«GÑûäл–§tí!ìrR†6j…Wa‡~²ùë¶oÃdE$ŠI‚D$ ’)$‚I$%PL J)’ffI’ Q)$HŽ–yéÕ¦¨kûDq‘h5ÿid`‚q½Äºõ=CÆè¤ÕÀ2ݲF;ìPZn¡V’´]›OÌYtZÌö—튬¢ƒ¼ÂSˆý8½ü=[§Qˆ ±ˆ‡`­à"ø/ÿ’@Gmlx¹ Q¯Ø#Å,Rí0Ä‘ánl¶é© ``‘â†9‚ʸ%‡ú²Øåe 4?fk &>àí:ª… åM@ׂ0,5‰]wÕ—ÖÀJ<”1‡ãf-CXsçoJR fû¥wú˜äò•¦’éƒwèÏx2Ù°^"î…ÌQ´ *‹ªž0$ vokDôÁXŽº¶‘Z–þ8Jìž‚¹ÝêóÃÙ„ÕW»²{-ÅN‘%À˜J[OÓÛiÛÒtá—G“PDd `è8p(‘ÈÊðò o@e˜ðæÏ/E½¨îhž¼D‡žfÐIabLU³kÓš2@3Ñ…üRw8å$’Dò섈úدÌ9Ùñö×µ]‹ñƒ5$c.Ç¸Ø vomÉÖíT6¢û'„â#þŠ:ß™¾Ã[íÞ=Ž–²e4 —Ÿ«8J!#ta#ö J’’ƒðg<[7„½æ‰Ôx`K×ïÜsv]ZE¨Ònd9Zü¬Ä÷Ÿ=Cbm- ¤g-ÁïI¸Ñ®è+y¿Zieö4› ½¾ßNÇ“øÕ'¥jÕp«…ü%Š{±@äýJˆÀ cId”æÁZi¸H@!œZ۔߅@]6@ £g e!6Å¡`YÉÁ¡.cÑ<ß;µ×b1ô¶™¬ÚßÙ[~¯(T'&ƒ–ÃgÑa3C­ësÝ‚Dwì¹ ºÈØ}l܇•Qä½ ·'÷pý¿Úê*ÚE€@qúš—VÿÂÈeQå«zô ã!•’i„3sÇqì®bÞ¢,V3…±KAž`ú‘ƯáoëccúbD;e¡†ª³K”ù*;ݨh‚ÀGé ÕÓ›r¨Æ@:”x|(újÆ„š9ô”~P€¡/½‰ô‘è!¶Ì´’úòÕç²[3¯íœo Ï6a6SéÀ!½íTµò§è~ÚoU¢ÎÇn£fÞjfôr'BˆdF¥7ˆx<¬O!*(Ž"Rß",$ù´EEÌGnˆü5¬gª’‰º´„E R$lH’@r6”rhyê$ê‘úh: â"œ€Ê:0‰4 DM¤Ñ eÐÌÄG!ü$Ñš´ˆ>¢#b ‰>²ï@ÏQµË[Ä‘F ä‚€"JQ‰Ä#jÌ+vÖj³¨Ë!Ý>Æâ±h¨i媲S¤/ŒÝú5ÇkÛ¢ÒE®à]Æ vŠ8É WY¬È`sW;ç?«…ˆÂpÿ›XES§ôˆð>OÁ˜q %%Òµî…|žÙ|å2S6ÊïNT/zã}™ÓWkÍú-à+(‘{ÀP]°€gLYx µ^÷HëhZ#…³>Üt¸àöHH¦/Ø“ïþo6,JÝxýÛ_ë|¶öLr„´]>?;¢¾ú8cr#˜É‹áRéYØû¾Ý¾äw h>S·~€Öّݎ̽ª¦98Ôå¾Kê߉ –u’ºÐí¡XÏÀÔª©t¿Ð´DX‹ñ)ÑÙ¨îaê™®Çýîq½*RY‰ÝƒR}i•úvQ³GÉý6Ñ!5°Á‘ñRÔC•\×ÀmäT.káZjßf–’#ü×ÅroŸvâìí®rßÎh”Ýt Õ`KðYx‚Ѓ¿§š¨<ƒöÕíä!€[¥Zùk,sQ>ž®ÍíòJ¾šÞñ ÿÒaUœ^ï¼øÁ Açÿ  Ži9¢³E »Å±¶þXa±ïF9uŽŠGþ¬å9Ñ©Óß¾Ú¹áT]𱵡’äÙןGüñÿ^(*±.©ÿÆ {ÂŒíÃíU•8ÔJ ka*Fx²¹ã ¥M}t=E0#"u÷ÈבÞ"@‡£õ΀°K¬[@W×Tµ^Ä4ÍŠöêŒÃA¯ÁÐìr|¤ÅØÏ‘²M‡Úšõ îG w¸û:áÚF€¡¾e7K¶õÌVKâÜþ9)P,Î͉àûå³!¥Ù~ã —Lï(þ‘Ñü£Kž ]g»ž_ÓI.MþÒE×®ßy˜­p ЍE‡•9†§é^´³|ñ??jÈÇÚ%€Ð"zW—QE« ™½^°IH¢pnOüšÒ/„½t²¿À°‹°bö‘ð9Qê·iÄyÀ×·krj ŸšMª,:˲ûe"zXŠÄ†64Ž)ËÌÅî‡ !¸ð¬Në.t4+ARßI.¨Âsnôp*a™L½ïî}9Fæoý¿dØ‹†æ~K¨P(Þkp–1A“R6oUå_äuTVñÞ 8V×óR±ogn/¬…y^ñ¿ó–‰ á VÒ“4Yš{-Í\X)fÞ󨯒o9n™HEº{€ã¡ŠY®ÿ¨×mâ¯ú¹žÈÛѰé¨iâ¨Ncå¡ZÌé<:Ä"•V儯=Ùì>Ã#vçÖ©PH¯ úiÑÒFì~–Ì=Eåò‹ë{,7Š}ݹ㦒MZ¬ZÊ ….WX‹ÂúP"=ÆÅ…6g9X9„b¢`–©ã3™%þ*f!PNåy<1jÿ¡s@Œùˆi zõ kD}¬·µ©Í¡gÅBèÞ2¡¨[ |?çY«Á…•ÕZÚ¬dRái8ésÑǤï€&ò©g­/mÿ,ã4RfPwnÉOCj/bK¥˜x®æÙ¸nñ …ßî!ç;<Ñ«€É5Ó×WÞAÎ’ªå˜ûø½ÓØ®jƘ8˜~/kEuTÌ—öÃX±‰×%((†Ö¿Õ<ÃH¥8PT?>ž)vø;tyòj*±3‰šn©©†µ&‰È~žÆ3±îæåßEb}é眰 šîÏÚXÀ݇ÄÚÆÈàBôƒÝÇòLÝ7Xj/ ¤üÑýij ü²2¯býUÄnSÇàüu£'Àï‚íß^‘X€­¯a#srÿp¶§ñ&Óçº[y6p;œË©D+èºÜYs‚­|5¾Èé˜Í\¸ðhN)P˜­ÁzhW@ò5 KÌ[(ªNÔª[¨AWõu0‘¥Üþo[èn` /8&n–¨z_{8TŸø¦ÓÞÇÀ,ä½PêÃæ­I4ȱ!¯¼¿fy¯µßI ‚¡È±öX+cQ¼xã@RÔ+0x9\×üaóYÅ›4„ÿ´U­"ß2Òêç~)Æ 7!HŠe¦îU%Ë)¶¬‡GÇò6cü)šøÈ¤ó&ò ¡Õ{šÔ¤–ý+Ôh«1¬‰1ßá2Z¬ÔÇ‹Cn'l@&†Räumºö/j¡âHÊ$Xót{ð¡Y‹°x¾r±½®×¤áäfËâ)C¡½µ¨åÑÌ;¡°Ⱦpx«®ó/аÿ7}ÑÊ:õk/ìÆ\X7 ¡¼œðýœ`o&> ÷u àåaÛñšø{ÄG7ÄàüvUϤаTà­£[ YEkj™é¨Pî%¤û¤íÊõ;ºôx{ζͭ‚B¨Þ‘^²üf^{’ôk°nL ¯ÇOåG;Šô¶ßïh®™õ”=gÀ‘ôt/?íÎ ó½³[vŽún?Û’•‚µ^ß/ëï:PU¶m\’J±ÎÖmy]`gʬ»VÅD( cJÑÇ«‹û¸³š¨,S¸@ôŸZEŸN[³ÖÖß2C¬ûy®IÏcävQ<·?s†˜½ ÝÍÜÌëo9üNqÿÓä_Gê#Ä`ZÖP¯Åš›°Ùÿ؉|6bˆáU»·ª á$j}ºßvªÇï½K–ïÍÏ»æ]§¦&™ÖŠä—Ý=HÙœ‚ÜEÈÜÁ‹»M¢MÐXb¹¬ízªÚLaÈ=8ÊRzøÑuJ›¢X3ÛUÖ&ࣛîYÈ »³¥ÛfÔ•º^Až7pk4ªº›(½ß11ø&‡é—?Ø®ÃkýŸç¥Hª¾»°=‹ƒùsUÈ•œß¹inòv»)‚p ÷%óŒù´7v!Êùf‡[îcⲩõ RÈXW‹²œ|i¤zz×—\Ö#øà–Éa€ú8¼5sEÐûœéj°ø†Æ2«-ä±bÌktaAfŽ‹õÎÆgÞmï«î/àÞ‡êvÒ†ãéïB ’f ˆdòíâ±B_è¡R¼›ù¾ãK_ëûÙ]…ªvÝVû?lDÊ=ù˜öìó”¿vû+ ÷%*í&TmÂFT?úY#`´}•Ô|—@0²ë<Ú¬Žº–Æ„áÀI"ú%²DÃï¸z©¶‡O뼿zý¤M)9R ¬(E)/D/XT("ØhÑ‘‰  ö]`#4¸GYÒ°ÚR¥ '·¬úíOÆüÇ(Ѽ:a¦Ø ùœG㉟¸R¶ '4IX8¼rIo7ªM#ìKE1û‘ä%iÎÆ„dÝø~½ª(WL> 7%s½=à5v¨¢WEhjÚ¸Vÿ·YÓ ó§ëPÐÈ& ¿9Ð7YÃâ)Z,xNðó·ŽÏ¯ª•¯ßïó`LrÚ"H÷؆S?± ÖÕ'塲?C+é0ÚúÛ_ÆÊÆ·žSX+G'o”5„ÇtÔ›÷’~¯`– |@d'©uÉõ1Èôd˜"ѽ·ê‹:]/¬®fä$Õ)±àiWØxul¶T<¿`-Æ%Œv&Òê}UH!ŠvÒFsqµO©ªÝïºû>Ô{ÌÇ䨀²æÉªó¾÷§qg©ÔúšÃGðî7Òß6v›G³^/é ›g®r uy_¬66u¤åRw©¨ ™Û8‚EÙ‚g°¾_ÅÎb‚Á§QýžàyÄ¿üð}30S nóYY“K 7/ÂþA¼Ó<®v&}Ë*-¤³‡µp\ìF-¯æo?É›¥üÓ»©œúiãÔÒ¤øµ$ÌÉúÖFå …fé! cÕ{(‡ª‡ý@I™%©Ãøg¦Ä±ê&ëû§;K’›WhtÍ—ùŒ}¦é'¿ÏâæC1·÷ås@‡¶›·øØÇÊåV­¤ø¨ñ›j\VGáÈ ê÷ z™{6‹³ÇÃa¼ÛöJë·ÖŠOwÊí¢²aßßN™”û# –ƒ´{n˜pítŸ}– oŸ“T¶ióì¬M&<é<ëé׫“Þ©á‘•!ù•ê“(¦êߎOm-âáK Wmÿˆyš· 2õ»‚ŒöÅkÝKâˆ. ™ ýùšï`Ð0O¶•%m>•S ám]‰(œõ%ý·cÐI·”Z Cî“[û“¶pàvO· Y_?Ÿ€m¯2ãIV¾v}(©¾úd1­Ð¥•E@îØTBÐ|ªÛ?»?ÄœÊC|¹&º  ÷1Qßãe!Ó臞\Á+e–ÁÞTÄ£ôeôH¦0_Bš7ÿ9=Qdæ³t;›fGÛÚÿÈ?ïö4Ø0oé:ÝüŠ€à „®Må(ù×M"±eF!Ë+m6?6èfáh<Ǧë-“é®8Lñô‡.uA=E0^¬h]£°¾Üò@gû÷ƒþÊÒã>«S[;ÄÏ¿ "Ò‰íDkÛFO’_޲óλú?êÐ]~íù“ ÜÎgcõlÎÝ0¼ÆªcOd¶+a˜3…ψô|,iŽ:ô6·möÉ`ð Þ¬Ö†FDšH¡gƒ7‡ïƒQ†4aR\9@å$Å”ü _DV–€«úÌ)E¿‘² eèXÇ7ÆëO@ZóEÈad÷ˆ þU6[x‹ßq„ÙÆ¬$X£Wà/¿JÞŦœ‹1 Ulý‹f6¤é@„„7ðámö%k[Úéc~È™d’™mvy‰Ûo &ŸQ’;'Ò=uÑÀÛØ›.}´—jqUoSÁ±È›v'׸ɤäLÃÀ䎡Ͱ«'Q›J/. Êj³7m:öÞ­ó 5 uâúÕí¿œ^‹ué²÷Dˆ‚€”›¡»lltælÃ6$ p‰šÒÂèãž‹d¿K¨â bÓæVaØD8øÕÈUL`¸˜û1l`7ÈŠ1„$¸Lü{{ÿŠ¯È»ðªÈ–†U·éhZdÉÓk*î”$+†%PúÏ–:´`çåŸñnËÔhÉ^N}^ݰÀc„Í\ÎÐöˆe’~¦bõ ˆ4û8ýÚI·'¿aY#…k®ŸT³3Õ®#®5Çñ‚ˆ ¿ÂÇŠÃôêWWmÒ«ô›Pq­™µ+̽$T@ey©üïiUε ¨û°î®¶Æü‡KçMY9½Ý=6pS,b>äý¿*'³ùvÄÙ$AÍ4W)JîmלÄÿ·÷VPUz¤r ¿ ì©ç#hQJ`pgE`IÒ9ƒ—ÓÙ«Áct·¶Å­v9A3‚Ÿ¹±¢ãïÙ­½3’d£±dó6>ëFÑ_ñPá å¡¡muÉhݳ©2ž÷ë±WzUÎÎ êõ5Ä2>êi´˜€@ß œŸÔ ¿žäáÞKòDÍUÙ<§µ+`TáSùX{ á|·w;:‹œ¢nÈ(ÌËìâñ¯[[¨B4I¹ëîºux}æ)'H}ImiM3Šz°nïÆ–i¶}\†‹ 1Wª‰Ô†¦H7!„KµGJ¯V¾Ø¸úÌ¿Ÿñd½ÈÌ´­ôLOáW-ž <çFi ‘è= ëtÚ½ÈY™è(®ˆ§W“í¼”ƒµwCŒ®"G?»M³# PýŸît’!;*ÛÚÓ0[ähf´²Þãök»I­²Ž‰u˜ø ý!X¥2^2ú—Ds)VEjša>J>&"¾™,Êm=í ïLÔÞcßÑ-ß/?¹è¢Ütjù£+¢„£·õC×”öÒÛ§Ö#Ñ—…&»õí\ŽçÏ%×ê­$ج øf”=»ö\ø­g]ÎoÒˆý/^Ë.‡ntIÞÒlz̾ˆ5Bî…‘>ô/ÖÉYž 8 #ɰöøœ¿DÓÿà.<8OÒN<¹£Oå¬2½l|5²¨$‘k½©¨xsî– œ áþÜ”O%‡!Vy FÑ­þðžG•yÝäVw]lHÓÃ>CÂ22ýÓÒ߸_ääA,ÁØ6o‡},„2S§ü{4Q³”¡¯dQTöÞ!SjÊ*KÝñó,†Ø¹—_êXÁŸRb‘´Sá>Úíòé%Ö™eäŸôvÏÔžŸŠ[ü/•µ;†þí¸FŽxnœ +ˆ,a ^†%[iæçÈÅk{KòÅ`\ ¢ŸõSÈyÕ™UJžUó‚ ¨wbI83ý˜jêÈÃMòž­ùŸ¥†ÙO»Z7¢6̳U%Ûå’*L6ï “Òåž˽ª\|iw6s€æ =Ž†Ë¯ïe‹ØT!7LHÚµÐÑjqšÂ¢ì¯íIGqÜ u%išóL©Èˆ© –õ–<Ý1UéAÛYù½—yeÿ¢ 7&Ï€!à&\šèó:‰<Ö|Ÿ$%GÃ')hÙ!Ú–~ëÚV1>½Ü»¯íó?–¾ €cêÔ†¯( Ì óœù&ŽeîHùs¨˜U%íÑ4Èù/jþ['gÑ×EÙW<ø.ó•EôÜ!°që¾¢cÆñµ¥T8Ήºv¡Þ?V% ʨíìðªôüð¼„õqåêäT!ÝŠA~Â=X6ǤJ¤ŒU¼N»GÄãåËÊV½eee†ÉÛEƒ( ·Æ.×ø94‰:ÒÕ³ ª§ÖÁ~jAó«êé4¿3Ãò¼Š»üï,°ãÔ·ÖOÓ¤_–rMŸ<-o‰¬Š—û·Ý¼ý„mWf‚<áܺ ¶“¥Z„[·¤Ž g5ªZA[Ptâ§"«n—pºà¦aSœ‘ê©!c@gŠ»èxæÍåþ ¿˜å5©z픃lq%@™^_%Þÿ,w^ܯß,ÇN!4– ùÍ•~ùr}—ªç5í ll/"  ŹÝDeòe,‘Cø9$È8|ü ™=¥½%úƒ½ÔÝŠ-®-¹¢3¾¨Ëp¢„ËfÏ™qVÃažA:×Y ‚U#ï§¹ÐÕª÷Œ™1ß¿ð"E”L'öù0ôÁ®Êì\4·tœF©DásCfF'ÆSthc¿áàkHâ’ Áº+’œçµZÉåÀ(µ»‡‚}à9%~MÎÑ: V‡Qó¬—Z%t» û( ?«ßÇú$Œ®•Ñ—ýáOlh(:bÀÐýé{çK¾–=eáßžY“¬{Éèà¸ÒûºgEÐÙjéébŸƒL…-?¦¾þ‘óÐ~µñ+ªôû ˆ¸f#…´ÓC-¸$‘â*ôìŠjOkÇâ•ѳ3rš¤àÉðÙ>rz:KÖÛ¾ ¡gºÆ¹ûG ‡Ç^Ä}X®¦3ðùJŽ¥šx™ÌŸihÖfÇ¡wኂýWr­ìA=úT˜G©‡Yè>¶Èé’ÈÀè/‘ËuoÔlÔVåjªÇÒ(¦FÓâèàMÍhѺ*ó ·r=Ï ¬ÄÐéÅ¡¤†´ÂüYÊŽ-p3*mï5¸ W§=yKGfI>»øw !¬žÞ)oSïèÿ­hüÔ¤ *WRi2fzá ö—n¢ÀÅ+>}tµ§¡‘[´í+ÿ+™ÌhÔ½[ÜJßîŒÛ]Ñ×õ‹$ W A¾øwÇü­Ë'Ì÷òR„¾ü©Ð²wi½Ž6îjTð ‹uÐb‹,ƒ-®Y8Yd*|ß*f`Ž¥UÌæš ýTË€¿ŽþyPáZ™Oqãów6£æb]Á<ìâã$B š(ÝöZAÐóê«Ò­HD7»ÉÿC'|ZðÁƒžñ/$é$RÅ+nH:”%[µËJÊAÛSŠ2hW€0¥Ø³éÜ#v‡ïÆŸ³‚‹­åƒ¼Æ] hÑ,*´—‘²›†ÐgÚÖ~ÒÒbj2ŸÕâ¿: ½øó¨ï¨’Ìhçœí{7›¾™jbÔ™9Ÿû¸©2Ó6ùDiI,ÝC¶ÁÛ#g4­>ï‘yk…‰jjM·™9Äg‚Ê[Ug>jJXb‘Fx߸qoæÔî›b§U©3åÿ¿•>_ÒëÛÈ-ÕN‘Í‚kÊÌ™ÐZ1ÕOrÖ"¦K¯þ;Võ|H õÚiP@aŠ($« yä]¹è~ï ñý¼Zr @bŒ¥Lœc˜[y1ÛЮàš¶£¥e¬‹¯ùvð÷—¹yÚ¤À$7Ø»Ÿé°ìY‰š¬bˆ qpŒÂ, ¤Qç*j1ÜëY<¥lã|UÎÆ¾k—…!æ%˽þ¼és\¤{àÉA2%É&6ãa º×ƒ©ø3Ýó„«W»÷Y¶¿¤ïÜúqÍ|Èè:{îrëÒœe$E¤p÷T ƒ¡¡ð‚:ÞªŸ¤X0#¹dðí¿ÉƦ Óø1R_ h’_ º²þÕzƒ„ä÷óð­Á.£’` õÂ0ø®+›Çoz/óY½—©?±oz×Hc=ÛÝÇy3Û§ÔÈ@Šó”Ç•tŽ””r±* S{RúL£ÀØíðÄ÷¾(Ó5È!.åšc%m¹&]§—QºŠÔÊd9Îjn$×U¹'#yã§ÖlãÙûj9•òÍ%Tš¹Bæò»˜t¬öžžÔ†Çó²ø1ˆ|ôƒ9”ëk sàºX)ˆi¾ÖÇ;±‚ >À¿´ÄN 8}¦öÐÛî€Jió œo¼½ÿüàôÝËÈwm.žW‚ZJn[dùÉH'Â9^ ä騣óvÕ,f,wõÄùË#aAÐëþP¢Œù‚ÕÉNÑ_7 p€Zÿ¼H€¦‹s´è¸Ò|ö^æçË dJÝË~ÅÏaè}‹)!¸¥+sÏK¹ó‘°~¼+ìÉlpý׫pB¿FÇcc1o·†Ö1c¬%¸ ‡]ˆSü‰„íJO‘Mqž´ZÀ¬Û.Vׂs–u?²?ýïLSÏ2Δ@@§ûóJ<OßÉßTâÈê\k‹é§‹šž~å^¸Ñ©.0ϬÊßË>ªü¯´oƒ•’öVRÃý_wÉ‘d0;’Îç+'ô½0*Ãô;s¬jFvJ­VZZá ½¨"£ˆt€ZmŽøæ\ç’FÛ¨:dð“ÿö+û&CGªô²#’óصÇ]Á“éʘµLÉX q«šQº‰†);óvfP½I Üs‘f_§²‡™ êÑRwO±Ç®¬übtu.;Ëwd,bÅæØÉü£Sý>l8Ÿx$½w³é|óÛ™… 7üz€uœúCÈ…Y ˆà#"½þëß5ˆ«ÛÉÌŽÃ`\3KûÚ&Bžë„–D]iR@þ¬üR H°@#™¬c'Ù-ççÒÐGêg=>Å*}~¿@ù–bA‡?S4cÚ7úÛ„†Œ6…l¨ëîèÁIC[]–FM!{ÑäD³eMB±®ÜÏbqÇk9Ó8ùÓ ¢lUz|CÙH€nOòH`_®è!‰vfS«WcRóY’_ߣnO~®¾õìDZ 3f[¡—a¹Ãs§è\…½!LSÃQ€ÙÎ|ŽªúïЇßsI´¥-ä¿sÜFˆ%ÀœPæ5'Ô™LF8ÈD¥/7÷õèH=Ô½.Oæà/ø¯aáû>œYL§ð$« #â=à-r±µý¿øŽxM«]êxÍÞä†ÕþôX'M;£tü¿Lþ–Æã¡÷8L‚"Ù ¨!RZö×@QeËržg\îdâÀÃXÀõÅuxÜ®/à>oc?6^¿%34ŒV»¸Ê\êdN%Fƒõ~š³‰ò( #óÊóv ñDŠÄã\`n+E¡ä{VX´´~ÇäAã‚’tÃñ÷MÈA¶åäXA1¢»òå#)2VêöÎVðŸVE#¶}F"âq.{ШÌúÈèØ@ŠF…ðóÞŽTl‡'}o$'ÉÆþа5&#ËHüƒ§PZâû»›èɰž8ñìîÜ5ë}ºÅÔØÿËk$zãiDvno=Y+T'¾hìš¼JW„¾\]ÓþÚðƒÿAf2* ‰Y ÎÀ‡½± Ÿö=:뾰Õ [¥VÏœÿ2i¾â¡Ñ˜ÜäˆMüÏV2~Si,Ámuþ™!v•Jí˜ã8wáµÕ¦ .xÆ7¬øYˆsºGØrx)M§m:ªrú›"ð¢…%ÑžøÊZï;Dºõ6zY8W…è´L>3Žb2#üi8ï Mþ=²61£·T»Šªø¾­ƒ±ºÝÝK/ò~ ±ó½P;¼פD½x¾`Œå=‚+·fNˉÁ:Ì“v•®Sp˜#*®#‹!Ðé#$Õæ¿«âôŽW lèà­Øòâôqœ ¡-Ϊ3Ôkâzí7\䯯©ˆA] `Z9 žS,_™¨"P3?M©B‘—œ ‹e=|‹, ŠÎìnYè¾t‡P%9û¹1_J¡Ü”Dûè"n<ÌQâ@KŸöÄi?½ÍŠ+½8ðñiö”Óî/Ò^àŒƒCIž(æ>a$E~[^¯+CgÔ5$BõY~š8ÐÍcq¼ƒ!  O·Šûu{ERò¯Oj\€ß\ÐÙÏÄâŽíƒ¨‡³H£ ‚ÍTßúü‡ÿ}YPÒøÝ:7tiÜÞé]þeM-vw¢?9qö-Cgûok†œ5ÏêòŸ£ºè1ïP®± ˆèÖÕ:ç¶F/ýb2w✺A@€wcÝÀÁ¢ŽÀœO, gZº©ÑX¾6ùJc+è;žÎsê›y“MÐßq=Ï(ßV“´s9ç¼àA!ïº\ ,Š&áŽ×ýRèØ¨dCaWA—n¼cìÁ#ÙåQ’zšÿ%ipí{½Ó)ÞT RH‘H­ï—¤ÜáÒó»G'‰ÂQë½Ï“¡9’hš6.a ~_úGðÿ9eš&“+é¥6ÌžœóÝú³XneÆ$…L¡QÕB´ …ú€u`ÃosÙ܉/¢]$rï ƒQ?/â ]bgP‹ÌL?fòz×x=ª“E —܃¤D×*¹åæ:åD©¦ OTr)–† ¨ Ô׸VS¶?UÌvÓÓ!±K‚ï»h¾kÉšþ,Ž@&=‘RƒµÙ9w))tObÞ‹5­#pPgÅä‹$‰ ušõÍr1퀆¡ ƒ8‰îŒ¾.ò ƒ<Üw^eÉBÓ Þ.#Ư\dû0f¦ÜR'Jxåû›kªº [cí-Òòý­Áȃ[nD¦ä?«c.¥÷=U‰ê‹ó<߈ ®ÕbNѦRÝ×õSJRq Ý Ù@'ÄJÝàònöˆ&a#<ütì‰Êõ¼¼Æ}U®¯oI%Œ~YF'‘ <©Žjf=YÂ!ÿ¢=†Ù°Ÿ”ºDÊ£*ÃÛèÿ¡6†€¸ÂEd¾ ×ß­ áÔÖ™ÒèüI«f–Y…:F qX‰©ýÒq“·F^`ÎPÈî/oHÚü@Vý³r˜êÜikÃg®"üÊȰí°K>lóåTm"sNUzõã á¹»t„χŸ”uØJ˜ô‡$½/,Œ7Hƒw˜BÁ!¢¶åú£; |Pâó†•k¦–{p'ì- Têw˜Fىɇ…: µ–¡Þ|ÂyVØ•aV«…¡xI;Œ ãL¶OWš×tñi–ýjf øPüô“ÈR¾ÇG¼ªËªE ôêÞÕV×é21 ‹Øóòqgý ©Ù.A ŽÞZSò]¦²u¿n§IàØx íw'¤Sñ3’™÷ŠyÆ$Êîf~<°]Íûyg0ú¸2¤•O¹gX@Ì0:pkP÷ϼëŠáþ§(w‡@€¹Re‹fÒN32ú¦y>™fhÛÿ ÚÏÞ—Ûº°к}¯în¢å¢+þoå•6 S?#ZT¿h!¿"0Üm_îJ:GìOÓ£zhs©Xüì‹ Û> ¶ðÎþ³üî¹Ëd@z»°\|˜7Y—ìâÿÁöü ú{n,g1O•ý+ €WwÛ£é‚'Üžº¼×«iËÄÛ!Æî¸t­àõ9 ‘H2TÂ÷y7îš¼WØÿÃwÛàî»—ûÔ—_àjœ*Š»”°Ù’CÌr-Ù¬|kº§]‘žÛe¬kPßÇe}ïÉo_Ã]{÷Z§bù(Û¨tS´É6°['ú³ÚÉiÊ^8å™:ŠÅ[NÄN’¢$™[(çßf ã‚â`(´S¢'e)Æ“åW™‘Okü[h¦p÷où™x¢a –ìm"£÷á< k a0Ñ”WpŠˆîWä3ûæJúqÐ_•pgä‰ÑL/î½pö&•ð_µ¤çöWt£Nõ9jnoÊkÙ»àÊ/¡NÅH’ºìÚ'x#áe¡¾l&é|\jBN®¬Xr£Ÿ†iWÎô.ûksX»ÕqêœSP{ú'‘¤”0i‡0Z5iUwå«6j çTÁóÔHnÕjÉ )¸ ?a Aá“ßã­F¡îïP¤:mõR×9Ö6£Ò¿ ɉ’íÀªgGçW\enb™ØVO$°RÏ€A¹r|§,T‰0$ zñ¾¥äÂû^S΋”ÏUŠìpz£Q†Ý<_SSIÑ/ÛÄ 59Á*«HaUIøEvQe}åí0Áµ½(§kì.üéÆçµÚâh«E @„ ~ÌÜìÊ­ÿ4ÏóÿÓSS Tã]ÍÑóI£^»§zLS½{gw&Ý—ìæÚ¡fÑ´ù/<™2íºAÅÉ:ơބ¢3Tú‘'½¿Å·§K í‘RŒXgÅY 6wDÚËéàî]ÿ`ìÚqÔ 7€ Ù—¨÷{Ãc1¢Gá5ÞݱÜxK}Ò~ÈÑœÃè5íWê°÷X£ ×aú¾vß_ó°á>™/ë¥À œ$-°Žã’7¤N'ò¿2“c{¼O?)c.ò£ØWï¹ùTQV3?J“/{TgÓ¿Ü©ji‚²è}b$ù8„}æ±½/ãß>D—¥Ï-ýsŒèûËCÈŒva§÷?LuÚâ8C[+!„w€É`#w8¾¬[Gè/…ÝÑ=¶ âÕäôXžPúe¦”Éì)‹- ,4îo@‹*Íöb¼N:u‡•Ñøm ÈSH’jz”ë8°še0ÙôÒ’.™›õâ}™D–™Cƒú<ÎÖvü<>o:|ù)¡¯Þ‡©qM³‚í ˆºí!oÌàŒÀ@„Ïñ$j†.'M^›è6 g«Þþ½ÃK^ËðsË_iï–€»Òáhã„ÁƒKÛ zª~tºÒ}€0-øR“ïø|I¯¤ë5a8#“ùÛøcû²#ƒß  9c2­aæK}¬H„0JÛ…ËcªqÄ £âÏÇo6ë#¯ºó-îÛz! ÁKs ^«Êª03%ŠRŸ"ãk†ã´#õÜ.tÇŠ6¿G„Þ¬†'‚HiXp7‰ý_2®nÐh_|­DÔ¢¬ÊÚþGb5{¢t6æO=³?iÊwÝ/<º¬™—wˆx§º¡Nª½…„{mý@åXš¢y>äÊÙ›ËÕíܳØ!EP^¢ž[2îä*VÄ ´ÙèMZà7ÓÎ77ùºìƒ2çÅÓÛxý‹¾øsùõjØ Øå+¢ 8Ä–ópð~Œþ¹S-/ƒÃÇzül®ïYЏoÀîL‚# ²ÂBc_ùå+㽌Ócµ¬9\^©2‰tŒBb`†&èM{{Ûb[ôC]Äʦª’¾>”~ä1»•`Ô]ÜÀ3—SšÉk©Ñ…:Ë«ø¢Mƒ¿¡F7$¤îÉ[XkýÛ3Jj?µèËé4Z¹iûôEy 1•8¿ ë,({GœÓßf'ä3cÒs08ЄZÛD¶¨/ZÃ)yˆ™µüË‘þ zeb±BYeBÒÆî£bfò¾ROû‚TÔôBù£…>rïF¬/†è¬“ÐÕob|Ã_…ºõfú:D¤ò'†þ—\ÿÇÂyàZ à`ëŸìP§šŒ2ô§RH‰íé/v¾“1ðñM|“¼ÃÜ› ú*hM'üRc#ØN°g߸ulçó,•È(D?)ºÍÙ«£vÅW2ÊøD›G·+°Í‡ÊB7?QK7w“ceÎV&©¥Ý­MÊ-3† `ýÊÚpŽN6Êß%v> 6¹H•ðZÀ‚G¹Ya)å:‹“>lü™ÃÝ?Œ 0ŸsxÆà=7"ÒÕûлœã¨½ h¸Ás-§šðr­—p˜ß;AuþØkzTèxôôÒÖÀQaKË€=’º&üahceà„lAÄ•|7Ò¤N”ä¿Ù|Ö¥Íé“âÎù×;ÁµßÿŸîa¸dÙS͸.æC­®wé4ª°8%×_öQïâ áðîµ.9š?Äm‹1?šFŒ®¶W÷Oò4'w˜áx·ç-vTÞ6[RwVÒÑëÀϪ5HíÍJ¬ýͳ\? n‡ê³ˆŠ—蛕çÐ1euãYÿx’}¥ÚÀ]Ñ$¶Ê°¯ i¹¹ôˆžÚ‚ KÓ–è ºÒÛÜœ7^Ö°ÍÀÈ0s9à  2àe™—_; ~gLõ=ÀÇÔ9ßñÅKÕæÂÈ8‚Ú¹Óbì90ÉjüKjáC½B+°² ÝãÓX äô+Ýœ±“;•5|^Í›Áï;ý³º¼ô­éù„;R€Þ-™Ã©þö‘´õœÚtS’òÁK==ŒÞ”wä>÷„‡=*Lq'0‘dB‘‰Ço£¼vô!ÓíðÅm³³¶Wc¿Iûó=ð.gŒk t ®ºìîI0³mÄÀâ늾pi×§jWž&^Tñ.;×…p¬ gȹ͒½ÿ)¸7¸{:ªK¹F„Bb“>< £íäm¯\„-³Zúg±sP&CÂ@ò=RûȰ.}Ä’Õ£ÊvÓ·¶‰4Ò¿ØÉäý¶É8ìfB€ ”±ÙZûø‰´ÙJ/!©óйˆ·]}óé40‘ FÒT²©½˜:ö‹~cµm×”£áR¢”£ó¢L :Õ(éq‚’O-"Š´5]B˜ï ¹a7Bò ¶i«°k ÷E忚¹9½=Éî·«€koÅÁ¼×®¥åÁº=fÃYæfø‚YxU]-5ð¾ùY5°í~ïËê<%> £®N—FâJ¤ªƆ0¬Qï›ËÂ_æeS4NÞ˜)½Àc#}˦–È<ÉAÎ!ª`  ÀÉyuÉ}28ýtfiIΚïS¡!-qIÝîÌ-#$\º­IÔC7æo·“ü+¿ƒ%µ˜Ôâ„H.¹?e ½%0áÞ@6[¾†ýKÜZªÍšÂP~ÿõÞ¹*jKTú™¥ä¶ˆ`ñâQÞÕŽ¥Ø+ r ¥‡Ô|ðQÆ1ÊLøKj0 zDºÜxŒr+ò-¢ !›Ñ³GçU9F¼àðtu‘Ù쿽ÃRK³ôÖžÛäK…‹ÆÈçI#ÙÄʹJPAAÊÉø†µkƒh¼‡ßñNtÊ5*à{µ‰¸¡Ý·vƒ€óÁqŸ¨‚1ÕØKÏ 88ƒWb€¿Ëý3W¨É|þ×¹@":žËˆ¾¸!à [/ÛÀCL=fìÞÎ0wÇ» ;Î,9¬ Ê&lxÅÎW»¿bdBõ/fíp]HþÜë2:šÆþLÛ\ïÍy¤Àk¡JŠòãK´±S^«0Ž<„‡T8Ú«Á7„lÈËvÝ?¶ê1@HÎäƒÌèj€F¹Ñʈ~œ/g΂m D»yÝ5VU¡É±ïbXp¶­Ëö˜Jý¾Wtuw¾ —‡Hî Ø7ÃIï\¬õ«Îæ™Ú€Œ±Ü«"lŒý¥-ˆVëJëXÊöd‹ËàL®"–¢Pû8û$®kŽx(;ÿ`PKÖšòqÏàºõ^±ªÁES±Ä„¥Ä;Ø@ˆ¹ÂIJ nf’úTšŸS’¹ùüL á‚|û” œ(w§>ö(ÔxžŸƒZ Ú•k°ˆ§'/ÚŽ3D5ÝU•Öy©Âš‚L]tÿ1ú¾}FH)]vÿÛôëÖ]¹u^pýLGF’>Èãô%ÂYxzº,ìƒYÔÁ«aZ5VCh¬j%¿5"êh Ã"…Å#Ù¾%›m‡Ç£ˆûapŒQÒ/Ý# ´t…#ï0´D)¨ö#8V¬À¬L@ŒŒ¼ÿÖY’T¨`n~p´o 1xYzÑÀ·h‘Ûëˆã%';x‚œïò1k»¤˜Örââý<“úuÜ~¢Ê¹¡ÃŽ¢ß7=Ý’B4’å Q"WZRºa§mH^&^IµÛ”×òµ™Æ|‰Ù'„† F’lq ƒyúƒíÆ£ð9HÉ Ïï=O” Æ~–9’íÅÌ4rty©Ó&p&¡@ÀüÖílmÕ£rêʲ)lÙ¿æ6‹rý˜Yãz-O•ºÏÌϼپم±yo1@úˆ«¹š–âx¦¶Y^çþf.ñ™ïóëØš¨šyw‘±ÿUÊÃq¹è®ÈÛE&LÌÂ,€2–ž«o [+¸:l§D å· &º/ â)Jf äZ­¶(E"ù.ùÄûë¹Dö­F²ñŒãÚ.Å¡"BÂ/Ži~—D"ÅzQ,€ÛÉ£ÊNa[Ú†|áù2'ZË*Ál8¥õ+U7t¸#&^…çu9… S–5-VGŒ}j ¾ݱâÆô›Ä ¥>À¯[«ùR]âRB’j3Ø;ŒœzªÉñ%+Þþ‡tF&™ô9†®í/v'-½:„}å …Î·Vó2µ"ÍøÎæìvSË{wä±\SXNĤhk”p“°K㈘…›5÷Zù¹Ñh/‰cÆú«ú|iàX›"}ç¹RIÊeyb5]Hº¥xî:nÞ튎ÿÍ3;Pä ƒS;i`Šß4&xV³@A½WˆéúzJ^xÆÑÝpŠR ŸûÄø§•„Ùö»%ѼIDac˜.\LpjË­H}5>‘3C*Œ5 í†Û¥C¾ÒáÐ$|'YQ"÷HwôÙ(`l·²Ì„*[ÁT™›ÔR¿.ŽÂÝjÞ÷v…¯ŒNXJêºÔ6Þ*©D }†g¶õÄ‘.£[ëc•¸b%T¡ú\ŠÈd©bQAø”KÊ@8„ìþ æP‹žy¢§ûfƒ÷´Ç &dë ¶‹M€‘¿*Ù¯sƆÜÎJ%y™^7‘W¢©Uàë4ÑQ)S ý…eâüNÍõÿ¡töb‰P£Ö9/b-º(ÊN#±ðóé¨å´å0ç»ámÛVŒãÅ÷Þ¡'Acƒ|BJ¸Hü“×]ëo(ß™ó(Ñ2[¶{F¡ºÇéw>U}™ûšÎ¶1ÓÛúël¥¶bý²1ÿ&Š V#„B= p’wxéï0ÇäÙyNÛ–éëà2/ qÐ?cE?¡ƒmëôeÆççXªVTI“ó È€…XílT¸Zöµ¾/5{ˆ&î‰4©÷ìËÛɸæN÷ ÖÃ@«=à\ü(ù\þœù˜þ‰f)HðRCÇàÞ=)N5+È#$wÃmÉ&$S‘\–GY8D}Û¨ª™?'yÆrt«CVŸ%@“’-&U+õ–H¥8D ß’…Îtw%ÑQ+U×–«çHøç§wÄöU76µùÒêÞËu¨ùŽ·ÚécHƒ¢îzÿaÆ„—º@¹ÿwŸ×ükJ£·,ÔK±Ný”Á|¯ ^ƒäz:ZLËBÿÈ&ÙùÕ~_“B›P¶®%<óái2\ˆaG§¸ÃÔpGqÇBJ”­‡¾¹”° †ZWFÁ!ÜbïÑ¥<”s*/ά÷-ûeb&õætÈ'á® ·;—Eì™ØÄ2&”{Áïd@ç[? åh;¾¬¡Å^À©võ ÀT‡üð ³LGÕ¶'©,Dã"ûó¹€BBD‰8ù«ô:@0/rÆ·z6æÖ–Ïí¬2vÅW5.yugWü±õ¡~‚(š xÄQ=ŇÜ/1 í`üµ‘www ž_´Æ7f„{ò£¾S†‚X”Wîï >Ç•ŽíÇÀ"þ³põ,#½$ÜF<íS).çµ+µ ÙMözÉ{=ec_~¨<6ã3@VØ÷DPdt!B5ÍøJ‰øïГM— Ò÷< %×,kaKD©¯¢[\ªÉwéQýê¹Î…²Ÿµ&œä²b*ú\TºïÅýá ÇûŠ‘Ë0jDþ×’´ü¡O¹Õ*±—ø+´ßŠ1>³c,×-s‹«-´ 291̼0?á2-T;™r % ¬ï]Ö¼ÄâosymE%¸\G1X©áþ§DXR: Ú˹ôxà˜ÔK¬,çOؽµr.¤ãpH0¿îDB86!\UÕ­.Müè¶¹Ý Ä=?–.Øð``:1&ôx‚Z¹…Uö÷¡N­£HXî*xø"޽€ßÖÝP:!ÿÔìM›Š­µ(¿‡ÉÔ#}Â$¯F©ÀËwÛT,®3Øò²–fóhw€–Ko4ñF)ñÈkˆfo~ø‰ÞOûë@Ö“ö  ýø‚ÿ±Eži‡6Èp£ÃÜŒ>Î6¸”ÿWsJs6ËËöÏž,[iàªòúôû u¼G¸pMœj›CÊ9PRòä$=T¦·f~–U<#Å%a)u¼BužüÏúÅÏð"‹Žoü\“Mï°D ;ò­Ì‰²B–%ŸI#Ìú›$FÒÍõ}sÙöãv(NÀ‚ÐÂ!Éòý*øŸ‡³'®JnIIá¤QȺS¢ 1$£;ÃW‹ÓÌ3Þ”Ál‰³Š†:ÙSÀ6"Q…îYÖAÒX‰W¼‹° ó·ÙÕÔ?‘±EÎ+s$“­ÛBr¤Qè|åæfCvÖ›¢Š%býÜØûQ&'ö}Â}™[×$X‚sÐ.µD¡)îù?ÆMRتšv†ÑÆ;¥ Å!Û @ °ƒÊ¢ˆW/ƒyç‚«I|îbO±+§½ÛØ ;5Vf±ý›=ìâC€+TKÝs)ÇÙk|áÇŽèð›^bÖ…˜æ®Áµƒ} 8!‹‚–ƒi¤Lm/ïnÅ·Ñ`ù¹ª"pŒ€Hß㣼¡ 'PØüä7éd×–#C–£´Óˆ$.IDƒ¨·þ3Ì€¯pþ™Ì:꫎ŠÂ »k7‹1%ÕÜ‹çŠûdÿØ¿;n^¦ä½GØ6q8g-Ù-½9ÕS&«oÈâÙg¬gŸ  ;¯‹—ï™"]Ïžã [¦·*©§²Z $Û``kiµâG›†õ$>!ˆŽyùƒ\Ä.Õ=`2?ß« ¸>8 ¹Úðd#iž„üÝ|îÆ‚ëÑDÇØŸrþ)«_oÊ~ÐánÕƒõnR¨Q®÷îö»Hú>k-2¯¹ÇÅ EÉže,RM×[ˆ5¼±íÞK6‹dÚdÇî+•c€p`{é7ã>)¾8“ë5·¬XY:3xÛˆ€wŸpÖµ;ÈÂ9ØòÅAUŒJJp÷‰6°gÚ)#Sý˜@ }Óæ<Ô½»+ Õºÿ¹ýZ"B)AÒG‡‹O0¿åÁüÀeڽ竛Þq[Cݬ·àb¸æ–(ÍvRÁ…Ÿ§G’3glÏ£ODÌ2úW0=Z5ãGò¦úcºë`¦··ÃËÆ»5x ÔtC‰þ®[py¯òcqˆþS:7ž¾ï8içüfÆf +ý‹€Úß¿+ÓnyƒÐÚbØéÃ>s%þÉ¢<”(ï“È[}‹´ì˜Sp}¢ƒo» Ì/¬1Û,É =`G‡¯ÿ þ¡ŽQ<4"Qêm!ÿû†‚Þ.YÔü-_†_øßhC&;­"E€4s¿`4šZ2Éršª‡ Û»`¯9¯]åX-‰Í²Jí i±Ùö©ôË¡Cx»¹©¿A\³×\ï ËZÓ›‚ò7d`ÕÑÞ¶wï%ÇOdŽç݉‰]}$ü\§"›Žo,iœµEý$ëøïÙÈȬJ 7Çù˜Wk–(\û†10üfü¯þѺDî]óE#O ÍQ°×EöÌJfC‡)TÿøyÒ'üB‡ÇzxÀ–—žbE™ñŒê¸7ºúøó¼¼– 'îû?“_bÕÒHh'lfJS-Aö½œ%Ê ý}ÔW·ùGúuöŸÚm΂ öÐÚÂß cx矷„ºÏ±…Àp_•ªÕc=éi?ç Ý0ŒHûFÀ°'Ϲ±Û5}pË<Y| ±WÆà|áæÊ8œç›õ¼!à\£n ‘F£A¨ºJ^6 -ºn ͧ fθbe—SiM¾ÿ}kÄ¥m–ÆûÐsf‚3Âñ{ïÕJÆ3i¡ y)*sö'›°m¸È¦±Åaf4ÆN¥‰>TYëôÒŸŸŠYÂBY0ôÜצ`›#PznД@Í%½jmÂÇüžfÙÍ/s”Œ(z7&Ve0É4ÙôSt³'äƒ~îpõ•ÎSÍîð‘:Éw´û»7Õb¾»ÊOß$óURöjq °\*æ+,€µ(VàH¬æ>êÁMSâ/;Dô@õ }˜trÜÚσ6ÞéhaPy€°>´ØÒþ¹]qø“"½|¹¯ÎŸïʶcuÜìážÓ6)…/¢æIÅ ïsìSâ·èp +бò†VKÐüøü1^·%ÇD»±Êwæ403n„tŸ&•©PégX“'Šq¼$fÒÓ÷£鱘Ö~{”cÐ.\^ /çâ pùáí‚„J4ĦÐ7äéð W3x4jªTû¥7Øé>êÃÞŠö“ƒz÷ ÿN´Á …|P¨°ë! TˆSZ¶à!t$&:5Òÿfÿvù]{EiZŽXì á§¾ù-`¼ñ"Ô?gˆêmué¾¾O¥œ§„`4ehPzÉݶÀÀ(/fTûçE+‘&ÝOhú‡äõ­ lÙÚŸŠ;à¤3èó@}0|Þ¬Jû},5âZ %O¡„xDÇ¢þ¼*¨òsyª¨%=U;ãm–-¶²r’•)&'ÐëãꪞM"x°x¥MÓ±Á¡ªH5ÇÚÒ–sb'Ô“½'½ÅáuÊN6† C£±á7 áÂËI‡ö ’»iT}‡1mnÏ4v°°ÅÚŸ*O¯¤$Æžª3ù>†¡™SóÜ¿®¿y&. Ms‹pž´ 4uˆûíe¡u.A@ßÏŽ™ŒPœC†… ×ÒöuC?iÀÐ­Åæ0åòùV¬¡çdwÃê”yù@Œ€a©‚%LYØÀmÚyê|+ÿ €ÌéŽt>̨º(’{~.þ‡ùa+Wd¬‘/<ÊDßq쎉éxõ ½øš_Í ª­®6sÆû+-xÜDR„³•,üŸ¥õÕz‡Ê¾Ž˜\œäÑÕÖz*§e&´€ ]׿d´J¢éò½ËÉCÛóê³›äßåâó¹GŽ9 yÉ—·?ùÒG¹GtÐXßQ<£Èª— ±nî¦ò±÷à̼{z§ß¼;önùé3¼œåäzO…¥«Üå¹Ië˜ÍF±–ïúƾe`<&Zg OŠ/Ësª@öIâdá1)'bk3 ÐªšGÃH­§±Þø´]L¯]Ùž‹‚ôË+ÖpíÃÑ8ÑÐèù§Â$ŒKBdÚÒL?\Ý?l|þíeN¸™gtjŠGŠÑ¦\˜¤H®ŸŽÑ¾f‡ðÑŠ{¶tF°`J ÑøX”ð¢GS'þ©m@ù Äå×V™œxêõx.ožšVŸn4&¾œn¬™Jlk|ŸØÁ뎢ÊElQ Væxé¯Òçû‡n5jD=ˆqj8%ôØQÔˆ mW&^_‘Ðýyø¤ÁoxbõôÓñXxmRµ²†ÃÑ«©ùø)À7ýÿr )˜_–ýÒ \ˆ¡2åAþêxqD8Ý‘»0ö:ݬi²p÷Q« p•Ó³F!‚‘¢Þ³8bou €UVÅ9%_©mTR>Esha´8™BzVÞP4^RVTðµ8n›HáHè‚“ô Ñ`86=æê>hè!mañ?R_èzäR•tòÉì–ó¤MŸ×B7´ä$>žüNßþȆæ´òpÇLòi=Ø­=”ùàÐOIÕŠ”è®è@‚AA„dÚã¼'¾Œ7Áp£˜˜x&ÓqÛÙo@Âús)Æ-î— ,Н a/0Ÿ3޲ôRÁ'Ÿ¥Ûvj=H=?id{n 1KÜ ü/j£ã%0§±|u)Žx­x!€ŠwÆE:$ž®W™q€ŽBmS=”¬ÐõÇö~P[bG Qm™Y!S¨7žŽg]Ñï(ãü‡Ñ8ë½bŽj?Ëû\)zçæÕ€ò5?ëÜ\œ9ìh(ÜÀ€ι°-¿¤õ|T•Ø&XÁLÍò°ýÛmí7ÝRë#ÕëE#8; 4'qU›.ƒgSº•àT8aM#@W*óø×Sã›cãI9ð‘iºQít&‘)ç+¶ÅoY`Óì{…¦L /ãžayåŽNFÒ8v¦Û¸ ›‹<")Ác~V o{9s4NE¡adU<¿c7îm÷ISˆ•Ž&‚ˆ'bk³f¡V,U šÜøýÞNåßH\Ê–´³œ*I^ùe:4ÿCuù 1ë9’I ê%Õ]£5H|¸2÷cG9Š–Ó™˜6â‘»¥»30ËW)V.Æê·hYœ%öù¶…wã&õ¾­ ’ý˜xs %åBcâµ ÒJß:€¬ydz !Ê4g‘ó"Ò ý¼,~ÏXܬ£kÅÑléE7Å$*§fœ·¼¬AU¨¼q½;d$œõݸ¬yݳr$Yù+XùËñÛ§KÂTǶ„†Îøˆ)3-I®¥°6$H]ž\^…’Ðx–‘IKÉø "rj7cï(Ò Ü,~åbó˜ø-Bâ³ ‹¹˜³ÿ4{ô¥äaM=¤=5÷²Í¹×¸ãÚWë;‰¸ÿD,SÎoÁhpŒ©ÒV·›×yä¾-¦S·o ÿÇ–jï}«ß5"¯•8à÷#li*!-‘‡O¿Ù·³SÝújai]‹¯1Š»ܸQfžli+ÜŽQØ®nÀ®þ‘‘;§’;&m™ÚøDpŵ¥8;lk#ö〰*µnÂ¥ Ð=†Åÿ\õSW¥²…uH\•ótÕÏ)ýX˜¼Æ€­kiÚ’sZÅ´_òAýÃeš§Ÿ­)ŠNMÄ©„ gCêâE¿Ð½pV½` íã­_þ!ć>-¨(‚ŸtQ_ºÄH `+mߣGZ› ÎnM©›:ýÞó#CæQ¬,?3\wÆïJû¹?è[×+kgómÏŸƒJ( ¬0iíl{Í+Êfr¯%àÅ—¾Éøzú¼Ë!4YCÔXr)âhP ÑÙßvf£ˆåÖàÆƒcVK,þ bó˰?"„¯¯½éŒýÎs&X 2m½Œ g Jxi,œy•)ñNU2 ^ÀÖ14-ði7¡¥¦=˜ƒ€ðÕÁ¢À< Ú®¬X <­œSéwâ"û ʃ@ºaj< ëžÔš%I÷š‡¼~# Ak´ïLh5žs˜ŽØ-B8Wu ¿egùH®—H5fÔw %þã·ØC_Ì &b€p-«ÓLd‘¸]Àz÷ÈëGï¾t¯5­<î…‡`…CŒgl×íŸèMdkJ2ÞUÄ[L~g<[^ïÙth¯Ú½É¢›{¸ªp€Ÿÿ¢ŒÀ2—zøH§*°!$ønqyaR½jÁ¿?ào°Q,×5&óÒKG¸1¦¾t½lÀvüÆåH²ø‰Xyêúâ©SsL¤ÛMC+ù#g.ø}0E1×@CSð㱩öGŒÛŒ§µ²0m,MÑ|þ|òÜ HâPÈB%Ösjò¯ÇÛ'|é&Ðóëß÷ ÀL6@Zë+½þ2ŽPÚ+6è*-£±þf°[äŠ/ŽSAøÆ ô®XÛ. UÀÏ`>+lÒÛN\Ngéâ ‚ïû9$W­Ð"ë¶C"Ô/kEœ¸7XkwÍWóáÃûáü‹5Ú÷ëP“_,»™'£{°ŒÄ$6v…<›T¿çŒŒ&÷ÏfŒÙbÈd Þž_ìB)û^âJ|UZ3,x›¶3·¿êÍÌm”3¤ãhïôÿ¢òQ£îÆì–BèίxϱÏWЍæBj€µ ýÒVS$„@¢Ox¬íbò,ÝDþd>Âm3Xf%…ÑšöUP D> %ø8›…cã6KÝùãl¼"éŽÁ 4Ý%9–{²%4:ÅÝ]@§ƒöù8A…@Œêê<Dp0‰kuˆö'ŠØÌB{6^58yD\U fY!T¢ÚÄ9òZ°!¬,ÞåûsÖù8ÉÍø <"¦‚˜¤{mªË”bëö3 ”7 pW¥ê& »)/_;2~Œo()[‘þííà?SQêBZÑ]\9NRQ×Òg£P’ÓIkÑTrf‹áé°ÿw˜`¶5¦Ž!#™ó0Õ$þÉÈ'ëœQSÙ eE_×~9†¢Q·Þ¤óexa#+ØÉaÇso+7y tAé„„?É“tÎÕé¸!!/éðŽ€Ðou“xh ‰ÿÐt¿+÷B”¦ ùžoæ{L½žhø ¥5¾n?G~xdë\§&ÁÃë´Þª¬ï‘hfšŽ4£Pô}¬ÓV}QÏ7Ï=Giî=‰ð¶œflKcutî¨ðdâ>|@ÌÜ[¿ÆpF,§ÒBxP*ÚÁïnˆ‘¿.å<æk¾š–â¤ÌÑ5ã’ñ8´÷1xŽ`ƒ¼=Ÿã×ÔÂ[¿‰'Ìú§:Ø9yƪˆãèÈÀë²ÚfØëœùÚ†`!óxíþÇT\'ˆ>Áž8t²h4yÄ޼_@«ŒÊî“¢é¹ÿÕ:”箾×:Ï Šp¬“ÛÉ×çÒƒÐì.Ñù–môüׯ¥rI6‹Ê™]™Ê\åýœ”k ·~|¦õnëý1/Õ/tf}’ïóÓ@ù°èí¢µ*Gá¼›)|ï>öM´½„O7Õt{I©±b™f.ãu§વ¥^pn£à~\Ÿ@ûœu2kf÷.RÚõkq5oãp1óè ÁK2f-ö÷«¶î9Ó|_Ýa©—Hù9Ktg³(`‡Ê ¬/{š*\BòhØß#M`µæš°ŽŽ{õ[–f3V?SRl®ÑœH‘8✫’iüCE-·æ´B6GDf"ôôPÁÃCl_äXåçý5g{‡h/V”}](Ìž?ÎÕÄW«šaÀkLu&½–WY¼j}øh½?Ã>ŽY^--Ê °¹Øm¥Î§h2ŒFKïŸÒÍócÅk`j®²*·%é‚âÅ{ø»ø+=2µ–ìv÷»Ê²²ã3(ž$[ßÓ}ñ.«|‚m¬ b7š­æüÆË¸ŒªjLÀßû®-){;ìqÅNUÍ‚„9©sû¢XDi£€)µÇ×?.‚×Ú<ð)wA7â¹Wþ[ài6š:Uýq¬»¬tôM‡DÖ/¿^tOHìG‰N% ñ!U×—ˆrlˆut}›€\– òxÄ)"3 ¨ëdçá:=ˆî¤ƒÆ¯ÎÚÚ\úeæß´àiÕ–“4 Ïg`éOP­ª”F zÉiŽˆº°Ï!r0 ‘Že´îº8®‡5J|¾ÞÊŠAkë^yˆ{s 5ÁpŠD*ûHÍàµmã”*ç…ýJÀ»æ@ûCødïòÖpW—zhø!?‡êµ9öMÌɽÖ‰³ƒà RX¿/Ú=4ï^ Ý:W¸_J¶·'¸Ò/¯¹k®%. DÚöK÷F`ð`0N‡ZçÚ.TÂþŸ?MÔ;˵¿­ÉH²$c}6íB„ ‹÷=:(ûA æ%³ð¤ŒAèw ÙX‚¨àM“›Éîì.|E¤̱‘ݨ–ÿÔA2©QO± ë¡üh8 fµdžÄk 4¢bD*Ãæ÷ø’îc¼¥Ÿ ·ÞÔÉ7…ÚžYC‡ª1hX!éf¾.^Ze$éMÍ£Òëú>æ¸Æ„—ŽÏ€è¯)_ÛœL8†·gëêŠ\~MV±´?À·±õ¸™¾8  (@\£0|óùï¤Ͼá¤e÷ˆrÔ¾ÛñÀúu/×ïJ»^õßyq—Òý ª2JƒSŸ¹Œôjbã„YÐwÚÊbà¡U¾ G—ˆ¨ˆºîdA¿ Ç> \³é“®6òòòÕ˶ÓE!Aí¢ôs·Â¼fÖ¬HYmçž324Þ…²¥ßÇ*Š>ƒ?5©Óãluø£” g^œIë e¸†Ç¯Ÿ¾AÆå`±<°O(€½t ktO¥çIb¬Ç¬h«,C"aßÂø`¹§%Z3G¢U¾hÒá…„ ÿ±eäåž9Ì[àú¬Ná™Ó=£îD\Å%ÑÒGÈÂÝ¿8}¸O?n\Ñ;æp¤è°X|O@et~”;G>–´¿Ûª Jæwß׈µZÈÿÉÑþ/v†AûÉ&µAHd¿Y°ªÙ÷•Ó8M¯[Ë ™6˜\™[öRúNï95«ž3Å <›²å§¡ãw‘áq3s/ߥZrůNÁëKPýx¡”çp¥òvæDrîÄb/Ãê¡¶ªl=åôµbó>ú­öqzr…´úã5UýsîDKå!œ÷X^!èoAR'-e+0j°.˜iå›^ýP6T=÷sqLê÷CL†› ,Ô¶QÈ?µšÎ-˜Úkc77/‰/®:Ížù?¸×¢Œ¬È™æH‡¢&rq›äަµ>ôæAF/Õ»>ãµ¶Æ›rÁyµeÆaá¤àE Œµo2ï;V /b'ý7AX):V9|óÛt(†HxÛúTzˤ~_G– ‹S9·_øL jUªäUYo†Q5‹ ÞÙÄßïôf«uÁ¢À¦]Ó» s6«›—øévå4xÖ-μ⢬³*ünbåðQý¯þ8™BÍçH‡ ?»Qø„E÷ÊIˈ‹¥¦ù]˜ðE‹.'œÎ°óßœ)ù…÷Jܤv~ }ަ:,A¹ÆD@-ƒT–ÖÉ]êÁ*Íçfm>ŽÖ±ÙÒRd:ñŸ©—KòH\ñ7A´û RrÞÛ8 “¦â¹cš„÷ù c÷2· wPìVÍš—#Þ®OÝzˆÔû²öø°à§)ßÂ$PÖôkB¬›’‘íäLT 2ø|¨3èb§ˆ;d ‹¦av,»µõsæ¶…RŠådWòÍ(Υݚ=t{qëõT¸¹ñ滆rT¾j›sz”SÚ‰¤ñݦF¾²f q€ŒèF$]ëóˆ"NöâË‘«w-/Ùê° n¡®ç‹ÄQñrÿ6™ã3ªsï‡"ÜbdkT¡­®Qépð’_q 5a’ŸX[ÝEYg?©;ޏ¥SÅ–#ã"FU6»xZ ™ƒŸ±R%*Üš»í¼B)ˆ4˧@­~åÄLN e÷7ïÝsþ.Ÿ¤ÿ…Q÷K‰#÷³í˜zQìñ9}WHĦjÿË:ÛòJÒœ F WŸò#mÓ¢¥ú\'çíê5¸Âß‚SÍ]8LðþG%IMý[söåu´Ÿ2Ñ®ç÷Ã"°ÀRdJù3U ¾X43Íùðåh o²°¸ù FÉa²£ùÊõŠš¡›MF¤Ó,MLÒíA Ö¦0?ñ©.Úæóþ·Üª\Øru-ùÜ›lÜ“Nü8%e‡ÿòWôTVÓd‘?ÄÉkûDr7xbR9k,9†sO--6©5?Ò@#ÀÇþ4ùƵÇã"÷„ühJ=H95qóÀU/AÐrî|Ž»y½Î/ºÌo|%jÑ+Ô{cC0fžä¯D™ ¡ò^õ€nêÞyܼU­^—8:â/ȆojÔVåw¾T=M””—Š%mO§·¿ŒL®mrwJ_æ Ò·T¶®ÚC1y²ÂÝh°¢ueðÑíØOÏË´SWnÈ$5õsääCµÝZ±ô½¿~TÙ¿Q†¥P@€zP)¡¶q—´Ê\ %-Ÿ>~ KåÏ—{B†¶þ¤@ãI× ]ik3qÄêoH¾Œ‘#iGš«ŒÈf›oLÇ^qVëøš†(o£õ9Øž_»ùs]n[ŸO è˜@cäúd%Ÿb žmnèe°ÑD$4LÊ9år¥Ütc~Rã®Û6ÿ…ê×N¿õa.¶~ñÊb†¶.]íåLæjh<¯À²œ[²b„4ù;<<’Þ®jä ¬ð‹:ÝÊ*kŸi×a$ÆÝ%rÔ´šÕnÄ™k¼‘¡w—övMI×qÑãËñfSZ*Ùçü?[{…Õ¯þÐ|¯yï!ä‰ ]{7Ý™ô b±]š ãŠw1|§eaÊÁ oyàä*êŽá@\ˆ)r«âÍ2E Nø?”ú6_íw Ç61„.‘•ño¹\\î‚ t\Ôc•ñLÉŽ_ŸÒôÚ`4µ÷¶l)DIi È–ðn ædíd´Æ©íå…r6&¢f/HB úi~Ä‚ÙÁÁ@ü\›å¼Xªl_“mº¼¨1¯V&-‘¿ì‹ÐBh.á\2`&×sTñ:¢êüƒ'"ÂyJuç#–R`Îùß ¿gVòc¹×íé»g³1ºÎÿéLý:|`µq‚[NƒeuŠ,ù“q9Ï¢ÝÛ§´•ú`¢WñG|(+ÎØ³Š‰ª:pÊŸz}¿œºfS} ^‰¼„µ9ñ&d:²ZúwßÖ5Úf/žÀZcïy¬ê€e5˜ÏÚ¸'xut$ú´€æFæÃÊUtl8ƒ‰ŽäJ¤{;”SùñHOÖ6š˜þÿª¾¢ÿ-³“^Fš˜0oÐAš‚*–j] "Û½Ñx9:WÈÞ’^Ð̶£æ¢ô#o³ú¬ÉÿúÎWrtwëñjTHçþ ¬ ¼ogëºûàIZUùBñ]µñÔŒ‡š>@ã¥As\­ºÄ0Rÿº2R‹6Ëû­)®4<×uC»ðýX&m^-Ü%6Òí6å­IˆÂÀ’2jVæ8nñxÔ½ÿÉ5s‡aF¥AHל"Q;ï)<Û²Øo1~v ó§ªxú=ÒdX5}ÿ GØà=º[˜ÊÈ\w,¨ú¸× æµ0×òí„rúÆdÎT+ á/ŸøÎéŒaž”ßKtΣ _‡Y?…Ð_¿¹¬5<¶¶˜M÷mÅ}êTpéƒW„$²¬ 4¯ÔÉÊÕ=¥º3´†1pž­•ºjNÒþÏâÑÿÿn]E6SHaH´Îگݒ"c•ðÇꬪßâšîQþñp†E¬•¤{õzÜ£øåž2û_á7t¶ë©¦I;ü¦;<:ø€ÝS¸Pè1Ó•ŽúŽñÄRfüxB»"äñ¤ÁÒSA– úMé‘çÖmñJAuÛI”nŒz±NÒ8Òp×UOŒ„" ¶Å\N®ð°8•õdÕaQûyðÖ#¤x©„”™\Y˜?R(Xܹùäߜ˱¡l°ý»Ë*ªÊÁA§ðÀúíý7”¤bVÆTVöŽÊ—ÉŽåÈßÌóëlÜ.ø³ œˆ¾ÜIlžôÝ\~®OøšË?C×s—9 ê{½›Ñ‘Èz©ãÂÒƒ'¹T™«Õñð»L:-ez²„Éw…öæ~é”öô¿!¦Bɸ÷ ˜›Ú-¥9Ï™CWcíWbG ›°˜»Ä·˜<(ÁyÚM4ÙI©¤ˆX’ôak>7ë¶}c ÜÄ·îI)G8ó»ç•Ýâ + áv?”°=J öŽ+Åðæ¬ ž¡ws<8f¬–[ý·–ìÿ‘ñ¥öVcæFf¿ƒhÎHèµu#­ÁQ1ç ªº©kµpË‹ŠûiÃ|YP³ Ë­ LWe4<_"¥€k`öÞӿ퓆¨äQ!à£kphö£ñ£wQ¹‹n.,˜ŠË!<ç¨y_`ž Øù)­¥ÞWäT­ã˜³÷è]\ýI¼*-ãö ëÇJEµsÜÆn_À—ZÔgK÷#1×±DZ¯tM=bP¼þ×áËÅÈ ÌÂ#` ÅÈ7! ;\÷aüÇ]‚y|³f q{´-F6ûZøýX¯©Á oÕVòÍ:ª‰R¾r©î¾!WB%N÷Þ¯álœnMYQÄ7wŽGÈð×^T{È\pËŒ '•CiŽ+X¡G˜mÆÏù©p\·$=KÓf!aï ü¨Ykôò·!¯4{Û_ê(•w_¸½êÓãc(¼ñöüRª—â|‹,j0$ê-›Æ©·Ï:¼1~KžÐÃâ;åí•Z,ˆÃªöRKô" ›™$/mÒrW. ¶Õ$Ë(Ó¯K¾£c  o˜C¼ˆN~_guRoFý¸³ËþÆÙ¿¿‡î6 À§šš]î}µÛ¾\Ÿ$Ïi™¤\þ¼.7Ô…cqøùi÷8nswå>’ª•)ÒÖ|(#Žíøýà:ЛêŒÐ€$û´óÓ (<àlð€„0¥N`i/¡Â¥¹9T¯Î)=1…ˆÅ/´ÿ±”úÈêüõáø¨ßúP&‚;b.Ìþ›¤HHP–tûÅ…tc •遲³JýùŸ×wPxú4èý'„O7\Œ; Óëýg°™—<êl®ty"T´™ŒÌ[°'ÕªˆT{njØ\EŸ­bAøåºäË¿_º9´ÚþžÑf­HÁ0ÿ&/õã–ž†,:;3ý]<³ùgø×*pš®IM_ú«4l4Ú*à ÈŽÐFïRAft QhÙ,ƒ dq´§%ßVŽ>&›§ÿÅÜ‘N$¿¥Àggplot2/data/mpg.rda0000644000177400001440000000401312540257772014217 0ustar murdochusersBZh91AY&SYAsz!áÿçÿÿÿÿþeÄ@¿ÿÿð@0€@%à p°äìœÍi•†T i‘Œ’4Òi Ó@24Ó@h昌ŒšdÐ †Œ†L€‘¦F„2§ê’•4L&Œ`FMR©´Iè™4I£ÒzM¡4É dQ£@)I"bh˜E6ŒMª0LSF€4РÐ7võëÉæÐmÔk5™šÖý±oÅèÏ7Ù“™ÚI]ÝRZ>I´GOS2®ìc1­|úÙ·~ ²Y¶.þ‚[öf¥Ü6ɬË%uÄ­Xf¢Ì:YYSL,skYadQNYV]¿yÕÝà`ÌÁ8Ö!ÜuS¾¿N@`+L CÒ¯*@aì¬ÐÇtîÉ‹…úðÏæZv‹ã‘VAãW ÷â̆"һʅ{¡JÜŒFæflâ˜rŠ8Vä"J½«ëÏíàâ4±W9 ¯Ò‘BJ¦£×jeêyª\®QÀLVt¬-‚r¡'Áõ°ƒ #Q{lÀW`Ð2ut²ÚP$‡V\Šë‘`Â$×,\æŒm±€®ñfTça»©N'NÈ›Ež i>gŠéŠúZã •Ÿ56íWÁÓ‰C!Ér34¡’M 71è4 T²BŠ›¦.…F¦NR;()ÞÙàu.+ ‘+Š÷Í1Î`8Pí‹•(I,Rfɰzà\EûÞM$ $è@ ?Y¶efgŸ~ä Ä„"Å2ð–É1D¥”•‰33 ‹€$‘„# !‰‰$s3+)pÀ§Öù&e_Ïɘ³ Í5³#e[d¸å5‘f&em–½KmÚ-e”¤¢úVk«»F1TÝëÜRjâº"àŒÕÅÆqe]Qr Î@ ´ ÷úÓFà)ÞëËbij\ô̬ÎX›`uõr‡GHµÆ¾m¹¯'`ëÞâGWÞ:px¸pߺgö5sûÅÉtõÃnÛE×Ág|™´gG*¹vë–T݇Dì–pæê³‘tepɦ³ZÈÙ3´x¼FîX¾«¯¿É]ÞOêž>àî»ùÊ9ÏT»°m”ߨ–þKljr¶^=©Ïã߰߉ӄáÃnžm|t•,²£,f ù§UþHÒ¹5ÝlÅ™—Ýe‰aI–™¶Å¶­ÆÛZÅ›»»£7w“fæêÚÛfWŠÎÃ,Y™Œ& Eƒ$˜˜¥V ±eD§Íû´[F0Â2d«,F1L«"±ƒJ²°VdL¦ ‡ RiŠdȱYOý­0beˆË!™ 2©þS°»ØÌšwùt³Æ¶Úm–,Õ–†å¿umöÜ7¯yønÊÁ‘©é5£¤óVùÑXqu§:ƒÂQŠrÛ>lÎzÓÖÖË3a»´&Fëm™ërÞ5›8Ítjºnæîæ3‹ig3Y´ÛMÖì¶-Ͷµ¬Þs‰EœÑ m®o]v]¯:«S2»üÏv^Šñ×'ä´‹†N+)9¯'5âË-KÒâ°»ù,ij&ɶJå´ÌÍ2037v11Šb&&& $‹ $…~YÔÎ!:KV£um7w?Œ¼·^ƒŒÅ®´ÌÝtÎnlËŒã.+V9ËŒpÅÅ\k,Ùf³VµF³Qa›ˆ³cm&Rd2ÜE¤E_§¯ø~_&¯J®Ò¬ÚÒ´ÔÕ4Ó%Z*ß:áZŽô¥×æFªßŒ¬W¼¿YÀ]û³Zw­S 㽓q¢ä¨õn®4èV®‘´Þ87V•í¸KÁ+÷B¹× msGI©nªjœWQjXv±\Ëô\ç9Ü-µsѺ8R±×q¯/Õ’30™…“ºqn¢{ݦx§³°³0¥É'í£öö?Ö¤yÙç²G>èž:÷=~Á«Ï#ÃDyMk«žY[Ï»ôg…ñöLÏOº¦‰ù烔O{«†ÄÃ}[ÓHìl]¸=nôÛ»“qSHÀy˺ Ö¡®í;#—> bÒeuVÅÖ;‰Á8­Öô«Àvú%²5—Þ®Ìg+È\Q6JÕ®íÆN:êÕ6®ŽõÈ­ä+~ ½85Núe9ÓhÚõévÅ¿…/]çžl\4š­ ÖMM†`̬1ï)ºãk·©®Þ¸œ•Àr‰ðþªÉÿgÀ½Õ»1ŸóÃ67ÁòªO‹ÿ><§ÜÛîn?ÇòÖ7¦ÌÓ,ÍY¹f¹ïfm‘ß’F;GmxÑÊt]^ßÀüv»,] ÈÿU`‚Æßm½ò8tnžÖ"Ä*È(„!$õVÈoynêÈéq¿jr%  Óq¨;4ÑiþžrI¡³ß_±+ÅŨ›e±LX)¨&{:Õ›Â4”Âå 0{ÜN|Ö~ƒm‡º'‡#7ú¡b\P¤øtø”ôò¢¨ntY½ñ² ã쬮.n§ðþß}·÷Ê:ð«u8ôÝÕäãl#} ŠÝš(6£vÛ¶)¢(ÊGúÐ=09 "ÂQÓ“äJù’ΜKô~i±P–OÂn–ÿe÷-^…á*¿ ÔÓÀ ªÂy×’WVÜÉ>(b#Ì—£…8¬ÇApôÂDdºâä¹$-íâ­‘˜7x]ÊwU˜$8tˆAÄMjù§SBuL¤–T©-€ẔbJÐë¾rÝ8“Â^}mÂÎãcOºò¹Êí”èÿKÓ'WM,æ@ 2±ÔåMPÐÿ¾T&ñçT‹ÄŽÕ‡£¼O[f_¦Þ‘.àÿ¯FrÜ–««âd‹%çêÇuLß§R9KZ„AVI´4Ò ?WMT¥–fÏbâ²ÎZŸõ©û"5Ñ&˜#§äNæ|Ve˜Àÿ§j²WXcÆMXôíc1?Ó,XJ`>䓜ž_ÓàÓLP8DáÜçѵùèÃ*Ä]—1ݧ¥Ùï刺L*춬{]~;Õ«î7g¦ÄP†óxµvûíÅ@§Æ7cöñvL*Ns28)"9òÑs5¨­§{ó<Öõ÷4á} `j5qpŸ'×5¦‰œõ‰ýÛK ä fL=Vq½J`÷êÐ>÷ÖT³['®£—€µÙöéÆhMÅ{¦¤ßëÅ$%üŒ¯äEk<œpÕdÃQí*)_ȨÒÏbÛcÀqeÎ#ÖïÏë#u~c&j›Ž!r™É¢•ßeÇ ÈíBÙk¨×P–Ä,Ñú³—|öÃûsÛnÖ¡¯¥óXÁ»¯¿Eøè¡øÊK+tp–OÖb–¹efuî¿é(‡Ú;¥«‰•«…­ò+}ë‰ ô«nbÐëwôú2Kqk{vžKBпuJYXjÂ5‡J5uõYŽþUâŸÎW=z‘lzÉÙ0³gI&gž‹ªØºº#|‹~Z(^["´D‡ôµÎß2Ÿ—Þ8·ÞŽ:Ž÷DqÙæä4q@:N+pÒŒ’QlÎäâJ1¬Ò ”ÛØ¦Åm¡œ[´Êwcf’É#dˆEDÛù¾ÑçÞ7žóÆÇ‡–å+o4ß4~hêwkl¡¬“%m¦mЛ±†j¢4U¾ýw%“MeqúÃðµˆ@€CŽ÷IŸÙžÿÔ4. ñ4ɘs0[tmøÛëtWZRkü·_ÒhÙ% Ü?Ï'ZZk»óÁ Ý®ÁŒµÿ=°ŠˆŽuým ÕËEmÃþ¯ûBEó¼œÄ˜¦²í¦e]¬jÈhÍ·§X-¯îÒ+À7¹ŸñøÙïŸÉoÆLç¶5¿iw«ù?(ßÐe…\Ý$ÉßB›ÇÃÆ†¬\äTB5ãM;'ñ/lr|Go¯¾]gKÎëy±ïc ;+ÅlhgþtÐ$ »Ü>1ø+ü¨ÇL¾•‚«#º¢¯Û”ØM䟦›y¹¬ÆgÜŠÏïÞõ!0-ÇqˆOÉ›Éêiæ GàÙÒÄøÀïÚ]0$ªSX(ºGV=°MT#Í3Êâî.ridj“ZQÙè¿C–‘ Ê •Yáä¾wÉ™iÉî¨^îæW“ëÛ‹ƒºœÈ¢úZF8ÐÏ[`€)õšˆØ…  *¶(ûœhê"Ž5¨ˆF}«)ì/v%u”µÖî‰)coxÎÚPxã'TÍ—ç IåìVHì°K©ö̈k‚f†AŸœ›îöïP£v7ƒý)2ÎsøùÂ?i—þJÌ2×ü­t<~j°Ä\bÑOó÷ú]çM3b$¿yÒµêÑX àÑÃ’’È|nùæb':)Ïäo¥É>_ê¾Ô£ÉW†Lû²c¼×¦ðù9{õã^/z¢ nGëÆôŒO6‹!Õ‡ ˜Í‡ãFÒ›è P~+O"H3½²vq£;~i¡-ÿì, üË]Ŷ÷±±Ç_l;¬×'Äð%ã‡í+üOcìu¸úB¦`Œ³ƒ‰v ÄO.T5h¦Th# «H´KATŠÊ¤EQ=!˜´$‡ÿv¨©D.zË:RÅì(ŠÕ‘±² 4ÁÕBÃih¢™ZEe¢HJDG5Z¥\èu4è-4Ä‹U•&š–È¥h¬¬¥)Df•uAOL%š ÓEÚüZ¾'“.žçë¿åèÀ¯àÁ² J¤KSQ$U¡R¹\ª+UR4QY¦©’T*¡Hµ©˜r –bKJ´¤Î¥b‚m$µJ£ Ì ,’ µšÔ2:©JZk-šY Ujr̳9&©Q!‹MŒ‚4*4‹TY… I(&(!-#9«R¬²1RÃê‘…Í0@¶rK””‹2È™fPifT¢C@¥±- eEu@±LÇü8àÓ¢ô®ûn Ã\c‡8ØXfÇ1Y‰ tÐF%Oƒ¡Íæ´ßu°ð{êhI/y‚If¼ŠÄI‰ôù›î«ßç¬%K¯˜ pžeÝ‹¤#r3y" +?qii¿ºä7¿ÞcÇÔ"¬þY˜ggm¿FT¿6˵ó³²{SEd$‘ÊÀ@„îax;šü·ãþF #ÌHPb!á¡}Êô("S^8d)ßbEF…C¾æ;þ;œàúž¶¿ìÓ2¹EgYˆÊ5ìh,åìÜXyþw½Þú 2³ ­djí|nC™ü\_óJfËÙGUª ¿U®áæ°œKÅS@òßGLZÉvw»ŽZ®ŠïºÏ×Mûþ*Áªölör0lñ¨Š µó9íïÿ/ÃRZæ „NiyÖÔA£Qg 0P·Èß2mó3ÛÌŠn£¦ÐÒLˆ¶º|éýê'Ña*.e£ša<øz(Q¤4)ë÷ßr# dˆP"t´±¡DlkûL&¢íñ¥ÑYØpiÖtP˜šIušó#HަWÚÐÛps¼YÒäY3÷) P] ]“®q¡ W[™¦¾OEH„4´u$ˆ(Ú0¬’ –çõ{ ùNÂPC&kb"1kò—¹¼¢MôéD‰Úý¾B|}†”?¤!5uÇuòMø<Ü ÖvfÍ“Ùï¯`Ìž! Új_Ç]‹ý4’eÙ •$ĸ°IA³?Jý¯ÍÐKO(Ñ$®!3I@K£þ™<þס¤…58é@k¼˜„DŠ 6y¿“îÚtχ‰áåð[ÍD*äqb¸5 ! ,:{¥_S‰ L¢I„Í(’L]ζl^NÞD°´’!I‚©'iAÇÍ»ÇezÉ »DíRÀb„Ð& ; vGKçîôÖ_®D¨‰4 ˆi113I,猪%ŽÝÜ:«íÚ˵št\XN £–€(Heþ  ÍA yøü¿m±Ìaú‰Š¬=Šb‚±‚P!îZÑD•tJ$ÉWYû´Nõ©/h)@ L Àéc^Ý Œ ’ôÑ$©D´HÚênú¶úPéuÔñšsæå©%H¯p +à@ Õê¶ÛðúRH&RÜ@‰!>F ¸Èêû}]ç$ì%Lhhè ‚QBh„ð¹Û^¶ˆQ˜3ÏÒw½¾²ŠTi¸­sÛÍÙ(C̳6;ny̶»_;«mÂ~ û0hÆäaåÜ^Oà7žÏùò?ÝëìÉëVkó,Õ53Œøú‹ç%öd$e< "M´TžÙEÞ­u‘Pd­l;ì*_ïÕÿ3®áLSi6©²Ã‹r¡as‚ûl˜Œ6ö"v¿ªE A@8¦âÇ»³„bêqŸÖu˜ƒGò%¢Rú>wnßÉ{—2ÂJuŠ@·œËm¬stÕÀ*£ !‘DX{«=WȬ«%=ãH$è,UÙV‡Ô½^|.¿èR'a;ƒ<^ã[¿ÁTÄQ®z–›ƒ!6–p*Š.:AfEÊXUtãÍ$〒Š% ”RE’l®”E’jk+…°œ=Ó¸¨U¨r̹¡„µ˜Mf­•g4°Í•Õ.Y\Ð¥-d'T(.F¡™©ÂÈ«Dª™E%Z™iU£4be‹(C9+(*YÙ˜\”(Í–Hg l¢ŠCV'… §R’Ói•’ZÕ:a*Ìâ›BN‘r’32“L* ¨“$‹…ÊH¥H‹$‹–DWH-X™‚¢ajH³BèABrÅiÊÔÂ3г¤È̬áaÄ®…@„Ó ZjÄÌáw x”Ó"ŠÂ2Â.h&©)‰y›€p%V,¦ rfå5\å )e”–šMZ¤ÉN©SF$E`D"È ”pé´å<Hð ’œ(³ZA&Ë8QFl#SDªX[HºUYe%­,,¡ ’¨Š‰QQeœ.Fq,±¤n*ØÇ 1‚ªa‹AZ b¶X,Å­Z*ÊÈ£+ÙGis 2ÂRVŒZÓK2XLÃT¡VQ¤e„P#ˆF‰"-¶$¤±†,«`ÊÖP•µ©Ù­¦÷~è='c¦ñ_‹Šðû?¥ÿ¹§CêüOt÷Ÿdi3¬,ó<úÉåM°„ü«cÖŸÿ&g%»ÔÑš¯GÚöd•–9«n$Ñn¤:RÊÇðõšJLÙŽðF’<¤‹‰Âß23ÌåÒø˜õ­XåP³Ôà¼ÀجnÉ’"}W\r*ŒUSÝY4ÕÓÊ·¶gæÁÚm¡âàà€>„÷ŽœQ}šÒ/ܧ÷ØÄÐóª0ó£ð»ëÓ>'Ê‘ØÉÉ“‡woï!Äc(ÐEßµÆ,^$Ô;B²dè“"ÂÁ×â¡ý&­SªG£q9<üsLp¹lŸë±DÂúu“(}ÕlÔP/ëKfcÓ÷+N ¾uGAŠ…m}­gS¶»Üüþ]YÖ‡ö©—kÄf¦»ÆÛÇk]z™´{ ÿ[A[o¹Žx`©}nÙ—-Ìxº-ÓK&ä¨or¶RºRÍo/Ï&¶HÍÛÞñS¨dl½7~Ö½Méžß¡ÚQÁi/ït¯<"Í–1Îjÿ—Ké(§—½,º‰ÀnDÐ ôËvŸ%Dœ€%˜É9þ¼–u ôq¦sÛ—+Êß½ÿC£@‰X!GbLø‰JQ(VúÖ7½ úþEfÍN0øTòêûZŸEü{=$$—[ÌŸ¹SÇ î®EÃ÷_ ÙÊpû›çÃmü»ŒZôš•%HÄ*Ù:‚åôá]–¬ À:Èú¾2Ö'SË€Â*AiD"N#Kq߉0— 1¼*´ðv&c"00'H1kaCc6t\l”™Û±±ˆŒ€BǿڢBp}”³S@®7ùàŽ\ºi2´CŒ+AŒºI¬*¹àä>t‘š'˜—OÉ).²dûcF‚|„ÿ›€!kTWZK}!!÷ºÝ7)sËn«C¾^KÌ»;Žl–Ñä$5ZõwäMÌk¼ü_dÝÓˆ[w#AxÔnöi¬‹™ø|ËF:\§¹eÝ«½x¼G»îb3gñ{Nbï/4XÇè`ý»èLƒ&Kó`£ CÂo‹ÉWÉû+«F ÑÛÖrˆ.†übê47ËÄÌÔú“¯Ó÷µ\½g“Xî{… ÔôÞJ&–t¡ºAC¸¯á@s!ñ9™\–ƒ—ÄcÂË/©•(TÐaöž —æÒª«(Réh«•5øjD®ÜÛV¸»ûñã|2F eû.lï.—1¹Õf¨Œó&Lžb¦K]ÏauGÆ—Yy¨ÿQë+¤Ó°-±žx.'ÔM°ÉÄ.ÆÌ(n«¬]âþšóÚMÕ~Èù†ÕUÈ|ÛøŒN¾;Uçú‘­†2ô˜×¼‹hX‘%8‚tdNiHØŠêË,±@&e ¦þÿRd1Š.žo¡€Š)-PÆdk²I¦@ëˆt=yVâû›”蓳ýêÐV` wwÕ•·¶oYb“¨ ]ôÞ†1yZMŒÌÈ{Ò†Zõ5éQ~&€£%¬ûì_¿já§ø?:˜¬FÁŸù„ä V2¯fûž¡Åqƒ¥Ê ÎñÒGà‚‚ îê+"Þ}\Õdæ[ÀoÕy©ATm-¥û®1'`œ ´uNÈÆëÔc–66rf]lvr½ ÐWJâR’ÛE¹ÏöÔTGŽ'Înåo ×LÂ@Óc*3˜\Ú`È@³Φ¡ò×íç)ôz·Í×]²Š†ôAà­¢¢TK[x^'?¿©]w»™W­Y)€©B\@£yžGqGZácX ÄšXºŒëKj)ÓÍéôp‰ÔïáW†ÈÒBÑç\BÃ%ioàîìÿ¯­ãèöwÝQ¿á m¡o(Eq VÊi=MDÿ8NvJŠEê}c¯w†ötºÑy7gØÊPÔüý [ÿé®ßO )ÓŠ²”¼ñPªàÎz?›Ñ×;$É"Ë*PvšD¥@ŽÊ)ŒâL¶éSN¤dÂŒŒ–î8)ºÕ²H<' TUWPÒ̦0c†w00ã:Ù³0Ѐr„>ÓÁÞ¶‚š@x71ø©F)¹õ\ömf1ç¸X X†â$–kšüö¾÷š; C”´m´’S¶˜66ÐÆ4Ûm6ØÓI¶6ñ“P ^SÎÞ,ùN3Åñbê°Ÿ¡‰óZb³|Yv,t:5R6!‚Ò«ÄÀÄ R“m#ïÉm"+Y-C‚VbKÅ¡¿üx*,b“ªÐí—+R©ƒÀ>sHEðoA„ø†€5 ãT @*ôw(.9é¤ÁÌŒ;Xp•âª"¨â\¼J‰´¬yÌ0¨)½sj;üš\/…¨bâÓ þ!C’VOø]þ ¬iˆ°˜`b D… ÜÜnvÏÕ¶YWh ÄXÔUØMí’D0¤ ?{&â îÕ&0Ï&N™Ÿ»~2þÖ@‡ àî?Þ¯‘Ú*#Ð0q•à’$K1“€Dãgyuæ/¿C×¢”¼ 4ч‹ ŸD¤è´êbLO4xÖ2JÑkJŠãµõó”IÖ4iõ]Ëçö t]åk«Q&kKr€ Ø(NðñÆ7W"Ð À>›‹03’Vó "O~®”öºÿ~¸DÌHš‹áΠ€P†4\¼ºñë‘L@q KŠZ‰‹$7‰‚¢@TIsEŸ¹5ËL]ÛmJaSQ—dvx:ë®Ó¦“å¹ò §Ž!»mµ¤EAŸÁôø-eŽÞ¿K$Üü'xˆà¶»^Œt6š ‚:V³Ò@$òᘼòÚ¨Ô ½{¸Ι_ã`ˆh±Å\[ˆ>ÄpG¦Ê zk¥Šw±&kè&™ EA´¥yòõzh©pÙ“)©­, Äû PF¦SgooŽÑyÌ 4góЦãgÊç´ó76[]5$¦s´¥ø¼; ß² JÁkZ"bÜäoù¶æá×öÓSipmãˆ2´ "&m´XŒ%l®³êË©ž ÿˆ  ˆ½¶^VW/·ô®h±ók¿=f$ÛuµÎܳgYÕXᇔï§f¦Ù ‡wlèhd®ÝQ¶M˜f‘ॄmŽœ!D Xb ᣞî%(}LxÛ“ÎiýOªx4w³}L޽sàÆÏ›½ŸSÉ¿,9ML:µÅsÇ7ŸAr³¢Ê\‡¬£u‡6Ä:h˜Y\²â35gg{²MÓ BpŽ3h{Xî>›æãò-Î…¶ÆÆù&ÍÜ6Û`õêu¦ËV*ÛlÁ ,(ô#wq˜ IÇVKƒ¨ .Yu[BÀ&¤âj»ü¶JS4Ló3¦^÷¦g¹ÏŽôjŒÐ'´†úpúÜ'¥Ü7Úì ƒ=}œ¤T,Ç`Çc8—~î_–ÿ×ï&0nR¨;e0eÁÃÁDArŠÐØÆ›@Ût›|™ee?gÀì*>ÊX¼+ÑzÚd¼²ùCY3†­´ªÙýлžBÇÉËà$:ð´VŸ°U1ü;ì£õ’ªZc©ûs)ئ ªˆ•SÅ9RJ ½ÓGöÇg]ªU†:ב>ÛcxÇA!ë:}ƒ¢ûOézر«§e¥¥KÈ;­²†üË×éøf—Õiéf_©3;'Õ"ë ~3†–‡ë•%Ò|Š!EÉáa%Zíl»É›¥hDÊŠ<Ö÷ß½æw&¡“$å P. ;²KêqB{àØŽFFFx²»TÕ”µÙþ?)®*¶«v9p”Éa¤Ê¶: ìõ¹1ÛLíL®Ë¥Íþm‰ÎbÍ„ÞIí¶"aÉ’ÒokÍ%E³M‰ãfûmFŸË¶ùXZêÏfjeAˆ¸-yØ´SU7þ–Aè£0F¹Gš’0sKê-ê­ &Åq±mͪ¢”ßð³¶Õ÷Ÿãìµë`‹}`ñYâPޱÜz•ÐlôðøWÇÁI=ÑY…¢rèÒ©è·Ç{¥Rnô±Å.Ó‹n[vñ‘ôs´œ›A&¶Æ]-| Í$ ™¢”{ø¸5çüŠõ÷‡¸ 2Ÿ»#\0ÔBåÄ¥,&=BC\–¥/²&Á Â/—‚ªKŒæßÍô¦¦ñSÃѯÁr†6ä÷6þ·J£I´’Îù‹¶óÿsº½®ûÕß]2{è#½¯/™ð\>  Ií¥[i"(( ¯«ìÐt½©USÙªW­¬Ó@mݺʵ£Uvê§»cÞêl¬i½Üw 20 –šà ¹R’Q TkP„JÞë·†è÷´;I%5•n`êèÝ]ÚåZÖÛ§º»œÛÃÊó¯F¶ÙvªçwgvÖµK@ÚZªÒö=wÚËo@zâìÜð[85­¶6Õé­h;gm@5»»½f´u¥­­×jÔŒ»p¦•*bdCÒhÑéþÔ¨¦ši‘¦š4ÐhÐ4щ‰£hщÀ˜ƒ@6Ó@ÓCLšhÀ™42`LÉ„ 4ÿzQH 4h4Éêoÿýªªª( a0 ™ÄÒ3@SÁ3DÀšbdÂ4b2˜„i“!“&&™2i¦˜ÄdÈÀFLF `CFF ¦LH‰dÄhÁ2h{4ÊdSM14Ð04Sd&ô©0›DÚL4iˆÓBy)ù4È¡ ƒ@É› 4$Ó@SÅÇ%$d‚éTZÀ¬‹{[Î^üQ¦¢›ú6Ç_Ã2«™ìi£¹Ñœ±‡IKñl¦J8Æ*W/9’+M`­…ÅC4.d‹k·R±‰Å¾RÙ²ö&­SSÖêT˜R‰ÊÒ”µ(¨4æÅ)PÓ\Ám’¦Î RŽñc– ×è›Q¥±)âš‘«ª vÉË“š¨R©›¦©=â§l×sD4xOÌŸb¶f$ÛyY#¦SuáFµòÐPÐéÌ¢—=Ö¡ìG¨ÖB R \¥ÃHhù ̆”ËíÜÿ¹ ‹FÚáôtêñ§aìÿѯ¡0ŠU¯}8hvÒeNfÜ•¹`hê}Î4çÿÍ}ùÏ6ÖçÔ_Ω?ã–|Éã¢ä© [wÃF^S:†ò[möw?¿ÕÙZIoªUSÚ¿“ó6dRr#gL½²ôØIÛkm›Y:&v‘r·Z]».ãCíÙ_ƒ¬7s[§ U|æ9eY±%gÞO‡ÞK…â±_}βåsðøY}É>/R¢›± k!êisU:>Å_Tµÿcµ¬w¦õHzû|ÿ»+Vd”ÛŸýoƒ¾1Í諳ùVó{‰•ÜíÇF??‹ÞÍa÷fLÌS{T¨yï'š­zÜ?+y*îþRFÖ$ôxüs·ØN‹S†Œsê'8|»êîç®·7Œ|Ý.žé€Ÿ#ï­G‡>|3m 6îã—çÉêSãf»«Å¥ÿ^Êþý<¨§d$å.íÅßÁ['ÁåèÓ½é+hoÔy=¾.žÔÒ7/òÏÏXçøû %¨SØ¥Mþ|Z“iŒitÇO^ÓÅ>ÿ‘¿÷8ùS-,jø¬ÊôšÊ9Ÿ.Í9Œ»)[¾÷K†Å¡êDèrÏ!až*ÿK;Žºô2>q)Z/z!"³e^0h|HWû¾’Ö\G\úDÎdðtntÙ½k¢WiÎÑ_Ÿê@iœN‰‚FŽ7TN™¯Bô6r1×þŽÁ¹“¥ºûù+e¿?gú† 0rA\AŽc0YØç2s!—?íò܈²Ôµ):h¶æ6Wˆ²;D0s-czü§ŽQÅ¥WlJ §XÕ1£—ÖÚ™Klj¶õzkiZãk™q©ŽšT·çYˆ9sYн‹ýuxÚ ìïÁj{-õE9ÁåWò~^×Þ}ÞÞÞ›~ù=Wß$„!«´ ${};ÿˆÍ-[¬HHa$€''r@øåõp’@*OC ½BIM†ÀÌÔ¦¾›XI ½ºåÕ¡¶®O9 ÊY“^‰\v¢rSÀö²÷9­½æVT™½úg”'ßg1+_×É1ˆšå:”u<íÓ·NÝ»véÜÓ§Nõ´¶;ƒÖñãšK=Ò®0†x›°²I%®d’ÿ ŠÁô¿î+Qøn~M§OCÌÆü¾¯Q Ùâudb2Ý-æâòW#F"#íiSGy}‰¥uÖ¸ïÚ<äf\w’Êvl¯×;Ù…§gü°£úãêy2è°±§qqþyõŸ$‘eŸöǧW×™‘U}­wiOOâËѯÔôú0n¬ô<úÉÎe·÷Ég«y“óÑû¯~? Œ,OÇÇ?OCû­®’ øåìjåélþ~šm?ÖWÛ7gkWG7gùýÒÓþéé¶Dí­½Ö¾ÞÎÞÔ…ÎÜÎpý ‹ @„!ñ‚ l|ÔëšÀ=ÐÚÀ|ø7Ñ™™šÌÇ&k@ÛXðîm¬ƒ(m¬@:m`7m¬à5€s€¥ÖkZÖf95ƒm`7ᬈv,¹5ÉÙõ«“3ZÖµrë*ªª®jªªª«meUUUÍUUUUÃYvŒªªª¹ÕUUU\ºÊªª¹ªªªª«†²ªª«zªªªªÛYUUVõUUUUm¬ªºŒËÅk5­k3.MeÐÜjªê·KÕ}—KUä¿n«meUWWÖUoUUUU\ºÊª ÜÃXxÀ¶æºÇyè€ ÀkͰ76ÖàÀsÂÿ¯ÉÖkZÖf95¯œð=óõn©u>Ÿ:çè½ÿKÑç½ÿSÈ놰±Ž ¤ÌDºÀÄ®;Ó—X9ã«ìõUu­eUU_™oUWªª¶ÖUUU[ÕUUUpÖUUW°«zªªª­µ•UUVõUUUð.˨ø=>kZÖ³2äÖ®†ª«zªªª­µ•UUVõUUUVÚʽEUUÍUUUUÃYUU]櫟U_ UUÒW.²  ÀÀâm¬€ µ€ˆM¬þ{¸ë;6³—CßÂ>ÄmÑ¥G˜Œ" Ü"}s‘ÿ‘±FmB!ê;dXÔCü4mѦFU* ]Ñ@¹¤kѰF1CߣºE‘pÑï"*2ÈŠˆ‚°"À¹älÑžFE°¨°"|è°"ÀŒº!†!ô\û#Žê6hõæ"'Œ‹Ò:èç#èFݤf‘ÀtÑ`EDh‘–DLB0(þÑ*"£Rˆ¨‡:/ˆé£Š‹º6ˆŠˆ~‚"£ˆ¨Š™ú5ˆÏ"%ÝQ€GæŽ"7¨Ú£ÖD?þFAd~¨å£æDTkÑ<ôEDTqÄFÙd]Ñ*ˆ¨Žˆ¨Ã"*"£ ˆzDGF=ˆˆ¨Žˆ¨Ã"$TEF$GG ˆˆzDHFA!4HG¶‰‰D„HDTGDTa‘⣠ŒŠ#£”ŠDHDTCŽˆ¨Žˆ¨ŠˆèߢB5ȉH‰(ЉŠˆèŠˆ¨‡ÄHGðŠDIGþD”k‘J$£ýD”rQ%”ID9(ЉŠˆèŠˆ¨Žz"HFiˆ’ˆ¨ˆ¨ŽˆqQÑú¢B>¤R"J!ÅD„EDtEDTGG‰‰¨E"$£¨‰(á¢J$¢ÁQœD”~’‰(Љ‰ÑQ4HGºˆtˆ’ˆ¨ˆ¨Žˆ¨ŠˆqÑì"B?¤R"J"¢B"¢$tEDTGG5ÀE"!ÉF­Qü¢J$£éD”mÑJ5’‰(ЉŠˆè‡QÂ$#ŠDID8¨ˆ¨Žˆ¨Šˆèà¢B"{h¤D”ED„EDtED8¨ŽJ$# ŠDIFQ@‰(’$£Œ‰(Þ¢”IDTHDTGDTEDtDöÑ!dR"J"¢B"¢tEDTGG=õ"‘ä¢*$"*#¢*"¢:7¨ˆ)Ú"‘Q¡D”hQ%ä£B‰(ê¢J9ˆ’‰(Šˆ’ÑQ4HD=Ê)%Q!QQ*#£j‰ê"‘Q*:"¢*#¡ð@ #¼`I$ÃI!XÊáÒdóÍÑ:#úñÍ@Ѐ'ˆI!$"¨0 9¶N•€Hñ’H}„“d$“¡$ø CË$’õ³Èo;añ¼å;¸Ÿ¶¶RÖª6‚Äid¨Y-¤* [@£m­Ym©kZ‚¨Tm*T• ,’žpaæÀ0Ù°*‡2Ÿ…'ÏìèÄì)!´Hm!$ã¡àOùBp哌;gë@„dœKÀ¤ùLšf €+Œ„ƒ~Ýç»;>ÿØÑ–ßÞih»#jˆ¨˜ˆ!K2F逺²\–?ó åpr@SŒ["êÕªW“ÎìøR†àŠx`b ¶ÑhÙVÒÒÖ«hÚŠ"Õ´£D¢ZˆŒm¶Q-ª6¬ekjÈ+kZ…e¶¥b–Û•¶ÖÖÔ‘,°…H6ȤZÔªÀ¬@P•$m€ªIP„ ©!*BT+ ÂUjˆ6£+Y$=Nú›Ã'Õ@®„Ÿ+Uð@BFu¼V¶zw”&øôR}!Ü’rÊÎð“ñŒ udM®×cÎÅÛ¶Q¶ô®M¨A}à´2±µ¡­‹E¢Ñâ# ‰rU’ ‹,›MadXŸaW@ÀŽ++{ú~˜ù_­ª³paá÷ÐD¶ ¥U*6Õ¶´©iBÑ¥¶¢#-ªÅb¨­¶ÛQ´´¶6¶ÚÔª…¶ÑJYilµ­¨%*YUmRµ–«KB¶T«mª£Fµ µjTAm²Ñ¨[YmªZ¶¶Å±µj%´[kµkX‹DJÛj¢Q¥•´DjÚ*6¢Ûib ÑB©RЭ-+*mF±¶ËP¢µj4¶­U–Ôh¢1µ¡AlbUŠU)cV¢E­Y­-ª%AKAZU´mŠŠËh--mR¡ ‹!Ö¨ ;rµnXÖ^ƒ \Ç:Òä -óYV Ëõ y>sµ¡8vooÀI;º;º}vIë‘r_í@ -™¦ì–k5˜Vk5NÍ*‹S$6Tö«2 žј7Ì#Ø`±7^Þ䥙OÙÇÁÆú¿­§k½JÐ2ZÖm¡9d‡œ›8p?È)€+fÿPp7ƵšA’;¦>ö;Ö*L–‘º›Ì6¡ð¯¶ù¬ XǾÉ;t÷ ƒ¿3sg:Ù†æý”çÔº ²Ì, i¹ŽBå£Gç¼NNNNNNNS§)³’ÉDºA·d« é2X†4íÞ±è0},ãt°õÅôü?†÷‰x„—ÖHr̽{†o(xÄv¡Ü’vlëØqLà ӼwMdöˆwT=˜ÂqìþEaÓ q(åNvÒä‘8Ù¶6µ¬ˆw~[wõ3v*¾Ý¹;Œ¤ÄÖc%Ñþ?ä¥(e¾ßo·Ûíöû|È­öÿ%ÂúØ “/qn÷g‚šÇÖÂÑ[ å0¬ìu˜ é¾J}£ºé•£è±að’æ œá3 íg2C!Â¥`³™jviYÕµ °R¢¶vŒ¿f’»“ ê‡ZÖ ñPãm‚‚ÀÛÏPÊÏ‚%H²,™á,1"ÁaÛµC1£dœÀ5íÂs ÈÊ8@F4jìhÑ£F¸£ÒDÌÄ/a*îéæÙÞÝŸ¢ì2ôŒ:G’tH§Hý´æzÞcÉqÚ¶§Ã¤9̰á²/Hœ;1õ)*dSꤩ:Ƥ†…H°Yç“ê|Õ¡8•óèzxâ%dûj¤X)µÜfÑ¢v YÒ59vV¤R 9ô¨lÙ9̆d3fáG™ÜÐÞ ”4444444446YSæ¦8>sX, »%dXn°Ýd7™7™¦¤ë©ê’¤w.7í¶¿€ñzûRzt¬Š:ÌdöÌ*t©ßž 4Cäl¬1í˜Tý—¿ cÿxŸñº0P^èS,‚‡PÔžBÓ¬NKØY¢G™²=S*oþ*†!ŵ‚ÃuIX)Š|~»²Ãœf§á³Ü'ï$Ñ'»jmˆTî{·ÏÞ47ê**!QQQQQY(­Þ"]M1Ì`s 9„t\ä™Íï0|L<È®³›LÂв;wÝv²¡ÂœÂÊÕŽuã¡@ü~{¿–ÒÚe‰„5âù,ñÚÏ;æhHl-µÚ)ÝüGZ«îˆ‹£¢mgŒï#Æt41ü·„Ï!ã@mxŸCŽ›í[oòÒqÑ\ãN’–£££££££££¬S«¨Š‹¢'‘Q™FVøö•¼O׌÷›‰tD5ºæâèÉñg|<å[IãZº“ó§ ŒÄë¸?äÊ-²°:ÞkŽIƲmc„Çétt7b¦ÞèÐZ`<7RU.ý†CK½òæâȬ9š«è{.Ù'Š&££r££££££££†Kå-0 .ŽíÁسÈlƒr¬.XÆ€Sµæõ4è=u׃Áy‹åŸ5ñ)­လĔ޼Ö‡½¡Þ:úú=?±ÕwÐé ·ºJ¾“ä…77^›››››››š9Z[!½žS‚”ÚCáSqù§ì=ߦՌO"˜G­ÍÜ–ž­ñ0!û‚KÓ™DlÙ1þ¾‡}8¬õ>ÖîÔ„‡YëÎþ¹îa^„†¼y~£Ç–@§.t´Ñ‚ši€®hšiû‚ñ  0‡A…×dV«VUN¨…ÐÍ¿mÇñøÙèHÕh+ÏׯտfÊ[)ö¡8š] G«ü*ùWgp¡¢ÒWLa‚NØ_‹Y—(& îºÊ¯þ2̺%bešÂ÷’ÛzörT l3À2ò›Úkí¾_~ºtŸ;F9lz‹\ €€é©«pÔÔÔÔM©«$GB‡ŠËÊaäs]Ý2ä5'³ñÖÉ4ï=ÙéOé©”¤8iw–  ŸC•j‚¸ò²4y.×ä\{NrƒÃq ‹co !Æ™° ”B ¢ 瓘r¬ …³e)€¦›ÔÓM4ß&°5+‘0†W¶ïÆìSuØ€3Lœé5­¡²‘hvrU ?AÖ6< ƒ ¡¤ó\M·ÊÇÖÊ 1õOfÛ”Ó,_›1êXÞÙÍ»ïåºa(¯?ÞØç¿Æ^SÑÂqo‹c6AŠ.ÄúÊ‚‚‚‚‚AAAƒGfŽŠ3H²£TŠlÕÕm9»Ûa’y T˜Ú;Q©9à„†?ÖðUß@FÁë=AßømS»+œ4U9dÝ„÷ rDÿHõ)uáÈÝ›Ów»ý©µ¾Yí]„ûTRLä7«ð¸0Ø÷,Î#`Þ­þ¿+^fbÁèÕHÑ£F+K¿´ºÖ±@ÇØÉô2鷺ƶ¨Á5&ýú{ôx½,º"óf:.Pú0“ü_|‹°‚{R‡ü;’´(xäÝØî0!è„~?·dC†7Çäâ-çȱ…ŸWO@š(¤ºŠ(¢Š(¤¯ÈK£¶èêz¹m$$WöR ½}´n+ÅbõTBøî½M,Ds²¾Fs´€„÷WWudC%yÚ½Œ$!dôBëg¼BÏç£}¹S&Ñ4ÓM4ÓLi§þ£òFDT‘ÏôkÔÄc¯wW‘´¶ÄB¦mûå’Öeö´ª!ɶÙì´Ut}ç¨ðúŦ$žF.³Ny/íȽi¸ùì­'3 «ÔÊCÈ €$B°„R5††^ …ÀÄ´f©;Tø­,~;à0öèK¾þ†KÝW/ºfÏ ÈÕ}õm>ÂÙ¨ör1k“KBE_Ô»¾‹ÓY“M4ÓM4ÓNé”!´¶è¼žŸ{!@…a½4®³ÍjB:Ñy ‘òˤŒ^1ô{öT§‘ìà£gÈôÝ<$z8Þ³+aý·Ü^wÅyì«>ÎIþv¿þq¥ìò$@E9råË—1nTrçñ!l!Í!’!¦ÖÙ_&Ùþˆ€2˜È¾&F·HãëbZë*Šÿøäcë‹×˜ú<þçdú%zºk¶:0h¸@ Ì„êV›öÝ™¤õzüÞ…¢ªªªªª­‰UbˆU!wºn§"#€è†óéãe.×í{·FZÈ‹ù ÖÁö–W0 „B?¾§Wi—ºPôoΚè¸oÍW*̬tŽ«ŽÖØmùø²±ÿñâåÏ^iA”øA±xð/‚® §Oº].—K§ctº\'eÁÿ´¤xû ‹ÈÕt¹›û.ä¶/æ¯n{.ʱ0Ž—îR}6È(¯$¯^ŽÅôw›Ûc½þæZH=×òò5yíÓÈæO碾‰ì¬¸Œwæ ½AE_eË9©(Y`*Æ5ò !«ãÅ?·oÞ»víÛ·çP‡ÿ€!ò‚àÙY¼|{U‘ ÂT¯söªlš¯ ñ@FªŽôßEʹAÇM 1õ^Eí‘\ÂÄ T(P¡B… œ(Su¨ˆA­—ÿfš!¾}¼}4öhí¢­n¨(ðûkòÍ“ñ`±‘¾¡ƒ-…ÁADåbÓ™Ú@E1%¹÷´>ƒ5ðÃ!WÞÏîæY¢A4ÎM4ÓN -÷ë!*C®B‡O‚q ÏË%º"µQG<NEÇiùý>íÿl„=*šž­•kCÄ=¥¶“syÁU}P!–¥o±X hŒ¯gc1è®…ä5!Í×ò´lˆHÀô9ÚmËB¸©Í³×ý71㌠ãÄÞIC¶Ûm¶Ûmcš‹Ê7hÜcäRÑøV‚œ#MûRúÈìÆø"EPË¢£c¸ró÷5 ®×—ÄÈ÷{è»RWà#M°‚œ±¢w—ÆFtêT‰i¦‚ÄÓvšk“èoöšÎZÕÂîáB A.]‹Ùc?çcRÄ÷ß<º-¹JÏ‹¨Ö© Ñòd0w,vZ +Òr?ÞퟬËAD!iò„z’ §o„ŠU82é"£ñå³>ÇûÀÄp©€‰þL‚Ë,°%–YnyâÈùÇ__òôC³‚ÏÄLˆ|÷,wGEÏÝT|>YMå6d?¥Ò„Ž"»"ÍÙ{p÷|]Z­“Y(‘jPÐýg¤ò64ü<4'çæ§çççêóóóóø4yˆÎ£ÁC×é”Y3ú›Ý†û­ß`,r%¦l› Œîú†Ë,‹–7¾ ÍR’þ¡#=ù9jÇ‘Gä»Ý¡"nQÈÂÂKi´Ëû{ÎZ"3tüw¬tr× LÊ”TÚ********ʼn{äÂ.7ü'ì>#Ô§¯ËAÜ]=ªÅÐPAydˆùËì4QTµqžF;kv©C¡‚‰5£íâ@E’'MÍÍÍÍÍÓ¦æææíÞM“Tð}›‹qêÔˆîoîܨ©Ö´) ”Dƒ¬„‘Âï^eÒ¦ˆy,‡³Íèñ [_WQ%V¡PŠÍß¹¶þMö†‡aìƒ$Ó‘M4âM9O B°p$:ßëëfB– }—3¾­èr±qµ~| ¾ b,2ÊÑaò‰œyäw’#±¢!ß—‹f 8ð9ØiD.šÚ°ÈÂ€‰T2dvÄù_F«däcÒ!NÐ|ÜÜÜÜÜÜÜÜÀ)¹»Q &í~¤´=gÈ`Y÷¢¥1˜á˜ßârï`cù®í¹¢Æ!n Îß×`x„¤na¾k)SÄ1šõ‚ûeØÂž †pé·²z!Ñíà]²!ðÆÚšd^@úí÷wìNRnÝ»¯;®»‚nï„CšBëŒõÒß‹ìÁG…PZO.wà:÷ˆÐüÜ t²/? ‘ÝzÙHúiò¨4÷ð¸h†àAge5éÓaŠUJ÷>&&,¼ü…¯£Þæ¼.ë 0À&a†aßü†³qŒ™/ºŽrõ @úCȨ8„°[wO"ÙCïfr?Õãÿ¸<;ÜÂ\ß®a™-ÖçTÖÂG{w¼K†öˆÿ!"iý¸vÌ…ÃuE Íu×]zú뮺õâd8Ä,Njf¡?ÓÛáÈ!˜úfT¢î5f¿j¦ªéh†úÌGÚb:ÓD*èöæÉõ9gˆA4C¬y ß_yõ½fBñY±Ó²!UŠЊ(È#.Š(£XÞó‹ ŸB†–‰il/é°þ £+Pð÷ æâÁ—ˆ#ÀÖw¾þcX!yâ/#’ºq^¡i!Æÿªwìˆ9MGÓÍ Èl¾ù¼¦%è†_oƒ¹XàI£víÛ·°Ø[·oX¸Ò×ÙW܃!5Ìï8݃Ñ ZùX‹‡º ©ì†–@â&jè·W.Ð…Ç@q 7‡ñÄô!ëórl§]©i8ÐA@D…iÌÕˆhé¸Zá :”æ×á¢äó­§§wêÅDBwÉ,BíÊ÷öãíW°Ô‡§#õ2!";ÚŽÇLˆƒ2í´S"ÿ@çFÛÙ ‚FH›¦éé„>ч„Ah†§©0@ÍGZ­D+2üÏD J.YþK¿i÷{ZýÿXI›Ó1û‡/Öq n–ÿ"Ȇ—Âq /NÎzi¦ši¦œÔÔÖ’g°Cq¶Â–·òìžCÿnïÖÛjÉp–©,™‚‹/…ˆVlåŒŒŽ•Š–ˆ/±¹ì @Gq÷‹wÈì²Ô"‰‘^¼òfßZ¼X±E,Z¼_åWî#êEÖexJ»e}ŒÏí×ÚRõåïðˆŽˆÍm:–ø¯âkúÏ.=oÇAÀÚ3!©¤ËžCb$+J&d<–x‹Ýš¢ÒÑ$’I$’”I*á »ñÜÄ>.n+g[˜³=AѦâÛ†Üqâ ”úY­C1ß3 Ž‹þ}3‰‚ŠÞQ%”|L&?éÞˆX\¿·WÚ_Úý5Û.U ֳŊÑèÃêꮺõ•×]{ARÄ'´uFD*m¥’²ó¯F‚Åù’"¿êð=rÐv‹ßsú“ÁZ#’¤Þà×j(ñ×ÇÈt:—ájžudo³Mƒ.J7Ðiòcb<$ç.©Cë^ˆ¾¹*é2Ç&¸ïØßât;9'®¿ZŠ™¥ÓŒÃT*«Ñc‡3õ#ËÈìA ¬;ßgm=Ÿö":ŽÎÙUF[Ë/ÃX‚'{ÙS2ç,TAQC=2s¯é®Zòžgy²7´[G'§›äÓô«¦ê¥óðöˆÄ’vvt1ãà¬¯æÆ‡ou•ì‰ÂÆI@?@H9X]Å—ÉÕƒpÇ'zÝÞŽ¯7Ë1Z¶¾BZl«±øÝ}_á_ ±CgÍÈÆªûÆô½LYÄÔ¿…2ÁŒ Šõ½kNeó±«V¬¹c¥4U㢛ÇÚµÿWÞ±Z¶ë–²»g8þüR3w䟧½q—¬$/—bÍÝëîçk?ÇÌÝ^°EÛU¥ê–ú4|ë=‡Ø‚(· •ëÎ2ä¹~GuíûÐ#i:>D«¬Y°#Æ…‚ó #3.éîß/àªp¨ ÆºTbÇ.m®tݬ¯G¦R•o—F^RÓ æMön­±ÿ”Þåp†ùÿéŠykbñã6rMô. _Üç㣼ÃyÔ²ZR ·÷Îãeÿ'ª Õ#ªÓŨág²ÐmPX°¥R’““Ïl^M¤f}¯OÏ¡J).­>¦m (–6óˆóÔ,šØ{6Æßw¬ÈÒ°Œš301.¬P§ëïSq_™=½‚(¾"ÒÍ·#· sfÜ,´¥Çôéòî”;Ø‹.¬14…[Ù˜Õ«ÍA·6çââ×Õ®º®ZÈ¥Åo½Qc´åùX¿¶]î—É¢;`Àç'œ?³°7#‰¶¨»o¤+"ã`Xxu-¯N5õßNS7q]$Ä ¦á0¾êñ,IËÌx¦Ü"B&ɉôÿ5ÅÜŒ‘mR³c"wµ}U;î´ÍÙÊTM?nõî샮½.D wÅ$ËšÚ”fŠ󑃹A³ß«ßë=ö­ñe\^…÷ZÔK6n`fÖiÿ¤ßÏËjŠ©µöÌ8;ÛÞê5u\aÀÁÿY¬ÿÇ›E©ÜÐÊŽEçôÇ®N¸•§fƒ@Á ”Π'ŽNC=-–±ˆÃ þÿ+™½Y’ïX7éð$3c¦+¬,]á£þWÙ8|N«J³ÑÝ!Ë%Ô³gäÕÎWÏŒÎj¢ä––ú¤¸Óù3éøP¾Á¦ Æ;`Ú㾿¹,u¢°›™ȼß_D¾¥ºóÕý·ôͼaªÔ½tòROlv _xÉIqæ´y•ÅEo™ì¢Š`óhcØö5î²úÄÆ½AùÞ ³ó:¸ä•g›Áðª0wyì |¥ÿz•Û†rˆ ð:GQ–EQ†Õ¿«fòßòƧ9§³eì©´¸N½3y}‹»'··'5—¿ÑA·w/€Ôòu©ŠF•Ÿ£Í§E*æžt–-ç9A7yÚ5æ.^1¹TB$ßGæ-ñx­ùÝ«4¾&¹žåãé~¼‹]»}׸¤|?Ý©„¡Û"ÿÏq{xÜj`ÕÂÅAèfìŸã >§nÛyö<Â(¹bŒÎb—$$*/ÃÞBPîä•’`ùNkÁŸÏ•ê½ÏиVÏÑuð¹à?Åã~Ò”(rÎõ5›m R”Í<ªvK…JáÅ;²ÇÝ÷GMÁ³ ž{¬ä¤‚€~š³÷ãƒFUpÑÛM߯à@¿Ý‘èîÑ£¿^?«ÿ4³þó2æGnrzÊoÑÐ’ªTù×ú+ïàyòfqåìF6B‡þ©ªÍ%*ù%zÓÕ;÷˜[ó6 ­èí3~}E•½I×7zÛ³jÁúÇíû›í¨™xˆuó6K”Ñè¯ú]h¯»ÿ㇕ãA`¶ F~ƒéÍJz\çç—ôêŸ8”ÏÕ’H÷:ŒnÌ—ÅÃ@YP9P$ýÂrás`®¹5BZÛfj`ôÈűÿ#gù_ðô œ÷뮹“…óîÿùÎ; [vg1Åu¥û}jލ¯¨ø2œ,gÄ 7„Slœ$D¼çöÿ¼%ö] ÍŠÞwøz¹ÔI²È$áW۳̾Úàó÷÷_ËÞB]Óó¹îu*×&þÛ÷?ÈjÍÓ+‰©â‘¾Êð¾.0óŽ9Éèz5;‚I' ¹](æÃþ²W¸ÜT9ôìZ–Õ %Œ?¥ ¨¢ÌeeAkQb– ¬¨ •EѱE*-Jجª"Ô­µ¶+°Mº ¬Æ[E[hÅ­XÚZ¥–2–…@cD–6ÙkVlV[V-V6ŠZ¶Ä+-¢‚Äm£ZÛX-E[Jª‘E*­µ«j«iHV­,P£X–ÅQ¶ÆF´X–Š5±jQ¬|JŠ)ƒm€¥aJYEúM˜$¬µJ¶¶V«R­¾Õ3(#+DX«ZÂÖÊ%eEŠTkBÖ©[Z* ¨•©Q` ±JŠ[Q¥E‹Q…¶ ¶ØVF´(ÉJÑm©KE”AB±il¬VÚÑÒ­¢ÖTˆÖ«RŒŒ*²ŠÉD•(Ûem°­kšÎ`Õ%j(­«Dç-ŽP­¶¥­*,Ü.Ti”´Æ;‚išWZ¦•BÝ+†˜?¥œG¾ùžWé÷¾ç澿I黜=?Þ<Öãªkµê¹_;­¹z_QfâÍÎî{GLf‚óN=.†&6ÑJ¥ ¥XÊ£^^äÆ-evô¾†à9¡mKS¶eyVº6Ê-A+bÖ (ÖÁkiUK²¢Êªµj•m•P£ •%Vml˜´¸† ¢1UÙS2”¥-,R§ÛeAIm·vTÑ—(±Ë™IU¢ ²–…im”@X©‰naŽ+r•Ts  3(bE†2c²°* šè1¬&Œ¬ÐP¬¸R¢È¢Â(ÄXbJã €¦8¬(ÀP°¨æ” M³ª1+Y2ÜjŒU©¬U`ª(¨ŒÊT-±,fŒ±¶­mn4G.a™cl¶Ê‚8”ÆÛjb¦e¹Š\‹)‚£r·2•+.UW.[€áRå3& ¢å”S³.ap±Bܸˆ[˜QØÚEPŠ«ª?O˜ò[· «[k&Ç|ß7Íð›çƒÛºèw˜x8m²m¬‚¢¬’EP‚ÈHB(H¤ŠIa §ßa!RA®Êzݸ­…œŠÔݰmWæíéw4×n_›•Q”œôEþ{¼¹”þ$H‘":VÝWdAN æê§Ã~:à ¨6uÞË}¸‘í6ê\‡1=¶Ö‚YË¡‰îG“5J÷þÙ†5?CÜ%í —%4ÓM4ÓM4Ó°ä<Ûn×ù s¶t~jzº\<Ç·ûˆ¶ÖjM‚‚C±ÐEØó €×sn|(§¶Ñ8Ÿ˜ˆÄv8þÿÙ~¶â~Îä#åc~“S¡ð§.\¹u2åË—O![ì$®`ÌB'v‘zjð‡ØÏ<ý§[5"刴ü–²ÙíïÇç™+î4ú㎆b™!ÜñžnÝ»xöòmÛ·ê!®¸^A‰Ïw5–P ^à„·{íq,™¼¦ñê\Øý†4H‚0'㌦É$H‘"D‰ïˆ=B; GZ›]™¿;òÜ{ TÏÈv½jÑ ­I3',úvì ¿îØRr+¹#Tèvš-£Ý7ãjI$’J°’IB%Š!¯ÝM‰·è3„>Ò#ˆ†~ÊÌ»¿ï"1¿;ñÜ¥TH§M¨°ƒ›aç&3çp*Oû|÷W^YŠGÛ6Å”oÜ’jÚÚÚrØ mmm)mn„A³Õì{WËÖãCl!^úeì~hþÎT<3y' â¸\P™GëÃlL–óaÐë#EÄ1ð3ŒùÄ(2r ‚ ‚ è†Ð„qI cnïEþn(7÷Ë>bkcl¼ç}‰Y¶I_!öXnךBóqcmßí–ƒÉÊâ ‚ ‚ ®ƒó.«÷@"òw¦Z Q#>ÌUË‹ñÔ-Ì >µyñ@¹lm3­gúÖú%øæÅ (P¡B… é=r-›èË^6ôÞÍãC­ééqÏiT×ßïP>‹U{¨+§ëg=Xj9?¶ú72‚k¬¹ró×nL<š(£ˆ(„`Ñ÷óäÌ]-z©«9·>`ê­ýÂŽê¸BÔ¶Ñu¹h:\®?|û ¼-»¡$0}ÿ‹ŒI'ˆžª™¿¼ª»rEkìÔãGV#KÀ‘·m÷^¾œ6Œ¬phhhhhhHhhbª7¥^Ïb>KÄ‘siÒm˜Êìᵌ~]œ}¢y³–-¤–rƒÝïZü8 ý+ÇxñãÇOÈÃù]$QbRÕ9K[ÊøùSÁN˜l¹Ú®|s&†½ËuŒb[£Y1Í`õY¯Å>O¤fxñȬ,,,,,,,,*!Ø/„®Ä†c_v'nFD ÌÞ¯õøSºˆO¼âÕÔˆ(¥+µZôèCxÔÏ@_¨Â¶^ˆCžerƒù<ÑÈÎórbl—××××××ÔÕÒrXê,|9HvÅoëQi1ÒµÎÐd/)SÕóy æ>j=ê(Ç Ä8páǤCž!=dû©iʯ¤õÇäÎT5¯à~^Qz¯äè[Õ5ÀH€l–áðW¶2ˆ•êµyÿ ~q"élH|Ë,²Ë,²ËIC‚ÔP‡ØBй°Õq¹µëìüžšÍü!bÊ;jñàjKÁ¤ân>Ôâ?ê<_wâzòuŒ8cwµÎ¸áÙ+OÝïbªïn¥3Ô¶þƒÇºµY^ÕWª®R;?â§ÖêH®Q!{/ÌNnÞW“o¿úïGïŵßÞ1|:·¥£[äYxÜff`å™™™˜«2Hƒ@– Â#ˆ9¾hk#ëÒžÍ~¯÷½¶ÊY铯ú¯Kg“°óQZ0 hÈD^Ð\+!À¥÷Y£ruïßÊÀ8ùæYe–Ye««WRÙ¿A‚¾]q¿VНò†§ái_ô¥J½•Þ¿q½wõËäÛ@ø€UQdæ }˜Áfód0r¾ÏówÓ«ùþ¼&WM¾ÍwÈ0Ã,0à 1Å_aì‹­j4ú¨] Ÿ›:Tû#—.aÜ´ºà€*ÔgÁÝê—òuwZJù-éÌ÷u]“ÍÑbÅ‹,Y²œƒÖ ÕMêvë** SÜTèÿ./kƒ(Û¤j¹º³" _qO”R°u¾Éìv뵂ËTQ_ÙE÷“Ð^ Ð•ûox]U*¬0à K1Õ€LtÈL 3àRáz§ÍW+ 49þ„û´3€ur@;RAÃl%<É—æáªÁg…"t‡£%‡UähÐÿç¬w)"D‰ž ˜‡à xë·UŽo?¤9´yx˜:1)~N†–¨ëÅâߪî8¸´zñà[&hʉô’ì #ß 4€,‘ R»]§þÕ°ÃV5ºLÏ:Ù³»þ”4Æ[qáÝ<Ó“““““““ç'5ãd@{NKíÞIì/»ÞwÒÀl…<¥ˆvHè Êe™Îs0á^®¬K±È1þ±²@Ó%ƒfú‘ÿ#_·»mõU.¸üe«ôÂ3ÖOôÑ1–tW×Bƒowï…ýeŸ3Ôô¹Z\w÷v÷ç®],•ò«á¶´ÏÒº™»Y‰ì91Ù˜1ç:0Q‘ǘVcmFÜqªjsZ³'@‚¬UÒÊ“ô9mǮº+EŠ)¼³M|ÁÅšRžeàíÕlÚ­M7Š\)ZÐTp¿S2Ö¢xá­q\³ïœêý[£«MN­¯F9~_ãü¦·¯á6eóªÓÙG•~ù¦ŽÂttŠt1NúŽgq€(ïÜ€,»²² òˆ ^ªÁ„'|ß'+²`6̺ۺÇÙ‹ë[ólý‡ÐIib{êœ\Í_XÚá4_§Ci1š?¯Ô¡Òòߺ3Ú.)°g‡ÐAev¥JýÍæ?eTeddddd$¦­Å ˆÄ¿AýȾãÁÓ c\/{,r^­Íÿ™Æ†õì»›]¢ó) Ž@ Ú­€ ¤ß \¤¯ùµë6K^âebˆXáL0›Òw·®~%ë!S·<Ù…ó†[2dÉ“&€˜ „ÓOh!oÃÝVU^ùTµ»š ÆE‚¸œI3€n0‚X€5²ò>žëìÇeT…âGr¯ñY¨ßrÉпE—á#•ÔðM4ÞÓM4åӮۈĢˆƒi ËTê#ïaYóÄ{ôÀé(ù^dd þÖÉg}gìxªÇ\"?4mú™½Ú;µIC UUUV¾ª°ÊÇoHu5–Kï—ø‹Íà(µžìöoàÃû(øH­ÄuO\wD ±øþ€ ׺ïãâóx3=kûüty]n?À|ñø3Óši§[M4ÓŠ!âwЬl¹Ñ>Ø¥;üVWd9/(/ݼ‡³¹sf n 5su.@}¡ïýý+%Ÿ_ÕöèîË)'jºN߯V¢Œváu×]u×]u×–!LB@‡@‡@eøÜÝm‹ûédû¬4uZffÝ?¤sÁoño]¬<™Š7ú>Wí¥Æ`±Uz™Ÿ¹MÓ,8ÊGo G~ë¡ Ú‡bÓÞ“—ŒŒÿÏ ¾^Qñd¯=CLÁƒ 0`Â9ŠaHïˆ &  }Ò”A·ts°‘¼hÁ^ÄDzbh}½ÍùÅ6$Ÿ'ù ù¦p!ô Póp(![Ó;¹0}>ÓËï·ÖyÑU2`„ÆPB{T­nÑà±óí9vŠ º Taeý¼Ìë:9Y QÆ :4Øß¹Æ‚×ÊÄ|¢&§£øøh.¤G¬û_•\çlµœ"D‰$I‚,P‚d@_~ò‚\¯¯›>§33ZuNŸlÊž_w}zS~ú¢w:þ'}ÄßõÞC²éš3§³€úÄàÜÒáus¥ía†à 0à ^HT¸cÔÅ0Ïíž÷ÁG÷í¿-Û,ÐóìY ¯w³R…‹Ø<çÿ†2‹!¤ì{«tÿ_ùiãÔ÷0z¼¢‘wR_NpÝ»6ó-Û·nA)Aó\гö3ãÝå=‡•”)%0N{L8zŽ>A{+C¯ °Ì ‘.Õ­+GÜ>R%»r7 æΣlQô{ºÂ8âô/!ó¸x5ý¿CCAƒ{:ö{;ºÊ3¡Ô¶Båï\˜ð×øû‚báp\ar9º¥ßÃuNíãàÉ=×T_ꜛŒÆí!ëEbÑF¹aEA`È8!ä¾W¦þ Ö¡_RÒM2±d²6ö³¶ˆáÚçä:‹‡!yJ¿‘TOÀû6D()m Ë,X±bÉé…” ‘˜÷«6Ånø—ºÛ'¬öÈGÆ5¨¼:20·4¡"„ óU¸jý®îð€jÀŸ-´Ìx-;Áº‘¸4tޝò¹Ò÷YøyœkdtÔÓI©)Y©ii¥¶y-¦¼¾ä_g‹?×vŸðœÑ,ÉÊ[ª™ÄÑî•çžÏeßyl…DeýíÀØjùX €Š•*T¨ªqR¥i„ùzí«ùø$¶¶³Üºx·i¤¾)Çuá1@*Ê]úÖÍ=ð…’ çÙåÚ7Ý¿èêªsÓÓÓ×b~•?????†F¹â5ˆ¸ˆ*.ô0õ ©C™Ä¥—±›•%߃Š4TVÍ®ŽÉø-¢l,â«æ}½>¿Ï; õ1ñÎÚ(2æ–au×]u×Ô^jÙ ë=î¿ö6Ú<î­`u<ˆqVÉ‹œÓ×gq ‚ŽàÖæ_ÿœôm ¶drõ¿5þç5°Š½âWÄñ©ÿ[+è\0à 0Ãl1…{˜ÇnL±ÌZ3¯—¸2ÇÒµ¨ÂÇX1`߸Eì¹@ªŠhZœæRáÎ>zvº\/[=ó^ERI(àIXÏxCõ!è ¹ <ÐÆù&Ÿ>9Ñ¥„~Ãòè´>¿¨•^£õ/Ãí®ÏAµul£ëÔõ;·¨šæœúÍrKÜ, Y±eEë.ÒúýÁ+S ê–õô—\ýÒ©q´—ô”àÈÖÚlTé”#0Àe>G¾{<KCîÌÞh35÷ȱb€Å‹,YX±vœÎw³ùö;‚Ûnç§üb<õ}ì7åeŠçwTý™í=ºk[½cžèíé±d¬©M4ÓM4ÓM4æ>AÀ…˜‡CufŸá—!wÀ$„.õ?V蔳,À…;°è „óŸ'F†šZÝb}Æuu/ÕÂ4¶Iù«Lô:|Úäýw+¾‡Èß÷¤:?æž\ž‚6CüñêB¥R×Ò¿Œm@gɺžCðœXÜHœ«Étì°ôk4xÒêx]Fü=]¤Ød~b"ŠíÖ¶ÙWóÏl‚Å%ùWL޲õÆ_ËÆçº[=iø<{4é‡WÉ ó'°òy­½äôÈâç€ÄX‘(Ý@Ž ÎjB¬2ì? B°Ã+f8µ\YH3㥺«Žeëä*!ä5çk£ý*ó[ÒI{»=þ¿ËëåfÙ»ÁaùæyŽ!`½X­? S€]u×]u×°G¸IbF¿ûîVa.KmLõš=›IÀýq¢¥ løÄ¸Ü°Ž;s0o}~>‘ÍÛÞ/>.õ?óóAéÕtšÞeöJªªªªªªª«’ ÈEB‰¬^jtõ`…Æ}7jþ”µfi]~Ÿ÷Sy.¾é¬I~#à WJÙìÿ»|òJh9°þ^+šzñ˜Vq­æÐ_ýœî5ÍYEUTªªª •ÀúˆBão`ï×±ô"õ¾éKŸ½…“Kƒt®[ý9«tt‡Ð/jÆð÷.Ú?ÌØÏßh·GÎKÑÒĆüνf?‘ÙEôkˆ¢Š(£DCNsü±ˆwÈzm¥ð}×ïQÆ‘9û,ôÕoÝÇÿc9ùáæß$Ç” îº¬Õ¢s!Žñp„._jni±tÑöx¤<çE¤¹t•"å˪·[­ÔèrLe¯ƒSsÎá™Ô(ºæÊ´UÃ.µG\Ín"“ýõµÇu AèãäòN-DH‘"D‰)„D q„uù²!%§b->…×>Yô@Á ¸òtˆß±%§g›¼?ΠƒU¿È®m³Ä!Œã{ø$ÓZši¦œÂiÉ[=6}J3ßï™Ú¡uCBúF‰ŒÃöP«Ô§Lj‰Ëí3EÖíþ§ôÜ{Í–gNÝ¥kÅÅçO‘·àœe%<З¨–¹™e)à´N.…–Ye–Yiu–ØâºþZÜDãÊô;f?GžAzN¹#øö”„üt ÓXöמ™ÔØ¥]ünA.DûŽùìvŽÊi¦ši¦ 4ÓN¸C’Cÿ­ºÿÑQ5z-wgtÿž´ÝéËüÌ÷ó'÷´Ã03MƈAÓ¸Ùà+`DXÄòP{½þšxÕƒL5F7Gm¥¥¥¥¥¥¥¥£¥k‘`ˆAá „Š“ œndšÓŠýÈ (4ÌüL[¨´ö 2†.DX—©¤üƒë[Þó~~Ìo³ûæ¾t’ QEQEe÷̤(zUbõS߸²ùÁ¢v#ÇõþžšÊšµiñ6´†OÄÙuׇ]u×Quð$4d<¤"¹I-uuÇeÚü¶_^E…qüéõ5 ?šó™Ñè ¹ÙÏ1bÓ ÝÕUÿÑé€÷Ò›¬CMm}çkÅÇ._\¹rå˘֒ZÙCìpÜ/[ {Zi³y³.ÖÜèËÁhrº6Š$ÇÍ•Äj½^.IDšŸ“ˆðîQ.x$ÓM’i¦š`)¦àC~ Yï›Ü°Ë@Íé o؈÷Ôȶ¥äâÄA#:{]΄ª˜~oºÄ AÜö¯ÊÐr×a¼rÛL®‚ ‘I§ nÖ <à Xà 0ij¤6¤›ÄQõî5¬ú«çsÏÅÉ[îB_ZGìÓÝÆ‡‰ÿݰ¦ž5oÍÇ»ýrœš4… °½¤F.tAè€(!‘:$’I$’I$’¾™!´Æì{Ÿ@ÕOý葉Xuzê¦+šwßóI6²T‡ÐÛ~“ü$jƒfs8•Ôë]u šæõœýåÊ4ÓM4榢ÍMFa÷Þþö@Ø8™WZm!VÒ¾/Õóƒ>´»_§ ZÌ6Kažv¬k4êÕQ}UvÙ´ÓM4ÓM94ÚëÄë=9:ÍM6›½sÓáIÒ®¯€Òý3Ãö@F\ó#_1Fr3˜®OUͦ:UDȇÝûO]Lþé#F¡ÑB… mˆ 5Ä)H¾0è:ˆö,\·£cü"mà²Ñk621¶Ýw£H×7Ì ,TAŸrlŸOäAîÚJJÈAABº†‡òB¥¥µpþÚ¿cINšÍGøÿ¢«ãòŒÌÍû0ŒÃrß\6ñóµ—Q³¨kf;Î¥¯Ð|KgŸß^ú¿Ìb+— R†;ïÍÃaå[½·¯7Ý»víèc|8‚‰>î×Ì›A_`ÿUñ¿/Xÿ︫ýo^kYãŸkö–™ÓK=øe²90€˜Èj{Œcî•|‰¤’I$’V¤’¸yD)„$U÷`dÍuØUQH{lìÖ¶S¢Iœ\¥DrÆò öÀùÙ`m¯ÓI Z|ÂA»0m`š¤\4?î®ËM¶”èúx=œ-ôÓ+ã###"Bë'DA’ ØöÝx5i¤Dîãw ?È Êål<£öîΤž;÷šª#+EìÀ㢡ÈÕÿVCï‚7 â¹3ÍYY欵ý7Ž¥e–Yg(áÂR¤AX›5¾.åÏ”b¶ÂDEåªñÕÀ#'úEÍy5RëŸèŸ’f+–¶Ë€€…@Ž9“v—áïËOþJÿ«Ç¼vªUÓ †­Dÿ½Cé<ºÎ¿‹0Õ\ÍÙgíÁ‚<áÒsϾ^Þü›rNEt=Ö£Ämzò:ÅòeJÇCPn¢lF¯½M³ÙMþn×ÃÓe¯„Çî[“eK1šAÒº\ÍYX©áTUÆ‚ÍɸŠOËiU©P}N²¢ª²ÑµkU‘N¿ÎßÌ,³M}0Ðu"¿Ôéî0côù¥ð&¡o{øZ^Ï+-xïÏU)B\[€ÌæÌçf¹ %Øg|ÚÍ×µÖයû½æ½úh¥6жò;)™²(E"•#v‰Ôm+¸'é— íƒq'#PöðVEÝv"@•I ÌÊI7•ˆ(¬ªÅQŒŠŠñþ’ Ðô¥v5ÞöýÁ¦ÿ{[ö¾Ã’ªJò?Ä…ŸA§pK†ìk{?“¼ÌÇfS«oƒk˜å{´òrŽ\¹råË—.n„$ÈgBìÈëùv¦y[}&ÒŽ¼<ߦó/k®àèpÛ<åb#5þ(ù–îÜá!6ûïÝÄ>Bù¥¾»µÓ'QÃQEQE TQMÖçÝf?÷nÏ ¾’ÂXÀ“ÑQ,¿?oA¹+¶¢EøÜð}CšÏ7_4æ”Ð¥}ÖÖØ ?ªHÊ'Ë!€èZÂB‰BÃq!{¹­8;S;wbº RÄ-ÏŸˆïÔÄ^½l´gír*ò«ªçwÛ2µ,ÀY‰&ñÛÛÃ-âêR'o³Œ&nzþœû•¨¢Š(£e$5„5*ˆ\l¾kÕ4+¹WjÓXlU¯Ëëìüd¾iþX•íö-[kEŠÝíÕ>V`|ƒ-´ûyn MÓ:׋€ÏioGèä%—Ó÷H<ï.ºö×]u×^þB ‡áüÑÅghàô¬°ûŠÀH?úŨÞɵc6À5e¢#À„‰E3ßWȉ5 7cìÆ÷ÜK¢<Ž€9ÖàôŸØä ÛFÓþ½©žínÝ»v“´Å¸ññ~¬ÇEÚÌH¾dž8"8³rúdÍ­xZ±Ò8®Æ+-ŸÉױ̪Iç Aíãm­Ö[õuêÀKa.Ή$H‘"Bd} ¼²£x€ x ?#šDCæcBÁ£Àëð0ñR9Üëª=-¬l=2„®›Ñ›×€æþ±¡úu­|¯÷¶âcòoU©@“âIV$’I$—ÞBˆ…´‡æCMj;Yº¤~îVenè?=>íÖA¯±*‚‹êý ?Þ}x£, (±$’I$’I( aW­Ä÷1ÜK&'5¿åÈÓ^:§ÿºÛžýXޝÔXÒÃø»©¶QØ ¶óé)MNh'îm'Ïg£ç_0¼´THEQ¬"ŒZ(ÅÿpÓæ‹Õì­²µ¯+¬ášÈ`—›”x4.ûØdM×aXð–šsøþu»[¸– ú`%ý ézŽðUt¿5²7ÐÏþcÔÃØRê;À_ó:yôy¥|ÛYÙ31°ƒ¹Fsbrk©Úív»]®×kµÔ)¶ºÒ.(㣴GM¤SJëb3nûÙ|lKÄVÙ?Ƥþ‘¹nM«‚t¯ùrSFM±@€|d )À8 Øa;˜0ä‰$H‘"MÍÖæ»NEû R¹M}ò/!DŒMu™ÉcÄ¡e«³òÞÍÕ1ºX€zDƒÃðö¬žÖî·ôØè)}¨Ž÷², [«Î¸ÍæWª^ÜìŽþ„Ä/¨…Ë—I.\¹råËœW \—¿HÂV,j[œQ‘¯55né'º3™Üjïbñ¦Ù²ñc@ežÞÈü^„á°™\á•‹32¿z!|P‰Ý0ÛÌ®,Œ+l.ª]d;V—'_/F¯œÍÏÏ‚ŸŸŸŸŸ???\!¥!Ñ!ù½ÉäôÜ™D%ì$Qr‰õÛa1¥ÎÉwŸz]×ù¥)*½9«è•µx¶WxhoÍÃgvð^QF)QEQÙì´·¡hj@@ŒB.ù‘À‰þïž“ƒ ß~ª~ðËìf4åÛ0Öí.Ö»d·^ V×ðªŒâ’’ÝÆÉE‹,X°¢ÊIEê‚þ†Å[šü!Ê2žáÒ°(rk~<ö[ÂÓÁ·®•ÙÀ ½ø¦Mm«TïKƒà~q4³~ûô#…È<%¹à „º ‚LËXˆ(BöCVC AêËŸ¢ÐØôµ9Æ=JœY_¨øÑ„A'Ûü¢–;“ä„\‹,Éq¢ôÞ¸àlt:ˆø—û‰©¯œæmvãdxF ÷"þ:7ðuyråË—.\¹uRû äº2;„€á¨MKÃVŽàãé tòRÐe'í?ý²â_Ù=ðÍ…±u|]|r¼'ʃi úDOÀ ›µÄ ÕBYA2=Hø^ê<Ϫ/Ig’óG©Œ8½®$D¾v{­û½Kwa+=£@²:„ÓÆÁÿÙQ먛Ó@.²ù¾²å~ìxñã°;°ñÿQ"eêýõ¾›|o7ë¶Om…¼dˆ™ëKÿG"úZýÀ¥UØ6öˆoͨ‹ËäZ¨_% ˆ‹Õôo.ý´F¶Ö·Ð-ûÕ\ã†D(¢Š(£r Ø…d*3&‹¡ª8Ï{¢ h›¾þs4}œG£: @OÏøj¬ ÕCßiáÉç»ÞÔây¾+Þå®O›‹¸`·Ù[¢´ªªª¬šªªªº"¢;ÑÌ:?`uëÞpÿÏVùâðéx~ç-êÄ•" WÝÝŸÇ£½b½ÁJŽK½Tk]?mÍ(‹ë•¨jÈo4{P@Öwýná˜Ë_áZó>Ü®µ4ÓM4Ó—M8x²†8ÆñÒæLƒ÷Pغë·„CÍ´ƒõ#CIË𢾔 çérr‰êNõ’¹}?|zƒÙë}‡Fí‹^šœúæ®õV£ƒGÀ<^”QE%ÔQKu@\‚ iÁk2D2­¶YÍ ›ðŒx½žÉÝ–†|žGËþiÙ[°ê×…ÒÜäÀÕž®óßg@f~bz…›;_*ÿÓ³u¢Hžûb·DW›áÀz_ðiü¾×î*eÞÇ1™Ø,YÞz²Z5ÞE¼xñäÃÈW1D>*z!†ÄÜù«?iÑš—Â< ´ò²ÿ†‹‡%‚ÓóéR{¼èç]óüVž³að`)ˆ«%Í@@ï,wýãA÷ì{—Ñ~Í:Z¸ë›X>×f °ØŽx"Yý wcQÏÒoÞöëßÖ©ÝÎNN,¸ÎN\'''>Ñu·r€Aš‚Ý=L%)@6„§Š°¿ʶÖoÇü\w†ä›”¬@}»BËä¦YvZÂë8ÆâLùCy¹?e0ÓM4SM4Óìˆ~€Ås4‹qÚ™ ™¦æT”`_H iaÛ%íî õîö–¶˜]É@hlõjÊ =³§õ2çn-K`< ¥ZÜCLù4Ö¹M4×&œATAø„ƒáTPé˯KQö*Î-_Í®.ü~î•uáPifP™¶æØ0nhiWO˜ž&)ß —‚ê½1ÆûÅ^Kèê'œ©z®óÊØUUUUUU{ŒxCo¼6á x*ëÐö½oOž1XhE,c1ïZž^s? ³¨½Á÷ú5§½Ø-µ×ë+Ô ·"^€¦Dˆo›Æ÷öü«k,hv!c´¬Ž1‹„b¬»™®üÊ/õôd[š ÓíviVmN/øæÒÃÝÃñ&æ¹8¬’g O_Ï–ìÄ ‚ ‚ûsä=¤!cy§ ¶Ü̼ †wY/Mo·¥kP„qÕeáè™z„ü«ðE\ïmtí¼¢¥±šcʼ¡dMàŽÊa–žÇXð¹ÏÚ½Ž`¯6¸mSb­¤v7ûÈ6ÄÂÆ˜ãêôG/Ó9¡ôp°Û´víÛ·nÝÁ»H‡P„ Y„ኛ7ðeño¸w­o)î4>‡ðYèá] vn§nÛŠ§ÃOÇìyLÕÐxÝ­J©žÚ{.ô¬ËM.Ú?Ý×IwƒÀ0:o–åFÌиSóóóóóóý>™’D”MT¦áljå<—늀tnõ<#ÒËiPÁ¼UÛ!)ñÑÙž…3×gƒCÏxX‡ïáýž" zaÍß9Ù6[¾øeGTúP›çwÞE•(Q(¡B… (Pøú`?ÈßÃŒc,§åU€A…ÇûvÀàÙ~Dh´wºcÃ$múX7ŸšoÄÄ\^Â5(I¡jüÇŒý0ûtžäl̉vÿ&aéz:e¬/#:ûAQò¹çOý &;ý¹¨šL 4D# 0Øa†Ä¡±¸ ¾½§1³áô4á/ØÂP¯«}ânIíÙɼJsŸŸ¶©ÏšúS_æ;xøšBÎ7—³ÈM*2sÌøÉŒØ¥|¢Ã¨¥Å¨(((((((*þ28H¿"ÂŽr4H¦Ô²÷p[S¡ÑIïìý­ïóX+LÈ^¦ 3Z_wS¯©ñ`@Ž+’w‰Vyæ”gâ}ØÉˆÙº¾+ÄLk.ûçÖó?ýämV³~ ‡Þi•}Õ%Ÿ¤—íÑO…©q»ohƒiiiiiiiiiii Â0Ì2@is>4ÐñK|Å ó­kž¤þl9ÿªTŸ˜‹Û_8ÿ³íz«—_?µ˜1í&Ò¹ÜÞµûÊ/ÃæzyÛ:#1‚ ‚°!"† É8ªØÆÃÂö0¼œ!”Œ‡'óÈà^pa @oIÂ#¿W¥©§Øõï_¨Ûxß—ñtÜ=ŸtöÜ—Š?€Þ½qüÊ¢‹¹¤Sÿ¨Š¨¨=u¯pÌ´¶­nf`/j`ã{ãû²‘:÷¾ëK­l|+S4¦kfMfÑSZ¼^[{©˜ã:†ºw}ZjÒý Z{O™ÒêÖ)©NÄ}Aåõ÷®ÓføþgÍn‘áÚÅ)m´ódxþró²n£9Åù¡ˆ,FF©ÆÆµ+FÆÆ”Ô'ˆ#„ &ÇÁ‚Þs=Oú‡„€õ’”“Û¬| %+ßð¦Ö†²!­302I˜@™±QUŠ0F #¢ˆmüîãûLè>#¢¼ÞÓ|-Ÿ)¤5¹Z_‰ë0ò‰§Ïã³ ˆhtQŠ5ùQEbÄÿvœì:Hmp<+_³;ý¿ ¢8¥ffD!LBKꋆ >h$±–ööNsxA¡ðß¼Ã{`zÔÛ\O£Þ©èù¦õÆNMòüß²éttm‰ˆŠp€aTb·Š]ŸÌÙ´;fÍ›6®¶–Çö…„õfÎËRi‡ü–}«G Þ{Hj¸®ä¼¤±”·¯°V}´ò¬çëxÛ]×s(”gím–NQèì‰ëz Ý=7eÆh˜@Ú{[ÏõW‹ìé÷»¯ùôà8pâÄáÇ£-ÃÅÐÀ(Î ~§u ;»s¸×þ9ã~`ÂÄ9Œqm¿mI¡‰ ü6orØ\6Q,\{þ!Ù Ã’8NÓí:ÞtÓ/‘ÆM¼ÌŽ»BÎkxCú;ˆ82‰¡1Çoºšk å;¡dÀÒkí·[­Öëp­ÖëuVÝwFù´|}Š/ôçxÌ} »un—_­‘!wwGs°¾{«¤þçó=ùñüëÃO¿SN‡×ÙïÓî}:v®ÛÅ^_ññG“Åñ±4wT’J±&’I$–†‡òBâbÞí¼ß2ò¯@ ‹6bøq®0mL-E¿¨õŸµùe{‹Ùã÷åÓìošæÎã?Q9Sا²¬{Täœ&Ä5#w½1óÞs²¦ÚfS> pâ¨Q‡páÇ8½˜#³gbSñw†Çu÷~ý„§«âë"Q¶Mƒ¬6ÌÊý¶F»žâÇʤ×ó(õææ´ `œ‚ŽtU~-;ÉÂèVàƒÐÒ•±&ˆ‚.$(‘"DIXìuy(颵Jη€Áä÷îϤäjŒþ6G£ä ”MëÈÅ=PÿÎ7Œ,ëNá·nÝ»x6òmÛØH\È[G±¶¦äÀ¿í÷Ëã[õ”hàÁêöÏmµ.PØÜ1Vd†µ7ÇpËÏøº³ï•›#—hÊߘ°Ø`Á‚ª 0m>h!þA‰0uï æ‘öDUù>|^ ðÃÛ Ïè¢iQ$Ü›y" VXÃ1p¹â»óûé_uižÛõ"oÿžs©|íNÔñGÅ>ÊoiI€páÀ'8pá7"oåWVp+—žmQ^ÀYÞ§qø½p•KÒcÝ`ѱ\|MØ1an{v=ËÇy¦O€ú{yöGE³w ÛöÀgÜ`§'''''*“““œ4jQ¥r[;|qýü»7–× ‰z®Ç73˜ög©^\,6—5J|²¸?†Ám¸Û§Ãù°y#Ðßõ*/”Œº>}QãèmÐ× †3l”²8Ý¥~zçÔ3´ù”ôiQÒ¨f›ê¹S™,®÷g¨ †mgãÞC;V!iÿm3ëÈàÏ _åæïâw•ƒÌ<›þiÜzÊoç,÷\†û„Þ¶«ÄèÕŸ]ÌMé©‘ UUUUUU†Vµ²!(åÉó‹§øk&µÆUˆYh}ÞFz×vþ£Æ£ïtÓ5¾*[– Hëãkzc1Úw–¹ƒ Ç1½š‡Ú¿ÇÙñ'çççêóóóó⟘Þe `Ê ‡¹Pž³M6ÔY´ok?BŒÄÉ\î8¼y9%O–þòUI/W!ÞÄ•}$޹ZUNþÕ 0ÿY 1±×ë^êI8ôÓši§aNÜC8Cè#=¦ò:Î<Ôa°œ.‹Ñ¯ŽïÖ½-+ƒîro²ÄÏmò`_ǶL`©|N5½œrŸ±ã±(vM©qŒUfÜmÚ_)Uë ´¼È£Kkæõ¶®\¹jæ±CM¡¡¡³#®z/•SDÚ¯Òì.~7kÜ>lÛÑÙVôû®úoçeih„æ ÖGëÄ—zôÈð4.+-R͹dZ¨Æ ‡Â· »¶—ÎvJïŸeú½é6€â"4hÑ£NÆ©FYYZto‡¶pQ2 ê·õ`|<Ô]ô&³mçQCà69‹+Úäìð9ª³u7°×ÎåäRØÄlê˼s[‹¬;Í[åÝ’ŠÊQ…dmÛÒJa'çççêSóõ9yÿA„n¹šAs€ë‹còŽƒ¶“côd-LJ¶ó¾ø4îµù.KÇ½Äæh¬´PBïö8 ½™Å½Ÿ¹¹aØÝä|.Ýü %–æŽ[–>?ÝÉvøxÑ£F4jôjŸÈŠZ0¨‘œšÉšt‡£cªÜfÝ¥\A­ jóàâï%OH°D;ÄÏ'b´,ö«¨úËÀ)~ý™156úbÜàzVÜ“„ Á—±Ø¼¬7‡e²N²·M–Á°,~_}É\æÜ‹(×þÅíƒÍ£1Iq¶Ûm°ïÓnøFªîúÈ<7N\U¹øUø†Óˆ§DÀÚ&åzý$î‰þ½g¡Îyà¾hBþ‘õÞË $ IL$è$’m›W]ñßË ¾ëð,B›Eµ 7¿Œ´C6@XLu@sØÉcÜ\6žóÁ–®; ßÛn´qíµºn¢õ »Ú¹}möîÜ\±¿ÝW-QE`‘ES!Þ!­!¯!r!ê1Nbgôoó× dªœ.W—jpèA‹R8Öz¼ö“ÛÎÇóþ$è§åè7ì3™ÃrC!lÆà¶w<ØÃß_Žç@c|¬³FìóAʘŠƒ‹û3þéãÇL<—xòÿ-×{€É}- ÙÕyxÕ{-q£|mqö­^>Ã÷§ùsüdK1Xã;Å%€ú½Nb| ÖÁ–æ˜ìwä€xBYÀËôx" ¤„ó@&O7ékÄçœÆÏ‘äã¡MÐú…………………„šã €äã†É ê}pjÄúݵz«Ãêúði Óï<_YÞÙïÌlð³³í˜bšåÈ70Ü“ Œ´ÿiˆ½&-!„—dá°ÔÑxù¤,ª(¢Š(¢Š(¥Q Õ”ìu=×ö´±•°:´ÇÿQ8Ê6þèomº‚jSý§-;sü}£À©í{µ:i}×ë¶Á¯ÿ'Ù(ú/m¬`Ü!‚Á†žžžžžžžžˆ)ê¯ìŒ¤Á^¾V§Mš|•c[©w‡âLXñ¿ðìp‡"»Ày{í°Úˆà $å:ÄÌ—4ŠŠ@¼’!ÚO{«£/8è¢óÑœÆ4hÑ¢Ì"¿Æ* s qîÿ”áá5ûì%ùÚöº}ÚÛÛùk+‹¬Ò¼À8(ÄpíéÎgmº½]0OCÙ$u¬kMˆ7‰ɬ ‚AƒA ù tf)6í¬..Ÿííåí2×63Å÷=ÙËÌY0nQ×vÁ®Í¾cWžq¡mÏeù\_º ÑCÉ'|'TšÚƳ5­Y¿îÆ€FIÙ–¬Ù*Ïf±xmºë®ºï«®ºëÃÿ|ä,¤08¸~¾ êÙ…ö볌hÏ-á:XKIïæ=Ç)ïn PO·ð†pÐv¸ — Üw…UÊàªÌïi ¨ÖFs ”Õè ¿ò.çé­}_â阭ÆóÄ3þ«†•ãÇVÞ*ÌAÏ{á®Öœ©ü—`˜Õj1»ù(Ä–í;ËqÙ±ƒÞ8ܰVr}òý²!‰¨I$’r’I$’K€zá¥*câÂAª·ïÀd#, ’ýÁbƒãdÖö Wü ¥ºWÝgº¬l™R¸Ž”Äv¯~¦5åü×°‡‚ž÷œÛ §ËmàozÆ_ˆ¶àƽ š,t¥§d%¥ìÍߤ‰ƒð„zTæŒ]mޝÎ^þ ‚sv”&L™2dÓM4îÂÑèCÄ!h!9Áêö—}&ijªµ¸ÎÃØ×Rˆr¨ÊëyÓ¬ÿ?§d5Œì‹¢s…L¥*òlövªÒm¢ö]k·r„ؼ¼f¼¼Uy-y{ô ¾fGÌ à!A [~{UÍu–?ÅVnŸ¯'‹é™y­Ѧ8Db¾Åi+kt{á¹øõ “&L™2dÉž“¢’G€Êåo­IÎ%b Çkˆˆ¢Èí6ÃöfŸ”Ø9äæd;ö Tõûº4€®šþ'óÑú†Ã6¢Š(¢Š( EtC€CCò!×Ìàýþ,C>‚ãÜàφpõÚ€Ùìñ·î †›Çsâf¬ï÷m`Cbƒ"lVçþ–J ;‘ê.!èží•g·ô¾ßŸÁJl-Ïã—ØØØØØØØØÓ/„Bb”ÚŒk§éø<ƒ½í†ÅꘛßZdj§Š\o÷ðÕ›í¿ÅÚ]ßß+éè¹ÛÈÐoÆØwÒÆ×qf'VÈÈÈÈÈÈÈÈÊÊ_]¯›Ó‰ÆÅ‘ªïDXœgÆÁrk?&úÚWÿ?í¯i˜ ÛSÔyÙ_®Wßû¡‹( X±bÅ‹/ŒC|!š¾æ0•sZ Єçû­þ4+ïÁ(ÀæZ)+¾g£æývîì¥ø/þíÍޡÇ8p×7y³ãWØá5uêÞ?×þ!€#‚q´3áW®âðçYúîùžö0Á˜à¿¶ÕCdwĈþUyìû>ϳøg§§§§§§»´}h–£àe½”‚¶—E- fqˆMY›˜‰ïœ!² ÷³ÚˇÀ¾ïcpÈì-Ù|Z®£Š”Qôa#r”h¹ÚŒ»:ŒB2È¢‚WA ÿ’Á/U™ÀJìøÞ^ýÛYd.//8ÊÈCƒüSÉV°D6y Øn0‹óÑ ‰ˆkµ™¬§kX­Öâß1­è²I$bÑEH¢Š(‚Gï!CLb|TØØÎ?÷…jA1€ôÕ²!uåB27—YdA8‰(ý32·æöVD0ÂÉÉËàì£BŠHˆ’ˆ…:\Â^^^^^^7rCÈC.C\BÍÀšù6ç£éè¯æˆOYqh÷|^e 4’¡ ~d æ§è ]µ¾Üï>÷½3Û¾ZëÇ–W¦ûèû¼ûíèé­ØÖ¥C\fvõÛzû¾ç×¾î Øe»4ï±ÝžîŸy“gÝë_]í[}ΩЬíªë¹¶Ýöi9nwÞ÷¼çž½Ž¯5*·»”wc¯l/jÉ®½ÙëíÎo³zǬƒé’w9×m}×dûÛï»î{¾î÷¯]öݽ٧›y÷o=½Þ›Ï^÷vÛݹ޾û»åœ}:ô÷ënnt}o¾ù›·»îû|ûÉö}Ýz¶×«îz¯»·{¯²ô½{ÝosyííÝÝïwnÝîæî³½ÓÛ×»¹Ýöï°ËßÝÎûæ{ëWÖ÷s›Û·¦Ý^ßq÷Ýöõ÷lêÜ÷»¾|*&@4LLM!¦&Lšbb 2 F&TüL1M2i¦SÄd`Fš12`žš`¨T‚i¡ #Œ˜#L “LSð&&L4h4h @ £ÄÈÈhi¦&¦Â2hhi• L™4hÉ„ÀL5OÀÐS60M ÐÐF 4@¦hÊzhÁ24ÄÉ“i‰¦ƒ ‰¦ƒL¦›`ŒŒ@¡R™4š`˜L €ÐÄhd›@ “a¡bddɦM3@L`& &F“4ÀÐ&&Œ&bddOR{*¦ B £#A£ ¦& 4i„Ähdi“F˜š042Ѧšhi‘‘“&šd24M LŒ#MO 4§ê‚JH L˜1 š@ÐhÑИ0S4&4ÔÌ€™0L4LL˜LšŒbB ŠB RBÜH@òÁà_Ç·‡ Á¶uh{ü<º BWfHÔÚ¼1%8LH·øÂHX^Ü[ãÛM‡G!]`™Ï“‚Ý&3 :6í–.Q±§²[g™oü¥NèíMÿž‚±­œÒvò${Ñq3»LEú³ü&ü¯\ÄÎiHEZƒk ˆ¢m5M))îeQŒÔ¢/`CàÆ<¨}S•ôð‚@ÌTd¯áºl†ûêVž'ê#´gìöœ‡ýA Éôêx7]²úr°ÍØnQE]š» !Qz߯°û^ЏA ±[‘H;&õ¤(Q€Ñ tÎ>w”ÛÝãåCZ õÒhŒ'ïÞ•Ù¿j À]eÖ)TÅ3íæÅ~!„„|­±½}Ù¿$ kû˜vÚoÒo¥ nvF‹¥›?#ptm–¹Ëqy÷7HinRB4­.£ÅÇúêÚB zƒP^ö–îÇYtSÛÄDÿ¾Õ®¬Þh4Å¢}úfdõJ¢%Ë»ÉgHì›ecðÛaÜŠ#•‰ÿÕ÷Ô‚Ð7xæY’tcŒ¤,_FÎL,ܯÏ;-ê¾ÍTÿB­LVRbÜýCý!èB ,Ä zkaþ6Ӻ͡×㈡LN÷>OÕ0µžªBÐ50‚@ÔIâóy_ {úd“<Ë¢L ßØØ•±³BÏ_”,y›e8Ó«ÏäI]¸r(ƒsׇ˜©pˆV*„J ;<,±Ø®M0XŸ"¦mk¢@ž•4K‰Y":é´d1Ñ´ª?ój­¨›¥]9@AÆ}Rü6 ·½5œóÕ~Cš«T³mN¾ÉAv¦¨›ó€ßù¢#Kè§,Žˆ­Æ/‰Ž'-©Wáq„É•QsºÌ¼Êö!„„õ›|¾ƒg3dâë´o .W£¯éÝÜayº§²çsðEÐþϼ/å¢x‚ F1^°jtú8ŸÈÌ »©¨¥Æ'±EªÙÞ°5©Å‹:ývµÓö•l\ B íó5æµl^æú^m‘!ËçãwFHAÚ¢@¡ßíWë†5'š»^R6óÖÇ—‰òÆjƳ6ð§mïšò°¡â±·E®–C-¶Õ3–ó˜Ó#¨´d„˜ÆÕ\æs²ã}¯oÖ:dŒõ×ýÒvŠêb½íwƒ†â÷€ œO)[ì]€‚@*» {FIœÿ¼áÍ"®ƒ•fÔ„œJîƒfW ýwÔåNËŽÇù6ÃͯËÁMø˜)5.Rðµfù{NžÖÕßpåW8•0æb16‡) ß«NìQ@Pl’WRu¬¯uO2×8£Mt¶çlw;çZÎk§Žóü‹Ã{d†_³Ë;ïjný¤U—÷55‚@ê‰Ò¿e])Z‰¹CI9sòTRÃ8A¢“‡õJœ :‹Ûßã‡ù b¦ý:hn®Ÿ z±¬ÙÌÁ½Ýt=9¢B BB KFFSGJqëÊ󦼟­®“ jÃîþÉÖÛz›¿R«lä,)™Þã>Bà|͘œJQ@P½ª´Éýaƒ‹Dï¹jDs•”q!†Üæ9>'œ÷|°Ñòm÷Þ—Ì5ðHAsHApH@ÒK;`i!—E/':ÛͼÐþ“ˆd„¯%êÍä—íÎ!™9íR¿õácÙ}í±ßêj=5Ùæ¹÷è  \b—Xú™7ð•i§¶–µjMœ‚ îÃâøÍäŸaðŽV7ÔJNh$Ä4%¥(oˆÄˆ“ý´‰)Ö’úñµç^$¾Yã±áh‰37ŠÚBÖ—kûFæ¢ì¯ðÐU{ÎÊ7!YÚDqxÓ‹TŒÞWþmaöŒÕ¢{·i¨ãÌo‹þ˜ ‰ )A€ í/[&±p¨¦uÛÓ œã¤:ŒÆÝÎN'Æ$ÌUZN‹R\Ŭ¬Ÿ wëê) €èm½q nð|îYË^V¶DÁòùkQ«ê5Êü“ A %¤d21=ôm’çì(©œþ¯¼š*<´ 9Ä6ª4O+®Ú{#H„ºŒEÞ50jþùuY®5*°A ͯT–ûNĆÁör@®†Ïú‘y¤J?1Jˆ·˜ý-}Ôs‹ÕÆÇÍ–§|N¡ÀWú`š0êß)î]ögR^ªýñ?5Q ¼ÎºU·lF*®‚«ìµÍ3ñ×*† mœnó\Ûdkfùœ—‹oå¦}çÒªµü‡úmš‹w¡ƒR¶Å=¥Þ–ò¦ƒ??o}K˜’Õã±EN6úÝŽí9bm5m“U]\—­ÏU®e—÷8¶TesiÒî;>ñ-kõLïžS­òF„£_. áhŽHƒ©bó O™PG"Ê0iõÌúÐ+~‰›ù+9nc¼§Qý<…YªXü÷nQî‹(—›/.É_1o‹á€õš#ûH€•Ci¨cŸ™íÜë73z¢ÔËœ¡OêÒºÀÕæ#?†?NA ˆA ¡[úßl'% sz¦:òw¶—NþÖÆ"C4GQ5„¾£Ž¯ò)æK¸zÝr$ í¤ bK³<åNµ¸wm%_—ŒˆHA†Ïh2šŠoº±éüŽÎ]Ý›°ÀSå™eU8pu+O$åÆË{h08 €~îÀ?‚÷ÜšÙ¶,Ló:ÌÛy×TUº”û,”?L½..„:f{1}¹oô.tOãºOY[DÊ Ž;•dï­Î®,d!„TöôW¿å´>] €érŠZ»úUlÏ·1ÅÞZmZL©·×DK(wSü‹ížûX“}¹P‘Ð2¾’äÏÖ?%CúoÔ7m J¬È6VP‚+ü,mÕh]p\‹U}Ïã»#~¶@‰-)ƒkt{òwû\É×#÷¾'d%êDíñ‘íÍ|C¨ä© 9Ǩ£)†•8Y ]G¡¦pY·ÅÆÔÄ"æòŒO²mšW*ËàØfÀ'‘B¢K`ÚÛE68õÜÕ´[òž5° â¥k{Ê0¥õØÖ¡¾jv/$ äOÏmˆ©Ç[‚Ù¹œ»Z¶@7¸ý!çÆYn¶+Ú¢ÛÜZÛus%õ'i¸H³=ß²¶_Ó°¿çß¹Ø);±Òtˆ–<Äó‚¼J4©9|®åê…#Á­Õ Uìûhsq/+¤¾Êc'ù/ú“µ‰¼8@·çPªÁì0Ž sô¨å2ùïblýlµ5ëÄëL$˜8­ZÒ;FFœ[ú“d„ °NÏ2š«$4.ÆŽÐô½Ñ=Öž7c×Rp@Ré’:­ÌšÅg[=§ñ6@‡Ü–/Ž«Ë™ Fé i£ìѬÅpFdÚR“€Ó¯yÞÌ“þH®$Ý©WrÞ1Òõy!€ $ÅV"“¼:{WÛ¥Û®™ìî¿§ÞE¦!›¿HsÑÏXr{¨öÒ³÷êîÅçw7u}ìïšH@ÛêvÛþÎ/>È <ûU¤éÞ°ô{ÌnÞ!ÞéPÒtX$ bB ;,HAÒ;úûóGÞ%6.šìƒã%Û­ë-qÞ:l\›íÀœ¢]†Á¤£+Ý‘B»òŒqÙæDA·N‘à;£Õö³*bã—ͼW  Ñ{­a™sùILâ§)2¾_ç¿ÄÏ=o#Ú¼µ{mgóÔnÿYîþÚÜÙêEæŠä¨Ã¿UǬ­Ù»™áåâQ÷ ( Þl=ÍÊÓÙõ¤Ñ}|ˆ°L›\õ~¬ŒQ©6í Å]÷9 pÑeÿBdeyKlá¶Qõ 2™#/q#n¡¢IÂÖ; $ å;{$¥ýU-_•ο:ÁOìÁ¶Ó§£Æk{’]K óÑ:èT[ò3¤„ÏèþlðO÷}ˇG„„šB 0þW-»£Tÿç›o}HA˜Ã^,»N¦®kÏÓzü¿(ïíÓ¥µ¯@JÍ R\­ÛÝ ÅËws·XZý½Æ;y–ÎJc¤7õêÏrƒ×ÆùÏjÞ¯z»Ðí@âpM÷.ä7i—*Ê!úгŠî˲ÚÈ*#SÍr8aˆA à³ÍÃêªýXìwdíøãå¿|q®±šM3Ž‹oåu³ð±£Ë3H3 š^ /ÕùÉ8þz@9õY@‡òÊìãXäWR¿7h¯VW¿\ð\¹ßß."÷ßÐgêñ~'è =AÃŽÒBŠBJBp$ ³0HAÍæQlºëí®Ù‰šÙ¬ò´<+ˆù¿û¦ïw-ŸKökÏð®caM$ÿÔ}3 ä—šG§TFkU#ßmXy+·ŽÕ£â´:¯~Mm›f%Êæ•ð‚@•ÿ‹̲ëd ÝyúxeÚßYñ¥ÛM÷ÁÞ8ݹ‚)2'UP£,\Ÿ3ƒ^ºj°ÖÐçï7.ÁòU=¦ˆÆnoRŸÒ³cžG•.ßg"¤ÉÉY ó±Ñ“^ºsÜYeÎLEYü'0±/×wWïFýµäÅD-üèâkDó\/Ï-‘?P|³<žvµ¹ÔåSÿà]i‡‡ä±3Üõ/:r)mªüÚP¡?x”u(ÑV!š†A>½QBóqbÕí»k/ óDIž˜|—rþ‡Ü$·îv˜ÑÏ@’57‹H©€¬_Š”´¿‡ÏìHVxø &âêë&ùn¬Qü(Û²q1Ò»H.* K®'O~§Ä-=ôÍÆBäXì÷%±ú]Æ‚@ål²è­W¸a{X ?ù½^(ÜtINx“ê ï!—m·^lþbŽœÌ7­GPS¼N¼¢¶­G¸~êx°Uö–K6yˆÊu–do¸–U¢Ý¾|CœGøfÄÎ7ð6Ì[ΓñÑl/>ê·¾»S ÇÈ“N¿ A 7f ÙJÆVêš&Ûn§;€KµÿÕ‰H6b³–è]ȉ׊oÆ :ï—O öF÷Š÷ é×üÍæýtVœo Ê:y_iBúÌgŽN =|¢ke˜ÛÑñ“¬½'?M:»ÈV°µmRB …!H-²KW Ã¥5è¹MÉww~]ïFRÅ>ü/ãrÐ&„ßzc—ÿùbšlOlüƒ:»î¬«‹ß½\ €¬}ÚSƒzÖLÏÿ‡ò ©«|áuÂ*æ‡ô8ǘ;ôƒ#“))¦ÚãtÓ€ìÙªùnT€ò0šö¿Ó›Å9¤ŸÐ(LO¿¸^bI)…øæñ§1+ ®ýŒȈŸ o¬î/µ$Qå/½?6C_œ½öÿG¾«ž†AÀðñÏ€iʨöHÅûî%?(è‹FÌ,ŒÑ¾eÔŽoÙY¶¨]³ºæ¬½‰üÖS’ƒÕ©þZl$ ¢s´r9™ç¾eÿCãx¢?ÜU⥰ÏjŠ™iXŸLZZþô D"¯Œ$ï¦ç¼wù6­S+>VUg}òóm™ËVA 3Õ/ï?=æeŸwî»äᙤ,‡ÍdÖ-źöÕ_ÇôCwÇK#ž0.´X›´_OYº€ØsŸCŠš"Š. ©ÔuÕ¡7¹uª› ë¥Õz6õ¥áZ¶¶‘ãµÉç'sn~ôWH}nÞµ¤·DñpÝ6dí>ÏMÀñ‚uÈHBþvéYÏõ݈ËÕÒkQVV ¹óÛgG3‰°EÞúÞN“¿wkCŒ˜ÒÄO7¯þí¥s³Å¾zeå­‰'•ek¿LŽJfØÁÚ¯QÑ'ONöþ÷´&¦µ@3w_³SÔSô²¶{‹Î»– rï«üëà w;´œuж¦ô= ª})¹ú²¥„~ï-9wöÔŸ޶ŒÌÑvë³ XMñi_­€h^•Ôéú¾+Jè™0ã`äàRyyEgN—ɘæ"ê»3Kݘ•M ðÞqêh}é–ϱfå#ºµö ]^N„ë«/¬vÈA Y¥ ï–Ëç JvêäÎgÔ]HÍzAÏÒyíHg”³eóJw™‘»Ïvm‹ê3°² ô”ô$z,`,Ëšïêákq¡Í·Â˜ìÔÜšmº¡éίäõ‘ßø:‰CëYérrfÄüë·U±Í‰aÉšZ•çÑSíC£E™Œð°Ö¹H¤•rs) vV‹TVTå{·ú'DÕ¹_í‰ûÃ:x_Œ®‡æ®qpìú—O•²tV{g$ó„“tIÅ•qkÅÉ­Wg¿bvd=Dïà™Û—ÓÝ=µ›gB£‘B®%[°=yôƒÍã¼f˜†$BÜaMKý=·»qVE¡¼`øhrÄÅ®Ÿ/2Ù3™ÙRbTñqqtÞÖ‡¶ôÚŵ¦ÑU#ÝÄs8+v®…$×â- µ}:ÿ‚\Aºf:ÇS>¼4Š­ás}žo†ciK–Œ‘ve7t…µ`᪠füZöX ±]>úœˆãÖÃ%·KÖ-©xL Ï٭ϧËùîc¼K§Ž‰ÿ>ʇޟRù¡åTg¨–±)6\ž Ë”Ç:oe¬í¹~÷Þg삆$ ÒÙüÿ¿5ó+1¯äÿŽ™¸¦ôÚy¦Ž”)^¯ùQ8ð €¶Ÿ73M‰*TÏyRž©¤¶4ìLü­«Deºvì §–õW$Yµ °­W~M[<ú…Qêw»Üÿ,ʽ(ÁG¹´‰#ï§GΥ͡ñîÐ[+jêDÈìÕU 4=r¨v¹Tâœ/¡™ݽ«¸rÙ‚ë û5aª`ww¬™P: »àjFúÚÕzÕ>…vÑnŽ»““>Ö3'{ÐZ¿ƒ uÅãB‚}Å¥NÈ|iê­s¨&ÐS75¬·»“®ÚbýÔ­ŽõxÆÛåËÿ"}7·Ö¬Óš4|ÒÆ‚˜‚ü‚´‚Š€õ°H@ñi‰ÌLt6 Ǻӆصtäæß¯È‰û(òYXàs[ÊШ£xIÔ7YªÞˆJlý£Æà Q,7ZŸQ@¯ÛÜÑ%˜ft !w4Wj­±yKVœ;ù0æ1Н-¨yˆ‘ø·ÿ‡×¾SjÜ­Ú?ÄÙø¼s­*͵º‹¥çyÿ—üWLvß.³Qž4“gõC·ò SBIœ°¤¥Œmo«êû‘h¯nQfoW¡ô‡×Üì_ï™[ãàyÔ¼¥qÁˆŽÄ9²íòúbÐ8x ºG¡ÇׇéÈ„ù!nÕÓ¢Ãr¿µÑÅý½ü&ÑOþkÖ_éºÈa·.3ÿ[ˆŠ&3±dÛé±üYSQð+ÎÇü'BŠ×Á‰x§>rŸ‡»°Úƒ#̰%ÚI¶bLF,ÂJs¾šÛ*š¯¾ÇŸµ)åê)ðfàØ º‹x6ÊvŢơÂPž‰‹¢AÀ«Y³w~Çï³æ_ÉLœÎ/’{3³—|oV>_‘Ëf¿êïtÇj.¤Ô_ÇÌa«¥Nª4ÌðÓžWc˪cq%a©ª†[gw-ƹ.oø# qÏ'†ým§›]J°¨Ùœ $°;q|#¶¯‡døG{sùÛ n²‹š~=¼1Ž|þtHÏÙ$ÊôËàïÛW™µ4Õ¡õwŽú–ókS‡©K4}kçÝ(¸ ÊÁ€öñ¿ñÆOj&{|ÉFÏlÅ’5^†‰lY÷Ù^*Ôú¶=lVo~ÎËÍwo{…0@;¤>; ™/Ø‘ +¢ƒÞ§ŽÜj6[ž¦žÉ k®¬]¡“‘Ðzáw[,AþÂþoYŽ£6Ô½ù¹wü]7„ë€é¤ ¬4€(Âãô( ×L*3¶KÕ[ìå\ÛI ­yÚv3—ëˆ ¾ôÝÈ|ôw¥ÿYã6éKÁΙzÃöŒ-Ù7iVgh[vš7o`×ÈýTº+³Žn°6FÕá\ä‘zŽáM…u£ÙÝw4 ;ÖMÙ­‘OoàŸ,ò`Û§ðð¹ 6D¡sjoV“Ò @§(TËȃwdRbÆf"2ßÜ0ŠnµpWçµ(`E éÏÏÂÌûŽÙ,mìà>œX¼sº’gg}¬ãã¿éÝ¿Ûd¢Iµ#6ÁéVsŠó~FK%úGMRfþßâV½„Éö9¹ZAÒy=GO=帎ÔÄCß/ Œ%|tŽŒŒú$íÁÇÆ‘XbóCŸqÞ† >¤©X×Nõr;£Ëð÷‰¦\lpJ!:ü¶ŒÕG®»~­e€’'±m=_"“&þvL0§»/ Ò}æƒF«™DÙE¤v5YìȹÞ~Ëfš,ð݉æY%­TobÓ“ -?Pb·Žïhl¡?Y‹NÎ˾®¯ÆÜzãäß6¥˜ªþÒmÐDj…sCI‚érÃÔÙ‘.ì›øA ð „Ô„ $„‘7sTé5ÄYë4«•Û½ÔâIÍ8MüŸ_÷=Xøýw{œ;Ô”Y&³t­aPæœÃQÍÂ啨»:®¯«Î²×ª¥ˆ½¹Þ]™ÐlÊÅ##²Ž–®ì~ ²\…ýs…Ÿ:Ù(ñý­ûx’f(¥ª;·»˜Ïö¹øÂ÷@€ …ÿ9´Òˆòl‡ŽŠô§a€ ãýuœÞdNú½LmÏÁª$à¨ìðrgC8ÑŒés–ÖDÁÖ¿Êž¦E¦í0¸f71o6ešžŒº\d.âÙ³RQ@P»BH‹ *˜¨nf©u,€€?áMc»,Š¿J»zPäL”ÂÁ diê-¸35úœË阬sÇÎ}uçJSÛßôYºo{Å}C*§²Òšä}pý©ý¿?‚&CÜlÑNÁ9õ0Æb†ÍÛœ¿§Ðœê?‹™o[kc9 v9ækB¤œ*Ã1ÊðË5Ÿe| hìKî´QÛâÔ74Ξ¹Ã¯­s#.2þ{iåó”wÁ×°µ§ýͤraP?OJ[ÃÄÛŒ'³£Øÿ}YâØf¡Ð|§ö¯œz‹jO–Žñ!÷WvÔHmn»Ã¥§"‹“°}f¡ô “fY;<­‚•sÙú¸@ãê¥`tX}?‘ìÂ:ÙRzôÖ²M·fl³YúIåÑš ( hG+dE ³Œye~”Ún~öœ<ñ¾uw‚=¸ƒ%ç¾¾b vöWÆÙ÷ÓOñ»â1¸Á'EÅ’D s%w<¹•A,@j޾õF5;ר€ã±Ï{¤Ý ;CŒDDŽ嵛mŸ À£Ï‘å£×”çÙÿrÞ–JÂ?ßuº·ïóëƒn€Ö{Ö7K«ÒFS1ž«k¶§)Ïy÷Ü'DP+mÐtŸƒ(—òÍûBÂ;÷ušý†Ê:H”2qˆÑv£ñh8“õ˜{hY;i3˜Ùßjù ÿ°kÖŠ9—YÄÑÁÛúíFÅ'å! ÷!@M0ê¬tOêìcÆ‡Æ ¨Ž¶4ª¯¡c5áÍðüjæßG3q}}¦¥`ìR›Ñ*‘}^9jÀŸšoŒqåEz1!ÓOйy ,¿Š…9mA›Âü¡ŸuîÛC˜Ÿ+ZQ5ÛÜV¢(ŸÞh`cqc­¢ÆÕj£R‹añË%„¶v+¡>Ã:å7é˜Pk_-XçDn–{ªÆ¥„­kºõTMîÿk,Ç­JmIÅ|ÈÉzªÕÅâ;ˆ‚ØÊFè;r+%ÊódÙopÅ£œ‡OÙ¥¼£l]ü{)ŒòÂ{orñì'¸tì03zÚœ&+IqWÂe¾uE›UÛwÅÂËM÷¿y…4ÊUؘ¹VŸ×Ñ̺oo·×RÔ=6™šÿù©iW¢àHA ÓoõtÇê`?ߥrå¥÷Zÿœ-ƒ4üƒ„ˆ-ãàÀ¢€ ý+CásÆ¢Û¦ÈZnPUgI&KzÞ‰pT#ÿzúdylõÎSݹ ÿ|ï/”~-Q‹ßRçtƒœ,œœ§Èú”æZþîñ›1 ´rO†¡«öf’°ŸëéL'Z‡Þzí¼åIn­£”Ñ#±\üÝ;wÎèø?(6Ð¥œšƒ¤qNÕ—)(½èW‰ý)@"V’ðCÃü*Ž6Ç“eA·ãÛ!¶ŽÐšaC=<4ÂîQ—Íì¢æcõÖñK%!¬5b9·ßÿ_]$}ͪ÷8±ç.tßûCFž¿t;4}qÆ[«n?Bµÿ¢ÒØ*8íê©!m¿5þîögó¢"“ÉÿηÒ¹K9òäi]¨›H6Ãó"Mõg­S)Ö¶ÃW¸}é̼6¡Ñpe%2¥ŠöÄ™&–¢”£?J¦–Óe_Ѽâw(ÓY CâÄ·C湲ǩfƒ .-g5?F‘å¬W¯7n´Cžo=—Rr:&9 •;¢p®Ájh6gõ䊮U(’ÚŽ³ÆË†Æç(írÄψL\X( ([þŠÖ> ‘‘ÆB§Ë9¹i=ȱØŽt³çúkWlÆM<×X_*BÚBݳd„—“#|üTøpðЩÄmh/«t¥c¾ë_®F <¾ª+óÜ¡V¬´F΃֓©ÓŠL»ò:HA €¾ß·óC\Ü#Ë×DÒCEžñ‹•©±9šÃŒ´õóîqF®Æï¿SF|»> öÀ®N!ïÖˆ— ¿h"ë¡$äU<#s_EÝ¡’Û[‚ð¼í ~Ò¾w˜Y~þý E*­¥‰‘uÒý±+ÂHçªÐ >u%ºëzk¾‚É–«Ü—Y”m¤ÚñÀA Ô „d„bKÅéʼ¶ÖÌý¬]‡üûPu»£Öú3ªé-•_›¡ÔèÍ>A´VÂ*÷<‰~ÍÌmî•F­—íë5Àš{ÜvD–ýå¥EÎ%¾>`…éë?,=j¥.üßOG_ ‰Bóà×Ls:’ô~¤U i߆ԛ«¦xÇÉÎË$™ cÆÎãÅc÷µP‘}s´‡‰/øåo†A =‘£+ö<ØvWÉæ¼ÅÉCMÞÿÙùX‹Ä W=µ³j/QÈ¢Äi,¤l¦¸!¿¿g‹CT2i€s!ÞE|·Ïc¸È½¯ñ))×èøÓÖXÿ"£ån¥• áùÞ9JÇ ºˆJkÄŸyÎùïZ ™Ð#<ÖÑ{ÁmcëÙWgÆ5Öî¢qÿíÖ8Bï+”©¯4'¯±Ò×,¬1ÖE¦¥z+I»ï\$w ,ßoÊç‚Ë-Y6‘9òªPچ͵ ûÞîZnšÓ 'Óýpt¿y¯‘ ZâXߨsöÒÙ>Rêzuåã%Mô¡NSüU3µÝG>çô†C­M¿ë –X8Óikç+ÅÊYîLÃÏô´¸©‘ì>gOñg3\Ä©ÐÝÞÃξku¢†×¦ùpZ?jËEÙ#¦Sˆçú9½ÉL¾Ëè¡‹à[È[ Oc®é‹Î•ªœè[eÊ•šN„µÂªÆ·i#Ëd¸Vèð €Z ò_ù¸’øþ²¢p]î5yÛ†Ö§a¾ãOïg¤ ½HÏÉ}°¯èôÜÑרã['qŽ;1QXÓÞ¼bDíõÕ õÞ‘°6¿‚‹õˆLÒ¹¶d˜u…â4-ÛäîýÕ•¼ë²ø‰l›O4®,Þê“Äv¿RZ­à«£9ÙzÎëÅ’L\Ö¡$ Ûa4€Ð1!e‰çå·žÏèUlu’Sz?¥³Ç»#aóä3bÒÕpÊácßg»f mf·ŒI(èŽ-UK%ÇWÊjC~¾yäQÏñ@÷ÞÌí¸0 èøeêCM°%ÖŸ*·mñ™çÚ™lšíà(MFϾ~ÌÏÀrÿÇ©puÍä—l!¼œbvá?ÉQ=Îæ¦”¤„Ã]5Šò4qfV¯FøîÚ~~ö¦nÅm°„¯—¨¨‡rÒöåz²@•cß@ZÁ"Éý÷Hþm´µ‘VÌ2ÚuŒUßmaÈ«åy„òžwbµ¤¬%šT9àÐþî_ï’T²¼š#ƃ*OT‚¬½µLö›‚øk V¡Úy:بRY!½^]ù³TƒÆ.ææuW2uè‚]ݺbdPŠ`(C½wÈŸå½Å÷»ö‹ñ ²fÔ… M%Þ­X…)± ñ.2=½BL½ã纡®?`t¯20æX²ôxÀXR0HA;|‰ÄS ¸ùœMú^ksÊ[éôÝ–>=½^鯩pªøŠ÷˜_gY?ƒØêØ¡Óó$m!škX·ç±\ùÅêëþ=Ì—¨Uªzô+}ÎH'V>›àí2b‰Nãàwm•çSÛ›IÒ¥©6®Â¾›Õ‡ßŒ2ÁÔtŠQ06ƒÁÈc¢žeŽóÂä ïø;vÍ£³Ç9ЙÌî™uî‡ôÒ ²lÚOøÐv ¦Ù&]©Í²}ÝïèõO4käL)YTZ å±²'MI½øŒhè`ç1‘ÒÆ§$p׿ ÉÊD¡:OéåRt „$éï ¯Ó'fé<¸ÐCOã~{p÷í#¹/W09œÒU…C•“Áƒe6—ú9®Ž ´žw:ï. Âuèd–˜ÖÐüT²‘3]ç¢ œÒ©ÂÌú¥\ŸKhÞðàKíËëµ¢45§Ú ïÓþ0lá§=JKHܧCoœ8–;6£L3%<Ñ Mž's"Yì´¢ã3^ofó· 2½ ÇŠ¿ÿŒåNRŠlÈÿÊai^$£i_¶ã¸BË“#‡–Ùh²wÕLtÚ\E¹u….ŠA’sªôööcê“Wìù ÿ2Z†Ž,ÞõPwO¾¼ ÙhˆôÇ8ÿËR(ooOϤÉf¹-ÜÚç†b÷ù†)”`4“Kô'îßÓ$Ñ¥Y:ÓN­ñ²³‰ê̽Um©Oôz}ÍŸñ…±ÏN>eq¹â —*J˜ê4r>…èÄZßšŸ×3#±ãZgtÏ` ñ^–Y[ÀsuàhÁ˜÷tæ÷ЏlM{è£ïD¨Ô–&9°H9Ðïu«ÌFë QZîl"çgÕ4ñµ•»ùTƺw"d”À®\ÑO’‡"ã—ú6Uá5^n;rÕ‘ 1é5‚Oz!›4~ô< y•©š¨§%¼ÝâTƺq–tgŽî?Ô†iïþÿ ä\>¿Ivõuõ©)ý¹±§5¢Û5#ÔÏ å'o o?ϬüWï½(Øþ¸ÙVD­¬3$þŸÈLüyª&Õm_ÿ¿î‘lÞ®ÏJrWê}6ÙGt<Åúm ÝŒôÇ…æøø§Gö䟢sJp—N[íoíe"¶Tß;¦C逼çþõ¾þN÷9Ï~‘º$„,HA{˜žÊÍ«”Ú>’¹ •vÝÉ|èä"„„”„´„ ,^–„€J·À{TÐ>:‰ûJGâ—¾WÃëÌ’*ø\O³£mü²"FÝŠ³Î´e­•4æšWƒQ8ÿé|Œ нêQñ;eÍV¬áƲªnÇ+Õ­zɦVK¼XJ7§È»:¶Xæî0í@•ßãôÊ=&k‰]±nÒ†‚?±À<÷aõ…orö½K¥æÉ2Ñg1Ú¦DO‰SNÂ~@Ó›-[Ñ6önØ †I–q‘¼3ý k°f÷VíŸ<<¥y<-¯-_Ûy¹UsOƒK*uŒ‘ó•‡8äßðUEwٙͼQ$ÅVd(_D|Vé¤Ra*þw×ÿN}çò±ñX· “eêá^PZ:þú¹|¾r­* ­TãA¦`™Ì^|w:ñ¬SÈ­“Éò,¡ú1ÓLv¦súf7Vùîk«oØDW>šeëóÛÒ| ….sd”ÎÒ\Ú_¤ãÖUIƒHHª¹M“í=RÃt†ÈwwYQ±ºÍøyÀçr™J”7UÐ¦è ¸mwòYó¹Zc½akFu(ÜM á9ÓãÚF8“W+dÙJ‰KN¹°HWýUk®ß½áËÐo|«ôŒbâ´Õ«Lí;™gøE¬R‘×l-ë‡T…Ƴ¾ùÏ=F› Qà`qGOÃ<`lW„WÙñ3OÜ&Ø”ßì»Æñàh—àþšç×d¥ê›Y¢¦y{Zjƒm)¥âþõâ²XULÓ6}Üoï¯*Ða 6£ó!èhO{„½¬_²®Ó«þÇîC÷Oño=ð›¸$}_Άiÿš’Õ2 ô,¦‰*Ãþ«=æáæšEv+E\©ä€9óNÊ®Ö£Îø¡VÝ#šPá1ýUtÊ´}N,ÐèÜü3žÉ‹îêlò´‘¬®R§CÄ{GloÅé ߉pÈ:õÖjßÍAùynÖœ˜ç ÌŒîV^ŽòŒ|±É¢ãÄ^ǹy麳¿•¡îŽ© NÄšm) *bZ‹Äò!!b3¦»âü¾J59Æi€fäNMÙ¡æ’"¥c&í}=ýtQÏ5ûŽË„–üÏ:˜#”h¤7…x÷(íÜ>«MïjÅÙR)5]æô Tìxb¢Ôßàþ ®ö½ïŒýözJ×ú±<ŽÕ ÅüC•†± ôimCäÈwÒ¯ÞËAql[ÄN¢Ù¸ ¥›)™Ìï VÒ¥ãƒwljÛlHÕZdì`"0y_dz§§Í”ípHp©QHôm)p¾±¥k{Pø°‹¥;…a%7>y9vHÃìWäÜœ¡žá~¸¨<÷N\©SÊtbUa_UÜVÒ‰ôѱ-c†LÅ%Ïr>%µ±1±ò\ZúÜÀ6Ýö­ ”½nz¥ìòï5zÌ¥WÊ JqÿóƒJ XÊgI7Z™e)¯ÈËzCðûö–6MWšx”÷ˆFù éÜ»~þŸÑ[À€ÕðÍj…tIÞè»™KøÂKíDîoÂ̈́Оló–5ÜÔy"o7.0ŒZ¼å]ÅÇîƒó*‹êœÙ™UÒý¡å¾bB Â[ öGew£ç…Љ¢57L\25†Ho”Ê÷áÜ•ó7k¼¿[ÜÂ:lb‚Œ%;âD±ú›KZØÔ¾¤cœ\.Ç•(roê’‰NžNéçS²"œ‰~â>5ADe”e±P*û)»÷QŒñôìŠÆ–6”^’ÿ^룆Úå2ù;ÿ–K S¸·üï_YÓáV‡—9m®rkñFÿvrÝiÙÄÏC±€Ä—8íó rDµöÐ6¯Ž^)T—•ƒò°Bá×:ÝܦÕ4H$­CJš|ï(¤­@²÷Gû£…äøÎïl^&|Çvª‹oí|ÏEŸ!‡žtú[+¢E€ÃIòï³4tÞ™,/ ûÈHœ‚ðm¿ÁeëX»hÇ¿ýž·XÉ"ÂRQ­1Ž“ºÄÓ´y%ÛVašDjªìœ§z3ê!IÝrÌu ·j9 ‹‹Ý0ï_È¢fä´§÷ÖvWÝMq#ašqÿ¤á]®¸ugõR=ð·_óí1Tï9ý}—JY³<³zËJzñGÝAc¨`1 |t'5 5A–½›Î'8¤p‚ËJ¿yƒ#mãL9öŒ­(|rš)XtdMf\ˆMq ¯uvç.ßR=L¿}ÆÚ·Ñ&v¼ÃÔ“Zº*›ÔÕ§ªÁM ’8ÐtZkQŽ )G; tÇn׸Œ¡ŒøMÓ‡5 ƒó=<YWS ®Ò¢0µZa#ŒŠ§²qË^OXjùÿµ/Zx“Y]⪗°½¤vÎPÇšµ¶ö¾¡séd‰ØÏçGæS›ÿ£ˆaÀhÕ«É/ÈÕv·¶>µ¬.ÖIY¶¤Ý1×MØ)”RãM/¹£ÛH l¨‡YË9Zÿ§·™‹>’"}eÕ]Þ¬£»wGxA»kiÚ}+ï&àÀãC­E¦jšlØB{þc}~1‰5ð¦´ýü}&²žP§¦˜CÙ£ÁN-R¾>%±LCä‹ÊÉš¬g‡ÎVe‰~¸Š.3#”[“„…A›LSiZläe§·‘ml:Í?‚­Kc~0<³}ÜŸ5wϽÎ[Ä*aÛî#A÷#qðéïUìÔÔ)®_s…¯þš acçU.¡,O‹¬‰bŤ™è-K+ÿegÃÖòš´:rT—•NDaüòT-ûÒ'ú­%Þ§½}9Kª7ó/ë“5Ï Æu3Qƒç~T"­ÞZK}pOZ¤´C£"ÀÝ7’|øBÔÁ²¯Kå‚q2tÛ« C›b†˜ùWÃYGB¨ß+Ýéèf@Ÿvÿ×É‹´[ýÐÛ—™ì¶XsFò±eͺ7¹ÑQ«$ô>òyý‘ÆÚŠùäÙýXeèJ¤¹®öñö1£008í»êw¶b\zU“ÞV„,ÂSüRòœï‡.˜ç«€³…$©$ÇœÈÝÕ,ŠC„†>EŸ²ü¹èãÌ?þ’{˜PÛ8Ì)É­0œDí·ÓvîÛL9©#ø ¶S—Ž*"&·uUÑ9 õ(1©2¾t3&{ðшSœ÷š&.JÂ{~QS!õïô¶<¾7´ÒyüLPR3áÝCIr* ãô9£Ì8c«d Š¬ý­sb è˜Æ!Ak®iî@¦äØŒP/ ®ìÍÌ´]cúS7jÉáSMU@x±nëx!ëžw Õ¼uê"ÛI±¦ÒÀF ñ*143 ¼Á—ßMî×ï——¼4ìž÷3$âÿi~zöÈõÕnÙ³X¸;)x¨õŒnÝŸ£Ã“ZñSñÑ¢k¹^JlOK,ýG6Á„ãåXª9ïvXÝ&çáÍëȢ[ïek$íR=/ž'âIcÐ÷±¥¤¡áeôùk#T‹¯[ÊÐÆ‰×Ù` ·HL.¬ÂD©ìëªOD™{µ5#CåÝv+5©œz=ñzJù#Äë·¯¾`Ô4TÈô£Ë*É“Ç4›)­ZúÃý–[mdý(Ü¿âá®nNŒfbÏ×g¬Ç>/ëú3äSp Jí>9ÒDEàW”™•wÁmàžO Å8ôÊr—ûè€Ë»¨j8yzIIö䫹*çÁpž¹å\j9™¬‚Œ“ÍäC—~~Ž{‚q”ôÇ›Wk`eÓÛøá°íú‡kÓÔ?¼g5Ôoôœ¯E=¤úVr‘þK9_é$#Å9júeòî±ú”Ž¢tóýlæn_7œ¼ä™FÎɨÙþô7N伕ÛôÈô“×X>#—ê¤;¬.[¶´ìÁwÅ¢ÿ½;qÎò{–„é Þff[R^ÖäÕ)Õ-LÓ™àÿÕdÞ+ÓãÖ2Y¤v_š±*êãîF–Q~$ùC*ÕæìpÊ57é›3SCňxè,_ªoüzþ†L6z´4* Åᑯq\Û¬ž}µCî µ@ÝâÅŽœÐ³D˜wµRGbºpg„UU äZ¥ñR‹R% ÌqÂQì8_tœæ ½¯ñ 倎åwCïnÛ%’NdÓ×ÕzëÕaFÜîTg°DQwöÈ‹ãÇn £TÃ3<Áå‰V¨žOq_ÀA²¯h×mJïýwÔh²k&ЍÝíã$&r4³ßUâ-“,b©ŠSoƒ‰€?儃j@[ HÛYQäȹB¹ÉÈç‡ ½}§ƒ>Hgǽ”:®rg-1Ë­ŽÔo-QÀ)î¦Æ³´ôkó&±{7?ßBòé FxÜÝC„£Íù4v³U,‡½$?úF½Ÿ¿SÕÞ®Ó¤èÓÆ—•}[ å-m§«vÍdæÖm F9²)R3€­;gô!Í–*Í—JqÀMš)5½ã¥îs¸™cæj§ƒ/,´¢¦^ñŒéÙó±É«~/§F%ÊÕTíS-’ÇðÂJФ³äDùÒ½ WwÃYžcÀr½¬=©þ—i†<ô»YB›ñ­±Š“ßÓÚæ¢ëç³VrãÍXq6Þá’±ý“"–¸£„öêQTά ¨ºV]y1døÚ<æ—×v|y2ö%™ˆå‚äâOhMí¹”ç)†öÈ)(„3÷¼[H·²ë]÷š™ëm÷û¹0÷{]"t&«Æo'éÒž‡e3{h“Å`\Zº’s~GNˆghSí£>ym»Ç,¡%&ßn•åQZ *jAæ=õå®Íf]s+³]ÐJ©§Ç#¢bîrAgk–rˆp¿}H°z|bê¤S“a@GA±‹ÞÙ¿ÊS”½wSlˈ瑋~gCËØq¹‰/Ñ_á±¾;{â ñ?ò‹8cñ)q[ÙTȾu yÌ'&ž_! ’‚ÁëlÃŨZÙp‘“xÆéNÈè·tSQÇëuæa,(б”^´%º©Þ?C‹rXÔ<§ëUF†uæ:‘}Á!µo*×·ùìè3+±gÆ œö‹*¥Ûyóæí¤³u¸D”•ˆÕ56Õ<õPc^GÌõgQúEµ3µë¡’?§HŠp¨zÎ3Ê>—ß‚Æ5±Q{‡Ò­JîßJgÆAͲ­±NÁù ¨%äyo].mó…ç“ðñóWD†š »ÈqTœ’n6¤âGQk1t Xô¼ÒÊÂЊ~2¼ûU¿ãD…¢"RD‰:üއë²jÓV*M ‰m /t™‘MÌëEÏã­ÓF›™Ä­˜»Ó%uࢠ/2¯þDï÷ErÝ}¸7Õaöo³ô{òn‰W&ÚÜaÓÄÕÉÞ&þ7_Ö=±rdÆ2˜ØLŒ„¦ƒèîÒJ ÌÂ4NÎr»Ì*ÌÁŸ£á=Ýc÷±ä'^Os‰=„ ñ„­¨ÜñãÓ'¥Âx,Ìæ> ¿ÇÒú¬º6–†?@ë+ô˜âè­Ò2°C}»4¯ÑÓIoí¢5¯8‰~î[á•õ?9Cäƒ`㑯/¹/Ç'ˆáW¹ \úçˆÞ&ôm*'/q3/±SáÀ.T\®Kñ‘ÏVMîÌ\zöäV,ë”Ó¨‰ó??m–âêE›Õ4zÅBÊósèaýdòK-ÜÛ§²¿œ@>8¹R:zŠ;*/—c£ ¾æo…Z~c-u¹=a…;K`¬·¨ôK[ Å<è­µ¹æëĈ¾óéɯHÌJý–”áË; ó½¿ñ8Æïú¸×‡§×‹ß"à2-rVacP‹R}€Ô÷÷Ì’ýÁ . I;Ðãº|áÔ>µÐL„½sËœÁE—Ö$ϳ“Ë´aµë20oŠ~ß9A^+¢å¨ÊVcuŽ•,àç;Ï•ê¡Ö‘—U”â»Î:'ßøW6A+‹´â²p÷áoA}*ºÍÒ?[’-w×~ 8â>Óó)ÅÈ¢æò]j! ÂC½35º5½¢<÷÷à UÄu$}Aås¿î†)"ðüµ<¤¶¦.öº ú쌭,ËRmLkbu*¸¹ö~JìªWç²OÍEá·ŒŸVÑeØ”xê6qJÎÓOÊÀà­dgùºãÓO”ü¶¥¿ûäüþÇ%ÀAƒŽË[Æ¢®2ý.ŸE—£ÖN9×NyZ13©!RckëÚÊ_ú†f%y«òû·kêK¨Ç!3ñy¢ÐU*Ø¥²ÍÙEÃâ§@¸åÜèæ»ÏuŽ0õð«u;-kNѳŒÑ0gaçt O/ÎKvëÎ’h—L‘S=»Ìç,L)ü{9¥Éò±+%] oQ/¶ïöÄ;8õ=Ó§ áÀnÔSq÷Û:>§¤-Rßj/yq_k)J=xâEEnMùÐË驉>ø*Õ"¥fdaìLDf—¦§Xi8©%’|Òu„ ¦³x!m’i7é;¢K3ˆƒ$ƒX!2|Öm!B S: 7)4"SYåH@ÒB êB*B‚BjBÄ„4„¢:36ù!M!êBt„É!Ò?$ ‡H@þ‚‚‚!-! Bd„d„ÉRC$ œ$ †³'):é ’C$ ƒ‚tÊB¸„¶C$ ï$  ¤ Õ$ ‡HAÆHA ‚!2Bd„Âr™AHAAõ—Ñ"Þµ,t¾½CMÂ…äÿŽÜíϵÎÚ¹£o•.µ#ø«ºžýWw]o{<ZÜWá (Î}ìH€ÀXN7^I(¡ƒwk’ö|PUì¨0BA@=717‘O ºâWZÓûB4‡ÂK[¤0÷Plñnèô’¯½šLe¶ßK››Øïî§JáŽÒ ›Ÿxdê˜m˜»‚šriÃÏã\æFÒùáŒ.?£@Iç‘úq½¿¤¨ýãf,¤„¾Ê¢ÐÑ+îy” É¡œrUÃëµh• ?4mWOìô%Û¤C¸g'…Ãx.Õ´u<®‚ý:«¢þm¾¡ΖñhÅãNDßZZØÕÉ×½Ô SÕ»ÕÁŠù¯ÂM°Œn÷”?,öçT*"KÎåÉÕ;µÞ /¡ÈÂIX1E]9Fp G 5{ÞHèÉ"‚ä0që–ÿ"Fœ”„i!$aüu=ÿRA¾ßËÈÇû«~GSãm¥Sùöÿf÷%ùp¶½œmÅÏX²¤5A <6ì++L \!q‰ è8\ýâÆÏ_QßD €‘‹#ó½/ˆö¥,0°¼=+r$[P0—º 4#¯·÷Dðþ˜u»×YÙšƒF¨·7ÉÄU 1yO–Α…_DC¤dÞ¹í#âJ‰%ÂÿYô(ÖþE€_JSÝé0¢b( (>aëv÷â­‚ôJø/æÄ߯Í9Ábgwñ+õ¿‹fnªÝï]çû|ãÀù„iJ^â4øë6ŒEÖ@ØHº}a°rLãš‚–‚jQiÞè©®޾už^)ïÚÊ_ÏÄýf`5Ú(ûiå¥# AQÍÚ·ÇžåûˆŸ3 &Bf¢+v|‡€nø5û:^]§ÛÔrÅê­P Cj–6EA¹æÇ’þûí /-O?A|V¯Ik·! WO~={£ˆµÆ¤¿¸Î®ù¥L6ªêaæè§1ÕìÑ‘õÕŽªbšÅ +vÒäî½ç˹¹ÿúÑÉõqgKÒ™sñI¿=匌qíW³Ûy¤ÿ3'©ðÔ¹”*Jò<ø)~Ƕ‘¢{~uÈÆ~)Åϵ A¾ìì2pA ßpXìòÂþq2÷iÑmüyë¦÷w]6è|$ÿUï¡»Ž™šFj±þǧïVÉ–æL”iIÅ2Õ&¢Q~fsùˆ=¥M!¾vûGmÑ»ùÞzî2µxý•9êźìÓi]Yw­Å‚ÿMÇ[ß<î·Ä€€Þßr x©[©ño 5L €ÅPø­D,êþÆd¹ŠVw kº¸êœÄžÙØÜ¢„þUrò ¨„>"½¯ÐBôl”¤ À\0â]( +±¿ßk-!óK…m”tT’1%5†­a›`ã2òö6§á€õ˜EIújâäíaÜFìØ`ÍK‹ <{œŠYî!þ3ýÔ`6ÍB¬¤¯y»¾Ê"wž¶9?÷kY~’¥éåô˜‹Ï&—€‚m:ºNRo +Õ¯ÁðÅÉ›«jŽ×;g<®5]à[ô»NBÄÉé)½›V«æ £¾€A , € ÓG´¢jhm<5ɬ»ð’O;.l¼ŸF/#otì{¤r9:²B ŠÌ’ î܃ÿ_“/_9BŠK}{½AÌSÇÍ–¬u¶0¢€ )ïhûÑO¥…&ØO@`ýï³ó…²”P£Êúgt–Í^j®bsw/ñVàuÆL–¢æÈqéŸõÇbñ5~胡›ä‹ÞsË ŠôiÅfsúõf Ÿõn× é6ÿ{ÚÌgd³»1*¥p—ÉZÃuäZI¬7.ã4ÍMUF«l2“ŸÓäüûÈ>¤ÑM{áÿt(V¿ŽZ³p¤ø úç¦ ;±Âÿ©ªDßqc£'ßȦà‚@ÿ˜™ºÁš \D<;…:°K¯>FÁ(µË}ÛÌE5N˜fÖtãù” Å<´oq3¹-ᦜAˆ=ËfârB †¤……‘²Ñ,9èK>ŽÀèû¸Wj×! ãÍåîfwcõ§ÏD„ïÅr=¢to›8g)2Î|µ×ûVÛ&í @zyU~Ökm©sŸ›µgüÚ½7¿“-,ªD&šåòŠ€7{ê~íRij¿·5–[Ž®Sô37ÆFòZÅ8‘Bº°òõ~lymÛIÜíÎÍãÒù’ÜwÎ#ˆ†þ_¶]·Ô„‰ô„ãëÁØÌx™Î~om¢ …çŽI½Aí~,M…ë=4zаx¢ð1 Ÿ•7]MQŒ\jÔñ³:géñÊŽŠHAõýê<›‹«Ô?µ!-ÚVîê}îRÔù¸¥òdvs‹Ï*!ÄÚã¡ÒX÷ÂB B šB!ÑQ›ñ)YnxÏ\‡]Ä`5èN‚8 ƒ_±qÜ~wQÁ–™Ïä0ðvx—7ˆÌ' ŽqœíÈîu\=µ ”$ žçy8^óu.ÃFÎíÂŒƒ¾ìáÓ´×/&Ö „›|3j‹“ëo™fw]}HA°ÖÙ4ô_‹#žîß"úÎÛâB ;l£ôšqÿ«t‡më“n‡í1‘þ3/É(õé‡sß5Áúg®>ºçÇ(ÎÌ£¿¢¹Ã¹ž;:ÚÉE@;vœ9‹ÉÏím;[fÔàƒl_' tH»NümM6Ó†ìVJS1øA ÷FJn~–ž£ßßâ¬E«-m¸_Y\aüiFÐÄ:}:Nžü¶§±Lv×r ªT<އJ²]šÇ2žÃùXj©ÒV7±•¼§Oô`Yò¢4y!2¸f®o‰3ý[Œô^ï¼ÝÚ ‘Ùn|¢Z.Ì«½¤ ý5óßûu÷Ÿë§™ ž4gkë͸µ,Ï|þn‚mKŽs4£´_‘ÿQŽn¿Ý‰™y6ÀÅŠ€ :q0-|&¦Äÿìäå–1ò¾‘A×z÷¯µP—«È^ç )¶e:WkÁÏá0’“[„­'+Ú€1LÂ÷£àR7.léOÛ6wßîPÝg j7ãPÑg+úšÆcq 9Š»†ÌáÔçm]ê®±ÀB“âÌ·‡¹Ïƒ§ü°Î›ß¬"B þ÷âëkd0pŽ–'— n—üoø€ ñn,[xë)ìWc¢|Y‹ƒªû‹í=7 ]\6 M~9s½ ¸vÎÛŸ²ÕgUêz±8xÏìÈ㟙+ ¯ÀÆrpHy „>o"™ÒuEc¬ãKï\î꯷®<_æï]æ7å@¤ m!·rÿÆqvfWµ›¤7W˜Î%’ñõÀ:^5mmYùB½´ÂW'r%Ù¼N òˆŽÔR6ͧ äæ@Ë+LTÃÇžû´A… €ƒq5êìz?¼ûEsÔΠc!²ðùñ![W§Íœ“Ž[}ú$ ê$ ²$ hHAÓ½ºäì­e<Ò½•J™±¶×2~?¦”Ù©Í GJõòÉ>Òù Öó $ ‹³5;¢¤ fºÍ$Ø|dlT§®B¥ûPÝ[^Zï³6«£ëÝÑuQsd„ ñX½¾!êÆäÊâëµÛ”nþeî³Îš|¨? ¢B ¿üÉ ~vÍ^®ÆpÞ±ìTU˜¦oj¦Q@P¿\Dw/K”‰ckÎP÷l cÍ|gøxön–ÈéK¿Îl‚¢èÚ´ÕF'£”ÒS>On½\¿¦›zþ¾šžÅ+ÝsHA[ùkjÚÛbjJø]¤jü¯ïá€ÞfÎb7©@}rf´ðX¼=Æ‹i2ù©ÑæÀ|ðèA ‹n¯±|¤¸ֈ˃œY|øg­´p…ä†-½z!unÂoƦְ¢q@‘ל{›Ñ@!(ë¼y«`TaÅÀp•cÑ×b$ᯃSgäH¼wŽ ;Eãöú)Ãqš.·6ó[ÄÀºdFª§=—‡TÌ,¥˜Â%À›Z†Úáç·Åþ{<žŒö$oË0Ø­?ã×RÒ‰ðJÞû±Ÿ{‘¬«ñM»ƒ088¨ÂÁ8Xš÷o ñ8Ü×JûÂxØÁÔ¡_jZgG¯ö« ›9½8^+~ƒ@€ƒ†Ä—óGŠzyåÆ1·ìË‹);O¾§¿ílóDéÞ¡wV^®«Ë‰Ùâa}qKR$¿úÈw—´Be^ÔJöp“ÂR#v„½ä¸#Ó7],ÁwÍð(¨-EgEÄ&„Nýé’B¿ÿ¤Þ¨MË 8,Þ®Žd»xaä+¸‰¨·”ÙŽ§.ÕoÕßϺ[ÛVèXáKs°"g™® :îÍ¸ÔÆxÜYä² :¿«©â±.H4 `2‰¶üÝ‘IªÉ¨pš‘Ë <Û÷$¼ËcÖåÂóáU'_T޵GQv™zŸÇºÎí‘äEãÂŽm]bË$ Íè®Ííu¶¹ù«5ߌ׊-Å­¾I];r¯§Ž¸òd¦]lã.PÝè_¡Û=—ÑXúæU3faL?_aÄèw•~˜³PÈ;KܼQS¡ãð Üõ2?IÝšݸ9„F½oHíûL'o0šB±–Ž-0j;8,Иé)ˆK$µ1æî5Y;&Ci‹L¶~í @ºl%­–n¦æ\Oìt7ïscǾ±`_jý¯õa @‚—Pñ¨R,“']¬L–†vxïø­iuléz䫎Íß㤅œþi”ËÄøª'¾›ƒ`_¾êÑGSÃȸ¢:†åäñN´N4ÝÁe €TQ[µêoò®Yö׿TYÉ‹þœßˆÐƒSðºED2c3ºhx„óP!,ŸvÈJv—Ž]×ñ´Ãð÷¾³¾—(2XìØŠŠ­;ø'F„nI[È<–úœŽÙÞŽÂ¥?±PÓ–¢™G&Š;É÷h×È \=ñç—È( (ëF˾0•«Ç/S¶0­€’¿Ñ-ºÝ«[ÝÑ¡¤`˃ü1qôsH“W:® ªQzì /ÌŸ^hÍt6¾ ë2vEUù)tIÍ/Åðf©\US’qR1$Õg"ÕƒI½qýýË©©šáòÍÜî‘é´|úÛÙ-ÁE@m”î6Ù+E\ž}‚|»tw¿›Õšƒnåt^…·{óüü%ÉÜ$z*tõQòéÃ~)þ˜g$"C<áÕè„Q̧ζ ðµßBHÈ- z^JúvŠÝ Ü“9ˆ7Cð}C9W?¶J9ÿ± †õý£wç’œt¶¢§"Q®¾Z¼VÞÙÏsW”rLA1ö‹ƒ¿ëGÙg83ÚÖ&."—®Òp¬{È} ³´õyú¿;Ð’A œíÍ·H0ÇàøÎÓ$ÉïS¦ôâ¼öHíãÇ·nò:ùò@Ï “ïGª/»Â±¬¯TðRû‘ÿô¬Ÿ1QPN”Pžàd0ˆ-gànBÇJÆggx†† 6ërýâĈÐ5•`Ág$9w,œDí±= ÏÞáþi›×Åö¡-ióî{ަºÕƨX«UÙÑMµ‹Á—½7`ÆF2|VŸ”§£ÝÉ<¨Ñ ‰ÈœÔÒþ»Óª5PwÏÛ ñnÇ„¨´Kº¢ŸšPŠï)/6[‘aeJ‚ø¹œê)íQ‰C —ƒÖ›9óS¦~¢B BzB BBÉ!$a÷ŽÆÎÒ‘†,ä5±:’â“dfw®2ëp÷IvÓ“ßÞ!Ï »€²z sàÿ Ô"$ ÔðËígÒ~Íptäìb–aí¬ ( ÐÜ"cŒÙ—ê¹ß³2µþŠ˜¾@šܠɰÖ{p¸ïz¤öÖP—Û|d†)*‰üoÇSô9²0a™ø"Ÿ•åÅ,a¦Óä v¶yTX‘(‹L0ÿd±P%¬n»E—1ٕɟœ—EÄý&7wOÛ„5Bƒçzük¸‚¬@jƒ¢mZ|ºG½˜¸×´Nÿž}Ç{R²/xÈÉr=ÆÞ…óqóää3¾ndU¾¿íãüLgoÉ5‰*›‰´N¿Fn¯Û yFþ»ëbS]ìV¿ÉɤœE6Ô°®ØÀk^6bñ:´t›Ë·ÕG8¤éZÏM)ùYO½a—bÄvi_Óm ûö'·ì™uÄãè÷;Bk…ßI¯ú/x«s¥ÄTEx vËÒµ……êø2!ÒIjõ쫜Èí°a"µˆ›½3 —!”‘?Ty²–÷c'Å|ûöb^,eß¼-žÿžŠæšþôÙ 8UïTæÂÿŽüϾäa>C{ãø3`ø]œ‘jù}wp¶”Ve7O&"§>Ì]Ÿ Þ¦…jÈæŠA±£ÕEùaÅBÞä·õ81½Q<·©¦óƉC`hnZŠ©Ìõï|oyħ6å‚¥®¦ÌÛÓ³ÅáhR,ap|õ1&[`"ŸçœÊ€aÄ 0øIŠà àÀÎÁD¹—æß»ã¥$ÀØÄÝâRxÃU;‹Ä‘ë`ØûZ "NšÈž×t°Lx¡ø¿§2ÀŒ¢Ùÿ†ë–å’k·17à騞Ï:Œ¾äfQ»SûÞ#î"è(ŒŹÐîcw®íGåÄyXë‚wuÇ[wÆî±w}“l­<à‰"Ò0HAÚþ~Xɾù™ð ’í†LZó êÑ1zD™»ù€uĵuù%z1Ósâ”0€sÐØBªž¬ @‹É•1]™Û}šÖ[ýñWFÎ/X¾Ñ4dQu3& 7î§ñ}’eìTc í{P¾7”rzä„€·)ã»Q¡¹µ0©K™|Ö®gîvÄY)ÉýÎÖxÜ1l¼´„‚{å›ï1«ƒím[y¯:S.>À´bö dJ×=Âc.f‰s;ŽÎÌ:«Ïç}Tœ=G¹ 6ÚSûÒ±v—:Úa"|P·Þ#+›í4ˆæÖ¯jbÑ”èÎK›ùªç—mwÌ4D¤ ‚bB D„¶, 7¶öõ[¢Mü÷Jeæ aÝÒšX6i“y)Ï~9\ãúºŒ­r¢ÞPaf~·½"È` ôS/hÿ«jy"]}¹'s‰¥ 7ÃŒø)Α}ìžn† flâ±WÑC»Æ”² j‡‹ðcû…œ¼?80 öäõ´c®e‡ô—‘unDƒ:ÉDHFÃ1[„Ô“‘;è'»Î¯i½®Bˆ4§§WAi©â}çV^äbßã/†ÿ­p8ÊdÏ “X¦¬þÚž£, i"Ð÷¸’¸ƒvùAÁöL*kaµ„gE‘›¾ÙD+61´i¤4³õŠ+èÛßL£uÄù‘Ûí4¯9£LI}¬’æfÙ'ZñT¦üE°Ÿj%‚ÕcH@­¶æË‡ýŒÍT6š :zpfÖ‚·$ç¼q‰d§È Ý9݇» IÆh¨TâÆ.;¸¶œ’Õd>óÖpËäU¡õ >r`8⾨Þc÷MÏhYf/†®úþú-’hBɲáŽ2÷Ñ’É]Ötf,ê¿Ù%ú†G¶µˆŽk‘Ýÿ¼µñ©|Á׋jCƨNÿ€Ãîšw¦¸JûÅWí¢/£¥HµÄšƒcq8‰ÎðfìHüM!(!‰Ã´f%ôÓ‘&}ƒnÐc˜Œg×ôê:î›O‹@ªË:Nžk›p£«6~KaÂ`pã¶reĦ í—ªë³fd|™[V¯ƒ|HAÍH@Ä“½µ¤„:D/Î}3ë1¦æëìO¤ûÀÄThà…Òäzš?Öï‘âmGÜÎ,'ÃÚ ­im­“ÅfV²ß™q¸ä~’¯‹?ºçíØ4Yx&H¤át˜ŠWË¡€ ‚D1¸“R©YƒþCbà@ˆUrY¼Je8°¾³äÆ·£l®oÂø`ý¤Þ^¿m\½6ƒ@ÊÒUºže®ãµàG2ÙoBÜôî’‚ÉW¥~%>ΩÄyýü¾‰ðÔ3¾°¤L©Éf£`+Å—¶]„0¤±ƒ¿”+X¢§{ûóþèv(ä SÊAïÛFSÌoJxµÑnª8ËÜ¥£_¹áÚ¤†s}ëÍ&–ñ¦oúß1ó÷ÇÇš H³Ô’yÒuh}hgM£㪚¼öÿ¶ŽM)Ũy½-!8_RG‘=`/›ùWìïOs'ý¥ ÿsé%PÄz7fÒP[WÜ@6sMÉD½hÚÝwXûËÊ»&¡Ê -o¹—SŽUȱè²cÊc•dKEñ PM:H—þƒýÜØ$äzÇÙ7-ÛàÇ+\Iú”œúï_Ìóq®¼x¥‹s™ìŽeŒK4K&ßg8-‰ ŒÄ¶Wn/ËÒ·ú.úÏ6Ü|á–‹;Q«'[qüb( ( ²B ²B!5ãËxñ¸¤ühpyEÃXÝÙz=¾ÇŽ—ŒÛmàÁ“–$!迹­Ô4Ù`ß/“ÐaÄ2„0¸7ûÞ[¤.ÚY©!!’ó^[†wCŽ“)c'Å–Äní²á(f·’\mÃ*ý1éLˆþ´R«Ê´ïìTÆowáZ¿OݺJp­µ)“y¦IòÁߡɨ÷™ðaIeå‡CH×–zÖ«QÊ7) ïܲ|²×Ä„0½ w^êïÓa àŠA³Œ|ü:à|)5íØZíÂ%8€’žE™xÚæx}˜S‰Ηs–´œqˆû$ Õßèß]tÓAkRÎ÷wàoÜaÑëý=PÛç2lötš(•F-sãÉ·~Íì»ÎH~›«~§‡L@ ‘Ü­þ ÅÁ³ýêqÜìZÎåìÇ ÿ˜0÷ù¤º`‚Á;êǯï}'Dˆ)Ûßñt^:¿íßû¯ÆfFê.Z÷Ö^”À¿ª’ƒV_žôhƒ#…¬0uPëhñ÷+áö=“*¢n­z1‰(Çø1#™_óGÊ/Â\ÍÅ+%‘­÷P…35÷4p5Ü„ÓÐj„_øa´3½lzXLŒÒª-0ƒ”è?ûÌ5ýäþ½æ})ê—\€ËyvZãäÉìàß·âe„n"|kÝnÁjEÛÌÌ“9¦µÉ#‘W, /òà}æLï+~Û»¦wÄ ë1dEq5øÈMQaá¬tW3¥Çy2ÃÁõ÷W¾¡¦Šú÷鶈äÁp­óK¨¼gø”ô•äNÏúyñ[½{!àÜ.TnÒÓÕ{ öÚÆXGjåTgaX§å× ÛÛ³¢ˆ>i(›.ºÂ½þ$úÔ²d0oˆ@€ÀØ ){6M|ú-‡aÒ è°7Ž:IÛO® ÇÄãÄa˜}ðÓæ¦ˆ~l ÉÁq¶´÷<,«Ûa·[ Ø´2ž‚¹òhHAZH@Ä—‰êí–v¶ôl2­ÿ)l»j¹•nöúªæžH@Õ>U­MÆâÛõcÜU´]*l±“§ÅÚ×Òg‹¢+U¬ŽtÛM““Ã&Ì>ͨûýGÞ?A OÁ¸pa|b°Õ{çc/† ½~þ¥ù¾Ñópø±Çà E;n&º?É~q9ØEBÛ<°Ñ縬ó¬”å®6¶*‰’qÉiNÿºüª†w—Ähë[\—§ðôB$ g®É†lrÕÈ“QD>f">ï=´­f× µgŒ¯-"×K=dÖ¶©ùVåX¼Ò÷îâ).•á%ŸH@Ä„›IGÚ7bÉw•èiðkn³G¤Ì}›TånºL† aýJÞš°T•§WÊh!ñB±Ñ!Q0Û ¨Is¼ó 8AéD‹ìª:¡U.«Re¨`ïSä"ÕP&¯¥_ì¶^R@‰²"I[¨½a9è@xܵO(°H,l(žL‘Øßmæs[OÆÍY!Ç &Ài¾¯Iqž¿&ùLx§žŽX½Ûõ‘a ÎU·þp•¸ÀÚS`ïÂ&°ïI”’‚–æX–‘–f×rN#õOä–€ÙcUÉÀ?«½.íÇΔ×zGO_Ûx](Ößîµyà\îçÁ—Ÿq±“ûº|:@ƒâˆ/‹óŒÌQ™¦ý]þÝmYù³Uû^Þ›š›MöV]ƒrën0È}ãö‰~º9óŸß2ÐtŽ€Î÷{“”rMu¸ÎW£`4]9¥Ýwþy4ŽN0xn I±áïÊ s? erF1Pùí¯æ‚‚@5…_°mÄ }·«üFÇ«—ÞUì^-—?Õ?ÁñROüÒ¹¹Òz’i±1ïka-Ÿnxah™y7ð¶Þ9Rtí§wÅäm•Ÿ‹ _PÀ4=Žóâ÷æ(“ G¢ÕP”PÇ*q΢o=ˆ©”šª,õüMže6¡1¡Qðˆ~ð`–:¸‰Í”ãÎ’ŽobòkŸÔ€A èÅRð@oÄaå6^1!3s”¿õÎóx¾Àb¡òëMtYÏÏœvPG‹ZKsšÕdM ­pöû;rámVŸ ‘è:»M™!UŽ'Ná'$½!q;5³6" Å·Ÿ]›ÏQû¶½Âô9ë ì3™Šÿ©‘/»l§ïA¤N|5º3ÝÝuxç« tªª<±³#qC,:äÙĻ۫žAÏV‡ð–7FR0R[âVc—–dZdÔ÷Z9/cÍo[a¬÷¤ÛyLá«3±»}K„-·U]chE}޳#ˆƒd+ªY äý'W!qC¸DK)œÅ• …☑‚Íe'©º»\aÚÇ3`+²wgïžÜÙY±.'?óƒÕc|ʃ¢†ÿØ8+H€À-q}†q¡‡ÿzÜUK‘ °Ž¨½—¹rD›T ü`?Îê›fþöPIœõCù“½ñÅÏPÊD ºbñL %Ûh«udc `ÁíÓlÑøŽ–º@ï3c°çë6ãŠißY¨æò¬³f4¿xvî”f‹ÍÅ!½!O0{ûë´xÜ_¶M¬_Í+ñe®NsŽ×ỗsã¿kÆÎ‹:ÏÍi^Ü6gg¬ªñïC† ÿ] Þx†¾”·/mÊC–СÖqîlg<ô=\Ï?o¬¾@PÈ=PÎåíŒRÂdw.[fûòeÔêKñhĬ)™Wåˆ\ûSo›E½ùpÜÖ•ƒV‚K-¢F°Y£_±‹”à¿$šo?0ÃàÓãÎmZ† 6Gšöo BŒàBÖÝëï*ó×àš®ÿ8áõ˜9̦ ê•j7ýçDv%8.­Há5 ƒònå†tÓ¶>㬗ÂÿS­k!9ôŠÌ†‹u'êêËöºe¶ï^êê¼Ù\ìË«Kë§ì0ïí!ù"¦2'qÊ‚4NO)|@Ò,øœ=<‚qD tÙÆpåäñ A7€¼òª„ÅßjmÚ!x (Ä{âL˜ß:½vµòRšø`¼‚_ Þc‹C&‚°à±Ké+Ö‘H„ýHÞ0f}è  ‡á†×µ%a¡×›æ-~Œäu#è¶”ÙÞ¤2‹€¸”A,tÝæÆ©¾1P1¯éKÃzmhXõ‰KnþŠó5îþ¦ß^s'ظ6Áäµ~–ûLs^úƒjÿ~ñïnC³|Ȉ˜a!"B$ Í$ `$ qlÕ\ùwеmשh„ckõmqqóÝFÞj뇋陘[í ¥Ï¿+61dƒ¥™é Ht¨‹a€¶±@þôË<&Z¨fp¥W+¢\P9q‹¿&·¢,±+²ØÿÖ:l¡À¡âÍp yXˆf_1½.jÄÊd=ífVO^ëð‚å<ëW²ÜHå á#פç}ܰVüèëóÜNc|ëCÀjsD*|NfÓ¾7L%Ñ|h;Wêr'Iò(%ê%©5løìXǹ”Ü»¤N§ùvXûÛö®eÒkfä¿ìךØÖÿ:üò1–Üc«Õ¡©ä‹M˜¡Ø;2»Ñjqhð_ ©ßL³™ŸŸfß3ïk©j­Æ»Îl•×9©$„°HA˜oמ4,v4tßÈD*Fà‰÷›á'§Ëõ yÏWë¤<Ín²Ñ_“AŒ‚x®á–¡ö!âf–â§Ne2Õ»v5ÄWuîÌÄØ®]ÌFâJBý%«· tRBõte­¿{½qÇf Â*\TY}6ˆÇª‘ìUü‹Y@]èN4b *£oË|¯³Þ DàT°Ù™ã7}=hb!Ú7ÿÉir¸Æ¢ÁU¼°¹¼–WÆN‰$á°«„¿Ä\¥sƒdÔÖ°5g8çq¬ ¼ÛJÌó Hƒè‰0Ôù·ö²o)‹ÔT²,J‹®Ú §µRõƒ£ÒXÜqÖ?XM=Öýݧ}]ükeP¬A\ zeYŠij·70P§ìÛºù!ßD—«i©û[ö–O¹QYéþÚõ2¢Ã/&„hó£Ä ¦zŒZŠüY†ûrYÂM#g²˜”cÔËü\ftå‚­“ƒÁ7¨\ÜL!„PÍL«ÅXaŠæ§àLJbï'½ðìÆ ôá`œÒ–2ý]sÛC»ûí—JÓÆÅ$é-þñ×+ÑBì_oˆ©u«?m˜a!µ‡n/I²A$£œdCïv]%PHAQHAhH@Ù!‚BS¢\”W‹2á㈣@Š–¨0Éìg2åâÄõª÷ryf0´¸Á† 4X=zéj¼Àº_°›Ô/ú©ÙhÚº¸Ö#ÝÅ¿E^H„c Ôu’–²©‘3É¡’d›Ðþ³>ÿ˨ÿk™²ÌµàdË\é+¿2ƒõôuu>¨ ÎFÊ$ šþÖîªôàºdFVtAó•ÎâKè^QV K= ´¾05^4‰f#ÛÈEŒ1ƒÞoL‡~²<¿VñºkzÎVFÕÐð&¤O Êoÿã• ( p¯ªFЉH“6IJœ…™Ÿô“ä ÆL-çœ RX¾¹Ùv ׆ø˜ìh÷‚, ?Á1¤ —†_¤3f}bk'‘¬ÈÆë¿3‚Y»Ìn'.³Þ¡ $ç:ÈÃÐÓd€„l[‡gŸœ:p?ë±5CÏ †þå½9²„™Õ7<ÛB„@, ehUͦÑwÄ`Gw§( $Ÿ±¢M±h1‡­”ilWÏÑ­´Œ:"žø ä­YâÃ\X :Y!èî†Õ“n/– M|( (tqšf"ùB ¥ZÅ)ûƒì'à /à£d,å>³µš…)îbýêv5ì2Ê<=+ªGA*þò !rÈ2İ£\ÄV6L)M½4BÝú|ÞCLó7m*´ °™V*dW©§†©énã¡7Æ|Ü~ójÄe=ýСâäcâùîHkkOž2Ù¾ù$ p@³ž$ÕÁìDy­ÕŒ/ÌeÿíîKŸ`x~œš ¶aÉpðËMúH¨uÉæG¿0™/Eém<Û~|AÔÆ0ëè#I g ‚û¥j$ 4ˆ`k†Z“s†`D¢²§ËÜÔQÂ|£hç€Ë=îÍPÙS­ .É$ Îø äX`™ŽÄia›Íó¶Ž~sJÏ F tMq TY"³&Z×¾Öé‘ÞˆK'·®ÕûZÕ|MhÝwMxØÆÞU™$ô2•Eb·Ž-Í9f Ð žZ¬—M÷öÜÇg½Åƒ„Ú÷R¿Ýë›7çqÑÕÊÆà;ÉÓO¾{sÅ0bÛn‰ xØ”¿ÂgA§™nøEI ±¯~¥bõ†-jq»qlE¼òÁxÝLÇõzÑg7RéãCH$íf™6ßÉ%×ÍEuÕ¥m.\QÂò²½Xáæ]œ[õö«-ÀÛä$ ki<â~;xÊ­Gs3>É<ñÙ~dÿ³¸û7Þ³}H@8-þ/ÀÊ;ô ªH_W{¯[‚;zQ3‰…k¡ÒÙ83t}ÊèNn\KÑ¿oÜð°¶ž?^hAâ vÃ,^*¤ùŠè}ǼóÑ|ìÉ"Ë à«YòäÙ¡8ÃH Ûkÿ ñ{h9Î1z@EYe…€¥3ù=@ËfMºš x\¸è¾Ùh`äüÏûØÚL4Äbèõ‹p¤þ^Ô™eI²¨þîòÂDBܺŒÚqhfœAåt5ióOT€ùs8UžìÈ‚éäk<ͦ+ Ó¦²wê‰uŸ7¿¤ ठš¡ ¨ç<¸Ç7 î‘LþÏôTœ ®ÆMêÛªáåµQÁwnv™à¨ð®÷¬NK)[“‰ÂMÙsdñE\$üoAyNt×_Õ! –‘1®å Ù|8‹º —ÜÄ;Õ±[/³‚•Ÿ‰ð±Cm‹òÈ—§à9’_IÓ'ÿÏ­Ç7‰…d¹ tI=œØ™êížOݬîG»£-ŸWmÁ(1f‘òÊÆ‚ëãS/þ/.xEÍ—ßHD;ºÏƒç*ö«_=½:Fê%š™UUŽçð¾2vwü¨/³ ‰Ü_•]p^±pk•yw ×\p·)߷͹^TP (ùøDì7ãG z¤.ˆ#c¿,¡CDÅV€­x2@sÏê¡¡'V$x”ÄBo¢hÈKQLÔé{4õ޾—HçÆOãÖc‹wÝiyï8åe= Å_•mꘀÈ@Àæµ@ˆK´ó<ÈåJ[Ó$Æý$ QÂwflTƒõóAÉûT`;OOÝÔÅÿ#Ô;vÆÓ%y ×¸û]=+wéCûQ ^}Š_¡Šì8DñEÎ(z…¬Ǥq– LY3u$wé‡&úLÊ]ù&±XúÉ--r_rd•* bÛs&L Û8O(‚-°jôÃé‹+êÿ­ Gô&ÚäÑÿaÚœüé•{æªÞpïõ”jNo>ºk\jãWÔ„¶®0“{Lýtõ} õE¦ìõññ ±}s·§ ÿÌoy»ClnZøôÀT¿ÍÂ'/_ÒÓeãÍÝA%yòIÕðü.é|®_7cû©%H•Š€‚@€N)PÚZKÕý0‰ˆ8XCk _tÑÁ8š1½ì®6UÝ„e>Q·#mbÙÚÝþ”lõ!!A ¥²#c–¸…³sz†t£´dà÷#\adÆ =v?½ýÚ»Ùn ÔvTÞ!€-À4÷cXêu >¢¾A¶œP‚@üIÝë¹Õ!êˆHts}µç‰–ƒgk½;ysû;½œ]stº§E¦Š mdô×e†÷ð3ÄÄ$áqhÚÝå (9]¹ëÍ÷ÅO .ã^?ÔvýÓéxhK[4mË¿0 Éè`­«îû Úþ;¶+EÕP=åM[®±6ÜjÜ.’èÉfÐZ‘¸ˆ®¿þaIŒßÿ@²ÅþmÈ9¡AÀ1ùr“øÔRnɘ%\?Ë]ÅGÚõG3ª¨‡?q]neæ{ ¸)Êöc'Ý2ÃÉâ‹ën¶²C‚½¿à2>hûtÆ#¤Þ!ÍZe‰Õ¼"¼úÌÑ6J@üþ!yÎ ËlVW…bs°°d)8×§@µíš3}u£M]Úô¶ÜÞsÁ‹gާl£w[U\¿3c`åJoœ6PÒXâ4måèõ8ZO²¬ðë¼·b n®}Ì5¹ÏÔŸ)QÏ>³UÒ­òœ2Á‹„êçóÈXÕ'z8µ²¨Ò±³ä”ÄÁb¨¡@0ÞXê*™1ÈÐÏîÖÍëÉ2'1MOimL(šÁúmû%`ÊaCØ]`_b<½õ 3"P0xÛªŸ.šå/ ÆÏ¹@s¢? 0ûˆ¦ÅŒWCêoY¤W؊Έ~ ±ÝuÇD`óô®¦ÅCåŸ>—Ì4á±¹ëZ{ym»^›Éö\“ÆFÅšwÕHÎnéñcœ+Ö<ÏØ¾>5Á2^7ÁŠ1  ’´ÃI)õ¢äü­•Kz`¡„Õ ïk›'¿_ñ„`Í:¦rD_“”:l ‹´Æ# ÀÆÑSìpØ¥:ÿ¯qlD "u/“~FæŠ-6æçT`¹O/µ¾L¨$ xèÑZËáÚ5ìÜYé?¿³Ëê°ñ¤ùl¨0w“iÚÚ)‰d„ ®ØÖÇíQûèôÑî]?fI¶9·æû¶ªuÉÓ›Mƒ‰ÐRåØò2jÊs%°DÈpP‰]ÂØ‡ŸQðÁyäkZÿ°qrMbi¶KÑÇËïï–×Ê?Cß̯‰·o2]÷0M [,j—Þ›ìªû‹ñV†[ÄáÑï3ö]–qGÛ5濜hÆ5¦úƒÏJÂA8B;yÔS½î„¹ÙµjŠÅ?‘#fðÿpÁEh‡·Ê¡&…îuӾлöí;Ý·C³ršéʘþ®‰ñ²Z.æÜ°P6<'þ›ŒäŒ3œá¹kbH|Ÿ 14i?i á¨¤cÌHœ›f ‘ÆÉ³*ëÎâ1¼o.¸{î#µ0ºàºÿ}¨öÞ—¼½•þ*=!ñ óÛôÕõú§xìüߪù™ç›Ô÷öüQ·å5»7׿é€Q@P¾K¬ƒ™»/Çõ;Ô/ °(¥¤ÿ&Vkž95Æ+´*mËÇìˆ Ê!ä+çiJ±.âëxÎen]:_BH"uƒÕ ¥æÊ¡íتIh@¢C(Þa¢±ÖåZ¹®&Òrž,•·¬ë÷°/„ ãǵùã§Ôï×¥Ó±¤ vŠqdEa(-øSSzíøgøœ7„Ö 7ï^|^G>Íêù¡Eâjßw—Ìó‹¡â0ŠÜ˦}}Jjéïÿž™KÐa"]¦°}WSý‹Á:ÕyßÓ¦ïRVÒ?½¹0hŒƒ«Åy«rG[›ð+øpÿ€ÇÍ‘"Æj˜=Õ-& Êç6h¾ôˇ‘g²Eæ'ëÕò˜UšÝȬ-ÊlC+~r„q¯¯¯ŒbÛ>BF} ~)wå˜É-G^Žýþõn)WÐi¨ƒŠ@Ó‡Eh7`|@x8< )˜¾U.n5Ób29S{„ûÖ)6ÏC÷× c1§©xV®ZŠ|ŽÏ#n™,š,*töó³]¸À/Åðø¼OåŒ.Ÿqìàaò<šq¾oãiÎ+—®!¯?ëïÁåRa›¥¥Îô}PÛ±˜N2Mi1/»ÖsºÈm™ WWµÐ¨=‡ì, âðQ©-WÒ-m›•; D¬÷§fJYNäž3­J`ÐÊ™–ŸfòȪž&4R"vu-œÚÊ“Ò3ïš6~ÏÖ<9ÂA>í¥óx Þ\Poqã–ou'°QŸ‹M¹‰°¼'Ýeÿ<YÔîÍ/àž–Á¶FË}íâéåÆS¿âÓ#+ôôµž[ù ‡“Öü NÄ>QÕqð×ÌŒ3]Ò_‹æ ô&ÎI î*ûð=Wa€ ø¹ÇW>¼ß÷h쬜´Õ!…!]ªNKL톓ñT©o¥K/{'ÐkBgH}÷aÇ-s°îð-á³ûþm”)¹¥JAO·5r~Æ+·§rçD îÈ,‹Í‰Ÿ™ðöª¢S¿(–‚[¿²­Ru);‚€¾2©g‡Æ$sÒ1{‡³)i¯qÅeÇ3íÜâþ$¶O|4é½£,²l„±Øm©Ú]”TjÐ&ÒJªŒ¨d=ÜXL½ϕ̞ SBªT¾R|-)ʉ•Ùl¾‰9i€<"_‚ámp.:>”qn9‡ H¥m×F9S+‚«Y*ßüÕêöó¿_ËQÔeκ2Ç´øbÜjn4à7P°CØ9–öÛºßs¶‘CcÿâgScŠË „Ñ@‘Ø.”S]ÙØTüâÜB2%X-G‡ÌîØÔ÷†T‹ésíºÂ~®ÛÑã±Âs'n ,FTúm²ÑrîæyHyÿoÝ«ó>ãñ^…*|ž¬jºÆrsÿ~6iUÖ2KÄ€‚ ZÏE}¿ü­Ó®D}3y ºÜÏ|ZŒtž~YÆÒÄñB¡xR]ØÖ"û'¿f ´Ã¾¡"ù ÛnçÚ‘‡=Ö$X 2œ'¨lˆæp áÀì- ø«÷×F +4•Ä« «)N®-K A¾µa¡'»+a²·ý¹Ymß;úæß¦E…‚/ÍÓÀϨÂDµél“Dú½ë^^- ™º¦-Ú.ó¼e×Áôör7R•;âRÀzEÖí–Ôä{ÂíÞþÞ£ã!–…ÿ*™.w†™‡¶—y+ÆkÌu/mt*·kZÊ4”m-/-ˆÏÛ²È*C2†šªò»=N<[üŒFç¡á¨æÒQü¯W§Ø Ñmo9 ‰#ÌTúÂþû2º‚ôêßjEÒH¥=PóÅ[ᤆJÃv=4d¸ht5xA€ › >:ÇNÒJ‚h܉ñŸ×£Ê¯0j|ĤkP¬JCÚ‚gGòGWU‚|'§øqnôšŽŽ Â°ýçÞ¡Wþ%qÇIÇœd–\Ø © ½ç Q¬† £ öƒ€‡Ì+Ÿ5ž~^4Ô¬0~uünõpîê6z!†N #,àÚ |lù€p¹ C…‹•ℨ!jÝT´i1å-Õbd°c¯ì¦‹Ïd‡B…ÃT¹x2\‹,öÖ´û7µaÌÀÝ£eÜÍHRêÍÍàm0&ÒÎÎñ½ôè¤]Ù–”ֈ窌9×tpÛæÅ.ÓBê+¥ŠºÙiP&ë^ù]ƒXOý5{¡g˜wi¼òF!°ÎÛ"/RŠU-Ccc ³J“§„"]Õ´85[¿Æü9yaíøŠ‚†¢†7 £vêšw"§©¶Ì!c×Ö/=O}]÷kYÙÄî×*›èÐÊòØluorßɯ™Mz{Ð ³™Œ‹ ôå¤ä&зͧóâd›í6w:5ÓãqѤ ›èZA¤ bKÄ„Pó8l‹¸ó,[éþÿõ'‡¢—·Áǹx[ý¸…9ʮʷ“b·DŸ)Z:'r¯ê¨Ö 8¤Ê€Å<“;Ûée÷6–Ügà'A6+Â,ül9æ]Í©µ8ù…Ý(†Þ s€òP^ЬgèïQy¶24RÔä *”©užY#Ó{øÉ†P:£%"WYŠÐ¹A€ÖæDEéqv8QŸ+¶þo/ì™ë=DdíW¾/ZkPÆ}"Ò<$ bB %§«XÃÚ:“CâQ¤>ûörÓ¼ZyAf˜  ›`ó_ê`•r-þ7Ç‹³áf1s·Ê9l3»hסé£qíí=W0Í“P¯!Yq/žR-/{…fî·þÚ“†¢23˜“,+öö­NÿrÞH.!ý/’Õ‹ÒÎoV`h‹ŸééˆDE¢4b2ñ„Ì÷ÚÏñ¤‘}$Ùæ#¨žtu31xBœKد*; {ÇoŸñ]­¶¡x¼¼óYuu"ù·\\À™¦Õ€ßò°äò¾¿µÑ »‡„t„D„Ä„ „„* ª[Ws{µ6­ÛÅ þšpe"÷†½bÐìÝš×øÅ`*|4IMs²_–IÿìG”é¼z—~|‡f` ÞTåâcÑ`ܤõ9ÅNˆƒӨ‚¼Rz•A4ç%83uìh̵ɯ%®†õšØê”Ö¨ôÃ0­OóOL!í…ŸôÑ­•ñukó9°•ºfÚý»¬]¢ vL³;íŒ=æÕJŽj{“´r±E“Õ •×õŸd%®ùŒÊ­ˆÝõf[´c9âa4ÉDíKPGóã)&<ÿê7þeBŸt’°ú¶þRB BB4G3¹šyÔ9¦ú3x¸-®vïg’ìÚ÷ù¨¿?$q±?=‰&xv&³Nv¹ˆ‹ØOR™­Ž—@÷c­=z{ŽÚrT–sl/šé’­9Òbª$ê3/=œ‰ùX¼“…îERWzm|<‡×ÖAý„µúϦ֥8qîä…èÏd㊯àáYd¶Næ§Ô[y/ßr%ÅÉ¥Óñ`9ÉÍnuRá¢VÞOž|9€}lþo4û¬ƒ‰‡ž,’Æ/„tb˜ãÿs{áK[–mm_ít!Ûož>ëçƒÇµvî}ecr:;Ý {ú…åéZ¿®)’Q`lP_öoLÝS¶føüèÕXY| ã|,h™HçÞZÛ–'±W„t ¦‘ùQcZŸ*‰ã ˜¹×°…x’%L¶ïåP w«3rê\>PDš.Ž$¸ jèj ×Â+§|I¾&LN´|YÖeqž×/Ük.Çž‹ÒéåÉaxšjí_°]t›y>÷iv»«­«ÐüwÁA1Qúw/|¿Ö¢œ7µ¯í̾YÓC‘®g¸&Ôï†El(÷Kjc.YZ]ÿozèc0‚@‚=“†ípŸÇ¿4G6ÚË}f–ÑÕkÉ;\'NÆìUÒÏÞî’#o‘R,ƤaüVÅȶZ$®Ãùý›6¹µÔW{GÁ¦¼—œ7aeúKP§ÕtlÕŠ Ï.*ýn‰ d b~³7±_»ÖXò¾šw9•©nn<Ñ Û»»ü¨”É´Þ›Tÿ³Ü Iû¾Óq£ã÷=Þ&–•U÷K)CñÕ}'¯;bA>‡±;þèË3ZhÆ5–^9°œñÑ~)3‡K׬;NÍ·šs"ûQÇÇB)µÇ¶6‰èœ±B㬚¬=bØo”u7.ú”]¦"ðÓïš8ŒÎß±-+g=eÿ±?þ0F ;¥n¹¡kÕk;?ÔW«Ï÷àWe=7EMqC¯!ÿ¼û|=îÿì³·ù¾ôcæÏY»nþ_`ƒ² 3ܪ7›¶®ZöoõîÝúaă(¼G:A ɉ¢œš…îŸW]çúT]ú¼BË”‰yû½gh{ QþïØõH¤‹-$…ÈÔðÉ-<ÛÇNÜA6¯B-†‰ÛçñÁôãÔA‹ {=ê‹¢­ð=®uâ#|Ê/_?± yþ™|¥ø÷¸SÒutïo½åhY–µ÷ž/­LôK2çs¡8¾ŽËï+=¢†“ý&vñ&’Ñåuñç±ïN¶ž}CÍK¢Åð~ÿÝm˾ã9í˜ü½‚B:B(í(þ6“„â)Vû*£we ¤wAë¹³ã{~nï6$5>Þ7úoä? 1ñSôÑôÊlƒA°õî!¨5MцËÞDrÙWµÓ´P˘$»ãyÒ·æe[¢q÷‘¾&mVÀ°lƒa@›mõ«0)4ÔC3ze[Ü×Óiö,iïžÊÉvÛ-º³Ÿªµõ’È;9âJK¹y‡JE7§ƒØë—Ïq2uˆ#ƒÎ…ëéa 8µi‡üo ävܳ¹ëœûOÇuep;%±öÙNun¸î6&“ßÏå5U¨8}$/—¡ô³×hHA‚HAUHAãH@ØV9Õ ¢7^ž{£.µN÷™w·oªvºÏiëˆùäÇó`Þ~üÏ÷Ë•À@`h'Œ‡†¹ÆÁüŸ{nʦ™Lˆ© €–˜O2\¦í ‡‚IR/Z_‰®hÌš&æ|I‘û„«ng”kèI,f:a„œ¤ÐGŠ„ÍÜÛÔ|¦ª-ýjüÿôôI)öR‡>ÀÀ鈢 €Eйš×„†Îx©Žd×sŸŸ²C¡ÞÛ¢-U´ÞÁ ¦|{ª1×ö1i}%#0Ã/ª© &çÚ1õÊ¡·Åx#¸þÅì–ԇ¥FyÓM6¨xЂ@EA3T–,c+”·½ØÌÅO“£íGè°øº+çNw¸ûC(-t²aŸÆŒ6à‹WÌr²ìÒç¬0Æ'ÂF“|0ò9ãÏW¢a®÷)ñùDÐý7‡|T[ÿ6dsñµE¯:ÔˆA{“òÕ#^‹Q™äÝ_¹U<w}\Ô”±° Ò/š +[ÜÀV ½Ë?eâRºL º·Rh{y|Š-¿ëöBE­øDRh†Êì-H„”ζh'fçnkrÓl(G¤¥ÉA#YÕþGÕ-’̶Õ]Ä7_á9—ëXÃ{Ç›hf´ígø²ùÔÎTû4©†«Åvõ®ë>:¯¤Îlœ"ɤ‚øŒ÷‡\¤1â߭k¤wôšÔíSYâ)Õã ¼\Éè¨hNÅDè±ý-Ù;£àû™ì `äOJkCS³óW$œm)Ÿ]'£â+VÒ]¦ ½ªÂŸÄôq~³Ýþ¤Äð~ºwAx»Ý]h—ÿëô¦Fí·lo¡ÄÙ@¤ ŒH@á!HFéNù°ª¿*xKÅìK Ê]© G$i§Gö³šgn;¡Wr+—4¯Hñ£!ÙsUó¡m×½ZënÝ›æè/–'(³A ‹I“ûÁ™0!®W‹™‚¥7rR 9 ž·d= \|~,»=ê¢f wƒÿ(LÜìüä9Ò\yM òÚÐý¾åïy•¨ D2v—+L˜rÀ®Äf:ëÞI¹÷FÑ¥š4@¶žânWLÉÁfô2RÇ•ÈÓ×*ÄïÉÙìÝ W×H;¤ÛÓ(´Vˆw{¿ì×@«ˆ¿6ž‰Ì}3ùE à=Àç”/ÙÑ©»<ßÖÛB{꘩˜Ë~ó¯icn°/‘roÞL&óƒªväæ`+ÛOÞ-!™!‚B’BH³ÀËèàh}üW#˯Àù²3ìÞoò^÷Õ—î,ÛK! n³q÷¿Õ†—²›‚0±Ââ÷‡_ã —V•KDÀ‘hÓ$ÍUwÀö“•¥m÷ûÐL~µÍènrnp^Y@@¸÷{(Iéÿ(ª?;WX5±ßìmÂÜ·iRôH]7Ÿ¡)©ŸU9’§[R‰„ým_!Ì €±6ÁîÎÙéÑR5i~ŠÙLeÓ˜8nÍ|[…Ñ:e/¯F3ý d3}ËU³ç ¡Ìô>x¼‚¬„ˆ`‹ÿ?u€ o3$vÛ°Š%Þß»í>öŒ')ÉfF«j¸³—[vYŸsžžï—ÛòJÙù÷\ñÔS9…m–úì!€ |äá«"·Nỹ溢æŽ%_JôåYp᜽æþü$o™2ùfæ>máÕcn×/¹#þÔý¿j€¬t¶CìNìg§3ZÜÂÑI¬Ý´‹ö‹éi„^û­|ËnÃMV-ØÙ~æ‚„·!Sm&rjÍ5&™>>òWkðëS]ÿ&—j´ ŒÐ5^<ïŽWw…ƒÇH‰#"éɽý¼êC£Gù,¦Ü–Á-‰[<Ã$ªa¬¯¨èñy†«Ñ>uÐ`<\ä;±ëÔ‘@Á-Oåñ±ºë1QZžøžuѵZs ¨Z:.ؽe©['9j‹uì÷(|Úoò(øÅ#†çYÚ›4úZ2i¢uaÏ-?ϯs1ª’¯ˆ…õ²®r²•}[ÞUË>‰³d%úε¨öKü·rvìw¹ÝïÓ/;ÜŒçF‰<ÄÚ¾÷y$”"B$ ›Ô5µ;}>KÙ%›T]ŠÇj5 ¨wÅ€‚@JÞ…d‘2°¬® —´\|[)ÇÇM·â w=ë·Ÿìì”QÅ(-.¼—âZ1:$š`A —©Ð±hrê2Øçᨡ;6/gñÏó>#çe¨muÙžñ¾$¿ Dð™2lÜwÓiáùLùP¼K¶¸„ÙZÁU}¹ÑÖ»û’IØÇͤŽ"¨ øâþ7Ѝ¸ï¿Ü4 mNÿJ¯ÇQ.pRÈ\Ó})<ÖÁÎmà3âÚXÉ21Ö×nÿ»²BŠB *ñÜN&÷1>Ùf5W}Ý#WÌŸ>ïp–^¥1¾ætuªVÒ¸ƒ$H@ezkbÒk&Ñ xØΧHy4z(Å«)Ó‹tgð­^ù,ϦÒ¨!¹+SS1ßý6+–n(G¥™=¥ö1X9ÞöR1ëå¾ûÚºŽ¤T†TS…f?¦' kóöùÕ°•Ò„ØŽ‰¤Ë•OHQ9£×济ü뾿bé3#Ùèöc¯–î.q÷]NºR#)ÞÝ­—%éËkÞÄ„)€ܰH@Pìú]‹¿6 öuZîD L/o¡;-õª%æ¥ù€þFÕ.ÀN&ûV¸yx{”ªG‚6pèbð1˪s ¨ýÌFiì‡Ý|<š~/`àcv%—\çab‡¾<ðð=,©€ €©âãPÀKÙù¥6¬¨ Ø•¯_ä†ôðZk$1­£ ÞüŸÓ[û^{}ØoöØw˜œªºd?ÊI: û¬ŽÜÛT/âYôo©;VfËd}¤ïÇxœ(½Ò=õØä0–¦â\4Û+Ïa_º‡k,¨—SD¿Ü9Ì  ›nqV?NËl/C5ÿº·ª…Ø™ŸˆíüÊýÏ?­iv:½ØütÁk ªšj¢+ŒÉ¸ÚÁͷ¾›Xp‡–ñ‰=Qb[¿Ý”:®šïÑÞêžFàÛÞ õVŒæ)™¶ö©p ôòžŸ2p '÷š<ÜFý¶ýn9(æmý”«<­ùUäC›ú4ÕãYF}â£a­!µhNŠl5бýÈ|(.LÌ9Âc.ƒcéá7œŒ·oª8¢fËë9Ɖï|/).o–×kNU¹H`BöÑœìZy×ÍPš|ÙEw0Ž¥]‰ƒ.H‚YwqNšØËbö;Yã° YpØtÒÆ+:…ý¤ƒßO•Ç,ä]L,Žaò¤^„ŠÇ‡ ÑP±åÝÚä+Òåbpï»Åz•/Öî#U™ˆ¤ìàš^ýµcô wÊþ žQ,#c{X fâ}8¶­—[Gw â_)9Z >è$ ¿$ bBÁ‚Þn¶€{Ù‰¬Áä¦Í™‹uk¬*À»D÷Y‰Å41ˆóÁÁò€é;7y8Øo™·Î*¬í¸2œ(=·¦Üùk2J¶ìl ø¿ýÏm‡ë‘YZA§4³ç.÷rÀo…Ö0LêíÂû¡ýëóùä~C¼¦Ñ[¶ íÚÝc¾NðƒYÓë§Â¬=Ú‘}¤§\[#Œg¨_­DOñaßt_e™üZ£;ô!*m]£&Tú_¥ZõÿBÍystçÎbóéÑO7óÇþëÇjb8ÜΕӎ‚{«Ü¶„ûn]™ Ë1qÕ¸NÒRèϽ_u}¢ðŸ¢lfM&ïÝûz‡Pì+²Ï¥Å>v`¬,!Ù}š9\ÑòfÞÁ59Åœä{ñ ÷ˆ4¥‡^FK2¸ÚÁIUŽ‹¶ö×Ýó»ºÖ&¬¡úŒ c0.<¾bÅ1xWž»Ìk2²÷·Ar:îžW%ÙºbÅ2Ït¢˜Ë}þ^@›c+û,¦´½“b°Þ7IŸG‹¾¡=mÁ‰»¼¤5ïã!P<å±ÉZ:ðYpÜ.)€ €ƒÔ‚ˆ¡!õ‚B G᯷Ewü3™M„KÌ4 •›i “u/2Fç>vâeaXf²q©®=Å&O,º÷`©iL•x^æØ;Kî…MýÄ*šþH¦­Ñro(_]üvΖ¤Nó+â…}ÿ¬ ¨dvypô{ÜŒtV ’ÛÞ¦^¿¤»TGN(~Of}^"ñ«~ÖÆŸÞ€Ó hÎ:q~w¸q RW¥ù]ÜO%ýõë§ß 3ǪüÀ@š ݯC/;ÄJ0eÏj- )U:©Ð±¾)²û)SØ5OûIÏ&œµ‰Æb3«Š(á¡ùÕôcú`]WJ¾‡Ôàd§é %‘rڞƘRZlNy.oJè„)´;~Of€ƒÜ×3¤Šœõ[úë ö¿ajy(~ ’XŸJÏ‚œÏÜI#v¥#jó÷é¹¥† C‰wžÌ)¯×£´V˜õÖc³¤ãR¿e>j´s÷ŽjUúXE'ƾ=o~Dlúã„ÉÔÑ„i‡FôaÆl€D³þºßÒ•(ƈ,ÇdN‰zN²)PS4ƒ wP®{>ÊÂ.’KFšÕ9b¼ì’ú‘äe×—:ËêI¯ØhéÐþ^¡r/£'•W{^®…Ã_ß:Rûºá93ŸçØ·t¹¼žíg ð¤ лa±u;}£iSyšZjÐ5ˆÔ„–Þ{ÿ4Âë¡¢&õ<”—–é²~—pâ¢ë}‡í›’6T’LŠ2sÌK÷qÖÝÿÑłׯu™KË}ë% HÁýkxŒd¦…Ž¥dmÖÉW×ø›x‚ìƒ9^Öry<ëh…gøRq(Ç€ÇG6–0ëãIÄ̇‹ZþqX‹öe«*õEÔß&¨óòȱC§¯I5L­è¡áìÌTJw‘˜êýI™æà Ø£êaë­æ~À;ë{¹ú%{øÇ Ú/µSGu©Ë› GO`sãÒ¼7UCz>2"|ñ4×ê²Po²‰*ë&Þä…Ü®^{ q»âo×vÔv©KmRïüÈâ¬âBºB$ ¡ü#ß`·Ï}Š_Ó!uñBëð¿D¥åiÈaTê† >2J·y?̪!€˶ÎU\{Z0¢êaÍ'\5”DNc}v¸+F¼w6îb(¯ß„Gø}òüÏ®{Å«›Éw_y NMÆB[U58@–=ßÿÄ í­î@)¾¬èú¬‹ ¹ðœtN`ø;…iaŸ¾V£ñæfé©ùde©¸›ŸÍ1üGT:ÿ ~zB¸ËN—+8ËIãwƒÏ÷èüø Øž~œx´}/Æ‹F¾,‹(gº¹Eе¢²²VW]Õܱf—ýø–°9\?‹v×_Ćõ#N¸Òôƒô³ƒ3“N‹…¬¤ä±†4vß;ñÒógìtŒ“ûŠhÑ÷ö²aLJ¨v¬Ÿ½Š0ÏÑó8V;×ù,ø?ùŒÒÄïŠ6@8~z“2O;÷ñ$åp_ŒÏ6БåíÀ¢·ÐŸC–s˜¨©¦ÆwuS²çk•÷ÀˆO·=LL2uòštìŒùó³Úú{öa€ W_>žþÄÎ3BŠ÷{41>V%)‰ÕÙ£H8é/1­ƒJ2.¤Míæ*æhOô$™>#U³ÛÍåhÚˆFªÚ?Þ›ÿ{ÜV¼/rJ@зÒÊœu!ªuÇôÍÞÖ RÜß?d5‘ç2eÓοŽa/«Ò9òÂÞ.¢2×hv޽„¯–;RОFs„ü`àge*˜„ø“ü‰…©¼WÜà§–8©„àTILŸž{»Qòê;1Þy Þ¶û’쇂”½7òYÉ–´ê‘Üî‰}n4¦ÂÛ¸¾_ä--ŒÍ ™ƒ0Í2ÞL<ã?‹¼,>¬÷©fw‡t7ƒ¡šÂЖÆC—L‡ƒdz¢Å4´ÅæîŸÁ>ÂÎ\éPiÃ47jíZîLü„œ‡=àøwpÒþyJ¦™! pá´pþºFÿ‹–ésl\;—ï¹ï5Õ<­FÈèÚõ¼y¢"ÿ2Ù–HóQüå:ñ0\5—9œáÝGÏÛpàÈXÞXÉ/ìÑ|¤›´¯Kƒi7xÓý{.ûÒɯI@‚@’áC{UP¤¦áõFNÀñʼn^†zÔŸ?º"‘íì¾®åíëà$£Ñ˜»·©·µ?cðXnŠB­‹ºv§Ö©ÁH¿mKÇ7¸,Bççé×¾8Ž?‹÷zÀìçøÇ¾U+fÿá¡é¾ÿWJ›¾?\$ «¤ ùØx­¶Z–¥yÖÞeV1ÌAΉ¬á»Cõ«Ÿ„ô‰Ä*kÆè°‘ÛÅâÖ&áE×kÜ—ë°Çÿá ŽZÚÁ–‘VÉÚørn6þ$kxeuU¤c.ìLˆêÁýÊs2GëÖŽçö~‰B Å©jQØ€JÉ]šzû¸éü Åvš¼®×õÁ‘ yO‡€áÛ‘2C+LTÜKîªä¯ÂqYuýÄ„.Æ7¸ž~ù½­ö÷ÕéÜô+v _Y¶/¢§O±>FØ[Œ¬ $ Ý$ ŠHAÐH@ØHAÜØL^&Ü÷ÿ³üðb©YJnwð,T¬•ú²G>9 ô„".3*ìËÀäÁNªõ¶ÒöÃÐbECÜfÕDÐnÑœü•Oò‡/þöö!¤¼V­ê·£ì;"Ç$ǪµËh› åb{â°ôg¢bêVè–Ör euuÜ'óhA5RVešËkjÆ7 Bae"²Ñ“…»ziþÓ†í}Î"ÛÀ‹îáe£¼"˜ƒÓ )”ªdÏ?¤’±õž«/ã´·tÑl´CÜ®@…õŠ.ø47[B\Ø¢½æýçØÓ#}»l|[jŽjû §×x”ý$¤ÏªƒputÍCçµ(¼|u©½ž§QÝ…qóŹÌûÞ^Yž¥½ø?X3˜hx§Pwåæ-5ÜÒ|¬Ú›ïà¯÷9q‚ü¥À‘Sñä{6´œæÐšyÿ››þ©¯þ ò;üÞhÈF#ÜRëás¶œV%ve´?§Ÿ$ز¬·W®)‡˜²#¸cþ*É*t…ÝÛR]N$gçE.'p­]9p—I=ôàÊèþËbpÚ¸‚¨n“í8¿ „Nž§§”û'Ç7ïR×ȃÓÐxíB¤¥›X&€ו(Û]ÖƒÂB̈A éÀ²8˜ÁæèÆvgçã¶Èrï[r_áopÌEŸ„‹VÎg¢^Ç%Ô×5Åæñ7Ý7(™Çc›û1NQ“[§pI©Õ wo¨p½iSE)sÜoßìëí*9ϯIO¾êëzýí†ÅòÇgí,S3Ým.ý€ÀbçÚoÒá%$€0@D’vC²ÏÑ 2¥YËÖ•)·ЇÈõ¦‡Â¤åÚò¼ïE'+Ù…Ó›ÒyëûírØ®Ù|Ü2÷¾ûO„êH¢^¯ÅYõV&¨‹ŸÐËkg­e3prœá ÀèšIˆý ÊgäÙˈEÏøÄvT±?§2·GA l£«œ›*R»;&: ÊÜHWbâУV_‡z„"Ðhéw°¬j[t=WÅA¨( *G†9é^Þ2FÍæu!ÖÜÒB ž³ 5¨¼ë¬ïØŒ5–y•ð¶à:ËÇßOþ½“g[~î­ø— Ž¯å­á%]^‚b@”®¥´ì9Oé}Žö…ÛKóÊáùŽx½U˜†Ã›þ]WAu|«ðã^è>§„< Ź[8VËš3õî@æ–á>·ª¦ì‘!œG9صFð½¢à¶_èËõ£S(fºZ+†‹Æ+3-O÷,}‘²#û¶unëQÕÎY„;+èíMB—û¨Î«Ÿ}Zо³šÎ3Ë£ó‹Å"¥_¶ì|ŸXG÷Šf* óèì1ÿ.f–€ˤ bH »F&·›ZnӔ迪ڟA|ý¶ôò-™ ûSÎùpw~]};º4jìu<Í­¿`ÞG³9ŠúÄ=ncµ"¤†Ÿn‰$›uìÞ9rƒõ–òv…í5_#ìÁFÒxdc¦r°±ÎË€ €#k‡å7éq9çKbupçút{Zñ$%7× p8›b}ÿX±˜«ÑÇ—@¼ë]0Zü¬ GuˆØQho`ú {éi.0ü¹äT½&•}ÕÛÓXÌV)§ú‚]!}6¡‰kUi}ŸdlØì;ÖºwøÕø1oG3ÍÚs?ÁnöNÔl¶©p €U“ÀE®ïœá¯ò|ŠÛ=È%°sï©È‡þÌ-ÿS¢àõßžÒ{pJÙS—ãÿLñgˆŽcÏ!Ä3éæ'¡ hø1Õ6û$yä;o2R:¢¾xRµÏO‡?ì;.£q'H“jôôC$c;vdº°Öbz’æy¹“‡"ô{$<±—ÚPèðþ -¨³z^ˆÖ–d§DÞq jL÷»ñÝפn×*< i¸þ–º]NâÍ«Y¦#‰Þɇé¼FߢÊ9þÛ.1>Õ†óíhQŸd ²i€S\+ðd6Žâ#/”Ù!s¾ú:5ÙÂNÉê*­u;k¾ SVÄhÓ˜þó¿¬ÆYHW=e!˜W‰^ ›ÛMޯПÌ5Ö>ûíùÄ8>P¡h¿hñjÙïЇð)ý)H3¡;kÐ0*W½`€'é3á§®À?LhäL†û³GûL×Ç%PíaÈúÑ´½ç™ é§“)ŠìÓ~4T@6W”K'´=ébJÿ×? K=5f“.ƒ=Øä“Zç!»}B²_ÉáPb6]¶Ôâ´z7ƒP¯„ ÌìD„ bnž(ÙœŸ‰È7æÊ¿Dhm–,g[½þ_ŸjÜX/듉É|k´äp¾ æ™°²üLøWθ˗Jmqjî[uzÿÄ— ï)Œ €Þ.+VÏe×å:w)>úR"g ÄÅDµ­Hûå£óA/™Èç¶Èi ­òÇ©V¸“xo®ùáÕ€eÖ#ˆUßà „¡•zXÃíîÁifë ,=™Åqþü’¹ßÃZÊþµüƲ¯ õõõ1¿îÊL)åkô>V­\§ í¡ËŒqò“iET ˜ØÖA¹¶¶€ ¶ ©õÕ£„Õ q6'küÆ??€â¸åÕ ¾.¾ø×xˆ{TW«I¢»Iæ<4IÇ& ËÃý?3BŸñ`€ÍýŒéÅÕ×øè§ÝjëÏ>á~sA‹Mqߎx_H¹²ÐÁj^)ÉJ¼n¾Hø¡))ç‰óÒ˜mšÍÍ>O£k_pµâßKøðÓä8î uMåLßÛxÛg:-­Qߨß÷‚/A€ ã—ñ"óÝjVÏ7¾¯;Á+;÷Ëô MÕ"„D1EIs…³m/IµœÉoÅ„«¯•X4H7(f‡‡‡amP÷©ñž1ý™xŠ”p$¢ë³­?gm­˜€î¿tøÝ«˜“0ÀÙ\^ÛîÙÁÝË'™ëœ£Q8ÞXšZBwòRÿ¢þ#°°Ý"Q|éío†úI5žŠwž•4ú—ß[|Náqûš²ØÝ–ÁµGÈ·kJ Ý™¬Œ·z±ÿžj¬Õ‹°ÌÉ›Oöpëv€ìh­ Œf¸y YB—Vò‚rx–FT¹î¶K Õ^ §¾Y›k \†y sD8²í37!Ò 0ý\jèúØìNKmáªÆœ]Aʵçî¯[lßKSHÔTÍãê¼K&7Ø%ʸpã-ÝìK„!bOQ÷G,Þçæ9 XËRõÞƒjÏXȶƒš$ ­¤ bJçd?>Fë¡ØÔéð˜J>ãþéGlÙû:gpÿ)ЦS ‹¥,çC<+ð²¿Ä!ÿÊÂ&ÿf¯ÐqÃPÇÎ/hýèæÊÐ#?׫lv~E7Ä!]怜bM,›ÞÁJ›¯qïe@Ó—p•Óãûu£†¾lMã§‹÷ôEF1Ø—_šNõ]éERŠíSUãǼg‡J‚ç? Û°ïš@u‚U'pÿ†œýù£¶ìÜlRÕ©-Õëq@¡T°? }û”Ö0¢î}>ŒWb½E1!×ôn‚’k_K·©íGÞêjq¾IH²^>Æ—RôÙŽÝö}7äUö÷Søn׎éI±¶Þ¨¨,q]¤eÔU‘a€X†ÃT ׿a—‹c3®€êÁ˜ÚyÅ””,Ÿ×°Sñbp檩ɵ×IÌ ›VÎÁQ=ýœ;Â7N*ëœÅ¢51üz*mâ+ ¡_רï‡ôý?Þäj»ý„r!§Ùž”Æf«½Eeà:Sl^tWÒrÒ4$ ¦=ÊïºßO²Q‡h³Pû‘ä@Šù.?Ä<åÙ9ŸKÔßäa'ÙÌLM¿¤ç¥a Ðጶ^Ú5Ò¨ ‹z‰üÝñÜ{ç Z Ñ„G…T·½‹ (ÈX§/Ô,;#ý.X·H0s,H ‰x›ªƒ¿8±@-Ðö¦›óÄ—a× *Ál§S“ÏS gÛž»Ûú÷…í+c¾ÃA¨Ý8váÛf93¼Ïg±ÄÎnKK—åf`ñ Šv‰…O(‹OQ/ ö«°ã\˜ NY8ïðø¼æÙ›Ù!³ë¿v=fÝz)ªI¢%¹‘Dã!0²Sò~Þ¦Ë D\§S+ÆzJ(j[¯—o®‡×Ñĵr@°Â˜\7w`[G">Â+š—´dk~M¹Âç4e›éFuÛ¹ÜMOøkòX¤ÏR¼’™wná¸ÉJýM ÙÔÞeI0ຜçDô| ϸC6çÃnÇrÅê¯ü…ì:•Oµøj±6¬×¢nzµGH`$O‚ëßRo6·›¢\å¬9òüpÁupF?Å6RÙ猌¤…;9½*}òï>mW?=5ö(_O¹OÇ¢lû’fZ=åΟÅàJ^·üdL—÷·ÄÐù©^žÄú‰ÔbÓØèvÛù[úzµ20?§$ž†Jò틎:ÃW3.í©im®1fìïY³k¨r5O£!‹0·ú5Ò¢¾4Œ™w)4X4h÷áÍ3íˆê'>6í|.lœo‘”(š¯R[LœÐ»³­.á*Ói:ïØÛµ:³1ì€ w=œÓkÔÔôD„4„„„ .Wio 3·aúm*¾\´•”ë5»mí‘ ø]x>[ŠÔþѬÞZüJe‹÷ú]°›z9é–A±‡ŠÀ5#­åStzÇjŠ6]½Kó¬ohÍ‘Ã/'«Ä:ÕÚ¼š{øѵ8žÝªò}rëõ²Ÿ&(§e¹ªä‡9ìÕ&è-Åź¯,{êô®E§à|TmGèêySM¤}zß¼^ÔÜkQ8"¾KôS—L±}ÊÚì–ËSáü[ 0ee–xRd?d ¢ëÖGªÅÐDÊFß8P*Á`î:ósú¦­1y%T]‘Îßy× ðT`es,O83 ¨ö´¨×Ío¡·§*9ÜU¢œ¢½¢ é(°/;²†ž›ït|= &O%YAl ­{l .˜‰¡€ õ©·x1—/ÊR%ö˜w‰Ak MÕæàá†áÔÓJÖ„Çc£Îª®à7V!¡Ú­;D÷é&¸–e[›„ZcÏ•ÎEÀöó<+IìF«ƒÿGÑtß ïh› ß¡¦U`[•]ÚcñuZ¶tÛdkWˆZ*B Bô’2[Š+j.gKàÀcèýîÏ…swþP Ü,©ü±0!Àp‚@zÚ|¾÷°KåÈÏ&"8b7†k»‡«zÄn”P\¬–À é‚5‰9-[%Ö4e^×Då‡bºßv®IÝÖ›‰ÞxÈ¿”RêKDÙ-¯3Õ왂?ÓÚœL¹$P‹›Ó…"K:÷¡ÆLÕB©á¿—ÊrØ'ÈR\­÷%ä·‹cS7ÎjÜskyä(ßEÜ?þäÓ{G>º”ì@I³JÍßP½hÒÇ×­ 0¬HAY‘ñ}ðrûùÄÃ<¹ÿW*uñáwv5ë©ûm^õüwJ¬®_LžýÄÇÚé@Æè±r †÷ƒ-{|¬\¦ç)bAñˆ €®çRƒþ{|ì™ PêÞ‚^JYŽæQ]©Ië.G.ÆýøºÊAÝ£6üD6)ó×Õõ˜ß' «µzY÷{9ƒDÿ·¢DÁè5QæŠS Á~JÆ‚*ÃÃ4¡óù˲Ø~ÛeõECßnØ—FüyL_y¦iG‚@Ÿ}ar|½¹jòßAþæ¢hƒžtý‰ö¹jyÛSµ[qþ,9öÕ§U%‚ùñà¡‘ ºòpˆJ{; w[å:qìRH·4bÓ‡/oêyfA;5 €Ö˜°ø§?05ω‰ŽXšÜBcò–!""½°³ÂœžÃQSÒÇÔ§¥è'ë²¼OÇ{ˆqÅ=ó–Z)‚ÏÏø§·u©Í"ÅÌáÉ8k¾&[ÀE¦÷Íì38;ZÛ—¬‰<É€Ò|=ºŒÔÒͦ˜þ]ûûª¦=ß´ÏÇöo]w”„nÖÿ——ŸVá%òö|3:+rB¬ÇŸ¹~÷÷iÓX‹¾{·Õ¾Ø¥¨}ŠuVƒ4 žËsn§ðtí÷)q3pΔüåÜ5u“ÐXS¼‘C0­eбÜ\åu™$^MgìbâÅ$òô¨%Ë |ŸLát,ê’¹*Ì€ Ábz‘¼”\C×™.e2ùzÊ…YLoÄís,fj$#„ž©tÒï•ÿÅÜ‘N$Pôggplot2/data/txhousing.rda0000644000177400001440000024230112565371427015471 0ustar murdochusersBZh91AY&SYÂñˆìPñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáN|: 3Š @>ðÕJð è €ôo€úö

€;„€€(X`ø:#}í]€õžž;P À9@ú  €@Ú{%jTmª*H©U­¶So —@jÍ©±4³•J [à̰CÀMi±µEÓà°=æäBÆkS`2G@6ÐJD „M4Pë èh@x7À›à 84Ð @P 3(ZðÒ‹»ôMï°P ­£À@Ð8±ET¨ l4R@À p€ªRЬŸszëÀðØPÖ€º ÜÀÛ0Ø©@P( h}4 !"L ‚`02dɈi¡¦&0L@1Lh4ÓM4 U?Ó ÐhaI¦A“FšC@šhÉ10Bz€É€ÒŸ›SÕ? M¤Óhjf€!OM¦˜ Aª~!„Љ‰<‘é”Þ‰”ÛDi©äѧ¤ÔýIäñCF¨ò4õ=4ƒIæ™50Ô=M“Ñ©é꺮¯ãžU]û‰¦ÚݱÛpf&NØ6ݢݴ»m26jlJÛµ¤KvÖk-£˜ÖZYm²ÍÅ÷½~ý½!m/=ïÕ™JA™F“ ‰‡£b\T:QBRŠ™¾þ|ù×ßÏw§Å–[d±–ëf­›(³2[²gÍyâ²Ö2kd6dB¶³m¹VÒÚvÙ­»k}ozØvg6¶!Ŭmµ ¶nÍlnÖm™·-mgÓÉì夋9´#/;Ýé–´–·&ìÒnÍÍM¶”æ¶ëjɶµ¶Û¾zÞµ™­5·[ïo$nÛK3[l4Ö³6ÙlaÌÖÅ­…iØŒÛ6¶NØÀö÷­m£#7nц;&Õ·hMl±mc¶µ ·ÖÓÑY¶n6âÛnmˆí‹Gi£;-;[`Çk&vmnÛk3MÛBLÀkvÚsYÍ}lñjÝõ«{Ùn¶·Ûqyb6X¹›M6Û­7mŸ6ã2Ù­¬—mZϧž´Í9Æšgm¡m{os³-HnkmvÌÚÌ’eï{Û·1ŒÛf™:ÖŒ“q¢q$fÍÍ­3vã4ˆ´Ý¦Ûwjam6Ö"ƒ$ÆÍ,IšÛ$Ës¶m1nÛ ÛM­»fXlµ›qfÍ›f¡=ï}ïží$Õö¼ïmm¶ÚÛGvÙi[„j-šÍØÖɶkëÚòlݬVíchÒif´¶²mÛh¶1´×"kv4Ív‘c5Û–€ÖìÓm™œÙ°˜ìÓXûzõ³l¶ÛmºÍ›ZsiŒÛ¢gn}ûÞK¶ØìÝ-ͬ›c-¦µ…¹‹[³ i»-¶µ’Ü•óÖú|qäÙ™£šk5‚k×»m}{¼kzÖϦ=}¯§Ï‘ö¼¾þd½}¦ìûùî=5žG¾|õ{ÏOnYm™ïhîNößO¯|öß%ãÄ×ÒòG¶ÑdÆíõ¼÷¯ž–›$ $Ã,6QE$ BKj г3%4©**œ„XHªlºl2 )T–(™`JHii,PLèÑ "ÊEXR 5¢e1T¢H DM7T¤QMÀ‰€á 6´5.&0©¦ R!BR`‰-„e4Óae²Ê!êš”Qá**QOFÑn Ô€àA’ ÃTÔ–X“ [,èQN!´e„ôD¢‰“M 1*¨‡$ BD¸0äÀ34œ*L2D¶"ª— LDÕ1àÑ&¢ ””Ä8¥ °QRt¢$9DDA‰ÑIŠPZ‚[N¤Ì7MQDàÁQ L„cH—P¦˜ˆ3T"’ … D- “D)À™©B¡LD–ªLÓ¶IˆqqEER@Ôš–R†M-kEDUTˆ€hÈeEQÒe99ÐnT:0”3-ÌLÅ:e¤Š„¢$¸F* P*ŒTÅE†‘¢‚•ªª(ÔRDÅD!К•5dÆ…¶$Sb‘4dÑ0§JP -&ZQ1F”= ³TâiÄEôŠq ¥¸–aKœ*ŠTT™¢DSiÔ!I2$Q—4©:š¥Í2ʈ‚À‰‰BQQ™2åΊa¹’ôJ„™%Ó–@„„ÛZ"(ÌD’bžŽeœÂ Dª`‘H¶ $¸h¥â r“&J" a9™dºS0D …ŒS¡ ¡ Ê *u2©±3ÍL$SÚ‡%‚$6 šf‘% fªDI…!Ñq.¨µ¢ˆ¡2™Z œ)‡Rä"&E$«Bƒ:QˆN%1¡!Ã’$LÀ™`(—4ŠbD8J)&)“5LËT¦Œ\É¡œ*‚ä5S4‹š•.ˆ‰MʇQ$¹Q*œÄÓei4é"@”tªRR14t‹“TCE LÈ—0Hs5£0‘*œ€ªeLËŠªB4m£1P٤ܘˆš”X(Êš£EÅ:‚¢”Jlĸm`™)‡1U1" AF•!%S„¨t]`”‰‚á Ô4ŒÑeÌC¨b ‚„Á2¡£K¨˜‚"R¢&*h:¦ Ëš–¦åR‚Rj¤SPa¹’ܽ©(:`Í3!‰¡A³(Â$ ‰tCnd@†Ë10!¨ƒ"X’¨Ð€¢j¦Y2¦iA¡\:LL”ëJ…*sS)4S©‰‰$I5BfY0$Ê"À¨zC @´~¶!fYV‹;Q“A§H¢` HÕB‘P`˜ŠP*$µ1DÐ.!·F!°R˜2HC””¶Qˆ§.\˜1¤´E4ôeÔAÑ“J… ¢‰‡$Àš¨4¦šBDJ "¢"a¶iDÕXš•2)¦*h´ÛN”(ANiÕDIs1:AĹФMAE…4é’›P¤—(ÄKqQ&ª @4¡„ª–› f˜‚©Õ)–âmèªiÑ`–D;4K *&Kt )Tš0È4%*‡¨(0 f4—„ÈfB©¡ •J˜LÌQj¦R™F¥bMi5Aš¡4ÑM â‚–©)¥2ÒræT¢$ÄP¦$)š–jC¥Pf*Y”•2«Iˆ©pÕQ`ΑAÔ¢d 3`Йª - …%T”ɘ0]F[¤**]C…JLÒ4ЈŠSÌ…œ @"‹d¹A¸q0˜”æ¡Ò Tš1I&ªJ2Ò C £L ¨!§"µ&pZ#5QJj p\"ÑOFLÄSô±Ba‘T•S~6©~bdÑ×?öbþVÙÀÍåfn6¨„+ÈÿÏYúoQ¿Ž¯»íúNï„õ¿qþãõ‡eìç¬Ç¼Î‹ëMÁê6è¥5\y2jÎXž( T"5ªä,§»è Vã=ßT¯yŽ>AÖ¾yòÒ;ô}×¥ƒJ\ÄšƒÓö›Ÿ[Üë¢ý¦!Ã)9)&àqrLuÝ ñ;+ivuåss;ç;üiz.žFËþŸKqÍÙöôª'ŒæT{M×û9²ËÐjS‘ö­þO‡…Z ø~ÂÖ÷AŒÿÝÑØÐòt¾{>q˜"Ö÷“ éÿ®ÿÅÄ¥òóý›Äx;N³U ƒ»»¿¦ÌÑõbæcWìîlgùüŠ"Os)Y›žâúí@32õ?›¦a«õ*?²S‰aŸ³ À€gM1>†šèUîº/Ù•öÝdœÜ{øw[,Ô$*2]Ôêºë¯ï\g’=dFÌFøkòW~6/zÔÍÿ­Ãâv{Û×ûýŒín¸^Ǭ·È¡5ý†€íÿƒ]O9Îþ™¿Šhy÷èy\lî“Rí%ÿ]¿¥|uø²îåbW®Bîf¾®fí¥ó¡óì¹ëíÝ+ʆEàhö̼|·#Üœãïø7œ>{‹6¥,_sÑz¿ëäØÖúÞßl¾¯oð¸-Ú+Õä*8ö(i€àsÿëù¶rr{B¯âå[‹O;o±Ã×Ä•¾Ÿuߟ%r¸ý~w:õ=»Mà¡u˜MÞo]ã-»æÜ{•²æ}[ßaÑø[º–8p?vO¨ý‹û,Ï?‚Ó¬®‹\ÖÒm_û ½v\û–:ü&ÁusF¸’߯Ñi㙣}p; ×í-é—™5ÅPHåš'WW½k®…9­f½1-í21cBñÇ5ǧl…ÓiP:ÊZTûÉ>Zsoa• ª*‰n®Gz÷:ö6l¿ãë}Ç•ª§äí‹êìðsò¶7gº÷\n?7gÕwr“Ó1ý ìrºpn9w÷¨¦üloú9g ¹tTTþ2·ÖJܺΔúÑ Å`I©Ûh(º¯ÚØ9¹Ù•º„öÇϪ!ê6{Y7†Õ ’Xÿpz ±hÌhéd¥™@>ct«h #QQ[½Wu‘ÛDkMï]X±+DÊíi núYÙ÷i8…SÊÖÑÁÞÀ´36?¼ª²;Õ¶¥æq5òËû¿µÒÖr'YÅlÌCà¹H9¨GWv÷¶M—Q&?Ž‘JÅ Á–~™Š@¹>d™¼'ƹ5$ý#ë.ÿ´u³ÈÏûRE~ª¼¦Ö˜ªõ¡<zw ½S®TœM*º4ÿƒ`ż›×ÆÓ|¨\`)ê¸n3¨ 2•|¯ŠNßµ+šÇE­¿OõBv®±™­ªu•V޵ý˜&BPa¬OÈÉ2ëî–ß´5ô¨PŸõ'r›Ò¢±œâ#¢Hýñ׿; ûÔÎöLÁ—8šÞTú+ÎÎ7™±Ò!´m9ºŸCjÇ_c–ÛÝêŸ^78úÙ xÑ:‰ß®Ã™ý®fŠ]Û5>l¶ËaÙƒXDùû{ínÖUªƒ\åíþ¾í;èMÆ~ÑÛ/q+Yg¥iÎ_G$Ïq¿OzÊ>hèÿY®Ôßûó[vÜïû7àлýšBãÄRo:>NKl”ïúûÇH£ˆŒ¦vOî݇Äýñª{[vŸ—R;Uiʺëi½kK>}Û’á×-Ut¿Šy)ÍÅýÒnk®÷»úà¼6÷©ÚðO÷ÝßæÂ3YÃØrß¶Þ¶¹viL'݉ÍÙï:‚Ÿr§Cræe²¯ÏÍÝzW^›»;g¯¯Oe^Ó˜mv ‘öGEÞpxXìn\¶ÚOÄÇ óïìg´ÈÐü½7u½çи¿#þ§ˆìŸVŒ}= €y]Å{Ýú.™¦ùo­®ž]´k[ÿwµ:›´ŠÏ9Ë›”ç•fR\›¶§Æ‡[[ÿ1Óõ,Pø‹fÿ'Ӽſ¿Ó“¬NÙ Ñ;/ûup×Qqë¦]Å—èdÊ_‰ ?*|ƒ’ÏqÌþ¢êq|w®›†­^[ƒ¤7ß+3€ÜòëêWÚDüë®1ù’¯o »Hþ†Ù!w ¸zâú” ‹Ë^V}wUúù2x`sœþ 7…¡w„çÒbÏNw29ÛÕý\ï7Êtó[Íæ³þA8²ýŸ–OßdÙvþL1ª:çlîu¦®÷ɱMÎö˜0šh¿©¥ä/åÆhz…Yv²ûþOÏ_@îÐà{9p°O$Ìý‚é\]Ñ›¾lÝ÷È¥ˆºZÞ_ª¾Ÿ&¯½É®¼ÊûÍ·v2à ›&ÓÜ”hu ùâvð¨Ú#þ+°ké0¿ŸfÆ{GZýžÖð-~:]ošûEn%2åËÊÙ†æB®ÁóW™L™¢øï7üm÷GWžF‹=…´_fŸrÝÄH:;ì¢ÚŸÐÎ0hötPu¿¹n¿ÌúÖØguþÅs_ðõ ê×g÷‹·o¥jY=ªi›Ï)Ö‰}ŹíCŬ÷´«]ÿ'´¨©Z‰\ÚuÊ>—sÔæì¿æÕPÿWÝNæâ¬{­rª¸I¼–Óòz˜´p<_ùõuɲ;Ráï0Ëi‹ÚCáX|’¢u([X´-~¬¿îðóĵQõÍ–n„Ðb«í’˜>RSSç–AÝ——Êtð×<Ñäççw6‹>¨x<-§ÓSìRÇl¯u«g¢•W –7±[ÑÓaâ¶ÛüohRtÙú.ÖŽû7‡æ¾Œ‹‚ìz s«ÌBVŒ«¬¿[ê4Qëºç‘ýÓþ59ö±¿ó‰¯Eïùá\áÃý¤BpŠÅœMðýzeªàÍu[úO?ÎÎd ÌnŸ™?Ç—Âýð Ö°û=·]Ó KÑVÃëãgœtGvÊR<;WÅÍžîËÅ—kÁÃïæLÉJÚ÷.¬ÔÐqý†š>v3_­Ó ÿã#á}EÞË;Ê÷ì÷].û)ûWêíÓÇQXwÿ5í÷敽 [jTÅ(š\I|Åm'_yÖ‰éÅhë6¥:\û=\u 'È~;·áOilÕWó2‹ëþLêöž­´‹ 2’«¾ûûgÉûm¿Ž }$·¥ôÿŽÛwUÿó¯:…6w‡¯Òêþ•×vÏQ'Å®C¾—”÷¾p)~=eÖJ¨?togÑ”^%‚à ׃!¹Ò;œ»ôb— Þ=¿tÿsÉênT<ŽÄïšË÷-C¼PH¹/ÇÍÅäÏX“+ü?¶XV-²Ÿ‡3Ù÷ÞãüŠKRë`kwE&4ÄÒJ ý£'"£,Uµ÷æ-©£ÑzϧðÝMJ2Nëy”¹{dSl&ã:Ñê~ë1º{#û˜zÕOž.7è¢îêg1¼æúª“ý·×PþfBGc0KÎMªwïI‰¡*ÆÜ›vê¿ä’šÇNÌûÛÏí}u Íš ¦o¦˜Õ‡¨†òsw»%Sú Ú9‰ˆ.#“¬ïzcëWòÜr:¾Ùƒ½]7F‚ì|ý åí﹞êG*ÛS¬Hòp5Ͱ:ìå•§ÁîÓH“~˜Å¤Œâø^Y’.k3]\Þ!jµª2?;§dêë~÷G·>þïÚ½Ñ+´þx|°ûx÷Lÿ?Ztf¢Åþe†›gÌÇ‹dÞ{7lÞ\O;Ï-xµ­©iìeåt*º†;(´D-k·ø&ˆ@ `!E[DÞD»;-fóáݨ¨ô—ÚCÁ¢tÑUþ·‚–îXGÈŠ­-#ž¿lÄË€¨ŠT¡Ò0JU— ßV—~͵×çwv ªË»+³msi2ìí#ŽèíšÎæÝÙÜF[lãN¿'YâvYqa—Kknv¥·6¨ÖÓZí¦ mÙÖe³E­kL´ãl¶¡lYg"JQ_™ëË~½x’ñ–™¸4Y–Ìffu¦Ú Û·-Š-4ÜÎÛ'b[nÕ›fÖ[fi­e·kµ­8ß³o{bÌ ¢Û²Íl…¶›më7ËÉ–DŽÖÕ¶¶mÝ›³L5µ4ì×mií¼±KiÎ&Žå¶ËvÖÙ–››ÎÞ­5·wÓÇGû_›Ù6¶6ÖÒs[slÍúòôÖµízwµ­øûÞÌsÌôÙZɘÆmf6¶Ýµ–Íš5 á››#i1¶›pwᾞùšÛ´›kãø?™_ ¶fnÜm´Öø÷åóÝæÚ¶lZÙ¹¶Ÿ“ý8ÚM:vÔfúß/Ã}|Ûæl–ÑøûÏ%ŸOzØùíëéåõ¥¾/6[[µ¦ú½ç›bÚ5ñoYﯗ’úcóï¼4T@LA! ÈA*mÉV:!P¤¸Ñ–A!"Ã+BÈ2ÝjŠi$†•F[@‚m4%¹0Ì4%hТô{ß>|[¶Æù¼tÛÓo2óÒÚù¯‹á»7Ïm¯Žõòú}½|¶í¬¶ÊbÔb Úiªb¤$Š•5T?“dêUh~ E梄X JE0X†‰¨“0fZ‰aˇ ÄéÔAH™ÑI*! ¢!Pj*’Ad’jL(ÊS¡ZA ˜ˆ¤ˆE ‚ Ó‚`ƒ\F‘Nž”e„j¤TDÊÄͪ‰&ÖÔ(&L‡DMUTˆNu)«6“µ—i"”ª$Á1L@˜H˜êœI Åi%4¥:H¨ U8 MWõ(V¶W"ÊñPA’x(™$Àl6HBkÔ¦aš™maC†DS:ED8J]PfC¥.0A˜Vª²›; NXA?cj°›XÆ,&„Ê£ ‰PTëTE¬èU´ÚЬ,™žLL«ÔÕdÌ*%Ê-AA0åÚdBƒ2"µz0èƒVrJ©QýeZ"MLYôv`Yf¡Á°ZÍBJ•]È0‰EÚô%ÊÓ‘g®4ˆ½ù.àÊBã6™º“i0 QzŠ«ÔCµT‰•lÞÛâñfܸw¦¢‹!¹‰Á‘5-A;œZÈ‚ÈQV¸%H”ì¡E‡"4ʳ‡bêÐi´ -ů0MªälYß9¹ªÐ›] V6t ( Fí F˜GF Âdìp¥|t`¼çÞ•m´ª½´ëHèDËØ-E꺙¤ÜÑiò®jÜQßxÔn ´ 9ê@q3J:EÕKê'†fø¹Á61x½×©¯»V0#¾­Å¬Iy6¬8èì0@ßͪڄñl çˆv¶ù¶¹×y¶» õé}¡m{D o“ZËšÞœèaã¬î¢û&uÅ­4ªm*µ[k¾o¼í.ÛͲ«}ãYÀÎ-Q®¶V¾f6×KoŠUcEZåJ‘»™¬×Qµk­œm³ÔÍÂàß}ÈŽ'k‹çyÔ_Qi™Öu´bØ;Í-Ä["Õ±«5Œ x©6â³8¦1ÆÛkj×·®ì`ÈÇÕ÷«hOd*ÆoŽÖ|F¸½±mÄëi¾ÖÍø \ë„éçmx…ºÎ®¸ÖMc}føá™ÏÅ­Zg7$nøZ»>6Õ¸©ÆÙW [mc‹M¶6š¶ß9¶÷ÂÛŽxÚTrŠãLc›kÎwÛ­‹í¶âð1§ζ¸¬Óï‘‘¯4MsWÞÖY¦”­TUc|Nö©væõ°åºã9×8çd¶×jšZÙ´±¼o‹G6‘¶ëŒ‰WŽçkâ·O]øâr$Zê±­‰œmV¶Û%´_[ïÍm§¸ÔqmsÂqµwë™ã~W®Ec66Æ»ëÕkhÅ£XÎ9ûzÏU[ñw¸Ã†6Üî+9×|ùYéZÚãbã_âoŠÅ­G\ö$ÆÖè#´qÏ7áLJWµc^½VÓ¸¶*ýyK…ŠßCȇ[Åäæµ×QÎÝšÙìØnÜ<ÐØî®qÇëߘµnoÌ]s½â¢¶‰‹ê¸Œ.·ÇKhÎñ‰ã¦Æû!S·9ø¬â³·/~3~›s']ñŠÎ°!_9Û*WLø:[žu¾;uÞuÍOaŠÇ9˜£Ò`[æ8U·‘‘žv±Äv.:O}»täªç›j:Ü<ñmõܽx^o¦·©\j/¿]w´c¦½œëÓŽ<˜SIìñn©øöëÊ÷Û¼žœoŽ;q·ô;Û{R·Ž"ý—³çóxמ'ãêí»Ú­ƒ^N8ã_û5ÜéÛ{럚¡ß{S “ ¤#EdKL¢©LˆQV8‘ÁÁ˜"Éʶïu·dk‘ÌéåF;ü¿·fÖïïͰxò{:ò·Àž:ïpâš#¢dk–8¡o¨“b­¬ˆXMq¸«MBÓ8ÓUlnŠ=¶ëXž\VýÞ=œÍ»ü¾N|¿û߇>ÙóÅ#¦»Џæ^Y(áDƒÂ}C1I´ÝTÑ nž™Ò#qFëð*ò ”ñ鄨¨”b©¢cå–yf˜ƒ¨@MdË^CdiºªJžàS ª‘ãæûw«1Ìaxh<ø¯¼wxî»üO~ÍsäçQN'Á¯‡‹Ü]uMÇ”¡Uˆ„ȘNMeˆ™ˆ‚Íi™9WŠ2Ò" ä"\ØÊHîͦX¡ô/"¸Ë ^ ,D“F¨p×1°9 x£ŠI’<²&¼Z Dä*²‚ã]F‹',¼b1À6•ê &˘˜²)¼´¦s‚iâ=Opf²øŽ Ë:Á#\n@Fßp)ªè‹t/WR}ÇT-œÉf°€|j ëºñ„ã`pŽEcÎx0¸»e¾b!m³uÇÂq© ûËÈrf¢z)0E–}$Û CN*£¡0ÄaË4yÃi¶ágöN ²‹¬H’¦1àqŸ m8(‘u’Ñ(G¨T/ºÌ+:» ªHÉð2ˆ›Ä#p¬¼I²¸YtÕ|I–jÌ–ûqFé¯B™ „HóË8 º ˆ¢8XMR0n0„K#/,`ux 5#Ý$ 0¦Øm§š5CP^߆8¢àyd aµDú…:©Ç¦BÝóœLŽÁ(ï@ê%&êG®‹QGbPÇŠ…ØŒM¢ÒqwURœ ç(Ø£J‘§Kކó+6aDˆ¢Ò oÆóÉ ÅÈ }±»HA Žƒóžh'>1ºƒÍ¼%бth P‰%£QÆ#-¨bP.¦±¡Š˪dRu†ˆS]Æ™¥eÔO…8͈1À˜ A¡À‰‡"`”‰(#=–TDsð²igœØº|!AäÑdҀᬉ¸ìœÔ0æ_r4ˆi‰˜œ‹ìj0¤,£‹6ñ!mP&ƒh.ÊHœ› -v@6Hóî”̺ÑÄ:@ ÜF©÷q„ÕQÆ»Ñ4¬äq9 v3)8àeQ Äz èå·Y*BàM‘,ºë¾éÊžZð0ºe$ÐP-&ÏÖ4Q}¤q'`Èr%UQH`P‰¨jpj<%àbHaóÒMd Tã‘]XÛ1@²Ò Ó)_=B`x"Ü ]ŠŠAVÄ™m¾ß‰ÈÍK¤ÁEÂä&¨ŸŠFŠªÆÌi]ñ¨‘É=3O;¯4Ì@DGœ""ig §˜]%Áp¢3dѲÒå§DèÍAh×64r,¶€D›*(‹0‹§ªØ]na- ]5ßÎÂjò-G¢(aÛ(Æ^a‘¢«…„LÉîA g&Óˆ¨›J&‰lƒÌžøÒö•­D4 EµÜ d¤Q¡Ÿ ŒѤšjëáRdæ]… F–£Ú,øA×@¼„Edˆ$(ÁBGˆiO»H¨Ör[g:ÂÏFJ‰£ŽYd ôžISe(ôB(DÈA% qÔ¤YÓʈ'ž‚‘„H“ÑžËeQÆZ5 °þe™Qt5OŠ1œ£ DùL§Æš‘¬‘qÓ)Ù#}ðŒ<…BðN°«ë(¤†¬ª>'B™M¸DxN<“J™ â=5¡HŠHHˆ‘GbŒãÔ$,Áè£ k”ÒÌ&ÌM’$ßm˜LIõ¢=ÔȹMŸK²ÑA@Ô»V6G¬"eÕ(ņ\‡:(›0øÙÎ=(1×JX ²ãð™#ª2šå¢¼U‘MfÜ’%OIs€yJx‰§\8×Y*â ˆ¦˜Š@ Y¢ Dd WB6Bàu³Í„Öå¤'C À².´%Z *°X[@Mºå¬(J1‘F\ˆ6ª¨¼HLu0œH—Í$ûð$ÃŒ 'Âj¥¾Š UÈÔE)2³Å´ÊϺ»ËU@|‰’áëP‰3“‘§Ù€ H‰ì„§-ÆŸ.Q "‰Xÿ‹ žÄƒ‹AsM–H)ÅφH&,ê &! Âp?”{“ŠÀ´k ŠÍRYïÀ¬g¸°ˆYk¢â*(Ѭ)”âÒ5‚H[°–ÔN™m<7‰9a0eF჌ô•d ¾â(3ºV±#NZ æ-Ô™ ‹°Óa˰ñ!!ª(¼€}ׂ…LQ%1råëÇ%‹* b%êùTÆ”¸rÖ e[T"”Œ¡¯$µaƒ>e ˜…¨¦ É»ÙT(£4 “ —Á%Én«¯9”®]Ø-×I\%Ê–ÕDlß[-çð %Ÿx>²q1/ "ˆ°ß´½°bo/]œ6M­Š®VE<¤™™f¹èÚîmt«åç Nëy4òR¼Ü4r2Tj­@4ޱ¸²•–æ^Eú”ª«S/™‹VC 9CÃrñҠ˼}ÑÏÅo2Õ¸çc…Ö*Ût:UZ(±N£,ìœÈð´óªalÛº|Ûk]>õJê²Ðd•FGñb³0G‚•¥dÏYÓ©Á:­ŠÇ50ñåáJîNL R–½"Å\朂äIZ‚“ŠCeH/ÍjËÊ¡Çb±~:r±M¼ñM¦úU[¢¥rØÙ°CY­˜Ûð@ËH†™™3å?RÇN›Q*h×ʰK3ä>óUv¤¿P•¯T©™VR¥àºþD¡4ƒÒ§"muOO"^c•BÖZt×Í¥Z¤Ùì¤éà¦eüšªÌMIN–eŒQ¸¹´œk QÒ2¦KÓYɇæ4TçÇEÜɱ³`O‚•¤æµšã˜³0WZÞj˜²Ÿ‘ XÞysr@ÒT´£וRbP“æ6–:޳šÖuú¨®º¶]¯Rä¬ÚnO¡‘vå Ð")Ã|»ù–Ž¥AZÊ•I™-W ªQ½‡¢ºÖ±^Hˆ¤»5Ôrý$âlçèˆõëb•£të7k+:{«HëÏFˆpµŒÜÙ`~eL‹SPcšPVŠÄä×zóɪrY¦0Ö¡Xxr^¼Ãž¸*Rö eôkáK302`:%séé¹kí¶ºõgfgDj—lÎ ÇÕÉ8ÐÍ Ëx²‹[´q@l&·-zÖ*EYâóá`2½r]ùPÌ:Ó²‰O?8Ú"ÄáT×{\5nèˆ8âÈPÚŸ^»¹–+HµVïSþµ6Œg+V2RSAÊ[‘ t“>æps/V™ftÜÂLÄæmC(§½»”Èo/5Êk·1™²h²ŒŠåÇ—sîk4Ïj*ΗMŒÌ&K†­u¤iÄmfâ*^þåëózטž})F|ëõê†vfvqo«@0Ù•%X–rÒã@u,Ó¡;^C+Akj·õ#ŽAäߥ%ÐÅÙæþÿVn•»›U«OÃbÑuLqÒ³½¯I3?f¹­£jdØÛë¬Öè°Býè]¤.‚÷ÃBÿ(^R«…øôÂý8]´.6g áÂê¡xï ¯…ÔBú¼$.朅ùP»ü/Ú…é! / ÕÂëá~Ä/¼…éát0»H_‡ èÂóо.ËÂö½¬/M ›ò¾4/Ñ…ô!z/Ä…î¡zx]„.ñÍt¾JãÂô°»8\?; ÷¡}x^¦£…í!wÿAè7¼¿Kï9þÈóž;‰·:.óÐodÛO/°Ú$,—z®@Ô«z?Þé:II‚¶Ã‰Ïñ:èøÝF÷;§oÏ+c0EA~BÖn ‚¢j 9‡Ôthö;Úæ°§dÓŽr¹"f*U¢]sRÒoûÒhb…^ZtX oŸD1=2¯n½ÿÛ£ìè“ / ÿ¹Lûm¦Nkþ œÕuÞßcîÙ£á¥~ïkÿª¦.÷®ËÙ—cгL^÷Þlêø¿Ž®¶E·õ)ìò¶¹»=Ì뚇@ô§ooÊß︛ý\FOÞê6ø6ñy>K‡9F/{Æàå׿Kgµ?›ñ2¯U/£©¦Çžîê‹ãm¦øœÊ~{S,íwQßoRµàt Ð;+ÄGÜXæÛœå^|òü HÇÒ^?÷ƌþí·k{ÏñÊòr¸5õØ Óêrº¤9µ6X/^Ù²W*=Ǭž-®årúίrn„]‹Öôo¯?§æåæÍ×—?KÆßoñI¥Š¾Ç‹ÐrØßðx:ë»Ø7{ž Âò¶Õ`ȧÇë¸üs×vøu:¾ž¿ZüÞ \†ñ¹}ᬌdЋqÇ­oÊD¨³ÐsÿaYº49r¹úº†w3ž8ù°uXø{WCÓõ½?UÎæWæ+·êhë˜ÒàÙêM!›AÅëy™4”]w¤«›ÏÔÚò 0”ôx._A[ªbëÜ­¼ûLJÏË_iÓðøÛø˜+¥çtIØà5IÛ}£([Bº]ä èõ–bÅjŸu|ÆU΂_:.°ÞûŽ›OoÑóƒ›K"Å~³ gì«Ñ;MÞ¦J›t©™§N¶){ ×ËK;‡ƒ+¡‹*½Róæô}§C«7#_3&·eºKR:hÜåö΋aÕéôŒs7ÕÜp“´î}ËùÛ^W/gc—Ëáv‹j6þÓªŸ{‚ý¢ÑÔ™Øáì÷].ÿ°¾ìö\-u-æÃ|ÿ#VÛÛI—ºøQëøü­._cU½ö×^ÌsRÜS¥Éêb‡€^“3;²öÝnûq¯kqÌë±3…{D3SßöQêîx½.ÅM§•¹£×Rìº"rð¡«±ÜÜÁ>Ç“¡+['¦å-4nmxÅqCµêçÅ¿åµÇã›w}Õß–÷t¶ÓG¦ÙuÿNÖ!IÚçu”â\±ïøs:êy›}Ê][ºÍâs5yúóW»Êé·kR¶ÿ‹Öt¼Þ×Ëì;N žø{fûkæ ì¢òññµÕM¡b`úV¶ðoCK]W¯GœÿÓ­§³ìëo6ÁßOص½Öòr·5{—;™ÛuY=kžÄ×Y]FéõæRŸ³g éúÿl·±æ\œ®o.>£kÃì)—Âδ7ªþö©ö«u-Uõ©êu[¢ê¹æ¸Šrhqº¤54%è°–×±)¸É‹ 3³’NÓŒ¯'RV.)*Ïчz²žãlXîõœ-#x˜…ÛÁg7µØåþéô½¹û«µiÒ/‘—Îæöhssy}"Û†š½ºn:=^k6b±ÇO»O:߸RlüÇl`¿žF×…Ò!´ÅÓn¿aÑryÓó9ï_®ÎMœ×ºÈÏ?RD«*&gö(:gÒ=EÉȹÐÂõt±/eN³ÒOÈJK2šœ¹ýh˜??çr}åéŸWi>д5š·gÏÔRTœ~¡õ/‡2‹  ÛÓ{2È|æ· ×QÔq!›‰I.È Ôwu‚—ÕF9éÙÏž~b¹’ûß—w^Û5½:.§¿²{{•. ][jž{½!îß8çöÌÙ9‹ÛXg¸ŽVûJÕЄIÁ-Þ*v¥’>Ù#OÉß­é¶/sŒÙû)™ø*23qxùÅ*Fþô W_£Ÿ×lô^=|çR{ƒ©þw~[Ø Š6o['± èÿeꙕu'1z˾…/–=¢Û;ïB~ö·¡¶“t¤NJðË^er±™2•íT:™¥¿O†‹÷†÷ßè4gYÿ=êäÔŽ÷í/³íÜl>;¨œo“ÏÊêÈØs_a«èx_fÅF§YÅÞöežŽóq'Ì‚¼X¿Z‘Ÿés*X‚WßúÏ©­¿à{Kœ¥˜6yïg–JQõRw;ý;§M”íþ/5¾¢2nåö6T×^?•`¢ø”±ßªÅÙ¤w·©ÝéÔß“NsšÊŒØÿÆçÔYoîþþm­7+[Ÿ°’æÕTƒ¶ÅÌïŽëÏ«ày+åµîF;õÆÖ·:à 56n‡xg ±ÂoB3ˆ¡uo û]º¾Ãir’3دmIèðöü »ìÇ¢ÙdÈÃÃÄÀÜC-ó³É9—Ó[âáúv”ŽÌå™èÔVÐ]|¤`KFc)ñ•Ú³2op™ö²@Û­ÓµlOk²8‹Ú6½'³¶Çw:˜ì§Îçè0t­ªœ+Ùk‚ú¯»¸sÞl­[MÅÀrèdó¬>TL~Þf%äJbÉÊ_Á Éæó‡•ºè];Üó­ŠDF¬åÃÞýù–H¿(ß/Ö£Ó1¦æ.õmdß|ì–žöáß¾‘íÀFÇQ±@´sC e Ï4ïÇ,ó%ÿ¿=ÊÜwã}ùvÎ4Õ´¾¶3[GÓ u Dz²=Oew÷ðu_›³¡ü£”Âæ9dKèÉiÓW¸Ãù§³Ìž·î>Ÿ–[8Ö[“{Úè{”ŒKö©~9,¾¸?ˆa;ìS8€2ì©¿rÕ*9:Œº&¤RTF 9Tt(úBË".9‹,`"ù%|悽 ˜# ëW¸/æ×Ø!þz=†ÿUœ´WÅáziÖ¡¡M¡§Iµ.0U“ ÊNEƒÌÁßÍ);šÒáZè@_vR“×2¦»ìsRD‹:@–FÏwÆ0g¼ 6aYÁL6©^Å»“…™f–òJ·ñqѭ󹆩ÒxÚ®ÿÀ£þ8¨æÚÍ7Ñ 8§ôT™YŸÙcYDBM³„E*5•xñýD²ú2í·anõ‰þ×§“ÔyËŠ<>DZ¡»(XŠAÅË»¥±×h”–š3O0‰¯Gå™bë˲’¢ˆ;%û„çL×H=yy ËšVš”¿Ȳ°½loŒÊÒž-¼3˜Ù¨RbŸ\ñ˜wÝÜ;…|å4¢¦6KUsÚ‡ä~ïèžη…¬²ã±_M‡ }“š8Øx\[üÄhÛûõ‰Wì}›cCvEàd¤XÎÏÓ1¾±}Ì¢ç´S ,-d°þ+§i ©AC2)¯Ëí«NIo)·³þ'ÉŸXõð’-H=m¹ÞÙB1»¼0¬åýµZÍ›WÇC« ‹\C±S—'ßï§Ü2s ªzÚÚ”ìú˱$n}t’É›Qµž±•—èèHOÉkG+Y:™ò­˜¥§8­§:WHA~ ‹t÷6ÐgkP‡Zž»è0ƒ‰%—!xn?P¾Åâ1Œý¢ºë»Úõ§ ^‚ºÿ°]er=ÍÚ? ñ¶+ëì§Ý2‹Ñ¼Wì„Ã'°©SkkSA§I'i½j”bC#å$wbÁØ\t*d©Éh¥³4î÷ž¬F3¦7Áh_=ùz÷+“_õ4¬´è„e¦O+OR8œìŠøá›––Ù“4»í½,íÙ=ÝO;Rfuy1Ç/mŽº^ú^aì$õý†bœ]L¹ó÷ÂÁ§“æ¶Vkö6iOÒÕŠjÖößïjKr´Íž^ÄB7]2Sf¹}Õô†mmƒ§ WâQíÂàN]AU´{ë‘ûg󎪞³e)21 öóÀÅS „€Ñ§‰è•þ$URŠøµkg­ÚÌ6hEÇàòÎOŸ¯³°]º%:ªt6êVÚ4"†¤åTÓu ³¥,AùSµÉšŠ¦e[Íb;Æ~gоM–z©Ze½Ë%ßL³Vê8< 6¥Õ úmã„ÊÑäTò„¦ùìÚh›D-²q]{ÆàÆê˜Ïï2ŒÁS À\ôE§µ¹öÜûÄÓ¡]ôÑ ®Gޱâ±A]¨•™D~UÔ-j·ž‘Àû†ü€´¦È>³/ƒmYªÒ£ô×Xž[ža*öÊ声«²JúóÅeCBé@e—!Å«½óNÚ^?Î¡Þø&5€.4ÃñÐ]ƒ˜ëü鎫 ‘6ZůàÀ¢Aì3¢ƒ~ tÅ“q îÄ]YUo÷û¬£ž0ëç I ßg@`µÅ¼ƒpë8Šyª?'Þ¤&!)ö@P|C×íH“K½IûÞ-Z !Ý›â1áx†"CRMr¡ãð;ƽéÀó‰<¢ºîì¿zÇ‘å¶Ï;Æïö¸Ÿï<ïU"üž¼wY+iñ¿O_=’GE߂ܣŸÑZÎ…P'êõÙ+ÈŽ»Y¶Ï¯n:ï,î_—¼Uçm·Žì´G{Zu½µNwßÞ«êù-ŸéÓÍ|O·¢fèôÛ³ðukðÖ‹»;ü߃“ZÑ_OuïÇzå¨ûü¾½_;ïFsí¯›×ÎøSŸ©üûïä—e÷ìzÆ ‚GôاĈ «ú° L¢u0§ozõ>&±ä{Ýa£n²WÎÖRrÄ1ÀÛ"lõ»ˆïüJF©Ž!7M†‡¹)6£†3áöµ&nü$0D61Úßþ›~Ëm{m¾4GæÅJ "|Œìëø:¿'X($B å´ú¹à_öžªßKÙa’5E…ù~¯¯‘»ûÌ߯’Fuð}ÆoåG·õO<²'4KÖ9þ¯œvdÀâ¿dh tó!Pg¼œ`ªW¿4j¬s+¢Ëf&ŠË…ýº‰»M.Êï¨ÁÆ*R£#"x‡€ñ¨rh!Û ´Ò=sV ®Àé†4pL/²²ëž{f ˜ØIu È9$Î÷UÇlö>—x™›y‰‡ÐùŽ·ŽzñÇ4º¼wb5ÆÞ–C憲 ·ÒtÅ×T4- •ÖP &Ïe—y‚.¡ì*%êþYЍÌ®9Iªì!ÄHBÂÂåat¶B`ÉþeŽb&ÅHbë$?¬Œ ¢Ör\¨i TOˆ4)çJBRê¼CR9RÀSði,"£!Œ0—q„ Ú­*zR,¢“ Ô\¥‰}JÓ…°Õ ¦N¹¹Teȉ& rl¶’HÂÔYSiB§Ë4ö֨ķM 6ÎIèJm˜ZˆðˆNE4YVR%6i0 8A 6{©ýEJߤŠ8¦’Š3#-5‚é+(÷K†•!4Ó0beS“E’ BàPÈ<¾Âm8cDbEF$U  æÄ¡D@f(ì gÅb8ìòen9ñ,¯ uèqǃ _#œ>Ìê¼Æ6´ZÞIæúláî0à’.žÄižÂ¨²’… Œ:4Y`tH¶\åH¢’Y°<¨DN*‰šÄUƒP&»ˆÂ‘©˜ñ§³Ò g<©žÂñvskáë‘ÝôÑãìûÿv×­w[÷ø7;1 G’uç±²¤‹1‰ñX¢$sI¦”’Iªœ^=b82 “j­U±žË+A­R²Ÿ¿igùY×Åzk³½hí±éGÜã·[íÙ@ Ù?Y½ZˆUÇÜi¬qG4`œ ¹(3CZ}.ª¢ G¨”‰ÛE(NWÏ4 žzb5!'æ¤r" ÃH-žäG ö«¡³®îN¬?+¨·;ò æÃömq¶úà§^1åg=œtÌnbv¶ð¹}˜êx×oØô]±$Ýø÷ü›Ç`¥ Ÿ7׫Ääöê]xwî®7~VúôÜ ñµúCáþlëlpWiÕG‚ÍÞãôûâˆÏXúµ4âܱý}Çmñj3¨‘óxƒèí^Å펖¿wKnþ~V`VRw dðäÊÏlvZÚï¯mÛØ¬n7Y®íMµmmeÇ×Ú§;_[×é[˜¢;}ç¶s:ñ£å?åÈ•ª=kYPÌÖÞÑÆ'ÜÌcúkjhœÀ…hü êj.³}×û&Zû8Sef [&ÿJÓ#˜VŸÔÿúqüN6Öqö¿â¼[gPï]-,ض·×5.Z©<ý ˜ÙÑÉ‚v­?«ÿ©tãS9ùǬ0_‰õŵ‹èPÿvî_µÿúÈDÿ/Jˆ£{[õÝ}ô2yùðÁÿ‡ÀGŠyD©4:ÿ$ŽÉø;½û¯Ñ¹=áš}–ÇR¶»a¨ÚRªhº½­A€ I–ÊfzBÛ¡Vñ¢$Õ¡I •VÌj Q4f6*©IÕwÞ;¬ñ]o­Jé|Oõ÷¿¸T©^— B®H©.g¹E Ù­rH•w5P» ¢Îº¨\N¤¯·—ùª… \%T-4_ª%|j¨X…KQR¥o%Ñ¿>Q/ÚÜØÖ¥%o%Ê!vÒ‰t?5Q siaQVÍ*¥8|WúÍ»¨¢â;¯Òe_¤ë¿…]yquñÕaÂ]ñ]åG¶¸¨ê‹³¬è늋ÛÅEÅ}-ówe×ø¾•MªŠ£¿Å:úq~诜닼ÎúwWžw˜qÞSo+J{wWàþâøè¾;.m§ß^¿–÷vwÉ qqÝËã\Qû;:ò.ù­åç~äóâ°Ÿ{é×ßÍÝ>¶Øã¯›Þ·ã»+㬬·ÍgD}«Ûweò|wÛ×ÍwÇy‘ïjóëæîø>;;³ß–¼êòß5Ú~o›£Ÿ>zóŽÎóÏ}û×¾õ}~;á8®úÛ4¯¶œuõ÷«é×Åñ]ø;οúÑÏ~OOn¯½¼í›"ü›ÛæÛ{Ö—EçGyãÚúuàyIÝ|ŸKÞ×{kÏ—±{{Þ~1Dt‰: @2R„ΚL-0¥“¦’@¨li  a È££²ɪ@Aé DE–Š!èÉ:4‚,颤bŽC:3 ƒ­IBÓH: Ú^Œ€ªÏBltD“S0 ±@ŠZ 6Rà%  „ 0@Z -(A£¤š` î:`èÌÁ7…D ¢PÒNš8NR&˜PJ»G@ÈDSt‡³tõﯿŸÛé×Ú½"ø+í÷N iD2‰KJH´¢"ˆ&- ¿½ŸK:#íóÛâŽÏ?_ªV *_Zt×õ˜:F‹:)7¥ˆ$h4–‘„²‘å(*‚ZÊ&Q#C6cK wF,QÓí—;RxX•¥$ä2+* Mà0LL·}‚î :"@DX‹J†ÉtB:dèD­“c £ 6V“kD“2ô¼Ò±ˆ‚*È5`ÄX|ÛÒ÷ŸC Ž‚±(3 ˆ(k•ì)\éRP¸B/X$i6T,……¬Â:3µ Z¢Ñ¥S˜T„ ‹L5M“¤ èá0tFÆÑ›T3d‘ *{‘M‘¡„²ƒ£h!L«B¸Z3GKÒèSÐ3s¦ 6"Ä t$Ü„ jI:"‰:!"pNÆA±h†t&ÈAF%3§aêtt´±’: 1”Š¥¥lÞ•”|Cd…®SÈ ‹=$‹‰¨•Q…´#µÐŬ·‹BN,ôÍ!FA¥q´Ø²Ž›õ†bð µ  „†ñ«ªDF :BÝC"ÇdŒB$é"#[D¢Ä²•îÚ¨0Á©h¤Ü±kC ²®‰ ¢É‰`AAŠLä舘´8@’’Ðèfe¢LbÖbÖfðK""˜¹ïLi“ˆY!å ›(}Ô5Ëd‹Yhd"ŠËÁZ„1‚²»œÝ“©‹!c¤‘}–ƒ1«Ñd¡Œ)H@+|f(è.±¶ YÀ€ özos|tÜV¼Í_4¸lL–&™ŠMÚ*ûZ­£"bË:‘Ó—»ƒšÞ dß+H'vƒ:® ZE“9a’IØÙ¬?º›òc‹ñ)Dî„Y LT ò¹Ž^ˆêliã¡ÁèÔsvÒÝU³"‚éÍ …¥à·¹à²âî4£XËØg£ÒäÅö€ Œ „e³„G¡±·4Á0l ”uåQØÁ±Ë‹ ™Â¾ZÎçF¨*R7Z8Ñ »¨, „´vKfÄY,*ÐèLQ7œ¡:[+ Mü$ž†ÁáÂ9”8Ùc›Îx7² µms´-ï „N©–‡ í­Ös®ÅθzlD+ D6:´’j\œ½Š,,uh«TFÛíFtÚ:XÙî×-[3©‚A:n`Ñ„Q<áŽuxBBAHƒcŠÊ$¶77µóÄÅá(P\$¬Ã±ªÙ‰'€«0Èß,Æ·Šär ò*׋›…Ú$=Ç|*ªs0ì´Ry" NïTÂ:Zö¡Ü­££/¡–O" 7!Œ&núLhA²Û 5C“ `î`çÐ^#™¨€#“¢;-,Ö š,Þ6Pe›EYfÂØÄÇ+RÉPï BCå #H5©½ãTžÛ0øxöY¡r£K=¦Î%4º±±ÔÀã%2îØÅ:Ü ðÙÓšÙѤÊBޝ†û®|ÖóQŘÖúSÁ´éiVYë²”y$ðbøÅ@¶0öÖŸ;×ònꆇ{b.dÉì6Ê$E–ñ FwC˜ëx$ÐÓáÈÄu|¹[bÊ{SØŒjÝ6CžQ#ÚË퇠á ==e¹Ý4vëq N‹A~PÉôÖ2„ã4¶Åíó]5x²¤]âב\HC\9؉#ëÍØêõé  …¦º¶ ŠHÒp«™áÀÅãßÔ€¯wœ9è¦.ß'®íì`ó5£îié‚9#¼ÕYòX%*˜ÄËÖ#äÏ Nívtâ«4ãfñ„°Ž>gg©ðÐéÜ—vÕ©’A˜G¶4zÔu†7!K?’ vöxWYÅ”Du©Ú;º®“¬ÓÁ­Vs Yç¦FZ.GGŸo®ÛÆ÷ð°äB7ÂêwÛ¶ÑÎzO]ìz«æ EéQì#©ÞUu]¸DHÂ@ ‰XÇ.*± ®GÆëû9ó/ÄÖRT{æ3âîìö9×~žG•Ö¨ljyã¶ÎzÂf·tööK$›¡à¿C±˜=¾-æ-YÀï˜k¯Uc“í+É9Û­ç|'XŽo,Î:u¥æü½üG1äUäx׎zq¸At¶rªß»x[㯆ô(rF¢ç3Å‘S/¬À,ù ¶!íÑ0bØ´+÷wït—,AÎÞ[ß¾9òqÛæ£iÚÝ`[e3ƒà.;¼•BE¼0¼F|41kIÏKì#Ç1â™ðë{ç¦Öñj‰ïá@ñïåt·ŽþçWâÊ)ßËë¾dØf§¤ÿ8˜ž¦Œ¼Y@Ž/„q!)³È#Ï FÓKÄhÅêK’$P¯+Á±çÍÏ'‘årÜßáøžÚówá÷gÅàß6VW>ZßÉéÛ'´ãYç»a$r&º|Ã%¢FÇ8ƒŠÌITá1ÔJòMNEçï“ɉ·wsó\d>vwìè1½kàyÝsåÛâÏÓôCâxðÜlNBÚÁx¹åޝÂëÛ¬y¹ñù™òkÉò ^<Æ¡ø7ìů ´L1%¨Èx‰Ñq$a4{Ö#.5Íl³@Ø`ˆÀpD!0„"5â >4—ŠÁeÕP²Ð¾¤÷Ÿf"M" ô2&°ÕÏö¼e„Q‰YO¸áË87ÆãFk51àQ.œ‡HqD”dÔÒP®q¤mŸQbkŒt=-bLÚ¤!yTQtóIo$0g‘)W^5[UFä „A) =LòXâr'æšÔ“’ã“m5³µDhk6Y…BñãµÂÙÉÌŠXQ£,à 1ó¬bŠP–³'ÔL+@4¡¬z†”˜dRÕROíÒ<æb·¡Òªs@^bl—]†‹°œ™[ÍtOÑp ]¤P‰— BâT^“§¢‹®'có²CeB¥HÓ@éóm.DÛ”j•`¶àÀ‹Oú ÀÃ$t1Ï"ÎsëKd•PžÚ¥5Š‹òR’M1‘ÜrmvÐʆy·~ ±$y3W§HåŽY«  *Ôç)¿7úeÜ’¼úŠU¡4é 67ìIeA êÆÎ<£6u×7&UÔR¦iÝ–Zô²DñM~ší8ûyT¸ÓÕϤ飳RÂeW¹0µ§ÝžI˜¥2ñhʺ‚õJ N§–«ÆÚ²ØæC•8Å[y†‡–½§œ»l”½ܹèT ±¼†v&*±'Š£7óí>¼Ù3¤–:Ê¥Á.ÎkIÔ¼ð6KÔãQô#±w9åÞ™:®D•ÉMç ÊžLû+·÷R¾<ãª`N­šÉžüÚ÷U\aÏ9”*2š­F¶[¹SÖlÀæ\µÒ㹌 Á˜y"¿U©´ mÙv³WƒC‚„gñ{ù¡9»í‹ ÝÌÌœÒ,Üæ1œudêÂàqC.åhNÅ%(Û„ì¹æ$ít áΧKNlé¯jÆuª¶óñO†ª¥ÝlÎõ«á‚"BôºHQf“öÙßÝ>÷×Ç^Õ {°Ø¡GQ;™¸DnuuèÀüÌýôK«LC—1yÑÒ_SJö‘tZ˜G%:õœ¢&çûf¼†· à»—_?ø€#XWxtfÿ•½%S±GB%=8™¹ø+-³ñõa ÚKVÁ±š/T¼ó(¿ðZ3O÷¨ér­«­j^×gT,¼óƒlºÅ[´®eXàh(ÚçKÅÇäÊ«k:nM¼Ù€¥öa™_?õì§Q“èë·}‹~@uÅ{\ç¿Ó@éÛ‚¤J–Îæª;{à÷—2þ.¤ï±½ôèÙZIò4ò¨Ç›¥|ã•£››*‰Lmv{Öä}ËœÞ3yB~»¤³·Ó˜o^–¿÷òô,éý.‹ƒÐËÏäô{]oS7Kq.ºù[~v‡Pt¿»W 2\»ù÷Sª~л®ñâu §Fδ£és°Ò­r1çÆ%›eØÈy Õ1§#Íæ}†uN{‡*§"îæõðV™·D¥>µÎ}Ò³)%·;¡l´Ç‘J†+WAÝÄùJhÒâö }5F*=tK²ô¬·ù/A 4†Û\›³Ýkc79/zã±Àì%ÍA?¡'ö&(’XÕ`³±³=¼ñ5«ðXÓÝF sáˆ}"B䟆Ý@¡ƒS¶Cí±þä‹[QümŠwIxZuÊJRr–Ô©¦í%Ÿ¾“)_õ]‡a³¡P­ÛyªâIÄè䪥»úçƒÀ#úÌÙ4sRÆO3“9-òÿq®c÷#ÇÁ½¡Óös¨SxZËnãóÛGq}§Ìn˜JPz§¾GÞ™3GJû»íƒ Õq&í›Ô¦Z¦Ñêý×ÿ}(ëzìXi¥ïÁYL_¢ýóD·' ¤äجC®˜t×blbX)­Z“7÷Oü½hIê&g!Yaœ0ñä6Ps›É)žqno¶>™9ÎC•YfõF?ug~›Áÿ»>ÈŽ·¯øa®¹…ç÷þ¼‰ÆSuöRÙòßÏ5ÈwÉ¥õE鄉ûíZr’~ÿ¡¿+÷gëcûòi¤ :QÛkww;ŸÒoÏ·å`í47|ƒ[]ߨï€õyçóÕO[xËÜà‰+wNGSãƒCÔàtôùZÌ]W÷eÅ®Øeu89;þSÇ‚3+³X¸óÉtÓœ+ Ðó§Ðþ”ƒÅÂÀÙï™Øø3ÝÌQæ‘¢Ó?ÊÿzŸ2±¿t~¼iO¿ÃMßm¾;ÉÄâæZgûm;ty4ž‘zOuEÔÍþŸ…UŸ‹§ƒüo?JvÏ©÷+„ªzÍ6ëáðLåÌ-k>¸ssv”»mbü–³ý“ Òwq+‡g|ñŸ•“Ú¸mzü­›V« ÚÒTjf_³ÌÛæÓšq„j·¯$±*H¬ ”†”h“0!Ë !åñiž.+/òÆÖo~/A·®…D_["ªsûJ©ó‘y_Ê©*û•%_"¤«ýªJ¿N¤«ÆT•u5%]ÅIWiRUêªJ½íIWÏ©*éêJ¾î¤«áHêJ²ü¡{ûäu3TQCºb‚§!‰ ¦*®îãŽ;ºà“¢ŠŽîB¤êHéthޤÛQrqÄvXí‰(¢$ÊÄœp#ˆîq{MïvœFgB9Úk€érÙnݵÚö÷ºÍ³iÛm²z÷·»f›i=ÍËÛ<Û 6’Ñ0P%üËp¢ 1ú Ë€Ð}΂ÉB%zì$ƒáb–¢Ê¨\oÙôRaóí^fBÏ}!n³:ߘBÿ ™ NFBæwr¬×!n¤-ß|í79-R½¹ krBÂä…ØéAj¶v$-[¢A!d…¾ÔB×lÈZH\HZp[rÔ…¯{¾¶¤-­ÍÂÄ…»Þî¤,Õ!lHY°BÜ×HZ´¶´µï¤-‚÷^Ì…³!mîH[{R¼¶t¶H[<-(©ÍeT.±AAý(ª+%Â,ÉQV(¨Ò1P“‘V,¢„-*ÂFÆ''‹R±.ÚéH>ö ù˜Ÿ`µÔˆ L€/úÄkªÐ8oB}¬W‡ÊxŒUqy+éä;\]·T¼Ôó¿?õ¼Ýô[•wœÑWÙÐ;ÕƒìR±ÇôúEâpu @"ؤ4_Û=Åïå÷É-³EÄz¨žífõ1‚·Ùd;‰„  ;¦„N®;ŠŸ5ÿ}¶ØJˆ’7Ý? ÊÌä‹?c±ÛÿÙ%Ô@„½;ȼI Ø0E“«€,,7ïÞ‹²ÔrÓôvË2NY…¶¶íÚËnÎÖ±fgvÌ\]]—q]¶ª³«L ,Y‰i¥i‚„W|…²BÈY !`Y !d,…²BÀ²BÈY !d,…²BÈY !d,…d,…²BÈY !d,¡d,…²BÈY !d,…²BÈY !d,…²BÈY !d,…²BÈY !d,…°,…²BÈY !`Y !d,…²BÀ²BÈY !d,…Š™ !d,…²BÀ²BÈY !d,…²BÈY!wíºWú\ÿ/¬ãSç|?æó¾wf¦ë ¤É[™ñ¿à÷ù¦V`+2GØ/gë¿KØø/eýÉoxí ö.ß.Ô<4­0¤–NçÅËJry%ú» Ñ?#ŠÒ¯éÅs(Ê첞ϱv]v)Ñeî²—[óz½öì¨èÃ*{?°>ªáÇí1$|DUS÷FÓ¢É='À±zF’HÓçR¬89’Xf* &iV’¿I×~‡øwì³k+LƒšÙk9›p#œ9Áïÿ„Õãå¶Ý¤$áÆPì]¬ÄÂÚÃ-¦2KvÖɵÄⵎÎÙ¶Y µ™Û†™¹Y»Fô7c±±imšrY¶†µˆ¶SSv·9©fm6mfã³lÛ¹+&ídí·3u·:FÍ`ìÁ­N\`;4¢Ìm’v´XÓv&›fM3-6v•²e–͸–-¢2²Ë Å'& 6Öµµm;qm¬Ý²i¬¶ÖCZ;j4m·mÚÖÕ¡3$-i¶ÙZZÃÌÍ-™Ù6æëkEjfÚËnÆ–Û&í´í¶9±c2ki¶SvÙ6[´¶mM³·m–Üí-©ØnÆ-nË3•‰§HšÉÒ[n™¤Rm1²Íµ‰–ÍÚÙµˆ;if²f4ÙI‚ÖŠ,6ÝlÛjÖfµ¬›8²ZZNkfXvÛc:M•³FÛ²#,¦Û[¥´¦íŽÄ‹vnìí·+kF–²Ù6%i›mµ¦šÚÓtä¶mœìÚÛ7 Ù¶mÖ´µ¹­"Ȉ#g3Ž5›–†Öf‹²mµ¬Âkd‹m©f´Cm”ÜÙ»hí Zc'l›ZÄÚËmlÆ%¸ce¶µfšØì–£`e»KvËmÁ2Ú-·lÓa²LÐëL¶Öݶ­ËnÍ%¬ln±›92Ì[›§s-Ylà´ken™¶IØfݵ¶7fY²ÛpM»am[pÚ2´í–ZËg,ÖL¶£m·m6Ý€Ó-hbÑmi›FbÆ“H[4çÖËQ¶Û¦Û­Ûv›vÙÆÚ6Å•­ËMÛ™šÚÙ¶¬²Íº6fvÖå´¬Íf±l³l´æ°Ù6ÖÖÆÍ±»4¶¶›MɲÖÛm¢em¤i¶ÚrÌÌ#ml3µ“[ÛK[a+F¶f͹Ûcm¶kZĚ͚ËkF¶Çl¶‹L6[Z9­¬“[L‹ ge´·&ru›ntMn5¹NÛ ɵ´·3MimXʹ틵¶Û;k­À™¬Æ›nQe;,‰¬m6ÚÆI˜ÆÚÛ&Ô¡™’fä–,ØldM˜éÂd[3LK&k;Zk‹Z³c¶Ý™8Í2Fš;&Ù´nFس±fŒSi´‹e³“lµhÍ376Í´Y°Ús»a–²sb[\Û6Φc“Y¸9£FÛ­°Ûki–ÈÅ­´íÓ-µ¶–¶ìmc-µm…Žke­mm·a-¹–XÜÚ²´°µ¶ÈâÉ·b[vÛnӲͭ,Ûi­²e¹XÛ6.–Ó¹i’rFSk&Õ˜ÈÛ-›ŽktæÇZÒëS£Z·b9%›‘ѳtk6RrÖËFäÄa²6Íkf·V¶ÛK0Í&ZY-¸ÒÎêÊ*8éË­m×m®;£NêsmÕZcjîÎéµSk«s»ª²¸îê­1EKÄBÊ›2?‹–ÑWü>iW,IzÐ¬ÙØó5Æ´+B¨ª•Xq!Ž" pÈ­ÄÕ£sŽÎ£“6ÅÍ€ˆ†6D1¨|KýóówuzT—<ÐÙ‰/ä*Óþ#³i%¤Ñáæ AYóqs Ø4‚¥¥xa``rÎ:EE«A‹{шմƒdÕ^õòý¯Ii¬<ùÝY€‘Šªp½´×Z¸ˆ:)¤LÄ›ãÎ-V[9 ꖯ˒í˜:0±4/±…HƒC6z@8ŽÁéøÐ…Çñ°%ä°Ö¿ ÓåçB[V*–<$¤[úžŸ%Çÿ;Š£•Óµ¨ù±Åc¡/‰¬ëÿ2Í[Ðe`AÇüЃ»`¯íWmÐ$WV®ûáL’ ƒH¸ð™}„"TÏâð°žå¿ˆA¸S\€ÆÜÆ5± “÷UÝ.0 PЙl¡å‘íÆFË’Eä`HÌ-M=W%¿t>Kàxö¢ª!HÖ³°¡!Œ.><_hK÷ÌY¤ÏõÅùòPÐlz15wè«ÐÐ2“3òâæE„Ò_ûQ°’¸¹ÇbY޵“< \'ƒ פÒir¯Ëö5ºž5LŽfãG“’ĽX.ªY÷}Ì—lq`@’èØrBÝzÎÂFŸÇ…i`™ig¬ý6T´•¶©®ñ]/¦â"Þø|½÷ ×¡Û@‘ôUÒéFŽÊxK^Ð_q¢Ûª‚¹€_x¶ \ç=÷?×f«ÎeÞñ¾!|}+B˜9m.#RÙa ™«Åš÷!xÍ.5†¸æ´]%Ús›ÎÙdP/Ä*±àÂ"ÞG\äÀ¾1³\sçf´]pjdnš0¬óØŒõP :í \¸80˜•(×å%<耾"zTmcýzÿ†hØL"Suh‹­ªˆ.OÔE€€p¿ÀßôÝoS-•8DD?¿yj!ea ½oý4!j¼.]~›At ÁPÍA’yÉ¡)vz¦Çâ¤ý¯ýeeY€/.¦Ñ[fiCKåH0íf/RÕkf¥ô »G'gÂH¨>»—Q•}Gþûï¾ßƒÉ¢Ä$åªÕ‘Ð00Í\­ªÏ3—êâ®Q+²ëüGy«ó{îÓÞîÈZa Bâ0…æ°…ÎdB×Ëe]ÙX/=5Ú0o´/8i—®#áþ2>V‹g›)Àx¼²Œ\ûV âã|H •Ù^æ×çêýÀ~­#תk„’;Š*Ë*¤«2DªºwÖÕ{Ììò»æ.~xU:2ëªG•ªM@ûÛ¿þ€ŽJD8”ÞÚ'b÷OÔ|éuðtÓœ@xCï~ˆ£E|A²ûÁúïOûë~¡ &û# ˜ZAeÀíˆBÙ\(èÕÈH’®ÁbJ“`êH» æâ5LQ¯ôâ":9>áL×å&’³„‘µç_ÒÑ.KÚ=òy¸«RªÖÓý&,ÝÊ¡VÛ9ÚXö´îÊþ} ]? ƒ­arjÛÞìåjHIDUØ^¸h^ÍPHI>-C·×ÏŽŠ)/u¹ 5æš\W—‚Ìß'JßîA‘1pºÜkÙ&á—ÌÛâ§^†N/ØŒF¦ô$ ßëÇÔ["ìÂí´ƒºõ`ÐU`ìtï±Ýù×*õ± !ƒ–èn<Õ–[®°½æF°š4Îvu¶ þÃåôtî|Õ`µ²!f²ÂQ¥¡ ãéßýF‡ßßlølÄç&ÊgWa˜$GÇêÙ{¿Ï½ë¨™;ì.Õ„èi  OËÄéŽr(òºñ*cË”ũëˆ6€æ"HJ½=Ug‘ ojB:«uˆïñ¤øfv^NñÏ[ú+X! …ÃÀÖo¡˜e+5Ã;»ï‹‘˜+ ¿3ýU„¼z^6s5:BH÷m°$$‰¶ŽÔê5°@ZUrzÎÐÇD3tÍ0Vþù¿>9EýQS¤µ't€ø™l_ØšB^[£Øóú ñ±…ì.…«Måeü»ÿ®z‘ÃÈT…ÊÕtÎnjýŸÆtþ*œÌæøÑÓù3™´‚ùnš¸’6š8HI3HI…VFN‰WfSÇÉy,[m¿²%ª£²æ¨›wÀôÑyíàÿo@ûíIa—¹Æ‡ KçeS»Ž‹Äó÷‘Ÿ&&2.¡ÏÅ~QÝvÏc"Å>JüSn—Ò#¯öQhè78ޝÐIOC¦×;NUî:ó©šw¼òÏåPƒÀ7€€‚?ŠÁçé¢BÅ\h’Õíç¿:Ne¯ùJ™ƒXÚ€ÊÑÖÑo9G¾—ªÉ)ŒŠXk}²eæJiŒýˆ1 ‘èq0¨ŠW ‚°O.(î«ÓC©6øÅÒ ûë€4Äß/§^[ù&€85˜†1È …L»ˆ€1~„5ófD#p£ƒÒÒ³¨¬à˜Ï‹š9Aª#q.~ª3sT #©¿Ë¦˜HIc¡GEúÂç³b-ÛZ“¼ôhßß^Ì ÷…—÷7ƒ¯GE½«Ïc±ÏTHòüû–‘‡âsØAñ5çÚXªÈzË û:‡°²Nç§xPÄui ”™`íhvLRwÆ1¬t6°ª†ø 'p`¿ÁÏÔ\zûZGüXx¤„‘J±|/gTòg ’2zùuâ«EÑÅ‘ ýãäl¯'ŽVÐÔ³ûå3t~\rÂÀŽÿ¢²¼Ÿ8†-ŠDDG~+„ö`íºÎ^?]è¾!²ôXÃ?R0HŽ­Ë„@­<°•D?ã™÷Ï6Ë7v÷ÛÈsñjíE¯5û³Ÿ«W7ˆ¡”ä-5Z·ðýœ}Lµ7QòÇ"ëX¹Åœ ®yñû­ð3ÍLokú °\cOzVŸ®¥’³°&è™#ÎØzúPÿD¥-IïÎæžiMGȱ¿ Bðûöåßjºù¢ zѯ òxXƳøhk/8zØ€wž  4MKë+º1 *tM·#“jÒÔì«â_¢¦Mk—ìsø‘MºÖ-[~ oИ´å¥ÙQø!ؒݹR§¾Kð·n†`8¾‚– }}äþ{©Ž©\ïGV-“±L»ŒòqGŒ°÷òÔÅ4£2­|Ö®z²èŸ=e¦“&9²lH$ ¥õ¦™.{0Ía,%`ÀDF×y»ŠÒJçO4d¯Oç˜1Z ¯›4Ê@–&ÎЖrÌÔ"eZ„<½å ÛwSÃÙ¹® ÷‘Ƴ½Ó¿ øJÑÁ·'Ìݽš¿]¸­è[騣èg·ž‡º/ #%?’@!»ZÍ:±§.Wnì,×£Úèò!ßx£hÎ€çø Áô×8úÝ·„iúïÁy öÚRÑÀË0ì Q!oe˜‹ˆjÎÒÏÉ9ŒéfÑ£~xG”Õâ]È=m˜‰ã'pl;Éͺã©ßÐ7;ñD9ôÌ " ÅtöïœQç.ÅÍë(Àf¸(Ɉ%±úù•Æts,€ýóìÄ¡ЮÏï8®†ëôj]ëTÔvEÄ$\my; ”}ïS°}“Ú2)ˆ€·ñR;£bâ¿3¹V¶E‡»×®÷«Ð4ÐA ´Âú¶·ú½åéy{÷èΈ€ˆ¾€¶í¯Y§ïúoÄ—n.\ÏqÏT»"¢0%‹!”¸îpè.´ä ù5åÖƒ¤IÎ>8`-È ˆi ›ši´ÎI\ítC¤> "áç5³í¬m a.›>³†’Ã¥D¤•|öý;&ß Ôo‘¨>ÚÏÂk€é5œÕphod¡$=’ú;®˜ÛCÇÔ@òîR‘„DDz2{zÜëÝçI;L;ΊíÖ2Ý·éÓSe:è;”Ø+¤ák}$ˆˆHÛË>Mr· ªÄ1mbu°f5EfÕ£§E…wö¤t©ÙÀʬ(²Ë!I¥%$$äAf>E«„ÉqÖØNZÆxDD2Ý–>úD\MCx8ïÝ8Þ¾ç¯â¸v{ûv””i¯p”з’?ðMbP.tð@2ÚŸ‘„@±ã+óîi¬1ÛµˆÇî­ý}£¥~Æ*ÿèQóvà¬m1´Ø’u|›4D¨šKFœJU/[§kÞ…¾iêdÒ|fÈ»Åf€x§^±»nÓÒ–—dK>ÿuyP@@%}÷à0Mvq/Z[{.`ªÀdÛÀÌ€‡5/*ørÈú±û3K‚>sChVZm@T d®j“eñê† ÅìãéWbmüÆÒ¨ˆ*oAMMLBЦ$m ŒW$DDóÖŒâk 1ëËÔ–Q¼½ düd£YB Ú×§KÐS£ìT'€ˆìãWòG}ì)9[ÉѽûiUû kè‚"4!²¹éÔ2kÖçê}Ý( ”ŽáëYt<¼û‰Ø¨|UîÌÚ1Út3ÀÕÆb㤢etcãíü%~»ué.0¦h“@l…4ÍCà ì5Eya³wâ­îЏ5‰‘ ɯ|.KyXEÀ”`¼£Q€`†ìD8àB‡‚~CX¯'ŠôaÜcʬ ØÙKi³¹|@ÏDËÆ.1ô" "Ùþ“_~¡~‡©k œŸ;a¦£{ý¯sl\ajJö S®‰ÓEµ z¥ gO5=T@Bø÷Hè×ièÖ㼄tÙžk&8.÷Ý%ÜS÷ëý^z´?FÙ<DAêê”uqNQëÜ_ôñdœú‚S¾ÍâMO2(@Zv&ÙÓ_Lï&7ZË% ǦÌ2|SoþøAž…–\-D/­âôº¤¡‚cK¼ Û_ï›ý󢿸Q°±”÷òÖþà ÇÐ.˜™Gòóüü¿vÏ=gÿ-yxÚâyJ× xI.ìÆÏÉÿ¶R6'â}¤^{5ªóe‰/ê£CßOuµÜ9Š»âé}½Gkª˜NÿÀŽo§È‰›ý°¥%º—fóT`Mwå'«G ‰YþÕâý¹‹1Õµ©­ˆ\/áÌ®-.rïH§-}nãê|ÂtÐ(Þ¦K¨H3,ÿ09_=k9܃^([EêúV´”“„/«mõòtܹj;+õZ:玎î5-@ë[ªŠ¾‘å'sÖª_‘Y SrinøM»Ý¬ŸLÊß"Lσ·…¾t¢À£x[GÝÞü|OÉlþ>þðž{²ï?Óu+æ½_=øpnùí:ßq³» ¿H…š¸íz$-$-$-Rîj!hBý2÷d…î~×êH^H…ä¶È]Y tBãþw5ï¼Ñy>.&þ÷›ðet”‡‹ÔøA_ȽÙwbÖü T WŸ  |M Þ½pðh„vA°âËßVDú¹5!=ÏuÕKßö{h  !o™Ã›˜Ï`¤ùèˆZøR'èÂLlD1æãðnZ®ft“ÞVÿ2jR#EÈF\˾<ÞNc3; ÁZÒ®/TëˆS˜¯mDzLNHrZ ¶ëT«”ÕRœ "8Nw8X°›>ejŽ‚0ó?¿@™¼PŽá«s¢Ø8 x"9¶Kh3}¥]ë®é´ü@jþzÄ]Ùê³I\ê‹cðz àT@Ó<_òñݧFë#óž‚Dî§Q:ýShlD@%!~XUЮÇüuHMGâ"=jôçjp“ÐÞÂÞã—ÊUüʰk:Ó´¶kÃF+NVíëûŽwß³ï¼U׫…ŒÅë^0Ü £%º–i"D*FÔ ¼é TIÓ×»9,˜mA‚H„É0É2ùÂLÄÊÃÉ'ê€Nç@DDÌCnÅBÖ:}ÃÀïiáF®2g ëu &A” ǞᨅÒh {.ôÕ¾€AjgÓF¤ Ј‡"š*,÷¡Âµö)HÞ² ¹}yjið›CH×댉\¶«n°V‘„F_² 녶뎈wU¯Þ6óŠWsKpz³dOÞû¸Þ¤›‹´Œò²€oo)żNPi´SÁ“Å¥ùrÙ‘}Tû ²bt$å‰;’ jÄœœ’,ߊŠR8„”¨÷Þ€"€ŒÝ~îωª³åQ4°íÿ•‘¥Ò¡Oç[: rÑú· T÷GÙÕ#CsÄ?v[M1èÐ{ ˆéup”!÷QŸØ}~§ttXˆ` ºå ‡–äÿƺ"7a#9ŽV@#Ÿ…ˆŽÏo¬V%¦nO€½o=ÅhûOˆ²óï´mÆ&íeÆÛO8~7;q!Í‘ûQÂ]ç¥,øD6©T­ÜŽƒZîj:ß ²ÒBH÷<`²{ ‘0]máÈD/jMï ŒF0 xH'öÖo%þ 0‚ðôêc衜2Gáëb‰H˜@ )d)Xê(D¥ô@A×’Ü‘ã}/²eéÈç‚}oM>óåòápÑÙÄ@“ h4‰ÕÑÞgrÛů[ÝÝr²±uïÅ¢€ …ÞëA 4Ê~eëc,Ä~zã£B ðX’áÌ/ÂsR& ÍùŸˆ‚ÖnAäWâÁq=£üD++AI¾ýÁ?zt@o™ïeìÿ *Džòn|<6=¿5k]]í¹lÖ.ùøÏ íhxéþ§Uo+'ùzÈôω£‹*žCN†RÇRä¤ë-o[€€ò¦üO ø/ÃlüEAðYwKš`ÓêšÏ„Y4«÷Pb“†›5fíå´JÕiÙY{¼hP ÄŽ¥“Œ~"º½œ²cQïÛNƒ³a w@¼ìô-D>7i.øs ©ëžƒ˜Àpó³ÄžzÒîÔqNÖó„> Wo·ÿÝJgÙEY›{0C$N‡ O˜Ïég®ãJ½>7 ·œØM3¯:1)â}õx›œá ŠãÛÒL`ùɯ‘f=HØÊÍ‘J_=¤Ç`@BR'ügS¡º{b9}ø§(pPЄC”8|ìæÉ¾0lT™-Æデn!œð6˜:Á1x‚ùG¹K½¬ÊÀPâm pŽû}°on9&¹Z©ôìö„D-çɞ䢽€‰­~Oô©G%†ÇñÇÆ_6’>Ä@eG}p²ÓøŸã®@CƒÔÆEùÁAhØz*€d9wòn½³ÎÑè†q>  ôyì]8ð!E8«•ýÊÀ¹Ø(7R~°¢I ü–ûšWªo N¯3¾³ Ô1àÌB@2··Ú£ÜûÏùž! :ž~óë†Èü¬z:F¬mM›ÁÁqÈõC*¹àhÈ˨ä}tÖä.}7v߆ÁìÛ=8a$ÇG¬òåyºÕ¡Jô7ÚÝdK|wú$ÀªIßêW÷:'/ ÇÊõµ6¶òã=H•~ÿÔWþ»¿íîlºªþ5Üñ²{N÷¦ × u‰3“‡›¤D íZ:UTµ> m<ü€÷|¬ÎHµ|…8aƒæ—ûvÎr'ó5WÆKäùÉŽu!nmêNÐ!ùK†tE'ä—ß½®b{rµbò üãwõ¶¼Ã¤þ%~a‘,"Å¡’Gœ |§ñWšÂCåÿ{í’5”ýèž2U’É ï¯z¦~Ù*cÉ΄ ÖNL,DXW•@D9[,;ݖlj4ѳôiö ïΞ̤%ÝM$žò±¿c¬öý¸Üè_cf=q^6‡»y؃ÿ˜h?˜zž†BµÛÛ3ÊùµÚ‡nbæ·?¢eùA«ƒ3?1EÑ{ÕØZb~§QÎ7à={Ìña1k §F;Œô«œŠ1‘<嘴9A¶°å+¨€&€ºÿ9 Csœ?ØK 9\¦ö?h ã4õæ¥È[×ÿwÚC„?Û[]»«¸Àk(¦¥ ¾±'hè3ÛÜé #YŒÿ× åüà`§#ž«úÀôDZx Qpš¢g‚¿pÈ´¹ÞÅyO¢m0Àoßv¹ógÚÓ |צ{õ ÙVRQœB´ Þ-…kQ5µjÆõ›º"Œ Åm³0øMçxªPú%5ÓÎðÖX ^!ÁÐ²Ñ bø©Ê %¹féàN>\¦äGê»;­Q 'ƒ¨Ôôg–Z¦ˆ+¡cÄæO¸cOÀÞ)³ˆ°À: =mvÆ@C‰ÊÐq±“Ï@»pëàü¸bíÌm+`"º!Uz7!Ü´hZ_íß×+Ñßé]Ôrt®Ÿ­Üœ¯ì»Ú¿dywòNî÷Ep›hî3Š›¥Ç EΤÓí­µ}:ò½«ïÕ¤8°Ä*ÛFÓ·\wä­.â=­%ÄC¾Ý¹À_ùÖ’Îý—z·Yr(‡eg>¶ü>{Ä èã£öÝ‘w"Ù³§Úô½Fv¬èã,m|õºèï[;‰ÔNøì¨¤FµÓæï?qß^úW­¤"òȹå2UïžôV7[2ã¬ë$(èù¨²,ܳ³»göžÎï}ëÔâ<ùï{s’Nù»ã>+á•§ùÏüÚJ¥0ZeèA ñ Dahˆ&×fï·oM´~×ãóËëåiÉkõ^÷¶ü·}~_]¾kË m­Úç™!{Ö)íý÷Z÷ížñíIb;çÍî¢þÛót$Æ*¢I!%¢:H!C`@IhMµQ BQ’’i†Ä˜³LŸá™6?—H*[ &n؃$$ Gýëê”F=áTÑpA$ˆqûµ_mNÜJI=‹Šy¦”Ä6ÏÃúZù±Wùÿ¬eq‚'ûùº³gÍœåNœìÐ˘¥"„0Ô DÄÏDWkŸò»ÍgåÖšË9Ýs4dm×j2 —7u& /ß—¹ûºbå¾iðƒT¼[‘€U ­Ile½SQ›¸1½è¾ñŒyc~ŽlÌ»u9à=Ý L€“ÚQ~-l"›Èe›ô@S­ ¾îñ)<-9­=$Ð|SFªøª¡ƒMëÛ4«xoû;§³÷©ˆŠÈy–…VhÊè€-3Ma–há\ñ'9óMWB ›é#LzBs¸ë-Wx©’dä¯ohÖHd ¢#Üщ“'Ó87W@”[ýñ­Îøè[jN‡ñ§~Õsךí¹(Ìï¸Z2àéË,. ×^¼ƒ3çÛ ûåÑ~Wy ªã5 nv–²ÿuˆp#9gñ=fPˆB!AÈ÷*H €XÎÞ§éЂ0Øtì•:ø4:SÍ«ïŸËÿL±u Cö»çGXõ]+Kj^ùN/þ—ë<¼d4úp)1ׂZ™ÚvVŸ·¢‚âÛÌ|cð´Aðsܤ}Öa|“¿P0spgôX@±FÙ‘ø¥#òˆ@,¢Ü}Cƒ¦Ó”QB¢F%Xé| yzwž6HHjà /3ÑT“«ž}ÿúŸK°¾°ÜY±—sH…¨<1 œ@,SâÕ:¢zjæ[Ͻû¦ €*UvSµvª«¢ÝþÙi“’Q;«þJ¥gÊãVBW 3žTjkð2‚!TF€8ÀŽ?L~³@Ç™W¨³×Ÿ¾Æ° âgC¯7ÚÛŠìäò' n6ߦ¾l9©pMŽQˆÛí r°f»uˆrÛ€Ú‘”ñNŽ…{êHžN*x¢’›Â´úHˆ€+é õ5”é™ý'iÜÊk+\ÊtMÙ½\gý|͉¥©O)Ø}.ŽZ’6ãx.ã×—»Ë\§6Ôä î°ÈãÍ@¬|¨ºñš‡Þ;£kC‹49Qe!}ð»(¨ìSÕÍu°d 0…·ž!"¡á %·êÎRAÛ:¡ÿä~?ÙCþKé×+°‰ÉÉKÿìgdÿ¿ñsþ¥ý”p=Ÿb&`êØ]_èïô;B¹£5x5{2|ød¿ýµ5*ÃÁ9ŸKd}ñ77ÝiIŠ—b–9jIòö_6!I³Ÿ±ÚN`ß3ºúÍÌNº×Õ:ˆ-PŒj³B¼þ®¥Ä ýï¤lÙøXÄÀñ¥Îôö'Ws%¢û;3yÇÌe€ÚXUFìµ1êeø’áSßVI÷ïµkùW.ŠÇ%DJýèô-ÿ¾.šZ©Šw¿¢m/³'ðê”âåuußµHÚ‘;ãÂËÓù'ÊdôVÁØœ[¦4‰–†˜A‹JGý–@Æ+&ñ|pÏ,½„8ÿÀ–ëÔ²ÚúPên°²n⦆cb˜çê3£œ†.4­ioüFíüû~Ã97¥˜ kù)Ö¬½…DOœöLJþ~¥³«s Ñç¶µ›½ÇúºDüuüºþ…î¶ Ê©Ý†çbÏuêð_×Äç÷Ù!/6[[Ä!·ûË£ÜÆÌÍ]ª¦NàRfâ—´7¢—½Í~åP·ò¿FÀÆÑ6Ïè__>S÷(–7&hiR•Ñ”»ÿ¯ç*Š4sÍvuæÛäUí+^Š))CŒà,XW_GôB[(í@så™)å‰ö¥+fK:u{¾+‡ÌÏuÏÚEŒ¸n‰•Ì‚½Ý´~/V÷aK(¨WÙá]è‡+3ÐÔ—Å;èÖ;Ûÿ&5òíïÙµùéX/Ïo𫚪 ;©½UŠf“ECâÊÜÒ¡"Ôh-mza¸Çyl³ú!OÎ΀ë6RSžf¾¥Íš7’[¡6€SkØï¿±ë²¹ÚUÔ¾ÄÍE/ž¹Òþ•ò«`4T½(ÏïÔ—XQb¯àäíe_?@ò¿$õŒR’¤_C¶}OL3µƒç°“ô~y;kž¨tÔ¢®ÌRÖOS¡Ì¾\,lCOÚ]ðÔÕ‹õðŸà~ Ñ[mü9ùƒÄÄý\ê¥Ýš‘;“sCÃpË; àJ;ÄŸ ÊY,]“[³Z¹~t``ºéÊ+u5JÅ%ÉÒl‡±ÉêUÙnŠx÷In<ü9, å(#xç2Åt€®¼?Ã@©ä@p|k©@^-¶é)¢ÅW3+4âOh4»¼V2jÕ4Ýç×xë)JdÔp×UÆ…IÐ)cÙØŸ‰ŸÈ’c„îXj´u-%Ÿñe¸&1ô&˜é”›šX¾ lÏÀ…¼;;õge(¿f±ª4hÇ…®g‚‘žŸéQÅO\·M·"žA^WüC"Ž,qI¬+Çò”<³:!˾ZµtJyiL®B&dÂü_üS‹OÇ›á´/2&@,xÜÑj‘?Ð9£B>ô¡±!‰yxd e"ØJNqàKñÜJ`·{’£ñÛC}å‰J>'›]³ˆ—溇›Þ Ñ`;¿Échƒ'3æyK ß+Ͼå‚uF¬‡õçj+È«Mc&zCG²Æ¤Î-XŸ(í·V12¨íÛ[*Tt% ]L•.ÒG¿' \d”B•,Ûnœ¶S QOÛs›âÑØÐs<Èa»tLý…ùNLDf†Á•!§õpâÌ&lfÙRm ˆ ×ôâæ&`8kK¿òKˆ›ÌÕ9„ƒ«» GàdZ.þç6½ ZÎ30#Ld_;½–r1l9uUŸ3¶Ÿ­™Û„ÛZí¶côv[êÝK8Ï¡´ÞËgµû3®ç+#ëms¿+{жÓïYع‡ ^œ=v³{F$rEfS¾ý-=¼#Ìën-´}¶"§IÄÔñ‚xÎõDV¶ÛŒ¬3sœà[®µÊ1¿Ë{¨ÏnÝ`œO=VÆüGLñsÙmïÆ½6Ý®É+‹üe³1ŒûìöÑ*Ü)–:[#ÌtøÝï[<ÞûÎ㊗:ßZµ¯¾»LÛYÛQn¦x9¾øìLŒq;,fvsmqÓ‹ŒtÁ¬¬ðµŽ7þôäÒ Û¡Byˆž¬E¾ëœ~ùþ÷þG{ÎÜð-ĵ6Ö¾‹/œ_ž™Í¯­aÜV™ò>«^w?ëàMxü¼¿ú§÷}ÍÐ~Îc°Dú׿·ggž}ZFZCÉÂI7 aç=#{qÕŽWY;ý3ˆÙ+%QãÚéóÚ ªrf·É%¥ã÷xÞ“ù ÿG¥Æ‰ÓÉÊKð]ñÒ)sÏÛFê%¾ërmêš‚§ÍVé!ð$;õ-¾¿”öže…·‚Ù¸•¢GCλ´Q?ô‰êKÓzäÒ0¢Êsí¸®<"ÝI¼pµ«:¸IWÇ ì½n³¡Öä~Î2ù™zXÚíÿæã§µzü—£Ìï9Ž#ýOä;ãlýÙ%(DAN·•‡½ævõ¼×ïí> »â÷¬ß/ïŸ/'Ͷë Ù¬¾›{Ýíc*6Õ–v 5ÛNЕ¶»[rl›6²s"Î4 cp]”EcnŠËéÙÔža݇u™Åþ™Þrx™ŽRÂÞöž›d©,͵0Ó¹m“4‘[núÚ½ÌÆÕŽ@…œqÒ Ü™E¶™5¶¼­æ[XÚÎ4½îÝîÆºËNîÓŽÉmÙfAdX•‘g#jÌŽŽŒémZqÖe×¶ã¸ÏÚåy­ŠËã·. -&Ù¹Me­Ý”á ¸âÎøžÉE圶 VÛhîă¶Ío/;Ò¶Z¬ÜͬifÚëÛ=ÙÅgEh&ö¬žÕ‡‡feÆQ›iš’vÛ’re¶‹Y¹Ûv”e[1ÀÚvçsk%³lÌlÙÆœkm›­:g™½œöÛN]fvÝ¥µíºñmË7fs¶¸íío[ÓÒðÓ{׎öݶË.Îó8róœÑ–3³(4 *Ûw6—·n%žyÑÞ”V³ÞÃÄkwÛ.mÛ©m¤í¯<‚ž±q–ÌIËc“;Œ³:Ñ­Þu¤ö¢Lä»#ŽÏ{Þ±ÛQi•a1§¶y‰ÛjË'¶äö†mËŽs¼¼ó‡-mZ%ekÛ³Í3°1:;.Ì¢&kLç+[kÞ·„­Å­ ÇBsl3η–¤ ³¡kFuœÛ¸’²³¥;mÙÍlÀ³F5Ù’QÓfÑn6¸ç½zžnÊÓí[ØÈ³f†·uµ›bu¶îÉÎ:ÎìëmÖÚÛ9Zö¯<ãFÕyÖwµ»ibÊóÎzÛkyn<»,å˜i»ŒîÒââ°ìÐmÜânÖÍ-³6sÚÞkm$æÚÛ·m7%œYyxQqæÒÖXœ‰“Ö··XEœÌÙ¶àÎÛ]œÖÔ›µ™¶„ÆíØ•å{Úœ;mÛj2¬^öõm«3žÑeå5¬ìNÌ5¶sv,[qÜ—@fÞÞëÜí8´eåïm{Z\xvæ »c=¯:#³½ìyÙœ9¶îôì:Ï<Ûsa:Çm´Åe¶:2ŠNÓe²Lë ¬»EæÞöõ—¶Î³ ™ºN+ÚÞÍbò½ëKh*ÌèšÝ†D[IÍ­µµþ åç¾)ì¶»cB…¦iÑÈEgiGRÚËmd^X<ÙvSmÃ)kYFGck"™®ˆ[gm¸«[V`–#4Û3›C-™Ó[¼¢ï%½½Ùf{Ú¼²9µ 4Vqe•g9dvÚÓˆÎÛv6ëmFKa5µ·jÛZö²ôÍ µ‹nâ!µ-¯<¼ã‹,¸²½íìÇœqæ÷½#YmŒ·Ùn6Œ¬Ìã¢,‹D²3:4Éæí=Þ݆]{×½ZØ«,´Om{nkvQm­3¶Þd‡…fØŠ ›–†ÂMm­æ“ͶÂ:á·I6Îf*Á³l›f–Û»3í|yí›))´ù­æãmgm³a¶šËn³Ñ™Ý{ډ鴋´Ðë0´³Œ‘lÖ¥¢Ü ¡2³Û{S5f”GÙ^^wfñºôï{yÛkmØ…¶ÎË=·yÖ”Vm¼Ï;N:;ˆ³sÌ»ÆÈþvzÚÍmño-&GdY »:[7YÛ±F–•²Ûh€›vwydˆ^bqVwbYåyyÖnvÖJÚÚt³yëÖ÷²½nkQ—n˜YÖö÷;Ûoö;½íÓZ9›+_=ï[eÆ•"h¶žÙÒó!Y{Yîó{¬;-³Ï=¬K‹qµåg{í®½¶^U½¤o{»ÊËÏ:Ó4¬Ê9Ó•µm‚õíy’dw{؋Σ[qFœÛ;ÛWœ]¥çwœåævu™YyxÂö=íygÅeVÞõ²ÞDYa9ÑÍÖÀÛ%¶mžos±ÑnÛ–Ý¢¶²)íïnà4C¢¶– 2ó¬ç›kYYÇ!ÖazöË;Ëi»-#£4ÊÎÙ›fZÍ—™ÙyëiµÙYÓ^õœ^m»-·‘m®²)¶{Sï;ÇËvx`YV¶»)=´tÛïzç‚ѳqYfF½ïw¶y£-¶ÖÓ›iÆÚóómÑךÛ9µafFÙÎîÖÛÞ½åMÛÝå”uóæ’¼·ë­o ¬ÖQÜqÖgIÒÚ›gY͒ȱ×Åéå¯[¯µþ{Ø/C¶±`Û.m¶œÛkvãç´Om­tÝ»Ž¬Š­­™Ym¼ÞÖ‘vfÍÓu£»ÞÑuçf'q—ì_>{·Ì öÒöÕgç|SÍ'e–š¿öhD© ½4 ²’M)¦l°ßô 3¡6žÉZ(© ¤ÜÀÐ2!Ãb@¯Š}kËå¾€½ Û.ä÷½Þr÷{mì½µ«év†ÖzøÙ-ëίL¹ìÞ÷¦{Ëy7·ï_>(ºðçÏvAAÑ{ÞÍ}|÷·v];Ú¿ù{×Ä“—åd_NÎâùó|ÿ§¾œDRq}&m.ú÷¤ ¡¶Å(g3U˜&i ¡Ïo(Lé''hH:.9¾kÅÑA“•ïz^í!@/m¡Iq);žvtÛ :ø²½îôœ¸\ ’DGrOnÇwñûº÷!ˆ"ˆúXqÈS…Î:" é§H’rþ§Y:(îNR¨D#ˆN..Js(@lŽÞìJ.pI›‹nÜN%E-´HŽ o­Þé8î çâ9?¢œ|ØQÈäRJ#•@çGR ÈLÝ"9qÅÂw$'BÍÜåÇGQm§:ÊȈ¸â‚ã­´N'q ÇqN ÎtœGT¬ç8ˆ(ŽŠŽI ƒ¤Ž9$_{Há:N(œºJ#„¹;æÜrE ­):9mhH$—”Tà\uPEú¿Ë×zé8r(è* Ž ŽA#¾-šàˆ“¤­·H%QrRGw!!AG'ñWw[ÕíjNŠNI+ŽˆH¢Bâ:e£Ž.¨9Îê.‚ì»$à¡8C£‹¤¸ä¢‹§é'"‹ˆŽœ¤îƒŽ£§#ŽŠGHãŽN:‹Šˆ9Â8¹r"âí·tœ‰ÑÇGeœqÅÈEttGQqàw%ÎGëö: î8’¹"ä: ˆ¯âÖTG%ÅÒä\‘ÁÐ9ÅÅGwGIÝAqGEÑÑÔt'E\qÔ\]DGpŸXIw—ë?¹{Õú§YÔQÔIAÐTwÑÜTRTQÅÔPwrw\ÉÔ'Òí$謬º¢¤î„ã®;¸î(¬ê´èâ¤î8èë‚*8î :Ìèî$£¸î:â:ì˺;Šâ뎣º:8:".¸»£¢:ˆŠŽ"ë3‹Š£¹Îä®:‚èº8¢Žª(»Žã¸îìë:ä¨î¢º(".(»Ž;ŒÓ+(ê3»::¿TêÎ.¢î*;¯+.㻣²¬«Žè£ºmݤw×gruGf\ÔŽY]ÑÔU˜EWÁÉ]%YÝIRGQÅÇtAÔ—]§tVDvvYUÙTup\•uÜt\]gg\ur]r]DWqEViÖu‡QÇQ×tÚ²:îüÎî˨8눸;¸®:âï;ªÎ®;;¬ë¢î¿P²;ª:¸.ïmÝÔ]guÙwEw%\]]AGQEEÔWGðˬN;£»¼¢î;:îάèé:©ÎŽ‹»Š¬î컲´º:â#¸è ã»¸î»;»:ˆªâ¸:Š)µVuÙv]ÙÝ—\–uum££º;º.Žî:â;¢î:⎬ëNäê.Šêοß+Ê㻎.àèê󬢮:+¢ª+£«Šˆî£ºëK¬®ì«ùeÙEÇw×î«a5é ô(h{¯Éù#‘Ø[yY”·1¦šeYÕÖ]¥EvwuM»÷åÖuzwweÖWu•vvwVWwYU™gu•Tu—\wØuTE••QÙwYÙ]qwWÙ×g\WQÑÝEgq]wuÔWuÔu~’îÓ¼ê²wGweW!ÝqÇueÕ—VWg\uÙÑtvvuÝeÝÖE×qÔuÖWQÕ×6ìî»:¨êìºì(êæ×Q×v\wQwGqÖqÕÙW•Ñ×VUÅûB¬»Žë¯.ã¿è:¯:ï;®Î’³-‰Y•iŠf*Ó¦E˜.O&¬%åwQÑÕu—×guvUl£0e‰4²«2+13Y„Žëº.ìîãºË®Žã¬®+¬ªÈëºÊª+®:£¹:¢î²¨îâî¸ì㻪λ¬®Î£»¬¬îº³¨è»¢«.:ë.¬ë¸ë»,èî㮣¢ïØç^wwygvuÕÙÕgt]—QÝGT]UUu—T]ÇÙÝ•ÕÙwqÕÙu•ÑugQø9*ñ²…²…²…± !e !e !bBÊBÊBÊBÊBÊBÊBÊBÊB×¢²…²…²…²…²´…¥ !e !e !e !e !e !e !e !e !e !e !e !e !e !e !e !e !e !bBÊBÊBÊBÄ,…”,…”,…ˆY (Y (Y (Y ²Ad,¡d,¡d,BÈYBÈYBÈYBÈYBÈYBÈYBÈYi”r¶:üU³†fdMy&aÝÝÇ\wTwEY]uÙvwæUwW•vwUe]ÙÅt]euÖ˜³)V˜Š­1WëeW kŘ•˜&¼ëp2‚­yUtÙi®ßiЇ¦„­œª­0­1 ݤ‡DNH¿h’9/7Dò_‡¯DJGè-ÜçÇGDáÝÿ†Ü\$—Åúç^Q ÜuþS¿aü¿2úuwêe„QñÙÄ\wœE8\uÅúÅZwuÚU¤Qß¾þ£Þ8Žá:¿AÛðX’rH–þCzè—¶BuDs™c–6ÊÎÛ[m#'+ƒöwc„G$œTwDpAP"S„•å`r!Ñ!œ]šM«´¶Öœ\gdrwéEFÚ”³¬„ˆŽƒ‚¡Å·YÁ“5ÉÁEÒfEDDNIÝqBQEÁ\¡Ç’wtIEÇT\YvÉÔQq;~uçRÑÅÊÜ/lQ"éÂé' ä8‚s’,΋³s‹¢œ‹œâNIK¶´G Ú´9$è㜎rJ:Îëm‘ÈQp%ÒD!"’\VV„\wÜrq¶äëŽ#£¸Š'$à ƒ”sŽ(ê(œ¸é"Š.„ì·.J ‚Šs§8¸àà“ˆŠ[UÛ“C—B\IDuå?di8 œŠs9У¢8’ˆ8î ¹ÃŽä¥$³»;ÚÜE•iGA!"9ÝNP‡tDwŽADQr{X(¸ˆâˆ££‹‡Žˆâ(‰:rŽâ"r"%ÊàêqH$ˆ:(8 ¤ˆ‰:$¸H¢’‹ƒ¸ºNŠNNr8îJ"â.8"NœCˆ£“ˆ¹(ã¢Nˆ(KŽr!"î'‚ˆä;ƒ‰(¤éÅ"“£ ”Ž€$RH‚Žr $¸ ;€(§¨.J‹‚“¸¤âƒ¸H§p'.(¨ƒŽ9Ê"â ƒˆ.. ŽR‚¸;€¤(:äå("9;£Ž¥+‚IŽ8#œqŽ8:ˆ ã“Nç."ãœéS‚NŠ$ãª(Hƒ‚Ž(¢’(⣒¨'.@"r’;€¢:r$¤ ‹£¡8Ž¢;Ëá8º)·u§BHt„•It Q]HÐR\Pw'Ä”„éÀsÐ\åÜ"tpqQÁDqI˜e‡ Ò]!IAÜD— ÉpáÑvÜ\qvQŧ$\%•¤q@Öp§’wDpu%%#¹EÑ Ät—E't”GrÇ$s–\CœPqIȇA PtwtÅØÞºö^¬BHÑyUûÕăÜT*–ØÁ¶†Ã©$¢Šˆã©Â"8S‹¸®9ÈèêNB’:âœ*Dâ((‹’C¨Š“¸â8C®8î.‹“¢#§"¹#¨î‹‰ S¹8;¹$è¢N;‹¸;ˆ£®®;ƒ£¨£ºœŽé㣊;œN.““¸¨¨¢s®*Ž¢(êà;‹£®$àH¸¸¸98Ž:*"¢¯íŒë§"î"ŽJ: ’“¨Žî:8¸¸à*¢¸é9;£‚‚N¢‹¢8îN苎¸î.(8ꊈ.â¡è«‹»ˆ.‹®K¢ãºC¤ª;¤ªK¤»‚Ž¡8î$+‹£®€è ãº:¤¨º“Ž8¸î„8®s¢î㊋‹Žº8¸º():ˆè¹.:’ä*J¹8ê*Žâ“¸Žs¢¨¬Ê;¸î£¸©Ã©È*Š*ˆê+º;ƒŽ¸¨» ‚Šâ£Ž+‚ޏº;““¸®Š(¹*8œ.:ૈ£¢Í*NŽ®8㨓Ž"âÎýá×yÔtTwpqAGTQÁt\qPtqÜu!ÈáQ\\G\wpœtUûÇ㼋‚‹¨¢¢Ž£ê8â‰;¢Ž#®8:.JŠCºŽ£¸â»‚â¹"¢ã¸º~®³¢‹¸ë‹¸Ñر"GÇOÀmUê‚ÖàaPª$6ŠV‘ëÒÉ5á[Ü 1¦yœKVMY:œE«Õ‹¬î躻+¿)Õ—yuÕûkº³ˆ³*­ÖI4Å3 qÙ[LÁÅÂÆ¼ ̦«&b2šcLa†Ö¦UfÉâ[YÕ•Kc`V`~jÃV ÌyßtF¬MyJZaWBÅMYJVÖ@×’³-YI¦ i‰i”—ë²MYI« Û!b‹ðÈYV±MX”ø™*´À³±‚d,«!bÐ…7¸•62‰ëˆYBÓ*¦Î$-1$Ì¿/”/âÚSþÞïÖ}.»jn±fT¥ÖáUñ2¢ÞåIo¥Ñ'9…#¾äI÷¹EÃܦŠUÝqJèñRà`•«\Y'óä•«{ýÀø½Ûf6¸šÜÍÚd<7qïÜ ÒÅѵOdB"PŠ“RÓ%¼ÌLƒuzø `$g„@-<š'åù M;[Ïaßñ8žÃïÜVI`žn¯ÉË'âF3jå†Îz(’5“KãRq BHÀ$$ŒBH®µÂÀW:B¸Qã˧Oîæi––ù ¸$‡¥:ߢõ2Öú4¿fgBŸ~z`5T¥)&êÎ ¥ÕÐ}ÉBVpD Dò+€/µ¬j$z[†Ó(’4XÎ “Ô-ú\+¿×D‘vþïsÚî©D ÿf#7b<š »eIJî&‰Ã΄×uçË@”:€ˆ:nÏ.mAóÆ“t•¶ òΚpe+6“ ê®ùãZI¯Ég…Tá´àÑ‚„+–ÑíbWBŸÊÀãl|â b6{ˆGtÿ‰ß‡¤iõ½ØYij‚¿›±}×\{¡!qû]ŸkÓ÷Û¿yŽ…éHÄ„‘€¦ö®_m ßüÜm'·¦»³X©{I+’2uilºñû8XÕjÚ,@RSÑH "!vøI½æp@B©@üN[ ¤ñ|#ÚºÇ.öVþe!$Uc ¸„„ÒEÆW6\IA´³f?öÌ !p»_?7jcô$ ÊèçDBȰÐ(7 Z¯”FFž‡; ÊöÃs#3ž¶ð“VYÃp•Uþ޹áf¿ÄÓ¹µ¼+~S!û0£È‘Ãi䢇[<#a¦dÎùKó‰76‹r·Ü©8’P8“%Ú÷í3gÊÏ€0SwïIÃ÷ùü­$‹nrå¼ÓécòCäsr)¤ <àì ãS ýƒÛËáØ,ìO] _´| ¯9äú2]‡•6©&y›ý=Ñð>ŽAýò±…k@ËUáü×;}â$‡ÅuX9`’C:¤„„@DC#¾¡vÊ!«^u<…äÈŠ b䤠'ßÔV¶rX+ì€öî>­/´ðI@@€× )»¤ˆ…ŠõY©$. DE ÙÂZú~‚~/kãF»g»öhœ7Á$jã ÷#‚}ZBHÄÜ’FÎc%飮Â!]³{ý‡0RÜ´|\—3KþÖ£+_FÎÐ rvM¸à;¡Å5ø¥T±dYcšŽ*à±È=©É*•3Ñ,ƒ Kî'„x£öe(€ˆ„àNÜ aÒF ´áPðåN»v2x ¨!ùÇÉÕ_¡3²zz®ìØ*Ô ñeêˆY3gÑ&C#F0X´|P´ƒ…xîËÏ€ˆ†Y[†¦bOë£HX-/㫤ß^QÐãf> ãäV„‘|…ì‹o•PV9dlñ#× „ÿئf#³Sžq’@DB_8ýØ ¨+ˆª¯!÷w1;[gå³ß¶Þ䪘§¸èé;lçõ¬›¬°‰":ñ!$wÞ"BHªÏ•Þ HK¨ÍvýFOjÒS£¡x,Ý¿|+bHŸDË÷­ê ÙI4{>]ÛE)óµôœXÉØB9N^®yÒkl”P$ñƒ…™1À..49‡ˆƒ _|m÷IØõ­Z6îŒÕÍ=¤IŸÏ›<6+A˜±ÙM•¤3)¶Aa/–õ¯Üª½iÇÖ!iPûœ«·Â;o |ÚòÀÖ›z ¾=ÙËG¾/ õb'=[Dé*ϼ#®HIß.œô«) —Ó¦!m¼©ø³”£¤ð›w Û÷ÏqÎwšû|T’)}-ÇÛàùXšÇÑþ§UKRû ŸñŠ}þdæ;›AIÿ!\™±Šã0$“ƒm„§Q Ýç -@?<ÐZ¤õ°Øÿ oˆ(G±×üß·ëµsþ¿Èþ¾½ü,½ é»ù »uÇÖBHäÒGϾö0Kñ³îJ¨{¿3™ò+õî—È¿Ömõú$xõ\ÆÇß8×ÿ»7Š‚QX_-‘“o["Áá&—iæ QïÒ“j 4´‡ LjYJbMÐùŒgÀTVå}èô|IÔðð…ö,YiKÈb}Ú+pâ"$ŽBVq$x4’+U¿vû7¾’Úf{™/Áùvس$*ÝŠQ㥅þ:8ˆ>ÇhÂÇMæÉ~Ø@‹íOÃ:ú}³ +–Cd l$›‘Âûwf `ˆ]©ˆ©YãǦg™•„®_ƒsåGµÝNQפ€ˆ‡[âÈ[/oÕ~ý«¯ê>º; ¬³*Ì“ªð¶®?¶ë“¦Ù_¡z/å8/z¸$YK@ŸÆíPW|éÕ›xNƒð­]MÛ·é~‹À¿Gþ˜ðÿïã¿Ìy¯‡ùÏžOégd’¿™O3øªh(jc÷™Wƒvó8v+÷äjÔÓ@“Úïµõú}0gÔW¢ßá½^¶Ò Î?e~{W™=-«¶|ˆ×a—r3oY9ú+scGÙu+²É²Ï¡Z$RüC èÏÌ?š¤ª‡Eø0Ož?¢›9òƒÙøî–0å%¦–ntÇ`í´^¹ºM<»ï¦{˜Ñõ|ñÕè³”õ¸MýTG\TGZdy›PeR²ù0~·åÌœ5•)n¿Ý;ÁúÝwã4Ú«:Oík·Êþw²Ë‘å sÙåKj4¿& <$Ö¤òê¯;F¯Í¼?¯©öbÛ/XÞ¬å«9ÿ64~™ûºÀ³àÚs’4-Zúè*öµkÌÆ•åp÷ß?êE`—3·üv8áÿÙòüi tBÂÕÖg9Í‚HÎñsԫBÝoãjx-–N—@Ã{^FÃ-Œ«PG5Âî×rVD¾‡.ûÆjOû»ÈÔ0ú»ŽÛúJà’<ÏÁ·ü n•m »UV£#f©};TŽ™ž“:Ö_¸H×;Ž@1„Y3;(Ù²À$†ZÏ/¡Õâ*Öê9ï  ªòþû×ÿ£ƒ}Å5}Û+³Õc¸a¬etIÈútÐm>‘¤€û¦*ï@·¬aŒxZ¼üt?òë;‡}ò¸$Žp¯<‘©¯c׎yÜ6U%þ …¸ö¾½'_ðX>‡qx^Ž%¿s¢ùº)ÎÅ£ªÞÖwÐú{3¦ÅïZ£¯Œ)!¨+˜!ˆÕ°1@œ$ßê@ˆ&:mR‚¦Œü;D jÆ!NŠ}ôI 2Þm›¯Jë[I{MH1º—ºÃ·Fº õ@h;eÍel˱݃S† 1iÀ"!2ä°aϼil³˜èSD Kñùaýþ{GÄΛñ»~üΓj¹…ÅBÔêk;’!a ÕûM~…øºvä/y¥Çg0BÅûœ¯ ëý l¾oó‘ô cÈ¿Åþͨ5¾‰#ò‹—ž‘¯«>½mgæ˜G¿IÁù [`{¯cÊ4äßwú®N“ÏBÀ6.JæìŒ7è6œxôF[<Ç"©²Q?¢Wî7æÂóu¶ #B‰óàôYÍÜÓ'͈@;F~K:«>—F‰=%žcD£šÆë tX›ò¼š2èd³Ê}?‰£$vWaªSo5Mý(¤>å°€ˆƒN¸»¯Ÿrß¹Âw‡»Ç²!n·KÐüm+ѱå{¡WÕÕÌååyÎNBãxI Þk¸®b H-¸o“ 8¬,âZ®t\•»S9hs<÷š¼•Á$W{µle¿Í>„ HgDÍsÇ[¹KTÏ{IK$zK«øU’K:û´8‰{Þ–òU° H¥F¼ /õ…ÒÂãázˆ^ÞøBçavPºX_Vüatð»¼/¾…îaw¾ò•…ÅÂêas0¹x_>= òa|h]d/ƒ ØBÿÔ.ÎO ”…îa~t.ý …åav0¾l.Z'  …ñas¹È^Þ…ìáyø\ü.r¼…æ¡u½Œ/S$ I°’+WaõOÀ¸E‰ÖßFάý txFˆ{Nɼë$nÂžŠ˜4žÌo¢H}G£‹»Óζwl.ê¼’ Ó*ä€BZ,|$h MÆšÀ…©”J2–"›)[ݦ޹f»Û)”mìIð9 íÂïÑë¬ý?d/¬ÿïõæ:þš?†d~ WTVÒÖéÎÖ5”¼ó @’9HÍ5Üpé #’äpìùñF Æó´ÜïÊÁ%„˜8;d`Ú“ã]lI ¬³Ò T…ôKtÌ˰°Õ5sj°ïúØ8çî8uªÇl«H±r¿Œ+@—·åëj5ºÝÜŒCÆ0Y¦^?¢¢ª!„èêw{)W„ö<,ô„ïnøÎá!$lD+Ëáó? å`·j0¿m)™kÃt쮸$<#àÌ©…¦s•fw¯ƒ3ÄÀU½…g}ê³övô†Ý`&ˆ³å-»/[ퟧr‘4¤GØè5Eº(ÈòèH"œ/¾›ü¸t¿×ò´„°|“¸ý¬yi^°3$, ç*-­¬hs‰Èfˆ øL@"!5§ššš6÷ŠÆ7O¼"€†¦²®Ò ú¬IeŒËÜ>½íaªóû¾ÕTvs­½]‘énžÒ–^aFÐÖóŽo·á¢Ìˆ7é & #GÄBBñQ…$³§¯ç^”¸!ão)Kaâr3u€¡1©ò9Ù×W„ZW\¤|~éu ¹’·%òÚ‘w{£ ƒÈµíºýãÓÞV@YïsŽÉ‚«‰!ýíšØ‚½Ó€öLÏ?µŽ›»„.åõþŒr,æÙûwo¨©"7}%xI[.’åºYó|2š²5•øõZé—ÚÂøXeZð’öŠ‘ ãBtpD ƒT[,0È©:ÕàêÈßI—ôçñ<Ö0$ÑzSàs$o¢He.ŠöË/ëä`HÌ^{;m qVÃW×lål`r‰(ÚzX*7a<Ù¼0z_£ RhˆIÊÊJàaæŠå§3É…k¾³,@:® W¶ô2ÛÉSÝ’ l¡Ÿk±Ëµ3æÄmZ0ǸI—ÔΆ: ‹H’\ÒB/¾ÿâL|ÙØ¶y[Ä*¸…Ðáh];6›:[øÚW‘Ae¡ ‰dŸÚø¾J)5^„¶xæ‡#ÊÝÒš‰Ê³ÌjðÿWyeoSØ`*©$eô^NŸÚAaV_OœÚâww^¸»b¬ónò2^癘^;½YãÕKó®‚]­ƒ¾ÌÑý÷ñ$_:ƒ‘Â+ÓMÖßëTw•Oš§òRy£ñå¤|V. ­þŒ³ §Yï‚HaǼ ­€ŸæxÆxv¨ÌµÚ¬_›£ôx½êê2=ךjS—TÓèJj¸®èbçºØ”x>`¬ë’›Ù ºBäL8YFïÉæÓXg¯ïvÆuÿ—ø-ì6·í¶ëÒºuÿ^x}s½íÒë/ÝùùЏÖ;¸ôŸ?jͱÝõ‚qÃYdñ/óUi'm—R\ÁcP ¸£À"j•p$õHFzÒ,¬?õЃû8D$Ç[»ó:#wRâXç5ƒj{8Xe÷ ,¸{E‰*‘g>x¡]SC '*éûϸ_vOÅ?÷|¦C3õ,Iþ]yþ¹$žX¿÷¡(ßÔú½é¨K…òÛ^óFhdýFƒ8£NX0×Ú3–?¸YM†2šAqÛ~—Š¿1#~QÔOæ÷?ÅÍŒÖü$Ú}¥B)“¿å‰­wÒ4ú=‰þ£F ‘½Ô)á%Ï™A? u¢›¬²Ì,yê¹fŒÙ¨y‰Ù9é3 V³&W¶f]Þ\Tg?#Éøïܼ®K)¦Fq0Q‚ä ,áZVÀ-‡Ä”¸(Y /ç¿?ÂöÕq>tÖ0&‹w´G©«ZäÊ-ÝA¾RÅõŸ1|ëÝDÝ„cÑ›1¼Äjv¡3ˆ$³IˆµDÄc[ÄRuY½ÿÇL[vR"äm¹âËoܽkÀóÆÂñŸ~1÷;ô®zàIìÁÄß!»5ÙÓ蹕8Ÿ•¤3ƒõG­ûNÝæívïh×°ÇØNq®'¿ða‘ê‰B1¾×uÚ°«&'kMO«þ°|ſսª7½·RMRâû`V¿o·À]Oéb}‰; ë¤òqžZ'Ž%0¯;zoCçK*n¢ó®?g?âÕ_7¼¶ù¬@oSv*#_ß5KòŒÏS-hÙ#ØÏÙÊA0þÏ “½vó>VŒ²”%77Æ">M÷¨ôlÀD@°éqe° ü'?DÜž“Ÿ]œ‰ßÏ.ßdzQöWií4ú^E|Új}5 'Ï$x¯cÛêóx[ b¬‹ïñŽ!{âý§Mç3Mm¡çä+ôΖ;$žKu÷†‘FõIs56ŽmÖ7YDÞ“õüºó÷y–×=wý`I^¤ß½NF夬$^îüÄ$‹b@µHZ¤/uÃ/-œ§g¦ÞUÙåý{´v»²æ¶&dµ“í÷®ß_ÑÅ೺ÂÊÚ¥œ‡Ö!s¤-VÑ ïBãˆ^D…Û¶8~*áwœŠ¢®P…ñ_ …úªŠ¶È^gânøD…×·\1 Ä·ä/BéH[D-é d…Ÿ¯p[²óí·Ä-8È+'rÌUúº+©w¯l.ÌÏ´c÷Îdª‚&÷ß:Ã…C±˜×îý©gœӲ‘¥È;CˆƒÙ¨’<–.Iˆc-–‰îÔ/ÈÀÓ1Hû×ö(€" NÏ@Oðìf8Ù®ÃÀOSӶݧïä´å šG©q„—×ì*CÖµP.oÄaÕ¿ ^ôàBãýwm¯Ècàðr´¿t…”]âí9Ò–g?qt©PG»A|L<&гn¸ëˆGÇ&Ϊ¸$,39ÆnZðYû­Í:A”˜íß0™![ý‰¢¾¥Ì[þD'ïLe,D2ÛC¾tp tj‹Úò$r‰ žŠðSþ¼¶‹Ü—k¼Ø]–l—»¶Jâ;Ï©!l×ñôé²ù¾ûìv\|-Šå­íVž[a ×¹MV¢wÑã"Bã59²›º ýv TB7Í•îÅÍ?"s ßší®4â\ÌÆ‘¯ÎÂ$ˆCËÁúšò”H’ óF}âQ™œREš4ÖÒZž—Sé9ðk¢Rz¿k„¬6_<—v}'¯àÏ"¼õ´(Ñ¡àG¯îø‡$Žs3² ,šžáømW5J%ý€EèxK >JþÏ’žÇýkQÍE~ñêæj,4´"U’¼ß.÷¿éÙêoòwHÿî’õ^?Nam(y?ï[…ðéK?6Ñ$0)P*l4¿t„‘Zá¤p¾Óþ^{ÝùÒ¶É Ì´ò$,¹¯!¥Ðÿr+ #ʨ¡ôQGló.Â×’Í¿ƒ ÑÔÔ¡¯{:\“7á$9êsú±_Oêwu_ÚtûW…üyt8êãl­ žÇ!‡þ=—‘ùŸãv5q½ŸÉãûßÙ–øº—áÜé ªˆ\*ì3ãyQ7‚iv’ÍêW8BàµWžx­~ñÓ,þõÿ§ÞøÝ<ï+yÝçov¦[­­Ý¶ã±–çWë^’8vWgg\B8вµÅe°Û»éáw/b¬:Š ’:8…‘ÍŠHù»M­ÈËˬ½9ÊÊ+;¢³»;å5c£åå^‹tE#¯;­½êòöÖ“ïXQÂöËðÖîã¹EЊþ³ugdçͼë·Ycíº:ÿæ¾z­ÎGN~–·'ÖÉ^ùêöÝñáOÍñîø¾3nÏÃnq^üÛÜç¦ïÃôý^ ÇOY·­·¯zéõ¾|´DîÏí=Ù=ú;ó/Ÿ7Páýc·¾õëæ÷²m'þÅêù·Å%ùkN;Žú+iæîöÏ­»Õ“,­•²S·õÛ×·g´Õø0áùi­ÞÁûÂ{‡Wü»ZmI%Œ–tvБû£?&XþÜŠ™¦›îžÀäM~r”J")5×ðM÷°—Ûü†ñ»g­™¯Y,›ðì¿=ÿ}±Åz,–§¡d¦³:s…XFdCV6¼V‹OŸçžç…Âx+–»™í¨çÓ¤«’Jæ$†pÌDÀ—¡éx éÞŽ_Yói’E¾FoÂÜbæGÄÌûA»e/ ®{ï'^F'ŸéúçCN%Ú‚I+ögÊõŒÊ°Ê1lº•$v>çé_¢µVXáYã±Zö¤g¹8Õº  ®¥çØÄ‘+S‚cÝ~_È!jäÈ\lBòÚœnÉ gêëÙË®!$Aým ¨B2÷ù%›e6ª8KæÒ‰i¢H7úè’ö?]Ÿ®æý"™ - yšÏ Aøº®˜8ý£¹¥©þ_MzÖ{æRx“åhÍ4×> ŽÍZ£Êd¿àó"„§a ƒô?)z5eèEÒE¼8mpÏ´0%éEfšjî¾W߇#âZÞ ú=^ðAøV´üF0´÷ƒè }«ÒÿÒ Ð8lÐX ÕôÓË4` c ƒe9ÜGÜ+[r`þ9ë|8lPÊD1¢h¯«m‘4ºÉÄSNO<,,J/ôæþqlכּïÓÔg9 ""ôYîø3Ú9JY’_M2BH•õ£þñ±·gIøúh)„ÉßÍé?Ó=\Ü,ñù[u'*BÕ|’è…¥„/æ»·„áÈ[¿ùòN—o}ù¨¥ìß÷¿¬Äžéï d¥ÞÆ$‰Íîò—·û)R€S¬ÛNÝj—Qøpl¾ºW`gW9ˆ¬‰#ðç9›ð»:°+'’*J öÚS +P{Õ˜Apüè W¤ØÜÞiø:¾¿W®â!gœÅ¹.ÀD.w|Bú„.˜…µw/)Û~6¿ò!lD.ä…»!pÒÐ!gfBä6HZµa ®è[¦²õnµ°„‘B}*BHåc©ïª%e¬#Ð7Á.35õQÄ=뺱C(‰xÞD»Vû\O$‰‘n`»äk©Á|³/½ &`^ÓmÜnýa§ fzx«‰#=÷þïõ‰‘¡Íí:m¤·MµÙ¶Ãö:sž±$b|®×~±žî²ß 왆GiP‚K‡g·În: €´ r”ÈX)NÏ}–$4URÔÈ+Oƒìã¹h2Ú/*dƒ9¡ªÑBÝ9À« !…S ƒôßlR_`R%ùý–;Ã`ø’ÎX‰Ñ@(:¤¥ ©XeŸÿd0”"¯?‘Øû÷úø.{®Ï!p®ñû_Ù—ÉÇf[”ûž‡ZûÊå{n2¶£W“χ‹ºÂÎõ4½|ګѽ¯ÀöWBÚë3£ÃâúM ·ù…ôø!ÊqŸ+ÓÛ’á,zü]þÛŽºB=׈ÏG½‚ðëßjÑõÑP#ÈÅrÚ _?®Æ ZÒ :ç»bÜ0ä_)éäîÒ~úiçž$íUŒ¾?‡CÄŽ"‚?&ƒ+H¡ž éíp¨og§Êælˆúdƒå!êÐq»ü¨D†¢áûåÚ`e !$Z×äÑ}öu A´EtSöHIvüvt´Ñ¡~ËÜOþpz•ïwœZ®;JÛßÈYÒé’á £ÚÒ!q¤,TUïÈ]¡ ¨ØÖB܈^×V²ÏÂÒ¢®…¬…„-ZˆZm¸bÙßyÏ'¹v;D-¢Þá ÅìÜ…lKGÆL—@Ð|ê Œ4Å;;»’!lå®–‘"+>í†ÉoŸ¤hî)Z8‰‘þߟ¦€áZ?¬}§;(®‰#]®ÏU€ù=k™gªe‹Óþš¥_…Å GÀ™"ç…ëfXFm>8¸²º Ói8êÝË™!j ¸_ûò|I U®üÍ€I5!$LEÕc‰T.K#!yí·`ÈÑbÐë¼Z+G¾ "ׯöóÕŸBÏáœug¬«¬Î‹Gúf·ÖuþÁH’½Lt‘ÉR‹)$ MŒŒºŽÅº®ÐoêDV”/o¸m°F̰…Çé„,æ5R© }×!ž+«Òý zõ=Vë¢õ»:¢ï{!d…šµ,ˆ[ÒÊÕv8þ\¿++ø \jn;Ü,p™yoáì5}͵}­ù éøT…ÂÈY™Aa † µ°BáÈZnhBÖBÕZgàeàÈZˆ[D, ¶ZÈYâE#Ko<¦´Ù­EX[ˆ»Y)8Õ²¯‚7PŒe„Ia_Œ×¹=cxµ S¥ÌT©XÚþ3xMz©(Â.E0)©vöÖÙÚ],TPÏ9£—Çh3Vc5ÀÁNjùª3\âz:ÉèÉòµÃ†µÅšhmŽÜù7:žfMìJi§e ®Œï§‚ž‰Md£®¨(—’1 ©)¹™‡éíô”„PA¬[˜VÂè|LVú§‚,)yþÕfm;ÄëÉÛ [!Yš‹µï~”cZ8²uxFù‡ûœ¤ÿ—ùÐà^Ÿâ@ Ùªw_“Lü9$}¤Ú©ü`š›¸#^â#›y †PÈ…–bãQK'ͶmåÂv_!+¬V4…UW`&äBíó»”"yõåLòz‚k…Ç1zÚ¿Áqø4þ.¦ŽØç£yëîM~â§Ü'vذz£ÆzÓ¶y][[èLOVPÃþÅV¾msÄßaëA±á§LIl¹ó^kx«¼OW›ñqu¯åuõG7Qý?¿Œ§«>ν õŠa™dÀ[àû!WØR¯¦€–뺡nå—G †\W©Ò¹¿pBÒ¶ u(,´/O¼»÷5”*^%¢t …Šk@÷Tk%þ™ý²œIpM ó„Þ ÓÎ…± ¯¬ØÌ‘j›K ‘:GŸi†• ¤š;å±R¿LmCí¤ÞÒVÄ‘êW¦ΧBÿ˜ÊT°™!ùo,Ö±ˆ˜ôÿÒí>)ĉíZ¡²3+:JH]¬M]D ägž¨ %ܰ:YAYhàyÍè§ÚÛ¨"Ižt€Á`Àû(ìüºVD‘š‚t—¿m¤oB`!{öhÔÉ’i¢ÎÎ]*œJí"ØÂHSG”ÕZ·k½ÙÅfW®ë4R‰#%ÚêÈPYæHY‡C±¯µ0Áih- €'…c%GØúOg¨è^¼õ€@DA´–d.õàú·œ¸n“' /…¥ìpüÙ®[“J³ñÚÆû° Âq_霛JpˆEÒW'¶ÿâ=A`×¥LV¾Ò¿¸…ªãˆY²B„,_½´ˆ]Y Z®ïšD,!qä,{M²ìÛ!k¶H[$,!~Þ±HÖBúÂBÕkÚ!n¸žv_»ã6ל>6jÄ\´¤€’,HiBC ÞÓ,3œ»1$¸—Nøv¨auwæX&¡ŠäÒÕÌ"µ•þ¼¡$q×'ðn+·Äiãø/‰Ü~D…ß$-ž+½HZHZõî¤$‰¦¡X²<Û´²ÿVUiZÊ»qe¨â$–ºJT BH‘l}'N© }ÜD%Vúhò¦BOhÎðHËŸÕÉj÷Ò·D-^>>|¿!t:âv9Û‹!yþ×c¾¹"›ê²ÕòtäˆY°Bݳ5d…’«xBʶ«»õ¿K˜äî7†Û+Œ¥C^oÌÌò‚îã2,MYDÃË —•!y­u³ ¿Iz nŒýÓ¥™[+Ðr”Â):iŠ-[÷±å.æA¯òacœàx‘xÿ•?ïJrÏa*Bû=FjK£´yÛü:!}®[0™ó x^F\,Ü|8á-Û3c‘å+¹Žx¸åú¾»Ãpÿ?êü¿Âæ8ÿ}÷ž…ßWìäà“?ŸCYs\‡‡ˆ[„,ˆ_ò¶úŒm¬®ùœöZ£í~ΧE•®¬¹Xh¯¿!y/>Bõ¾_k^\%¼™ ^0…¯(-‚öª $,º"ÔBÞ²¥%@¼i³„ŽL¥Áe&¬Ó$ Gþ|ÏfªP¼.ÒtH7sI;4"ðý:êä®z øIЏž¢Ïeïu‚(‚íæJÈ M±4Ê2ØÍÖ ¼µUÄ‘ói¸ÀÖ%R ìªð•+Öö"øÊ)Jó/WÌc ^u"#ìhðŸ¨ÔÀäò|åÍVµzÝw«ÅjXèqÅÂêôº¼­…¼!iûZ´æÿ…ë#U³W³!i߈Zô!dBÏäÏäéjöËm\¾ÛÝmp1è.¯!V„‘ávÒTä YwÿµhZ5A'@ò^9΄ÐpÏ\ø·Õi+ůS­K9ö‰¸Žsà™k¤·(rÎsï+è0QÙ žU“™¦(ffHüSŠk»ÓOŒ"„A~Õ\gT±hl~>Ö)ªt # ddX¦I‡ÆˆCn›çÉÄÌ'KsàH8«0’#–e¸ªð’#"‹ºÈ\Ü…™„-UÍÙÇnWÆÕØ|½/¥Ÿ}Áè^}Ÿc˜)Òò¶øÏiõø %B<>¦;štŽz#ëß„‘‰¶r)Ý­ç®\æ²ó$5 e™ÉK@94¤&ª{ˆS¶Ðì>e+bH»ì.ýáêU„_j¨1ò17;Á´é5Ëøu:Ì_¿S6åöU_ãÆs~÷‰’GÅÚQ Eͽ«¤$‡0 åTõ^oªwª}w?®™0ñß{>×Ù*)w~^7;M¾‰!åÙD]½»1ñßvTP|s¬Â@4oY_î ðyäP¢`¬¹þ#Àê£ ø½Ó›>ï§ÒúOú:Ƴ &8‰J D0‡-D¦8˜ì&¡*ŸXª1ô~¢¢÷¨dNã.+å¬×˜û”,¸õ:(zxÉ»‘/)BlT̶ñt-Ó¸Èî'ŽÊj"HŽOÁÍäÞ³E¢ðzØ…….k§ØTSg܃cJNOWAž…;e#ôõû/ãMë7-nzþã–2ûG•[îv_…éòy¸8ä]½çìíʸÿž'mö~ZJakÙL!‹ÕD ÿs‡Ñ4yïšt@g$†‘ti #ehæ}É3Ï„‰Ò=cØjõ:_̃íe ˜.~y2­ !çœè¬x) ªÞÎx¾ÉÐÁqB€8Þ`È^g}ÝN*¥¿Lw%dIÆ»àÐ×ÿÍP_ZÌœWËÊØWÊêu.×/U°\‰ p…®ùyÄlAMÀH lIøûãC4é:d„ÉZ 8ÿ!$GDDdasKêñ8Nî•S?P¸S‰Ànám‰Áb%JùFñ$2p.ÄXZ7Ü×ß@ Ê~4xöb˜¨!£?\…ìÌ•£m1Íò9© qj‹;¥`qÜþ?µ»E€I¥4bÀM‡*fì&ûfC5ŒAeÍÙfÀ@é@È´RÌ€p)TŒ)ï|­¾ã:ÿðìè©„Ë’0ÐZ&Í+í\óW¤„‘@cÚ·ÉrYZï›â¿›éÓ¨=Á°ãn°bŸ“D8Ve³v$3¼  {w^DXQƒ¯téløúCæõ? %DUþJKÅçûêMµa 3ý5®þ=¿Và›£ßD‘Õk=ÉÛ¢¨+Å íT:G7£³PPhV·25©…ÉG&ýþµº¡ÅPÉ3<õ®Š[HÆï‚H«øÝí@´_4„v^ çKÑ„}›Á‰~<ÅûKžÜS÷ľAªa0»³‡i}ýF6TcaVl"Hë Q´Aøzµ¡¢OÓ“¤YMXÃâ’ý$^ݵ̓ K^F[.A󸔭»ðÖ7)Gq%ã>*^4¦QVq/›*ï±Ú8³ #Æí¸ ºñ˜åÕE÷=ï$[Ò¯oÈ[ÿÇY-íðÜí––èª>ò, ®ííÅ{)`¤QlÈQ-7}‚˜’üh5D•Ú½ñuøÿ—Íþ¡fžŠ#­üø‘$NLƒØ…ø9 KÞn~djz_¶Ž‘uLœMtÍ@±˜9­U„祫ïɨæ'JH5±°Õ%/"ñ2&@ÑïÞ./@ãRªÂH«W¶„…\G» º¹~0*‡$˜Úç3²A8r=ùÒû´ÇÍËÇ£ÅB¦Ú™„å¦ TßÛ¯ "`û¤‘õû½0 q:+Ȫc)J(Oîˆò¦DÒ¶éœÉ«S³Wþàðc;4Ý㊥u î˜ÁÜ3ùbç+žŠÕó ¶*ŽZÅtÙ׌:‰YYíAƒ³L¤&·æðÌ÷ħœ·N‰,o´Ioe“e†ñè[ÿãX™³>Ó—Eikç­—ÚB€ò·É/ÅêÑ:/÷ýÌêíª‚³DG#¶˜’ kZ¯µu¦‚ß™T+Ž7²¨ðTô(òàð·seκV\þI™ÍÓãXn'2ωwÍN#šÊë¶y׳ÉÎæô•Ëlÿ( É ýÁ½k‰™(éXPýfÿ±Øah«GïE,¸,šîTè›ÓáhIL&q<”®;/‚:ÉÌŒ•qªÔÉtòë謣¾8ˆ"Yüç¼öÛÞõ™ç½=k{t‘ë=¼ÛC“½­nM´9f<ñ{¯{ÙâtÚíí6÷îöñ|÷^øÂÆÛ « Š%)JqG$¬ÌÁÎ@pÌr$áÒ VØJ„¢!#¬ë?È[±2u¦ÒË1·KcnÉHNï:úagGgÐëÏ.<´îï;éÞuÙQÂ\Q܉ÐÅ}N::: »ÎޏëŽË»¾+Ž¢âŠï‹º¾}nº¾‘u}::Nº:㨸ªúGw|wÒ·Öë¼úWEq×Ojί§wG_O޲ë¬;¯Žª¾•åqÔwuåtw_K¸®¯*»Îê³¾:Ë»;ºòà®.늋£º;»à¨¢»à¿t]×ÅIÑÅWÅqU|WwÙVuÕw×ÍwyÒUñ\uÞtw]ÅW•VEU•Ýöë¬+㮼®¼¨»ºï“¾•ÞW03«i‰M1#2–™D³*¶1™5b•f X™U¦Z²¯)«ŒÊµc2ša¦V`kÁ5d-yldÕ‰Zñi’U¦-2+e‚†Ý6&h›‘ž˜)WÑã¶W«_%mí°FNgU]ñë!w•,Ïx½ÝÎÖ³÷OÉÓ™Ùw<ñèºp¿“ ©Äû“]µ‹lõÿ·T søªœlϵ?c‡k ðè5ódb¾ô>x\ÿ³I'7©úuö>x·õ¾Ÿ;?é¨R2ô~^–YØØæ==–Û²™PÍU‚½eÐn}^Þ??½dßÑŒéZ£Ÿ°ô~‘ÙuÊíí1È©…X>ßÝúN÷^ò«¶Û®|ýý qœ¾fåñ½ó®‹w’ó‘8œßÖîn?3¸•ìÞÖÆ«eôìð‚ùö0½;‹MŸ®iéêäõœ¹9û|#uvúÚY¿sHS²±¢À4ä<7ýîÐÙ=ÒKž?Ÿ÷»ékœ1†|ÿÆûÂ)§Ü`ñ˜ßÖyhL Žp'æ÷(÷P‡¼ðö'ƒÖ÷Ô„º;ùžÜâÜÓYÒÇ z>qù+¬/‘ŠvÓ¿Ðß#ŠRÒ(Ñ\bº/9ñ°„/ùþÁ2‹ÿ&Âz“Úâ›óUÇ`É%mð™^Ù_k­ú~W§}ƒìéß…Œ[EgWþ¬Ô8ÕŽÿØÇߨÀÁ÷ C¸“;ª3Ϫ‡ÆÖ³÷rà¯XÏíT¬ý*~ŸúÇgxšº3êÒ½Ÿ*ñHزR+Ó–~hÊú'A}r°ƒƒÿì®"#5â«óꯢ¼ÇåYòÑÍÄÍïçM¬Àæ?´šÉÛ‹3多4Ï(Ts C»Öšoé/YôÐZ®,vËú‚)&ä^ÒûCu¿×ó»÷ð™W ×Ôßukö¯u¢¥A mÅÿ ¤[ûL¦Ñæ’²?ÃùÇöí7B. ’óöÛª®òžwÈ@øscùg g³>¸î§´J~ *Œ…L·@‡¢/¾):S7㦮sÚ»_Uúg7/E;-¡ýÿ2ËœßèÿÜׯ!ÓôΓ³‚Èàۥ“ü&`€a?ñVåù=Ißoý®ÀB‡Iî†WÇ2{y<^›ž‚]Ýv¾óUÍKÎG“ô3ý˜Öµ¹5õ õÇFóÍŸüûñuw¾^ëaj;© Êáô*'kÞB®ziðS’zÄê¢öHq1KGB¯ÊÃh›ÚσdÀŽ­ÌÎãQ…}@x™í>=ÔØ&òn9é2¬tkþÉd¾¯eÓů•ð4®Qm¶-¥.ÑÄ ÞM¼€“Ô´¶õ2Óx´­šs“ðʺ“Õk[žp,£„Üø‹#J­% [‹¯™fµ$Ôg¥t&6ߟ»QE´ŠÅK “·üxT;^‰Z›âÇáäÁ@{.»=Š%ÞïVƒ×#3` hŽ…ÚoÉ^eåUjtì3/­ÝþœÐÜ¥ñ¬7"Òë0Ï>Pù Øï0×ɦtˆ}w+Ò'åÝtÒENyÌ¿ÿ¡÷Nò±«{Â]à€ÆŸ;¹XÎ@×çxä=›·òÉ_.ŒÙe±< L-o2úvÉZd·æùÎ&ÑBKbg’·ŒJÅû´Qñ¨>r"óxû—á2F˜¦5éùÜr›&TSLH BÔáNè=.Z$œY f@gcW§Q9‰ü(¼ÁŠQûÄÁÚ.*/Ž0Í ˆ!\lÿÜe‘M:Ë1 —Ñt¥Å!X¬÷AN©ÂVÁdŽ– xçßKÊóMñû+kyÌ€­Uh³€KûáJùÂ=ÖÎñ6å¢\ïÛM%¾áÃ{€LŸOÏR{¿EÑUh8Ï2Óí®îÏ”YálôÉV{¢÷D,ÆÖnÅòÂrÒ´â"…åvqLù 5|«-Á¶=ÅŠqåQGç+,ˆÙ'iœ6’³D…¸L±Ü!ZT$#…<ünè¸ëetýN½L¨kÞ3ÂÉNY- % Ž(ýR‹â{ϱSÄRo1^GZ£ÂÒM7ëÊ\DÎí3”üîjT(æLsøè?Æ®Q˜Õzý™’a ì\é*>ÇéWöíx'^oF‡êù0ÉÌäB>D£}9¶Ûö_úûo\àº`ñcýn"ô0 pÿjqùW…•ï=5Ö»8WÛCÛ×®kŠã«ÍæùçMVwŽÒ©k¯=ÓÇ﮽6¬êº>8ç=9=1¿?|©ï9ÆÆ|®·ã¹tÎÙ·Mø½¹Û²µ©qŽœkºqÆüÖ3Û˜¶Gdëý‘®±Ù·VׯF{uTÝñÝ.A,áÑ®ûÇò¯Òrº÷·€•ï\tßý]}û/Ûí»Íü¶GO={v1²ÿ“{6|cŽF#nëóÔqG‹+÷ŠO¦ ®§·mñš«ö¾³‡z5x½…tïyÖ˧wwCÞýݽ||øÛeÝ¿1ËÆG bo>þ–ÜvÔw÷uØÝu´çUžïøÙƒž=fAìíîë¯=˜Û‹u¾b­~»Þu…sÚ<Ï+_(˜j2×M'Ô t­˜º€1°¼€ H³Mp¤„zÌ¢Ùí&›Š•¨­ox÷ðôëÑzþž8;ÒXۡͳ08µ·íÁ›ã£«­ŒZ×èAˆxC QÓé·ù¯­ö±¾Îú‘Ïæç¾/jáöÆxÅù½y ÔWnºö+¯gKF§i㎷Á®=‘=¿Úyé×7îíã·3¯g+ ð ç8ÿUµïÇ }“ù^.Çm¡§àßÁ<íWØÃ]_F{•¹ÈëŸ[?ù]Åôðm¬lµìŠŽÎËëÇMj‡_÷«_·d³œo6Ù~Êcœ¹Y>=¯Ú>³©¿Ë~Ÿf.'ǹìŸ.â&1XVëÛâC5nÿÚj'Üôðx¶ŽÁÞ‰ðvZ™ƒØ£'i}PÖ6îæ·ŠŽ&nwK^&äo¿—ç.Vtè°Ñ7àòÏ<\ø·ðô÷uãØöòþÃ3=¸‹>éb+ß³Ýk»qt²x«l^ÛÏbò±mƽ:mkQ^e;bºŽMð‹Ú|ö¶ÿ&¼Þú#Xí¸Û^p¬_†™;»¿iåÎxRl 8+Åë+³^–Šù5’¸üþmïr§‡àhú“ú¹Èðù\„(³‰í’‡±Üõ¦p‘5úécm 9(úQ÷ŸÜPaÿÈû«ú +ÀšQåAûä-uEÿ¿"}²$þ|in#0~‡ÑÛùòÊ—þRÑ ý%€+oO=E‡f˜–Û¤"?Oy‘{œ+à¢ÆÌ…†…×iŸàõDni[Vukb|ÔŸwÑ-GG5côÓp;Þù7 ‡#VûËwøÑ¡p^5¹9kN±U Ó*ýC¾>®¦ïlþÝ2Ò}«ÝÏ•a&±ßQ›:'‡ÿƆLOEs—®™ÕùR³¹’›³Þ¼ýÖòÊØƒ_Ìd¯ýšX7ök«åÜôJl‘ýSë^»N<ýV3-¾Ïwožý!÷Zíû.Nû³´Ï•ïóVd>†ô$£T¶íiý´}q;.G–rV¹{Þù ª_è-߸òšWˆ­Ûcs¥g‚ü¿6ÎÉÅ¥/‚Â|5™ü °ÃÕbàܹ&ëmƒ9è7;5ÓÑ÷Pè‘X~½ç·dt/Â-jÓkŸÓ;úðŽ#w¨w1¾þÿo»BëiÁD³ìnm0¹›DÏWu{j¥²ô’öÓci;ØÞôൾé^¯•÷þIJfß®=aŒ†à»÷7§ß$ÔÃOÂþS+á£bÝj7)p\8.®Æ‡]ªµ¶›CÀþ™_ÙS—éžô²|Lê?—É!sPò™½Xk¥×{xÙÌk¨eïUqÏç‘·ë@Ð6—‡Y³º€¶”çÏÚž|'*U¿ |ª/É1^ƒ£ó^ZàVµ|=ûÏ5{€Ë¹ë‡ZÞƒÒÏj¦5ƒ y±ðþ£ô™S%ðuq0uúu¾û¦Š ~‹¤÷ÿVi{”U§¬sº†½^TîëaðWl”Idõç·«Xû¤¹…®#º«×Ô't’V:óÚ%,û ‘âG¨Üv“ãàüñŸgOä:Q!)-jß\t{ü~saï/÷kæx»?ë‹_os¶§=ãó"ruH^õŽ´ómä7Þãz_Ç"o—:šõ+˜íG²ÙMj°9T®‹´¿ÊrÙ >:#@+ów^”öèxFšv~·!ÍÍÓ´ÐÎÛªU]zгnßüJùÜÊ+õXnŸftÔ‘V{üüçËÕÏ5jÃËŠi¯ØÄyþ++Œíïãã¼ÌýãlµðõL|ëf{L§Gå?xáçš¼<Ó“¸~>gÃA®A;pöì%†è€P súêÜé~óŠS²| ! &ƒßofJae „¶ü­ÞjáþdQÚD$À`ÄÁˆk³ëc70– »ót'­‹”|ð#¶½Má_‘3Ò Õ™$|þ”’úY 4Á3™gK$~ÿ¯:ê©s”E3@Ø<Î[<¡¶eÛi“¿o@¤QkrIŒ ôóÍ4Vò?o=B½A(1ð Ä—7$ˆFÇL”Öèyoèr@ûüLX¦CѹûÑ”JdsWʧ­v±Ó(e2¢­•n $€­É(^Eê_Ç:R?ú˜ýÙÚ*hâDN–¦Z"dK ÿFedz¼|’ÜÌB> Ä‚AiŠ»'¢]ŸÙ ˜–—ù‰°t9έ‰4Ê4ùM É㻤k›H{ê\e·ã|=Œoß+)P6…\Í<ï¡àøl´g¥ ÄËCà’ÑL, Ð gK'çBVy#—ò%éÌ”&ÎÚ¹”yDénr¸ NÉÎ2ð¥(IŒ[÷»)$1‡g Ù$”ë©”½Î v†S>‘ÈîàåýîÚ`àgR€{—Œô}‡n-¸Kþq8»ò*C‹öm2EVêó.FÇ# ÷ff…ss2*´i$ˆÍ@Xd¬r ´’7¸©¤Ï¨Cæ¬HCb¼Æ)ɶ„³–hDLb §óê§DÃLXˆ€z ¤‚«6$»Ì‰ “÷Ú ™)ÿÛ àcùÈog ˜‡çý1y¹N|”è’LØvq$µÔ2@3‰úprÇKyt±ÏF‡ûþ«+mòc2Š:ð›l$M¶Žôô£2=…šÑf¯ks/˜Œf7Öõk3wu9Îô{ÒÓÝ~ß]º¶˜da’J-ŠJe1ÕÊ/Ì„Gi7Xôn‚GOû|pïNæY‘!£¼€.’€µªÂÀýúbAB/®@4yF Ô± Ù‡ßë,œ—ÚÑY*”É;¶¢@HÔ8ûÐ$¯°(8؇bgt¤•›å›éÂN‰ˆ@Æ–Çîþ°z’tͧsÓÌŠa‹O „TrZW}ó¨ =Z8™Ž7Êãäbè$×W‚Ó2Ãâ:Ùƒ½îg$*§ãš`m$Íl ’^3çÉ6—Û‘££²ÞÃ#@'GÛKGŽ)&††ëÊ“ÅAi¥qÈII+Üw¯òÈN41vé^¸©ì/é +œ«NIŒ¾ Ã\…ŠÿÐÙf÷û”§trG'Ôu§{ÇÖRôû&óö¶ô|wó–ò.µ ÂvNü_¥n™Ç`BW©à1½~¾`÷§ßîÊô…Wü2\í*œgˆáK){ƒÔŒïCÉÎ‰Ò ¯>z$‘cš*¿>cðœPÒÖï„/1¨¦‡lfbA¨¬@¦2:)òõWZ€çŒd%áÁi û"; „b>l·•b‘EZŸ‚ëü'ÕYáù÷n›¦ÒT#ó­Õ "Ñò`0i6J*Ð-2?À·~µÚ$«†WÑr ™‹p# C [ÿW4Ânp†©ŸñªõôÈ .£—žIQ*mòVˆCLàÙÕ´z¾­ÿ…¡±j€ ÈŠz’10›Š”€ç" Ì­ÙL"š‰»ÛŠŽÊ,ÿ:nŽS?’ŒJŒNJZ ‘îf@þx˜kã?â…=#ê´õŒÐt؈±øèÖÿæÚTJ¼ $š•›ß®Z .Òyßm)ޝÁcyÚi/ÈðeͲ(ØÍŒ±E]«6³‡=¸í-—ÌlgnýÆSšÂagäç‘ÛÚ«òøŠôö›eÌD×/fƒ¬¹mþàʰ ¿éD`4ïƒ{•×:Ãy bXH¨X:¹-pû¹"Ñ2€K/—¹M0=6Ì’^´Ö÷ÿ¦aÞñ’GÔzL„°ñ3]~rë8ËdN+÷ÑèÙ0f0t­ûöiôó#¤ñtž‹}„éR¾ˆ’—°ËÔ‚–ï””’;(W¶¤.s©»ÖgºýÔEØMʹ$44uÚ]ïX¬O®“pÇ[áÛ;´úª#ñ«BEV Òéw’$“Á@Ù³$µüî^o ÎÕu>à¶3¢“gBIà-Ñ!>?íÂÌ44$š¬Ú¶ãeÓÒÒ’­ÄšO²÷Q$^kÞ?Í0Qi§åÂZiB\k1긟§Uê çè‹}¤P„Ó4.5¨M ˆ0@-Hš³~#.ø¦§'fj9oºDüÌôQÀ ÂŽý­†A\& ˰Â2LÕ(J¿ÛjgÇNÁ>å‰äåäišT#5ÂR ^Vb@V €ž 8näªu5¤§ p˜y­Ð¹ù->t™}^]vtcÉàC5 l”ÿLyŽ@3ùí=çmÂYsKåq=Ç%çÕV^ª ä"Ìä˜Àë8¹’&[<Œ)±8H•]„òPŸ€ÔŽs; ‘€D νŒ”Yn[òu¯ùH³SB-l% ¨ØËÔ—¹¾"X¶PrEÞ—Ef˜|D” }ß2`õgÕù’\«( ŸI‡õ&‘Õ3ºbíf]ÊŸ{a"\\ûÄï Áí³KlQ¡;½(ƒÅÝ•àâ“Ì}ÀX<%€ô½_›TçžÖcHáòH!‚ ¡B±zB€6 Zðl¦AaRÎn¦åë18ÚO‚ïüð'S ƒít“L‡ÁÀo¾G¡$µ¦:‰$0Áì¾\ÇAB‡o‰/†lêtdñ.w®¦æÔïq•ZŒguÂÍ$Æ—üRBƒ¼‚ã®ê%ÎÚïRêiKÃ$¹œÜ M?V€hùœ\!n¥Štîaêsµé9Ïþ^Îî`ýé 9ü¡s«Ðǹ —t•ÿ§˜RM?w ‰#Üÿ_BûIOí©~‰ü "zý)"nöñ…ˆ˜|ãOC…eFýô£¡ììÝí4íŠø@ £,·ÔsàKK663¬€ìd¡m !{ð ÙíkÉ+&ó;yÂNŠNÑ*¬óL†×ßœ”Ø› Ž÷—öØ)Âí“Úéq¾¥MM"u˜îZ9++‹—·’£&|ßйM,ü3G#’f*ËQ>ï° ¤ÐþZ¯»|¼Oùtö~ŸÅ•~åïìhª.†Ù ©=vBò÷°dõ“—©‘a$×wŽã¿û,Êì^éT‘ÄÁò’‚AÕd»y%¢ÝÀ¨0{þ5Õ)vtãÏø`[G$Ú[ôSé& ¤Êñy×x™L4?Y%§Æ‰æNÏK"‡…ÁH„ÓZ.âç4ÈãÎßUÃJÓ"_»ºi²Ô’&è­w"ª«Õ¥2”»)¦Ð~7σD+¼@Â~¼²qéµú¼²9˜éf#¾4w•ç¯Éõÿ³vùލª±íÖîÖu±·Â¸§1ó®­<_?Æ &>á|Ì8¥ç±öß`ªµ4—¢?íÿè”ÇÐLõ¾¬O¢½Zf}éÌæ}—žgù~}£´(øj r ü°°ÐÜZÌÛn|±D@EU`woöO´ížssÓMw¦o°’”ç[L„•ßñCÝ&úO1_³œ‹©õç¾—:g£j®Í냊E+ŽgCXÇüý­õ¼9ÿ”çmŽWÙ•è¸xï.ZÆA>äÆIup@Ž»Hi6È€c [Yfi„ñ¤¿YîhE…‹¢”-ÄB +»D—¸2úÝ¥$êÐ4Ù\ˆÒ~è&KË´W>þº’‚uÈÍ3þÍ 08€L†“ôœ-Œ@eà„òq; Ô´_DÛ ”úL†“YX„›Fj ˆIy2„Ûÿ0A‚j3ñS„®ôZ\N¢òªÔ¥¶p²€lº-š»üá5h~4€ñ€ÜÀ¦n÷4›l1­Ú …§–Ñ© †;M"K)ËAÅÍʹ!ŒW, ú=YÔàØpÌ câ5?çÐLþ—¿’¢Á°çØÊÔx¨¾LôLHMå`„Ú`ÆÎî;•u"d1Œaÿ˜ˆ;aAެÅËe@ÁŒa­ZµSì.b½ÍäÿŒ;H+]ln–> ü ®]’¤o7˼¤îÉB»i?9¾Õ)oŠ(ûYbCeÜD‘¬Šm¼Â“Ú.;× ](Züô Ÿh&kºûÓLªñ·4C:6”c z©˜.µ˜TÆÄŠ%^#2ö.žL°4eš;Îf:c‚»ṡmƒ¼r DCoÇ!>¢e$aÚŠxP˜ÚÕtGy©xæq¶þ7Æ´ù…8\*HÝw‰0Ñ0†¿ËæÚ“Ýý¾Q1äfŒõ!ªêèI=sPÂËóñL41Œî­0Yæ½È„Úh¾í¡"CGK ¦Ѽ´qÙ[æ ¨Ý`+=ìÄ´ºyŒÖÉ^>™‰!Œ8¸°Ü2öθ[%àÎ.—À…àºRËÔÈ–V²×{TñèùÔÖ˜ÐÆÝ-{[Œà»Rit~ÄX9ëãr$ëµÜôtžÐjЬˆ¶ß<Ÿ×UöGÃîx}=¦œó0±:¼¼)vÉ_$rÒ:ÌDwžöôÓAzp5Øל6¿ŽR3›>¼‘þ;[·áuàrÿ¶ŽÙR/†¢@ÓAŽP4Á™h>y@ÚUlyt‘§ ‰0޾¡!1Œ¯ÇÃ/4 3÷µÊGVÅ t… oíý½Ó“›ùÌhßÇJƒbm°ì.p»ù hÙRI{zä{Tüd”Íw@ëpZj=„J×@‡q!Bw¦pœôÛôÄ æ66»ÍaÝzwCþÐ;f…üI¿‹éD:HZà %Hö‰ T‹t¦Uõ8éÝrWªù´FQ­¹Ãö)SojªÎÆÓoC ˜”+oõZÝL±6ºè€Î´àƒ¡KÙ›ˆ© MùFfPÆÓ¸j4r2±ÉÏ÷p„k˜Ò^Dn<Þ)§²7z¥*^\Æ cc¾–9-ÄÁ‘—Å(W!b9yH뚌÷-¼@w׉è$t­×€Ã4É.é"Óâ ™¶†5Ëeå¾z;[Ûw݈§E+Í´CmxJÖùÝÔ¥ îéí4“iíXIª˜G®‚F®KÀ”>Â!ËÐȵ€Ã¾s¦ `KjsQ<½¨!6ˆ! 0³&ˆih!÷ ;|Ì+×Z‰óp”4‡Ðâp›³_ùðÞ‹Íâ%–ÂÐmº8ƒ/ëC~4‰ •<nQ*1ë¦W®ºr¡,}cÖm÷AÅöÄ-tµ§È%p}°÷rDw.5ÄDBðϲ<‹.`¿<Ãð8#1˜í•FÚÔu»ŸðvÛJ.Œ£Å%O{ÎϼÒÀØïûG’ïzì=1Ù¦* &·ÅD«Ö£Ñ‡í\H!·p(y&Šp<Ü[¤þ¦õr NÚyø†6¬mCæ¢ ½Ž/L&k~‚ø¡ wjAïKç‘ûJj ; ÍÁ|rLùª3ýgO@Oƒ… VÁ5÷סaap|'É2†.ÒŒæîþ9aÚçZ(°ªTÂZi Mزr’ñÓå ››… O‡ô0ŸÞ•ÿïÕí÷Õø‘S˜dE~R\ýžüɯð@ÆÁt6Úñ– Wå _CPk ,ŽaîÚ ¼œéÛ.ÆÑ=s¤©—Q'KÖû·ìêÔE‹¤6žþ @$~) æ1Œâp—¼A3]kh6Í!´Æ4•™‰¶¨/Ü‚\䎯üîÎã¯×¢ApwTêοë«Ó“ÛOêß³º/0¹?þÃÝîó."߇ºó¹s‹¿`¬§ÇÞ÷^Wc7~oDë/·_’ùBäî¾÷u§Z#¬:Éôß™WÇ|v.ú…åyïkr#’,ü}]œ¸")ð™WÓéäŸvØïÎüÞùºÎésŽ?Ag.ï­¾-Ç"¼îãy’ò»/2ä?3ä¿Cøy]ô¢ÑËlE~;*G'm^^ëÖ;mvÛÜ&`Qô(Qt´©Z+ð=$† øÇEç‰Öا>Þòÿ-·ê~½WÇhžLø¬£ç¿|úÖZc¾ÚH¹†Ðe¢-Xè--%: ¤fˆ:þîKIówÓâ|ÚÛ“²ó_â6”¬¾{?ø¾zÍóhò[~w·žväͼ¿ÊíëÿÛ}vÜ­3ÓëÞÓԑЛ#þÅ£þ¸“ ‚Kj`" !÷Ƚq„ˆÛã8¢R)û°<®œ=Î7Ù”°Ù:Cîÿ?ÛóÏýÀR~ ²pÉ¿ØìsY&´RðTôÕºJI­e¬gMÜñ³Lk#›…Gx…ˆºÁÅP€¼õ’‘¬h†tšÉHiçß¿"ô0ØýwAbšíÍÿ­DÞvLԺ׉‰Þ¢¶’¬š>×%¨´õ” &­ñ‡±ÓÁ&›_'u§s‹Ìì{}SN~W”f¬œV"K{•C†É.èîâ‡9Bw.N 6Š?Ž:öIÖcš‘öµlaŠž<¨!1›ªX<^ªÕ€Á~BÜAWo^ã1S €‚ÑV èÁ‡_4 ñ¹/ÌØO¡Úrß5-£%™÷ [¤/Eͦ£.#ëƒJÖÍŠwvˆ],vò7Éhëêë;?;Úä¦)·™¯¢b¥ç³Ø ¦]ŒC^µžRiƒ|rZ?"]͟Žޥ¡¡™aEå£õ•ãsãÈ'jÊëΨÑ3äW Ÿ¬„ËÌöñ_3Á(; ³,¯^ÎBxࣽ‘ÆÞ¦$³8Ž–c÷wç²­Òtih ó(ð°»w'kˆ*­G^Ð…3li½o³Ø–>FiŠ´óϹZ8²úÄÕÀŠ  7ŠQ7\\\ïà†9ÂpYØIbÌb¿ì§·þòÅSnéåË8üÇS‰áîýÆŸé›*pubûlƒÕjË.9Éõ4Ò%îÁËIACU K÷ü'_¬-,ýÄõ3Ðq>·È‰1†—Ã…f»Î[ìAykIåEc†ù–7ÖÅàÊ­E4»¿]$¦²¸¬°‡ýóvnfÎÛ>™_<Œs¼ÇÒÑ|Œ(ç1W‘)™¹ÿíNÙãç|Nͪwæ~÷ççýŸœÿ¦«†ÓÉö‹åŽx3°Uþ8æÞBÑV*ïÍMó„›KÕOl|½Ò„½‡›‹ã“²Æ¸MnnP”ÿ:õ ü±ó߬áìã{Ü ~ÞÖö“í±R¬ Ê»(­DuqÁ2Íñ7È“àèÊ/0 Gxzâo© 1ÿq?®žŸfR>“Ø$øLÚPÊ%T1ôUô›~Á¹Åmåy‰QscNZY¹‘\äø_·f£A½Í/[†ÜÏA¶×VÂrÈf!ÿ=æK¦}å5éžv:<*b>K ¥È>í2”Ñ8›1ÉÍh•õÈh¦p1¿{kêÝÙ2þ«¿ëwÊX¹ŒÕž¨S ï?yþ‚£‡š‹w(ëåµf¾hÏ0¸éˆ =$"zÞ”-1T,Ê•—âéP¿·"Ž$ yBÌ’©kÂUÐeBÔÄ¡€’8–ï²£æ˜+­óSS¶øW;bÈó4ßHvÄ¡?ƒÑ–dC*`!¦ç‚~&âY„!ŽãÉþ£ü¾s)œ7«ÇP/wˆP”c ÌÁ 1î7.çLkÈfˆ½½×ñ)R·¸õ3Wøë¬Ÿ‚ŸÝN$bR~7ž¼ñøøOÖØ{ÒvýÓÙWòúÄAqR,ÂDNDkXÌÿ¦”àVq3™lÄZ¿½æwóé_E^Lµœ3íÊùŸB?¬_„)¶!8Ò¾þ8M–>æ•4ÂQ…ˆX.‘Àõ “TSƒR§+ˆ"³å NïæÑÎ÷‡Ä¾Rl–Zß ÓØºÑšKFÓ¤ý¼€L.`@™Ê:¯\Šf¾=ø"ö‚K.T…LW¸IFŠF3"2ÚCûþ ­²ïÏq?™óïIã~Ÿ©±ÿ œ™3Å_ï’jÎy¢M «×?+L^ïÐhFü>¡ñ˜¼ú+ì¾ÑsP”ùÆøy]_Â[ë@¶–qÊAȽô¹ß#BiÔ´3d5Ò'òK©!í¤•¼ï|¸‡;†'lÞáõö)×Çä–gà"? Ó·¸~ëÞÃõ~ûéÐùùR‘0@ýšŠ‡HEf‘ëb£ñêž)º²ÑCsFöÄÞñiTæqqkIö'/YXÓÉ_l£o—[Úv—¬ët÷­ídv«T*"³#:àünqxú嬞ÈÆËáMè¼bƒc¬µ•UH»ê½‡]ŽE¼­Eå›ÀN=î[Ò@]wô1ýŒØ#¼ß{FfßwXùð\q]›Dêf5ùÃP™w¡ŽgÐ_œÙÛú>Ä|ÐF’>ñì×î„ã–¤m·ŒQõÊ’›gú±ôÀ÷s |ÐUôï.þ°þ4ëa&?œ+¡1ô4‘ Oð}Ê”Áú«áYöØéïäüf¿?—öÓ ¢ÝHœÐm4@%Ð gw­j& m$£ý=H`ùöDäãl1œÕ³Î Ù2=ý·¶%12UÉžòâá*‘`äÙ£=VÛsðwú®Ü¸ö ÇM•Ä“MWŽün·Z;Ǧ¸/˜(ãðŸÐia=Ÿ‡/‚G¢ #ogÐ[É|ލµÑi>p+ج]¶ôèÞ纖s¨{) ÞÒÀSé ø¦}9Ⱥj¹,äº^§ìííëIU} ý_ß>’ ¿寯M’ÃûW¨¼ÌÖVè7}/oc÷q¯Ôox™í¿ÏDÿ4É˦Öß&•¼°“E ‚ „s(w¥Ð°ü"66ÞÄÁгå(ÓCm§ƒ‹,£Þ|»Rû¶=Ì—Ð[îr3/Kû=\Ó¹?Δ²ÜÎÚVšÊŽ"$c ÿÚŽâr`lõ¨1²ÝÑ)h®»:áô/é’8˜PÛ*‘ fªL}Á4Xf"¸Ècißiÿ×_¢í,GêŒÝB¶ÚüŠi•U1±³-óèå3 9ÆÂ]•îœcÀ†Á¦ß®Ž¢G7l…о3mI kp†ÅÝå!³ûÌo{ÒÛz Š5x†ÓyZÌ’öÑ¢áÔ4gå òœf ÂD6ñç’0;ˆÔ9ÛjìãtV$i÷w|­« æúR&¡œHµ”ϱ=I·w5H·œ'>+ôdiÐúWˆ¢A )ˆ X9…ÑÍËÛ·ÂŹØc"½#ê•3’oää2hÉÜ"Mâ¢/ÜIߟð×…ºZ±Kôÿû> zÿnifÌÌ`ÙØ¹Ÿ7þ °>݇.2‡éçÈ–yÃoÇ/H—©¶‚sç$·ìÍÞ`ÿG{4•Œ}OY »ÀʾŽGœî:”v¨ôèQ×v2“Æ;t—©«³Àñ0×5ì3øõÑ FÞbƒ;¸€ÉÿÈ ÔÝV’i5ŲȵæiáGÅ=0rÎ Å-Ü›„©ÉJÈåéurÚM ´xvn9š =Ö½¤[–sö¡8²±â¡oÝìdì­áÿûÀÄРÞB!SïðI¼¦Æ6G7wÏE²mŽ&Õž²;læµÉŸu¹R)A+Eˆ‘T»Ì•ë,ü1õ²¿÷ãå ƒç5ˆ Hû!öGd©×€_ñÛiM7{8è\ø-³q¶ÿx8·A|^ŸLòzó][®ñðâ.Á!wSW÷®QôI9|ÓøM½©ñ\¿/—›¥•dÔwwö›s§”ï¤ç6–³ž|Éhæ[g5ûR=3o7ˆOÉz‚f—ÊÀ§éô•µÔ<»Å¶Ÿ£žmW¢fwRîÍ|l†²ÐmÜžm œpùUð¥sÇþå J–3ËÁ–ÌÂͺ p,†›VøŽ)¨ú`†êßñ̰}×E"‹3¼öX–¸æ+(¾w»ï%æ´UkÏg(Ï@êzYDÝßíññ=¶#ôä°'±Éã=îäãUü:ÉDC;Ý¥—xþŸ]<Ê´ÔjÈ¥”5úD<ÓØµ&×X ¹k<™ù7A¶Y`ôd.³«‹,ð¹Æ~ƒ!µÛõr½›)É[oøâoËÇ—õFtiý9I6,ÛÙšõ D™wˆgÂt ÈûŒÞä— -Êú³óš—À0˜ÜÔ–t„-s©X«ì ˜/§Ù¯¯Ï^¼öÿNB5À‹‡Ø·m²à4&;€E*ýZ•$(Úˆjen—«G>­‹0únÿðøÔÝÛ*ZmÖ¶r“Y™03:ÑBÙúfh'ì•YäŠ6©#HBîš9–I÷D¬  @‘0’ Iˆ‹æÂØ…ýºh_^óÂõ¿Æûá}ˆ_VñÂóP¾ .~o éB÷¾îU óázØ_Ë ”…îá~\.FU ¢…éatp¼„.v% õ!{(^b9 ¨…àá}8^þË…ð¡}ô.fK ñ!zh\Ä.zÁ…ËBôðºØ^&Î…ù2ÂH¸\Q}ÊzôÓ«à(Æ!÷)ÁHmuÿW9?àá_ ‡tÇO,óPεÃ}Ñîõû‹qØüfƒKQÜ5²¨×›Ìļdnå!ûlŽÇÀízÛ÷™˜+6Jjf6Ø[íü´•Ž}ªüOº„÷h\Œ”m?ÕLØŠe£rÎÙ7ŸÉØ¥Í3®g2–ÖÇFÝç3ý.ÞŠœª»¡¾òݵšv¯ïS-œ€¸ÿ÷뉼EcWk]fJÀ´¹‚Yì¢~||¯BVr·Bw…t⽆ŸM§ÔõïkèÙw–œÏR#WÇëk™¬H»Ë£^áÞDå™ òðèÊ0@ •®Û2 \À•<çOŽÐ`ªs’#¬} Y¶vXÚcÖüG Õv:U*¥zŸDü?ÆÌ Eˆåù½íg— C\ $ cÿq†:.­Ob¿Ò^kÔ-\Í~‘M¨ƒ<7Ùà/nšP‡Írž(¶V/ÕÏýTÖ{Ü+•L7ÍEjÖÕP\ 8†Š7µ°$|³EÙ®.¿…—zî.4¯ÂâàÂ0¡Ëjd®–—Ùù}&ÔŸ†ï«WÃ1‹ë§Ãü€×46 Ñá2ÒÊû_çØŽ„÷È;—ÂÍï£73z€ŸÚ®Ä“|WnG}šƒwõ=ÏR˜Ùѵnæ]-ì Õj}#ûŠIr.oÉšÄ8||v,æ9™ŠYn-¹Æìd#®šªËÁrç!NÇÇBáøÈÍD¹.:âHÌÄ}”Ós /Y­OßÈ.…«Œ—¨‰ŽÃ½´O3eò tqÖ ·@0Õxº )^J8)/¬õÔæú#–ähõø^Cñ´õõNq‡,ùÖVZÜ× ìÁxú µÿFøÂ¨ùPbn²’É@Uæèà7o˼pãÒ‚9Oãú;UP̨q*¦ b\,•¡É5-Ù=$õö›tµ È$cõÿ®ðàËa\A‹ê±Y¯¥/ _„r,7võ•œdƹ¯y¾ÖÚÿ‹èö96ˆ­¶@Õ2ý[?šJý¨F½©v™÷{Ò½v6WˆÄUDË?€Ù÷ÿî,-$¾êñ@f1,ë$ç´Ã› ÀwGuÄJEÆ#ºwÕ5¾&ùòŒ®^dˆ%‘¯mǪ Ÿw<¯¨\vB¸¾¬ÃŸfo?™^êþR3—}—¿_^uŒïTûµ]Àø«Øà$þy~˜k-B¦­ýsEàÈø#·Ò«]ª"î¾ÀõÜç®BNâv~i¤Q<ª«à¯¹²­Ùw? •r>oÎ_w¥Þäü~ñ¸ý²Ý(µj¦PÀÄD­Ù\ÒÀ€HB%ä£?ëØ¦¦ÛM‡­(× ‹D|Öý‚ŽŽŒ63ɧ 0¯—³›ivÈ–š»³›:Ìôm±”ByÍØKØdɶ›ËÞw2S0lã".ÄCm— ðà“W|´û=)ôŽ3±Þwq\ë ÷%³}9ÐÖºO©U£e”·Zª3힦Û($ß9ðÑ‘0Û|+\| mRù7Ö͸ o™ Oºˆcwð²Ë·³ÿœ5chcÊ!NÏu–Cübˆ m¿w¦‚èÿ–vý _ÕóÓJgß_âÚ¼ì`κ!³;7¥?z !üÙ­‘fˆN¯ˆÊ§ëb\„®§&t>*K•r¨k9®(X0·V=ùòqÃŲFEÝËjTpÁÕ0ù_Jmý…;µ1}ñÿsêuº ‘•æ¡õ-EâË%?+¥ä*'ßÝÙÓ Vì<¦g}9W¿ZŠÌʃ;øôÜ›Y(†ù=ÿ)˜šÅ´ô{×WaMÍDÍnI¼!?¾RB1B²Ùýž¹ Ï4eÊq²K0BÄ­|áTd•þ Š€ Ádsÿ6«R›üû5aìüÉ.CÉûƒ¬b`‰­<·*£nªÈ“þ ì‹!%©fLýZÑ‹è̺µ¸Î\³Óà"Ê“Z¬<2×Q±œ Ô¥7ø‚:L"ê¥ËNCyÖG^Î ¬þS—ÄÌGÎfå\˜ýÍÞG'ÃeÊ2aÉ_ëc.šp l•Ï Pç”8¤[ÜbÎPä€k¦­5mp½ºñ;žð{><ÿK«zÞ÷ÇúûéÓŠšÌ’䞣Ë ‚ ¼à¼s?hm 'òÊdÌ;†Ÿ÷™ÝâIðÏ}IÑÐèé¼–¥«{+>¼)ƒÈ£çŠ2fñË®l0Æ «,<£9¥¸™„ì_1Àé„#Â¥eOJQ7Èî»n/ü¡vûë§Ð[*I mÓSðÒéYu¼<,:»Ó*÷ç<¿(á%—Sþïk=wì?¬¤ÄŸõ£¹;ÎJÁD,®f-ó¬(}ŽŽcé d@õ¿äƒúüýßeKJŽoo1²Ëe£TÆÄ9dšª0X—„‰¿”Ô?*t¨fv½@¢«x‹û´™²nê¶Q:Ý ¢›ï’ðóT ¹8ú)f‘¥ps©Wëþ·?=×q)4û$?,ÀÌTM}‚ݦ=”µÿ†¢ÿÚÞé{„"íHØÆ`öüý{?9A66=hô7Ž>sÀfo ,VÃ?öïóJ;©üF£‘ÐÖjØFAýêWÅþfœ²5Ì9>/²öd^úŸ.E­ýÒÝY¸©jƒ?ÍÌR¶íG/«e<º?‹ÆËó¦ž Ö ®ùL•ÞEœ‹m“À¹Ø§Ž«Ê¿MŸtï¬ Äx®fÙð½þDyñ9©èËa¤”ÐÜ´¹ÃÒˆ+³.§4ï#(”92J˜¢ ¡GðDÃ÷P>ýØý?»È›D¾o +€h¢‚À«ÿqè±Ñf0: à\Ÿ2»8 óo6BŸåJ}}}EVZ¢Ö5§<,¼tPú{ísÜùh†^i–§*l>CUøÜÒ' ŽTÏ]$Ѫً‰2d“…3–8D !‡˜3ä=4™6¤@k¢<Þ÷a›:ÇU‰.wÂâüf›4 Å¸8Š®x(B ò  ÍR+fK{Õ¿@òûÊ9Š’`° œrùÅ…4bœÚ%'¨é ΚEí‡ISÆWæ+÷‚|TÊð— ëJ¨Ûè±1W´ë~I•ÕØÈ ±!ZOJˆ¡  v±ïà­‚]ØÇù$® Òj „Âäzܱ©‘³ä†Ã!½í 2eMF\#%aÃÖ½þ3¡6g¾© ¯}MC®I1#7¦wü€oÿH³Á×Eúuééõ¤*¸¢»Å'¾1I,eCˆcàuÿ(Àâ–[A 7¹ï!M0üGØî²³IuHþ­owî ;•¬¯ÑÔ;ûØwü#™¸í¸­¾…sÉŸh0™£»à(™œ=e!oÊÛq}Ñ) ­Ï`„ ‹'œ'×d#¯‰Õ¦iç;sô2'Ò“®"§G¿]y^,ðWΉDÔ2éQ{vadá]Ak¿>rø™š?XÙZ-9ëExÐJUÜb 1õÏjtÔúfÖž^ßí+<ÙVtºÛ9gˆÇÍÏFßMÍ´ûi 8f7¾)¹håg‘<ôg#íð9;ñoìv-P ÖÔG~°=zG¹OYÞÖ‘ZvÖÑêIhÈבÖà“^øÛe¹CœæŸb óÕâÿü`È"õGPJMÝ"¦¾x³Û\ОÀµìpN{BVºŸŽ8š•«a»i¯t†Èb¡QŽ£ý$u·Î6O¸ŠÀ ˆÝ”}M=6‰í!œù3&7v!žßÄø}G‡—ÈP GIôÁj½Xí²*áé÷,׎,­¿î½yUf¡ªY“ÿÁÕQÜÄïð¥·pÛ µ„Šïl c >ŸfÙ­ì㙨©Á[U(Ê]””×lk¯s¿Úù¾½#£ÖbÎØ3Œ›Þr °ry²U½(­XšÃi˜Ct°j´Òm²ô5Æî˜®ø×RéÈxÅÓE˜Ì5¡{8§ˆï“ØÕ`là˜èš²YYÃ4dlRФŽ$ÏsÞ•ö“»1“¸£CîƳ\—Ý=aÐ¥£’´•Ú€3]v®Y½IM ¿#5ÏF‘}…-¸»9Žh€…MÁÞFƒ/À{¹ îa>][lÑöÀI¥N³!aKgþAkõ­Vû¿F‚¯B°‘1cJ«Î7os²JL*•›(ïÞڃϋ[÷峯Ql(3Žv¬Š=ï!µy¹‡\õôPß…Æ…C 4÷iüÐíPnsŒŸ¡Ñ\°Ú¢VI \ÞÛ™ƒ>Ëb·¤ìó6`á›*SþYƒ‘8(4åtÁÑ}ª^YœTÈrvÂæ‘ߟ™[/`¯›ÚŸì|4ù_Ćiújþ ­/ó£þöžÜ?²Y`=p¯öw¿Ûü{¿—ÆÌ6ý_d (‚ó°2òŽ8>Ü4ýÙiì>ò0Ðlÿ*{Gþ–Â~ÂðýÓõQúý2ºê]¯¢|e'ž ?ŸâœÕlznò¬©MhK>ÒsLÚÆV:oàÿ ·4Ï×ÑÁ­õþ‚4œ¿µ’\P7 &œjq*XhÈ>½ªkSÇ(ÛÂ*Juꌾ$¥fgB\êzÈKúFLâ‡Ñ ‚™½ÙéœQ¼4JuE‘9#ÌŒA¬9¿Jp¿QÊ݇dc†Lý0µ©'š9ß9/ýÚ:`©—žÍ¸ãÒø„– o­ßúøcòu"éªÖ—•am‹ö_ûPXîMë­¤²2¬l…,“cG“RÛ¹OëSÁõ™ó'Ž/3*¶CLç‰ozv-l¬y7û¿jqc”¢³²ýÃ<'æ`£q¾ISô°%;â®=(êMls»StÆ>òÎñöB®Ý4èuÊ¡ˆ”4Õ4ˆèB½z2éi“´"ˆ‹Ç# /RŒwA©y.ÿê¹â«Ž½e.‡º’rÝ̧kê`Üç/a›êç7?Ú¿õ7qO뻩¯^S{"¢ŸVMˆmkà^’Š –ݪu?$´®~£Ug:x™÷â+ö¦&,?Ý?Æ¥›Ý7›\ôl³›¦ë¦ ; Q½w˃ý/Ñ3/€f¯èÁIȪü“ŸQh%›¸/ÄÅÜ©w>Âñ+¢IÅžž,ñ3äÎê^‘å”ÁG!©gÒÊÃuK !“ÛÌvS,è—"e–®î±ã*C4Äûš¯£üéÑT´Û“=c¦AS°×îé^¥v9[NÚ7äzæ4?kz"ÀÎ[îª_{rX™u$j ÁpN:÷ªY%ÇîûûEt, «ÿOŸ”çÉùÙ‰ä¨NËmï4ÚÅò. DjÞÍ’ÚgXÕuÇs&I¢ZÂ…<Ã2ÑQU—þù$a°’UDÉ¡+ß{¤Õ™bWà ri<ƒ·B÷êŽ0U”Ó>)£.RÒÿGôáÎ@¿!9¨l²êk‹þª%/­&' ØÉ‘Od¥dË›Z[e¸ OyªõE\˜ÊAîÓ2®§1Éž¼|¦¯fÊí¼¢Á.a¬ NWKÉcÈ*|Jèàn““ÄU”üºWfw;ñéâU?åµ› –8Š“åÀj癵´aD ŠQ!xÆepÞBÿ’ê–mé„äÂmqî³Þp”„Š\»á@Çb²‚ {†ü5ö>lÿlÔ˜¨/M H”ì,H”Ñ.6FsF˜YODõó‚ *½ä-ƒ1ðyn ø¾iŇdWzׂàès³Û7Ãï¼Õ3˜aŸç`óŽÊ81×ë“ÓW(æyžG;çµÙ½ï€N…%X´ÞQ­ ß*{3Ƈ”*y^wuâù¾Z]º·¡¬'xŽNF¬«ÒZE$ÞÕ£kHËeMc`·5C±‚£Ÿo”€miN(…^¬ü•Ž<Þ#Ÿ©ÇÛ¦«cgÈîö•—Ã{ºxNeEr%‡1JSä§š„þ¿Fßý~âA¶ ¨MÝË8B¯dIŒLL¦ìU7´ßè;cµáÜáÆùãòïî¬7¹¼®u¢×Ž­;WÕó¼Ú¸£ºÄEkµØs·‡±ÎrªÛ#£›cúö¬©×]bæë«•lkŽM¬5¬Ûø ØÅê#ë´Äm³µ¯}óûºëÙ#g~ºämj¼eñÅÉY|ò¶8×ekoÓyÖ[ÄtN;ß‹·^ý»ÏØW¸ù{ûst7][}ö‰=ç={µ§×ÅÄß{øPO£±SŒPÚÞw•Û^þÚÈåê/Çm¢|ºã·Æ¾Nfûû®?aŒqÓ¬VÛüÜTUî½ÊÙˆ —>–:5ºï]üÏOæßù;TÉž8¿‡´T`õ¿ Sç3‚¼ÌÎúvõà_lëÏòµÞçäØÍò¾/ØSÂàÑk àb>¢Þcü9]Øêõá:Èó{EÐ9ÜíøuQÜýUtûâë Ñuv¯¿ïÍðõ.Ö[ZÉ^’š°±<[ÒãÎgoßÿŸ6;ë÷SDOøüþèþS?™k‡õŠÞ{£C)qçõ(ý¢U+ dÎÔ¨lµS·K¢tó,üÓաщÜ+©^ÿK7ø%ßüpÿÃk/ßóĶ+Aâ1@jo¾( ‹=ƒßÌ”õkó»Sj³ZÚ¶õ¡ÁÇCG{Ô‹H¹:›-cþŸu¶óxl${d¹B̆ÏÌÖÌÊæ‡ußIy™½+yzÄW§hŸ©3{èÚþ~(ËøÉSøûF­UmFË|Á8a¡zøpßp¿ |'E9è~ŒlFÃ+œ³B”w «m¿U׺«ßÙ÷~ þã´oöºúÝI.Ïí±fÆ+Èr³A°mLä2•Ÿò©kÞúßÔÓæ–»o¯Ã™«H{âÿtŸ³ÜF´#Ȉë$?•M ×-)á^ûË_íû·*p¯àž4;èhŒ¾¢Ÿšëu]ÄìW4p7ÝmÏM+ëß‘9äúTl>;_ž¬º®=ò…ŸÔ¿7;ëóÂyáæwU9Ü/›ö‡«‚ìTo­úÞã²s³W|Ÿ¹ëRÀ9wúË×ùáÿÞÙgÕýŽ­ý¡½¿èo$pv“?xˆïì²—«/Òï¡D\ßUj7tö6¤Û!ÎGûX邯w“öÊX8˦€p騶Šþ9¾âRQX¸î}{ø u^½j#§“fï-›¸÷Û®)` [-òòBC½éd}ü?¦VF%;aÔÒû»2þü¢ë[»B¦Úi»^CÄgÆñsýÍ!À…W'è0ûÕ¦÷Ã÷Y=• U)»‘̃§¬H.s¶¿<Ï=°Ú´¶0lHì©y~ƒCIL°‘m¿ýO¬ÿ< ´)oæ—ðÍ<rÂÌ›|N1cèß•ÜäY:ì&¯?ðŽÒ,ÿ¶žØ”ÓaýüzÛçŽw¡-è}¾©“iÞ Ðà&kšd3£”){ 8ÿõ)7‹BË‹3Õ‡1Èå vÊ`œ€d!ÚË,Ø>p|šã&ÀP‰‚NŸÇÚ°a»Î¾yCØôex •ç}òrÔf1üäyé¢ôÌ¡äì!Ǭ|aÊw_Ÿ´^{í7Ù“I?ž²aO] ÛPj¤žÜ~¸À !÷à8…ñDïQÂÔ[^A@_»Íä6dÂÏæhø3Có¡pKH¶pqmó{Nà˜û&¯Ÿò~SªOí¹p)qÎM;uNŸ˜šw½NMù»n×#nï|Y>S0r?chˆ )¿!4`¾ZpÕó6-q¼¥Âd2ü žXaýQ$žÈh›  wD1føð\“¢üZønÏbލ#w m‚¤åqÏ /b‚ÀaLˆKé“d Kãù’ÕýÚr~¯‰=¦8.‡f­óZ.6™¤É{,ý9ÒZåi2 PH¹) –Y‡„„‰r4öö±¶«?@¯wûæF¥¦5SÒè[Žb?£´q_¬Ãg¤ëî¼ÅòWŠðîp |#¹¤‚nO2âo£blûûãB.Ÿ9:°qVð Ήµr»Tº²ö¦ó‘%-™+,ŽÜýï7>Ý`gœîï.mW(a²!I%p`ÉŠÓëÜÎÈômÿ 5OÓ-ÿžÛ1Sªï,rÁó4%±ˆf{¿›ø~¤Š7ŠA –­ñvd" ·Ùì³Óe Cų\4Ãj®GFìÅ„:©h&½{m´ÅQI³9Â^H‚µág#sµÐ ! ÞEòǯ­¿Ô¥éÓq‹)¢³ï0ÚñÏq¡•³O+øînP/D±ÿgŸ +ðŸðb$Έ–7¹·Ü ªÕ‡âÍ„^Ç› ÀáÌÀ8B2ô%q?=®Ðç!n¶Øáά[7‚ƒdXåf•_zQ¢$y&êmš}ÄžœvÔ¼µöÄlM}„F+ƒ:B’TˆZ±DÀîÉWË(y`"D²ÿ¯ëÄ5“Ø¢‚ÒP2¶×àZÎwó—‰xŒžˆ”.“¤ÆÕsƽ¦Û«U{æ¬Qªèi!±²úÏ“¯ŽÃ§È»qk‡*ÜÒðz?2}yëJö¤¤üaú†‚?ji÷ÚÿÅï%¹é¥C#¨yˆŽ0È5,œUc_v_ Ùg¤˜£DÂxc|, YD"ùd$¦wX Í(çCxéxAÅp}ÉÜv„,ai=Y}Iªv§ˆ“éƒÚNªÒé(gúJŒ\'1Û? ¤g³ûjq£»‰­/sM£Ø3Jš3BнGi1¯ØK¡8,µúŽ¡Ò.šå{—1<X!íûÿ GÎ : ²>ü[¯ú­7T*ƒ9FumK+ï³ì훎nõimÙž~sÉdçv€ˆªq²R¸(—}.ò_{¯(»ÊÛnаuvÛú^„¸)Ñ¢<ÑÕç¥ïmÑoýþï8¢¯›Ý’–yWœJúßÕúÝßôóçe ±.Š3Llg`¶¢Û^g¶ã»Mú?Ÿç®|ï·¼² ö¬µ*RsñÞ½6àø´{]igœÎÎ::N+á´í û=ùî\¿Åüù|îúúÝå˜Aú:×è¾NûùŸžÆ³kÛÛnw¶:ö£ÞmzÛö?o!Gsæï¿›7Ëv‚ˆ„ý­$Ê’'KL8a®C×õH`€Ó6B„ÔµÿÀÕÝ#ÜÞ’F×[)¨M'-ìJD‰£ô”PŸæí¿ÄÞ†„“Fý‡aü8^W×ëlÜ'†q ñJ’œ¹òÆCˆ"§ÌHÈ’;ÑD³bð³:o…sð{^—ŸsßíïúÐyfË¿Ïèc¢¯™¦=®&†‡¨º¯°½põÊÞB>0úïö„"ÿî뻪Jt‡BINp#mjì6ÿðlë?ói¡Ù:¨‚¬0m ppŸÆ[˜×IyeR)|H¨h¯)ïþç6÷k¤<8üA‚t~2.Cå•*~ƒÀY*¨€‹gnW)I@Ãc9KFÍcš€ŽW×ôl:îîýÆêUlÞ‚VquD¯é L Ñ¸ =ÿ‘2D w§™È~@=èõü`3wpP':Dw×Ja1>šA#·ª:N±½WKÀ¹¦µ7_oÊÖó :!q¤k¸ý‡/r=‡¾¯"{Û$¡‚чˆx yíÐ’^¿ˆCºü¾|ä^=•ãt擎‹RÀ"ÚH?¶b”¼”ñ"£„–Y™ïßÑùÖ/`”q I.EäéB÷ô`ªš*X™§sÿáâ×õ¹øYóGÿY‘QkWÑC«Ò^û8­?:ê"ç"Éf—º­Ÿô¡þ³YÝZÞù«ˆ¡bVJ1¶<Ï"3ÅYW6ûjhý1Ô…¡l—Þ¯·"ýŠÚëÇm~ãÇ~D\ ë£á•~›)ø-m™ùAfJ~F§>š‘!kûÅ÷iâ ê)ô^=¨š'T\¥’”½ŸÃ.`±žËõå&ï3BçfóÍ-ËÖuš='ñ ÚÆs<¬¹×¸±ìð]0­¾Þììþ?kÔÝêy¿ïÀþò»p‡ú4­¿³A؆ã@ O³²EHè8=åóiÍ1†²ªb=ß7§éî· •õr=öµ¿.¾™Y¬¢xáKy¥á¶ð…mç$ÀœDvbÙËŽ±WÐÓêñN=8‚üàIððÓ&ï³cÌW| Pp=,†âŠ£àvã®:=;jÄ$Ÿ¢*´…5ÍévÎ ð)×ê0MŸówö†#O¿µN†LTR­–FJ°%?.³i(Ù±“pSèCá;ùx1¡…„ƒâXò6æA­9÷*Ž˜Ü?ôL‰ŸVÊcø`M.Ý2n Xè”D9í\62d¯sš†ÎDžšA þmÆÎõ ³Dã”^m]¨Z…«y"~Al´âæN&‰·UI§¹U—ìi÷  ¤ªºF$ÝÙy⽘B¸–¸2ìÆRQ² ïI€åÒˆT¦èŒ‚qáQ §ç ;©!½Æ›AÈ}/pÉæô‚>VvÀ8òˆ„ŽE6”(Ã}QIÌšª…ôß7på`€nÊz4QùADXXî7‚çqe°Œ^àøÀE†‹©kù:;ñúÏDZñ›­ù»òŠ˜o".^œÌ9¸ñxÊ‚&Rö»Ê§ãRÊÖˆPú1Jp¦‡–zòQQ¹Q®riŽ#` µÖ$„å&””¸5Åm1•ôw 9ar {Ûs ›^LwDêX a¤V cADÇÒVÂñ|NêÎ)Âaœšü™•hÊl5DþÕÁE=¬&){ý!‚ÜP{õþkö즰ËB@’€¯§ýq Dè”s<ÖQ`‰žýb—4§Þ‡©Û%YöXk‡êˆt%ûº¥+ÑHo³^7P­© KZ”™¢ }ÎÀô>ëu‹-7Ñ*MϪ[p—¯h™ÊLæ:{lÔg‚fJÎÇšÊþ…*,†B}"fŽšés(ZÐ$BÉ_q­ëÑ&%)¤×w»¤é7gnܼ|¹„}”¤Ë?„oÔ¬®UÛo?n²Wi¾]–®ËÌ›»ëÃfÎ5ënû7Œ‰sÛ†x -úY‹IÍ¿Yú{á€@@OêHÃéÜnEÉ.ë*BÁt<”¹.5Îùruzm¶0â¯]ˆ8½äÖèßç¥&Ñ"-À!åùÞs­€ŽÚ>#"•t»DéŸ'ý%Cì H„F̦4B´»Ié£!¼ÝQ.ˆ×A8fIâ›”`Ád“ŸÑîZˆ[ØW’›Á=êZqàè¶â=ÿÊʆ;€Tå‰NÅ IéA§ïÂN†I2Õç%Va&ƒqÇÌÝËú^¤zpvê­à ¡ÆË°§Û%… ƒe˜D©YvÌõÕÑÂþº­¡W`¹#P‹×xñdÔÊ1S‘E ,{@óÞ2›q]*KOå(¿“jXtqçw>oÚ~>›ci&Ð…ó‡U°ÙÜB¯Ù3Á$`smr„u+Æ¢ô“\¸ ³)Å}ñŒ0´3dë6ta¸Àc S­CëDiC¬½°‰^pFfƒýß!’"mÞ”µC&yøBÀ-“PZ‰xfœ ÈB­·½" DbÞIQÉ&¸oÊ6Y“Îb7„Bžiƒ6b0*Ì )Ÿ¾…'3ÅçF€ñ¢x‚1'L¬ÃF0Dð–Ì@Ð'ëàX<™b9ÜôM2«¹äŽèôg³Î êðÚgÒAmb±Åð™w„¸×}’©è)´c;âwèu%¡jýqUýfûknÇF¡ê™Ë0÷18®UmGàßN<€€ba<[ê L°ŒÎAÅcž3îg]k5gÉøçt¼,åXq­æ6ÔÉ‹’³ù °ãàÖð7¦C”Îk`bLÑõê%DKå—æ0R\ÒÓŒÔÔÑ -6÷èÀuxz æ/%´5hiÛ«úrõËûé eoÚeÿ¶žS Øü«cX ³&36¹ÀÕZwøŸoöäÁç˜Ê·%Ž®³þ†rÞWn…TÆQ Ci-xƒñ1¾Í›pòæÕWó;c¿7#@BM+;½ /­Ì„lV<놵›ÇØAûÒÑøô—cõÝÕ˜“Óè}®ˆ»>I×¢ÛÀ¤µ9û)·äOdRZûfÛ Ì•ÕûŸº^âëÝŸ.×?óÿKÍ~4<~³¿Ž¯í²O/¶0ã 6g{#=†HË?ÁÃhOò¯ô÷;]ÖõóZÉÿ»[°_l£1Aתÿ}¸¾ÜD^lT/Žñì,Tá®ïñáA•VÚÀ£>øæ×#C3`s(ÀY"pKf°ñf8Qf¥#F¨RÙ²k©ÿÃvQNuÄ@ЭÿˆyAp³Ü$% CzySAÒHS¥„Kå(% ¤?za½:ä…¬Ni¾ùŠýD%´ÐAE•wñÀ'’ígûöÍÍ'3iç"Ì<¯ù53mý~·Yì§> rF ~åÀtà$Rpè<0¸ùHub;ßËøþºž!9Ÿûþ,ÓÍ_Üý>BÌ}Nà;øX ‚XÖèñ xˆ$¹/ägeZŠ›c2r–nüÉ;YUˆW¸€`×êÑŸ¯üî¶ß[v ¬D°˜>‚È8e˜Ú†k¸¸åúºˆ™ÍB›Gs@øsýKe¡Qk¤ƒƒ˜(“>†¿“AÒÆv+e°¥:Dl‚â¦pj¦ÕkZj¶f«)Þæ ѱ›©¨×h‘ò5ïYÛ=÷â–_ÆÖÌÏ3Äm®KV¶ØÌù“žcŒ‰:‚íŸ×y¶øõ÷×9±¹`ôé­¶×YÐj®&s_blM üMº+æqÝìι‡iD–.Øö?¯Zô[|T_?œúïÆoý›ôÆÇÑ‘c±ß\êFÚ«íx¼ßøØ"buý§VU{Ì+D–§·¼þÚýížWVÏnÚÅd.¾»ÎE[x‚=H'Üú»úO2]³òB „¦tùÉö…¤TÍS8>w4 } CµŸ+î£5<¦ïÇA‘B…=èåyò$!1Ù À]ïl»ný³$Ëã—¤ú‚f§'¦F¶œêJ²âºÃ}¼WIwÜŦçò–³0Ѽv”žËÍ*² ìêy‡}g–Ãiø†iå_o÷EÕð¡;\|5’+›—ŽÇÏîi^ó³ÑîËHéIn3P~íkYÍ;0NóCy¤êT”âFˆ=ä<§D÷¡iuóMoSHÙÚD Ž·#©^sŽvÉ+C4äb‚¾ÖL Fº¤kuD^ÌÀ“œÖBñ[âÕŒANZ ðé¶e.âp“¶‚,–vŠ˜Gí2{ýòþ¾Žxèy›õ]x$³z.ZévLÓGrjzò1nŽq½ Y I;²§Ù!s×eV–bŒÁe:wÁL€UiÕ‚LÅ‹¤ÃüÞÎiõ—!IiÓÕ&ƒDª+üÞnR«#iÈnV¶II€>ñþW± Gúsˆ+"Ü÷øåÂü,{æ¬/…-ƒ™ë/Wi˜×•o*އÙú˜J©U4ca½WÜÌн^–S1F{Mêcf#÷? DËV¥GÈǦ¢ìÕ«€Sž|ì³&whK4®'Ø 8›n÷¼l\d}>gÿk”õ†¦±R³¸C|¡ãmóihhœdmBi¤¢Ë+žÖžÎ¡!ÂæMô$é¸â6A“ ayǬêsç36Ñ©¸šZ&Èí£­j |«W£w­JŠC=åÞ³ã2ôJr¦C½ýÈ„–¢.\† ¥£'wÐy­@#»%ŽOf`½¶«€%÷ÈOvÅÁ‚S šÍo^hÃõÁ°zàuzâ!Á¬òêàíꜟüZåt§çKñÑŠ´êaµJgSøî}|¸ëóu¾ÕΪ÷¤ß†[YøyÙ½z&iMèy²ÜúÓ¤C[ü˜úÏÞŸ¡H¯ÊH‘¬'/ߥP¢Ÿ×²>°€Ï¾zPËõLˆš™ÊŠSQL¼ÍIëòÕILJjhŸÅŞ̱ÃõÍ”3Åܾc“è»|ÿ²ª>E$1[8–Xª(¨ý¼z&»·´Š_òÿ_ÅöOE€rÖ(x¸?[Œ»<êƒÅOS,¸‡¬BÖxõâ;Zéé{*U–ϽŸTîÙœR3g‚ýhì‡V!ÔND˜LH…hCG°ŸMБµxx–rZ%&w®ŒjæøÓTþÖîÍ{WÆ.ß„Úìm·/‹bÕ M¿Yì1SÒןß"ÙR;›°A?]¡”cÎu>ž àGžå]Iö+- (T,ŸèD9[$ë”\v™úà×!(02su*sÉÚ˜…@ìV€ŸG˜'ßœÒf¼xSËŠm¥XŒÈ6fHðPù“ÒZê € B½1:.Ú=Æ£œátÑ«%ÇqZJIÜ¢¤HUÚÚàm ¡ƒ×Εx$!¥À9´‚>W(¥Ó%ì{w¹¹}’Úã]¹Åˆ´}”ÅS£j¦õ‚1!¹Ã±‚Ùml#;0sf¨â\¹þôÏÍ|µuãì,;îwlë&9皆2›"Ê Ø ±Ê?œd"¾áÙými"Þ/‡jOVÈ.:à6bä|ÓM• ßm:ñLó$CZ_õ½‰°=äb×Ã3@>NŒL€ ¡K7´ÍØ¿#~š«ñ=ý± ¯óZC\–˜hdT8 Ô‘'sH¿­ó®­áÿUåeÊW0ÓjWÒ»ïæ©¡ Ie¢Ë¹º:·Vç¾/d@= yD¿Ý®—©ùêˆnz´—çi¹áB„ÑÛÓÒÛbóË>Øì€†„Ó•v€h \³•t‘Ô=Oø`8wš7¥}:À@/`jRÒÀä #/ä¨mräc™-F7„O¢¦·í7ToÂĹ¹ÿªÂ؈cæðóßøL0Ê[ŽAñm¶¤{mŒÞýnŽˆ’îÛ8Ö€Q€õA¼×àÿGÇ÷½Ä$†t`ûº‚Â÷ï¥n:gBœÿŠq¤Q›KÓä1çLÚ‰ò<æ%ë…g?º½¢÷œ+LÈ?¾cS|C2„5‹|‰%»óÞáÅ­'åýöK¿ù«·âç°¥œCH™4¿?Ý_â¤Ìˆ­]ק݃yÄûYä§xhÅì:)†J$qd·_ß?;Ï;ÅИ»Ùœº$NOÊaÌ…ô-kiéÃ'…›ÆdMD7Úoû„µüá_Mǧ8C%y˱Ñ~•,õÖç®^Ÿf”£!'ÿkב“þ Rîf^ŠÓçü0ôýhµìÞ…¡´AŽÒÎm\þî¸ÜKNüvzmöä¸è·T¯?Ì¡q Y›:Ý#yÍTŒD‡2®wÃH`T+J³}<—ú™x F«‚É95£àF¥|g1ÛúaÛÍσ½’wsÑ@ RøL—¯™»;3ÎÞyóò=›µð¢+¡KÕ ·¡ÔçfáYÕï9)%éw±ÜÏ­øù-C +§øµ]çÄ“ý^è™bຠԗÑs½aäæm‚Þâ˽<ÁÒ2ÂÿS³}w¸¹¢ù¶¯`F{ƒ¥è€‹ŽaDÇNÕTBªK#=PU]IÇ‚Îé¿¡ww4Jjœè€8Øýx(fa]ºòrVñî+µ} /;I‚Èù–×·„s¾gEÊ}Îw'=!hX¹Û#›…ëߎžH!œô˜ƒpÅmÂÀK>J»cäýšþ~‚X&ƒMu„^µ 4r­cKàs$º>ˆ3¶Þ]g¸ÿÀ×zô‚5íì<ù%‚h ¯‡YÌwÅ×þZ\ઘ\H8þf8ƃKª…UÔÀ‘ØdyéjƒÊºs½ö&pÐ.É AÒ4,£Há3}K¾ôŽ¥K´¼M!%K©DC±v752J¥¤t! Ýåør NRŸ)Äq („rÛH)ÝJCK;''\ÄœÚä¥bH]Cï8zã§Ãq|dèì2玾‹©!%…aœk­?üW#Τ®3!.G~Ñô5wÊky*DSûpWwé^¦=¶’*Z4ZžÊ@•…Î÷„[.ö© |a´DµD$ªO"Žb,ôV­ÉñS$÷ó]6»œÖήeúZq™¢æÖúÅ* UgÎdi$—Á]bÄ0‰+A…û¤ƒŽß`]Ç1½’AônàG ÒVV wÀ‰ØwS"‡…ÄÈ·m¡?îíBø.ñ¢ÈÅ¿´…Îú›xqÉùršWÚ|Q,7UyÛc%©ïœ†:3²‰¯l ‘ìbˆÔ›à/¥¯¼¢!kôþ²ŸÎÞeGÅ2(9œó÷%)áÜÃ&ÌÜŸÍëð›ée·éºeÒácº€T€Æ{^ ‘f]Ú_"E¡·ÊññÕ~)ÍzŠvz‹»_âL ¾c>eOROÓý|îóÕí-Â5»8¯C¾ãd…yf] > Ê`v•EÚ‹%0—ªÒåØ}ì,4ƒOÄÁÔ×ýc·1µÇïÐÔe©Ò7 -³ô`® n;Ï\6Gc:†×ôÍ mÖÂvh]/o÷ä‹—]râëûÿv /]¶À]·|šª’6Ì9V#B)­ü?M'I0îЬLAàplÄ[=øn÷"¿™IÀ79îšH:“ÅiáóT•ãœdÀzà\á#Lп¯TZq­itºes¤›ãÔeeìÛøC°Ïgp¹Ã¥ü»«¯ÙÏîø÷—_æÀ´ Ù0G%¼Ž5¤½.ÛK!,6z“Aš¸øù^VtiºÈfwpU|‰Ñr`»n@o½Ju ‰‚®éàKlÁ/s€„?CØ=«$ëƒiçë4ø½˜Vv%Ù°;«ÚÜÚaé8³Ðêò>—ÁTû¢ÈÕEâÖ -M‹\?>éΠؘ¾¶Ã0–Šéå@,:HÕB h-÷•:ü*ÜðÞ÷Qí¦+œÈz^_EsnÈû^ÇÃò{*ñþ†/‰‡^†RýAŽ«s2ÿãG$O]ÄÉø|kÔ‘c±À’Ú´ìw Ñc~b1ÄÿTßTÔzMWt¹E¹´<ÎQ¹l‰†S1f\Œ–V\ŠS„”mfÍ/a6‹_ì]­ïg[ŸWÔz)«CM¥(Nè7ù¹Vj 󙊧]KBÆÜí}wÕ©ö( Ð´ßV·Üà$ª^ Ä/Nµ†­Ì"ïr„·M jt°¹ùðÂaÒI‚ûZ ë Ä.©‚¨øm}ŧòçõ·¾ƒùø*°œN@Wóþ v‘ãtuÙ)3ôµt»f¦Ç†ë< ¬?¤$€¿ÿíúch!%Ù1ëIe´ù+ÿU &h!-ÿ™„Kˆ`f9¨³ÿe³ 0#ŽÌ]yì¤é÷Lg¯­®N-CHUÆ+¯!ÁTFNãÌÏ'4Ýk¹Ø½þ_›£èø–þg޾uý’nó}ÔJmðAçk¡#kÔg¤+£H,ܯ#"îÒ 3Isþ-D€¥ö´èð¿äèz³ æ$x¿còôs†$ÜBžIæÚ#©ài±‚ΓCŸÊpÙŽu…ÒzM󴃡Çhä•.k*³\X¯Lêÿ\¨9þ¿ÀÅýœÒ”'õT€¸ÿJÅ…„ŒcIˆèØ¿ÛòÈ6w˜KËÐ’ÿÞ¿;Ý$q…šmip­ ;-Æ÷©™sEq#_®íúÊý&%δVª¬Yǧ·ùêô8>åûxš5™„¶Êv Š-Ši¯°À.÷ù»Yä2%ìïÜGƒ2\¿ÿ‹¹"œ(HaxÄvggplot2/data/presidential.rda0000644000177400001440000000056712555771055016132 0ustar murdochusersBZh91AY&SY;ú.»ÿÿ¾ÈP„Y@¿çÞà@ @€ °61°ÊQ“ÓSÕ?HdÑè”#@Â0|ºÅ@`¡ ü±(XbÚpN€g¦E’Iád¯Â¡ÆC¢í­)}ÖÔÔ °BÔ8ñL€èÏ0ãÙ¼§ aáæØÒéÐ~–ÚX*“ [Ü./%ÿrE8P;ú.»ggplot2/data/diamonds.rda0000644000177400001440000123657612537637604015262 0ustar murdochusersBZh91AY&SY/ãl½¶ÿÿÿ\À`ÇðqD/'ÿ8€0 @7ÿÿÿÿÿáÑÿ{ì`*€M[ióÜp:¼Ó(HP  R¨@Phš·d­%¶Fµ¦Úšd $  @T”QJ@’ŠB(ŠÚ¡ ‚H$ª  %I+l$"ˆ@è ØhŠ%D’B©!* ”ª(2Õ­š­4¯%ªêє٪*P `P¶É$(m…Q€)%lÔIERBQªª‚Øa€1$@(€@ ¢€IJ@J¥E”¢"”šÆÍT) 0††*$R¢Sl-µEF-iרÎõ³+lÕcA€¶Å$ °d iE*¨P ¤YL†¨ÕkMQ”@$*QB(H¥**Q°a dÛ@E¦•"U@• `HŠØ¡©P"Û6±¶Ð ÆV•VÌ«f¦URP 3MjF”(5µ hXÖÆ†²R3&ÚÍe³…"¥°fÚ¥$(ºÕ ª+@’áÐ(dœ²` UA@ !B ,C<óÞêõìplòŠñÇŠ€¡ÖL«¶ñ5ê¡[nZíìï[çD¤ E€ €©C*À€€AHf €€€( @”j}õ÷éâj†¯d¯o!KÜáÇw´`s» ¬óÇ•×q§ŽÔt©^B±ØÐ^­ï ^óÎzõ={ÛÛ5yïZÜf8uqï‘àxÜ5= IUP4ÉM `@ Œ€ÈŸ ”¨¤BzSCÉ1©£@4mL 2h0šhiˆ£@` SòJJT¨44iâHhÁ1Œƒ&M4i¦&„dѦ˜ Ð`„™I%IQ ™4iêi¦L§¨CL!£1 ÓÐÈ`@…D@J‘õ Ôhbh46(m@4Ôè“c‡Ä…©†»çiÓM³GqêÇQçh›.ü󞌴Sékr^±<û›…õçs‚ré]!2ªv*÷\št* 9¬¤2 ™±:Mùä_3²áôII@üšvä!\(}qçéãwdU]™¯ã€“¨œ)o†“J‚€¢8\*›¥‰–ePA™ÄßÉŽšý×H­eÂ;™IŽB¡)¥zºÚsZDRaÊ2 Ý)dLÐ"B ¼ûf–ü›SRøDQ¢£…QDCO2¢¢ ‹Èsë)o̪åzËEªbjŠbIª :Zh((ÖœC¤ 0¸‘E9"h¥‰¡ä®€1)A¡ €Uþ}¾GÇRªò"ñŸè×ñîì¾w9p¸åa6hòcžŠŽ¤¼î^˜ÑAÖÇpøºŽ]\–Oå×;Î]”;¥G)¹æèùÞO>E^­š‘pyÏ¿ˆù<è;ˆ/2‰‹Ó?HÂð/„*}šÇ©êsBòý¸”šy3˜žõ8²EEÿDüžÓ\åÄÑ´™Êƒ¦m2mo~j}}x}ZJB„NKHQ õääšÐŸbNýÜ'rh(ÑÈЖër¨9/Rø—¨AÎñÂU@;Èr¡¹äÇÈrë|›rav[ë~CÎÞACçþqùÁ'çóù6çy? ¯G2_£noÖÚNq¼Šòcœeü‹áÊ ªiÏPò(~Cóó¾ëC÷[O…j™_ÉΩSòú?7[}õËA¼ãŸ85…àDj‹Øô ½rÂõçLS;Aq¹ >Lrw©2¿\þñ© …†•ú#ÁåEÜÒuê½ÇM´úªNgó>Î~wÖè2}ñx„ô†O“Ò[ÚŽ{Fyù×&¿Gœ5†¯ ßº9^qÔú÷×`ï©™_4]DÒ-úœ6ÕúôŸ‡²AEϲgÙöq\ú¡æ¨nÙèxÍNwÂS#¬R‚¼Ó"’»ÛDsNžyéì<“=#Rß°§U»ùñÜÞ>×É'K²‹³J¾é}Cϳ‚{Ž!+‡”M”Z¼(/dÚ#òbÚÄóõg?.»«¶q›¢Cipº¿m‡Ë=äÄwOO žbñÍ.§‚aÃs³§\™Ú3¯BŽb”üûŸ¾>êãónÇϲâ,‹#µÝØcÄÿF||3Ç×ßV*¾xVÚ:ÛÞݹd髽<Ôg†§?N8™sPèéäì.,oÔÂuÔ'›~dÆrjr$½¢BŽ(i<´ž¶§…Øb½/—*‘{í¹êÒÆ_“hîáÕQÔà¥NzØÌgÊ't„ÏÍQ“YA\'PrʱZ Ò¡PÕ%­iU« í•ç#\Ùܲ¥aí9[sªbW›:KU´'¸4‰tîfß¾å«co›-e.¶Øºë¸0J½”– )VË,Ò²JãŒÃj¨à"°DOÁæíÖò;¯Y¨„ÚèêÑQÇjÖœ÷5ÎÍ]_—³D¸alOi˜qal³Ò9ÏwuÜrg¨ãC]¦8î‚b;H§'|õŽ^/väNä>Ss·nQi"î£Õ¨Gɾ@µÛcnåÁ's=À Ài&‡«írPƒ!„µ‘ù'nŠzÂ[\×.½=£# "‹&¹ÉíÉ»ÓÞºõ 1jÁAHàžôë1¡Aš&ÊP&¶±QdcØKªh0´i,. bQ–Fmg¤OÊ-œ["šÜÛÎÞRDÕsy×Bº÷Ñ5‰ç#Cžà, a}…¹g€Y”'µ~[+Ä-qù¦ÄÇ ŠvîUfæG\ô@ÜÞ™Gt‰Ü&6„Ó‰â³h´x¯^ÙTüôçà®9 S§¬Ò•¨&Ƭ风צ(ÓÍMì §'™]hÇ;cÈGš·œ6)Æ;œ@ØKqQ)ÆDÅnWSEè¦=¼¢¦ ‚a#mNœƒišŠÒ\ªîÕ®ÀÊÉÊ­O *ž¶SÍ4éŒmkÀêf”¤ŽDX4tOêê–(¸êW7YqîέçÂnq"Žªç@ºÝlŽMyÒ ñ¶¢ç@÷h†ª5cèNQ‹§›hʛ͢—µUs,سD,ѪèùçE]´‡WdìÕÓQA1Çl¶×ƒFÄÖé°ùDÙKUx£ó€šº†ô]ÀúMÂÞ]ÚÁÎnØ”ܤZ*ÕqÁ9=š¹ä…÷GPS°u‰Ï0ÜåÓ¨{¡µÜ|mÏÏÆÞÙÄwcOP{¥ÝmmÄK«RbC¤5K7…«aÚB¶ 9zU8³eÍÝz<@¯gоlãµ’ñvi£Tâ\*îyêYÕÄÕÑ’ú”ÓÅPÑÛ‚&Äb=!¨ÜjB,BÖ§›Î’HÕã(ÕÌj*Mæ:4)8ðJÍŠlc õÎQôŽöwœ„lÄ:‘ÄÚÖ&ë;*,‘œNya·æª„d֭ޔ墙6ß+u¹=ÆTõ4tÀшùèö1 Ý}p-ë%²YOE˜³aeVÑG–«a¶¡•ºJ ™ƒ9Äz€¨ãn`MGä^j›ÇÃÎt«QÍÍ8a¦ëq6¶ÍÅ2ÏŠUj`Ô+Í_CÕ¢×›óuke­+*&ºVs~¼5¬­´í±9[‘0ˆìá„`€ZÙ3oXœeT±×EcM•»Ùê§uVÈæQmoÄ-®¼Rì]¢„™8uÈz´`û}²&÷_µ[=Z€¶',"tŒ ‹£¤·Žá§±Ž’Q’ :ÐTSkšˆÛKÝ\Šg sèÍ#Óg»!:ç*£Õ Ãš`°ŠäÊG˜Ÿ¶é¦ã€¶½`˜WŒ{‡ªçQ 6œƒ€……YUç7CÇO:„ÞÉ™å½UÚ9%¼ãé,F‰™í†œëœá‚ŠC™X£rwdÞÎà™]±wª¶çЦ.ªµ°j’ÑÎv`=U0–Ow[§YcÌu¢¶2F«+Ž·R®¶{œÃÏ Fö’ˆzç#©É3ºdE"ÑÜæÙ½ÄÕGÇ= ò‰àæ•ÍFž¤:¾‰º«Sa+.!9³‹%¶mV³G`ݪ¿:¢Ä­ F…œÒ}Ò_ÛºÅè_vsÝbåz‡lW­»G¡ªuWÝÝž§sÔaËN»9Åê-ÑD=Éõ\À5k:zÝkªA´ïo=Û¨èýöÕõ%jzšjœ!%žÜhòêT7ÒÒb«ïŸ»ë¨ö7Îê8vœÜ»BÌ)U5ÓÔØs+ló FÂÖá<&:‹-h5ª27›²O\õÐpSÀã’GÊØÈòÛÕ>Ü»1»´3:ßa£›Â]UrÉ]M(D:Ê 1ÂZ›{NÕÉn+ª9b‰îèZéÈ3å§)LësUA`¥uTÉ&’ a]$R„d$dÖ<ëO;¬Í·HeÁ#=oͲ¡è#"£‹^2¥€3J kÕT)b}¦”³ k`ãì¤Ekºf#*ö,·k”Å{—rm¬w ›à8`ôLót©¡N¬éŽô&8Ç{'ÏVõMYM£VU#I¹Qa˶º»-jóë§páU…, s6Œô¶Ë-‘>g>[çÂ9uLU‘IÕ‘™CÆ ~ìéÜÎuK»±¥º^èe›»uÑÓÑ#IM—s(¸N<­•JÌ…§Ÿ¯vVÛˆxõ- œr¦ÔtÜÔîN7ĶÖDëU Ræ;éąȵê²&óNê© oºunŒš)¤XM_1f(Ð8« z« 7V0ð ô¥‘¢²+ ¤Ô TÍ7šö†qéÑÙ4¨€‡(¥EGîB»C6rØåí¹IOwu¸îoºÁø­Z@]vnÜ~ï¯s‡aè;Õf»a±fûo»ç·±—»«9ƒkf–Z» ¬³Å&±mÒ˜Á}[æ·g9ïJ5oY ÒÆ1Hî ‰¯‹$c®«çŸV˜šœòž¯£(;­•ËS~‘cÂ.ÓG£m;5se±ÝQ[.%˜ÕVuôÒ{ižº×1š˜ÑE\1³Ët’în¶nívj’ Š»g¼®@£aî3§uÛ¤Pã£XÊVªâÔs§u•äÔ£ ë~¸ªóm¶«;³zGÆ$¨é ½›TñS¼ÕÒí£ñ{i•ƒÙz–WÒÖnI:Xµ·L]wTEÞpÞ|r1NN:×Å[ƒ|夔‹W¾Šñd²Ñö¯½7¶l!Çi­g£MD¼û3r&EÞk+-ðν+Pmޯɇz‹¢[bwTë½­YZž‚Ò‰õ¼ÓåÝX3XânjïKÓ=%ë1ÈqÎO,²œòµkÅ [jyåÝÒ^›uµ"sn*ûQ©Õ]\ƒ™æ8öVFߦá47%:>UÁDFe8Ž/.~o‰ÇNÖB-lº&Ž™Y#™ m‘ë®ê]zl&Ø3¹r—ΣO¯k=ú¾õè5ŸŸFÈ4Ç“kOñ×{CËX~¨¾ëx¨uÙÙww>ÒûŽzËÕ;Ÿ“Vùúè%L¤Q¬LÜÏÇ9Þ•\Š&%«r&OZÖÓ7BH˜„+ÍÐ( ¸ÆAz'uNwVƛǡÕñ”±CÂÆšÎÚÆý¤‚–HÁùª]}OQ¡ 23PõöêøV¡?Cξ·É3§*üâ$váÏp‡¨¯Ú:&³SX£¦{k¤aeuBëfŠ1VýÕøP]FëÆŽó§gìq-Û éPÀ;".œ…ƨ:š¶YÀ¤ 7[ºÉ¼)ÍŠnë3b‘uÙ§cn÷d‹S ÷ <ÖlÇ“~~um".BdíÍÕ_JÚ’=6õZïX°¸O5 'ld8LLP½šŒq¼BŠž|ç…[]”ž†Ë¦<Å:zé[[lŠ8£j8š:9½c¬LáD€­×3LK¹Ó‹)Vmî“Ù®­œK“iÇTœºå¼r6€4Ž„Ûô£µúŒM¦6²(f¸dèrΓ-#÷¸ò¦êG¶J öÐtA¬ðµ~@£Åƒ3ü¯¯$]Ï…î­¸D°Œ†èÉöéI;Dä7A•²iSgP–ÛAÒ8ÛY‡²¡bиèTüãd×_$Ïq†ACÁ *¡É;õ~r©ã¡Lˆ¹A~èDä‹Å~÷‚Ôá„’yn”KO'äÜ‚‚ápþ·ç|žMò‡È)Âxk“¶°I‘}åê¡}<—riäk„ B&©Nåå€@’q [iœmÉ&P2˜œIòbèS3iG¹CC N@pº€9%BÐ'EŽ¥êÖ‡¸ê(Fˆ„Ñ£½e6áÜçmÞ÷l»i žNNZu;'™{èÏpwrNyÂpžT!•ñ àžO»Ï‚‰ä9ÞŽ|óÎNC‘Tþ+p‡çiØéû¯Öóƒø ä•4å6ùÜŸª¶[e^TMY<¡Èòô<¸õê Ç'+ŸÖ­uûô)Žu[äî"çoW¿~íÕ¥Mù^õŠž—Iι¦z<ÏcâîNC2V•‰ @SÀ™àáŸiŸ DýPk<o’~ÊŸ’N˜ýFs¸õƒ‡rr¿9\ûŸ¬šhŸsÃåUpÒ‡§*.8K…ê ^“¯EO®Ë‘çÝ+щ.ú³é|„žgʃXzç ÑOç~è|Û|‹ú6ìò­­,óšøy xжÍäidÌ<¨ëJÖ<«jž@õž÷˯P÷^b{Ó¥¶(¢ô<˜¨¤À½OEöîì*ˆ†}“ø‚"ÑQ.]{Ñqí×ÑŽîªóO6cçIRŸ}yÄwoxûƒžtæÃp½xÝŸˆ+oÅèÐgåǹɠïÜe~BÑòä/¥ÖCÈð ¤5pHÊ=m¬² NÈ£°ióT‚@ÅŒlÖc5A‡ï®U„ˤQ_ÒÊ?Ÿg•Ÿ«'Î_(jcî®Ò{„»=ÝŠ6"'ÉŽXN?;ï·&OµÈsªuI û"&¾·V¡ÓÐŽ¶ ¸ô/+sKCZÍ.)Z¹³ +.CæŸ'äÅÙdÈŠMõÏ?žžÙ»§„ ý+g¢²óñΨ„ÞéG=Zð6€¸\%EL ‘¢h¨–)è Ÿ?3wì1µŸdŸe¢DßoßÏæ=žú÷ääI‘BMM{$1ÏK…Tj#ÉÅEš~@ƒWì  õi¤8Üsž¸á®f ­+[*FÔ"¤œ¤‘“ÊÌ]·%É|†éÆËóÂ;§ qá „™èQÄÖX«®3”ómˆmÃZ yp óVtš¹co|Ó•ÇåÏE³#ØO&Vãi*ÓÖNç>š?S‚ùÖÜhætaF „Alò¶Eøo7à÷Gä 7„ >¶$ÏCQQ(ߎ±"‘1 ¹ õN¼ÒÞ>¬ÏÍhGÇVÅ¿˜½Ýe¨÷^‚‹w”ƒ>ÝN|Q{«Ÿ¨9^¯B¿Ä$ü„@ ¼ÜTV_8é`…cç-DGÓP &›â!CeÚÅ~j¾„®¸FäR´ÒÄ“WFå”óŠZ¸¹®Mú¢ œq¨63¬•OÑ Œë(ë÷:)Ýo›u´¸m=qá*((úßV׊Ÿ`¬uNÏÊ5cOÝ_º³5ƎȵL^Å9ôÑ8‘OKuXq¥E‰$£¬¯£æô~WP*AÁ”Ó̽%æg@útøá>‚úÊ5 h ÕIÒJÔŒÕÀL5·#NÓX ÆÐI#RA6ù ­©m³ØRµÜê8H÷ žgfTû47g @ãèFˆ1‘Ó]x´Lògg&KHÍ>¾»BViæ x®XýhÊX¨Ä c‘ö‡ öÖûFÁ%®w]¶GÙÉoÑ©º-ݧ»>³ÖI}+ 3|õžÄÕ½ÒÓ €›šoòЉÀtffsW³Ââ ÕNg“±_c~êx§²—?´ÎI*ªÔí¶£§§£1¨•4+ôžºi¨<¥„‹6 ©îÕés·(24V˜“ñáºzVêkSN㷹ϷÖòâ³ ?F„Aû¹¥jTÆ7naÏï}mß ïäY¿VeÏ©šœu5ùù8^Û"«7³U6¾y0߯[ _&5ˆÙ'ÖžG¡@ᦣòj9dòÂ¢ŠŒ¼âá¤ï§¢‚è”D!hy©‹Ù ÁˆþY\"h®óa$ ¿e&•²(â/ÚM ѪÛ/ŽW¬E¦­UEÂSHõ‰³ê¤9«‘Ƕ44üÓ+úª¡#ÃÏ Ÿœ"¤޽j+4¨žæ• ño·[ËÛ.}«ÉŽîw}×#Ó8Q{#¶'dsùµÝ}Jx#Ž(ƒÁã{†Z9#x,®“÷óX¸«å›,òù ãßȸ¹5'ßËŒß5,ñû®„ªêÇ9ûíð$v.îãªÆ}klªkØÖ6E1™ }Y6?}¿/ÙßåRwî^ÇŽ\nÑ–ºwlqÖõ­ÌÈZv®Öì8®]Ï=¾ßwÑ{gõp‚ÕÓ¹±¡4Rs¼ÞÉ‹˜ÕR¸{WèMb[4ôÍl²ŠªÖœúÖŸ.ÆÚûmrŸv{¾èéN3XÛÉûvŠó ú>îèÇm¼‹“ô€ØhDÈÎj[\”lmËÊmQ­‰!Úó䜦öaÑM±kºïž{‹Ý¢Ög¹ÛÜš_ÍJþÌ«ìŸÕ‡µ6Ë}še9.pZô‹gLü}Ðð(1l¬ âŠFëòíaá’)”ûb˜$Ž R(F«­c»”x}¬YoW'±IµÂ¸ÁH‘½_“>Åë÷Ö ’v*_s\§Ð=£¸—Æ’7æ5îÜ™O-ˆ8Žõ±|ááC§i*&»~Mßyór€™ ÖA·Q ]UÑ×zB&%N~ÂÆxÊ8|é?V"úË^Üû0fÛ«ß]û¯Ýí½yÔ.ØqPŒMF˜årWåЩ^ÓwtÆ\£ÀN¶aÑÔìUÆät¥ ÚÍüa|Õåìõi©â7ú@}nÙ{R…“ÌE²&Ä!)qHÏ7§+Tfm¹Þ2LÝVÕQŸ93cFÍGqÀý§ü“y?mªJìÙ—4mÑÞêç3F9BµPE3ø‡¶ ÎU“ˆ†ËiÅlíš‘¶Ž~Ä+ð?vcÏR¥ê††]Æ{ŠÛÐ'w±­aÍÎ¥,hí¤‡¹óˆƒµJœ°Œ‹ná9ÃÚßseQ®!€i»ÖEž;qt±Õ =KØÁ'5`ÛtQø]­Ý‡\†æÒ¿}Ýç'&r/‰í·˜a¿7Ä=F·- qîe‹…&è‘QØäø¹s`º=ÍLŸk¦ÙAmÚëVÅW-ݪçLW«qd0–ô[š|Ñcô3mOBð™U+Xó¡tŠÒq¼;T™V¶äj×>~ÖH»‡$]ÃXÞ2ž£¯ÐDj±®º%[óË×tJ%#—IÇk7èýóéúŽÇÕÝ•/3cB?Vø¼Í>i“[ Á¢ô±01:È¿bÂ)üÄ9Éû¯|¶¥Ü²´hSÕRý&4‚‘7 i;;S÷™´Ÿ}¯;J/íÛÕÛÒ–·kG;£ŽãwìímÖÈóšI}o묮­FZçžÓ>ß]­ŠŠ´ÛÌÙÖU¯g±äÝÑmh?7#=D†d˜«iì„Úv(98óÕ×,¨ÓeQfBEY¹Ÿ†Ç {IPJ(27¥¶‘DÈÜNÒ1ãS Lst«Ÿ@/Ï3)ÂE´"&m:±—H-‰ž‚ÒVm¾-h¶Îuï[S™sTá¶¶ëŒÝ2«æ¼ýÞéÕÇÛ¢÷ßK¨ÈúͦÞÂB~mp"S«{ÙWòYëы۷ĖúU›çcs¼ñ­4(Zûa9Q½õ}‹¹s­ š¶5ÓG¸Xph¬í:艟*&Eʼn‰ö­Ôä{I¦z'#®cë××»®Anìv–í.¶±kßoßzö·ÝbMVú;¼šösÖ,añ袢r¬c! ¾Þephœç´ã,À[V!8àU*"µ–PœPzK=ª²ùÁ¶AÄÅSÄB2“Z¦7ÜÕ áÁÇ#=ºÜ>@.猊wl……÷_†•lö ‚?º•ù°Ç£©¨V3“f-VÒJ5v÷"õØî;w’ŒáÆ#oõ@­6þqF=”% lS+䈃7£e/¨à³¥ä¶ÙÎÑ»|ð·Nù½±µ¢cM¯"®ØLOv;ôb÷m¯ºÑ+g£M¦6îrÉG\˜ZgqZ>&Ò(?6‰< .¬Uºšâ¢ LUc‚m<-Œ±6¦º ]Ÿ­˜`Úí5‚滎}–9Ö6ä™8)ÝxfÌ[4ÅA+ºö[—‹ÕʹÛX±jfœ(qÄáQDñ-’ŠUÑ=`{b·Àå®…A¿»µÒ‰FrF–sž×,&Eµf]ßq»ùÂïËèúŒ6(˜šI?7/ÏS)‡Ä‰—XÆÖv?\]ÛqÃãu“y7˜lO­Œ¡åL24õOžôkz—Õ;?ŸX…üúTù¹l9É"i}Љ±ŠÛj6N Ârq¦ÚÄ7 ¬é|ñÄt£WZ+¾û¸£V½;¢äº4Ääê² äÒ¨mf‹ÃÁ£•Êê}ªMôØæº³†\à.’Sgr‘Û5‘‡YIÚã-bP ¤‘œP}‡ˆáw>\šç#I{tó»RÜP¦k.Û£]Ï>²EF³]m©¾Åí7{Ò36¨´Vºß<ª(Ñ NÕnßkœúµÊ)WÎWΫÇSô#i¨?8Òj´G 0Ø£tzÃÆ­vW?k·SÞ¨5Û/W’æó‰¿\}ÎÈBs…Ĭ’|{½ž~FbmØ¡ö†¤ŠF¦CUºÞj(ëp1ôMUµc@œl „W·[š}И 6Žt±Me[Iô«&Ê/šbµ·²Š:ÑYÞΚáÎöN}õÇ×Ñ5[ÚÒE+B²6ž®²¶áGk_ K#¢”!ªäÊÕfÂûîñ1æuCµ˜ çšŠÊ‰? ¿O®\ïæã„‘¨£†¶).ìÅèØÚ¶FöíûHôÏÔ)³U¾îÜ.ò•3í}Ó¸W~mKî­#uA8ް¬õœSi‹dœ—n\¼k¹§Ï¸‰H¿;y÷˨k15aĪñZq”‘ÃÒ4§sî‡"´ìô! #ŒE¶ÒóXzRoRõ'Ý+¶ÐV|ªƒTã›Ç<í:Ÿn²›¥ÎÏl­Åº{¼êÉë}³ôzºÖŠfª…\í…l!"$’^éÇx÷(‡9™êçLå¡ß¿w_KUë^¥É³$–úZ­õ‚uDAÌB«úHÁÓ½rrõu-ÖåL½ÅÐäì”9½V-~î{ÇjýO\¯îóZ_Hø- "#ÍÔ±K™Gàu¢F¤dj)' £3гK jî];Äž’tu4©R¶Q WB­H¥ƒ%Ê[“Èg¥hëUð5žŽ«mÑ®»ï¯¼Ït¢"å­§ë±nÜ9õÕåŠó<ÛÑ‘4aÆç¶Ø·UH½"• ¨) <ÏŽ ÔíDIkBúùÛæLé$žž#i¢1ªCçb„#øí‘”=,•aÁi쬖‡Ù¥Õh7Ïgª_9xÊo]b$ýÝú'å%eú&~Üí¾{||¯—½5Æc$L®ë·m©›%íôcy¼ó9­§H‘ˆ á£ô<Ù*º,ÕöB­•ƒb™¬ÛNÏÌ&Rôë%Ml53«g{1©3›#m7¸Û)ݬ»/›»m»‹{&sr[1žÑ…á™gDâÓ,dòÙE½µQ 2I×=¯lä4Ù}bn[° .*ÏlÓ”QÇdS8n¶æÚ,ã­ë¥r&ópçOƒ»¯¤Ý]+‘GcQvœníi[ (.u©>à‚xZÖ§´iWe˜*ukÑE}vºè…9]‚¿HüÀãkÂt3„ÃRELî v‰ëI‹l’HTLE¯•,îàícì·x¬âû¸éÙÆôtNª'óèëµ }fé©=\Ì@I:ÈÖA n p&‰S‘’qS®ˆM æ6Îô$æwuÜ.É®c¹ÅÜAëRwž¯²5Å­NÝYŠA0ˆcmmÊ™$x4jŒn8FÞÁ]ÖÕn{ÖZJì­Çë~ß§g«ÝÇÉñÀ‰$D=Gv#©öî™­ÞÕ5Í9zÈÁùëhRÐòì8žº™bí0€Ñº8}Ù­ËçÝÈžjõŒå^­\í‘)ǘ,{s¼ú.€Ä݉£Áæ&Nh­6ä—©ìIÓ¥˜PcnÇ<Ù¦†ÛGTÙBžú+†(þæ¾Ígæ7`ýôçV9[¹®çÍútnqî™ÚµÏ[óˆ¢L84ò–tÙT‰Þ%îupˆ›­mp­7±{ŒÎUœÆ‚NãH§YŽŠ{>ÂYVž$q[,—«uNzižÕLzkmn`MaºFÅȜ턚x÷)‘‰ÝÔ9Áe‚„¢‰)V›~ì~$X´ÖB–K „(ž–xx4“ÝåÑì­ÎUT®jíIÈ3£»*Ÿ¶qœqÅ‘×ebÒŠ•©Ê[»rªZÄCÕ®Q q·|i“wY—_8éáÈ ÍÒºÖ6ò;)æ8k²°!K:ëtèœZi¢}pÑ·ÙÈž_F‚rº)@Plø[>±±ÀîDÐqèhÙ^´²PM¦ˆ£žci§»0mˆTi΢=NŽô¯ÀdoÕÛe}¤AeUKNnÄ<þŒsÂdüœŸ?­Ÿ¨¨DOÓÒ Y£ðÑîpŒç'9ÊE"²0²%jšª‰V% çšzÞ²¼„f™L§]8î—MâKoÇ.uM®ÊESpšúŠì´¯["I â‚´‚¹$C»žCé“N‚hómt‚Îd:È,[¯µ2 m–›ìdŠç«PZ²’A3)\R‰é"£Qj¥ŽM.¯ìÜq]Jôç^ó÷ZpɽÅrVŠÛ$ᲈy½šyÜôîNrÛL;Å®©µjyu~vé: =8–½:Ó«yÜõ¾¶Gß5 cæënfÅ„÷6£!KkZ»Î)¶Ú?A;”^£s¯¹Zô´ðo 6”Ó[Í€´jˆåT|¢ŠdŸ#óöÛÒ‚®"rÑI#Ÿž:­"»ËTqqʶ‚3G›°QéåH„NŠV´ð„МŠ<9H@@îœ+^Y´q”kízè‚5çôbLµ¶À‰“­–sÒÏ5›ˆ†=Ti8ÏŸ¾­ÓÍ#ˆ#!.¯÷v¿—ç²XüÓLiÓÓi›¥UÅÓk=gneÓÓ»UW4ýZ½X”Í€Éj‚ädÎX×sYŒ.ͼ%ÙÓÌg™oÏá0„†L7!‡Y-™û^9æ_Îuˆ¾][«{a˹•}ÐÀþùéøø¾ˆnÞÊMhφ%$WYî1ÌÖÑc*OS»«©×uDA§û›oÛî…•NÏ6§õ[îä½dߺë´sa}ÈFlÙêáììM­_eÛ¶û¸z½­Ïˆ&Óð>Fεcl®{»áæŽv§îç$rªa[HÙ:¾’;­òiáײj²ýéö‰|ŠwÚ[c«mjç¤R>‘–®¶Ìç:µ0޾Û>ùÊŸ]¥ÆßhûGÒýñJm ž'³³íed¾¿bûäto_†ÉW•EGŽÑSÕ¾Ù¨ÓjFµ¶_Q‰É€d–u±VÆñ9ð°(Œå˜|œÃÈŸv?{[ëy¢ŽÍ-G×nGö·|÷ èçØ?\÷¬ƒ‰#G™æKž×G$„Š*Ä*«‚‚bPoUÙd SŸy6Û¤êkj3…qˆíkö¿XÞšŽÞÞ™ÛllFUÎ/'Ý=ÖþG äûí«Ò,œ"{UóY å/8ÈǪŒÌâ%cÚå5¢`Ý'£NF’1W¢Víel"xlN<(*{šÕ^nÔM@1Ló-¶ß¡ª»²ârŽÔ<Ý÷Ð9;¬%D„m€A[z£hŸ54‹óð¼i´ÊØŒ®Ðèö/“‡¶£z()”`¢mJî~w¤¬í~ÜÙۡέ:Ž©è1Hð“b¥ª63ÏsÝ“«8gè-u™Îp,½JŽiò9ÆÎ+_ºKõ“¾/_D'†SJ+ôÛjWôù`ZºzRZÜg û>«sé'1NtÍBW¶Á *äQò’M-u+®Ù72+µ›vˆ‚zOâF‹ë+#ðÇ ê?—këíÔŽ·ër®ŸhÎØþwì|kÐÇÞ}Š]o{ww°ÇB9Ž1©ç ˜óVؤƒíV°hÏŒ¹¶ê¸g«ö% ìaúà" £q¸÷5Sz*b ÀC}'¸þF~™Ž')’¥iöÞg~Åž`¤Âq5–ÏéçÃÝÕúwŽ¯Ù¾ôqV¡è ÈŸˆI«pµÍ6µq–œ××—X™‹JKFªañï¶NÛ 0t•tº9µŒqb<ÔY:³ÄfªâC‰ÃØ‘@|â•‹&¼©åHytèŸ>æËÍXÂÖÈJÉ'vÃO`á^çZ§ˆï5.•øxô)éZPPB$ë·ž~j4ÏaŠ 1X;ΕsÂ|à›Tâ…ÍÄ·Väò¶öÛ9:>“pÖèÅœ©›5TRTgÝ{?aNP¹úSÍ:E k%É—Cz–Ë$j<Ú‡E·›r'Kª‹9ψ,wm‰e[ŒX½ÝÚr*%Ðf§ƾmLî§ássÚê¾Þ2/¯böÑèJÖ®îmб?A8?=àšý¶½îOŽ–NЪÄJä³y}æû\Ø®û{¹…vZÞf³y’5”~ a<ÕiÊ5kAM=êI¼sµëK}ÛäçSôa/±8z ()Í..ĸ~„ë/Këï!ö%mŒ™¯ÎcmC«^5fcD ê”}v¾¶/*š½©Uë&êrTÒ¨Wí'òß“øÝüüuÅ feÛù·y§µn‰äR⎎sÔ/½ ëcnFDÓ+~L•«ã=í%}h§E¢©ÎÍT‡¤‘,¬€,Ú3±‚OÁŸ¡söÛ-r+V n.’ ÖÙ3´l<ÔŽ ì”#Ùõ†H¾ljû9*‹?XœrÐ{D.C½£!U›ÒŒ‰¯ùê®ÝFyÕÃŒÁOg§u¤M0÷X˜g9¨·e’)M=­Wg’‡¨¡è&z¸éUrö{E‚1µ¶‰sÊVt@¬Ñ(%@mèÔžÝV!äÇÂxð#fº©š¹ð ¸ãÜZýã+ͤ7LWQÒûôÛ÷в‚½i'yÊ~|ýõ¹¾ŽWqÖy‘uFSºUÎ~|¯bFÏ1&geR$ˆèåw¹ŠƒGí2vž¿Peå(ª§ ©£I¡‹1‘1 wË{¹>,±µWœÙò‚êñ}û{<’JUg*æ/¤³GÕÔ§¾÷y>Ø›îÕÌäJ/\chQFÄý-Î.uÂte~AäÏ5Ñù<â¹,^¿'Ç­zß=ú#ÕëœLå¢y'‘wäüžú%q$!2‹‡ÏÈJÛlä5ÛÄù|¸ûJïHýTWîòôntŠ,î ç]úßkäY>£ÏÖU{æ3ñS*3}@ò—»—ˆ¢Þ|Ÿ*E+XòÂT{&Á43s\{~ÝDLåÌ?2Žûë=,þõä9ù>úù ÝGä9ß:úÇE‚Cçœ(THs?.…z ÷ïŽêaè9çyá2ÝHwÒáç쯮ævüŸ9EÞw‡ßŸ{!óh9?]¼ xnĆ'b?[o8üî~ß y¾… ÞNL~wG1Jw%9&‘¡(ñ¤:•Ä=JrCļ“©]Ù^ãAÔ‡ÔmÎp)ÎØïAçÎÈH}ëpri4ùË·\=8ó¿;÷×ÍhìK9â[ª€$»D¢¬"ÕÖÝ/-…Ùv‰ñ ¡¨ÅÚKG·^Î}$틨ۆ•¾Á“W‡‹/BNE¥; }e?9~{Ðyߋ̇)Ñ/ÐåC„¬kƒ³‹«òÓÍaEkža5¨T †ŒÍúÜ^oÙûº»Çq8S›±âG#Y6¨ ­‘+ò“¼-ìôÖÓé¥ÎÔÍyq#°ß#×”ã´Ä¸æü!f9ª"iVŸ½4èÀzC7MÕŠxÚ'mµÂª­~§¢$|VåfoUE|GH  Û×¶"um ÷V‡¬:JH-j‚N4=+“FÑ<²ˆmŸ>¿]ß¶ÇØçÞ®Û©jEôWµlb.Û)Ño1é|iÒ^¹°®.1àÇ·š~øÎ€ß¤&¬›s¸¯;o3x³DÎ|æ,@‰T$úUOÎâ†C—;duE !¾¸^ìb­ÛÒ¯MxŽ•I‘N᣸Þé¸WËiG¨¢çf¹îï[Ñûl!´(rwÈG=ær¾Ù5S"¤^·k‰FãfAÝÛ¦z§eYä ›Q[·w’/HÖAèYÙîàte÷>>}“ÑÏO»Yt绹ÇpZÊñÔ(r© DD“îÝ’‡tÎDgÀÏQ‹D×BO%Ù¤6 ¶K»dA6˜{¡¥ç‡àƒKê™ ( A¤Ÿ½ÚÄ«nuìm¬XÒ<=ÂÅ£zÌå˜X­©¨Â*Ìæ¹Æ6w.UÔrs³Ì÷ ¤N·gOŸ™HÔwN¢ÄgÈü'®‰S‘Ì2 ù¨éÓ§°›s D¨³Î$ò„•‚#q©'Ñß1¢z5õ‡€–CáVú £ñåׄZÅcóUÁBÅçÚ“º­³C@ü‰? FE#hdRpª§+®­û‹âˆ½z;ní»Û;§áäSšÕ.lèýú˜÷ܶ4Üé+¤ÌJYEbŠŒ’…s“¾Ÿ}GÉé"bÛ*…¥Þ~r˜ÎFlª+íy¿GwsSÎÁKN»ž2Ñq6˜jÈF[Ý&`huY]p ‡r =Y×®¿|AÞ×Âåá-îW#›B>Úö[ íÄû©¯Žï»Ø¾6LÏlÙm^c;kjÄëVÕ6Ù5Nò$ÆÐ»Ý{{/»Õó‘ã·Ú&ÝŒ×j£µ†ê®Ç&Eü››Ö ‘P^"RH§EQA4ù‰­{ªŽ©{ >_žH ômÓrqÙ)ß^Û“wGqIŽû‹G~æ­šûçõj6õúüDb4£~’EH} ±Y èy¦ðóóæê×Ë[3´=Þ{Œ³utZÝÛsã®ïwž¸Õ7³¬¹Ò Ô½ÅÝ]ll'j­ÖÑúíºWJJüjq‡l¹i2YÛ?¶Ê*¢+ôDH iè»d[=µž[´S·çIù¸ú_}¹-tvñÂ…g3]dT_Íõé<§ÝnNZXÃê¨Î_?iSó'|9DÇk".Á.õŸ·b_GÎJû}KÒ5}ôs<6’ë¸åÉ´ý‰ Ê>nl>›^\¸­‰™Êù±‘¡mavÂw 6jÕ¨<#kK=i£©ç#i‰µÇ£Â×äiï«£Öµ{ÚÔÅÎn&ö}£8Ža丢9¼)••c—<£ˆRmê`fqŠ ;víä£9÷ëØ×}ÝÉåºrØË+­ëôl §0ƒ˜œTÊâ{dS}é)É,÷Xe¹¤ënÝC¢÷Þ¹áj¶ÚŸOTÃÛ¦*/ŸN«¢q‹Ã®œ÷“›‹Ô´/cy'Ç"DwWŸ §>–šêüñìD}­õÏbâ•Oµ•‰…š'¡¡j²ëÙÂ-m“´¬±}‰“Qb:±ÑiXN˜„^ÉtR×@º,WŒ“„ ‹jEñ>ÊúØÜž÷Ÿº¤eη9Žì(¤“‚‹>Ã’Lœ™Obv¥ñÖ܆qH‹ìʘ¢¢›[.döBÛZ_\n_¯WÜ%„á&ôy‰TÁcǘ”±J›wÝ‹:Œæ˜g+Eí`×}Í>l\0gu글qìH5`QÃĉÝÝkÅÅךaÆ2 ˜‡v™,©dÍP'Ýt´⋆vóŠòÓ 5εù×Ñ?¡¶#°œœ®Æf¹ØW]ßg4‰r<”½õóÜŽ";V¢V59‡˜µŽ§I_W¢¤çÑ–ºfª•“]<ÑëP#NâcgÂSš@™éÈcÖÂÙ1.ŠFîc·Ïªj¦Œh†ÁG&=mÎoÇŠ£d'ƒQ¹,½4æÔA@`Ï7.É’é¤XN„)–iéƃ|㞺Ï&}ó_To‡êÞL@ æ“yÝ_€‡©'µ³ÆÊ¨DÕ¾ceTúÞ™FWݨì&dÛóz©$u0X›³§¬- £„übVó³åÓöáêDæÖÄ_»xU>1Q4RÆ@Þn•¹lâåÑNZ#4S”“ ‹®ë’ñpßžsYÙ³óÝ4],>ЋjÍm8‰¢Ì>'Éœ®]÷wî2¨UQðÅZ„Î}²b›J(^®«ÃÇt—«T÷l‰„ºEm7bƒðK2-ˆÙ¿q]Æaçf¯›èíR„Ä8ÏvöáFÉìCÑ|ß;â9Rýz{µžd¼IQS¾|ù|㚣£öw¾Þº2¹t¢Ÿq=[wÄW¦Û™A7“»®ßœìI¥ß\êNWËæv‘–‰S»¸^¼çÙ21CÃÝÃ…6†‘ oÛ& æÖØÏi·4ƒL‡<× ÈúÂÊœiÙ:(«ºÛH;c¨ƒwÁ;(.å= Ñ6›GÀj SÍL†: PT…TI+’8äÝ×Ç.ï*¹«’ 7}e²k¶Ïm$Æ‹„N¶Wµ{zN}©¹:vî?W»½†)F2I@„˜š°“‹ñ½¥ï±‰»Û°~ú4JßWÑöƒ%µƒêÕ5…rL1/ÕºS"‚ãöž•_™8Æ9DúÈpêdëë\á Tõ€1*­P¤~}/Lá/lÆ|lHË»{Ÿ=$Há$‡ˆBÛ Ò$×xôÔ‡•F±Õ ˜X‰"‡€‰±¹ZäŽÛ¯¬k=š‰ÕD«V9#&½° G÷÷ %†!ýv¤zí¬wt5îÚV„9œõõR M`@w1ë/¬2]ÆæÛ³ÒÕ”ØÚ•?FPU?vu¾ÕD[ôj¢tÒ ]OiVÙm5JñP±¬”Llôbm—™hÖ\õvŒóå¿vû¾Ö-^Ù6¾ý»èGè›ØrÙ-eVO:D­vöÊY 4üÁª'o‚¦ µzÆühÈöt¤”•4£ ˆ4x‰Â%e®ØZÝø[+Ó³¸ 22Ù‹ Ù+qO¤ºµË§uæã€«?«ÅŸ«Ÿ½TÑši—çÒ¼œhˬ|öñÃÙëí)Â&´–ø|XÛÙlCh!U¡æ­Æi{jÝÒcW¬o)Š\ç*ЉG‘¶“U,“ä¶Î"óÛ»í/…ú†õQ*(¼lkc+¼uÑR 4ºßGbO­ªªì*5IÆÁ¡>ÐE!$`ˆÚ’ÄÐKÖŠ×uâŒé#ÈF˜äˆM°iÈÔZ.×'"³Õ¶›ŽN¾ìül;¾$¶žõ )æß³Àé¬â˜~–.<ü(›t‘'ofØý{u_“»b;q¥÷sÒ©Õ6{aÕ~Ùóì§Û(¸ýÛšôr9„2C9¼‰RiÖÁœêF6ÏêzaŠç×µ†Èû^Oë´\â\9És^YG±*S¥‹I)è‹Gª4Ú‘ÐUš+# Ø21´\ŽëÓܽeõ]$ªtVôÊ"TÕéîBÛsíN–\ð9-iªûC•—u§á“­‘î¢ä íw{m»l ½ÌÈCéÜ âlOa´ìRbHŸuÞmæü›œšÛ¤×®ŠµÙÀ}{v‘ÚSÛº^]ÒÙ$LèÈìqÄÕ\ÁïJÊ‚ÜòÞš­ ¦a1A+Ö“]ZhmØÐxèf º(Q4üðƒ“ió\ûžÐÕêÑ©P!žcÒ±ú4'†…™lê5n¹FHÈš‘êÑlãɨúL¡³Ú&äŽmäîâQ¬¥ÆŸh¡…Ã9n7¥È¾ýYè±óË™nnÒ­°×ζ13ÖH$ Þ=HÕ‰‹ã)次Zt–‘87?]‘zÄã"L£íµ7~ÝE×áÛæÎ8TKf´~g¢’#Iµ(óO¯º|š¾û`æv3’ Ã{®êæ¯ÕF‡¼Ú¼;[Ýd‰áºØýÇdîNÞàæ1tFgòCÞeQ> ˆÇRƒÓ¢§°›Yæé°ð÷ÏÞÔ~r_Zë ;etvèý÷yˆõ=y4Ûg¬>´®FØ)“å‡{'ÛŽë(ë8¢¥¥­´–-×®¹>x5Ú­"0¸o¶óÓO^‚J%¢½™3RËÖûïçîê? 3ølj²:4™±2d«õc‰4×”Î;„ýª‹Ô+rŽ-Gè+²uPM £bj„gK%¡&Þ½Ö„ñ»IÓ¶•Æ-ã.³¢|P×™y;Šì⌛ÊjÕ£çžTæmô±£êÙ¹d‹Ýžïu¶Åï¢{“‡ÛÌ2Ík0Ò±×cî~µÃ@Zö6uëOZ6 QÛgªQ²5Úf³„jɆGáƒ$fk êe[X˜6󎰈Q4ÂF£‘(áØÈùú…úX_r-&Îm—Ï¥j™Zl zzÝÞÞÍK.LÙØ{m«ëã{ì1ª¶Ì2%û¬~úz.örbªl¸\fWLBÂ䥑î·é÷O﯅C¦öœl>m)Úæx\lT™ýû¾{a­óì`ÖÄÁ*gR›©Ì¤@Šú}»lËsŽë[­Ý+4¼›$¦ÞÆxs—ÙÆõ[ i²²gîýûöü15/ë4ÛÔÆ¯Ï'5îÙ½RHÅïP±ó·î¾>j%“åtj¸•BdGÔz™Ï–%×vÏrwG>ŒvÁª'’ÊígÐó°7o'w{^½®Lù´ ·}µ£¨m „BE‘›2‘³› ÓÚ]¦M¨i³léIÎ$sžš@1‰ÈÔƒl|óú½ß~nåÚ=0—«;rfgœfìS6çÙ}ÏÌ䥤:ÄîN*ýÈP@‹eè˜& U¾‘Ä"Æ(Ä 5¼b ¬‚ll\Ÿ½kÝÝЉwlz[9ò.EŸq¢ÖÇÇnäԽю‰¢/'Wvݘäˆb-°›bÂwSËã½›ÖÐ3u·hsÔëÐO•|KD¼æ¶^§u¦Ì“/¯÷ׯ·Üꦪb!I#óÙ®6Ú[i/žè]ÆuúÇ<:oª³–ÚUœ;F(èîãvNìœ7«¯Xf¡G>Š«»l›S¤îÙiíõrU}²™5yuõ¯»p¢È=¡ßY9º³#¼½°Û¸åmFˆH”láÐÂm„Õ,#Î Í’_^¶µ+EPŠ>{g>SøfëêùÌûî‰ö/°guìn®o33h‘Æ6-…ôŠHºja;¯~ØÝ~ÛÙÔ»ÒµF"–Ïó·ï¯}=Yˆ„É+¤S$dQÉ…Æ6M[®ÆÝ‚gZÞÖ6¿w{îôagìa6sª’s ï+z¶óY‡ç“aô­(ú”_=³±óòwÕ­½××=OV‚Í3fê Ëå¥+ÔIšÖqíPû[: ý§®TU‘ŒvÇ £a†-¹ÉݰŒ>äÊ9-û¢»ËèuuâÜ>6ÕgÆvH¶ÊD·²y§º2Ïbè·QYðÌê»8¥Ï—±Ö•õgÆÅ¶óyEòVÔ>z‡3ÚôšcL¯ŠgÙ…6ç¯zF½wc¸á;w=’}I1ÚÔŠ-yLíEZÖ¤õyž‚|jhV¨Ý³ÊFÄ97Yç9GÇ<œû<œ—Ÿ(g!§g@»PøÆ½µÏq{Ÿ'†)„%=mU}›Oµ÷29zÅ­qAÏB27 js¶›“]ÙJkÖû[&’§r¨w·v}׫§¶Ç6û(ƒVÛ‹vØöR–kâéÒÜÕÁ$sv\ eÜK/£cîYFšK”×,Qt]2iì4zc»NêYb°Â–."¯wml\aŒˆÝ8*úxvR6(Ò¥#,€ Ç$çªg1NœÐ>~æüLCkTç¼£í\ÃX¸¹ ½–‚¼\š;—õÉøV>/ ™ô4ˆdçX©~áÑ>¯Üû•÷,œPi¬Ô—,šÉbÙ«°³„˺}­UœAC ÍhZÕ(£¤–OJä1«¤«#ÛE(+Êìën fo§Yl“9áÙjÍøÝ§­@^²³G†åU9õ\ç¹µg¹¾“4ÊÚ¡6¢õ±Ë­r_®z^çs$¦ªán °Ó/*û5¬±@ÊäÖ­äæ’·§JûÚß=/tW2ìð·Z¸bUD× ^ŠöªHj£ÖÄ£mQ¢H¬~ňj“iÃ(#zØ›‘>D®óoq;•bâ¡ó‡][ '>6iyæýÓºÖÁ2+|ºDRÂ5G5ҩ㮥MòzÅ-WBÖež]UÙ{V!7bÈX¹1y ¥m8¡Î©l’xÄšwhÍ¢{?ZØl®çÞœ¤-RM%œQ•Õ­`“…KZÍ*8Rï8¬õ'н œõ»(®jNÎTÅcöôjWŒ¥âd}¶£o›;@]gTµjí¢³H7ÏРäÊßhâËÃwÔR¹®¶1Ar‰¦ó½%K½Ï …<3R{ÇtKñä¼’]æ|„¯5ÁNX â øõi±ešÐGصü}]Å—q™Ïˆ†¦ŠD &Dz¸Ú¸AŠ”ó=ã©YZîRóc—¤)ˆë4¹^v¶*œœZ25ÚmL´î2¹¬㺨¬“hIeCtNG¦V©—JõX¼âœÖ°hãߎhö~ã͵$qnÑבüìzÒVÓ‘;\ÛâÒUBåÊÞ©û6EÓU½+Ž8­“lK.¶1ÖrY#©êü¦±-îè–EÏͤ7uCFf¹©4ÒÎ]=[Úø\ËÕ£ ™F© ñ.-C~ÎêœËm“3'›pˆP¤U¼ÔUiêÞ1kQÏEÍ3<'ÔqL£fik¾vÔ+#ž5¸J>À°¬ü$!¾ëî5}í_¾ë}î®-Nu¡÷ÉÏž‹Œ8íúöp'& ©ÚËЍhFÈVÐúw56 3Iß„(ÓY´=¥¢?næ¸íÖsp§v¼Mݺô½¸}PÌ-¤¤ƒZغή ç¤íÇLÉ QW8ô›4­q U:4­iÁžLŠ2sÝ–éôµ¾Q‘©"yÒ9ªŠÔ㸱\aý¹TÐrâsõFð©µ]o-<Éi¿'Tœ‘Æ´.ÄQˬܤ‚Qä:ºa1›L¸y‹¶Ò®ÃOŽª §(œSÓÖɉa@1¦­Vç¿'<ó-œ#&»¢Û÷æòÍ÷5º­Ùï«ÍaŒç¹Ê6ÄúB&µNfü"Iƒ?{*í&f‘I>RÖæz-zÛ±÷‹¹ØÏç+ïÏÇÀùý‰ö§ëLɱµ›1‘ƒŒ'sË&Ÿtnй–†uk<ÙÁ­}wç×Ñóê2)žcuå™$‘GªuëÚŒç~ØÏí/}Ó ¶Û\1w¨XÔnÏÓ´¶P‡¸K;Îm×ÜEO]6ÖG:˜Ë¢©d°çT&Œ™;+3; v–¨üùé»Üuìk§tÜìõÉ¢@¸¼è¡ît“3§6éPÁ.çsWzQÓ&ªæëB¹4#!—ŽG‡k»BG¦á¥ÕÈÓRÆEÈP÷ÉÜnOPóí¹ódb;¤EiÞè"õ‘=±"é bâ¾ÊR5ËV¥Ù3ëÝöì'õ•Þ1÷´itxk£ŽL!T™é(ˆGˆ—9s,&Õ4-@ªæÚqÇ$¨ö½¬r6ÒÛÓr²5Ù#§6*žM6DàÅ aª¤ô¯Ô¼ÖÖ <ôv!¿_½ûí©+ßVà k3 šØbz&lÖDH£iÀa£7Em“º-,Ú.Ï4™*n$ô²19Ÿºí§Ëc&×ó‰Êßh\‡3¥m‰¿5,RØ¥=c%Òîä÷d‹%Qr›ÃŽÇt— ˆ§©¸½ö§Š±PRЯ«–¶‡ï½?/jú¼õuâ|Šò‹æ¤æ²·uãqclâ;²¶-Ûö³Ã/R=F…ÑlŒÜh¶v°¹Wd‰ÈÍœ*Ìr41¾Œ!uLަp¸dÍ_~Äh{¶¯cj6±ckÔU~è®”qq×€âÈúŽ8I~²AÈ‚¤ck4VÖ½wïÝðù~íoØ­A½¶Q6Á= ÌacÐéóU©<‰Ï£Í¡èÜæ ú«UA‡äkº±­òw±uæ´¶úëv«¾í ½³hHcbg¨Ñà^Ç‘dê§ïÅÚ7çó:,ëºG3RÑ-u.ÝÛœÝRìrõÈ(ât_¬ó×ížý|VÓ] µÔeóóê9&NÒæé¯)ƒ„U4ý7²¹“2b¤×c?t|úè"vvÂ)¤KÖýÇñî‰[ùlmïÊõµ¤É…S?Ç#з»Ô± ÷YTJ÷aM½U‘LSjZ1.úë§j¶[ª˜õª–)ãpíTW$ÕÆªPMç!Iâ"B×!A½põq–ßcjö…'Ø…v;=ŒJ$ùQÅ“ª[|ï=ËgPS/çšcá­Ó¥<4èøR§VL-²„ËLBþmy;íìpËP²ÏV˜}+m9ÚÊù}¬8-*,ÜNZÉeÕoVi<ØîpѦf4Ú6î¤[å¿>¼ˆ|WÎ׳²”Ëìê6‚Sk/è­{_6/=l¯µ:XÔÌ¡LO“[ì[¼5ó&˜lg„Ús¯¬.wšbuÂsM€²8›tÃ]ÝwIïEb'ºCJ¨låžu²'Oµ[ Ö~h_Ûjþ0ºýcö;QtgÚÖ»Ÿus‘¸¼C¿—ÜSÍZУŸ®{¦ÊïDÿ>í\êê_ba$¦S6¯€ BÖF:0b'©¼Ê‡TùAj&U¦Ý×zÜ}ŽÈùg_c;t—Ö›TO[¯ª¸Nî–­¬iøm«R¤6¤˜%rXVU¹|öõv­[gù°õÉ[z?hÏŽ¡+~ßur‘¸6=Ó×e«G›g —k®CT–Àá‚í=¨ ƒO§¤óMIèËÊœŽêú>úñör’N›"„¹})G¢q£æÊ€÷50VÕŒò€ÔÔvÈ´Q¢TKnây'ª'ë{ ¨ÌùúΪäÇÝ}Ä&hc¶^-ž¯nzÝj[u“qÙ«‘œÛ–¢Žöêµìª†å4Ü8´îSiUÞa=8Ò`ˆ'¤·ºîå5¯9ŒŽ.Ž\—ê÷ÝF©w\¯Š9-ìãðÖ¸´ƒ,¾ECTq€J»¶í½|ö8E¼ï»²<5y™5žvV¶Ï<ÏQ’@´«Ýñ÷½ËÉm•Á݇»e¥ò—¶Üó®g-TjSOo:ÔÛDm™}úñÏÊóœŸ œ8r[Ó¯Z0?vr5-´wm Eœ¬M¸ISˆ+o´®¸.mRX‘¬[c»[¶MåŸN]µŸ<öݲsvÔc®zï6½ŸCޏüÇœß3ÏW';—#‘:¾éí)Rkuí¶n³×¸t½×wŽçwGuÜTSæ·or¤äääò!œ“ú;3õ”R£mlYɦ‚ñ¢*pÃ2(팦ћíºS’r©³µ;&l9ç>N|Óín»˜ÏiEìíÆÙö(Š×…ÎW¶sÚÑMrFí»¾å;ÔJ»9ËtÛ¢b¥!«3Ü8Ë×ܨàjÈ{4Õ¤ö‰Â«I†ö±¿&I*Øo][zöm#¤Nõ.:ÉƕåeôŒz.u±ñÝRHœÝ])ÝS·§PÄ:ö@ æ“%E#Ižéµb¢qí$¤©ª»4 Æ›îxŠò#ìN3a¥•GVz¸hóBz‰W§¸œÖé+ƒ#i/Tâh†0VƉœÃ1‚:Ú+M VÌ tSbWî‡|ç« gÏ~ß}wÐrR¡*F½§M2ž”4WL&Î ¡ûIF ï‡#=Q§Ž«nìSÁ³µ4ë‚§Wph÷³õÕ:”ƒy¦h4Õñ«tòÌ>iÖ±±¡÷ÖÓ±z܇!ÉõuŸÜ}Þáû­Ê'¤]Ï Væ}ÝU ý”ysµ2s\!ekb`¨ûÖWéX‘Ó*ÞÊ•KÆ=®z”(Þr6xG›¢dæ 8PbŽO. Ê)ÀÑÇК(½¦6‹ÔfµFËlŠ› :o‡Á ñO+»{¯RK˜¤ µò}ô§×ó{÷è—ÊóMy·$ÈúÞ8é;ÙµtgÑ‘ÆÎˆÚ%·ªýÝ®Hå»XÒL`>jÒÖ†ðG`R¡D úGFz:Šv§­vê±L§rÆJމ֧¥L™¦+|`Ë W#?Rlã¾äü÷+ÊPLýØ«yýK‚ù,§}÷Çte¥^’óî"žjíY}„ˆ×V‚VËÙj˜É³êؘ¥x­iHO@«§A]‰†1hbg=×·t¨ÒÍ4m+[PhãGb~gŽ|z¡dXóW›Ê DhY§šµ„ŸRæö_+둯Šäù^²®ÇºtNG6!Fˆ<(ªuÁ´ã_=Þ½3çëçt6‡XÇ¿bÅ\R1¨Y ìÒ«òÅNÇ 5|8Rìû•G¦öÛ3ÉËô\vùÂÌš0¿yäZ‰}úõÅ])ê誊¦ìtw4 ô°N“Û΂J…ò„ûò]+³Ÿm¤’D64öeZ`ksy¦f˜d¥ÍD=%oÃŽÖ£/›mž4è¡GW<¸²u»ãWol_„Uú¶hBM©ô‘«ÎM¾mæhèzî"÷.±«ÇËÖT$Àeé;2<'Í‘ÙáÕ«=«wSÂuOµ´‹ÏbîÝÞ•:—ç·ol0ÄÃêîÞ>ìyE£»Ž™­_•ºŸ’Â*½b]>n!3Ãk4àW[DVV¡»vÂíc¨ûÍ+®¸<ºi¢™¯UéœèÒ.–F¼Š(¦wïÛ㬥׎{ßS¯·fˆUô„?S•oµåÔ³ a>¶x¦ôÖÛ7ª¨{±•ä”I-¶¶óŒiö˜±O¹îï&„æ_s‡³j¶›ìR¿fýǵ—4;Ö ¶‚ ×€^v''º¬)`–GŠÑ„ <²7)žL³ !ó‚Pôq9EAlÒ¨ÙHWã•u¬gVG“éÑ‚LÀ(؇¡%~eBE3Š÷'Í£¨ºÏ¿7l…ÁáÒ¸^oGyªÞt‚¥Únz—ÕFuèÄöHÖúù>C‰ý×Ý**ù&2פ<©h%Bsí½„¸q¦{ ¤OÓêLŽ—¥¡íÊúÕv•N媫LB{­Àë:Ë:.<žv& CñŽóÂu«šƒ‰ûF¤j •¾uK…·Ÿ'FüÚ~À*xŠ}×ÍJsÈr²|ÑáL>‹bÊŠzad”~€z òµ©‰ý`ŒC·[£WŸ hzñ½íxìK¶+Yiiâ³¢%ç»^GÚ ¦½)¶Ïæç“.[¶Þç¸ÚëÓÔ-»–Âîj\Å,+Ü:ý¯Ïß%-ÊõO‹ÝÈ·;Ó9fMêD–²s²ö>¸Éß»¸¢A: föuÚÎ9œç~NïÐiû>æÝ]_ôbK“¤XôRÅjIJ~MFÚõ½"þúýÄ}½LOWîöÞñŸO—&}ì™ß£}·— q›áARA»§—yð;v÷g÷Üy¢\ .ñ~átùòÖ,UõmT37êê‰o®©žÀB>1D ÝŸ ¼„z‡£ŠlÍ®o ¾‡8yÈí< (>~ºú ƒJ¶°ª{£µåQÑ>K·Éö³[Ib5b•ùˆ€Ò »¢×f­·–áK߸óVÖU©Ç8[?i"qûËmø“FSÇ©Å<‰z§[i†bHFjû?5sQ[ {>3È:7JmÛõïOm±É«}äžMRoˆ„Ø3Ésç‚ú糂^îÜÞùùÓ¬ÒÖI¸¨‚O5LyId<¥«8^飺Ùú=ë8}yyS¹;·;Uƒäï7¢Òi¢„åÂ]$zÉ Z꧸=ú>wÎçœul}ß»“;äÛêý9“R@¥6“XGm i)¬ž#ĽxÃâ(ñÖS¢ÒUÉJP @‡r𣖕¦€( ¦„¦* š|IÁM”üœå ;ôOº>vä<®ó&ÅÖºÔõ…ÞNDî¸ÝB¯’bi¿wh½I^ç<$4ùùÖÏ®Œ›È}­_?qyסQOwBQžyæœ+a]•è¤Ñ ™¯3ìå§w[„ç]œ›©©.h¹õÖý¸_˜üþMù6Ðjñòs™ùûvÆ«ÅAòHuSœŠm¡ ´~¾¾Q•Ä£~c0Õ±#YècV)Exb}Ð[Ò¿>”C31£?<(@€˜½Ý)užDÚÙd‘Ã:Ÿ&qê…ÇÊ(EÍ »ª/N#9‚|üÑ€¨Wï{Þë™ë ˆâ˜m(œ=cªÆšÒ×yU³Œ! ’]hW¯Ð¼òÊwk>±%CBü•‘K)²ÂÆ=…D¤lI·å2Sá+Ûõºæ3ûm­y#œÝeF!¡UEsÚQ•ñÃìLžsxG7”?Såç“i³‘™*Eß0Š*y‡Ð°¯Ôˆá9ݼFdRQ:YË}¾Ós)më}Ø_“¯³Â,ûD%0¢&£ µîÞƒ>ºRA}sŒ¨Žud} %Ps ­Lª#&Ù3Û:Fˆ}qi•\–‹IZAI™ñiQ.óù]™Q.ô~çÄJg©›…ÜOK7jUÃômÚ×X&8Õ²r’µW5³ðáj×SúB6šçJRGÕ⟶ç±k‘BÑ"÷-M ²5îÞ{çàxùëšÑéSžt¤|ਬaÍž\4Œ'[ÍûíÂû¯kiJëœm5µ×²o';£„t³C0´JPëksÁ—»oÝ?ºÀ¡TüÉ’üÎ:Iù1J'뤌oÀg}ªµÎO¨ùë|ñù—IÛ*„¼Òe®K¯]5Ï9NgߛȢ‰Ï¿ AšB0‡š ü9j“KYQSL²×ðŠ{7Ç¥lhqÊØ[vòBº'É¥Q~pçÜáuнk5ÉÏæz`Gó~ý(ýqçÒÉ}éæu-ïžLñ±%GoCå÷$a ,ªƒÍkë%EE´›ÊÔúæTϤh.½u('3äI`íœ)äž’„Nu½Up¾ˆñGSmÙð€ö6«ŒNmwêèûâ!nxä“wIÌð‘ŒåT+Oí³pø\¿¸~Ñò|)C;[j·Ÿfëîû|;ÎM˜˜©uë°šes§<ðé[æ÷ëäß_ºáWÝTqlÎѽÎtÃëšã»¶^qKj¹,¨¸\ þèç+êˆ(²NU+CŸgjQSè·FDOŸAÄ©c;gÂ) úÝÞ’E"‚ó¬&V} ›~èz"˜T|ˆ^tS)Byï åòŽ~ëˆfª6sV…\æô—•d¦GæÜcNù÷Û³Òâ¦Î)¡‘eQtÓdâ.öÏTÒ±­%W0}4c#K Æp‚º'Ê6&\Ñ.wTÊÑ\³€–|Zª!F«=oÖÆ•O«º úXµ±ZÕë×ã^mjTZ¬€þl8{D‰'ƒ9âp‰”âžÌlœ×¶P½sË8˜G»9EÇwkºDÌÂ4ïKw.«m×Í9÷‰)ˆŠË ã+ã¾›rùØtSê¹ß4èñÑžæ¡Â°¡)Æ­Í84sbm¤7kžÉ®BÝ#îŠEœÂÅvz­š÷!cri±nQЇmn›lU&;T¡UôWZ­TÕ¥h{\‹yȤó½bµ<¢‡ ®CÊéPµ¢hQ AÍÈÜ4ÅGéãˆ1øŸ Å::ç+ΡUHúpº«9Þ¯.´R9›mÙì±4Ñk^j¿TÂ9Z \ŠÙw\à{’:ü—¾ì;­‹¸¨NID±Ï5qæM>lîYg~z®Pžq6‚ô‡›°Ñ zÈ+eô¯¨”—íÎm)¼«+O¦¬ê¢jR[b~n!Š6¸ó«=¤É¼!ÍljÞ;·°‘A¨ [çg ZÖÛÒ˜ôi·ÍÆSÓˆ±5S4»Þ¹Ihí9ù½b›0¨xëÝá®sV’Ö •ôÑÞBéØŠÚ4áÍ×k±‰¦¤²>­n8¼[èRe‘‘ÅUÖ¡›Ca²Q¬i1¶[>-–%L¢É¶‚n6¹¹çmA Ê-w œ³ÖÅ [—9´‚rý¾ê;­ÝvרS‘ÕP±M°Þ#çä”uwnÖó¾¾ ‘'*ù«6„‘ýŽå©3ž \f–49d@,ýfÆ–])t}¡Ué¾Ö.HQÇÌ›ákP¤ ÔVxr)àõ~*yÓ+ Šr¤ÄÎÞÕÈO%Ç–ÈM,Bì¢Þ®ž ‚ÜZÚÚq†î¹;íì"ço4ÌŽ ›Ðú¥|¢ëÛ™æ÷$|öžÚ×ÅŠ”ZI³yÓV£LþÅ©ï¹Ä§^F¨&ìén¶¾Ï.·³ 4íxxCp‚’¹‘òç~ûg9×k/ˆ’ÙN»›×+ô]D×;h´«˜Ò»X5uæ}'cXÞ± ·Ûé/?¶U:×Üt|”ËvÕϺé«{aS&ÎÔC ¥4í¾»]ŒcaÑ¥¥QR·Ì:»ÛÉŒî°kù§ÙôOÛ?Æ2ŠÆÌßÍ“x^©ùâ¢\ÝV¶¶3¹A½ª³Ýéj8IÃóò|ï—è-4CîäVM Ra‘êçŸ)ÝÕìpíf¶2^L–PkÓ­¡Q‹ø—MÇÑÝÙ-uÇ1ÖÛz$[›«¯¡§ËúÉj~¯+íJ=ôr4¼‡íÙTPU«•ù÷&ªo+ådëNfÑ"ó.r‚õ¥r™.Üdhû£ºX˜DgÒ}{º°NúóäXHf –*´’f•šd’–TO=•PAÊ&³ìj>ÙNnŸ>†Ww?vGwÁuuùœ{VZYò&—:Ù}„t0'Û›^ntä%y6i$Ù^-¶ÙÕ³ƒtm綺ççD¨ž_l^n#Ðø]°jº“1ݳî”Yš]ŽÐ¢«» ‘ò~mæû;j Ry;²BËBåcÜ\âXEÒ¯2­SR}¶:çÛÊù¢>‰r¹QÀÖ’¬¨¨ÑFVšm4y¶°®í|¨´âÊÅ#NzõhPѳjÝßiɬü7çÄ?£y{-L¬¯ºóoe­UÌÛë7ºØóªºF7$ŽíUÑ¡ÛfîËdbÍžÓMId¹È§×¯ÕÑÎ[ö¾®Ï®%üe6™ø¢+dßn÷KMÛ+3@ì3…kÙV»¯}zù˜üPò~û” ÉQ¢QM¿mÅAÙý ÐM+2ó}+\ÂvÈ®U¶²1'w`è›m¯~ÒÊWìb}±~®¬úªÛ)©}4¢õÝÕ¶d΂1g¤[GvzíU7Š;^Œà¬Æ;XlúWËÌŠgóû¤JÔã;ÚöSR˯Öå'¶mä‚\î¹÷"‡oÖ±mvì©<í]Jfч{*°R¾E(ÚÎÝ¢Q½nÈŽ}¢r™;§’ˆö~xNiûJ ì“R*«—æQÎO“½áxO¨˜Í!·°‹†èȾ_#å÷AWbQz$AÈ»ÓY‘̽\œùÊv´²çK©Ø”«Ê¨ø‘H1-µçw»0Bƒ¬G4MÌdŽë>î‘;¨Z$æÕ{.°h†­P©dšõÙŠ¯6Ú~ ¥}‚6‘rCû­ÕÚS*“Énõï:S¢â'$ë~¬¿{î.xYÖsŸ>¢ÎÑ´`»)ÎÁsÑ*ä@€Y†4 çPEÚñ…«}³å4·‘æùŽ ’}9o1Ã.j$Œó…³¤#Ì¡WMíÝÇèÇÌw™°ë²RùfE&[[>Ú™ý×!cî¼é–¼~Û|åWÆ]‹˜âHgܓ޹á9šÎ™$èŽÊù׌aQJhT(…òŠs·’‘«Õ"]c»³» ˆ¤Ý;#§.X]SÝŒ¼Q7˜M½:˜hª'«_}Ûï‹_AÚT:ß8+ªÛÎî©mäã÷KœOLÕ™E/USLW†·t¢³ÍO-.q!ëÒrès‹™¨žÄ(èˆ?",U‘Ó*œÖ¼ò·Zêd‰XáK98ŽvVç+ôé{äÂìÞQÙ÷[béqæìQe=+SBû°0ðp!&ùr­¤6Më؇yŒõóç.t“¬ ÚÉè.`žÄíqóç°Wj˜eCkj|ò-è`pÏןs³‚SŠ^kÂW¹51£Ù©£K·Cœ vÊñr`ŠÐk-63åÖðÓšiÆÜ‹Ó¸U5”F˜§ŒÓ Ò}ÕwsBM¡³Gë‡cÕã·.W³]Á«*¼sOd¥éMqfÍL›‰¬+,UÌ_Ve{%NìE#Ë®“>Ö, ôÒöžj»: ¬³;á®:Ò;3ݸW¥©š±ÙàõÍ\èÞl޺ؓÓ_-Ž©ëº>ÛMW'Ü;Ýa–zq†3pÎéEWS[PH™=E}-šyÜujv«˜ã+lYí. u¥¹ùöŒå…¬yðšoÌU·v‡e‹Žq˜J!™²>!‚^¨æõ´‹I\N]#’äËSôe–Gè¡J'¬bzÊ5DúL¬ 1 Þ«ñúk¾ŸãïÀI“LýOÂzˆ¹~vœ¾‰_ßE†0ŠIdóŠvÈ!µç’®jhæÒqÛN=Oqîhxa3„\àöPðªÙ±ËX(\âÍÜAÇÐ:;³›Ä­:Æ·=]«­.dLÒwN}Я¢ (›M)­ªë%”pA *¨5œœl6qî~u‹œj‹ÙsÄ,{Å24V!Û%PsÞuûŒsîÛ/¾¯*kœø\1TPÓi‹l©[=“\Fâ} Æ£Ø$!çêïµgùÝS]Ö3ƨ­ÝÏ\·º)=<óç #$sRáu¼‹ä%´=Om£³Mèïµ¢¯'ê}óòoѧäÏ,4Ü[pfNj)'*³ZúÈÄz Ò¶ÊŸW²òÄg=û»¾q‘>}“OºÎÚÄ[mžõfWœCU8E÷_v]ʉ ó&pô³é(-u¾X@€q5™Ø‡DÈ @–®yV¤†jû›îî|Lòœ;¢wœ‰-îIã£~ À¢ƒŠ¹äFÀHÚðØ· :\¶síƒCЩÃÌìÁ('ÝÚzèÁ=(CÚ9£êù DýÉàëjõ®ÁÆœmÇèÅváåfÍ>ºº±ŸlŒ96²lÃõµ_lí}¥_Þ}Í›¶ûè§”mìªgËSÍÇNÖ,ÙJ0ãc NÑ¢ôgeݵjÄÔ’F›~qÁNfákö&m©>z`_=sùôœ’SØÖOÝ.í+å÷²¤.Y³‰¾;×—ÏSѳ–g®}¤¹öíµØœg8›Îîî{kÐÕgÕPüÇ[ÂëQ=\Íö0Ò3ó3«Tö¶&^¯¬æøk(øh½I󜉞ޓ;Ãf$Ï£~ÄL*ðþc_ kPÄNζ;cµŽ½Ñ° HdÍÖL¿oÏ"§^ÛkçWÖÇQG˜é#ÓnD—M<÷~äÝåG»Þá{ŒêVT-æ¶À²vÙ¿\⇩óggÊ+> ÀÙî /€Lð Emj߬"œÂ~øŽ9u±›ËÝÂb‘H'›©Ëш‰öýñÛó¸éÁq(y‹G»—PÁ¸qæ9œ†NîW­)Û5lû'³Ü:dlV'µîs‡Ò(œ€Â¶PlB ÍL1fû­z8™3•b$ŠÓÕg”©û…­ëèy8&’5θJ¼E{ZÁ:fý¡IÆÛÜ*{«0•Š6z»J—8ºú{Ž3/²:$Êù¯.‹ŲŠd“ v…ô›Ýv:Ûòa뱬Q{$‚›cm3he¶@·¸Õ¡Ž5“¿[Cðî¸z•›¢ê:¥ó~ÆÇcöý‘'’Î7ÖÆºÅÃÝâíít/¶Œå|»¶ÛžBo+'b^y6l€„1¸ÜD"i1³¥Š&lÒ¿Ý”IðœclÜíè—EqPOBÝÕt«\t”:uœÕÞëÞ·,"×ÉëöåvÙ::k["(£7žQGÅ:+©3Ä«†(ω>Ð~¯ßv µ½®ÛȨ6OÉhU_ßgÃКË|×®|Jáç?žS |ýÜâP}É8ëÛEØ´s—¹»®¾‰É-E~v%üï×j¹Œ¨¡,ó]ˆÅâ\Kï˜Eº^ἦÐFd׎dÉÑ>í=Þȯ·lªyOˆÙdoÀ˜¢=}Îì;èáIÕÎ,jq¥W ­EkÞ™aÚÞ¥vŒŠˆ‘8:Ô·¶Ã©"¼©^ü]¾ûѦ+ë6öõx”\Ì•,0Š %û{9bé[ z4ÂFÖwØîT¡„D†›È‰´"(æô×iÜû‘º-‹Æ7˜ˆ>«R«e ÷ß}ñòº… $>QŒŽ½.Øw§ÄS5bÇ}}×ÚíÐòSÀÐ¥[Ï´ë Ýß|µ¾í°ÍQ\ã$ó﬿5oV˜”#i»¢îO”ŒYµŠ¦pB#h´’îÌPzj\¤^5 ~KllÞÄ–Ði—Ó.ª'ÊîL¾‘וG1„-Ïë’uͤS»wHK\®MçÓ'> °Ó_Š$Þ²8ÌÕ*26Öre8¼~w½>Õ‡m³%õìhbkÌWšŽ‰q%œ•í®¬;]õhyû=¹7^z%±ö90¾áû¸µÏô©T³{}{+ÓÛ:ZZôÒŸXÝa9d%~uijðœrÙãÁ4j M ‰6m|EÔ¡¦‹Fñ¢kkEª>V4eß­žÇ”kYBFî”ìÖ}Tº`cQµ+…ŽJÑ¡ñ¥ö­´äi•òÔª¢{£ž3ÎÏe$&v´ºý¯Dæ2yxaÉ3æ>Þ^$XùƼ)o=®‰ðœÖ¤ãµ† ˜­(Ès TMsÛ&sê…á…sî|¡”EÊ7uô“šM4îîlpéz7¢’<Œ›•Ü×v­IPÔìÍwg˵…Üia. WÉÌ!KX]Uú«mXÄPnôÅv7£ŒqÇ×v§sìÛ°ÅÏrr¦q/V ä㥔ÊíVßVaûE9Ô}TG<®1§Ì!àòU5ćr¥«P2*é[#§t‡a‘èÈÓbhô8R:-ËVx°¯Õ2ëE\£ë-N¥Ý=ˆ—[¬!ÂqÆåÑÆªÐäáJËMbŽÏ5šû)nô¤r3»d]\if}·¢qåµ€fýväÉ ë}YK;¯÷{4[JTáDFm±®mA×hÿO]t%JV…Í7 ëôB|S˜ýfñ½¢uz-¶Ù¥õŽ®žS´Ù‹-ª3~T‡)ÅPw]Ä œr4r+Øœ^ôšÖqÈΖö¤mµŸ"Ú5Φj<ú5lJ.1]§¨,øèÞV-0[5³WÖ´àÕÖµgiéÌjA´§WíÓLÙÏî.äÚž;Í ^Á(i#(šI=E×ñ¾Ö‚E~î_á!ßÄY~"†…OÖäÌ7í°ê J4*úH@™ÈsÏwØå™x¿hÞ_™rÃâ(‹ÉZ¿uÏݧÚ¥õF‘ŽëÛ¢Ek—JUáA|ê4ô¸û­å˜ì_t‚‰ªüˆþúá]IòJÒY|þÛžØnÛ§„Ä´º ãëOÕyÎÛ£™;âPš»Œ±½~Çç‘åúô£…êçבçÊýÛÇu‘û /,E¶3ÝÆé*Ή!GÛ#êvaÕ¦vv6Ι½O­G­ žž÷´9LúÖý^òÚ®QÝÃv…};[j~LÈO¸yüËä^õsyÔJ'Èg)Ä蚇É"†wu™¨ç-m4½c'd‡pòîì]FK@s,±¥½]ÐIJ yÆ4è„qxöð}5Ú뻯"fó<º}~û¸Õ¨ 6Ó\u•F5ª­8¨ÑÐ) mªúH¤ÏÑUÂØBüÌä£ë[8Fµ¶¬&õ/0é'¢(æÇj,×Zµ¢&•uï«ÆG±c;OÌëÎX9ŸsÝÚžN2c)Ìûs‹®çMK—Õ^!))$Îò™Ö7‘š©ÉFÓ’jß›É÷í$ÞY>³‘cÒ”öç„8+ÃsŸ3ëÖ4¶Ñ&±—¨L^CÀß´k a„R+¬AàFS*Úº¨sX:®¨ªFÚ@ÃÈ)IáoÈ8öE~ÖÊ àCj²«ŸBi¯˜GÏt9ÕúºŸ4ËTþãÚùê“’\3áaAw=ç-×m³mµ[Pg³™Ôéúš»I^¤CUz‹×è'”ºÆL›:ç·aß“+É\\~ŽxUïÑÏÕM8¨Ûçç±àÏs]šcu´ÃF³Ñ<ï»YUQÊèñÝÎÉuµ©À¨ùÞ‰–œ–¥µ‘÷'yW_,Չߡ $‹C%>o%3UYËû½·è“~Øpcxð!7F>ŒLÓP@óaàx^»®BESŸts#ºÚÎûë«,‹õãQóé9‘}Qvç<ªm®àÖ÷:‚]-FIàyÖX;~î>}Ú…_7Ÿ·8é¸ÖöwŸ:‰îîèhý§zúöLQõ™è$ßȱx_ÌmaLÙÎ Ù‚RUsQ†}³öç" ú¡QèŸ>¹e$|¬ígľ®lÌe‡î/¼*P­ ù”NÓÝ.‰d~¥3}·ŒŠª®ÛÖ!PDW “­4ð÷3$"±B.r½H’wB—ÏžÞWaç®ÜåÊÈóm|%…ÚTýãjïjÝÈ0e,¬‘ÍQÊè\ëS)æÓPÙŽE(•&-@šöõaõ¤Oº}ÏÔ|òíã:Èâ›,£_š)-µ:¶t#phêž*¾+X€/QOP!|VaÌ'#Pn£¯JR*,•ÙÇb^­ÒÞQr¬RC¶4…¬åD"”H¥(ªl–h6oS8Û>u* á'ÌI¥,š¥Ò&Fyˆ™ë9öÜõް©ù2¾B&6k;iÜ… «R$à28;ÂõîOf=Ÿ ›÷nNÍ)jPò‘<æŠàUû aÌJ‡6¿†_æ¾èq ïfMçÚΓh/&|gŸjRKUNË^E2ÄÚ.îî¢Ô™yë\)lÄ:½M2T*?g˜âuêM•ɘ2{äí<7¾Ðôÿ#?2 §ì[ç.ô€C„†7Ürª™ôžRy3Ÿg ™wmÉFVgåGõX}0ãóçŸ:èœtÀ÷v\¦ºäÓÄ^ÜÙä´ÖûnèŸlSûYóûZò’þ7°þncÛJ¹^M¨¾Ø0¤³ËŸ^É“™õWÃùÜÆ||óÊ—EÕMþ{¢L$ûÞ8|!;Ù7$óº§IÝ£„Ð  D9mÏ­»NÑ8m±“Ž$W]}¢˜Òi< ?6#?nj‹ëgˆè”S%ݾ5®é±õc“U¯I6“fôåÉ&sácl³'t´N¥è²_qùò¹E:û{E„™&aQûçwœ¦KÒv1½æ½£÷wu˜»ì»®{S}p ,˜ÏbJOFÓ;ÕµQ,ÎñÅùŒ¯—¾6¨U;Ê„7Ø—É^»eÈï>ó"~¡ú…Ì0ôNSoSbgÈɦÆFÊÖkYÒ}Ǹð®I˜äHŽ^Ü$ݸNÏ$TèëïÎ÷{„çî;2=ÛœqIz¾eQò™Ÿ'k >$teW";g[c#ÖvÛÊ:ñu$>“$¼À/&|r)Óuú ]=F*K\Pð‡Ñ& ?XwŒúʲ­«ÎˆÑyÕz3û¦ë>S%öÀ¹¦’Zêgz9´3õ³PXPPDXa&j îÖaa6ÍDû“>éòœÝįŒ¤ÓÕäsffv½Š°ÌŠ?^ÏSÑ7ÛôÞj¯<¸%M«]B©½ÛÚ&¥„UÎ9¨+ömLÔëéÆÎ4Úl¢cÆvo,—´ÞiVe¹ÙP‘ÎÖÆ›Y­oOQ„&_hôû<Îó5±Ÿ6ÚOs>ý×ä8O¨?}›;A$¨9ØÕâÖUÚîñ8ŽÞ´×>2e–-ó‹·¥9O'™Ë ü®;­Cik­>½d›`D0¯…} “_u¢În´(ºQ‹!vº‡QÑqÜÊÕñ馾if¦ôh<óG 0XõÑ9Äž3ðÛCØ}”ã«õ§qUú\ oÏ9½CžZ› józ&ÎM~w°ŒAtf÷ë×uƒŽ–b7Ùˆl¤lŽÓ»ŽÉ>Q¥¶ô’Çmç+šïqÞ„gL©Ü×Na׭ʦ}#m»¹ËîëØA}RûDŒÔ{$¦¶í»¬ã’ÌCM¯aÕù¼Ží&R¥~ë-O)¬øÃ/FWD0Õq½oB>6œ^œ3•ò$2M)2gb›®}ÉÈ%RÃSâ(ÍøoÁ¤¯I¨ôv{cÂ#îÛÀ¹åŠù‡(“ì·Õ͹7«>S;,ž†ú Ï•õ²ëÙ…|ⱘÙ#>P‹çu)=¯jžN±NJ¯¥3¾e_Ê m¨Û< Ýog°àá#Aï4ä$ç3~ë«|ÞûíϳæW&bPò7q.æsÉ;çH¦ùÛ|®>{ˆÈ‚«ÔÌå½~¥Bˆú(>¯~¿cçØGÛl#!9ŒÂ¤“¥ffIyo½ åp¡h•‰ ZuÀdySÃlÜé@@Á‰€ghFè±=¯j!ªôг>Ê™2µBH茌„Â’(j7ÍÈq˜ÙDEr¦ÃYžNxª–‰䜪¤„'«í_o³Ä˜É ä¾Àýáæ©èµjÚ!4B¯D)É“SŸ")»{#¯,žÔcëç>¯‡ã‰J†EìãaÖ‰¹:¬%+E18CÄtg¼Ø—ÜŠ,†IQ~I9*ªQŠzž\õt¡¦qÇs¹u]Yêy¨¯X™%’ÖÄÛfûsîP~ÅíôÓ4žœÊ†fvŒÈÌ/ÚÂE0Þñ3"“îcºÂî®wM+…ÜÈ¢*‹Egi—Ëí®£$™$%Lí.¶ŸM©ÊµRúQðäQÝÒ‹— —Oɹøb ©AZ!Ëóß^w+¤%WC—‹‰%TäŽÏ";¾î>U­jü§ÉÍva9¡’ªëqÇØÕAB ¶ÙGIA&ß“ÙOSG[ßG³ï›Úä¢ý_¿RI›YËD‰^äî½]¼•'¡´oÝbTízóÍD…D™ïQD$g ú&q–Z/cÝz@=]ˆpž&{Œx!l˜¥úß;É秊DS¡‹¡‡­åòŠ £~ÇhÇ7%òr(pQCvµ³\5by& ¡í²Ãé'ÊCéi1£?™UQTSò^û¶W¾xSίr]†(+‰F˜Úk6´®ãêlìÖ üµ~u×ç‘qLíÑ §çÄžuË®¡îÀgÆs[{×èۨߓ»íã"˜o¶ŸT§'hçP ¦êÈîyÜò\÷uq‘gw5•<ñ=kK°€âHÓ‚r(‚òBÒùÛHg˜bI¡¡Ï9T& YÈ?]»|ù[Ê:‡ê8©ÉRI 9GÝÓ£®M+”92Š\‘¸˜Iò;½b©Öw'Ýg×;WOó׿zðÄù‹É¢T6q‰ô›í•NžÆ¤ yºO@1sOh„&ˆ((HG;z}'\ÆŸ_}ÁÂ|ûî»Rõj3‘¨W×»aÑùö5ö·ÖV¬¨£ϲ©Vb«gZÙ'2¢ùÔš[Ó§“<òz WLcš‘dƒÇš<â®y_:Ÿ&ó\\¶Ë¼È­9ÙI¹‹l‰>»g¶ÎK kcµÉòeúóÆ´óÚçÞUPUjÔ£ê뻊ù%}^²åÒißxŽÒyq ÷vùö~Hõ~§r­TddÖUuK¥|ì|û!:%©”¼¯»bp®H¥U''²)…¯çÛº¯ÈÇÈ^“øŸ>ÚäÎßÇy%Ö¿/ròÇ:æ•]”š%ß’ï×nAO!Ž^¾;žQÎÊ,’4¡Cû¹j'B)8P¦Õõ=M”ÒFdù9ÝA2mî½ë‘A#Z&¤…!\µž‹s”êý~}è«)zÛÒûУùü÷ÉöÛ½ÎZ–ÆÌƒT(ÇQîOoœT¢>RT$žtÊb%¨QPQÎDUÁ9è.Iúä_×ÝóÈ®£^U‡Åéìd5(]IjIÔÖHr Ú&Öˆ¨*hœ*Š.[™W(wèÞxDN—Ö¼J€¹="ɓٿQºÃÚd%#™û‘Å(2¡{¹¦.@WóȦ*ü™ôH'¸×}ز{ÝåÉÊ#ê9>C‡ ²ðÅW'r.Pù4åNk îl)}£¸t¨I §ÎäçÑgˆš²“E4…{¾|!ê&w;¼œÃÖÆGç°÷[ŸL';_;ÚöL™äñ‘£Ë”ryn€›÷íúª§·”‚Á(y·á †Ìu^'Ö÷¬Hú,®æq#ÒuTätè9î æEc8ÒBøÊ‹Žv†âêE×î;PV‹-C2èÉ“ÊsŸ.Dd*$Û„G'’ôe™]T„:aÐâEQI.èáZÍ+@¹$èBI­»»Øz! žŸNL)¯yEÓèŽO"®]~yì§É9:Øøèw(¥M?¿{yË•ö•î`uÎ|}BDóê²C‘¯F¶Ø æeú“Iɲ/¯S2&$;ozSH¦\N=HŠ–eˆ¥ç—(ÝÝ[LÌaôCä.dòÅ8ŸÉ"‡d];ä;§:ºîEQdäüï"õo:DAGÔȪªa í(^EÊN\ÖYç‘p‰ÉÜJ¹›ó!Ê©ˆšAW¾ŠŽK­;y;œO8œGAy²Šõá<§'¾@ùPPæ™îO%3PPWsÎe¨€ÓÓïH sȉ›-æ›¶èž©0ãLò]®ùä>IËãëÂyÇšûeyÔ$œ9ñjrIõ3c™*w[}^ߘPêÇÝHH:ÏšAѱ*¯­¿wŽÅϤÝHW"þØÞiôù^½³±ŽN(\2÷EK‹9ù…éeBΊJò}÷ßxî˜Uvä÷[îîJÑF%Ô‹Ž÷vó”QsD9·ž{%º›*§#]K±ÈBªC°ª Ü|žOmÙ¯]›'”_IcÊ"Ôžd\.Ȩ§9ýÜóîë_Y!É'ë³\Ÿuåòø>C&~geÉ0/;ºTä°.\*&&yùh7;CƒääO“„'JáEêÙF{¹ùÅè\¦ó‰ËE¶Ã!R¯ˆD@³4yœ¯\àòyÊ(p´nI7 M--:{Šäw<“TôT•¢Ú|‹Q ¢&ŠÀÖ{¸ Û“ªëaâ¨'Þ¸’[×;Îðé9›×ÎäSu"÷ÞûÛyÆA9®NBpŽÂ‚î{»¶ä8r‚¯8Qetœí£ëW.çWÜ.vDû£¹~å Ùv«IŠ´®Ü’,šæ õ¹çriQJ…ÄëžéÀ¸yž§É•A|šqá\>´>dÊl.SË<ãN9\5ä;¡¬zî „O=Ϻå@R¡ä„Ó&z ½[/2áq>t"›äÇ*r)ˆw&¨À¡ÎÓ”Y93Œ5…]t È«¹&zØç* 'ßF<çë |›ËÍÏtvp7Ý·É$‡‘ôµÖ ׿;çrdj‰ %¡qÉtm"œézÏG'8^NqÉ8G aABT'I¸@•PÓ¹Âɧc亄qR˜R!‰£HéêJCÑÉä<ªºÃÔ‡™ ûÝ…Ç!”G #]Àrît‚8UœmÎ R:N¤9 V•䜄:ŒA¥9!¥t&Ž@SBu(P”+!´(N È!äÓƒ™Þ½Ü׸^£­– Ÿ8.;2°L÷ƒ»º¥£Aìqçš‚Aî&“¨ØLû“a×®cÇ £Ž<±Ä®‹‡Í$ùxGLIj€¡ì×MaûÂbj"|Ç;$©Ï­}ÑŠ÷W—™õ¶©åŒš±NׯNæëJ`}"Í+Õ±)äÖÕ´Å £RR»­•GÇn‰ò–ºñèçYSXL¹Ò•W‡BZÙ»¸‹­jœSÌHêØ{yhê:ô¡u~Ë–’³º¨žš«!ÐÍFß6¸á@láõ®\™Dß.ë%îRnÙÂu€úLHTB“aXœ#K^³Ç3H©ë(­]™Í‰¤·ª ˜vãl•¼(àœ6ºô•ˆ}Ítäñ´í¡¶®óˆ­)ϨÍ[£c|úk:½g©›¶s׆ñl ƤqhÄœçe®&ƒ·úGœÂÙ«lBæ©Ü³‘VTÖ3Ýzsˆr·Wgk³Úbiª¶B ¦n=j¼º(rë'6šAbaY\‹ó!c¶NÝË€kà€ûš0ÕG(Ó|pº±¿<Òœ?[Ä÷dÚ½ —'Ù­Öû-$U¥Òõ¥Òz-­–Ær¯rmÍLÜ dæEM15|'Tܦ›WÑšuÖÍŽ:û{»Ü³ó"V¹×4Yí2íµì× nÎ׺‘Md€hLÁMr¹j†s#‡wLnu3²'>ˆ×²îŽwuºwGâû6…u©ÂYC!NtÕûåÜî›H.=ÚÆ' v8+ìà°Ó‘Ç­y<æ‹GMlhDVŽëz+e¶×>”Ÿ¥úçß‘&tè*üUr»J²« D_Ïw¨A›¯{[/ š>V[mb7¢¼«ºsU_p·›í¥R «¯XW53Š:³U7íÂtÝzèW¦#&Tªµ*½´ÞÙÜï3½¦yæ°Ðý­gJóÕ=o¯Ÿ;‚g#ª¯FºMž·„ñÝJ´‚×ÜÉ†í¾²É¦iç'>´±tÙ<òæ*¤mÎË¥ÒUki±Êöe™Ik}i(umõd˜ÝNw·†ßk&Þzî3SašühíÇÇÞF¹sXU5è>¥uÅLøNÃ\ä-ç«Ë¹»[²›f‰2¶šMQtyµ};“ÕFŽõ„; Ä좽V2 0Ÿ¯­aQ tkXAPéVÜÝÝ‚ëa ›ÅêKC8›»…r¹ƒzßç\Ÿ}N6v©P v G“ço+\’vμH,Ë{)–N)”ˆéÜt];L¬ÛrÆg>ºæÚ®Òöy Ð §tÕ¡Aw”½Ð}+gV›Úí «O6§wv],²õxº\åö’5L­·Ûªk¬,S¹îM;¤y®ðdrê±ÏH¡«¶zÄÂ.sFyrálȆ11ÅzÍ·=êëéW¸Qjª=-œùÞÙËnŠï·{ºjƒ£zšÅ÷(øÙ&ö}_8¬­bXÅÛSjfxë­zIZ–Çê”Pæú¾mÙƒ½­ÎˆªÐJsP¶®¨³§=Ú¹ë7&êz„é1}™"e±ÇÛ=Öu÷.†(JÜCsS,ÕÍ ‹)jîMQÕá9:ͱ,Sω±ZÂÆZ[8kYÛ·>JxQlïN裃"¾ŽkQ+O·gÖ)¤“¦Â:í Ùbñíº÷XºÀ®2æÊ.×Ýn–ëÄíNÇŠ£Ö¢sgZÜUË7‰af¡Üêtéz}Ó—MH²—Ûyš.Ñ8еNvfÍðÜv÷5¶ÚØ2àh#q–ú´ÕQ˲¨ÇE~’ÛÈVk ô‰Ù%rÚõ°=õpUÍV»–ˆ¸v´-’-ãf:åØí^¢#u’¶YݶfægìÔ†çÍö»‹öQ||¾ú|¯vÙôì\™Êå¤ñ­–ôŠóQ ›»N°3T¶¨ú©S¨Ò+\"Ô]ɹ©xOª™k:!Á÷YÝÏnÒl®mË,s¸h‹{3—,vë%†]«]Ëec‚³¤³.\œå¤v7TGUpüÏ.L€*°­AGd~“ WÅí¯e$Z©r&¸[ݸîdGuÚØ7윹t;œ61Ø+b¨°Ýx3Eö›“ëÍ ªœ-ÑÎÈ臞1oK%eÍUCŽ]Ñ,î;2¹¥´u­Mнºú¦ºù£mo;«L82RÞ×^•B‹«#µªäžäéÄö“‰^ îîtΙðЦF’Yµ!¡¬«>³º6‰ ÈÔ·¥9;Þ¯ló’ïJŸô\r*–TÚª?0R±É£÷tæË1-WwTk]ADÜ·‹&UFÓÖxÑf:©Ä tö•7­TH^ÓgR¶å³¤Á'™ÏŸº½¹^µlÕ5–ÙT× ¯MËwZîÁÓ{«ÛebÉóëW+‚p…«H"ªV¯šö[*û-9Y9¸R÷VÇE&{s‹t‡±†|  <{¹t]ÈyìúÕ7T*»·cÑe¶L¨N4*‹f¨y=Î Ò<ìqUƒ6t¦ãŠìÖeÕqÖÖsc8_eMoné=¥ëÄXUÈöÙ·áè1Í`•€O´ª¸i!÷ÕJ#•±sÞNbÍjJYsn÷`㌅8B!=³Èö0íR:¬’6‹ÑàY™Ü£ƒÇ$æ)Ú'ÇGyÇlOÕá±átG­™JifaΜKTô¾k¯m&K§¹I·tŽ-µô¤y×kB:¼r­y¶¸ä'œu˦BLU çÛ EµˆÓOŸ¨µMa0½âÒÚêøšêe(Ø7ÍHFÉ9H(ŽÒÅU#v4Î VÆ5‰T~„—Žyn—jÕ;–RFœl\ï>¦]«œ‰Ð©š2 ¹Òu ×»4èœæºtÝ'eb|i}4Ù žEö6m7£tóšP-o uéæÓPâ×cTXš¦ì« ®°7B¢Í¸NTÙfY=ÎÆÎ$ õ;d–ë–e3µ¿=;iØ0¶6¶ÙnÎ7ÜVŽ»§H.»„dò|ï»Xº–-œ€ÎØohÐw3J ¶RÑÒ®’ßjëÎòØ]%“Œ¹ó€¦q®5÷_k^<¤“‘,÷?Anƒ¸£xáhšjDu¼žºäœÚXDãŽ*[„¢z7²•SDÖœ"ä~­º ¢¡ ›š‘ñ]èsQG”Ý1\Òw ú­×]TNf%oIhë¹£:ý7L–CœÙÅ‚ 4NªpÞ ÓG¨’„=[ÁjœŸuS ‰²¼cdaùnè`onx¤e“ÕF¬’;6| dÆ\ºMD_¤Áóâ ¯±>óå&ØQb®ïM¥¾U@½RÎucîiÜ” ñdЂaǺHêgržõ=æÝ#é@ò|Ù³§¡„ ¯X½ djt^ &aŠZVz±EǼRŒð”yù^³È0–ñ‹]=ê\Ö |ù1'åBdߟŸ¸EßLNä~·““IȦ]tmçÉäïF«o 8ztŠV}õÙš‘|Ý#n¬ËÆy|n`ÈW¬ð©t\Ý:µ/8óXcî'FÌ4é vè‹"SˆÖ›–îN+¸Ìº!¬(#œ6ÌZ4ú)²*îL2o(B­Ö]GÊgš]JºÙNMµ&è>O¤ç®™¨‹_vg‡m¼°Ë™©‹7ãRl§^o¦ì>îÒvÁÝlÒç}Ó¦Žv¡+™ªtéܤ粲ËYy7ÕÆ9]'f#XÅ¥¼oBYÕ“».]ŽD#ç+x}¥âÞ±Æâß4ä¬Î’{¯l¯gºdô᎜Ɍ,&Ýw¥éϧ¥Û“cÝfŒ£b¾æÊÖ{¯SµäÙ#Èòh[­h[¶‘îäÆHÝÓ¤eÒ¥; ð¨…s!«ÜÚº›ÔNÊk9ÊdXû«2}±Ú¶&Øý”(BÔç5(¥»j(:Šðçºí̽ÜúiÕó3Û  n#¹ûpŸiøß@â/@»}ŸNàZÉ+1–›fa¦\‡êŽ;+TnÁKi¦iæåM’Rõ‰Ë$Ô(¢oÎGÍ•?5¹½'Zw» ï>æ&ª"±cîîÚ¾û˜åãºn7hôwG Õ±DõNhiU$Y»-Û¡fÍ ]Ýã’²›œäãYÝ[Ö‰l»¤Îsæ. ¤<õ¤®­Q5š ’ínki8@œZ>±émU²·µLG2Ó-}QÑÎk•D>—–¹0†û»å»ëUßo\¼ŽÛÙqBG‰XK|rZ\›Êºanm1€µ"gÓKS-ÝtÉð!l<+z˺23£$ë#æø‘ ƒî%ztìH»µÝ¥J^3ÍIPWc”±ª6í3pª.ÐæšgªŽ[6ëÊ-ÃkIÛ”Tê¹ôd뢙¾ª& ÃìâFç5ÕŒ—¥£[X}¤ùðìE:ªÓÔ¿\]Û«·sõ²á¦ˆÇÝÇÎØëO{&Å®‰§gLÛš|a®³7ž}mšƒ-­´TáLµÂ!TÔ¾j7\-íœêo!]˹ΘîÛ±c×µ¹ZzÍúòœœ$P&¤#î‹JDú½´ ÓèØ¸«§+#­¾dN±½T\¹Kìåîàªj¹ªuRËæöEâ¹É®# Ö®áèž0šWC»¹Nî¸w‹¬½¹N☖™ô`½÷Êsç½~Ó®jôã¥äâוUQ¹ÊIzYHvN@ìÑt¨jÂå#­7m6 mw3¹cÞËœQ¤â•;:SŠ šä„˜ÞŠÇ ³Ž-,åÒÍ+sFÞœ!so³‡T'Ö­…ÚeÝ#¯µÜ©k~éU&š¦ív'a­ëawBsNKNBmôÏYw39!Â|ûÜy­¸œüÓÖ¦QlØZ>jÕ ªí¸Ë²Ñp›0»¶©¸¸/ 6Ÿ7Ó+lºË$&E_P‚Í‹iD¨‰“—=ŽGeaU•¿&$[(FÞ•à€‚söê6¹ð¨›~™çùüûóøüþá~kU’~ æN*•±]ÄdPPq¬£\)ïås¯Nèš«¼iÙ«[N²ìN>úðŽ¿A…úß´þ'÷ƒô¿g÷ߩ䨨#Þ@¥úð‚™QE|ý¼zã"¨}gø8EGhD}ÿ‘ú£ú_Éý>ý¿£ãìÜÆ;Šª ¡ð¡/ÖAPiEB$TQH$•ûˆˆBùED•LˆŠ†Œ"  8ª~)ó9¨¤¶MQQi4-KJ@”Ji(rí(M„'."$"2í3š†ÔJ"®19q¤ M" hM¡¤U P¤(ZU(D¡J)B…¡¡¤¤@¡ ( ¤‰*”%´U4i4h4”‹!E« •ΕÉ6‡Nk ’–QÊ ´N--R¡¥IÀ¸J´RЊ–I\*®d[9!¡i48fÈå Õ*äa)‰•&p#2åBHIX Œê€‰ª¦4bš EÄ4Rb‰(ZJ@Û% Ô캪` 4šD5Hâp­ ³¤iª‰¨EZXb²*HÄA­e%p£:*He"‚K+¤rÌÀÉ”PGT®YiIR…§*ª”Jˆ“ d«fl(Ñ,5ª"8¡UqFŠ b3gQ"®K4©VQH—SD9…œÃLÊ“–Vd™)LªaM2(iPèU4¢é€‡Bht-@ºGBéÒÕSC£l:š"¡Ó¥Ö$ˉjʦ•2¨¥VQHBTªˆ¦T©RQ Ò9ÑBVQ¨Ë‘UÑ@N]DRD™YÒªÔÚQ)&)²+”%K h¥EdY  ¤ÕH’,ªŠç8vd ‘LÈHQ ¡Ad”¢Jb°"ÖUYFEaFTQ’e"­E 4dÔÍATè­4´ÓK.m¢®\¹UÒ4Nª™•$W-Y3MDåFÕ0H´¹´0[ ƒ‰‘jœ)e“K2È™Ê"  ©œ%J’TS ¦Ú’* ‰  Òê„jŠCNƒHkHº ¥(Ð:• ))R¥@•J¥i¤¤Bš)Õ AT¡KRÐÑ@,à)…À(ÐiÛI$†P˧àÕlI"ˆ¨ -YEب$Ó…2€I :¡¦Š)(¢šM:µVȆjM;HI‰Á0ÈÙRÕD1EQih¥5@¢™Z™ÌH¹á©È®iª ª)4”…iq6Î+K´™d…W "³5 ª ¨‚(®ŠW lŠÈ (°åRIDZ”TtÔBdL«DeTr™F+²NDD’\•‹ Ã4Š*,ÍRºª‰¢SQ&¨£CZJrJ•5 &•Ó´á¤UÊaX´®k,ª‚$VX¡È¬Ââg"²Ò å¢r£“*Т**Ë[($[)¬º FLÐZ±3.rG$Š…[(¤¢$„"± Ò¨”C:¨u@«’$t© aD+#±9&Š0ŠL ¹HÖQ­¡TjÈŠ.QQ©(\Š‹—f)¢¨)jš*‚'NÙ:RŇF„¤Õ¡@  ZQ  ²4IH±-²º¤kC§JÐi]%:jŠ•¡)Š#Jè(Fƒk.Wi4†YF±;H`RAQI!EœŠÒ´É ÂÄåT) ¸T­1%"‚åGH¨I¢+–(•’¬-FŠ6“"  N‰ˆGNQ VšYW"(3*†™\Ò$Š(¨’U¥¬•U®œˆê!™E]9ÕPS …bË%еm0•kB¶jTÊ.DdÊC¥M”\ÑH(£BéË–ª³šËT.\9Îr¦ ‘T\ª­agL‚ªäI‰©tQ”DA­P²äY$’T9j'H¹IÄÊåÈŠ,9šZ¤Zšs3‘EH¥MAL#2Ì$«f¬ç ¢(rЪa+#+…Z©*ˆj¢¨ˆ‰ª¢ "M±CÍͬÑLÓU4DDU ±¢…¢¦’ˆEÎab4*åTr’N !UA­K‘ „©N\J(Õ(¬‹•ApLHÀT­BBªªL9¥–ÕiˆiˆVŠ&DQÄåU+"iœ¹r«R4§eœåQUÈ´.JM6rΓTª¡8•’ȸA„†WLéÖ¥I²Œ¶ÕPºC¥ÐTÔ…K @SI¶ˆ¤H$t4.ŠÒ!ZH“KI¢µªF]&‘r• H¨Š¦’Ë#e„p:‰QQRUt$À²N*Ò”™ÊKÔ5‘\µLÔ*Œ“†‰ªeI4“9tâQ´©$€¹Fa4i„r°â¢UÊ!$°Á•u©’T–œˆŠ”%UPDš+.Er‚ˆ¡:EHˆG"ªŠ¸Rp4I016s&˜@‡3.Ê“ª­T#RPâ)A‡,9À¤ìªU¦jÒÉVF!b‹LЊUftº(JŠ æ¥kB„Â,!VVU(E%bJš®2ACÓ¢ à#»H )H*Â@° * ÀU ¢*Q¨ˆ0($}Œ}ÔED?jÿ‰¶t-Т… 4­SP‘-%LIˆ ÅHУMi(B…Ý”’òС¶]  QLXW«þk{­šcN„î·;XE aDå¯úXÓ.´° >ò3öÚ¡ú™Æbs RÊ‚òOºŸÅœyûoë¾lTKõ[ˆPKˆx?ÁÍlü“Ñro!?D~£Îz©îÓ,&Ôn;?ëÙ¿•_±åêÇŠ1˜T þÁÿÜa¡ ïCAE5GýÌ\áˆ%ÐêtªÕ±&©V|ø %¨¢¨¾¶ê‘Í´:S[þ¶^r÷,ôž5zt^ŠPÉÝ××·8ˆCÏöõ¼ï!³w×{™Â™öMÑ s{««¸ïùñÃîZBdqbÄÂŒ¬×â*"ü9Ϋó ä‡~M*}@õ¿—×’:Óÿ‡½çªß™Ê oP' üí=Xþ¥|Ï‘CêÙëbCóç~w!óÐ!‘N¤O—#ºÀu°¼©¥ôAã˜ó‰ñ.%tÛ¾¹w¹P‰{»ŽÎd ïuÅçIë "  ý0÷¡@ú°PÐÐFÙˆbKþ~b9œÑA-ÖʨŽD ¶”$Á¤¤ _úDyB@]78!UR¢ŠJ(D ¥ ¡ –¨Ò€¯þºƒGPw:9Âúž±wÜyPpœû§Ÿ·9NM*“ ói~¤âœ ²Z•nI3½ ŸeTÔ« HoêãÙTD^KEïŸÿÙû˜ýlr(h†nA|îOɼŸ>åtÛØ‹z¶0³yY=¶LL‹’Q|‘ÛÙyk˜QQW®xë29!ËS{3°ªŒ+¬îâp”õ'~N8i_\áÖ<\—©9'/é™ikg8}b RÁE±8ÒN™Ê.þ…Ç\N’Aý rN’q„WaE*Á2oýIä8T1蕬ŽÊ™üã™Uw¨õ#…S•v]а.Êçd–Ó¦B˜‘\OëNxbŒ¡$Žs—yŒAG!|Úw PÐð¶Œ18V\.r¡Qg¨>­‘}"#Vâ é‹9HbpÐ,£$är’…½àç(¨¢õl‰;èâ½÷Tõ9å…QESÊÌÉIö6|3yò¢>õN‡*V‘AW64‰ÔP\€4©¡Ò$ Jiêi:„Òž®G%Òi¡£ÈH¦þI§aUUOPúÐåÏ©ÎØA+Üër ïwcõÜz²Ø/ÝzE B„‹å¢ìBæaØÇ³äG’ËÑŸ*¢¯3¸bS®­dXaWY÷9öwlÉ#߬‡ÕìúOœ™'xv‘ÒÇïÝùøú-X“ê<à”(’€ ¬ž­÷2~ýp‰ót@¿0#á7ÈHy½ ¿KS‰9>ð}Öõ&;ˆ ¥úb‚ §â?(ã€BG2‚(hZQ¤¤)( šJ˜‰±ÿù Â" jƒ(HNÊ.9ÀwFUL»aAyºÜ›œøÎTD_ áÑyðmg ´hˆrÎUÉÝÁ]¸‘žâéM ÐÖ!ÐmosUÛw„ñ*_%ô}_Ÿáçsð’o rŠy]¡Å ^phJ ó³®¼ÐsãÈ<øÇçëªqÊã )…Á0€uÖ=½÷‚–‚&€({€ÐˆRÒÐÂfX¢i(Z 9:{‡OQ¤¢º´LÒWyÔБ%QG™ ˆˆ;Æ—*#ùð𢂤ððáhæR(µmÈ;æ& ™a hOR|Y~ˆé·•ú¾Oþ6“çÞÚ­ÝSHΜ§v‚++ü¿Æc=Ðÿ~.@|iJDR´ PSH4-*”€‰ES RTÕUTÁSW×Á¢¤ˆH*Jš 8r.Ò…¢P*ȈåT¡h‰+N’‡µJˆh£QEQK«ð8pä”é Å¤ÓKl`ª¢^l°L£L´’TÁDATlšAvWVÈaÈ(ŠS:NíK%kðdóãvWxÐZ…Ç ±êË"=ïaz Z@PT³ÝcÕò!ýc‰6PþUõÍß/[Æ5û¹ˆé¢Jþ‡ú©Þûú?FâjÒ;o¬—[¯ˆØ˜ “×ðèLâG (6Dz=X!12 Y`+$¬˜Ë;BqeBæY#qÖÈÈbaGÄñß&±¥1›9ÇhÄMϧÆR.‚C@‰™P³¤€©2”ﵩì÷5sÃL2‚Gÿr,@íHjžaæñÚw6D„KÕÌ©†Ntš-Õ&TdáB4d•Ü#œ¸V ²ª¾;J4 Ýd¸@Þ$‡Ç&ý¥ L¥$;ÒD”€Ô }/ $‹*2JUtÒ$†KÄ.K*Bzï¶uÒKŽ–›¢Œ¶•ŠP†5dg¶×ÎÝ,R(«VpTÈ3$œŒGºj3( Ä$T‡¢]AÍoiž“©Þržé‘Ûò‰åÂ$*$1ÖLN×´énHs:Ã[ï€1.ÐC¤.myÀ㬾Öð;Èé#ÞÒ;íŠ !vxñ ãž8Ñ׬y¾a £¼æ}$;Ê¡ÌôªÞ µÎ@Ìd°QW¯¦GxtžðšBu޽´Ï[‰8ÚPL€ MÊž¨ÈW@€ŸŠÒxFÈ *Ÿ™‚(Ì¥.*C&ˆ%@dI:DfäLÉ ººvtr@D2Á›@'´CH£½Ú8¸ãicÄ|O3ÖPëŸK^¾¹9#Ó$š2 vëa¥X)Òˆ[jHèüC"ädÂLjÙñ؉YÖKB;8ÂaD!A8O%r€’dIT@Lá²\Á·N¤ü@FÖCX|Æ`Ì#ô}±ï};zh†&"‹÷‹°é"L §ä)%#³'´(ª¯ íÛ´¦ Ð 3I£¨(ÖYTâIw­›¤¦E –L¬lV‰& Y“$v¨`§šYm½=M¹@”¹M¸kDÖ²ÄJ ƒQ¤•š}ƒ„O‹ÏÅ¡¡žt¿ŠÂ~2 2xÁYâ}ò!tM„÷)S2OîÐ"Y2šR@ÅYB–…•H€K¤‡DT!•5: 9c¢¨‡ã2¾ ÅÐ5t®C‘'ùºxvpD¸D¶dµõ@CRè:é´ÑTP†ÓéŒäÛ\ãM°´bu”é}.’s!´×\cÒÅÖC˜]eù‡´žž2'Y]'h ÖM'ÞTÄ£ífC‰íwºHk"šÀí…)P8Èšý0H$°>°ž3‡YÞësfñÑÄf>:a à5ƒÖ6…ï;s€Äö„Ì;ZYíƒ'Ó)9² $QD¤,þ¬Ì’Ú«K,€pŠ®W²¸»íƒ:X ®ÞÜgHµïqÒãß ¤óvïïlœxRRïÔØ2R%c)N žhý~V^|Ö…ùØ0ô«C£sCR,ovi¤¼(røYpð¡K¤„ö’6†Y2På"PGD‡+´tPè®ÕijÈ* "i+Öë*ŸÇ&@Ri|çWÀŽÈc3 žš‘_É_®¶2èÖ¯÷]³Ši%H¿tš4¢I8’ü§WD¢'Ì®D €>ÚÔºUȲYGN«$-¤_È(~üGQ“&Ÿ”`Äc´r"ˆ5„c$Dx@¤‘R iƒ6ôÉI'h8éU©TzªÉM÷¨i˜(N8­Òw•bÜ¢6RY2ÁŽæ.¶D ẼÙW­ÀÖöw©Þ¹PÄ€u"z9–‘>úP:„}›Iæ}<ʽäLC¤»÷±é ¤&°i/0v‘:HšÈ{ÉíО|av½á:A˜9ƒKÉy<’r€£Ö“¨=2i'HS™¡O™5”éuœÃBc8ÄÀgœ/Ø1.$(]ã™ø“Ó¶9ñ€ñ/ˆ<öÅ=¬U˜™ =î9Å4.0xÆr{à1;c @ÒRkIͼÆR$GsýªÎôÖûQ¨A$"B Ø te,e(²ˆÓjCé$"@¢ådýÙiJ(¹••lŽ`̉Oò T‰d‰‰åutr ‰¢&«,üˆdÎNá Tž™YÓ©‹ÄRôŠh¨¤`Nxh2c)!‘2ºåDô’©–Œ±@’8IÃ騹’ä:ŠL£¥j Ñrc!Ä ±bˆh¼¤@‰*Å]™þQøÕÑ)´˜¬t³áÛ e3Îh-DTÒŠ* ªtè¢É)!™j£{ c$! fãʼ®eÃ*LwòªcFŽ‚SÒä…#²¥ÌÃ$êÁfe¹ Dqv”„œQ$nm¶îîæ¨èÖy¹RD’é*<淨ääÄvTʨ‚/5R*d‡õ2Rá$ɾG§8ë>²âkR êóx“]1M!´f3knñ¤”'a0㌦ Þ@ô“Þ´{ž°ï+‰N=°¸…¤íôÏYætYCŤivºÁµÌT§ª ‘SÙ NÕ ²îštdèßÙOÆÄ3×´`‹"ª¶Òø|zªI)²ñPê–IEŠ+¥B˜Ø›õ„„S %!EÐ{]#âÞçŒkiv½¸Æn%ÞÛ8æÄž“˜õß\9ÆóÒ] ç| ¥ÖÏ:Éæ3´̦²ƒcx:Jó|ÎÐ=dyM¹ÁBzɤzO‹ˆMå<üà3̘LÀvã'%Ä;ZÎ':áÖÒb6õäékÝ 4³ã˜8ÀîPÐðÉ!¨A3,éS-žÈ™dD¦@¢B<,ºMòVY"P\±Mç·ð©¤æBq2mjr!² l…ºJkíeЬÕFЂnžé Ù¡‘n–T™¯˜ËRhö@§Â+ù‰m†É¶ÉW.ùQÏ"k/ÆÕH p²†©£!3!&‹(·©b%kIlÒÅ¢è(»_8;õêñ½#ÖXÄÐ *,iêFÓNŠeI¦½U™É¸™‹6ņ̃HÒ á=yÀb½å–8Ã¥liÅθŸXsf[ç|÷¶5—½Ç¾’­d'ÒÊdÌ‘ð¢$€b+«©Â 8#­Üˆžlkcx8Ón1ÖýpQï;Ïh>)jkËÓ"bçìÆ"©N•œ/HX1§so1š4!Âônqt @¾R »²ŽùÂ+‘ƒëûDꈷ˜åÏœ[óŠwë/¼²†Òñ¾#H§Ñe¢¼ëïd3ÙBûÕ<‡DQRyœ5N7;3e(d,o¶\EiséœOJùÂô€øŽH2ž¼`¡O.”=i{ÿ;ßs:Üžîà÷ÖŸ0ä$… È¡¡DÞSìuiÞ Ÿ‰'i cí§)5$PºÕîúK–V“Q(îÔF†^ÊÇqš¦0«„ež—•Ni;2øÀÈö6Šâù~™ù¦Tš´¼ÙuùjzšQ¨1-££–ÂpäõdR]¯Õ¼¦èÈÕU×ËøÖ K¥J×ìUóÃ6ÔTTù´ŽúªÝ4-µi5`Ä8"öAB Í’HBª2£» ¡µT2BÝ ²Ú·† e)W(UÊJd`îerÒ‰²ÂªHÂ*é"P€ Èlð‰zGNŒm4ùˆB"kÍ-L½>”2Bù„¸¢KÍ%_*48ŒB”2ÉcS'"[52.iFZéWó¯hÊ$ "Aõ˜X’BtÕoLNÉ‚R:¢°$ÈȲ`h¸~Ýæ%mU»€ä² óPö@]?‹bÝó5ZÊÚã‹ Qè'½y=7g?‘b£¤i\Þ¨|ºÊ05ƒ\"›‘` Û Í‚*a¹êñ2I„s!2Ó§FgÖfgÚ†- ªQ’\ $DS,¤']áfœœÉRýç“›ÒiIB7-ŠS‘H3¢}ÙM¢†H ?Š ú‚vçzzQŒÔÙUFŒÏM Ç‚B›š1b-´TF%e…o]FÙk—é’½£å$ô««Í'Yòw¢2"β"§¶µb•®+~ÒÁÊ11EvrWó$€ï '!4Ø3{§¡Ö|šuçCYŒØíó™>y0ñq8´Iæß¶1›m ÏžQëfÓ¶ ÈõïŒùÃÄç´=ç:à¦øÓ%Ìf8ƒ¬u·—ÇÎ͘–·ˆO0‡ˆsi/¬˜o0i&gÌ ÚZC'¶=e²íñÚ /1Ì Ä'~ø@ÞµÅÖ9„ñ{Ú@ 8ži=§ž±ï9µ"B†L@©ÊtX©DÑ9¦Q/Ä-Ýðó2š r)›"¨•)DÕÁ^¼ËØûôÖw˜dó~!²R§4Ã5®„x »Â¢êÔYdÄíy½i@¤“j zÒ9¢*=Úo«÷áÒ˰È7 ² ÈmE ¤¢ÑËm§“ÙYKËú´S÷ÐÖD‰¨üéžö¡U²d`“Ú¾‚@âÀQùztÓ&~ºÀºêâö­ÍPš¡— ]×ëYZý­5u þ¢©d0^‹‚…&‰ í}*¿èãe»P½å-Ê´=G\u2à4Q§f­±‡5Š®Šº^âjªä-tÕV”Ø”Bf‚(Ø(Èsv_Ck˜¦ƒŒaâ¤×|wŽõ9郬gLØÁ‚2Xß ¶8ÏÅÄ:].’x×Lƒ¿¶r”šÇŽØâ:\IˆÒ“´ò†as(é ’éÆù‘}¤3 ïP¾ð¡ÌüÊ—H`{ÏI´¶5ŽÐº@üKÖxž!w–Ä æ5“XÐ(kfGiW̉ÒLÜÂb§m%yħaâøô×&¸ã§`!ÀÝ]„˜È@Ê æ‹—H_6žÄ|ÉŸ-§ó=5 ¾%³ÝÓ§ÑRÇ%Q%íˆ50³vòÓÓz~#ÞúiLØ™§gÒ©q8Kê.ÏG ¸†–Œ­ Í·o~›¾—'fvô©)1æB1(tP}²ÕºëÙ°SBULΑTâå„(•Wj ?&¨ dʶW§—†›³èü®6fÒª¥Tæ×KI«§³…C·ÇÏÉÎRÉ>—YôžÑE®:ZHiRs:Fa>‘Š5.giâyºGÄ= s!´‹ç|.‘¬§¬‰×®âQÚ×8ëi¾ßM:ÚúátÆâLk„Þ:Ýç϶:I¬´öú`LÐÔÁ Â22 YÓOS;’‚:¥·ÕW÷ ¸O ôG¾ô‹0Iɪ¹Û5ìÁš{ŒŒH"v¢´ÓñÔì¹õ7\êé:Ó”rAØLÞ{5š’+ë`µõQPâiö¯Q4ª„~í·›ÜvÑ´¶˜áXwI©É~Ë£‚Ål¥P©…Ì0²e¬ÜgkÏŒ9„ÞñÎpw-*H{Ãí#kh¤)­@÷‘ézàLïÞ¬í ™ÇŒð&sñ“¶2âCñt“`ŠÙ&d¦RR™íyiÐQ‘•Y!EK&Û5ÜÖ†´j¦7‡—eÈúԳ͕QØŒVFFz.ªÚƒ0ŽÒ-¥G\\jÓ´R„¢…d,|Ʊve’w½;&ð&üŽh:ðÊI4ýêE²¡N? C!Ø0AD‘?Ê”²eùsóø{ºˆ±·˜Y| ¢Fi©ôW\]æú61ׯhµÕOsëÄ{ÂUgª>ÛL³ Ý0œDªQF!fí¥ïNäF«åvë}GšÂF;šî‚mK´[žóI™þÃ5Š\ýº$ÙM“uD­Ï­ãí¤¯½Qñ 0†u Ã%`uÌÙÞÚ¦qúÞf¼µ—-,S¯Õå© ¾NÌüAÖžfgt^RƒÊþ^¯5R²‚9Ö[Y£­l³ô¡3™¢îþòÞuâáÜþÈ«ºyù˜Q즼É,©ÓuúÃiõ<»\êsø¾Ç³m´ÿ0VªØoJ¬Èç%ú¦( uò«}Äo)ñŸ‡–ªà¸Ý×5/¥î =pû›ÚèØ¢\þÜ8VgZïQf¿”¤s‘9[—“놞(¥cup¤l‹‚6x©‘òïl ¡\§YQÊï{‡S~úÍ™ï•ãÉ–TWÖ¹t Á>ÕÖ‹X…yAÁ±{ ´ÒKÔðÉ4ï´¢ OlöC_¨bsAE¶ËÎÒvACæO÷î騼ìB”J`ÇðßQÄ‹þA÷É!ÜÓâ⪢U PÉRØP¯5 A.cÙ¬†Òt€æTÒCÖó¤¦`í6Ðm!Ö‰ÉÉÄ^øxÏÆTÍc!2%£$ ,‘*eH©•õöxeñfI ™êŠ6±—d æjĤ,Iˆ±v­hò’´ÔÀЩ”…OGò× Qr‹¨ÖÞRËdéÝ ˆèË¢Æ\˜I§ºMù TÕÛ-!@e£.ˆBûI( tP€‰ó·°õwbÖõÌ…ŸÊ2™,ÒJ|ñÆ)¦»†iñío¦¯L‹¿3§i‡s„«ŒÒ—Ýjfpì¼"jëL£â~š 9"»ÔMäØoÍ.Bn}/Æ3^˜)A^Ž=yΊ.ß")!…(KeA]É ©Ì¨¯\Y$ÂiÒ,R ]¤D/–I~š+ãUMížÚUš!"7¶Ã õLE`Í-5 “]Mô¥üD§Õ°Â×(:.¹†Ío<;s+8AïWQÈÂõHn? ‡fäteHÂU¹ûÕÑŸ‰)º cÚ´uÄë•‹ö̆I°’T²sÄsÃ)ü“4áì_ Y¼MþH©ês®íDÇÉë R¶,.Q­—®R:ÎÔ]útÅÐPÚœí„äxEJ›DôCX2,ÑÓnwê+Y%í6ºà¹æõÿˆæêö$†*Ó^´&®@Ÿtföôƒgâþ³,IG(¸rì¾ÑvÈ5 ’\àÄ›ñ¾xƒÖ3Ò{Á¾Ø7צzËéÖ½_¡OD©¡ó ^ŒRvïy‘(Д³*žÄ ÙëdôÇ«nn¹™XÐÔÈL‰ÛÉ·¦ Ñèr”_‰%â„1!HÉT5!€tAjê¥2ƒF ‡€]bÎãFJbó[”èÒJP/h rNtWXPÉêëjñ›¦£¥›¢%¬¾c"Ü@†vNšÊWÅo ËRèÉ,W× WI*ëÏ-ÝgC­gæ‚:2á FÕ'òm¹9Y•^±õ|ˆâËgÚÞ© *~ÂÓÅœTÅQúšËZIT‚Ÿœ*íò Ú&hø¸M“³SSL:Â'¬âÆ–EÚJÄÔ¿Inª®jÚRä*‹öŽm”ç,úU“äöh¬Å4ötoJÐŽ‘²d]8neÕŠ&Õq«Ñ—qOÎêÊjp~!H°Í;Iµò'áí~Ýz¿Wì½ËÕœ³Ôh/æÆl🡠úð¬b»ÖækË£Yb–ª/&é[´rÑ‹,‰ßõº¶¹QQ[.kÔ2ƒ™Ò@ž¼½^¢$çéä’äJ¬€õÝK :Ë š]`È"E΃?5 ›+“.ºK³r&Á•L„¬d%DšÔ®ò§kxCÄu“°&’úÇY!Öí;ÉæC¼N0Àu·žoë˜ø·5×\hÆT¨ŽádA&C—¬3S(2CB/ ‡¤aÐøø×+³SÓÄ’¯K$Ó(ÀÒ v\_]Ë’Œ®Ì³¢kƹ çæ[£v8‰dŠsäQHQÕ[.f9Â&SQú´®øntýøÌ÷©ŒÜw\n„ö½?;™#ùñlì·PS 8ã YvU‹É0Ƚ½VgÊõänÐpNÒöCT[eq{P1Uó;3nr|^wûØ…ÝÈÞ0“íן´Ñ0¡êß™àt›ÃOÅ„œ Q §ºÐþ+tCdA‚&ÉRàWU-H?$•S—[ûâÇ}¨XÚ4@–!>K÷½Òõ,¾`GsÖ¶6|Öhf_HB]Õeã°rh‚øMLÁÒ(-T¼Þ×DquNa<0døB*IHèÊ@]ÕD®db(<ɘ Ê´¯¬ÐëztÁ½ÞMLœ’ñe`¬UeRÃh1d2s%«P‘Çã„©r6GNÊÂá²—`þ$a§˜ÓU~-~ÞŽÞÍB׸¢ñï0‚j¢qµ¡3FΑ{õ`°¦š»WhÀX]²åc´Nt¢¨©ä¡a"ºðþ,龨a²PÃuÒI­´è°]*V],Ž“y²ögç-Š@Á¾§š%ý5n«v©æp¡q¨­ûÖÄèÖ1LÇK&7º÷6}PÃ2"©UMkåµ&¦ö(¹c¶B¬´nª4Y^Õ0ô¿GªãT}-p–=wÕZÑÔjÛ×KQlÒÃËE`Ímó£Š- óÙÌÕ´œµaž¦)ª8 úZÙ„9b¥éÅ»Öt{B©ÚH¼(=%Èù­VÄ :!’_ˆ¼À¸Ž¾²f7—á×SˆólGX ™oä© ê9~ r;ª ‡TBe¨C‹@ì ¦hVÁ­zEŸÇ¿ˆ+kM¶¨†­Ã³Ö‰4@fðÁ*’1J†U@]/÷Ón͹‹6cjŽqtc:#ÍÅ`U’œIŽLùã°qJ5Ë6.+³5u7¨[Q¡ Ä$û+ŽÓ•ú»¡ö´Um4©¯M?JRiŠ(KµÜÐwIÕ HqÑ[mÃÂáªì¶ßíǰ”N³ôðzÜ-9ä BrtÒ0wéYÎu³3%^op¨IœGD#®¾I› ¢"È„ApS½š{ÒÔ ¦UDC-Qž[¦”$ªXÕ% üDº!ˆ‚z_F4`­&Ž\q“A ¨e޹®ž_m ®ÔëŠé‡bÙ+¹ œy­Ä 2K|w`Æåй’¶E‘`‰ÚC ~¿7êxR~¿Mƒ[×Din¨bDöQPÀU·Ê¯eQ3ñH#€Š§5£Ìâìî-dEï—ïÌj>¼èô¾]`7¼¥¢}™PÊÊDÅJt 2‘´Ã»å‹YµyÛfz.Htº:Ðq×”Iµb¬°LÖ"®ƒõadI©êÉAä,É #¦Êg‚Òbä4ÚÌJw4†Pе)|mɃK¿¿œñÅc1%rBq{B=¥ß|%4Eñ*`¶ãÚ`®sçãG¿òy¯Œ¼A­¬-Kü“QÇD‘—ˆ‘Éþr¹»ÒÉ]¥=©ÅQ[Ø¢{wp;ÚiöƒG»W [nÁ’E…Ù“S‰í:€ðÕÕ#{Ic«Yçáž’3W½ÞÍWÙ%?Vš~È×ïs Æõ«cÎÿZñn1[­¾e>æ<Ýàø“¢7IVö³)‡¡ËV¦«ÓJnôêÓ°T³vrÑÝ¡Nµiªù[ÐtgˆuäCVWÌÅ!ŽpÕ=ZgŚ˞㖠«‰­‡/U‹zˆU·hÖjéOuGË’¤H‘IÝFcŠ.ê¸Üéx™I‹7E×o/$â¨.sùðµE¹–4“+³}·½:*Ëh½ÃƒÒÄŸ T½ó^!µ&g9¾‘G[ÑE‰£eùNzjn³ÍµÉÖ¶•Ež­lœ—žkKRm’n‰Ú V%oATd·JeU~>º5³ß+W~g¼¾<§UJq‘«BeeOº¯÷EÒSq{²3Jµép`Éì’-.[¦YíÚsJæÊÔ8†êw+ÝX¤¬­Jz^"uÌí`ó™ÜÉ‚§UºÕá9„z÷Eœ×}gö5›±”ï‹&W‹iɧ[B‰qG)Æ«øE'ßʤN¾¨º£o6m4wgá3·SNº®KÀxEáÉÚIA&Pe= ¹­P_I'9aî™ï£F¶RåU%‹õ†i÷{´Og­D´]t‹Sä2޳¬üá “w«Žó¥µSÍÝz¯ë#‹úˆÅ)MO˜y;¤ã6>Ðk«Tr¬L@?N|mן';·k×"üרkB‘tIÎ~ánoöîMÍÒ…°Êá‘èÐÔ(¨4uÄ”áÕ çŠüAó¡Æ}ÍÍÏ´Æú†¥3FÇkÛ:›oŸcª†ðêÇzÈF_.3h"˜×ª£Žƒ:sÊÎ=0¡'µ¢f¯Öþ3¥Ì›²iW™ížÙùNûOÈ—#…ÎyöÜSA °º~o¨¾'|Ìf:›K?,½;…–jÚê/8«ÞÔ×ìq>½úCŸPéøfÔ#¤ÎG®)MjnÞÓ =IýjšèŠ˜ûô—óEÝÆgÅøÁz²6“º$W÷Õãk¿rùE†ÉÝ3bZ'ÙE¢/¬¹wjBý<}ê²kËk?‡YpÝ å>s¨øÛZ:ä½×‡Ödñw·¬­îvóöy£fõµ­†vW½? óåÌ3_ØÏ†?.gÔöÙ£(ƒd@Ì&Ûgögªùªw›Ò¾R·®º_¬¶7é¦ÞýWÜS/Üug²OØž&>¥–@(]"B…¢IÎ5¬µOYA5NÝ<¢¨ÜÑGIª(“F2uNæò_tXS+šžÕ‡} ºB÷DQ‹øÖg2ìàÊ «ê¡ÚJÊ€¥É8 3¢M%£!ƒS'2&@þNg»† E–#µbHíÝ©³c­Ñ¿A8' R3ÅZuu]¤‡…;NÎñõ[$uÙLeL‡0ddSÄd'ê%ˆn2ØônXÁƒT»–ˆÑ’ŸQã¼7—€ÆZÊf˜iw¿hÁÞ> vNÈCûÞU¬Lâjk‡›!”Ágwêé+H›KG‹¾™h]Pmô¬X¤Înˆéú–Z9Õ²’xU¢éEHs)&ÒWš$\ [%¶˜/„ž6µ2“ÙðûêÓ™P8dªŠfGº¶=NÁTÄLôéb’Ì*üX<7Ú :y?T7*g´‘oÕUΓk>ìš#g”G)d@õRäK8îzh0Hì„!™PÓ)<3ÙûSX\Õ”O5]u€½:F\lPwD•Z¤-q…Ò9 · ÍþJ7D5?ZcÊ ™*’Á+šÏW¼Ç^$’š=çÈ›t8¨d¦æV#Ó¼£åëνéôýZëë@‡MT.ªãà dê…ôôF1UŠÏ´g/¤É»$—ž~w·—D»R~|õ‚H™˜€Â²n²™y ª2­M)í©OÊ”yfµZ`„Äë6CCòÍjgL÷ºÍáÃ÷¦x…4:5°î³ÕRhpd¤~A•LïÆ«¦uù¹ÈEÚÌ6¾IÑ"ôÆ0÷fÕ6RV ²Óõ@ïµ”ØMx $îŠH0ˆ¶« z°ÎRÈŒ•[BSŀݧpŒe{æéæ}²-RÝ¥§‡+•RÈ,©EV×pY ö”³¿¯\¤¹”é„{_12’Ÿ!–a=n×~'Hû)Ι„zXËDpýP=#l—?3ñ¥£+ ‘á“–-ƒ c2¡Ñ:Nº Ϊ/¤‰;3šˆyA+™y…¹ “T DMq”2yÕäûYtjj¨&̲R†URgÒ¬EMr¼.Á _Ú›PøEª´‚ƒ)’t}Ý”Dø½úÒ¯t—™}_¥ó}WÛf}Y¹_lF´<+15·¢¢¦ek²o—…õâû>F ¸ù~xói4ᘭÒS2h(:Ê}OqÛäb˜`SYG›B©;(C¶§Ÿ¼JOq|5{ ̰™!a#)”OƆÌó ?eõŸ½]grÝ*ÌŒ“Ûü½èrc>2’oŒ«&4Õ«Äz™ÔS§r‘úê5d©j‚×Lß;æ¾5óz7>]ú {\!Û%µ×ê¾Zô­™êÚª£¨©B&uºÍûÝ5Vöa¯Ï³…¾.(nm¼œýôi’b½tU°¬³îÔj*ÉïÌ8³WÁ­/xXeц(b=÷P-8ß›è¶Rî¶JÑ7Ú(ægešÆx½ÚÃW¢üˆŠì/×Ú¢·Œæ}NX ˆ‡TÏç½æ‹¦ö«ãû˜öcn’™ùG²¼ÐPðÇæ°‰ÄC¢(©¤©Û"±±• ÌæÝ F}. lùXW•x;œs ÕÓ­Z¾0Ú¦)É£‘Vlá,Õú^Ù6|YD(ñó¾Y–â‡ÜOßuQ;šÓY‡?^¥æŒ6‡e“kK´©GEVôBώѧ5ës›Í—ñƒ±|}͂·ãíß9ojýñc÷KùÔ=Äâú°Æ(Š ÏÓ’Ž2®,æ—͵Jæ+†ýqHz^túšiŠSö-9£ ¡Ñ wµŠ¸e8DéÞ¯ttO[¢Ð¶,£¸UE'äç4¢ªù™Ñ—[Ú· j‹/,-–» Ѫ»U 8ø‚‹b̾vÏ4.¦Ö¨´žÓM^´¯ñ^³Èªnë 2®·tjÑ4G[À½ûÅ*ÔÂû^£&žgÉbÿz-ºÔ3Ûñ—Ï4MEê‘YÇÅ-iõ­Ïã§²£wï1¹í*”e@êO ñ ‰§…kJ³4Ô,©MWìÒt¡>£YìÒª%¯÷/>oº^ÒÇŠ­4óIú9ŒÄ=y}F"~ðÁXçÝ7N͇£<1௭· !ù¦¢LS‹f¹B ‡èTnÕ/•#¬,Í0Óc?®¨oÝTTŠªA FNÎ04‚S/„ìÜбU2}"É596ëk)eƒôÀ4÷ã0ë4v€×ã¬ä‡M±âÓבi®½ž[2Èpû4+,¥²8ldÄdƒì(ýtÜÐ~Ú ŸÅ ¢H‰Ô…i!bÁdýµ™;§Æ]Ÿ­• @‚vê—?]”Ÿ½Ò ±Š¬·ê)Ê m¹óʽ—›hÐà¹ñÒä|l]M€çí$*¨Éütg„ DèL¯€ÌñEi¤0«ÚH<ÑpR®ëFš=Ux¬æE «ÔûÜ(§ë¨o*·!ôˆü¿ØŸffSøô­\'Pò£ #g¢‡ßen²½tž6Qo¬,¨‰‚†T2TÄêö1¤Pd·AÝžl(Y äý‹_¦FðØ*D‘‘Ò%¨Q Ú§ŒžÑÖJÉ&=Ù-lLCÉ 8’ý[žšwA3?¾ì+[D.¬ÅMEܺ¢" žúe•êˆÔZFJ))<{Ó#öúYvR¨ÆS*Š öÖÝncJ†yeUšþ øŠó+ôïôÜ_ô;ïÕi‡$4Ê´M@¾ûTî¥@ô×÷ÐPý;"´ê‚9=¾~e÷“V-kt÷öž–÷,WÌ ¾Q,@|j”wVâ–`h‰B ŒQ§7ö¡ÈŸní'T õpÀ{ÈÁcýo4û@‡Yõ¡Ó'%sWab‰ÒþièeBŠª=Ÿ+¸ëVýpO—ÊÙr…§V½ò¼¥¹±ôâýVb²ÎæcôÀ¿*Ô·ˆ“…|u¾æ<í6ÑWÌ5õMyKDÖgÖX[¿Õ²û?iwè›÷ƒ¥¼þ_§Sât“{Š[¥÷^^£iƒå=×®WÅ_Xêj"ÁÖ¥ºÅ×E);DïJ&…ê©Rå]0rFŒËܽaYèT*K¾?[ÝP _W÷ÓåR¾YT±Û$°‰÷I2!b¯= C@+´ö~Ù§„rø¶®a¿*4e·åPË4®ˆD×ÔqÑ¿‰B7®fðf‡²*¡I{Q‰ ¨e‚¦”IK¢(D¿~©Ybˆ0ÈæV92©éã¶ eC|ijd§Ó öš"ýmEªJ ÊÎ…@²ñ@™†ÒÈ‘/k1†ž’äPÁS²Öäë× c€Òâæt'Ìm× ©èЂÉ+œœ— p÷‰$˜Èh“)~t(ß–ç†Z0ïRI!ÌÉ gI3£™Tü5#aR™K"z‚êêéûò#ÅEžÖH¨+D%ƒ*©’®a½^Ô ™˜šKºZŒ'Ì(\ÝA@`ÈŠB‘Ã!0d.G§ôÒAHÑ7ò©iÑxdäPÿyeITq™Pl¾¨²[xTè¡0SïTL¡¬Ùÿ:ÿV­gþ°wì‹Ïö +äëÏê0¡¥-óWW_('­tߎšÜÔÆg‰°RÅT8U!g¦V@=þJ{6a?gU¥Éð DïÔ–ý“H“UQA´ƒNVÅIç©¥BAë ÑÚ§ :£úýEÕŒýKªœµê™Ü.ßW}Å–¥á¾­"h éÐ3¥Í´ƒ¾ô²Ù爫uóe24’h‡tÜHD‹7ŠÅtDíš*‹'‹& QÆ][ì r‘GZßh-YNȧ›8#$”?áÏìe»ý¥ó¸«Ñ8 \®ö¢>,è57£¼ïÅbnƒT¥˜÷ªØêÞ»na>×¶k™ªeöU Ñ4N$Ì¿Iq;ÁA¬×hë&t°|ÛØƒ3ŬíŽÖ|ÎÓYƒÚ åÎøqt‡¶¸M>qˆ>9Â{ÂíÎ.¼g3ï8“é¼ù“éé€ñϾ^³ï®Óð=â'2zKÖ 5ÇhÚkéGzdÞSÒÇÓQŸœgÓ’ç¦6wÎ\Å/¬9 &óya_Œ€Š$„i?$¡RT"N@©«6ˆn,˜ŒóA?ëtÒò¨<2ù¸ßÄpâˆ}=m}úëÎÚ™ë”ñ¦3xiLÇÍîCÓ+•2ÔÙþ2âÒXáR°„O´\3êiš½ Õ)-·ÅÍÍ! ËŠ€aPTɺAåu>J–(d„ÈŸ,­4RNºçä›o=(i!T€æl‚¥ §”ž‡S(ÊfS£(CÝPd»Š¢Ëp€1Â%™ûÛ>1ƒäHËÓüíˆtt B7M£m<(ÁÁ©º·µ²È#6ÙÏßÈÑ…zIšÂPíŸ<r“3¶êÚ÷ ü”ñœÞÞ­_b˜-á7X!‡Š®B3Q´heöLü@©%lB6 óª^÷I€Á0¸ÕW㧘÷}x—<¥z¨ò»ÞÍ´Sz ÆÃOƒ£ƒ+RL¶énþ^‹¦Tdþdø‹›Û®SÅ쎈ÑÕ]b;äç@½~ŒÜú©ù‡D)”všd2£xì6{ë™j‘r‡¬Úî⇩àmÕ(Þ¯ £«šû–ÛÒ4ÞÄÍçôjÊŸåt0¡G¬-Ú¼Ë#ƒª'µí¢?šR`7XP½Î ýв¶>I–5XK¿äìÄí¦öID[p4írÓùéºÞsk¦K7iœ=Z~廀qò×;Tª_>,ø¤’¿Äp­©Ó#UØTŸ°¾OkQÑM]4q—Ê6¨±YܱïÌÒjšÅ‹×¥¹¡§ïJŽÌZaid?:I;¥ ^)Õ(´”‰GA–@à†E Y,@bæYA -„qçF±<¯O'1é<;8D+ÚäÿbÊ ©”ŠåhÉŽ’ ™{«2 Oå'Úïs0̺X³§æçð×ò hØš¶ \ aŠ "WYš«Óä: Ägù‹ÿ3 Q ‚J­ôQa'õ&é (õ%ºL.n£vq÷/÷6Ù¯V´êç[~’ën áßÖ£ëÞé÷UmWèÒ¦³Jê9^ÿ’åÓ:²¾t,eëñçíO›fÁPRÃÙ´¾)û7o´‘[<8<ΦÜõ,vŽxÖ¾±JLÌy|+ð¡Žè¥N'Žm|„‡öóö~^§Y¢ZÈ~dÆ’†lôîº,ÜżœPÏÖwÍ0לGsé¹ý¯+4zëóÆ»ç^å´¸i£¿‘‡tu@„; °–?«Sù×sê­F¥èªã0b4óf±µ¢àº6Œ/Žÿ¯“I«®êîE"îéÄ„T‚¡&®Áw¹±aõ…Ñ¥ê‚dW¿TO(”(úÒݪ¸½*ÒÅ*¾­ì;Y¥¼éÌê¿'1g18΋¨FŸ_«úüîùL]³6Ì*¡?i&Å'¾—ÈOÅüµ|…&.ƒ]+È£ôxóíÔVx / &K†×në5™B˪ÏÊV‘™>Q?L#ô¯Qô=5 D§NÐWnÊÉÒáMVÍc‚ïÙûìÆÉÕ'wV¾–Õûʶ²â÷üÌ}@‘ï¬<2ÝѧmvìO¬ÓkãÊf¿n®“dL_T˰ë^~e?§QÌ!W[yâ¶:†Bè­Hÿ¡<­é¢4ï’Ó·±û“sköµ²T­Y§(ù¼SËÚ½N/FBbšßs#Á·¬Ã}Ö~òÞ-.¨AжÿGM|…$:!K-~šo0ÅŽl†º¬÷KPay–\'*Þ2PøœéÞ¬ì„v«Çi‚^ŒÝM á²[Òþ,ÿ‘ÿ]Y027äW%g;žöŸRëA»ë-oÒÿf¾L\ÛÈÊeÚä`d¦QLñý9ÓU¤ßù{Ú]á[æyZð%Ÿû˜ny{>O.…Š#šºgé?PqäÊÚÀÃu¾«sùRÈFà, ýÖõãñE¿§ÆeöÖK±7]‹&ÌEnûtGy­›¦k:!®û5ýJýËÀbå ?k?r?§¥ù}ù—ãM4• )OpêpÞN΀üóÊ‘âS¾ªÝûÝ,*Éý‡³z½SOé³¥êŽÚúŽÛÚâ©‚5”¯S›{k·´H×>mQ^Ó¯îµgXYÍqîÍtU‰9GF=qkiühj‰º¢¶‡ÕbŸƒîªGÜiéÓÓµ•J‰Ù53µ’Æypq¡ÛÄi ôj§Úú{[í•_Åú1 Ë×nýõfæ)>ïÉê~áhÊZ³ \•Až÷QY”œúÍœ{;tÔ>q8ù×V¼Å)ãÛ7>½»º‹SÔÅ?eßÏ<ÃåìÚ´>?”¥ „4µZÿ¾Úµy )«}…ñ׳;œòª3³¹£Œ )¼·‡©á~ªI“çý¯ÙÓÓ¹ÎÌ#‘–Â¥rUzÇ7ØjOI2ê€5ŠúÉ4ûìoÇóOVÉ~“)|´LÁ’Ïul06uKR+òY[ØFœ#w>ÎOYhÎíX=u®Æ94¦-FÚ¥ Ž2eö´§«×ˆ–­K•M¨4ëÙíÿ¯jþAõ–жÔN—3ñ¨£'‘O!Æ>½£×›œ©ªùá5åÔ‡Š–Z)O¹¨`IûS›>l°8·7Jã–­z¬ID/¸­gû]\X¿sêÍŠ—1L·”y îšrC¨Z—·´Fï5 ÖÒË5A(ºm{£co1`¦m âd9eZ g@-ǵš"î‘£Âèõù*–ëï+.^Õ3Wü•»)Tf¡÷œÖ÷U²tëU Ò8+ºb.sÖê¡jU˜/TítßfÉ8µòe»Ü¾Q©ˆi Òä¶ÂÇÇÙkiTÖUCÄtZûƒâ†¡\t…¶¯{Bê=ÇyqpwòÇìî¾æÙ@†„$"ø¤Æxö‘cT×]¼å3 ^ƒQÉŠÖ× [X|Ù¬w‚]‘“å…3fj…VãöE ¹§Þ«»å}ùh 7ßæö‘k?ìõu|»`…ñV³ç}|žé:ë9Z›r¯¹ÊƒØÏ÷ÁíWcP€¿–C*²êÉ<¦Ì"2‡í…¨ÎÝ_ÕÜ&ŒÖ"5—¥­Q^zÄÒD'»†cÈOŠ ¼Ñ“œ ưðæíoyÐèÞóéÙ˜gÜ“AM ï¯~GwŒòÚNíÛmØ­3TêJ<ÞŠRhÃöÚ.Sñè8ÔÚž#OôØoòµÃ/¯6tzŸ¼÷¦ª[QÊ-én}NPyAŠü[ªdîÙž™rÜõŸIîGQ Eœ:Ÿp¯´ÉsBcÅvO¬ê×Âê˜CÎ趺ý¸jºkÖ«w”é»Z­¯úkûùi^±æ;ð¬ 1Ö…µÒ¬é4¨ý•Þ»®5;ª™ôÿ:~¸ß´xtJ¯u¥Öqà›…t|n‹»G÷¡m/⻪•±¼RŸs<®æ^ƒfš×5l}aÉÙv–Æ' «ôA#§)ÔTYÑô'lVñ¿Þ-.Lˆ2ü“¢êÔÖ±û#vηâ]£‹‘=¿Ü©ËdLÙKý¿¬ã†¦›ÃØgS¿Œ»{†½w7 ë=Ò î”AÑè✞¾‰‹U×¼RÈ8wž¢0>T>|í³KöœŽæÑ|ªÞÜfe+TIR–³¿äA‚.O! 5ØŽ±[xú¥qº‚s¸r¸î-RaÙVÜg2tš×->žÜÊÁ‚}ãk¬º0™º|E06ÌL§M(ž^«kU»¨b Ñ¡Y·Õa„^¦ÆeR7«a±Œ¿fñÆœóXR:4l^{(Q©Ã½S!•Ú­Kï«[”°N‘w†7·p8zøÛêùËàÇ=·q”,ˆhôZ]ñ:ŠGä ïk{ø÷Å-2e“Sù5“?±HšA²ŠCN«ºóçÇ·¥i‡]ºìöiÇTó Ò§&ù^ýO}¦µHíwÑÙ1‹Wöß¼o:Þ‡/ñæ±³V¸œÝ*h}Ì鑊Ïñ›W¬8Á¢|?3'âͬkå³<ÆõƒKˆ ®µïÚ¥¡«|ç¼ë¿iÙ´ý¿7ÎWÞîšÂµ‘Ú‹Oȇ£®éÎÜ1÷míºYö(—'ò<ë?Šû~ì‚<nÔêõêÚ± å;Æ1’1qIa‚~FTO²Êi?«µ6ý–î6q‡Öô‡°Co}fn‹t¾avB‹Å¤,Èd€¾!DkÝ#4§ˆÿ›Ù%5ºÚ½+Í%’Ϊ:šÑð¯ä™”œ$ _I!á™Ú I‹Â>V~Óš¤ÆñýÆ£ÏtÌÍþþzròR6‰<° ®YyümÑöëé™ÅѽñXÉÎNõRç~þù‡‰H,3¤éúÈYTäî©)—Dáöžª8“½êÍ£_¦£²¹¹é¬‰bä.¨­ý Vêþh?©:Ò=~’’|=bj&~í/×ËñfËõPŸO΀ttT,3SÄû{Rdê”ö¡¢[´ e²[¸úáPŠœ‘±òÁÙ¡ï§R„|¡Œž¨^˃„9Çsî/åñu©´ÝaÀÂ*‰Ù™‹Wl†ÛÊ©ÖUAD—„b™X'W×JœÒ±u¯­²%Õð÷ú}³¨²~§ï¨øúÏîý9ý•þç…Ž¿c>?Ý £_JXß:jÏŸ°£WÂËøá›ùµGg¾ýñFÉZ*8þªÍË*ÏÅHúÊÖ²5_Qûk}øsP3d×äïù!÷v§Õ¾{Òò1_Yot„TÞ ×û´õ¿R á}¹=_à¡2GG—MÅâï”C|£ÏÔ‚ÖE<Êá(÷hÌöo„²Ä iÚ8Pùœ¥æ0Ôa“ƒ™¢@ã´F'ùºhö–Øå"ôu Þ,÷XÚÖ,è“Aù‚&_Œ°EÕr•Læcµ^çå™go'v­!Â.'zÞt՜ԥ„ïvÚú¾sÛÔ?†Û²‚íÖå·…òݲ1f_LÕëÎ9ÝÙcÈ¥ša»f׈08 Q~õ˜±^&,ê¼^e)T÷”÷ïÕIû˜å=kœ>íf{§yz›xiäDïX»%!mGîŸóSé‡UDòºŠë×Zž^|÷ºÛôcÔÆºTÞ­炌§÷¨ÿx’y½“µù¿'7h ?Å?“ÁFü³m7^±ò$î•ù:#<û¦9ûKÖ“DyúÙcdëŒ/Y¬^Ú>J·UFíh©g@“6-dò‰Jgö¿/ôéWꃯf´M)ëî>b©ý¨Äñš>éÞ¯» ø¾å’ÓU¼iú#_Õ=ôîa7š[s¥huÔ¸³£7UPÝ©Œßêw<]±Û¬ê¨gß_º1âÌ‹í1†ü©£Ê¶©¾Øý­ÀjÎÍC¢·©R0Ó\æ~!‰¯òyFgG„öÛ^NߨóÖúnûOiqkÖ;âïä6ºäޗΫ»2¯©$ìÏÄ5aD÷÷ó—©cÙ÷úô¿É_=VÔþkQ#cÖÈ¿y %zI&ÌÄyoI¬Ê‚¿™¹ t¬ù…ž´šÖ¢ÿÖîÎõšt3kµ©ÝEº›Ž›¶æú¥¼X·>ÁËïòn½Fk~ûú¿W]büúTNžƒæG3_ǵéæþ‘(%oÝ) T˜ó“Çëx´Ø5OÍOßcÓäÒŒB9'ÆTeí“)œ­=˜|ïNÍzlí¢"ikua¼S¼Z MWù©S´ºÊý°ýûãá^ÖK¶»x¿T¡÷°’Œ Hì¥+6þšînž½Š—)"m#/õÒ†t2åmF&ÇŸ}YàPLDeÚØ]Ul,˜¦Í1|Ï•ŽûºÞzït‘Gt¡Ze[æUXË[:S»Ö½ûnéQûå}5~üö¼N£ºív­^ìöœ÷ë÷„·Oîa}åi¾§}ò‹‚Mwfç}W™°˜ñ¾ûºahÎSïê‰ç¿gÞã¿p‹UB£ø-×@ÕÞë;ã¿t4Æê G³ãõÕ©í¦_'ºªµXÍkåiôjÒßx›~ÌõUÒü|ûÍÅéGgO§ë6¦õ~œòІg(iv.âL¾uz°xÍ–S ^ì0·íTB}óºQ´ØºJñ‚Íä$ã³ö¾¥»±×¶½oŽü¥¹º­ZÃE¿TPþMNdªc»Ó%¼Åîæ÷H}QPºò·ê‹÷¶«R©Öv¶$Áó›q‘lõÒûoy‹b:v½=+Í.6PTœ¢ƒ–ê¼Ë5ò0!(eAKSA\Ì#•FÂüc¤ýA^ý{ûeòœâ¿ä8o.¢¹Ýi[ß*ÕÆìÝÒlXa¿ºfˆûù#û¶¦¾ ÚèË^»h5Å ¼%<ºª Ñ>7í\ã¢âgèõ¤åÃ'0Š?îþß÷XDò5ïíoÕV½ùû7’‰ËØÕ"h‚§c×Q6õ·Nv•å0,ûÕ–^½bŸšp°™Z[xÖWêß]m­Tót\uÝý¿/¨¨Ô÷Õ·@óAc@›Qí|ò¾f´þûY²{F›ö¶È}~¶]Ý9æpÔ¾iÞ^öâÒNžõ3¸žéÔnW¼ñ7þîc/´«{¶S·[7ÉûæèÚöýÙ×èZùOïCî½%œôé–ί3TÂF=¯VHtG\C&}ß¼Âx[BÅž é¡ yþÇEz›û\÷³jâ½Nšõ,_ŠõÄ(nø˜66)ªn³îÊÔOœ)§ï—}N{~.ÿU»ÏSýQÁÛeùä@¬ÏMÑdA‹0Vm«oÚùgONË4YÃ[iý4›Úíé4!_òÁ³ŸÃæÝ,³w³Yi+÷°Ó5Êç Xà9å®5jÍ´o`›Œ(üP®Rw·ke8fwdÏíê¿ÈÍ“Ã?*î|nlu:¥›£F8Ž@,QÛ/8†šUµÚKùŸù“§ësô>é¥ÙZ”á¹j„Ý{?±[0Áƒbž¡Aì ü€cPb‘.ñµ”ANˆÙ©.’‚;7=7j3Dé³²ÝÝBwڳƺçóî•2OQ¿‘ÓŸÌ?¦rctP,d‡³ýƆ‘(ej$Ìœ‰l±Åßï ™M.¿™9ÍÓ†VŽ–&Ú»…í,GÆ@jiê'WN¦ëÙ ‡{ra_ >j©%¿·ÍÌxZ©³BÇOß{ÜéÚD'[E׫GGßw«tVi7su(@NÓ Á¥³ÝèûÆñ¥ýûëOk¾ýõÿ›tÉ„eÕh¡¹Z­þ³®+µB‚ôeï¡ßOúöm?ëS¿UÝÖ’ÒjŸ½Qñ3{~çûôÛ§üɤù³ñ¿mÖŸòû%5ñ¿;¨Éþž•È~Ô!SÕŠŒûYùËm‡°jÿÇ;¦,ûÝQ>‡U(´ù íõýg‡dk'אָ3QL×lÄhÖÕ³y?X±4㎬ýRØOÏ_«õúí"a ñ‡lοɇN"唡”÷Jfèó›;—‹”[óÚ2þ†Ÿ©/™Œü…µè'Ÿ'0ßÐ,¡Š"¬/ë°ã@â´:›ã¤ Æª»C¦ßÏ/EX|2–ù’Œþ"~ßkzÇÍîèý./ÕêM–¿¼ýŒÿOAû ×ÊÝ/\]{™Ó¾QLóga˜¦•Üâ×øÒª¢7îJ)5¸æß‡Áöû­¯–üú¸É–z= Êì½Íÿ§‡áLQh‚´Do–xëßX=0§´†‰Pÿ΄Næk¯î©w…œY§ÙêÅ©njpöÇ•=¼Ûs>Økù4¯["y»ŸÞÿ^æ“BQ+.Ø!ÿ*: ¡û¾•ð”¦E9Jù·¬@¥ÈÌß™…ohçú7víºýO"ã“úm•‰š*Q±¢(Ð=5ÝžüÕuŠkö÷ûbõßä¿=Ý7°ëòÑNViˆ¥gM/Џv唬|©™ÖݧVçW#­gÝþµÝÄaØÆ•ԣܟ¾'83 ÷ã«x–]Žõç󌬕ý—ˆ ;| yêS|ÈéöBç⌽þc9óˆÀô‘ò5t½3a5+¥ª¸Oߺòs4øèÿ>1…üÒÎ΋ýõÓ÷ºœO=¾~Ø0Ûlå•ÏË¥ÒÓ–®fó6ššÊ ãìc¼MA ~i8úë‹@BªT¥ÅÖÿ–uSLA{G~“V_曲G|Í7EU7òªø3©mm¾õ5Úémîwúû4þ§›3½¶;Z«§|,ÎéÔSœLPLÀõºK.¦ÞÅ…½6š7JÇ o¤_î©n[IÍ|aº7IdãÜçXëõªÃfm·mãÔ‡Ê~µÉ:e¢_Ã7aS9~MèÔ\Ñ{ÇåÇiké¯p̦ªÞá•ÈŸÔÅëý1Nïì/ï¨.޾k˜Œkt]“Dz¿,}š÷è¿÷å~뿆*5©¬ô£ÝUb© ƒÆ¿U¨¨1–ùï4«ÇÔ‰Î^{œùÔE º¯S·^©"‘/ÂuÜşܬÊvim£µ¸´{ë+z¿ úóÚRÝîŸãÏwF:™ï3Xf­ê'ÜPLËP_õ~[¯Þuq1¡ ¦6ïßuq­Ö~ çæê¨<g¾ª>^n¯d¼”ÞMóöé Ef§õ·žâÞBûkögt¼Q‡P´ ìÛã~TZmÒ|¿¼FNÖ úïÍ}ù©OÅ(nè—»«þ5o×°î~§—µ½EÝÿ–ÇÜC7]«$-=^þês½¿³l¬ÜÌ^T¯â(óösmå•è«ã§È;nS8½Úó©HtPÞ+#•”Œ÷;þLZµ(»|òî´Fé’ËJ2yÑ`¼9ZMuÚåÜ+ÏVybÍOÉw0}ùy¿y­F÷=c»ÒŸ¦¹Šx[Æøês^ ¦íý¶dßôe¡éY)/¤•sô)>_–í«kÖ%[Û˾¾þ÷êó­™àOÚõ±iÓ 9/‰‹ºÍ˜q õA˜¤‰bbJb(™‚H" "P(tRR J‘* B©KHR¬JÄ--% TRSS2Ds8¢$’’©ƒgEPâÁU Š.EÂ:+av]3D¤ó„WÂ(¾¿V0ÑB&N |ÙO<›påÔnëáô/" /Éï”DfÔõ³··ßñ7ƒ'¼={ä6HT|/‘WÔ/!ü¡ù= ÞXYó+Ö6¶‰Atå†dr™“BH£EÎþŸ‹¨þ'ΚÚîØotC^꓎®îîælj”U; §ƒ5ßrèÌÓÂen î­ãw׎+Ç=Ey ‚¥¯àøJ€+ô}äùPè]²ÒµTÐ_Ñ4Å )*’$¦–‚©j"’"/±d‚b†• B•¥Zhˆ”j% ¥( h¦f*ª‚XŠ&˜ ¡j"ª•‚bJ$ ˜¢¨Š†.ìEUUEQ-‘ÐP¥СE*R*% ÓJÒ i¤ã+E4ÈêÆç ªe4›N…ˆ¶%ª NUÉ+Ö’´”£Bh(ÒW%䜈٠ւ —–™]"ŠŽYŽ*ZÔJ¸UX{; ªŽÝYj±("¡54±b&ª1-Q›JS@h:´‘r4*Öi˜OüÜBîdUšµ*нxŒŠH êªðÝð")nÆèS“Ê(¾!GÞ'áˆO­¢@Qy>Öp.„wBƒ)ä-&½_!¬‡$;œ)¦d‘h‘r9’—@ÒšAJ€Òé'ìjq$üü‡Þ,|’hêÄ‘ñ¬÷ÉÊŠ)hiŽ`ä9Ø]þ wî9ÆGäO&\J¾îÛ²¸\Š»ƒœrE Ú˜Ò ÷w¼ásÓYAEÞ¾}êúÁ<É Y¨ò[„ˆ‚JëdA_}»ÐgÓ‘(?m†qKÓfhU}À\,³ºðÖºBšù²_7Ÿ!™”Ä툢ѫ¿Ã»—!0„„˜‡àü<‹¾÷ÜúÓ‰ÁȸǜwDìyÐ#«eB¹íÊòwHùÄ(„+›©‡¬Wæ0Tðý§œÂé}¶"/”‡½GZÜÓ?‰Ïši€®éPx¬îMu ù#á-…SîîPqäÃß × ?A3Ú8 ÂO||uÇÕër Š_{÷ßsóÅU«õÿ¡‡E4ªdÏù‘dÂÈ@¨ dT*g–´¥Ì É4‰¤ähQä§!Aä‰C Ð§$ q!„­"e2ª(ÑŠ# Š$Ÿà;œåëc“SÍEQ‘Ø<ƒwN'CNE79?«¼žAOÓ™œ¾W Õc ù|ÅRÒuÈ)åÔþgn¬û»o“yÜÉ$Ȳ~v!d.‚+H9Ïô#“²®tØWX¼Î¢µª¨"©çr–&a_ _;Ÿêëêò¯ŒÚ›0m‚œ˜0â+.3ÖÓ<ˆ ã>çàýŸö÷ü‡á>ïÝ>·áû¹?nÁøyðˆ*§øˆDSñ«þ¹D¡iJR%¢’¨”(T¤Fhh) Š–ˆj&€¨`…"T¥Z(Oæ‡Hé )H&T æÈ ”èR”WH鄤 Ò€é£BhP¥*ЇlƒJRQIE(iCCk44TKIE ¡Û)M¬éß{ñ1¨ª¡?lgÇþtÿÀu"® Ž»-ÚÔw`ËÃìí´¸B»8ü„qäTò÷ßÊ“³5ðõ:[ÒT&&z€¬tšT:À_¤a~ ÐІ!ÿžâü~‡™}åûâ]|?:«#aéêݲïÇ9¸cB¬òC÷~n@„9çÆÚäÛ]tÒ°N–#2V/?O÷_‹·ï?rÓ÷®ßñ?pýCû(ˆhUªR (ˆ ¡jŠH¦¢X¢"ˆ ‰ŠJ>•Z4DµCC}j¡PÖÁ&IGÂhYˆô'ôzk,¼P3u´«KµF\ÄÕ;ægÓHÉ EQ@‚š¤T3…#+”“ú'w#•ZY ™•_ìýÝäTq&Fè9]$=BœÂˆð¥¢‰Îuö\ZÙŒbÉì†OŠø\ìZ•zÁ5/‰1?ÛG;³é·}ß)¨Ôgµï½÷Äœ“ŸauO˜jj_׬¼¶´gÉ[|×ìI@›ló¶±…RHö+Ϩ+¬ê£$ç°×\„ ÿ-5ÐÓ5ŽT}ãG¹ûwàþ'åþWå6üÿïŠû¢Ò_¿(¸Eõ¡Ì£BHCIÉĵ”Q:ùpRiuG%¸Û²¾‹˜g@ùÕ´¢&(ÚÍµŽ’öO;y0/(æ¶=[ÎÇt"âÞw!:õ¿±d]çoì¢êÂÉŸ1É"å'-EF˜ lIòO3—C¢á4ŽWšBTUîO&#Ö\J3‚Eu³"€¤ì¥üv/Ï„qÃ2wc‘:ÃBÿŠîÈueD|û‹Xêáû´©Îš&zÄÑå›Ì“Ù¼„²‰ÒʼFöçù]èõ…ؾŒvEï¾x÷2“ùÍEÜ:eVp“+m¿,xJ‘‰äùíó'0>D¿¸°[{*£ü.³yɨÞèû÷gŸò•ðÝô "±P~¥±!÷  @¥Ä§Ø…Ì@´ª!CTEE-QÖÌ4LÓIPm¨f¢š©ˆhiFž£œÚt: J€ªB¹hªb¤ª) ÓZþ ®µRÅ&ù2ò¼ù]äÚ <®Û“¨'y1¤æÎ‡ètˆýÄ/S@u³OÞ\˜G8±ÑaEÂ9+“œ9›;ëbð£¯%ây'ß[R! …ýºa¼‘Þîç½6?å6Ûaüˆ÷åB©¢!¢ª$_¿(”+MAI@BÌk0ÑCQ)|‰ §Z©©´Å%LLDÁ¬Õ;b†&CMT¶ÎE’EȲ+ÅÙ|À–‘ÑgäGäuðy®K˜ê9Í¡äõ!î;ŽH‘z#ÌvAØ ÏÙ±Mó•ȦhϾmž7Y}c !zS0-{r褊 ’b†"‘¨„¦¨xÂèS14%Õ ‘D@ÒS[)—ePWÔdP£»CëO9tâeÈ®p²ˆ ¤ØDEÓPY"‚\+E4%<ƒ•ªLÃC¥Â˜e$³ê2L’BˆFU\ÉaE\òÒ/PÉ) ý§¬hAQ “”qÌÅЦä\N’¦VC¨Üåç„®$×óWcÎØ!äÂâ Çgnw7AÎJ7\wV$Q œÍG.$Û’ÜŽK$$¯‰}$—™•úXÛçžôyÛœ ¿^y•*E3¤†ZõDŸæ×Ü7»»úV?=£YT1·ŒÆ‰4¬øôeÕ@ð” Ê©9?}? 7¸q°:rábV„S®Wdºhœi¨ü˜!äáPå ª{îáúý_½§ú]ƒ+ö€E@ûËùÐà”E&™ˆ&’§A«çd :D)W’9‘…iZ „M­U!TD:4û“ëÁ§àuß"(((öà©ßEƒÈ¸‰!?Q…2;˜ä§Š«^ î+«gN¡N''çr*î¾âEPË”\g'¿šýK%U4µMè°UWfÚ׋Uxèu­³­×[Ÿi¼^”DOh=Õ@úŸ\AOÕ” MkM ÉÔEUÆÌT›f(¡ªRŠ‹æÆ­Z) –䘕£âÊr-/$ä-PèZ:…SM.44 ´¨-"%*<žIËF”  hmƒH CJÛ @r@ RaÒbR†Š4f¬ÿ2s»"ʨ( ÖÂí4™Šbq š£hˆdÄÍÏp¾¤QSÙeºåâ,‚—¬cžL-O²l“z¿¥½µ]íº¼H³Lß”EÎ a3^Z? -úñŠ·\Ÿ°Øx‰û+i:CÑÂ/G-3bÒtÛæKµm·* ð…UÄ¿›(P¢4‚ P€ý¹¦~Þ1UDÅÔsȲÍÝÅJòÁ+µX\4IPHHˆª9ÌŽSÚç:ëÍDKD¼¶DwÈõäåg œˆ¶‰ÕjB|L“ÕÏ¥yþÓvñ ŽÑ· ˆ"aCo9g´[¨7_oO øê/éÆwºòɓș\¿Ò7w¤3'&Ôû&{m~ë/_9ˆY^1D.j0€þþuK!cž—%)úݳUýHÜϨ~ÇØØyævµ€ÔAÿò'âBHCáýOrùuîmD”þLÜ.…g†1©y˜¢,Ê;ËT³ Yœ‹A ZN´¤ÀãH*åÄà¢$>Nps±§y•Û‘pb(Ù@’/tm½ëri$€IÁ”dPœeÁR¢4”­%rÐi^KÈ ©)j„ (JQ ˜^A¤¤ˆq(  Ø`”L»=β‚€¹ö[3£e‚âEÄ+²˜›Ýï{"®U\÷\÷sÞq åÞȠħ Õà‘|£©ÒhȈ¤›»Ù:*ùgÎ*tb‰¢€¤hiˆ&œ¨¢Öœ992ŸÎÊu*좔_;}Ú=B¸¬¹ôw1ÉRÝû_I^’†õÌ"ñ*ª#É»ˆÉW:#‹–…Ó”D?RóTrù(¡‹8nÕØh§Ú-^«[[×–pª{yMs뮣'çyÊ%{œlÏn8îÐ;…÷Ížm‡.ˆßjÞùÝ|¬qû ­Æ”ÕilCõç¤I˜›@˜›ôi+gë¬øøöCm[¢=ŸÃ€Ù„aáHEÅg·²›NÖuÅd«M 6Û=ÅDìˆ ;„ ª~@D UþÀú° ‚Òû[*>ܪi¡F„b‘ ‰ª‚ª‚€ùV„u8Üœ‚‹Ýݹ܊‚aES2¨ªåM½ögcGrÜÁ¿µC/äù>ëcæN­ÌŠy¸†•Ð÷r†ÛX”ýœi¡G¨9˸SÖ9Ã_Ïïäwî¶PG(™Ñ&*š~Ão©îÍÉ÷ÜÅ÷W…QCòŠõ/êþ'@fF€)B„)R©‘j©J Qˆ©¤©Š šŠ‚ŠIˆ©’ &`˜‚*Bš)(j‚ª‰©”3…6ÃA 2¨âIÂà…Ê.Q³a‰¢È"0äç Ô+Îh?¨àŽ˜?´OWWÖ×óD**žúÇ=XÇ' ¤¯… 3ìûÿgnóåßÔÅž¼ÎÙÉZNwEsXþÚwõ>û¿cI)ÒG^è ‡tDHPPú•V?Þ?fPúø% LTS‡Ù‘ †’ j–…¤B”¡Q+–¥Š–„‰ –š: ¢†‚Š ˆ¢ªØ4TRTÉT’S4ÐÕDé4h 4mR Ä€Ñ¤PU,“:ªÙ­ íCíÃĉЮ±žç¨;ù¾²‡É´øg|œïÞá݆†²†ÑåQsïS·h@ÕîLÝçÄœ¨;±û‚>O鿵ãŠþ½=y3>nĸ—W²MD˜}'3äß±ùá,ÓUàý‡ê ?cµuùp™•Ëô]®¥[bŒ§dDUÂŒ*ªŠ¢‹õ ª0ƒÿ>Ô£õì@PÑJ”´±IM)BUPÄm’ @i©*Š÷ ÑULE4Å$CAE Á ?jLLQ%#K£RMJéÒhÁQM  ¡4(P:) tµBR4„ДQ¤Šp,©…Ä‚’B¤‚Š(»©.AAQ ‹—„F‚EÍH"‚#…‰DUG áUÓTe2“/óôðH1ݹ9s:Ur¨£¹$ÍHs¹{Xym70¸?× ‘<ÉÊu¡Ë¡M”å•'žM”œ,œàíĺá,•‡¾sŽ-P- %0TMT ÙoèweÇ_vЪ¹Ç8Gè¡\©YQÅû£²–L«‹*¸›ïÜ|( N²®E—1+oHŠ|ìuý>á}Þ~ß Ži÷<ûº©¥„ô¨kÒ¢j6û¹Çlá Ùï¶Gá…ú3è§—âÔwž[­½(Šˆ>Q‘PVAÉ(û`Sÿæ(+$Êk#ŸÚ„@^Õÿÿü© ‡oÿ4 à“„  „ à ;¶‚@±½½Ô{©ª,ÃCV¶€H€{¬ìàG\t@è€:¶ÙU*RJT€PU`ìÎÛZª $J ¡&`ª¥i‰P)B”à…“! J¢"©J)Õ´”©R¤ ªj¤‰(QD•R*•¶J‰RD%B¤@J…‚¥ )ZÄ¢@UAZd ©8¤­°E#¶P•HÚ@ AATJ)"‚Rª)B…*€¢¨Ö€DH U)Il k¶¢€‰"H\S@Q* ¤@޲H‰¢ªH ¢ã »Q•Ø5V›¡ÝÄh4ÓJµ}÷uåkA£Bš£Ý„¢¥#è¡„©P‚Hµ•R• *”(U HYcí¾Ì˜©¬ÕbÚ³:ΔÊÃ[-­eU6-µ’«f¨‚¥Bª*=ÝÝ´vÒÝ»YÝÂ5¨€»2´IR7gI§]PØËLM5­4£V»»“¬+¶)6ËC4i¶‰J©BQ(½íÁ{5IQ%Vñëuì 3wª¤¹Þ,ëÅk]vÝí“ˬ§¶hB¢…¬úꪥ= ¥ (PJ‰"­ $QBŠ¢@CO§)Rõ¶ÖØW¬Wç;JÛ+m©š¶Ô’n›¦L#ÓXÉIÉ íªÍ(j£m«owÝ®„(¢Š¥" UA H $¨@´úùfjµ¬Í,,И;9tÙ5²kF­[e¦té­³jÚÒ›+CC½…í{»•NÙSkVUŽðÔý¥H¤~”?T„Ð@  ž*IJ¤É 4Èh2h bÄÓ O%$•%#jL†L&@ÐÄÐÄFÔÐz¤’’©éH$©&”4h ¨€4Ѧš ÒŸ¥I)Tƒ  21i ¦FŒL!§íúxø46 £iS²“°PíRŒÈ[BÚ ­ª›!mTív‹bØl‰íC°Kµ-“µSµ*v“jªí)°l‡d”v’íM’›cb©Ú.Ò—2›GjVÒ6RÚÙÚÙ?ã6xÊQÚª›%'iÚ!¶Ò6Gb.Ò¶Bv¥v [RÙ.ЩÚWj”vE±¡l6•Wi³gjØwtíô9ãÄv ¨v lªŠ;UUvHØv•6*v¤í;تvA²UlÒ¡²SjˆÜ­¢´‰¸ë²šìÓ»¥{×¼.®ž÷¨ÚÖÜÑ­mk6R6¥„NÒCevª‡el´6)mR­’›%l íJí%vòñÉ0(pgŒä¹¯7™}<¬,A ̱p¢¥A-ä.Ï0ÞÙ{¥˜¹&†³¥õ§¡ÃV¢¨®žG6fžàžîž§»¦Ñlª¶m ’­ªÙ'j„íU[m°ÄSµ+²‹j¶#iv‘[Se'j®Â®²FÅl;¶èbÑnZ¯û={ÜLG&¹{2ÑB3,5-4¶:”.e­WiÙdêÉ#²2 à³M‡:°sdääûj=g\wê1 ŽÈâÅ6Gyï]ª-N=zœœ¦<Á§½4‹é·á šºR‘dÕ®!(FŸ«#3Ö³³¡v…mU6 …m*¦ÀÙ Ù&wT¦Õ ÝÚ.Ҧжns8×\ç£ÄF¼±Ó¢º‹¶—\æ”L=ÁODðH¼‚$”43´³,Vµ æ4(uš…Wž®Öå5uJH\¼µ Êóç¡GKö$2ÑGÛ–æUˆJ¦ŒöÒ¤Å"H¢ŒõufÝP„2¦¬(M$ÊÊ71S3¶ÔPÑW%i]k¢ÓU˜,®®TŽÂC"13U*m‡= Ä¥ !r‘t²ÆÄi™˜—­¬J¬ÕM&1™Q4±’úÐ{nQÔ‘ óI4Œ¸Õ3–YªÙ4YLÕÆQ*®jHJê:¡K˜†‹¡…“Ö3 RÔŒÑFvDY¹MEM4ªÐ‚µªÖ×2_˜t*5ËÒÔ O{JfQR.GY20WÎÓP¥EÎk[¸îfn±Ú¶b•ÚV¹´r­©Ýµ±UŽîìèéÑÝÒqB=0ôòmÄ;£Ž'Ž›-q%¥™Tê9«jºþzsÙ;všÁvYlh5Õ;qµiu+2;¥ZÌË_SÝX:YXš[¢oÏloV§Cªª¦W¢‘‹Šv²·)æÜP¹fe@ÈŠÖ_{Þ¹u’\,Æ©ÔËqR!j€õ´RŒò¨Ê% Sªë% ý{ êJÕ¬ÕS]DšVʦ«©I™™Íü÷y̤N–nµÐêÚÓóƒH´Q41ÊôÑ+u¦*-5HÍVÕjg+ãGC˜ &S‡#Ê8^x‹êÅ5-*1ÊL|–Bù6æd…zõ”CWI$•t% ê=],25md4+Y$XieŒé˜_½7®k.tkTéÎæ™›š«W2TÔ«"k«RÎ]õw“®³Zfk³^wë9 4u(.¥E4K9œ•Ȳä•ÄüžÚˤdºe4 !«œKZ´e’Y *5ÕÒÙ†Òî´kœÔÝÑCr”Q'‘Ȥ…*T»¢%Zgyï §z½©U5<”^Öy‰¨.ºò\Žˆ†e¦½c \·QTÒûéÉ€9ù¡> €Ä="%~÷·‰i™J“UOQ½.¹:˜­X×MTÖtj$‘Jâvu]#Òšž•M6irT¶ZY×5ÕqukYHâVnù3ÈÍv«eÓef]Z÷¦ó®jÕ°šÒ™Y0lU§S˜m&•ÍÄŠ‹\””õŒ}nÒ1VµÈZ­yõePš–“J¬«£…–j¦|ëÝS¤k©…‚’¶½ëÌæŸ¯{ru- Š×VjꑉhŠ(eé„”IÎ.•©níÆîÚnÝgmFÛNu£¶æ7îÖ¹ZJ+0q:nbåb}eæºÇr÷Ïk¶¡(š)©næŒ\ëªc¦©,e©†UÌp¼Ãç/i¨dYad‰™e¦µÆŽ´Ôk3tŠbÛ·×Gçí T"u}c1™ªÖ4¦l][5¨ºUš0ÓŒGT«§3SS+[X™™:«EÂ¥•FQ¢Ö4MÅù²‰›<Ÿ”•áú¡åS !ç—' ó´B°Ì… ‹Þv’¢‰a–ÔÖýëÎFN“µM™¥.? œòëj`FeeQ‹˜‡©hO&4}·:éY—4ÁœŠÚÏ©¼–ªWEJ\5ÊJL Ò§±b¡cÏŸ ä¡í»hQE•Ñc “0µ–IMb®Ö¬­dåZå-œƒ…K¢`b˜Ty%F¢kØÂºFšÔ–¹u1„m3]—Fºæó²‘rKÔÛFêêêêš…ŠŠHm¬šÎ)*R‹«]T²µ.­RY‚¶õ33Ë)Œ¢2N™-u×V×K›˜°ë-ZȘSQÍjºWM”áFj1Œ‚`ê‹ àÊ€’È!Õb‚^|þЧ„e¥Ì®k¼ÜÏ#ÕÂÉjÔæ~õ›Ñ[FY¡R VT‘(´µ°Ekæ÷ºÕk¤4ª‹BÒrÆ´jkU­B'‰&Žf[W'ÛiD¡†&æ.Z—ÎÍO-d°ôÈ©P²Ölm8Ÿ«4“B^°haâ"!¦ ›æÑPÏ*2¹,¹ui­”o×¼i¬Yjb³¤ÁÆ,*“¥]J†«AYUÏÞªRÖ“5Kõoefd‘Yçë¤Êð$Ä‚¹ï‡»°­yª¹[nmŠ9UËŽ¸ÄÛh531š™‹ZÔÝ$×.ª\Ô–¶ªæ.ÕUµUŽUÇUúÞ<Ö8t¬V„rŽ]õtŽÊÄsÅöʪB]H‘}­t=*ÄÒk†~­éš-4'[3aªHª¨JQs•ÓB²—$Ñ sR3ÔJžûã öa.fËULƒ69RɯffеÕ,MBCk(ö`U!¤¯$¸¤£MeÖ´*[æ÷‘MsW+ªäQ)d®±dD¹¬V++«K׳{Xúðõ­#›:ªêí5%¢¤-Va¦fM’TÙbµ¨S¾öÛyXÖ¾î·Û®+²p¹T¡zNea.ó<ÖsZzìdUVê"ˆõ+Â&®fT_­ïW= ×V±«‰äC&°Ó}õêcp êÆòÇ’Íó^íÓ»I±Ð}—‡>§yî&ê%Õ]b‡‚Üÿgý—ý³Dÿ·^Äÿ.O^}“5œ®OñâLÅh¼ûǧÏ7 ¼¡.Á;Ç^ñï[ïgEË*Q°•f!A©¥, à…aG˜ë¶–¨'¢4DÏ>—Éì^½èð¹…¾Û_iO˜D÷KЭJŠ ´ÀLqçÌYÆ: Yldž¬%$l ú÷¼åöò'ª ²[•ó­•-£B¾cóíªž… ‚>mZáæ…ð)Î9"Ö¨TÕšLyñ€#|@käpO¼èËg*UètdaX}¥÷¾Mñ}…ÎQÕË7Â|éö(yÑ‘Yr–-S$ØÇœd ȹ&÷©sâW@mb ;å;çÕɤ½*9<Ø•E%_±œ” H©œz³ç £ØºLð¤8Óœq  V»`œ A:Í6lñf^O@y]Ó2ƒë‰ÏOÈùðûŸ&¶E@ìÜ[y»Ç˜ZXÏìZõ3Ö!Æd°`"Ì­nL#¬Ø¹Šéy±ª Ú2fÍ]MA86¾·¼˜S>p>¨Ôï>òûsf1 ¹õ!9q>œ>ó¬Õ|ù4ÓÍêŸi`¥Z¬8Lc"Ç£ÀZ­-ªd99÷£>Ø}8±È(×M¼­Š$óëv˜}‹yMºEí®¼íí"#ÕÒ"%t¸ÚœHÈ\w¼ö¦·é%E/ÑÉíë°™ "ùîŸ$ù)µ‹íëÎw©{{ѽîaÜ` »Du—3ÃZ)Äýæá@G8[Íë¥dfîdóú°}Y›K‘Qù–ÉŒ ïÞðˆ¨èHe QO;$Ÿ«Ç´4æÖd\Œ1ž'_½¯yOš†‰ý½èoNdïËè2„‰j H“¢DÍi»ý§‰Èž)5ò6æÏƒ&|á= OùÑçQH/I¡G‘ÆÞ}&05Ò œ¦ÍÞs° ÉÃÚ7äñºˆ~Ó¸hUZ!R•dÔ™°Äõó•)¯Eé8X-ª¦i¤QCTü ·$2xmB°!ü÷­ll@ódMÛedAçÚgh'Ƽ7Ì“°&oÃÞ8N(Ò¥?zòzÖY´¾bòú÷¤-z³ 1O­²££ÍãÖïˆø¤mƒ.ä©È Òr„kØòÆ;„7Ó”ó#î…;À"pB·½ï*KMÁ汌`žF®´Ð"Î2QªRÔÑýJ«JŒ­…v!7äê"ÌÝ`€^¯!¼&r¤‹ÌEs`¹¬‹ÙiEQdSÉïGžê©»;©× ¡Eœ6ˆGÓí¹ÐG©H]æ.æÎ…‚ÔÚç‰'œªŒ]ã£@Žt¹w¥6󽼈Ã3èºV^$b¨úCM¡1'_´L¶9JŠVÓ¶ªZê¯Hè( å/ok õh‚¬±˜Ð‰œ-+5ÍU>|ƒ©E^|™È¦êªˆûÛÓogÇš"õàà=…G§ÃËœR”MgìFzAhšï“< õH¼g;ä¼Ï*µõ>C;ïo<ÍùóÆ(O¥ÌÉ…jWˆÃò–ªÏ[K†ãÙ´ÂÄkïV‡SIVwŠ;Ï=/ã¬>®9ÏzL°ZµôÖØUTôuä[=#Ù‰UhòNô8G[(•ƒŽ [T#hl©¥0aæ'ØËÞ½‹ö0âúžTÂy$Éç³9Àîž,ݺ¡^¯N:~ûÚó«qˆ‹¼¦ö®€$—Ñ=G·x5Ok&˜^EUsÞ­ëÞ|ÅHÙt¸t?ÄeVÉ”‰ÒÚ³ÖZÊ @!´ìp,’‰ÁG<€N• Æ;š±Th–ifù}âsælcw¢÷Ðg³{ ÓxÌØ×f÷£ÞçVGDÄ)"¤ÑÄœ}>0úó[‘Hà gá°HJì*{ªqyžqZï‡%ï'ŽójË™Ï" Ykð«l‹Pfc¤@§‰æÓî²÷’Ü}¾ñê‡RÍ0“ðä_¢ï¾ôJªNr¢šäIØA H!Eéâšo}ݹn4vª¬¾>Ç ëHj[hS.öðžEê犚*j#VÂÈ€A-¨óSö»³ö”EQOµ„O$j©ÌìÆ —ŸúóåJëŸ7®ð.Hý]óè%ùÛ×KÐLdïOŽAsŒd|fS‹ªn)Ö `r`ލÀ6PW7*™é'W¼]ïYçAd2 \òG4X”ðG©:4gרØÕ<£B„0Üþ¡SÈ(ãZ'(¢òÖìвG£¤ð™àÏ«8É£B.DÌt´AçÎCÛaÔ,›7œo_{y3ííÜ5Q„4ܼh³Ë.Gˆ9§Þmì`Óï{{̽(«©]½Œ4gr)äû¯_{sê[”<™×Õêñ—XnE ‚¢†vc“K ”ŠA¶ª*Vš+ž\¡ó¨S¼¿/ï0c4e{b1iO><‚¥l5…ZÏó×bÞ¦FP²ã¸Ä}oú¾<Èl\Ê Ïè°hCm´‚'ÕÚ{£}¬"x¤ib×ÉîL¯xrõ#NûÎ|hñœyå/zñ4á3v#VKO •%VŽÚØòd¨O0,ç:”XÏXÎ5¢¡µ‹ÚÉæTÌ$%£çÃå>¼ze`œà2ñç©G/!?/uÛíó&´éô;SíV¦\ìmë©);FôÙŠW.8÷çÜNoMÞJ× D¶äc8;ÎxìYaÍê}ïlyÞ0dˆ¥Fw±IïO™LË)Š­—Z®Üã18tÃÙ,'₯R†`%äˆ Œ¿ÂŸ›9ÇF–m Z·êÖ›Þ¾‘¹´µË8°äx› ÷¯yÏî$–É»èÉŽ}§C32Ì+kFGæ•©â75±5TtUù¾\*ÖûÞÓ¤éÀ ïOZXÔDTFYé>¥¬ä¯8^|çïÇ—ÀkXïLsгzrü}ñµÑ¥N./=× ãÞÉœÖQq`Ë%(—}z¯ eПXÅǹqy¹Tó57¬fDÒhRÈÛ>ÑžÞx¢°ª'yú¹"A̼‘×F#.÷ŸSK<íjâ’¥!$ñ=O86‘ÏH½æÑáÃÙŒ=ut"ä%µä¹#Ö™Auz`ñ–Ì@³ö¸‘¦£iÿ -RE¤Kíw˜”BRÀb¬ õ®þëcÆo«0*CzØö7 ’I2Àò`ÆSjˆŽ76!*Ñä½kÆê”Qm¡ä[Í‚»AdÎi v<¾Æ†Ú¢LyŒ+çÐì8UÞõâŸy2*õ3^p¢ë‘L›MÉÞÑùÞóé=ëÝÓß1v>ÐŽ!;&’¡ôg}}‰{ßo*Þ0‹ÛÍØr›ƒÂQhxóo*kÇ“½c“ÖËæÕð[k®øPm´HÂÕ#4@ÏÎ|¬ßRn¬h×´3.cfhÏø±ïb~¼o<+Ï*yªZ$ö©KÔ Š­va0e³‡¼‘ˆ¨…)}ïc—ž|¹ó³ç!ÓæÀ¼ÁŒwÍÔkÞ÷·9Þ«U‰8#(Œþ<UX¾ˆUpZh¶¥,n 4èZ<Öo]åñ˜pâ,"ek£Ø?½íPzœ# §)%ûAˆÇ‡­¢?Äò#9Ò9hyUä^Tö,h²ž·ø¼˜I‡Øùt÷¢•ö‘GI77¨ó>XZnHæôgœ$*†M¹s²³®”PÂHƒœÛb$^„—™K±Ž"^/g6±ó¨ÉWa3¤zXCÕžJèG™â×›À¬æSU°s½íï0Jñï;Æ©uÒ½èòð/y·hŸnö.«—ÔUä¼±,ÆCr)½ïxõÛc¯í[A›œ–Decm„}¥ìÐ8ÂŽœØ y¤b^vó½RÆýo}‰É}{Ëz£\d3Õ±Ó‚øt¹ß(Î¸á ± ð#§cgØö¼,áÑ\^z|+¼¥È¼ ÄÎ~˜\ÚÍÂGìT€¤‘? <Ê«Ÿ‚)ì&–M§-ô½B[`´D1g¼Ó#½¼˜jB72¥I6½èS£êWµ·6*Pæ@DìŠ Wäü"ôQ‚Es:GÍÏd‘m Î<é‘ñíä]åÒ8{Ë2ÜùøˆWx Ù;â=äc)¯:„f¸ÆLÊywÊ)¾À¶6J–~nÄR ä°ë²9£oŸŸ¾EK¡Kì€BÀI†‘F:>½i É*8N}¥ê/’}wœÂlch»ŠÞô=<üx™¬ör€»ÂuàȾ¥ú—Ôч´ýO×{ï"ºôO6*Ú0˜£±CˆKµLQ«jK6 >ÓoðœKFŒä#RgçÛØL“ëØºO$ Œ6,ßž~~¨ž«ÞÁÞo*žóVgÃ/asÞËp£–ƒÔÚ|ûÞ _TÏ>„<û10ûÞ¼9_#²úQ}íyÕ Qíl–¤LûxfнñÊéæ$ôZºDµØ ¥Mê'Ä}}÷Žø ci§*ÛÞò»ÍÆOEG´L)óa†¥ðšÈ;õ­}h¼õ‚õ†B½oH6sëwžö “ñùÏ{b0_¶41ú¦_½“ÏB÷žDµd®»@šï>\ ò{Nw´o9 …˜ÄpÐóï«ßkY €"÷Íäöåfž„¦‘½w­îûlMß$Söù÷^ƒP\¢1'Ï­ ôÕUÑä)@ÑæÚïUÄA­ñ½äóâч ¯VÆ=„½^ûÁáŒÈ‰Êšº;Ç#G·EJ§¶ÒK žÇæòªz+¾[p`ô‡:Á5àT'†ÂÛ@¬þ”U–8›#Á•©Ç ª`«cM¢×hؘ1—¬¾ùÆrSí ‹½AƒìY|T5Â…R&q‰–þúíäDŸÙ>/Ÿ‘œõ¡|E<ëN%_¯¬*TT ²=‘TYâ“&H]²—._6üòûº7 ¦¤Á–¡%mwg²r‡Þû¯:ÇŸJ†lƒ¬Š¸÷®°Ë1jGÑon’‚ˆ¦s§´nS3Ì4¹ö$ó=!ç¡ï{¤qL\“·Î2x‘l",ÖÖHl¸U÷Ï{%¹é` ŸsCŒK—RoWAúûß}èP^Lœ<áPæeÕYǽâ b÷kŒU ‘£Ã”=ëö‡Ý/)ï®¶s‚¡'”J`ô®2ÍÁ§—µ’%Êû O§>†ôìïrñfh£‘’äžØR­ãѵï4ùBQ¦eLj»*õlESÄq&6—×O°©cãzôR„´ëÇØ_{½&vKY¦Y¾~Ì]ï."Ö=^“W×{ ±D¢!ð9Ë]ñNZÍ“yñ ‡´gÏ}ÖÑUö}gõ¾Å—ÚAÊ€&S«`käSŒ_zÞ7oz7ó>ºï“G&~|˜nUfJÈaWs4DÞÕ»Ç÷¾CÈz'‹„›G»p­õp±“`/ Z:_``W Õ“S²Õk¼ïxÆñÐ@ yÄYó{;*ò†è”dÜåBu‡—ƒÆ}4—òÞùvó¾ox¼o8o&ôG²q¼Æò¾Î4ÕO‹Ú½;*à}q÷¹ë?7~}ÈššýÛ¶Ýö3½ƒïE¼§_>=Þß ZENiŸ:ǽ{Šò!{\=½RÓ½ïxòŒ.–=o¯¦‡ÈU&zãÚ‡§!“—Waîì%Ô½þOcJC!* ¦ß7MžZn&›BvŸœv¾¶ù^>îIQGóÝå¯8m½]¦Ó?#Žýk¬¶5-/§,”|ÜÑ×Jwk…õ£5éqÁëïylGKŽŽƒ^¢“Þ-y‘()á@MARµƒª‚-ø÷ŸD“zš7›ÔE¯k•Ø„ùg AäÈÓU*ú­=O#Ѭ©Œ²¢¾r~~“r«Á%ßAÙî2 Ø×™ïT‹ŒQ ³Ê(“Æšó‰»eüó÷߰ů¯®ñõÃõÁ= 9ù0ž óÉ# ääÊŠB¾ùÞb¢ÛÊåþºóTTlZü¯çº ó­?ŽÃ0q¢P«…:xYž¹“¼ÚO»ïÜÞ÷l7›k•y¹¬o8räNíys^QÊìî3Ý&Ð(ñ%KÝ='.Ù[§yÝ1Õíã»8ÛU*æÝÝhÒ]Ý’ór1W–Ê î“—¿;<ªò)é ^ÈdêÛR’T¦®'!2œ‰›Éçõ9†z[™–¾tØÜ0rqZ¢#FÄŽºa¿9œÏÓh8æÜM:ÐA°v¢ªé}¶š'àRÁÉ^f’ ZŸ‚6ÚF‚"©ÛTQÙ* (]æ)棢Ep¢‚©ï]ž,ìoÀ…Ÿ“晜à*(¼È|2ɰÂñª—Ø~ÃHm0>ÛÆç=ˆê)| nÄg•j‘€ZEê*ÚMôÖ²y5Å”7Ë2nÄ™îÙEFЯ;Tx§:{KÚ+|Ǽ?Ÿ{xÕ÷¬ÈM&©svzB[ è!ý-CkgEÞÈôoÀAߢ٬ÄÎÅ ÆQ£:  Æ«lmKa™DtAs•?‡À Ò#OçñŒß„'Ý‚e=I V·Nµ+C‘fxôG…›T³ìŸ²€ÄA³µø†›º& ¸V²'æÉ6³ÀÐ,ÊÏòY.>+è¼ú¬FõáÎõˆSGݽÇ®`œPžƒøwe´‰Û54¨Žõž¯ŒÏÓ»ªU>MÌ5ñ¨g†]Œö®Ê†ìµ·dÚ*¨i¯Hõó'Ù¨¨' Tì*|ö®;­hLòØÙÖCß°c û`ߘ$Æ‹mýâþ/NäòbòKmøw‚r¤ÔŒxqQz0a‹çÚûí´¢}B£’us­§=õù´1¢0zaÑz¿?Ÿ”_è‡>Cï<À«)4ìc ‰ÑAKµ±5£ˆõhqLéiOSÕ6ié41­¦RÕhÀcúZ°Ê*Ž=‡_/º}Oìʘ®4#Ó;Znà¨ÒøOŸ™Ó]ƒáÎBˆ<Û‰ø¤í²ošëÒs£,A<Ä›q´¹‰é"ÅH ßŒ“c!–õ·`4SãQ¬)ÈþÄÙ2. ";^~û|'žDÔûöÂL?J:Æ¢­*X¯¢q¤éÎÄì𬟬Cµ_¼ûÇ™ $üþOçÂ}t´Á2Ÿ›­ý`§Î+tôi3\JÀújTÂ?£<ú'øãáS~œlmóùŠ´ÃÇϲ•žªÚE¶:ã~†!FÚÝnm[žÖ?g„õmåöQQ¦ÝùÅô’‹9,–[­«õwÖ·  âù«‹æÅÑ5>|Ú¢4 ªxu»>>¦“Ž©€Ù;qç½@›èåa¨ÕQ«µÞ͸z»ÖyFþp%Ðw£½!Nñ]Û/µ d$ùÀ(›°í²ú¾àIé]]uý¾¿göµ2K&Yò“End"¤NKÎ0š²&“åVŽŒ¨b‰³‰KhIÖ­¨Dó÷ÎÄÌ÷›MØVQ ‡]4©lqÉ"(šoièš,gŶ6zyÄÇn}\øÁÈKÎgc\ÜQÅ~ˆ4 ‡eІ¶ˆ+‰ ÝukAÇæT´‰‚‘Ee#¼ª‘¢úÚ«¢‹«×¤Fì9¾oÜÇCmæQôw>vkÊ ·Qz7¬Tu5Õ5ί“°Ÿ_ä{Õt×ESiûæÍ”ŒM§µŠš4#Ü5E4—¢i‘±û7>ë+ëhQ¶H_›Qã/¶­¦DF)æ¨$t ´¶3;æ53àýüûÛîýiÍB*É(§˜û:6fšÖ!—èWrÎ<Ö:î«›¤F-NÇ[{é¹o¬§›i·«R¶4!céy¹eR[‡®üîìÄÚµ…IÇn'4O„ðÓÑGeVüKSõ)‚G㤥ŒHc±¬mY'‹F‚~NHık3щ?89ÃVK}ÍugçÔ®.eQ•ú:ÓE"lÃŽ67¥ž™?§¥_FzYBõõ´ÊÈÏ1ŸÖf ‚è­GWjôm¸fèÚq‘©n‹d3EÑÖî•è…zm•W¦€7KÂÙUˆÃœ"ÆSÏÝmtÒZBf“•è7E´µ¶£r@:Y´ë­aõ½´ìÚ{/š±ÔÓ’|îÒ{|îÝÏoT6?/¦¾nªÕrçª;ÔrЦšo Kóê† üŸÒÂÓ=¶F\ÜÞ–&¬Qsª^!Ùö~Év]Ö³3~¤m'¹i â&²„çÎLáZŠÅóÇgLDÇq†%˜ÁIùþøý¥Ïëƒ3tÙ~¯S* ŸÑ‡ÍìœLêýTCúvùè¾ù¶Ï§¥L¨mùÆÁ|B]½ú5~k¢u æØþq¶(£@D w×/“vª#ãÛ·ŒôÌúBÔ¤im5ÉóU*{Z'clú²¬7󊰯žÞ±å²+F߆?21jbº'¬Ãm”ªqoƒ•?YI[µûu°jG•—éÒ §Ã£_$&hO`FXÜT@«®`±FÓNÆÌ©£Ô°±°*"(6ˆ¾¾ÝµTP¯e'Í÷ÏÖ¶+ðF«Í7ÊØ7OFN'1^×°?´ß{š‘žÑc÷@AöMSnžëŸ ´‚qG@W9:RèEÊ‘N¢:¦—ƒ•Ãjšßvv7ˆuËe®lž—·}ôã è”Eh Î_]MÕÎQm° Ku_4FìÓLT3¯œ·KÝui>ŠpºaHååï%ï{Þ^_¾¿%Ýô#Ÿ—áË5üÍùï¢ÒLWT§¹¦™íÚO¸ëœOŸ®Ìž3‘Ãæ¾û—s­ˆøòÊ44{Øb)§®j–¦¢.k?|ß 6™áÓ› {ë a3 ¬‡=õlyRŸ1ƒXØsß‹Oßz(™xà&Þñ?ì¾%„’g âúªo GŠB1B‰ÙôºÍ>+z ?1:“Ùâü-C 6±¾Š#á:þ/h²Í3Û(ƒ!Yõk¹ãÝ´~b›@F5 u,ÍFB¿—ï}É¿ï*ìáTQ7­|Ýɯ8¡5Ž']Œõ{Úå0ˆ´4y½m¢¿µ™¼ÔôaX@žôôl«ç8ùÏ{ʈߡ8¬„B_/Âùh£BÑÁ?ˆ ¥¶–?ëR;T® K,hry‡ÒZxiÁ0}Pæ÷ˆSÁè‡cCD±-Rxz ²—íð¯–iù é? 3Üò ZÁa— X‡Í5Zu5#€'¿T_á4r¿A:Þ~/|¦ê’ÏQCŽNDÕȽ¿zöÏ—óéó çAVï¶yƒV9<äÍÁ¶­ÐÉúç £ª3ékG÷ÓÑ+ôù_|(XàÊ." m¡žyÓÜJÛi‹DÁ9¬uóÂÂÃÜyCÑ«‡˜  n˜Â`x<˜¨”+bšQúµ›ZŸ0y?·ö=°eì’ëò¡¦ªVŸ—2Ê€ãá©b@¡ä<Ó§ ‚”T+4q€ý¤#G¤MœzÆVýǨߚ!E¹¥f‚ÈV4˜ÛL§§hˆÖ@.)ëš|z¦÷¶<ô:îH´:2нšX‚V89¤Í£-µñ˜\b"ƒ±"Éé\™éžubë ¾P1TßG—cÕèìûÍ<^·7zò¢¢¨Pò‚bœü›’Æ­*žž¢4x*b­ªI%µPg“2 D#k^¤ö8‘Ò K±Ú6}~Рd*ò›ûtò!“E>äŸœÏ Æw¡(=‹—Ÿ£ûGýû{Çš¡U'ˆKù¸Éó¿¢rïÛ™û/)óÕIfÂ/†—1O¢C* ¼Ì}¿n/WÚ{³Æ{¾ñrùí¬÷I ñù ?$÷Þ² VNÌ} yáxí¬÷Tr„ÛõÀL÷Ï ÙýCE¨¹±­Ê¿ƒQårÒF·ËWñW›æ¿6ói/•åyókyoÍcn`¹µ¿Šù~gî¿9j{¨Þk—›GËÍyªx<Ÿzòw^ŽÏWÕ]Çò ÜeL„™5ú;ç¾»ùÏtÃÝç§ÏH}£¼žWç9Eïä7Õý×/Ï'yí]ù9þ€‘{¿>{”“äþø¾Oäü€§™8üŸ9 è õ==ïÝ™ó"÷ÏöºBL÷žƒçvzyÆŽû¾:úºU?I»—¾oÐwöƒóÓÀ(ÿ}ý{Ï/‘g¤’ú6bîäeÔœU½d]¾.¹rd3çÚ*6»Éí}]Vý>|(, ÂXÇ©Oseivó±ù?CÂ<ÛòNIE3RÝLý]µž§)Ú¸~¸Ïg²Iòî“Þ»=øI“4ߟ–±1œ¨ò¡]“Uï\×GÚ}gÝítðÌrž~ú´aòr‰©Ÿ“>aœ=[NL=‘BFXCš÷h±è%àðÜ=$j%u~b®uªA?y‰Š)JyskÔXZ5èÑOOŸ¸Eç=Íð¸÷ hÓfžM©ôŸ}!ŽÄ­ ø(¡ï¥"t‘®Í`±Å„TÔm*1c ì/f6zMÈ.‚&‹É9» {a¦]µ÷©b[ë<­ch½yóðÓã a”÷ ×ÅŠAÞ>û~uÚ›£ð1©sްÊѪkYÎÄÊ¢qaqîæ¼Û2itgœ$Èýãæ¾ácŽaC džÓ4ˆô9Ú FW…áuìl@úÃÄ–¹QªÍz1êy£Ö8¥jTò>ÂbmcV**7Úò‰è…=zÙGÊQêm^¼¾#¿7Ì"Â¥öíêg"ö¯n˜yˆŒôæë~9­o×ÎŒA'LƒD玲dx#%®˜¸ôù0}”­¯³Ÿ?bV ÍŒ¾Ò! üØÔŠÕåÄ!)ZJô+¶§¡åE/9¯žþHøh{ã7X›8bSí·˜¸ËŸÜù`€IÆÏD×Y¾2ùTÑÁ…­3©Ld! Ž‚ç TmÁ¸§ˆÔ)^½¼ SÔQ˃óøïÞú§(ò !Œ†¦ceq+¼yqÆ0“§m¶ciNiC7¸MBsY;šº˜Vê°@RZE>gGÈmóP]WÝN²QûÌ‚ãhf2 .Ï<œ_ c*Õ8‘÷-úå_×£û<ª¡½)ûZ*†4%ÁšõŽO²ã{Y6ünµµ5bËáüyž@¬;5{˜-ZßM°*îÛ ŒˆöNªg³{=;«)Ä+“ŵ_@B–ýNšË/_j[½ôJX̹u—Ðz”ûí[Ùâ¯Ñ²Y1f%mºÞV9ší}«O¹+sq·›\XÝ DÚZ&p°@Ó:--©É3.ŽSHç¼ö–´|\^½Íªb_73Š#ÌT^Y=Ù5Õêâc‚M!ƒi¶AêòDϳXðOŸ»<"ÇÅPhcÒLÔc­„¾òF^|RÇzì' Å! ¤¾+#hù-Zi€ƒÑI‹nvªùÈÑH›L!`ã”Ï^î‡Ì-8^¥mCMï§­h#'#Òz14q>OÔ#êåhÒ*adëNó‰ÒìÛqá67'ÁºíÞs?“Ãóë8ÞTxH1o–÷TD<$µÑØFÏA¾Ú8ô‰1R¦ÑPTVª¨]šW!¡F®ªÏ 1ÞÛXýôï« Ñ#š¤|[b(ÖšÝΚEc¬øÁ›9úz5‘L4µ§m0•Í'&—h¢~ð3{Le¡›d­b˜ñ›!ÛGÞapZò¶õãPçÚ Žy™‹¯kÊÇ!uiŒ,H›C­²®8}\kå”®¨Ú‚adB Yî$M&«Oæ¤ic^[]Ôñ#Ô­B¦EUN§Dä#èÈÿ4ü¯äB½_–{_‚tMo´¢Ayú˜óµJŸ¼ã|Ò¹´|aFÏ(ªqE8ò±BÒ.ó+Šk–б Éç l²±–À%â«_VEbáyÔóÑ·\NÛŽŸ|÷5ÓíSB±©Ïßf ×1¿!R*6pÍ3/ŸƒÒ4ðüF…«äzøš8ïDMbtÄ­D1¦ájT¯'0‹ïe[Å9Þñ½çЈAã+Yb\oš9¬#q£è±P€)-QÁCèîÔ­¯XÅÅÖtå5¶æØ!èÛÍY³¢th±[+ªèɘs—NÍ™1M#iž*†ƒ„xsëD²œy¼?NŸ˜Ä+¼gÞ°'lŒlÙÃìú¹}»©º<踺D´Ä ¤µ Šôš,`©ù`­ºh¡oÚÔ}÷_Zp~•TêÞCûhyï×"‰÷æÏœ‹ÇŠ„mHÝß^§´q‚{²~­V'[æ+ÕïgG±•“Ô¿4‰ïy] ^¶ ¶GÄpë¹0R>ùûá|¦ú¡Ù VG«ŠË\'Í_#†8–‰G„4Ý|1Bçk­¡_®_=Ýš†ÎÖ¾®£æÏšíôÅ\ÙæTA#La­æHäR"Ú'Úˆ¡ëz%Á4”rH€òožÕIÍ*CuSžPÎóM TJý.>œ^çÔsf±t‹´˜î¬¥aàŒ~Qܾê^ûæ§uùJäžçj=g³aFÚ–©E éI`!M¤ó3²ætšýYÏLŠ$Æ"¿2áŠäÓÌoÏ¢‘CíDήÅë>íiÜå,ªAœÐÑäŒ>Mó÷Å>¢½‹äSØ6VæŸ>^áqètd¢êµ~qi“O_q{ €Uö×½>n¿b|õÑ´›äl°ƒ‰Òç¶·F)„Y-‰8ÒîvóëWŲU–û,²"v»Ÿ±ï»(‡b¶UujÂÏJüö‹Ü߯tY[eômQ©Š:\öŸ;Í~¯4ønÝÕ²·Íhú L~9¥J#'¢ü$Ió[¤-´Y±‹éåg Jü×X'"ëîz €] m é –£í¹ãtJ±¨Ð «þÁõí¤÷S¦\öÇ÷Þ•Ô˜¢m¦£ÅÖSl£5Üb)›aW¾¹  Ÿ¸Þ;(¢Ïêøøª©>”÷Æ`<ÞjJà‚ b.z·Ìañ²¼Ç¯ZçÐHì`éõ³¹Dt„qW¾{>“²ˆ¿I3ú’(œ,Š8ݳ F|ßÑIò~çÇ1œ˜}*ž/ž÷|äɇŸyã¡"›oäB5ô‚5оjjÚ+±€Û+ÕÑVOCšÕlê®E*lU ¦6-UM{&ØÓ²ßQdäÞŽ D§„#oaò>›}v÷‚|Âß4õ™6³VG¾Úz•Û¨ŠÏœ9UE áLùü^û¯ÜÔfNS›­ý×­ÌJ:>%aKEg™æñ3èãÞ‹â,Ø ã$Sˆ¾U93¾¯Ÿ®Û6¾5§TÅoyOfÐÇlð­Šy£éi?Vy¢ÍêN®ñ«Î|Ø×¹¾Œý ‡…þoÎÃa[G ¼ßM;;s²µrAàcy¸-ªÚu}2²€ÈÜL©û^{k”Uëì>w1è“G«`ÄÒÚ(#ͨCŸµ“Ï5«j´Ê' ZÇUgŸ˜>A_ ?« AhôróoßGµ#_ã"µ; øcCm¨ä‘ž»z(\êoNÖJÛ<Ï& b ¢úkf'H|«Sžؾ©œ4RN‰¦?6óMÅ®BP®Å²Ñünîé)âA7Õô|Ç4:‹ÂGâÝ5TúBH»l1ž<G;ã cÏ6£m"iÆçÚ5#©õž¡ºQ'•/Ûu}«ñ÷”Õ}u®EAy3 -­¸›Ž)ÏaØûç­ŽA¶ ŸF‚7îŽ_¢ë…#¤UºÎ´õÏ6ÝDCM|2Ž¡ˆ`üýdm·¦)| ´ç'—«4Q¬ìæé Pú'ÌaÙÙ2µSqøú*"ɳ{NÎ7óº X‹W™Âg\ãgÇ=× ‘¹Ž¨Ñ §›v§í9í¾é§ÑTǗ–}ëÒe¶Òm¶!Â5.’xsBÔïwTòx§‚ëÎõæ[DÛ/¡d*‚}šŒð-_7ØÏ´‚"ªÕkTVß¹†*hiCÎNµ2‚€‹æŸ6¤i5¤ðqì)‡­·P#Ô’ü™t*™ÈaÏw¥¦’Ï€ôFÍ¿¢bʼ*&´üÙ‰5—´µNoÁ[H@ÓãÍ<—V{ó”©Çš¿}°Ò¹ó¾7—N"yÔüÊv~ `l“XÂX_ 3~6W㺫Òp ‚#ã|Kë„Á‚#­1š­.>îø¼Ú~³¾°BÒ^åôïÅHù´˜‰esZ"°K}úH¦Š{ЗíeŸ[ Å K¢ „ô6MfÙ…O¶XWš;“^Õ³Ñ ø‰¸˜– ¤ùü_„wJ{Ä„J!_z ¼*.ÓJ© θ¾=F@½Çµ²F’mhWb±@Zäû2éèa‚L_iE–i´‘K*6ž÷–ƒÞcŒ‰¯¢±›&3ËË?~rWž_ÉÛ× d'˜œ<º½N¿2‹ñî¾j'Uë°Ð,Ú†í𠾑,˜Õ< Ã~бÓs³¤=$Ûôð½'IÙå<ã×z?¿½Ù'¼ñôÛí®ðXÐø<Ï'Z_ò]_ ™àшTõqL/m«6±EäÏyˆsǵLJ²¢cÛË]•ã"ñ Ò7åóyFûë³»ò×Íowžìž{=Þ}]"óLSÝœñƼã¯^|ª‡É“ä'dâN3Ój<Û›WñVþŸ+$m¿·åý7åbß—ô¶ß– ÑXª‹¿_•¯5æÛ•cl›9µ°6—ayàñªfªÚ6Kз6þ*üÛÓF×Í·K÷»lhøoÍæ®m¼Ö½ ÷½âÚ"ùË%¢óQ\ÛXÕ{º×/“àúŽ?*< m|óë§.V¿’ù[žhÞs|Óݰ|‡<r~‰üòÉÃôVÇím|‹%žw1Ï3ùÜ"¥÷s|Ÿ=ÛGPÊ“Ý3¿GZâNžñýw# Ñ_5Í!‚«îuÝÑ'/æ¯öNÏï@fE?œ•—¾õ|ù¢.|×)4›rÞqWô×yÏç< ½™ïz !ç.%ïµ÷ëuõÍMšKêÖ<¾­Afÿ&…O/SØ÷°}z¡´ÏƒRWµí‰ASÓ²jÙ¯È/džü›×d÷£¤ö¶îÌñÕËØ;díá}GdñѾÊ)åªÒüþ8Üùž¤ÆÕÓËÉžÉÒzî îûÞù0Ÿ;ЕÛAŸÁJ^¹ÀEù}“Æ þtÏÜ%|'z îÄ^·À¡â±´}=©í|G@bLIóÂTäCË çÑ^¾†±Gy}h1lÓæ¯ häè©VMH ,$#謽bƒ÷4ûZqû¸hÄo̧ Ûy“_R:6ZoFPó!Ÿ*D$7àHz•÷YpÐuŠrèß¼ú‘G‘T^Ž#æÈ2}¾¼)S×Z®è€<쉑¦­[@Ù`µÚÉ'N³Ó6 46úË‚4æ‡h ˜ÏS 10ùûl… Ÿœ(¨ÍêQAd‘-³Þ»ö:C!sÞÆWÑä¬á’E?‡ðþç8ô)l*TGizO¬:Ï™D$˜x}öÏרߣ¼z/%ß›K€ÍÁ€ÃNÚS[ =zÇšv|uǤú^OßÈð£Uï¾Z6o¾«æ<|Þ'uî¾ì)p¶wšsMšÂ9Äy }õžÍ,.¤£‰èë{غ¦ÆÁÄgT7èSÓìµUÈ62"­ƒkÝžú>µËîx2^«ã·EÏ”|×uQ‡DÖ;4¯{OzV–‰ø $Þ±0­ ¦/±5 –J ±X¤ð9ÕßHÚ¢],r¸}š´tJ€‘bnÙÓ·rFáw;Z|ÐþùU¯vQ奈¯Ô+mÄØ¬“IªÆ0$~SÆZŨڔR¨Ø˜¤¹U®Qq¸õ[¶ŽŸ=Ã6{_|%ðû}A}duª(|8ÓÚàùÒù¿>a¥˜{)™eùü+ñ÷ˆ¾埨¥z:†2t‡5—6"G9bè‹­µÂ±+=-ÀÝTöa÷5ٹн&Š„‹zD¦R;bÃ~*‹ßivZã¦Ônˆ‹ –¹ûݱu69ZùMÇj“žßV­ ¡A¡ˆbXDzM-®¹ !3éí®¨!±†@%O^~Á¡ U–¯z7Ž\©N Ô‰vôà²æ8ÓH¼E:IŸWCÃ=R¦öçõÓŸÀwÜÉÅp¾Î÷» Ñ·˜×wÑß0Bæú¯ˆ›vê n˜Xî,ˆ‰¤DÙlŠžúÀ£®,CâwBKFÚƒÖËîæÛ€ÖÄkã|6¬[Ýyø>טmÍ©FŒ.—7ZphÎæî3¾/6 zPY:õTyµ[%‰>Ϊ´¹ì˜‡¢ô Ó¾n?—ÓéöU7ÒÞ§„'F@~ëë`<‡}£Õ³Ú`S8xF(³±ë“•i«ª‰¹¥mÜMls‡ÃßܨÔ>? 0‹H¢úØ¥i‚em:¬WÇ“­5kZ£öiASŒCˆaþ$ \⸛ç¢tUý@z½Gqè­”ªB©PËn"´ðª9¶R”µÌý#Ñ_´ª$ÄMô̲ÇGïŒ-÷tÈ#Lö ›„M¸M€Á•­ãÕØÎû`}}—YH¨ˆš¯Ñ·³×M!S~WÖ94˜Í²E­ó9Ueõ‡ny…9óSéÂ|[WI/g«n?>j#wŒ{Ožîê@$íqMù€ö„ÕO[kNG,RÑÇHLoDWd‹æ¢×¢úš-wuëJß©`6:ÒŽMx¢=Ͻ|«@Ó ³'ƒÔõØ[íè-“ê…dùì†Øü°7èövÜþ$¼ýw5Ô—4õU­$ ‘Z5b¹V–_M–" JLÞw'UŽÒ’«]TÔ‹)|@j[éèìæÈBË} /šû»|-ómF˜§G˜éD'“gVk‹12çj¡h¥²îÕœÅ8¤èá1¢¤­¨X†ÔBŠ>ϳ ûyÁø…®µñÅ;C4óÈ3§”q-e暇ф©ÏvÔˆ¿;D]Yœ(¢ÇOZ†Óe$Ni~mº]Þ€(»·¶íÒ Â4Ð >ÝÚG4ð»Í89š·ª5šÍ;]{_‰Ú¸uP:wfa'Ñ‹"¢‘¾{hÏBF8‘g¾f)ˆ.·Yì¡ÙâuuMÑ,kwG4½eóiŠrxF­·Ý;ô.û"ø|6¯‘Öô†ÓîK¢óšäàÙZ†çÚbêüà<'ß}¶ùª»éœŒ#tœV6Œì}!3Ñ·Ï6îtÚ0™~2v·¾”¦ú÷ɘNI¤µ Ƹuöáò|ù>–Áô•°èÁNç YÖ#6›±W0‹êÚ,v TÛç6š)­s,Üõ‹:(}Ý–æÉîΑ§·¢¶3Ä]l±ÈÔ=§¶öÊ•£ÊÁRz)\!8¦GÜþ/ËœƒÍJà»-a¶5ÍðÊøžo Ç]’´£Ž»S®GFHÅ©»~*ÃÊ &?¾ûof \)ée")gºy˜±>|D ŠÄÂæý&›ë–ø}Ñ4Æ™Ìtµ3Çij°Z(¥ž™Të­vÕŠ$D/}³ðÃõ{èRp©Â£Ê§*ÆOÝ®BO7.íý<0 ê0÷ÑoØ·\ÐJíeR < ™\ö® HO «]ÖgÍ莦© &ØÁ¿1ŽÂh¥Pÿ3ïêÄOu}çÉé¥%~ÃÏJCwh{q÷Êß­¹#O5­5SÑH6ó\žhÆ>ök&þ3}΢`VL£tT‘Ñ]<"¾¼™‘y×xG,U4CÕ½Ýè…ZÙvV6ØHB¯Ïg„ñ]r¾õŸEë¯gÞSùûæõ~Hñ@(‡˜¶οY)êÚóömAH¬ìTQl's‡µR)èÁiiÇ z!ó4˜÷G9iê¹Èëxéï¢kæ×Âø·á;v[oœêý _ »]ؾiŽyônAD”oV¦Þ% ˜KV£YsщºDsTQ²)óf÷Òq§}g®ªÛ$ƒvE%eDu¬æçsWµUB^Ý”_‹·ÆfÚgŠp¢b}ч¾ŸF†Š[#`þB…pž.Î(ؘúÔ´[=«T´ š~†6"Øó¤ÓÔ"íQ€:5fõ‘sãWÍ‚3I‹ÁÆ!Q1Ƅۭ;`[E8ó˜âñ³g£å4d›n!³VureÃ7EÎëj"n ªÕ~‘WtQÊÛ,¤Oï°Š.áýSκâ_õŽnîäV™Eôú#é>ú¼¤ÕØÕÓH³ìªêÈÜQ¿<8^,õˆ‘ô"WÙ]ôû”ÐêŠXû^”Y,¬Lͬ.}&…ÊNjs ôL i+£m)OÃ#·ÇÜoçŽøÐâV‘¦"4†áEENÎÞ ¬ƒuŸKÖbI;…”Z»=›æè©šO8§'…‚Ø\ÌIje\õç3\füs³ÍsçpôœKZ~ÕÄÛœóy=!ñûç{”ð¸l¢UJÙ oT„ÃÚkqˆÌ¥ŒÅ‰‰°q|«#Úz^ùãœB}–3Ï!iT‚lõÔŒoÐNZ^îžÃçÁ%•gnh®Äå½ZAOAVË‘)=páõŠ üàT4†ùÏHðÜ‘9¯Æ+#9>o>Zˈ¶×‘Ü;™¨H°ëGsž1-lÚsQ;…/¾Ÿ/ŸÇ܈¯ÚNÏ„¡ötW>FC™Ó & Ò:öZG#F²©¢FÙʘNݳß(ó_*²9ë¶¾ON¬×N}‹Èöh)ŒSvìß<A`ÊLɨ®ŠÇˆÙäЖä(H[UU‹³a÷1ýóóëÎo¾øûœ%ú)÷Ó¾¤n×]Ä^®¹ É-Ú¶"äñuƒ\w¹Ó4w )Ö |éIÑÕHº¾³;£¡Z„n²]«Ü&UuÛ”°’k1DJõ_SíTÑÑ7í"Ž|Jš¸j^©Vܪ×ÑÒœ¹ T$âÛ•uóhï:œᬇEcšâ ½hº¾ºrú¼]Ê*£ZXÕD‹Xþç«k¬«í¾•²u¯‰•ú¿…}õ:lõˆÓ„&)ê}~¼=ë÷Òí·¾o¤8M¹'}Ýê P~no}¾äþ±mÔ}w×sMçÔh­9±´æ×¯9º8… šå9$.‹|5ªäp϶I´øêß}§nÕ9Tñjë_HŽhÈz§Ò(¶±†íŒ²qrh¼×Ó·e( ¹A²š)¦‚7Xzüäëi>Ÿ.]ÊY8˜~(¦ªívI½Ý–ÃÚ§Ç7ÛÎòµ†ö¨r|ã¹eîdvu¾:íǾ½~å'n³5zí‘6‚-$+Ôs-ÇãÙçÔpBcY¶r…rÍcÝÇ[„W¥ü Ÿ=dQå;eEšÚê‡ÝÊJ5-H×Î}'×H˜×\ýÑÛ|JµÔOçÇV³úî³sÎ6QÈܾw‰ùû/‡~$G¾jñÔ‹ªÁë¢>9eš4¥¯ç¥û”µ§+¤ÛE n³›úýX¯G`¾Fu“Õú>Ö‡FÉãn©\Øá|y‘J@K‘¸»w^ÝÖ+.Ú®B-Œ™ø=§Y†(ÆŸ‡ž*£kniŸ }}fñöRìœ9Y«pŽz4щÇÕùVÌžîÕ3€,µì­}1SÛtÀÌ wQUQ[gyÛ"¿Õñðè·fõuÚœ[Çòˆ žTøÇÚ’‰% Š 1A€/ £T[˜y8LÄé5Ë oa£<¢ÇW æýp5NûÞ¸èÖ6ü'KÞ?/Žý烣“³]?,cÎ5({ËT|Ô¯Þb¤:zN^:ýkyûÔê>U|÷ž-G…y¼æß—ñ÷Î>PóÝ»úï!÷öÂ÷œùþônÏãÓ辩w4 ‹ËãÞÂó™äƒÞ÷ÆçëÍy¨·”/ã~ýß)ë­·5~O“óÝÞ~Ð}õÙ;²púã~»…Ï~x''Çxãçòøx¿~Ç ›i×ïS‘ǰ–Í^~'¤=ì¢x^ã!'~xžží]¿}¿Gž –:µE×§ÍÎjGï…è%èQ/—Ã÷‘Í%E„¹ CVŒßZ‡€< £çºzxÈ«šö}|ýSÇŸ½y$ã«Q¬¢ÅoÀ®PÛ~PðTx=ı@õDÁëˆùu‡¹V–yŒ£Øx<þIÚ$óÈ©ú‰=®yAǽÑû„TýXýïvv9¿»¢§„Ó_âÏA|œ¹7ÓÎ}õßmöŒ ˜ûX}[Ê(pãÉÄÙ ¦‰—)QSÙn{tÎË ÜwKX–i“Kž˜™7«{Ái‡®È€Wªºô{J2•‰„@ ×¡Ñ‚T„HyÒûº*EŸ±ÛL.$š«Ïï‚@^u¦äß1 9Ek*fvz7N-Ö•¼y1Æ”BÂXã”ih4™ê£bò¥íLI‰}š6!¾©^žrŠÁÈã¤*­Lõƒ²¿¦(¾Úl}õDLù^ºFÚ.ˆlsIÛuXTñc‹¿eÄíM¶¹@‹oÆ;¹û†îîü_»‘½õØ.Q4ϵ ³î“¯o1W"„ôJEÜ_VîSG¾ãw:ñ …ô’‰“Üþ&ø\þgÜ”ã/œîú.Éõ,_aÅÛ™ì/„ãåÎ ú( æÑGqhó•½Ñæk¶¥ª£*,7D‡Ñ'àPM·ö‹ïŸ¦dà’Ö¢ÂsÆA‘vŽ]óTêu†å{6+ÖéÖé݇Âby™[C¬~Ž&ášè™a¢XS¤G9Ï»£ jIUv;^«¥‰ôÑT-ÝîyN‰® š‘OO*â&²ˆÃ]sÍNiÅ–Ydz$õÎ(´öã(¹‰©Ã÷:\äÖ:¤"%-NÞ*Ú>Ut{* oW¡Ùžož¯iì¹ùZðàþ©DœÖüús½o‡ïcê­-’Õ)+PÃEO6›Ñ)í8¿F¢û¾ªÊÙõmg1êR_6' ­ÏDêš¡É _²–Ü)¼¤§”‡˜4{ÕÄÎL¹¦ˆ9ÒÓŒxSo^‘ƒ-m-ªGU‰´l|rµëP ìæQññsú"b±BÅ_7o¥­ÖirÍïªåÔúFqÇÝðºÄ†C6¢Ëº.ÆŠI&¾Ê¿¤BSÖp@èÁÊû¥Uyo¦góùYXòh>ÜvpÑ PöíÔBà8!“ÏZ\!ó‚æ•¼þtµ¢ç_w4ÎvÕrk1³Ê3¥¿Y,iýð¾Èwî{/Ч2!?qÍñRИXK•† ‚ BmŠyVÔÛð7äü%9ð´…Ô“DÆ ƒmÖŸ ¾‰"=õÄ.V/3sdçîÒ^!!èQJ裶$„ëp˸TY·g*6ˆ47ÈPã˹ãÑêŽi¾Íº—Ã~F„‚@ žƒ Ah›õž~ÝãÑ¢û¼ÇFBŽL51Q˜õR)è2Æ­º÷Ÿ£í/t‡“¼ú°ñlÚ®$/Œ*Ó“KõïJo‡=kwçÕ×E…cÂö<•H {ÙE+ ^sÀ”m…éNÑ2¾'° 3ãÉ\|¢ú&¹¿*߇§é»¡ ‰™TFN“ø Ô¢Š|õ‘ö]_>@œæLù î‡2 y¦àSõÄwçÂ)—GÏ}ûöüw4dŸI¸»ï=Ñ â€~*ˆ?WŠšP_™2wç‰î{„LÚ/èë~úñáäEî'†ŠÉ»òj~¸ò{½\.w®ã?ÏùÏO îü„=ÜûûtÍMÏé¸jþš¿æ?-~o6¿ wIÝòq«òw¿}¸ÈCò8ù8òwgÈ×/r+œ<ßÞñýGyYÜæN ¼¢v=ôç¢m¤¯<Ú~=Ÿ¶dKmŸ8µ™l]˜·iì*¬Šøzžú=ö/1ªdÛø3‚E~L@©x^œ¬û}ü[ï›üCñ=)F¾Êkð»»vqAƒÌRªš¢c‘X“dàç”ÁØsNÝΫ¦íÐÎo)=.¸é2yq£¼ØÌÃ\™n°¨¼û´ãIèÌS67‰Ö^Î;XxÕù£Ž}jqD™Üúèô½®…§q:c¹ÌÍbžä=Z¸óÀ9%“K2‹ª½$©õÕ^á¨âÛMçןhmÜ\>k³Ï¡‰;¤$Ba7VmsD‘ „‚#ºí[Mæûuî üt:´®FîïX‡æcñžë7iõkæéõ®ÓºQ_Ü\ãj[^š&BöË\¤=¹iŽb„±uíÞ'º(§Åƒ1—Sh¦Â®‚®é²m¦¹­ªšùò¬Åp•Vدk;µS×4Äõë «váÕÍsˆ)";¹r8o,E-’‰¿ aTAꨮϽ.rDô0x‰ù—@è¬Kd5k†£ƒc`‹<â¸G[pT?¨u·¾Î>>OÁÅ;9AYÑ.v*—8:Þj=Fâá­›|ê‘•õ{K|8)¨ d÷ÂÃû¬©ëSÙ¨Óñð” P—U ]Ï×6³~ Çx/¢OWtÂwÔš$óëï^žó³òšiì/@0À‚XöBY /?\~Çß^ãò@j{²\t¨ÌÄ„çÏ §“åýÏt÷~ô~ýwœy“È{×÷OðO(_E=O=Z·‘ï|_ùìüºU*Kãä*#e&÷:T•WÛeD{ßàÛmû=>ŠRU_11ïÅ >UJº¨¯s#ePÚ~]QÚLÍÝ[vl9•m6Tl­”ìNȧeFÑVôŽÊÒ*íRÚÛc•WÕºj®m¨Öd%µVÑJíIl •IÚ©[@»QÚFÕµœæÝƒÓ˜Kj“° ¡Ø jUÙJ›*6ª.Ò.Ò¥²#µ`‰ØVÔv6„íI6RlJÚ«j¶VN·wj9uÎì'k.5jµVµQÛ»± Ø%lŠ6S³m®ÊShK´‹±lIlìJÚÕ]©VÑW`­¢Mƒh6Nî‘vUGdŽvê¶6îe;5†UÊgXµÉ`ºÒk–dÓ,kºË¶1c¤åZÑ4;1´Êîä.çmµª+m­ÍmEBí fÚ‰m*mR­ˆmEµ6’­‰]•’§j[®í ²[)5»³t-«°Dk»µ4Îì­³2´8…—P¶­eVjY†.²év¢-`±„d¹ÅªFÌCBÖ)%u\uÚ«5’É”\1Öµi˜¢  ‡„„¤WˆžbX¹œ–')ÒÒÓ3²RÊÚÚê´rrVqÓNÖ®®¸[Z´Áf³"º°U‚D“!tUTU"(ÄŠBÌê©’Œr-V‘Iv¥m±; l”»¦Åi±I³²%µØ»V ƒj¦É´šÛ%Pmî¶æª›­³²®Vk$n›,îí£¶;NÜvÓ’éQ”™Ê5šŒ–‘—T¬«©` Ìk\iÉ««–Ö­CJrȲ9™¢Å¬ÂR„Å[™EVeC¡® ë+EK¤ë¢µ’Ó5W]ZªE"Õ°cZˆ6³”§:«™±: ÒfÎZͦÖU&ªYh¶Lu•:Ó¥:¦5­¬±«b²Êb³N5\rU¬Œé]˜×j«–CZÖ¬Äåt ( 1¡ÐsšhÂËQe¬¹tæRIf´rš©0Ã\ÌÔ´qQUÎë‹™¨(´é¥jéUup ¶°ì(;!šÓW[f¬ @šëZ42ÔV«NJÅ]i®¹nUšXÑ55×2ÀëW5V”&)’µ¨ÒŒå£3j¨Ìd&ÒæbêÔÖ¬\”bv3E®Æ6b§E´˜¬k¹Œ%®j±¦têÆu®n­RpÂ;£ íZ+VƲl vDìÛjbv“wIm³Ûs)6ÉØ§6 ų‰×wwc[\Öåv­1Z£1™s \¦nŠé'Žž$"Ч„šÒ† ª5e媕5·hTjá6hʹ餵)¥IVu©&‰j®UÒÕkš1C:ëM9ÓLbI+Iµ5¦Ó5ÌÌÊ’‚´Ë)œáȬ9¨Y§U&ÌÊšÊÓ!°ÍZZY‹&:ÅWfm4Ê“§SY®˜¬±V+Mmh¨®Z‹M!]v]¬g:˜³1Úå2ÂkÃ%ŒÚÖµr¹DQÔ”µ-sJMT›­,±M¥i­UcªYt²Íu5Õ—4º(J" Ui†ª¢. ™³*j×"£)Ö«:i¬ÒÑÆœj¬²ÇV²i®…º*¡ë¤†bI!h£®fW&­c9ue1­sU²mW]0ã¦S4ÊÔ³Ls«QÚiªÖ¹*εœK rf¹ekEHε•»•rc[ fµ«LÖ°:¸²jF+UbZkYÅ©fµÇ fÈÖBÎjÖŒe¦`µk…WÍN•Ä[6'J­­¡ÕlfcT“SV­Tíag5¬µ–—2Õ«ª5J¹j…®Ö¢e±©¬²—XÓª.WUkZÖÓ…2³ MZÙK«6FiUV§©uK¨–aYË8Ó2Su¦Ù]–©UZâÍV”Õ[*T™[+§VÃVdÅ•gM«7ÌOsÓÈ$TLò%$Õ5¦S™œÐÖ„ÙWkZÄã´ì«Ai–)…+MKKªäk¡”Õ™¬i9¦XU™,Ñ®ËRéXSJj3*jtºÖ‹JušÖZZš´‰c”d\ÑVªÍau‡`”ä•V²ËMq—Zs#J¶LÜ3\h‚´£¬ª¥ÈU -ÂQA)BO7N.ª‹kŠª‘¬É™)Ö‚ÕMkiUÑkhÄ ! QD2‘EÉRÅ)3 ÕTEФRCDÅÈÖ«”ºp+ ]a.—T42ÂYšƒMV¥4GYÕµÔ Õ‹M5ª¶­IjZëVSj XL2β¥.ªê²ËMMŠÍ'Q uÊêÊ£ªZÎ×V–S§*qnî› µ°ì¨ÚÝ’ŽjË·vÇc»t²®™ÉZ¶#.]ví´Ã¥³+,ÓS E4U¥Êªf6r¹™›»´îE6j嘥ÔrM,º™+MtÄUIGZŽ¥ÊD¤)f®k¬e«5ͦ£5.t«UŠlwtÒuµt²¨iÃ5–É–´$ÕŒË]–Z³Q°:ki¢µ­]fZ’ -gw\0ÍF‰ÓJªbš bªhб©.iªcÌêÍEGJÖ5%k*ÕqÆÌÔ¶J¥V…®ª«%–RÓšµ²Li8âÊ•,jjY™‹UЬ1­Vr´³f­HšÊÉ‚TZHY”Ò§tÆ]UË•P5kIšTª‹a’ÕL«tÙjÕM*’ÎhšÍ+YN–‡3:¡kNU†šµÔì:ë4««2ÆmWYÓ•FVenu,«¦—ÖÆ¤c-­PåL+D«š4Šf³ª—5gZ1fP¢‰Z`ÖlÖUÆ¥LºËj»M3hTZ¬:œ´jÕ*T¨´.¨K«¢†"…!…蕘H¢™J’h!Zf ‰ˆ«)kSQ&­TË3Qb˜i4£ rº¹S¬Í©)B’"ŠPPªâtZ æ…u­&®•T­iYÖ³X]#LÖ‘²ÍE³Œ,°°Žf1ÅVV¸­R–º¦ºáÓ1Úb¦„¹ee›5£Rd™­ecÌÊÆJZV¥j\¬Æ—:¸Š«ëcFµÛY9LÒ¸µZtš²ZUµ«¦¤¬Õ¥eÃ)¬ÉurÚ±ªÕe4äÊÍuÓFµZ2ÖŠãI¬î]*µš¬$3bÍÍ0ËiJ™€ÐZau­ba¦ŒëBuV"3¦%šj¥V„ÄÚ2jÕXËNÖ²âÄëkjÄíR¥dÉZºSM«c¦iVÌ̪¹:ÚíR+µœÓak\µ˜¤Ë3LØ5SYÖS•¥”¶ŒÁe55ËZÕRæ–Ò[*×Pó"%"3BLÐQVU,µÄle¬T%&XU6¶Njè”-u•¹ÃWR«#¥ Íc©Ð²Â̵¥¦1VtÑIfRJЉ¨ašé)Š…jT±ÆS5­šÌÃf%†c%ÁlNʬŒé†V8Ëbƒh¨ ‚"z(¢e(”îfµ©"á«Y¬nµÉ8f ØÂ]+U5ªÐå(­.®UÔN­Ž«¤æi§3 ¤Z릊Xèžb#’(¤Y`•¦•›QS#"Å¥’Òª« –„z9B‹¤…†&›U¬ŽjÙ0–µ3“ŠÛ2i«‹5JKZ»¬Ó¥bfÃtÓ©KY­¡š›:´Ô®5]¢åÙc3«¨¨™¥¨¬U%j­NfjjÅ £”µ–¬®´k¥j;1hR´–lZQ9›¬KãŒeÔˆ´îf“MMZ…¬£¦.Zmkä’k¦Y—-j©¡«8«­ÑkXµÕU¦Q•¦³T‰Lé˜Ö¥†ÐÈ’èkZÕÍ-iq«V¬äjÕŒ•up¸µ:®jÕ]6,«¬•dÌ­U—LJÊfcPÚ)lÒe3ZÄ*+\™š«œ–ud³%¦ªµkR¸ ªÚެZi2­MŒZ­&ª³µÌåÓ•Ít"dÜÝt ƒ2k5*Ì“.Ö–”¬Œi.Æk®µÖº·'5vZ޲ƒYW„©[ŒaMšÓ)':Ë –ÒmtÖA 0ÄñRŒ“É5)LiL¹hÍuMY1k™ÕŠqe®iÕµ­Vt&²Æ5E*¬ìÚ™™¦qDÚiœ…j¤Œ—f¹*DÉ®ÚÎt+’È–eÂM-U”¨¬²Ù8*ÄêÑN•Õ\RcE€æ²–ÊÊ¥fº¶b ]e\c´cUjÊÖj"é+MjêÖ¹j À©YUL—U)EZÖºk]V¸:5-ªÍ4LÉr1›.Öis†ªDã#56ªÄVœ²VKMN`i5FÕƒ²Í:2ÐGZšµ’°™qš.–³+š³˜ªjk‘i\°Òëë“ i–3V[ÌÕ Zé]uŒâÒRlÎj•©ÑX³¦«*ç1iš:º±k1:Í »KRT«­[jªÃ[*Xæ³JV6¬BÕ«1.–Ç+K+T‹ Q™§*‚åa+’Šzžbb(‰Fq©•YUk›M2LÌYª‘4ÑÑ´êÔZÒ˜«–.¬IHÖJc4-Z!YnšDŠæ‚â(§©Õ0Ç&*ÌšëZ36©ŽjÑ4ÖªYu«.®µ†SdF¬'9š˜ê:Jj¨r¦šœÕ’Ì뤇3Z’âÕ)j&ºI•­SX¢ÕS%JLºÊRÉIkA«%µ‚«-jœÜàÇ::¥µM5a[[H•šÙl6ºrgTƳ9.–$ÕΌڃ6f¸¥kje£.ºêui¸9Vh å®M"ÍdËNbêÆ²Ž£')Jk ¶Z©Âä¹R¤ÊÔhU:K9ÌEZZÆ;•˜É§A7X5SlkF+JITÖvXÝsMhÕ£kÜժеVîÝ«µV]vÛŽÆ1“%NIZTf©ÚÝÛ3sKXܺŒ˜\ÙN³-:º54º-ŒVÕšEÚÔ3¦»·MŒæÕ2äräEä‘z¢XhIˆºˆR ™&š¡©.(‘'ª†¨¢HÊl±›'SL«a”ƒªÊå“+3Dâ²å©§62JWµHÕgR,°ÚÝ–¦ µKM]RÒÍY±4dœi­ZuZS!«U™ÎËT«\¤ÊkTÕŽK˜ªÍkš5D³°êUiÕ#v0Œ-V,]vS1Ö£-P‹i$‹t†ŠdÉ•–dÅ(H¥›L:Ös&ªáV™Rعqšgf0Z®™ŒšÕSV;&4L¦Ôš†™ƒLÊ[TI¢&¬”•j£«²fº]Ž\Ñ®¹Q­¬ê¬µÕ§Z@ÔÔ*¬XNN´Œ´(F„.¤ÅÐeÒÚåZ±$p)¨ÕÖLjÕM-MV0…i'Pºš¨R¢íi4,æd¤ÓXªêjê×VQ•¤è]kNjNRÖ‰ÈÖYZé©”i.C MX5Õª–Y€µZMV„[b5Õ²‰Z’dH‰‰ˆ+Z—LeV¦:hµ©‹+\Ôé¬2­Y:hÑ!4ê ª¢,‹[VK ¢AÊj¥b“¦s‰][JÍpÓhªÎĵ–b¹j£.iÃS[3¦Ó'1«$¸ºÓUjU£‹5™¹Z­Ž€ª×-§\U5‰GWFtÓIØÅÔW0ÏDÉR1D‘4Φ9ÔÉ£ ‘ª×]ޤÅ)m3¥SœEk­Yt¥ÓÔh™U,ÚÖ­f¦i¬ÍVU.³Y:A–¬¥¬ÕCD­ #5®—hÇ3Y³V¬¥…Õ•­µ,˜m-nrÖªuk3ª(frc³ È5cµ¤T•£UY(MZR¢$¶°3VºÖ´Uu5NZ´•‹Xe²ëG&.©³V†âåªY5‚«VŽ«(ÅUi…³S$ÊÂífåf ]]ud“‘UL0µ1Ud8µj5™s[Vbæ&«ªÒbÎTµq¢)Ö5H8iª:ºshgX²ÈT…–¦Ya7R­u¥£iªís(ÕlãXåµ—KYtYµ¢Td••STÅ&±lNZ©*Ôê­UeІjfYHh&•† \XÖZêÆW4ºeÅ1 kræ´ìIÃU×jâäÙ¥“µSª¤Ì­›«9IØ«S1£SZ`U„8UŠË]hšJµ0fš¡‘5©Ír‰i! JºëªaêŒSLé3Î+šŠZŒ®æ¹–´Òf¦«ŽË*æbãVk ëTºPé¢6&Œi-U XZ±°É“ZÕgHÅ*$Ú™g[U,§1¥Ò¨Ía´©pN V9¦´­ZåÊÖ‘Pr¥¬ÓZºµªj™µ‘lÒkDÌÙÆ“#Na8µÐ¹‡IÕcImFeM:5«ʺ)+­S]r²•­g S@Óæj6•ÕG9¡5;.««V0‰YµÒ5YÉ´ìéÒëLÕ•©Õd”Öpº¸Ô늺êv«V«—Y–ª¬+¢’æÅ\0ëX§5Í®ªµ`‹Y:Øé¦ÉV5ª:…4Lê¶±EZ5 ‚¦­Zµjh™LdÝZ)¥®èkj•‹b¶L«©Æ­i²MJ³¦¬LÆ®‡DÌÚ+­TJÖåuS-FZk­[(ºÄÔ²&¬Ìµ¤ºÇ:µÍt«Wk•ÖYÒ)¡£V@ÊuÕjækNÊÓfg:¢•® VZGJ©’Zd]µ¦¶44eYªiªæIfµªµ¬Õ'\g+ ‹R増)jÐΉe*3¬ì±)WY\–„XfŠ¡i2ærMRI¦2µD³)¬šnk”Y´ë-K²ÝkªŒÊ´Ušc ¦pÄRe "¬ÑE1…BÅ QÚÕ­3Ef:k±©¡f¢¦b©ŠˆE‘."!¨²³Tji]šl®i›ÍIεrªÔNj`9§NšÓªF’µ1²µ]!¦fK+K‡Ú[™9XtÎfk+W\•XšÕa¬µ9ÔU«:±UÅ™kXкЧ5š¡štÑ4«¬VwNKRK-RÖV²Ë&µ†µƒ§RµŠåc,wZ¬‰iu+¥KQkDUºÕ:Ó5Íi%œÙ*§$a5±«i2ÑÆTÖf®Öµ4æ°Ò³‡U¨ÓRé`DRÂŒ•bêֵГ•+§ZÕU5ƒ5‹H•%‹ªjµ¨*ê\Õ]ZëZÖ×’âÈÑa×PÌÅÖjue%²ëZ›IÊUØÕªË«œE¥M4±‰UÓLêÌ­XÊLç(U7NÎÍregiÌ,Ô¥’Õ¤£QR0+0…ÓÈQPÍܹ2\mj+šÚ\î–«ŽPI&“‚AŠx¨d^`u©Û¹™)¬ÔÙr-&¥+#³:V)Ö.`âÕI-U›§BÅÈC­–*4Ƴ#¥×UkMWYhÀ4um6š³ÁI­jêítZÌn¸–YÕ`­O ÊREA\<5/ÄU Ó"%È‘P0±Gë£ZšVÁKFªÎåÕ9imiÕe@i¦Ð›V+2æLQC›4[Te.3FuRÔYÌV®r5ªi«£:e*ÐHÀÍT‘SQ ±YfdÐêDRahª6Æ ’ÍL…bíe%µ’5Ñ£L9¦g ³C*5­rÚ­*´UÚt²ÍŽf]]”È )v±k®dY“*Ã;P‘P…uAU “PÔÒ“**JML2ȴѕȤ•4MMš5TÔìÓ™Ò­›È®¶%S5mV¹¥©u­,b.mf¥v²ÊãªjÆ®Å*ÆW[6-r´MhŒÒµ†‚Ù²‹ JF¨PUj‰‹e1\ìÎkE­RU–hR‰a"A’ˆªfJ^“"ºJ£TµÆVÊÕi¢ÊërÕšs%-¤X­YiZ¶vµ¥¹jhÆ:léÇfÖ²UÐÒÕXELu©ZŒìç-aέ«%³Nª­itåAg e¥³´U™,d†ŠÖµ[\æº1«R¸tå«j ºÖ%u­šË*éœê—jÖÎFJËZd¨N¥U3-¦¹k\hå(iƒ†µKbŠ´;L18Mj•4ÀªDLUÉBÅȈª5Y˜¨éÖÕÍMUЬĥ­5kvS5ZàÁW#¢dÖXg2¹IP‹*-ɉrr"Šul‹-ˆªi‘\¼‹À )CÄD‰¥YkX³ ¶²e"jç,Úç:*´¦Y\ÑÆµ Ítt-hËF¶hÄ´ ,ºZ×V*®¶³™«rë3*µ®ƒ2Æ®³[™QF2Ö³LY‰Ù5jÕVWìœZÇ®–\Ù(¸i¬5n²ÙZ˜7 AHÕ5KQT Ár×4Ф5CÀOÜí8àÚµ¬Ö®Æ¶NšªDÚźgV¶²Mj%cB±š7ZÚ ¬fq…›M+jV°í´±ŠµYÊ5)´ØšZPÖuÚªÊåµkR³»IÔÄViH5†sUˆÔõ q33îprœ½*I<Ø*óÕ±66Cj(óÕµ Ú mNÅ´ìm²ÙvŠ»Jª„Ù6*mPv‘-¥AÚ»·jÙÚ’¶ °ÚVÈ‘°¨›"-’©Ú£´¤ì‘²ŽÝ·vÛ¶;›Ú‰;$¶D¦ÊNÒ“`Mª¢ÕSµEmvmµsmµEt®”îáã†;6¶»7s´ª;%l’•Rm"í*¥Ø!l6Ú!Ä]έ³k;·;w-& ¸Ô§ZµÕU”r­TQÈi–¦jµ&ªQiUjÖkD6.©]jµQ°ªvT‹µ$ì¨ì¢.Ô¹ÜCn´£²¶íÛkZêÖÕh³]rŒ‰S4Õ² *VhJY8 §]mlÎé–ÖpÎÖ­ˆÂ‹…•XÖ±¦¹´²Ù#+e­*œ¶T¦­%[X1º³8×DÖ‰pkª¹™®K£XªÌ³6FJTIl…YÇ&•Yª¬fŠÆ)T&ƺ§nã¶ÝÛNÝ´ƒeSiĪìvØ Ú㸈«£»‚JzjUèKŽá{¡.ž¹*(à™Pk¸'Ž¢Ó›LµJ%fgµ¦STÙvŒê©UR*&µ–—6UjˬJC+«#³LêqµPgYͤ®³™Zb”f–Ö²µ5UÖ+4r­dK -KBÖ+&¬eu-¦-¬ËHªq©ÌÔÖµ'5dÆafbµŠëNqf˜M«e“j¸&ä]NœÄ-P”ZÁ®·,µÓi5Vl¹Ä²š‹VäºÆµd–¹#Œ²¸±s ™ÍfºA¥7tÕÙY-\®Ôi5ªJ¡„:c±Vjj¸ªµÌc*ÖE›*ծ¡iÖY—ZÑZͧ BË©©“CÊÄT ²pðCÌRww~¿cä;çºwccòóÓFÜá¹Òó\×›¨žPÛnååÚ;9žåÅp4ói¶f1¶©Y^tØçl«!ž^DQNE¥€SnÑyW›³ÍÂÑŠ÷vÆÜ®RËÊ÷®Ñîê#ÝÖ")6òæg»»­Í{ÝåA…áOP i¢º{¼È ½Ù®ÆÆÞî‹=u¹Y kœÇ5Ä÷v‹»uÍEË“»\(®[Ï1sšyب Egu·H#®®d±‰ F“bŒ”l÷j{QS"Ïr¨:’Ö žá¿c§²¢ù'€Ø²%J¨ )«¸G³!Ï#¢NG= ¢„ª1¼Ü5ù·65Gs›|VÒÎ1Õ5m>v¹ØÓ\¯wW-:⢤Æ5t×'»\ ÅQåͼےñ¨$éyâ®éë@vxï]DîáNë’co+‘±²t#®ìžQ×O:yL’Ündµîí’çKb’‚ßž÷Xƒ4Vù®V‹ž÷I£A^oKÈ6-{»G›šÿ…­Ïã°(®û·¡¯Êæ¼æƒêè—wA¾îÁ¯6ùkÊ(Ø7ÝűnQbŠ—Ýt¤ÕÍ‚‹<»`¹ÈÇ9E¤¼á.v"Ány·•é'”9Ða¦]C¶Ú½7ºí¹ºEc&ç9¼óÇ+ØxuZÁˆwA ½-BTzë§]¸6(1û®W–æ¼×/wÍF^d3¨RTíG ÉèϼãÊô¢Þ÷Pþ-bÅV*½üü¨½òL¨ø×·Þ;<ˆ<¯ ªg¥3Æ(­€È½ïÝ<*ˆÂy("äûÝîÈ÷\7‡5sw½è¢ »ºr÷¼]Ê{×Û>O´ ðª‡™8Rcósc@P‹»¡E&óG"Ã/.E3ÝØ½Ý)ݳ»Ërov¹TŒÅÝÌ$¯Ët,WåtÉ£üÜBÑ·ÝÆa/9ù:üùÁ'“#Dô™…DGEÝÑšårƒ&ÞrÆ=Ü¥“yòô5Š7»¶Œ`$âBQxõ'Ôœ+êxï—dÍæ*ò61æ¼Þj8^åîõsâëž&xDWÛxj)@È4k—wk•æòòòÒ/ £W¶Ï] (½zà®<Š¾ÛžC—§9=Gžªæß›šò¸j û­Í÷q¨ù\¯»u¹k‘`Û½ÞÊ7*1ss¹ÜJH‹ ˆD®mË‘î®D¦ð®”Y1³»nDQ¹ÍûÝb£d*-^•r^íÓÝÕ#T ‡%†ÛæÖyÓÔesnmr7—76ç-ƺxP)ùìú!x’xå‹d؈-å¹¼÷®ÅË¢fƒIß×kÊÅDÊŒX²}÷yå¹Î+rås‘´W+ùî4ÍI¨Æ÷º·¤_wXM4%®S»ÅóÒõë¯{ƒ›ÍÍæ"‚9Ó X€±%½Ý°wufQ KÄñ[‹E]¼žÂˆ‘ótÞ[¡yreF½ë¯ yQCÏæ>GÄêzr²5 ¨( ¡!HÐ:žÉÁ£Ü¯*Bµr]B$¥Ò|Þx+j0Ça´g¡•&Š~±Žbï±»]C"Ü¥(È­,°Òz.>¶ƒÎC·³¼VK$9ë’+˜jªš ÖÀ±Ëz¹GžÐ¥Jù mnHõ,U\¹$³URùïZ®µ¬Âë”d†Vª”4I¹‹].­DµÓ’27·„#Ïí´PÍÜ•T"ŠÍTý=ãÁ ¬«IKÐð”UWSl¶ª¶%Ž5Æ;VU©*Ô¥`UsVn("!¦©K©)žbWKjãYº–®§šô'+¥­sW$^õͽ¬,Y‹:2fd¬æld-tÁ¬TEsÕrÓJ4ë.¹"*冄‘Š!Úq=Jß­ˆf¥yD¥[—ÎÑFÎdê‘ß/zof ª“Á[4¬ÍVã35ÉD,›eÉ@²0ˆÓÐO*”"@Ì¥=(Ä·;v=¨k¬ 6©šÍc¦‹]Se2ÚȺ:™tš+ZyÛ<Š£„ªý±TŸPåϽ·œó-©l«B…C\,”µ›5ŠÈå—~KT¤í´Ð!ö$Dp·j5]kªQš´c|Þvíi79]i(ëF‘ØÔJ«0¨·ç½¦ºY™fæl9¢y‡™Ök¡sBÖlÖNe Éάj¦…U•ûta.…uÆÔËú…\ëj bš‚JyYéýYÖrWë£StP£ ¨H×MMØh$”ž#É.›5jUZ5U.T©Æ¾YëUXS˜µs366·¯X£K ­2±+Þ÷¨esTÓ--ûÝïN˜š«Z@«˜…ù0™H¡á*¦y• ýYíÌ›åâ¶«AÖol®&¼ö7*+êt¢ÉDQHiž^«¦f.lj´ª¬®ZÒÔ(Cç^Ç-k] RNqJ“©÷·žÕU*8‘pä^C5(¹ràÁŠÖlÍMdšÃ©4êÓD9ͮ¡DŠÔ>¼xùŽòÓM+93‘5vª›;Þ·µ¥;Ç;RÐvQ5P›VMjêkuÉ®¦’æf¬¾¯šŒÍ<ÏOJ–¯ZÍH±2Y’¬I©\„›‰"Ú # Ê4ÓÖc[*‹[XÊ”ªD˜°ªC*Ó,ëbå-1™ZG¥í‹7¢ç^BD\Á)QÙЉl:iÅ o<öD¨Š+AêM$/¬˜š•ä›Ïc=İó{Ç'0Å[«,Nk.jÓF´³%¡•¬¤­ÔµHêxsÄÕèÜ®¯¢ô¸’fµ8-L‡LUÐŒýˆ{SL¯ÖEyÂKì]¬›-õ…7Ôv†ihèN©ú¶{§dË7)U×Y•­…3šë*±0¯½¦{kM%¦œu›4¥ùòÒZUª±¯Íïtꬦ­Yš^kl&¦FJbx‚J«Fr*I$-ty<˜òÂ3u)­Ú§2˜”‰(!b¦£kY\¥:ºƒ¤ZÌÍ%®iL«a&É×M6h©D<µt¼Q4ÖÆÅÓ ²…¨\=Kó²R/EÍçaXщ,jè:æÅ‘)˜íbÍ-\A²y4:3ò1êãj¡6p2Ñ>¦óÏ=C]¦«+.5K©S—ZÖªŒ4šÔXL–Z³2ý{›êߤBzZzy§š¶ØzJ¢¾^D–Y–%e,ß&o1ˆVçØë\¨¼òžØs\ÕOÖLJ䆅‰é‰s—´æ¡cDÓ«•Ur³]2·ï[ÒÆgLŠY›*#V39Y:5S$JÕ¦¶*e¨§ÏYHÔi¶æ§‘-h¹µ¬rW+XÈHP¤‘‰½F)y.D[Ûi§W:hhzz‰†$ 9­N*Ï{ÜõKTÓ×C\»]¢Q…bQähã*f91XËN%yzX­@.c–±N®Õ§Gm#¬Â‚ÍUWKSjSɵÍÞÛrÍ5*ŠLR‚ @¤ÅyÙ ‰O=.`R¥•ŒÔdÂs{Þ ’²ÓÇâcï3œxWž¦7¦='J¦ÃŒžRrSÓÆvA$‘ÈdÄ$ŽI] P°´3ÒÙ6†Ú’…'hÃu¢™µµµ†L5¬Z$¥J†ˆD~°šôI‹š™‹µ«eóocÝLÈ44ÉïÞò§„›ö L°ù‚î>1|íœhÕFXM¡-4á–”³’²ÕdÃVS^­ÌȤ<¬QLy'BG¶ÏB³Û‡–j™ëžOk èÆŸ^÷^v$ªÆp»`С1C3\PVLægïf›Îý^&ý¿8Æ~Þu ÂÔ$…(ùù7PoºQWäÙíoMZxlGí{?ÜþRýØ„6¢dž?ØzÚ*ÝR¼}_]W—ö«ðLÎîó”^mÓ??{|/HÜæý,xnõÀï½ï»ï]&Å‹E&Þj7LcªgZsfìǯߵß~§»è¤èV¥ã0‹Á©EÉ{µ¹ ±¨£në£Ï6ZòsÙ‚¡ÌÙ¥¦ä˜-Ý»KÝ\{®Ú¼áb).îÆˆ×ÝÐX>WËÓ"FŠ÷]i/-\‚¤„2RIA;»ÝÍ`Èb™³»yæ°Þî”Ì'®2´Ók7y3ƒ0­¯Vwl©«[cHnaÓNWÍæ…çhÅræŽ>íz”4Œór1°'7)Ý\ó•åÞî×Pi0&‘(9®Uæ¹EîãFÞWê¹9/uÒ󔉔—4š¢˜|¹sïu{¹£”E&žî‘å]6,NîÎt¿5ïrbJ629ˆ¿»Ý“j=÷\¼4m–¹QR¹E`£W›sqçW›¤O8»ºKQ¥çÞízj¼èKÝt‚ånF¹æò#õ×KsÞ÷­rçÞ½O»\Ñ@j,o6æ¤Ämò¾o2h£\äi rïur#ÝÒWwh¨ØÔE¹¹¬Q®r7ÎyUc±ÜÎê»•ŽžnÐxPԕЄ„"ñ†Fm žºv4ÚÃãóYçIgË¢óŒ¥PîÓÈÙ7›§+šO/7—9ccDW7H»·DdÙ‚/!©*™áN] ÌÜ©Û$ŒwB&À Ý!Ñz¿*¿Äkš65µû÷õíý{ÛÔ|§˜Å>i¡.=ÑùB«W_,{ÙaVŰ|ÏØððò+ÞiÈn©L¶Ú›~t«³÷¸Åð4$Æzx• '„Q7±‘}\³Å$¾J°áQ®TDQR†í‚[÷ëŒz/œm£g*’B"2\:¸Ó†mªþW˜Š³3o‘åÒó—šàD˜šæá:|÷©ó¬;4ì9[A^[³"˜2F“O{½²³ŒˆA.D•çFzp/Ûp9'Ñ2•jÉ#žýÞ|ß6ôɨB Å*Š*$ÕÛq=¢51=ÔNì‚çA°»ºOuæ½Ë± ÷\Ó4$’&Å×Wºë oœ„’1Šw^{—Þé²«¸Çfr»­ë¦Ï-®í{»Iîé2^nQ “aîÅ‹I ó‡ºáEΨ×Þèñ§87w,næ`ìtí>v›ÉŒÉ&E ì8z&öÆn›öȃܼ(¼¢ƒ ò‘e®‰†Ñì²hØýÝ_79Ȩ‡p1‹)$Ç6äj6(åóÃKÎ×»¬•y«‚”%år,óµˆåÎs:Ó1VÌs ãUƒ`·-¹Ýº61 (ótÑ{®Ñæ¸`÷]Þízl&ɇ»¥ŠL¥Î¢Jù\òº†—w/•ÂÆ“ùË>í óÉÍÏ~rw¦„GO.¥ïÞ¯B4|¢7 WÔò3´³$s‹©µÞ]JÌ­¬}\Y†—ºÝ—fz/w/H;·%Ý|öI¤¦MêäuÆî×1³OœÌÊݸ‰R†ÃwvThIJHÒò®˜i$J¼®&O"*ˆ§dÑ  Â ¸î¦bK31&R)G÷:èCÒá’ Δåu(0rçÝï9w$–˜“&ZÌóL"îÛç¶WwB{®L †± ‘-ÝÑ1Ýq5ïwžkÇ·69Ê&ævìžqŒ¿wA1ç%Ã÷\z»Ô<Ýqʳ`Êßz<;åëΣ"Dråòä/v»Škî®uÉŽrbqЊ€ ¶ØåAhí¡y]w»ÌLBžëp²œåîÝ™“=݉Π÷\a fß9I4A]yù}(Šf‡»tòóÈ‹ÝÚ nq"»¸ÐÍ1S»ËÒ'œ~ÒŸv¹—Mˆ¨GwËÓeÞö<4»£yÈŽIP|Êó«ÈaÉOJLEópH1@å&É(2$IÍNH«5@ñ˜AS’VŒìÈF®G™•cSÇ'w/±ï{þÛîyªOÍ„*“ází·ºÝw°WYI SOþëÚ•¬^¡fš&D»ÿf2fº†”HiÔç¢y¨’"ŸYqzÊey΢ÓK,ÑíŒÎ¬-›ŸmúÉ¢>zTõtSÐ𠺺HhªÚª²¯{Ïv›ç±Þ«h×Nud9UY•W$Ð6Ù2¬£IURÁKè·¬X·Éé‹#Y=éÏ8VcUi%16VÄ¢™#÷½ì̉~tÏjÚĘJ]ß8д k;Ñ—$$*!VbÖsXë4f+G½`õT%S!%%©Ug Ù(I«³‹Nå’¢’RŠ„\Èma˜UZ³[U\ªŒªIzRÖÖl= –öÛ©*Šh5h‰©U®¬çÎ-ö¤Ÿ—´Îµ:jª¦‘IÅÔ¡«ƒ¥e˜ÊâÓ+RÌÖ¸¹Zi8jL úçHp‰õ¢âø¥YI;åæ-(,«ž^&˜Y¬¥¬Æa-]Eª׳ÒÖ”–š©‘–ÈÊÒµ*Æ†Š³£_¯g­5eM©‹ZÖTÑj M¬º¾tÒg6ò²0kK_Ï^ˆ%cÍ´˜Ù)ê£6¹UÑœ<°•É =Q -±œ&‹OLÁ3=LÊë¶%&éP¹‹5¬Ó—U`ß½®:䥮öÁª®D¹¡W’KiÂÐÉùÙˆRö²ô¢·KÛN¹¥Fh‰AkbÎpív7T#ó¹8L‰·Sk•κ±q­rÉVš¦¯í½32£¤Ë«B¤ùïBÔ«YŸ«z¬ ¥Ø¿Ÿ^ú©WJX°-@ó{Ù–¸gYhÔ÷¦ug±Ú‘¦ëž”R"оaq_±(½¨˜¦â¹¢‘·[%Z‡.!ÖTttißžxÓ\•ƒšåÓYh¥cE¬VfƒÇµ¬ˆ³V’ÌC$m%Uï^ª‹¤Š†©„†©(FdT•Š^Ï[c¤ç"5Ìé•›KLšmN¬»19¡å¤A%Yy.ÖÆÒŽ¡&Õ¦Ðå&™ÕiƬ•XÌ kUó{zÔ¸Ã+T3ŠÎGÑuQQJK=”+±œPÉRò—POT]±·%Ò“#²”’(ÊÌm7ˆë.T†±Z2–†‹nÊŽWV„BZ©P—¿$Þ•[ ¸gÍrZ“Šè¡$ûdÔÑù¹Â•%BÉ2kIÔ5f–Ji¥\TZLeÇ]Ôæ±—OÉÇ‚”¹ÊËïtíéR«5…ɦ³Jµ´º™¥I¢Ñ‰,Õ¬fûÖñÌëgMl.¬o]ïh“Hš<ãŠÔ¦jg:ªÕ¢¹VeLÕTË=ó°“’ÅË,DCB£SÖhÕÍGõÚõ94×bÉÞ/;Ù%ÖÒÑÂ.ÌÎF’n]‹Kß¾Ü{ÂÝLß&S]B‰NÐòöîZ¦æ’è$nvëRôAL="”„JL½W‡ŸF¬ Ò7UU &²+*Íi+k66´XŒ¢4B‘\Ÿœ8¡hš)hQ&ê½¶BžV%hI>Ýs½&š¹˜¥†ªÉk™’ßbÄH×5"Ïä—2•#ó&f¦"êé¦"HR˜jäOµ–dyG¢)„I)Yk¾°äIïl¯*á3{ÆÅ(N£\ï{ÌõRÍ–§ `X¹&½ºXªk¾w*îôYH©^JY?Y 1 ¥LBòRRD*\•ûmÏKL"·I ’ó¨zåIŠIž–ën¸SÉ“M-«¼ß½gܤrÅZ0˜b¦¦e$iQçUVfK."¾nûß>·ØÓ,U(Êž­Ã]¶äÒÃÈúǽdXyFê†QÉ¿[T^‰¦¢X¨u=¹Uk%\Ô²˜×JÑCD‹°m’ÈÓÓ[——$I5 S)9›–ΓU4]j·,ËyØz!¡ìÙ¡Q+VU¦,ìa#E7µ£¢F*¢FáXÄèÚa…dDIi[–I$Eœ‘‘i¦Öà ëi)¦YÊuµ²æ-LË*/×Hñ†gìYaI÷°cʺه1V.*+šéZ`f$R›S(Ÿ½Þʽ-YÚÕÌÚjVE\•PÕ’\ˆÂ¬Pô0¢ó{Z6Ùyeé…aS2nÒÖ2¹Šæ…I‚zhÑkŠ¢ÙŒa®§¡yŠæ$K–SíbØœKÑg9±ÑŒ“|½Ö¸«RÇÖ@ŠÎMN2`¬*yù÷½=gfU°„¢ªsÈE]kÞ¹åJfJõa­vÉ'¢ºôZ2[¦¹¤‹¤.½Œ>Ø‘b^/9=즕.ÑcF¾Ý²´öýìx$ªÄÞœ\=ëÖÔÏ×õGêÒþg€Gëúµˆ½Ì­®Æó@é¥+ŽÕ,2“þ–§ï¼[‰äO£[<‘Û¦I$Ò»¬%2êã³ÉhÓXr°ß-,ÍäáÎWëÞ0&ÖcV¸ü˜rDñ=Q0Ûc•TÑ•Ô2ÆÄ¶Æ¨D‡‘U9ƒªÆªüÛÇ­Uƒ ;jeËqgU‰Ú m÷vL¥„I¢7uÙ$÷ºð‰åĤEîìó`M¹YÝÉNî™(Äî­0æfõµØÍêØV“¦(¡»ºHˆ1ÌÌ•Y§hë]1šwXÇ0cÞ§­g0ã)LNäž*%ᡦ%vÂg¦HãYgbEn(k³8ì&ÄÁ¦™\çwG—4PÑ{°tns$RI"—uÂä²w“¼&¡©P^DQÌæè„M4îîrœº)›—dûÞÁîý(*veu/vaFLJH3—#wni7jΡÇß7ß|/x{S8K™™¤«™ÉaØÃæ3aŽ©5R*Xæc\³§c°kçD ¢ š Zì’¨š†[=Ù̱çåX–“ê;Ö˜’¢PyyŠ<Èö²Pótw[²—,Wºè0T›ÍÓI&]÷¼ouÎèì…# %w*O5ÒÇ‘Ò5 Þ»ÐgÝÛåЦ'Ü 磵CKàÑ«É Š"+3ø®ÆKîºj,û¹Ž½Ç ÎÌÉl8J±®+N᜗Žg*Î* I¶©Ï­:UÌ#ž?±1è-ž¸f\˜uJнVý\dWÔ`^ $„/ù¿Cò_Ã?6œñùŒž²x „ü'¹G›„Ë8 ƒ©Ra®¹~ê{j× 9ÁÆùlÚo/Biœõ£™ùçƒ66“›.ìë¾zw¹JIFyÙ8úÊÎq4Á›Ê­œÄª)M›¾ö³fÿJ¾ªèlOœîåû®‚H÷ÝæÅ7—«TæÁŒCYÇë´ÏW5XªMF†ŠÙÇVµH*¯<´JbÛ«]ˆÞ.Ü(êÈ]†é$’E^PG;­NÌÀÎf3 )„Uá ½¶TPsÒ ¾§˜Ð¦ 3"$øîår€Ì%œº»¦Š{’÷ºŠ}Üß9!9cNºìÉfmòá¢}ÑpkîìÔU¬'N7Ï3Ú9'Öì† oÝï¾õåÈQŒ mÒº„^á^V¥9 ˜HÕpÌÜ“:µƒccŒgKŒÍZÎÎ~õÏi¹„²B)‹‰rm<";Ff»·oÝt2J2÷Në'.š¡œbt­g®¶fP I%Ýt¹W9Ý?c/iI”9J`‡ž¨fhšSº%ݤ„ "‘œÌUå³Òòã3H'kQï?]é1°æ”³§L2{®‰Ý\¼ºi­c1™µFpØ7%…AÎD‰!wp¹®ÆÆ0Ò¨ækVÉqÝ6™ÎÀ"}Û•7ºæd_9ŽoUõçUÁ™½tc˜f·ÞÝ7—5SM$î¹Ü3 ÔW\W\É%S>®›‰M>û¬_}ÐS›¤{¶ì²×±9PzHA9ó.Nœ$›nÂ"òU®”}±„G½E@Ü"@ÿkä½Ç½ÝîÄÏ! þ’Aey ,”‘ŠfÔ#žöóÞôùi\϶WÃ(¢Œ%=4RÖ{ØùµáW–NðoyòžÆÁꄘ†5oXP.ozïb#iC€ Ü”2†Œ\”Ñ®óã`ëÅi 7žˆØÏ˜Àùñï(V:Æñùfm‰LHM68ÃÖ”nÉ äª«ùwÓ÷²ü²(¸8ùÑgù±ec4¿ñª²Åðý;çæŒD>¹«?í(9rM`U„DК™º-áp¡µöÔùó÷×¼Ÿ6 ‡Ÿ3 hKÏ9룇"S¾ßWÆï½ì]CšÊ;£f5T'˜â$"lSW7BSºOŠÁ„ x|ûoAyaßD&UNúØ!?´æ¿nÓ.¨yEhé~¼æ÷è±zŠb˜iΰ|xð¸s¦Å¤'Ï£q䟯båø¯juêÏŒ°Õ¶æM÷»É¹ó=\ A6&2PáðÎõ|zܳž_ÕôIõQûy2=ú"˜Ÿ¤ýPpÓÒg`ÉÁн8£iË!=@]"®:ê¶;jŠOcÑxònuÓêáñ;[Ìù Zñ•t¼Ì7’.k‘{Ô…x½ë ïxÆÉkFAbSÓ]*¢¡æjr?±{|øóâ°Õ'Ó/–J–'Bهƴ˜S„‰4m£(›”†èzæêoׇϭOž¼•m)z0‰äÅf¥!y5Q·ø~O’_‹nQ”Mç=oW"k”Íü}â\xôUÇ&¾_aÈÖBÎ1Ãë 8üMhq„6ðU‘Äþõï@|æPñY\ èÁar/½Î1/Î34uDþ@R©3Ì£ÛeO“§·T¤•C%Zh¸'$¹ãˆ<Ê“ó¶cÇk9 -/ŽgÛëǸ}æ®t-ç¼"ùn~O·žMó:òLáÄr79#Þ1‡Ð.0hÙIO[zSE“ Åtýd>iYg"X*G1Æ!,o¯<*<£‰ ½'k ôùÞ1=ã·½íS­L Q€q±ˆ5˜+=¡QA¤³ã×±/éwŒ’|}ãÕj¤YBmaeÙÒÝåßÄgÃ3H`LXÅz»áOIb$”Mù=¼Ý}âGD'0—/:*”T ÔxäÁ7§óæéý@XØÎ%|ûï°ÞJ(ıûÞz„Ÿ‹ïB¾‰¡T‘Ûóeh¹phlÍpwbô¥=ÇaTˆ§¥AÂh¥ˆ!ÏÏ^‹‡ÃU’½·®™¦=mÖ¯œó‚yõ×T,ƼûÓÌ‘+V&Ûž±'³™ ¢b%®lׯ>³&ùÐ->4ÞlxrÄQínPa eÖ¶ïnò°åç>Q³VßxO:>½½à›6p\äÁªéœzìŠâüÚðè æ¨‘ç‘Þö_ÃÒÏÛïvÐ –8 œÝëh…|ç¸òhˆhÔuScŒÍõuoÞ;ïX&™çØñ÷»j“è²aØ`S iÎR(D‹XÞ58ËÉêàŒâk¶GëocyÚ"¤r­U¼ºMúx;ÃåKCÄ)’«J9äИý­>pþoT•ArR =ç"™;ÞÞôÚãq6[ã§t¸„ùN½ÙCxtà}0ù· ¼Š¿Véæzéutý3ìŠo¿/çoŽ!ï‘}4iFÖÍN$c €€6{ #ËÉ6þzg§.t™™«…—]3óiäÏ׫¬ý¶!HMˆ•çëj\¼yÀñИÑÏ‹&Èò†¾–º=D‘ëÅŽqÓdå9ǘjï¬èe”xpï[dz“^¯v˜a&‚R‡©îoG½äû×w¯eE±«­÷¶{>EOBРÒ(ÃSÑÕ3S í8‹•tm(ïkâqß:ùk} ¢u×UÏ ¾ÇäóhÆ&(¦eezaQQD/ØÂhP§cm«°š4áë8ø÷¿-ö£ Ùkk‡3bÀh‰Íß Á 2PëyÉåTúù× ²š4H§¾ßz>gc8Ÿ­ºP"yÞN<ï:Nk>SÒë|<ýgãÒåj¢Vøn.!ÀÁEèÂ+’¹=‹«g‰Ë+¿yöûÎŒa7°Jô@:i¨ícãÖSÆŒ&ˆ†_½W|v¤ìÔybÖ/ 'í¤´’W+CU°!94µ*ÖÓb½Ÿ&ôT{ÏÚig«ïkÞ_§Þrkî­. Œš£%gvA>¤^E<„&ðǽ>{ ³÷Ÿ^®}CÏmk’(Ï\i(ÒºS=)áÞ|EÙÉöõ¯bñåp_¼øéC.xAC o/xØòZ«ŒaÊM/Ø»(Š7´:»DNåä4U5± aÏ Ó\“uÊŠôÙÜ~ôO®lc:%г§Õã>QŽ—­ô†´VùKë_)¯H—Å{øúõg(f­~˜U ˜ã&ó©ÎA?¾Lyã>²fƒÞ×±ÑMv5ÝR„èÙ†¾Œ¼üžÓU$*¯Ô‹¯V$[èÞo?f”Í=PûÆì2)z.¿žËÈç•Q—ë/!!µ\¤Þ5Ñúlˆ˜Wö`ÆÖ$«ŸP¨zó÷‰~ñ9œ’’#\3ñ Cª«â<™ñ@“+í. ïN•&Ö2ŠŸG·½ƒzˆšC1é¾ù8ìyÊì´’çÆsD¹rò×&°:Å—â¶D¦Cˬ˜áD.6“È+bc¤ Þ=&fCY®aëØÍ*¸ÄÓF ª2wÊ{>ŒœnéWŸä>¡[œ¹Mô¥½õÞö» GÍcz<¾/yÞPäq‹(iðL‚pd|¤áqŸ×ï}oƒS É(OŸÜŒ´)rW£+¯hŠR¶*%©„DuÚѸj˜JDu›Ðõjè{Qê®SF”ÇÚtžÒk﬽çâÃAPÙÌ#ö³ èò ÕåT=™ÞL‰DÆüðãtôFÁ€ÿES5} 9f óÞ÷‘„«šRÚ5¤t¯ŒÛUcCj9Š]|Î`O×½UG­&çÑvV¨RJ{Ƚ­b{ç±Ñ½ZÁÁÊ®…:¤©±–>e{A‡v/×í#^ÆOŸkjžžˆ~l1EûožûâDõMÞxW:…Bˆ"(è c$#†rj‚Œ(¿}ë#ÆN|²‚ê¤åर˜TL©Ê+99zï{ïzǯ§xœrÆL†k¬zÁ­ËK,"# ®‘4m´-V6Ìc÷ï|{é$¢bçžb$^×¥_U²ÖºÑ£²¬ª:Û`ž<ªºh±PêhFÚ9ø¥qÂÃf|´TÄŽ#$è°fÕŠÍáï£ÙØ”úö¡!g¹£ÜÝó^ï®É™õ”0ºèúñ¢eŠObúökÅ-²ºlô½±$^ûÞLóCWŸ§[|æ§ïZõœd`’¯O½É9I³XÞós>0¨‡¼âQiÌEI­LW£\WíϪ̓ø×ïZ!²C°p#ÆÁ¡¹Ëjòåõ fÁ`ËáÈþ9‰+ì2È¥5íŸz1¹Úî—Êxðkê'Äkç>Q_eÉÃT™VÅka‚ADšj¿8A4DxÅ!CR5‘Ä«fãÆ<øêðÕlX„jé’{0¸§i\#/’7”ò/¼$JŒ™Ñ]GѪAÎÆ:7½Ÿ  4€¢Ñ\Gˆ+Ý*³xçxl˜U×½=:÷™C¨wï!ã(úz>\ hÞ\CÅlVµo¡´­®.n¶ Ýmòh`G¨ž4U•^‹U‚ã5©Û{Î ¯G¯§eKj|'ŽS©â².>=&ô­¨*ÚXÆœDCʉæh^¼THÈØÌ†iê`#ß«ïߨôK£æÏN¦‰>dCÞêýyïjèÐчäg£2$k=ѡʉ’§MZIa7ß}çéW¨cŒË ¡8Ÿ6üúTûÛá$1Ç1­›ÞÎ÷x`³²Á£Í0⾞„F5°`$ü%'ùc>Ó3¢þº<ÎÖGÈmÌFÅÚ†„…­œeÙþñçëìÐæ.ûÛ¢̼ø¬— ¼—M}·×œ…\(—<0Œ‹Ô´{ëÙQœÂæiþø¾Gëì1$Q$Êy´M%ÅÒKceåpô¼‹÷½~û] ©½{ψ£%:ó½çG{³µj@™Yí¢8¥Yb‘KSY 4°µ×êÒ½{”ù<çØrZóoz.`=Pë)]bwíãÉg‘52X‰Z›l.L<:JÆÃ_½Èm/³½^ö¶H±À‘Ô 4`°qÚ²FX3U/3’7Þœy ®6=5 ŒÆ3GH=G‰GÇÛHIçÙçhµÎ$b>ÚלQ ¨Ó}>ö>}½Þ5;ZÂÀê“©ˆTLk›iˆïײ“Ͱ}é_}e)³»Ì"žC *‰ã "/g|úô¶u U(õGáì™0wö·ÒåÄ©ž1åà JοOxãÚF‰õÞôzöö‰Hýˆ\¤Gµ—7¡ûØED÷Ûµr$¶W,ÈüÝ‘Kç°°ŠšVªæ-­Áh誥=~$Z%ÆO¾zÜùS|AÀ|!y۴­Øo1„žG™"‰Dù—ÒÏ®ÈëÎMÕÒóæÑ CŽÖ0Í©òØ+5â²&&Ê&æ‰ZVQ£Áè$j⨷–ôúS&WC׬I€ÒJ¢×0çf¦Ú V°qóžð)ÆóÚœ%½¼O|¿yLâñomãœij§8_HG±ÑÛÑ>óN£ØMTÚõãÉï4ôÌ’JòÛr.Ä”gÚô*ùÀµÄ']%i´Î;cÚªEwïñRWzÆSVù/°Ì^q‡Ú±…3ßkÅ'¯&öÆ}╵Êó;Ëõçz†ÒKmpy 3Ó¬E%7Þ´oy/m÷Ûî~E'‹éÌI š¡W‘ÞÖ”_\B¿>L¢*Mm‘ô3m•›M:œV¨²Zç»86øÐtjè¥5ŒøÈ`Ħ@ý_y¤^]¥ Ð’$BŒÀå?7J¡“!ßzÓæÈ ·Œ›'½íèC_Sæ÷IÔ*~ýïyw×$»(ÇA<‰Öd¶Ô³½áL¾a4«E›²d.†Ð‰/*ÌÚáAdí{ÎýæÊïŸAí¯4¸8 £U­¸h™é%*ˆÞÇ#|„™„G×ÛÖëm &Siiѽ{Ï”Ê+—jZ¸ Ì›÷²¡dCRìÂIЏ\œÅÐq¸cÇÖ|!iÞ7\šé÷ÆÈ¼üR»ïxÔø…*¤ƒPVeÚ*ÊXË…O½ïoj¬"+úïq çã3 äãEFiÎM˜n¤§õÒôg…Ñ`ïË€1¯úðÔèð]¢-@˜ÒëDFxÌÆM‚TÁ¯V¸Ìk,%rý¤ûÇ׎!^Ä*¨þ>|(ùaª„Ñ‚QæïÙñ¢Ðûa› Ï~·bQúâÂBƒfã~}z11\äÐì­ñëÃ2òò&ˆÖïÒbù^ûT½tLêÅ 7ÃyóØÎLäÔZ®†­ëÃÊy}:Æî•QS¢œy¬{D}æÍ"}OàÞ)ÅZ ÌeÎA÷R×K2Q,ûKž¦>ˆ¹Pp}”¡ØÀ> /?y½Xé„, F¸0üuå|~óñë{î®ð+aSb4é_z)U½ŒƒÎõ²\GÖtUrÏÍá£sïtNâé¾ï{ÆÓÉZ Æ ô®ã­\l q±ù‡žõ}äûÉ!Q 6ûȾ=šWãx1ÆhÑŽ{õ \üôpŽÎ´Ôs€TGU¢­9È .Hx’úòÞW×d5D€à0…y÷ÙÂ<•’5ùeAGÜ d§CÏ 4³É ·è[†Ö™È>öÂÞŠ<šÉ”poÁæã~çm†lFöõœ\ç<þ½zÎuk­ñËëÈ÷„ (9ƒ¼<`½J ôÛG¦$y ùÆ2ÅïaʹvAÛQrõ­«"cYpÞo õé+¿i1E"÷ä±_©’C2Â^mïÔb1ÛãSıðžP|ã5eù|9Æ|ó–/NÐúlž¼xñ†Š˜‡búØé=VÖUû댧ºøKÔa‡Ð£Shœ9Çy6½¼2è}ë:ñռΞÃ×HØýìd|Ñ„Úú¿?iäYúÌêMà3̬÷ijÂ>Äi[_y”Gêãå;Ë™Z,²‰Þ“|ü|o0ëcëEæ×T‚¯+áQ *Y÷‚=?zûëáï92H‘_]·Mõ˜µNÖ1íï}>O›FeJϬ‡œdx7¦ø·Gª2dG°ÓT,B#Mö<¾O>-ïSƒÃ9Ы8:…ä°ñÖöªñûðÞ‰ä4ówõf ™ŸÞwìíæP¯PC¸«'òzl 7bjÒõ£Åu¯CÊ…l®‘U%ÅË1¶Ïhm'n÷Ÿsz×RñÁ‘,så°™FV´Òï “L Í"ª{®½x·¯Lx½ÖQ!H\Ûo[èùרcíx|¦|¯5Äôa2ĉ-¥PñX¢Ae+H¶Æ¬ñÇ.Wô×d^•f‘8é§wêz“k4鉠ãåÄÍñÝ÷WM‡»´“N´ÙóÌõÓ®mËX1šu·8&,L#>êò÷Ý]"8Æp9Œ8zÓ+Ц‡sIŒ˜ó\Œ9pÂ1’Þ[››˜¤"-õ­˜ç‚¥°WtØ%›€3š–×­c™:É•ˆ¡"åË—+»±0¡wHžnU x]Qîßwïw¹ÐºŒWŠÒÂky”ôy´Q{V6CQ§^Îí-‚lpĸeU-P~ôwµ\o½cHÏRÕ¯³&S¼DÚêùôàðò1(NeÑ«§™ç:sÒzíyÀV“ãXUj!µE ¨ÅÄ‹GŠ„X_|Æ——•̪aXŸaÿÎUEùþw+ùï’Ÿ¨õrõ qi÷˹/³»W1Þ|õ¾RO{°NŸ'“È¢«Êez©$:È–9™Ì”›´Dìv'3L~k<¤W]“R Ð59WgÖZy§uÏyع>¥ÒÈ¢>Œæ‚'˜R[È~¯­f8sU‚(Ã\è”ØDçDÛ¥òfævŒûèðå~÷›Ý• ž¡D’A}>ˆEFK¿ÐºÂI=_ØÀ£¡®«Y•äAT^J¹[òLE¤£Qþ4Q•qäó½ÖÑå}Š}£É0•è 6´€ãG•ÆòµÁ¢ R 9Kj"bM¸híc0¡F€FÌ”‚kÚUÖ\¾|{Ðh\– sÏ^ï\ƒL—väK»‰’ÅýÇ<¡PPPS½Z¦Fˆãq³0ã›%Õ3*3´é¹À,ˆ„ܹ)‡ö+¡»0ˆõ«õiEþ~ûçéÍFdÍ~±ÂFÈO;жöÞ5Ä•êé¢8Ø"ã^VøýwÇ—âÆ¾Z*q6a~£ÚúÞßzAy}á1&´ÚÅ<ìmæ0¥£1r}¸¹Á-Ô÷¾ËË}_˜— .b‚‘üžF«ýŒ??|ÇJûs ðòò<ÒÒÐòˆšòyÞ•ãr!…BS®ÄæiØq“ºp4×NŠæ+l­§}éìºäžžhlèD¦i"ú˜:G¨”^2Pç"—="‹]WI¬ê„ ÉØ[<¶aü¶ŽpÞºÆY¢´ã™þ‡¼ôÄV­V·§CN=v1ËÊ+ýY.–»«›¦®Qvdí§n›[ÖЫDÌ&Ӝܮœ£iÒ•pD¿÷ºÊæ5ÍnÁôg¶KªEjz‚çæ3³Õv¸ýyìaÛ0 ݬêÖ”ë7å›×jL ÎVæåùÆŒ€ˆór“8v­c*8åfNkXÛïtgåŒ>.ÕBf\ß7œõ³VZw5Gõv<×ff𭦫Œ ù®•ç2TýÝ LmÊ!”êïÏM'¥Ä®ÍˆØ®GL$˜³4Ey¸•îèdܧn›»nHXÇjÖàzëÀcy ç\Û’2]Ó«ˆF“U]3'aŒÎ3o5†ÞÔ–c0uX1:K8mV£-K`æqˆ‘Yݹ¢%*ÔôÚÎ2kbÂæwÔÏ"‰3VÒõfò£F2`8cE¬å­9•Ô“å[Ç:m•4èh½è ÷Ýéù»ç&W—Y”'‰åU ¶d0öIäP˜'.fç7ÎI¼¹Y±ÒΑŽsªÌ‘7ït7çtæc}YŠÖZ¹’ÇòŸË}Þfx‹ôTŠU|ã×líÝÎÛ³m•Ê´ašËŽe4›]ΩQAr3C"ÃßôÝ„Ò"Ôæµh®5Ij1ÉJ«Á´®LìER32-FUiªÅ¬5˜ye§ai•&2u¢˜a¬Æ ¢K‡QR0®&YE²Ö3©IÿöÊ&¯[lI”‘ši^Q‹³Z¶²ÌĂֺÒ8g‘&®bÌãÖS4ÂL,ܨö‰ÇÿÆÄÕÌôè%Ci\KV9ŒêkN®i÷·¹óyi‰¨B+†*kÌjᢅe*ˆžR%‡Qœ,DÌhåAÈBi2™,{ÕÌÌ©¢Ó54IS)ĉ uOØœ²$y΄™'Š™XO¶4 \Os}ëÑšSR妛 ûÖ<ª¢ëulÌÓ­F¢%-"£4Äá©ZúÚ=”eÌÊÐÆyj×¥ÈÖkNÊÜY•f™‘4¡´êæZÒlÍSJµ4uÖjÊ9sZ5Ys ¢×S ÍEE:7"b bP‘n“šS‘ÙµW-ZÆA Œ V­¤Õi«MbS±C–:f±.XºÂu¦ÓV™p³ B7J¦4Õju¥V‰š¤˜Ú¹fƒLjƬѤ³kI¨¦§Z-­7yï0Ò™aÌìbL å5«VhÍ4XãšÆcZ®‰d¥švt¦¤(„z=9ñÊ\ŠvŒºmlÉÚg&ZtµgKœ‹GJZš4£Mek%t R}lO z¹õ (Õ-[¦vfªQ\Åe V²³¢ÎüóØÈ΃2Ðk—*ÔÎç+8މ×X\CN2« Ì‚„¢:%u •Ó­KJ둳)ØœËkjŒk4´Ìµn²³yR¦¥bpdªVtNÆ´ËMudÙ®; VškV+šÖ´é˜Zš×&γ¡ ÚéÌ訖k5¢u–:t’ªõIyâ3+0튆×J;+iǽ<®ArˆÖV«™SR«S-,×4“<­7Tõcï`Õ*uLdÎq"Òµ›Æ{ímekYbTÉÍaa…mÑ:í5åêfYf²)q&Q*µÔÕTrÖ¬´®*Ä™,Ë(a†k4å¡gRÍ,´&:ØZÙ¥±PÕ°+Zº9≞úÎG™n›Õ…Öae6ÞÞõÅLF‰uf¸-U«/«ì±!E“Upj1®šÓš©ÑIJ$Ä´>Ö×g4ÂM%-s<Â5ž³ÏCP…$Œ•B1‹ ¹­–šˆÚ*æ³KÕé²Ô¸êë)ÍQ¥¹Ízñë)j¬FÌ1¸: Ns1©™ª#œ­-k!®T®µØ„…s•KCk!R°„W#$NÂé\i¬ìk-§ TѬ• ¬å¬µV’œé¬5*ÌÍió½áQQiÍs0:¬õ·êZ”‹«2U\XÍ5*´)d"—%UÌ)•,t³l0ÉTŠ¢4:˪R„u‘yÌ‘Öj]]™m iªåѱ´ÉÓÜ« ‘S%$¨”GN¥•£W5tÕffªv´ášm­WRT1lÖC-ZË\ì­¬²\Tà®5Óghª%¡(X†—®©„fž©AtHàÑœ¥Eõ*YZ³ª±š&MĚɕ"©ÔZãQªžÖ {bÉë8zªèB™O’ÌÒT¥t§íµCsìc\Å•<Ã7U"kb($a¹”Db¡¦,rºˆ«Sa¦•]¤õ¬¿FÄ,$“ÒÕiŸ/fß½cÔ8óR'‹6gc”r£Ã… ê‘ ›f–»ZGJ•®s•4švšŽ´ÕiYšæˆ D`³ªÔ©¢)œfRe]S¢kXK¦Œù¬ñ#U\F*r®ŽfÍÚęè¢r× YdÌå’˽$Æe[(ØÌ+æh…{ÛkÛ¤Ìë°æa¤jN¥­F²*E³Ž-U5®®ß½æòº°—!iб­Y[F°%œ9¿5ž²Ý7+3M6£)-@ÚȲ®„¥ÃYMK÷¦õ4Ðs¤VIÙ×™ÏXÖeRduªh˜zJçö0ºT!‹Šå˜XJ"y¨¡èŠ–‹‡šKU4ìÌ ê¶i4c5Õ˜kE®®­kX­]™‹…%Ë[-{ªZbÓ,i®„¤ ‰ZäTÎÑA Ót‹¥”å–iZk üž\TÅfšê­u§N³ó¬zU1ihÕ³TÍQ c›B¥y©‚bõ‘ T*5È·\Ñf«e®ššå³@­Ë+j´³5¨è•e2åZ-w–ó-h«S4´‚ªê'+§WMt«RjÁ¨©Fª¦3k&Ñr”%E4"×K«•Y1©3¶”ÚåiŠë3- °Ò¡b²Ë¡k>[Ú°°Ñ@ë[&gÚÄ$+4$ôòE±=ŸFÕXèµXlM ìÚ²gÏm$¯Ûd“¥¹ö‡"|›žs ÔZ¦:fkh£TÄ̶kb8ÓV­«t6±ÐV—9¬Ò«ŠÖVEÖ¦©©ØÞöÅU2¬LÂ=#É-ÎÒºjiŒØ™Œ vu Ò«uÌ–µ‹7åêÅ´Ùa…©:³U™k)QÁÇÍï” 3Uh´–hµiÃ5Lê“ÏzË™YM#1×ZiØVGG9]~õÞrªóÍœ>¾= âe£ª­j´˜ŽT&£Í¯k4òDÀÒˆ}XHJ’†%褯9YØ£mÚX††Du“R¡K2<¯©Mëni!¹’š<äÉL¦g-¨À‹DÚí ÎDv˜L—b©P¯”_ Õ \\ýª·Ì¯¢Ê^°«”ô‚+•PØá ùþçìý?Kú„y9ÕÉΈ ÛI´ C~õÝåŽw:×o—fŠðŠú^y¢æ‚Û£ùÀš?=Óžå‘N‘C¤RIÀiŽý\=iÆ›¤ÝóÙ®\‚5åÊîäÑ_Ó¦<«…Èܱ¹\Ñ%ʦæiÕmfÓM•7Y¡Žgs¶æ4&:qD"}ÖG M]ß g§'dâNP$éeZ¢c¤Y˜ll%$X×.&“S¹ú2öe Pž^Z¡‡Š¸P͹ƒl9p îó^¹ÔUÂ'yë@¤ð¡<}£ÕÜ zé÷èÇ“”ï<ê˜Y.Hy[YÆf cª«tÐZÕv•¬7ª6'jãsÑt× ‘räZé¢mR,å2»¤ÊÓYd(¢ní”X.nG1ÇDŠ_=©¦FIV´ê×%šXs:Γ#¯»Þ¹Ò¦vpÜÛ”˜ÇLLÎÆ«Ž38VcK2'téÜ¥Ýv &˜kœ€£$Âî»Ë™çi$5-繕ÍÓ7rÔÄÓ9M@ÒîK,‰Ï{¼Ø^G 0uۂϺ¸Q@o7RhÆ]×7wåta±ÓiÕ1Ñdïšã½Zu:;~o=¥¸*3ó{Ë¥ ë PÔ# «=S]¶Õy §ãÂ^‹Þî)ÈåºÑX—(#§ö Ãwï×>™^º’y©h>Р¦u²¿P𫞆+†v‘˜“Quvã§µüxÝåÀØÛ›¦Ü¹€¹tï½èØc›Õfó-cÃ(åe©³«I§iƃaM]Í[Vyj‚{—¹TµÅ®ž'…„$E*zEë\Bb… óÞ•®ãΗKc»Xa]V‡emümçyØÚNájPtŽs1|ÞUç-9½ë¯]×.cïv1æÁ‹–,t¹Ž VäE幓÷Z÷»çMsšÇ5sb"ãN×émz°J± ÜMÙ›5v:iÖ{Þö®ƒŠ•3 ltÛ+V»RÓs9úÙTÔóÉæAttð)Ê„ðÐ)Ý!=DIP½’s2‰Ýt‹hŒÁÉ@Lñ (.áÒ¢ÂpÑÓ%Ó›|·5yÜfØÜÑÝv4]÷t·›žUæÅ壘°ËIŽ\¬ØÓµ]¡:lM4í¶æ¹n3åïu£F}Û›ÃʼóbæÃ[æë×n•ónc)áx쇞ɇ=½uzË¢áQdCQ’ÞtÛœºl Á«—ui7*ÎiÑ¥3€ØÒtéóÎÞ†Æ;«ç»yÓ±ÑYŒ—HH#MÃ{·½*Ô3 ) Ï®ÃÏ™òg£$ŽjÑRC%•V§[MiÚàpU†½mí°Î ê÷ W¢æ%^×fct4²…m{[#ªíuAQ°\o©Þ¥²«¤&H¹¡˜p«ÂÂQB*/{vÂȽ#©ÕúÙIxQR>fHwõfŸ¢­…mõw½äϼ}øi¹ šë$jï3eû2°¤Ä˜U¢ápŽ~ûGbaxUê.„U‘¦»ðŸÇÛ÷ïß>ØÝ Lœ” ²#­Š.1ß“»Ù¹[•ÖiŽ´§(SÉ5C䯕¢yòeƒù &hª ½ÑÓ!2Ê#2ŒñµÆ â{¦:{¹J‚Af®$œ†×|ÂOO9‰R}8Ù’Bx3Ò½wh¢‹¥Êæé±™Ç4ùz²íƒ¥[NJcÍ%]טsUžœÔ¼d ;<#U¥¦ù¼ìvóepjÐH¥>pÑhY(‰¹XEÆ §*v‰§N2ÕÊ1Dn•ÊÂäQ£DFÉÍ>ï/-­wvï½ãJ :C§§…Ú8^ÚzNÊzW9ÊS3F7.rй·5ÌÌ\Ô½ëÈznsÆ×(/. žàÏÆ®•c*çK»çŠ÷vŒ–åk˜«š"5Ê(Ñ ¯8R%3{¸ Ç7MPi59ÙÜ;¨¨¼¼ØÕäî᤹¹›L®V«iÓ“ƒxC rrí¹ºû×´[ˉ¹Q(Zëäÿj™òÚ¬LOšoK¹£& !®;·îíæ¹¿7°œ`䕹›Z±¤Ý,Ä›IÚeaõ7=©Ún•i¬š–ÙÌn‡Z´ÇN×ÐOfsÖ¥DT¦ÿB‚Žî‰·#p º‘¤eÙÍ~µž´ œÕVSa›4;ísÈçe×±vE’›˜‘6euWbiµu>tö`îgÅ= …/\¹!I$BÅÙ㻿ŽIHIƒ1éßzç7«KUZ\náŽ2õd4<uWm.*Ú5›2dh„%EDœºÏG”¥Uæzöÿ–nvç1»¶Û¹ªaŠdV©Ö­´?ü^BË1P#LÛ]ž‰5J̶K{ÛÀ<4kO(Š&yÎsCœG *–•SYZÔ´v›AÆdgTXڬʺK«¦Òe'yíá›ÿÔÞRE®µ²¹ ÎÔŒDŒ mÖ^’µœ532äE—HÍ)K¤Ê¨ìÆ:´²æ×M¿þ¼ðŠ Išj•­\šûÛÞ×hä5ÒÄ%÷·&¹‰%jAT‹«…è•*©OE‰n«CêÞMš¢ÑQÖ£•ÌD”ÐС,¢2{„Ór°äƪn„bº¤)&e‰!o{yð$¢21-#1DÏB  =!ÿûgŒ7DEÕK•¤ŠmoÕê£Z€©••S­bg1—ft3+šåtj*ü³Ù²ºk$Ó:º×½>ûÞ' RÒÕH´)+]JI^ÝnEâÖãÔ,5§ƒ“oå·½“£5Q+ZÕusS*bU°K0Ѭ»EhêÂáa.”G¡EJ’õ³y2êÙ­T˜:œpN:Ršv­­j–\)¦ªRËZ«²‰jiRüöa‡„ŠEªéI(R¤d£EZuÂ5—–5µ°¯›Æõ§U2[X4˜ÊÓŒ³)´¶p¥N­MWDT6ØÍ“¦. I…•­æ½­ªÍkÎc(e¦ºn‹žEåŠI&&FØÙÓŠmj¬FYZ°Î±Y4+­Tiœµ0uZ´ ¦3a™a¢hb¤J!S®38k­V¡/&ódÕ­r©×*”¬¢œÎe4ˆŒzìàjV¢¢êbª$Z¨=hôDŒ-rÀªyÚ™•¶éwTô’Epñp­>ºõ(é²î¬»øöw–FQWsE\§ë!‘¹öäI'dÒ™Íp´•×ÉèÔÆ™Ú8Õ©k:ëE¦e­M I!Ûõ½½LcTê¹L-6¢ÚÓ«XÙ1®‘•¨àÒÖªïÏ=bÉ ±°…5-ÔÔÇÏF¡”­¦¬ùcczt̺jÓFh­•¦qjg±n­#{ÒΖU°Ô%hiïvž2Öç'& È;*^®¾§1AB3Es܌҂ÚÖ’Ž™–Y²Ö³™©RV*h¿!†Ô¥M›R­˜í-IÔ‘QWÚÊ#3%úìâTGÖÕ²¬ä”*µ.¥©?^ò‰5ÕJ’¬ÙÃ,ìµXÓ1Œ™‹2æ¦NЫ1e­F­eY•ÓUX¸J¨š+Sb’ãfÔVµ¢äégªöÎ×l¤”£33B–¥³idfÉ…£æžÕfÅkia¦ÇN:XÍ4¹™„bkSçk=R™œsÉÕ§,V¦uOã^Q3Sg&kõ=ŒÌÌWPkLW\µuSLÕ©­-•”…s¬Öm“T´q­«VUVµdšÒcK~NòQj„=r“[t&dŠZ†–Š Ajæ)Faù,ÞÖéèž[‹¬­*åÜZ¦qµZÉ3)`¥Ž“YQšŽS/›Ù½Š«@Æ%EÒeªiCWV©\´«£"­P]g0 ê{ªÔ»S ‡XÖ.»VhV*U«-°Ò¥ÅVR±Zc[QSªÒʺLÙÕ.iF–¹ÍbΑkUÎcI¬Ú3“M©)Õ¬Õ2æN³7šÃ{Y¤±ªÕX˜«Z–®a±3—X«0Út©ç»ÏSÈZÎIŠÚë$Zº¶©ZÙ‘«Ú7mÖX¡¹V%.¢yž–bå?S¦&Gc Ÿ^4:ªÒÓ´MYRk¢µÖ†V¡5– Õ8«0rËBëXe¨l‡S¦¨¢Æ{רÌ3J]]™µEœÙaÔ­WGX*[ëdzjtµ§JµuvÙ_W´¹¬&yײ‚•Ë–\båE0Ý "-=ä#]À=Pó]t7_D}ySR5BMHË5U,•\+KYhé¨Ù f¶s2Î69k(EÕ[EÍ5©­5“fw9µj­V±\夲¤®Z«ºQå¼é\BÍVU«=wé2*TiVM™Ztúïc†ö‰f”ju –TfFtÍ%ÊV˜¤‹hÉÜÊÑ­e3$8å¯,õ]U*ÖJk ­ ´Ð´LIJ›F¤y ‰¢f¨”*™¥¥}쎄HZ™ÕÅ®² åÖùîýõõ˜”é”–?^3™½©¥Ò¥ Š’­X¹&]§Ns‹•œuˆfs$U>ú÷Ô­m2Å2ß{Þãų\Œ,0¾Ó©‘"¹kêÃCóÉ"$‰-$p舡˜U¤fDZèz …&ZèûY‚¹jMh¶›2•ËEÉ,EŒÍK,沦i}^ÔæÕ¤íLk’æ9]*hÑfùopÁR´Ö¹•ÊÖ1f²¢«ZËX®Å¬æ¶×$¬ìI5MWB;gœ±›K\òÄW3FãûI¼u–\q¸@tvÉ$y݇èØ;CÜßE”E»ÞöŠjUI}ôWÒr3Ǧ$®!ŠÔêóiþÏÐ@«g袉þcey¼Ñt§ÍÕ Þëw•^”%N½ö˜ÿ¸áѯtI ÕëŽiyN›‘!ê•d§¦IâBh¶¸È”Ö¬ôÉB¬Žv抻§i¿­kxI‰ §jŒÎÕn¹²W$åÍšå‹srÀ–é·,Fåƺìë¦î¤Ê»+J²Ñ6T›¦8jVTžPž ƒª Ôö¢êâN^åázg­°½Á¯íÙåZ*ò1.;®ãŠ0msu·+ÍW#~mâmèî×›i±Ót†è+cµ[N‰W6ˆ6 9®î+«ÝÒ·‚×v˜ÛM¾µ±Ûæ:TåÕÎVwj-´XÝwnlDž:yBxÚG·[Ê“]ÝÌ]5"Û–të×®l‘ˆÖî]ÉVòÅ0zWs*îòm¼ðéáWDÕÈ幓NråFŽÓM¦Ñ-ØÇz»Ç=É $• Šª‚ä^’M]³3ÑÓr´ë«uÍ4Ð/]<¦¡’8DÃ*ðL ?*皎˜)Ç[§sª0ÅYSU6›i&£[Z‰š^” Îpù3Ùy†¦I‘{­K™åÈ=\(@‹­bí4“etªiЧ‰"¾\2g—î¸R]מìÍŠ2“ZSq‡¯=Öe®gCC¦%[V§NǺv§r(d]œÌÌò2^¦{h̹„Qå —Ü~?~+ô~{¨,žUe’©N¶z I HyO #ˆå ˆyCÞûêÛ܈)ó}IŸkÉå±»´UB×õù¹sPß[»2.ÑÊaîi+‰âLç'/(ˆHÐOHŒ·á§q¦$3<¼£¥·£½èžÈØL™Â•Ò"Ð: åå¦7uÚùrñ1\wY9§L¥ìÞ»G–ØéÐˆ× ¼ÞEæèj÷zöóʈÚór¹‰5Ê.[šü¯,”÷¶Ûûuêä9xé!üõæ§¡._›†¼·MËy¹¼%¥Ó¸ïãiÜÍÙêµ¶Wc¤êŠ‚<ÙYèy¸Säã!^û¶½#o7#n\Û¦å^kžI©‘sÞôטÑFÒ©¦6³†tÛÆÕB_ 1®ž½t† $žžPwM‹4ÆWN1ºn›N裵OFZ8TBA[‡+›»¢á`Ú5Ë”k6åtÔ+›™Ý75iÓ¶MF"¢¹ŒkÍ^j8¥å?&W=ݳu\IÄÔ~skæ¹gÝmÎU”\æ57ÞãÍÊÜÛ—5r9¢àQ!âfˆÈO#Ú…tZº(Þ‘Šæ®È-ÎçhuóÞêqA¢æwj"Æ›ÎÙêLt³ƒ¶œUýmã?WQJ¸FE:yIîKkR,·DT‡)“².Tê§Š{Óóuô®é‰§bqÄWB•Ê/L' w±…м½ÐhÐ\ŒS7™5Âx˜x‘B]e®šn…¤¸¨êº˜hz¨îªRˆ^„¡4ªOÏwt0mrŤÑEco½ï^W—·©Øãyƒ•4é*îì³pO(UÝ Ôç‚ì÷“|×Ò¾`Ä|±µÈ¢÷væ¼5æ‹ÕÜçðC ï8Uã$ëbEÑ%N[`µ¹§uy\¢‹ÊîírÑîjâN^â{­žã< ÖC:ª:NÎx'{ç.íDkzmÑÔÄ"»üû¯4M7š1¨ž3ˆ$[„˜“ŒŠíÄ¢4¦C|ñiJ,Òc‰7ªi˜ÄÀÆ,¨ÆNûh²™¢È%‡·YÜ~Ï•÷îÕe~;öUøëÇÛ¬D7·®×ЉDÚgÃ7ZØÇè™ÉìfŒ€¯€¨¤R27¢¦@2Žtš'½#‘ ÎZÍxo¿ì{ný_£÷oi{Ù××ëÖ׫=Ëv ÞM˜OærØ£Ak­®Û‘ø[Shu8€çr#æ£krãÇT…nZ:Æ!¶îCÍ'ØôNcõªTðr'®+k’£d‹Æ:œ-±ŠlnµºËa¨’åWóÇ1ÖÓè­Oˆ-Žª&m„j¶µ~n<ã4hmiA_Dî›ýWv‹ª•V(cÆ(†$hÒŸ®Ø 1¯‡È I=iKj¿>}ï}L=ž3)¡© ‚ø}©Öÿ€ ‘ùbø/†Š·ÚTGºÕ7íˆA¼„‰âmÆÿ+H-m™KÕ¬"x߯ç¾?kÄgŸ V§úÈ>ƒ®|y­Ým@˲$ âÙ4Îç³£Û:ü”æõïPI”…/†#õÓåã¢>|î÷é#×j¶ƒhA#"j4 $‘¶µn–X…ã8Œ¢dÈçX‘Qñ`¹¢Á6ц󥛨\jÑAj÷·>{ÊûE[þHØ&ñ¿¦'  ý¹z®íš¡U,ÆÆ«xçÈ¿[`bÖÓÖF‚ âA4á5 ±ß›°ð×÷kÍÔ~|{£F÷׺·! Õïõg­0éµÎ.Ýj}²Æœj÷P›­¸%[O÷}:=èèмj‰€†¿µ,V'ùóÛ+.Ë>d ZëÚ¢$¥ô«º¦Å×&ûÎúNWnß4ø± ‚oøÏOwúùùÞ3ûÅcB¿êU« 1Q†¼ëÝ:ö׿>÷Ûd·Ï/{^û}è²ÿ(÷ß{ßìØ6Úo–žÆí÷·­ì÷¼Û­»{Û=µ½ïw¥éÐüݾúÞìÜc!±X«e®PÈá#k€QíåçöííÞ³ÞïnÙ¿>±ìs¶ßmâmÛÚÑÞvYo½{ÇÞóƵUªCHÔo€¤C$#âÒ‘AB5”`ˆ!ªa$‘A&!V©¸F˜p†8Ú$MK&ª­fó=¶Ýçf·ëíj_o¾ÖûóÝœ^üÖQ{o}½ìü×çÍÛií÷Ûåéחξöúóš×·¶öÖ-›YÛmæ³Þ×¶Žtï ­ëwžÙÎ8é|ÓØ§ÙërfqÄãóówË¿7o+ÛYYÛÞ÷cÍó8¡+"¼#Ä Ñ@hÝ„nF7µ‘VÅ U¸åO eŽÈ €(ÅIÁ1S)k,¡AQDq¡ÛžV%ïVÛß}z}íÛï­ïf‰µR-Œ@, Q  7š*ZÔŽVÐ"’”…‰â¥ŒmDÙ¤.2%6ÞIPƒÔR =·æZŸZóÏšqo¯zOš7½z\ÚÜ6·½½í{kß^Ó-¿=ùÛo´cÞöÖïÍ»Û|ÒIùbmÐG–›Ûéò½¶ßê~³ÛB~Ë~ß^ó~Û{6¯Ù¾ÛjcXË}íy½¶µ½»Ï{=i #åŒß-ö¬³¯½åï—½»'ÚüUå[vüÖïÍg¾Þ6žÆ^_{qõòÝ––ÛmÇxüš÷ÚÛM3‡yböÞ×¶í·6Ë(öÞÙÏZÞO{zƒ!‘âfµ£ƒRÆZO_,:ókg/µ¾ûÖöžö÷±÷¤·±~/;Ûñ½½ím™«Ï½}j‘„r H„˜Ä Hí-m6nˬû[žÝ{Û×µ¾ßtOÆ}øß8㯶Ûí{¯3å6³»vÒi®"&ŒÓõؤjÆ¡L‘K`Úq¼4.2EL 6ËFÓ“•2’´(>*(›`âÖ¤‘A„ïÃnüÕŸmówÛÓÐç¶ýoËó_6Æ?7e{Ÿl›n½íÙžçGìúú7}é{óîðòßI3ÍÄÛ^ö¶€¼ÞÞžîηÞõãžgµïv–˜ vgÛY–û^ —‰Ñ—½¯+ƒ¾yãíÞ]½©×˜ï›n¾ko¯nó{w·½›ÚÊ4Ÿ=÷Ýgg½—Û­·×½ö{ã²õ™:{‡æýžö[óz^VÛ­K^{϶³Þ½{íâ ï·»Ê˶ãÛx³f皌íí«lûÛÆ·L­·½»Û[w½‹mÖdG>ßÅšZÐÞ{{ÝäNp>ß!M•Áe¯*&땊Å#‘‚™R A±BsñÓ)%~<†ÞÚ´µ­™^zûëÁôú4 ÇŽ[Tl„fA1NQ/‰ß}e·ã·­ïÌ_Œ¿¾×Xk@&@·,t%a)Œ@%ãíxÙ´ï½…>ÜmÞ÷v—¯MÖgsñ÷çÓó_G·jõ‚ø÷ç´üØŒ¿ä“lñíïmÙ{ÛkOÏŸo>ÑzÙ{[+Oi¶›óö}÷âonukB)bZb6ÆÚh¨Ó@ A¤˜˜„" cÉ\@b·d2ët~F׬ÛnÓ½³Û·šFnÏ÷m/o=ÞÍn4Œëͽ½f1 P`@rdòKíŠêm& &ÕÍl¨bky­ÖÑ”6Ô^ûÞr“ç½xOjmjÎןO¾‹;ïnï)úÝÚqæ2ϵ›kX'yìj‰Éò9ºôÖ›n5kZ Z†ZXVÕl"m UÄZðÇ”wĉkš«´q±+RZ”±0»ÛgM¯{iyØ}ë'ÚÏ»^ß}¾FB72¶Ú¤ck‰Ù©kv"Dy¶Þæ²óRö¼ëߥ}/}ï7çÚúò¼ûEŸž÷k}ù¯GÞkÍ›¹;æxÑ|×·Íò×µï6]íoõ½ç'ž^§Û{Vöß7ß5öÞ×Û×§™ÞYÖ½yízÙiéìûÛñn‡ßš^±¾Þ_o½“}ì÷Ë|´öçé2#]žé\€®QáYzÐF¼üž¢³2ÔvCÞ½o{ÛZ66kf*ö´pµ†Ä&;}­TêËy¼!ççµ#m;Öï^Åæ¾Ûã{{Ò¦×Ç·|µ}µè(4üßšu @ \„¸ÂÊÐ}›_ê­}öçmnüZùóy÷³—·È…EI#_+54 i#Z÷æéœù6¹)~TõØ“ÈØF˜ë‹^Ä´Ég;ÛZØ­·æÈüÍgÊûÚùó¼yåä{~{/½ï/Ñfõ­>Ñ~o}·|üdž5žÍ¹H3gc³$‚Š™l"0&ܲ¹2íÞn-[g2;³oµùïì³·½èo^ó{Þî{Y³~=8»Ãó~LLJ:)ìj!KßmzòÛñÝêvÞôí¶×{oÓ|·ã7›Ûg6³Ï6Ç”^Í&/7µâq<²íÔVVÀZìƒÙ¦±éeøï·¯vY½í½nNyžûß}³O½ïe©¶¡·½óß3möz×­mö´â*B4Ôp\UÊì*˜iŠF†÷/·dK-žõ{òo/ËØöö÷æû”ÊÚÑ‘ˆOHF4+[ Ž-¨“{u—ßokmožgm½ìvÛxŽ)ä™ 9q7¥SM¨dµ‚#qÅ%„–ˆcˆDzà)Ls\M¨Ê@®ZËUHŠ60»:0ëm²7 ;¢©={ œm¼ ì`ŠB ’´åNµc‰Å1Ö£¾m¼ï¡ÞÙ•¿qó/·olçàGI\׸RŒÚx46HHЂ6¬M8VÉ2ÔÔ±<‰ã££V"Ë_m—ß}6Ïm›×¿7g¦ü|’JdF&ªhaReTc"誶5T’NiÖ“òôL¦{lŠHÑ‚tªbvŽ"»[£äÜ"H«TR¹[Œ¤ER!)>y¤^‘¶|÷¬ÚÛkÙ¾zöúûéœØµ»\PuÆœ­AëQ±Aº£H&ÒÓN8Û-ÙfÊ+]qD3cN°UÈ¡HÝNJØL‰£`15d€B”* ZrIG»¢PuÖV”-*¡•Ž`‚l`(ä`Õp­à-Ç4z7Ûó}§¸óÎðÛ[n~ËÜÛñ½íÈr8ŒE,Oöû=W+ù{ôÛW" ‚üe—"€¨B @&!À”ŒŒË8P4þEA™MO?ˆ²¦1µãL aLZe:ç(I™¹j-*ÅÈ^^ß_ä –S—Ë|ëÏŸô>—;ÏDŠ‚ ¤äNFúöøÀ%ÈôS£éÿ°¿Ö~¾G¦>Í$û]A˜¤:¤êß·Çÿ”?æ’ÿÐýîÿÛÈ}äûÔ“ï§Xu§àOÆuÁù:õÌ¿ÿaØŽ×6ŸY;?ʇj=]!í“ïÒ3nwAÝ'æο¡šéõ/ë9šAû?h=Ú|ºB¹µ{Þ=èÿe ï“¿<<†| f€GCÖR|IAšøBÀ?õ¸ðÃøˆ‡ŠhÇR4`iÈéaÖ£êòýiþµëýqu—ë¿?WZü ~Ã?Ú£NùòóéyÚ‡R.­!Õ›z@…«H5Þ¤„þ7ê•և៨ý‰:ÏðNuªÿŒ¿eó÷ìëþJ~Ðøô¾b¾˜úŠy”€Ù&ª ³|z@íÚ¿‚¾¨zÉüÑûܨª ÷®¯°Ø¤a'Õ¤*{'ÒÛb).Ürxb[Ò9 K ˆ¤‰¸w#þT€Õèwnñ}×í‘ú^¶Wíêþ‹ÿxºÇû¸ë_6ûý)ú¿þ.±ñ„ujªü]E_¡ÔL‡ ìéüO(ó—õ>ŠêÕR9O¿®kõ õÚ•ðj?iÿ÷ÔƒUÕjßÿ{u„ñÜdþkéu§ãN‘_­¯ý†8há¨a¯d¥.w¥vâžå ?„8b˜ŠHwt‡ G³¤aªu9_óÆ"¯H>5 1¹p×öa‡ÿ˜[è›úû²þÛ ¾¡}üFO øX)¸\žàOƒrˤ… ¬Ë€nW´ù]VáPøiº¤ˆ¯YºCäî‘ÄRF©» ­!¬ôrº.‡UëµEܽ÷ÒÔ«åO‡Õª¾Õk©Ýëõ.äwOÑþù“ôº©¤üçzêÕ~Þ_ƒÿb)!ä ÎR*€d¸8ŠJ•’$3–úüûÁýŽè×ÅÇÑ_÷~¯úµ÷:¯‡R'ìùVªâ?=©Î—çùEÕö®_ªþM?³™ÄRCàV£çìº@@驼5?Öýq„ÿÏ„ÃÔOƒT/üùέS™sOç~B§ëuUðê¿Q/8ëQå}ŸçS­^ªõOõ=IÖŸ“¯¾Èõ>‘uj¾ÓRßs“òߟþûû¯š%úO¬ê‡@þcQ?p¯øž ½m/ŸÿM:Þ«Ýê_¶õK­Wêp¿Î?/êºÐz¿â¯áóìçÇóß}”þQ?Õõ:Õ}ú>ÿ?_{‡s÷5z´~»öþG­¡ù-Hûíü|Ÿ[Fsóz©_ðQþ2_÷£ïªýe4ˆLærüèÕêQgSü˜ûõŠGêU èš¾oR¯âQš¯ÓÔÌ™ÕüÈ>ò«úÙÑTÕÿ·Qý~l~?_OȨ~iO¼£5LéNŸr?ÌK4¯ÊŒÒf}zúÙ=jÿ£B~ŠÚÚJÕðõRŸ²ZE¢‡é¡¢¿s#Hµ}oT­ ~(h‘¡F‘¤Ð?[]¤~ª«BÐ4SJKþéi&”šF•jü¯Uh-! Ò¦€õí©_²§Ô!«íº­ J~/ñèÒ$Ð4Sùõ'öi¥-_qþº %ÿZZWկƨÿb¯ÒQýd§þè4SW·ªG÷¥M(ÒàŸ¶”ÒªiCJ5 Ô¿ì- ¤šSû´™Ôh¯U^µü·DárOÖUȹ'ß/¼r¯îþÞ—àßsÑ/ÿbäŽRÿÖp8N\Cˆý”Ÿ>ŸóTßœê¢üQ9.Ur¹ã.Ó¥r·ÝuWЫ”å#•~UôGŠäp9qpÖô]†Iþüªá“—•oéú'%Ã’àœ§pqÿ+[úÿÙœ—rœN*¹+ŠrIÄœrßÜu‡+—îW Å'î!Ér\“‘99+}ïD¹K’q9EȹHå8–ýGC‹”œ®+Š\\œ.S‘\®+‘Â7ú}pqp§ ⫊âär.Tà\ü’ã•ÊrC”9\UÁÅĹ‚âß…Ós‚åW*¹8£âqGÇÈßSÔ§8œ—+’åQȹ\ ÄàßC¡ÉqNë…Årœ•ô‹€r…zU¿qSV]Iù©~п§¨ÃJr_>®U?S_{Sûä¸}å7îúp¸Oë+‰ú!\©ú“ó£‡Ü—${ŠõRä÷ò¹.Rä÷Rä¹GãEÊqGÄâàå-îúKp9W•Ä.QÁr§Éo«êrp——$äå8p¸'QÊå.NO§Ü®ßcÒ¡ÈåG9*äápp.NUp·ðIÅÁÁ9‡#…\8£Šàå8®KˆßqÒ¹9Wä99Jå9\#8\N87㺧\C’}ÜNK“‰ÉÅ—‚â~1ʹ\\ƒ‹•oÐupr“—#ƒ‘Ér®TqW"å8år¹W(áp·ô½—äq9NCŠääç)ˉp¹W§.““…¿»ê§*rŽNN+‡•Érç#‘Érœ“‡#•r¹.C•ÅÉoÕtN)Ç.NWÁ˃‡ÄåÄä¸.rr—®¸œ®Tàý'+ˆåÈáÊäp¹W8q8\G*áÈrqp§S’ß]Ñr®Jââå+”ààäåp®N\®/¤_Göª~ÐùåúiÊrœ«zºOÔ“Öž£ú²þX=OTõ¯àcòuzËA¦(üa¡ ÓDÎVcêÑõGÕ_V¯«;-õ]¥ßk¹Úî»»v».çuÚî;w;]§wrîv§gtív®ê»»—eÛ³±ÜoÉuÚ»'qÛ¹Ý;«¾åÜìí.û]ךòžcÍy<¯%æyUæy/(òò¼Ï*ò·æúyžª)Ò#¥ÒtºS¡Ñ:S¢º::.‡IÒtGK¤éN€ètºN‹¥Ñ]:EÓ¥êFç^Uåo1çʼך¼¯4yyWšóyCϘóy^Wšy«Íy¯'•å<¯4òySÍ¿Âéå/>cÈ^KÌ0ó^e伋Íäò^gšóO'“Éäòß?²NÈì®ÅÙ]’ìŽÉv.Êì;'d»ÁØ»#²ìNÊì]ŽÊ]ŽÅvGaÙ'eØ®Áv]†®Þ®ÚµÛ]±Ú»Wjìv'eÙNÊv”ìvñvNÈì‡e;,ÎÓ¶—mÛ)Ú§ÞvÇhív×l»Ghí®ÕÚvÕÙÙ ë´í…Ú®ÙÛ]©ÛiÚ®ÑÛNÕÚ»UÛ«í:¤v»Wjí§lí£´í§k´vÎÙÚ§hí¡Û;*‰Øì«²v;ÕýWU;;Ø]…ÙNʮðì;+²ý5Ø]•v;±vWeÙ•Ø;ŽÊžãÝCÝä÷»W꺽Ð÷W¸÷/up÷åî½ÞëÝ=ÃܽÒÿ6^èÎÍ™æ Æfffu3uœ5}¯Ug3YÓ2gfÎÌÎgggLÖfu™šÎgVq˜Î&lÖjγ™©š³K:jûn¬ó3S5œ3™Ù¬Ë6k:g3Y¬æk5œ³¬ë4ÎŒë;2™³¬ëÆxÊñ¾Û¨gwjwÕÚ]Ý®×s¹å<žoW¨õ¥tèèt]+¥t«§IÐt+¥t—KÔz§ªz‡¨õz‡ªœ÷]yjó<ÞkËÏšy'šy<žG“ÍyN®Ï/+Éæ¼ž^|ÓÉ伞o'™y<žiÒGDét]+ èt_«ét.‡Jètt—IÒtéN“¡Ðè:K¢:N’èº.‡AÓ™Îs9×;œsîeÎçs¹Üã\×;šõ::‡C¡Ó¦¯Çê]ItN—J'K§EÑt«¡ÑÐt]+¢æ¹ÜÇ3Í9£œæœÜîkšçÍs¹ÓÌsŽsÍÍ9ÇíÏØ[z¹ÓŸá“ùë’úË“”åÊ9r®QÊ9\§%Èr®UÊä9S”räåÈr®NWŠã\Wˆq8Î.'Œq¸ŽkÎŽW!ʵ~UÆqŽ+Œ¸Î.+Äã8ñŽ'ÅÄãÆ=dåÉÊr¹S—'¥è=%é=•é==#ÓÑ^ž—¥=Ðô—¥=¥éz/CÒz^–¯Çê^—¥é/EéOJzž‘ëSŠã8®1Æqq\kŒã\kˆâ¸¸¸—¸×ââœg8Ün.'Æz®IÊýZÕéÕrŸ‚®U÷SæW"å\œ§"ärœ£”ä\©Ê9NNS”圮SÖçÎsssæœç5ÍÎ9ÜîiÍsN|ÜÎsœæsŽnu«o7¬éÐé]£¡Ó¡Òt]‹¤éNK¥ÑÐé.—IÑê½G¨õ^ªz‡©ê\yy<¯4ó^g›ÌóO7šóå=Gªz£ÕOQêz•ê^£Õoºõ/WEÓ¤èºN•Òèt::.‹Îæss9ó9¹ÜÇ5ÍÎæç9Ç71Î9Üëœç9§3™ët«¤é^³êR¾¢ú‘õS̹ó¹Î|œ¹£•ÊrŸšåÊääõ½].Ž•ÑÒtŽ—EÑÐéN“§C¢étº:.•Òé:]+££™ÍϘæs§+•Èr9S•ÊŽ\œ—'!Èå9\Ž3‰ÄãÆô=CÒz™«ïz§çyùÞkÎó^g™çû9æ¼ß¼/3Íy¼×æ¼üÏ3Îò¼¼§”|º¼§“ʼ+Éy<žPòÄñ<|^3Æœ8p¸8)Àápp¸' ‚p®ÀáÀpjúN „p\+ƒ„ÊÊʲ™L©’Ë*ÊÈÊd2²XؘËÆÆbcÌg®VVL†S%”Á‹,c€‡à%Q*Z¥Uã¥jÕšÎýJ½F!ª5VªU¨J£T*µZ­V©Tª•Z¥Vª•R¨•J®ñßw÷ó½wÓÕëa†…`zÌXÌf…ƒ„Áaa0¦ )„x^ ³X)x5šÃXÅ`­X­Y+F©TJ¯+[F¼<Xð¼'àx¾»‡uÜw˹Ý;¯[¾ï®ñß;ïW€ð¼/ x=X 0X0ÂÀÂa00°``°¯ÆXXÚý&¯«UxòõÁX¬•’³XkV¬V²V ÃYã‡8À8……‡©‹f63ˆÅcb±¬XÖ àXJÕjµj­V©V©Ç ÃY+-a¬%jÁXJÅb²]Ö ÁY¬µ’±X ÃX+ a+«-jÏ ðßwéx‡…áxaX0Á¦‰ƒ „ÀÂaa4˜±X±X±cX˜±1˜˜±±ÆbccLlLX0ÁaƒWß`aƒ‚Â``°˜a`4XÌX˜±±ÇŽ3ŒÇtdd1™dÈÊÈÉbÆÄÅ£%”ÈÊd2ed¬¬´p¸8' #ÇHñŽÁÂp\+ƒ…“Wñ™LŒ¬Œ¬†FL†FC&Q–S*ÊË,©“,¬¦TÊÁ¡Œ±hûY’bÇŒÇ6 ðx<.ñßUj­R­Tª UªµR©T ¡Tj•J©KÛÄV­ñ8a£ DÆcax+Áwîúïï»ã¾ïïwÕZ jµQ㕚Åf°Ö¬•«5’²‚°ïÞ:j­T* UjµZ¥VªZ¡U*µSŽ'€pàRè± ÀNÖk dªÕB¨UªÕ«TªUjµB¨j…R¨µB©UãÕPªÕj•wåPª%V«T*•B©Uª•R¨U©Tj‰UªR«U*•R­UªÕB«¾}¾¥yˆðoƒ}¾]ðoñ¾ã¦ü7ûôî;®éï{ýëÞ=÷¿Þ½ëßï=÷¼÷ÞóÞ÷¯ÝOÝ«Þõ—sºÝÎéÝ{ïTîîwwOx÷Ï}¾ ñ¾ ó¾]ðï”ß ¾7Ûä7ÆøwÆùwÍ-¶ø7Ïã…Tª•BªÕB©WÏšÖ•j•F©Tªv°õžÂz°X &0Á0°žÁáßÞ;ï_ðx<'­…£©“,²²22ÊÉ”jû¾¦K)’ÀÀà a…aƒ ƒ_XÊÉ‘–QÉ2¦FV61Œcc‰‹5cŽ+õde=g…Âáp2e2,²ÈÊɔʲdʬ¯[+‡Òêà¸G ÁÄàp.ƒ‚áÂáp¸\'Ë+&FS,–VE‘‘“(õ½n àáÂÊŒ¥•–E‘e’ÄljêË(Ée‘’ÄÆp€RÑ ÃÇxÀ¬V¬d­YJÕ¬5‡ÕxO à=f ÂÀÂÀ`aX,àx8—€p8Y¬…b±X+5‘+VJÊÖz–°VBÖ•&±Yk-`8éY¬5’°ŠÅb²V¬•«Y+!X¬5†²Vkàpðõ±˜ÓˆbX˜±11cXØÆ&#8ãaaajû¾¬/_VS!”dË*ÊʦV,iŠÅbX†3ÂÁ†…`¼àpà)ÀNð€¥b±X¬5«5–²5†³Uj‰ñ…¬•©}|@ÖkVZÅa¬ X¬V­Y¬5†±Y¬VR±Y¬VJ­Z¡TZµJ©Uª-Sâk+Y¬•¬5‚°5†²ÖB³X+ļ8 á`ÂÒb±0Õø½L,)…¡àðx<ÃÀðxZX)£,lF5‹†4c1±–5ŠÄahÆÇc11±¬LlXÖ5ŒÅ†ÀðàjφƒÆb±Ç Â0aV öÖîp?;X_e0˜ €œ²Õ¨…V¨Uj…PªµB¨B«Uªïï]Çr»ÎâwÓºwí_kÕ;»ŽåÝÜw+ºwNéwÎéÝÝi;éßw‡zïW}Þ5J¨U ©V¨J¥WâJÉX+VZ­XÒÀÁ`˜aêÆb±±±±,F,M_Õ=YYd²2eL}l™YY2ed™ †VU•dȲ²²d²2²²dee—©ÀáNà8 …ÁppYYd²dÈÊÉ“Ʊ,lXجqµ}.¨bÅ=V1‹f>¦S+##(Ë#,–L²YS&™Y&Y ƒ,­.¸.Á¡ãOÇÅâ^/ãx׉xž/ãâi4<ÿòò¼§•y/ñx§‰xž7ŒñVžCÊò^^Ty<¼%äò§‘y<Ÿµ//æ£òö‡˜Ñz^—¤z'¥èôz=/OIééOG ½-G¯±âââ\xÜN.5ÄqN.'/pá Âá#ÂpŽÂx@|G‘åyy¿ËÊ<¯"ò^§Ÿ›Íyùžtó<ÞcÍçæó¼Ï[Ò= Ðz='¡ézOHôyÞo1æóóž^QåyW—‹Æñ/âñxž/«Åp8.Rñ$¬VoƒÁáà¯ÀðtÂÓô«î±˜ÍL™,±bŌƱ˜ÌXØÌq£6,&¯²Á`00`°´bÅŒÆØX`a…aXL0˜XV€Á…† &–&&8ãŒÇqXÖ61Ž8ØÌXÌL `a^ùßÞ»Î÷{¾wÎçws»Wè:˺îÑwÝîû½¡áha„p8à'jÃV«U«Vªo÷ã¿ úow¡½O‰ßoðo·Ã¾ÞŽôÞ†õw¡½w¦÷z›ÝëÆ¿ ø»äßow®ôÞŽõ8Á¾}½xoxox›ÍàîÍÞïuºN9»MÚRñqí7`nÔÝî·KÆ ÑºÝ.ëtnƒr˹7(n]Îäw;ž2nÐn“q¸pîpn <0ÃL7 Ã0Ç pÇ pðÜ4Ã?a·8Á‡¶Ûm²m¶Ûm²m½—Ùã;döGÙ}“ÙOgÙöOgÙ=•ö_d8ɶ °{"{/²î½Ÿdö@öL,, Âp°œ Âpƒ Â0œ# Â0Œ,# Â0Œ%Â,#0‡ÂÂÂS ^7²žÈ{)ìžÈqöN0m—lØvÛglm°m±ì˜I„á8A………„á8F„a8F„áa8Nq}ž({!„8XFqQö@öCÙ)}ÜBqN)¶°m¶Ûgm¶vÎÛmÅ6æÝÛ›tã†áᎆa¸a‡‡†a¼cq¸ãn]˹ܻ—rnw']Ðñ·nìÝ®ïvnÓvñ“x›Ã»wa»Ý§7‹¼w›Çâw©½øó¾ßç|ï¾-öøß;Ó{½7®õ7†ì7añÄoGz;×z&õ ëñõõwŽóxnÓv³v¥â;½Ù»7a©^ù[¾0ïvî÷näãnSr—pîÆà7áÜnÀn <3 Ã0ÇŒ®àÜãŒÈnGrœ`Ý­ÒnCs¹pîÀ‡pa®‡†a¸xfÜÛí;Ü6ûwnmݹ·væßn›tÛŽÝ8Ƈ·6îÝÛ›t¥ÌíݸqÌ0É7¹7!¸7a†˜nÝÛ›}¸m͹·6ÛclÉÆÛØÛglm¶ØãmÃníöîݹ·vûwo¶M±ì{ǰ{úèz箺z﮹ë©ëúþ¿®úç¬zϬíWhlÍžÌ6{=›³Ùœdv‡ÚíM¨í]«µM©µ6¡µÚ»Eú›Ci´ “Ævk³ šìôÚmšqƒhñ¨mSjív»Sjm žÍâ›CfqGfñMl’ì–ÈÙ;#dqÝ™³ã;Gh†Ð8»^+Ɜꇪñ@õƒÖ=cÖ}SÕ=Qõ]©´ £³Ù-’-‘² –Ëd›-“ÄvFÉâ;3Ô}Dâ;#d'e²v['ˆ›7f .“g³Ù/PõM=3Ó}7ÓOÓôßL}?MôßIôý4ôƒÒ}#ÒKÒô½.¦úo õQ=GÔá»-“²ÙÉÙ#²C‡³Ùœ~#´6›4 žÌÙìÃflöhlÍ—©ê¨zž£ê<@ÙlŽ"ñ6ŠmhmÓhíi³ÙìÍšlÝžÍÙœ>m]¯ ᾯ OYõ½gÖ=b—ëõƒÖõYOUõ}SÕ=WÕU}Sjm]©µáÚ›]¯ÂzǬz©êú®×j›_‡Õ=SÕv¦×jmPÚ»Cá6§Âú§õ½^úÞ°pßæúϬz¯«µÚ½Øm[„ÚíM™³ã»M¡´6ˆlöFÉÙ;$øvNÈvFÈøxûC†mNµG††ÔÚ›M mg³Ù»>´vhlÆR¯Ä/ v»ChAÙ;!6NÉõ—¨ð͖ˇ³á›'dì–ÉÙÉÙqÝšlÍžÌ6cÄ6FÉÙÈ –ÈÙ-’z‰ê¢ziéúO¤¾—¤¤ž’zIé—¥é>‘épÏOÒOKÒIô_Dáœ?DGÑô}ÑôOGÐã§¢z!èú'¢z>è!Ã==ÑA<ðóÃÏØ›—‡ç†ÁØ#°v°5Úç\pÍi­ÖšÞk5šÃXšÀᦵֆ·ZkMn·†»\¼3ZkuˆkXk f°Ö:χZ´Ö†´uºÝn·Zëu kCâø¸f¿^ðÍ€khku¿šã\ks®r{ã¬u‰¬5a«un«TjƒUï§Uï©Õ{ÈjÀÕ†­Õꃂ!Õ: ÕjtÁ_sRêCRŸqÁpSÁ0SÜÁsRkæù¯š¾iæžiæ óSÍ|Ï0ó 9§á æiÀÓº~ i×NpÓéÍ>Ó‡Äiôá§SNšs…æa§á™æ'˜pžy¾aæ};§ >ŸNéôÿ§ápÓ‰§?—òþCÁ4îœtïÓ§™÷ñ §Óð^ y¾kÇ<çÎáj8ZI©5§RŽ£ÌóÌ<Ï1ãù¯šžkæ{‡šùžaæ>`{Í=ÃÎO8=/㦤åõ:“Rê}Ôㆺà˜î¸×éîžëî»Øšðׇ¹ññ×û¦¿^kÏw`ì6÷Mˆ|IçžžûÇžŸ±v;Þ ‹±Ø›c±×ëÝ~¼×žèëÍyî» ƒ°Øl>-°Øl=ÝŽÅ=Ðóüÿ=óýÓÐ=ˆôCÐ}blSc°6a°Øl`ì6Ã`›_­=ç[ñkbk5šÇÝu¦µÖ{¦´u¡­ÖëMjëi~ A­ÖšÝkî:ísÂá<'`ý~¸5Úà×Í`k a¬lÖº×â5º×[«ÕjµZ§ƒ«5f¯VpušÃXë5œmXpµz½Xêõz½^­Õ—Rju>w ÔÂÔšy§šyó3ÌM8iøO™æbœ'Íó<Ã…æžiÆ<ãÎ}ÃÜ N¤u!ÂN¤á`˜888. ‚`¸8&¤Ô†§QÂ5.§…©xN§R:“RjSRju<#…Æ:MXjPj½ÍY«Õ†¬Õº¾6°Öka5†¯W«ua«5x8)¨up=Ì0pSÁ|ãÎ|ãÎóƒÎó8ó¸<Ô¼JpC8¦¨ÕjœວUª5F¨Á)©Ôº“PjF£Šû‚&§Ü0WÜÁ0\‹ªxº£0LÁOpu&£‚}WÎ<çÎ<áøBj5 Ô:C¨àš“Rpp\Á)|¼A‚`†Û5GVjÎ «uf¯Û5‡·¬5†°öµŽ³Xë¬Õš³W«8 «Õº³U‚8:“SÆp}­V«UªMSªÔšBjP{ZHj_i0u:ƒæyŽœÓºqþGòCù'Ëò(ò|“É|“Éò<„ñÊÇÖ|”ò_!|"³Xò)ªñ¼³Ë|¿/Ëòü ò‚µf°#Ë<ž/’y>Hù>Iä<%|ƒÈ<„òÈxOmãøçã<ñƒ€xçXñÓÇóäù'’ÓÊãy^W•å>I¾ò¼—É<“È<€ñüsÇ<ã÷~xî˜ÓiƒM¦ÓoÏLé3¦ÓiƒM¦Ói´Æ˜wþ6˜ÓiM)¤tŽ‘Òi4†ÿJïÝ.—JšCºâitº3FðÃHÕÒA«¥ .‘Ѿ)â•M¢Ñ(xµJ¾&ûÅñoôF‹D|U]&“‰¤t|GHp(p&˜Ó:].”4¼Gˆ{^Ö™Ò§M¤}³G£=¯hÒ×µ¥>ÚøtžÙíé)¥öý³M¦Ói_oF=£ñྠàÖ|ð|ÁÐèJ®„«¡ÐšA Ð þ÷A½ÞšкÐh èMŸÏûßïƒ¾ï¸æýãþoªç³Þß÷ïß÷ï~›ó‹ýgxwáÞo»×½{Ã÷›Ó÷þïÝûCvî·_´âßí7ov÷¯õ~ŸÒnÍßêWê?Qúƒô~ƒ‰»ý_«ô¿§t~‡ôŸÏ¹Üþž1ºâ~´ýaú÷Gìý‡7Gëýfå7'íý¿µý›ŸÙúÍÉúÏÖîC ý|OÕ¸?Ùû?gì0ÏÙ·vç ýÇîÃý¼=Æà;¾ìÜ~ßÚ~ßÛûoìá˜oíý¿´ÃîÜ>í?iûÖpÏ×úðÿ_ëÃ?Q†«õ¨0ÿ_ëÃÃpßÚ˜°ý‡ëÛŸ¬ýN߸ýGêOÃú]¿êÛA¶Û|'»îû¿Øa‡ì0ÏÚa÷hwÀžós¹ïpîû¾.ÞÝ;goÓ¾›³éö};³Ýî{½ÜŸ·»{]‡eØv=ÑÇéý7mßqÛøàxàx¿žðÿnsoïxßw®xa÷¸g{‡ßwÝñ†8~óïgœ÷€{Þxð Ëž=÷=ž3Ç€nLö{=žÜn3ÎãßÏ™üùŸÏ góæƒ@h?žÏa˜z÷¶ï¼è:üþ{=žÛ&m Ð&ÛC¡Û> ຃?Ÿ=€- hM ì{cBhO`ð|Áö=ÏàžƒàûìÀþ‚x&|=Œþ{Ü3æ†h4 Ÿ3æ0Œ.àû>‚û/„‚a@ù߇ð‹<ø€áx€x€x#¾ù;ã ï°»þÿáçŸg>gÌ-…¡ #ÁÐßϹç¿;þÿ¿}ÇÜÂ3áŸ0´ ah0°“À=Ç=îüÞ|3ù÷?¶6΃l{™üÿ Ð{¹üùŸÏ™ýƃphtºgßuÜ:A¸÷4: ƒ@çÓ<™ìöxÏnùŸÜhsC¡áèt.„Ðrîxz ùžÏàÏgŒò`g·9þ3º3çºgŒöïwÆsæïvî³Ùã?`j߃5¬Íf³ZòÖ9¼ßbjûWðfœ×àso´f³A­=§±ÇiØêÌÖ¬à:§4p5]‘ƒšÁk`™ºÝŸgª?/å5FiÙ›ôü»ý_jv½«¾NØÔßv»îÙíŽÐß=§hvf°ü¦«‰Úö»þÛ´÷ùïj»AíÌ;>ÌìŒÑšÍf³N¤ì8;.¼ßuÉ×y¾k×ïzÿ;Î÷O;zæ“5Øö€oGÎóMçcÃ;DZ5c×ï¿x“üŸ‘:ãñàààq¼ëºî¹ü!» ü]¦ Ôw\jMO_©Ý®ï2n÷a¬{•Ønûw­Ý™¬ÓšÝ뵦k±{3™zó¯5™f°Ì¼<Îg¯àþ3[øÃñ»­nëñku½q×n“u×ë÷GÝ~#cøöî:íz~OÈ~Ms׆¸ëÌ<Ï_¯?'ä=½~»°Ûñ5ù“2fuw]×mµ½w]×{FÜëõºÓnv'cØ`†·°Õ{ª3:¬É™3?¨ìCÍ=a×êu&¥ìu)Øö;lӚͧ4àö'`ƒð=Ž``˜=ƒƒ™s?“ò|l˶Á0pNÀÁëý§Uïÿ†gò~OÉ©ëõ!‡©u'·‚æpG°ÁÃÍf³Y£5ÃÍj°pL³Üvn§ƒÁ3|7º3y³6fø&lÍšÃ7›Ö&°àœ<ÙÙ&ë6vGe®×³7¬÷õœ×ZvºÃòöFã²ì»#±Ü{éØšîÇpæœÑšìLË™ëöù“Y™Ö€pCZ{îg2jú×ïýÿ¾ê~ÿßMAÁëF£¬0úÃoÖÿZà˜?€Áu=o[ÖºƒR~üÀu»wð~°óS…Öõ«Öa½gXuY¨:ÍGXu‡Y·ë6ýkÖõ®§Î:ݾ£ð|'à/?àá?„ü?ƒQøÀj7‡S¨á~>~?Åø¿Âü]¼Þ:¾×ï\Ï_ù5ºÝï^k _a™Õ:£2jƒ{Øv®ÃƒØö;ÌÖ³xko6fÝogÙ™¾Ë²~ Þø×f÷ÚÍSª5Z­ï¶jŒæû}«þFûàνÇq¬íøÚÇ:ðŽç¹ã¸ÕïõaœíµnpÎp³™Ã9«íó†ø7Æ´ÞñMyÜšþç_¯ã÷&w;°;‡ÝÎÃÜwÜ{píø™Ã8g5ÙÎØüºísÙ™­Þ™¼Þõ×™½y›âq3no6ö]‘š3Zã5®Íf·º÷‰›Íïv;‰Ùö[Þ˲ؿÃ©Íæû/?7›Í™³²ì³[²Nˇ›ÍùýŸŸ›ÍîÓvþ_ËùOÊnÎð=#8ç7™ÀôùnÐí;C†ïNÓÒí7Žmôøç´íP7Û'9ñ¸l»ƒ‹6GsÜ÷9Üëß½ÏsܼseÅ3 g]žÍÎçv}ÎÏgÝÏr£=C¸«î•^+ÅÚ×Úþ`à_[ôw[=˜lÿ>É8îÉî“;ÅvFÈî;o·ö¸¯åìû?Iü¯¥èú'gè™§5Øö=`‡aØpúÿɰ?ð‰:Þ´àgY÷þù÷µá¯Ã>ÿ[[ï›°ø5Úç]Öõ½iÖ½gþø|xÿƯÞûÛºUïþŸúJ®Á×õFa3Ú®º¯S®êN§©Ö™ŠºÓªÌuAÔNo÷çOÓà»óíóWªê:‡‚u'SÔ˜& ‚`Ÿo|j½ïø V§Sÿ[ÇþOøÔ&£Îú÷¼ãÎóæðÞ}b{ÇÞÕq³ÿ7¾þ«ïꜬâq:ß„üo[æu‡™Ö|=o[¿?ç?‡Îü>wá~CøóøßÁø>Î;Îûß{OÿŸÉÿÏ$ñÿìÞá¦ûÏÞÞïšS¬ûûÉÖi~÷ýšM'ýèÝ×ÝwîœJš/øÿøûgÛ>ßW˜ñ¤ê~ê¹Õ9ÓøgP{ÁÓøg†tçÙû½Çû]3ÓGñ>×Ú<3ÂêÏÙõMáôÁ³6~ïñ÷6»WªÚm:¡ÕuGU´êΫªtÝOS¤ê¶A¤Ñu<§eíñ~ßÛÑýÏ·áý±ûoÿ~çÛð½3í‡SÔñ8œ·ÿ§ÿÞ7‡÷^†ÏüŸóá¾áÿïÝû¿tû§ð~é÷CÒþüÿÇü}ϹàŸsªÏñx¹ãÀ=óÕgº¼ñöú­ÿTïý?OÀêƒ0f=-÷SŸê}êtá˜Ì@êS@}¬ÿOÓ=7LgΘÝý¯µ»ôºsí}£‡èú;ΣÒzŽ :‹¨:Eáùü<ÁÃêsƒÐ>,ÇQáf꣨ê:Ž Þ|=9 é÷gÚO‡íx#Óôÿkëîôdû&Ä>¿×úîÀû€xù¼Øç¼ÝO± SÔ™Œöxê öµÏtý9ïgüxo3ÞïOŸz|ù¼zµö³æ|ð>×}ö5úÿ®}®q¾Æíû>¿ìýŸwõ÷yï÷á#ëïþùî+»úæÇìÄwgCöt‡éWöÿ´qú¾¬öº¾¯Äô7G¡ÕSèu~‡‹öÞ¬ñz“©þ=Sí=WŸâý½ÏÜ=Ð:³«ñûo«ñ=C©êzœÀkÝSïu%m‡m¹ñŸïuÇøŸÄêŽcÂ?‡ðwcÚô3ŒÆc1àš«ª:­ÏU êúœ3B»·3‡©êN§©4sªôz¾¯Ñêôƒ@è?CçýÍ·…Ôuà¾y˜<§c˜< t?³Äã¾¥ü6ýW¤W„hzŽ¡â§Q¡Ìf ÅÌf:}·QàõGQÓþ›¦:o²}‡\Uû?gìè:j¾ðtØyýw×ô烮÷þ¾àúÆ»ýÿ‡ûÕðµÿX0ÍJkvÑDô]CÐ÷ï~÷ÝDwßSêwß·V}M_Ôß~þ‹¢z.‹»÷vçÔ¥¥èµ¾î»½ú½ïÕ÷MgKÑ÷UöO¨÷‡Dkz>6ÛÒ÷ï·éz^ü>©ßý^”×ý_«¯×'ѽGÑw½yÞwŸ¿ÖýÏÕÖþÿß­*ëõú§ïª~ïÜwÏöÿ°·ìøoì~ÝwMÀ×ôÿ¼éŽï¬û_kX÷˜GÚ;Ì. ê:ƒZwš³ªêž«½{ÜÆ«1˜ïx]GN9ÓûÚûG®wÕŠ½K«ïêõx÷‡y˜«ì÷½ïzpϱö>Ç{ö~Åc÷êL.÷½Á;ãëa×úÛÞüÔý¯Ãïûÿ¯‚×Õg»¾ØÏàý¯¾Ô³õN”ÛRhsýÔè}΄ßê8çF|]IÒ>WìêúCãt]t]Óúz®|õÎyç³ÙïÀïzù÷¿O‡ƒôý|Ÿï;ÏçÞ÷‰ûÿ~=ÏzÜÿ­ôÍ_ïýçÓçÿróü÷²s¿Ï÷~íïóyóÖýÜùÝßwÐ÷QýÑ}OÔ~­QúOÃê'èý/Kêî:>:>‹ôôa¬ýrt]£ =¯ƒ þoóúšƒ¢ö÷]#ÒtÑzÏF Ð'ÀtAù|¿©ët]ëÚé3/˜ç«Ú0óØÿSý~¯Iù}ŽÓ¤xünÓ£Þô=Ÿ—åö‹½ö{m?KÑô}ü¿t}FáyXOoÐç8Û¿oÐó¾K…äúç=œçüwéý?¶Ó?OjîûÎv©Îó½Ç=îév}ËÜô¡£è4~¡Ïóç?ÏóÇ=¢øCGÎþ}è?F‹EùùÀüÞù¼_Ï_è›EÎó¼ï;ºú?DΟDÎüþlñs¼ ›ïp}EÛ}sƒ°í;O¥ïó¼îïa¤çùþtán¹ãž ‡;°Øsý·kÚn6KK¯}þ{µúG9óÃ7¥ù¹­/6|9¾s±ç9ÃØñ³Y¬×¯Ø•¾‰ô~Ž‘ëÎk¯æºÿ_ÄëοæðƒÅøì8Ñk¾ÏÑf¼Ns›×sçÿüž½þ|ßg®~~»´ç>~Œír©ô>‹ÎsŸÏœü»ó³ñOç™Ï~_ç±;NÑí8'kÚö¾jú§Ôè<3Ãè;ccôñí?ÏóîÇŸ;n'ŸÚîNØô3†sÐÿ÷ ø÷ÿ׉»íþ¯Õ>©Òô½(h½Œô:N“ÅŒßýCÐÎýNƒÏÓsç?Ïóüÿu¥úOI°èç}õ8üS¡èyþ}ÑóÛo¡¢Î¹ßa¢ú^þc¤;“¥Û»îw¶ØógÎ~wÎØì{=·6ovüß“Íó~Oiè{>ßÑÎg>ÑÛKé}/¥¶ú]¨}olVôKòæÝ¿7Íó;æ¿4ô¹£ÛôÃ7éž›TþGh/{OœÓýè9Í?Òõ=Cͪg{§ôߦvýs¡ýßPúºqz/ååts9ÛoÌçhöŸSM¤Òl+¥è¾žpèüo·éN;Òô•M©Ñíz=©Òt~OIñt§GÑ›,ègL+ýO# êô½/IÒl÷û>“´éxuæýñ>‡_Îuç®üߘâëuy\©âêô\ǸvœÉÌhžgÅ|_šx‡3Øì7žgy×eòùSh»Gt.õþgÂ57æüßáü9½¯þü^œÍm~†°þΫ.e¸^dÚõû·3×þ0ÐõÙ_Å´Õþ/Å«ð²ù|?ÇásÂ˸zÃgXÊ ¦¯®þ¼¯ðËx9~³W™ëþqªÕ9­¥noÄùüÙÍ†Äæþqüy¯ã¸ñš9Ÿ{šþz.˲> ß·üôY¿lìõÿiÚi?ŸkÚöœI¼ÒöÇAôûMv¶èiwº.íø\/|÷úCMÒžÑÅc¢ñº?¹+w^ÿóþÿ¼ŸÌyŸýÿ?‘õ¿?Öô?ÛÐ?Ýò?×…ïôÑ÷<ùÜç{ƒÜç/=Ûáé|þ{Ï4ÜOÛ£èúKé}£4ØAô¡ÜùÿCçés¦w_Üüß›ó~n“àÒé~w4s>¿5ÍsZL¯Àrý¿oÛë»|§o®Êvü¿_ëeŒ·m¯í}ÞgµÓsG«›æ´[g±Ñs^é½Þì}ÞÏçŸ9óÏ?{¦Ós=‡_Ío9­ŽÇšÞ‡`o?!ÍŸ;®Ñèô|Ç]Ìè´\Ï3Öëý_Á»æyž°æGcÍuœÆuÌè»~_^ewæS]ü2¦W­Êår¾¯[Ÿ žÞïϽÞü^ïßûåW¬{î·+¬ü_¿õáÊ÷Ü¿/Þþ,-_­ßv¬õ¶Þ¶K­ë{ßß•ýçáËe¿~_Ûåÿv®¯ãÆeòæYü=ß¿Œ2ùÜ}ü¾£ÖóC¾Óþ/ÃøO/-Æã÷¯âü_‹çÈæù¾ø<£˜?ãi¸âg²æ[ðåͯ˜9ƒ/ŸwÝoËçòçÿ™æS-–?ï/—Ëd÷ùL¡û/îÉm>îív¹]¯ÞÞåOßËòæï÷›-ß/Þòü¾S&##û¸¿óñÜU˜ø³îz®íîòy,vd¸<1åäŽïùz_ËÒï{ÞóƒÌzZ~cïó0,·Ðô>ÿ{Í×5ÿg5–òü§„n¿ï¾Ën¾÷yÞe²ÛGÛæ9Œ¶W휿ö~¼§“öÏ·“Éd?9ÕõfUù«ypý=ÿ²; Ž{ù½_Wîq´»ûûëëëãóÿs÷:¬oá>¢¢ ¢ý{$Ä=pDÄ"=#¨éN•IÀþÏìzQ ((6åÝL?þÛæ³ùóh}¯l–§û»rÑÔ»÷ÁðŠçÎûX…¥ˆÄœF!1ƒˆ¤6²Ó‚±šÌÛlšÀmwN°›.š³ÖPÚªl‘µºê:Ò¥´‘֖ºÂ]eTëU]jØëUl¨Ø–Áµ:ÑÖN³d‘µ° ©Ö*uºÕ[R›%:b:ÒN¶Á:Äj£iSbdN´‘Öë*›U"ºÊ-¢Ž²®´mX6©[#`m#­'Z‚ëÖ)ÖWY.°]eµ-¡uªë)6VÔbVÊ®°M‰6‚®Œî«;».ìêêË«.«mE6ªëS­$u¡[Å[C­ ju„ë6Mªj©Ö…]jغ§Z©ÖTëJmjjKdk¬“jUÖ]b­¤ëQÖJ—Ĥ¥5DŸJ¤Õ(«àÕ_øäøäøÇÇD#)DD>FÇi’I$‘"2NH’HÞãªO & z¹º²~ã«f&ÚÏËòò %*N"–#vÐÜ嬤ÑÓ¦[‰6´ãvÛYdÚÚÖµ¶hÆ9ÛE›Í³¤8mYÉŒ³2Ë ¶Ãa¦n)Y6âÎ†ÆÆâN!Ûh¶Ù“i¸Õmkm˜“–6ŒÜ¸HˆÚ·3N[k:lgm¡­ŽÚÈ²Ž¦ŒÖ8)nÄAœ\we¡Ñ#nÝ·ki¦µ,°mÇXwhvåÈqÍ«¥£vŽL´¸’Ý“ ­Ù¥¥e³p£ œëmÙ‹c°m•±œÍ6ݶJ6ìáÑY-ºÎÊÚ·qvÚŽ¨º:)‹ “€Ûut5ºÈvØM«r Œ¬›vÛ§mµ£©#»q»6Û6mÝŠwjnÛY­¶„lKYÔPÍÛm†lËv›–éͬZ[n:h´v™ÚÛ4¶±%´ÇhÖˆã#,Š-šÎFfn(¬ë+M‹dW%™­¶ÝΙÍdɰ,Ã,Ói&ÜÚjØ’Ósu±"ˆîÛ-e˜Ô̬Y»1sµ°É¬æY°Ú.Ø›mEnq¶DŒÄˆ–3vblm»j+KY¶ËrÓm›M›6ãpÔÍš±š%­ÍÛ,9»Q!§––Mƒ,¬°™5™fÖ¬«',­6Ög6Û·6¸ÈÂm¶1¬ë3Rm“[J;,M·76Û4±f³„˜ÓX’b9kfÓkhÖ–¶ë"Ê´Ž2mIh ,»p¢Fæ’;ˆÎŒ†Ôm«-²²Ý(â8í¬]Û[›vÛNëNí8!¶­³m¬Ö%˜Í tnµµiÚÚr¶ÒÛ krÍ mͶ;Smš6ܘm5ÇMbÓ¸¢ätµ–ÚÛaËZȦÆÒënÑ™§gfÍk‚ƒK(ãjÍ›[1m¶í­’Ê&ÄØšÄÕ´•±Žc•¹µ›­pÍ‹ki¦³‰2ËÑÃlÎÛn&ëM·5ÎÙ†´Û›–Y­¦²Ý•´Å„…gnŠPšmŽÖ"Ãkm,1&í¶–ÜLÖQmškm2Ù˜V͉[n[m±ke˜ 9«6ÚÓ!ÎÖV­»nÛ5¶™Û‹,ÌcbÖ'cfËX$­ní³m3[‘¬’ZÙ-9­Ùm¦†µ°‘¬˜“MÙ­µ¶±m­Ú´í1šYµšÖØ­´m’ÆÚdÓm«MÚÇm&¡À¶hŽe§K m6ÊÊX›NÓLi[$±µa”3ZÛŒÓ$;JÎÓnLÍmÎÆc²k ‹ZÉ‹,cLpY;4ìÛ[9jγrÌIÍnM·k6ÊDÚkm­Í¸›RݸæÙmaÍDí¶kcdÖH1Û6]‹hBl-&íkdˆvÖÛfÅ´u¶»LYÓY«vÛY±-¶ÒM·hœÊóƒ¢:dvÚ&è[´Häjk&mÚY,bt–nÌ·kœn4ZͤanZMi‹YfË6i›X\4´bRc+f¶ÜKmŽl˜km¹Ûjf¶¶[f›’M¬·2ÛYldÅ­fkXÛ6”èÅÄͶÒÓvÖe±sÖkljvØ4Ü!³fÚM´iÍÛiÙ-¶nÈÑnmÆÍ0Ͷ%„Ën´J4ŬÜÙ«nm™&Úͧj5–ɹ#;E³c†€“;ZÛvÚ[›[¶[­­ŒÌ›Dínµ±­™­™¶Í»VVkf¶Ú³¶JlËZ7 Øìæ³m°ÎbLÌËrÉšgmkmJm5bÜf8é˜C$ŽÉ2Û쵬³fÜݰnÛkLå¶šµ›§£­ÁjÃ6¤­mÚcmÙÈÖu‹v-3µµ­[³l‘µ¶Öibam¢k´QØ“5 É''%¶rÆe¶I€³µº i¦Ýœ¦¦ÉÌv²k[v±¹³m-‚‹[2!µ‹[hÔÁe¶Mjm6Ä,“m§[M£³vJ2Íi¤Û†Ý±¶Ùe°´Îl‡bYÖÎÓnÖÌÚÚsMµ¹¶m¸¶¶knØ$c±mšÛ¶˜d‹1¨ÃZ„ÚÖmmµµcf­i»V“\Ùfí[Kn[D¶ìÍ`ÛmËm¦MÈ­·;›vÖ9¶š'3Nɶ¶Ìm˜¦#6±k9šÊÜÝ©bɶ‹f¶‹0í©¥›[mµ–X§N6ái8³Y¢ÐÛ[[vË[5”§mkeiÙµ¢Ý¬Œ›k6›e«M; lØæ¶Ö°î³h͸¬æÖ-²ÖÚc·4l·cV™b›‹Û¶šÍhÉÛ”³i°ÑlãkIµ‘ØÚͳZÖ¶Kmkmm¬Ý§,ÚÚ,:m›L²Û!lÉÛ-šÆV–m»VÚ¶Û¶Ã6å›2m¶d’Ûi“v³[.Ó9-Œ«6ŒµŽÖÖ·kmlµ‚Û –Ù9m‘¶Èsmš³Kv[S™nGrÛH(Í-³mmº&é–’ÐnÄs´Ym’ͬÙ3`mÖÚÓµ6m˜Ùnk96kL–ÙÂÜì››c6ì“L“6™‘¶°lͳ0Í%­­‹[ÆìbkZÚ͉“¶ÖÆiN,¶Ñm̰e¥©È¶íK´F-Ëk6LØÓL7KbÒÂÍm’vÈLmËnm¬³-ÙhÛk“¬í‰Û[i³˜mk[¬6³9·6¦±·;i¬;²ÛlÌ´-NÚ5­µ†m&¶§µ¶Ii(I°-ÀÚËlìÛl3-£YlÚ[-3h™9 knÚZ‰Ûs!m ¶ M™-ãn1k…¹´ÚÜÆ¶Ø0Z5³‘”vãœí•³6­¦§mÓ;#Y­lÖ¶Ú¶,Ém•µ£!lÖ‹4ܳGi¶XcVm¸ÖÙkf¶fÛh8&J5µ±m›-­m¬±˜í›%‘„È m¶IDµ‹Yb–Ã\'Z)°­¤]b©Ö’®µQ´)µ ë$Ù&Èuª­¨6ÙP­ºÉ+­"ÚI:Ò©ÖRºÒS¬Öu‘d$l‚u‘VÂ+¬£au®²’ëTºë¢© RdfRdša™fRa˜&RYRQIFRQ–YemRÔg s9=±9+/t[ÎLz³Ÿ7æ”˯ú©N‚Ž%3æð)ªªSP©PD¨¥A**-E©r…F S)©M¦QDåÍÉ-̱Âñ"å6B&+¯Õúœ„P (#*}{^µã^…Ò@À@Ý B·Q117AtÝJ]]]2\ÓóLÆä½¬œÆC!EÄóª‹kl”©!H¥H¥J’Ò¤™F#6fû=Ózê‰<}ާ…x/™+ÓzkÒKÁ,À>HØTjB¡P* B¥F™É´î ………†autNO<üìJ((B« ©–ãÄÄ1¼HD1C ,» ]\d p·o-`´½®UUZ뒊וÊW ]5Úæ±¬ÖÖ}]¬µµ­v³®ëëë|÷ÏZ ²í.é—W¶øó€ˆ8ñ\x8ñBÅCàÖ5­jÖ5­f³\Öú-–ÄØ6l›/áP6D7$@Eguv‘°¶>}‰ŽFEQþüz„,{„*B„(B¤) #Â0 $A qpÜ\·#%åæI³#x÷=Sñ)"ŸàûN·]u›=­:ÖËoä^EÞg|íˆÒ¯àó®ŠÎë.òÎîˆîìμêó·´{×ü6ÌPhæÒ­«z$ V ˆmi±_uü½·ç½îÍη/Ó{g[•-¡/½ª;  㻊ï"Ë3 «LæÆçac;YÚtÞßWß—îeølòÞhËóÚ¼ùÝ6ó½ë^]ß§w^]óåוY^]|îmuçwZÜiA)ZÅ©‚çŽ5[Ò ÇD·ùšQ 7æ§Ä, Ÿ‚,r çó×_|è”*'‹ †A1 pxröç·ÛQçYåyyÖRëòó¹ùêŒÅ\‰o4¨·S^Mm-~}¨Q>™¦F×Ç §É·ÑÔØ„螉é¼Ù¯Ó¹é‰š„½[øé‹ú dÁhÅjé"1~â‡Á8vtwâ÷·™ÔYv~ÞÞ_:ÊöÖú&"°ÖÔ–‰1~jk´†Np9:$ 4Ĩ¡z*æûxYJkn<ìQHÒt¹jÆ Z\9bØñÍ•4ŦYbšh˜¥V'4‘TÔ[TY^U¢]pQéK® bÕ¬F[*°f#Ú4ôL‰ìZJl….î%ztÝ[ÏŽ3~°õÕÝ´Ï6¾6¦ƒP†Fšƒø×µé“SËSRH(kM»Q|-F•ÆŠÓU‹7x‡¬àùÓù WϤ<:ÞBM’œþ/×*¸üsy­©¦£P><_šÁQ'ÍŠ&›9<üFh¬ôZ|¯O/3dÍ›k¹»ò;§òßs¯ kC’9õÑOᵬüÛDFÏ€¡ƒÕ‘ÆòI øVtù­x]×›«_¥Mýñóïƒ<›÷ךC¾÷§®ø§!tyNÖVžÀz0N¹.|‰ Þ¶ GçŸ ô.Í”WgUµÑÞˆ7‘«¬pNsö½#ž»Äštzú~m·bqÙ9û¥Ç»»·µpûìÞû½®žwüG|ôâ zDzx‘ã6ͬ–­V|ô“ÍmÉè—ÈÚm*ñKÂñÃÅxž/ÅQ c‹\H”Æ&0Lf1ÿK“Å''ÉÓi¶í6™E´òm­‡/yDˆ ËÀƒ@¬ ÈÀ@°([,4Ò ˆˆ ‰bˆ¦DA9 lE±€˜²àM’¾¢‹æŸ/‘§’À¾¾/¯Ž\±Aø©øÜE.@jýgUðü? ø«WÖ(¯_,*ùWʾYò”Kq q·¶BØ-­‹kfÚÔ[VÑ¿/̘[ÛÛ–ÆQ¶¶µµm, ø¾—–¯Qy R¤¨©¯BÙ>e|²¾d›&É6M•±÷£b® æ¹+‚ø ñȬ$0xe/à‚þó+wNìûO±ù¿™ù¿7â„ö2“e&ʬÕI­*f"Ö¡e’šµI¦ª5-TŸû «lÚ–Ùm«hmM²A‘³BRÌ•• I#S$É!¢’ËÉ„¤²¼Ñ5¦K$dyŒ‘>JŒ¯5tL¨N P¤ Q¤©¥Mú¿¬úÏ{:eµllÚ¯aG±DÉ0Œªš©Šš+ÊšTÕL‰€Â4C,í:9Š( ¡h( ÑžåB€  ¹)·%F¢5•˜¬^2éN™•(¹)Ÿ˜ûO‘ñžßð¿5íüb=tZ&%”µKÕVEª™Eª­”`5’È2†UaZSJ´M%’²–¥j«EjV’Å2–¥dZ# ĵUŠ4JÑM)¨©5*MVá»u Ësqn›¡+*Ê¡n ÄÈÌ“K*ÊDED[±ÇnIn[—‘‘\^6±ÇwvßF€È-!V*),E1L’šK-TÐ+"Å*Âa*Ò*´Œ¤¬ªÊ’µ*­TdUb1T´«–TÒE•5h2$Õ-%« A•Q¢Ô#PjUj¦R­CI,¾)VÚ¶ÆÙ¶[o˜ÛKlÚ¶¦Õµ¶›b@$[fYIVض¶hh¾'.'žt¸¸¸škl {ËÊ2ÒsAöŸãÈõä,¥”-TÕTÅ5Ja5DÊ­`1CJh£Rd£R²¡¨´Ch™Rj«JCA5K µV(²–RY&I5 EhšT°Z’²Lе¥ PHƒ#@B…@П‚ h‚„¢Š ‚€(J(¡ ( (n˺vÊwU)ÝSJ2!DóÏ4¢¤ÀªÒA) RE¤ˆ‘¢ òÝ(*jE•j”É0UFTÔ£*iC5SAaZ•”eFQbšU”d˜ ©…¢²Y”Ô™FRÈiVC_Žû_ŽWÇFúß[ÓzÞß½¾ß7­íôß-æñ¼Þ““„ìÓ3­¯(_I|`[„ƹ"ây'ŽU´–¡€Âe&‰…2-Rµ PÁû TS#¡F¨ÕTÊ2 HÊ Z‹¤Bž×À÷ÿu«jÙ±ý.í"ÎþﳯN.Ͻk¹íÕþù󳨮Èê8տ©wʾY~•yÜ]ýJù~×ãñVÖŠ ŸfÖ-ͦûÞöÝûo(§ËóÝݼ¼ë¿N³¨öÝ{7Ie—YY×moo=ggž_¹Õ÷Ûô¿>vöó}÷¾DeeÛ~{ÂŽ¼â‚Îèî;«ñ‡Uó:èê¢Lº4S}^¶#Žë €ÉЭû»´<*i¸#Zƒ¯‰¢kÓ¦ù÷ÏzœñlmµQ‘>xÒECÔ×¹¬ÐB5É¥ §ÒBè:ƒþÊ,¾r7Gš@— ª³DÄæthiãGÉ&šÝ`YxÇcÍZ¼?åoŽS uÚ7‚ˆ•¥ú½Ñ6m•ZLë Š*Q€”ùÎÕ¼ìuƒBcLý­P£øXà¤`µUò©ó·óSü:m™/¶URy@_n­¿Ê¶0¶*š‡†œê>ˆ÷ïÚ£¯æê¿^ÅÍ_·åÞsÍlâÀÚØ¢ô”É^pÓüFþæs÷ƽ»;Ÿˆ^wuuSÍÿOÇyü;CfÕÂkÒv÷ö‡W™¸ÛQ3áXïÏ«Ó>ûã‹¡t÷ViÑÙœŸÍ‘ض©Î+<§jñ“Ì@‘ŠvÒµÄÚKç«Z«Ï4ÞÏ^¿ºë߯{R!ïô¥6²›PØfmËel6¶ÙY¡²Ì6¬ÖÉ›lca›6Í­›m1¬ÖÖµmlmúÛ"*d=h¥¢hKJЖƒ YU”V© ¬«U+A€²Ii2E¢Ò©ª± U&WÊðO©èUãÅàð—³âñx^ïõâ|/È×µ|'žW–N[üLqŒÄã1Æ5ÆãLw,Ø[T©^Q‘¼n24ÅĪ3 ª“Q„Z©¤L–‚h1Q Ê†#),AƒH2 Ô´¥¤b-Kh²‹PÔ¦¢ÔL“P´š‘”Ô­SJ0ZUŠÅY,+*¤ŠRa&A™˜™&&Sã‰302²’²ƒ(ʲÊŒ¬²„’2dDE váo%¼0à £ukd`œ€#IP¤Ò¤ªÒ@2-F‘еTÁ5 Qj5%¤Â¬¦Š±Lª1¥aFT­ЬVB4¥dR£(¦ƒQSK!L“T©Ÿ_í¯nG·=±ŒˆG1©¶i# HÈ2!"H¤lvrI$…”‘‘ÅcRà(`7öp—1â)1•QŠÒ#JÒQª5Haj*ÄÀ­F¤­K*-K Z«R¦& j™RjšBÑiI”L,„ÊaVSRMÂi#A¢&¤4© š¾4|t¾2øËã>8ùŸñ„LKD°‰Àöd   q£ipßä"ûÇÞüZßK_æZâØ(ÕKP†©Z„5!©FSJŒŒ(Éj¤ÂÉSK ZLÕ4’Õ1 ÐF&ˆ5&¢¬VJ­V*¬ HabC JVQ©U…¨ Œ•ZŒ¤1Z ÏiIe@ /Ç‚``ù%xÙ0)e $$*BBBÂAavWôÊû›’Á°‹&ÓÀÉ’¾4žÅQiZ ÒÊ¥¤Ô¡¨d¡‰’†U¨&&%„²™bµ j1d5 ´XR´¯ï_Ž:¤ê.¿Ð¶ÿOÿü|ÿe½ìÿçßÅ× úa`ªÄÕT±4R²˜TµV$¬V‰-+TU”ÕBÁŠ+TÂK|zô‡¤/MzW¤{•zG¦=/O¦zgÍô½7¦%‚5 —7Õ1·WÍ…Õ…õõJ•*]ØXAR§1!È€¨Ò“P,MJ-MZBÉiJjš‰4šŠ5 h²(Ôj¢d±ÉSJ &‘,”0e#*F†¨¬–P25Tµ1”ÔU©¤F&g×ÓÛn{kÛlc4ŒHØØÂ2í$d‘¹ ¶A»»˜šbÍ´ ¡žêêŠ2yb‹â€A¤HElbÔU’ÄV©ªK#J––TZ,*°ÕTÊÔKK´5Qje E¥SQ‰MK™-ÈÑF†¥MT5L‰¡š*ÒÔ«OˆA‘!|r%‰‰!!a…!„…a HHa‚ ì…!´‡*GC!q+-¹o”ž×!MCŠ´2+RY I©,‘¤ÕV†”jX†ªÔ²VF”e2«C*ie LQ‰„ehV!’ÕFš¨Ô²«SPj5)©eS_#â‡Éºƒä¾I)©MøôŦS P¨@¨•¨!P•¢Z¶ábX¥ˆØ…­………B¥¥‚XT.Ã#Ìe'FŠS#*YZª´2‹I„µMÕj+Q’ZA¡©V†¥ZšRʵA‘ 5)¡¢Z–•5TÉ•L˜‹"`Õ&«J™C)ªâWÈ@ hJJ (R€¡¡'IÉIBRRY[¢fk‰ä$¿¹Ë1Ásls0Þ[å¯É#EP¤ Å‘4°Œ–¥j2VFUidZ™++)`ÒX²¦&%¨Âej-KIª4?I$”øž±[ö—ÁÞ×µÓ®/YŽ¬Î¼´¼²½ýÿì>zv=öë¼îëλ:îó «ø+éÝÝáÑÝ_ÁÝYEþ*ºùÝyß³IfK&`|2‹à¶4»”˜y"‘(žïÍãæûpöòï3ª Š¿^•Ý¿µ¯ÅåÝôëøžuÇ–p ¼ñ 3lJ Œ0ɧ\Á2“KA´‚ŒÍÙ1p¸ÌTÌÊ£ºý;½f¼ºëåÕy_¥ß’ùÝø´¼þ/×Þ·íÊÛw‘ß+(ëÛ| È†ìd…@«jÔÕBTáB bù^h·º$¡˜™[I8ÑZLÈï“õ¾WÛ]›î÷»<²²³¿æÞ˜¯óÙš.C8Mÿ"AûTý9¥ÑILE)ÚØª?”ýµ}ùí éøßëäÑ/ …D|j|± ÞækϦâÓcü‘`ks¶2€©±¥'Þ°f1Ñämo8 φ1)t•6”2þÏ@¢ËÏ=]3ÈTâ6–­,Y°Á¼]ÖQ6Ö.ªüto÷4Íîµ|“ÒZûªfmØœ±A’5 Ãc(¶X¤mpJÛi„{*"ãhS¢d<·m™µÍË·ÅÔb¬ˆM ¦¥ƒqÔH¤l?%«cùÊ!FصíWåu°»#Ç"foTÈêk@þZl[vº˜ÏnÕ¨Í{ýšžºÏ×YºóÞÞ(ù©©íôUoç¾nåný>N^GH¯·wìk—j¶¡×­3âÕ·MX; ºøª÷¯õI©Þ|lú}åÊ`Ú×°ÖW0Bþ"hGúÉæ—•k¾£œÛ½}í¯WW‘G¼ôùÉëÈE·Â‘nׯ¹=P¦óîŸÜ/x=në!£u½ÛuÝ-.»ôΚ‹¯…zC¤7®C> DL0Va²úþïÖ÷¤J½î¨ Mª“jÙ&j«hÚ­¨ÚQµ³b+ »¹"â“’s¢.è‹©(pˆ£º §¾^ú–, MU•¤ieZ¬†V]xðÙ^‡Š¼SÄx¼/Úøäµð'Á^×´½«Ú|ù(ŸÌe…K¢Ââà¸,K ëÛdjJR¤ƒHZLµ2¬SKK_H©“¥45YZŒSU¤ÁªÒjš­ µ- KQƒ+ SUªdÒjÑbÒµ5Uj-U5[‰_¿n“p›“srÜ|†P¥*JÊ’£(J’Œ¬¬²òÖT•”e–y$‘Ù’KÌVâ[ÆbòæŠ/éä®oJš!H)eª1‚É©5bY4,eMZšš²,­ ´L4L2Œ5F¬S&)¬†h™e2eY«DÌ«MKF•™M5ZYMj±¢Ë)¬Lj4Êjae‘«SK- 2´dk&5Z–¯Ž/ì}…ìeì¥ì^ÉìO›ócØö@S)”ÚkMi­2pmÉç·méÓ)ÓÄÐÍ,•÷-÷oñ>øŠÉ¥š²ÔƬaŒ5bÕ1c,i­e†­YhÍ5jÓVe¬e¬l0ÕjÕ¬³Ö™i–4Ë,ÃL±Œ­¦´5©mM2|O…òúU^Øöåí½¹ížÚöèŒ"" ‰ˆ"'ûDµHÖ4ŒŠHaº¯´ºµûwο)öþßæ½»ì¾'ØÉðñ±²Í+4³VdÚ6¦Õ´–Öɱµ-¥´[FŲ›V`Ö#døiö_ I±)‘!IÿÄ" ˆˆ"b‰ˆ˜‹Ä´#-E$‘´´&¼-h (œù”ù¿÷/Êü¿–ûoŽù«hFÉVÂ÷‘ï30Ùl› ëgÈKä#B P…ÐЇȠ„¡¢€(  ¡¡J(-ŠtÊyÜLó“Ê2Ú^—·Ñ$SJm µKj#Ú|:¯†Uðφ|9ðÁ ÀÀ00À@A tF?ybÂÂÂè‚ý²²²ÉYW‚% € RH€>E‹ÂB„+B°°„ ,6LDDAkzIWZÏ€årôŒ¾"eùA¥Èeù E'ã qº-Ê7-Öéºn­ËqºÝ»rÝ[’YBVÆd™˜ ’kÔº Ò‹ºtÂtí¨m²å»”2—×Öœ½ø_䌖FÀÁc°l°ÀKð½ÛÅŸM‹ÄñO ÃÁáâñ^>WÊ>B‚ú2Ù"þ‰Ò|ŒÄܼ¹Ie–öTz1UE>f2¿z@¢þe—ô:ÃŽïßü7[ÍÙ“Y¯éõï;¤ââ+ñŸ§_â:¯Ï·Uø»½íÅÝyÕq]qÕz]yæuó¾Y•¥ß:ÒŸ¶ó¼yïu­÷¨·»pÞÚö?O{}­í³só_zûÛ¨$¯nò?6_n¬®ùïnâ*ýîý.ïo¯~å_ÁߎÙ÷¯^¦Å͹,ߦ÷}ï&Ù=o{{^÷®J+;:ÿj¿iWã»ßškw~*;åw~+:¾^QÝÕóåyÜwoµåù:ù_ŸzÛozû}ñöü•“Öêþ²Û[ؽï= CˆxØ‚´6¥vp®ÖÔbƒ×«Z…×õ„Z,ÑQ–¦á A[bÅ5¨…“lLYL»d­c11+_î*(fHïíµvê'ZLm»?UŠþ=œBÁsáÏ‘0?Qi!h  M~žm/Ê©á‹Ìy§Ýô@±4`ÛC;Þši“lHB¢¥æÌÕ^C}f&1%º4kM3f‹÷åß—Œ¦søO‚bH­Iç"¶}o¬C-+ß­ãë_+Dý+ÚÒÛ^¹1Çê­…ŒÆÏ€||¦ÃÍÚ䈌PM!s‘T 6ȶÊe`Ú„iâá ‘›UUžt|Õœ vn¹6Îzjm³_çX#á¥}&65ãkÝé¢Û)+ow`ÞF D¤pÈ2äѧ-*¨L‚8Ä"åº{—rÛ:ò“ÍN’6—ò’còx×~)çÁ>U`1gì-_{ú>|ï¨%ã þDø~»DÇ=Xˆé’<·í¼½¯˜“ÚÍöïyµ~o×»áLçÆð2˜›ÊäÆÛ1˜¡?,\·ff‰ì,ùó”(ñ3͇¤¢gß?Uà_µžtµí‘ýxиòÝ?>¸ûÛ¯áÛ<çžDx^ƒÞb=é7#N`¸@ð­šÞîþl4ÆWçn'¶þÝšCDðΞ¹RÔD¥M4(ØÅ¤ŸšÔüæ 3‰‹Í¯Ëòwåâ‰y²h¤cÔ1GHb ?‰u?³Õ8êúÙðZdƒKðGï7S¤4B‘ÄlÇÄßÑ„th‚%_vnžn~¢ý…±½6&Ó²/Òså_ ywU/Ù8=²ª Û#é3M"Ûê³~p*K¢/Ñ<™VÛý•©¯O“E§ÈþpíØy¥,‚áïÇ謊|²|½^ßÞÑ´ÛÖߎ‡Ï5Àaz^î§o”éãÞÖ?›ÉyÂ.ºªíoŸDç½n¿“±èî|ó_~=çÜÞ°Z„ÍNÔ ·àŽv&ýM—µî·³ì{¯y"¨üM%l¥6¢Ùm)±Y›6©µ6£e²¦bÚÛm›VÔP§½›Û^àð/àñ'‹Áðk½¥ðg¿öiðkë£þœ‘ɧ'ŠqF.ÂÁº[›,Õ‘cb[¶V-ŽWšry;R×™°T¼J2”ñÁõüR¼SÂðxž °Á?¦À[°KÀ°ÒÆÄ-BÅÿéjY6VVVCdÚ¶V%…auu`XXXsZtèºY¤L@¤Â̫ȤÉ10Í2Ì$ÓLL¥ÊLM4ÓÓ3333$íÍ\ÐPPd/Z(À.®Kše7˜¹©q`Š`¯™é«Ò¯LôÐô—¥zcÓMéž“Òz}1bÊ ƒR¡P*T¦ÑEóÍ3’'/›€ÉL_I—†¼@µüïà ²Ÿ66VÁõ”ØÙù-•³e²›p·B…€ -ØKr(­á-Șa„¶¼m-27Œ¶Îák2ª•ʳ(„É23,³3,Àÿòd˜˜˜f €&IA–VP””%e$³%–Kùe/f2_”³Ï}?52‡ø!wH T…)R•#© ­êßVòßÛÆùoðÞg ç'g¶ ‚‹Æ™N™C@СlQxSž[ɰ2å¯îŽDÀÈΈ¤ãÈPªÐ4 P 4!EC@/Ê ¢€œžrî‡ý(*]ÙwveÙ)v]à`Ë%ÝÝôÓ ‰0 c¦a‚a˜¦Y™éf–dþ¶b`&‰‚òe” $$ É.Û»²î‰ò]D¥ÌÅüÓM4 €òÈn ÐÝ–ênÕºn›Éî[©¸Ýº@d-‚YBÙ&¶œg&f/‹rkä’22;tŽñ#´’êHÀD‡‹rFF„aÆ1ƒÆÆÆÆ¶‹ H’HH²H²…¤²’ÊYYY]%œ—77%ì·ø¶ß!UI„ BªZ'eHýtܶâM·lF›'ïÚóšLWòkûK¿´¦–kÝåÅé™×g~í}öú÷ÞôÎùWewö½¸ïÖE6ºì¨«¾U~—]åEÝåÝe—wéÕ•Ý?ZùQ|ë±bŠ·€±AC„P*Eü…gíííûmèû{}û·‰òÒNÀí›3¯½çß^w™%ÛnΖÖ~ËÎó÷:νmÑ×~{eç¶ÏÔ¼â¼÷¼½¯cÍšÔÛ¶‰¯ox—šöÜuð¤iZó ÖTÝ­B‹.²fQEø®=õ÷»ºËÓº‚®÷Û¢ë2‰Q`áTÿ+d$þy&Æ«Çc„ ¡‘ /äÏäe›ëÐØ mˆß‘CG£èÛ´h³»ë™®îì|­Îßj¿ã~Û½/•úöÎ:é8…XÅš%&|xñu“ìyðOu¨¤o€¢“ö!|ú¨rwí[¶óœ;8­4?|¤M…œ/Ó‘¹6¹´$jE6ªiÏ›ÖøR¶,ƒnÉü¬]¾Œ†_¯äøÚÈqû…T_=j/ÁM²-­[Ôå×7ü¤3…±H5‘¶µOØJ¤Û;Hâšýñû—.¨2ÙK+Ìú{‹ð;CDÑš0Do%´¨67þSÒy´§ðýÿ6¿¿o—öO}ýæò1/ØJ¦_²}U<4Û pÚã0tÈ7õ`©›‘¦HÒ‡…D¯ÖÊÇ_ÆšòE›[ ¶ëh`› K}Òc5F‚A8?Þn««¥%08â 3ÄóÅðØ5Bú%½bø?ƒ^~_*­vsdaÍ<æÐbly¢‚'ÆöïÖ’~½ö×âûÍíÛí-ûµ£§­­oÆÞß›)T™N׫žHÁ Lêà—Ÿ·ôþ^4÷ï!õ½CÁ ú@û^êzx[ñʪ×Êìöè¸GG6YDþþóµ=4u®ÕI›ò©OomƒwÇò?’8¡²’ôˆ4ÔÔú¯šóN'B¯|¼µÑÚ¾½ïDk‡íõ~Û„ò³«‚¨<·×£ÉÒB.þ«˜ní |D(ßNo…ýßïýÔu¸ãÿïøí(Ù{cÛJö«ÚžÔöÓÛ{G´ZʸÐ9#•åLsʼ¨cžM1¸Óâñ˜Ì“iihZ_—öÙbùå1”·/î%U D%•IA%~2„¬£*Ê’ôÊJlË0“M1-‘+,$„…‘+)+$qÇ}}rß_K{—È_åÙ•åy` ™–d&R`f’e™ Ÿéþ¤È“¤èN“ƒ;:³¡pQq@P\ä÷ÌäérÜÌÌe †êiC˜#."TÄDD¤H±JDÄ‘ ! BB0„) 0¥±l°9h XmbµŠÖ(mŽbÔÊ–ÖÜßÎ.'pÀ'IÂugFp'é·Z ((¡ ¡¢‚†Š-íÀ¦S-î‹ Š‰ñþ;ã|_‹òþÙùŸ‰ðÅ}GÓëjú†¶¦ÃbØõ‚¦->gË…aR!V…HT„!HV†þà„„a`¯ñm`/NP‚ÚÚ+F8í-/I­^bÖä³¾‘Uc®L@2 "² ò‘ ##B661cHÈãKD´BVYY(˜®¯¹–;ûøK‹ˆòEÏ5t_dæY•[¹ÁvyÀœqgByÒvé’Д"O34¡)(K))u5Ü쬲Ë%¤QZA€@d¡P¿­O• *ò*£B‰ À$Y¬ Y°¥™$.ôò¸¼‰|ßc¦./®n..‚|•¦ˆ´Äi‚šSiLi­:irÔê¦ÒšÚar dó·% @Ï<¡)s$—2IutOxQ,—ù3UJ箺»§]Mþeý;Žâïñ]ý•ü:;økÞÏkÏsmY]ÖuIÝͺ컫÷«¬ùÑÝüy]q×^uÜg]Å×_½ßÁWÎïÇâëË :þ÷·¬Þvv*cÀ*mxÀøÊUmŠ.©4¢]·ËÔEÝåøó¨öö÷VyuçteÙÄü߯´’eï{ݳñ{ÛãQ°LÍ2Gˆ2_îuÓëáT,m®³¾o·w_{ww—[óww¾µYßmŠ›µ„æ ´jmÞ¶­S$‘ó».Œï;¼ŽöÞÖ¬ëm¶æ¾¶Æmš%H>1¢5Óc><ÑJ߆`iåxЄ€æëzo÷-ßH—Ùø‹?KÞ´_:8­±g&Û[D)‚h{½j7H—Ž5 Ó?²9èÖ šTõr<]µÍ£˜ÈäIB žê¯bŠQþ|Ùœ.Báä­h­ v)y~|²æMk{Nu-ÔÖ03öæ p6º63ÂLDŽj2Dšå­ZœÈØ9/æ¥ýÍg¹HÏ•üðÍ?´/sÊŒ±·Š6ÓAQ9gÙÑjÔ/íykÊÛvaÏ%ýݯ~@]$ÆTCQÇ"&ÞÚ­H7UޏìSæ½ðédPœãAâ‹J«[æ»Z=éw•ŠÄ©vø^4^k•RŽÆãŒÊP“ûnïç7p 4OZƒ9Hæ@‚6…£4«MjÆÄÄ´Òx¸Sʸ3Àaû7ðI›÷b.I§Ë²´×ÑÑ~ܹێ=“>F$C{µQ›ZkS×½@‚&|iÎD™”7Ñ}º@£Q?zB‰§ÚþÔ´û}9½-o1X7d’Y`&(>c_ÕšŒÑ†aØÓŸ¹?Tý Æh°GÕ¿–ÏGGɵ¬ªN©Á46·~Æzoœòꉒ¾]ÎÈtEœ(ÅãSvyë)ަØuäObÑnýÍ©Eó\6!ô÷ðV/Á1Ëj=çîéw‰÷b§HGƒÑÄÛkõ-»]†‘në[üºÞ}ŸW·¹\1ÄÕ_7^Å©†_—nÎmü´.X†9#Zí+RLt²øe!“c%ß—»TîµOƒ5uS¾?{ÏòðýT.¾áðÍ:—y]Äùð´JûµU¦>]m#8¦±ŽÏíy“µTVß’[±µÛ»´^øà›~ù)èª ©"Bi‰´š'¢ð¯4¤éòÙ?ÌVf,K3ÿÐÅ m,ѱ-¨Ù¥´Û;ˆë“¸î 98î %6,Ók`¨§ÖQ)¤Ÿ‰<^ÃÅxŸL™²×¸ öñ©c,È€á£4-Ø!QNWän[’Û®/g-Ìç’iÉ1i@è…RÆPÔ2°I/YK”¥‰²ç@Pê}¶(i˧3àã\L¨þh¶~Æ|wþݪa+1›";{c}&8g_ Pý8õ,9 hu…áN[áðSû{`ïØUõr šgU¶iR•eTÖùVƒìÙþ‹…­ö€çËh{ÁIèt¥g KÄa}Z ŸYç¼I&¡jü‹ò}“QIüÁåéÜô†œYäó—8@´°‹xóË6íu.°ÊÍÖ7•MªD†išÉ A¢c‡–ä}Ëjx `¾Þ¥ƒy¢›í³¹Û£ëŽÊ¥YWK”Ë^©ÀÀÀŸéUjú¹VÄS¡›A¶„5Ol…Ü´9ÖF`Ó'Ë1Ì·Ôc"gÇ÷'3·&U­Vf­&6†’söò :à~cX´×s«JÍÏV·¨a&|NÖ1¶´Øº êEǘc~!9”üܨ’Kb¾y}'lJ¢À7Îv)ô“ \'°E—wóÍ,ÊZñÈ'š8RYÞåX3¦Êycå•$XäûNdì«êü­ ™öù [o,TwöÀ»byùLƒl]+–%ØZ³û¼¦§ÃëÅq*ÈBÎ*BÒ‘EpŽ4! Çi“²“Ù_?Uç—¬ž£Ÿ9Þ€uQŒ‚²Þâ²¢ÀŽ>Õ®Iy5ºí+”“ÔµúºêÚ¦Ò°§órS¢I˜‡yÅPÕãðZòТ¬],2ïG r‘jÌàr7Íà@07J˜WÅqH¸ ÍW´Ã¢…” ”e¼&gd¼‚…P €’á.<¾ŸÃIìBá¥9 ÞÇOÜ‰Ûø€@ˆk 1'5„!F|ìƒE"ø€œ¥4ØCe ‚Îv_èß™Er؆R˜×H®øHˆ0àAEߘn$ëIù¾9VMd¥u„D”eð2ó3©Àæ´¢ñÃ!@#ÚÍ€ƒíY«%VÆPK’<¬\Ç\ñÉ•êÉJ­»éf×Ýöï¶­‹·Ófê¾ Ï—ö^¦1Zù)(ÀK«³¦˜qw~¨T@w#JA+ªŠÎ …íHO¦ÆÖ¨O–`­*_ TØÁê„&ÀBqv«‚¸ žn€h90âÝS"¸ ™|3¸"Š#)H€D¡Aï"PLœ fPt1,jê"CÖšÙôqZPe@jÄ‘úö&@™¨‘|F—A( LøKPËý; 娢!Bk äLc§3nFí8ª_©«VbûøÔ:EÉÈ\ TŸÝ¶dM…îv^*ÓëýÄ*üöÆÔ¨C;ô5Gç±3ëšÞ‘ò§¬^‚ªN=¬ù?4íé[µ=Ü¥qr“!B|AYµÜ’Äã-õˆ1c5’À&æî‘ xdÌ–Fp|W§Î YINøàóÂjê8ÂÌ‹:‰>‰’† Aã!µmW1 îuæh˜*œ¼g’£d1‚@þQb«“T^28dŒ„- c °Â%øÎ¤{F€!¢¢ èÐÉÌ„Mi4@ei-©8Õ­K(b¦ka#!ª ÂˆêÊ‚fƒ-½J„Ô5ôèÕ&:XDé¨ÉmíübÍ:Þóª4ÁžV H¼c“2Xæk«•Äèœ ß^>ŒCVai ÝLH&_ÙÂМž ­r£0ØoJáÞ﯒W^æp>´»ÀnΛQÝöÂ#{^J–9 ²¹ÔḲ(sŒ¥BH³D!úp•¬_Ò:=÷•ªÚd’ ÔÝJÜ$N’ÊH@MsIøÀÌž¸_íÌ›pt%T 7ò‡]¥HDP©Ì€ÄüG½ŠBà: $Q¶§nÀRfw åDL0.h$.EñP]†UÌÂYñ$í™ÔìÜ‹aA¤¦ÖÉE µ2Üäõ* êk-_jF­ìÌBaë¨*VRð¯{W‚µi|ÌÚPe3QIdRü9ù%©p ¸T X^Æ™Y%pb¶\‡P6,,Çíy¼1•§mu¯K¢áÎEïVŒ,ñ©\ÔAtA¡˜…-»hÓÒ Ëé¤E‡sÚ$v‰ Š~Œq·ˆ‘‰wó¸HX>ñ„IÏ•ƒªšº‚‘T¡Š!¡e‡ ¸ðHÈ¢Œ’æFr@ñŸd­üò‰ÓV:,mÀ€Àd¬˜±ÐÀÀÆw7‰ æ' üSX`B0þ!cQ¶ˆ Aô™[Úf6`ðÊcpÏ-)ƒM¥y!æR0TED:eÔ]JbF#ô’㶨T²ÌWÆÃA¶†(ZìM1ži¶ W&#.ÓM;RéjÌîÊO‘ùý)¬ÅYˤÔ-o]4fP ¡Mç…= %$n¾ÛOßËõ¥Zqß8qúË€LOX>Üõ|Íí>Í\Gü&'&¦¶ .׳<•„4#g0†Æl¹½/mñ)?±ZÒé’/ƒ°¨SÍ‚õ mšxÄ(þÁfÿÛŸó ¬ÖL ÃA¯jïÍ&[Å.£WQ„QcQA6™ÑCÙµåx¬†GPBÀŒÐÿ®$#° ÒXFW£Kâ•f2©qæÀÌÆƒc¶ !>”êÜŽy¡… ¦¬5š „ð*œ Hž ÇI0GfЉ%VUdæŒÆ÷°Îóû7]g…œJ«JÁ‹ä'žijç°úb±[Ç÷SæK§¨º[¥»¾ñºÌ–õ¾ \¥B³ö;KJ·û‹éÕ‡ÜAö`Hrý0îàìC:?+6^™Î·‚嫵—´Sá.†;¢•^S„á¹+wLof"ä¥B¥dS‡Æ}.NM<È^ " B5„µ\P†âBr.}IðT”²R‚_ÊDé^…ÌfFD*X‘ E€\JÅ2ãÕqQ !™ˆ a~jðo–ùkß­±–(¿oY’LIY ¢ãÇêò¨ßÔ7¡Î›8œžhÉ-§ÒÆ"Ö´Rj‰b¶W*<•2‹LÒi?‘ 2 Y)‹¨a²±—(ô©s›,zGÓ8ߣ? ÇŠMg"W¹äp¥¢IÄËßÏÞXë]´ —ÀÀbRb,ˆZ·âw;HÅçÇ;rE3_äPq+e+F¡ÏÎæßS„‚'ñT+RQ‚‰æ& ßidÄ@fä> q,X”*p‚(&N)XþÕQ“"c ¾ qÆJ_Ëü(H "ýó;×Òl¢ñCÿmážšAyK‡$ÀÈd01ëf­™”UÝšÖ_<æ9 ¤¸Ì Þ׬ØhvšÓ± _ ¹ûvŦ‡üqv´w°ÛÌf%Ò î³»¤5 ëÎÆx­ü)IYš­`¤ûˤys¿kb•¡o+”ý‰ÚÉ…úÃ{϶‡õŽšî·É9į9“Oh´ñÛUõJ‹ýujJBÀ¬l˜XûWÛ‘]+Bm‰ uL(Ô·¨d[? WÙ›ÞO¤V“Žº˜Ì¨1îî@”—)Ø xXh%2 Þ’PI3EJÐi)D–Œ³›IîUBú²y90Ci*“”ÌXíYÔJ B4ŒÕÕ½bx)!P»2P& b“ZHäÇf©¸ù{y³ V‡wÉJô*Lè Fi˜]ÿ·GÏÆ²ˆ*øƒ-}N¶©|ù ãZ$æÞüÖÔ$2»üœšp’®ñNO€A¹[ÕHiꌯj‡0÷m“%¢YÜŸGJÛÚσjý‡«R·ùäŒQë±YÒ0;.²,zÝ jXp\QœT¾vþ“r?”þŠÒµ|ÎLÕRËG˜þ•L$v‡D°¶$úWÈð4¥aLŽL%rA·Ù…B¸Ï5:@šÒ°Œv”Œ&¨2@¥ö@¡5V9ã8´ì$âT¡Í’+Wc¸EäÂ3l%J$ D¢‘øÒÖSqÙn¨Cùs”´âDÖ’$xðÖUY@ÓU+VÏ>P-‘l\­‡fSBfAFÁQµÊ¤‚¿ßQ 7i k]w¿<6K8S©QC|§¡F.Ob¨pMf Ì÷‹¹#å Ùue²ÎGy=šúU>â»/µŸ‡žKâµÉ³›;N}H‰çy9¿9Ê6bàû´Â|·Í+b¥ÊÌ õ/5i7ŠÍÙ~*pSΑâÒHùC1&¡—¾Éäƒs€4+˜r/ýM‘>I[S{›çYÐN äÃ%"$­òm©y¬îvH­¬K”±ÁášIYP†]ºC¹› êÇ)»‰‘ŽÉTÄd%:¤¯Ô¢¨ÁûÈG33¥’Ñ@±y/R¹ 0JUÉ($÷Ô“nܵ5œR:û°P~ô¶i—S Uµ®¬R™!hgœ¼²^wU)ÌAïXFÁ^Å6È Á[¤¥xL@¬a}šÀ‚^e-©€V†#Ëœ…˜ àËSŸ&?ÙHà²\ZL[Â_"3y4œd¬î/q[ò5jÅdØù¯#-ÑVÀ]â˜L˜gê—® ò_uœŠŠR+±¬‹«²z¿YõjÈ=l´Üµà.¯5µ!Vááìù×…:é¨J×ÑCÓßÉ“g­ŠÚj'›PË[ ç(j6HºV•›SZÚ²óÓJY¾¤Í*æÞ馶‚™AÚMŸ>%f™´ÿ¥gD´ˆA‘¡ÐøKVƧ8ˆ†âXt0Ê…î–Ì;;@Ä‚æ°@f|CÕ˜Ðè+^Z´…„]Oûhù!¹mŽŠôg®çf™ æçµ½«P0Š]”‚Ûë£PÚN=7­è7ôV£n¼I—RJ‡Ø!R¤²¾/uoÖ¨—T•ëôe‡XÏeîøã[×ZNÌO—˦wÛ7^Ä4DÝhemðs$@ÑÖ*^7á }2ñÓUú0 ÙW³né{;„ñåʯñE:0Ìœ ˆeœÉJ&fBƒÑ-¢hIL‰QDÐÞò5Cµ!AÅæeýDûs³ PLƒZÉÑö·µ>”’2<–šE:ÎÇB‰9†íJ=…\/—U‰É§ßGÍŒ­µ"ž.•>Lš'+TÁ¶w¿;^Ãô¨‡÷Ôío\oͯk;A-Iõ´Ì¸x­õ¾¬FÊ[ÀîŠ×jU@øT`†r‘'¢çò&¢¼ÀÕôßÌò›ÔF{Í~p+Jiõ,*ÿNYjL;$ٔĈÔÖUK Á5 :s›©¤‰ ´P2€ ÜÀ{6;âDˆ-öí¿†² Nkf ¥ÈÔªZ¶/ëóŒp—Z¼yï{<ž¬†© aëºÕõëZ;^Jò*$˜ŠÖ»Uc'N<é¡‚9Ô-Dؼ—-­ÎyðyÂËý‰˜%Ñ“¥ƒã [á`¦`8Å×…€0ó]`T.ë=Èg~("ÌŽmQ E-!R¤êõ½£}È„B;H£3 ²*"Ð3¡Ç#sÜÞé6Õà,Ÿ:vÒOëUE§dtuAÇÒ4Ü&†º·G H/½­Çû/„3•'ô¾:ÌβŒ¦KÕ¡Ì{ÚIŠ%{Œ&öÔóO»ôßß÷Ÿ©&\qß3»{Š`~î 3´êSMQu»«ö¾¨Ö‘” ¡?¦;fñ´©|,^äª-B “!7"ë|û—ÂVLM&–8ÉtsLË`I†´3ša‚'až,Ãk”¦qO¹›­2{Ü"!$ˆôS;ìíÎM/tI þçwv<ø=ðÏ•c§(Õl:LZŸlé44¨§Wç”pk|D¤}£KdÒãe¶X™cx`–IM‡¨¹Ò˜¸d6 ÛêÞ-R¹€ªµVuÞÂ’íâ©jê0MÖ|üRÖêbäÂl$¢zFÙƒ¤„iY¬…@e×Üš”H v̰ÃíXµþ–„Ìä2ûÎ~áôš¶°{tìÚ øÕ Švvk]ªÜÓ†R–q,³!ãÓ_öˆ”[b£y=:]JuÕhoîÄy¹œôÓyYÔ&pbÓØàÔ«*>—ϳ út(r;ÅœÝKU<õVª¹ŠsVµˆo ŸS;Ðͦè¡¡j¦žØ•>vNÁ`mºb5ª|+™pX–øFî$I¹VŠö•}k"^@ÝdýÙV/M,- ¹ží"`˜ˆœÉu=8‹Øšxj¥z***4BÅ€Á©J'EzD˜ù“•̤BPrX”XÈæ.#C–æ½WM|\ËZ³¡*D‰.v¼Íñ«i&bsÞxØ\~NÁ ÷¾šù׳9Ï9>w\­u?‘”Ñ9øòÖ>:\%ïÖ¨#­É*UN£ý»Õ–…‘{3=,ìM—¼ˆ]Ÿ# "ç3ƒ’Ö¡’¹â³Û(¾~H’àª"uë"¡(:¬Ô,½•ÍŒª7:Ò¨lo9üßFÖ…ªÅ%-_9Ë(±/©ŸŽ©º¯}}mh8þǽjOˆçŸPÐÌç–=¹J†ö°¦ýÛJU2ViÓ#Œ*2(íå,¥h*º€† C—È…E¦X}Zl¥*[…½ü¾#|z· JpÔ“ ºµjïe®å&•y)ûh[úzŸwà©®ÄUàc[^ˆ}l°XW]Hó7)MGg)D$ÉL‹S!k¬á« è@$@1+*¨íf“S@`ùvÉMÅñÀX-1,¡ ÈV“ë'%åZÌr¿ôf™Kº7>É¥>’w§8Ÿ3OPBdfš}Ñ£ZrÅ>÷UÚ~iÌî²Ê1ãÎB·HÓ¶?޵a¯Æ>…˜.¶þ`Ì€µ¥úæÏ™`oÆ瞎ë'Ê-£ü¸³åÈÈÇû6Ï¢ná—?°cÚÐz øZ´¼¼d’~Έöéê¸Zb …ÎZàÔlŸÁLI<}²RyÄ‚r»°êª¨ù3ÅzÈ à®ì»r6³Ì¥óŒ1ƒ™›Ý:ïvŒOÔs:ÝѲN²‹\ƒX/sƒòÈä(»:oÝBR1$N tÌË@\^R<Ï3/løÌÀ(_7‹·96´Ä’\ØÄبEŸ{>´/ØQLjföÇí±.\/ų'¹}jô'“ï<ãO%ëBÒT¥žÓÚT@†øš:ó?-öWëÈ"Ä ‘ƒ o$Ö›sÝK¾0Å}fëf¶6ÈH ɨŸ5å\ù›Óñj}æì?]qÉyÙš•xÖ¼%à›£ëâ=žO“ˆÕ78^[ÁZ‹ ë°‹ÙˆFµ<4°pÇeõ %ÓêŒa;ÜìL†|YrŒÑêKÜž¥µt½Ü•/õ›vlå)š•§ãâêIÛPƒ F¿Ï¨¦è9ø4+Œ2°hßhü&Jdõ8kBÌØd5ê†$ü’©s[êÖ´ô,¤B£ª‡Ò+r µnî +”ÔYÓÄn¥É·UŽÌcL$è·@m­ë4ìe“q8 žŽâ=ÍQZ’^+]#®Pk‰ÅJ_w;¶ª¿‹>ïokU%k¾¬Iñg\®ŒÈë«ó%—ß°tþÓýòÔ²`ó¹ë™Jðq.ÍOìhõåp³Ë‹vâÞ¡K$¦1¿š ˆ‰ŠÆ‰BærbÖ¢tºÞµnB';w¹¼]Z$Û.HìÈÒ¾¹‡‘.x½Ó˜m$çom鳉H£ìúóï>ÅB²òBã@–\Ñã>Ý2•åâK ߆{y mš|Ì¥épÚ{›lÈóØù¹<ÑXQ´›ØÅ¢¼^.Wç_^(^ís6èf'_¾·ÈþµÐä ԿǵC{ìݾ:H&|@*Sœ„ ¿*W]ÜP:åtSµ%_ŽðPîˆqºõ[Ýuœ¡-Á&”å³âìÞ£Ï_<œ/¬ o× Æ¼:>Îå¬îÁ)pþ.Õû|ç gÎ"r.[AªøéÚ!ëÜn9q'œÎ²R/ŠSÖψ‘Ç{O#¼uüë]<ç-VCnÆ×)D®ó®»t¯Xµîc—º°Yá×rΧ<Ö·u‚ô¼K¿u•ÊZ²æúýŸ%ôÙ3ÙÞÛ‡5˜´ËކÒ5·µ÷.ó‹ fuþ¾]ów–ã¶_¤rÑN÷úýµMs_Z|´M ŒJ—¾×5ÛòÙO”„GDp×gñmdòÐ6’l@–q­¶³¡¶'Š1ÏË`: Wwª>'ô‹\õznÚ óë:â:÷=rW€¥Žš´csúˆ;9Ÿt¾ëö¸¾YÄïGïy—'ì¹–'ÒEW#pL}YóùL³òº^Y-}sÁû2“Ê OƒWÒôDWÃò”Üš¯}B•QšQ™Tb¾Åµ”¶fžyÅ9ÇvÍ1N\ç>';hyâ’™ý‰J¥ÛPÇ¡›$ª?^•‘«ÛÛšK u–¸a:•UÖ碉ZšȈª±jÚ@mQÒ¤V³¢Þ¥ˆ5Z[Çl8êûµ '5Í ŠÊ€‹¦£C ÌØ«kL†m(ÜòÕ¼)o-=Bôš4ÆG{6¬†ÐPµøåd‡¥öø:æÏKT4,OiàÌš² eF±é•­Êƒµ-F½+§Ö<;½~^¯=ÎÙ¥~Û¼þKÍ¥ #-Óšâ'ß.-™Sà« Û—³)ô¦Øè1",êXšÆGíK#Ÿ¾ &õcæ!†Ò«âƒªÂˆYßT…¥…!Ø¡Ü!dΩ!ç¹Q•ý—ƼøãE? .sÛáo~°©÷kU[Ùç°DÀNù;©ã¹nÒÅW†äN'ذ^¯—´ìº(Pñ|vßvXãîÓýô• Ñ_ #Ÿd§ñPüØ:™WÓ QìòA•7oDÈ-)RBL ÐŠˆu¬íH8;ç§:a‚R­Æ3%{œâ»;Ö§ Ô¥ÛùßßhŒ8Ÿ,J}Ì”yI© À~Þýöí„heâžî‡]ç ØÆF¢»êËï vV™FóòÃÑxJ&aqÚ 2lñ·1˜Pé3Æ©Él`Ç5U9:‰LÎÐf£@tI&6·£8Ëç UP= *¡  XÎùsÒ¼¾)2‹Ïˆž~Ã=¾ï^xjtÎÔ1ˆ‘{4¦AéÔò½/o{îèÙž«œ[Z:º·eÚÝF¤ºF®——>Š?X+õ×±…:I¦Df}•÷ s;`ENŸ~” ¼_m²‹ˆS‚ ʸbÜå*(8—¶V§Ú’"¾T6c*Õ+¢Pƒ+ ‘Ü6ê^$ÖM”€Dœ¤ªîCâ+ ·r9ÅíϰB/o£IÕß$ðõbÔʘml©:IqÉVQJÑÔhìßÏ7•ù >eM1MŽº‡"§9¶§BY ,âwæZîXú‘,Oœf¾ÐÑ©êvXXžóoœ;j„ÄÍÈài$™ LJÐ’¦çz”.äþİ?P”â Õ ^’ƒ£sM°i¦™³Nç)" ÅFŠÓ4¥'-VæÀ _éåóB˜‡¨ÒÓ±Týö×zõnî¯ñá}èÈV%!%Í‹ ˜ËªT³Ðî3î8:o°YkÚŸ^Õ¾4;Š93ä˜êÉ‹# p±Pམ˜èpkœ1Ý@‰ëIµVH%6ùÝ”å4Á#÷þ1NC|íu>Á͈çöX »{Ò¬fãÆê ‹[Vuâ,6’Vä•<}žïìù¢^û ä·”³ˆ5^Ü~*üÃrš…–­¾ö*Ã=çO*JTâ®X~&)}¡ȯýg Pn¬@Ñ eX„[¢˜¢-Ÿs‡\u4 ¨:yƒ(I7;xh7Rõ·?§0¥¨—Z0*ZÈA{ Ê$â+;2²K[úiÑQP¿;¬«Åƒ¾FLØxbX²ÞŸ{7ÌÜ-WAåVk:ÎbÑ{vÔZÿ'ñKÞÓüw7tàe œÖðº:B6úÕþåy«¥»)ë0Ž^·Ž³\)å]²¬…a Zê\RiÐÉ,•{—„ÜoiÚ¢E‰™ê’_åpsœÑ¯¢©m¥fw­þ›KfÒ´Þ‚"–,FK9ÄØ$¾IˆH^B7_”wØZjܸáÀ“Ig4¿ÿgkÚ”„kñÍçKv¸ÖRuïÚ÷ÕÅ3GšKx®SGƒþÅK¸sœàâD× 5D+vñ\p³íà†-‰ïg‘¦IiÈÍ_–co…`ا̬N¤n•®¤ÕX± ÆÙUñ[2ã°—©t©•øuèÆžRµýÁæiïŠÛ§eÉ«‚µWeŸžÑ‚¶tþõgS¹‡œ€þéÿVWœ–¬A×1{êKs ÿTÉ~Ï96ÖJsƒÒ–B côÉD­&Y°@¸BB#"|HjuTd,öW-ßs<î©ÉÂÖóyÚüg:û<ØpE¡ï<ý¶=b‘¸m2|Û¾ŠcÝy³9ãù‹¬@pÍN쎌ÄÀr‚?Fäø`ÀµÔ”¤"¥#»´íˆÌ9¹ÿe<¦© ãa9ßéO"^†`2/›½Þ>û¥®sA޸ŭvž¹óæþêôôµcûÚÒÒú¾›c÷/δâÄÊCjmexú†±¹¸a÷ó‰ÞD90¡Nù@»ž@&j@h *–ún`ƒÃ{ô̾!9ÉT(´%º†a¡gAnÇ$Â+~ âEV HÊe*‰×ž…¿Pžä$¬/.\6HžZ÷š)•‰’WôX&Óø~DäÔ-¾ª,ƒ‡Ñ¿=ßKUæ1KS‰$¤øß3uŸ õÏkXìƒYRÙc³ù¤ò×µÚÿlt'ÕÊÕBæþL Õhc@.ßÓ=¤N¡žRÁFOYf>g¶ÇÕÁÂ÷ê!>;ƒRÝsÏ|õ§e䎿‡æ ¥DDƒ5ž–SÍ pœ½§ˆ¯´/<Õõýdê:¿½¢ßkpRZ$ùdàØ±„bÕ¥ò­ŸT»‹ß>YÛ²UÌn¿Æ ª¹ô¥ô{îvJA\N×Íçâc©—“?}7G'Àjƒë«!Qð×WαØjPx™üIXóýIbü_Q*jæªiMüD%s0¶/Yt¢=,ûgòC¦/Lºaþ¢KÜW¥o.ñcÚò\FeÄ¡²íJNL0Sù¥Þ[qê̽@Þ'z÷u³Ç§ Ìæ¹h–yÆ ÷™}mÕ{*­}PWÚ]é¶}êØÏª¹”÷¤/v5»ÅnÐB¥ÎÛâö½Œ×‰¹O]“ñŠ|£ûP$º«QœJÒ~_Æ`“!í_çlå´}œªËcOIL¤‰š‡>…œÄ§F¿ôj¶ž·Êw}`~ùýì|³œ¹hÔÓ ÔàâZ_ëUÐx{ÔÅ}NŒƒB}ŸHƒ†é”’U’W¹X¬4Nu͈ã­éJ[69y7ðgaÏ>žØiØ/rÍgãjîþv‚ÏCáŸÚnùëp]}T®Öµ“ýn„ï–¤áz3‘g¯‘“æØ9Ž­{vhý/z y{C„þW)ÊѰ¯<'Š«ô~òÊéDà©göóŒüø{fSªEO R‡0ž«ms¡Qü;¼êýoµ…oKb@vþ&§·»b4Gý™c:©²FöZïÈ:o”7‚aŸÈ"„äãá]v¹‰cƒôõN¨ '÷”KÆÚyB*Wgl{äpðöÃa£áÀŽK^F_¡ŒÜ9Öž2-É$ñ/RWMR˯nÕûSì\ãžJÓÚßÑf£wÒ¿Ð5RÚ23EAC|Ã7 ®ÔŠñsÊáãÔ僥ä“óœíOïw_&onD»p#Þ¨ÖkºmØÁŒgh§8~ •=›VÛCäòÔ üœ‚tî·öY÷ÛãMÄ‘g²À¿½‚ô©À©}kA·/ǻیŒš…-ß´¼¨ìùaÕªcø`¥YDè´¤ëˆFËk⮳9{_¨Êå4E¾7iˆÆƒÙã‘Dœíb”û{Õœ÷/y˜¦o>Õ–Ñ @2 .û ÂðõBÖ_)ðÇm1ùuKãç|UHIe±\ÖHƒ0©yÉØO틵Š]”¾®;k_w÷¾æ—©*ËÅPª@Åö¦NÐ]T<"o”-¥u‘ \K/²ÝÑ*Z¯6/ÙD–ãÙwT3&tïQžº•–Ô>ŸZâY¢µ«2®q•Õ_˜œ½4 Ú(/ϲÖê#ìw6À=ˆþáX¸£ÃÎäõÈHÛœõFgR¦În ­b+b+çÓ”ZäxeZÝ.Ðç@¥]+Gr[p«92=äµcÆPYvßLtž<L¡Ð ì\oÒŒ“;Ê-jø³vùù9…¬©9µÊ I‹h¯«Í¥õ*ºè{¼N²$óïs¥ÿ¹qy‰ª·¤¤­ ß.e× öQ9WÓí4|ê›_w·‚øv¤ .Ä2ÝãO¬Ú,r»¢¥3¸·‰®LrPcOf\Ú ïju~pÍ… ÚiÈ¥AÞ+ÙP—÷·6úAò9«KB”¶£qžÏ‚ùÓíî1“®@}† ½86m=æ§™áªþNŒñ“ß>a*Í;Û]G%tìöà6¾íŽj5)ÏŸ—_“’«ýz£6ö¾2Ý´/x\ZwŸ*ûæù8Éq¤!Þ™æˆt Jx©¯ku ç¨JE8=Êc±Uu:Ò r]_téšÄ„Îôò›í9¼»«”ÄØôÖÄdŒ;Üw›ÓùÚ@>Sí‰Ö‹tÝr KPV?¨hÇ÷§0g©q>þ÷½›ÍjŒBBH,Vý”ú1{ó­zcÓÝR^´Qdßb({ ¶÷g©kZ1¤ä=ûér ûû…Z>¨§nÜ~媵®_FçKJNJBÓéGÃ#Ó{L¼žá ×+'Ûsu£UØÎ£ªEÁù¿¹_\´ç”Ëß{:£>ž¹h®òúkT`̯ Í蚤”*<¢Ûozc •ÆD-õx,÷Ë/Y>ÎWßžá15XØ6¸qâpÕãý›7±CÐØâ¹4qt~óѼ% Á(câæâEiã(Šü÷®øuðÚ¯ï*¤¦é Çë7áÿ‡ë1±r^ËýË÷ †Æh=Œ ƒ²J!qiFâX§a¿F^B¡|4åÞǨÅ&ë./§iö AF­ø3oq¢]öùlé7 3úylú$’… ð%çyvR~ªøzq‰½hz†‚™óÇ7™no{ªÞŠVò3±ßǯµ0©½2ư2ù ç­0,Ú›¨?'=K„°´}Ý\/=ˆþäΖœ´ßÖ28f [³*‹r˜1#ŽÝ_G(îçr’ŽñóÔÞ#T¯kч_s ½äKѵ›„„kÂ)ĤøçÉ1f;7‡ØÐ™ñßãËæ÷¼m|³Wõzr •1¹¨Py+ÖeµE /2y˜'‰Òؼ /D€ð~•[H™E°A—ù©º™³}_Ž‘™ _tÞ‘÷?¬Ý´ê ¤»qŠäu•ËÈ1ˆÔ³kø÷=>ë Î6ó#uôOÈôùš4ÁŠvH+3,_KDL˜¡°6} O¬<;\'d¤þ­Qñ+õy­ßWj™ð”Th!^kzl?ÚîýǃéJWîÆžo :O>•u¸kD¹?±„ª;Ë=–+8®"›§³‚±`¾Ë©ïW* ä*9ä…éñÖÕ©0@}ÎJ£zû wáe‰mWÖíÍJ•"í~Ä”~i”CÂi¹ZtïEñEVø­‘áÕ ‚\…5ì=%&<üç}ß2˜ï~ x3„ðö:Òö·,a3Zí9KØ }g¬¨½C}úÕøB?zŒ¾Ð–á§Œç5¿™~wa°åõ¤ž5ÄÆö3–>óêÉ>óYêf©b.KÒ¯Ó<. ÍFÙû¿fÒÀÚ¸øSŸ)r:CKC sE+¥wŠP'à7‰S©}sKšaÔ÷šTUâ>6¬ø´ý›µ)¡Øôeß® ·H*odšT~Æ/‹v^úwúp%§#&§1ð…þ©³M=®ºJt•q@ÕçBÑœÇê4|¢\ŸõÂóÆ—O‹åi˜ƒ—·h¾§Êï,”\¾ôë*Ñ~ïjÐÝñãDw7ç>n^5’×ÌÛ°ö‹ïš¸ž-AÂih<ø­ Æ$K“ôþ <œœ>¶Ø;JN†Íybx›Ü)j™íÆáÓÌ'¼Çƒéý —®t‘H¬n~§”{è©Á"4|"zžñ i·ÊV¾Ö‚¥b¥u§IÑ(©2]ýö³)Üf‘ããVÏHK¦ðß,Ç )2¥Þitë ÏjY›H8D~íá“y7¥èÙ®ýúúz¸äŸl—3€ÍÇY¾Ïçcø|½Q_¨’ ˆ#UJshzÖkªHÜzXÔŒ¾Hû½ØSíVQ0¼!òþ¾2 ¦0܇8² ZøJmïyé³ a^KrŸÂ‹2û…kfµo#’ìßÒGŽØ¸²ß,ºûyÞ!õöµõ<Ó M”3*¬c»`lö§¤|}Ìr}ܧ۵î—:CQNÌé“ù1KGfwÕµGçšé^©uÃûAŒ%©dØAÝxzÎ;E¼í]ÃÓD¾H8žÙ(g”Ãc4ŸPPZŠÝLÛ™Õ¯Föøzy-hï¤áÑYþ¼§ëç•¥žø®¡öïe¦ã?gZ¶]IP[|óž’¾ôéJ»´åØÄ'·®*+­¨û5š;v¶’·Û²ï `ޥؿ5Á~\³K^®“©ØC²8lÐéñïT£½‚µ:|¿ x–-lP±Ú]Á =+½¯j 枬½Lš)}Üøj/=wE?¦”ï=¥D¯U?šRÃ%·wbÃޙƞ^²Þî,Ú]Þ<{Wá/&ÎÚšYîÿn]ÖÒ«ÍüòqLsèÎß<ƒÖ*«¼¯–Ów®ÅBiŠ'ÀÁjÊMŸ¼þ{RöcíP'ªrHbÛóù3_…†Ç6à+( WG™ãÉ]’N{I}þo²Éý¡¨¾rþÏ4¼ÌspÍ…u¼š'ÍY´÷ªoTÄçô‹îkºŸá?Ê;¿®þ*p­š<S\¤ÓsÍ×ëìCâGI%Ï™X¯Mº×êT»ÌÜ\€uÒ¢÷o5nKÜÞâSp¤ˆÂ¯O›T)¢Ke¨aÒ²Ý2wS9?ñÏ¢6¹{Ð"Qì¼(æon)Ãc?;ãR-ráÌ@Ÿ~ÜÈZ^æÝ¢Ó:Ľõ`9ôøôiÖÜÒU³G­:Ú¢Ù¼e'iœR>¯ÇvŸÏŒ}Û¯l¢ÜøÝ1kN¡M‹ö˜>ɺYG7ï¿›vðñ;Ìá ı'Ùšvk¬› *MDÈCâÍca*ÝáT%€½ª8·Û´¾÷n ~ØS?V÷×Ò IíKïîŽùxħîÇZ_b×8ëù;iFr÷ÓsMvå@³ ¶Œ‹íÏwø%dÏÔ—†Ó4? ce¤”ç8À =Òû²¤­9ë=ƒømσçÕ1I®ÕG¢«7N)¨=¥¾^N"ú{ÏÔ˜ÔeÎv*”—©ˆÉÓÄycQÊ: S­÷µg¦›/Iz™Ç ¢ÂÉèûá:ç#¦eÅ[ï‹7鎈ßö7©Æ^~ß×ÐO±\1Z¥3›×á´VkBѕӼä¡?Væ1vK:S„¶Y—6™¥D'ª ¬P1¬à´áKgh@e«Êq¶Š…Z-k-%p>á¤Æv”Amwµ–ËÖŸX±ãù1H-iεø~õQyð:ƒòNŸK•Ί?³ÄÆÓÐJYUBF²Ru0OäNß›CÉpü]¢ïÀ~sß×IßÓ­uñ|øN„®øÞOáß©ŒW‰ÉؕǸ,Y¼¶ùNŸoÃ]µÎ.‹”ÄȹJnÛ¼æRÂCðv[ÌiƒCõ˜›6¬W5K°jKIt¼9¸qor£—pÜí¿¾”ûêf©G¥iÀ=ÐÃlä5æ~×ÜÒçnaÚT߈uN À½ýÆÍó]-úËuÕo,­ Oy‹ir©¸Ç½ö`t€³v•r¿  ’ÃVXÝ'»›xgåë%µ½è.U\Æ"e5àgê Kx§nú)Ãhs­=Á<]ÎôÌ[]šß7x«8âv½áV–7½D')++Ê=ì,p÷åÖÕ ’I·:i³3kü‹YÝH-çÃ.÷ÓÜqbó 90ÀûPßcÆ<#Ç+§ÔÎñ:éé‚íå –šûS˜O’ΓXúó¥xôid—Tn=“Ô[Ìûdú±94„S%·(TÎÖa˜Ü†{çðN3”ŒÉЦm>gA§¶ô×аDßàÕcî{~ ª}¹X°|&ú¥ÌkZmÚü~X~õS²÷{Ö6º \ÄóÌ]'ãþ¹ WíaÜ‚}@)\µ®J»fá®}lÇ#„2} ªÇ_`¬!–Ì­Œ¶1ƒ>Óàé’E+˜’òa»N.?ÞÞzðø·©ñßÕ©XÑnÅûNÇÔ*SwîK_ÇÞÍdg}wÄxl—Ó郻r¸;i^Ry•9}ËG‘dyñ6§‚ú*t•Ý£E'Ê#A{2`ïÝOcÇÑÀp苺ñÕ¸o\kSU’{Ý Ñý %|îGáí¯{²8¹ådذkêkÚ¼oê_ra0{ݘÎWX¡‰­À½Œ‚ö+Ÿ¹u âbΰ=Oĵ-°´¬gйn±­÷2äqã@Ï·Ñ.]Fž\Å©½KA‹`µ*W—¦Æú±Ÿ1…Õl—šZ›ã´¾·/ß¡Œ~ú:¤ËåæW(k«Ã³“ÀW¹ŽÝ+Ã܇CÏI®[®¹†+E9P# 8Gƒ ²ã:ý9®¢º~yÃKoÂP;¡E¿¹@‡ŸÔû½Þƒ­#:Q©÷ƒlO·ø4õÁ…k‰–¤• Â#¼M :×¢œ¹ÍNç7¼¹ˆø¯"Ü×¹êµZüù@ÒÍ.—>Ϩò¼/i«¡2þŸÀ,­2̽[MWk‡« €ï¾A ðdðÞÿkŒÈÆ”nôS¢Ì5hõåÖN[;ÀëfÔÇ`í€ –E_¯2ûé‘dëUÌ·ívxˆ”¸iL÷s®&¾~f±[— ç8cÂ4¯*JâGž&ë\• ]úšªÑâ…%Ó sV:)~ŽÔ$xÊO¶êGØÆ)§ %ƒ®9,ÞÆ¹‚h–”µK}í>§?¤8 óiA÷y%í§vÙ§“š·1%ú\æpA­§˜åOÔ³fJ+šªO|?0I>°g*rQøïi^ÜöZc½à4¦-¿_7ú°¬©ŽíÕ`Ídú´7ö¾=UÄgRo±Þ6g0ó‘% ‚g“¶Ö`ºë•ê´\zþÝ‚±N–yºâ³{ö˜çïQ·7«ZW'¬Ršñnúˆ#&)ªI‚’ô?/II-6ìYßfuU U:&Ëåü–šU¦aµiYønž}/°Úí'ðëdƒ-kœ^¡{y -}­–íÚ‡~Ö¾iê-þIí¥{ªZ~µs× ÊÚæý¡Âåêð´Ë\Dªä×Å;Mq>®|É/dy#V”kÐ –ܧµùæ~«î…¶0û宲çzkZVäå;·­4Y•µuªrÁnz¼ã³úk ybZ¤³ŸR¯CÍ„4 u=Õ¯^wùp1ÞCÎc—8ò'S¡‹ŽiÚ¸š/.ÎSû[œU&Ì6²x¶eÃÈxw³¿4çÓ{•Cœ§9ƒ­#t\;q¶ÙÚ…±Ðã³÷…Þy¤NOXÅY½Çņ´°o)ŒJܱÊ&^ÔÛX¦ŠöøGŸ.§ß%¨éõÇ¿o‹öäŒQ×$œjñ_¯+átãnGÐ1ß‚ Ír$Ôë;ŠÉŠuŒbáv¥)d˜¸Ý µ}”ãÓÆ&“ ½wêÓÛœ=‰îÇÚÉŽV~Zö®»ÞSG«p¬»:òï…˜ëØX¢Ñå’ìé’.eŸâ½¾DßËÏ5œ½zk—ªTó_}o‡ÜcT²¥Š|ošCîzš>v¼êøö3_Ž·Ó5´ù­¨k"zoB5, {ï˜3šOˆÈ¡_—†Þm,Ê]ÕÞ½îí9ô5izýwÝð±«b³O&þ}½$󂸅èôZs‚MHye͆Ô))I€8Ž˜»g$˜V•ç»~Z”^›ku¥©zÍ °}·×?JϪ—w^|¡ÁòÅ{­nà#1ðCÒtz;ªµµJÌ ¿}Û|ZŸye®}‡Z+ÊÈ7 Ó»¯1SãKàÝVxû³Y ^u¶÷-M‡ =OMu&µËåìè¡ëýQÕUÂp`KO Œpáˆê%úÉ‹Z:ïI¼ûPêï?ÁX¢.Ü{OßYÇ!= g÷¼õO]éøY÷ZЫ²a_>Ì~­ñlŒ·gÕ·—æ ÓÞ¤,'áúâAÂo Zh[÷y>Žšø~0õk×Î=š1* KYRÇw,MìÁïb­’Z×!X¹å¬SÚÖh±’‰*‰Y탭G7ªw³ÆsMÇö,;¸eå.wíÖ“z)yãäL›ÿ‘qÏ£óýäÃÏ¢ÒÅí(œ†oW©õþ¥ó<áFYжt°–1›ó‚@"ß$.óÈù•¶Í\y‰zù ÂJk}Ùv¶*ý&¶RAŸ&~Œùi¥qNÏê ÓÛLãz“Ѝ?qz %¥+€ïs7øºú?êÈ õɵ üA­Ûï.²Æ×‡ÇQkpÇ_n¤#O,¦Ú¯ÎÜÔ·®Z´äò—á]×{Œz@˜¹"î} nª¿Ô®žü¾|@÷3»Öùµé?±¬pçsö¾ÐXO)wÝ}ÅœSÜ\L”þPú{¥pFYµ&I‹vÜöï1Ø’hK•.I]'¬9»7ßkïF9¢ñKŬºî» —2‘诽.õňƒ î ŠoäŸÓ{Ë{^ŠS2øþ] ƉaÓgßœÚh€{êtÄ/7·É·5_;ßêÏæüƒá—qÜ”€°ÕÅ)1¯w‹k¶Òr‚kð©â«ÉFØX¿o!ÞcE¿²Y„txÂ…Iíì‘˹+­´õíUôx÷췺{,óìI6¿>¿Ëë¢Ðe±ÑnÕM]‚¿Q!]ûÕöþ>ÎVñx‘)=ÑÊÂãyæü¿Ñygœ¦—ÂùÅsÛ­Ñø#öo—²èäÝ»˜®!üÈD‘{D=¥ø·ÙÅò¨`Ù$åiIïV»o«I•Æ“¤¯§+„EfõÜTv0 }»5ŠÚ=oç‰ ›9zúùe=_5qp8êŸs­S#æßeéýZ_ìg{ÉíRHmñøÚ÷Ñ3PeR0û¨œO/4÷¶hQÎ}~Í©¼äÆ_yˆ·>ªv(,TòOªßÛÂVyÆ.&%bŸ}?]é~å¯ÛdäV–>Í]ç@¬ª“yèÚ±z¹HßdJ„VfŒ6p®Oiç’ZÓõë ­dSî9ËLªôA²@á¾Ý¾d¥•zæ5ðv[¸fÄ$µëÿ4ÛèÂ2 |ISÙö5;ËGÛÖÀع¿¯év£ZbÉ]Mw«erö¾”³Ëaiç‹uiêîIîôo«Ò±_œp)½Ìð…ë›ÑiÍCH5ëy¦TÃ}§½1S óXºû]¿/÷Íx…Iã^Ø©O€:û¾M,¥¸Ô9¨ôœúŒmv5w“›éZuBZF‡ÛrhS}Ô6dâäÔå3}n~ø¨_^ßÛ´{5JÏáÕurËLºŸ`³»>ÝyÚÓÛECGÔ­H8d/»¯bx¶%o¥dj}i54ñãúÀõxRøßeë3¢›ef‘Í™æK—¨¹¥i¾`‘Ýd¾v™úÒ.‘õœc)¹Ó¦ZÉŒ‹³kk)q_sBvÒ.§š–ºþ…,OdèÙí^Þ÷òÙ3˜ œb_õ›uV¸êzS¬­ÀÔhÊéðü%+7¦?.>9_–FerÊ·ÑÎûLæðn„ëî¶òñ+x'&ÁŒÅñØÌN,McÆe7-ZaòÐqmÕISw½ìkj¯'ŸÔ¦%(Ùxo›œÀ³èÝd=ø4¶ãpkko‡\/ßR¹¦$GJëi®Ö~Á…(ÐÇŽðœ7Ñzìô]àô"Š0_n0µ´cÝÅú°ï1¶´˜h“#KØúœ•íšͪmíøeÀ¬¯…c“+É:&^öº_F^Ú§ÅõýM!ß¾ú¿& §©Îé4œµ^}/TçË£ÂjV„¾Ý™Í½òr®SzÔ“ÎiÓì»K¡o«,‘[š"Œ×Ö,ï2‡Õm1‘îR຾½‰«Û5©3ñÄú1òœ¤B4n+­ý§InõKO2úU·@íhìSëÙØÓE‹gÖ ¼±-K}žDT÷,v²WxÙ´õYwB‰Ÿr«™ÞvN¦´1rúµ,—‰4êz×ñ­Y0DtÖÉ¡qÜLdþðÎFW¿(~µ°°;îuÛH¯?¨õã³QLm.è´Îùóãú¹â5~ŠŠÇÞ<«[t_#ki,Ô»ûEî oÖ öÚ¹Sl~ÆùÕA­1ªëÐO"F7®QCyÛS“SÃêÇ1úÉÆ²j'ŒXǽªûïObÂÚ’ùŸ^d—cmѼë¯zÒAêÔp4¦°08ïY¦tò,’ûìi_¥†¬ûY;Ð(ÝP¾qƸ5±ÚMkM=›Ï«µ÷šŒØ>Põ"îOv»ý–„–5ªë²Ôêõ¬¤ÍÛ0à¯ä–¨i ãÈqu¤í$éa ‰½A0¦¾ÒKí~Ë´*'Lˆkx’p’‡<´gIõ¨â(2!×§ðÛà·ÕÍ\·l³ÓSåWtûŽ~L£éú×åïŸicYÕö³õ,÷0\7_”/è}lO?» N^ÃFzÂ'Šcç·20ëìj ›šžyæÕʈ Kíº‡Ij“}¦&ôw‹&ãš±M¶ÉõòÖk¦½õl¤W¾2ë7Z_Úž$mƒNÎè–¥smÚ{«-)»wêlÏLjxàeßDYýÌy›uõ9¥{z²‰Ï6M}ÂkûÓ-°ó…_“¥òËÕ­™æÈ hrÚ—Š¯”çŪh£˜=ÊS_¹Ý¶3G¨Úø»Ì’%œ¸m>©4]ÈyÅ—KlEp®qç±±ê>Fî__m»ª$¥ÕL­weÜô»ó:îE™>¥*É8”ûs]ò”5—ñ=äœÁ Ÿ\–˜€}ÆÞæZª-šçƒ{êqc]í¼W…%8ª2<é36½7˜#ÉÌ9°¶Ë•¢*X»Îý‰?«-¯=íö3£žÆ±ô’ÖîÂWʵa½2¯5A[Yº› u1Ê­ŠpM®/¤º”¾#[â]>Ÿâõ ÏõuGÎ-ß&‹Åy5/ˆW¾Ål²–c” kgkßÖð'Ë÷ˆÎK1ßÃÞ±½i÷Ïrñ×xḬE…ˆNH¾Ð_gÚ |ý¢ÚDBUrSøÀß™£?Ì IK”a=>Ó_ g”¢e¶¬¦#ߊmÝÙÓ|W9¬þŠy´2 é[=ÓîáN^­äÖ›ÉKy‹BKÓ+p·RÝËžñ¤ßÒ›§Ø‡œ¶}Ÿ(Ù­—S×Óžõ´ØÖåÖ¶Ñí©ùs<íŒ6yM-ªH²@¹^·‘é}F¼gB¾#†ƒ,ÞqÛìÞšnj\‚¸Å°VÖ h¦‹ë’Âw§êÉãcÖÏ'_fýd$¾ÕvÁnÒ, ÊŽÊkï•mzM‹ö»‘ðò'³*fûÆ3NŒ§ˆóÞ¤Î_wkTåH'ÚF¼gÏ(ð³çO¤\RÈNmœÙ·zÚR ‰‘ルj‡ OšƒµÔ§;´á‚-;ô+Ž>>½ Nyg®¦+’·†‡ [âÍ”>jø‡rÖßKÐéöû±xf¥¡ m΋MùÇ~Zèrí_—¾+{ÝqÑWJ-|öð “?è”bØ€ägeý×%Ôƒ; ²ÈJ¤Q5ùeìNE蛽‰5>g”ýÛßâ“}ªœ|£+櫦ÒM“øri^KÚHñuJÔ±ÎÈJ­;¸ÀWr3\˜lǚƱñQȽB"¤¹i"¼ÑÉW–˜£/YwAÚ˜îÒf5Xˆµl'¥—=b¹yÔ½Íç ¸ƒ5Iý›‚óñ±;vŸ5‡í}ânu­ŸÃRú7ö|3¼ŸY……]ìT*ZvR_S±e!¦³hZ¢òÒøvÝ7ÅéߥmÈ­>rø„¥Ó“lûéÇ¥+üÂ{­y¡ƒ¦±òS%2ù0Þq%J+z önžPèB·‚{ž^ä†ä”Ø#3?š–„®^Ô,ºíÂ^›(‚<—Q¨ïÖyÙàUã´·0:¿8[øRAðX[·Õws€J‹¬œ)ðÞ|”þ Wåß mÅl¤Ü¬ß ½HÓ@‹óSçwÊÝb¿kÜû‘*xŸŽ¬$|‹àmkU¹cUrúx‚£/»Y´‘%ôÃêæÔ–ëÖåp-êÖ3M\¢ÓúÏõ+£ C4×Ô¹ ZÓ¹›?ÁL—"Þ­glxÎ…¿OA³­¯O¤/ð:`ÖÖÅltjVå ZÖ_|žÍbtïÁôEoÄÔ[Ø€¸v%`ªbc3ÚNiYqróàz󮇾[ïw³l!*W×ç8ìwvóy1»v;_›ŽÝ߇­K¼€Z×éE¥Á›•ÇŠ‰ŽóÌCƒëâ¶üú¸1\gäã{ASþ΢0¸’ÀçMÛ¿Ÿr ÝÈ}£øw-õÖÕ£}–¶-œd°à×ÅÛ×Q%‹2\¾Ý¶Ï·¿Zku¦7Š'=LµSsÁ0Ú*¬È-‰ý×ù‰®Úú{2áÙ-ƒ¼7r#8{©MS£Á ™=|œç1ï„Ç®0f‰ö}?\ÎÈ-hɘòú]úXÞùLWXÍþ³º¼ñö¬ÒÍÙ>Çé)¥g÷)‚šáÊãÀ›ëÓ÷Ï©Œ¹H¥×[pœùÕ.\ûãíü\/¸øæÐ/L1ס%ãáøþíh/ô}ëÍ¥aÈJ²o–C)4v>e¬Ít:ì“»Âa½zLꓜ½ŠÙ+*sêw¿;iõõè­.4×ÈaÀ)‚¹óÚ_l{§ÕæŒÁêÔi!_>àc›åŽ{ìFÜHÍx\šÂé¤Cv®3:…÷!9óæ—ú®·lòS;ãHFÍ®ŽÌF<€ƒœçÜ„ i¯©³|P¤¨ÓŠÞˆƒÅúÇÛdwº{£Uf£T¬@äúBŸJ+Ï.;ªäFˆóžܹÆv¶¦+4,m½‹4xñIŸ)ªP@d“”ýÍÖޞɛ­J[ìäKV+û°=_± s-ÉÙ9}£}ÌŸÆ\ëäDƒ•#n:Дeõã– ßÚ¥ëîR™û@¸½¬š}ƒrc,Ñ®hnÐ6}Ž¼Ì ö+%.4­O>>"â\÷¹Ò52L·`*¯RŸ¬€Ÿ4»~ ÒÔzséñ'¹|ùÚWTÂ|Zþϱ†Mý;^Ë÷/ôorœ“13bÙM÷4°T6Öòk=9‡Ê^l¼0Ó0Ýq‰Ý2³¿½D‡JÔò»âœŽê׿¼çiôgôz²“¤pûNR{SŽŸt–ôÛÊw —*}\â½zF}³×À•>çÊ”IÔ®×·.Ë/”%Ëâü÷×ñé'n™Û„ƱÞO4›-ò¥9óŸÞ]i/ªmþŒ}ú°`˜–½—–Ïqª^%*§·÷Å¥æVÔÅ·½Õ«ªS²mÝ“¨^Á ÷Å}›|R=KÜí»¾]r&„—·ÉwTYÖ›:&óK“Bd£§szòŒy,êÙ¥_4Ã*i­m×_ ·`/Ÿ©ªø PºäïF|äKÓ<>#%ñö^|—<Œ™/ÛŸ¾–ÁG |Éu9Ò.1ás·–Ô ‘7Ò%Íùü7Öb›¾;\û=±üÑ(èŸ(gOru•¼åZ<ûyÊužØ=žWÙ§”%|çdãYÏEÎB,—z<ñ›àýlãWhƳ>~ƒŽÍ)ŸÛÁïu̹«°L³ÞŒ!°½¥9µRø–²sõ·Çê$Êú´Œ ‹¾Å¥ñÈ,¡a¦ãŸ(W l’*õÃXXß…4”„z–‰b|/2ß2ÿ#–.géÏK{#RºÁ‡‘oß_º¥¦êݸi,q¾kx§ÕS}ùÖEqÍ×65×Û¦ñð»Rsû<û‹R¯ÇÌKm[X5àƒb{¨jªŸ^@ÞNÄçO&%$ûéýä’Éós •ï?e)Âò‚;ªÒŽ[åIçv ®ýyèŒ"Üݦ«L´æ¬Ž.2û¬ˆ\‹lN6W|×Éœå)™‘Ë89gáûîÇÆ^@j °aH¿Òºç òõâÔG™ï—©´ÞŠ˜…Ÿgr¢Ê³'ðݪÂݦæãå²RÚIí‡YÍ›B 7aíïñ÷"xÇSÖëFo¬PêOêaO¼óðr›æáNÕã2Œ¥ÕÍj—C¥¦‰jyD~nË’w”J˜{š û äÃW_©ƒUÊÖT÷õâQàŠÞ“Yýœ£¶¶W¶½ýXÝOÓ*c5,ü0÷a•-;[0¬‡m;|-nÂáv¸TåJÖ®,|¥iKö3ÝÎX®+ÝtTp5.€ðBÇÈòÙýÛ J»“é_îá¯ÊâtÐ×çÄO®oÒ˜{Òø{ðÚ¯Y¢Æ#ÄÖºVµ©–Ì|8›< ñAi#ãÊJ[Ùi»¼ípœ33ÏwW‡-&òËŽUpÔ¿/ƒ=¶˜”+èÓ:ѷΰžw¥½ÃPœ%>‡ö‹F>©¶˜öW¥GïW+(—{}!Ÿ6fT4÷i©ö¤öª m·¢µyé¿ñ>§­¹gŠjQvŸr¼ÉZrÔÓ‹fæ˜|âÑàŒuMZÔ—Tk.Öa@‰tÂ'ö/šSï¶­HÅ«¨óâØ÷÷É|î¿g^`Á!ž¨Ú«¹Ï³ÀÆð—ýc }òbu¶d:ðäú½’ôûFDèôžnñ1’ºïyž)HÔºM/¯œxirõgh¨Nµ×ËŸ®òZßú&Â|Þ‚1JˆƒžáåŒÂI/YÖ²Ò:Ö–öq0ê÷égŸ[¹ ýîåÞZ{îšÊ_׊oì$ïUù»ÍOÎÃJIü§vL3} ãVE»µŠLlš)z¡|h7„ž>ld+Ú†îTS¯eO…¯Þ»™Úl·Æ’6’´x¶{b_4\=ò7J9ƧC®»§-bo_ÅÎѶūš/ÜM$¼õ™ìÎ@V‹.ñ"ä¯Ö îeo­ËÓbO>T0Z÷$Íymó[#™Ù'V|IJTC éONqg2¶»¯>16ñ-¼%éÂà´ò·)a§5ÓÚ­P¿×’-¸iÀ•÷E¶å*㼨æZÇÆnþPK%w›ËMY]§ œÝšíš¥Ãçg!Ô¾âÇzm.&|ÜLÓLÕîÚܰrÄ>*õ1Áóë:ÂØ$°Ió h©åÛNðÚ—Óî§&*r>ÍW^yáhÐŽ˜ %©¬}ÞÈùkŒZ{¯ËÜ ß‰ì%“V6-Ûg2¾ª-àˆ¥cwÆð_qh£²‰Ö;-k—qiEGWC¸Ëœ%Ö3)Ë„¹SÊóëNÔ¨?u^ß+•”gäoT^UÑî+µ%¹,»^O£ç¤ ðf™]18Š\鯇—íªÿnr§R“ãšjökÊz“`×RYÊù—ÊUŽÁOï„)Ff€é»°N¾¶¯¬fÀKÃÄèRO¬Ô‡=R›*j§ée-J•ºò«Ï€ÞþÔÖo'ÐãÔ§L÷ˆ­ë9_—} ®W[ÝÖ¼¹å- O”ÏÏÝX0˃¾®º,ʶEÑ)ÚëØÉs¥ô¤‘ÁœðÆÝ裹O¥›wéi¥˜]œbÜÞàüRÜv{´âØõ¿ä E­ä›d„>¬ŽfÍz ÷•7UÎ-¹}>P‹æ¨¯#˜n–ª³Ù=~cÐ%fšÌÞ¬«†-mýi+wérLW¤¦×8 m“Šjg%,R¹Nt²”dÌ&yj¶.ÒŒ$®x!ê„Å*SØlàsç<èÂ;ž7Þå.A…·Ÿ´Äºõ÷ìVôÑJÛ¹ÛCu8·Ûý)ªo÷7?PkkÞÉLQÀWÛ0wñS»æ}'WÐå/ÕéÏ_F扌¤±£½¾OUA8ôO¹ç=¦“øw›Ò_vrHlÒZ¶|ÝÇÃ\С}¦³ë'¾QÇ"‹Œ¥$Àз2­øœç™B_輂ZR0÷»Ë=±óŸ«&úÁÉÓV8EDÁty$ô-ê];™ýÛ_Ù Ldå)'&§íòJR¯r»%ölL sMNÏ©íOÓKß6«Fö~9£O±[g֜Ǟ_µÝ©NïÆ¥H˜îìIºcRAÑëÓ:Tmözd7P£ÁîØ†(_O9Jwе¨á»dùG…b¤«Žï™ [ãóu7„j®îI±Q/’ÎÚ™§p MWC”ç˜ÐQ—åô«ƒ]<}R÷ÙîíiC¬íšÎºÚª}ÄÁÝÈÅÛ½Öû Àa©ÖÕ–ž-½êIé9ô·¾®§íyõW'*—é„eyáj‘ÙÐ6øÇ#b‚÷>8Wè€ø>€ïk(V­Žô#ÜöÚÒkœAN‡œ1&ås,ûîe}¨•U»Нä³p oËZ_|Ä™¤/Ζ!LŽ›û·Â"üj“ µ+ò«È úxîÍþ1÷ǯmŠÉøˆj}÷¹=†±LX´”š;­,ê[r;mïfi;´ª1°ž‘ì—!ì4Å)óýMr\jVÓÍýâ8}ÓÍuš!Ût¡sÖšß½ªÒÑÜãS´’Þ7ÙGç‡X È‚…V¿æ¤e¡šØ02a®/Ž~;ši•Ð)k(÷_>8ïE؞丼Ò7îz%<`^É»2K·>𱎊tî*ä.R5ÅŠrQËeå9tíöÖVàðo‰.Cq g#yñ5Až¨•®àÊQ¹æž¡Ërr(¡`¹ÎwÜÈ–%ö¯©W¥O‡Y È“œ¯%Þä±KtŠgaMî¡#ùq½³p}íÚ“íò{íàg¯çlœ›A|Z e†ÍFEϳ¯`[àô¾æ­f\õ1ºñ+©Ó!:FYóË%ÑŸ¨úfZÉ5ÁT”¾Õä½+@¯Äv.h®Å¸ÎíõÆ”ËnͰ_!¦ùCtÎgš_!š-ð<¨ˆ˜ÚóØÑq¼3ø‘¿±Ük”Vì§„\b›öï—âæuÜ8˜J%<µ½-õÁsÍQqoœ#?Vå>N¯Ã®È±Kæ×®w@Å”ø§®­¶ ÷˜UKvo¿°ðº3W–‘Ä[R¼%#%“Èx¾_q&{ì ´l*&dµ/³Œ„¡GéŠüÞvkÊUy,nÙÁ•HÐÔËé†Ù“¶Äg´ŽøºîkÛ8jU¾êLðÓ5®6eÎû¸V´‹¡Ó(”«O?-æï­æ€H}Í ˜ô@¶=_©©¿³ï“*Ý”Ï6&µ±;O–̹ªgÇÚΑ*îÕ7òc×:mG22Ó-žíwŠo.õH—uŸ¢Aàø6bèøÎY­ åÒ® "ÒÞwRê7õº¨UĘñã8KÖËY²ûwtÕñ“¼±®>‚¬ÂMõÒvÚËÑ#ž¤ÍËug_;βÐûáfù+=[»Þ¢T¤TÕVúüöýd¦²“áäR4‘‰ÝFø‘©¦øÝ@Zº­Æò«ì_tú 5Öšq¥Y¦¤ó§D×RùjÁ}qZŸ9á3­Úù¯Ü°¥€ä´T$.†yêÚèï¸nKU©2‘cÈH‚=í¾Ï”)€sïn¾$îîC¶˜$Õ¿nÆÖ¿ni/>½Yq‡ªÃMã›IÙ8ÇŒ³¡O Ë!÷PÉcŸj›öêѾ< É'Å3nÒB1ô/mƒ„ÈöªÓ¦`åú½ÒfD:Ÿƒž§ì—Ó1%¶$O£&ª5ñx¬oxÑ]®22±¿ƒö 1}s»½Ú)t–»UyÆyFnçQ’ž»Ê<#E-ôÓ²RS™Ä²¶Wö1osÄñ„cšÏÝü‡Þx§êÚDc¾kSɬ•wÔÄÝéÞ¿gOŠÝwöÞ4u”«±æìEö¥iºkaìs¤ÙÔý[·ºæÎaû&˜½=X¦WìÓ‘ª:X4M:ì·={’ǧõ–©vH *n£*ÂÖá·9½‡âWµýkÚsû…çŠáy@Ó^Õ¤8s¸Ò-ÐsÝ%ôw}Åw-ð‡{=_)Æ×:xÎ- H˜óà;噦X™ª'h6Æù:fºú¿ueaÕà*š L_š§›Œ7±â”zàvœ»±ÉžPñ–¬f B‰ér¶.{ômKOè¸ö´Å$¥çÕ”d*!q˜”ÏÔM ,ˬÛ~oÍó9I3¸o¤-*ÈË`Í<ƒ#ž1ÍÏÑ«w>¯†·¿¾°ÏGÝéUJ¯§ù8š±ø+0~,fM²e@h!ûææönù¨SÑûÒ¾-³o“xwSKt² Týöø_<ýbµn?f·^{LžÃìñ)/Aß5‚œµÍ%ÌHþ5o4Z_Lƒ ‡·ðøŽcÝ[¹ ‰ï|Fôkú=аӌx¦Ó}­–ÕÝ%ÞÅù ˜Û³QùèúüÑv 0™üÕ`Fϳ²"RMëßÖmì-.ö‰ÛµyoB÷ÀÒ}ÖÃäžÈ5""Óá—‹Õ…{É6í‚+!¦û]’ hyL“W6•ò~¨”ˆûý ØUßÞÆGÌ4áÒ´d‹ŠV»±(}AœøÕÅ-\G-™VS0Шݑ»ëÞU¯ ·Ä|ëNº¬gc;ßñwÌåmè¦{2o!½ÚQÙ5èî>ù..gÄø#Ö²Þ¾L1Á3¹™¢?W¦=û̦áÓ¾÷ŠË€®¥.Y° R ^»aú´ë9må—rÓ|Æþ/’ ü|Íç Çy@:¤½=uë¯æy5«?Çr½¡u¯‹AsõOÜ£xÇÀ ÿrÓ«O†ºÊ3Ï9ƒÚ _/L\8Ò|­ïéI%­NcG³m1zfMd?ƒ$ªAÙ^‘ŒúNay÷IMõ ËRs˜ˆÌE«îƒÅÖKi©4¯”ͨãóËœkFX^™Ç‡—–mÖ˜ÒeËä›ë>PYOê}]ûG¾ìjZi´_x0­š¯+[Zc9/QÿE­÷wûìMDšçÖïÙÖ÷Wר-Õƒ0"ÜÆ»ÛDsàœ5zn½Y2…š¥ñôŽ%B‹[«oNh7¼†â|¶âÉ+­NAº/Ì%Õ§{¸¶Š2ä÷¾7“ñÃì¼ÆR¡‹üêí£Î,×­½4ì½¼ö¶IÝï’ß7ð¡Í/õD%k’Iè5¯‰*™^ì :‡¼Å$WMy©{ŽX>Ô’)ƒLÑ-¢¿¸ 5¯_©ÉŸ%kýUæ"Ÿ —U=Ÿê¹›ðÖØÝ<'|•ç|Õ~³ãæÄæqä¶u˜¼ŸSÒ½ùÜS\û-3[#Ož´—É`r^s—«kºû’oéæÔ«rÖÚ°ý9Æ:§?šÕP¥ç#ìÞv;”çH7d=•GZ›ö]\™Çg§)‚W¦ÜðDãsù§mÞ’×Ø™¯ž…;Hζ&yátã¯hc+éÒYéýoä ÊŒxçßKŽRò{›c¢?Àzài¤[ëÜylêB¸Ó”Ï·<žë]g+‹Ðþ|Á‹Xt£N¾èWûÓ×+-‹H$ØæíÊ&OvýFùÿVN§e–¾6ÑmE…3qz}˦Ã>ôªTësê-dÉËÝü,t¿ß š*Á:¯Ô•ÏnɆût-‰{¾à+ÈdçPýr ¯'ÚõÒWǰ‡ôåÙ(}.!²ôëõhˆçÃ)†Kk£§g¹Ê‡zzÏ×ø­qöcßd¯¥ÚJç/™¤§³Šz°"&é@W—úÞå=Ô%ßâ ÐýªÑuìð8)X§©;œøÛ»®Øh{kî<-•Ï`¢"Û\Îß?-õìm3R•¶ç»Ç¦÷ßÕg5YdìÙí+¼ü2Ôoö~¼ë´™„†žÉ_å瓳 x8õ¾?ÖôlìæC¢ëV¯œOûéM¾øÛ“µÈ‹l^î&ª?Ø•¿8Í{ŠÓ×S¨Þ›ß«d¢ ºvûïÓõ6vêøÐãË|._E‹m¡ :ÜÞ<•#\£uóÛº^g­ô½Ÿ¾Î©msŸ[ëkÐq—iY%øOîç¿w\³¥ëõþ¬Oµø©OX!9g–*Wä¶# 8€Z{¯÷sñã´@JylÙñ„læÕýs'ëP­G¨y1©üçÁS‚ä³i»„«J|8³ý—õKWó¡>ulc¸ïÝÈÉöÕ—ÙŸ·L™}?9¿"X¥=<’ºle¨øéÑÏÊÓûâuô?!»÷lÏõ)ÛZäuŠæ»+6~ÚR™Î(SÜÓ_]~+Øü“ê6Ò͹£“ WíAûïTè'´á³Ýc?˪Öÿ_wf²o“Τû’äJ=5ºÁ¯{‡š9÷îN=Mî%î˜<Ž›ºaå8PVŽ”ëë*×Ï­/Õ¼:âÙì||âj­œ²µi¯pµÜ‡ÄÄŸ‡í9Å^*õ Tñ[<̇±zè#yfÙ³µûôù~ø©¼ ·3”çM§³„¶3Ú€ïk†|‘å§ làgß²ŠÚjŸ®ãíÖ³)EÍ~}Ž]ÊÜÔ¬ªw_/!Ò»Zü_KòNå-ób8:JÍ_P©iÈ9P£½NâÓ¢æÑ¯6ˆáëc çêøB*Måtlbe~w–ÏMÜì*sÒîÛÒ·µk§>Éazz5$T[ŋLJlÇoÎüóÕRtûév\×gð_Xоh-ðgw>›u¹NanuO­¤§š±U—m`Îý²ªïÛ«V|q’ó?d+, ÖX¦EoÜKb>^ºÏ»ß7>½5ÑÒLÚ*5û¥y+‹ u꣬jm÷Ù-Jzªf¼Ns¶/].9°i{d?[ìŸÊ«÷É9;,'Êô}®å¶Îß9ý‘Îuóò4X•AO*\)žÊ“¸Dæy¦ÑžT-MNX5b]ÁÖP¦\k±<_9KŸeí«€Ó‹@ÞgÕÙ ŠÛ¥[•ò—’}Ûö/æ~¥Žµ$Ì0$´).é….¿uêvuú$ëéD®®5Æ•ˆ‡rr¡Îµ¸»[ß{I[7¯¥ÞÛÊÏLÊ™‚1‹ 5o𝷦'¹¶¯Ž;E¥œHþYOxøS–ÌW—wK„‡3äoqÜS!›¨Zø®Å¯Âñ^››wºyõ3.S—WÂY¤úÏ©æÔ¾ðɘïQ¹c[výj5E}¼ö¼‹ •Þx±u9qÍýD¶þù`,Ó¯#£ö 6‡«2Ð,\³¬ùvÍizçé{©Šjª3ó¦Ô¥·ÃðX$û®;ج, wÇÂƇ{a÷Ðéqã}Gó|= ’âoX;'KZ)×±©‰&˘ñ¡9^Ë'§)+š{{›YuOMlb‹‚Ëêð6‚kkœJ†‘YÓR» S}êL·)Æ%wö±/cûÝLãéß*w,^(ˆÆ³îÌï*-«Yj>mƒëd²µ¯/[oÃOë.l!ŠW)ÙäpCÓÛpkâÄZŸ/b´•ùª ìP²­¼oÓÊ—§ÆCó9ןr&—®>·LdE$—•¥7‘§ÖïVåuňfä$t(þ1¦NäÛµÅ_[©zÖ?¹XÒÝ—wâ›zã'®†4Ö–¢Ú­u¤Êü=·)+։חÏhî#{çzcãÈÛÚù0þ‚«}b§Ñ]q~}à˜mŠÂí–Ûµ˜gñ÷çÐrG›®‚¤ J)ËÝ"Ɇy÷þÌó§¤}:vH"–JÖÔ0ù9¦¾Î»ë"PóÝëDªÏôàx–5yv„ìv¿Ší\è—:Ö±c¶¾åèžÐ-î]šÃ˜Ú6O†n£è~OR@žlÇ0¹Ëp÷tÞ¹ü“·ÊY®ó­Ñûòš/!eTûLbr_Ÿ7«âÛõ-cµ” [Å,£æy¥å’íÕ¯_»÷ZÿW«ùmì©O=hæ4‘*Ž~­eÎùÄ«•ÅÔÞýÃ5ìZͤ³Ú0D‹÷ë 9‹"Hÿ´®×²‚ërš|p9<ªoéò­ÖOPi0UýÌZëþìüi¾hž©*ØòiÍtB1™sï+ýjñ–²o¹ôÈw÷Úšyù ;ßÓ.3Z_z#@¨…)»_+HùKß{ºWüÆeÇ%|¿Jm‰éê7ñJjšàÿ¦rKxþÍì,;ë‚é2£y#¥vóIê‘|U§©ŽÚ•{|‹à¯Búí÷ÖŒÂpÑ6_È+Ì|Ž7ÙAÉ06ôü2¬–™Y%qçÙO²•µ>§PÃZÙGsISZ§fØ DnE,¼Z“¢W¯´y[GšÜ²f…˜§ºçî3ƒÞ§ã¾<(Éq_­tÎ¹P×ÍIì´õ4ž˜i˜kí6ñ»FÏÉ÷ºèǶ¶éôi•ªSUµ¤ã<Å»½ÈBãO*dy2ÔómÒý£ÌF‡@ïÍ@×ö×Z¿Ý}}½ ‡¨;×Ïìî\N çêýºë—¨ãíøýÜWÚ¶sXæo÷ ÜCgÕß§,[íµš-é©{æ"$¶¾ìð.ÜÈjØM¿CtŒ2z sú“ fsš3„S¨Úª9sk/^¡G@Ž¿»4súŸïm–ŸÈV’W;>>mNzr¸ö~%ôûó[PÚï, ‘¾æ®«ß«:®¥öÔ87'5k…0” À?Æ?;Js‘­î;”±ì¤@9ôg,NwГiMÛx×Ö;ç²·^¨×òÎ¡Ž–m‘Õx{¥èýÇ·jO:Ôb²ôÍèo”öy¦ÎßÄS/žÂ¼ñoÆ& ‡pÈñ³÷wiâÇ9®ñP‚Ã[+Z¾* $=ç¥LãîÖMÝ¿&ÇÁ³Í£6¿Š¶*oËxtì'GB€\&•T÷Üz†6RV7–JF¯Ô‹ïñ„ßeHñ®ŸŸ¾¢zò+ż‡<°ç{‹cé×89¡ců¦ÖK¼¾YÐ:˜JB…·•ù† qƒË9p]¶7 ž7\>»4±N¥ËÏ_;w‹¶†À^ùC«JyI¿ªéÕ Œý*Ï>p‡cæÅ/ñ]¨Ò§96_ –G*¶sËD»Qލ´ößVœjÑÝsŒFzÛÛ63Ãì>Ÿ-—%ßXZö§Ë6àk|ò–ÞÓNsiWÇi¦“‡æþûV0y•ç¾¾û»¤AÂjÓVÅÊ¢®v 7¡&zŽà¥šÉþF›¯kBrÑ}s:­®™ÑZZìëòݬ—û×_ëQ§­_T¼»¦Î†¾˜@Z¾§´Ý÷)uošœÂg,ÂoññeM ƒíÓQŸ!dìQ³HΑ$ûÊgã0xŒÛr⎋ÞÝi&NKq)}Ö¯ ÉßA ýgž5ÞR²{ÞKmÌ>_O§³6ò >ä÷HY ö¡-ï‘­ç+ûê_=”¯ìNu¾Dµ§=ÅþÝ4RJ6ò÷"Z_=%e\ÊÃU,ʵožøÜ_¼€”…!~æm¸Lý¯V´S‰ƒ·q¬t·–Â…©É×”ôæúάÆkO¤”Êœø¥m׉ ƒZ>>¤@ÍŠ¶ÄAåÇa3·Ûgd“¦¹£ýžzɶ‰ïèÕnóKÍÅm©_¸ÿ î*þä÷ŒîRÝu¯§úÜ®A«ê–=‰²0:¢Øj¸”äùŒòVÔ~Çé$¶ëm½µ¯¸ðg8x£[×I÷CÈÜh”–Võ·24>Ÿ¶K„âyÈþµÐ5è¾áû/¡öMfö ½¼—e¿?uÖÞþ{"¸Ì~³ÝYeS®Œg|ÏÀ»¯4ŠÚmÙ ¯âÏ9ôõLX éÛ:Ÿ-¨HŒnœÎ~N7­Â_s¥†¶wµÑªªÇ+°ám}hš—D«bb¯ï{šçÊ)w=Ð9%Â0šq÷·~ ¹Ž–á‹í¢ %6D²óô’Ê;Ê9ºáA…ãkxµ²Ö‚œõö£7¶ôøù$3è¯ÜMsê|~dß’hY»îÊÝFCä_àÁ”ŒÓìgºœc7í7É,1Oïƒee•µ)aÛ™Ÿ )º¬/ÒìÂ7cĆÉB?†"RÏoZëK ]æ>í¾¸Ì~Ê‘O];eóR¡ŸßVRì©#›ô¦ûˆÞÉ[ï[ ìÛÈ êª^Í$ZïÁ§/šW“•sv¶°A\Ëà‰µFd=é¥rû1XŠ:>ljò›s±õeèrD"û€3ù†ìIÇĽ[ä6¿}imm|,;)}æ, -(ó¶)q³øóîq«pß¹´Ôµ"õÓ"¯_©įÔè¬KÑiœíò¹Ns={ë.þ/µCäýT¥9Ì6/Yàãíà>¹DûÄ ž1*Ýǃ·TÝ1ÕO†Ï— üXߨú·‘ÙeYb9`Ó=Y÷™&ñNwÞâwH=}óÒÚ¼¼1Ì ¹>ÒV=zö¸¹¤«Ö¢Ý´&l-öBÍ›hçS•–ðøGœËWäXûÕ›¾)çØðX ¹mîr|Ÿ,óMzV"„E|ãÌx¦Ëè)|~ ýêÆ±uÆp¯gßeŽ9d€i2ŒÝÕ©ç4i3’ˆ Ù°xH•£/¼nÁ7$ʺûÈÛ&aq.î|ž’ !ÌN™.éŸï°JÔv¸úÑR>ÔUž}i»8×¶ [í@O‹ 4Z°}Ü4ÆÏõ.¿f‡,G“øÜ—¡<¡ró#3$Õ$W]ë°E¸c|~™Wó·€N„Ö¶í«Ác›8“J;:/Œ&6§:‘KÞVYíêÉSeøÿ©mgX¸ÇqhÅ1¸ø~^‚âiLJEÏÁí4¢ÿÿ cv ßm¢x -}ÊÛ–’¶uS½R¬ø?.ú2t>ªˆ9Ñè6*“ꔫ]÷SNpÌñA ¬Žtij;ýˆ‡ñÖœé ›õü½‘¦'Ç—H<&*ÛÑ'†ªs@’ÚR2åq¦šrµø(ŠêƒNhÅQêýƒí¨”Iy2ñj…hùOzUi×Ú‰dãkqeºÒ%˜—xÜVv¹´(ÊÌRöTûpžï$²K‹‚Æé~ý]{¾´6Â-¶¹l©öUê]¤õÎï´ò ܸȯ_¥{[xáoÏq—y÷fS>·dÚ ð§Á%Ÿ¦×¼ç3?¹~{Ìâ/ëc‹NÎJ$ „†ýÃÐæ]–Éþ¥4ÖZO“Û8æT»7ÙÆŠ‹çû~Oèjídò?¹Ÿ…uæºHjɲXh#{k›|ôelzÞ4âG,™5O¢C­µézõŠ’Ë\õF™%lÉl¶÷Ÿž±:$øpؾ§pØOSßÁK|OTÌRslÃ:½Ü0ˆÊçzNŽJ:šÊN$ßÛ”ß@ÕÆ¯,?½® c¾}VJ+!îdV*PJ_s¶½6áD±µñ·•"u¿iÌ eƒ98¬¬úz/!YŠsmvòúî[ið9¯½ 1šýÌëwú—]°—±9øf:oâºò¯<Ô©ÊÒ\],ëZä~õÏ_W…U!êyàdRŸµ«Úþ¡_|¾—æ>NÌ2-w#ÄúXzžkiö&_XÃç‰Mi8Ö2{Ƶ=däê¡»ØYö¬‡0HíùuœãùògË9Hõ»sZ{yX­À9{ûUµ)CÐH³öaõjÏ(ÂIý›-ž øÈ[ìo•R­$ÈÉŽïï¯iÈåÄÃOßIÝtX´c ¯ d ͸µÎIÂØÖHÚB·çÞa’jd›juíÑùµ=v±YrKê¢Úß>±©ü¹%Óz&$‡·“óE¿ºrj7 zuž‚Òˆ×ՀΜéÀvA®ˆ¢»Ï§ØïçǼNî -.Ø-‘öRGuìä –Æ½A[çâcéζÒtTOW¨¼Àak¶FƒÌÍÚS|ö›¨ÚéT"~-!î‹ÙXfúõë­Ø1,}Û?¡+N“–æu=w ö èVÔÎìZ§Ù°üœ¿%â ÃüSr…åy›êêûwîý§ÛÒ£¡ªíÆU{޳›3Ž6™Õ©ß¸”¼ûYåÞQç´Zú1šÆã8"ð‡7ԾˤïÛ‰Ž&`CÎâµ+»¾èóÌ_×G舜¶Ðñù=燙|æs°ãŸygËwz©®\Ûâç4øös½HlÞêÙŸ„çõË>äwÞº0¶í~e¶äz÷ð„Ó:•*n6pçÖb{d§ü‡.8z¾Ò5ìMió¦\I­sC lûì´•»u0Î)m¯ A%o™i›Ù‡S¡ÌíÈúdßCƒl×ë±…f¬ÍTŒß¶œõõiºd¹é]ï½2b“̸?˘ƒ–Õç ç¡ÚPÄõÜwœÛP9ÔÈñH–âgJµå›_\dÞuiñã YË[Y[¥,ÄvÙÏ‚’)¡ÎT„eðæÜïÖTñ<›úÝ_œÏ–•Òý¬ô¿‡ŸwÈ4)ée0™žß™­ŒÄQæy­Š³iqCçSŠD÷¢e¦{®A@TëÙÿ_÷ê{i0ÁîY‹­ÀR—Q3Ü>=Õ—MSÞõ½‰­ÜZv¬¼DyA4 R¥o¢Z=vÊ´Ù}1½Hé§lñhy–é_2’!_mÅëõsHQâñ%{tT¡Ûí¬§¿ë¶û\Ìô´“ÞAZÕk;w¨_âÕ~»jècöܲ ²KŠmí%þŸk¸Ï¶ªZ#Éó%(æEiý$n O`´áúydzi߃£ÁÙ•¯Ïºâ1ƒ’ÚîÅÞæsÌ}Œ÷¯%)nÝÜ«.{µ—´Tnr‹ÙÎWNÅý:aç`±{º&¾.Ø3͸þ×7 ×c ŸSq{û¿¤_8jR—ÅônQ¡:w< üêvKêjsmÖÕ¿?²:ôé© êÃÔö±^ü¦ŸoÂiˆ9Ûé„–r}‰qm|ÚËÎ3Ùô©¼Èßc½žVÌÓñרïµIbU.éie óæÆ2žÃŹt­›^ºÌ§ýô-Ð&$[ßqŒ§´úCàÓêbnI†< HCÌEʦ…_6úÔ÷Wwœ>uNT¥«ü^YWN^Õ¡|ç ‰nûÉ3¿\G˜¾¢Vû‰¿}Õrµd{nN½·,—XùC‹þà ŸÕ^|2îm—¯+œ´õgí+mFØÕG‡iÈkK“‚ñy;iê‰2{íj„öŸ©ó_Ï ýÝm|ƒÞt[ëçžHZܧ¡ÐbOᦤ¼¢Àõô°5®ÊB´Çd6Í¥-x^ÀÝ£ïÅìú´´ í44Õ“÷.Ú¸ì×ëEõJ¶ûô eõ«y r_s›ýdᕉ,[—×j{Ö¼Ùí>ŠÎíKž5‰rU‘à}ݸZ›ö©W´«Ÿ‚ž,÷:_£îó9yðKã³ÍJ^…½vDx”†Áᑪ|k>íäz+k¡uÄùd¿ÁsNË”bÔ.ý½Áé…‰{jþúYbÜ!9Êöû<‰ ÆmL lñÞÒ’;Þ˜Mï8—¦éÝH{ÈQ¸6éô;0W×P¬]õ·}èÿjOÛ D×i§ÀxÂÙý2‚³#ü]uæH鯫ê7ˆ³½IWQ —¢Ï¼Hq\$þû[_}Mk3øá›^¡¡[¾P–Z²o»Ì»pùn”ïÔž·²ÛI¨Lp-$~f¨z×Ý®æ>LKêñ:àÞ¼wÜ#mwbo°û^ƒr~i2%"Ø1õ³Îë¬ß1Ròå]1¦¹9¶¥•Ò¸mGÆÑF}ÔëºÂá©`=×ÛMbs~oYÒ̽¹ZyÕ«?V$mc|úŒ¡/W£µ+ž<šïœçõgg£ðx’{oÔÖ¢±Ý˳¼=‹îÇ4†œïØÂš}köuߨ<–æ=jÞ_àk°ïØäµŽ«}&´¬ùØJ\¿V¸Ñ<ç©ýkùR_«À­,¿ç#®ûÙÉ1¬uߟSËù%.f·½ƒ4ÎgtítÝ1šà+ ûÝ«JczLŠ}ÖÒ9-­õ-'>Ô.²©Œ¹Ú¯¯-º9ºžÄïô³˜¦9NiKçûß"Í~nÇ&µ¸Ù–i,Óz‰(•Í3ö±¤½O,öåv¾Šš°sèôÁ¾1–›{û´bŠͦáí9¡´X︷Ãëemwž0¢?ú'w¾OsÅkÉké´ÅÚm?ÅqB{«¿Ÿ»·¸ùF\¶að•¤ßì•£¾"IYã2¨ÚæÕ‡{m.L÷صä';ÝÚZÓ3Ç—·B•!Õ÷ñÏt¸‰Äê³£zÌßJ³ºëœÚ債ksÔÞ¾ÏÔR&ÛÀ_æ9n/áRûÊ~zÄ×Ùܧô÷y„lÊLëO¾J'Ô¤õÝßl'yûO§ìë_T^N¹ÃÚÛÎ#C‰ào¶¨vg>°mÃ/ZË#µKez$|;Ü%ÚÍDõ «¹Í/ð†]«îhS¹+Í)ÏààêX? ÿ‡ÔÖ,ázØ-ˆÔÇ|6þ"Ô½&·[míá¤ÜuÈ5Ç[êVa®!b7nêxÌz´á'>ë¿v?}¤ôíÜççÖ¤e»CË2,ÔsGp¥<ç‘"p&ÄÄòJß1r¨ôÓ ¦Zi壩JÍ´¸-/g¸´>ëÅÕšúg,¦:º„ÆHùá·&Ñ_MªÕú·¬ü(ö”øÁ6_ŠÍéüz¸Þb{ZëÛ¯ÂË8ÄÓ:{š61Ÿ‚ùÍÃî¿s–èö½ýæF;Ž—Gñéy"û¾¤”«½Oç5ÓW–C–õËûD;¹Úó÷N`¹ö©æ¿¸òj–Í´˜ë¿$¹¨ÑxÁu‰jV×Ú—*x¤}®Ž·¾G3;q3Ä.ñΰϡrÝÕq •ˆ¥j¬ñ™SíPÕFºF ;[Õ¨Böf<±’Çãô©¼wÇ™cÓ‘^¡éŒ-vZÊ¥i¬‚é%þo/ƒs؇Ø<öŸ¤Uiýò­.š‰>oÃ9ÌUéD+Xî£oÈ…*ÏðRx˜’Q¯¦ç%h™ˆ´[qטÙç0I­ÿN/÷°Ó«{ [UéxÁQ= —À>=µå~wÝ[fÓ¥:ò~¼¹‡æ¢‹T±Æ/ƒ#(A?Vúé׸ «ÚËA@Eþ©aG|$§1$_ž¯ÍäøÓ¯_±X:þy泵رö- #1? ñE1ÉrcÀÔÓÕ.ºHrM?αcöÎ?)÷øŸ\µy0‰øò׌ËU¬KÎ32‹ïQ—zÕûê,fxTÎäÓ$mKR…- }³Œ÷ ;v>«M òÄ …±yzoslrS—/pÍmÚK'wÄÿ§?ÃJ_žVW‘ÍÐ7‚qgî(?ZfUe´¤åjwÛë¿*¿ä÷ÅvÂ3§í9 IèâÊŸ\E»g~¾FvÞ“™ìv“ãÊÔ|z»¦t‰28 cí—Ú„p¦Vóæç-ì¹ig8J"a,Òø§I;4଻ Œ$ÐÇrp0Ÿš~E K¿#âÑ$ª²2Ç3±|Ĉ<õ¡ïLg×—rùÑ,èŸÊ®‰ùÜ^œ˵@ê”"/‰¸-6®«Œg;í‡â‰‰ýrzÒ’\Œ¾y6õ½kß]3!êÜVQ-w¿kGZ¶÷¶~©Ñ>²WYöÞê9b¶¶<°v½–þZÒ [ئûQ°Y'ðÞžæ™Î(}ëòtçO‚k]´­‹Žu¦·ÇÊÚ]{¨¹°LòÇeMáo¾0^šôBåÕܵ…öÉq3̳]vóÅïí¯!ûs•þù­å ʼ¸S¾¶gÞjfÌTÍó´ß¸}¦í÷ÐX·o3Jtäâ[Í~TàÕ¶k+Ùݧ")Ë2Múš¹¼çðõ€¹³à­Þ%ëz æ6™ú÷ß±šŽgYÒw%zÔ&zO‰×(¼S =›•^k¼=AÙe%siÂöjô[ý,6 ©º‡yð›³äP25ßfÛ·ËŸaÏoPã}‰ö^¾gqpÃØ}Yf…Á9®^Û0Žë:سíÞy¦«ö«£c2äœqk›âýY¹GJÆ…¶/±LmNÉËǹáØ)t/Z£Ï1 ê!èÊá«r9,¯»‡ ²¨`«T¾u@1¥[t‚¯h™ÝŠ» «ávÝ(kÆ-W¶¶3“ÏÛ×oá¿{ÎÀ Q$ëX]¿ææÎ›‹^+ #>|Áç›3bÞk+¿ƒ»ÃYhŒÇEl\µ€Ýü~>WT¹/Õ\#VÚ+n9–ɺi÷Ÿ^R¶«¹wÌwÐfì,–â¾cëà96ž¸}>ÔÏ#íhùo”%2RîšÜ9çË0pö íõæ·¬«õ}–õ6}mû1}üÿ`¦e=>ì¬]ö¿^íÃÈ-y?¨ #Û&vº]w9x÷-lÇ(8ö'Ÿ¹ÝÙß}Té®×®Â!¦Tr/žïAXúö@øzj˲ù!=cB»LPÒ‹ÉCM å´6ᬕ•'*¶Û0#µ?ÈçÄiyõGÛŸßheŒj¢À•w3PnÐç„‚*ÖÖ€•.=zá7²”¯[¡¯Ï¬Û™oÏ+þ”¢–Iê*ŒK:æ>´[ŸÛ w÷q]®‡æ“ýª© ò‰ok›ßÄïMö·’‘s+3”¹Ïe’µš}O£êÀ'.ÒsÀjÖmy Ó‹Þݵ•-DLhË’Ÿ[¢ûÖ9Ï?ÂLëhÅB#îI' A¥, Ü*±ê³b¯BýÇ·~ØsGÁ½Òô”Ÿ|ž:MW%úG ;¹ÔD>¯!­ï—c=‰P¼#Ì£Ž:^c‹Ú¡Èƒºje>«©Q;ôSãÑrÖE&5ùùR{YSÚ:l-ìÒ{Úå~f\>iu ̼Z”75› 3$[®õ€Ä¬¶tÖ‰)s‡Åé·|[˜¯ ö¨5‰BjW$yúÿ=VmÁõ#“Q³ê¦»KÀFá~DÀZQc½Âúû“Á ™é¥Iû#œÑ@sIýÅ^’ÑÚ(r5æbÖ¬Óåܳ#8§z×L!6©„ŹɆ…=üpÔοHHÛTÂ}Œ|ÔŒûêb[âaM¶ˆ¢ò÷·­ßœdãª4ÄS”Ö =¼n=¡Yq•™7Q+¤]£}B’rô}Í ;‹'†ZÎ&Òí Ï›$u·x™_+Ç[Ù¿Ôï gô³ÈYK•BÍ*g£O^VõHšzWwp#·SÄÑ¥´GßOàçHZÈi.ý7Š{gY{‡•õ%RíaµÌ"/Èf®ÕŠüç +ŸZv­çƶùžëÙ­ÑüÞê´¾¢µ|a߸^´­Ž˜nsËòß K²§ØÔí2‚œ•Hõʶ÷FùŽUâÙÖ`œ&äòýçÑZj tNüT\)Úøorlò€ƒ¶&Çoèí×É<ÜÊ%÷Ÿ>þMa”~lf}¾ùî”oÏ`kÔÔíýËŠ_â\¥ú\iÎ%yªÐ_7Æ7f´³‹pY©ñ…í?KÕ¿wÆïiðæõÀªÌ«o¯~¦3‡’úµï\¿¾‚Kkñ©‡z·éšÛ~§¥ð¼)o§lHQ2öÿ~&Ašý8øíúeŽïŸá-‡ÅÛJ‘{ÜiÍþk|wrž·"í¸îe¾VvÚ±¦ÐâÖÒ DÂSÎpnÝ—à½W“Ùß·¼§6“q\÷G½u(Úc€°,zB…Ùµœ CºÒX Òƒõ:Â2˜H3( IrQ*AûäjµA“!ôH[ÕW,ÛÔÆþ~Ò¬¥ÄRSâ¥Ãå}‡ ž)ms? ôö –}­èþê]3 æùÄw*±›™…óÚ0Ï¡ˆ4»«$òW/tY¥Ÿ"m¹Ý¸Çš™œ¥ºÔqÚ_;´­(jCcZe ´ÝÒûõ¯Îbƒ<ò—××ÞÚMc biºùýæ9ÏkèNTìI’:ø•xùîØ:«î‡sömÂîÈ&’öåÄVùKXí¿>¼¶¤×’­ªRŽÎ—Ñò=Ãu]-JÁo©TŠŽÁ^Ró<ÒçÆ ¤ôâ²¾Dã˜DaïÛúŸjÔ±XÍX ï9¦µ‹‡(^Z²Ó^‹Æ¯´…ó4¼;Ý€»ºoŠ51Ò÷'.”ȰǩZØ–k»ÕCc~?5kKežHâ~7§%æ;JïÄ6Þá\½BN|zd^Ek¡ób«²ñv¢sÍÂ޳ȇ.9õÏŸ¡s}Ý7ŽÏ†µLV(Ôi,GÎñ‰f1š`Q†JmžXvÓ§ Ú€‘Œå£4µ¹ò[Ø„ nT€¡è«Ú/-wÁ¹[ TnP´“Ë}FŽzxÅØGcóüتɊv µÛIH¡×¡I×ß^Ó¦NØ©àݵ]ê¿R½Ý±ò7=»™Ïë&óƒ(¥±dOgá$¶q½vŽõÆXš/kð.)ITP)–ßÙ|kÝÂNÒÉÈ{¬ëÚpKœZÕ’!Z“: بM‡fïngÜ—/x}L³ÚÆUlòúܵ^‘üÛ,¼ö`Z¼ï®å.õ¯-÷Õcçv³’] ÚwS2°i%TÔ«D„h`AÆ0ÁC òåo[»Iåáu;NÛnJ‡,˜QÇ”²˜s0¬w9ñ/Ùß;Oié&÷J7$1µåŸøaeŸ¥×zUù£;…C¤©©]§ðÀJ]%5»«—X‚Ò¢f¼1y áÝÎþ‹Wy%yÏY,­ýœ‡7Ÿ±f¦Sæî{¸ úñ>èñ/h”3¢­±ŠwqCù¶´½V½*ž-'¹}×Yq²!ó¼« MÓ•5\¿ Ç3\ñI·ÙëMjŸhSŸ=‡^Åo ÃÊ}‘rÕ®=±mc<•†öä² \yðòžÎ²§%ž×{6¶‡œûQåVGÇgõý>ÊØÕ_Úž‰µæüÔØ[Xà?<Œ9š%grõæèEJ*h7~:tþú¯ß·öí5çvNž0À„ØïwÏ^ÐÏéüMýñ'Ý3D-Ï;·ßF)®ú·¤7OŠúXQ±}òðù†å¥±lÃÛ ÿQ¼/°úë}·‚èè%žNEq]‘ü¶_¨ú.?¬û_y =ÖZ~šw|R\%­Âìéx"}æô¿£ß2/k;¯_YyN¡ó­›£é¡Â+óµÔíËw©9]’=>å¯x×Ê\¡­ê¾‚µá–V—®Œ´©¢ÆÞx[1dšÖ”øÓ ^bäý¯vÜÅ´K'ÝQIãáç¹"©u/¦Êø0âWõî>zZéEñ)TWºØá¢qï"¸‰ŽÚd×5ÛL-­¬f&¤²¾äáà#ÛOê¶J}:}íÒAõ½,”‹DîɉáÃU·YCßN‹R¥6Ÿ7éüçHlgïmp=Šþ"Úº«¦¿sóWìÛZíþÂOú…¯t6¤²¯¯Ôd}4B Öuá$¹©ß^ÍA{øšKÙ üJ?—‡—M76Ù¬“Öû}"ù¤\œÁ*S\YW*ï[GêØ) 6—߯¬×©æõå>Wûšâ㽞>;­çšü©ŸlÍÉâ1YF¡X„µQèŸÛqß®Éz̶\‹­ É>Ìí-Ö‚;öû Sï·¹×±ža뫯ÙÌn%Ýú]žG^õí„N¯¡CŸ™[úJ彘ÂÒŸÛ ÐC|·N¸èÙfv1û³mÜý¹­_[ ùeM·êôf‡¯Óì\uåM龢푋4ê8NKŸ¯gé¥~÷iÆ¢­ØË%zW,ÆLÇÆ,›­$Qi­[áå%òÞ“îj—>JW¿3„¿/¾žNe›K2]ÏF—¯z¥êÔý2äÈ$uLJìŸlXÉXÍÖ¸mo’˜æIÌÜ©ð`¥ùr|ÊVTí?gäý¥îoå”ÐþÆ€Î"Y`õ`í.õ=ÇÚç’ýåâ§jZ±WÐ)ϲd¶¾^È âw¶4YéweW¾6bòj—g¹…@²ëÔבC¿»ºN´qßB—ì6GÖÜÖ=XùÐí,ϲÈ6Heðý…ŸV+kΛ Å¡Ýíiá ß¥õÊr9&1§Œ¨·ô¶Üò4Pߟ0Ðé2þEÍWÁ÷sLøGáÄì±ð’•µÂøèÚ¯×}bWkê’ oMµny»3Ð÷çÔÿc²kk,K¹xÎE5ƒþ#ÎyÞq’ˆ›”þl+ßgµ¶9õ-Ré;Ñúô]ÚK0ï ¶“ö«ªtÚ:: ú©…áÄ¿œ5µ4§1Pÿ ¿!é®M³å潨jkéºVò¾G‹Z×)<„óÛQö—ó$kÐÑÿ=kÔÿW‡Ó‚Y¦eM$§Ô—0˜(~ hs¢(Õ'À‘Êu Ëظè×'¦ðÛ<-ú»•/ÅŠÆb5ÀzWa o‘ëÙ¾¸JÜÅD²ÿ¸–~ê•ÍÆïãˆ-ܲ_©?K¿‡ÛCáÀjÜ¥±.†¿jtk—¯ûÊçï¾€×ÖXÜ«¦ï>/^œðb·_w´§kð­'êûŸ7É ÈÆK\䂘NRTÆs´†Å€]Ï×ÄšË-„÷Mµ|Ç?x³ÚZÉ[ç÷9&Žª˜ÙÀþØÔ_׿Ñk.³0ªD”5¹¥»*˜ñmåUä&-mVW‰ZyÅqe§{ƒ;ŸÃÂmµÊ’玒e;×Wkéiß°D-ôT^Ž•°M¡t¶ßÇÎrxöò»®+¿tI¡é£©qé+ËìsŸ¿E{ˆæœ*ü(Õ_ð­Ûó©÷á‘s2ý»Sq¦žÊ¶3¾ðoùk¡Y~‘wôì¢ÆxÛõ“Ö¸é\|ÍéUš0d!1Å ïˆößî5fs-„j³—§¾Ëæò[ÇS´~¦ûµ©ß¡)¯hlJzY Òc®F±Š¤>½ÔF§î¥±´»€úž•0—ÐþÑ~WícLÓ~ÙÝl*Uùšó“)ïAçnεíޏ[øl³£&×[ýMU"êÛ'û`NyÙ%òex©},ÿK¹ë Õ¥k`ê!£+ïµìšƒõ¹û êþ‰ã[®²ûGTû9n¿}™Xe~|¦«»VÞ„é/Ým‰þ]ZÁ †z°Ô=aÂ~xݪßFh²˜Ö™~Ÿ>zf”iN¬º|ëÛ¬YÒ›Pݯèù§›¥§>^Ýà}ÎòSó‡âæƒvý_±ûîÛMÇiñ¬zºjÓóÑñù¯¿»ZNC€Äúƒ“®£ŠýæQŽ,­úÞýíâÛ:ÓTñÌämêA ý­UgƒÒëé@à­òëãgM¦nÇr»Øe¯µŠß~ªÄË{û6ŒÕGs.˜>åÏ]ç‚Zçný{øq¿gvþ¾7íÞ:¦h’úÂ÷b)ø­› kÕûîõå°–KíY=¾\œ—––¥ðôÓi§Ç?HL¹MÅk)o¶Î }w”–ªCo…j^KyQ>ýbZøàXÎRŸîÓÜêŒ[î·[ ìRׯ^¶7bñgºl~–&v ÷ãâäú±@,{‡ÍÂÈsÝ·§'3ËŸ‡ÛÛæðrÖ©žÈä ¨“2‹ÞO´žíJË5™Ûõê6ìAaÚ­«Tùuï¾_¨Á+-`úVkÍ‚§Ÿ‚¶û­¦E¢èrú¢*ÍÀ¼ÖÿÏe²š©Ó2¼ÿVxÖìM}ÜÑÀxïØ]gÁãÆ´ßX2«W…åüQéJÓÞdY¶mrhe=ZZòÖ4•]_²m{ö©(ö#3Ô±>û:¹jÁ*RzDV¥é£½0ŽgAûüƒ½þ÷ŠsT1}óqJs&ç\Ö Bõc¼ù=,Ôri¬'Ù/jÁħ5Œv÷äÖ¿ƒÆ™^á÷NÿŽ¿Ow‰<µÎþ=|ò0Þþ»iqrõø=¥Þ¿’ã÷Ä$Ék,±vHÅ7¢ôÝ„k¤<Î-÷Á*äÃ[Ú¨ÇÊ©òcÄ×Zv³µZ(¾Îé.5­÷4½Iïëý¿KÜÚÚA.*çì}ß³Ý;^|n‡%ñ¾ÇëÖ·[Áz‚^×ïz}w-–±áz)L·ë8×ñéþLg/‰Ê£¯Òôñ³«U<¦ ÙýnbúâN‚ÃûÝCÉËaŸÙ°eÚšýJ¶CÝû§çw´Š#K%žêqú–ŸAmcœ,»,”»˜ÄßQPß ¿W¾×—É=~Ð%¶Rö%žÒþYpœéBûZSqÉpÁ {¿èу¡]K÷­œ[è¶¶<ÝP¦ž$Îw*K㮯z×—ãõì<§–¬¾ÇáoÒ$´ìk‹¹Áýmkäg KÔ¾Ïsû˜ÇáL¾><ü‡e´”II´_­iç5—ã­ñûôÿ2|.þæpùùC«#ÏOjý“=ÐëOÓÎ5LÉ!gŒLéû½æ)ÀZš÷íþŽ%E4SyÙ¬Û>b:ë X¹·.?KƒØ o]ò¹ëò¿p8L€)„–ÎCõÆRO)iaé›f|¨}¼¶dŸ~û’Îp¾²Ag³Ÿ6µ÷Ëø~­“õªÖ/¹0”<íÕÆr^zü¢Ñ™uFWÆ›2¥§+Õ/._¯ìúóáÏ׺Öü’Û†Ó’æË ìäºýÏ7›÷‰@‘xZå(ç – íg×öЬ/_Å·â_Ìbñe–ý2C¤ÃéQå¨×}§Ãk4~ßÉ3ÑÉ›Z¿Ýì¿]möÿÀŒå¹qi`ïø7÷éÓßO£cýïZòâŸL)iÿ‡ìgzÐ1©§°%þ/KuUþç1áþþqPç”äîäâˆ%q'Nm„€‘ ¿‹ÝèL×·wžvÝåîs4ë4Qr:p²Ðä¢DŠ ‡tpD‰Å%Î^nç Žãœ„‘È%#¹Ñ $"%Nî@Q'$'¸¸EÁ%ËÚÈrD=ºÄéÎã„^vœ‚âN‘ÜE 9$¶»R‡Nˆ€)BIBr€â (áÊé%Hœ‚q–éAA|ÇÚÖûxä.óIÚǤâHt%(œD N¥'8’[j•å¤E$$ìÜpD”N9€'G=¬ °9IÎ$GqD p$ ¯,qIĉ')%9œ½»! è„wpë,@¢D¡NHH^jHB!Br#¢Kœœ„áJŽDG(A8éÊ"''§@âP—!"P é:9ˆ" $îqÄANG¸§\qq88pGNIŽDä¡Ç£œHŽ%ÃP(S€\¸œ Œ°œ Ò”ŠGÛ·DJR“„sˆ‘#‘ȇ'$:D98N§AÎPtÛ­HŽR‘ÀAp€ :.öÅÈ’N"H"„tË”Ž„ˆ,ÒœN ”î„JP"@“¥¶NDç!N%NAȽ´“¤D‘D8îIÄ"‰:qB œäÎép­·8AÎJfNAÉÉΉÅINp‰Áá yfÖCÎÓnÇ9/kæ)IÒH#‚q% €”å8"t#ƒ‡9J µˆèINr9rJt‘EzÝaÑÇ¢ƒ“‰¤–„„ÊsœEN' BãÍ#‰NNwµg' y`4A)N:9Ê€)ÄP’:–Úprœ;—!'@@t:C›gNä' s“„ç!pNÈœIr@‰8â8q'qÂáGœ/lçB$䈤ä‡G9y¢ s€q'‰(p"] :':.Q8éíYȤ"àŗI88 ts’—·jH„ 'rt“œà! NÒ#’ˆä”J%æ¥À@EÐ9 rprIN$à‚áGI펉" H‡CÛP: D"Aƒ¸áÉ'ròÈDqptHtá ¹ ƒ’*rr'JDs¨âáÎH§:w8‘%⇖$Dä$“‚!9”D"Br) ¤ëÍΡ8ä ‚:%8àG$Bw) Rs§N£¼ÜŽ\áÀ9"âD‘G•¤Ž 8èwäPRr9Îr9J $œ'9Êró')ËÛtœ$”ˆä‰BŠX—.tâÉ9ÁR "”§p‰R9!Ê ç'AÉ9Ir9J(9NBR8D) 9sœœ‰È4I)" ›‰E¥HS‘Á9.‡)·%!(ÈH%Âã¡' iH¢JŽRIGB%@‰Ôˆ§)HèíºÔSŽ^ݸäW·npå’p…rƒpC…Î\E#ÚÇ'Rq9É íÚ‡"s‰AÜ'!:pG$Q"8'A¹8t$ã1Ç Èàw $‚N%(å'9JIÀI9m¹+üµ€s‰Ï˜QQ88 ˆq:¹Dè眜\”œá£NHBGá[jCåcœRt$JRtE9Ç Ó¥9ä/,$N$)Nr‘A—!Ü ¹ÂÅçcR JN‘;œ'^Ù$lˆ…A#ƒ· p瀎rœœ’;[Ù™³Z65kLÆ[ktâ$œäœPŽ À•8Hå"B'#¤ ”“­ºÑ :!Î{i Èàã€r‰ˆ’’ç ‘è㜎:ŠpqÄçEÉÁJ:C§'“P+¤¢IÈRY ¢rpQƒ‡$rIܤw /2Vv9H¯3œŠ9GSœ§ "qÈ—$D 89.r(PˆâGNHr…ŠIÂQJI+nË— Å;¤8NáÉ$p . @AAÜKÚÐ œƒŠJA9QG.¡Î\¢Dœît‚N$äG%§IÄ Ê9Ipp¹Ä9„½²K§ ›hœ££¸äàƒºD)Ê‘œžÖ@pœ.<´D\t”¸‰rn8àR@rt¤rNˆ”¤päáÉÉÅÉ$„œHî!É(”\¢A$çJf$rD')ÉÄ’D%ÅÉrä€N $ãœm¢ œàrtRA(w"w9ÎäHéŶèà„¢PH…'á)G9 t’"åÉIæ %yÙÊNŽr‡Ž á'qH‡m)A'–)ÇQÒœ’œsœ¤8‰I"8‡$„‰!Ò ã¡ï{Â98¶Èä9JIÇ °Îw¶'N‘¶âä'N!#P"G% ‹‘™@B{XŠÛq's§N#‚äŽ( çœ Ô‰ÂNu$àà rs¥Ï5 §NpâIÜ”NHCŠ'/m$¥)Ipé8#ˆä ”â爎"Dœ§$Nœ§‡s¢B r(pã¡4â9=·%$GGB!ä„f…G8ç9Ç)æ’)GÎIŠIDRq É@:$@ƒ“—'·cÈr“7q!ǵ“’(ç"qy§ qÑH)!Ó¤£’:N%!ÐBâ ²s©¡Ã¤ç%ƒŽC‘ÊÖâå%)N¹â:B„‘! Ûvç3’àóDŽ"IМ—$"IíÙåÄ—A{hBó­‰ÊD¹rq"q8ä„á’”äQÓ£œNtä¡:Pr¤N‡IH”'NàIBpGà‡BàéPâ"ç.NDâG8\Ë; sˆp¹·gi(J‹„™Ýps@€ÀˆwH‘Dœq'Rç ç9žö¤NqC‰I$tDD'::*!R‡@’rIG§p!(ä‘.QHG8â'’P¹8ˆN"ŽN‚œ£’{vçJ’rç)ÛaÇ ÇI ä¥$GQEA8' N:8<Ä…Î::éÄŽ8p„t¡Î ’qA¹N@ç8Eƒ¢¸AR‘ ¢:DáBG8ìÜ‚t“’':$Ës’†V“‰É)ˆá%{dç#ˆœœCl€‘ #‹¶í/7:C‚äBPB'N¿&GÛ}«Ro{¼s¶´D9IÄ”öÎ w(€¤„áÃŽœG É:NäNrDP9äHçµ€;Žt‰ ÉÑ8 Q'Žw·m­Á(8Ó‚:NI' )Ä„£4ã¡Óœp圜 §'¸$ä' éqä D%rã„¡ÇrD sœwå"NENŽ$E ÈI R9ÉÎQÀJÛ(A„â<´ôÎr“ŽNG’—9Ùœ”*s4¤Cˆ'åÊ$ :S‘B(ç$S§: (™¤Iœç#‚²Ü‡Å98鈜ŒÌzû¡ºg[n¤>wRÕ_ZŸ9|ê``&“Æ&€˜`~€†|ßà¾o¯¾oÍN‡!ÏdyÈä9óŸÀ½ú’*Œ ’#"ÈÈ’ƒ#"HH2H2 I$ÏÊ2ÊËÌÌM0J’ÊGxG1Ï<ÁÌMÑÇ0ÑÐeéÓçùô°ó·¤©¶ÕµlŸ¾dêÞµKëý4L½3ÁâX%€‹R£Pþ¯“J‘J Ô R •¡OçÓ€¨TäÎR¥K’ä¹*Sç…ô='1L»©ô, ”/,-@—‹L)”šÞJR¡P¨T* E©Q¨Ô/ ,À°°±°°j7veB¡P:;®ˆº²²/îìêT©•é,@RÅ[lRÄK±FÅlFÅ,[ű þËı ±À°,…2™vT»¨*%B컿 *—MÃ,‘Æ9#’’ !#!$‰"ÈH2 Æ©DD…Édd ©n‰¥ Ré&ši$.ˆòG=sss~76í#E… P B)C@P¥AAB\%0¦öSZ`Ü …F›Li­@\O4¥Áq“h(.o©ÓÉÑEõÕÌÂÍ  ‡ûÚE(6)µ ‹eKj–Ê›alÚ6Øml“j¶6VÕlµ–ÃfÆÆÔqQ ÅÇTrNOáý]ü—VV¶¶ÙwðÛ:Þµ¢(¼â²ì îäª:»ø ¬î¬¬»åÝYß0î㻸ë®ìâ²ê#:²¿¥áÞWçïÕóºöß:²âý;ï·G?¯GŸ³±¿—^/¶ý›Ì&ÙÞÛÊ2ã¸ý¶»ø}ïVÛºöÕÇã¯}nË´>×ðx¼Û5÷Ýï¤úoŸ;ïdï»MܶÞÝA—–tEçevu·Þº:ïÒ¯ÇSíYÝ~_›ÌPX‚–¹2Ïñ«Ä"‰/ͯÛíy•ÖÛºüûÞÚÝùíòо _£"Ö´À@„µ¹Í~«¡èž¸£@F¤y]‰&`F˜icÄ|ilç1D(!cœÓÜÚ¿eáj7‚§³kv4š/ôGÆloì‹l†7Õú­Ž¦ dië²ç¶ÊEöõø5öÅA][»«Oñ·KVÖ«±*}buâÝI¶ÏY§.|…¢ôØÆ ï8+£^áuíwNBùí‹…à åª]áâé#0†A¶sÉ^XÆô™‚@a$M Nè¾o 8Í›ý­ ž3EæÒ ¥$­„¨ZjݺäiìÇlLŠ÷ٺܚåû³V£mù1Ú ±†–É]‹~ö®z¸ÂIú{‚@ÌgÁA$¡ÊN¬ˆÄ ·ðRü™¼Û°×F µ6*‹bçTž\¥º&*žzõdŽ^N*›j[h™ˆó€ýè¸[IxfmFÛ³,KµHÊ›í¶ý |øž‘öؽmùl:6I —Öm[è•9½†âx6ñH“G¢º5HžN¬Ý• úB` “#M7²k³ŒêÐ"cb‚‚ÈŽ1ÇÃçTL`d×ê™x‚)Û®vÍO^ÿÄu[Sç±ãC~“ï^ LO_ZFnÛ,êÔؘ¼&¹PÖÈŽñ4¢‘Í5ËŒ±3µífŒÿE‚x˜\yÇÃECÚÑöOº¾F>‘A€6ÿ«bùòL]óç_Iö´æŽg7+¨»± Ö[KÒü{ã^©y3èâé¼×ÓgDôÝ»ëÝ碊tE|u|m¶•þ-qÈÞé£M«¶¹BÅQüõ£l>ÍßÛËÜ_†¾nøîŒ\Ûyw:©#K~º%Ö»Ëä¹´z4ûö}>ö/§“i²&b~iÎùvu©ûžÎë=g§­ìôúÿzª©O|‡Ø'…^ÁáOÂñSÁãÃÁ⾺~ý~=ðgÁ¯€|€År‡%‹\V'â±xË´©R£Nè©P¨î-éÓFTjöûÃp·/†7CtÝ7äÝ(П&D‘$(ŒŽ8ëÚò¾¾‹»Xˆm"ÈÄD\þ=Sï­MPû4µ¢ÖšËX×5Ö³Y®+®m òÑ>TAZ6ŒQDÚZZZ’2H·2¬²Ë¶–Ø¿/î.Ë»›ûÁå…ÆX-€X%`€ ‚X @¨T ƒP •*¡E¸S((mèh-Ú&˜’C(H¢†¿%{’åò‡ÆTŠD¤€1«¬kƱ‘—A"HÈ’$$„’2²—WS³ÎÝ]›Né¨.K¥ñ|\ä‹‹rÂñùO¥ézU"žø÷Ø÷ÚºÃ3ßiÖ[ßœ~{oä¿=ëzÛov’ªùi^óåŸ.¾\ùrùbÕ PmBÕ Pµ BÐ DùE¢–‚Ú6–kfÙ¥˜YÙ–vxîU³,ò6nBð³å‹+Ì L­¡iÌØÌ ‡1RtgÁœ ÉçIÉÙÂrô ‚‡åPÐÐ¥:tÚe22˜YÔ´°,,,/2KÀ°j^8ÌåBöóó^ºT¯ §…^ ðÂñxŠÂÀl°*D¨˜Ó `O:NO9<óÎÎN\Ñ9=ÄîL›)ÈJ)*J¤«)*Ê$²¤²‰)++(¥²ÌöÌLL6É30[L“M,’92RBÚTÉÍ6Vkc+—§}m8¨ÎMŒg!8Î3„âN³³Œé;:Γ¤Ãò¥”e ffRBIIIc´$dÈË• ”™iá¶ÈÛÛò"sh‚¥òµ(Ú$ÚTl"Ú¥6¨Ø¶&Í•f©š ¢)Äà(ä‘(C’¸Šœ#¢—òW÷¿©ýKEvtdwqÓ6M’v_Ñï{ºŠ¯ï,ë³Ê˳Ύ«ÛUGEÝGSÎî¸"¨ë»:ò뎹ö»–µGQWÚÝúwy¢.¾ýoŒÀþXóʺ}s{iPÁ96þ-xŒÖVöÒ.×¶wywyu§qyÙVvüÚùè_³óÏÈ÷dD^ÅÞ½ê^_o{myãÖ츭ö½Îì=.­+²¾wvükÉ$6–Sˆ0B‚¢EÇÂ7ûqO”žUù¿ou½¸êý—‘~o½Ý¿¾ÝqM¸,‚PP@`xÏ9ïoŒ®ú+(Ì~-å§·nŒe¶ëóÙÊ̲é"£‰°QçÃÆk{¯…êÔèÑíeÞÚˆ“¿-ç¿5¹ûµ¿Ò¿/_©zü…~û÷žïÊÂBÖ§¤Òçö‰¾ëíy¦TÄ'…PZ'oÞ©q”Â5ñµp‚µùµÀÖ×—¾Å¢Ñ¯Á†(…óâ%uü}EÔ×Ñh7o”bE»QæX=\ñlOëëV÷–×¹DŸÃ*ŠÇ—šŸšp  w«­pÎM´#cù¥§ ôž¸‚4ÑFçǺšøQpýõ¥ñ#QOEóY†2ëI°¢aTÆÅû4š,$¦*ŒR§¶+]+ˆ>½-Ú›A‘8ç£-mF ²²Lm•µ\2Ñ|ˆ…ÒMj8¦¦…$h£p Ñd1QðõµOð=ElmH0aþñúZ–œB{ûOŸZß/&½ŸT4ÔÐRÎ(ÏM¿M­!7­(…ÈóæÉ±{ã’Îé5V£i–Lª=š‘?À’`Úmã艌3FS–°Ê-5Ì@¤Dîľ!< oôlÙèßQÚÇMˆQ Î(ƒü&ËTSzEi”–ìv (m7ûvÒìBMÖ¢ˆÎ­Eñê"oEŸßÔù먩 4/‘9­ –ÅDâ7èÒípÖúȪá~LhUžMLø({Ú ƒ¶cŒ‹Emøí¨[;q¡Œ8“ˆFÌ‹‚7¶¡Ø¶þ¥Bۧͤ¾Šr‘2ªÐ!¡9Ëmqñ?ÇôõcåÒ‹Ü×Tn÷𽕦QµÆËµ¾ÔІ† Œùlù7–ÙV½ÒR7j¯å_}¢d˜w÷Õ¾lÜ›óu/ˇŸyÿSç¾Wß%+3µÖ_—ǹéÎhÆl\ê=iݺUw”G‡ûnÍS­m§ÏÆ×j¦kkà©¿à }yÓãq|¿j¡š›ä|¾mMhçÁ|ÍZººŸcH|Ÿ>@ùÉ>CäŸ!òBY¡f%š–xÂÌùœ˜·ûq®5Æ®4ÅâžK”yC”q8¦Èº©MÈÎŒ q^ ¥*ÿóZõZõ½]•lÅlM–Íf½f¹­î¾¾³¯ç|çÎùω‡–¾ L}¥õékkN÷"[Çk“’Hddy$$ @$,å%I@–VT?¶Ìi Í©1ih¤óŒö‰}N‚ð)ÓŸ%9xd Ãü•+Å+ЯJô ‰°Ù6l6l¶±°l6&Éõû6Oàëâ?2à lDCÁ v`FExÜdp/®ònQ2´ò7×·—\°–H‰dŠØ‹b¶!b–-‹bX¥‹bض)ýÖ ƒ`X6 uRŠ ç¹'ˆŠÛûq¢&5 ULpc“˜áÇ91Æ91ËŽLràÇã–§+Ê®8Ç8mB×–º ^W•r\¶@µµmmma†ÖÒÈÉ`Y|±ùt€º¤ J’ÙÐ#CB4)BCBPÐ @44%ãýÓÎNÙ´ääó–g)dܶs“^È^—fFRë#w¿koÚKQm«m6«hm¦Úm›ci¶HHH2,…ÒÊ|²’ËtÊʲË,å—÷ÝÕÑtÝßå $ÊrîXËb)©#d‹­*!B|qZ ú†„¡(Š€¡¢‚€ ('$$$FîRYId-LžS!•ÆâëÔkÖ¼V½¯Zõ}i±l>ml6 †ÄÙ6 ›-‹ì5Ö»äÖ³³¯k«Ž[–oL}éi^eKܦRú8Øò—×77¸‘tœIÔIÖrvqœggg Òq'µ>] M¶-†‹jiC• yL­: ¤÷…IJd®eçTIAVÉU´›#j-©l¦ÐÛcj¶ØØÚ[ShlTà”W Ç8œçq\IÅý6ã¿¥qý,¬Îò[Y6ÝåæZtåe$óúWw‰GgVSüyyÝüËú]Šê¾w~.»¿gw—uû—éøªã®ýêý?Nî:î*¿¡Wã¼»çVGgwì´¿gv]ÇE|®ÌââËñ=ºþ»W§çëÙ8Åý‹b[²~šf‰™EýÈšãHŒÍÏ-Ý•y[Û:›]‘Ý–ûuzq&@þ´â¤­Ü1ã†O·tî*ßËEZ°yöºìPY±¯ ,xîüwÞß;¯½®½­Ýß¹ÕåÏ›²O¿>ûç¥ï;ÎÛWã'­quøêòù]Y×mŠ/Ó;ß™ù÷¾KÞÝ~{rýkr+"‰¶Î8ìCfC‘×û­_"ì\%ôð°08Çv%D›a‰§Q ”m*8ô˜ Â/)<ø÷Ïz(W»µÌ9Ç:¦!6šϺ֗õéá*kœ#­Lœ÷ÑÍÍ/:Ü:ãJ[uÍ797§IkÊåúóO7œ„ÑÏÓ xȺIWGMe3×%(ÿi‡ÇÈb]5JÚSÍi.¢)À®:©rQ6¢“5Øíµ×íVº–ÒK±XÕ0oØ¢…AÏ”ĸPPcFb‚,hKøxqAf§^Er0‘är6èTd’AQ5ÄF…MBh=,LUGƒccpj‚Ž`¿¸ç®rÎaùØè˜ª3êª"ôF¡[/‡¿ÕxÌÏ*ÑÑTÛ5…"ˆ‹ >^þ¥õ|/¤‡Éˆ0S6y´ÌÒš7d·‰‰ Ÿ+ÈØ Ä…ÍàG¢Q¶bé%ê‘Zc>úÔ]¯eƒiU$R-}禣”€F4õÒW”ºÓ×þUµ%Ìçµ'lQ¶þm˜`%P˜ö6&æýé©sÑÏîµDcÕû/Jüv+‰ÆÇŒlm¿E­ßÞÜïlOÑ?Çp¦ÉŸ’[ôŠW>îíÍFH¢¾XˆÔ`†á;ž”ÉlNÉÆ1(ö)ƒ»­ÕÆ{leÕç»òtBØÂ!¦ kß\®—ÛJ¤Ø úh®´¢Ümý‡ÇóÞòöª~·uQüW=ûÑ>Ý(ÓˆÎ=­tDj…û^Þ×Z²_š·Zø$õ«ùú÷çr÷Øáð¤×º?­­0ë³#öß7P4ü'9¾MQ ¤ ?V/ÎèŽ[$ûû¿5Ü»j#¯Ñm{Þ\€ÅÑÄ#h>°ScõzïwCoQM¼®k^ÛUJà¨å¹’ú絨ø˜ ÒݰBþ'£û¨/{ž½Jl5¨K¨ilj Ÿ'£¶Fÿ è¬OþwɹÂm6V|ó'¿:oÆñ¿’‹«Ú?€í¾«çšöð܆|êø>ƒWÃð}oÌùN¯Ê*U)÷À~Kؽ”ö^È iMOèhJ  R˜âœN+߉¤òÊŸ$rG$P]—•iL»)”òwU9{(X\ J•>`1‚FF¤a‘Š[$’2 ŒdljF–’X¶2LØPT0-Âß+,wÑ^\É–Žð1qˆF(‘¬a±‘¤hFa‘¯É‰$$$RB'åÄ‘DBB@ÜÁnGo$’d-r¡¾ËùbO˜*D jmµmµµµ·hÛmÚ-­¯»[‰Ä’6;VHï¹@"…2i}FÊ ÜŽJ´¿ÿ!#F4#R5#ÀŒF0HÄcŒŒcØÆ4¿$¶ÿ)Ie•–Õµfe•³l‰eÀ³½½ÉßSžóûßï¤R¤l-½Z^‰zèW¡z Ñz/EèzãRÊ$„’,„l)yŽ8ÞJ<ƒ%¹+zÍ‘&ši² ’âöL¾Ý±¶M´mm[[a´Û6›kå[¶ß)¸¤ KnÌÛ 911156úi²3Ï9<²Ëoo-ò^—¶³È$ÈÌL¬ÂÌ ÌÓ,Ë5¼é8³³8N“Î…éAþTR&&·–RP””–S!qpQDÓL\\QomR¥K`9ZtbE¨œ€)PyB¢ ƒP¨  ¨iPj%J@©P©smbX–Öe••‰bØØ–&BÊÊͰ°°°À¼¢€Z¡ ((h¡(œœ'''œžVRR_ñºfeen¥%•Àöý¿ÉüÏñ>×í¾ÛÛý¥(~>v¾ó7N¶ë[§X¶²3sZl[[n?§¿‡×ó;Näëø/+ú]ò.”¾Ý~õžv‡ð\vuEQÑ×W~:ìùÝÞ]áu×Ê«÷»¯{~+«ùÕçWÊf&`pd)ŒÅBŒu¦) {dæYyïÍdÛ}«ñåç]òÒ¾UåÅèö¼«"÷õ}ïJûjm­~{:óç½ø÷W¤óW†{ígwÄN¯Çw仳©ùù付ŠYD/íÚ¶­!̲Fkk)‘íùïuÝ~mÞ^öк&·eÖgxwheï´_ÖýköúÈ;EÁP¶$Gµ„ô‹áulš^2{™ùT§Z BW d'¥—7ZPAWº*1SHÓŒ$k'5õnÊQA§ú!Ë´ù®ìz:Æ:Ü1¯¦8&½6âŠüßLÔ¢zÓšïòií˜ÔZ½}i¢—^nµJ~TûžÛi‰¶—Ã`6†x†'Û~”A¯ÄæøÄTÙF&lvH± çãï5Ê¿ódØ­Xåø+§ØÕ¼ê²TÜOÚf6Ä&Í×sqÑó #××ÔÔº¶>CøÝÆ|{ÕŸ—©àY'I['®Ktf¿’ࢤYçnXز¡1QQeC4#P6¼•±ƒPFÔÆAŽ¡ÒËüÖožtÐÿ~°Ö¤þÂ\†·IYZˆq}njr5B~ÃÎl`öl@Š?íÅÕ|Ôô‘¯\N0LH WF¥™„|)ˆ\äÍçšh‘P›!|5E®Ó_/½½ª×šËûõæ^ž‡[o7óžma⟭ÑE² ¾.¢ã"­&„›hn(Ѐú-4Tøg[V¯Ey&GIƶG¤JŽs_—|¬Äom`{fµ+%pдL;¯u*&‘§µª\J袣DµûÉò¨SÞ”zÈ3<›E2ÀCÆ€ÄõüdÝ’Oä·l_6gðÙŸÊÏ“Ûãç½´,28Úý(þX›M­ûZo¤Å œþS\Ö¨§š{%?Œ›Úºµseˆ¿Äûˆº_ãßÓNli¦æ10SdFŽé<2¡œZöF06²'?Žìc„z³ãÍÔÒ¿OÜüüî¬}!€­}‘M#ùU¦}Eª­UÜo`hÊæ¡5¶ÈÛ+ѽ©Ýõ¹tãv½œ2Éüض¥¼÷^?Œæ–¯åZ’K»ëõß]D=ÍÛU)£0EߤsÝ5º¢9 9Ïéó‚×dùºØT?ˆ’ºž‰¨{Þ&ÔÀ3Hߢ‡Kij›f÷øÿäÿÊ-“ÿeÛf÷ßçßÜêïî]ýο¹w÷.þç÷8³lÆÍ ñ,ñ bA1†8q®;ƸǓÅbñN.Ï+\ZYÙÙ^e̦PÊe Ò d(……!Vÿë „ ¤)PŠ"!Š&¡þ‘¬LU#/Bk(e#¿ ¥þS)>VúPÿêÊ£(Œ¢©(Ê¢LL3‰*ƒ*K(²Ë#!"Gjà jZ9;P‹/_Írä$L¡Väˆ"‘"B&$ˆˆb†$ˆ·##Ò68Ô-ã#BÝ###-­™ Ëe¶e%´&&%æ9’kKIoBT•YD”IRT• D•••IFVYIIP”%”µfI™BRQÿ9e•-­'Ÿ™™ºº&I¯Ùçšc/i<åùþý¥I)RV•$¤R¡Ç|Ä¡J™&™ ¦Y’`þ±˜™&f`˜-%oÏñšd䦘˜¿or{ZjÚô½æp9©y©¤ÿ$ d@.†Vê`˜f–VP–U•%e%er#ww:O=Byç ‚k²ü(%º”ººšk‹y¦2eÅ(…Ð)B”PÐPÜ4Ô)”˜Ɔp. ÙÉçg?Кi­å•··/L˜_Mq{.FY.¿úÊ ©+),«($¨Êʲ’"È2 #ýÉ"]2„­Ó,¬¥Ô’9™þ6âÞß%pÄ@5ð R H `X-E„!a„†„aa!aKR(ˆ­S GZÚ„²Ék-«¶¼··2Y*aL½É¨¢¶¤(“el6M•3TÚFÛ+;ƒ¢âŠ î£¤;Ž„?Áþ×öîþÛ¯í» :3/ei-ïYy6:þ}®;¾d2Ïèuý³ß¯tSõö?=»²»ñ^uuçuýµw•åú[õ«»çU~õÝgWyÝ~ËÎêü]w˫Ⱥ:¼“ÞÝÎÛ¼ò¦Ý”ûw×ß^žÖ'yïolììã“¶µ~ΫåYø»;éߟ›¼ïkvY7–/íûBêíj¦b:'_£A¢LlÆg›@”CÔÕ!€©Ä4LMÒ-BQ ¯<[SHÖ¦áöÒã¿Ù‹”Ę 9+¼î²*ý?%׿5øòâïïö½·uúöô¯mš6·öö}kFZùZ"óŠ8ÜQ½y+E4Šô´ÛP‚ ýÅVÛÏ6—ÑdY«Íýi5î_¿{Vš>‘ÁãÆ 4gÙzÁM¶À+`Ó`}j‰Mi|çJdoŽ@ ðêÔu‘ êå)ÉÞï{f ×ÊÝ)á4. ÈjŽnòÕ5¡Pk©®jhV0ü½Ïº>ìÒS›Û£ù_×±š»ã•yÄcMÕrÔö¸ÞïèŠ \Ú{Yµ˜‘:g­yÝ*–Ì®(¢®|ô‰–jµ6E9´­™Ã1EX(1H<—â"l8äÈ-ǦÌàiµÂþùb̲~=’ Ù •Ù%Yed6Ad–Eã J01ŒL`·Œ1‰Š1x³ò\–,¥‹)4²6 :âŠ-¯ˆBföáÉò( ŠKý „ª$ªJÊ’¬¡)*Ê„F‹laFÂÂÃRG‚M»õ>üwqâ?Š}Žß¶‚*|4Óúµl¦¶kÆ€Óoën#54ZEkÃuÝÇŸ•Ä;®b¿ƒ5þµ­mNMOϱAF»á/jÓt`ëÜ–8ÔÄÕ!-TPÕ-®‘VÑJ3wåxüškøûç= ç;Zõ‚Ûü*~¿-@~Qc#ñüþÜOã[­_?"š6Ó­¨ßÎŽÑ{š «%wíÛ…ž¾B¨+Q„ȧÅ\„Ñîø’ôn2s,­› Tê5Ù5íÔIÒ÷ëÝ«|,æòI4J~ÇuSd5nÝ@6öIötZ/âµ_>*~Üý_ê>>m+¿$b0 ©èþ ½/[*zù?kÕdÈtßoš×ћҿeì[¯eë{×|ÏcÝ}M%)îôTSä¾fùQòZ€Tj+QV ¢¨µ iQù‰Êçå¸ÀƘ£ü±!ŠùƒÉœ]Í: \×$øÛ‹òüšÞ÷üÄT€>_ÿ`R H‚ ` š!XHRPˆ†ó X™ˆÉ€ŽÉŠï-vcÿÓ=]w_]Ö:îºë:Ýg\믮§]×uÝjkµŠâ¹¨WÃ\W+Êö¸¹,–æı†ÞÆ;Ë+‚ã"e‹¬ k-}5JbS büešS)¥1i4þ ¦Li…0 ( Ô¡¢Š€((P ¢‚Ôº½¢Ùår÷Á>JL„„lpc?©NA5ã‚FaQ'õ„Cp‘±„JÜFŒq„qÇÁÝ— lvùÌ ‰-­­™eµ~_ˤҤ4©©-"’—ø ßê?㨌–Æ´Û_ãùfûÙ$û%"a¢‘¡;2Ýš2¥Ù·YºÕ…ß™âߟ^¶öÛíj÷æï½Í­žµFœ×” ;ƒƒ#Ö¬¬uÖàFº ÑU5⊙‘¸šØ;+óÚKl÷æïÏkÁí{‰{=ï<æõæÛïo lé™f3wÚÑソ>·´Ûv~>_<úË=¸p[Oö‡-iíP£˜¶4 Û.Wc0'=ößm›ZtKÛ¬W¶Båþ¬ûß<5íî/5~µ•öÛ~½ºÛRü--›6çÏ{³°Í¿¥öÉg{ï½Í«ïo{×½›=ï[Ûmöµ=öûÞ÷ÛaeÎܾÝîž_¯~}«ã2óÞ›ÞÖõ¼~mí¶ëíï)o^÷=¾v{Ûy³¼nµ¨UR `)&¢€ß@«×dÍ4 ŸÝ5Va»R‰ß[wíïooMÙf§EöÆÚtçæÓÛó±_‹{~=íÚüèõ¨É¬ÛY`›fÄÞ{ÞͯY›³ç·¶õæmç^½ÞÞ=»füÛékí¯kNíٖ̦ÜVZm'½{Ì…·?7¯kEùïwî}úÖø¶ÞÛØ'vÍÞ/cmY™÷­ë}ï{kmÇÍ^ZݵöËÚi  6ζR˜öÅkŽ «a]ÀP‘CA6ÆÝ‹JmÔ«yE v&4ÉeŠ\F=rÉûï}ö>Ý™íeïk;Ó6v'ÚÝzG³lPbM­†‰£Z`(Ì·~s¶~{çŸ/{W–Eem÷½‘ªœƒ0Õd )vÀ1WŽBàÍÀ0> pÊéšNŠ Ñ49e°¶¨‚Þ'ooH—ÞÙï[m¶óÞÓa¶üxç¾Ýò½íöy7¯$¼ÏÛcÓ`~;ÃòûÈö–Ve´˜cÈGë“/¤˜ [$mRÒ· Gí¯Æ¾¾÷¯ÒûÆâegη°[¶™#ƒlÅÆ‘ U¤…D2EGžC¬µ¬XÒûÙy_ž×¹lÛóÛÝ åêõ›ï{Å’õïxm¶Í¯¬÷­‰/fùz_i·ÝåŸo¼›–hšÖ¿Zôçë}íç½½ù¾sÊ×ÙúösÍÛïy/2ÌíÚÚûoÍ| Ø®Õ)ˆ0b±’8ä‚ݰVš;ñÚw¿?^÷Ë7hɵ—ž^¶3?³µí¿^÷¾hæÝ™m{yµž÷¯:Ë3PÉhÚ&olÛ=æ28ºS ådxÑ$%‘‘F ¸)\ö¯†föÜ8‹Ú±˜÷¯¾ßKå#ƒ„rA¸àƒÑÌGí¿>ÞwÀ²Ûyx½íìÞÙéwëÜïw½îƒ=çµyy;6ÍqÝ( Æ³Œ×Tu±TÚ6E|ËÌ/;^bý½½;i¾i~¾Å÷ÛÚoµ÷ß~ç¿6üÍm»aݵ›wíµmŠ&ËeN°Ž×R#ÆŒ¬mÔà‹HàÞ6ؘÙ-–#'Xâ’Èï{l=¶ÏmóëÈ }¼‹Ž”ö¶òÞ†ù¯ožï—Ýùö{Nö³ófÝóͬèàöïx¶Ô÷¯k^öD÷›ï}ï3Èͳ;,¾w†¶‰í­šn4ã°&h?6¯v7½»ëcïÍgÛ ™—Ïm~}kœŸ7š'É·Ûm¬¶Ú´ß{ì›óØ¿¾h‹ñ¾ùë'¬Ù¹¬‹ñ}ì_o½¹ãS~z×–üZ^öǶö5 ¶ÖÏn×¼¯mä{væûn<_kÛÖœyܶöfõ—ž²7ëﯾfÍŒ–×ÍÞßl—µëÛk=Ÿ­Þ‹í÷­³i2¶–µ³ÃâË @É&3#r`ÄäÆ&„ÚÂ"·EE>ØÛ#“#6H¬CžÉS@)®‘¼±‚æËmmÛ[ ª}½í^åœk~ÞÏG:ÛÛí½|Íß=íïo//M«O^ô^{Û¿G¨V`›"£jË*Ri¦FÕ‹ktŽ`-,¨MÈØ›ˆµëvóOD¶ÚüßxûÏo{J?óëÙëÛ¿=õìù³{f/y{`≙ PHÓTz4¦‚æœ÷4Ï·oÏ}ñö¦Ì¶÷¼;l{õ·µq¶Ì϶Ϸ¶%í÷Ùæ³ï m¸Èóç~~kñÚmo}«Ý*½›Ë­Ç#A’0×Ti«Þo6³Y_¯{½˜×î÷ez͵¶Ý™¤>^õ±Y»lË~yëß·¾ó¢ß¶üç—Ïmíîö¡=«Þ˜ìÍæØÛyóç·‡»Ë3ÝøÞdÎÍf²½­ïn÷—–¯pMí½¶í¼í{ÞÏeí•øïž•–Í_,½5½ëÉ{õïžè—å±wæÛózûë[Ø9;ÓÞÏ{ÛØ_™¯zË̽/79D›]B†±ÙŠDÅ¢tp² ‚i6¹©×b•ÚæA˜9^ß^÷ßw‹=;;ÊýzÐw¹Í÷‹mÛ“ÖŒ<Þßžï—Ûç¯{µ›Í7æ÷ÔŸ{ô¯7¬³IŶYí& Q´(5µ­1—T (µíuµ±†0Ø”®‚ ØàócF6&;\BwÏ;d{Þ¯[vbE¶ô¯ ɳcÞ¶=¯FÞýÚËÖߥ£ß›Ñm›C^õée¦ÓxÑžg,µ”ûëß$¾É²ó›{Þ¯-ž d¡£YkT,S1 ¸å. k›lZo-=ÄÙ½îÏ^×ËÖ×Úê&Å “ÑŠWPR'†>ˆ³JépP‚qÌ‰Û ‚¨QàŠÓ%ŽW IÕ:Q0VšÚÔ0‚ÔÇ,hõÚЊÓ@´>2u›b{a°ZäBÆ9€Á5#‰‰ƒ@n»LBk‰œÝ#†7Œ™#ƒLqÂ!q¦èã±¹"}%²–t„®n7–19³4Rc(àÛ-”Š´YŒ‘ m5\¬MP‰¹µîö÷m£Ók}êûí|Èç¬ñ/jÍíåå“mÍïozzŸ‰(œŠ&A=° 16˜¯ [GMûÚÖÙ4¥™¼Ü·¬öVÌ·½EM•FãeËÛA¤©ª›P ÔB‰¨ó‰1Ôi‘°—eÍÛƬ–¨ØÁƒ=vÁ-õ¿<ß~gç…陳ŒÑ~2~k® #4 FÐ4¢wœ`¶/lž¼žÛ¼ö[×½­ùï}¯ÒÏ›t(¥,JœCÀ‘Ò 6"¸ºâŠWZÝ{›“йÑ"sšœÚc8Û`šy¥l&ÙPP²A°#jF”[cE$Q¸A­ŽŒep ¢ª5FHÓVEC#c¢铬6È¢p‘Gƒc‚îu½fÝuìn·^·N¶{‹Ü‡¸=ÅîUî#Ü^å{òZ–­«jÚ«j-¥¥ð–¥¢vvwÖaÊ—Öñ“-­­rx½¹oÈ–¶·Ù.|Þ`æ'›ú'B8Î ìà³ÎŒë:3Lä†yÖvpÉ!¡¢ŒéÝ ”Pä¹y²Ó™L~NŽ_˜&›$J¿ÐJ J©*„ Ê„©(J$£ÆFF±±ÇpHÉ#pà 6±1CheqÕüÕŽK‘JàZå â¹Jå®+’¹ å,›$¼R…„ €‚là€³l²„PÞ]ÂZ{L¿3u—´KHbbH…‰V$ˆ"H‚%ˆ"""€‰€Š$ùqE ¶„QD7dHDZ‘ä $µ2^Wd#±ø 㢠‚È’,!µ´m[fÙmm»ci·jÚÚÚm}ÂXÈÛI1÷7÷•ÀsD',d)C}""Ÿ/“å)Rær_ËêùÕü«û*ÞûÛBm¨â¯/c¼%Õ]z$ !)©¦Rj{è¯HV˜‚ ·v¦ÚA\‰ýkgi*ñCÝ¢°NCœ¥ˆA‰ŠŠ™f¹úçxq_K|NióOZ|æ¶„¨õãß=¸Ä#0ñôšÌzñÆ ”U•ªT¸ÙfÌAŸ¹ª|ºZtdØx˜u¤Â&ÅkŒùáS:äæ­¬{s}¼ò[Þ}ì¾Í÷O­nÞµµç(á–M¶ ÊR¡Zá#‘¤ò5$"ÿ tØiy‚]þ³jþˆt_J(­QP0þ¿ÚvÎxÌálk5½FbÑ8þ‹…úëøbŸ5^4/ˆ7íÎׯ„‚7_¿Ö§×˜¼2œ`#Lix Ù5µ¢· "wôô¦÷ëeø>Èõ@i´˜ƒ…î±i‰1òjßm€`µµ¶qyãæ†u„¬cTR58hVšBUŒjþ«ˆ§Ÿ…»øEW4Ÿ:Ô¥³7õgÏMI¡V‚« ¸‘…p†´6¼ìe DF¿ *›(½*žŒá1¦üDÄš+i³Ò­•ZµÏò»£‚|寄`TÔÝQ]¸œ‘– ¦­l‡ª¤6¿¾Øpú8  §!?mýs><îiï¥8÷ S I4kZg ü/»57óœo/É ö¾5*¨ïì:PL›"Ÿ‡ÝÝ¿E™gÏ’îËžógßp sç …o¬ð¿Zû›[µ|¿7½ý<†ÏÉeüöª™¿©Û¿EEËd±î Gµ¯¢é$Z?ЯÍQ3«ϯÓîÕ¿wk1kFúÚþFºÉzï·Ý=SïF®÷oåz:OËÄ_MûWÚÏݰ筭ïsSž«z&ÚÛnÏ­ˆc÷§ÏUêüÓ'”M:NÔ™ûóóߟŸ«o^êê®ÿvwuWÝQ]×4Sj‰M¤ÌÚ ”ͱ[M‘µµ³i´³ ¶cº$rä¤é"Cª9#V­Zª‚†ïÞÿ}“rÜ­Öãunn7&êU”esŽ9DÆýØÓ8q¡ hcqG)´±¸e’ã&Ü™9òUÜݤ(|ŽDBú$"„‚!ˆŠ ‰"b¢R(¢B"$ˆ‰"‰"bŒšB@‘»És7ó¹r{l‰4YDƒ‘D±)„@DD¤IÄ‘D±DŒL!?˜òÔ®¶ ]1îJõ½*r¹2Ë–²F’†=S¸ô1î=qá®wYÖ}u×uºÎ¹×_G[\ú?Gè¢øßnûuÜV%Í‘QBî$ÉÜXʪWJ#*(JüiYCä "H²!!#$Š’"2I$‘¤q–,dv6,™2W"Ù^™Hmú•,)!HåZêñ B xŽÅ°¶%ñŠŸÅ>/Š|OŠø­•°Ù6[/ ‚¾Ì€å ‚ÖÒÐ!m"³³2…Ä’6%ŽFcý&Vbfa™Y„™fV`&d™fBd•,‰‰€™•–RÉ•–Yod²Ž;جˆÒK¼•IJrùjA—¥—9 Aˆ¥ˆ¥ˆ)sTÆ*¡h¡J ã… C<ó„åÙBP… AEØPX6‚€ ¼ 0 –\¸–\ŒÜÄ¥pÊW&ºµ¦»\×k|¦ËcbÙ²› ’Ùl¶|¨ …à p r2Êä$È\å#.~pd\»¶Jé&D ™f•šeþ„™&fYee–YBP%dØËfBØ#22`\DEeµ´¦H&Èîëºÿ%Gôqú5Žçù-Þö®Îìë5c”¶­ü›¯{VdjóÌêËF.îüwÎêò¿{»»ñuó®ì®£ª³º¿{¯èwuyÕø¯Ó²¼ºð¯*ó³;÷¼þ/·î~½«-ù»Ûuè™ÛùþÕzNT\VvwÇDÆã¹ùŠÓŸmç½ÖÛÛyæf¶¾öï¾l$$"™iG]û³^)*h emÜÂ5í«ŒÍ&¸}æ’#\Ý_^xÏ—á‚LA·æ”W•ïZ½µÇ|ªý.ý?=öõyÙøèÁâ``»b­ã/ðú~„šÜi·€‰ð:D#Ùà”/Æùólr&kYgDçÙ“ñ¯H½¿*–Éòz Cz[TÄ 3Mϵ+£W˜Ÿ6$¨Ÿ ×[˜`E mXÕæ®¼Ð6-S€mÀåjH8!I)rºÜæ©$ó}*`o7çïA¢²¬Ö‡d!Ï$OŸê8ݘÌþh¦^Û= —Knh…IðykhŽ éœV7®7æÑó碅å&™pF°a­1ù­—4¦AXSMhɦ‘* ‰§™­;[@ÅaTW]1úRÙ•¼°QF$ É;^3a&8éLGó7š5¨Æj„è(Ø¢®•"ÄýjÔѨ'ÕMJµ"Ñ}UЦðZ˜'Äë9“Œ®©«nZDm¹˜ßØ¢ˆk^̯ÖÓ(Ï6Ê)°”Ùé¯EѼҞs-dãŸ?9É<Üòû OMRûj ¶ÿ‡¾?9§ñý>Æ«ù»·t‚©ØÕá£rÄ ¨ƒêÊÅ»" íVt±£ëÙíÖžÞç‘nú¯¼…µP~·Uoµûv º\¼óHÜô:©Ïø ,ïÍ^ß‘Ø7ôOÉî×*ýõ%Kë2´*Ú“`­•µl–ÒmM–ÆÔÚ¶6l¶„ŠŽ!"\N¤ +km¶bͬÅ’|™òh|˜ÓZkL¦¥2˜SB™L hcæ.-1‰ŒqŽ-Å¡þg'ŠÉœ¡ŠÅ´Êe®H¨òöÕ*T¨]äÊwŽNÞU”YVU% YYRYYT” V£303LM10Tg'IÙæ&””–Rܘ»f&˜»¿¢yî..(9s/o}aQB¥,N!* ÔD¨5¨T*)QjD¦…2˜4)´ÒšSi¿à…oAnM•gœž`¾ ®$¸•mòe¯æ—!8“¬àN‰:Î é:³“ÛEBQBNÎNã=Ñ@ÝP`]T¨Q<ó¹¹¹'Ž,Œq,J‘ HD1±D‘ EÅÄEl„lmû$„¼’I Ȳ[K)jLÍ4¦JòòòÎ\‡÷‰ýô&Y˜FefRb`&e&I†VT%BFI@‘##"rè|È ¼„ÈC!Èå¶F(¯¯¯¥¹o‰ç'ä§tuœ''Rt' ÉÒà „ ¸i…5¦4é´7ø…érT¦S¸.2`Ü´_—÷0S§N‰ä•‘-²ÛSmM¶Ói´ù¶ÖݶÔÚڶͶ٠•””%”””’BKBЈŠî<¤DQZEe¤Pâ#4E#À#XÀŒc#ccR8Ä#ŒŒŒ#µ¾KËIm/ [Éî˶ؘ26÷×\7ý-öò7…¾·¥¾†ózÞooÞßo·„ë<ììé<󲄗 I B]—÷!qqÅ ¥¤Oµ}Ù"¡îQ~-Ÿ¤Ýn·M×YmÓnÆ›¶Ü‹i‘¿£ú?}u£d;~öÏ=uD½ºÂ²m=<÷šß¯ßù¾ÓïÏ{¥ù¬«í®•gmýßuçEÝø¿¥ÝøúguÅÔw¿Zë¿;®ïÇuøªþ•w^Eø¿KºýóåÞw{j¯×µK¬ùŸŠ­úݽ¾_/×å¿?=Þ¯m×Ë[yçÛN)ñ»óÚü]m÷»Ê;ÊÒýÌîü_+û«äq˜xþ˜š‰üiŸç#wuIRlŽcbi@ˆ®8´Ì•æTTD/Ëf¶´ÌfT¨“ZÒë è&¾›9¦ƒ)™÷¯zï*ÞÝYd\Ÿ3çÍ:ü^JfÝQe5ã3Œu§ZÞw4¶¦¹¼ j ‰V&…/ï×J†©³<ÿr#à˜ž¦»·̈MÅz¿‡f¾QXÑ[RïSaw´PÕ÷ãáÓb–'®4ãi‡9;^¿w8ôâŸå¿Ë#üî°þìjAŽ Ù׿Äþœ1%™ý6ëon…¸[‹n¶å¸Û¡nås\¸Úêä®®+Œ- {‹Æò¦=9T¾-Ës—·¶¶½È–×Ù-i(¨ÉH[ [l©²ªlªÚ-†Ñ²Ø6¶ml¶¨Û`Û«‹¨è#ŽI;:$‹œâ蓎pr@”‡@qqS†/þÈ!  ‹" H$‚HÉl$!à bÃaþ00e`¿ É`&’ÊW_×÷+UÇ‹¬.¹u§Ï>}óçÉu×\|—É[&Àضl+ëëIJnX 2Ì…kÛ*ë\¯ÈÙù8å©@© @Æ Q¨Bƒ„$,(BŒ0¤# nØFGC 0ÛÔ§_- 9BÞÆÇ(äçËëy7Õoo‘¾ë}7›Öù¾ß¼ßÎÎ$äë:Ì“3ÈM3hO)-¼Ö––ôQEíµ³mccyde­®é*HÒ¤*M*e5i¥1¦Mi…4)0)­4¦SJm0)´Êe6˜Ü£P'.¨.JsLÊGw ô0Ýeb`ÂB€ X€ këÚúõ+Úúúô+ëÿÀúûRÕ-X‚ ŠF8ËRÖòRÖkì.îËòóš¼™ IÕg@'Fq'I€˜&d˜&I˜f™˜˜šVVI $-¤Ž3ÕÕÍô0ßÉ€sR! È$‹ 2(jJJÂJ$¤«(¡+,¡,¶ÌÌͰIlIlI-ä$¾æK›æé¾.¯$’IdP$@$dVBA’BA‘‘$BI@Œ#c·Iid#KVBLŽBÖl‰m‘£#-¹omꨈ)‹ïÞ_¿~õ»ÆÖu¿ßÉû÷Üßü=x— ‡Œ€b † Ï3T_/¯^¯*ìêÑ›»».ï×Û¢ó®;¿G»uq×ïWau×îYý×]üNïNëñÖ@uû—gGîv_²ô£Î–è´öþ'ßVÖü{Þ÷§Om/ÄuÅïoòŽï;±Èæ÷ßu}{YÛëÛ_lsño82JüÖÏ•ým»Ïš8-~op«ÊÞȵ4XÔdQÃíkµéÍ£šzÆ×bb¯§Ï×µ~—çæîμç^vöûeˆ°×D©Æh±Û1hÅ?¥b,ï­-E ò þòkM}#È·æ¯îâ¬BmàµâryÅ÷^´ o膦 Çi`­[x°G¿%#Tçy|zMû•`Qß­»óm-øÏÛeëí{Ø@”EiRL fXšV?ÁkÕÓº­Ö¢?~y³œŒNR{®CGa©×f=k¶JFÄqŠ•hž¢BÉV¶D›³ÃëÕ E{( .mô„آؙ³[áS±ëÚ•1óÖ¸S.“D™T­¥lê»ü§Î¾o?_]^ß´©4&™ i¹N1sïͬbŠY˜ÀLÈÐâ‚‚LB$ÉöÍÜè•®šæFÅ/GóÊdóÎ{Æ1e2 Œ\ç›Ö_ɨÍ0Xq_»~ÞËöv—£lïÛMvmøL¾»º )ŒJ¡€¾76D„djE+«ž]u¶OÚѰÆ3hiG/Ù¦y6¸Guuëb[Ž7l ¹[Lfö½6=·,™‚û­E=Ñq¯­ÖÖ¦;‰´îé2¦–·é»õº‰z|r•/‰´Üó»òm«ak×­S  ‰âr[S_,íROUo½ yX21WHÊ…ÕÊÆqðËXÆk•µ,Â6ãu´ J6 ÍjË8ÏhïðkbØ›|,_‚·D2>ë,Eü¤Àùéï/XÕàZØ¥Žº~²µ†YÍðÊ"ÝщM’¿^Ý’35JœªË]a^J ³ ŠÔ|«ûbÚÎÙ8ßGßlóÇ—÷7¯Ã«¨²/;Ü ÖwÁ·ýŸ{½Þs×äÅ*…ÛÝæÖ’6O€q›~|—ù¶•|š¨†üÝ¿#ÅV‘ÄùjkÚ·¿w­û/¿¾þ½×uW_ôŠèº¸î«Ž¦ªÚ&ÆÍ¶³[Õ˜ÌØ…Iâ}>ñ^àx¼ñx<+Áã1¥Š¸å?µ V8LsŽ1¸ãý1O(âŒI‹ÅcqÍŽåå‘bµ)ÜäèùÒŠ ©(+(ˆJÊŒ«)*ÊÊÊJJ$² "I#$’K)(2ËD­½¥¡|A{m 6—pˆba„„A…„!BaVù ChDÄÄDE ) _^Z@¥”Y°²r7—Œ¶a)xd/í‹ü«ÌÒ)|Aôjµ¨¡P*%OŒ•¨T¦”ÒšSe:e6šSR›tT§MJw-2|EQ€Ô§SÃ(^Y|½Ÿ/}kii`Ô°T B€ ‚Ø6`^66!b6+bX‰b*Ø–%åƒ`d‚Å Öõ±r…‘a`X^µ2u•†[,Í-Ï÷RiR TšTƒStܦíɺ›¦êÜÝMÆëvéµµm6¤ãnÈÂì’8ÎK’È—„’^^HÄrð—EÕÖJK£—»º˜qv3¨N$ìá8¤êN„á;;rÐPpP—#M)—)N™r”ÊmÍF™E ÷%Í;öêü/Ë+Âħ6^t&&Fa& †dI‰˜&&fI†d&fBffa˜&˜¹f.g•–æä¹’8ãHX/a..ú[‹ì©Ëåh(QJ„h  ( „( Òtœg ÉÉÁ'IÒvvrrvâ‚‚‚‹T -iÓm L‚úø·LŒJEJ# I1DLA¼dI1$LADD‘1ÁEðDÄE|G}|#vÄÄܶvVP]Œ„FP‡‘!BaBþ‘a& ˆaaHV„al˜H (B†À°¿¼Çãì®p.²L0ä‘A,ñ*ßͱvuýÇ„ÛÜWóÿƒ«Ü¿?6QDóoåÞýGÛÞÖÖà䳯{ø÷¯;ùö¶ýÞî´ã¸_Ï¿ÝÞ~•6«²äªýÊþUÕyÜWîw|î¯.è£.³®¿Ÿ,‚ëåç^]åÞ_²¯¢ C³!”bTøQQhˆÎ{¢ÉG‰p˜‘¯3Mm*,LK…~~~z¿…úvEÞ]erTŠb‚œÐS%¤vA)ývÈ4ÇRÝì{Þ¶Æ–Æmíïyû+öûkY ®ÞŠk@ƒ35Ñ¢Å56ŽýLð‚š,ñ6¿¯lÎP±Y™bk`h·†”Ó-¯¸xÄ·^&ÇÆN°Ãª""§[¹³×¦<æðÇÍFÍŽ~OÝ?lR¡sÍNøPÀÁeØ”#Í :÷h)çš„­v°AûIA…ùj¢ø&(Þ`óxWŠ Îãt¸ù®%i‰£ü*ÕùEˆC3¶©¤Mão‹Eµµéa†-Ö¡µ¨1¨ßaºà/Ѩ@ŒÑ^MRs¦3ƘZíaðfv®‰±‹Ç‡6vüìyxXž®ÙÃѶï¾ïÎb£Íï‘\TheRLlÂ"6ÄE$A[‚u®Ž½‰‹[u¨öPB–ÏDÃ9´»š‰¶ÚuÊÓ E²åi¬ƒ Æj-m=ˆÙ2Íš`ëQjiÝ *$û ³ äù}0:¿ lQÓ*5æ¤â&šØ¯ãuk„ï8#É´-iˆm)$c@€_#<òÆ Ÿ,¢Â´¤ažma]F˜=Mo–ö¯ž¤¾Ûeûz÷­^Wùøî~nx?M–?Žy¦Q ´ÀU´Û`cr)%'ü¢Ññõ± B;ÍÆÐNþÅ^½éðAð˜šjDšÓE(ÑN%éIüRA4SLã¹ñ¹z©Ÿ.¯M&øïÍÕJâd·'ìþÌhîä!5Dms~~kרBL§YdÁÉ}3ut|Äí'9³ñ¯Ï¹ï{Ëy~žxÖÛ_{ÖÑPu·pÖ¶OwbO4gÖöÅLl’×plB©ÓÛ¹Æ!4ý²6š+]KÙé/”lf¿Z¾V‚<yçñURAìUö÷/MðJà(ä`:áò¨ŠÑRX>®¾{–ß ±qB~7£qs쯔ÚË5šêÙýš¢Éš5\G ¦÷MW¿±'!Øû&‘þÃVôMëëh{yz¨µrŠyq­ß›çgJ£kÝ"~P$b` Öнï}ûlûñííúö{Þ·øÝWu_÷ªê+¨³-›emmm´­’ØlÚl¶©µ²ÚTôG¡+Ñ É++,¨Ê¤£)*·ò˜Ç‹C˜¼[Ê8£ÉâËD³lî¬îŠ• ÛËžXå€å—–Qå„9`å—–[–ye凖Yå^U9Q#9S•åC@FcœeÁq¶™"൵əÚü00{h€€ ``€‚Éa!B"&&&Õ³ 0’þ<‘d!{à^÷ùÔ‚H X BH€H ` ð¯¯úúò½¯´脽¶º·’C ÝÌ“ZäŠ-mjT-,éЫ=*@PP¥;98¬â“ÓY¤ë++!$„’2Ñ!DQYÝü‘>IH)R¥{ÍeJE,¶[æœÇÆøÇÆäCˆ¥Å‘BDI‘ ¥%•””%º&fa ’i€º.¨J€Ÿ)%ÀdI$#É—ös_×õqâºÓ¬ëuc®uº×[­×:×[­×u®µ×u¸ó_u¡hWÓ/­"blã6ÌÈ\JhâbT1,KD¡‘ IDý‹DÄDÄÅD1D·ÆÛå{’‚ð¢ï+Ìåo`RHA…R…B!!aHXaaa„………„!+Ûr € ú#'“2|¿3d“dïom/l*S§MÅSP¦-0)ªS`Si¡L¦Ó m:tÄ¢‚ƒûÒŠÒÐ)Ó)´Âvð¼¼)¹bã+!$‘Coò…ºëºþ_ãŸæ{ù?º—…ÝåGœëÎðöÛc?•ýÓíËæ(ó»ÊÿßsÍúnž~Þï*õü›»²sù>×¶ª:ãª.ê/æuøó®Ž#¾UÙw%Å]ÎE”Wõž½¬¿;ÛI›nû}ëç|·Ú³º}¾]{k³¨çñ5pw˳¹öò{gyÝïk:½;ÞͬüaY|ùϽéâþokêÜÇ­²–Ù÷VªÇ&ÖB A¢…Ö“- ;|3¦¨©‰˜·/L+ÅÂA€  p‚θ$‘†™›öEÀ€HMéJ%6CŒM.õ§Eã4œÿmí(Úù#nBe‹4ªŒÓlLÄcZ ·Úž¨óWsøx›¤3èÄbÀLɯ%| ZŒ€wç½çæémÞüÙ{óyùö©íÝóÞÅQ¦SÁâ†d2RlP®¸”Ñãk¦psJ£ S§MjFœ(Œfc%'éÕ=¢hTÃ"jz&¦Ÿ>l+q°Äà¶ÆŸùË‹UgŸˆ´r¹Oér<†>Ĉ§:.-¼'Íh¼å­»*`'S›±µ†›[vÿYÙ¨S¦B¢ TH'­¬TÀ¿ ­Ï•ÀEQ¨Ôpq¥Å1Æ1|ŽkgÏ ¡{˜.(€´×õµÎ昸šÉ…3Åן†1!~5H1 3Çôß¿F¨#ÄÄÀFG)Î ‹`IG —^šçÇU6µ æQj8ýy²Kbóm “#I™ác†hÐ kPÆö>ÄnÅÂTFš$÷bMµ#KÑ®¯ˆüi‘´´XË/^¿=vÛ°Ì~µ{Çîõ~9™ÔÈaú¶ÞûÿWj©Ÿ[^†HÂé"­&°Û=­˜õàž”µ M¿w¥Ö¿‚¾< œ+ Ïâ(`/›z䤯ÚðM[2&Üýæ2öŠZX(ØÀq¶˜Ýù(/]KNy¦ÍÛúÙw·‘F¿hŸÂóÄ6†„ë—æî†Qúµ}5úñ…C <†^N¦ _©³³¹Î]B^,z§;Cà5±(‡“ÕûòÍ^¿<ÜD/]DMªßÞÛ¦€+ï×¾÷·ÛÞþoçý_ß~ÝÕ×]ßÿn«‹ºî¸»©±&Õ[ ±mDÚIµVÑ´Ø›VÓjÚ&a¶ÔÙ6mµµ´Ù±µl[l¤ˆm>=¦ÚuM¢Úm6­µ´m¶¿.m>ÙÐLÆ&11Ž1Æ&,År_éŠÅ7(¸¿‘.K‹æk[æÓ.5ìMB­’¶ ƒ`Ø­‘²Ùlíy^y^¥zW…xHD2 A!fòÖ-öG!{{—+‹Ì¶F |ˆ€äA  €€``®-¹´úúòÆÆ½±»²†„6P¶QY^åá#(à7 Õ¸n›†æêÜÝ7¦ân™FVض' Ûb„¢‚‹ÆòÞ0¿)ÅJ™ô°©Q©RÁpÞÑEÐ4 - B”BP” ABÐÐÑA@ÐPÐÏ:[ÞP_!rÓ.h¡gšæ{ß‘ñï¸ù¿öo©>§ ›6oНС¾)_„ƒ"Ȳ ’$ŒŒ‚ÈHHH¬’1¤a[‘‘±ÆòVÖ¬V±B]ÁkÌÚÁvC^ ò¼¯Ì‘X€? _è`€H€ûÛ"aÊ(¢º!³,Û¨¬âºKFHïä²n›ò÷-–úxŽb‘—úxŽ@øÇ Ÿ¾•ìoážÏM¶{7ʯ ÞˆðO⼋À°lÁ[ Á°K¨T©P¨T»*T*5ÍF¥J• ä±,Bþâá¸Ëdäd”PÄb BVT%P•BP•IBVVVVP”%n’bi‰‰‰¦&Àf–S%w),²‘—÷äù˜ãU¤(ÒŒ#XÈÆ1bbHˆXFRXBH p m‰Æ˜Ô¨àÎü{»ºî¿±uýìiµQ_ä=âý»úîüq_Øú×yÚÚßž¾|ÿ0ß~gËÊ~;uþå¯ëÛý¿[Ž?sóÖŽý˰§·Gu~:{TUþvî¯Çz]Öwwetwã¯ë.¼¸ê¶íR\B}» _è‚¢ñ¨Só1T-o!4fhÏòK¶ó«Êã¿w—”AUïÍ},@©‘G¦AëeMãEÛTtnLÚš*`ܑ֡Swö~ź涩X _kïÖ«/Çã´?%{Öêõùº³¯Ë~{1$´Å•J"…•ûšKu‚ ûÇŠ»ò­.D@Ž"s]¡±¢’lL€ñ674‚±Õ]ryÈ´–ü“ÏOcTâ b€&Ÿ/¹ó¼ïÓ¬«È°ÎüQø÷~l¢ƒC2ŒHc!G»a€¾ &ïïeh~ŠS1MéÚô†‰:œ4*Ý’*Þ0iˆM:*·R†›P5©€/…”sH„£:dÒ9 I[*¸£¢V½šÆ½T§¯e Bºn¼ëѶcZÒ„nñÖÍ¿´ß7Âñ›·Ï8b þH¤x&TÓ2<Ýlb ˜£ù²¶¶@Ñ€)<÷òÀ ²g¶¼ÕÔñZóHÞ0{pƒÕ6& Åš„ ÓKJ›úha£áÃx•ÇEƒÀA$Ò‚ve¸ÓÂ5ü= CÊEï 5l¼ÚÖ´ã)”U¼“gÉ;Üžó™çã!Ÿ5#á(Ó^£{©¢Ùçh«ÿ*ÓØ%ÎÆ“m3Š|– x$Ô›WèͼÍ|1}1p´Ý`χ‘âë^A*1‹_Ôñ7ü/»ôÑx¢ð”­1ý#ÒÐMXÚD²3ÍmLñ>3=æãýŸ“¢¢Ó6š¢’7±A¦…?6n¶†Ü TËlýöZ0=ñû|ß›jȨž†Ÿá,Š\)kˆÆd,„VIx(ÿD-QGòAüÝÕ«Om6¸iñκ¹[ûÈÍ`V ©~­Vµç ê4ß!º¤èœcÆëbA¢Šö´Ýˆ“7Ëj/ø7Ë«[’æÕ¦i45¿•š!ØÑ2}몰OÝöüÞ‹b?=tKp6Ú ø½º4î·½JºþlºHh¥©9æÔÿoÍÉþ›»¬&¨(Ùömûª’º?ÄüÚÍ)üžBˆ›6ûÏÛdŸ&‘íîšßÞÕt϶)yíÄ=óÔºKª=8dÏÖö}uï$U¬ÊØ6¢Ø«blU±±6›-©µ³XfÛn)') “¸*"@Õ«PS\Ùal–Á²l>…ñK–ÎPq#‹Å-Åby3”~aÊ0åPå¥Í•ÌÅÍœæW/Ìk̶V£n" ‰2§+0"`f`˜&&&Bd˜¶ Ô?¬'' ÛĦÓJté–è ±(¢Š('g-KòÒì¿2جJˆ…(ÀÕ#Â0? HÖ2261XÈÈãcb(˜’Þ0·HÆ2Ü’KòRRVâòbæræìº2÷3ÛÎ ¡@PPÐ4@N“<ìèNNÌÌÍ+j“LLI$„‘‘Çq„6d%–x¥ì¶§1<÷†B™M `À¦ÓšSn Tj ‰QJ…Å€X bX–`\7W–eJeåÍËa©N{“æÑAL§òÔùt†úß5o†ó}7··Íñ¾·ï-ûÛÛÍã0LÌÉ2]8M/Ìä¤.îˤº&–Yn/ç.n$%!q"’€JŠJŒª„©(Ê2„¤¤²²²Û³33$̉nKnLM4ÒËm5ã=µô÷¥Qq€dmŠsθùÐÄœ'gyÑ ÓúIÂtœžy‚bfkd¶h( {ÆŠ2‰ï™‰­â½½ph‚i!Ja„aXT…!!B!RBÜbˆ…†a…·!-Ër zëÛkk[R"+È¢m¯ïcREYI$YBI’F@cß”¤e£$iY–deõ‘ vG!iÊߟøˆ eÄ_ùÛù¸rÃ:ÜöͶa-£[lËùkù û ¥*Ð.Â8ëËpçöv¯f׿ì¼ówò}e_·æ_™«8Üàm6Ó:*rŽ»ùvƒºó»:‹ùGUçGwEÏå×åøªÎîý;Ï•ò{]h(Ø TemeR¨­¨_S<3½!¦+l†&% PÉ™‹µ¯}»»:ëó7u³]çOÍçæÝó±.üöºùÚu÷·}öìß[í¼>g³Ú¯ F˜3ðŠR@i9¥DÚjV¦É°2˜Ÿôµ”\$Ä•ë.oðŸ­ß©wædê/½«äûVgËxô|ÖŠ‹…Çi6¡£b¢+c –/¯yS_U¨zq¬Ö)½!L‚¨ 8óD6ªþ–Ì_£Æbá/k^Ï sx¹µÅ “†©™°xŸ›3˜tg}ùêùE|ëïX´ªf£?K9úÉà¸xúqC5Ò‹/6 ƒ86Õr‰iµ®Ùlcbæ:d¯µU:+jài†Q·œ*P-Š;-kµD¼Ü,>s_&1¿± ÅÔ†Žžl(ßÙ­ÕÆß¼ø{€¤cn7²ŠPhR"(Èø˜4:2>1D¥‹[Tq ^Â5ïH6˜©_¦_éøâôh‰œqÇ_f5F¶¾º@ ¢{ ߥ¥çƒ±»HÑ„¿<¢›ëËV·²n½å{eß’qcÑ4‚´!£ ­•´Ñé<ìMN' Q 樂}ì¢F[2zJg˜´m°J Ö¾WŸé÷§ÈÓúÝtñŸH$!@°™cH0E_]}ïEyÊÜd 6¼ ã+Ö ÈÔ\çEîOqS#¿ÑÚ_ {øá˜ sh3â3cÝ]ªy¢‡ÂèÀ'uÂä>¾Ö·ˆÛ<¾¸(„ØÓê(¦&fäg•N1òeEmIbÊ~|kOÏÇÔ“ÁâUµóSô\((Ó_°Ñº¶Ñ`ÁºXš12¡+ÉðÞLZ †Œ Dz¯j“4ñ-j97nÖÚF t ø`Iù6è¶Ä!6bs ³â_7º¨„ktؤ«Ñ1hÌÞð=ÎÚ€l¾‰‘Ýv »(¢gMí‹JÚ׺ÁW´Ú×#·^x÷t:DÆÓªÛY­g£6Ý 3\Û­ñZMŒäý%[,”—i›býŸFª&ÁÉŒ4ñ@U’ݯIcqKÅ]'rjn=1·½:šCB–m Úßl³¢Ö>þo°ðÄ,ŽHšÙR IÂ% Ȩn⤠Ð_=ùµ|ožÇ•îqÞ:sñ¿ÞÏîÿuÿš>®®­Z¾¿ø>Áðõ|½”{ W²½ˆö/cØöÅöϺcZãŽÇçcœs1¸¼f,1¸Ü¶@©y€X™[­Õ……ÅÇÌü¿ðžçÆ Uüv*«mˆÚ¦ÊØlSciš[Saµ[!µÐDè‰ÄS•'D$…%(’Y¦ÖÆÃcfØËi™ŒeMá«}Mõo›ã}¼ßo·æöýôœžyÉçlÖriera4ÓLL]“,•H¼òÄ Â)JBaXR! (†"!ˆ"F(ˆ‚" ˆbˆ-B6ÖBÔ’D’8ÈíZúöÔ¿„ÈÛZàZ’#*ˆÊ’ J„¡(JŒ©(2Ê’„²‹(ƒ(K+)+(„²ÈÉ}h“LM”mhž{[Y‰®L”×Y{»r€æ hMMCFšSã M)ˆS§M¦Êm:`Si´Ò2š4Ò:(  & ‰œ½¼²Ýò÷R™Nâ‰ç¼þôKJL¡2$ÀÌ3 “3,É230ÌÌÌL3M2LÌL„É1mxO7'nO0KmlßO}}NœÓ÷ì‰"‰ $€¤„ ÈŒ"H²$‰#"HÈ2#i«#¬dìq…Üq–„ ý¬7ñZBŒ"R…aF„aHaB……„a†BÊ(ˆ˜¬¢ "+(î ‚6È,ˆã , ‹â#8¤bF bÆ$qŒdID$BÄDA $$0…£hBBAh7 › ÅÝ}‰s|`rÕè5à4«À^A½kÒ¼ ð¯ B` ñ´‚®- úúë0®¹1øþZÊÆÂá³dúœøµÕ²*l«dÙlƒfÍ“e²+šƒ]\5*cÃ8ó1öØü{lÜ·+Êä9[[ûoiDAëøïð¿ü-U”gÚÎÛc4ÎþGžqÞqcnó×ñ³æœæÅµo½gg‘ü›Q>cãÛ’ó³ùœÅzE_Ž»ÎêJ¢ï×Ú»¯—Îë»ö¯Ó»ô+õµúûeòËåÆÛ=¾yÅ=±,ëû>ߎý¿ÂߤWÓñÙÇ—vtÛËʼŒî¢»*/ϵÞuÞù÷®ûlÛÞÆß(åæ›L1DóU_ò~tì„L²©*š(i”M¼Wó b[ñÑ4-tZfC2˜Œwª]»½º%¨Åÿ“Û˜• kEž3öÚ×ÏŽf{¢‰¶úTfQ¿³Lþ¼Ø|i8~L÷åR £â|jèQZÄ›¢ƒç+ª E ¶‘$µF ŠYµp³¹†‰1Š ðÝh¯/#ÇŠªzb^_¾È,Þ~MÑF @´K_‹ñßžÖGXö«Ï¿=ùôuù·lÜxWœBB!ám±‰Ÿ–¯TÖµò4#+k+OÃêð×|i„*%E¥iµH„F˜'’(”Û×µùêM‚0bŽë•1Í™9¨„ãH¹µíØÚN¶Ë<'*#D#Ca¢áw> I­ Ø{Åä 4 é)ŒÈÓŒM&ÁÃîzØy§Ï»<|0iŽ:f¶œVGeUýn>åBðÍh b†VÍ›5l”‚¯^îæ×ª¦_w·Ûz÷Þ¼;>|¬ïÎÛŸ›[g¾÷©_…¿MÄnÏñ_ͬfuŠ3å{¬1-ZÓã¶:¢ ½3áóšùžÇª4V*Úƒi¥ ¿©¶SŸÉ‡?}tWšâF”&?zéPÿqxÊ_ÝÅÖ/±Rß{òüæƒ8~`ú'ñUèÕ1n?Õû¶7òÅÐtjY”Ý=13´OžÜØùÏç猪H4ø% ®¶8A¿Üߺ¦‰Ö¡D¸Q=#ùTB)úB­‚Ó÷j-5xMT9ú?7sÎõ`&~*œ¬%BªÈÚ•Ô£„ÃüVЖý“>¶^™æ&¯Ú×ÝgwïËT4ÆüZ†›#–³Å¢q³Äæ}ŒZ «ùZ¨)‘°â[jŸFª ‡ÚëM«ò*­‹ð‡ÇûõËõ÷mt$G×c‘[/ ª¡ š¨ö6šØÔ«õ÷Ûú÷”"ËãóÕ<4v;éb°õÝ“l‰½Jw8qj¶øñ>kmüð<1¢Ÿ*Þ{4¥]ºQîËÑsy¿+î*Ù½$gÁû}¯}­ê¿ßüùñë‡ øk[.Ç‹ËyuÓ®½}ìÞñJ¥ó2±FÔm m¶¨m±µI±²f¦Á´­³VfÖÛ¶äç )ä ˆë3f5ƒÑW oEIè•èQ30³L„Á2bÀ˜qxÅqO$8ÄÆ)Å8œSó O%ɦ(åRâYlɦæ,¨¼,î9œ”* J”¢!ˆX˜†HP€`&„'"""¢"bš(ˆ¬ËÈo y±¸Ê§/IËRËâ2áKÈr<…'BŒ*0«–M¢Æ‘±‘¤cÆ lQE‘$ÅäLFlDÃ’´-Fÿ'=é’·RÐ1ƒȃFF‘±‘„a‘„lm°È‘¤de±lKzInròI'.GQ[Æd²W3eÉ¥_ñ™E™˜Y¦@˜`™&I‰‚d™&‰‰¦šbÑyÉçù€Ns–SdIËÌ…­­;Za•©O!N‹gå5V­MZ£z-›Ë©¾ßMæû{}o¾nñ¼žpœ'BvyÉÉæši†åä¹0”¶ÉIq•öuøúô¶uT:º¥6 Škít×k5Úæ³\ s\¥pW%rW5Å’W•Å•uqyK#\Xåk®Û¶Å†¦Vå¯`€Å!XP††„…„ F‚, ‘,!¾¹†ú++›üx¸õ)cÕuθu£­Ö:Ýnµ××:Ë®ºÝg]?1\upW<Ç¡P®®-«ÚëÊës–·°°¼¼¿ºn˜®wчùHÈ„‹"HH„ŒlliaEÄ‘DDØÞˆIwVweÜq–hlWWQÇ{–.æ”Sü¿…þðŸÆþûÞy{vöî/½Þwvu]úö¯—ôzÐþ~¿‡ÝžîöîóÀË Zܶã-i«÷7æùåø­íÅÙÞ]v|îþW_¥ÕeÝ{•••ÅÅ~;Îý·ëÝÚwf;o·¼J¿Nßc¬K娗iúuåóåó.ùÜEÇy×ÞwFþ«ñWzÚï“nŒîö›³¼½½ë¼×µøëá_}=ŠuO‹­ßç}©ªtˆvHPÑÑÆÌfp¯ÇïçQÆbÑ&¹‚Tò1=û/4„bPbA#á.Lù5LÀXN§"q®×¸ÚøóÑ4$ÅD£hm~Óä_7,À|Ž&þM×u€Ä´ëdŒÃŒ'¦Äý¼ˆ·SPÆfgö¿=¿û;'}ºŠ7Û³úÎëö=¦xÈ~Í?ÂÏEŸ‚búSãy#bnLæó13! 1&„TPZþó@¨§8"&Û~AùðÈ#š‡áNדSä)¬fŽ0EWb¦¼“ˆF}Á¼Ù#m!¶šiÉx옃ùüÒßi$‘nñN¶¤Ñ«Ïoy­={zÉÈ)ú€¢ZIòcµH¦ ÆúÂãÚ™AØèÅÒJÙD5õîV„ki·„–Smº nîßÖìîOœª¢6E,DR!¦¢2ˆ1¡5n™J+…y¤¤‰­®$űîÈ ¶´h—öori¶;yº…‘¦¾ñæÍS8IÖÃÃ/óõVôqžnëÛDŸ“hR-væ¡5¤‹d"¢Ó ”±×‰Š¹"bÿ}² Íëݵp¨¡šßÄ-=úëš46éšeÁÁ}¯ÂžØÀ`kj«Å÷9¯¹fDÓ¶Þåþçîúõ~2ü³9zØÍ­ú_ºüô÷šTKàÑüó`¾wª¼ÐhDzd¯j? õÖý;ª°Ø¶+ŽFsj Ë<½&êOÁ6H™“„Â0{KS2·± 1™I8œŽ4ƒ<¡ÊMBÙe2Ñæœj45ãþ[U\i9Ï6~ݽ^ýõ¾ùMGåö¾ûÞ÷“ZöÞß›^DB?>;[Æ bèÑáB+G©f8îµñÕ¥ßÞ?q½®‘¸0±J1 )·? õt¶±^ÖßÇøqɶ/ _|»/¾M4|ŸDHäŒ'ã~t÷®èìPß9[-Ç»§¶NW]ÔÆãÞHU7+]=z×òšüŸ*‚èç|UÞ7½ÝYÇ>h‹«¼»*ý¦w£WÆä[TÓÒÖ>®ï×§wðóöϼÀö‡eâ_êZ.Îæ¾û?¾ÌY‰bÅÿ,Å€’IJڶ¶›%´ØllkM–É«U«Tjµ(’žÅûϲa{ ö^ÃØ 0i”Òž)i†%äù†,qaýËŠ1xåôäÓÄÛ¸ ·*6ã`]Ô.Ûs-q§O™‰‰B%’!ˆ"R&ùHÒ620b’P¡Š)ÊÈØˆ¢ˆŠrö(­í­bÉäm­‹é@•T•”@•IY@””%IP• FPmDšÔ˜&&&I‰‚R[Io‰‰‹RúúßþækœþêF0R0 DhƱ‘Œ`FÆŒkF‘±,LQ$DL$$$7^—1å½upZÚ×`ZÚàÖÖÑ93%‚’# È2"’2$„„–ì€HHŒ…ô£-Ĭ‘‘Åp[7©oo-µ³€A_]òP2œ½'+J•#RÄe±~C‘ÄR¥J—!¬Ñ $J„@ĤLI$JE±1QAqp1lmÁ%ô¹0šbäžfk[Ú+ç³¢Ë!\ŠHƒÈI"HHH¬‹"!%è2‹*Œ¡*2¤²£ihLM4ÖSä Š Z‚öò¥J™º†y—9{ê”ÐJ5ÄT¨5¨¢Ti”Êe:e2†Š Ü tÊaDóšbbi¦—#”›/vÅp+”€@€Pä```€mXCúÖO” jE,%¬Q…£DW¹ZëL WÙÞÚZEggw–ѵ]M¥¶m›cjÛÑ´Ûmd$d$$’I- ee%¹%-e%,Û{)Ó%ô®ëùÿšþWò»²î¶ÝüË:þWom¿²³ßÉúõåó[E–eiW›ÛÛy=ïw=©{û>ïÚùíºÉ?þ5}î~{ËÛXrñ«¿•øîþ'_¥ã®ü{Û®Š²îÎþg½¸èêÚÝUåäuó¯å]ix^3!â @±XÁ|(ˆòÆE¼Ëô‹(¾Û÷-üšý~lã¯Ü§çÞ·Úëöþ¶¯¿Zî’¿Wé×Gsí—[ì[k¬ë=:Ïo{Û_4}¯Ü·¶ûé õý©Ü6§…²Èšo "b‘1ãþ³M½÷n¥Ï±XbÒ 6³[LÌÐ9±Á/7 E“ŒÆ›LDýåüx¾˜FûÑMWD7š“)èÕ‰¸Ó†ŒP”“>Æ«VbýÏZ—OÞlü[×66þ¶½];$D£ú¶(VÄÅ#LÍ×™No1j3Tx, @”]"ÆÝ3)°ª©š$ðü1Y|—ëUyéù:÷mÕí»²ý{~>ü×ß\2ÛÁ(iIð²‰Ox™¸Þ*xÆzYT¾å¹Æ3[íuãí’ … Ûb¯)EuÛ±13+m© %ï;^žõíí{m¦Þ×ߟ›ð˜í³d:¹\@Ӆ݆ïãöèi'õ… h¬²ûŸŸ^Þɾװ{Þóo½—œ¤T괵ǒ a©Ã'š`i”ÔIÓtx…+q}ާÝU l¨2˜‘–Š1 I1N®‹~nÝmM?†ê÷žÆÃŸ Ç:ßs€Î]ÒçÂwX÷´OÜú'ó_ Úò·D ‘Vˆÿ­\F¾V‚ „4üdïµEsC“ÎÛ3[­ç›ÊØ«XÈó\D¢mãä0#_¡~y¯|ôGÂÏ¿\Æ‹¡p ¿Â}õÕß#ø,¬[WDàšf óv²z*/ê·|¢‘=øæQoG0ënì_EC¹¥¢Ý¿Ãº³šñ¦ ùg›Öl<þk¡½thÚ„õyDlަŠû^]G‰î’±¦ü{×…æß5©¦Œ#h07Y7^û¶×c\3D´¢A¦œì)ñü!k]¿CÙoÉc¿¢ñ©8^±š¦úûwø{5`ø¾ß±¦ á;wWÓ´eM ´# $&¿žß|j¯ ½Žñ©[§ ­j­¿~í÷éÃÃ¦äø§àÅçÁÙ[œÁ}{ÜÃó£;樶fù¥<ê*;åïîQ]×Òò0:HsÓkаàUü¯*¦h‰ÊdG½®Nuûr ºÄ@æÆ·nêŠOu[FןßbK3O¡¥E´FÂm²¦É°Ú°®¡Êˆ*#®.:N¡¥HR4cF1ED”ˆ9$ÿ1 H“—â\N$åN%äŒIÊEinZ–¦]¸˜–(ŠðTQ1àbëÄkƽJñ¯ i°)ÿÀ‚Ô!‚ ê⸮k£+ëÚw%@„†ön® `X€€  H`JB„a€ ¢ˆˆ¢ˆŠ&(H ü­]A}–/-n®k¢c‘yGƒ"È FI@$cØÈã±I$$d’(Bž#,ˆË(ã±nræœ*„(!$+ B0„*Bƒ ö0¡  œVlCdµŽÎO'fdìßhb¥VP T”IRT”%Q””%%VWå¡h3¬q‘¤c%g~EivÚ]ÄÚÞ×wsßÏrLd§”_ë•BUeU P”BP•”%eU%%””•–ââ`”.%o ›™¦¹.f/Ã4²GnñäãTþˆÑHÄä#5ŒcHÈÑŽ$Š&(ˆH‚"†Øˆ-ˆÈØãµ$’4Œ´$ÉŽBi­R Z2y@Êåñl¹Èò#ˆ1¹F‘Èr<†"•#:„tÄšòÀ)´Æ˜|…¦¥2™nT ƒP*%F¥E¨™;…,KÆÀ©0)”ÛªtÎ]Ê眞W/”¼2°¤hF 1„`¤cÆ`F1ÆÇE0$D,<¸EtÝ]²D9Xa¶yr( •ÏõÝÝ×uþýÏý´µýÞ{v]ÑÖڦݑÙÝ£üޝ:ó¢àì³lVlÇöþo¿ïågë$qÙFtüÝ‘\w•ϽÜýµe^tùŠŽ¼îì®ïYݶ¸ì³ùמwÞ·^m~={bÌsm›<÷Ÿ÷µ{7Vy]•ßmÜWG]}*¸ù×^EvugWËf Nù…ûý¼¯½šo6¼Ó7žO±ô¿§vöí¿Mæz4.ŒJ ´Þ½Em*/{½Y“šÏ¿­¡Ö 00>.x³wnç…™ôIpƒsãÈsk8P¤ÒWã4 Þll‹Üè¿5¡{\ú×ÉóîÔ!¾oj/æË¨å%ÈBì•WºâÔÜx È`)bPÑXÿ^Ý_7ã_‹}»ç~:Û~{sn¾W~-íÂY `g…5¥øAkoágÁÊÄbÑ ³f&%íx-7ZÆb†_ǶEpÌí|ŸN¸Z [£á à à£›r”Ť§71˜€åëºVÔvJëÆAäµ8òDçJZ@#h_Ì…"~4 R9P¬P³ù½Ûšö93†«£y”¢ Z°ízî¨(:Á(6ò6:$(¶3=³hz:ÛPPŸ%×»–8çÉ‘{²s³ãZM›<…¾Ø Þ:ØÌ×·Û ÛBÁ&ÞÚÛ=톽1ë^Þ_« @ülB ßá,ãzcÛlìj*õ–B½”0¯›Iªz»¿’ 9¥Zq Dóó”a”éÂÛ”FF˜¦½¤’ -øþYª÷l®9=íî^xF낌0gɦãøe c ­x#½ë—|EN’“ÍJ6a|È~Û_œúüo²Ûni–Þ÷¶»Ti‰Q§¤øSÏmTLMé#Cá†ûUVþ?‘«¿c·D4|!Í¡ôÑÑEgG¿]§á×á›|ȦÙI¯ÆÝˆ$$b?=u‡ˆ½«Èí^ûÓ„Nï3v[c³O•n®ð)^ü/^M5±´Pë"w¹mÔÛ®Õ- ¾+­l›qö¨tZŸÖ¢Óó…ùÍŠOH›Míõ·³õJ >~ˆm%´£bÚÚ+d¶£elM¢Ú¶ Ͷ¦Éµ²©ñ½‚ôQèOA4ÊLŒÌË2L¡-ƒý8“¥ÄâŒV+É8®NyÙ­§-m ére–D®R¹l«Á¯¯ZõÙÄÙl¶665šæ»^¶¶·_ÜkŸpûŽ»ä׉9lŠcË‚¸¸K+‹"ƽP®T®TÄÈW-p×:ík\ëuÝs辄ٱ±±l/¡k×®ú †Ëf͞ϼ ¯+íð-àÊÜröVP*$J+ˆ‰ZDI„BD©DØŒcF‘±‘¤q¶6$’$ŒlqÛÈI#bÙÙEk ©•ÇòÀ¥sˆ®G®®¸ä®Mu­®uºÝgZëuηÑzúγè×_Ï_Â:Ï–úÇ-ez]ZYk¼µãkýï÷Rï¤4©šPF$iÈr1 Q1DBD¤q„aqÆÆFÚ‘ÆG%É–Mè^JI–%Ësä¯,xãkÑJðÈF‚`þ„ `H B€ È„!†²(âºI mrS—rÊZÚ…Ý®K L”ÕRš4é‰Li´Æ›@P@ÑE Nó¤ó¡8“³3!6B{`¢i$ŠÚþêÔ®º®®+Šâ¸Jà®Zá®mFÁ±°lØl66lµµµëkkµ­zí#èýëâþ!³ÈZ qÞö%åäô’­$@•BU”%eVTe%••”%%”½f ‰‚Êt&/g'd$ Ñ- ­RVYdº.m®míçŸÿó’e5™¯g`Ýÿÿÿÿÿÿæ0„- cKöÿï„!CÄÄ!ˆcBÆ5mð}š)U}44¥JÇHªPè €-€AA@J‚™  )ªSA 4À¶c2 Ó#Jvh:5¦«3mm†´](%ÐIÒ 6è9¢¡ººiaªŠ ¤tc :€Ö¢Åf(HÂǾ¥IE¢(P( QT "B€¡%QTŠˆ *ˆ”BT  H)R¥Tª©D‘„J (UU©*Jˆ*Š¢Šª©)@ ¤ D J…PT© ’P¢‚EPª€P(ªP $ ¡"‚¨©U$UU’ˆ@PH•PI($$ª  €B ‚”¤HAìѦSc ˜6­`šÂ44 R ™PˆR!*B¢! !RE)U*  ¥T  H  RŠP¨€‘@Q(TJ ©J•mŠTI•(¢TUD($J„¤(‘EIERŠ ªH‘TP ¥€ª)E ’… …P ¤€U@ P¡B‚€P(@PŸBð}…r(Åc¡qXµ@1@§ÇD`P h8ÁVN] u³R*΂€X@ tAaÓ(Xèä ÀÀê€p ƒ€”nAÊš° @:m:Fˆ Ðw1 Ñ¤è13¡ÉÛ À0 §L]£¬£Žœ-[!£%t4,€u"vè¬ tÊZ¨“­hEn@ @Ͱºé®ìqtÓ0Êm@ÑBì`4 а´²”aÑÆ“X4hdM0Έ©ø J©Q 22Œ†€LG¨bÄÄÐTü4 ª‘¦ƒC&ƒM4@ÐЦLŒF@b`jx"R)„CÕ=°¤MIê@4òD¢R$ML? 4¡2ž›Q jS@)ú””‘Jz€”4š „”JDšM=É¢zi²HÑ&šhÑ¡£Ðô“M1¡¦5?À‚{ôˆŠ¥¡§ô$wܳN1INµ¢Ù§KÆÕNŽ/Oñ®¨-„tžHi‘:è^€…:”<:D) +§™èGBPëô»4›)’QÓÄŸ£°pós/½{Ø{dN”åíiZ]+çyááM#Ó¤vÚ4Hô©åÒ>E.Øëªˆ®¢´õüo2u‹E6ÁJf?C°ïuµÄµî<¨K°–Úó°µCÝ2’@À˜ÅÍ4ÒI4<æ_¦öæxɰ š`‘2q&ÿ¢ñ'„'Žòó8‚zYÏlӖבWŸ/)ë]ÂIøM2Ã"IÂd¾íÜž2wki”¤VS²¬¬*™%­!\‰'µÒG`°¤±YV° F¹Ñ…„¶4À¤L(Ä=~Y°møÓu ËX’™-¡l RJTgjC&Ãý"’ü¯µ)”‘†­™H×l´? è:4ÐÆvw™O' ¢h¤Û4ÖÌsPb¤ÐÒÚJ»d¤ò5Ñ×vÓ&Žo›ÜÊdœe2’Q‡§·&’ºº'FŸ$×VÃòì—ÀG|žíMy?ÉTy›¹·jJºä½zì0¤~4•R.ØøÎº/#£¨ ™‚ºÁt÷¶˜Ôbdú3}wc7XV°Æ_,ÒAª"bVj¢'Dbbº$íz 3r#¼…„4b…,e#,-šO?9‡§ÆR†~¤i‘߬«™ºæÒßnÐÓpŸ ÝÙòBú·¥|ì@Ó–S12A´¬œIÌfKClÖdÓ33LâY¸C¡êÆùï‡ ì½WÂù{ ×ɇD2t"t…cEÓÛ›\X$cüÌðÙI¤w«u¡#Yž&ëŒÜp¾îºôX±é¬:"´:îã ¿Ó›¯·ÏoKöÞ!Þ¾)4Î%¯IÆbTFF•û$mâØc#é@rXѦR&‰ŸH“L;ÇÝ¥$ìüP Šg§½fóÅ‹„H¯k&´-«Há2I!  ¹O¯žç!È™ç$pWÌÏÜn» šIôÍ3W¿s2œÇ8ÌKEélÊi(Á![ñ¤þçœü¶ßÊÿLùh¿˜ç~(1­GÕŒ‘x£€²Ñ¿£ßêž0„/B…—®ÕEkó]iäêÛ®›·fREœB˜eÈxQ©e ÜðíK§{)º ¶Qm–lË<{ß}³w£‹ñ×bV>¬+Ö&Me ~iªÏ*ˆ¿ÛþÇ úÿÿ_ìý‰ø³çÿø~ê±?B?W€püÌ*/çüKZi7n ¦ "U±B1J¿ë)[@#Y‘ì—e(:^.´gyáâhÑ®Ž—mÛ7kX=lcu¼ŠhlgîiÆårüqØ!¬ŒúéíB`õÜû^‡3²í¿4/mÚ[%"D€kJb}2Ùׄ”šZ„†®݃”nZ‹+¶`Û-Žl‡3uÌîe„SnH…ŒIC]ªee¡$a®Îü¾/!…qßnÍŒ‚9,òñ;Mª¡€³~]š¡;t©l%¬ˆ€Cô4Ýo›@Ý ¹HÂmo7'é©öûÖÓw´„ ÙqDvhÄuäs'ÒÓwsÕAçœrCÍN ž™ÐQú7—}6S§ctswÎ:Z¤ï§nÕ0È‘¶uÞH34uÊXKmÄHBOöOÎgÇâ€feÖQ#Ø"ó:Näíö½žÑm¬’а ¾é~çÞöY¿=cY ¶îíH$Rþq¬O¬ñ=ñÉèdOB±˜,ÄÍÓIÕÒ5Ï‹°Í61æmX$C^füà8ÝIæåÜÂz÷f—"͹°¦Zí;¶ƒ5”l¤®ùÔ±øÜ<ózÇLÓf¹Ÿ)S"¶f>fm÷ÎíægÂL fÅæŸ·Ið¡Ì@Ì“á>fSñ`@Ì—£ñ—w%0Yæ)D”Ù.ÕšZÀÝ–ëRÉó]›Ö$ÓŒ°ÂŽcæP¤B±L± `ÕhmÍÇÞíöøâ IL+&…hY»¼®ñ›šÁÍ®N8èL mlIðMæO ö >C@žJ^m 䇾î„=½º &Š)|ŽëGl÷8õ½¨•–Ÿ›´É4>R ¡"q)+ùYï{ÇtœOŸ5öË ó™óbçó–~±ÿeõ{ðb$LßÁFLÜYX\cÃæ*CÌðO‘s÷L¤ýß)ùÑ’~wÂäšL!šgˆD¤¸]²Ð)eÕÖ;-ÒM”¢"lŽãò<µ¾#jVÄ´– ºe¹>ý8šHœM4’&$0HŠ÷nÌ€,‰ ÉI³‡2¸½ù¼´²Â~µ‘qß}¯Ïßùξÿþ`a¯Ñën‚û"]®Q‰ç´†ÓÁ­ˆZðdÛŒHø‘˜aAXu— „#ÊÓi“¥±ICmeÑQydÝ“‰‹iŠä*E-2ˆŽ_A9´baz5AÆZl±¸/PØ‘>_¨ /÷¤¥h j’€B…¡ªŠB†’‚`j&‚ˆ$t—AÜ‚Jf D? ?«* +HªP¢¨Ð ¢>ü¦&&(þ' ¢£á*€…ˆ"ûÊ "" ¢  §èþßíkñ‘&„4U5jqmý¬juf‘%l‘Ä`I¦e34Äþ{ O~ ÷X+ (OÕƒMCH” С¡Oi…‚®ìДZ±¶Ý³ZQÖÓ¹~˜ÛX§NOÍ~{TgeÙ;°tô¾O’{`JC£l 0Î +Uf-´azì?ÏóÎ ,Cm§£F±&!ò `¶‰šÄ&’ ¶°¹ñ»"æ÷ž³¼·í¾ûO°&Æ‘Ÿ7w›q=S‰Å¦—Z+Íö«/3¾Û¬¦Õ”Q[[½‰:­»ƒ¡Üc@QÑű³))IÚéšD™V”%¬«Z(˜6̥ňA)L G6 ºZž{Ã[-žo|ëOm|Þ‰”ŠÖ5GË˵ïyί4ì+)ýi::htsõñíìÓ׿WΓ¤ž8L êßd¦bÆvÙ™ L!Þ]ŸÂ³ÏÅÅçì¿O6Ýe™Ñ\M Sy”ÌâcÎX €Ã *RöËA®´=½çy8ÔP~ ¯ÉWÎï,÷ëWÑ*B¼¯½¯9_ @«”ý¬Û™]U°#r@Ÿ!Ï4°?Q£ŸÐ·åÏ\|@±wç´êOa¯®>þRj×ðóÂQÑ–â ÐÉd„Stêx™! Œ"¨Á:pƒr¬—J ‚Šá$;Ý<î/çž÷×€õpÇû’­- RÕPKT¥%QE,C¥SMQ4¡K“¤ ˆ”A‚ÿJ@àDëú )S”DQ?¬€§äÂ'ñþßÌy÷ìÕDß›G\vJ^„(M Äù!Ð)§J´"PÕy°žKˆi*¨$¤þ%Šw¶ŸÚëye¢Ny™Þõç›häå“[eš°±4¦ÆR+» 艡¥(vˤi4…f];£óOIW$«! ¿nê"¶ºÛŒ3bÝš :)NŸ!):Z¯!ÐSähÝ“ª^Cäy°í“Z²eŠ Û(eŠ@Iñe$q‡ÞÚi²ÆÛK‡u¸aƒü­ªƒ5ʕƑ”KÍ»)i»AŽÔfÃf ”kbèíÝÙ°‡Æv¡½4²”šO›ÚMåÒ 4ÑÐríÙ¤­3tFæÆë6ì"X¶¦|µ.í’•t¤¢`GYüLã¹q\JXR—,4ÛŽ‘­¤_ÐË…#ˆÄ‘¬Äý/ÒË}ñÞ~ž=k‡ãåäÎ:Še\!ÉÚ冘…¯¶;­Kc(Ã'-I—ÛpQ˜ê„á%"V”^P1í¶XÇñЈ,L“áÒYTÀ )“Ö7šd èËy³I12™j(¡Þe„€èá=ërS Ëý+õ§lŠfFqKX…á°2™¶GS¢cP„mpµ”À ¤L!&ìqSB8®2XŸÑ”ÃFj¦1Xd>3hi¾{Lp9Lr ÿÛ1ÊdBM¬'ñk½9<€§§m…¤Z~’NÄTÒ§^ÀSÐôì›LßÂkß_qÅÌTÎ3Ä}· ýÌÖÐ)‘>g'»m wml 0ñ+`ãˆÉÄ“DÃY”ÍÝÿqÝÄÀŸ¾Žm`dâ`o[’’&fÇN®™œºf<Ã}®ã³ÛfæGwÍ’ÜÝÑyŒÓN^×IÏ 6åñÚÓ $ÒØVY\#×MÈ1ÀÍ,—Ht÷{Úôƒ@R“¡9ÞwH= CËÂOdKßyÎ^4bŸ}i˜Û¶›lâT¿¿t¤ô§N÷¾êF‘›;æîo7×tÕ„,¢ f¤ÀÈâeÖ…y~).uÈÀóÕ):¾Û?MtTvËvØ’ê•Ü©4Û]›I¶%IV$|i cï]#{Û±0¬“Úɲü²h(¤Ñ¤*%ŽOðˆˆ©ú_Äû?"DÓIE-+ù6JÙ¶ûÑ £òwt}¿—y%)ø=ËIÒ~zéB‚“BF4.„  !HI¡5w]¢°í¡‰ˆ¸vËgµžyxW•½€Ðôº@mŒ~^íÔš ÆÑ¦}da›‚"f¶µÌ¥PŒ®Jd m‡lèÆÔ;d5޳HįME¥×¹ÔÑME'Z<¬¿d~–Nüve¢Iø­.Ÿ˜½ÝA¡1”Ó¬Ã@•Biºžaè£ÛCÕj’¢OneyIG–dv};΢í‘&AfÃ7A¤ K~Zgk"¹Æm#‚Keý㦪“ÖYaŒ ) hâÑvU@ÂJ@”YFÈÒO$»ÄÍ|.vÕúâ÷d¯%¦"ŸŽš¾L ªÉJ%Þ,Í3]¬ØæÂ±¨óZÇ„t»Þà{Ba{‚©¤‘b0¬ATä„әéù(Èê:)ÙO1•Ãk˜¤–Ëe{”“†<‹'•ØJßJ3. 0ìxœD†nŠ,Ë$0!…ÛÛ-Í+¥j@HŸ~ûuí²ûÖNj⹬jºK`üó¼>¯~u£Þóï("‹ÿä(RR4ƒ@Ð…RH”´-5JÔ@USDM(‚ Ÿð|é-#ýÉ4¥ ‹ü¿ÏUE?пñB?“ï_©ûIù ˆý­£IN…öN¢•4‘D«¶¤ iZQ ÖƒæíPP'íO‘Õ-1Å?µD¥7¹tLAšˆó¹ãDÆËŠ‹m–°Ä…mol½)_cCEÙ)°;íçW¶Ë¿c¯*ÈæÅM»y޹ºÁó\FÃ¥¡/pS‰cvкï;’¼- Û|—{ƒKí­ædâB*§Íž8Ôëê¼–9¤VAC&“›,LpĉmlZ=¶²t(²Ë?W·lãeŽ¥Ë5]‚¬d3L®Ða¦nͰL]i¤†ÓÆ0ÀÿRD+±È!cŽ£6r[L K.ý22ʤ%ÃÝ·ŠÐº[_λÃ%²Ñ„dG>1«¬@~î였s¸’n1!m%ˆÈKvɰ¢k©~]$¦W#B!B[sü°ÓĸN>®Q<ï„‹K Æ&±„n¹ ¶iL€OŠžqÍ#̲(¿Kå}÷cäö½íwê_¾Ä! †N¶–>¬Øbi‘oøn˜fÓ$‰(O[U$9dISéBC™4kë›zÉHEŒ ÷ßmòXuؘm¾1®lÛIÛ:› fÂxΔڒWö˜¢HDÏVGÔ%’™¨ã\ÀÒ63&«Y2{YLÈü¶n³÷‰í`[ï{ÉY3¾ö‘ÎÖl0's8a75³ïN&¸00o·»ž2iše#¬” X˜– ¬Êf0ÍÑÈë‘&’8¸ë-v¦Üþ&ë$ ‰¤IÆ6Ù@†²’i“H®šl&˜6é™÷ãIã?—’%"ËöYÙ‹2Nùן3çÛshùÞ6¿oµåòĈ~û}¾PÍí-»nwìÏVß¶´O¶•öšl¡ %’°5uº§o§"‡|°{#¾dÒt:<‘é7`zÐÿ/!“I> œxª™?¼ºLþE¬Yê…õÓtŸ¾ CfÛË·¸M°:·2Wóiîn!'Ÿ»œ°™ÄŸ •sdâizû¼dz1Øòè=- {ä¹e2™Äê„@™¤-íšI.†Þ#¬ÞR\]7bš`F8då‘":æìšS67wôó7YÑ·ÓvnÙtIAÙs‰,/\²mIïà\zhùmï†é#Ni ^³¡¼Ç@ûc²žTÜahö¼ÔkÂŒ×.Ž¿ÙÑ5ˆÇñÛ8I/?ÇZoÆ\ 20Á×n߯v»˜’ÃBÕÌ”îrHÏœOäN=>¹Œ @“ÇæºðYÛ”@€°,p·u£ˆ‹xÒ¬d¤ém`C~zØï·GÎmdüçWÄk)†úéšH”s6¸‘2$‘ XS_ 2ô­©À€ëñ¼Î‡!#Ve%êØšDÓÈÏÑãG™ô™I&Ã=ë–øƒFÊbJ8|‹ü?–xþ>ߪ¿«Â0ß‘/²1D¹‰iš± È­+Uû×;+j„×U‹ïÄ9Ü¡çVv¦\ ¢ªÎ )É,…’%M ×ÊyªZZù¹· &F–p“¯P‘ZõÑsºùß‚D¶P)Kt–,öÛˆÌò>©ú¯?’ Šù¥Jiª)R” ()JZŠiif€ª)ªb‰ADüáýßûÿÎÿ+!ü¿æÿÄÑþ¯ô¿±üÿê ?¥ÿ²ó€ˆVd?ÄßÄÄ­}f–ÏþQÎcu™îäÄ+Î(¿9; êùÂ;¢ÁAX4Y`&¶üm³ó:²c”ŸE^£xÓ£¸ÇÊÿtP °Ç$@£—4Üê±ÿËÚâ%¬N•QCÇ>/9àý”Tj÷RЭÑ`kZÊš®§a{˜Û'ú³¹”k%šÅà*MPÆ3º5¥Pd/@ëëÀǃˆêŒÓS1ÓRzCÓ)E¢° Ký½l‰ÔÐLiÖ+Ìk¥‚°äŠci3y!î¥aÈ8Q”|ÉúÛ¿ÃCiˆ¥ß/ƒGöâA½Á–{¨E§[‘õ¦ýÊS¹œ=ÛÊݦ_yç{l¦ª­Ûäöϯ%èt'mØY£&à˜ÄyÆIÁÌý”¡Óä[$p$I“D¼ÅúÝ‚ê[¾´§³9lòH›íPd¡q±!¨ÔÇË{C ­ÆCܱq‹"—T3dõämîœ%ÂîY9Rª ]7ueîçŠrÐN•Æ•¾›P åeÒ*ìm Þâoº½Uìj½ž%,jô[Ó{úö^ž^v œ‰¹l¥¤‡.´@œ3oR)N²$£rTH@/„¹Ü I`õ%u;õÓ¨3TÊRh¦Æt¶vf~Ÿ(Ü—žw¸ òJ³A>–.ûªôjÃWéµÍÜô6Že¯µùNæYÓ"N¾6ÒÝ1¦!˜ì>Æ; '.©—6~Á¹ò8ºÜr±™ˆ Ü§jçž¡bÁßÙï\¹Ùç_¯.û.Gw¼¯6"bWwÑoHd+œâ¹Ï‹k¹Ž¢ãk–ÅF2Åà¨&'€p*T[Šç|èoâ8X{næ#Ü?:ž9•PHMÜ ù Õvÿ¹jœFlTL'ÁBO7ò³„K¯ºê"Üò¥ßÜNkŽ]?i=ÏÎׯzûâ÷©ë¢¼K-”=¶öì‹›\¢•íLÀP¬É‰®–MºAŠTHãÉzÔúSÕ,`Qƒ)ÑkB½Íý¹kÖ6ßÅŒh©`šñ–øB1·xÒ°C6ïŽÕh&¤º–Ć6J!ãö^Ž7¸NÛ‡µ@ä….ŠÒq ¾h£Ê/1kUûõ¸N‹ÆQny’zÈ X®®²ä+_vÝVZ‚ËØë:¿5£˜×·7è*b\9ZEw™ØÂ¸öŸ138W”5›H§PÐÝyK\Ú|'5¨è 6$Ù¸ÜÅlîƒ' ÇògÂöõʦúÝwŒWy\&øŠÉcöé5ºÎËo9&ì¬(ݱ?¥ü¶-"B‹—„B‚3O…hV6Ê—ZÖÒ¨:óh­ñk%âR•Æ@C³Bó½pü¦Qj]†©šã¸‰¥r¼°(ÆZîaЖ‘“^ B!Áàð=6Àx1N9¬}Ì+L@êÀEwçfƒ3—¤!9О šÚS½…#/ò¥À—°ô¨t@ÆÙ2Ç>ÀÑ#®9 û£Æ5¸k¡í2 Sfåñã÷â{óÖ¼£Ô뇻µ#ru¶·y¹ûËéùHTÖî¹Ão}]Î'ªÛR•º$­Fi"r”’rbFK¼!ÚlÂ6ƒ>^ý%±|¥JŒcÈO>ZM‘‡ÙÐåZ@ãÃÉZ›6Úö|ÈÈú8W3™ÓΣ8ª×Å1´©’Hù³œóËû>FÒ*ù.Þ¿¯“Öxs¼3«…ÓX;cŠÛá:;UY¨Û&•f²Z˜‘<&Ä}f±|6ë–^$µ¾·W"¹§Ë˜€¯q νsÍ…¥ÖÐî<x&6Ž#²Ãô!xWépiŒ 8‚ð|»ð7LªM;0&Ñd{c?Ä.,š5ј,‹¨´OEÂ2\ ùëF²,‡k¥ÈÄÖh††-aä–îL#¹°M–t]ˆJ߼ٺݎÄ@ânOdpv:5ÖuirZ¥«Õ˜›µG! µmmðY¥„›G]bÞ2ýÇx§«¬ÙÃã†ð”7Òûl&1k Ò ìú Os´bŽªá”c¯´ª¢¸=bø[ \¢öp; (½XãÖ7Q»%Ê×VA1#ÄÙ´9½åÊ¢i† ÂóÁSõ¼²«k( þ݃ iŸÆŠÿÈèIELp™ÝžÍÚ°3˜ õÜz³’z9W:`e¥>Ñ ç*s¤Å]Š A†ÂÙÀ÷«OC!g¡ÆB‰¥PIÌÑÃŽ¿"’¢ ¨}(\jî猯$CÝ“2Os%B•WD7Hìß0r'iݱ§QܲêRh· Q ˆ‰ºbã·G&ǹÆ}±âµ[`%Á‹Ýf›ªü¹U½örÆBγba@ŒXêߢ-Mgu8n´ÐŽb&pGf ¸ÀÀ!ÙUެ!Žé¬¢iÑsˆ+ö{R¶å+ˆ\>áCVÓü³Úg1ôRçEä%_£DâŠöB÷ß.Å=° ¨qä¥^–y'¦²ü”%€ç¼5´ocÂHvÃÔÞYG”&þ¤´¸ 0w?(#—ªä^B Lr?ÉBdãâ:·(òìôØRBïv•ÛŠ<‡ÎF$—0û®S0¡’Y<=r¡çµB€•Bd" ’›R<8(IŠÓ¼¤~é£8#;Ý×Y&3“Ë™5Lh¸ÄJðÜÑiGuÁ^ ^%(.ƆlÖ®úK£ ÞBÄ#[Á§p^ÍkI•„5µ›9€¿ž£ƒ¢Î´Ùov!æ·ÆâÒèTſtas«xWZw{5ÕLÖ#»¾Å_»ºËj†0|³YÈN ‚Ä$DÅEÎÊ0örCsfU"—á®êâËlEÈM¯6IÛêùåû€´F¡KyÂŒS0,¸òa QÉ‹ó™ÊX]œåŸgðÜR`¦ôaJªéÒ)?WCµ¯‘C©ËyQ5ãÒŒ3Ýaˆ”Hî9 ád°Ñj{±S¸R0›K›9!"Œ3ˆÑÝX`ˆÏ-³‡l›xm-a±FVÏKÜPÞt3e;Y• Òš¸Äl`¦É6NŽ»ºU€éˆ¡L¨Ø Š”Œ$Ôã!Ó°¥XMPíKŽIÔ4ËZÆ—@t87FQCa•²Nù˜µî ¶®-²x(/³§ëÌX¬(PŠšuÕŠÑcgÉ‚•îôñ‚\ãT$2/Ú›(8e¬Ì™s½Ó»ÙDiL°ÕÉÈhÄþ‡[§©gš¹<±»iS³Ôd~ì¨X/-b;5~àÓ²|jÊ>:uâ €‚ÌøêeÓP,jtÑhd¤”ãé­ü‘¸Õ£íö÷›k–¹ÄäöëŽZ …zæ“4áƒÎ„9Û‚g•ï·7³òÊY$;>(üw(¼ƒi®©¦€«ø5âìBDŽ‚P*½‘tªÏ’pA¢ ‹Q4+Ȥ@öv2}H"x¡jA7!r±™° Íe'rð§<œU†×2‰Eꌫ=±r=ªU‚°$ðJ=#èIŸZ‚éÜ!C˜Ý¬lb8àR>ئ‚S¢®“Ñ BF5Ÿ2åOâaÙ½íX{÷`Ëዹ£”F´Å¤Èp à¨Fpý.¬VA™øêê ž ûNrç`"qÂÚ•s1»"á ’îm¤ `+Iˆ›Ê)¤è‰iŒ%Œ5º:a1u±Ä¶Œ$Ù\ !z©<±ØºIB%?Ò3C'0ðIJû¬5=±Ãû¦˜6£#†PžQ!üž¥„^ÂJŒ~yf_ðd}^rO_”˱fR !’ŽØò^«&ïƒrÅ×ÌÙàÀä-!6öAÃW´ˆX,@þËà äìóå{žÈþß6(e óœ|rI¨B8Häv» ?Íí;8üƒóãZÕµá?ËsN³6@­FwÑ5ôEÑb¥•¬tCú“íT`Ö.ckÅ÷ˆeî=mXVVöC æf_½º£$PEln ÁÔj¯ò™A4¹ ·\çëb*_Cv²‹‰˜‹\A.×tAüJc 2pÍ,RiûbN ìÔË‚Ê~ºâÄmá (&]m²m– L¶f^¶–kOê>Ùˆÿ>ôG7ÏÖ“«®G ‘HŠ¥•–¸‘Ò¸8‚ɽ,€­)¤šÁML™H çxHçjˆ2#î )˜-x|¡ ¡Þ ¾’ ±bäöXZ%"™‚¿r€jÎìmá ¨Ø(¦è~ÅSÕ´¦>m><£Ÿ¤H±'‹¹Ýmúü4¦á¬0£Þ_„&ºùejT,Xô··2Ù^÷”5É3];·øbä<™0àœ+pKÉ`¢‘‰Ñ{™²ë A\9LFÆm¢T8Z¤\=Y­*År@†ÓdY'µÃ–‰5ÒÖ6&G¦çBc¦˜Õ•2z§Zv™šú 1xÔ! ³AÀÄ‹´ãÉJí¸ÚVz¦…,bl{ÞÅËl¸‰Q3µÝíS$ëÏ:Ä5Du‘¸9ž‡.È•NéÌ+8Fç1#w™vüE’?&$uhÌ„‹ÿ˜§7 †g5 Ë|Sj!Ð…™Of(±ó{qÔZ©©H’èBhÖba•eƒ3 .LÊ‹ˆŸ³Ñü'¨×Á`;P,ZL¯RÈ¡l‹«çŒàà»J4<Œ4†ðâÉ(†6ƒõ,‚uꕊä ÒÁE@€“#Ë¡›}É0Ì:^™æó•“µÂKFeò?PÄœ0 ’yW4ÍZE%Å‹´´zpf8U&êeŸn« â“gì¹Ò”ÝmšÙ²[ÜoAÕV cn–içÖ“´žAlbµF¦Ö5Pc.»ÚŽ ïâÕÐå!”Ë.e³ƒ‰YÛR‹”ªâÂns"EõEöG'¤‡rÝV±ŸIl{Nl³^|a·c3.A Ò \P‡œª°u¨œ‹C¦÷ÁŒÙ²eH–p‘"‰ŒŒtþœŽ„ì“Ñ»ÌR%˜ëÀt J£(ð f8,ók(žca‹f ]r÷¥{ÎÖZ•Ú^D– N‰&+ÂÐC·¡ÝÜ€¦ c'œL´(ñtGÚàm{ȪRj¦`Ånè-o¬Q—·Úˆú!¥¡»\ÔJ%Â;]Ù€†Ç"rÆ P·]¹dø©OnñtÆ*ÂV°5·ÓF/ U^\ÎÀõ‹£R^ôÒ.;² quMlÔçXK\¼µ³Ý¶͇]ƼÓUPÙ þƒ~…¼ £·,f µÍ(È)AÕ@#€‚f+©‚7bŽqW‚6!+Ì›BÎ$€Pƒá>ìmä×¥Yj 7y_O»b[¹Í`mæ{AªSÙŒ§0Ý<™±žþIF47Oq%7…[•èsR²¿°¯„$‡â0MÑ·–höÍ ¥2‹¬›0GÞvWa  °\•¬µœb¶ R…&‡"›ºÄ«:.VÖÅÅ.÷•¡Ä ´%âV%Idb±ôKE¢_Nc1—3êyrN£G¢P[´!ìø›v Ò•¸#Þ#д½íÐ7‘p²B$00÷k²¸ZÏ €ìV›Bؽ’çw|ŠÁOsxãê&ümq~‡‘IÙ’1Ò¦ç©AI¸øÓ‰Ñ¶¹km'â4.µZV£¦G=>"Á´A—”17cÐÍô÷‹3•ñ†²°5ñsj9À/̵ÆÀ9PçD–Û­nÔìÇ}•X¨"帱.-¯˜ @eÌ/8„öiÊÀËo¢ÉzL3Å*zÁ<¢;É•ÊUPu†x»-„Ûc¨JôÌZÄW äö4Àö)T#Tb\ê6J&Yx2MÞs’ȹWeíoÀæ)©JÊÁ×¥S(„a‡BR£‡ =PåL0t^mȸF mº,M ]ý©B¸ôwx÷1 ƒ¹é»¹Ÿd£>Ë]Ïx~sb¹myXòžÝݬéCcU]”QŸá™Ÿ^û¥íOoº|&°Šï¦ø™‘å$*M;¶VJÖÕ*$û¼SLjµîüX®lïßñÚÛ‘ÇpÚu%sÒ܈>ïSÓm#×Yí0gó<ŒÀL(ÊyW|qáfs õ¦Õ]ŒvÐ3%ÇžOœ½¯_oi4Ç·oO‘©áÍÔƒ®yi3ÍÍ.]¢’{+JŸ7§[–÷w•‹ÊQKµê’8žF9t"í1#U¹7ŸV(¶«È¯+Ì›Âè>lYXD Ðû Ì®ãö|x¼Jë9œ<ùÍ(?–ÁþO}¬Ú/Ü\‹¢“ ã>tŒ›&Ç)ØG·öФò¨cÐûµé5ìÎëf$柛æ¾á‚r=r²¡±G}[r°zOdØ|þê:-Ò#Ñ:jGqZ–áÁ66mÚ-+]•GŠü5ìcAf”VTgÆ"~ݽ• ¤÷ˆ/ˆ;é,“!õ¼wÞƒ=$Çï`ÿlx„'Èãø<Ø;_@^%/â„ (%øö@ÄJ‚‰:Ê“ (ï¨\E·w¹&1cÍHÈàŠôàm›ÓärC¨•Äsˆ$\YÑ4âyâÄý*ªç¾w5 R”µ —Ðk¥ÆbÜ·5Ûßr­J÷‘•7û¸^³íJ‰Ú<ÜwRöÈë°û¬{‡…/­fïVαÇGrB£¶(Cãç?¥„9r’ fpˆoÇ,«Þz88(Èóɶ&/$k`<µ/Ýþ±d¥.¾ ªÆ Qƒz~H„á,Ì&Úì¥e&4äè{ö籬>¥{ã/Jo6¤ñ;äÂ5¢¿*ÀmTz7ޱÇ4¨Ï•±†k.§Aêm邚ÔíS­ ¾ `±²ÙzäÞ5»L]®ó•r2â Md)ð1Œ/cîKqŒ^q[h»Ÿ^>£õÄ67¥r<¤#Çv)ûœfÀ¦Ä.DVT ئIŸ¨ÈÚˆûízòdîù´{#Òå6Ä$=|Ç8É_±¾¯„Ùƒ›Ø•)̉>ÚÄ>œÖ¼N@IìW-å# lÄ`[L'¯ s\çPÖyWÊ8›½ k¡å-ζ/ºÑ(´ê†wœ&ÇÕô%¸ã“ï;Šò¾:óÏj~’˱Ââ-?@ž‹´Ý8MS_;iQS¡ŒîQ“DÇÃ>žm°°!råIÄwsïg™s|Ä9¡íä·T˜åÉÎ7»^n0³…`ÃgLP㼞Õl¥Þ"5÷Šù±Þ¥»Ç¹èŒå:öÕD%hßczÑmw­ãÄû#ˆK†`Hmá r±”¹j’¹'#nM^,§4J¸ž-øÇ=&§5¾œžºš3ö×µnž«ï4ðÞ£a!¶êõóß²‡ht*ÇqÆn°d»}S˜¦ ¹áL$$‡W»ž‘`¶žR(›@k9\$â3<«ZP]O«¸gÑ™òŒzÁ\uˆé;ç Ò°'¶R·4=gɩڅ·…øG ±Á6ü(8Gg|›Õ+Ù´Jm z‘,CÉ]qmCÝXh^ͼ™êá æ ´ì#ш¾³> /v„£ +¡ÛÇ’Ú½$¯Fs±Øè°òËC =²éŠ,ŒàyÛc $™ÞífhWS¦ ,£¥‚ê§×+±¼7$<Òý ’ÛI¨Û/ˆ¯Ùø©½ç—ô¹!ÓOÛŸ"˯wµ´ànÀÅšl¯)ÆOkNrdé´ÎçIZâVÙmlÉä¤ã'¶^:ƒÖgÌį¾1-£J"uÝ(¡½V¶ßVuáꪣãߎÞM½;ã9Y^‡­‘|­ñv d¬oƒ•âGfÔb£Œ^÷½Bf¸˜G }GÐG¹æoÈ8«#ĶtÙÎFãäpù<ïÝ écÉŽ*pkòÐMC\‡CØÝp±£’Â.$˺ˆ°Î“Yûi_D-ÜeìÎÐ )ß\h t)…8Ý¿C¼’GJm®}›îÛ³^Ԩĕ ³ƒž'å+4¨v-A7íæRš6.>Ob ðx¼P% ¦d}RÅ®ÞBº+ÜâZ¾,޶÷²¤µ#}λì-FzŽ}³Õ€”d±Š~©þí¸»õ)'_{z¢INkW¾c„´o2¸p2{_U®vbkãÓÏ‘™ã¾ðI!R=½ó)É6B\ö÷®4?jöŒSBK«GyèΩBœçÒ½<¶{W†FDmom3E:Ak7xÕ†jµ±j’”Ìl.—ööÅqΦ`3lmÝ3‹žä tÖ1"pÔÆ¼Äa¢Z†gDó,êpÖpÙ…\Úf}ÃŽT¥á… UÅí·¢í­iT±jA½Z‘±ÙûÈ„”­Iªäf•q«î½˜ÝåIã–ÖìÆá0¦ØÂy ËÂ%I¦É(-v™þ¶5L›Åâíø[3äfжÁ4HX†×nÜõkfBêrw‚´¾qÄ$`¨Ž¦£Zåõªˆù.ûÙnVIœÀn©jÅ]kÛdí–Së–ß[»wl`߬0f—÷‘'YÌ"%Ó“ $îÞ§$…ªQÈsZÔ-MדäÕæÉìj‘ÓShcðAf–~Ç›øf c5Fl}žzÖ¦ P³,a­vØê` JXï÷+OXá…HÔà 8.êë†Õìf/¦ÞV_““p-Ær¦‘«+êGLçò†Uâ%V“1vîšÍºòÏ{q‹3›'…xI+Bõ¨ðy$lHú¹¥B˜-«3ñ¢ŽÏ{=r]àÊEk‚;OXÛ5{éûÅÌõU* _–ö4ÛLUn/¬] }Oyx ò²š9ù›€OmJ¸ —ãuÖËØYמØÞÕ Îî“%'uß§[Ǹ¾qX%»¾ˆ)W}?IÞ³S=³Ê ¨ p`"?ÞíÔ•…¬•P&6’5ä,z­ṅI¢½ô¦&Yo–g㙵Aš‹GÂ2xE¤C‚…Œ¥amÅv!A8ša~²sy X¿se†KøÏ8´Šè$Hq7XD&ö²Žði²Ø£wa)eC¼ýç4¾ÆɱQ«š††‚1{|=MÒ)4@áŒÄ@ad'°\Ø•ŒÃ¢‚®¢¢Vâú¬‹…"×^ã×Ö½ÕosV3+"Å[Ȭ7×KùdÞ25WèÓØ Y‚…C—GòuadÉÆ˜¶%a¾3@‚.!—u°]ÎÝ„’ðo6 ±À¢à¼°»Î£-Ä#¢›gŠWH ³ØÜÛ±ížéAññpêì`= ‡cúößëIƒÑ¦Éõ<Ê}RÉõ¾…š†ÆPä]ÙοQ~;µ+ŠÜäú‘Œ Ú®ê=°æ8›g#ŠÅL9>¹a†Óů¿á7æê 1íÄ’‘œÒ…cµy<Ù¤S.ǤѿVCViòù¢s>ö]Ìz ?H:~@wî&ö½ËØ¡¿#.Œyœ¸$™®âTy3f¤ž® `Y„n¬bl,‚J'„2ñ¿_ VEëuh$@N£x-›Ñ}Táˆp-ÒÍøä“Wx7Ëäí킘9§èiql‘()o»‹ûÞ†‹ ]Æò;8SÎN1ÒÜàSð’{²¾â@ì`w4תóY¦y˜xëZ_E­Nt)Å?«59bÄ{Mû {I§PªŠŒОìmåÃTf#Š$¡è"à7sEq%#E1“†¬Ÿš9ªÄÛÜ`ØFªÑØÍX·dœ—0[§s^Ku¯½Iöšª]¨'>I€ºw©î݆-ìν´çW(ŽßÈl°ÑÎìY‰öp îÙ¶dVË–.›,Q5®Å 4•}Ðo’pP634)yOˆÃAýf2žÁ-B$ àzÀoŒæ r>Clžò*ì¬H]È}Nûãøì‰·„÷X´êÖX¢sáß5/k }b.ú5Æa¿G7‘:Ll"åëQ«•a¦Åt2]7ˆ1yžŒ6"×`„ñ‘LxV§L )óòë›Nåýe±D¦;+ —:·$S§Å°¡NždðÝÖL·ê>ÜÂÏ®OÒ–#cœr[C½Tõ4*K¼‚·I"U¯§ t+ÌZ£N;iL'ŒÝÑÆ¨þ•OuâbX¡ÛXÊ™BÉK!OÍËž/ã!+·GWëå’ï ]iINj}ºTl+ëBx½¨âÚàýH¸Øn°˜ÛI£´ëiW×­ÎDzy÷µ«µï±ïvnùát˜ïÖCÑ/`çèÖÍßT¢7çZËŒ‹yõM§ÀJ3*NwÒ ãDm¤$bÝÔ!îõ-µìY˜æë¹/T0І®}Ð÷1‘¤ý¢N³”o­„•q0T•ÔžøœmTäi…ç½ÈÐÓ¶§p±=¨$Ϭ"OAÃP½½ Ìq„©ágÊ“Eé\ÃO9˱ã¥ç÷ Gœ|†!|x.¦så:aÊóLòj¾†íÅÃ%ÇHoëcÛîok„-“,0À3c6ɵbõÆ-˜ãžÜ” ãH}ÕçA½Ö%þî0b5 y¶°ò¹Pœ­U”ô’ŸÎCg\¬Fh}XñT {Jáy¸x³Wvì‹ BC'k Húᯬb>nü.Aéõv ¹CÐ}ïojFÚ¨F è»Ìž‘ªlhœæ¤ ’ßëò[‡ô6k7´èAżà¢|[t xÝPîíaÀ@?5ÞÉ2!z4kžwÔ‹ùìJFwöà2c‘®½•­€$ûmdE¹7©¿„•Š=׈¶cY´„à=O!×V¶µo®ø41í>~(ÈèõœßyI‰äuZftǧ±q=äþjÛÆP.!&¨U`Ì£…wäzSíü;´º=脱rê%ë? ZJØ£XF=^tçÚ(äšÓP`<(ŽGËé[M[B¥^TÆ{ZçØ{ $â®c_EéØ ÞPmÃÆgî° b=Ëáïû–ÅØÙƒî—^ņpàçZD"ÜÖQgraI+u{p°Ij2Ðs„u«¥b;s¶Ìw³Äy—¿´Ú•›+,Ô<àÆ1åyX ç2ýÕïdl|7äÀûfD!òXñ³:ÃæÔLåJ¢ãfÂAy‰œžvK±Îd½ÔÄP 1§S@A¬Õ‘:õ-ç 4%åC€ajiÈ¿‚Ã+Ó®üŧFï:Б°ð õFWÌ‹A+[×™Î]É'ù³ÞæL"L2Ô¢Î]Hæ§Òµ§¡èŽ!tÑĘ œžMµ¼e»Þº«EÊéåÒwÙÌ~[•krTÅv.#ƒ¢ÚÔ€BÏ‘›«ìCìMˆÓw™NfîóíwªÝTwc Ðù(³ÚZzÜôÀ.Ã`‹yt/8Ö¼Þî[«¼rÄŸyz·NÖͽ·Ko›C€”p‡¸1’ #sÃÚs¾L-E+SÙíoAYrn»´pZâ)4ØäÊs‘j†4`ÛÔÊ|¥²Þ'½m­±Ù¸Ø£Ç3† å.\F>0c½#Ì_Œ#¹y3ì«b®å|ÂÊIs‹_ì L75I‹äþ¿—ç…ö.b÷6äíI6Ê¿¡.ï¯3µ ÕîrÈœ‰§¶ z8¿· ^È„H6ƒošÔqš‡tæ¹#®'ˆŽ‡Eqác`ÔlŸîæ²½kt:¼:«Üls°ÀYP1´¼0¾ûú8R¼¿b%B\p«o¡Ziq#f°z`¥Sˆ™y+ b.´‘Þî¯ÌK'sàîc ½¦ãJà÷e Œä,7 y¢ûE/oCgÞ…«1 Ú`awzOgZ9´uˆô)™4g"2‡GÄ®þÅP²¼Ô¹Yšî÷­U=©Z>Ž%[{`y õ §™½;:³JáœI73ØV}’ÊÚ6ØD%µvêqRD ’¨ïp5lí&'T=ZV|¡ª+n¼uÊèñ·+Qëhµaº­nt(Ä]JoyèÚ´öêÁªàe‚Ñ0‹i ã;?ìžgcžâCœVÖ_t–’3LtŒžhÚ™ƒã&Ý®B–ºÐI‹šx½¡,áD²ïG1Å)³|,3o_ª¢ ©!$ö¨!4|ÌÖoÊ}T÷t8Ѽûì£Msn-FúØ5e2•'ÜtãæÜ¡}©r(W©Îž±rO¼f²MÖ“Ö$°Dóܡת@B¥F+g~¥qNë·«L öœ´2¶N+ƒ·)æŽË•î±l€ã^:nÞbO¢ÄœñŠ"è]7£¯sVâ…BÖi”§š6/˜HzG£+A޲{ι&W‹,ž›`.¯Òê¬6&}yeA©Ä­>]!?ØjˆrˆЃ¸Ì§‹E3uvò^DtEÁU-“0eP p ‚.By$HÙ¶[•Ë jSp¾Hàôp تƒÇ¥fV£ 5dÕã=yæÑÎÃjã¼ë]`!/ÚwÞ‡?bÓ/ÜœÓiÓ¨âÆé`‚ÐcMAÐxÚ”» f3]·Ëxz+‘œðïn¸HΖ¤°ÆrIöSaëtåœÉ3žØn%Ò÷ h^¡ÅÇvÇ`Õ2€VÓ@)4rR"E×= ÎýÅ_H³¬[Å`õ {äþ’êˆÙ&oëq;0´M°tZ‡Ü<ØŠ}2¼‰ÛÝÜêXvÒ»›r sæ3ÞÞµ„î¦Tl+©|¤A„ŒÞVèí‘ÈÃø Z¢ß¯Öò³õ§ÝZ23påN'†â @Ap®+jûËœ[7é2•¥Ùî;ƒîxZ_yÁ ‡èšFÜÏw[¶1¦ \lm†îÀ¨N?6ýñÂQáÄ/»\ÕÁÁ˜K¯RÉkÜäE,æ¦H_ Ã-‡b‚ÐÀͺÊk{ïXÈâQpBŸ£`ñY{²PtþcÜ·±Š†¨â®È¬ƒç› R†·ÝH•ÏtpSux_$Cb™Eôe»w2‰vqWDñêO5èQ]ó]u³õ-¾<81WjP£ïI²pµ.\`$’¾MœZf·µ°š¢8±Áî.,Ǭä}B/¥èÛé†ã«ÖDóˆ„ón(Py Üå;Žf»wƒxäQæíÒýûZT'¹¡Æ>6ê´oIÙUåoŒ06ÃêËrŒñ؇ê ñ•5b‹‚šQרÂÛ k‡¢®v;’®ùh´C½Êr)eÉžýZˆ…€Ùư,²W<ë²®XI«ë}’–É·V¸°Ö6«ão©‹oãŽ[^u¸(xøOµOÄ·IöpÆAwb÷MÝÈ0É9BðÕ­Ìy; Ž6PÉ5L’=Ðl,ÜáºJw$\éµ2cK‡'ëç â5:Ž´w°F›Ï·h_°F: n!VñeëËž­ ‹‘·LQz¦GÄU\¡ÌÙ‰vf_ä™QÉ–¾dÛõ=« Õ÷Õc &a_2J@5»–d‡éf¸nùt½ì #+"õtû‘¨}"÷óºÝfdwIŒuŸ§¬T‰³÷ËG12–|Ÿ®XÑö€ö–cÇâj¢5ÃÛ)öR¸Rc•;ZµÜõ|iï®0°bUF’u» >‘! W­¾*)j·Jeο½¢ö†Ý™(DqBÙ+Ùú‰9lgcâé”e;ÝeyûBµJò%•»®.ÞÄçµ\×ÜñIw%«OsÝ LÈN€´C²úôÚZïÁ£v¶)Ì!аÒ2x]Þ¼¡á¾~̾žá™WHq>m¬Û6’™&"^ÊÖf›FW@Á†‡€+™Æ>ÜìnÚì©áÉŒêðâ´œÝë§{±cÒë"²µÍ–M2Qæ¯"©ÈOjhøä³»ææ0ƒž-¾D) ºî[­ûS0’Ž5˜NA¬z´Mìà|Üy¨.LyXw\@Ä×°<´‘cñZOa­¯:Tta—‡ÉXºú²E«®J—>=Ñáß»Ò,k}²_>4¢uŶ7ÌΖ=¼•ýM¼Þ¿«œêÛb$aÒh¬¶ ²HJ;#ÈÉ4K>°4ðî’›…¬_áf‚vUç8´—¼1Å[OÚ‡£éïÉšb„Þ÷·åÓ4Úñ]NÁä.Ï* ‘¶„а+q|´7Ðàc7¼I棌Η.)ŒBX¦}ÓÞ1Pí Y/©˜†lÌw9ØîËlž±2ñhô{Ãû½yÃsÉ ¥ÑÆ"¬D„ÓŠó@ c•¸þôbA~p'Üs‘ ¿œ“š£]0på›·S­oîy~µ±¶ãœ!~¦}ÚÏ~?Ò‡ín{‹?E´já6 *¹†÷—¶Ɇ1ÀÁeøf|ïd$9öWR÷§½/ªNsñò9””·zê©zã½Q vUžÈ‚üt¾´¯ö º/°ÒUÞ^xý‘P^@i–˜Ï [Ç[_­hŇØo ÏQ1™sGHc›%9c\£XÊ<¿XòÓIGTë©ÎbªÙJÞÀGØÄmͧ¼+óNT³6H ñ–Ö|Œ+II¬yæO[g¹5Â>œ7rÜ^É^òÇqj´ÑbñÛÒ[mÓ –À3RàæT|WÛ·¦!ß3“Ñ#Xä™KíŠ5·=*`Ùß/Ú´ú ©ÐX`<ç«hñ!ÎdžÄ)Š].™æ‹lS® ÍCjga‚øõ¸m)f&”3 ÍëÍM8ŠÇ1ÓCÈè ŸG[—|Ñš¸øÛâ÷íóçŽ=- z9ÏÔ4ªnV¤Â3¶Ê0…'nàñg@1›`˜ýB@²é³m<ýDÅM›h4_šCèPÜaUn#;rþ5 Ž›—}mÜû/SЇ¥tŠ$µèuGsÌàQÌÈ®E(7šHíšJí0‚fKonÙ½€öšs?wÅŸ7{ÁÄ/M]¥Øy6m“Ç+*ö¾LÖšæky5$ºž6Ú„N‚k!µ¯×üÃ7Õ° ¶Ù<ªÌ*ó”lô^Öxy“ƒ—`™Ý%fõÍK¢Þíæ[P±îîD"±çY/¾Üã´Ùß\$ƒPIí‡N¤wn@c-w*Ægr]RW«Šl[+'InVÚÝ å$ž7ã•#ž¨Mî÷² Ÿœ§H<†ÇÜî§\:ûÏ“ß\¶/÷ÐòÙàKãUƒCÕæ§)ãW3¢Ù'ÊnÝõ É¢’w5ĵiÖ³‡wg®H'u?@;Ä#܉/„¬¤ÁEÕ¯Žl!–ö¯2+i1Û'sLÖe¼–õëGA^sgµ1[ñ½+#Þ¯G±Ñ¥š…ûÅI=ÎX+FžôF«~tyvNÔá¶ih\ûäA†Gzaˆ˜Þ\ÀéठßnÛ]:òÅ“Ú*fë“À“I½;ÓÜyJÕÆZހߢèžûö|ø/^ažúͽ¼ZÛìýÛßfðN‡„ŠƒÝ€‡œÞÏ…­qÇ”Z²¤Áù¹D㬖âÃA«hò,9¨Îh°ÄòíN{½r/LxW°-ÌnÞîÍÝ7‚ƒ¶·Èž¾Û-±€ß¡?@ÌÝO\YúôüÞŸJAéXÜ”€rˆ&ýŸÓQnÌìÐc¹æ>Îbkn¼½gA­Ç#ßbãT[Êö?Öåž/•á½$LRí9ÉíW‡ *>»äЧ—ÞçVïCå æ×#¦||ò^m’*·Wß('Þüt«sOëkc¸õk…ü(ñäwÜW¸5Pbw«-…tÈÐlï6l @¯ËÐRT!í¹ é[s)…Û !ÉmeTõ’cŠÇ’.ZùÈ<§¾emÜç%ß­ QOWÝÎPëutZÖÖA&¶™GÑŒâtܘ„¶ü¼ï¹6fœÔÜšï™Á˜µŸjÕy}¹2ð§²]lƒ?µ ìÖì¬Øœa5’® rÍû¿5*3`¾ýuÉr»¿9$ƒÎxü„¹ Mçi «¾¹$.’Ç1?þ5²J Þðeö—ˆç© '­¤+›T6¹÷z·¾?JïéëÅ­=Ú->gcYP=-wm¬ªË8K2y®û£–ÒèÀE к{„A'9æ7‰†Í•Ëbx;JçhÈôƒ½ÊæYóÃó¢NÊÙYl¾y‹5©EM%£k •â55²˜@(%)dõw­Üˆfüu¯U°7š@N…—¢‹yÔXÍ“{[ʯ3¹^åK^·žÔ29Î:Aá„X ƒÖ^ i1$÷ EeL¤qjzR+‘VüÒ‰RQÛvÍAõõ«ný~W,ÑÌ–6Ƹ)$Sšñý‡’ÔówPqøe|î|÷1"5<É{b-Žà°½zýXµVŒ‰|D¤ø&‹¯MÇ,Û÷pH¸P¯¡A€_v‡^ÔˆvÙO݈HÍO2}'U¸Å¤~ÏL µëyð¨T¯\ç3òt}ãb[ã?r†\¼òéK£0…n©óngš§†ŽÞæCYCˆK¹Þñr8äõÂÒ­}3*L ðš¬ç¾jo‘ãí)ÈHe*ѵH#SX ]{Zn¯¥®ûõ¼Ô î%·DcQæÀóµ÷‹5û9Þw£Û‰È×Vå°I‘âÞb{å;@t<Ò!ÏBóîÙBôQ÷6šÝ«yÛ¶06†As9¬S‚|Ü^ óZË{oúIŒKK°Õ#¡ Êü¹Eu7o GÏ{<Ç£”ïÙ߇xËU,ScÈlK³°Ï“ÜÖã¹úX®¶úŒŠµ‰2æ#tÒ¶ÌúÚÙË5i|}W¨ÒA mÿoIwô_M‰wa¯fû°Ü ”Ç»öÞ úÜ{màZÅ;O4@ñ=bxÙSoPÁ:Àc'ïCª©Åº]ÎÄÊ)”^Òì7ÞÆîÔm] tcP‚Ð…û£pæ}"Pמµ|Ïš¡*i8ÑèÞazÇH§˜ßf˜±AßuÖÅ 4”ý&u¸D&ùÓ¨Ï"|¸óÝx– CŒ¸û,°öÖÛóœ’-Ë r%"ºr”9k‹R?-ÁÊCšßt:Q`0"õm·BÖtÖÐ@ùšDé=OvŽ£ fgÚj½Å̪ÑãµÑ ÞìÝss‰¶W »ƒž{­…^õïo&µ ¸Þ¡B·u{¨„A\_Þ])f–=öCäcž¦žGκBž¶ÎìñîDA6«?#ÇŸ턞…ºÕú0ûÐÓé9›î« îœäqPj!S™ƒšSh yZÊ€òZ­—+wŠ5…ý"­f+A!ÃÞ“¡@S¬f§ZìU.#ú`Ô¹ C+÷n(¢Z›„ꇊßs´så¿d<{ØV¾÷N\sr·?šâãò_VÎ3[è1y’Kå†ù³_r/EÒ¯4Ô}ÙK7õ¯#’f¤<úG›wÔJÞvíy~ûµŽ©?yDöB2ާÔcaµ[Vsscà®ýáiÆ;²Ç¦öIËÁ㈖¾¶•ŽñÔCJ‡“a‘ûA …!èÖ~»*›f±PBã·{nõ°&W†'§8æùa M,-^Î]Ázïâ…®P€%à¼LY÷‘ ›¨•¬y”c¿cÍ>R~Æà‘bkŸ+V혔Ôíy°ž{zjäO¬^‰£¯=ÞVÈdË-<0ؾA‚µJÝòËëí—¨FÃ(ù “\Œ¬G3õùÖK*þ.±î¦I½Ñ[²Q3pöAd"°v¹TO3l·ä¬³ºösöus®c—iP,¹_ÊOžó•‹ û0Ú„Ôk×[â0–çX5 =‘E©>Î(óß9N÷Ôfû~¥¸ÇPö £áØYž †¶{miå$ÌïlóIá‹:Qư:Ö‘–’¼ ‡»î³ÌÏZv2ž~€=¡édåéGµ9¢ÛV¼"B7ÉÏe„5 _•Îͳ¼BŽs8[°ñŸ·˜òE!ÞJ„Éä=4øI‚gs¨u"+Û…q^Ó3Lr˜æï9‹×O^{ÀÄoëbÛ“#åÂÕõ3x9J¢3©ÐcˆÿU‰ªsàÝ!š)ÍAäžM¯½ .³¸$êÊØtN:ƒÈä”b´MÖ¸Ÿm(ËI?mÐ5ŽûŸ*¥;h+3ußnCõêØ`Á>ß1FúçËÓ°»/(·2Ïù±îÊIHÑm$½×³DJ9,ëÔg½}·»¤»û¢Êߢøcmªb~hIõɇG½îs{b~壎¸v2Ú{° W;µeì4æá$-_l±¨˜ûÉhqÊiBþ ¾.~Ïdbëdeê.禦0“ËmêrÉ;nãáT R3:ë‘Þ¢Ù×m¨ÃÙ•F"ÓUéדµk8&¥7d˜B3ØþE1Ä– wµ j{EC¾=«hó‹bȬ¹æ7õæ9YE©“÷6‹•'ÊÀ‘ïFô÷¼Kqq[׭ڥ̓a­MC0¼ö=Œväœ}VÀS™Hv¥xÉP£Õçg Ô^2¾ã”¬=º˜Í¢b±ͤµj±+CÎÚÛ³~€ [-ñªz\ÓWí!XZ=Ááo\sAÝÔ,yèë˜ÞxÛœ¹«sм°+©nœ†!²É¬åjáDM¯èñ.XÚgyi/²‡žƒ¿Q¯™îv®&Ÿ¹mô…i5«ÓyúÄ¡n#}P»@XWÒ³µÍ™<ò—65&¬¸ÉÝ›”j”¥Û1ÌëB8$~…Ö´¥mõÄnñ8̹* øŽð§Rð£Ø\Û: ,ˆÀ›V×FÜSßÂ_Säm^v‚_¥5àúRB€^7¤#|ÚÑr­AëǃbŽGW6+y#«õPJÛ•õ|œ+­Î†8s ˜Ž¬Q®º™²Ôi¬J[œh“˜¸@×¹iEu³ÖŒsŠeÖ\ž½‹ð,ô}Þ´–P æ²Áü–ÍN¶vàÞ €.{»'^zz%š+8Ê[µtïPÀÏ8öyÝ÷\B>’›Ï¯›Mæý¯!¥ûMâ¤5HTó«Âz P½­VÅ]Åæ4¹Ë±•ñíSø™e$÷\Ô›©cväzMÝð÷=Û5z)DŦi=g2µã=ný¨[yFä$Šhµ1JTµË’Æ ¡7ËÖ½ØG åñ8üˆ½éúÖåH¼YÝ­Ûk”ç¼JKÇìVý´EìA¹”0ýMèÁ÷⌄}~—‹¯§ —˜¡rf²èè`ó¦&º Â@ç´ß‘=§U×l[ÃsÔ{_¶XXšùŠq“ÄxQ¸.¦«(q=)ÉJ»8ºX#ª]¡Õ´yÝb›DPKŒòMé:Ü^bO•½¹Rjg¡ ¹à<­¡—¹ºÖ´ó9ÎJcb\‘N™JÕuœý«¬å*<ãÔê ¯^†Z¶GxÜÒíå¨w•^T.aÁçUç§DÏkë=­n’â;;=[Ý­µŽ¾wÈ¡¢³Œí¹…c{¼<Ì©.M9Ô%¥¢ÝÓ*FÓ­?9žG%Iº,uºèY›ei&™ÍñÙ=í °k)—„«"¿’þ]h†8·:…¼VL»¦eÇÃTATh%htœÖÝ5â……o)Žáy|× ºN³Ç|Óé/ñQk²åRT›ÑN²«vá®.´ ½-Hm´ûsÔC6Ý”%/¦PÔ~̉6eôм½^úÕ wä08WÀû>X,ùææt]ò’µW¡.ŒàGbZàÖ= ÜM¥&gP„{ƽßkó|z·„²*òˆ[òÅÃîÝÆ(R˜H;®hžÕ§‘f¡Ó˼(Sï±Å& +K+-Òú(Z]ï@¶ËÙ1$$ïoÁS]S•÷zT-ÉSßkjv¡ Tl8̱ˆA Wó%ê«0‰-‹sŠ­±ë$ ÙqTi®&|Õ`þ õ'ËÄ7‰¹ZÓ³¼ kÊ.½EÞþ˶Ü&BŠÓlu®û,E߸/€Íù§3ËÅi‚aè—#Ž$À$P×gVxçÇ3Æë«O<ç5zZ¢ ²œij‡9g1¡Úö”¡™ÚÝZû*AY_¸”æQìáiéçË‘õ7¯VxÇ\ šéMéKø¯¸A/0ÎrÓ@Å|½ÂÏ%Ä‹é‰h7ž©‘†ùéè˜;RöÄG‹Zc‚ƒW°!Œ®õÇkG+àq]Ê–W!åu¹ìé‹5(oÉUÂFûÓ†¨€«’9XMí+QiL//QãMãSªâ“èZ:ê)y(0@0yIg“¼x+Ö9µ¯ßäÕ/m}V£Ã0†g^˜uHZÂÙºöNÚ' 3î1E†¯¼,´ùõ¨b⺪ £ÆŸvZ¿ ެu’ªA,LPu«Èä³E-¹ë±±Ø}Ùy² ÌKï\x¯º%©º?lgºëN7ÏÛïuÌ@ù7;Òç¼V§ž²cq†K6‹š:h\7<ë;YE.A.Ø™ièâgÉ»mŠWví³)Üöä8¼ ÁÊþî'Û×'MòE%‡.ೞÛ}#ŸæÚç|`FÉgš;ù*ÆÚßyr#9K£Þ»Ú¾œm³…Ÿ\4h-r­qåø-U.ZóªT«R­ts°=’ÛÅ|«(¦ë€î°PÉO:•ç3„2–¾»™¸;ÙŸR¦Ùk³ñ°³ì)™夲f×#ïCrgYÞÒNÛÏ$\€OÏ–­ôø¹Û©R|ÎëʶfÁW '¼<“­p‚Ý|×—œiÓšhè>PkQ¼ò;4¦8™ÝñÒ’UÅnÛ¶¥à*>â•»­ì ¦ðz_õÀ–ˆÈ&µã‰[±»w>¿¦ô àF¼4œ"E›K*¸¤Ã•´ºÆ¥"óeŽaåÅdôñiõª„Wóí¨·Ó¦†<¨Vý§¢šº †õ>_)õ//¶ôCW°Us:¬ôK ˧P+Tps Q†4[å’={û屿ëuu½ÕXÛÙ­L'ݼçϸ©j”;?= î(žÆð¶ÇPò½ß/Â^¥*¼¹”Î×èÿ+´@ÐAƶç8Œ\‚b‡ •ofêR&׬Ж°r vØg‡úð€×‹å2 [›½‡aÝصՊê$>µ ßf~Ó½Ã×3ÖKš&™g÷ãœç–8mO4àmiº`=—óӛܦ¯hK¡HÒÕ‰Û…ù¸ªï‹úÚ<Ý·ˆwCNŽÔœaCµoµÎ=ÒpL¶{6óÑXÜd sbW#ZO±ŒÏ¦ªØˆŒŽvÖr÷=:ç4¥£«ì4”KbáY{¸Ó‹ôjÝ(Òë‰1Õžx!<ÓWå܃=¼ÄZl8+j ‡Þ‚7·^žNj<\+É)ƒ"v…Ñø—æ·ØÚ9Ï'Y—QV÷RÈÂVEt-@9gI™n™¸ggxl|ïÒ{øMêw k}A)ò­ÞTv3ñg˜ökÇ.ÈÕâwƒërêƒjõ5*Æt{ÛÛE- MœDqyÖ3`]‰kKvW[Z~ó±Uk:6:åz¦:Ëõ[ƒÛàí¾êV‹oؼëÈLF[‰‘—cZ×6ŒuÖ;³Î}ÎbË0[FÁ/0’àµ|ÀôQÏ~Fù¥Ôì!6¼¨ñ~æó–q TwŠxœõœû¯ÄbåÚS][Ú¾ßGi¯³ÁØq“ ºî{h(ÎZ¶x–ЫqQ9ó&­[Và}‹•´ëçw-b}JêõÁO¾|pV›jcQ1Ò¥G­®‚%ŠiH¢§sBÕ÷aµ±âõ¾]k\ÄN€Ràl·—›8ç´Ô¤‹ódâ¨MfâÌsiâ/xÎbJáM»¿Ø˜ê•Ö1š{vÈ/Lé#†z¬ËñŠ^›¼Uâ.|û{^/0´žk V»_r7ãˆÓ‰Ó¦Î^%hÌž7µ À`§…a·–2ùHafÂCO0ƒ´ì´ÛcÙ8ö¸—™d.×ö"*µ˜l"ËÒð‘óȃêØb­òS6ôE![Œ7ƒàãn¡Á¯|Ã] <egV@ƱdÖõjÓ&vR‘¯zo< ŽÄkR5Ñ”8ú4® ùç|¤žorzâÓFB;‘1É­¥²ÒN`ùížiÍ~Áò¦ïÁå.ç9¾ÊŒÄسƒ[U¬9M2{!‘Ÿy1_8Á¿ZïËt:Ü8õ­œ!¹Êß \á°&è{¿L:9µëí·­AÎ\š7c»>X©m¤”lNÊGº†o°žn7r®†»ÇM VØ5¡?F8é”lÅëø*~9ѧ×Rò/}ÉOl/ðmC»Ðt®{¸õóïÑM ú,=þZUj¿Ù¦ql¦)ÜYá«•Ã:Þw]gkǽT¦-&½#`)Æfþ)m<ž{ÐËåU|©-Žz¯7½8ùÊ’z×¥uiþbZ顯m…\©ßEÃhqN>3žäŧv”ÚOv tÉ×ÄoKŸBE(K€!­˜-+§.K.·–+ˆÝ%=*‰ŽÐò–cé^‰h˜ˆCB®tÉšŒꑚ»ÆysîÃ;Dô-­Ž©³užb¼(ß{–3 `–vžØ¼° êÇæàîTbž‡5аlçkc0Âvip¹oagßKxSÐðÙÓ¨º¦ü%¯?0~¤ÙüØgÌEËõ¹745pƒ³€kª;Šæå¬šj:.ú\žë­~†ÆT÷#Ú 1¥H­%¢4üÄa„¯`6‚Y×â±LßÀj¼™¾ÉP„à¥n@lü~µo°Áè.¹"ðßb¶¥ÌŽ4ã-¬0¤`GĶ&ÍÉçïJþÜÖ[ÜiãÄt,v2“}¤ aR1žÇ$»ZCk€†9Xò41;òýÅêÓ`õ¨dUýtÉÇ„wÌuãZŽ8E#ŠñFö–l«˜'±ÈXÞ±·¼+¸&d¹­•]–Šfæ)·;ô+¯–Ê@Õc\íspÞU»)§y²³]"Õ5›ß‹_'Ïp‰Ä®E:‘Ù(`÷àh†ü"©q#é'ú&¼º·DÕ…F/ ÄÕI§}^0„‹;÷-Þ·OEõmÖi_#×`Úà|]z¼Ùyéé@¤uYBÚÃq¬ [c‹´–x¿}Úê@¸]®cRÁòWæ‘m8}ÖÉ^¼¸ƒŒ ÌËFòÐv 3'giX)qì´ÇË òZ–Å0A ÷W´sŽ3ÝfÁ7Ó÷™‰bQáÂì÷Úh&ˆ6Å_EwÉ—k´¸s:BêÈe´ûUY¨´·ìãš~Âè-›½¦[ÒU™_=Hí%+O¦bôžÇ¡2XõTføú?;Që¾è{«ù#e¿¦"‘=aÓ*‰ÔÔèxGåŸK'únN‘ÃX…È:Ç%=þݳ†ÚÎ)„Ú݃æß»¦¨<í*’ÒkœdN‘Ñßo›·Àòaá«ro‹”;-™œåˆ$. ÜˆÚæ@‰ŒnÝî-¾ï(öàh&zåsènQ…5íc¹Ÿ3iL£ ¦w›cTDmÉѺͦõ¤êÞÎÎûÖJEì–¯zDÎo7¦hkç®â.>AçSÞΫ*“d8PøÒ×txšÞ£nmßq|\š\o:ë}ÈÁà’ïS)ÕǬŒÚ:|ë´ûÓîÃ\úWû?CT ×ÇT'{㉴¾|ÎÊ[~™[ì ‘¢Žàoô½o¾—vÁaïMî'}tM¢iæ> fyéq±8ânÉ£ ±á|ꯢ:Ö!è|ì Km ”·±n 9ÁÎÜΪ^ã³Äh7*p3‰gÞ[s:ï£|ó/Ö©92xQa^êúmÂìÖÝ'™>$ÞR@ÃJ½¡û®a,Ê£Ír5U'<øåµË)è°ÛðÎz¹©wDû4톳ƒ7SSs¶Ô„·dܹ8é®>–77`Æõ·¼Öï8úò:@ÓæuÌÂMÊ&£˜DðKÙ&. [¥€ç‹ '%!¶`É®cF7ç4KdÊ2ý8éà\Ò¡džo9·#ˆ×p®zéªìgÖÝ0{l®E5œƒ6y PÜÕŠzy‚wD´ƒÃ¬2„ GQЧGÍeƱԫdzšAúGwÅÆ˜µÓÇ’ÙhèIã‰ì°O/Ža€NgãîM2µŽ8[p¶È®=†ÕÒ1 l­Œ‡ ¡žù÷/.Ë|çZ¼«Û?i,Bt„À¯™w(HŠÏ…9C}ˆ#˜Ž¹Mªõ|uЦ¹Ps³p%FÚc®ŽiûB˜ f¬ý°u[(ÕTl Í4(ó{µ#ÍÚg*=i Ø£R¨Æµ:k°ÍJ··ãX©˜MC™†CmÏjÊ׌Fp;wž¡€çabÍHü(%µ½Šªññ5ô£ÇÊcvÂ燻N®óz’»|^¹…¢I|zÓÀÊ2ðXò]&wÛ”edjn1ÛHqgr~6>F>¸"Ùu®‹Ý‘¼b7»ÆÀzYaG¯·Ó¶ú±úÏu"húÄg=É̼U·[ž¥kÕ Ó©%äò¶EäÂ3E?y˜Kº´3”‰º,ï4›k^žã¼Éá`Stô“;9#Ñ»û‚Ð5QùCrŽdÎo¦ ‹nûÝÐT4=‹Ï’ZÛFøL 7*Cbw/‹ÊóQ| zÆÌYDÈ8û‘n³çë–†LU‰ ·&µ!b9 M¥œ­káÕ%n‚V¢¸~,ñy1™ ær”µnéÎóêè²7Á>‘zyµt¾.Úæ>ÖçÁóÇæF;z>`c}fžã ë1æY¡ƒ¢CÝësÖu<79ÊvAn“ HƒÃSgåï{7†áû]pê[;…̰ ¥ï!âMA÷Þö±åa¥•qø{—I–ý¸Î}º+ǃmv¨“Áú£'JÛS I`¦ÜÒ-ãÄcÇXή«Ù¹È^ŽeÕÅÆ-:0†¶·ik†q¹Däæ¶ÛszZ |ÕºA¼è«vÀÎëoŒèµ5 ôX@Çë]RPJãXy €p#/0ÿ]x(%eŸV׿¢«»Yz'l$¢ë[ê]> Ø¿-%ÞˆSd\Ö!a…ãèêþ„5Q÷{^@Ö“Í ¤Úԫηt0Î1ˆtOfuÅS0°ëy™C–‡ŽW¹Þ$¶Å¹îÄ£ÌÁkÝE·Ìô†Qö\0^”‚›åH!ޝy¤æ©¦Æ6¬í„œ%MŸw²ã36GäZé£áø3å÷jº‰ë/†±--uùØ8§Äòõ†¿WíY{{„±ƒ˜qm¹ àÁq¥šÆJ5a+ÚW–tv/W~Â;]1ìÀ×LÃ.S¬ X8ºzOžc¼q¢Ý|¯)ëI:´G—/j²ˆ8j MT>.H:^ºéûæ±è»ép‚¸²$õÊu»>Ž’wIæ-ݶh¬}0¢q@N˺À:=år_‹t¸?V€0x 6çÓÂóžýJÙN, ó4 ÐçŠçT«©žÌöäx½²Ú% c•ý~GC¸GÚ©±ì¾ ^þÛ§–NµT3 Ô[IûêÂã|£ÁöO9¡_±ðrÐ:îLüÝï&2‚^uòÛ ªÜŒ(ë7D0¸â>zÆáÝÞ¤hÑ>hC˜E'\ÁÑÆSƒ­f˜3òÐÌfhÒ¤ùµÖ|T¬A2yI½ÚÔµ9a‚À5!x%º~ÂÑ5~Þf¦—ÕôL ZêжÓlºŠÒ¾æøSªnÑΩ'$Ç7©®°Ei”®B Vá˜ù8[Äa Μ¢ ­å¤qp‡Ç†ôàìokUK¥Aν©(ˆ g›¿HcÑoßZ¸yrŒkYF¦®ÎÓšÓÚŸBëUðÞ@5 60±²ú ŠXF¤EwÀëçŸ9g‘àöòw¶£vò{M66‘°álòˆú÷ižŠéÊÒ©é鹨!ã”& ÉD .ažb~Qé ô´GóÈ[\§®Hâ,X-±f`ŠÛ>|4n¬DGO|RâÇçj½Ü¬·»+¥€›â2!f QÍüëê`ëD]§·\ǵiÀ§q®x>Þk~߹曹ÕLǹDû¬vè#‚³‘lÌ* = ´Ç»aM˜uÕE]f)¼èl[ƒ¤â{ÆH? Y+7Õ­6<áõ8˜ÅªÒ–Ôé·ž¯yðú.á”DÅl(†¼ê¶É¼]+‹‘ÏœíÄ;Çéµ%{Ê”ÏyyŽïÀ¤– ZýVÆgÙdÇG7îüÕ„g¢ìQJé'Î`Ùª·âþÀé7r¡y˜å P ]VâÆsòÄïu÷X5’öÕZŒ”pj‡Â25›@÷´œ^Õ!ö‡¶ÏÞŸ`µ+ Ã6}îyÂÚJÜ™K]î¥Tp<Ô\au’ ~éÍÎT‹bXævï§BÑ÷3&@Š¡£¦±¤åìâ=Þe*X}ì^ñ#ι@¥ýÉăa!ý¡ûZª/šïÇp¤‚®]ÜÛÁ­å×íb;ùu–yôé°Ç2ç°IÎsÝCš(Úöa%^i!ðþ#:-Ñã¯âÅÜê·.¸¶–°‘{M{Z­µè¥Ö›ÉY‚ÒnZé¹×çxÎÕÀŒü­^zRúû2-R÷UBžV2º}¬ïAP1.9K¥g4ŒÒcÇZLÙlšÈlðµÝü½ŒGšH¥?q¥Àçt@9y}K§,‡%3ôæòë¿‹—Þ@®”C¾§%ÚÝ¡ù<ÅÍaòaë=}ºËÒ¦<¾±óšª¼áF†žš{ò”½‹Ã J9D·'xÓ‘¾06ƒžpHeQmS2t'ݦþœ†,©mdÕ‚nÛ øqÔþ€u’@‹Y9~wì¨ì}Õê 3å´É12ôí°Ç£2¥¹[KݶY8Q¥±šIÎÃÞoYÍåHØ ®${E%Ènކ°'¦«l<»·=³{êŠÙÁlZÔ#¸) ¹s&ä®FH± ï†ó v}Ê=½sAÀRÔÅHn6ïî]jæä´ìcDýÉPò4(]«ÙÉkžOç~Äâ¬I™Ò’Òûêé¬è1JÌ$|Ù@‡$ŒvLr}‘/™ß4å»m­¢( +jËQ’óaêPö’½öüô(QoYi×W‘S97›ò‚O„…pzÀa|YtAŠ7Sq!XÂü”=î|¯ #¯wÌ`J[ËÒ~ i Zj•­Zu¤ë.§-ç¶©ÞÃb¹Ê¾ež¶ÔëêWa·ª,èùzÛ]¤+œ^+·)㽇gITéïrÁË÷wØs°á„f9Î4RÒ.S˜µ¦/œãWmò“A»ËE!ͱßxûÞú{#ëÞ`É÷ÚkƒSîå×ìÔ#í}×#}N±éöÇ¿ö7r.Ñg‡ñ¼+ìÂ!ߊ¡“¾" þò#Ä] „ú}±õÅú?^Ìê0-ω©…·©Z<Ê"9Ý7Ji—¥yãI”˹TñL±>aêCuÉðg{ÌwÜ´"¦Äìté‹cj ~]yÆER»÷ˤ§7£=M¶=†·¯0û»'›òbÅõH«å »L>…ÌÓºbt£ÊΛɫãÃDòçv½ôÐo¿K ×£òÕ ™áƒæ²ºË¢çY¹Çåñ<Ù#I, ™D5¼ûs[t ÷^¡~¬iêBdn=ëÆ°æMAå¯A-ᇌý“aÕîC¼MLjz™Ô<»sMoÉyêi $Z¾¡9CÏžH»›Z«,w\k,ýÎʦ.Ús÷êäcE|öëy</Ÿ{Ío¢Ýu«q¨l=òY«câ¶‹/ZíàÎàÞ}1{¥J?7Z¬Ù%²“•äZqokœ]|=1 ΋TÕíeKÉöU±£êuÏ ðDìýåð²}pO‰ãe«ˆÉ¿qUŽn¹àkÃ̇C^ü>TLÁ2çâàÒù뼺ÇÞïžmï!ß±<©dÖGÚŸm¿rÕÖOn@âQÌk·e­¡ØÞÕtKâag· ÷õ÷÷ZBL}ñ÷Uf«A?:Ì­÷œZ¬Ën¼¬¼Ìua͹0`ƱxØd¦03°˜ISNb¦G ‘ANÐ;ð '` NVlTØ:/0ÙwÈ“}RY;­yU,v5ÛÚSUÖ•òr»™C³˜\FØ 1û…¤-–Ŷڲ &§9ýªðZœ¶"Ñþ;…JEŽM”_=¾ åX¨qåÉ•Ç]WO­Ž¤‡oŒòÈûŽ’BØÎäþ•ÃÝÅ–SÛ|òÑÓYœÓOñÎñZÙl{õ1Ůر’M^è™5 ¬$kSÎãæ\$:ÃdtöÆtZ ãFbWÅäsÊ‘ç¸3)8kŸLÔ–ùMl.$0 î_Žh?r@‘Ô¸¿A‚:A% Ê$„õ¿„¸Ý:"±€FF)OñP ¤XÄð0Ó"€÷k·Ò`0A.äóWÍðÌÇ`F1Ò˹ÛíÒ„P8üRkôªî Í#zlëW :#|Y׫‚œá€~O“­XvÃÍúÅf o 8›T¤¶Z 5à‡myáƒú%ZŽÒ<¢ÕðXpØv²·p¶½‹'mxljʹËõ^•lýì|¾¯L„wZà ~,ý-;ãŽÇPžô~m«s5| Ià‘”wYXiÎÙä~߯¸ü‘ß–ýŸŒý‡z:¸O$’O+„„VÂȃb\FLI4múÂbc .’ªFXDq–³¦ËÐF‹4 ¥ì¨ T!„†U¢qi(w5hnÙÔhØß}óÄÒÆîQÂØöÏ~§ÇïdBÐçeëerZrîw\GF¼ôaÅq íHo€R·¬<¸º bAüsò¥hHF>×tvàB%Ó”ô“·‡ Ë6Û– ’¢ZTœ_ÅÊ“°y€P(2.¦ý¹Of@ð"¶ULžÑ”…â4T èN¬³U0ü"Hc„–þÖ;øÎ°ˆï‡Ó8-@‚ >>2ÅR>d6/Ð3$µ’ägëuƒ÷ÝˉÐÍˉ­ ³tàS¦ié›h¹® Gâ8…ù€µò‰µ›g£ôÂCŒÍöÓ [‘œæµ¨^MÏ]L ··™²]ƒ¨º×BìË"Ž6; »!µkHä ‰!Ý5YÜtûý}RÑdÜ‹§‹Io· YgÙöÐﱫinR2aǺyYmP|QGBሄkF ’þ ‰,üì0`æ R"$¥d "avœðè!’D^$Å\DIùŸ‘ß>¯‡»lÎèóqÄ ¿…2í¤ÕÇ>¿w©Ù{›‚GoweÙÙÖ4L>´‰ÍkRv`6$‹úPwžÖopÆ|ú¼ÊÅ]Md›‚˜+v‘zÊȃ½‰RœÙÓ9òsdTèóÁѪí9öp’8±;yH¹$^¨"ä©díûCGFÖ`Ô2ÎùîþÉr5­ÇÃ{ˆöçyÑœ#¦‰Ï±Ñ¢Jß>ò»,ÜrTDAdÀ”¡X›@\€… MÏl–dŒ¡0Ÿæ"!ðÑŽ ø´9S"~ü§b= ˜äš´!Ûþ+hÙ‚–<@ð‡ØÖ^6¥iŸH²~S¾^4~'F²@À B_¦ÄdT`† AQÈ<™™a@.«k3ç“|Ïëð"ã'‚Ñ\ˆÀleùÄ@½+wߺ™ëwZ£†fž3ÂÁHƒ>K0R/Ø>ݘwÃö2(±¥öÁÏòƒ¹3\qÔ#9 I ÁŽö®èo«°e¨3Vñ }‘¼Ÿõ­ÙÈDgq4ÄžM ¸<)/Ê+©Àj’OÕa¢¾ï¯O°ôòý0Ö]â¡7Ö‘óªSlb×¶­”¢'GÐÄ»VgNÛÜ(²Ä^üèñ¥ÐµèB ë²míN0îL…]{fQ*ÍÐ+Ï]Ð;œîIÌsæ-n h-6T¿-Æe­X(ɸ½Ì ¡Ñ°Òs¬[Š ƒhm. –i0qG#·Ð9N•7… çàY”Î1à€)éI5†ÕÇ“üòòûœó¾vöà (¬H J "D†P•‹ÑÄ<ÄÀ¬ ©é%Ê e°ñÈÇ¿·à7æÇy…гEèëŽȚ¦Ë’Ý\8Ž+;$1Œ**9 [»ž{¿©Ô©ìËÑÍB´»Zï®›WÏZÇV°{Ž£ù›ŽwRá'çKÓaö%ÚÀ¡ã¨6kB±à¢ðÈH}!÷_‘êöžœÊ¥7÷Ü[ηªÅ¢Ü,.Œ‚ ¬5ØiXƺbé3šåãâb“kÐ|,?\X¦ô@û7¨6aØÎ[Șºù«ºÓ•Šþ‹«-pŒy]Gå[˜@ºŽkC‡L½§,XŸÞì ð  E2™‚~¸Y-ÆÂµ‚Ú‹Xrä‰$q:òà`¥ùÌ:Ÿ <‹æÿ"èÝÒcí`èã'+JÓW^º0ØNm±)Äí‰ÌšÝhæìðlé`c<4´Q<¢xÇIÖz„­Ï£ÕõÜoŠ”†ª'¯i…´íÏ£¨éŠîº”$ 4Ã[6ï=KßœeÍ‹z nkqX×X™Éž7Ez¬ÁÀžýŽ-‰ÄCi =|ŸbžÇG~*Þ.Gg¶²/⃎Hf®Hx(Ã;É~[–hº¡‘4›6_v4Ÿ"ÛÙ™™›×g#{P›ˆˆÜt ð‡,1ç6î"®7áõFý(@ Û'n×bc½È×qAêÖüË›ÇRÊ÷ÊLýæh7âË×1Ì’£e•)I®Â4K‰<•t‰îU¿yñ‰ff‘ÑvtìU<.ØJíæš” Ïnû –4uõl­ŽŒ±%a¾D|ñZLÞˆÒºâ]µ8! ç+Wz\œ Þ¯8O{U¥å¬‚A]^aìç2~BÆzJím:à %ˆ<}&®MK¬ŽK£Ö`·miá8=ŸàÖ-ô!·@w '1ø²€©UÖÑs¢ r`”NEøÈ€‰ŒG—¾f ²"q(&Šg4q¡–¿7ì ´@àutqÄer4Az(§.`ƒg³¬–©‘2`ˆW¾îGHbá]Ö`ˆÒLƒ VFV‹G>¼œYâOжËͺχÕuïÛõz…ÌÇÊ•o¦ÏÒÄcÃgòØ×Up¿Zì52 Òc4˜kŒ©ù~>ÎÒRj|¦{̶±½ÆåÔ⚸Oóœ«TŠƒ¶éÜEržJ]ªˆx ‰lFâàtÃ%HËÒëûņ™3à êœ)kkíÙ0[Ïlfu>/¦¾¹Á3èýac…6÷îø¨]ùF8¼ ©DÃ×qfÌ'“kn {ÖŒ¼?Á‹àË5źJo60ý§C0'ž¼Y a [Þ´˜ÓNT V‘)r_ðX Ù ‚°’qh<½™¼\E¶|„\u¬bëêç)õgv/8ô)Y닱Žr´–'«Û›Ž­|§_césÍyó¸àÂ÷¬ X׿sxJßT²(Ï–æs•_fމzýÈK´iö¤ÇÊL]t˜Ÿ¬È3:ò3ÆèØy;îÖüt¨ÎP‰ÜHYÇr¤á“¹ëÅÒ‘:å†!F²G|e30ÏÉ ¯`=装ø†Ù:òëwR…0E„ɉ—â/À$ }9iàt`ÌÆT’׆*™»Tr¥²z ‚00_séÎH:¼Í”±h»„+«Æ*Ú‘¢^Jý®x¹Ï^p§¾1ØSÔÆŸ¡Z³Â_\žó·^ÅË—a k{¥yJŠÛ¥}ë }ç«Ëƒ)¥4÷¨D¼E)I)ÍT“t»ÏÌÆÓ¨ðZ/;Ò \x_e MµÁ[†CÕ¬ GJ‰O)Þ·–‘íÎò²—{´§\Ô„o c›ë]ךçWM†¯îa,w-ï*âu+© z5źÆóMRˆ{¹?Ž.!¡³i|땱ÎNÀ7^¯Pç7¹¦š@~ÁlÏ"I¡„$øˆÚi™ë¾­Ï¬`çé h8à’VL3gr(„òi™>µ˜‰°ll/7ËœÅs K®YHëc„®î¹mj­5 ·®%ÈtRëÎ, «DâݳJƒÜgXžkn7CÜKý áUÃXŠjcî[ÝjhºWkz|€8ryS×2–Æmž OTHû‰T^Ÿ­Jnw–ª >Se0ƒKÉàPc¿Z>nc‹…`n£|mÛY/2 8Ü(üª9ÂØ†6èÄ@á— ôÐSm“,ŒÃÊþ1ȇœ,„¦j™FÚ’«KFš©¼!¡œ¦‹ïd5ÁqŸ_TÓ6‹Øî1ÁÕ£yì«ó6RºÔCC=ÆfÇZÑP.L Òݬ>Ǔٳ =sRðö—uu‹îZÎgdÙHNÜôžâ ï°Òõ¿A·Œ>­X‘¿16ÜKü ЖÁZÅmmÊL jGYËjªÖ4-í²Õ± ’E*@óV$Ž+¬¶ ö`»ù)ÄxèkJ;½™Ð<åÍ Œ†8 °º{ÇÁdÁÏòL$·v0ãkj¤ût=±Ø6E%e†:7 ³Qkv¶:}XxǪýŽS’ªB¤Ldùµ¶GÕËP#&¬ªŒBšÅ 'ší¥¨ß>½ ú²‚ȳZšI<¢¸ï¡7^4ìO¶Æ£¥¶m?V:cÚĬûͺղZ§‰¦ºÍG-ÄQ¼«!Õ&G¯3mŠãnnÉ‹ND:#£yÈý"n$¥Š`êÕB¢–È¿`IÊl–INÍØ@ªTÍÏRíÊ€=Ÿ‚·±÷%SÕÓ‰šÜ\tÅ%¾Ñîøu™°‡ÌáìçzœóÍìe¹ôÙ;\ÍŠÈ5iòÇö´S;EG¢²‚v³S;f°îý`Hà`hï…Ü™…o±¤ña妤‚èex>šÈ­Â\MIkxãYœ¡>ǃM1è.oï\n¢ M:-û+ÌjBkxnÓì¢Ö6ü$œ?ÐROtá!,ø@Ž·/4ñ\ ß”z€ët§­wñáˆrd¬…O,¬¤.=‰¢H%9òP·¶ Xjù9ØGÊ­% Ø <û•§?©2‡žÆd¿¶•§£Æ­-|ûw%úÛ{sÃâa‚Ò{Æ;'¶´lŸxÉxf“õ¼9ré_Äž ëJ‹›î…Ñ‘ «ÔÐÚ•nb ݲ _º8µ ¶^¤„@™¹SÕÒGÂ]ÞT" ZNO}ƒH¢¥Pì¶zVÅ$ÕzF3!, VoŠß••_e¼•³©\ð…cjžðXy› sVµ"†cЇ]AZÀ¢û1ÒŸ¯ÃŸtúŒvZ,ÃYÝßzy«¦ln@“ÂÜ6רS»õ&év&ìÆ•›º•-bÞW"÷ƒ&ѹ KXy•|a2™Ój1Ú¨þ¦:³¶€S,bìP¥üÏU‘¸ß² 0 ªH^  yWÓ/WO:&{@3jñœ$¹œ‡ŽU’ÃâÊ‹¨‹î“eë–ÌÂk& ·|®½¼PÀZ˜Z¸ØúÓçnö–ÜÔo‘Æ.^Äj3€Ùtq̼œì§>¯¡_›Î>™½ðést $’òñå{º×KÞ;g †.ºëV¥Z?}ÓA·µ_L½`àö¯³¼;—“zJ—MÄ%¬÷ªØÇmi˜ T¿d\Ì:j@@Rpa~÷ÚN-†P´Ê÷˜¹‰¯å$±^ÑåÔ× úŽØi,Fò˜ì9äÆ:;`é|DV ÛQã¹cãýN²ç¿G=ñï#'Œe¶¡²ÒkN¼HÖUŽ ¼‘>9ÕݯN-Zмº´í 7L4å›ÉPÚ—­fVŽ}KëPHeh>iœ0‰ØÏ^ÆPéAЀÍbmËÂGGF‰ºš˜ á“NÜQ BÇ%›,: ãI1‹u%ÍloŠÃôe—Ù¦Šsö„í ‡ \l"R¦ix^Ô…}ƒÃOvP ¿w€;ÇH¹YÕB¸:ÇEIæ)*’‰­“¨3*Dµ¸Ÿìô‚ôMZ|Ö}ÁHë Øqdyî½~ÇiI‰lõ@t3d|7b¯x¥3W¬z](A/) Î&¢ö?GžWÓ€×§T?„ƒ©äϹ_KV¨¢Ùë«K›õ~|ІÅéÝãH p¹ùÎØp«à­³ríV÷–q”a§ž±ë(|…Àìó8Þ|6^ò .¤««7¯Ìy>'i/býÓy$˜–;™ÆBô”¸BÙ¥ýµ–fR¡Õ=¥’ö(Õ“lDŬ:&=p´²p«¦màå‚Bu*D¤ç8·§Ýu9¾GŒTÂñb‰’\¹CXÌýR‡tGRè’ªÚ›ØÝcN…ïaÓùíÌœ|«aTL?Åc/¢°´„=™|4éF€—Ì.`Ü„§®¤W9-‡Îøœµ\T畹±5×WF<ÃN‹!ÂÎpQªq^¼ìTm¥…î¸Á”^µcÍT»9Ué.‘@^,ƒ-1Ð|ëB„:yƒ›]ëTv «½™|9CŽAƒEÉÔ¬(!¤FH$ónâ²n`O«‡cÄ\C9§ ñÔÕñJï&T`Yô“lÞÜH¶"'”K,v_V£t±iû‡wKkÁ´êagpÁyðÀ™ÐH¶;°u hJjX žŸ˜?”"Èêj"Ä}/ìöVõµkáç ôOÅÝè°Iæ—)8&\»!\×XÅõíËxv0|BñûDê¯Ñw œŒu]à ŸYª}ÛXÐ×ï²÷VJB%Q-‰g£çUDr­8?Ð8X®Ng,Ët‹eÄJ¦”ˆúì£d—mÞ“Ab0¦1©JíÄè[G¯–»(FáÊzÃTdïg‰p· †ÙÀJöÒÆ;Ôp*þtñR`b£´çL 'ðM¨T<¾öeÀU¡GÒ×-»ú<)·!…Ãjñi¯ëf•Q;/1)‚û*‚ˆÒãg:•—,Êo‰Ÿ.JnÚèÓw lI}zï7ä~ñ¥ej­mô…3 çVa#ÅN{µæi9¨}êI.ѹ³Çâgž!ƽ—ÉZ@†©¶ § T•ù [”êçœh_‰ºÓ±›T®»éÃÔãðhß‘’ãDUb ^Øø~îRXƒ¼NžÕ³~ưN|¹e=_A"oaÂ6Í3„TsZRç z°ÅFÐùú×:ºê5ÎNîtýlgzÖ›G“=’mVÝd:¹Øïͱ^Kú—‹\Óò[x? &¨Ð]¸m+¯eØS6Ç_ÇoІ<\ë€óRhóÏ'hâjÜF«6¬§ÔovxÅvô –fŸ;†‚K¹x”õ‹®kÌu™öAïÞ·Þƒ ‡¿ƒ|V8§» ÷º½^uçq“©.öÙ_‹—€B6‘®©§ÞY¤8CŒìZ*ç¥Î b•½JΰÜxœræ-ÔS¾‘ácÛgU,6¸–µ/z5‰×ÖnN3w‰”AÌ6øÏqlû0³êøZ@Qø”Ý}ÈÇ·íºÑ¦­ÞÇS%V´[ÜV÷‚̹Îï¨ëÆÚ±eíÖ.îÍ—âqGT0'^sˆ¿P;“—/7æÉ\-égÖÅ‚ã„ðx@˜vp©Ôc½IË4Z[!Nâù)ᑜáß˦IBŒ‚·êŸD¿´Sd‹Aü~ŽfqÁ†<["m§Дϛ;}ÍR.ƒ_]2^­*÷åï_“3—ëub•>N{é8¾$nþ):y¼c=Æ‘^l´¼Á'|ŽF5ñ—ÕžTTùkyûÜ ì±ì¸0ßa·$Õë]@Æ·Pè3´’±ƒC×{ËhÔÎT×\!åc:A1®øiu‚¬#vŒ_2¯§£œÉ«æ­yÎìxG)žÕ†îRíÍ6¾ V]ÇØ|5qÌj¿© Ä%Þg‹”Ûrœ¢E+fãûÚ•Fô)lœ æ„AGÞãØ°ø 0}W¡*ÃL7¸7Õ0¡Ï‘óM¹¤&¼8«ÄE­ è§Ýs]ëÌîª+²³§¯{í  ÃâH¨ dÞ#/Ò]§²¿Öãv¿K_bõ‰ûvÚØßcžg-Îiññ8ËGø÷ã””L5Þ4#:Ç­xöyÅ;<‹¾³uÒ²¤sÆïžUõnÓÔå:—9æ¤a C³%.bš´¡Ë„²1Â3òÓ~³b1­*Z¢vXLv×4è¨HˆŸÏ6F¡¢ç;°Æ5ltô†y”€õN äѶ©™á6õnªlÎÉ|Òy¦,9 ZóÂMu9û]Út' ^«n”ߌ ’§ A"1…‘ø,q×}s¸!Ö7íp³Ô¥ÞQ.2ú2M7Á}à&G5zÚð}‚Þ#9èT9¹ä¤Å$½‰ë°»Ð'¶æ ©b(&kpÌÒ²,mf3~ãÔ»«ƒÉ ³©Þ!\-1ÛlÕDn$e©…~Ó@ËVcèÎâ,)åÀ—R8ÞWu¨ KoÌ¥ñ=Ï6€ß­î3^–‘ZPæ3Nû˜Ô§Ó1Z«­©™)ž«›§ç\ì’5©ŒÍ/“Lüøö%Ø1"Y`îm«hû¼TBnv:OmøñGv܇£Ó¬1=Ú»Õï­Ž@ÔÖÀòòÓY4YD)JÆ+²B=3AÒ ð¬n¡ð@ Ĉ­u~ËÕ(·èc1zTOm<Ê´3M”7H>ppBPºZñUnå-³W_P>Ä:^ÛÚDµ¡úMÈtIÑqôu7½µöNW“Zï¾ãw‡qªˆÔ\ŽNdºÚ?fÌ‘èÔ 0uµ ñJ¨ë¥§#VzIŒStä—Û‹_ž—•±ÞðoX»OÎ"¶ ÃÔÕzK62A¤ýÇA•¤Ìߺ.Ä È ðÑ ~Ñ`Cë°d ¸"Üè°±ñ2²öjòº#Ñþ;΂ ø<ä“@ÕšT…ôÉ×V™×v/dÝ!ôV'õŸƒ­‰~Æfyˆßçìý˜¤³ógdr(sS+½LòE½ÖÊÎPµóYÔh¢Ñ·‚ã÷W×{¤‡òº¡K¾ðÓÔÀíLSɵ¿My?Æ5˜(ž3*\O 5Ù ªUL %ÔY,Œ<=Ô›`äÃ+šØ•Ȭdâ&vôã8gKt€ç‰eÓ¦Æ4?‹¬|–‡6¨ª kX=³Q£Iðô¥K[]?ÍžÉoQמypïÛÒøÛïàôÃŒž‹xº×µ[á r}êÇUÚ”u£C‹Nƒ¿–ýb£9_Ð) k¸ }š {¾Èhÿ‚ƒ³ÕêÌ7.žž4ldFÄz! ñK[¤'ïèí‚Dš ‰H³ƒO]>G¢†w§üIùL NÆ€ü#o.€I“éYœP{“¢€Òøe«,yã_?`º”*…†£,ª…Ó«F>õsP‘1úúFÜ)àž? ä¶½ß8´§ Àñ»õ¢oK¦™r³›š>x6øáE µÖž¶ûóxo>¸NHI¹˜ÔÍ)ðÏU@£q˜ (õ`Ë¢ N  Pª;!¾'Ǩ‰ÂÔKòÚž 4ÓKŠfÁ1C!1;´¢»¼":=ãO1ÚG¶Á¸ 3Ê¢nµ°Uf’f·.P<‚³¹·.:wT@@î}Ü»^M"_Õ^ù8êÈyrÁÑUsBØ›q¬¾Þ™¨xÁ>cèC¹A‚Q…oÂ-¹Gæ8r)B7>x,ýªHîðw¸ck¼ÝÇ„rBŽÎO£ë°7n3öÇÂi™™nÄ:꽜]ʈzÓ+'èT“Óéëp@ñ)Ö¦‚—ƨ#C±ÌTÜÞ<&€Wø¨X@v{‚Ho–û¢¸DŸ5jßoê I—¾ZúoÂEPG3…é‚<µ“¿nJLóÕ‘Ä/ož­—ˆ×`Q•ö`ªrac‰¤'m6ñm… k`lp¡Ø$HÜ6Íyãäw¼[<„÷âû´=ì5+ßÖŒ+^G|Èøµ‹P‰äTŸŒ&áÑkù7ÙÊC$ú>‹åóù1僣ē zíYQ‹îl¸ ÅÁ(o˜‘|„WSؾЀ¨ûL¶¥ Ýt©ã<®#y¯©~Ð*4Íeµ(øš‹é…$ïݘ;7† _w»?7ÍrÈ#»9´Þ2–Ì„xÝ<‹Ì6¨½AA=O-`ÂÂTM—1»Uçuï½¥@º‘YÈ ®FóŸèõ œˆ"–͉H§‹·G{NüUÝß1L¾ñ> ÅêR»âˆ Ð¬^¹Ôw‘+¤ˆagXø’ b®¶]pµVòv¶[ gOZ­æ¥¶c?÷E]9Z4SÞ)0œ—ÒGÉ Kö'Á·Ós¹ôš¾pÀ¢âî“#a )ê{oÒ²âןWCY„P7¬Ì¡gм’ÖqêÄi‚òÄ~¯[§‰”³as`˜Iº¨*ˆ'È€(„"³$ê@Ò„C·:kÑ/p³Z¦ªWéen$MW¸²úáï“=Áã¾GÔ•âA×ÊF™j§yw½Ê®Ö¯DÊBa®`y—p‚f0¥ à á@…¦i ”+l/=‡¥)¹.¤ % < ‘!.ÐCˆ„-…ìVtGAçrª>§‘çy.’©mÎι¸mÕ0cC™~ö¾EãÜ㉌ìO†äö?<·d¡û–®™Î벿=M„gÌ|¶Zé³ySTXm>NR~/Ϋ 4ƒ…”8DPËs2£ÎoíÙô‡88ÞV<¬ö„ hAÔÄ5@VÛ¡œ¢}šx[œ€ÂÞž;žßç¶©•ìN—­d£A=^ÎÈ€÷yM`Ò] Ë3õ½´»­OzÓ1ÍAšqÁû§ØNœµ¦æõp«QÂ^ Q­ÖÖ/)‘ƒ-¼¿ëÃgveÚ}²(“s ‘Nb0YvUñž:³!.=GÒ!ºrÒb®Ã˜л Êkò>z$8y°Mxc¡o{¸GÇypš "yÈíÏ…¹tføÏ4¶&˜s«1µ’ i µì'x\ä•dŸŸµLEç¯GÑR•=Øž`wQ@l-øg2Þ$ƺÇ#Ó.ù—ë2/´8y2?jeÐw^]ƒ¹çfÓ¤üpf„-«û–,B±3D›kÍ<¢3¬Ô,^äjÛuáº:èuÓn-aS!¬ËÍP7<×*:*€äsD °0ÙûT«ª ƒwmS¸/U¡…ÙC!œ ,–öF»µH$ô+èm„ýV¸äŠžÏme=æõ¥q‹¾ãĨ@³‡×ákS•z¥äV†F“VLZ~—£ª^8æŸwÑs–¼*.ŽÔß©p´·ß. ùN3íZ æÛ¨¨DvÀ¼y߇1ì*êr™bJmY»ÍŽžsI©«Û#'&WîåwnÚö¥m©¹“6ˆÊ3yûÙŠnT¶,+/ o_]7>_¯ˆ2¡Ó(^Ù+wS‘jÝäb˜/5¬B¢éƒ*ñbX.†$­i” ÄKl4KžNáwÅ´ ©ÚÇq· )0!?k̵fËx²¦u–½ï­Ò­æuboœ2¸||Æ«ÂVLs“ëW×ñéwé÷M©¨¾Ý«½j­5·j·îÐ`ôù{°mAÉǵÖO«%¤ýÝ×W–˜µ¨3¦ÇÖÃEãM±v i:'ædå®z¼Œé‹Ê\î©ºéÆ½oD=îEg:|FC´ø„çÆ‹’¥`­¬êrš¤7zì稻&8ÐèIõ_½q$÷› ½¦ƒq†ê>pc.Úç½ûK~Ï#I"éço¿®÷7í* ÿF)ŸßZ]«Ûk¤ìP ±bL©?uIÐùu®xÔ±wÆFÀvÒ7“î‚Î8–«öö÷Í4[î©ÓM»»ŸDã^Î++ŸBâGRÝ6£C«;¥!úÍdÍ’únÌŸ|uXwº"ݦT%Îv6ŸaUþBj®$•iæ•NSaÇó×Ȱ[–ßXP@§8™Œ¨˜ºëUÚŸih„¦EsœàwªnÈw ìø¦ÖN°_1¤ìuà«ëqôÌo¢7æ:‡íöc÷Ôzì}Ö­Å<>ʲ¥Ó·à–w[tp>ktØFÓJËAq¯1€¬c[nÉ‘kd“Ç]G;ãYÄ„°|Ós±P¾¼- JÑ}ÉaeqÂÁ‹Q“ž÷j¹TŒV«Æl8¬–âÌEè!v4òÕ¤poªUÁˆjÓü¹Ælm¦ZEžn–„5•†ÞL¡‰ª 0Ï…ŠH´6}‡fi™¡}êÛÉG¾½ŠÞ¦/†Åʉx¸ãÞØn°õ섃’H~‚ó…‹Ë‘‘f§«îúXÿf.‘9¿ÏšP„R ‘ãíåôp]ík™v7•¾ÂÝ%¼ª=(÷•ex8çÊóÎÚp«»씓¢û¶…7L°l1·¶ý˜|Q±^`«k™KÛ0¦ØûI~¿ _¥‰ÄD¾OCœB.©x^Ô!à®ZìÃõ¥ãdnº‘[ZnÐKl÷’Ö_P®wvÞY‰{²Kö7 RÝÈ×-^™Ûö·¥6Z‡Ÿw¹ÏȦ¹ÂŠ­¤` ]ˆ9i¬:¯[êk •¸Ívýœ£«uÇvr@o¹Ï¬á˜×³y¾g²1í*û‹]ƒÄÂzŠi+kOž-qŠëô踧³”-îü(Nï(Gl0ìdž2¿ò´èýóÄ5íÓÒÔûf©‚kWîÍTFñÍiiçùb ²k¤Â9 HÑÔØ©Òìœ*^r _h=åUÚãZ<Ú:-ï ”e»ýŠï3ÙCwDlÅöÑ¿mÈåŽv& ÖÑî”ìÔM±÷7!ú7ÊnÇ(ÛÖ¤w®í|ƒJqÀg½mÁÕe<¼õ|ʼnCXt,…î}ûò€æð)û Ê¢~2@Þ.°IB|!Ñé<,2÷%ÚÒÍ`ö*¾[@¿GµUϨV’ó!ËvrC*ta‡z,š†û=\¦4 qN2/M÷ãGާ$ܦÜåâSìø5‡…+nÁÊ\ÌhsA¹´_{ ™€¬Bf_®ב0wÔb„Š}1_†¾ù¤å áI‹E#áÙàØÖÂaqj4m›GŒž+í]îíT¼úþÍb{L³¬à…³m«Ã2Õ&‘µ{yØç(Ú+:9 h½ÈR8-,çMíä±ûß,ŽöÓ^']ó®÷æ—Óä[cÙÚKë_* ÎàmP–I' >ïMØÐLm{_|Ä@OâPAŒ%HvjÑ©Øs¬Þ@æ‘Æ·Ñ¹ßs¾T6o»›ÎÖ¨Ù¢¹Ü·¾)[à E5®B}R¿fÏYk-/mK12U”Nµ:ÞS{Ó•ôÖ.êJqOWÔiãm1¨@§mXz; Ÿ¤[ήšp™îP¥+äìU¾×«ÆÍ?jæv"«mÕ€\î.Ñ¿‡îZ*pF°bù÷9ªÖ:N…máu9×WílslJ­»§5EgÉøNx; ŸLý‘¨óòÀ´{~¯º^ ÆêÆbxç?C·–[Ù½mŒÓÜ^íF)ÙñLq¹áq7ŒöøˆÎÞSû››iw5½Íï×4ï/“˜t\¥³hïudÐb` VÅb&L>þqâÉ ‘§SÀ™« ‘ìöÝ9Ô»´ÜT«HV½ŒDÚ­ìÆz¦ÎAïNspéí°[­=Å)Xôí h ;áµ^¥ë¹i|þhÇŒoÓfë`j¬Caýã€ÐuœízDZ޺ÕÖÙ'ØõÇ6§Ìó1NPPe‰áøjP­„R·¥qfJòîÛ}RÌAqîØý¼ ¹@ö¡é,8Ä*\ŠÞ„ÞÊfs~ÑöKj& Öd${!ŠìoÌ9„ižt–ÁkÖÕ1›SP ½óͼµæáªÁ4/ºõöù½(°C¦"_Zs>ü ½ î¾C;Ë„àì敼æûvQŽm„Ñ.pÜ‚Òö.o?DrÕ~rÇsF# ìª<­í >=ójÀó=ÆÁÌG.šw?ß±ë U*Çå²ð„^5û8×ÕÜŒq Ü8NiXi'(N³ß0^f¡~aDZ+wŠ¥,:ßÜܾ׼8Î;ÊÙ és¯.ö˜Ö`Ó‘3õ¬ÆZiCœf#yžÔ7ªýZ]·`„-öô ¿D¤F’.¸Ôñ[–á½úÜ•±ÎÞY1Ó'ÝWÎ[Ü©/Xí9We,ž)×õ/„Ôw‹_Tê9ŒÝaI7áßÕÔkU@Qk}÷·$ú.¸e«M¯­à—†>«J „cq«KŒRœäZ}î û MÚûÀˆÚÓ2Ùó Ï1¢8B!šï:^‰¤]c*\ìt>—“ö›­ÑµâÃŒóW©QW°qˠƺîR_³¾˜K|í²Ød½ó Õ`ëžb™GÉë˜z™ XÊäõÔoºÚ—‚ƒ•ÒLgÒ•¹ãH~Õq-XaƒøN<û§ÏK˜©GÚ*ÂCŽi*Ö¥£® CÛ„£-7†÷+îƒÔ¦4KÙá/®­Ê¡ñmÝø¾óÒžs ×”¡€yÜ¢RúHéÔïµíï”ð&:™çK¯7¸{¥$Éȳ“–L.[#*•$ì ©ƒ"o€´#ïcÌšê&ƒ„'6Jݯ¥œË””'± Ø¤%MÒ«ÛbË‚QïÎß²Y¤íì8äâb%„Œ:ÚX€ë’•òñµŸ…×çv56šã1¨˜>A’š%txÓ1èÜyp¼‚ÏŒ³žlxÓ<§¸s×Ö+ˆÒ±œâu½áUãrÂek •Lî ¸X¿¹EO ̂㬩C û,®d¨ðíñ&ûË„N‡T™¼ç!ÝyX9Xâiv ¢V¥ŠÌ±jÏ½í´ø•úŒ#2޳U¨œEïA2kœ¼pð¹³é»kn«iÎÛH5š¹êÓcú,=.ç x"ãš¾u‡„ò]jƒÄð´åbñnèg(Ø‹NûF"6:öV}¢ç^•í’hö÷ï¼öYû%ŸkbŒi¹KÙ Þu¡P?Ó'{’Ÿ&lÞw}xþ}d™;2Í[²›_]˜5ŸvN±óq§3ÙWÄyAð½.{rYô+µ¶œ2Ö~Ñט(]Ub»/¶c¹Ú7©HT¼5Û§):ÞºB‘c×#Œ£¤¬aIô¦>êß^|!¦yrë/´ñ…QÔ|z€ÜõxŒ¾Ãq‹ä£ ò²:¦„ÝtãZÕ/IºuwTµ’žÐzò@èzòbkÚÊA¬VÍY}&žõ+ âmhŠLcuÕz½G)Ós‘¾ºú@|²ˆŒEâáÎþçvŽ'`£e­^#íÖü ß¼â¹9Ä15”'ޤ¯‡\d,k§—'ÄÅlî°Ókw Ûž˜zð=\sˆkÖbjoÏíª—0¤¡ìÁ'3i¡ÖAœnZMó,&n÷™ï›Ý,´ì¸…­éÏ…ò‡È܃Y§9¾ö/hW¾ 9æüÁê§Á ^¬ÿP(u{‹ ®Zrýs²c&™’¸·—~¼M®¾¹©C….mÙgãY´äŒ¥© 4mç®›k“É£>i±hÉ“P𥭬7¤ÜB kß,86Ì|3ªâCfÇ…{. ´Í<3¿;ˆ6ŽT#×Za™SP.:ÌRáhj;îXA6Þã„ít c2²Bë«3ä›lQé%´’‘óux_Ï•æ¡ÉbxY¬1?o­‰™&/€qß…Þ•‘S£×¢–%ŽòÅ£Œ"AÜÚàólÕ‡¨´”û¹Ë:ÌM™ÆX¼Õç ÝjÙtæ§Žb¥Zùð½u_I—Acãð1ö9ny£'¶ûäÞËKãv¹.JÄ @"ËU×lÐ3uXûukÍ  gW ´±FF,­)=[Kºm+¹v4E¥Ë¶_+È\9.O¶Iï …&ršéBe2[Þpï·Íí)ªM€B­:¤XOMk ¿—Vå}ÎÔ¡ž‘Žg¸ÕšfBǹY±Tßç/—hÓÊ´7Mí¦' Ê4rðœf3΀ñ@uÖßv§qšiÈÑ9 K4W~jSÖë|Šéò?4ò æÒåMb!ÎÇRà¹SY“ÑÍi™ÌÎ^—x~ã7ê-«‘&á …wö ê$üéÉá±Ó÷oºÖuq!a Â÷0y'—›®ùKKÇmR*Ké]/\…öÌèd¤¹—I“ozu½Ró)·ÝÙm„š—¦EdS|–èúžª~îRçjŸq©0‘쪆÷ xMolwŸi¼¶…Ç®GB'ŠÎA®ºZdW •bL:— kµåԊܸq÷PqdýYïFÕ d’:ªZtA·0  ðµEÚgÐÎ)˜LˆïMÞC]rQ” ¾²xɸ¾šæ8|FZSÛjéÞŽÌ rªú…ðˆØJõçhã¦ÐwÄŸêe‚9@¼¶Í&Ñ÷Œ&¡Žk·Æt›ËÃu¤XÞ{lôR,!srzyë¿UÏ»]_̽¼ƒ'.'“–Ó1Ú ÊàN­“z;›æãD¨ðEÞ­;–÷ËcOè‘9åÉ”e\qnò8VĈȻ_MÉõšSyi*ÓYQXULo8 îLÃkû×ÙÍåÊ©K|Õ!ÁµŠ”î«ÂèCh6:šµä€ì\!OpFZæ/3 º»«¹׈s˜K>êÚŽé¾{‡É°‚(¯GP AŠš´¹%¨ïG‹¶ëc¾`¶Æ¯¹¢þµD+=&<”¬%wP:‘Ü\¢•ÝA6,ܤTv‡!òН/{9SiŠh.l¥”’tO›«Ñ›ÍÛßF“è[Þ;W¼PµT1î§î:¸£¦ Ësrе:܃>’Ž™ƒåyrv…Ë~ñ‘² Ö˜SÕßÔ_;Bgílžh@ìa¦Ê㮳e-Op¢ƒˆJÔcAoZ^¬¨z™Êó\t\fa ㈻ìh¸LGRø´ô&ÜÝiÿ{à©ûëoaï1}X&ð¤–:3Î '®îÞ†S#}ƤSŽÝä/ÉŒáù^T§Ò]V¬ÑÌ9Ÿo´¶èKl¡«æÑmM1¹ ¹ŒOµ„³¬úµèB·¬bB¡¨P‰ÉàV˜ìé²É=³ªÓ³QJóe@—î³?LôJMú³Ÿµ˜RŽJ0ß!<¬+{0§b×¢>÷R ‡[4—‘†ïËÊtj‹Ø¤țڸj=˜æ»Â݉ƖKñiÕd´¥ב_ BûÄ ¤Eñi­ÖÔo†íÈn³›dúèç;­Ù(Ç"^ÒâI Îà Ô,žÏS,ž-Ï3‡»³ñ.éëNäÐ] ä¼?“gù7•jèÞàŠ„=ß Ç|†× ï’ØŒ·ç„ñëKJó¾nwníŸd¯Ëh-×Ìx4}ÓÐ{Ÿ¯ Ædà§£€cÍN¾ÇRÂÈ,ì="–l¥š“šmsgŽš¹áªæÑ_±±ŸaÌû“Ü,ñ1Öá¡’V6<'®qº$qã(lc̤²¹Á±ˆø©|Æ\®²ËÝz#…—‹Ô±ëµ= «+—Ï,7ÓïF׸~ü[ÅD¥A߱ϖZ_ ±ßaÈî[Ì´%Ïn]…kZJ/>Z”Íý`LNÙ4{É…ûÈ_Ì’Å[sÕì{˜<$ÁÛâûhÑf=Ô©=}dµ*²yKFðì$efñsÆ7å+)ûwµ'sÜJq“H‡ÐoÓõa¾Àë{t¸”®¯™†EÛ®ËA+›æÚ•êRµ7åo¶—/îVÌÁ÷Š€Ú{M4EšPö.ìq4mÈvX¢ §.ch oÕŠ#Œ¬ p­wF¤á“±Ém"–+¸Þã¤ý¯wµã ½Ùn§mÂöš?=iµæÚ’¶Ük]–жyô˜PùyØò•¾æ|s8óZo <¡áÝ%B¿žÌ[Z†-xŸoßY}0ÕCæØµý7ëϸ”#K“BÚâÄk0•ø2ãa!+ñ|“aî´Qq9m7d÷.ôH-î9&à‘KžÞÁ›R'Ï’G¬YxŸ:­óÎ5Úx'[ÜéÖ|œ8·Íõ«1U)s餧;Bô¶#÷¹mõìä5),Îèþ1yT¾_IjfèÏ龺q´Â‹‹`$e¢¦·škoP®gz)O“1mN»XòÕÞg)s>ºêÍ2¢¡Ï³ß~Ðô³<K«Õû"nuƵXiÓ}v.ñ³±…¯{CØæJâˆWÞ©—;Õ[ ¡^¼RÌ7C£Ù†<¤ð•Û$œÖëlÖñ¬ëU¡ l@&¼*ú&¤£$5Þ“‚áO<Õ†PwJýÃ3m"Fí^0ÊY„Ú¾±‚L‚‘+Í"/–ÈjN¸³m7;$ ¸Ï¹Ç<¦³¿nVñÊThDƒìøž¾ëYqVò›WE O±€Æ&V—©MubiT M/z…̓s¥Iã›­å;œ‘üµ½ÊdOÉI£ÀêZpÖ+–º¥:!o¼ã´ b—fÀûUzož»:cXϵÒGNUš Ú$q[í3 w£ªtÑשný!Ë௱G½«Œ6H¢û(îy€òq_‘º‚êËÚ‹-×·èb»¶Gwáɱ]ó\¨b6íd뉞IRAQJ¹î~ŽÜíŒ€ÛØûz©®vX½“Ù^ëÀG>M\ù«gQ`ƒÁ%W íå ­ázvó£öÛ^÷„±RÄÎCqŠÎT×Qõ¢,•5ûß9¢»-qKÓW…=Ž÷‘ ¤\åý_¦¦µ†’X¡ƒ.ß©}±5žíLês§Êv?GuˆXÙ¸A-wO j|¬K‰P¸w¦´ç52É×lÁ¨ÕI3Æñ`ÓQgkàsêwC¯rÇGèB‡èÁ=.§Pa5]š^S@–Ò¼«5PÚN¨gmνÖ.‘>±RšäS…•—¹Øû˜ôë(X¢yä/‡³ØåªË™­}×j— ‚(zLKÉm­Va:7\¶ì‘¨Þ=Ù÷»Ãšà˜Þ–à‹³Ð”*íÖðåiîŒqnDsŸV[´Å& bEY¤7IOz¥[ÆCÈöžÑªàæ0*¤ Q6ÚL8¸åt­¨6UöFf$óx¹y[Ï—k±p=‹U=¶­*½—exÔwSÄJnš]qökª^ð0NŽýr Fˆë:Ÿ¶[èµññ¨Þ×Ԋ˼.ïŽj”‚Rª4…|Å"ï¯ÇÛ3lå€vÔÆ¬¾N¼e¢ÝiÓ]6ª½“<Ç^ñZkožî«ŠF[éö‚º#Í(®‹ž2Ï|(èµ(´a9Kßx¿Þo{*óâÕG©†7ðáI“ôh P;íGå UY¬î›Be$IÖö«{µÄ«Ì–‚“›n°é½ÅãhÓ9"óåô9#ËqÓ·ðú•ÝxÒŒìâ6¤©«¡×'\Á&Ì­xÒW×7ïn÷HºÀœ7µ³qLE‹4XÜß*Ì¥ç_bB7åñ>×rÜr¯>Þ÷Ç+ ×7{»|6£f´ü—ÇKŸƒVæ`DŽ6›ïã‘ÜB¨^®‡§Æi½ñ9ÙáJp³Æv¬^FZ–²<Íg„JúBݵÄ&hàÄï& +U"ÝËöÀiiœªåö8ë —~äÿw\ö&[¦¼ž*Äù'ñUÌ05W#:5a›ìÓÁPî˜ 7p9ÝüLÐá¾®r–Œ‘òùÏÍÙñº™‚–ëÆån4ž=©FMDÞSäæó§Šð5Nas–Ñ–ï³H5Rî :g*Ñ’þÄI*=ƒv <1ò)G\K-Š´ñVëó3“™CÊ=Ó4Âa¼ã §œ‚ŸZ»hæcÈ÷Q~r3–“·oϾ%¬\+亟©çåHŒáºŸ³ØSòõ½MüÛë®V—Ë4 9ON[6óÝÃÂ?5†·Ö„›6$]«%F„‰± Ü p°`™(a­Çäë>ñÏ-Ó„'>—nU¹bó§uïfyYZ~}ûŒ°{ {PH+!÷—)>}Xf1^.rœ»”ëí„<òQ8KYA_V¹åv°íüNhŒGbº#/u¹ß&Ÿhvy-çëøt;¦Ï:¼íÉí²Ícæ/Šy&w:{BV¬®å*XÛšA¥Ñðg‡¬‹_itÐ^:ŸÐ $GÕFº¯¨Ò |²&;÷;ðSÅùçGֻŹZmŠ*ÕJJœ¦ù__šÐé¹NðšVëÔº ÖCµ ï2;žç–§—i‹<ØD\¶Q@°’³’Nó{Â=L&4ÓG,äJº|­‘e­Ò‰Ë€Ô§A=¼Ü°¶<é«6ÓÄkgµp³rµî$o±Ôã(b交Û-^ Òϱ4›û‹&[£bX»n…Kt‚‰ÓKbž€ÇÏÜ¡ Ëâ±÷™û#9ÄIµNŸ¦Y´!–Å%{$Ã(ç<ÕuŸb‰Iöìï[vIÞ×Õ£X… Þº‰¹~„]ë«/°y¹hq‘MB~¯®½(CVãjžžh‰mÜ:TÚ^8æq,Ð<È™L:­+Àk™ï {rõ)]£üü“”cÒÖaŸ”½)f_o±¯Þ™]áj#M®pd#ªn0ÎÛq2¸M{väïY¦‡Áý<'xe1Ý>Q·5Xõ&vÈÚ]; F¥õ ÝëU$íéÞÏj:gØ MŸ­kh(˜'íhñjé¼Qæl1YòåF+ ª5ÓÕ? l ôW×#|ç1²›"µ\Ò¸?#;õN°Ã×ZßÕªg¿±Þ—¼.áóÈ_ÝÖ@†úðDdkD:tL¯ãB¥³R÷Jxµk•8§Fæû@ÞWêºQ8c(Ú¼öÜ/Ua ç1œ©Ù÷¸Nºêô𠃩GvµY&8ÞU¡àÌÏ´»8¨'½†™¿m©F+v‡#h6‡¦†})êÆØµg§Ú ñ1kãè]dñ©:„BÁaZ³ˆKWÝÐp–Š67ž-v´m¡_?½ (‚m;%5‘«s«½Q"ªVßD4mmòÍ¥£TºÚ†–¸9ÞM ‚š} Žn8—Ä<ÈïÉYõ1\²Ê©ì×…-xÐDeñºr™ÏÚ÷y BTH‹^£o.­_Às«ŸwïZ4ÆUÔGV‘dbË] nµxø¾Ò¶3‘ÂO‚gV7иn¦ž{,†t!¯5¢"w^ƵǡIE5LÓÅ»?pñÌ´8óÜϼ´jÇlƒ(k¥¹vy=us±¹ksŽ¿5ÙAØjOáç^‰Ë§(z5>Q/ÓäRTš"vÕ^}Ï™rVïØ^-¯>+®.5È=õÒ_ÛR.­ÔÓFb–ô~¶£ôþ¬rRí=î|'Gû¦Ûéë²n›¨U5㤀·lù™z ¸òÎ#žEï£Ò1âŒÛÏÎËWŽy\¢†’Àýq÷A„º\~Ã¥T=©œÂ @ÂñO¡x)ÈB>0±èûg+¾Qû´­§)îGHèÚW7fˆ \òÚÁοJÙí3Õkö{YÊDÎóó‰¥úè›ß26 μ0ÞÙÞb4Ý4Kåún¦·$JqO9ðëjùûƒ¸)]p¤¡ö$­ÓÌ+bÅn½öµ8V»Œ]÷žŽÌÚìä®âKHf|ôùW*)¥mÞÚ-‡Ì(Ï©öGLëפhÍJ5ã†Ç3ô8 GÀ*zEXZCÊ¢îQnKpFø•eò•¹Ì/ìÇ£ŽsN}Èœt*áÁ<ŒY†{ø™b˜LyåqM%fÆù9´Þóªq5÷ ]¾¦/?À°wœd%Ûc´ÈÀrN(÷tÝùN¢÷Ká´s}?²–¯çš68pšÛžÏr½m·É“æAÇ-Òë«{ã–‹÷˜R(ç'"½ò#Þ[ êŸIÄ7bO#¸ÂT¯$)½š.ÈÁȯN`òÏ Ü."›FrÒØøZ@N{Ñ~K2/‡_&¼a”ù¬|ðÝ y|å9¹¼jP‡ÐjÆW´wlÎÛ¸ï©÷)Š8»¢½J6×ÉÇž<ÚhǶð4åÉLr`ã@^—¹LXaë‰l-çŒJ;ÞsK¼ºö/¥êôKˆEôcÏ‚ ÝÏe_¾ô$ BƇBöíÞÁ¯ÚÕ¶Ÿb¦ãfQøP\íÃ~²Zæ3pàù5^LS÷7R-i­Iæ}ƒkÑLCìž‚ÂS×+R„aT¥éÂ\Åh¡AÖ!ŽùjÎÜÜ­ŸµOY/õ‡õQ $ô kè¥u‡K¯M1Ý74ïã-FQ®Ÿ=Ÿ¹œ“‡:R›W*ò¶¾Ñ¯”–¤_­2þé?}b³ÂÚ] ãšúñ̰ÁË÷Ò©¸x{SR,S^m°üµ³¶¶Šw]9×mØ-ÊÂUYúô­#Þ¾^ß=AYÛíd—±Vã4ÿ‡-᮫ÛG‘ç¢ çbü-Ãq•iÈüÎüØb‹ÒI;üXûžõ¹·¯á¿¤ºjÜöÓ .ì` ;Îh£ •n”*GÄy9öÐêè¸uqf&‚vÈ/ Ú‹ÖÍZ<ëÌf»«èkV̹d¼L{BŒA U¤f¯-W¯S ~¶ì#¢^®K8µqÛCB©z-ZKhÞIµ]öÌ‘»ÞMŒ‚/w¸›ßw •¾˜ië6¨<1˜c¨t UöÄ"‰ÂKK5–Ó ŸTEæ%ÒÁwÊÆ“.]hÐd¹„×ÍÝ'+G„£dÙHÝ;ôEû<ªaoíb>*}¯¡|gY¼iú‚¦‡:;͈µ ;Ôv/óvÑŽ+|Ãús.XnýŨ^°ð¥m{ÍC"> IYyá¾}œõÎÂÀpñ^_oŽ/ŸØ¾zû®«Š2ÅßK”<Æ–wIP¹Q­ì×5úYšGe}îõgêè$?Y b6€Tðܬäeq®#é\¡Ë‹4§¬À oŠßXÓò\vãA³ïDcO?«møÅóã³ß“È­cŒ¯wíЩL”¼‡CÖ~«ù'Ï( Ká¾»Åøm„Ö.ïC¯RÝÅ”~³P)Ú~>@¾ç³C-…éÏ#d~ÂÇ› …ý+Úó¹¼A`°¦‡»û1Ïv©ÓlÛÁA·ž AOo¦ ¿x#^Õ:Ù¢,,4÷»{ Þºç°û²úø÷ëWÔˆm§r—§¥ÌÆçŠÙNPŽ{zÓZ¡‹Oë[è‰S?ÖõþêÓ˜ª ìáÍÉã)D½cbßjGh–ãõ-Ö?°W¥oÏ©îiHwmòYÌpéÞw»D+ÝM.·”ÎQŒ‘7tÈ¥99Y±ÕˆF#H"ìó÷½¨îæ`>œaÚ{œyËÃ+öšÆªÁŒaü÷ VhRã-7Q(à!…8GìϾtm ÓÏ+B–ólt0k1/+tS³ä»(r`ï÷Ii‚yß÷9¨L6ØÜin?)aÜc(2ÿðž¯ü›Ïιñ¤Y(æ¡û„7`þƒFµ_³±ãµêZPÇjÞŽ÷Êþ/Ÿ?«ÙÀXš¿/ß5‡K‚³öÅŠ‘Ö?Êêéã¥ýšGb;[®ê?µ«Cmr€ZOH°òÉ©Ê{™Ö;. KÆõ·glö'ÚOh ›™âZù¯J%¨Ü>“òög3Ã6ü³Ý±LL:;±BÑq~¤ë¯e{mC]Í0˜Mž€¹6Ö3Œ3]—¯œnÜ‹¦l8ÚkEÌôÑ\SF%÷%.rZˆo7¶)Ö„²÷›U‹a¦Þ ±}÷RîG¬ÏfÅ ûzr)áƒá‚b•H2Ž_Sæž=û/,´²ztƒúQÄŠã=ÆL±'½\ ]VÚó…ËÛ)/Õ–¯!Á=æ=#,hjŸ¸ûuÏ!* »:›m(oT»­íßUtÛq}G²…êÓ¬%(‘Ú9Æu™hð.gÐf´dK'‘šÄÛQ´e°O%O}Ç“º’ªO…ÜîÞŽtЈåã©X­ÍQ£NJ˜5èj-hÅ3µ—{¯åj/oÚ ËÖúemÆ Âœ¾1ÛµÎrÎ,˜äô©êœ†+-(êùó\r¬ÔcU_¤8¯Íì&üW2¬c^ôóèëî#quO½ò$Œ:¡¨o¡³ÄbŸNéžßrûä”$az¼LÆú;L[Ó.lеÍå¾m±ÞÛ ™îxp’/§\B uc[î6ßsòÕŠ2¿Ö· Ô»ÔOËÁ¥“>÷´æÌv†:™‘ϼªaîÙ×f¸Í×­0‘6F-ñ‹º3 ¯>¥åÑS =iqZ6¥Jž¶ø‡ÌÀrTÈp˜3o?N!ÕtOéôë]z†m”9]r­$QÃj«Ø #/M_êá{6ÌÏÝäÊžÖ±ÛÚõXm‰­ú™˜¼©Ø·T¡9P§HS¼~ŠÊWö¥hQKÀ™´‘Ozný—ó¯ö5ˆCâ¼|Y¯¾^ú»•q€¢.WJûíö3Ž~.üpµ Ž©fr€6]ó¼MjW÷ÎÁ, ­!Žþ¹Fú™òï3÷#e8×ÙÜÞç*rÔKŸy>×L/4iZ¯]V^ &–»“šrÔ«yžp<,Nzvú)&¢{Ùç<: žË7#ݪ ä~H´íÙt5H CÞwc`ý:G£)K;Ϊc8‡¯a¦võöéºf_˜Ò%è<=!ì|*,˜o§•^Ԩƚ™ÞW2¿³9 £ªœ³`¸ËégªÚëCíV­¸ýΤ½ßv•¶£\Äö›û ·ÒÊ9ñÇÚ cä¿Aœuî'ìï¯WÓZæ¸ëŠßRON_z vÃe1úñåôo"(9[4`Y¼F¢´›ëE7¿[AϪ²ŸƒJbó7@ûÏANûpÆšú¨¤yxoúÎ/­L|‹N ßcãÏØøÍ|ø¯×¶¯j â»·hØ™-ñ4+縧Ìi„ËÉî³dSÃÜ0c¡—œ)ÕFxK:~VJfÓcŒ=¼[4Û²WkÕ$Â6ýÒn¾Ï:BÍOµhâ»ji>·Ï@JrÂ@7R/’‚FÓ¨èãÛκöé5ݹ³õ'¿9·ÕÎù›Ÿ–Q‡Ñú®: °Ý·«vÙÜ<¸F™±¥%p|}Vºh–Å,N˜—3Wæ)/DÁFoÃlØ›ì1iœ>à$¯õåD•ƒ‹ÐäÛ@˜Æúzê„çù;¹*j#W¥=Á¤î]½Àlª}}É5M §Hzß%ÞùÎmRx™¦ÄÿjQNsÀ–Ét–ºPãðóZnR¥·ŸY#¿q‹hºÈSáŒÏ_æßÎø+D&ˆïUc=õ)ØsW¨_õnÅ# ã6ÜuLƒyËVtܹ/§;µÌnVÛJ¥˜\V Ù£K’ƬUž¥òˇ¾/6Q.OêÞ kTÂ0Ö“”\½ÓŒ'¸Þ<ñãÓ¹ª¸l4©ÚÇêŒýµžöÙ>Ë8PµgŽn[^+·Y§:WR8=/šP’×îÅvÅWVð­Ó×¶íö.¾ô©« êPK7Qz„G¥ËŠ?µí×]¥Û0úAnE&sŽ™Üs4l9¯"½Sëjù¹ÂõÞü„¦3Çäðƒ÷ÅE¨‡1¶!¿§7Û¿qòÓ+ ã]¤j:«îeרédg÷’™îé­FR^MR϶œ¢È6É4néóóÖ)Æÿ>uõµ@×ˤ5z,íªÂ®Xy”Ð÷‘Œó.ç­ sÚž¿`6Mä%ÉXqß¶ß{Øšï¦=O§Wg.ÃJÑëlÉíi|É`óλƒÏ’ÔT¿0ÿÆX£YERž`°wš®î±Å¥§O^õú3øì“ÞZ”Þ‚ÛÚÿ~þ‡ïöGð~õ„ѱ(4£K´¥"PR”Ò´…4 5EBGS‡DT‚\ˆÎ!ýïéÿOP·ïcTS!¢Û÷c¤nÂ:EÛ( (P%½ …° HiM ”ÄЕ±!A¦•Ô^˦‚†š I޳›aÏñµ¢@<ÞÚòÈBRìbjI¶ËEZ48„ˆ*€èè”ÐD2XÔš4îÇIÛ¡¥ÑcfM¬Å£hØéN…þ†Âyy ¡öO%ÝÒÑä/BG˜.—È;²†#IA¥±¼…òZx´õDP¾6‘aüŸ\¨ÀIH,,HIøIÛ=ÛF³$eô«l 3L –w‡t4R”4ÅçcØòCÙTÒ^Y¡žÆCC¶4ÅÒÐØpæN4k™yâDÂõ¼Ìˆ“˜@6ÛŸï6mž8•5YºécŠÀkÿÈü\4-Ã!\L§ùŽ%ÖQ»7ðž)šHž0úZÍoÍ–I@ ¼Ž ôŠ<šI“Ï3MÙ¶|Ø +Ò¤60ÙòäÍ4ß9çï½*Mlö韌洫Î|®ÿ‘Ýõ TùXQVR’|¶¤œbdÀ!Nd#0&ÁKd ”þ_|dù 3áò¦‰'ä­%óÍÄãÎî>¼wasQ¿WÇ,›ÍË›qÃ*/ÚHSldßWw3L&‰¯Ã$”«)$øgnÙþbOk0 â¹( 2iKkù± Ö3åôÝ„!Å%€úÒ˜ãßjVl±'Œ NÛ\OŸæ&Ë>cŸšÏíÝšIV{žJC§XœL:VàD“‹_ÇM6’2øâjÇ[ ”çÛ½¬¨í݉ºÞ·‰¤:²’nÒ\ŒvþWIãñ—M¶žü-8–³Œd‚á ÚâR϶ôP>E$Ÿ €2›­å§ µýÏö¢?fÐÄ?ͶÁ„cOe!å`4©É÷C˜r%÷F 3&5 [’öªã!†Ù]}<—̶Œ&(›â>¡‡â¹¯UL2~ö~ø (‰þ,'IIM 4UGô¿`@Oû iZ¤i ™¨ZF’¨("‡'qÒ$HE1ÐPþ¿î¿ÕŠˆh(­?~†`ŠRš,yqŒtÔ“¤( ä%ØME¤R„¥Mt¥ ±¯ Õî|餶vÙß; ²È+Úü÷_{'=ü¿W¯Œ! È Û,Ê¥-YR Õ¶SúíÍ!­¨«V±î³‰šN2+y”À™51ØbHC/>[Ý©·u§QÇe÷ß|úâ‰W!T!€`Mªeæb2h¡ˆH©ôçAÐéCFƒ@šSHU.b¥)­W‘¥ é4Uj’'b]t%)$ íÛM%\¸K 'VxÎ8TqÛïzÛA{-[4ÛÎ÷(cµ¸¡-—e0…)* ííç—¯^§Îßf¦±cRÂ|YeR\cî¶ ×Y4Û64$šEq›¶ë K¶Yü”±‰UÀèqD*‚+ çM_ÔœIN$g)4QÈ[(C\ Ö4y˜Š•’¥ ’™„]u)a®5‘3IĪëY@˜•/k¹ÖE \¹R÷9»óæÌý;ªHˆa„ý²ó¿M«;å¤ ‘ gèÜ×`e&q/¬Q壨CJД‰IÖ¢4‚è X¶P4tØÁÕ!§lj1…ö1yæ‰z]h­c`é:.¶@ʈJS"HÖØÀÅ•²yCŽ€:B¶ÛH’Šä¦ñ4ÉM&›Ì†¹a‰$kˆëšD¦d¦$5)±ÙY®&ë)%­2D’™";·&ëH“IF›»%3Hu"‰ˆŽô±©b£m¤y”M3So.q›bp䉯NÛñ+ç§]ìõÝÜ= tº@è]Œ±%6j‰!bÖF¹xq„wrÅ .Z*fŸŽ÷v|'¥O>£@¾wÛ™Æ`|=-9¤âáÛ’“œÇ`ñ)"YKÑã!¹zCÏ8ìICTOvë¼Éh·[mE<Í:|×MS=BR?©öÆQüY}®Â‰ÁjÃ;ñ«­í¡ÀÈ$F–Õ ÉQhá®zïø SËÝ}Pyàa„@A\8`1ŽG¹¢›¤b}6ã;¯R¨:øù¬$Qua›Cä"4 “NE‹PÍÙ”$«P¢Úͯb¸™¤„%îc³uðÜ« ­¥‹«oN‚\ecR-(•lJÃ’>n™L›‡0e¹K)›ß;?¯ô5íô¾ú¨ ‹ó(P¡?¼€¨'ëÂP¥ ” T KHµJ…LÔ±,Q%4SLM.%Ž@ ¯åf’wÂJhûv£mú“Ž-y+ JA  DiO¶@L@¿’S@…7¦Ò%G²&• @¡¢¸:ˆ®ìÊ#“¸Ž“‡bÚ–Û³f' ]jí¦’‚X:i6ÈDEP´éЀţmî×—ª ^€£F¢¥kwry°y<ǰbŠŠ£ˆd‰ó±Ñ‘i @R'°æ#Ù<”)“ì‡Õò}“ç¹8€èF‚ùÝåúõ»«äòì£ ÊÌüPËî´ÀÌ\”Î$‰aó4ù®N<8``Ã"Oä¿z¤W­•‚ã„XDt§{Þî¤Ä·"V, ¨0±ÒØä%l«6»Ž˜ºÊ¬Ýcf“T4 M!.ÓGaµ%Ò[æX>ìjtll$+ _6^ý}ëÛHïäjø^‹ë¿[íÄÐÎ~œgCͲR˜„GÄ`níI¸%#\¤ÓaTÉFC”“ˆ“ ­€^»±!6[7bHl%© X·KíeÏò¦BËÒº}X€fü­þ<ÍSã`túÜãh¤â]ül¼Ñø²$ò®ßŸ\¼ñ@‘­a!™ÌdœLëò¤%iô™°ž:V`ψ|±ûÖ}1Ÿ?6}ù‰ä?žìñ4™úýC.ÚaAI>0c„ Îiøìøí®ý jüi¤L$Ò9N«Z˜<ð|<€ò‘ €ÉYé<½dôôôݹ›„‡âÙq"_Ð{¹ãëCË¥ÌIü5×hÒNž÷rCÄH¯$vÀPh¢ÄcL)Py Í'4Ï U-óŸSز (ÃS°0`’;Xˆ"§PÁÚƒ"ð´ ïd"¬ÃD– IèËŽÙLeØ¢%p¡EW"™"¬w|Ï]Ú¾ò ýßðsù£îKHÒÐ4ÿ_ùý~þOOæþ·ù_~/·“üßwîþ‡øUTõ€~Çì~ßí‡ó*) D*”‰-µÙ±~Þ) N“ôcé>1Þbž‚ß·”â ¤|ºTèJS „ë»#ÐØÐSXˆ/m¤1T[K Š"[–â¡–ÒX‰&ÑÆ¹`¬Z@aPHF0È®2þËjÖÒѲÒíµg6Í7>¶$ó¸ÇÍí1Ùcv+ïo ’ìÈùVGeÖ9ÑKÙÐyuÕ15'×bŒzwPtô`šT®BÅ Ó£M+ILI¤i 4Ð'“»Î]hé:PÑBkI{Ž:¼át=h×@SÑON÷:(¤ëùyyÍÍXTq#Ë)¨îáëTÔlè#¬Ú5¶ÒÍKñ¶ô¤¾ûJ÷m2ÔâÊÙOò²Ì¯7[ Û€â0ÐA…«õ”ÂnÓ³KRþÖòÀNqï·f±'«IWûujÃÏ}ûÄÕ'ˆÖt®ê×5ܹ¤Ô–Í1ÑÍ4¤Ý-ÄÌ)l‘¬ÒAbh(¶Â%¶Ì‰IŒë;º ¶™cIlDS|`„5)‚IéÚ $…S!Ìd݈Ä;»g'%ÊFY[8u &ÖÖd Lˆœ$”˜œKÊ+$Ùü~å8¼$èCîO’½.óvÔ‚õЭB”¯y“±=އËZÒ[-¦Yõ’“{£b$±Oí~؇*[¿SH*Þ±ÙyïÊÞÝ”mJ¡=›²ÄºÌ¥±ÉÙtɪC)$5“uÈÖ'ùI6(ïᆲO‚RŸ>ntN†lÛ.iŪEÙÚ䤽xÞéM–›µÕ†QÖL埆%è»ç<󇢺ù>OIOlÉÄ fQ2&gB&·mšõèZ耋ŽHxðÒH‰D htðB'ÁðÅ­#+‰ç㤚|'`dL~Kä:®„öùïrP úmÓòÓT:õ~¹”tƒÀ¼všâe41£–qÙa…Ìa@¸M#^ƒOoXI 6H îaÏu¶NÖk³™¡)‘£F&6ËŒ0Ä>#,BJóa4’f‰Ï&‡ˆ ÎóîdñŠÀóš\›0|°Gó]<Ï Ï±íü|fém!Õ¶¶ÙK}­'¿2ÐîÉ"X‚”,zóP‚×!Ê›cg!h!l,ñ,<}%03Ðø´ãµ8ëÅÿ/ÛwÃûÿ“òŸû%þcö/óþËõ~O~߯¿þPTP€…¥V i‰iRš)œqIP‘ÔpA%ý¼ž5KE$A Wí`¥Õ4CA«`wa±ø ýØòDò_c0©K@´-!@P'HhZF4e(PÐt­":A( ë@ô)ødé+÷ Õ U?6q~1*‹Í×~ßo¹f/˜ã«Ý=sËL#Z,ó)’¬DñÕÖ VÐd†Ù²„r:¶Ã)-£t%‘µ ­©t-ÍþÿnSPy°G]•Ô†N.¨Œ,¨už&“Ž„+ͤ):ª °CÛ»6V ‰¤6¤35r4g 0º´· ÒrP%ÿ(T· Eœä@›n‹q yŒ$ï­2ŠäTÀ øŽ’Pð„Õ†ˆZ|î醌 „!;`7ãð¸p;þ®Ðù(â{÷Ù¤œszÐ ÏÜÎ4žlÑÛpB{w@ÈC1ÒÒˆ‡åö¤“Ý÷gáyuØF!d"#hÙ¤¶oÍËÌxÓ×}6‘Æ1ÂÖ—f‚X‹"“›]‹-2ÜÆšè™š}4ɤŸ¡Úk.`|¾í³3$µy€¡Jz|±P{t¾Z“LÎ2i$Þ]Ü©&uøYÛlÈEœIi=bdL‰ýò!¹ÏnG!å\p9…¶XïËuxÑwféx“CŒŒã1Œt”N.3†¸…ƒ1®Y\½s¹À’8™4µÀFÆW1.k…h€#‰øÄÂ|ßmº©JÚQ]ù²Ãº«ÿ Ct·ë¹WoÍÙI4Áp3>³Œ¹7£’x˜ëÖew¶¼‹:ÄÐ…\‚’ìõܼÛb×–Jf—šii«bIГr»PõCäQäžJ|Ùdò è“$ƒ»w/–Ÿâ­ø´¶P†Wã“áŵ 0 (ª8(DXØ#õR$áó[–óšxO8Cmù·†ü6Ï\>[Ÿ›òì°ò £';9CÛ»µ·ŒD`YZBØÇ]º–F­ƒ\As,¡ƒ-@Ásf‹9H/À÷e_‡ÙçÓæ`~lÇÃú¹N]ȉ  (oT³„›zÓ¥B;¹1QÖ-­qÅ Ëm¬²ÒR#`”ú]ƒ1ùe–ÿ–Üÿ_e•I3áð l`%GuÙ3sq#̳‰°7S`ácdÛ ÿûÛК¢Bñ H Ç"ŒæÔÌC”37T›±Êgøõ™ãÄÏiÄ`"5f~›lß9ºé‰‰ƒ¸Mß¿Þ&îÿ¯Ô%ïîk»gâþ:KX¹ÄλQ!ŽŠxô²éÐ>BõvGÏ0‡—ŒMáh tyÙ<ªL ÉÄ’RWlÈÕí{¤4¤€±Hß¶ºâyÓt¥ã®ýÛ ¿.AÙBµÏ’á®7û•$Àj38¤¤¦K~D’qž4µÈˬjF1…ƒ””QˮϻՉ¸ËkTk „®ûB­mÒ16\g‰n„­"mBYw{{`ìS H¶äI-ûi ¬© -V-¥<Ÿ;C3LJ&_ï7ò~Ik_ ~{ïiÒût¯]%îSä‘í@P(oÏ{Á‰ùi}>ž·¹×‰7œêªiŒâK\om4=_µsü—ijá‰z64 o϶Î}å¿wdk> -×jí"^eªë(@°Ï›.ȦÓXÃ(¼uOö=2% rÊ áÏwûw`z LXÀGÇbò4—X`á%ŸÚŸÑø¼Éóùjañ0¿EŠªqQø4$+‡á’!áî( ¨˜o±UÜ ñ*C%‡Ul="=»™Ì‰þÌî{ÄÜÜe•&5I‡ˆ½ î䱤”ÖÂ:e¤â­%Ch½Ø6EùâÍ£µ]xÛqŒ6„.Y=Þyóä~Š (‰ùþ÷aõ?Ø §¿gØ4·#ùÓˆJ‰) ˆ‡l–ÌTºEˆHív](¶„[e ‚“¥HRF"- ti (M K¶)@”]•ÓæÈE䆂”uÅIÑmxϘÂðŒš5©œÇGOGOGTY[˜E‘…ÙÝÅÙiTU bij¥4šZ¶EÄo1Òa*4h ‰t„lšS§™Õj1¬cÅ è³Fþv‘Û®CÉ5|ÚV†”<œÎ€ Réòê„èZWÉ4”-!Jë@èÛhˆ nËF—ŽÂwcðK¾ožê¯&ÙÑä/IîÅ'A§Àž1a¸(óIL‹µ€s󼤼4 Ü›w7Q4Í“_ºlH=.‘×@RH¿«n±…SœÄ“QÑ Q#®º)?‹ÖÔ’˜ÁŒZRζé‹Zœf0”€ˆÂ’u¸xܨ kVe0™”ÌLË<Êd¦‘2 )׌íÄ&``ÂUe`f&’P$+âX?¥Þߟ™öˆ)Ä?K°}¦~Ò}y|ß-Æu‘¿[éÙŸ-|ÄãË[h 0Э0:¥Í%…cÜ–[r“–KÅSïï·Iž«Z|Z@!6ÛF±-Õ@€ T‹>ÔÙ ¸›l·K]eÃá3`Rˆ/ÃÆ D–´˜]ò¦ó:i PšSÈ<»Ì©FÙ’y{ Ò l’‡N…(^‹m¼ž$;ÛÞ=‡ÛË^v$ Àrózð«×õ­o‰pIa®ákIPw\¾9jJi4•gðÖØD+2Ô&ijêþ;Û$ Iò›s4‚!“K"³Ä“yWuÎÇŒI*‚0ö]ßOGÜÆ1AI›ÛlãŽÜ¤å’iL¢P34šh41&we ¡%šÕÊCUP¦ˆú]ß—#Á¥±Wçï³8Í‹¤w¬v6½šæÞ.YÓÀ¢é ðiàæpL 5t¤Ÿ ÉByÏÄÖ$‡Þ¹ÐŸ óÝÁ›BZPñ¦ü`M%AÈð…|J–²\mW,l¤$Ї,!j†èþ¥¾»íΞè @l[ní©µVg2ëqL#­$·l‡÷Tá:±¦ÜAŠ ÆŲ Kl´ãJg uò3ðGÔ“¾Çæ‰öµíd-§2S›B#9†‘–U(ŽCEúÉ. éŽÐ&“£²ìéÎë°é¶áµº?Y¼æ0H¡>ˆ$¸¤lõêAëÇÚ‰¡=ÆjÜ[»s»gs»S'5ŒÊбq \L¨Ã€¤!•ÙL5Z¯Šô·«d …éÎ8ç?èx¤) ªB„¦‚†!uTpQD]R'DPDp §×â…%_þˆˆ©øXýtü1ú÷ãƒJ5I}ìèM û?R15]Ÿ—±¦¼íÅKø#O}xÙ$<©uOÈ ýpi@òM…:&±Á–zq%UDw]Å8 BV(ÊXPT•˰Õ& Òi™dÖQ,D„¨9H˜óÇÏ6tÎö1Ý8ª©x“$ë)aX‰›q/6s‰ËØÒÑ¡uIE-&1PR³ZN©éªW¶ÐP•e½±æÊã÷yGqÞ[n*2 %RZt”: d6ùu'Iø²NIÉû[Ò÷«Ø9Â~4Èyɶ2@âq]²õpÄ $V25«ÖîpÕÙ¬®ÿ÷v„ûÒ–ÖŠªi*øèg³ú7£¤3˯Œ{m¿hiâ$xÝÚ¼–Õ¶? §·å¾MNbZ9)^Û¼äU$bäâùÄ¿8›V§¶î’m7›œÎô4à€ºIL¾?wi g•[(X %µãªkéõï<ÁM±%HM-~¬©ä)ÖØGIä¯@¥'»k^l´-+ä‚—X»d("¤éÝdºæ“L…µ†»q¶ ²é ÖØ\«vhÅ¥[nìÊKvÍ ;h±)ηùí2O “ÄcÍkñÝP ;˜”ÊIð’q6=Û)¤þÂH“)?bÂxŠ bÀ”ùnêS$W–°§ÊàC™eØZ6WµœhS©M›B÷d¤Ú:3YM@t6ï]î e%¼±væ¤Omêöõx@§˜ÔÅÁL Ì€{å Ôç+Y“Yn`XK㯌ñ&™¾¶Rg$Î2åÎÖ{ããŒè™„?eñ<`e)‰ôÊJgÃ%ù­ÄDÂ$ Lwr„¬Rƒ-“µšB+<¤JeD báá>sŸ:4N´˜)‹n\Dlc1ye«5C6¹IyG•ü;ß}æ ô÷zIý_Úò%ùôßD¸QOÑ/öu…‘&Â$­Ä½¦ÙÅ=c•Ç#4l3ºËùÀé7˜Œ„™¤cÄw&«B°ö°Î§“jÂZý6'dJ’¦öM(‚)É,wšq#1"q¹©>µÝÃÝxzxÞöO? ëxßx.’¶î¿Ï$É&LÏþdÉB4” M ­4ÓHRRÒ TM%SJD”•I %Ç'NwQ @¨'/Ü–¿öU?ADü?gâûpºi -·éý™ûcÈ=’“@:¤ &nÎì¿ hM/A£@–È)M°iJ”‰¤tP-²©¤iÒ  ÐšO%ë   5¦€h 4 ÒP´¤DLQ '!dùâ·úokçŸÕ}§·$T!Ô[v¨îŠ:$ ¡t5lvºÆ!4Ž´¸ÙJ–…f4Hh4)BSE4´æÕ[f1«ÀÛÉãRiLL¤Õ’RR‚öÀ ‘(P…æ:¡) *“¥M w'’žA®Ÿ !:tÖ“MI¶é (8‘"””›c%¬+aq5Ûn™´¶K ±e[KUÂwÝ—ÝíCTéfîÍ÷i©Ì¤®[i„$²ÉJ‹”…l‘#i\öË u'‰bdf¥ÛW,24´+Ž¥Z-ÄÈT\¢@?Ó3L”ˆäbéà@WJe%7gKõÉÒ'šÆ&Ÿ ÆËkÖM$°Ÿ«îÜÊ`IÏ‹*†¤Êù‡šw×µ…Í/ÆöDüõÒŸ*íéÚè+@%Ù|“Û&Ún†fDâH’bLL‰>ûßž}éJL‰ñUˆ. S$§­¸EÆNeŽXK]³nÑѬãs¾î÷¤x pñp’M(í¶Pðv +ÃÎ6¹l`C‰&®$¤¤ ¦f’Œ‰@Û:qip“il,¯.æÎ¡¤wG–£‹k= ¦ÛLW‰JdÞtÍ›®é4âi/D„{wv ×.Ëx»ùë`þÏ—rŸ“ÕÓL„3ßpyæuÒŸ!5äÓô¾’>By'Z @Ëá#ä8™NšD‘f'–Rn´ÕI§A'ÂqÎÐÊ?7tŸ6ÛÖóvaT °Ç[¦Õ†hHzš ˆÀk®˜"Ä9ÕuB4Œ)VArZâ$‰H˜ÁâA?Ðþ†2!8}ð¥&³nÈšMÀ%$B&$Aá~ñ×õž7Ö©NÌ>·¯×g‰Ï 4[ñç‹1Ô7ˆ¥ò3#±#S mhð¤1ç_ DOŽÝ¡æ†Ë<îNÄq•¸†œ¡$+‘RÖ‡w&ƒ¦=6×O-Š#6¾P¸øUÄu°âîn‘&“wlN¬7û-ÿ_ûH (´ JP±%+JÒ§qwˆq''DQ(ˆ¨(¤¦©©ŠýN¿.A×üÝüåTåO½ö?Œˆ†„j‚>ßËÁÑÙ¶b)škX‹·q‚¦vŽÚb)ª]æG òÇò²:`úCÐ…= Gä#ÑEÙÄÜd»t°d¤L+k YŒ" MË\i%@LŒ@ˆZÜIX•‘¤@£r¸cmÿ[m±€ÇkN=³zo ¢ˆ„öîÑQLÆÆj§Åæ®;:{°”ýQÛ)ä„R‘²kÉ(«lJí›gZGXŸ;¼îì›mTP&’î9ï™1óÓ“­î F²Û-¦ÜšÙI'çyÞYVÛ ´·+-Âà -ÊË *þ?nëçÀ±oêw“ß6°ÐÚR/àÍ4íßnpN$ýN6yrÀ =KfÇS-#€³úfȱa‹˜Â$ ;—”LAy¬ Æ¡J~ë´bø ¦uÀ‘0«ýé²ÂŒí½Ö–?c)uý5žbiÍ«(B½û¶Pœç6‰-µL# ~]'ºS)!%±ÉOÕæ :¥ å‘ócBº@)ZJ/!_'ØR$özÑxge$ÍŠrÂI¦EaT1·pÓ€½úYxá*„wØÐòèÀå!ܺýí’~ší>vRÖzÇQåç—#ÈÓBnó„»Ãºi×› ÒS£Á»e» -d­ aÔ`ÇS¾ù†T¸q¦Þ)20•l—ŒV‚gX¦n|œÓ¹‡JÙ4”@‡Ž;nîKÀ˜Âe Hå8_؇NîdÓs bpiÛ’£Ã©E­zÚ:—NkQz1z+êg ôç@OöÊH¢RÄ-”P”´P4¢€œ$)#ø@PÚP”´¥TUOÛ°S£lQ 3”¥[#ZÒ?l¯E @/@PÖ‚hDèBP"PM)IÐ!¥€(4 IÑÅÓM«¬E¥{°R5öK0ý·M]^ìOgQwncmRkFœÍQ$Ó;:[k-´¤I 4:4èIl”Õ*«M*éi‡ïÁÝa::†”§C«°VìÆÕ§§‚ê4itÛk¾™4¾Ç²OF<‘:=ìÒ¤F”h;²šGG›(uÐôJ± 4¦RfZÈ“‡˜?§£“ÆI«”™Ê `'®mÅem•ËE¤r™Œ¤"[‘²$[r'Œ›¦ÐU ŽBJæ™°Âí`¤KjRßuZRX$hÓ4¼¦í<ì C5Žo¬¥Ñ”!Ý7t—æÙúöÔ'à oG4>šçÃ&a4§Å€’™ZÉ àŒ’˜Wá—Y¡ç(¬{çDF€öÒ§>7^raèèË`œfmdÒ,}.³¹Ý1 [:Iº^IÑ~ ï}ÿ¹áô`ò>„Ë+î6蓎®õ–=vèRBpÅÛlv.r9TBЭJÏ£ú,ãÞ}z,ÛYf<ÏÛg$r Í2’¡V]؆“)~mÖm‚àçî%³ð¢PøÍÏGôfËËrÖ½Ù ¶-Q­b*+Käž8 |ÛJü€éS¥ó»’‘éº)¥}ìîó¨!öÙikCHN$›F^bnÇu+‚ͱ8»i$ä€Þ…êfnNzÈ!`D®YIv†9ÆÅ…<¤þ›Þ{²Ï6 ®AâÉâbN&IâNÔ3eÖoºä ¢Lp)›mׯÎée¢Æ%‡‰) I4CI!`޲2 <ìœg1 ’G]TùwÚ…gÄ^²xϼ»å:k­ƒqÕ#®b ÷nM02^ ‚~ ,h=¼¤=8adCÀ0ðB6ÌÐçî³'Éï\ɾùdMs­&Re3®åþ6­$¢dkH6Ê`wàñ½Š„$0>ë*xž&ú (äLýINý?JÇ­ÑYAÑç~k¾t@„mAA¥¬ÃY²±Q^¥Ѩ°’J !ÊŠgét¯·”A="Ct¡T¡Hb ©Idp¦ReØõ Ç{»xÌ6í$êÍéu;sõ¬úâcH%e|z…) Œ!¦ÜN’£EP©š·cYŒY…’x†'õsvã‹©XC$TYâm±í$„%®ð’©Ü.Ƽ9GßAÿé B)¡hA   @ª¦” (GÁ>Ï™ý¿AE>ß´?4%%?l}Žò¼­;Š8EµºI<ÞcUyh˜->GHvÀR¦Ø hßn@Ñ¢ÓÐУ¶"IebH$'ùÓaU«DÉ ÖÂ%nV#2‹e$$hXX ¥BÂÖ&VØÕÖÿ[Jâ96ãa®R›Û,Ñâë40*ǬÖÛätE ;¥òѶ8±+/½¹¼ŸoŸK‹¾|­EFîéL@y=HRuæÄ«Ê¾w^qwÌ凜\~9©¬™e¶€’0ádD¸Ø òÝ]ܧm tµ§¡ïÒµ-'›ÎMtFÁ±± Œ¯í¦R*Û¶Í1’²oìì!“Lx¿³›ç‰Bp€O) «Cð)Nd¥!ÌŒømpN±¤I·1 Ÿ›ø_»BSúÞö޳¬O—|¼ É.>IºÍ\Ñ­)öÿ;Œ ‘‘3‰,!,mg(]Bd¶ù—_¼t´e#Ù¶Ø„ü.˜†×5ša $YÖgMÙ:NŸ`Ò´¡ä† êÖÀ{ó²'É47̳¦³î8œHŸéõ¤æZ¶°awmZ¹¦U†@)·6nÕtÐ4!l·DÈüzä4y·°iZ(ò¸×m|ƒîÛ3„H,„ÑÉýÑ¢4¥¬·¬ ‘Õ Š Gd ”*)ò98½J0„”#žë]@›‰µŽÙR·![®Ï\iÕºmýª4vÎ…Ô ºÚ_ÜojDœGvícA”û±¦|8™Hs¤÷<¨™"q(žˆÌúHó“Òã]ËK¦Ÿ’k¾`úl>÷œü“L“×nr—XÂnÛ žûi;ë–m–ÙWá¤ïž—m.rÖ}1(èõ¼»õžžÚa™À$åœ@ )H(’i?f$)&¥nJ&™³ë“IÛ¯m¸ ÔK<æZ†óù¼\ñ¹P÷do®=~_¥•ž$¾{b¡&cN¶KµÂ`¬#0»®1x«8“­êÑXÝâ³#ÁòÅ« 6²ŠÈ ~ËHªX0ÃÄ£ÃLŽ€î ²IÝÉ©uI'H½x;ʈK #R%wäùF‰<å·òîí‘,eѺ8ål“&LÉŸë„(¡¤¤D)hZ(€¦¨Rd*Šhªb$ª¦dPS!÷åýiMþá?Û÷c}»45BRSHPÒPŸfv´VÁöFª:]öä4… Ð{Ö: t€q 4£M tÒÒ)¤h4 M :(GHPŽì.ªF‘кéZ|…ÄPtš/s¥«°hw¹=óRUUKAy8ò Ãuaα˜ª‚¦HªY°U-ë+¡tc Bé­±N4š­!Hš£(ê‡m¤4$Nvtj£F‚˜ƒÉúvJèw{Éíä4SEPù>ÞvzÇ!ÖkËUT‰ÐvÁЭyyPyy:ÓNØ\G˜‡ÈNº*Œh©¯;Jh™”ÊÆW$ö nÚd›iÄdÓ~¤µŠBmU¶ÜI-@E"AëXj•¶Ík(1™ ë)4´l)+„DÂŒbÄZJÆi@· –…Z@ ÏnÜÑ…üäš@ÉÄϧÍB,I̼Òf…Y4”›CÕ>’omÉm¹Õ\ê„ôLÀŸÄɰøI¤Ïô7w`LJLbü)«¦QP¤¦[aë³ðÒx|à?Ži&ücÌ@Ê@‘ªÿ[ú÷çúS¿«ü 8ag18ØxÌòŽ¡ U5q³ Ú(ìAŸw¼,™©– PneR_T5 €¸ññe‰†,âbé$1¶×#O ‡˜;ýwÚ3¿ù‰Ú†—ïZçݱ'LPôÙ¥<¸÷T5­Sš¹Ïc™pÛ]æ1Æ£·Õs]æ÷ù€¨6P»Š"*ˆª’¸'BŽA ¤‡4”Õâ†ÿbŠ*?‹òÙ+Ù ¥ šªÖ¨ ê‡íê…è¡:¡zSòÊHŽ€^ºA¤] JR û!¥ê“BÒSä@ë£KA è^£Ð뤥ª‰¨ˆÝͺç%Š»WFI†Ž´ÒÐL A;m“JèÖ’šD¦„ÄRiÙhm)3‰,. éÑäé××6ŽŸ{Þµ­m«ÈÜ+"Ñ£ät‡È÷°iO{-£@h ¼î‰즔 £¢’†´æN4Ž’¢üÃHtP¤ùØã8ÓMw̵yƒÉ/ Ç@|§h)¼Ëñ›c¢HF/òXügY1%4:­]­ŽÚ!íž59ÝŠ\µ„c5Ç,–ÉDšmwlíœL C¡°…bjÊe¾a "{]6Ã4Ç-V¸[°Ÿàg ;™¦`M\k·qFØ"0ÈÄdqXF=e$ÓŒèi&ÖY\ÉL¤ÓHâ"#¯*÷­Ñrþ&:üµ¯™m¤¿{?ß‹ò'~*B­úÛÙòŠ"Z™«²š¥»îp|óxŒ%#òÙ ÒÃI)gÇáaJüÚ"¾_“=mÚO·g/?$‰ø›?ó×ð}ß·¬s¿ZÑ_ÅöNwÚ0¬íí‘ß1ÜÌçÈì—éé_}Ž/ßíùúo×M_íŒ+­(#%¥¿nØuéoñðý€„# ‰ðõÉäJD~æ¶`Íþ{dÓ5öì~î®ÀÀÇ` >¸^»ÌÊ÷Ï<}Ð>ϤIÄÌã)Œ0$Òd®[¶þ›»1Ñe¶\&•µ;¯Šam ÄzïJ%á…™ !r>¬Jà¢ÒRc69l6ÎçVóã/ZžkÓl¦$îšó—¿=|¯–Ú+ÃË;¾|«ñ˸ÏÉöSäÁÒЛoe-“áti:íÀÎñg·ÃÐßl´”Agìc¶ËXRËžÝÔsÇ@êÀó.³ag¬µŠ>ëvœË;›ÖYeg©CÃÛ3¢€DË0Ãì‡(Ø$bŒÉfiˆ$<טÁ¢À@‘d<®L¡‘D@ A#“ ¤0@’Ѓl@“„)-°ÍúéÆÃ)>kï‘ït¸ÀpÓm,'«ÝhDéåÕr’RC XeU‰²Û‰Œ%’,B”ÊMeÑ34Í4$›,5³B010(-¸Ù[m”– ~º`þZõþçëýÔÑÄ.Ë 9㻥m¸þ¥6á¡«L¿Ga¨Œl6l–dxÕú¬Ã„¤«Q°3RÇJh¯ŠìŠì¶te8ºÄ©w¹ÚIùk´ ÚØƒ>M"}ŒÈ`e ‹i4ó*ÂO1y #áIð¼«ýÛ>Öè|¤?–dÌÉ™?Ø€E’¤¤Z(B‘)‚•ªD ‰h"*"’åD"œ”§8'HPTú‡õb©õ€€ ý¿É²ûkb1nÝ t¦¨ý?³)Õl„T’ Ç#:¤œ¡ Š˜İ‘>öêšXƒšJØtSGMŒºWA£l:1‚‡I/(´ëù_bóÚÝ æé3Vz]‘xOë8²´ÊËÎÅVÆÉzË,vÊU`V5”–©®•R‘ã*"X„ XÍ,×JÅ04ƒeÜË ø›u—œJ6 ²¤QbH$]O9NY4ív€ö:"/58—l¾FªŒÅŸ{Nf#FÞs»v™jy¤«1$G›ca€ 2ͦªŠ;9:-ˆƒ¶ûÓ¦#Í‚“EôÃò>BzT½—u›ôðt='I-k¿¬ëïo¾Ëï¼ùc¦ºcs“IÅ“†Xó‰'£Œ?¾ÕÒù¾Øûhç>Ö_Å÷´š@%Œ¡Pµ”ÀG#ûÖ²Z‰ æP¬IöÓFTd¦™fq6$bÌÏl¶xà$ØLü3)’tÔ!~XÂ…#›[I)>],Ú"§ŸŒfÂ@g2q)13Om’ÎU­¿è™‰™'èj¦É+ý.Žùº_ªŸ/%M!¥(ÛbN@Ûl†-ôrÃLM*?v•"¢;bb¾sr²0+»ëÝ©Ëa"sÛ¶YÆæiÔg,†®³H5|là Ðíì>J7ïÁïy‡¥}-I¿’Ã4ˆ4X-#, @Ikˆñ-›»w >l»¡’‘ln²Ò‘„Þ×·ä²÷»ÎÑM{E^gS&ûTìÙ»r%NoLêÆ4”}%Åò¿ ÑIì%|—äÖóæcÀ!éEÀL ¨œ<©É †{]&Z§ÅöçÊÌšyZÙ\Û)sá½Ä7D«¡øTµ›^v |GLÛ–æ”&“áCY$ã1¿*dØ&˜…]M`@É6¸‰>šLœ!zå))(ÀZRJbŠI!PJ*|ý}û£ÏÓÒÓll)aHÂ^6Üž®@ŒMâ%4qÙ_ÞÖ¨w* ,aXpã¦CÝ˦-؉HˆujŒ‡^7]ÓnæÒ1a€¿\´éyÅ©Wª>®H•ͧ2WšED’]bAÅÓÖ1ž¦=µÜY¾#ÄF|ú¾žú}ô?†i‘hD"šj¢€¤Q_@?Ú §ûÿ“ìGì$˜*¢›í“k.„ªþTh(û!u¥¤5L_zÐP•ì'ã€N”è+ÙªX€h~ÈCC©T"P«ÒŽ’¨ «E.ÆZ¦ ’@#4Œ” e¢ÅV’ITˆ­ [g@nÁ¢©ëíºC¦ŠR±Rµ¶V“yƒ®ØÝ©  h‰"–ÚÎÛUª(nîKXˆ=ãÎ|©4'ZÝe­;cAC¤4‘:ZCᆒŒK¤ÑA™u@[BG˜Z7i$y‰)’,`œ˜éX»q€g17š¡vé»mÚ„´a n¿uy^aCóÙÝžY•¥˜•R8EC3Ä»¥+)ˆ‰#X“F¸Fƒ-¦s a²• cGö20;nBPH’8©* …íÝÙréuÚ8ŒÖ3f¡òø€_1|û݆ÚßÁ»ñÞ\§È èÓ»tEm3o8Üf´Ñæ6º½°ùy# ¡ªw`íb“ºÈü¼ŽŸ :j* iÛú»Øù“7³¦'®Šèi¶ ñÕÉælK-*ý݇T¦_³;»õ­!ôiôÌIûÍ„!“T'~ZmžIЦ Bš7wžikË  RˤR7DR:ÖË,¬´eÍváŠÎ5»¦;j5ƒ˜ùk6ÄÅZÉ l´–À¦EBgú„ý›Œ™ß–”bi&™~!˜s™˜®fiHšdÒf“ï[2u-á$¦3̱ÞÙ¡Üy݆g~¯ªmkX¬¤;mØ!eKÛq½¢î1Õ~¦Î©£ÄÕpÖë»)»Éa°ãží¸ 0Xs)Ó”%lë¦eÖ™¤¾dI'ºo]ÌÄ“lL’S'BT¶e}rIÂd¦XK´°/3IÐÉyºÀ†—}ÓI/u¿KC¨Ï Ü'ã(¡&šb(AQÒ3P'jÜscØW)°4µ•5”Ý›vç·wcøåªNPíik#òØkºÉ¼õ;ÌÀ›±Í2‘)MXݹša®“á’o3 &ª°# 9”ÄÅQ2¶PûöÞzâ0ñ‰â0îíÜ—s»ÄÞYß,·øÞÒ‡Û4wg×h‡çoº/ìØ`RÖ~4´¦ZdÈ?4“aÛü.'¡%¨dL¥3LÄ 4™¶´ÁR‘„¤2 d²™óȆW¦Õ>1û}ŽÛ…‰.ë í„»«ÊÛ´’#‘{}÷8ÊõJÍÍ©¬óÖúwÂŒw”ßuÛÜ©ña\9•#ˆ2ücfe¦Lsij'ŠÞÐ…]XÞ5¥Œ#°ÓqQ¨+¸Úq„ßÏ6e¢pýJ;ÅqöŒBD(é§éï}>z÷}¼}"õýA@†U¤Z@ (¡)B&’Š„hJ¦$)UTúÿ‰)~o÷ˆ©üŸÇùb?&ÖÛL@~YÒPSM PkÏB¯n@qò±Î/¶5Eæ1~]Š¥®5DCïqÂQKü‹CÄéðl¤@t4Ÿ–:^6Î.ˆ{·vª˜Åü²ýMZå32&Pc‘\¡ øØ@%f™Ä0[c0О»9ÞH¦rÒ!$ŒEP6ÎÛO…æûí|³ìØüoÍ`ÎÉÓ"-©2ÓòÄ›ª•Å2!•µ @"HŒmJJÛG •dT…™mZH^kÓÍìiaó»ÃϽ½¼ì‰ÎÅö´Vó&´›`ÄQvÑ])£¢Ž“T½«NäJßÅ«{ç·½>‰ðÍ2’®Y?ú)¤„­­!"}öÙ+{¬›Ia@…©BB@ƧݛÆôþg¬ûÌ›„H›VZGuÐYj8Ä€[BYmoê²à¥$@È<¹C¡/7³ ˆê+d) VN’í$Éó” >#ÄÑS ãŠîPÄŒó–6‡ÝÒR+äc B ¬aÏYûìÓ9ua Aå×—±²Îü^ûqŸ+öÌ•s0I˜h„†öæ^ÌÒo™aâ‰4:1›n²«|i§¥ÄΆ;mþ›hÂ09¹c9@ͯϽžûѸœÉ3~94¤ˆîÛº\—­™Üäc]iÒP#ç™hò/q¼ÞH )ì¾ùƒÐâ>JwͧäûØto2jB‰–XÉë¡qŒüí—`óušÖÅse2ÊÕ°Os,çB´7{yíeºWL´e²ßyÝŒ¾Ë7d¤.i^NÛkú ã[k ¤”á3@d5’l\JJ1e)ˆ”Ë |ï:S1®qL5+4ŽºR`@É'F[µøø”™§ZöÊn¸|Å÷+D=Ç¡ ÍABà@ê‡;“Œå›±‰#*þê˜Îج–XV‰)ši%)$ e[ +zºtwe­4éÑKHq³¤)j%´˜X2$ «?Tw߯ñ7õtþ}ûöÏ»·ú{Œý´„ӫ˺˧µ?MÍÞÌ:Eµ¨xª@×2Ñ1••e`£óÚX ”p…—ªÊ~§ÃIäLƒÎ“ Çp¡§&Ñu]ƒuF­Ò¡ È{‡Ï.â:¡lã+d´&YØ:C"½ï{çñ~ú€?Ã*ÐÐÒ”…"”T-5HÒ4ƒBw'ÇRERW@Š'à>¡9ú¿Á¿ÿrE8PXo?Uggplot2/data/luv_colours.rda0000644000177400001440000003535312555445402016016 0ustar murdochusersBZh91AY&SYÂT¢7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà-Gß>ˆÜ‡ ,­>‚æÓíò¾í¶û>ž³‘ÂÌǦívÅÛ|R‡ $*¥DJ {°(ë' ]zo>ˇ»Ü–aï³½{Žl¯_]:I$"IUsßÇÝóÏ®ÒÖ­kf4¶7cNÙª¦‰‚c@M0ƒCAObhÙLÈÄ MÄ혽j:÷˜áÈ<Ü\œ±ÕÎl¾ߊ|‡Ä¶©I˜Âq¦4Å vD,Ïͳ(‰Ì´6è¡8Ë÷³x áfj îáo¬óox’å¾å•Ç^i$=[š×â@C5iWA/ê ‰boI¤ÚÍß®±›pœ·ŸWJhÞTÿhùÍÞóÈÊ.tܾXÛÃåŠÒ"%ª,YÆx?‡m3­Ž»+³òÿuê~ÒÕØ%µ3|‘x.­éŽBôfÖAÎcéu>ž“0AØ›7;·Û}¬™¨É¸»ëÚYu¸´’ðî¹â*Ãj¡%È8î–¤Ú’ƒ¸éèà…¼:£šsWÓû½>²ÛËǸ¢U¤yóO¿ÐÍóìñŽKÌpr+ÆÓ×x¾¢ÎH¶Î b}Xe ‘!‰J±:qÓ{Ï[:ý¢àq8l4([×ëÁƒØÿ,Q²¸Ôë„æñaù†ž $йQµ+ðŠ¤œÜšé÷&)VïH¦Ý¿¥Éxe5ã»ç$_?>˜ÈIoÞ÷ÔV”£QQ„Zù±Ð×ÙC³_H£wb°}ÊTbc¥Òa:Ô6ÅâAˆŽÝîå¯ ‘ÿÿ!«C tÈ¢qËŒAjj¦Ä]g­X‹_»’ÂÀ&¹Ê¿ù‘DIus¿NÕÛºÙSÆÛ›#þ[™Â¢×`ZÖ~µÕ`ñ÷ã ÅÙrQÔf²];†b3ÊNí p•gË‹þ ËÛÕ’±€I)«E0GëN9áäøÏŒíu4if|¯ƒäaŠTHõÂ7Á¼/áý^z=tΚûÝÒÉÙyƒÎ"˜ö+/‰â?G¿¯þU0ÄÅ÷Õë^Ùoýv4÷~¯yŸ\Dœí)†O¥ì˜l∨_/{*®ÒŠ3¼+ÆU¹•hÖC¾ra3TDcÚ"~XŒmqöòÍËÙ®Œ¢¤nö»2cº¥åòK!»ÕåžïÏ%Èìáo uþ·¥…!‹7éÊßÉWëI-Ù„óÄ9 óê£#UgKóÁ`¶XªtÀ’Ôn tYþÓxw3┥(;+3#„|¤ mh,qWÍw®Ä/j®î]nxL™¶2îEŠ0ýýzáÔhó.ÿsïOïÚúÙ’øÙùn4B -‰‰Íé:(ÜÏü•¡7i8³x¾Âou[‹¦ãÒWìGÿªf좉dÔP„æ_ ‘rûÉ-0Äãʘaçù‡Í¾Žò°s-Ö†&ö:4FŒ½@Óîq^ʰ™3O‰²´Ý;M>%nlVåʦµËÞE˶|úßi²¢¬¸’:Öï)¸Âe(…môDþÿ»5Á²ÔÇ’‡É ‹7/Ô‘þLÁûÔcDW*ú¬¨Î”×› eÿÏ ×þ6*ÖõL#(2\£Î;_ãßæç²þ³Å†¢c¦ƒCáÝÂxˆÙƃÂiü¥§Ffub+¹ú~Këu‘ìØ¸¹dÿŸ™Eqí=Ný¾¢c³[ѰÛÖWT!S;Cϱú‘ÓÙÈ+¨«4"ô¸uä8ˆË3ß3šç¥@*ÕQ_hÛkÎo ÎÒ\*§1:õ÷ÊÒÄbí)xt©à†tÌEØähqöÃíp­’cˆéåqAtªˆâÝ9Ãí1®5Uˆ–Ãûp¡êà½~HM½T*ð!ÿ„܈ýVÍø#µe3\¨oh ÛS»\®ˆ³u;=ù‹´À—žÿGæç:NJH÷]ˆ§h#F›?ƒ=ž Žu ‡ÛŸÛ0½7·Ø[þV…dóÈé¡÷tûO3ü,_àw(È«UAá0ù›Æ(>èŧâ4Ô¶|.—›ÕV½¹vç»Áöy¿;VÌÌÌÌÐ×a> 4êGöuâvòÛòäv'>Ö¡Öޤÿô})ˆÈ?éXAG‘q*T¯+fxñãÇri$’I$’I½‰ ßááÀ+ÏEQTÑELÌÌÌÍYw ¬¡½YÜ.Md˜6Š–Ö³V4r¡”ÒN’ñ¥Å”¹Ã¥øË0î1‚à eôb®…4⢢Œ…k~ºèX3àá“ØpG*œXË¢ RÞ"Š(¢‰¢‰™™™™ºÉõBT‘±á\7Í{{I'¦›‡Ð`v¶Ší¸K‡Ä·Œ`Õ •êïg€Îyøq6lÙ³mófÍffffoóG_¶¤¡Å€2È ÅäïQW†&ü.3Xãv+zyß»ë\«ßû6I8¶ý/ÞãçÞ¥h®b|ùóçÓO«žÌÌÌÌ×áÇÈN¼—„aý &Þõˆ¿ÿÜ ßø¼ŽãC´îo½Ö#'Þë´BL™2dÉ“&Lffffm°ªíòbH¾P ”%~'㦎ìO›‚˜)Ω‚'ŠîKÞVyÚ%Œ Ån¾ywü SuTc}:téÕ§33334áŽT‘¨×‡Åï™|bž£[C©ÏW€á# BI(t>ƒ‹æ×Ƕ…Ϭñ<Å•ýì{|õÏYLJ þöE`?Fõ{gLÙÕ=[Muå"„Ý¢O‘äü)ÄíF#À|ÌlR¦ÔŽ4Ws,më“yÝ-E¬×*½K1oª7Uˆ5¯JûSi–J*tÞøà±H8ÃÚïr'þW9­Ëµ+¨ïjë£à,$“Þr©Åè×Uéë™×±¾t8,GØu¸*@°Ð3KòíÒ¤oõcŒwJs¢XSfÌSb±õwF~û©Ÿ´>"´%íLJŽ4”™»ÊUñ3e¾Fñòåú—œóvo‡ë‰}Ž”J=È”WGâ­‡P{üã 6Ø2™ìîœÖä»ÑéÞ*ªÊn.÷äÃA5ßòÿ&]•c\¥e´´ï<Þ^¡»ó¨ç [Ëp¤½˜1ƒ†žÉïCM¸ñ .^÷¾¸îÅ%öF²-¢\¹²™î5áÃç~“[:„f,ö¶w)Jp›išÞ?¼5'¿;7­ÁkúžñäKQôÇž)á_‚ŸIê]6 ä1„§­e;ŨÙ¶%ûY]t¤4|L6rÒî….')"îƒñЇøjÓË$î_Ÿàì5j¡‘÷<å%Ý·½¤SÓH{òT&ËñVç­ñ6£÷8²®ãÏ×ð±û¤1ÍÃbvyç4ÜŠY¾LÅaâ4iQ)ÆUÖʲûë]-â8"5²/ èiO xÕ†S1‡ûïÌzmJLÃám5 ’„½Èå¹]ž¡øíx²âЛ›áãÅ“,¬o-;~UDûG5}…ÎWN0C)öïI°1  R¾ ‰x7¼¤!9ŠAöÅ“<®G‘;2$*PÚÿZ›>„a¤Ê@«…3ê¥S6†Ù”‹ƒHµa[¼j…áUÿG9í«æüøGÖ³ÿÆÎi®~îê~‘e®Rƒè…Ñé“&üÝKBP'šþu²q6Ïì£vÓ’ùbÒtÄ4·/ç‰;Ií!¬¹«Ûþ|u/gFÌô;X_ÚO|f%d‹t°ÄG¡,¦)jý Θ¢éÈ|M—9çÔuÆNåg›áOŸ¯4(Q^ü¹Éräèvߪþ~ ïñû+U[ ÿ¼FÊÆ:Ò‹‘Ò»ev¯[èÛë["mÜ‘©£8MImi?†µ¦gËIÙ… ‹hc<Û>ò™÷Þ¸«Àûs?¼Ó¤Rr<ôp}tÎëŽÓ‚ã4ç[ÿòÅæ°à^3¯¸hyvŠø¬°“—³¿èþ}Ò)^Û[ŸÍ¶îë‚nRCî+LªÙõÑßJTŠª u}ÃCkî¬æDÎ{®¸20†CðÑšò> J~Ǻµ²c¸(ìaZ¥9½éºëò;ÔyÜÝõóð9 [km&}ôÍÍßœ|¹ n­vúW¥¼ûÄ.a“Må÷šÁk{•¾¼™ó1Jñ¦A(­çúۈ쓘 MŽ":;£”†™ök’¦3ëô_m£fØü¦áUðueœÿeo0p~€Æ{5RßÁE¸­ú^nya³²és' z…«•ŒÏg *æà–óEUü}»öõõ¬>YEGùŽDœêý‚à0¬šO*ïX{QVäYR qÅ]ßk¯qïD.ó»û›n1¡é(nŸ¹üÃta©cŸ¥ ×êœ'øl­q[ÞUË>¼\ìRóÓŸÜ-¾…¬êÊvBoŒ¢8]ž/?ÐÜ»[¯WáÅÎÒRü€ÍªÔ ^Î{FÙ:ä6s'Z%=w#vûA”Ú@¿YyÄ<{?1ÞO{ù74×w+ky""B.Ë W5ýa”½™Š(N¬!‹¯e ¡‡&¨ÉûEŠù]›oËŵ̞C_pñ¯‹4+óÃîÑeÖ†ÝîÞO2iK4ª2ûâs_Œ—TŠ^é¡äޱ’éã1W ^~OÀ¹¦m^‡íîË3[Š&“ÇW|Mï)yÀ=nxÉjç…ÙÝPMƒJe™×}¹RU"Ž¿ÏÌmÜ¥z,W‡äÝÈþÚXS¡¼]¶1$…ùÈz^à­ æš‹UûàMM+Jq‹ÆÅ]ÅïGò¥›ÁÉ ®©Ë×ä5˜‰7Dyφ#º<Ë£O{‰‘°XQÊ 3‡\q[-.Y?k{¸aÁ Z$;x†I9£†EÅò¶åDo6c~U 6ìJ´Öknž J•bP ›šêMw†S¸‰$ó Êûáá´ÇLÀGPÞ=Ƕb—¯ËØÃÌ74û»z´LÉ¢ô ü‰E¦ øu]êEj4kZ¶ñ"sµØ&îƒqà,©Ò­—'Ý,,ïezD/'âÿÔ2Bx·4ÓWC»2GHy ­Zã3Ë„u €´BŽ~µÉ<¾"Òáq6ÓAäó?äGXƒvFÐàê[†ÍŽXå÷ø]&æ´>ÆE€Õè-GNá¥DxeÿCõJ¾x7þ­ß'Ãæ7¿zRê>ûF•mMµ±Äªoø uÁ–Dþ4–•¶Ý£ò99@+‰ eˆ:Ö¦LpÚ3oÔŒ; F܈D$“j§…±Ö}Ñ5“ýD‹²;)d Ñö2z£">˜uk0qô<ÕçKh“¼mó=¡˜À…j†XèùM2¾ÇÖÍܱ˜K¡ûË "2¹›4¥Áô?%k¡âÛ#cMkãâáê¡F>Ö,/­ˆfó~ª.1ÅØ ©‘`ç…ëuÂyë$À¿fçñÕQ6“ýEF(*¤rþK§C”OFvû½È¦\6G]‘›Î4$¢ s9ŸÃ`_¼2¢© §"Òj8…g©È1|>ñ Câ;¸8ÿ‰ ûp´ô¯Á4ˆó˜¯5i\.¨&tP#kû|R\€¶û¤3ùG7ÒŃÿcËl£âøõ“ ÆKàûÐ"·ûÛ¦6¿zf ÓlËîímîA^(gáÚx`uI¿îÎTC´¾Fèþ¢á(aTðöî.Ñ«¤å‰Þ™û»¼nž„ûQe_¤ÜP«ÊSúñ³_狳ÂëîsÖ[}¯¼¨Ü¼â«ûŸXö ýÓ©š2·ºÔ¢=XvZ|'÷²ËÛh.Þÿœ´ËòQ:Åæ(wÊ‘ñÊû™/¨§z4âú)0iïµ^bG6ìÓÒ’Õ ·éEq‰Ç)X 0JQf•ngÕ¦ZƒJ3÷Áýô§|]¦³Êjà¦u|º›»=G†\½ªsòY‰O3×äÏÚ-ÀóE}©ªQ•Ò®+>Çœã5Ü0´ âÚ²äÈ ‚—0×¾œ­ßQ*B y½o `àÙ#?§CÕrhÞ €¸ÜÖ¡„W…Þ£B¿ÁHô«Ñ 8C7y6666e.ªK~Ÿòƒ gõŒ‘eÑŒŒTppŠÂBª1QfR1 _â釷è“êf†±N~œÙ{|¶–ÈÑmíõ0qÖ¢·CA€¶¾²ca¤[ü <á}i¡‚)¼½Åh_ âôޱL˜‡Gzl)Ge¬TšºÐŠÅI«­9­J”ãlGëZ‹]L&Ûmöœ…ÁÝ{§‡»æ?Í)E âiÜ*a°ö"œAž[–Hy ŒŸ+VÛScÙí¶{½©ýØšÏÍëM&:8#ÛüŒÌ}ØØØ=]É#“ر±±±¼*‹e€ JEí’ méF0ë/æÂд)@³ÀÌ#…1D®$«8E”ö Q ßøi„¤îhmv1l·—J÷hÐEê]+»º‚Œ‡Ñ{Ú‡o —àsûR°Gן‘³“À’,‚2ØDX¢Jˆ ‹#QEÒÌ6[My² §Q ؤ?×Ãyªõ¯¦¦÷;lÅô¹¯ºcfko„5.8*Ke5Èü3a¸èù›Œ ¯\Ì É1#—3rLHåÌÀÜŽeÁ ncMïîo7«ü¨Œ”µ°œ¶âЖzù¬´¯¼<ò#ò ¨øŠA„/ ")_[‹Q¢G™b%ÖÖä}ₚ¢<½ÃÝ÷¯ï–˜\ÞàÐû,¦ÏºÕiìí4‡€^ûν¹Øö{bçm6›C|2* Ÿ,èÅ턎s:%Ìó!®Eœ0¯,ˆ‚"ˆ d1b#>ŒDoîís¸8¶ÛÃà N b"""Œ+…ívˆ¾Œ6†‹çÔÄ ¦ölÚ¢€½&…pO&YÛrÊ7­³àw ;ìØòü\)ž—°pÉó"ìC ¸â €_¢VCYÀ½õ®8páÇ®áÄV¡n©Á42oÏÄAD¾L_˜a]½º’ÂX3ñ”V3 0$ŸANXbª)1±]=Å«$ HVÁ×Û*Mò Ã7Æ„½Öäüã9å]ÿ „šKÚ¤¹¶’Æ%„ YŽuçô×cÝÈ/[3$ÌÉ32C‰Œƒ€HZä_œM!H±+È GhŽGNàNÔ‘ÿňÂù˜øÙ­ ½ávûœ±¼ÍŸhfïBô<9ùz_fkÏ/Ù×6mxM_ÀÎmõœN{XÛm¼‹8.ä28páÃ"#ø,»‘ÏCm·H Ä"ýðÁDÆ興ˆ‡uèÀ R“ ¶Ü¹àôÐÅ»n¨ÃÀ½‚ÛmJpdƒº†] )Fçöw g Æ®£›ï&óDyØÐ~OªÙL¶tÉ6¡iˆÍ§×14Ï}€ZÃSž ÎÛg•m¶Û}cµ£ ¼Ócci¶œCŽZ‰Qš&H\Š¢äijUͶÛwÒ8$BA¤ÑS'G ¶Þ ˆhüÞÃ'ÑÜ_Aô6v”c¹ƒÊIàöüu€¯“Ò´Z×ËAWe¹W¤³[w¢È/S\€C6ÚCi ¤4kQÓ $âFÁ’²Xj$6ž7xPƒ@iú~ÃRÚÿäô•ÆÛ,bâ êáq¸±qR”¥)RUlƒbèHx?¡ðämÈl§£“ãipm?Fzùêõš–e˜F³¦Ó{OÆn;Æ¿¯¾°ŸTÈi¶×“¶Çüå}“…÷§1Üà.·Ýñažä§"ÌVÛm½ ­ë‘î~Y¸>¦t:‡Ïôw#Ißœ<ÄdÏëðµ×†)ë´#­Ë›VY Ò–ÓƒŠÊ€c%>Ì hšIëúþOÍ:£}‘ÂdèžÒ>£”ÆÇ¤ùæ×éjK,nèPÛm¶Ûm¶ÛmÄ(m¶Ûm¶Ûm¸… ¶Ûm¶Ûm·¡¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ÛoÈ?ÃÁèÏ¡øO£àâ#½HÁÅè’_\Œ®Qÿ®§ß¶ÛgA(Ô£Šû¿×ÅöŽXÏÁOˆ6QÇ0ÁAì[5¼Ä1ä:Å÷j2†¢·À{P¢ Óå¦jtéšÅnÏ~c6ÑÁÌÛø}wÁ4nƒ Ènæ©ã™!ÊÀ™vÕ0%:ØaT9ǸÆQ‹ë&Ò›x2 çñNÔ§dçƒKOSšAzcY JM Ü'5ÞÞ[=ñdcõÇ·Mç®ÖMF‚ò`˜»RzDþíˆrGÚ4°Ï‘ p+Ôƒ‹‡üàØùSäÉ–5$më¥BÃDPàS1ñú½%òÏÇ.˨EFMÖwÍýMÞ³LR˜×„küU„§ållÆï\•4vå†CŽpJ±W›uݸYGѨ.`SöaÏé^ ¶Ø"áŶ tÍØ¢j±?5ul0hóðÁ71ƒ×dÑÆßwjô¢,ðS!YeÝu}òSìgC&@µtoú^Ÿ¤åænƒÖÙñÕ0$íÛ‘K}š2Á™¼Y% y½×DZÞÄL ôÛ]«»_ þtúd”ìêGø›¬›Uplöãén“uñl³:ÛÌŒ5 ägh¬]ÃuuØP_nPýX´,AnT ERä³%„Ÿ_½§œëä3+ÐÎB}žÁ¯ p>¥ž éÁhŽ˜a¡Ñ¸¤cØås†\Ò``9ãÒ ú­ÅbâÙí›U Ë4ÏgC80hŽ~<"Än_o|IÂìâ¼=L>ü"r5ñ ÔHÌ ¢ymíþŒHt›@|Ä£[ì[†¶ìH<¡u\`·saùÿˆm_Öx…Ýžž¦: 0ÛKÚ"U+ HkAÿNŽOlzq1Þ›„å'ìQýŽŒµžÃ”*;¶ß/½p†Ñ1Üû"².*[“tæ“b@ fôô//q"¥äO2jùâEDª2<3¥Îøžr`Kà‘úó ”æb A'^¹~©}‘=´kå• ›E‚Ò]j3ÛGY¿›Šœk‡]2í­®ƒ 肜xèø~²^;|Ââ6x«íZö#ÒπȠ‹U:6A"§jž`B¹Vh ‘6§\\eíB©îé“nYãÿˆ*¶˜[–{véXtë‹„©¢(Ùk2ÿF¦†Owè‚Êÿä7RH‚öüì&o‰sð½\çðÑ€v‰Ržö9qP—ýæ 4z‰õÝ+ry¬TŠ4šóV¬”p}†ç ^fY:ùö-`md/›¢o¾tœ®mL¸š"¦nmNyœUÑ¡ã)m« Y´ÜçkœÝû^«ÿBŠ!ÉšpÍ2ìHz9„Ù®ëÇê¶ yÏL1HoHáÝîzL…É“ä…sûÜ”.ܡؖ"ö& !œ.ÖX§Aæö®ÖÊËsnê[Ü%V’ë—T­ÊÜ ÖÔØÕ A}v.bìu |zìÔÝ|kç4v¨NHº±¶·KícgÅ‘™ÈL… Ô¸n4æà~ÁQXèôÿ¨ïz°Ø“<ÅhÂsðˆŒ³÷sõ%ó`` äÂEHu9Pº¸'§G¬$,’@£*Þ+b¨fw N+Ž=ÏêÆ4.2—CfÀÑèà\F<Ž~¬òªp#æ‘þLÈö}¥‰çfNClÝžÒ3ãïsœFìŽS5°y4î<žìfÜÄùÈ웤²O¬´é·ÁÀkèüWÄÅY{ÇíU)*!gÜ©Ï{wKØó¤¬NÌ{ØdGÃ64ƒú×b(|ñþ‚}ÆâóU_â+ç’¦ÆцÙàìà¯ÿ·k\ÞXÙ £ßË;3ûåPhÞ#¿l/fmˆÉØÂ7·Ax“~ðþÛM¿A@ü Ùå¼ßmiP±üB>WÛïÉ÷úV™Þ+Ÿ˜“öþgo?‹|[å;½Ž‚ÓA'AUYº¦Å²oìZ?Ü™gS”¾1µB·õÿ­ÆŸ>,ÜS „ÃÛ‡šk[PhaÍ¥ÏVý’j;ƒW½r4gѺ:dµsMñYêuÙ†,ÑYºVµ"u²/¸šc ih`PV´ùh›ÅZrqÔ_ÕÓDÇ_ðžŸû%” ný«õGÚ¾¥euÕ ¶Ä&vª$©>ö&÷ø‰¼<†â24BªëÊTµëAÀè©…’‡©6¢­e>¥w„tT³ÛKÖ;{­ËœÉ}‘_È(.‘—ûÁ²Ë`³š¹¶³b$]]vç.z•¯ÁÓåØÁ±o .+ócO¿]š+Þ¶<ß8f 5÷‰ÖÛŽ=çê9ÞOœ¿QU\µ•^ƒ˜ÀË–²+ Ë_ÅÀ×ð¬ºWç.{d[<°ü£ØN­ª(¼ßóÂÈÄ ¹EEù:ßÈÂ5-Åï"dàS‹ä"Ÿ5DesE÷ŠéJã´/§Vk ¾`üæ„Ëg9HÆ&p¨E:ÜÂÏdÝ*®úYDÊÔû±Mòl”H÷Ä"¢$“’²w†ð3¼Úb9/ 4O ÆbBd1›l*/ñÕç†î¸a«ºèòᦫ‡X@ÙˆåOÏÌtœíXTÊ5€¥f/é²Ö©Œ­-V‘¶ÛåˆÂL¨¹8¬l ºÍ'þEªÚ5¦W¤5æ”jÙV¤6iv~¨?i¯}¢q§p Ä­œ}«žÖ‚2’}¼P܆Ð8|¤?€Ê¿ lºh} *iuÃ{&é„aøý5FÀ­ÌF¶YD[Î þòÞBþø5ïìû„žP8§puÐ6çÕÉÓõ„’.vÞkÁç¢ysÄðéxbîYß³Jí8#o‡C;}GÃy_¸+í ×¥ÿ9ÖQ½k{‘Óž¨LYVò÷[4qç–b®=dFlé6¯l1a_W °›ÕiÅèÊLÑ ö }ÂÇ2Y;@†N{%׺'C2PÊ«î7·ÒÐ?ÐÅ,\ Ò‘úŽýË‘©£TOqdõå€îFÐ÷¨G…™ÐrV=£ã<Œ¸¶-©Ea¥„kCº‘¾p^Å…ºÎª¶c/ÒUõrº­‰>-1x h¼¦£;}{ÓªF’ÖÖvƒOƒ¢;Y‘Ä|×¶€>'Ez\[¤óàTÔY91dë'ó›œcùK>wΊðµE?GØxíîûéŽÕúæ›Ò•Eè=ŒIØùbñZ¨þ©>ÌÒQ£—{‡ñF¨sûÊ-íñ˜¹oU¥Oê5#5Ó[p6+§ŸcÿÛ–¨ãÚªÓòÌ€fÔXÚp»zšÞû§}0^G˜(sŠÆ/¤c¬l×Àj2‡¾øºdÅ\À®>M’xŒ÷ [N7¡•G&A.ÖŠÑØ³«È€ðxˆ^øy®°kNËûZI,¹® ü~«¾ç‰?Ç·-Zm\,îI—íˆK¼ò<;A¨²_¬bÑÎx¹hxÂÔ7>Ùf€Žõ‹CUã™A )þ¨ÓUVÂ,´Ò¶?è·ˆRbÿÞsSúiZöz ´QŸS²(ñ ?SìæTŸx÷’ίW“–“ýŽuó#8çð ÍòÑæ4 Ÿ¤Ðk3_CS©á.3Y`å ‡Ú³äè ¢è`Ìž_]&qùLüïĽmãñ18Dæ>‹¤:ƒ¸'¬¾ö~i~œ£Ñ{Ï—#\Ö ,æú Ó§ûG•Ê禽_³•>GážÄkï~ížÔgp×Îþm¶×]È}‹÷“ì,±¿Þt}T§ XçR-²÷é ®Ã$3Ñœ¥“³|™õ©Øg/P±Up—6YÇ àü³û!c‹L8>)M b¬¢ÝNÃa-J“[UƒXùIàžbÖâ²6"vböq•…Ô›å'L’Z.î:²‹;ÂǬÙ2÷mt€Åõ³àÌŸ ÔÁø b åí(ú"â§µò°N¹”7B‹ë*ʱ ;¥8w‡¥‘{0þZ¶ÕS‰M³ØF°mÙ„3nç’Áù ÿ^J„}’›ô`å#»ÞStÏ´ñZ:—témÏõ6ÞKh›ƒ‚â9ëºxT …K™ÙŠa(Ô`o+U„Œæ5eCêòúÎÞ‹–€=W¼Ö¹Ñ‹è±y¬ášÌøf—SÓõ£4IÍL·uŠýÆmŸŠn3†<57î3+½©ñ\±8Ié8.]¾ÎÅC<9¹åwo*Ķ›ríÍ_UJ6º‰¿™¾õM˜¯)ÖüHípc"hx`Ø”1úí^„ǶªNvD¦¥û<…²{n-DìO¡Ó![–™j{GÓ5‚؈(‹Œ´~¯Ë÷%#ÄÎöÙÁ±‹ú%× ÞDx‰æY3ܲ…$ð|>¾f·Ä¾'5ÒÓ«µ‡L‚Û3ÕÈZÏÎs·R2½‘YCP¹Þ>¹É¢}Ëîz|½Ti>ÏŽ¾ƒaº˜ÄomÝØÑAá¤Hï*²&þªJUR³Ã¶db˜ò/ÃFÆ*vÂÖ_)aÁy]•KŽ˜Éþó¬«'õ àÁÃÆLSžj¶³Á´ïœÞ+a*jRë â8ß\™nÉ?B ¦ÞÔ)¨Ý"¶Zw^»¡¢Ú˯\˜î¹ÿ ‹¦…Î-n‡¹Úþ}B&7&>e§+yCûåÝ]Ð6ñŒ±f\ÏàŸû\?ß~î·ÏÎzÞÓuÌj·üÞûú<Sºø‡Åk>l‰o™gP@¡£vô樎¹‡Î¨öÉ;oïúSŒ=PÍ—ÿ&byÑ#[°AÀQ¶•ªio#‡ùÿˆøŒ®¾š©è÷¹ö¾W“°­µÆsY OûÁ×`ƒyŽ®ÏØA§°ÏTÜ©51ó_ßÃí(#Ö­¨ú|l|«ðnˆôÐùdå ŸJ1­»Ò‘†áÅ.¨ . ÛÖ%’ ü‰1ÑØ„­Ó¨eP ÏÐ,AÖIñSGŽÐ™¬k>Ž J¢¢õéqåéçN+ª<ÝEc¨VâBY(ÆÕÂc+\lÊÚ²Ùå¾ßÅj0˜‘ƒÅpF‘œÍ£†¬s"E_ÏÀV‡áÜOűuä¼i_«1¬Fˆ Иm’²¯.I° ˳§ïÖ¼Y?Ô…‚D+Ì^•©‡;±ÆÖÇ!ãû4ð꣜AÐIH­Ð:¬TpÿËCî%ò]¼––Î%-éG°¿d¹é—Š]JO¦Í‘) ÛÒM6\Y·áß…0hÁª\è¹hz`ß±ö" Ƥ±CfÙ4•ìCLÁã‹nƒö…^ ØaÝ.ò—I¾ù«ºŒª>l›PÚD™Ï‹\p†ÍøÆX6h‘Gd¾ûbÍ¢è Þ<É@UÝ3¼*àL­Î×Ö4Àtl™Q5k¬pPVöÝí$?ñ½žP!(Gli›1’·GW¶×Þ5™žÒi4ÐÖSì/.€îÞ+¼ž®Š°‘'WâEšcµhÃÃÌò»…ÝæfºÁ û»÷+f'Ÿéa3Ší3ª&—B+æ‰å_¿nªÒ¯[ó`9{B¼-âŸéÌ ºVê¦ïñßcHŸ àExiÑBþȱú˜i›²óø:pnk_>¥Å"K%Š9)Y›Š×âS¡yN²>–BO¦‰×é§¡`¾êDaÖ…^3Ù€5ò$½Ë~„Qû5ê§yöÚž…À•~þÀl˜æ6ÿ±t¨¬g¾æ†ÖnÜQè,ï>êH`ó+ Ü„5%‰òŠ7ʺ0kÌgY %ß”y·!M§»jáE27ú…<~¬ýøÉÁ¡.'>IWy¿>¬ú÷³9ÊÔö_lãr¡$F ””S´¨c ãk½Ãدÿœ’Àß EÇ/Ðû»F‰Á­1Ï8´/Äñ'¼FÚ4=áìS·=ö3ÿ÷ñŽêë}˜ÆÇ,@ˆ>ß½J ãØ!,Ë­“³X[İAâMœèÇ‚ó¦®ÁDÚG>HGTmž/”óTÇí  œ\%"s”™Œôo¬jÉfuÏ€tZKä~û…äÕùZj¸J5šý&[»tˆ¿:˜îØü{„¬¢ÍCÕw© ð̶ô8 aû}H°CÁÚ—ë85“cƒNuWCâô™É4‡ÈÉ©½”·¿˜l ‚œñùÛw‡£üD³ãå?¾ÑÛì·bQÔ¢¯Û±^¼ÂËÄí³Rz´~N5®Åƒ/2 ì-ɩ޼ÆÜW/AÀ*lˆ7¼û’t«ÙúÝ)øP YjXàÎÚ¤})F –Š*\ó™­¦æ²Û…sÙǕ׹ ±)dý9nOcå5ÃvL¡Fôž}€š6lŽÒØ>ѳ?Aß©oݨcŽb +x€g¹ãàQ*.y"â-DˆJ£8~çs…ìW☙P9’u̘ºŸw,È>ƒN#RÔ'Ÿ¯ø­TÎÅÖ‚f:€ÁœlÝ0×”V*ÀÎ<ø@à¨Ií5äÖE+¢ã0ü¨§E ¼\L0¶í¯¡» #f¨Þë8Z`ú7‹³¥“"\¦Ë€¨šäô—Í™m§oàQåw6‘¾BLñ¬‡îž~;<•Ý_8jºÁU¨¸>~èg GÉ]½ŒT$øÝý;•á)Ìç¹ô/_®áó,SÚ¬ë|õ§R£/F…*…ܰÃå–ti¢ß5ÇðŸ`Ðs(ï¥aôM;“вJÏçu¯+b<&=y‡,éækÊ^nŒÂ$5]¼&ŽAšýW½‡ƒƒtå)ÀOm½¾‰ª¬?Ö<ƒ¨ðd–,du6£ët§Q4Q7Ç~ñ:ÈqÆŸã<LOKÄ ·™ËvÇl«b£>‹ÿâ²ßÀæ k¥Ï>Úý'‡ø€ašžn©^6G¿Ñ4`mAï èAZá²è5\2ñ¯½¾ÒÏ(e!°ß¨Üa+&òŽxœV­L8ÑÈ@~Rå.‘ë2q¢’}Â/'¯UI«3§˜‰cÎÁó2f2ÐØ•8ZpŒ9ý €Ð~ŽÑOÂI~“ŠgbYb­8xí|ƼçhQß5ª‚ªFÞôÝ* fL‘'Ëc<ã­ê<+lÂê4Ëðú+ËÎÊBõD=Àfwù8ÑÉß·`ãÓXZ½pÆ’—wCAÓ`B·“*Ò?ÇÏ¢ö™ò—?¾cÀ:pëmoRç,Dã[Ñô•/*õæ’{〬œª9>r³¹“œé4kÃøTídž¬œûß©˜ñú*ZÊ¢¾*]¾êë!8n g.Y/Y³‡äN®ÖŒg€gq’=ýý³ƒ]y#¾as§%®¼±[#²5\ÉNË"›LMP{á¡#êÝUüÌ6È$‹†oÚKaîA‘ìãì…Æpö)ÐD}¼…ªW9ÍÝFCYÿžk` ËV·døÊ„w»k7}½ØÜöôö5ZÜžJDê×½b·P÷ŸikÜ ¿‰\|Þæs½P›—Æ›ëþÀ¬Šw_Èï"3ÛÂnAüÝà¬-AA!ñÃ^6–LÈ­úN@œz†>øu•GÒ>ï~ý“ê¢ÌÞ[u·Ž‘el«§YðŠPÛ6"]kŒ:Óar^ÖÓ=¨©`økÞ;sØZ:r¤À8¿¾Ðæx$I«Q=¥á>ÜÁ:Û²;Þwµ„á(àêwutxÖM$»'ê·3k(à=Ba ÿ±„[{%)<²ž(ùM ¿r$±iCh¶9g»áo9²K †HüšEn¬KÛ×Z™¨FZ(åýÕ4ÇÑÏñ˜Î1jC—êÕ‘I)ó‡Ñ6z¸lÙø»’)„†¥(ggplot2/R/0000755000177400001440000000000013031512434012217 5ustar murdochusersggplot2/R/geom-map.r0000644000177400001440000000760513005734320014115 0ustar murdochusers#' @include geom-polygon.r NULL #' Polygons from a reference map #' #' This is pure annotation, so does not affect position scales. #' #' @section Aesthetics: #' \aesthetics{geom}{map} #' #' @export #' @param map Data frame that contains the map coordinates. This will #' typically be created using \code{\link{fortify}} on a spatial object. #' It must contain columns \code{x} or \code{long}, \code{y} or #' \code{lat}, and \code{region} or \code{id}. #' @inheritParams layer #' @inheritParams geom_point #' @examples #' # When using geom_polygon, you will typically need two data frames: #' # one contains the coordinates of each polygon (positions), and the #' # other the values associated with each polygon (values). An id #' # variable links the two together #' #' ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) #' #' values <- data.frame( #' id = ids, #' value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5) #' ) #' #' positions <- data.frame( #' id = rep(ids, each = 4), #' x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, #' 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), #' y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, #' 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) #' ) #' #' ggplot(values) + #' geom_map(aes(map_id = id), map = positions) + #' expand_limits(positions) #' ggplot(values, aes(fill = value)) + #' geom_map(aes(map_id = id), map = positions) + #' expand_limits(positions) #' ggplot(values, aes(fill = value)) + #' geom_map(aes(map_id = id), map = positions) + #' expand_limits(positions) + ylim(0, 3) #' #' # Better example #' crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests) #' crimesm <- reshape2::melt(crimes, id = 1) #' if (require(maps)) { #' states_map <- map_data("state") #' ggplot(crimes, aes(map_id = state)) + #' geom_map(aes(fill = Murder), map = states_map) + #' expand_limits(x = states_map$long, y = states_map$lat) #' #' last_plot() + coord_map() #' ggplot(crimesm, aes(map_id = state)) + #' geom_map(aes(fill = value), map = states_map) + #' expand_limits(x = states_map$long, y = states_map$lat) + #' facet_wrap( ~ variable) #' } geom_map <- function(mapping = NULL, data = NULL, stat = "identity", ..., map, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { # Get map input into correct form stopifnot(is.data.frame(map)) if (!is.null(map$lat)) map$y <- map$lat if (!is.null(map$long)) map$x <- map$long if (!is.null(map$region)) map$id <- map$region stopifnot(all(c("x", "y", "id") %in% names(map))) layer( data = data, mapping = mapping, stat = stat, geom = GeomMap, position = PositionIdentity, show.legend = show.legend, inherit.aes = inherit.aes, params = list( map = map, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomMap <- ggproto("GeomMap", GeomPolygon, draw_panel = function(data, panel_scales, coord, map) { # Only use matching data and map ids common <- intersect(data$map_id, map$id) data <- data[data$map_id %in% common, , drop = FALSE] map <- map[map$id %in% common, , drop = FALSE] # Munch, then set up id variable for polygonGrob - # must be sequential integers coords <- coord_munch(coord, map, panel_scales) coords$group <- coords$group %||% coords$id grob_id <- match(coords$group, unique(coords$group)) # Align data with map data_rows <- match(coords$id[!duplicated(grob_id)], data$map_id) data <- data[data_rows, , drop = FALSE] polygonGrob(coords$x, coords$y, default.units = "native", id = grob_id, gp = gpar( col = data$colour, fill = alpha(data$fill, data$alpha), lwd = data$size * .pt ) ) }, required_aes = c("map_id") ) ggplot2/R/coord-cartesian-.r0000644000177400001440000000707313006177223015550 0ustar murdochusers#' Cartesian coordinates #' #' The Cartesian coordinate system is the most familiar, and common, type of #' coordinate system. Setting limits on the coordinate system will zoom the #' plot (like you're looking at it with a magnifying glass), and will not #' change the underlying data like setting limits on a scale will. #' #' @param xlim,ylim Limits for the x and y axes. #' @param expand If \code{TRUE}, the default, adds a small expansion factor to #' the limits to ensure that data and axes don't overlap. If \code{FALSE}, #' limits are taken exactly from the data or \code{xlim}/\code{ylim}. #' @export #' @examples #' # There are two ways of zooming the plot display: with scales or #' # with coordinate systems. They work in two rather different ways. #' #' p <- ggplot(mtcars, aes(disp, wt)) + #' geom_point() + #' geom_smooth() #' p #' #' # Setting the limits on a scale converts all values outside the range to NA. #' p + scale_x_continuous(limits = c(325, 500)) #' #' # Setting the limits on the coordinate system performs a visual zoom. #' # The data is unchanged, and we just view a small portion of the original #' # plot. Note how smooth continues past the points visible on this plot. #' p + coord_cartesian(xlim = c(325, 500)) #' #' # By default, the same expansion factor is applied as when setting scale #' # limits. You can set the limits precisely by setting expand = FALSE #' p + coord_cartesian(xlim = c(325, 500), expand = FALSE) #' #' # Simiarly, we can use expand = FALSE to turn off expansion with the #' # default limits #' p + coord_cartesian(expand = FALSE) #' #' # You can see the same thing with this 2d histogram #' d <- ggplot(diamonds, aes(carat, price)) + #' stat_bin2d(bins = 25, colour = "white") #' d #' #' # When zooming the scale, the we get 25 new bins that are the same #' # size on the plot, but represent smaller regions of the data space #' d + scale_x_continuous(limits = c(0, 1)) #' #' # When zooming the coordinate system, we see a subset of original 50 bins, #' # displayed bigger #' d + coord_cartesian(xlim = c(0, 1)) coord_cartesian <- function(xlim = NULL, ylim = NULL, expand = TRUE) { ggproto(NULL, CoordCartesian, limits = list(x = xlim, y = ylim), expand = expand ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordCartesian <- ggproto("CoordCartesian", Coord, is_linear = function() TRUE, distance = function(x, y, scale_details) { max_dist <- dist_euclidean(scale_details$x.range, scale_details$y.range) dist_euclidean(x, y) / max_dist }, transform = function(data, scale_details) { rescale_x <- function(data) rescale(data, from = scale_details$x.range) rescale_y <- function(data) rescale(data, from = scale_details$y.range) data <- transform_position(data, rescale_x, rescale_y) transform_position(data, squish_infinite, squish_infinite) }, train = function(self, scale_details) { train_cartesian <- function(scale_details, limits, name) { if (self$expand) { expand <- expand_default(scale_details) } else { expand <- c(0, 0) } if (is.null(limits)) { range <- scale_details$dimension(expand) } else { range <- range(scale_details$transform(limits)) range <- expand_range(range, expand[1], expand[2]) } out <- scale_details$break_info(range) out$arrange <- scale_details$axis_order() names(out) <- paste(name, names(out), sep = ".") out } c( train_cartesian(scale_details$x, self$limits$x, "x"), train_cartesian(scale_details$y, self$limits$y, "y") ) } ) ggplot2/R/grob-absolute.r0000644000177400001440000000206712556003735015166 0ustar murdochusers#' Absolute grob #' #' This grob has fixed dimensions and position. #' #' It's still experimental #' #' @keywords internal absoluteGrob <- function(grob, width = NULL, height = NULL, xmin = NULL, ymin = NULL, vp = NULL) { gTree( children = grob, width = width, height = height, xmin = xmin, ymin = ymin, vp = vp, cl = "absoluteGrob" ) } #' @export #' @method grobHeight absoluteGrob grobHeight.absoluteGrob <- function(x) { x$height %||% grobHeight(x$children) } #' @export #' @method grobWidth absoluteGrob grobWidth.absoluteGrob <- function(x) { x$width %||% grobWidth(x$children) } #' @export #' @method grobX absoluteGrob grobX.absoluteGrob <- function(x, theta) { if (!is.null(x$xmin) && theta == "west") return(x$xmin) grobX(x$children, theta) } #' @export #' @method grobY absoluteGrob grobY.absoluteGrob <- function(x, theta) { if (!is.null(x$ymin) && theta == "south") return(x$ymin) grobY(x$children, theta) } #' @export #' @method grid.draw absoluteGrob grid.draw.absoluteGrob <- function(x, recording = TRUE) { NextMethod() } ggplot2/R/annotation-logticks.r0000644000177400001440000002071712751141452016406 0ustar murdochusers#' Annotation: log tick marks #' #' This annotation adds log tick marks with diminishing spacing. #' These tick marks probably make sense only for base 10. #' #' @param base the base of the log (default 10) #' @param sides a string that controls which sides of the plot the log ticks appear on. #' It can be set to a string containing any of \code{"trbl"}, for top, right, #' bottom, and left. #' @param short a \code{\link[grid]{unit}} object specifying the length of the #' short tick marks #' @param mid a \code{\link[grid]{unit}} object specifying the length of the #' middle tick marks. In base 10, these are the "5" ticks. #' @param long a \code{\link[grid]{unit}} object specifying the length of the #' long tick marks. In base 10, these are the "1" (or "10") ticks. #' @param scaled is the data already log-scaled? This should be \code{TRUE} #' (default) when the data is already transformed with \code{log10()} or when #' using \code{scale_y_log10}. It should be \code{FALSE} when using #' \code{coord_trans(y = "log10")}. #' @param colour Colour of the tick marks. #' @param size Thickness of tick marks, in mm. #' @param linetype Linetype of tick marks (\code{solid}, \code{dashed}, etc.) #' @param alpha The transparency of the tick marks. #' @param color An alias for \code{colour}. #' @param ... Other parameters passed on to the layer #' #' @export #' @seealso \code{\link{scale_y_continuous}}, \code{\link{scale_y_log10}} for log scale #' transformations. #' @seealso \code{\link{coord_trans}} for log coordinate transformations. #' #' @examples #' # Make a log-log plot (without log ticks) #' a <- ggplot(msleep, aes(bodywt, brainwt)) + #' geom_point(na.rm = TRUE) + #' scale_x_log10( #' breaks = scales::trans_breaks("log10", function(x) 10^x), #' labels = scales::trans_format("log10", scales::math_format(10^.x)) #' ) + #' scale_y_log10( #' breaks = scales::trans_breaks("log10", function(x) 10^x), #' labels = scales::trans_format("log10", scales::math_format(10^.x)) #' ) + #' theme_bw() #' #' a + annotation_logticks() # Default: log ticks on bottom and left #' a + annotation_logticks(sides = "lr") # Log ticks for y, on left and right #' a + annotation_logticks(sides = "trbl") # All four sides #' #' # Hide the minor grid lines because they don't align with the ticks #' a + annotation_logticks(sides = "trbl") + theme(panel.grid.minor = element_blank()) #' #' # Another way to get the same results as 'a' above: log-transform the data before #' # plotting it. Also hide the minor grid lines. #' b <- ggplot(msleep, aes(log10(bodywt), log10(brainwt))) + #' geom_point(na.rm = TRUE) + #' scale_x_continuous(name = "body", labels = scales::math_format(10^.x)) + #' scale_y_continuous(name = "brain", labels = scales::math_format(10^.x)) + #' theme_bw() + theme(panel.grid.minor = element_blank()) #' #' b + annotation_logticks() #' #' # Using a coordinate transform requires scaled = FALSE #' t <- ggplot(msleep, aes(bodywt, brainwt)) + #' geom_point() + #' coord_trans(x = "log10", y = "log10") + #' theme_bw() #' t + annotation_logticks(scaled = FALSE) #' #' # Change the length of the ticks #' a + annotation_logticks( #' short = unit(.5,"mm"), #' mid = unit(3,"mm"), #' long = unit(4,"mm") #' ) annotation_logticks <- function(base = 10, sides = "bl", scaled = TRUE, short = unit(0.1, "cm"), mid = unit(0.2, "cm"), long = unit(0.3, "cm"), colour = "black", size = 0.5, linetype = 1, alpha = 1, color = NULL, ...) { if (!is.null(color)) colour <- color layer( data = dummy_data(), mapping = NULL, stat = StatIdentity, geom = GeomLogticks, position = PositionIdentity, show.legend = FALSE, inherit.aes = FALSE, params = list( base = base, sides = sides, scaled = scaled, short = short, mid = mid, long = long, colour = colour, size = size, linetype = linetype, alpha = alpha, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomLogticks <- ggproto("GeomLogticks", Geom, extra_params = "", handle_na = function(data, params) { data }, draw_panel = function(data, panel_scales, coord, base = 10, sides = "bl", scaled = TRUE, short = unit(0.1, "cm"), mid = unit(0.2, "cm"), long = unit(0.3, "cm")) { ticks <- list() # Convert these units to numbers so that they can be put in data frames short <- convertUnit(short, "cm", valueOnly = TRUE) mid <- convertUnit(mid, "cm", valueOnly = TRUE) long <- convertUnit(long, "cm", valueOnly = TRUE) if (grepl("[b|t]", sides)) { # Get positions of x tick marks xticks <- calc_logticks( base = base, minpow = floor(panel_scales$x.range[1]), maxpow = ceiling(panel_scales$x.range[2]), start = 0, shortend = short, midend = mid, longend = long ) if (scaled) xticks$value <- log(xticks$value, base) names(xticks)[names(xticks) == "value"] <- "x" # Rename to 'x' for coordinates$transform xticks <- coord$transform(xticks, panel_scales) # Make the grobs if (grepl("b", sides)) { ticks$x_b <- with(data, segmentsGrob( x0 = unit(xticks$x, "native"), x1 = unit(xticks$x, "native"), y0 = unit(xticks$start, "cm"), y1 = unit(xticks$end, "cm"), gp = gpar(col = alpha(colour, alpha), lty = linetype, lwd = size * .pt) )) } if (grepl("t", sides)) { ticks$x_t <- with(data, segmentsGrob( x0 = unit(xticks$x, "native"), x1 = unit(xticks$x, "native"), y0 = unit(1, "npc") - unit(xticks$start, "cm"), y1 = unit(1, "npc") - unit(xticks$end, "cm"), gp = gpar(col = alpha(colour, alpha), lty = linetype, lwd = size * .pt) )) } } if (grepl("[l|r]", sides)) { yticks <- calc_logticks( base = base, minpow = floor(panel_scales$y.range[1]), maxpow = ceiling(panel_scales$y.range[2]), start = 0, shortend = short, midend = mid, longend = long ) if (scaled) yticks$value <- log(yticks$value, base) names(yticks)[names(yticks) == "value"] <- "y" # Rename to 'y' for coordinates$transform yticks <- coord$transform(yticks, panel_scales) # Make the grobs if (grepl("l", sides)) { ticks$y_l <- with(data, segmentsGrob( y0 = unit(yticks$y, "native"), y1 = unit(yticks$y, "native"), x0 = unit(yticks$start, "cm"), x1 = unit(yticks$end, "cm"), gp = gpar(col = alpha(colour, alpha), lty = linetype, lwd = size * .pt) )) } if (grepl("r", sides)) { ticks$y_r <- with(data, segmentsGrob( y0 = unit(yticks$y, "native"), y1 = unit(yticks$y, "native"), x0 = unit(1, "npc") - unit(yticks$start, "cm"), x1 = unit(1, "npc") - unit(yticks$end, "cm"), gp = gpar(col = alpha(colour, alpha), lty = linetype, lwd = size * .pt) )) } } gTree(children = do.call("gList", ticks)) }, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = 1) ) # Calculate the position of log tick marks # Returns data frame with: # - value: the position of the log tick on the data axis, for example 1, 2, ..., 9, 10, 20, ... # - start: on the other axis, start position of the line (usually 0) # - end: on the other axis, end position of the line (for example, .1, .2, or .3) calc_logticks <- function(base = 10, ticks_per_base = base - 1, minpow = 0, maxpow = minpow + 1, start = 0, shortend = .1, midend = .2, longend = .3) { # Number of blocks of tick marks reps <- maxpow - minpow # For base 10: 1, 2, 3, ..., 7, 8, 9, 1, 2, ... ticknums <- rep(seq(1, base - 1, length.out = ticks_per_base), reps) # For base 10: 1, 1, 1, ..., 1, 1, 1, 2, 2, ... (for example) powers <- rep(seq(minpow, maxpow - 1), each = ticks_per_base) ticks <- ticknums * base ^ powers ticks <- c(ticks, base ^ maxpow) # Add the last tick mark # Set all of the ticks short tickend <- rep(shortend, length(ticks)) # Get the position within each cycle, 0, 1, 2, ..., 8, 0, 1, 2. ... cycleIdx <- ticknums - 1 # Set the "major" ticks long tickend[cycleIdx == 0] <- longend # Where to place the longer tick marks that are between each base # For base 10, this will be at each 5 longtick_after_base <- floor(ticks_per_base/2) tickend[ cycleIdx == longtick_after_base ] <- midend tickdf <- data.frame(value = ticks, start = start, end = tickend) return(tickdf) } ggplot2/R/labeller.r0000644000177400001440000004732413006367034014204 0ustar murdochusers#' Useful labeller functions #' #' Labeller functions are in charge of formatting the strip labels of #' facet grids and wraps. Most of them accept a \code{multi_line} #' argument to control whether multiple factors (defined in formulae #' such as \code{~first + second}) should be displayed on a single #' line separated with commas, or each on their own line. #' #' \code{label_value()} only displays the value of a factor while #' \code{label_both()} displays both the variable name and the factor #' value. \code{label_context()} is context-dependent and uses #' \code{label_value()} for single factor facetting and #' \code{label_both()} when multiple factors are #' involved. \code{label_wrap_gen()} uses \code{\link[base]{strwrap}()} #' for line wrapping. #' #' \code{label_parsed()} interprets the labels as plotmath #' expressions. \code{\link{label_bquote}()} offers a more flexible #' way of constructing plotmath expressions. See examples and #' \code{\link{bquote}()} for details on the syntax of the #' argument. #' #' @section Writing New Labeller Functions: #' #' Note that an easy way to write a labeller function is to #' transform a function operating on character vectors with #' \code{\link{as_labeller}()}. #' #' A labeller function accepts a data frame of labels (character #' vectors) containing one column for each factor. Multiple factors #' occur with formula of the type \code{~first + second}. #' #' The return value must be a rectangular list where each 'row' #' characterises a single facet. The list elements can be either #' character vectors or lists of plotmath expressions. When multiple #' elements are returned, they get displayed on their own new lines #' (i.e., each facet gets a multi-line strip of labels). #' #' To illustrate, let's say your labeller returns a list of two #' character vectors of length 3. This is a rectangular list because #' all elements have the same length. The first facet will get the #' first elements of each vector and display each of them on their #' own line. Then the second facet gets the second elements of each #' vector, and so on. #' #' If it's useful to your labeller, you can retrieve the \code{type} #' attribute of the incoming data frame of labels. The value of this #' attribute reflects the kind of strips your labeller is dealing #' with: \code{"cols"} for columns and \code{"rows"} for rows. Note #' that \code{\link{facet_wrap}()} has columns by default and rows #' when the strips are switched with the \code{switch} option. The #' \code{facet} attribute also provides metadata on the labels. It #' takes the values \code{"grid"} or \code{"wrap"}. #' #' For compatibility with \code{\link{labeller}()}, each labeller #' function must have the \code{labeller} S3 class. #' #' @param labels Data frame of labels. Usually contains only one #' element, but facetting over multiple factors entails multiple #' label variables. #' @param multi_line Whether to display the labels of multiple factors #' on separate lines. #' @param sep String separating variables and values. #' @param width Maximum number of characters before wrapping the strip. #' @family facet #' @seealso \code{\link{labeller}()}, \code{\link{as_labeller}()}, #' \code{\link{label_bquote}()} #' @examples #' mtcars$cyl2 <- factor(mtcars$cyl, labels = c("alpha", "beta", "gamma")) #' p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() #' #' # Displaying only the values #' p + facet_grid(. ~ cyl) #' p + facet_grid(. ~ cyl, labeller = label_value) #' #' \donttest{ #' # Displaying both the values and the variables #' p + facet_grid(. ~ cyl, labeller = label_both) #' #' # Displaying only the values or both the values and variables #' # depending on whether multiple factors are facetted over #' p + facet_grid(am ~ vs+cyl, labeller = label_context) #' #' # Interpreting the labels as plotmath expressions #' p + facet_grid(. ~ cyl2) #' p + facet_grid(. ~ cyl2, labeller = label_parsed) #' p + facet_wrap(~vs + cyl2, labeller = label_parsed) #' } #' @name labellers NULL collapse_labels_lines <- function(labels) { out <- do.call("Map", c(list(paste, sep = ", "), labels)) list(unname(unlist(out))) } #' @rdname labellers #' @export label_value <- function(labels, multi_line = TRUE) { labels <- lapply(labels, as.character) if (multi_line) { labels } else { collapse_labels_lines(labels) } } # Should ideally not have the 'function' class here, but this is # currently needed for Roxygen class(label_value) <- c("function", "labeller") # Helper for label_both label_variable <- function(labels, multi_line = TRUE) { if (multi_line) { row <- as.list(names(labels)) } else { row <- list(paste(names(labels), collapse = ", ")) } lapply(row, rep, nrow(labels) %||% length(labels[[1]])) } #' @rdname labellers #' @export label_both <- function(labels, multi_line = TRUE, sep = ": ") { value <- label_value(labels, multi_line = multi_line) variable <- label_variable(labels, multi_line = multi_line) if (multi_line) { out <- vector("list", length(value)) for (i in seq_along(out)) { out[[i]] <- paste(variable[[i]], value[[i]], sep = sep) } } else { value <- do.call("paste", c(value, sep = ", ")) variable <- do.call("paste", c(variable, sep = ", ")) out <- Map(paste, variable, value, sep = sep) out <- list(unname(unlist(out))) } out } class(label_both) <- c("function", "labeller") #' @rdname labellers #' @export label_context <- function(labels, multi_line = TRUE, sep = ": ") { if (length(labels) == 1) { label_value(labels, multi_line) } else { label_both(labels, multi_line) } } class(label_context) <- c("function", "labeller") #' @rdname labellers #' @export label_parsed <- function(labels, multi_line = TRUE) { labels <- label_value(labels, multi_line = multi_line) if (multi_line) { # Using unname() and c() to return a cleaner and easily testable # object structure lapply(unname(labels), lapply, function(values) { c(parse(text = as.character(values))) }) } else { lapply(labels, function(values) { values <- paste0("list(", values, ")") lapply(values, function(expr) c(parse(text = expr))) }) } } class(label_parsed) <- c("function", "labeller") find_names <- function(expr) { if (is.call(expr)) { unlist(lapply(expr[-1], find_names)) } else if (is.name(expr)) { as.character(expr) } } #' Label with mathematical expressions #' #' \code{label_bquote()} offers a flexible way of labelling #' facet rows or columns with plotmath expressions. Backquoted #' variables will be replaced with their value in the facet. #' #' @param rows Backquoted labelling expression for rows. #' @param cols Backquoted labelling expression for columns. #' @param default Default labeller function for the rows or the #' columns when no plotmath expression is provided. #' @seealso \link{labellers}, \code{\link{labeller}()}, #' @export #' @examples #' # The variables mentioned in the plotmath expression must be #' # backquoted and referred to by their names. #' p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() #' p + facet_grid(vs ~ ., labeller = label_bquote(alpha ^ .(vs))) #' p + facet_grid(. ~ vs, labeller = label_bquote(cols = .(vs) ^ .(vs))) #' p + facet_grid(. ~ vs + am, labeller = label_bquote(cols = .(am) ^ .(vs))) label_bquote <- function(rows = NULL, cols = NULL, default = label_value) { cols_quoted <- substitute(cols) rows_quoted <- substitute(rows) has_warned <- FALSE fun <- function(labels) { quoted <- resolve_labeller(rows_quoted, cols_quoted, labels) if (is.null(quoted)) { return(label_value(labels)) } evaluate <- function(...) { params <- list(...) # Mapping `x` to the first variable for backward-compatibility, # but only if there is no facetted variable also named `x` if ("x" %in% find_names(quoted) && !"x" %in% names(params)) { if (!has_warned) { warning("Referring to `x` is deprecated, use variable name instead", call. = FALSE) # The function is called for each facet so this avoids # multiple warnings has_warned <<- TRUE } params$x <- params[[1]] } eval(substitute(bquote(expr, params), list(expr = quoted))) } list(do.call("Map", c(list(f = evaluate), labels))) } structure(fun, class = "labeller") } globalVariables(c("x", ".")) #' @rdname labellers #' @export label_wrap_gen <- function(width = 25, multi_line = TRUE) { fun <- function(labels) { labels <- label_value(labels, multi_line = multi_line) lapply(labels, function(x) { x <- strwrap(x, width = width, simplify = FALSE) vapply(x, paste, character(1), collapse = "\n") }) } structure(fun, class = "labeller") } is_labeller <- function(x) inherits(x, "labeller") resolve_labeller <- function(rows, cols, labels) { if (is.null(cols) && is.null(rows)) { stop("Supply one of rows or cols", call. = FALSE) } if (attr(labels, "facet") == "wrap") { # Return either rows or cols for facet_wrap() if (!is.null(cols) && !is.null(rows)) { stop("Cannot supply both rows and cols to facet_wrap()", call. = FALSE) } cols %||% rows } else { if (attr(labels, "type") == "rows") { rows } else { cols } } } #' Coerce to labeller function #' #' This transforms objects to labeller functions. Used internally by #' \code{\link{labeller}()}. #' @param x Object to coerce to a labeller function. If a named #' character vector, it is used as a lookup table before being #' passed on to \code{default}. If a non-labeller function, it is #' assumed it takes and returns character vectors and is applied to #' the labels. If a labeller, it is simply applied to the labels. #' @param multi_line Whether to display the labels of multiple factors #' on separate lines. This is passed to the labeller function. #' @param default Default labeller to process the labels produced by #' lookup tables or modified by non-labeller functions. #' @seealso \code{\link{labeller}()}, \link{labellers} #' @keywords internal #' @export #' @examples #' p <- ggplot(mtcars, aes(disp, drat)) + geom_point() #' p + facet_wrap(~am) #' #' # Rename labels on the fly with a lookup character vector #' to_string <- as_labeller(c(`0` = "Zero", `1` = "One")) #' p + facet_wrap(~am, labeller = to_string) #' #' # Quickly transform a function operating on character vectors to a #' # labeller function: #' appender <- function(string, suffix = "-foo") paste0(string, suffix) #' p + facet_wrap(~am, labeller = as_labeller(appender)) #' #' # If you have more than one facetting variable, be sure to dispatch #' # your labeller to the right variable with labeller() #' p + facet_grid(cyl ~ am, labeller = labeller(am = to_string)) as_labeller <- function(x, default = label_value, multi_line = TRUE) { force(x) fun <- function(labels) { labels <- lapply(labels, as.character) # Dispatch multi_line argument to the labeller function instead of # supplying it to the labeller call because some labellers do not # support it. default <- dispatch_args(default, multi_line = multi_line) if (is_labeller(x)) { x <- dispatch_args(x, multi_line = multi_line) x(labels) } else if (is.function(x)) { default(lapply(labels, x)) } else if (is.character(x)) { default(lapply(labels, function(label) x[label])) } else { default(labels) } } structure(fun, class = "labeller") } #' Construct labelling specification #' #' This function makes it easy to assign different labellers to #' different factors. The labeller can be a function or it can be a #' named character vectors that will serve as a lookup table. #' #' In case of functions, if the labeller has class \code{labeller}, it #' is directly applied on the data frame of labels. Otherwise, it is #' applied to the columns of the data frame of labels. The data frame #' is then processed with the function specified in the #' \code{.default} argument. This is intended to be used with #' functions taking a character vector such as #' \code{\link[Hmisc]{capitalize}}. #' #' @param ... Named arguments of the form \code{variable = #' labeller}. Each labeller is passed to \code{\link{as_labeller}()} #' and can be a lookup table, a function taking and returning #' character vectors, or simply a labeller function. #' @param .rows,.cols Labeller for a whole margin (either the rows or #' the columns). It is passed to \code{\link{as_labeller}()}. When a #' margin-wide labeller is set, make sure you don't mention in #' \code{...} any variable belonging to the margin. #' @param keep.as.numeric Deprecated. All supplied labellers and #' on-labeller functions should be able to work with character #' labels. #' @param .multi_line Whether to display the labels of multiple #' factors on separate lines. This is passed to the labeller #' function. #' @param .default Default labeller for variables not specified. Also #' used with lookup tables or non-labeller functions. #' @family facet labeller #' @seealso \code{\link{as_labeller}()}, \link{labellers} #' @return A labeller function to supply to \code{\link{facet_grid}} #' for the argument \code{labeller}. #' @export #' @examples #' \donttest{ #' p1 <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() #' #' # You can assign different labellers to variables: #' p1 + facet_grid(vs + am ~ gear, #' labeller = labeller(vs = label_both, am = label_value)) #' #' # Or whole margins: #' p1 + facet_grid(vs + am ~ gear, #' labeller = labeller(.rows = label_both, .cols = label_value)) #' #' # You can supply functions operating on strings: #' capitalize <- function(string) { #' substr(string, 1, 1) <- toupper(substr(string, 1, 1)) #' string #' } #' p2 <- ggplot(msleep, aes(x = sleep_total, y = awake)) + geom_point() #' p2 + facet_grid(vore ~ conservation, labeller = labeller(vore = capitalize)) #' #' # Or use character vectors as lookup tables: #' conservation_status <- c( #' cd = "Conservation Dependent", #' en = "Endangered", #' lc = "Least concern", #' nt = "Near Threatened", #' vu = "Vulnerable", #' domesticated = "Domesticated" #' ) #' ## Source: http://en.wikipedia.org/wiki/Wikipedia:Conservation_status #' #' p2 + facet_grid(vore ~ conservation, labeller = labeller( #' .default = capitalize, #' conservation = conservation_status #' )) #' #' # In the following example, we rename the levels to the long form, #' # then apply a wrap labeller to the columns to prevent cropped text #' msleep$conservation2 <- plyr::revalue(msleep$conservation, #' conservation_status) #' #' p2 %+% msleep + facet_grid(vore ~ conservation2) #' p2 %+% msleep + #' facet_grid(vore ~ conservation2, #' labeller = labeller(conservation2 = label_wrap_gen(10)) #' ) #' #' # labeller() is especially useful to act as a global labeller. You #' # can set it up once and use it on a range of different plots with #' # different facet specifications. #' #' global_labeller <- labeller( #' vore = capitalize, #' conservation = conservation_status, #' conservation2 = label_wrap_gen(10), #' .default = label_both #' ) #' #' p2 + facet_grid(vore ~ conservation, labeller = global_labeller) #' p2 + facet_wrap(~vore, labeller = global_labeller) #' p2 %+% msleep + facet_wrap(~conservation2, labeller = global_labeller) #' } labeller <- function(..., .rows = NULL, .cols = NULL, keep.as.numeric = NULL, .multi_line = TRUE, .default = label_value) { if (!is.null(keep.as.numeric)) { .Deprecated(old = "keep.as.numeric") } dots <- list(...) .default <- as_labeller(.default) function(labels) { if (!is.null(.rows) || !is.null(.cols)) { margin_labeller <- resolve_labeller(.rows, .cols, labels) } else { margin_labeller <- NULL } if (is.null(margin_labeller)) { labellers <- lapply(dots, as_labeller) } else { margin_labeller <- as_labeller(margin_labeller, default = .default, multi_line = .multi_line) # Check that variable-specific labellers do not overlap with # margin-wide labeller if (any(names(dots) %in% names(labels))) { stop("Conflict between .", attr(labels, "type"), " and ", paste(names(dots), collapse = ", "), call. = FALSE) } } # Apply relevant labeller if (is.null(margin_labeller)) { # Apply named labeller one by one out <- lapply(names(labels), function(label) { if (label %in% names(labellers)) { labellers[[label]](labels[label])[[1]] } else { .default(labels[label])[[1]] } }) names(out) <- names(labels) if (.multi_line) { out } else { collapse_labels_lines(out) } } else { margin_labeller(labels) } } } build_strip <- function(label_df, labeller, theme, horizontal) { labeller <- match.fun(labeller) # No labelling data, so return empty row/col if (empty(label_df)) { return(if (horizontal) { list(top = NULL, bottom = NULL) } else { list(left = NULL, right = NULL) }) } # Create matrix of labels labels <- lapply(labeller(label_df), cbind) labels <- do.call("cbind", labels) if (horizontal) { grobs <- apply(labels, c(1, 2), ggstrip, theme = theme, horizontal = horizontal) heights <- unit(apply(grobs, 2, max_height), "cm") grobs <- apply(grobs, 1, function(strips) { gtable_matrix("strip", matrix(strips, ncol = 1), unit(1, "null"), heights, clip = "on") }) list( top = grobs, bottom = grobs ) } else { grobs_right <- apply(labels, c(1, 2), ggstrip, theme = theme, horizontal = horizontal) grobs_right <- grobs_right[, rev(seq_len(ncol(grobs_right))), drop = FALSE] widths <- unit(apply(grobs_right, 2, max_width), "cm") grobs_right <- apply(grobs_right, 1, function(strips) { gtable_matrix("strip", matrix(strips, nrow = 1), widths, unit(1, "null"), clip = "on") }) theme$strip.text.y$angle <- adjust_angle(theme$strip.text.y$angle) grobs_left <- apply(labels, c(1, 2), ggstrip, theme = theme, horizontal = horizontal) widths <- unit(apply(grobs_left, 2, max_width), "cm") grobs_left <- apply(grobs_left, 1, function(strips) { gtable_matrix("strip", matrix(strips, nrow = 1), widths, unit(1, "null"), clip = "off") }) list( left = grobs_left, right = grobs_right ) } } # Grob for strip labels ggstrip <- function(text, horizontal = TRUE, theme) { text_theme <- if (horizontal) "strip.text.x" else "strip.text.y" if (is.list(text)) text <- text[[1]] element <- calc_element(text_theme, theme) if (inherits(element, "element_blank")) return(zeroGrob()) gp <- gpar(fontsize = element$size, col = element$colour, fontfamily = element$family, fontface = element$face, lineheight = element$lineheight) label <- stripGrob(text, element$hjust, element$vjust, element$angle, margin = element$margin, gp = gp, debug = element$debug) ggname("strip", absoluteGrob( gList( element_render(theme, "strip.background"), label ), width = grobWidth(label), height = grobHeight(label) )) } # Helper to adjust angle of switched strips adjust_angle <- function(angle) { if (is.null(angle)) { -90 } else if ((angle + 180) > 360) { angle - 180 } else { angle + 180 } } # Check for old school labeller check_labeller <- function(labeller) { labeller <- match.fun(labeller) is_deprecated <- all(c("variable", "value") %in% names(formals(labeller))) if (is_deprecated) { old_labeller <- labeller labeller <- function(labels) { Map(old_labeller, names(labels), labels) } warning("The labeller API has been updated. Labellers taking `variable`", "and `value` arguments are now deprecated. See labellers documentation.", call. = FALSE) } labeller } ggplot2/R/geom-spoke.r0000644000177400001440000000333013005734503014453 0ustar murdochusers#' Line segments parameterised by location, direction and distance #' #' This is a polar parameterisation of \code{\link{geom_segment}}. It is #' useful when you have variables that describe direction and distance. #' #' @section Aesthetics: #' \aesthetics{geom}{spoke} #' #' @inheritParams layer #' @inheritParams geom_segment #' @export #' @examples #' df <- expand.grid(x = 1:10, y=1:10) #' df$angle <- runif(100, 0, 2*pi) #' df$speed <- runif(100, 0, sqrt(0.1 * df$x)) #' #' ggplot(df, aes(x, y)) + #' geom_point() + #' geom_spoke(aes(angle = angle), radius = 0.5) #' #' ggplot(df, aes(x, y)) + #' geom_point() + #' geom_spoke(aes(angle = angle, radius = speed)) geom_spoke <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, geom = GeomSpoke, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @export #' @rdname geom_spoke #' @usage NULL stat_spoke <- function(...) { message("stat_spoke is deprecated, please use geom_spoke") geom_spoke(...) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomSpoke <- ggproto("GeomSpoke", GeomSegment, setup_data = function(data, params) { data$radius <- data$radius %||% params$radius data$angle <- data$angle %||% params$angle transform(data, xend = x + cos(angle) * radius, yend = y + sin(angle) * radius ) }, required_aes = c("x", "y", "angle", "radius") ) ggplot2/R/scale-shape.r0000644000177400001440000000324113006124312014563 0ustar murdochusers#' Scales for shapes, aka glyphs #' #' \code{scale_shape} maps discrete variables to six easily discernible shapes. #' If you have more than six levels, you will get a warning message, and the #' seventh and subsequence levels will not appear on the plot. Use #' \code{\link{scale_shape_manual}} to supply your own values. You can not map #' a continuous variable to shape. #' #' @param solid Should the shapes be solid, \code{TRUE}, or hollow, #' \code{FALSE}? #' @inheritParams scale_x_discrete #' @rdname scale_shape #' @export #' @examples #' dsmall <- diamonds[sample(nrow(diamonds), 100), ] #' #' (d <- ggplot(dsmall, aes(carat, price)) + geom_point(aes(shape = cut))) #' d + scale_shape(solid = TRUE) # the default #' d + scale_shape(solid = FALSE) #' d + scale_shape(name = "Cut of diamond") #' #' # To change order of levels, change order of #' # underlying factor #' levels(dsmall$cut) <- c("Fair", "Good", "Very Good", "Premium", "Ideal") #' #' # Need to recreate plot to pick up new data #' ggplot(dsmall, aes(price, carat)) + geom_point(aes(shape = cut)) #' #' # Show a list of available shapes #' df_shapes <- data.frame(shape = 0:24) #' ggplot(df_shapes, aes(0, 0, shape = shape)) + #' geom_point(aes(shape = shape), size = 5, fill = 'red') + #' scale_shape_identity() + #' facet_wrap(~shape) + #' theme_void() scale_shape <- function(..., solid = TRUE) { discrete_scale("shape", "shape_d", shape_pal(solid), ...) } #' @rdname scale_shape #' @export #' @usage NULL scale_shape_discrete <- scale_shape #' @rdname scale_shape #' @export #' @usage NULL scale_shape_continuous <- function(...) { stop("A continuous variable can not be mapped to shape", call. = FALSE) } ggplot2/R/scale-size.r0000644000177400001440000000563313006124406014450 0ustar murdochusers#' Scales for area or radius #' #' \code{scale_size} scales area, \code{scale_radius} scales radius. The size #' aesthetic is most commonly used for points and text, and humans perceive #' the area of points (not their radius), so this provides for optimal #' perception. \code{scale_size_area} ensures that a value of 0 is mapped #' to a size of 0. #' #' @name scale_size #' @inheritParams continuous_scale #' @param range a numeric vector of length 2 that specifies the minimum and #' maximum size of the plotting symbol after transformation. #' @seealso \code{\link{scale_size_area}} if you want 0 values to be mapped #' to points with size 0. #' @examples #' p <- ggplot(mpg, aes(displ, hwy, size = hwy)) + #' geom_point() #' p #' p + scale_size("Highway mpg") #' p + scale_size(range = c(0, 10)) #' #' # If you want zero value to have zero size, use scale_size_area: #' p + scale_size_area() #' #' # This is most useful when size is a count #' ggplot(mpg, aes(class, cyl)) + #' geom_count() + #' scale_size_area() #' #' # If you want to map size to radius (usually bad idea), use scale_radius #' p + scale_radius() NULL #' @rdname scale_size #' @export #' @usage NULL scale_size_continuous <- function(name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, range = c(1, 6), trans = "identity", guide = "legend") { continuous_scale("size", "area", area_pal(range), name = name, breaks = breaks, labels = labels, limits = limits, trans = trans, guide = guide) } #' @rdname scale_size #' @export scale_radius <- function(name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, range = c(1, 6), trans = "identity", guide = "legend") { continuous_scale("size", "radius", rescale_pal(range), name = name, breaks = breaks, labels = labels, limits = limits, trans = trans, guide = guide) } #' @rdname scale_size #' @export scale_size <- scale_size_continuous #' @rdname scale_size #' @export #' @usage NULL scale_size_discrete <- function(..., range = c(2, 6)) { warning("Using size for a discrete variable is not advised.", call. = FALSE) discrete_scale("size", "size_d", function(n) { area <- seq(range[1] ^ 2, range[2] ^ 2, length.out = n) sqrt(area) }, ...) } #' @param ... Other arguments passed on to \code{\link{continuous_scale}} #' to control name, limits, breaks, labels and so forth. #' @param max_size Size of largest points. #' @export #' @rdname scale_size scale_size_area <- function(..., max_size = 6) { continuous_scale("size", "area", palette = abs_area(max_size), rescaler = rescale_max, ...) } #' @rdname scale_size #' @export #' @usage NULL scale_size_datetime <- function() { scale_size_continuous(trans = "time") } #' @rdname scale_size #' @export #' @usage NULL scale_size_date <- function() { scale_size_continuous(trans = "date") } ggplot2/R/stat-quantile.r0000644000177400001440000000547312654706605015225 0ustar murdochusers#' @param quantiles conditional quantiles of y to calculate and display #' @param formula formula relating y variables to x variables #' @param method Quantile regression method to use. Currently only supports #' \code{\link[quantreg]{rq}}. #' @inheritParams layer #' @inheritParams geom_point #' @section Computed variables: #' \describe{ #' \item{quantile}{quantile of distribution} #' } #' @export #' @rdname geom_quantile stat_quantile <- function(mapping = NULL, data = NULL, geom = "quantile", position = "identity", ..., quantiles = c(0.25, 0.5, 0.75), formula = NULL, method = "rq", method.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatQuantile, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( quantiles = quantiles, formula = formula, method = method, method.args = method.args, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatQuantile <- ggproto("StatQuantile", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, quantiles = c(0.25, 0.5, 0.75), formula = NULL, xseq = NULL, method = "rq", method.args = list(), lambda = 1, na.rm = FALSE) { try_require("quantreg", "stat_quantile") if (is.null(formula)) { if (method == "rqss") { try_require("MatrixModels", "stat_quantile") formula <- eval(substitute(y ~ qss(x, lambda = lambda)), list(lambda = lambda)) } else { formula <- y ~ x } message("Smoothing formula not specified. Using: ", deparse(formula)) } if (is.null(data$weight)) data$weight <- 1 if (is.null(xseq)) { xmin <- min(data$x, na.rm = TRUE) xmax <- max(data$x, na.rm = TRUE) xseq <- seq(xmin, xmax, length.out = 100) } grid <- data.frame(x = xseq) method <- match.fun(method) plyr::ldply(quantiles, quant_pred, data = data, method = method, formula = formula, weight = weight, grid = grid, method.args = method.args) } ) quant_pred <- function(quantile, data, method, formula, weight, grid, method.args = method.args) { args <- c(list(quote(formula), data = quote(data), tau = quote(quantile), weights = quote(weight)), method.args) model <- do.call(method, args) grid$y <- stats::predict(model, newdata = grid) grid$quantile <- quantile grid$group <- paste(data$group[1], quantile, sep = "-") grid } ggplot2/R/fortify.r0000644000177400001440000000154612746415036014106 0ustar murdochusers#' Fortify a model with data. #' #' Rather than using this function, I now recommend using the \pkg{broom} #' package, which implements a much wider range of methods. \code{fortify} #' may be deprecated in the future. #' #' @seealso \code{\link{fortify.lm}} #' @param model model or other R object to convert to data frame #' @param data original dataset, if needed #' @param ... other arguments passed to methods #' @export fortify <- function(model, data, ...) UseMethod("fortify") #' @export fortify.data.frame <- function(model, data, ...) model #' @export fortify.NULL <- function(model, data, ...) waiver() #' @export fortify.function <- function(model, data, ...) model #' @export fortify.default <- function(model, data, ...) { stop( "ggplot2 doesn't know how to deal with data of class ", paste(class(model), collapse = "/"), call. = FALSE ) } ggplot2/R/stat-sum.r0000644000177400001440000000244312776737412014206 0ustar murdochusers#' @inheritParams layer #' @inheritParams geom_point #' @section Computed variables: #' \describe{ #' \item{n}{number of observations at position} #' \item{prop}{percent of points in that panel at that position} #' } #' @export #' @rdname geom_count stat_sum <- function(mapping = NULL, data = NULL, geom = "point", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatSum, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSum <- ggproto("StatSum", Stat, default_aes = aes(size = ..n.., weight = 1), required_aes = c("x", "y"), compute_panel = function(data, scales) { if (is.null(data$weight)) data$weight <- 1 group_by <- setdiff(intersect(names(data), .all_aesthetics), "weight") counts <- plyr::count(data, group_by, wt_var = "weight") counts <- plyr::rename(counts, c(freq = "n"), warn_missing = FALSE) counts$prop <- stats::ave(counts$n, counts$group, FUN = prop.table) counts } ) ggplot2/R/fortify-lm.r0000644000177400001440000000523713006406757014515 0ustar murdochusers#' Supplement the data fitted to a linear model with model fit statistics. #' #' If you have missing values in your model data, you may need to refit #' the model with \code{na.action = na.exclude}. #' #' @return The original data with extra columns: #' \item{.hat}{Diagonal of the hat matrix} #' \item{.sigma}{Estimate of residual standard deviation when #' corresponding observation is dropped from model} #' \item{.cooksd}{Cooks distance, \code{\link{cooks.distance}}} #' \item{.fitted}{Fitted values of model} #' \item{.resid}{Residuals} #' \item{.stdresid}{Standardised residuals} #' @param model linear model #' @param data data set, defaults to data used to fit model #' @param ... not used by this method #' @keywords internal #' @export #' @examples #' mod <- lm(mpg ~ wt, data = mtcars) #' head(fortify(mod)) #' head(fortify(mod, mtcars)) #' #' plot(mod, which = 1) #' #' ggplot(mod, aes(.fitted, .resid)) + #' geom_point() + #' geom_hline(yintercept = 0) + #' geom_smooth(se = FALSE) #' #' ggplot(mod, aes(.fitted, .stdresid)) + #' geom_point() + #' geom_hline(yintercept = 0) + #' geom_smooth(se = FALSE) #' #' ggplot(fortify(mod, mtcars), aes(.fitted, .stdresid)) + #' geom_point(aes(colour = factor(cyl))) #' #' ggplot(fortify(mod, mtcars), aes(mpg, .stdresid)) + #' geom_point(aes(colour = factor(cyl))) #' #' plot(mod, which = 2) #' ggplot(mod) + #' stat_qq(aes(sample = .stdresid)) + #' geom_abline() #' #' plot(mod, which = 3) #' ggplot(mod, aes(.fitted, sqrt(abs(.stdresid)))) + #' geom_point() + #' geom_smooth(se = FALSE) #' #' plot(mod, which = 4) #' ggplot(mod, aes(seq_along(.cooksd), .cooksd)) + #' geom_col() #' #' plot(mod, which = 5) #' ggplot(mod, aes(.hat, .stdresid)) + #' geom_vline(size = 2, colour = "white", xintercept = 0) + #' geom_hline(size = 2, colour = "white", yintercept = 0) + #' geom_point() + geom_smooth(se = FALSE) #' #' ggplot(mod, aes(.hat, .stdresid)) + #' geom_point(aes(size = .cooksd)) + #' geom_smooth(se = FALSE, size = 0.5) #' #' plot(mod, which = 6) #' ggplot(mod, aes(.hat, .cooksd)) + #' geom_vline(xintercept = 0, colour = NA) + #' geom_abline(slope = seq(0, 3, by = 0.5), colour = "white") + #' geom_smooth(se = FALSE) + #' geom_point() #' #' ggplot(mod, aes(.hat, .cooksd)) + #' geom_point(aes(size = .cooksd / .hat)) + #' scale_size_area() fortify.lm <- function(model, data = model$model, ...) { infl <- stats::influence(model, do.coef = FALSE) data$.hat <- infl$hat data$.sigma <- infl$sigma data$.cooksd <- stats::cooks.distance(model, infl) data$.fitted <- stats::predict(model) data$.resid <- stats::resid(model) data$.stdresid <- stats::rstandard(model, infl) data } ggplot2/R/layer.r0000644000177400001440000002520513005650160013522 0ustar murdochusers#' Create a new layer #' #' A layer is a combination of data, stat and geom with a potential position #' adjustment. Usually layers are created using \code{geom_*} or \code{stat_*} #' calls but it can also be created directly using this function. #' #' @export #' @inheritParams geom_point #' @param mapping Set of aesthetic mappings created by \code{\link{aes}} or #' \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the #' default), it is combined with the default mapping at the top level of the #' plot. You must supply \code{mapping} if there is no plot mapping. #' @param data The data to be displayed in this layer. There are three #' options: #' #' If \code{NULL}, the default, the data is inherited from the plot #' data as specified in the call to \code{\link{ggplot}}. #' #' A \code{data.frame}, or other object, will override the plot #' data. All objects will be fortified to produce a data frame. See #' \code{\link{fortify}} for which variables will be created. #' #' A \code{function} will be called with a single argument, #' the plot data. The return value must be a \code{data.frame.}, and #' will be used as the layer data. #' @param geom The geometric object to use display the data #' @param stat The statistical transformation to use on the data for this #' layer, as a string. #' @param position Position adjustment, either as a string, or the result of #' a call to a position adjustment function. #' @param show.legend logical. Should this layer be included in the legends? #' \code{NA}, the default, includes if any aesthetics are mapped. #' \code{FALSE} never includes, and \code{TRUE} always includes. #' @param inherit.aes If \code{FALSE}, overrides the default aesthetics, #' rather than combining with them. This is most useful for helper functions #' that define both data and aesthetics and shouldn't inherit behaviour from #' the default plot specification, e.g. \code{\link{borders}}. #' @param check.aes,check.param If \code{TRUE}, the default, will check that #' supplied parameters and aesthetics are understood by the \code{geom} or #' \code{stat}. Use \code{FALSE} to suppress the checks. #' @param params Additional parameters to the \code{geom} and \code{stat}. #' @param subset DEPRECATED. An older way of subsetting the dataset used in a #' layer. #' @keywords internal #' @examples #' # geom calls are just a short cut for layer #' ggplot(mpg, aes(displ, hwy)) + geom_point() #' # shortcut for #' ggplot(mpg, aes(displ, hwy)) + #' layer(geom = "point", stat = "identity", position = "identity", #' params = list(na.rm = FALSE) #' ) #' #' # use a function as data to plot a subset of global data #' ggplot(mpg, aes(displ, hwy)) + #' layer(geom = "point", stat = "identity", position = "identity", #' data = head, params = list(na.rm = FALSE) #' ) #' layer <- function(geom = NULL, stat = NULL, data = NULL, mapping = NULL, position = NULL, params = list(), inherit.aes = TRUE, check.aes = TRUE, check.param = TRUE, subset = NULL, show.legend = NA) { if (is.null(geom)) stop("Attempted to create layer with no geom.", call. = FALSE) if (is.null(stat)) stop("Attempted to create layer with no stat.", call. = FALSE) if (is.null(position)) stop("Attempted to create layer with no position.", call. = FALSE) # Handle show_guide/show.legend if (!is.null(params$show_guide)) { warning("`show_guide` has been deprecated. Please use `show.legend` instead.", call. = FALSE) show.legend <- params$show_guide params$show_guide <- NULL } if (!is.logical(show.legend) || length(show.legend) != 1) { warning("`show.legend` must be a logical vector of length 1.", call. = FALSE) show.legend <- FALSE } data <- fortify(data) if (!is.null(mapping) && !inherits(mapping, "uneval")) { stop("Mapping must be created by `aes()` or `aes_()`", call. = FALSE) } if (is.character(geom)) geom <- find_subclass("Geom", geom, parent.frame()) if (is.character(stat)) stat <- find_subclass("Stat", stat, parent.frame()) if (is.character(position)) position <- find_subclass("Position", position, parent.frame()) # Special case for na.rm parameter needed by all layers if (is.null(params$na.rm)) { params$na.rm <- FALSE } # Split up params between aesthetics, geom, and stat params <- rename_aes(params) aes_params <- params[intersect(names(params), geom$aesthetics())] geom_params <- params[intersect(names(params), geom$parameters(TRUE))] stat_params <- params[intersect(names(params), stat$parameters(TRUE))] all <- c(geom$parameters(TRUE), stat$parameters(TRUE), geom$aesthetics()) # Warn about extra params and aesthetics extra_param <- setdiff(names(params), all) if (check.param && length(extra_param) > 0) { warning( "Ignoring unknown parameters: ", paste(extra_param, collapse = ", "), call. = FALSE, immediate. = TRUE ) } extra_aes <- setdiff(names(mapping), c(geom$aesthetics(), stat$aesthetics())) if (check.aes && length(extra_aes) > 0) { warning( "Ignoring unknown aesthetics: ", paste(extra_aes, collapse = ", "), call. = FALSE, immediate. = TRUE ) } ggproto("LayerInstance", Layer, geom = geom, geom_params = geom_params, stat = stat, stat_params = stat_params, data = data, mapping = mapping, aes_params = aes_params, subset = subset, position = position, inherit.aes = inherit.aes, show.legend = show.legend ) } Layer <- ggproto("Layer", NULL, geom = NULL, geom_params = NULL, stat = NULL, stat_params = NULL, data = NULL, aes_params = NULL, mapping = NULL, position = NULL, inherit.aes = FALSE, print = function(self) { if (!is.null(self$mapping)) { cat("mapping:", clist(self$mapping), "\n") } cat(snakeize(class(self$geom)[[1]]), ": ", clist(self$geom_params), "\n", sep = "") cat(snakeize(class(self$stat)[[1]]), ": ", clist(self$stat_params), "\n", sep = "") cat(snakeize(class(self$position)[[1]]), "\n") }, layer_data = function(self, plot_data) { if (is.waive(self$data)) { plot_data } else if (is.function(self$data)) { data <- self$data(plot_data) if (!is.data.frame(data)) { stop("Data function must return a data.frame", call. = FALSE) } data } else { self$data } }, compute_aesthetics = function(self, data, plot) { # For annotation geoms, it is useful to be able to ignore the default aes if (self$inherit.aes) { aesthetics <- defaults(self$mapping, plot$mapping) } else { aesthetics <- self$mapping } # Drop aesthetics that are set or calculated set <- names(aesthetics) %in% names(self$aes_params) calculated <- is_calculated_aes(aesthetics) aesthetics <- aesthetics[!set & !calculated] # Override grouping if set in layer if (!is.null(self$geom_params$group)) { aesthetics[["group"]] <- self$aes_params$group } # Old subsetting method if (!is.null(self$subset)) { include <- data.frame(plyr::eval.quoted(self$subset, data, plot$env)) data <- data[rowSums(include, na.rm = TRUE) == ncol(include), ] } scales_add_defaults(plot$scales, data, aesthetics, plot$plot_env) # Evaluate and check aesthetics aesthetics <- compact(aesthetics) evaled <- lapply(aesthetics, eval, envir = data, enclos = plot$plot_env) n <- nrow(data) if (n == 0) { # No data, so look at longest evaluated aesthetic if (length(evaled) == 0) { n <- 0 } else { n <- max(vapply(evaled, length, integer(1))) } } check_aesthetics(evaled, n) # Set special group and panel vars if (empty(data) && n > 0) { evaled$PANEL <- 1 } else { evaled$PANEL <- data$PANEL } evaled <- lapply(evaled, unname) evaled <- data.frame(evaled, stringsAsFactors = FALSE) evaled <- add_group(evaled) evaled }, compute_statistic = function(self, data, layout) { if (empty(data)) return(data.frame()) params <- self$stat$setup_params(data, self$stat_params) data <- self$stat$setup_data(data, params) self$stat$compute_layer(data, params, layout) }, map_statistic = function(self, data, plot) { if (empty(data)) return(data.frame()) # Assemble aesthetics from layer, plot and stat mappings aesthetics <- self$mapping if (self$inherit.aes) { aesthetics <- defaults(aesthetics, plot$mapping) } aesthetics <- defaults(aesthetics, self$stat$default_aes) aesthetics <- compact(aesthetics) new <- strip_dots(aesthetics[is_calculated_aes(aesthetics)]) if (length(new) == 0) return(data) # Add map stat output to aesthetics stat_data <- plyr::quickdf(lapply(new, eval, data, baseenv())) names(stat_data) <- names(new) # Add any new scales, if needed scales_add_defaults(plot$scales, data, new, plot$plot_env) # Transform the values, if the scale say it's ok # (see stat_spoke for one exception) if (self$stat$retransform) { stat_data <- scales_transform_df(plot$scales, stat_data) } cunion(stat_data, data) }, compute_geom_1 = function(self, data) { if (empty(data)) return(data.frame()) data <- self$geom$setup_data(data, c(self$geom_params, self$aes_params)) check_required_aesthetics( self$geom$required_aes, c(names(data), names(self$aes_params)), snake_class(self$geom) ) data }, compute_position = function(self, data, layout) { if (empty(data)) return(data.frame()) params <- self$position$setup_params(data) data <- self$position$setup_data(data, params) self$position$compute_layer(data, params, layout) }, compute_geom_2 = function(self, data) { # Combine aesthetics, defaults, & params if (empty(data)) return(data) self$geom$use_defaults(data, self$aes_params) }, finish_statistics = function(self, data) { self$stat$finish_layer(data, self$stat_params) }, draw_geom = function(self, data, layout, coord) { if (empty(data)) { n <- nrow(layout$panel_layout) return(rep(list(zeroGrob()), n)) } data <- self$geom$handle_na(data, self$geom_params) self$geom$draw_layer(data, self$geom_params, layout, coord) } ) is.layer <- function(x) inherits(x, "Layer") find_subclass <- function(super, class, env) { name <- paste0(super, camelize(class, first = TRUE)) obj <- find_global(name, env = env) if (is.null(name)) { stop("No ", tolower(super), " called ", name, ".", call. = FALSE) } else if (!inherits(obj, super)) { stop("Found object is not a ", tolower(super), ".", call. = FALSE) } obj } ggplot2/R/stat-ydensity.r0000644000177400001440000001007612775463100015240 0ustar murdochusers#' @inheritParams layer #' @inheritParams geom_point #' @inheritParams stat_density #' @param scale if "area" (default), all violins have the same area (before trimming #' the tails). If "count", areas are scaled proportionally to the number of #' observations. If "width", all violins have the same maximum width. #' @section Computed variables: #' \describe{ #' \item{density}{density estimate} #' \item{scaled}{density estimate, scaled to maximum of 1} #' \item{count}{density * number of points - probably useless for violin plots} #' \item{violinwidth}{density scaled for the violin plot, according to area, counts #' or to a constant maximum width} #' \item{n}{number of points} #' \item{width}{width of violin bounding box} #' } #' @seealso \code{\link{geom_violin}} for examples, and \code{\link{stat_density}} #' for examples with data along the x axis. #' @export #' @rdname geom_violin stat_ydensity <- function(mapping = NULL, data = NULL, geom = "violin", position = "dodge", ..., bw = "nrd0", adjust = 1, kernel = "gaussian", trim = TRUE, scale = "area", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { scale <- match.arg(scale, c("area", "count", "width")) layer( data = data, mapping = mapping, stat = StatYdensity, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( bw = bw, adjust = adjust, kernel = kernel, trim = trim, scale = scale, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatYdensity <- ggproto("StatYdensity", Stat, required_aes = c("x", "y"), non_missing_aes = "weight", compute_group = function(data, scales, width = NULL, bw = "nrd0", adjust = 1, kernel = "gaussian", trim = TRUE, na.rm = FALSE) { if (nrow(data) < 3) return(data.frame()) range <- range(data$y, na.rm = TRUE) modifier <- if (trim) 0 else 3 bw <- calc_bw(data$y, bw) dens <- compute_density(data$y, data$w, from = range[1] - modifier*bw, to = range[2] + modifier*bw, bw = bw, adjust = adjust, kernel = kernel) dens$y <- dens$x dens$x <- mean(range(data$x)) # Compute width if x has multiple values if (length(unique(data$x)) > 1) { width <- diff(range(data$x)) * 0.9 } dens$width <- width dens }, compute_panel = function(self, data, scales, width = NULL, bw = "nrd0", adjust = 1, kernel = "gaussian", trim = TRUE, na.rm = FALSE, scale = "area") { data <- ggproto_parent(Stat, self)$compute_panel( data, scales, width = width, bw = bw, adjust = adjust, kernel = kernel, trim = trim, na.rm = na.rm ) # choose how violins are scaled relative to each other data$violinwidth <- switch(scale, # area : keep the original densities but scale them to a max width of 1 # for plotting purposes only area = data$density / max(data$density), # count: use the original densities scaled to a maximum of 1 (as above) # and then scale them according to the number of observations count = data$density / max(data$density) * data$n / max(data$n), # width: constant width (density scaled to a maximum of 1) width = data$scaled ) data } ) calc_bw <- function(x, bw) { if (is.character(bw)) { if (length(x) < 2) stop("need at least 2 points to select a bandwidth automatically", call. = FALSE) bw <- switch( tolower(bw), nrd0 = stats::bw.nrd0(x), nrd = stats::bw.nrd(x), ucv = stats::bw.ucv(x), bcv = stats::bw.bcv(x), sj = , `sj-ste` = stats::bw.SJ(x, method = "ste"), `sj-dpi` = stats::bw.SJ(x, method = "dpi"), stop("unknown bandwidth rule") ) } bw } ggplot2/R/guide-legend.r0000644000177400001440000004451513006174261014750 0ustar murdochusers#' Legend guide #' #' Legend type guide shows key (i.e., geoms) mapped onto values. #' Legend guides for various scales are integrated if possible. #' #' Guides can be specified in each \code{scale_*} or in \code{\link{guides}}. #' \code{guide="legend"} in \code{scale_*} is syntactic sugar for #' \code{guide=guide_legend()} (e.g. \code{scale_color_manual(guide = "legend")}). #' As for how to specify the guide for each scale in more detail, #' see \code{\link{guides}}. #' #' @param title A character string or expression indicating a title of guide. #' If \code{NULL}, the title is not shown. By default #' (\code{\link{waiver}}), the name of the scale object or the name #' specified in \code{\link{labs}} is used for the title. #' @param title.position A character string indicating the position of a #' title. One of "top" (default for a vertical guide), "bottom", "left" #' (default for a horizontal guide), or "right." #' @param title.theme A theme object for rendering the title text. Usually the #' object of \code{\link{element_text}} is expected. By default, the theme is #' specified by \code{legend.title} in \code{\link{theme}} or theme. #' @param title.hjust A number specifying horizontal justification of the #' title text. #' @param title.vjust A number specifying vertical justification of the title #' text. #' @param label logical. If \code{TRUE} then the labels are drawn. If #' \code{FALSE} then the labels are invisible. #' @param label.position A character string indicating the position of a #' label. One of "top", "bottom" (default for horizontal guide), "left", or #' "right" (default for vertical guide). #' @param label.theme A theme object for rendering the label text. Usually the #' object of \code{\link{element_text}} is expected. By default, the theme is #' specified by \code{legend.text} in \code{\link{theme}} or theme. #' @param label.hjust A numeric specifying horizontal justification of the #' label text. #' @param label.vjust A numeric specifying vertical justification of the label #' text. #' @param keywidth A numeric or a \code{\link[grid]{unit}} object specifying #' the width of the legend key. Default value is \code{legend.key.width} or #' \code{legend.key.size} in \code{\link{theme}} or theme. #' @param keyheight A numeric or a \code{\link[grid]{unit}} object specifying #' the height of the legend key. Default value is \code{legend.key.height} or #' \code{legend.key.size} in \code{\link{theme}} or theme. #' @param direction A character string indicating the direction of the guide. #' One of "horizontal" or "vertical." #' @param default.unit A character string indicating \code{\link[grid]{unit}} #' for \code{keywidth} and \code{keyheight}. #' @param override.aes A list specifying aesthetic parameters of legend key. #' See details and examples. #' @param nrow The desired number of rows of legends. #' @param ncol The desired number of column of legends. #' @param byrow logical. If \code{FALSE} (the default) the legend-matrix is #' filled by columns, otherwise the legend-matrix is filled by rows. #' @param reverse logical. If \code{TRUE} the order of legends is reversed. #' @param order positive integer less that 99 that specifies the order of #' this guide among multiple guides. This controls the order in which #' multiple guides are displayed, not the contents of the guide itself. #' If 0 (default), the order is determined by a secret algorithm. #' @param ... ignored. #' @return A guide object #' @export #' @family guides #' @examples #' \donttest{ #' df <- reshape2::melt(outer(1:4, 1:4), varnames = c("X1", "X2")) #' #' p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value)) #' p2 <- p1 + geom_point(aes(size = value)) #' #' # Basic form #' p1 + scale_fill_continuous(guide = "legend") #' p1 + scale_fill_continuous(guide = guide_legend()) #' #' # Guide title #' p1 + scale_fill_continuous(guide = guide_legend(title = "V")) # title text #' p1 + scale_fill_continuous(guide = guide_legend(title = NULL)) # no title #' #' # Control styles #' #' # key size #' p1 + guides(fill = guide_legend(keywidth = 3, keyheight = 1)) #' #' # title position #' p1 + guides(fill = guide_legend(title = "LEFT", title.position = "left")) #' #' # title text styles via element_text #' p1 + guides(fill = #' guide_legend( #' title.theme = element_text( #' size = 15, #' face = "italic", #' colour = "red", #' angle = 0 #' ) #' ) #' ) #' #' # label position #' p1 + guides(fill = guide_legend(label.position = "left", label.hjust = 1)) #' #' # label styles #' p1 + scale_fill_continuous(breaks = c(5, 10, 15), #' labels = paste("long", c(5, 10, 15)), #' guide = guide_legend( #' direction = "horizontal", #' title.position = "top", #' label.position = "bottom", #' label.hjust = 0.5, #' label.vjust = 1, #' label.theme = element_text(angle = 90) #' ) #' ) #' #' # Set aesthetic of legend key #' #' # very low alpha value make it difficult to see legend key #' p3 <- ggplot(diamonds, aes(carat, price)) + #' geom_point(aes(colour = color), alpha = 1/100) #' p3 #' #' # override.aes overwrites the alpha #' p3 + guides(colour = guide_legend(override.aes = list(alpha = 1))) #' #' # multiple row/col legends #' df <- data.frame(x = 1:20, y = 1:20, color = letters[1:20]) #' p <- ggplot(df, aes(x, y)) + #' geom_point(aes(colour = color)) #' p + guides(col = guide_legend(nrow = 8)) #' p + guides(col = guide_legend(ncol = 8)) #' p + guides(col = guide_legend(nrow = 8, byrow = TRUE)) #' p + guides(col = guide_legend(ncol = 8, byrow = TRUE)) #' #' # reversed order legend #' p + guides(col = guide_legend(reverse = TRUE)) #' } guide_legend <- function( # title title = waiver(), title.position = NULL, title.theme = NULL, title.hjust = NULL, title.vjust = NULL, # label label = TRUE, label.position = NULL, label.theme = NULL, label.hjust = NULL, label.vjust = NULL, # key keywidth = NULL, keyheight = NULL, # general direction = NULL, default.unit = "line", override.aes = list(), nrow = NULL, ncol = NULL, byrow = FALSE, reverse = FALSE, order = 0, ...) { if (!is.null(keywidth) && !is.unit(keywidth)) keywidth <- unit(keywidth, default.unit) if (!is.null(keyheight) && !is.unit(keyheight)) keyheight <- unit(keyheight, default.unit) structure( list( # title title = title, title.position = title.position, title.theme = title.theme, title.hjust = title.hjust, title.vjust = title.vjust, # label label = label, label.position = label.position, label.theme = label.theme, label.hjust = label.hjust, label.vjust = label.vjust, # size of key keywidth = keywidth, keyheight = keyheight, # general direction = direction, override.aes = rename_aes(override.aes), nrow = nrow, ncol = ncol, byrow = byrow, reverse = reverse, order = order, # parameter available_aes = c("any"), ..., name = "legend" ), class = c("guide", "legend") ) } #' @export guide_train.legend <- function(guide, scale) { breaks <- scale$get_breaks() if (length(breaks) == 0 || all(is.na(breaks))) return() key <- as.data.frame(setNames(list(scale$map(breaks)), scale$aesthetics[1]), stringsAsFactors = FALSE) key$.label <- scale$get_labels(breaks) # Drop out-of-range values for continuous scale # (should use scale$oob?) if (!scale$is_discrete()) { limits <- scale$get_limits() noob <- !is.na(breaks) & limits[1] <= breaks & breaks <= limits[2] key <- key[noob, , drop = FALSE] } if (guide$reverse) key <- key[nrow(key):1, ] guide$key <- key guide$hash <- with(guide, digest::digest(list(title, key$.label, direction, name))) guide } #' @export guide_merge.legend <- function(guide, new_guide) { guide$key <- merge(guide$key, new_guide$key, sort = FALSE) guide$override.aes <- c(guide$override.aes, new_guide$override.aes) if (any(duplicated(names(guide$override.aes)))) warning("Duplicated override.aes is ignored.") guide$override.aes <- guide$override.aes[!duplicated(names(guide$override.aes))] guide } #' @export guide_geom.legend <- function(guide, layers, default_mapping) { # arrange common data for vertical and horizontal guide guide$geoms <- plyr::llply(layers, function(layer) { matched <- matched_aes(layer, guide, default_mapping) if (length(matched) > 0) { # This layer contributes to the legend if (is.na(layer$show.legend) || layer$show.legend) { # Default is to include it data <- layer$geom$use_defaults(guide$key[matched], layer$aes_params) } else { return(NULL) } } else { # This layer does not contribute to the legend if (is.na(layer$show.legend) || !layer$show.legend) { # Default is to exclude it return(NULL) } else { data <- layer$geom$use_defaults(NULL, layer$aes_params)[rep(1, nrow(guide$key)), ] } } # override.aes in guide_legend manually changes the geom data <- utils::modifyList(data, guide$override.aes) list( draw_key = layer$geom$draw_key, data = data, params = c(layer$geom_params, layer$stat_params) ) }) # remove null geom guide$geoms <- compact(guide$geoms) # Finally, remove this guide if no layer is drawn if (length(guide$geoms) == 0) guide <- NULL guide } #' @export guide_gengrob.legend <- function(guide, theme) { # default setting label.position <- guide$label.position %||% "right" if (!label.position %in% c("top", "bottom", "left", "right")) stop("label position \"", label.position, "\" is invalid") nbreak <- nrow(guide$key) # gap between keys etc hgap <- width_cm(unit(0.3, "lines")) vgap <- hgap grob.title <- ggname("guide.title", element_grob( guide$title.theme %||% calc_element("legend.title", theme), label = guide$title, hjust = guide$title.hjust %||% theme$legend.title.align %||% 0, vjust = guide$title.vjust %||% 0.5, expand_x = FALSE, expand_y = FALSE ) ) title_width <- width_cm(grob.title) title_height <- height_cm(grob.title) # Labels if (!guide$label || is.null(guide$key$.label)) { grob.labels <- rep(list(zeroGrob()), nrow(guide$key)) } else { label.theme <- guide$label.theme %||% calc_element("legend.text", theme) # label.theme in param of guide_legend() > theme$legend.text.align > default # hjust/vjust in theme$legend.text and label.theme are ignored. hjust <- x <- guide$label.hjust %||% theme$legend.text.align %||% if (any(is.expression(guide$key$.label))) 1 else 0 vjust <- y <- guide$label.vjust %||% 0.5 grob.labels <- lapply(guide$key$.label, function(label, ...) { g <- element_grob( element = label.theme, label = label, x = x, y = y, hjust = hjust, vjust = vjust, expand_x = FALSE, expand_y = FALSE ) ggname("guide.label", g) }) } label_widths <- width_cm(grob.labels) label_heights <- height_cm(grob.labels) # Keys key_width <- width_cm(guide$keywidth %||% theme$legend.key.width %||% theme$legend.key.size) key_height <- height_cm(guide$keyheight %||% theme$legend.key.height %||% theme$legend.key.size) key_size_mat <- do.call("cbind", lapply(guide$geoms, function(g) g$data$size / 10)) if (nrow(key_size_mat) == 0 || ncol(key_size_mat) == 0) { key_size_mat <- matrix(0, ncol = 1, nrow = nbreak) } key_sizes <- apply(key_size_mat, 1, max) if (!is.null(guide$nrow) && !is.null(guide$ncol) && guide$nrow * guide$ncol < nbreak) stop("`nrow` * `ncol` needs to be larger than the number of breaks", call. = FALSE) # If neither nrow/ncol specified, guess with "reasonable" values if (is.null(guide$nrow) && is.null(guide$ncol)) { if (guide$direction == "horizontal") { guide$nrow <- ceiling(nbreak / 5) } else { guide$ncol <- ceiling(nbreak / 20) } } legend.nrow <- guide$nrow %||% ceiling(nbreak / guide$ncol) legend.ncol <- guide$ncol %||% ceiling(nbreak / guide$nrow) key_sizes <- matrix(c(key_sizes, rep(0, legend.nrow * legend.ncol - nbreak)), legend.nrow, legend.ncol, byrow = guide$byrow) key_widths <- pmax(key_width, apply(key_sizes, 2, max)) key_heights <- pmax(key_height, apply(key_sizes, 1, max)) label_widths <- apply(matrix(c(label_widths, rep(0, legend.nrow * legend.ncol - nbreak)), legend.nrow, legend.ncol, byrow = guide$byrow), 2, max) label_heights <- apply(matrix(c(label_heights, rep(0, legend.nrow * legend.ncol - nbreak)), legend.nrow, legend.ncol, byrow = guide$byrow), 1, max) if (guide$byrow) { vps <- data.frame( R = ceiling(seq(nbreak) / legend.ncol), C = (seq(nbreak) - 1) %% legend.ncol + 1 ) } else { vps <- as.data.frame(arrayInd(seq(nbreak), dim(key_sizes))) names(vps) <- c("R", "C") } # layout of key-label depends on the direction of the guide if (guide$byrow == TRUE) { switch(label.position, "top" = { kl_widths <- pmax(label_widths, key_widths) kl_heights <- utils::head(interleave(label_heights, vgap/2, key_heights, vgap/2), -1) vps <- transform(vps, key.row = R * 4 - 1, key.col = C, label.row = R * 4 - 3, label.col = C) }, "bottom" = { kl_widths <- pmax(label_widths, key_widths) kl_heights <- utils::head(interleave(key_heights, vgap/2, label_heights, vgap/2), -1) vps <- transform(vps, key.row = R * 4 - 3, key.col = C, label.row = R * 4 - 1, label.col = C) }, "left" = { kl_widths <- utils::head(interleave(label_widths, hgap/2, key_widths, hgap/2), -1) kl_heights <- utils::head(interleave(pmax(label_heights, key_heights), vgap/2), -1) vps <- transform(vps, key.row = R * 2 - 1, key.col = C * 4 - 1, label.row = R * 2 - 1, label.col = C * 4 - 3) }, "right" = { kl_widths <- utils::head(interleave(key_widths, hgap/2, label_widths, hgap/2), -1) kl_heights <- utils::head(interleave(pmax(label_heights, key_heights), vgap/2), -1) vps <- transform(vps, key.row = R * 2 - 1, key.col = C * 4 - 3, label.row = R * 2 - 1, label.col = C * 4 - 1) }) } else { switch(label.position, "top" = { kl_widths <- utils::head(interleave(pmax(label_widths, key_widths), hgap/2), -1) kl_heights <- utils::head(interleave(label_heights, vgap/2, key_heights, vgap/2), -1) vps <- transform(vps, key.row = R * 4 - 1, key.col = C * 2 - 1, label.row = R * 4 - 3, label.col = C * 2 - 1) }, "bottom" = { kl_widths <- utils::head(interleave(pmax(label_widths, key_widths), hgap/2), -1) kl_heights <- utils::head(interleave(key_heights, vgap/2, label_heights, vgap/2), -1) vps <- transform(vps, key.row = R * 4 - 3, key.col = C * 2 - 1, label.row = R * 4 - 1, label.col = C * 2 - 1) }, "left" = { kl_widths <- utils::head(interleave(label_widths, hgap/2, key_widths, hgap/2), -1) kl_heights <- pmax(key_heights, label_heights) vps <- transform(vps, key.row = R, key.col = C * 4 - 1, label.row = R, label.col = C * 4 - 3) }, "right" = { kl_widths <- utils::head(interleave(key_widths, hgap/2, label_widths, hgap/2), -1) kl_heights <- pmax(key_heights, label_heights) vps <- transform(vps, key.row = R, key.col = C * 4 - 3, label.row = R, label.col = C * 4 - 1) }) } # layout the title over key-label switch(guide$title.position, "top" = { widths <- c(kl_widths, max(0, title_width - sum(kl_widths))) heights <- c(title_height, vgap, kl_heights) vps <- transform(vps, key.row = key.row + 2, key.col = key.col, label.row = label.row + 2, label.col = label.col) vps.title.row = 1; vps.title.col = 1:length(widths) }, "bottom" = { widths <- c(kl_widths, max(0, title_width - sum(kl_widths))) heights <- c(kl_heights, vgap, title_height) vps <- transform(vps, key.row = key.row, key.col = key.col, label.row = label.row, label.col = label.col) vps.title.row = length(heights); vps.title.col = 1:length(widths) }, "left" = { widths <- c(title_width, hgap, kl_widths) heights <- c(kl_heights, max(0, title_height - sum(kl_heights))) vps <- transform(vps, key.row = key.row, key.col = key.col + 2, label.row = label.row, label.col = label.col + 2) vps.title.row = 1:length(heights); vps.title.col = 1 }, "right" = { widths <- c(kl_widths, hgap, title_width) heights <- c(kl_heights, max(0, title_height - sum(kl_heights))) vps <- transform(vps, key.row = key.row, key.col = key.col, label.row = label.row, label.col = label.col) vps.title.row = 1:length(heights); vps.title.col = length(widths) }) # grob for key key_size <- c(key_width, key_height) * 10 draw_key <- function(i) { bg <- element_render(theme, "legend.key") keys <- lapply(guide$geoms, function(g) { g$draw_key(g$data[i, ], g$params, key_size) }) c(list(bg), keys) } grob.keys <- unlist(lapply(seq_len(nbreak), draw_key), recursive = FALSE) # background grob.background <- element_render(theme, "legend.background") ngeom <- length(guide$geoms) + 1 kcols <- rep(vps$key.col, each = ngeom) krows <- rep(vps$key.row, each = ngeom) # padding padding <- convertUnit(theme$legend.margin %||% margin(), "cm") widths <- c(padding[4], widths, padding[2]) heights <- c(padding[1], heights, padding[3]) # Create the gtable for the legend gt <- gtable(widths = unit(widths, "cm"), heights = unit(heights, "cm")) gt <- gtable_add_grob(gt, grob.background, name = "background", clip = "off", t = 1, r = -1, b = -1, l = 1) gt <- gtable_add_grob(gt, grob.title, name = "title", clip = "off", t = 1 + min(vps.title.row), r = 1 + max(vps.title.col), b = 1 + max(vps.title.row), l = 1 + min(vps.title.col)) gt <- gtable_add_grob(gt, grob.keys, name = paste("key", krows, kcols, c("bg", seq(ngeom - 1)), sep = "-"), clip = "off", t = 1 + krows, r = 1 + kcols, b = 1 + krows, l = 1 + kcols) gt <- gtable_add_grob(gt, grob.labels, name = paste("label", vps$label.row, vps$label.col, sep = "-"), clip = "off", t = 1 + vps$label.row, r = 1 + vps$label.col, b = 1 + vps$label.row, l = 1 + vps$label.col) gt } globalVariables(c("C", "R", "key.row", "key.col", "label.row", "label.col")) ggplot2/R/guides-grid.r0000644000177400001440000000204612556122070014613 0ustar murdochusers# Produce a grob to be used as for panel backgrounds guide_grid <- function(theme, x.minor, x.major, y.minor, y.major) { x.minor <- setdiff(x.minor, x.major) y.minor <- setdiff(y.minor, y.major) ggname("grill", grobTree( element_render(theme, "panel.background"), if (length(y.minor) > 0) element_render( theme, "panel.grid.minor.y", x = rep(0:1, length(y.minor)), y = rep(y.minor, each = 2), id.lengths = rep(2, length(y.minor)) ), if (length(x.minor) > 0) element_render( theme, "panel.grid.minor.x", x = rep(x.minor, each = 2), y = rep(0:1, length(x.minor)), id.lengths = rep(2, length(x.minor)) ), if (length(y.major) > 0) element_render( theme, "panel.grid.major.y", x = rep(0:1, length(y.major)), y = rep(y.major, each = 2), id.lengths = rep(2, length(y.major)) ), if (length(x.major) > 0) element_render( theme, "panel.grid.major.x", x = rep(x.major, each = 2), y = rep(0:1, length(x.major)), id.lengths = rep(2, length(x.major)) ) )) } ggplot2/R/aaa-.r0000644000177400001440000000053712567704140013220 0ustar murdochusers#' @include ggproto.r NULL #' Base ggproto classes for ggplot2 #' #' If you are creating a new geom, stat, position, or scale in another package, #' you'll need to extend from \code{ggplot2::Geom}, \code{ggplot2::Stat}, #' \code{ggplot2::Position}, or \code{ggplot2::Scale}. #' #' @seealso ggproto #' @keywords internal #' @name ggplot2-ggproto NULL ggplot2/R/aes.r0000644000177400001440000001566513006370020013162 0ustar murdochusers#' @include utilities.r NULL .all_aesthetics <- c("adj", "alpha", "angle", "bg", "cex", "col", "color", "colour", "fg", "fill", "group", "hjust", "label", "linetype", "lower", "lty", "lwd", "max", "middle", "min", "pch", "radius", "sample", "shape", "size", "srt", "upper", "vjust", "weight", "width", "x", "xend", "xmax", "xmin", "xintercept", "y", "yend", "ymax", "ymin", "yintercept", "z") .base_to_ggplot <- c( "col" = "colour", "color" = "colour", "pch" = "shape", "cex" = "size", "lty" = "linetype", "lwd" = "size", "srt" = "angle", "adj" = "hjust", "bg" = "fill", "fg" = "colour", "min" = "ymin", "max" = "ymax" ) #' Construct aesthetic mappings #' #' Aesthetic mappings describe how variables in the data are mapped to visual #' properties (aesthetics) of geoms. Aesthetic mappings can be set in #' \code{\link{ggplot2}} and in individual layers. #' #' This function also standardise aesthetic names by performing partial #' matching, converting color to colour, and translating old style R names to #' ggplot names (eg. pch to shape, cex to size) #' #' @param x,y,... List of name value pairs giving aesthetics to map to #' variables. The names for x and y aesthetics are typically omitted because #' they are so common; all other aesthetics must be named. #' @seealso See \code{\link{aes_}} for a version of \code{aes} that is #' more suitable for programming with. #' @export #' @examples #' aes(x = mpg, y = wt) #' aes(mpg, wt) #' #' # You can also map aesthetics to functions of variables #' aes(x = mpg ^ 2, y = wt / cyl) #' #' # Aesthetic names are automatically standardised #' aes(col = x) #' aes(fg = x) #' aes(color = x) #' aes(colour = x) #' #' # aes is almost always used with ggplot() or a layer #' ggplot(mpg, aes(displ, hwy)) + geom_point() #' ggplot(mpg) + geom_point(aes(displ, hwy)) #' #' # Aesthetics supplied to ggplot() are used as defaults for every layer #' # you can override them, or supply different aesthetics for each layer aes <- function(x, y, ...) { aes <- structure(as.list(match.call()[-1]), class = "uneval") rename_aes(aes) } #' @export print.uneval <- function(x, ...) { values <- vapply(x, deparse2, character(1)) bullets <- paste0("* ", format(names(x)), " -> ", values, "\n") cat(bullets, sep = "") } #' @export str.uneval <- function(object, ...) utils::str(unclass(object), ...) #' @export "[.uneval" <- function(x, i, ...) structure(unclass(x)[i], class = "uneval") #' @export as.character.uneval <- function(x, ...) { char <- as.character(unclass(x)) names(char) <- names(x) char } # Rename American or old-style aesthetics name rename_aes <- function(x) { # Convert prefixes to full names full <- match(names(x), .all_aesthetics) names(x)[!is.na(full)] <- .all_aesthetics[full[!is.na(full)]] plyr::rename(x, .base_to_ggplot, warn_missing = FALSE) } # Look up the scale that should be used for a given aesthetic aes_to_scale <- function(var) { var[var %in% c("x", "xmin", "xmax", "xend", "xintercept")] <- "x" var[var %in% c("y", "ymin", "ymax", "yend", "yintercept")] <- "y" var } # Figure out if an aesthetic is a position aesthetic or not is_position_aes <- function(vars) { aes_to_scale(vars) %in% c("x", "y") } #' Define aesthetic mappings programatically #' #' Aesthetic mappings describe how variables in the data are mapped to visual #' properties (aesthetics) of geoms. \code{\link{aes}} uses non-standard #' evaluation to capture the variable names. \code{aes_} and \code{aes_string} #' require you to explicitly quote the inputs either with \code{""} for #' \code{aes_string()}, or with \code{quote} or \code{~} for \code{aes_()}. #' (\code{aes_q} is an alias to \code{aes_}). This makes \code{aes_} and #' \code{aes_string} easy to program with. #' #' \code{aes_string} and \code{aes_} are particularly useful when writing #' functions that create plots because you can use strings or quoted #' names/calls to define the aesthetic mappings, rather than having to use #' \code{\link{substitute}} to generate a call to \code{aes()}. #' #' I recommend using \code{aes_()}, because creating the equivalents of #' \code{aes(colour = "my colour")} or \code{aes{x = `X$1`}} #' with \code{aes_string()} is quite clunky. #' #' @param x,y,... List of name value pairs. Elements must be either #' quoted calls, strings, one-sided formulas or constants. #' @seealso \code{\link{aes}} #' @export #' @examples #' # Three ways of generating the same aesthetics #' aes(mpg, wt, col = cyl) #' aes_(quote(mpg), quote(wt), col = quote(cyl)) #' aes_(~mpg, ~wt, col = ~cyl) #' aes_string("mpg", "wt", col = "cyl") #' #' # You can't easily mimic these calls with aes_string #' aes(`$100`, colour = "smooth") #' aes_(~ `$100`, colour = "smooth") #' # Ok, you can, but it requires a _lot_ of quotes #' aes_string("`$100`", colour = '"smooth"') #' #' # Convert strings to names with as.name #' var <- "cyl" #' aes(col = x) #' aes_(col = as.name(var)) aes_ <- function(x, y, ...) { mapping <- list(...) if (!missing(x)) mapping["x"] <- list(x) if (!missing(y)) mapping["y"] <- list(y) as_call <- function(x) { if (is.formula(x) && length(x) == 2) { x[[2]] } else if (is.call(x) || is.name(x) || is.atomic(x)) { x } else { stop("Aesthetic must be a one-sided formula, call, name, or constant.", call. = FALSE) } } mapping <- lapply(mapping, as_call) structure(rename_aes(mapping), class = "uneval") } #' @rdname aes_ #' @export aes_string <- function(x, y, ...) { mapping <- list(...) if (!missing(x)) mapping["x"] <- list(x) if (!missing(y)) mapping["y"] <- list(y) mapping <- lapply(mapping, function(x) { if (is.character(x)) { parse(text = x)[[1]] } else { x } }) structure(rename_aes(mapping), class = "uneval") } #' @export #' @rdname aes_ aes_q <- aes_ #' Given a character vector, create a set of identity mappings #' #' @param vars vector of variable names #' @keywords internal #' @export #' @examples #' aes_all(names(mtcars)) #' aes_all(c("x", "y", "col", "pch")) aes_all <- function(vars) { names(vars) <- vars vars <- rename_aes(vars) structure( lapply(vars, as.name), class = "uneval" ) } #' Automatic aesthetic mapping #' #' @param data data.frame or names of variables #' @param ... aesthetics that need to be explicitly mapped. #' @keywords internal #' @export aes_auto <- function(data = NULL, ...) { warning("aes_auto() is deprecated", call. = FALSE) # detect names of data if (is.null(data)) { stop("aes_auto requires data.frame or names of data.frame.") } else if (is.data.frame(data)) { vars <- names(data) } else { vars <- data } # automatically detected aes vars <- intersect(.all_aesthetics, vars) names(vars) <- vars aes <- lapply(vars, function(x) parse(text = x)[[1]]) # explicitly defined aes if (length(match.call()) > 2) { args <- as.list(match.call()[-1]) aes <- c(aes, args[names(args) != "data"]) } structure(rename_aes(aes), class = "uneval") } ggplot2/R/geom-ribbon.r0000644000177400001440000001050713005734367014621 0ustar murdochusers#' Ribbons and area plots #' #' For each x value, \code{geom_ribbon} displays a y interval defined #' by \code{ymin} and \code{ymax}. \code{geom_area} is a special case of #' \code{geom_ribbon}, where the \code{ymin} is fixed to 0. #' #' An area plot is the continuous analog of a stacked bar chart (see #' \code{\link{geom_bar}}), and can be used to show how composition of the #' whole varies over the range of x. Choosing the order in which different #' components is stacked is very important, as it becomes increasing hard to #' see the individual pattern as you move up the stack. See #' \code{\link{position_stack}} for the details of stacking algorithm. #' #' @section Aesthetics: #' \aesthetics{geom}{ribbon} #' #' @seealso #' \code{\link{geom_bar}} for discrete intervals (bars), #' \code{\link{geom_linerange}} for discrete intervals (lines), #' \code{\link{geom_polygon}} for general polygons #' @inheritParams layer #' @inheritParams geom_point #' @export #' @examples #' # Generate data #' huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron)) #' h <- ggplot(huron, aes(year)) #' #' h + geom_ribbon(aes(ymin=0, ymax=level)) #' h + geom_area(aes(y = level)) #' #' # Add aesthetic mappings #' h + #' geom_ribbon(aes(ymin = level - 1, ymax = level + 1), fill = "grey70") + #' geom_line(aes(y = level)) geom_ribbon <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomRibbon, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomRibbon <- ggproto("GeomRibbon", Geom, default_aes = aes(colour = NA, fill = "grey20", size = 0.5, linetype = 1, alpha = NA), required_aes = c("x", "ymin", "ymax"), draw_key = draw_key_polygon, handle_na = function(data, params) { data }, draw_group = function(data, panel_scales, coord, na.rm = FALSE) { if (na.rm) data <- data[stats::complete.cases(data[c("x", "ymin", "ymax")]), ] data <- data[order(data$group, data$x), ] # Check that aesthetics are constant aes <- unique(data[c("colour", "fill", "size", "linetype", "alpha")]) if (nrow(aes) > 1) { stop("Aesthetics can not vary with a ribbon") } aes <- as.list(aes) # Instead of removing NA values from the data and plotting a single # polygon, we want to "stop" plotting the polygon whenever we're # missing values and "start" a new polygon as soon as we have new # values. We do this by creating an id vector for polygonGrob that # has distinct polygon numbers for sequences of non-NA values and NA # for NA values in the original data. Example: c(NA, 2, 2, 2, NA, NA, # 4, 4, 4, NA) missing_pos <- !stats::complete.cases(data[c("x", "ymin", "ymax")]) ids <- cumsum(missing_pos) + 1 ids[missing_pos] <- NA positions <- plyr::summarise(data, x = c(x, rev(x)), y = c(ymax, rev(ymin)), id = c(ids, rev(ids))) munched <- coord_munch(coord, positions, panel_scales) ggname("geom_ribbon", polygonGrob( munched$x, munched$y, id = munched$id, default.units = "native", gp = gpar( fill = alpha(aes$fill, aes$alpha), col = aes$colour, lwd = aes$size * .pt, lty = aes$linetype) )) } ) #' @rdname geom_ribbon #' @export geom_area <- function(mapping = NULL, data = NULL, stat = "identity", position = "stack", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomArea, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomArea <- ggproto("GeomArea", GeomRibbon, default_aes = aes(colour = NA, fill = "grey20", size = 0.5, linetype = 1, alpha = NA), required_aes = c("x", "y"), setup_data = function(data, params) { transform(data, ymin = 0, ymax = y) } ) ggplot2/R/position-identity.r0000644000177400001440000000050012567131473016105 0ustar murdochusers#' Don't adjust position #' #' @family position adjustments #' @export position_identity <- function() { PositionIdentity } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionIdentity <- ggproto("PositionIdentity", Position, compute_layer = function(data, params, scales) { data } ) ggplot2/R/bin.R0000644000177400001440000001111412766512614013126 0ustar murdochusersbins <- function(breaks, closed = c("right", "left"), fuzz = 1e-08 * stats::median(diff(breaks))) { stopifnot(is.numeric(breaks)) closed <- match.arg(closed) breaks <- sort(breaks) # Adapted base::hist - this protects from floating point rounding errors if (closed == "right") { fuzzes <- c(-fuzz, rep.int(fuzz, length(breaks) - 1)) } else { fuzzes <- c(rep.int(-fuzz, length(breaks) - 1), fuzz) } structure( list( breaks = breaks, fuzzy = breaks + fuzzes, right_closed = closed == "right" ), class = "ggplot2_bins" ) } is_bins <- function(x) inherits(x, "ggplot2_bins") #' @export print.ggplot2_bins <- function(x, ...) { n <- length(x$breaks) cat("\n") if (x$right_closed) { left <- c("[", rep("(", n - 2)) right <- rep("]", n - 1) } else { left <- rep("[", n - 1) right <- c(rep(")", n - 2), "]") } breaks <- format(x$breaks) bins <- paste0("* ", left, breaks[-n], ",", breaks[-1], right) cat(bins, sep = "\n") cat("\n") } # Compute parameters ----------------------------------------------------------- bin_breaks <- function(breaks, closed = c("right", "left")) { bins(breaks, closed) } bin_breaks_width <- function(x_range, width = NULL, center = NULL, boundary = NULL, closed = c("right", "left")) { stopifnot(length(x_range) == 2) # if (length(x_range) == 0) { # return(bin_params(numeric())) # } stopifnot(is.numeric(width), length(width) == 1) if (width <= 0) { stop("`binwidth` must be positive", call. = FALSE) } if (!is.null(boundary) && !is.null(center)) { stop("Only one of 'boundary' and 'center' may be specified.") } else if (is.null(boundary)) { if (is.null(center)) { # If neither edge nor center given, compute both using tile layer's # algorithm. This puts min and max of data in outer half of their bins. boundary <- width / 2 } else { # If center given but not boundary, compute boundary. boundary <- center - width / 2 } } # Find the left side of left-most bin: inputs could be Dates or POSIXct, so # coerce to numeric first. x_range <- as.numeric(x_range) width <- as.numeric(width) boundary <- as.numeric(boundary) shift <- floor((x_range[1] - boundary) / width) origin <- boundary + shift * width # Small correction factor so that we don't get an extra bin when, for # example, origin = 0, max(x) = 20, width = 10. max_x <- x_range[2] + (1 - 1e-08) * width breaks <- seq(origin, max_x, width) bin_breaks(breaks, closed = closed) } bin_breaks_bins <- function(x_range, bins = 30, center = NULL, boundary = NULL, closed = c("right", "left")) { stopifnot(length(x_range) == 2) bins <- as.integer(bins) if (bins < 1) { stop("Need at least one bin.", call. = FALSE) } else if (bins == 1) { width <- diff(x_range) boundary <- x_range[1] } else { width <- (x_range[2] - x_range[1]) / (bins - 1) } bin_breaks_width(x_range, width, boundary = boundary, center = center, closed = closed) } # Compute bins ------------------------------------------------------------ bin_vector <- function(x, bins, weight = NULL, pad = FALSE) { stopifnot(is_bins(bins)) if (all(is.na(x))) { return(bin_out(length(x), NA, NA, xmin = NA, xmax = NA)) } if (is.null(weight)) { weight <- rep(1, length(x)) } else { weight[is.na(weight)] <- 0 } bin_idx <- cut(x, bins$fuzzy, right = bins$right_closed, include.lowest = TRUE) bin_count <- as.numeric(tapply(weight, bin_idx, sum, na.rm = TRUE)) bin_count[is.na(bin_count)] <- 0 bin_x <- (bins$breaks[-length(bins$breaks)] + bins$breaks[-1]) / 2 bin_widths <- diff(bins$breaks) # Pad row of 0s at start and end if (pad) { bin_count <- c(0, bin_count, 0) width1 <- bin_widths[1] widthn <- bin_widths[length(bin_widths)] bin_widths <- c(width1, bin_widths, widthn) bin_x <- c(bin_x[1] - width1, bin_x, bin_x[length(bin_x)] + widthn) } # Add row for missings if (any(is.na(bins))) { bin_count <- c(bin_count, sum(is.na(bins))) bin_widths <- c(bin_widths, NA) bin_x <- c(bin_x, NA) } bin_out(bin_count, bin_x, bin_widths) } bin_out <- function(count = integer(0), x = numeric(0), width = numeric(0), xmin = x - width / 2, xmax = x + width / 2) { density <- count / width / sum(abs(count)) data.frame( count = count, x = x, xmin = xmin, xmax = xmax, width = width, density = density, ncount = count / max(abs(count)), ndensity = count / max(abs(density)), stringsAsFactors = FALSE ) } ggplot2/R/aes-linetype-size-shape.r0000644000177400001440000000451412650517507017067 0ustar murdochusers#' Differentiation related aesthetics: linetype, size, shape #' #' This page demonstrates the usage of a sub-group #' of aesthetics; linetype, size and shape. #' #' @name aes_linetype_size_shape #' @aliases linetype size shape #' @examples #' #' # Line types should be specified with either an integer, a name, or with a string of #' # an even number (up to eight) of hexadecimal digits which give the lengths in #' # consecutive positions in the string. #' # 0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodash #' #' # Data #' df <- data.frame(x = 1:10 , y = 1:10) #' f <- ggplot(df, aes(x, y)) #' f + geom_line(linetype = 2) #' f + geom_line(linetype = "dotdash") #' #' # An example with hex strings, the string "33" specifies three units on followed #' # by three off and "3313" specifies three units on followed by three off followed #' # by one on and finally three off. #' f + geom_line(linetype = "3313") #' #' # Mapping line type from a variable #' ggplot(economics_long, aes(date, value01)) + #' geom_line(aes(linetype = variable)) #' #' # Size examples #' # Should be specified with a numerical value (in millimetres), #' # or from a variable source #' p <- ggplot(mtcars, aes(wt, mpg)) #' p + geom_point(size = 4) #' p + geom_point(aes(size = qsec)) #' p + geom_point(size = 2.5) + #' geom_hline(yintercept = 25, size = 3.5) #' #' # Shape examples #' # Shape takes four types of values: an integer in [0, 25], #' # a single character-- which uses that character as the plotting symbol, #' # a . to draw the smallest rectangle that is visible (i.e., about one pixel) #' # an NA to draw nothing #' p + geom_point() #' p + geom_point(shape = 5) #' p + geom_point(shape = "k", size = 3) #' p + geom_point(shape = ".") #' p + geom_point(shape = NA) #' #' # Shape can also be mapped from a variable #' p + geom_point(aes(shape = factor(cyl))) #' #' # A look at all 25 symbols #' df2 <- data.frame(x = 1:5 , y = 1:25, z = 1:25) #' s <- ggplot(df2, aes(x, y)) #' s + geom_point(aes(shape = z), size = 4) + #' scale_shape_identity() #' # While all symbols have a foreground colour, symbols 19-25 also take a #' # background colour (fill) #' s + geom_point(aes(shape = z), size = 4, colour = "Red") + #' scale_shape_identity() #' s + geom_point(aes(shape = z), size = 4, colour = "Red", fill = "Black") + #' scale_shape_identity() NULL ggplot2/R/utilities-help.r0000644000177400001440000000115413005650132015343 0ustar murdochusers rd_aesthetics <- function(type, name) { obj <- switch(type, geom = find_subclass("Geom", name, globalenv()), stat = find_subclass("Stat", name, globalenv()) ) aes <- rd_aesthetics_item(obj) paste("\\code{", type, "_", name, "} ", "understands the following aesthetics (required aesthetics are in bold):\n\n", "\\itemize{\n", paste(" \\item \\code{", aes, "}", collapse = "\n", sep = ""), "\n}\n", sep = "") } rd_aesthetics_item <- function(x) { req <- x$required_aes all <- union(req, sort(x$aesthetics())) ifelse(all %in% req, paste0("\\strong{", all, "}"), all ) } ggplot2/R/plot-last.r0000644000177400001440000000064113006175450014327 0ustar murdochusers.plot_store <- function() { .last_plot <- NULL list( get = function() .last_plot, set = function(value) .last_plot <<- value ) } .store <- .plot_store() # Set last plot created or modified set_last_plot <- function(value) .store$set(value) #' Retrieve the last plot to be modified or created. #' #' @seealso \code{\link{ggsave}} #' @export #' @keywords internal last_plot <- function() .store$get() ggplot2/R/scale-identity.r0000644000177400001440000000723713006123667015341 0ustar murdochusers#' Use values without scaling #' #' Use this set of scales when your data has already been scaled, i.e. it #' already represents aesthetic values that ggplot2 can handle directly #' This will not produce a legend unless you also supply the \code{breaks} #' and \code{labels}. #' #' @param ... Other arguments passed on to \code{\link{discrete_scale}} or #' \code{\link{continuous_scale}} #' @param guide Guide to use for this scale. Defaults to \code{"none"}. #' @examples #' ggplot(luv_colours, aes(u, v)) + #' geom_point(aes(colour = col), size = 3) + #' scale_color_identity() + #' coord_equal() #' #' df <- data.frame( #' x = 1:4, #' y = 1:4, #' colour = c("red", "green", "blue", "yellow") #' ) #' ggplot(df, aes(x, y)) + geom_tile(aes(fill = colour)) #' ggplot(df, aes(x, y)) + #' geom_tile(aes(fill = colour)) + #' scale_fill_identity() #' #' # To get a legend guide, specify guide = "legend" #' ggplot(df, aes(x, y)) + #' geom_tile(aes(fill = colour)) + #' scale_fill_identity(guide = "legend") #' # But you'll typically also need to supply breaks and labels: #' ggplot(df, aes(x, y)) + #' geom_tile(aes(fill = colour)) + #' scale_fill_identity("trt", labels = letters[1:4], breaks = df$colour, #' guide = "legend") #' #' # cyl scaled to appropriate size #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(size = cyl)) #' #' # cyl used as point size #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(size = cyl)) + #' scale_size_identity() #' @name scale_identity #' @aliases NULL NULL #' @rdname scale_identity #' @export scale_colour_identity <- function(..., guide = "none") { sc <- discrete_scale("colour", "identity", identity_pal(), ..., guide = guide, super = ScaleDiscreteIdentity) sc } #' @rdname scale_identity #' @export scale_fill_identity <- function(..., guide = "none") { sc <- discrete_scale("fill", "identity", identity_pal(), ..., guide = guide, super = ScaleDiscreteIdentity) sc } #' @rdname scale_identity #' @export scale_shape_identity <- function(..., guide = "none") { sc <- continuous_scale("shape", "identity", identity_pal(), ..., guide = guide, super = ScaleDiscreteIdentity) sc } #' @rdname scale_identity #' @export scale_linetype_identity <- function(..., guide = "none") { sc <- discrete_scale("linetype", "identity", identity_pal(), ..., guide = guide, super = ScaleDiscreteIdentity) sc } #' @rdname scale_identity #' @export scale_alpha_identity <- function(..., guide = "none") { sc <- continuous_scale("alpha", "identity", identity_pal(), ..., guide = guide, super = ScaleContinuousIdentity) sc } #' @rdname scale_identity #' @export scale_size_identity <- function(..., guide = "none") { sc <- continuous_scale("size", "identity", identity_pal(), ..., guide = guide, super = ScaleContinuousIdentity) sc } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleDiscreteIdentity <- ggproto("ScaleDiscreteIdentity", ScaleDiscrete, map = function(x) { if (is.factor(x)) { as.character(x) } else { x } }, train = function(self, x) { # do nothing if no guide, otherwise train so we know what breaks to use if (self$guide == "none") return() ggproto_parent(ScaleDiscrete, self)$train(x) } ) #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleContinuousIdentity <- ggproto("ScaleContinuousIdentity", ScaleContinuous, map = function(x) { if (is.factor(x)) { as.character(x) } else { x } }, train = function(self, x) { # do nothing if no guide, otherwise train so we know what breaks to use if (self$guide == "none") return() ggproto_parent(ScaleDiscrete, self)$train(x) } ) ggplot2/R/facet-null.r0000644000177400001440000000425513006172605014446 0ustar murdochusers#' @include facet-.r NULL #' Facet specification: a single panel. #' #' @inheritParams facet_grid #' @keywords internal #' @export #' @examples #' # facet_null is the default facetting specification if you #' # don't override it with facet_grid or facet_wrap #' ggplot(mtcars, aes(mpg, wt)) + geom_point() facet_null <- function(shrink = TRUE) { ggproto(NULL, FacetNull, shrink = shrink ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export FacetNull <- ggproto("FacetNull", Facet, shrink = TRUE, compute_layout = function(data, params) { layout_null() }, map_data = function(data, layout, params) { # Need the is.waive check for special case where no data, but aesthetics # are mapped to vectors if (is.waive(data) || empty(data)) return(cbind(data, PANEL = integer(0))) data$PANEL <- 1L data }, draw_panels = function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) { range <- ranges[[1]] # Figure out aspect ratio aspect_ratio <- theme$aspect.ratio %||% coord$aspect(range) if (is.null(aspect_ratio)) { aspect_ratio <- 1 respect <- FALSE } else { respect <- TRUE } axis_h <- coord$render_axis_h(range, theme) axis_v <- coord$render_axis_v(range, theme) all <- matrix(list( zeroGrob(), axis_h$top, zeroGrob(), axis_v$left, panels[[1]], axis_v$right, zeroGrob(), axis_h$bottom, zeroGrob() ), ncol = 3, byrow = TRUE) z_matrix <- matrix(c(5, 6, 4, 7, 1, 8, 3, 9, 2), ncol = 3, byrow = TRUE) grob_widths <- unit.c(grobWidth(axis_v$left), unit(1, "null"), grobWidth(axis_v$right)) grob_heights <- unit.c(grobHeight(axis_h$top), unit(aspect_ratio, "null"), grobHeight(axis_h$bottom)) grob_names <- c("spacer", "axis-l", "spacer", "axis-t", "panel", "axis-b", "spacer", "axis-r", "spacer") grob_clip <- c("off", "off", "off", "off", "on", "off", "off", "off", "off") layout <- gtable_matrix("layout", all, widths = grob_widths, heights = grob_heights, respect = respect, clip = grob_clip, z = z_matrix ) layout$layout$name <- grob_names layout }, vars = function(self) { "" } ) ggplot2/R/plot.r0000644000177400001440000001407713006371041013370 0ustar murdochusers#' Create a new ggplot #' #' \code{ggplot()} initializes a ggplot object. It can be used to #' declare the input data frame for a graphic and to specify the #' set of plot aesthetics intended to be common throughout all #' subsequent layers unless specifically overridden. #' #' \code{ggplot()} is used to construct the initial plot object, #' and is almost always followed by \code{+} to add component to the #' plot. There are three common ways to invoke \code{ggplot}: #' #' \enumerate{ #' \item \code{ggplot(df, aes(x, y, ))} #' \item \code{ggplot(df)} #' \item \code{ggplot()} #' } #' #' The first method is recommended if all layers use the same #' data and the same set of aesthetics, although this method #' can also be used to add a layer using data from another #' data frame. See the first example below. The second #' method specifies the default data frame to use for the plot, #' but no aesthetics are defined up front. This is useful when #' one data frame is used predominantly as layers are added, #' but the aesthetics may vary from one layer to another. The #' third method initializes a skeleton \code{ggplot} object which #' is fleshed out as layers are added. This method is useful when #' multiple data frames are used to produce different layers, as #' is often the case in complex graphics. #' #' @param data Default dataset to use for plot. If not already a data.frame, #' will be converted to one by \code{\link{fortify}}. If not specified, #' must be suppled in each layer added to the plot. #' @param mapping Default list of aesthetic mappings to use for plot. #' If not specified, must be suppled in each layer added to the plot. #' @param ... Other arguments passed on to methods. Not currently used. #' @param environment If an variable defined in the aesthetic mapping is not #' found in the data, ggplot will look for it in this environment. It defaults #' to using the environment in which \code{ggplot()} is called. #' @export #' @examples #' # Generate some sample data, then compute mean and standard deviation #' # in each group #' df <- data.frame( #' gp = factor(rep(letters[1:3], each = 10)), #' y = rnorm(30) #' ) #' ds <- plyr::ddply(df, "gp", plyr::summarise, mean = mean(y), sd = sd(y)) #' #' # The summary data frame ds is used to plot larger red points on top #' # of the raw data. Note that we don't need to supply `data` or `mapping` #' # in each layer because the defaults from ggplot() are used. #' ggplot(df, aes(gp, y)) + #' geom_point() + #' geom_point(data = ds, aes(y = mean), colour = 'red', size = 3) #' #' # Same plot as above, declaring only the data frame in ggplot(). #' # Note how the x and y aesthetics must now be declared in #' # each geom_point() layer. #' ggplot(df) + #' geom_point(aes(gp, y)) + #' geom_point(data = ds, aes(gp, mean), colour = 'red', size = 3) #' #' # Alternatively we can fully specify the plot in each layer. This #' # is not useful here, but can be more clear when working with complex #' # mult-dataset graphics #' ggplot() + #' geom_point(data = df, aes(gp, y)) + #' geom_point(data = ds, aes(gp, mean), colour = 'red', size = 3) + #' geom_errorbar( #' data = ds, #' aes(gp, mean, ymin = mean - sd, ymax = mean + sd), #' colour = 'red', #' width = 0.4 #' ) ggplot <- function(data = NULL, mapping = aes(), ..., environment = parent.frame()) { UseMethod("ggplot") } #' @export ggplot.default <- function(data = NULL, mapping = aes(), ..., environment = parent.frame()) { ggplot.data.frame(fortify(data, ...), mapping, environment = environment) } #' @export ggplot.data.frame <- function(data, mapping = aes(), ..., environment = parent.frame()) { if (!missing(mapping) && !inherits(mapping, "uneval")) { stop("Mapping should be created with `aes() or `aes_()`.", call. = FALSE) } p <- structure(list( data = data, layers = list(), scales = scales_list(), mapping = mapping, theme = list(), coordinates = coord_cartesian(), facet = facet_null(), plot_env = environment ), class = c("gg", "ggplot")) p$labels <- make_labels(mapping) set_last_plot(p) p } plot_clone <- function(plot) { p <- plot p$scales <- plot$scales$clone() p } #' Reports whether x is a ggplot object #' @param x An object to test #' @keywords internal #' @export is.ggplot <- function(x) inherits(x, "ggplot") #' Explicitly draw plot #' #' Generally, you do not need to print or plot a ggplot2 plot explicitly: the #' default top-level print method will do it for you. You will, however, need #' to call \code{print()} explicitly if you want to draw a plot inside a #' function or for loop. #' #' @param x plot to display #' @param newpage draw new (empty) page first? #' @param vp viewport to draw plot in #' @param ... other arguments not used by this method #' @keywords hplot #' @return Invisibly returns the result of \code{\link{ggplot_build}}, which #' is a list with components that contain the plot itself, the data, #' information about the scales, panels etc. #' @export #' @method print ggplot #' @examples #' colours <- list(~class, ~drv, ~fl) #' #' # Doesn't seem to do anything! #' for (colour in colours) { #' ggplot(mpg, aes_(~ displ, ~ hwy, colour = colour)) + #' geom_point() #' } #' #' # Works when we explicitly print the plots #' for (colour in colours) { #' print(ggplot(mpg, aes_(~ displ, ~ hwy, colour = colour)) + #' geom_point()) #' } print.ggplot <- function(x, newpage = is.null(vp), vp = NULL, ...) { set_last_plot(x) if (newpage) grid.newpage() # Record dependency on 'ggplot2' on the display list # (AFTER grid.newpage()) grDevices::recordGraphics( requireNamespace("ggplot2", quietly = TRUE), list(), getNamespace("ggplot2") ) data <- ggplot_build(x) gtable <- ggplot_gtable(data) if (is.null(vp)) { grid.draw(gtable) } else { if (is.character(vp)) seekViewport(vp) else pushViewport(vp) grid.draw(gtable) upViewport() } invisible(data) } #' @rdname print.ggplot #' @method plot ggplot #' @export plot.ggplot <- print.ggplot ggplot2/R/coord-polar.r0000644000177400001440000002305713006200431014623 0ustar murdochusers#' Polar coordinates #' #' The polar coordinate system is most commonly used for pie charts, which #' are a stacked bar chart in polar coordinates. #' #' @param theta variable to map angle to (\code{x} or \code{y}) #' @param start offset of starting point from 12 o'clock in radians #' @param direction 1, clockwise; -1, anticlockwise #' @export #' @examples #' # NOTE: Use these plots with caution - polar coordinates has #' # major perceptual problems. The main point of these examples is #' # to demonstrate how these common plots can be described in the #' # grammar. Use with EXTREME caution. #' #' #' # A pie chart = stacked bar chart + polar coordinates #' pie <- ggplot(mtcars, aes(x = factor(1), fill = factor(cyl))) + #' geom_bar(width = 1) #' pie + coord_polar(theta = "y") #' #' \donttest{ #' #' # A coxcomb plot = bar chart + polar coordinates #' cxc <- ggplot(mtcars, aes(x = factor(cyl))) + #' geom_bar(width = 1, colour = "black") #' cxc + coord_polar() #' # A new type of plot? #' cxc + coord_polar(theta = "y") #' #' # The bullseye chart #' pie + coord_polar() #' #' # Hadley's favourite pie chart #' df <- data.frame( #' variable = c("does not resemble", "resembles"), #' value = c(20, 80) #' ) #' ggplot(df, aes(x = "", y = value, fill = variable)) + #' geom_col(width = 1) + #' scale_fill_manual(values = c("red", "yellow")) + #' coord_polar("y", start = pi / 3) + #' labs(title = "Pac man") #' #' # Windrose + doughnut plot #' if (require("ggplot2movies")) { #' movies$rrating <- cut_interval(movies$rating, length = 1) #' movies$budgetq <- cut_number(movies$budget, 4) #' #' doh <- ggplot(movies, aes(x = rrating, fill = budgetq)) #' #' # Wind rose #' doh + geom_bar(width = 1) + coord_polar() #' # Race track plot #' doh + geom_bar(width = 0.9, position = "fill") + coord_polar(theta = "y") #' } #' } coord_polar <- function(theta = "x", start = 0, direction = 1) { theta <- match.arg(theta, c("x", "y")) r <- if (theta == "x") "y" else "x" ggproto(NULL, CoordPolar, theta = theta, r = r, start = start, direction = sign(direction) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordPolar <- ggproto("CoordPolar", Coord, aspect = function(details) 1, distance = function(self, x, y, details) { if (self$theta == "x") { r <- rescale(y, from = details$r.range) theta <- theta_rescale_no_clip(self, x, details) } else { r <- rescale(x, from = details$r.range) theta <- theta_rescale_no_clip(self, y, details) } dist_polar(r, theta) }, range = function(self, scale_details) { setNames( list(scale_details$theta.range, scale_details$r.range), c(self$theta, self$r) ) }, train = function(self, scale_details) { ret <- list(x = list(), y = list()) for (n in c("x", "y")) { scale <- scale_details[[n]] limits <- self$limits[[n]] if (is.null(limits)) { if (self$theta == n) { expand <- expand_default(scale, c(0, 0.5), c(0, 0)) } else { expand <- expand_default(scale, c(0, 0), c(0, 0)) } range <- scale$dimension(expand) } else { range <- range(scale_transform(scale, limits)) } out <- scale$break_info(range) ret[[n]]$range <- out$range ret[[n]]$major <- out$major_source ret[[n]]$minor <- out$minor_source ret[[n]]$labels <- out$labels } details = list( x.range = ret$x$range, y.range = ret$y$range, x.major = ret$x$major, x.minor = ret$x$minor, x.labels = ret$x$labels, y.major = ret$y$major, y.minor = ret$y$minor, y.labels = ret$y$labels ) if (self$theta == "y") { names(details) <- gsub("x\\.", "r.", names(details)) names(details) <- gsub("y\\.", "theta.", names(details)) } else { names(details) <- gsub("x\\.", "theta.", names(details)) names(details) <- gsub("y\\.", "r.", names(details)) } details }, transform = function(self, data, scale_details) { data <- rename_data(self, data) data$r <- r_rescale(self, data$r, scale_details) data$theta <- theta_rescale(self, data$theta, scale_details) data$x <- data$r * sin(data$theta) + 0.5 data$y <- data$r * cos(data$theta) + 0.5 data }, render_axis_v = function(self, scale_details, theme) { arrange <- scale_details$y.arrange %||% c("primary", "secondary") x <- r_rescale(self, scale_details$r.major, scale_details) + 0.5 guide_axis(x, scale_details$r.labels, "left", theme) axes <- list( left = guide_axis(x, scale_details$r.labels, "left", theme), right = guide_axis(x, scale_details$r.labels, "right", theme) ) axes[[which(arrange == "secondary")]] <- zeroGrob() axes }, render_axis_h = function(scale_details, theme) { list( top = zeroGrob(), bottom = guide_axis(NA, "", "bottom", theme) ) }, render_bg = function(self, scale_details, theme) { scale_details <- rename_data(self, scale_details) theta <- if (length(scale_details$theta.major) > 0) theta_rescale(self, scale_details$theta.major, scale_details) thetamin <- if (length(scale_details$theta.minor) > 0) theta_rescale(self, scale_details$theta.minor, scale_details) thetafine <- seq(0, 2 * pi, length.out = 100) rfine <- c(r_rescale(self, scale_details$r.major, scale_details), 0.45) # This gets the proper theme element for theta and r grid lines: # panel.grid.major.x or .y majortheta <- paste("panel.grid.major.", self$theta, sep = "") minortheta <- paste("panel.grid.minor.", self$theta, sep = "") majorr <- paste("panel.grid.major.", self$r, sep = "") ggname("grill", grobTree( element_render(theme, "panel.background"), if (length(theta) > 0) element_render( theme, majortheta, name = "angle", x = c(rbind(0, 0.45 * sin(theta))) + 0.5, y = c(rbind(0, 0.45 * cos(theta))) + 0.5, id.lengths = rep(2, length(theta)), default.units = "native" ), if (length(thetamin) > 0) element_render( theme, minortheta, name = "angle", x = c(rbind(0, 0.45 * sin(thetamin))) + 0.5, y = c(rbind(0, 0.45 * cos(thetamin))) + 0.5, id.lengths = rep(2, length(thetamin)), default.units = "native" ), element_render( theme, majorr, name = "radius", x = rep(rfine, each = length(thetafine)) * sin(thetafine) + 0.5, y = rep(rfine, each = length(thetafine)) * cos(thetafine) + 0.5, id.lengths = rep(length(thetafine), length(rfine)), default.units = "native" ) )) }, render_fg = function(self, scale_details, theme) { if (is.null(scale_details$theta.major)) { return(element_render(theme, "panel.border")) } theta <- theta_rescale(self, scale_details$theta.major, scale_details) labels <- scale_details$theta.labels # Combine the two ends of the scale if they are close theta <- theta[!is.na(theta)] ends_apart <- (theta[length(theta)] - theta[1]) %% (2 * pi) if (length(theta) > 0 && ends_apart < 0.05) { n <- length(labels) if (is.expression(labels)) { combined <- substitute(paste(a, "/", b), list(a = labels[[1]], b = labels[[n]])) } else { combined <- paste(labels[1], labels[n], sep = "/") } labels[[n]] <- combined labels <- labels[-1] theta <- theta[-1] } grobTree( if (length(labels) > 0) element_render( theme, "axis.text.x", labels, 0.45 * sin(theta) + 0.5, 0.45 * cos(theta) + 0.5, hjust = 0.5, vjust = 0.5, default.units = "native" ), element_render(theme, "panel.border") ) }, render_fg = function(self, scale_details, theme) { if (is.null(scale_details$theta.major)) { return(element_render(theme, "panel.border")) } theta <- theta_rescale(self, scale_details$theta.major, scale_details) labels <- scale_details$theta.labels # Combine the two ends of the scale if they are close theta <- theta[!is.na(theta)] ends_apart <- (theta[length(theta)] - theta[1]) %% (2*pi) if (length(theta) > 0 && ends_apart < 0.05) { n <- length(labels) if (is.expression(labels)) { combined <- substitute(paste(a, "/", b), list(a = labels[[1]], b = labels[[n]])) } else { combined <- paste(labels[1], labels[n], sep = "/") } labels[[n]] <- combined labels <- labels[-1] theta <- theta[-1] } grobTree( if (length(labels) > 0) element_render( theme, "axis.text.x", labels, unit(0.45 * sin(theta) + 0.5, "native"), unit(0.45 * cos(theta) + 0.5, "native"), hjust = 0.5, vjust = 0.5 ), element_render(theme, "panel.border") ) }, labels = function(self, scale_details) { if (self$theta == "y") { list(x = scale_details$y, y = scale_details$x) } else { scale_details } } ) rename_data <- function(coord, data) { if (coord$theta == "y") { plyr::rename(data, c("y" = "theta", "x" = "r"), warn_missing = FALSE) } else { plyr::rename(data, c("y" = "r", "x" = "theta"), warn_missing = FALSE) } } theta_rescale_no_clip <- function(coord, x, scale_details) { rotate <- function(x) (x + coord$start) * coord$direction rotate(rescale(x, c(0, 2 * pi), scale_details$theta.range)) } theta_rescale <- function(coord, x, scale_details) { rotate <- function(x) (x + coord$start) %% (2 * pi) * coord$direction rotate(rescale(x, c(0, 2 * pi), scale_details$theta.range)) } r_rescale <- function(coord, x, scale_details) { rescale(x, c(0, 0.4), scale_details$r.range) } ggplot2/R/geom-tile.r0000644000177400001440000000675113005734527014307 0ustar murdochusers#' Rectangles #' #' \code{geom_rect} and \code{geom_tile} do the same thing, but are #' parameterised differently: \code{geom_rect} uses the locations of the four #' corners (\code{xmin}, \code{xmax}, \code{ymin} and \code{ymax}), while #' \code{geom_tile} uses the center of the tile and its size (\code{x}, #' \code{y}, \code{width}, \code{height}). \code{geom_raster} is a high #' performance special case for when all the tiles are the same size. #' #' @section Aesthetics: #' \aesthetics{geom}{tile} #' #' @inheritParams layer #' @inheritParams geom_point #' @export #' @examples #' # The most common use for rectangles is to draw a surface. You always want #' # to use geom_raster here because it's so much faster, and produces #' # smaller output when saving to PDF #' ggplot(faithfuld, aes(waiting, eruptions)) + #' geom_raster(aes(fill = density)) #' #' # Interpolation smooths the surface & is most helpful when rendering images. #' ggplot(faithfuld, aes(waiting, eruptions)) + #' geom_raster(aes(fill = density), interpolate = TRUE) #' #' # If you want to draw arbitrary rectangles, use geom_tile() or geom_rect() #' df <- data.frame( #' x = rep(c(2, 5, 7, 9, 12), 2), #' y = rep(c(1, 2), each = 5), #' z = factor(rep(1:5, each = 2)), #' w = rep(diff(c(0, 4, 6, 8, 10, 14)), 2) #' ) #' ggplot(df, aes(x, y)) + #' geom_tile(aes(fill = z)) #' ggplot(df, aes(x, y)) + #' geom_tile(aes(fill = z, width = w), colour = "grey50") #' ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) + #' geom_rect(aes(fill = z, width = w), colour = "grey50") #' #' \donttest{ #' # Justification controls where the cells are anchored #' df <- expand.grid(x = 0:5, y = 0:5) #' df$z <- runif(nrow(df)) #' # default is compatible with geom_tile() #' ggplot(df, aes(x, y, fill = z)) + geom_raster() #' # zero padding #' ggplot(df, aes(x, y, fill = z)) + geom_raster(hjust = 0, vjust = 0) #' #' # Inspired by the image-density plots of Ken Knoblauch #' cars <- ggplot(mtcars, aes(mpg, factor(cyl))) #' cars + geom_point() #' cars + stat_bin2d(aes(fill = ..count..), binwidth = c(3,1)) #' cars + stat_bin2d(aes(fill = ..density..), binwidth = c(3,1)) #' #' cars + stat_density(aes(fill = ..density..), geom = "raster", position = "identity") #' cars + stat_density(aes(fill = ..count..), geom = "raster", position = "identity") #' } geom_tile <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomTile, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-rect.r GeomTile <- ggproto("GeomTile", GeomRect, extra_params = c("na.rm", "width", "height"), setup_data = function(data, params) { data$width <- data$width %||% params$width %||% resolution(data$x, FALSE) data$height <- data$height %||% params$height %||% resolution(data$y, FALSE) transform(data, xmin = x - width / 2, xmax = x + width / 2, width = NULL, ymin = y - height / 2, ymax = y + height / 2, height = NULL ) }, default_aes = aes(fill = "grey20", colour = NA, size = 0.1, linetype = 1, alpha = NA), required_aes = c("x", "y"), draw_key = draw_key_polygon ) ggplot2/R/geom-contour.r0000644000177400001440000000463313005734067015037 0ustar murdochusers#' 2d contours of a 3d surface #' #' ggplot2 can not draw true 3d surfaces, but you can use \code{geom_contour} #' and \code{\link{geom_tile}} to visualise 3d surfaces in 2d. To be a valid #' surface, the data must contain only a single row for each unique combination #' of the variables mapped to the \code{x} and \code{y} aesthetics. Contouring #' tends to work best when \code{x} and \code{y} form a (roughly) evenly #' spaced grid. If you data is not evenly spaced, you may want to interpolate #' to a grid before visualising. #' #' @section Aesthetics: #' \aesthetics{geom}{contour} #' #' @inheritParams layer #' @inheritParams geom_point #' @inheritParams geom_path #' @seealso \code{\link{geom_density_2d}}: 2d density contours #' @export #' @export #' @examples #' #' # Basic plot #' v <- ggplot(faithfuld, aes(waiting, eruptions, z = density)) #' v + geom_contour() #' #' # Or compute from raw data #' ggplot(faithful, aes(waiting, eruptions)) + #' geom_density_2d() #' #' \donttest{ #' # Setting bins creates evenly spaced contours in the range of the data #' v + geom_contour(bins = 2) #' v + geom_contour(bins = 10) #' #' # Setting binwidth does the same thing, parameterised by the distance #' # between contours #' v + geom_contour(binwidth = 0.01) #' v + geom_contour(binwidth = 0.001) #' #' # Other parameters #' v + geom_contour(aes(colour = ..level..)) #' v + geom_contour(colour = "red") #' v + geom_raster(aes(fill = density)) + #' geom_contour(colour = "white") #' } geom_contour <- function(mapping = NULL, data = NULL, stat = "contour", position = "identity", ..., lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomContour, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( lineend = lineend, linejoin = linejoin, linemitre = linemitre, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-path.r GeomContour <- ggproto("GeomContour", GeomPath, default_aes = aes(weight = 1, colour = "#3366FF", size = 0.5, linetype = 1, alpha = NA) ) ggplot2/R/geom-label.R0000644000177400001440000001011412651701440014347 0ustar murdochusers#' @export #' @rdname geom_text #' @param label.padding Amount of padding around label. Defaults to 0.25 lines. #' @param label.r Radius of rounded corners. Defaults to 0.15 lines. #' @param label.size Size of label border, in mm. geom_label <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., parse = FALSE, nudge_x = 0, nudge_y = 0, label.padding = unit(0.25, "lines"), label.r = unit(0.15, "lines"), label.size = 0.25, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { if (!missing(nudge_x) || !missing(nudge_y)) { if (!missing(position)) { stop("Specify either `position` or `nudge_x`/`nudge_y`", call. = FALSE) } position <- position_nudge(nudge_x, nudge_y) } layer( data = data, mapping = mapping, stat = stat, geom = GeomLabel, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( parse = parse, label.padding = label.padding, label.r = label.r, label.size = label.size, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomLabel <- ggproto("GeomLabel", Geom, required_aes = c("x", "y", "label"), default_aes = aes( colour = "black", fill = "white", size = 3.88, angle = 0, hjust = 0.5, vjust = 0.5, alpha = NA, family = "", fontface = 1, lineheight = 1.2 ), draw_panel = function(self, data, panel_scales, coord, parse = FALSE, na.rm = FALSE, label.padding = unit(0.25, "lines"), label.r = unit(0.15, "lines"), label.size = 0.25) { lab <- data$label if (parse) { lab <- parse(text = as.character(lab)) } data <- coord$transform(data, panel_scales) if (is.character(data$vjust)) { data$vjust <- compute_just(data$vjust, data$y) } if (is.character(data$hjust)) { data$hjust <- compute_just(data$hjust, data$x) } grobs <- lapply(1:nrow(data), function(i) { row <- data[i, , drop = FALSE] labelGrob(lab[i], x = unit(row$x, "native"), y = unit(row$y, "native"), just = c(row$hjust, row$vjust), padding = label.padding, r = label.r, text.gp = gpar( col = row$colour, fontsize = row$size * .pt, fontfamily = row$family, fontface = row$fontface, lineheight = row$lineheight ), rect.gp = gpar( col = row$colour, fill = alpha(row$fill, row$alpha), lwd = label.size * .pt ) ) }) class(grobs) <- "gList" ggname("geom_label", grobTree(children = grobs)) }, draw_key = draw_key_label ) labelGrob <- function(label, x = unit(0.5, "npc"), y = unit(0.5, "npc"), just = "center", padding = unit(0.25, "lines"), r = unit(0.1, "snpc"), default.units = "npc", name = NULL, text.gp = gpar(), rect.gp = gpar(fill = "white"), vp = NULL) { stopifnot(length(label) == 1) if (!is.unit(x)) x <- unit(x, default.units) if (!is.unit(y)) y <- unit(y, default.units) gTree(label = label, x = x, y = y, just = just, padding = padding, r = r, name = name, text.gp = text.gp, rect.gp = rect.gp, vp = vp, cl = "labelgrob") } #' @export makeContent.labelgrob <- function(x) { hj <- resolveHJust(x$just, NULL) vj <- resolveVJust(x$just, NULL) t <- textGrob( x$label, x$x + 2 * (0.5 - hj) * x$padding, x$y + 2 * (0.5 - vj) * x$padding, just = c(hj, vj), gp = x$text.gp, name = "text" ) r <- roundrectGrob(x$x, x$y, default.units = "native", width = grobWidth(t) + 2 * x$padding, height = grobHeight(t) + 2 * x$padding, just = c(hj, vj), r = x$r, gp = x$rect.gp, name = "box" ) setChildren(x, gList(r, t)) } ggplot2/R/stat-count.r0000644000177400001440000000370113005707617014516 0ustar murdochusers#' @section Computed variables: #' \describe{ #' \item{count}{number of points in bin} #' \item{prop}{groupwise proportion} #' } #' @seealso \code{\link{stat_bin}}, which bins data in ranges and counts the #' cases in each range. It differs from \code{stat_count}, which counts the #' number of cases at each x position (without binning into ranges). #' \code{\link{stat_bin}} requires continuous x data, whereas #' \code{stat_count} can be used for both discrete and continuous x data. #' #' @export #' @rdname geom_bar stat_count <- function(mapping = NULL, data = NULL, geom = "bar", position = "stack", ..., width = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { params <- list( na.rm = na.rm, width = width, ... ) if (!is.null(params$y)) { stop("stat_count() must not be used with a y aesthetic.", call. = FALSE) } layer( data = data, mapping = mapping, stat = StatCount, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = params ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include stat-.r StatCount <- ggproto("StatCount", Stat, required_aes = "x", default_aes = aes(y = ..count.., weight = 1), setup_params = function(data, params) { if (!is.null(data$y)) { stop("stat_count() must not be used with a y aesthetic.", call. = FALSE) } params }, compute_group = function(self, data, scales, width = NULL) { x <- data$x weight <- data$weight %||% rep(1, length(x)) width <- width %||% (resolution(x) * 0.9) count <- as.numeric(tapply(weight, x, sum, na.rm = TRUE)) count[is.na(count)] <- 0 data.frame( count = count, prop = count / sum(abs(count)), x = sort(unique(x)), width = width ) } ) ggplot2/R/annotation.r0000644000177400001440000000511013006175260014555 0ustar murdochusers#' Create an annotation layer #' #' This function adds geoms to a plot, but unlike typical a geom function, #' the properties of the geoms are not mapped from variables of a data frame, #' but are instead passed in as vectors. This is useful for adding small annotations #' (such as text labels) or if you have your data in vectors, and for some #' reason don't want to put them in a data frame. #' #' Note that all position aesthetics are scaled (i.e. they will expand the #' limits of the plot so they are visible), but all other aesthetics are #' set. This means that layers created with this function will never #' affect the legend. #' #' @param geom name of geom to use for annotation #' @param x,y,xmin,ymin,xmax,ymax,xend,yend positioning aesthetics - #' you must specify at least one of these. #' @inheritParams layer #' @inheritParams geom_point #' @export #' @examples #' p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() #' p + annotate("text", x = 4, y = 25, label = "Some text") #' p + annotate("text", x = 2:5, y = 25, label = "Some text") #' p + annotate("rect", xmin = 3, xmax = 4.2, ymin = 12, ymax = 21, #' alpha = .2) #' p + annotate("segment", x = 2.5, xend = 4, y = 15, yend = 25, #' colour = "blue") #' p + annotate("pointrange", x = 3.5, y = 20, ymin = 12, ymax = 28, #' colour = "red", size = 1.5) #' #' p + annotate("text", x = 2:3, y = 20:21, label = c("my label", "label 2")) #' #' p + annotate("text", x = 4, y = 25, label = "italic(R) ^ 2 == 0.75", #' parse = TRUE) #' p + annotate("text", x = 4, y = 25, #' label = "paste(italic(R) ^ 2, \" = .75\")", parse = TRUE) annotate <- function(geom, x = NULL, y = NULL, xmin = NULL, xmax = NULL, ymin = NULL, ymax = NULL, xend = NULL, yend = NULL, ..., na.rm = FALSE) { position <- compact(list( x = x, xmin = xmin, xmax = xmax, xend = xend, y = y, ymin = ymin, ymax = ymax, yend = yend )) aesthetics <- c(position, list(...)) # Check that all aesthetic have compatible lengths lengths <- vapply(aesthetics, length, integer(1)) unequal <- length(unique(setdiff(lengths, 1L))) > 1L if (unequal) { bad <- lengths != 1L details <- paste(names(aesthetics)[bad], " (", lengths[bad], ")", sep = "", collapse = ", ") stop("Unequal parameter lengths: ", details, call. = FALSE) } data <- data.frame(position) layer( geom = geom, params = list( na.rm = na.rm, ... ), stat = StatIdentity, position = PositionIdentity, data = data, mapping = aes_all(names(data)), inherit.aes = FALSE, show.legend = FALSE ) } ggplot2/R/stat-density.r0000644000177400001440000000652712775220036015054 0ustar murdochusers#' @param bw The smoothing bandwidth to be used. #' If numeric, the standard deviation of the smoothing kernel. #' If character, a rule to choose the bandwidth, as listed in #' \code{\link[stats]{bw.nrd}}. #' @param adjust A multiplicate bandwidth adjustment. This makes it possible #' to adjust the bandwidth while still using the a bandwidth estimator. #' For exampe, \code{adjust = 1/2} means use half of the default bandwidth. #' @param kernel Kernel. See list of available kernels in \code{\link{density}}. #' @param n number of equally spaced points at which the density is to be #' estimated, should be a power of two, see \code{\link{density}} for #' details #' @param trim This parameter only matters if you are displaying multiple #' densities in one plot. If \code{FALSE}, the default, each density is #' computed on the full range of the data. If \code{TRUE}, each density #' is computed over the range of that group: this typically means the #' estimated x values will not line-up, and hence you won't be able to #' stack density values. #' @section Computed variables: #' \describe{ #' \item{density}{density estimate} #' \item{count}{density * number of points - useful for stacked density #' plots} #' \item{scaled}{density estimate, scaled to maximum of 1} #' } #' @export #' @rdname geom_density stat_density <- function(mapping = NULL, data = NULL, geom = "area", position = "stack", ..., bw = "nrd0", adjust = 1, kernel = "gaussian", n = 512, trim = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatDensity, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( bw = bw, adjust = adjust, kernel = kernel, n = n, trim = trim, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatDensity <- ggproto("StatDensity", Stat, required_aes = "x", default_aes = aes(y = ..density.., fill = NA), compute_group = function(data, scales, bw = "nrd0", adjust = 1, kernel = "gaussian", n = 512, trim = FALSE, na.rm = FALSE) { if (trim) { range <- range(data$x, na.rm = TRUE) } else { range <- scales$x$dimension() } compute_density(data$x, data$weight, from = range[1], to = range[2], bw = bw, adjust = adjust, kernel = kernel, n = n) } ) compute_density <- function(x, w, from, to, bw = "nrd0", adjust = 1, kernel = "gaussian", n = 512) { nx <- length(x) if (is.null(w)) { w <- rep(1 / nx, nx) } # if less than 3 points, spread density evenly over points if (nx < 3) { return(data.frame( x = x, density = w / sum(w), scaled = w / max(w), count = 1, n = nx )) } dens <- stats::density(x, weights = w, bw = bw, adjust = adjust, kernel = kernel, n = n, from = from, to = to) data.frame( x = dens$x, density = dens$y, scaled = dens$y / max(dens$y, na.rm = TRUE), count = dens$y * nx, n = nx ) } ggplot2/R/fortify-spatial.r0000644000177400001440000000547713006415313015534 0ustar murdochusers#' Fortify method for classes from the sp package. #' #' To figure out the correct variable name for region, inspect #' \code{as.data.frame(model)}. #' #' @param model \code{SpatialPolygonsDataFrame} to convert into a dataframe. #' @param data not used by this method #' @param region name of variable used to split up regions #' @param ... not used by this method #' @keywords internal #' @name fortify.sp #' @examples #' if (require("maptools")) { #' sids <- system.file("shapes/sids.shp", package="maptools") #' nc1 <- readShapePoly(sids, #' proj4string = CRS("+proj=longlat +datum=NAD27")) #' nc1_df <- fortify(nc1) #' } NULL #' @rdname fortify.sp #' @export #' @method fortify SpatialPolygonsDataFrame fortify.SpatialPolygonsDataFrame <- function(model, data, region = NULL, ...) { attr <- as.data.frame(model) # If not specified, split into regions based on polygons if (is.null(region)) { coords <- plyr::ldply(model@polygons,fortify) message("Regions defined for each Polygons") } else { cp <- sp::polygons(model) # Union together all polygons that make up a region unioned <- maptools::unionSpatialPolygons(cp, attr[, region]) coords <- fortify(unioned) coords$order <- 1:nrow(coords) } coords } #' @rdname fortify.sp #' @export #' @method fortify SpatialPolygons fortify.SpatialPolygons <- function(model, data, ...) { plyr::ldply(model@polygons, fortify) } #' @rdname fortify.sp #' @export #' @method fortify Polygons fortify.Polygons <- function(model, data, ...) { subpolys <- model@Polygons pieces <- plyr::ldply(seq_along(subpolys), function(i) { df <- fortify(subpolys[[model@plotOrder[i]]]) df$piece <- i df }) pieces$order <- 1:nrow(pieces) pieces$id <- model@ID pieces$piece <- factor(pieces$piece) pieces$group <- interaction(pieces$id, pieces$piece) pieces } #' @rdname fortify.sp #' @export #' @method fortify Polygon fortify.Polygon <- function(model, data, ...) { df <- as.data.frame(model@coords) names(df) <- c("long", "lat") df$order <- 1:nrow(df) df$hole <- model@hole df } #' @rdname fortify.sp #' @export #' @method fortify SpatialLinesDataFrame fortify.SpatialLinesDataFrame <- function(model, data, ...) { plyr::ldply(model@lines, fortify) } #' @rdname fortify.sp #' @export #' @method fortify Lines fortify.Lines <- function(model, data, ...) { lines <- model@Lines pieces <- plyr::ldply(seq_along(lines), function(i) { df <- fortify(lines[[i]]) df$piece <- i df }) pieces$order <- 1:nrow(pieces) pieces$id <- model@ID pieces$piece <- factor(pieces$piece) pieces$group <- interaction(pieces$id, pieces$piece) pieces } #' @rdname fortify.sp #' @export #' @method fortify Line fortify.Line <- function(model, data, ...) { df <- as.data.frame(model@coords) names(df) <- c("long", "lat") df$order <- 1:nrow(df) df } ggplot2/R/stat-summary-hex.r0000644000177400001440000000272612654706654015664 0ustar murdochusers#' @export #' @rdname stat_summary_2d #' @inheritParams stat_bin_hex stat_summary_hex <- function(mapping = NULL, data = NULL, geom = "hex", position = "identity", ..., bins = 30, binwidth = NULL, drop = TRUE, fun = "mean", fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatSummaryHex, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( bins = bins, binwidth = binwidth, drop = drop, fun = fun, fun.args = fun.args, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSummaryHex <- ggproto("StatSummaryHex", Stat, default_aes = aes(fill = ..value..), required_aes = c("x", "y", "z"), compute_group = function(data, scales, binwidth = NULL, bins = 30, drop = TRUE, fun = "mean", fun.args = list()) { try_require("hexbin", "stat_summary_hex") binwidth <- binwidth %||% hex_binwidth(bins, scales) hexBinSummarise(data$x, data$y, data$z, binwidth, fun = fun, fun.args = fun.args, drop = drop) } ) ggplot2/R/geom-hex.r0000644000177400001440000000545713005734210014125 0ustar murdochusers#' Hexagonal heatmap of 2d bin counts #' #' Divides the plane into regular hexagons, counts the number of cases in #' each hexagon, and then (by default) maps the number of cases to the hexagon #' fill. Hexagon bins avoid the visual artefacts sometimes generated by #' the very regular alignment of \code{\link{geom_bin2d}}. #' #' @section Aesthetics: #' \aesthetics{geom}{hex} #' #' @seealso \code{\link{stat_bin2d}} for rectangular binning #' @param geom,stat Override the default connection between \code{geom_hex} and #' \code{stat_binhex.} #' @export #' @inheritParams layer #' @inheritParams geom_point #' @export #' @examples #' d <- ggplot(diamonds, aes(carat, price)) #' d + geom_hex() #' #' \donttest{ #' # You can control the size of the bins by specifying the number of #' # bins in each direction: #' d + geom_hex(bins = 10) #' d + geom_hex(bins = 30) #' #' # Or by specifying the width of the bins #' d + geom_hex(binwidth = c(1, 1000)) #' d + geom_hex(binwidth = c(.1, 500)) #' } geom_hex <- function(mapping = NULL, data = NULL, stat = "binhex", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomHex, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomHex <- ggproto("GeomHex", Geom, draw_group = function(data, panel_scales, coord) { if (!inherits(coord, "CoordCartesian")) { stop("geom_hex() only works with Cartesian coordinates", call. = FALSE) } coord <- coord$transform(data, panel_scales) ggname("geom_hex", hexGrob( coord$x, coord$y, colour = coord$colour, fill = alpha(coord$fill, coord$alpha) )) }, required_aes = c("x", "y"), default_aes = aes(colour = NA, fill = "grey50", size = 0.5, alpha = NA), draw_key = draw_key_polygon ) # Draw hexagon grob # Modified from code by Nicholas Lewin-Koh and Martin Maechler # # @param x positions of hex centres # @param y positions # @param vector of hex sizes # @param border colour # @param fill colour # @keyword internal hexGrob <- function(x, y, size = rep(1, length(x)), colour = "grey50", fill = "grey90") { stopifnot(length(y) == length(x)) dx <- resolution(x, FALSE) dy <- resolution(y, FALSE) / sqrt(3) / 2 * 1.15 hexC <- hexbin::hexcoords(dx, dy, n = 1) n <- length(x) polygonGrob( x = rep.int(hexC$x, n) * rep(size, each = 6) + rep(x, each = 6), y = rep.int(hexC$y, n) * rep(size, each = 6) + rep(y, each = 6), default.units = "native", id.lengths = rep(6, n), gp = gpar(col = colour, fill = fill) ) } ggplot2/R/theme-current.R0000644000177400001440000000661613006361455015144 0ustar murdochusers#' @include theme-defaults.r #' @include theme-elements.r theme_env <- new.env(parent = emptyenv()) theme_env$current <- theme_gray() #' Get, set, and modify the active theme #' #' The current/active theme is automatically applied to every plot you draw. #' Use \code{theme_get} to get the current theme, and \code{theme_set} to #' completely override it. \code{theme_update} and \code{theme_replace} are #' shorthands for changing individual elements. #' #' @section Adding on to a theme: #' #' \code{+} and \code{\%+replace\%} can be used to modify elements in themes. #' #' \code{+} updates the elements of e1 that differ from elements specified (not #' NULL) in e2. Thus this operator can be used to incrementally add or modify #' attributes of a ggplot theme. #' #' In contrast, \code{\%+replace\%} replaces the entire element; any element of #' a theme not specified in e2 will not be present in the resulting theme (i.e. #' NULL). Thus this operator can be used to overwrite an entire theme. #' #' \code{theme_update} uses the \code{+} operator, so that any unspecified #' values in the theme element will default to the values they are set in the #' theme. \code{theme_replace} uses \code{\%+replace\%} tocompletely replace #' the element, so any unspecified values will overwrite the current value in #' the theme with \code{NULL}s. #' #' @param ... named list of theme settings #' @param e1,e2 Theme and element to combine #' @return \code{theme_set}, \code{theme_update}, and \code{theme_replace} #' invisibly return the previous theme so you can easily save it, then #' later restore it. #' @seealso \code{\link{+.gg}} #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + #' geom_point() #' p #' #' # Use theme_set() to completely override the current theme. #' # Here we have the old theme so we can later restore it. #' # Note that the theme is applied when the plot is drawn, not #' # when it is created. #' old <- theme_set(theme_bw()) #' p #' theme_set(old) #' p #' #' #' # Modifying theme objects ----------------------------------------- #' # You can use + and %+replace% to modify a theme object. #' # They differ in how they deal with missing arguments in #' # the theme elements. #' #' add_el <- theme_grey() + #' theme(text = element_text(family = "Times")) #' add_el$text #' #' rep_el <- theme_grey() %+replace% #' theme(text = element_text(family = "Times")) #' rep_el$text #' #' # theme_update() and theme_replace() are similar except they #' # apply directly to the current/active theme. theme_get <- function() { theme_env$current } #' @rdname theme_get #' @param new new theme (a list of theme elements) #' @export theme_set <- function(new) { missing <- setdiff(names(theme_gray()), names(new)) if (length(missing) > 0) { warning("New theme missing the following elements: ", paste(missing, collapse = ", "), call. = FALSE) } old <- theme_env$current theme_env$current <- new invisible(old) } #' @rdname theme_get #' @export theme_update <- function(...) { theme_set(theme_get() + theme(...)) } #' @rdname theme_get #' @export theme_replace <- function(...) { theme_set(theme_get() %+replace% theme(...)) } #' @rdname theme_get #' @export "%+replace%" <- function(e1, e2) { if (!is.theme(e1) || !is.theme(e2)) { stop("%+replace% requires two theme objects", call. = FALSE) } # Can't use modifyList here since it works recursively and drops NULLs e1[names(e2)] <- e2 e1 } ggplot2/R/scale-linetype.r0000644000177400001440000000236513006124003015317 0ustar murdochusers#' Scale for line patterns #' #' Default line types based on a set supplied by Richard Pearson, #' University of Manchester. Continuous values can not be mapped to #' line types. #' #' @inheritParams scale_x_discrete #' @param na.value The linetype to use for \code{NA} values. #' @rdname scale_linetype #' @export #' @examples #' base <- ggplot(economics_long, aes(date, value01)) #' base + geom_line(aes(group = variable)) #' base + geom_line(aes(linetype = variable)) #' #' # See scale_manual for more flexibility #' #' # Common line types ---------------------------- #' df_lines <- data.frame( #' linetype = factor( #' 1:4, #' labels = c("solid", "longdash", "dashed", "dotted") #' ) #' ) #' ggplot(df_lines) + #' geom_hline(aes(linetype = linetype, yintercept = 0), size = 2) + #' scale_linetype_identity() + #' facet_grid(linetype ~ .) + #' theme_void(20) scale_linetype <- function(..., na.value = "blank") { discrete_scale("linetype", "linetype_d", linetype_pal(), na.value = na.value, ...) } #' @rdname scale_linetype #' @export scale_linetype_continuous <- function(...) { stop("A continuous variable can not be mapped to linetype", call. = FALSE) } #' @rdname scale_linetype #' @export scale_linetype_discrete <- scale_linetype ggplot2/R/geom-blank.r0000644000177400001440000000174613005710406014426 0ustar murdochusers#' Draw nothing #' #' The blank geom draws nothing, but can be a useful way of ensuring common #' scales between different plots. See \code{\link{expand_limits}} for #' more details. #' #' @export #' @inheritParams layer #' @inheritParams geom_point #' @examples #' ggplot(mtcars, aes(wt, mpg)) #' # Nothing to see here! geom_blank <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomBlank, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(...), check.aes = FALSE ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomBlank <- ggproto("GeomBlank", Geom, default_aes = aes(), handle_na = function(data, params) data, draw_panel = function(...) nullGrob() ) ggplot2/R/scale-type.R0000644000177400001440000000343312775207621014430 0ustar murdochusersfind_scale <- function(aes, x, env = parent.frame()) { type <- scale_type(x) candidates <- paste("scale", aes, type, sep = "_") for (scale in candidates) { scale_f <- find_global(scale, env, mode = "function") if (!is.null(scale_f)) return(scale_f()) } # Failure to find a scale is not an error because some "aesthetics" don't # need scales (e.g. group), and it allows others to extend ggplot2 with # their own aesthetics return(NULL) } # Look for object first in parent environment and if not found, then in # ggplot2 namespace environment. This makes it possible to override default # scales by setting them in the parent environment. find_global <- function(name, env, mode = "any") { if (exists(name, envir = env, mode = mode)) { return(get(name, envir = env, mode = mode)) } nsenv <- asNamespace("ggplot2") if (exists(name, envir = nsenv, mode = mode)) { return(get(name, envir = nsenv, mode = mode)) } NULL } # Determine default type of a scale scale_type <- function(x) UseMethod("scale_type") #' @export scale_type.default <- function(x) { message("Don't know how to automatically pick scale for object of type ", paste(class(x), collapse = "/"), ". Defaulting to continuous.") "continuous" } #' @export scale_type.AsIs <- function(x) "identity" #' @export scale_type.logical <- function(x) "discrete" #' @export scale_type.character <- function(x) "discrete" #' @export scale_type.ordered <- function(x) c("ordinal", "discrete") #' @export scale_type.factor <- function(x) "discrete" #' @export scale_type.POSIXt <- function(x) c("datetime", "continuous") #' @export scale_type.Date <- function(x) c("date", "continuous") #' @export scale_type.numeric <- function(x) "continuous" #' @export scale_type.hms <- function(x) "time" ggplot2/R/legend-draw.r0000644000177400001440000001063112661010337014577 0ustar murdochusers#' Key drawing functions #' #' Each Geom has an associated function that draws the key when the geom needs #' to be displayed in a legend. These are the options built into ggplot2. #' #' @return A grid grob. #' @param data A single row data frame containing the scaled aesthetics to #' display in this key #' @param params A list of additional parameters supplied to the geom. #' @param size Width and height of key in mm. #' @keywords internal #' @name draw_key NULL #' @export #' @rdname draw_key draw_key_point <- function(data, params, size) { pointsGrob(0.5, 0.5, pch = data$shape, gp = gpar( col = alpha(data$colour, data$alpha), fill = alpha(data$fill, data$alpha), fontsize = data$size * .pt + data$stroke * .stroke / 2, lwd = data$stroke * .stroke / 2 ) ) } #' @export #' @rdname draw_key draw_key_abline <- function(data, params, size) { segmentsGrob(0, 0, 1, 1, gp = gpar( col = alpha(data$colour, data$alpha), lwd = data$size * .pt, lty = data$linetype, lineend = "butt" ) ) } #' @export #' @rdname draw_key draw_key_rect <- function(data, params, size) { rectGrob(gp = gpar( col = NA, fill = alpha(data$fill, data$alpha), lty = data$linetype )) } #' @export #' @rdname draw_key draw_key_polygon <- function(data, params, size) { lwd <- min(data$size, min(size) / 4) rectGrob( width = unit(1, "npc") - unit(lwd, "mm"), height = unit(1, "npc") - unit(lwd, "mm"), gp = gpar( col = data$colour, fill = alpha(data$fill, data$alpha), lty = data$linetype, lwd = lwd * .pt, linejoin = "mitre" )) } #' @export #' @rdname draw_key draw_key_blank <- function(data, params, size) { zeroGrob() } #' @export #' @rdname draw_key draw_key_boxplot <- function(data, params, size) { grobTree( linesGrob(0.5, c(0.1, 0.25)), linesGrob(0.5, c(0.75, 0.9)), rectGrob(height = 0.5, width = 0.75), linesGrob(c(0.125, 0.875), 0.5), gp = gpar( col = data$colour, fill = alpha(data$fill, data$alpha), lwd = data$size * .pt, lty = data$linetype ) ) } #' @export #' @rdname draw_key draw_key_crossbar <- function(data, params, size) { grobTree( rectGrob(height = 0.5, width = 0.75), linesGrob(c(0.125, 0.875), 0.5), gp = gpar( col = data$colour, fill = alpha(data$fill, data$alpha), lwd = data$size * .pt, lty = data$linetype ) ) } #' @export #' @rdname draw_key draw_key_path <- function(data, params, size) { segmentsGrob(0.1, 0.5, 0.9, 0.5, gp = gpar( col = alpha(data$colour, data$alpha), lwd = data$size * .pt, lty = data$linetype, lineend = "butt" ), arrow = params$arrow ) } #' @export #' @rdname draw_key draw_key_vpath <- function(data, params, size) { segmentsGrob(0.5, 0.1, 0.5, 0.9, gp = gpar( col = alpha(data$colour, data$alpha), lwd = data$size * .pt, lty = data$linetype, lineend = "butt" ), arrow = params$arrow ) } #' @export #' @rdname draw_key draw_key_dotplot <- function(data, params, size) { pointsGrob(0.5, 0.5, size = unit(.5, "npc"), pch = 21, gp = gpar( col = alpha(data$colour, data$alpha), fill = alpha(data$fill, data$alpha) ) ) } #' @export #' @rdname draw_key draw_key_pointrange <- function(data, params, size) { grobTree( draw_key_vpath(data, params, size), draw_key_point(transform(data, size = data$size * 4), params) ) } #' @export #' @rdname draw_key draw_key_smooth <- function(data, params, size) { data$fill <- alpha(data$fill, data$alpha) data$alpha <- 1 grobTree( if (isTRUE(params$se)) rectGrob(gp = gpar(col = NA, fill = data$fill)), draw_key_path(data, params) ) } #' @export #' @rdname draw_key draw_key_text <- function(data, params, size) { textGrob("a", 0.5, 0.5, rot = data$angle, gp = gpar( col = alpha(data$colour, data$alpha), fontfamily = data$family, fontface = data$fontface, fontsize = data$size * .pt ) ) } #' @export #' @rdname draw_key draw_key_label <- function(data, params, size) { grobTree( draw_key_rect(data, list()), draw_key_text(data, list()) ) } #' @export #' @rdname draw_key draw_key_vline <- function(data, params, size) { segmentsGrob(0.5, 0, 0.5, 1, gp = gpar( col = alpha(data$colour, data$alpha), lwd = data$size * .pt, lty = data$linetype, lineend = "butt" ) ) } ggplot2/R/guides-.r0000644000177400001440000002436013006174406013751 0ustar murdochusers#' Set guides for each scale #' #' Guides for each scale can be set scale-by-scale with the \code{guide} #' argument, or en masse with \code{guides()}. #' #' @param ... List of scale name-guide pairs. The guide can either #' be a string (i.e. "colorbar" or "legend"), or a call to a guide function #' (i.e. \code{\link{guide_colourbar}} or \code{\link{guide_legend}}) #' specifying additional arguments. #' @return A list containing the mapping between scale and guide. #' @export #' @family guides #' @examples #' \donttest{ #' # ggplot object #' #' dat <- data.frame(x = 1:5, y = 1:5, p = 1:5, q = factor(1:5), #' r = factor(1:5)) #' p <- ggplot(dat, aes(x, y, colour = p, size = q, shape = r)) + geom_point() #' #' # without guide specification #' p #' #' # Show colorbar guide for colour. #' # All these examples below have a same effect. #' #' p + guides(colour = "colorbar", size = "legend", shape = "legend") #' p + guides(colour = guide_colorbar(), size = guide_legend(), #' shape = guide_legend()) #' p + #' scale_colour_continuous(guide = "colorbar") + #' scale_size_discrete(guide = "legend") + #' scale_shape(guide = "legend") #' #' # Remove some guides #' p + guides(colour = "none") #' p + guides(colour = "colorbar",size = "none") #' #' # Guides are integrated where possible #' #' p + guides(colour = guide_legend("title"), size = guide_legend("title"), #' shape = guide_legend("title")) #' # same as #' g <- guide_legend("title") #' p + guides(colour = g, size = g, shape = g) #' #' p + theme(legend.position = "bottom") #' #' # position of guides #' #' # Set order for multiple guides #' ggplot(mpg, aes(displ, cty)) + #' geom_point(aes(size = hwy, colour = cyl, shape = drv)) + #' guides( #' colour = guide_colourbar(order = 1), #' shape = guide_legend(order = 2), #' size = guide_legend(order = 3) #' ) #' } guides <- function(...) { args <- list(...) if (is.list(args[[1]]) && !inherits(args[[1]], "guide")) args <- args[[1]] args <- rename_aes(args) structure(args, class = "guides") } update_guides <- function(p, guides) { p <- plot_clone(p) p$guides <- defaults(guides, p$guides) p } # building guides - called in ggplotGrob (plot-render.r) # # the procedure is as follows: # # 1. guides_train() # train each scale and generate guide definition for all guides # here, one gdef for one scale # # 2. guides_merge() # merge gdefs if they are overlayed # number of gdefs may be less than number of scales # # 3. guides_geom() # process layer information and generate geom info. # # 4. guides_gengrob() # generate ggrob from each gdef # one ggrob for one gdef # # 5. guides_build() # arrange all ggrobs build_guides <- function(scales, layers, default_mapping, position, theme, guides, labels) { theme$legend.key.width <- theme$legend.key.width %||% theme$legend.key.size theme$legend.key.height <- theme$legend.key.height %||% theme$legend.key.size # Layout of legends depends on their overall location position <- legend_position(position) if (position == "inside") { theme$legend.box <- theme$legend.box %||% "vertical" theme$legend.direction <- theme$legend.direction %||% "vertical" theme$legend.box.just <- theme$legend.box.just %||% c("center", "center") } else if (position == "vertical") { theme$legend.box <- theme$legend.box %||% "vertical" theme$legend.direction <- theme$legend.direction %||% "vertical" theme$legend.box.just <- theme$legend.box.just %||% c("left", "top") } else if (position == "horizontal") { theme$legend.box <- theme$legend.box %||% "horizontal" theme$legend.direction <- theme$legend.direction %||% "horizontal" theme$legend.box.just <- theme$legend.box.just %||% c("center", "top") } # scales -> data for guides gdefs <- guides_train(scales = scales, theme = theme, guides = guides, labels = labels) if (length(gdefs) == 0) return(zeroGrob()) # merge overlay guides gdefs <- guides_merge(gdefs) # process layer information gdefs <- guides_geom(gdefs, layers, default_mapping) if (length(gdefs) == 0) return(zeroGrob()) # generate grob of each guides ggrobs <- guides_gengrob(gdefs, theme) # build up guides grobs <- guides_build(ggrobs, theme) grobs } # Simplify legend position to one of horizontal/vertical/inside legend_position <- function(position) { if (length(position) == 1) { if (position %in% c("top", "bottom")) { "horizontal" } else { "vertical" } } else { "inside" } } # validate guide object validate_guide <- function(guide) { # if guide is specified by character, then find the corresponding guide if (is.character(guide)) match.fun(paste("guide_", guide, sep = ""))() else if (inherits(guide, "guide")) guide else stop("Unknown guide: ", guide) } # train each scale in scales and generate the definition of guide guides_train <- function(scales, theme, guides, labels) { gdefs <- list() for (scale in scales$scales) { # guides(XXX) is stored in guides[[XXX]], # which is prior to scale_ZZZ(guide=XXX) # guide is determined in order of: # + guides(XXX) > + scale_ZZZ(guide=XXX) > default(i.e., legend) output <- scale$aesthetics[1] guide <- guides[[output]] %||% scale$guide # this should be changed to testing guide == "none" # scale$legend is backward compatibility # if guides(XXX=FALSE), then scale_ZZZ(guides=XXX) is discarded. if (guide == "none" || (is.logical(guide) && !guide)) next # check the validity of guide. # if guide is character, then find the guide object guide <- validate_guide(guide) # check the consistency of the guide and scale. if (guide$available_aes != "any" && !scale$aesthetics %in% guide$available_aes) stop("Guide '", guide$name, "' cannot be used for '", scale$aesthetics, "'.") guide$title <- scale$make_title(guide$title %|W|% scale$name %|W|% labels[[output]]) # direction of this grob guide$direction <- guide$direction %||% theme$legend.direction # each guide object trains scale within the object, # so Guides (i.e., the container of guides) need not to know about them guide <- guide_train(guide, scale) if (!is.null(guide)) gdefs[[length(gdefs) + 1]] <- guide } gdefs } # merge overlapped guides guides_merge <- function(gdefs) { # split gdefs based on hash, and apply Reduce (guide_merge) to each gdef group. gdefs <- lapply(gdefs, function(g) { if (g$order == 0) { order <- "99" } else { order <- sprintf("%02d", g$order) } g$hash <- paste(order, g$hash, sep = "_") g }) tapply(gdefs, sapply(gdefs, function(g)g$hash), function(gs)Reduce(guide_merge, gs)) } # process layer information guides_geom <- function(gdefs, layers, default_mapping) { compact(lapply(gdefs, guide_geom, layers, default_mapping)) } # generate grob from each gdef (needs to write this function?) guides_gengrob <- function(gdefs, theme) { # common drawing process for all guides gdefs <- lapply(gdefs, function(g) { g$title.position <- g$title.position %||% switch(g$direction, vertical = "top", horizontal = "left") if (!g$title.position %in% c("top", "bottom", "left", "right")) stop("title position \"", g$title.position, "\" is invalid") g }) lapply(gdefs, guide_gengrob, theme) } # build up all guide boxes into one guide-boxes. guides_build <- function(ggrobs, theme) { theme$legend.spacing <- theme$legend.spacing %||% unit(0.5, "lines") theme$legend.spacing.y <- theme$legend.spacing.y %||% theme$legend.spacing theme$legend.spacing.x <- theme$legend.spacing.x %||% theme$legend.spacing widths <- do.call("unit.c", lapply(ggrobs, function(g)sum(g$widths))) heights <- do.call("unit.c", lapply(ggrobs, function(g)sum(g$heights))) # Set the justification of each legend within the legend box # First value is xjust, second value is yjust just <- valid.just(theme$legend.box.just) xjust <- just[1] yjust <- just[2] # setting that is different for vertical and horizontal guide-boxes. if (theme$legend.box == "horizontal") { # Set justification for each legend for (i in seq_along(ggrobs)) { ggrobs[[i]] <- editGrob(ggrobs[[i]], vp = viewport(x = xjust, y = yjust, just = c(xjust, yjust), height = heightDetails(ggrobs[[i]]))) } guides <- gtable_row(name = "guides", grobs = ggrobs, widths = widths, height = max(heights)) # add space between the guide-boxes guides <- gtable_add_col_space(guides, theme$legend.spacing.x) } else if (theme$legend.box == "vertical") { # Set justification for each legend for (i in seq_along(ggrobs)) { ggrobs[[i]] <- editGrob(ggrobs[[i]], vp = viewport(x = xjust, y = yjust, just = c(xjust, yjust), width = widthDetails(ggrobs[[i]]))) } guides <- gtable_col(name = "guides", grobs = ggrobs, width = max(widths), heights = heights) # add space between the guide-boxes guides <- gtable_add_row_space(guides, theme$legend.spacing.y) } # Add margins around the guide-boxes. theme$legend.box.margin <- theme$legend.box.margin %||% margin() guides <- gtable_add_cols(guides, theme$legend.box.margin[4], pos = 0) guides <- gtable_add_cols(guides, theme$legend.box.margin[2], pos = ncol(guides)) guides <- gtable_add_rows(guides, theme$legend.box.margin[1], pos = 0) guides <- gtable_add_rows(guides, theme$legend.box.margin[3], pos = nrow(guides)) # Add legend box background background <- element_grob(theme$legend.box.background %||% element_blank()) guides <- gtable_add_grob(guides, background, t = 1, l = 1, b = -1, r = -1, z = -Inf, clip = "off", name = "legend.box.background") guides$name <- "guide-box" guides } # S3 dispatches guide_train <- function(...) UseMethod("guide_train") guide_merge <- function(...) UseMethod("guide_merge") guide_geom <- function(...) UseMethod("guide_geom") guide_gengrob <- function(...) UseMethod("guide_gengrob") # Helpers matched_aes <- function(layer, guide, defaults) { all <- names(c(layer$mapping, if (layer$inherit.aes) defaults, layer$stat$default_aes)) geom <- c(layer$geom$required_aes, names(layer$geom$default_aes)) matched <- intersect(intersect(all, geom), names(guide$key)) matched <- setdiff(matched, names(layer$geom_params)) setdiff(matched, names(layer$aes_params)) } ggplot2/R/annotation-custom.r0000644000177400001440000000550513006175277016105 0ustar murdochusers#' @include geom-.r NULL #' Annotation: Custom grob #' #' This is a special geom intended for use as static annotations #' that are the same in every panel. These annotations will not #' affect scales (i.e. the x and y axes will not grow to cover the range #' of the grob, and the grob will not be modified by any ggplot settings #' or mappings). #' #' Most useful for adding tables, inset plots, and other grid-based decorations. #' #' @param grob grob to display #' @param xmin,xmax x location (in data coordinates) giving horizontal #' location of raster #' @param ymin,ymax y location (in data coordinates) giving vertical #' location of raster #' @export #' @note \code{annotation_custom} expects the grob to fill the entire viewport #' defined by xmin, xmax, ymin, ymax. Grobs with a different (absolute) size #' will be center-justified in that region. #' Inf values can be used to fill the full plot panel (see examples). #' @examples #' # Dummy plot #' df <- data.frame(x = 1:10, y = 1:10) #' base <- ggplot(df, aes(x, y)) + #' geom_blank() + #' theme_bw() #' #' # Full panel annotation #' base + annotation_custom( #' grob = grid::roundrectGrob(), #' xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf #' ) #' #' # Inset plot #' df2 <- data.frame(x = 1 , y = 1) #' g <- ggplotGrob(ggplot(df2, aes(x, y)) + #' geom_point() + #' theme(plot.background = element_rect(colour = "black"))) #' base + #' annotation_custom(grob = g, xmin = 1, xmax = 10, ymin = 8, ymax = 10) annotation_custom <- function(grob, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf) { layer( data = dummy_data(), stat = StatIdentity, position = PositionIdentity, geom = GeomCustomAnn, inherit.aes = FALSE, params = list( grob = grob, xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomCustomAnn <- ggproto("GeomCustomAnn", Geom, extra_params = "", handle_na = function(data, params) { data }, draw_panel = function(data, panel_scales, coord, grob, xmin, xmax, ymin, ymax) { if (!inherits(coord, "CoordCartesian")) { stop("annotation_custom only works with Cartesian coordinates", call. = FALSE) } corners <- data.frame(x = c(xmin, xmax), y = c(ymin, ymax)) data <- coord$transform(corners, panel_scales) x_rng <- range(data$x, na.rm = TRUE) y_rng <- range(data$y, na.rm = TRUE) vp <- viewport(x = mean(x_rng), y = mean(y_rng), width = diff(x_rng), height = diff(y_rng), just = c("center","center")) editGrob(grob, vp = vp, name = paste(grob$name, annotation_id())) }, default_aes = aes_(xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf) ) annotation_id <- local({ i <- 1 function() { i <<- i + 1 i } }) ggplot2/R/stat-bin.r0000644000177400001440000001322213006755375014142 0ustar murdochusers#' \code{stat_bin} is suitable only for continuous x data. If your x data is #' discrete, you probably want to use \code{\link{stat_count}}. #' #' @param binwidth The width of the bins. The default is to use \code{bins} #' bins that cover the range of the data. You should always override #' this value, exploring multiple widths to find the best to illustrate the #' stories in your data. #' #' The bin width of a date variable is the number of days in each time; the #' bin width of a time variable is the number of seconds. #' @param bins Number of bins. Overridden by \code{binwidth}. Defaults to 30 #' @param center The center of one of the bins. Note that if center is above or #' below the range of the data, things will be shifted by an appropriate #' number of \code{width}s. To center on integers, for example, use #' \code{width = 1} and \code{center = 0}, even if \code{0} is outside the range #' of the data. At most one of \code{center} and \code{boundary} may be #' specified. #' @param boundary A boundary between two bins. As with \code{center}, things #' are shifted when \code{boundary} is outside the range of the data. For #' example, to center on integers, use \code{width = 1} and \code{boundary = #' 0.5}, even if \code{0.5} is outside the range of the data. At most one of #' \code{center} and \code{boundary} may be specified. #' @param breaks Alternatively, you can supply a numeric vector giving #' the bin boundaries. Overrides \code{binwidth}, \code{bins}, \code{center}, #' and \code{boundary}. #' @param closed One of \code{"right"} or \code{"left"} indicating whether right #' or left edges of bins are included in the bin. #' @param pad If \code{TRUE}, adds empty bins at either end of x. This ensures #' frequency polygons touch 0. Defaults to \code{FALSE}. #' @section Computed variables: #' \describe{ #' \item{count}{number of points in bin} #' \item{density}{density of points in bin, scaled to integrate to 1} #' \item{ncount}{count, scaled to maximum of 1} #' \item{ndensity}{density, scaled to maximum of 1} #' } #' #' @seealso \code{\link{stat_count}}, which counts the number of cases at each x #' posotion, without binning. It is suitable for both discrete and continuous #' x data, whereas \link{stat_bin} is suitable only for continuous x data. #' @export #' @rdname geom_histogram stat_bin <- function(mapping = NULL, data = NULL, geom = "bar", position = "stack", ..., binwidth = NULL, bins = NULL, center = NULL, boundary = NULL, breaks = NULL, closed = c("right", "left"), pad = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatBin, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( binwidth = binwidth, bins = bins, center = center, boundary = boundary, breaks = breaks, closed = closed, pad = pad, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatBin <- ggproto("StatBin", Stat, setup_params = function(data, params) { if (!is.null(data$y) || !is.null(params$y)) { stop("stat_bin() must not be used with a y aesthetic.", call. = FALSE) } if (is.integer(data$x)) { stop('StatBin requires a continuous x variable the x variable is discrete. Perhaps you want stat="count"?', call. = FALSE) } if (!is.null(params$drop)) { warning("`drop` is deprecated. Please use `pad` instead.", call. = FALSE) params$drop <- NULL } if (!is.null(params$origin)) { warning("`origin` is deprecated. Please use `boundary` instead.", call. = FALSE) params$boundary <- params$origin params$origin <- NULL } if (!is.null(params$right)) { warning("`right` is deprecated. Please use `closed` instead.", call. = FALSE) params$closed <- if (params$right) "right" else "left" params$right <- NULL } if (!is.null(params$width)) { stop("`width` is deprecated. Do you want `geom_bar()`?", call. = FALSE) } if (!is.null(params$boundary) && !is.null(params$center)) { stop("Only one of `boundary` and `center` may be specified.", call. = FALSE) } if (is.null(params$breaks) && is.null(params$binwidth) && is.null(params$bins)) { message_wrap("`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.") params$bins <- 30 } params }, compute_group = function(data, scales, binwidth = NULL, bins = NULL, center = NULL, boundary = NULL, closed = c("right", "left"), pad = FALSE, # The following arguments are not used, but must # be listed so parameters are computed correctly breaks = NULL, origin = NULL, right = NULL, drop = NULL, width = NULL) { if (!is.null(breaks)) { bins <- bin_breaks(breaks, closed) } else if (!is.null(binwidth)) { bins <- bin_breaks_width(scales$x$dimension(), binwidth, center = center, boundary = boundary, closed = closed) } else { bins <- bin_breaks_bins(scales$x$dimension(), bins, center = center, boundary = boundary, closed = closed) } bin_vector(data$x, bins, weight = data$weight, pad = pad) }, default_aes = aes(y = ..count..), required_aes = c("x") ) ggplot2/R/position-jitter.r0000644000177400001440000000413213005736464015561 0ustar murdochusers#' Jitter points to avoid overplotting #' #' Couterintuitively adding random noise to a plot can sometimes make it #' easier to read. Jittering is particularly useful for small datasets with #' at least one discrete position. #' #' @family position adjustments #' @param width,height Amount of vertical and horizontal jitter. The jitter #' is added in both positive and negative directions, so the total spread #' is twice the value specified here. #' #' If omitted, defaults to 40\% of the resolution of the data: this means the #' jitter values will occupy 80\% of the implied bins. Categorical data #' is aligned on the integers, so a width or height of 0.5 will spread the #' data so it's not possible to see the distinction between the categories. #' @export #' @examples #' # Jittering is useful when you have a discrete position, and a relatively #' # small number of points #' # take up as much space as a boxplot or a bar #' ggplot(mpg, aes(class, hwy)) + #' geom_boxplot(colour = "grey50") + #' geom_jitter() #' #' # If the default jittering is too much, as in this plot: #' ggplot(mtcars, aes(am, vs)) + #' geom_jitter() #' #' # You can adjust it in two ways #' ggplot(mtcars, aes(am, vs)) + #' geom_jitter(width = 0.1, height = 0.1) #' ggplot(mtcars, aes(am, vs)) + #' geom_jitter(position = position_jitter(width = 0.1, height = 0.1)) position_jitter <- function(width = NULL, height = NULL) { ggproto(NULL, PositionJitter, width = width, height = height ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionJitter <- ggproto("PositionJitter", Position, required_aes = c("x", "y"), setup_params = function(self, data) { list( width = self$width %||% (resolution(data$x, zero = FALSE) * 0.4), height = self$height %||% (resolution(data$y, zero = FALSE) * 0.4) ) }, compute_layer = function(data, params, panel) { trans_x <- if (params$width > 0) function(x) jitter(x, amount = params$width) trans_y <- if (params$height > 0) function(x) jitter(x, amount = params$height) transform_position(data, trans_x, trans_y) } ) ggplot2/R/scale-grey.r0000644000177400001440000000235113006123365014441 0ustar murdochusers#' Sequential grey colour scales #' #' Based on \code{\link{gray.colors}}. This is black and white equivalent #' of \code{\link{scale_colour_gradient}}. #' #' @inheritParams scales::grey_pal #' @inheritParams scale_colour_hue #' @family colour scales #' @rdname scale_grey #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = factor(cyl))) #' p + scale_colour_grey() #' p + scale_colour_grey(end = 0) #' #' # You may want to turn off the pale grey background with this scale #' p + scale_colour_grey() + theme_bw() #' #' # Colour of missing values is controlled with na.value: #' miss <- factor(sample(c(NA, 1:5), nrow(mtcars), replace = TRUE)) #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = miss)) + #' scale_colour_grey() #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = miss)) + #' scale_colour_grey(na.value = "green") scale_colour_grey <- function(..., start = 0.2, end = 0.8, na.value = "red") { discrete_scale("colour", "grey", grey_pal(start, end), na.value = na.value, ...) } #' @rdname scale_grey #' @export scale_fill_grey <- function(..., start = 0.2, end = 0.8, na.value = "red") { discrete_scale("fill", "grey", grey_pal(start, end), na.value = na.value, ...) } ggplot2/R/layout.R0000644000177400001440000001661413010131417013662 0ustar murdochuserscreate_layout <- function(facet) { ggproto(NULL, Layout, facet = facet) } Layout <- ggproto("Layout", NULL, facet = NULL, panel_layout = NULL, panel_scales = NULL, panel_ranges = NULL, setup = function(self, data, plot_data, plot_env, plot_coord) { data <- c(list(plot_data), data) self$facet$params <- utils::modifyList( self$facet$setup_params(data, self$facet$params), list(plot_env = plot_env) ) data <- self$facet$setup_data(data, self$facet$params) self$panel_layout <- self$facet$train(data) if (!all(c("PANEL", "SCALE_X", "SCALE_Y") %in% names(self$panel_layout))) { stop("Facet layout has bad format. It must contains the columns 'PANEL', 'SCALE_X', and 'SCALE_Y'", call. = FALSE) } # Special case of CoordFlip - switch the layout scales if (inherits(plot_coord, "CoordFlip")) { self$panel_layout[, c("SCALE_X", "SCALE_Y")] <- self$panel_layout[, c("SCALE_Y", "SCALE_X"), drop = FALSE] } data[-1] }, map = function(self, data) { lapply(data, function(data) { self$facet$map(data, self$panel_layout) }) }, render = function(self, panels, data, coord, theme, labels) { below <- self$facet$render_back(data, self$panel_layout, self$panel_scales$x, self$panel_scales$y, theme) above <- self$facet$render_front(data, self$panel_layout, self$panel_scales$x, self$panel_scales$y, theme) panels <- lapply(seq_along(panels[[1]]), function(i) { fg <- coord$render_fg(self$panel_ranges[[i]], theme) bg <- coord$render_bg(self$panel_ranges[[i]], theme) panel <- lapply(panels, `[[`, i) panel <- c(below[i], panel, above[i]) if (theme$panel.ontop) { panel <- c(panel, list(bg), list(fg)) } else { panel <- c(list(bg), panel, list(fg)) } ggname(paste("panel", i, sep = "-"), gTree(children = do.call("gList", panel))) }) labels <- coord$labels(list( x = self$xlabel(labels), y = self$ylabel(labels) )) labels <- self$render_labels(labels, theme) self$facet$render_panels(panels, self$panel_layout, self$panel_scales$x, self$panel_scales$y, self$panel_ranges, coord, data, theme, labels) }, train_position = function(self, data, x_scale, y_scale) { # Initialise scales if needed, and possible. layout <- self$panel_layout if (is.null(self$panel_scales$x)) { self$panel_scales$x <- self$facet$init_scales(layout, x_scale = x_scale, params = self$facet$params)$x } if (is.null(self$panel_scales$y)) { self$panel_scales$y <- self$facet$init_scales(layout, y_scale = y_scale, params = self$facet$params)$y } self$facet$train_positions(self$panel_scales$x, self$panel_scales$y, layout, data) }, reset_scales = function(self) { if (!self$facet$shrink) return() lapply(self$panel_scales$x, function(s) s$reset()) lapply(self$panel_scales$y, function(s) s$reset()) invisible() }, map_position = function(self, data) { layout <- self$panel_layout lapply(data, function(layer_data) { match_id <- match(layer_data$PANEL, layout$PANEL) # Loop through each variable, mapping across each scale, then joining # back together x_vars <- intersect(self$panel_scales$x[[1]]$aesthetics, names(layer_data)) names(x_vars) <- x_vars SCALE_X <- layout$SCALE_X[match_id] new_x <- scale_apply(layer_data, x_vars, "map", SCALE_X, self$panel_scales$x) layer_data[, x_vars] <- new_x y_vars <- intersect(self$panel_scales$y[[1]]$aesthetics, names(layer_data)) names(y_vars) <- y_vars SCALE_Y <- layout$SCALE_Y[match_id] new_y <- scale_apply(layer_data, y_vars, "map", SCALE_Y, self$panel_scales$y) layer_data[, y_vars] <- new_y layer_data }) }, finish_data = function(self, data) { lapply(data, function(layer_data) { self$facet$finish_data(layer_data, self$panel_layout, self$panel_scales$x, self$panel_scales$y, self$facet$params) }) }, get_scales = function(self, i) { this_panel <- self$panel_layout[self$panel_layout$PANEL == i, ] list( x = self$panel_scales$x[[this_panel$SCALE_X]], y = self$panel_scales$y[[this_panel$SCALE_Y]] ) }, train_ranges = function(self, coord) { compute_range <- function(ix, iy) { # TODO: change coord_train method to take individual x and y scales coord$train(list(x = self$panel_scales$x[[ix]], y = self$panel_scales$y[[iy]])) } # Switch position of all scales if CoordFlip if (inherits(coord, "CoordFlip") || (inherits(coord, "CoordPolar") && coord$theta == "y")) { lapply(self$panel_scales$x, function(scale) { scale$position <- if (scale$position == "top") "bottom" else "top" }) lapply(self$panel_scales$y, function(scale) { scale$position <- if (scale$position == "left") "right" else "left" }) } self$panel_ranges <- Map(compute_range, self$panel_layout$SCALE_X, self$panel_layout$SCALE_Y) }, xlabel = function(self, labels) { primary <- self$panel_scales$x[[1]]$name %|W|% labels$x primary <- self$panel_scales$x[[1]]$make_title(primary) secondary <- if (is.null(self$panel_scales$x[[1]]$secondary.axis)) { waiver() } else { self$panel_scales$x[[1]]$sec_name() } %|W|% labels$sec.x if (is.derived(secondary)) secondary <- primary secondary <- self$panel_scales$x[[1]]$make_sec_title(secondary) list(primary = primary, secondary = secondary)[self$panel_scales$x[[1]]$axis_order()] }, ylabel = function(self, labels) { primary <- self$panel_scales$y[[1]]$name %|W|% labels$y primary <- self$panel_scales$y[[1]]$make_title(primary) secondary <- if (is.null(self$panel_scales$y[[1]]$secondary.axis)) { waiver() } else { self$panel_scales$y[[1]]$sec_name() } %|W|% labels$sec.y if (is.derived(secondary)) secondary <- primary secondary <- self$panel_scales$y[[1]]$make_sec_title(secondary) list(primary = primary, secondary = secondary)[self$panel_scales$y[[1]]$axis_order()] }, render_labels = function(self, labels, theme) { label_grobs <- lapply(names(labels), function(label) { lapply(c(1, 2), function(i) { modify <- if (i == 2 && label == "y") ".right" else if (i == 1 && label == "x") ".top" else "" if (is.null(labels[[label]][[i]]) || is.waive(labels[[label]][[i]])) return(zeroGrob()) element_render( theme = theme, element = paste0("axis.title.", label, modify), label = labels[[label]][[i]], expand_x = label == "y", expand_y = label == "x" ) }) }) names(label_grobs) <- names(labels) label_grobs } ) # Helpers ----------------------------------------------------------------- # Function for applying scale method to multiple variables in a given # data set. Implement in such a way to minimize copying and hence maximise # speed scale_apply <- function(data, vars, method, scale_id, scales) { if (length(vars) == 0) return() if (nrow(data) == 0) return() n <- length(scales) if (any(is.na(scale_id))) stop() scale_index <- plyr::split_indices(scale_id, n) lapply(vars, function(var) { pieces <- lapply(seq_along(scales), function(i) { scales[[i]][[method]](data[[var]][scale_index[[i]]]) }) # Join pieces back together, if necessary if (!is.null(pieces)) { unlist(pieces)[order(unlist(scale_index))] } }) } ggplot2/R/scale-gradient.r0000644000177400001440000001067013006123334015267 0ustar murdochusers#' Gradient colour scales #' #' \code{scale_*_gradient} creates a two colour gradient (low-high), #' \code{scale_*_gradient2} creates a diverging colour gradient (low-mid-high), #' \code{scale_*_gradientn} creats a n-colour gradient. #' #' Default colours are generated with \pkg{munsell} and #' \code{mnsl(c("2.5PB 2/4", "2.5PB 7/10"))}. Generally, for continuous #' colour scales you want to keep hue constant, but vary chroma and #' luminance. The \pkg{munsell} package makes this easy to do using the #' Munsell colour system. #' #' @inheritParams scales::seq_gradient_pal #' @inheritParams scale_colour_hue #' @param low,high Colours for low and high ends of the gradient. #' @param guide Type of legend. Use \code{"colourbar"} for continuous #' colour bar, or \code{"legend"} for discrete colour legend. #' @param ... Other arguments passed on to \code{\link{continuous_scale}} #' to control name, limits, breaks, labels and so forth. #' @seealso \code{\link[scales]{seq_gradient_pal}} for details on underlying #' palette #' @family colour scales #' @rdname scale_gradient #' @export #' @examples #' df <- data.frame( #' x = runif(100), #' y = runif(100), #' z1 = rnorm(100), #' z2 = abs(rnorm(100)) #' ) #' #' # Default colour scale colours from light blue to dark blue #' ggplot(df, aes(x, y)) + #' geom_point(aes(colour = z2)) #' #' # For diverging colour scales use gradient2 #' ggplot(df, aes(x, y)) + #' geom_point(aes(colour = z1)) + #' scale_colour_gradient2() #' #' # Use your own colour scale with gradientn #' ggplot(df, aes(x, y)) + #' geom_point(aes(colour = z1)) + #' scale_colour_gradientn(colours = terrain.colors(10)) #' #' # Equivalent fill scales do the same job for the fill aesthetic #' ggplot(faithfuld, aes(waiting, eruptions)) + #' geom_raster(aes(fill = density)) + #' scale_fill_gradientn(colours = terrain.colors(10)) #' #' # Adjust colour choices with low and high #' ggplot(df, aes(x, y)) + #' geom_point(aes(colour = z2)) + #' scale_colour_gradient(low = "white", high = "black") #' # Avoid red-green colour contrasts because ~10% of men have difficulty #' # seeing them scale_colour_gradient <- function(..., low = "#132B43", high = "#56B1F7", space = "Lab", na.value = "grey50", guide = "colourbar") { continuous_scale("colour", "gradient", seq_gradient_pal(low, high, space), na.value = na.value, guide = guide, ...) } #' @rdname scale_gradient #' @export scale_fill_gradient <- function(..., low = "#132B43", high = "#56B1F7", space = "Lab", na.value = "grey50", guide = "colourbar") { continuous_scale("fill", "gradient", seq_gradient_pal(low, high, space), na.value = na.value, guide = guide, ...) } #' @inheritParams scales::div_gradient_pal #' @param midpoint The midpoint (in data value) of the diverging scale. #' Defaults to 0. #' @rdname scale_gradient #' @export scale_colour_gradient2 <- function(..., low = muted("red"), mid = "white", high = muted("blue"), midpoint = 0, space = "Lab", na.value = "grey50", guide = "colourbar") { continuous_scale("colour", "gradient2", div_gradient_pal(low, mid, high, space), na.value = na.value, guide = guide, ..., rescaler = mid_rescaler(mid = midpoint)) } #' @rdname scale_gradient #' @export scale_fill_gradient2 <- function(..., low = muted("red"), mid = "white", high = muted("blue"), midpoint = 0, space = "Lab", na.value = "grey50", guide = "colourbar") { continuous_scale("fill", "gradient2", div_gradient_pal(low, mid, high, space), na.value = na.value, guide = guide, ..., rescaler = mid_rescaler(mid = midpoint)) } mid_rescaler <- function(mid) { function(x, to = c(0, 1), from = range(x, na.rm = TRUE)) { rescale_mid(x, to, from, mid) } } #' @inheritParams scales::gradient_n_pal #' @param colours,colors Vector of colours to use for n-colour gradient. #' @rdname scale_gradient #' @export scale_colour_gradientn <- function(..., colours, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar", colors) { colours <- if (missing(colours)) colors else colours continuous_scale("colour", "gradientn", gradient_n_pal(colours, values, space), na.value = na.value, guide = guide, ...) } #' @rdname scale_gradient #' @export scale_fill_gradientn <- function(..., colours, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar", colors) { colours <- if (missing(colours)) colors else colours continuous_scale("fill", "gradientn", gradient_n_pal(colours, values, space), na.value = na.value, guide = guide, ...) } ggplot2/R/scale-alpha.r0000644000177400001440000000221713006122575014563 0ustar murdochusers#' Alpha transparency scales #' #' Alpha-transparency scales are not tremendously useful, but can be a #' convenient way to visually down-weight less important observations. #' \code{scale_alpha} is an alias for \code{scale_alpha_continuous} since #' that is the most common use of alpha, and it saves a bit of typing. #' #' @param ... Other arguments passed on to \code{\link{continuous_scale}} #' or \code{\link{discrete_scale}} as appropriate, to control name, limits, #' breaks, labels and so forth. #' @param range Output range of alpha values. Must lie between 0 and 1. #' @family colour scales #' @export #' @examples #' p <- ggplot(mpg, aes(displ, hwy)) + #' geom_point(aes(alpha = year)) #' #' p #' p + scale_alpha("cylinders") #' p + scale_alpha(range = c(0.4, 0.8)) scale_alpha <- function(..., range = c(0.1, 1)) { continuous_scale("alpha", "alpha_c", rescale_pal(range), ...) } #' @rdname scale_alpha #' @export scale_alpha_continuous <- scale_alpha #' @rdname scale_alpha #' @export scale_alpha_discrete <- function(..., range = c(0.1, 1)) { discrete_scale("alpha", "alpha_d", function(n) seq(range[1], range[2], length.out = n), ...) } ggplot2/R/geom-rug.r0000644000177400001440000000615513005734404014137 0ustar murdochusers#' Rug plots in the margins #' #' A rug plot is a compact visualisation designed to supplement a 2d display #' with the two 1d marginal distributions. Rug plots display individual #' cases so are best used with smaller datasets. #' #' The rug lines are drawn with a fixed size (3% of the total plot size) so #' are dependent on the overall scale expansion in order not to overplot #' existing data. #' #' @section Aesthetics: #' \aesthetics{geom}{rug} #' #' @inheritParams layer #' @inheritParams geom_point #' @param sides A string that controls which sides of the plot the rugs appear on. #' It can be set to a string containing any of \code{"trbl"}, for top, right, #' bottom, and left. #' @export #' @examples #' p <- ggplot(mtcars, aes(wt, mpg)) + #' geom_point() #' p #' p + geom_rug() #' p + geom_rug(sides="b") # Rug on bottom only #' p + geom_rug(sides="trbl") # All four sides #' #' # Use jittering to avoid overplotting for smaller datasets #' ggplot(mpg, aes(displ, cty)) + #' geom_point() + #' geom_rug() #' #' ggplot(mpg, aes(displ, cty)) + #' geom_jitter() + #' geom_rug(alpha = 1/2, position = "jitter") geom_rug <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., sides = "bl", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomRug, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( sides = sides, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomRug <- ggproto("GeomRug", Geom, optional_aes = c("x", "y"), draw_panel = function(data, panel_scales, coord, sides = "bl") { rugs <- list() data <- coord$transform(data, panel_scales) gp <- gpar(col = alpha(data$colour, data$alpha), lty = data$linetype, lwd = data$size * .pt) if (!is.null(data$x)) { if (grepl("b", sides)) { rugs$x_b <- segmentsGrob( x0 = unit(data$x, "native"), x1 = unit(data$x, "native"), y0 = unit(0, "npc"), y1 = unit(0.03, "npc"), gp = gp ) } if (grepl("t", sides)) { rugs$x_t <- segmentsGrob( x0 = unit(data$x, "native"), x1 = unit(data$x, "native"), y0 = unit(1, "npc"), y1 = unit(0.97, "npc"), gp = gp ) } } if (!is.null(data$y)) { if (grepl("l", sides)) { rugs$y_l <- segmentsGrob( y0 = unit(data$y, "native"), y1 = unit(data$y, "native"), x0 = unit(0, "npc"), x1 = unit(0.03, "npc"), gp = gp ) } if (grepl("r", sides)) { rugs$y_r <- segmentsGrob( y0 = unit(data$y, "native"), y1 = unit(data$y, "native"), x0 = unit(1, "npc"), x1 = unit(0.97, "npc"), gp = gp ) } } gTree(children = do.call("gList", rugs)) }, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), draw_key = draw_key_path ) ggplot2/R/coord-.r0000644000177400001440000000753712771277527013626 0ustar murdochusers#' @section Coordinate systems: #' #' All \code{coord_*} functions (like \code{coord_trans}) return a \code{Coord*} #' object (like \code{CoordTrans}). The \code{Coord*} object is responsible for #' adjusting the position of overlapping geoms. #' #' The way that the \code{coord_*} functions work is slightly different from the #' \code{geom_*} and \code{stat_*} functions, because a \code{coord_*} function #' actually "instantiates" the \code{Coord*} object by creating a descendant, #' and returns that. #' #' Each of the \code{Coord*} objects is a \code{\link{ggproto}} object, #' descended from the top-level \code{Coord}. To create a new type of Coord #' object, you typically will want to implement one or more of the following: #' #' \itemize{ #' \item \code{aspect}: Returns the desired aspect ratio for the plot. #' \item \code{labels}: Returns a list containing labels for x and y. #' \item \code{render_fg}: Renders foreground elements. #' \item \code{render_bg}: Renders background elements. #' \item \code{render_axis_h}: Renders the horizontal axes. #' \item \code{render_axis_v}: Renders the vertical axes. #' \item \code{range}: Returns the x and y ranges #' \item \code{train}: Return the trained scale ranges. #' \item \code{transform}: Transforms x and y coordinates. #' \item \code{distance}: Calculates distance. #' \item \code{is_linear}: Returns \code{TRUE} if the coordinate system is #' linear; \code{FALSE} otherwise. #' } #' #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export Coord <- ggproto("Coord", aspect = function(ranges) NULL, labels = function(scale_details) scale_details, render_fg = function(scale_details, theme) element_render(theme, "panel.border"), render_bg = function(scale_details, theme) { x.major <- if (length(scale_details$x.major) > 0) unit(scale_details$x.major, "native") x.minor <- if (length(scale_details$x.minor) > 0) unit(scale_details$x.minor, "native") y.major <- if (length(scale_details$y.major) > 0) unit(scale_details$y.major, "native") y.minor <- if (length(scale_details$y.minor) > 0) unit(scale_details$y.minor, "native") guide_grid(theme, x.minor, x.major, y.minor, y.major) }, render_axis_h = function(scale_details, theme) { arrange <- scale_details$x.arrange %||% c("secondary", "primary") list( top = render_axis(scale_details, arrange[1], "x", "top", theme), bottom = render_axis(scale_details, arrange[2], "x", "bottom", theme) ) }, render_axis_v = function(scale_details, theme) { arrange <- scale_details$y.arrange %||% c("primary", "secondary") list( left = render_axis(scale_details, arrange[1], "y", "left", theme), right = render_axis(scale_details, arrange[2], "y", "right", theme) ) }, range = function(scale_details) { return(list(x = scale_details$x.range, y = scale_details$y.range)) }, train = function(scale_details) NULL, transform = function(data, range) NULL, distance = function(x, y, scale_details) NULL, is_linear = function() FALSE ) #' Is this object a coordinate system? #' #' @export is.Coord #' @keywords internal is.Coord <- function(x) inherits(x, "Coord") expand_default <- function(scale, discrete = c(0, 0.6), continuous = c(0.05, 0)) { scale$expand %|W|% if (scale$is_discrete()) discrete else continuous } # Renders an axis with the correct orientation or zeroGrob if no axis should be # generated render_axis <- function(scale_details, axis, scale, position, theme) { if (axis == "primary") { guide_axis(scale_details[[paste0(scale, ".major")]], scale_details[[paste0(scale, ".labels")]], position, theme) } else if (axis == "secondary" && !is.null(scale_details[[paste0(scale, ".sec.major")]])) { guide_axis(scale_details[[paste0(scale, ".sec.major")]], scale_details[[paste0(scale, ".sec.labels")]], position, theme) } else { zeroGrob() } } ggplot2/R/geom-raster.r0000644000177400001440000000546412651701660014650 0ustar murdochusers#' @include geom-.r NULL #' @export #' @rdname geom_tile #' @param hjust,vjust horizontal and vertical justification of the grob. Each #' justification value should be a number between 0 and 1. Defaults to 0.5 #' for both, centering each pixel over its data location. #' @param interpolate If \code{TRUE} interpolate linearly, if \code{FALSE} #' (the default) don't interpolate. geom_raster <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., hjust = 0.5, vjust = 0.5, interpolate = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { stopifnot(is.numeric(hjust), length(hjust) == 1) stopifnot(is.numeric(vjust), length(vjust) == 1) layer( data = data, mapping = mapping, stat = stat, geom = GeomRaster, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( hjust = hjust, vjust = vjust, interpolate = interpolate, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomRaster <- ggproto("GeomRaster", Geom, default_aes = aes(fill = "grey20", alpha = NA), non_missing_aes = "fill", required_aes = c("x", "y"), setup_data = function(data, params) { hjust <- params$hjust %||% 0.5 vjust <- params$vjust %||% 0.5 w <- resolution(data$x, FALSE) h <- resolution(data$y, FALSE) data$xmin <- data$x - w * (1 - hjust) data$xmax <- data$x + w * hjust data$ymin <- data$y - h * (1 - vjust) data$ymax <- data$y + h * vjust data }, draw_panel = function(data, panel_scales, coord, interpolate = FALSE, hjust = 0.5, vjust = 0.5) { if (!inherits(coord, "CoordCartesian")) { stop("geom_raster only works with Cartesian coordinates", call. = FALSE) } data <- coord$transform(data, panel_scales) # Convert vector of data to raster x_pos <- as.integer((data$x - min(data$x)) / resolution(data$x, FALSE)) y_pos <- as.integer((data$y - min(data$y)) / resolution(data$y, FALSE)) nrow <- max(y_pos) + 1 ncol <- max(x_pos) + 1 raster <- matrix(NA_character_, nrow = nrow, ncol = ncol) raster[cbind(nrow - y_pos, x_pos + 1)] <- alpha(data$fill, data$alpha) # Figure out dimensions of raster on plot x_rng <- c(min(data$xmin, na.rm = TRUE), max(data$xmax, na.rm = TRUE)) y_rng <- c(min(data$ymin, na.rm = TRUE), max(data$ymax, na.rm = TRUE)) rasterGrob(raster, x = mean(x_rng), y = mean(y_rng), width = diff(x_rng), height = diff(y_rng), default.units = "native", interpolate = interpolate ) }, draw_key = draw_key_rect ) ggplot2/R/stat-identity.r0000644000177400001440000000156113005734773015224 0ustar murdochusers#' Leave data as is #' #' The identity statistic leaves the data unchanged. #' #' @inheritParams layer #' @inheritParams geom_point #' @export #' @examples #' p <- ggplot(mtcars, aes(wt, mpg)) #' p + stat_identity() stat_identity <- function(mapping = NULL, data = NULL, geom = "point", position = "identity", ..., show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatIdentity, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = FALSE, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatIdentity <- ggproto("StatIdentity", Stat, compute_layer = function(data, scales, params) { data } ) ggplot2/R/geom-vline.r0000644000177400001440000000230312651702166014454 0ustar murdochusers#' @include stat-.r NULL #' @export #' @rdname geom_abline geom_vline <- function(mapping = NULL, data = NULL, ..., xintercept, na.rm = FALSE, show.legend = NA) { # Act like an annotation if (!missing(xintercept)) { data <- data.frame(xintercept = xintercept) mapping <- aes(xintercept = xintercept) show.legend <- FALSE } layer( data = data, mapping = mapping, stat = StatIdentity, geom = GeomVline, position = PositionIdentity, show.legend = show.legend, inherit.aes = FALSE, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomVline <- ggproto("GeomVline", Geom, draw_panel = function(data, panel_scales, coord) { ranges <- coord$range(panel_scales) data$x <- data$xintercept data$xend <- data$xintercept data$y <- ranges$y[1] data$yend <- ranges$y[2] GeomSegment$draw_panel(unique(data), panel_scales, coord) }, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), required_aes = "xintercept", draw_key = draw_key_vline ) ggplot2/R/coord-fixed.r0000644000177400001440000000277413006177314014625 0ustar murdochusers#' Cartesian coordinates with fixed "aspect ratio" #' #' A fixed scale coordinate system forces a specified ratio between the #' physical representation of data units on the axes. The ratio represents the #' number of units on the y-axis equivalent to one unit on the x-axis. The #' default, \code{ratio = 1}, ensures that one unit on the x-axis is the same #' length as one unit on the y-axis. Ratios higher than one make units on the #' y axis longer than units on the x-axis, and vice versa. This is similar to #' \code{\link[MASS]{eqscplot}}, but it works for all types of graphics. #' #' @export #' @inheritParams coord_cartesian #' @param ratio aspect ratio, expressed as \code{y / x} #' @examples #' # ensures that the ranges of axes are equal to the specified ratio by #' # adjusting the plot aspect ratio #' #' p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() #' p + coord_fixed(ratio = 1) #' p + coord_fixed(ratio = 5) #' p + coord_fixed(ratio = 1/5) #' #' # Resize the plot to see that the specified aspect ratio is maintained coord_fixed <- function(ratio = 1, xlim = NULL, ylim = NULL, expand = TRUE) { ggproto(NULL, CoordFixed, limits = list(x = xlim, y = ylim), ratio = ratio, expand = expand ) } #' @export #' @rdname coord_fixed #' @usage NULL coord_equal <- coord_fixed #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordFixed <- ggproto("CoordFixed", CoordCartesian, aspect = function(self, ranges) { diff(ranges$y.range) / diff(ranges$x.range) * self$ratio } ) ggplot2/R/geom-violin.r0000644000177400001440000001376113005734535014650 0ustar murdochusers#' Violin plot #' #' A violin plot is a compact display of a continuous distribution. It is a #' blend of \code{\link{geom_boxplot}} and \code{\link{geom_density}}: a #' violin plot is a mirrored density plot displayed in the same way as a #' boxplot. #' #' @section Aesthetics: #' \aesthetics{geom}{violin} #' #' @inheritParams layer #' @inheritParams geom_point #' @param draw_quantiles If \code{not(NULL)} (default), draw horizontal lines #' at the given quantiles of the density estimate. #' @param trim If \code{TRUE} (default), trim the tails of the violins #' to the range of the data. If \code{FALSE}, don't trim the tails. #' @param geom,stat Use to override the default connection between #' \code{geom_violin} and \code{stat_ydensity}. #' @export #' @references Hintze, J. L., Nelson, R. D. (1998) Violin Plots: A Box #' Plot-Density Trace Synergism. The American Statistician 52, 181-184. #' @examples #' p <- ggplot(mtcars, aes(factor(cyl), mpg)) #' p + geom_violin() #' #' \donttest{ #' p + geom_violin() + geom_jitter(height = 0, width = 0.1) #' #' # Scale maximum width proportional to sample size: #' p + geom_violin(scale = "count") #' #' # Scale maximum width to 1 for all violins: #' p + geom_violin(scale = "width") #' #' # Default is to trim violins to the range of the data. To disable: #' p + geom_violin(trim = FALSE) #' #' # Use a smaller bandwidth for closer density fit (default is 1). #' p + geom_violin(adjust = .5) #' #' # Add aesthetic mappings #' # Note that violins are automatically dodged when any aesthetic is #' # a factor #' p + geom_violin(aes(fill = cyl)) #' p + geom_violin(aes(fill = factor(cyl))) #' p + geom_violin(aes(fill = factor(vs))) #' p + geom_violin(aes(fill = factor(am))) #' #' # Set aesthetics to fixed value #' p + geom_violin(fill = "grey80", colour = "#3366FF") #' #' # Show quartiles #' p + geom_violin(draw_quantiles = c(0.25, 0.5, 0.75)) #' #' # Scales vs. coordinate transforms ------- #' if (require("ggplot2movies")) { #' # Scale transformations occur before the density statistics are computed. #' # Coordinate transformations occur afterwards. Observe the effect on the #' # number of outliers. #' m <- ggplot(movies, aes(y = votes, x = rating, group = cut_width(rating, 0.5))) #' m + geom_violin() #' m + geom_violin() + scale_y_log10() #' m + geom_violin() + coord_trans(y = "log10") #' m + geom_violin() + scale_y_log10() + coord_trans(y = "log10") #' #' # Violin plots with continuous x: #' # Use the group aesthetic to group observations in violins #' ggplot(movies, aes(year, budget)) + geom_violin() #' ggplot(movies, aes(year, budget)) + #' geom_violin(aes(group = cut_width(year, 10)), scale = "width") #' } #' } geom_violin <- function(mapping = NULL, data = NULL, stat = "ydensity", position = "dodge", ..., draw_quantiles = NULL, trim = TRUE, scale = "area", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomViolin, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( trim = trim, scale = scale, draw_quantiles = draw_quantiles, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomViolin <- ggproto("GeomViolin", Geom, setup_data = function(data, params) { data$width <- data$width %||% params$width %||% (resolution(data$x, FALSE) * 0.9) # ymin, ymax, xmin, and xmax define the bounding rectangle for each group plyr::ddply(data, "group", transform, xmin = x - width / 2, xmax = x + width / 2 ) }, draw_group = function(self, data, ..., draw_quantiles = NULL) { # Find the points for the line to go all the way around data <- transform(data, xminv = x - violinwidth * (x - xmin), xmaxv = x + violinwidth * (xmax - x) ) # Make sure it's sorted properly to draw the outline newdata <- rbind( plyr::arrange(transform(data, x = xminv), y), plyr::arrange(transform(data, x = xmaxv), -y) ) # Close the polygon: set first and last point the same # Needed for coord_polar and such newdata <- rbind(newdata, newdata[1,]) # Draw quantiles if requested, so long as there is non-zero y range if (length(draw_quantiles) > 0 & !scales::zero_range(range(data$y))) { stopifnot(all(draw_quantiles >= 0), all(draw_quantiles <= 1)) # Compute the quantile segments and combine with existing aesthetics quantiles <- create_quantile_segment_frame(data, draw_quantiles) aesthetics <- data[ rep(1, nrow(quantiles)), setdiff(names(data), c("x", "y")), drop = FALSE ] aesthetics$alpha <- rep(1, nrow(quantiles)) both <- cbind(quantiles, aesthetics) quantile_grob <- GeomPath$draw_panel(both, ...) ggname("geom_violin", grobTree( GeomPolygon$draw_panel(newdata, ...), quantile_grob) ) } else { ggname("geom_violin", GeomPolygon$draw_panel(newdata, ...)) } }, draw_key = draw_key_polygon, default_aes = aes(weight = 1, colour = "grey20", fill = "white", size = 0.5, alpha = NA, linetype = "solid"), required_aes = c("x", "y") ) # Returns a data.frame with info needed to draw quantile segments. create_quantile_segment_frame <- function(data, draw_quantiles) { dens <- cumsum(data$density) / sum(data$density) ecdf <- stats::approxfun(dens, data$y) ys <- ecdf(draw_quantiles) # these are all the y-values for quantiles # Get the violin bounds for the requested quantiles. violin.xminvs <- (stats::approxfun(data$y, data$xminv))(ys) violin.xmaxvs <- (stats::approxfun(data$y, data$xmaxv))(ys) # We have two rows per segment drawn. Each segment gets its own group. data.frame( x = interleave(violin.xminvs, violin.xmaxvs), y = rep(ys, each = 2), group = rep(ys, each = 2) ) } ggplot2/R/utilities-table.r0000644000177400001440000000226112555701147015516 0ustar murdochuserscompute_grob_widths <- function(grob_layout, widths) { cols <- split(grob_layout, grob_layout$l) do.call("unit.c", lapply(cols, compute_grob_dimensions, dims = widths)) } compute_grob_heights <- function(grob_layout, heights) { cols <- split(grob_layout, grob_layout$t) do.call("unit.c", lapply(cols, compute_grob_dimensions, dims = heights)) } compute_grob_dimensions <- function(grob_layout, dims) { # If any don't have explicit dims, then width is NULL if (!any(grob_layout$type %in% names(dims))) { return(unit(1, "null")) } grob_layout <- grob_layout[grob_layout$type %in% names(dims), , drop = FALSE] dims <- unique(Map(function(type, pos) { type_width <- dims[[type]] if (length(type_width) == 1) type_width else type_width[pos] }, grob_layout$type, grob_layout$id)) units <- vapply(dims, is.unit, logical(1)) if (all(units)) { if (all(lapply(dims, attr, "unit") == "null")) unit(max(unlist(dims)), "null") else do.call("max", dims) } else { raw_max <- unit(max(unlist(dims[!units])), "cm") if (any(units)) { unit_max <- max(do.call("unit.c", dims[units])) max(raw_max, unit_max) } else { raw_max } } } ggplot2/R/grob-null.r0000644000177400001440000000127112560216326014313 0ustar murdochusers#' The zero grob draws nothing and has zero size. #' #' @keywords internal #' @export zeroGrob <- function() .zeroGrob .zeroGrob <- grob(cl = "zeroGrob", name = "NULL") #' @export #' @method widthDetails zeroGrob widthDetails.zeroGrob <- function(x) unit(0, "cm") #' @export #' @method heightDetails zeroGrob heightDetails.zeroGrob <- function(x) unit(0, "cm") #' @export #' @method grobWidth zeroGrob grobWidth.zeroGrob <- function(x) unit(0, "cm") #' @export #' @method grobHeight zeroGrob grobHeight.zeroGrob <- function(x) unit(0, "cm") #' @export #' @method drawDetails zeroGrob drawDetails.zeroGrob <- function(x, recording) {} is.zero <- function(x) is.null(x) || inherits(x, "zeroGrob") ggplot2/R/geom-linerange.r0000644000177400001440000000561213006123155015277 0ustar murdochusers#' Vertical intervals: lines, crossbars & errorbars #' #' Various ways of representing a vertical interval defined by \code{x}, #' \code{ymin} and \code{ymax}. Each case draws a single graphical object. #' #' @section Aesthetics: #' \aesthetics{geom}{linerange} #' #' @param fatten A multiplicative factor used to increase the size of the #' middle bar in \code{geom_crossbar()} and the middle point in #' \code{geom_pointrange()}. #' @seealso #' \code{\link{stat_summary}} for examples of these guys in use, #' \code{\link{geom_smooth}} for continuous analog, #' \code{\link{geom_errorbarh}} for a horizontal error bar. #' @export #' @inheritParams layer #' @inheritParams geom_point #' @examples #' #' # Create a simple example dataset #' df <- data.frame( #' trt = factor(c(1, 1, 2, 2)), #' resp = c(1, 5, 3, 4), #' group = factor(c(1, 2, 1, 2)), #' upper = c(1.1, 5.3, 3.3, 4.2), #' lower = c(0.8, 4.6, 2.4, 3.6) #' ) #' #' p <- ggplot(df, aes(trt, resp, colour = group)) #' p + geom_linerange(aes(ymin = lower, ymax = upper)) #' p + geom_pointrange(aes(ymin = lower, ymax = upper)) #' p + geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2) #' p + geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) #' #' # Draw lines connecting group means #' p + #' geom_line(aes(group = group)) + #' geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) #' #' # If you want to dodge bars and errorbars, you need to manually #' # specify the dodge width #' p <- ggplot(df, aes(trt, resp, fill = group)) #' p + #' geom_col(position = "dodge") + #' geom_errorbar(aes(ymin = lower, ymax = upper), position = "dodge", width = 0.25) #' #' # Because the bars and errorbars have different widths #' # we need to specify how wide the objects we are dodging are #' dodge <- position_dodge(width=0.9) #' p + #' geom_col(position = dodge) + #' geom_errorbar(aes(ymin = lower, ymax = upper), position = dodge, width = 0.25) geom_linerange <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomLinerange, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomLinerange <- ggproto("GeomLinerange", Geom, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), draw_key = draw_key_vpath, required_aes = c("x", "ymin", "ymax"), draw_panel = function(data, panel_scales, coord) { data <- transform(data, xend = x, y = ymin, yend = ymax) ggname("geom_linerange", GeomSegment$draw_panel(data, panel_scales, coord)) } ) ggplot2/R/geom-text.r0000644000177400001440000001623513005734515014331 0ustar murdochusers#' Text #' #' \code{geom_text} adds text directly to the plot. \code{geom_label} draws #' a rectangle behind the text, making it easier to read. #' #' Note the the "width" and "height" of a text element are 0, so stacking #' and dodging text will not work by default, and axis limits are not #' automatically expanded to include all text. Obviously, labels do have #' height and width, but they are physical units, not data units. The amount of #' space they occupy on that plot is not constant in data units: when you #' resize a plot, labels stay the same size, but the size of the axes changes. #' #' @section Aesthetics: #' \aesthetics{geom}{text} #' #' @section \code{geom_label}: #' Currently \code{geom_label} does not support the \code{rot} parameter and #' is considerably slower than \code{geom_text}. The \code{fill} aesthetic #' controls the background colour of the label. #' #' @section Alignment: #' You can modify text alignment with the \code{vjust} and \code{hjust} #' aesthetics. These can either be a number between 0 (right/bottom) and #' 1 (top/left) or a character ("left", "middle", "right", "bottom", "center", #' "top"). There are two special alignments: "inward" and "outward". #' Inward always aligns text towards the center, and outward aligns #' it away from the center #' #' @inheritParams layer #' @inheritParams geom_point #' @param parse If TRUE, the labels will be parsed into expressions and #' displayed as described in ?plotmath #' @param nudge_x,nudge_y Horizontal and vertical adjustment to nudge labels by. #' Useful for offsetting text from points, particularly on discrete scales. #' @param check_overlap If \code{TRUE}, text that overlaps previous text in the #' same layer will not be plotted. #' @export #' @examples #' p <- ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars))) #' #' p + geom_text() #' # Avoid overlaps #' p + geom_text(check_overlap = TRUE) #' # Labels with background #' p + geom_label() #' # Change size of the label #' p + geom_text(size = 10) #' #' # Set aesthetics to fixed value #' p + geom_point() + geom_text(hjust = 0, nudge_x = 0.05) #' p + geom_point() + geom_text(vjust = 0, nudge_y = 0.5) #' p + geom_point() + geom_text(angle = 45) #' \dontrun{ #' # Doesn't work on all systems #' p + geom_text(family = "Times New Roman") #' } #' #' # Add aesthetic mappings #' p + geom_text(aes(colour = factor(cyl))) #' p + geom_text(aes(colour = factor(cyl))) + #' scale_colour_discrete(l = 40) #' p + geom_label(aes(fill = factor(cyl)), colour = "white", fontface = "bold") #' #' p + geom_text(aes(size = wt)) #' # Scale height of text, rather than sqrt(height) #' p + geom_text(aes(size = wt)) + scale_radius(range = c(3,6)) #' #' # You can display expressions by setting parse = TRUE. The #' # details of the display are described in ?plotmath, but note that #' # geom_text uses strings, not expressions. #' p + geom_text(aes(label = paste(wt, "^(", cyl, ")", sep = "")), #' parse = TRUE) #' #' # Add a text annotation #' p + #' geom_text() + #' annotate("text", label = "plot mpg vs. wt", x = 2, y = 15, size = 8, colour = "red") #' #' \donttest{ #' # Aligning labels and bars -------------------------------------------------- #' df <- data.frame( #' x = factor(c(1, 1, 2, 2)), #' y = c(1, 3, 2, 1), #' grp = c("a", "b", "a", "b") #' ) #' #' # ggplot2 doesn't know you want to give the labels the same virtual width #' # as the bars: #' ggplot(data = df, aes(x, y, group = grp)) + #' geom_col(aes(fill = grp), position = "dodge") + #' geom_text(aes(label = y), position = "dodge") #' # So tell it: #' ggplot(data = df, aes(x, y, group = grp)) + #' geom_col(aes(fill = grp), position = "dodge") + #' geom_text(aes(label = y), position = position_dodge(0.9)) #' # Use you can't nudge and dodge text, so instead adjust the y postion #' ggplot(data = df, aes(x, y, group = grp)) + #' geom_col(aes(fill = grp), position = "dodge") + #' geom_text( #' aes(label = y, y = y + 0.05), #' position = position_dodge(0.9), #' vjust = 0 #' ) #' #' # To place text in the middle of each bar in a stacked barplot, you #' # need to set the vjust parameter of position_stack() #' ggplot(data = df, aes(x, y, group = grp)) + #' geom_col(aes(fill = grp)) + #' geom_text(aes(label = y), position = position_stack(vjust = 0.5)) #' #' # Justification ------------------------------------------------------------- #' df <- data.frame( #' x = c(1, 1, 2, 2, 1.5), #' y = c(1, 2, 1, 2, 1.5), #' text = c("bottom-left", "bottom-right", "top-left", "top-right", "center") #' ) #' ggplot(df, aes(x, y)) + #' geom_text(aes(label = text)) #' ggplot(df, aes(x, y)) + #' geom_text(aes(label = text), vjust = "inward", hjust = "inward") #' } geom_text <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., parse = FALSE, nudge_x = 0, nudge_y = 0, check_overlap = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { if (!missing(nudge_x) || !missing(nudge_y)) { if (!missing(position)) { stop("Specify either `position` or `nudge_x`/`nudge_y`", call. = FALSE) } position <- position_nudge(nudge_x, nudge_y) } layer( data = data, mapping = mapping, stat = stat, geom = GeomText, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( parse = parse, check_overlap = check_overlap, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomText <- ggproto("GeomText", Geom, required_aes = c("x", "y", "label"), default_aes = aes( colour = "black", size = 3.88, angle = 0, hjust = 0.5, vjust = 0.5, alpha = NA, family = "", fontface = 1, lineheight = 1.2 ), draw_panel = function(data, panel_scales, coord, parse = FALSE, na.rm = FALSE, check_overlap = FALSE) { lab <- data$label if (parse) { lab <- parse(text = as.character(lab)) } data <- coord$transform(data, panel_scales) if (is.character(data$vjust)) { data$vjust <- compute_just(data$vjust, data$y) } if (is.character(data$hjust)) { data$hjust <- compute_just(data$hjust, data$x) } textGrob( lab, data$x, data$y, default.units = "native", hjust = data$hjust, vjust = data$vjust, rot = data$angle, gp = gpar( col = alpha(data$colour, data$alpha), fontsize = data$size * .pt, fontfamily = data$family, fontface = data$fontface, lineheight = data$lineheight ), check.overlap = check_overlap ) }, draw_key = draw_key_text ) compute_just <- function(just, x) { inward <- just == "inward" just[inward] <- c("left", "middle", "right")[just_dir(x[inward])] outward <- just == "outward" just[outward] <- c("right", "middle", "left")[just_dir(x[outward])] unname(c(left = 0, center = 0.5, right = 1, bottom = 0, middle = 0.5, top = 1)[just]) } just_dir <- function(x, tol = 0.001) { out <- rep(2L, length(x)) out[x < 0.5 - tol] <- 1L out[x > 0.5 + tol] <- 3L out } ggplot2/R/ggproto.r0000644000177400001440000002221213006406277014073 0ustar murdochusers#' Create a new ggproto object #' #' Construct a new object with \code{ggproto}, test with \code{is.proto}, #' and access parent methods/fields with \code{ggproto_parent}. #' #' ggproto implements a protype based OO system which blurs the lines between #' classes and instances. It is inspired by the proto package, but it has some #' important differences. Notably, it cleanly supports cross-package #' inheritance, and has faster performance. #' #' In most cases, creating a new OO system to be used by a single package is #' not a good idea. However, it was the least-bad solution for ggplot2 because #' it required the fewest changes to an already complex code base. #' #' @section Calling methods: #' ggproto methods can take an optional \code{self} argument: if it is present, #' it is a regular method; if it's absent, it's a "static" method (i.e. it #' doesn't use any fields). #' #' Imagine you have a ggproto object \code{Adder}, which has a #' method \code{addx = function(self, n) n + self$x}. Then, to call this #' function, you would use \code{Adder$addx(10)} -- the \code{self} is passed #' in automatically by the wrapper function. \code{self} be located anywhere #' in the function signature, although customarily it comes first. #' #' @section Calling methods in a parent: #' To explicitly call a methods in a parent, use #' \code{ggproto_parent(Parent, self)}. #' #' @param _class Class name to assign to the object. This is stored as the class #' attribute of the object. This is optional: if \code{NULL} (the default), #' no class name will be added to the object. #' @param _inherit ggproto object to inherit from. If \code{NULL}, don't #' inherit from any object. #' @param ... A list of members in the ggproto object. #' @export #' @examples #' Adder <- ggproto("Adder", #' x = 0, #' add = function(self, n) { #' self$x <- self$x + n #' self$x #' } #' ) #' is.ggproto(Adder) #' #' Adder$add(10) #' Adder$add(10) #' #' Doubler <- ggproto("Doubler", Adder, #' add = function(self, n) { #' ggproto_parent(Adder, self)$add(n * 2) #' } #' ) #' Doubler$x #' Doubler$add(10) ggproto <- function(`_class` = NULL, `_inherit` = NULL, ...) { e <- new.env(parent = emptyenv()) members <- list(...) if (length(members) != sum(nzchar(names(members)))) { stop("All members of a ggproto object must be named.") } # R <3.1.2 will error when list2env() is given an empty list, so we need to # check length. https://github.com/tidyverse/ggplot2/issues/1444 if (length(members) > 0) { list2env(members, envir = e) } # Dynamically capture parent: this is necessary in order to avoid # capturing the parent at package build time. `_inherit` <- substitute(`_inherit`) env <- parent.frame() find_super <- function() { eval(`_inherit`, env, NULL) } super <- find_super() if (!is.null(super)) { if (!is.ggproto(super)) { stop("`_inherit` must be a ggproto object.") } e$super <- find_super class(e) <- c(`_class`, class(super)) } else { class(e) <- c(`_class`, "ggproto") } e } #' @export #' @rdname ggproto #' @param parent,self Access parent class \code{parent} of object \code{self}. ggproto_parent <- function(parent, self) { structure(list(parent = parent, self = self), class = "ggproto_parent") } #' @param x An object to test. #' @export #' @rdname ggproto is.ggproto <- function(x) inherits(x, "ggproto") fetch_ggproto <- function(x, name) { res <- NULL val <- .subset2(x, name) # The is.null check is an optimization for a common case; exists() also # catches the case where the value exists but has a NULL value. if (!is.null(val) || exists(name, envir = x, inherits = FALSE)) { res <- val } else { # If not found here, recurse into super environments super <- .subset2(x, "super") if (is.null(super)) { # no super class } else if (is.function(super)) { res <- fetch_ggproto(super(), name) } else { stop( class(x)[[1]], " was built with an incompatible version of ggproto.\n", "Please reinstall the package that provides this extension.", call. = FALSE ) } } res } #' @export `$.ggproto` <- function(x, name) { res <- fetch_ggproto(x, name) if (!is.function(res)) { return(res) } make_proto_method(x, res) } #' @export `$.ggproto_parent` <- function(x, name) { res <- fetch_ggproto(.subset2(x, "parent"), name) if (!is.function(res)) { return(res) } make_proto_method(.subset2(x, "self"), res) } make_proto_method <- function(self, f) { args <- formals(f) # is.null is a fast path for a common case; the %in% check is slower but also # catches the case where there's a `self = NULL` argument. has_self <- !is.null(args[["self"]]) || "self" %in% names(args) if (has_self) { fun <- function(...) f(..., self = self) } else { fun <- function(...) f(...) } class(fun) <- "ggproto_method" fun } #' @export `[[.ggproto` <- `$.ggproto` #' Convert a ggproto object to a list #' #' This will not include the object's \code{super} member. #' #' @param x A ggproto object to convert to a list. #' @param inherit If \code{TRUE} (the default), flatten all inherited items into #' the returned list. If \code{FALSE}, do not include any inherited items. #' @param ... Further arguments to pass to \code{as.list.environment}. #' @export #' @keywords internal as.list.ggproto <- function(x, inherit = TRUE, ...) { res <- list() if (inherit) { if (is.function(x$super)) { res <- as.list(x$super()) } } current <- as.list.environment(x, ...) res[names(current)] <- current res$super <- NULL res } #' Format or print a ggproto object #' #' If a ggproto object has a \code{$print} method, this will call that method. #' Otherwise, it will print out the members of the object, and optionally, the #' members of the inherited objects. #' #' @param x A ggproto object to print. #' @param flat If \code{TRUE} (the default), show a flattened list of all local #' and inherited members. If \code{FALSE}, show the inheritance hierarchy. #' @param ... If the ggproto object has a \code{print} method, further arguments #' will be passed to it. Otherwise, these arguments are unused. #' #' @export #' @examples #' Dog <- ggproto( #' print = function(self, n) { #' cat("Woof!\n") #' } #' ) #' Dog #' cat(format(Dog), "\n") print.ggproto <- function(x, ..., flat = TRUE) { if (is.function(x$print)) { x$print(...) } else { cat(format(x, flat = flat), "\n", sep = "") invisible(x) } } #' @export #' @rdname print.ggproto format.ggproto <- function(x, ..., flat = TRUE) { classes_str <- function(obj) { classes <- setdiff(class(obj), "ggproto") if (length(classes) == 0) return("") paste0(": Class ", paste(classes, collapse = ', ')) } # Get a flat list if requested if (flat) { objs <- as.list(x, inherit = TRUE) } else { objs <- x } str <- paste0( "\n", indent(object_summaries(objs, flat = flat), 4) ) if (flat && is.function(x$super)) { str <- paste0( str, "\n", indent( paste0("super: ", " "), 4 ) ) } str } # Return a summary string of the items of a list or environment # x must be a list or environment object_summaries <- function(x, exclude = NULL, flat = TRUE) { if (length(x) == 0) return(NULL) if (is.list(x)) obj_names <- sort(names(x)) else if (is.environment(x)) obj_names <- ls(x, all.names = TRUE) obj_names <- setdiff(obj_names, exclude) values <- vapply(obj_names, function(name) { obj <- x[[name]] if (is.function(obj)) "function" else if (is.ggproto(obj)) format(obj, flat = flat) else if (is.environment(obj)) "environment" else if (is.null(obj)) "NULL" else if (is.atomic(obj)) trim(paste(as.character(obj), collapse = " ")) else paste(class(obj), collapse = ", ") }, FUN.VALUE = character(1)) paste0(obj_names, ": ", values, sep = "", collapse = "\n") } # Given a string, indent every line by some number of spaces. # The exception is to not add spaces after a trailing \n. indent <- function(str, indent = 0) { gsub("(\\n|^)(?!$)", paste0("\\1", paste(rep(" ", indent), collapse = "")), str, perl = TRUE ) } # Trim a string to n characters; if it's longer than n, add " ..." to the end trim <- function(str, n = 60) { if (nchar(str) > n) paste(substr(str, 1, 56), "...") else str } #' @export print.ggproto_method <- function(x, ...) { cat(format(x), sep = "") } #' @export format.ggproto_method <- function(x, ...) { # Given a function, return a string from srcref if present. If not present, # paste the deparsed lines of code together. format_fun <- function(fn) { srcref <- attr(fn, "srcref", exact = TRUE) if (is.null(srcref)) return(paste(format(fn), collapse = "\n")) paste(as.character(srcref), collapse = "\n") } x <- unclass(x) paste0( "", "\n \n ", format_fun(x), "\n\n \n ", format_fun(environment(x)$f) ) } # proto2 TODO: better way of getting formals for self$draw ggproto_formals <- function(x) formals(environment(x)$f) ggplot2/R/stat-smooth-methods.r0000644000177400001440000000370612664107350016343 0ustar murdochusers# Prediction data frame # Get predictions with standard errors into data frame # # @keyword internal # @alias predictdf.default # @alias predictdf.glm # @alias predictdf.loess # @alias predictdf.locfit predictdf <- function(model, xseq, se, level) UseMethod("predictdf") #' @export predictdf.default <- function(model, xseq, se, level) { pred <- stats::predict(model, newdata = data.frame(x = xseq), se.fit = se, level = level, interval = if (se) "confidence" else "none") if (se) { fit <- as.data.frame(pred$fit) names(fit) <- c("y", "ymin", "ymax") data.frame(x = xseq, fit, se = pred$se.fit) } else { data.frame(x = xseq, y = as.vector(pred)) } } #' @export predictdf.glm <- function(model, xseq, se, level) { pred <- stats::predict(model, newdata = data.frame(x = xseq), se.fit = se, type = "link") if (se) { std <- stats::qnorm(level / 2 + 0.5) data.frame( x = xseq, y = model$family$linkinv(as.vector(pred$fit)), ymin = model$family$linkinv(as.vector(pred$fit - std * pred$se.fit)), ymax = model$family$linkinv(as.vector(pred$fit + std * pred$se.fit)), se = as.vector(pred$se.fit) ) } else { data.frame(x = xseq, y = model$family$linkinv(as.vector(pred))) } } #' @export predictdf.loess <- function(model, xseq, se, level) { pred <- stats::predict(model, newdata = data.frame(x = xseq), se = se) if (se) { y = pred$fit ci <- pred$se.fit * stats::qt(level / 2 + .5, pred$df) ymin = y - ci ymax = y + ci data.frame(x = xseq, y, ymin, ymax, se = pred$se.fit) } else { data.frame(x = xseq, y = as.vector(pred)) } } #' @export predictdf.locfit <- function(model, xseq, se, level) { pred <- stats::predict(model, newdata = data.frame(x = xseq), se.fit = se) if (se) { y = pred$fit ymin = y - pred$se.fit ymax = y + pred$se.fit data.frame(x = xseq, y, ymin, ymax, se = pred$se.fit) } else { data.frame(x = xseq, y = as.vector(pred)) } } ggplot2/R/coord-transform.r0000644000177400001440000001254213006200472015523 0ustar murdochusers#' Transformed Cartesian coordinate system #' #' \code{coord_trans} is different to scale transformations in that it occurs after #' statistical transformation and will affect the visual appearance of geoms - there is #' no guarantee that straight lines will continue to be straight. #' #' Transformations only work with continuous values: see #' \code{\link[scales]{trans_new}} for list of transformations, and instructions #' on how to create your own. #' #' @param x,y transformers for x and y axes #' @param xtrans,ytrans Deprecated; use \code{x} and \code{y} instead. #' @param limx,limy limits for x and y axes. (Named so for backward #' compatibility) #' @export #' @examples #' \donttest{ #' # See ?geom_boxplot for other examples #' #' # Three ways of doing transformation in ggplot: #' # * by transforming the data #' ggplot(diamonds, aes(log10(carat), log10(price))) + #' geom_point() #' # * by transforming the scales #' ggplot(diamonds, aes(carat, price)) + #' geom_point() + #' scale_x_log10() + #' scale_y_log10() #' # * by transforming the coordinate system: #' ggplot(diamonds, aes(carat, price)) + #' geom_point() + #' coord_trans(x = "log10", y = "log10") #' #' # The difference between transforming the scales and #' # transforming the coordinate system is that scale #' # transformation occurs BEFORE statistics, and coordinate #' # transformation afterwards. Coordinate transformation also #' # changes the shape of geoms: #' #' d <- subset(diamonds, carat > 0.5) #' #' ggplot(d, aes(carat, price)) + #' geom_point() + #' geom_smooth(method = "lm") + #' scale_x_log10() + #' scale_y_log10() #' #' ggplot(d, aes(carat, price)) + #' geom_point() + #' geom_smooth(method = "lm") + #' coord_trans(x = "log10", y = "log10") #' #' # Here I used a subset of diamonds so that the smoothed line didn't #' # drop below zero, which obviously causes problems on the log-transformed #' # scale #' #' # With a combination of scale and coordinate transformation, it's #' # possible to do back-transformations: #' ggplot(diamonds, aes(carat, price)) + #' geom_point() + #' geom_smooth(method = "lm") + #' scale_x_log10() + #' scale_y_log10() + #' coord_trans(x = scales::exp_trans(10), y = scales::exp_trans(10)) #' #' # cf. #' ggplot(diamonds, aes(carat, price)) + #' geom_point() + #' geom_smooth(method = "lm") #' #' # Also works with discrete scales #' df <- data.frame(a = abs(rnorm(26)),letters) #' plot <- ggplot(df,aes(a,letters)) + geom_point() #' #' plot + coord_trans(x = "log10") #' plot + coord_trans(x = "sqrt") #' } coord_trans <- function(x = "identity", y = "identity", limx = NULL, limy = NULL, xtrans, ytrans) { if (!missing(xtrans)) { gg_dep("1.0.1", "`xtrans` arguments is deprecated; please use `x` instead.") x <- xtrans } if (!missing(ytrans)) { gg_dep("1.0.1", "`ytrans` arguments is deprecated; please use `y` instead.") y <- ytrans } # @kohske # Now limits are implemented. # But for backward compatibility, xlim -> limx, ylim -> ylim # Because there are many examples such as # > coord_trans(x = "log10", y = "log10") # Maybe this is changed. if (is.character(x)) x <- as.trans(x) if (is.character(y)) y <- as.trans(y) ggproto(NULL, CoordTrans, trans = list(x = x, y = y), limits = list(x = limx, y = limy) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordTrans <- ggproto("CoordTrans", Coord, distance = function(self, x, y, scale_details) { max_dist <- dist_euclidean(scale_details$x.range, scale_details$y.range) dist_euclidean(self$trans$x$transform(x), self$trans$y$transform(y)) / max_dist }, transform = function(self, data, scale_details) { trans_x <- function(data) transform_value(self$trans$x, data, scale_details$x.range) trans_y <- function(data) transform_value(self$trans$y, data, scale_details$y.range) data <- transform_position(data, trans_x, trans_y) transform_position(data, squish_infinite, squish_infinite) }, train = function(self, scale_details) { c(train_trans(scale_details$x, self$limits$x, self$trans$x, "x"), train_trans(scale_details$y, self$limits$y, self$trans$y, "y")) } ) transform_value <- function(trans, value, range) { if (is.null(value)) return(value) rescale(trans$transform(value), 0:1, range) } train_trans <- function(scale_details, limits, trans, name) { # first, calculate the range that is the numerical limits in data space # expand defined by scale OR coord # @kohske # Expansion of data range sometimes go beyond domain, # so in trans, expansion takes place at the final stage. if (is.null(limits)) { range <- scale_details$dimension() } else { range <- range(scale_details$transform(limits)) } # breaks on data space out <- scale_details$break_info(range) # trans'd range out$range <- trans$transform(out$range) # expansion if limits are not specified if (is.null(limits)) { expand <- expand_default(scale_details) out$range <- expand_range(out$range, expand[1], expand[2]) } # major and minor values in plot space out$major_source <- transform_value(trans, out$major_source, out$range) out$minor_source <- transform_value(trans, out$minor_source, out$range) out <- list( range = out$range, labels = out$labels, major = out$major_source, minor = out$minor_source ) names(out) <- paste(name, names(out), sep = ".") out } ggplot2/R/position-collide.r0000644000177400001440000000520512776450250015675 0ustar murdochusers# Detect and prevent collisions. # Powers dodging, stacking and filling. collide <- function(data, width = NULL, name, strategy, ..., check.width = TRUE, reverse = FALSE) { # Determine width if (!is.null(width)) { # Width set manually if (!(all(c("xmin", "xmax") %in% names(data)))) { data$xmin <- data$x - width / 2 data$xmax <- data$x + width / 2 } } else { if (!(all(c("xmin", "xmax") %in% names(data)))) { data$xmin <- data$x data$xmax <- data$x } # Width determined from data, must be floating point constant widths <- unique(data$xmax - data$xmin) widths <- widths[!is.na(widths)] # # Suppress warning message since it's not reliable # if (!zero_range(range(widths))) { # warning(name, " requires constant width: output may be incorrect", # call. = FALSE) # } width <- widths[1] } # Reorder by x position, then on group. The default stacking order reverses # the group in order to match the legend order. if (reverse) { data <- data[order(data$xmin, data$group), ] } else { data <- data[order(data$xmin, -data$group), ] } # Check for overlap intervals <- as.numeric(t(unique(data[c("xmin", "xmax")]))) intervals <- intervals[!is.na(intervals)] if (length(unique(intervals)) > 1 & any(diff(scale(intervals)) < -1e-6)) { warning(name, " requires non-overlapping x intervals", call. = FALSE) # This is where the algorithm from [L. Wilkinson. Dot plots. # The American Statistician, 1999.] should be used } if (!is.null(data$ymax)) { plyr::ddply(data, "xmin", strategy, ..., width = width) } else if (!is.null(data$y)) { data$ymax <- data$y data <- plyr::ddply(data, "xmin", strategy, ..., width = width) data$y <- data$ymax data } else { stop("Neither y nor ymax defined") } } # Dodge overlapping interval. # Assumes that each set has the same horizontal position. pos_dodge <- function(df, width) { n <- length(unique(df$group)) if (n == 1) return(df) if (!all(c("xmin", "xmax") %in% names(df))) { df$xmin <- df$x df$xmax <- df$x } d_width <- max(df$xmax - df$xmin) # df <- data.frame(n = c(2:5, 10, 26), div = c(4, 3, 2.666666, 2.5, 2.2, 2.1)) # ggplot(df, aes(n, div)) + geom_point() # Have a new group index from 1 to number of groups. # This might be needed if the group numbers in this set don't include all of 1:n groupidx <- match(df$group, sort(unique(df$group))) # Find the center for each group, then use that to calculate xmin and xmax df$x <- df$x + width * ((groupidx - 0.5) / n - .5) df$xmin <- df$x - d_width / n / 2 df$xmax <- df$x + d_width / n / 2 df } ggplot2/R/stat-boxplot.r0000644000177400001440000000573512772541251015066 0ustar murdochusers#' @rdname geom_boxplot #' @param coef length of the whiskers as multiple of IQR. Defaults to 1.5 #' @inheritParams stat_identity #' @section Computed variables: #' \describe{ #' \item{width}{width of boxplot} #' \item{ymin}{lower whisker = smallest observation greater than or equal to lower hinge - 1.5 * IQR} #' \item{lower}{lower hinge, 25\% quantile} #' \item{notchlower}{lower edge of notch = median - 1.58 * IQR / sqrt(n)} #' \item{middle}{median, 50\% quantile} #' \item{notchupper}{upper edge of notch = median + 1.58 * IQR / sqrt(n)} #' \item{upper}{upper hinge, 75\% quantile} #' \item{ymax}{upper whisker = largest observation less than or equal to upper hinge + 1.5 * IQR} #' } #' @export stat_boxplot <- function(mapping = NULL, data = NULL, geom = "boxplot", position = "dodge", ..., coef = 1.5, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatBoxplot, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, coef = coef, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatBoxplot <- ggproto("StatBoxplot", Stat, required_aes = c("x", "y"), non_missing_aes = "weight", setup_params = function(data, params) { params$width <- params$width %||% (resolution(data$x) * 0.75) if (is.double(data$x) && !has_groups(data) && any(data$x != data$x[1L])) { warning( "Continuous x aesthetic -- did you forget aes(group=...)?", call. = FALSE) } params }, compute_group = function(data, scales, width = NULL, na.rm = FALSE, coef = 1.5) { qs <- c(0, 0.25, 0.5, 0.75, 1) if (!is.null(data$weight)) { mod <- quantreg::rq(y ~ 1, weights = weight, data = data, tau = qs) stats <- as.numeric(stats::coef(mod)) } else { stats <- as.numeric(stats::quantile(data$y, qs)) } names(stats) <- c("ymin", "lower", "middle", "upper", "ymax") iqr <- diff(stats[c(2, 4)]) outliers <- data$y < (stats[2] - coef * iqr) | data$y > (stats[4] + coef * iqr) if (any(outliers)) { stats[c(1, 5)] <- range(c(stats[2:4], data$y[!outliers]), na.rm = TRUE) } if (length(unique(data$x)) > 1) width <- diff(range(data$x)) * 0.9 df <- as.data.frame(as.list(stats)) df$outliers <- list(data$y[outliers]) if (is.null(data$weight)) { n <- sum(!is.na(data$y)) } else { # Sum up weights for non-NA positions of y and weight n <- sum(data$weight[!is.na(data$y) & !is.na(data$weight)]) } df$notchupper <- df$middle + 1.58 * iqr / sqrt(n) df$notchlower <- df$middle - 1.58 * iqr / sqrt(n) df$x <- if (is.factor(data$x)) data$x[1] else mean(range(data$x)) df$width <- width df$relvarwidth <- sqrt(n) df } ) ggplot2/R/stat-unique.r0000644000177400001440000000172013005735013014662 0ustar murdochusers#' Remove duplicates #' #' @section Aesthetics: #' \aesthetics{stat}{unique} #' #' @export #' @inheritParams layer #' @inheritParams geom_point #' @examples #' ggplot(mtcars, aes(vs, am)) + #' geom_point(alpha = 0.1) #' ggplot(mtcars, aes(vs, am)) + #' geom_point(alpha = 0.1, stat = "unique") stat_unique <- function(mapping = NULL, data = NULL, geom = "point", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatUnique, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatUnique <- ggproto("StatUnique", Stat, compute_panel = function(data, scales) unique(data) ) ggplot2/R/scale-discrete-.r0000644000177400001440000001113113006122667015352 0ustar murdochusers#' Position scales for discrete data #' #' You can use continuous positions even with a discrete position scale - #' this allows you (e.g.) to place labels between bars in a bar chart. #' Continuous positions are numeric values starting at one for the first #' level, and increasing by one for each level (i.e. the labels are placed #' at integer positions). This is what allows jittering to work. #' #' @param ... common discrete scale parameters: \code{name}, \code{breaks}, #' \code{labels}, \code{na.value}, \code{limits} and \code{guide}. See #' \code{\link{discrete_scale}} for more details #' @param expand a numeric vector of length two giving multiplicative and #' additive expansion constants. These constants ensure that the data is #' placed some distance away from the axes. #' @param position The position of the axis. \code{left} or \code{right} for y #' axes, \code{top} or \code{bottom} for x axes #' @rdname scale_discrete #' @family position scales #' @export #' @examples #' ggplot(diamonds, aes(cut)) + geom_bar() #' #' \donttest{ #' # The discrete position scale is added automatically whenever you #' # have a discrete position. #' #' (d <- ggplot(subset(diamonds, carat > 1), aes(cut, clarity)) + #' geom_jitter()) #' #' d + scale_x_discrete("Cut") #' d + scale_x_discrete("Cut", labels = c("Fair" = "F","Good" = "G", #' "Very Good" = "VG","Perfect" = "P","Ideal" = "I")) #' #' # Use limits to adjust the which levels (and in what order) #' # are displayed #' d + scale_x_discrete(limits = c("Fair","Ideal")) #' #' # you can also use the short hand functions xlim and ylim #' d + xlim("Fair","Ideal", "Good") #' d + ylim("I1", "IF") #' #' # See ?reorder to reorder based on the values of another variable #' ggplot(mpg, aes(manufacturer, cty)) + geom_point() #' ggplot(mpg, aes(reorder(manufacturer, cty), cty)) + geom_point() #' ggplot(mpg, aes(reorder(manufacturer, displ), cty)) + geom_point() #' #' # Use abbreviate as a formatter to reduce long names #' ggplot(mpg, aes(reorder(manufacturer, displ), cty)) + #' geom_point() + #' scale_x_discrete(labels = abbreviate) #' } scale_x_discrete <- function(..., expand = waiver(), position = "bottom") { sc <- discrete_scale(c("x", "xmin", "xmax", "xend"), "position_d", identity, ..., expand = expand, guide = "none", position = position, super = ScaleDiscretePosition) sc$range_c <- continuous_range() sc } #' @rdname scale_discrete #' @export scale_y_discrete <- function(..., expand = waiver(), position = "left") { sc <- discrete_scale(c("y", "ymin", "ymax", "yend"), "position_d", identity, ..., expand = expand, guide = "none", position = position, super = ScaleDiscretePosition) sc$range_c <- continuous_range() sc } # The discrete position scale maintains two separate ranges - one for # continuous data and one for discrete data. This complicates training and # mapping, but makes it possible to place objects at non-integer positions, # as is necessary for jittering etc. #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleDiscretePosition <- ggproto("ScaleDiscretePosition", ScaleDiscrete, train = function(self, x) { if (is.discrete(x)) { self$range$train(x, drop = self$drop, na.rm = !self$na.translate) } else { self$range_c$train(x) } }, get_limits = function(self) { if (self$is_empty()) return(c(0, 1)) self$limits %||% self$range$range %||% integer() }, is_empty = function(self) { is.null(self$range$range) && is.null(self$limits) && is.null(self$range_c$range) }, reset = function(self) { # Can't reset discrete scale because no way to recover values self$range_c$reset() }, map = function(self, x, limits = self$get_limits()) { if (is.discrete(x)) { seq_along(limits)[match(as.character(x), limits)] } else { x } }, dimension = function(self, expand = c(0, 0)) { c_range <- self$range_c$range d_range <- self$get_limits() if (self$is_empty()) { c(0, 1) } else if (is.null(self$range$range)) { # only continuous expand_range(c_range, expand[1], expand[2] , 1) } else if (is.null(c_range)) { # only discrete expand_range(c(1, length(d_range)), expand[1], expand[2], 1) } else { # both range( expand_range(c_range, expand[1], 0 , 1), expand_range(c(1, length(d_range)), 0, expand[2], 1) ) } }, get_breaks = function(self, limits = self$get_limits()) { ggproto_parent(ScaleDiscrete, self)$get_breaks(limits) }, clone = function(self) { new <- ggproto(NULL, self) new$range <- discrete_range() new$range_c <- continuous_range() new } ) ggplot2/R/facet-.r0000644000177400001440000003605013003422420013537 0ustar murdochusers#' @include ggproto.r NULL #' @section Facets: #' #' All \code{facet_*} functions returns a \code{Facet} object or an object of a #' \code{Facet} subclass. This object describes how to assign data to different #' panels, how to apply positional scales and how to lay out the panels, once #' rendered. #' #' Extending facets can range from the simple modifications of current facets, #' to very laborious rewrites with a lot of \code{\link{gtable}} manipulation. #' For some examples of both, please see the extension vignette. #' #' \code{Facet} subclasses, like other extendible ggproto classes, have a range #' of methods that can be modified. Some of these are required for all new #' subclasses, while other only need to be modified if need arises. #' #' The required methods are: #' #' \itemize{ #' \item \code{compute_layout}: Based on layer data compute a mapping between #' panels, axes, and potentially other parameters such as faceting variable #' level etc. This method must return a data.frame containing at least the #' columns \code{PANEL}, \code{SCALE_X}, and \code{SCALE_Y} each containing #' integer keys mapping a PANEL to which axes it should use. In addition the #' data.frame can contain whatever other information is necessary to assign #' observations to the correct panel as well as determining the position of #' the panel. #' #' \item \code{map_data}: This method is supplied the data for each layer in #' turn and is expected to supply a \code{PANEL} column mapping each row to a #' panel defined in the layout. Additionally this method can also add or #' subtract data points as needed e.g. in the case of adding margins to #' \code{facet_grid}. #' #' \item \code{draw_panels}: This is where the panels are assembled into a #' \code{gtable} object. The method recieves, among others, a list of grobs #' defining the content of each panel as generated by the Geoms and Coord #' objects. The responsibility of the method is to decorate the panels with #' axes and strips as needed, as well as position them relative to each other #' in a gtable. For some of the automatic functions to work correctly, each #' panel, axis, and strip grob name must be prefixed with "panel", "axis", and #' "strip" respectively. #' } #' #' In addition to the methods described above, it is also possible to override #' the default behaviour of one or more of the following methods: #' #' \itemize{ #' \item \code{setup_params}: #' \item \code{init_scales}: Given a master scale for x and y, create panel #' specific scales for each panel defined in the layout. The default is to #' simply clone the master scale. #' #' \item \code{train_scales}: Based on layer data train each set of panel #' scales. The default is to train it on the data related to the panel. #' #' \item \code{finish_data}: Make last-minute modifications to layer data #' before it is rendered by the Geoms. The default is to not modify it. #' #' \item \code{draw_back}: Add a grob in between the background defined by the #' Coord object (usually the axis grid) and the layer stack. The default is to #' return an empty grob for each panel. #' #' \item \code{draw_front}: As above except the returned grob is placed #' between the layer stack and the foreground defined by the Coord object #' (usually empty). The default is, as above, to return an empty grob. #' #' \item \code{draw_labels}: Given the gtable returned by \code{draw_panels}, #' add axis titles to the gtable. The default is to add one title at each side #' depending on the position and existance of axes. #' } #' #' All extension methods recieve the content of the params field as the params #' argument, so the constructor function will generally put all relevant #' information into this field. The only exception is the \code{shrink} #' parameter which is used to determine if scales are retrained after Stat #' transformations has been applied. #' #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export Facet <- ggproto("Facet", NULL, shrink = FALSE, params = list(), # Layout interface -------------------------------------------------------- train = function(self, data) { self$compute_layout(data, self$params) }, map = function(self, data, layout) { self$map_data(data, layout, self$params) }, render_back = function(self, data, layout, x_scales, y_scales, theme) { self$draw_back(data, layout, x_scales, y_scales, theme, self$params) }, render_front = function(self, data, layout, x_scales, y_scales, theme) { self$draw_front(data, layout, x_scales, y_scales, theme, self$params) }, render_panels = function(self, panels, layout, x_scales, y_scales, ranges, coord, data, theme, labels) { panels <- self$draw_panels(panels, layout, x_scales, y_scales, ranges, coord, data, theme, self$params) self$draw_labels(panels, layout, x_scales, y_scales, ranges, coord, data, theme, labels, self$params) }, train_positions = function(self, x_scales, y_scales, layout, data) { self$train_scales(x_scales, y_scales, layout, data, self$params) }, # Extension interface ----------------------------------------------------- compute_layout = function(data, params) { stop("Not implemented", call. = FALSE) }, map_data = function(data, layout, params) { stop("Not implemented", call. = FALSE) }, init_scales = function(layout, x_scale = NULL, y_scale = NULL, params) { scales <- list() if (!is.null(x_scale)) { scales$x <- plyr::rlply(max(layout$SCALE_X), x_scale$clone()) } if (!is.null(y_scale)) { scales$y <- plyr::rlply(max(layout$SCALE_Y), y_scale$clone()) } scales }, train_scales = function(x_scales, y_scales, layout, data, params) { # loop over each layer, training x and y scales in turn for (layer_data in data) { match_id <- match(layer_data$PANEL, layout$PANEL) if (!is.null(x_scales)) { x_vars <- intersect(x_scales[[1]]$aesthetics, names(layer_data)) SCALE_X <- layout$SCALE_X[match_id] scale_apply(layer_data, x_vars, "train", SCALE_X, x_scales) } if (!is.null(y_scales)) { y_vars <- intersect(y_scales[[1]]$aesthetics, names(layer_data)) SCALE_Y <- layout$SCALE_Y[match_id] scale_apply(layer_data, y_vars, "train", SCALE_Y, y_scales) } } }, draw_back = function(data, layout, x_scales, y_scales, theme, params) { rep(list(zeroGrob()), length(unique(layout$PANEL))) }, draw_front = function(data, layout, x_scales, y_scales, theme, params) { rep(list(zeroGrob()), length(unique(layout$PANEL))) }, draw_panels = function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) { stop("Not implemented", call. = FALSE) }, draw_labels = function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, labels, params) { panel_dim <- find_panel(panels) xlab_height_top <- grobHeight(labels$x[[1]]) panels <- gtable_add_rows(panels, xlab_height_top, pos = 0) panels <- gtable_add_grob(panels, labels$x[[1]], name = "xlab-t", l = panel_dim$l, r = panel_dim$r, t = 1, clip = "off") xlab_height_bottom <- grobHeight(labels$x[[2]]) panels <- gtable_add_rows(panels, xlab_height_bottom, pos = -1) panels <- gtable_add_grob(panels, labels$x[[2]], name = "xlab-b", l = panel_dim$l, r = panel_dim$r, t = -1, clip = "off") panel_dim <- find_panel(panels) ylab_width_left <- grobWidth(labels$y[[1]]) panels <- gtable_add_cols(panels, ylab_width_left, pos = 0) panels <- gtable_add_grob(panels, labels$y[[1]], name = "ylab-l", l = 1, b = panel_dim$b, t = panel_dim$t, clip = "off") ylab_width_right <- grobWidth(labels$y[[2]]) panels <- gtable_add_cols(panels, ylab_width_right, pos = -1) panels <- gtable_add_grob(panels, labels$y[[2]], name = "ylab-r", l = -1, b = panel_dim$b, t = panel_dim$t, clip = "off") panels }, setup_params = function(data, params) { params }, setup_data = function(data, params) { data }, finish_data = function(data, layout, x_scales, y_scales, params) { data } ) # Helpers ----------------------------------------------------------------- #' Is this object a facetting specification? #' #' @param x object to test #' @keywords internal #' @export is.facet <- function(x) inherits(x, "Facet") # A "special" value, currently not used but could be used to determine # if faceting is active NO_PANEL <- -1L unique_combs <- function(df) { if (length(df) == 0) return() unique_values <- plyr::llply(df, ulevels) rev(expand.grid(rev(unique_values), stringsAsFactors = FALSE, KEEP.OUT.ATTRS = TRUE)) } df.grid <- function(a, b) { if (is.null(a) || nrow(a) == 0) return(b) if (is.null(b) || nrow(b) == 0) return(a) indexes <- expand.grid( i_a = seq_len(nrow(a)), i_b = seq_len(nrow(b)) ) plyr::unrowname(cbind( a[indexes$i_a, , drop = FALSE], b[indexes$i_b, , drop = FALSE] )) } # When evaluating variables in a facet specification, we evaluate bare # variables and expressions slightly differently. Bare variables should # always succeed, even if the variable doesn't exist in the data frame: # that makes it possible to repeat data across multiple factors. But # when evaluating an expression, you want to see any errors. That does # mean you can't have background data when facetting by an expression, # but that seems like a reasonable tradeoff. eval_facet_vars <- function(vars, data, env = emptyenv()) { nms <- names(vars) out <- list() for (i in seq_along(vars)) { out[[ nms[[i]] ]] <- eval_facet_var(vars[[i]], data, env = env) } tibble::as_tibble(out) } eval_facet_var <- function(var, data, env = emptyenv()) { if (is.name(var)) { var <- as.character(var) if (var %in% names(data)) { data[[var]] } else { NULL } } else if (is.call(var)) { eval(var, envir = data, enclos = env) } else { stop("Must use either variable name or expression when facetting", call. = FALSE) } } layout_null <- function() { data.frame(PANEL = 1, ROW = 1, COL = 1, SCALE_X = 1, SCALE_Y = 1) } #' Get the maximal width/length of a list of grobs #' #' @param grobs A list of grobs #' #' @return The largest value. measured in cm as a unit object #' #' @keywords internal #' @export max_height <- function(grobs) { unit(max(unlist(lapply(grobs, height_cm))), "cm") } #' @rdname max_height #' @export max_width <- function(grobs) { unit(max(unlist(lapply(grobs, width_cm))), "cm") } #' Find panels in a gtable #' #' These functions help detect the placement of panels in a gtable, if they are #' named with "panel" in the beginning. \code{find_panel} returns the extend of #' the panel area, while \code{panel_cols} and \code{panel_rows} returns the #' columns and rows that contains panels respectively. #' #' @param table A gtable #' #' @return A data.frame with some or all of the columns t(op), r(ight), #' b(ottom), and l(eft) #' #' @keywords internal #' @export find_panel <- function(table) { layout <- table$layout panels <- layout[grepl("^panel", layout$name), , drop = FALSE] data.frame( t = min(panels$t), r = max(panels$r), b = max(panels$b), l = min(panels$l) ) } #' @rdname find_panel #' @export panel_cols = function(table) { panels <- table$layout[grepl("^panel", table$layout$name), , drop = FALSE] unique(panels[, c('l', 'r')]) } #' @rdname find_panel #' @export panel_rows <- function(table) { panels <- table$layout[grepl("^panel", table$layout$name), , drop = FALSE] unique(panels[, c('t', 'b')]) } #' Take input data and define a mapping between facetting variables and ROW, #' COL and PANEL keys #' #' @param data A list of data.frames, the first being the plot data and the #' subsequent individual layer data #' @param env The environment the vars should be evaluated in #' @param vars A list of quoted symbols matching columns in data #' @param drop should missing combinations/levels be dropped #' #' @return A data.frame with columns for PANEL, ROW, COL, and facetting vars #' #' @keywords internal #' @export combine_vars <- function(data, env = emptyenv(), vars = NULL, drop = TRUE) { if (length(vars) == 0) return(data.frame()) # For each layer, compute the facet values values <- compact(plyr::llply(data, eval_facet_vars, vars = vars, env = env)) # Form the base data frame which contains all combinations of facetting # variables that appear in the data has_all <- unlist(plyr::llply(values, length)) == length(vars) if (!any(has_all)) { stop("At least one layer must contain all variables used for facetting") } base <- unique(plyr::ldply(values[has_all])) if (!drop) { base <- unique_combs(base) } # Systematically add on missing combinations for (value in values[!has_all]) { if (empty(value)) next; old <- base[setdiff(names(base), names(value))] new <- unique(value[intersect(names(base), names(value))]) if (drop) { new <- unique_combs(new) } base <- rbind(base, df.grid(old, new)) } if (empty(base)) { stop("Faceting variables must have at least one value", call. = FALSE) } base } #' Render panel axes #' #' These helpers facilitates generating theme compliant axes when #' building up the plot. #' #' @param x,y A list of ranges as available to the draw_panel method in #' \code{Facet} subclasses. #' @param coord A \code{Coord} object #' @param theme A \code{theme} object #' @param transpose Should the output be transposed? #' #' @return A list with the element "x" and "y" each containing axis #' specifications for the ranges passed in. Each axis specification is a list #' with a "top" and "bottom" element for x-axes and "left" and "right" element #' for y-axis, holding the respective axis grobs. Depending on the content of x #' and y some of the grobs might be zeroGrobs. If \code{transpose=TRUE} the #' content of the x and y elements will be transposed so e.g. all left-axes are #' collected in a left element as a list of grobs. #' #' @keywords internal #' @export #' render_axes <- function(x = NULL, y = NULL, coord, theme, transpose = FALSE) { axes <- list() if (!is.null(x)) { axes$x <- lapply(x, coord$render_axis_h, theme) } if (!is.null(y)) { axes$y <- lapply(y, coord$render_axis_v, theme) } if (transpose) { axes <- list( x = list( top = lapply(axes$x, `[[`, "top"), bottom = lapply(axes$x, `[[`, "bottom") ), y = list( left = lapply(axes$y, `[[`, "left"), right = lapply(axes$y, `[[`, "right") ) ) } axes } #' Render panel strips #' #' All positions are rendered and it is up to the facet to decide which to use #' #' @param x,y A data.frame with a column for each variable and a row for each #' combination to draw #' @param labeller A labeller function #' @param theme a \code{theme} object #' #' @return A list with an "x" and a "y" element, each containing a "top" and #' "bottom" or "left" and "right" element respectively. These contains a list of #' rendered strips as gtables. #' #' @keywords internal #' @export render_strips <- function(x = NULL, y = NULL, labeller, theme) { list( x = build_strip(x, labeller, theme, TRUE), y = build_strip(y, labeller, theme, FALSE) ) } ggplot2/R/stat-bindot.r0000644000177400001440000001362312654723630014653 0ustar murdochusers#' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatBindot <- ggproto("StatBindot", Stat, required_aes = "x", non_missing_aes = "weight", default_aes = aes(y = ..count..), setup_params = function(data, params) { if (is.null(params$binwidth)) { message("`stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.") } params }, compute_layer = function(self, data, params, panels) { data <- remove_missing(data, params$na.rm, params$binaxis, snake_class(self), finite = TRUE ) ggproto_parent(Stat, self)$compute_layer(data, params, panels) }, compute_panel = function(self, data, scales, na.rm = FALSE, binwidth = NULL, binaxis = "x", method = "dotdensity", binpositions = "bygroup", origin = NULL, width = 0.9, drop = FALSE, right = TRUE) { # If using dotdensity and binning over all, we need to find the bin centers # for all data before it's split into groups. if (method == "dotdensity" && binpositions == "all") { if (binaxis == "x") { newdata <- densitybin(x = data$x, weight = data$weight, binwidth = binwidth, method = method) data <- plyr::arrange(data, x) newdata <- plyr::arrange(newdata, x) } else if (binaxis == "y") { newdata <- densitybin(x = data$y, weight = data$weight, binwidth = binwidth, method = method) data <- plyr::arrange(data, y) newdata <- plyr::arrange(newdata, x) } data$bin <- newdata$bin data$binwidth <- newdata$binwidth data$weight <- newdata$weight data$bincenter <- newdata$bincenter } ggproto_parent(Stat, self)$compute_panel(data, scales, binwidth = binwidth, binaxis = binaxis, method = method, binpositions = binpositions, origin = origin, width = width, drop = drop, right = right) }, compute_group = function(self, data, scales, binwidth = NULL, binaxis = "x", method = "dotdensity", binpositions = "bygroup", origin = NULL, width = 0.9, drop = FALSE, right = TRUE) { # This function taken from integer help page is.wholenumber <- function(x, tol = .Machine$double.eps ^ 0.5) { abs(x - round(x)) < tol } # Check that weights are whole numbers (for dots, weights must be whole) if (!is.null(data$weight) && any(!is.wholenumber(data$weight)) && any(data$weight < 0)) { stop("Weights for stat_bindot must be nonnegative integers.") } if (binaxis == "x") { range <- scales$x$dimension() values <- data$x } else if (binaxis == "y") { range <- scales$y$dimension() values <- data$y # The middle of each group, on the stack axis midline <- mean(range(data$x)) } if (method == "histodot") { closed <- if (right) "right" else "left" if (!is.null(binwidth)) { bins <- bin_breaks_width(range, binwidth, boundary = origin, closed = closed) } else { bins <- bin_breaks_bins(range, 30, boundary = origin, closed = closed) } data <- bin_vector(values, bins, weight = data$weight, pad = FALSE) # Change "width" column to "binwidth" for consistency names(data)[names(data) == "width"] <- "binwidth" names(data)[names(data) == "x"] <- "bincenter" } else if (method == "dotdensity") { # If bin centers are found by group instead of by all, find the bin centers # (If binpositions=="all", then we'll already have bin centers.) if (binpositions == "bygroup") data <- densitybin(x = values, weight = data$weight, binwidth = binwidth, method = method, range = range) # Collapse each bin and get a count data <- plyr::ddply(data, "bincenter", plyr::summarise, binwidth = binwidth[1], count = sum(weight)) if (sum(data$count, na.rm = TRUE) != 0) { data$count[is.na(data$count)] <- 0 data$ncount <- data$count / max(abs(data$count), na.rm = TRUE) if (drop) data <- subset(data, count > 0) } } if (binaxis == "x") { names(data)[names(data) == "bincenter"] <- "x" # For x binning, the width of the geoms is same as the width of the bin data$width <- data$binwidth } else if (binaxis == "y") { names(data)[names(data) == "bincenter"] <- "y" # For y binning, set the x midline. This is needed for continuous x axis data$x <- midline } return(data) } ) # This does density binning, but does not collapse each bin with a count. # It returns a data frame with the original data (x), weights, bin #, and the bin centers. densitybin <- function(x, weight = NULL, binwidth = NULL, method = method, range = NULL) { if (length(stats::na.omit(x)) == 0) return(data.frame()) if (is.null(weight)) weight <- rep(1, length(x)) weight[is.na(weight)] <- 0 if (is.null(range)) range <- range(x, na.rm = TRUE, finite = TRUE) if (is.null(binwidth)) binwidth <- diff(range) / 30 # Sort weight and x, by x weight <- weight[order(x)] x <- x[order(x)] cbin <- 0 # Current bin ID bin <- rep.int(NA, length(x)) # The bin ID for each observation binend <- -Inf # End position of current bin (scan left to right) # Scan list and put dots in bins for (i in 1:length(x)) { # If past end of bin, start a new bin at this point if (x[i] >= binend) { binend <- x[i] + binwidth cbin <- cbin + 1 } bin[i] <- cbin } results <- data.frame(x, bin, binwidth, weight) results <- plyr::ddply(results, "bin", function(df) { df$bincenter = (min(df$x) + max(df$x)) / 2 return(df) }) return(results) } ggplot2/R/aes-calculated.r0000644000177400001440000000250212555701147015263 0ustar murdochusers# Regex to determine if an identifier refers to a calculated aesthetic match_calculated_aes <- "^\\.\\.([a-zA-Z._]+)\\.\\.$" # Determine if aesthetic is calculated is_calculated_aes <- function(aesthetics) { vars <- lapply(aesthetics, find_vars) vapply(vars, function(x) any(grepl(match_calculated_aes, x)), logical(1)) } find_vars <- function(expr) { if (is.name(expr)) { as.character(expr) } else if (is.atomic(expr)) { character() } else if (is.call(expr)) { unlist(lapply(expr[-1], find_vars)) } else if (is.pairlist(expr)) { # In the unlikely event of an anonymous function unlist(lapply(expr, find_vars)) } else { stop("Unknown input:", class(expr)[1]) } } # Strip dots from expressions strip_dots <- function(expr) { if (is.atomic(expr)) { expr } else if (is.name(expr)) { expr_ch <- as.character(expr) if (nchar(expr_ch) > 0) { as.name(gsub(match_calculated_aes, "\\1", expr_ch)) } else { expr } } else if (is.call(expr)) { expr[-1] <- lapply(expr[-1], strip_dots) expr } else if (is.pairlist(expr)) { # In the unlikely event of an anonymous function as.pairlist(lapply(expr, strip_dots)) } else if (is.list(expr)) { # For list of aesthetics lapply(expr, strip_dots) } else { stop("Unknown input:", class(expr)[1]) } } ggplot2/R/coord-munch.r0000644000177400001440000001623712567630451014646 0ustar murdochusers#' Munch coordinates data #' #' This function "munches" lines, dividing each line into many small pieces #' so they can be transformed independently. Used inside geom functions. #' #' @param coord Coordinate system definition. #' @param data Data set to transform - should have variables \code{x} and #' \code{y} are chopped up into small pieces (as defined by \code{group}). #' All other variables are duplicated as needed. #' @param range Panel range specification. #' @param segment_length Target segment length #' @keywords internal #' @export coord_munch <- function(coord, data, range, segment_length = 0.01) { if (coord$is_linear()) return(coord$transform(data, range)) # range has theta and r values; get corresponding x and y values ranges <- coord$range(range) # Convert any infinite locations into max/min # Only need to work with x and y because for munching, those are the # only position aesthetics that are transformed data$x[data$x == -Inf] <- ranges$x[1] data$x[data$x == Inf] <- ranges$x[2] data$y[data$y == -Inf] <- ranges$y[1] data$y[data$y == Inf] <- ranges$y[2] # Calculate distances using coord distance metric dist <- coord$distance(data$x, data$y, range) dist[data$group[-1] != data$group[-nrow(data)]] <- NA # Munch and then transform result munched <- munch_data(data, dist, segment_length) coord$transform(munched, range) } # For munching, only grobs are lines and polygons: everything else is # transformed into those special cases by the geom. # # @param dist distance, scaled from 0 to 1 (maximum distance on plot) # @keyword internal munch_data <- function(data, dist = NULL, segment_length = 0.01) { n <- nrow(data) if (is.null(dist)) { data <- add_group(data) dist <- dist_euclidean(data$x, data$y) } # How many endpoints for each old segment, not counting the last one extra <- pmax(floor(dist / segment_length), 1) extra[is.na(extra)] <- 1 # Generate extra pieces for x and y values # The final point must be manually inserted at the end x <- c(unlist(mapply(interp, data$x[-n], data$x[-1], extra, SIMPLIFY = FALSE)), data$x[n]) y <- c(unlist(mapply(interp, data$y[-n], data$y[-1], extra, SIMPLIFY = FALSE)), data$y[n]) # Replicate other aesthetics: defined by start point but also # must include final point id <- c(rep(seq_len(nrow(data) - 1), extra), nrow(data)) aes_df <- data[id, setdiff(names(data), c("x", "y")), drop = FALSE] plyr::unrowname(data.frame(x = x, y = y, aes_df)) } # Interpolate. # Interpolate n-1 evenly spaced steps (n points) from start to # (end - (end - start) / n). end is never included in sequence. interp <- function(start, end, n) { if (n == 1) return(start) start + seq(0, 1, length.out = n + 1)[-(n + 1)] * (end - start) } # Euclidean distance between points. # NA indicates a break / terminal points dist_euclidean <- function(x, y) { n <- length(x) sqrt((x[-n] - x[-1]) ^ 2 + (y[-n] - y[-1]) ^ 2) } # Compute central angle between two points. # Multiple by radius of sphere to get great circle distance # @arguments longitude # @arguments latitude dist_central_angle <- function(lon, lat) { # Convert to radians lat <- lat * pi / 180 lon <- lon * pi / 180 hav <- function(x) sin(x / 2) ^ 2 ahav <- function(x) 2 * asin(x) n <- length(lat) ahav(sqrt(hav(diff(lat)) + cos(lat[-n]) * cos(lat[-1]) * hav(diff(lon)))) } # Polar dist. # Polar distance between points. This does not give the straight-line # distance between points in polar space. Instead, it gives the distance # along lines that _were_ straight in cartesian space, but have been # warped into polar space. These lines are all spiral arcs, circular # arcs, or segments of rays. dist_polar <- function(r, theta) { # Pretending that theta is x and r is y, find the slope and intercepts # for each line segment. # This is just like finding the x-intercept of a line in cartesian coordinates. lf <- find_line_formula(theta, r) # Rename x and y columns to r and t, since we're working in polar # Note that 'slope' actually means the spiral slope, 'a' in the spiral # formula r = a * theta lf <- plyr::rename(lf, c(x1 = "t1", x2 = "t2", y1 = "r1", y2 = "r2", yintercept = "r_int", xintercept = "t_int"), warn_missing = FALSE) # Re-normalize the theta values so that intercept for each is 0 # This is necessary for calculating spiral arc length. # If the formula is r=a*theta, there's a big difference between # calculating the arc length from theta = 0 to pi/2, vs. # theta = 2*pi to pi/2 lf$tn1 <- lf$t1 - lf$t_int lf$tn2 <- lf$t2 - lf$t_int # Add empty distance column lf$dist <- NA_real_ # There are three types of lines, which we handle in turn: # - Spiral arcs (r and theta change) # - Circular arcs (r is constant) # - Rays (theta is constant) # Get spiral arc length for segments that have non-zero, non-infinite slope # (spiral_arc_length only works for actual spirals, not circle arcs or rays) # Use the _normalized_ theta values for arc length calculation # Also make sure to ignore NA's because they cause problems when used on left # side assignment. idx <- !is.na(lf$slope) & lf$slope != 0 & !is.infinite(lf$slope) idx[is.na(idx)] <- FALSE lf$dist[idx] <- spiral_arc_length(lf$slope[idx], lf$tn1[idx], lf$tn2[idx]) # Get circular arc length for segments that have zero slope (r1 == r2) idx <- !is.na(lf$slope) & lf$slope == 0 lf$dist[idx] <- lf$r1[idx] * (lf$t2[idx] - lf$t1[idx]) # Get radial length for segments that have infinite slope (t1 == t2) idx <- !is.na(lf$slope) & is.infinite(lf$slope) lf$dist[idx] <- lf$r1[idx] - lf$r2[idx] # Find the maximum possible length, a spiral line from # (r=0, theta=0) to (r=1, theta=2*pi) max_dist <- spiral_arc_length(1 / (2 * pi), 0, 2 * pi) # Final distance values, normalized abs(lf$dist / max_dist) } # Given n points, find the slope, xintercept, and yintercept of # the lines connecting them. # # This returns a data frame with length(x)-1 rows # # @param x A vector of x values # @param y A vector of y values # @examples # find_line_formula(c(4, 7), c(1, 5)) # find_line_formula(c(4, 7, 9), c(1, 5, 3)) find_line_formula <- function(x, y) { slope <- diff(y) / diff(x) yintercept <- y[-1] - (slope * x[-1]) xintercept <- x[-1] - (y[-1] / slope) data.frame(x1 = x[-length(x)], y1 = y[-length(y)], x2 = x[-1], y2 = y[-1], slope = slope, yintercept = yintercept, xintercept = xintercept) } # Spiral arc length # # Each segment consists of a spiral line of slope 'a' between angles # 'theta1' and 'theta2'. Because each segment has its own _normalized_ # slope, the ending theta2 value may not be the same as the starting # theta1 value of the next point. # # @param a A vector of spiral "slopes". Each spiral is defined as r = a * theta. # @param theta1 A vector of starting theta values. # @param theta2 A vector of ending theta values. # @examples # spiral_arc_length(a = c(0.2, 0.5), c(0.5 * pi, pi), c(pi, 1.25 * pi)) spiral_arc_length <- function(a, theta1, theta2) { # Archimedes' spiral arc length formula from # http://mathworld.wolfram.com/ArchimedesSpiral.html 0.5 * a * ( (theta1 * sqrt(1 + theta1 * theta1) + asinh(theta1)) - (theta2 * sqrt(1 + theta2 * theta2) + asinh(theta2))) } ggplot2/R/data.R0000644000177400001440000001535513006366714013276 0ustar murdochusers#' Prices of 50,000 round cut diamonds #' #' A dataset containing the prices and other attributes of almost 54,000 #' diamonds. The variables are as follows: #' #' @format A data frame with 53940 rows and 10 variables: #' \describe{ #' \item{price}{price in US dollars (\$326--\$18,823)} #' \item{carat}{weight of the diamond (0.2--5.01)} #' \item{cut}{quality of the cut (Fair, Good, Very Good, Premium, Ideal)} #' \item{color}{diamond colour, from J (worst) to D (best)} #' \item{clarity}{a measurement of how clear the diamond is (I1 (worst), SI1, #' SI2, VS1, VS2, VVS1, VVS2, IF (best))} #' \item{x}{length in mm (0--10.74)} #' \item{y}{width in mm (0--58.9)} #' \item{z}{depth in mm (0--31.8)} #' \item{depth}{total depth percentage = z / mean(x, y) = 2 * z / (x + y) (43--79)} #' \item{table}{width of top of diamond relative to widest point (43--95)} #' } "diamonds" #' US economic time series #' #' This dataset was produced from US economic time series data available from #' \url{http://research.stlouisfed.org/fred2}. \code{economics} is in "wide" #' format, \code{economics_long} is in "long" format. #' #' @format A data frame with 478 rows and 6 variables #' \describe{ #' \item{date}{Month of data collection} #' \item{psavert}{personal savings rate, #' \url{http://research.stlouisfed.org/fred2/series/PSAVERT/}} #' \item{pce}{personal consumption expenditures, in billions of dollars, #' \url{http://research.stlouisfed.org/fred2/series/PCE}} #' \item{unemploy}{number of unemployed in thousands, #' \url{http://research.stlouisfed.org/fred2/series/UNEMPLOY}} #' \item{uempmed}{median duration of unemployment, in weeks, #' \url{http://research.stlouisfed.org/fred2/series/UEMPMED}} #' \item{pop}{total population, in thousands, #' \url{http://research.stlouisfed.org/fred2/series/POP}} #' } #' "economics" #' @rdname economics "economics_long" #' Midwest demographics #' #' Demographic information of midwest counties #' #' @format A data frame with 437 rows and 28 variables #' \describe{ #' \item{PID}{} #' \item{county}{} #' \item{state}{} #' \item{area}{} #' \item{poptotal}{Total population} #' \item{popdensity}{Population density} #' \item{popwhite}{Number of whites.} #' \item{popblack}{Number of blacks.} #' \item{popamerindian}{Number of American Indians.} #' \item{popasian}{Number of Asians.} #' \item{popother}{Number of other races.} #' \item{percwhite}{Percent white.} #' \item{percblack}{Percent black.} #' \item{percamerindan}{Percent American Indian.} #' \item{percasian}{Percent Asian.} #' \item{percother}{Percent other races.} #' \item{popadults}{Number of adults.} #' \item{perchsd}{} #' \item{percollege}{Percent college educated.} #' \item{percprof}{Percent profession.} #' \item{poppovertyknown}{} #' \item{percpovertyknown}{} #' \item{percbelowpoverty}{} #' \item{percchildbelowpovert}{} #' \item{percadultpoverty}{} #' \item{percelderlypoverty}{} #' \item{inmetro}{In a metro area.} #' \item{category}{} #' } #' "midwest" #' Fuel economy data from 1999 and 2008 for 38 popular models of car #' #' This dataset contains a subset of the fuel economy data that the EPA makes #' available on \url{http://fueleconomy.gov}. It contains only models which #' had a new release every year between 1999 and 2008 - this was used as a #' proxy for the popularity of the car. #' #' @format A data frame with 234 rows and 11 variables #' \describe{ #' \item{manufacturer}{} #' \item{model}{model name} #' \item{displ}{engine displacement, in litres} #' \item{year}{year of manufacture} #' \item{cyl}{number of cylinders} #' \item{trans}{type of transmission} #' \item{drv}{f = front-wheel drive, r = rear wheel drive, 4 = 4wd} #' \item{cty}{city miles per gallon} #' \item{hwy}{highway miles per gallon} #' \item{fl}{fuel type} #' \item{class}{"type" of car} #' } "mpg" #' An updated and expanded version of the mammals sleep dataset #' #' This is an updated and expanded version of the mammals sleep dataset. #' Updated sleep times and weights were taken from V. M. Savage and G. B. #' West. A quantitative, theoretical framework for understanding mammalian #' sleep. Proceedings of the National Academy of Sciences, 104 (3):1051-1056, #' 2007. #' #' Additional variables order, conservation status and vore were added from #' wikipedia. #' #' @format A data frame with 83 rows and 11 variables #' \describe{ #' \item{name}{common name} #' \item{genus}{} #' \item{vore}{carnivore, omnivore or herbivore?} #' \item{order}{} #' \item{conservation}{the conservation status of the animal} #' \item{sleep_total}{total amount of sleep, in hours} #' \item{sleep_rem}{rem sleep, in hours} #' \item{sleep_cycle}{length of sleep cycle, in hours} #' \item{awake}{amount of time spent awake, in hours} #' \item{brainwt}{brain weight in kilograms} #' \item{bodywt}{body weight in kilograms} #' } "msleep" #' Terms of 11 presidents from Eisenhower to Obama #' #' The names of each president, the start and end date of their term, and #' their party of 11 US presidents from Eisenhower to Obama. #' #' @format A data frame with 11 rows and 4 variables "presidential" #' Vector field of seal movements #' #' This vector field was produced from the data described in Brillinger, D.R., #' Preisler, H.K., Ager, A.A. and Kie, J.G. "An exploratory data analysis #' (EDA) of the paths of moving animals". J. Statistical Planning and #' Inference 122 (2004), 43-63, using the methods of Brillinger, D.R., #' "Learning a potential function from a trajectory", Signal Processing #' Letters. December (2007). #' #' @format A data frame with 1155 rows and 4 variables #' @references \url{http://www.stat.berkeley.edu/~brill/Papers/jspifinal.pdf} "seals" #' 2d density estimate of Old Faithful data #' #' A 2d density estimate of the waiting and eruptions variables data #' \link{faithful}. #' #' @format A data frame with 5,625 observations and 3 variables. "faithfuld" #' \code{colors()} in Luv space #' #' All built-in \code{\link{colors}()} translated into Luv colour space. #' #' @format A data frame with 657 observations and 4 variables: #' \describe{ #' \item{L,u,v}{Position in Luv colour space} #' \item{col}{Colour name} #' } "luv_colours" #' Housing sales in TX #' #' Information about the housing market in Texas provided by the TAMU #' real estate center, \url{http://recenter.tamu.edu/}. #' #' @format A data frame with 8602 observations and 9 variables: #' \describe{ #' \item{city}{Name of MLS area} #' \item{year,month,date}{Date} #' \item{sales}{Number of sales} #' \item{volume}{Total value of sales} #' \item{median}{Median sale price} #' \item{listings}{Total active listings} #' \item{inventory}{"Months inventory": amount of time it would take to sell #' all current listings at current pace of sales.} #' } "txhousing" ggplot2/R/geom-density.r0000644000177400001440000000466713005734110015021 0ustar murdochusers#' Smoothed density estimates #' #' Computes and draws kernel density estimate, which is a smoothed version of #' the histogram. This is a useful alternative to the histogram if for continuous #' data that comes from an underlying smooth distribution. #' #' @section Aesthetics: #' \aesthetics{geom}{density} #' #' @seealso See \code{\link{geom_histogram}}, \code{\link{geom_freqpoly}} for #' other methods of displaying continuous distribution. #' See \code{\link{geom_violin}} for a compact density display. #' @inheritParams layer #' @inheritParams geom_point #' @param geom,stat Use to override the default connection between #' \code{geom_density} and \code{stat_density}. #' @export #' @examples #' ggplot(diamonds, aes(carat)) + #' geom_density() #' #' ggplot(diamonds, aes(carat)) + #' geom_density(adjust = 1/5) #' ggplot(diamonds, aes(carat)) + #' geom_density(adjust = 5) #' #' ggplot(diamonds, aes(depth, colour = cut)) + #' geom_density() + #' xlim(55, 70) #' ggplot(diamonds, aes(depth, fill = cut, colour = cut)) + #' geom_density(alpha = 0.1) + #' xlim(55, 70) #' #' \donttest{ #' # Stacked density plots: if you want to create a stacked density plot, you #' # probably want to 'count' (density * n) variable instead of the default #' # density #' #' # Loses marginal densities #' ggplot(diamonds, aes(carat, fill = cut)) + #' geom_density(position = "stack") #' # Preserves marginal densities #' ggplot(diamonds, aes(carat, ..count.., fill = cut)) + #' geom_density(position = "stack") #' #' # You can use position="fill" to produce a conditional density estimate #' ggplot(diamonds, aes(carat, ..count.., fill = cut)) + #' geom_density(position = "fill") #' } geom_density <- function(mapping = NULL, data = NULL, stat = "density", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomDensity, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-ribbon.r GeomDensity <- ggproto("GeomDensity", GeomArea, default_aes = defaults( aes(fill = NA, weight = 1, colour = "black", alpha = NA), GeomArea$default_aes ) ) ggplot2/R/geom-errorbar.r0000644000177400001440000000324312651701210015146 0ustar murdochusers#' @export #' @rdname geom_linerange geom_errorbar <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomErrorbar, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomErrorbar <- ggproto("GeomErrorbar", Geom, default_aes = aes(colour = "black", size = 0.5, linetype = 1, width = 0.5, alpha = NA), draw_key = draw_key_path, required_aes = c("x", "ymin", "ymax"), setup_data = function(data, params) { data$width <- data$width %||% params$width %||% (resolution(data$x, FALSE) * 0.9) transform(data, xmin = x - width / 2, xmax = x + width / 2, width = NULL ) }, draw_panel = function(data, panel_scales, coord, width = NULL) { GeomPath$draw_panel(data.frame( x = as.vector(rbind(data$xmin, data$xmax, NA, data$x, data$x, NA, data$xmin, data$xmax)), y = as.vector(rbind(data$ymax, data$ymax, NA, data$ymax, data$ymin, NA, data$ymin, data$ymin)), colour = rep(data$colour, each = 8), alpha = rep(data$alpha, each = 8), size = rep(data$size, each = 8), linetype = rep(data$linetype, each = 8), group = rep(1:(nrow(data)), each = 8), stringsAsFactors = FALSE, row.names = 1:(nrow(data) * 8) ), panel_scales, coord) } ) ggplot2/R/guide-colorbar.r0000644000177400001440000003704613005743022015312 0ustar murdochusers#' Continuous colour bar guide #' #' Colour bar guide shows continuous color scales mapped onto values. #' Colour bar is available with \code{scale_fill} and \code{scale_colour}. #' For more information, see the inspiration for this function: #' \href{http://www.mathworks.com/help/techdoc/ref/colorbar.html}{Matlab's colorbar function}. #' #' Guides can be specified in each \code{scale_*} or in \code{\link{guides}}. #' \code{guide="legend"} in \code{scale_*} is syntactic sugar for #' \code{guide=guide_legend()} (e.g. \code{scale_color_manual(guide = "legend")}). #' As for how to specify the guide for each scale in more detail, #' see \code{\link{guides}}. #' #' @inheritParams guide_legend #' @param barwidth A numeric or a \code{\link[grid]{unit}} object specifying #' the width of the colorbar. Default value is \code{legend.key.width} or #' \code{legend.key.size} in \code{\link{theme}} or theme. #' @param barheight A numeric or a \code{\link[grid]{unit}} object specifying #' the height of the colorbar. Default value is \code{legend.key.height} or #' \code{legend.key.size} in \code{\link{theme}} or theme. #' @param nbin A numeric specifying the number of bins for drawing colorbar. A #' smoother colorbar for a larger value. #' @param raster A logical. If \code{TRUE} then the colorbar is rendered as a #' raster object. If \code{FALSE} then the colorbar is rendered as a set of #' rectangles. Note that not all graphics devices are capable of rendering #' raster image. #' @param ticks A logical specifying if tick marks on colorbar should be #' visible. #' @param draw.ulim A logical specifying if the upper limit tick marks should #' be visible. #' @param draw.llim A logical specifying if the lower limit tick marks should #' be visible. #' @param direction A character string indicating the direction of the guide. #' One of "horizontal" or "vertical." #' @param default.unit A character string indicating \code{\link[grid]{unit}} #' for \code{barwidth} and \code{barheight}. #' @param reverse logical. If \code{TRUE} the colorbar is reversed. By default, #' the highest value is on the top and the lowest value is on the bottom #' @param ... ignored. #' @return A guide object #' @export #' @family guides #' @examples #' df <- reshape2::melt(outer(1:4, 1:4), varnames = c("X1", "X2")) #' #' p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value)) #' p2 <- p1 + geom_point(aes(size = value)) #' #' # Basic form #' p1 + scale_fill_continuous(guide = "colorbar") #' p1 + scale_fill_continuous(guide = guide_colorbar()) #' p1 + guides(fill = guide_colorbar()) #' #' # Control styles #' #' # bar size #' p1 + guides(fill = guide_colorbar(barwidth = 0.5, barheight = 10)) #' #' # no label #' p1 + guides(fill = guide_colorbar(label = FALSE)) #' #' # no tick marks #' p1 + guides(fill = guide_colorbar(ticks = FALSE)) #' #' # label position #' p1 + guides(fill = guide_colorbar(label.position = "left")) #' #' # label theme #' p1 + guides(fill = guide_colorbar(label.theme = element_text(colour = "blue", angle = 0))) #' #' # small number of bins #' p1 + guides(fill = guide_colorbar(nbin = 3)) #' #' # large number of bins #' p1 + guides(fill = guide_colorbar(nbin = 100)) #' #' # make top- and bottom-most ticks invisible #' p1 + scale_fill_continuous(limits = c(0,20), breaks = c(0, 5, 10, 15, 20), #' guide = guide_colorbar(nbin=100, draw.ulim = FALSE, draw.llim = FALSE)) #' #' # guides can be controlled independently #' p2 + #' scale_fill_continuous(guide = "colorbar") + #' scale_size(guide = "legend") #' p2 + guides(fill = "colorbar", size = "legend") #' #' p2 + #' scale_fill_continuous(guide = guide_colorbar(direction = "horizontal")) + #' scale_size(guide = guide_legend(direction = "vertical")) guide_colourbar <- function( # title title = waiver(), title.position = NULL, title.theme = NULL, title.hjust = NULL, title.vjust = NULL, # label label = TRUE, label.position = NULL, label.theme = NULL, label.hjust = NULL, label.vjust = NULL, # bar barwidth = NULL, barheight = NULL, nbin = 20, raster = TRUE, # ticks ticks = TRUE, draw.ulim= TRUE, draw.llim = TRUE, # general direction = NULL, default.unit = "line", reverse = FALSE, order = 0, ...) { if (!is.null(barwidth) && !is.unit(barwidth)) barwidth <- unit(barwidth, default.unit) if (!is.null(barheight) && !is.unit(barheight)) barheight <- unit(barheight, default.unit) structure(list( # title title = title, title.position = title.position, title.theme = title.theme, title.hjust = title.hjust, title.vjust = title.vjust, # label label = label, label.position = label.position, label.theme = label.theme, label.hjust = label.hjust, label.vjust = label.vjust, # bar barwidth = barwidth, barheight = barheight, nbin = nbin, raster = raster, # ticks ticks = ticks, draw.ulim = draw.ulim, draw.llim = draw.llim, # general direction = direction, default.unit = default.unit, reverse = reverse, order = order, # parameter available_aes = c("colour", "color", "fill"), ..., name = "colorbar"), class = c("guide", "colorbar") ) } #' @export guide_train.colorbar <- function(guide, scale) { # do nothing if scale are inappropriate if (length(intersect(scale$aesthetics, c("color", "colour", "fill"))) == 0) { warning("colorbar guide needs colour or fill scales.") return(NULL) } if (scale$is_discrete()) { warning("colorbar guide needs continuous scales.") return(NULL) } # create data frame for tick display breaks <- scale$get_breaks() if (length(breaks) == 0 || all(is.na(breaks))) return() ticks <- as.data.frame(setNames(list(scale$map(breaks)), scale$aesthetics[1])) ticks$.value <- breaks ticks$.label <- scale$get_labels(breaks) guide$key <- ticks # bar specification (number of divs etc) .limits <- scale$get_limits() .bar <- discard(pretty(.limits, n = guide$nbin), scale$get_limits()) if (length(.bar) == 0) { .bar = unique(.limits) } guide$bar <- data.frame(colour = scale$map(.bar), value = .bar, stringsAsFactors = FALSE) if (guide$reverse) { guide$key <- guide$key[nrow(guide$key):1, ] guide$bar <- guide$bar[nrow(guide$bar):1, ] } guide$hash <- with(guide, digest::digest(list(title, key$.label, bar, name))) guide } # simply discards the new guide #' @export guide_merge.colorbar <- function(guide, new_guide) { guide } # this guide is not geom-based. #' @export guide_geom.colorbar <- function(guide, layers, default_mapping) { # Layers that use this guide guide_layers <- plyr::llply(layers, function(layer) { matched <- matched_aes(layer, guide, default_mapping) if (length(matched) && ((is.na(layer$show.legend) || layer$show.legend))) { layer } else { # This layer does not use this guide NULL } }) # Remove this guide if no layer uses it if (length(compact(guide_layers)) == 0) guide <- NULL guide } #' @export guide_gengrob.colorbar <- function(guide, theme) { # settings of location and size switch(guide$direction, "horizontal" = { label.position <- guide$label.position %||% "bottom" if (!label.position %in% c("top", "bottom")) stop("label position \"", label.position, "\" is invalid") barwidth <- convertWidth(guide$barwidth %||% (theme$legend.key.width * 5), "mm") barheight <- convertHeight(guide$barheight %||% theme$legend.key.height, "mm") }, "vertical" = { label.position <- guide$label.position %||% "right" if (!label.position %in% c("left", "right")) stop("label position \"", label.position, "\" is invalid") barwidth <- convertWidth(guide$barwidth %||% theme$legend.key.width, "mm") barheight <- convertHeight(guide$barheight %||% (theme$legend.key.height * 5), "mm") }) barwidth.c <- c(barwidth) barheight.c <- c(barheight) barlength.c <- switch(guide$direction, "horizontal" = barwidth.c, "vertical" = barheight.c) nbreak <- nrow(guide$key) # gap between keys etc hgap <- c(convertWidth(unit(0.3, "lines"), "mm")) vgap <- hgap grob.bar <- if (guide$raster) { image <- switch(guide$direction, horizontal = t(guide$bar$colour), vertical = rev(guide$bar$colour)) rasterGrob(image = image, width = barwidth.c, height = barheight.c, default.units = "mm", gp = gpar(col = NA), interpolate = TRUE) } else { switch(guide$direction, horizontal = { bw <- barwidth.c / nrow(guide$bar) bx <- (seq(nrow(guide$bar)) - 1) * bw rectGrob(x = bx, y = 0, vjust = 0, hjust = 0, width = bw, height = barheight.c, default.units = "mm", gp = gpar(col = NA, fill = guide$bar$colour)) }, vertical = { bh <- barheight.c / nrow(guide$bar) by <- (seq(nrow(guide$bar)) - 1) * bh rectGrob(x = 0, y = by, vjust = 0, hjust = 0, width = barwidth.c, height = bh, default.units = "mm", gp = gpar(col = NA, fill = guide$bar$colour)) }) } # tick and label position tic_pos.c <- rescale(guide$key$.value, c(0.5, guide$nbin - 0.5), guide$bar$value[c(1, nrow(guide$bar))]) * barlength.c / guide$nbin label_pos <- unit(tic_pos.c, "mm") if (!guide$draw.ulim) tic_pos.c <- tic_pos.c[-1] if (!guide$draw.llim) tic_pos.c <- tic_pos.c[-length(tic_pos.c)] # title grob.title <- ggname("guide.title", element_grob( guide$title.theme %||% calc_element("legend.title", theme), label = guide$title, hjust = guide$title.hjust %||% theme$legend.title.align %||% 0, vjust = guide$title.vjust %||% 0.5 ) ) title_width <- convertWidth(grobWidth(grob.title), "mm") title_width.c <- c(title_width) title_height <- convertHeight(grobHeight(grob.title), "mm") title_height.c <- c(title_height) # label label.theme <- guide$label.theme %||% calc_element("legend.text", theme) grob.label <- { if (!guide$label) zeroGrob() else { hjust <- x <- guide$label.hjust %||% theme$legend.text.align %||% if (any(is.expression(guide$key$.label))) 1 else switch(guide$direction, horizontal = 0.5, vertical = 0) vjust <- y <- guide$label.vjust %||% 0.5 switch(guide$direction, horizontal = {x <- label_pos; y <- vjust}, "vertical" = {x <- hjust; y <- label_pos}) label <- guide$key$.label # If any of the labels are quoted language objects, convert them # to expressions. Labels from formatter functions can return these if (any(vapply(label, is.call, logical(1)))) { label <- lapply(label, function(l) { if (is.call(l)) substitute(expression(x), list(x = l)) else l }) label <- do.call(c, label) } g <- element_grob(element = label.theme, label = label, x = x, y = y, hjust = hjust, vjust = vjust) ggname("guide.label", g) } } label_width <- convertWidth(grobWidth(grob.label), "mm") label_width.c <- c(label_width) label_height <- convertHeight(grobHeight(grob.label), "mm") label_height.c <- c(label_height) # ticks grob.ticks <- if (!guide$ticks) zeroGrob() else { switch(guide$direction, "horizontal" = { x0 = rep(tic_pos.c, 2) y0 = c(rep(0, nbreak), rep(barheight.c * (4/5), nbreak)) x1 = rep(tic_pos.c, 2) y1 = c(rep(barheight.c * (1/5), nbreak), rep(barheight.c, nbreak)) }, "vertical" = { x0 = c(rep(0, nbreak), rep(barwidth.c * (4/5), nbreak)) y0 = rep(tic_pos.c, 2) x1 = c(rep(barwidth.c * (1/5), nbreak), rep(barwidth.c, nbreak)) y1 = rep(tic_pos.c, 2) }) segmentsGrob(x0 = x0, y0 = y0, x1 = x1, y1 = y1, default.units = "mm", gp = gpar(col = "white", lwd = 0.5, lineend = "butt")) } # layout of bar and label switch(guide$direction, "horizontal" = { switch(label.position, "top" = { bl_widths <- barwidth.c bl_heights <- c(label_height.c, vgap, barheight.c) vps <- list(bar.row = 3, bar.col = 1, label.row = 1, label.col = 1) }, "bottom" = { bl_widths <- barwidth.c bl_heights <- c(barheight.c, vgap, label_height.c) vps <- list(bar.row = 1, bar.col = 1, label.row = 3, label.col = 1) }) }, "vertical" = { switch(label.position, "left" = { bl_widths <- c(label_width.c, vgap, barwidth.c) bl_heights <- barheight.c vps <- list(bar.row = 1, bar.col = 3, label.row = 1, label.col = 1) }, "right" = { bl_widths <- c(barwidth.c, vgap, label_width.c) bl_heights <- barheight.c vps <- list(bar.row = 1, bar.col = 1, label.row = 1, label.col = 3) }) }) # layout of title and bar+label switch(guide$title.position, "top" = { widths <- c(bl_widths, max(0, title_width.c - sum(bl_widths))) heights <- c(title_height.c, vgap, bl_heights) vps <- with(vps, list(bar.row = bar.row + 2, bar.col = bar.col, label.row = label.row + 2, label.col = label.col, title.row = 1, title.col = 1:length(widths))) }, "bottom" = { widths <- c(bl_widths, max(0, title_width.c - sum(bl_widths))) heights <- c(bl_heights, vgap, title_height.c) vps <- with(vps, list(bar.row = bar.row, bar.col = bar.col, label.row = label.row, label.col = label.col, title.row = length(heights), title.col = 1:length(widths))) }, "left" = { widths <- c(title_width.c, hgap, bl_widths) heights <- c(bl_heights, max(0, title_height.c - sum(bl_heights))) vps <- with(vps, list(bar.row = bar.row, bar.col = bar.col + 2, label.row = label.row, label.col = label.col + 2, title.row = 1:length(heights), title.col = 1)) }, "right" = { widths <- c(bl_widths, hgap, title_width.c) heights <- c(bl_heights, max(0, title_height.c - sum(bl_heights))) vps <- with(vps, list(bar.row = bar.row, bar.col = bar.col, label.row = label.row, label.col = label.col, title.row = 1:length(heights), title.col = length(widths))) }) # background grob.background <- element_render(theme, "legend.background") # padding padding <- convertUnit(theme$legend.margin %||% margin(), "mm") widths <- c(padding[4], widths, padding[2]) heights <- c(padding[1], heights, padding[3]) gt <- gtable(widths = unit(widths, "mm"), heights = unit(heights, "mm")) gt <- gtable_add_grob(gt, grob.background, name = "background", clip = "off", t = 1, r = -1, b = -1, l = 1) gt <- gtable_add_grob(gt, grob.bar, name = "bar", clip = "off", t = 1 + min(vps$bar.row), r = 1 + max(vps$bar.col), b = 1 + max(vps$bar.row), l = 1 + min(vps$bar.col)) gt <- gtable_add_grob(gt, grob.label, name = "label", clip = "off", t = 1 + min(vps$label.row), r = 1 + max(vps$label.col), b = 1 + max(vps$label.row), l = 1 + min(vps$label.col)) gt <- gtable_add_grob(gt, grob.title, name = "title", clip = "off", t = 1 + min(vps$title.row), r = 1 + max(vps$title.col), b = 1 + max(vps$title.row), l = 1 + min(vps$title.col)) gt <- gtable_add_grob(gt, grob.ticks, name = "ticks", clip = "off", t = 1 + min(vps$bar.row), r = 1 + max(vps$bar.col), b = 1 + max(vps$bar.row), l = 1 + min(vps$bar.col)) gt } #' @export #' @rdname guide_colourbar guide_colorbar <- guide_colourbar ggplot2/R/scale-hue.r0000644000177400001440000000425113006123477014261 0ustar murdochusers#' Evenly spaced colours for discrete data #' #' This is the default colour scale for categorical variables. It maps each #' level to an evenly spaced hue on the colour wheel. It does not generate #' colour-blind safe palettes. #' #' @param na.value Colour to use for missing values #' @param ... Other arguments passed on to \code{\link{discrete_scale}} #' to control name, limits, breaks, labels and so forth. #' @inheritParams scales::hue_pal #' @rdname scale_hue #' @export #' @family colour scales #' @examples #' \donttest{ #' dsamp <- diamonds[sample(nrow(diamonds), 1000), ] #' (d <- ggplot(dsamp, aes(carat, price)) + geom_point(aes(colour = clarity))) #' #' # Change scale label #' d + scale_colour_hue() #' d + scale_colour_hue("clarity") #' d + scale_colour_hue(expression(clarity[beta])) #' #' # Adjust luminosity and chroma #' d + scale_colour_hue(l = 40, c = 30) #' d + scale_colour_hue(l = 70, c = 30) #' d + scale_colour_hue(l = 70, c = 150) #' d + scale_colour_hue(l = 80, c = 150) #' #' # Change range of hues used #' d + scale_colour_hue(h = c(0, 90)) #' d + scale_colour_hue(h = c(90, 180)) #' d + scale_colour_hue(h = c(180, 270)) #' d + scale_colour_hue(h = c(270, 360)) #' #' # Vary opacity #' # (only works with pdf, quartz and cairo devices) #' d <- ggplot(dsamp, aes(carat, price, colour = clarity)) #' d + geom_point(alpha = 0.9) #' d + geom_point(alpha = 0.5) #' d + geom_point(alpha = 0.2) #' #' # Colour of missing values is controlled with na.value: #' miss <- factor(sample(c(NA, 1:5), nrow(mtcars), replace = TRUE)) #' ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = miss)) #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = miss)) + #' scale_colour_hue(na.value = "black") #' } scale_colour_hue <- function(..., h = c(0, 360) + 15, c = 100, l = 65, h.start = 0, direction = 1, na.value = "grey50") { discrete_scale("colour", "hue", hue_pal(h, c, l, h.start, direction), na.value = na.value, ...) } #' @rdname scale_hue #' @export scale_fill_hue <- function(..., h = c(0, 360) + 15, c = 100, l = 65, h.start = 0, direction = 1, na.value = "grey50") { discrete_scale("fill", "hue", hue_pal(h, c, l, h.start, direction), na.value = na.value, ...) } ggplot2/R/autoplot.r0000644000177400001440000000134012567364124014265 0ustar murdochusers#' Create a complete ggplot appropriate to a particular data type #' #' \code{autoplot} uses ggplot2 to draw a particular plot for an object of a #' particular class in a single command. This defines the S3 generic that #' other classes and packages can extend. #' #' @param object an object, whose class will determine the behaviour of autoplot #' @param ... other arguments passed to specific methods #' @return a ggplot object #' @export #' @seealso \code{\link{ggplot}} and \code{\link{fortify}} autoplot <- function(object, ...) { UseMethod("autoplot") } #' @export autoplot.default <- function(object, ...) { stop("Objects of type ", paste(class(object), collapse = "/"), " not supported by autoplot.", call. = FALSE) } ggplot2/R/position-stack.r0000644000177400001440000001636113005735144015366 0ustar murdochusers#' Stack overlapping objects on top of each another #' #' \code{position_stack()} stacks bars on top of each other; #' \code{position_fill()} stacks bars and standardises each stack to have #' constant height. #' #' \code{position_fill()} and \code{position_stack()} automatically stack #' values in reverse order of the group aesthetic, which for bar charts is #' usually defined by the fill aesthetic (the default group aesthetic is formed #' by the combination of all discrete aesthetics except for x and y). This #' default ensures that bar colours align with the default legend. #' #' There are three ways to override the defaults depending on what you want: #' #' \enumerate{ #' \item Change the order of the levels in the underyling factor. This #' will change the stacking order, and the order of keys in the legend. #' #' \item Set the legend \code{breaks} to change the order of the keys #' without affecting the stacking. #' #' \item Manually set the group aesthetic to change the stacking order #' without affecting the legend. #' } #' #' Stacking of positive and negative values are performed separately so that #' positive values stack upwards from the x-axis and negative values stack #' downward. #' #' @family position adjustments #' @param vjust Vertical adjustment for geoms that have a position #' (like points or lines), not a dimension (like bars or areas). Set to #' \code{0} to align with the bottom, \code{0.5} for the middle, #' and \code{1} (the default) for the top. #' @param reverse If \code{TRUE}, will reverse the default stacking order. #' This is useful if you're rotating both the plot and legend. #' @seealso See \code{\link{geom_bar}} and \code{\link{geom_area}} for #' more examples. #' @export #' @examples #' # Stacking and filling ------------------------------------------------------ #' #' # Stacking is the default behaviour for most area plots. #' # Fill makes it easier to compare proportions #' ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + #' geom_bar() #' ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + #' geom_bar(position = "fill") #' #' ggplot(diamonds, aes(price, fill = cut)) + #' geom_histogram(binwidth = 500) #' ggplot(diamonds, aes(price, fill = cut)) + #' geom_histogram(binwidth = 500, position = "fill") #' #' # Stacking is also useful for time series #' series <- data.frame( #' time = c(rep(1, 4),rep(2, 4), rep(3, 4), rep(4, 4)), #' type = rep(c('a', 'b', 'c', 'd'), 4), #' value = rpois(16, 10) #' ) #' ggplot(series, aes(time, value)) + #' geom_area(aes(fill = type)) #' #' # Stacking order ------------------------------------------------------------ #' #' # You control the stacking order by setting the levels of the underlying #' # factor. See the forcats package for convenient helpers. #' series$type2 <- factor(series$type, levels = c('c', 'b', 'd', 'a')) #' ggplot(series, aes(time, value)) + #' geom_area(aes(fill = type2)) #' #' # You can change the order of the levels in the legend using the scale #' ggplot(series, aes(time, value)) + #' geom_area(aes(fill = type)) + #' scale_fill_discrete(breaks = c('a', 'b', 'c', 'd')) #' #' # Non-area plots ------------------------------------------------------------ #' #' # When stacking across multiple layers it's a good idea to always set #' # the `group` aethetic in the ggplot() call. This ensures that all layers #' # are stacked in the same way. #' ggplot(series, aes(time, value, group = type)) + #' geom_line(aes(colour = type), position = "stack") + #' geom_point(aes(colour = type), position = "stack") #' #' ggplot(series, aes(time, value, group = type)) + #' geom_area(aes(fill = type)) + #' geom_line(aes(group = type), position = "stack") #' #' # You can also stack labels, but the default position is suboptimal. #' ggplot(series, aes(time, value, group = type)) + #' geom_area(aes(fill = type)) + #' geom_text(aes(label = type), position = "stack") #' #' # You can override this with the vjust parameter. A vjust of 0.5 #' # will center the labels inside the corresponding area #' ggplot(series, aes(time, value, group = type)) + #' geom_area(aes(fill = type)) + #' geom_text(aes(label = type), position = position_stack(vjust = 0.5)) #' #' # Negative values ----------------------------------------------------------- #' #' df <- tibble::tribble( #' ~x, ~y, ~grp, #' "a", 1, "x", #' "a", 2, "y", #' "b", 1, "x", #' "b", 3, "y", #' "b", -1, "y" #' ) #' ggplot(data = df, aes(x, y, group = grp)) + #' geom_col(aes(fill = grp), position = position_stack(reverse = TRUE)) + #' geom_hline(yintercept = 0) #' #' ggplot(data = df, aes(x, y, group = grp)) + #' geom_col(aes(fill = grp)) + #' geom_hline(yintercept = 0) + #' geom_text(aes(label = grp), position = position_stack(vjust = 0.5)) position_stack <- function(vjust = 1, reverse = FALSE) { ggproto(NULL, PositionStack, vjust = vjust, reverse = reverse) } #' @export #' @rdname position_stack position_fill <- function(vjust = 1, reverse = FALSE) { ggproto(NULL, PositionFill, vjust = vjust, reverse = reverse) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionStack <- ggproto("PositionStack", Position, type = NULL, vjust = 1, fill = FALSE, reverse = FALSE, setup_params = function(self, data) { list( var = self$var %||% stack_var(data), fill = self$fill, vjust = self$vjust, reverse = self$reverse ) }, setup_data = function(self, data, params) { if (is.null(params$var)) { return(data) } data$ymax <- switch(params$var, y = data$y, ymax = ifelse(data$ymax == 0, data$ymin, data$ymax) ) remove_missing( data, vars = c("x", "xmin", "xmax", "y"), name = "position_stack" ) }, compute_panel = function(data, params, scales) { if (is.null(params$var)) { return(data) } negative <- data$ymax < 0 neg <- data[negative, , drop = FALSE] pos <- data[!negative, , drop = FALSE] if (any(negative)) { neg <- collide(neg, NULL, "position_stack", pos_stack, vjust = params$vjust, fill = params$fill, reverse = params$reverse ) } if (any(!negative)) { pos <- collide(pos, NULL, "position_stack", pos_stack, vjust = params$vjust, fill = params$fill, reverse = params$reverse ) } rbind(neg, pos) } ) pos_stack <- function(df, width, vjust = 1, fill = FALSE) { n <- nrow(df) + 1 y <- ifelse(is.na(df$y), 0, df$y) heights <- c(0, cumsum(y)) if (fill) { heights <- heights / abs(heights[length(heights)]) } df$ymin <- pmin(heights[-n], heights[-1]) df$ymax <- pmax(heights[-n], heights[-1]) df$y <- (1 - vjust) * df$ymin + vjust * df$ymax df } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionFill <- ggproto("PositionFill", PositionStack, fill = TRUE ) stack_var <- function(data) { if (!is.null(data$ymax)) { if (any(data$ymin != 0 && data$ymax != 0, na.rm = TRUE)) { warning("Stacking not well defined when not anchored on the axis", call. = FALSE) } "ymax" } else if (!is.null(data$y)) { "y" } else { warning( "Stacking requires either ymin & ymin or y aesthetics.\n", "Maybe you want position = 'identity'?", call. = FALSE ) NULL } } ggplot2/R/axis-secondary.R0000644000177400001440000001214513010131417015271 0ustar murdochusers#' Specify a secondary axis #' #' This function is used in conjunction with a position scale to create a #' secondary axis, positioned opposite of the primary axis. All secondary #' axes must be based on a one-to-one transformation of the primary axes. #' #' @param trans A transformation formula #' #' @param name The name of the secondary axis #' #' @param breaks One of: #' \itemize{ #' \item{\code{NULL} for no breaks} #' \item{\code{waiver()} for the default breaks computed by the transformation object} #' \item{A numeric vector of positions} #' \item{A function that takes the limits as input and returns breaks as output} #' } #' #' @param labels One of: #' \itemize{ #' \item{\code{NULL} for no labels} #' \item{\code{waiver()} for the default labels computed by the transformation object} #' \item{A character vector giving labels (must be same length as \code{breaks})} #' \item{A function that takes the breaks as input and returns labels as output} #' } #' #' @details #' \code{sec_axis} is used to create the specifications for a secondary axis. #' Except for the \code{trans} argument any of the arguments can be set to #' \code{derive()} which would result in the secondary axis inheriting the #' settings from the primary axis. #' #' \code{dup_axis} is provide as a shorthand for creating a secondary axis that #' is a duplication of the primary axis, effectively mirroring the primary axis. #' #' @examples #' p <- ggplot(mtcars, aes(cyl, mpg)) + #' geom_point() #' #' # Create a simple secondary axis #' p + scale_y_continuous(sec.axis = sec_axis(~.+10)) #' #' # Inherit the name from the primary axis #' p + scale_y_continuous("Miles/gallon", sec.axis = sec_axis(~.+10, name = derive())) #' #' # Duplicate the primary axis #' p + scale_y_continuous(sec.axis = dup_axis()) #' #' # You can pass in a formula as a shorthand #' p + scale_y_continuous(sec.axis = ~.^2) #' #' @export sec_axis <- function(trans = NULL, name = waiver(), breaks = waiver(), labels = waiver()) { if (!is.formula(trans)) stop("transformation for secondary axes must be a formula", call. = FALSE) ggproto(NULL, AxisSecondary, trans = trans, name = name, breaks = breaks, labels = labels ) } #' @rdname sec_axis #' #' @export dup_axis <- function(trans = ~., name = derive(), breaks = derive(), labels = derive()) { sec_axis(trans, name, breaks, labels) } is.sec_axis <- function(x) { inherits(x, "AxisSecondary") } #' @rdname sec_axis #' #' @export derive <- function() { structure(list(), class = "derived") } is.derived <- function(x) { inherits(x, "derived") } #' @importFrom lazyeval f_eval #' #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export AxisSecondary <- ggproto("AxisSecondary", NULL, trans = NULL, axis = NULL, name = waiver(), breaks = waiver(), labels = waiver(), # This determines the quality of the remapping from the secondary axis and # back to the primary axis i.e. the exactness of the placement of the # breakpoints of the secondary axis. detail = 1000, empty = function(self) { is.null(self$trans) }, # Inherit settings from the primary axis/scale init = function(self, scale) { if (self$empty()) return() if (!is.formula(self$trans)) stop("transformation for secondary axes must be a formula", call. = FALSE) if (is.derived(self$name) && !is.waive(scale$name)) self$name <- scale$name if (is.derived(self$breaks)) self$breaks <- scale$breaks if (is.derived(self$labels)) self$labels <- scale$labels }, transform_range = function(self, range) { range <- structure(data.frame(range), names = '.') f_eval(self$trans, range) }, break_info = function(self, range, scale) { if (self$empty()) return() # Get original range before transformation inv_range <- scale$trans$inverse(range) # Create mapping between primary and secondary range old_range <- seq(inv_range[1], inv_range[2], length.out = self$detail) full_range <- self$transform_range(old_range) # Test for monotony if (length(unique(sign(diff(full_range)))) != 1) stop("transformation for secondary axes must be monotonous") # Get break info for the secondary axis new_range <- range(full_range, na.rm = TRUE) temp_scale <- self$create_scale(new_range) range_info <- temp_scale$break_info() # Map the break values back to their correct position on the primary scale old_val <- lapply(range_info$major_source, function(x) which.min(abs(full_range - x))) old_val <- old_range[unlist(old_val)] old_val_trans <- scale$trans$transform(old_val) range_info$major[] <- round(rescale(scale$map(old_val_trans, range(old_val_trans)), from = range), digits = 3) names(range_info) <- paste0("sec.", names(range_info)) range_info }, # Temporary scale for the purpose of calling break_info() create_scale = function(self, range) { scale <- ggproto(NULL, ScaleContinuousPosition, name = self$name, breaks = self$breaks, labels = self$labels, limits = range, expand = c(0, 0), trans = identity_trans() ) scale$train(range) scale }, make_title = function(title) { title } ) ggplot2/R/geom-density2d.r0000644000177400001440000000473013005734056015247 0ustar murdochusers#' Contours of a 2d density estimate #' #' Perform a 2D kernel density estimation using \code{\link[MASS]{kde2d}} and #' display the results with contours. This can be useful for dealing with #' overplotting. This is a 2d version of \code{\link{geom_density}}. #' #' @section Aesthetics: #' \aesthetics{geom}{density_2d} #' #' @seealso \code{\link{geom_contour}} for information about how contours #' are drawn; \code{\link{geom_bin2d}} for another way of dealing with #' overplotting. #' @param geom,stat Use to override the default connection between #' \code{geom_density_2d} and \code{stat_density_2d}. #' @inheritParams layer #' @inheritParams geom_point #' @inheritParams geom_path #' @export #' @examples #' m <- ggplot(faithful, aes(x = eruptions, y = waiting)) + #' geom_point() + #' xlim(0.5, 6) + #' ylim(40, 110) #' m + geom_density_2d() #' \donttest{ #' m + stat_density_2d(aes(fill = ..level..), geom = "polygon") #' #' set.seed(4393) #' dsmall <- diamonds[sample(nrow(diamonds), 1000), ] #' d <- ggplot(dsmall, aes(x, y)) #' # If you map an aesthetic to a categorical variable, you will get a #' # set of contours for each value of that variable #' d + geom_density_2d(aes(colour = cut)) #' #' # If we turn contouring off, we can use use geoms like tiles: #' d + stat_density_2d(geom = "raster", aes(fill = ..density..), contour = FALSE) #' # Or points: #' d + stat_density_2d(geom = "point", aes(size = ..density..), n = 20, contour = FALSE) #' } geom_density_2d <- function(mapping = NULL, data = NULL, stat = "density2d", position = "identity", ..., lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomDensity2d, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( lineend = lineend, linejoin = linejoin, linemitre = linemitre, na.rm = na.rm, ... ) ) } #' @export #' @rdname geom_density_2d #' @usage NULL geom_density2d <- geom_density_2d #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomDensity2d <- ggproto("GeomDensity2d", GeomPath, default_aes = aes(colour = "#3366FF", size = 0.5, linetype = 1, alpha = NA) ) ggplot2/R/stat-ellipse.R0000644000177400001440000000754613005734735014777 0ustar murdochusers#' Compute normal confidence ellipses #' #' The method for calculating the ellipses has been modified from #' \code{car::ellipse} (Fox and Weisberg, 2011) #' #' @references John Fox and Sanford Weisberg (2011). An {R} Companion to #' Applied Regression, Second Edition. Thousand Oaks CA: Sage. URL: #' \url{http://socserv.socsci.mcmaster.ca/jfox/Books/Companion} #' @param level The confidence level at which to draw an ellipse (default is 0.95), #' or, if \code{type="euclid"}, the radius of the circle to be drawn. #' @param type The type of ellipse. #' The default \code{"t"} assumes a multivariate t-distribution, and #' \code{"norm"} assumes a multivariate normal distribution. #' \code{"euclid"} draws a circle with the radius equal to \code{level}, #' representing the euclidean distance from the center. #' This ellipse probably won't appear circular unless \code{coord_fixed()} is applied. #' @param segments The number of segments to be used in drawing the ellipse. #' @inheritParams layer #' @inheritParams geom_point #' @export #' @examples #' ggplot(faithful, aes(waiting, eruptions)) + #' geom_point() + #' stat_ellipse() #' #' ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + #' geom_point() + #' stat_ellipse() #' #' ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + #' geom_point() + #' stat_ellipse(type = "norm", linetype = 2) + #' stat_ellipse(type = "t") #' #' ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + #' geom_point() + #' stat_ellipse(type = "norm", linetype = 2) + #' stat_ellipse(type = "euclid", level = 3) + #' coord_fixed() #' #' ggplot(faithful, aes(waiting, eruptions, fill = eruptions > 3)) + #' stat_ellipse(geom = "polygon") stat_ellipse <- function(mapping = NULL, data = NULL, geom = "path", position = "identity", ..., type = "t", level = 0.95, segments = 51, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatEllipse, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( type = type, level = level, segments = segments, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatEllipse <- ggproto("StatEllipse", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, type = "t", level = 0.95, segments = 51, na.rm = FALSE) { calculate_ellipse(data = data, vars = c("x", "y"), type = type, level = level, segments = segments) } ) calculate_ellipse <- function(data, vars, type, level, segments){ dfn <- 2 dfd <- nrow(data) - 1 if (!type %in% c("t", "norm", "euclid")) { message("Unrecognized ellipse type") ellipse <- rbind(as.numeric(c(NA, NA))) } else if (dfd < 3) { message("Too few points to calculate an ellipse") ellipse <- rbind(as.numeric(c(NA, NA))) } else { if (type == "t") { v <- MASS::cov.trob(data[,vars]) } else if (type == "norm") { v <- stats::cov.wt(data[,vars]) } else if (type == "euclid") { v <- stats::cov.wt(data[,vars]) v$cov <- diag(rep(min(diag(v$cov)), 2)) } shape <- v$cov center <- v$center chol_decomp <- chol(shape) if (type == "euclid") { radius <- level/max(chol_decomp) } else { radius <- sqrt(dfn * stats::qf(level, dfn, dfd)) } angles <- (0:segments) * 2 * pi/segments unit.circle <- cbind(cos(angles), sin(angles)) ellipse <- t(center + radius * t(unit.circle %*% chol_decomp)) } ellipse <- as.data.frame(ellipse) colnames(ellipse) <- vars ellipse } ggplot2/R/utilities.r0000644000177400001440000002123413031506177014426 0ustar murdochusers#' @export #' @examples #' ggplot(mpg, aes(displ, hwy)) + #' geom_point(alpha = 0.5, colour = "blue") #' #' ggplot(mpg, aes(displ, hwy)) + #' geom_point(colour = alpha("blue", 0.5)) scales::alpha "%||%" <- function(a, b) { if (!is.null(a)) a else b } "%|W|%" <- function(a, b) { if (!is.waive(a)) a else b } # Check required aesthetics are present # This is used by geoms and stats to give a more helpful error message # when required aesthetics are missing. # # @param character vector of required aesthetics # @param character vector of present aesthetics # @param name of object for error message # @keyword internal check_required_aesthetics <- function(required, present, name) { missing_aes <- setdiff(required, present) if (length(missing_aes) == 0) return() stop(name, " requires the following missing aesthetics: ", paste(missing_aes, collapse = ", "), call. = FALSE) } # Concatenate a named list for output # Print a \code{list(a=1, b=2)} as \code{(a=1, b=2)} # # @param list to concatenate # @keyword internal #X clist(list(a=1, b=2)) #X clist(par()[1:5]) clist <- function(l) { paste(paste(names(l), l, sep = " = ", collapse = ", "), sep = "") } try_require <- function(package, fun) { if (requireNamespace(package, quietly = TRUE)) { library(package, character.only = TRUE) return(invisible()) } stop("Package `", package, "` required for `", fun , "`.\n", "Please install and try again.", call. = FALSE) } # Return unique columns # This is used for figuring out which columns are constant within a group # # @keyword internal uniquecols <- function(df) { df <- df[1, sapply(df, function(x) length(unique(x)) == 1), drop = FALSE] rownames(df) <- 1:nrow(df) df } #' Convenience function to remove missing values from a data.frame #' #' Remove all non-complete rows, with a warning if \code{na.rm = FALSE}. #' ggplot is somewhat more accommodating of missing values than R generally. #' For those stats which require complete data, missing values will be #' automatically removed with a warning. If \code{na.rm = TRUE} is supplied #' to the statistic, the warning will be suppressed. #' #' @param df data.frame #' @param na.rm If true, will suppress warning message. #' @param vars Character vector of variables to check for missings in #' @param name Optional function name to improve error message. #' @param finite If \code{TRUE}, will also remove non-finite values. #' @keywords internal #' @export remove_missing <- function(df, na.rm = FALSE, vars = names(df), name = "", finite = FALSE) { stopifnot(is.logical(na.rm)) vars <- intersect(vars, names(df)) if (name != "") name <- paste(" (", name, ")", sep = "") if (finite) { missing <- !finite.cases(df[, vars, drop = FALSE]) str <- "non-finite" } else { missing <- !stats::complete.cases(df[, vars, drop = FALSE]) str <- "missing" } if (any(missing)) { df <- df[!missing, ] if (!na.rm) { warning_wrap( "Removed ", sum(missing), " rows containing ", str, " values", name, "." ) } } df } finite.cases <- function(x) UseMethod("finite.cases") # Returns a logical vector of same length as nrow(x). If all data on a row # is finite (not NA, NaN, Inf, or -Inf) return TRUE; otherwise FALSE. #' @export finite.cases.data.frame <- function(x) { finite_cases <- vapply(x, is.finite, logical(nrow(x))) # Need a special case test when x has exactly one row, because rowSums # doesn't respect dimensions for 1x1 matrices. vapply returns a vector (not # a matrix when the input has one row. if (is.vector(finite_cases)) { all(finite_cases) } else { # Find all the rows where all are TRUE rowSums(as.matrix(finite_cases)) == ncol(x) } } #' Used in examples to illustrate when errors should occur. #' #' @param expr code to evaluate. #' @export #' @keywords internal #' @examples #' should_stop(stop("Hi!")) #' should_stop(should_stop("Hi!")) should_stop <- function(expr) { res <- try(print(force(expr)), TRUE) if (!inherits(res, "try-error")) stop("No error!", call. = FALSE) invisible() } #' A waiver object. #' #' A waiver is a "flag" object, similar to \code{NULL}, that indicates the #' calling function should just use the default value. It is used in certain #' functions to distinguish between displaying nothing (\code{NULL}) and #' displaying a default value calculated elsewhere (\code{waiver()}) #' #' @export #' @keywords internal waiver <- function() structure(list(), class = "waiver") is.waive <- function(x) inherits(x, "waiver") rescale01 <- function(x) { rng <- range(x, na.rm = TRUE) (x - rng[1]) / (rng[2] - rng[1]) } #' Give a deprecation error, warning, or message, depending on version number. #' #' Version numbers have the format .., like 0.9.2. #' This function compares the current version number of ggplot2 against the #' specified \code{version}, which is the most recent version before the #' function (or other object) was deprecated. #' #' \code{gg_dep} will give an error, warning, or message, depending on the #' difference between the current ggplot2 version and the specified #' \code{version}. #' #' If the current major number is greater than \code{version}'s major number, #' or if the current minor number is more than 1 greater than \code{version}'s #' minor number, give an error. #' #' If the current minor number differs from \code{version}'s minor number by #' one, give a warning. #' #' If the current subminor number differs from \code{version}'s subminor #' number, print a message. #' #' @param version The last version of ggplot2 where this function was good #' (in other words, the last version where it was not deprecated). #' @param msg The message to print. #' @keywords internal #' @export gg_dep <- function(version, msg) { v <- as.package_version(version) cv <- utils::packageVersion("ggplot2") # If current major number is greater than last-good major number, or if # current minor number is more than 1 greater than last-good minor number, # give error. if (cv[[1,1]] > v[[1,1]] || cv[[1,2]] > v[[1,2]] + 1) { stop(msg, " (Defunct; last used in version ", version, ")", call. = FALSE) # If minor number differs by one, give warning } else if (cv[[1,2]] > v[[1,2]]) { warning(msg, " (Deprecated; last used in version ", version, ")", call. = FALSE) # If only subminor number is greater, give message } else if (cv[[1,3]] > v[[1,3]]) { message(msg, " (Deprecated; last used in version ", version, ")") } invisible() } has_name <- function(x) { nms <- names(x) if (is.null(nms)) { return(rep(FALSE, length(x))) } !is.na(nms) & nms != "" } # Convert a snake_case string to camelCase camelize <- function(x, first = FALSE) { x <- gsub("_(.)", "\\U\\1", x, perl = TRUE) if (first) x <- firstUpper(x) x } snakeize <- function(x) { x <- gsub("([A-Za-z])([A-Z])([a-z])", "\\1_\\2\\3", x) x <- gsub(".", "_", x, fixed = TRUE) x <- gsub("([a-z])([A-Z])", "\\1_\\2", x) tolower(x) } firstUpper <- function(s) { paste(toupper(substring(s, 1,1)), substring(s, 2), sep = "") } snake_class <- function(x) { snakeize(class(x)[1]) } empty <- function(df) { is.null(df) || nrow(df) == 0 || ncol(df) == 0 } is.discrete <- function(x) { is.factor(x) || is.character(x) || is.logical(x) } compact <- function(x) { null <- vapply(x, is.null, logical(1)) x[!null] } is.formula <- function(x) inherits(x, "formula") deparse2 <- function(x) { y <- deparse(x, backtick = TRUE) if (length(y) == 1) { y } else { paste0(y[[1]], "...") } } message_wrap <- function(...) { msg <- paste(..., collapse = "", sep = "") wrapped <- strwrap(msg, width = getOption("width") - 2) message(paste0(wrapped, collapse = "\n")) } warning_wrap <- function(...) { msg <- paste(..., collapse = "", sep = "") wrapped <- strwrap(msg, width = getOption("width") - 2) warning(paste0(wrapped, collapse = "\n"), call. = FALSE) } dispatch_args <- function(f, ...) { args <- list(...) formals <- formals(f) formals[names(args)] <- args formals(f) <- formals f } is_missing_arg <- function(x) identical(x, quote(expr = )) # Get all arguments in a function as a list. Will fail if an ellipsis argument # named .ignore # @param ... passed on in case enclosing function uses ellipsis in argument list find_args <- function(...) { env <- parent.frame() args <- names(formals(sys.function(sys.parent(1)))) vals <- mget(args, envir = env) vals <- vals[!vapply(vals, is_missing_arg, logical(1))] utils::modifyList(vals, list(..., `...` = NULL)) } # Used in annotations to ensure printed even when no # global data dummy_data <- function() data.frame(x = NA) # Needed to trigger package loading #' @importFrom tibble tibble NULL ggplot2/R/range.r0000644000177400001440000000153712775463100013515 0ustar murdochusers#' Mutable ranges have a two methods (\code{train} and \code{reset}), and make #' it possible to build up complete ranges with multiple passes. #' #' These range objects should be instantiated with #' \code{\link{continuous_range}} and \code{\link{discrete_range}}. #' #' @noRd Range <- ggproto("Range", NULL, range = NULL, reset = function(self) { self$range <- NULL } ) RangeDiscrete <- ggproto("RangeDiscrete", Range, train = function(self, x, drop = FALSE, na.rm = FALSE) { self$range <- scales::train_discrete(x, self$range, drop = drop, na.rm = na.rm) } ) RangeContinuous <- ggproto("RangeContinuous", Range, train = function(self, x) { self$range <- scales::train_continuous(x, self$range) } ) continuous_range <- function() { ggproto(NULL, RangeContinuous) } discrete_range <- function() { ggproto(NULL, RangeDiscrete) } ggplot2/R/scale-brewer.r0000644000177400001440000001033513006122575014764 0ustar murdochusers#' Sequential, diverging and qualitative colour scales from colorbrewer.org #' #' @description #' The \code{brewer} scales provides sequential, diverging and qualitative #' colour schemes from ColorBrewer. These are particularly well suited to #' display discrete values on a map. See \url{http://colorbrewer2.org} for #' more information. #' #' @note #' The \code{distiller} scales extends brewer to continuous scales by smoothly #' interpolate 6 colours from any palette to a continuous scale. #' #' @details #' The \code{brewer} scales were carefully designed and tested on discrete data. #' They were not designed to be extended to continuous data, but results often #' look good. Your mileage may vary. #' #' @section Palettes: #' The following palettes are available for use with these scales: #' \describe{ #' \item{Diverging}{BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, Spectral} #' \item{Qualitative}{Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, Set3} #' \item{Sequential}{Blues, BuGn, BuPu, GnBu, Greens, Greys, Oranges, #' OrRd, PuBu, PuBuGn, PuRd, Purples, RdPu, Reds, YlGn, YlGnBu, YlOrBr, YlOrRd} #' } #' #' @inheritParams scales::brewer_pal #' @inheritParams scale_colour_hue #' @inheritParams scale_colour_gradient #' @inheritParams scales::gradient_n_pal #' @family colour scales #' @rdname scale_brewer #' @export #' @examples #' dsamp <- diamonds[sample(nrow(diamonds), 1000), ] #' (d <- ggplot(dsamp, aes(carat, price)) + #' geom_point(aes(colour = clarity))) #' d + scale_colour_brewer() #' #' # Change scale label #' d + scale_colour_brewer("Diamond\nclarity") #' #' # Select brewer palette to use, see ?scales::brewer_pal for more details #' d + scale_colour_brewer(palette = "Greens") #' d + scale_colour_brewer(palette = "Set1") #' #' \donttest{ #' # scale_fill_brewer works just the same as #' # scale_colour_brewer but for fill colours #' p <- ggplot(diamonds, aes(x = price, fill = cut)) + #' geom_histogram(position = "dodge", binwidth = 1000) #' p + scale_fill_brewer() #' # the order of colour can be reversed #' p + scale_fill_brewer(direction = -1) #' # the brewer scales look better on a darker background #' p + scale_fill_brewer(direction = -1) + theme_dark() #' } #' #' # Use distiller variant with continous data #' v <- ggplot(faithfuld) + #' geom_tile(aes(waiting, eruptions, fill = density)) #' v #' v + scale_fill_distiller() #' v + scale_fill_distiller(palette = "Spectral") scale_colour_brewer <- function(..., type = "seq", palette = 1, direction = 1) { discrete_scale("colour", "brewer", brewer_pal(type, palette, direction), ...) } #' @export #' @rdname scale_brewer scale_fill_brewer <- function(..., type = "seq", palette = 1, direction = 1) { discrete_scale("fill", "brewer", brewer_pal(type, palette, direction), ...) } #' @export #' @rdname scale_brewer scale_colour_distiller <- function(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") { # warn about using a qualitative brewer palette to generate the gradient type <- match.arg(type, c("seq", "div", "qual")) if (type == "qual") { warning("Using a discrete colour palette in a continuous scale.\n Consider using type = \"seq\" or type = \"div\" instead", call. = FALSE) } continuous_scale("colour", "distiller", gradient_n_pal(brewer_pal(type, palette, direction)(6), values, space), na.value = na.value, guide = guide, ...) # NB: 6 colours per palette gives nice gradients; more results in more saturated colours which do not look as good } #' @export #' @rdname scale_brewer scale_fill_distiller <- function(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") { type <- match.arg(type, c("seq", "div", "qual")) if (type == "qual") { warning("Using a discrete colour palette in a continuous scale.\n Consider using type = \"seq\" or type = \"div\" instead", call. = FALSE) } continuous_scale("fill", "distiller", gradient_n_pal(brewer_pal(type, palette, direction)(6), values, space), na.value = na.value, guide = guide, ...) } # icon.brewer <- function() { # rectGrob(c(0.1, 0.3, 0.5, 0.7, 0.9), width = 0.21, # gp = gpar(fill = RColorBrewer::brewer.pal(5, "PuOr"), col = NA) # ) # } ggplot2/R/geom-boxplot.r0000644000177400001440000002130513005711020015010 0ustar murdochusers#' A box and whiskers plot (in the style of Tukey) #' #' The boxplot compactly displays the distribution of a continuous variable. #' It visualises five summary statistics (the median, two hinges #' and two whiskers), and all "outlying" points individually. #' #' @section Summary statistics: #' The lower and upper hinges correspond to the first and third quartiles #' (the 25th and 75th percentiles). This differs slightly from the method used #' by the \code{boxplot} function, and may be apparent with small samples. #' See \code{\link{boxplot.stats}} for for more information on how hinge #' positions are calculated for \code{boxplot}. #' #' The upper whisker extends from the hinge to the largest value no further than #' 1.5 * IQR from the hinge (where IQR is the inter-quartile range, or distance #' between the first and third quartiles). The lower whisker extends from the #' hinge to the smallest value at most 1.5 * IQR of the hinge. Data beyond the #' end of the whiskers are called "outlying" points and are plotted #' individually. #' #' In a notched box plot, the notches extend \code{1.58 * IQR / sqrt(n)}. #' This gives a roughly 95\% confidence interval for comparing medians. #' See McGill et al. (1978) for more details. #' #' @section Aesthetics: #' \aesthetics{geom}{boxplot} #' #' @seealso \code{\link{geom_quantile}} for continuous x, #' \code{\link{geom_violin}} for a richer display of the distribution, and #' \code{\link{geom_jitter}} for a useful technique for small data. #' @inheritParams layer #' @inheritParams geom_point #' @param geom,stat Use to override the default connection between #' \code{geom_boxplot} and \code{stat_boxplot}. #' @param outlier.colour,outlier.color,outlier.fill,outlier.shape,outlier.size,outlier.stroke,outlier.alpha #' Default aesthetics for outliers. Set to \code{NULL} to inherit from the #' aesthetics used for the box. #' #' In the unlikely event you specify both US and UK spellings of colour, the #' US spelling will take precedence. #' @param notch if \code{FALSE} (default) make a standard box plot. If #' \code{TRUE}, make a notched box plot. Notches are used to compare groups; #' if the notches of two boxes do not overlap, this suggests that the medians #' are significantly different. #' @param notchwidth for a notched box plot, width of the notch relative to #' the body (default 0.5) #' @param varwidth if \code{FALSE} (default) make a standard box plot. If #' \code{TRUE}, boxes are drawn with widths proportional to the #' square-roots of the number of observations in the groups (possibly #' weighted, using the \code{weight} aesthetic). #' @export #' @references McGill, R., Tukey, J. W. and Larsen, W. A. (1978) Variations of #' box plots. The American Statistician 32, 12-16. #' @examples #' p <- ggplot(mpg, aes(class, hwy)) #' p + geom_boxplot() #' p + geom_boxplot() + geom_jitter(width = 0.2) #' p + geom_boxplot() + coord_flip() #' #' p + geom_boxplot(notch = TRUE) #' p + geom_boxplot(varwidth = TRUE) #' p + geom_boxplot(fill = "white", colour = "#3366FF") #' # By default, outlier points match the colour of the box. Use #' # outlier.colour to override #' p + geom_boxplot(outlier.colour = "red", outlier.shape = 1) #' #' # Boxplots are automatically dodged when any aesthetic is a factor #' p + geom_boxplot(aes(colour = drv)) #' #' # You can also use boxplots with continuous x, as long as you supply #' # a grouping variable. cut_width is particularly useful #' ggplot(diamonds, aes(carat, price)) + #' geom_boxplot() #' ggplot(diamonds, aes(carat, price)) + #' geom_boxplot(aes(group = cut_width(carat, 0.25))) #' ggplot(diamonds, aes(carat, price)) + #' geom_boxplot(aes(group = cut_width(carat, 0.25)), outlier.alpha = 0.1) #' #' \donttest{ #' # It's possible to draw a boxplot with your own computations if you #' # use stat = "identity": #' y <- rnorm(100) #' df <- data.frame( #' x = 1, #' y0 = min(y), #' y25 = quantile(y, 0.25), #' y50 = median(y), #' y75 = quantile(y, 0.75), #' y100 = max(y) #' ) #' ggplot(df, aes(x)) + #' geom_boxplot( #' aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100), #' stat = "identity" #' ) #' } geom_boxplot <- function(mapping = NULL, data = NULL, stat = "boxplot", position = "dodge", ..., outlier.colour = NULL, outlier.color = NULL, outlier.fill = NULL, outlier.shape = 19, outlier.size = 1.5, outlier.stroke = 0.5, outlier.alpha = NULL, notch = FALSE, notchwidth = 0.5, varwidth = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomBoxplot, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( outlier.colour = outlier.color %||% outlier.colour, outlier.fill = outlier.fill, outlier.shape = outlier.shape, outlier.size = outlier.size, outlier.stroke = outlier.stroke, outlier.alpha = outlier.alpha, notch = notch, notchwidth = notchwidth, varwidth = varwidth, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomBoxplot <- ggproto("GeomBoxplot", Geom, setup_data = function(data, params) { data$width <- data$width %||% params$width %||% (resolution(data$x, FALSE) * 0.9) if (!is.null(data$outliers)) { suppressWarnings({ out_min <- vapply(data$outliers, min, numeric(1)) out_max <- vapply(data$outliers, max, numeric(1)) }) data$ymin_final <- pmin(out_min, data$ymin) data$ymax_final <- pmax(out_max, data$ymax) } # if `varwidth` not requested or not available, don't use it if (is.null(params) || is.null(params$varwidth) || !params$varwidth || is.null(data$relvarwidth)) { data$xmin <- data$x - data$width / 2 data$xmax <- data$x + data$width / 2 } else { # make `relvarwidth` relative to the size of the largest group data$relvarwidth <- data$relvarwidth / max(data$relvarwidth) data$xmin <- data$x - data$relvarwidth * data$width / 2 data$xmax <- data$x + data$relvarwidth * data$width / 2 } data$width <- NULL if (!is.null(data$relvarwidth)) data$relvarwidth <- NULL data }, draw_group = function(data, panel_scales, coord, fatten = 2, outlier.colour = NULL, outlier.fill = NULL, outlier.shape = 19, outlier.size = 1.5, outlier.stroke = 0.5, outlier.alpha = NULL, notch = FALSE, notchwidth = 0.5, varwidth = FALSE) { common <- data.frame( colour = data$colour, size = data$size, linetype = data$linetype, fill = alpha(data$fill, data$alpha), group = data$group, stringsAsFactors = FALSE ) whiskers <- data.frame( x = data$x, xend = data$x, y = c(data$upper, data$lower), yend = c(data$ymax, data$ymin), alpha = NA, common, stringsAsFactors = FALSE ) box <- data.frame( xmin = data$xmin, xmax = data$xmax, ymin = data$lower, y = data$middle, ymax = data$upper, ynotchlower = ifelse(notch, data$notchlower, NA), ynotchupper = ifelse(notch, data$notchupper, NA), notchwidth = notchwidth, alpha = data$alpha, common, stringsAsFactors = FALSE ) if (!is.null(data$outliers) && length(data$outliers[[1]] >= 1)) { outliers <- data.frame( y = data$outliers[[1]], x = data$x[1], colour = outlier.colour %||% data$colour[1], fill = outlier.fill %||% data$fill[1], shape = outlier.shape %||% data$shape[1], size = outlier.size %||% data$size[1], stroke = outlier.stroke %||% data$stroke[1], fill = NA, alpha = outlier.alpha %||% data$alpha[1], stringsAsFactors = FALSE ) outliers_grob <- GeomPoint$draw_panel(outliers, panel_scales, coord) } else { outliers_grob <- NULL } ggname("geom_boxplot", grobTree( outliers_grob, GeomSegment$draw_panel(whiskers, panel_scales, coord), GeomCrossbar$draw_panel(box, fatten = fatten, panel_scales, coord) )) }, draw_key = draw_key_boxplot, default_aes = aes(weight = 1, colour = "grey20", fill = "white", size = 0.5, alpha = NA, shape = 19, linetype = "solid"), required_aes = c("x", "lower", "upper", "middle", "ymin", "ymax") ) ggplot2/R/stat-binhex.r0000644000177400001440000000262212771314677014655 0ustar murdochusers#' @export #' @rdname geom_hex #' @inheritParams stat_bin_2d stat_bin_hex <- function(mapping = NULL, data = NULL, geom = "hex", position = "identity", ..., bins = 30, binwidth = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatBinhex, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( bins = bins, binwidth = binwidth, na.rm = na.rm, ... ) ) } #' @export #' @rdname geom_hex #' @usage NULL stat_binhex <- stat_bin_hex #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatBinhex <- ggproto("StatBinhex", Stat, default_aes = aes(weight = 1, fill = ..count..), required_aes = c("x", "y"), compute_group = function(data, scales, binwidth = NULL, bins = 30, na.rm = FALSE) { try_require("hexbin", "stat_binhex") binwidth <- binwidth %||% hex_binwidth(bins, scales) wt <- data$weight %||% rep(1L, nrow(data)) out <- hexBinSummarise(data$x, data$y, wt, binwidth, sum) out$density <- as.vector(out$value / sum(out$value, na.rm = TRUE)) out$count <- out$value out$value <- NULL out } ) ggplot2/R/coord-flip.r0000644000177400001440000000344113006177375014457 0ustar murdochusers#' Cartesian coordinates with x and y flipped #' #' Flip cartesian coordinates so that horizontal becomes vertical, and #' vertical, horizontal. This is primarily useful for converting geoms and #' statistics which display y conditional on x, to x conditional on y. #' #' @export #' @inheritParams coord_cartesian #' @examples #' # Very useful for creating boxplots, and other interval #' # geoms in the horizontal instead of vertical position. #' #' ggplot(diamonds, aes(cut, price)) + #' geom_boxplot() + #' coord_flip() #' #' h <- ggplot(diamonds, aes(carat)) + #' geom_histogram() #' h #' h + coord_flip() #' h + coord_flip() + scale_x_reverse() #' #' # You can also use it to flip line and area plots: #' df <- data.frame(x = 1:5, y = (1:5) ^ 2) #' ggplot(df, aes(x, y)) + #' geom_area() #' last_plot() + coord_flip() coord_flip <- function(xlim = NULL, ylim = NULL, expand = TRUE) { ggproto(NULL, CoordFlip, limits = list(x = xlim, y = ylim), expand = expand ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordFlip <- ggproto("CoordFlip", CoordCartesian, transform = function(data, scale_details) { data <- flip_labels(data) CoordCartesian$transform(data, scale_details) }, range = function(scale_details) { list(x = scale_details$y.range, y = scale_details$x.range) }, train = function(self, scale_details) { trained <- ggproto_parent(CoordCartesian, self)$train(scale_details) flip_labels(trained) }, labels = function(scale_details) { flip_labels(CoordCartesian$labels(scale_details)) } ) flip_labels <- function(x) { old_names <- names(x) new_names <- old_names new_names <- gsub("^x", "z", new_names) new_names <- gsub("^y", "x", new_names) new_names <- gsub("^z", "y", new_names) setNames(x, new_names) } ggplot2/R/geom-histogram.r0000644000177400001440000000772413005734222015340 0ustar murdochusers#' Histograms and frequency polygons #' #' Visualise the distribution of a single continuous variable by dividing #' the x axis into bins and counting the number of observations in each bin. #' Histograms (\code{geom_histogram}) display the count with bars; frequency #' polygons (\code{geom_freqpoly}), display the counts with lines. Frequency #' polygons are more suitable when you want to compare the distribution #' across a the levels of a categorical variable. #' #' By default, the underlying computation (\code{stat_bin}) uses 30 bins - #' this is not a good default, but the idea is to get you experimenting with #' different binwidths. You may need to look at a few to uncover the full #' story behind your data. #' #' @section Aesthetics: #' \code{geom_histogram} uses the same aesthetics as \code{\link{geom_bar}}; #' \code{geom_freqpoly} uses the same aesthetics as \code{\link{geom_line}}. #' #' @export #' @inheritParams layer #' @inheritParams geom_point #' @param geom,stat Use to override the default connection between #' \code{geom_histogram}/\code{geom_freqpoly} and \code{stat_bin}. #' @examples #' ggplot(diamonds, aes(carat)) + #' geom_histogram() #' ggplot(diamonds, aes(carat)) + #' geom_histogram(binwidth = 0.01) #' ggplot(diamonds, aes(carat)) + #' geom_histogram(bins = 200) #' #' # Rather than stacking histograms, it's easier to compare frequency #' # polygons #' ggplot(diamonds, aes(price, fill = cut)) + #' geom_histogram(binwidth = 500) #' ggplot(diamonds, aes(price, colour = cut)) + #' geom_freqpoly(binwidth = 500) #' #' # To make it easier to compare distributions with very different counts, #' # put density on the y axis instead of the default count #' ggplot(diamonds, aes(price, ..density.., colour = cut)) + #' geom_freqpoly(binwidth = 500) #' #' if (require("ggplot2movies")) { #' # Often we don't want the height of the bar to represent the #' # count of observations, but the sum of some other variable. #' # For example, the following plot shows the number of movies #' # in each rating. #' m <- ggplot(movies, aes(rating)) #' m + geom_histogram(binwidth = 0.1) #' #' # If, however, we want to see the number of votes cast in each #' # category, we need to weight by the votes variable #' m + geom_histogram(aes(weight = votes), binwidth = 0.1) + ylab("votes") #' #' # For transformed scales, binwidth applies to the transformed data. #' # The bins have constant width on the transformed scale. #' m + geom_histogram() + scale_x_log10() #' m + geom_histogram(binwidth = 0.05) + scale_x_log10() #' #' # For transformed coordinate systems, the binwidth applies to the #' # raw data. The bins have constant width on the original scale. #' #' # Using log scales does not work here, because the first #' # bar is anchored at zero, and so when transformed becomes negative #' # infinity. This is not a problem when transforming the scales, because #' # no observations have 0 ratings. #' m + geom_histogram(boundary = 0) + coord_trans(x = "log10") #' # Use boundary = 0, to make sure we don't take sqrt of negative values #' m + geom_histogram(boundary = 0) + coord_trans(x = "sqrt") #' #' # You can also transform the y axis. Remember that the base of the bars #' # has value 0, so log transformations are not appropriate #' m <- ggplot(movies, aes(x = rating)) #' m + geom_histogram(binwidth = 0.5) + scale_y_sqrt() #' } geom_histogram <- function(mapping = NULL, data = NULL, stat = "bin", position = "stack", ..., binwidth = NULL, bins = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomBar, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( binwidth = binwidth, bins = bins, na.rm = na.rm, pad = FALSE, ... ) ) } ggplot2/R/utilities-break.r0000644000177400001440000000744213006416440015510 0ustar murdochusers#' Discretise numeric data into categorical #' #' \code{cut_interval} makes \code{n} groups with equal range, \code{cut_number} #' makes \code{n} groups with (approximately) equal numbers of observations; #' \code{cut_width} makes groups of width \code{width}. #' #' @author Randall Prium contributed most of the implementation of #' \code{cut_width}. #' @param x numeric vector #' @param n number of intervals to create, OR #' @param length length of each interval #' @param ... other arguments passed on to \code{\link{cut}} #' @seealso \code{\link{cut_number}} #' @export #' @examples #' table(cut_interval(1:100, 10)) #' table(cut_interval(1:100, 11)) #' #' table(cut_number(runif(1000), 10)) #' #' table(cut_width(runif(1000), 0.1)) #' table(cut_width(runif(1000), 0.1, boundary = 0)) #' table(cut_width(runif(1000), 0.1, center = 0)) cut_interval <- function(x, n = NULL, length = NULL, ...) { cut(x, breaks(x, "width", n, length), include.lowest = TRUE, ...) } #' @export #' @rdname cut_interval cut_number <- function(x, n = NULL, ...) { brk <- breaks(x, "n", n) if (anyDuplicated(brk)) stop("Insufficient data values to produce ", n, " bins.", call. = FALSE) cut(x, brk , include.lowest = TRUE, ...) } #' @export #' @rdname cut_interval #' @param width The bin width. #' @param center,boundary Specify either the position of edge or the center of #' a bin. Since all bins are aligned, specifying the position of a single bin #' (which doesn't need to be in the range of the data) affects the location of #' all bins. If not specified, uses the "tile layers algorithm", and sets #' the boundary to half of the binwidth. #' #' To center on integers, \code{width = 1} and \code{center = 0}. #' \code{boundary = 0.5}. #' @param closed One of \code{"right"} or \code{"left"} indicating whether right #' or left edges of bins are included in the bin. cut_width <- function(x, width, center = NULL, boundary = NULL, closed = c("right", "left")) { x <- as.numeric(x) width <- as.numeric(width) closed <- match.arg(closed) x_range <- range(x, na.rm = TRUE, finite = TRUE) if (length(x_range) == 0) { return(x) } # Determine boundary if (!is.null(boundary) && !is.null(center)) { stop("Only one of 'boundary' and 'center' may be specified.") } if (is.null(boundary)) { if (is.null(center)) { # If neither edge nor center given, compute both using tile layer's # algorithm. This puts min and max of data in outer half of their bins. boundary <- width / 2 } else { # If center given but not boundary, compute boundary. boundary <- center - width / 2 } } boundary <- as.numeric(boundary) # Determine bins min_x <- find_origin(x_range, width, boundary) # Small correction factor so that we don't get an extra bin when, for # example, origin = 0, max(x) = 20, width = 10. max_x <- max(x, na.rm = TRUE) + (1 - 1e-08) * width breaks <- seq(min_x, max_x, width) cut(x, breaks, include.lowest = TRUE, right = (closed == "right")) } # Find the left side of left-most bin find_origin <- function(x_range, width, boundary) { shift <- floor((x_range[1] - boundary) / width) boundary + shift * width } breaks <- function(x, equal, nbins = NULL, binwidth = NULL) { equal <- match.arg(equal, c("numbers", "width")) if ((!is.null(nbins) && !is.null(binwidth)) || (is.null(nbins) && is.null(binwidth))) { stop("Specify exactly one of n and width") } rng <- range(x, na.rm = TRUE, finite = TRUE) if (equal == "width") { if (!is.null(binwidth)) { fullseq(rng, binwidth) } else { seq(rng[1], rng[2], length.out = nbins + 1) } } else { if (!is.null(binwidth)) { probs <- seq(0, 1, by = binwidth) } else { probs <- seq(0, 1, length.out = nbins + 1) } stats::quantile(x, probs, na.rm = TRUE) } } ggplot2/R/geom-curve.r0000644000177400001440000000335013000166211014446 0ustar murdochusers#' @inheritParams grid::curveGrob #' @export #' @rdname geom_segment geom_curve <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., curvature = 0.5, angle = 90, ncp = 5, arrow = NULL, lineend = "butt", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomCurve, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( arrow = arrow, curvature = curvature, angle = angle, ncp = ncp, lineend = lineend, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @include geom-segment.r #' @format NULL #' @usage NULL #' @export GeomCurve <- ggproto("GeomCurve", GeomSegment, draw_panel = function(data, panel_scales, coord, curvature = 0.5, angle = 90, ncp = 5, arrow = NULL, lineend = "butt", na.rm = FALSE) { if (!coord$is_linear()) { warning("geom_curve is not implemented for non-linear coordinates", call. = FALSE) } trans <- coord$transform(data, panel_scales) curveGrob( trans$x, trans$y, trans$xend, trans$yend, default.units = "native", curvature = curvature, angle = angle, ncp = ncp, square = FALSE, squareShape = 1, inflect = FALSE, open = TRUE, gp = gpar( col = alpha(trans$colour, trans$alpha), lwd = trans$size * .pt, lty = trans$linetype, lineend = lineend), arrow = arrow ) } ) ggplot2/R/geom-point.r0000644000177400001440000001252713031512400014460 0ustar murdochusers#' Points #' #' The point geom is used to create scatterplots. The scatterplot is most #' useful for displaying the relationship between two continuous variables. #' It can be used to compare one continuous and one categorical variable, or #' two categorical variables, but a variation like \code{\link{geom_jitter}}, #' \code{\link{geom_count}}, or \code{\link{geom_bin2d}} is usually more #' appropriate. #' #' The \emph{bubblechart} is a scatterplot with a third variable mapped to #' the size of points. There are no special names for scatterplots where #' another variable is mapped to point shape or colour, however. #' #' @section Overplotting: #' The biggest potential problem with a scatterplot is overplotting: whenever #' you have more than a few points, points may be plotted on top of one #' another. This can severely distort the visual appearance of the plot. #' There is no one solution to this problem, but there are some techniques #' that can help. You can add additional information with #' \code{\link{geom_smooth}}, \code{\link{geom_quantile}} or #' \code{\link{geom_density_2d}}. If you have few unique x values, #' \code{\link{geom_boxplot}} may also be useful. #' #' Alternatively, you can #' summarise the number of points at each location and display that in some #' way, using \code{\link{geom_count}}, \code{\link{geom_hex}}, or #' \code{\link{geom_density2d}}. #' #' Another technique is to make the points transparent (e.g. #' \code{geom_point(alpha = 0.05)}) or very small (e.g. #' \code{geom_point(shape = ".")}). #' #' @section Aesthetics: #' \aesthetics{geom}{point} #' #' @inheritParams layer #' @param na.rm If \code{FALSE}, the default, missing values are removed with #' a warning. If \code{TRUE}, missing values are silently removed. #' @param ... other arguments passed on to \code{\link{layer}}. These are #' often aesthetics, used to set an aesthetic to a fixed value, like #' \code{color = "red"} or \code{size = 3}. They may also be parameters #' to the paired geom/stat. #' @inheritParams layer #' @export #' @examples #' p <- ggplot(mtcars, aes(wt, mpg)) #' p + geom_point() #' #' # Add aesthetic mappings #' p + geom_point(aes(colour = factor(cyl))) #' p + geom_point(aes(shape = factor(cyl))) #' p + geom_point(aes(size = qsec)) #' #' # Change scales #' p + geom_point(aes(colour = cyl)) + scale_colour_gradient(low = "blue") #' p + geom_point(aes(shape = factor(cyl))) + scale_shape(solid = FALSE) #' #' # Set aesthetics to fixed value #' ggplot(mtcars, aes(wt, mpg)) + geom_point(colour = "red", size = 3) #' #' \donttest{ #' # Varying alpha is useful for large datasets #' d <- ggplot(diamonds, aes(carat, price)) #' d + geom_point(alpha = 1/10) #' d + geom_point(alpha = 1/20) #' d + geom_point(alpha = 1/100) #' } #' #' # For shapes that have a border (like 21), you can colour the inside and #' # outside separately. Use the stroke aesthetic to modify the width of the #' # border #' ggplot(mtcars, aes(wt, mpg)) + #' geom_point(shape = 21, colour = "black", fill = "white", size = 5, stroke = 5) #' #' \donttest{ #' # You can create interesting shapes by layering multiple points of #' # different sizes #' p <- ggplot(mtcars, aes(mpg, wt, shape = factor(cyl))) #' p + geom_point(aes(colour = factor(cyl)), size = 4) + #' geom_point(colour = "grey90", size = 1.5) #' p + geom_point(colour = "black", size = 4.5) + #' geom_point(colour = "pink", size = 4) + #' geom_point(aes(shape = factor(cyl))) #' #' # These extra layers don't usually appear in the legend, but we can #' # force their inclusion #' p + geom_point(colour = "black", size = 4.5, show.legend = TRUE) + #' geom_point(colour = "pink", size = 4, show.legend = TRUE) + #' geom_point(aes(shape = factor(cyl))) #' #' # geom_point warns when missing values have been dropped from the data set #' # and not plotted, you can turn this off by setting na.rm = TRUE #' mtcars2 <- transform(mtcars, mpg = ifelse(runif(32) < 0.2, NA, mpg)) #' ggplot(mtcars2, aes(wt, mpg)) + geom_point() #' ggplot(mtcars2, aes(wt, mpg)) + geom_point(na.rm = TRUE) #' } geom_point <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomPoint, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomPoint <- ggproto("GeomPoint", Geom, required_aes = c("x", "y"), non_missing_aes = c("size", "shape", "colour"), default_aes = aes( shape = 19, colour = "black", size = 1.5, fill = NA, alpha = NA, stroke = 0.5 ), draw_panel = function(data, panel_scales, coord, na.rm = FALSE) { coords <- coord$transform(data, panel_scales) ggname("geom_point", pointsGrob( coords$x, coords$y, pch = coords$shape, gp = gpar( col = alpha(coords$colour, coords$alpha), fill = alpha(coords$fill, coords$alpha), # Stroke is added around the outside of the point fontsize = coords$size * .pt + coords$stroke * .stroke / 2, lwd = coords$stroke * .stroke / 2 ) ) ) }, draw_key = draw_key_point ) ggplot2/R/geom-count.r0000644000177400001440000000432513005711642014466 0ustar murdochusers#' Count overlapping points #' #' This is a variant \code{\link{geom_point}} that counts the number of #' observations at each location, then maps the count to point area. It #' useful when you have discrete data and overplotting. #' #' @section Aesthetics: #' \aesthetics{geom}{point} #' #' @param geom,stat Use to override the default connection between #' \code{geom_count} and \code{stat_sum}. #' @seealso For continuous \code{x} and \code{x}, use \code{\link{geom_bin2d}}. #' @inheritParams layer #' @inheritParams geom_point #' @export #' @examples #' ggplot(mpg, aes(cty, hwy)) + #' geom_point() #' #' ggplot(mpg, aes(cty, hwy)) + #' geom_count() #' #' # Best used in conjunction with scale_size_area which ensures that #' # counts of zero would be given size 0. Doesn't make much different #' # here because the smallest count is already close to 0. #' ggplot(mpg, aes(cty, hwy)) + #' geom_count() + #' scale_size_area() #' #' # Display proportions instead of counts ------------------------------------- #' # By default, all categorical variables in the plot form the groups. #' # Specifying geom_count without a group identifier leads to a plot which is #' # not useful: #' d <- ggplot(diamonds, aes(x = cut, y = clarity)) #' d + geom_count(aes(size = ..prop..)) #' # To correct this problem and achieve a more desirable plot, we need #' # to specify which group the proportion is to be calculated over. #' d + geom_count(aes(size = ..prop.., group = 1)) + #' scale_size_area(max_size = 10) #' #' # Or group by x/y variables to have rows/columns sum to 1. #' d + geom_count(aes(size = ..prop.., group = cut)) + #' scale_size_area(max_size = 10) #' d + geom_count(aes(size = ..prop.., group = clarity)) + #' scale_size_area(max_size = 10) geom_count <- function(mapping = NULL, data = NULL, stat = "sum", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomPoint, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } ggplot2/R/guides-axis.r0000644000177400001440000000714512771277527014660 0ustar murdochusers# Grob for axes # # @param position of ticks # @param labels at ticks # @param position of axis (top, bottom, left or right) # @param range of data values guide_axis <- function(at, labels, position = "right", theme) { if (length(at) == 0) return(zeroGrob()) at <- unit(at, "native") position <- match.arg(position, c("top", "bottom", "right", "left")) zero <- unit(0, "npc") one <- unit(1, "npc") label_render <- switch(position, top = "axis.text.x.top", bottom = "axis.text.x", left = "axis.text.y", right = "axis.text.y.right" ) label_x <- switch(position, top = , bottom = at, right = theme$axis.ticks.length, left = one - theme$axis.ticks.length ) label_y <- switch(position, top = theme$axis.ticks.length, bottom = one - theme$axis.ticks.length, right = , left = at ) if (is.list(labels)) { if (any(sapply(labels, is.language))) { labels <- do.call(expression, labels) } else { labels <- unlist(labels) } } labels <- switch(position, top = , bottom = element_render(theme, label_render, labels, x = label_x, expand_y = TRUE), right = , left = element_render(theme, label_render, labels, y = label_y, expand_x = TRUE)) line <- switch(position, top = element_render(theme, "axis.line.x", c(0, 1), c(0, 0), id.lengths = 2), bottom = element_render(theme, "axis.line.x", c(0, 1), c(1, 1), id.lengths = 2), right = element_render(theme, "axis.line.y", c(0, 0), c(0, 1), id.lengths = 2), left = element_render(theme, "axis.line.y", c(1, 1), c(0, 1), id.lengths = 2) ) nticks <- length(at) ticks <- switch(position, top = element_render(theme, "axis.ticks.x", x = rep(at, each = 2), y = rep(unit.c(zero, theme$axis.ticks.length), nticks), id.lengths = rep(2, nticks)), bottom = element_render(theme, "axis.ticks.x", x = rep(at, each = 2), y = rep(unit.c(one - theme$axis.ticks.length, one), nticks), id.lengths = rep(2, nticks)), right = element_render(theme, "axis.ticks.y", x = rep(unit.c(zero, theme$axis.ticks.length), nticks), y = rep(at, each = 2), id.lengths = rep(2, nticks)), left = element_render(theme, "axis.ticks.y", x = rep(unit.c(one - theme$axis.ticks.length, one), nticks), y = rep(at, each = 2), id.lengths = rep(2, nticks)) ) # Create the gtable for the ticks + labels gt <- switch(position, top = gtable_col("axis", grobs = list(labels, ticks), width = one, heights = unit.c(grobHeight(labels), theme$axis.ticks.length) ), bottom = gtable_col("axis", grobs = list(ticks, labels), width = one, heights = unit.c(theme$axis.ticks.length, grobHeight(labels)) ), right = gtable_row("axis", grobs = list(ticks, labels), widths = unit.c(theme$axis.ticks.length, grobWidth(labels)), height = one ), left = gtable_row("axis", grobs = list(labels, ticks), widths = unit.c(grobWidth(labels), theme$axis.ticks.length), height = one ) ) # Viewport for justifying the axis grob justvp <- switch(position, top = viewport(y = 0, just = "bottom", height = gtable_height(gt)), bottom = viewport(y = 1, just = "top", height = gtable_height(gt)), right = viewport(x = 0, just = "left", width = gtable_width(gt)), left = viewport(x = 1, just = "right", width = gtable_width(gt)) ) absoluteGrob( gList(line, gt), width = gtable_width(gt), height = gtable_height(gt), vp = justvp ) } ggplot2/R/position-jitterdodge.R0000644000177400001440000000456313005735103016521 0ustar murdochusers#' Simultaneously dodge and jitter #' #' This is primarily used for aligning points generated through #' \code{geom_point()} with dodged boxplots (e.g., a \code{geom_boxplot()} with #' a fill aesthetic supplied). #' #' @family position adjustments #' @param jitter.width degree of jitter in x direction. Defaults to 40\% of the #' resolution of the data. #' @param jitter.height degree of jitter in y direction. Defaults to 0. #' @param dodge.width the amount to dodge in the x direction. Defaults to 0.75, #' the default \code{position_dodge()} width. #' @export #' @examples #' dsub <- diamonds[ sample(nrow(diamonds), 1000), ] #' ggplot(dsub, aes(x = cut, y = carat, fill = clarity)) + #' geom_boxplot(outlier.size = 0) + #' geom_point(pch = 21, position = position_jitterdodge()) position_jitterdodge <- function(jitter.width = NULL, jitter.height = 0, dodge.width = 0.75) { ggproto(NULL, PositionJitterdodge, jitter.width = jitter.width, jitter.height = jitter.height, dodge.width = dodge.width ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionJitterdodge <- ggproto("PositionJitterdodge", Position, jitter.width = NULL, jitter.height = NULL, dodge.width = NULL, required_aes = c("x", "y"), setup_params = function(self, data) { width <- self$jitter.width %||% (resolution(data$x, zero = FALSE) * 0.4) # Adjust the x transformation based on the number of 'dodge' variables dodgecols <- intersect(c("fill", "colour", "linetype", "shape", "size", "alpha"), colnames(data)) if (length(dodgecols) == 0) { stop("`position_jitterdodge()` requires at least one aesthetic to dodge by", call. = FALSE) } ndodge <- lapply(data[dodgecols], levels) # returns NULL for numeric, i.e. non-dodge layers ndodge <- length(unique(unlist(ndodge))) list( dodge.width = self$dodge.width, jitter.height = self$jitter.height, jitter.width = width / (ndodge + 2) ) }, compute_panel = function(data, params, scales) { data <- collide(data, params$dodge.width, "position_jitterdodge", pos_dodge, check.width = FALSE) # then jitter transform_position(data, if (params$jitter.width > 0) function(x) jitter(x, amount = params$jitter.width), if (params$jitter.height > 0) function(x) jitter(x, amount = params$jitter.height) ) } ) ggplot2/R/hexbin.R0000644000177400001440000000200112746502341013620 0ustar murdochusershex_binwidth <- function(bins = 30, scales) { c( diff(scales$x$dimension()) / bins, diff(scales$y$dimension()) / bins ) } hex_bounds <- function(x, binwidth) { c( plyr::round_any(min(x), binwidth, floor) - 1e-6, plyr::round_any(max(x), binwidth, ceiling) + 1e-6 ) } hexBinSummarise <- function(x, y, z, binwidth, fun = mean, fun.args = list(), drop = TRUE) { if (length(binwidth) == 1) { binwidth <- rep(binwidth, 2) } # Convert binwidths into bounds + nbins xbnds <- hex_bounds(x, binwidth[1]) xbins <- diff(xbnds) / binwidth[1] ybnds <- hex_bounds(y, binwidth[2]) ybins <- diff(ybnds) / binwidth[2] # Call hexbin hb <- hexbin::hexbin( x, xbnds = xbnds, xbins = xbins, y, ybnds = ybnds, shape = ybins / xbins, IDs = TRUE ) value <- do.call(tapply, c(list(quote(z), quote(hb@cID), quote(fun)), fun.args)) # Convert to data frame out <- as.data.frame(hexbin::hcell2xy(hb)) out$value <- as.vector(value) if (drop) out <- stats::na.omit(out) out } ggplot2/R/stat-summary-bin.R0000644000177400001440000000513212654714051015570 0ustar murdochusers#' @rdname stat_summary #' @inheritParams stat_bin #' @export stat_summary_bin <- function(mapping = NULL, data = NULL, geom = "pointrange", position = "identity", ..., fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatSummaryBin, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( fun.data = fun.data, fun.y = fun.y, fun.ymax = fun.ymax, fun.ymin = fun.ymin, fun.args = fun.args, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSummaryBin <- ggproto("StatSummaryBin", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), bins = 30, binwidth = NULL, origin = NULL, right = FALSE, na.rm = FALSE) { fun <- make_summary_fun(fun.data, fun.y, fun.ymax, fun.ymin, fun.args) breaks <- bin2d_breaks(scales$x, NULL, origin, binwidth, bins, right = right) data$bin <- cut(data$x, breaks, include.lowest = TRUE, labels = FALSE) out <- plyr::ddply(data, "bin", fun) locs <- bin_loc(breaks, out$bin) out$x <- locs$mid out$width <- if (scales$x$is_discrete()) 0.9 else locs$length out } ) make_summary_fun <- function(fun.data, fun.y, fun.ymax, fun.ymin, fun.args) { if (!is.null(fun.data)) { # Function that takes complete data frame as input fun.data <- match.fun(fun.data) function(df) { do.call(fun.data, c(list(quote(df$y)), fun.args)) } } else if (!is.null(fun.y) || !is.null(fun.ymax) || !is.null(fun.ymin)) { # Three functions that take vectors as inputs call_f <- function(fun, x) { if (is.null(fun)) return(NA_real_) do.call(fun, c(list(quote(x)), fun.args)) } function(df, ...) { data.frame( ymin = call_f(fun.ymin, df$y), y = call_f(fun.y, df$y), ymax = call_f(fun.ymax, df$y) ) } } else { message("No summary function supplied, defaulting to `mean_se()") function(df) { mean_se(df$y) } } } ggplot2/R/stat-density-2d.r0000644000177400001440000000405012651702366015350 0ustar murdochusers#' @export #' @rdname geom_density_2d #' @param contour If \code{TRUE}, contour the results of the 2d density #' estimation #' @param n number of grid points in each direction #' @param h Bandwidth (vector of length two). If \code{NULL}, estimated #' using \code{\link[MASS]{bandwidth.nrd}}. #' @section Computed variables: #' Same as \code{\link{stat_contour}} stat_density_2d <- function(mapping = NULL, data = NULL, geom = "density_2d", position = "identity", ..., contour = TRUE, n = 100, h = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatDensity2d, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, contour = contour, n = n, h = h, ... ) ) } #' @export #' @rdname geom_density_2d #' @usage NULL stat_density2d <- stat_density_2d #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatDensity2d <- ggproto("StatDensity2d", Stat, default_aes = aes(colour = "#3366FF", size = 0.5), required_aes = c("x", "y"), compute_group = function(data, scales, na.rm = FALSE, h = NULL, contour = TRUE, n = 100, bins = NULL, binwidth = NULL) { if (is.null(h)) { h <- c(MASS::bandwidth.nrd(data$x), MASS::bandwidth.nrd(data$y)) } dens <- MASS::kde2d( data$x, data$y, h = h, n = n, lims = c(scales$x$dimension(), scales$y$dimension()) ) df <- data.frame(expand.grid(x = dens$x, y = dens$y), z = as.vector(dens$z)) df$group <- data$group[1] if (contour) { StatContour$compute_panel(df, scales, bins, binwidth) } else { names(df) <- c("x", "y", "density", "group") df$level <- 1 df$piece <- 1 df } } ) ggplot2/R/aes-colour-fill-alpha.r0000644000177400001440000000353112620175053016471 0ustar murdochusers#' Colour related aesthetics: colour, fill and alpha #' #' This page demonstrates the usage of a sub-group #' of aesthetics; colour, fill and alpha. #' #' @name aes_colour_fill_alpha #' @aliases colour color fill #' @examples #' \donttest{ #' #' # Bar chart example #' c <- ggplot(mtcars, aes(factor(cyl))) #' # Default plotting #' c + geom_bar() #' # To change the interior colouring use fill aesthetic #' c + geom_bar(fill = "red") #' # Compare with the colour aesthetic which changes just the bar outline #' c + geom_bar(colour = "red") #' # Combining both, you can see the changes more clearly #' c + geom_bar(fill = "white", colour = "red") #' #' # The aesthetic fill also takes different colouring scales #' # setting fill equal to a factor variable uses a discrete colour scale #' k <- ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) #' k + geom_bar() #' #' # Fill aesthetic can also be used with a continuous variable #' m <- ggplot(faithfuld, aes(waiting, eruptions)) #' m + geom_raster() #' m + geom_raster(aes(fill = density)) #' #' # Some geoms don't use both aesthetics (i.e. geom_point or geom_line) #' b <- ggplot(economics, aes(x = date, y = unemploy)) #' b + geom_line() #' b + geom_line(colour = "green") #' b + geom_point() #' b + geom_point(colour = "red") #' #' # For large datasets with overplotting the alpha #' # aesthetic will make the points more transparent #' df <- data.frame(x = rnorm(5000), y = rnorm(5000)) #' h <- ggplot(df, aes(x,y)) #' h + geom_point() #' h + geom_point(alpha = 0.5) #' h + geom_point(alpha = 1/10) #' #' # Alpha can also be used to add shading #' j <- b + geom_line() #' j #' yrng <- range(economics$unemploy) #' j <- j + geom_rect(aes(NULL, NULL, xmin = start, xmax = end, fill = party), #' ymin = yrng[1], ymax = yrng[2], data = presidential) #' j #' j + scale_fill_manual(values = alpha(c("blue", "red"), .3)) #' } NULL ggplot2/R/annotation-raster.r0000644000177400001440000000545313006175524016070 0ustar murdochusers#' @include geom-.r #' @include geom-raster.r NULL #' Annotation: high-performance rectangular tiling #' #' This is a special version of \code{\link{geom_raster}} optimised for static #' annotations that are the same in every panel. These annotations will not #' affect scales (i.e. the x and y axes will not grow to cover the range #' of the raster, and the raster must already have its own colours). This #' is useful for adding bitmap images. #' #' @param raster raster object to display #' @param xmin,xmax x location (in data coordinates) giving horizontal #' location of raster #' @param ymin,ymax y location (in data coordinates) giving vertical #' location of raster #' @param interpolate If \code{TRUE} interpolate linearly, if \code{FALSE} #' (the default) don't interpolate. #' @export #' @examples #' # Generate data #' rainbow <- matrix(hcl(seq(0, 360, length.out = 50 * 50), 80, 70), nrow = 50) #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point() + #' annotation_raster(rainbow, 15, 20, 3, 4) #' # To fill up whole plot #' ggplot(mtcars, aes(mpg, wt)) + #' annotation_raster(rainbow, -Inf, Inf, -Inf, Inf) + #' geom_point() #' #' rainbow2 <- matrix(hcl(seq(0, 360, length.out = 10), 80, 70), nrow = 1) #' ggplot(mtcars, aes(mpg, wt)) + #' annotation_raster(rainbow2, -Inf, Inf, -Inf, Inf) + #' geom_point() #' rainbow2 <- matrix(hcl(seq(0, 360, length.out = 10), 80, 70), nrow = 1) #' ggplot(mtcars, aes(mpg, wt)) + #' annotation_raster(rainbow2, -Inf, Inf, -Inf, Inf, interpolate = TRUE) + #' geom_point() annotation_raster <- function(raster, xmin, xmax, ymin, ymax, interpolate = FALSE) { raster <- grDevices::as.raster(raster) layer( data = dummy_data(), mapping = NULL, stat = StatIdentity, position = PositionIdentity, geom = GeomRasterAnn, inherit.aes = FALSE, params = list( raster = raster, xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, interpolate = interpolate ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomRasterAnn <- ggproto("GeomRasterAnn", Geom, extra_params = "", handle_na = function(data, params) { data }, draw_panel = function(data, panel_scales, coord, raster, xmin, xmax, ymin, ymax, interpolate = FALSE) { if (!inherits(coord, "CoordCartesian")) { stop("annotation_raster only works with Cartesian coordinates", call. = FALSE) } corners <- data.frame(x = c(xmin, xmax), y = c(ymin, ymax)) data <- coord$transform(corners, panel_scales) x_rng <- range(data$x, na.rm = TRUE) y_rng <- range(data$y, na.rm = TRUE) rasterGrob(raster, x_rng[1], y_rng[1], diff(x_rng), diff(y_rng), default.units = "native", just = c("left","bottom"), interpolate = interpolate) } ) ggplot2/R/utilities-grid.r0000644000177400001440000000133612651671624015361 0ustar murdochusers#' @export grid::unit #' @export grid::arrow # Name ggplot grid object # Convenience function to name grid objects # # @keyword internal ggname <- function(prefix, grob) { grob$name <- grobName(grob, prefix) grob } width_cm <- function(x) { if (is.grob(x)) { convertWidth(grobWidth(x), "cm", TRUE) } else if (is.unit(x)) { convertWidth(x, "cm", TRUE) } else if (is.list(x)) { vapply(x, width_cm, numeric(1)) } else { stop("Unknown input") } } height_cm <- function(x) { if (is.grob(x)) { convertWidth(grobHeight(x), "cm", TRUE) } else if (is.unit(x)) { convertHeight(x, "cm", TRUE) } else if (is.list(x)) { vapply(x, height_cm, numeric(1)) } else { stop("Unknown input") } } ggplot2/R/scale-.r0000644000177400001440000005257713004712457013575 0ustar murdochusers#' @section Scales: #' #' All \code{scale_*} functions (like \code{scale_x_continuous}) return a #' \code{Scale*} object (like \code{ScaleContinuous}). The \code{Scale*} #' object represents a single scale. #' #' Each of the \code{Scale*} objects is a \code{\link{ggproto}} object, #' descended from the top-level \code{Scale}. #' #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export Scale <- ggproto("Scale", NULL, call = NULL, aesthetics = aes(), scale_name = NULL, palette = function() { stop("Not implemented", call. = FALSE) }, range = ggproto(NULL, Range), limits = NULL, na.value = NA, expand = waiver(), name = waiver(), breaks = waiver(), labels = waiver(), guide = "legend", position = "left", is_discrete = function() { stop("Not implemented", call. = FALSE) }, # Train scale from a data frame. # # @return updated range (invisibly) # @seealso \code{\link{scale_train}} for scale specific generic method train_df = function(self, df) { if (empty(df)) return() aesthetics <- intersect(self$aesthetics, names(df)) for (aesthetic in aesthetics) { self$train(df[[aesthetic]]) } invisible() }, # Train an individual scale from a vector of data. train = function(self, x) { stop("Not implemented", call. = FALSE) }, # Reset scale, untraining ranges reset = function(self) { self$range$reset() }, is_empty = function(self) { is.null(self$range$range) && is.null(self$limits) }, # @return list of transformed variables transform_df = function(self, df) { if (empty(df)) return() aesthetics <- intersect(self$aesthetics, names(df)) if (length(aesthetics) == 0) return() lapply(df[aesthetics], self$transform) }, transform = function(self, x) { stop("Not implemented", call. = FALSE) }, # @return list of mapped variables map_df = function(self, df, i = NULL) { if (empty(df)) return() aesthetics <- intersect(self$aesthetics, names(df)) names(aesthetics) <- aesthetics if (length(aesthetics) == 0) return() if (is.null(i)) { lapply(aesthetics, function(j) self$map(df[[j]])) } else { lapply(aesthetics, function(j) self$map(df[[j]][i])) } }, # @kohske # map tentatively accept limits argument. # map replaces oob (i.e., outside limits) values with NA. # # Previously limits are always scale_limits(scale). # But if this function is called to get breaks, # and breaks spans oob, the oob breaks is replaces by NA. # This makes impossible to display oob breaks. # Now coord_train calls this function with limits determined by coord (with expansion). map = function(self, x, limits = self$get_limits()) { stop("Not implemented", call. = FALSE) }, # if scale contains a NULL, use the default scale range # if scale contains a NA, use the default range for that axis, otherwise # use the user defined limit for that axis get_limits = function(self) { if (self$is_empty()) return(c(0, 1)) if (!is.null(self$limits)) { ifelse(!is.na(self$limits), self$limits, self$range$range) } else { self$range$range } }, # The physical size of the scale. # This always returns a numeric vector of length 2, giving the physical # dimensions of a scale. dimension = function(self, expand = c(0, 0)) { stop("Not implemented", call. = FALSE) }, get_breaks = function(self, limits = self$get_limits()) { stop("Not implemented", call. = FALSE) }, # The numeric position of scale breaks, used by coord/guide break_positions = function(self, range = self$get_limits()) { self$map(self$get_breaks(range)) }, get_breaks_minor = function(self, n = 2, b = self$break_positions(), limits = self$get_limits()) { stop("Not implemented", call. = FALSE) }, get_labels = function(self, breaks = self$get_breaks()) { stop("Not implemented", call. = FALSE) }, # Each implementation of a Scale must implement a clone method that makes # copies of reference objecsts. clone = function(self) { stop("Not implemented", call. = FALSE) }, break_info = function(self, range = NULL) { stop("Not implemented", call. = FALSE) }, # Only relevant for positional scales axis_order = function(self) { ord <- c("primary", "secondary") if (self$position %in% c("right", "bottom")) { ord <- rev(ord) } ord }, # Here to make it possible for scales to modify the default titles make_title = function(title) { title }, make_sec_title = function(title) { title } ) check_breaks_labels <- function(breaks, labels) { if (is.null(breaks)) return(TRUE) if (is.null(labels)) return(TRUE) bad_labels <- is.atomic(breaks) && is.atomic(labels) && length(breaks) != length(labels) if (bad_labels) { stop("`breaks` and `labels` must have the same length", call. = FALSE) } TRUE } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleContinuous <- ggproto("ScaleContinuous", Scale, range = continuous_range(), na.value = NA_real_, rescaler = rescale, # Used by diverging and n colour gradients x oob = censor, minor_breaks = waiver(), is_discrete = function() FALSE, train = function(self, x) { if (length(x) == 0) return() self$range$train(x) }, transform = function(self, x) { new_x <- self$trans$transform(x) if (any(is.finite(x) != is.finite(new_x))) { type <- if (self$scale_name == "position_c") "continuous" else "discrete" axis <- if ("x" %in% self$aesthetics) "x" else "y" warning("Transformation introduced infinite values in ", type, " ", axis, "-axis", call. = FALSE) } new_x }, map = function(self, x, limits = self$get_limits()) { x <- self$oob(self$rescaler(x, from = limits)) uniq <- unique(x) pal <- self$palette(uniq) scaled <- pal[match(x, uniq)] ifelse(!is.na(scaled), scaled, self$na.value) }, dimension = function(self, expand = c(0, 0)) { expand_range(self$get_limits(), expand[1], expand[2]) }, get_breaks = function(self, limits = self$get_limits()) { if (self$is_empty()) return(numeric()) # Limits in transformed space need to be converted back to data space limits <- self$trans$inverse(limits) if (is.null(self$breaks)) { return(NULL) } else if (identical(self$breaks, NA)) { stop("Invalid breaks specification. Use NULL, not NA") } else if (zero_range(as.numeric(limits))) { breaks <- limits[1] } else if (is.waive(self$breaks)) { breaks <- self$trans$breaks(limits) } else if (is.function(self$breaks)) { breaks <- self$breaks(limits) } else { breaks <- self$breaks } # Breaks in data space need to be converted back to transformed space # And any breaks outside the dimensions need to be flagged as missing # # @kohske # TODO: replace NA with something else for flag. # guides cannot discriminate oob from missing value. breaks <- censor(self$trans$transform(breaks), self$trans$transform(limits), only.finite = FALSE) breaks }, get_breaks_minor = function(self, n = 2, b = self$break_positions(), limits = self$get_limits()) { if (zero_range(as.numeric(limits))) { return() } if (is.null(self$minor_breaks)) { return(NULL) } else if (identical(self$minor_breaks, NA)) { stop("Invalid minor_breaks specification. Use NULL, not NA", call. = FALSE) } else if (is.waive(self$minor_breaks)) { if (is.null(b)) { breaks <- NULL } else { b <- b[!is.na(b)] if (length(b) < 2) return() bd <- diff(b)[1] if (min(limits) < min(b)) b <- c(b[1] - bd, b) if (max(limits) > max(b)) b <- c(b, b[length(b)] + bd) breaks <- unique(unlist(mapply(seq, b[-length(b)], b[-1], length.out = n + 1, SIMPLIFY = FALSE))) } } else if (is.function(self$minor_breaks)) { # Find breaks in data space, and convert to numeric breaks <- self$minor_breaks(self$trans$inverse(limits)) breaks <- self$trans$transform(breaks) } else { breaks <- self$trans$transform(self$minor_breaks) } # Any minor breaks outside the dimensions need to be thrown away discard(breaks, limits) }, get_labels = function(self, breaks = self$get_breaks()) { if (is.null(breaks)) return(NULL) breaks <- self$trans$inverse(breaks) if (is.null(self$labels)) { return(NULL) } else if (identical(self$labels, NA)) { stop("Invalid labels specification. Use NULL, not NA", call. = FALSE) } else if (is.waive(self$labels)) { labels <- self$trans$format(breaks) } else if (is.function(self$labels)) { labels <- self$labels(breaks) } else { labels <- self$labels } if (length(labels) != length(breaks)) { stop("Breaks and labels are different lengths") } labels }, clone = function(self) { new <- ggproto(NULL, self) new$range <- continuous_range() new }, break_info = function(self, range = NULL) { # range if (is.null(range)) range <- self$dimension() # major breaks major <- self$get_breaks(range) # labels labels <- self$get_labels(major) # drop oob breaks/labels by testing major == NA if (!is.null(labels)) labels <- labels[!is.na(major)] if (!is.null(major)) major <- major[!is.na(major)] # minor breaks minor <- self$get_breaks_minor(b = major, limits = range) if (!is.null(minor)) minor <- minor[!is.na(minor)] # rescale breaks [0, 1], which are used by coord/guide major_n <- rescale(major, from = range) minor_n <- rescale(minor, from = range) list(range = range, labels = labels, major = major_n, minor = minor_n, major_source = major, minor_source = minor) }, print = function(self, ...) { show_range <- function(x) paste0(formatC(x, digits = 3), collapse = " -- ") cat("<", class(self)[[1]], ">\n", sep = "") cat(" Range: ", show_range(self$range$range), "\n", sep = "") cat(" Limits: ", show_range(self$dimension()), "\n", sep = "") } ) #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleDiscrete <- ggproto("ScaleDiscrete", Scale, drop = TRUE, na.value = NA, n.breaks.cache = NULL, palette.cache = NULL, is_discrete = function() TRUE, train = function(self, x) { if (length(x) == 0) return() self$range$train(x, drop = self$drop, na.rm = !self$na.translate) }, transform = function(x) { x }, map = function(self, x, limits = self$get_limits()) { n <- sum(!is.na(limits)) if (!is.null(self$n.breaks.cache) && self$n.breaks.cache == n) { pal <- self$palette.cache } else { if (!is.null(self$n.breaks.cache)) warning("Cached palette does not match requested", call. = FALSE) pal <- self$palette(n) self$palette.cache <- pal self$n.breaks.cache <- n } if (is.null(names(pal))) { pal_match <- pal[match(as.character(x), limits)] } else { pal_match <- pal[match(as.character(x), names(pal))] pal_match <- unname(pal_match) } if (self$na.translate) { ifelse(is.na(x) | is.na(pal_match), self$na.value, pal_match) } else { pal_match } }, dimension = function(self, expand = c(0, 0)) { expand_range(length(self$get_limits()), expand[1], expand[2]) }, get_breaks = function(self, limits = self$get_limits()) { if (self$is_empty()) return(numeric()) if (is.null(self$breaks)) { return(NULL) } else if (identical(self$breaks, NA)) { stop("Invalid breaks specification. Use NULL, not NA", call. = FALSE) } else if (is.waive(self$breaks)) { breaks <- limits } else if (is.function(self$breaks)) { breaks <- self$breaks(limits) } else { breaks <- self$breaks } # Breaks can only occur only on values in domain in_domain <- intersect(breaks, self$get_limits()) structure(in_domain, pos = match(in_domain, breaks)) }, get_breaks_minor = function(...) NULL, get_labels = function(self, breaks = self$get_breaks()) { if (self$is_empty()) return(character()) if (is.null(breaks)) return(NULL) if (is.null(self$labels)) { return(NULL) } else if (identical(self$labels, NA)) { stop("Invalid labels specification. Use NULL, not NA", call. = FALSE) } else if (is.waive(self$labels)) { breaks <- self$get_breaks() if (is.numeric(breaks)) { # Only format numbers, because on Windows, format messes up encoding format(breaks, justify = "none") } else { as.character(breaks) } } else if (is.function(self$labels)) { self$labels(breaks) } else { if (!is.null(names(self$labels))) { # If labels have names, use them to match with breaks labels <- breaks map <- match(names(self$labels), labels, nomatch = 0) labels[map] <- self$labels[map != 0] labels } else { labels <- self$labels # Need to ensure that if breaks were dropped, corresponding labels are too pos <- attr(breaks, "pos") if (!is.null(pos)) { labels <- labels[pos] } labels } } }, clone = function(self) { new <- ggproto(NULL, self) new$range <- discrete_range() new }, break_info = function(self, range = NULL) { # for discrete, limits != range limits <- self$get_limits() major <- self$get_breaks(limits) if (is.null(major)) { labels <- major_n <- NULL } else { labels <- self$get_labels(major) major <- self$map(major) major <- major[!is.na(major)] # rescale breaks [0, 1], which are used by coord/guide major_n <- rescale(major, from = range) } list(range = range, labels = labels, major = major_n, minor = NULL, major_source = major, minor_source = NULL) } ) #' Continuous scale constructor. #' #' @export #' @inheritParams discrete_scale #' @param name The name of the scale. Used as axis or legend title. If #' \code{NULL}, the default, the name of the scale is taken from the first #' mapping used for that aesthetic. #' @param breaks One of: \itemize{ #' \item \code{NULL} for no breaks #' \item \code{waiver()} for the default breaks computed by the #' transformation object #' \item A numeric vector of positions #' \item A function that takes the limits as input and returns breaks #' as output #' } #' @param minor_breaks One of: \itemize{ #' \item \code{NULL} for no minor breaks #' \item \code{waiver()} for the default breaks (one minor break between #' each major break) #' \item A numeric vector of positions #' \item A function that given the limits returns a vector of minor breaks. #' } #' @param labels One of: \itemize{ #' \item \code{NULL} for no labels #' \item \code{waiver()} for the default labels computed by the #' transformation object #' \item A character vector giving labels (must be same length as \code{breaks}) #' \item A function that takes the breaks as input and returns labels #' as output #' } #' @param limits A numeric vector of length two providing limits of the scale. #' Use \code{NA} to refer to the existing minimum or maximum. #' @param rescaler Used by diverging and n colour gradients #' (i.e. \code{\link{scale_colour_gradient2}}, \code{\link{scale_colour_gradientn}}). #' A function used to scale the input values to the range [0, 1]. #' @param oob Function that handles limits outside of the scale limits #' (out of bounds). The default replaces out of bounds values with NA. #' @param na.value Missing values will be replaced with this value. #' @param trans Either the name of a transformation object, or the #' object itself. Built-in transformations include "asn", "atanh", #' "boxcox", "exp", "identity", "log", "log10", "log1p", "log2", #' "logit", "probability", "probit", "reciprocal", "reverse" and "sqrt". #' #' A transformation object bundles together a transform, it's inverse, #' and methods for generating breaks and labels. Transformation objects #' are defined in the scales package, and are called \code{name_trans}, e.g. #' \code{\link[scales]{boxcox_trans}}. You can create your own #' transformation with \code{\link[scales]{trans_new}}. #' @param expand A numeric vector of length two giving multiplicative and #' additive expansion constants. These constants ensure that the data is #' placed some distance away from the axes. The defaults are #' \code{c(0.05, 0)} for continuous variables, and \code{c(0, 0.6)} for #' discrete variables. #' @param guide Name of guide object, or object itself. #' @param position The position of the axis. "left" or "right" for vertical #' scales, "top" or "bottom" for horizontal scales #' @param super The super class to use for the constructed scale #' @keywords internal continuous_scale <- function(aesthetics, scale_name, palette, name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, rescaler = rescale, oob = censor, expand = waiver(), na.value = NA_real_, trans = "identity", guide = "legend", position = "left", super = ScaleContinuous) { check_breaks_labels(breaks, labels) position <- match.arg(position, c("left", "right", "top", "bottom")) if (is.null(breaks) && !is_position_aes(aesthetics) && guide != "none") { guide <- "none" } trans <- as.trans(trans) if (!is.null(limits)) { limits <- trans$transform(limits) } ggproto(NULL, super, call = match.call(), aesthetics = aesthetics, scale_name = scale_name, palette = palette, range = continuous_range(), limits = limits, trans = trans, na.value = na.value, expand = expand, rescaler = rescaler, # Used by diverging and n colour gradients oob = oob, name = name, breaks = breaks, minor_breaks = minor_breaks, labels = labels, guide = guide, position = position ) } #' Discrete scale constructor. #' #' @export #' @param aesthetics the names of the aesthetics that this scale works with #' @param scale_name the name of the scale #' @param palette a palette function that when called with a single integer #' argument (the number of levels in the scale) returns the values that #' they should take #' @param name the name of the scale - used as the axis label or the legend #' title #' @param drop Should unused factor levels be omitted from the scale? #' The default, \code{TRUE}, uses the levels that appear in the data; #' \code{FALSE} uses all the levels in the factor. #' @param breaks control the breaks in the guide. There are four possible #' types of input: #' \itemize{ #' \item \code{NULL}: don't display any breaks #' \item a character vector giving the breaks as they should appear on the #' axis or in the legend. #' \item \code{waiver()} to use the default break computation. #' \item a function, that when called with a single argument, a character #' vector giving the limits of the scale, returns a character vector #' specifying which breaks to display. #' } #' This parameter does not affect in any way how the data is scaled - it #' only affects the appearance of the legend. #' @param limits A character vector specifying the data range for the scale. # The limits control what levels are displayed in the plot, their order, #' and the default order of their display in guides. #' @param labels \code{NULL} for no labels, \code{waiver()} for default #' labels (labels the same as breaks), a character vector the same length #' as breaks, or a named character vector whose names are used to match #' replacement the labels for matching breaks. #' @param expand a numeric vector of length two, giving a multiplicative and #' additive constant used to expand the range of the scales so that there #' is a small gap between the data and the axes. The defaults are (0,0.6) #' for discrete scales and (0.05,0) for continuous scales. #' @param na.translate Unlike continuous scales, discrete scales can easily show #' missing values, and do so by default. If you want to remove missing values #' from a discrete scale, specify \code{na.translate = FALSE}. #' @param na.value If \code{na.translate = TRUE}, what value aesthetic #' value should missing be displayed as? Does not apply to position scales #' where \code{NA} is always placed at the far right. #' @param guide the name of, or actual function, used to create the #' guide. See \code{\link{guides}} for more info. #' @param position The position of the axis. "left" or "right" for vertical #' scales, "top" or "bottom" for horizontal scales #' @param super The super class to use for the constructed scale #' @keywords internal discrete_scale <- function(aesthetics, scale_name, palette, name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), na.translate = TRUE, na.value = NA, drop = TRUE, guide = "legend", position = "left", super = ScaleDiscrete) { check_breaks_labels(breaks, labels) position <- match.arg(position, c("left", "right", "top", "bottom")) if (is.null(breaks) && !is_position_aes(aesthetics) && guide != "none") { guide <- "none" } ggproto(NULL, super, call = match.call(), aesthetics = aesthetics, scale_name = scale_name, palette = palette, range = discrete_range(), limits = limits, na.value = na.value, na.translate = na.translate, expand = expand, name = name, breaks = breaks, labels = labels, drop = drop, guide = guide, position = position ) } ggplot2/R/save.r0000644000177400001440000001073113005676535013360 0ustar murdochusers#' Save a ggplot (or other grid object) with sensible defaults #' #' \code{ggsave()} is a convenient function for saving a plot. It defaults to #' saving the last plot that you displayed, using the size of the current #' graphics device. It also guesses the type of graphics device from the #' extension. #' #' @param filename File name to create on disk. #' @param plot Plot to save, defaults to last plot displayed. #' @param device Device to use. Can be either be a device function #' (e.g. \code{\link{png}}), or one of "eps", "ps", "tex" (pictex), #' "pdf", "jpeg", "tiff", "png", "bmp", "svg" or "wmf" (windows only). #' @param path Path to save plot to (combined with filename). #' @param scale Multiplicative scaling factor. #' @param width,height,units Plot size in \code{units} ("in", "cm", or "mm"). #' If not supplied, uses the size of current graphics device. #' @param dpi Plot resolution. Applies only to raster output types. #' @param limitsize When \code{TRUE} (the default), \code{ggsave} will not #' save images larger than 50x50 inches, to prevent the common error of #' specifying dimensions in pixels. #' @param ... Other arguments passed on to graphics \code{device}. #' @export #' @examples #' \dontrun{ #' ggplot(mtcars, aes(mpg, wt)) + geom_point() #' #' ggsave("mtcars.pdf") #' ggsave("mtcars.png") #' #' ggsave("mtcars.pdf", width = 4, height = 4) #' ggsave("mtcars.pdf", width = 20, height = 20, units = "cm") #' #' unlink("mtcars.pdf") #' unlink("mtcars.png") #' #' # specify device when saving to a file with unknown extension #' # (for example a server supplied temporary file) #' file <- tempfile() #' ggsave(file, device = "pdf") #' unlink(file) #' } ggsave <- function(filename, plot = last_plot(), device = NULL, path = NULL, scale = 1, width = NA, height = NA, units = c("in", "cm", "mm"), dpi = 300, limitsize = TRUE, ...) { dev <- plot_dev(device, filename, dpi = dpi) dim <- plot_dim(c(width, height), scale = scale, units = units, limitsize = limitsize) if (!is.null(path)) { filename <- file.path(path, filename) } dev(file = filename, width = dim[1], height = dim[2], ...) on.exit(utils::capture.output(grDevices::dev.off())) grid.draw(plot) invisible() } plot_dim <- function(dim = c(NA, NA), scale = 1, units = c("in", "cm", "mm"), limitsize = TRUE) { units <- match.arg(units) to_inches <- function(x) x / c(`in` = 1, cm = 2.54, mm = 2.54 * 10)[units] from_inches <- function(x) x * c(`in` = 1, cm = 2.54, mm = 2.54 * 10)[units] dim <- to_inches(dim) * scale if (any(is.na(dim))) { if (length(grDevices::dev.list()) == 0) { default_dim <- c(7, 7) } else { default_dim <- grDevices::dev.size() * scale } dim[is.na(dim)] <- default_dim[is.na(dim)] dim_f <- prettyNum(from_inches(dim), digits = 3) message("Saving ", dim_f[1], " x ", dim_f[2], " ", units, " image") } if (limitsize && any(dim >= 50)) { stop("Dimensions exceed 50 inches (height and width are specified in '", units, "' not pixels). If you're sure you want a plot that big, use ", "`limitsize = FALSE`.", call. = FALSE) } dim } plot_dev <- function(device, filename, dpi = 300) { if (is.function(device)) return(device) eps <- function(...) { grDevices::postscript(..., onefile = FALSE, horizontal = FALSE, paper = "special") } devices <- list( eps = eps, ps = eps, tex = function(...) grDevices::pictex(...), pdf = function(..., version = "1.4") grDevices::pdf(..., version = version), svg = function(...) svglite::svglite(...), emf = function(...) grDevices::win.metafile(...), wmf = function(...) grDevices::win.metafile(...), png = function(...) grDevices::png(..., res = dpi, units = "in"), jpg = function(...) grDevices::jpeg(..., res = dpi, units = "in"), jpeg = function(...) grDevices::jpeg(..., res = dpi, units = "in"), bmp = function(...) grDevices::bmp(..., res = dpi, units = "in"), tiff = function(...) grDevices::tiff(..., res = dpi, units = "in") ) if (is.null(device)) { device <- tolower(tools::file_ext(filename)) } if (!is.character(device) || length(device) != 1) { stop("`device` must be NULL, a string or a function.", call. = FALSE) } dev <- devices[[device]] if (is.null(dev)) { stop("Unknown graphics device '", device, "'", call. = FALSE) } dev } #' @export grid.draw.ggplot <- function(x, recording = TRUE) { print(x) } ggplot2/R/summary.r0000644000177400001440000000212412567364544014122 0ustar murdochusers#' Displays a useful description of a ggplot object #' #' @param object ggplot2 object to summarise #' @param ... other arguments ignored (for compatibility with generic) #' @keywords internal #' @method summary ggplot #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + #' geom_point() #' summary(p) summary.ggplot <- function(object, ...) { wrap <- function(x) paste( paste(strwrap(x, exdent = 2), collapse = "\n"), "\n", sep = "" ) if (!is.null(object$data)) { output <- paste( "data: ", paste(names(object$data), collapse = ", "), " [", nrow(object$data), "x", ncol(object$data), "] ", "\n", sep = "") cat(wrap(output)) } if (length(object$mapping) > 0) { cat("mapping: ", clist(object$mapping), "\n", sep = "") } if (object$scales$n() > 0) { cat("scales: ", paste(object$scales$input(), collapse = ", "), "\n") } cat("faceting: ") print(object$facet) if (length(object$layers) > 0) cat("-----------------------------------\n") invisible(lapply(object$layers, function(x) { print(x) cat("\n") })) } ggplot2/R/stat-function.r0000644000177400001440000000622213005734763015216 0ustar murdochusers#' Compute function for each x value #' #' This stat makes it easy to superimpose a function on top of an existing #' plot. The function is called with a grid of evenly spaced values along #' the x axis, and the results are drawn (by default) with a line. #' #' @section Aesthetics: #' \aesthetics{stat}{function} #' #' @param fun function to use. Must be vectorised. #' @param n number of points to interpolate along #' @param args list of additional arguments to pass to \code{fun} #' @param xlim Optionally, restrict the range of the function to this range. #' @inheritParams layer #' @inheritParams geom_point #' @section Computed variables: #' \describe{ #' \item{x}{x's along a grid} #' \item{y}{value of function evaluated at corresponding x} #' } #' @export #' @examples #' set.seed(1492) #' df <- data.frame( #' x = rnorm(100) #' ) #' x <- df$x #' base <- ggplot(df, aes(x)) + geom_density() #' base + stat_function(fun = dnorm, colour = "red") #' base + stat_function(fun = dnorm, colour = "red", args = list(mean = 3)) #' #' # Plot functions without data #' # Examples adapted from Kohske Takahashi #' #' # Specify range of x-axis #' ggplot(data.frame(x = c(0, 2)), aes(x)) + #' stat_function(fun = exp, geom = "line") #' #' # Plot a normal curve #' ggplot(data.frame(x = c(-5, 5)), aes(x)) + stat_function(fun = dnorm) #' #' # To specify a different mean or sd, use the args parameter to supply new values #' ggplot(data.frame(x = c(-5, 5)), aes(x)) + #' stat_function(fun = dnorm, args = list(mean = 2, sd = .5)) #' #' # Two functions on the same plot #' f <- ggplot(data.frame(x = c(0, 10)), aes(x)) #' f + stat_function(fun = sin, colour = "red") + #' stat_function(fun = cos, colour = "blue") #' #' # Using a custom function #' test <- function(x) {x ^ 2 + x + 20} #' f + stat_function(fun = test) stat_function <- function(mapping = NULL, data = NULL, geom = "path", position = "identity", ..., fun, xlim = NULL, n = 101, args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatFunction, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( fun = fun, n = n, args = args, na.rm = na.rm, xlim = xlim, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatFunction <- ggproto("StatFunction", Stat, default_aes = aes(y = ..y..), compute_group = function(data, scales, fun, xlim = NULL, n = 101, args = list()) { range <- xlim %||% scales$x$dimension() xseq <- seq(range[1], range[2], length.out = n) if (scales$x$is_discrete()) { x_trans <- xseq } else { # For continuous scales, need to back transform from transformed range # to original values x_trans <- scales$x$trans$inverse(xseq) } data.frame( x = xseq, y = do.call(fun, c(list(quote(x_trans)), args)) ) } ) ggplot2/R/position-.r0000644000177400001440000000652612771277527014361 0ustar murdochusers#' @section Positions: #' #' All \code{position_*} functions (like \code{position_dodge}) return a #' \code{Position*} object (like \code{PositionDodge}). The \code{Position*} #' object is responsible for adjusting the position of overlapping geoms. #' #' The way that the \code{position_*} functions work is slightly different from #' the \code{geom_*} and \code{stat_*} functions, because a \code{position_*} #' function actually "instantiates" the \code{Position*} object by creating a #' descendant, and returns that. #' #' Each of the \code{Position*} objects is a \code{\link{ggproto}} object, #' descended from the top-level \code{Position}, and each implements the #' following methods: #' #' \itemize{ #' \item \code{compute_layer(self, data, params, panel)} is called once #' per layer. \code{panel} is currently an internal data structure, so #' this method should not be overriden. #' #' \item \code{compute_panel(self, data, params, panel)} is called once per #' panel and should return a modified data frame. #' #' \code{data} is a data frame containing the variables named according #' to the aesthetics that they're mapped to. \code{scales} is a list #' containing the \code{x} and \code{y} scales. There functions are called #' before the facets are trained, so they are global scales, not local #' to the individual panels. \code{params} contains the parameters returned by #' \code{setup_params()}. #' \item \code{setup_params(data, params)}: called once for each layer. #' Used to setup defaults that need to complete dataset, and to inform #' the user of important choices. Should return list of parameters. #' \item \code{setup_data(data, params)}: called once for each layer, #' after \code{setp_params()}. Should return modified \code{data}. #' Default checks that required aesthetics are present. #' } #' #' And the following fields #' \itemize{ #' \item \code{required_aes}: a character vector giving the aesthetics #' that must be present for this position adjustment to work. #' } #' #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export Position <- ggproto("Position", required_aes = character(), setup_params = function(self, data) { list() }, setup_data = function(self, data, params) { check_required_aesthetics(self$required_aes, names(data), snake_class(self)) data }, compute_layer = function(self, data, params, layout) { plyr::ddply(data, "PANEL", function(data) { if (empty(data)) return(data.frame()) scales <- layout$get_scales(data$PANEL[1]) self$compute_panel(data = data, params = params, scales = scales) }) }, compute_panel = function(self, data, params, scales) { stop("Not implemented", call. = FALSE) } ) #' Convenience function to transform all position variables. #' #' @param trans_x,trans_y Transformation functions for x and y aesthetics. #' (will transform x, xmin, xmax, xend etc) #' @param ... Additional arguments passed to \code{trans_x} and \code{trans_y}. #' @keywords internal #' @export transform_position <- function(df, trans_x = NULL, trans_y = NULL, ...) { scales <- aes_to_scale(names(df)) if (!is.null(trans_x)) { df[scales == "x"] <- lapply(df[scales == "x"], trans_x, ...) } if (!is.null(trans_y)) { df[scales == "y"] <- lapply(df[scales == "y"], trans_y, ...) } df } ggplot2/R/geom-freqpoly.r0000644000177400001440000000115112665061357015205 0ustar murdochusers#' @export #' @rdname geom_histogram geom_freqpoly <- function(mapping = NULL, data = NULL, stat = "bin", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { params <- list(na.rm = na.rm, ...) if (identical(stat, "bin")) { params$pad <- TRUE } layer( data = data, mapping = mapping, stat = stat, geom = GeomPath, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = params ) } ggplot2/R/coord-quickmap.R0000644000177400001440000000223012606755230015267 0ustar murdochusers#' @inheritParams coord_cartesian #' @export #' @rdname coord_map coord_quickmap <- function(xlim = NULL, ylim = NULL, expand = TRUE) { ggproto(NULL, CoordQuickmap, limits = list(x = xlim, y = ylim), expand = expand ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordQuickmap <- ggproto("CoordQuickmap", CoordCartesian, aspect = function(ranges) { # compute coordinates of center point of map x.center <- sum(ranges$x.range) / 2 y.center <- sum(ranges$y.range) / 2 # compute distance corresponding to 1 degree in either direction # from the center x.dist <- dist_central_angle(x.center + c(-0.5, 0.5), rep(y.center, 2)) y.dist <- dist_central_angle(rep(x.center, 2), y.center + c(-0.5, 0.5)) # NB: this makes the projection correct in the center of the plot and # increasingly less correct towards the edges. For regions of reasonnable # size, this seems to give better results than computing this ratio from # the total lat and lon span. # scale the plot with this aspect ratio ratio <- y.dist / x.dist diff(ranges$y.range) / diff(ranges$x.range) * ratio } ) ggplot2/R/scales-.r0000644000177400001440000000726512652314164013753 0ustar murdochusers# Scales object encapsulates multiple scales. # All input and output done with data.frames to facilitate # multiple input and output variables scales_list <- function() { ggproto(NULL, ScalesList) } ScalesList <- ggproto("ScalesList", NULL, scales = NULL, find = function(self, aesthetic) { vapply(self$scales, function(x) any(aesthetic %in% x$aesthetics), logical(1)) }, has_scale = function(self, aesthetic) { any(self$find(aesthetic)) }, add = function(self, scale) { if (is.null(scale)) { return() } prev_aes <- self$find(scale$aesthetics) if (any(prev_aes)) { # Get only the first aesthetic name in the returned vector -- it can # sometimes be c("x", "xmin", "xmax", ....) scalename <- self$scales[prev_aes][[1]]$aesthetics[1] message_wrap("Scale for '", scalename, "' is already present. Adding another scale for '", scalename, "', which will replace the existing scale.") } # Remove old scale for this aesthetic (if it exists) self$scales <- c(self$scales[!prev_aes], list(scale)) }, n = function(self) { length(self$scales) }, input = function(self) { unlist(lapply(self$scales, "[[", "aesthetics")) }, # This actually makes a descendant of self, which is functionally the same # as a actually clone for most purposes. clone = function(self) { ggproto(NULL, self, scales = lapply(self$scales, function(s) s$clone())) }, non_position_scales = function(self) { ggproto(NULL, self, scales = self$scales[!self$find("x") & !self$find("y")]) }, get_scales = function(self, output) { scale <- self$scales[self$find(output)] if (length(scale) == 0) return() scale[[1]] } ) # Train scale from a data frame scales_train_df <- function(scales, df, drop = FALSE) { if (empty(df) || length(scales$scales) == 0) return() lapply(scales$scales, function(scale) scale$train_df(df = df)) } # Map values from a data.frame. Returns data.frame scales_map_df <- function(scales, df) { if (empty(df) || length(scales$scales) == 0) return(df) mapped <- unlist(lapply(scales$scales, function(scale) scale$map_df(df = df)), recursive = FALSE) plyr::quickdf(c(mapped, df[setdiff(names(df), names(mapped))])) } # Transform values to cardinal representation scales_transform_df <- function(scales, df) { if (empty(df) || length(scales$scales) == 0) return(df) transformed <- unlist(lapply(scales$scales, function(s) s$transform_df(df = df)), recursive = FALSE) plyr::quickdf(c(transformed, df[setdiff(names(df), names(transformed))])) } # @param aesthetics A list of aesthetic-variable mappings. The name of each # item is the aesthetic, and the value of each item is the variable in data. scales_add_defaults <- function(scales, data, aesthetics, env) { if (is.null(aesthetics)) return() names(aesthetics) <- unlist(lapply(names(aesthetics), aes_to_scale)) new_aesthetics <- setdiff(names(aesthetics), scales$input()) # No new aesthetics, so no new scales to add if (is.null(new_aesthetics)) return() datacols <- plyr::tryapply( aesthetics[new_aesthetics], eval, envir = data, enclos = env ) for (aes in names(datacols)) { scales$add(find_scale(aes, datacols[[aes]], env)) } } # Add missing but required scales. # @param aesthetics A character vector of aesthetics. Typically c("x", "y"). scales_add_missing <- function(plot, aesthetics, env) { # Keep only aesthetics that aren't already in plot$scales aesthetics <- setdiff(aesthetics, plot$scales$input()) for (aes in aesthetics) { scale_name <- paste("scale", aes, "continuous", sep = "_") scale_f <- find_global(scale_name, env, mode = "function") plot$scales$add(scale_f()) } } ggplot2/R/stat-qq.r0000644000177400001440000000452113005734575014013 0ustar murdochusers#' A quantile-quantile plot #' #' @section Aesthetics: #' \aesthetics{stat}{qq} #' #' @param distribution Distribution function to use, if x not specified #' @param dparams Additional parameters passed on to \code{distribution} #' function. #' @inheritParams layer #' @inheritParams geom_point #' @section Computed variables: #' \describe{ #' \item{sample}{sample quantiles} #' \item{theoretical}{theoretical quantiles} #' } #' @export #' @examples #' \donttest{ #' df <- data.frame(y = rt(200, df = 5)) #' p <- ggplot(df, aes(sample = y)) #' p + stat_qq() #' p + geom_point(stat = "qq") #' #' # Use fitdistr from MASS to estimate distribution params #' params <- as.list(MASS::fitdistr(df$y, "t")$estimate) #' ggplot(df, aes(sample = y)) + #' stat_qq(distribution = qt, dparams = params["df"]) #' #' # Using to explore the distribution of a variable #' ggplot(mtcars) + #' stat_qq(aes(sample = mpg)) #' ggplot(mtcars) + #' stat_qq(aes(sample = mpg, colour = factor(cyl))) #' } geom_qq <- function(mapping = NULL, data = NULL, geom = "point", position = "identity", ..., distribution = stats::qnorm, dparams = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatQq, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( distribution = distribution, dparams = dparams, na.rm = na.rm, ... ) ) } #' @export #' @rdname geom_qq stat_qq <- geom_qq #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatQq <- ggproto("StatQq", Stat, default_aes = aes(y = ..sample.., x = ..theoretical..), required_aes = c("sample"), compute_group = function(data, scales, quantiles = NULL, distribution = stats::qnorm, dparams = list(), na.rm = FALSE) { sample <- sort(data$sample) n <- length(sample) # Compute theoretical quantiles if (is.null(quantiles)) { quantiles <- stats::ppoints(n) } else { stopifnot(length(quantiles) == n) } theoretical <- do.call(distribution, c(list(p = quote(quantiles)), dparams)) data.frame(sample, theoretical) } ) ggplot2/R/theme.r0000644000177400001440000005517413006366102013521 0ustar murdochusers#' Modify components of a theme #' #' Use \code{theme()} to modify individual components of a theme, allowing #' you to control the appearance of all non-data components of the plot. #' \code{theme()} only affects a single plot: see \code{\link{theme_update}} if #' you want modify the active theme, to affect all subsequent plots. #' #' @section Theme inheritance: #' Theme elements inherit properties from other theme elements. #' For example, \code{axis.title.x} inherits from \code{axis.title}, #' which in turn inherits from \code{text}. All text elements inherit #' directly or indirectly from \code{text}; all lines inherit from #' \code{line}, and all rectangular objects inherit from \code{rect}. #' This means that you can modify the appearance of multiple elements by #' setting a single high-level component. #' #' @param line all line elements (\code{element_line}) #' @param rect all rectangular elements (\code{element_rect}) #' @param text all text elements (\code{element_text}) #' @param title all title elements: plot, axes, legends (\code{element_text}; #' inherits from \code{text}) #' @param aspect.ratio aspect ratio of the panel #' #' @param axis.title label of axes (\code{element_text}; inherits from #' \code{text}) #' @param axis.title.x x axis label (\code{element_text}; inherits from #' \code{axis.title}) #' @param axis.title.x.top x axis label on top axis (\code{element_text}; #' inherits from \code{axis.title.x}) #' @param axis.title.y y axis label (\code{element_text}; inherits from #' \code{axis.title}) #' @param axis.title.y.right y axis label on right axis (\code{element_text}; #' inherits from \code{axis.title.y}) #' @param axis.text tick labels along axes (\code{element_text}; inherits from #' \code{text}) #' @param axis.text.x x axis tick labels (\code{element_text}; inherits from #' \code{axis.text}) #' @param axis.text.x.top x axis tick labels on top axis (\code{element_text}; #' inherits from \code{axis.text.x}) #' @param axis.text.y y axis tick labels (\code{element_text}; inherits from #' \code{axis.text}) #' @param axis.text.y.right y axis tick labels on right axis #' (\code{element_text}; inherits from \code{axis.text.y}) #' @param axis.ticks tick marks along axes (\code{element_line}; inherits from #' \code{line}) #' @param axis.ticks.x x axis tick marks (\code{element_line}; inherits from #' \code{axis.ticks}) #' @param axis.ticks.y y axis tick marks (\code{element_line}; inherits from #' \code{axis.ticks}) #' @param axis.ticks.length length of tick marks (\code{unit}) #' @param axis.line lines along axes (\code{element_line}; inherits from #' \code{line}) #' @param axis.line.x line along x axis (\code{element_line}; inherits from #' \code{axis.line}) #' @param axis.line.y line along y axis (\code{element_line}; inherits from #' \code{axis.line}) #' #' @param legend.background background of legend (\code{element_rect}; inherits #' from \code{rect}) #' @param legend.margin the margin around each legend (\code{margin}) #' @param legend.spacing the spacing between legends (\code{unit}) #' @param legend.spacing.x the horizontal spacing between legends (\code{unit}); #' inherits from \code{legend.spacing} #' @param legend.spacing.y the horizontal spacing between legends (\code{unit}); #' inherits from \code{legend.spacing} #' @param legend.key background underneath legend keys (\code{element_rect}; #' inherits from \code{rect}) #' @param legend.key.size size of legend keys (\code{unit}) #' @param legend.key.height key background height (\code{unit}; inherits from #' \code{legend.key.size}) #' @param legend.key.width key background width (\code{unit}; inherits from #' \code{legend.key.size}) #' @param legend.text legend item labels (\code{element_text}; inherits from #' \code{text}) #' @param legend.text.align alignment of legend labels (number from 0 (left) to #' 1 (right)) #' @param legend.title title of legend (\code{element_text}; inherits from #' \code{title}) #' @param legend.title.align alignment of legend title (number from 0 (left) to #' 1 (right)) #' @param legend.position the position of legends ("none", "left", "right", #' "bottom", "top", or two-element numeric vector) #' @param legend.direction layout of items in legends ("horizontal" or #' "vertical") #' @param legend.justification anchor point for positioning legend inside plot #' ("center" or two-element numeric vector) or the justification according to #' the plot area when positioned outside the plot #' @param legend.box arrangement of multiple legends ("horizontal" or #' "vertical") #' @param legend.box.just justification of each legend within the overall #' bounding box, when there are multiple legends ("top", "bottom", "left", or #' "right") #' @param legend.box.margin margins around the full legend area, as specified #' using \code{\link{margin}} #' @param legend.box.background background of legend area (\code{element_rect}; #' inherits from \code{rect}) #' @param legend.box.spacing The spacing between the plotting area and the #' legend box (\code{unit}) #' #' @param panel.background background of plotting area, drawn underneath plot #' (\code{element_rect}; inherits from \code{rect}) #' @param panel.border border around plotting area, drawn on top of plot so that #' it covers tick marks and grid lines. This should be used with #' \code{fill=NA} #' (\code{element_rect}; inherits from \code{rect}) #' @param panel.spacing spacing between facet panels (\code{unit}) #' @param panel.spacing.x horizontal spacing between facet panels (\code{unit}; #' inherits from \code{panel.spacing}) #' @param panel.spacing.y vertical spacing between facet panels (\code{unit}; #' inherits from \code{panel.spacing}) #' @param panel.grid grid lines (\code{element_line}; inherits from \code{line}) #' @param panel.grid.major major grid lines (\code{element_line}; inherits from #' \code{panel.grid}) #' @param panel.grid.minor minor grid lines (\code{element_line}; inherits from #' \code{panel.grid}) #' @param panel.grid.major.x vertical major grid lines (\code{element_line}; #' inherits from \code{panel.grid.major}) #' @param panel.grid.major.y horizontal major grid lines (\code{element_line}; #' inherits from \code{panel.grid.major}) #' @param panel.grid.minor.x vertical minor grid lines (\code{element_line}; #' inherits from \code{panel.grid.minor}) #' @param panel.grid.minor.y horizontal minor grid lines (\code{element_line}; #' inherits from \code{panel.grid.minor}) #' @param panel.ontop option to place the panel (background, gridlines) over #' the data layers. Usually used with a transparent or blank #' \code{panel.background}. (\code{logical}) #' #' @param plot.background background of the entire plot (\code{element_rect}; #' inherits from \code{rect}) #' @param plot.title plot title (text appearance) (\code{element_text}; inherits #' from \code{title}) left-aligned by default #' @param plot.subtitle plot subtitle (text appearance) (\code{element_text}; #' inherits from \code{title}) left-aligned by default #' @param plot.caption caption below the plot (text appearance) #' (\code{element_text}; inherits from \code{title}) right-aligned by default #' @param plot.margin margin around entire plot (\code{unit} with the sizes of #' the top, right, bottom, and left margins) #' #' @param strip.background background of facet labels (\code{element_rect}; #' inherits from \code{rect}) #' @param strip.placement placement of strip with respect to axes, #' either "inside" or "outside". Only important when axes and strips are #' on the same side of the plot. #' @param strip.text facet labels (\code{element_text}; inherits from #' \code{text}) #' @param strip.text.x facet labels along horizontal direction #' (\code{element_text}; inherits from \code{strip.text}) #' @param strip.text.y facet labels along vertical direction #' (\code{element_text}; inherits from \code{strip.text}) #' @param strip.switch.pad.grid space between strips and axes when strips are #' switched (\code{unit}) #' @param strip.switch.pad.wrap space between strips and axes when strips are #' switched (\code{unit}) #' #' @param ... additional element specifications not part of base ggplot2. If #' supplied \code{validate} needs to be set to \code{FALSE}. #' @param complete set this to TRUE if this is a complete theme, such as #' the one returned \code{by theme_grey()}. Complete themes behave #' differently when added to a ggplot object. Also, when setting #' \code{complete = TRUE} all elements will be set to inherit from blank #' elements. #' @param validate \code{TRUE} to run validate_element, \code{FALSE} to bypass checks. #' #' @seealso #' \code{\link{+.gg}} and \code{\link{\%+replace\%}}, #' \code{\link{element_blank}}, \code{\link{element_line}}, #' \code{\link{element_rect}}, and \code{\link{element_text}} for #' details of the specific theme elements. #' @export #' @examples #' p1 <- ggplot(mtcars, aes(wt, mpg)) + #' geom_point() + #' labs(title = "Fuel economy declines as weight increases") #' p1 #' #' # Plot --------------------------------------------------------------------- #' p1 + theme(plot.title = element_text(size = rel(2))) #' p1 + theme(plot.background = element_rect(fill = "green")) #' #' # Panels -------------------------------------------------------------------- #' #' p1 + theme(panel.background = element_rect(fill = "white", colour = "grey50")) #' p1 + theme(panel.border = element_rect(linetype = "dashed", fill = NA)) #' p1 + theme(panel.grid.major = element_line(colour = "black")) #' p1 + theme( #' panel.grid.major.y = element_blank(), #' panel.grid.minor.y = element_blank() #' ) #' #' # Put gridlines on top of data #' p1 + theme( #' panel.background = element_rect(fill = NA), #' panel.grid.major = element_line(colour = "grey50"), #' panel.ontop = TRUE #' ) #' #' # Axes ---------------------------------------------------------------------- #' p1 + theme(axis.line = element_line(size = 3, colour = "grey80")) #' p1 + theme(axis.text = element_text(colour = "blue")) #' p1 + theme(axis.ticks = element_line(size = 2)) #' p1 + theme(axis.ticks.length = unit(.25, "cm")) #' p1 + theme(axis.title.y = element_text(size = rel(1.5), angle = 90)) #' #' \donttest{ #' # Legend -------------------------------------------------------------------- #' p2 <- ggplot(mtcars, aes(wt, mpg)) + #' geom_point(aes(colour = factor(cyl), shape = factor(vs))) + #' labs( #' x = "Weight (1000 lbs)", #' y = "Fuel economy (mpg)", #' colour = "Cylinders", #' shape = "Transmission" #' ) #' p2 #' #' # Position #' p2 + theme(legend.position = "none") #' p2 + theme(legend.justification = "top") #' p2 + theme(legend.position = "bottom") #' #' # Or place inside the plot using relative coordinates between 0 and 1 #' # legend.justification sets the corner that the position refers to #' p2 + theme( #' legend.position = c(.95, .95), #' legend.justification = c("right", "top"), #' legend.box.just = "right", #' legend.margin = margin(6, 6, 6, 6) #' ) #' #' # The legend.box properties work similarly for the space around #' # all the legends #' p2 + theme( #' legend.box.background = element_rect(), #' legend.box.margin = margin(6, 6, 6, 6) #' ) #' #' # You can also control the display of the keys #' # and the justifaction related to the plot area can be set #' p2 + theme(legend.key = element_rect(fill = "white", colour = "black")) #' p2 + theme(legend.text = element_text(size = 8, colour = "red")) #' p2 + theme(legend.title = element_text(face = "bold")) #' #' # Strips -------------------------------------------------------------------- #' #' p3 <- ggplot(mtcars, aes(wt, mpg)) + #' geom_point() + #' facet_wrap(~ cyl) #' p3 #' #' p3 + theme(strip.background = element_rect(colour = "black", fill = "white")) #' p3 + theme(strip.text.x = element_text(colour = "white", face = "bold")) #' p3 + theme(panel.spacing = unit(1, "lines")) #' } theme <- function(line, rect, text, title, aspect.ratio, axis.title, axis.title.x, axis.title.x.top, axis.title.y, axis.title.y.right, axis.text, axis.text.x, axis.text.x.top, axis.text.y, axis.text.y.right, axis.ticks, axis.ticks.x, axis.ticks.y, axis.ticks.length, axis.line, axis.line.x, axis.line.y, legend.background, legend.margin, legend.spacing, legend.spacing.x, legend.spacing.y, legend.key, legend.key.size, legend.key.height, legend.key.width, legend.text, legend.text.align, legend.title, legend.title.align, legend.position, legend.direction, legend.justification, legend.box, legend.box.just, legend.box.margin, legend.box.background, legend.box.spacing, panel.background, panel.border, panel.spacing, panel.spacing.x, panel.spacing.y, panel.grid, panel.grid.major, panel.grid.minor, panel.grid.major.x, panel.grid.major.y, panel.grid.minor.x, panel.grid.minor.y, panel.ontop, plot.background, plot.title, plot.subtitle, plot.caption, plot.margin, strip.background, strip.placement, strip.text, strip.text.x, strip.text.y, strip.switch.pad.grid, strip.switch.pad.wrap, ..., complete = FALSE, validate = TRUE ) { elements <- find_args(..., complete = NULL, validate = NULL) if (!is.null(elements$axis.ticks.margin)) { warning("`axis.ticks.margin` is deprecated. Please set `margin` property ", " of `axis.text` instead", call. = FALSE) elements$axis.ticks.margin <- NULL } if (!is.null(elements$panel.margin)) { warning("`panel.margin` is deprecated. Please use `panel.spacing` property ", "instead", call. = FALSE) elements$panel.spacing <- elements$panel.margin elements$panel.margin <- NULL } if (!is.null(elements$panel.margin.x)) { warning("`panel.margin.x` is deprecated. Please use `panel.spacing.x` property ", "instead", call. = FALSE) elements$panel.spacing.x <- elements$panel.margin.x elements$panel.margin.x <- NULL } if (!is.null(elements$panel.margin.y)) { warning("`panel.margin` is deprecated. Please use `panel.spacing` property ", "instead", call. = FALSE) elements$panel.spacing.y <- elements$panel.margin.y elements$panel.margin.y <- NULL } if (is.unit(elements$legend.margin) && !is.margin(elements$legend.margin)) { warning("`legend.margin` must be specified using `margin()`. For the old ", "behavior use legend.spacing", call. = FALSE) elements$legend.spacing <- elements$legend.margin elements$legend.margin <- margin() } # Check that all elements have the correct class (element_text, unit, etc) if (validate) { mapply(validate_element, elements, names(elements)) } # If complete theme set all non-blank elements to inherit from blanks if (complete) { elements <- lapply(elements, function(el) { if (inherits(el, "element") && !inherits(el, "element_blank")) { el$inherit.blank <- TRUE } el }) } structure( elements, class = c("theme", "gg"), complete = complete, validate = validate ) } # Combine plot defaults with current theme to get complete theme for a plot plot_theme <- function(x) { defaults(x$theme, theme_get()) } #' Modify properties of an element in a theme object #' #' @param t1 A theme object #' @param t2 A theme object that is to be added to \code{t1} #' @param t2name A name of the t2 object. This is used for printing #' informative error messages. #' @keywords internal add_theme <- function(t1, t2, t2name) { if (!is.theme(t2)) { stop("Don't know how to add RHS to a theme object", call. = FALSE) } # Iterate over the elements that are to be updated for (item in names(t2)) { x <- t1[[item]] y <- t2[[item]] if (is.null(x) || inherits(x, "element_blank")) { # If x is NULL or element_blank, then just assign it y x <- y } else if (is.null(y) || is.character(y) || is.numeric(y) || is.logical(y) || inherits(y, "element_blank")) { # If y is NULL, or a string or numeric vector, or is element_blank, just replace x x <- y } else { # If x is not NULL, then copy over the non-NULL properties from y # Get logical vector of non-NULL properties in y idx <- !vapply(y, is.null, logical(1)) # Get the names of TRUE items idx <- names(idx[idx]) # Update non-NULL items x[idx] <- y[idx] } # Assign it back to t1 # This is like doing t1[[item]] <- x, except that it preserves NULLs. # The other form will simply drop NULL values t1[item] <- list(x) } # If either theme is complete, then the combined theme is complete attr(t1, "complete") <- attr(t1, "complete") || attr(t2, "complete") t1 } # Update a theme from a plot object # # This is called from add_ggplot. # # If newtheme is a *complete* theme, then it is meant to replace # oldtheme; this function just returns newtheme. # # Otherwise, it adds elements from newtheme to oldtheme: # If oldtheme doesn't already contain those elements, # it searches the current default theme, grabs the elements with the # same name as those from newtheme, and puts them in oldtheme. Then # it adds elements from newtheme to oldtheme. # This makes it possible to do things like: # ggplot(data.frame(x = 1:3, y = 1:3)) + # geom_point() + theme(text = element_text(colour = 'red')) # and have 'text' keep properties from the default theme. Otherwise # you would have to set all the element properties, like family, size, # etc. # # @param oldtheme an existing theme, usually from a plot object, like # plot$theme. This could be an empty list. # @param newtheme a new theme object to add to the existing theme update_theme <- function(oldtheme, newtheme) { # If the newtheme is a complete one, don't bother searching # the default theme -- just replace everything with newtheme if (attr(newtheme, "complete")) return(newtheme) # These are elements in newtheme that aren't already set in oldtheme. # They will be pulled from the default theme. newitems <- !names(newtheme) %in% names(oldtheme) newitem_names <- names(newtheme)[newitems] oldtheme[newitem_names] <- theme_get()[newitem_names] # Update the theme elements with the things from newtheme # Turn the 'theme' list into a proper theme object first, and preserve # the 'complete' attribute. It's possible that oldtheme is an empty # list, and in that case, set complete to FALSE. old.validate <- isTRUE(attr(oldtheme, "validate")) new.validate <- isTRUE(attr(newtheme, "validate")) oldtheme <- do.call(theme, c(oldtheme, complete = isTRUE(attr(oldtheme, "complete")), validate = old.validate & new.validate)) oldtheme + newtheme } #' Calculate the element properties, by inheriting properties from its parents #' #' @param element The name of the theme element to calculate #' @param theme A theme object (like theme_grey()) #' @param verbose If TRUE, print out which elements this one inherits from #' @keywords internal #' @export #' @examples #' t <- theme_grey() #' calc_element('text', t) #' #' # Compare the "raw" element definition to the element with calculated inheritance #' t$axis.text.x #' calc_element('axis.text.x', t, verbose = TRUE) #' #' # This reports that axis.text.x inherits from axis.text, #' # which inherits from text. You can view each of them with: #' t$axis.text.x #' t$axis.text #' t$text calc_element <- function(element, theme, verbose = FALSE) { if (verbose) message(element, " --> ", appendLF = FALSE) # If this is element_blank, don't inherit anything from parents if (inherits(theme[[element]], "element_blank")) { if (verbose) message("element_blank (no inheritance)") return(theme[[element]]) } # If the element is defined (and not just inherited), check that # it is of the class specified in .element_tree if (!is.null(theme[[element]]) && !inherits(theme[[element]], .element_tree[[element]]$class)) { stop(element, " should have class ", .element_tree[[element]]$class) } # Get the names of parents from the inheritance tree pnames <- .element_tree[[element]]$inherit # If no parents, this is a "root" node. Just return this element. if (is.null(pnames)) { # Check that all the properties of this element are non-NULL nullprops <- vapply(theme[[element]], is.null, logical(1)) if (any(nullprops)) { stop("Theme element '", element, "' has NULL property: ", paste(names(nullprops)[nullprops], collapse = ", ")) } if (verbose) message("nothing (top level)") return(theme[[element]]) } # Calculate the parent objects' inheritance if (verbose) message(paste(pnames, collapse = ", ")) parents <- lapply(pnames, calc_element, theme, verbose) # Combine the properties of this element with all parents Reduce(combine_elements, parents, theme[[element]]) } # Combine the properties of two elements # # @param e1 An element object # @param e2 An element object which e1 inherits from combine_elements <- function(e1, e2) { # If e2 is NULL, nothing to inherit if (is.null(e2) || inherits(e1, "element_blank")) return(e1) # If e1 is NULL inherit everything from e2 if (is.null(e1)) return(e2) # If e2 is element_blank, and e1 inherits blank inherit everything from e2, # otherwise ignore e2 if (inherits(e2, "element_blank")) { if (e1$inherit.blank) return(e2) else return(e1) } # If e1 has any NULL properties, inherit them from e2 n <- vapply(e1[names(e2)], is.null, logical(1)) e1[n] <- e2[n] # Calculate relative sizes if (is.rel(e1$size)) { e1$size <- e2$size * unclass(e1$size) } e1 } #' Reports whether x is a theme object #' @param x An object to test #' @export #' @keywords internal is.theme <- function(x) inherits(x, "theme") #' @export print.theme <- function(x, ...) utils::str(x) ggplot2/R/geom-dotplot.r0000644000177400001440000002660612776714275015054 0ustar murdochusers#' Dot plot #' #' In a dot plot, the width of a dot corresponds to the bin width #' (or maximum width, depending on the binning algorithm), and dots are #' stacked, with each dot representing one observation. #' #' There are two basic approaches: \emph{dot-density} and \emph{histodot}. #' With dot-density binning, the bin positions are determined by the data and #' \code{binwidth}, which is the maximum width of each bin. See Wilkinson #' (1999) for details on the dot-density binning algorithm. With histodot #' binning, the bins have fixed positions and fixed widths, much like a #' histogram. #' #' When binning along the x axis and stacking along the y axis, the numbers on #' y axis are not meaningful, due to technical limitations of ggplot2. You can #' hide the y axis, as in one of the examples, or manually scale it #' to match the number of dots. #' #' @section Aesthetics: #' \aesthetics{geom}{dotplot} #' #' @section Computed variables: #' \describe{ #' \item{x}{center of each bin, if binaxis is "x"} #' \item{y}{center of each bin, if binaxis is "x"} #' \item{binwidth}{max width of each bin if method is "dotdensity"; #' width of each bin if method is "histodot"} #' \item{count}{number of points in bin} #' \item{ncount}{count, scaled to maximum of 1} #' \item{density}{density of points in bin, scaled to integrate to 1, #' if method is "histodot"} #' \item{ndensity}{density, scaled to maximum of 1, if method is "histodot"} #' } #' #' @inheritParams layer #' @inheritParams geom_point #' @param stackdir which direction to stack the dots. "up" (default), #' "down", "center", "centerwhole" (centered, but with dots aligned) #' @param stackratio how close to stack the dots. Default is 1, where dots just #' just touch. Use smaller values for closer, overlapping dots. #' @param dotsize The diameter of the dots relative to \code{binwidth}, default 1. #' @param stackgroups should dots be stacked across groups? This has the effect #' that \code{position = "stack"} should have, but can't (because this geom has #' some odd properties). #' @param binaxis The axis to bin along, "x" (default) or "y" #' @param method "dotdensity" (default) for dot-density binning, or #' "histodot" for fixed bin widths (like stat_bin) #' @param binwidth When \code{method} is "dotdensity", this specifies maximum bin #' width. When \code{method} is "histodot", this specifies bin width. #' Defaults to 1/30 of the range of the data #' @param binpositions When \code{method} is "dotdensity", "bygroup" (default) #' determines positions of the bins for each group separately. "all" determines #' positions of the bins with all the data taken together; this is used for #' aligning dot stacks across multiple groups. #' @param origin When \code{method} is "histodot", origin of first bin #' @param right When \code{method} is "histodot", should intervals be closed #' on the right (a, b], or not [a, b) #' @param width When \code{binaxis} is "y", the spacing of the dot stacks #' for dodging. #' @param drop If TRUE, remove all bins with zero counts #' @export #' @references Wilkinson, L. (1999) Dot plots. The American Statistician, #' 53(3), 276-281. #' @examples #' ggplot(mtcars, aes(x = mpg)) + geom_dotplot() #' ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5) #' #' # Use fixed-width bins #' ggplot(mtcars, aes(x = mpg)) + #' geom_dotplot(method="histodot", binwidth = 1.5) #' #' # Some other stacking methods #' ggplot(mtcars, aes(x = mpg)) + #' geom_dotplot(binwidth = 1.5, stackdir = "center") #' ggplot(mtcars, aes(x = mpg)) + #' geom_dotplot(binwidth = 1.5, stackdir = "centerwhole") #' #' # y axis isn't really meaningful, so hide it #' ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5) + #' scale_y_continuous(NULL, breaks = NULL) #' #' # Overlap dots vertically #' ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, stackratio = .7) #' #' # Expand dot diameter #' ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, dotsize = 1.25) #' #' \donttest{ #' # Examples with stacking along y axis instead of x #' ggplot(mtcars, aes(x = 1, y = mpg)) + #' geom_dotplot(binaxis = "y", stackdir = "center") #' #' ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + #' geom_dotplot(binaxis = "y", stackdir = "center") #' #' ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + #' geom_dotplot(binaxis = "y", stackdir = "centerwhole") #' #' ggplot(mtcars, aes(x = factor(vs), fill = factor(cyl), y = mpg)) + #' geom_dotplot(binaxis = "y", stackdir = "center", position = "dodge") #' #' # binpositions="all" ensures that the bins are aligned between groups #' ggplot(mtcars, aes(x = factor(am), y = mpg)) + #' geom_dotplot(binaxis = "y", stackdir = "center", binpositions="all") #' #' # Stacking multiple groups, with different fill #' ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + #' geom_dotplot(stackgroups = TRUE, binwidth = 1, binpositions = "all") #' #' ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + #' geom_dotplot(stackgroups = TRUE, binwidth = 1, method = "histodot") #' #' ggplot(mtcars, aes(x = 1, y = mpg, fill = factor(cyl))) + #' geom_dotplot(binaxis = "y", stackgroups = TRUE, binwidth = 1, method = "histodot") #' } geom_dotplot <- function(mapping = NULL, data = NULL, position = "identity", ..., binwidth = NULL, binaxis = "x", method = "dotdensity", binpositions = "bygroup", stackdir = "up", stackratio = 1, dotsize = 1, stackgroups = FALSE, origin = NULL, right = TRUE, width = 0.9, drop = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { # If identical(position, "stack") or position is position_stack(), tell them # to use stackgroups=TRUE instead. Need to use identical() instead of ==, # because == will fail if object is position_stack() or position_dodge() if (!is.null(position) && (identical(position, "stack") || (inherits(position, "PositionStack")))) message("position=\"stack\" doesn't work properly with geom_dotplot. Use stackgroups=TRUE instead.") if (stackgroups && method == "dotdensity" && binpositions == "bygroup") message('geom_dotplot called with stackgroups=TRUE and method="dotdensity". You probably want to set binpositions="all"') layer( data = data, mapping = mapping, stat = StatBindot, geom = GeomDotplot, position = position, show.legend = show.legend, inherit.aes = inherit.aes, # Need to make sure that the binaxis goes to both the stat and the geom params = list( binaxis = binaxis, binwidth = binwidth, binpositions = binpositions, method = method, origin = origin, right = right, width = width, drop = drop, stackdir = stackdir, stackratio = stackratio, dotsize = dotsize, stackgroups = stackgroups, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomDotplot <- ggproto("GeomDotplot", Geom, required_aes = c("x", "y"), non_missing_aes = c("size", "shape"), default_aes = aes(colour = "black", fill = "black", alpha = NA), setup_data = function(data, params) { data$width <- data$width %||% params$width %||% (resolution(data$x, FALSE) * 0.9) # Set up the stacking function and range if (is.null(params$stackdir) || params$stackdir == "up") { stackdots <- function(a) a - .5 stackaxismin <- 0 stackaxismax <- 1 } else if (params$stackdir == "down") { stackdots <- function(a) -a + .5 stackaxismin <- -1 stackaxismax <- 0 } else if (params$stackdir == "center") { stackdots <- function(a) a - 1 - max(a - 1) / 2 stackaxismin <- -.5 stackaxismax <- .5 } else if (params$stackdir == "centerwhole") { stackdots <- function(a) a - 1 - floor(max(a - 1) / 2) stackaxismin <- -.5 stackaxismax <- .5 } # Fill the bins: at a given x (or y), if count=3, make 3 entries at that x data <- data[rep(1:nrow(data), data$count), ] # Next part will set the position of each dot within each stack # If stackgroups=TRUE, split only on x (or y) and panel; if not stacking, also split by group plyvars <- params$binaxis %||% "x" plyvars <- c(plyvars, "PANEL") if (is.null(params$stackgroups) || !params$stackgroups) plyvars <- c(plyvars, "group") # Within each x, or x+group, set countidx=1,2,3, and set stackpos according to stack function data <- plyr::ddply(data, plyvars, function(xx) { xx$countidx <- 1:nrow(xx) xx$stackpos <- stackdots(xx$countidx) xx }) # Set the bounding boxes for the dots if (is.null(params$binaxis) || params$binaxis == "x") { # ymin, ymax, xmin, and xmax define the bounding rectangle for each stack # Can't do bounding box per dot, because y position isn't real. # After position code is rewritten, each dot should have its own bounding box. data$xmin <- data$x - data$binwidth / 2 data$xmax <- data$x + data$binwidth / 2 data$ymin <- stackaxismin data$ymax <- stackaxismax data$y <- 0 } else if (params$binaxis == "y") { # ymin, ymax, xmin, and xmax define the bounding rectangle for each stack # Can't do bounding box per dot, because x position isn't real. # xmin and xmax aren't really the x bounds, because of the odd way the grob # works. They're just set to the standard x +- width/2 so that dot clusters # can be dodged like other geoms. # After position code is rewritten, each dot should have its own bounding box. data <- plyr::ddply(data, c("group", "PANEL"), transform, ymin = min(y) - binwidth[1] / 2, ymax = max(y) + binwidth[1] / 2) data$xmin <- data$x + data$width * stackaxismin data$xmax <- data$x + data$width * stackaxismax # Unlike with y above, don't change x because it will cause problems with dodging } data }, draw_group = function(data, panel_scales, coord, na.rm = FALSE, binaxis = "x", stackdir = "up", stackratio = 1, dotsize = 1, stackgroups = FALSE) { if (!coord$is_linear()) { warning("geom_dotplot does not work properly with non-linear coordinates.") } tdata <- coord$transform(data, panel_scales) # Swap axes if using coord_flip if (inherits(coord, "CoordFlip")) binaxis <- ifelse(binaxis == "x", "y", "x") if (binaxis == "x") { stackaxis = "y" dotdianpc <- dotsize * tdata$binwidth[1] / (max(panel_scales$x.range) - min(panel_scales$x.range)) } else if (binaxis == "y") { stackaxis = "x" dotdianpc <- dotsize * tdata$binwidth[1] / (max(panel_scales$y.range) - min(panel_scales$y.range)) } ggname("geom_dotplot", dotstackGrob(stackaxis = stackaxis, x = tdata$x, y = tdata$y, dotdia = dotdianpc, stackposition = tdata$stackpos, stackratio = stackratio, default.units = "npc", gp = gpar(col = alpha(tdata$colour, tdata$alpha), fill = alpha(tdata$fill, tdata$alpha))) ) }, draw_key = draw_key_dotplot ) ggplot2/R/aes-group-order.r0000644000177400001440000000642713006417715015436 0ustar murdochusers#' Aesthetics: grouping #' #' @name aes_group_order #' @aliases group #' #' @examples #' \donttest{ #' #' # By default, the group is set to the interaction of all discrete variables in the #' # plot. This often partitions the data correctly, but when it does not, or when #' # no discrete variable is used in the plot, you will need to explicitly define the #' # grouping structure, by mapping group to a variable that has a different value #' # for each group. #' #' # For most applications you can simply specify the grouping with #' # various aesthetics (colour, shape, fill, linetype) or with facets. #' #' p <- ggplot(mtcars, aes(wt, mpg)) #' # A basic scatter plot #' p + geom_point(size = 4) #' # The colour aesthetic #' p + geom_point(aes(colour = factor(cyl)), size = 4) #' # Or you can use shape to distinguish the data #' p + geom_point(aes(shape = factor(cyl)), size = 4) #' #' # Using fill #' a <- ggplot(mtcars, aes(factor(cyl))) #' a + geom_bar() #' a + geom_bar(aes(fill = factor(cyl))) #' a + geom_bar(aes(fill = factor(vs))) #' #' # Using linetypes #' rescale01 <- function(x) (x - min(x)) / diff(range(x)) #' ec_scaled <- data.frame( #' date = economics$date, #' plyr::colwise(rescale01)(economics[, -(1:2)])) #' ecm <- reshape2::melt(ec_scaled, id.vars = "date") #' f <- ggplot(ecm, aes(date, value)) #' f + geom_line(aes(linetype = variable)) #' #' # Using facets #' k <- ggplot(diamonds, aes(carat, ..density..)) + geom_histogram(binwidth = 0.2) #' k + facet_grid(. ~ cut) #' #' # There are three common cases where the default is not enough, and we #' # will consider each one below. In the following examples, we will use a simple #' # longitudinal dataset, Oxboys, from the nlme package. It records the heights #' # (height) and centered ages (age) of 26 boys (Subject), measured on nine #' # occasions (Occasion). #' #' # Multiple groups with one aesthetic #' h <- ggplot(nlme::Oxboys, aes(age, height)) #' # A single line tries to connect all the observations #' h + geom_line() #' # The group aesthetic maps a different line for each subject #' h + geom_line(aes(group = Subject)) #' #' # Different groups on different layers #' h <- h + geom_line(aes(group = Subject)) #' # Using the group aesthetic with both geom_line() and geom_smooth() #' # groups the data the same way for both layers #' h + geom_smooth(aes(group = Subject), method = "lm", se = FALSE) #' # Changing the group aesthetic for the smoother layer #' # fits a single line of best fit across all boys #' h + geom_smooth(aes(group = 1), size = 2, method = "lm", se = FALSE) #' #' # Overriding the default grouping #' # The plot has a discrete scale but you want to draw lines that connect across #' # groups. This is the strategy used in interaction plots, profile plots, and parallel #' # coordinate plots, among others. For example, we draw boxplots of height at #' # each measurement occasion #' boysbox <- ggplot(nlme::Oxboys, aes(Occasion, height)) #' boysbox + geom_boxplot() #' # There is no need to specify the group aesthetic here; the default grouping #' # works because occasion is a discrete variable. To overlay individual trajectories #' # we again need to override the default grouping for that layer with aes(group = Subject) #' boysbox <- boysbox + geom_boxplot() #' boysbox + geom_line(aes(group = Subject), colour = "blue") #' } NULL ggplot2/R/bench.r0000644000177400001440000000135612555701147013501 0ustar murdochusers#' Benchmark plot creation time. #' Broken down into construct, build, render and draw times. #' #' @param x code to create ggplot2 plot #' @export #' @keywords internal #' @examples #' benchplot(ggplot(mtcars, aes(mpg, wt)) + geom_point()) #' benchplot(ggplot(mtcars, aes(mpg, wt)) + geom_point() + facet_grid(. ~ cyl)) benchplot <- function(x) { construct <- system.time(force(x)) stopifnot(inherits(x, "ggplot")) build <- system.time(data <- ggplot_build(x)) render <- system.time(grob <- ggplot_gtable(data)) draw <- system.time(grid.draw(grob)) times <- rbind(construct, build, render, draw)[, 1:3] plyr::unrowname(data.frame( step = c("construct", "build", "render", "draw", "TOTAL"), rbind(times, colSums(times)))) } ggplot2/R/position-nudge.R0000644000177400001440000000242513005736236015322 0ustar murdochusers#' Nudge points a fixed distance #' #' \code{position_nudge} is generally useful for adjusting the position of #' items on discrete scales by a small amount. Nudging is built in to #' \code{\link{geom_text}} because it's so useful for moving labels a small #' distance from what they're labelling. #' #' @family position adjustments #' @param x,y Amount of vertical and horizontal distance to move. #' @export #' @examples #' df <- data.frame( #' x = c(1,3,2,5), #' y = c("a","c","d","c") #' ) #' #' ggplot(df, aes(x, y)) + #' geom_point() + #' geom_text(aes(label = y)) #' #' ggplot(df, aes(x, y)) + #' geom_point() + #' geom_text(aes(label = y), position = position_nudge(y = -0.1)) #' #' # Or, in brief #' ggplot(df, aes(x, y)) + #' geom_point() + #' geom_text(aes(label = y), nudge_y = -0.1) position_nudge <- function(x = 0, y = 0) { ggproto(NULL, PositionNudge, x = x, y = y ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionNudge <- ggproto("PositionNudge", Position, x = 0, y = 0, required_aes = c("x", "y"), setup_params = function(self, data) { list(x = self$x, y = self$y) }, compute_layer = function(data, params, panel) { transform_position(data, function(x) x + params$x, function(y) y + params$y) } ) ggplot2/R/plot-construction.r0000644000177400001440000000620413005673531016121 0ustar murdochusers#' Add components to a plot #' #' \code{+} is the key to constructing sophisticated ggplot2 graphics. It #' allows you to start simple, then get more and more complex, checking your #' work at each step. #' #' @section What can you add?: #' You can add any of the following types of objects: #' #' \itemize{ #' \item A \code{\link{aes}()} objects replaces the default aesthetics. #' \item A layer created by a \code{geom_} or \code{stat_} function adds #' new layer. #' \item A \code{scale} overrides the existing scale. #' \item A \code{\link{theme}} modifies the current theme. #' \item A \code{coord} overrides current coordinate system. #' \item A \code{facet} specificatio override current faceting. #' } #' #' To replace the current default data frame, you must use \code{\%+\%}, #' due to S3 method precedence issues. #' #' You can also supply a list, in which case each element of the list will #' be added in turn. #' #' @param e1 An object of class \code{\link{ggplot}} or a \code{\link{theme}}. #' @param e2 A plot component, as described below. #' @seealso \code{\link{theme}} #' @export #' @method + gg #' @rdname gg-add #' @examples #' base <- ggplot(mpg, aes(displ, hwy)) + geom_point() #' base + geom_smooth() #' #' # To override the data, you must use %+% #' base %+% subset(mpg, fl == "p") #' #' # Alternatively, you can add multiple components with a list. #' # This can be useful to return from a function. #' base + list(subset(mpg, fl == "p"), geom_smooth()) "+.gg" <- function(e1, e2) { # Get the name of what was passed in as e2, and pass along so that it # can be displayed in error messages e2name <- deparse(substitute(e2)) if (is.theme(e1)) add_theme(e1, e2, e2name) else if (is.ggplot(e1)) add_ggplot(e1, e2, e2name) } #' @rdname gg-add #' @export "%+%" <- `+.gg` add_ggplot <- function(p, object, objectname) { if (is.null(object)) return(p) p <- plot_clone(p) if (is.data.frame(object)) { p$data <- object } else if (is.theme(object)) { p$theme <- update_theme(p$theme, object) } else if (inherits(object, "Scale")) { p$scales$add(object) } else if (inherits(object, "labels")) { p <- update_labels(p, object) } else if (inherits(object, "guides")) { p <- update_guides(p, object) } else if (inherits(object, "uneval")) { p$mapping <- defaults(object, p$mapping) # defaults() doesn't copy class, so copy it. class(p$mapping) <- class(object) labels <- lapply(object, deparse) names(labels) <- names(object) p <- update_labels(p, labels) } else if (is.Coord(object)) { p$coordinates <- object p } else if (is.facet(object)) { p$facet <- object p } else if (is.list(object)) { for (o in object) { p <- p %+% o } } else if (is.layer(object)) { p$layers <- append(p$layers, object) # Add any new labels mapping <- make_labels(object$mapping) default <- make_labels(object$stat$default_aes) new_labels <- defaults(mapping, default) p$labels <- defaults(p$labels, new_labels) } else { stop("Don't know how to add ", objectname, " to a plot", call. = FALSE) } set_last_plot(p) p } ggplot2/R/stat-smooth.r0000644000177400001440000001075212751140643014700 0ustar murdochusers#' @param method smoothing method (function) to use, eg. "lm", "glm", #' "gam", "loess", "rlm". #' #' For \code{method = "auto"} the smoothing method is chosen based on the #' size of the largest group (across all panels). \code{\link{loess}} is #' used for than 1,000 observations; otherwise \code{\link[mgcv]{gam}} is #' used with \code{formula = y ~ s(x, bs = "cs")}. Somewhat anecdotally, #' \code{loess} gives a better appearance, but is O(n^2) in memory, so does #' not work for larger datasets. #' @param formula formula to use in smoothing function, eg. \code{y ~ x}, #' \code{y ~ poly(x, 2)}, \code{y ~ log(x)} #' @param se display confidence interval around smooth? (TRUE by default, see #' level to control #' @param fullrange should the fit span the full range of the plot, or just #' the data #' @param level level of confidence interval to use (0.95 by default) #' @param span Controls the amount of smoothing for the default loess smoother. #' Smaller numbers produce wigglier lines, larger numbers produce smoother #' lines. #' @param n number of points to evaluate smoother at #' @param method.args List of additional arguments passed on to the modelling #' function defined by \code{method}. #' @section Computed variables: #' \describe{ #' \item{y}{predicted value} #' \item{ymin}{lower pointwise confidence interval around the mean} #' \item{ymax}{upper pointwise confidence interval around the mean} #' \item{se}{standard error} #' } #' @export #' @rdname geom_smooth stat_smooth <- function(mapping = NULL, data = NULL, geom = "smooth", position = "identity", ..., method = "auto", formula = y ~ x, se = TRUE, n = 80, span = 0.75, fullrange = FALSE, level = 0.95, method.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatSmooth, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( method = method, formula = formula, se = se, n = n, fullrange = fullrange, level = level, na.rm = na.rm, method.args = method.args, span = span, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSmooth <- ggproto("StatSmooth", Stat, setup_params = function(data, params) { if (identical(params$method, "auto")) { # Use loess for small datasets, gam with a cubic regression basis for # larger. Based on size of the _largest_ group to avoid bad memory # behaviour of loess max_group <- max(table(interaction(data$group, data$PANEL, drop = TRUE))) if (max_group < 1000) { params$method <- "loess" } else { params$method <- "gam" params$formula <- y ~ s(x, bs = "cs") } message("`geom_smooth()` using method = '", params$method, "'") } if (identical(params$method, "gam")) { params$method <- mgcv::gam } params }, compute_group = function(data, scales, method = "auto", formula = y~x, se = TRUE, n = 80, span = 0.75, fullrange = FALSE, xseq = NULL, level = 0.95, method.args = list(), na.rm = FALSE) { if (length(unique(data$x)) < 2) { # Not enough data to perform fit return(data.frame()) } if (is.null(data$weight)) data$weight <- 1 if (is.null(xseq)) { if (is.integer(data$x)) { if (fullrange) { xseq <- scales$x$dimension() } else { xseq <- sort(unique(data$x)) } } else { if (fullrange) { range <- scales$x$dimension() } else { range <- range(data$x, na.rm = TRUE) } xseq <- seq(range[1], range[2], length.out = n) } } # Special case span because it's the most commonly used model argument if (identical(method, "loess")) { method.args$span <- span } if (is.character(method)) method <- match.fun(method) base.args <- list(quote(formula), data = quote(data), weights = quote(weight)) model <- do.call(method, c(base.args, method.args)) predictdf(model, xseq, se, level) }, required_aes = c("x", "y") ) ggplot2/R/zzz.r0000644000177400001440000000146313005656350013252 0ustar murdochusers.onAttach <- function(...) { if (!interactive() || stats::runif(1) > 0.1) return() tips <- c( "Need help? Try the ggplot2 mailing list: http://groups.google.com/group/ggplot2.", "Find out what's changed in ggplot2 at http://github.com/tidyverse/ggplot2/releases.", "Use suppressPackageStartupMessages() to eliminate package startup messages.", "Stackoverflow is a great place to get help: http://stackoverflow.com/tags/ggplot2.", "Need help getting started? Try the cookbook for R: http://www.cookbook-r.com/Graphs/", "Want to understand how all the pieces fit together? Buy the ggplot2 book: http://ggplot2.org/book/" ) tip <- sample(tips, 1) packageStartupMessage(paste(strwrap(tip), collapse = "\n")) } release_questions <- function() { c( "Have you built the book?" ) } ggplot2/R/geom-abline.r0000644000177400001440000001040413005711334014561 0ustar murdochusers#' @include stat-.r NULL #' Reference lines: horizontal, vertical, and diagonal #' #' These geoms add reference lines (sometimes called rules) to a plot, either #' horizontal, vertical, or diagonal (specified by slope and intercept). #' These are useful for annotating plots. #' #' These geoms act slightly different to other geoms. You can supply the #' parameters in two ways: either as arguments to the layer function, #' or via aesthetics. If you use arguments, e.g. #' \code{geom_abline(intercept = 0, slope = 1)}, then behind the scenes #' the geom makes a new data frame containing just the data you've supplied. #' That means that the lines will be the same in all facets; if you want them #' to vary across facets, construct the data frame yourself and use aesthetics. #' #' Unlike most other geoms, these geoms do not inherit aesthetics from the plot #' default, because they do not understand x and y aesthetics which are #' commonly set in the plot. They also do not affect the x and y scales. #' #' @section Aesthetics: #' These geoms are drawn using with \code{\link{geom_line}} so support the #' same aesthetics: \code{alpha}, \code{colour}, \code{linetype} and #' \code{size}. They also each have aesthetics that control the position of #' the line: #' #' \itemize{ #' \item \code{geom_vline}: \code{xintercept} #' \item \code{geom_hline}: \code{yintercept} #' \item \code{geom_abline}: \code{slope} and \code{intercept} #' } #' #' @seealso See \code{\link{geom_segment}} for a more general approach to #' adding straight line segments to a plot. #' @inheritParams layer #' @inheritParams geom_point #' @param xintercept,yintercept,slope,intercept Parameters that control the #' position of the line. If these are set, \code{data}, \code{mapping} and #' \code{show.legend} are overridden #' @export #' @examples #' p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() #' #' # Fixed values #' p + geom_vline(xintercept = 5) #' p + geom_vline(xintercept = 1:5) #' p + geom_hline(yintercept = 20) #' #' p + geom_abline() # Can't see it - outside the range of the data #' p + geom_abline(intercept = 20) #' #' # Calculate slope and intercept of line of best fit #' coef(lm(mpg ~ wt, data = mtcars)) #' p + geom_abline(intercept = 37, slope = -5) #' # But this is easier to do with geom_smooth: #' p + geom_smooth(method = "lm", se = FALSE) #' #' # To show different lines in different facets, use aesthetics #' p <- ggplot(mtcars, aes(mpg, wt)) + #' geom_point() + #' facet_wrap(~ cyl) #' #' mean_wt <- data.frame(cyl = c(4, 6, 8), wt = c(2.28, 3.11, 4.00)) #' p + geom_hline(aes(yintercept = wt), mean_wt) #' #' # You can also control other aesthetics #' ggplot(mtcars, aes(mpg, wt, colour = wt)) + #' geom_point() + #' geom_hline(aes(yintercept = wt, colour = wt), mean_wt) + #' facet_wrap(~ cyl) geom_abline <- function(mapping = NULL, data = NULL, ..., slope, intercept, na.rm = FALSE, show.legend = NA) { # If nothing set, default to y = x if (missing(mapping) && missing(slope) && missing(intercept)) { slope <- 1 intercept <- 0 } # Act like an annotation if (!missing(slope) || !missing(intercept)) { if (missing(slope)) slope <- 1 if (missing(intercept)) intercept <- 0 data <- data.frame(intercept = intercept, slope = slope) mapping <- aes(intercept = intercept, slope = slope) show.legend <- FALSE } layer( data = data, mapping = mapping, stat = StatIdentity, geom = GeomAbline, position = PositionIdentity, show.legend = show.legend, inherit.aes = FALSE, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomAbline <- ggproto("GeomAbline", Geom, draw_panel = function(data, panel_scales, coord) { ranges <- coord$range(panel_scales) data$x <- ranges$x[1] data$xend <- ranges$x[2] data$y <- ranges$x[1] * data$slope + data$intercept data$yend <- ranges$x[2] * data$slope + data$intercept GeomSegment$draw_panel(unique(data), panel_scales, coord) }, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), required_aes = c("slope", "intercept"), draw_key = draw_key_abline ) ggplot2/R/geom-col.r0000644000177400001440000000227313005710223014105 0ustar murdochusers#' @export #' @rdname geom_bar geom_col <- function(mapping = NULL, data = NULL, position = "stack", ..., width = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = "identity", geom = GeomCol, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( width = width, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-rect.r GeomCol <- ggproto("GeomCol", GeomRect, required_aes = c("x", "y"), setup_data = function(data, params) { data$width <- data$width %||% params$width %||% (resolution(data$x, FALSE) * 0.9) transform(data, ymin = pmin(y, 0), ymax = pmax(y, 0), xmin = x - width / 2, xmax = x + width / 2, width = NULL ) }, draw_panel = function(self, data, panel_scales, coord, width = NULL) { # Hack to ensure that width is detected as a parameter ggproto_parent(GeomRect, self)$draw_panel(data, panel_scales, coord) } ) ggplot2/R/geom-bar.r0000644000177400001440000001150713006424561014104 0ustar murdochusers#' Bars charts #' #' There are two types of bar charts: \code{geom_bar} makes the height of the #' bar proportional to the number of cases in each group (or if the #' \code{weight} aethetic is supplied, the sum of the weights). If you want the #' heights of the bars to represent values in the data, use #' \link{geom_col} instead. \code{geom_bar} uses \code{stat_count} by #' default: it counts the number of cases at each x position. \code{geom_col} #' uses \code{stat_identity}: it leaves the data as is. #' #' A bar chart uses height to represent a value, and so the base of the #' bar must always be shown to produce a valid visual comparison. Naomi Robbins #' has a nice #' \href{http://www.b-eye-network.com/view/index.php?cid=2468}{article on this #' topic}. This is why it doesn't make sense to use a log-scaled y axis with a #' bar chart. #' #' By default, multiple bar occupying the same \code{x} position will be #' stacked atop one another by \code{\link{position_stack}}. If you want them #' to be dodged side-to-side, use \code{\link{position_dodge}}. Finally, #' \code{\link{position_fill}} shows relative proportions at each \code{x} by #' stacking the bars and then standardising each bar to have the same height. #' #' @section Aesthetics: #' \aesthetics{geom}{bar} #' #' @seealso #' \code{\link{geom_histogram}} for continuous data, #' \code{\link{position_dodge}} for creating side-by-side barcharts. #' @export #' @inheritParams layer #' @inheritParams geom_point #' @param width Bar width. By default, set to 90\% of the resolution of the data. #' @param binwidth \code{geom_bar} no longer has a binwidth argument - if #' you use it you'll get an warning telling to you use #' \code{\link{geom_histogram}} instead. #' @param geom,stat Override the default connection between \code{geom_bar} and #' \code{stat_count}. #' @examples #' # geom_bar is designed to make it easy to create bar charts that show #' # counts (or sums of weights) #' g <- ggplot(mpg, aes(class)) #' # Number of cars in each class: #' g + geom_bar() #' # Total engine displacement of each class #' g + geom_bar(aes(weight = displ)) #' #' # To show (e.g.) means, you need geom_col() #' # And, even more succinctly with geom_col() #' df <- data.frame(trt = c("a", "b", "c"), outcome = c(2.3, 1.9, 3.2)) #' ggplot(df, aes(trt, outcome)) + #' geom_col() #' # But geom_point() displays exactly the same information and doesn't #' # require the y-axis to touch zero. #' ggplot(df, aes(trt, outcome)) + #' geom_point() #' #' # You can also use geom_bar() with continuous data, in which case #' # it will show counts at unique locations #' df <- data.frame(x = rep(c(2.9, 3.1, 4.5), c(5, 10, 4))) #' ggplot(df, aes(x)) + geom_bar() #' # cf. a histogram of the same data #' ggplot(df, aes(x)) + geom_histogram(binwidth = 0.5) #' #' \donttest{ #' # Bar charts are automatically stacked when multiple bars are placed #' # at the same location #' g + geom_bar(aes(fill = drv)) #' #' # You can instead dodge, or fill them #' g + geom_bar(aes(fill = drv), position = "dodge") #' g + geom_bar(aes(fill = drv), position = "fill") #' #' # To change plot order of bars, change levels in underlying factor #' reorder_size <- function(x) { #' factor(x, levels = names(sort(table(x)))) #' } #' ggplot(mpg, aes(reorder_size(class))) + geom_bar() #' } geom_bar <- function(mapping = NULL, data = NULL, stat = "count", position = "stack", ..., width = NULL, binwidth = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { if (!is.null(binwidth)) { warning("`geom_bar()` no longer has a `binwidth` parameter. ", "Please use `geom_histogram()` instead.", call. = "FALSE") return(geom_histogram(mapping = mapping, data = data, position = position, width = width, binwidth = binwidth, ..., na.rm = na.rm, show.legend = show.legend, inherit.aes = inherit.aes)) } layer( data = data, mapping = mapping, stat = stat, geom = GeomBar, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( width = width, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-rect.r GeomBar <- ggproto("GeomBar", GeomRect, required_aes = c("x", "y"), setup_data = function(data, params) { data$width <- data$width %||% params$width %||% (resolution(data$x, FALSE) * 0.9) transform(data, ymin = pmin(y, 0), ymax = pmax(y, 0), xmin = x - width / 2, xmax = x + width / 2, width = NULL ) }, draw_panel = function(self, data, panel_scales, coord, width = NULL) { # Hack to ensure that width is detected as a parameter ggproto_parent(GeomRect, self)$draw_panel(data, panel_scales, coord) } ) ggplot2/R/facet-grid-.r0000644000177400001440000004263713006173071014502 0ustar murdochusers#' @include facet-.r NULL #' Lay out panels in a grid #' #' \code{facet_grid} forms a matrix of panels defined by row and column #' facetting variables. It is most useful when you have two discrete #' variables, and all combinations of the variables exist in the data. #' #' @param facets a formula with the rows (of the tabular display) on the LHS #' and the columns (of the tabular display) on the RHS; the dot in the #' formula is used to indicate there should be no faceting on this dimension #' (either row or column). The formula can also be provided as a string #' instead of a classical formula object #' @param margins either a logical value or a character #' vector. Margins are additional facets which contain all the data #' for each of the possible values of the faceting variables. If #' \code{FALSE}, no additional facets are included (the #' default). If \code{TRUE}, margins are included for all faceting #' variables. If specified as a character vector, it is the names of #' variables for which margins are to be created. #' @param scales Are scales shared across all facets (the default, #' \code{"fixed"}), or do they vary across rows (\code{"free_x"}), #' columns (\code{"free_y"}), or both rows and columns (\code{"free"}) #' @param space If \code{"fixed"}, the default, all panels have the same size. #' If \code{"free_y"} their height will be proportional to the length of the #' y scale; if \code{"free_x"} their width will be proportional to the #' length of the x scale; or if \code{"free"} both height and width will #' vary. This setting has no effect unless the appropriate scales also vary. #' @param labeller A function that takes one data frame of labels and #' returns a list or data frame of character vectors. Each input #' column corresponds to one factor. Thus there will be more than #' one with formulae of the type \code{~cyl + am}. Each output #' column gets displayed as one separate line in the strip #' label. This function should inherit from the "labeller" S3 class #' for compatibility with \code{\link{labeller}()}. See #' \code{\link{label_value}} for more details and pointers to other #' options. #' @param as.table If \code{TRUE}, the default, the facets are laid out like #' a table with highest values at the bottom-right. If \code{FALSE}, the #' facets are laid out like a plot with the highest value at the top-right. #' @param switch By default, the labels are displayed on the top and #' right of the plot. If \code{"x"}, the top labels will be #' displayed to the bottom. If \code{"y"}, the right-hand side #' labels will be displayed to the left. Can also be set to #' \code{"both"}. #' @param shrink If \code{TRUE}, will shrink scales to fit output of #' statistics, not raw data. If \code{FALSE}, will be range of raw data #' before statistical summary. #' @param drop If \code{TRUE}, the default, all factor levels not used in the #' data will automatically be dropped. If \code{FALSE}, all factor levels #' will be shown, regardless of whether or not they appear in the data. #' @export #' @examples #' p <- ggplot(mpg, aes(displ, cty)) + geom_point() #' #' p + facet_grid(. ~ cyl) #' p + facet_grid(drv ~ .) #' p + facet_grid(drv ~ cyl) #' #' # To change plot order of facet grid, #' # change the order of variable levels with factor() #' #' # If you combine a facetted dataset with a dataset that lacks those #' # facetting variables, the data will be repeated across the missing #' # combinations: #' df <- data.frame(displ = mean(mpg$displ), cty = mean(mpg$cty)) #' p + #' facet_grid(. ~ cyl) + #' geom_point(data = df, colour = "red", size = 2) #' #' # Free scales ------------------------------------------------------- #' # You can also choose whether the scales should be constant #' # across all panels (the default), or whether they should be allowed #' # to vary #' mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + #' geom_point() #' #' mt + facet_grid(. ~ cyl, scales = "free") #' #' # If scales and space are free, then the mapping between position #' # and values in the data will be the same across all panels. This #' # is particularly useful for categorical axes #' ggplot(mpg, aes(drv, model)) + #' geom_point() + #' facet_grid(manufacturer ~ ., scales = "free", space = "free") + #' theme(strip.text.y = element_text(angle = 0)) #' #' # Facet labels ------------------------------------------------------ #' p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() #' p #' #' # label_both() displays both variable name and value #' p + facet_grid(vs ~ cyl, labeller = label_both) #' #' # label_parsed() parses text into mathematical expressions, see ?plotmath #' mtcars$cyl2 <- factor(mtcars$cyl, labels = c("alpha", "beta", "sqrt(x, y)")) #' ggplot(mtcars, aes(wt, mpg)) + #' geom_point() + #' facet_grid(. ~ cyl2, labeller = label_parsed) #' #' # label_bquote() makes it easy to construct math expressions #' p + facet_grid(. ~ vs, labeller = label_bquote(cols = alpha ^ .(vs))) #' #' # The facet strips can be displayed near the axes with switch #' data <- transform(mtcars, #' am = factor(am, levels = 0:1, c("Automatic", "Manual")), #' gear = factor(gear, levels = 3:5, labels = c("Three", "Four", "Five")) #' ) #' p <- ggplot(data, aes(mpg, disp)) + geom_point() #' p + facet_grid(am ~ gear, switch = "both") #' # It looks better without boxes around the strips #' p + facet_grid(am ~ gear, switch = "both") + #' theme(strip.background = element_blank()) #' #' # Margins ---------------------------------------------------------- #' \donttest{ #' # Margins can be specified by logically (all yes or all no) or by specific #' # variables as (character) variable names #' mg <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() #' mg + facet_grid(vs + am ~ gear) #' mg + facet_grid(vs + am ~ gear, margins = TRUE) #' mg + facet_grid(vs + am ~ gear, margins = "am") #' # when margins are made over "vs", since the facets for "am" vary #' # within the values of "vs", the marginal facet for "vs" is also #' # a margin over "am". #' mg + facet_grid(vs + am ~ gear, margins = "vs") #' mg + facet_grid(vs + am ~ gear, margins = "gear") #' mg + facet_grid(vs + am ~ gear, margins = c("gear", "am")) #' } #' @importFrom plyr as.quoted facet_grid <- function(facets, margins = FALSE, scales = "fixed", space = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, switch = NULL, drop = TRUE) { scales <- match.arg(scales, c("fixed", "free_x", "free_y", "free")) free <- list( x = any(scales %in% c("free_x", "free")), y = any(scales %in% c("free_y", "free")) ) space <- match.arg(space, c("fixed", "free_x", "free_y", "free")) space_free <- list( x = any(space %in% c("free_x", "free")), y = any(space %in% c("free_y", "free")) ) if (!is.null(switch) && !switch %in% c("both", "x", "y")) { stop("switch must be either 'both', 'x', or 'y'", call. = FALSE) } # Facets can either be a formula, a string, or a list of things to be # convert to quoted if (is.character(facets)) { facets <- stats::as.formula(facets) } if (is.formula(facets)) { lhs <- function(x) if (length(x) == 2) NULL else x[-3] rhs <- function(x) if (length(x) == 2) x else x[-2] rows <- as.quoted(lhs(facets)) rows <- rows[!sapply(rows, identical, as.name("."))] cols <- as.quoted(rhs(facets)) cols <- cols[!sapply(cols, identical, as.name("."))] } if (is.list(facets)) { rows <- as.quoted(facets[[1]]) cols <- as.quoted(facets[[2]]) } if (length(rows) + length(cols) == 0) { stop("Must specify at least one variable to facet by", call. = FALSE) } # Check for deprecated labellers labeller <- check_labeller(labeller) ggproto(NULL, FacetGrid, shrink = shrink, params = list(rows = rows, cols = cols, margins = margins, free = free, space_free = space_free, labeller = labeller, as.table = as.table, switch = switch, drop = drop) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export FacetGrid <- ggproto("FacetGrid", Facet, shrink = TRUE, compute_layout = function(data, params) { rows <- as.quoted(params$rows) cols <- as.quoted(params$cols) base_rows <- combine_vars(data, params$plot_env, rows, drop = params$drop) if (!params$as.table) { rev_order <- function(x) factor(x, levels = rev(ulevels(x))) base_rows[] <- lapply(base_rows, rev_order) } base_cols <- combine_vars(data, params$plot_env, cols, drop = params$drop) base <- df.grid(base_rows, base_cols) # Add margins base <- reshape2::add_margins(base, list(names(rows), names(cols)), params$margins) # Work around bug in reshape2 base <- unique(base) # Create panel info dataset panel <- plyr::id(base, drop = TRUE) panel <- factor(panel, levels = seq_len(attr(panel, "n"))) rows <- if (is.null(names(rows))) 1L else plyr::id(base[names(rows)], drop = TRUE) cols <- if (is.null(names(cols))) 1L else plyr::id(base[names(cols)], drop = TRUE) panels <- data.frame(PANEL = panel, ROW = rows, COL = cols, base, check.names = FALSE, stringsAsFactors = FALSE) panels <- panels[order(panels$PANEL), , drop = FALSE] rownames(panels) <- NULL panels$SCALE_X <- if (params$free$x) panels$COL else 1L panels$SCALE_Y <- if (params$free$y) panels$ROW else 1L panels }, map_data = function(data, layout, params) { if (empty(data)) { return(cbind(data, PANEL = integer(0))) } rows <- as.quoted(params$rows) cols <- as.quoted(params$cols) vars <- c(names(rows), names(cols)) # Compute facetting values and add margins margin_vars <- list(intersect(names(rows), names(data)), intersect(names(cols), names(data))) data <- reshape2::add_margins(data, margin_vars, params$margins) facet_vals <- eval_facet_vars(c(rows, cols), data, params$plot_env) # If any facetting variables are missing, add them in by # duplicating the data missing_facets <- setdiff(vars, names(facet_vals)) if (length(missing_facets) > 0) { to_add <- unique(layout[missing_facets]) data_rep <- rep.int(1:nrow(data), nrow(to_add)) facet_rep <- rep(1:nrow(to_add), each = nrow(data)) data <- plyr::unrowname(data[data_rep, , drop = FALSE]) facet_vals <- plyr::unrowname(cbind( facet_vals[data_rep, , drop = FALSE], to_add[facet_rep, , drop = FALSE])) } # Add PANEL variable if (nrow(facet_vals) == 0) { # Special case of no facetting data$PANEL <- NO_PANEL } else { facet_vals[] <- lapply(facet_vals[], as.factor) facet_vals[] <- lapply(facet_vals[], addNA, ifany = TRUE) keys <- plyr::join.keys(facet_vals, layout, by = vars) data$PANEL <- layout$PANEL[match(keys$x, keys$y)] } data[order(data$PANEL), , drop = FALSE] }, draw_panels = function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) { cols <- which(layout$ROW == 1) rows <- which(layout$COL == 1) axes <- render_axes(ranges[cols], ranges[rows], coord, theme, transpose = TRUE) col_vars <- unique(layout[names(params$cols)]) row_vars <- unique(layout[names(params$rows)]) # Adding labels metadata, useful for labellers attr(col_vars, "type") <- "cols" attr(col_vars, "facet") <- "grid" attr(row_vars, "type") <- "rows" attr(row_vars, "facet") <- "grid" strips <- render_strips(col_vars, row_vars, params$labeller, theme) aspect_ratio <- theme$aspect.ratio if (is.null(aspect_ratio) && !params$free$x && !params$free$y) { aspect_ratio <- coord$aspect(ranges[[1]]) } if (is.null(aspect_ratio)) { aspect_ratio <- 1 respect <- FALSE } else { respect <- TRUE } ncol <- max(layout$COL) nrow <- max(layout$ROW) panel_table <- matrix(panels, nrow = nrow, ncol = ncol, byrow = TRUE) # @kohske # Now size of each panel is calculated using PANEL$ranges, which is given by # coord_train called by train_range. # So here, "scale" need not to be referred. # # In general, panel has all information for building facet. if (params$space_free$x) { ps <- layout$PANEL[layout$ROW == 1] widths <- vapply(ps, function(i) diff(ranges[[i]]$x.range), numeric(1)) panel_widths <- unit(widths, "null") } else { panel_widths <- rep(unit(1, "null"), ncol) } if (params$space_free$y) { ps <- layout$PANEL[layout$COL == 1] heights <- vapply(ps, function(i) diff(ranges[[i]]$y.range), numeric(1)) panel_heights <- unit(heights, "null") } else { panel_heights <- rep(unit(1 * aspect_ratio, "null"), nrow) } panel_table <- gtable_matrix("layout", panel_table, panel_widths, panel_heights, respect = respect, clip = "on", z = matrix(1, ncol = ncol, nrow = nrow)) panel_table$layout$name <- paste0('panel-', rep(seq_len(ncol), nrow), '-', rep(seq_len(nrow), each = ncol)) panel_table <- gtable_add_col_space(panel_table, theme$panel.spacing.x %||% theme$panel.spacing) panel_table <- gtable_add_row_space(panel_table, theme$panel.spacing.y %||% theme$panel.spacing) # Add axes panel_table <- gtable_add_rows(panel_table, max_height(axes$x$top), 0) panel_table <- gtable_add_rows(panel_table, max_height(axes$x$bottom), -1) panel_table <- gtable_add_cols(panel_table, max_width(axes$y$left), 0) panel_table <- gtable_add_cols(panel_table, max_width(axes$y$right), -1) panel_pos_col <- panel_cols(panel_table) panel_pos_rows <- panel_rows(panel_table) panel_table <- gtable_add_grob(panel_table, axes$x$top, 1, panel_pos_col$l, clip = "off", name = paste0("axis-t-", seq_along(axes$x$top)), z = 3) panel_table <- gtable_add_grob(panel_table, axes$x$bottom, -1, panel_pos_col$l, clip = "off", name = paste0("axis-b-", seq_along(axes$x$bottom)), z = 3) panel_table <- gtable_add_grob(panel_table, axes$y$left, panel_pos_rows$t, 1, clip = "off", name = paste0("axis-l-", seq_along(axes$y$left)), z = 3) panel_table <- gtable_add_grob(panel_table, axes$y$right, panel_pos_rows$t, -1, clip = "off", name = paste0("axis-r-", seq_along(axes$y$right)), z= 3) # Add strips switch_x <- !is.null(params$switch) && params$switch %in% c("both", "x") switch_y <- !is.null(params$switch) && params$switch %in% c("both", "y") inside_x <- (theme$strip.placement.x %||% theme$strip.placement %||% "inside") == "inside" inside_y <- (theme$strip.placement.y %||% theme$strip.placement %||% "inside") == "inside" strip_padding <- convertUnit(theme$strip.switch.pad.grid, "cm") panel_pos_col <- panel_cols(panel_table) if (switch_x) { if (!is.null(strips$x$bottom)) { if (inside_x) { panel_table <- gtable_add_rows(panel_table, max_height(strips$x$bottom), -2) panel_table <- gtable_add_grob(panel_table, strips$x$bottom, -2, panel_pos_col$l, clip = "on", name = paste0("strip-b-", seq_along(strips$x$bottom)), z = 2) } else { panel_table <- gtable_add_rows(panel_table, strip_padding, -1) panel_table <- gtable_add_rows(panel_table, max_height(strips$x$bottom), -1) panel_table <- gtable_add_grob(panel_table, strips$x$bottom, -1, panel_pos_col$l, clip = "on", name = paste0("strip-b-", seq_along(strips$x$bottom)), z = 2) } } } else { if (!is.null(strips$x$top)) { if (inside_x) { panel_table <- gtable_add_rows(panel_table, max_height(strips$x$top), 1) panel_table <- gtable_add_grob(panel_table, strips$x$top, 2, panel_pos_col$l, clip = "on", name = paste0("strip-t-", seq_along(strips$x$top)), z = 2) } else { panel_table <- gtable_add_rows(panel_table, strip_padding, 0) panel_table <- gtable_add_rows(panel_table, max_height(strips$x$top), 0) panel_table <- gtable_add_grob(panel_table, strips$x$top, 1, panel_pos_col$l, clip = "on", name = paste0("strip-t-", seq_along(strips$x$top)), z = 2) } } } panel_pos_rows <- panel_rows(panel_table) if (switch_y) { if (!is.null(strips$y$left)) { if (inside_y) { panel_table <- gtable_add_cols(panel_table, max_width(strips$y$left), 1) panel_table <- gtable_add_grob(panel_table, strips$y$left, panel_pos_rows$t, 2, clip = "on", name = paste0("strip-l-", seq_along(strips$y$left)), z = 2) } else { panel_table <- gtable_add_cols(panel_table, strip_padding, 0) panel_table <- gtable_add_cols(panel_table, max_width(strips$y$left), 0) panel_table <- gtable_add_grob(panel_table, strips$y$left, panel_pos_rows$t, 1, clip = "on", name = paste0("strip-l-", seq_along(strips$y$left)), z = 2) } } } else { if (!is.null(strips$y$right)) { if (inside_y) { panel_table <- gtable_add_cols(panel_table, max_width(strips$y$right), -2) panel_table <- gtable_add_grob(panel_table, strips$y$right, panel_pos_rows$t, -2, clip = "on", name = paste0("strip-r-", seq_along(strips$y$right)), z = 2) } else { panel_table <- gtable_add_cols(panel_table, strip_padding, -1) panel_table <- gtable_add_cols(panel_table, max_width(strips$y$right), -1) panel_table <- gtable_add_grob(panel_table, strips$y$right, panel_pos_rows$t, -1, clip = "on", name = paste0("strip-r-", seq_along(strips$y$right)), z = 2) } } } panel_table } ) # Helpers ----------------------------------------------------------------- ulevels <- function(x) { if (is.factor(x)) { x <- addNA(x, TRUE) factor(levels(x), levels(x), exclude = NULL) } else { sort(unique(x)) } } ggplot2/R/zxx.r0000644000177400001440000000407212653500716013247 0ustar murdochusers# Default scales ------------------------------------------------------------- #' @export #' @rdname scale_hue #' @usage NULL scale_colour_discrete <- scale_colour_hue #' @export #' @rdname scale_gradient #' @usage NULL scale_colour_continuous <- scale_colour_gradient #' @export #' @rdname scale_gradient #' @usage NULL scale_colour_datetime <- function() { scale_colour_continuous(trans = "time") } #' @export #' @rdname scale_gradient #' @usage NULL scale_colour_date <- function() { scale_colour_continuous(trans = "date") } #' @export #' @rdname scale_hue #' @usage NULL scale_fill_discrete <- scale_fill_hue #' @export #' @rdname scale_gradient #' @usage NULL scale_fill_continuous <- scale_fill_gradient #' @export #' @rdname scale_gradient #' @usage NULL scale_fill_datetime <- function() { scale_fill_continuous(trans = "time") } #' @export #' @rdname scale_gradient #' @usage NULL scale_fill_date <- function() { scale_fill_continuous(trans = "date") } # British to American spellings ---------------------------------------------- #' @export #' @rdname scale_brewer #' @usage NULL scale_color_brewer <- scale_colour_brewer #' @export #' @rdname scale_brewer #' @usage NULL scale_color_distiller <- scale_colour_distiller #' @export #' @rdname scale_gradient #' @usage NULL scale_color_continuous <- scale_colour_gradient #' @export #' @rdname scale_hue #' @usage NULL scale_color_discrete <- scale_colour_hue #' @export #' @rdname scale_gradient #' @usage NULL scale_color_gradient <- scale_colour_gradient #' @export #' @rdname scale_gradient #' @usage NULL scale_color_gradient2 <- scale_colour_gradient2 #' @export #' @rdname scale_gradient #' @usage NULL scale_color_gradientn <- scale_colour_gradientn #' @export #' @rdname scale_grey #' @usage NULL scale_color_grey <- scale_colour_grey #' @export #' @rdname scale_hue #' @usage NULL scale_color_hue <- scale_colour_hue #' @export #' @rdname scale_identity #' @usage NULL scale_color_identity <- scale_colour_identity #' @export #' @rdname scale_manual #' @usage NULL scale_color_manual <- scale_colour_manual ggplot2/R/geom-.r0000644000177400001440000001370313006201573013413 0ustar murdochusers#' @include legend-draw.r NULL #' @section Geoms: #' #' All \code{geom_*} functions (like \code{geom_point}) return a layer that #' contains a \code{Geom*} object (like \code{GeomPoint}). The \code{Geom*} #' object is responsible for rendering the data in the plot. #' #' Each of the \code{Geom*} objects is a \code{\link{ggproto}} object, descended #' from the top-level \code{Geom}, and each implements various methods and #' fields. To create a new type of Geom object, you typically will want to #' implement one or more of the following: #' #' Compared to \code{Stat} and \code{Position}, \code{Geom} is a little #' different because the execution of the setup and compute functions is #' split up. \code{setup_data} runs before position adjustments, and #' \code{draw_layer} is not run until render time, much later. This #' means there is no \code{setup_params} because it's hard to communicate #' the changes. #' #' \itemize{ #' \item Override either \code{draw_panel(self, data, panel_scales, coord)} or #' \code{draw_group(self, data, panel_scales, coord)}. \code{draw_panel} is #' called once per panel, \code{draw_group} is called once per group. #' #' Use \code{draw_panel} if each row in the data represents a #' single element. Use \code{draw_group} if each group represents #' an element (e.g. a smooth, a violin). #' #' \code{data} is a data frame of scaled aesthetics. \code{panel_scales} #' is a list containing information about the scales in the current #' panel. \code{coord} is a coordinate specification. You'll #' need to call \code{coord$transform(data, panel_scales)} to work #' with non-Cartesian coords. To work with non-linear coordinate systems, #' you typically need to convert into a primitive geom (e.g. point, path #' or polygon), and then pass on to the corresponding draw method #' for munching. #' #' Must return a grob. Use \code{\link{zeroGrob}} if there's nothing to #' draw. #' \item \code{draw_key}: Renders a single legend key. #' \item \code{required_aes}: A character vector of aesthetics needed to #' render the geom. #' \item \code{default_aes}: A list (generated by \code{\link{aes}()} of #' default values for aesthetics. #' \item \code{reparameterise}: Converts width and height to xmin and xmax, #' and ymin and ymax values. It can potentially set other values as well. #' } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export Geom <- ggproto("Geom", required_aes = character(), non_missing_aes = character(), optional_aes = character(), default_aes = aes(), draw_key = draw_key_point, handle_na = function(self, data, params) { remove_missing(data, params$na.rm, c(self$required_aes, self$non_missing_aes), snake_class(self) ) }, draw_layer = function(self, data, params, layout, coord) { if (empty(data)) { n <- if (is.factor(data$PANEL)) nlevels(data$PANEL) else 1L return(rep(list(zeroGrob()), n)) } # Trim off extra parameters params <- params[intersect(names(params), self$parameters())] args <- c(list(quote(data), quote(panel_scales), quote(coord)), params) plyr::dlply(data, "PANEL", function(data) { if (empty(data)) return(zeroGrob()) panel_scales <- layout$panel_ranges[[data$PANEL[1]]] do.call(self$draw_panel, args) }, .drop = FALSE) }, draw_panel = function(self, data, panel_scales, coord, ...) { groups <- split(data, factor(data$group)) grobs <- lapply(groups, function(group) { self$draw_group(group, panel_scales, coord, ...) }) ggname(snake_class(self), gTree( children = do.call("gList", grobs) )) }, draw_group = function(self, data, panel_scales, coord) { stop("Not implemented") }, setup_data = function(data, params) data, # Combine data with defaults and set aesthetics from parameters use_defaults = function(self, data, params = list()) { # Fill in missing aesthetics with their defaults missing_aes <- setdiff(names(self$default_aes), names(data)) if (empty(data)) { data <- plyr::quickdf(self$default_aes[missing_aes]) } else { data[missing_aes] <- self$default_aes[missing_aes] } # Override mappings with params aes_params <- intersect(self$aesthetics(), names(params)) check_aesthetics(params[aes_params], nrow(data)) data[aes_params] <- params[aes_params] data }, # Most parameters for the geom are taken automatically from draw_panel() or # draw_groups(). However, some additional parameters may be needed # for setup_data() or handle_na(). These can not be imputed automatically, # so the slightly hacky "extra_params" field is used instead. By # default it contains `na.rm` extra_params = c("na.rm"), parameters = function(self, extra = FALSE) { # Look first in draw_panel. If it contains ... then look in draw groups panel_args <- names(ggproto_formals(self$draw_panel)) group_args <- names(ggproto_formals(self$draw_group)) args <- if ("..." %in% panel_args) group_args else panel_args # Remove arguments of defaults args <- setdiff(args, names(ggproto_formals(Geom$draw_group))) if (extra) { args <- union(args, self$extra_params) } args }, aesthetics = function(self) { c(union(self$required_aes, names(self$default_aes)), self$optional_aes, "group") } ) #' Graphical units #' #' Multiply size in mm by these constants in order to convert to the units #' that grid uses internally for \code{lwd} and \code{fontsize}. #' #' @name graphical-units #' @keywords internal #' @aliases NULL NULL #' @export #' @rdname graphical-units .pt <- 72.27 / 25.4 #' @export #' @rdname graphical-units .stroke <- 96 / 25.4 check_aesthetics <- function(x, n) { ns <- vapply(x, length, numeric(1)) good <- ns == 1L | ns == n if (all(good)) { return() } stop( "Aesthetics must be either length 1 or the same as the data (", n, "): ", paste(names(!good), collapse = ", "), call. = FALSE ) } ggplot2/R/coord-map.r0000644000177400001440000002166113006200261014263 0ustar murdochusers#' Map projections #' #' \code{coord_map} projects a portion of the earth, which is approximately #' spherical, onto a flat 2D plane using any projection defined by the #' \code{mapproj} package. Map projections do not, in general, preserve straight #' lines, so this requires considerable computation. \code{coord_quickmap} is a #' quick approximation that does preserve straight lines. It works best for #' smaller areas closer to the equator. #' #' In general, map projections must account for the fact that the actual length #' (in km) of one degree of longitude varies between the equator and the pole. #' Near the equator, the ratio between the lengths of one degree of latitude and #' one degree of longitude is approximately 1. Near the pole, it is tends #' towards infinity because the length of one degree of longitude tends towards #' 0. For regions that span only a few degrees and are not too close to the #' poles, setting the aspect ratio of the plot to the appropriate lat/lon ratio #' approximates the usual mercator projection. This is what #' \code{coord_quickmap} does, and is much faster (particularly for complex #' plots like \code{\link{geom_tile}}) at the expense of correctness. #' #' @param projection projection to use, see #' \code{\link[mapproj]{mapproject}} for list #' @param ...,parameters Other arguments passed on to #' \code{\link[mapproj]{mapproject}}. Use \code{...} for named parameters to #' the projection, and \code{parameters} for unnamed parameters. #' \code{...} is ignored if the \code{parameters} argument is present. #' @param orientation projection orientation, which defaults to #' \code{c(90, 0, mean(range(x)))}. This is not optimal for many #' projections, so you will have to supply your own. See #' \code{\link[mapproj]{mapproject}} for more information. #' @param xlim,ylim Manually specific x/y limits (in degrees of #' longitude/latitude) #' @export #' @examples #' if (require("maps")) { #' nz <- map_data("nz") #' # Prepare a map of NZ #' nzmap <- ggplot(nz, aes(x = long, y = lat, group = group)) + #' geom_polygon(fill = "white", colour = "black") #' #' # Plot it in cartesian coordinates #' nzmap #' # With correct mercator projection #' nzmap + coord_map() #' # With the aspect ratio approximation #' nzmap + coord_quickmap() #' #' # Other projections #' nzmap + coord_map("cylindrical") #' nzmap + coord_map("azequalarea", orientation = c(-36.92, 174.6, 0)) #' nzmap + coord_map("lambert", parameters = c(-37, -44)) #' #' states <- map_data("state") #' usamap <- ggplot(states, aes(long, lat, group = group)) + #' geom_polygon(fill = "white", colour = "black") #' #' # Use cartesian coordinates #' usamap #' # With mercator projection #' usamap + coord_map() #' usamap + coord_quickmap() #' # See ?mapproject for coordinate systems and their parameters #' usamap + coord_map("gilbert") #' usamap + coord_map("lagrange") #' #' # For most projections, you'll need to set the orientation yourself #' # as the automatic selection done by mapproject is not available to #' # ggplot #' usamap + coord_map("orthographic") #' usamap + coord_map("stereographic") #' usamap + coord_map("conic", lat0 = 30) #' usamap + coord_map("bonne", lat0 = 50) #' #' # World map, using geom_path instead of geom_polygon #' world <- map_data("world") #' worldmap <- ggplot(world, aes(x = long, y = lat, group = group)) + #' geom_path() + #' scale_y_continuous(breaks = (-2:2) * 30) + #' scale_x_continuous(breaks = (-4:4) * 45) #' #' # Orthographic projection with default orientation (looking down at North pole) #' worldmap + coord_map("ortho") #' # Looking up up at South Pole #' worldmap + coord_map("ortho", orientation = c(-90, 0, 0)) #' # Centered on New York (currently has issues with closing polygons) #' worldmap + coord_map("ortho", orientation = c(41, -74, 0)) #' } coord_map <- function(projection="mercator", ..., parameters = NULL, orientation = NULL, xlim = NULL, ylim = NULL) { if (is.null(parameters)) { params <- list(...) } else { params <- parameters } ggproto(NULL, CoordMap, projection = projection, orientation = orientation, limits = list(x = xlim, y = ylim), params = params ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordMap <- ggproto("CoordMap", Coord, transform = function(self, data, scale_details) { trans <- mproject(self, data$x, data$y, scale_details$orientation) out <- cunion(trans[c("x", "y")], data) out$x <- rescale(out$x, 0:1, scale_details$x.proj) out$y <- rescale(out$y, 0:1, scale_details$y.proj) out }, distance = function(x, y, scale_details) { max_dist <- dist_central_angle(scale_details$x.range, scale_details$y.range) dist_central_angle(x, y) / max_dist }, aspect = function(ranges) { diff(ranges$y.proj) / diff(ranges$x.proj) }, train = function(self, scale_details) { # range in scale ranges <- list() for (n in c("x", "y")) { scale <- scale_details[[n]] limits <- self$limits[[n]] if (is.null(limits)) { range <- scale$dimension(expand_default(scale)) } else { range <- range(scale$transform(limits)) } ranges[[n]] <- range } orientation <- self$orientation %||% c(90, 0, mean(ranges$x)) # Increase chances of creating valid boundary region grid <- expand.grid( x = seq(ranges$x[1], ranges$x[2], length.out = 50), y = seq(ranges$y[1], ranges$y[2], length.out = 50) ) ret <- list(x = list(), y = list()) # range in map proj <- mproject(self, grid$x, grid$y, orientation)$range ret$x$proj <- proj[1:2] ret$y$proj <- proj[3:4] for (n in c("x", "y")) { out <- scale_details[[n]]$break_info(ranges[[n]]) ret[[n]]$range <- out$range ret[[n]]$major <- out$major_source ret[[n]]$minor <- out$minor_source ret[[n]]$labels <- out$labels } details <- list( orientation = orientation, x.range = ret$x$range, y.range = ret$y$range, x.proj = ret$x$proj, y.proj = ret$y$proj, x.major = ret$x$major, x.minor = ret$x$minor, x.labels = ret$x$labels, y.major = ret$y$major, y.minor = ret$y$minor, y.labels = ret$y$labels ) details }, render_bg = function(self, scale_details, theme) { xrange <- expand_range(scale_details$x.range, 0.2) yrange <- expand_range(scale_details$y.range, 0.2) # Limit ranges so that lines don't wrap around globe xmid <- mean(xrange) ymid <- mean(yrange) xrange[xrange < xmid - 180] <- xmid - 180 xrange[xrange > xmid + 180] <- xmid + 180 yrange[yrange < ymid - 90] <- ymid - 90 yrange[yrange > ymid + 90] <- ymid + 90 xgrid <- with(scale_details, expand.grid( y = c(seq(yrange[1], yrange[2], length.out = 50), NA), x = x.major )) ygrid <- with(scale_details, expand.grid( x = c(seq(xrange[1], xrange[2], length.out = 50), NA), y = y.major )) xlines <- self$transform(xgrid, scale_details) ylines <- self$transform(ygrid, scale_details) if (nrow(xlines) > 0) { grob.xlines <- element_render( theme, "panel.grid.major.x", xlines$x, xlines$y, default.units = "native" ) } else { grob.xlines <- zeroGrob() } if (nrow(ylines) > 0) { grob.ylines <- element_render( theme, "panel.grid.major.y", ylines$x, ylines$y, default.units = "native" ) } else { grob.ylines <- zeroGrob() } ggname("grill", grobTree( element_render(theme, "panel.background"), grob.xlines, grob.ylines )) }, render_axis_h = function(self, scale_details, theme) { arrange <- scale_details$x.arrange %||% c("primary", "secondary") if (is.null(scale_details$x.major)) { return(list( top = zeroGrob(), bottom = zeroGrob() )) } x_intercept <- with(scale_details, data.frame( x = x.major, y = y.range[1] )) pos <- self$transform(x_intercept, scale_details) axes <- list( bottom = guide_axis(pos$x, scale_details$x.labels, "bottom", theme), top = guide_axis(pos$x, scale_details$x.labels, "top", theme) ) axes[[which(arrange == "secondary")]] <- zeroGrob() axes }, render_axis_v = function(self, scale_details, theme) { arrange <- scale_details$y.arrange %||% c("primary", "secondary") if (is.null(scale_details$y.major)) { return(list( left = zeroGrob(), right = zeroGrob() )) } x_intercept <- with(scale_details, data.frame( x = x.range[1], y = y.major )) pos <- self$transform(x_intercept, scale_details) axes <- list( left = guide_axis(pos$y, scale_details$y.labels, "left", theme), right = guide_axis(pos$y, scale_details$y.labels, "right", theme) ) axes[[which(arrange == "secondary")]] <- zeroGrob() axes } ) mproject <- function(coord, x, y, orientation) { suppressWarnings(mapproj::mapproject(x, y, projection = coord$projection, parameters = coord$params, orientation = orientation )) } ggplot2/R/geom-bin2d.r0000644000177400001440000000262613005710333014332 0ustar murdochusers#' Heatmap of 2d bin counts #' #' Divides the plane into rectangles, counts the number of cases in #' each rectangle, and then (by default) maps the number of cases to the #' rectangle's fill. This is a useful alternative to \code{\link{geom_point}} #' in the presence of overplotting. #' #' @section Aesthetics: #' \aesthetics{stat}{bin2d} #' #' @export #' @inheritParams layer #' @inheritParams geom_point #' @param geom,stat Use to override the default connection between #' \code{geom_bin2d} and \code{stat_bin2d}. #' @seealso \code{\link{stat_binhex}} for hexagonal binning #' @examples #' d <- ggplot(diamonds, aes(x, y)) + xlim(4, 10) + ylim(4, 10) #' d + geom_bin2d() #' #' # You can control the size of the bins by specifying the number of #' # bins in each direction: #' d + geom_bin2d(bins = 10) #' d + geom_bin2d(bins = 30) #' #' # Or by specifying the width of the bins #' d + geom_bin2d(binwidth = c(0.1, 0.1)) geom_bin2d <- function(mapping = NULL, data = NULL, stat = "bin2d", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomTile, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } ggplot2/R/geom-jitter.r0000644000177400001440000000363013005734241014635 0ustar murdochusers#' Jittered points #' #' The jitter geom is a convenient shortcut for #' \code{geom_point(position = "jitter")}. It adds a small amount of random #' variation to the location of each point, and is a useful way of handling #' overplotting caused by discreteness in smaller datasets. #' #' @section Aesthetics: #' \aesthetics{geom}{point} #' #' @inheritParams layer #' @inheritParams geom_point #' @inheritParams position_jitter #' @seealso #' \code{\link{geom_point}} for regular, unjittered points, #' \code{\link{geom_boxplot}} for another way of looking at the conditional #' distribution of a variable #' @export #' @examples #' p <- ggplot(mpg, aes(cyl, hwy)) #' p + geom_point() #' p + geom_jitter() #' #' # Add aesthetic mappings #' p + geom_jitter(aes(colour = class)) #' #' # Use smaller width/height to emphasise categories #' ggplot(mpg, aes(cyl, hwy)) + geom_jitter() #' ggplot(mpg, aes(cyl, hwy)) + geom_jitter(width = 0.25) #' #' # Use larger width/height to completely smooth away discreteness #' ggplot(mpg, aes(cty, hwy)) + geom_jitter() #' ggplot(mpg, aes(cty, hwy)) + geom_jitter(width = 0.5, height = 0.5) geom_jitter <- function(mapping = NULL, data = NULL, stat = "identity", position = "jitter", ..., width = NULL, height = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { if (!missing(width) || !missing(height)) { if (!missing(position)) { stop("Specify either `position` or `width`/`height`", call. = FALSE) } position <- position_jitter(width = width, height = height) } layer( data = data, mapping = mapping, stat = stat, geom = GeomPoint, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } ggplot2/R/scale-manual.r0000644000177400001440000000450013006124237014745 0ustar murdochusers#' Create your own discrete scale #' #' This allows you to specify you own set of mappings from levels in the #' data to aesthetic values. #' #' @inheritParams scale_x_discrete #' @param values a set of aesthetic values to map data values to. If this #' is a named vector, then the values will be matched based on the names. #' If unnamed, values will be matched in order (usually alphabetical) with #' the limits of the scale. Any data values that don't match will be #' given \code{na.value}. #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = factor(cyl))) #' p + scale_colour_manual(values = c("red", "blue", "green")) #' #' # It's recommended to use a named vector #' cols <- c("8" = "red", "4" = "blue", "6" = "darkgreen", "10" = "orange") #' p + scale_colour_manual(values = cols) #' #' # As with other scales you can use breaks to control the appearance #' # of the legend. #' p + scale_colour_manual(values = cols) #' p + scale_colour_manual( #' values = cols, #' breaks = c("4", "6", "8"), #' labels = c("four", "six", "eight") #' ) #' #' # And limits to control the possible values of the scale #' p + scale_colour_manual(values = cols, limits = c("4", "8")) #' p + scale_colour_manual(values = cols, limits = c("4", "6", "8", "10")) #' @name scale_manual #' @aliases NULL NULL #' @rdname scale_manual #' @export scale_colour_manual <- function(..., values) { manual_scale("colour", values, ...) } #' @rdname scale_manual #' @export scale_fill_manual <- function(..., values) { manual_scale("fill", values, ...) } #' @rdname scale_manual #' @export scale_size_manual <- function(..., values) { manual_scale("size", values, ...) } #' @rdname scale_manual #' @export scale_shape_manual <- function(..., values) { manual_scale("shape", values, ...) } #' @rdname scale_manual #' @export scale_linetype_manual <- function(..., values) { manual_scale("linetype", values, ...) } #' @rdname scale_manual #' @export scale_alpha_manual <- function(..., values) { manual_scale("alpha", values, ...) } manual_scale <- function(aesthetic, values, ...) { pal <- function(n) { if (n > length(values)) { stop("Insufficient values in manual scale. ", n, " needed but only ", length(values), " provided.", call. = FALSE) } values } discrete_scale(aesthetic, "manual", pal, ...) } ggplot2/R/fortify-map.r0000644000177400001440000001067413006415612014651 0ustar murdochusers#' Fortify method for map objects #' #' This function turns a map into a data frame that can more easily be #' plotted with ggplot2. #' #' @export #' @seealso \code{\link{map_data}} and \code{\link{borders}} #' @param model map object #' @param data not used by this method #' @param ... not used by this method #' @keywords internal #' @examples #' if (require("maps")) { #' ca <- map("county", "ca", plot = FALSE, fill = TRUE) #' head(fortify(ca)) #' ggplot(ca, aes(long, lat)) + #' geom_polygon(aes(group = group)) #' #' tx <- map("county", "texas", plot = FALSE, fill = TRUE) #' head(fortify(tx)) #' ggplot(tx, aes(long, lat)) + #' geom_polygon(aes(group = group), colour = "white") #' } fortify.map <- function(model, data, ...) { df <- as.data.frame(model[c("x", "y")]) names(df) <- c("long", "lat") df$group <- cumsum(is.na(df$long) & is.na(df$lat)) + 1 df$order <- 1:nrow(df) names <- do.call("rbind", lapply(strsplit(model$names, "[:,]"), "[", 1:2)) df$region <- names[df$group, 1] df$subregion <- names[df$group, 2] df[stats::complete.cases(df$lat, df$long), ] } #' Create a data frame of map data #' #' Easily turn data from the \pkg{maps} package in to a data frame suitable #' for plotting with ggplot2. #' #' @param map name of map provided by the \pkg{maps} package. These #' include \code{\link[maps]{county}}, \code{\link[maps]{france}}, #' \code{\link[maps]{italy}}, \code{\link[maps]{nz}}, #' \code{\link[maps]{state}}, \code{\link[maps]{usa}}, #' \code{\link[maps]{world}}, \code{\link[maps]{world2}}. #' @param region name of subregions to include. Defaults to \code{.} which #' includes all subregion. See documentation for \code{\link[maps]{map}} #' for more details. #' @param exact should the \code{region} be treated as a regular expression #' (\code{FALSE}) or as a fixed string (\code{TRUE}). #' @param ... all other arguments passed on to \code{\link[maps]{map}} #' @keywords internal #' @export #' @examples #' if (require("maps")) { #' states <- map_data("state") #' arrests <- USArrests #' names(arrests) <- tolower(names(arrests)) #' arrests$region <- tolower(rownames(USArrests)) #' #' choro <- merge(states, arrests, sort = FALSE, by = "region") #' choro <- choro[order(choro$order), ] #' ggplot(choro, aes(long, lat)) + #' geom_polygon(aes(group = group, fill = assault)) + #' coord_map("albers", at0 = 45.5, lat1 = 29.5) #' #' ggplot(choro, aes(long, lat)) + #' geom_polygon(aes(group = group, fill = assault / murder)) + #' coord_map("albers", at0 = 45.5, lat1 = 29.5) #' } map_data <- function(map, region = ".", exact = FALSE, ...) { try_require("maps", "map_data") fortify(map(map, region, exact = exact, plot = FALSE, fill = TRUE, ...)) } #' Create a layer of map borders #' #' This is a quick and dirty way to get map data (from the maps package) #' on to your plot. This is a good place to start if you need some crude #' reference lines, but you'll typically want something more sophisticated #' for communication graphics. #' #' @param database map data, see \code{\link[maps]{map}} for details #' @param regions map region #' @param fill fill colour #' @param colour border colour #' @param xlim,ylim latitudinal and logitudinal range for extracting map #' polygons, see \code{\link[maps]{map}} for details. #' @param ... other arguments passed onto \code{\link{geom_polygon}} #' @export #' @examples #' if (require("maps")) { #' #' ia <- map_data("county", "iowa") #' mid_range <- function(x) mean(range(x)) #' seats <- plyr::ddply(ia, "subregion", plyr::colwise(mid_range, c("lat", "long"))) #' ggplot(ia, aes(long, lat)) + #' geom_polygon(aes(group = group), fill = NA, colour = "grey60") + #' geom_text(aes(label = subregion), data = seats, size = 2, angle = 45) #' #' data(us.cities) #' capitals <- subset(us.cities, capital == 2) #' ggplot(capitals, aes(long, lat)) + #' borders("state") + #' geom_point(aes(size = pop)) + #' scale_size_area() + #' coord_quickmap() #' #' # Same map, with some world context #' ggplot(capitals, aes(long, lat)) + #' borders("world", xlim = c(-130, -60), ylim = c(20, 50)) + #' geom_point(aes(size = pop)) + #' scale_size_area() + #' coord_quickmap() #' } borders <- function(database = "world", regions = ".", fill = NA, colour = "grey50", xlim = NULL, ylim = NULL, ...) { df <- map_data(database, regions, xlim = xlim, ylim = ylim) geom_polygon(aes_(~long, ~lat, group = ~group), data = df, fill = fill, colour = colour, ..., inherit.aes = FALSE) } ggplot2/R/geom-segment.r0000644000177400001440000001004213005734412014771 0ustar murdochusers#' Line segments and curves #' #' \code{geom_segment} draws a straight line between points (x, y) and #' (xend, yend). \code{geom_curve} draws a curved line. See the underlying #' drawing function \code{\link[grid]{curveGrob}} for the parameters that #' control the curve. #' #' Both geoms draw a single segment/curve per case. See \code{geom_path} if you #' need to connect points across multiple cases. #' #' @section Aesthetics: #' \aesthetics{geom}{segment} #' #' @inheritParams layer #' @inheritParams geom_point #' @param arrow specification for arrow heads, as created by arrow(). #' @param lineend Line end style (round, butt, square). #' @seealso \code{\link{geom_path}} and \code{\link{geom_line}} for multi- #' segment lines and paths. #' @seealso \code{\link{geom_spoke}} for a segment parameterised by a location #' (x, y), and an angle and radius. #' @export #' @examples #' b <- ggplot(mtcars, aes(wt, mpg)) + #' geom_point() #' #' df <- data.frame(x1 = 2.62, x2 = 3.57, y1 = 21.0, y2 = 15.0) #' b + #' geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2, colour = "curve"), data = df) + #' geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2, colour = "segment"), data = df) #' #' b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2), data = df, curvature = -0.2) #' b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2), data = df, curvature = 1) #' b + geom_curve( #' aes(x = x1, y = y1, xend = x2, yend = y2), #' data = df, #' arrow = arrow(length = unit(0.03, "npc")) #' ) #' #' ggplot(seals, aes(long, lat)) + #' geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat), #' arrow = arrow(length = unit(0.1,"cm"))) + #' borders("state") #' #' # You can also use geom_segment to recreate plot(type = "h") : #' counts <- as.data.frame(table(x = rpois(100,5))) #' counts$x <- as.numeric(as.character(counts$x)) #' with(counts, plot(x, Freq, type = "h", lwd = 10)) #' #' ggplot(counts, aes(x, Freq)) + #' geom_segment(aes(xend = x, yend = 0), size = 10, lineend = "butt") geom_segment <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., arrow = NULL, lineend = "butt", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomSegment, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( arrow = arrow, lineend = lineend, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomSegment <- ggproto("GeomSegment", Geom, required_aes = c("x", "y", "xend", "yend"), non_missing_aes = c("linetype", "size", "shape"), default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), draw_panel = function(data, panel_scales, coord, arrow = NULL, lineend = "butt", na.rm = FALSE) { data <- remove_missing(data, na.rm = na.rm, c("x", "y", "xend", "yend", "linetype", "size", "shape"), name = "geom_segment") if (empty(data)) return(zeroGrob()) if (coord$is_linear()) { coord <- coord$transform(data, panel_scales) return(segmentsGrob(coord$x, coord$y, coord$xend, coord$yend, default.units = "native", gp = gpar( col = alpha(coord$colour, coord$alpha), fill = alpha(coord$colour, coord$alpha), lwd = coord$size * .pt, lty = coord$linetype, lineend = lineend ), arrow = arrow )) } data$group <- 1:nrow(data) starts <- subset(data, select = c(-xend, -yend)) ends <- plyr::rename(subset(data, select = c(-x, -y)), c("xend" = "x", "yend" = "y"), warn_missing = FALSE) pieces <- rbind(starts, ends) pieces <- pieces[order(pieces$group),] GeomPath$draw_panel(pieces, panel_scales, coord, arrow = arrow, lineend = lineend) }, draw_key = draw_key_path ) ggplot2/R/limits.r0000644000177400001440000001043013005745075013713 0ustar murdochusers#' Set scale limits #' #' This is a shortcut for supplying the \code{limits} argument to the #' individual scales. Note that, by default, any values outside the limits #' will be replaced with \code{NA}. #' #' @param ... A name-value pair. The name must be an aesthetic, and the value #' must be either a length-2 numeric, a character, a factor, or a date/time. #' #' A numeric value will create a continuous scale. If the larger value #' comes first, the scale will be reversed. You can leave one value as #' \code{NA} to compute from the range of the data. #' #' A character or factor value will create a discrete scale. #' #' A date-time value will create a continuous date/time scale. #' @seealso For changing x or y axis limits \strong{without} dropping data #' observations, see \code{\link{coord_cartesian}}. To expand the range of #' a plot to always include certain values, see \code{\link{expand_limits}}. #' @export #' @examples #' # Zoom into a specified area #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point() + #' xlim(15, 20) #' #' # reverse scale #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point() + #' xlim(20, 15) #' #' # with automatic lower limit #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point() + #' xlim(NA, 20) #' #' # You can also supply limits that are larger than the data. #' # This is useful if you want to match scales across different plots #' small <- subset(mtcars, cyl == 4) #' big <- subset(mtcars, cyl > 4) #' #' ggplot(small, aes(mpg, wt, colour = factor(cyl))) + #' geom_point() + #' lims(colour = c("4", "6", "8")) #' #' ggplot(big, aes(mpg, wt, colour = factor(cyl))) + #' geom_point() + #' lims(colour = c("4", "6", "8")) lims <- function(...) { args <- list(...) if (any(!has_name(args))) { stop("All arguments must be named", call. = FALSE) } Map(limits, args, names(args)) } #' @export #' @rdname lims xlim <- function(...) { limits(c(...), "x") } #' @export #' @rdname lims ylim <- function(...) { limits(c(...), "y") } #' Generate correct scale type for specified limits #' #' @param limits vector of limits #' @param var name of variable #' @keywords internal #' @examples #' ggplot2:::limits(c(1, 5), "x") #' ggplot2:::limits(c(5, 1), "x") #' ggplot2:::limits(c("A", "b", "c"), "x") #' ggplot2:::limits(c("A", "b", "c"), "fill") #' ggplot2:::limits(as.Date(c("2008-01-01", "2009-01-01")), "x") limits <- function(lims, var) UseMethod("limits") #' @export limits.numeric <- function(lims, var) { stopifnot(length(lims) == 2) if (!any(is.na(lims)) && lims[1] > lims[2]) { trans <- "reverse" } else { trans <- "identity" } make_scale("continuous", var, limits = lims, trans = trans) } make_scale <- function(type, var, ...) { scale <- match.fun(paste("scale_", var, "_", type, sep = "")) scale(...) } #' @export limits.character <- function(lims, var) { make_scale("discrete", var, limits = lims) } #' @export limits.factor <- function(lims, var) { make_scale("discrete", var, limits = as.character(lims)) } #' @export limits.Date <- function(lims, var) { stopifnot(length(lims) == 2) make_scale("date", var, limits = lims) } #' @export limits.POSIXct <- function(lims, var) { stopifnot(length(lims) == 2) make_scale("datetime", var, limits = lims) } #' @export limits.POSIXlt <- function(lims, var) { stopifnot(length(lims) == 2) make_scale("datetime", var, limits = as.POSIXct(lims)) } #' Expand the plot limits, using data #' #' Sometimes you may want to ensure limits include a single value, for all #' panels or all plots. This function is a thin wrapper around #' \code{\link{geom_blank}} that makes it easy to add such values. #' #' @param ... named list of aesthetics specifying the value (or values) that #' should be included in each scale. #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() #' p + expand_limits(x = 0) #' p + expand_limits(y = c(1, 9)) #' p + expand_limits(x = 0, y = 0) #' #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = cyl)) + #' expand_limits(colour = seq(2, 10, by = 2)) #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = factor(cyl))) + #' expand_limits(colour = factor(seq(2, 10, by = 2))) expand_limits <- function(...) { data <- data.frame(..., stringsAsFactors = FALSE) geom_blank(aes_all(names(data)), data, inherit.aes = FALSE) } ggplot2/R/position-dodge.r0000644000177400001440000000451213005735776015351 0ustar murdochusers#' Dodge overlapping objects side-to-side #' #' Dodging preserves the vertical position of an geom while adjusting the #' horizontal position. #' #' @inheritParams position_identity #' @param width Dodging width, when different to the width of the individual #' elements. This is useful when you want to align narrow geoms with wider #' geoms. See the examples. #' @family position adjustments #' @export #' @examples #' ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + #' geom_bar(position = "dodge") #' \donttest{ #' ggplot(diamonds, aes(price, fill = cut)) + #' geom_histogram(position="dodge") #' # see ?geom_boxplot and ?geom_bar for more examples #' #' # In this case a frequency polygon is probably a better choice #' ggplot(diamonds, aes(price, colour = cut)) + #' geom_freqpoly() #' } #' #' # Dodging with various widths ------------------------------------- #' # To dodge items with different widths, you need to be explicit #' df <- data.frame(x = c("a","a","b","b"), y = 2:5, g = rep(1:2, 2)) #' p <- ggplot(df, aes(x, y, group = g)) + #' geom_col(position = "dodge", fill = "grey50", colour = "black") #' p #' #' # A line range has no width: #' p + geom_linerange(aes(ymin = y - 1, ymax = y + 1), position = "dodge") #' #' # So you must explicitly specify the width #' p + geom_linerange( #' aes(ymin = y - 1, ymax = y + 1), #' position = position_dodge(width = 0.9) #' ) #' #' # The same principle applies to error bars, which are usually #' # narrower than the bars #' p + geom_errorbar( #' aes(ymin = y - 1, ymax = y + 1), #' width = 0.2, #' position = "dodge" #' ) #' p + geom_errorbar( #' aes(ymin = y - 1, ymax = y + 1), #' width = 0.2, #' position = position_dodge(width = 0.9) #' ) position_dodge <- function(width = NULL) { ggproto(NULL, PositionDodge, width = width) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionDodge <- ggproto("PositionDodge", Position, required_aes = "x", width = NULL, setup_params = function(self, data) { if (is.null(data$xmin) && is.null(data$xmax) && is.null(self$width)) { warning("Width not defined. Set with `position_dodge(width = ?)`", call. = FALSE) } list(width = self$width) }, compute_panel = function(data, params, scales) { collide(data, params$width, "position_dodge", pos_dodge, check.width = FALSE) } ) ggplot2/R/geom-smooth.r0000644000177400001440000001050613005734576014660 0ustar murdochusers#' Smoothed conditional means #' #' Aids the eye in seeing patterns in the presence of overplotting. #' \code{geom_smooth} and \code{stat_smooth} are effectively aliases: they #' both use the same arguments. Use \code{geom_smooth} unless you want to #' display the results with a non-standard geom. #' #' Calculation is performed by the (currently undocumented) #' \code{predictdf} generic and its methods. For most methods the standard #' error bounds are computed using the \code{\link{predict}} method - the #' exceptions are \code{loess} which uses a t-based approximation, and #' \code{glm} where the normal confidence interval is constructed on the link #' scale, and then back-transformed to the response scale. #' #' @section Aesthetics: #' \aesthetics{geom}{smooth} #' #' @inheritParams layer #' @inheritParams geom_point #' @param geom,stat Use to override the default connection between #' \code{geom_smooth} and \code{stat_smooth}. #' @seealso See individual modelling functions for more details: #' \code{\link{lm}} for linear smooths, #' \code{\link{glm}} for generalised linear smooths, #' \code{\link{loess}} for local smooths #' @export #' @examples #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' geom_smooth() #' #' # Use span to control the "wiggliness" of the default loess smoother #' # The span is the fraction of points used to fit each local regression: #' # small numbers make a wigglier curve, larger numbers make a smoother curve. #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' geom_smooth(span = 0.3) #' #' # Instead of a loess smooth, you can use any other modelling function: #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' geom_smooth(method = "lm", se = FALSE) #' #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' geom_smooth(method = "lm", formula = y ~ splines::bs(x, 3), se = FALSE) #' #' # Smoothes are automatically fit to each group (defined by categorical #' # aesthetics or the group aesthetic) and for each facet #' #' ggplot(mpg, aes(displ, hwy, colour = class)) + #' geom_point() + #' geom_smooth(se = FALSE, method = "lm") #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' geom_smooth(span = 0.8) + #' facet_wrap(~drv) #' #' \donttest{ #' binomial_smooth <- function(...) { #' geom_smooth(method = "glm", method.args = list(family = "binomial"), ...) #' } #' # To fit a logistic regression, you need to coerce the values to #' # a numeric vector lying between 0 and 1. #' ggplot(rpart::kyphosis, aes(Age, Kyphosis)) + #' geom_jitter(height = 0.05) + #' binomial_smooth() #' #' ggplot(rpart::kyphosis, aes(Age, as.numeric(Kyphosis) - 1)) + #' geom_jitter(height = 0.05) + #' binomial_smooth() #' #' ggplot(rpart::kyphosis, aes(Age, as.numeric(Kyphosis) - 1)) + #' geom_jitter(height = 0.05) + #' binomial_smooth(formula = y ~ splines::ns(x, 2)) #' #' # But in this case, it's probably better to fit the model yourself #' # so you can exercise more control and see whether or not it's a good model #' } geom_smooth <- function(mapping = NULL, data = NULL, stat = "smooth", position = "identity", ..., method = "auto", formula = y ~ x, se = TRUE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { params <- list( na.rm = na.rm, ... ) if (identical(stat, "smooth")) { params$method <- method params$formula <- formula params$se <- se } layer( data = data, mapping = mapping, stat = stat, geom = GeomSmooth, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = params ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomSmooth <- ggproto("GeomSmooth", Geom, draw_group = function(data, panel_scales, coord) { ribbon <- transform(data, colour = NA) path <- transform(data, alpha = NA) has_ribbon <- !is.null(data$ymax) && !is.null(data$ymin) gList( if (has_ribbon) GeomRibbon$draw_group(ribbon, panel_scales, coord), GeomLine$draw_panel(path, panel_scales, coord) ) }, draw_key = draw_key_smooth, required_aes = c("x", "y"), default_aes = aes(colour = "#3366FF", fill = "grey60", size = 1, linetype = 1, weight = 1, alpha = 0.4) ) ggplot2/R/stat-summary.r0000644000177400001440000002050313006417126015054 0ustar murdochusers#' Summarise y values at unique/binned x #' #' \code{stat_summary} operates on unique \code{x}; \code{stat_summary_bin} #' operators on binned \code{x}. They are more flexible versions of #' \code{\link{stat_bin}}: instead of just counting, they can compute any #' aggregate. #' #' @section Aesthetics: #' \aesthetics{stat}{summary} #' #' @seealso \code{\link{geom_errorbar}}, \code{\link{geom_pointrange}}, #' \code{\link{geom_linerange}}, \code{\link{geom_crossbar}} for geoms to #' display summarised data #' @inheritParams stat_identity #' @section Summary functions: #' You can either supply summary functions individually (\code{fun.y}, #' \code{fun.ymax}, \code{fun.ymin}), or as a single function (\code{fun.data}): #' #' \describe{ #' \item{fun.data}{Complete summary function. Should take numeric vector as #' input and return data frame as output} #' \item{fun.ymin}{ymin summary function (should take numeric vector and #' return single number)} #' \item{fun.y}{y summary function (should take numeric vector and return #' single number)} #' \item{fun.ymax}{ymax summary function (should take numeric vector and #' return single number)} #' } #' #' A simple vector function is easiest to work with as you can return a single #' number, but is somewhat less flexible. If your summary function computes #' multiple values at once (e.g. ymin and ymax), use \code{fun.data}. #' #' If no aggregation functions are suppled, will default to #' \code{\link{mean_se}}. #' #' @param fun.data A function that is given the complete data and should #' return a data frame with variables \code{ymin}, \code{y}, and \code{ymax}. #' @param fun.ymin,fun.y,fun.ymax Alternatively, supply three individual #' functions that are each passed a vector of x's and should return a #' single number. #' @param fun.args Optional additional arguments passed on to the functions. #' @export #' @examples #' d <- ggplot(mtcars, aes(cyl, mpg)) + geom_point() #' d + stat_summary(fun.data = "mean_cl_boot", colour = "red", size = 2) #' #' # You can supply individual functions to summarise the value at #' # each x: #' d + stat_summary(fun.y = "median", colour = "red", size = 2, geom = "point") #' d + stat_summary(fun.y = "mean", colour = "red", size = 2, geom = "point") #' d + aes(colour = factor(vs)) + stat_summary(fun.y = mean, geom="line") #' #' d + stat_summary(fun.y = mean, fun.ymin = min, fun.ymax = max, #' colour = "red") #' #' d <- ggplot(diamonds, aes(cut)) #' d + geom_bar() #' d + stat_summary_bin(aes(y = price), fun.y = "mean", geom = "bar") #' #' \donttest{ #' # Don't use ylim to zoom into a summary plot - this throws the #' # data away #' p <- ggplot(mtcars, aes(cyl, mpg)) + #' stat_summary(fun.y = "mean", geom = "point") #' p #' p + ylim(15, 30) #' # Instead use coord_cartesian #' p + coord_cartesian(ylim = c(15, 30)) #' #' # A set of useful summary functions is provided from the Hmisc package: #' stat_sum_df <- function(fun, geom="crossbar", ...) { #' stat_summary(fun.data = fun, colour = "red", geom = geom, width = 0.2, ...) #' } #' d <- ggplot(mtcars, aes(cyl, mpg)) + geom_point() #' # The crossbar geom needs grouping to be specified when used with #' # a continuous x axis. #' d + stat_sum_df("mean_cl_boot", mapping = aes(group = cyl)) #' d + stat_sum_df("mean_sdl", mapping = aes(group = cyl)) #' d + stat_sum_df("mean_sdl", fun.args = list(mult = 1), mapping = aes(group = cyl)) #' d + stat_sum_df("median_hilow", mapping = aes(group = cyl)) #' #' # An example with highly skewed distributions: #' if (require("ggplot2movies")) { #' set.seed(596) #' mov <- movies[sample(nrow(movies), 1000), ] #' m2 <- ggplot(mov, aes(x = factor(round(rating)), y = votes)) + geom_point() #' m2 <- m2 + stat_summary(fun.data = "mean_cl_boot", geom = "crossbar", #' colour = "red", width = 0.3) + xlab("rating") #' m2 #' # Notice how the overplotting skews off visual perception of the mean #' # supplementing the raw data with summary statistics is _very_ important #' #' # Next, we'll look at votes on a log scale. #' #' # Transforming the scale means the data are transformed #' # first, after which statistics are computed: #' m2 + scale_y_log10() #' # Transforming the coordinate system occurs after the #' # statistic has been computed. This means we're calculating the summary on the raw data #' # and stretching the geoms onto the log scale. Compare the widths of the #' # standard errors. #' m2 + coord_trans(y="log10") #' } #' } stat_summary <- function(mapping = NULL, data = NULL, geom = "pointrange", position = "identity", ..., fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatSummary, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( fun.data = fun.data, fun.y = fun.y, fun.ymax = fun.ymax, fun.ymin = fun.ymin, fun.args = fun.args, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSummary <- ggproto("StatSummary", Stat, required_aes = c("x", "y"), compute_panel = function(data, scales, fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE) { fun <- make_summary_fun(fun.data, fun.y, fun.ymax, fun.ymin, fun.args) summarise_by_x(data, fun) } ) # Summarise a data.frame by parts # Summarise a data frame by unique value of x # # This function is used by \code{\link{stat_summary}} to break a # data.frame into pieces, summarise each piece, and join the pieces # back together, retaining original columns unaffected by the summary. # # @param \code{\link{data.frame}} to summarise # @param vector to summarise by # @param summary function (must take and return a data.frame) # @param other arguments passed on to summary function # @keyword internal summarise_by_x <- function(data, summary, ...) { summary <- plyr::ddply(data, c("group", "x"), summary, ...) unique <- plyr::ddply(data, c("group", "x"), uniquecols) unique$y <- NULL merge(summary, unique, by = c("x", "group"), sort = FALSE) } #' A selection of summary functions from Hmisc #' #' @description #' These are wrappers around functions from \pkg{Hmsic} designed to make them #' easier to use with \code{\link{stat_summary}}. See the Hmisc documentation #' for more details: #' #' \itemize{ #' \item \code{\link[Hmisc]{smean.cl.boot}} #' \item \code{\link[Hmisc]{smean.cl.normal}} #' \item \code{\link[Hmisc]{smean.sdl}} #' \item \code{\link[Hmisc]{smedian.hilow}} #' } #' @param x a numeric vector #' @param ... other arguments passed on to the respective Hmisc function. #' @return A data frame with columns \code{y}, \code{ymin}, and \code{ymax}. #' @name hmisc #' @examples #' x <- rnorm(100) #' mean_cl_boot(x) #' mean_cl_normal(x) #' mean_sdl(x) #' median_hilow(x) NULL wrap_hmisc <- function(fun) { function(x, ...) { if (!requireNamespace("Hmisc", quietly = TRUE)) stop("Hmisc package required for this function", call. = FALSE) fun <- getExportedValue("Hmisc", fun) result <- do.call(fun, list(x = quote(x), ...)) plyr::rename( data.frame(t(result)), c(Median = "y", Mean = "y", Lower = "ymin", Upper = "ymax"), warn_missing = FALSE ) } } #' @export #' @rdname hmisc mean_cl_boot <- wrap_hmisc("smean.cl.boot") #' @export #' @rdname hmisc mean_cl_normal <- wrap_hmisc("smean.cl.normal") #' @export #' @rdname hmisc mean_sdl <- wrap_hmisc("smean.sdl") #' @export #' @rdname hmisc median_hilow <- wrap_hmisc("smedian.hilow") #' Calculate mean and standard error #' #' For use with \code{\link{stat_summary}} #' #' @param x numeric vector #' @param mult number of multiples of standard error #' @return A data frame with columns \code{y}, \code{ymin}, and \code{ymax}. #' @export #' @examples #' x <- rnorm(100) #' mean_se(x) mean_se <- function(x, mult = 1) { x <- stats::na.omit(x) se <- mult * sqrt(stats::var(x) / length(x)) mean <- mean(x) data.frame(y = mean, ymin = mean - se, ymax = mean + se) } ggplot2/R/fortify-multcomp.r0000644000177400001440000000427613006406526015741 0ustar murdochusers#' Fortify methods for objects produced by \pkg{multcomp} #' #' @param model an object of class \code{glht}, \code{confint.glht}, #' \code{summary.glht} or \code{\link[multcomp]{cld}} #' @param data,... other arguments to the generic ignored in this method. #' @name fortify-multcomp #' @keywords internal #' @examples #' if (require("multcomp")) { #' amod <- aov(breaks ~ wool + tension, data = warpbreaks) #' wht <- glht(amod, linfct = mcp(tension = "Tukey")) #' #' fortify(wht) #' ggplot(wht, aes(lhs, estimate)) + geom_point() #' #' CI <- confint(wht) #' fortify(CI) #' ggplot(CI, aes(lhs, estimate, ymin = lwr, ymax = upr)) + #' geom_pointrange() #' #' fortify(summary(wht)) #' ggplot(mapping = aes(lhs, estimate)) + #' geom_linerange(aes(ymin = lwr, ymax = upr), data = CI) + #' geom_point(aes(size = p), data = summary(wht)) + #' scale_size(trans = "reverse") #' #' cld <- cld(wht) #' fortify(cld) #' } NULL #' @method fortify glht #' @rdname fortify-multcomp #' @export fortify.glht <- function(model, data, ...) { plyr::unrowname(data.frame( lhs = rownames(model$linfct), rhs = model$rhs, estimate = stats::coef(model), check.names = FALSE, stringsAsFactors = FALSE)) } #' @rdname fortify-multcomp #' @method fortify confint.glht #' @export fortify.confint.glht <- function(model, data, ...) { coef <- model$confint colnames(coef) <- tolower(colnames(coef)) plyr::unrowname(data.frame( lhs = rownames(coef), rhs = model$rhs, coef, check.names = FALSE, stringsAsFactors = FALSE)) } #' @method fortify summary.glht #' @rdname fortify-multcomp #' @export fortify.summary.glht <- function(model, data, ...) { coef <- as.data.frame( model$test[c("coefficients", "sigma", "tstat", "pvalues")]) names(coef) <- c("estimate", "se", "t", "p") plyr::unrowname(data.frame( lhs = rownames(coef), rhs = model$rhs, coef, check.names = FALSE, stringsAsFactors = FALSE)) } #' @method fortify cld #' @rdname fortify-multcomp #' @export fortify.cld <- function(model, data, ...) { plyr::unrowname(data.frame( lhs = names(model$mcletters$Letters), letters = model$mcletters$Letters, check.names = FALSE, stringsAsFactors = FALSE)) } ggplot2/R/aes-position.r0000644000177400001440000000300013006417546015017 0ustar murdochusers#' Position related aesthetics: x, y, xmin, xmax, ymin, ymax, xend, yend #' #' This page demonstrates the usage of a sub-group #' of aesthetics; x, y, xmin, xmax, ymin, ymax, xend, and yend. #' #' @name aes_position #' @aliases x y xmin xmax ymin ymax xend yend #' @examples #' #' # Generate data: means and standard errors of means for prices #' # for each type of cut #' dmod <- lm(price ~ cut, data = diamonds) #' cuts <- data.frame(cut = unique(diamonds$cut), predict(dmod, data.frame(cut = #' unique(diamonds$cut)), se = TRUE)[c("fit", "se.fit")]) #' se <- ggplot(cuts, aes(x = cut, y = fit, ymin = fit - se.fit, #' ymax = fit + se.fit, colour = cut)) #' se + geom_pointrange() #' #' # Using annotate #' p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() #' p + annotate("rect", xmin = 2, xmax = 3.5, ymin = 2, ymax = 25, #' fill = "dark grey", alpha = .5) #' #' # Geom_segment examples #' p + geom_segment(aes(x = 2, y = 15, xend = 2, yend = 25), #' arrow = arrow(length = unit(0.5, "cm"))) #' p + geom_segment(aes(x = 2, y = 15, xend = 3, yend = 15), #' arrow = arrow(length = unit(0.5, "cm"))) #' p + geom_segment(aes(x = 5, y = 30, xend = 3.5, yend = 25), #' arrow = arrow(length = unit(0.5, "cm"))) #' #' # You can also use geom_segment to recreate plot(type = "h") : #' counts <- as.data.frame(table(x = rpois(100, 5))) #' counts$x <- as.numeric(as.character(counts$x)) #' with(counts, plot(x, Freq, type = "h", lwd = 10)) #' #' ggplot(counts, aes(x, Freq)) + #' geom_segment(aes(yend = 0, xend = x), size = 10) NULL ggplot2/R/stat-.r0000644000177400001440000001245212772220436013447 0ustar murdochusers#' @section Stats: #' #' All \code{stat_*} functions (like \code{stat_bin}) return a layer that #' contains a \code{Stat*} object (like \code{StatBin}). The \code{Stat*} #' object is responsible for rendering the data in the plot. #' #' Each of the \code{Stat*} objects is a \code{\link{ggproto}} object, descended #' from the top-level \code{Stat}, and each implements various methods and #' fields. To create a new type of Stat object, you typically will want to #' implement one or more of the following: #' #' \itemize{ #' \item Override one of : #' \code{compute_layer(self, data, scales, ...)}, #' \code{compute_panel(self, data, scales, ...)}, or #' \code{compute_group(self, data, scales, ...)}. #' #' \code{compute_layer()} is called once per layer, \code{compute_panel_()} #' is called once per panel, and \code{compute_group()} is called once per #' group. All must return a data frame. #' #' It's usually best to start by overriding \code{compute_group}: if #' you find substantial performance optimisations, override higher up. #' You'll need to read the source code of the default methods to see #' what else you should be doing. #' #' \code{data} is a data frame containing the variables named according #' to the aesthetics that they're mapped to. \code{scales} is a list #' containing the \code{x} and \code{y} scales. There functions are called #' before the facets are trained, so they are global scales, not local #' to the individual panels.\code{...} contains the parameters returned by #' \code{setup_params()}. #' \item \code{finish_layer(data, params)}: called once for each layer. Used #' to modify the data after scales has been applied, but before the data is #' handed of to the geom for rendering. The default is to not modify the #' data. Use this hook if the stat needs access to the actual aesthetic #' values rather than the values that are mapped to the aesthetic. #' \item \code{setup_params(data, params)}: called once for each layer. #' Used to setup defaults that need to complete dataset, and to inform #' the user of important choices. Should return list of parameters. #' \item \code{setup_data(data, params)}: called once for each layer, #' after \code{setp_params()}. Should return modified \code{data}. #' Default methods removes all rows containing a missing value in #' required aesthetics (with a warning if \code{!na.rm}). #' \item \code{required_aes}: A character vector of aesthetics needed to #' render the geom. #' \item \code{default_aes}: A list (generated by \code{\link{aes}()} of #' default values for aesthetics. #' } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export Stat <- ggproto("Stat", # Should the values produced by the statistic also be transformed # in the second pass when recently added statistics are trained to # the scales retransform = TRUE, default_aes = aes(), required_aes = character(), non_missing_aes = character(), setup_params = function(data, params) { params }, setup_data = function(data, params) { data }, compute_layer = function(self, data, params, layout) { check_required_aesthetics( self$required_aes, c(names(data), names(params)), snake_class(self) ) data <- remove_missing(data, params$na.rm, c(self$required_aes, self$non_missing_aes), snake_class(self), finite = TRUE ) # Trim off extra parameters params <- params[intersect(names(params), self$parameters())] args <- c(list(data = quote(data), scales = quote(scales)), params) plyr::ddply(data, "PANEL", function(data) { scales <- layout$get_scales(data$PANEL[1]) tryCatch(do.call(self$compute_panel, args), error = function(e) { warning("Computation failed in `", snake_class(self), "()`:\n", e$message, call. = FALSE) data.frame() }) }) }, compute_panel = function(self, data, scales, ...) { if (empty(data)) return(data.frame()) groups <- split(data, data$group) stats <- lapply(groups, function(group) { self$compute_group(data = group, scales = scales, ...) }) stats <- mapply(function(new, old) { if (empty(new)) return(data.frame()) unique <- uniquecols(old) missing <- !(names(unique) %in% names(new)) cbind( new, unique[rep(1, nrow(new)), missing,drop = FALSE] ) }, stats, groups, SIMPLIFY = FALSE) do.call(plyr::rbind.fill, stats) }, compute_group = function(self, data, scales) { stop("Not implemented", call. = FALSE) }, finish_layer = function(self, data, params) { data }, # See discussion at Geom$parameters() extra_params = "na.rm", parameters = function(self, extra = FALSE) { # Look first in compute_panel. If it contains ... then look in compute_group panel_args <- names(ggproto_formals(self$compute_panel)) group_args <- names(ggproto_formals(self$compute_group)) args <- if ("..." %in% panel_args) group_args else panel_args # Remove arguments of defaults args <- setdiff(args, names(ggproto_formals(Stat$compute_group))) if (extra) { args <- union(args, self$extra_params) } args }, aesthetics = function(self) { c(union(self$required_aes, names(self$default_aes)), "group") } ) ggplot2/R/scale-date.r0000644000177400001440000001767613006122500014416 0ustar murdochusers#' Position scales for date/time data #' #' These are the default scales for the three date/time class. These will #' usually be added automatically. To override manually, use #' \code{scale_*_date} for dates (class \code{Date}), #' \code{scale_*_datetime} for datetimes (class \code{POSIXct}), and #' \code{scale_*_time} for times (class \code{hms}). #' #' @inheritParams continuous_scale #' @inheritParams scale_x_continuous #' @param date_breaks A string giving the distance between breaks like "2 #' weeks", or "10 years". If both \code{breaks} and \code{date_breaks} are #' specified, \code{date_breaks} wins. #' @param date_minor_breaks A string giving the distance between minor breaks #' like "2 weeks", or "10 years". If both \code{minor_breaks} and #' \code{date_minor_breaks} are specified, \code{date_minor_breaks} wins. #' @param date_labels A string giving the formatting specification for the #' labels. Codes are defined in \code{\link{strftime}}. If both \code{labels} #' and \code{date_labels} are specified, \code{date_labels} wins. #' @param timezone The timezone to use for display on the axes. The default #' (\code{NULL}) uses the timezone encoded in the data. #' @family position scales #' @examples #' last_month <- Sys.Date() - 0:29 #' df <- data.frame( #' date = last_month, #' price = runif(30) #' ) #' base <- ggplot(df, aes(date, price)) + #' geom_line() #' #' # The date scale will attempt to pick sensible defaults for #' # major and minor tick marks. Override with date_breaks, date_labels #' # date_minor_breaks arguments. #' base + scale_x_date(date_labels = "%b %d") #' base + scale_x_date(date_breaks = "1 week", date_labels = "%W") #' base + scale_x_date(date_minor_breaks = "1 day") #' #' # Set limits #' base + scale_x_date(limits = c(Sys.Date() - 7, NA)) #' @name scale_date #' @aliases NULL NULL #' @rdname scale_date #' @export scale_x_date <- function(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver(), position = "bottom") { scale_datetime(c("x", "xmin", "xmax", "xend"), "date", name = name, breaks = breaks, date_breaks = date_breaks, labels = labels, date_labels = date_labels, minor_breaks = minor_breaks, date_minor_breaks = date_minor_breaks, limits = limits, expand = expand, position = position ) } #' @rdname scale_date #' @export scale_y_date <- function(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver(), position = "left") { scale_datetime(c("y", "ymin", "ymax", "yend"), "date", name = name, breaks = breaks, date_breaks = date_breaks, labels = labels, date_labels = date_labels, minor_breaks = minor_breaks, date_minor_breaks = date_minor_breaks, limits = limits, expand = expand, position = position ) } #' @export #' @rdname scale_date scale_x_datetime <- function(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), timezone = NULL, limits = NULL, expand = waiver(), position = "bottom") { scale_datetime(c("x", "xmin", "xmax", "xend"), "time", name = name, breaks = breaks, date_breaks = date_breaks, labels = labels, date_labels = date_labels, minor_breaks = minor_breaks, date_minor_breaks = date_minor_breaks, timezone = timezone, limits = limits, expand = expand, position = position ) } #' @rdname scale_date #' @export scale_y_datetime <- function(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), timezone = NULL, limits = NULL, expand = waiver(), position = "left") { scale_datetime(c("y", "ymin", "ymax", "yend"), "time", name = name, breaks = breaks, date_breaks = date_breaks, labels = labels, date_labels = date_labels, minor_breaks = minor_breaks, date_minor_breaks = date_minor_breaks, timezone = timezone, limits = limits, expand = expand, position = position ) } #' @export #' @rdname scale_date scale_x_time <- function(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, position = "bottom") { scale_x_continuous( name = name, breaks = breaks, labels = labels, minor_breaks = minor_breaks, limits = limits, expand = expand, oob = oob, na.value = na.value, position = position, trans = scales::hms_trans() ) } #' @rdname scale_date #' @export scale_y_time <- function(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, position = "left") { scale_y_continuous( name = name, breaks = breaks, labels = labels, minor_breaks = minor_breaks, limits = limits, expand = expand, oob = oob, na.value = na.value, position = position, trans = scales::hms_trans() ) } scale_datetime <- function(aesthetics, trans, breaks = pretty_breaks(), minor_breaks = waiver(), labels = waiver(), date_breaks = waiver(), date_labels = waiver(), date_minor_breaks = waiver(), timezone = NULL, ...) { # Backward compatibility if (is.character(breaks)) breaks <- date_breaks(breaks) if (is.character(minor_breaks)) minor_breaks <- date_breaks(minor_breaks) if (!is.waive(date_breaks)) { breaks <- date_breaks(date_breaks) } if (!is.waive(date_minor_breaks)) { minor_breaks <- date_breaks(date_minor_breaks) } if (!is.waive(date_labels)) { labels <- function(self, x) { tz <- if (is.null(self$timezone)) "UTC" else self$timezone date_format(date_labels, tz)(x) } } name <- switch(trans, date = "date", time = "datetime" ) scale_class <- switch(trans, date = ScaleContinuousDate, time = ScaleContinuousDatetime ) sc <- continuous_scale( aesthetics, name, identity, breaks = breaks, minor_breaks = minor_breaks, labels = labels, guide = "none", trans = trans, ..., super = scale_class ) sc$timezone <- timezone sc } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleContinuousDatetime <- ggproto("ScaleContinuousDatetime", ScaleContinuous, timezone = NULL, transform = function(self, x) { tz <- attr(x, "tzone") if (is.null(self$timezone) && !is.null(tz)) { self$timezone <- tz self$trans <- time_trans(self$timezone) } ggproto_parent(ScaleContinuous, self)$transform(x) }, map = function(self, x, limits = self$get_limits()) { self$oob(x, limits) } ) #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleContinuousDate <- ggproto("ScaleContinuousDate", ScaleContinuous, map = function(self, x, limits = self$get_limits()) { self$oob(x, limits) } ) ggplot2/R/plot-build.r0000644000177400001440000002452412775216764014511 0ustar murdochusers#' Build ggplot for rendering. #' #' \code{ggplot_build} takes the plot object, and performs all steps necessary #' to produce an object that can be rendered. This function outputs two pieces: #' a list of data frames (one for each layer), and a panel object, which #' contain all information about axis limits, breaks etc. #' #' \code{layer_data}, \code{layer_grob}, and \code{layer_scales} are helper #' functions that returns the data, grob, or scales associated with a given #' layer. These are useful for tests. #' #' @param plot ggplot object #' @seealso \code{\link{print.ggplot}} and \code{\link{benchplot}} for #' functions that contain the complete set of steps for generating #' a ggplot2 plot. #' @keywords internal #' @export ggplot_build <- function(plot) { plot <- plot_clone(plot) if (length(plot$layers) == 0) { plot <- plot + geom_blank() } layers <- plot$layers layer_data <- lapply(layers, function(y) y$layer_data(plot$data)) scales <- plot$scales # Apply function to layer and matching data by_layer <- function(f) { out <- vector("list", length(data)) for (i in seq_along(data)) { out[[i]] <- f(l = layers[[i]], d = data[[i]]) } out } # Initialise panels, add extra data for margins & missing facetting # variables, and add on a PANEL variable to data layout <- create_layout(plot$facet) data <- layout$setup(layer_data, plot$data, plot$plot_env, plot$coordinates) data <- layout$map(data) # Compute aesthetics to produce data with generalised variable names data <- by_layer(function(l, d) l$compute_aesthetics(d, plot)) # Transform all scales data <- lapply(data, scales_transform_df, scales = scales) # Map and train positions so that statistics have access to ranges # and all positions are numeric scale_x <- function() scales$get_scales("x") scale_y <- function() scales$get_scales("y") layout$train_position(data, scale_x(), scale_y()) data <- layout$map_position(data) # Apply and map statistics data <- by_layer(function(l, d) l$compute_statistic(d, layout)) data <- by_layer(function(l, d) l$map_statistic(d, plot)) # Make sure missing (but required) aesthetics are added scales_add_missing(plot, c("x", "y"), plot$plot_env) # Reparameterise geoms from (e.g.) y and width to ymin and ymax data <- by_layer(function(l, d) l$compute_geom_1(d)) # Apply position adjustments data <- by_layer(function(l, d) l$compute_position(d, layout)) # Reset position scales, then re-train and map. This ensures that facets # have control over the range of a plot: is it generated from what's # displayed, or does it include the range of underlying data layout$reset_scales() layout$train_position(data, scale_x(), scale_y()) data <- layout$map_position(data) # Train and map non-position scales npscales <- scales$non_position_scales() if (npscales$n() > 0) { lapply(data, scales_train_df, scales = npscales) data <- lapply(data, scales_map_df, scales = npscales) } # Train coordinate system layout$train_ranges(plot$coordinates) # Fill in defaults etc. data <- by_layer(function(l, d) l$compute_geom_2(d)) # Let layer stat have a final say before rendering data <- by_layer(function(l, d) l$finish_statistics(d)) # Let Layout modify data before rendering data <- layout$finish_data(data) list(data = data, layout = layout, plot = plot) } #' @export #' @rdname ggplot_build layer_data <- function(plot, i = 1L) { ggplot_build(plot)$data[[i]] } #' @export #' @rdname ggplot_build layer_scales <- function(plot, i = 1L, j = 1L) { b <- ggplot_build(plot) layout <- b$layout$panel_layout selected <- layout[layout$ROW == i & layout$COL == j, , drop = FALSE] list( x = b$layout$panel_scales$x[[selected$SCALE_X]], y = b$layout$panel_scales$y[[selected$SCALE_Y]] ) } #' @export #' @rdname ggplot_build layer_grob <- function(plot, i = 1L) { b <- ggplot_build(plot) b$plot$layers[[i]]$draw_geom(b$data[[i]], b$layout, b$plot$coordinates) } #' Build a plot with all the usual bits and pieces. #' #' This function builds all grobs necessary for displaying the plot, and #' stores them in a special data structure called a \code{\link{gtable}}. #' This object is amenable to programmatic manipulation, should you want #' to (e.g.) make the legend box 2 cm wide, or combine multiple plots into #' a single display, preserving aspect ratios across the plots. #' #' @seealso \code{\link{print.ggplot}} and \code{link{benchplot}} for #' for functions that contain the complete set of steps for generating #' a ggplot2 plot. #' @return a \code{\link{gtable}} object #' @keywords internal #' @param plot plot object #' @param data plot data generated by \code{\link{ggplot_build}} #' @export ggplot_gtable <- function(data) { plot <- data$plot layout <- data$layout data <- data$data theme <- plot_theme(plot) geom_grobs <- Map(function(l, d) l$draw_geom(d, layout, plot$coordinates), plot$layers, data) plot_table <- layout$render(geom_grobs, data, plot$coordinates, theme, plot$labels) # Legends position <- theme$legend.position if (length(position) == 2) { position <- "manual" } legend_box <- if (position != "none") { build_guides(plot$scales, plot$layers, plot$mapping, position, theme, plot$guides, plot$labels) } else { zeroGrob() } if (is.zero(legend_box)) { position <- "none" } else { # these are a bad hack, since it modifies the contents of viewpoint directly... legend_width <- gtable_width(legend_box) legend_height <- gtable_height(legend_box) # Set the justification of the legend box # First value is xjust, second value is yjust just <- valid.just(theme$legend.justification) xjust <- just[1] yjust <- just[2] if (position == "manual") { xpos <- theme$legend.position[1] ypos <- theme$legend.position[2] # x and y are specified via theme$legend.position (i.e., coords) legend_box <- editGrob(legend_box, vp = viewport(x = xpos, y = ypos, just = c(xjust, yjust), height = legend_height, width = legend_width)) } else { # x and y are adjusted using justification of legend box (i.e., theme$legend.justification) legend_box <- editGrob(legend_box, vp = viewport(x = xjust, y = yjust, just = c(xjust, yjust))) legend_box <- gtable_add_rows(legend_box, unit(yjust, 'null')) legend_box <- gtable_add_rows(legend_box, unit(1 - yjust, 'null'), 0) legend_box <- gtable_add_cols(legend_box, unit(xjust, 'null'), 0) legend_box <- gtable_add_cols(legend_box, unit(1 - xjust, 'null')) } } panel_dim <- find_panel(plot_table) # for align-to-device, use this: # panel_dim <- summarise(plot_table$layout, t = min(t), r = max(r), b = max(b), l = min(l)) theme$legend.box.spacing <- theme$legend.box.spacing %||% unit(0.2, 'cm') if (position == "left") { plot_table <- gtable_add_cols(plot_table, theme$legend.box.spacing, pos = 0) plot_table <- gtable_add_cols(plot_table, legend_width, pos = 0) plot_table <- gtable_add_grob(plot_table, legend_box, clip = "off", t = panel_dim$t, b = panel_dim$b, l = 1, r = 1, name = "guide-box") } else if (position == "right") { plot_table <- gtable_add_cols(plot_table, theme$legend.box.spacing, pos = -1) plot_table <- gtable_add_cols(plot_table, legend_width, pos = -1) plot_table <- gtable_add_grob(plot_table, legend_box, clip = "off", t = panel_dim$t, b = panel_dim$b, l = -1, r = -1, name = "guide-box") } else if (position == "bottom") { plot_table <- gtable_add_rows(plot_table, theme$legend.box.spacing, pos = -1) plot_table <- gtable_add_rows(plot_table, legend_height, pos = -1) plot_table <- gtable_add_grob(plot_table, legend_box, clip = "off", t = -1, b = -1, l = panel_dim$l, r = panel_dim$r, name = "guide-box") } else if (position == "top") { plot_table <- gtable_add_rows(plot_table, theme$legend.box.spacing, pos = 0) plot_table <- gtable_add_rows(plot_table, legend_height, pos = 0) plot_table <- gtable_add_grob(plot_table, legend_box, clip = "off", t = 1, b = 1, l = panel_dim$l, r = panel_dim$r, name = "guide-box") } else if (position == "manual") { # should guide box expand whole region or region without margin? plot_table <- gtable_add_grob(plot_table, legend_box, t = panel_dim$t, b = panel_dim$b, l = panel_dim$l, r = panel_dim$r, clip = "off", name = "guide-box") } # Title title <- element_render(theme, "plot.title", plot$labels$title, expand_y = TRUE) title_height <- grobHeight(title) # Subtitle subtitle <- element_render(theme, "plot.subtitle", plot$labels$subtitle, expand_y = TRUE) subtitle_height <- grobHeight(subtitle) # whole plot annotation caption <- element_render(theme, "plot.caption", plot$labels$caption, expand_y = TRUE) caption_height <- grobHeight(caption) pans <- plot_table$layout[grepl("^panel", plot_table$layout$name), , drop = FALSE] plot_table <- gtable_add_rows(plot_table, subtitle_height, pos = 0) plot_table <- gtable_add_grob(plot_table, subtitle, name = "subtitle", t = 1, b = 1, l = min(pans$l), r = max(pans$r), clip = "off") plot_table <- gtable_add_rows(plot_table, title_height, pos = 0) plot_table <- gtable_add_grob(plot_table, title, name = "title", t = 1, b = 1, l = min(pans$l), r = max(pans$r), clip = "off") plot_table <- gtable_add_rows(plot_table, caption_height, pos = -1) plot_table <- gtable_add_grob(plot_table, caption, name = "caption", t = -1, b = -1, l = min(pans$l), r = max(pans$r), clip = "off") # Margins plot_table <- gtable_add_rows(plot_table, theme$plot.margin[1], pos = 0) plot_table <- gtable_add_cols(plot_table, theme$plot.margin[2]) plot_table <- gtable_add_rows(plot_table, theme$plot.margin[3]) plot_table <- gtable_add_cols(plot_table, theme$plot.margin[4], pos = 0) if (inherits(theme$plot.background, "element")) { plot_table <- gtable_add_grob(plot_table, element_render(theme, "plot.background"), t = 1, l = 1, b = -1, r = -1, name = "background", z = -Inf) plot_table$layout <- plot_table$layout[c(nrow(plot_table$layout), 1:(nrow(plot_table$layout) - 1)),] plot_table$grobs <- plot_table$grobs[c(nrow(plot_table$layout), 1:(nrow(plot_table$layout) - 1))] } plot_table } #' Generate a ggplot2 plot grob. #' #' @param x ggplot2 object #' @keywords internal #' @export ggplotGrob <- function(x) { ggplot_gtable(ggplot_build(x)) } ggplot2/R/geom-errorbarh.r0000644000177400001440000000445013005734143015324 0ustar murdochusers#' Horizontal error bars #' #' A rotated version of \code{\link{geom_errorbar}}. #' #' @section Aesthetics: #' \aesthetics{geom}{errorbarh} #' #' @inheritParams layer #' @inheritParams geom_point #' @export #' @examples #' df <- data.frame( #' trt = factor(c(1, 1, 2, 2)), #' resp = c(1, 5, 3, 4), #' group = factor(c(1, 2, 1, 2)), #' se = c(0.1, 0.3, 0.3, 0.2) #' ) #' #' # Define the top and bottom of the errorbars #' #' p <- ggplot(df, aes(resp, trt, colour = group)) #' p + geom_point() + #' geom_errorbarh(aes(xmax = resp + se, xmin = resp - se)) #' p + geom_point() + #' geom_errorbarh(aes(xmax = resp + se, xmin = resp - se, height = .2)) geom_errorbarh <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomErrorbarh, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomErrorbarh <- ggproto("GeomErrorbarh", Geom, default_aes = aes(colour = "black", size = 0.5, linetype = 1, height = 0.5, alpha = NA), draw_key = draw_key_path, required_aes = c("x", "xmin", "xmax", "y"), setup_data = function(data, params) { data$height <- data$height %||% params$height %||% (resolution(data$y, FALSE) * 0.9) transform(data, ymin = y - height / 2, ymax = y + height / 2, height = NULL ) }, draw_panel = function(data, panel_scales, coord, height = NULL) { GeomPath$draw_panel(data.frame( x = as.vector(rbind(data$xmax, data$xmax, NA, data$xmax, data$xmin, NA, data$xmin, data$xmin)), y = as.vector(rbind(data$ymin, data$ymax, NA, data$y, data$y, NA, data$ymin, data$ymax)), colour = rep(data$colour, each = 8), alpha = rep(data$alpha, each = 8), size = rep(data$size, each = 8), linetype = rep(data$linetype, each = 8), group = rep(1:(nrow(data)), each = 8), stringsAsFactors = FALSE, row.names = 1:(nrow(data) * 8) ), panel_scales, coord) } ) ggplot2/R/geom-quantile.r0000644000177400001440000000412013005734454015157 0ustar murdochusers#' Quantile regression #' #' This fits a quantile regression to the data and draws the fitted quantiles #' with lines. This is as a continuous analogue to \code{\link{geom_boxplot}}. #' #' @section Aesthetics: #' \aesthetics{geom}{quantile} #' #' @export #' @inheritParams layer #' @inheritParams geom_point #' @inheritParams geom_path #' @param method.args List of additional arguments passed on to the modelling #' function defined by \code{method}. #' @param geom,stat Use to override the default connection between #' \code{geom_quantile} and \code{stat_quantile}. #' @examples #' m <- ggplot(mpg, aes(displ, 1 / hwy)) + geom_point() #' m + geom_quantile() #' m + geom_quantile(quantiles = 0.5) #' q10 <- seq(0.05, 0.95, by = 0.05) #' m + geom_quantile(quantiles = q10) #' #' # You can also use rqss to fit smooth quantiles #' m + geom_quantile(method = "rqss") #' # Note that rqss doesn't pick a smoothing constant automatically, so #' # you'll need to tweak lambda yourself #' m + geom_quantile(method = "rqss", lambda = 0.1) #' #' # Set aesthetics to fixed value #' m + geom_quantile(colour = "red", size = 2, alpha = 0.5) geom_quantile <- function(mapping = NULL, data = NULL, stat = "quantile", position = "identity", ..., lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomQuantile, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( lineend = lineend, linejoin = linejoin, linemitre = linemitre, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-path.r GeomQuantile <- ggproto("GeomQuantile", GeomPath, default_aes = defaults( aes(weight = 1, colour = "#3366FF", size = 0.5), GeomPath$default_aes ) ) ggplot2/R/geom-polygon.r0000644000177400001440000000712113005734344015026 0ustar murdochusers#' Polygons #' #' Polygons are very similar to paths (as drawn by \code{\link{geom_path}}) #' except that the start and end points are connected and the inside is #' coloured by \code{fill}. The \code{group} aesthetic determines which cases #' are connected together into a polygon. #' #' @section Aesthetics: #' \aesthetics{geom}{polygon} #' #' @seealso #' \code{\link{geom_path}} for an unfilled polygon, #' \code{\link{geom_ribbon}} for a polygon anchored on the x-axis #' @export #' @inheritParams layer #' @inheritParams geom_point #' @examples #' # When using geom_polygon, you will typically need two data frames: #' # one contains the coordinates of each polygon (positions), and the #' # other the values associated with each polygon (values). An id #' # variable links the two together #' #' ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) #' #' values <- data.frame( #' id = ids, #' value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5) #' ) #' #' positions <- data.frame( #' id = rep(ids, each = 4), #' x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, #' 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), #' y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, #' 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) #' ) #' #' # Currently we need to manually merge the two together #' datapoly <- merge(values, positions, by = c("id")) #' #' p <- ggplot(datapoly, aes(x = x, y = y)) + #' geom_polygon(aes(fill = value, group = id)) #' p #' #' # Which seems like a lot of work, but then it's easy to add on #' # other features in this coordinate system, e.g.: #' #' stream <- data.frame( #' x = cumsum(runif(50, max = 0.1)), #' y = cumsum(runif(50,max = 0.1)) #' ) #' #' p + geom_line(data = stream, colour = "grey30", size = 5) #' #' # And if the positions are in longitude and latitude, you can use #' # coord_map to produce different map projections. geom_polygon <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomPolygon, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomPolygon <- ggproto("GeomPolygon", Geom, draw_panel = function(data, panel_scales, coord) { n <- nrow(data) if (n == 1) return(zeroGrob()) munched <- coord_munch(coord, data, panel_scales) # Sort by group to make sure that colors, fill, etc. come in same order munched <- munched[order(munched$group), ] # For gpar(), there is one entry per polygon (not one entry per point). # We'll pull the first value from each group, and assume all these values # are the same within each group. first_idx <- !duplicated(munched$group) first_rows <- munched[first_idx, ] ggname("geom_polygon", polygonGrob(munched$x, munched$y, default.units = "native", id = munched$group, gp = gpar( col = first_rows$colour, fill = alpha(first_rows$fill, first_rows$alpha), lwd = first_rows$size * .pt, lty = first_rows$linetype ) ) ) }, default_aes = aes(colour = "NA", fill = "grey20", size = 0.5, linetype = 1, alpha = NA), handle_na = function(data, params) { data }, required_aes = c("x", "y"), draw_key = draw_key_polygon ) ggplot2/R/margins.R0000644000177400001440000001057713006202225014010 0ustar murdochusers#' @param t,r,b,l Dimensions of each margin. (To remember order, think trouble). #' @param unit Default units of dimensions. Defaults to "pt" so it #' can be most easily scaled with the text. #' @rdname element #' @export margin <- function(t = 0, r = 0, b = 0, l = 0, unit = "pt") { structure(unit(c(t, r, b, l), unit), class = c("margin", "unit")) } is.margin <- function(x) { inherits(x, "margin") } margin_height <- function(grob, margins) { if (is.zero(grob)) return(unit(0, "cm")) grobHeight(grob) + margins[1] + margins[3] } margin_width <- function(grob, margins) { if (is.zero(grob)) return(unit(0, "cm")) grobWidth(grob) + margins[2] + margins[4] } titleGrob <- function(label, x, y, hjust, vjust, angle = 0, gp = gpar(), margin = NULL, expand_x = FALSE, expand_y = FALSE, debug = FALSE) { if (is.null(label)) return(zeroGrob()) if (is.null(margin)) { margin <- margin(0, 0, 0, 0) } angle <- angle %% 360 if (angle == 90) { xp <- 1 - vjust yp <- hjust } else if (angle == 180) { xp <- 1 - hjust yp <- 1 - vjust } else if (angle == 270) { xp <- vjust yp <- 1 - hjust } else { xp <- hjust yp <- vjust } n <- max(length(x), length(y), 1) x <- x %||% unit(rep(xp, n), "npc") y <- y %||% unit(rep(yp, n), "npc") text_grob <- textGrob(label, x, y, hjust = hjust, vjust = vjust, rot = angle, gp = gp) # The grob dimensions don't include the text descenders, so add on using # a little trigonometry. This is only exactly correct when vjust = 1. descent <- descentDetails(text_grob) text_height <- unit(1, "grobheight", text_grob) + cos(angle / 180 * pi) * descent text_width <- unit(1, "grobwidth", text_grob) + sin(angle / 180 * pi) * descent if (expand_x && expand_y) { widths <- unit.c(margin[4], text_width, margin[2]) heights <- unit.c(margin[1], text_height, margin[3]) vp <- viewport(layout = grid.layout(3, 3, heights = heights, widths = widths), gp = gp) child_vp <- viewport(layout.pos.row = 2, layout.pos.col = 2) } else if (expand_x) { widths <- unit.c(margin[4], text_width, margin[2]) vp <- viewport(layout = grid.layout(1, 3, widths = widths), gp = gp) child_vp <- viewport(layout.pos.col = 2) heights <- unit(1, "null") } else if (expand_y) { heights <- unit.c(margin[1], text_height, margin[3]) vp <- viewport(layout = grid.layout(3, 1, heights = heights), gp = gp) child_vp <- viewport(layout.pos.row = 2) widths <- unit(1, "null") } else { return(text_grob) } if (debug) { children <- gList( rectGrob(gp = gpar(fill = "cornsilk", col = NA)), pointsGrob(x, y, pch = 20, gp = gpar(col = "gold")), text_grob ) } else { children <- gList(text_grob) } gTree( children = children, vp = vpTree(vp, vpList(child_vp)), widths = widths, heights = heights, cl = "titleGrob" ) } #' @export widthDetails.titleGrob <- function(x) { sum(x$widths) } #' @export heightDetails.titleGrob <- function(x) { sum(x$heights) } # Works like titleGrob, but designed to place one label per viewport. # This means it doesn't have the lengths of labels available, so must use # alternative layout strategy stripGrob <- function(label, hjust, vjust, angle = 0, gp = gpar(), margin = NULL, debug = FALSE) { if (is.null(margin)) { margin <- margin() } text_grob <- textGrob(label, rot = angle, gp = gp) widths <- unit.c(margin[4], unit(1, "grobwidth", text_grob), margin[2]) heights <- unit.c(margin[1], unit(1, "grobheight", text_grob), margin[3]) vp <- viewport( hjust, vjust, just = c(hjust, vjust), width = sum(widths), height = sum(heights), layout = grid.layout(3, 3, heights = heights, widths = widths), name = "top" ) child_vp <- viewport(layout.pos.row = 2, layout.pos.col = 2) if (debug) { children <- gList( rectGrob(gp = gpar(fill = "cornsilk", col = NA)), pointsGrob(unit(hjust, "npc"), unit(vjust, "npc"), pch = 20, gp = gpar(col = "gold")), text_grob ) } else { children <- gList(text_grob) } gTree( children = children, vp = vpTree(vp, vpList(child_vp)), widths = widths, heights = heights, cl = "stripGrob" ) } #' @export widthDetails.stripGrob <- function(x) { sum(x$widths) } #' @export heightDetails.stripGrob <- function(x) { sum(x$heights) } ggplot2/R/grob-dotstack.r0000644000177400001440000000347612560205764015172 0ustar murdochusersdotstackGrob <- function( x = unit(0.5, "npc"), # x pos of the dotstack's origin y = unit(0.5, "npc"), # y pos of the dotstack's origin stackaxis = "y", dotdia = unit(1, "npc"), # Dot diameter in the non-stack axis, should be in npc stackposition = 0, # Position of each dot in the stack, relative to origin stackratio = 1, # Stacking height of dots (.75 means 25% dot overlap) default.units = "npc", name = NULL, gp = gpar(), vp = NULL) { if (!is.unit(x)) x <- unit(x, default.units) if (!is.unit(y)) y <- unit(y, default.units) if (!is.unit(dotdia)) dotdia <- unit(dotdia, default.units) if (attr(dotdia,"unit") != "npc") warning("Unit type of dotdia should be 'npc'") grob(x = x, y = y, stackaxis = stackaxis, dotdia = dotdia, stackposition = stackposition, stackratio = stackratio, name = name, gp = gp, vp = vp, cl = "dotstackGrob") } #' @export makeContext.dotstackGrob <- function(x, recording = TRUE) { # Need absolute coordinates because when using npc coords with circleGrob, # the radius is in the _smaller_ of the two axes. We need the radius # to instead be defined in terms of the non-stack axis. xmm <- convertX(x$x, "mm", valueOnly = TRUE) ymm <- convertY(x$y, "mm", valueOnly = TRUE) if (x$stackaxis == "x") { dotdiamm <- convertY(x$dotdia, "mm", valueOnly = TRUE) xpos <- xmm + dotdiamm * (x$stackposition * x$stackratio + (1 - x$stackratio) / 2) ypos <- ymm } else if (x$stackaxis == "y") { dotdiamm <- convertX(x$dotdia, "mm", valueOnly = TRUE) xpos <- xmm ypos <- ymm + dotdiamm * (x$stackposition * x$stackratio + (1 - x$stackratio) / 2) } circleGrob( x = xpos, y = ypos, r = dotdiamm / 2, default.units = "mm", name = x$name, gp = x$gp, vp = x$vp ) } ggplot2/R/geom-hline.r0000644000177400001440000000230212651701366014436 0ustar murdochusers#' @include stat-.r NULL #' @export #' @rdname geom_abline geom_hline <- function(mapping = NULL, data = NULL, ..., yintercept, na.rm = FALSE, show.legend = NA) { # Act like an annotation if (!missing(yintercept)) { data <- data.frame(yintercept = yintercept) mapping <- aes(yintercept = yintercept) show.legend <- FALSE } layer( data = data, mapping = mapping, stat = StatIdentity, geom = GeomHline, position = PositionIdentity, show.legend = show.legend, inherit.aes = FALSE, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomHline <- ggproto("GeomHline", Geom, draw_panel = function(data, panel_scales, coord) { ranges <- coord$range(panel_scales) data$x <- ranges$x[1] data$xend <- ranges$x[2] data$y <- data$yintercept data$yend <- data$yintercept GeomSegment$draw_panel(unique(data), panel_scales, coord) }, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), required_aes = "yintercept", draw_key = draw_key_path ) ggplot2/R/geom-pointrange.r0000644000177400001440000000250412651701603015503 0ustar murdochusers#' @export #' @rdname geom_linerange geom_pointrange <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., fatten = 4, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomPointrange, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( fatten = fatten, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomPointrange <- ggproto("GeomPointrange", Geom, default_aes = aes(colour = "black", size = 0.5, linetype = 1, shape = 19, fill = NA, alpha = NA, stroke = 1), draw_key = draw_key_pointrange, required_aes = c("x", "y", "ymin", "ymax"), draw_panel = function(data, panel_scales, coord, fatten = 4) { if (is.null(data$y)) return(GeomLinerange$draw_panel(data, panel_scales, coord)) ggname("geom_pointrange", gTree(children = gList( GeomLinerange$draw_panel(data, panel_scales, coord), GeomPoint$draw_panel(transform(data, size = size * fatten), panel_scales, coord) )) ) } ) ggplot2/R/quick-plot.r0000644000177400001440000001263213006417451014503 0ustar murdochusers#' Quick plot #' #' \code{qplot} is a shortcut designed to be familiar if you're used to base #' \code{\link{plot}()}. It's a convenient wrapper for creating a number of #' different types of plots using a consistent calling scheme. It's great #' for allowing you to produce plots quickly, but I highly recommend #' learning \code{\link{ggplot}()} as it makes it easier to create #' complex graphics. #' #' @param x,y,... Aesthetics passed into each layer #' @param data Data frame to use (optional). If not specified, will create #' one, extracting vectors from the current environment. #' @param facets faceting formula to use. Picks \code{\link{facet_wrap}} or #' \code{\link{facet_grid}} depending on whether the formula is one- #' or two-sided #' @param margins See \code{facet_grid}: display marginal facets? #' @param geom Character vector specifying geom(s) to draw. Defaults to #' "point" if x and y are specified, and "histogram" if only x is specified. #' @param stat,position DEPRECATED. #' @param xlim,ylim X and y axis limits #' @param log Which variables to log transform ("x", "y", or "xy") #' @param main,xlab,ylab Character vector (or expression) giving plot title, #' x axis label, and y axis label respectively. #' @param asp The y/x aspect ratio #' @export #' @examples #' # Use data from data.frame #' qplot(mpg, wt, data = mtcars) #' qplot(mpg, wt, data = mtcars, colour = cyl) #' qplot(mpg, wt, data = mtcars, size = cyl) #' qplot(mpg, wt, data = mtcars, facets = vs ~ am) #' #' \donttest{ #' qplot(1:10, rnorm(10), colour = runif(10)) #' qplot(1:10, letters[1:10]) #' mod <- lm(mpg ~ wt, data = mtcars) #' qplot(resid(mod), fitted(mod)) #' #' f <- function() { #' a <- 1:10 #' b <- a ^ 2 #' qplot(a, b) #' } #' f() #' #' # To set aesthetics, wrap in I() #' qplot(mpg, wt, data = mtcars, colour = I("red")) #' #' # qplot will attempt to guess what geom you want depending on the input #' # both x and y supplied = scatterplot #' qplot(mpg, wt, data = mtcars) #' # just x supplied = histogram #' qplot(mpg, data = mtcars) #' # just y supplied = scatterplot, with x = seq_along(y) #' qplot(y = mpg, data = mtcars) #' #' # Use different geoms #' qplot(mpg, wt, data = mtcars, geom = "path") #' qplot(factor(cyl), wt, data = mtcars, geom = c("boxplot", "jitter")) #' qplot(mpg, data = mtcars, geom = "dotplot") #' } qplot <- function(x, y = NULL, ..., data, facets = NULL, margins = FALSE, geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), log = "", main = NULL, xlab = deparse(substitute(x)), ylab = deparse(substitute(y)), asp = NA, stat = NULL, position = NULL) { if (!missing(stat)) warning("`stat` is deprecated", call. = FALSE) if (!missing(position)) warning("`position` is deprecated", call. = FALSE) if (!is.character(geom)) stop("`geom` must be a character vector", call. = FALSE) argnames <- names(as.list(match.call(expand.dots = FALSE)[-1])) arguments <- as.list(match.call()[-1]) env <- parent.frame() aesthetics <- compact(arguments[.all_aesthetics]) aesthetics <- aesthetics[!is.constant(aesthetics)] aes_names <- names(aesthetics) aesthetics <- rename_aes(aesthetics) class(aesthetics) <- "uneval" if (missing(data)) { # If data not explicitly specified, will be pulled from workspace data <- data.frame() # Faceting variables must be in a data frame, so pull those out facetvars <- all.vars(facets) facetvars <- facetvars[facetvars != "."] names(facetvars) <- facetvars facetsdf <- as.data.frame(mget(facetvars, envir = env)) if (nrow(facetsdf)) data <- facetsdf } # Work out plot data, and modify aesthetics, if necessary if ("auto" %in% geom) { if ("sample" %in% aes_names) { geom[geom == "auto"] <- "qq" } else if (missing(y)) { x <- eval(aesthetics$x, data, env) if (is.discrete(x)) { geom[geom == "auto"] <- "bar" } else { geom[geom == "auto"] <- "histogram" } if (missing(ylab)) ylab <- "count" } else { if (missing(x)) { aesthetics$x <- bquote(seq_along(.(y)), aesthetics) } geom[geom == "auto"] <- "point" } } p <- ggplot(data, aesthetics, environment = env) if (is.null(facets)) { p <- p + facet_null() } else if (is.formula(facets) && length(facets) == 2) { p <- p + facet_wrap(facets) } else { p <- p + facet_grid(facets = deparse(facets), margins = margins) } if (!is.null(main)) p <- p + ggtitle(main) # Add geoms/statistics for (g in geom) { # Arguments are unevaluated because some are aesthetics. Need to evaluate # params - can't do in correct env because that's lost (no lazyeval) # so do the best we can by evaluating in parent frame. params <- arguments[setdiff(names(arguments), c(aes_names, argnames))] params <- lapply(params, eval, parent.frame()) p <- p + do.call(paste0("geom_", g), params) } logv <- function(var) var %in% strsplit(log, "")[[1]] if (logv("x")) p <- p + scale_x_log10() if (logv("y")) p <- p + scale_y_log10() if (!is.na(asp)) p <- p + theme(aspect.ratio = asp) if (!missing(xlab)) p <- p + xlab(xlab) if (!missing(ylab)) p <- p + ylab(ylab) if (!missing(xlim)) p <- p + xlim(xlim) if (!missing(ylim)) p <- p + ylim(ylim) p } #' @export #' @rdname qplot quickplot <- qplot is.constant <- function(x) { is_I_call <- function(x) is.call(x) && identical(x[[1]], quote(I)) vapply(x, is_I_call, logical(1)) } ggplot2/R/theme-defaults.r0000644000177400001440000003147313010131420015306 0ustar murdochusers#' Complete themes #' #' These are complete themes which control all non-data display. Use #' \code{\link{theme}} if you just need to tweak the display of an existing #' theme. #' #' @param base_size base font size #' @param base_family base font family #' #' @details #' \describe{ #' #' \item{\code{theme_gray}}{ #' The signature ggplot2 theme with a grey background and white gridlines, #' designed to put the data forward yet make comparisons easy.} #' #' \item{\code{theme_bw}}{ #' The classic dark-on-light ggplot2 theme. May work better for presentations #' displayed with a projector.} #' #' \item{\code{theme_linedraw}}{ #' A theme with only black lines of various widths on white backgrounds, #' reminiscent of a line drawings. Serves a purpose similar to \code{theme_bw}. #' Note that this theme has some very thin lines (<< 1 pt) which some journals #' may refuse.} #' #' \item{\code{theme_light}}{ #' A theme similar to \code{theme_linedraw} but with light grey lines and axes, #' to direct more attention towards the data.} #' #' \item{\code{theme_dark}}{ #' The dark cousin of \code{theme_light}, with similar line sizes but a dark background. Useful to make thin coloured lines pop out.} #' #' \item{\code{theme_minimal}}{ #' A minimalistic theme with no background annotations.} #' #' \item{\code{theme_classic}}{ #' A classic-looking theme, with x and y axis lines and no gridlines.} #' #' \item{\code{theme_void}}{ #' A completely empty theme.} #' #' } #' #' @examples #' p <- ggplot(mtcars) + geom_point(aes(x = wt, y = mpg, #' colour = factor(gear))) + facet_wrap(~am) #' p + theme_gray() # the default #' p + theme_bw() #' p + theme_linedraw() #' p + theme_light() #' p + theme_dark() #' p + theme_minimal() #' p + theme_classic() #' p + theme_void() #' @name ggtheme #' @aliases NULL NULL #' @include theme.r #' @export #' @rdname ggtheme theme_grey <- function(base_size = 11, base_family = "") { half_line <- base_size / 2 theme( # Elements in this first block aren't used directly, but are inherited # by others line = element_line(colour = "black", size = 0.5, linetype = 1, lineend = "butt"), rect = element_rect(fill = "white", colour = "black", size = 0.5, linetype = 1), text = element_text( family = base_family, face = "plain", colour = "black", size = base_size, lineheight = 0.9, hjust = 0.5, vjust = 0.5, angle = 0, margin = margin(), debug = FALSE ), axis.line = element_blank(), axis.line.x = NULL, axis.line.y = NULL, axis.text = element_text(size = rel(0.8), colour = "grey30"), axis.text.x = element_text(margin = margin(t = 0.8 * half_line / 2), vjust = 1), axis.text.x.top = element_text(margin = margin(b = 0.8 * half_line / 2), vjust = 0), axis.text.y = element_text(margin = margin(r = 0.8 * half_line / 2), hjust = 1), axis.text.y.right = element_text(margin = margin(l = 0.8 * half_line / 2), hjust = 0), axis.ticks = element_line(colour = "grey20"), axis.ticks.length = unit(half_line / 2, "pt"), axis.title.x = element_text( margin = margin(t = half_line), vjust = 1 ), axis.title.x.top = element_text( margin = margin(b = half_line), vjust = 0 ), axis.title.y = element_text( angle = 90, margin = margin(r = half_line), vjust = 1 ), axis.title.y.right = element_text( angle = -90, margin = margin(l = half_line), vjust = 0 ), legend.background = element_rect(colour = NA), legend.spacing = unit(0.4, "cm"), legend.spacing.x = NULL, legend.spacing.y = NULL, legend.margin = margin(0.2, 0.2, 0.2, 0.2, "cm"), legend.key = element_rect(fill = "grey95", colour = "white"), legend.key.size = unit(1.2, "lines"), legend.key.height = NULL, legend.key.width = NULL, legend.text = element_text(size = rel(0.8)), legend.text.align = NULL, legend.title = element_text(hjust = 0), legend.title.align = NULL, legend.position = "right", legend.direction = NULL, legend.justification = "center", legend.box = NULL, legend.box.margin = margin(0, 0, 0, 0, "cm"), legend.box.background = element_blank(), legend.box.spacing = unit(0.4, "cm"), panel.background = element_rect(fill = "grey92", colour = NA), panel.border = element_blank(), panel.grid.major = element_line(colour = "white"), panel.grid.minor = element_line(colour = "white", size = 0.25), panel.spacing = unit(half_line, "pt"), panel.spacing.x = NULL, panel.spacing.y = NULL, panel.ontop = FALSE, strip.background = element_rect(fill = "grey85", colour = NA), strip.text = element_text(colour = "grey10", size = rel(0.8)), strip.text.x = element_text(margin = margin(t = half_line, b = half_line)), strip.text.y = element_text(angle = -90, margin = margin(l = half_line, r = half_line)), strip.placement = "inside", strip.placement.x = NULL, strip.placement.y = NULL, strip.switch.pad.grid = unit(0.1, "cm"), strip.switch.pad.wrap = unit(0.1, "cm"), plot.background = element_rect(colour = "white"), plot.title = element_text( size = rel(1.2), hjust = 0, vjust = 1, margin = margin(b = half_line * 1.2) ), plot.subtitle = element_text( size = rel(0.9), hjust = 0, vjust = 1, margin = margin(b = half_line * 0.9) ), plot.caption = element_text( size = rel(0.9), hjust = 1, vjust = 1, margin = margin(t = half_line * 0.9) ), plot.margin = margin(half_line, half_line, half_line, half_line), complete = TRUE ) } #' @export #' @rdname ggtheme theme_gray <- theme_grey #' @export #' @rdname ggtheme theme_bw <- function(base_size = 11, base_family = "") { # Starts with theme_grey and then modify some parts theme_grey(base_size = base_size, base_family = base_family) %+replace% theme( # white background and dark border panel.background = element_rect(fill = "white", colour = NA), panel.border = element_rect(fill = NA, colour = "grey20"), # make gridlines dark, same contrast with white as in theme_grey panel.grid.major = element_line(colour = "grey92"), panel.grid.minor = element_line(colour = "grey92", size = 0.25), # contour strips to match panel contour strip.background = element_rect(fill = "grey85", colour = "grey20"), # match legend key to background legend.key = element_rect(fill = "white", colour=NA), complete = TRUE ) } #' @export #' @rdname ggtheme theme_linedraw <- function(base_size = 11, base_family = "") { # Starts with theme_bw and then modify some parts # = replace all greys with pure black or white theme_bw(base_size = base_size, base_family = base_family) %+replace% theme( # black text and ticks on the axes axis.text = element_text(colour = "black", size = rel(0.8)), axis.ticks = element_line(colour = "black", size = 0.25), # NB: match the *visual* thickness of axis ticks to the panel border # 0.5 clipped looks like 0.25 # pure black panel border and grid lines, but thinner panel.border = element_rect(fill = NA, colour = "black", size = 0.5), panel.grid.major = element_line(colour = "black", size = 0.05), panel.grid.minor = element_line(colour = "black", size = 0.025), # strips with black background and white text strip.background = element_rect(fill = "black"), strip.text = element_text(colour = "white", size = rel(0.8)), complete = TRUE ) } #' @export #' @rdname ggtheme theme_light <- function(base_size = 11, base_family = "") { # Starts with theme_grey and then modify some parts theme_grey(base_size = base_size, base_family = base_family) %+replace% theme( # white panel with light grey border panel.background = element_rect(fill = "white", colour = NA), panel.border = element_rect(fill = NA, colour = "grey70", size = 0.5), # light grey, thinner gridlines # => make them slightly darker to keep acceptable contrast panel.grid.major = element_line(colour = "grey87", size = 0.25), panel.grid.minor = element_line(colour = "grey87", size = 0.125), # match axes ticks thickness to gridlines and colour to panel border axis.ticks = element_line(colour = "grey70", size = 0.25), # match legend key to panel.background legend.key = element_rect(fill = "white", colour = NA), # dark strips with light text (inverse contrast compared to theme_grey) strip.background = element_rect(fill = "grey70", colour = NA), strip.text = element_text(colour = "white", size = rel(0.8)), complete = TRUE ) } #' @export #' @rdname ggtheme theme_dark <- function(base_size = 11, base_family = "") { # Starts with theme_grey and then modify some parts theme_grey(base_size = base_size, base_family = base_family) %+replace% theme( # dark panel panel.background = element_rect(fill = "grey50", colour = NA), # inverse grid lines contrast compared to theme_grey # make them thinner and try to keep the same visual contrast as in theme_light panel.grid.major = element_line(colour = "grey42", size = 0.25), panel.grid.minor = element_line(colour = "grey42", size = 0.125), # match axes ticks thickness to gridlines axis.ticks = element_line(colour = "grey20", size = 0.25), # match legend key to panel.background legend.key = element_rect(fill = "grey50", colour = NA), # dark strips with light text (inverse contrast compared to theme_grey) strip.background = element_rect(fill = "grey15", colour = NA), strip.text = element_text(colour = "grey90", size = rel(0.8)), complete = TRUE ) } #' @export #' @rdname ggtheme theme_minimal <- function(base_size = 11, base_family = "") { # Starts with theme_bw and remove most parts theme_bw(base_size = base_size, base_family = base_family) %+replace% theme( axis.ticks = element_blank(), legend.background = element_blank(), legend.key = element_blank(), panel.background = element_blank(), panel.border = element_blank(), strip.background = element_blank(), plot.background = element_blank(), complete = TRUE ) } #' @export #' @rdname ggtheme theme_classic <- function(base_size = 11, base_family = ""){ theme_bw(base_size = base_size, base_family = base_family) %+replace% theme( # no background and no grid panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), # show axes axis.line = element_line(colour = "black", size = 0.5), # match legend key to panel.background legend.key = element_blank(), # simple, black and white strips strip.background = element_rect(fill = "white", colour = "black", size = 1), # NB: size is 1 but clipped, it looks like the 0.5 of the axes complete = TRUE ) } #' @export #' @rdname ggtheme theme_void <- function(base_size = 11, base_family = "") { theme( # Use only inherited elements and make almost everything blank # Only keep indispensable text line = element_blank(), rect = element_blank(), text = element_text( family = base_family, face = "plain", colour = "black", size = base_size, lineheight = 0.9, hjust = 0.5, vjust = 0.5, angle = 0, margin = margin(), debug = FALSE ), axis.text = element_blank(), axis.title = element_blank(), legend.text = element_text(size = rel(0.8)), legend.title = element_text(hjust = 0), strip.text = element_text(size = rel(0.8)), plot.margin = unit(c(0, 0, 0, 0), "lines"), complete = TRUE ) } ggplot2/R/geom-rect.r0000644000177400001440000000424712654700101014273 0ustar murdochusers#' @export #' @rdname geom_tile geom_rect <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomRect, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomRect <- ggproto("GeomRect", Geom, default_aes = aes(colour = NA, fill = "grey35", size = 0.5, linetype = 1, alpha = NA), required_aes = c("xmin", "xmax", "ymin", "ymax"), draw_panel = function(self, data, panel_scales, coord) { if (!coord$is_linear()) { aesthetics <- setdiff( names(data), c("x", "y", "xmin", "xmax", "ymin", "ymax") ) polys <- plyr::alply(data, 1, function(row) { poly <- rect_to_poly(row$xmin, row$xmax, row$ymin, row$ymax) aes <- as.data.frame(row[aesthetics], stringsAsFactors = FALSE)[rep(1,5), ] GeomPolygon$draw_panel(cbind(poly, aes), panel_scales, coord) }) ggname("bar", do.call("grobTree", polys)) } else { coords <- coord$transform(data, panel_scales) ggname("geom_rect", rectGrob( coords$xmin, coords$ymax, width = coords$xmax - coords$xmin, height = coords$ymax - coords$ymin, default.units = "native", just = c("left", "top"), gp = gpar( col = coords$colour, fill = alpha(coords$fill, coords$alpha), lwd = coords$size * .pt, lty = coords$linetype, lineend = "butt" ) )) } }, draw_key = draw_key_polygon ) # Convert rectangle to polygon # Useful for non-Cartesian coordinate systems where it's easy to work purely in terms of locations, rather than locations and dimensions. # # @keyword internal rect_to_poly <- function(xmin, xmax, ymin, ymax) { data.frame( y = c(ymax, ymax, ymin, ymin, ymax), x = c(xmin, xmax, xmax, xmin, xmin) ) } ggplot2/R/geom-crossbar.r0000644000177400001440000000555712651701053015165 0ustar murdochusers#' @export #' @rdname geom_linerange geom_crossbar <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., fatten = 2.5, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomCrossbar, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( fatten = fatten, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomCrossbar <- ggproto("GeomCrossbar", Geom, setup_data = function(data, params) { GeomErrorbar$setup_data(data, params) }, default_aes = aes(colour = "black", fill = NA, size = 0.5, linetype = 1, alpha = NA), required_aes = c("x", "y", "ymin", "ymax"), draw_key = draw_key_crossbar, draw_panel = function(data, panel_scales, coord, fatten = 2.5, width = NULL) { middle <- transform(data, x = xmin, xend = xmax, yend = y, size = size * fatten, alpha = NA) has_notch <- !is.null(data$ynotchlower) && !is.null(data$ynotchupper) && !is.na(data$ynotchlower) && !is.na(data$ynotchupper) if (has_notch) { if (data$ynotchlower < data$ymin || data$ynotchupper > data$ymax) message("notch went outside hinges. Try setting notch=FALSE.") notchindent <- (1 - data$notchwidth) * (data$xmax - data$xmin) / 2 middle$x <- middle$x + notchindent middle$xend <- middle$xend - notchindent box <- data.frame( x = c( data$xmin, data$xmin, data$xmin + notchindent, data$xmin, data$xmin, data$xmax, data$xmax, data$xmax - notchindent, data$xmax, data$xmax, data$xmin ), y = c( data$ymax, data$ynotchupper, data$y, data$ynotchlower, data$ymin, data$ymin, data$ynotchlower, data$y, data$ynotchupper, data$ymax, data$ymax ), alpha = data$alpha, colour = data$colour, size = data$size, linetype = data$linetype, fill = data$fill, group = seq_len(nrow(data)), stringsAsFactors = FALSE ) } else { # No notch box <- data.frame( x = c(data$xmin, data$xmin, data$xmax, data$xmax, data$xmin), y = c(data$ymax, data$ymin, data$ymin, data$ymax, data$ymax), alpha = data$alpha, colour = data$colour, size = data$size, linetype = data$linetype, fill = data$fill, group = seq_len(nrow(data)), # each bar forms it's own group stringsAsFactors = FALSE ) } ggname("geom_crossbar", gTree(children = gList( GeomPolygon$draw_panel(box, panel_scales, coord), GeomSegment$draw_panel(middle, panel_scales, coord) ))) } ) ggplot2/R/stat-bin2d.r0000644000177400001440000000757612766514562014412 0ustar murdochusers#' @param bins numeric vector giving number of bins in both vertical and #' horizontal directions. Set to 30 by default. #' @param binwidth Numeric vector giving bin width in both vertical and #' horizontal directions. Overrides \code{bins} if both set. #' @param drop if \code{TRUE} removes all cells with 0 counts. #' @export #' @rdname geom_bin2d stat_bin_2d <- function(mapping = NULL, data = NULL, geom = "tile", position = "identity", ..., bins = 30, binwidth = NULL, drop = TRUE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatBin2d, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( bins = bins, binwidth = binwidth, drop = drop, na.rm = na.rm, ... ) ) } #' @export #' @rdname geom_bin2d #' @usage NULL stat_bin2d <- stat_bin_2d #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatBin2d <- ggproto("StatBin2d", Stat, default_aes = aes(fill = ..count..), required_aes = c("x", "y"), compute_group = function(data, scales, binwidth = NULL, bins = 30, breaks = NULL, origin = NULL, drop = TRUE) { origin <- dual_param(origin, list(NULL, NULL)) binwidth <- dual_param(binwidth, list(NULL, NULL)) breaks <- dual_param(breaks, list(NULL, NULL)) bins <- dual_param(bins, list(x = 30, y = 30)) xbreaks <- bin2d_breaks(scales$x, breaks$x, origin$x, binwidth$x, bins$x) ybreaks <- bin2d_breaks(scales$y, breaks$y, origin$y, binwidth$y, bins$y) xbin <- cut(data$x, xbreaks, include.lowest = TRUE, labels = FALSE) ybin <- cut(data$y, ybreaks, include.lowest = TRUE, labels = FALSE) if (is.null(data$weight)) data$weight <- 1 out <- tapply_df(data$weight, list(xbin = xbin, ybin = ybin), sum, drop = drop) xdim <- bin_loc(xbreaks, out$xbin) out$x <- xdim$mid out$width <- xdim$length ydim <- bin_loc(ybreaks, out$ybin) out$y <- ydim$mid out$height <- ydim$length out$count <- out$value out$density <- out$count / sum(out$count, na.rm = TRUE) out } ) dual_param <- function(x, default = list(x = NULL, y = NULL)) { if (is.null(x)) { default } else if (length(x) == 2) { if (is.list(x) && !is.null(names(x))) { x } else { list(x = x[[1]], y = x[[2]]) } } else { list(x = x, y = x) } } bin2d_breaks <- function(scale, breaks = NULL, origin = NULL, binwidth = NULL, bins = 30, right = TRUE) { # Bins for categorical data should take the width of one level, # and should show up centered over their tick marks. All other parameters # are ignored. if (scale$is_discrete()) { breaks <- scale$get_breaks() return(-0.5 + seq_len(length(breaks) + 1)) } if (!is.null(breaks)) return(breaks) range <- scale$get_limits() if (is.null(binwidth) || identical(binwidth, NA)) { binwidth <- diff(range) / bins } stopifnot(is.numeric(binwidth), length(binwidth) == 1) if (is.null(origin) || identical(origin, NA)) { origin <- plyr::round_any(range[1], binwidth, floor) } stopifnot(is.numeric(origin), length(origin) == 1) breaks <- seq(origin, range[2] + binwidth, binwidth) adjust_breaks(breaks, right) } adjust_breaks <- function(x, right = TRUE) { diddle <- 1e-07 * stats::median(diff(x)) if (right) { fuzz <- c(-diddle, rep.int(diddle, length(x) - 1)) } else { fuzz <- c(rep.int(-diddle, length(x) - 1), diddle) } sort(x) + fuzz } bin_loc <- function(x, id) { left <- x[-length(x)] right <- x[-1] list( left = left[id], right = right[id], mid = ((left + right) / 2)[id], length = diff(x)[id] ) } ggplot2/R/labels.r0000644000177400001440000000531013005744262013652 0ustar murdochusers#' Update axis/legend labels #' #' @param p plot to modify #' @param labels named list of new labels #' @keywords internal #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() #' update_labels(p, list(x = "New x")) #' update_labels(p, list(x = expression(x / y ^ 2))) #' update_labels(p, list(x = "New x", y = "New Y")) #' update_labels(p, list(colour = "Fail silently")) update_labels <- function(p, labels) { p <- plot_clone(p) p$labels <- defaults(labels, p$labels) p } #' Modify axis, legend, and plot labels #' #' Good labels are critical for making your plots accessible to a wider #' audience. Ensure the axis and legend labels display the full variable name. #' Use the plot \code{title} and \code{subtitle} to explain the main findings. #' It's common to use the \code{caption} to provide information about the #' data source. #' #' You can also set axis and legend labels in the individual scales (using #' the first argument, the \code{name}. I recommend doing that if you're #' changing other scale options. #' #' @param label The text for the axis, plot title or caption below the plot. #' @param subtitle the text for the subtitle for the plot which will be #' displayed below the title. Leave \code{NULL} for no subtitle. #' @param ... A list of new name-value pairs. The name should either be #' an aesthetic, or one of "title", "subtitle", or "caption". #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt, colour = cyl)) + geom_point() #' p + labs(colour = "Cylinders") #' p + labs(x = "New x label") #' #' # The plot title appears at the top-left, with the subtitle #' # display in smaller text underneath it #' p + labs(title = "New plot title") #' p + labs(title = "New plot title", subtitle = "A subtitle") #' #' # The caption appears in the bottom-right, and is often used for #' # sources, notes or copyright #' p + labs(caption = "(based on data from ...)") labs <- function(...) { args <- list(...) if (is.list(args[[1]])) args <- args[[1]] args <- rename_aes(args) structure(args, class = "labels") } #' @rdname labs #' @export xlab <- function(label) { labs(x = label) } #' @rdname labs #' @export ylab <- function(label) { labs(y = label) } #' @rdname labs #' @export ggtitle <- function(label, subtitle = NULL) { labs(title = label, subtitle = subtitle) } # Convert aesthetic mapping into text labels make_labels <- function(mapping) { remove_dots <- function(x) { gsub(match_calculated_aes, "\\1", x) } default_label <- function(aesthetic, mapping) { # e.g., geom_smooth(aes(colour = "loess")) if (is.character(mapping)) { aesthetic } else { remove_dots(deparse(mapping)) } } Map(default_label, names(mapping), mapping) } ggplot2/R/translate-qplot-ggplot.r0000644000177400001440000000736013006417672017046 0ustar murdochusers#' Translating between qplot and ggplot #' #' Within ggplot2, there are two basic methods to create plots, with qplot() #' and ggplot(). qplot() is designed primarily for interactive use: it makes #' a number of assumptions that speed most cases, but when designing multilayered #' plots with different data sources it can get in the way. This section #' describes what those defaults are, and how they map to the fuller ggplot() #' syntax. #' #' @keywords internal #' @name translate_qplot_ggplot #' @examples #' #' # By default, qplot() assumes that you want a scatterplot, #' # i.e., you want to use geom_point() #' # qplot(x, y, data = data) #' # ggplot(data, aes(x, y)) + geom_point() #' #' # Using Aesthetics #' #' # If you map additional aesthetics, these will be added to the defaults. With #' # qplot() there is no way to use different aesthetic mappings (or data) in #' # different layers #' # qplot(x, y, data = data, shape = shape, colour = colour) #' # ggplot(data, aes(x, y, shape = shape, colour = colour)) + geom_point() #' # #' # Aesthetic parameters in qplot() always try to map the aesthetic to a #' # variable. If the argument is not a variable but a value, effectively a new column #' # is added to the original dataset with that value. To set an aesthetic to a #' # value and override the default appearance, you surround the value with I() in #' # qplot(), or pass it as a parameter to the layer. #' # qplot(x, y, data = data, colour = I("red")) #' # ggplot(data, aes(x, y)) + geom_point(colour = "red") #' #' # Changing the geom parameter changes the geom added to the plot #' # qplot(x, y, data = data, geom = "line") #' # ggplot(data, aes(x, y)) + geom_line() #' #' # Not all geoms require both x and y, e.g., geom_bar() and geom_histogram(). #' # For these two geoms, if the y aesthetic is not supplied, both qplot and #' # ggplot commands default to "count" on the y-axis #' # ggplot(data, aes(x)) + geom_bar() #' # qplot(x, data = data, geom = "bar") #' #' # If a vector of multiple geom names is supplied to the geom argument, each #' # geom will be added in turn #' # qplot(x, y, data = data, geom = c("point", "smooth")) #' # ggplot(data, aes(x, y)) + geom_point() + geom_smooth() #' #' # Unlike the rest of ggplot2, stats and geoms are independent #' # qplot(x, y, data = data, stat = "bin") #' # ggplot(data, aes(x, y)) + geom_point(stat = "bin") #' # #' # Any layer parameters will be passed on to all layers. Most layers will ignore #' # parameters that they don't need #' # qplot(x, y, data = data, geom = c("point", "smooth"), method = "lm") #' # ggplot(data, aes(x, y)) + geom_point(method = "lm") + geom_smooth(method = "lm") #' #' # Scales and axes #' #' # You can control basic properties of the x and y scales with the xlim, ylim, #' # xlab and ylab arguments #' # qplot(x, y, data = data, xlim = c(1, 5), xlab = "my label") #' # ggplot(data, aes(x, y)) + geom_point() + #' # scale_x_continuous("my label", limits = c(1, 5)) #' #' # qplot(x, y, data = data, xlim = c(1, 5), ylim = c(10, 20)) #' # ggplot(data, aes(x, y)) + geom_point() + #' # scale_x_continuous(limits = c(1, 5)) + scale_y_continuous(limits = c(10, 20)) #' #' # Like plot(), qplot() has a convenient way of log transforming the axes. #' # qplot(x, y, data = data, log = "xy") #' # ggplot(data, aes(x, y)) + geom_point() + scale_x_log10() + scale_y_log10() #' # There are many other possible transformations, but not all are #' # accessible from within qplot(), see ?scale_continuous for more #' #' # Plot options #' #' # qplot() recognises the same options as plot does, and converts them to their #' # ggplot2 equivalents. See ?theme for more on ggplot options #' # qplot(x, y, data = data, main="title", asp = 1) #' # ggplot(data, aes(x, y)) + geom_point() + labs(title = "title") + theme(aspect.ratio = 1) NULL ggplot2/R/stat-summary-2d.r0000644000177400001440000001004212654714052015362 0ustar murdochusers#' Bin and summarise in 2d (rectangle & hexagons) #' #' \code{stat_summary_2d} is a 2d variation of \code{\link{stat_summary}}. #' \code{stat_summary_hex} is a hexagonal variation of #' \code{\link{stat_summary_2d}}. The data are divided into bins defined #' by \code{x} and \code{y}, and then the values of \code{z} in each cell is #' are summarised with \code{fun}. #' #' @section Aesthetics: #' \itemize{ #' \item \code{x}: horizontal position #' \item \code{y}: vertical position #' \item \code{z}: value passed to the summary function #' } #' @section Computed variables: #' \describe{ #' \item{x,y}{Location} #' \item{value}{Value of summary statistic.} #' } #' @seealso \code{\link{stat_summary_hex}} for hexagonal summarization. #' \code{\link{stat_bin2d}} for the binning options. #' @inheritParams layer #' @inheritParams geom_point #' @inheritParams stat_bin_2d #' @param drop drop if the output of \code{fun} is \code{NA}. #' @param fun function for summary. #' @param fun.args A list of extra arguments to pass to \code{fun} #' @export #' @examples #' d <- ggplot(diamonds, aes(carat, depth, z = price)) #' d + stat_summary_2d() #' #' # Specifying function #' d + stat_summary_2d(fun = function(x) sum(x^2)) #' d + stat_summary_2d(fun = var) #' d + stat_summary_2d(fun = "quantile", fun.args = list(probs = 0.1)) #' #' if (requireNamespace("hexbin")) { #' d + stat_summary_hex() #' } stat_summary_2d <- function(mapping = NULL, data = NULL, geom = "tile", position = "identity", ..., bins = 30, binwidth = NULL, drop = TRUE, fun = "mean", fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatSummary2d, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( bins = bins, binwidth = binwidth, drop = drop, fun = fun, fun.args = fun.args, na.rm = na.rm, ... ) ) } #' @export #' @rdname stat_summary_2d #' @usage NULL stat_summary2d <- function(...) { message("Please use stat_summary_2d() instead") stat_summary_2d(...) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSummary2d <- ggproto("StatSummary2d", Stat, default_aes = aes(fill = ..value..), required_aes = c("x", "y", "z"), compute_group = function(data, scales, binwidth = NULL, bins = 30, breaks = NULL, origin = NULL, drop = TRUE, fun = "mean", fun.args = list()) { origin <- dual_param(origin, list(NULL, NULL)) binwidth <- dual_param(binwidth, list(NULL, NULL)) breaks <- dual_param(breaks, list(NULL, NULL)) bins <- dual_param(bins, list(x = 30, y = 30)) xbreaks <- bin2d_breaks(scales$x, breaks$x, origin$x, binwidth$x, bins$x) ybreaks <- bin2d_breaks(scales$y, breaks$y, origin$y, binwidth$y, bins$y) xbin <- cut(data$x, xbreaks, include.lowest = TRUE, labels = FALSE) ybin <- cut(data$y, ybreaks, include.lowest = TRUE, labels = FALSE) f <- function(x) { do.call(fun, c(list(quote(x)), fun.args)) } out <- tapply_df(data$z, list(xbin = xbin, ybin = ybin), f, drop = drop) xdim <- bin_loc(xbreaks, out$xbin) out$x <- xdim$mid out$width <- xdim$length ydim <- bin_loc(ybreaks, out$ybin) out$y <- ydim$mid out$height <- ydim$length out } ) # Adaptation of tapply that returns a data frame instead of a matrix tapply_df <- function(x, index, fun, ..., drop = TRUE) { labels <- lapply(index, ulevels) out <- expand.grid(labels, KEEP.OUT.ATTRS = FALSE, stringsAsFactors = FALSE) grps <- split(x, index) names(grps) <- NULL out$value <- unlist(lapply(grps, fun, ...)) if (drop) { n <- vapply(grps, length, integer(1)) out <- out[n > 0, , drop = FALSE] } out } ggplot2/R/annotation-map.r0000644000177400001440000000417713006175502015343 0ustar murdochusers#' @include geom-map.r NULL #' Annotation: a maps #' #' Display a fixed map on a plot. #' #' @param map data frame representing a map. Most map objects can be #' converted into the right format by using \code{\link{fortify}} #' @param ... other arguments used to modify aesthetics #' @export #' @examples #' if (require("maps")) { #' usamap <- map_data("state") #' #' seal.sub <- subset(seals, long > -130 & lat < 45 & lat > 40) #' ggplot(seal.sub, aes(x = long, y = lat)) + #' annotation_map(usamap, fill = "NA", colour = "grey50") + #' geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat)) #' #' seal2 <- transform(seal.sub, #' latr = cut(lat, 2), #' longr = cut(long, 2)) #' #' ggplot(seal2, aes(x = long, y = lat)) + #' annotation_map(usamap, fill = "NA", colour = "grey50") + #' geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat)) + #' facet_grid(latr ~ longr, scales = "free", space = "free") #' } annotation_map <- function(map, ...) { # Get map input into correct form stopifnot(is.data.frame(map)) if (!is.null(map$lat)) map$y <- map$lat if (!is.null(map$long)) map$x <- map$long if (!is.null(map$region)) map$id <- map$region stopifnot(all(c("x", "y", "id") %in% names(map))) layer( data = dummy_data(), stat = StatIdentity, geom = GeomAnnotationMap, position = PositionIdentity, inherit.aes = FALSE, params = list(map = map, ...) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomAnnotationMap <- ggproto("GeomAnnotationMap", GeomMap, extra_params = "", handle_na = function(data, params) { data }, draw_panel = function(data, panel_scales, coord, map) { # Munch, then set up id variable for polygonGrob - # must be sequential integers coords <- coord_munch(coord, map, panel_scales) coords$group <- coords$group %||% coords$id grob_id <- match(coords$group, unique(coords$group)) polygonGrob(coords$x, coords$y, default.units = "native", id = grob_id, gp = gpar( col = data$colour, fill = alpha(data$fill, data$alpha), lwd = data$size * .pt) ) }, required_aes = c() ) ggplot2/R/utilities-matrix.r0000644000177400001440000000217612556122063015733 0ustar murdochusers# Col union # Form the union of columns in a and b. If there are columns of the same name in both a and b, take the column from a. # # @param data frame a # @param data frame b # @keyword internal cunion <- function(a, b) { if (length(a) == 0) return(b) if (length(b) == 0) return(a) cbind(a, b[setdiff(names(b), names(a))]) } # Interleave (or zip) multiple units into one vector interleave <- function(...) UseMethod("interleave") #' @export interleave.unit <- function(...) { do.call("unit.c", do.call("interleave.default", plyr::llply(list(...), as.list))) } #' @export interleave.default <- function(...) { vectors <- list(...) # Check lengths lengths <- unique(setdiff(plyr::laply(vectors, length), 1)) if (length(lengths) == 0) lengths <- 1 stopifnot(length(lengths) <= 1) # Replicate elements of length one up to correct length singletons <- plyr::laply(vectors, length) == 1 vectors[singletons] <- plyr::llply(vectors[singletons], rep, lengths) # Interleave vectors n <- lengths p <- length(vectors) interleave <- rep(1:n, each = p) + seq(0, p - 1) * n unlist(vectors, recursive = FALSE)[interleave] } ggplot2/R/geom-defaults.r0000644000177400001440000000236313005655703015152 0ustar murdochusers#' Modify geom/stat aesthetic defaults for future plots #' #' @param stat,geom Name of geom/stat to modify (like \code{"point"} or #' \code{"bin"}), or a Geom/Stat object (like \code{GeomPoint} or #' \code{StatBin}). #' @param new Named list of aesthetics. #' @keywords internal #' @export #' @examples #' update_geom_defaults("point", list(colour = "darkblue")) #' ggplot(mtcars, aes(mpg, wt)) + geom_point() #' update_geom_defaults("point", list(colour = "black")) #' @rdname update_defaults update_geom_defaults <- function(geom, new) { if (is.character(geom)) { g <- find_subclass("Geom", geom, parent.frame()) } else if (inherits(geom, "Geom")) { g <- geom } else { stop('`geom` must be a string (like "point") or a Geom object (like GeomPoint).', call. = FALSE) } old <- g$default_aes g$default_aes <- defaults(new, old) } #' @rdname update_defaults #' @export update_stat_defaults <- function(stat, new) { if (is.character(stat)) { g <- find_subclass("Stat", stat, parent.frame()) } else if (inherits(stat, "Stat")) { g <- stat } else { stop('`stat` must be a string (like "point") or a Stat object (like StatBin).', call. = FALSE) } old <- g$default_aes g$default_aes <- defaults(new, old) } ggplot2/R/utilities-resolution.r0000644000177400001440000000160313006417104016616 0ustar murdochusers#' Compute the "resolution" of a numeric vector #' #' The resolution is the smallest non-zero distance between adjacent #' values. If there is only one unique value, then the resolution is defined #' to be one. If x is an integer vector, then it is assumed to represent a #' discrete variable, and the resolution is 1. #' #' @param x numeric vector #' @param zero should a zero value be automatically included in the #' computation of resolution #' @export #' @examples #' resolution(1:10) #' resolution((1:10) - 0.5) #' resolution((1:10) - 0.5, FALSE) #' #' # Note the difference between numeric and integer vectors #' resolution(c(2, 10, 20, 50)) #' resolution(c(2L, 10L, 20L, 50L)) resolution <- function(x, zero = TRUE) { if (is.integer(x) || zero_range(range(x, na.rm = TRUE))) return(1) x <- unique(as.numeric(x)) if (zero) { x <- unique(c(0, x)) } min(diff(sort(x))) } ggplot2/R/stat-contour.r0000644000177400001440000000640412746502555015067 0ustar murdochusers#' @inheritParams stat_identity #' @export #' @section Computed variables: #' \describe{ #' \item{level}{height of contour} #' } #' @rdname geom_contour stat_contour <- function(mapping = NULL, data = NULL, geom = "contour", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatContour, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatContour <- ggproto("StatContour", Stat, required_aes = c("x", "y", "z"), default_aes = aes(order = ..level..), compute_group = function(data, scales, bins = NULL, binwidth = NULL, breaks = NULL, complete = FALSE, na.rm = FALSE) { # If no parameters set, use pretty bins if (is.null(bins) && is.null(binwidth) && is.null(breaks)) { breaks <- pretty(range(data$z), 10) } # If provided, use bins to calculate binwidth if (!is.null(bins)) { binwidth <- diff(range(data$z)) / bins } # If necessary, compute breaks from binwidth if (is.null(breaks)) { breaks <- fullseq(range(data$z), binwidth) } contour_lines(data, breaks, complete = complete) } ) # v3d <- reshape2::melt(volcano) # names(v3d) <- c("x", "y", "z") # # breaks <- seq(95, 195, length.out = 10) # contours <- contourLines(v3d, breaks) # ggplot(contours, aes(x, y)) + # geom_path() + # facet_wrap(~piece) contour_lines <- function(data, breaks, complete = FALSE) { z <- tapply(data$z, data[c("x", "y")], identity) if (is.list(z)) { stop("Contour requires single `z` at each combination of `x` and `y`.", call. = FALSE) } cl <- grDevices::contourLines( x = sort(unique(data$x)), y = sort(unique(data$y)), z = z, levels = breaks) if (length(cl) == 0) { warning("Not possible to generate contour data", call. = FALSE) return(data.frame()) } # Convert list of lists into single data frame lengths <- vapply(cl, function(x) length(x$x), integer(1)) levels <- vapply(cl, "[[", "level", FUN.VALUE = double(1)) xs <- unlist(lapply(cl, "[[", "x"), use.names = FALSE) ys <- unlist(lapply(cl, "[[", "y"), use.names = FALSE) pieces <- rep(seq_along(cl), lengths) # Add leading zeros so that groups can be properly sorted later groups <- paste(data$group[1], sprintf("%03d", pieces), sep = "-") data.frame( level = rep(levels, lengths), x = xs, y = ys, piece = pieces, group = groups ) } # 1 = clockwise, -1 = counterclockwise, 0 = 0 area # From http://stackoverflow.com/questions/1165647 # x <- c(5, 6, 4, 1, 1) # y <- c(0, 4, 5, 5, 0) # poly_dir(x, y) poly_dir <- function(x, y) { xdiff <- c(x[-1], x[1]) - x ysum <- c(y[-1], y[1]) + y sign(sum(xdiff * ysum)) } # To fix breaks and complete the polygons, we need to add 0-4 corner points. # # contours <- ddply(contours, "piece", mutate, dir = ggplot2:::poly_dir(x, y)) # ggplot(contours, aes(x, y)) + # geom_path(aes(group = piece, colour = factor(dir))) # last_plot() + facet_wrap(~ level) ggplot2/R/ggplot2.r0000644000177400001440000000020013005656551013762 0ustar murdochusers#' @keywords internal "_PACKAGE" #' @import scales grid gtable #' @importFrom plyr defaults #' @importFrom stats setNames NULL ggplot2/R/translate-qplot-lattice.r0000644000177400001440000000554713006417670017202 0ustar murdochusers#' Translating between qplot and lattice #' #' The major difference between lattice and ggplot2 is that lattice uses a #' formula based interface. ggplot2 does not because the formula does not #' generalise well to more complicated situations. #' #' @keywords internal #' @name translate_qplot_lattice #' @examples #' \donttest{ #' library(lattice) #' #' if (require("ggplot2movies")) { #' xyplot(rating ~ year, data=movies) #' qplot(year, rating, data=movies) #' #' xyplot(rating ~ year | Comedy + Action, data = movies) #' qplot(year, rating, data = movies, facets = ~ Comedy + Action) #' # Or maybe #' qplot(year, rating, data = movies, facets = Comedy ~ Action) #' #' # While lattice has many different functions to produce different types of #' # graphics (which are all basically equivalent to setting the panel argument), #' # ggplot2 has qplot(). #' #' stripplot(~ rating, data = movies, jitter.data = TRUE) #' qplot(rating, 1, data = movies, geom = "jitter") #' #' histogram(~ rating, data = movies) #' qplot(rating, data = movies, geom = "histogram") #' #' bwplot(Comedy ~ rating ,data = movies) #' qplot(factor(Comedy), rating, data = movies, geom = "boxplot") #' #' xyplot(wt ~ mpg, mtcars, type = c("p","smooth")) #' qplot(mpg, wt, data = mtcars, geom = c("point","smooth")) #' } #' #' # The capabilities for scale manipulations are similar in both ggplot2 and #' # lattice, although the syntax is a little different. #' #' xyplot(wt ~ mpg | cyl, mtcars, scales = list(y = list(relation = "free"))) #' qplot(mpg, wt, data = mtcars) + facet_wrap(~ cyl, scales = "free") #' #' xyplot(wt ~ mpg | cyl, mtcars, scales = list(log = 10)) #' qplot(mpg, wt, data = mtcars, log = "xy") #' #' xyplot(wt ~ mpg | cyl, mtcars, scales = list(log = 2)) #' qplot(mpg, wt, data = mtcars) + #' scale_x_continuous(trans = scales::log2_trans()) + #' scale_y_continuous(trans = scales::log2_trans()) #' #' xyplot(wt ~ mpg, mtcars, group = cyl, auto.key = TRUE) #' # Map directly to an aesthetic like colour, size, or shape. #' qplot(mpg, wt, data = mtcars, colour = cyl) #' #' xyplot(wt ~ mpg, mtcars, xlim = c(20,30)) #' # Works like lattice, except you can't specify a different limit #' # for each panel/facet #' qplot(mpg, wt, data = mtcars, xlim = c(20,30)) #' #' # Both lattice and ggplot2 have similar options for controlling labels on the plot. #' #' xyplot(wt ~ mpg, mtcars, xlab = "Miles per gallon", ylab = "Weight", #' main = "Weight-efficiency tradeoff") #' qplot(mpg, wt, data = mtcars, xlab = "Miles per gallon", ylab = "Weight", #' main = "Weight-efficiency tradeoff") #' #' xyplot(wt ~ mpg, mtcars, aspect = 1) #' qplot(mpg, wt, data = mtcars, asp = 1) #' #' # par.settings() is equivalent to + theme() and trellis.options.set() #' # and trellis.par.get() to theme_set() and theme_get(). #' # More complicated lattice formulas are equivalent to rearranging the data #' # before using ggplot2. #' } NULL ggplot2/R/stat-ecdf.r0000644000177400001440000000467613005734720014276 0ustar murdochusers#' Compute empirical cumulative distribution #' #' The empirical cumulative distribution function (ECDF) provides an alternative #' visualisation of distribution. Compared to other visualisations that rely on #' density (like \code{\link{geom_histogram}}), the ECDF doesn't require any #' tuning parameters and handles both continuous and categorical variables. #' The downside is that it requires more training to accurately interpret, #' and the underlying visual tasks are somewhat more challenging. #' #' @inheritParams layer #' @inheritParams geom_point #' @param na.rm If \code{FALSE} (the default), removes missing values with #' a warning. If \code{TRUE} silently removes missing values. #' @param n if NULL, do not interpolate. If not NULL, this is the number #' of points to interpolate with. #' @param pad If \code{TRUE}, pad the ecdf with additional points (-Inf, 0) #' and (Inf, 1) #' @section Computed variables: #' \describe{ #' \item{x}{x in data} #' \item{y}{cumulative density corresponding x} #' } #' @export #' @examples #' df <- data.frame( #' x = c(rnorm(100, 0, 3), rnorm(100, 0, 10)), #' g = gl(2, 100) #' ) #' ggplot(df, aes(x)) + stat_ecdf(geom = "step") #' #' # Don't go to positive/negative infinity #' ggplot(df, aes(x)) + stat_ecdf(geom = "step", pad = FALSE) #' #' # Multiple ECDFs #' ggplot(df, aes(x, colour = g)) + stat_ecdf() stat_ecdf <- function(mapping = NULL, data = NULL, geom = "step", position = "identity", ..., n = NULL, pad = TRUE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatEcdf, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( n = n, pad = pad, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatEcdf <- ggproto("StatEcdf", Stat, compute_group = function(data, scales, n = NULL, pad = TRUE) { # If n is NULL, use raw values; otherwise interpolate if (is.null(n)) { x <- unique(data$x) } else { x <- seq(min(data$x), max(data$x), length.out = n) } if (pad) { x <- c(-Inf, x, Inf) } y <- ecdf(data$x)(x) data.frame(x = x, y = y) }, default_aes = aes(y = ..y..), required_aes = c("x") ) ggplot2/R/scale-continuous.r0000644000177400001440000001461113006123163015677 0ustar murdochusers#' Position scales for continuous data (x & y) #' #' \code{scale_x_continuous} and \code{scale_y_continuous} are the default #' scales for continuous x and y aesthetics. There are three variants #' that set the \code{trans} argument for commonly used transformations: #' \code{scale_*_log10}, \code{scale_*_sqrt} and \code{scale_*_reverse}. #' #' For simple manipulation of labels and limits, you may wish to use #' \code{\link{labs}()} and \code{\link{lims}()} instead. #' #' @inheritParams continuous_scale #' @family position scales #' @param ... Other arguments passed on to \code{scale_(x|y)_continuous} #' @examples #' p1 <- ggplot(mpg, aes(displ, hwy)) + #' geom_point() #' p1 #' #' # Manipulating the default position scales lets you: #' # * change the axis labels #' p1 + #' scale_x_continuous("Engine displacement (L)") + #' scale_y_continuous("Highway MPG") #' #' # You can also use the short-cut labs(). #' # Use NULL to suppress axis labels #' p1 + labs(x = NULL, y = NULL) #' #' # * modify the axis limits #' p1 + scale_x_continuous(limits = c(2, 6)) #' p1 + scale_x_continuous(limits = c(0, 10)) #' #' # you can also use the short hand functions `xlim()` and `ylim()` #' p1 + xlim(2, 6) #' #' # * choose where the ticks appear #' p1 + scale_x_continuous(breaks = c(2, 4, 6)) #' #' # * add what labels they have #' p1 + scale_x_continuous( #' breaks = c(2, 4, 6), #' label = c("two", "four", "six") #' ) #' #' # Typically you'll pass a function to the `labels` argument. #' # Some common formats are built into the scales package: #' df <- data.frame( #' x = rnorm(10) * 100000, #' y = seq(0, 1, length.out = 10) #' ) #' p2 <- ggplot(df, aes(x, y)) + geom_point() #' p2 + scale_y_continuous(labels = scales::percent) #' p2 + scale_y_continuous(labels = scales::dollar) #' p2 + scale_x_continuous(labels = scales::comma) #' #' # You can also override the default linear mapping by using a #' # transformation. There are three shortcuts: #' p1 + scale_y_log10() #' p1 + scale_y_sqrt() #' p1 + scale_y_reverse() #' #' # Or you can supply a transformation in the `trans` argument: #' p1 + scale_y_continuous(trans = scales::reciprocal_trans()) #' #' # You can also create your own. See ?scales::trans_new #' @name scale_continuous #' @aliases NULL NULL #' @rdname scale_continuous #' #' @param sec.axis specifify a secondary axis #' #' @seealso \code{\link{sec_axis}} for how to specify secondary axes #' @export scale_x_continuous <- function(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity", position = "bottom", sec.axis = waiver()) { sc <- continuous_scale( c("x", "xmin", "xmax", "xend", "xintercept", "xmin_final", "xmax_final", "xlower", "xmiddle", "xupper"), "position_c", identity, name = name, breaks = breaks, minor_breaks = minor_breaks, labels = labels, limits = limits, expand = expand, oob = oob, na.value = na.value, trans = trans, guide = "none", position = position, super = ScaleContinuousPosition ) if (!is.waive(sec.axis)) { if (is.formula(sec.axis)) sec.axis <- sec_axis(sec.axis) if (!is.sec_axis(sec.axis)) stop("Secondary axes must be specified using 'sec_axis()'") sc$secondary.axis <- sec.axis } sc } #' @rdname scale_continuous #' @export scale_y_continuous <- function(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity", position = "left", sec.axis = waiver()) { sc <- continuous_scale( c("y", "ymin", "ymax", "yend", "yintercept", "ymin_final", "ymax_final", "lower", "middle", "upper"), "position_c", identity, name = name, breaks = breaks, minor_breaks = minor_breaks, labels = labels, limits = limits, expand = expand, oob = oob, na.value = na.value, trans = trans, guide = "none", position = position, super = ScaleContinuousPosition ) if (!is.waive(sec.axis)) { if (is.formula(sec.axis)) sec.axis <- sec_axis(sec.axis) if (!is.sec_axis(sec.axis)) stop("Secondary axes must be specified using 'sec_axis()'") sc$secondary.axis <- sec.axis } sc } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleContinuousPosition <- ggproto("ScaleContinuousPosition", ScaleContinuous, secondary.axis = waiver(), # Position aesthetics don't map, because the coordinate system takes # care of it. But they do need to be made in to doubles, so stat methods # can tell the difference between continuous and discrete data. map = function(self, x, limits = self$get_limits()) { scaled <- as.numeric(self$oob(x, limits)) ifelse(!is.na(scaled), scaled, self$na.value) }, break_info = function(self, range = NULL) { breaks <- ggproto_parent(ScaleContinuous, self)$break_info(range) if (!(is.waive(self$secondary.axis) || self$secondary.axis$empty())) { self$secondary.axis$init(self) breaks <- c(breaks, self$secondary.axis$break_info(breaks$range, self)) } breaks }, sec_name = function(self) { if (is.waive(self$secondary.axis)) { waiver() } else { self$secondary.axis$name } }, make_sec_title = function(self, title) { if (!is.waive(self$secondary.axis)) { self$secondary.axis$make_title(title) } else { ggproto_parent(ScaleContinuous, self)$make_sec_title(title) } } ) # Transformed scales --------------------------------------------------------- #' @rdname scale_continuous #' @export scale_x_log10 <- function(...) { scale_x_continuous(..., trans = log10_trans()) } #' @rdname scale_continuous #' @export scale_y_log10 <- function(...) { scale_y_continuous(..., trans = log10_trans()) } #' @rdname scale_continuous #' @export scale_x_reverse <- function(...) { scale_x_continuous(..., trans = reverse_trans()) } #' @rdname scale_continuous #' @export scale_y_reverse <- function(...) { scale_y_continuous(..., trans = reverse_trans()) } #' @rdname scale_continuous #' @export scale_x_sqrt <- function(...) { scale_x_continuous(..., trans = sqrt_trans()) } #' @rdname scale_continuous #' @export scale_y_sqrt <- function(...) { scale_y_continuous(..., trans = sqrt_trans()) } ggplot2/R/geom-path.r0000644000177400001440000002353613005734327014304 0ustar murdochusers#' Connect observations #' #' \code{geom_path()} connects the observations in the order in which they appear #' in the data. \code{geom_line()} connects them in order of the variable on the #' x axis. \code{geom_step()} creates a stairstep plot, highlighting exactly #' when changes occur. The \code{group} aesthetic determines which cases are #' connected together. #' #' An alternative parameterisation is \code{\link{geom_segment}}: each line #' corresponds to a single case which provides the start and end coordinates. #' #' @section Aesthetics: #' \aesthetics{geom}{path} #' #' @inheritParams layer #' @inheritParams geom_point #' @param lineend Line end style (round, butt, square) #' @param linejoin Line join style (round, mitre, bevel) #' @param linemitre Line mitre limit (number greater than 1) #' @param arrow Arrow specification, as created by \code{\link[grid]{arrow}} #' @seealso #' \code{\link{geom_polygon}}: Filled paths (polygons); #' \code{\link{geom_segment}}: Line segments #' @export #' @examples #' # geom_line() is suitable for time series #' ggplot(economics, aes(date, unemploy)) + geom_line() #' ggplot(economics_long, aes(date, value01, colour = variable)) + #' geom_line() #' #' # geom_step() is useful when you want to highlight exactly when #' # the y value chanes #' recent <- economics[economics$date > as.Date("2013-01-01"), ] #' ggplot(recent, aes(date, unemploy)) + geom_line() #' ggplot(recent, aes(date, unemploy)) + geom_step() #' #' # geom_path lets you explore how two variables are related over time, #' # e.g. unemployment and personal savings rate #' m <- ggplot(economics, aes(unemploy/pop, psavert)) #' m + geom_path() #' m + geom_path(aes(colour = as.numeric(date))) #' #' # Changing parameters ---------------------------------------------- #' ggplot(economics, aes(date, unemploy)) + #' geom_line(colour = "red") #' #' # Use the arrow parameter to add an arrow to the line #' # See ?arrow for more details #' c <- ggplot(economics, aes(x = date, y = pop)) #' c + geom_line(arrow = arrow()) #' c + geom_line( #' arrow = arrow(angle = 15, ends = "both", type = "closed") #' ) #' #' # Control line join parameters #' df <- data.frame(x = 1:3, y = c(4, 1, 9)) #' base <- ggplot(df, aes(x, y)) #' base + geom_path(size = 10) #' base + geom_path(size = 10, lineend = "round") #' base + geom_path(size = 10, linejoin = "mitre", lineend = "butt") #' #' # NAs break the line. Use na.rm = T to suppress the warning message #' df <- data.frame( #' x = 1:5, #' y1 = c(1, 2, 3, 4, NA), #' y2 = c(NA, 2, 3, 4, 5), #' y3 = c(1, 2, NA, 4, 5) #' ) #' ggplot(df, aes(x, y1)) + geom_point() + geom_line() #' ggplot(df, aes(x, y2)) + geom_point() + geom_line() #' ggplot(df, aes(x, y3)) + geom_point() + geom_line() #' #' \donttest{ #' # Setting line type vs colour/size #' # Line type needs to be applied to a line as a whole, so it can #' # not be used with colour or size that vary across a line #' x <- seq(0.01, .99, length.out = 100) #' df <- data.frame( #' x = rep(x, 2), #' y = c(qlogis(x), 2 * qlogis(x)), #' group = rep(c("a","b"), #' each = 100) #' ) #' p <- ggplot(df, aes(x=x, y=y, group=group)) #' # These work #' p + geom_line(linetype = 2) #' p + geom_line(aes(colour = group), linetype = 2) #' p + geom_line(aes(colour = x)) #' # But this doesn't #' should_stop(p + geom_line(aes(colour = x), linetype=2)) #' } geom_path <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., lineend = "butt", linejoin = "round", linemitre = 1, arrow = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomPath, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( lineend = lineend, linejoin = linejoin, linemitre = linemitre, arrow = arrow, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomPath <- ggproto("GeomPath", Geom, required_aes = c("x", "y"), default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), handle_na = function(data, params) { keep <- function(x) { # from first non-missing to last non-missing first <- match(FALSE, x, nomatch = 1) - 1 last <- length(x) - match(FALSE, rev(x), nomatch = 1) + 1 c( rep(FALSE, first), rep(TRUE, last - first), rep(FALSE, length(x) - last) ) } # Drop missing values at the start or end of a line - can't drop in the # middle since you expect those to be shown by a break in the line missing <- !stats::complete.cases(data[c("x", "y", "size", "colour", "linetype")]) kept <- stats::ave(missing, data$group, FUN = keep) data <- data[kept, ] if (!all(kept) && !params$na.rm) { warning("Removed ", sum(!kept), " rows containing missing values", " (geom_path).", call. = FALSE) } data }, draw_panel = function(data, panel_scales, coord, arrow = NULL, lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE) { if (!anyDuplicated(data$group)) { message_wrap("geom_path: Each group consists of only one observation. ", "Do you need to adjust the group aesthetic?") } # must be sorted on group data <- data[order(data$group), , drop = FALSE] munched <- coord_munch(coord, data, panel_scales) # Silently drop lines with less than two points, preserving order rows <- stats::ave(seq_len(nrow(munched)), munched$group, FUN = length) munched <- munched[rows >= 2, ] if (nrow(munched) < 2) return(zeroGrob()) # Work out whether we should use lines or segments attr <- plyr::ddply(munched, "group", function(df) { linetype <- unique(df$linetype) data.frame( solid = identical(linetype, 1) || identical(linetype, "solid"), constant = nrow(unique(df[, c("alpha", "colour","size", "linetype")])) == 1 ) }) solid_lines <- all(attr$solid) constant <- all(attr$constant) if (!solid_lines && !constant) { stop("geom_path: If you are using dotted or dashed lines", ", colour, size and linetype must be constant over the line", call. = FALSE) } # Work out grouping variables for grobs n <- nrow(munched) group_diff <- munched$group[-1] != munched$group[-n] start <- c(TRUE, group_diff) end <- c(group_diff, TRUE) if (!constant) { segmentsGrob( munched$x[!end], munched$y[!end], munched$x[!start], munched$y[!start], default.units = "native", arrow = arrow, gp = gpar( col = alpha(munched$colour, munched$alpha)[!end], fill = alpha(munched$colour, munched$alpha)[!end], lwd = munched$size[!end] * .pt, lty = munched$linetype[!end], lineend = lineend, linejoin = linejoin, linemitre = linemitre ) ) } else { id <- match(munched$group, unique(munched$group)) polylineGrob( munched$x, munched$y, id = id, default.units = "native", arrow = arrow, gp = gpar( col = alpha(munched$colour, munched$alpha)[start], fill = alpha(munched$colour, munched$alpha)[start], lwd = munched$size[start] * .pt, lty = munched$linetype[start], lineend = lineend, linejoin = linejoin, linemitre = linemitre ) ) } }, draw_key = draw_key_path ) #' @export #' @rdname geom_path geom_line <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomLine, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-path.r GeomLine <- ggproto("GeomLine", GeomPath, setup_data = function(data, params) { data[order(data$PANEL, data$group, data$x), ] } ) #' @param direction direction of stairs: 'vh' for vertical then horizontal, or #' 'hv' for horizontal then vertical #' @export #' @rdname geom_path geom_step <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", direction = "hv", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomStep, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( direction = direction, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-path.r GeomStep <- ggproto("GeomStep", GeomPath, draw_panel = function(data, panel_scales, coord, direction = "hv") { data <- plyr::ddply(data, "group", stairstep, direction = direction) GeomPath$draw_panel(data, panel_scales, coord) } ) # Calculate stairsteps # Used by \code{\link{geom_step}} # # @keyword internal stairstep <- function(data, direction="hv") { direction <- match.arg(direction, c("hv", "vh")) data <- as.data.frame(data)[order(data$x), ] n <- nrow(data) if (n <= 1) { # Need at least one observation return(data[0, , drop = FALSE]) } if (direction == "vh") { xs <- rep(1:n, each = 2)[-2*n] ys <- c(1, rep(2:n, each = 2)) } else { ys <- rep(1:n, each = 2)[-2*n] xs <- c(1, rep(2:n, each = 2)) } data.frame( x = data$x[xs], y = data$y[ys], data[xs, setdiff(names(data), c("x", "y"))] ) } ggplot2/R/theme-elements.r0000644000177400001440000003245713006367306015341 0ustar murdochusers#' Theme elements #' #' @description #' In conjunction with the \link{theme} system, the \code{element_} functions #' specify the display of how non-data components of the plot are a drawn. #' #' \itemize{ #' \item \code{element_blank}: draws nothing, and assigns no space. #' \item \code{element_rect}: borders and backgrounds. #' \item \code{element_line}: lines. #' \item \code{element_text}: text. #' } #' #' \code{rel()} is used to specify sizes relative to the parent, #' \code{margins()} is used to specify the margins of elements. #' #' @param fill Fill colour. #' @param colour,color Line/border colour. Color is an alias for colour. #' @param size Line/border size in mm; text size in pts. #' @param inherit.blank Should this element inherit the existence of an #' \code{element_blank} among its parents? If \code{TRUE} the existence of #' a blank element among its parents will cause this element to be blank as #' well. If \code{FALSE} any blank parent element will be ignored when #' calculating final element state. #' @return An S3 object of class \code{element}, \code{rel}, or \code{margin}. #' @examples #' plot <- ggplot(mpg, aes(displ, hwy)) + geom_point() #' #' plot + theme( #' panel.background = element_blank(), #' axis.text = element_blank() #' ) #' #' plot + theme( #' axis.text = element_text(colour = "red", size = rel(1.5)) #' ) #' #' plot + theme( #' axis.line = element_line(arrow = arrow()) #' ) #' #' plot + theme( #' panel.background = element_rect(fill = "white"), #' plot.margin = margin(2, 2, 2, 2, "cm"), #' plot.background = element_rect( #' fill = "grey90", #' colour = "black", #' size = 1 #' ) #' ) #' @name element #' @aliases NULL NULL #' @export #' @rdname element element_blank <- function() { structure( list(), class = c("element_blank", "element") ) } #' @export #' @rdname element element_rect <- function(fill = NULL, colour = NULL, size = NULL, linetype = NULL, color = NULL, inherit.blank = FALSE) { if (!is.null(color)) colour <- color structure( list(fill = fill, colour = colour, size = size, linetype = linetype, inherit.blank = inherit.blank), class = c("element_rect", "element") ) } #' @export #' @rdname element #' @param linetype Line type. An integer (0:8), a name (blank, solid, #' dashed, dotted, dotdash, longdash, twodash), or a string with #' an even number (up to eight) of hexadecimal digits which give the #' lengths in consecutive positions in the string. #' @param lineend Line end Line end style (round, butt, square) #' @param arrow Arrow specification, as created by \code{\link[grid]{arrow}} element_line <- function(colour = NULL, size = NULL, linetype = NULL, lineend = NULL, color = NULL, arrow = NULL, inherit.blank = FALSE) { if (!is.null(color)) colour <- color if (is.null(arrow)) arrow <- FALSE structure( list(colour = colour, size = size, linetype = linetype, lineend = lineend, arrow = arrow, inherit.blank = inherit.blank), class = c("element_line", "element") ) } #' @param family Font family #' @param face Font face ("plain", "italic", "bold", "bold.italic") #' @param hjust Horizontal justification (in [0, 1]) #' @param vjust Vertical justification (in [0, 1]) #' @param angle Angle (in [0, 360]) #' @param lineheight Line height #' @param margin Margins around the text. See \code{\link{margin}} for more #' details. When creating a theme, the margins should be placed on the #' side of the text facing towards the center of the plot. #' @param debug If \code{TRUE}, aids visual debugging by drawing a solid #' rectangle behind the complete text area, and a point where each label #' is anchored. #' @export #' @rdname element element_text <- function(family = NULL, face = NULL, colour = NULL, size = NULL, hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL, color = NULL, margin = NULL, debug = NULL, inherit.blank = FALSE) { if (!is.null(color)) colour <- color structure( list(family = family, face = face, colour = colour, size = size, hjust = hjust, vjust = vjust, angle = angle, lineheight = lineheight, margin = margin, debug = debug, inherit.blank = inherit.blank), class = c("element_text", "element") ) } #' @export print.element <- function(x, ...) utils::str(x) #' @param x A single number specifying size relative to parent element. #' @rdname element #' @export rel <- function(x) { structure(x, class = "rel") } #' @export print.rel <- function(x, ...) print(noquote(paste(x, " *", sep = ""))) #' Reports whether x is a rel object #' @param x An object to test #' @keywords internal is.rel <- function(x) inherits(x, "rel") # Given a theme object and element name, return a grob for the element element_render <- function(theme, element, ..., name = NULL) { # Get the element from the theme, calculating inheritance el <- calc_element(element, theme) if (is.null(el)) { message("Theme element ", element, " missing") return(zeroGrob()) } grob <- element_grob(el, ...) ggname(paste(element, name, sep = "."), grob) } # Returns NULL if x is length 0 len0_null <- function(x) { if (length(x) == 0) NULL else x } #' Generate grid grob from theme element #' #' @param element Theme element, i.e. \code{element_rect} or similar. #' @param ... Other arguments to control specific of rendering. This is #' usually at least position. See the source code for individual methods. #' @keywords internal #' @export element_grob <- function(element, ...) { UseMethod("element_grob") } #' @export element_grob.element_blank <- function(element, ...) zeroGrob() #' @export element_grob.element_rect <- function(element, x = 0.5, y = 0.5, width = 1, height = 1, fill = NULL, colour = NULL, size = NULL, linetype = NULL, ...) { # The gp settings can override element_gp gp <- gpar(lwd = len0_null(size * .pt), col = colour, fill = fill, lty = linetype) element_gp <- gpar(lwd = len0_null(element$size * .pt), col = element$colour, fill = element$fill, lty = element$linetype) rectGrob(x, y, width, height, gp = utils::modifyList(element_gp, gp), ...) } #' @export element_grob.element_text <- function(element, label = "", x = NULL, y = NULL, family = NULL, face = NULL, colour = NULL, size = NULL, hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL, margin = NULL, expand_x = FALSE, expand_y = FALSE, ...) { if (is.null(label)) return(zeroGrob()) vj <- vjust %||% element$vjust hj <- hjust %||% element$hjust margin <- margin %||% element$margin angle <- angle %||% element$angle if (is.null(angle)) { stop("Text element requires non-NULL value for 'angle'.") } # The gp settings can override element_gp gp <- gpar(fontsize = size, col = colour, fontfamily = family, fontface = face, lineheight = lineheight) element_gp <- gpar(fontsize = element$size, col = element$colour, fontfamily = element$family, fontface = element$face, lineheight = element$lineheight) titleGrob(label, x, y, hjust = hj, vjust = vj, angle = angle, gp = utils::modifyList(element_gp, gp), margin = margin, expand_x = expand_x, expand_y = expand_y, debug = element$debug) } #' @export element_grob.element_line <- function(element, x = 0:1, y = 0:1, colour = NULL, size = NULL, linetype = NULL, lineend = NULL, default.units = "npc", id.lengths = NULL, ...) { # The gp settings can override element_gp gp <- gpar(lwd = len0_null(size * .pt), col = colour, lty = linetype, lineend = lineend) element_gp <- gpar(lwd = len0_null(element$size * .pt), col = element$colour, lty = element$linetype, lineend = element$lineend) arrow <- if (is.logical(element$arrow) && !element$arrow) { NULL } else { element$arrow } polylineGrob( x, y, default.units = default.units, gp = utils::modifyList(element_gp, gp), id.lengths = id.lengths, arrow = arrow, ... ) } # Define an element's class and what other elements it inherits from # # @param class The name of class (like "element_line", "element_text", # or the reserved "character", which means a character vector (not # "character" class) # @param inherit A vector of strings, naming the elements that this # element inherits from. el_def <- function(class = NULL, inherit = NULL, description = NULL) { list(class = class, inherit = inherit, description = description) } # This data structure represents the theme elements and the inheritance # among them. .element_tree <- list( line = el_def("element_line"), rect = el_def("element_rect"), text = el_def("element_text"), title = el_def("element_text", "text"), axis.line = el_def("element_line", "line"), axis.text = el_def("element_text", "text"), axis.title = el_def("element_text", "title"), axis.ticks = el_def("element_line", "line"), legend.key.size = el_def("unit"), panel.grid = el_def("element_line", "line"), panel.grid.major = el_def("element_line", "panel.grid"), panel.grid.minor = el_def("element_line", "panel.grid"), strip.text = el_def("element_text", "text"), axis.line.x = el_def("element_line", "axis.line"), axis.line.y = el_def("element_line", "axis.line"), axis.text.x = el_def("element_text", "axis.text"), axis.text.x.top = el_def("element_text", "axis.text.x"), axis.text.y = el_def("element_text", "axis.text"), axis.text.y.right = el_def("element_text", "axis.text.y"), axis.ticks.length = el_def("unit"), axis.ticks.x = el_def("element_line", "axis.ticks"), axis.ticks.y = el_def("element_line", "axis.ticks"), axis.title.x = el_def("element_text", "axis.title"), axis.title.x.top = el_def("element_text", "axis.title.x"), axis.title.y = el_def("element_text", "axis.title"), axis.title.y.right = el_def("element_text", "axis.title.y"), legend.background = el_def("element_rect", "rect"), legend.margin = el_def("margin"), legend.spacing = el_def("unit"), legend.spacing.x = el_def("unit", "legend.spacing"), legend.spacing.y = el_def("unit", "legend.spacing"), legend.key = el_def("element_rect", "rect"), legend.key.height = el_def("unit", "legend.key.size"), legend.key.width = el_def("unit", "legend.key.size"), legend.text = el_def("element_text", "text"), legend.text.align = el_def("character"), legend.title = el_def("element_text", "title"), legend.title.align = el_def("character"), legend.position = el_def("character"), # Need to also accept numbers legend.direction = el_def("character"), legend.justification = el_def("character"), legend.box = el_def("character"), legend.box.just = el_def("character"), legend.box.margin = el_def("margin"), legend.box.background = el_def("element_rect", "rect"), legend.box.spacing = el_def("unit"), panel.background = el_def("element_rect", "rect"), panel.border = el_def("element_rect", "rect"), panel.spacing = el_def("unit"), panel.spacing.x = el_def("unit", "panel.spacing"), panel.spacing.y = el_def("unit", "panel.spacing"), panel.grid.major.x = el_def("element_line", "panel.grid.major"), panel.grid.major.y = el_def("element_line", "panel.grid.major"), panel.grid.minor.x = el_def("element_line", "panel.grid.minor"), panel.grid.minor.y = el_def("element_line", "panel.grid.minor"), panel.ontop = el_def("logical"), strip.background = el_def("element_rect", "rect"), strip.text.x = el_def("element_text", "strip.text"), strip.text.y = el_def("element_text", "strip.text"), strip.placement = el_def("character"), strip.placement.x = el_def("character", "strip.placement"), strip.placement.y = el_def("character", "strip.placement"), strip.switch.pad.grid = el_def("unit"), strip.switch.pad.wrap = el_def("unit"), plot.background = el_def("element_rect", "rect"), plot.title = el_def("element_text", "title"), plot.subtitle = el_def("element_text", "title"), plot.caption = el_def("element_text", "title"), plot.margin = el_def("margin"), aspect.ratio = el_def("character") ) # Check that an element object has the proper class # # Given an element object and the name of the element, this function # checks it against the element inheritance tree to make sure the # element is of the correct class # # It throws error if invalid, and returns invisible() if valid. # # @param el an element # @param elname the name of the element validate_element <- function(el, elname) { eldef <- .element_tree[[elname]] if (is.null(eldef)) { stop('"', elname, '" is not a valid theme element name.') } # NULL values for elements are OK if (is.null(el)) return() if (eldef$class == "character") { # Need to be a bit looser here since sometimes it's a string like "top" # but sometimes its a vector like c(0,0) if (!is.character(el) && !is.numeric(el)) stop("Element ", elname, " must be a string or numeric vector.") } else if (eldef$class == "margin") { if (!is.unit(el) && length(el) == 4) stop("Element ", elname, " must be a unit vector of length 4.") } else if (!inherits(el, eldef$class) && !inherits(el, "element_blank")) { stop("Element ", elname, " must be a ", eldef$class, " object.") } invisible() } ggplot2/R/grouping.r0000644000177400001440000000252212567367575014270 0ustar murdochusers# This needs to be less than 1, to distinguish it from "regular" return values # of plyr::id() used by add_group() NO_GROUP <- -1L # Ensure that the data frame contains a grouping variable. # # If the \code{group} variable is not present, then a new group # variable is generated from the interaction of all discrete (factor or # character) vectors, excluding \code{label}. The special value \code{NO_GROUP} # is used for all observations if no discrete variables exist. add_group <- function(data) { if (empty(data)) return(data) if (is.null(data$group)) { disc <- vapply(data, is.discrete, logical(1)) disc[names(disc) %in% c("label", "PANEL")] <- FALSE if (any(disc)) { data$group <- plyr::id(data[disc], drop = TRUE) } else { data$group <- NO_GROUP } } else { data$group <- plyr::id(data["group"], drop = TRUE) } data } # Is a grouping available? # (Will return TRUE if an explicit group or a discrete variable with only one # level existed when add_group() was called.) has_groups <- function(data) { # If no group aesthetic is specified, all values of the group column equal to # NO_GROUP. On the other hand, if a group aesthetic is specified, all values # are different from NO_GROUP (since they are a result of plyr::id()). NA is # returned for 0-row data frames. data$group[1L] != NO_GROUP } ggplot2/R/facet-wrap.r0000644000177400001440000004074613006173044014450 0ustar murdochusers#' @include facet-.r NULL #' Wrap a 1d ribbon of panels into 2d #' #' \code{facet_wrap} wraps a 1d sequence of panels into 2d. This is generally #' a better use of screen space than \code{\link{facet_grid}} because most #' displays are roughly rectangular. #' #' @param facets Either a formula or character vector. Use either a #' one sided formula, \code{~a + b}, or a character vector, \code{c("a", "b")}. #' @param nrow,ncol Number of rows and columns. #' @param scales should Scales be fixed (\code{"fixed"}, the default), #' free (\code{"free"}), or free in one dimension (\code{"free_x"}, #' \code{"free_y"}). #' @param strip.position By default, the labels are displayed on the top of #' the plot. Using \code{strip.position} it is possible to place the labels on #' either of the four sides by setting \code{strip.position = c("top", #' "bottom", "left", "right")} #' @param dir Direction: either "h" for horizontal, the default, or "v", for #' vertical. #' @inheritParams facet_grid #' @export #' @examples #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(~class) #' #' # Control the number of rows and columns with nrow and ncol #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(~class, nrow = 4) #' #' \donttest{ #' # You can facet by multiple variables #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(~ cyl + drv) #' # Or use a character vector: #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(c("cyl", "drv")) #' #' # Use the `labeller` option to control how labels are printed: #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(c("cyl", "drv"), labeller = "label_both") #' #' # To change the order in which the panels appear, change the levels #' # of the underlying factor. #' mpg$class2 <- reorder(mpg$class, mpg$displ) #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(~class2) #' #' # By default, the same scales are used for all panels. You can allow #' # scales to vary across the panels with the `scales` argument. #' # Free scales make it easier to see patterns within each panel, but #' # harder to compare across panels. #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(~class, scales = "free") #' #' # To repeat the same data in every panel, simply construct a data frame #' # that does not contain the facetting variable. #' ggplot(mpg, aes(displ, hwy)) + #' geom_point(data = transform(mpg, class = NULL), colour = "grey85") + #' geom_point() + #' facet_wrap(~class) #' #' # Use `strip.position` to display the facet labels at the side of your #' # choice. Setting it to `bottom` makes it act as a subtitle for the axis. #' # This is typically used with free scales and a theme without boxes around #' # strip labels. #' ggplot(economics_long, aes(date, value)) + #' geom_line() + #' facet_wrap(~variable, scales = "free_y", nrow = 2, strip.position = "bottom") + #' theme(strip.background = element_blank(), strip.placement = "outside") #' } facet_wrap <- function(facets, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, switch = NULL, drop = TRUE, dir = "h", strip.position = 'top') { scales <- match.arg(scales, c("fixed", "free_x", "free_y", "free")) dir <- match.arg(dir, c("h", "v")) free <- list( x = any(scales %in% c("free_x", "free")), y = any(scales %in% c("free_y", "free")) ) if (!is.null(switch)) { .Deprecated("strip.position", old = "switch") strip.position <- if (switch == "x") "bottom" else "left" } strip.position <- match.arg(strip.position, c("top", "bottom", "left", "right")) if (identical(dir, "v")) { # swap nrow_swap <- ncol ncol_swap <- nrow nrow <- sanitise_dim(nrow_swap) ncol <- sanitise_dim(ncol_swap) } else { nrow <- sanitise_dim(nrow) ncol <- sanitise_dim(ncol) } # Check for deprecated labellers labeller <- check_labeller(labeller) ggproto(NULL, FacetWrap, shrink = shrink, params = list(facets = as.quoted(facets), free = free, as.table = as.table, strip.position = strip.position, drop = drop, ncol = ncol, nrow = nrow, labeller = labeller, dir = dir) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export FacetWrap <- ggproto("FacetWrap", Facet, shrink = TRUE, compute_layout = function(data, params) { vars <- as.quoted(params$facets) if (length(vars) == 0) return(layout_null()) base <- plyr::unrowname( combine_vars(data, params$plot_env, vars, drop = params$drop) ) id <- plyr::id(base, drop = TRUE) n <- attr(id, "n") dims <- wrap_dims(n, params$nrow, params$ncol) layout <- data.frame(PANEL = factor(id, levels = seq_len(n))) if (params$as.table) { layout$ROW <- as.integer((id - 1L) %/% dims[2] + 1L) } else { layout$ROW <- as.integer(dims[1] - (id - 1L) %/% dims[2]) } layout$COL <- as.integer((id - 1L) %% dims[2] + 1L) # For vertical direction, flip row and col if (identical(params$dir, "v")) { layout[c("ROW", "COL")] <- layout[c("COL", "ROW")] } panels <- cbind(layout, plyr::unrowname(base)) panels <- panels[order(panels$PANEL), , drop = FALSE] rownames(panels) <- NULL # Add scale identification panels$SCALE_X <- if (params$free$x) seq_len(n) else 1L panels$SCALE_Y <- if (params$free$y) seq_len(n) else 1L panels }, map_data = function(data, layout, params) { if (empty(data)) { return(cbind(data, PANEL = integer(0))) } vars <- as.quoted(params$facets) facet_vals <- eval_facet_vars(vars, data, params$plot_env) facet_vals[] <- lapply(facet_vals[], as.factor) missing_facets <- setdiff(names(vars), names(facet_vals)) if (length(missing_facets) > 0) { to_add <- unique(layout[missing_facets]) data_rep <- rep.int(1:nrow(data), nrow(to_add)) facet_rep <- rep(1:nrow(to_add), each = nrow(data)) data <- plyr::unrowname(data[data_rep, , drop = FALSE]) facet_vals <- plyr::unrowname(cbind( facet_vals[data_rep, , drop = FALSE], to_add[facet_rep, , drop = FALSE])) } keys <- plyr::join.keys(facet_vals, layout, by = names(vars)) data$PANEL <- layout$PANEL[match(keys$x, keys$y)] data[order(data$PANEL), ] }, draw_panels = function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) { # If coord is non-cartesian and (x is free or y is free) # then throw error if ((!inherits(coord, "CoordCartesian")) && (params$free$x || params$free$y)) { stop("ggplot2 does not currently support free scales with a non-cartesian coord", call. = FALSE) } if (inherits(coord, "CoordFlip")) { if (params$free$x) { layout$SCALE_X <- seq_len(nrow(layout)) } else { layout$SCALE_X <- 1L } if (params$free$y) { layout$SCALE_Y <- seq_len(nrow(layout)) } else { layout$SCALE_Y <- 1L } } ncol <- max(layout$COL) nrow <- max(layout$ROW) n <- nrow(layout) panel_order <- order(layout$ROW, layout$COL) layout <- layout[panel_order, ] panels <- panels[panel_order] panel_pos <- convertInd(layout$ROW, layout$COL, nrow) axes <- render_axes(ranges, ranges, coord, theme, transpose = TRUE) labels_df <- layout[names(params$facets)] attr(labels_df, "facet") <- "wrap" strips <- render_strips( structure(labels_df, type = "rows"), structure(labels_df, type = "cols"), params$labeller, theme) # If user hasn't set aspect ratio, and we have fixed scales, then # ask the coordinate system if it wants to specify one aspect_ratio <- theme$aspect.ratio if (is.null(aspect_ratio) && !params$free$x && !params$free$y) { aspect_ratio <- coord$aspect(ranges[[1]]) } if (is.null(aspect_ratio)) { aspect_ratio <- 1 respect <- FALSE } else { respect <- TRUE } empty_table <- matrix(list(zeroGrob()), nrow = nrow, ncol = ncol) panel_table <- empty_table panel_table[panel_pos] <- panels empties <- apply(panel_table, c(1,2), function(x) is.zero(x[[1]])) panel_table <- gtable_matrix("layout", panel_table, widths = unit(rep(1, ncol), "null"), heights = unit(rep(aspect_ratio, nrow), "null"), respect = respect, clip = "on", z = matrix(1, ncol = ncol, nrow = nrow)) panel_table$layout$name <- paste0('panel-', rep(seq_len(ncol), nrow), '-', rep(seq_len(nrow), each = ncol)) panel_table <- gtable_add_col_space(panel_table, theme$panel.spacing.x %||% theme$panel.spacing) panel_table <- gtable_add_row_space(panel_table, theme$panel.spacing.y %||% theme$panel.spacing) # Add axes axis_mat_x_top <- empty_table axis_mat_x_top[panel_pos] <- axes$x$top[layout$SCALE_X] axis_mat_x_bottom <- empty_table axis_mat_x_bottom[panel_pos] <- axes$x$bottom[layout$SCALE_X] axis_mat_y_left <- empty_table axis_mat_y_left[panel_pos] <- axes$y$left[layout$SCALE_Y] axis_mat_y_right <- empty_table axis_mat_y_right[panel_pos] <- axes$y$right[layout$SCALE_Y] if (!params$free$x) { axis_mat_x_top[-1,]<- list(zeroGrob()) axis_mat_x_bottom[-nrow,]<- list(zeroGrob()) } if (!params$free$y) { axis_mat_y_left[, -1] <- list(zeroGrob()) axis_mat_y_right[, -ncol] <- list(zeroGrob()) } axis_height_top <- unit(apply(axis_mat_x_top, 1, max_height), "cm") axis_height_bottom <- unit(apply(axis_mat_x_bottom, 1, max_height), "cm") axis_width_left <- unit(apply(axis_mat_y_left, 2, max_width), "cm") axis_width_right <- unit(apply(axis_mat_y_right, 2, max_width), "cm") # Add back missing axes if (any(empties)) { first_row <- which(apply(empties, 1, any))[1] - 1 first_col <- which(apply(empties, 2, any))[1] - 1 row_panels <- which(layout$ROW == first_row & layout$COL > first_col) row_pos <- convertInd(layout$ROW[row_panels], layout$COL[row_panels], nrow) row_axes <- axes$x$bottom[layout$SCALE_X[row_panels]] col_panels <- which(layout$ROW > first_row & layout$COL == first_col) col_pos <- convertInd(layout$ROW[col_panels], layout$COL[col_panels], nrow) col_axes <- axes$y$right[layout$SCALE_Y[col_panels]] if (params$strip.position == "bottom" && theme$strip.placement != "inside" && any(!vapply(row_axes, is.zero, logical(length(row_axes))))) { warning("Suppressing axis rendering when strip.position = 'bottom' and strip.placement == 'outside'", call. = FALSE) } else { axis_mat_x_bottom[row_pos] <- row_axes } if (params$strip.position == "right" && theme$strip.placement != "inside" && any(!vapply(col_axes, is.zero, logical(length(col_axes))))) { warning("Suppressing axis rendering when strip.position = 'right' and strip.placement == 'outside'", call. = FALSE) } else { axis_mat_y_right[col_pos] <- col_axes } } panel_table <- weave_tables_row(panel_table, axis_mat_x_top, -1, axis_height_top, "axis-t", 3) panel_table <- weave_tables_row(panel_table, axis_mat_x_bottom, 0, axis_height_bottom, "axis-b", 3) panel_table <- weave_tables_col(panel_table, axis_mat_y_left, -1, axis_width_left, "axis-l", 3) panel_table <- weave_tables_col(panel_table, axis_mat_y_right, 0, axis_width_right, "axis-r", 3) strip_padding <- convertUnit(theme$strip.switch.pad.wrap, "cm") strip_name <- paste0("strip-", substr(params$strip.position, 1, 1)) strip_mat <- empty_table strip_mat[panel_pos] <- unlist(unname(strips), recursive = FALSE)[[params$strip.position]] if (params$strip.position %in% c("top", "bottom")) { inside <- (theme$strip.placement.x %||% theme$strip.placement %||% "inside") == "inside" if (params$strip.position == "top") { placement <- if (inside) -1 else -2 strip_pad <- axis_height_top } else { placement <- if (inside) 0 else 1 strip_pad <- axis_height_bottom } strip_height <- unit(apply(strip_mat, 1, max_height), "cm") panel_table <- weave_tables_row(panel_table, strip_mat, placement, strip_height, strip_name, 2, "on") if (!inside) { strip_pad[unclass(strip_pad) != 0] <- strip_padding panel_table <- weave_tables_row(panel_table, row_shift = placement, row_height = strip_pad) } } else { inside <- (theme$strip.placement.y %||% theme$strip.placement %||% "inside") == "inside" if (params$strip.position == "left") { placement <- if (inside) -1 else -2 strip_pad <- axis_width_left } else { placement <- if (inside) 0 else 1 strip_pad <- axis_width_right } strip_pad[unclass(strip_pad) != 0] <- strip_padding strip_width <- unit(apply(strip_mat, 2, max_width), "cm") panel_table <- weave_tables_col(panel_table, strip_mat, placement, strip_width, strip_name, 2, "on") if (!inside) { strip_pad[unclass(strip_pad) != 0] <- strip_padding panel_table <- weave_tables_col(panel_table, col_shift = placement, col_width = strip_pad) } } panel_table } ) # Helpers ----------------------------------------------------------------- #' Sanitise the number of rows or columns #' #' Cleans up the input to be an integer greater than or equal to one, or #' \code{NULL}. Intended to be used on the \code{nrow} and \code{ncol} #' arguments of \code{facet_wrap}. #' @param n Hopefully an integer greater than or equal to one, or \code{NULL}, #' though other inputs are handled. #' @return An integer greater than or equal to one, or \code{NULL}. #' @note If the length of the input is greater than one, only the first element #' is returned, with a warning. #' If the input is not an integer, it will be coerced to be one. #' If the value is less than one, \code{NULL} is returned, effectively ignoring #' the argument. #' Multiple warnings may be generated. #' @examples #' # Valid input just gets returns unchanged #' sanitise_dim(1) #' sanitise_dim(NULL) #' #' # Only the first element of vectors get returned #' sanitise_dim(10:1) #' # Non-integer values are coerced to integer #' sanitise_dim(pi) #' # Missing values, values less than one and non-numeric values are #' # treated as NULL #' sanitise_dim(NA_integer_) #' sanitise_dim(0) #' sanitise_dim("foo") #' @noRd sanitise_dim <- function(n) { xname <- paste0("`", deparse(substitute(n)), "`") if (length(n) == 0) { if (!is.null(n)) { warning(xname, " has length zero and will be treated as NULL.", call. = FALSE) } return(NULL) } if (length(n) > 1) { warning("Only the first value of ", xname, " will be used.", call. = FALSE) n <- n[1] } if (!is.numeric(n) || (!is.na(n) && n != round(n))) { warning("Coercing ", xname, " to be an integer.", call. = FALSE) n <- as.integer(n) } if (is.na(n) || n < 1) { warning(xname, " is missing or less than 1 and will be treated as NULL.", call. = FALSE) return(NULL) } n } #' Arrange 1d structure into a grid #' #' @param n length of structure #' @param nrow,ncol desired dimensions for the grid #' #' @return the grid dimension as a vector with nrow and then ncol #' #' @keywords internal #' @export wrap_dims <- function(n, nrow = NULL, ncol = NULL) { if (is.null(ncol) && is.null(nrow)) { rc <- grDevices::n2mfrow(n) nrow <- rc[2] ncol <- rc[1] } else if (is.null(ncol)) { ncol <- ceiling(n / nrow) } else if (is.null(nrow)) { nrow <- ceiling(n / ncol) } stopifnot(nrow * ncol >= n) c(nrow, ncol) } convertInd <- function(row, col, nrow) { (col - 1) * nrow + row } weave_tables_col <- function(table, table2, col_shift, col_width, name, z = 1, clip = "off") { panel_col <- panel_cols(table)$l panel_row <- panel_rows(table)$t for (i in rev(seq_along(panel_col))) { col_ind <- panel_col[i] + col_shift table <- gtable_add_cols(table, col_width[i], pos = col_ind) if (!missing(table2)) { table <- gtable_add_grob(table, table2[, i], t = panel_row, l = col_ind + 1, clip = clip, name = paste0(name, "-", seq_along(panel_row), "-", i), z = z) } } table } weave_tables_row <- function(table, table2, row_shift, row_height, name, z = 1, clip = "off") { panel_col <- panel_cols(table)$l panel_row <- panel_rows(table)$t for (i in rev(seq_along(panel_row))) { row_ind <- panel_row[i] + row_shift table <- gtable_add_rows(table, row_height[i], pos = row_ind) if (!missing(table2)) { table <- gtable_add_grob(table, table2[i, ], t = row_ind + 1, l = panel_col, clip = clip, name = paste0(name, "-", seq_along(panel_col), "-", i), z = z) } } table } ggplot2/vignettes/0000755000177400001440000000000013031512434014026 5ustar murdochusersggplot2/vignettes/releases/0000755000177400001440000000000013014623760015637 5ustar murdochusersggplot2/vignettes/releases/ggplot2-2.0.0.Rmd0000644000177400001440000003234513014623760020323 0ustar murdochusers--- title: "ggplot2 2.0.0" --- ```{r, include = FALSE} knitr::opts_chunk$set( comment = "#>", collapse = TRUE, fig.show = "hold", out.width = "50%", fig.width = 5, fig.asp = 2/3, fig.retina = NULL ) library(ggplot2) library(dplyr) ``` I'm very pleased to announce the release of ggplot2 2.0.0. I know I promised [that there wouldn't be any more updates](http://blog.rstudio.org/2015/01/09/ggplot2-updates/), but while working on the 2nd edition of the ggplot2 book, I just couldn't stop myself from fixing some long standing problems. On the scale of ggplot2 releases, this one is huge with over one hundred fixes and improvements. This might break some of your existing code (although I've tried to minimise breakage as much as possible), but I hope the new features make up for any short term hassle. This blog post documents the most important changes: * ggplot2 now has an official extension mechanism. * There are a handful of new geoms, and updates to existing geoms. * The default appearance has been thoroughly tweaked so most plots should look better. * Facets have a much richer set of labelling options. * The documentation has been overhauled to be more helpful, and require less integration across multiple pages. * A number of older and less used features have been deprecated. These are described in more detail below. See the [release notes](https://github.com/hadley/ggplot2/releases/tag/v2.0.0) for a complete list of all changes. ## Extensibility Perhaps the bigggest news in this release is that ggplot2 now has an official extension mechanism. This means that others can now easily create their on stats, geoms and positions, and provide them in other packages. This should allow the ggplot2 community to flourish, even as less development work happens in ggplot2 itself. See [`vignette("extending-ggplot2")`](https://cran.r-project.org/web/packages/ggplot2/vignettes/extending-ggplot2.html) for details. Coupled with this change, ggplot2 no longer uses proto or reference classes. Instead, we now use ggproto, a new OO system designed specifically for ggplot2. Unlike proto and RC, ggproto supports clean cross-package inheritance, which is necessary for extensibility. Creating a new OO system isn't usually the right solution, but I'm pretty sure it was necessary here. Read more about it in the vignette. ## New and updated geoms * ggplot no longer throws an error if you your plot has no layers. Instead it automatically adds `geom_blank()`: ```{r} ggplot(mpg, aes(cyl, hwy)) ``` * `geom_count()` (a new alias for the old `stat_sum()`) counts the number of points at unique locations on a scatterplot, and maps the size of the point to the count: ```{r} ggplot(mpg, aes(cty, hwy)) + geom_point() ggplot(mpg, aes(cty, hwy)) + geom_count() ``` * `geom_curve()` draws curved lines in the same way that `geom_segment()` draws straight lines: ```{r} df <- expand.grid(x = 1:2, y = 1:2) ggplot(df, aes(x, y, xend = x + 0.5, yend = y + 0.5)) + geom_curve(aes(colour = "curve")) + geom_segment(aes(colour = "segment")) ``` * `geom_bar()` now behaves differently from `geom_histogram()`. Instead of binning the data, it counts the number of unique observations at each location: ```{r} ggplot(mpg, aes(cyl)) + geom_bar() ggplot(mpg, aes(cyl)) + geom_histogram(binwidth = 1) ``` If you got into the (bad) habit of using `geom_histogram()` to create bar charts, or `geom_bar()` to create histograms, you'll need to switch. * Layers are now much stricter about their arguments - you will get an error if you've supplied an argument that isn't an aesthetic or a parameter. This breaks the handful of geoms/stats that used `...` to pass additional arguments on to the underlying computation. Now `geom_smooth()`/`stat_smooth()` and `geom_quantile()`/`stat_quantile()` use `method.args` instead; and `stat_summary()`, `stat_summary_hex()`, and `stat_summary2d()` use `fun.args`. This is likely to cause some short-term pain but in the long-term it will make it much easier to spot spelling mistakes and other errors. * `geom_text()` has been overhauled to make labelling your data a little easier. You can use `nudge_x` and `nudge_y` arguments to offset labels from their corresponding points. `check_overlap = TRUE` provides a simple way to avoid overplotting of labels: labels that would otherwise overlap are omitted. ```{r} ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars))) + geom_point() + geom_text(nudge_y = 0.5, check_overlap = TRUE) ``` (Labelling points well is still a huge pain, but at least these new features make life a lit better.) * `geom_label()` works like `geom_text()` but draws a rounded rectangle underneath each label: ```{r, fig.asp = 1} grid <- expand.grid( x = seq(-pi, pi, length = 50), y = seq(-pi, pi, length = 50) ) %>% mutate(r = x ^ 2 + y ^ 2, z = cos(r ^ 2) * exp(-r / 6)) ggplot(grid, aes(x, y)) + geom_raster(aes(fill = z)) + geom_label(data = data.frame(x = 0, y = 0), label = "Center") + theme(legend.position = "none") + coord_fixed() ``` * `aes_()` replaces `aes_q()`, and works like the SE functions in dplyr and my other recent packages. It supports formulas, so the most concise SE version of `aes(carat, price)` is now `aes_(~carat, ~price)`. You may want to use this form in packages, as it will avoid spurious `R CMD check` warnings about undefined global variables. ```{r, eval = FALSE} ggplot(mpg, aes_(~displ, ~cty)) + geom_point() # Same as ggplot(mpg, aes(displ, cty)) + geom_point() ``` ## Appearance I've made a number of small tweaks to the default appearance: * The default `theme_grey()` background colour has been changed from "grey90" to "grey92": this makes the background a little less visually prominent. * Labels and titles have been tweaked for readability. Axis labels are darker, and legend titles get the same visual treatment as axis labels. * The default font size dropped from 12 to 11. You might be surprised that I've made the default text size smaller as it was already hard for many people to read. It turns out there was a bug in RStudio ([fixed in 0.99.724](https://www.rstudio.com/products/rstudio/download/preview/)), that shrunk the text of all grid based graphics. Once that was resolved the defaults seemed too big to my eyes. * `scale_size()` now maps values to _area_, not radius. Use `scale_radius()` if you want the old behaviour (not recommended, except perhaps for lines). Continue to use `scale_size_area()` if you want 0 values to have 0 area. * Bar and rectangle legends no longer get a diagonal line. Instead, the border has been tweaked to make it visible, and more closely match the size of line drawn on the plot. ```{r} ggplot(mpg, aes(factor(cyl), fill = drv)) + geom_bar(colour = "black", size = 1) + coord_flip() ``` * `geom_point()` now uses shape 19 instead of 16. This looks much better on the default Linux graphics device. (It's very slightly smaller than the old point, but it shouldn't affect any graphics significantly). You can now control the width of the outline on shapes 21-25 with the `stroke` parameter. * The default legend will now allocate multiple rows (if vertical) or columns (if horizontal) in order to make a legend that is more likely to fit on the screen. You can override with the `nrow`/`ncol` arguments to `guide_legend()` ```{r} p <- ggplot(mpg, aes(displ,hwy, colour = manufacturer)) + geom_point() + theme(legend.position = "bottom") p # Revert back to previous behaviour p + guides(colour = guide_legend(nrow = 1)) ``` * Two new themes were contributed by [Jean-Olivier Irisson](http://github.com/jiho): `theme_void()` is completely empty and `theme_dark()` has a dark background designed to make colours pop out. ## Facet labels Thanks to the work of [Lionel Henry](https://github.com/lionel-), facet labels have received three major improvements: 1. You can switch the position of facet labels so they're next to the axes. 1. `facet_wrap()` now supports custom labellers. 1. You can create combined labels when facetting by multiple variables. ### Switching the labels The new `switch` argument allows you to switch the labels to display near the axes: ```{r} data <- transform(mtcars, am = factor(am, levels = 0:1, c("Automatic", "Manual")), gear = factor(gear, levels = 3:5, labels = c("Three", "Four", "Five")) ) ggplot(data, aes(mpg, disp)) + geom_point() + facet_grid(am ~ gear, switch = "both") ``` This is especially useful when the labels directly characterise the axes. In that situation, switching the labels can make the plot clearer and more readable. You may also want to use a neutral label background by setting `strip.background` to `element_blank()`: ```{r} data <- mtcars %>% mutate( Logarithmic = log(mpg), Inverse = 1 / mpg, Cubic = mpg ^ 3, Original = mpg ) %>% tidyr::gather(transformation, mpg2, Logarithmic:Original) ggplot(data, aes(mpg2, disp)) + geom_point() + facet_wrap(~transformation, scales = "free", switch = "x") + theme(strip.background = element_blank()) ``` ### Wrap labeller A longstanding issue in ggplot was that `facet_wrap()` did not support custom labellers. Labellers are small functions that make it easy to customise the labels. You can now supply labellers to both wrap and grid facets: ```{r} ggplot(data, aes(mpg2, disp)) + geom_point() + facet_wrap(~transformation, scales = "free", labeller = "label_both") ``` ### Composite margins Labellers have now better support for composite margins when you facet over multiple variable with `+`. All labellers gain a `multi_line` argument to control whether labels should be displayed as a single line or over multiple lines, one for each factor. The labellers still work the same way except for `label_bquote()`. That labeller makes it easy to write mathematical expression involving the values of facetted factors. Historically, `label_bquote()` could only specify a single expression for all margins and factor. The factor value was referred to via the backquoted placeholder `.(x)`. Now that it supports expressions combining multiple factors, you must backquote the variable names themselves. In addition, you can provide different expressions for each margin: ```{r} my_labeller <- label_bquote( rows = .(am) / alpha, cols = .(vs) ^ .(cyl) ) ggplot(mtcars, aes(wt, mpg)) + geom_point() + facet_grid(am ~ vs + cyl, labeller = my_labeller) ``` ## Documentation I've given the documentation a thorough overhaul: * Tighly linked geoms and stats (e.g. `geom_boxplot()` and `stat_boxplot()`) are now documented in the same file so you can see all the arguments in one place. Similarly, variations on a theme (like `geom_path()`, `geom_line()`, and `geom_step()`) are documented together. * I've tried to reduce the use of `...` so that you can see all the documentation in one place rather than having to follow links around. In some cases this has involved adding additional arguments to geoms to make it more clear what you can do. * Thanks to [Bob Rudis](https://github.com/hrbrmstr), the use of `qplot()` in examples has been grealy reduced. This is inline with the 2nd edition of the ggplot2 book, which eliminates `qplot()` in favour of `ggplot()`. ## Deprecated features * The `order` aesthetic is officially deprecated. It never really worked, and was poorly documented. * The `stat` and `position` arguments to `qplot()` have been deprecated. `qplot()` is designed for quick plots - if you need to specify position or stat, use `ggplot()` instead. * The theme setting `axis.ticks.margin` has been deprecated: now use the margin property of `axis.text`. * `stat_abline()`, `stat_hline()` and `stat_vline()` have been removed: these were never suitable for use other than with their corresponding geoms and were not documented. * `show_guide` has been renamed to `show.legend`: this more accurately reflects what it does (controls appearance of layer in legend), and uses the same convention as other ggplot2 arguments (i.e. a `.` between names). (Yes, I know that's inconsistent with function names (which use `_`) but it's too late to change now.) A number of geoms have been renamed to be more consistent. The previous names will continue to work for the forseeable future, but you should switch to the new names for new work. * `stat_binhex()` and `stat_bin2d()` have been renamed to `stat_bin_hex()` and `stat_bin_2d()`. `stat_summary2d()` has been renamed to `stat_summary_2d()`, `geom_density2d()`/`stat_density2d()` has been renamed to `geom_density_2d()`/`stat_density_2d()`. * `stat_spoke()` is now `geom_spoke()` since I realised it's a reparameterisation of `geom_segment()`. * `stat_bindot()` has been removed because it's so tightly coupled to `geom_dotplot()`. If you happened to use `stat_bindot()`, just change to `geom_dotplot()`. All defunct functions have been removed. ggplot2/vignettes/releases/ggplot2-2.2.0.Rmd0000644000177400001440000001604713012364671020327 0ustar murdochusers--- title: ggplot2 2.2.0 output: html_document: self_contained: false highlight: NULL --- ```{r setup, include=FALSE} library(ggplot2) library(dplyr) library(forcats) knitr::opts_chunk$set( fig.asp = 1 / 1.6, out.width = "75%", fig.width = 5, collapse = TRUE, comment = "#>", dpi = 96, fig.retina = NULL ) ``` I'm very pleased to announce ggplot2 2.2.0. It includes four major new features: * Subtitles and captions. * A large rewrite of the facetting system. * Improved theme options. * Better stacking. It also includes as numerous bug fixes and minor improvements, as described in the [release notes](http://github.com/hadley/ggplot2/releases/tag/v2.2.0). The majority of this work was carried out by [Thomas Pederson](https://github.com/thomasp85), who I was lucky to have as my "ggplot2 intern" this summer. Make sure to check out his other visualisation packages: [ggraph](https://github.com/thomasp85/ggraph), [ggforce](https://github.com/thomasp85/ggforce), and [tweenr](https://github.com/thomasp85/tweenr). Install ggplot2 with: ```{r, eval = FALSE} install.packages("ggplot2") ``` ## Subtitles and captions Thanks to [Bob Rudis](https://rud.is), you can now add subtitles and captions to your plots: ```{r subtitle} ggplot(mpg, aes(displ, hwy)) + geom_point(aes(color = class)) + geom_smooth(se = FALSE, method = "loess") + labs( title = "Fuel efficiency generally decreases with engine size", subtitle = "Two seaters (sports cars) are an exception because of their light weight", caption = "Data from fueleconomy.gov" ) ``` These are controlled by the theme settings `plot.subtitle` and `plot.caption`. The plot title is now aligned to the left by default. To return to the previous centered alignment, use `theme(plot.title = element_text(hjust = 0.5))`. ## Facets The facet and layout implementation has been moved to ggproto and received a large rewrite and refactoring. This will allow others to create their own facetting systems, as descrbied in the `vignette("extending-ggplot2")`. Along with the rewrite a number of features and improvements has been added, most notably: * ou can now use functions in facetting formulas, thanks to [Dan Ruderman](https://github.com/DanRuderman). ```{r facet-1} ggplot(diamonds, aes(carat, price)) + geom_hex(bins = 20) + facet_wrap(~cut_number(depth, 6)) ``` * Axes are now drawn under the panels in `facet_wrap()` when the rentangle is not completely filled. ```{r facet-2} ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~class) ``` * You can set the position of the axes with the `position` argument. ```{r facet-3} ggplot(mpg, aes(displ, hwy)) + geom_point() + scale_x_continuous(position = "top") + scale_y_continuous(position = "right") ``` * You can display a secondary axis that is a one-to-one transformation of the primary axis with `sec.axis`. ```{r facet-4} ggplot(mpg, aes(displ, hwy)) + geom_point() + scale_y_continuous( "mpg (US)", sec.axis = sec_axis(~ . * 1.20, name = "mpg (UK)") ) ``` * Strips can be placed on any side, and the placement with respect to axes can be controlled with the `strip.placement` theme option. ```{r facet-5} ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~ drv, strip.position = "bottom") + theme( strip.placement = "outside", strip.background = element_blank(), strip.text = element_text(face = "bold") ) + xlab(NULL) ``` ## Theming * The `theme()` function now has named arguments so autocomplete and documentation suggestions are vastly improved. * Blank elements can now be overridden again so you get the expected behavior when setting e.g. `axis.line.x`. * `element_line()` gets an `arrow` argument that lets you put arrows on axes. ```{r theme-1} arrow <- arrow(length = unit(0.4, "cm"), type = "closed") ggplot(mpg, aes(displ, hwy)) + geom_point() + theme_minimal() + theme( axis.line = element_line(arrow = arrow) ) ``` * Control of legend styling has been improved. The whole legend area can be aligned with the plot area and a box can be drawn around all legends: ```{r theme-2} ggplot(mpg, aes(displ, hwy, shape = drv, colour = fl)) + geom_point() + theme( legend.justification = "top", legend.box = "horizontal", legend.box.margin = margin(3, 3, 3, 3, "mm"), legend.margin = margin(), legend.box.background = element_rect(colour = "grey50") ) ``` * `panel.margin` and `legend.margin` have been renamed to `panel.spacing` and `legend.spacing` respectively, as this better indicates their roles. A new `legend.margin` actually controls the margin around each legend. * When computing the height of titles, ggplot2 now inclues the height of the descenders (i.e. the bits `g` and `y` that hang underneath). This improves the margins around titles, particularly the y axis label. I have also very slightly increased the inner margins of axis titles, and removed the outer margins. * The default themes has been tweaked by [Jean-Olivier Irisson](http://www.obs-vlfr.fr/~irisson/) making them better match `theme_grey()`. ## Stacking bars `position_stack()` and `position_fill()` now stack values in the reverse order of the grouping, which makes the default stack order match the legend. ```{r stack-1} avg_price <- diamonds %>% group_by(cut, color) %>% summarise(price = mean(price)) %>% ungroup() %>% mutate(price_rel = price - mean(price)) ggplot(avg_price) + geom_col(aes(x = cut, y = price, fill = color)) ``` (Note also the new `geom_col()` which is short-hand for `geom_bar(stat = "identity")`, contributed by Bob Rudis.) If you want to stack in the opposite order, try [`forcats::fct_rev()`](http://forcats.tidyverse.org/reference/fct_rev.html): ```{r stack-2} ggplot(avg_price) + geom_col(aes(x = cut, y = price, fill = fct_rev(color))) ``` Additionally, you can now stack negative values: ```{r stack-3} ggplot(avg_price) + geom_col(aes(x = cut, y = price_rel, fill = color)) ``` The overall ordering cannot necessarily be matched in the presence of negative values, but the ordering on either side of the x-axis will match. Labels can also be stacked, but the default position is suboptimal: ```{r stack-4} series <- data.frame( time = c(rep(1, 4),rep(2, 4), rep(3, 4), rep(4, 4)), type = rep(c('a', 'b', 'c', 'd'), 4), value = rpois(16, 10) ) ggplot(series, aes(time, value, group = type)) + geom_area(aes(fill = type)) + geom_text(aes(label = type), position = "stack") ``` You can improve the position with the `vjust` parameter. A `vjust` of 0.5 will center the labels inside the corresponding area: ```{r stack-5} ggplot(series, aes(time, value, group = type)) + geom_area(aes(fill = type)) + geom_text(aes(label = type), position = position_stack(vjust = 0.5)) ``` ggplot2/vignettes/releases/ggplot2-2.1.0.Rmd0000644000177400001440000000613413010422476020316 0ustar murdochusers--- title: "ggplot2 2.1.0" --- ```{r setup, include = FALSE} knitr::opts_chunk$set( comment = "#>", collapse = TRUE, fig.show = "hold", out.width = "75%", fig.width = 4, fig.asp = 2/3, dpi = 96, fig.retina = NULL ) library(ggplot2) library(dplyr) ``` I'm very pleased to announce the release of ggplot2 2.1.0, scales 0.4.0, and gtable 0.2.0. These are set of relatively minor updates that fix a whole bunch of little problems that crept in during the [last big update](http://blog.rstudio.org/2015/12/21/ggplot2-2-0-0/). The most important changes are described below. 1. When mapping an aesthetic to a constant the default guide title is the name of the aesthetic (i.e. "colour"), not the value (i.e. "loess"). This is a really handy technique for labelling individual layers: ```{r} ggplot(mpg, aes(displ, 1 / hwy)) + geom_point() + geom_smooth(method = lm, aes(colour = "lm"), se = FALSE) + geom_smooth(aes(colour = "loess"), se = FALSE) ``` 1. `stat_bin()` (which powers `geom_histogram()` and `geom_freqpoly()`), has been overhauled to use the same algorithm as ggvis. This has considerably better parameters and defaults thanks to the work of [Randall Pruim](http://www.calvin.edu/~rpruim/). Changes include: * Better arguments and a better algorithm for determining the origin. You can now specify either `boundary` (i.e. the position of the left or right side) or the `center` of a bin. `origin` has been deprecated in favour of these arguments. * `drop` is deprecated in favour of `pad`, which adds extra 0-count bins at either end, as is needed for frequency polygons. `geom_histogram()` defaults to `pad = FALSE` which considerably improves the default limits for the histogram, especially when the bins are big. * The default algorithm does a (somewhat) better job at picking nice widths and origins across a wider range of input data. You can see the impact of these changes on the following two histograms: ```{r, out.width = "50%"} ggplot(diamonds, aes(carat)) + geom_histogram(binwidth = 1) ggplot(diamonds, aes(carat)) + geom_histogram(binwidth = 1, boundary = 0) ``` 1. All layer functions (`geom_*()` + `stat_*()`) functions now have a consistent argument order: `data`, `mapping`, then `geom`/`stat`/`position`, then `...`, then layer specific arguments, then common layer arguments. This might break some code if you were relying on partial name matching, but in the long-term should make ggplot2 easier to use. In particular, you can now set the `n` parameter in `geom_density2d()` without it partially matching `na.rm`. 1. For geoms with both `colour` and `fill`, `alpha` once again only affects fill. `alpha` was changed to modify both `colour` and `fill` in 2.0.0, but I've reverted it to the old behaviour because it was causing pain for quite a few people. You can see a full list of changes in the [release notes](https://github.com/hadley/ggplot2/releases/tag/v2.1.0). ggplot2/vignettes/releases/ggplot2-1.0.0.Rmd0000644000177400001440000000377613006423572020330 0ustar murdochusers--- title: "ggplot2 updates" --- ## ggplot2 1.0.0 As you might have noticed, ggplot2 recently [turned 1.0.0](http://cran.r-project.org/web/packages/ggplot2/index.html). This release incorporated a handful of [new features and bug fixes](https://github.com/hadley/ggplot2/releases/tag/v1.0.0), but most importantly reflects that ggplot2 is now a mature plotting system and it will not change significantly in the future. This does not mean ggplot2 is dead! The ggplot2 community is [rich](https://groups.google.com/forum/#!forum/ggplot2) and [vibrant](http://stackoverflow.com/tags/ggplot2) and the number of packages that build on top of ggplot2 continues to grow. We are committed to maintaining ggplot2 so that you can continue to rely on it for years to come. ## The ggplot2 book Since ggplot2 is now stable, and the [ggplot2 book](http://ggplot2.org/book/) is over five years old and rather out of date, I'm also happy to announce that I'm working on a second edition. I'll be ably assisted in this endeavour by [Carson Sievert](http://cpsievert.github.io), who's so far done a great job of converting the source to Rmd and updating many of the examples to work with ggplot2 1.0.0. In the coming months we'll be rewriting the data chapter to reflect modern best practices (e.g. [tidyr](https://github.com/hadley/tidyr) and [dplyr](https://github.com/hadley/dplyr)), and adding sections about new features. We'd love your help! The source code for the book is available on [github](https://github.com/hadley/ggplot2-book). If you've spotted any mistakes in the first edition that you'd like to correct, we'd really appreciate a [pull request](https://github.com/hadley/ggplot2-book/pulls). If there's a particular section of the book that you think needs an update (or is just plain missing), please let us know by filing an [issue](https://github.com/hadley/ggplot2-book/issues). Unfortunately we can't turn the book into a free website because of my agreement with the publisher, but at least you can now get easily get to the source. ggplot2/vignettes/car.png0000644000177400001440000000370312560473777015332 0ustar murdochusers‰PNG  IHDRâeg{Ï…gAMA± üaPLTEg=[o7Rk:VMNtET}IQy^CcZFhRLpc@_bŽ;a‘>g˜AW@hš@jœAkKl•Qq™Dp¥Eq¦Fr¨FsªJy±Kz³L|µL}¶O½š'…)<#4‰&8‘ /«¯ ¢§³ ¸ €,AÀÿÿÿ‰Ÿº¡³ÈPtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿS÷% pHYsÂÂ(J€tEXtSoftwarePaint.NET v3.5.100ôr¡'IDATx^í›[SA„£ˆDÅ;ÞÐ ¨¨ÄËÿÿoØ'ÛÙL6]©¹ìVe'ç{ÀÍ™9Ý|Å‹”ëäî|Z5çw“7|¬–³ *ÆçãŠ5àŠ5àŠ5àŠ5àŠŠïW/ù\ÊÍñ½ëo|ŠDEèáúôŸKy°V ±ŠK½œ•´A5‘nŠäèŠã.¡ÞãçøÂy)Hzùd‘ zÖ¼\ý@Åé)CÖõÞ~œÍðÀ³R4›]¼Dó‘ TÜøÖvõ |àq)Hj"ÐdšaŠ¿àÇ-'‹+ž!îe‚$f‚ž5‘òÇÀŸ[1Z×3ĽLÄLÒ£&bY îe"ã{ÒÄöÎ*=hbs§Žæ/îÄ‚­W4ÍîÄ‚•Q(KMîÄ‚Ñ(騕bF'6\±#vˆ{™ÈxIz'6\±#vˆ{™ÈxIz'6öL±…Ç-±#@ÜËDÆKÒ;±±¤VÅS¬Pñ>[0cG†<.EÆKÒ;o±BL‘ÓMpÆŽ€m iÈxI~'6]ÑËñ’üNlº¢+–!ã%ùØtEW,CÆKò;±éŠ®X†Œ—äwbÓ]± /ÉïĦ+ºb2^’߉MWtÅ2d¼$¿›®èŠeÈxI~'6]ÑËñ’üNlî‰"Ù|åCv`ÈãRd¼$½3ö•[ÌØ€!K‘ñ’ôÎØWn1bG€¸—‰Œ—¤wbc‰)îÁ¿õ»bq//IïĆ+6`ÄŽq//IïĆ+6`ÄŽq//IïÄÆx?xý,½ãP¤HýßvXÙ}Å•þjy|ÃX°´ÛŠëz·©~‹»«X®g`9VñÕûO¬^"îe‚$f.éGÏ@@”bóÉÓuMq/$1ÓèOÏ@H¨ØÂã–¯/xjâKA3ûÕ3flUœÏ|yÔÕÄKAÒ zFì+· M|åA)HDψ}åvE¨Ù§"éW/ᑊÆJ“ƒRš´áô $( Í~(åz`=#]qt¸b ¸b ¸b ¸b ìbåLÎøP/“|¨•éßÿ5ùíQŒ\ÛIEND®B`‚ggplot2/vignettes/extending-ggplot2.Rmd0000644000177400001440000011762513006423127020051 0ustar murdochusers--- title: "Extending ggplot2" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Extending ggplot2} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set(collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 7, fig.align = "center") library(ggplot2) ``` This vignette documents the official extension mechanism provided in ggplot2 2.0.0. This vignette is a high-level adjunct to the low-level details found in `?Stat`, `?Geom` and `?theme`. You'll learn how to extend ggplot2 by creating a new stat, geom, or theme. As you read this document, you'll see many things that will make you scratch your head and wonder why on earth is it designed this way? Mostly it's historical accident - I wasn't a terribly good R programmer when I started writing ggplot2 and I made a lot of questionable decisions. We cleaned up as many of those issues as possible in the 2.0.0 release, but some fixes simply weren't worth the effort. ## ggproto All ggplot2 objects are built using the ggproto system of object oriented programming. This OO system is used only in one place: ggplot2. This is mostly historical accident: ggplot2 started off using [proto]( https://cran.r-project.org/package=proto) because I needed mutable objects. This was well before the creation of (the briefly lived) [mutatr](http://vita.had.co.nz/papers/mutatr.html), reference classes and R6: proto was the only game in town. But why ggproto? Well when we turned to add an official extension mechanism to ggplot2, we found a major problem that caused problems when proto objects were extended in a different package (methods were evaluated in ggplot2, not the package where the extension was added). We tried converting to R6, but it was a poor fit for the needs of ggplot2. We could've modified proto, but that would've first involved understanding exactly how proto worked, and secondly making sure that the changes didn't affect other users of proto. It's strange to say, but this is a case where inventing a new OO system was actually the right answer to the problem! Fortunately Winston is now very good at creating OO systems, so it only took him a day to come up with ggproto: it maintains all the features of proto that ggplot2 needs, while allowing cross package inheritance to work. Here's a quick demo of ggproto in action: ```{r ggproto-intro} A <- ggproto("A", NULL, x = 1, inc = function(self) { self$x <- self$x + 1 } ) A$x A$inc() A$x A$inc() A$inc() A$x ``` The majority of ggplot2 classes are immutable and static: the methods neither use nor modify state in the class. They're mostly used as a convenient way of bundling related methods together. To create a new geom or stat, you will just create a new ggproto that inherits from `Stat`, `Geom` and override the methods described below. ## Creating a new stat ### The simplest stat We'll start by creating a very simple stat: one that gives the convex hull (the _c_ hull) of a set of points. First we create a new ggproto object that inherits from `Stat`: ```{r chull} StatChull <- ggproto("StatChull", Stat, compute_group = function(data, scales) { data[chull(data$x, data$y), , drop = FALSE] }, required_aes = c("x", "y") ) ``` The two most important components are the `compute_group()` method (which does the computation), and the `required_aes` field, which lists which aesthetics must be present in order to for the stat to work. Next we write a layer function. Unfortunately, due to an early design mistake I called these either `stat_()` or `geom_()`. A better decision would have been to call them `layer_()` functions: that's a more accurate description because every layer involves a stat _and_ a geom. All layer functions follow the same form - you specify defaults in the function arguments and then call the `layer()` function, sending `...` into the `params` argument. The arguments in `...` will either be arguments for the geom (if you're making a stat wrapper), arguments for the stat (if you're making a geom wrapper), or aesthetics to be set. `layer()` takes care of teasing the different parameters apart and making sure they're stored in the right place: ```{r} stat_chull <- function(mapping = NULL, data = NULL, geom = "polygon", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ``` (Note that if you're writing this in your own package, you'll either need to call `ggplot2::layer()` explicitly, or import the `layer()` function into your package namespace.) Once we have a layer function we can try our new stat: ```{r} ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_chull(fill = NA, colour = "black") ``` (We'll see later how to change the defaults of the geom so that you don't need to specify `fill = NA` every time.) Once we've written this basic object, ggplot2 gives a lot for free. For example, ggplot2 automatically preserves aesthetics that are constant within each group: ```{r} ggplot(mpg, aes(displ, hwy, colour = drv)) + geom_point() + stat_chull(fill = NA) ``` We can also override the default geom to display the convex hull in a different way: ```{r} ggplot(mpg, aes(displ, hwy)) + stat_chull(geom = "point", size = 4, colour = "red") + geom_point() ``` ### Stat parameters A more complex stat will do some computation. Let's implement a simple version of `geom_smooth()` that adds a line of best fit to a plot. We create a `StatLm` that inherits from `Stat` and a layer function, `stat_lm()`: ```{r} StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = rng) mod <- lm(y ~ x, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm() ``` `StatLm` is inflexible because it has no parameters. We might want to allow the user to control the model formula and the number of points used to generate the grid. To do so, we add arguments to the `compute_group()` method and our wrapper function: ```{r} StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, params, n = 100, formula = y ~ x) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = seq(rng[1], rng[2], length = n)) mod <- lm(formula, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm(formula = y ~ poly(x, 10)) + stat_lm(formula = y ~ poly(x, 10), geom = "point", colour = "red", n = 20) ``` Note that we don't _have_ to explicitly include the new parameters in the arguments for the layer, `...` will get passed to the right place anyway. But you'll need to document them somewhere so the user knows about them. Here's a brief example. Note `@inheritParams ggplot2::stat_identity`: that will automatically inherit documentation for all the parameters also defined for `stat_identity()`. ```{r} #' @inheritParams ggplot2::stat_identity #' @param formula The modelling formula passed to \code{lm}. Should only #' involve \code{y} and \code{x} #' @param n Number of points used for interpolation. stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ``` ### Picking defaults Sometimes you have calculations that should be performed once for the complete dataset, not once for each group. This is useful for picking sensible default values. For example, if we want to do a density estimate, it's reasonable to pick one bandwidth for the whole plot. The following Stat creates a variation of the `stat_density()` that picks one bandwidth for all groups by choosing the mean of the "best" bandwidth for each group (I have no theoretical justification for this, but it doesn't seem unreasonable). To do this we override the `setup_params()` method. It's passed the data and a list of params, and returns an updated list. ```{r} StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", setup_params = function(data, params) { if (!is.null(params$bandwidth)) return(params) xs <- split(data$x, data$group) bws <- vapply(xs, bw.nrd0, numeric(1)) bw <- mean(bws) message("Picking bandwidth of ", signif(bw, 3)) params$bandwidth <- bw params }, compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, y = d$y) } ) stat_density_common <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, bandwidth = NULL, ...) { layer( stat = StatDensityCommon, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(bandwidth = bandwidth, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, colour = drv)) + stat_density_common() ggplot(mpg, aes(displ, colour = drv)) + stat_density_common(bandwidth = 0.5) ``` I recommend using `NULL` as a default value. If you pick important parameters automatically, it's a good idea to `message()` to the user (and when printing a floating point parameter, using `signif()` to show only a few significant digits). ### Variable names and default aesthetics This stat illustrates another important point. If we want to make this stat usable with other geoms, we should return a variable called `density` instead of `y`. Then we can set up the `default_aes` to automatically map `density` to `y`, which allows the user to override it to use with different geoms: ```{r} StatDensityCommon <- ggproto("StatDensity2", Stat, required_aes = "x", default_aes = aes(y = ..density..), compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, drv, colour = ..density..)) + stat_density_common(bandwidth = 1, geom = "point") ``` However, using this stat with the area geom doesn't work quite right. The areas don't stack on top of each other: ```{r} ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ``` This is because each density is computed independently, and the estimated `x`s don't line up. We can resolve that issue by computing the range of the data once in `setup_params()`. ```{r} StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", default_aes = aes(y = ..density..), setup_params = function(data, params) { min <- min(data$x) - 3 * params$bandwidth max <- max(data$x) + 3 * params$bandwidth list( bandwidth = params$bandwidth, min = min, max = max, na.rm = params$na.rm ) }, compute_group = function(data, scales, min, max, bandwidth = 1) { d <- density(data$x, bw = bandwidth, from = min, to = max) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ggplot(mpg, aes(displ, drv, fill = ..density..)) + stat_density_common(bandwidth = 1, geom = "raster") ``` ### Exercises 1. Extend `stat_chull` to compute the alpha hull, as from the [alphahull](https://cran.r-project.org/package=alphahull) package. Your new stat should take an `alpha` argument. 1. Modify the final version of `StatDensityCommon` to allow the user to specify the `min` and `max` parameters. You'll need to modify both the layer function and the `compute_group()` method. 1. Compare and contrast `StatLm` to `ggplot2::StatSmooth`. What key differences make `StatSmooth` more complex than `StatLm`? ## Creating a new geom It's harder to create a new geom than a new stat because you also need to know some grid. ggplot2 is built on top of grid, so you'll need to know the basics of drawing with grid. If you're serious about adding a new geom, I'd recommend buying [R graphics](http://amzn.com/B00I60M26G) by Paul Murrell. It tells you everything you need to know about drawing with grid. ### A simple geom It's easiest to start with a simple example. The code below is a simplified version of `geom_point()`: ```{r GeomSimplePoint} GeomSimplePoint <- ggproto("GeomSimplePoint", Geom, required_aes = c("x", "y"), default_aes = aes(shape = 19, colour = "black"), draw_key = draw_key_point, draw_panel = function(data, panel_scales, coord) { coords <- coord$transform(data, panel_scales) grid::pointsGrob( coords$x, coords$y, pch = coords$shape, gp = grid::gpar(col = coords$colour) ) } ) geom_simple_point <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePoint, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_simple_point() ``` This is very similar to defining a new stat. You always need to provide fields/methods for the four pieces shown above: * `required_aes` is a character vector which lists all the aesthetics that the user must provide. * `default_aes` lists the aesthetics that have default values. * `draw_key` provides the function used to draw the key in the legend. You can see a list of all the build in key functions in `?draw_key` * `draw_panel()` is where the magic happens. This function takes three arguments and returns a grid grob. It is called once for each panel. It's the most complicated part and is described in more detail below. `draw_panel()` has three arguments: * `data`: a data frame with one column for each aesthetic. * `panel_scales`: a list containing information about the x and y scales for the current panel. * `coord`: an object describing the coordinate system. Generally you won't use `panel_scales` and `coord` directly, but you will always use them to transform the data: `coords <- coord$transform(data, panel_scales)`. This creates a data frame where position variables are scaled to the range 0--1. You then take this data and call a grid grob function. (Transforming for non-Cartesian coordinate systems is quite complex - you're best off transforming your data to the form accepted by an existing ggplot2 geom and passing it.) ### Collective geoms Overriding `draw_panel()` is most appropriate if there is one graphic element per row. In other cases, you want graphic element per group. For example, take polygons: each row gives one vertex of a polygon. In this case, you should instead override `draw_group()`. The following code makes a simplified version of `GeomPolygon`: ```{r} GeomSimplePolygon <- ggproto("GeomPolygon", Geom, required_aes = c("x", "y"), default_aes = aes( colour = NA, fill = "grey20", size = 0.5, linetype = 1, alpha = 1 ), draw_key = draw_key_polygon, draw_group = function(data, panel_scales, coord) { n <- nrow(data) if (n <= 2) return(grid::nullGrob()) coords <- coord$transform(data, panel_scales) # A polygon can only have a single colour, fill, etc, so take from first row first_row <- coords[1, , drop = FALSE] grid::polygonGrob( coords$x, coords$y, default.units = "native", gp = grid::gpar( col = first_row$colour, fill = scales::alpha(first_row$fill, first_row$alpha), lwd = first_row$size * .pt, lty = first_row$linetype ) ) } ) geom_simple_polygon <- function(mapping = NULL, data = NULL, stat = "chull", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePolygon, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_simple_polygon(aes(colour = class), fill = NA) ``` There are a few things to note here: * We override `draw_group()` instead of `draw_panel()` because we want one polygon per group, not one polygon per row. * If the data contains two or fewer points, there's no point trying to draw a polygon, so we return a `nullGrob()`. This is the graphical equivalent of `NULL`: it's a grob that doesn't draw anything and doesn't take up any space. * Note the units: `x` and `y` should always be drawn in "native" units. (The default units for `pointGrob()` is a native, so we didn't need to change it there). `lwd` is measured in points, but ggplot2 uses mm, so we need to multiply it by the adjustment factor `.pt`. You might want to compare this to the real `GeomPolygon`. You'll see it overrides `draw_panel()` because it uses some tricks to make `polygonGrob()` produce multiple polygons in one call. This is considerably more complicated, but gives better performance. ### Inheriting from an existing Geom Sometimes you just want to make a small modification to an existing geom. In this case, rather than inheriting from `Geom` you can inherit from an existing subclass. For example, we might want to change the defaults for `GeomPolygon` to work better with `StatChull`: ```{r} GeomPolygonHollow <- ggproto("GeomPolygonHollow", GeomPolygon, default_aes = aes(colour = "black", fill = NA, size = 0.5, linetype = 1, alpha = NA) ) geom_chull <- function(mapping = NULL, data = NULL, position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, geom = GeomPolygonHollow, data = data, mapping = mapping, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_chull() ``` This doesn't allow you to use different geoms with the stat, but that seems appropriate here since the convex hull is primarily a polygonal feature. ### Exercises 1. Compare and contrast `GeomPoint` with `GeomSimplePoint`. 1. Compare and contract `GeomPolygon` with `GeomSimplePolygon`. ## Creating your own theme If you're going to create your own complete theme, there are a few things you need to know: * Overriding existing elements, rather than modifying them * The four global elements that affect (almost) every other theme element * Complete vs. incomplete elements ### Overriding elements By default, when you add a new theme element, it inherits values from the existing theme. For example, the following code sets the key colour to red, but it inherits the existing fill colour: ```{r} theme_grey()$legend.key new_theme <- theme_grey() + theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ``` To override it completely, use `%+replace%` instead of `+`: ```{r} new_theme <- theme_grey() %+replace% theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ``` ### Global elements There are four elements that affect the global appearance of the plot: Element | Theme function | Description -------------|-------------------|------------------------ line | `element_line()` | all line elements rect | `element_rect()` | all rectangular elements text | `element_text()` | all text title | `element_text()` | all text in title elements (plot, axes & legend) These set default properties that are inherited by more specific settings. These are most useful for setting an overall "background" colour and overall font settings (e.g. family and size). ```{r axis-line-ex} df <- data.frame(x = 1:3, y = 1:3) base <- ggplot(df, aes(x, y)) + geom_point() + theme_minimal() base base + theme(text = element_text(colour = "red")) ``` You should generally start creating a theme by modifying these values. ### Complete vs incomplete It is useful to understand the difference between complete and incomplete theme objects. A *complete* theme object is one produced by calling a theme function with the attribute `complete = TRUE`. Theme functions `theme_grey()` and `theme_bw()` are examples of complete theme functions. Calls to `theme()` produce *incomplete* theme objects, since they represent (local) modifications to a theme object rather than returning a complete theme object per se. When adding an incomplete theme to a complete one, the result is a complete theme. Complete and incomplete themes behave somewhat differently when added to a ggplot object: * Adding an incomplete theme augments the current theme object, replacing only those properties of elements defined in the call to `theme()`. * Adding a complete theme wipes away the existing theme and applies the new theme. ## Creating a new facetting One of the more daunting exercises in ggplot2 extensions is to create a new facetting system. The reason for this is that when creating new facettings you take on the responsibility of how (almost) everything is drawn on the screen, and many do not have experience with directly using [gtable](https://cran.r-project.org/package=gtable) and [grid](https://cran.r-project.org/package=grid) upon which the ggplot2 rendering is build. If you decide to venture into facetting extensions it is highly recommended to gain proficiency with the above-mentioned packages. The `Facet` class in ggplot2 is very powerfull as it takes on responsibility of a wide range of tasks. The main tasks of a `Facet` object are: * Define a layout; that is, a partitioning of the data into different plot areas (panels) as well as which panels share position scales. * Map plot data into the correct panels, potentially duplicating data if it should exist in multiple panels (e.g. margins in `facet_grid()`). * Assemble all panels into a final gtable, adding axes, strips and decorations in the process. Apart from these three tasks, for which functionality must be implemented, there are a couple of additional extension points where sensible defaults have been provided. These can generally be ignored, but adventurous developers can override them for even more control: * Initialization and training of positional scales for each panel. * Decoration in front of and behind each panel. * Drawing of axis labels To show how a new facetting class is created we will start simple and go through each of the required methods in turn to build up `facet_duplicate()` that simply duplicate our plot into two panels. After this we will tinker with it a bit to show some of the more powerful possibilities. ### Creating a layout specification A layout in the context of facets is a `data.frame` that defines a mapping between data and the panels it should reside in as well as which positional scales should be used. The output should at least contain the columns `PANEL`, `SCALE_X`, and `SCALE_Y`, but will often contain more to help assign data to the correct panel (`facet_grid()` will e.g. also return the facetting variables associated with each panel). Let's make a function that defines a duplicate layout: ```{r} layout <- function(data, params) { data.frame(PANEL = c(1L, 2L), SCALE_X = 1L, SCALE_Y = 1L) } ``` This is quite simple as the facetting should just define two panels irrespectively of the input data and parameters. ### Mapping data into panels In order for ggplot2 to know which data should go where it needs the data to be assigned to a panel. The purpose of the mapping step is to assign a `PANEL` column to the layer data identifying which panel it belongs to. ```{r} mapping <- function(data, layout, params) { if (plyr::empty(data)) { return(cbind(data, PANEL = integer(0))) } rbind( cbind(data, PANEL = 1L), cbind(data, PANEL = 2L) ) } ``` here we first investigate whether we have gotten an empty `data.frame` and if not we duplicate the data and assign the original data to the first panel and the new data to the second panel. ### Laying out the panels While the two functions above has been decievingly simple, this last one is going to take some more work. Our goal is to draw two panels beside (or above) each other with axes etc. ```{r} render <- function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) { # Place panels according to settings if (params$horizontal) { # Put panels in matrix and convert to a gtable panels <- matrix(panels, ncol = 2) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(c(1, 1), "null"), heights = unit(1, "null"), clip = "on") # Add spacing according to theme panel_spacing <- if (is.null(theme$panel.spacing.x)) { theme$panel.spacing } else { theme$panel.spacing.x } panel_table <- gtable::gtable_add_col_space(panel_table, panel_spacing) } else { panels <- matrix(panels, ncol = 1) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(1, "null"), heights = unit(c(1, 1), "null"), clip = "on") panel_spacing <- if (is.null(theme$panel.spacing.y)) { theme$panel.spacing } else { theme$panel.spacing.y } panel_table <- gtable::gtable_add_row_space(panel_table, panel_spacing) } # Name panel grobs so they can be found later panel_table$layout$name <- paste0("panel-", c(1, 2)) # Construct the axes axes <- render_axes(ranges[1], ranges[1], coord, theme, transpose = TRUE) # Add axes around each panel panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_width_l <- unit(grid::convertWidth( grid::grobWidth(axes$y$left[[1]]), "cm", TRUE), "cm") axis_width_r <- unit(grid::convertWidth( grid::grobWidth(axes$y$right[[1]]), "cm", TRUE), "cm") ## We do it reverse so we don't change the position of panels when we add axes for (i in rev(panel_pos_h)) { panel_table <- gtable::gtable_add_cols(panel_table, axis_width_r, i) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$right, length(panel_pos_v)), t = panel_pos_v, l = i + 1, clip = "off") panel_table <- gtable::gtable_add_cols(panel_table, axis_width_l, i - 1) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$left, length(panel_pos_v)), t = panel_pos_v, l = i, clip = "off") } ## Recalculate as gtable has changed panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_height_t <- unit(grid::convertHeight( grid::grobHeight(axes$x$top[[1]]), "cm", TRUE), "cm") axis_height_b <- unit(grid::convertHeight( grid::grobHeight(axes$x$bottom[[1]]), "cm", TRUE), "cm") for (i in rev(panel_pos_v)) { panel_table <- gtable::gtable_add_rows(panel_table, axis_height_b, i) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$bottom, length(panel_pos_h)), t = i + 1, l = panel_pos_h, clip = "off") panel_table <- gtable::gtable_add_rows(panel_table, axis_height_t, i - 1) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$top, length(panel_pos_h)), t = i, l = panel_pos_h, clip = "off") } panel_table } ``` ### Assembling the Facet class Usually all methods are defined within the class definition in the same way as is done for `Geom` and `Stat`. Here we have split it out so we could go through each in turn. All that remains is to assign our functions to the correct methods as well as making a constructor ```{r} # Constructor: shrink is required to govern whether scales are trained on # Stat-transformed data or not. facet_duplicate <- function(horizontal = TRUE, shrink = TRUE) { ggproto(NULL, FacetDuplicate, shrink = shrink, params = list( horizontal = horizontal ) ) } FacetDuplicate <- ggproto("FacetDuplicate", Facet, compute_layout = layout, map_data = mapping, draw_panels = render ) ``` Now with everything assembled, lets test it out: ```{r} p <- ggplot(mtcars, aes(x = hp, y = mpg)) + geom_point() p p + facet_duplicate() ``` ### Doing more with facets The example above was pretty useless and we'll now try to expand on it to add some actual usability. We are going to make a facetting that adds panels with y-transformed axes: ```{r} library(scales) facet_trans <- function(trans, horizontal = TRUE, shrink = TRUE) { ggproto(NULL, FacetTrans, shrink = shrink, params = list( trans = scales::as.trans(trans), horizontal = horizontal ) ) } FacetTrans <- ggproto("FacetTrans", Facet, # Almost as before but we want different y-scales for each panel compute_layout = function(data, params) { data.frame(PANEL = c(1L, 2L), SCALE_X = 1L, SCALE_Y = c(1L, 2L)) }, # Same as before map_data = function(data, layout, params) { if (plyr::empty(data)) { return(cbind(data, PANEL = integer(0))) } rbind( cbind(data, PANEL = 1L), cbind(data, PANEL = 2L) ) }, # This is new. We create a new scale with the defined transformation init_scales = function(layout, x_scale = NULL, y_scale = NULL, params) { scales <- list() if (!is.null(x_scale)) { scales$x <- plyr::rlply(max(layout$SCALE_X), x_scale$clone()) } if (!is.null(y_scale)) { y_scale_orig <- y_scale$clone() y_scale_new <- y_scale$clone() y_scale_new$trans <- params$trans # Make sure that oob values are kept y_scale_new$oob <- function(x, ...) x scales$y <- list(y_scale_orig, y_scale_new) } scales }, # We must make sure that the second scale is trained on transformed data train_scales = function(x_scales, y_scales, layout, data, params) { # Transform data for second panel prior to scale training if (!is.null(y_scales)) { data <- lapply(data, function(layer_data) { match_id <- match(layer_data$PANEL, layout$PANEL) y_vars <- intersect(y_scales[[1]]$aesthetics, names(layer_data)) trans_scale <- layer_data$PANEL == 2L for (i in y_vars) { layer_data[trans_scale, i] <- y_scales[[2]]$transform(layer_data[trans_scale, i]) } layer_data }) } Facet$train_scales(x_scales, y_scales, layout, data, params) }, # this is where we actually modify the data. It cannot be done in $map_data as that function # doesn't have access to the scales finish_data = function(data, layout, x_scales, y_scales, params) { match_id <- match(data$PANEL, layout$PANEL) y_vars <- intersect(y_scales[[1]]$aesthetics, names(data)) trans_scale <- data$PANEL == 2L for (i in y_vars) { data[trans_scale, i] <- y_scales[[2]]$transform(data[trans_scale, i]) } data }, # A few changes from before to accomodate that axes are now not duplicate of each other # We also add a panel strip to annotate the different panels draw_panels = function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) { # Place panels according to settings if (params$horizontal) { # Put panels in matrix and convert to a gtable panels <- matrix(panels, ncol = 2) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(c(1, 1), "null"), heights = unit(1, "null"), clip = "on") # Add spacing according to theme panel_spacing <- if (is.null(theme$panel.spacing.x)) { theme$panel.spacing } else { theme$panel.spacing.x } panel_table <- gtable::gtable_add_col_space(panel_table, panel_spacing) } else { panels <- matrix(panels, ncol = 1) panel_table <- gtable::gtable_matrix("layout", panels, widths = unit(1, "null"), heights = unit(c(1, 1), "null"), clip = "on") panel_spacing <- if (is.null(theme$panel.spacing.y)) { theme$panel.spacing } else { theme$panel.spacing.y } panel_table <- gtable::gtable_add_row_space(panel_table, panel_spacing) } # Name panel grobs so they can be found later panel_table$layout$name <- paste0("panel-", c(1, 2)) # Construct the axes axes <- render_axes(ranges[1], ranges, coord, theme, transpose = TRUE) # Add axes around each panel grobWidths <- function(x) { unit(vapply(x, function(x) { grid::convertWidth( grid::grobWidth(x), "cm", TRUE) }, numeric(1)), "cm") } panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_width_l <- grobWidths(axes$y$left) axis_width_r <- grobWidths(axes$y$right) ## We do it reverse so we don't change the position of panels when we add axes for (i in rev(seq_along(panel_pos_h))) { panel_table <- gtable::gtable_add_cols(panel_table, axis_width_r[i], panel_pos_h[i]) if (params$horizontal) { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$right[i], length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i] + 1, clip = "off") } else { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$right, length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i] + 1, clip = "off") } panel_table <- gtable::gtable_add_cols(panel_table, axis_width_l[i], panel_pos_h[i] - 1) if (params$horizontal) { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$left[i], length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i], clip = "off") } else { panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$y$left, length(panel_pos_v)), t = panel_pos_v, l = panel_pos_h[i], clip = "off") } } ## Recalculate as gtable has changed panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t axis_height_t <- unit(grid::convertHeight( grid::grobHeight(axes$x$top[[1]]), "cm", TRUE), "cm") axis_height_b <- unit(grid::convertHeight( grid::grobHeight(axes$x$bottom[[1]]), "cm", TRUE), "cm") for (i in rev(panel_pos_v)) { panel_table <- gtable::gtable_add_rows(panel_table, axis_height_b, i) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$bottom, length(panel_pos_h)), t = i + 1, l = panel_pos_h, clip = "off") panel_table <- gtable::gtable_add_rows(panel_table, axis_height_t, i - 1) panel_table <- gtable::gtable_add_grob(panel_table, rep(axes$x$top, length(panel_pos_h)), t = i, l = panel_pos_h, clip = "off") } # Add strips strips <- render_strips( x = data.frame(name = c("Original", paste0("Transformed (", params$trans$name, ")"))), labeller = label_value, theme = theme) panel_pos_h <- panel_cols(panel_table)$l panel_pos_v <- panel_rows(panel_table)$t strip_height <- unit(grid::convertHeight( grid::grobHeight(strips$x$top[[1]]), "cm", TRUE), "cm") for (i in rev(seq_along(panel_pos_v))) { panel_table <- gtable::gtable_add_rows(panel_table, strip_height, panel_pos_v[i] - 1) if (params$horizontal) { panel_table <- gtable::gtable_add_grob(panel_table, strips$x$top, t = panel_pos_v[i], l = panel_pos_h, clip = "off") } else { panel_table <- gtable::gtable_add_grob(panel_table, strips$x$top[i], t = panel_pos_v[i], l = panel_pos_h, clip = "off") } } panel_table } ) ``` As is very apparent, the `draw_panel` method can become very unwieldy once it begins to take multiple possibilities into account. The fact that we want to support both horizontal and vertical layout leads to a lot of if/else blocks in the above code. In general this is the big challenge when writing facet extensions so be prepared to be very meticulous when writing these methods. Enough talk - lets see if our new and powerful facetting extension works: ```{r} ggplot(mtcars, aes(x = hp, y = mpg)) + geom_point() + facet_trans('sqrt') ``` ## Extending existing facet function As the rendering part of a facet class is often the difficult development step, it is possible to piggyback on the existing facetting classes to achieve a range of new facettings. Below we will subclass `facet_wrap()` to make a `facet_bootstrap()` class that splits the input data into a number of panels at random. ```{r} facet_bootstrap <- function(n = 9, prop = 0.2, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, strip.position = "top") { facet <- facet_wrap(~.bootstrap, nrow = nrow, ncol = ncol, scales = scales, shrink = shrink, strip.position = strip.position) facet$params$n <- n facet$params$prop <- prop ggproto(NULL, FacetBootstrap, shrink = shrink, params = facet$params ) } FacetBootstrap <- ggproto("FacetBootstrap", FacetWrap, compute_layout = function(data, params) { id <- seq_len(params$n) dims <- wrap_dims(params$n, params$nrow, params$ncol) layout <- data.frame(PANEL = factor(id)) if (params$as.table) { layout$ROW <- as.integer((id - 1L) %/% dims[2] + 1L) } else { layout$ROW <- as.integer(dims[1] - (id - 1L) %/% dims[2]) } layout$COL <- as.integer((id - 1L) %% dims[2] + 1L) layout <- layout[order(layout$PANEL), , drop = FALSE] rownames(layout) <- NULL # Add scale identification layout$SCALE_X <- if (params$free$x) id else 1L layout$SCALE_Y <- if (params$free$y) id else 1L cbind(layout, .bootstrap = id) }, map_data = function(data, layout, params) { if (is.null(data) || nrow(data) == 0) { return(cbind(data, PANEL = integer(0))) } n_samples <- round(nrow(data) * params$prop) new_data <- lapply(seq_len(params$n), function(i) { cbind(data[sample(nrow(data), n_samples), , drop = FALSE], PANEL = i) }) do.call(rbind, new_data) } ) ggplot(diamonds, aes(carat, price)) + geom_point(alpha = 0.1) + facet_bootstrap(n = 9, prop = 0.05) ``` What we are doing above is to intercept the `compute_layout` and `map_data` methods and instead of dividing the data by a variable we randomly assigns rows to a panel based on the sampling parameters (`n` determines the number of panels, `prop` determines the proportion of data in each panel). It is important here that the layout returned by `compute_layout` is a valid layout for `FacetWrap` as we are counting on the `draw_panel` method from `FacetWrap` to do all the work for us. Thus if you want to subclass FacetWrap or FacetGrid, make sure you understand the nature of their layout specification. ### Exercises 1. Rewrite FacetTrans to take a vector of transformations and create an additional panel for each transformation. 2. Based on the FacetWrap implementation rewrite FacetTrans to take the strip.placement theme setting into account. 3. Think about which caveats there are in FacetBootstrap specifically related to adding multiple layers with the same data. ggplot2/vignettes/ggplot2-specs.Rmd0000644000177400001440000001277313006423137017200 0ustar murdochusers--- title: "Aesthetic specifications" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Aesthetic specifications} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} library(ggplot2) knitr::opts_chunk$set(fig.dpi = 96) ``` This vignette summarises the various formats that grid drawing functions take. Most of this information is available scattered throughout the R documentation. This appendix brings it all together in one place. ## Colour Colours can be specified with: * A __name__, e.g., `"red"`. R has `r length(colours())` built-in named colours, which can be listed with `colours()`. The Stowers Institute provides a nice printable pdf that lists all colours: . * An __rgb specification__, with a string of the form `"#RRGGBB"` where each of the pairs `RR`, `GG`, `BB` consists of two hexadecimal digits giving a value in the range `00` to `FF` You can optionally make the colour transparent by using the form `"#RRGGBBAA"`. * An __NA__, for a completely transparent colour. * The [munsell](https://github.com/cwickham/munsell) package, by Charlotte Wickham, provides a wrapper around the colour system designed by Alfred Munsell. ## Line type {#sec:line-type-spec} Line types can be specified with: * An __integer__ or __name__: 0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodash, as shown below: ```{r} lty <- c("blank", "solid", "dashed", "dotted", "dotdash", "longdash","twodash") linetypes <- data.frame( y = seq_along(lty), lty = lty ) ggplot(linetypes, aes(0, y)) + geom_segment(aes(xend = 5, yend = y, linetype = lty)) + scale_linetype_identity() + geom_text(aes(label = lty), hjust = 0, nudge_y = 0.2) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ``` * The lengths of on/off stretches of line. This is done with a string containing 2, 4, 6, or 8 hexadecimal digits which give the lengths of consecutive lengths. For example, the string `"33"` specifies three units on followed by three off and `"3313"` specifies three units on followed by three off followed by one on and finally three off. The five standard dash-dot line types described above correspond to 44, 13, 1343, 73, and 2262. The `size` of a line is its width in mm. ## Shape {#sec:shape-spec} Shapes take four types of values: * An __integer__ in $[0, 25]$: ```{r} shapes <- data.frame( shape = c(0:19, 22, 21, 24, 23, 20), x = 0:24 %/% 5, y = -(0:24 %% 5) ) ggplot(shapes, aes(x, y)) + geom_point(aes(shape = shape), size = 5, fill = "red") + geom_text(aes(label = shape), hjust = 0, nudge_x = 0.15) + scale_shape_identity() + expand_limits(x = 4.1) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ``` * A __single character__, to use that character as a plotting symbol. * A `.` to draw the smallest rectangle that is visible, usualy 1 pixel. * An `NA`, to draw nothing. Note that shapes 21-24 have both stroke `colour` and a `fill`. The size of the filled part is controlled by `size`, the size of the stroke is controlled by `stroke`. Each is measured in mm, and the total size of the point is the sum of the two. Note that the size is constant along the diagonal in the following figure. ```{r} sizes <- expand.grid(size = (0:3) * 2, stroke = (0:3) * 2) ggplot(sizes, aes(size, stroke, size = size, stroke = stroke)) + geom_abline(slope = -1, intercept = 6, colour = "white", size = 6) + geom_point(shape = 21, fill = "red") + scale_size_identity() ``` ## Text ### Font size ### Font face There are only three fonts that are guaranteed to work everywhere: "sans" (the default), "serif", or "mono": ```{r} df <- data.frame(x = 1, y = 3:1, family = c("sans", "serif", "mono")) ggplot(df, aes(x, y)) + geom_text(aes(label = family, family = family)) ``` It's trickier to include a system font on a plot because text drawing is done differently by each graphics device (GD). There are five GDs in common use (`png()`, `pdf()`, on screen devices for Windows, Mac and Linux), so to have a font work everywhere you need to configure five devices in five different ways. Two packages simplify the quandary a bit: * `showtext` makes GD-independent plots by rendering all text as polygons. * `extrafont` converts fonts to a standard format that all devices can use. Both approaches have pros and cons, so you will to need to try both of them and see which works best for your needs. ### Family ### Justification Horizontal and vertical justification have the same parameterisation, either a string ("top", "middle", "bottom", "left", "center", "right") or a number between 0 and 1: * top = 1, middle = 0.5, bottom = 0 * left = 0, center = 0.5, right = 1 ```{r} just <- expand.grid(hjust = c(0, 0.5, 1), vjust = c(0, 0.5, 1)) just$label <- paste0(just$hjust, ", ", just$vjust) ggplot(just, aes(hjust, vjust)) + geom_point(colour = "grey70", size = 5) + geom_text(aes(label = label, hjust = hjust, vjust = vjust)) ``` Note that you can use numbers outside the range (0, 1), but it's not recommended. ggplot2/README.md0000644000177400001440000000741113010623761013303 0ustar murdochusers ggplot2 ============================================ [![Build Status](https://travis-ci.org/tidyverse/ggplot2.svg?branch=master)](https://travis-ci.org/tidyverse/ggplot2) [![Coverage Status](https://img.shields.io/codecov/c/github/tidyverse/ggplot2/master.svg)](https://codecov.io/github/tidyverse/ggplot2?branch=master) [![CRAN\_Status\_Badge](http://www.r-pkg.org/badges/version/ggplot2)](https://cran.r-project.org/package=ggplot2) Overview -------- ggplot2 is a system for declaratively creating graphics, based on [The Grammar of Graphics](http://amzn.to/2ef1eWp). You provide the data, tell ggplot2 how to map variables to aesthetics, what graphical primitives to use, and it takes care of the details. Installation ------------ ``` r # The easiest way to get ggplot2 is to install the whole tidyverse: install.packages("tidyverse") # Alternatively, install just ggplot2: install.packages("ggplot2") # Or the the development version from GitHub: # install.packages("devtools") devtools::install_github("tidyverse/ggplot2") ``` Usage ----- It's hard to succintly describe how ggplot2 works because it embodies a deep philosophy of visualisation. However, in most cases you start with `ggplot()`, supply a dataset and aesthetic mapping (with `aes()`). You then add on layers (like `geom_point()` or `geom_histogram()`), scales (like `scale_colour_brewer()`), faceting specifications (like `facet_wrap()`) and coordinate systems (like `coord_flip()`). ``` r library(ggplot2) ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point() ``` ![](README-example-1.png) Learning ggplot2 ---------------- If you are new to ggplot2 you are better off starting with a systematic introduction, rather than trying to learn from reading individual documentation pages. Currently, there are three good places to start: 1. The [data visualisation](http://r4ds.had.co.nz/data-visualisation.html) and [graphics forcommunication](http://r4ds.had.co.nz/graphics-for-communication.html) chapters in [R for data science](http://r4ds.had.co.nz). R for data science is designed to give you a comprehensive introduction to the [tidyverse](http://tidyverse.org), and these two chapters will you get up to speed with the essentials of ggplot2 as quickly as possible. 2. If you'd like to take an interactive online course, try [Data visualisation with ggplot2](https://www.datacamp.com/courses/data-visualization-with-ggplot2-1) by Rick Scavetta on datacamp. 3. If you want to dive into making common graphics as quickly as possible, I recommend [The R Graphics Cookbook](http://amzn.to/2dVfMfn) by Winston Chang. It provides a set of recipes to solve common graphics problems. A 2nd edition will is due out in 2017. If you've mastered the basics and want to learn more, read [ggplot2: Elegant Graphics for Data Analysis](http://amzn.to/2fncG50). It describes the theoretical underpinnings of ggplot2 and shows you how all the pieces fit together. This book helps you understand the theory that underpins ggplot2, and will help you create new types of graphic specifically tailored to your needs. The book is not available for free, but you can find the complete source for the book at . Getting help ------------ There are two main places to get help with ggplot2: 1. The [ggplot2 mailing list](https://groups.google.com/forum/?fromgroups#!forum/ggplot2) is a friendly place to ask any questions about ggplot2. You must be a member to post messages, but anyone can read the archived discussions. 2. [stackoverflow](so) is a great source of answers to common ggplot2 questions. It is also a great place to get help, once you have created a reproducible example that illustrates your problem. ggplot2/MD50000644000177400001440000005370313031552555012346 0ustar murdochusers80421572b12625f956e3edf607ea58d1 *DESCRIPTION 4641e94ec96f98fabc56ff9cc48be14b *LICENSE 72a2b956dfe5844fedf26fc59a5e1059 *NAMESPACE 9f5871a4fe5678136222b4c1cac9bd8f *NEWS.md 7171046778fbb6a06b96a48bb9c6cb75 *R/aaa-.r 41c9ba0c55c5b2dac5c2ba80a9e6f0f0 *R/aes-calculated.r a744d7b67886c9a66068cffb5e71699a *R/aes-colour-fill-alpha.r 8e1baf8ac5987592e1f5646d4c41569b *R/aes-group-order.r 53f129179804c8dbeb9a5fba52d5b056 *R/aes-linetype-size-shape.r 9b2ae79db47a3528738807199529ff3c *R/aes-position.r 5a22db2c2782b3f44651a3f84cd35481 *R/aes.r 25bb15e59d22f0776b6928b193da036e *R/annotation-custom.r 117a827bc40c7c6e002b843a194219a8 *R/annotation-logticks.r 4350257038de69c0d79b72d2217ec051 *R/annotation-map.r 2a72caec0b9aff72ce077df1e3de3401 *R/annotation-raster.r 361e5f3e3bab8aba9d12484842b2220d *R/annotation.r eb4a7f643fd1a9c47fb64ed576a10e87 *R/autoplot.r da780ad50af3e05ff9db94c09986e9a8 *R/axis-secondary.R 57939239ee7146de73a2aba6de11f5a0 *R/bench.r 75b3c0cbcdc8569a1c0950aa5d21482e *R/bin.R 392bc48426e5cc7ead1a305fbc9be5d3 *R/coord-.r 8ff9cf4958c614558c710c46d48cbb09 *R/coord-cartesian-.r 61bf85230648adf5a0e0c8d632dc92dd *R/coord-fixed.r df8b9d096865b986388b89931feb1226 *R/coord-flip.r 7366b8aaf87749d31444f649a8b572b6 *R/coord-map.r 3cd117fab4fb175c188202dc7078b951 *R/coord-munch.r 0bdd51a8975d4410c29697061f066fb4 *R/coord-polar.r e042de925de133ab9978221438997b4e *R/coord-quickmap.R 29d2067f711abf273f4819d600c25d5a *R/coord-transform.r a235479d31f2afb1a8fb0b15c275095b *R/data.R 60424a7a66288196af3093e3fd30c8ad *R/facet-.r a0b70e01c464b263e7d58ab73e64df56 *R/facet-grid-.r 1539a36fd3e5ddcb08b81adcd86ba965 *R/facet-null.r f3c2e3c3dfc6936eef2ef2718c03e2d4 *R/facet-wrap.r 1dc876bfe72707568d943358617e306e *R/fortify-lm.r 97b9d11d1105d13b7ccbf49f762e98e3 *R/fortify-map.r bb468dbfb06340d329fb0d79b02201a2 *R/fortify-multcomp.r a795cac7619299ea44aabf7fabeaa5b5 *R/fortify-spatial.r 8c1a1ac77480bb8d59ad041a6bc5f50d *R/fortify.r c82d27a9b9f2513fd9486ada20397640 *R/geom-.r 04cb3f7e10d83b022eba2cb77906c0cf *R/geom-abline.r 6fbb9fab05b04e28075fa0315871f27b *R/geom-bar.r 4abce7fdb6c87f2d8255f12710c3163d *R/geom-bin2d.r 4dd34fb7d2492d8aae4ca41d44671d00 *R/geom-blank.r c4a9d472e2bf2682d5020e954921ef7e *R/geom-boxplot.r d3691fb8a8cacad72449aeac3085ae3c *R/geom-col.r 765765703a05ee92f663bf7b7a7495eb *R/geom-contour.r 3fbe0e03444d6ac030d4a007a731c3b6 *R/geom-count.r 3505ee228499af84d0e284e0208ad4e5 *R/geom-crossbar.r 7c4cd4b338eea7bf1fb8ca1302d44586 *R/geom-curve.r 1db3037e9d7d4aff02c00dc2fe1699f4 *R/geom-defaults.r b29797f936ccac2c0ce4869354315091 *R/geom-density.r 6389193dc86762cadaad02a6a682cf05 *R/geom-density2d.r 8004028aee4c51a3d055cc8073ece181 *R/geom-dotplot.r 3bbf79cbeaccc53bc972d3319a516156 *R/geom-errorbar.r b8b5349b44d96f294fac78a355671ba6 *R/geom-errorbarh.r 8129ffb0edb8c565179efe069dfb1f26 *R/geom-freqpoly.r e13dee39a744c95d3d16902556007352 *R/geom-hex.r ba1cd567c6649ace8dc19804af1494df *R/geom-histogram.r ecfc67b8ccd284fac23b27874bd0e936 *R/geom-hline.r f6a52a3d46c3e2468f70adf22768001a *R/geom-jitter.r 1e701b7fca39e919d4d97e5b084c53c1 *R/geom-label.R 74cd669b84a5da6c9d86415879492601 *R/geom-linerange.r aaaf1ba1d85cc3eb058f9bd8dd4f09da *R/geom-map.r aecde3f39e244983b8706cfd58bd7f7e *R/geom-path.r 4d799401b32976dfcbbb45f5414789a6 *R/geom-point.r 4f8fca315a6bae9c1856e7f36f3b4c13 *R/geom-pointrange.r 5480f4749347b506fa931cb5a3b865a1 *R/geom-polygon.r 02db392a143d015be46c7dbca877448d *R/geom-quantile.r 4318136c00615ababd58b3ad9dd8e3a3 *R/geom-raster.r f5acd7b513a158d5a7115a82a69330ed *R/geom-rect.r 769ee61e4cb2fa53d78d231125684a8d *R/geom-ribbon.r fd2429a3e3ae66076b2bbbbaa8860e5b *R/geom-rug.r 42fd227eb2b32a4d922502c52f1effb2 *R/geom-segment.r f524621a61505402faef875c8639aa4d *R/geom-smooth.r 817f2fb2dcd63751f38418f98e989188 *R/geom-spoke.r e5362d67113f6fd7bddebeed14346066 *R/geom-text.r 6a67cb38076a5212cfbc465b1b7c4ef2 *R/geom-tile.r 827fceb88a85027bf156c9af9311669f *R/geom-violin.r a0ce9da0fa8dac5d5b3311513e15406c *R/geom-vline.r e648399f6192cc0f925180b41f6c6d01 *R/ggplot2.r 88e63c858972aba5e24fdff09ac4fb88 *R/ggproto.r abe3e869859c7f73fa4a9721df2ef29e *R/grob-absolute.r 57c5dee7337f17082fde9a43d071cc2c *R/grob-dotstack.r 95d44bd0d180dca5892db5674bec6362 *R/grob-null.r a432566834bd4321476e8c8e1a5993f6 *R/grouping.r f1e355b26ddb7e6b2b8e580ae9e8372c *R/guide-colorbar.r fd2197610f73f7df3b1f0fad77d46fbb *R/guide-legend.r d3ee693756d8b31cf70903905991a618 *R/guides-.r 10b34c424016b2ee09d70210f7a5cd5c *R/guides-axis.r 91319825178764869b02d5ed527637e8 *R/guides-grid.r 7959750b1fdc84a554988ca16a2fbbd3 *R/hexbin.R 3f5ac8c3ec652eccc65cbbf14918b135 *R/labeller.r 88e77bce46b26da3629469e6383d906f *R/labels.r a2d09e05122d77d032185afff0f10c5e *R/layer.r 3bee76fa566fea533ad4429d988b2846 *R/layout.R cb041a872c511f7508ccf9e0b7a2b68e *R/legend-draw.r fcb8b3d4b07b175826838b88e8f80e6d *R/limits.r b8fd2602d0286b7fa47889847357c404 *R/margins.R c347cf27c8ea43aad5e51d9be9db7eab *R/plot-build.r db44a395a397b96cfeb6f2fe438c16b1 *R/plot-construction.r 17a5687edb51a5d01f7cad17974916d7 *R/plot-last.r 3c3b0d16a57d76bb08a8ee5ea599963a *R/plot.r 7aff1851315fda3989a433a6ce551cd1 *R/position-.r 94e8b39fb07be177d0b19423224f5ffc *R/position-collide.r f3072c581a7c9b6932d30ab28c56535c *R/position-dodge.r 8d8c6f5432e9f61de2fe222922b93142 *R/position-identity.r 88c081f05771d686f2a2af1020d8bf8c *R/position-jitter.r 3a7d86d7fc3270baa85fbf276a5003e9 *R/position-jitterdodge.R 354314296e9708a975923aac6db1f480 *R/position-nudge.R bf5cf4d6514cb435eccb2b4e62656f6c *R/position-stack.r 693ab67459dc0cb0e4b7435a3e69dbfe *R/quick-plot.r 3b0a08e9a42ff183bda57179ce3ddad3 *R/range.r fe5929bb1247b8645cb03d54c14eb8d7 *R/save.r 65d8529295f1babd51c9e0252cda7b70 *R/scale-.r cc5a5b298b06451970ef1859582bf0f4 *R/scale-alpha.r 71410d9d620ea19af5961affeb9d7d79 *R/scale-brewer.r 7785edd56e2841cb77e927b6b89539bf *R/scale-continuous.r c7cbbb506ba1966703ae868f9291907a *R/scale-date.r 70871e4f1ce226c0cbe20e280f430fe1 *R/scale-discrete-.r c3e2d61778985b8d9f2f8cc60cf7e68e *R/scale-gradient.r ed8cf54545f3396657182ec8cfe4cd4c *R/scale-grey.r 6bbe7be8e96b787cc2502aa139ffcbbf *R/scale-hue.r bb12149220242c7e5f402f181ce919bd *R/scale-identity.r fa46729fb574c00adc57d8685e2e7bb4 *R/scale-linetype.r c9a163672157dd0ab59e8147bb928bed *R/scale-manual.r c30347d699c78a5c2c0808e90c7d2eb8 *R/scale-shape.r c9419762f11c701dfc3510be004883f5 *R/scale-size.r 28c4b4b85482c7d5cf59303562ba1dc6 *R/scale-type.R 9033369440f516d0cd7c1c2a80b8c2bf *R/scales-.r b02a94a2837d08c29b95f55b7d61504b *R/stat-.r ea9fd54ce1bda809ecc2ef5b3a6697ad *R/stat-bin.r 1635bcde69b4e9d6d87129bdf637262a *R/stat-bin2d.r 1df733e7ef7c92dc3830dc8575ee03b0 *R/stat-bindot.r a7e7c767f2f06f87e067a1754cc19a7e *R/stat-binhex.r e379850ef4fd6ab1c3358238bf667d0a *R/stat-boxplot.r a124ff852a4fd8a2bdf9cba235904654 *R/stat-contour.r a47e7c1e0e8cd125ddc403d3dcb4eb08 *R/stat-count.r 00a2bc6012bf166b8847fac2db06acd6 *R/stat-density-2d.r 60af67e571677450dccbc8f03d506f88 *R/stat-density.r 0f7bee01c4df60ee3920e53cfac864c3 *R/stat-ecdf.r 6efb3263a0f4a9b314864e929db9b5f1 *R/stat-ellipse.R 18a029945a4c3f158d1e1ccf7e5e7527 *R/stat-function.r e17c32034528eb1df308bd2aa8c1511f *R/stat-identity.r 4b44390bbfabf3128227ca8416273905 *R/stat-qq.r b9542dc7c675d1992487d0c49334b557 *R/stat-quantile.r 12924f87b366aa163300ee99f39c8dbf *R/stat-smooth-methods.r 8aeca4faeb291ce1700a053449eb50c4 *R/stat-smooth.r 68cde82be89cf853171bebd405755555 *R/stat-sum.r f50adf8c33ca45f41d2cc69a7450efbe *R/stat-summary-2d.r f5b6045a5814dd15cc858d6ac792686c *R/stat-summary-bin.R a7e0fd3364dd4842108043b76c7bc096 *R/stat-summary-hex.r 392c56db2c8b9b2a7eee86f78bfbc262 *R/stat-summary.r ead27b711540674f4165dc1640a725ba *R/stat-unique.r 2f0f62e77aa29c77b797937067887b41 *R/stat-ydensity.r c92420a879310b86c1bcbb1e6fb45425 *R/summary.r 951e981b94ea71edf1c78d9e38ddc6de *R/theme-current.R 2119521ebfded436037c1992fcd76243 *R/theme-defaults.r e03b71fec1335001df05f4da7d941f36 *R/theme-elements.r 66a0a906c695126852761f8a3bdd69f4 *R/theme.r 33a3e6f7f309e53b462dba734646f71c *R/translate-qplot-ggplot.r 81a2f1934f0f93e586108d1521e2abd7 *R/translate-qplot-lattice.r 0a3fe0985172319afe38df44af6a652d *R/utilities-break.r c27187f963d056888cde8428c0ca9530 *R/utilities-grid.r 2bed0f2b37a0e270092ffa31f971941f *R/utilities-help.r 3bef847b27dc1a7182eff846527f6fc6 *R/utilities-matrix.r 1752e4a9d0671ef2f511ff19da46f2ea *R/utilities-resolution.r e72a2689dc0d2076b7492a6ebd165b62 *R/utilities-table.r 8bfb75f3c09d816748c2de33c5858456 *R/utilities.r eeec75de61894ddc1238ba5c894879b2 *R/zxx.r 8727fae979ba198dd4960aa4d703d017 *R/zzz.r 5b63dae9880edf74ecf2075c350eb90a *README.md f6d204981c27bccc03b49baf117b1cf6 *build/partial.rdb 62b5a3a09eb3d7562b0d20e7f3808df2 *build/vignette.rds 7fd28ad1feab3e3c773313672cd1b3be *data/diamonds.rda 1c883c4bb873c21cd428435264c456d7 *data/economics.rda 3cc1cdb7f53ac95b7346683e44e225d1 *data/economics_long.rda 27720de2f50f4a1fbac825226021806e *data/faithfuld.rda cf670e82bef3beba32bb2b4197276036 *data/luv_colours.rda 507bdb348d1d5cf1f8a162a46055f1d7 *data/midwest.rda 0aa41f897a20f3f952c11335d73da1a2 *data/mpg.rda c6d2b711873dc702d39de601f683ebdd *data/msleep.rda e1ef68be302f256fe79e1e2833f5f50f *data/presidential.rda d419c85de9cb971b7ebec959a836f72c *data/seals.rda 2012af9687f6f5813b8aa6aa86773c67 *data/txhousing.rda 478b5d9f6c7d31a55ff4a26eab66578f *inst/CITATION 46cae52ecb13d7c4290be96f046b9f19 *inst/doc/extending-ggplot2.R a5c24ca25dc3ca0de9498de80fd597bd *inst/doc/extending-ggplot2.Rmd a47f667a1734ccfd97a3702c9fa4ae21 *inst/doc/extending-ggplot2.html fd4fffee04dfb833e03497c4701be1b4 *inst/doc/ggplot2-specs.R 4214125f454891075c8d8d34626a5fee *inst/doc/ggplot2-specs.Rmd 40bef156a5e34809c88baa682eb4203d *inst/doc/ggplot2-specs.html 3a4891ee5205fdb60d1f77cffddc4449 *man/absoluteGrob.Rd 5d0743f26243c5a4e351126fbacf8b35 *man/add_theme.Rd c8e80ae024224dbc22d6ec7f450fd144 *man/aes.Rd 469e0c466e1769a44afe59fbf2c26372 *man/aes_.Rd f548720cb6848b5ff5798c34e15ac25a *man/aes_all.Rd e57137f0a04f83b19dab8730c3e4d419 *man/aes_auto.Rd bc7ab2cfe38321c546ecac541be68b5b *man/aes_colour_fill_alpha.Rd 03132acf39b402efafe5d2da3f5105e5 *man/aes_group_order.Rd a7d2663e80f9fe065146783224a7476a *man/aes_linetype_size_shape.Rd 31e1b7d2f69f52fae691b7d1727794b0 *man/aes_position.Rd eeea5c0bcecd966b4fe246ffb8ee67cd *man/annotate.Rd 8ae0b55978d80b6abf7fc4b3fa9b2ccb *man/annotation_custom.Rd c20f9e1feab3cfbd1bd801240830d07e *man/annotation_logticks.Rd 7793921b576746feef439bf7fc289386 *man/annotation_map.Rd aaaf015bb9a6441e3a587193c6ac8d4d *man/annotation_raster.Rd 9636c600ed98750c7e956626f548bc56 *man/as.list.ggproto.Rd edd272f67cf12f20118ad84487a64d79 *man/as_labeller.Rd 97e49d70a759af264d1c7a381d60d66f *man/autoplot.Rd 0d84d6b72aa89d7e809299df2f3e4194 *man/benchplot.Rd 0fed209a0638570c0796d3d338a09804 *man/borders.Rd 092f046980ebbfc061dfd470870af704 *man/calc_element.Rd 08f05f58486c5c679282dbc432ddd579 *man/combine_vars.Rd 2e425ded6d286a39e8afa73d90dfd228 *man/continuous_scale.Rd 38161d9bff6c5e211baa319dfa63ebbb *man/coord_cartesian.Rd 74f240062ebac190b958abd1bfde6d9f *man/coord_fixed.Rd ebc470da0aee3d4bb9884b597125c9fd *man/coord_flip.Rd 6f40432e049729a250af82d20e4c289b *man/coord_map.Rd 52bb8fb6b493cc20e73b56311d81fa10 *man/coord_munch.Rd 54f7d458f5b2b989c6b9612334b676d3 *man/coord_polar.Rd 1bb9f2aac476e53ccdaf118cc58a1788 *man/coord_trans.Rd de984225a12a0e6899446df40c7fca92 *man/cut_interval.Rd ca99358afd54bcef9ac341bec3fddbfb *man/diamonds.Rd 92e56b536f214b212565a077abb5aea1 *man/discrete_scale.Rd 6f357267a85ffb21a5b0dfb3f9019c47 *man/draw_key.Rd dd7802707431de3bf1c5211a825744ac *man/economics.Rd 20b45652d093f5e938c923be9cd51c66 *man/element.Rd f7e2cb3de4b0af82c4b548b0d3f4323d *man/element_grob.Rd 35b9998fe7674d96947eb7a459848930 *man/expand_limits.Rd 2c007099216f2ce698c4b17f82169104 *man/facet_grid.Rd 4b9cd933f8a2f2cc9d9f20f97bc90861 *man/facet_null.Rd 63476632ba8d5db301e27f96a55aa72c *man/facet_wrap.Rd 11b01a8eab08062a36b40035d2b60129 *man/faithfuld.Rd 18e127afc96b9ca0908321f39ec6c30e *man/find_panel.Rd 2622101ca411f0ed8194db35d6abfa12 *man/fortify-multcomp.Rd b0291bac4a059870c75f94426efaa455 *man/fortify.Rd ddeec8c1cebbe37a2da3daf744abd683 *man/fortify.lm.Rd 00b377263dd6c356407b8da4234fde0c *man/fortify.map.Rd 84b0af73ea817681a2faa151fb0d4c8a *man/fortify.sp.Rd 4356fb34320e1f29b840208bb140dfb3 *man/geom_abline.Rd 50af04707d0ff21ad04afdf5a8cd9c67 *man/geom_bar.Rd c980c855abaeaf4aaacfa99d70f42481 *man/geom_bin2d.Rd e4c1fff0db7883f104ff0906b3363e12 *man/geom_blank.Rd 1c2aa3c228d88973c08d2e58f1683b53 *man/geom_boxplot.Rd 8a551c71c9b925b5283155b7f2fa4399 *man/geom_contour.Rd e05d3f458d733d18ba76e61f20bc1a2a *man/geom_count.Rd 6588efe1bfaa23d2459fc3240a14075e *man/geom_density.Rd 5d5bdbfde6507febdab62b8e38f96e55 *man/geom_density_2d.Rd f319f6989827561a987a2a3f8938d1c4 *man/geom_dotplot.Rd 76a8e6ed389fd7fb1ac3d2a474a2f552 *man/geom_errorbarh.Rd f9e7d378962cf25184322047f84a7972 *man/geom_hex.Rd 1f8791476b551456bef77c5367c92a14 *man/geom_histogram.Rd bd345709ca6d4349b2278acfc5e6e448 *man/geom_jitter.Rd 1b1f242c616d08e2bd9b26cc76ec2b85 *man/geom_linerange.Rd 03ffad487f4bf4c528a492b0d1da5d3d *man/geom_map.Rd 57c580b118dc98f0427239bb34394556 *man/geom_path.Rd 6ae6f41c7e3a95b18525a5be72f48b59 *man/geom_point.Rd de69d6ff7c83eecd31ddf25ef7dd2bcb *man/geom_polygon.Rd 219dafac0226eb7b91858701acc65953 *man/geom_qq.Rd c56ada65c782a0c3404c6f9ced7a61cc *man/geom_quantile.Rd ee1370157bc52eaf7cc7b8414fdd29b2 *man/geom_ribbon.Rd 25c4c0326b6366ba33e431959eec4618 *man/geom_rug.Rd dd0a5dc9c16fe25dec18af162d4518a0 *man/geom_segment.Rd a0a31d1d1910a0ad32081690924d2a53 *man/geom_smooth.Rd fcf3e52f4a71962192e9bf7858526fbf *man/geom_spoke.Rd 45733f135356e7a43b0aabb912fba317 *man/geom_text.Rd 8a2e066d3b640b08687bf453960df2ab *man/geom_tile.Rd e59d550c2450993c73a2ecfa07bd7333 *man/geom_violin.Rd e9b48e7649650d8243179899f13e7983 *man/gg-add.Rd 225ac18a5246eb30bc8146e5de371ec3 *man/gg_dep.Rd 5e7fdd3beb92a4fcc2ab81a67c8112b4 *man/ggplot.Rd a431834dd0250f4feb15e89a57255a1a *man/ggplot2-ggproto.Rd 2ba751f7d1a0f651385470536dddb875 *man/ggplot2-package.Rd a7bda8cc3ed50d0624148746f0b13074 *man/ggplotGrob.Rd bdbfda8fc34d17b1f2aa65cb96a20b82 *man/ggplot_build.Rd 63ff044447fa54045a6d27c8dff465b8 *man/ggplot_gtable.Rd 72e5788c0352f90d71919e24ce562fef *man/ggproto.Rd 00a923ce20b4cee56434da6f09c84759 *man/ggsave.Rd 5138f7394ef69cd2f6ed62ff57f64f74 *man/ggtheme.Rd 2616ce16a63dd84dade152b9b46f8417 *man/graphical-units.Rd 64ff1cd991bddd870e36e059c51aa39a *man/guide_colourbar.Rd f7e78d55528df8ee00e4b6acd6da8479 *man/guide_legend.Rd bcec06efa0152e558f40c371525287b8 *man/guides.Rd cfdfa371d949b50fabd72b6764c1c747 *man/hmisc.Rd 67a85fce145a585ee6dd586822f3df85 *man/is.Coord.Rd ca9af8ff561014502a52873dda435ac4 *man/is.facet.Rd e841282cbb2d2f1f49c442af4145ee73 *man/is.ggplot.Rd 3a7f8ffc7d9376c073f3a798f39717e0 *man/is.rel.Rd fc2101e4a9a925bd36ae7defc64c0152 *man/is.theme.Rd 961f4f4cafb84a8153ee12f6f78f9c72 *man/label_bquote.Rd a4918b9154ae3fc1f68f6f9755f573a4 *man/labeller.Rd 96098b6f46e9d10b39d6d8b8e9d195cb *man/labellers.Rd 57a133ef3637c529dbbd7dd496481efb *man/labs.Rd d0c16597c1434d6b73c0855508c3caad *man/last_plot.Rd 9057120d00228a1cad4e811433f2b5fc *man/layer.Rd a45a1b0388375e733fe18f57591bc42f *man/limits.Rd e79ef6afb27f698dc9f7e11517685d30 *man/lims.Rd 8f671a1914d397f998da4cbc4f75262a *man/luv_colours.Rd ba25f6f853fe1a301293418f3df51f07 *man/macros/aesthetics.Rd 43d03a144d08e76c90d73e027cf11715 *man/map_data.Rd 8c1ac81b7d0054b9508d190f1c72f2f9 *man/max_height.Rd 5b6d9231580c5154ce47dc412212c563 *man/mean_se.Rd b3ab80795ff3cb23eae3b2efa66af81a *man/midwest.Rd b28605f1630cc9a3a55012329d47eb9d *man/mpg.Rd 3fef6897c4d9ee4267479b45afc7e9eb *man/msleep.Rd c16f2583e895fb0386519eead7689acf *man/position_dodge.Rd e8e4ced621a04b943272311fcb8bb1a5 *man/position_identity.Rd 9607f63a5fcc1a4424e4a31f5b0c5d9b *man/position_jitter.Rd ecd2f5a712e9cc205f409d739a820943 *man/position_jitterdodge.Rd 8f0a04e0b9d1a41eff3de46e314a01fe *man/position_nudge.Rd a99ed396026e66a3729054b1d12a6638 *man/position_stack.Rd 0e62b3da0aa2f3f82a041692a5fd2fdc *man/presidential.Rd 55449b1e255bb1472b3940b8393f9997 *man/print.ggplot.Rd 0416303bd400be21bef25dd0b2d613f9 *man/print.ggproto.Rd 235b0d5a8d58fbc642655a67046db859 *man/qplot.Rd 44ea1c4c11bd29c78a191b64d71a2058 *man/reexports.Rd 151694a3c1eea15e72d9f551fc32e694 *man/remove_missing.Rd c80d1dc06ca242ba13b597e7ad8d91da *man/render_axes.Rd 7648bfa3e68f6f422c1dfc2d7597ee5d *man/render_strips.Rd 144accb58fe07610e7595f4576ef021b *man/resolution.Rd 94d2c13305637a3f2c81e3cfc872b0a2 *man/scale_alpha.Rd a040effc4e10b02972b5bd24e1590877 *man/scale_brewer.Rd 4c725af0405a9fe251e0145b41a86593 *man/scale_continuous.Rd 26362e001b70323d7dda1bfa2f8a8c52 *man/scale_date.Rd 1264de45563dc780dfc619d7f4143e5a *man/scale_discrete.Rd e2fbc7e467ad0e3b1d5f071918c6fc9c *man/scale_gradient.Rd afcb9e27bb02f0a5e7bca96af542c16a *man/scale_grey.Rd 1078c265af272dbbcf30b84ed0845d1c *man/scale_hue.Rd 93ad644b93ff5f3072ba562cea37ea25 *man/scale_identity.Rd 69bf492651a23486918e69ce86352b4f *man/scale_linetype.Rd a033020b26d2c4017e9db367eaac7997 *man/scale_manual.Rd c5b34071e585523f94bf95bcb6f1f618 *man/scale_shape.Rd d9aa370a08888360dc7d602df1d0c1b5 *man/scale_size.Rd 9e548ad58990a2255d41b26f6732de3f *man/seals.Rd 2bd61e0791c6813869775fe027003211 *man/sec_axis.Rd 953f55d7927dc808a6045494e86ca9ff *man/should_stop.Rd b2d198b987f3f3d37fb58bf60aed4f09 *man/stat_ecdf.Rd 56b819622fbce041031fe8e973a7f80a *man/stat_ellipse.Rd eb23136da43c4727e40176179265aca1 *man/stat_function.Rd 6ff2b66bbb6a43c98fbc84eba1dd3016 *man/stat_identity.Rd dcb5011bfe57ae104fd48837b0ca7dda *man/stat_summary.Rd 7debbbeb86428c5d8d72f939f45caae4 *man/stat_summary_2d.Rd e3d7af81ae8210fcc4c914fd18fdbf1a *man/stat_unique.Rd 1094b4123e20a5f272ff3adc9b4fb71b *man/summary.ggplot.Rd d59ed780ea0810ab2afbd2fdc723a3c6 *man/theme.Rd ef70e4e8d0908c5fafe9540c7314e342 *man/theme_get.Rd 700c3112f6e13f92b18d495e0af00255 *man/transform_position.Rd d720bf5784858433e83ba704fa6ea9fe *man/translate_qplot_ggplot.Rd 943f3b870a63fc63a9c80ea3bd7c0406 *man/translate_qplot_lattice.Rd acf11f873eaeed3d2020db3d33f5e95c *man/txhousing.Rd a1bff439f5ba9a73910b11632e938f50 *man/update_defaults.Rd ddd4581c800716d26d81ffcc4b9ee147 *man/update_labels.Rd 727a0e83208e72da3fcee036efbcc707 *man/waiver.Rd 228e86f4181d24ed2bd81fb5bbc1ed25 *man/wrap_dims.Rd 383cad5462bbfd4c96e49448bf5bfed5 *man/zeroGrob.Rd d61ade7569d3176888310444bed0e4ef *tests/testthat.R c5e766e860663cd1c2b0007b088a43dd *tests/testthat/Rplots.pdf 76b33d4c5897b19cd3f9deecb0abaa51 *tests/testthat/helper-plot-data.r 461f0fcb435bd455024afae489a1e211 *tests/testthat/test-add.R 1076ad0ef6acd3a78dd8db456f9bba04 *tests/testthat/test-aes-grouping.r ae2c17740d61430bc7c28953b49e61d2 *tests/testthat/test-aes-setting.r 56417865028605cba1c09e3a5f39663a *tests/testthat/test-aes.r 880254f7c7c356d17cf9de1e1c7a4ec5 *tests/testthat/test-annotate.r 15007da53259edd2b0ea0c8c852328d2 *tests/testthat/test-boxplot.r 04763961d870fb9a0dcf92e3bf89adde *tests/testthat/test-build.r a61803e15d2625dc599faa8f3f6b1fb2 *tests/testthat/test-coord-polar.r 6e70a3a306f7272bb7391af0af9cb84e *tests/testthat/test-coord-train.r daad32ca40517d97ef4f4d89a19af9c0 *tests/testthat/test-data.r e9b8b346b28946475feb137f3827ea31 *tests/testthat/test-dotplot.r 2b3c216d68ac31f27e027669bb17dbf6 *tests/testthat/test-empty-data.r 6728e5c8edd8d12a05308e12b82197b6 *tests/testthat/test-facet-.r 24943dc463a3147dbf5ef4387bbd305d *tests/testthat/test-facet-labels.r c462388ef1f8e65b4029361b51931532 *tests/testthat/test-facet-layout.r 7f3b5fcd30b44095b68991c37da71d6f *tests/testthat/test-facet-map.r 43509c86e6bc7d338c7c2d4fc494d5e1 *tests/testthat/test-facet-strips.r 24307e570b5c3a261fbac843622f6dfb *tests/testthat/test-fortify.r e6c13f5d5a1a3ad8159ae56719356c96 *tests/testthat/test-function-args.r a313873083761be05009614b1af7f85b *tests/testthat/test-geom-boxplot.R 30a99868232c5278af513e0d220f30bf *tests/testthat/test-geom-freqpoly.R da4f831a250b1f2921e9cef443ddd517 *tests/testthat/test-geom-hex.R 7d5ddcaf54c7b4cf75a4448edc954ccf *tests/testthat/test-geom-ribbon.R 3a8b464d19174e4eece703c99839174c *tests/testthat/test-geom-rule.R b7060e5ccf4c447b38e855310bfd140c *tests/testthat/test-geom-text.R ab3e947e4450a3a42d10b25d2fbffc98 *tests/testthat/test-geom-tile.R c59f1a565ca2c3eb0a4504de2eca64ec *tests/testthat/test-geom-violin.R f7de4f656b033dab01630f1ed918c7b5 *tests/testthat/test-ggsave.R 493eb5e788ec25e42e2b67c03ef074df *tests/testthat/test-grid-utils.R fe35756cf49c81c0016df276f7231310 *tests/testthat/test-guides.R 766c84d55d27324b0b30e251dcf14858 *tests/testthat/test-labels.r 3876e0fe8a2653c4e7ca42b70e0300aa *tests/testthat/test-layer.r c2b1f4b1d448df295563ae1ed9dc1886 *tests/testthat/test-munch.r 7d18911043f7a714758019078e938418 *tests/testthat/test-position-stack.R 972abcb47b4a68ac9f086af1c8198da9 *tests/testthat/test-qplot.r 99ee168c3f25007fca5e93c76453038c *tests/testthat/test-range.r d2f2d93cd9cfda4de1268614593e15f9 *tests/testthat/test-sanitise-dim.r 2ee3dd85a4c4bee9e143026769e0bc53 *tests/testthat/test-scale-date.R 96f11e5a569046c4133f8019a4bf453b *tests/testthat/test-scale-discrete.R 926a7d6e1dd028761c51e1926c605c82 *tests/testthat/test-scale-manual.r 11af33c3989010aec22c5c5ebb34108f *tests/testthat/test-scales-breaks-labels.r 2bb289dca8a4df61fb94dcc424e35b6e *tests/testthat/test-scales.r 86e0b22fd008b74243aa76ffc209dcea *tests/testthat/test-stat-bin.R 6d202b2200dd789edfc46aa1751f34d6 *tests/testthat/test-stat-bin2d.R 264a54ed95553c9d2bef6fa83a8245c9 *tests/testthat/test-stat-density.R 10744c4e51dd7cd19728e845f4171880 *tests/testthat/test-stat-density2d.R ad642a876a84a6d71acb68ccb701a9bb *tests/testthat/test-stat-hex.R 547fbe507cc42321b6257125ba33f1c3 *tests/testthat/test-stat-sum.R 078bb7203f95d2e0b961f494ab73a0d2 *tests/testthat/test-stats-function.r 1de1deca86597fc1b2dc9187c9b887b1 *tests/testthat/test-stats.r 02e1ecf45e2dcc1a786a9b9047350ded *tests/testthat/test-theme.r a4593abadd232ec41f81017ac93c2a95 *tests/testthat/test-utilities.r ac880a6aa04fc8644fed280c88b5d674 *vignettes/car.png a5c24ca25dc3ca0de9498de80fd597bd *vignettes/extending-ggplot2.Rmd 4214125f454891075c8d8d34626a5fee *vignettes/ggplot2-specs.Rmd d7381f8e67eed0e54419e6cae59868c9 *vignettes/releases/ggplot2-1.0.0.Rmd e0dfde769951004e797a6b779137162f *vignettes/releases/ggplot2-2.0.0.Rmd ec5ef98db8656ee6556953f737e91bb9 *vignettes/releases/ggplot2-2.1.0.Rmd 973eee0b51777ea2acf8093724aeb7ec *vignettes/releases/ggplot2-2.2.0.Rmd ggplot2/build/0000755000177400001440000000000013031512434013115 5ustar murdochusersggplot2/build/vignette.rds0000644000177400001440000000036513031512434015460 0ustar murdochusers‹uN»Â0 LIyJˆ—@Œüø$`aAˆ5jM‰Ô—šHÀÆ—SÜâ Z`ˆã»óÙwì0ÆjŒs‹Õ8¶|„¥¯_ð6kã?†«†È“‘?÷ý$ˆõÂÙ‡‰¢æ*WBÙ=X÷ŒFI˜.Aé3héÎr¯¬Ãªi®‡V#Klšíàä¡ôÛä ¾'©ÍmB=rp²Vå4͵kÕ*:–“ïàÈzµaÔ(”ýQ ‘m”°kQl”ChˆC)7Ê!4Ä¡ö6Ê!4„Àd¥zø¼‡Wl–.4E8õèòRl1TCN¿Y(“)¡fély>ËoZ^à+ëF[t£~ztë'¦]'(6XºÑݨŒÚbÔ.”ýq ‘4Û¥ÿséz»üæÉÓ&|zš'Ãj¹#¸©’U©„S¶À^xù2Ë V`Õ~ ã˜àö=‘U&ß‹väYB¾cî’2Vq}‡{ !¹dþ›‰,ËårY¶í‚Íÿ5§¼ûƒ²•óJáOÏ–^¾{ª^ž>”09‡tŠ1ÓÝÎípžY ®KÙе޴='ÈY¶~òþ퇧ÓÊtûA‘p òTëL*–ÇòˆdÈcQøûëpœª(—bÌ !/—â)cû©h‹4ã0ø>…ü´ š!Í ÔŒ;u§dÝ "½;BÞíH¦æÔ%Ø»ÝûìÞͰ3; Ê„÷ ßûþvf’¯f֙Ÿ%UßÚhæ—ôdj¾H‚*ªì—Pö"iú%gMé[4 !’&Q°F7¶Ö«HîD&òß!êË4óá.¾³殳P™ƒM;pò ,C‡Û³Å²±å#À[oMšÕçÁ³±%à2äåÄÌîÐjÑ)“í}àÈOÌ6ïš;ewø²ù¸ØÉ\OÕÀˆÁ3à d=Ws?…è â£"³XÕ¾?˜Ñ\×PÓÊ®xrrë±1ÕÇä– ŽåØÊ:ó+vÞYwÂà ‡Jf8¼ù¢‘‚ÈßÞ;d«ØD, \€¼Nƒ]>„üиÁºØTØÙ«1qX>¬Õ‹íâò¢`¯[Õb0:VsÂaÇ-…3ÝP¶Ð= y2|CŒL,œÆÓÇ[aE{Ë.Òø¥QžQá Èz;!òoGh?-Ç~âVY©ê̯V*Eåô$øœÜm´ ÙÃwx"±F@lÆ“'[o'ÑH„ _0n¨qæpµñlÒº²Ë¨á„Žå4Úë"p òR‚5ãv)f\jòòãôÝyÊ~YB¤´iŒ¡êOnösã;iÒ­ÈìT&â û ÷iûðc“ì÷ÔIÒR@ವPtüJÑÚ »P§jx¨Ýô“—cï¹¶[a 6=[¹Ã$öƒÀ'Í€Ƙ[¡^•Ñi´2¡´.—¶âAÖ“™Uw…úUŠ\Æ‘ÿxf×îPB#G'-Ö¨ãЕñLk|ì˜ac†Fhäc瀞YÙ'Ád{¡™ÁÍ oÝsKüW4¨¨ª>lngBuâD-_òÕya³¼U,Rï¡Èô,Œðd½‘y¿y]WtHIƒÛ àÈZ šj3;Êî*ð.ä»­WvÊî"ðdóõÏŽœªîRþsÀyÈóé÷Èç Œ“é‘…&´¤j# ÙJ§(êûȤsë^í|ÓçwËDhxò‰Ök*“p$S›Z6Í•,s=æ’?Ïܵ¯í|@ a§ænÙžçlíÞ˜xŽA~dÌ÷ zã["’œ±1=¸u× ¢þ9ì“+ž[¨æC¿-ê¾y[çØ;uÿí<´ð dóqå`XE"ÈœP:‚—ð°ÑÕ⎹#@±*¨¥Ÿjãe×…<Úzk¤ì:'!Ÿ4Ö‰K¤Ál{ÓÉo²-Ës¬µ¢]×nl,(-Äq ø²ùb˜òØ2 ØÆ±Eò¹Z0¶ô¬WËyš˜©Ž,Dgx ²Öé'5]¾ áñLmkϰa¦êz:Éb]Òb¾SÞ(ÒlzƒŸ!ݲޯíN@~`ÌöZ¨Fb¤ÃC«žT½rh‹Åª­K®Ñ€¢Hù"TŒP:œŸºõ×]™¸å·X#F·€!ku jGÙ個Û°+K[(ªúDŸB6ßí›`¬¦ÿUŸ6w|®_|E)R0Ež— 8„’#XSÅ,•ž’²•zð´Êþ‚„HiÓ¸ŒØš¥ÒqöG‘ˆéÎÜLv±šÿJœH² _‡]!ï½™íð¹C¨Þa×xaçÎgï<}Ú~r×Uk™ø¾€l¾Ã4mÕ–k¬úéªzY˜¶U-sŠ0½[nµeNIÙ^|%}“ ì¯Jˆ”6 ©Zh™s9Uí¸ C$ì…Ü«m”½»qÑÔ]xS>«X> 7¡f«/KÅàd½£ÂûÍ/ñ1PƒÚmàä¹m,fvIÙÍç!k-Ë©ùG²=݇|ߨ¦¸Oëó,Uó"&€Ï!?7fôØ]ìrýŸœ¥Pu};½9é|ï¶×O᯹;žeEçårH7ª w~›©ö`Þ-†ƒß›ð섪3NSƒnà±LíL«•Mš‘ðéßLÓ?:îÆ‡œž„¬·¨ÒÔ«ò_ÙaÛÜÔi—sÀK/¥Ó.cÀË/·ËYÞ ì°’µÃ¬¢Ï7¾+MÛóU͉¸MŸB6Ÿ< mOÆ-'´#~@Ÿ_"WzsÐæ\f×É V;fW¥lÇ ¥ïQö§$DJ›Æ j@`k³CüV„"µë™¨“%ì‡Ü¯íš5RzôØò¢Ë9öx§¾óM#[¨às×/âM”Üb•OGð‰Î•â0ð5ä×­×öëhSÂ7ߤ¯f”ýW"¥Mãj@`‹ÄFEv³PòÙL ‡âÚïœ;ЭQàYÈg[?ÐRvGç Ÿ3V):YtËáôl“/Ô.¢ŠÙ»ÆåÅbÉ€Ï!›{â·vÜ*ùÞt˜8/‹á°Ë=ðmË+ÓéáÀ.9º ßUe~ö@x rò×[síÛtüÀÝÝEŽÄk(Ûkõ<óŒ‘ð4äÓ­×|©äÃx†ºÔËœ²ØVAu#ã™úŽÄxFó6ƒÚ6+Õ‚´ÊžöÐAÙ_–)m·Q[ä¯ñ{«ŠÔîÀ2Íýµ®Æµ=õC£Dä0ðä#F=Ú®:âwzUQâ2 < 9…®„²; <Ù¼+™i85Zr|Ú?ŽV€|~$Û³Kî¶—UuÈŽ¿„ü¥1éÖ4s‘ïÂæîfvÝÐOH§:u.q•@£u5•¢ì†€cÍçÑ—šj‘OaƒâŽP'Õ¡‹8ž.B^lýÐuGR–G¥?fPöK"¥MC `С«_ m Hp. Z„FGëÅúð.bw‹î†“·Š9önÓ­ ÒZåsÊùbµP?»•À_T­e"ørr‘;^/©vOó¨IB´J+:’Z÷4 #ì…Ük¬ôwF<´šO·î¬òŽ´WÂû-ºw§q$8÷!kuW :.÷Ñt„FÞZ3ÞGÓ&wê+Û[¡Ý‰æËêÜî&JƒÀóÏ·× *S@±M¬µÛ¯ÞHÀ,ä¬q#eVqÛÚñk­¤:êkÀÈ ­õç$•}ùaúÃ-e¿(!RÚ4 ¶hÔ—b!($Íèšú=æÓV"r8y¤Í½?qž‡¬Õשu,”Ý(pò„±_ÈÖîÏø»B1H'TÕœNŸA~fÌô…gñDÁ¦UF š‰%Ú-¦š>+¹~@«¾ëÕ"¿¥°i+á?‡æ”·Ž¥Ž+Á0/‚TÝNÙfknXŠèîf8øÊžSø£Ï}äòå@\? }äMkËq«¿†ªZžE”a1Ñò\”µ‡NÇÔ<¾ževn#§jÿ2µ™¢|6ÝÀþ›Þ#Zs½‚í©ö–Djx²ÖÌ˜Ž fž²Ëç ϵ¾ÿ¡ì.ç!'pïSÕ‘¡ìïKˆÔjGfARDiOÛƒx*‘Ò¦±„ØG¦öÇ¢¨¾Šüg"ßå1¾ßÑ\í®íËßšz#ß8]^Þ-—m>À„Ýs°mÛe¦Áúp²ž…%º×ý Møä/ZßßPv÷+WŒUýÎÅ¢ðøòëÄæ»cÒÇ6Í2t{ÙTÏÕšf9*Ç£µ¦ fCe?,!R«‡‚ÇRéÛù²?.!RB¥ï[­Ôo’·8|+î˜ë÷ÿFU@ÙwHˆ¤i—ÇMéбÒÃ"ÖʤÓiÛeÁN%œ©¹ë,ìÉñbÂÍGÁ "GáSíÆº²ÕiG³E6.9V³¾D…~)U®Öz¹šfQv @IN{’EY¿”ÉtF§ïy L>Ò ï{œBèc8ÁŽª’§àIÈ)œ<|)ád½RþíníEÛÚ»‚+êøÊxˆÙ)àmÈ·«˜Õ‚íç=§RB²gNNjò ئ• ʾCB³•ŠS:´ˆÙ'!’a­<]ª/JD¾&¾»ÜwK\Šç[›.œ|ßÖœ¿A£¾É$ù4Ø+*¢…s7k6'ª¼;\cX§À¶¿N ón©byŽOßkË-9ì­»¶æ¨ï7…b|%é­ùĪ?ºÚUvòÊuü ”éÓÔ^Òýfýï­Í ¨ÌÏÌlooçÖ®Ù;öµ²l»Þ7¹°fg¶{{Æ)ìO¹Êfe1ïfoݹW’˜W\ßf¢)¡tS½$Mã ßÉmÓdÓQnxbµ| 9¡6p+N^‘Ê;43¡ÑP3œmò/5­‘mä.ãxV?²½¹Ãø»ð¶O*hŽ…Ý’Oð[…+º×ü¼Ew˜õ‰þ¨Úšï _ïК݉´f­‹U‰ß£Bß›±ü[åÁ粘̜•/®—Âÿw*E¾zÄÜ|¾ZÙáBi%Ì*ÙL‘ñÁ’P Ë’ßyà“ª¯I±¨ÈœºÇiàÈwTª˜•GÊnxr Ñô)»qà=ÈæÑôíYTW>œG„æ€_B6ŸõŸÃ»1na#Ôh?œä^ Ük„|í\UŸ &<ù\ õ™óÖà˜Îe’?&£Ï”Ý% Ñ195}¦ìð>dó8lý9öÌ)[ÅâŽò!`"òø ²^§¼ŸŠ ÖTd=;)þ$m¿ŽAÖZ;QÓÊ®x*S{6ªÕò“¨ú8J¯*jÈ>-öÃù}Ñ œ-[ÚS®/ k´Ëà"äÅ6º[? |¦«Êê öø²yøbððKÈæcÒ—ÜK~9ßç¥%¡ð‡2ù,,¯àðÛÏ\‰È•G±MkË®;òÑ“òLè§ÐÿŸfvm:$Ô¢=«;°œb³“S¯‘ÛÏ2IN~”ç`”}‡„H ¯èô-Õ.2(ò[ÍD‹’«øË}Ý3vÍð*WÑ‘)íVû9F ™òÄo—WßÙŸ*ÞÏ¢ Øþ‚WȆæ·a/¬Ubáç¿ŽÞæšŸŸ÷ ëWS¦&&oLdÙÄäìÄôoqÚbƒ|0~½÷û§o_--¿}Ó¤¿@Á~‘1x•¾QïaKVÞs¾Þ¿jIÊIÿæ`K"…ýn`“á?þû›è³C{þð‡÷Ï®afÒÕøËLôy7eHüÀoOŸuÿ®¡Ž:ðýî¯Þ¼[ùq>UÆ êUÖÛ˜ÁÀƒú±vl¦÷5~gv¦â9[V`Ï¥ÊÌÛðÿÞØ›¥Í÷3o¹Ý)ܹ5;k­Ý»qýî t)³«ÝÓ”ÝaS†þœ½ÏW ÇVÉzšwÐ3èV-Ó="¼¢}³u·Xt·ù“Æõ;]Sžým•Ç m¸"ï”Ùš[,L+¿’y ö½Èá>¡aq”û§PØÐ?)Ð œ6¥COõIذ˥Y+Êau¢*:wW‘fµdbu=æ¼z'ª€°r·¹rèÔB„Hšµ7!Œõî÷£5*!’:­¦¹v¯úçŠw¸÷d<< ùdbÇö|”]/p ò˜¹6¨Ú&eJ†¿©Ù¦´·ÕÛ¤lÛh›”}„-²Í Z£¦f›”á0EÛ¤ìzm´MÊþ”„í²MáÙ4¸iÙ¦p!Ûh›”z$4·Í]¥·Š•MKuRÓ› <ùXëí£ 6AxòñôíƒÒ ‘R·1­ìn}H6ÑNû@ µ&k]ôNJÕS5nE74uHWSÕ /6q<Ù\3• „²‘°a¹,5éQô´Ç@z`B;Ûd =ÍSBÒ¹ÏÆ[¬yôÀ$‡!·Þú`“µž¢S¶)¦ª‰ôÁ,G kùj&Ò½$…¬µ$af"”ýI ‘R7éq;L¤f!‚ð¶ÉDúaö°è5@Uóè‡I¦èaõÃ$ÛèaQöÇ%Ôö°šæÚÃÕ±Ö({öœÈD|fý-0£  ì;$DJ¨:_®¼{ó:Þšð¡ÍüÑL}S4Ó–2& Êjç~j¿í/ì”­’“V´62õˆ]ûªmª7!¹Šÿ±¹ }þˆÁ?ìecV¡JÔ*­fü%Ê$PÿÌ~§—†—ÝR¥ðW|=ÇZ+*‡S¶2ÑMx²Ö‘KίӴڈÆY ‘Òn½5´˜@³Ök|ZB™N>‘ kEÝ•* * ™¦®TBJ}h¿ØûQëBÔÖãFJ£õHסøtÆ)k<¼ù’nßþù.(ewxrÞB£ì§$DJ]‹mh®ÝR-î¤SæÌzµb}5etœ¯ól;¾|^ƒápòDë5؆ÖNBÖ‹h¤Á”ý ‘*}/âD¬5sÚóPÔõŒéˆdTëÐxÚÞ•²Ëi¡Ðí­€ Z`›ÜËMÔ€@3åÌçÒ‰Ë;™È+˜Œ‡òl’‰3Ít1>4g£:»ÝŠwèòŽ¿C?‡Å l)â(ãoÐÍåÂ| %|ù™qaÎNŠØT¡Ò¯–xü@êP™ä7 Fx²¹§<¾Á\cÑè©Re#Kç§òEË÷§Õ9Á‹pò¸1G6É^K½¼zPÎ3ödr,ͨ2È̘æÐ»ZSß)õÊ+ƒ áä!cVW&Ù{7°ŠÌ.oЫǯ­¼Í_Ðë³^Ê„]$¼ùŠ1á‰]ÕHÚ™ [ˆ¸k¨eä' k91†æ·È[`2CZ–Z˜w|lŠÞ3™f%Û*ûY~ç»l‡Ý§2§¡”hš…™h ¼T.d™½e—YÉ¥D«ù¼SÎÓ¢<²‰e4ýD)?-¬SOIAÇrëžU²§t2?5aÑ•£5ú¿üÄt–¹Õ ï–lþ»ÙÜÍ,»‘›Ë²›¹Y Í ÀŸ0¹HR¢¿/¬GÝ}X’íéivU™fÔY&©u™¨ÁxŠG­‚Ýj0ÉWƒˆ_˜šF—ºã3û“Å5¸vÔ)¯»^‰¿5Äï‘"ÄrY¶Á;Q5¸0Épë‡3Þ¹Æ QÌm· ¿²=7ök,ÕO Gx²Ö”©µ»j;‰jìÛ¥ʬ~&„ɹêÕ¯‘·ÀdªÇ“ì'á”·Bc(úQh«º¿õûy·8åª[õE;tõ¶7òQ¬øxÚ±ù#'| ùq>U8á‘ø° 7?œ~TËηU›Ýè1uŸê7 I˜œO5·gðúOž]™¢!ŠN7²ìVîv8|å§n‡CÖõðÇiëÁ™pò\âæÿ‰lÞÄ×þ-¨ý6QóŸ g|ë9f±MÇܰ¢EÄx>Põ+3ý°#4{Cþí­ø ­qŸZsÊÛN!4Êv=T eê t oA6Í¥Þ›ýmä-Ðlíä°1Ÿ?ÍDë%“Y;!Ϥ¾BWw­jà’ó‘§`9L„Û¦Xr0ºèË|Rû UlYþê“09Ïdt’:ÓšáˆîT™Ýß#ÂQÈZ{ë»vöÌPé¼1ÍO½-.óÏ@Œ0¹…uµü{È[`2ƒþ¥ú ‡¢ˆ_¡ûæ1^oûE$‹%û÷Aðd­µ]dg÷kÙl=(à›à…˜Poí²„³g‰ßø|âô Þÿ\ o@¾Ñ-ýGÈ[`2ZºÌ×P¾³¼aGÅò×Wñ¦•Ÿ¿*Ú[v‘¯?ò¨ EÂs=œõ¹žrIþ1Ø.C6á¬gsêé„9}â‰ápŒg¿V&ùO@Œ0¹Î)ËPiSŸ²¢NX9ìëý)ßõ‚©€Ž¶W¢ÑŸþSÐ$Lný§ã7ÊDþ2'ì€ÜaLäfãb½ÜàbåÞÐ=þç`KxrrÁ\{W á,/°ý Æ9¢ìþE¢ö­ÞÏü 4šÀÝÆ‹©û“UªÔŽoíÙ[£bÿËtª nËñ_¢Ôµk€»ÍÇLéü«LtXM`C䔤â{îž)rü×™h­‘ðä$Ã(ÆDo¤ìº§!ké‹É6æ`õ¿†nšE–;ÂÖCϰqHU[ˆÓ8p²¹›¥~öèß ^þMÆt h]TZâ6<Y«Õ´–²ëŽCÖÚ,VÓZÊî ð,dsæR¤µt(\BÍxm‡G3&2š•+Ç„$Žç€O ?I$ø·P\f (qJÜÃß:R?dù癨£%<ùxëÕ—²ëžÈÔî··Z}ÿõO8yÄX%®f±ÊNoÃD/+…sæ[÷ÜS$ûïP£„—!ëœm{Tÿ%A"”Þ…œBHzÊn xr!é…¶ékš&’þÉ盓gYô™á?KÿïÿÏÇÿ×#ñymЍýÄÏòÌKgͳ¼™gtZ\÷gÞFG×釙·v4Pú3þ¦åÙ3o 3ÑÄrÆßñÃ<'¦¸ßÓ—šLT¿z«¥cùƯ\Ù£Q»´ˆ~÷ñ«·S“7šê´¥ÄŸÇ<¡Ð›Âg¯<|Fºüvé5·â$Š}‡{!¿Þ ‚Š??3C;÷öZÅs¿ÍœëmÌÀ~&oüæ×Ô{ü:šUÖÿ8¾‚üJ· GI?daK%>©_âSè] µùSX&·üúó›_³f¥CI¯C¾nÚ°Sͨ†ßGëI´êCõzÄwŒÒAùÉÅd|ßúõ³ιû–D =R¯!'Ê?¾Ž¤S“òÓwúu3¼>}·üvå«÷+o^'Sƒ©Ä!¾>¦P„MÓϯ]õpXÔÃÖ ’¨‚Eõ*ˆ–+âK?Š8€«‰ô‡¡Çï$Sî¹Ï/7ÃŒãK<ƒR¾„üÒ¸½‡E{¿²œrè¾—í„Úü»ËlÒæ¥…øZ¸ˆ’Jàî)%G¼a¢+¿…Y«¦S­«¦ÏzSto5IÛDòc¨-ó´ÿ¿¬ö¹¹§ý¥º;zÚeám׫é¿»-©a¦™vÚ=õ~[@½ÉuõXSăZÓ×}ûŠgWÂyu\mŸÿ…œø«¶§ï„\dÏí2_·,°µ湟v6ìòì<+¸¬ìÌ.8ýb³fâ{zîå7¯^=}ÝlKU6Ó&·B’6Ó¿ûËóÄçæfúĨ‰œòláûnŸfæÔš×$D­ëéíÛ/\d_mË·#Ý+¸y¾¹ÅópÊì-¯ßkQýzÙðg:&"~V×Ñ”€pò‚q)´žÌ}(!’¦Giê:Çë‡Oß>nÂK<ìußïŽPWÓ\ÅÆJÓlB>š~«PöÃ"µ½U¨ãoè…¬U=Ms­m“6Í÷p²^}5 eLB¤„š¥_—ü¨Ü.‡Ð‡P?=ºõ£Ø.‡Ð‡2»–ÒÒnÊþ¸„HI™‹håféBSt¥l.b”ìj¯¹ˆVÉšËÉ/l+(Y:¾=[ óÙ8b®ÈR~¿ñäs 6Nf5Í÷Afé7e^B$ÍFêù\:û>Í·ÏkšÕr¯>äM…:S¡“ü ìõ‡—/³Ñ ñÙ:ENà_ˆ½Š¸ïËi€÷ ß3¦¿Èv…up ¡gê;Y–Ë岬lå¼Rø‹gK/ß=Íò8U¹¢N¨ T®%õRÈ/-B^4.Å éMÛs‚œeS€÷o?ß_Sù•³vó:EÄ)Îs+P õÒF ŸC~n\š»ì;m+•c»ïê°ƒpT£ig{ öí¤TXy ¢ïtHˆ¤97¥sF-I“¦™ÿÒ ãV$Gþ\7pò 9Nª¿ñÚÐ;›GŠ®­õ2°ô„/×iP>¼ù–‘ج>ZÊï#¡%à2äåÄÌ.ö¢ewøò“³¹%DÙÝ>…üT«vÕ-‹‡´_½?®@^I\!:C…ø¨Èì¬ê¾?˜IvÙ)F#ðÇ£“›(Æj„|ú%¹yâ±[YgüøåºvtOL£DºXÇ„fŽÃ{‡lÕ›þl¸YkõV½Á.BÖ[­Ýõ[6¥q+›8,Ÿ@ÖêÅvqyQ°×­j1˜ÎRØ]‡n¯–BO‘bYRÈ` ‰oˆ‘ID BCVÕò‡¾€üÂ|ÎC{(9±TõæW+•¢òz|ͦ<žH¬›qà$äÉÖe7 ¼ù‚qC3‡«g“Ö•Ý(2 j&§Ñ^K—¬™˜—´DNÙ>†ü8}wž²_–)m’¡Nnösã;iN®ÈŒ4¶Ø¹O‡g4Ö¸‚ð~3Š?Máý×Ä+0;aê”C µ›~òrì=×v‹? àÙÊ&±>l> 0Æ¢Û2ñýÄ1:‰V&”VgÒV¼1d-0™YuWX1¡_¥Èåò?•Ùµ-ÐÈÑI+7ªÃ†,¯%>v̰q †FhäcïŽÐ™•}üÀC*ùbeˆ‚'Px"ú *ªêD„‡O2µi£!ñ ¡:q¢–/ù꼇°E§ÞC‘éi(áÈz#ó~óº®è`Š·À;ï´~fGÙ]Þ…œÜÊ^¬²Sv÷ ›/îv(G÷ üç€óçÓï‘å‹ÉõȇBZRµ‘qdO(mŸ'Ô!÷ÕŸýPí–‰Ð@¦îÑdvŸk•¦ŽK8’©yn†Ms…‡œwÉŸgî] ÊFo¸¸[¶çQ FÝÞ˜xŽA~dÌ÷ zã["’œ±1=¸uzΗ÷ÏaŸ\ñÜB5úmQ÷ÍÛ:ÇÞ©ûog¡}„O ›+™r8§sÈœP:€•ð°ÑÕ⎹#ÀÈZú©6nPv}@1Mm½5RvÀ“OëD05 ¸ey|¯k76”Çâ8|Ù|1LylaÐXm[Î#{ÂäÇ–ñº€êÈBt€Ç kRÓåóÏÔù fª®·¡“,Ö%-æ;å"ͦ£ $ÊA¬‰å àÈŒÙ^ ÕHŒt`huÀ³ƒªWf<¼O´.¹FŠ"å ¨¡t ;!u믻2qËo±GŒnBÖêÔ4޲Ë!/·aW–¶PTõ‰8<>…l¾Û7ê“ÐÐâ]£¥HÁyNBq&3MßëmÕR騔­D!íÁƒ²¾ !RÚ4¤Éºá¶ßRi8¤ÈŽ&¯ÝÀÃë°Ë€Ý.Vó_‰óJVáë°+ä½7³>wÕ;ìÚ/ìÜùŒ"à'Ý)dîºj-ÿ£ÀÍw˜¦­ÚrU?{U/KíQ U˼E œ†<Ýz˼(eÛäUÌ´L‚²¿*!RÚ4¤Àä-´Ìƒ¹œªvLÁ {!÷jeoãn\4u¯…xc˧á&ÔlõeI¢8”ä„ç—‡ø¨Aí6pò\ëg—”Ý p²Ö²œšDÙMïC¾olSܧõùN–ªy“ÀçÍ>v×»\?Dçg#g)T]ߘ%ý*ê¶×O᯹;žeEçårHý³áÎo3ÕÌ»Åpð[`ž]˜PuÆ©ïJZ­lÒØ!Ÿí0lZ:îÆ‡œž„¬·¨ÒÔ«âÿ-°›:írx ò¥tÚe xòeãv9Ë;V²v¢Çà JÅ¢Éc`{Êî‰Ûð)dóÉÓÉÐÖùdÜrB;âç÷ù%bÕ¡÷*´ùjf×–w«³))Û1Ècé{D”ý) ‘Ò¦!ÇMjcvˆ_?P¤Fk1ÝÀ~Èý:ÔÄí½Ý¾¢ú!"rxò‘Ä:ÀCüj†jïG\F§!ŸNЈbz?Êî(ð ä3ÆÚ;Óp ¡äø´yћߞ]r·°\©ªëDvø%ä/I¶Ø¶åÑ£:9ƒ-9Ø\.³ëòOB:Õ©s(˜¨œój*EÙ Ç ›÷Ë—šj‘ïÃéXqG¨“êÐEOej+£\^lýÐ%V§)ÛG¥?fPöK"¥Mc5 °5CW¿tUN‘àõL4hÕóÝ—úŠî†“·Š9önÓ­ Ò™Hòr¾X-ÔÏBE%ðUk™È¾ÈÔΕ'ÔAu¼^Rížn & Å…w­›ÕjÝÓ ha/d­…¢Ý5Œxh5ŸNq[åiîÍû-:Ç­±ÅLœû€‹™Ú}è¶:.³h:B#ïN­gÑt„É­=ÁÊöVhw¢ù²:·…ˆÒ ð<äóíuˆÊð*d­ÕcõFšf!géh8£Þ¶vüZ+©ŽúDçpòBëGýë’Ê>„ü0ýá–²_”)m7Q[4êKwë Ò&}7Ð|ÔoŒD¢1m%"Ç#GÚÜû—qàyÈZ}ZÇBÙfê‡*F3š»ô»Ï gkç1ý]Wû¤•sU5'†“ÀgŸ3}áY|C*شʸ’H3#q'±D«tâßg%×hµ½Zä§Þ6íb%ü‡bVy)ò6L•0¹k‰/‚Œ¿TaãYG~ |eÏ)üÑç>rùr ®3„>ò¦µå¸U_kP-Ï”áN¢å¹(k?ì„; yÀ1ËìÜFNÕþ¥Hr€dûoz.uÍõ ¶§Ú[©Yà=ÈZ'üc:‚˜CÊ. œƒ<×úþ‡²»œ‡œÀ=UG†²¿/!R«™[’"6y¨#-‚²_)mR°¢:2¦§\”tBò³Óî¢(ûûjOêÍh,¡¶È…¡(»ŠÌg¢ž‘ÐÜ…9ظ0ï(/Ì‘Aàä¡ä: ?¢2ƒ<ÖúÎä1¾H(â阆<ã=>£‹Ey»Xô£¥î뱯ÚÁ½ÓÀûSX7{ 3"lãºe¿ ¡öºYÓ\ûVk·dšä-Ö,–3¦½ŠQPö"iZlã‰e:îâ°„H†µ²ô$tðÄVV¥h•é0Q8‹!÷É¢Ûá~öÿQŸ¤å-ŸN®(/Ö=EƒJÇa1žÙV~³N::’.³©údlšŽÔ4/GtÊ]µ,ÏÀÿÙnÙ°,³µb\öÙºS,Ö7ê,±KgÛ+[³ek\.“‚ÍËgd Æ¢ø…ÓŠê“¿Eà¿H°ëÙ'¢ìæ€+WZ?Rv7/ ›ï.*÷/”ý—"™Ë8‘Xñlß.çm29Ú ý΀ŽQ«ÒüúJh4)kšëÀjØæ=§R¿ò½§>õhãÐDÙwHh64ÅùÝ}KÒ ·JüHû€Ç k]Ÿëh¶¤\]DcDB¤´[íK(Œ@3å9ˆß&òl0ˆóCtWûm«ô~x÷ôí«¥å·ošSz‘Zÿª}£¿ñ»ß\¦¯ú‘ðöq]ÉìÙ¹£e3þßßDŸ¾ÆúÛßÓgÝ¿k¨í×XÔ7UFßùž¾ªª6RJFÓlcÓ׳ãV-Óa–Ðç*DÞáº[,ºÛ ‘ k¥C9Â_'ª¢swiVK&V×cÖ:Q„âQÙnsåЩ… ž¶S¬…¸©ÂO´F%DR§Õ4×îU?ð\ñ¸ÀžŒ‡€'!ŸL,ãØž²ëŽA3×UÛ¤ìOIØp95Û”ßpmƒmR¶m´MʾGÂÙæŽ­Q S³MÊp˜¢mRv½À6Ú&eJÂvÙ¦ðl\‹´lS¸„m´MJ=šÛæ®\iYPuNÓ“ †<Üzóè‚I"l–¼–yP:.!Rêæ!?¡ÜóL¢æ!?`¼yÚðÜjEÕ>ºaâQ»!]EU³¡ãx²¹bj½©}BB¤„JßÃõÑùU³ áÓÅîúóO£  ì;$DJ¨:_®¼{ó:Þšð¡å³±L}m,“DXsåj‘iŒÕ“: úÖ }k0SwâõÅ·ó1kðâÖ«æúòùë‹ÍؘUÖ+èÀJ«Í^£LÍŽå4¾·«þêø›è¯ÔɰZ ìÁ5­MN«ä– tßö§>eÙÎô4»Ê>ÒÔ­,»q~Ú©ÿ¤\†¯P„Ò)]Ã2-„´êL¦Ôyý\“»ì¡ÞÆo‘·ÀdvÆ–'ù3”y~ƒµNüŠ|–‡ŒžÌŒN‹¯íàòä­ÚîÚáW.É;°'GPÌŸ<5Y;×ÎÏ*ÔN¨Æ.Ç|R„§ › :Õ Šxö^ÇV>€Ô‡4ÞÔ øCúa¢ÕæGÈ[`2F3=ÉÞxML":À-™2߃#á4äic¾—÷6lDuå§®çndYøÓê­ü0$”bRë¹.{÷@WíOV©R1#öŒxb[§ç(û õý‘f§`•éü,mçlØÚIèÜQ¿ØöÝ´U·V3‘CH(=šÆÄ<¢ìº'!§„oŠI8Y˵ßUý£!ñÉÚpËV‘:Š;¡ª+Dêð:äë‰Õ Í/lй£¥T?Ï´Õv)û µmWaÎ)þûŠÑ)z³©}v˜>ÃÁ‰#?2àñ:×´ñª4–æ‰úш™’Už©a9Q»ßÒß>L{ñ÷µÚ óåçVÎ7¨Hö"{n—m^£áÛs?ílØåÙyVpYÙ ˜] P&;lÓŠ OؽüæÕ«§¯ãŽˆÔän¡hš„δ,ýõØ_ž$>7?Óǫ̀QÜOüM{Ñ,ßÓÓ0fµ§tyS$ѾU½~ké"ûªh[¾i_ÁÍósû¦U«öúÃË—Ù(Пøºz×_žˆ ·[±ÓHØäŽ¥f¾`õ§ìBz·°aOdY.—Ë2·ÛËÑ£DU¯VùãÚ§ÊÅéE8 È_g‘ÕèÑi“=œýM«BoøÜ˜“>‹žõ¹‘»­^Š>0'\„¼h\Š…z)èÜØ7DïzH¯ö©U¬lÖu+œeåiÝ‘Ç9U/C?x6Ù$Ò,Ãsñ‹¢œÿ–剟#²Œ?»RÿQ eOÅ[R/2[¾2hXšƤx»!5ºº®¾¸+G ´®wŽåqy lX-Òíe_gÿî:N³îp´ Óé󮽎~"yµ=‚"&×&¤¶Ò­™ÚÆ83UßÚˆ;e$ß7IFM•ʾCB$Mgæ²)ú#"iÒéÈ4¿GÙ ûU$w¬Õ‹íç/¢²d™Pp“è‰<÷·+D´ðÃy?}¸V´·ì"β¨–Gò»š…ó×uùn?®Vªúó«•JQyŸÑŒé´FÉ5b3œ„<Ùz#ne.ÔѰ¡Æ)ì ½Œa“Ö•Ýh­5“Óh¯‹À%ÈZ[U15sC¬%S¶!?Nß§ì—%DJ›†eÂpr³ÂpÚ­Èl, ñ„MÂ*úðc Œî½§N’þxtÁñ+ô& Þ/òg¦=þÖ|ø©g+w˜Ä~ø²ù0Àsy _9t‚th³ÙËni)Þid-0™YuWX1ê/?Aþg2»¶.9:i±IuØ8]9“i3lœ¡‰·Šµ}ì]5p³áõÆ@Ø…f‹ÜÌÐðèy!ÄÒsUu"ÂÃÀ'ÍíìB¨NÑKI¾ä«ck.OÑ2Õ#ÈCÁ/@Ö™÷›×uEGm4¸ÝÞœÜ~aìÌŽ²» ¼ Yk»PMÙ)»‹À{õ¶åßv(Çe£üç2õG5æ2»#§Õ#Ÿ…2 L¦G>šÐ’ªœCö„Ò9€„:ä>2éܺW;©óùÝ2ž€¬u@MSÏI8’©MÅ ›æJ–¹sùKwîÚ×v>ìš·i¿r×cC:½1ñ>‚üȘïôÆ9¶D$9c?b¼F‘§¼ êŸÃ>¹â¹…j>ôۢ5=3¡ì¿1háÈæãÊA¦|ùý<2'”“%£xçI!•÷‰!°_9Ž_@6ßaš¶jË5VýlU½,µ»U-s Š@8 yºõ–yYÊö ä+é›ÞЪ!RÚ4¤Šo¡eÌåTµã ‘°7S X¥i”½»qÑÔ½ö «X> 7¡f«/KÅàä)í:Œ›_âc µÛÀ9Ès­Ÿ]Rv3™ú{§3Íe95ÿè ™ð>äûÆ65À}ZŸïd©š1y|Ùü0ócw=°ËRDðlä,…ªëÛAèÍIçëx·½î| ÍÝñ,+:ß(—ãj¤C~œ˜+>(n"LxvaBÕ§³1Ý@¼y”ÆôOºÌœà%+:îÆG"< YoQ¥©W…ë7uÚåðäKé´Ëð2äËÆír–w;¬dí0Šà@”ŠE“ÇÀöbCÚì×bSÀ§Í'O'£÷¤B^üÁ:¢Ï/E«½Ò\»ÙS­rÌ®HÙŠéÓXúeJ†ˆÆiÑÈ¡¶Æ1ÛØ}E¬ánXv×]¬†KX»ï_e.<5\uR,<ù ÝÀä’¶ó×øÞÔœð“žÔ d0®?ª­ÁºüsÈžX?¬u‚¨ügà…ü_[ßSvÿø;È¿3¶¡Ô&8ôP;ò jWDé/ÿäÿØÚ9&+wÆÖ1_s?)o=\‡Ážƒ|.ý>貘ÌÖÃKÆV¢c Õ2ù¢ÅfoÑBÂŽ[Á㢚?¼ã‡»?|I‹üš=žˆ¾J£õgQ BéÅ(ÃM2¢*8F ˜õ .oè:Õ1ø&È­ªÁ3R¶f'lŒ²¿(!RÚ4n¡¶f >įÙ*R£‰|7°r¿µ¦#¤ÆKÓDä0ðä#‰ ~‡ø=MÕѸŒOC>ÝúѲ; §Ïkï›’^”ýÆæ Ça÷hy#º°¢¼jL,ÇO ëÓhêµèÜ~¹…&4:¿¬Önw"þ¥;õ†í¶˜ÍÅíÜ–[ë5ÿ$zÐM¬àäÝR…~æ¯ ø÷U›“È_@6ßø2º¼€"ðQ8Øv©$áˆGGŸŠV%÷«¡GDÛw¸@S² Žþ5®@Rù-Ká*ö²³îä­r:!g}ÝöBGDu¬¾V÷2»ÎC·z¬¾-e+ŒM{¤ìÏJˆ”69Ô€ÀÖŒÕ}õŠüh¼x$³çmOÃMÆ»4ÛØÛÃdwG_ŽâŒxvQ<á­ZÉóÈžpòŠq[DÓ¤ÂNm„£`#ÓŠÜî£Ñ G ´Þ ç¥l¥kti«?eRB¤´iH›ª¸¾ï¬wT ²ˆJ'lòpˆfAŽoÛÎÆf`hkY<å ÈìØ<ʘî6½¦1T5"sÈ ³Ö› ewxòyãV¨¯:O«ÎZˆÉðd­ÓµjþÒ‚¤ÒWÚŽ e?#!RÚ4–P[µÂHÑΩ=ÎDc¡ù cW£³¤~Õ˜ˆÉ|?V‰‹ˆ†â #ew˜Ü ãLÃ]ã’ã󮟟ІbÏ.¹[¸” ªëDvø%dó…œÃÛ¶ê÷˜O[‰Èqàd­}©{â2<Y«¯SëX(»Qàä c¾­E]ñwð”îǨª91œÌÔ£OFhÈô…gñkgÁ&YšFç£È£%ºc@q½|Vrý€N„¬W‹xزX ÿ¡¸j©|ˆB 8š`ðÑülGXÝNÙŽNlF¿ÂÁWöœÂ}î#—/µó»kö¦µåг$t’Wµ<ÒAËsQÖÒ‘Ëò|É>ËìÜFNÕþ¥c¦òetûo}fÍõ ¶§Ú[©Yà=ÈZq¼b:‚˜û”]8y®õýew 89haªŽ e_B¤V;2+’"&÷à†²AÙ/Hˆ”6W¨-:/D—°¢Ç£ù½ÎD¾Ëk|ßì¼Ð¡Æ¥Þ>ÿÙ®Lô|y·\¶ù8öÒÁ¶m—U+÷5²%\‚¬·DÕ¬R?ç­ÄX×ç ê’p8“ü#–1]Ϩ؛º¢$ðˆå!‰.Q8< 9¹ë¢Ÿó^â¾sx²VlõÆ^…œ@,Õq²ÏJˆÔêqᵤš× km›uÈ”}NB¤´i|…Øšq¡“Þ¢RdöƒLÔ[šGõndt¿h—7êGEkOjZád$œJô–æÊÞæÃJŸ†¹ÛJ«n­Öó 5 “{¡KYÁ(û ‘*}ßj-¦I“¼ÅÈóÖX¹ªà-,C ’¦ušÒy—‰6"™NŽßG—?ù<’_êÈG· x´|¬T8ûi­Ê}-z‹|¯À)Wݪ_‹d©¼ßð-K˜ÜäøáJÀ¶¿jßöÙ: ÷«¥’åípÿ6, Íö§êW=²üŽÈ¦SÞ°•,>€7ar«®÷É]"R¢{›Ž¶ (¾Õ]ÿÞ ÉN°ŠëPL §\p¶œBXââŽr#ü¤ ¥£é ™ùÀjÁöóžS©‡;Û£Ò”ãÚkè?‚q 43ô¸ÁtøÝ5TäùãL4¤ž†¬uŒ‡ó;eZmD㬄Hi·ÞO 8“Q¢çÔ/Ým ¿š^µB ›Q'ö~žgû·\À©Þ°›ñü€1Øt¼£ãµSTïP~Š&÷¬ìKÞÝÍÞ¦­!Ç»$„åɇã/‘œÆŠntµÌg~‘ެ†£@íÁ†’lº~ùOµD?C)“»ËÞ½¶£sÖwÅ«ŸÝ‰M*»5ç“Äæ0ð8d­ÈjóIÊ®x²V¨û]•p³¶ü ZŠˆÂêVèºh9ˆ¶üe¾U ýu_yÐ"Â#À/ ›»Èïle}ú9tˆ°r§‘>5 <½ÊÑÈ¡:hµ£ÀqÈã *WÌÚ9e×< YkpPÓiÊîðäsƪq™ïnQ*¹ô2Z9KVä—Ù¦» ªzL$ðdóí»qý4: ”·Šùj‘¿Y»®´íPê_dLoï&Ùa› À+SX€ût™ð*dó8õçd(ÿ,ðä6,…}„>LÆñzMŽWänaúÃìOJ¬»#ÜÚ„ïU´<ºÂ0îe7¼Úþµj™~‰rŠÇׯezu#w›]¡U©Æ2Lmó×çè7N4Ùçt¶wM8̳¯ñ Ë4 ·Êyå^ÆB1¥í$Ã"}‰=—ýÝßé(Ð~äGÇ5§jÖPÂäB-¼Ü¥TÜA©k•DgêíˆHþrì (X³wø”@½Dy”‚09y)¬å½ ¥^íɆ½K |‘Á‹ÞIÔ]ý¨.A6?ò}ØhÃÂÃÍWÍ”ûÊud-0™¾òÊJ¹i89JdmL‘ï8š…o6îíè i†ùßzÁTyZÕ j7€O kERs(»«À§Íƒ¢ª;”ÿ3àsÈæ+OøBÀ†³Ew`˜çV76‹;lîöEZò]wx¸hˆ ;FîPF€è€"ç(—dúµ™©c5¯Ñ«4{•NQî(Út1ǦnÌݽ7]÷ã v`9EuÂH:™]!§Ò¼žUßÎÇ,˜þ¹}I²QîÍ(û ‘Ò¦ñ j@`‹Ç,Õ *ò+f¢5Ú"þr_Æ$nFãáåê"#"¥Ýj%´”@3>ˆß.¯¾³?U¼ŸEÏ’ø ^!ºËöÂZÕ)~þëèµÔÙùùy¯ð±~ìsjbòÆD–MLÎNLÿF§ƒ;Ÿ7CíýðîéÛWKËoß4)h…#<Y9D3}£¿ñý«–¤“ôµƒBC?‰„%RŽÃ™='‘ø²ý÷7Ñg‡öüáïŸ]ÃaÍ®Æ_f¢Ï»)Cîýö÷ôY÷益C4ÇWoÞ­ü8ˆšâ?õšêmÌ`àAý˜6æú¿3;Sñœ-+°g‚ReæmøoìÍÒæû™·\wîîÜšµÖîݸ~wj”ÙÕ…ïiÁî°×ÃùÏ>_1ôB$ÃivPkKÏ–WXµLÇs)öL4]w‹áäFwé¨ô”g[åÁÛnž9åÐ -¦•Ÿ,'ú"ö†X_5.Žr×Ô º&Ô&ÏMéÌDc†@$ÃZéP~™TZÙ–«H³Z2±ºs"¦U@Ø ¹Û\9tj¡GB$ÍZˆ[ë?ðIƒÖ¨„Hê´šæÚ½JòË1OB>™XƱ=e× ƒ<–~WAÙŸ’°áý…ÔlSzà´¶IÙ¶Ñ6)û [c›‡ø:¦µQ`“Ø+­³OÊpxò™Ä2޵OÊ®8yÜ\#T퓲?+!Rêö)¼›÷"-ûnaí“R„-²O¾m¤Am˜ª}R¦hŸ”zm´OJg%l—}J§€ÚaŸ’M¶Ó>¥†­±Ï®’S(m n£À3“³“} ”2ŽCÖ²5Å¢ÏB6· e¥ìÏIˆ”ºöDŠÄ± JÙ”¬£MÚÓ<%l ;%§¬Álx ²ÖDHÕ<)Ã!àiÈÉ Ü±æIÙõÏ@ÖêŽÌÌ“²—)uóìÔ(ú×™ÔÍ“~y0Sï0ÛdžB!¶Ì<-Õå!úÝ(0Uó¤_S4Ï^)µÑ<áU×°]æÙ©Ç6˜§¼zÝFó¤ì{$47Ï]¥ßïíÐØ}µ>Ø6…¹¬µƒ£f}PJÂã§o”ý ‘R·é-€vØG?lBÄ6l“}ôÃ&&k]ÑK˜ªÒ£è‡¦éjªšôÃ(ú¡•½‰h¦²Pö#"¥n RøËvÈŒb ½2£˜¬tÒ»Õªæ1“ †<Üzó€Iây¡(›e\B¤ÔÍc&1Øó„I ¶×<aö¯øÛ3ªö1›̤ê_ Â&3mõ¯OHØ.ÿê0lâp{ìã0lâp{íã0lB`²öÑStÊv°S‰[X5‘Ã0 ÂÈZ>†š‰†YŠ¥ ­+f&BÙŸ”°á-ÂÔLdf1Ô‚Y µ×D†2»WtBüMKÝ>†¤”â2”©¯žµq¡ìOHØ®!älâH{ìãlâH{íãlB`Â3ßù•²yr¦89“ lã „¾s\ÂvÍ@ŽÂ$Û`GaG3m5£0 ¯`é=âxFq4“ê ÖQaW°(û µW°šæÚòÖkí97/®«˜ã7ªÊ¾CB¤„* óåÊ»÷1¡ãm¡ Ÿr&Ú‰#<Yù>’yµÈ4Nד: úÖ }K,Âtí«/ñ·*‹ø÷ns}ùü‹ZÍØ˜U– ½Ø CiµYeØš›–ÃËn©R¥H5"¨¤êËo3Ñ–Ò·™$"äušVÑ8+!RÚ­ç¡ÅšµÞ˜)º²Ø/!’a­¨{Nª"È4õœ’zÕ–?®A­(­(jêq#¥#œ…ÙÿNè~ìŽÏA>§Ûƒ¾«IÙ2È,}k¢ìÏKˆ”ºúV¡²Õ–ª¯Î‘À*4–PÚ/JH{?ìŽ&´PÕ#½[Ï6<Û Ä#F®Çìo«V‘¢ûDÿ: ös­ÐG£ˆCÀ<ä|ëM  µ',@.¤o”½-!Rê&°µßj© h]ûÚ‚Þ&߃IZœe³·/RÈ-ÌUƒæà4äéÖëñt—ð d½ðBFzLÙ_•)u=Þ†în·TûxH(eÞ†CNL™oFÊl6øÛ œeØ­Gá„¢>úsƒEíW€ÀçSxËaªMøä6¼å@Ù¯Hˆ”ºš‚jj©šëÝ2úµ&”6(Rñãâ©Û×µ»jbvx²Ö }j:ü zKx ò¥ôu˜²¿,!Rê:¼½Ýi©G]µÎuÖè.a ºê(0kLW}5‰®šˆŸ¦ØUï@µ ÛØUSö+¶««þTûW-Us­ Û¿‚V¶À³–^zȲ»úžõ¯ð=Â=ë_Aw ÛèYSöW%l—gýkèî¯[ªÇ:³~ Õ%L~‘ä»#h/Ô¢dËk$EÛ÷÷.HõèZ $T¬!àGÈ[¯þ¿†Êþò/ÓWÊÞ’)¡Ò÷âY¥µf›Ÿ>´ü€ú‹ýF5ðG0º†×4×ývó¾E¡ÓÞ ø -P»Ìhü1j@ ÙÞÏéÏ¥{&â·™hÃG`2›?öà‹‚3N•*YŠL8•/Z¾Ÿe›Û;ÓÓÊDÿ•E8y˜è±JاÊá8§Ô™ý-°!DߟÀ#½¹½ÌÄ_;A`{SѮѻž›U'ý·A”09—D»7!w]¯ðq½èT4j÷OAîOmwuCù;È[`2ÝØ¹=&æpïß~xª^[ÌÏA>ׂfݲ<¡~zDÿ äþ,Ñf½½‡(]å IN„žW`OdYt÷‘>™¼yóÎgÏ&Ô¹ÿ=ð%¼ ù¶1÷‡“ìñŽxM=Ëè1'tüðDÉ"µ °(’Ë™cüØ'.b ñ÷Aœð!䇯…ŸÄsà)=¯Ìñ€á8äqcŽö(IåP9<»0Qkƒ?­~|C]Wþ!h>€ü  Ý×?BÞ“é¾–Cê0 8lU—â¢MB]v v!œôØef•wêщém‹­[ùÀõ”KòÁžpò²qI.ìQ î±…(x[>Ë?= /´¡ñÿ)ò˜Lã?d?q«,ÎW­¢ïÒk”â‹=+(=Kü)Ko‚]Š\í³ðßùá͏£\–þ„ɽNqo2TH~¯‘bk×ÞPfùjð1èB•­Ð+Jôx›*wXÚõjQ™þ?eÂ{ïÓ¿W»àX%·\ðáo[žŽ$ÏÉÛÓ¡#¦Lö_€ á%Èæ{ G™©Çý/Á…ð(ä£ß×JüW ø¯­Ä[looÅõ7ì¬jJ+ȇ3„ÛÓý׿]Â[o}_ëù߀à¿I´žWÔë¹î7ð@4|†¦á9ü[”p²ùÖƒúàñçÈ[ ÙŠÅQc>ÿ.­RLfÅâÉ$[ .‡}¼ëûNØõ“ßZð¬ípX@ÓGCÚ÷½·Ëü¥j`E{:ëô å¢ü{T'áÈOŒ‹26ɇbzœ–\Yz$*p‚‰ØW bùýp"ƒu/¿yõêéëf*%is&[GѼ¢qz}é¯Çþòü#ñyMg´_g7jrݪWk–ïé»îf]µç5 ‘Dû~Òë¹–.²¯Š¶åÛ‘öÜ|µd—£ÍEzÄý-¯ák¢†½lø ­õÕ?Q×TÉ]È,A^2.‰Öï%DÒ ÑÌs53ŽÙŸ¾}Ü„"'r†<¬Ã,Ƈ([¥ý‚å6ÙáI«](ûã6„Ólc»P*Þ}?Y«‚šæÚµj«ÙúO'£µq@»FŒ†²?!aC`Ó†¡nE³a¡1¥Ü0‡Ð‡ÚÛ0‡Ð“m˜Ó³†f¡5ßp:p³Àüª·nåU×úÐ6„'l§À ŠÍz61~NBžL¿(]I³zŒwy¾ã­_Íjy ÷°S%«Â¶.°×^¾Ìòùbí±kˆ/O¨ïhÊoÂ69ä®Y„'ŒNc9Ü ’75³,—Ëe½²`— ô«µjLDŸ|íòÝÜ Ï­– Eé}Nò㢚ВªœAö„ÒömBr_ý·j·L„€' kmâªiê G25ϰi®d)¬Kþ‹Ì ›ÜwLhØèŽjqGƒÜàää¶fbÇ Ê®8 y´õÖHÙuOB>i¬—øyííM'¿YO±¦ÝØXP[ˆãð!dóÅ0å±å4V`Ç†ì “[zÖ«e)Òñç,Dgx rr§£bu™Ix©ôùV²ªy“ÀçÍÝ¢Çîz@‘÷Å)V?ÍVBÕõí€YÒ¯¢n{ÝùþšÏ‡é2Å7Êå¸)$ÇÇ'6¤hüµ×TgÃt8­x r ë/Ò%ð=<:oʇœž„¬·ªÙÔ«ò_ÑÕ–›:írx ò¥tÚe xòeãv9Ë;V²v¢7Ölz5À*Ùí)Ï–ˆÛð)dóÕ‹“¡­óÕ0Ë íˆ_á—ÉU‡^i±K>ìÑjÇ슔íä±ô="Êþ”„HiÓÈ¡¶Æ1ëÆ];Er4žwÍoi4’ºð2$Åè.”ìm6ůüe]Ì2ÿÛj8Ok0>¼ ùfëuz-Gx ²ÞÝ#e¢ìoKˆ”6ë¨-Z·EÙÝ€"š/4²ºÈ•š_bÝ­Õüêh¨Üt¶[U«‰êQ ¸û¢Õ®jZ}m‡CF\¾“¾:Qöw%DJ›Æ,j@`k´º·vÍX‘ÞM¨2áä¡ÄÔzŠ«utý¹è„ȦÊÕÒZ8·ÞàûÞ^ôìñ UÍ&¶ÃÀ9ÈIN\c4û&ÚprtQö÷%DJ›†4bµP³ñËЊÔnC“ û!÷kkuWãz•úId"rxò‘Ä&a‡øEqÕqž†|:A#Š™I#?Gv4BCíi8Š\r|?zÒ­Xµ£G =»änáÌ‚ª®Ùqà—¿4&}ØbÛ–W¦}+ÓíÒØ*ß¡OH§:un•@£µ5•¢ì†€c™=ÑF5[çRS-ò¢]Š;BT§ÏÄQÃ^„¼Øú¡ë¶¤, ?JÌ ì—$DJ›Æ]Ô€ÀÖ ]ýRàE‚tl½x4cp_C¬yî"v·ènÐŽ޽Ût«Å‚t1ŠV®œr¾X-Ô/DD%ðUk™È¾€¬·ãجv;^/©vOs¨IB)ôR«»§9ha/ä^c¥¿Ó0â¡Õø£t»^Ýú-ºÌ©qΔ8÷!kuW :.óh:B#ïN­%?Á v'X9œÛ{µæËê„ JƒÀóÏ·× *S@i';Fšf!gé(³ŠÛÖŽ_k%ÕQŸè\.@^hý¨/^¦lB~˜þpKÙ/Jˆ”6û¨-õ¥Šiÿ·h>ê7†(Ô˜¶‘ãÀ‘L-C[{â2<Y«¯SëX(»Qàä c¾­]ÊòwÅ÷vïUÕœNŸA~fÌô…gñC1|Á.ŠKB3#˜¤D; tí×g%×Ä£t`tÓ.Òzâ ˜òvèL•0¹Ø$/‚TÝ´B¹æ†¥ˆ.‡ƒ¯ì9Ñ6÷‘Ë—q§9ô‘7­-‡^¦»Íªå‘:âËsQÖ~ã›óVô܉ÛÈ©Úÿ"èJGe ì¿é6ãšëlOµ·$R³À{µ®ùÆt1§—(»,pr’kÏ1ýew)SG/eY{Vud(ûûj¯=«92"ôæb&É0œÊe¿ !RÚ4¡¶Æ‘é¤#"ŠÌh=§h~c¡‘Q–n,+;ðœ?LÃvÜ*ÿ—"yéF½¼ÖšÐ¼ás^‘ˆ>¥‡ÀÈ+­¾)»{À™ÚšhÚJNÙ)!’!N%«§P ÂNȉ»–½\U4%ZGcÇZï\RvýÀSµŽªi'ewx²ÖVðî=Yš·¿jWC; ³…pÊèFw¯·Âo(_ò%²g€/2{cÔ$ý ¥hVüŽ8u7VHÛ-wê7Þ=w›Ïqm+¿ÉªÑó|Ñä˜ÏºT‹ô †@ø ò+ã"Ãó—õèÑfÉ`E’ÏAŒðäs‰uî>©öèÄã’„H­¶ÊŽ/C6?I~HgùŸ(L¥ÃãIµÈŽN‹Ü”)¹¼Ùü8íIi=(Ç–#¯#´~UÛ&V·/!¿4gÐÖ,Yò¶ë}ö¦aWµ½i—UU苨á9êOȨ‰Ç9 ‘Z­B”ÝAfí1j¢pxrraÀÕšxd%DJ£E.¯A¾fÜ"c4j—ÂqœÎYolw¦™½e‡C»ªU­ðdóÅö/ýJè‚؆çøÑ0š‹‰ÈšüµRN–E_Ëò_ÓÝ£m«Ì×Cœr`{·hÊwùV"eáø%dóÂY~ÑŠvQaÕÛ5¿¿©r”VÍåøi ©âÀjÁöóžS© Ø33? ÕN›Ö+(û ÍÖ+è_7©¸TüùÑ×<Yëâ%çwÈ´ºˆÆˆ„Hi·šäÕ' <ñÛåÕwö§Š÷³(8„¿à²~`mØ ü…ÝŸÿ«>óóó^ácÝ™š˜¼1‘e“³ӿٵꋙý×Xz?¼{úöÕÒòÛ7M ú…#<Yy&KßèoüFÿª%é$}í ÐÄW‹ˆµx'j8³ç1X¾rAÿýMô™á»Î¿ý=}Öý»†ªÑ~×yàAXì²Í·]Fßùž¾Î¬æH†Ó,jÏŽž-¯„xÚ† ,îQoRèÑbÑÝæÏlÔ·„§<ûÛ*¿BÛpÂÎ)³5·X˜VŽÜNôÅñUÈ«ÆÅÑz’ù€„ ]“ j“iS: µOB$ÃZéPÐ*-NÊU¤Y-™X]Ù êDŠg©»Í•C§z$lx­T±â–kcç‰ûÑ•IVÓ\»WýÀsÅÛ0{2ž„|2±Œc{>Ê®8yÌ\Tm“²?%aÃ-øÔlSŠóÚÛ¤lÛh›”}„-²Í¸ƒýhJ˜šmR†CÀm“²ë¶Ñ6)ûS¶Ë6…gÓàZ¤e›Â… l£mRê‘ÐÜ6w•Þ*V6ãNºÄNjº`„Ç k¹ÏjöÑ› <ùxúöAé„„ A/S³1­ìn}H6ÑNûÀ¬&k]:L}Ö CÖÒT5ACŽ' ›k¦²ˆÇÙ6¬”¥f =0ŠžöHŒBhg› ¤§yJjÙðÜjEÕ>z`„) =° Â6 ”ý Û5€ôÂ&zÛc½° ÑcµÉ>„BLÖ>x´¨`§w|,ÖDza„#µ:Q5é•ÒhÓ6úÝI ‘R7‘>˜E_{LD^¾l£‰ôÁ,&k"TÕ<ú`„Ç[o}ÐIìErÙ|ã@Ù<(ûã"¥ný0‰þö˜G?LBÜáo“yôÃ$&<Ù¶Í@Õ@úaý™T§ ý0 Â6NA(û µ§ Msíá Yëµöì:!°CÆl̨(û ‘ª€Î—+ïÞÇü…Ž·…&|hÿt¦¾›:Ó–°·2Óõ¤Nƒ¾5HßDwí«/¾9 ôÿþMs}ùücÍØ˜UÖèÀJ«Í¾B™¶æ²âð²[ªTǧÜyþ  È?€^õéêç×iZmD㬄Hi·Þ[´˜@³Ö3®•w™hPˆdZ+L‘Æ{Ô„ÀÖèô¡"EýÕ Ö€¬¥¨)¥£›Ü›aî:ÛÿDÕ~ô†€ç ŸÓíÁ?ßÕ|j&dYúÖDÙŸ—)¡Ò÷âàêZ3ÇæÔôƒ±ÊÕÀT¾@íAIy¤þ ýÃöVÀQhm•„hÖƒõ.ØùΣ¿RÃd:ö#“—Ù${lùN~ß÷ÎciýUó“Ú?àhHka‹=¸Æ¢Ó”Së–l®W‹…,(œÚäï½Ù^•Ÿ@÷³ìWlì²ï;ÓÓÊeø)x.@^0.ñ-v•ÉGk§Ô™ý l›œãLÚby¬"oÉt §'Ùnƒ’_Ê#1ºlO×8”þ¬OC6¿ ›mPÁ8 œžfW•)ÿ4 ¥× )g‘ÒÁ>Î4ôî#芃·ÇÛ w¿DÞÍ:á!c>V&êx&Ó ?Ÿdïì€TŠ­9eOÞû»ï0 wÒAg=«¼a3Ü\Ö²™5Ô(¡tgÙÔª÷ô{¼P lV]ó`•OÔªÏÄ1¼q]b´Ï@6Ö®®š6ò˜Lýl—jn; ç"Ÿo•lŠŒL]aí1/‡^Ò[C”!‡î äc¯ØÅf |ù™ùˆ<ÉÖì`Û¶Ë5cRf¶6„ÉÈÍ42ªív=wý†º^n‚áä c¢“ßAT‡©v„“'Û`A_#oÉXP¨tox\Èï~î.–Ù7`óM¢JweO[’s [3—ã«+¹œ†G]IÂ+¯>¿‡p,ùRg ÜÏCÖZnØÅór§gùaƒóz]wŠEy–¢á0–ÁP<ÃlPã<‹«ÓíM'°5jÕ7×´VãqB¦¡Ä8h”]%QVïK(ÿ “]Åé]µ?Y¥Jm ÏBûÛtª nýä[”Z þ2õxMéx™hÃB`Ãe9E:2Í÷²‡¦^Š$é¶î ð4ä$Љ©EÙuÏ@Örac²ÙJ÷¡œ„ãÇudžÍD7û~Þ~-qxrrzhÖ¦gpc•j"È´Õ|)û :°ÏÜCÿUQìŒNÑé[ÅôÙaú ·Ñü!SßÁ¯sM;¯Jciž©ß7Ÿ)Yåyωúý–þúaúë‹¿¯Õo˜3p¦qµë"{n—mÏ ¢)œç~Úٰ˳óá”/ ªR ØÞ;lÓŠ}¯§{ùÍ«WO_ÇÝâ©Éz—hœ„B,ýõØ_ž$>¯éŒv¨€'fÍR-µFùž†0ë0¨5¯Iˆ$Z÷×zýÖý‹ì«¢mùv¤{7Ï£äòØ´ö–×ﵨ~½lø3½Ø}ͯ–ržº†v€?¡ô†a´â <IƒFÓ€5uŒãõço7á%nCÄ÷»3»öz>ŸWŒŸPçÇ1Ù…|4ýV¡ì‡%Dj{«ÈŽBÖªž¦¹v­ZEÇj6ÏÃ> CÖ«£f¡ìIˆ”P³ôPwò1ìNE¾q>”©]jy£È÷ý@>’~£‚. <ª«“Måä2™ ¦hU*´8]qZìt­«Çç ŸK°‘'(6ëÐÄpIÈ ³ô‰Òy ÎÚ(6RãcJêk&ßqÓU³ZîÔ;Ö©´e½þðòe6 (~ K§U¯ÐØ'bŸÚ÷ÆßàÈwŒÉ/²P³Ã‰,y;!5'œÖ†Jµ3‘e¹\.ËøËÏá/ø3QY&½¦I¥ZR/E/˜ó¼!/—b„1éɯ=—§¾¬(ßU<Ò:³Ù÷æÁ fèºz*Fšýµ”´™Twxz*½Ëøß±žŠ¹ýà÷QOƒÐaS=Vª¾µw;žòJT/•‡ʾCB$Íaå¤)#PvHšt¨0Í\’n­"¹£™Ú†\—»#T'—ivÈðâ;›D®…ác`)Ž˜ðU ÊG€· ß2ríšÕçAõ·!‰Ðpòr‚³Ó˜ÅsÊî>ð ä' f³xNÙÝÎԟม¡±w2×S50bð ¸y%q…è â£"³aXÕ0¾?˜Iv½"F#(;„AmöHi«4Bšƒ'8?Æ£kã¥D é©§È^„|ÑHAäo ï²Ul"–.@^H§Á.B~hÜ`]l*ììU˜8,Ÿ@ÖêÅvqyç6§³Ì (2{ôòK¨FâUÔÚƒœÂé ç`ôqàV?~‚Žªå‘NÉ4{BT×A¤¥÷û “§'oüj¥RTA¥µ†ó O$ÖˆÍ8pòd뀲^€|Á¸¡Æ™ÃÕ†‚Ó{Ñ{¯¨™œF{].A^J°fbnd‰¥nÊö1äÇé»ó”ý²„HiÓ8¨?¹ÙÏïÔx“LXDqLút˜qFc Œî½lü)0<âv¡üx¨Ýô“GK“¶S˜í`Ó³•;Lb?|Ù|`Œ¹Ñ å ß£heBiÕ"mÅ“ÞúIpVÝVŒúkócÈ,³k9¡‘£“V˜T‡1èÊX¦5>v̰1C#4ò±wÕÀͬì“HÜѻ푛¿¨D¿ÚïÂÜ~M8 |’©9\†Ä/„ê½ÎîK¾:.Šä­b‘zE¦Ò›|d>Ñ™÷›×uEç4¸ÝÞ¬µŠ©6³£ì®ïB¾Ûze§ì.ïA¾g¬3ʯ QþsÀyÈóé÷ÈÒE {äC¡ -©ÚˆtáGÞzM¨Cî#“έ{µcŸß-¡à È'Z¯©g$ÉÔ< æ¹’e®Ç\~‹"zÒ<N ÃNv€=§`k÷ÆÄsøò#c¾OÐçØ‘äŒýˆñ½™âQÿöÉÏ-TóôÂ+ï¾y[çØ;uÿM:@+?.mX’ƒL9dÚYdN(ÜIxØèŽjqGƒÜàää¶fbÇ Ê®8 y´õÖHÙuOB>i¬—ø{¾Û›N~Sz0Wh76”Çâ8|Ù|1Lyl9ØÆ±…!{ÂäÇ–žõjY òù# у¬uÞJM—™„Ç3µ¥ Æ™ªëmè$‹uÉÚãÕ–·Á›ÆnPï×v'€ ëà”{-T#1Òa€¡ÕϪ^™ž¯ÚѺ$2\‘òy¨¡tŽ7!u믻2qËo±GŒnBÖêÔ4޲Ë!/·aW–¶PTõ‰8<>…l¾Û7ê“Ðÿ*]Û¶¢{Ý|E)R0EžPœ‰LÓKÇ­Z*‘²mrƒ8­Áƒ²¿ !RÚ4¤0Ãö[*í~ÙQ¥tC>¬Ã.v»XÍ%Ž!Y…¯Ã®÷ÞÌvøÜ!Tï°k<° ôax þ (s×Uk™ø¾€l¾Ã4mÕ–k¬ú‘ªzY˜¶U-ó"pòtë-ó‚”m“‹ài™eUB¤´i\B leÌåTµã2 ‘°7S{hEÓ({w㢩»ð¦|V±|nBÍV_–$ŠÀ)ÈS‰Ï/ñ1PƒÚmàä¹ÖÏ.)»àßÉR5/bòøòscFÝõÀ.KoÙf#g)T]ßBoN:_Ç»íu粺ãYVt¾Q.ÇT¤C~œ˜+>Hj13Tqjånà1È)Lÿ¤!«Y@2ƒãnL±qˆÁ àIÈz‹*Íï9¿²Ã¶¹©Ó.瀗 _J§]Æ2õŽ`,³+$‰f»œåÀ+Y;Œ®ÉÓå»Ãçì×bSÀ§Í'O'C[ç“q‹?uMçòùÝSÕ¡WòŠä½æV;f—¥lÇ ¥ïQö§$DJ›ÆUÔ€ÀÖ8f‡ø=Ejt±(ÞéסÆ)u5úŠê‡ˆÈaàÈGëñ;"ª½qž†|:A#Šéý(»£À3ÏkïLÃ)„’ãÓzdäQøüˆg—Ü-,Wªê:‘~ ùKcÒ‡-¶mye:^§q°EZp”¯Ï$¤S:‡‚‰Ê  Ñ8¯¦R”Ýp ²y¿|©©ùN1œŽw„:©]Äñpòbë‡.;„²}ùQúce¿$!RÚ4r¨­ºú¥;{Šg2Ñ EhtTKÌ7v»[t7œ¼U̱w›nµXÎD’×è”óÅj¡~**¿¨ZËDþ8ðd½Õ¾fµÛñzIµ{ºŽš$”.M·º{º #ì…¬µP´ûîkȇVóé·UÞ‘æÞ¼ß¢sÜ[ÌŸY«»JÐq¹¦#4òîÔšñšŽ0¹³µ'XÙÞ íN4_Vç¶Qž‡|¾½®Q™^…¬µz¬ÞHÀ,ä¬q# gÔÛÖŽ_k%ÕQŸè\.@Nò¶T̨?#©ìCÈZ»ÀfÃ-e¿(!RÚ4fQ[4êKwë RÐÄn ù¨ß\DcÚJDŽG2µÛWmíý‰Ë8ðrùr ®3„>ò¦µåPÀgºÖ ZžÛ(ÃíDËsQÖ~Ø wò<î_–Ù¹œªýß=Bi3ÜÀþ›žK]s½‚í©ö–Djx²Ö ÿ˜Ž fç²Ëç ϵ¾ÿ¡ì.ç!'p@Õ‘¡ìïKˆÔjG榤ˆ ›Ÿ Tö (û ‘Ò¦q5 °5Ž ®…øRäGÖØ <’1ˆyÉyj\êýàÓ]÷ÝDÏ—wËåè±>ñl‰jåÞC¶„Kõ–¨ôBVÆ:>s¨É9ÓZUëxæ `„G!k9¥ §»5¦¹Da899wô»ÂVîÛ0ãÀ µŽ0ª7Ì(ð"d½ÁYþ­òˆ@Ù_’©Õ#Â=I-›¼ë‘VWLÙOIˆ”PéûVk翚ä}ŞϘFU@ÙwHˆ¤i•]¦tÈ#9,!’a­ ‹ÙÝß)L‘—䶆ÚÏ—ŽÆèPƒß9àää49Ö¦ìÆ€Ó™ÚÁ˜Vwž”Ý1àÈæglO3>«äÃ{4Ÿ/WKktSù¨4» | ÙüÎSwÍ·½->%ô)nmå7YÑ“Är™¶ "ò¼üÆ%ém#X9¶¢|atÚ¾€¢H¤(·±Ä°M”wÜ* çä<ÔGøo»>›'7‘æÃôŸòö‡´h*ÏÛÒÎ<­]‰y\Z„Ó_Ì´µƒ§ì;$4ëàc§KµeE~2ѾÔ#ü後I4óÆé†ru ‘Ònµ%(Œ@3å9ˆß.¯¾³?U¼ŸEW@ü¯ Ýæ {?ºñó_ã¥ùùy¯ð±¾651yc"Ë&&g'¦#ˆÓP%úéýF¬Þïž¾}µ´üöM“b>FѵÒ7ú¿Ñ¿jII_;(ôCoä@gˆöHfÏÌ.Cwé¿¿‰>3|äå·¿§Ïº×P1Ú¼ <¨Oº±¹ô=}¬EÍEŒ¦ÙÄ÷ôìx…UË´Ø„cS4Ê®»Å¢»ÍãøÕž§<ûÛ*?$Û°ï”Ùš[,L+‡†‚¿Éñ§j\­wZHØÐ-)Ð #̙ҡh }"ÖJ‡rˆNTEçî*Ò¬–ŒêlºU@(^«é6WZè‘°á5ÅZˆ›#ø¤AkTB$uZMsí^õÏÁ'÷d<< ùdbÇö|”]/p òXú]eJ†sî©Ù¦ü>Ll“²=l£mʯó´Ð6w4hJ˜šmŠWŠS´MÊ®ØFÛ¤ìOIØ.ÛžMƒk‘–m ‚°¶I©GBsÛÜUz«XÙ´T'5]° ÂcµÞ>º`„Ç!Oß>()uûÓÊîö؇dí´ïx%ËÐ>º¢×ßU ¤FÑ MÒÕT5A˜Ž' ›k¦²ˆèÏVÉR3ù ²6HŒBhg› ¤§yJÈ@:×bQÕ<ðú#ÇaÈí7˜!ârè [fæAÙ—)uóè…Iô¶Çú`Ûeò»Ÿm°~Ø„¸&Ø&ûè‡MLؽ¢ø7ªæÑ“ Lѽê‡I¶Ñ½¢ìKØ.÷J~Y¶ æ1“h¯y À$&<=§%Üo” dF1Iuz>£ÀãíšžSö#jOÏ›æÚòÖkíÙ‘%3êoUa‡„H U@çË•wïcþBÇÛB>3Ñz?áIÈæqé•«E¦1VOê4è[ƒÚ¹k_}ñí|Ì!¹Gø÷ËÍõåó5ccVYËÐ :”V›=A™¶æºÐð²[ªTÅ(ò¤³¡}ÀÓµRq~¦ÕF4ÎJˆ”vë=C‹ 4k½ÆP0Êt(Fh¿„H¦µÂi|šØ>PÖ Õ#aƒ'£¨Ât&j§ÉYã9nÍÀâ_  E°<­pj~ç¨sÂk¯¥oZ”}NB¤´uyú+°5ºÜYñÜŠ³ 4‡MH¯Wl/OñÙC}æçfý(⩳U¶‹Ñ»ÆúÊM¬ /´^¹WЄ!?L_¹)ûE ‘*}/®.¬5sáŸC‰Etƒ6Ý[xʨí~)û¤â–Ë—í­€/Qhmò?_¢šõog?—NìÌþU&êÍ&ãÂŒGçÖ§J•,ÚžÊ;Y¶¹½3=Í®*s|z"‡Ü:}Šåñò˜Œy%Û€?¯´¢ùÅ<| "oÛÜ€ï·Àdpy’=¶£ØC»ìW=~ÉŠ½Ú[’÷`O(V –KòdRÜ! ]£_ٞ˶yœÎ5›m8[v™ñˆ÷×sì‰kû™¨d}CϘ…¥)8ëë¶zUÊEùú„Ò’aQæ&d}ÍÎ[U? Öá—èá8eù­êbØ…–/ºQpë±W5cùÿœ ç Ï}Ïz…×íŽìê4hýT~\û ik48ë'`Cˆ9„æÝNù·ê=ÖO‘·Àdz¬×“ì‰ãWŠÖ=j[¡çYi>ï”ý 42~t×>ç?åBý !”ÃB= »áz\Zz™+oö†ëQÌaéùS„æÁÊÖ]/zžŸ…ñÕ­ü “»dþr’½ãaÔvè~^ÝÊøxâVfE„™S»\z¡ØcŰé|´© 1ÉÊ®Ð{‹0–Ô/@„09âF=¸ÆÐÕ«ä– ~Ôß~b ,_ i‡„b¨=AØ÷*óþ®„7 ß0æ}±À®Ê/Æk4¹™t.§Áõ—àGhv¯Á.ß»a‡âyá¼5 ù2 -±E=Ìo:ö=‚Zr= ¨å;Ù)Wâ,Û¶YÙ¶cáŒ-‹þV¢vùx’?%™&,,2DÞ£ÔúRò-oÕæ«Ezf™G„Pï`Ö@žð1äÇÆ™ýnÊ¢d 솖ϑYÂYȳÆÄϳ=£{ÉúôÜo\W×ú¸ž‡|¾ C½¼&3Ôߟdo<´äÚû4³#„¡Šòè%ž»íÏäÝbµz~µD¿¸¡®ªë`M(bˆ˜¿2wKEUÃ[KY7@—P üú½SÖMpÛLTYï)U± 5ªÙeBIM+vj‹«ùkpûÚ´š›fÛ»j²J•ÚNõžUBÊî›D»åÅSʾCB$ÍÅÓÆ˜àÊtŠ™h_^`C¼ÍZzæz´\8åª[õ™"©š‡pòvíÙŽ «µÄcDB¤„´6öèX _$…9·o°–À&ï3ia‘ÕŽ~½hø±-„—­œW ÁŸÌ2éµe*Ù’z)zÁœç yѸ#ŒIOB†Ôè9Uõ¥p9ÒÄä‘ÖϾÇHØ0o×ä1':ûk+é5©í/h¨ª|åzòœ1ÿ•ݪ–&ÿÐÓµmú¨ì®‡ŸX…¯«>YÛ,ûÆöèšCøË «êûŽUÖ(˜þ®@^1.Ïü$Álc6(»ÛÀ§Ÿj5îºe®§j`Äàp²Þ`²ŸBt† ñQ‘Ù1XÕ1|0ÂVkîLs<šÙó$w«4BZöiöX˜¦F˱•uñ.0=-¡¾±{LJë˜Ðwxï­:`ÓŸÍ /¤Ó`—€!?4n°.6vöªFLO kõb»¸¼À‰îé,søèðPÄàµGX…ûÎïïÒuŽ +Ú[¡§Ž_å‘Vtš=˜­ë ÒöBŽýÄ­²yä~µR)* 'À‡ÐlV¦á‰Ä±NBÖZáP3Ênxòã†gWzüÆge7:UšÉi´×Eàd­=˜š‰¹.úpÊö1äÇé»ó”ý²„HiÓ Åpr³oÀZ5PdFÛ 15ût˜qFc Œî½ßÄÄљôBt÷'º­ÈäÓO^޽çÚNÏ=›ž­ÜaûAàÈæÀcÌåOúÊOI/³É 0i+Þ²˜Ì¬º+¬˜Ð¯Rär ùŸÊìZOhä褵2ÕaãtåT¦5>v̰q †Fhäc瀞YÙ'Ád{ôŽoäf††·î¹¥Ú-4Uu"ÂÃÀ'™Ú´Ñø…P¢×K}ÉWÇe¹<]§ {E¦§¡`„ ëÌûÍ뺢3Ünï@¾Óú™ewxòÝÖ+;ewxò=cQ?øGùÏç!›¯º*÷Èg Œ“é‘…&´¤j#ãÈžPÚPN¨Cî#“έ{µ#Ÿß-¡LÝ£GhÐVk긄#™šçfØ4W²Ìõíc‡ÿ¿öµ§»…Nةѭ<Ï)ØÚ½1ñ>‚üȘïôÆ9¶D$9c?b¼FowzAÔ?Ó+Ùž[¨æé%ï¾y[çØ;uÿí,´°I$Í’dÊá‰Ï!sBéTRÂÃFwT‹;äŽG '·5;nPv}@1Mm½5RvÀ“OëÄ%Ò`ÜŸ­_GÚå±…8ŽB6_ S[4V`Ç–óÈž0ù±¥ganTG¢3<9¹óZ±º|^Âã™Ú"ŸaÃLÕõ–ÂË`]Òb¾SÞ(Òlzƒ©Ý Þ¯íN@6?Ûr-T£Zô‹h€¡ÕϪ^9´ÅbÕŽÖ%×h@Q¤<#”Î*'¤nýuW&nù-VãˆÑ-àCÈZ]ƒšÆQv9à"äEã6ìÊÒŠª>‡GÀ§Íwû&B}úÏ`YÑëâ|E)R0Ež“PœÉŒái½˜¦ŠY*•²•(¤=xPÖ$DJ›†4Y7Ãö[*íÑŒ°J“×nàaȇuØeÀn÷¤¯Ä‰ªèÐï½™íð¹C¨Þa×xaçÎgï<}Ú~r×Uk™ø¾€l¾Ã4mÕ–k¬úé°zY˜¶U-ópòtë-ó¢”íÈWÒ7 Êþª„HiÓ¸ŒØË<˜Ë©jÇ ‘°7S{ðSÓ({w㢩»ð¦|V±|nBÍV_–$Š@INx~yˆÔnç ϵ~vIÙÍç!k-Ë©ùG”Ý4ð>äûÆ65À}ZŸïd©š1y|ù¹1£Çîz`—ë‡èülä,Q0);½9é|ï¶×OüE‹Ðϲ¢ór9¤þÙpç·™jÒÓà ö섪3Nx7P:èÔje“ÆŽoëÐq7¦Ø8Äàð$d½E•¦^ßÜÔi—sÀK/¥Ó.cÀË/·ËYÞ ì°’µÃ(MP*MÛ‹ Џ_‹MŸB6Ÿ< mOÆ-'´#~À߮Uz¯B›¯fvmy·Ú1›’²ƒ<–¾GDÙŸ’)mÒ¥û:f‡ø=Ej´Ó ORöëP㔺}EõCDä0ðä#‰u€‡øÕÞ¸ŒOC> Åô~”ÝQàÈgŒµw¦áBÉñi=2ò(|~ÄdzKî–+UuÈŽ¿„ü¥1éÃÛ¶¼2¯Ó8Ø’ƒÍå2M#ÄšlÑ9LTNÆy5•¢ì†€cÍûåKMµÈwŠát¬¸#ÔIuè"ާ2µ•Q./¶~è«Ó”í#ÈÒ3(û% ‘Ò¦1ƒØš¡«_º³§Hðz&´Žj‰ùÆ.bw‹îÅϱw›ü½ƒú™Hòr¾X-ÔÏBE%ðUk™È¾ÈÔΕ'ÔAu¼^Rížn & ¥‹à­îžn@Ã{!k-í*ÿ†­æÓ)n«¼#ͽy¿Eç¸5¶˜‰sp²Vw• ã2‹¦#4òîÔšqMG˜ÜÙÚ¬lo…v'š/«s[ˆ( ÏC>ß^W€¨L¯BÖZ=Vo¤ `rÖ¸‘ކ3êmkǯµ’ê¨Ot® /´~Ô¿.©ìCÈÓn)ûE ‘Ò¦q5 °E£¾t·N‘ mÒwÍGýÆÄÓV"r8y¤Í½?qž‡¬Õשu,”Ýh¦~¨b4“DL ÙÚyL×Õ>iå\U͉á$ðägÆL_xß 6­2®$ÒÌHÜI,Ñê#ø÷YÉõų'üÔÛ¦]¬„ÿPlÂ*/EÞ†©&w-ññ4¬n§l³57,Et€^è<§ðGŸûÈôú,;ô‘7­-Ç­züZƒjyî  w-ÏEY{øa'ÜiÈó؆Yfç6rªöôÅ®´Ù-ä¦çR×\¯`{ª½%‘šÞƒ¬uÂ?¦#ˆÙ9¤ì²À9Ès­ï(»KÀyÈ Ü#Pud(ûû"µÚ‘¹%)brq¯”=Ê~AB¤´iH/I´Ð‘á!Æ£ eŠüÈ,ºG Ñöc5.õ~ˆž.Üu‘Aô|y·\Žž {é`۶˪•;‡l — ë-Qé†ãŒu}æQ—„Ùäã¤Æt=R°¨ã¤j½w@ŽOBNn#ùsBrîÛ8ç€ÒÆr3û’ œÒR(û¬„H­æ$Õ4;€½«ôª}eŸ“)mÒT-:Ö¶yÑˆÝ 4Zwm:\xÏŸº¥˜­4#Y »•m§@ÓWÒV^ö$¦ýÀdó}ÎÀËÕR8‡ÈG‹·aS.XEšÝr¢äQè©ç7]¯× K‡‡‹Žð­ÕHëUÍWKê*õÚv®ì©nÏ,f¢¡‡p òXK¦µ{ß>FQ!ÇQ´TçND|x²ÖJSÓ¿Ü©ïm"à@«‡ÁEh¡t ?ía²?#!R«‡Aaà”í8äñôÇÊþ¬„HiÓx„Øša°+º` Èm &A8Yk©éPø`‰•ÂYS)Ò²ÔK·!°PG/Ùûa¬âú¾³VT>pK%¾€l¾Œõ”NG¡{w%tw¶H&]½ªòCô{Kú¢´»ñoÎÆå1”„ð)dóÃŽôØøÐÎ2EFË`±œ1Ýkl:Ï©Gž™Uç,C÷–aàÇ2šF®ÖÁSvƒÀsÏ·Ñ4+ÙVÙçï¼mZÅuá~‰å„šv©D“¿€üEë‚%IoV ¯¤ßSö/$DJ›†Ó¡•Aä¡+r£~¦h>lÔë/£YEÅà.8i¼e9EþÔxʶ³™í!à]ÈZÑ|ößøŽgQö!÷ø²–Ú}§[¾'Û‡À/!kUë)»{À—_¦ïòRö¯$DjuO'Ó™×_§ßÅPöo$DJ›Æ3Ô€ÀÖôtÊŠ´èBY·„H y»ËÕÒ…7Zgö·U«XÜa~ÅÊۅЧuèʤ äJ4¤Gù8~´0¤ZÅT†> $›: âm¡BÍQ ŠŠ»•,ØvÃߨÊÏÐ~- œ†<ý}騉ÔàÈZ‹Sj5ew¸9ÉSX15ewøòCcÍ9D‡+T•˜(,—!›¦ µ ] ÕE(ÉA­½Ã¡Õ;¨Ï¥l¥÷”Òî²)û^ ‘Ò¦!@iáÈÑIoÛ(2ûjAØ—1Ü׸’ÍWAj$™[.ÒÝÉ€.KÒê·ÊÏM#v0-8`iEyä  ŸC69NE]¯cs7Þ-G!Žt.½D³ž‚¬wŸ0¹S~Äå<ð"d­“Gj]5ewx ò%ã¦:×pTß¶BŸ¤î¨ê‘» | Ù|¹êjÞ-UªBL„t׫Å"ó¬ò†][áá³Ô씊Pºº›‚iO'*³ÀÛo·^¿(»,ðä;ÆM7´[¥Tõ‰ÈÜÍÔgqwѧåèé ¨Ô–ÐAu} ½ó Ï­Væ£ëGÁN…î$Q/Ì—ä4°æò ªaAžÔ\töIÜäÀè óÐÓ´¯U+Ñ­M»œ·ùȱíÒyQòä×øþ¨jIÞ€=¡´ŠeX’ü¹¼ZÏ•Eu¾ÿèJ¯r´ÚkûRÊvòHúîe?*!RB¥ï[­Åûi’÷QûSWͨ (û ‘4{óNS:o3ÑõgH†µòårÔuEGÀ žµí‹g$_Îb‘Áá‘ÒÄÛÁa‡çGç9T ôMûNÒzó»æo¨÷ ûÙÀÝ]Þúi}KÕ·Š¡ë[¶g‹èØõurˆé(Þ-N¹êV•}–÷(¡Ô¹ê^ôÈ %áP6fÀ*³j¹`{EîµG-B~|8Y«ò8pªì?€1¡tø6!«X-Ø~Þs*õÈ€{4œrüa{íþ‡°ufv7Sì[ªÝ¾Pä÷£L4OüQ¦6ãÓ<¦Úl±Q¹ºˆÆˆ„Hi·Ú¡0Í”ç pîVßÙŸ*ÞÏ¢Hþ‚WȆ¾Å†½°VuŠ…Ÿÿ:z bv~~Þ+|¬ß§™š˜¼1‘e“³Ó¿ÄéDôç-'ö~x÷ôí«¥å·ošô'(¡ö,–¾ÑßøþUKÒIúÚA¡!‰ñÆÇáÌž#Þ4\òÿþ&úìО?üáý³k蚺™‰>ï¦ i˜<ðÛßÓgÝ¿k¨šÑ_½y·òã| jŠÿÔkªwOOö ~þ+œ}ß™©xÎV8nÎ¥ÊÌÛðÿÞØ›¥Í÷3o¹îÜ)ܹ5;k­Ý»qýî Ô(³«ÿÜÓ‚Ýa ®;E{Ÿ¯NÛ$ÃivþOôly%¦ø!Ðèöߺ[,ºÛüI¿ú´)Ïþ¶Êãe5\éwÊlÍ-¦•_‰"ú" Ü*äUãâ(wM  °¡kR Am’3¥C/ôIˆdX+ÊAt¢*:wW‘fµdT'Z¨ÂnÈÝæÊ¡S ="iÖBÜþÕO´F%l˜ÿ}>­¦¹v¯†Nª+Þ¡Ü“ñð$䓉eÛóQv½À1Ècéw”ý) BÞ¥f›Ò›í°MÊö °¶IÙ÷HØ"ÛŒsžö£5*aj¶IS´MÊ®ØFÛ¤ìOIØ.ÛžMƒk‘–m ‚°¶I©GBsÛÜUz«XÙ´T'5]° ÂcµÜg5ûè‚M‡|<}û tBB¤ÔíC:bÑûl¢ö»‡5LÖ>º(NxÕS5nE74uHWSÕ /p<Ù\3• „²‘°a¥,5‘µÃ@z`B;Ûd =ÍSBÒ¹îãŽÊÇšGL‚pòpëÍ£&Aˆ':XõQ6Êþ¸„H©›G/L¢·=æÑ “V›ÌC(„À„ý+~"BÕ>zaPдü«^)µÑ¿Â¨UÃvùW}°‰¾ö؇¼tÙFûèƒMLÖ>zè¼M°S±UM¤fA8YËÇP3‘>è%á(d­% 3¡ìOJˆ”º‰ôÃ,úÛc"ý0 4¸M&Ò³˜°‡E¯á¨šG?L‚0E«&AØF‹²?.a»<,é¦w;Ìc&!®£¶É<`ž¡oÛÎÆf\؆X€Q dR¡À(Û8C§ìG$Ôž¡7͵‡+d­×Ú³)Kf0Ôß#6ªÂ ‘ª€Î—+ïÞÇü…Ž·…&|~’‰î&ž‚¬weèZd§ëI}kðR;wí«/¾9+÷#üûŸ6×—Ï?ÔŒYeýz#°A‡Òj³Ÿ¡L[sákxYýß²<‡NÁ«磃)}ÀÓµt+“È1c¢qVB¤´[ïçh1f­×x)N™Î/2‘×$ɰVÔ=§¨Š™¦žSBJ­yÛ™Hõ‡2µåMMn$u¤ñ<º»aàyÈçuûðÏw6)»ƒÀ ÈéÛe?)!Rê üK(í/[ªÀ‡ònµçûîG­8yP[};(Ýê{…ÕÃ9 ~Ã5ù~wÉ.è^rû%¾Gø²ù%Ü>FÿÑ!UÕáÍB#J+‡­6;*þAd+-‡¤mv”ý€„H©›Ýj~-ÓJ³ëòóVÑ.hpë†|8±acjï5¦ˆ%]þ)YŸœRµD¦xCƒõQà=ÈI¾Ê£×kÐeÂ9Èséë5e?/!RB¥ïÅE¡µf3å_@}óSÏШò°Ú³å©ß* ]hoPhÚ`FÃF 4›( .Ø4ú‹ý&3S8Ý™*8VÉ-èõ<ÛŸÊ[žLO³«Ê,7PS„ç Ÿ3fy”1ùNÐÔ´2¯Mp!×€¶N©by8È[`26–t+~ f_'ÚŠã ­(Q½­Þ¢ß€á8äñï]MÁ¬˜hMžŽ«Iz,a‚¿•y”‘·Àd,ãZÓö,ØŠ®5 «-_Õk]< ¯A¾fÌùXco§Á¬6„M.ÜéÆIaìSÑ)Mݾew¯«ëÚ·`B8yȘÕÜ~mLÇå¢N ½=p&œƒlî$Ÿm´f:"²¼ž»¡CÒ1³ÍZM›>“ ѦWïfªÈ[ ™[7dÌg+¹r“q뾜dïv/÷Dk,ó"2Û¶Uø³#žMqî­ÆÕ!þõ,}U¹DÛ¨UÂäÂo¬L²Šç®YkÅùË|5î2›’–À¦kû%Ì)ûmB’+—çÊ@¸yŸ<}“ßµKh$V¾ U÷WÈ[`2#öéIöÒõmz`ÁÛpÊ–ˆãر1Sbþ¬“óm®Æûˆòx£5ÂüXšEz“;Ù0ÂT\ªP·à†?¡Þ¡ÿì'!›/üŸ›d_y¶o{[ÉhÀƒarþ÷ý4 —ãÝR.g¬ ¿aÂ;ï|/•áOÀîOUõ.éo!oÉtI_L²Ÿ„cfžâ"ù6¶0Aí;A#Q84ªyGó¡>ðßZ{])ço£„R<êÿ>´÷OAøOÕÞ‰}´—7‡ºòþ#œ€<¡C´i¶½«·¶xéh÷GÙýÝDõUÝn(ÿ ‘«þŠOíËžuM*öŸ¥Sq˽†R Ô®dÎ…ü½èÔ°!–Šf­t¾Sƒÿ÷Ñ&„RdÍŠ9i~ªô07êZ¼< ŽGg!kMy›[M\8|Ê®x²–s“mÌ™VÊîAfƺѡüÆå8Y«ßÜW3¹f¬{ö··¸£Aqxr’¯­ï£ÓÀ“|žaŘ.@^0V ­wˆÂCàcÈ©ÜeŒ‚ƒz¬d›nÁ§©½_¾]Ó,Zå?ˆÔã]Èzo4íú-cÝï?Dþÿ?ˆ0a#ëçF¶å¸¡Bk<‡¬µ£fb”Ý ð,ä$»ü£ìºç kuù»ªŸñZ÷måƒÚĺ­¬ÀÄŽ!/&V9t†À¶Š¾ã·Šþ£L[½9ʾCB#ö3¯ˆÿþ1ŠÑ):}£ñä<}v˜>CìÊ#ÈÔ%×¹¦ˆW¥±4ÏÔ£SΔ¬òŒ<©Ë‰úý–þúaúë‹¿¯Õo˜3Ê”${‘=·Ë¶Çͯí0Ïý´³a—gçYÁ塿ípbN¿Ø´ÊqGɺ—ß¼zõôu\ÌG‘²uÍ+'¡À¢K=ö—ç‰Ïk:£Xt%fù8[¨µÌ÷4*©Y¯íÛ"‰&þÛz׳‹ì«¢mùv¤€7ÏÔG¯Õ;eö–Wò5TrXÇ^6üŒ%Ÿ]£Õ5¶E!|ù™qq´¢”>—IƒF3Ïe¨ACãÈýðéÛÇMȉ€J„'2µH>êäb܈²UÚïVáä‘ô›†²•°!à_{›F`:Y«ŽšæÚµj«Ù‚”>v²^¥µˆS*°!ä€aÛ–ÛF¹iäø•' 'g5ñM#Gm£Ù|GœLS³¡®_ßlºÐ])›49m§ÙtÁT&l6rÛ(7:/M³‘¶Ñlº¡“5›óËn9p«_²ØlaÏö›"]9~ÛTk­À ŠqQÓ§!O§ßZ”ý ‘4[«Çx‹ª\6DµÐ¬–¥eªdU*´–¸À^xù2ËŸì«ý@ÖOµ`"«\9ÊÕä%ãr„üиÁºØ”Æ3ÔÄaø²ù¼â.€L‡ŽUÀ¢Çµ×‰Fm;Á¦|EDŒL,œíÑÇ[aE{Ë.â*‰jyNÀ_@~a\žÚDËñ“É%ºýéW+•¢ò*­® ix"±F@LÆ“'[o”Ý(ðä Æ 5N—®èØ’MZWvùÝ*¡c9öº\‚¬5‰©™˜ð â)e›ÜdNÙ¦ì—%DJ›†´¾m8¹ÙÏï¤9¹"3ZîîÎÔƒUwgvVôáÇÝ{O$2Úek¶8Ÿv¡N9ÔðP»é'Ç&m§76ƒMÏVî0‰ý ð dó`€1æò7¢}å?ÇÐÊ„ÒJQÚŠw Y LfVÝVLèW)r‘.Ô5;™h8rtÒbê°qºr:Ó;fØ8 C#4ò±wÕÀͬì“à²=zw>r3CÃã¶Ó¯hPQU'"< |ÙÜÎ.„êĉZ¾ä«óÂfy«X¤ÞC‘é(áÈz#ó~óº®èd’·À;ï´~fGÙ]Þ…œÜÊ^¬²Sv÷ ß3Ö™å3®”ÿpò¼1åyÊ(0™ùPhBKª6rÙJ'%êûȤsë^í@ÓçwËDhx"S ÆÞjM=+áH¦æ@6Í•,s=\Cp×¾¶óa×¼M7%Ý-Û󜂭ÝÏQà#ÈŒù>AoœcKD’3ö#Ækô`ºDýó®[¬¼ûæm£K ª%9í#Lncð SOÉ9¡tæ.áa£;ªÅ rG€#µôSmÜ ìú€£™ÚÓ:­¶FÊ®(k3Ô‰KüæÄö¦“߬J¯i76”Çâ8|Ù|1Lyl9ØÆ±eÙ&?¶ô¬WËRTÊÏYˆÎðäc­×å gj‹–† 3U×ÛÐIë’óòF‘fÓüàxìö~mwøòc¶×B5#Zðì ê•C[,Víh]rEÊR ‰fÕ Õ­¿îÊÄ-¿Åj1º|Y«kPÓ8Ê.\„¼h܆]YÚBQÕ'âðø²ùnßD¨OBÿ«>mîø\¿øŠR¤`Š<¥yb³¸­Z*=)eÛ$JZƒÇ…æ)mQ[³TÚ#Î)²£]®nàaȇuØ5 Í?ÿ•8©èä½7³>wÕ›¢®yaçÎgï<}Ú~r×Uk™ø¾€l¾Ã4mÕ–k¬ú©«zY˜¶U-ó2pòtë-ó’”íÈzGZL‚²¿*!RÚ4¦P[c™s9U혆!öfj¯¬keoãn\4uÞ”Ï*–OÃM¨ÙêË’Dq8YëŒø¾óËC| Ô v8y®õ³KÊn8YkYNÍ?š–Òý:ÚÔ÷i}¾“¥j^Ä@ÄþxYïÚ£üÛÇîz`—ë‡èülä,…ªëÛAèÍIçëx·½î|âoˆ…î8úþF¹RGi¸óÛ4º Åäõø!t»0¡êŒSÏÙ ”N/¶ZÙ¤ÀŒòA'æ¥ãnL±qˆÁ àIÈÉÝvê¡—pö¹©Ó.瀗 _J§]Æ2õÁu,BÃv9Ë;V²vE½  JÅ¢Éc`{±)÷k±)àSÈæ“§“¡­óɸå„vÄÏïóäªC¯Ø 6ÑÒ'5ÇlZÊv òXúeJB¤´iH -t̺q'H‘-¼ ùfëu:‡–#¼Yïhº‘2Qö·%DJ›Æ j@`‹–Ä­6EvסȄæË¬.r¥æ—ívk5¿â*7-UÕj¢zx²V»ªiõu´áÈwÒW'Êþ®„HiӸحî­]‡T¤7 U&‚<”˜ZOqµŽ®iÙ ÜàÛn´¤ÎGn¨j6±ÎANrâ£Ù³h?ÂyÈm8OBÙß—)m7Q[£Ù‡øHEj· É„ýûµµº«q½Jý $9œ©_@;aB“°Cüz¨ê Œ¸ŒOC> ÅÌÀ(»£À3ÏkïLÃIÈ’ãÓžh´ªáócÆž]r·°eªªëDvø%ä/I¶Ø¶å•鈿ÆáÚÛ°¹Û™]©Ò©N‹IDåÐh­AM¥(»!àdó¹á¥¦Zä;E»w„:©NŸ‰ã)à"äÅÖ]bzAÙ>‚ü(ý1ƒ²_’)m’[Ú¡«_º®¯HœÕn Ñqq±æ¹;°@ÑÝpòV1ÇÞmºÕbAº—A+WN9_¬êç±£ø‹ªµLä_@ÖÛqlV»¯—T»§{¨IBdI+>ŒZ÷tFØ ¹×Xéï4Œxh5Ÿn’YåiýŸ÷[t—Lã˜qî.BÖê®t\æÐt„FÞZ3Ρé“»ßs‚•ù½Wk¾¬Îe¢4<ù|{]¢2”´Óh¤ `rÖ¸‘Ž2«¸míøµVRõ‰Î5àä…Öú"š eûòÃô‡[Ê~QB¤´iHSöVŽúÒý~E‚4‘ïšúñÔ4¦­Dä8pòH›{â2<Y«¯SëX(»Qàä c¾­Ý ñw…vïUÕœNŸA~fÌô…gñC1|Á. ‹@3#¡D; tëÐg%×èÄÁzµÈOÞoÚÅJøÅA0åíÐ0UÂäB#¼ B¯(¬Ó åš–"º¾²çDÛLÜG._Ä•ÊÐGÞ´¶Š!FW+U˳€2,$Zž‹²öð׸W™çQijÌÎmäTí_3äSšößt›qÍõ ¶§Ú[©Yà=ÈZ· c:‚˜ÓK”](¼Œ$מcúÊîprkÏªŽ e_Bíµg5G澤ˆR¶AÙ/Hˆ”6EÔ€ÀÖ82}tD$ hªÈïQ&ò]áûÝÍÕnÎëPãRïŸâíì¾L)z¾¼[.Û|œ {é`۶˪•ûÙ.ejaÚòy>3à}¬÷³„ê$lÅc1½Ï´Œp²ž#¸+;¹.Qm[˜DVß·}&€×!_O§}ÎodjñÒ(ûY ‘Z=:<’´SÚ•L»[¦ìoIˆ”6Ǩ-:†0ºŠä(S7ÐülX§ùwß#†<œXw¢µtFTÆ€g kíªõ!Ë™z,ÒñÌžWú4Õwªp¹~}ÉG”<)¿ª–˳À§ÍÉöá!õkbR 9~{«»¾e)[)ÖzÚ}e? ¡~Ðb#OQ[ÓõPÕ Z…é–I³Ók¤sGªB“ÚýaVqº³ä”™må7YÁñìý.ÎïGºxòõÖ+ô34¡tv.mM¢ìg%ÔödÌhüäûÛÉÍyàdí.{þò-àSÈZÎZ'OÙå€Ï ?3ÖæC:Á”ˆÂsà—ÍŸ?Gdî]Ë2|;ë5>¶ôóV—ÄŽ~Á¶Šbó_µ0¯`f¯2»f7†…¹D›A´ëðÃôâ(ã1üO=„«lï‡wOß¾ZZ~û¦IYߢ|„ã•74èýßè_µ$µ¤¯JÒŠM".hn²éþóè¿¿‰>;´çxÿìV–º™‰>ï¦ Ée?ðÛßÓgÝ¿k¨|¿û«7ïV~œDeñƒzeõîéÏÔe`lêküÎìLÅs¶¬Àž J•™·áÿ½±7K›ïgÞr ºS¸skvÖZ»wãúÝ(SfW/º§»ÃF\wèõ䨝ŽF’ù4;ñ§z½Âªe: „Žbt$tÝ-ÝmþÖTý`â”g[å\îy8¡³æ ÓÊÏ—}ñXÍGÈ‹£ÜAu€‚À†JYâS:¼OB$ÃZéPŽRÞ‰ªèÜ]EšÕ’‰Õõ˜EŸNTa7änsåЩ… øV¬…8‡üÀ' Z£6¼Zÿù´šæÚ½êž+HÛ“ñð$䓉eÛóQv½À1Ècéw”ý) b1¥f›R°óvØ&e{ØFÛ¤ì{$l‘mªÎ‰Î¨„©Ù&e8LÑ6)»^`m“²?%a»lSÚÂk‡m ‚°¶I©GBsÛÜUz«XÙ´T'5]° ÂcµÞ>º`„Ç!Oß>()uûÓÊîö؇dí´¨a²öÑElcOÊÆBqÕžæÒÕT5A(m±ÈÀesÍT6Ê~D†õ²Ô ¤FÑÓéQíl“ô4OI ž[­¨ÚGl‚0Ť6AØÆ„²?!a»^ØDo{ì£6!z¬6Ù‡PÉÚYìTâ‚;ÆšH/Ì‚p²V'ªf"½R­cÚ&B¿;)!Rê&"]h‡‰ÈË—m4‘>˜…ÀdM¤“âЫšGL‚pòpëÍ£:‰I.k \fæAÙ—)¡Ò÷pu¬5ÊžEu\Tɘ­ñUeß!!RBÐùråÝû˜¿Ðñ¶Ð„ÏÛLt‰p²ù,åj‘iœ­'uô­AúÖ Ú¸k_}ñåk*{öÎéß¿k®/Ÿ¿‘ÛŒYe½ƒÞlС´Úì=Ê$°5÷D†—ÝR¥ðÇbðŽª"Ï™¨¿!< YëòvÓÈÊÕöê-P[ÕÍhü-&0™==﬒MoÈ)²ùJ³_M]Š=õÆ/Úë]"&f'€ 2Óí¡>ÿÔe7<ù|‚ÙÆ¸ ”]/pòDúJJÙOJˆ”Pé÷ëþ?@ œ¨y(Weß!a›ºúŸ šuõŸ}ê?Ö‰þi&ò "VË\‰=¸Æ¢£>Së–l®W‹Y:ì2õ‰-0Û«òã‘~–í„?n‡_pÊÓÓìª2ÿŸ¡ ç Ïó?ÂXúÈïâNéÐZ•ÕÚ?àhLëSÑ)M]ÏÝβ;:´~*?O”ÖÛ!Z·®gÙ×§•YýL‡ ³)±«¬áèÞ”:¹ D8yDÛ`ì/a¤“1ت¬†à9Sd®ëô`óËåŠô†M.7åuJïùUÜâΆ[žP¯S õH¸Y뺉a]®!oÉ MC¾ä|Û.Lݺ9wS½vò`’OÔnü=õöËÇ*¹å‚ÿ3ß*UŠöTÙs·§Ä‡a߸~ýz?Wf^[Âä"ùœ+HƒIT %áð1­^¿6˜žƒ|Θå“IºÖ¾ãV)Vw“g:óV`o¸n¯Í¿²üûüMô zÛS¹(ë O(…01,Êì$jÔ]¯Ý%â÷†x< þ–BÿÅ jQ&¾²„³g‰_.4éòIS¢-ܰÓÊW ÙCBéeëÔû+y L¦¿zÈ5wÛfAÕ+‹&§Ëîúz–>§+dUŸß!ãµëógfYàm?ö rl!¾q‡âM¡É&F*ÏòÛ›ˆzÚˆ†/ò1M9Z`<ª±ºŠ|ƒ’¾üƸTƒ“ì‡0ê5]B±l6hÌé‡ûÕ4§ŠŠÆÛ²»+º~2{= /¡@„Ò LBÚÞÕBH0»ðŒ²+'j†êÝåß!¡ö”6¦ ìOÜ?hv‡þ§(¶›NÄͦ]”Z þ¤žœóƇV”éT2Ñš¨À†ëI­½ñNoííÛLÔž„œäO1koßFµËq òX‚ÙÆ¬½} Í$<ù”±–^àÞS¦¸QôkÍ­lÓÝ®9LªšC OB6ø¢‚gm—ï3EFê‹Ðì½”ýt™G)þ¸æ”•#,xP% È­×dÊîprr먱šìÁV /@¾`¬ç¹&[e—¿ °míco€è]>…l jˆíŠ JʇöAJ¬ÉhéÛ¦WãcÆÊ-È´u”¤ì;$4ò>s7\üWE±3:E§o4núÒg‡é3\›=ò‡L}Kq¼Î5íD¼*¥YQ¿;S²Ê3 sØœ¨âo)ƒÃ”ÁâïkUfÎï/ŸiГìEöÜ.ÛÅtck;Ìs?ílØåÙyVpYhóÌ.Ðk;lÓŠ}á®{ùÍ«WO_ÇÝ8)[GÑ¢}ºÖ¼ô×cyþ‘øÜüZó3£–qú¤Ö,ßÓ Ñf½µç5 ‘Dûþ]½Îkæ"ûªh[¾i_ÁÍó8]‘å”Ù[^Ã×D Çù·ûèe8Î@ž1æ­uúº„H4ö‰:ÕR³>}û¸ 3qcƒpò°³¦l•ö;6Fˆ"ÉçæÒjÊþ¸„ çæÚØ.òõhlîêUPÓ\»VC·Îj6——/§‡¬W#F CÙŸ°áH¼aÃô9>‘þ²-ÙÁ¦[ ŸÂ2ÃÍœPç/_®šƒ„ÝP/C/xóœ!/—a‰…žM€ð`ÉËà‹ï,s=gÃ)×Ú(üi3¢7'ÔË!ßRX‚¼d\އŒ Eºž› MÁs+õ”­œWªÿ(½—M…ZR/„ôB³­!ÍBŒ0&=ê‰VßpÁš1 ª¾µwå;7ÍÒ ;$lXDP æLéFKlx²B‘¦™×б@‘9 âþï`fÏ39ŸOŽ“êo uñ]´9_?`–> ÿµ˜íkP>¼ù–‘÷Õ¬>ª¿ªK„–€Ë—œ­Ä¬óRv÷O ?I0Û˜u^Êî6ð)ä§ZͰ«nñFÕÀˆÁ3à ä•Ä¢3TˆŠÌŽÀªŽì–[­ô%<…ØìyçViDô¥‡!kÍÖwÕû1þÞ˜¥0tê/ùÑwŽ/B¾h¤ ò·†÷Ùª6}) \€¬åÚ©7Ø%àÃLíÙWÃëbSag¯jÄôEàÈZ½Ø../ð\çt–9jŽ”ÕH¼']{ÐSÌ¥¬€„î#?HŠÄTËs@(Â÷¿0wùR#û Ý«úó«•JQy•ŒÓÌ?lþÊòþžH¬›qà$äÉÖe7 ¼ù‚qC3‡« ÊôYÙ^ÊFÍä4Úë"p ²ÖŒ)¦fbîsIjòòãôÝyÊ~YB¤´iH Á†“›ýÜøNZÂQdF+¡"v¸{ß§ÃŒ3k`tï=u’´°¸žÑüÃ.Ô)‡j7ýäQ,|Òv:Ælz¶r‡IìO ›Œ17ºÁ£¨öZ™°É¹’´OꡜUw…£þ¸™ˆÛ;š©Ïö»9´7…®ŒfZãcÇ £04B#{÷Õ‡¬ì“à²=zf"r3CÃ[÷Üÿ *ªê$ƺQØÙp"vv!T'NÔò%_÷t*»X¤ÞC‘éI(áÈz#ó~óº®hW[ƒÛ àÈwZ?³£ì®ïB¾Ûze§ì.ïA¾g¬3êïaPþsÀyÈóé÷ÈcPFÉôȇBZRµ鬨¼—P‡ÜG&[÷jÛäŸß-¡ @µöHÕ4õ”„#™ÚjØ4Wh „Egݵ¯í|Ø5ó»PtÚÏs ¶voLÂ&¼4Kr)GÁ:ƒÌ ¥“ ÝQ-îh;œÜÖLì¸AÙõG!¶Þ)»NàIÈ'uâ? ¼½éðK~ˆSÓnl,(-Äq ø²ùb˜òØ2ØÆ±å,²'L~léY¯–÷{.€üÀ˜íµPÄH‡æ=ÔßÇŒ.ÜòuÉ5P)ŸƒŠJ§9R·þº+·ü«qÄèð!d­®AMã(»pò¢qveuž†$€O!›ïöM0VÓÿªO›;ÑKD|E)R0Ež ŠC8y"Á¦ŠY*=.e; YkíÚlð ì/Hˆ”6ó¨­Y*í¯Ù‘ZtC>¬Ã.v»XÍ%ŽÝY…¯Ã®÷ÞÌvøÜÁ¢—Bý€®¬óEýET殫Ö2ñ? |‘©í46ö´U[®±êGëeabØVµLÉ,š=çÝ*Ëœ²½ùJú&AÙ_•)mÒ2Z -ó`.§ªaˆ„½™ÚãšFÙÛ¸MÝkO­³ŠåÓpj¶ú²$QNAžJ|~yˆÔnç ϵ~vIÙÍç!k-Ë©ùG”Ý4ð>äûÆ65À}ZŸïd©š1y|ù¹1£Çîz`KQzülä,…ªKÁoöðYw>ñЩ¡;žåPTËq)RHŽ!?N̤7ü\´g&TqŠjÓ ÄIý4¦R0¯žÐq7¦Ø8Äàð$d½E•¦^Ž‚ßÔi—sÀK/¥Ó.c@I6l—³¼Øa%k‡Ñiš T,š<¶zÈâ5| Ù|òt2´u>·øó¬t1d†‚ݨ½SÐæ©Ì®-·V;f¥lÇ ¥ïQö§$DJ›†ä·rÊ$®Û(²#ǹh>ej¼[uèG›áð¦Aé(ðääîàuE÷ŽTû@"sxòùÖ÷”Ýpò„±_£C»®]EÇ}Äö¾öŽŸœRµD— Tõ¨Š)ÙÈoÌ}7®Ü9¦£PWau„f§}T¨«0±ç,“lߣP”Ý p ²yß|…+T¨BjÕ^u Õ(ºÃ¥¼wCM°)qbžf&;qÓ³ýˆÎCNr) Fµsh@ÂûÍ—”uв !RÚ4fP[£ÚûiqÜ®C›  k ³MWßoÊþФËt` üÍ5üŠ”¾ŒExÕÊ%âCÀ¥LíÖŸaÏÔÇEN6Z©ˆ>›âly0ÓðÓiEÒ7 72†‘fÔÌòº”­¯§o7š§´iÌ¢¶Æ,äŠ o ‡3ñv8³®$æyDåp ²ž+š [Ndð"d­ …jn9ew x ²Ö[Ãqª=ó¼Z‹zªªìÄñ2ð%ä—Æ\_h®ä”ÃéB=î<ñPñ¥ðï¼Ì·iÙ.°‹;96a‹¬þT‹t 6Kø ò+ã"­4/Gtˆ6bk×o¬olÚ¯Ú°i3ë~4{ ÿÇ÷ÖÕ²Û(á äãâ\µŠÎ­4ÞFÑD|få=×÷Y)T$§R´£¶ñU*ï€$¡4[oõ vSʶIôÀ´FÊþš„HiÓ¸‹Ø¢…J=G‘]Nèš/Tîñ.£3§!­è 1¾GD##u?ÇcýÔ{Mås{Dü(p²ùJÆRؽo—©cÏÛåè}HÛ›nÑ G?Ù…,[«QçCåaܚ킪¿9Í \‚¬å$«™ê=)Ûǧo#shr^t}»™™biÆÏY¶Í¯®r…§sNª}_A6w •{5¿™cÂbð÷„l/ÚØ<^>/Ëï¡À€P± vË­¶×ûR¶ Ò7Êþ¡„HiÓj …öÚpoŠäÂ@ ÍW$6ºÈ/™;Ñþzmeìѳ‹aײekÔzˆï&(JþÖwí¥ÆNBñ CÖ¤Ô&”Ýmà2dóAi [  rCµÓ!&O€o ¿i}§ó¦Eøä¯Ò·vÊþ"¥Mc5 °5N¿VR‘à£LÔÙÍ\´oú’÷¼¿éV‹…¨¯Y³#?."D3Öˆñ"{OsíMÜN°××Cÿ_µ¢‰ÿqà+ÈæNÂ!þ¸"É#oÁÅ®a9ð,¯Ï Õ.’ˆ Ç!·¾‹\’ð,䳯M4àc›Ö–ͯòVùrÀ¦Öì¼E/Õñ•þ.Y¨bªzEdÏ_A6׫¾[²™[(ÐáŠíŽíO«vðÒL¦Òêþ‘”íä‘ô{VÊ~TB¤´i,£¶h30 ¬ÈFün ùf`£S©µß@T†€Ç k/Nr¿Èœžƒ|®õý!ewÈ 3c žl<„èҡ׿îxtyTKΗ!'y5¦£‘Â$ò@ÙÂ)ë§"¥Mã)j@`k:šC<ø¸"µg™zèú~Èý:Ô8¥Î$ú¢r8 y¸Ýý ‘ž…¬å©õ3ÏP±„ç kuo»w¢û¸a­toYEîïó4åÛÐD”_@6¿z9áFá²¢ðúSVè+þœ_¥°~F?ª.Ã?‡N@žh}¿øLʶ·¡)û ¶é6ô¨-êuÎõ¯d¢¾ð{Ò/•ÃÀäûÅï8ŽÛ1›1à9È)8`+¨YB™kðeÞ1FçùmæW¬|ô„ºXtÅ®½ªžÉóÀçÍ/?DG÷ qs¥¸ËfGúÕº¿)ÛAÈZKåfýÎ X@¤´i|‰ؚÞ{QdFÇ’ºæqsM¯¬Gä0Ï.¹[6?ÌS?Úó+ÛsYÞ­–ÕÑ—P+ÂÛo·^«_¢íï@¾“¾:Qöw%DJ›†tþ«•ƒ:·H‘Úk¨2¡ù ÞÕ@é zÐ`"rxò‘ĆôCüM'Õ¸ŒOC>Ýú²; <ùŒ±öÎ4D .9>Å($wÔ´žÊ&²ãÀ/!iLú°Å¶-N æ4Q¿Í½>ÈènMGG<ˆÊ  Ñ½|5•¢ì†€cÇŒ[çRS-ò¢]Š;BT2âx ¸y±õC×kIYA~”þ˜AÙ/Iˆ”6¯P[µã[cO‘ í„wÍw|o›ß-ºNÞ*æØ»h=¨þ†-9å|±Z¨Ç.Jà/ªÖ2‘?|Yo‰¨Yív¼^RížÞ¢& { k½GªÖ=½…†öBî5Vú; #ZͧWW¬òŽ+‡÷[ôîŠFHXâÜ\„¬Õ]%踼CÓywjÍøMG˜Ü['XÙÞ íN4_Vçu/¢4<ù|{]¢2¼ 9É› û4Ò0 Ùü¦ÂÑpæºmíøµVRõ‰Î5àd­Sžj£þ$•}ùaúÃ-e¿(!RÚ4Þ£¶hÔ—ÞÂS$ø!uf„æ£~ù´•ˆŽ@isïO\Æç!kõuj e7 œ€Ž[Å 7Ú6KÓÑ4ºùªþwô ¥Óp†E¹; ÙÈßàÁ ¨<»6Bh0Q‰læ®ùt°‰gW¥þsÐ%”$dÜ«¡‹—÷œJ=\ÿE¦Ñ^óþLZ ™y5¥ó1-9 D2¬ùÖm—­Y¾“gV¥â¹¡bÙþIi™î5ÛµL´†Dx8c Dmª²† ‚Öw=¦&&oPx´ÉÙ‰éßât7_¬×‡–Iÿ0¦Œ½Þ=}ûjiùí›&-£p„§ +¿5BßèoüFÿª%é$}í Ð¦1b©@÷/I¬cM¬»Ã™=AbiY“ÿ÷7Ñg‡öüáïŸ]Ã^EWã/3ÑçÝ”!_ôýíïé³îß5TM‡hŽ¯Þ¼[ùq>5Å ê5ÕÛ˜ÁÀƒ¼[.Gñûp ¯ñ;³3ÏÙ²{&(UfÞ†ÿ÷ÆÞ,m¾ŸyËuçNáέÙYkíÞëwg F™]}çžì[pÝ)Úû|ÅpÞ!Žè´ä®åÏôly…UË´;X|©w“/ÝmîùÔw §<ûÛ*…¨áàU8 ¯¹ÅÂô¼jŸ@ôW!¯G¹kê ]“ Üi5£s0V5k¥ƒ1E¨ŠÎÝU¤Y-™X]ÙëDvCî6WZè‘I³â6ˆ|Ò 5*aCܑϧÕ4×îU?ðÂ)OLÆCÀ“O&–qlÏGÙõÇ ¥ßUPö§$DJÝ6¥€Ní°MÊö °¶IÙ÷HØ"ÛTÝ“ :£¦f›”á0EÛ¤ìzm´MÊþ”„í²MáÙ4¸iÙ¦p!Ûh›”z$4·Í]¥·Š•MKuRÓ› lö©UöÑ› <ùxúöAé„„H©Û‡˜Vv·Ç>$›h§}àfN “µ.z}¹ê©H7Œ¢š:¤«©j‚wà9ž€l®™ÊBÙHذR–šôÀ(zÚc =0 ¡m2žæ)!é\wŠEUóèICn½yôÀ$A6_õQ6Êþ¸„H©›G/L¢·=æÑ “V›ÌC(„À„ý+YÕ>zaPдü«^)µÑ¿Â¨UCmÿªi®=\k!ý÷¬’ôõ0*€²ï)¡ è|¹òî}Ì_èx[h‡v`Ngê;1§3myõ]¦qºžÔiзé[ƒ™ú 3^_ühÿ£ £"þ½Û\_>‹ª³Êr¡7t(­6« L[s‘rxÙ-Uª]`[–çXkEåû”ßf"sûzÕ§«[Mcû)WÑ8+!RÚ­ç¡ÅšµÞˆ)Ú¬í—ɰVÔ§Udš:N )µòVÑé•IS‡é\Œ=“Of)€bDò(‰Ÿ&4(¯C¾®Û¥¾ëIÙÞ€¬uØÝLŸ)ûY ‘R×ç*t¸ÚZ}ÞÑ Õ+áú\…WÓÕç*t¸Ú^}®B‡¶KŸ· Ã[-Õçï:k¿»^àÈG´Õº£Õ’õiïAwRì(ÈyãóÅ÷Uy .C^6näk,üï»h×¢“+RÞ†^ƒ|­õV¹K¤lssé[%e?#!RêVù 5ÿ©¥VyˆG‰Õ Ö „<˜ØH3Z?¨\qrÀO^«?Ûñ ß#¼ùRëµø4—ð2äËék1e?%!RêZ¼ÍÝi©w•uÔxªKxòáÄÔxœSÊFW ŒÅîU…Š}CƒêQà5È)tÉ;P`Â6vÉ”ýŒ„íê’þUK•¹[ïFò¯ Á„C™Ú¢xB~Ò-q®±W–œ?Ùð¬€_ù¹¡^‰˜ŸB6¿‡vš\¥d£_£Í OCN2®sŒþ –GÙžl×YÙ )ûq ‘R·Â?BÍÿQK­°§¬g†Óû£LÓ•FV÷@*nXÉ&¤é„ü _@ÖŠ¤¥¦éí&ü²y0peM§ì_Jˆ”Pé{¯d­Ù–š…þ °MwÝ~ËØ¡kcMsÝoè[úÛ[ŒB Ô®3¿E 4ÛQ8õ¹tbwÚÿ$m#LfK!Ýsš*yˣ˶¶?õ‰-°Reczš]eò…²©ieÒ G˜ƒlîÅ>P!-Ö¾ÂßßÈÝV/Âßm¢´ÅòøSä-0ëd|9¸Õ…>Pf÷wÀˆp²ù£¸çöohe–ÌÏA>gÌr–íÖ¸È XŸ(4UÂ?YÂYȳmP¿‡¼&£„g'Ù;þ,5ÆZ ÁÕ£º.þ}#< Ù|K:i]ü`öÕÅ[l¿Þ/UnÁñè ÷h[iB]ÿ!èÞ‚|ë{WÁÿÌþQ¢<§\ÁÛ›nÑÖ¨å ΄sçÚ`óÿy LÆæ¯M"ÀG8Y¢0ĞͣxÈL|—ñ` ñ1=b9ÿSð$4ÚGÙÅù¡ß¡¡Àÿ Ä B~h\ˆ+,šÀ~Üù˜w)ÈdÕ­úS¯?¼|Sa+|㇌éGuýç Ixò•6hì¿@Þ“ÑØS“ìÍ–í­JH4”Š«SÜQ&ø/AŠP;`Ä‚¯ôÕý–GÑÂOrwÕÿ_¡„¯ ¿jCãÿkä-0™Æ™dO?UD–«Dqö”Éý"üO`û?¥ª”õ‡uV¥³:êêðà ¦7²¨«Ãÿe LGV~rÒžšVü?@špòŠñ ¼þˆÁ®÷JòÿÄûЬo¯uÞ-¶ØÑ7e·Ž$,CQqÿ¯TõB]?©ü ñ¤V"(|Lѯý?gSIŠþg¼µ@íà ”ûLéü/VtƒD ÃZ¹ÝJQR`ÏŠ B"éœO U¶^s¼JÉ®“Ç„VU)Uìºò™åÿ7š’ð6d­¬/p”1víJþJèº/߸~qùæeåpýÿ!Œ Ùl¨êãoÂïYŠUöÿþ¯ýUöÿ .ÐÈÜ?2ø‡øóÿÅk[:¯NßèŽqAŸ ÏýÐ_ÀZ÷d›kÖñjt¿Í#õ çK5»¾$“EQ¿?Ò¿~€þõµ?·ê7,™G¡ŸîR’Â{ìÔº…À“OyîûÝm§¾¼ÂÊ.ÏNâ”)Ïð.Û±ëå}~ðåóç/’B‡‹§ÐFѼ¢qRŠO¿þ·s:sO|ÞÒíøôŸ›4‹ãy®·i{;­†ù™Æ¶7ë4pJ£…xD ÿC½¾ëòûªêؾé_Ù-ñt´<ݤyÉëøb»Ž=uÝkÂË/3× k¿,! q7 têb·_n¼¼ÃMà$œ²Z'Õ¹Åûoêvm¯@Y„Ó§³o*~FB…üÔø}fø2)O\kúó›FUy=>„f3` O$шÍIà<äùÞ7 < ù¬qC¤°t¯Ô!­«»|JèXQ£½€ë×S¬™„Ø’šÜ‡|?{wžŠ !ž¬iB ÔŸÜìåÆÒt[‘™4Äó9ϰՑÆSчŸëbt“¶Nù"@à²ÍP¬øª½v¡•z¨á¡vÓOßb¥““¥Q÷哨 ‡å¡Õ ›y‚1æ6øÙ+失’Ó²½‰›‘âI{¹)Ϊ‡ÂŠ ý*E.S(ÊjÏö‡R9i‘Iuؘ‚®LY½ñ±† i/ÁÌÇî<W}ü@¶Ç/Wq734¼-Ï­ñ_Ñ ¢ªNSÐè)ØÙ‘Tììl¨Nœ¨íK¾:ï!F·U©÷Pd*í›ð‘ùKwdÞk^7mKjp» ¼ùzïgvTÜà È7z¯ìTÜð&䛯:3 |Ä…Ê¿\¼bÌC¹G–|æ{äý¡ ­«ÚˆôFÞ6I©C#“.ny­=Îï–‰Ðprz»{‰š:+áL»¹ ›æ³s=ĉq7¿wJ®;5÷­ãy,B·7–vþ¬{m4äû½q‘­IÎØ‡Ü–ëQÿöÉ Ï-7K¡ßuß¼­‹ì•ºÿv ÚGø²ù¸²)G‹œCá„Ò6|ÊÃÆpT‹»äg §·5“8nPqcÀYÈZ›ÍjÖHÅ A>f¬çHƒÙ»Ji§Î¨¥ÝØXP[æ¤çn³[¤¸ý[¤€·=[F¶šu)$äÇ,DgxòÑÞëò ÅôGë QG-äÛz:Éb]Òf~¥¾]¥Ùô6?5¦|J™XNï@¾cÌ–’Pˆ‘ ­xNÐôê¡-V›N´.¹IŠ"åO¡b„Òq¼”Ôm¼íÊ$-¿%j1º ¼ Y«kPÓ8*®\ƒ¼f܆CÚBQÕ'âp¸Ù|·/ÇsšDúßôisÇçúÅW”"Sä)²rs)6UÂRéa©ØyÈZk×fƒVBàÞ‹Oû¿î–j-ÿÃÀ§Í·xíÖz©Ý>ÓØ~&üfUË”Æ%kòbï-3'1+“ â/Hˆ'kÒ:v-s_±¨ª 0DÂQÈ£ÚF9Ú½­‰éŒÏ¶Oþ^4(jPæ!çµë0ig? 5¨]Þ‚|+EKXÞ¡â–€+µÖÅÕ&(TÜ"ð6äÛÆ65Á'•>ßJV5/brø²¹[tßÝ œzû«_ˆf+¡êúNN§¤®¼Ûæqí£ùpU+?(¿Ç¹H!9Þ‡|?µ¹ðdÉ­º<ÒŽç”sª³aÊq7 < 9ƒõ—ó¨Âô<<:oʇLAÖ[ÕŒõªõŠN»œžƒ|.›v™J²a»œâÀ.«Ù»Ì®úüäIÃö¢ø·Ê³%â•n@6_½8Ú:_ ³+¡ñ€K4ûSzóÐæ¼Õ±‹ÒkÇlA*vò\ö\B‘¢%ô~TÜaà§µ®HvFøë:T«ø´!yQ„BÏ©¹o±_ ªëDö$ð È_“>`³w¶GiŠ'Ë.Àæ.Xg§SÒ©ASùâ  ¡Ñ8¯¦RTÜAàdó~ù\¬ù•j8«î uRºˆãqàäµÞ]bнù^öc¿.!ž¬iHQIz8tK—f ÒnÞ°ÕÎc¬}VRÌ7:ˆÝ¨ºÛ´Ú^d¯vÜfµ,J&¯±R/U›åöaÄè ü5ÕZ&òSÀ§õVûâjwàźj÷TDMŽ@Öº®Ö=¡a„£µŠ:Þÿz׈‡Vóé…]ß•æÞ¼ß¢‹g<ˆó˜ÕÚIå²Vw•¢ã²„¦#4òîÔšq MG˜ÞáöiVwÞ†v'š¯ s](MÏ@>Ó_W€¨ä k­«7RX€\0n¤ÃáŒú½ë·ZIuÔ':«W{?ê‹C!Tì]Èw³n©ø5 ñdMãj@`F}ér«"A:? 4õĢ­Dd 8y¦Ï½?q9 <Y«¯SëX¨¸Y`rÎX‡ÏZ¢ýŽ»µÒʹªšÃyà#ÈŒ™>õl¾!ìØuÜ ¦™‘¸\£ÕGž#Õ\? Õþ­f•ÖØqªð/ŠMXå¥Èe˜*az÷‚ŸòauWêÛt)ì;¿Œ¾²çþès™R²CyÇ~[q›¿W¤ú>R$íßgAÖ~Ú—ŠJü$M9Åí¢ªý_=B±øi ö`ø¦ë•åX[W¡„7!k]±Ièv©¸ðä[½ï¨¸sÀÈ)\äQud¨øÛâéµ#sYRĘÜÞYyTüª„xRzû±7­Ýþ˜²ÇñÚ×,SïŨ ¨ø ñhv ƒ¦t®[Ñâ§@<¦“²uæ¹¶ŽÎ>'r•§h$B³€–{už“Áè4(æ€EÈÅÞw¡TܧÀ%ÈK½ïB©¸à%È—ŒuEýN&•¸ y9µ×Ÿxú’%¯ÒhŸ3üÀbHEJ³>õ#Tü€„fýHÒdll½åË)ò£¡} x²Ö™ Îo¿iuÝ‚¾ Ä“u«Iù>RPž}øíƒ7¯œ÷ ï›è\©¿ê• ~`o;«<"ö·¿Gì••¯ü]Û;Ïçæ/ç ,7¿œ[üƒ NÝ!äÑŸŠ³;úúÕÆËçë^~óªR¦ù¢Ú«Ò7Æ»¿1þÆ–´’¾¶Oèˆ~ÌàÄù2ñD¥ â=hæþ.úÌ0ûÿLŸ ÿMWåhGcŸ¸Srëu‡Ï±rõ3¨®6IÆçü#={~šušIá¼5ZOØr«U÷ÒÕžÕæ=çÇ&?ÓµIP©‡SájyQ9ð ÑŸþòïŒ_G+¬ú'vuO 4ȯ˜Ò¡»Ôcâ1¬•åû݃¨ŠÁÎ*Ò¬Kuò6ˆ* å‡Í•C§F$ì ­X Iþø'ï5híÕüãiÅ–:üÆ`mSŽ›ß;Û|_«Ô5˜‰P1Ç!k鉪yR' ŸH­àDó¤âF­vƒQ«ÃíÍÊ<©ø“âÉÜ<…sÓå]dežÂ‹ ì£yÒ³G…ôÌÓV=éŒ25Oz34OzF}4OzNJØ/ó”ScôÁ<%“ì§yâ[ {äÙîjК•03Ï– <ÌгÅPŽ}ôl©øãö˳•¾ôÁ6©Ø}’aôÉ6GâÛìx{»Úر“ªf¯T<G!í½}ŒÀ&§ OeoÈšÖ®ˆ™ÙÇ(lb´?ö1 ›=VŸìC(„Àtícˆîí6=U…Q@C¹¬¥©j2*=ÓmÌÚ@èw3ví5ef ")–ÈJ•±È+·}41…À”mÏm6Tíc 6MѬ1(%a*~ZÂ~ âDÐxìc6!®`ôÉ>ÆaS@vœÊöN j ã0Šq+ÓdF1nõu¡âg$ì×"ÝÒé‡LÀ(DÆÀ>ÈŒB`º2R­Ô`·¡î|f19¨«$j&2³‘ÖG-ÍE 3¡âIˆ's™„YLöÇD&a“ý5‘I˜…ÀtMdâÓ¨šÇ$L‚ðä#½7I˜!Â’éyvfæA8%!ž”Þ~„«c«Q>8³AFp¨„Ĩ¨ø ñ¤TƒÏž¼ú:á_xYŽáC§àNZíÓp'­4¢v(W‹L#fßAíèìä_¬v8´§¾øN)á8í-ü}q+AëDd³Êº½Ø¥CYµÙ*ÞI ÙµËƒK'±g½kEž©@<†Õr¤¼Åî\dí˜éyebk¨Â#;ÍXàQ ú-»¸^¾”¿\`áËá‹‹êyÜïáiȧYcU¶Òäü®Ø•»ªAo”BƒuÐ;Ã_(éªÆå¨&uªñ>¸ž¬uµ3j(c¾Ã+ñR1dv©x¥õ¿åEeŽÀ‹ð$d­Þ¶ÓIU'ò…Æx©i÷d‰<6P¶ÀtîN\œg£{¨".];ÝtƒÀ­!—.Ç¿oÏ&r~ž„!_ìCÝ=FÙÓ©»K êu£SÝùòVN4ç©')P¯W`ÑúhÜ|ÕUïsP%¼ù’1í£ v‡?ü®áVêA~‘]PfölâÆwg¬ó¾Ažj”Næ„•È»è aS`t”N|r1üD£j¥ËÏòÅ’ŸAÕ~6_¤Zµ5«¶À¢EÈð³°W¯çgxƒgV¨ç4x‰æóÞ®5ª"Úž÷;@ŸáæÎ¡¿€iêÉ6׬âÕè~›ÏÕïæ,ÕìúR§¡E ÿHÿ>Ÿš¯ý¹UÃaÙüÕ‰.5),°ÇNÝñø=ÞÍ]æ¹ïw·úò +»¬îÌ)S0‡]¶c'h~ðåóç/’G ('X4OJ«ÖÿvîOgî‰ÏÍ/VÝ7i˜ç}«I~¦×±Ì: 8I-Ä#ÚöŸèõ[wØWUÇ=t®ye·ÄoûG©nÂ>ÿ%¯Ý‹T»^!ü‰B#_ܤ¨#áê *yÊqA4_BëRÖª„x4hÄî?…LbõË—÷cX‰c›„¬Rª|<«ø±øM½•6vy‘ð äƒÙ·É>|O ž>·‰|Cë Õ:§–R› ½±«;ÎK‘ïÇ‚¬WFBÅ–OJ2A½Éwao¢Ñ0òõ„“ýáž5Œ|9j òTö CÅOKØuàðaÆEè·ËÚ‚ðä#´‹"‡¬ØùQVí2du$íÞ%2l—ÜçáÄfÛ­ÛÕpþe5»A‹1Ë¡+Y¡hÍV˜­sú‹Sl® T“¦‹["ôgÙ7A®„RŠÍÕÞP}Eê'ŽfkVË 1øå)ä.ݼ_e/^?{Vˆ̉Èè)ŸLd÷9õäQ4$/ò cök¬A-dW)‡þi%ØÍX±X,0žŒ!üÜX`R€kz±uõ·Ïx®A^3~‹Ƥ(œ!5Š`«¾p"°›<Ó;»Ùó¨Ì'v­¢hò¸);{++©4©ƒž¦ÊgLDÔ¡›ÆôŸì­©á{QÃ_¹ÄÅw•r°ÓzN-V~ŸxBiÖð}òìCsJE‹¥i†œ8'µQ§éÛÛI×=>i};-­Uuè;âÑuN™Ò9 ;ˆG“½LlHM˜³"9ò!‡âHÖ¤9Nj¼‹ÔÂ+‡’†J©ßÀÒgáß«t”¯B¾jäÆÕç>õ`ÎDhøòƒÔÌ.1¶wøòËM87FÅ]n@ÞÐj†Žºe®§j`Äàð d½ÞyÏ»ê¡B|§Èì¨Õ>Wwò¡Þk2€p²Ulúg ÀUÈZ ¦ê vxò]ãbù°³W5bâ°|Y«ëŒùøØ‹¡cP¨ò(Ž9r‚uÄ_îp8I‡2ªÎ[§Šóªï#-^ÅÅüÖæÐæI‘ýÆm²ZÓ˜ßl4ªÊ#¨~Îp–£á‰$±9 œ‡<ß{# âfg!Ÿ5n¨“””‡Âç;¤uu7 ÐŽš)j´×pòzŠ5“pT_ôáTì}È÷³wç©øâÉš†d(†“›½ÜøAš…+2“#nˆ««c:Ì8£¹îEƒ¯©“¤µ€g˜-Wü%C²0‘FŒç¢õxBêðSÏQî0‰ý$ð!dó`‚1æòÀȾrˆKé0i\ú§¬oE LgV=VŒzz˜ã(ÿ¸Õ±%ÒÈ1H‹5ªÃÆqèÊq«7>v°!Ç[1ò±;jàJWŠ·@Ø%Z‰ÜÌÐð(I”U9TTÕ‰>´ZÓFCâgCuŠÒ©ø’¯Žt‚%»Z¥ÞC‘é (áYÈz#ó^óº¡èDŠ·ËÀë¯÷~fGÅ]Þ€¬µ ¦ìTÜð&dóõ\õ8úTþ-à äcÊ=²<ÅyhBëª6"Ò—÷ÎSêÇÚ—[T»e"4aµ=ú Ks]MSOJ8cµ<7æù¬À\¹<–»ù½S »æw•°S©¼´{câ9 ¼ùž1߇è‹lHrÆ~Äx“"„{AÔ?‡}rÃsËÍRè·EÝ7oë"{¥î¿‚öJ·7 ßdS¾à|…J‡¯R6†£ZÜÕ w8YK?ÕÆ *n (¦ ³½·F*nx ò1c8Ǔ̽۩”vØ[Û«Ø›U§­ÝØXP[ˆãð.dóÅ0å±…Acöql9ƒâ Ó[FDz@Õ‘…èLBNïhZ¢.Ÿ‘P:‚dØ0ù¶Þ†N²X—´%¡¯Òl:J¦œ’XNï@6? |1T#1Òa€¡ÕÏ š^=´ÅjÓ‰Ö%7i@Q¤œƒŠÆ\[3=s×ve’–ß5Ž]Þ…¬Õ5¨iW®Y­ŒÜ¦žoZUŸˆÃ=àdóݾ\¨OBÿ›>mîD9L¢Äô¼ÅyÎCqæ;*µ¦JX*•Š•(d=xPÑg%Ä“5 i²n8†íµT:")²£Éë0ð€epÀ»ÎÛ”_‰#Jvùû°+ä½7s*|îªwص^عóEÀ;OJÅÜ-ÕZ&þ‡O!›ï0-Ú­å»}ܪý.­¬¾ª–yŠ@¸y±÷–¹ ÛÇ“°Tü õOÂÑ8ØËÜW,ªjG†H8jµ"kkåh÷n\4uo%[e Û§á&ÔlõeI¢8”ä”ç—ûù¨Aíðä[½Ÿ]RqKÀÈZËrjþ·¼ ù¶±MMpŸÖç;YªæELîC~lÌè¾»8u9A|ä,…ªë;AèÍIçëx·½UyOylÉ/°jåå÷úgÃß8Õž¤ ¡!ç9圪3N¸¸Ö têµ²IcGŠ“è¸Slb0 <YoQ%Ö«¢ÐutŒZ§]NÏA>—M»ÌÏC>oÜ.§x'°Ëjö.³«>ßønØ4y œäˆ,{µX¸Ù|òt,´u>·ybG:±Ï﫽 Í¬ØøI½rÌòR±sç²÷ˆ¨øãvåÎÈŠ†N ‡ŽÙ~~B‘­Å EäçqjœÒP·¯¨~ˆ‚|(µp?¿#¢Úû—Yà È'R4¢„ÞŠ; üò§ÆÚ»Ôu ¡Vñi=2ò(¢¼±žSsßb¹RU׉ìIà¿0&}Àfïl¯NÇë4¶asE«ã¶OJ:5¨s(˜¨LÆy5•¢âç ›÷ËçbµÈ¯TÃéXuW¨“êÐE[­•Q.¯õ~è«ÓTì=È÷²3¨øu ñdMc 5 °7C׸tUN‘à%+´Žj‰ùFçíߪ»])ÙÕ"{µã6«eéL$y•z©Ú,·ÏBEo௩Ö2‘Ÿ>µZçÊSê ^¬«vO—Q“„R*º^wO—¡a„£µŠ:Þÿz׈‡Vóé·]ßíΚNç¸5¶˜‰ópÍj]î«ã²Œ¦#4òîÔšqMG˜ÞÙÚiVwÞ†v'š¯ s[ˆ(MÏ@>Ó_W€¨ä k­«7RX€\0n¤ÃáŒú½ë·ZIuÔ':«W{?ê_’Tö.ä»Ù·Tüš„x²¦q5 °G£¾t·N‘ mÒÍGýîØ#ÓV"2œ<ÓçÞŸ¸œž¬Õשu,TܬÕ>T1kiîÒwžA/´ÎcúWû¤•sU5'†óÀG3}êÙ|C*ر븒H3#q'±F«tâßg5×hµ«Yå§Þvœj#ü‹bVy)òL•0½k‰Oà ¨º)¤õ¦¾Et |eÏ)üÑç>rý| ®3„>òŽý¶B!›éZƒêû\Ç;\Oõ}díá‡p§¡Ä#7˜SÜ.ªÚ¿²§µ+mv 9ö\ê¦ë•Oµ·$RËÀ›µNø't ;‡T\x ò­Þ÷?TÜ9à äî¨:2Tüm ñôÚ‘¹*)b£„Rñ«âÉš†Ÿ¨‡ŽÌmÏD1Àù‘Y A>¤íÇ vñÊ)ß`]^É­×£ü7a÷¼sœ:Ó`}ÔjÝÐᲞ…é„MôwˆÎ:ðsÈŸ÷¾¿¡ânŸ@~b¬êûur…§À_¤Ö0RdˤÞ0±qV Ý„G¬V\¢^7Ž”ˆÀ,´¥Z/|K*6½ÊÝ?-¡~¤S#·Q{Ó RŒ8Efw ‰„æ·ëº­Ô›µÐ .±·%bÛ•·4?ݤ»f[QT»J=òªÃ¾: µfÃ'þ“ÀGÍg2…׫üµ[BRåŠ >] è,Ò•Kà ʪ{´ = Œ ·ß+ü#kvÁÈ"¨ø¢„x²¦!­tõÐ0GDÄFEvk0H–éYînçèÚ‹Xã¤hÀQxÉ4ì’¨n@6?t&Á.¿l-(Ò¼‡¶'<9ÅUñ=:æ=óÒ宊Sq9`z«â“´ÕÄ•Éw”{J¢rx ršÓ脞rMÒ É‹Êº‹¢âoK˜î4zìMëØxLÙ‡ñÚë–i÷hTTü€„x4­³{‹[™Î}+êŽâ1¬•ÇÃþW¬í6ªvv×C'Ãs¶›U›ÖFyôv¿€Xíü{mOªdû´¡[W}™hV˜dZš/ó̱K;‚r´OÒ­³|Û_Z¤}æø·ÀÑOüuÕ7’®ç˩ ßèÑV¥Z-2† ú‘çj¿u+üÍØÛŠß¤Ò J¨é3ß­9A¥¾Í¶”³Iõ]6ÀŸðds·ögìx»-岫•í:¿å*ïüH¼ä0 cgâͽ—Uȯ À«¯¦8|$,þRq Àk¯õ~ü¦âN¯C¾n¬1êÁl¨üÀ›Vké=¥×Ÿxö”%¯ÒHÈb}ßjõdý¸¨ø Í®¤éÅØzkJ‘-ŽBÖË{B{¿iu ñdÝjO 0Í”g~ûàÍ+ç}Ãû&ºë¯z储ÛÎ*Ï"÷íï‘:neeÅ+×ÞWÌçæ/ç ,7¿œ[üƒ N}!ä}ÉëÄ£¯_m¼|¾þàå—1/)m'êGI¥oŒwcü-é#}mŸÐŽTW»‰±È3;¦ù.ÿówÑg†ù ÿøgúløoºªE;_áÄö6ÄÝè;?Ó̃jãd0q áþ©ž ?aÍ:íû¡'ùŒ[nµê¾ã!Û{ðyÏù±Éï uiäKÕò¢r”ÌOZß³¬_CþµñëhåüD®.I™àYS:xjLB<†µ2  kU1ØYEšÕb%êz Á ª€Pä^6WZ‘°+ï“b-$9àŸ$&sÛƒÖ¬„xÔiÅ–:üÆ`m“Š‘°G¶¹«AkVÂÌl“ <ÌÐ6©¸Q`m“Š?.a¿lSx6]®EV¶)\Â>Ú&=#šÛfÇÛÛÕÆŽ­:©‚M…|´÷ö1› œ‚<•½}Ð3-a×qÌìCN0Úûl¢Ÿö!§wMß>†(NJÓS5aÅ04õ ®¦ª"6qœ†l®™Z)gg$ìZ!ËÌ@D.Ä‘þÈŒBhgŸ ä'îÈ í8©šRÌ‹ÌÙ\>Ò{óI ‘:—µ†-3ó â§$Ä“¹yŒÂ$Fûc£0 ÑaõÉ<„BLÙ¿ÚöÜfCÕ>FaPЬü«Qé飅Q«…ýò¯Æ`cý±yé²ö1›˜òðA¡ÎTÍc &A˜áð1Äþc¿†*~JBíá#¶Ô®Ž­Fù`AŒ@dh×_ß7ª*~@B<)UÀà³'¯¾Nø^–cøÐæä¬ÕÞ¤œµú²!,ÓˆY-S;Ë0IßšDí©/¾SJ8ßð9þþñúòñ»·qlÌ*ë èÀ.ʪͤ“_ú5Ôê\‡>–NbÏúf%aµ,–Ù‹,ÚûÍ—+vÍ­—).ˆãçK¶gÖð*%gqQ™ï Ôá"äEc¾ËìþyuV_‚ áAÈ{§\‰<¾BÙÍ´kÔ˜Ï/ QÓÑ®ó<o‰_㯞[å[ï<†j”78:¹¹‹ä»´ßq¢SùM^¢6 ¥³©†or|¾uÕˆŸLm]H<HðH‡lRóX‡ap®«ìò%u ù”âþ4½+ô^ƒÒëTé©Ì/Q¶Àt.γ/½sˆîÓH&£Ì÷WàH˜^w|¶»Y#¢«¬”¿\ÕïÒ%‘ã× GxòÙ^R-†\¯iQý èýÆ”jl±£oÊa¯8~ÐcSq¿MUÕ ÊPÛ]K¨ç½]kTE|£\"zío²©‚$Oñ¼µ@}‡•Æò}¦tÞXÑT`×Ùª´ŽÓ‹«ìÊÇ鿵¢ á d­9YÂAÂqz*n(¥O­Ø„•‰o¡—„éWs<Ú¹ v=º€¶IRU¢5¼ ùrjµB3P‡Ä'¨)UÆï¬¾/? ¡Q÷õ‘«âÏwxmKçÕã&ßôÙú G—ýüÈ‚O¶¹fý¯F÷ÛÜW?œ¼T³ëKb /Šºý‘þåô/¯ý¹U·a©üÔøl—‚Øcé>óÜ÷»ÛN}y…•]Vwæ”)êÖ.Û±#é?øòùóIÇ}Ås)_4LJgÊ×ÿvîOgî‰ÏÍÏ”o˜4É÷•ÐUñZ­ò3=ŒnÖ[Ps^”hÞ¦×iØWUÇöHùÊn‰_¨åÁÔhÆù’WðET°§®• LX„\4¦­u}IB<4bƒaJZ˜Dì—/ïÇge[Ãüxb ¾A½•! ²ö<ŠªY-w$ÛÍSTwZZe/^?{Vˆb˜Šh6H)Ë*åp઻¹ÄP²{Ìg&câ.j¾Â符3ä½K®ÀŠÅb‰% èvœÊöNÐú‘' ⑃Õ_G>á&vÛ>7~“ÖÄö©‡a'BëÀ¤fv‰‹aTÜmàCÈS,6a1ŒŠ»Ü€¼¡Õ uË\OÕÀˆÁ#àÈORWˆÁP!¾Sd6)=‡ÚØk ¹'S ‹W„éMŽògJN—¹ÕÓœ.@^0Rù[G>²UlÂpòj6 vxò]ãbù°³W5bÂ5àCÈZ½Xg´~_*t¬J2e @6¿Ž@ÐÂ%}_ú8p¬ê¼uªØ©U}Ÿ0˜hýšï3CKiE~£Öôæ7ªòz|g kÍ÷âÃòïí‰$±9 œ‡<ß{# âfg!Ÿ5n¨“ã_8¤uu7J­€š)j´×pòzŠ5“p2Z$«¢bïC¾Ÿ½;OÅ?OÖ4¡êOnö ÛL3qEfÒ¶YчŸëbtókê$i} ๡Ë¿A)ÿæO$äY¤=žJ>üÔs”;Lb/–‡Vk 0læ Æ˜ËƒùÊá^$&.q[VŠ'­Z¦8« +F=±ÓÊŸ²Ú³ý¡ÔFŽAZ¬Q6¦ +SVo|ì„acÊj_;5ò±;jàJWrÆ@Ø¥HŠÜÌÐð({"ƒºª:MA£§`gGR±³³¡:E‰|ÉWG"Ð’]­Rï¡Èt Fs +¥yÝP´?©Áí2ð:ä뽟ÙQq€7 ßè½²Sq À›oëŒzI*ÿ–ÕÎâpËêˆÂœU,ùÌ)öÈûCZWµiÛDÞNI©C#“.ny­-Ïï–‰Ðpòtï5uV™vs6ÍgæzÌå‰ìÜÍïR@û a§æÊ)…tzcé‘u¯†|¢7.²u"ÉûãMŠ–çQÿöÉ Ï-7K¡ßuß¼­)§…²ÿ&ˆ“£.¾É>¦|Ÿt…J»ò)ÃQ-îj;œœÞVkâ¸AÅg!kí´ªY#7<YogUþí9~`òÝN¥´ÃÞÚ^ÅÞ¬:míÆÆ‚òØ2'=wÛ˜õØ"Ý"é÷ØrŦ?¶ŒˆÄžª# Ñ™…¬u¢CM—OH(¦?z'8äßæÛz:Éb]Òf~¥¾]¥Ùt”A9™+±œÞl¾1T#1Òa€¡ÕÏ š^=´ÅjÓ‰Ö%7i@Q¤ü)TŒP:——’º·]™¤å·D#FWw!ku jGÅk׌Ûp¨ “º‡8Ün@6ßíË…ú$ô¿éÓæNÏ—¯(E ¦Èó$‡09—bS%,•–Ї¬µvm6xPñg%Ä“5S¨=Z*ÕÈ0zÚŠVjÍ—JºݦÎXUü(GVàÙu?tVjÑñßÐݵœ¹õöºy2´ˆªZÅô“ÀÇ·ôQnx2Ãp <½ †öf–áyK5<-+-Rf­ùTü´„]1u²¢q5 °78"ã)²ËÁðXÄê74•¯ÄA»ü}è‹p÷‰9>y—›Oéî½P†=®§ïõ‡O!›oñ.Ú­õR»}ܱý.LøÍª–)Kq·†{e™9©ØÏ –½IPñ$Ä“5 i»‡–¹¯XTÕŽ"á¨ÕŠq©i”£ÝÛáÑÚY+½kØ>ù{Ñ ¨Au˜‡¬u¼uÏžý|,Ô v x ò­m,ay‡Š[®@ÖZW› Pq‹ÀÛoÛÔŸTú|+YÕ¼ˆÉàcÈænÑ}w+pêR‘B4[ U×w‚p:%påÝöVå}øk>.°jåå÷8)$Çûï§6ž¤h»¡÷œrNu6|ÞŠz£3X9j LÏãó¦L±qˆÁ4ðdýû"xU<¢Î*»¢Ó.§ç ŸË¦]怒lØ.§x'°Ëjö.£Kç´Bаiõ&p<åÙñÊ7 ›¯^Cjʆͳ Ñýš%šý©½Ò¸°½r̤bç ÏeïQñÇ%ìJƒ É#î¡c¶_'ó7yÍÃÀqÈã:Ô8¥‘.J×Ök”B–Ž¹Ê¹½™”U—•ùZo$«Ö.Q?¼oµ2æ6òFçbìr9:jÂSJG3¦·‡º³móÚyÁ ÌwqÀ—^ÍoxŽ­¼z Bøòã×Y௼«”¢ýäh=½}š†Î×)okI Z¯wöÝȼ¤}Có’ûŒŸask¤“å‚86Ås_½´ bl…|·ÚäÓh|BKo+ÑáÅšc×}ÞE¼ásÈÏß胅E­mM·Tj6vÙÍö;Uj*éÅ+²vàl‡öJ¶Kï¦ú.KàO“÷Y÷ð}dž”MS½žÆÚÙ‡pn‡¶†æ‰ ›áë]*^‹Þ:²M¶¹„w LïðýSq ‰W‚ó>0v7~e³êDsÈnË´ü­Ñ„nKðÎqÄ1¸¨•_ÕC¸Œw¸lú>jÂgR±"¸ìÙ÷Tü3 ñdMc5 °7ÂPdŠÜÂÉw ¥+ÿ&¹Dý P:îÿoª‹pBø3w®žX¸ê“‹pE ü7ßE¸· ü7ÝE¸ þ„ÿ6¸·ð„ÿ6¸+x‡Ó÷Qs®HÅöÑE âŸIØ'á6j@`x4Ej´.¢±˜/" uo8©_%""€‡ Ò®«êˆGzIÒæ¤%Tâ2 <ùDŠF”°„JÅ~ ùScí]êºKT«øtªPŒtQÏsjî[:TÕu"{ødsË?ö÷¶GÑO‹×ÓVas«VÇì”tjPçj?Q™m¨©w8Ù|q÷\¬ù•ªSª»BT‡.âx¸y­÷C—ˆKEÅÞƒ|/û1ƒŠ_—OÖ4î¢öfè—^)$Ͷ .\ŠMËb7ªî6ùÆEöjÇmVËÒÍfÚz }µj³Ü¾Ñ½¿¦ZËD~ ø²ž×W»/ÖU»§{¨IB)½k¯»'ÉÞ"uµ4O›t¼ÿõ®­æS,»¾+màó~‹¢1h\!ÎcÀ5ÈZÝUŠŽË:šŽÐÈ»SkÆu4az7ä§YÝyÚh¾‚NÌ¢4 <ùL]¢’^€¬uM½‘rÀä‚q#gíïì]¿ÕJª£>ѹhµÇ¾‹Vº1Fý5Ie¥1/ëávTâÉšÆ}Ô€ÀúR„,E‚´< 4õ»¶5¦­Dd 8y¦Ï½?q9 <Y«¯SëX¨¸Y`rÎX‡ÏZ·ªýŽ]Òñ;U5'†óÀG3}êÙüTk°Ãs¢Q`1š‰Èb5Ú ¡¸>«¹~@G·šU~ãcÇ©6¿(Nr+Ÿg’îW§¹x¾H@Õ]©;ÑNIÑ#|eÏ)üÑç>rý| ‚’„>òŽý¶â6=œDõ}6ð©¾Ï‚¬=üÊ"6JJü:N9Åí¢ªý?=B³Í’=o—oº^ÙñT{K"µ ¼ Y+NGBGpü˜Š+oA¾Õûþ‡Š;\œB4UG†Š¿-!ž^;2$EL/ͲAůJˆ'¥·{Óº2S¶H,ö£ÒÙ1T®*~@B<š]B÷Òº2 P~@B<†µr±½³ÏOºò};ÊúÖ©WèZR8&xA©ЧJù P:)–’SušG¾ç™ò1ñãUÝ-¡†Òµ™^wwÒÀ(ß0l×ù"{Ð ~3®F7ÏìÖi/ìÕGs"xøòc¢Ox¨q–/¹Ñ@NLy"WÞÄÑj×Nx\á4•¾BI ªiÕ¤mÍOrÜ"'—œ’€|Æ’Í/”lîÒÎpø·§îøuÑTü€„f]tÒ o8úúÕÆËçë^~óš_áÕµïÐ7Æ»¿1þÆ–4’¾¶OèG¬þ¶JÕ1‘8‹¤/‡ j¿ƒE‘ŸèÏßEŸæÊûãŸé³á¿éªí\ywBG¦ÿÃbàÏ4åšË M+D‰´zöÏ5GbÖ¬Óä4Ôh‰fË­VÝw*n8y.û®‚Š?.a×åÆÌlSδ×Û¤b÷ûh›Tüˆ„=²Í] Z³ff›TàA«ø0#Û¤âF}´M*þ¸„ý²MáÙt¹YÙ¦p!ûh›ôì‘ôRÃ6;ÞÞ®6vlÕIÍl‚ð(䣽·!Øáä©ì탞i »b™efr.Ñ>؇dý´Ìkaºö1Dašžª Ã(D"Œƒºšªf ˆMÅq²¹f*?#a×*Yf"g§íƒŒÀ(„vöÉ@F⟔ dp«R­ªšÇL¹Î¹|¤÷æ1“ D06½aËÌ<¨ø) ñdn£0‰Ñþ˜Ç(LBtX}2¡Sö¯¶=·ÙPµQØ4+ÿjTzúè_aÔja¿ü«1ØÄXìC^ºì£}ŒÁ&¦lþŽÝPΡ3›ËÖ>Æ ”cýµ1Ø„À~Ù‡8e4Þû‡Mˆk}²qØ„À”Ý+ z¨jã0  ݫq˜aÝ+*~JÂ~¹WÒ½Ÿ~˜ÇLBD½é“yLÀ$¦<=§%Ü” dF1ae:=Ÿ€Q å[¿¦çTüŒ„ÚÓóØRG¸B¶z­vdÉ &úÄF@8 !ž”*`ðÙ“W_'ü /Ë1|¾²¢õ~ÂcV++˜à“Õ©"™Æ\ûQ§Aßšü‹ÔÎC{ê‹ï”ɽÀßÿE¼¾|ü 86f•õ èÀ.ʪÍ^âšÝS;ø±t{ÖWV4ð ÄcX-¬Áî\dÑá¡|­±] “3ùÒnµÀvÞí..*ÓüUEÈ 3cš‡ì“ÎT«óz .„1ç’4yiñŠNvkû%È|¤wêžÈãW([`:ÇfçæÙzY:ŽÅoÀWêÛ‰÷Ïùýœç kõ¡¶º«?ß™`«¬Tµ}_Ã~~„„·Käñ[”-06½2Ï^ûNë˜8–¶„HiËœZcÇö+¾ZL™ù7`K(~]1f~!¹£3¶ã7`I(k6d|ã£G1ëVÙ¥âò5uöß‚1¡C0sýÊ˜ŽÆ®G[µ½í…-¹µFÕ œên¨Ó.]Bµéþ†|-Bù=¾wÂuÈë=Ðß`7-ýý+°ü«Tõ÷áG3në﵂ˆ»ÈRô ¥{Ëzîö‡ëß8ïmÒ˜¸û¯PÜfªú«ì¼RñêûÐq‘‹”锬hMU`×yá”n0ÿô]‚$~áÔ‘Ïag Ϥ¦0‰—˜ËQÝrœ…œAŠì2ô’Ð(ùGGíŸáaZƒÒj”Cy•Æ*mÛØÆäß*SÛP'Ú£fì·âW(ÅŸ¼¶¥óêôî…8úì}†{p‡þ~ÔýœlsÍú!^î·ÙP¿é¶T³ëK’YÕû#ýãÔ~²öçVõ†ó{ˆ§»t¤°À‡¾ÍïB{îûÝm§¾¼ÂÊ.¥í”)ÔÌ.¿Ê Nþ|þ|ãEÒõ1ñHiqD늶IéŽâúßÎýéÌ=ñ¹ùÅÏMZ%5Âj­o;­†ù™Þo4ë3¨E/JˆG´ð¿Ðœ6-°¯ªŽÎY¹þ•ÝHŨÔÙK^ÇKžëû›¶W .|äxžëE©«ë^„0fâ¤ù2Z·7$ÄcHãÂB8Z¢–ÚÊÙ®9î¦âCõªp„1Óç¬ªŽŠ/HˆGƒFœ—:É-[h]µ_n¼¼CMÜ’$ĬR>ÄðñÔüź]Kº–'îˆNAžÊ¾a¨øi »Žõ³aä;jÒéÙ”fè]­Øqk%ò ÁiÈzUbÔ2TüŒ„]›ö©´Œè•[f­1”qˈm¨¿-3„Ö˜nËètS›F¾3 Y«Š›F¾š4Y¯NŒšKU-ìº@jØ4Û+y:m#ßǘicÏÛF¾3 Y¯RŒÚ†Š?&!ž”ÚæÒ/E>6Jšä½ §ô+Œ¬È/01ùì]žj\¢Q«}kàä)6^P ªIGôÅ )óTÖG¿»%!ÍÆ;d¼!÷‡Ô5«ån‡¿’Ç¡¶Ê^¼~ö¬?P~kŠW)‡3 J°›K\IÞóØ®8O}ò]㗸͘ۯ͋ÅÛ²ƒÀ¡ß,ÓŽO þÀ£-«¿|äUJùdøyƤìTãë&EÎ?¡¨óê;pbŠPÊ5Þ+cJäqe ìZX4Ò^ÑÁõ\{‚øÁTµwmoííÔ×ÕDù-9áä5ã·˜a©è«t", ¯*‘Ç”-0}]ëôt{®°p8¦×ÔY+¬´XðóSXiVÖW…•ÊNQaïuùÿ=×XÉ[·îA¾gü·>ÒA¸jìHÛøqWnîÁ(¹ >~Ó··ã||qïôxªÚªìãSñâÑôñO˜Ò¡]ô ñhÒ¡—‰Í/V$G;åÃÀIÈ“:ä8©ñ.R ¯uúÃóÉá\Ö›‚”¯B¾j4ÿŽ«Ï}ê™mˆÐ:ðä©™]âA*î6ð!d­]¥„bŠPq×€Íw‘™z¬ybðøò“Ôb0Tˆï™„UÄ÷'#ìµFPqÃÀÃÖ)–z¥'£Zã(yÚ†q”§Ež =«ž9މc ŒDþÖ‘‡lÕ›ˆ€«W³i°sÀ»Íg¾C,¯‘½8¬B6ߊdA‹¡cP (©$w$£>0N£nƒU·N•Æ/÷9 ”ò<˜Noè”F‘ýÆm²ZÓ˜ßl4ªÊ#èið!4›Ýhx"‰Fp­O8y¾÷F@ÅÍÏB>kÜP')C)vtHëên”­ 5SÔh¯à:äõk&á"þ§’šÜ‡|?{wžŠ !ž¬i0Ô€@ýÉÍ^nü M½™±¢!žPÄÜÓaÆÍu1ºIi‚ø‚@àRâärÅoPedN9•)5i;…ƒv^õÏaŸÜðÜr³úmQ÷ÍÛºÈ^©ûoÒFCЇÛ÷1åðe‹(œP:6žò°1Õ⮹CÀÈZú©6nPqcÀYÈZGçÔ¬‘Šƒ¬wTNþí9~™ðÝN¥´ÓºŒ×Önl,(-Äqx²ùb˜òØò4V`ÇéžEÆ–‘+]ud!:À£Ó¼è Ë$œ²Zg &ßÖ[ ÷‚uI›ù•úv•fÓQ®dåÛÝÄrxòc¶C5#Zðœ éÕC[¬6h]r“EÊÒ¾¸”Á†ê6Þve’–ß5Ž]Þ…¬Õ5¨iW®A^3nÃ!žNWUŸˆÃ=àdóݾ\¨OBÿyº\;Ê>ÈW”"Sä))޼~“ZS%,•ž‘Š•Ök²<¨ø³âÉšF5 °GK¥t0I‘Ù’­Ôš/•t1ºM!±ªøÑ~:^å‡ÎJ­•å:ÔræÖÛë:äÉÐ"ªjÓ LC~lÜÒG¹áÈ Ã!(ð4ö*.¡½/Y{m€KR±}¼†HÅOK¨ шÆeÔ€ÀÞàˆ8}§Èn†GxòÔŒpå+q&Ð.ú"Ü}bN…OÞ%ÅæSú€{/”5š¹[ªµLüŸB6ßâ]´[ë¥vû|cû]˜ð›U-SŠó'Ï‘{m™ËR±Òä&k“ â/Hˆ'kWQ{c™ûŠEUí¸C$µZ¹4r´{;jPÏ­6özy‡ŠY®@ÖZW› Pq‹ÀÛÍoMMðI¥Ï·’UÍ‹˜Ü>†lîÝw·è$y;éy!š­„ªë;A8’¸òn{«ò>ü5ŸXµòƒò{\’ã}È÷S› OR^ À›óœrNu6LûNÃÀ^šHP6)ljŠ7eŠC ¦Ç §wx„§„msE§]NÏA>—M»ÌÏC>oÜ.§x'°Ëjö.£¨f´Bаiõ&p<åÙqË7 ›¯^ m¯†ÙŠÃH—j–hö§:ôJסãFöÊ1»&;y.{ˆŠ?.!ž¬iÜB ìc6]JRäFCú0PdÅÑ:ˆÄ9 uqºµÎjá¨Ò¨VJvPyë°-»„Ý¢ã*uÚSñ£MNÞ;é‰%ú!›Îj•r¹ê°MÛ£ó&Šœ¤ËÞòmæ”úòƒ÷ðU»tb5 œ‡œÁ‘ØÛh³͗çøÑ}Ò!´¿€¶™ª­à*d­Óò±mv¸ûr¤r«Ý‰ÆÄîU«Ýú #©êhFÅÏIˆ§×£ÙŠôöâþa†*þ„„x²¦±ŠØ›Ñl?¿V«Hí.,‚Pd@ס;˜íS?ÓJDA>”Zw²Ÿ_9VíBˆË,ðd-5RëB¨¸ÃÀO!j¬½K]‡ZkŸ¶·£ù±ÏOŒ{NÍ}‹ÝoU]'²âÓ¿0w+löÎöê´¢qNz 6·fõ­Ô¹cFT¦F³V5•¢âç ›Ï2ÎÅj‘_©:õ º+ÔIuè"ŽÇ’Üë¡ë®¤,÷ ßË~Ì â×%Ä“5 ©z8tK‘ R½ Nþ‹Õ³b7ªî6íÙ«·Y-KWlh $œ‹U›åöÑúè ü5ÕZ&òSÀ§õö®âjwàźj÷t5I(?jBSëžîCÃG!+ýõ®­æÓ¥@»¾+­$ó~‹®jœX$ÎcÀ5ÈZÝUŠŽË4¡‘w§ÖŒÐt„é]Õšfuç­ãµš¯ sùœ(MÏX­;nýtˆJx²Ö^¨z#å€ÈzÁ³åßfvõ½ë·ZIuÔ':«µ–ÔFýuIe…p7ûá–Š_“OÖ4¤½õ¥P ŠiÛ`h>ê˜O[‰ÈpòLŸ{ârx²V_§Ö±Pq³À䜱Ÿ-´®÷ø‘"¤}`U5'†óÀG3}êÙüxE°c×á‚fF"ÄEöÒè©Ïj®кþV³Êî8ÕFøÅ‘"åµG0UÂô¢\< _$ ê®Ô¶I#£«¥õr‡çþès¹~>·cCyÇ~[¡ü²tKVõ}ã§ú> ²öð³ó¸"[âçB Ì)nUíÿsÐ#”nÊØì5§M×+;ÊQ¦‰Ô2ð&d­ £ AÂ9*®¼ùVïû*îpr ×RU*þ¶„xzíÈlHŠ(íAdíAPñ«âIéíÇ޴ήŔ}¯ýÄ2õ^Œª€Šf—Ðí£(Ó¡ô€„x kåÎ/m/ìß}Æ~w‹yNÃs|ŠýIÑ›ØÛîøùHtB ~¶üÂXµãúÖOÞ«úWÄã„Ú¡pÔú·/`N„!›_íPöž¨ü à#«åE¥5•Þ­Uêª-òÌŠ¦„FJÔZ䔑PоoØ"ûuÖ7ˆÂðäCi6Š­l&Dex²Ö^°z£ž€l¾÷{±È6ìÒ+Ñ œ²g¿óÛ×C·=»±Ã;»èŽ¿ò"Qýø9äÏS«©‰7áÔ©äUíK" ¤¹Ï­¾›Tü€„fÃ&ýíØXë­©‹"¿VÔ·¼À¿<ùXj'ö|TÜ(pò\ö]\®™Ù¦ã§¶IÅîöÑ6©ø {c›{-6ìÅl3­íyR' ŸH­àDó¤âFŸBþÔ\!TÍ“Š?)!žÌÍS87]ÞEVæ)¼Â>š'=#öÌ<—öb6 ÌÔ<é9hµw"22OzF}4OzNJØ/ó”3G÷Á<%“ì§yÊy»Ó1ÏŽ··«;©j’–†a¸¨Î壽·DЫ\žÊÞ>Du]!‰2³9{wìc6!”³Oö1ÿ¤dCØ¡é©ÈŒbšzPWSÕ D¤!Vަ¢™ZùÜg$ìZÏÎÌ@Fa£ý1Q…è²úd B!¦<€l{n³¡j£°  Qééã³la¿1ØÄXìC^=í£}ŒÁ&¦k#´·ì6”·vÆ`„3µ:Q5ƒ^"ž9—µV,ÍL„Š?&!žÌMD: Ò‡Yˆ‹?}2‘q˜…ÀtMd" ¨šÇ8L‚ðä#½7q˜!Âòé \fæAÅOIˆ'¥·áêØj”¶½pÌ2Û…3ª*~@B<)UÀà³'¯¾Nø^–cø|eEë$„ŸB6¿ç¯\-2˜¥µÓG“ô­I´ñОúâ;¥„I/ð÷¯/Ò"ŽYeýz#°K‡²j³—x'fµrK'±g}eEýŠ@<†Õ²0žÍ³<•?nWkTæ¼·9ÒmßIÌõ“ÈõkÔ¡Ù• ù·GÊ[ìÎEÖÎoW&öd@>bLì4c°UÄË—ò— ,üo9üoq1ñôo"Ë_‚áiȧYcºÒäü®Ø•»ªAïW D˜^ü¥3Œñ9kW5.G5©S¿7Â3õ.$wñl6è.¯Ç"Õd1¬È+ô¿«Åe ž¿·ß¤Ê“1Vußç¥âMbw=¬ÉâU"{}Q™æoAAfÆ4Ô‰|ƒÂ cœÿ´ˆDoP¶ÀtNõ^jP'™Ë—· t^,v/n½­|†­Ê­eQ½ú¾UÂK/Ó¾Ú`Xç©É<1§íÿ,WÅ£ÝÆð'n@Ôº„W!_5¦~­E] †—:÷ïÀ—PD$½fÌý^‹{+øâO0§„~å`'üùRØ[)¿Æ_:á=È÷R| Çó\¯÷¯aƒºêk¨÷!›([`:}ÈÙyöгß12EŸ‰Ó¼õmŒ°5ÇN¾Hµz„g!›Ë [^™JÅJ- ©äX»ãê'üô´D#ÌAνË2µ•-'¼ ùnlee LÇVîÍSØ»]·ÉÞÙõ€Â—Ýò6³]½µìø·êN,¸f×›vµº«ü; NxÏJ«ë9>»ö»Qþ¼Ù• V@Š0½£ÅŸðk¶(=š¾Wó=ˆ!ûÓ;ý€â Óë`ó¡û—o%ËYe9ÞÐ9¾© j„ÌJËŸ©Ú5}ø2ÝÕ5uU¨áe¥UœÌû«:ʘNucžÝwJvaÊ?ì¦ØŽý6ì*[[ŽGi”xeª÷.J)) ٯγwN«=ÖŽûŽhFoÔÊâÌ£ðžŒß¥IN’’ø ð&\…¼jüóQçöfBw¿ãŸäyM¯^*ÞR×ÙÁŽp²VtóîËCñ„éu_§ãû/^q:½—f„§!Ÿ6fù eϪû]L;¯ïB(ç¡ó^±Å޾ÁÒn\pW(®i¥Ù_)/¼SñâÑ — K™Î[+ÚîØu¡L‘Î' ›­”Oå;¿Y«ÙÞ®"ÃwV´Cx ršbQqÃÀ9Ès)›°ÕûšI˜žwz–G Ƽá»Ýä)”˜rbxxr ó&¦Hã=*I ÙFV’ó~Ó¯¹n°£Aððä ô—ŠÎAÎ@©¸àqÈæú{ŒëoÉ¥à@M d×íª»­¬³ï¡§„Ë—³×Ù]è©ÀÞè쎱^Umw¡ª»¨¦Vº© ÔvªJø)d­# jj» U%< YëCG œäjk‡¯òסòÚÕhCÓå/Díp²VtºØRé4…CÚ|RÑ¿6V׫Q­€¿F»Ôöœb¿ÂFüù=^ÛÒyuúF÷Aúì}†`‡þ~G¡ÿ¿þ<Ä«Ñý6Ÿ«‡ÃXªÙõ¥Î ³¢¨áéß§þ䓵?·j8,›Ç,™îR“Â{ìпD¡ß<÷ýî¶S_^ '$¬îÌ)S¸Ðp–m'¦~ðåóç/’ÂLˆ§ÐFÑÀ¢yRŠe²þ·s:sO|nËä¾IÃÔìF«I~¦PÌ: jË‹âmûŸéõ[ØWUžGk^Ù-ñx’<,ùÒ/yí^¤ÚõÔõq| /@¾`ÌY+ìIAÂB§Y(Ј=ž.ô/‰Õ/7^Þa%.F°>È8ÿñ¬œƒº]Ûëô)áAȳo“}øž@<}n9ÊA«u -¥6zcW+vÜrŽæd½Ú0j*þ°„xRj”“_¹ÕÝm·îó(Ø¡'þZö.ñd#ŠTåˆg!ŸM±¥‚JPMŠÿð 0æ¸dV-EÅŸ“fKí3Þ?BìºÞ Y-„ç) í,¬²¯Ÿ=+D±×Å´G[R•2Ü vsV, ¤Uê'üä+óRÃ7¹ÁÏKÒäI LÊõD/²^`RˆðÊ¡¢¾$-_hŽÙ 26‹¦ooÇ™…ðPF­ØYUVfÁç>vͪÍâ˜)Zž&z™Øpø0ErR&$>—ŽP'5ÞEjá•ÐÒl+‚KŸ•ø vÐ×ãøáUÈWµë3i©iŸz""´|Y«ÓP[_¢ânB~˜b±{ÜàºÜ€¼alìƒÌõt.q=>ü$u… â;Ef°*Džæò¡Þk„”‰=.#P¯4BJowWCS#Žò,§HKBÑ8Õ¡£ÀÈzîZœbùpÈV°‰X¸ y5›;¼ ù®qƒ ±|ØÙë\D\>„¬Õ‹uæëAn›Åб (ÍP”ƒù|;r' ç2ô"éãÀm°ªóÖ©bkQõ}ÄÂ(¡ˆ&þÔø}fhYªÈ~ã6Y­éÌo6UåôøÎ@žIÍ~ÂI4bs8y¾÷F@ÅÍÏBÖšCví“T¸ÚP¼`ŸÕÝ(¹j¦¨Ñ^ ÀuÈë)ÖÌ—慚܇|?{wžŠ aWj‘¬hD ÔŸÜìåÆÒœV‘}g“éCчŸëbtóëè^)ÿÛ¤sŠ~ƒ’þ"ѯHL™ÜHÛé`°ã9Ê&}þ&­4€ Ƙ˳<øÊñº£• cR·f¥x’+•â¬z(¬õÔŽPYŽb¶?”ÚÈ1H+9ªÃÆQèÊÑNêõ°qÔj‡í3ò±;jàJWzæ@Ø%IŒÜÌÐðøÊ)ýŠUu: U: ;;’Š Õ)J…èK¾:R—ìj•zE¦SP0˜ûK)Í놢½> n—×!_ïýÌŽŠ»¼9½•½De§â€7!ß4Ö™å#Tþ-à äcÊ=²”‹"ÅyhBëª6"¹ïò®DJòX;tƒj·L„&€Ó§{¯©3J²aÓ|V`®Ç\žÊ6ºí@§ÆÃNM¤áÕî‰ã,ðä{Æ|¢7.²õjµ}?ƒoRº/ˆúç°Onxn¹Y¢P"¼ûæm]d¯Ôý·YháCÈæãÊ>¦jLŠp!ïs§.á”ÕòG &ßÖÛÐIë’­4Š"µ¯ò±pb9 ¼ùŽ1Û‹¡‰‘ ­xNÐôê¡-V›N´.¹IŠ"e‘ª˜P:ã–’º·]™¤å·D#FW­Ö}.ku jGÅk׌Ûp¨@[(ªúDî7 ›ïöåB}úßôis'JÈÆW”"Sä)%!Œ‹ßЫ¥ÒCR±1·A³<¨ø³âÉšÆIÔ€À-•Ò‰Ef§¬h¥†Ð|©t ‹Ñmê ‰UÅ}Sh"?tVjÑQÚÐݦ[àn½½®Cž -¢ªV1½À$ð1äÇÆ-}”^Ì0‚Oc¯â4Úû´Õ±ZØk<%+­e­ùTü´„]ɳ¢ÁP{c€ûŠEUí8›#µZ™H4ío´{Ó-š¡ §Ég Û§Q%2= ªÀ<ä|êÓÈýÜâ4¨]Þ‚|«÷“H*n ¸YkõMÍ ¢â·!ß6¶© îºúÎ^a*öªÿ;ÀÇÍ;ßûîVàÔ¥l³…È'¢°N:mÒ1ºð³p쨼ͽî«V~P~ÉA2ÜàSíI |HqsžSΩúÜäE ¥½–^+›ä¼¥8ŽÐ©6¦Ø8Ä`x ²ÞÚIìì›bŇmsE§]NÏA>—M»ÌÏC>oÜ.§x'°Ëjö.£›¢4iØ4G OÙ'#nyàdó9Ò±ÐÖùœÛæÉ¨é0üù˜ªC¯´ƒ¸WŽÙ©Xim+kˆŠ?.!ž¬iH—Ez阩ߤ!Sš;f‡»ÝzØÚ[uÙxÜ»Rfû!Ûð×+WêvàøEe%ZÐU­_¢/N5>´Z§ ›ùD°Û ù\uWZ`g:.¨Hð<PZðJÙ«ÔÜœ Ry`r±÷~%—.A^êýBÅ} ¼ù’±®ÌÐl#œ<7Â)¿-öÞ”7#ˆÓeà#È̇’'A´< ó£ÐÔÍZh…ŠìòP\B£¡D-9|¢OBÔ=²©_ "€‡ J­ÿØÏC'¨v!Äex²Ö¼[­ ¡â?…¬5–tTÁR×-ZÅçk|+ÀçWp<§æ¾Åq"U]'²'_@þ˜ô›½³½:m)k\<‘z ùúbZ3K»Deh´@¯¦RTÜAàä9ãÖ9«E~¥êÔƒê®P'Õ¡‹8®A^ëýÐ%¢ŒQ±÷ ßË~Ì â×%Ä“5 é,]‡®q)”"AZ¶ ®R‰ÂΠ;Uw›o‹ìÕŽÛ¬–¥;‹´š[©—ªÍrû®Rôþšj-ù)àSÈz÷½cæëªÝÓj’p²V0&µîi F8 YkVÛñþ×»F<´šO·¬íú®´iÎû-ºg­qœ8× kuW):.—Ðt„FÞZ3^BÓ¦w÷ušÕ·¡Ý‰æÓZ4 J“À3Ó›žj¹DE¬ø‰EÏ4§h{4RX€l>E;Ììê;›GÑZIuÔ':«µ–ÚÔFý¢¤²w!ßÍ~¸¥â×$Ä“5˨=õ¥Ø7Š—­¨3#4õĢ­Dd 8y¦Ï½?q9 <Y«¯SëX¨¸Y`rÎX‡ÏZ÷%ýŽÐ;Ò‘7U5'†óÀGÍ7JŸz6?IìØu„ ¢™‘ˆT+F'Âÿj®Ð1½­f•ŸåÞqª”jZÜmR>Ct¦J˜^Ø §üÐEXÝ•ºÃ6Ýð-¢»úáà+{Ná>÷‘ëçn ô‘wì·Ê`LaTßç*Þájªï³ k¿Œ„˜%~оÀœâvQÕþ¯¡YP×=flº^ÙñT{ËkÐq›ÓÜ¿K8šAÅ¬Ö c.ßê}ÿCÅ®@Náž¿ª#CÅß–O¯™eIï@6¿»§ìAPñ«âIéíÇÞ´ŽéÇ”-6&¯[¦Þ‹QPñâÑw¢ÌèPÄâ1¬•U1–5š¿©^wô¢>¥Öu|ž“ÂÞÚrJA;{ž_²«áÔ@õn¢1oZ±  •jâMèZ”¼J£}¯øƒ ¤oõW­nA•«U¬o>¶ÞÚù­ÀWð/Yšgï9¿ý¦ÕE4f$Ä“u«Ý†Â4Sž}øíƒ7¯œ÷ ïÏñCgÆ_õÊ?°·Už”äÛß#ÉÊÊŠWþ®í¬åsó—s–›_Î-þA§³ábþ“|xôõ«—Ï×¼ü2æ%¥ñF?4$}c¼ûãolIékû„vè$oHœ2c¾ý€õAF ‹bPП¿‹>3LóÇ?ÓgÃÓU-Úéo&î”ÜzÝá“,^üLÙ¨yt’ÁÄ%ùÏõlø kÖÉ™©K4¥Ür«U÷ãÚžØä=çÇ&¿=ѵN\©‡³¡jyQ94à'­ïYÖ¯!ÿÚøu´rÚ|"aW—¤@ƒLð¬)ж3&!ÃZPŽ4ˆªì¬"Íj±Tý÷AT¡Èí3l®:µ0"aW6ÅZHšÏ…]ôw‰Gºöâ6 Œ9c÷ñÜbK~ã^ëÌòž„|2µ‚»?*nx ò©ìû *þ´„x27P9N ”ŠÝì£Rñ#šhÇÛÛÕÆŽ­ê=í‡M…|´÷ö±6A8y*{û â§%ì ß™}£kŒÏÊ>ÄX>Ô_û‚ML×>†èzzÓS5!Å4õ ®¦ªÈŒbZ9šŠf*=3vMÅ339?W D2Š~Žô´0] g„UUó†I|¤÷æ»3­ˆÜ£–æ°efTü”„x279\Ìc&!t³Oæ1ÿ¤å_m{n³¡jÈ%Ê1Cÿj61bõÕ¿¢â§%ì—5 ›í}ŒÂ&DÕ'û !0]û¡,éÁnC9rø(Ì‚p²–¡f"£Ò3ÛÆ¬M„~wLB<™›ˆt5´&"/#öÑDÆ`Sö°(“ªyŒÁ$3ô°Æ “Ø ì—‡EÅOI¨íaÅ–:ÂÕ±Õ(,n“ˆ¬XúkíF@ÅHˆ'¥ |öäÕ× ÿÂÀËr Ú(œµÚ†Hf ødµ9+Ó˜m?ê4è[“ô­I´ñОúâ;¥„³+øû┃Övq³ÊZ…ÞìÒ¡¬Úì.ÞI ÙåâÇÒIìY×`VñVËÃyö«§ŽpQ|W»áVw·é€Í®ÛŒâ_·LÕ ùøÎ•Òq$g.K|•{¨N‡Íã`mÌ3·îtï’wQ¦LÇ.í0¼Ë‹ÓBþbñã¥{$ÒL|—uð'Ü€lVo}ù\è%Ä•GßwKÜ‹õí|™èK‹EÆÖ묒A=ñ=îƒûýÎw2|Ü|+£CœQ«î¶Co¨LôÈæ çz×=$ò×°{»RöÙ‹lË.®—/ås—‹ü(Ír—‹ËÑOËÑOW¢Ÿ®ä•ß@RWùøPæ5ùe L§&g`6ae¶“+ä•É=!Â龀 m”­†ÿK¾THésÐ LïöÛ"CŠŒUVÊ_)°+ÅË­ÿ-séýÿšºž=GÂEÈ‹Æ|Ô‰HGüãf™)ü([`: ?×ÏLuþ8ÎAž3æw:ï9<é}4€­²«‹ê&ð¬ÍUÊ¿}ÄØ{®þ¡¾‡z™”¹ýp)ü¯x¥ãÃ"ÿÎ2ýx ?ÒW”_æ^€Pê _æ Ù\ëdÈY_¡oàGþ•KÅëü ñ%øJWT ¹?`l—7Äň_ÔñV×Úòáq wMýM¾{BÉÇ0|“«,R–6¿åV—º\¼‰—£–÷ºËêýÚ/@—PºÒ”}û…ö³ƒ}…²¦ÓÁŽŽ« W›]Pæõ5¸†|ؘ×%ÆÄqä¼íøùèÌ÷.™ Å/^eí¹Ží× Jx ò¥4Æç}#œw}W­Ô*/ÍÇ”þ¬ÓÎv4xÎçæiÛ9¬OþÑ¢Neþ ôÏBÖ‹†š©üTý³Õ߀Õo~þ:ð[Ðûí¿Y:ð ¨~“ªä“u€]`»á‡ùpÔ¿¢®o@‘P ùhô-ʘÒh4Ïî;AàxaíÙµFU}éêwàB˜Þhô¨äUjÌ»)'M-·ê¾s¼¼ç¾«Óâaþõ«uÏsüÀ_ u´ýƒòË|‡ Lωþ,z™½MHlÇn8Ë++5§ä£ß¢9ÍeuÂ’„RüFCÂÓ•­Ö…êÂje¿Wæfƒá4äicn9ÆÓÏ9>õPT£ÔA‘Žäsüóœz%n‚ar. ½¾häŽî”“Õê÷K H˜^Îôºz~ PÏ›t™¿Õ÷·+_‡{| Ó›éÝ&îÝÿûªg)¼{Oåí@]Y°&ìçzçʘÎxð)cUÛ¾ãzK#'ßûà*¡^UÛ E(%-5_bì°«Zj†µŽ„é-1^M2¬ÈóKÇ®* K˜Þä}Uß®4Þá{ð&4º7ß­ÑŒ6Bœà»w^Øìïµ6“Ô5úÐú!Uøƒ2‘* '4Z#‰-vô ¼Á¸¸k(®f¥Ùñ(ï¬×ðæLjà#‚ˆ?u¼¶¥óêôîóôÙú 7·ýüh×ÿd›kÖñjt¿Í}õ»ÙK5»¾$úÀ¢¨Ûé_>@ÿòÚŸ[u–ºoÝ¡ …öØ©;ߺÞÜežû~wÛ©/¯°²Ë£w8eŠä´ËvìÄè¬Ã¾|þ|ãEÒmgñÄ„‚ “Ò•úõ¿ûÓ™{âsó+õLš¤a;­6ù™ÞÄ7ë+¨1/JˆG4î¡×e…ùUÕ±}'R½²[â±~¢<Ø•:{É«÷"¯^O]#¥n=N#5IkÝ¿¿(¡~ÝÅmi`­_n¼¼CK\M"”}£Pñ‡%ÄÓïF‘¯ã‚¬U;±¥½±«;Î%‘ƒ!ĬAeÕ*Tü ñ¤Ú*tã@±Uä;ØY¶Š|¾­²-!°­âNC±U†ÐC·Š‡úÛ*Ch é¶ÊÔƒ(Âs7}Ç{ˇdÕaòÍÓO¤Ø@A%¨&Ýóü3Ç̪¨ø“âÑl Iãõ®Ÿ¸é¨Y-+­¡Žt|y•½xýìY!:œ,~ Õ Jó^)‡^%ØÍ© E[òb!¯¿ÀCÖŽWØÁ‹Å—uœ:-‹å6›A‹>ùÞ­ðo{n³^ÖxùâTÌÑkÍW¹Ç8¹Z%ðh“çrÙžç¾kµOþÄ£L˜”Œƒ¾²®þâš á=È÷Œ_c†1)bxH¢í«/5Ig2㎌¦Ý $ò«»–{ŒìŽš»çvw¤¤jw+‰v—ºš郩¾À‰85彆º®²Z3¡¸C™éªäϤ®«äâõ\W€ô‘Œtµ\ñ¢Ë]ôùÎÛ´WùàŒqLï.²Í(=íOBi•(5G¯éÛÛI °'ž¢¶*;zTü€„x4½ó¦th¬›&+>pð0,Y‘]¹NBžÔ!ÇIw‘ZxåtÁ¬Á“¥Ï¿-¾5(^…|U»>?I˜píSOŽB„Ö ?HÍìÃýSq·!kù® Å&Ü-§â®7 oh5CGÝjd '€O ?I]!C…øN‘Ù1XÕ1|ÒJsI$Q#¨¸aàaëƒ,=½ÒˆcQ­q”Æ}C8Ê3"UEVO>F„Ž /¤¶4säÃq[uÀ&b"#é*äÕlìð.仯 6Äò{ÜÞ«Ö€!›ÏÀŸ"ßÌbè]”.!Ê $î Ëi„'º¼ü2®Û`Uç­S¥ñKã}æ`„Ò;Ó©8mGÙoÜ&«5ý€ùÍF£ª<‚B³™¸†'’hÄæ$pò|›ž…|Ö¸¡NR’KºÈíÖÕÝ(áj¦¨Ñ^ ÀuÈë)ÖLB8ŸYIMîC¾Ÿ½;OÅ?OÖ4¤eÃÉÍ^nü MÀ™ÑšºX[¡—Æ´}ø¹.F7¿¦N’–—rï–+~ƒñ"ù®HËKÙÕHÛ)B°ã9Ê&±Ÿ>„l>L0Æ\žY&9 G£“he˜ åY)Þ)-0YõPX1êéO£üÓVǾ[J#Ç -;©§¡+§­ÞøØ ÃÆi¡‘ÝQWºR&Âö(ÙSäf††G9ýø¯hPQU'"|ø²¹ Õ)JOèK¾:ÒsSê=™2(aÌu°”æuCÑ/ n—×!_ïýÌŽŠ»¼ùF[Þ„|ÓXg”‘Qù·€+Íc•{ä3PFéôÈûCZWµ‘Š'”ާ¤Ô!µ¯ª©vËDh8 yº÷šš“pÆj-À6Ígæz=ån~ï”®™‡©qµ{câ‰D½|Çv6BC¾ÑÙ:‘äŒýˆñ&¥[ò‚¨ûä†ç–›¥Ðo“b—Ù+uÿmÚG˜Þú>¦U*äÓ)ÃQ-îj;œ¬¥Ÿjã7fµ'¸cVG¤Å^Y#7<ù˜±NœãI›ßíTJ;­›/míÆÆ‚òØBç€w!›/†)- ÐX}[ΡxÂôÇ–‘n[ud!:À£ö^—ÏI8eµ6Z &ßÖÛÐIë’6£¸“UšMGév•S¬ËiàÈwŒÙ^ ÕHŒt`huÀs‚¦WGœ4¾.¹IŠ"åóP1B£]ëXuo»2IËo‰GŒ®ïBÖêÔ4ŽŠ+× ¯·áP¶PTõ‰8Ün@6ßíË…ú$ô¿éÓæN “¯(E ¦ÈSº>wó½WK¥ŸJÅJŽPÖƒVB1§Â'ï’bó)}À½JâÍÜ-ÕZ&þ‡O!›oñ.Ú­õR»}ʱý.LøÍª–Y„"J=t¯-ó¢TlL@Ÿ¬L¢«ˆ'kK¨½±Ì}Å¢ªv\‚!ŽZ­älšF9Ú½­‰éŒÏ¶Oþ^4(jPæ!çµë0ig? 5¨]Þ‚|+EKXÞ¹"\¬µ.®6A¡â·!ß6¶© >©ôùV²ªy“;ÀÇÍÝ¢ûîVàÔ¥<ô…h¶ª®ïátJ:àÊ»í­Êûð×|>L÷“~P~Ë‘Br¼ù~jsáIÊ¢êñûRN9§:^¶¢Þð¨ÕJߨke[F5¦çáÑyS¦Ø8Ä`x ²Þªf¬WEù¥Â¶¹¢Ó.§ç ŸË¦]æ€ç!Ÿ7n—S¼Øe5{—ÙUŸŸ I1º‡ä»U‡åù-Ú£ûµæÿØ âE Ƈ€W _é½NKã¢Æe¥L×⟬i\G ìÑ2€¸€­Èî™Ð| ›ÕWj~/¼S«ùmìP¹él·ªVÕÃÀkµÚUM«o ínt¶iÖêt#þÉšÆMÔ€ÀÞhõhëæ¾"½[Peƒ–A§XZy®ÖQDÀ’åëÍÚf8·ÞæûÞ´¤ÎG.«j6±=”ä^kö-´az·k•UŠŠ¿-!ž¬iH5ÐCÍÞσP(R» M&‡<®­Õ]”æ×y\ -ñݾ ¡K”ˆ^‚|Éh’–j]>>†¬µHñ“‹DüK÷twÛ«¨:ŸDsxò=]ºüË7€ŸCþ¼÷3V*î2ð ä'½ïë¤ØÚ)ÞSîd¨ø/$Ä“5;¨=êëxôEj¤àÃ@ó¾n¨{m^ýÖ9<ùQ_ÖQG<2F’6'­6—Yà ÈéK´]*î0ðSÈæ±Ä–º®]Ô*>Oü+RÌz´KXsßâ|–ª®Ù“À/ ››Ü›½³½:íÑkÜä¹ ›»kuJI§unA•i ÑºªšJQq­ö¡ÏƒVë`çbµÈ¯TzPÝꤺTH× ¯õ~èZ•”åä{ÙTüº„x²¦±†Ø›¡k\ ¤HšhxØ2¸›&öw:ˆÝ¨ºÛtº©È^í¸ÍjYºJ«ô•z©Ú,·/Eo௩Ö2‘Ÿ>…¬ç.ÅÕîÀ‹uÕîi5I(ÂhjÅkTëžÖ¡a„£G•þz׈‡VóéÚº]ß•ö:y¿E×5ÎÔç1àd­î*EÇå>šŽÐÈ»SkÆûh:Âô.O³ºó6´;Ñ|ð(Dixò™þºD%¼Yë´Žz#å€Èæê3»úÎÞõ[­¤:ê‹ÀUÈ«½õïI*+¹‹Y·Tüš„x²¦!%?îå¨/R$H—î†æ£þˆù´•ˆLg Ïô¹÷'.'g kõuj 'â³å¬Ö•OC>[h]@õ;bI'•TÕœŠ+œ ?2fúÔ³ù@¾9Å`¢™‘ÂT£ÓâÀg5×ètÕV³ÊÇï8ÕFøÅ¡Wå£0UÂôVÝž†/PuÓn̦¾Eü |eω¶Ô¹\?ˆø ¡¼c¿­¸MÇqP}ŸGx‡G©¾Ï‚¬=üvW×Z¼SÜ.ªÚÿcÐ#”®5Ø쑊M—Ò9ªö–Djx²VHƒ„Ž á¤&WÞ‚|«÷ýw¸9…}6UG†Š¿-¡ö>›š##®£‹¡XwÎÚƒ âW%Ä“5ÏQ{´ފĬH.„-Óýó.Z·Û¢Ý-º«UñüvþíÎy>Ú„£)nní8u¶ãz•¿vë]-h„%¥8|ù™qsŸ9¿ó6âÚf±ÜiJƒˆؤ×6ùD*6ÙÜ#R6*~^B<)½ý؛և˜²gðÚ_¢Q|+ˆG³?˜4¥C¦r@B<)ÍÆÛéQUçÏ­¨7"4š`©ÝÏ¡„G 1V“ÕÐ ç…¢™ƒœVH¬Ür¿Š~ˆBmt›Öm宨~ ùKãW˜¬´/Ò*;§/P“/¬ŽŒ ©ªÏ¢¬fÄh x ò©Þ«Ù ØáiȧÛh©CÍj¤M‘ZEQu[ñ[p)ZU±ˆ,J²!é‘÷Ì~_ñ•uêKè¡È… —Ñ)Y§xÖe"Fs–Á§šNQq£ÀãÍÏö_±°è./ypaðYkíT¶wªáÐò‚óÞ.Õ]U¥"¶'€O!›O±½#'­´c×·Cæn©ÔŒb¦ª*ÙWP,B£Û"ñ«jÛžÛl¨ªq9 œ‡œAèæ¯ Í„Rø&Æ:'Ýæ+Óu£ZØûK¶må«*q\>…l®TSè]ùeÄm‡ÖØ”7é~%"4ºX[êÄ›²ã—¼J£=üÀÝ£_Z}u‚©ø Íœàý¦t^YÑf©@<†µ2¿^gv5Ôèzè轕.ÔU|äxö™"ѯÑd„foöZ㛈†>g›¦R /Åaà4לú¨¸Ï€w k­9©u‰TÜYà*dó5¦‰æØaïG­ª*“»À'Ÿ3ú¢äzžã7ÜzÙî\#buÐ諞û¶µ5: ^ÀWäé¢[É ½ÐJœåþò5ÔœPLݵNóÅ–:ö—¡OS[0x…Ò~iõµ¯¤â$4ë+éoÇÆž]om¤(òû•u˜¿Â¿øÃU2üŽ¢UþK=+~šuÚ¼ l>ŽíPpæjÕ}ǵ7’óžóc“è:—W©³M·Z^TÎmAôK¶r8BÃ×Qî”@A`W§¤@ƒlð¬) =&a—Û­Y+Ê!¬QƒU¤Y-V¢®'ìÍ ¢ ‡!›+‡N-ŒHØ• ]±’柼נ5+!uZ±¥¿ñÏÙ³>(ø ðäc©œØóQq£À9ÈsæÚ j›Tüq »â„df›R$ì~Ø&»ØGÛ¤âG$ì‘mîjК•03Û¤3´M*nØGÛ¤âKØ/ÛžM—k‘•m ‚°¶Iψ„æ¶Ùñövµ±c«Nj†`„G!í½} Á&§ OeoôLKØ83ûÓÊáþ؇dý´\Üjaºö1DÁ›žª`–Ïq ²–¦ª¼rœ†l®™ÊBÅÏHصF–™H»öý0…ÐÎ>ÈHü“Ö¢µÅ<› ÌpMöq¡â§%ì×2 ›í}ŒÂ&DÕ'û !0]ûàñô‚݆rʽQ˜á d­NTÍDF¥g¶Y›ýx27‘1˜ÅXLD^¾ì£‰ŒÁ,¦k"ƒ#YÕ<Æ`„G é½yŒA'± Ée­ËÌ<¨ø) ñ¤ôö#\[òÁ¢:Á8Pߨ¨ø ñ¤TƒÏž¼ú:á_xYŽáó+ê£g!k¥d4«™FL·©vša’¾%NSí©/¾|9èƒýrúû¿×—ßÂccVY¿…ÞìÒ¡¬Ú켓@³\ËK'±g}³ˆÇ°Z>›gÒ)z:›æ7+?,γfUjó¯â$Þ N$ü-*ð3ÈŸ¾íUç’[wk('†I|™¼á#ÈŒ_¦8E­mÏ“çÑà†ãùnÝ®2ß~[©oûÌ _@™tD ‹‹Æ¤¯Ô¨ïˆw$Ä‹,5ÜF5BöŽ,ªëð÷`K(åž1d~¨&L+º]«LëPù¡õ8šjA'-ªÇ–öÃõf-t!K¼›XÔ¨Ë*ˆVSÕõþ †²¦Ól̳taŽ#¶³/±‹J”ߥþ„RøÃwYüXï\™¯ Ž„‹ù~*»²-•åÛÔÕ´Z„"WµyØdu5ýe LGM¯Ï³×¾Ã½B¿­«üjH¹ÌSôñß e×^YÉ{ Lxòucò§æÙ+Çak?šÙÖh°Å-e’>ˆž‚|ʘäR)yXzªedE»¡ŽMÝh¦„K—ŒYŸ.u¸©Q ¯Fš×`Ù3ÂÓO³<ØÉR™Õ[0!<ù 1«;Œu֗ͯW­²Ë× t…ʧΈ"Ÿå Œ6«èÇRÕõµº§w M˜^€¦u"ïQ8áä>ô“»([`:ýäép8wëçVyeÇú鬊‰,ÿÌþ:U{ø¬¼E ê±EÜxsyåJÔÁ”òW ìrÝÒ0à߃$azë~§6éÎa»,o¡c küw@Œ0½üSNRv…‘gôò%uŠ-Âô܉¥dІĉܢDn½ÌßSÂô™û?Åš[YH›'íÊu¼ eXÔx‘?‚<á}È÷ûÐKý}”-0^êá<{±î³Mϱh9kEîáñl.aÅ}ÍS/7 Ïñ£kSÈ„Ájáö¶ºo÷ï‚>¡øÐøUŽ|Е)û÷@†ðä#ÆÄÆ‹:Õkê«5ÿ>XŠ=]óÝžãŒí^æÝ{Ø·/XØÛ‡ýü‹õEu‚ÿH‡lu†.s‚/Ö%†×4þú©œ ^‘jhr‚ÊüþCp"œƒ<×wì?Bá„é¹cWcÆéËí•áFØ_yÓW!_í õå´©ÿ#ÐýG=§~%mêÿtÿqªÔÕGÆ‚²šíÐ1æóO­¨¯˜Îý<-]<ÔŸOðyà[;ÄKä)3ýQ[„feäßÞ›gÏZ C÷+ ²éP<Ãj…GObvô6…{·ãVó]V XÉVßúüg Nxò=ã×X™gu—"ˆÓÎm”‹LlÇ»ã~'LþÖöv™]ò\ßÇk)¿À?iÂÈ+Æ/pî=ùC¾ócþR‘ÎoÝ b§¾ìÝfÀ½fùÈ‚„ç Ÿû9xoÿdþ…•¦÷v8òÞ<§A½è²†ò/Á…ð0äÃæýà ýGJvñ‹!;öký¨Áô?»ÿ4Õþ tæø-Ôb)Ÿ³s…ÜfNƒàR„é9sXqIÓ þs!Lï ‹†÷¿Aá„éyp…FÜrË*¹«»…¨iWùÿ5Ö_þ Ð$,@6O49OÁ)6•ëý Ìé¿Bq¢qÒ|M¨Ñán‰{¡Ò-«WÛÿ´Ó[ºÜI±cû6jàhAEŸ÷®„—!_6æ}zÞï5”ò¿3ÂÓO³<:Ï.OàWv¿~>Pfö¿BœÕ׌¶%ÿöf”7å;?pù=ë²Ýþ«Ëû߀2áMÈéå}SvëAàøA‚SNÅý·–é$Aþ­úä€ÊOjU༷kªÈgõÁÉazíÿ.›*H:Pýßá­j×À@\Æge:ÿ½ÝÓØ†(Õ š ·º»­œ¤ã_YÑ8Dx rš©z‚jRqÃÀ9ÈZ S Å&\áùWÐLÂô\¼+ìQ¥Z çq´kà³<šÂ_¼­ª0Dìðdó3áÊ—¾þu#ÐlÕco½Õ KÌç §©@ zKÅCÖR 5½¥â€' kåhï<è·­¥ ”3²›O §—Û“n9vÕwúUÒÉ?ëg‡™¨VÀŸÐÆÛ¼m&þük¼¶¥óêôîKUôÙú a)ýüÈtO¶¹fý¯F÷Ûo)ŒvÀЇFmB»­Fù™5ë-¨5/JˆG´î¥×i]\`_U:¹Àu¯ì–xš*„¯³—¼~/Fõë©ëät²7d­_´(! ±!ªÛ:˜Äë—/ïÇðQöáûêóJpêvm¯«Ø„1˾Yµ DB<}o9àèaÈZÕ[êлZ±ãfÁr¸×#õêèY¨ø£âI©Y†¾¢Qå.Ç™œ„<™b“• šXñ`ÌzVM"‡•<Ø~4›dÐx©hM °+¬‡fµÜ–NÔìFƒ6”WÙ‹×Ïž¢¼Êâ? èÜ\¥ŽU•`7§¾]#‡À» ù¶ñ¬1Öpý =;ø±b±Xh[ã)Ë ”ú]±êlG§_¬«¿…§l òšñ[Ì0&¥Ÿ§sv/_o¨/©Ž‚ÿ'!Ϥh³M:á— œTÖ˜;½ËÊf©ø »¦wŠ6{Ì”õ˜&z™Ø,ܰ[Er°DÂIÈZÝ;'5ÞEjá•P¢Áv>/°ô‘AŽÏÆ4(^…|U»>“¹öÙŽêPI„Ö ?HѧLXÛ¢ânB~˜b± k[TÜ5àä ­fè¨[<ÏÄàð ä'©+Ä`¨ß)2›”žCmìµFH†—'·W!í‹§èE-²'[Ìo8¥Ê£ äÍ€ÔÈ<íßÑSò«|8d«Ø„à*äÕlìð.仯 6Äò‰d ×€!kõb\ž–-»Y  tްB'#k›•º8ºÇ“Gß#³þqà6XÕyëT‘(Wõ}¤9‹œáÝÔA¤%²"ûÛdµ¦ð+Uåô øù‡±öðžH¢›“ÀyÈó½7*nxòYã†:É*\m(EÏê.ÏŽ+t¬¨Ñ^ ÀuÈë)ÖLB$Ë IMîC¾Ÿ½;OÅ?OÖ4¡êOnörãiº­ÈLâ[QGÇt˜qFs]Œn~ ï8°]®øª½v¡<û{¨ÝôS”JÙsxDš`Çs”;Lb/–‡Vk 0læ Æ˜ËSßúÊ)º$¦e z7#Å“Ît¥8« +&ô«¹L¡ü)«=ÛJmä¤E&Õac º2eõÆÇN6¦¬vª#»3úPAöIðÙ^hfp3CÃÛòÜÿ *ªê4ž‚IÅÎΆêĉھä«ó‚RÂV«Ô{(2•¢Âñ‘ùKwdÞk^7í;jp» ¼ùzïgvTÜà È7z¯ìTÜð&䛯:3 œù—Ê¿\¼bÌC¹G–|æ{äý¡ ­«Úˆ”bUÞ2I©Ck_½Qí–‰Ðpòtï5uV™vs6ÍgºÞå’?ÏÜÍïRØ5¿«„ÅÜó*eG»7–r¤Y÷ÚhÈ÷!zã"['’œ±1ÞäÁ{ƒ¨ûä†ç–›¥Ðo‹ºoÞÖE ˆ¤ú&Ç }„1ø5ßdSŽÿ?‡Â ¥ýö”‡á¨w5ÈÎ@Nok&qÜ âÆ€³g{oTÜ ðäcÆ:qŽéŠRÌ·Ca íÆÆ‚òØ2'=wÛ˜õØ"oî÷ØrŦ?¶Œl5ëRúYˆÎð(d­Sjº|BB1ý™2n˜|[om~¯KÚ̯ðh_¶·Í…%nPïÕvÓÀ;ï³½ª‘é0ÀÐê€çM¯ŽpÐ|]’.v«ª›tgÍðÄZœº·]™¤å·D#FWw!ku jGÅk׌Ûp¨@[(ªúDî7 ›ïöåB}úÏ/ÔÛQ0!¾¢)˜"Ï“PÂä\ŠM•°TzX*6æ’tVƒVBš®|%ÎÚåïC_„»OÌ©ðÉ»¤Ø|Jpïŧý_wKµ–‰ÿaàSÈæ[¼‹vk½ÔnŸil¿ ~³ªeJãR\”ì^YfN*6&ägV&AÅ_OÖ4¤uìZæ¾bQU;`ˆ„£V+/±¦QŽvo‡Gkgb:㳆퓿 ŠT'€yÈy£‰Bl–\>jP»¼ùVŠ6–°¼CÅ-W k­‹«MP¨¸EàmÈæG¹'ŠÔb{Ê‹Ääð1ds·è¾»8õö)V¿ÍV(ªðØö­®¼ÛÞª¼ÍçÃãå÷8)$Çûï§6ž¤è­dª³áóVÔ;…œÁúËyTaz7eŠC ¦Ç ë­jÆzUˆ^|E§]NÏA>—M»Ì%Ù°]NñN`—Õì]F—Éi…à§¥ïÕbyàdóÕ‹cÈeѰ+¡ñ9K4ûSzóÐæ¼Õ±‹ÒkÇlA*vò\ö\B”Z¸Ÿ_ÒRíýˆË,ðä)QBïGÅ~ ùScí]ê:T«ø´!y"ë[Í}‹ýU]'²'_@þ˜ô[/jœ,»›»`™Þ÷Œ]+Ô9•/Úój*EÅÎA6ï—ÏÅj‘_©†Ó±ê®P'Õ¡‹8®A^ëýÐ%Ö¨Ø{ïe?fPñëâÉš†r¤‡C׸tiV‘ íæ ÎJŠùF±ܶdW‹ìY(J&¯±R/U›åöaÄè ü5ÕZ&òSÀ§õVûâjwàźj÷TDMŽ@Öº ®Ö=¡a„£µŠ:Þÿz׈‡Vóé…]ß•æÞ¼ß¢‹g<ˆó˜ÕÚIå²Vw•¢ã²„¦#4òîÔšq MG˜ÞáöiVw( ­h¾‚Îu=¢4 <ùL]¢’^€¬µz¬ÞH9`rÁ¸‘‡3êwö®ßj%ÕQŸè\®B^íý¨/…P±w!ßÍ~¸¥â×$Ä“5K¨=õ¥Ë­ŠéHü0Ð|Ô1Ÿ¶‘)à ä™>÷þÄå$ð d­¾N­c¡âf9È9c>[hˆö;îÖJ+çªjN ç ?2fúÔ³ù†T°c×q'˜fFâRpVéÊÏj®ÐjÿV³Êkì8ÕFøÅ&¬òRä2L•0½{ÁOyÖ‘°º).(%Åeœpð•=§ðÇ(¬wý| î…>òŽý¶BѼé^‘êûHùËS|ŸY{øiC\**ñ“4…(±¼"Õ« G(?ÍÂÄ ßt½²ã©ö–W¡„7!k]±Ièv©¸ðä[½ï¨¸sÀÈ)\äQud¨øÛâéµ#sYRĘl»YyTüª„xRzû±7­Ýþ˜²EÞÂk–©÷bTTü€„x4»„ S:×­hñS ÃZyLÇyp7¾GE£šØ¾Ž.K0?ìVÇ£ŽÖŽtKŸˆQPõen Y C6ß‹"ŸŠN#wt«ÊG§ÒGµàãÔYð.|K·TêM·é·ï‹(¯H¹)x”¡O,Ý(CòoŸ>áéÍZ ©MÜZƒÖ8Üp(—˜ÓàÍ? lÛõøùRñ6¨I·ð„é Ü—x}ÇPô l³z‚ÑüLŒ`ЬWÀ”ð’Õš¥<†óxˆßWÈ4®CÖÒzµq|†Fø9äÏ{?ŽSq—O ›Å€ò,aJLød½­½Ô" l[r›Êiȱ˜Î@Öšzªi'âlÎBÎàÚŸÖÓì@Cç» qV‡(ÌOB>Ù#Å'‘˪[#Äë3àÈW²QŒ³VÛù=kiÆPTWŒSÀk¯+ÆáÈ£iÚÕên詨Ÿ$:× ›¯1LÚ†ç6h´s”½ iZ—oΰ&Þ”¿äUíÓûø¡TâªÕWÐÌ;2¥CkÎcâ1¬•Ar·™¬¡M!õjò·Æ7››¡ÇVÚ±=Õqާ!§õÁ©5vŠÝœ¬·²+ÿv™ú»c*„Û¹ÁNÅ+·\[ìF†¾»ªFßYàçµ¼¶Þh2ÄO‘º[Ѽϗ£sÕÝh1-tÎ)KϧRò ½£ïª¾Ë=è!á#Èæè]»]hU6ÍFE}cVëïØ ‡œƒ(+aí¸ïhR¹×]ïuËp‡)¶Ô‘°× ìJ5n=D”vßêkKÅHhÖãÒߎM öåÛHÕõ€Õýo 8 Y«‡áÌN›VÑ8&!ž¬ÛM ¸’¢ú|ACÓfe{ÛñƒÐÔŠ©ö¡Wb­ª s©È•Úv…º~"@õ…6ð„_@6?¢¸±ë6ÙŽýÖánb´ûc³-çºÉ;ߌââšRƒºS79“{Ò«H¡üZ¦<:FìTÑ’Oí„>p¹â®ű}[!ǘQi{v½ä ž-7åRZÇK±“ÿük)P*­qùnµ)nLóÓ\P¹h )h e¾[ [1ôTê•›Žò^ÜçxƒÏ;e÷¹Á÷â¨Ah¯0 ÖK?Ùå2=ü>gØ"•zûb¸Î!^i R^jíÉJ˜_sCeS$Hk0“ÀYÈi.>$Lm©¸aà1Ȝڕ–PS¼M1P`µ~x²Ö9ø=Õb’«ÅM;Dú%ŠyàUÈi.>ì¡9à5ÈZ‹êŠñ)ð:äëæ³FbpÃj/”b½8eÕ8ÈU£ìÔýJ°ûò‚ ö“ÀӼǑ TÜ0ðSÈZ÷8Ô”CrmäÐ5†Ê1Ï/`´|òoš|„dïqø_yžÞƒ|/u݉2 oºï5"²>ƒ²ÆdÄî•â<ƒ²ÎYdÄî•â<ƒ²J!ã gºã¾e´Óªì#>‹,–ãä¥ì§DÏQ+әͮWùN=tÛÞ†žvYèÜ©’{B„RWCrOüf­f{?ŠGZoÖ6)`©X¢ÔŽ]ÚaU7:FÅ÷”±‰Î¸×Z©sŸZõu¾Ä+J~©á댿³wé¦=íï+ú $ÅQ­Cõ=Ú$^Ç€g §yì3¡³¢âŽss½ï¬¨¸ à•½+óU 0Wfe[+­4Z ÜÐüÍ#·G1¤#iõ€åéàµ*ÿWàL(à200ù[Ǥäµvµ±CÙj//][LÒº¤»_CÁ¿Fkë¶¶š²!< ù´qëÎ,Ò†Ø[ÇÛe~âÉiµqbÀkõlĵܬÔrÑÞ*ËsÊ ÷õ&:li΢Õî5ëµÕòÔ°áö-*·ÒkháÈéy“#o|§”pPä^û—Vš=“rIÅHˆ'k¿B Ô¯½vOÇÖ[7zùýÚŠöKyÌ2É/¿ß´ºˆÆŒ„x²nµß ¥šéð>üöÁ›WÎû†÷M]Ô_õÊ?°·ÕÍf¥Zþö÷QÖ¡å••¯ü]ûŽV>79W`¹ùåÜâqê&EgÄ{Ë„7}ýjãåóõ/¿ŒyÍßâÕµeÒ7Æ»¿1þÆ–4’¾¶OèGò¬y¯÷Hì艳Èò¡ö;XtŠþü]ôÙþþá×_?ºˆ[UCÝ¿´¢Ï‡©ÀôùÿLŸ ÿMWÅ àûÃ_}ùêɯK¨'þcЮ§Ñî&î”Üz=êKïFßëþÎòRë¼µg)¨5–^†ÿûÒÙ©í|½ô’ëÍõòõ«ËËöæÍË—n,A…¬ŽîûƒöÛo‹oÒ$~Åp”Œ¦ýp»Uþk=;~šuºGØõrt›tË­VÝwä¥Ë>ÚÇlB`ÊöÁ7ÑUíc 61–­}ŒA)Çúk¸?ÚÂ~Ù‡tJµö1›¨ûdã° )»Wt)^Õ<Æa„ºWã0 Â>ºWTü”„ýr¯¤åý0 ˜ÄDÍc&!0åé9-áþ l 0Š +ÓéùŒ‚°Ós*~FBíéyl©#\![½Ö;²d“@ý b£ OJ0øìÉ«¯þ…—å>´e?gµÏ¹ÌY}‰È Ó˜k?ê4è[“‘ÚyhO}I>«÷küýoâõåãű1«¬o 7»t(«6{ƒwhv~ïÄÇÒIìY¿µ¢W ÃjÉ5Ø‹,:<”¯%Û£4ŽŸG™ÆÛ‹‹ÊD‡Ê"ÌAÎ=Ü`˜tDX×wàBs2)m½JäñW([`:ÇdçæÙzY:÷Äã"UêÛ‰q0ùÙàD8Y«³êà÷YWû‘ŽE;l•mÙ¥Àõò¥ÝꢆÂm‚$ág?3&¼CXœK7ã[GÂEÈ‹Æ|ÏÄñ²ÇþŽ<ËàFx²ÖIrCƒqP¶Àt æÐ<{°c×·yxëjr¼˜DZ[ ²Õú  i}¾—p… Ï}üݶg—+NøÕªûŽîLlV›NN½µ·ñ „éÅ¿yô±VÔz+þÛ¼ïV+åð;<ŠúËìàA~ÔÕ­ lé¨.›g¯9‘ ]Ô’ÒŒ+ÓüÔdfLóá^nE§Z´4œ'!/0‘öZ½å}B)Zæ-_EÙÍÜÇ!c>5+r¦ã>^œg¿´=t?ºm¥1ù«¶ö¯”}Æwõ¶Žz#¼ù¢ùÀ^–\ÞrÅ®¹õ2´3ÔS;TІW)9¦ Ž„é ì'Ë]](®5^^º|Ic¼OBÖº÷‘—58þ^?¦ÊñÔõ¨AÒ1ÂSOéÎé?¼½ó¦ìÖƒ ìál™Šó­4Gõ>…ʰÇ3õDê@`:õñdž=¢`¸äøQDAÉfQR'–ç9+–//¶"¿ æ,¿ R©û•²CQU”ß§‰w |ù‰ñûïÀpò¨1ŸÓ{û;Ê,߃áiȧYþ‚±˜›ÖË— ¬í„mVíÒ¡F'èçw;•Ài»e× B[BY½çÜÅ»þò/úÐmü5Êhæ¢Móù½¹eÓqÑÌ·‚Ž–¢Oa»;^hæäµ¡wÛÜrdÓGµf5¨4ª­ˆî–ò›ü;¨MBq+üñ›™gaw´åðØ¤Šêå@†ðä#ÆÄn$-¢†–_`Ô¤³pô÷À˜Ð,Ê«üÛë»2ײÿ«:½ÙA˜ð:äëÆä ,~¹í9»·.µ»¬ËEŽêïƒ&a²yÆå¥FÒÜWt»¢šCÎýï‚)áä%cÖŸ%Tt£R—)ëþ÷@’0½õÛó¬7«·ÿ>ž‡|¾£×€²¦ãô>œ§ä¡Kè¼<;|ÎEέ¬:QøpºSMŽaÕÙvêå(÷;g¯ø‡‰¯ò@Ÿ0½5›có´QâÞmYèýŠ«Nï?%Âô2X=Pèhqߣª?¢¬õ:–ö=azãòÝëÒz‰â„w!ßýÙvÿ ÿQŸ»‹Œ²¦Ó]|1/Õ{g{už0¦ÎjŸ‡êŒ" GçMJÁYö\ž¯…ÒKGiÁ)7µï$fM|£‚· L/+Äú<„Zw‘ð¡=»š^=JAànm‘ÏÒæ^tÝ.z5¨´ò{üSp'\‡¼nü‘ºLž)ÙF ZÎi蘆t+[NÕwò^³^ÙÊ_Y^dwØ¥âr½X×ÝûÿÁŸpò†ñ»\ìp­—÷ÜIPçüÏÀ“0½Uæ[ œeõQçÿÏÁ™ðä[Ù,DþÅý'©v*ê•? !žÔªÀyo×Âq\®¦oñÚÿ"›*H:­ô/ðÖjà#׉?ÿ¯mé¼:}£û }v€>C§C?Zg9ÙæšõC¼ÝoóP=HÓRÍ®/µí¿(j÷Gú·п½öçVí†åòZ³Ý3ßöØ©;´Œ[¦±ÈsßÕòJè­óáË)WúÅN8ž%hÓðƒ/Ÿ?ßx‘øH<1s_Ñ4)E×ZÿÛ¹?¹'>oiŒvt­GfRÝÝvë­fù™Æå2ë00ʵhßÿFsmc}Uulš?’ö•ÝR³æÔƒ(À|8a|Ékø¢¨aO]/À™0fuC“·V@®KâÑ ‘œúµ”Äì—/ïÇ0@>¢Ã,~~Ci"ŠýˆW’¯¨dÕ.Tü”„]WTúØ.r”®£VëªtJí2ôÆ®Vì8EŽ‘6Y¯FŒ†ŠŸ–°ëjaÃŒ|µ‰jT9<ÓAÈSl” Tã¬EŽuò¡ì…Š?,!ÍF4öã‡Ð»®4iV˪lµyœ‹§[/^?{VˆÖÄ~8TÑÒU¥Lé-ƒÝ\bn¤=”|\…¼jükŒ5\Ÿ§ ìäÇŠÅb¡µÁKv/´…Óyå·|¬A^3~‹:;ŽW ŠátX{Æ; BüŸ„<“¢Õ6}{;)J•%®¯wÍõ²²Zqk^`×\OÑj™Ò¡mê ñhÒ¡—‰ëá‡a·ŠäÄMÂIÈ“:ä8©ñ.R t ×ÝŠ¹u½v>3Ó |xòU£‘2®>÷ÙŽê`I„Ö ?HÍìÓŽPq·!?L±Ø=®”^n@ÞÐj†ŽºÕHIC Ÿ@~’ºB † ñ"³Ié9ÔÆ^k„dÈÜe¶4Ý5+T„G kͬ:êý(ÏÏè7œRe«B‘«Ã1[£Ž /¤æ[ùpÈV° ÀUÈZ>‘zƒÞ…|׸Á†X~3{µÑð!d­^¬óLgÙÙ²›Õ`±À*<ázÉ­mVê¡ñ|ì|-ú†™(ï}L)Ì«Î[§úg:“Þç €0æH§®ƒÈ‘ókµ¦0¿ÙhT•GЃàChäÆÚÃOx"‰F@lNç!Ï÷Þ¨¸YàYÈgê$«l!÷z”©NèXQ£½€ë×S¬™=âx5¹ù~öî<ÿ@BŒR'kÅ“V‹SœU…úUŠ\¤ÒÖl(µ‘c™T‡)èÊ”Õ;aؘ²Ú1v|쎸R}’BûPhfp3å³A4¨¨ªÓ4z vv$;;ª'jû’¯Ž#%J©öŠL§¡`„g!ëÌ{Í놢H n—×!_ïýÌŽŠ»¼ùF[Þ„|ÓXgÔSŒRù·€+W²ï‘%Ÿ9ÅyhBëª6"åC—7MRêÇȤ‹[^kKóã»e"4œ¶Z‘Çz­©³δ›Ë°i>£LÉ,Jën~ï”®ùÝýrß:žG7u{c)¹ˆu¯†|¢7.²u"ÉûãMJ æQÿöÉ Ï-7Ktk“wß¼­‹ì•ºÿ&üŽ;¤®ù&û˜rôÃ9N(íº§ ýoú´¹%/å+J‘‚)ò< Å!ÌAÎ¥ØT K¥‡¥bç!k­]› TüY ñdMãj@`–Jé0’"³ÓV´RCh¾T:ÐÅèöמâ¤â§%Ô?ÅiDã j@`o pDœ¸Sd—ƒá€| 5#\ùJœ´Ë߇¾wŸ˜Sá“wI±ù”>àÞ %ß#ŒÇ^ïqø²ùï¢ÝZ/µÛgÛï„߬j™Ò¸}­W–™“Љ^•IPñ$Ä“5 i»‡–¹¯XTÕŽ"á¨ÕJè§i”£ÝÛáÑÚ™˜Îø¬aûäïEƒ¢Õ `rÞh¢›ˆ…Ô®oA¾•¢%,ïPqKÀÈZëâj*nxòmc›š("Ćí)/B“;ÀÇÍÝ¢ûîVàÔ¥x²…h¶ª®OqfëQál9ÖlQ<Õ÷8)$Çûï§6ž¤­h²ª³aŠÒ0 < 9ƒõ)8DŠ7eŠC ¦Ç ë­jÆzU"¶¯N»œžƒ|.›v™J²a»œâÀ.«Ù»Ì®úüä Åd¬9ã)Ï–ˆW¸Ù|õâXhë|5Ì®„vÄ,ÑìOuèÍC›óVlüœ^9f R±sç²÷ˆ¨øãâÉš†ä÷Ð1ÛÏ/")R#¯y(RÎëP³âBeïS?DDA>”Z¸Ÿ_ÒRíýˆË,ðä½ïý¨¸ÃÀO!j¬½K]Ç€º¢Ñ;Ï©¹o±_ ªëDö$ð È_“>`óG´f¤q²ìlî‚Õqv:%Ô9•/Úój*EÅÎA6ï—ÏÅj‘_©†Ó±ê®P'Õ¡‹8®A^ëýÐ%Ö¨Ø{ïe?fPñëâÉš†~¤‡C׸tiV‘ íæ ÎJŠùFgtÙª»M«íEöjÇmVËÒ¡dòy\Ãrû0bôþšj-ù)àSÈz«}qµ;ðb]µ{*¢& G k]W랊Ð0ÂQÈZ EAv»F<´šO×(ìú®œË…ú-ºH¡qƃ8Y­T.kuW):.Kh:B#ïN­—Ðt„énŸfuç­ãµš¯ s](MÏ@>Ó_W€¨ä k­«7RX€\0n¤ÃáŒú½ë·ZIuÔ':«W{?ê‹C!Tì]Èw³n©ø5 ñdMãj@`F}ér«"A:? 4õĢ­Dd 8y¦Ï½?q9 <Y«¯SëX¨¸Y`rÎX‡ÏZ¢ýŽ»µÒʹªšÃyà#ÈŒ™>õl¾!ìð¤4t'˜fFâRpVéÊÏj®È)»vœj#ü‹bVy)r¦J˜Þ½à§<ýNXÝ•ºÃ6Ýð-¢Ë8õr‡çþès™Â•òCyÇ~[¡˜Ôt¯Hõ}®à®¤ú> ²öðÓ†¸TTâ'i Ì)nUíÿ*èŠÅO³0±ãœ;ª½åUèáMÈZWl:‚„C*®¼ùVïû*îpr yT*þ¶„xzíÈ\–ñdóùÊ¿*!ž”Þ~ìMk·?¦ìq¼ö5ËÔ{1ª*~@B<š]Bwø#e:×­hñS ÃZ¹$‚ÿñ©s8@ï2¿R«Tm_ GBŸåmŸ•=û]]# “”jGöJSîWG£(u![ z«À ÈZ›j=ë éyÔÆ^÷¬TÌeàcÈæ' ƒÐíU럟@~bÌcÃy_rA”m0ÊÊg{wl(–2r‘š—ÜzÝ)$%T?k{:}ÓŠ Ú¯{Ì%J¢íXš-ÞÄ®PZ;Õ‰ Q9 œ¬5¹RSw*n8 Yëb[ç‰è^‹F«ž„|2½ùå¶ç6:Ír˜‡¬uVN½YN!/7KN:gU¦ƒ µpºãã&`Éö“ÞíÕdŸ¿°Z;¢†<Ïwv@»íðÙfØ9E‡z£èÞªdW"­à“*ǰ-'Þ„³ö’Wi´Otà›P‰·­¾zlTü€„fýíØ‹ïë­Y³"?òçÇ€G!ëÅù¦¿½ß´ºˆÆŒ„x²nµU(Œ@3åÙ‡ß>xóÊyßð¾‰Nðû«^¹úÛÎ*O3ðíï‘[`eeÅ+×^Éçæ/ç ,7¿œ[üƒ NÞ¥˜ÁïÀ|ôõ«—Ï×¼ü2æE¥uiù*¯Ú‹Ò7Æ»¿1þÆ–t’¾¶Ohˆn(öÄQƒX‹8ÍG¬bä[t›þü]ô™ar‹?þ™>þ›®ªÑNn1q}oØ‘aàgš¢BmP• 'îjÕ«gËOX³NëUAè'G«¶[nµê¾ã±Ûk‡yÏù±ÉÏ9vmÅVÂ)£[-/*‡×Â^Žo ¿1~­LŸHØÕ5)Р6Y4¥C+Æ$ÄcX+ÊQ4QƒU¤Y-V¢®',‘ ¢ E¶ŽasåЩ… »î+ÖBÒÒÆ'ï5hÍJˆGVl©Ão({¹àùAÁÇ K­àÄžŠÎAžË¾« âKØuT93Û”³côÁ6©Ø}À>Ú&?"alsWƒÖ¬„™Ù&x˜¡mRq£À>Ú&\Â~Ù¦ðlº\‹¬lS¸„}´MzöHT£a›ooW;¶ê¤f6Ax²–û¬fC° Â)ÈSÙÛ=ÓvE&ÈÌ>äô?}°É&úi8«ÛÂtíc(ÚZP5a…k{PWSÕ 7Í9NC6×Le¡âg$ìZ)ËÌ@äÌR}0…ÐÎ>ÈHü“’híp!÷Ç#ôÞFª•ºì6”ƒbÁ,g¬Vž^›ÈôQ¹¬µ$af"Tü1 ñdn"âìáxLdf!.{õÉDÆaSö°(ЉªyŒÃ$3ô°Æa„}ô°¨ø) µ=¬ØRG¸:¶åƒ='!³Ì¶ÀŒ*€ŠOJ0øìÉ«¯þ…—å>´‡Âjï埰ú™D¦q¢ý¨Ó oMÒ·&ÑÆC{ê‹ï”މ3ëkñúòñ‡âؘUÖôF`—eÕf÷ðNÍ.çå?–NbϺnEýŠ@<†ÕòpžýjÇ©³&+!8)°]·…vý$º_Ýeu‡ýs¥LÉI¹_å>ª“ð!䇯¯²1ÏÜ:?´Ø•zt¢äº^¹R·ǧ$Ž]Úg÷X^Dæô L1V~—àO˜ÞÉâõy¤*¡—Á>|ß-UxÆe~É­óe¢/-[¯³JbpðÄ÷Ú«Ø'V0ró­ôŒÙG­B $NT*•*Ù,<¸¡=>BÙÓ9Ly»RöÙ‹lË.®—/ås—‹ü¤Ûr—‹ËÑOËÑOW¢Ÿ®äÕsÌ?kBq$Ô<ö£zM~޲¦S“30›°2ÛyòÊ䞀á äcr,´Q¶þ/ù:m"%éŽfŠq²?¬²RþJ])^nýo™K×èÿ×Ôõì p$\„¼hÌ7ù>K"‘g(œ0fÖ˜™Â?GÙÓQø¹Öxfªó/À‰pòœ1¿ÐyÏiäIï£l•]]T7/ÁŠPÊqcÈðcï¹ú‡úêýeRþåbôÃ¥ð¿â•Ž‹ü;Ëôã5üH_Q~™¯ð„Ò¨bø2×XÈæZ'CÎú ýx?ò¯\*^ç¿Ðhˆ_€/¡¸z͘ûÆvyC\ŒøE-ou­ý!oÞ7Ðp×Ôßä%ØJNá›\e‘²´ù-·ºÔåâMü¸õ°¼×]Vï×^.¡tC>ûökNØÏö5ʘN{cž=hz^mïƒÉËjv½ÉgG5ÇÛvÌ=Ü_‚1¡t1×ýhº@£gŠ9C¡•¢ 7#»ËUÊ:å¯À–PŠ*‘yûÿe L§ý/4¨ê¢«yQ›:LŸ§aã}wZ»‹‹ì‚2ã߀%¡GÓq8”§ôy¢Jûæ!MD6çÛ„ÜÕhîß‚(arѼßi(ù…ö³ßyƒ²¦£wk´FC÷#}Ç©ù<=³ETq·Ø;×û!4Û&¿KÎüƒó~èXù»<Š}™Ò3(¿Å·`N¸yÍø-–Å’Æ–cMâ"ù|{‘†ù»~àÔ¢Ø0êëJ¿YÂeÈË}PƒïP¶À”&´~à9vÍÔ¹ÿ+"LoB{®s³æ7ky¯Y¯l寅ÎZͦ///j8—6èž…|Ö|M ÎeU‰©2ÑM#ÌAÎõÃ+¡pÂ~v„e”-0 Xi° Ñ€F»÷|›,2‹‹NLRJŒmÏÙ½r)W`Èà±fá€4¡ti;óŠÜBÙÓ©Èûól½^¦À¬<ùAkÝ—«n}»4Ë_¯Úÿ!Ú(Ù´Y ¾N¾ ò„÷!ßOcPá£Çw5»!§Â.W¶¶òÔ)Ì,}ú}´æ'ÞØO$¾²„FƒJl±£oœ÷v­Q¡?Øò¡â*©6¾òN? ! qÉ ”é|oEçOv]¯ìw¬¢¬h?”pòtjú’«ˆŠÎX­3Щ›pðâ¨%á,dóà-ÇyœFêiê4]qÊbŸK9ö$ñ:¼ ù²¹ 1EUT@³Íä$ç:ëU67•:±ÀcÓL” µTÜp²ÖJ³šÖRqÀãÍ…DIí[ÁaBý-í¸Rä…ãìû‹ö{õÐUÄñðä{©Uq(;SBGKŠZ3VÚÛQ­€H öðû­øsCâO¯mé¼:}£ûx }v€>CüC?²ç“m®Y?Ä«Ñý6Ô#l,Õìú’¼æTõû#ýëÔ­|²öçVý†%ó(Ç»”¤°À;uÇã§6w™ç¾ßÝvêË+¬ì²º0§LaowÙŽ˜ÊbøÁ—ÏŸo¼HŠ[!)õ†h^Ñ8)GYÿÛ¹?¹'>7޲nÒ,?þØj‘ŸiD³Þ‚šò¢„xDÓþ÷zÖg 쫪cûN¤xe·ÄâF9ÁÃÓKž5îbX¹žº6Jõ¸ôºš”µ¢¨\°+½®ؘÊо$R¿Üxy?†”¸èI8 yR‡T‚ƒP·k{§%<ù@öMBÅ”O›D¨r²VÝÄ–:ôÆ®Vì¸Ù°Îæ d½Ê0j“A|O ž´Ú„úõ6‘idÙ&r“>¶É~|O`ºmrlýØ´ëA8Ž]h¯Èr Cxòé)¨Õ¤ðp?-™eßHôœ‘f#u'Q_Zý‰ üšÕr jžò[Ñ™êUöâõ³g†Õêèú­TóhÇ9õù†y̱Mî·Yk-˜ÈUÊ¡‹S vsV,Ã7¨øWÙlâ÷ÔSù++?Ö]¯¦þ£`ÍË…|Ûø ž0Væ9†ý`5ä›_,0ž°5ü™gw)0) µÇzI rÂO(¹”ú†|ió ä'½3²=/`}"aפ]W«1,õV«¥Ã¬ÿ†jµ˜éOþ[¢Õ’ïk¦Õ CVÓ··“ŠÀ—HQ‹•‡,*~@B<šCÖ)S:‡`ñhÒ¡—‰uAaãŠä[­ü`f35+.ÇÂ+‡wiGKŸ…[,iP>¼ ùªv}&­ÊïSÏ»F„Ö ?HÍìW㩸ÛÀ‡¦XlÂj<w ¸yC«:ê–¹‰G/÷ª÷GÀ'õñ½b0Tˆï™UÁ÷'-ÍŽšFPqˆ—°Wq$ª5Ž’l¨GyRsd!CVf8 \€¼ÚDóȇC¶ê€MÄ ÀUÈ«Ù4Ø9à]Èwlˆå÷¸’¹W­BÖêÅ:¸+0×ÃE8w“n%¢Kî[Çó(¹©noL ¼ Yk ®¦ØÒº ŸmaÖEůHˆ'k ¨½QìqðM‘Ý9(4áÈ´•{ ‹ÕÊWâ8ž]þ>ã¹[œ Ÿ‡ý¶M!B¯…O•îPrpæn©Ö2ñ? | Ù|ëtÑn­CÚí£…íwaÂUrÎC!/öÞ2ÏIÅöñþABýûGF4ò¨½±Ì}Å¢ªv, G­VÒ5M£íÞfŽÖ¤Ä4Ág Û÷qwYy½(NóóFxlŽ#îÜiP»¼YkR[6¡â–€+µ†5ÇQzn·ÑЦ&ødÍç[´ªæE îC~lÌè¾»8u)¯}!š„ªë;E’håÝöVå}økÁ£ˆjªï!u”†GâT{’‚ñXFžSΩÎ2©ç…œÁº†·P>dØ´tŽ“)61˜ƒ¬·ZëU!¬Ôv9 <ù\6í2gµ×¹ ÛåïvY-œ‰P šyóK NàxÊQ.ˆ[¸Ù|UàXhë|•É®PšPñ‹ÚªC¯#@>DÑkÇlQ*vò\ö\BÏ'r±y´*]sßbŸ]U׉ìIà¿0&}Àfïl¯N÷B4Nd_…Í]µLcÅî±éÜf#*Ó@£y¼šJQqsÍç]çbµÈ¯T£„"P'Õ¡‹8®A^ëýÐ%²{P±÷ ßË~Ì â×%Ä“5 )XE‡®q)ƃ"ÁëV4h¶ îˆõÄb7ªî6%-²W;n³Z–.óЪP¥^ª6ËíCüÑøkªµLä§€O!ëíæÅÕîÀ‹uÕîéj’PŠ$ÔëîIÊ dæ­v¼ÿõ®­æÓ‚]ß•ÖÖy¿E5ÎFç1àd­î*EÇå&šŽÐÈ»SkÆ›h:Âô.…M³ºó6´;Ñ|kîÒ±~NkÒ2 Õ•Š+@Tò@i±8‹FÊ Æt˜ÙÕwö®ßj%ÕQŸè\®B^íý¨]RÙ»ïf?ÜRñkâÉšÆ-Ô€ÀúRPE‚´Ñ< 4õ»#îiL[‰ÈpÆj… èkïO\NÏ@ÖêëÔ:*n˜ƒœ3Öá³…ÖE"¿#&…´3®ªæÄpø²ùZÝSÏF‚s»ŽX43Á4j´»HWU}Vsý€¶8¶šU~]cÇ©6(Öú”·¥¸l)ÆÓx¾H@Õ]©;lÓ ß"ºÄ¾²çþès¹~>÷pCyÇ~[¡äEtWõ}îàî¤ú> ²öðSúØW*ñ ×QŠ6Uû_=Bé¤ýÇînlº^ÙñT{K"µ ¼ 9Ís± 'ƒ¨8Déá#IÁJ÷@RBÿCÅ®@Nᬪ#³ Cˆ§×ŽÌФˆ’ýdíA¬Æ?)½ýØ›Öi¾˜²Y-ÿÍÐ{1ª*~@B<úN”r%HˆÇ°Væ’"H«Ò»‡†"œƒ¬µ2[êÄ›Ðm(y•F{CóƒÊ¡×û«2ëPÆ*ëw­·†mE~÷­h]ã>þå1Kóøç·ß´ºˆÆŒ„x²nµPfʳ¿}ðæ•ó¾á}]ðW½rÁìmg•g,ùö÷HS²²²â•¿k;bùÜüå\åæ—s‹Äéd˜X LŒÀ?úúÕÆËçë^~óŽÒmu9Ê“Ú;Ò7Æ»¿1þÆ–Ô‘¾¶O(‡FÄɱwcNxXtíšþü]ô™abœ?þ™>þ›®ZÑNŒ3q§äÖëQ¦G,KüLsܨùj’¹ÄíÌý+= ~šur“ƒpRM·ÜjÕ}ÇC¶§,yÏù±ÉOv­Wêá<§Z^TކEôùWƯ£•ïæ »:$dÓ¦t(ÀĘ„x ke@9èÅ ªb°³Š4«ÅRõÌQ„"ñϰ¹rèÔˆ„]É!k!i¦:äóܯÜfRÔun±¥¿ñÏA7?(ø ð$ä“©œØýQq£ÀSOeß_Pñ§%Ä“¹Ê9wú` Tì>` TÎx”Žv¼ý¶ç6ªÞ“È‚DxòÑÞÛÇ~Øáä©ì탊Ÿ–Oæö!\Œ®1>+ûcùPíc6!0]ûøä½ªm Áâéµm ÁÄŠ×h„YÛ=‡%Ä“¹mˆ¹ÝplC²‡~ÚÆOdþ2µ]UÛ†=ÌÈ6pœcmC$¨m±¥Žp]¬üu\ˆ˜~"›šþ Ш¨ø ñ¤TƒÏž¼ú:á_ˆO~M«W3V{kÆÒ ¸iV-2 £uKúVwî=ôÅwJ ëß÷ñ÷Å55­%Ì$6f•µ½Ø¥CYµÙ#¼“ÀÞ‰9òÀ­5š¿À Š<)òÀðd­» ±7Ù”«hœ’OÖ­÷9ZL YëuŸV¦óÄŠÎc Lç^’ºÓ$ªˆsšRRj½µ â4 <Yk¿2–Ó¡ˆSkóRÕ̤˜K<~äaK3󬚛IÅ힬w|ÕH©øœ„x2×ß/ ³_ôTǃÇõh{À®j"6‘Þ†i,±i‰˜¶&µàgµbd©iòÐ^ û‹Š/Hˆ'¥·űƒÍ8ý ö™e:&ÕÀ3h¾@mÿJÙé|Œ—~Þß xŽ—Ø'ój@ ™‹²ïcé$NÝ¿´"¿D ¾r4ú†!Ÿ¯Àá+c>òoÏ•·Ø‹¬ø8¿ËV™ä—/]*°ð—«ìÚ¢zvá_  ÏA>gLöLƒ¸F{÷ùòVö­ópdVٮϗàFx²¹?q Á.0‘W[Ô+!<YËóë õ)‘â)ìyï<ñ£0d?þ˜S§ø5hJéEzÕg$òx²¦Ó…Þšg¯}‡mU$Ê¥ô|ýÕ+ TâøA¥fNgzñ(êŠ2ÿ_‚3á-È·Œù_GJñÐXl¿ÈÓŠû•ñF¡ñœÝ-°\[<+ÞG] ~„×!_7&jûf”IþÄOA6Ÿ€_c-ûîÊ2ÿcPRºGÂ7¹òVî[õ þ øJ‘3·²ß¢léXÙ2YI"£z¶¹¥Èé¨PJ ÞZ R&þ È.C^6&~Z J¶çë(åp!< ù°1¯“m¥ì0œZc[chü¼OB>ù3¨»ßËïR­»+ÉuW`²³I1;·ìRàzùÒnuQ£F¿[BeáJšs-·awžàrÛGüÙÄk[:¯NßèÞÝ ÏÐg8=|è/V{µæd›kÖñjt¿Íºúùग़]_â>ó?EÕþHÿ0÷Ë×þܪڰP~lûx—~Øc§îx”nŠmî2Ï}¿»íÔ—WXÙå12]Üe;vbèá_>¾ñ"éÀ­x¤P¦¢eE»¤tª{ýoçþtæžøÜüT÷c£Áz_«]~¦Âͺ jЋâ ü'½^ëÁûªêØá‡«_Ù-ñËdüþ'þ~É«¸u¡©èÂh|”>RWÖ¼¡tgÄð]´N‡?”ØøÞÊ™Dí—/ïÇP'hcÂ{<µøQùM½•¤3ö´áä©ì†ŠŸ–°ë˜a?F>4>Y«†bKzcW+vœÓ"Ù¹v”UËPñ3vØ0m™ÈóÖkù´p–-#ŸÕîcËìGkL·eŽþB\iõœmÏñ}õÈÙCVû´êqÈÇSlŸ Tãú41xJ¹˜³nzä|Ãx4ÛgÔxö$5«ånGßš§b´°³Ê^¼~ö¬ÅË?´Öñí\bØ’Ä—§úïB¾küY;åSȯR=¢J°›+°b±H©DêŽS/Ó¯6›A‹>ùÞ­ðo{n³^Öx•QÐç ë9#òo1N®V ÿ¤õí´¬Oyä¥ï HˆGsä½hJç0LY M:ô2±ÑÐ+)’;bµRšÄøxrœÔx©…WNÀ7rZ‰ºÀÒ‰ØiLƒò!àUÈW߸úܧš­@ÖZåH˜Ã'›¢ânBÖr$ŠM¸iBÅ]n@ÞÐj†Žºe®§j`Äàð ä'©+Ä`¨ß)2; «Â9 .ê½FH Hq1"{¥¨5ŽG 1Öˆ£<î}+’NèÛ£Ò³ÐÆ”¦ÊG>²Ulúg ÀU«;.‹;¼ ÙÜGbù°³W5bâ°|Ù|:ôÑC°PàÉ(*%2kÜP')Ä:CuHëênn5SÔh¯à:äõk&á ºèéØûïgïÎSñ$Ä“5 ÉP '7{¹ñƒ´˜ ÈŒ4v8yL‡g4×Åèæ×ÔIÒGÀó–+~ƒÒ@ õƒH Á3‡z<}pø©ç(w˜Ä~ø²ù0ÁsyìC_9¦•”4.˜VŠ7‡¢¦3« +F=Ø÷q”ÜêXgOiä¤Õaã8tå¸Õ;aØ8C#4ò±;£u%ì„íQØìÈÍ ŸJæ9p5Âá#À‡VkÚhHül¨NQpl_òÕ‘¦dW«™¥Í>2béŽÌ{ÆëŠ€hp» ¼ùzïgvTÜà È7z¯ìTÜð&䛯:3 œi†Ê¿\¼bÌC¹G–î=¤Ø#ïMh]ÕF¤ó¹òÆtJòXûvj·L„&¬¶G?aiî’«iêI g¬–çfØ4Ÿ(a½Ë“¸›ß;¥°k~W ;5‘˜A»7&ž³À{ïó}ˆÞ¸ÈÖ‰$gìGŒ7)$¨DýsØ'7<·Ü,…~[Ô}ó¶.²WêþÛ)hazû™û˜òÕèÓ(œP:ß”ò°1Õ⮹CÀÈZú©6nPqc@1M˜í½5Rq"´â1ÈÇŒuâOòn§RÚi ii76”Çâ8¼ Ù|1LylaÐX}[ΠxÂôÇ–‘ìEud!:À£Ó<*™ Ëg$œ²Z‹|† “oëmè$‹uI›Ñõ¨*ͦ£dÊ ~ˆå4ðä;Æl/†j$F: 0´:à9AÓ«GP£uÉMP)ç b„ÒÁç”Ôm¼íÊ$-¿%j1º ¼ Y«kPÓ8*®\ƒ¼f܆C<{ ª>‡{À Èæ»}¹PŸ„þ7}Ú܉‚–GiFy‹)òœ‡âÌw*TjM•°T:++QÈzð ¢ÏJˆ'kÒdÝp Ûk©tDgRdG“×aàÈtØY`×Ájå+qÈÊ.v…¼÷fN…ÏBõ»öÀ ;w>£xçIY.˜»¥ZËÄÿ0P ÊdØØ‹vk¹Ænk¿K+G›ªežƒ".B^ì½e.HÅ~ù³ìM‚Š¿ !ž¬iœG ìeî+Uµ#C$µZqL5r´{7.šº·Rg±†íÓpj¶ú²$QœJrÊóËý| Ô v x ò­ÞÏ.©¸%à d­e95ÿˆŠ[Þ†|ÛØ¦&¸Oëó,Uó"&w€!?6ftßÝ œºœî3r–BÕõ ôæ¤óu¼ÛÞª¼çq4CwœÎªÿ üRÿl¸ó{ë‡nÕ{üÄ®SΩ:ãÔ‰{qS.AÙ¤±#Å›rtÜ)61˜ƒ¬·¨ëUù•¿¦›WtÚå4ðäsÙ´Ëð<äóÆírŠw»¬fï2»êóoÑÅ O9;-qË7 ›OžŽ…¶Î'ã6ÏäDøM]Õ¡÷´ù‚Õ±åÝkÇ,/;y.{ˆŠ?.!ž¬iHWø{è˜ ã*“"9Zšï&uö¥W¦~°[uXžß¨*0ºkU`þÍp ^Ô`|xò•Þë´´lʼn>±t¦)MBœ'¡âoKØ•0=+˨½Ñìýü.¦"µ+ÐdÂqÈãÚZ=Ô½^¥~’ˆ°ÚÎÅSš„íç÷TUg`Äex²Vàµwø)d½@òo—ºNBÖ*>ÉW5¢dµžSsßbËTU׉ìIà¿0&}Àfïl¯NGü5×Jc\ô_CÔ¹˜DT¦Fk j*EÅÎA6Ÿž‹Õ"¿RuêAuW¨“êô™8®A^ëýÐ%ÂHR±÷ ßË~Ì â×%Ä“5 )Fn‡®q麾"Aò›‡‡-ƒãâbͳƒØª»M©0ŠìÕŽÛ¬–¥{´rU©—ªÍrû«¹~@'¶šU~ò~Ç©6¿(‚)o‡Þ†©¦áiø"U7­Pnºá[D÷ÃÁWöœh›‰ûÈõó¸RúÈ;öÛ Eú§«•ªïsïp'Õ÷Yµ‡¸Æ½ÊÖ\`Nq»¨jÿ« G(NÆ™EB‰ÝfÜt½²ã©ö–Djx²Ö-Ã„Ž áô‡€+|$)Xé®='ô?TÜ9à äÖžU™U¢@íµg5GF¬¶¯vÚOÖÄjü“5 É•ë¡#3FGD¢0¬ŠüÈ¿²ZÙå5ý˜ýÝK½”r+p;/SŠž¯äÖëQŰ—Þ9N]µr׬vt¡uÈzKTÚÁÅ}Ÿ{¨Ì{V¦‡ÙîAÇÓ;̶_g¦K¦sõ–zµŒïÙ: X€¬5÷ToãÀ‹/f?2PñE ñôzdX“ts òRö]2IB&]wVÝ RB«øQ<þrË­N¸KK0µÐ ªa³­ZÍÄ~ ødóÃuSbËü:¹¤åyÃ…õa8q™Èœ2Ȭ÷#7 “ÏÍ_ÎXn~9·øAœzÃŽõƒäM³Ñׯ6^>_ðò˘7}‰·#ÔNÁJßïþÆøJúÚ>¡"éïÎm‘Ó.fw–æWüÏßEŸíÿà~ýõ£‹8Á2ÔýK+ú|˜ $ã“?þ™>þ›®ºË×_}ùêɯK¨*þcЮªÑú²;í½ó»Ñwƺ¿³¼Ôð*oíÀY j¥—áÿ¾tvj;_/½äÚs½|ýêò²½yóò¥KP$«£ý  ‡Ã&ÜâuøÑH2¸9ֳܿæ'¬Y§3KAè|Áïr«U÷O Ô>?–÷œ›<ÞF×qüJmºÕò¢r– ¢/ò| ù[ã×Qîœ@A`Wç¤@ƒ,eÑ”n“a­ (“DU vV‘fµXª³ÔATá0äasåЩ… »rG+ÖB’3þÉ{ Z³âQ§[êð?ð\‘ÇꃂA>–ZÁ‰=7 œƒ†`„Sͽveû gZB<™Û‡˜V÷Ç>$›è§}à¾v Óµ!Š3ÚôT g9NAÖÒT5AÄcŽÓÍ5SÙ@¨ø »ÖÊ23ÅH dF!´³O2ÿ¤5€l{n³¡j#°  Øa*~ZÂ~ £°‰ÑþØÇ(lBôX}²¡ÓµZ2Øm(/Â,g ku¢j&2*=³mÌÚDèwÇ$Ä“¹‰ŒÁ,Æúc"òòeMd f!0]¤páªæ1“ <ùHïÍc :‰ÝH.k \fæAÅOIˆ'só‡IŒ÷Ç<Æa"àOŸÌc&!0å)È;§²½“t²$Ñ@ÆaãV¦Sqa§ TüŒ„ÚSØRG¸B¶z­vÈ D4(ýM0£  â$Ä“R >{òêë„aàe9†ÏK+:ί °¿±LmÚ¨~ͨ=>)Ú¯ñÒ¿íoü/-°Oô7¨f]üÁ¥“8õycEýºÀtúøk5vç"‹N0ækíßËóv™-±w»‹‹ìÏ¢õ]íԃü¢2÷oQ„RDjCîS5ÁKt½Ô~:„fßäßÎH­¦c•]*^Sgúئw1+÷ãåK¤¾ócþRñÒµBHîVøÿÍ]Îó’Ñ¿9Âä\¯«4| u¦6ØÙ©V©ºmo¢léô¼—æÙoÜ&+QLJÕ×ôæýèóè[•€ù5—¢Aþäý©DÚ%P%¼ùR/Ñ(1fÈ?§ÞÐe°+§ÚÐóì…PX6;ˆj¶ì:>ÅÏlTJ?PFk^ÃtRºäÖéuÀìfàÖ쀂ÒWw Ìw•ßÅÂôB䜟g»nó|µÊêN”B5xçØ?°ª]Û,Ûô;Ïwª‰¹¸Ùn!¡”dÙíåÿ?uÂ߯‘í ¢0Eq_$J$EYKˆ”dPA‘Z,Q¢(Š¢dÉ–ì+Ù®ª[ªë›’dÚÎLˆbU×­Ûû¾ï{wU/ÓÛtßÛ3óf^Ï›7oæ}†û9êw?À«—'ò@DÒŠˆDÂí_eýAˆñˆs"NDFœó:’Ìi[Rטp%\‚¼Ô…¡ae Lfh`sì•-ÇÞÆ„zv\eš¨2È̘æƒÝ]9rCв².‡Ž úÒ\¿gÂ;ï$¸î°ßZåj}÷å€cGÅ}“h+û»T|„FëŽwÜ?ÿ•PíŒNÕé­Û„ôÙ}†›HÇ~“i¬ÜÏ6¸¦ý¯jkmž¨ß5Z,[•Å&ÃÈ‹þ–þüýùµ_×8,š_{¿EKr—Ø»b{VEðÜ·û;vey%œÉXÅ ˜]¤(Ðûl׊ÍìÒ¿ñéóç›/â®ðˆGJä*úWôNB÷ÄÖÿhæWˆÏÍï‰mšô‹çlm¹•z¯|O/˜™ Ô âÝûoôF®ü%öYɶBg•+_Ñ-ð@ <¸7Ý&{Éx ì©ke(æ!çik],[”¶±v$-Œ#öåæË‡mˆ‰ó¯„Ç3bí¼;±öSðëŠU>ì#áä‰ô»…Š?!!žîw‹|×l²Vû´-µïµUr¬vþ‰|ÓUÒl£~¡âOJØr:İ_y¿Xžwm ®Wä[FÇ K¡Wä;^Ç!k©ùµš 't•²m¯L½ä†e§ ÎáùT_aö¡[ÏB>›`NPj7 ‰)’ðäséw=ç%Ä£ÙE­¹vÔW´ßq·A³YîIk–RÀÑ®Ë*{ñÅ'Ÿä¢àAâŠ|NëG§zN°?›wæÐ“Þâ ~›$ šUXc¬êú<þ\3?–ÏçsŒ§Ás 嘔r‘ª¶®^‹A0çeC^3®ÅcR^¨åTS_ËgT§ OuÎx=qöž„-«sM+õé¦ãº*%ðk—Ê[³6ëjȳðÍltT¬é ¥ì’†ìßo§£ÜÌÔu ¬Û„t1ž]j¾µw-ŠÊOT1•g*¾GB<š³Ë)S:Ç éñhÒ¡Ê´˜£U$'-¦ÚELwrœÔp ©K´£K1LŦ.KŸ…ÿZìðhP>¼ù†‘×®=¨g$BëÀ È .Rc‚ÌQqw ?J°Ø˜ÈTÜMà&äM­nhj[æzªF ŸB~š¸Bô† ñ•"³ XÕ¾?šIr%«T\?°»%11µZ}Ñ•Ìnɉ<{º-òéQ,'õ¼EDæðäKF "kâ༭:a±p5SOq—F‡]Þ‡|߸ÃúX6ìU˜8¬eêI]¸¬5Š5qy†Ôdó9æõ4Jžª‘ÈYO^&œÞл¥·ÊJö»Dó—F}¤m©v‰&uW2´Ùçg(Ê5?àIJÊ3¨t¨Èp!£á‰Ä±9 œƒ<×y# â¦!_4” žr¶Ú¤u7Ê Š–Ékô×%à:äõ[&æü­ØÃ£bB~˜¾;OÅoHˆ'm"îŸ@ýÅÍan|/­µ™‘ ‹âë3Îh¦…ÑíÏE¨ëÀe[¶ÈÝ¡N%ÔðP»é'K“¶S|Å`׳•Lb? |Ù|aŒ¹ÂGÍç•#LùƧô^[>À“ð´Ñµâ¾¹cÀ)ÈZú©6oPqCÀiÈÓ·F*®x ò)c¸LÌöv®”Uh7^,(Ï-Äqx²ùf˜òÜr+°‹s Cñ„ÉÏ-"EœêÌBtF€' kþRÓe&áÉL}k°c² ½ d±/i1ß©ì”ìzƿطԇõÝ$ðdóã ¡‰™ íxvPó*Ñ5h_r‹&EÊ b„ÒÞ„Ôm¸áÊÄm¿Åj1º¼YkhPÓ8*.\ƒ¼f܇}9z…¢ªOÄáp²ùÛ¾ÙPŸ„þ×(¡¥¥óà;J‘‚)òœ…âÌfÚ^ôìÔVé”Tl›Ë|iMTüE ñ¤MCjÃ9ìЭR:‰¤ÈŒ¤h¾UÚÓÂè. †ÄÊñùmJxVŧ¬ñÑM(•6ÏÚ*öuÈ“¡MTÕ&¦ Œ¥4І=}‚^.Ê HáBÔßU\B‹÷¬xÖi¼(ÛæÎ|ZšOÅOJØq6-—Ñ;c€â¸"»`x„cÇ3•ÏÄ!@«øuè‹p÷‰Ù_¼KŠÍ—ô÷^(sc/VãÀgÍ_ñÎ[õýR«q ±Q&üfUËÌBç!ÏwÞ2?нùJú&AÅ_•OÚ4¤†ï eÉçUµã ‘p0Sq¯i”ƒ­¯Ã£½³˜æTG€YÈY£…BÛ€ë|.Ô vxòm,f{‡Š[®@ÖÚW[ \"Þ…|ר¦Fø¢Ò篒UÍ‹˜Ü>lî=t·»"…&ÈE«•Pu} Y ý*¶¥°9Vr¾Q®ÇÕH!9>„ü0±µð(E,¨,P] Óá´~à‰ÌL›R6é²v‚7eŠC &§ ëíj¶õª>âºN¿œ^†|9~™~ùã~9Ç}V¶ö£HA[v8gÐîM`{Ê«%â–nB6ß½8…<ðU‹'¥û3‹´úSz¥Í.ù°G§³+R±3gÒ÷ˆ¨øÓâI›F- °3ŽÙQ~I‘Íæý@}X‡§Ô×ê+ªŸ""cÀc%6å7µTG?â2 |rrwžbG?*î8ð ä3ÆÚ»Ør ¨ìøôB ò(¢Æž]vßà}ª®Ù³À!lLzÌb{–W¡=#“e×`s×2M÷×Ò©^SùDeh4Ï«©7œl>._n«E¾S —c¥}¡NªSq< \ƒ¼Öù©kQR–¤?gPñëâI›ÆZ@`g¦®a鿬"ÁåL4i•ëæ{¿%w‡vÛóìÕ®[+¥CÉä5:•B©VlFŒj௩¶2‘? |Yo·¯]ëö¼XWž®£% ¥àž®CÃ!km5ÕÿVËŒ‡^óé…UÙ—ÃÒ¸E)4Îxç!àd­á*AÇ庎ÐÈ»SëÆè:Âä·O²Šý&´;Ñ}9ëzDi4Óxå>a7]¢’J»ÈitÒ,09gÜIÇÃõžµï×{IuÖ': ÀUÈ«Ÿõ—%•½ù~úÓ-¿&!ž´iHAË;9ëK—[ ÞÊDƒ¡ù¬ßäGcÙJDN§2õë]ý‰ËYàÈZcÚÀBÅMg!ÏëðÅ\ý@´ßt·VÚ9WUsb8| ù±1ÓgžÅ_H»Vw‚ie$.—i÷‘®Üø¬ìúíöo×Jü°Æ®]ª†ÿP¼„UÞŠ”"Æ$x/ø÷6·S±Ù…P.ãPŒ2És ô¹LÁaÙ¡¼k½q(‚1Ý+R­ÏmÔáv¢õ¹$k?mˆKE~’&ÇìüN^ÕþtLÅÀþÛ ßr½¢í©Ž–Djx²Ö›˜ æÍ!—Jr§Ç*êr¦~‡Ë \äQud¨ø»âé´#sKRÄäbµ){Tüª„xªýÐëúÛþ6eCµEø¯d޹+7ß#!Í!aÜ”éߘ„x [eâq8oÙVa—½ï¤yIJjÙE3m¬ÿDŒf€sSAÅ^„l~Ðö¼¸\O§Ôöà :°½°Ã0¯+ŸÙ&r—€Í'Qص •!LæFVS©ûeGYoˆÊpòhçõ†ŠëŽA67ð£:»,DaˆÁ+Á Òa§Xou:å4ð,ä³étÊIà9ÈçŒ;¥GÙ?¥òÏd–X|g8éC»åà"äÅtºåðäkÆÝ2E‹:+ZN„Ck‚ú«ý%NKÀÇõV¥IOˆ´1Ö4ÚuQë,i?.ÁØo#9¶Ç£ÊÐrP±‹ˆÉ à9ÈzVؤCT.³µ®ª÷Íyà<äyã¾9F†t \vMù] ±¹¼“©™M¨1FVµ“Xô.tt-ÓÕõß#¡ÙúcД΃Lä ÄcØ*×+Hù¤5<&Œ[ œJͭѶ”UrwxœXÆ£6SXXËc…]Ë XÖWE°Ž%|ù¡‘í·=©É‡é©";b4 < Yë$kÌ0³ÕCÅõ'!§‘Cjÿ£¦/ÏG¯)“¤¸¬(ÇÙ@Ëo 6ï%R›g¼™+üFGh×ÂxC1¬X¸€ éQŠI~£o5‡ÿÀæ/Ãñ€W2´qê9ÕúHFÜv¾Ž5¼ÙJÑyãk¡‡Xµ‚p^¡ìSØÍ°ÏX­Ê¿Åë«,EJ’Ù.·_BÔ˜0¯8SEŽä׎OCÖ:˜«6LQqýÀ÷!§pó1zP ªd¨PY\ð¥—å”|²qÞ<ÔliÇõœ`·¬ì<˳ÀG™zЄià5ØÆ¸Ô6O2]uœ¨ø Í'ú×mã_­×_ž)ò£1vx²þîÊQÓæ"SâI»×žBaš)Ïüvãõ+ûmÕûqt‘×_õйÐÄvìUž¶ð'?C®Â••¯øUãuhvvni6Çfç–gç.ˆ“K' =t>øÅ«Í—Ï×7^~Ú¦žÒŒ¤µ‚¾1Üúá×–¤’ôµ#BA’ÞI Ò"£G›¾wIÿýqô™a¦Ì_üš>ëÿeKËhgʹ®0*6I?úÎ÷4á¥Ú<%™M»–«gÉOY­B/­Cg­­Ï¶ÝRÉÝã³TãAÖ³¿­ñËN-ç1CuË-ç•cì}&âÇl\­Ä—ïIØ20)Р äMéÐK’! [Öáš­Ò£J¯MÑÛÜDšÍ’‰Õõ˜÷ä½hB‘ý³ß\9tZa@–ìpŠ­笿÷ºä0ZÓâQ§Õ¶Ôþ×~à¹"Šÿ‚ǧ ŸJ¬àØ‘ŠÎ@ž1×UÛ¤âOKØr_15Û”³mvÁ6©Ø#À.Ú&? agló°ÝþØMOCÖÒUó¤ÇïC~?±‚cÍ“Šž|Æ\!TÍ“Š?+!žÔÍS87-ÞEZæ)¼Â.š'=vÌätÒ]°Ø„PÎ.ÙÇ@û'!ûè£0L5OÕ@`ÐÔq]MU3Å´r0ÍT6*~J–ìÔ dF1Ø„Qˆ!«K"B`²Ò»í”Jªæ1“ œ€<Ñyó”ž LÛ<0mÕOêæ1“êŽyÈ›§]4!˜„À„ý«Ï­UUíc67’iùWCPÊ¡LWý+*~RÂnùWð‰áîØÇ0lBœè’} Ã&&k%§bûUåÜUÃ0 Â)ÈZ>†š‰ Ã,§!kmè›™JB<©›ˆ•¤&2³鮉ŒÀ,&ìaQ°QUóI¦èaÀ$ï§[RBm«m©\ërà­0Á(Pÿ%µQöHˆ'¡èýäé«ÏcþBÏËb>tÈæt¦qØæt¦+qLeFqLé[£¿‘ú¹ïP}ñíBÌqÎ÷ãöúòî§Ú±1k¬¡7[t(­>ûu¨¤‘w¥;²>ÏDÓ®@<†ÍrlŽ=±+¶gQÒeZ/Ð4/êÿ€£!­G»5Ï­°{ ¬‘š+»o[˜|éö‡7W–î|¸œc%û] ?²üü›PÕ]/û‰õýýÛùyåª| ú„ÒrêœÛ¥jDGIJ¼Z9:!Åk£Aò3#<ù\ç¬#–Ço¡lÉœõßeW™t.1Ë[ªìTV¯å½É[å]®Ñn/Á‘pò| ¾t‰)bê£.ÉW öªËû9ʘLçÎ̱õ¢t£ÏpÙîØoÀïºöÿׇxU[k³©~n±lU¥UP^4ï·ôÇÇè¯ýºÞ¼aÁü¶ãt‹Žä.Õ7¸ŠlkŸyîÛýÐŽ–WXÑe7`v‘‚ì³]+6wEÿƧϟo¾ˆ»£&) è]Ñ7 ]„\ÿ£™_]x >7¿ùШWj;õ.ùž^Ÿ4-¨/$Ä#úößé ZW/±ÏJ6…ãšWt <j”<\â¿ä­»@­·Ð9D%@NiÈYëÎdNÂ\³Y(Ј_†-ÇêËÍ—Û°§ª Ç2’K¿;«— b•{7G8y<ý>9‚ï ÄÓå>‘/PŽgê'X꓾×VɱÚmäÈ×WAÖk £N¡âKˆ'¡N9õ²¶Ã#kù"ÃQÙòvœŠjÄ ù&ÝyÈçì¤À Jq÷ÆÄ=F™¥ßITü ñhvR¯ñö|º@`˹Íf¹#,8‹}y¶Ê^|ñÉ'¹(_€ø²˜Ò³S g-'ØŸ]:zC\°¹ùŽ1ÿ»ŒÕÃz5ñcù|>äÍ3O„¿Ø*…ñ\›áO<1‡z ä+"\à]ãd“©Q‹¯ç˜”d%ü„©o˜‚"/r6Aû­ùÖN;û^”8ñÛ²ìKË~ÅAc-Ë>Eû}ß”½¹‘&ªLÛ\°bErâHá(äQrœÔp ©K¯ì€s<ð…ÿZ¬Ñ4(Þ€|ÃhmמGÔ³¡uàäÄÌ.v狊» |ùQ‚Årï&pò¦±±SvcxO!?M\!zC…øJ‘Ù¨ôk`§5B2äváš:¥b³Špò„±Fœà)„‘ó‡Â ©Ç·'<¼ù’‘‚Èßš88e«NØ„9à*äÕt:ì2ð>äûÆÖDz1V ×€ kbÍ+8j>G1G ¾,»)1™ð‚Cw—>Ü*ŽZèÅŒƒ¶9W¡YŸ)ZÝåÙ(úh͘_«VKÊ3è8ø¶yglhßá‰Ä±9 œƒ<×y# â¦!_4”­6àëC­«¸QÀk´L^£¿.×!¯'Ø2‡\{jòòÃôÝy*~CBvS \oÉ}Û£ ¤‘›%çä¿¢IEUNB£OÂÎ&±³‹¡:EyF}ÉWÇ.tÁ*•hôPd: #¼Yof>l]×½Ôà¶¼ùVçWvTÜUà‡?ì¼²Sq—€·!ß6Ö™åXçTþàJ¦ž34íYò™‘†&´®j#Ó(^„Äë“„䡯uÕa™'!Ov^S§%œjt—a×\É1×c.Ïín}m¡yÎÞ‹×Ú£±­5ó †|a4γu"Éûã-ŠçìÑøŽÉUÏ-Ö ¡ß ß¼¯µòXœ‚ö¶¹N¥Y“#Lùˆä '”ÞÅ'¯N,'÷ ß3f»ª‘˜é0ÁÐî€g5¯%”Žö%·hBQ¤,]í’Ïá%¤nà W&nû-VãˆÑ à}ÈZCƒšÆQqyàä5ã>ìãÙÒTõ‰8<nB6Û7ê“О·ÍŠ2Nð¥HÁyž…âÎBžM°«b¶JKÅÎAÖÚ»6›<¨ø‹âI›Æ9´€Àm•ÒÑ$Efç3ÑN ¡ùViO £»ŸG™àÇœp§­âס/ÂÝ'f;|ñ.)6_Òó„›lo;oÃ_óõpŽ•œo”ëq9RHŽ!?Ll-œ‹Ã‘‚fe>£fT)Ë©ð㽕}ªŽ"cénu»{ÿ†C~ßlàm•”'b"sx²Ö© µŸŠ[Þ¬åã6Ÿ¢ÏE{an5Ç©“£;¿fªHÞêôÍG÷¾Öõ3žDd x ò±Äƺ£ü ®êPG\¦ïC~?A#Šê¨¸ã™Æ[¸ã™¦èNšÚ»Ørȳìøôº7Z/FIÔ=»ì¾ÁÛ`U]'²gC6Ç,¶gy4…æ5Î /Âæ3M7cÒ©^;WDeh´ŠSS)*n8ÙÜë¾ÜV‹|§dW‚Ò¾P'Õ©‹8ž®A^ëüÔ•—”åäéÏTüº„xÒ¦q - °3S×°‰@‘ }î„»IMÄ>,¹;ô.5Ï^íºµRQºrBž¾S)”jÅÆQó¨þšj+ù“ÀgõÞå´kÝžëªÃÓ2Z’PÊËÚéáiF8yÐXéoµÌxè5Ÿ.ÉÑ‚¬±³ÊÇ-º&§q‚8× k W :.×Ñu„FÞZ7^G×&wui’Uì7¡Ý‰îËé\Æ&J£À /t× *ÙLc1Íh¾Tï¤Y`²Þ¦‚üÛãÌ*íYû~½—Tg}¢³\…¼ÚùYIRÙûï§?ÝRñkâI›Æ ´€ÀÍúRèE‚ôf³h>ë˜/[‰ÈIàä©.þÄå,ðd­±Nm`¡â¦³guøb®~ÝÅoŠœ ½UUsb8| ù±1ÓgžÅ»Vhe$B>”éÝ]¨ôYÙõz—»]+ñíÇ]»T ÿ¡8b£ü¢éL•0¹¨ÏøÎ|ØÜNÅf[nX‹èªe¥Øä9…?úÜG®|ˆÛ¢¡¼k½qÜšÇoªÖçCÔáÃDësIÖþRWF üœdŽÙù¼ªýß=q?ñ½Œi—¶×~¶\¯h{ª£%‘ZJrbA̹**¼Yk«^mü¡â.W 'pMSÕ‘¡âïJˆ§ÓŽÌMIïA6¿z¡ìAPñ«âI¨öC¯ëg¹Ú”-Rßɘz/FM@Å÷HˆGsHè5¥C¦0&!ÓÉa^ÇFèCÇ[à ¯jöÆñkVÉñ£³çá¤íìTph‰¢Ùü0©Å–‹"¤‡j}¤H˜ N›õÈLÁžË–Šˆak•ˆfà9[5>3çY#Ø-ø‡s^ÑyãÃZ«VE²S~@ä½LDòË}%ßå»[väkàŽ—_¦ _Ñ-ß|åíŽUð$[¦ùÄ |äu¨1Ï©Æd]ÉÔ—hÝ4ñû0kf&ÞúöL™­‡$lÉŒ¥{²áóèÌãÉk¸2=k¯". FÇ ù¹±lܱ±8ÆÐw„f'äßž¹$ÎŒn@)L¸“œg"aȆ‡„¹'r À ”¾²QñO%ÄcHã1ïO»jW(„±¸DK-ºà¬’Íì·U«â#e÷@y2‹p,§ïéXG_>†l¾ò·ßÒݧp±Å/ï©’z"„ãÇÒÂ!-°œR;e ¥mdº:œQñ=š gô¯Û†õX¯¯ùQ`‡!à ÈzÇ9ÚESn.¢1%!ž´{MòPž#øíÆëW¡Ù{?Žî'ù«^1çÖŽ½ÊSªüägÈ£²²²â¿jìdgç–fslvnyvþç‚8M[kñI¿xµùòùúÆËOÛTR$ôƒFÒ7†[¿1üÚ’ô‘¾vDhGÛÒß‘z"v7Ž‹Xôc™÷ÎÈÁçÿýqô™aòž_üš>ëÿeK³h'ï¹Wp+•(Ã;öÅ¿§ixÔ6 $ƒi7æÿ{=~ÊjÚ§ ¬J1Ú­ÜvK%wmì™e=ûÛ?½Ýò 2œf·ÜRq^9hà{õïE kEhX­Œ<ïIØ2$)Ð ¼hJ‡âð IØâk¶ŠzúÄ^4Eosi6K&V×c¶†zÑ„"3Q¿¹rè´Â€„- E[áÀ««TݵTgâ2<ù„'µÑ‡Šž„|Ò¼GtòMJØro<5ûÂütÃ>ŽÂ&Žv×>ŽÂ&&k}tû®æ©ÈQÅQh긮¦ªÈQÅQhå`"š©•“iJÂO?5S|Ë›–ˆ¹´¯»Ò£˜ð²ã¹µªª}ôÁ&Sœ@ú`„]œ@è™”°[ˆœë« ö!ÙD7í‡5똬} Ð6p°_UŽÉÚ³ œÊÔó?tÚDJ‚ã4äéôM„Š?%!žÔMDN&×€Yýì’‰ ´2‘^z× jÈEÊqòDçÍc&AˆØ)z—™yPñ'%Ä“ºy Â$»cƒ0 1`uÉ<„BLÖ<Þ{«jƒ°x:mƒÒs¬iÛýxR· ‘XSd¶LÙ6ä¼.ÚÆìA`¶±¯jC°)ÙÆr¨»¶1”id2²¶¥p]¬Oæ6•ÉÄi3ý=n£ â{$Ä“Pô~òôÕç1¡çe± zA7i¼¨C*Á'­—¢2 )Ë: úÖ(}k}Üw¨¾øv!æÈÒ#üû'íõåÝß`¶ccÖXO 7[t(­>ûuhvëäØ»Ò‰YŸÂ¬â1l–‹UvoEï?³å `yt“Íö³{t¿º3?Ï®*S•@&+’;ÎxX©¯ª®S ²ê™À?ÂqÈãÆ¬zªÊD>AáŸdÚz.ºÍSeWY=½zó<“ç‰6ϵ&V<‚ÒêìÖì< ÿ›ãÇV]z»LaeB©{î6–ö P%¼ùš1í\;Ú<0Ñ|H›ÉlÓ5þ eÊŸ‚&arÇ ÕG”ÏP¶ÀdÎyÝc_ø6ûÚ ; ¥å2ëëëÇóø™8ºaÔzìW¹¿Ö„Ò lÜÃau' ù™ê+ûZÃáK0#<ù¼1ËãÍá¯WàBxòqc^£Ìdú<…W1ÚÛøe LÆ6’Ö¬/ÁìËD5k=™°–jýd' O[T‹¬`«liq9× ¾Êf#Ö³êª÷Cð$\€¼ ë¤x©ÞÞ¯ù ÏC>Ÿ`'NPŠ;#'¶Êd–~'ÑsAB<š4h¼ÞþŽSbšÍ²*®Y ¥G[O«ìÅŸ|’‹Lj(Y-ºxêû³±ñ{=3#3­B^5®Ã}Ö´¼mðcù|>Ç,Ïs÷êµ Ópvhá·jA Q‰AçEC¾o\‰ãñ Cb Åëé”uÅò¯ac^Çjò¸Û˜’:®ÌR¤Äv[«š5xt¸2SÕ¬ æQΗkù›S‘2ÿ®²;×r¬R¨†ÒMõªHûˆí²±kVeƒ}—í}§Ê+×d ì Åíì ãšL±Dlo„§ Oé‹™Qk¾µw¤ö½ú·“²5啾Ó#!ÍõS:Ça»ñhÒ¡Ê´ †aH‘œ´ˆäVÙŸiÚåwrœÔp ©K¯lJa)%"KŸ…ÿZlviP>¼ù†‘WÛ®=¨Ÿ$BëÀ ÈZcBÌâ<&œwø²Ö SlÌA/*î&pò¦V74µ-s=U#O!?M\!zC…øJ‘Ù XÎpùXç5Ë9ψ‚Ú)v†\õžà™Š‘®Ä«w–Ö¾<#0¡uðÄÁ)[u¦?+rѬBÖZ¯¨wØeà}Èæ+Œ>– {U#&kÀGÍ]Ãgˆç9.jx º(v&Gün¼ BT••ì7v !£Të#íÆµ C§ë Òû‡<û‘[cåšD1ó”gÐIð!4òÛ#=܉5bs8y®óF@ÅM/B¾hÜQg)‰…ûµIë*nk -“×è¯KÀuÈë ¶LÌÁz1†S±!?Lß§â7$Ä“6 ÉP 7‡¹ñ½´{ ÈŒ4VÜb— †t˜qF3-ŒnS˜?¾§ð|§k)’›ˆ´'<3ªÇÓ#‡Ÿz¶ò€IìG2õ=ÃnaŒ¹r3Cã˜éõÔ§ªêD„'€2õe£!ñ‹¡:Eáß}ÉWGú£…Œ GE¦ïCÁÛ^Oh]×êÐà¶¼ùVçWvTÜUà‡µvÕՔл‘ìoëLr$N*ÿpòŠ1åù ”Q`2#òÑЄÖUmä,Š'”Þ:'4 ñx©Û^ýTÈ»ËDh$ÓðèG2šGÔ4õ¬„S™ºçfØ5WrÌõ˜ËÓw¸[_Û…phÞsÂAM¤Ñ‰ç4ðäÆ|a4Îó c?b¼E1½ ŸÃ1¹ê¹ÅZ!ôÛ¢á›÷už½R÷ßÎAû“{·s„)_G> ¥ƒK OýQ+îk;œ‚œÜ«™ØyƒŠŠeÂtç­‘Šëž‚|ÊX'.ó++Q&ø7–çX[%»¡Ýx± <·Çà}Èæ›aÊs ƒÆ ìâÜrÅ&?· ˆtFª3 Ñž€œÜY»X]–ÏèœÌÔ7ù ;&ÛÐ[ºUÁó)in‰VÓQ:åVÄrxò=c¶ ¡‰™ O`5¯åøö%·hBQ¤< #lsëÃP݆®LÜö[¬Æ£Àûµ†5£âòÀ5ÈkÆ}ØÇócªêqxÜ„lþ¶o6Ô'¡ÿ<‰EEŽéòSä9Å™kV¨Äº*f«tZ*V¢öäAE_”OÚ4¤ÅºávèV)­RdF ×~ ùViO £»4+Ê6Žç,ð¬Š:+åèÎDèn‡Z.riDþ¶ëñMTÕ&¦ ŒŸ@~bÜÓ'¸áåÈ Ã)(ð4ÞU\F‹÷Šx!Üi¼$ÛŃðTü¤„úáh|€ØÙeax„c™ på3q¬Ñ*~ú"Ü}b¶Ãï’bó%}À½ÊdÁÜmÕV&þÇÏ ›¿â·êû¥Vãˆf£.õ4 ª–9E˜o–;m™Y©Ø+¯¤oTüU ñ¤MCjZæ‘|^U;®Â 3õð¨šF9Øú:<Ú;«ggdUË'/š5¨ŽdIÑG"Lxƒç(Ÿ 5¨ÝÞ|'A‹ÙÞ¡â+µöÅÕ(²=Ý…l~2}„/*}þ*YÕ¼ˆÉ=àÈænÑCw;°+rFéhµBI+í \NI\ù°¥¾ãëa:þr=¤KÚ†G/Ú©ö(Åú÷èx¼ggUWô6ïJ' ;­lÒ–@‚7eŠC &§ ëíj¶õªxÆÄUv]§_Î/C¾œN¿Ì?€üq¿œãƒÀ>+[ûÌ*ùüäIբݛÀö”WKÄ- Ü„l¾{q*´u¾fñ\Mt%h‘VªSoÚœÏ49é´cvU*vòLúZBó,~ ص*ˆå@+#Ì¡Lo誤ÏÊ®Ð[ÚíZ‰ïiïÚ¥jøÅáåWH÷`ª„ÉÅsxV$ æ¦íÉ-7¬Et‰2œ|eωö-¹\ù ÷@Cy×zãPòºªZŸUÔa5Ñú\’µ‡Ÿoz»cv~'¯jÿÒœQ?çg¾¥í¾õ–ëmOu´$RËÀÛµ®FÆ 1'>¨¸Pxw:?þPq—+¸€©êÈPñw%ÄÓiGFD_¤b¥ñ m‚Š_•OÚ4ÖÐ;ãÈ Ö#Q*Ò{‰\ÂñL=͸¦s¤…ÖµuV©•Ãq¸€k/;Ξb)ÿ¬²[«ð¸wuîÊ+^b=\ÏÔcËöñ}JöõÂÞ ã7¶ØO7@Köv°°Ûã,’¹Ô¿©Z‡u(Åz&I¿ê 8{ÎÎn i’j{õ›­8ñkÑ7ydPÕÁæ!¨?l®R§›R±…´­œŠÞ°KÑw¤·÷lŽò(·ŠÔèm~?Ðü5ßÑJs­Í–ìÙv…]ãš¾tûš²kNDÇ2# c™¦D}ºçÖÉ.1 Ò‰Èh¤#’ߨ{Q·xnI•î&º›pò¼1ÝM>ŒPÆ6Þ¢$ÏØ—ѸX²}?Zhܹ&U‚¾VkÏòŠÊ#âcÐÜ\­$Fõ ºzäQ¥¸r`€ßáÇw¼˜º¨ÖAä©%LnT?Íëµ*çFg5xMT‡k9[¬®¨ÓÃõ#©X)pMÚã$FBËWÌæÎ è¡ÑÕÝ–…Æ»«°º‹a&û6ÇöçuBÝ“ÀGÍO׎eßÚtBt?üÿyå-ËOÑ|Ÿf:q*ê»bšñzxò¹Î«7<ù|K¡Z¼-ŠÑòž‚WñéµV)Ú^i?\¨ªÑdÀ dL÷8±å·ñBU«>ƒ&ŠA]ëÍÜ¡á|ÇÍ~â¹[ô.sµÞzÇèVc+ü¿i=°ã9ª§›>ƒ ^€¬ý ïÀ_>\€¼Ðy#£â&€yÈyc­AŒ ùþ-%•CÝ­EàÈ „¬Cý[0%ÂäCVŒ¼.Ú~ÁsªH ü*ñe¦«Þß#¡™wÖº‹¥LçU&:å%a«Ü|H¯Xiöô£UX=Ð<µÅh{‡Þ,s‰"õÏщ„f÷3ÚŽÎ|î¯ZÁ®êÔO|îAÖò“ÔF%*îp²ùž×0ÜwkªzE,ŸC~nÌ&_±£¥}8UìB œZ«à¹¾ÏʵRàTK6×)_y|úJD˜‡¬5®·-u ŸË)µ[9¾Bi_fº:6Qñ=šMô¯ÛzÕëõŠü~‰¨à/eLò¬DcJB_ßxùi›Šþ•#ÔÞq¦o ·~cøµ%é$}íˆÐÄ7ˆµHà7‘9°éþóè¿?Ž>;zàñùãœ|ékýe&ú¼Ÿ äëá_üš>ëÿeKÓôˆîøìÓWOXDKñƒFK ð²îaè ,¼jýÎòbÕsÞX½”«‹/ÃÿûÔÞ-ï~¾ø’ëέâ­ËËÖÖí¥k.B2Mcçì{pÛ¡7†±_1œ=%Ãiç›þ'=[~­Céàu˶[*¹|q*;Ëzö·5Û å¿Sa[n©8¯œRƒè‹à¯!¿6®ŽòÐÔ [†&Ô'yS:¥zHÂgW³Uz”#g÷¢)z››H³Y2±º³Uß‹& ì‡Üo®:­0 aKlÅVˆÛeyï­­i ñ¨Ój[jÿk?\E‹¤] ž‚|*±‚cG>*n8y&ý¡‚Š?-aKx’ÔlS ÀÝ Û¤b»h›Tü€„²Í} ZÓ¦f›Tà80EÛ¤â]´M*þ´„ݲMáÙ´¸iÙ¦p!»h›ô HØÛì}«~™žiàiÈZz¢jžôŒ߇ü~bÇš'=ƒÀ3Ϙ+„ªyÒsVB<©›§XÕvÁ<%“ì¦yâšy;džûêæ)rWŠtz©™'®pLцa“µ:zìW•äÃ,§ k ¢j&2 ³ œ†¬µcif"Tü) ñ¤n"R$­n˜ÈÌb¤»&2³˜¬‰ôRbUóIN@žè¼yŒÀ$[”Ëæ¯Ý•̓Š?)!ž„j?ÀÕ±Þ)^I“Œõß5a„xj€ÞOž¾ú<æ/ô¼,¶áó£L´SDxr’È4Þo<ê4è[£¿‘ú¹ïP}ñíBÌ)æàßÿv{}y÷3PíØ˜5ÖoCo¶èPZ}öcÔI Ù•سïJ'vd¥ã7Ãâ1l–‹[ìÞ‹NOeËAÁò($‡íg÷(vug~ž]U¦ú4áEÈ©Ž3¥¦³ºÙyeV¿&„ãÇ;§W±<¾BÙ“9¤»ZܦžldMξ]b«l9k9ÇÞ.S‚¢üÍslŸº”¿ŠôéÒÍü5õ¶ü]ð&\…¼j\‡Þ- e³P<¡t ÊÊ—¬qg/Köð6l«·Ka£…¸"½Ö¤–£+‡ôi(FÛR”©‹ÿËÙù\ n•·u,i "üò—Æ•û!“žjUÿ¶¹‚ÊÕ+ J„ÒñãÔM²ˆ²&c’?ÕYGä6Í5bR…?/\Ë/«·²ŠyÿƵû<ñÚ-©WmÕ!”îñVíXKÕ”ií€ÊNýp4¤µÀØ»7²2ç]ð$\€¼`Ìy”I½­ÌÉBácŽsÊ1dÌZEz¬’]Ù vÃk'È^Ë_»žc³•jav^]#¿MB)+¤!åu"ß pÂÈt£cy”P¶ÀdÆVá²ú¶U‚ÇZr)ItÉ ´|Ö2¨2È̘æcÖfªŒ”è†ÃLÑ.ÖWw˜oX…Æ/Âê¨ÛM | ù±qeòræpËYÊÍÊ¡Ùèô€ ¢„yÈycÒ'C Øì,%{ }2efU°!L.Іº)}‹²&cJksìGn(eî¬ùv“ÒÒ=IÏŽÂ ñÁYÚ7''pwvžÅ^)‰­…æ„k׌k±T øu>­,?/-ƒk«dóIÓ WŽ~véÚµÜÍy‘ÝWÂ%ÈKƼ#Þß‚9‚fC±°kyV!°½¬øŽëL !/³^¦Þ •‹”âmŽ=öìos¬¡áh¼GÚÒ5 â5%\†¼Ü£{ƒ²&ctç1‰&äCÔ‚Zƒç˜ž‡|Þ˜åfüôõ¶>]] =zä@^º–cH'I@Ù5†Û·àOhu±m±ƒ¯í·V¹Zyl²Qqû‰v¶òÞ#ß#!ͽGãÐ[?þHõƒ;Çæ»"%ÄÑûY&ZNBžLL_bCºSqýÀ)ÈS óªëgPKÂiÈÓÆ*zT'Q8<Y/xåwë +ôæKµ&lu½˜.CÖš¸Ôõâ,ð:d­ˆ…ÍWÔy4!cAuØ &7€kͽ÷™þ§š(Ûê:þ̇°‹1`Ž¢š½iŠ3£(_u¿Qµ£ßËDc*áä$º;¢âúâºÖ@§fG¿‡ <Y+iSë_µ×U·›Ëñ‘¨•Ü(銪úÑàdóˆïs !£ý´8ä—èÏ*:5usûZ“pò\bJo»i3Èq`¨´ß7¶0ù·Ê†NÅ÷H¨íÖµýVûâ¿?‰jgtªNßh}ÑOŸÑg4rì7à‡×Ý‚kÚñª¶Öæ±z(‘ŲUY”W?yѾßÒ_£¿¾öëzû†%óX/çZ7›/±'vÅö²¹{îÛý»²¼ÂŠ.«¸³‹”jŸQRŒ}êßøôùóÍq:ÄÓf»YtNBQ`ÖÿhæWˆÏÍ£Àlu o]ï•ïiø³/aêˆGtïÖ¸Ö.±ÏJ¶åÛ‘òÝEÍgŠó’7ðØË…ÐÖiýu5íA× ¯×C+ŽÌ ñhÐhça KjGìËÍ—Û÷M gäp|wb1¾N%t6bŠ}8y"ýn¡âOHˆ§ûÝ"‡–™€¬Õ>mKí{m•«Ý6”Ø§Í ‡´ú…Š?)aËqVÓ~¡1E¯_ä°"iö‹Ô¥‹ýr}!0Ù~9ý*ÊQ¤è˜áüN V‰•m«¢g±]Cxò…»)p‚R»aMÌœ„³gÓï&zæ$Ä£ÙM+»¯þ4›eE^³”/ž‚Ò­²_|òIý¤OôÙ;?;Æ¿;«þZ[¾y¾yŸç…ÎOÈÎ)†®ìÏæX>ŸÏ…Šìºüu†U ÜðÓp!_®•¨Zûì÷Ø[õj ‚:/òãj<¤}±¥]Ï±Š•÷ÊáOÕiã}èÊû™ÎøØ1ÓÆû™F˜\#»©®çdŸ?í…f734¼mÏ-G (ÃIEUˆððds;»ÈpÕò%_”å­T¢ÑC‘é(a›( ­ëú¢£)Ü–€· ßêüÊŽŠ» üò‡Wv*îð6äÛÆ:Ó£|À‘Ê¿\l¾¯<"Ÿ…2 LfD>šÐºªœCñ„ÒËó„䡯5?Õa™d9µG2MwF:¥©ç$œÊÔHî¹’c®Çè}øÿ[_Û…phÞsÂAÍ}c{žS´µGcâ9 |ù1ßGólHrÆ~Äx‹R›yA4>‡crÕs‹µBè·EÃ7ïkžåUµ&ç¡}„ ›Ï+G˜rèB†Â ¥óW OýQ+îk;œÊÔ_Ñtzޠↀӧ;oT\/ðäSÆ:q™õßÛu »ìå9tÿ¸¡Ýx± <·Çà}Èæ›aÊsËh¬À.Î-³(ž0ù¹e`»V‘‚ç½ûÌBtF€'2õ”ÖåY Ofê›–†“mèmè$‹}ÉznËÛá'‡c_PÖw“À{ï³]ÕHÌt˜`hwÀ³ƒšW m±T³£}É-šP)K7VÚÅÇ1= Ùpeâ¶ßb5ŽÝÞ‡¬54¨i—®A^3îÃ>~ßHUŸˆÃà&dó·}³¡> ý¯Ñ=-+J¾Êw”"Sä)­ÍN&ÆtUÌVé)©Ø67¯Òš<.¶Ò¦q - °3[¥âì•";zËÕƒ<¦Ã.v͇Ú>'¬â×áPÈGof;|íªw8´žCÁˆB&àƒ'åífî¶j+ÿãÀgÍß0Í[õí«qº­Q&¦mUËüŠ@8y¾ó–yY*ö ä+é›UBÜ€l~†h†…t,ΪäÚ¾O‚ÒSÞ{^D/v×®¡h‰4y¬>Ë-¡ü%üœìI“ñ–»Yª“±JP:=Ù-ÁúÄÉ$L6ì >0C:-»ëú¡ç¹e‰Å’ú9X¢zøòScÊK,ŠˆÍe¥peºÀŒçddY«à¹¾Ïh£jUì’?ŸWU¿e¨Ür¦m,ÚÄy4lhP»|YË9W[äQq·“¼Ý£òËÒó¨Æ~·£ìÅQÉ›À dÌ$Ï¢ÅÜ6ß ×rK¹k×®1wË·)q\¼<ØsÂE©"çëP]Â<ä|âj|$œ5ˆ­;{Wê¿iíûòNáÝ»ÀûµßøË7 §p{‹Š[nBNâö–ºYƒÇÀ§“Û[òoG`Vüuª"£0B³s¿íŒåló-p•zËçüÙyUG„8Š‹‹;¯>TÜ(ðäkæ+Ú<{å–í½]‹vµìBÑ Â9|_ÙÛ'VKÀ ›ÔêIToBy{ ÷$¦H‡:± C\£G;¯0TÜàd­—nMM°Êvœ7¡–mÙA@;üÕªmyV¥®·jüÆ×§ÙÊï,ÏÓQä²]v½ýó]V ›NU«ˆú8ðcÈWá<ãA ÷\ïîpW6z÷íÛ¯º™s jFxòù»7f3'/Ë ³ô°Tü ñ¤MãC´€ÀÎlæôc"Q$G~{?p4cz㿯…Ô1»E;7dv…¥Ø×‰ös4xÞ|'¹Á”GdQL‰Ëà#È)8oTÜ p²¹óÖ£<ÏRùO ë½îj×%cÔ%U·´OÒ²²gtºM(]ˆïtß܉jÂQºlÜ7ªæBåOÅõV­¿í/Pß”Üì[­~9ü²Ö õ~9ÌBÖzk¯61Þ–Ôaò|ú3EBó,~ñ,‹BŸÒÊHÄ>-Ó-Š,æ³²ëôÂn»V⯡wíR5ü‡âòËòÇ0UÂäŸ> èhHØÜNÅf[nX‹(æåÏ”<'ÚOå>råƒ@„M }ä]ëãÖ<>Mµ>OP‡'‰Öç’¬=<¨b§E‰JsÌΫ¿(ýô¥›Øößöíó–ëmOu´$RË@qšT+’XÌ@sx•ŠËï@¾Óùñ‡Š» \œ@¼2UG†Š¿+!žN;2›’"J›ÿi{Tüª„xÒ¦ñ- °3Ž OBe‚RäG£Z?ðäcÚ~ÌÑÖ­Þ/|Š©Ý0MŒ|·R±ùw^£ cÀ‡v^Å¿DGJ¯ÄÓÖ-*þ‘„xÒ¦ñ´€À½S”R+ü!”›Ðüboëäò‰ãGiY‹EÞ“Co‘ò²[´K¡µ£ÚÌÄþ$ðcÈæç/OŠwRx¤“BöGèôeLƒ¹©GYŠÝ"2ïd–àгEÅM/@Ö;†Òd“ª>7?+!žNŒ?”4aò\ú#QB< Õ~èuݼ۔=jÿvÆt44j*¾GB<š69dJçÇ™hrˆÇ°UÖ×b´A`ïG—cm›¶ª]_¯øâôfÕ³}î„£4½2!'? #çªÕx%‹¾/F~’‰æ5Â_Œüð“L×_Œ…Àï׋bt˜â‹*îp>“Ô‹‘óü(­½½M¯CŸ"z:–oû+djûªEä®?‚l¾QuŸf¡Åf•¹?ü<ûB=òÓï@· /@Nît©‰áÿ”Špòrç•‹Š›^‡l¾=~’Õ*%ÚÆÝwklϪ¡×¬ªQÄèð dó¨Ñyqë´‘dÀÙe*ne!*EË‹Ç*Ï+_A¥óó‰uâÈë¢í<§ÚHïp`r¦7ÓU—…Šï‘ÐÌe5¥ce¢M#Él ÝÙ°J…Z‰H£“‚UÛ£Ѻ‹t+[¨y^t½ªV)º>hÙÅyUú[èHÂ;ï$6b †.UÑ)ÅmÕñª‰œÂñŒÁN¯ÚxU@êÿ@óЦ" ª½I´ŸB6ßY¾h{^Èr‹îÌGWd n¹Z£¤¸5~é(+2-¢q /BÖZ{~^ú§An ø!ä$¾Æœ—¤â®oCNò˜fŒÎSq—€w ë òoÇDDÛ¶Äeø²ùìœ/l·Ž}5¬H8OÓ?PvãwÐð„"TQrãü@èÆ–Sj·ëh¡´ÝLW]x*¾GB3žþuÛSÙëõÛ)ŠüX‡ƒ¿<”ÑÌvÓÓîT¶rs) ñ¤Ýk_Caš)Ïüvãõ+ûmÕû1Ë«^1z¿;öêVÍ)ò³Ú†]^YYñŠ_5îegç–(óÃÜòìüÏqZT× =l›dð‹W›/Ÿ¯o¼ü´M=¿AÝg Ϩ֓¾1Üúá×–¤’ôµ#BA’ÞïÁ1&Žm6zÃý÷ÇÑgGüá/>¼€A©¯õ—™èó~*¶èßûůé³þ_¶´LpÃ?ûôÕÓ†n8Šÿ4j°µ€‘{Û ÷£ï µ~gy±ê9o¬À^ ÊÕÅ—áÿ}jï–w?_|É5çVñÖåekëöÒµ¡D™¦‘ó@ö‡¸í”ìC¾b8ýJfÓnü¿èYòSÚ°=¾hŒÖÛn©äîÑÒLº¡—õìok•XÁ±#7œjx)Kf0 ÔGlÔ„=âI¨z?yúêó˜¿Ð󲨆q9iœu9I"Œr³È4Úlý«ˆýÔÏ}‡ê‹1iÃÈÁ¿/µ×—w?ÔŽYc• 7[t(­>+£NõƒvˆobC\5xcy޵URö.÷W ߇¬uT¹mXåf#ç$Ä“vï¹è1f½g|‹ªš‰¼&x [EÝsúMñm¦­ç”TdÈ} ZƒâÑÔáV:ã¸%ìTS ÊE¤F€§!'y!ÆË¤âŽß‡l~AYs©ø3âI]s=h«×QÍíÝ/; fƒ@ÉMHy¯—Ü=Û‹Bšî9¾}X¾WXÇVaIÄÇë×;¯à”šð!ä‡é+8¿!!žÔ܇RûVpKõ,Ÿ¥ö;£àµjµÃ îC©ýt܇RûÝUpJ-°[ @©ƒŽ*¸zžî*M(íC'¤Þcõü–±·QàiÈ)ø´•°‹¾FBmߣm©ƒˆ±Õn?¥ ­eL×F-Pƒ¦ ìѵå ‚ *ý¦» ð•¨Ýf4öÐÍ–“³ïJ'v›5œÂùR`2ëÉóÑ=¢l¹º“£K4Yí%Çv÷öççÙUe–ûh)Âóϳ<Îxt™¯¸ÇÕáõSp!<ù¸1¯cà]hËÆ†*‰¥õ3PùYýpì”®Çòø([`2¦¿9Ç#NEA§]òò(°=wéf£0ðÛ÷gEêöñì•ëòsð'©£6ëòÑû|uqp%ͳ¢¢ü5?ºRM±¶m«°Ö¥ú²ž½ã…u ¿{!-¶:¿‡*&Ðþù\ØÀV©T»_¶¾±™ÕˆÎ_¨yoìÑùñ­zj þ­ØÛâ±uúêAøòóïÝXöû`Fø}Ëþ$¸&7–n˸¢¯²kùëê£ÚŸ)ÂÓµ\XÃQíO£lÉŒjOæØÓŠØV‘Ç>n®r<~[!l: ÁG™¸#;©Ç>®gÂTþ j@(¥‘üžÍŸ³?û=3š?..Q£™o6ÄZe³¥òlŽ…*°Êxž[uúóàH8y¾ 6ôP¶Àdl(i­û‹`ö¿gZ÷—Àå/%ªuÏÕ: ìR+YáÏûì÷B‡…{Y++[~ömŽ]Ÿ7SË¿ŒJ>ƒü¬ jùWP¶ÀĆöW‘k…°jK1šB®´Ï:J0F~?ŒÌ²Rèø‚Ø;®GßU®Í_E “ÚoÏÉa4*"^ÿ|ž‡¢ŒR¼ZÛVÁŽMþKÿ¯2¡QôC¥øë([`2J±?VåXt©)´§BÉò}­±ëo€)á"äÅïÁØõ7Á…°c3fc,ʱ¦qL}hú[àH˜ÜŒ™ôLõ·ÁŒðû4Sýpù;‰öö™˜EÅmŠ´Ï@6/}‚E£ÞW{žUÍþ^Ñ{£®zlEô½èZòoÕÀ¿²šíYž4æó2Ñ>¥Àdö,ç¶œŠ[v¬ÔŠÝ[¨/«²ù|~žýL™é?DkÎAž3fúIœ£¶Ã=5)±OøaÉñƒì¶UvBW#üЍälè±Q¥”«ôP B)=¬a•z~®Lä£pÂÈ=ÆDÖçØçÑF-ÁwÂÆs ÒF[´¯ØÑ~\Áµ½BÍ‘Ÿò ¯[î„ëµÞ)7ÕãÊR¯•y0å7v!}±Ò>m ‡9»Æ}´%õm¶ ’„W _1&œÇŒèU-/XYùf¿ºëúŽÍŽë;vŽ}Œ´&È¢„yÈyói–øµC R²»ü¤;ŸŠ®ÝÔaùÏÁŒ0¹iü$c-c›Æ;…:„'!Ÿ4¦¦>øÿK”-0oüþwjŸåçaNÙº"²¶¤¥¿qÂûïï´ñW`ö«ïŸ6þ+ÐùW]ÖÆ²þw©ÿÄÿÍ÷Zÿ-˜ýÛDµñúAmŒÙéªð®åyueýÀ–ð:äë]PÖ‡²&£¬sìa-ˆRƒQàjËõÓ >àI··¬­Ðï ]ŽPÄÌzÖFò¥<ß.m+×ä߃=ádó“hŸÌ1ß­¿j±ß†Î#,»<‘Cô–™|&ß¶)Ž7ºU7ˆêk±7tÄyÝ”«ôP B#¿ºm±ƒ¯‹aÛbÖSTÜLT/Ôõ“Êï‘ObM`¿µÊÕú½˜Ç`¨Úÿ)&ˆ;ôŸPkÚ-ÀWÚætþÇLtQ ÃV¹ùʦ¹EçS¬Y¥6o1}¾uÌí!Ú•#îþgt"áMÈ7Í—©ÊgUÿ Êþ/ÓUêa‘{bó*Ækx ò±Äl-6s 7<Yk?0¦Ø˜[½TÜàä cm˜äjJîåáM½ŸSUT¢tøäº ¨åüƒŽ*ê!@#6<9I•‰ÑÔ?€vþTfPWeÔ4õ U8’IbÏ÷×Tž[Ë*9tšÌPk‰ÞIà È7º µMýÃŽjí¡‡£6l#ªSzû‡ÐÕ?Ì´Õ)½ýCè*á$äIc…8°ü´#TUUS‰Ð0 9¹d±tðݶJ¾ã=‘>þ×LW}Êÿ ÓhäU¿c´ñßÿ„jgtªNßh @ŸÑg½Ñ=öð# ;ÛàšöC¼ª­µÙTO¼±X¶*‹Ò˼hÞoéÑ_ûu½yÂy^”éÉ]bOøXD‡H<÷í~8ø/¯°¢Ë—«v1\‡‡¿Ø —³1êÔ¿ñéóç›/Úi”¤Ì™\EI(eÊúÍüêÂñy]e´S¦<2ꕪû]ï”ïiª³ñ‚zsAB<¢wÿPoØZ¸Ä>+Ù–oGº'±"ok…½äí»µ¯§®“Òä/³7d­•a%/! íü¡†ÆñúróåÃ6¼Dè#ø~¦i¹÷î¼b¼‚ŠU>,˜a›ãiõ –{uÄÓõ^¡R¤\9Y«yÚ–Ú÷šg’)÷=àd½ö0ê*þ„„x’ê?]´ºEζ‘f·È¹NºØ-Gѓ햵O•'óíþ}Vµ¼pèl¯JC—„œý(}iÑñ¢K¥|Ó½èÐýç‚êì>ôácÈìËÀ Jq©à³¶;{›V_Òó‘„x4ûòc:wÿdšÍr·1gËVµJ{É«ìÅŸ|j‘XõhH SP"ì¹ýÙØCC£¿¼ ù®q Ö«º¾Ãµ½‰ÒÊ±Š•÷Ê#­þ®»—/Ù¡KOǾ^¬«×bÌyÙ׌k1ÅBWn7´å oÙtøìó—_hÜ!:ø½LSðCc›­ùÖN\v*KÍmY°§e³"V¯À–»¢Íž2¥3ÒþѤC•i7-ôÃnÉ¢ÛF›eur™v/Ì.½²~OÜk``é³ð_‹ÕµåcÀoh·gìF»¥ÿp¸y#1³‹Ý°$¼ |ùQ‚ÅÆlXÞnBÞÔꆦ¶enìÕòÃÚý1ð)䧉+Do¨_)2«1Ieu^#¨¸~àñÌ”¼Òˆ±¨Õ8&ç~ŸÈ³§Û̯ÚgÛ¡”²áœ­Ñ '€— _JÌ!Ÿ88e«NØD,\…¼šN‡]Þ‡|߸ÃúX6ìU˜8¬AÖÅš¯d"xÅ<¨¢·¼Å¯î9ÁnSx á÷ZÑ«À­²’ýÆ.! †j}Æa„mndê:ˆ´å™g?rk¬\óæ×ªÕ’ò z |üööðžH¬ЗÎç ÏuÞèKÓÀ‹/wÔYæpµ¡¤×>«¸Œ:NèX^£¿.×!¯'Ø21±ÇÄk#úòCÈÓwçé;¶DÍK‹†´ýj¸¸94*$-·™Ñ\Û‚<¤ÃŒ3šiat›âëðM€Àe[6ã-­ýp'Vé'/Oqxèn¶G÷y<[yÀœ€Æ>ÊÔÝYÃnaŒ¹U~&NùœtePNt‘¶âIÇó\U÷… úUŠ\&Qþd¦i‡.¡™£—6™T§IèÊd¦3>vÌ´1™id¡4ò±›OÓçdŸ?í…f734¼mÏ-ó_Ѥ¢ªN“°±IØÙD"vv1T'NÔò%_6£8 4z(2•\>3¿—Ñ™[×õEï‘5¸-oA¾Õù•wø!ä;¯ìTÜ%àmÈ·u¦'öêäa­~¸y%ýyÊ(0™ùhhBëª6r ÅJ¯¿‡È¤óÛ^ýåô»ËDh8™©çê´¦ž’pª¡5†]s%G÷T¢˜aîÖ×v!š÷œpPsߨžçmíÑøÔˆðäÆ|a4γu"ÉûãЃÛv½ ŸÃ1¹ê¹ÅZ¢òá›÷už½R÷ßf }„ ›Ï+G˜ò‘V)´|~"ái£?jÅ} rÇ€S™ú¼Óó7œÎÔ³;vÚ©¸^à)ȧŒuâ2?Ôº·ëv¹zêÚ ÊsËéL#1Õ}Èæ›aÊsËûÐX]œ[¤`.˜[Äe%Õ™…èŒÅÒLëx…š.Ÿ‘ðd¦¾43ì˜lCoC'YìKZÌw*;%ZMïðc~Ê÷ ˆå$ðä{ÆlB53&Úðì æU¢ѾäM(Š”ÏBÅÍN ¶S·á†+·ý«qÄèð>d­¡AM㨸

‡ÀMÈæoûfC}úÏc4[Qg¾£)˜"ÏsPÂYȳ vUÌVé„Tl›8EiMTüE ñ¤Mã…CˆŽi‡î6Åv+}mÿÑQ¾•C>l~<î7<ŠŽASPài¼«¸€þ¾is­SȤbÛÄ3IKó©øI ñ¤MCù:h€âÄ"»9áX¦~T!!#\ùLœ´Š_‡¾wŸ˜íðÅ»¤Ø9zÕ³}zÿëÆFÑ8¬ÇÏ ›¿â·êû¥VãLc£.õKþª–)m¡¶ ÄÙ)Ëœ“Šmí,-“ â¯Jˆ'm—Ð;c™GòyUí¸ C$„<¨m”ƒ­¯Ã£½3±œ¡cë>ù{Ѥ¨Au˜…œÕnø ž£|.Ô vxòm,f{‡Š[®@ÖÚW[ PqóÀ»ÍrðE¥Ï_%«š1¹|ÙÜ-zènvEŠÚ«g”ñí \NI\ù°½í¼)ns¬ä|£\"…äøòÃÄÖ£›¢cÏzvqVu5L&×<9…ý—,š09Λ2ÅÎ!“@ñzCoW³­Wå;?¥èÛ×uúå<ð2äËéôË ðÈ÷Ë9>ì³²µÏ(<íÔ¯:)¯–²Ò³Ù@CާB[ç»a–ÚÖ·H«?Õ©WrÆä÷yvÌ.KÅÎ@žIß#¢âOKˆ'm’kÚAÇì(¿ˆ¤H\Õ~à0äajœR_«¯¨~ ˆˆŒeêÇÛòKZª£q™¾ùý(fô£âŽÏ@>c¬½‹-ǀʎO/Dl:cçÙe÷ Þ¨ê:‘= üòÇÆ¤Ç,¶gyÚ3Ò8Y&ÅÁ/$¤S½:§ò‰Ê$ÐhžWS)*n8Ù|\¾ÜV‹|§.ÇJûBT§.âx¸y­óS×UIY@~þœAůKˆ'mÒ˲N]ÃÒ¥YE‚ôâªhtVR¬7šˆ}Hi V)Ï^íºµRQ:”L^£S)”jÅÆaĨþšj+ù“ÀgõvûÚ |±®:<-¢% ¥+áž¡a„ƒµ6Ššê«eÆC¯ùt‚ò5J³hÜ¢‹g<ˆóp ²Öp• ãr ]GhäÝ©uã5tar‡Û'YÅ~Ú辜Îu=¢4 ¼ùBw]¢’^…¬µ{¬ÞI³Àäœq'WÔ{Ö¾_ï%ÕYŸè,W!¯v~ÖÏK*{òýô§[*~MBÄ}¢ÐGÞµÞ8”.“î©Öçêp#Ñú\’µ‡Ÿ6Ä¥"ÛÊÎïäUí_ c/¿‡5°ÿ¶÷\¯h{ª£åMè8ámÈZWlb‚˜7‡T\.SQÉå;Ä;R•LýÅ¥éªêÈPñw%ÄÓiGfYRÄ{Íç*{Tüª„xªýÐëúÛþ6e‹%Ç­Œ©÷bÔT|„x4‡„£¦tèJߘ„xL§e1—Ñy¢’åÉ1£ƒ‰®²/%å“îàÝÌ‘(.]ëPƒáðd-#SP©¸«ÀUÈI®bTéV&_]Ê$±6ȳ§6EU‰Åð1ds§mnØÞ®]áY¦B¿Å–nÁò žÃã´‹~©¼etÊM¸ YëÕqÛRG^G|«c”*q%ÓÕa’Šï‘Ðl˜Œ[k­×]UE~4oO@Ö¸j<Œ) ñ¤Ýk’k‘€òÁo7^¿²ßV½GÇfýU¯˜ MkÇ^åÚò3„e_YYñŠ_5ÙÙ¹¥Ù›[žÿ¹ NûÙ 4<øÅ«Í—Ï×7^~Ú¦š«¨¡öñ úÆpë7†_[’FÒ׎ýЋc» @œEôÌc™áÅ3tq’þûãè3ÃŒ¿ø5}ÖÿË–†ÑÎ0r¯àV*Ñh‹Iç{Ù_mR•Œ¦]ôõÿªgÇOY­B Äp>*FÛ$Ûn©äîñàcÅzÖ³¿­ñƒE-ï>œJ¸Â/ç•ãÙý àoCþmãêh…øO–aIaÞ”]’°%GŸf«¨gbêESô67‘f³dTפ½hB‘è ß\9tZa@–øÖŠ­·®xï­­i ñ¨Ój[jÿk?ð\1ï@ÁãÀSO%VpìÈGÅ g Ϥ?TˆØ[Φf›rb.Ø&{ØEÛ¤â$ìmîkК–05Û¤Ç)Ú&7ì¢mRñ§%ì–m ϦŵHË6… AØEÛ¤g@ÂÎØæQ‹¢RhP›¶9™Û9û¤gxò™ÎÛ'=ƒÀ³Ï¦oŸôœ“Oêö)–µ„]°OÉ&»iŸß‘·%!ûìó¬¢SSÝ=#NÓÀ3“³“C ” ž…¬e)jŠ«­ÏA6· e¥âÏKˆ'u•òtÁ@©Ø#’utÉ@Ú?ÚT{«TÝµâšæ°TIãÀ™;e° “™Ó²*~R–X©ÙÇ lb°;ö1›#V—ìC(„Àdí£n$×4­ dJIØÅ „ŠŸ”°[ˆH‡'òÑ¥lð q¹¤Kö1 ›˜¬} ”œŠìW•ß¼Ã,§ k ¢j&2 ³ œ†¬µiif"Tü) ñ¤n"Ò ¤n˜ÈÌb¤»&2³˜¬‰ôR`UóIN@žè¼yŒÀ$Û—ËZ—™yPñ'%Ä“Pí¸:Ö;åÀ[i2‚Q þKr£ ì‘OB ÐûÉÓWŸÇü…ž—Å6|èŒÏL¦qÖg&“D@qåf‘iÌ4uô­ÑßHýÜw¨¾øv!栠Ȥ|¿½¾¼û!¨vlÌë>ôF`‹¥Õgk¨“@³ûr#ïJ'vd}‰¦]x ›åbq›Ý[`öÛªU)æw<§˜}ËVÙÒÊÒµÛ_%TÏ'½Žæ"4;ì-ÿ–·/ò÷IDØ«UœíìÒµeø¿å+UGæCP#d™1Í\HÓ¯Úvñ Mÿ[/È^Ë/±+T—·óê”7@“PŠ€Ò)Ûˆåñe Læœñ©è _¶¸£ClÙ·¡ Îϳ«Êô¤ƒ×f²ZîAó˜]_U]§dux=Â65y-‚?I𥆋Ìd•qœÏ±è5OøÁµüMu¥{¦„‹» t¡lß3¥{ JO¿gJ'ݲLPé–W:Içø`¨1Ö} ®„K—t¦ƒGÄ_Ûo­rµ$®©˜k©¸OÕ4e„Šï‘PÛRð˜ÅÏQíŒNÕÛ9†ôÙ}†³éÇ~~ämpMû!^ÕÖÚ¾ù"îD·xÚ¸¢kº6°þG3¿ºð@|n~m`äSûmPï“ïém³Ñ‚:sAB<¢sÿg½AëÞ%öYɶ|;R½¢[àwt£{ N…½äÍ»P²¶ìRþeNüÌ›ÛS×ÐT€°ÍUgÍJhÝ9X•ø‹?¼Éâx}¹ùòa^âdÒ|¿åÞÏ»ój?¿®Ô37¶Ý]"lãB¤Õ+Tü„„xºÞ+ò%„㵚§m©}¯­’cµsSä+ õÚè[¨øâI¨[ë÷b¯ÈÇÏANÎVâ{E>üßEc9 ¥˜¬±ô~~H‡¼Ã™céí^b8A©Ýè%&Ç–GiwˆØˆG³C†—ÓßqÄT³Yî6FÑ,E]¤[Š«Œµç¢CâŠ|N)œbèN8Áþll¨§CÏ»‰“ˆbCû®q ž°F&~,ŸÏç(†OË\¾+Ç*µâŽýí™^?ìó”k3ˆpŸ׿1c‘oVµŠÅ¨3j‡¶!—oæØ,½÷gçsø’×øõ’ükåÊÈg|¤]/ÃÊÜ•A΃¨¼ù†ÑR¡m’9õ°Dh¸y#1³‹ÉEÅÝ>‚ü(Ábc1Qq7›7µº¡©m™ë©1x | ùiâ Ñ*ÄWŠÌ&aU“øþh&Ù ° âúÇ3bwJ#&£Vã(¦½5¼üÛ<ß ¤R¼õëDèðäKF "kâà”­:a1‘e²Ö®z‡]Þ‡|߸ÃúX6ìU˜8¬AÖÅš##Ên¸dt(Ô¢!#³PSgáÀ‡ž:}¸UV²ßØ%š¿4ê#ù]í"ë:ˆô2'Ï~äÖX¹æ̯U«%åt|¦3¦‹2 O$ÖˆÍYàä¹ÎTƒÿvÔYJíAA¸mÒºŠ…yFËä5úëpòz‚-snü¤¤&!?Lß§â7$Ä“6 éŒáâæ07¾—ö ™Íd¢)žP\ÒaÆÍ´0ºý9 ’´›ð<•EǯRú!¤ɈxFK§µ ?õl哨A6ŸFc.?ê+G”;^&ìâNüû(Z`2«ê¾°aÔ“LœAùg2M/*š9zi·LuÚ8]9“éŒ3mœÉ4BJùØM-p½%QT lB\Gnfhx”É ÊÍN*ªêD„'€ ›ÛÙÅP¢¤ ¾ä«#)YÁ*•42¡Ÿ…‚¶9˜Ðº®/:!£Ám x ²Ö¦»ÚÊŽŠù-?„üa畊»”bqêLr¸j*ÿp²ù®«òˆ|Ê(0™ùhhBëª6rÅJ¯ò‡È¤óÛ^ýœÍ»ËDh8 y²óšz^©L})fØ5Wr”HÝåIuÜ­¯íB84ï9á &iÆÄsøòc¾0çÙ:‘äŒýˆñäõ‚h|Çäªçk…Ðo‹†oÞ×yöJÝcÐ>BéÂ…aMŽ0åÛ¶P8¡t,ái£?jÅ} rÇ€S“{5;oPqCÀiÈÓ·F*®x ò)c¸ÌSUíí:…])?‚Ðn¼XPž[ˆã ð>dóÍ0å¹e+°‹sËŠ'L~nIÆTg¢3”Þ­uZ—ç$<™©ïvL¶¡·¡“,ö%-F©¬K´šŽ’ )'–#–“À{ÍO&/„j$f:L0´;àÙAÍ«D™·£}É-šP)K.¾|2ÈD;5„æ[¥=-ŒîÒ`H¬? œí,ð¬Š:+åèJèn‡ZÎÜJc_‡<ÚDUmbªÀ(ð dóT'¸áåÈ Ã)(ð4ÞUdÑßÙF¯%:;ÇàR±â½…ù쬬ùTü¤„-A¹Ò¢1ØGÙ]áŽAKÌW>­âס/ÂÝ'f;|ñ.)6_ÒÜ{¡TOÌÝVmeâ(®+›¿â·êû¥Vãpf£.õ伪–yŠpµYA:m™W¤b…|%}“¸ÚþI›†tµƒ–y$ŸWÕŽ"á`¦FZÓ([_‡G{gõœ©¬jùäïE“¢Õ`rÖh¡Ð6&%Ÿ 5¨ÝÞÉÔwz{‡Š[®@ÖÚW[ PqóÀ»Ío´ŒðE¥Ï_%«š1¹|ÙÜ-zènvEÎó­VBÕõí \NI\ù°½í¼ Í×Ã9Vr¾Q®G>RHŽ!?Ll-0Å`‡ü<}-£â_Hˆ'mwÐ;£ìýy¡HnªM8š1½ßÛJjùe63Ts®Ý¡ãUp½J¸BkÕð%M _Á÷×!¯w^Ã¥+ýݼúBÅoHØ¥«/R´šjøP#XŠ"¿{Pì{ø¾vœ¹¶¼Î¼¢ ™PÅ9?¶åzEzG®0ÊeUu¾‡2óóWg)6a»˜ÈiéMB¦ÝVÚˆÇc‰Óæ¸Nâ2 l“r¹STÜq ¸õsÆX{[nü”ŸÎþE/|~γËî ÔIOqø1äIYlÏò*t‡l~Lâ¼o•Å i~L“ímEwòõm]9oåyÈç;?.>“ŠeYúAB< Õ~èuýÂS›²ÅíØ˜´i5Áw¤íT_Z_9*Ó!C“OBÃÝw¦çŠó^d¢¹€pòxçǼPŒõ ûþUþíf‹ÛŠŽg轸ÍÀ# +öÑ;\‚¼”X¯}w®»C»Mœ[‡œäù¡CºmøòCãnëgEÏÚS^‡‰ àSÈOÉ|h1Rœ(r¸°t*Å(pv¨T9V¶¾¡Uv¸æ´-ß¡å·~ÝRßÇÿJO(+M¨G^GWªkìF#*ñ³LWÇh*¾GB³1ºõ­š2ßÊDïSâ1l•'/Ü ¤GÏìžS vgùFÆì®íìì³<•H4jÙ%›Ÿ§7D×rÌw)îFtNµ2/Ñ­„É¥"Ú ÞE·¸S?ô^÷Õö\ïJ{RÆ·nÞÒ‹L§ìÑ[¯Šz(ÁW ÿ*ÓôÊǰ"­ZàRü J°O—€,~Î3´g¼S`°‚[ í£ÂW2­°½]»ÂöÝšje¾D¾LÔh>ñl~ùÕâÜë:2ßçc_ùÐ7êýÆB††Ð†lŸvÃÉö•ç™ „Â#Oî(ý@8Ï–Sj·ø-”öÃLWç*¾GB³9†þu[Wn½¾G­ÈïG™h¢ùþòPÆ$oïQÓæ"SâI»×~ #ÐLyŽˆÙëõ+ºíùã(4Ž¿ês¡îØ«<¿üO~†¤ò+++^ñ«Æ[‡ììÜÒlŽÍÎ-ÏÎÿ\'ß]ȇ,¼¿xµùòùúÆËOÛÔòǨ¡”¼D­–ôáÖo ¿¶$…¤¯ê‘ìú‘(‹üxmÖ´SÈÿûãè³£þðŸ?^À[‚¾Ö_f¢Ïû©@Z0¿÷‹_Ógý¿li—±øìÓWOXD3ñƒF3 ð“ï…3HÅæïÁð~¨õ;Ë‹UÏycöbP®.¾ ÿïS{·¼ûùâK®5·Š·n,/[[·—®}¸Ê4šº¯?ì¾m‡²$Ç~Åp&™L»åõÿ¢gÅOÝ…ñhÆ-FoG·ÝRÉÝã×Àï貞ým‡h9òNÒ[n©8¯œ±‚èþòŒ«£<(õ€‚À–AIÙàCS:G2Ñl!°e¹¢Ù*=Ê©{ѽÍM¤Ù,™X]ÙríEöCî7WV°%‘·b+Ľš}ï­­i ñ¨Ój[jÿk?ð\qIõ@ÁãÀSO%VpìÈGÅ g Ϥ?TPñ§%l‰þ‘šmJñ­»a›Tì`m“аC¶¹¯AkZÂÔl“ ¦h›TÜ °‹¶IÅŸ–°[¶)<›×"-Û.am“ž ;c›G{Ërµi`› y³OzÆg Ÿé¼}Ò3< ùlúöIÏ9 ñ¤nŸbYKØû”l²›ö‰;9u4·Ï¦Ú[¥ê®×4q›Ød‡˜¸|¢óöرõÄòƒ™¦PiÙ‡H-°%wjö1›èŽ} À&„rvÉ>Ú?‰Ù½‡VµØÄ@ºö1›è®} À&vË>aƒÝ±AØ„±ºdB!&k}ò·æ©È ŒÊe-MU3Aé™l`ÚB¿›’°åOj2£êŽÈ{§]4!…À„ dÛ*;¥¸‰X‚Q ¥k CÐÊ¡îÈŒB`· dF1܆Qˆ;Ý]2a…Àd d`Û­ÛVAÙɆY CAÆu•DÍD†a„Óµ6 ÍL„Š?%!žÔMDºøß YŒt×DF`^„ìxn­ªj#° ä±Lk2› ìâ"y¡ëØ­EÈ(lb´;ö1 ›í®}ŒÂ&&l»·ZÕ>Fa£éÚÇ(lb´»ö1 ›Ø-ûƒMŒuÇ>Æ`cݵ1Ø„ÀdícˆBäFg”Ud †A˜â›Ê1áL¦ko*©øÓvëMå8 c¼;F2ÃﮑŒgšwV“5’ÞCǚǸôL4°Óæ1žil¡€¬5u™™/mNˆ'uó8“8Öó8“8Ö]ó8“˜°õFÇÇ:í8–IÕÇ:›8–éªEß™”PÛÇj[ê×Çú uàhª|hWÿ¤¬QPñ=âI¨z?yúêó˜¿Ð󲨆ó?•iœ÷?•Ñ8ïoÞ,26{7jw‚Fé[b•Ùw¨¾øÑAû6Œ~„ÿº½¾¼ûEˆvlÌë5ôF`‹¥Õg?Aê_ˆi½Æ”ðÍôßÁ g Ïè*×»¹TÜð4äÓ:Åòv5í.¢qVBsÀ«S„LÅæ ›Bî‹nïktÍpòrb]ӻ픔`¢rx²V@Aõ^¹\…¼jÜ+ÛªvMDî?‚¬•籉ÐBhÔç–¢[›[Vá›(m_t|JDˆ2U©RÞŠt€ãä…ĺî°eÃï ´B&I÷FÙË¢â{$ìÒ¡ˆ˜ÜAþöàzÉÙ©PEztÝy8yBÛC1m-¢1)aËæHZ¶Ž˜Œ ð#·Æ áœ]v‹Îö~©ÇWÍÉî€ á?HlÞÐÛâ#.yà2d­¹Lmâ â²Àë¯÷ÛQdDáð6d­¸Ë ¾Ü&.kÀ ÈZA›Ô{åðäGé5¿)!Cá¸×çÛÜÄm‡ÇߢøB•Zy‹ËÁžmWØ5–õè­ëâ–ny^g¡±éÇÇ×å“%– ÜêbÉÞæ™.(‘gh9”¥)âJÙ)K6I¼$DU!©e¶7«ßA-B"5ÕèálXŸÙyÞ3žÍã]{nôr›‹Á×_a³NeÏòŠçÖþ“²ßõ5¸>„üиëO99‘`…óFHÍÀ¥ßD>dÔøQ7ÔßU­Æ7 N¸yݸ§œp k%eo0VeW#ÂS“Ë w˜sk£´r¦«Î-ß#a—œÛ Z@ ™s;ÿ®tb'87íÖ ÄcØ,÷ªìÞ‹¢eËAÁò(ÿ”íg÷(öhu±ãØ*óܽŠU}k~~^¹ U4#a 1ücy|‹²&£èǪì*«oe՛ǯþ8Ò:>ÇÖ߸N±’]™—.„âýêqc^››«)Õ@¨nN_½ Ð#¼ù¢1Õ™9öIA‘¯c»ÊüjàD8yƼ‹ëMÉUCõހ˛D»øý9¶Á£H6E—ä•îáûÍ_\Ì4+!§¹Ê–®©·à[pz›hϪmû([`2c›c¯l9'…­ÝvÞÚÅ(3®2ÍŸ‚!ƒÌŒiÞ®wgÕu*áÜÔ»|]vïµ\¸l)îØ_½¥ò×nª÷öÏ@™ð6d½°üÛ¥ÿ¦•þ>§¯ÁþO€1¡Q(ð&öó‡²Â›¯²|Ž„óçµ]±#ïì~¹ùòa:¿—‰ö&µûÜ{äÚ>eã­Ý íïû]Ž_ãÄpüš‰ðäsƯ4—ÑMϰSg?wBϽ°÷ØK·lUfcû8Žïïƒ#áÈW\õéuD­Ýªç÷PÚŸÌ$9`ªÜT~„^öÄòøShÉ´GèB­¥øœ<±SÙQ÷Fÿ48&7ÑÎ7k6­€ð¦j•m[…Àõ²…ý’΢çÏ€#¡Ùà%ÿöê»òeW•ÿY°$¼ Yë}u³ Á˜_°JöWÏ¯ŠŽ~;°³´¸¼¡áqý9P#d™¤\ˆç-¾4µ,½^ni׫7÷ìÞ®Ж¡¸×KŸQØÙøQ0¶Nõ |ùy¿€²&3œ;¨´ð¸÷ Ëú‹ F˜Ü·ºº¤§ 9hÕÂ3±ÈéOýo½ÐŸä_Pçý—À•p ò’1ïÕC7ü]d}žUtj~Öã˲UVÈ^ÏÝÒhû¿ Þ„«Í1¨+ê_AÙ“QÔ{sL¼Ï ‡©jÉâù:<Û÷)}-åñí  (ÔUËómlWämÅ+Wᯂ6ar»bs ™ĺ[Ô„^DÉz¶Âå›Sak´ùW¶DJ”=ÆŠÍ›[“¿ö„É%N¹:×PkÊ*Ly,”|›¶½fgùE¹Ô @~`\c¬I½Õ‰¿ *³þ’ØÐT$þÊ˜Ì q .-Î:TBe䉖•éýmP"4zãÓ|(®ªáúýO(EY7W$i_\ƒÖß•¿›¨"ý€‰^³³³Äm¶ñ¶c–'ý)WwØ?Πá¯h·h9Çh½»t3Ç0¹Þ–=AÏÖqúþjD(eÏIÝLþ>ÊhöÆëŠ1Ÿ‰Þr Læ×‹Ðléµ1ÍÞÈ‹D¯”·Â‘Ž-(ÿ§\©ˆ†%|ù…q¥&ŠÛô2Rå·éwV™Ø? ÈÆÄÎ2n7bé”]ʱð¡-ëÌsÿ¼ÏB6¿ä2ɸQsr×9¹% nÿ|'!›ï;^•³›µøiú?HêCÍ?1Âä–L=êDþ 'ìÜÝ®޲&ã<›Ã+õe~1†öt¿©¸{” ŽíQö¸Àe;λñ>Ìoäe{ãxAÍ*E‰õ”+ô/P ÂgͯiŒÏ1KåöüØt:±¬þ%˜ŽC7f•ùžˆo•·££ oÃI:Çx©ðÓÐ|´vÁ~ š„9Èæ×'–á …>ƒ¼µD$s¬êúyäJPÊK{V‡ø¯@–pò²1ñk,fE³ßž¸2íª„× _3¦=6Ç^¹¡‡¶²¨ëí¿Â1Ècßo½ý7 ùoþ{ÓÛ ²ÿ6Q½½÷Žz+įx²×òw4vÅþÐ&Ln+çñû"\…ïG;Rá\Â_ÿ2‘WdŠö)‘¬ØV¸&-òwÅ4^ïSÍ´–¥ÿ | ùñ÷[÷ÿ=hþûÿÞtÿ?€ìHT÷GeÝWæôÁƒpò¨1§Yþ×d‡Ñ’zŸ]Îb¨{Þÿ äg!ϽHD Ô©þ G˜Üù´1¢Z?¢Lê?ƒar“\/cêèAñ„Éí?©/ þe LfYðhŽ}î²j‰'š¦MC§ÂÇèèÒíÓÛVÎzô+ÊÄnó½‰(ó! ¦c«ò‡ Oø²ù •[s¬bGÙË};ši"lÜ1«S·^s‰ÿ„ oA¾õýžƒþ'Ð$Ln:;épüŸÁ‹0¹}” EO+RŠú¸•¿©áqý/`O˜Ü+'õãÿ²&3`¼˜cÏÂÖq¶µ ±Ai²Wù¿¢"„ß«½Êÿ d' O;íUÊ›”¡×qIþŸ Ex²Vt—V‚õÊeÁQà©ÿ–(Áç,š×øvetonAܬÃõku[­ÿŽäú/pËN},øßQÂäÏhlnþ¿P8aäc"§Ä¬%MWZ£ÿÿJ„ɽo<·Ð¦4Föÿ7˜ž‡|þûÓˆÿ'(ýŸ‰6âÆ¡˜«;ùâBgŽí¶|¢ÞÐÿ°'4šBÛ;ÈÞ¶¸Ñ}à ÷e’œ5Õgïÿ †*°G×`cšÀ~k•«%ÛoS´‹jÿßé4AÜmÇÿµhÔ¾Õ>8¥øïÿ‹jgtªNßhÁHŸÑg½Ñ=öð£÷Òg\Ó~ˆWµµ6‹UÏycöbP®.¾ ÿïS{·¼ûùâË­šS*Þ*Þº±¼lmÝ^ºöá"^*-–­Êb}œÈ‹Æý–þ4_À¯ýºÞ¸a±G¨Ú3­k Kì‰]±½°à"hóÜ·û;vey…Ýè\UÑ è»V¥£LýŸ>¾ù¢>IªÜn$z&óÇÑgG˜êŸ?^Àš¾Ö_f¢Ïû©@^ßõ?šùÕ…âóºÂôžŸ}úêé ÐþcÐè“ÁdûÄ)Ùõ>jýÓËêºY˜CházÐ>ä+ Ô™ âû¿êYŸ\bŸ•lË·#Õ+º……/ˆ>N…½äÍ»àÑ :/ïåêØ…@ú‘7¿§®±’£Ö.Hƒf¥”Û–Š.! íb« s š0ŽXÌ ‘˜ð8äã:ÄÚOͯéryL±ïÛ,õÒê*þ„„xºß-4' kµOÛRû^[%Çjç·H»³"j—fƒõ R–ˆü†ýÅ|¤F±WŽ¢'ŽâûSßñ^9Šž <YËHÍzå(”Qà„®R‰Ó‰MS×+}艾”{EÌ™}Ýí•>ô„Àd{eèeh&ü–¯¯ÈKNø~rr3KßëÀ Jí¦–~tE¦«S‹È)/Ðlj5^ G~qÍf¹'MqY\þd«ìÅŸ|’cxýà‡.ßÐ(†ÞŸìÇÇÛ:4Ûò{À6ç04«p»é}°ÄåóùÆN̵üÍÆF ý L” ÛDЧïÐÎjÕ-…ËÛãõO^mæXÅÊ{åÆþ®»—/ÙáZ°H]²®N_N"›ý)¢¿k{N·l_ûNŠœ¾s òTçŒþÐd|ïIزï£Éc¥î°tÜÆÆ@špòŠqÖ·±ÄuuÌ × ¯}_tõë²®J>KâºJn\ÇuUšÝÿ;ÖUi™õýÓÕ“ tÒTWcœ¸šoí´sâP–¸r‘Œn*;qT|„x4¸s¦t¨F$Ä£I§'Ó>2w?ìV‘%¢êŽBÕ!ÇI ·ºDªÜí6¡FXø¯Åv·åcÀo-Ú¦(±”×NDh¸y#1³;úºäT¾‰)ö.ðäG m™Š» Ü„¼©Õ MmË\å(­Äà1ð)䧉+Do¨_)2;«:…ïf’ÜäˆÕ*®؉íá^½'¸†?‘gO·£HÊÛN8`hÄH'B'€— _Jl³eâà”­:a±pòj:vxò}ãëcÙ >ôÆa}´|Ykk¾üW´·­Z‰Žk8ãùÊ[N%T£z|CÌLÌŠNÐn••ì7v !;Të3 ls÷O×A¤—y¥L›”áK=›tÈÌp-£á‰Ä±9 œƒ<×y# â¦!_4ÌájãÙ¤u:iîÖu,¯Ñ_—€ë×l™˜ÔÂÓ’š<„ü0}wžŠßOÚ4¤@·†‹›ÃÜø^Zn+2£üjýÀ!ÈCÚ>üLëV%¥ã›Ky&º( Wì†ÚM?yM©v=[yÀ$ö£ÀGÍ'€Ƙ[¥mø›ÒqŒ¤ÓøòVeÚŠwE LfUÝ6LèW)r9òÏgšÞ¤%4sôÒ&“ê´qºr>Ó;fÚ8C#4ò±›ZàzNöIðÙ^hfp3Cëgµ IEUˆððds;£zœ¨åK¾:îT(xn8z(2eP0Â6ôZ×õE'»4¸-oA¾Õù•wø!ä;¯ìTÜ%àmÈæo‘z”“ÞPùw€+Í÷Ž•Gä PFÉŒÈGCZWµ‘YO(8Ih@j\ R–‰Ðpòdç5uV©L}Ö°k®ä(K•ËcŽº[_Û…phÞ£k”#ÃsжöhL<§ ?0æû£qž­IÎØ‡ܶëÑøŽÉUÏ-Ö ”>Œß¼¯ó앺ÿ6í#ls·U³&Gš(‘¦ ùÄbÂÓFÔŠû䎧2õ׉ž7¨¸¡Lc;a§­‘Šëž‚|ÊX'.“³½]§°ËÞXžcm•ì†vãÅ‚òÜBg€÷!›o†)Ï-— ±»8·\Fñ„ÉÏ-ÛµŠ”ýìÝg¢3D2X½3Zjº|Y“™ú‹VÃŽÉ6ô6t’ž¤Å|‡çè°¼~ð^9Í!±œÞƒl~êj!T#1Óa‚¡ÝÏj^%Ê>íKò|”Š”¥œ²í2IªÛpÕ‰Û~‹Õ8btx²ÖР¦qT\¸y͸ûr:‰@‰Ãà&dó·}€Fèͧ—;>Âð퇞ï1EžY(¡ä'ÖU1[¥g¤b%G(íÉƒŠ¿(!ž´iÌ£vh«”#)2»’‰vjÍ·J{ZÝ¥ÁX9~à„ã9 <«â‡ÎJ9º8ºÛ¡–S6¡ú¾y2´‰ªÚÄTQàÈOŒ{ú7¼™¡…Èîª(En7»‹¢f€W¤b¥ãOik>?)!ž´iH·<;h€âÄ"»áä±ÄŒpå3q0мÇÝ'‘'[Rl¾¤¸÷âÓû_w[µ•‰ÿqà3Èæ¯xç­ú~©Õ8ÓØ¨ ~³ªeæ¡„ÒÝiË\ŠVz%}“ÈÃ*âI›Æ"Z@`g,óH>¯ª×`ˆ„ƒµr°õux´w&–3>åÞ /š5¨Ž³³F …vmx”Ï…Ônï@¾“ Ålï\ƒF®@ÖÚW[ PqóÀ»ïÛÔ_TúüU²ªy“{À'ÍÝ¢‡îv`W¤Œ«¹hµ‚€{–ô«hØ–²±æXÉùF¹K‘Br|ùabkáQÊ’QO’¡º^ÎD£¡tW®ÓʶŒf LÎãó¦L±sˆÁ$ðd½]Ͷ^’™\×é—óÀË/§Ó/3À `Ü/çø °ÏÊ”$«äó“'õp–Ê«%â–nB6ß½8Ú:ß ³œÐŽx°¨EZý©N½×¡Í×3mÃWuÊ1»&;y&}ˆŠ?-!ž´iÜ@ ìŒc6Â/¦âJª"Cò%ú™úUiM­5óò]×s~êV«ÄX¿±½hã릠—È_·ã¹[yÆ6­BlVŒÃª1 |ù¹q?m¦mEû»n­TŒ6£+µòVènÙÁžÎå×x%—Â:<ŠÎÚð,ê×ò7U«s ºBøòSãêÜ¢}¡-—ÒF!éd2H\ ]‹è½3sBÒ|©äFÕVx¤|ãí"úvjà¹)Û&åyZOEß–OÚ4¤[Ùx†¥ëæŠiÓ4:鯉õµ.UÕ!‘“À©LýšcBþW¯Î¢r6Ó8œt6Ó”ÿ¸S¾7 ¼ù‚± ŸnŠM.9mË+íçèD»FOÍïBÖ[ ¶]¡óÛ¼:]õøòãtºê0¹•©òhCÅ$!CüÆ8µ:ÏŠ.eF‘”Hub’î…·K'Þ©‰éŽT¬tÆ/í>Z¥Ä“6»h™˜Žò«ùŠÔÈxúÇu¨%5%‘1à1ÈǺ<Зiàûßïü@GÅž|ÆX{[Æ—ŸŽÈD޾Ïoxv9t‹£4ªºNdÏ?†ü±1é1‹íYe7ÍkܵX…Í­fÚ¦‚醛CT&F;_j*EÅg ›ïT\n«E¾S \¥}¡NªSq< \ƒ¼Öù©KDÖ¢b@~þœAůKˆ'm÷Ñ;´¦’ÂÈ($Í蚯©ú[ˆ}Xrwhï&Ï^E; kz´âT ¥Z±q='ª¿¦ÚÊDþ$ðd½÷ßíZ·çźêðô-I(‚jEËSž${‹Ô5£ùê´y ¨eÆC¯ù´ ³*ûÒÛ(>nÑÕbSÏÄy¸Yk¸JÐqYG×ywjÝ¸Ž®#Lîºç$«Ø|³Ý—Ó `A”F ë-LsˆJx²Öy õNšæ çŒ;é8³J{Ö¾_ï%ÕYŸè,dsßB&Ù1³þš¤²Òœ—öt»*ñ¤Mã!Z@`ÇvRëá^ Rä‚~ ù¬?`¾l%"'Éï¤êþÄå,ðd­±Nm`¡âDà®ÙLýRž¡_ÌÕ¯úMÑf¤³$ªjN ç€!km`6GÊñ,~D+ص*ˆ’C+#&§LïãéºÏÊ®Ðù—íZ‰_ÞµKÕðŠc‰Ê/ç¥Ë‚ FÊyV$ æv*6“†ëéáä+{NáÑ[ÂhÇ’[vè#ïZo·æñ›öªõÙD6­Ï%Y{øý\³^ýå˜ßÉ«ÚÿcÐ#”.žØÛ«’[®W´=ÕÑ’H-oCÖz?3Äœ¥£ârÀ;ït~ü¡â.W 'pµ]Õ‘¡âïJˆ§ÓŽÌ†¤ˆÉ Wö ¨øU ñ$Tû¡×õó¯mÊžBµŸdL½£& â{$Ä£9$œ3¥Cï§Æ$Ä“‡ò9Eb½”§™È}#‡<ÞùQâ)ãiýè¾gh*NgMJŽ'!ë]uÑÊ+rhÏœ^„¬uN½g¦€— ëM¥òoÏP8šù}«LA&ø½•­Z s6š˜]®C6ß›}¿~*Ó¡#ÑEg{ÛöøúŠªFIÎ’m­ë¶N|fW kÝ`QÓ¨gP^«Ío¬0rÝqËÇÆ|qªo;tyUµŠØå€C6s6Xp½Jè2²¬"¡7„f{±mwÊÞ–Šªú|Œ/ž€œÂyy*nx²ùyùžÓè‘Iàääö±ÞêôÞð¦yZ‹Š›&wZK¯Gfsõ.«·í‘}M¹\€¼N\æ!ç»ãN…EàuÈדì=3Y®BNrSûN¹¼Ÿ1ˆ¶Ñ<£Ìç(dPIÙm"kÀ'õî%ëçR^Ô~`Š+)k‚+« ¯$:ï.\jnNtØßŒRõˆèqà]ÈÉA}OÙªˆÇC ñ¤Ño÷€Í£(÷(ï^Sù€›õ®bµíŽ}ÕîxÓˆ§ÓÝñ¦C(Òæ˜'öS÷¨üAàd­€(íßí9Å`W§KŽg·ƒ´wÔ»d8YÏQ5ï’ià)ÈÉ]/íÛµ]å50‘9¼9…]*nx ²ù®Ê‘yå7%Dà20 Ù,æ€ü­wÈ9}hÏ,ï@¾“NÏÌW ›¿¯¦ŒÛ UTub!"w›ÍïønTmpªìè›UbË·ƒ’ÂP°¸*>âßcÃŽå#Y/"á(Þ‹$—FjäuÑö žSmî9°áN%~ ìÒk*¾GB<šöFÿºm|ãõú«`E~Ÿe¢ùò3ü塌I¢à£¦ÍE4¦$Ä“v¯ýF ™ò6øú•ý¶êý8 Ôä¯zÅœX;öêVÍ)ò³(€ûòÊÊŠWüªñr?;;·4›c³s˳ó?Äi ò!«®Á/^m¾|¾¾ñòÓ6µ|‰šŠ)ÊÁtéíß~mI I_;"Ô#ÙÅ#Q)·Ç3á?þûãè³£þðŸ?^ÀËø¾Ö_f¢Ïû©@z_÷Þ/~MŸõÿ²¥]zðýþÏ>}õô‡…@4ÿ1h4Óà1ì^Á­Tl~Ü;C­ßY^¬zÎ+°ƒruñeøŸÚ»åÝÏ_r­¹U¼ucyÙÚº½tíÃE(P¦iä<Ð}ýa÷mó¶ŽýŠáœ*™L»µõÿ¦gÅOY­BÇ/‚pícŸ¿Tr÷x²«ÆQ˜¬g[ã,ZN;¶å–ŠóÊùSˆþqà ÿȸ:ʃR(l”h ΛҡäCâ1l•å0é½hŠÞæ&Òl–L¬®ÇœøèEöCî7WVf+Ä€ŠÝ%:ŒÖ´„xÔiµ-µÿµx®ÈÐv àqà)ȧ+8vä£â3gÒ*¨øÓ¶Ä¢IÍ6¥hëݰM*ö°‹¶IÅHØ!ÛŒÛ2<ŒÖ´„©Ù&8LÑ6©¸A`m“Š?-a·lSx6-®EZ¶)\Â.Ú&=šÛfSí­Ru×R]ÔôÁ&O@>ÑyûèƒMž„|2}û gR–ÐÓ©Ù‡XVöwÇ>$›è¦}àêi“µ> àYóT «|Ž'!kiªš ”0ÇIÈæš©l Tü”„-{d©ˆôº¯2£ÚÙ%hÿ$d ½ÛN©¤j0  È7˜!bgëM[fæAÅŸ”Oêæ1“ìŽy Â$Ä€Õ%ó !0aÿjÇskUUû„M@AÓò¯¥§‹þf­:vË¿‚M uÇ>ä­Ë.ÚÇlB`²ö1@Aƒýªò{•!˜ád-CÍD¤“;|;b0£¹%af"Tü) ñ¤n"Ã0‹áî˜È0ÌBÄ.é’‰ Ã,&ìaÑÙUó†I¦èa Ã$»èaQñ'%Ôö°Ú–:ÀÕ±Þ)Þ9‘ˆ°6ú¯ÀŒ€Šï‘OB ÐûÉÓWŸÇü…ž—Å6|^f¢1Чìô²âš5‹L£Í°©vàg”¾5Š>î;T_|»sè3üûWíõåÝO8´ccÖX¯ 7[t(­>ûuhkæýw¥;²~‘‰Æx ›åã9žß•Gü(¸å²[á éè]¤´(G- ¸¬èY{”\­æm[;Ï~äÖDT¥=«›=¶F_¢U ¥[}†5z4'²0JG.Ù®íÙlË.Xô 'øÀg¾ËʵÂ.Ûæ_ˆ‚v!Uzl€“تüô ¥h'†U¹8Çü2% ö˜[ ªµ :Žè[oèdGXËÏ=V¦úCÐ#¼YëœoÕ…è„MvÛr‚ÝíZ©˜£C&Ù½ðG~£Ùöjü<¢??Ï®*sþx.@^0æ<+kH–èÒž[eE»â;Áþü¼2Ñß9ÂYȳ»byüe LæŒçó9ö´ò›’pøe× v£#GØåz! D!„¸Òz6Q"½uÊÖŽíÇš­ÓkÔƒPº\ñ½VÜŸ€çOUÜ[ߥ¸¹¦øþ«ŒÂÿ©+óï€0á-È·º Ì_¡lÉ(s8ó=ÝfûáF“Wc~ó¶œÀ³¼}iþË5¦:Š™§”bõ`Yõ–ý]Ô‚0¹™o¢¸Íî-°Fô¬21 d' O»ÀØÛP =»š-d—sìfŽ}˜cwrli9TÕðQæ¹n„ ›_´>ÇØ~çg¥äYe75H@Œðäs ÌZì§!¡p¬ \/K\—VnÖy.Ïk-‚ar³ÖÆöК3$lÒk9v#ÇnåØí°ëÖnÌóþW&lƒ$áÈZñ:š·¡Ô‰l£pÂÈæk•S˜“ŠÛÑdô6Çöµ¦ŸP"4Ê;׆Ic¡4ûüTÃaÚ+B³ˆ0i@”œDðN\æ¿NŠ{¡aDG(‰çŽgïß¼6«Þ¼_ƒ3áÈwŒù¿hmÞ²S i¾e ¡Å/²p„§˜ü“«â“ýè;û$ñß퇿[Òê”oPÂ_$Ö)|Jïh§”À¹”h§¨ûUe”-Ðl‡ã¸1ŸJ&ÚÕ˜ÌÇ­9ö¬)s`Á­ž[òi]‚«|»TŠ®BX•®ëÙEeò.09gùbäÒÙo«V¥˜ßñœb–lçÍøû‘ ®UÐ#LnàTqûâO‰¬W«8ÛÙŠçî…„Æ”ð-(&7æÎÏÕc«†ëÓ‚[®†Ú°U²£ø·’o¯Ì×GÂyÈóÆ|¯µ™Âr¬1Ó†£§¼T§íƒ*á5È׌iϱŸÚžËªV±®Ÿ•Y`B8yÜ|OP­1y W².¤q%Q½k O˜Üž ú°úe Lfùü!íùU~lkŸ¢|cg{<‚1;÷±]aWÜ­’U‹Ï%Ë~Œ “K%š/XžOƒ£Ð‘r”«;9±¼*ì—æ5†°· J˜‡œ7&}’“†ªV]§¢³õ°:„'!›»j”û«-§²\”]¨|¾àÖ*A>úOá/…;UÈ^Ï-i´îOA›0¹PÂ÷¿£ Ðë¤*ñ3'¼ù~F‡?²&3:|!7&Z.¾9I¡É£Ž†ßÙ«ºáïÈW ?tÂoá75ퟣ>„_@þ¸n¯¾³n mïTÍ~µ!¯p_éÔ¬m±ƒ¯‹¡Ø"ù/ŠûE¢ £®¸T~„xkû­U®–D¯b©Ú¿ŸNĽ¡þ}ÔZ Q ¼ã ñߟDµ3:U§o´ž ÏÆè3&8öð£µåÙ×´âUm­Í†zèŲUY¬/3ò¢q¿¥?=Fzí×õÆ ‹=Ò.¶zî{bWl/,˜;]žûvÇ®,¯P éŠ0»H¹-öÙ®›¯®ãÓçÏ7_ÄÝæO®¢oEÏ$2býf~uáø¼®0Ú!#6Múäã–œJ½W¾§±&̆ ¼{¬#ѽÿMoÔZ¿Ä>+Ù.‰+_Ñ-ðüÑV‹Sa/y/ ½\øMœ ûÂðÔµµ \‡¼n\­°%Ä£A#>bXÔnqľÜ|ù° 1q;Žðxæ@ªw'Ö~F~]±Ê‡A$œ€<‘~·Pñ'$ÄÓýn‘#QLdê·ê–¾×Vɱڹ+rTI³AŒú…Š?)aËáXÃ~åî¸U{FŽC ÝêxÏÈQ &!O¦ß3Tü”„x’²˜/¹±ð !Eb}苾YL¸ú*µÉÄtÙ×]‹éƒ: 4³˜Aã%×w\yÖl–{Òˆš¥$·tHl•½øâ“OrQJ7ñ™8-œ…•Ϫu¯æ¶Ù;Ò¬ÂkZØÝâŽ.öóù|ŽŸ*úêÛšU‰¢GŠºžSÆÉ,õZ ‚9/òšq-ž0欛µ<Û kP±òÑäysLJ‡MYÏ1)U¦ö93ù¾›Èõ¤sÖvèÝ•÷$lYÖëªwÓÄt¸‚‹í¢È4Ô[Êjœ z?=D½·èŒÏlÅ+^ ?±Šx]²”cߨ^Å.ñåVÍ÷K§>bƒ€ð)ä§ÆõyÀšÌOYë•«1ê„ ?0®ÆKÄüÆAˆp ²Öì3ÉÖ|k'.hÄ{õo'enÊ“,}§GB<š“ìS:Ça½ñhÒ¡Ê´M؉aH‘ܺm&Ù¡:9Nj¸…Ô¥Wv@/ ëÑ)Xú,ü×bÓKƒò1à È7Œ|ÛvíyD=U4Zn@ÞHÌìb“ŸRqw ?J°Ø˜ šTÜMà&äM­nhj[æ*§3#O!ëM)‡)Do¨_)2;«)ÄF#ì´FPqýÀNìÅh„´®Jp·èDžNõ#q2EºUÏÓ$íñŒÀ„VçlÕ ›þl¸ y5» ¼ù¾q‡õ±l8Ø«1qX>‚¬5Š5qy†btFÛr*¡‰$éõ3d¤<3€[e%ûMèïFYTë#Äh—Q\×A¤-—èžf™ür¿V­–”gPicÊÌ?lŸ:üpO$ÖˆÍYàä¹Î7 ¼ù¢qGeWŠÅí³Š¥GËä5úëp²ÖÛ‘˜–‰‰‰!Æp*ö!ä‡é»óTü†„xÒ¦!Šáâæ07¾—v™‘ÆöEˆŸ!fœÑL £Ût›œïi.Û Eǯ–¬ýpu*”ÝØgô“—§[çtÜšÀöl哨A6ŸFcntÝS9¾tTYÞ†I[ñfP´ÀdVÕ}aÄ~•"—Ó(ÿt¦iK=¡™£—öÌT§ÓÐ•Ó™ÎøØ1ÓÆi¡‘ÝÔ×s²O‚ÈöB3ƒ›Þ¶ç–ù¯hRQU'"<|”©/ ‰_ Õ‰µ|ÉWç#„Í <Ý’«ªlÒí±v·Z×õE§;4¸-oA¾Õù•wø!ä;¯ìTÜ%àmÈ·u¦G9Í•¸y%ýù ”Q`2#òÑЄÖUmä,Š'”Þ='4 5nž«ËDh$ÓðèG2š/ÂÕ4õ¬„S™ºçfØ5WrÀ%ž¹[_Û…€®†ƒšûÆö<§hkÆÄsøòc¾0çÙ:‘äŒýˆñDãs8&#@³¢á›÷už½R÷ßÎAûÛ\ŽÑ¬É¦Ið< '”0%³à ÈZGyÔtù‚„ÒÃŽÉ6ô–‚a_Òb¾CqjÂÕô?|«œ²›XNïA6?6°ª‘˜é0ÁÐî€g5¯Úb©fGû’[4¡(Rž…ŠJ§šR·á†+·ý«qÄèð>d­¡AM㨸

ƒlþ†iÞªo×X3bº01m«Zæe(á<äùÎ[æ%©Ø6¥Ò2 *þª„xÒ¦ñZ@`g,óH>¯ªY"á`¦žHÓ([߯EKwáMù¬jù4Ý„š­¾-IG€’œðúò(Ÿ5¨ÝÞ|§ó«K*n¸Yk[NÍ?¢âæw!ß5¶©îÓúüM–ªy“{À'ÍÏ=?t·»"¥xÎEÎR¨º¾„Þœt¾ŽÛÛÎÛð×Üϱ’ór=¤ñÙðÍoÛ‹=q‹Üòì⬪3Nƒx?P:èÔie“æŽvQ6 Ž»1ÅÎ!“ÀSõ6UÚzU”#"ì›ë:ýrxòåtúeøäŒûåöYÙÚgVÉç/¾«-Û‹ &~Xe›ÍO§B[ç‹q‹‡ì¡›ü"®êÔ{Ú|5Ó6:W§³¬Tì ä™ô="*þ´„xÒ¦!ÝÎï c6Ö|uI‘#mÊôOfê))5}´ÞV§Qý4™Î@ÖS¡v5Xqƒ,H˜W ‰f!kyˆjCáÔ—p²Ö «e&Û8DÉjﺞóS·X%F9·”‡Câwø1äy.âàæŽó&t–×ó¢ã›": =%§l±›€q¤ó0JÂEÈ‹%¤b¯A¾–þðDÅ/Iˆ'mRÃwp”쥫dŠÌ¨oúægðúÌÇF"2 ‡<žØØØ«sʨLg k ×jÃâ5|‘P3Ÿá¯ÈÃ"¿{ÈO[N©>äDw>•‡Gâù>ðdóégá-zVeÇ®ŠüŽºr-E*ÁQ:’rå·4Uµ‹¸\f!§0éRqç€óÍ'Ýépªu+-š¥:i©+Àt~Òº&©Ç:äõôg *þ¡„xÒ¦±ŒØ™Ië(¿ò¬H-\äó™ŠPd¾Ö¡&Âó4QÚt¶q[+éåFF¶k½‰ŽNùáÊš6Ü,–ݲ·]:C*~ùxÇUi øòKãNZ7Áy>^Îò€t?>äÅçíÏŽUéd[ +ºÏ0êVjå-:;¦ü’ç†ð)ä§ÆÕyènù¶÷†‡ôò£ ñè§³‡uOÙzë”kå(v¾êHtÜof wÕF¢ëR±»pw„Š$!ž´iÜB ìÐHă-(R£ÃÌý@ó‘(ÿ™ˆŒA>Öe‡¸L߇ü~‚FãâPqÇg Ÿ1_¯·\u(;>zŠ^[DCªg—Ý78¥ªëDö,ðcÈæ› cÛ³¼ ÝáÓp›oÃængšˆtsMFT&F/ÔTŠŠÎ@6ßü½ÜV‹|§dW‚Ò¾P'Õ©‹8ž®A^ëüÔ%BãS± ?HΠâ×%Ä“6;h™º†¥À@Šé½w?ðxÆà>˜x©Ùœ›¡äî8¡ƒ™g¯vÝZ©(]¼¤WSN¥Pª®¢økª­LäOŸeê—× z^¬«OwÑ’„RœºNOw¡a„ƒ•þVËŒ‡^ó骸UÙ—^ðóq‹.‹kœc'ÎCÀ5ÈZÃU‚ŽË=t¡‘w§ÖR¼´/ðN²Šý&´;Ñ}9$Dixò…îºâà áUÈZGÔÔ;i˜ƒœ3î¤ã"¹è%ÕYŸè,W!¯v~Ö_‘Tö>äûéO·Tüš„xÒ¦±ŠØ¡Y_ à£Hº¨h>ë˜/[‰ÈIàä©.þÄå,ðd­±Nm`¡â¦³guøb®~éÓoŠ$ÏSUsb8| ù±1ÓgžÅO½»Vqhe$•鈅@n÷šoSjwºZGiÞÃ(Nz+¿ÁZƒ©&ûèYX‘€šÛ©ØlË k'_Ùs ô¹L¯O`Ù¡¼k½q(Í'ÅNP­ÏƒL}ù•`}.ÉÚÃoT!pB”Õ2ÇìüN^Õþ¥×-õ£ïf¡ÎÚ^~Ýr½¢í©Ž–Dj9ÓXO.g4ÃÄ 1Ç“©¸ðä;¨¸ËÀÈ +Pud¨ø»âé´##œ*6¹¸ÅÊ¿*!ž´i'!žNÏ â-,+7.¤? Sñy ñ¤Mc- °3óBÏÖž"/Z…ôö]ÛÎ)h€_vCžV$[á¸%_" Òå&åmOb: ÌC6ïÐ{á ¼R+‡kˆB´y8•¢åÃéë¥DÃYºF}¢< Ê5e$è1Ý kPص<«Ø^ŽYÌ«•ød\Øu]?šŠë£Ê%Çø«Õ |Ò„ÒzÂk¾­½|ÅS}=ó4í…Î@žéÈÒã¿i7i’R]*ÏQàqÈڞÿÜ”‚vzÖ{ … ”û¥=ëQñg$ÄÓéYï±T{³³MµWµP*þœ„xÒ¦!í¡tpÖë‹‚(rû&A8YëQÛ™ïÞ:+‡‹§Z¢]iä•",`_®l}C¯ Âà;[%åK¼Tƒqà3Èæ»V›tÃ8J Ô4uP<®ÍÎ¥ÆÏ`Ðï-é¸zãzÊSã'PBÉe2¬ÊÈc×c<)´cŠŒžƒÅóŒé«Åvª;ÒH»´¸¬º¬yÝ{?¡käj<7 <ù¼qͳ²mU|ò Ù®UÚn\çŠvêÚ¥:MüòGŸ>–ôFšÓ©øgâI›Æ ´€ÀM‘C®ÈíÓL4øšO­gãç?Ž i“{܃¬¥vßé…(ö>ðcÈZgAÕFD*î6ðÈŸ¤ïòRñÏ%ÄÓé‘îÓHm8Jvžöóiû'¡Ú½®ÇjSöqTû³ŒéðfÔT|„x4‡„AS:¿•‰N? ÄcØ*O×qm%z•êP¤µ‚[®Z…@¤¬àC,½oœJÍ­ùôyà9[5ÎŒ=þ•ju^¢c “›ÑÃY R$ÆŠt^«ŒéÑÅÃÆÿþRdË}«:Ÿ˜M/@Nò8HÌ$ð _$œ…<ÛùI€ŠÎA6 ©õ.†(\Ý}ÕÐóˆÙMàÈÒQEà:d­ˆêª1|˜©GÛ2TÞõ1ŒlC~lÌäñ¹ìxžKÁŠD4Ž(psF!\7Ü£ÐKãñç‘NrÛnæuÄX§¼uñ(ÇmKy]´ý‚çTqP̵Tâ—™®z T|„fHÜ:oh½~ L‘ß2ÑÀüü塌fL¹žv›~ÊÍE4¦$Ä“v¯ý #ÐLyŽà·¯_Ùo«Þ£¸·þªWÌùµc¯nÕœRñ'?‹Òñ,¯¬¬xůû²³sK³96;·<;ÿsAœ¦Qè¡'4¿xµùòùúÆËOÛÔóG¨á äÕzÒ7†[¿1üÚ’T’¾vD(HÒGMˆ´È¿Ýæ¨IøÏ£ÿþ8úìè?üÅçp¯¯õ—™èó~*Üõ÷~ñkú¬ÿ—--Ó#¶>ûôÕÓÑPüÇ ÑPƒƱ{c@÷£ï µ~gy±ê9o¬À^ ÊÕÅ—áÿ}jï–w?_|É5çVñÖåekëöÒµ¡D™¦Ñó@ö‡¸íPԄدNñ’Ù´;‰ó¿k®uX­BÇ/é]ttyÛ-•Ü=ž¾´q6ëÙßÖxlÀ–›Eá4»å–ŠóÊñˆ>7ócÈ?6®ŽòÀÔ [&T¼)#™hƈǰUz”ßô¢)z››H³Y2±º³áÓ‹& ì‡Üo®:­0 !ÍVˆ[å¼÷VƒÖ´„xÔiµ-µÿµx®È¹{ àqà)ȧ+8vä£â3g̵AÕ6©øÓ¶„÷LÍ6¥ü9ݰM*ö°‹¶IÅHØ!ÛTÝv :Ó¦f›Tà80EÛ¤â]´M*þ´„ݲMáÙ´¸iÙ¦p!»h›ô Hhn›Mµ·JÕ]KuQÓ› <ùDçí£6AxòÉô탞I ñ¤nbYÙßûl¢›ö#ÐuLÖ>ú('BÍS5~BqsYKSÕ ÙY8NB6×Le¡â§$lÙ'KÍ@`Ý1…ÐÎ.È@û'!éÝvJqGxbÍc&A8y¢óæ1“ Ä+s½iËÌ<¨ø“âIÝ<aƒÝ1A˜„°ºdB!&ì_íxn­ªjƒ° (hZþÕ ôtѿ¬UÇnùWC°‰¡î؇¼uÙEû‚MLÖ>(SE°_UÎc?³ œ‚¬åc¨™Èô’p²Ö–„™‰Pñ§$Ä“º‰ Ã,†»c"Ã0 »¬K&2 ³˜°‡E™¿TÍc&A˜¢‡5 “ 좇EÅŸ”°[–t¥æ1“Çä»d#0 ¯Ð÷lgg7î°c¬ŒÀ(F2©®ÐG`„]\¡SñSj¯ÐÛ–:À²>jx)Kf0 ÔGlÔ„=âI¨z?yúêó˜¿Ð󲨆Ï2Ñ>;á 䙟´ŽÉ4Úlý«ŠýÔÏ}‡ê‹1iÃèø÷¿Ý^_ÞýP;6fõÛÐ-:”VŸýuØ™ËZn¹Z xþZÏ¡ËPª‡ù^g"•ð}ÈZ7ÍÛ¦)Tn6¢qNBD]#ŸÇë•îÙ¨:K¾GøòóÎ+»'|ùEúÊNÅ*!žÔ•} ¾ÕQeŽô„‡ËÐ 8l³ß¦¨ò=q*ñ›tº‘@•ëuŽY…‚ëy\—§ÝË1n¼ÊÑ©©S@é.ªa§_gíþ£Š¸Ñ¥c:­4'ÑS$^€f^‡|½ó¶ºû¤bo@¾‘¾­Rñ7%Ä“º­ÑòÅŽÚê{ ZƒâIj­Ð:i°¾9ÉÌu1ª[„ºžlž¹NYu©ø³âI]um¨«ÝQÕ=ª3¶ÙPYÂä}ª3Q²P{1¥l…3ŸK¶\Õ‹6¾Gxr’irbTÙ†úæ ›§ÉQVe*~AB< Õ~×™·Úíèÿ4vØ¥»ÌÛP}=ºFÔ¶Ôö¨_£Ò;Ým€TZ v˜ÑØE 4ÛÐì{W:±/úœL´‹)0™Í«UvoE×Y³å `y”oÌö³ÛV!p½la¿4ŸcåêÎü¼2ã¯Ñj„W!›"Ÿ¨²«LºÈœU'ö ÈN@žèœ†Åò(¡lf*–7æS†Z LFÅîè0ñó×NØ^v—¿øf«ìZ.Z·˜_Rï× ÚðänqÅòpQ¶ÀdÒësì­_›×xM ái1è[å*Ju~jÇÞ¿Že^[B£%`ó ­À×áa/#ͽzO n„ k½0ìie L¦§sí{:ìÜ%¾wa•Jp4}õ.öA“0ÙÜÑ‹ïbÎ]£‹p ºÜÅ5”-0™.Þ˜cbÖñ©gÏ)‹Nå?ïÚ̳*;v="­Xyö¹KáŒèµµzÏ¿{ ÈÆ59×Úó¼&«Œ§òSïö=#<¹ƒ¯³cy¼EÙ“éöõ9F¹Š,æ—C#¦äÊõèÕdØ…’뇊íÊm'`ÙbCM–æcÃCÅÖcÜ ×!¯×ãlk§×Jçoª÷ùOÁ‹ð,dóý õ>ÿʘLŸÏ̱õ¢#…'^v*;±˱üþ8Î@žIb(zᔩà ê#…q±j[¶Ê ^ÚgE·¸cÙÞ®]iÎ&j¦rM~ö„É EÃs¡eE eF¿„Òið¤§E¾´¢ö«Œ–Vê¶ò p#LnZœ?„§´ÔàûûàH8yÞ˜oö»ù¾ñuèþIP$ÌBÖ‹a©H×*ëÐýS ø§¥«>rþi”-0™‘“…~°-g¾%ÇhÛyËï•j±+biþP#d™1Í›­½‹žÝñìýÛ×féE"]¾¦æ®_¿uëñc øÏ‚/áMÈæï§Ô»úÏ¡lÉtõñ°«wÝ=ömÍ ×²%[}JùóàBxòñäû¶èY{_…,+œ% ãÙkùå›9v-ÏÿïÛfüÀ÷/t¹oÿ"ʘLß^ÅrÖgoü|h ü5;e§ ÂŽú½eŸ-Dÿ)3þK`I˜Ü#s¶ëÑí²³öWvß8¶?;?Ï~¦Ló/ƒ!Ë$5ð<ûõ†äã|æ áp³e‡‰d¨8„ßðëú 8 ­¾¬ø+¨á3ÈZ™Z+´ÑF=šjem¶·gyÅP—ا[ázéMTG{{Û.Ìå1~•+ôWQ‰¿šh…¦æ¤CVn-(9¶ç«·ö_!Â)ÈSÆä>+Ë{ÿ\»£½ÿýpX{. Â߆¢¶e'ÇøpñjÁW|Íš¿ Ç>ï寣*„ŸAþ̸Zeãd' O»x€Xø3ß'ûjÿ«’»³tMƒêß=‹/S]hG•Ü_q«ä*2Ë9k¸2 <  k½ämâ¼öÍ›d-þ6˜®A^ë¤ýwP¶Àd&íÙ9ö¥tì“í9Á®œÛâ­úþãß9ÂYȳÆDïF[j4DTcc"\-D¹|šÀ4V »Ê5ø{`Mh–Tþír»!ض¼Ûªwì`~Þx@ûû K¸ yÙ|@{âÊTÿè&7 ­³ëïƒÓYÄ}éÚü<Žú›¼¿ø‡àN˜ÜÆkÏÏ•‰ü#NعG‡HÛb_ÃA!ô‚6E—QÜ?Î$94©‘ÿUØ“pð$õ›„ŽmPµÿI:MwšåŸ Öµ[€58bJçŸf¢cxñ¶ÊíœJðS;ÇžåÙ'ù{a—|·’c/óìQže—îܹ=/fµÏhV[aëì¡ûV•ý?C?Þ†¬uƒ§‰ý&QZx„•ÚçžU°Ù«ýŠíí8~™’¶Úlg ·*ì•XÇ9á7—ÃAëöÒÂÒíÊéCþ9ènBÞLÌ2†_‡ß±=»Rhkÿþ‹îÚÆ¿€=4³w>éGç_f¢;ÅñhÒy/Ó>ÜÄ;䂈#øK,á4äéÄt&6‹×<ùT‚ÅÆDºø%“pòŒ±’žàï{ż‘ÓI·E„Nsõr¦'#´e¤™n‹˜Ý>‚ü(E¹Ü„œÜ˜v¨¢,C~œþhFÅ?‘!«¬Ia£å IaVÉE.î·ÌzëÄïnÅþŒŠÐh ·m©tàÙ¶B? f¤¥ÒþU¦«óß#¡‘wúŽqZÄÿÕÎèT¾ÑŽ„>£Ïz£?zì7àGƒËÙ×´âUm­Í¦zʟŲUY”æÎ¼hÞoéÑ_ûu½yÂyF¦S-:’»ÄžØ¡kgQ ’­}æ¹o÷wìÊò +º¬âÌ.:ýb7œbÔ©ãÓçÏ7_´Ó(I™Ûñ}“P²¦õ?šùÕ…âóºÊh'kz¢Ù+|¦Ú®Uøý†z¿|Oó<™ Ø1­cË5™ÿCoäºv)\Ù–oGêWt <õ0ß7£m³—¼‰êMì©kfH^ƒ|͘¸V†§% ñhÐhç36ibµ/7_>lCM„¢'<ù„µï¥b•‹gFxòÉô;†ŠŸ”°%fn7;†M‘øI {PÇô½¶JŽÕn•Ü‹ÞèEs¼§Ý$F=CÅOIˆ'¡ž¹€°\LtNänZ…ÝЭä‡}éEf!gì­À Jíìè(zˆpò|ú½EÅ_‘fo½s²C3­’ýE³YVšì9‹ƒµl•½øâ“OrÑúDü@>íçW­`w6§\9IÉ äã |ÄXÕ WÖ¤ð!7'\g‡Šµ?›cù|>GÆcoKü<}T úÚÒµ¥³¼:}Trü ;¯^9¥ÄG?2®Î‡ŒU¬¼W?þŸcþ®»—/Ù;”l>¬Ãz.ô#vmÏ ò?=õùË/4. ‚1/ò‡ wÍ·vÚ·p½†2mŒi7ß#aË‚QѸ/šÒ¡ãÒ#âѤC•iãÖ­HNÄ &…<ªCŽ“n!u‰Î§ºÛm÷³ð_‹ÕåcÀoh·gÜÆÞK9ò%Zn@ÞHÌìb÷󨸻ÀG%Xì!!Žo7!ojuCSÛ²øË ‡µûcàSÈOWˆÞP!¾Rd&½»ãßvZ#$Cn—ŒºS!¶¹' Okĉ<{ºÍüª]p¶J¦¬þ*€ððäK‰ùæ§lÕ ›0\…¼šN‡]Þ‡|߸ÃúXö¦‡õÑðd­Q¬ùÄ,®·Ž¿#XpË[N….jÑ}tö7º@(¼c+àn••ì7v LUë3 ls`V³>S´ß–g?rk¬L ýZµZRžAÇÁ‡p rrkÕïðDb€ØœÎAžë¼PqÓÀ‹/wÔY:#ª ¥{÷YÅåÇ…Žå5úëpòz‚-sH^ ¡&!?Lß§â7$Ä“6chú‹›ÃÜø^Z”+2“¦øz©!fœÑL £ÛŸãv=ݲé~}µdí‡C¨CW Bí¦Ÿ<~‡nÅò+ž­<`{á°<ÊÔ'Ãn¡(U~²5öDn#ɇ‘S¼¤­xP“:&³ªî &ô«¹H[ßõÕ~_b3G/mâ¨N'¡+'3ñ±c¦“™FÚW#»9ˆMNöIrõÈ4‰Àͤ­ž[æ¿¢IEUNB£OÂÎ&±³‹¡:Eç|ÉWç#„Íè†<ŠL¥ÝüvGZ×õE/15¸-oA¾Õù•wø!äävöb•Š»¼ ù¶±Îô(Ÿ…¡òïW ›ï2+È’Ïœàˆ|44¡uU™Fñ„Ò»•„ä!UgÛ«¿}÷a™'3õLXÖÔi §ÝeØ5WrJÚ%ž¹[_Û…€B±…ƒšûÆö<§hkÆÓÒó †|a4γu"ÉûãЃۦxh||ÇäªçkŠ¹Ã‡oÞ×yöJÝ;í#|Ù|^9”ÃìΠpBéµ}ÂÓFÔŠû䎧 ké§Ú¼AÅ §3õ¼¦¶F*®x ò)c¸Ì_~ïí:…ÝF–ªºvãÅ‚òÜ2#=÷˜öÜr+°‹sËû(ž0ù¹eà;ΙÄÎ,Rs¾&É${(F—ß—P,ÌOezKϰ/i1ß©ì”h5½ÃϘžÁ>¬ï&÷ ß3f»ª‘˜éDÄ= Äg5¯C‰ö%·hBQ¤|*F(ÞKH݆®LÜö[¬Æ£Àûµ†5£âòÀ5ÈkÆ}ØÇoS¨êqxÜ„lþ¶o6Ô'¡ÿ5Ÿ^îø\¿øŽR¤`Š<ÏBqg!Ï&ØU1[¥Ç¥bç kí]›MTüE ñ¤MãZ@`‡¶JéÈ’"³ó™h§†Ð|«´•QŽCbežS€ßMNv¨Ûbß´¾¥£Á|x²Ö\M±Ï£ûï@¾“¾FQñ+âI›C ìŒbˆ3oŠì.@¡ Ç i+wO «•ÏÄI¼(˜)wK˜íðEq8n‡>K¨õîé£<Û§÷ªî¶j+ÿãÀgÍ_Î[õ}H«qª°Q—úÑZÕ)GšfÌŽ´ªYæ©Ø+õް™UBc¬½‹-§øËŽOçy¢Ë(µˆg—Ý78ëDö,ðcÈæþá˜Åö,¯B×Ó4.†,Ãæ–3MWÒ©^KµDeh´¨¦RTÜ8p²ùöÏå¶Zä;¥p/í uR]gÇÓÀ5ÈZsˆÚÔµ$)ËÈÒŸ3¨øu ñ¤MCJ$ÝÁ©kX 5£H¼»~àñŒÁU'ñZ£9(NÉÝ¡šyÊpV+¥;…´]æT ¥Z±q—(ª¿¦ÚÊDþ$ðd½µ}»Öíy±®:<ÝDK@Ö ù¤6­ÀÛDixò…îºD% ¼ YëŠz'ÍssÆtœY¥=k߯÷’ê¬Ot€«“\'ÇÌú7$•½Ykl6ÝRñkâI›†—­“³¾›F‘ 2íšÏúæËV"r8yªË£?q9 ¼Yk¬SX¨¸ià,äYc¾˜«ßgô›BãHtTÕœÎC~lÌô™gñsoÁ®UAHZ‰˜>< ݘ÷YÙõzÿº]+ñ[c»v©þCñšJùÄØ*ar¯ˆžñäòÿÿî¾…+Ž#K³ŒHB!$ô …U*$lË BHF/»…ÜÝãÖ$U ¤UT–3³ØëíÙ÷{ö=û~uïÎììã7ìÙ=»a~GŸþ;›7ò‹ª ”YVDd%îõ9éïª(ˆ/"nD܈¼qoØÜNÕf«n#w@¸øÊ–SøOŸÛÈÕ«ÚÈÖ‡ò'SXÕúH±:S¬ÏeY{øe!Ä(ñ`Ùf׋ªã_Ê('ûqŒÿØ{«®W¶=ÕÙ’HMoCNÓ=?ÁA‘Š+§ Ou~þ¡â®§!§àޝjÈ܉:mȈœVTÜ]Èæwë”-¼Þh ž”jß·ÒxISö¡fµ ­£& â»$Ä£9%t›Ò¡è—a«|Â×2r€ ÷ͯiO0Ûòw¸›l=\͚͜Kn½Mç îQã/ýªÌÞ¦ThÕuÕÚH6zŠ1Eì^ʾ"—o×í×õÐ!öáf´ZÙ «$ü~ýè ¼jefQÂG͘çšy}¢­róÞKtÐQö¬­*˯îˆÕp\T1œÐmå90ŸÛ-§4䯄†_ÉsjÍ»Go©7•8¿·ƒ~] Ù OÚ9õÍ7 /E~÷sÑÉÔ}ü徜¦7ç·ß´¹ˆÆ°„x²îµ(Œ@3åÙ‡Ÿ.¬,ÛÛ5ïKŒ¹¯\'Êu{†çªùê;$¨™žžöʯš¦t~tìæhŽMŽŽ/ˆÓ ù‡bô~¾¼øâÙü‹Ocj*?‘C(¨Õ”¾q¨õ‡V,I)ékû„Šh§óHÜÚmÕ?æ:­–ü¿ßFŸ&Iúåo賞_µ´v’¤ÃwKnµjóšãéGšéHÍò–†NÜmÿ¡7š—X½J›ž \â­ÿš[©¸[<nsš÷ìoêÜ'¿å<ß©†»ÖJy\9Ä"ÑaÞ¾‚ü•qu´ò½'aËä¤@#. ¾V–Ÿ> ñ¶J—r$¥n4E÷î&Òl–œê>«M@(R>õ˜+‡N+”°%7‹b+¼uîÈó¬«NÎÄå(ð8äã:œÔf*®8Ù|öÑʵtB–,X™9™ÑŒýû÷v|È©¤Òïí¨ŽýñtzlìÇxØ_è0ë±AÅHˆ'¥Úäºè|×"Ö^‹™’uˆõ\`ËöаºŸ.-¿Lø ñ©dip6×ÜœÍiz6š5‹LãlóÑ;:hÍjÛF_|»”pœp¿¿¯/ï¾OŠccÖX‹Ð-:”UŸ=Dvæñ r –›ÁyÒZð d-Ï¥r K4ÎKˆ'ëÞ“ÎLSè½V·9e:K¹èØ^ ÃVQ7š¤·ŒqFSZ×ʶ5hõJˆGS‡[éÛ¾Šƒkœnk°; ”â_êÍÞïnaRqû€g!›»Ç+«.NB<™«î¨ë“Ϊn’ÅÛŽV¯„éªn1 ëé®5ßרôÏÞg¬äzží×Üj™N‹T‡Ý(3áä©Î+ö(3á4ä=ˆ'GÅß‘0ÝؽxŸ³g­/AŸæLW'£xŠ PÛÒR6?Å[Àg{ÛÏPi{dj>G 43VØ»ÒIÜÄš‹,éX+G};(ú¶]ÎßüpjR=±îgh£³,¯±»×Y3@q^™ØO@†pò 1±ƶ٠󪮷™¿yã†zƒ½ÂÈZN¤»Wnu"Ë(|9gºtË?íÛæ·vi[™ÐK 샬ué{wÚUË·‰Sô¾*_^+лšüöø8»Æ#)½*ÛUß vòêmø9hJÁ! )OrÊרî\å¡j^™4¯À(¬Z½WMøOA–pò¤1ñ%U⻳’oÚ}óƒqõúü u ëøRçÖŒD?GÙÓYBϱÏÈe´á£Ë]fÜzq^™ä Fx²ùiÀø[ܶ6k”yÂ*[µFZ®'î†ÿÚf/­×Ö†åo8Ê| Ç!ïAç~‰²¦Ó¹§ÇØ2wÞiÆ Ú¾NTÊW@Šð4dógï‹™³¹ÓXÊß(°Éñqi:U&üH¦±÷};ÙÛµŸðiö!g3yó ù‹T ««â+”-0UÆC6&÷0I ¯T`íÒÃäH½Ç-T€P:}μÇWQ¶Àtzü'c쥋«;”ñÊY[³=ŠýÍc×c~™‡ å.0|±nÄÆ„·-e[®Ú[ðEU®W u!”lvÃz]{weQf\KB)>š!ã™øI fSŒ™4Yû&ÄâGö’ ބ‰UËSÞP«×P¶Àt´úb¨Õ[®d.¹ÑMy?Ôƒ¶9éy®ƒáEÈy×äIÌòz󆤪ʤ7@”°¹hLzb-a‚õê[áå€)áä óm`üð*¹¾Ìy5œÂ4¬‚¯A“0½m úhz²¦f ~ÎìX¡=à¡ý$Q™`¤Ó3P/¶ÐHjtîö8ûn›ý‚M†ªº>“7¾Wæº ~„f—ë䟞O=TuÍ«‚¡ÑV.¶ØÞ;º„óH*ÎMUÙ”i©ø. ñèµÀ;:°ˆÿj¨vN§êôV? ú¬Ÿ>ƒ+ù±?Ï5_CkrÍú!^µÖÚ}ölñy’¶xbæsÑ;)9úÏÿÙȯ/ΉÏÍýšô‹_ßÜ´¼F·üH¯˜ÍÔŸ×%Ä#ú÷êM]‹—ÃݳM' \ûÊn‰_µ¢ }Uö‚·ðu´ðõU'TþB˧EO][»PBá9¶h\­%Ä£A#Ö]DÖÎWaÛ%±ûéâ‹û1ìà Ìqò°»øõy¥ÚHëJ(%&Ϻo¨øSâù‘ô|à$d­FŠ-õÀŠUq¬8 F¾Ì“ #«Î¡âG$Ä“Rç–;G±cd?v„¬‘ïTt¬cä[1Wº²ê*þ„„-—* ;æò2ï'\/v¹V¯:ßÔí‰pUCÛFÕyèz‰°¹bNP‰›çĪJ(­¬Y÷=E ñhöXŸñ† ØrD³YZçÛØÿR®C/xó’!Ï×á!‹hmZÛ»yn:Õ]Èg¸ãÆg‡ÿæQ¶Ô+#yHĽ—ЬLž1)**ÑŸ/0)bZø ET?¨áQ¥Hš yH‘!ãN-4yÌÊ#2ƒÑ(Ž g!ÏþŽÆ~ðîÿÿa4EŽþnŒÆc xÌt4&˜ ußZ3Dôáø–ÎèS6¨ø. ñhš Mé æ¢ùH M:T™Ø0n˜–ÉI.øtÓ¡:¹\\ €ËËv”‰¥‘Õ,}þ¶8ÞÓ | ø!äìöØ|,êDéÏÌ kQ ‡ !ñ¨¸;À¤XlÂõ_*î#à"dós)J£ª:ÀˆÁCàä¥Ô¢;TˆWŠÌ†0ª†ðý#vZ#¨¸à@î­H¶Òi/ç“­©Çyv„Ó¤8꺇 „—!_6Rù[ƒo/Ùª 6+g kKêvxò=ã;Àòád¯:ˆ‰Ã,ðd­YlwœY…®@A)ì+ïÉQ[…YoEI)œ`Å~cWèQµ>"ÈaLœYÍú GÁ¿pël“Ò«ÂAK‘Û0ø çb=ø ÇÃX"‰ƒ€˜œŽAëü  âN/A¾dÜQç(…l¶Iëªn-SÔè¯ËÀyÈó)¶LÂÁ㒚܇|?{sžŠ_OÖ4¤÷;†››vf|7mÁ™ÑË`_î­tŠŠ6üH £Û¹” ÂÍו}L9h Cá„’ƒVÊËFOÔŠ;䎇!ké§ÚºAÅõOBNÏ+q4RqÝÀSÍ]°®ðÄF[Ni£Á­¡Ýx± ¼¶Çà=Èæ‡aÊkËEh¬À=\[FQQž¿R몄£ÒSR±’g½x\в¦!ݧ3\ÃÚ•’¯•"3zÃÕ4?*m Q:ñ9ݤwwï Äû¥fzŽPÛƒ-ÛN¼_ÙŽü‘\3ݑܮày†d?–´áø»Î’ªsäU´&¡ôþ¹ÓsäU¨¡ôÊÍTã'»†Š–OJ]s„wÍšgSs+I;޶=s8y<›ž9 |òûÆ=³_çý?Q¸œ€<‘ž!˽C“ïÅ´í˜[À™\#=usxr Õ•šŠŸ•O§Wê+¹æ„1y.û%’ŠŸ—OÖ4$ïЮԅ߱";š­z€ýûµWë®VÓŸ oh«üu¸iáû,f;ü”/4DÃMXà…Û0~ö×ÌsÈÜ5ÕV&þÀÇÍ}AÆ­Æ‹«éÙݬK#^‚êÈ”"_ÅdëÔÈ—Š ¾•Õ ¢¯Iˆ'kR衎Ì}Å¢ªv0 {!÷jÊÞBç¢CöF*^V³|Úò¯Lƒêa`²Þ­”v'ÁûùnUƒÚG¹Fþj.O¥8ÆΩ¸ à4d­hj&7žkfîÏéî\äŸæ§O>÷9Q^Ää.ðäGÆŒî»k]•’¢c ¥f”›¸é ϧí5g[äù-°ŠóZ¹ÒA™¡VìÆƒb'5Â=©Ú·t^Õ”îtZÙŠhÂô®“c:Sìbpx rz÷òúη6ÔÕé— À+¯dÓ/#À«¯÷Ëy> ì°Mk‡YŸ»¨5b&Æ+l×cyà"dócÎSáXçÇæÏ%J»yDué€6Oä #¨f©ØÈ#Ù[DTüi ñdMãZ@`‡¶Lâ:¦";òCêšo™¶°º5ß̉lXÜ£~ÝycÃÍË¥`b<ÖèœÆßpëåw Ä}øòCãŽÃ[*ÙÑ!zÛÖ|‡¬HtÝOhvê{¾M—ZUçv¢ò>ð:d­—hjs;w X„\4î²®‚NLo@¾‘Z¨§æ$Kˆ'‹î¸ ¼ ÙÜ_/zs¨Ó%SÀ{õމ•E¥m¯,?üI6½2 \‚¼d¾€©ZTüc ñtÚŠ¸™kN–R^±¬—o*þ©„x²¦ñZ@`g¬ˆQ è ŠtÉã¡xòm³b_ Í«ó•ÐX¯ZAhJTB’¸ÕƯ‘0§ZvÞ8åºUQmc"; ü²Ö0ßž§wš›@táŶJâ¤ÊboìR@î¢kŒ'AlØAÂO&1¥GRE>‚‚¦§>FÕúæªí©Î"·Àƒ°²–¡©6‹|({òÑì‡ï-|O ž¬i|ŒØÁ½TQdG–GÐ|/ÒÊjêS~­Ëª0«\v„nL»“ưUÕt¢?\‚¬µl«iúmô'azˆ•UŒŠ"!ž¬iL¡vFÓ÷ó8AŠÔ¦¡Ú„‡ ÒVó­ohÔ/éMc¼Mãûý9ÝÉ)¶x %U“›¸œž|&ÅA”`rSqÀ³ÏkïDË-½MÇçôE˜GÞoºoàΫªëDöð dó!×o±-Ë«Òõs‹Ÿw0æîä —ûø]œNÐ ¢rhtº®¦RTÜQàdóÓÐ+±Zä;•p1 Ma¨“êÒEOg!Ïv~éš–”eò\ök?/áùØÜE ìÌÒuH %§H|Ïz€9ƒ«Ì±N±WÜu§dUŠl9Ú5cл§ZªÔËÍ»ÂQ üYÕV&ò"|ÎcÈzæR\ëv=ŸWžî¡% ¥ ±žžîAÃ{!÷+ý­–½æS”«º#½ñæóÅ9Ѹ‚Eœû€³µ¦« —Yt¡‘u§Ö³è:ÂôbOœ`UûM8îD÷iè¥#À‹/î­)@TòÀkµ|¶Ô;iX€¬Ž{W 0«²eíø^R]õ‰Îuà ä4ýŠVýIe¥Y(ëåv6þÉšÆ\®a÷trÕ—bÏ)$k¨h¾ê·¾)ÖØ¶‘!à0äá=žý‰Ë9àEÈZsÚÄBÅŽB5ÖáK…ÆÍ$×Õ$É_MU͉áð!dówõ=‹»V!ûhg$böm’ÏEÄñÙ¦ëäc·V¯ð[áv¥þbã°Oµ>÷1T Ó;u{Ìß„ÍíTm¶ê†µh¸HÈ–SãMAõj Âý„6ò†õÆ¡ †öGµ>Òë‚ësYÖ~1J<RÙÅõ¢êø—‚FÄeäÓÿ±qV]¯l{ª³%‘šÞÎ5Þ¬§6$øëRqàT®á.Üéù‡Š»œ†œBœUC†Š¿#!žN2ó’"J›÷¬-*~FB<)Õ¾o¥ñ®$¦ìAT[$Ó·^Œš€Šï’æ”pÄ”-pýâIÉBy—TN‰† ù°÷!v~¢xÝ áBµ\¼wµÄsk<û#Oí¥LbŠ}EŒ†€âN²ž·q¬'˜²Ïñ(Jˆ'‹Ê' OwP× ùfjÝñ®)êÚöÎm $gÑ;“ÀOr ‡´¬§Y*~IB<¦£8Ä®ÇG12ž)2û$êlŽfw9ÒÅÄ㌄x:­'TÜ àYÈæ¯1/ãê?±uÃÿ­Uìmgµb³p—ès'õ»®DñPÚ=§lÅÿÐû$v¤ÙG€C¹Fr†N›ñT\ðä ‚!.aÄCÖ;Q‘zs:Ü›úm•ÉÅn‡[ôz5àW¥R¨R´k¯Õ›Þ¨ªÑ=™kNI'siÜÍ;d­¯{özhU(¿—6Îr¦³”ºïðJÙöKžSkÞËꄳì^ÚâT|—„f¶8ývlÄÑùÆyˆ"?rä퇬gŠÒoï7m®§s‡S{Ê4žAaš)Ï>ütaeÙÞ®y_Fü¯\'äu{†' ÿê;dŸžžöʯš'\ùѱ›£6:69:þ½ N3¹8›i¿ùéý|yñųù…ŸÆTô9*G(ELW«(}ãPë7­X’NÒ×ö I}G¬Eµ˜m\øëÑ¿>3LMÿËßÐg=¿jiíÔô‡ï6ƒ\áÍÏ4Á¼Ú:* œ¸]îÿÒËKáΖN"«ZŽÎã×ÜJÅÝâIhš§ÂyÏþ¦Îï¶¼dwB£Ú­”Ç•óÀˆæ¸yŸ:Zåß“°ejR q<ú† Ü'!ÃVéR_ܦèÞÝDšÍ’KÔõ„ÃÏn4aäsåÐi…ƒ¶¤VVl…¤mDâ°­“âQ§[jÏŠx®ÈœôVÁG§ ŸJ­àÄ™ŠëŽ@É~ª âOKØrõ;³±)EAÞ‹±IÅîîáØ¤âJØ¡±™d<µ£uRÂÌÆ&x˜áؤâz{86©øÓîÕØ–M‹i‘ÕØ&áŽMzJh>6wÕ~Ýsë5ÕMÍŒ ÂãµÌgµñqc‚pòPöマâI©ö¹>:߯5€H~!6”ú¶QPñ]âI©ºŸ.-¿Lø ]/Ê1|è„àL®yRp&·'qddƯŽÐ·Žäš3`²¾øv)á ñ)~ÿÓx}y÷#”86fõ)ôF`‹eÕgŸ¡N;ãÔ9°5½Øiþ$m_ ïÓÕpNï”i«sâɺó^ Ã¦sŽ~‹rñÒ ŽE쿵 ¥8áóŠÜ—Á—ðä[ÚŠ÷ֲΣB¨.ëÄe8YëMŸÚ²NÅ} ¼ù¾q7v){¾Rù À¤Ö% PGb¯„TùJKØŸ3¸t¯Ö+/¡”„G!M¡W˜b¯¼Ä÷ kyµ·ëuÿ¢s xò…lzeÈ 3ã^9;ÎCbG!²£"¨pª1»¼ YÏ×R'Š^ÛþZ>Î5ܧ³è¯àÈæ7¿÷©¿" OÏ!?Ï~Éþ<êÓšÙ[ÆþŸ?ÍEïÿâ1ä”:~†¦ 사g w"%±êƒ|LÛúìja5µ ¢L¶šXÍ ÆÖkÕÈöœ’Æd)ßùü,ƒ\6‹ï3úÏ©Öê¿ïPRHÊpZuëAøsE¾?‡"…ÏO˜²ν¨yö¡Øk÷ \>_OæCó ´üšmìvìzéÍ[Äè­aÉò~›a©ž‰î ”Nø dsŸÙ–Œ»â¢+Òû=t:áä‘ÎÃ/0ô¨ØÓ÷àP‹Š?#¡ö¡–á0ü-ÿeG‡aÛ}s;j½À#¤6§ß>zø¡µWíê/ñ=Â%ÈKÆ]=HãÐh® » !v~~‰A·’kĸLá&Œò”üy8âÉ|~…–ÿª£ð‡NIÚ±ëËu`´¶;¾~…Ò „ëà/Ðé„®ƒ_aèQ±{¸Rñg$L÷žH/<ÆWãÎ~ŠÆ~•3Ý3µÀ«h`4OÖ4~- 0Öx:Ú†ŠñÛäŽÏlËwl? ¸£[®÷½}¶ƒ<ÑøR­‘…ZŠ7v欗¢Q^`«užÕÁw7í- ZP±}¿q1ˆGÜ¡XoÍn¸ï¡¼Í^E— ››“›õJàðB4½€¹Õ’Íò<2ߨéC3õ8OÒÄy—À•pò¤ö—ÚÁ%Ñ™ÎAžKqÚM8¸¤â>ÎCÖ»õ%ÿ´Kù¦•¸y!ûY§ …˜Î¬3¾ªËÄ=&uÍ׋<\$½{´Ë…(§ºˆÏ¸ªômP¶s»ïèvl$ŽMÛª¾òmErôçqª›jV±„+|ô‹=À¡\fù­×Ðü„éå·VXô—†'!ŸL­úí¼R~‚Z¯§:–”‡4ß%áÙ3hfoDŽ¿+ÄõÆÉE¯A¦óJd²Ìî^gÑõŸüfP²< UhûùÒN¥À6këããìÏ£öªæ:Õ ?®Lük4¡Ùú-ÿôa9ä%_Ë‹…œ’(ò ¯TyµêºÁhQrÅz#»b!Ÿß¤ze^£„!?ìœr&ò¨ léŒÕ¹1&œlà]Óô¥‘V@J²ÉÝ ­9ºNÅM¿ÐòS®Æ&¨ÎAž3®FßX”'d;ñml"¡*HöAî3&ô,VYw"M-;VµŽøè£ÏùU×Yõ |ù™qž´«S‡kTC-ÓËpôˆjÄç>A|Í¢=gþÏgÁØÊR]£ ÍŒ†­Q›oPB)ÌOæsЇ²¦3§Ì&êIÔtâ}ÐHŸDÇzá¿­íDg±ÄZø`N8 yÖ¸ƒ¬EÕ»9ÂAȃ{ÐÍu”-0nf²!Ni›nµ,L‰z0®Þ\o@AfÆ4–…9³jyÆÌ˜…|Ô˜ÕBë¡€+yj;'5Ï)ÙãÒü*fѰ&ê¸ ö„RìÊÌÕqe 4³³ Æ|¾ÍE¶µÀtììÙ1öÀ¥`£t¶Sq6ɈúÖ ;0\)?¹8æã1>¯G¡ûƒ ÏÝâÖ•kñZ’0½Yðð©nY‰±f)ýÐ L/ÐúåÚ;l`”¹~~„fRåŸN°ö“©YôÁ”pò„ùFM™È/Q8adó-ü@-œ%iìäo~T`ÜPo ?ÂÈƼα%„i¢Ñ]r]¯ü*TÄÀöCÓ^™ä_1ÂóÏ“¼B×B-Ï'¢V ªÞ¢ ¯@¾²«È_AÙÓ1j>cóÌ· ¿…Ð×1×Müp…vÃM²]æ£ùŽø“MÇ/±šUzm­ÛêÛпŠ*J‘ù «ó‘˜}^•×hÖu ‰HìaJžëûdQX±Xgß)sÿkàK(åÓ4äþã7¨)ÄOh_­Ú"n:eŠÛ°«4œÛçŒK¬ÈßyÂûïWääXh–\ îWwë>ÛfÖ¶ã'¾=Hd÷·Áˆð$d­×»ØÝ•7(áì‘o=a¥c&ÇØs7pJ6Ûp·ø6‘²DÑ( ãs4_coŸÞ¸Öl¯dó`Å´¥ï“)W柣„é½³^ƒe6áfvÈϳ¶¢B¾öˆ½2 ˆpá¡pšáfùUXçWÌÙ¬¹^`UÕ_ÿ Ôp òÒ¬áÿe Lg /„JboáØ²¯V*¬âº¯É§’OÞß ? u¥dU’Ãk'RþW I˜ÞŒ®Þtÿe L§én‡›AϪúk®·)4’77ÈÄÆÏ¯=›â›vâ…€Dúÿ” Ó3ñ‹clÍñü°ë­µÀöÂ}ªSÚц÷oYÝxû· JX„\4&}"Zò¨•_í¼ Uóæ UùßazÎw·bô:U‹®5ïø½ÉÜR©îùhsw-ÿ„ oA¾eLþçcÍ®g–ÏVm»áü]F^¾H¯Ã™‚4ê”ê«1‹Ù×­îšš•«÷P%Béê³aõEYøÏJ‚3™D4Ën”¢º1Ó1F·Ñù¸Ý°#³ÃÇ¢¨\¡_¡„!k…œØU¡ã¼¿ªeË+3Ûó\Oãðæ×`C˜^’§³|ˆFgÿ|ÖËïÌŒò‘ªa£ýGÐ"< Ùsõó¬îÑLý"#q¹ür1ÊŽ_«X;Íû&å¶›Ø$zÿ5Ò8Ž#Ó³zèRmU|7Á$¤Òþ[nO e*¾KB£­Â[ߊÿ-þûï¨vN§êôÖ(×ôY?}ÖýÑc~4±œkrÍú!^µÖÚ‡Ï?ú´ÀàÂýc÷=u¯‘&ˆp ò”1ÿYÆj®ïð•4$ç”É/#؉ù ¬j=býpþéòbùîV±b‡ö`™ê5¯^‹ƒ`N8 yָóyÃöœ hÙäÐúòÅç‹ê¯©zAˆÿIÈÃ)ŽØºo­ÇXa9‰Ø-Û½¬F,ß%aËvOqÄ祡;”‡%Ä£I‡*æ(´Šäc$|D‡\.îÒååèúP#¥°pgöYøÛbk¦AùðCÈ-—qí¹ÏR^(‰Ð„FöaBÀŶ–Hâ 6ç€cÇ:?¨¸“ÀK/wÔ9º×C™úlÒºª…¶@Ë5úë2pò|Š-“äZÄ© bïC¾Ÿ½9OÅ/Hˆ'kÇÐõ77íÌønLHÒÏ÷<=¹]ŽWŠ6üH £Û/…ãxt•/%Ã)Ô©F‘Zè_ùä’¶G^ªž­Ìskíoü%1’l˜¸˜-Y)žt2™â®ú@Ø0¡]¥Èeååš»ý©­Ýt¤ºl AW†r±±– )8¯™½«>(È6I¡yiÃñÅÉhƒUu‚Faœ ¦2Î.…êÝ.ñ%[݉¼ïKV¥B³‡"Sé._™ßËé®Ìíöu¢wÜnoA¾Õùw ø1ä;¯ìTÜeàmÈ·uF=<4•?œ†?—\¥E‘²t¡Rö½KIÝ5M™¤ã·D#FïAÖšÔ4ŽŠ+g!Ï÷á‚N@â0\„lþ¶o4Ô'¡ÿ<&Å)à'J‘‚)ò<Å!…<šbW%•HÅŽAÖ:»6[<¨øKâÉšÆy´€À•’'’"³ ¹è¤†Ðü¨´•Qá%nñÛ%ÝŒìn2²)2®¸Ì!Žt4˜Þ†¬µWSì è>Â)ÈSÙk?-!ž¬i0´€ÀÎ(öAáɦÈî"š°r¿¶rwµ°šþLø×Yå¯Ã5ž›%Ìvø¦8œ·- gZ-|«ÌcnØ>½Wu×T[™øC6u:n5Î!­¦¯`³.€ÀªKŽ´ÌäÆ!w~d^”Š}òûÙ *þš„x²¦!-º™ûŠEUí¸„HØ ¹W{Pö¶¾fŽÎ¤Ä6Ág5Ë';ŠÂÞ(Ÿ·ÅÃÀ<休׆û¹q§Aí£\ãz<—µ–!µc*n8 YkÙQ3ü©¸qàÈwŒÇÔa¾Yóù+ZÕáELîA~dÌè¾»ØÕ¦w¨_ˆv”bÍÂmŠä8ʧí5g;ü1ßgXÅy­\)…¡KCì5nŠÙ©ºË¼’‹fÂã38׸‚f ”^ïv-ùq2ÅÎ!'€§ ëÆZUÈÀöN¿\Jrý2¼ ùªq¿œç“ÀÛ w"ti›vÞ5‹NEÛSΪMÜòÀEÈæ§§­f9á8â*~1Rué½ m¾šÛõv¢Ó†Ù%©ØÈ#Ù[DTüi õï-ÑÈ£vÆ0ÛÏ/ø(R£eµxò!jœÒV[QÝ»†ˆôA>–Ú¸Ÿ_~RýˆËIàÈgRD ³7< ù¬±öN´¸×l:>´GEbÔã·%ÛgÇh×ç€O ?1&Ýo±-Ë«’ߨ†Ç–´5Œ‹¼nê±¥ãíNTNÖy5•¢âŽG ›ÏËWbµÈw*áv¬²#ÔIué"ާ³g;¿t‰ã *vò\ök?/!ž¬i\C ìÌÒuHºŒªH®‰ô|Å~c±+îºS²*E¶¼áÖ+eÉÙ—¬F§ZªÔËM'¿¨þ¬j+ù!àcÈz§}q­Ûõ|^uzºŽ–$<Y낵Úô$½òŒÔ5§yP´; tËŠ‡^óéz‚UÝ‘öÞ|Þ¢ ¾Ĺ8 YkºJÑp)¢ë¬;µn,¢ëÓs?Áªö›p܉î+è\ƒ#JG€!_Ü[S€¨ä× k«wÒ(°¹`ÜIáŽzËÚñ½¤ºê1„g Ït~Õñ«¨Ø{ïe¿ÜRñ³âÉšÆZ@`‡V}éÒ¨"Á¹h2#4_õšo[‰ÈpòðÏþÄåð"d­¹Nmb¡âNG!ëð¥BÃÑØßugU:9WUsb8|ù¡1ÓÇžÅ_HVwmig$.Ûn"s%opý@¤•%wÎ »R ±‘YVµ>7#Õá˜Þ}ÛÇaEjn§j³U7¬EtÉ%\|eˉr9p™’œcd‡6ò†õÆ¡ŒQt_Gµ>“¨Ãdªõ¹,k÷âÃeBW`vq½¨:þ?=Bé‹Áøu¸^u½²í©Î–  oCNÓo&áÍ!WNAžêüüCÅ]NCNÁOFÕ¡âïHˆ§Ó†Ì Icò[feAPñ3âI©ö}+·ý1eBµ?Ì™Z/FM@ÅwIˆG߈2£Cîýâ1l•Á·"ë©òº…"„<˜š¦^ í…’çÔš¾doµ •øñÞêÊÇÐƺkp÷Í7ÖkE~´jôCÖ›¹ß´¹ˆÆ°„x²îµ)(Œ@3åÙ‡Ÿ.¬,ÛÛ5ïËÈwПñÊ?°Öí:ø«ï/xzzÚ+¿jZ`ùѱ›£6:69:þ½ N¯ŒE¡mÃ’ö~¾¼øâÙü‹Ocê9ºŽ@V~k@ß8ÔúC+–¤’ôµ}BA4ã«&´ˆ»³eÌѽ,úï·Ñg†Ñªùú¬çW--£­úðÝ’[­Ú|_€s‰iÐi5cM6q³ÿÿÑÉK¬^%;™Ò±E»Å5·Rq·xl£æžEäœ.·;Õp£S)+‡Ë ú"FÅ—¿4®ŽVðé÷$l™˜hĽÕ× ºÜ'!ÃVéR¾Û¦èÞÝDšÍ’S5ͻф"w¹rè´ÂA [‚ç*¶Â[GUëž[¯©NÎÄå(ð8äã:œÔf*®8yȼGt‚_ŸOJµ?ÈõÑù¶]TvqµU¢0j*¾KÂó×°ºŸ.-¿Lø ñ‰KÈÐ9k<§s{â¾&Ó0r_£oµæPi£/¾]JØ.‰\ÇwâõåÝ-Á86fuz#P eDC:s1Ü(í”gV:x9$!Ãf9ÙùÍ dyô&Ööóo7ÇÇÙ5e’Ò7ùâ¤!ÉÓŒ5ó!æ­Jmƒ"¸ß(ÞT&> R³¹]Ñ ~\­8bs©¶âµ¤V,ðôÔäémÈ4r σ%¡äi”ÒÙOÛüµ3(î¾ñ8}§ñ™4]Pñ]jÏZ «›øoÕÎéT=n§Ï~gÒr¥™ÿéúã|ß¿;+Ww—Tà~ÊŒãƒÅ9q¢ÁÇÖªåÑߊ>Š!®:ÕÉróÃ(³ëª»Íƒß¶|\¢|éõ·þDÉ­WßúnÙ®úN°ÓüxPþøÕÛe–Ý`w™»²o4ÕeÃÞn~¥ûüÚ Ûký $ ­aÓª5?:M>V°ÑZ=>!µ²­¹•u·Úü¸üÍ7ÍOŽEŸÔ­jàTìV®ž³º*ÿ~DÉ«¯·–äÛëô¢õ÷ýM×}›«_s_Û­• ìíà­Ïb(½qܰ­¤ pl\Õmòj͇?Òª±¹ÿûÿë$T¼ñggplot2/DESCRIPTION0000644000177400001440000001054713031552555013543 0ustar murdochusersPackage: ggplot2 Version: 2.2.1 Title: Create Elegant Data Visualisations Using the Grammar of Graphics Description: A system for 'declaratively' creating graphics, based on "The Grammar of Graphics". You provide the data, tell 'ggplot2' how to map variables to aesthetics, what graphical primitives to use, and it takes care of the details. Authors@R: c( person("Hadley", "Wickham", , "hadley@rstudio.com", c("aut", "cre")), person("Winston", "Chang", , "winston@rstudio.com", "aut"), person("RStudio", role = c("cph")) ) Depends: R (>= 3.1) Imports: digest, grid, gtable (>= 0.1.1), MASS, plyr (>= 1.7.1), reshape2, scales (>= 0.4.1), stats, tibble, lazyeval Suggests: covr, ggplot2movies, hexbin, Hmisc, lattice, mapproj, maps, maptools, mgcv, multcomp, nlme, testthat (>= 0.11.0), quantreg, knitr, rpart, rmarkdown, svglite Enhances: sp License: GPL-2 | file LICENSE URL: http://ggplot2.tidyverse.org, https://github.com/tidyverse/ggplot2 BugReports: https://github.com/tidyverse/ggplot2/issues LazyData: true Collate: 'ggproto.r' 'aaa-.r' 'aes-calculated.r' 'aes-colour-fill-alpha.r' 'aes-group-order.r' 'aes-linetype-size-shape.r' 'aes-position.r' 'utilities.r' 'aes.r' 'legend-draw.r' 'geom-.r' 'annotation-custom.r' 'annotation-logticks.r' 'geom-polygon.r' 'geom-map.r' 'annotation-map.r' 'geom-raster.r' 'annotation-raster.r' 'annotation.r' 'autoplot.r' 'axis-secondary.R' 'bench.r' 'bin.R' 'coord-.r' 'coord-cartesian-.r' 'coord-fixed.r' 'coord-flip.r' 'coord-map.r' 'coord-munch.r' 'coord-polar.r' 'coord-quickmap.R' 'coord-transform.r' 'data.R' 'facet-.r' 'facet-grid-.r' 'facet-null.r' 'facet-wrap.r' 'fortify-lm.r' 'fortify-map.r' 'fortify-multcomp.r' 'fortify-spatial.r' 'fortify.r' 'stat-.r' 'geom-abline.r' 'geom-rect.r' 'geom-bar.r' 'geom-bin2d.r' 'geom-blank.r' 'geom-boxplot.r' 'geom-col.r' 'geom-path.r' 'geom-contour.r' 'geom-count.r' 'geom-crossbar.r' 'geom-segment.r' 'geom-curve.r' 'geom-defaults.r' 'geom-ribbon.r' 'geom-density.r' 'geom-density2d.r' 'geom-dotplot.r' 'geom-errorbar.r' 'geom-errorbarh.r' 'geom-freqpoly.r' 'geom-hex.r' 'geom-histogram.r' 'geom-hline.r' 'geom-jitter.r' 'geom-label.R' 'geom-linerange.r' 'geom-point.r' 'geom-pointrange.r' 'geom-quantile.r' 'geom-rug.r' 'geom-smooth.r' 'geom-spoke.r' 'geom-text.r' 'geom-tile.r' 'geom-violin.r' 'geom-vline.r' 'ggplot2.r' 'grob-absolute.r' 'grob-dotstack.r' 'grob-null.r' 'grouping.r' 'guide-colorbar.r' 'guide-legend.r' 'guides-.r' 'guides-axis.r' 'guides-grid.r' 'hexbin.R' 'labeller.r' 'labels.r' 'layer.r' 'layout.R' 'limits.r' 'margins.R' 'plot-build.r' 'plot-construction.r' 'plot-last.r' 'plot.r' 'position-.r' 'position-collide.r' 'position-dodge.r' 'position-identity.r' 'position-jitter.r' 'position-jitterdodge.R' 'position-nudge.R' 'position-stack.r' 'quick-plot.r' 'range.r' 'save.r' 'scale-.r' 'scale-alpha.r' 'scale-brewer.r' 'scale-continuous.r' 'scale-date.r' 'scale-discrete-.r' 'scale-gradient.r' 'scale-grey.r' 'scale-hue.r' 'scale-identity.r' 'scale-linetype.r' 'scale-manual.r' 'scale-shape.r' 'scale-size.r' 'scale-type.R' 'scales-.r' 'stat-bin.r' 'stat-bin2d.r' 'stat-bindot.r' 'stat-binhex.r' 'stat-boxplot.r' 'stat-contour.r' 'stat-count.r' 'stat-density-2d.r' 'stat-density.r' 'stat-ecdf.r' 'stat-ellipse.R' 'stat-function.r' 'stat-identity.r' 'stat-qq.r' 'stat-quantile.r' 'stat-smooth-methods.r' 'stat-smooth.r' 'stat-sum.r' 'stat-summary-2d.r' 'stat-summary-bin.R' 'stat-summary-hex.r' 'stat-summary.r' 'stat-unique.r' 'stat-ydensity.r' 'summary.r' 'theme-elements.r' 'theme.r' 'theme-defaults.r' 'theme-current.R' 'translate-qplot-ggplot.r' 'translate-qplot-lattice.r' 'utilities-break.r' 'utilities-grid.r' 'utilities-help.r' 'utilities-matrix.r' 'utilities-resolution.r' 'utilities-table.r' 'zxx.r' 'zzz.r' VignetteBuilder: knitr RoxygenNote: 5.0.1.9000 NeedsCompilation: no Packaged: 2016-12-30 17:10:52 UTC; hadley Author: Hadley Wickham [aut, cre], Winston Chang [aut], RStudio [cph] Maintainer: Hadley Wickham Repository: CRAN Date/Publication: 2016-12-30 22:45:17 ggplot2/man/0000755000177400001440000000000013010131420012556 5ustar murdochusersggplot2/man/fortify.Rd0000644000177400001440000000111113031506205014533 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify.r \name{fortify} \alias{fortify} \title{Fortify a model with data.} \usage{ fortify(model, data, ...) } \arguments{ \item{model}{model or other R object to convert to data frame} \item{data}{original dataset, if needed} \item{...}{other arguments passed to methods} } \description{ Rather than using this function, I now recommend using the \pkg{broom} package, which implements a much wider range of methods. \code{fortify} may be deprecated in the future. } \seealso{ \code{\link{fortify.lm}} } ggplot2/man/geom_path.Rd0000644000177400001440000001333013031506205015022 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-path.r \name{geom_path} \alias{geom_path} \alias{geom_line} \alias{geom_step} \title{Connect observations} \usage{ geom_path(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., lineend = "butt", linejoin = "round", linemitre = 1, arrow = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_line(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_step(mapping = NULL, data = NULL, stat = "identity", position = "identity", direction = "hv", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{lineend}{Line end style (round, butt, square)} \item{linejoin}{Line join style (round, mitre, bevel)} \item{linemitre}{Line mitre limit (number greater than 1)} \item{arrow}{Arrow specification, as created by \code{\link[grid]{arrow}}} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{direction}{direction of stairs: 'vh' for vertical then horizontal, or 'hv' for horizontal then vertical} } \description{ \code{geom_path()} connects the observations in the order in which they appear in the data. \code{geom_line()} connects them in order of the variable on the x axis. \code{geom_step()} creates a stairstep plot, highlighting exactly when changes occur. The \code{group} aesthetic determines which cases are connected together. } \details{ An alternative parameterisation is \code{\link{geom_segment}}: each line corresponds to a single case which provides the start and end coordinates. } \section{Aesthetics}{ \aesthetics{geom}{path} } \examples{ # geom_line() is suitable for time series ggplot(economics, aes(date, unemploy)) + geom_line() ggplot(economics_long, aes(date, value01, colour = variable)) + geom_line() # geom_step() is useful when you want to highlight exactly when # the y value chanes recent <- economics[economics$date > as.Date("2013-01-01"), ] ggplot(recent, aes(date, unemploy)) + geom_line() ggplot(recent, aes(date, unemploy)) + geom_step() # geom_path lets you explore how two variables are related over time, # e.g. unemployment and personal savings rate m <- ggplot(economics, aes(unemploy/pop, psavert)) m + geom_path() m + geom_path(aes(colour = as.numeric(date))) # Changing parameters ---------------------------------------------- ggplot(economics, aes(date, unemploy)) + geom_line(colour = "red") # Use the arrow parameter to add an arrow to the line # See ?arrow for more details c <- ggplot(economics, aes(x = date, y = pop)) c + geom_line(arrow = arrow()) c + geom_line( arrow = arrow(angle = 15, ends = "both", type = "closed") ) # Control line join parameters df <- data.frame(x = 1:3, y = c(4, 1, 9)) base <- ggplot(df, aes(x, y)) base + geom_path(size = 10) base + geom_path(size = 10, lineend = "round") base + geom_path(size = 10, linejoin = "mitre", lineend = "butt") # NAs break the line. Use na.rm = T to suppress the warning message df <- data.frame( x = 1:5, y1 = c(1, 2, 3, 4, NA), y2 = c(NA, 2, 3, 4, 5), y3 = c(1, 2, NA, 4, 5) ) ggplot(df, aes(x, y1)) + geom_point() + geom_line() ggplot(df, aes(x, y2)) + geom_point() + geom_line() ggplot(df, aes(x, y3)) + geom_point() + geom_line() \donttest{ # Setting line type vs colour/size # Line type needs to be applied to a line as a whole, so it can # not be used with colour or size that vary across a line x <- seq(0.01, .99, length.out = 100) df <- data.frame( x = rep(x, 2), y = c(qlogis(x), 2 * qlogis(x)), group = rep(c("a","b"), each = 100) ) p <- ggplot(df, aes(x=x, y=y, group=group)) # These work p + geom_line(linetype = 2) p + geom_line(aes(colour = group), linetype = 2) p + geom_line(aes(colour = x)) # But this doesn't should_stop(p + geom_line(aes(colour = x), linetype=2)) } } \seealso{ \code{\link{geom_polygon}}: Filled paths (polygons); \code{\link{geom_segment}}: Line segments } ggplot2/man/ggproto.Rd0000644000177400001440000000452113031506205014542 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ggproto.r \name{ggproto} \alias{ggproto} \alias{ggproto_parent} \alias{is.ggproto} \title{Create a new ggproto object} \usage{ ggproto(`_class` = NULL, `_inherit` = NULL, ...) ggproto_parent(parent, self) is.ggproto(x) } \arguments{ \item{_class}{Class name to assign to the object. This is stored as the class attribute of the object. This is optional: if \code{NULL} (the default), no class name will be added to the object.} \item{_inherit}{ggproto object to inherit from. If \code{NULL}, don't inherit from any object.} \item{...}{A list of members in the ggproto object.} \item{parent, self}{Access parent class \code{parent} of object \code{self}.} \item{x}{An object to test.} } \description{ Construct a new object with \code{ggproto}, test with \code{is.proto}, and access parent methods/fields with \code{ggproto_parent}. } \details{ ggproto implements a protype based OO system which blurs the lines between classes and instances. It is inspired by the proto package, but it has some important differences. Notably, it cleanly supports cross-package inheritance, and has faster performance. In most cases, creating a new OO system to be used by a single package is not a good idea. However, it was the least-bad solution for ggplot2 because it required the fewest changes to an already complex code base. } \section{Calling methods}{ ggproto methods can take an optional \code{self} argument: if it is present, it is a regular method; if it's absent, it's a "static" method (i.e. it doesn't use any fields). Imagine you have a ggproto object \code{Adder}, which has a method \code{addx = function(self, n) n + self$x}. Then, to call this function, you would use \code{Adder$addx(10)} -- the \code{self} is passed in automatically by the wrapper function. \code{self} be located anywhere in the function signature, although customarily it comes first. } \section{Calling methods in a parent}{ To explicitly call a methods in a parent, use \code{ggproto_parent(Parent, self)}. } \examples{ Adder <- ggproto("Adder", x = 0, add = function(self, n) { self$x <- self$x + n self$x } ) is.ggproto(Adder) Adder$add(10) Adder$add(10) Doubler <- ggproto("Doubler", Adder, add = function(self, n) { ggproto_parent(Adder, self)$add(n * 2) } ) Doubler$x Doubler$add(10) } ggplot2/man/geom_errorbarh.Rd0000644000177400001440000000535013031506205016057 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-errorbarh.r \name{geom_errorbarh} \alias{geom_errorbarh} \title{Horizontal error bars} \usage{ geom_errorbarh(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ A rotated version of \code{\link{geom_errorbar}}. } \section{Aesthetics}{ \aesthetics{geom}{errorbarh} } \examples{ df <- data.frame( trt = factor(c(1, 1, 2, 2)), resp = c(1, 5, 3, 4), group = factor(c(1, 2, 1, 2)), se = c(0.1, 0.3, 0.3, 0.2) ) # Define the top and bottom of the errorbars p <- ggplot(df, aes(resp, trt, colour = group)) p + geom_point() + geom_errorbarh(aes(xmax = resp + se, xmin = resp - se)) p + geom_point() + geom_errorbarh(aes(xmax = resp + se, xmin = resp - se, height = .2)) } ggplot2/man/transform_position.Rd0000644000177400001440000000110413031506205017012 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-.r \name{transform_position} \alias{transform_position} \title{Convenience function to transform all position variables.} \usage{ transform_position(df, trans_x = NULL, trans_y = NULL, ...) } \arguments{ \item{trans_x, trans_y}{Transformation functions for x and y aesthetics. (will transform x, xmin, xmax, xend etc)} \item{...}{Additional arguments passed to \code{trans_x} and \code{trans_y}.} } \description{ Convenience function to transform all position variables. } \keyword{internal} ggplot2/man/stat_ellipse.Rd0000644000177400001440000000736513031506205015562 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-ellipse.R \name{stat_ellipse} \alias{stat_ellipse} \title{Compute normal confidence ellipses} \usage{ stat_ellipse(mapping = NULL, data = NULL, geom = "path", position = "identity", ..., type = "t", level = 0.95, segments = 51, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{geom}{The geometric object to use display the data} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{type}{The type of ellipse. The default \code{"t"} assumes a multivariate t-distribution, and \code{"norm"} assumes a multivariate normal distribution. \code{"euclid"} draws a circle with the radius equal to \code{level}, representing the euclidean distance from the center. This ellipse probably won't appear circular unless \code{coord_fixed()} is applied.} \item{level}{The confidence level at which to draw an ellipse (default is 0.95), or, if \code{type="euclid"}, the radius of the circle to be drawn.} \item{segments}{The number of segments to be used in drawing the ellipse.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ The method for calculating the ellipses has been modified from \code{car::ellipse} (Fox and Weisberg, 2011) } \examples{ ggplot(faithful, aes(waiting, eruptions)) + geom_point() + stat_ellipse() ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + geom_point() + stat_ellipse() ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + geom_point() + stat_ellipse(type = "norm", linetype = 2) + stat_ellipse(type = "t") ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + geom_point() + stat_ellipse(type = "norm", linetype = 2) + stat_ellipse(type = "euclid", level = 3) + coord_fixed() ggplot(faithful, aes(waiting, eruptions, fill = eruptions > 3)) + stat_ellipse(geom = "polygon") } \references{ John Fox and Sanford Weisberg (2011). An {R} Companion to Applied Regression, Second Edition. Thousand Oaks CA: Sage. URL: \url{http://socserv.socsci.mcmaster.ca/jfox/Books/Companion} } ggplot2/man/position_dodge.Rd0000644000177400001440000000362313031506205016071 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-dodge.r \name{position_dodge} \alias{position_dodge} \title{Dodge overlapping objects side-to-side} \usage{ position_dodge(width = NULL) } \arguments{ \item{width}{Dodging width, when different to the width of the individual elements. This is useful when you want to align narrow geoms with wider geoms. See the examples.} } \description{ Dodging preserves the vertical position of an geom while adjusting the horizontal position. } \examples{ ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + geom_bar(position = "dodge") \donttest{ ggplot(diamonds, aes(price, fill = cut)) + geom_histogram(position="dodge") # see ?geom_boxplot and ?geom_bar for more examples # In this case a frequency polygon is probably a better choice ggplot(diamonds, aes(price, colour = cut)) + geom_freqpoly() } # Dodging with various widths ------------------------------------- # To dodge items with different widths, you need to be explicit df <- data.frame(x = c("a","a","b","b"), y = 2:5, g = rep(1:2, 2)) p <- ggplot(df, aes(x, y, group = g)) + geom_col(position = "dodge", fill = "grey50", colour = "black") p # A line range has no width: p + geom_linerange(aes(ymin = y - 1, ymax = y + 1), position = "dodge") # So you must explicitly specify the width p + geom_linerange( aes(ymin = y - 1, ymax = y + 1), position = position_dodge(width = 0.9) ) # The same principle applies to error bars, which are usually # narrower than the bars p + geom_errorbar( aes(ymin = y - 1, ymax = y + 1), width = 0.2, position = "dodge" ) p + geom_errorbar( aes(ymin = y - 1, ymax = y + 1), width = 0.2, position = position_dodge(width = 0.9) ) } \seealso{ Other position adjustments: \code{\link{position_identity}}, \code{\link{position_jitterdodge}}, \code{\link{position_jitter}}, \code{\link{position_nudge}}, \code{\link{position_stack}} } ggplot2/man/fortify.sp.Rd0000644000177400001440000000244613031506205015170 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-spatial.r \name{fortify.sp} \alias{fortify.sp} \alias{fortify.SpatialPolygonsDataFrame} \alias{fortify.SpatialPolygons} \alias{fortify.Polygons} \alias{fortify.Polygon} \alias{fortify.SpatialLinesDataFrame} \alias{fortify.Lines} \alias{fortify.Line} \title{Fortify method for classes from the sp package.} \usage{ \method{fortify}{SpatialPolygonsDataFrame}(model, data, region = NULL, ...) \method{fortify}{SpatialPolygons}(model, data, ...) \method{fortify}{Polygons}(model, data, ...) \method{fortify}{Polygon}(model, data, ...) \method{fortify}{SpatialLinesDataFrame}(model, data, ...) \method{fortify}{Lines}(model, data, ...) \method{fortify}{Line}(model, data, ...) } \arguments{ \item{model}{\code{SpatialPolygonsDataFrame} to convert into a dataframe.} \item{data}{not used by this method} \item{region}{name of variable used to split up regions} \item{...}{not used by this method} } \description{ To figure out the correct variable name for region, inspect \code{as.data.frame(model)}. } \examples{ if (require("maptools")) { sids <- system.file("shapes/sids.shp", package="maptools") nc1 <- readShapePoly(sids, proj4string = CRS("+proj=longlat +datum=NAD27")) nc1_df <- fortify(nc1) } } \keyword{internal} ggplot2/man/economics.Rd0000644000177400001440000000217113031506205015037 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{economics} \alias{economics} \alias{economics_long} \title{US economic time series} \format{A data frame with 478 rows and 6 variables \describe{ \item{date}{Month of data collection} \item{psavert}{personal savings rate, \url{http://research.stlouisfed.org/fred2/series/PSAVERT/}} \item{pce}{personal consumption expenditures, in billions of dollars, \url{http://research.stlouisfed.org/fred2/series/PCE}} \item{unemploy}{number of unemployed in thousands, \url{http://research.stlouisfed.org/fred2/series/UNEMPLOY}} \item{uempmed}{median duration of unemployment, in weeks, \url{http://research.stlouisfed.org/fred2/series/UEMPMED}} \item{pop}{total population, in thousands, \url{http://research.stlouisfed.org/fred2/series/POP}} }} \usage{ economics economics_long } \description{ This dataset was produced from US economic time series data available from \url{http://research.stlouisfed.org/fred2}. \code{economics} is in "wide" format, \code{economics_long} is in "long" format. } \keyword{datasets} ggplot2/man/benchplot.Rd0000644000177400001440000000106013031506205015032 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/bench.r \name{benchplot} \alias{benchplot} \title{Benchmark plot creation time. Broken down into construct, build, render and draw times.} \usage{ benchplot(x) } \arguments{ \item{x}{code to create ggplot2 plot} } \description{ Benchmark plot creation time. Broken down into construct, build, render and draw times. } \examples{ benchplot(ggplot(mtcars, aes(mpg, wt)) + geom_point()) benchplot(ggplot(mtcars, aes(mpg, wt)) + geom_point() + facet_grid(. ~ cyl)) } \keyword{internal} ggplot2/man/ggplot_build.Rd0000644000177400001440000000202513031506205015531 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-build.r \name{ggplot_build} \alias{ggplot_build} \alias{layer_data} \alias{layer_scales} \alias{layer_grob} \title{Build ggplot for rendering.} \usage{ ggplot_build(plot) layer_data(plot, i = 1L) layer_scales(plot, i = 1L, j = 1L) layer_grob(plot, i = 1L) } \arguments{ \item{plot}{ggplot object} } \description{ \code{ggplot_build} takes the plot object, and performs all steps necessary to produce an object that can be rendered. This function outputs two pieces: a list of data frames (one for each layer), and a panel object, which contain all information about axis limits, breaks etc. } \details{ \code{layer_data}, \code{layer_grob}, and \code{layer_scales} are helper functions that returns the data, grob, or scales associated with a given layer. These are useful for tests. } \seealso{ \code{\link{print.ggplot}} and \code{\link{benchplot}} for functions that contain the complete set of steps for generating a ggplot2 plot. } \keyword{internal} ggplot2/man/scale_size.Rd0000644000177400001440000000651313031506205015205 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-size.r \name{scale_size} \alias{scale_size} \alias{scale_size_continuous} \alias{scale_radius} \alias{scale_size} \alias{scale_size_discrete} \alias{scale_size_area} \alias{scale_size_datetime} \alias{scale_size_date} \title{Scales for area or radius} \usage{ scale_radius(name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, range = c(1, 6), trans = "identity", guide = "legend") scale_size(name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, range = c(1, 6), trans = "identity", guide = "legend") scale_size_area(..., max_size = 6) } \arguments{ \item{name}{The name of the scale. Used as axis or legend title. If \code{NULL}, the default, the name of the scale is taken from the first mapping used for that aesthetic.} \item{breaks}{One of: \itemize{ \item \code{NULL} for no breaks \item \code{waiver()} for the default breaks computed by the transformation object \item A numeric vector of positions \item A function that takes the limits as input and returns breaks as output }} \item{labels}{One of: \itemize{ \item \code{NULL} for no labels \item \code{waiver()} for the default labels computed by the transformation object \item A character vector giving labels (must be same length as \code{breaks}) \item A function that takes the breaks as input and returns labels as output }} \item{limits}{A numeric vector of length two providing limits of the scale. Use \code{NA} to refer to the existing minimum or maximum.} \item{range}{a numeric vector of length 2 that specifies the minimum and maximum size of the plotting symbol after transformation.} \item{trans}{Either the name of a transformation object, or the object itself. Built-in transformations include "asn", "atanh", "boxcox", "exp", "identity", "log", "log10", "log1p", "log2", "logit", "probability", "probit", "reciprocal", "reverse" and "sqrt". A transformation object bundles together a transform, it's inverse, and methods for generating breaks and labels. Transformation objects are defined in the scales package, and are called \code{name_trans}, e.g. \code{\link[scales]{boxcox_trans}}. You can create your own transformation with \code{\link[scales]{trans_new}}.} \item{guide}{Name of guide object, or object itself.} \item{...}{Other arguments passed on to \code{\link{continuous_scale}} to control name, limits, breaks, labels and so forth.} \item{max_size}{Size of largest points.} } \description{ \code{scale_size} scales area, \code{scale_radius} scales radius. The size aesthetic is most commonly used for points and text, and humans perceive the area of points (not their radius), so this provides for optimal perception. \code{scale_size_area} ensures that a value of 0 is mapped to a size of 0. } \examples{ p <- ggplot(mpg, aes(displ, hwy, size = hwy)) + geom_point() p p + scale_size("Highway mpg") p + scale_size(range = c(0, 10)) # If you want zero value to have zero size, use scale_size_area: p + scale_size_area() # This is most useful when size is a count ggplot(mpg, aes(class, cyl)) + geom_count() + scale_size_area() # If you want to map size to radius (usually bad idea), use scale_radius p + scale_radius() } \seealso{ \code{\link{scale_size_area}} if you want 0 values to be mapped to points with size 0. } ggplot2/man/annotate.Rd0000644000177400001440000000416213031506205014673 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/annotation.r \name{annotate} \alias{annotate} \title{Create an annotation layer} \usage{ annotate(geom, x = NULL, y = NULL, xmin = NULL, xmax = NULL, ymin = NULL, ymax = NULL, xend = NULL, yend = NULL, ..., na.rm = FALSE) } \arguments{ \item{geom}{name of geom to use for annotation} \item{x, y, xmin, ymin, xmax, ymax, xend, yend}{positioning aesthetics - you must specify at least one of these.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} } \description{ This function adds geoms to a plot, but unlike typical a geom function, the properties of the geoms are not mapped from variables of a data frame, but are instead passed in as vectors. This is useful for adding small annotations (such as text labels) or if you have your data in vectors, and for some reason don't want to put them in a data frame. } \details{ Note that all position aesthetics are scaled (i.e. they will expand the limits of the plot so they are visible), but all other aesthetics are set. This means that layers created with this function will never affect the legend. } \examples{ p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() p + annotate("text", x = 4, y = 25, label = "Some text") p + annotate("text", x = 2:5, y = 25, label = "Some text") p + annotate("rect", xmin = 3, xmax = 4.2, ymin = 12, ymax = 21, alpha = .2) p + annotate("segment", x = 2.5, xend = 4, y = 15, yend = 25, colour = "blue") p + annotate("pointrange", x = 3.5, y = 20, ymin = 12, ymax = 28, colour = "red", size = 1.5) p + annotate("text", x = 2:3, y = 20:21, label = c("my label", "label 2")) p + annotate("text", x = 4, y = 25, label = "italic(R) ^ 2 == 0.75", parse = TRUE) p + annotate("text", x = 4, y = 25, label = "paste(italic(R) ^ 2, \\" = .75\\")", parse = TRUE) } ggplot2/man/coord_fixed.Rd0000644000177400001440000000273613031506205015354 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-fixed.r \name{coord_fixed} \alias{coord_fixed} \alias{coord_equal} \title{Cartesian coordinates with fixed "aspect ratio"} \usage{ coord_fixed(ratio = 1, xlim = NULL, ylim = NULL, expand = TRUE) } \arguments{ \item{ratio}{aspect ratio, expressed as \code{y / x}} \item{xlim}{Limits for the x and y axes.} \item{ylim}{Limits for the x and y axes.} \item{expand}{If \code{TRUE}, the default, adds a small expansion factor to the limits to ensure that data and axes don't overlap. If \code{FALSE}, limits are taken exactly from the data or \code{xlim}/\code{ylim}.} } \description{ A fixed scale coordinate system forces a specified ratio between the physical representation of data units on the axes. The ratio represents the number of units on the y-axis equivalent to one unit on the x-axis. The default, \code{ratio = 1}, ensures that one unit on the x-axis is the same length as one unit on the y-axis. Ratios higher than one make units on the y axis longer than units on the x-axis, and vice versa. This is similar to \code{\link[MASS]{eqscplot}}, but it works for all types of graphics. } \examples{ # ensures that the ranges of axes are equal to the specified ratio by # adjusting the plot aspect ratio p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() p + coord_fixed(ratio = 1) p + coord_fixed(ratio = 5) p + coord_fixed(ratio = 1/5) # Resize the plot to see that the specified aspect ratio is maintained } ggplot2/man/waiver.Rd0000644000177400001440000000074113031506205014356 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.r \name{waiver} \alias{waiver} \title{A waiver object.} \usage{ waiver() } \description{ A waiver is a "flag" object, similar to \code{NULL}, that indicates the calling function should just use the default value. It is used in certain functions to distinguish between displaying nothing (\code{NULL}) and displaying a default value calculated elsewhere (\code{waiver()}) } \keyword{internal} ggplot2/man/ggtheme.Rd0000644000177400001440000000452713031506205014507 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-defaults.r \name{ggtheme} \alias{theme_grey} \alias{theme_gray} \alias{theme_bw} \alias{theme_linedraw} \alias{theme_light} \alias{theme_dark} \alias{theme_minimal} \alias{theme_classic} \alias{theme_void} \title{Complete themes} \usage{ theme_grey(base_size = 11, base_family = "") theme_gray(base_size = 11, base_family = "") theme_bw(base_size = 11, base_family = "") theme_linedraw(base_size = 11, base_family = "") theme_light(base_size = 11, base_family = "") theme_dark(base_size = 11, base_family = "") theme_minimal(base_size = 11, base_family = "") theme_classic(base_size = 11, base_family = "") theme_void(base_size = 11, base_family = "") } \arguments{ \item{base_size}{base font size} \item{base_family}{base font family} } \description{ These are complete themes which control all non-data display. Use \code{\link{theme}} if you just need to tweak the display of an existing theme. } \details{ \describe{ \item{\code{theme_gray}}{ The signature ggplot2 theme with a grey background and white gridlines, designed to put the data forward yet make comparisons easy.} \item{\code{theme_bw}}{ The classic dark-on-light ggplot2 theme. May work better for presentations displayed with a projector.} \item{\code{theme_linedraw}}{ A theme with only black lines of various widths on white backgrounds, reminiscent of a line drawings. Serves a purpose similar to \code{theme_bw}. Note that this theme has some very thin lines (<< 1 pt) which some journals may refuse.} \item{\code{theme_light}}{ A theme similar to \code{theme_linedraw} but with light grey lines and axes, to direct more attention towards the data.} \item{\code{theme_dark}}{ The dark cousin of \code{theme_light}, with similar line sizes but a dark background. Useful to make thin coloured lines pop out.} \item{\code{theme_minimal}}{ A minimalistic theme with no background annotations.} \item{\code{theme_classic}}{ A classic-looking theme, with x and y axis lines and no gridlines.} \item{\code{theme_void}}{ A completely empty theme.} } } \examples{ p <- ggplot(mtcars) + geom_point(aes(x = wt, y = mpg, colour = factor(gear))) + facet_wrap(~am) p + theme_gray() # the default p + theme_bw() p + theme_linedraw() p + theme_light() p + theme_dark() p + theme_minimal() p + theme_classic() p + theme_void() } ggplot2/man/qplot.Rd0000644000177400001440000000546113031506205014224 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/quick-plot.r \name{qplot} \alias{qplot} \alias{quickplot} \title{Quick plot} \usage{ qplot(x, y = NULL, ..., data, facets = NULL, margins = FALSE, geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), log = "", main = NULL, xlab = deparse(substitute(x)), ylab = deparse(substitute(y)), asp = NA, stat = NULL, position = NULL) quickplot(x, y = NULL, ..., data, facets = NULL, margins = FALSE, geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), log = "", main = NULL, xlab = deparse(substitute(x)), ylab = deparse(substitute(y)), asp = NA, stat = NULL, position = NULL) } \arguments{ \item{x, y, ...}{Aesthetics passed into each layer} \item{data}{Data frame to use (optional). If not specified, will create one, extracting vectors from the current environment.} \item{facets}{faceting formula to use. Picks \code{\link{facet_wrap}} or \code{\link{facet_grid}} depending on whether the formula is one- or two-sided} \item{margins}{See \code{facet_grid}: display marginal facets?} \item{geom}{Character vector specifying geom(s) to draw. Defaults to "point" if x and y are specified, and "histogram" if only x is specified.} \item{xlim, ylim}{X and y axis limits} \item{log}{Which variables to log transform ("x", "y", or "xy")} \item{main, xlab, ylab}{Character vector (or expression) giving plot title, x axis label, and y axis label respectively.} \item{asp}{The y/x aspect ratio} \item{stat, position}{DEPRECATED.} } \description{ \code{qplot} is a shortcut designed to be familiar if you're used to base \code{\link{plot}()}. It's a convenient wrapper for creating a number of different types of plots using a consistent calling scheme. It's great for allowing you to produce plots quickly, but I highly recommend learning \code{\link{ggplot}()} as it makes it easier to create complex graphics. } \examples{ # Use data from data.frame qplot(mpg, wt, data = mtcars) qplot(mpg, wt, data = mtcars, colour = cyl) qplot(mpg, wt, data = mtcars, size = cyl) qplot(mpg, wt, data = mtcars, facets = vs ~ am) \donttest{ qplot(1:10, rnorm(10), colour = runif(10)) qplot(1:10, letters[1:10]) mod <- lm(mpg ~ wt, data = mtcars) qplot(resid(mod), fitted(mod)) f <- function() { a <- 1:10 b <- a ^ 2 qplot(a, b) } f() # To set aesthetics, wrap in I() qplot(mpg, wt, data = mtcars, colour = I("red")) # qplot will attempt to guess what geom you want depending on the input # both x and y supplied = scatterplot qplot(mpg, wt, data = mtcars) # just x supplied = histogram qplot(mpg, data = mtcars) # just y supplied = scatterplot, with x = seq_along(y) qplot(y = mpg, data = mtcars) # Use different geoms qplot(mpg, wt, data = mtcars, geom = "path") qplot(factor(cyl), wt, data = mtcars, geom = c("boxplot", "jitter")) qplot(mpg, data = mtcars, geom = "dotplot") } } ggplot2/man/coord_polar.Rd0000644000177400001440000000357013031506205015367 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-polar.r \name{coord_polar} \alias{coord_polar} \title{Polar coordinates} \usage{ coord_polar(theta = "x", start = 0, direction = 1) } \arguments{ \item{theta}{variable to map angle to (\code{x} or \code{y})} \item{start}{offset of starting point from 12 o'clock in radians} \item{direction}{1, clockwise; -1, anticlockwise} } \description{ The polar coordinate system is most commonly used for pie charts, which are a stacked bar chart in polar coordinates. } \examples{ # NOTE: Use these plots with caution - polar coordinates has # major perceptual problems. The main point of these examples is # to demonstrate how these common plots can be described in the # grammar. Use with EXTREME caution. #' # A pie chart = stacked bar chart + polar coordinates pie <- ggplot(mtcars, aes(x = factor(1), fill = factor(cyl))) + geom_bar(width = 1) pie + coord_polar(theta = "y") \donttest{ # A coxcomb plot = bar chart + polar coordinates cxc <- ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(width = 1, colour = "black") cxc + coord_polar() # A new type of plot? cxc + coord_polar(theta = "y") # The bullseye chart pie + coord_polar() # Hadley's favourite pie chart df <- data.frame( variable = c("does not resemble", "resembles"), value = c(20, 80) ) ggplot(df, aes(x = "", y = value, fill = variable)) + geom_col(width = 1) + scale_fill_manual(values = c("red", "yellow")) + coord_polar("y", start = pi / 3) + labs(title = "Pac man") # Windrose + doughnut plot if (require("ggplot2movies")) { movies$rrating <- cut_interval(movies$rating, length = 1) movies$budgetq <- cut_number(movies$budget, 4) doh <- ggplot(movies, aes(x = rrating, fill = budgetq)) # Wind rose doh + geom_bar(width = 1) + coord_polar() # Race track plot doh + geom_bar(width = 0.9, position = "fill") + coord_polar(theta = "y") } } } ggplot2/man/geom_dotplot.Rd0000644000177400001440000001610013031506205015551 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-dotplot.r \name{geom_dotplot} \alias{geom_dotplot} \title{Dot plot} \usage{ geom_dotplot(mapping = NULL, data = NULL, position = "identity", ..., binwidth = NULL, binaxis = "x", method = "dotdensity", binpositions = "bygroup", stackdir = "up", stackratio = 1, dotsize = 1, stackgroups = FALSE, origin = NULL, right = TRUE, width = 0.9, drop = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{binwidth}{When \code{method} is "dotdensity", this specifies maximum bin width. When \code{method} is "histodot", this specifies bin width. Defaults to 1/30 of the range of the data} \item{binaxis}{The axis to bin along, "x" (default) or "y"} \item{method}{"dotdensity" (default) for dot-density binning, or "histodot" for fixed bin widths (like stat_bin)} \item{binpositions}{When \code{method} is "dotdensity", "bygroup" (default) determines positions of the bins for each group separately. "all" determines positions of the bins with all the data taken together; this is used for aligning dot stacks across multiple groups.} \item{stackdir}{which direction to stack the dots. "up" (default), "down", "center", "centerwhole" (centered, but with dots aligned)} \item{stackratio}{how close to stack the dots. Default is 1, where dots just just touch. Use smaller values for closer, overlapping dots.} \item{dotsize}{The diameter of the dots relative to \code{binwidth}, default 1.} \item{stackgroups}{should dots be stacked across groups? This has the effect that \code{position = "stack"} should have, but can't (because this geom has some odd properties).} \item{origin}{When \code{method} is "histodot", origin of first bin} \item{right}{When \code{method} is "histodot", should intervals be closed on the right (a, b], or not [a, b)} \item{width}{When \code{binaxis} is "y", the spacing of the dot stacks for dodging.} \item{drop}{If TRUE, remove all bins with zero counts} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ In a dot plot, the width of a dot corresponds to the bin width (or maximum width, depending on the binning algorithm), and dots are stacked, with each dot representing one observation. } \details{ There are two basic approaches: \emph{dot-density} and \emph{histodot}. With dot-density binning, the bin positions are determined by the data and \code{binwidth}, which is the maximum width of each bin. See Wilkinson (1999) for details on the dot-density binning algorithm. With histodot binning, the bins have fixed positions and fixed widths, much like a histogram. When binning along the x axis and stacking along the y axis, the numbers on y axis are not meaningful, due to technical limitations of ggplot2. You can hide the y axis, as in one of the examples, or manually scale it to match the number of dots. } \section{Aesthetics}{ \aesthetics{geom}{dotplot} } \section{Computed variables}{ \describe{ \item{x}{center of each bin, if binaxis is "x"} \item{y}{center of each bin, if binaxis is "x"} \item{binwidth}{max width of each bin if method is "dotdensity"; width of each bin if method is "histodot"} \item{count}{number of points in bin} \item{ncount}{count, scaled to maximum of 1} \item{density}{density of points in bin, scaled to integrate to 1, if method is "histodot"} \item{ndensity}{density, scaled to maximum of 1, if method is "histodot"} } } \examples{ ggplot(mtcars, aes(x = mpg)) + geom_dotplot() ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5) # Use fixed-width bins ggplot(mtcars, aes(x = mpg)) + geom_dotplot(method="histodot", binwidth = 1.5) # Some other stacking methods ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, stackdir = "center") ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, stackdir = "centerwhole") # y axis isn't really meaningful, so hide it ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5) + scale_y_continuous(NULL, breaks = NULL) # Overlap dots vertically ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, stackratio = .7) # Expand dot diameter ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, dotsize = 1.25) \donttest{ # Examples with stacking along y axis instead of x ggplot(mtcars, aes(x = 1, y = mpg)) + geom_dotplot(binaxis = "y", stackdir = "center") ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + geom_dotplot(binaxis = "y", stackdir = "center") ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + geom_dotplot(binaxis = "y", stackdir = "centerwhole") ggplot(mtcars, aes(x = factor(vs), fill = factor(cyl), y = mpg)) + geom_dotplot(binaxis = "y", stackdir = "center", position = "dodge") # binpositions="all" ensures that the bins are aligned between groups ggplot(mtcars, aes(x = factor(am), y = mpg)) + geom_dotplot(binaxis = "y", stackdir = "center", binpositions="all") # Stacking multiple groups, with different fill ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_dotplot(stackgroups = TRUE, binwidth = 1, binpositions = "all") ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_dotplot(stackgroups = TRUE, binwidth = 1, method = "histodot") ggplot(mtcars, aes(x = 1, y = mpg, fill = factor(cyl))) + geom_dotplot(binaxis = "y", stackgroups = TRUE, binwidth = 1, method = "histodot") } } \references{ Wilkinson, L. (1999) Dot plots. The American Statistician, 53(3), 276-281. } ggplot2/man/gg-add.Rd0000644000177400001440000000305613031506205014206 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-construction.r \name{+.gg} \alias{+.gg} \alias{\%+\%} \title{Add components to a plot} \usage{ \method{+}{gg}(e1, e2) e1 \%+\% e2 } \arguments{ \item{e1}{An object of class \code{\link{ggplot}} or a \code{\link{theme}}.} \item{e2}{A plot component, as described below.} } \description{ \code{+} is the key to constructing sophisticated ggplot2 graphics. It allows you to start simple, then get more and more complex, checking your work at each step. } \section{What can you add?}{ You can add any of the following types of objects: \itemize{ \item A \code{\link{aes}()} objects replaces the default aesthetics. \item A layer created by a \code{geom_} or \code{stat_} function adds new layer. \item A \code{scale} overrides the existing scale. \item A \code{\link{theme}} modifies the current theme. \item A \code{coord} overrides current coordinate system. \item A \code{facet} specificatio override current faceting. } To replace the current default data frame, you must use \code{\%+\%}, due to S3 method precedence issues. You can also supply a list, in which case each element of the list will be added in turn. } \examples{ base <- ggplot(mpg, aes(displ, hwy)) + geom_point() base + geom_smooth() # To override the data, you must use \%+\% base \%+\% subset(mpg, fl == "p") # Alternatively, you can add multiple components with a list. # This can be useful to return from a function. base + list(subset(mpg, fl == "p"), geom_smooth()) } \seealso{ \code{\link{theme}} } ggplot2/man/should_stop.Rd0000644000177400001440000000065513031506205015430 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.r \name{should_stop} \alias{should_stop} \title{Used in examples to illustrate when errors should occur.} \usage{ should_stop(expr) } \arguments{ \item{expr}{code to evaluate.} } \description{ Used in examples to illustrate when errors should occur. } \examples{ should_stop(stop("Hi!")) should_stop(should_stop("Hi!")) } \keyword{internal} ggplot2/man/annotation_logticks.Rd0000644000177400001440000000663713031506205017144 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/annotation-logticks.r \name{annotation_logticks} \alias{annotation_logticks} \title{Annotation: log tick marks} \usage{ annotation_logticks(base = 10, sides = "bl", scaled = TRUE, short = unit(0.1, "cm"), mid = unit(0.2, "cm"), long = unit(0.3, "cm"), colour = "black", size = 0.5, linetype = 1, alpha = 1, color = NULL, ...) } \arguments{ \item{base}{the base of the log (default 10)} \item{sides}{a string that controls which sides of the plot the log ticks appear on. It can be set to a string containing any of \code{"trbl"}, for top, right, bottom, and left.} \item{scaled}{is the data already log-scaled? This should be \code{TRUE} (default) when the data is already transformed with \code{log10()} or when using \code{scale_y_log10}. It should be \code{FALSE} when using \code{coord_trans(y = "log10")}.} \item{short}{a \code{\link[grid]{unit}} object specifying the length of the short tick marks} \item{mid}{a \code{\link[grid]{unit}} object specifying the length of the middle tick marks. In base 10, these are the "5" ticks.} \item{long}{a \code{\link[grid]{unit}} object specifying the length of the long tick marks. In base 10, these are the "1" (or "10") ticks.} \item{colour}{Colour of the tick marks.} \item{size}{Thickness of tick marks, in mm.} \item{linetype}{Linetype of tick marks (\code{solid}, \code{dashed}, etc.)} \item{alpha}{The transparency of the tick marks.} \item{color}{An alias for \code{colour}.} \item{...}{Other parameters passed on to the layer} } \description{ This annotation adds log tick marks with diminishing spacing. These tick marks probably make sense only for base 10. } \examples{ # Make a log-log plot (without log ticks) a <- ggplot(msleep, aes(bodywt, brainwt)) + geom_point(na.rm = TRUE) + scale_x_log10( breaks = scales::trans_breaks("log10", function(x) 10^x), labels = scales::trans_format("log10", scales::math_format(10^.x)) ) + scale_y_log10( breaks = scales::trans_breaks("log10", function(x) 10^x), labels = scales::trans_format("log10", scales::math_format(10^.x)) ) + theme_bw() a + annotation_logticks() # Default: log ticks on bottom and left a + annotation_logticks(sides = "lr") # Log ticks for y, on left and right a + annotation_logticks(sides = "trbl") # All four sides # Hide the minor grid lines because they don't align with the ticks a + annotation_logticks(sides = "trbl") + theme(panel.grid.minor = element_blank()) # Another way to get the same results as 'a' above: log-transform the data before # plotting it. Also hide the minor grid lines. b <- ggplot(msleep, aes(log10(bodywt), log10(brainwt))) + geom_point(na.rm = TRUE) + scale_x_continuous(name = "body", labels = scales::math_format(10^.x)) + scale_y_continuous(name = "brain", labels = scales::math_format(10^.x)) + theme_bw() + theme(panel.grid.minor = element_blank()) b + annotation_logticks() # Using a coordinate transform requires scaled = FALSE t <- ggplot(msleep, aes(bodywt, brainwt)) + geom_point() + coord_trans(x = "log10", y = "log10") + theme_bw() t + annotation_logticks(scaled = FALSE) # Change the length of the ticks a + annotation_logticks( short = unit(.5,"mm"), mid = unit(3,"mm"), long = unit(4,"mm") ) } \seealso{ \code{\link{scale_y_continuous}}, \code{\link{scale_y_log10}} for log scale transformations. \code{\link{coord_trans}} for log coordinate transformations. } ggplot2/man/element.Rd0000644000177400001440000000700713031506205014514 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/margins.R, R/theme-elements.r \name{margin} \alias{margin} \alias{element_blank} \alias{element_rect} \alias{element_line} \alias{element_text} \alias{rel} \title{Theme elements} \usage{ margin(t = 0, r = 0, b = 0, l = 0, unit = "pt") element_blank() element_rect(fill = NULL, colour = NULL, size = NULL, linetype = NULL, color = NULL, inherit.blank = FALSE) element_line(colour = NULL, size = NULL, linetype = NULL, lineend = NULL, color = NULL, arrow = NULL, inherit.blank = FALSE) element_text(family = NULL, face = NULL, colour = NULL, size = NULL, hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL, color = NULL, margin = NULL, debug = NULL, inherit.blank = FALSE) rel(x) } \arguments{ \item{t, r, b, l}{Dimensions of each margin. (To remember order, think trouble).} \item{unit}{Default units of dimensions. Defaults to "pt" so it can be most easily scaled with the text.} \item{fill}{Fill colour.} \item{colour, color}{Line/border colour. Color is an alias for colour.} \item{size}{Line/border size in mm; text size in pts.} \item{linetype}{Line type. An integer (0:8), a name (blank, solid, dashed, dotted, dotdash, longdash, twodash), or a string with an even number (up to eight) of hexadecimal digits which give the lengths in consecutive positions in the string.} \item{inherit.blank}{Should this element inherit the existence of an \code{element_blank} among its parents? If \code{TRUE} the existence of a blank element among its parents will cause this element to be blank as well. If \code{FALSE} any blank parent element will be ignored when calculating final element state.} \item{lineend}{Line end Line end style (round, butt, square)} \item{arrow}{Arrow specification, as created by \code{\link[grid]{arrow}}} \item{family}{Font family} \item{face}{Font face ("plain", "italic", "bold", "bold.italic")} \item{hjust}{Horizontal justification (in [0, 1])} \item{vjust}{Vertical justification (in [0, 1])} \item{angle}{Angle (in [0, 360])} \item{lineheight}{Line height} \item{margin}{Margins around the text. See \code{\link{margin}} for more details. When creating a theme, the margins should be placed on the side of the text facing towards the center of the plot.} \item{debug}{If \code{TRUE}, aids visual debugging by drawing a solid rectangle behind the complete text area, and a point where each label is anchored.} \item{x}{A single number specifying size relative to parent element.} } \value{ An S3 object of class \code{element}, \code{rel}, or \code{margin}. } \description{ In conjunction with the \link{theme} system, the \code{element_} functions specify the display of how non-data components of the plot are a drawn. \itemize{ \item \code{element_blank}: draws nothing, and assigns no space. \item \code{element_rect}: borders and backgrounds. \item \code{element_line}: lines. \item \code{element_text}: text. } \code{rel()} is used to specify sizes relative to the parent, \code{margins()} is used to specify the margins of elements. } \examples{ plot <- ggplot(mpg, aes(displ, hwy)) + geom_point() plot + theme( panel.background = element_blank(), axis.text = element_blank() ) plot + theme( axis.text = element_text(colour = "red", size = rel(1.5)) ) plot + theme( axis.line = element_line(arrow = arrow()) ) plot + theme( panel.background = element_rect(fill = "white"), plot.margin = margin(2, 2, 2, 2, "cm"), plot.background = element_rect( fill = "grey90", colour = "black", size = 1 ) ) } ggplot2/man/geom_tile.Rd0000644000177400001440000001175213031506205015031 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-raster.r, R/geom-rect.r, R/geom-tile.r \name{geom_raster} \alias{geom_raster} \alias{geom_rect} \alias{geom_tile} \title{Rectangles} \usage{ geom_raster(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., hjust = 0.5, vjust = 0.5, interpolate = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_rect(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_tile(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{hjust, vjust}{horizontal and vertical justification of the grob. Each justification value should be a number between 0 and 1. Defaults to 0.5 for both, centering each pixel over its data location.} \item{interpolate}{If \code{TRUE} interpolate linearly, if \code{FALSE} (the default) don't interpolate.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ \code{geom_rect} and \code{geom_tile} do the same thing, but are parameterised differently: \code{geom_rect} uses the locations of the four corners (\code{xmin}, \code{xmax}, \code{ymin} and \code{ymax}), while \code{geom_tile} uses the center of the tile and its size (\code{x}, \code{y}, \code{width}, \code{height}). \code{geom_raster} is a high performance special case for when all the tiles are the same size. } \section{Aesthetics}{ \aesthetics{geom}{tile} } \examples{ # The most common use for rectangles is to draw a surface. You always want # to use geom_raster here because it's so much faster, and produces # smaller output when saving to PDF ggplot(faithfuld, aes(waiting, eruptions)) + geom_raster(aes(fill = density)) # Interpolation smooths the surface & is most helpful when rendering images. ggplot(faithfuld, aes(waiting, eruptions)) + geom_raster(aes(fill = density), interpolate = TRUE) # If you want to draw arbitrary rectangles, use geom_tile() or geom_rect() df <- data.frame( x = rep(c(2, 5, 7, 9, 12), 2), y = rep(c(1, 2), each = 5), z = factor(rep(1:5, each = 2)), w = rep(diff(c(0, 4, 6, 8, 10, 14)), 2) ) ggplot(df, aes(x, y)) + geom_tile(aes(fill = z)) ggplot(df, aes(x, y)) + geom_tile(aes(fill = z, width = w), colour = "grey50") ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) + geom_rect(aes(fill = z, width = w), colour = "grey50") \donttest{ # Justification controls where the cells are anchored df <- expand.grid(x = 0:5, y = 0:5) df$z <- runif(nrow(df)) # default is compatible with geom_tile() ggplot(df, aes(x, y, fill = z)) + geom_raster() # zero padding ggplot(df, aes(x, y, fill = z)) + geom_raster(hjust = 0, vjust = 0) # Inspired by the image-density plots of Ken Knoblauch cars <- ggplot(mtcars, aes(mpg, factor(cyl))) cars + geom_point() cars + stat_bin2d(aes(fill = ..count..), binwidth = c(3,1)) cars + stat_bin2d(aes(fill = ..density..), binwidth = c(3,1)) cars + stat_density(aes(fill = ..density..), geom = "raster", position = "identity") cars + stat_density(aes(fill = ..count..), geom = "raster", position = "identity") } } ggplot2/man/scale_identity.Rd0000644000177400001440000000371713031506205016067 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-identity.r, R/zxx.r \name{scale_identity} \alias{scale_colour_identity} \alias{scale_fill_identity} \alias{scale_shape_identity} \alias{scale_linetype_identity} \alias{scale_alpha_identity} \alias{scale_size_identity} \alias{scale_color_identity} \title{Use values without scaling} \usage{ scale_colour_identity(..., guide = "none") scale_fill_identity(..., guide = "none") scale_shape_identity(..., guide = "none") scale_linetype_identity(..., guide = "none") scale_alpha_identity(..., guide = "none") scale_size_identity(..., guide = "none") } \arguments{ \item{...}{Other arguments passed on to \code{\link{discrete_scale}} or \code{\link{continuous_scale}}} \item{guide}{Guide to use for this scale. Defaults to \code{"none"}.} } \description{ Use this set of scales when your data has already been scaled, i.e. it already represents aesthetic values that ggplot2 can handle directly This will not produce a legend unless you also supply the \code{breaks} and \code{labels}. } \examples{ ggplot(luv_colours, aes(u, v)) + geom_point(aes(colour = col), size = 3) + scale_color_identity() + coord_equal() df <- data.frame( x = 1:4, y = 1:4, colour = c("red", "green", "blue", "yellow") ) ggplot(df, aes(x, y)) + geom_tile(aes(fill = colour)) ggplot(df, aes(x, y)) + geom_tile(aes(fill = colour)) + scale_fill_identity() # To get a legend guide, specify guide = "legend" ggplot(df, aes(x, y)) + geom_tile(aes(fill = colour)) + scale_fill_identity(guide = "legend") # But you'll typically also need to supply breaks and labels: ggplot(df, aes(x, y)) + geom_tile(aes(fill = colour)) + scale_fill_identity("trt", labels = letters[1:4], breaks = df$colour, guide = "legend") # cyl scaled to appropriate size ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(size = cyl)) # cyl used as point size ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(size = cyl)) + scale_size_identity() } ggplot2/man/max_height.Rd0000644000177400001440000000066013031506205015176 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-.r \name{max_height} \alias{max_height} \alias{max_width} \title{Get the maximal width/length of a list of grobs} \usage{ max_height(grobs) max_width(grobs) } \arguments{ \item{grobs}{A list of grobs} } \value{ The largest value. measured in cm as a unit object } \description{ Get the maximal width/length of a list of grobs } \keyword{internal} ggplot2/man/midwest.Rd0000644000177400001440000000227013031506205014534 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{midwest} \alias{midwest} \title{Midwest demographics} \format{A data frame with 437 rows and 28 variables \describe{ \item{PID}{} \item{county}{} \item{state}{} \item{area}{} \item{poptotal}{Total population} \item{popdensity}{Population density} \item{popwhite}{Number of whites.} \item{popblack}{Number of blacks.} \item{popamerindian}{Number of American Indians.} \item{popasian}{Number of Asians.} \item{popother}{Number of other races.} \item{percwhite}{Percent white.} \item{percblack}{Percent black.} \item{percamerindan}{Percent American Indian.} \item{percasian}{Percent Asian.} \item{percother}{Percent other races.} \item{popadults}{Number of adults.} \item{perchsd}{} \item{percollege}{Percent college educated.} \item{percprof}{Percent profession.} \item{poppovertyknown}{} \item{percpovertyknown}{} \item{percbelowpoverty}{} \item{percchildbelowpovert}{} \item{percadultpoverty}{} \item{percelderlypoverty}{} \item{inmetro}{In a metro area.} \item{category}{} }} \usage{ midwest } \description{ Demographic information of midwest counties } \keyword{datasets} ggplot2/man/facet_null.Rd0000644000177400001440000000116113031506205015172 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-null.r \name{facet_null} \alias{facet_null} \title{Facet specification: a single panel.} \usage{ facet_null(shrink = TRUE) } \arguments{ \item{shrink}{If \code{TRUE}, will shrink scales to fit output of statistics, not raw data. If \code{FALSE}, will be range of raw data before statistical summary.} } \description{ Facet specification: a single panel. } \examples{ # facet_null is the default facetting specification if you # don't override it with facet_grid or facet_wrap ggplot(mtcars, aes(mpg, wt)) + geom_point() } \keyword{internal} ggplot2/man/aes_auto.Rd0000644000177400001440000000056413031506205014664 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes.r \name{aes_auto} \alias{aes_auto} \title{Automatic aesthetic mapping} \usage{ aes_auto(data = NULL, ...) } \arguments{ \item{data}{data.frame or names of variables} \item{...}{aesthetics that need to be explicitly mapped.} } \description{ Automatic aesthetic mapping } \keyword{internal} ggplot2/man/map_data.Rd0000644000177400001440000000304413031506205014626 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-map.r \name{map_data} \alias{map_data} \title{Create a data frame of map data} \usage{ map_data(map, region = ".", exact = FALSE, ...) } \arguments{ \item{map}{name of map provided by the \pkg{maps} package. These include \code{\link[maps]{county}}, \code{\link[maps]{france}}, \code{\link[maps]{italy}}, \code{\link[maps]{nz}}, \code{\link[maps]{state}}, \code{\link[maps]{usa}}, \code{\link[maps]{world}}, \code{\link[maps]{world2}}.} \item{region}{name of subregions to include. Defaults to \code{.} which includes all subregion. See documentation for \code{\link[maps]{map}} for more details.} \item{exact}{should the \code{region} be treated as a regular expression (\code{FALSE}) or as a fixed string (\code{TRUE}).} \item{...}{all other arguments passed on to \code{\link[maps]{map}}} } \description{ Easily turn data from the \pkg{maps} package in to a data frame suitable for plotting with ggplot2. } \examples{ if (require("maps")) { states <- map_data("state") arrests <- USArrests names(arrests) <- tolower(names(arrests)) arrests$region <- tolower(rownames(USArrests)) choro <- merge(states, arrests, sort = FALSE, by = "region") choro <- choro[order(choro$order), ] ggplot(choro, aes(long, lat)) + geom_polygon(aes(group = group, fill = assault)) + coord_map("albers", at0 = 45.5, lat1 = 29.5) ggplot(choro, aes(long, lat)) + geom_polygon(aes(group = group, fill = assault / murder)) + coord_map("albers", at0 = 45.5, lat1 = 29.5) } } \keyword{internal} ggplot2/man/diamonds.Rd0000644000177400001440000000200413031506205014651 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{diamonds} \alias{diamonds} \title{Prices of 50,000 round cut diamonds} \format{A data frame with 53940 rows and 10 variables: \describe{ \item{price}{price in US dollars (\$326--\$18,823)} \item{carat}{weight of the diamond (0.2--5.01)} \item{cut}{quality of the cut (Fair, Good, Very Good, Premium, Ideal)} \item{color}{diamond colour, from J (worst) to D (best)} \item{clarity}{a measurement of how clear the diamond is (I1 (worst), SI1, SI2, VS1, VS2, VVS1, VVS2, IF (best))} \item{x}{length in mm (0--10.74)} \item{y}{width in mm (0--58.9)} \item{z}{depth in mm (0--31.8)} \item{depth}{total depth percentage = z / mean(x, y) = 2 * z / (x + y) (43--79)} \item{table}{width of top of diamond relative to widest point (43--95)} }} \usage{ diamonds } \description{ A dataset containing the prices and other attributes of almost 54,000 diamonds. The variables are as follows: } \keyword{datasets} ggplot2/man/translate_qplot_lattice.Rd0000644000177400001440000000546313031506206020011 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/translate-qplot-lattice.r \name{translate_qplot_lattice} \alias{translate_qplot_lattice} \title{Translating between qplot and lattice} \description{ The major difference between lattice and ggplot2 is that lattice uses a formula based interface. ggplot2 does not because the formula does not generalise well to more complicated situations. } \examples{ \donttest{ library(lattice) if (require("ggplot2movies")) { xyplot(rating ~ year, data=movies) qplot(year, rating, data=movies) xyplot(rating ~ year | Comedy + Action, data = movies) qplot(year, rating, data = movies, facets = ~ Comedy + Action) # Or maybe qplot(year, rating, data = movies, facets = Comedy ~ Action) # While lattice has many different functions to produce different types of # graphics (which are all basically equivalent to setting the panel argument), # ggplot2 has qplot(). stripplot(~ rating, data = movies, jitter.data = TRUE) qplot(rating, 1, data = movies, geom = "jitter") histogram(~ rating, data = movies) qplot(rating, data = movies, geom = "histogram") bwplot(Comedy ~ rating ,data = movies) qplot(factor(Comedy), rating, data = movies, geom = "boxplot") xyplot(wt ~ mpg, mtcars, type = c("p","smooth")) qplot(mpg, wt, data = mtcars, geom = c("point","smooth")) } # The capabilities for scale manipulations are similar in both ggplot2 and # lattice, although the syntax is a little different. xyplot(wt ~ mpg | cyl, mtcars, scales = list(y = list(relation = "free"))) qplot(mpg, wt, data = mtcars) + facet_wrap(~ cyl, scales = "free") xyplot(wt ~ mpg | cyl, mtcars, scales = list(log = 10)) qplot(mpg, wt, data = mtcars, log = "xy") xyplot(wt ~ mpg | cyl, mtcars, scales = list(log = 2)) qplot(mpg, wt, data = mtcars) + scale_x_continuous(trans = scales::log2_trans()) + scale_y_continuous(trans = scales::log2_trans()) xyplot(wt ~ mpg, mtcars, group = cyl, auto.key = TRUE) # Map directly to an aesthetic like colour, size, or shape. qplot(mpg, wt, data = mtcars, colour = cyl) xyplot(wt ~ mpg, mtcars, xlim = c(20,30)) # Works like lattice, except you can't specify a different limit # for each panel/facet qplot(mpg, wt, data = mtcars, xlim = c(20,30)) # Both lattice and ggplot2 have similar options for controlling labels on the plot. xyplot(wt ~ mpg, mtcars, xlab = "Miles per gallon", ylab = "Weight", main = "Weight-efficiency tradeoff") qplot(mpg, wt, data = mtcars, xlab = "Miles per gallon", ylab = "Weight", main = "Weight-efficiency tradeoff") xyplot(wt ~ mpg, mtcars, aspect = 1) qplot(mpg, wt, data = mtcars, asp = 1) # par.settings() is equivalent to + theme() and trellis.options.set() # and trellis.par.get() to theme_set() and theme_get(). # More complicated lattice formulas are equivalent to rearranging the data # before using ggplot2. } } \keyword{internal} ggplot2/man/geom_density_2d.Rd0000644000177400001440000001025213031506205016132 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-density2d.r, R/stat-density-2d.r \name{geom_density_2d} \alias{geom_density_2d} \alias{geom_density2d} \alias{stat_density_2d} \alias{stat_density2d} \title{Contours of a 2d density estimate} \usage{ geom_density_2d(mapping = NULL, data = NULL, stat = "density2d", position = "identity", ..., lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_density_2d(mapping = NULL, data = NULL, geom = "density_2d", position = "identity", ..., contour = TRUE, n = 100, h = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{lineend}{Line end style (round, butt, square)} \item{linejoin}{Line join style (round, mitre, bevel)} \item{linemitre}{Line mitre limit (number greater than 1)} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom, stat}{Use to override the default connection between \code{geom_density_2d} and \code{stat_density_2d}.} \item{contour}{If \code{TRUE}, contour the results of the 2d density estimation} \item{n}{number of grid points in each direction} \item{h}{Bandwidth (vector of length two). If \code{NULL}, estimated using \code{\link[MASS]{bandwidth.nrd}}.} } \description{ Perform a 2D kernel density estimation using \code{\link[MASS]{kde2d}} and display the results with contours. This can be useful for dealing with overplotting. This is a 2d version of \code{\link{geom_density}}. } \section{Aesthetics}{ \aesthetics{geom}{density_2d} } \section{Computed variables}{ Same as \code{\link{stat_contour}} } \examples{ m <- ggplot(faithful, aes(x = eruptions, y = waiting)) + geom_point() + xlim(0.5, 6) + ylim(40, 110) m + geom_density_2d() \donttest{ m + stat_density_2d(aes(fill = ..level..), geom = "polygon") set.seed(4393) dsmall <- diamonds[sample(nrow(diamonds), 1000), ] d <- ggplot(dsmall, aes(x, y)) # If you map an aesthetic to a categorical variable, you will get a # set of contours for each value of that variable d + geom_density_2d(aes(colour = cut)) # If we turn contouring off, we can use use geoms like tiles: d + stat_density_2d(geom = "raster", aes(fill = ..density..), contour = FALSE) # Or points: d + stat_density_2d(geom = "point", aes(size = ..density..), n = 20, contour = FALSE) } } \seealso{ \code{\link{geom_contour}} for information about how contours are drawn; \code{\link{geom_bin2d}} for another way of dealing with overplotting. } ggplot2/man/update_labels.Rd0000644000177400001440000000111213031506205015656 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/labels.r \name{update_labels} \alias{update_labels} \title{Update axis/legend labels} \usage{ update_labels(p, labels) } \arguments{ \item{p}{plot to modify} \item{labels}{named list of new labels} } \description{ Update axis/legend labels } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() update_labels(p, list(x = "New x")) update_labels(p, list(x = expression(x / y ^ 2))) update_labels(p, list(x = "New x", y = "New Y")) update_labels(p, list(colour = "Fail silently")) } \keyword{internal} ggplot2/man/absoluteGrob.Rd0000644000177400001440000000056213031506205015512 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/grob-absolute.r \name{absoluteGrob} \alias{absoluteGrob} \title{Absolute grob} \usage{ absoluteGrob(grob, width = NULL, height = NULL, xmin = NULL, ymin = NULL, vp = NULL) } \description{ This grob has fixed dimensions and position. } \details{ It's still experimental } \keyword{internal} ggplot2/man/annotation_custom.Rd0000644000177400001440000000314413031506205016625 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/annotation-custom.r \name{annotation_custom} \alias{annotation_custom} \title{Annotation: Custom grob} \usage{ annotation_custom(grob, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf) } \arguments{ \item{grob}{grob to display} \item{xmin, xmax}{x location (in data coordinates) giving horizontal location of raster} \item{ymin, ymax}{y location (in data coordinates) giving vertical location of raster} } \description{ This is a special geom intended for use as static annotations that are the same in every panel. These annotations will not affect scales (i.e. the x and y axes will not grow to cover the range of the grob, and the grob will not be modified by any ggplot settings or mappings). } \details{ Most useful for adding tables, inset plots, and other grid-based decorations. } \note{ \code{annotation_custom} expects the grob to fill the entire viewport defined by xmin, xmax, ymin, ymax. Grobs with a different (absolute) size will be center-justified in that region. Inf values can be used to fill the full plot panel (see examples). } \examples{ # Dummy plot df <- data.frame(x = 1:10, y = 1:10) base <- ggplot(df, aes(x, y)) + geom_blank() + theme_bw() # Full panel annotation base + annotation_custom( grob = grid::roundrectGrob(), xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf ) # Inset plot df2 <- data.frame(x = 1 , y = 1) g <- ggplotGrob(ggplot(df2, aes(x, y)) + geom_point() + theme(plot.background = element_rect(colour = "black"))) base + annotation_custom(grob = g, xmin = 1, xmax = 10, ymin = 8, ymax = 10) } ggplot2/man/faithfuld.Rd0000644000177400001440000000060113031506205015022 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{faithfuld} \alias{faithfuld} \title{2d density estimate of Old Faithful data} \format{A data frame with 5,625 observations and 3 variables.} \usage{ faithfuld } \description{ A 2d density estimate of the waiting and eruptions variables data \link{faithful}. } \keyword{datasets} ggplot2/man/aes_position.Rd0000644000177400001440000000312313031506205015552 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes-position.r \name{aes_position} \alias{aes_position} \alias{x} \alias{y} \alias{xmin} \alias{xmax} \alias{ymin} \alias{ymax} \alias{xend} \alias{yend} \title{Position related aesthetics: x, y, xmin, xmax, ymin, ymax, xend, yend} \description{ This page demonstrates the usage of a sub-group of aesthetics; x, y, xmin, xmax, ymin, ymax, xend, and yend. } \examples{ # Generate data: means and standard errors of means for prices # for each type of cut dmod <- lm(price ~ cut, data = diamonds) cuts <- data.frame(cut = unique(diamonds$cut), predict(dmod, data.frame(cut = unique(diamonds$cut)), se = TRUE)[c("fit", "se.fit")]) se <- ggplot(cuts, aes(x = cut, y = fit, ymin = fit - se.fit, ymax = fit + se.fit, colour = cut)) se + geom_pointrange() # Using annotate p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() p + annotate("rect", xmin = 2, xmax = 3.5, ymin = 2, ymax = 25, fill = "dark grey", alpha = .5) # Geom_segment examples p + geom_segment(aes(x = 2, y = 15, xend = 2, yend = 25), arrow = arrow(length = unit(0.5, "cm"))) p + geom_segment(aes(x = 2, y = 15, xend = 3, yend = 15), arrow = arrow(length = unit(0.5, "cm"))) p + geom_segment(aes(x = 5, y = 30, xend = 3.5, yend = 25), arrow = arrow(length = unit(0.5, "cm"))) # You can also use geom_segment to recreate plot(type = "h") : counts <- as.data.frame(table(x = rpois(100, 5))) counts$x <- as.numeric(as.character(counts$x)) with(counts, plot(x, Freq, type = "h", lwd = 10)) ggplot(counts, aes(x, Freq)) + geom_segment(aes(yend = 0, xend = x), size = 10) } ggplot2/man/theme_get.Rd0000644000177400001440000000511213031506205015017 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-current.R \name{theme_get} \alias{theme_get} \alias{theme_set} \alias{theme_update} \alias{theme_replace} \alias{\%+replace\%} \title{Get, set, and modify the active theme} \usage{ theme_get() theme_set(new) theme_update(...) theme_replace(...) e1 \%+replace\% e2 } \arguments{ \item{new}{new theme (a list of theme elements)} \item{...}{named list of theme settings} \item{e1, e2}{Theme and element to combine} } \value{ \code{theme_set}, \code{theme_update}, and \code{theme_replace} invisibly return the previous theme so you can easily save it, then later restore it. } \description{ The current/active theme is automatically applied to every plot you draw. Use \code{theme_get} to get the current theme, and \code{theme_set} to completely override it. \code{theme_update} and \code{theme_replace} are shorthands for changing individual elements. } \section{Adding on to a theme}{ \code{+} and \code{\%+replace\%} can be used to modify elements in themes. \code{+} updates the elements of e1 that differ from elements specified (not NULL) in e2. Thus this operator can be used to incrementally add or modify attributes of a ggplot theme. In contrast, \code{\%+replace\%} replaces the entire element; any element of a theme not specified in e2 will not be present in the resulting theme (i.e. NULL). Thus this operator can be used to overwrite an entire theme. \code{theme_update} uses the \code{+} operator, so that any unspecified values in the theme element will default to the values they are set in the theme. \code{theme_replace} uses \code{\%+replace\%} tocompletely replace the element, so any unspecified values will overwrite the current value in the theme with \code{NULL}s. } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() p # Use theme_set() to completely override the current theme. # Here we have the old theme so we can later restore it. # Note that the theme is applied when the plot is drawn, not # when it is created. old <- theme_set(theme_bw()) p theme_set(old) p # Modifying theme objects ----------------------------------------- # You can use + and \%+replace\% to modify a theme object. # They differ in how they deal with missing arguments in # the theme elements. add_el <- theme_grey() + theme(text = element_text(family = "Times")) add_el$text rep_el <- theme_grey() \%+replace\% theme(text = element_text(family = "Times")) rep_el$text # theme_update() and theme_replace() are similar except they # apply directly to the current/active theme. } \seealso{ \code{\link{+.gg}} } ggplot2/man/geom_jitter.Rd0000644000177400001440000001012413031506205015365 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-jitter.r \name{geom_jitter} \alias{geom_jitter} \title{Jittered points} \usage{ geom_jitter(mapping = NULL, data = NULL, stat = "identity", position = "jitter", ..., width = NULL, height = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{width}{Amount of vertical and horizontal jitter. The jitter is added in both positive and negative directions, so the total spread is twice the value specified here. If omitted, defaults to 40\% of the resolution of the data: this means the jitter values will occupy 80\% of the implied bins. Categorical data is aligned on the integers, so a width or height of 0.5 will spread the data so it's not possible to see the distinction between the categories.} \item{height}{Amount of vertical and horizontal jitter. The jitter is added in both positive and negative directions, so the total spread is twice the value specified here. If omitted, defaults to 40\% of the resolution of the data: this means the jitter values will occupy 80\% of the implied bins. Categorical data is aligned on the integers, so a width or height of 0.5 will spread the data so it's not possible to see the distinction between the categories.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ The jitter geom is a convenient shortcut for \code{geom_point(position = "jitter")}. It adds a small amount of random variation to the location of each point, and is a useful way of handling overplotting caused by discreteness in smaller datasets. } \section{Aesthetics}{ \aesthetics{geom}{point} } \examples{ p <- ggplot(mpg, aes(cyl, hwy)) p + geom_point() p + geom_jitter() # Add aesthetic mappings p + geom_jitter(aes(colour = class)) # Use smaller width/height to emphasise categories ggplot(mpg, aes(cyl, hwy)) + geom_jitter() ggplot(mpg, aes(cyl, hwy)) + geom_jitter(width = 0.25) # Use larger width/height to completely smooth away discreteness ggplot(mpg, aes(cty, hwy)) + geom_jitter() ggplot(mpg, aes(cty, hwy)) + geom_jitter(width = 0.5, height = 0.5) } \seealso{ \code{\link{geom_point}} for regular, unjittered points, \code{\link{geom_boxplot}} for another way of looking at the conditional distribution of a variable } ggplot2/man/guides.Rd0000644000177400001440000000361513031506205014344 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/guides-.r \name{guides} \alias{guides} \title{Set guides for each scale} \usage{ guides(...) } \arguments{ \item{...}{List of scale name-guide pairs. The guide can either be a string (i.e. "colorbar" or "legend"), or a call to a guide function (i.e. \code{\link{guide_colourbar}} or \code{\link{guide_legend}}) specifying additional arguments.} } \value{ A list containing the mapping between scale and guide. } \description{ Guides for each scale can be set scale-by-scale with the \code{guide} argument, or en masse with \code{guides()}. } \examples{ \donttest{ # ggplot object dat <- data.frame(x = 1:5, y = 1:5, p = 1:5, q = factor(1:5), r = factor(1:5)) p <- ggplot(dat, aes(x, y, colour = p, size = q, shape = r)) + geom_point() # without guide specification p # Show colorbar guide for colour. # All these examples below have a same effect. p + guides(colour = "colorbar", size = "legend", shape = "legend") p + guides(colour = guide_colorbar(), size = guide_legend(), shape = guide_legend()) p + scale_colour_continuous(guide = "colorbar") + scale_size_discrete(guide = "legend") + scale_shape(guide = "legend") # Remove some guides p + guides(colour = "none") p + guides(colour = "colorbar",size = "none") # Guides are integrated where possible p + guides(colour = guide_legend("title"), size = guide_legend("title"), shape = guide_legend("title")) # same as g <- guide_legend("title") p + guides(colour = g, size = g, shape = g) p + theme(legend.position = "bottom") # position of guides # Set order for multiple guides ggplot(mpg, aes(displ, cty)) + geom_point(aes(size = hwy, colour = cyl, shape = drv)) + guides( colour = guide_colourbar(order = 1), shape = guide_legend(order = 2), size = guide_legend(order = 3) ) } } \seealso{ Other guides: \code{\link{guide_colourbar}}, \code{\link{guide_legend}} } ggplot2/man/luv_colours.Rd0000644000177400001440000000067413031506205015442 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{luv_colours} \alias{luv_colours} \title{\code{colors()} in Luv space} \format{A data frame with 657 observations and 4 variables: \describe{ \item{L,u,v}{Position in Luv colour space} \item{col}{Colour name} }} \usage{ luv_colours } \description{ All built-in \code{\link{colors}()} translated into Luv colour space. } \keyword{datasets} ggplot2/man/labellers.Rd0000644000177400001440000001034713031506205015031 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/labeller.r \name{labellers} \alias{labellers} \alias{label_value} \alias{label_both} \alias{label_context} \alias{label_parsed} \alias{label_wrap_gen} \title{Useful labeller functions} \usage{ label_value(labels, multi_line = TRUE) label_both(labels, multi_line = TRUE, sep = ": ") label_context(labels, multi_line = TRUE, sep = ": ") label_parsed(labels, multi_line = TRUE) label_wrap_gen(width = 25, multi_line = TRUE) } \arguments{ \item{labels}{Data frame of labels. Usually contains only one element, but facetting over multiple factors entails multiple label variables.} \item{multi_line}{Whether to display the labels of multiple factors on separate lines.} \item{sep}{String separating variables and values.} \item{width}{Maximum number of characters before wrapping the strip.} } \description{ Labeller functions are in charge of formatting the strip labels of facet grids and wraps. Most of them accept a \code{multi_line} argument to control whether multiple factors (defined in formulae such as \code{~first + second}) should be displayed on a single line separated with commas, or each on their own line. } \details{ \code{label_value()} only displays the value of a factor while \code{label_both()} displays both the variable name and the factor value. \code{label_context()} is context-dependent and uses \code{label_value()} for single factor facetting and \code{label_both()} when multiple factors are involved. \code{label_wrap_gen()} uses \code{\link[base]{strwrap}()} for line wrapping. \code{label_parsed()} interprets the labels as plotmath expressions. \code{\link{label_bquote}()} offers a more flexible way of constructing plotmath expressions. See examples and \code{\link{bquote}()} for details on the syntax of the argument. } \section{Writing New Labeller Functions}{ Note that an easy way to write a labeller function is to transform a function operating on character vectors with \code{\link{as_labeller}()}. A labeller function accepts a data frame of labels (character vectors) containing one column for each factor. Multiple factors occur with formula of the type \code{~first + second}. The return value must be a rectangular list where each 'row' characterises a single facet. The list elements can be either character vectors or lists of plotmath expressions. When multiple elements are returned, they get displayed on their own new lines (i.e., each facet gets a multi-line strip of labels). To illustrate, let's say your labeller returns a list of two character vectors of length 3. This is a rectangular list because all elements have the same length. The first facet will get the first elements of each vector and display each of them on their own line. Then the second facet gets the second elements of each vector, and so on. If it's useful to your labeller, you can retrieve the \code{type} attribute of the incoming data frame of labels. The value of this attribute reflects the kind of strips your labeller is dealing with: \code{"cols"} for columns and \code{"rows"} for rows. Note that \code{\link{facet_wrap}()} has columns by default and rows when the strips are switched with the \code{switch} option. The \code{facet} attribute also provides metadata on the labels. It takes the values \code{"grid"} or \code{"wrap"}. For compatibility with \code{\link{labeller}()}, each labeller function must have the \code{labeller} S3 class. } \examples{ mtcars$cyl2 <- factor(mtcars$cyl, labels = c("alpha", "beta", "gamma")) p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() # Displaying only the values p + facet_grid(. ~ cyl) p + facet_grid(. ~ cyl, labeller = label_value) \donttest{ # Displaying both the values and the variables p + facet_grid(. ~ cyl, labeller = label_both) # Displaying only the values or both the values and variables # depending on whether multiple factors are facetted over p + facet_grid(am ~ vs+cyl, labeller = label_context) # Interpreting the labels as plotmath expressions p + facet_grid(. ~ cyl2) p + facet_grid(. ~ cyl2, labeller = label_parsed) p + facet_wrap(~vs + cyl2, labeller = label_parsed) } } \seealso{ \code{\link{labeller}()}, \code{\link{as_labeller}()}, \code{\link{label_bquote}()} } ggplot2/man/geom_smooth.Rd0000644000177400001440000001502513031506205015402 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-smooth.r, R/stat-smooth.r \name{geom_smooth} \alias{geom_smooth} \alias{stat_smooth} \title{Smoothed conditional means} \usage{ geom_smooth(mapping = NULL, data = NULL, stat = "smooth", position = "identity", ..., method = "auto", formula = y ~ x, se = TRUE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_smooth(mapping = NULL, data = NULL, geom = "smooth", position = "identity", ..., method = "auto", formula = y ~ x, se = TRUE, n = 80, span = 0.75, fullrange = FALSE, level = 0.95, method.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{method}{smoothing method (function) to use, eg. "lm", "glm", "gam", "loess", "rlm". For \code{method = "auto"} the smoothing method is chosen based on the size of the largest group (across all panels). \code{\link{loess}} is used for than 1,000 observations; otherwise \code{\link[mgcv]{gam}} is used with \code{formula = y ~ s(x, bs = "cs")}. Somewhat anecdotally, \code{loess} gives a better appearance, but is O(n^2) in memory, so does not work for larger datasets.} \item{formula}{formula to use in smoothing function, eg. \code{y ~ x}, \code{y ~ poly(x, 2)}, \code{y ~ log(x)}} \item{se}{display confidence interval around smooth? (TRUE by default, see level to control} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom, stat}{Use to override the default connection between \code{geom_smooth} and \code{stat_smooth}.} \item{n}{number of points to evaluate smoother at} \item{span}{Controls the amount of smoothing for the default loess smoother. Smaller numbers produce wigglier lines, larger numbers produce smoother lines.} \item{fullrange}{should the fit span the full range of the plot, or just the data} \item{level}{level of confidence interval to use (0.95 by default)} \item{method.args}{List of additional arguments passed on to the modelling function defined by \code{method}.} } \description{ Aids the eye in seeing patterns in the presence of overplotting. \code{geom_smooth} and \code{stat_smooth} are effectively aliases: they both use the same arguments. Use \code{geom_smooth} unless you want to display the results with a non-standard geom. } \details{ Calculation is performed by the (currently undocumented) \code{predictdf} generic and its methods. For most methods the standard error bounds are computed using the \code{\link{predict}} method - the exceptions are \code{loess} which uses a t-based approximation, and \code{glm} where the normal confidence interval is constructed on the link scale, and then back-transformed to the response scale. } \section{Aesthetics}{ \aesthetics{geom}{smooth} } \section{Computed variables}{ \describe{ \item{y}{predicted value} \item{ymin}{lower pointwise confidence interval around the mean} \item{ymax}{upper pointwise confidence interval around the mean} \item{se}{standard error} } } \examples{ ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_smooth() # Use span to control the "wiggliness" of the default loess smoother # The span is the fraction of points used to fit each local regression: # small numbers make a wigglier curve, larger numbers make a smoother curve. ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_smooth(span = 0.3) # Instead of a loess smooth, you can use any other modelling function: ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_smooth(method = "lm", se = FALSE) ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_smooth(method = "lm", formula = y ~ splines::bs(x, 3), se = FALSE) # Smoothes are automatically fit to each group (defined by categorical # aesthetics or the group aesthetic) and for each facet ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point() + geom_smooth(se = FALSE, method = "lm") ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_smooth(span = 0.8) + facet_wrap(~drv) \donttest{ binomial_smooth <- function(...) { geom_smooth(method = "glm", method.args = list(family = "binomial"), ...) } # To fit a logistic regression, you need to coerce the values to # a numeric vector lying between 0 and 1. ggplot(rpart::kyphosis, aes(Age, Kyphosis)) + geom_jitter(height = 0.05) + binomial_smooth() ggplot(rpart::kyphosis, aes(Age, as.numeric(Kyphosis) - 1)) + geom_jitter(height = 0.05) + binomial_smooth() ggplot(rpart::kyphosis, aes(Age, as.numeric(Kyphosis) - 1)) + geom_jitter(height = 0.05) + binomial_smooth(formula = y ~ splines::ns(x, 2)) # But in this case, it's probably better to fit the model yourself # so you can exercise more control and see whether or not it's a good model } } \seealso{ See individual modelling functions for more details: \code{\link{lm}} for linear smooths, \code{\link{glm}} for generalised linear smooths, \code{\link{loess}} for local smooths } ggplot2/man/discrete_scale.Rd0000644000177400001440000000571313031506205016036 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-.r \name{discrete_scale} \alias{discrete_scale} \title{Discrete scale constructor.} \usage{ discrete_scale(aesthetics, scale_name, palette, name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), na.translate = TRUE, na.value = NA, drop = TRUE, guide = "legend", position = "left", super = ScaleDiscrete) } \arguments{ \item{aesthetics}{the names of the aesthetics that this scale works with} \item{scale_name}{the name of the scale} \item{palette}{a palette function that when called with a single integer argument (the number of levels in the scale) returns the values that they should take} \item{name}{the name of the scale - used as the axis label or the legend title} \item{breaks}{control the breaks in the guide. There are four possible types of input: \itemize{ \item \code{NULL}: don't display any breaks \item a character vector giving the breaks as they should appear on the axis or in the legend. \item \code{waiver()} to use the default break computation. \item a function, that when called with a single argument, a character vector giving the limits of the scale, returns a character vector specifying which breaks to display. } This parameter does not affect in any way how the data is scaled - it only affects the appearance of the legend.} \item{labels}{\code{NULL} for no labels, \code{waiver()} for default labels (labels the same as breaks), a character vector the same length as breaks, or a named character vector whose names are used to match replacement the labels for matching breaks.} \item{limits}{A character vector specifying the data range for the scale. and the default order of their display in guides.} \item{expand}{a numeric vector of length two, giving a multiplicative and additive constant used to expand the range of the scales so that there is a small gap between the data and the axes. The defaults are (0,0.6) for discrete scales and (0.05,0) for continuous scales.} \item{na.translate}{Unlike continuous scales, discrete scales can easily show missing values, and do so by default. If you want to remove missing values from a discrete scale, specify \code{na.translate = FALSE}.} \item{na.value}{If \code{na.translate = TRUE}, what value aesthetic value should missing be displayed as? Does not apply to position scales where \code{NA} is always placed at the far right.} \item{drop}{Should unused factor levels be omitted from the scale? The default, \code{TRUE}, uses the levels that appear in the data; \code{FALSE} uses all the levels in the factor.} \item{guide}{the name of, or actual function, used to create the guide. See \code{\link{guides}} for more info.} \item{position}{The position of the axis. "left" or "right" for vertical scales, "top" or "bottom" for horizontal scales} \item{super}{The super class to use for the constructed scale} } \description{ Discrete scale constructor. } \keyword{internal} ggplot2/man/scale_alpha.Rd0000644000177400001440000000233013031506205015311 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-alpha.r \name{scale_alpha} \alias{scale_alpha} \alias{scale_alpha_continuous} \alias{scale_alpha_discrete} \title{Alpha transparency scales} \usage{ scale_alpha(..., range = c(0.1, 1)) scale_alpha_continuous(..., range = c(0.1, 1)) scale_alpha_discrete(..., range = c(0.1, 1)) } \arguments{ \item{...}{Other arguments passed on to \code{\link{continuous_scale}} or \code{\link{discrete_scale}} as appropriate, to control name, limits, breaks, labels and so forth.} \item{range}{Output range of alpha values. Must lie between 0 and 1.} } \description{ Alpha-transparency scales are not tremendously useful, but can be a convenient way to visually down-weight less important observations. \code{scale_alpha} is an alias for \code{scale_alpha_continuous} since that is the most common use of alpha, and it saves a bit of typing. } \examples{ p <- ggplot(mpg, aes(displ, hwy)) + geom_point(aes(alpha = year)) p p + scale_alpha("cylinders") p + scale_alpha(range = c(0.4, 0.8)) } \seealso{ Other colour scales: \code{\link{scale_colour_brewer}}, \code{\link{scale_colour_gradient}}, \code{\link{scale_colour_grey}}, \code{\link{scale_colour_hue}} } ggplot2/man/summary.ggplot.Rd0000644000177400001440000000101413031506205016043 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/summary.r \name{summary.ggplot} \alias{summary.ggplot} \title{Displays a useful description of a ggplot object} \usage{ \method{summary}{ggplot}(object, ...) } \arguments{ \item{object}{ggplot2 object to summarise} \item{...}{other arguments ignored (for compatibility with generic)} } \description{ Displays a useful description of a ggplot object } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() summary(p) } \keyword{internal} ggplot2/man/geom_ribbon.Rd0000644000177400001440000000702013031506205015340 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-ribbon.r \name{geom_ribbon} \alias{geom_ribbon} \alias{geom_area} \title{Ribbons and area plots} \usage{ geom_ribbon(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_area(mapping = NULL, data = NULL, stat = "identity", position = "stack", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ For each x value, \code{geom_ribbon} displays a y interval defined by \code{ymin} and \code{ymax}. \code{geom_area} is a special case of \code{geom_ribbon}, where the \code{ymin} is fixed to 0. } \details{ An area plot is the continuous analog of a stacked bar chart (see \code{\link{geom_bar}}), and can be used to show how composition of the whole varies over the range of x. Choosing the order in which different components is stacked is very important, as it becomes increasing hard to see the individual pattern as you move up the stack. See \code{\link{position_stack}} for the details of stacking algorithm. } \section{Aesthetics}{ \aesthetics{geom}{ribbon} } \examples{ # Generate data huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron)) h <- ggplot(huron, aes(year)) h + geom_ribbon(aes(ymin=0, ymax=level)) h + geom_area(aes(y = level)) # Add aesthetic mappings h + geom_ribbon(aes(ymin = level - 1, ymax = level + 1), fill = "grey70") + geom_line(aes(y = level)) } \seealso{ \code{\link{geom_bar}} for discrete intervals (bars), \code{\link{geom_linerange}} for discrete intervals (lines), \code{\link{geom_polygon}} for general polygons } ggplot2/man/cut_interval.Rd0000644000177400001440000000334113031506206015560 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities-break.r \name{cut_interval} \alias{cut_interval} \alias{cut_number} \alias{cut_width} \title{Discretise numeric data into categorical} \usage{ cut_interval(x, n = NULL, length = NULL, ...) cut_number(x, n = NULL, ...) cut_width(x, width, center = NULL, boundary = NULL, closed = c("right", "left")) } \arguments{ \item{x}{numeric vector} \item{n}{number of intervals to create, OR} \item{length}{length of each interval} \item{...}{other arguments passed on to \code{\link{cut}}} \item{width}{The bin width.} \item{center, boundary}{Specify either the position of edge or the center of a bin. Since all bins are aligned, specifying the position of a single bin (which doesn't need to be in the range of the data) affects the location of all bins. If not specified, uses the "tile layers algorithm", and sets the boundary to half of the binwidth. To center on integers, \code{width = 1} and \code{center = 0}. \code{boundary = 0.5}.} \item{closed}{One of \code{"right"} or \code{"left"} indicating whether right or left edges of bins are included in the bin.} } \description{ \code{cut_interval} makes \code{n} groups with equal range, \code{cut_number} makes \code{n} groups with (approximately) equal numbers of observations; \code{cut_width} makes groups of width \code{width}. } \examples{ table(cut_interval(1:100, 10)) table(cut_interval(1:100, 11)) table(cut_number(runif(1000), 10)) table(cut_width(runif(1000), 0.1)) table(cut_width(runif(1000), 0.1, boundary = 0)) table(cut_width(runif(1000), 0.1, center = 0)) } \seealso{ \code{\link{cut_number}} } \author{ Randall Prium contributed most of the implementation of \code{cut_width}. } ggplot2/man/lims.Rd0000644000177400001440000000336213031506205014027 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/limits.r \name{lims} \alias{lims} \alias{xlim} \alias{ylim} \title{Set scale limits} \usage{ lims(...) xlim(...) ylim(...) } \arguments{ \item{...}{A name-value pair. The name must be an aesthetic, and the value must be either a length-2 numeric, a character, a factor, or a date/time. A numeric value will create a continuous scale. If the larger value comes first, the scale will be reversed. You can leave one value as \code{NA} to compute from the range of the data. A character or factor value will create a discrete scale. A date-time value will create a continuous date/time scale.} } \description{ This is a shortcut for supplying the \code{limits} argument to the individual scales. Note that, by default, any values outside the limits will be replaced with \code{NA}. } \examples{ # Zoom into a specified area ggplot(mtcars, aes(mpg, wt)) + geom_point() + xlim(15, 20) # reverse scale ggplot(mtcars, aes(mpg, wt)) + geom_point() + xlim(20, 15) # with automatic lower limit ggplot(mtcars, aes(mpg, wt)) + geom_point() + xlim(NA, 20) # You can also supply limits that are larger than the data. # This is useful if you want to match scales across different plots small <- subset(mtcars, cyl == 4) big <- subset(mtcars, cyl > 4) ggplot(small, aes(mpg, wt, colour = factor(cyl))) + geom_point() + lims(colour = c("4", "6", "8")) ggplot(big, aes(mpg, wt, colour = factor(cyl))) + geom_point() + lims(colour = c("4", "6", "8")) } \seealso{ For changing x or y axis limits \strong{without} dropping data observations, see \code{\link{coord_cartesian}}. To expand the range of a plot to always include certain values, see \code{\link{expand_limits}}. } ggplot2/man/scale_gradient.Rd0000644000177400001440000000777313031506205016041 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-gradient.r, R/zxx.r \name{scale_colour_gradient} \alias{scale_colour_gradient} \alias{scale_fill_gradient} \alias{scale_colour_gradient2} \alias{scale_fill_gradient2} \alias{scale_colour_gradientn} \alias{scale_fill_gradientn} \alias{scale_colour_continuous} \alias{scale_colour_datetime} \alias{scale_colour_date} \alias{scale_fill_continuous} \alias{scale_fill_datetime} \alias{scale_fill_date} \alias{scale_color_continuous} \alias{scale_color_gradient} \alias{scale_color_gradient2} \alias{scale_color_gradientn} \title{Gradient colour scales} \usage{ scale_colour_gradient(..., low = "#132B43", high = "#56B1F7", space = "Lab", na.value = "grey50", guide = "colourbar") scale_fill_gradient(..., low = "#132B43", high = "#56B1F7", space = "Lab", na.value = "grey50", guide = "colourbar") scale_colour_gradient2(..., low = muted("red"), mid = "white", high = muted("blue"), midpoint = 0, space = "Lab", na.value = "grey50", guide = "colourbar") scale_fill_gradient2(..., low = muted("red"), mid = "white", high = muted("blue"), midpoint = 0, space = "Lab", na.value = "grey50", guide = "colourbar") scale_colour_gradientn(..., colours, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar", colors) scale_fill_gradientn(..., colours, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar", colors) } \arguments{ \item{...}{Other arguments passed on to \code{\link{continuous_scale}} to control name, limits, breaks, labels and so forth.} \item{low, high}{Colours for low and high ends of the gradient.} \item{space}{colour space in which to calculate gradient. Must be "Lab" - other values are deprecated.} \item{na.value}{Colour to use for missing values} \item{guide}{Type of legend. Use \code{"colourbar"} for continuous colour bar, or \code{"legend"} for discrete colour legend.} \item{mid}{colour for mid point} \item{midpoint}{The midpoint (in data value) of the diverging scale. Defaults to 0.} \item{colours, colors}{Vector of colours to use for n-colour gradient.} \item{values}{if colours should not be evenly positioned along the gradient this vector gives the position (between 0 and 1) for each colour in the \code{colours} vector. See \code{\link{rescale}} for a convience function to map an arbitrary range to between 0 and 1.} } \description{ \code{scale_*_gradient} creates a two colour gradient (low-high), \code{scale_*_gradient2} creates a diverging colour gradient (low-mid-high), \code{scale_*_gradientn} creats a n-colour gradient. } \details{ Default colours are generated with \pkg{munsell} and \code{mnsl(c("2.5PB 2/4", "2.5PB 7/10"))}. Generally, for continuous colour scales you want to keep hue constant, but vary chroma and luminance. The \pkg{munsell} package makes this easy to do using the Munsell colour system. } \examples{ df <- data.frame( x = runif(100), y = runif(100), z1 = rnorm(100), z2 = abs(rnorm(100)) ) # Default colour scale colours from light blue to dark blue ggplot(df, aes(x, y)) + geom_point(aes(colour = z2)) # For diverging colour scales use gradient2 ggplot(df, aes(x, y)) + geom_point(aes(colour = z1)) + scale_colour_gradient2() # Use your own colour scale with gradientn ggplot(df, aes(x, y)) + geom_point(aes(colour = z1)) + scale_colour_gradientn(colours = terrain.colors(10)) # Equivalent fill scales do the same job for the fill aesthetic ggplot(faithfuld, aes(waiting, eruptions)) + geom_raster(aes(fill = density)) + scale_fill_gradientn(colours = terrain.colors(10)) # Adjust colour choices with low and high ggplot(df, aes(x, y)) + geom_point(aes(colour = z2)) + scale_colour_gradient(low = "white", high = "black") # Avoid red-green colour contrasts because ~10\% of men have difficulty # seeing them } \seealso{ \code{\link[scales]{seq_gradient_pal}} for details on underlying palette Other colour scales: \code{\link{scale_alpha}}, \code{\link{scale_colour_brewer}}, \code{\link{scale_colour_grey}}, \code{\link{scale_colour_hue}} } ggplot2/man/position_jitter.Rd0000644000177400001440000000322413031506205016305 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-jitter.r \name{position_jitter} \alias{position_jitter} \title{Jitter points to avoid overplotting} \usage{ position_jitter(width = NULL, height = NULL) } \arguments{ \item{width, height}{Amount of vertical and horizontal jitter. The jitter is added in both positive and negative directions, so the total spread is twice the value specified here. If omitted, defaults to 40\% of the resolution of the data: this means the jitter values will occupy 80\% of the implied bins. Categorical data is aligned on the integers, so a width or height of 0.5 will spread the data so it's not possible to see the distinction between the categories.} } \description{ Couterintuitively adding random noise to a plot can sometimes make it easier to read. Jittering is particularly useful for small datasets with at least one discrete position. } \examples{ # Jittering is useful when you have a discrete position, and a relatively # small number of points # take up as much space as a boxplot or a bar ggplot(mpg, aes(class, hwy)) + geom_boxplot(colour = "grey50") + geom_jitter() # If the default jittering is too much, as in this plot: ggplot(mtcars, aes(am, vs)) + geom_jitter() # You can adjust it in two ways ggplot(mtcars, aes(am, vs)) + geom_jitter(width = 0.1, height = 0.1) ggplot(mtcars, aes(am, vs)) + geom_jitter(position = position_jitter(width = 0.1, height = 0.1)) } \seealso{ Other position adjustments: \code{\link{position_dodge}}, \code{\link{position_identity}}, \code{\link{position_jitterdodge}}, \code{\link{position_nudge}}, \code{\link{position_stack}} } ggplot2/man/aes_all.Rd0000644000177400001440000000065113031506205014461 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes.r \name{aes_all} \alias{aes_all} \title{Given a character vector, create a set of identity mappings} \usage{ aes_all(vars) } \arguments{ \item{vars}{vector of variable names} } \description{ Given a character vector, create a set of identity mappings } \examples{ aes_all(names(mtcars)) aes_all(c("x", "y", "col", "pch")) } \keyword{internal} ggplot2/man/geom_violin.Rd0000644000177400001440000001404413031506205015371 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-violin.r, R/stat-ydensity.r \name{geom_violin} \alias{geom_violin} \alias{stat_ydensity} \title{Violin plot} \usage{ geom_violin(mapping = NULL, data = NULL, stat = "ydensity", position = "dodge", ..., draw_quantiles = NULL, trim = TRUE, scale = "area", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_ydensity(mapping = NULL, data = NULL, geom = "violin", position = "dodge", ..., bw = "nrd0", adjust = 1, kernel = "gaussian", trim = TRUE, scale = "area", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{draw_quantiles}{If \code{not(NULL)} (default), draw horizontal lines at the given quantiles of the density estimate.} \item{trim}{If \code{TRUE} (default), trim the tails of the violins to the range of the data. If \code{FALSE}, don't trim the tails.} \item{scale}{if "area" (default), all violins have the same area (before trimming the tails). If "count", areas are scaled proportionally to the number of observations. If "width", all violins have the same maximum width.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom, stat}{Use to override the default connection between \code{geom_violin} and \code{stat_ydensity}.} \item{bw}{The smoothing bandwidth to be used. If numeric, the standard deviation of the smoothing kernel. If character, a rule to choose the bandwidth, as listed in \code{\link[stats]{bw.nrd}}.} \item{adjust}{A multiplicate bandwidth adjustment. This makes it possible to adjust the bandwidth while still using the a bandwidth estimator. For exampe, \code{adjust = 1/2} means use half of the default bandwidth.} \item{kernel}{Kernel. See list of available kernels in \code{\link{density}}.} } \description{ A violin plot is a compact display of a continuous distribution. It is a blend of \code{\link{geom_boxplot}} and \code{\link{geom_density}}: a violin plot is a mirrored density plot displayed in the same way as a boxplot. } \section{Aesthetics}{ \aesthetics{geom}{violin} } \section{Computed variables}{ \describe{ \item{density}{density estimate} \item{scaled}{density estimate, scaled to maximum of 1} \item{count}{density * number of points - probably useless for violin plots} \item{violinwidth}{density scaled for the violin plot, according to area, counts or to a constant maximum width} \item{n}{number of points} \item{width}{width of violin bounding box} } } \examples{ p <- ggplot(mtcars, aes(factor(cyl), mpg)) p + geom_violin() \donttest{ p + geom_violin() + geom_jitter(height = 0, width = 0.1) # Scale maximum width proportional to sample size: p + geom_violin(scale = "count") # Scale maximum width to 1 for all violins: p + geom_violin(scale = "width") # Default is to trim violins to the range of the data. To disable: p + geom_violin(trim = FALSE) # Use a smaller bandwidth for closer density fit (default is 1). p + geom_violin(adjust = .5) # Add aesthetic mappings # Note that violins are automatically dodged when any aesthetic is # a factor p + geom_violin(aes(fill = cyl)) p + geom_violin(aes(fill = factor(cyl))) p + geom_violin(aes(fill = factor(vs))) p + geom_violin(aes(fill = factor(am))) # Set aesthetics to fixed value p + geom_violin(fill = "grey80", colour = "#3366FF") # Show quartiles p + geom_violin(draw_quantiles = c(0.25, 0.5, 0.75)) # Scales vs. coordinate transforms ------- if (require("ggplot2movies")) { # Scale transformations occur before the density statistics are computed. # Coordinate transformations occur afterwards. Observe the effect on the # number of outliers. m <- ggplot(movies, aes(y = votes, x = rating, group = cut_width(rating, 0.5))) m + geom_violin() m + geom_violin() + scale_y_log10() m + geom_violin() + coord_trans(y = "log10") m + geom_violin() + scale_y_log10() + coord_trans(y = "log10") # Violin plots with continuous x: # Use the group aesthetic to group observations in violins ggplot(movies, aes(year, budget)) + geom_violin() ggplot(movies, aes(year, budget)) + geom_violin(aes(group = cut_width(year, 10)), scale = "width") } } } \references{ Hintze, J. L., Nelson, R. D. (1998) Violin Plots: A Box Plot-Density Trace Synergism. The American Statistician 52, 181-184. } \seealso{ \code{\link{geom_violin}} for examples, and \code{\link{stat_density}} for examples with data along the x axis. } ggplot2/man/position_stack.Rd0000644000177400001440000001153613031506205016116 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-stack.r \name{position_stack} \alias{position_stack} \alias{position_fill} \title{Stack overlapping objects on top of each another} \usage{ position_stack(vjust = 1, reverse = FALSE) position_fill(vjust = 1, reverse = FALSE) } \arguments{ \item{vjust}{Vertical adjustment for geoms that have a position (like points or lines), not a dimension (like bars or areas). Set to \code{0} to align with the bottom, \code{0.5} for the middle, and \code{1} (the default) for the top.} \item{reverse}{If \code{TRUE}, will reverse the default stacking order. This is useful if you're rotating both the plot and legend.} } \description{ \code{position_stack()} stacks bars on top of each other; \code{position_fill()} stacks bars and standardises each stack to have constant height. } \details{ \code{position_fill()} and \code{position_stack()} automatically stack values in reverse order of the group aesthetic, which for bar charts is usually defined by the fill aesthetic (the default group aesthetic is formed by the combination of all discrete aesthetics except for x and y). This default ensures that bar colours align with the default legend. There are three ways to override the defaults depending on what you want: \enumerate{ \item Change the order of the levels in the underyling factor. This will change the stacking order, and the order of keys in the legend. \item Set the legend \code{breaks} to change the order of the keys without affecting the stacking. \item Manually set the group aesthetic to change the stacking order without affecting the legend. } Stacking of positive and negative values are performed separately so that positive values stack upwards from the x-axis and negative values stack downward. } \examples{ # Stacking and filling ------------------------------------------------------ # Stacking is the default behaviour for most area plots. # Fill makes it easier to compare proportions ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + geom_bar() ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + geom_bar(position = "fill") ggplot(diamonds, aes(price, fill = cut)) + geom_histogram(binwidth = 500) ggplot(diamonds, aes(price, fill = cut)) + geom_histogram(binwidth = 500, position = "fill") # Stacking is also useful for time series series <- data.frame( time = c(rep(1, 4),rep(2, 4), rep(3, 4), rep(4, 4)), type = rep(c('a', 'b', 'c', 'd'), 4), value = rpois(16, 10) ) ggplot(series, aes(time, value)) + geom_area(aes(fill = type)) # Stacking order ------------------------------------------------------------ # You control the stacking order by setting the levels of the underlying # factor. See the forcats package for convenient helpers. series$type2 <- factor(series$type, levels = c('c', 'b', 'd', 'a')) ggplot(series, aes(time, value)) + geom_area(aes(fill = type2)) # You can change the order of the levels in the legend using the scale ggplot(series, aes(time, value)) + geom_area(aes(fill = type)) + scale_fill_discrete(breaks = c('a', 'b', 'c', 'd')) # Non-area plots ------------------------------------------------------------ # When stacking across multiple layers it's a good idea to always set # the `group` aethetic in the ggplot() call. This ensures that all layers # are stacked in the same way. ggplot(series, aes(time, value, group = type)) + geom_line(aes(colour = type), position = "stack") + geom_point(aes(colour = type), position = "stack") ggplot(series, aes(time, value, group = type)) + geom_area(aes(fill = type)) + geom_line(aes(group = type), position = "stack") # You can also stack labels, but the default position is suboptimal. ggplot(series, aes(time, value, group = type)) + geom_area(aes(fill = type)) + geom_text(aes(label = type), position = "stack") # You can override this with the vjust parameter. A vjust of 0.5 # will center the labels inside the corresponding area ggplot(series, aes(time, value, group = type)) + geom_area(aes(fill = type)) + geom_text(aes(label = type), position = position_stack(vjust = 0.5)) # Negative values ----------------------------------------------------------- df <- tibble::tribble( ~x, ~y, ~grp, "a", 1, "x", "a", 2, "y", "b", 1, "x", "b", 3, "y", "b", -1, "y" ) ggplot(data = df, aes(x, y, group = grp)) + geom_col(aes(fill = grp), position = position_stack(reverse = TRUE)) + geom_hline(yintercept = 0) ggplot(data = df, aes(x, y, group = grp)) + geom_col(aes(fill = grp)) + geom_hline(yintercept = 0) + geom_text(aes(label = grp), position = position_stack(vjust = 0.5)) } \seealso{ See \code{\link{geom_bar}} and \code{\link{geom_area}} for more examples. Other position adjustments: \code{\link{position_dodge}}, \code{\link{position_identity}}, \code{\link{position_jitterdodge}}, \code{\link{position_jitter}}, \code{\link{position_nudge}} } ggplot2/man/aes_colour_fill_alpha.Rd0000644000177400001440000000354413031506205017373 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes-colour-fill-alpha.r \name{aes_colour_fill_alpha} \alias{aes_colour_fill_alpha} \alias{colour} \alias{color} \alias{fill} \title{Colour related aesthetics: colour, fill and alpha} \description{ This page demonstrates the usage of a sub-group of aesthetics; colour, fill and alpha. } \examples{ \donttest{ # Bar chart example c <- ggplot(mtcars, aes(factor(cyl))) # Default plotting c + geom_bar() # To change the interior colouring use fill aesthetic c + geom_bar(fill = "red") # Compare with the colour aesthetic which changes just the bar outline c + geom_bar(colour = "red") # Combining both, you can see the changes more clearly c + geom_bar(fill = "white", colour = "red") # The aesthetic fill also takes different colouring scales # setting fill equal to a factor variable uses a discrete colour scale k <- ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) k + geom_bar() # Fill aesthetic can also be used with a continuous variable m <- ggplot(faithfuld, aes(waiting, eruptions)) m + geom_raster() m + geom_raster(aes(fill = density)) # Some geoms don't use both aesthetics (i.e. geom_point or geom_line) b <- ggplot(economics, aes(x = date, y = unemploy)) b + geom_line() b + geom_line(colour = "green") b + geom_point() b + geom_point(colour = "red") # For large datasets with overplotting the alpha # aesthetic will make the points more transparent df <- data.frame(x = rnorm(5000), y = rnorm(5000)) h <- ggplot(df, aes(x,y)) h + geom_point() h + geom_point(alpha = 0.5) h + geom_point(alpha = 1/10) # Alpha can also be used to add shading j <- b + geom_line() j yrng <- range(economics$unemploy) j <- j + geom_rect(aes(NULL, NULL, xmin = start, xmax = end, fill = party), ymin = yrng[1], ymax = yrng[2], data = presidential) j j + scale_fill_manual(values = alpha(c("blue", "red"), .3)) } } ggplot2/man/labeller.Rd0000644000177400001440000000746013031506205014650 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/labeller.r \name{labeller} \alias{labeller} \title{Construct labelling specification} \usage{ labeller(..., .rows = NULL, .cols = NULL, keep.as.numeric = NULL, .multi_line = TRUE, .default = label_value) } \arguments{ \item{...}{Named arguments of the form \code{variable = labeller}. Each labeller is passed to \code{\link{as_labeller}()} and can be a lookup table, a function taking and returning character vectors, or simply a labeller function.} \item{.rows, .cols}{Labeller for a whole margin (either the rows or the columns). It is passed to \code{\link{as_labeller}()}. When a margin-wide labeller is set, make sure you don't mention in \code{...} any variable belonging to the margin.} \item{keep.as.numeric}{Deprecated. All supplied labellers and on-labeller functions should be able to work with character labels.} \item{.multi_line}{Whether to display the labels of multiple factors on separate lines. This is passed to the labeller function.} \item{.default}{Default labeller for variables not specified. Also used with lookup tables or non-labeller functions.} } \value{ A labeller function to supply to \code{\link{facet_grid}} for the argument \code{labeller}. } \description{ This function makes it easy to assign different labellers to different factors. The labeller can be a function or it can be a named character vectors that will serve as a lookup table. } \details{ In case of functions, if the labeller has class \code{labeller}, it is directly applied on the data frame of labels. Otherwise, it is applied to the columns of the data frame of labels. The data frame is then processed with the function specified in the \code{.default} argument. This is intended to be used with functions taking a character vector such as \code{\link[Hmisc]{capitalize}}. } \examples{ \donttest{ p1 <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() # You can assign different labellers to variables: p1 + facet_grid(vs + am ~ gear, labeller = labeller(vs = label_both, am = label_value)) # Or whole margins: p1 + facet_grid(vs + am ~ gear, labeller = labeller(.rows = label_both, .cols = label_value)) # You can supply functions operating on strings: capitalize <- function(string) { substr(string, 1, 1) <- toupper(substr(string, 1, 1)) string } p2 <- ggplot(msleep, aes(x = sleep_total, y = awake)) + geom_point() p2 + facet_grid(vore ~ conservation, labeller = labeller(vore = capitalize)) # Or use character vectors as lookup tables: conservation_status <- c( cd = "Conservation Dependent", en = "Endangered", lc = "Least concern", nt = "Near Threatened", vu = "Vulnerable", domesticated = "Domesticated" ) ## Source: http://en.wikipedia.org/wiki/Wikipedia:Conservation_status p2 + facet_grid(vore ~ conservation, labeller = labeller( .default = capitalize, conservation = conservation_status )) # In the following example, we rename the levels to the long form, # then apply a wrap labeller to the columns to prevent cropped text msleep$conservation2 <- plyr::revalue(msleep$conservation, conservation_status) p2 \%+\% msleep + facet_grid(vore ~ conservation2) p2 \%+\% msleep + facet_grid(vore ~ conservation2, labeller = labeller(conservation2 = label_wrap_gen(10)) ) # labeller() is especially useful to act as a global labeller. You # can set it up once and use it on a range of different plots with # different facet specifications. global_labeller <- labeller( vore = capitalize, conservation = conservation_status, conservation2 = label_wrap_gen(10), .default = label_both ) p2 + facet_grid(vore ~ conservation, labeller = global_labeller) p2 + facet_wrap(~vore, labeller = global_labeller) p2 \%+\% msleep + facet_wrap(~conservation2, labeller = global_labeller) } } \seealso{ \code{\link{as_labeller}()}, \link{labellers} } ggplot2/man/is.facet.Rd0000644000177400001440000000046413031506205014557 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-.r \name{is.facet} \alias{is.facet} \title{Is this object a facetting specification?} \usage{ is.facet(x) } \arguments{ \item{x}{object to test} } \description{ Is this object a facetting specification? } \keyword{internal} ggplot2/man/geom_blank.Rd0000644000177400001440000000441013031506205015154 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-blank.r \name{geom_blank} \alias{geom_blank} \title{Draw nothing} \usage{ geom_blank(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ The blank geom draws nothing, but can be a useful way of ensuring common scales between different plots. See \code{\link{expand_limits}} for more details. } \examples{ ggplot(mtcars, aes(wt, mpg)) # Nothing to see here! } ggplot2/man/update_defaults.Rd0000644000177400001440000000141013031506205016224 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-defaults.r \name{update_geom_defaults} \alias{update_geom_defaults} \alias{update_stat_defaults} \title{Modify geom/stat aesthetic defaults for future plots} \usage{ update_geom_defaults(geom, new) update_stat_defaults(stat, new) } \arguments{ \item{new}{Named list of aesthetics.} \item{stat, geom}{Name of geom/stat to modify (like \code{"point"} or \code{"bin"}), or a Geom/Stat object (like \code{GeomPoint} or \code{StatBin}).} } \description{ Modify geom/stat aesthetic defaults for future plots } \examples{ update_geom_defaults("point", list(colour = "darkblue")) ggplot(mtcars, aes(mpg, wt)) + geom_point() update_geom_defaults("point", list(colour = "black")) } \keyword{internal} ggplot2/man/scale_date.Rd0000644000177400001440000001205413031506205015145 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-date.r \name{scale_date} \alias{scale_x_date} \alias{scale_y_date} \alias{scale_x_datetime} \alias{scale_y_datetime} \alias{scale_x_time} \alias{scale_y_time} \title{Position scales for date/time data} \usage{ scale_x_date(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver(), position = "bottom") scale_y_date(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver(), position = "left") scale_x_datetime(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), timezone = NULL, limits = NULL, expand = waiver(), position = "bottom") scale_y_datetime(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), timezone = NULL, limits = NULL, expand = waiver(), position = "left") scale_x_time(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, position = "bottom") scale_y_time(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, position = "left") } \arguments{ \item{name}{The name of the scale. Used as axis or legend title. If \code{NULL}, the default, the name of the scale is taken from the first mapping used for that aesthetic.} \item{breaks}{One of: \itemize{ \item \code{NULL} for no breaks \item \code{waiver()} for the default breaks computed by the transformation object \item A numeric vector of positions \item A function that takes the limits as input and returns breaks as output }} \item{date_breaks}{A string giving the distance between breaks like "2 weeks", or "10 years". If both \code{breaks} and \code{date_breaks} are specified, \code{date_breaks} wins.} \item{labels}{One of: \itemize{ \item \code{NULL} for no labels \item \code{waiver()} for the default labels computed by the transformation object \item A character vector giving labels (must be same length as \code{breaks}) \item A function that takes the breaks as input and returns labels as output }} \item{date_labels}{A string giving the formatting specification for the labels. Codes are defined in \code{\link{strftime}}. If both \code{labels} and \code{date_labels} are specified, \code{date_labels} wins.} \item{minor_breaks}{One of: \itemize{ \item \code{NULL} for no minor breaks \item \code{waiver()} for the default breaks (one minor break between each major break) \item A numeric vector of positions \item A function that given the limits returns a vector of minor breaks. }} \item{date_minor_breaks}{A string giving the distance between minor breaks like "2 weeks", or "10 years". If both \code{minor_breaks} and \code{date_minor_breaks} are specified, \code{date_minor_breaks} wins.} \item{limits}{A numeric vector of length two providing limits of the scale. Use \code{NA} to refer to the existing minimum or maximum.} \item{expand}{A numeric vector of length two giving multiplicative and additive expansion constants. These constants ensure that the data is placed some distance away from the axes. The defaults are \code{c(0.05, 0)} for continuous variables, and \code{c(0, 0.6)} for discrete variables.} \item{position}{The position of the axis. "left" or "right" for vertical scales, "top" or "bottom" for horizontal scales} \item{timezone}{The timezone to use for display on the axes. The default (\code{NULL}) uses the timezone encoded in the data.} \item{oob}{Function that handles limits outside of the scale limits (out of bounds). The default replaces out of bounds values with NA.} \item{na.value}{Missing values will be replaced with this value.} } \description{ These are the default scales for the three date/time class. These will usually be added automatically. To override manually, use \code{scale_*_date} for dates (class \code{Date}), \code{scale_*_datetime} for datetimes (class \code{POSIXct}), and \code{scale_*_time} for times (class \code{hms}). } \examples{ last_month <- Sys.Date() - 0:29 df <- data.frame( date = last_month, price = runif(30) ) base <- ggplot(df, aes(date, price)) + geom_line() # The date scale will attempt to pick sensible defaults for # major and minor tick marks. Override with date_breaks, date_labels # date_minor_breaks arguments. base + scale_x_date(date_labels = "\%b \%d") base + scale_x_date(date_breaks = "1 week", date_labels = "\%W") base + scale_x_date(date_minor_breaks = "1 day") # Set limits base + scale_x_date(limits = c(Sys.Date() - 7, NA)) } \seealso{ Other position scales: \code{\link{scale_x_continuous}}, \code{\link{scale_x_discrete}} } ggplot2/man/sec_axis.Rd0000644000177400001440000000414513031506205014661 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/axis-secondary.R \name{sec_axis} \alias{sec_axis} \alias{dup_axis} \alias{derive} \title{Specify a secondary axis} \usage{ sec_axis(trans = NULL, name = waiver(), breaks = waiver(), labels = waiver()) dup_axis(trans = ~., name = derive(), breaks = derive(), labels = derive()) derive() } \arguments{ \item{trans}{A transformation formula} \item{name}{The name of the secondary axis} \item{breaks}{One of: \itemize{ \item{\code{NULL} for no breaks} \item{\code{waiver()} for the default breaks computed by the transformation object} \item{A numeric vector of positions} \item{A function that takes the limits as input and returns breaks as output} }} \item{labels}{One of: \itemize{ \item{\code{NULL} for no labels} \item{\code{waiver()} for the default labels computed by the transformation object} \item{A character vector giving labels (must be same length as \code{breaks})} \item{A function that takes the breaks as input and returns labels as output} }} } \description{ This function is used in conjunction with a position scale to create a secondary axis, positioned opposite of the primary axis. All secondary axes must be based on a one-to-one transformation of the primary axes. } \details{ \code{sec_axis} is used to create the specifications for a secondary axis. Except for the \code{trans} argument any of the arguments can be set to \code{derive()} which would result in the secondary axis inheriting the settings from the primary axis. \code{dup_axis} is provide as a shorthand for creating a secondary axis that is a duplication of the primary axis, effectively mirroring the primary axis. } \examples{ p <- ggplot(mtcars, aes(cyl, mpg)) + geom_point() # Create a simple secondary axis p + scale_y_continuous(sec.axis = sec_axis(~.+10)) # Inherit the name from the primary axis p + scale_y_continuous("Miles/gallon", sec.axis = sec_axis(~.+10, name = derive())) # Duplicate the primary axis p + scale_y_continuous(sec.axis = dup_axis()) # You can pass in a formula as a shorthand p + scale_y_continuous(sec.axis = ~.^2) } ggplot2/man/borders.Rd0000644000177400001440000000315713031506205014525 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-map.r \name{borders} \alias{borders} \title{Create a layer of map borders} \usage{ borders(database = "world", regions = ".", fill = NA, colour = "grey50", xlim = NULL, ylim = NULL, ...) } \arguments{ \item{database}{map data, see \code{\link[maps]{map}} for details} \item{regions}{map region} \item{fill}{fill colour} \item{colour}{border colour} \item{xlim, ylim}{latitudinal and logitudinal range for extracting map polygons, see \code{\link[maps]{map}} for details.} \item{...}{other arguments passed onto \code{\link{geom_polygon}}} } \description{ This is a quick and dirty way to get map data (from the maps package) on to your plot. This is a good place to start if you need some crude reference lines, but you'll typically want something more sophisticated for communication graphics. } \examples{ if (require("maps")) { ia <- map_data("county", "iowa") mid_range <- function(x) mean(range(x)) seats <- plyr::ddply(ia, "subregion", plyr::colwise(mid_range, c("lat", "long"))) ggplot(ia, aes(long, lat)) + geom_polygon(aes(group = group), fill = NA, colour = "grey60") + geom_text(aes(label = subregion), data = seats, size = 2, angle = 45) data(us.cities) capitals <- subset(us.cities, capital == 2) ggplot(capitals, aes(long, lat)) + borders("state") + geom_point(aes(size = pop)) + scale_size_area() + coord_quickmap() # Same map, with some world context ggplot(capitals, aes(long, lat)) + borders("world", xlim = c(-130, -60), ylim = c(20, 50)) + geom_point(aes(size = pop)) + scale_size_area() + coord_quickmap() } } ggplot2/man/stat_function.Rd0000644000177400001440000000746413031506205015752 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-function.r \name{stat_function} \alias{stat_function} \title{Compute function for each x value} \usage{ stat_function(mapping = NULL, data = NULL, geom = "path", position = "identity", ..., fun, xlim = NULL, n = 101, args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{geom}{The geometric object to use display the data} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{fun}{function to use. Must be vectorised.} \item{xlim}{Optionally, restrict the range of the function to this range.} \item{n}{number of points to interpolate along} \item{args}{list of additional arguments to pass to \code{fun}} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ This stat makes it easy to superimpose a function on top of an existing plot. The function is called with a grid of evenly spaced values along the x axis, and the results are drawn (by default) with a line. } \section{Aesthetics}{ \aesthetics{stat}{function} } \section{Computed variables}{ \describe{ \item{x}{x's along a grid} \item{y}{value of function evaluated at corresponding x} } } \examples{ set.seed(1492) df <- data.frame( x = rnorm(100) ) x <- df$x base <- ggplot(df, aes(x)) + geom_density() base + stat_function(fun = dnorm, colour = "red") base + stat_function(fun = dnorm, colour = "red", args = list(mean = 3)) # Plot functions without data # Examples adapted from Kohske Takahashi # Specify range of x-axis ggplot(data.frame(x = c(0, 2)), aes(x)) + stat_function(fun = exp, geom = "line") # Plot a normal curve ggplot(data.frame(x = c(-5, 5)), aes(x)) + stat_function(fun = dnorm) # To specify a different mean or sd, use the args parameter to supply new values ggplot(data.frame(x = c(-5, 5)), aes(x)) + stat_function(fun = dnorm, args = list(mean = 2, sd = .5)) # Two functions on the same plot f <- ggplot(data.frame(x = c(0, 10)), aes(x)) f + stat_function(fun = sin, colour = "red") + stat_function(fun = cos, colour = "blue") # Using a custom function test <- function(x) {x ^ 2 + x + 20} f + stat_function(fun = test) } ggplot2/man/zeroGrob.Rd0000644000177400001440000000043113031506205014646 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/grob-null.r \name{zeroGrob} \alias{zeroGrob} \title{The zero grob draws nothing and has zero size.} \usage{ zeroGrob() } \description{ The zero grob draws nothing and has zero size. } \keyword{internal} ggplot2/man/expand_limits.Rd0000644000177400001440000000163513031506205015724 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/limits.r \name{expand_limits} \alias{expand_limits} \title{Expand the plot limits, using data} \usage{ expand_limits(...) } \arguments{ \item{...}{named list of aesthetics specifying the value (or values) that should be included in each scale.} } \description{ Sometimes you may want to ensure limits include a single value, for all panels or all plots. This function is a thin wrapper around \code{\link{geom_blank}} that makes it easy to add such values. } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() p + expand_limits(x = 0) p + expand_limits(y = c(1, 9)) p + expand_limits(x = 0, y = 0) ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = cyl)) + expand_limits(colour = seq(2, 10, by = 2)) ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = factor(cyl))) + expand_limits(colour = factor(seq(2, 10, by = 2))) } ggplot2/man/coord_map.Rd0000644000177400001440000001013613031506205015023 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-map.r, R/coord-quickmap.R \name{coord_map} \alias{coord_map} \alias{coord_quickmap} \title{Map projections} \usage{ coord_map(projection = "mercator", ..., parameters = NULL, orientation = NULL, xlim = NULL, ylim = NULL) coord_quickmap(xlim = NULL, ylim = NULL, expand = TRUE) } \arguments{ \item{projection}{projection to use, see \code{\link[mapproj]{mapproject}} for list} \item{..., parameters}{Other arguments passed on to \code{\link[mapproj]{mapproject}}. Use \code{...} for named parameters to the projection, and \code{parameters} for unnamed parameters. \code{...} is ignored if the \code{parameters} argument is present.} \item{orientation}{projection orientation, which defaults to \code{c(90, 0, mean(range(x)))}. This is not optimal for many projections, so you will have to supply your own. See \code{\link[mapproj]{mapproject}} for more information.} \item{xlim, ylim}{Manually specific x/y limits (in degrees of longitude/latitude)} \item{expand}{If \code{TRUE}, the default, adds a small expansion factor to the limits to ensure that data and axes don't overlap. If \code{FALSE}, limits are taken exactly from the data or \code{xlim}/\code{ylim}.} } \description{ \code{coord_map} projects a portion of the earth, which is approximately spherical, onto a flat 2D plane using any projection defined by the \code{mapproj} package. Map projections do not, in general, preserve straight lines, so this requires considerable computation. \code{coord_quickmap} is a quick approximation that does preserve straight lines. It works best for smaller areas closer to the equator. } \details{ In general, map projections must account for the fact that the actual length (in km) of one degree of longitude varies between the equator and the pole. Near the equator, the ratio between the lengths of one degree of latitude and one degree of longitude is approximately 1. Near the pole, it is tends towards infinity because the length of one degree of longitude tends towards 0. For regions that span only a few degrees and are not too close to the poles, setting the aspect ratio of the plot to the appropriate lat/lon ratio approximates the usual mercator projection. This is what \code{coord_quickmap} does, and is much faster (particularly for complex plots like \code{\link{geom_tile}}) at the expense of correctness. } \examples{ if (require("maps")) { nz <- map_data("nz") # Prepare a map of NZ nzmap <- ggplot(nz, aes(x = long, y = lat, group = group)) + geom_polygon(fill = "white", colour = "black") # Plot it in cartesian coordinates nzmap # With correct mercator projection nzmap + coord_map() # With the aspect ratio approximation nzmap + coord_quickmap() # Other projections nzmap + coord_map("cylindrical") nzmap + coord_map("azequalarea", orientation = c(-36.92, 174.6, 0)) nzmap + coord_map("lambert", parameters = c(-37, -44)) states <- map_data("state") usamap <- ggplot(states, aes(long, lat, group = group)) + geom_polygon(fill = "white", colour = "black") # Use cartesian coordinates usamap # With mercator projection usamap + coord_map() usamap + coord_quickmap() # See ?mapproject for coordinate systems and their parameters usamap + coord_map("gilbert") usamap + coord_map("lagrange") # For most projections, you'll need to set the orientation yourself # as the automatic selection done by mapproject is not available to # ggplot usamap + coord_map("orthographic") usamap + coord_map("stereographic") usamap + coord_map("conic", lat0 = 30) usamap + coord_map("bonne", lat0 = 50) # World map, using geom_path instead of geom_polygon world <- map_data("world") worldmap <- ggplot(world, aes(x = long, y = lat, group = group)) + geom_path() + scale_y_continuous(breaks = (-2:2) * 30) + scale_x_continuous(breaks = (-4:4) * 45) # Orthographic projection with default orientation (looking down at North pole) worldmap + coord_map("ortho") # Looking up up at South Pole worldmap + coord_map("ortho", orientation = c(-90, 0, 0)) # Centered on New York (currently has issues with closing polygons) worldmap + coord_map("ortho", orientation = c(41, -74, 0)) } } ggplot2/man/aes.Rd0000644000177400001440000000262013031506205013627 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes.r \name{aes} \alias{aes} \title{Construct aesthetic mappings} \usage{ aes(x, y, ...) } \arguments{ \item{x, y, ...}{List of name value pairs giving aesthetics to map to variables. The names for x and y aesthetics are typically omitted because they are so common; all other aesthetics must be named.} } \description{ Aesthetic mappings describe how variables in the data are mapped to visual properties (aesthetics) of geoms. Aesthetic mappings can be set in \code{\link{ggplot2}} and in individual layers. } \details{ This function also standardise aesthetic names by performing partial matching, converting color to colour, and translating old style R names to ggplot names (eg. pch to shape, cex to size) } \examples{ aes(x = mpg, y = wt) aes(mpg, wt) # You can also map aesthetics to functions of variables aes(x = mpg ^ 2, y = wt / cyl) # Aesthetic names are automatically standardised aes(col = x) aes(fg = x) aes(color = x) aes(colour = x) # aes is almost always used with ggplot() or a layer ggplot(mpg, aes(displ, hwy)) + geom_point() ggplot(mpg) + geom_point(aes(displ, hwy)) # Aesthetics supplied to ggplot() are used as defaults for every layer # you can override them, or supply different aesthetics for each layer } \seealso{ See \code{\link{aes_}} for a version of \code{aes} that is more suitable for programming with. } ggplot2/man/txhousing.Rd0000644000177400001440000000133613031506205015112 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{txhousing} \alias{txhousing} \title{Housing sales in TX} \format{A data frame with 8602 observations and 9 variables: \describe{ \item{city}{Name of MLS area} \item{year,month,date}{Date} \item{sales}{Number of sales} \item{volume}{Total value of sales} \item{median}{Median sale price} \item{listings}{Total active listings} \item{inventory}{"Months inventory": amount of time it would take to sell all current listings at current pace of sales.} }} \usage{ txhousing } \description{ Information about the housing market in Texas provided by the TAMU real estate center, \url{http://recenter.tamu.edu/}. } \keyword{datasets} ggplot2/man/geom_text.Rd0000644000177400001440000001600113031506205015050 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-label.R, R/geom-text.r \name{geom_label} \alias{geom_label} \alias{geom_text} \title{Text} \usage{ geom_label(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., parse = FALSE, nudge_x = 0, nudge_y = 0, label.padding = unit(0.25, "lines"), label.r = unit(0.15, "lines"), label.size = 0.25, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_text(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., parse = FALSE, nudge_x = 0, nudge_y = 0, check_overlap = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{parse}{If TRUE, the labels will be parsed into expressions and displayed as described in ?plotmath} \item{nudge_x, nudge_y}{Horizontal and vertical adjustment to nudge labels by. Useful for offsetting text from points, particularly on discrete scales.} \item{label.padding}{Amount of padding around label. Defaults to 0.25 lines.} \item{label.r}{Radius of rounded corners. Defaults to 0.15 lines.} \item{label.size}{Size of label border, in mm.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{check_overlap}{If \code{TRUE}, text that overlaps previous text in the same layer will not be plotted.} } \description{ \code{geom_text} adds text directly to the plot. \code{geom_label} draws a rectangle behind the text, making it easier to read. } \details{ Note the the "width" and "height" of a text element are 0, so stacking and dodging text will not work by default, and axis limits are not automatically expanded to include all text. Obviously, labels do have height and width, but they are physical units, not data units. The amount of space they occupy on that plot is not constant in data units: when you resize a plot, labels stay the same size, but the size of the axes changes. } \section{Aesthetics}{ \aesthetics{geom}{text} } \section{\code{geom_label}}{ Currently \code{geom_label} does not support the \code{rot} parameter and is considerably slower than \code{geom_text}. The \code{fill} aesthetic controls the background colour of the label. } \section{Alignment}{ You can modify text alignment with the \code{vjust} and \code{hjust} aesthetics. These can either be a number between 0 (right/bottom) and 1 (top/left) or a character ("left", "middle", "right", "bottom", "center", "top"). There are two special alignments: "inward" and "outward". Inward always aligns text towards the center, and outward aligns it away from the center } \examples{ p <- ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars))) p + geom_text() # Avoid overlaps p + geom_text(check_overlap = TRUE) # Labels with background p + geom_label() # Change size of the label p + geom_text(size = 10) # Set aesthetics to fixed value p + geom_point() + geom_text(hjust = 0, nudge_x = 0.05) p + geom_point() + geom_text(vjust = 0, nudge_y = 0.5) p + geom_point() + geom_text(angle = 45) \dontrun{ # Doesn't work on all systems p + geom_text(family = "Times New Roman") } # Add aesthetic mappings p + geom_text(aes(colour = factor(cyl))) p + geom_text(aes(colour = factor(cyl))) + scale_colour_discrete(l = 40) p + geom_label(aes(fill = factor(cyl)), colour = "white", fontface = "bold") p + geom_text(aes(size = wt)) # Scale height of text, rather than sqrt(height) p + geom_text(aes(size = wt)) + scale_radius(range = c(3,6)) # You can display expressions by setting parse = TRUE. The # details of the display are described in ?plotmath, but note that # geom_text uses strings, not expressions. p + geom_text(aes(label = paste(wt, "^(", cyl, ")", sep = "")), parse = TRUE) # Add a text annotation p + geom_text() + annotate("text", label = "plot mpg vs. wt", x = 2, y = 15, size = 8, colour = "red") \donttest{ # Aligning labels and bars -------------------------------------------------- df <- data.frame( x = factor(c(1, 1, 2, 2)), y = c(1, 3, 2, 1), grp = c("a", "b", "a", "b") ) # ggplot2 doesn't know you want to give the labels the same virtual width # as the bars: ggplot(data = df, aes(x, y, group = grp)) + geom_col(aes(fill = grp), position = "dodge") + geom_text(aes(label = y), position = "dodge") # So tell it: ggplot(data = df, aes(x, y, group = grp)) + geom_col(aes(fill = grp), position = "dodge") + geom_text(aes(label = y), position = position_dodge(0.9)) # Use you can't nudge and dodge text, so instead adjust the y postion ggplot(data = df, aes(x, y, group = grp)) + geom_col(aes(fill = grp), position = "dodge") + geom_text( aes(label = y, y = y + 0.05), position = position_dodge(0.9), vjust = 0 ) # To place text in the middle of each bar in a stacked barplot, you # need to set the vjust parameter of position_stack() ggplot(data = df, aes(x, y, group = grp)) + geom_col(aes(fill = grp)) + geom_text(aes(label = y), position = position_stack(vjust = 0.5)) # Justification ------------------------------------------------------------- df <- data.frame( x = c(1, 1, 2, 2, 1.5), y = c(1, 2, 1, 2, 1.5), text = c("bottom-left", "bottom-right", "top-left", "top-right", "center") ) ggplot(df, aes(x, y)) + geom_text(aes(label = text)) ggplot(df, aes(x, y)) + geom_text(aes(label = text), vjust = "inward", hjust = "inward") } } ggplot2/man/geom_segment.Rd0000644000177400001440000001151013031506205015526 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-segment.r, R/geom-curve.r \name{geom_segment} \alias{geom_segment} \alias{geom_curve} \title{Line segments and curves} \usage{ geom_segment(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., arrow = NULL, lineend = "butt", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_curve(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., curvature = 0.5, angle = 90, ncp = 5, arrow = NULL, lineend = "butt", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{arrow}{specification for arrow heads, as created by arrow().} \item{lineend}{Line end style (round, butt, square).} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{curvature}{A numeric value giving the amount of curvature. Negative values produce left-hand curves, positive values produce right-hand curves, and zero produces a straight line.} \item{angle}{A numeric value between 0 and 180, giving an amount to skew the control points of the curve. Values less than 90 skew the curve towards the start point and values greater than 90 skew the curve towards the end point.} \item{ncp}{The number of control points used to draw the curve. More control points creates a smoother curve.} } \description{ \code{geom_segment} draws a straight line between points (x, y) and (xend, yend). \code{geom_curve} draws a curved line. See the underlying drawing function \code{\link[grid]{curveGrob}} for the parameters that control the curve. } \details{ Both geoms draw a single segment/curve per case. See \code{geom_path} if you need to connect points across multiple cases. } \section{Aesthetics}{ \aesthetics{geom}{segment} } \examples{ b <- ggplot(mtcars, aes(wt, mpg)) + geom_point() df <- data.frame(x1 = 2.62, x2 = 3.57, y1 = 21.0, y2 = 15.0) b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2, colour = "curve"), data = df) + geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2, colour = "segment"), data = df) b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2), data = df, curvature = -0.2) b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2), data = df, curvature = 1) b + geom_curve( aes(x = x1, y = y1, xend = x2, yend = y2), data = df, arrow = arrow(length = unit(0.03, "npc")) ) ggplot(seals, aes(long, lat)) + geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat), arrow = arrow(length = unit(0.1,"cm"))) + borders("state") # You can also use geom_segment to recreate plot(type = "h") : counts <- as.data.frame(table(x = rpois(100,5))) counts$x <- as.numeric(as.character(counts$x)) with(counts, plot(x, Freq, type = "h", lwd = 10)) ggplot(counts, aes(x, Freq)) + geom_segment(aes(xend = x, yend = 0), size = 10, lineend = "butt") } \seealso{ \code{\link{geom_path}} and \code{\link{geom_line}} for multi- segment lines and paths. \code{\link{geom_spoke}} for a segment parameterised by a location (x, y), and an angle and radius. } ggplot2/man/graphical-units.Rd0000644000177400001440000000067313031506205016157 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-.r \docType{data} \name{graphical-units} \alias{.pt} \alias{.stroke} \title{Graphical units} \format{An object of class \code{numeric} of length 1.} \usage{ .pt .stroke } \description{ Multiply size in mm by these constants in order to convert to the units that grid uses internally for \code{lwd} and \code{fontsize}. } \keyword{datasets} \keyword{internal} ggplot2/man/fortify-multcomp.Rd0000644000177400001440000000251113031506205016376 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-multcomp.r \name{fortify-multcomp} \alias{fortify-multcomp} \alias{fortify.glht} \alias{fortify.confint.glht} \alias{fortify.summary.glht} \alias{fortify.cld} \title{Fortify methods for objects produced by \pkg{multcomp}} \usage{ \method{fortify}{glht}(model, data, ...) \method{fortify}{confint.glht}(model, data, ...) \method{fortify}{summary.glht}(model, data, ...) \method{fortify}{cld}(model, data, ...) } \arguments{ \item{model}{an object of class \code{glht}, \code{confint.glht}, \code{summary.glht} or \code{\link[multcomp]{cld}}} \item{data, ...}{other arguments to the generic ignored in this method.} } \description{ Fortify methods for objects produced by \pkg{multcomp} } \examples{ if (require("multcomp")) { amod <- aov(breaks ~ wool + tension, data = warpbreaks) wht <- glht(amod, linfct = mcp(tension = "Tukey")) fortify(wht) ggplot(wht, aes(lhs, estimate)) + geom_point() CI <- confint(wht) fortify(CI) ggplot(CI, aes(lhs, estimate, ymin = lwr, ymax = upr)) + geom_pointrange() fortify(summary(wht)) ggplot(mapping = aes(lhs, estimate)) + geom_linerange(aes(ymin = lwr, ymax = upr), data = CI) + geom_point(aes(size = p), data = summary(wht)) + scale_size(trans = "reverse") cld <- cld(wht) fortify(cld) } } \keyword{internal} ggplot2/man/add_theme.Rd0000644000177400001440000000075713031506205015002 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme.r \name{add_theme} \alias{add_theme} \title{Modify properties of an element in a theme object} \usage{ add_theme(t1, t2, t2name) } \arguments{ \item{t1}{A theme object} \item{t2}{A theme object that is to be added to \code{t1}} \item{t2name}{A name of the t2 object. This is used for printing informative error messages.} } \description{ Modify properties of an element in a theme object } \keyword{internal} ggplot2/man/position_identity.Rd0000644000177400001440000000070313031506205016634 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-identity.r \name{position_identity} \alias{position_identity} \title{Don't adjust position} \usage{ position_identity() } \description{ Don't adjust position } \seealso{ Other position adjustments: \code{\link{position_dodge}}, \code{\link{position_jitterdodge}}, \code{\link{position_jitter}}, \code{\link{position_nudge}}, \code{\link{position_stack}} } ggplot2/man/calc_element.Rd0000644000177400001440000000163513031506205015477 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme.r \name{calc_element} \alias{calc_element} \title{Calculate the element properties, by inheriting properties from its parents} \usage{ calc_element(element, theme, verbose = FALSE) } \arguments{ \item{element}{The name of the theme element to calculate} \item{theme}{A theme object (like theme_grey())} \item{verbose}{If TRUE, print out which elements this one inherits from} } \description{ Calculate the element properties, by inheriting properties from its parents } \examples{ t <- theme_grey() calc_element('text', t) # Compare the "raw" element definition to the element with calculated inheritance t$axis.text.x calc_element('axis.text.x', t, verbose = TRUE) # This reports that axis.text.x inherits from axis.text, # which inherits from text. You can view each of them with: t$axis.text.x t$axis.text t$text } \keyword{internal} ggplot2/man/stat_summary.Rd0000644000177400001440000001527413031506205015620 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-summary-bin.R, R/stat-summary.r \name{stat_summary_bin} \alias{stat_summary_bin} \alias{stat_summary} \title{Summarise y values at unique/binned x} \usage{ stat_summary_bin(mapping = NULL, data = NULL, geom = "pointrange", position = "identity", ..., fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_summary(mapping = NULL, data = NULL, geom = "pointrange", position = "identity", ..., fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{geom}{Use to override the default connection between \code{geom_histogram}/\code{geom_freqpoly} and \code{stat_bin}.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{fun.data}{A function that is given the complete data and should return a data frame with variables \code{ymin}, \code{y}, and \code{ymax}.} \item{fun.ymin, fun.y, fun.ymax}{Alternatively, supply three individual functions that are each passed a vector of x's and should return a single number.} \item{fun.args}{Optional additional arguments passed on to the functions.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ \code{stat_summary} operates on unique \code{x}; \code{stat_summary_bin} operators on binned \code{x}. They are more flexible versions of \code{\link{stat_bin}}: instead of just counting, they can compute any aggregate. } \section{Aesthetics}{ \aesthetics{stat}{summary} } \section{Summary functions}{ You can either supply summary functions individually (\code{fun.y}, \code{fun.ymax}, \code{fun.ymin}), or as a single function (\code{fun.data}): \describe{ \item{fun.data}{Complete summary function. Should take numeric vector as input and return data frame as output} \item{fun.ymin}{ymin summary function (should take numeric vector and return single number)} \item{fun.y}{y summary function (should take numeric vector and return single number)} \item{fun.ymax}{ymax summary function (should take numeric vector and return single number)} } A simple vector function is easiest to work with as you can return a single number, but is somewhat less flexible. If your summary function computes multiple values at once (e.g. ymin and ymax), use \code{fun.data}. If no aggregation functions are suppled, will default to \code{\link{mean_se}}. } \examples{ d <- ggplot(mtcars, aes(cyl, mpg)) + geom_point() d + stat_summary(fun.data = "mean_cl_boot", colour = "red", size = 2) # You can supply individual functions to summarise the value at # each x: d + stat_summary(fun.y = "median", colour = "red", size = 2, geom = "point") d + stat_summary(fun.y = "mean", colour = "red", size = 2, geom = "point") d + aes(colour = factor(vs)) + stat_summary(fun.y = mean, geom="line") d + stat_summary(fun.y = mean, fun.ymin = min, fun.ymax = max, colour = "red") d <- ggplot(diamonds, aes(cut)) d + geom_bar() d + stat_summary_bin(aes(y = price), fun.y = "mean", geom = "bar") \donttest{ # Don't use ylim to zoom into a summary plot - this throws the # data away p <- ggplot(mtcars, aes(cyl, mpg)) + stat_summary(fun.y = "mean", geom = "point") p p + ylim(15, 30) # Instead use coord_cartesian p + coord_cartesian(ylim = c(15, 30)) # A set of useful summary functions is provided from the Hmisc package: stat_sum_df <- function(fun, geom="crossbar", ...) { stat_summary(fun.data = fun, colour = "red", geom = geom, width = 0.2, ...) } d <- ggplot(mtcars, aes(cyl, mpg)) + geom_point() # The crossbar geom needs grouping to be specified when used with # a continuous x axis. d + stat_sum_df("mean_cl_boot", mapping = aes(group = cyl)) d + stat_sum_df("mean_sdl", mapping = aes(group = cyl)) d + stat_sum_df("mean_sdl", fun.args = list(mult = 1), mapping = aes(group = cyl)) d + stat_sum_df("median_hilow", mapping = aes(group = cyl)) # An example with highly skewed distributions: if (require("ggplot2movies")) { set.seed(596) mov <- movies[sample(nrow(movies), 1000), ] m2 <- ggplot(mov, aes(x = factor(round(rating)), y = votes)) + geom_point() m2 <- m2 + stat_summary(fun.data = "mean_cl_boot", geom = "crossbar", colour = "red", width = 0.3) + xlab("rating") m2 # Notice how the overplotting skews off visual perception of the mean # supplementing the raw data with summary statistics is _very_ important # Next, we'll look at votes on a log scale. # Transforming the scale means the data are transformed # first, after which statistics are computed: m2 + scale_y_log10() # Transforming the coordinate system occurs after the # statistic has been computed. This means we're calculating the summary on the raw data # and stretching the geoms onto the log scale. Compare the widths of the # standard errors. m2 + coord_trans(y="log10") } } } \seealso{ \code{\link{geom_errorbar}}, \code{\link{geom_pointrange}}, \code{\link{geom_linerange}}, \code{\link{geom_crossbar}} for geoms to display summarised data } ggplot2/man/as.list.ggproto.Rd0000644000177400001440000000114613031506205016116 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ggproto.r \name{as.list.ggproto} \alias{as.list.ggproto} \title{Convert a ggproto object to a list} \usage{ \method{as.list}{ggproto}(x, inherit = TRUE, ...) } \arguments{ \item{x}{A ggproto object to convert to a list.} \item{inherit}{If \code{TRUE} (the default), flatten all inherited items into the returned list. If \code{FALSE}, do not include any inherited items.} \item{...}{Further arguments to pass to \code{as.list.environment}.} } \description{ This will not include the object's \code{super} member. } \keyword{internal} ggplot2/man/geom_histogram.Rd0000644000177400001440000001750713031506205016075 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-freqpoly.r, R/geom-histogram.r, % R/stat-bin.r \name{geom_freqpoly} \alias{geom_freqpoly} \alias{geom_histogram} \alias{stat_bin} \title{Histograms and frequency polygons} \usage{ geom_freqpoly(mapping = NULL, data = NULL, stat = "bin", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_histogram(mapping = NULL, data = NULL, stat = "bin", position = "stack", ..., binwidth = NULL, bins = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_bin(mapping = NULL, data = NULL, geom = "bar", position = "stack", ..., binwidth = NULL, bins = NULL, center = NULL, boundary = NULL, breaks = NULL, closed = c("right", "left"), pad = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{binwidth}{The width of the bins. The default is to use \code{bins} bins that cover the range of the data. You should always override this value, exploring multiple widths to find the best to illustrate the stories in your data. The bin width of a date variable is the number of days in each time; the bin width of a time variable is the number of seconds.} \item{bins}{Number of bins. Overridden by \code{binwidth}. Defaults to 30} \item{geom, stat}{Use to override the default connection between \code{geom_histogram}/\code{geom_freqpoly} and \code{stat_bin}.} \item{center}{The center of one of the bins. Note that if center is above or below the range of the data, things will be shifted by an appropriate number of \code{width}s. To center on integers, for example, use \code{width = 1} and \code{center = 0}, even if \code{0} is outside the range of the data. At most one of \code{center} and \code{boundary} may be specified.} \item{boundary}{A boundary between two bins. As with \code{center}, things are shifted when \code{boundary} is outside the range of the data. For example, to center on integers, use \code{width = 1} and \code{boundary = 0.5}, even if \code{0.5} is outside the range of the data. At most one of \code{center} and \code{boundary} may be specified.} \item{breaks}{Alternatively, you can supply a numeric vector giving the bin boundaries. Overrides \code{binwidth}, \code{bins}, \code{center}, and \code{boundary}.} \item{closed}{One of \code{"right"} or \code{"left"} indicating whether right or left edges of bins are included in the bin.} \item{pad}{If \code{TRUE}, adds empty bins at either end of x. This ensures frequency polygons touch 0. Defaults to \code{FALSE}.} } \description{ Visualise the distribution of a single continuous variable by dividing the x axis into bins and counting the number of observations in each bin. Histograms (\code{geom_histogram}) display the count with bars; frequency polygons (\code{geom_freqpoly}), display the counts with lines. Frequency polygons are more suitable when you want to compare the distribution across a the levels of a categorical variable. \code{stat_bin} is suitable only for continuous x data. If your x data is discrete, you probably want to use \code{\link{stat_count}}. } \details{ By default, the underlying computation (\code{stat_bin}) uses 30 bins - this is not a good default, but the idea is to get you experimenting with different binwidths. You may need to look at a few to uncover the full story behind your data. } \section{Aesthetics}{ \code{geom_histogram} uses the same aesthetics as \code{\link{geom_bar}}; \code{geom_freqpoly} uses the same aesthetics as \code{\link{geom_line}}. } \section{Computed variables}{ \describe{ \item{count}{number of points in bin} \item{density}{density of points in bin, scaled to integrate to 1} \item{ncount}{count, scaled to maximum of 1} \item{ndensity}{density, scaled to maximum of 1} } } \examples{ ggplot(diamonds, aes(carat)) + geom_histogram() ggplot(diamonds, aes(carat)) + geom_histogram(binwidth = 0.01) ggplot(diamonds, aes(carat)) + geom_histogram(bins = 200) # Rather than stacking histograms, it's easier to compare frequency # polygons ggplot(diamonds, aes(price, fill = cut)) + geom_histogram(binwidth = 500) ggplot(diamonds, aes(price, colour = cut)) + geom_freqpoly(binwidth = 500) # To make it easier to compare distributions with very different counts, # put density on the y axis instead of the default count ggplot(diamonds, aes(price, ..density.., colour = cut)) + geom_freqpoly(binwidth = 500) if (require("ggplot2movies")) { # Often we don't want the height of the bar to represent the # count of observations, but the sum of some other variable. # For example, the following plot shows the number of movies # in each rating. m <- ggplot(movies, aes(rating)) m + geom_histogram(binwidth = 0.1) # If, however, we want to see the number of votes cast in each # category, we need to weight by the votes variable m + geom_histogram(aes(weight = votes), binwidth = 0.1) + ylab("votes") # For transformed scales, binwidth applies to the transformed data. # The bins have constant width on the transformed scale. m + geom_histogram() + scale_x_log10() m + geom_histogram(binwidth = 0.05) + scale_x_log10() # For transformed coordinate systems, the binwidth applies to the # raw data. The bins have constant width on the original scale. # Using log scales does not work here, because the first # bar is anchored at zero, and so when transformed becomes negative # infinity. This is not a problem when transforming the scales, because # no observations have 0 ratings. m + geom_histogram(boundary = 0) + coord_trans(x = "log10") # Use boundary = 0, to make sure we don't take sqrt of negative values m + geom_histogram(boundary = 0) + coord_trans(x = "sqrt") # You can also transform the y axis. Remember that the base of the bars # has value 0, so log transformations are not appropriate m <- ggplot(movies, aes(x = rating)) m + geom_histogram(binwidth = 0.5) + scale_y_sqrt() } } \seealso{ \code{\link{stat_count}}, which counts the number of cases at each x posotion, without binning. It is suitable for both discrete and continuous x data, whereas \link{stat_bin} is suitable only for continuous x data. } ggplot2/man/geom_count.Rd0000644000177400001440000000772413031506205015230 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-count.r, R/stat-sum.r \name{geom_count} \alias{geom_count} \alias{stat_sum} \title{Count overlapping points} \usage{ geom_count(mapping = NULL, data = NULL, stat = "sum", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_sum(mapping = NULL, data = NULL, geom = "point", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom, stat}{Use to override the default connection between \code{geom_count} and \code{stat_sum}.} } \description{ This is a variant \code{\link{geom_point}} that counts the number of observations at each location, then maps the count to point area. It useful when you have discrete data and overplotting. } \section{Aesthetics}{ \aesthetics{geom}{point} } \section{Computed variables}{ \describe{ \item{n}{number of observations at position} \item{prop}{percent of points in that panel at that position} } } \examples{ ggplot(mpg, aes(cty, hwy)) + geom_point() ggplot(mpg, aes(cty, hwy)) + geom_count() # Best used in conjunction with scale_size_area which ensures that # counts of zero would be given size 0. Doesn't make much different # here because the smallest count is already close to 0. ggplot(mpg, aes(cty, hwy)) + geom_count() + scale_size_area() # Display proportions instead of counts ------------------------------------- # By default, all categorical variables in the plot form the groups. # Specifying geom_count without a group identifier leads to a plot which is # not useful: d <- ggplot(diamonds, aes(x = cut, y = clarity)) d + geom_count(aes(size = ..prop..)) # To correct this problem and achieve a more desirable plot, we need # to specify which group the proportion is to be calculated over. d + geom_count(aes(size = ..prop.., group = 1)) + scale_size_area(max_size = 10) # Or group by x/y variables to have rows/columns sum to 1. d + geom_count(aes(size = ..prop.., group = cut)) + scale_size_area(max_size = 10) d + geom_count(aes(size = ..prop.., group = clarity)) + scale_size_area(max_size = 10) } \seealso{ For continuous \code{x} and \code{x}, use \code{\link{geom_bin2d}}. } ggplot2/man/stat_ecdf.Rd0000644000177400001440000000634613031506205015024 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-ecdf.r \name{stat_ecdf} \alias{stat_ecdf} \title{Compute empirical cumulative distribution} \usage{ stat_ecdf(mapping = NULL, data = NULL, geom = "step", position = "identity", ..., n = NULL, pad = TRUE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{geom}{The geometric object to use display the data} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{n}{if NULL, do not interpolate. If not NULL, this is the number of points to interpolate with.} \item{pad}{If \code{TRUE}, pad the ecdf with additional points (-Inf, 0) and (Inf, 1)} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ The empirical cumulative distribution function (ECDF) provides an alternative visualisation of distribution. Compared to other visualisations that rely on density (like \code{\link{geom_histogram}}), the ECDF doesn't require any tuning parameters and handles both continuous and categorical variables. The downside is that it requires more training to accurately interpret, and the underlying visual tasks are somewhat more challenging. } \section{Computed variables}{ \describe{ \item{x}{x in data} \item{y}{cumulative density corresponding x} } } \examples{ df <- data.frame( x = c(rnorm(100, 0, 3), rnorm(100, 0, 10)), g = gl(2, 100) ) ggplot(df, aes(x)) + stat_ecdf(geom = "step") # Don't go to positive/negative infinity ggplot(df, aes(x)) + stat_ecdf(geom = "step", pad = FALSE) # Multiple ECDFs ggplot(df, aes(x, colour = g)) + stat_ecdf() } ggplot2/man/geom_bin2d.Rd0000644000177400001440000000664413031506205015076 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-bin2d.r, R/stat-bin2d.r \name{geom_bin2d} \alias{geom_bin2d} \alias{stat_bin_2d} \alias{stat_bin2d} \title{Heatmap of 2d bin counts} \usage{ geom_bin2d(mapping = NULL, data = NULL, stat = "bin2d", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_bin_2d(mapping = NULL, data = NULL, geom = "tile", position = "identity", ..., bins = 30, binwidth = NULL, drop = TRUE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom, stat}{Use to override the default connection between \code{geom_bin2d} and \code{stat_bin2d}.} \item{bins}{numeric vector giving number of bins in both vertical and horizontal directions. Set to 30 by default.} \item{binwidth}{Numeric vector giving bin width in both vertical and horizontal directions. Overrides \code{bins} if both set.} \item{drop}{if \code{TRUE} removes all cells with 0 counts.} } \description{ Divides the plane into rectangles, counts the number of cases in each rectangle, and then (by default) maps the number of cases to the rectangle's fill. This is a useful alternative to \code{\link{geom_point}} in the presence of overplotting. } \section{Aesthetics}{ \aesthetics{stat}{bin2d} } \examples{ d <- ggplot(diamonds, aes(x, y)) + xlim(4, 10) + ylim(4, 10) d + geom_bin2d() # You can control the size of the bins by specifying the number of # bins in each direction: d + geom_bin2d(bins = 10) d + geom_bin2d(bins = 30) # Or by specifying the width of the bins d + geom_bin2d(binwidth = c(0.1, 0.1)) } \seealso{ \code{\link{stat_binhex}} for hexagonal binning } ggplot2/man/aes_.Rd0000644000177400001440000000351113031506205013766 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes.r \name{aes_} \alias{aes_} \alias{aes_string} \alias{aes_q} \title{Define aesthetic mappings programatically} \usage{ aes_(x, y, ...) aes_string(x, y, ...) aes_q(x, y, ...) } \arguments{ \item{x, y, ...}{List of name value pairs. Elements must be either quoted calls, strings, one-sided formulas or constants.} } \description{ Aesthetic mappings describe how variables in the data are mapped to visual properties (aesthetics) of geoms. \code{\link{aes}} uses non-standard evaluation to capture the variable names. \code{aes_} and \code{aes_string} require you to explicitly quote the inputs either with \code{""} for \code{aes_string()}, or with \code{quote} or \code{~} for \code{aes_()}. (\code{aes_q} is an alias to \code{aes_}). This makes \code{aes_} and \code{aes_string} easy to program with. } \details{ \code{aes_string} and \code{aes_} are particularly useful when writing functions that create plots because you can use strings or quoted names/calls to define the aesthetic mappings, rather than having to use \code{\link{substitute}} to generate a call to \code{aes()}. I recommend using \code{aes_()}, because creating the equivalents of \code{aes(colour = "my colour")} or \code{aes{x = `X$1`}} with \code{aes_string()} is quite clunky. } \examples{ # Three ways of generating the same aesthetics aes(mpg, wt, col = cyl) aes_(quote(mpg), quote(wt), col = quote(cyl)) aes_(~mpg, ~wt, col = ~cyl) aes_string("mpg", "wt", col = "cyl") # You can't easily mimic these calls with aes_string aes(`$100`, colour = "smooth") aes_(~ `$100`, colour = "smooth") # Ok, you can, but it requires a _lot_ of quotes aes_string("`$100`", colour = '"smooth"') # Convert strings to names with as.name var <- "cyl" aes(col = x) aes_(col = as.name(var)) } \seealso{ \code{\link{aes}} } ggplot2/man/wrap_dims.Rd0000644000177400001440000000067513031506205015054 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-wrap.r \name{wrap_dims} \alias{wrap_dims} \title{Arrange 1d structure into a grid} \usage{ wrap_dims(n, nrow = NULL, ncol = NULL) } \arguments{ \item{n}{length of structure} \item{nrow, ncol}{desired dimensions for the grid} } \value{ the grid dimension as a vector with nrow and then ncol } \description{ Arrange 1d structure into a grid } \keyword{internal} ggplot2/man/geom_polygon.Rd0000644000177400001440000000756413031506205015571 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-polygon.r \name{geom_polygon} \alias{geom_polygon} \title{Polygons} \usage{ geom_polygon(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ Polygons are very similar to paths (as drawn by \code{\link{geom_path}}) except that the start and end points are connected and the inside is coloured by \code{fill}. The \code{group} aesthetic determines which cases are connected together into a polygon. } \section{Aesthetics}{ \aesthetics{geom}{polygon} } \examples{ # When using geom_polygon, you will typically need two data frames: # one contains the coordinates of each polygon (positions), and the # other the values associated with each polygon (values). An id # variable links the two together ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) values <- data.frame( id = ids, value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5) ) positions <- data.frame( id = rep(ids, each = 4), x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) ) # Currently we need to manually merge the two together datapoly <- merge(values, positions, by = c("id")) p <- ggplot(datapoly, aes(x = x, y = y)) + geom_polygon(aes(fill = value, group = id)) p # Which seems like a lot of work, but then it's easy to add on # other features in this coordinate system, e.g.: stream <- data.frame( x = cumsum(runif(50, max = 0.1)), y = cumsum(runif(50,max = 0.1)) ) p + geom_line(data = stream, colour = "grey30", size = 5) # And if the positions are in longitude and latitude, you can use # coord_map to produce different map projections. } \seealso{ \code{\link{geom_path}} for an unfilled polygon, \code{\link{geom_ribbon}} for a polygon anchored on the x-axis } ggplot2/man/is.ggplot.Rd0000644000177400001440000000045613031506205014772 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot.r \name{is.ggplot} \alias{is.ggplot} \title{Reports whether x is a ggplot object} \usage{ is.ggplot(x) } \arguments{ \item{x}{An object to test} } \description{ Reports whether x is a ggplot object } \keyword{internal} ggplot2/man/as_labeller.Rd0000644000177400001440000000313513031506205015326 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/labeller.r \name{as_labeller} \alias{as_labeller} \title{Coerce to labeller function} \usage{ as_labeller(x, default = label_value, multi_line = TRUE) } \arguments{ \item{x}{Object to coerce to a labeller function. If a named character vector, it is used as a lookup table before being passed on to \code{default}. If a non-labeller function, it is assumed it takes and returns character vectors and is applied to the labels. If a labeller, it is simply applied to the labels.} \item{default}{Default labeller to process the labels produced by lookup tables or modified by non-labeller functions.} \item{multi_line}{Whether to display the labels of multiple factors on separate lines. This is passed to the labeller function.} } \description{ This transforms objects to labeller functions. Used internally by \code{\link{labeller}()}. } \examples{ p <- ggplot(mtcars, aes(disp, drat)) + geom_point() p + facet_wrap(~am) # Rename labels on the fly with a lookup character vector to_string <- as_labeller(c(`0` = "Zero", `1` = "One")) p + facet_wrap(~am, labeller = to_string) # Quickly transform a function operating on character vectors to a # labeller function: appender <- function(string, suffix = "-foo") paste0(string, suffix) p + facet_wrap(~am, labeller = as_labeller(appender)) # If you have more than one facetting variable, be sure to dispatch # your labeller to the right variable with labeller() p + facet_grid(cyl ~ am, labeller = labeller(am = to_string)) } \seealso{ \code{\link{labeller}()}, \link{labellers} } \keyword{internal} ggplot2/man/annotation_map.Rd0000644000177400001440000000204213031506205016064 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/annotation-map.r \name{annotation_map} \alias{annotation_map} \title{Annotation: a maps} \usage{ annotation_map(map, ...) } \arguments{ \item{map}{data frame representing a map. Most map objects can be converted into the right format by using \code{\link{fortify}}} \item{...}{other arguments used to modify aesthetics} } \description{ Display a fixed map on a plot. } \examples{ if (require("maps")) { usamap <- map_data("state") seal.sub <- subset(seals, long > -130 & lat < 45 & lat > 40) ggplot(seal.sub, aes(x = long, y = lat)) + annotation_map(usamap, fill = "NA", colour = "grey50") + geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat)) seal2 <- transform(seal.sub, latr = cut(lat, 2), longr = cut(long, 2)) ggplot(seal2, aes(x = long, y = lat)) + annotation_map(usamap, fill = "NA", colour = "grey50") + geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat)) + facet_grid(latr ~ longr, scales = "free", space = "free") } } ggplot2/man/geom_contour.Rd0000644000177400001440000000775713031506205015577 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-contour.r, R/stat-contour.r \name{geom_contour} \alias{geom_contour} \alias{stat_contour} \title{2d contours of a 3d surface} \usage{ geom_contour(mapping = NULL, data = NULL, stat = "contour", position = "identity", ..., lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_contour(mapping = NULL, data = NULL, geom = "contour", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{lineend}{Line end style (round, butt, square)} \item{linejoin}{Line join style (round, mitre, bevel)} \item{linemitre}{Line mitre limit (number greater than 1)} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom}{The geometric object to use display the data} } \description{ ggplot2 can not draw true 3d surfaces, but you can use \code{geom_contour} and \code{\link{geom_tile}} to visualise 3d surfaces in 2d. To be a valid surface, the data must contain only a single row for each unique combination of the variables mapped to the \code{x} and \code{y} aesthetics. Contouring tends to work best when \code{x} and \code{y} form a (roughly) evenly spaced grid. If you data is not evenly spaced, you may want to interpolate to a grid before visualising. } \section{Aesthetics}{ \aesthetics{geom}{contour} } \section{Computed variables}{ \describe{ \item{level}{height of contour} } } \examples{ #' # Basic plot v <- ggplot(faithfuld, aes(waiting, eruptions, z = density)) v + geom_contour() # Or compute from raw data ggplot(faithful, aes(waiting, eruptions)) + geom_density_2d() \donttest{ # Setting bins creates evenly spaced contours in the range of the data v + geom_contour(bins = 2) v + geom_contour(bins = 10) # Setting binwidth does the same thing, parameterised by the distance # between contours v + geom_contour(binwidth = 0.01) v + geom_contour(binwidth = 0.001) # Other parameters v + geom_contour(aes(colour = ..level..)) v + geom_contour(colour = "red") v + geom_raster(aes(fill = density)) + geom_contour(colour = "white") } } \seealso{ \code{\link{geom_density_2d}}: 2d density contours } ggplot2/man/guide_legend.Rd0000644000177400001440000001351513031506205015477 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/guide-legend.r \name{guide_legend} \alias{guide_legend} \title{Legend guide} \usage{ guide_legend(title = waiver(), title.position = NULL, title.theme = NULL, title.hjust = NULL, title.vjust = NULL, label = TRUE, label.position = NULL, label.theme = NULL, label.hjust = NULL, label.vjust = NULL, keywidth = NULL, keyheight = NULL, direction = NULL, default.unit = "line", override.aes = list(), nrow = NULL, ncol = NULL, byrow = FALSE, reverse = FALSE, order = 0, ...) } \arguments{ \item{title}{A character string or expression indicating a title of guide. If \code{NULL}, the title is not shown. By default (\code{\link{waiver}}), the name of the scale object or the name specified in \code{\link{labs}} is used for the title.} \item{title.position}{A character string indicating the position of a title. One of "top" (default for a vertical guide), "bottom", "left" (default for a horizontal guide), or "right."} \item{title.theme}{A theme object for rendering the title text. Usually the object of \code{\link{element_text}} is expected. By default, the theme is specified by \code{legend.title} in \code{\link{theme}} or theme.} \item{title.hjust}{A number specifying horizontal justification of the title text.} \item{title.vjust}{A number specifying vertical justification of the title text.} \item{label}{logical. If \code{TRUE} then the labels are drawn. If \code{FALSE} then the labels are invisible.} \item{label.position}{A character string indicating the position of a label. One of "top", "bottom" (default for horizontal guide), "left", or "right" (default for vertical guide).} \item{label.theme}{A theme object for rendering the label text. Usually the object of \code{\link{element_text}} is expected. By default, the theme is specified by \code{legend.text} in \code{\link{theme}} or theme.} \item{label.hjust}{A numeric specifying horizontal justification of the label text.} \item{label.vjust}{A numeric specifying vertical justification of the label text.} \item{keywidth}{A numeric or a \code{\link[grid]{unit}} object specifying the width of the legend key. Default value is \code{legend.key.width} or \code{legend.key.size} in \code{\link{theme}} or theme.} \item{keyheight}{A numeric or a \code{\link[grid]{unit}} object specifying the height of the legend key. Default value is \code{legend.key.height} or \code{legend.key.size} in \code{\link{theme}} or theme.} \item{direction}{A character string indicating the direction of the guide. One of "horizontal" or "vertical."} \item{default.unit}{A character string indicating \code{\link[grid]{unit}} for \code{keywidth} and \code{keyheight}.} \item{override.aes}{A list specifying aesthetic parameters of legend key. See details and examples.} \item{nrow}{The desired number of rows of legends.} \item{ncol}{The desired number of column of legends.} \item{byrow}{logical. If \code{FALSE} (the default) the legend-matrix is filled by columns, otherwise the legend-matrix is filled by rows.} \item{reverse}{logical. If \code{TRUE} the order of legends is reversed.} \item{order}{positive integer less that 99 that specifies the order of this guide among multiple guides. This controls the order in which multiple guides are displayed, not the contents of the guide itself. If 0 (default), the order is determined by a secret algorithm.} \item{...}{ignored.} } \value{ A guide object } \description{ Legend type guide shows key (i.e., geoms) mapped onto values. Legend guides for various scales are integrated if possible. } \details{ Guides can be specified in each \code{scale_*} or in \code{\link{guides}}. \code{guide="legend"} in \code{scale_*} is syntactic sugar for \code{guide=guide_legend()} (e.g. \code{scale_color_manual(guide = "legend")}). As for how to specify the guide for each scale in more detail, see \code{\link{guides}}. } \examples{ \donttest{ df <- reshape2::melt(outer(1:4, 1:4), varnames = c("X1", "X2")) p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value)) p2 <- p1 + geom_point(aes(size = value)) # Basic form p1 + scale_fill_continuous(guide = "legend") p1 + scale_fill_continuous(guide = guide_legend()) # Guide title p1 + scale_fill_continuous(guide = guide_legend(title = "V")) # title text p1 + scale_fill_continuous(guide = guide_legend(title = NULL)) # no title # Control styles # key size p1 + guides(fill = guide_legend(keywidth = 3, keyheight = 1)) # title position p1 + guides(fill = guide_legend(title = "LEFT", title.position = "left")) # title text styles via element_text p1 + guides(fill = guide_legend( title.theme = element_text( size = 15, face = "italic", colour = "red", angle = 0 ) ) ) # label position p1 + guides(fill = guide_legend(label.position = "left", label.hjust = 1)) # label styles p1 + scale_fill_continuous(breaks = c(5, 10, 15), labels = paste("long", c(5, 10, 15)), guide = guide_legend( direction = "horizontal", title.position = "top", label.position = "bottom", label.hjust = 0.5, label.vjust = 1, label.theme = element_text(angle = 90) ) ) # Set aesthetic of legend key # very low alpha value make it difficult to see legend key p3 <- ggplot(diamonds, aes(carat, price)) + geom_point(aes(colour = color), alpha = 1/100) p3 # override.aes overwrites the alpha p3 + guides(colour = guide_legend(override.aes = list(alpha = 1))) # multiple row/col legends df <- data.frame(x = 1:20, y = 1:20, color = letters[1:20]) p <- ggplot(df, aes(x, y)) + geom_point(aes(colour = color)) p + guides(col = guide_legend(nrow = 8)) p + guides(col = guide_legend(ncol = 8)) p + guides(col = guide_legend(nrow = 8, byrow = TRUE)) p + guides(col = guide_legend(ncol = 8, byrow = TRUE)) # reversed order legend p + guides(col = guide_legend(reverse = TRUE)) } } \seealso{ Other guides: \code{\link{guide_colourbar}}, \code{\link{guides}} } ggplot2/man/scale_shape.Rd0000644000177400001440000000314513031506205015331 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-shape.r \name{scale_shape} \alias{scale_shape} \alias{scale_shape_discrete} \alias{scale_shape_continuous} \title{Scales for shapes, aka glyphs} \usage{ scale_shape(..., solid = TRUE) } \arguments{ \item{...}{common discrete scale parameters: \code{name}, \code{breaks}, \code{labels}, \code{na.value}, \code{limits} and \code{guide}. See \code{\link{discrete_scale}} for more details} \item{solid}{Should the shapes be solid, \code{TRUE}, or hollow, \code{FALSE}?} } \description{ \code{scale_shape} maps discrete variables to six easily discernible shapes. If you have more than six levels, you will get a warning message, and the seventh and subsequence levels will not appear on the plot. Use \code{\link{scale_shape_manual}} to supply your own values. You can not map a continuous variable to shape. } \examples{ dsmall <- diamonds[sample(nrow(diamonds), 100), ] (d <- ggplot(dsmall, aes(carat, price)) + geom_point(aes(shape = cut))) d + scale_shape(solid = TRUE) # the default d + scale_shape(solid = FALSE) d + scale_shape(name = "Cut of diamond") # To change order of levels, change order of # underlying factor levels(dsmall$cut) <- c("Fair", "Good", "Very Good", "Premium", "Ideal") # Need to recreate plot to pick up new data ggplot(dsmall, aes(price, carat)) + geom_point(aes(shape = cut)) # Show a list of available shapes df_shapes <- data.frame(shape = 0:24) ggplot(df_shapes, aes(0, 0, shape = shape)) + geom_point(aes(shape = shape), size = 5, fill = 'red') + scale_shape_identity() + facet_wrap(~shape) + theme_void() } ggplot2/man/coord_munch.Rd0000644000177400001440000000134613031506205015363 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-munch.r \name{coord_munch} \alias{coord_munch} \title{Munch coordinates data} \usage{ coord_munch(coord, data, range, segment_length = 0.01) } \arguments{ \item{coord}{Coordinate system definition.} \item{data}{Data set to transform - should have variables \code{x} and \code{y} are chopped up into small pieces (as defined by \code{group}). All other variables are duplicated as needed.} \item{range}{Panel range specification.} \item{segment_length}{Target segment length} } \description{ This function "munches" lines, dividing each line into many small pieces so they can be transformed independently. Used inside geom functions. } \keyword{internal} ggplot2/man/scale_continuous.Rd0000644000177400001440000001271513031506205016442 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-continuous.r \name{scale_continuous} \alias{scale_x_continuous} \alias{scale_y_continuous} \alias{scale_x_log10} \alias{scale_y_log10} \alias{scale_x_reverse} \alias{scale_y_reverse} \alias{scale_x_sqrt} \alias{scale_y_sqrt} \title{Position scales for continuous data (x & y)} \usage{ scale_x_continuous(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity", position = "bottom", sec.axis = waiver()) scale_y_continuous(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity", position = "left", sec.axis = waiver()) scale_x_log10(...) scale_y_log10(...) scale_x_reverse(...) scale_y_reverse(...) scale_x_sqrt(...) scale_y_sqrt(...) } \arguments{ \item{name}{The name of the scale. Used as axis or legend title. If \code{NULL}, the default, the name of the scale is taken from the first mapping used for that aesthetic.} \item{breaks}{One of: \itemize{ \item \code{NULL} for no breaks \item \code{waiver()} for the default breaks computed by the transformation object \item A numeric vector of positions \item A function that takes the limits as input and returns breaks as output }} \item{minor_breaks}{One of: \itemize{ \item \code{NULL} for no minor breaks \item \code{waiver()} for the default breaks (one minor break between each major break) \item A numeric vector of positions \item A function that given the limits returns a vector of minor breaks. }} \item{labels}{One of: \itemize{ \item \code{NULL} for no labels \item \code{waiver()} for the default labels computed by the transformation object \item A character vector giving labels (must be same length as \code{breaks}) \item A function that takes the breaks as input and returns labels as output }} \item{limits}{A numeric vector of length two providing limits of the scale. Use \code{NA} to refer to the existing minimum or maximum.} \item{expand}{A numeric vector of length two giving multiplicative and additive expansion constants. These constants ensure that the data is placed some distance away from the axes. The defaults are \code{c(0.05, 0)} for continuous variables, and \code{c(0, 0.6)} for discrete variables.} \item{oob}{Function that handles limits outside of the scale limits (out of bounds). The default replaces out of bounds values with NA.} \item{na.value}{Missing values will be replaced with this value.} \item{trans}{Either the name of a transformation object, or the object itself. Built-in transformations include "asn", "atanh", "boxcox", "exp", "identity", "log", "log10", "log1p", "log2", "logit", "probability", "probit", "reciprocal", "reverse" and "sqrt". A transformation object bundles together a transform, it's inverse, and methods for generating breaks and labels. Transformation objects are defined in the scales package, and are called \code{name_trans}, e.g. \code{\link[scales]{boxcox_trans}}. You can create your own transformation with \code{\link[scales]{trans_new}}.} \item{position}{The position of the axis. "left" or "right" for vertical scales, "top" or "bottom" for horizontal scales} \item{sec.axis}{specifify a secondary axis} \item{...}{Other arguments passed on to \code{scale_(x|y)_continuous}} } \description{ \code{scale_x_continuous} and \code{scale_y_continuous} are the default scales for continuous x and y aesthetics. There are three variants that set the \code{trans} argument for commonly used transformations: \code{scale_*_log10}, \code{scale_*_sqrt} and \code{scale_*_reverse}. } \details{ For simple manipulation of labels and limits, you may wish to use \code{\link{labs}()} and \code{\link{lims}()} instead. } \examples{ p1 <- ggplot(mpg, aes(displ, hwy)) + geom_point() p1 # Manipulating the default position scales lets you: # * change the axis labels p1 + scale_x_continuous("Engine displacement (L)") + scale_y_continuous("Highway MPG") # You can also use the short-cut labs(). # Use NULL to suppress axis labels p1 + labs(x = NULL, y = NULL) # * modify the axis limits p1 + scale_x_continuous(limits = c(2, 6)) p1 + scale_x_continuous(limits = c(0, 10)) # you can also use the short hand functions `xlim()` and `ylim()` p1 + xlim(2, 6) # * choose where the ticks appear p1 + scale_x_continuous(breaks = c(2, 4, 6)) # * add what labels they have p1 + scale_x_continuous( breaks = c(2, 4, 6), label = c("two", "four", "six") ) # Typically you'll pass a function to the `labels` argument. # Some common formats are built into the scales package: df <- data.frame( x = rnorm(10) * 100000, y = seq(0, 1, length.out = 10) ) p2 <- ggplot(df, aes(x, y)) + geom_point() p2 + scale_y_continuous(labels = scales::percent) p2 + scale_y_continuous(labels = scales::dollar) p2 + scale_x_continuous(labels = scales::comma) # You can also override the default linear mapping by using a # transformation. There are three shortcuts: p1 + scale_y_log10() p1 + scale_y_sqrt() p1 + scale_y_reverse() # Or you can supply a transformation in the `trans` argument: p1 + scale_y_continuous(trans = scales::reciprocal_trans()) # You can also create your own. See ?scales::trans_new } \seealso{ \code{\link{sec_axis}} for how to specify secondary axes Other position scales: \code{\link{scale_x_date}}, \code{\link{scale_x_discrete}} } ggplot2/man/ggplot2-ggproto.Rd0000644000177400001440000003757313031506205016133 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aaa-.r, R/geom-.r, R/annotation-custom.r, % R/annotation-logticks.r, R/geom-polygon.r, R/geom-map.r, R/annotation-map.r, % R/geom-raster.r, R/annotation-raster.r, R/axis-secondary.R, R/coord-.r, % R/coord-cartesian-.r, R/coord-fixed.r, R/coord-flip.r, R/coord-map.r, % R/coord-polar.r, R/coord-quickmap.R, R/coord-transform.r, R/facet-.r, % R/facet-grid-.r, R/facet-null.r, R/facet-wrap.r, R/stat-.r, R/geom-abline.r, % R/geom-rect.r, R/geom-bar.r, R/geom-blank.r, R/geom-boxplot.r, R/geom-col.r, % R/geom-path.r, R/geom-contour.r, R/geom-crossbar.r, R/geom-segment.r, % R/geom-curve.r, R/geom-ribbon.r, R/geom-density.r, R/geom-density2d.r, % R/geom-dotplot.r, R/geom-errorbar.r, R/geom-errorbarh.r, R/geom-hex.r, % R/geom-hline.r, R/geom-label.R, R/geom-linerange.r, R/geom-point.r, % R/geom-pointrange.r, R/geom-quantile.r, R/geom-rug.r, R/geom-smooth.r, % R/geom-spoke.r, R/geom-text.r, R/geom-tile.r, R/geom-violin.r, % R/geom-vline.r, R/position-.r, R/position-dodge.r, R/position-identity.r, % R/position-jitter.r, R/position-jitterdodge.R, R/position-nudge.R, % R/position-stack.r, R/scale-.r, R/scale-continuous.r, R/scale-date.r, % R/scale-discrete-.r, R/scale-identity.r, R/stat-bin.r, R/stat-bin2d.r, % R/stat-bindot.r, R/stat-binhex.r, R/stat-boxplot.r, R/stat-contour.r, % R/stat-count.r, R/stat-density-2d.r, R/stat-density.r, R/stat-ecdf.r, % R/stat-ellipse.R, R/stat-function.r, R/stat-identity.r, R/stat-qq.r, % R/stat-quantile.r, R/stat-smooth.r, R/stat-sum.r, R/stat-summary-2d.r, % R/stat-summary-bin.R, R/stat-summary-hex.r, R/stat-summary.r, % R/stat-unique.r, R/stat-ydensity.r \docType{data} \name{ggplot2-ggproto} \alias{ggplot2-ggproto} \alias{Geom} \alias{GeomCustomAnn} \alias{GeomLogticks} \alias{GeomPolygon} \alias{GeomMap} \alias{GeomAnnotationMap} \alias{GeomRaster} \alias{GeomRasterAnn} \alias{AxisSecondary} \alias{Coord} \alias{CoordCartesian} \alias{CoordFixed} \alias{CoordFlip} \alias{CoordMap} \alias{CoordPolar} \alias{CoordQuickmap} \alias{CoordTrans} \alias{Facet} \alias{FacetGrid} \alias{FacetNull} \alias{FacetWrap} \alias{Stat} \alias{GeomAbline} \alias{GeomRect} \alias{GeomBar} \alias{GeomBlank} \alias{GeomBoxplot} \alias{GeomCol} \alias{GeomPath} \alias{GeomLine} \alias{GeomStep} \alias{GeomContour} \alias{GeomCrossbar} \alias{GeomSegment} \alias{GeomCurve} \alias{GeomRibbon} \alias{GeomArea} \alias{GeomDensity} \alias{GeomDensity2d} \alias{GeomDotplot} \alias{GeomErrorbar} \alias{GeomErrorbarh} \alias{GeomHex} \alias{GeomHline} \alias{GeomLabel} \alias{GeomLinerange} \alias{GeomPoint} \alias{GeomPointrange} \alias{GeomQuantile} \alias{GeomRug} \alias{GeomSmooth} \alias{GeomSpoke} \alias{GeomText} \alias{GeomTile} \alias{GeomViolin} \alias{GeomVline} \alias{Position} \alias{PositionDodge} \alias{PositionIdentity} \alias{PositionJitter} \alias{PositionJitterdodge} \alias{PositionNudge} \alias{PositionStack} \alias{PositionFill} \alias{Scale} \alias{ScaleContinuous} \alias{ScaleDiscrete} \alias{ScaleContinuousPosition} \alias{ScaleContinuousDatetime} \alias{ScaleContinuousDate} \alias{ScaleDiscretePosition} \alias{ScaleDiscreteIdentity} \alias{ScaleContinuousIdentity} \alias{StatBin} \alias{StatBin2d} \alias{StatBindot} \alias{StatBinhex} \alias{StatBoxplot} \alias{StatContour} \alias{StatCount} \alias{StatDensity2d} \alias{StatDensity} \alias{StatEcdf} \alias{StatEllipse} \alias{StatFunction} \alias{StatIdentity} \alias{StatQq} \alias{StatQuantile} \alias{StatSmooth} \alias{StatSum} \alias{StatSummary2d} \alias{StatSummaryBin} \alias{StatSummaryHex} \alias{StatSummary} \alias{StatUnique} \alias{StatYdensity} \title{Base ggproto classes for ggplot2} \description{ If you are creating a new geom, stat, position, or scale in another package, you'll need to extend from \code{ggplot2::Geom}, \code{ggplot2::Stat}, \code{ggplot2::Position}, or \code{ggplot2::Scale}. } \section{Geoms}{ All \code{geom_*} functions (like \code{geom_point}) return a layer that contains a \code{Geom*} object (like \code{GeomPoint}). The \code{Geom*} object is responsible for rendering the data in the plot. Each of the \code{Geom*} objects is a \code{\link{ggproto}} object, descended from the top-level \code{Geom}, and each implements various methods and fields. To create a new type of Geom object, you typically will want to implement one or more of the following: Compared to \code{Stat} and \code{Position}, \code{Geom} is a little different because the execution of the setup and compute functions is split up. \code{setup_data} runs before position adjustments, and \code{draw_layer} is not run until render time, much later. This means there is no \code{setup_params} because it's hard to communicate the changes. \itemize{ \item Override either \code{draw_panel(self, data, panel_scales, coord)} or \code{draw_group(self, data, panel_scales, coord)}. \code{draw_panel} is called once per panel, \code{draw_group} is called once per group. Use \code{draw_panel} if each row in the data represents a single element. Use \code{draw_group} if each group represents an element (e.g. a smooth, a violin). \code{data} is a data frame of scaled aesthetics. \code{panel_scales} is a list containing information about the scales in the current panel. \code{coord} is a coordinate specification. You'll need to call \code{coord$transform(data, panel_scales)} to work with non-Cartesian coords. To work with non-linear coordinate systems, you typically need to convert into a primitive geom (e.g. point, path or polygon), and then pass on to the corresponding draw method for munching. Must return a grob. Use \code{\link{zeroGrob}} if there's nothing to draw. \item \code{draw_key}: Renders a single legend key. \item \code{required_aes}: A character vector of aesthetics needed to render the geom. \item \code{default_aes}: A list (generated by \code{\link{aes}()} of default values for aesthetics. \item \code{reparameterise}: Converts width and height to xmin and xmax, and ymin and ymax values. It can potentially set other values as well. } } \section{Coordinate systems}{ All \code{coord_*} functions (like \code{coord_trans}) return a \code{Coord*} object (like \code{CoordTrans}). The \code{Coord*} object is responsible for adjusting the position of overlapping geoms. The way that the \code{coord_*} functions work is slightly different from the \code{geom_*} and \code{stat_*} functions, because a \code{coord_*} function actually "instantiates" the \code{Coord*} object by creating a descendant, and returns that. Each of the \code{Coord*} objects is a \code{\link{ggproto}} object, descended from the top-level \code{Coord}. To create a new type of Coord object, you typically will want to implement one or more of the following: \itemize{ \item \code{aspect}: Returns the desired aspect ratio for the plot. \item \code{labels}: Returns a list containing labels for x and y. \item \code{render_fg}: Renders foreground elements. \item \code{render_bg}: Renders background elements. \item \code{render_axis_h}: Renders the horizontal axes. \item \code{render_axis_v}: Renders the vertical axes. \item \code{range}: Returns the x and y ranges \item \code{train}: Return the trained scale ranges. \item \code{transform}: Transforms x and y coordinates. \item \code{distance}: Calculates distance. \item \code{is_linear}: Returns \code{TRUE} if the coordinate system is linear; \code{FALSE} otherwise. } } \section{Facets}{ All \code{facet_*} functions returns a \code{Facet} object or an object of a \code{Facet} subclass. This object describes how to assign data to different panels, how to apply positional scales and how to lay out the panels, once rendered. Extending facets can range from the simple modifications of current facets, to very laborious rewrites with a lot of \code{\link{gtable}} manipulation. For some examples of both, please see the extension vignette. \code{Facet} subclasses, like other extendible ggproto classes, have a range of methods that can be modified. Some of these are required for all new subclasses, while other only need to be modified if need arises. The required methods are: \itemize{ \item \code{compute_layout}: Based on layer data compute a mapping between panels, axes, and potentially other parameters such as faceting variable level etc. This method must return a data.frame containing at least the columns \code{PANEL}, \code{SCALE_X}, and \code{SCALE_Y} each containing integer keys mapping a PANEL to which axes it should use. In addition the data.frame can contain whatever other information is necessary to assign observations to the correct panel as well as determining the position of the panel. \item \code{map_data}: This method is supplied the data for each layer in turn and is expected to supply a \code{PANEL} column mapping each row to a panel defined in the layout. Additionally this method can also add or subtract data points as needed e.g. in the case of adding margins to \code{facet_grid}. \item \code{draw_panels}: This is where the panels are assembled into a \code{gtable} object. The method recieves, among others, a list of grobs defining the content of each panel as generated by the Geoms and Coord objects. The responsibility of the method is to decorate the panels with axes and strips as needed, as well as position them relative to each other in a gtable. For some of the automatic functions to work correctly, each panel, axis, and strip grob name must be prefixed with "panel", "axis", and "strip" respectively. } In addition to the methods described above, it is also possible to override the default behaviour of one or more of the following methods: \itemize{ \item \code{setup_params}: \item \code{init_scales}: Given a master scale for x and y, create panel specific scales for each panel defined in the layout. The default is to simply clone the master scale. \item \code{train_scales}: Based on layer data train each set of panel scales. The default is to train it on the data related to the panel. \item \code{finish_data}: Make last-minute modifications to layer data before it is rendered by the Geoms. The default is to not modify it. \item \code{draw_back}: Add a grob in between the background defined by the Coord object (usually the axis grid) and the layer stack. The default is to return an empty grob for each panel. \item \code{draw_front}: As above except the returned grob is placed between the layer stack and the foreground defined by the Coord object (usually empty). The default is, as above, to return an empty grob. \item \code{draw_labels}: Given the gtable returned by \code{draw_panels}, add axis titles to the gtable. The default is to add one title at each side depending on the position and existance of axes. } All extension methods recieve the content of the params field as the params argument, so the constructor function will generally put all relevant information into this field. The only exception is the \code{shrink} parameter which is used to determine if scales are retrained after Stat transformations has been applied. } \section{Stats}{ All \code{stat_*} functions (like \code{stat_bin}) return a layer that contains a \code{Stat*} object (like \code{StatBin}). The \code{Stat*} object is responsible for rendering the data in the plot. Each of the \code{Stat*} objects is a \code{\link{ggproto}} object, descended from the top-level \code{Stat}, and each implements various methods and fields. To create a new type of Stat object, you typically will want to implement one or more of the following: \itemize{ \item Override one of : \code{compute_layer(self, data, scales, ...)}, \code{compute_panel(self, data, scales, ...)}, or \code{compute_group(self, data, scales, ...)}. \code{compute_layer()} is called once per layer, \code{compute_panel_()} is called once per panel, and \code{compute_group()} is called once per group. All must return a data frame. It's usually best to start by overriding \code{compute_group}: if you find substantial performance optimisations, override higher up. You'll need to read the source code of the default methods to see what else you should be doing. \code{data} is a data frame containing the variables named according to the aesthetics that they're mapped to. \code{scales} is a list containing the \code{x} and \code{y} scales. There functions are called before the facets are trained, so they are global scales, not local to the individual panels.\code{...} contains the parameters returned by \code{setup_params()}. \item \code{finish_layer(data, params)}: called once for each layer. Used to modify the data after scales has been applied, but before the data is handed of to the geom for rendering. The default is to not modify the data. Use this hook if the stat needs access to the actual aesthetic values rather than the values that are mapped to the aesthetic. \item \code{setup_params(data, params)}: called once for each layer. Used to setup defaults that need to complete dataset, and to inform the user of important choices. Should return list of parameters. \item \code{setup_data(data, params)}: called once for each layer, after \code{setp_params()}. Should return modified \code{data}. Default methods removes all rows containing a missing value in required aesthetics (with a warning if \code{!na.rm}). \item \code{required_aes}: A character vector of aesthetics needed to render the geom. \item \code{default_aes}: A list (generated by \code{\link{aes}()} of default values for aesthetics. } } \section{Positions}{ All \code{position_*} functions (like \code{position_dodge}) return a \code{Position*} object (like \code{PositionDodge}). The \code{Position*} object is responsible for adjusting the position of overlapping geoms. The way that the \code{position_*} functions work is slightly different from the \code{geom_*} and \code{stat_*} functions, because a \code{position_*} function actually "instantiates" the \code{Position*} object by creating a descendant, and returns that. Each of the \code{Position*} objects is a \code{\link{ggproto}} object, descended from the top-level \code{Position}, and each implements the following methods: \itemize{ \item \code{compute_layer(self, data, params, panel)} is called once per layer. \code{panel} is currently an internal data structure, so this method should not be overriden. \item \code{compute_panel(self, data, params, panel)} is called once per panel and should return a modified data frame. \code{data} is a data frame containing the variables named according to the aesthetics that they're mapped to. \code{scales} is a list containing the \code{x} and \code{y} scales. There functions are called before the facets are trained, so they are global scales, not local to the individual panels. \code{params} contains the parameters returned by \code{setup_params()}. \item \code{setup_params(data, params)}: called once for each layer. Used to setup defaults that need to complete dataset, and to inform the user of important choices. Should return list of parameters. \item \code{setup_data(data, params)}: called once for each layer, after \code{setp_params()}. Should return modified \code{data}. Default checks that required aesthetics are present. } And the following fields \itemize{ \item \code{required_aes}: a character vector giving the aesthetics that must be present for this position adjustment to work. } } \section{Scales}{ All \code{scale_*} functions (like \code{scale_x_continuous}) return a \code{Scale*} object (like \code{ScaleContinuous}). The \code{Scale*} object represents a single scale. Each of the \code{Scale*} objects is a \code{\link{ggproto}} object, descended from the top-level \code{Scale}. } \seealso{ ggproto } \keyword{datasets} \keyword{internal} ggplot2/man/geom_quantile.Rd0000644000177400001440000000756213031506205015722 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-quantile.r, R/stat-quantile.r \name{geom_quantile} \alias{geom_quantile} \alias{stat_quantile} \title{Quantile regression} \usage{ geom_quantile(mapping = NULL, data = NULL, stat = "quantile", position = "identity", ..., lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_quantile(mapping = NULL, data = NULL, geom = "quantile", position = "identity", ..., quantiles = c(0.25, 0.5, 0.75), formula = NULL, method = "rq", method.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{lineend}{Line end style (round, butt, square)} \item{linejoin}{Line join style (round, mitre, bevel)} \item{linemitre}{Line mitre limit (number greater than 1)} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom, stat}{Use to override the default connection between \code{geom_quantile} and \code{stat_quantile}.} \item{quantiles}{conditional quantiles of y to calculate and display} \item{formula}{formula relating y variables to x variables} \item{method}{Quantile regression method to use. Currently only supports \code{\link[quantreg]{rq}}.} \item{method.args}{List of additional arguments passed on to the modelling function defined by \code{method}.} } \description{ This fits a quantile regression to the data and draws the fitted quantiles with lines. This is as a continuous analogue to \code{\link{geom_boxplot}}. } \section{Aesthetics}{ \aesthetics{geom}{quantile} } \section{Computed variables}{ \describe{ \item{quantile}{quantile of distribution} } } \examples{ m <- ggplot(mpg, aes(displ, 1 / hwy)) + geom_point() m + geom_quantile() m + geom_quantile(quantiles = 0.5) q10 <- seq(0.05, 0.95, by = 0.05) m + geom_quantile(quantiles = q10) # You can also use rqss to fit smooth quantiles m + geom_quantile(method = "rqss") # Note that rqss doesn't pick a smoothing constant automatically, so # you'll need to tweak lambda yourself m + geom_quantile(method = "rqss", lambda = 0.1) # Set aesthetics to fixed value m + geom_quantile(colour = "red", size = 2, alpha = 0.5) } ggplot2/man/autoplot.Rd0000644000177400001440000000122313031506205014724 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/autoplot.r \name{autoplot} \alias{autoplot} \title{Create a complete ggplot appropriate to a particular data type} \usage{ autoplot(object, ...) } \arguments{ \item{object}{an object, whose class will determine the behaviour of autoplot} \item{...}{other arguments passed to specific methods} } \value{ a ggplot object } \description{ \code{autoplot} uses ggplot2 to draw a particular plot for an object of a particular class in a single command. This defines the S3 generic that other classes and packages can extend. } \seealso{ \code{\link{ggplot}} and \code{\link{fortify}} } ggplot2/man/last_plot.Rd0000644000177400001440000000050313031506205015056 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-last.r \name{last_plot} \alias{last_plot} \title{Retrieve the last plot to be modified or created.} \usage{ last_plot() } \description{ Retrieve the last plot to be modified or created. } \seealso{ \code{\link{ggsave}} } \keyword{internal} ggplot2/man/ggsave.Rd0000644000177400001440000000356613031506205014345 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/save.r \name{ggsave} \alias{ggsave} \title{Save a ggplot (or other grid object) with sensible defaults} \usage{ ggsave(filename, plot = last_plot(), device = NULL, path = NULL, scale = 1, width = NA, height = NA, units = c("in", "cm", "mm"), dpi = 300, limitsize = TRUE, ...) } \arguments{ \item{filename}{File name to create on disk.} \item{plot}{Plot to save, defaults to last plot displayed.} \item{device}{Device to use. Can be either be a device function (e.g. \code{\link{png}}), or one of "eps", "ps", "tex" (pictex), "pdf", "jpeg", "tiff", "png", "bmp", "svg" or "wmf" (windows only).} \item{path}{Path to save plot to (combined with filename).} \item{scale}{Multiplicative scaling factor.} \item{width, height, units}{Plot size in \code{units} ("in", "cm", or "mm"). If not supplied, uses the size of current graphics device.} \item{dpi}{Plot resolution. Applies only to raster output types.} \item{limitsize}{When \code{TRUE} (the default), \code{ggsave} will not save images larger than 50x50 inches, to prevent the common error of specifying dimensions in pixels.} \item{...}{Other arguments passed on to graphics \code{device}.} } \description{ \code{ggsave()} is a convenient function for saving a plot. It defaults to saving the last plot that you displayed, using the size of the current graphics device. It also guesses the type of graphics device from the extension. } \examples{ \dontrun{ ggplot(mtcars, aes(mpg, wt)) + geom_point() ggsave("mtcars.pdf") ggsave("mtcars.png") ggsave("mtcars.pdf", width = 4, height = 4) ggsave("mtcars.pdf", width = 20, height = 20, units = "cm") unlink("mtcars.pdf") unlink("mtcars.png") # specify device when saving to a file with unknown extension # (for example a server supplied temporary file) file <- tempfile() ggsave(file, device = "pdf") unlink(file) } } ggplot2/man/geom_rug.Rd0000644000177400001440000000625013031506205014666 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-rug.r \name{geom_rug} \alias{geom_rug} \title{Rug plots in the margins} \usage{ geom_rug(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., sides = "bl", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{sides}{A string that controls which sides of the plot the rugs appear on. It can be set to a string containing any of \code{"trbl"}, for top, right, bottom, and left.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ A rug plot is a compact visualisation designed to supplement a 2d display with the two 1d marginal distributions. Rug plots display individual cases so are best used with smaller datasets. } \details{ The rug lines are drawn with a fixed size (3% of the total plot size) so are dependent on the overall scale expansion in order not to overplot existing data. } \section{Aesthetics}{ \aesthetics{geom}{rug} } \examples{ p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() p p + geom_rug() p + geom_rug(sides="b") # Rug on bottom only p + geom_rug(sides="trbl") # All four sides # Use jittering to avoid overplotting for smaller datasets ggplot(mpg, aes(displ, cty)) + geom_point() + geom_rug() ggplot(mpg, aes(displ, cty)) + geom_jitter() + geom_rug(alpha = 1/2, position = "jitter") } ggplot2/man/gg_dep.Rd0000644000177400001440000000234313031506205014306 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.r \name{gg_dep} \alias{gg_dep} \title{Give a deprecation error, warning, or message, depending on version number.} \usage{ gg_dep(version, msg) } \arguments{ \item{version}{The last version of ggplot2 where this function was good (in other words, the last version where it was not deprecated).} \item{msg}{The message to print.} } \description{ Version numbers have the format .., like 0.9.2. This function compares the current version number of ggplot2 against the specified \code{version}, which is the most recent version before the function (or other object) was deprecated. } \details{ \code{gg_dep} will give an error, warning, or message, depending on the difference between the current ggplot2 version and the specified \code{version}. If the current major number is greater than \code{version}'s major number, or if the current minor number is more than 1 greater than \code{version}'s minor number, give an error. If the current minor number differs from \code{version}'s minor number by one, give a warning. If the current subminor number differs from \code{version}'s subminor number, print a message. } \keyword{internal} ggplot2/man/geom_spoke.Rd0000644000177400001440000000537713031506205015223 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-spoke.r \name{geom_spoke} \alias{geom_spoke} \alias{stat_spoke} \title{Line segments parameterised by location, direction and distance} \usage{ geom_spoke(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ This is a polar parameterisation of \code{\link{geom_segment}}. It is useful when you have variables that describe direction and distance. } \section{Aesthetics}{ \aesthetics{geom}{spoke} } \examples{ df <- expand.grid(x = 1:10, y=1:10) df$angle <- runif(100, 0, 2*pi) df$speed <- runif(100, 0, sqrt(0.1 * df$x)) ggplot(df, aes(x, y)) + geom_point() + geom_spoke(aes(angle = angle), radius = 0.5) ggplot(df, aes(x, y)) + geom_point() + geom_spoke(aes(angle = angle, radius = speed)) } ggplot2/man/theme.Rd0000644000177400001440000003052213031506205014163 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme.r \name{theme} \alias{theme} \title{Modify components of a theme} \usage{ theme(line, rect, text, title, aspect.ratio, axis.title, axis.title.x, axis.title.x.top, axis.title.y, axis.title.y.right, axis.text, axis.text.x, axis.text.x.top, axis.text.y, axis.text.y.right, axis.ticks, axis.ticks.x, axis.ticks.y, axis.ticks.length, axis.line, axis.line.x, axis.line.y, legend.background, legend.margin, legend.spacing, legend.spacing.x, legend.spacing.y, legend.key, legend.key.size, legend.key.height, legend.key.width, legend.text, legend.text.align, legend.title, legend.title.align, legend.position, legend.direction, legend.justification, legend.box, legend.box.just, legend.box.margin, legend.box.background, legend.box.spacing, panel.background, panel.border, panel.spacing, panel.spacing.x, panel.spacing.y, panel.grid, panel.grid.major, panel.grid.minor, panel.grid.major.x, panel.grid.major.y, panel.grid.minor.x, panel.grid.minor.y, panel.ontop, plot.background, plot.title, plot.subtitle, plot.caption, plot.margin, strip.background, strip.placement, strip.text, strip.text.x, strip.text.y, strip.switch.pad.grid, strip.switch.pad.wrap, ..., complete = FALSE, validate = TRUE) } \arguments{ \item{line}{all line elements (\code{element_line})} \item{rect}{all rectangular elements (\code{element_rect})} \item{text}{all text elements (\code{element_text})} \item{title}{all title elements: plot, axes, legends (\code{element_text}; inherits from \code{text})} \item{aspect.ratio}{aspect ratio of the panel} \item{axis.title}{label of axes (\code{element_text}; inherits from \code{text})} \item{axis.title.x}{x axis label (\code{element_text}; inherits from \code{axis.title})} \item{axis.title.x.top}{x axis label on top axis (\code{element_text}; inherits from \code{axis.title.x})} \item{axis.title.y}{y axis label (\code{element_text}; inherits from \code{axis.title})} \item{axis.title.y.right}{y axis label on right axis (\code{element_text}; inherits from \code{axis.title.y})} \item{axis.text}{tick labels along axes (\code{element_text}; inherits from \code{text})} \item{axis.text.x}{x axis tick labels (\code{element_text}; inherits from \code{axis.text})} \item{axis.text.x.top}{x axis tick labels on top axis (\code{element_text}; inherits from \code{axis.text.x})} \item{axis.text.y}{y axis tick labels (\code{element_text}; inherits from \code{axis.text})} \item{axis.text.y.right}{y axis tick labels on right axis (\code{element_text}; inherits from \code{axis.text.y})} \item{axis.ticks}{tick marks along axes (\code{element_line}; inherits from \code{line})} \item{axis.ticks.x}{x axis tick marks (\code{element_line}; inherits from \code{axis.ticks})} \item{axis.ticks.y}{y axis tick marks (\code{element_line}; inherits from \code{axis.ticks})} \item{axis.ticks.length}{length of tick marks (\code{unit})} \item{axis.line}{lines along axes (\code{element_line}; inherits from \code{line})} \item{axis.line.x}{line along x axis (\code{element_line}; inherits from \code{axis.line})} \item{axis.line.y}{line along y axis (\code{element_line}; inherits from \code{axis.line})} \item{legend.background}{background of legend (\code{element_rect}; inherits from \code{rect})} \item{legend.margin}{the margin around each legend (\code{margin})} \item{legend.spacing}{the spacing between legends (\code{unit})} \item{legend.spacing.x}{the horizontal spacing between legends (\code{unit}); inherits from \code{legend.spacing}} \item{legend.spacing.y}{the horizontal spacing between legends (\code{unit}); inherits from \code{legend.spacing}} \item{legend.key}{background underneath legend keys (\code{element_rect}; inherits from \code{rect})} \item{legend.key.size}{size of legend keys (\code{unit})} \item{legend.key.height}{key background height (\code{unit}; inherits from \code{legend.key.size})} \item{legend.key.width}{key background width (\code{unit}; inherits from \code{legend.key.size})} \item{legend.text}{legend item labels (\code{element_text}; inherits from \code{text})} \item{legend.text.align}{alignment of legend labels (number from 0 (left) to 1 (right))} \item{legend.title}{title of legend (\code{element_text}; inherits from \code{title})} \item{legend.title.align}{alignment of legend title (number from 0 (left) to 1 (right))} \item{legend.position}{the position of legends ("none", "left", "right", "bottom", "top", or two-element numeric vector)} \item{legend.direction}{layout of items in legends ("horizontal" or "vertical")} \item{legend.justification}{anchor point for positioning legend inside plot ("center" or two-element numeric vector) or the justification according to the plot area when positioned outside the plot} \item{legend.box}{arrangement of multiple legends ("horizontal" or "vertical")} \item{legend.box.just}{justification of each legend within the overall bounding box, when there are multiple legends ("top", "bottom", "left", or "right")} \item{legend.box.margin}{margins around the full legend area, as specified using \code{\link{margin}}} \item{legend.box.background}{background of legend area (\code{element_rect}; inherits from \code{rect})} \item{legend.box.spacing}{The spacing between the plotting area and the legend box (\code{unit})} \item{panel.background}{background of plotting area, drawn underneath plot (\code{element_rect}; inherits from \code{rect})} \item{panel.border}{border around plotting area, drawn on top of plot so that it covers tick marks and grid lines. This should be used with \code{fill=NA} (\code{element_rect}; inherits from \code{rect})} \item{panel.spacing}{spacing between facet panels (\code{unit})} \item{panel.spacing.x}{horizontal spacing between facet panels (\code{unit}; inherits from \code{panel.spacing})} \item{panel.spacing.y}{vertical spacing between facet panels (\code{unit}; inherits from \code{panel.spacing})} \item{panel.grid}{grid lines (\code{element_line}; inherits from \code{line})} \item{panel.grid.major}{major grid lines (\code{element_line}; inherits from \code{panel.grid})} \item{panel.grid.minor}{minor grid lines (\code{element_line}; inherits from \code{panel.grid})} \item{panel.grid.major.x}{vertical major grid lines (\code{element_line}; inherits from \code{panel.grid.major})} \item{panel.grid.major.y}{horizontal major grid lines (\code{element_line}; inherits from \code{panel.grid.major})} \item{panel.grid.minor.x}{vertical minor grid lines (\code{element_line}; inherits from \code{panel.grid.minor})} \item{panel.grid.minor.y}{horizontal minor grid lines (\code{element_line}; inherits from \code{panel.grid.minor})} \item{panel.ontop}{option to place the panel (background, gridlines) over the data layers. Usually used with a transparent or blank \code{panel.background}. (\code{logical})} \item{plot.background}{background of the entire plot (\code{element_rect}; inherits from \code{rect})} \item{plot.title}{plot title (text appearance) (\code{element_text}; inherits from \code{title}) left-aligned by default} \item{plot.subtitle}{plot subtitle (text appearance) (\code{element_text}; inherits from \code{title}) left-aligned by default} \item{plot.caption}{caption below the plot (text appearance) (\code{element_text}; inherits from \code{title}) right-aligned by default} \item{plot.margin}{margin around entire plot (\code{unit} with the sizes of the top, right, bottom, and left margins)} \item{strip.background}{background of facet labels (\code{element_rect}; inherits from \code{rect})} \item{strip.placement}{placement of strip with respect to axes, either "inside" or "outside". Only important when axes and strips are on the same side of the plot.} \item{strip.text}{facet labels (\code{element_text}; inherits from \code{text})} \item{strip.text.x}{facet labels along horizontal direction (\code{element_text}; inherits from \code{strip.text})} \item{strip.text.y}{facet labels along vertical direction (\code{element_text}; inherits from \code{strip.text})} \item{strip.switch.pad.grid}{space between strips and axes when strips are switched (\code{unit})} \item{strip.switch.pad.wrap}{space between strips and axes when strips are switched (\code{unit})} \item{...}{additional element specifications not part of base ggplot2. If supplied \code{validate} needs to be set to \code{FALSE}.} \item{complete}{set this to TRUE if this is a complete theme, such as the one returned \code{by theme_grey()}. Complete themes behave differently when added to a ggplot object. Also, when setting \code{complete = TRUE} all elements will be set to inherit from blank elements.} \item{validate}{\code{TRUE} to run validate_element, \code{FALSE} to bypass checks.} } \description{ Use \code{theme()} to modify individual components of a theme, allowing you to control the appearance of all non-data components of the plot. \code{theme()} only affects a single plot: see \code{\link{theme_update}} if you want modify the active theme, to affect all subsequent plots. } \section{Theme inheritance}{ Theme elements inherit properties from other theme elements. For example, \code{axis.title.x} inherits from \code{axis.title}, which in turn inherits from \code{text}. All text elements inherit directly or indirectly from \code{text}; all lines inherit from \code{line}, and all rectangular objects inherit from \code{rect}. This means that you can modify the appearance of multiple elements by setting a single high-level component. } \examples{ p1 <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + labs(title = "Fuel economy declines as weight increases") p1 # Plot --------------------------------------------------------------------- p1 + theme(plot.title = element_text(size = rel(2))) p1 + theme(plot.background = element_rect(fill = "green")) # Panels -------------------------------------------------------------------- p1 + theme(panel.background = element_rect(fill = "white", colour = "grey50")) p1 + theme(panel.border = element_rect(linetype = "dashed", fill = NA)) p1 + theme(panel.grid.major = element_line(colour = "black")) p1 + theme( panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank() ) # Put gridlines on top of data p1 + theme( panel.background = element_rect(fill = NA), panel.grid.major = element_line(colour = "grey50"), panel.ontop = TRUE ) # Axes ---------------------------------------------------------------------- p1 + theme(axis.line = element_line(size = 3, colour = "grey80")) p1 + theme(axis.text = element_text(colour = "blue")) p1 + theme(axis.ticks = element_line(size = 2)) p1 + theme(axis.ticks.length = unit(.25, "cm")) p1 + theme(axis.title.y = element_text(size = rel(1.5), angle = 90)) \donttest{ # Legend -------------------------------------------------------------------- p2 <- ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(colour = factor(cyl), shape = factor(vs))) + labs( x = "Weight (1000 lbs)", y = "Fuel economy (mpg)", colour = "Cylinders", shape = "Transmission" ) p2 # Position p2 + theme(legend.position = "none") p2 + theme(legend.justification = "top") p2 + theme(legend.position = "bottom") # Or place inside the plot using relative coordinates between 0 and 1 # legend.justification sets the corner that the position refers to p2 + theme( legend.position = c(.95, .95), legend.justification = c("right", "top"), legend.box.just = "right", legend.margin = margin(6, 6, 6, 6) ) # The legend.box properties work similarly for the space around # all the legends p2 + theme( legend.box.background = element_rect(), legend.box.margin = margin(6, 6, 6, 6) ) # You can also control the display of the keys # and the justifaction related to the plot area can be set p2 + theme(legend.key = element_rect(fill = "white", colour = "black")) p2 + theme(legend.text = element_text(size = 8, colour = "red")) p2 + theme(legend.title = element_text(face = "bold")) # Strips -------------------------------------------------------------------- p3 <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + facet_wrap(~ cyl) p3 p3 + theme(strip.background = element_rect(colour = "black", fill = "white")) p3 + theme(strip.text.x = element_text(colour = "white", face = "bold")) p3 + theme(panel.spacing = unit(1, "lines")) } } \seealso{ \code{\link{+.gg}} and \code{\link{\%+replace\%}}, \code{\link{element_blank}}, \code{\link{element_line}}, \code{\link{element_rect}}, and \code{\link{element_text}} for details of the specific theme elements. } ggplot2/man/geom_boxplot.Rd0000644000177400001440000001562513031506205015566 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-boxplot.r, R/stat-boxplot.r \name{geom_boxplot} \alias{geom_boxplot} \alias{stat_boxplot} \title{A box and whiskers plot (in the style of Tukey)} \usage{ geom_boxplot(mapping = NULL, data = NULL, stat = "boxplot", position = "dodge", ..., outlier.colour = NULL, outlier.color = NULL, outlier.fill = NULL, outlier.shape = 19, outlier.size = 1.5, outlier.stroke = 0.5, outlier.alpha = NULL, notch = FALSE, notchwidth = 0.5, varwidth = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_boxplot(mapping = NULL, data = NULL, geom = "boxplot", position = "dodge", ..., coef = 1.5, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{outlier.colour, outlier.color, outlier.fill, outlier.shape, outlier.size, outlier.stroke, outlier.alpha}{Default aesthetics for outliers. Set to \code{NULL} to inherit from the aesthetics used for the box. In the unlikely event you specify both US and UK spellings of colour, the US spelling will take precedence.} \item{notch}{if \code{FALSE} (default) make a standard box plot. If \code{TRUE}, make a notched box plot. Notches are used to compare groups; if the notches of two boxes do not overlap, this suggests that the medians are significantly different.} \item{notchwidth}{for a notched box plot, width of the notch relative to the body (default 0.5)} \item{varwidth}{if \code{FALSE} (default) make a standard box plot. If \code{TRUE}, boxes are drawn with widths proportional to the square-roots of the number of observations in the groups (possibly weighted, using the \code{weight} aesthetic).} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom, stat}{Use to override the default connection between \code{geom_boxplot} and \code{stat_boxplot}.} \item{coef}{length of the whiskers as multiple of IQR. Defaults to 1.5} } \description{ The boxplot compactly displays the distribution of a continuous variable. It visualises five summary statistics (the median, two hinges and two whiskers), and all "outlying" points individually. } \section{Summary statistics}{ The lower and upper hinges correspond to the first and third quartiles (the 25th and 75th percentiles). This differs slightly from the method used by the \code{boxplot} function, and may be apparent with small samples. See \code{\link{boxplot.stats}} for for more information on how hinge positions are calculated for \code{boxplot}. The upper whisker extends from the hinge to the largest value no further than 1.5 * IQR from the hinge (where IQR is the inter-quartile range, or distance between the first and third quartiles). The lower whisker extends from the hinge to the smallest value at most 1.5 * IQR of the hinge. Data beyond the end of the whiskers are called "outlying" points and are plotted individually. In a notched box plot, the notches extend \code{1.58 * IQR / sqrt(n)}. This gives a roughly 95\% confidence interval for comparing medians. See McGill et al. (1978) for more details. } \section{Aesthetics}{ \aesthetics{geom}{boxplot} } \section{Computed variables}{ \describe{ \item{width}{width of boxplot} \item{ymin}{lower whisker = smallest observation greater than or equal to lower hinge - 1.5 * IQR} \item{lower}{lower hinge, 25\% quantile} \item{notchlower}{lower edge of notch = median - 1.58 * IQR / sqrt(n)} \item{middle}{median, 50\% quantile} \item{notchupper}{upper edge of notch = median + 1.58 * IQR / sqrt(n)} \item{upper}{upper hinge, 75\% quantile} \item{ymax}{upper whisker = largest observation less than or equal to upper hinge + 1.5 * IQR} } } \examples{ p <- ggplot(mpg, aes(class, hwy)) p + geom_boxplot() p + geom_boxplot() + geom_jitter(width = 0.2) p + geom_boxplot() + coord_flip() p + geom_boxplot(notch = TRUE) p + geom_boxplot(varwidth = TRUE) p + geom_boxplot(fill = "white", colour = "#3366FF") # By default, outlier points match the colour of the box. Use # outlier.colour to override p + geom_boxplot(outlier.colour = "red", outlier.shape = 1) # Boxplots are automatically dodged when any aesthetic is a factor p + geom_boxplot(aes(colour = drv)) # You can also use boxplots with continuous x, as long as you supply # a grouping variable. cut_width is particularly useful ggplot(diamonds, aes(carat, price)) + geom_boxplot() ggplot(diamonds, aes(carat, price)) + geom_boxplot(aes(group = cut_width(carat, 0.25))) ggplot(diamonds, aes(carat, price)) + geom_boxplot(aes(group = cut_width(carat, 0.25)), outlier.alpha = 0.1) \donttest{ # It's possible to draw a boxplot with your own computations if you # use stat = "identity": y <- rnorm(100) df <- data.frame( x = 1, y0 = min(y), y25 = quantile(y, 0.25), y50 = median(y), y75 = quantile(y, 0.75), y100 = max(y) ) ggplot(df, aes(x)) + geom_boxplot( aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100), stat = "identity" ) } } \references{ McGill, R., Tukey, J. W. and Larsen, W. A. (1978) Variations of box plots. The American Statistician 32, 12-16. } \seealso{ \code{\link{geom_quantile}} for continuous x, \code{\link{geom_violin}} for a richer display of the distribution, and \code{\link{geom_jitter}} for a useful technique for small data. } ggplot2/man/geom_qq.Rd0000644000177400001440000000636013031506205014514 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-qq.r \name{geom_qq} \alias{geom_qq} \alias{stat_qq} \title{A quantile-quantile plot} \usage{ geom_qq(mapping = NULL, data = NULL, geom = "point", position = "identity", ..., distribution = stats::qnorm, dparams = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_qq(mapping = NULL, data = NULL, geom = "point", position = "identity", ..., distribution = stats::qnorm, dparams = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{geom}{The geometric object to use display the data} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{distribution}{Distribution function to use, if x not specified} \item{dparams}{Additional parameters passed on to \code{distribution} function.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ A quantile-quantile plot } \section{Aesthetics}{ \aesthetics{stat}{qq} } \section{Computed variables}{ \describe{ \item{sample}{sample quantiles} \item{theoretical}{theoretical quantiles} } } \examples{ \donttest{ df <- data.frame(y = rt(200, df = 5)) p <- ggplot(df, aes(sample = y)) p + stat_qq() p + geom_point(stat = "qq") # Use fitdistr from MASS to estimate distribution params params <- as.list(MASS::fitdistr(df$y, "t")$estimate) ggplot(df, aes(sample = y)) + stat_qq(distribution = qt, dparams = params["df"]) # Using to explore the distribution of a variable ggplot(mtcars) + stat_qq(aes(sample = mpg)) ggplot(mtcars) + stat_qq(aes(sample = mpg, colour = factor(cyl))) } } ggplot2/man/coord_trans.Rd0000644000177400001440000000512613031506205015400 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-transform.r \name{coord_trans} \alias{coord_trans} \title{Transformed Cartesian coordinate system} \usage{ coord_trans(x = "identity", y = "identity", limx = NULL, limy = NULL, xtrans, ytrans) } \arguments{ \item{x, y}{transformers for x and y axes} \item{limx, limy}{limits for x and y axes. (Named so for backward compatibility)} \item{xtrans, ytrans}{Deprecated; use \code{x} and \code{y} instead.} } \description{ \code{coord_trans} is different to scale transformations in that it occurs after statistical transformation and will affect the visual appearance of geoms - there is no guarantee that straight lines will continue to be straight. } \details{ Transformations only work with continuous values: see \code{\link[scales]{trans_new}} for list of transformations, and instructions on how to create your own. } \examples{ \donttest{ # See ?geom_boxplot for other examples # Three ways of doing transformation in ggplot: # * by transforming the data ggplot(diamonds, aes(log10(carat), log10(price))) + geom_point() # * by transforming the scales ggplot(diamonds, aes(carat, price)) + geom_point() + scale_x_log10() + scale_y_log10() # * by transforming the coordinate system: ggplot(diamonds, aes(carat, price)) + geom_point() + coord_trans(x = "log10", y = "log10") # The difference between transforming the scales and # transforming the coordinate system is that scale # transformation occurs BEFORE statistics, and coordinate # transformation afterwards. Coordinate transformation also # changes the shape of geoms: d <- subset(diamonds, carat > 0.5) ggplot(d, aes(carat, price)) + geom_point() + geom_smooth(method = "lm") + scale_x_log10() + scale_y_log10() ggplot(d, aes(carat, price)) + geom_point() + geom_smooth(method = "lm") + coord_trans(x = "log10", y = "log10") # Here I used a subset of diamonds so that the smoothed line didn't # drop below zero, which obviously causes problems on the log-transformed # scale # With a combination of scale and coordinate transformation, it's # possible to do back-transformations: ggplot(diamonds, aes(carat, price)) + geom_point() + geom_smooth(method = "lm") + scale_x_log10() + scale_y_log10() + coord_trans(x = scales::exp_trans(10), y = scales::exp_trans(10)) # cf. ggplot(diamonds, aes(carat, price)) + geom_point() + geom_smooth(method = "lm") # Also works with discrete scales df <- data.frame(a = abs(rnorm(26)),letters) plot <- ggplot(df,aes(a,letters)) + geom_point() plot + coord_trans(x = "log10") plot + coord_trans(x = "sqrt") } } ggplot2/man/scale_manual.Rd0000644000177400001440000000356613031506205015515 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-manual.r, R/zxx.r \name{scale_manual} \alias{scale_colour_manual} \alias{scale_fill_manual} \alias{scale_size_manual} \alias{scale_shape_manual} \alias{scale_linetype_manual} \alias{scale_alpha_manual} \alias{scale_color_manual} \title{Create your own discrete scale} \usage{ scale_colour_manual(..., values) scale_fill_manual(..., values) scale_size_manual(..., values) scale_shape_manual(..., values) scale_linetype_manual(..., values) scale_alpha_manual(..., values) } \arguments{ \item{...}{common discrete scale parameters: \code{name}, \code{breaks}, \code{labels}, \code{na.value}, \code{limits} and \code{guide}. See \code{\link{discrete_scale}} for more details} \item{values}{a set of aesthetic values to map data values to. If this is a named vector, then the values will be matched based on the names. If unnamed, values will be matched in order (usually alphabetical) with the limits of the scale. Any data values that don't match will be given \code{na.value}.} } \description{ This allows you to specify you own set of mappings from levels in the data to aesthetic values. } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = factor(cyl))) p + scale_colour_manual(values = c("red", "blue", "green")) # It's recommended to use a named vector cols <- c("8" = "red", "4" = "blue", "6" = "darkgreen", "10" = "orange") p + scale_colour_manual(values = cols) # As with other scales you can use breaks to control the appearance # of the legend. p + scale_colour_manual(values = cols) p + scale_colour_manual( values = cols, breaks = c("4", "6", "8"), labels = c("four", "six", "eight") ) # And limits to control the possible values of the scale p + scale_colour_manual(values = cols, limits = c("4", "8")) p + scale_colour_manual(values = cols, limits = c("4", "6", "8", "10")) } ggplot2/man/resolution.Rd0000644000177400001440000000151113031506206015261 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities-resolution.r \name{resolution} \alias{resolution} \title{Compute the "resolution" of a numeric vector} \usage{ resolution(x, zero = TRUE) } \arguments{ \item{x}{numeric vector} \item{zero}{should a zero value be automatically included in the computation of resolution} } \description{ The resolution is the smallest non-zero distance between adjacent values. If there is only one unique value, then the resolution is defined to be one. If x is an integer vector, then it is assumed to represent a discrete variable, and the resolution is 1. } \examples{ resolution(1:10) resolution((1:10) - 0.5) resolution((1:10) - 0.5, FALSE) # Note the difference between numeric and integer vectors resolution(c(2, 10, 20, 50)) resolution(c(2L, 10L, 20L, 50L)) } ggplot2/man/continuous_scale.Rd0000644000177400001440000000701513031506205016437 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-.r \name{continuous_scale} \alias{continuous_scale} \title{Continuous scale constructor.} \usage{ continuous_scale(aesthetics, scale_name, palette, name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, rescaler = rescale, oob = censor, expand = waiver(), na.value = NA_real_, trans = "identity", guide = "legend", position = "left", super = ScaleContinuous) } \arguments{ \item{aesthetics}{the names of the aesthetics that this scale works with} \item{scale_name}{the name of the scale} \item{palette}{a palette function that when called with a single integer argument (the number of levels in the scale) returns the values that they should take} \item{name}{The name of the scale. Used as axis or legend title. If \code{NULL}, the default, the name of the scale is taken from the first mapping used for that aesthetic.} \item{breaks}{One of: \itemize{ \item \code{NULL} for no breaks \item \code{waiver()} for the default breaks computed by the transformation object \item A numeric vector of positions \item A function that takes the limits as input and returns breaks as output }} \item{minor_breaks}{One of: \itemize{ \item \code{NULL} for no minor breaks \item \code{waiver()} for the default breaks (one minor break between each major break) \item A numeric vector of positions \item A function that given the limits returns a vector of minor breaks. }} \item{labels}{One of: \itemize{ \item \code{NULL} for no labels \item \code{waiver()} for the default labels computed by the transformation object \item A character vector giving labels (must be same length as \code{breaks}) \item A function that takes the breaks as input and returns labels as output }} \item{limits}{A numeric vector of length two providing limits of the scale. Use \code{NA} to refer to the existing minimum or maximum.} \item{rescaler}{Used by diverging and n colour gradients (i.e. \code{\link{scale_colour_gradient2}}, \code{\link{scale_colour_gradientn}}). A function used to scale the input values to the range [0, 1].} \item{oob}{Function that handles limits outside of the scale limits (out of bounds). The default replaces out of bounds values with NA.} \item{expand}{A numeric vector of length two giving multiplicative and additive expansion constants. These constants ensure that the data is placed some distance away from the axes. The defaults are \code{c(0.05, 0)} for continuous variables, and \code{c(0, 0.6)} for discrete variables.} \item{na.value}{Missing values will be replaced with this value.} \item{trans}{Either the name of a transformation object, or the object itself. Built-in transformations include "asn", "atanh", "boxcox", "exp", "identity", "log", "log10", "log1p", "log2", "logit", "probability", "probit", "reciprocal", "reverse" and "sqrt". A transformation object bundles together a transform, it's inverse, and methods for generating breaks and labels. Transformation objects are defined in the scales package, and are called \code{name_trans}, e.g. \code{\link[scales]{boxcox_trans}}. You can create your own transformation with \code{\link[scales]{trans_new}}.} \item{guide}{Name of guide object, or object itself.} \item{position}{The position of the axis. "left" or "right" for vertical scales, "top" or "bottom" for horizontal scales} \item{super}{The super class to use for the constructed scale} } \description{ Continuous scale constructor. } \keyword{internal} ggplot2/man/remove_missing.Rd0000644000177400001440000000167713031506205016120 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.r \name{remove_missing} \alias{remove_missing} \title{Convenience function to remove missing values from a data.frame} \usage{ remove_missing(df, na.rm = FALSE, vars = names(df), name = "", finite = FALSE) } \arguments{ \item{df}{data.frame} \item{na.rm}{If true, will suppress warning message.} \item{vars}{Character vector of variables to check for missings in} \item{name}{Optional function name to improve error message.} \item{finite}{If \code{TRUE}, will also remove non-finite values.} } \description{ Remove all non-complete rows, with a warning if \code{na.rm = FALSE}. ggplot is somewhat more accommodating of missing values than R generally. For those stats which require complete data, missing values will be automatically removed with a warning. If \code{na.rm = TRUE} is supplied to the statistic, the warning will be suppressed. } \keyword{internal} ggplot2/man/is.theme.Rd0000644000177400001440000000045213031506205014574 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme.r \name{is.theme} \alias{is.theme} \title{Reports whether x is a theme object} \usage{ is.theme(x) } \arguments{ \item{x}{An object to test} } \description{ Reports whether x is a theme object } \keyword{internal} ggplot2/man/facet_wrap.Rd0000644000177400001440000001060413031506205015173 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-wrap.r \name{facet_wrap} \alias{facet_wrap} \title{Wrap a 1d ribbon of panels into 2d} \usage{ facet_wrap(facets, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, switch = NULL, drop = TRUE, dir = "h", strip.position = "top") } \arguments{ \item{facets}{Either a formula or character vector. Use either a one sided formula, \code{~a + b}, or a character vector, \code{c("a", "b")}.} \item{nrow, ncol}{Number of rows and columns.} \item{scales}{should Scales be fixed (\code{"fixed"}, the default), free (\code{"free"}), or free in one dimension (\code{"free_x"}, \code{"free_y"}).} \item{shrink}{If \code{TRUE}, will shrink scales to fit output of statistics, not raw data. If \code{FALSE}, will be range of raw data before statistical summary.} \item{labeller}{A function that takes one data frame of labels and returns a list or data frame of character vectors. Each input column corresponds to one factor. Thus there will be more than one with formulae of the type \code{~cyl + am}. Each output column gets displayed as one separate line in the strip label. This function should inherit from the "labeller" S3 class for compatibility with \code{\link{labeller}()}. See \code{\link{label_value}} for more details and pointers to other options.} \item{as.table}{If \code{TRUE}, the default, the facets are laid out like a table with highest values at the bottom-right. If \code{FALSE}, the facets are laid out like a plot with the highest value at the top-right.} \item{switch}{By default, the labels are displayed on the top and right of the plot. If \code{"x"}, the top labels will be displayed to the bottom. If \code{"y"}, the right-hand side labels will be displayed to the left. Can also be set to \code{"both"}.} \item{drop}{If \code{TRUE}, the default, all factor levels not used in the data will automatically be dropped. If \code{FALSE}, all factor levels will be shown, regardless of whether or not they appear in the data.} \item{dir}{Direction: either "h" for horizontal, the default, or "v", for vertical.} \item{strip.position}{By default, the labels are displayed on the top of the plot. Using \code{strip.position} it is possible to place the labels on either of the four sides by setting \code{strip.position = c("top", "bottom", "left", "right")}} } \description{ \code{facet_wrap} wraps a 1d sequence of panels into 2d. This is generally a better use of screen space than \code{\link{facet_grid}} because most displays are roughly rectangular. } \examples{ ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~class) # Control the number of rows and columns with nrow and ncol ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~class, nrow = 4) \donttest{ # You can facet by multiple variables ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~ cyl + drv) # Or use a character vector: ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(c("cyl", "drv")) # Use the `labeller` option to control how labels are printed: ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(c("cyl", "drv"), labeller = "label_both") # To change the order in which the panels appear, change the levels # of the underlying factor. mpg$class2 <- reorder(mpg$class, mpg$displ) ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~class2) # By default, the same scales are used for all panels. You can allow # scales to vary across the panels with the `scales` argument. # Free scales make it easier to see patterns within each panel, but # harder to compare across panels. ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~class, scales = "free") # To repeat the same data in every panel, simply construct a data frame # that does not contain the facetting variable. ggplot(mpg, aes(displ, hwy)) + geom_point(data = transform(mpg, class = NULL), colour = "grey85") + geom_point() + facet_wrap(~class) # Use `strip.position` to display the facet labels at the side of your # choice. Setting it to `bottom` makes it act as a subtitle for the axis. # This is typically used with free scales and a theme without boxes around # strip labels. ggplot(economics_long, aes(date, value)) + geom_line() + facet_wrap(~variable, scales = "free_y", nrow = 2, strip.position = "bottom") + theme(strip.background = element_blank(), strip.placement = "outside") } } ggplot2/man/hmisc.Rd0000644000177400001440000000174113031506205014165 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-summary.r \name{hmisc} \alias{hmisc} \alias{mean_cl_boot} \alias{mean_cl_normal} \alias{mean_sdl} \alias{median_hilow} \title{A selection of summary functions from Hmisc} \usage{ mean_cl_boot(x, ...) mean_cl_normal(x, ...) mean_sdl(x, ...) median_hilow(x, ...) } \arguments{ \item{x}{a numeric vector} \item{...}{other arguments passed on to the respective Hmisc function.} } \value{ A data frame with columns \code{y}, \code{ymin}, and \code{ymax}. } \description{ These are wrappers around functions from \pkg{Hmsic} designed to make them easier to use with \code{\link{stat_summary}}. See the Hmisc documentation for more details: \itemize{ \item \code{\link[Hmisc]{smean.cl.boot}} \item \code{\link[Hmisc]{smean.cl.normal}} \item \code{\link[Hmisc]{smean.sdl}} \item \code{\link[Hmisc]{smedian.hilow}} } } \examples{ x <- rnorm(100) mean_cl_boot(x) mean_cl_normal(x) mean_sdl(x) median_hilow(x) } ggplot2/man/reexports.Rd0000644000177400001440000000130213031506205015106 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.r, R/utilities-grid.r \docType{import} \name{reexports} \alias{reexports} \alias{alpha} \alias{reexports} \alias{unit} \alias{reexports} \alias{arrow} \title{Objects exported from other packages} \examples{ ggplot(mpg, aes(displ, hwy)) + geom_point(alpha = 0.5, colour = "blue") ggplot(mpg, aes(displ, hwy)) + geom_point(colour = alpha("blue", 0.5)) } \keyword{internal} \description{ These objects are imported from other packages. Follow the links below to see their documentation. \describe{ \item{grid}{\code{\link[grid]{unit}}, \code{\link[grid]{arrow}}} \item{scales}{\code{\link[scales]{alpha}}} }} ggplot2/man/print.ggplot.Rd0000644000177400001440000000240413031506205015506 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot.r \name{print.ggplot} \alias{print.ggplot} \alias{plot.ggplot} \title{Explicitly draw plot} \usage{ \method{print}{ggplot}(x, newpage = is.null(vp), vp = NULL, ...) \method{plot}{ggplot}(x, newpage = is.null(vp), vp = NULL, ...) } \arguments{ \item{x}{plot to display} \item{newpage}{draw new (empty) page first?} \item{vp}{viewport to draw plot in} \item{...}{other arguments not used by this method} } \value{ Invisibly returns the result of \code{\link{ggplot_build}}, which is a list with components that contain the plot itself, the data, information about the scales, panels etc. } \description{ Generally, you do not need to print or plot a ggplot2 plot explicitly: the default top-level print method will do it for you. You will, however, need to call \code{print()} explicitly if you want to draw a plot inside a function or for loop. } \examples{ colours <- list(~class, ~drv, ~fl) # Doesn't seem to do anything! for (colour in colours) { ggplot(mpg, aes_(~ displ, ~ hwy, colour = colour)) + geom_point() } # Works when we explicitly print the plots for (colour in colours) { print(ggplot(mpg, aes_(~ displ, ~ hwy, colour = colour)) + geom_point()) } } \keyword{hplot} ggplot2/man/combine_vars.Rd0000644000177400001440000000145413031506205015532 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-.r \name{combine_vars} \alias{combine_vars} \title{Take input data and define a mapping between facetting variables and ROW, COL and PANEL keys} \usage{ combine_vars(data, env = emptyenv(), vars = NULL, drop = TRUE) } \arguments{ \item{data}{A list of data.frames, the first being the plot data and the subsequent individual layer data} \item{env}{The environment the vars should be evaluated in} \item{vars}{A list of quoted symbols matching columns in data} \item{drop}{should missing combinations/levels be dropped} } \value{ A data.frame with columns for PANEL, ROW, COL, and facetting vars } \description{ Take input data and define a mapping between facetting variables and ROW, COL and PANEL keys } \keyword{internal} ggplot2/man/scale_hue.Rd0000644000177400001440000000501513031506205015010 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-hue.r, R/zxx.r \name{scale_colour_hue} \alias{scale_colour_hue} \alias{scale_fill_hue} \alias{scale_colour_discrete} \alias{scale_fill_discrete} \alias{scale_color_discrete} \alias{scale_color_hue} \title{Evenly spaced colours for discrete data} \usage{ scale_colour_hue(..., h = c(0, 360) + 15, c = 100, l = 65, h.start = 0, direction = 1, na.value = "grey50") scale_fill_hue(..., h = c(0, 360) + 15, c = 100, l = 65, h.start = 0, direction = 1, na.value = "grey50") } \arguments{ \item{...}{Other arguments passed on to \code{\link{discrete_scale}} to control name, limits, breaks, labels and so forth.} \item{h}{range of hues to use, in [0, 360]} \item{c}{chroma (intensity of colour), maximum value varies depending on combination of hue and luminance.} \item{l}{luminance (lightness), in [0, 100]} \item{h.start}{hue to start at} \item{direction}{direction to travel around the colour wheel, 1 = clockwise, -1 = counter-clockwise} \item{na.value}{Colour to use for missing values} } \description{ This is the default colour scale for categorical variables. It maps each level to an evenly spaced hue on the colour wheel. It does not generate colour-blind safe palettes. } \examples{ \donttest{ dsamp <- diamonds[sample(nrow(diamonds), 1000), ] (d <- ggplot(dsamp, aes(carat, price)) + geom_point(aes(colour = clarity))) # Change scale label d + scale_colour_hue() d + scale_colour_hue("clarity") d + scale_colour_hue(expression(clarity[beta])) # Adjust luminosity and chroma d + scale_colour_hue(l = 40, c = 30) d + scale_colour_hue(l = 70, c = 30) d + scale_colour_hue(l = 70, c = 150) d + scale_colour_hue(l = 80, c = 150) # Change range of hues used d + scale_colour_hue(h = c(0, 90)) d + scale_colour_hue(h = c(90, 180)) d + scale_colour_hue(h = c(180, 270)) d + scale_colour_hue(h = c(270, 360)) # Vary opacity # (only works with pdf, quartz and cairo devices) d <- ggplot(dsamp, aes(carat, price, colour = clarity)) d + geom_point(alpha = 0.9) d + geom_point(alpha = 0.5) d + geom_point(alpha = 0.2) # Colour of missing values is controlled with na.value: miss <- factor(sample(c(NA, 1:5), nrow(mtcars), replace = TRUE)) ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = miss)) ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = miss)) + scale_colour_hue(na.value = "black") } } \seealso{ Other colour scales: \code{\link{scale_alpha}}, \code{\link{scale_colour_brewer}}, \code{\link{scale_colour_gradient}}, \code{\link{scale_colour_grey}} } ggplot2/man/seals.Rd0000644000177400001440000000132513031506205014167 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{seals} \alias{seals} \title{Vector field of seal movements} \format{A data frame with 1155 rows and 4 variables} \usage{ seals } \description{ This vector field was produced from the data described in Brillinger, D.R., Preisler, H.K., Ager, A.A. and Kie, J.G. "An exploratory data analysis (EDA) of the paths of moving animals". J. Statistical Planning and Inference 122 (2004), 43-63, using the methods of Brillinger, D.R., "Learning a potential function from a trajectory", Signal Processing Letters. December (2007). } \references{ \url{http://www.stat.berkeley.edu/~brill/Papers/jspifinal.pdf} } \keyword{datasets} ggplot2/man/translate_qplot_ggplot.Rd0000644000177400001440000000724413031506206017657 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/translate-qplot-ggplot.r \name{translate_qplot_ggplot} \alias{translate_qplot_ggplot} \title{Translating between qplot and ggplot} \description{ Within ggplot2, there are two basic methods to create plots, with qplot() and ggplot(). qplot() is designed primarily for interactive use: it makes a number of assumptions that speed most cases, but when designing multilayered plots with different data sources it can get in the way. This section describes what those defaults are, and how they map to the fuller ggplot() syntax. } \examples{ # By default, qplot() assumes that you want a scatterplot, # i.e., you want to use geom_point() # qplot(x, y, data = data) # ggplot(data, aes(x, y)) + geom_point() # Using Aesthetics # If you map additional aesthetics, these will be added to the defaults. With # qplot() there is no way to use different aesthetic mappings (or data) in # different layers # qplot(x, y, data = data, shape = shape, colour = colour) # ggplot(data, aes(x, y, shape = shape, colour = colour)) + geom_point() # # Aesthetic parameters in qplot() always try to map the aesthetic to a # variable. If the argument is not a variable but a value, effectively a new column # is added to the original dataset with that value. To set an aesthetic to a # value and override the default appearance, you surround the value with I() in # qplot(), or pass it as a parameter to the layer. # qplot(x, y, data = data, colour = I("red")) # ggplot(data, aes(x, y)) + geom_point(colour = "red") # Changing the geom parameter changes the geom added to the plot # qplot(x, y, data = data, geom = "line") # ggplot(data, aes(x, y)) + geom_line() # Not all geoms require both x and y, e.g., geom_bar() and geom_histogram(). # For these two geoms, if the y aesthetic is not supplied, both qplot and # ggplot commands default to "count" on the y-axis # ggplot(data, aes(x)) + geom_bar() # qplot(x, data = data, geom = "bar") # If a vector of multiple geom names is supplied to the geom argument, each # geom will be added in turn # qplot(x, y, data = data, geom = c("point", "smooth")) # ggplot(data, aes(x, y)) + geom_point() + geom_smooth() # Unlike the rest of ggplot2, stats and geoms are independent # qplot(x, y, data = data, stat = "bin") # ggplot(data, aes(x, y)) + geom_point(stat = "bin") # # Any layer parameters will be passed on to all layers. Most layers will ignore # parameters that they don't need # qplot(x, y, data = data, geom = c("point", "smooth"), method = "lm") # ggplot(data, aes(x, y)) + geom_point(method = "lm") + geom_smooth(method = "lm") # Scales and axes # You can control basic properties of the x and y scales with the xlim, ylim, # xlab and ylab arguments # qplot(x, y, data = data, xlim = c(1, 5), xlab = "my label") # ggplot(data, aes(x, y)) + geom_point() + # scale_x_continuous("my label", limits = c(1, 5)) # qplot(x, y, data = data, xlim = c(1, 5), ylim = c(10, 20)) # ggplot(data, aes(x, y)) + geom_point() + # scale_x_continuous(limits = c(1, 5)) + scale_y_continuous(limits = c(10, 20)) # Like plot(), qplot() has a convenient way of log transforming the axes. # qplot(x, y, data = data, log = "xy") # ggplot(data, aes(x, y)) + geom_point() + scale_x_log10() + scale_y_log10() # There are many other possible transformations, but not all are # accessible from within qplot(), see ?scale_continuous for more # Plot options # qplot() recognises the same options as plot does, and converts them to their # ggplot2 equivalents. See ?theme for more on ggplot options # qplot(x, y, data = data, main="title", asp = 1) # ggplot(data, aes(x, y)) + geom_point() + labs(title = "title") + theme(aspect.ratio = 1) } \keyword{internal} ggplot2/man/label_bquote.Rd0000644000177400001440000000212513031506205015515 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/labeller.r \name{label_bquote} \alias{label_bquote} \title{Label with mathematical expressions} \usage{ label_bquote(rows = NULL, cols = NULL, default = label_value) } \arguments{ \item{rows}{Backquoted labelling expression for rows.} \item{cols}{Backquoted labelling expression for columns.} \item{default}{Default labeller function for the rows or the columns when no plotmath expression is provided.} } \description{ \code{label_bquote()} offers a flexible way of labelling facet rows or columns with plotmath expressions. Backquoted variables will be replaced with their value in the facet. } \examples{ # The variables mentioned in the plotmath expression must be # backquoted and referred to by their names. p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() p + facet_grid(vs ~ ., labeller = label_bquote(alpha ^ .(vs))) p + facet_grid(. ~ vs, labeller = label_bquote(cols = .(vs) ^ .(vs))) p + facet_grid(. ~ vs + am, labeller = label_bquote(cols = .(am) ^ .(vs))) } \seealso{ \link{labellers}, \code{\link{labeller}()}, } ggplot2/man/render_axes.Rd0000644000177400001440000000206413031506205015360 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-.r \name{render_axes} \alias{render_axes} \title{Render panel axes} \usage{ render_axes(x = NULL, y = NULL, coord, theme, transpose = FALSE) } \arguments{ \item{x, y}{A list of ranges as available to the draw_panel method in \code{Facet} subclasses.} \item{coord}{A \code{Coord} object} \item{theme}{A \code{theme} object} \item{transpose}{Should the output be transposed?} } \value{ A list with the element "x" and "y" each containing axis specifications for the ranges passed in. Each axis specification is a list with a "top" and "bottom" element for x-axes and "left" and "right" element for y-axis, holding the respective axis grobs. Depending on the content of x and y some of the grobs might be zeroGrobs. If \code{transpose=TRUE} the content of the x and y elements will be transposed so e.g. all left-axes are collected in a left element as a list of grobs. } \description{ These helpers facilitates generating theme compliant axes when building up the plot. } \keyword{internal} ggplot2/man/stat_unique.Rd0000644000177400001440000000460213031506205015422 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-unique.r \name{stat_unique} \alias{stat_unique} \title{Remove duplicates} \usage{ stat_unique(mapping = NULL, data = NULL, geom = "point", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{geom}{The geometric object to use display the data} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ Remove duplicates } \section{Aesthetics}{ \aesthetics{stat}{unique} } \examples{ ggplot(mtcars, aes(vs, am)) + geom_point(alpha = 0.1) ggplot(mtcars, aes(vs, am)) + geom_point(alpha = 0.1, stat = "unique") } ggplot2/man/aes_group_order.Rd0000644000177400001440000000632713031506205016246 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes-group-order.r \name{aes_group_order} \alias{aes_group_order} \alias{group} \title{Aesthetics: grouping} \description{ Aesthetics: grouping } \examples{ \donttest{ # By default, the group is set to the interaction of all discrete variables in the # plot. This often partitions the data correctly, but when it does not, or when # no discrete variable is used in the plot, you will need to explicitly define the # grouping structure, by mapping group to a variable that has a different value # for each group. # For most applications you can simply specify the grouping with # various aesthetics (colour, shape, fill, linetype) or with facets. p <- ggplot(mtcars, aes(wt, mpg)) # A basic scatter plot p + geom_point(size = 4) # The colour aesthetic p + geom_point(aes(colour = factor(cyl)), size = 4) # Or you can use shape to distinguish the data p + geom_point(aes(shape = factor(cyl)), size = 4) # Using fill a <- ggplot(mtcars, aes(factor(cyl))) a + geom_bar() a + geom_bar(aes(fill = factor(cyl))) a + geom_bar(aes(fill = factor(vs))) # Using linetypes rescale01 <- function(x) (x - min(x)) / diff(range(x)) ec_scaled <- data.frame( date = economics$date, plyr::colwise(rescale01)(economics[, -(1:2)])) ecm <- reshape2::melt(ec_scaled, id.vars = "date") f <- ggplot(ecm, aes(date, value)) f + geom_line(aes(linetype = variable)) # Using facets k <- ggplot(diamonds, aes(carat, ..density..)) + geom_histogram(binwidth = 0.2) k + facet_grid(. ~ cut) # There are three common cases where the default is not enough, and we # will consider each one below. In the following examples, we will use a simple # longitudinal dataset, Oxboys, from the nlme package. It records the heights # (height) and centered ages (age) of 26 boys (Subject), measured on nine # occasions (Occasion). # Multiple groups with one aesthetic h <- ggplot(nlme::Oxboys, aes(age, height)) # A single line tries to connect all the observations h + geom_line() # The group aesthetic maps a different line for each subject h + geom_line(aes(group = Subject)) # Different groups on different layers h <- h + geom_line(aes(group = Subject)) # Using the group aesthetic with both geom_line() and geom_smooth() # groups the data the same way for both layers h + geom_smooth(aes(group = Subject), method = "lm", se = FALSE) # Changing the group aesthetic for the smoother layer # fits a single line of best fit across all boys h + geom_smooth(aes(group = 1), size = 2, method = "lm", se = FALSE) # Overriding the default grouping # The plot has a discrete scale but you want to draw lines that connect across # groups. This is the strategy used in interaction plots, profile plots, and parallel # coordinate plots, among others. For example, we draw boxplots of height at # each measurement occasion boysbox <- ggplot(nlme::Oxboys, aes(Occasion, height)) boysbox + geom_boxplot() # There is no need to specify the group aesthetic here; the default grouping # works because occasion is a discrete variable. To overlay individual trajectories # we again need to override the default grouping for that layer with aes(group = Subject) boysbox <- boysbox + geom_boxplot() boysbox + geom_line(aes(group = Subject), colour = "blue") } } ggplot2/man/scale_brewer.Rd0000644000177400001440000000777013031506205015527 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-brewer.r, R/zxx.r \name{scale_colour_brewer} \alias{scale_colour_brewer} \alias{scale_fill_brewer} \alias{scale_colour_distiller} \alias{scale_fill_distiller} \alias{scale_color_brewer} \alias{scale_color_distiller} \title{Sequential, diverging and qualitative colour scales from colorbrewer.org} \usage{ scale_colour_brewer(..., type = "seq", palette = 1, direction = 1) scale_fill_brewer(..., type = "seq", palette = 1, direction = 1) scale_colour_distiller(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") scale_fill_distiller(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") } \arguments{ \item{...}{Other arguments passed on to \code{\link{discrete_scale}} to control name, limits, breaks, labels and so forth.} \item{type}{One of seq (sequential), div (diverging) or qual (qualitative)} \item{palette}{If a string, will use that named palette. If a number, will index into the list of palettes of appropriate \code{type}} \item{direction}{Sets the order of colors in the scale. If 1, the default, colors are as output by \code{\link[RColorBrewer]{brewer.pal}}. If -1, the order of colors is reversed.} \item{values}{if colours should not be evenly positioned along the gradient this vector gives the position (between 0 and 1) for each colour in the \code{colours} vector. See \code{\link{rescale}} for a convience function to map an arbitrary range to between 0 and 1.} \item{space}{colour space in which to calculate gradient. Must be "Lab" - other values are deprecated.} \item{na.value}{Colour to use for missing values} \item{guide}{Type of legend. Use \code{"colourbar"} for continuous colour bar, or \code{"legend"} for discrete colour legend.} } \description{ The \code{brewer} scales provides sequential, diverging and qualitative colour schemes from ColorBrewer. These are particularly well suited to display discrete values on a map. See \url{http://colorbrewer2.org} for more information. } \details{ The \code{brewer} scales were carefully designed and tested on discrete data. They were not designed to be extended to continuous data, but results often look good. Your mileage may vary. } \note{ The \code{distiller} scales extends brewer to continuous scales by smoothly interpolate 6 colours from any palette to a continuous scale. } \section{Palettes}{ The following palettes are available for use with these scales: \describe{ \item{Diverging}{BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, Spectral} \item{Qualitative}{Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, Set3} \item{Sequential}{Blues, BuGn, BuPu, GnBu, Greens, Greys, Oranges, OrRd, PuBu, PuBuGn, PuRd, Purples, RdPu, Reds, YlGn, YlGnBu, YlOrBr, YlOrRd} } } \examples{ dsamp <- diamonds[sample(nrow(diamonds), 1000), ] (d <- ggplot(dsamp, aes(carat, price)) + geom_point(aes(colour = clarity))) d + scale_colour_brewer() # Change scale label d + scale_colour_brewer("Diamond\\nclarity") # Select brewer palette to use, see ?scales::brewer_pal for more details d + scale_colour_brewer(palette = "Greens") d + scale_colour_brewer(palette = "Set1") \donttest{ # scale_fill_brewer works just the same as # scale_colour_brewer but for fill colours p <- ggplot(diamonds, aes(x = price, fill = cut)) + geom_histogram(position = "dodge", binwidth = 1000) p + scale_fill_brewer() # the order of colour can be reversed p + scale_fill_brewer(direction = -1) # the brewer scales look better on a darker background p + scale_fill_brewer(direction = -1) + theme_dark() } # Use distiller variant with continous data v <- ggplot(faithfuld) + geom_tile(aes(waiting, eruptions, fill = density)) v v + scale_fill_distiller() v + scale_fill_distiller(palette = "Spectral") } \seealso{ Other colour scales: \code{\link{scale_alpha}}, \code{\link{scale_colour_gradient}}, \code{\link{scale_colour_grey}}, \code{\link{scale_colour_hue}} } ggplot2/man/annotation_raster.Rd0000644000177400001440000000316413031506205016615 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/annotation-raster.r \name{annotation_raster} \alias{annotation_raster} \title{Annotation: high-performance rectangular tiling} \usage{ annotation_raster(raster, xmin, xmax, ymin, ymax, interpolate = FALSE) } \arguments{ \item{raster}{raster object to display} \item{xmin, xmax}{x location (in data coordinates) giving horizontal location of raster} \item{ymin, ymax}{y location (in data coordinates) giving vertical location of raster} \item{interpolate}{If \code{TRUE} interpolate linearly, if \code{FALSE} (the default) don't interpolate.} } \description{ This is a special version of \code{\link{geom_raster}} optimised for static annotations that are the same in every panel. These annotations will not affect scales (i.e. the x and y axes will not grow to cover the range of the raster, and the raster must already have its own colours). This is useful for adding bitmap images. } \examples{ # Generate data rainbow <- matrix(hcl(seq(0, 360, length.out = 50 * 50), 80, 70), nrow = 50) ggplot(mtcars, aes(mpg, wt)) + geom_point() + annotation_raster(rainbow, 15, 20, 3, 4) # To fill up whole plot ggplot(mtcars, aes(mpg, wt)) + annotation_raster(rainbow, -Inf, Inf, -Inf, Inf) + geom_point() rainbow2 <- matrix(hcl(seq(0, 360, length.out = 10), 80, 70), nrow = 1) ggplot(mtcars, aes(mpg, wt)) + annotation_raster(rainbow2, -Inf, Inf, -Inf, Inf) + geom_point() rainbow2 <- matrix(hcl(seq(0, 360, length.out = 10), 80, 70), nrow = 1) ggplot(mtcars, aes(mpg, wt)) + annotation_raster(rainbow2, -Inf, Inf, -Inf, Inf, interpolate = TRUE) + geom_point() } ggplot2/man/scale_linetype.Rd0000644000177400001440000000243113031506205016057 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-linetype.r \name{scale_linetype} \alias{scale_linetype} \alias{scale_linetype_continuous} \alias{scale_linetype_discrete} \title{Scale for line patterns} \usage{ scale_linetype(..., na.value = "blank") scale_linetype_continuous(...) scale_linetype_discrete(..., na.value = "blank") } \arguments{ \item{...}{common discrete scale parameters: \code{name}, \code{breaks}, \code{labels}, \code{na.value}, \code{limits} and \code{guide}. See \code{\link{discrete_scale}} for more details} \item{na.value}{The linetype to use for \code{NA} values.} } \description{ Default line types based on a set supplied by Richard Pearson, University of Manchester. Continuous values can not be mapped to line types. } \examples{ base <- ggplot(economics_long, aes(date, value01)) base + geom_line(aes(group = variable)) base + geom_line(aes(linetype = variable)) # See scale_manual for more flexibility # Common line types ---------------------------- df_lines <- data.frame( linetype = factor( 1:4, labels = c("solid", "longdash", "dashed", "dotted") ) ) ggplot(df_lines) + geom_hline(aes(linetype = linetype, yintercept = 0), size = 2) + scale_linetype_identity() + facet_grid(linetype ~ .) + theme_void(20) } ggplot2/man/element_grob.Rd0000644000177400001440000000100413031506205015514 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-elements.r \name{element_grob} \alias{element_grob} \title{Generate grid grob from theme element} \usage{ element_grob(element, ...) } \arguments{ \item{element}{Theme element, i.e. \code{element_rect} or similar.} \item{...}{Other arguments to control specific of rendering. This is usually at least position. See the source code for individual methods.} } \description{ Generate grid grob from theme element } \keyword{internal} ggplot2/man/is.Coord.Rd0000644000177400001440000000040113031506205014532 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-.r \name{is.Coord} \alias{is.Coord} \title{Is this object a coordinate system?} \usage{ is.Coord(x) } \description{ Is this object a coordinate system? } \keyword{internal} ggplot2/man/scale_discrete.Rd0000644000177400001440000000447113031506205016036 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-discrete-.r \name{scale_x_discrete} \alias{scale_x_discrete} \alias{scale_y_discrete} \title{Position scales for discrete data} \usage{ scale_x_discrete(..., expand = waiver(), position = "bottom") scale_y_discrete(..., expand = waiver(), position = "left") } \arguments{ \item{...}{common discrete scale parameters: \code{name}, \code{breaks}, \code{labels}, \code{na.value}, \code{limits} and \code{guide}. See \code{\link{discrete_scale}} for more details} \item{expand}{a numeric vector of length two giving multiplicative and additive expansion constants. These constants ensure that the data is placed some distance away from the axes.} \item{position}{The position of the axis. \code{left} or \code{right} for y axes, \code{top} or \code{bottom} for x axes} } \description{ You can use continuous positions even with a discrete position scale - this allows you (e.g.) to place labels between bars in a bar chart. Continuous positions are numeric values starting at one for the first level, and increasing by one for each level (i.e. the labels are placed at integer positions). This is what allows jittering to work. } \examples{ ggplot(diamonds, aes(cut)) + geom_bar() \donttest{ # The discrete position scale is added automatically whenever you # have a discrete position. (d <- ggplot(subset(diamonds, carat > 1), aes(cut, clarity)) + geom_jitter()) d + scale_x_discrete("Cut") d + scale_x_discrete("Cut", labels = c("Fair" = "F","Good" = "G", "Very Good" = "VG","Perfect" = "P","Ideal" = "I")) # Use limits to adjust the which levels (and in what order) # are displayed d + scale_x_discrete(limits = c("Fair","Ideal")) # you can also use the short hand functions xlim and ylim d + xlim("Fair","Ideal", "Good") d + ylim("I1", "IF") # See ?reorder to reorder based on the values of another variable ggplot(mpg, aes(manufacturer, cty)) + geom_point() ggplot(mpg, aes(reorder(manufacturer, cty), cty)) + geom_point() ggplot(mpg, aes(reorder(manufacturer, displ), cty)) + geom_point() # Use abbreviate as a formatter to reduce long names ggplot(mpg, aes(reorder(manufacturer, displ), cty)) + geom_point() + scale_x_discrete(labels = abbreviate) } } \seealso{ Other position scales: \code{\link{scale_x_continuous}}, \code{\link{scale_x_date}} } ggplot2/man/coord_flip.Rd0000644000177400001440000000233713031506205015204 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-flip.r \name{coord_flip} \alias{coord_flip} \title{Cartesian coordinates with x and y flipped} \usage{ coord_flip(xlim = NULL, ylim = NULL, expand = TRUE) } \arguments{ \item{xlim}{Limits for the x and y axes.} \item{ylim}{Limits for the x and y axes.} \item{expand}{If \code{TRUE}, the default, adds a small expansion factor to the limits to ensure that data and axes don't overlap. If \code{FALSE}, limits are taken exactly from the data or \code{xlim}/\code{ylim}.} } \description{ Flip cartesian coordinates so that horizontal becomes vertical, and vertical, horizontal. This is primarily useful for converting geoms and statistics which display y conditional on x, to x conditional on y. } \examples{ # Very useful for creating boxplots, and other interval # geoms in the horizontal instead of vertical position. ggplot(diamonds, aes(cut, price)) + geom_boxplot() + coord_flip() h <- ggplot(diamonds, aes(carat)) + geom_histogram() h h + coord_flip() h + coord_flip() + scale_x_reverse() # You can also use it to flip line and area plots: df <- data.frame(x = 1:5, y = (1:5) ^ 2) ggplot(df, aes(x, y)) + geom_area() last_plot() + coord_flip() } ggplot2/man/geom_linerange.Rd0000644000177400001440000001100013031506205016022 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-crossbar.r, R/geom-errorbar.r, % R/geom-linerange.r, R/geom-pointrange.r \name{geom_crossbar} \alias{geom_crossbar} \alias{geom_errorbar} \alias{geom_linerange} \alias{geom_pointrange} \title{Vertical intervals: lines, crossbars & errorbars} \usage{ geom_crossbar(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., fatten = 2.5, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_errorbar(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_linerange(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_pointrange(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., fatten = 4, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{fatten}{A multiplicative factor used to increase the size of the middle bar in \code{geom_crossbar()} and the middle point in \code{geom_pointrange()}.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ Various ways of representing a vertical interval defined by \code{x}, \code{ymin} and \code{ymax}. Each case draws a single graphical object. } \section{Aesthetics}{ \aesthetics{geom}{linerange} } \examples{ #' # Create a simple example dataset df <- data.frame( trt = factor(c(1, 1, 2, 2)), resp = c(1, 5, 3, 4), group = factor(c(1, 2, 1, 2)), upper = c(1.1, 5.3, 3.3, 4.2), lower = c(0.8, 4.6, 2.4, 3.6) ) p <- ggplot(df, aes(trt, resp, colour = group)) p + geom_linerange(aes(ymin = lower, ymax = upper)) p + geom_pointrange(aes(ymin = lower, ymax = upper)) p + geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2) p + geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) # Draw lines connecting group means p + geom_line(aes(group = group)) + geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) # If you want to dodge bars and errorbars, you need to manually # specify the dodge width p <- ggplot(df, aes(trt, resp, fill = group)) p + geom_col(position = "dodge") + geom_errorbar(aes(ymin = lower, ymax = upper), position = "dodge", width = 0.25) # Because the bars and errorbars have different widths # we need to specify how wide the objects we are dodging are dodge <- position_dodge(width=0.9) p + geom_col(position = dodge) + geom_errorbar(aes(ymin = lower, ymax = upper), position = dodge, width = 0.25) } \seealso{ \code{\link{stat_summary}} for examples of these guys in use, \code{\link{geom_smooth}} for continuous analog, \code{\link{geom_errorbarh}} for a horizontal error bar. } ggplot2/man/mpg.Rd0000644000177400001440000000171013031506205013641 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{mpg} \alias{mpg} \title{Fuel economy data from 1999 and 2008 for 38 popular models of car} \format{A data frame with 234 rows and 11 variables \describe{ \item{manufacturer}{} \item{model}{model name} \item{displ}{engine displacement, in litres} \item{year}{year of manufacture} \item{cyl}{number of cylinders} \item{trans}{type of transmission} \item{drv}{f = front-wheel drive, r = rear wheel drive, 4 = 4wd} \item{cty}{city miles per gallon} \item{hwy}{highway miles per gallon} \item{fl}{fuel type} \item{class}{"type" of car} }} \usage{ mpg } \description{ This dataset contains a subset of the fuel economy data that the EPA makes available on \url{http://fueleconomy.gov}. It contains only models which had a new release every year between 1999 and 2008 - this was used as a proxy for the popularity of the car. } \keyword{datasets} ggplot2/man/stat_identity.Rd0000644000177400001440000000421413031506205015744 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-identity.r \name{stat_identity} \alias{stat_identity} \title{Leave data as is} \usage{ stat_identity(mapping = NULL, data = NULL, geom = "point", position = "identity", ..., show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{geom}{The geometric object to use display the data} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ The identity statistic leaves the data unchanged. } \examples{ p <- ggplot(mtcars, aes(wt, mpg)) p + stat_identity() } ggplot2/man/layer.Rd0000644000177400001440000000571513031506205014203 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/layer.r \name{layer} \alias{layer} \title{Create a new layer} \usage{ layer(geom = NULL, stat = NULL, data = NULL, mapping = NULL, position = NULL, params = list(), inherit.aes = TRUE, check.aes = TRUE, check.param = TRUE, subset = NULL, show.legend = NA) } \arguments{ \item{geom}{The geometric object to use display the data} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{params}{Additional parameters to the \code{geom} and \code{stat}.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{check.aes, check.param}{If \code{TRUE}, the default, will check that supplied parameters and aesthetics are understood by the \code{geom} or \code{stat}. Use \code{FALSE} to suppress the checks.} \item{subset}{DEPRECATED. An older way of subsetting the dataset used in a layer.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} } \description{ A layer is a combination of data, stat and geom with a potential position adjustment. Usually layers are created using \code{geom_*} or \code{stat_*} calls but it can also be created directly using this function. } \examples{ # geom calls are just a short cut for layer ggplot(mpg, aes(displ, hwy)) + geom_point() # shortcut for ggplot(mpg, aes(displ, hwy)) + layer(geom = "point", stat = "identity", position = "identity", params = list(na.rm = FALSE) ) # use a function as data to plot a subset of global data ggplot(mpg, aes(displ, hwy)) + layer(geom = "point", stat = "identity", position = "identity", data = head, params = list(na.rm = FALSE) ) } \keyword{internal} ggplot2/man/geom_hex.Rd0000644000177400001440000000661013031506205014655 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-hex.r, R/stat-binhex.r \name{geom_hex} \alias{geom_hex} \alias{stat_bin_hex} \alias{stat_binhex} \title{Hexagonal heatmap of 2d bin counts} \usage{ geom_hex(mapping = NULL, data = NULL, stat = "binhex", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_bin_hex(mapping = NULL, data = NULL, geom = "hex", position = "identity", ..., bins = 30, binwidth = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom, stat}{Override the default connection between \code{geom_hex} and \code{stat_binhex.}} \item{bins}{numeric vector giving number of bins in both vertical and horizontal directions. Set to 30 by default.} \item{binwidth}{Numeric vector giving bin width in both vertical and horizontal directions. Overrides \code{bins} if both set.} } \description{ Divides the plane into regular hexagons, counts the number of cases in each hexagon, and then (by default) maps the number of cases to the hexagon fill. Hexagon bins avoid the visual artefacts sometimes generated by the very regular alignment of \code{\link{geom_bin2d}}. } \section{Aesthetics}{ \aesthetics{geom}{hex} } \examples{ d <- ggplot(diamonds, aes(carat, price)) d + geom_hex() \donttest{ # You can control the size of the bins by specifying the number of # bins in each direction: d + geom_hex(bins = 10) d + geom_hex(bins = 30) # Or by specifying the width of the bins d + geom_hex(binwidth = c(1, 1000)) d + geom_hex(binwidth = c(.1, 500)) } } \seealso{ \code{\link{stat_bin2d}} for rectangular binning } ggplot2/man/position_jitterdodge.Rd0000644000177400001440000000225313031506205017311 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-jitterdodge.R \name{position_jitterdodge} \alias{position_jitterdodge} \title{Simultaneously dodge and jitter} \usage{ position_jitterdodge(jitter.width = NULL, jitter.height = 0, dodge.width = 0.75) } \arguments{ \item{jitter.width}{degree of jitter in x direction. Defaults to 40\% of the resolution of the data.} \item{jitter.height}{degree of jitter in y direction. Defaults to 0.} \item{dodge.width}{the amount to dodge in the x direction. Defaults to 0.75, the default \code{position_dodge()} width.} } \description{ This is primarily used for aligning points generated through \code{geom_point()} with dodged boxplots (e.g., a \code{geom_boxplot()} with a fill aesthetic supplied). } \examples{ dsub <- diamonds[ sample(nrow(diamonds), 1000), ] ggplot(dsub, aes(x = cut, y = carat, fill = clarity)) + geom_boxplot(outlier.size = 0) + geom_point(pch = 21, position = position_jitterdodge()) } \seealso{ Other position adjustments: \code{\link{position_dodge}}, \code{\link{position_identity}}, \code{\link{position_jitter}}, \code{\link{position_nudge}}, \code{\link{position_stack}} } ggplot2/man/position_nudge.Rd0000644000177400001440000000214313031506205016105 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-nudge.R \name{position_nudge} \alias{position_nudge} \title{Nudge points a fixed distance} \usage{ position_nudge(x = 0, y = 0) } \arguments{ \item{x, y}{Amount of vertical and horizontal distance to move.} } \description{ \code{position_nudge} is generally useful for adjusting the position of items on discrete scales by a small amount. Nudging is built in to \code{\link{geom_text}} because it's so useful for moving labels a small distance from what they're labelling. } \examples{ df <- data.frame( x = c(1,3,2,5), y = c("a","c","d","c") ) ggplot(df, aes(x, y)) + geom_point() + geom_text(aes(label = y)) ggplot(df, aes(x, y)) + geom_point() + geom_text(aes(label = y), position = position_nudge(y = -0.1)) # Or, in brief ggplot(df, aes(x, y)) + geom_point() + geom_text(aes(label = y), nudge_y = -0.1) } \seealso{ Other position adjustments: \code{\link{position_dodge}}, \code{\link{position_identity}}, \code{\link{position_jitterdodge}}, \code{\link{position_jitter}}, \code{\link{position_stack}} } ggplot2/man/mean_se.Rd0000644000177400001440000000071413031506205014470 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-summary.r \name{mean_se} \alias{mean_se} \title{Calculate mean and standard error} \usage{ mean_se(x, mult = 1) } \arguments{ \item{x}{numeric vector} \item{mult}{number of multiples of standard error} } \value{ A data frame with columns \code{y}, \code{ymin}, and \code{ymax}. } \description{ For use with \code{\link{stat_summary}} } \examples{ x <- rnorm(100) mean_se(x) } ggplot2/man/geom_bar.Rd0000644000177400001440000001364513031506205014643 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-bar.r, R/geom-col.r, R/stat-count.r \name{geom_bar} \alias{geom_bar} \alias{geom_col} \alias{stat_count} \title{Bars charts} \usage{ geom_bar(mapping = NULL, data = NULL, stat = "count", position = "stack", ..., width = NULL, binwidth = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_col(mapping = NULL, data = NULL, position = "stack", ..., width = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_count(mapping = NULL, data = NULL, geom = "bar", position = "stack", ..., width = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{width}{Bar width. By default, set to 90\% of the resolution of the data.} \item{binwidth}{\code{geom_bar} no longer has a binwidth argument - if you use it you'll get an warning telling to you use \code{\link{geom_histogram}} instead.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom, stat}{Override the default connection between \code{geom_bar} and \code{stat_count}.} } \description{ There are two types of bar charts: \code{geom_bar} makes the height of the bar proportional to the number of cases in each group (or if the \code{weight} aethetic is supplied, the sum of the weights). If you want the heights of the bars to represent values in the data, use \link{geom_col} instead. \code{geom_bar} uses \code{stat_count} by default: it counts the number of cases at each x position. \code{geom_col} uses \code{stat_identity}: it leaves the data as is. } \details{ A bar chart uses height to represent a value, and so the base of the bar must always be shown to produce a valid visual comparison. Naomi Robbins has a nice \href{http://www.b-eye-network.com/view/index.php?cid=2468}{article on this topic}. This is why it doesn't make sense to use a log-scaled y axis with a bar chart. By default, multiple bar occupying the same \code{x} position will be stacked atop one another by \code{\link{position_stack}}. If you want them to be dodged side-to-side, use \code{\link{position_dodge}}. Finally, \code{\link{position_fill}} shows relative proportions at each \code{x} by stacking the bars and then standardising each bar to have the same height. } \section{Aesthetics}{ \aesthetics{geom}{bar} } \section{Computed variables}{ \describe{ \item{count}{number of points in bin} \item{prop}{groupwise proportion} } } \examples{ # geom_bar is designed to make it easy to create bar charts that show # counts (or sums of weights) g <- ggplot(mpg, aes(class)) # Number of cars in each class: g + geom_bar() # Total engine displacement of each class g + geom_bar(aes(weight = displ)) # To show (e.g.) means, you need geom_col() # And, even more succinctly with geom_col() df <- data.frame(trt = c("a", "b", "c"), outcome = c(2.3, 1.9, 3.2)) ggplot(df, aes(trt, outcome)) + geom_col() # But geom_point() displays exactly the same information and doesn't # require the y-axis to touch zero. ggplot(df, aes(trt, outcome)) + geom_point() # You can also use geom_bar() with continuous data, in which case # it will show counts at unique locations df <- data.frame(x = rep(c(2.9, 3.1, 4.5), c(5, 10, 4))) ggplot(df, aes(x)) + geom_bar() # cf. a histogram of the same data ggplot(df, aes(x)) + geom_histogram(binwidth = 0.5) \donttest{ # Bar charts are automatically stacked when multiple bars are placed # at the same location g + geom_bar(aes(fill = drv)) # You can instead dodge, or fill them g + geom_bar(aes(fill = drv), position = "dodge") g + geom_bar(aes(fill = drv), position = "fill") # To change plot order of bars, change levels in underlying factor reorder_size <- function(x) { factor(x, levels = names(sort(table(x)))) } ggplot(mpg, aes(reorder_size(class))) + geom_bar() } } \seealso{ \code{\link{geom_histogram}} for continuous data, \code{\link{position_dodge}} for creating side-by-side barcharts. \code{\link{stat_bin}}, which bins data in ranges and counts the cases in each range. It differs from \code{stat_count}, which counts the number of cases at each x position (without binning into ranges). \code{\link{stat_bin}} requires continuous x data, whereas \code{stat_count} can be used for both discrete and continuous x data. } ggplot2/man/macros/0000755000177400001440000000000012771315406014067 5ustar murdochusersggplot2/man/macros/aesthetics.Rd0000644000177400001440000000013612771316200016503 0ustar murdochusers\newcommand{\aesthetics}{\Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("#1", "#2")}} ggplot2/man/geom_map.Rd0000644000177400001440000000770613031506205014655 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-map.r \name{geom_map} \alias{geom_map} \title{Polygons from a reference map} \usage{ geom_map(mapping = NULL, data = NULL, stat = "identity", ..., map, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{map}{Data frame that contains the map coordinates. This will typically be created using \code{\link{fortify}} on a spatial object. It must contain columns \code{x} or \code{long}, \code{y} or \code{lat}, and \code{region} or \code{id}.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ This is pure annotation, so does not affect position scales. } \section{Aesthetics}{ \aesthetics{geom}{map} } \examples{ # When using geom_polygon, you will typically need two data frames: # one contains the coordinates of each polygon (positions), and the # other the values associated with each polygon (values). An id # variable links the two together ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) values <- data.frame( id = ids, value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5) ) positions <- data.frame( id = rep(ids, each = 4), x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) ) ggplot(values) + geom_map(aes(map_id = id), map = positions) + expand_limits(positions) ggplot(values, aes(fill = value)) + geom_map(aes(map_id = id), map = positions) + expand_limits(positions) ggplot(values, aes(fill = value)) + geom_map(aes(map_id = id), map = positions) + expand_limits(positions) + ylim(0, 3) # Better example crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests) crimesm <- reshape2::melt(crimes, id = 1) if (require(maps)) { states_map <- map_data("state") ggplot(crimes, aes(map_id = state)) + geom_map(aes(fill = Murder), map = states_map) + expand_limits(x = states_map$long, y = states_map$lat) last_plot() + coord_map() ggplot(crimesm, aes(map_id = state)) + geom_map(aes(fill = value), map = states_map) + expand_limits(x = states_map$long, y = states_map$lat) + facet_wrap( ~ variable) } } ggplot2/man/stat_summary_2d.Rd0000644000177400001440000000773513031506205016210 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-summary-2d.r, R/stat-summary-hex.r \name{stat_summary_2d} \alias{stat_summary_2d} \alias{stat_summary2d} \alias{stat_summary_hex} \title{Bin and summarise in 2d (rectangle & hexagons)} \usage{ stat_summary_2d(mapping = NULL, data = NULL, geom = "tile", position = "identity", ..., bins = 30, binwidth = NULL, drop = TRUE, fun = "mean", fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_summary_hex(mapping = NULL, data = NULL, geom = "hex", position = "identity", ..., bins = 30, binwidth = NULL, drop = TRUE, fun = "mean", fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{geom}{The geometric object to use display the data} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{bins}{numeric vector giving number of bins in both vertical and horizontal directions. Set to 30 by default.} \item{binwidth}{Numeric vector giving bin width in both vertical and horizontal directions. Overrides \code{bins} if both set.} \item{drop}{drop if the output of \code{fun} is \code{NA}.} \item{fun}{function for summary.} \item{fun.args}{A list of extra arguments to pass to \code{fun}} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ \code{stat_summary_2d} is a 2d variation of \code{\link{stat_summary}}. \code{stat_summary_hex} is a hexagonal variation of \code{\link{stat_summary_2d}}. The data are divided into bins defined by \code{x} and \code{y}, and then the values of \code{z} in each cell is are summarised with \code{fun}. } \section{Aesthetics}{ \itemize{ \item \code{x}: horizontal position \item \code{y}: vertical position \item \code{z}: value passed to the summary function } } \section{Computed variables}{ \describe{ \item{x,y}{Location} \item{value}{Value of summary statistic.} } } \examples{ d <- ggplot(diamonds, aes(carat, depth, z = price)) d + stat_summary_2d() # Specifying function d + stat_summary_2d(fun = function(x) sum(x^2)) d + stat_summary_2d(fun = var) d + stat_summary_2d(fun = "quantile", fun.args = list(probs = 0.1)) if (requireNamespace("hexbin")) { d + stat_summary_hex() } } \seealso{ \code{\link{stat_summary_hex}} for hexagonal summarization. \code{\link{stat_bin2d}} for the binning options. } ggplot2/man/coord_cartesian.Rd0000644000177400001440000000421313031506205016216 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-cartesian-.r \name{coord_cartesian} \alias{coord_cartesian} \title{Cartesian coordinates} \usage{ coord_cartesian(xlim = NULL, ylim = NULL, expand = TRUE) } \arguments{ \item{xlim, ylim}{Limits for the x and y axes.} \item{expand}{If \code{TRUE}, the default, adds a small expansion factor to the limits to ensure that data and axes don't overlap. If \code{FALSE}, limits are taken exactly from the data or \code{xlim}/\code{ylim}.} } \description{ The Cartesian coordinate system is the most familiar, and common, type of coordinate system. Setting limits on the coordinate system will zoom the plot (like you're looking at it with a magnifying glass), and will not change the underlying data like setting limits on a scale will. } \examples{ # There are two ways of zooming the plot display: with scales or # with coordinate systems. They work in two rather different ways. p <- ggplot(mtcars, aes(disp, wt)) + geom_point() + geom_smooth() p # Setting the limits on a scale converts all values outside the range to NA. p + scale_x_continuous(limits = c(325, 500)) # Setting the limits on the coordinate system performs a visual zoom. # The data is unchanged, and we just view a small portion of the original # plot. Note how smooth continues past the points visible on this plot. p + coord_cartesian(xlim = c(325, 500)) # By default, the same expansion factor is applied as when setting scale # limits. You can set the limits precisely by setting expand = FALSE p + coord_cartesian(xlim = c(325, 500), expand = FALSE) # Simiarly, we can use expand = FALSE to turn off expansion with the # default limits p + coord_cartesian(expand = FALSE) # You can see the same thing with this 2d histogram d <- ggplot(diamonds, aes(carat, price)) + stat_bin2d(bins = 25, colour = "white") d # When zooming the scale, the we get 25 new bins that are the same # size on the plot, but represent smaller regions of the data space d + scale_x_continuous(limits = c(0, 1)) # When zooming the coordinate system, we see a subset of original 50 bins, # displayed bigger d + coord_cartesian(xlim = c(0, 1)) } ggplot2/man/geom_point.Rd0000644000177400001440000001300513031506205015216 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-point.r \name{geom_point} \alias{geom_point} \title{Points} \usage{ geom_point(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} } \description{ The point geom is used to create scatterplots. The scatterplot is most useful for displaying the relationship between two continuous variables. It can be used to compare one continuous and one categorical variable, or two categorical variables, but a variation like \code{\link{geom_jitter}}, \code{\link{geom_count}}, or \code{\link{geom_bin2d}} is usually more appropriate. } \details{ The \emph{bubblechart} is a scatterplot with a third variable mapped to the size of points. There are no special names for scatterplots where another variable is mapped to point shape or colour, however. } \section{Overplotting}{ The biggest potential problem with a scatterplot is overplotting: whenever you have more than a few points, points may be plotted on top of one another. This can severely distort the visual appearance of the plot. There is no one solution to this problem, but there are some techniques that can help. You can add additional information with \code{\link{geom_smooth}}, \code{\link{geom_quantile}} or \code{\link{geom_density_2d}}. If you have few unique x values, \code{\link{geom_boxplot}} may also be useful. Alternatively, you can summarise the number of points at each location and display that in some way, using \code{\link{geom_count}}, \code{\link{geom_hex}}, or \code{\link{geom_density2d}}. Another technique is to make the points transparent (e.g. \code{geom_point(alpha = 0.05)}) or very small (e.g. \code{geom_point(shape = ".")}). } \section{Aesthetics}{ \aesthetics{geom}{point} } \examples{ p <- ggplot(mtcars, aes(wt, mpg)) p + geom_point() # Add aesthetic mappings p + geom_point(aes(colour = factor(cyl))) p + geom_point(aes(shape = factor(cyl))) p + geom_point(aes(size = qsec)) # Change scales p + geom_point(aes(colour = cyl)) + scale_colour_gradient(low = "blue") p + geom_point(aes(shape = factor(cyl))) + scale_shape(solid = FALSE) # Set aesthetics to fixed value ggplot(mtcars, aes(wt, mpg)) + geom_point(colour = "red", size = 3) \donttest{ # Varying alpha is useful for large datasets d <- ggplot(diamonds, aes(carat, price)) d + geom_point(alpha = 1/10) d + geom_point(alpha = 1/20) d + geom_point(alpha = 1/100) } # For shapes that have a border (like 21), you can colour the inside and # outside separately. Use the stroke aesthetic to modify the width of the # border ggplot(mtcars, aes(wt, mpg)) + geom_point(shape = 21, colour = "black", fill = "white", size = 5, stroke = 5) \donttest{ # You can create interesting shapes by layering multiple points of # different sizes p <- ggplot(mtcars, aes(mpg, wt, shape = factor(cyl))) p + geom_point(aes(colour = factor(cyl)), size = 4) + geom_point(colour = "grey90", size = 1.5) p + geom_point(colour = "black", size = 4.5) + geom_point(colour = "pink", size = 4) + geom_point(aes(shape = factor(cyl))) # These extra layers don't usually appear in the legend, but we can # force their inclusion p + geom_point(colour = "black", size = 4.5, show.legend = TRUE) + geom_point(colour = "pink", size = 4, show.legend = TRUE) + geom_point(aes(shape = factor(cyl))) # geom_point warns when missing values have been dropped from the data set # and not plotted, you can turn this off by setting na.rm = TRUE mtcars2 <- transform(mtcars, mpg = ifelse(runif(32) < 0.2, NA, mpg)) ggplot(mtcars2, aes(wt, mpg)) + geom_point() ggplot(mtcars2, aes(wt, mpg)) + geom_point(na.rm = TRUE) } } ggplot2/man/presidential.Rd0000644000177400001440000000066313031506205015547 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{presidential} \alias{presidential} \title{Terms of 11 presidents from Eisenhower to Obama} \format{A data frame with 11 rows and 4 variables} \usage{ presidential } \description{ The names of each president, the start and end date of their term, and their party of 11 US presidents from Eisenhower to Obama. } \keyword{datasets} ggplot2/man/print.ggproto.Rd0000644000177400001440000000167413031506205015703 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ggproto.r \name{print.ggproto} \alias{print.ggproto} \alias{format.ggproto} \title{Format or print a ggproto object} \usage{ \method{print}{ggproto}(x, ..., flat = TRUE) \method{format}{ggproto}(x, ..., flat = TRUE) } \arguments{ \item{x}{A ggproto object to print.} \item{...}{If the ggproto object has a \code{print} method, further arguments will be passed to it. Otherwise, these arguments are unused.} \item{flat}{If \code{TRUE} (the default), show a flattened list of all local and inherited members. If \code{FALSE}, show the inheritance hierarchy.} } \description{ If a ggproto object has a \code{$print} method, this will call that method. Otherwise, it will print out the members of the object, and optionally, the members of the inherited objects. } \examples{ Dog <- ggproto( print = function(self, n) { cat("Woof!\\n") } ) Dog cat(format(Dog), "\\n") } ggplot2/man/labs.Rd0000644000177400001440000000311113031506205013774 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/labels.r \name{labs} \alias{labs} \alias{xlab} \alias{ylab} \alias{ggtitle} \title{Modify axis, legend, and plot labels} \usage{ labs(...) xlab(label) ylab(label) ggtitle(label, subtitle = NULL) } \arguments{ \item{...}{A list of new name-value pairs. The name should either be an aesthetic, or one of "title", "subtitle", or "caption".} \item{label}{The text for the axis, plot title or caption below the plot.} \item{subtitle}{the text for the subtitle for the plot which will be displayed below the title. Leave \code{NULL} for no subtitle.} } \description{ Good labels are critical for making your plots accessible to a wider audience. Ensure the axis and legend labels display the full variable name. Use the plot \code{title} and \code{subtitle} to explain the main findings. It's common to use the \code{caption} to provide information about the data source. } \details{ You can also set axis and legend labels in the individual scales (using the first argument, the \code{name}. I recommend doing that if you're changing other scale options. } \examples{ p <- ggplot(mtcars, aes(mpg, wt, colour = cyl)) + geom_point() p + labs(colour = "Cylinders") p + labs(x = "New x label") # The plot title appears at the top-left, with the subtitle # display in smaller text underneath it p + labs(title = "New plot title") p + labs(title = "New plot title", subtitle = "A subtitle") # The caption appears in the bottom-right, and is often used for # sources, notes or copyright p + labs(caption = "(based on data from ...)") } ggplot2/man/is.rel.Rd0000644000177400001440000000045113031506205014253 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-elements.r \name{is.rel} \alias{is.rel} \title{Reports whether x is a rel object} \usage{ is.rel(x) } \arguments{ \item{x}{An object to test} } \description{ Reports whether x is a rel object } \keyword{internal} ggplot2/man/msleep.Rd0000644000177400001440000000221313031506205014342 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{msleep} \alias{msleep} \title{An updated and expanded version of the mammals sleep dataset} \format{A data frame with 83 rows and 11 variables \describe{ \item{name}{common name} \item{genus}{} \item{vore}{carnivore, omnivore or herbivore?} \item{order}{} \item{conservation}{the conservation status of the animal} \item{sleep_total}{total amount of sleep, in hours} \item{sleep_rem}{rem sleep, in hours} \item{sleep_cycle}{length of sleep cycle, in hours} \item{awake}{amount of time spent awake, in hours} \item{brainwt}{brain weight in kilograms} \item{bodywt}{body weight in kilograms} }} \usage{ msleep } \description{ This is an updated and expanded version of the mammals sleep dataset. Updated sleep times and weights were taken from V. M. Savage and G. B. West. A quantitative, theoretical framework for understanding mammalian sleep. Proceedings of the National Academy of Sciences, 104 (3):1051-1056, 2007. } \details{ Additional variables order, conservation status and vore were added from wikipedia. } \keyword{datasets} ggplot2/man/scale_grey.Rd0000644000177400001440000000276113031506205015202 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-grey.r, R/zxx.r \name{scale_colour_grey} \alias{scale_colour_grey} \alias{scale_fill_grey} \alias{scale_color_grey} \title{Sequential grey colour scales} \usage{ scale_colour_grey(..., start = 0.2, end = 0.8, na.value = "red") scale_fill_grey(..., start = 0.2, end = 0.8, na.value = "red") } \arguments{ \item{...}{Other arguments passed on to \code{\link{discrete_scale}} to control name, limits, breaks, labels and so forth.} \item{start}{gray value at low end of palette} \item{end}{gray value at high end of palette} \item{na.value}{Colour to use for missing values} } \description{ Based on \code{\link{gray.colors}}. This is black and white equivalent of \code{\link{scale_colour_gradient}}. } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = factor(cyl))) p + scale_colour_grey() p + scale_colour_grey(end = 0) # You may want to turn off the pale grey background with this scale p + scale_colour_grey() + theme_bw() # Colour of missing values is controlled with na.value: miss <- factor(sample(c(NA, 1:5), nrow(mtcars), replace = TRUE)) ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = miss)) + scale_colour_grey() ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = miss)) + scale_colour_grey(na.value = "green") } \seealso{ Other colour scales: \code{\link{scale_alpha}}, \code{\link{scale_colour_brewer}}, \code{\link{scale_colour_gradient}}, \code{\link{scale_colour_hue}} } ggplot2/man/facet_grid.Rd0000644000177400001440000001403313031506205015147 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-grid-.r \name{facet_grid} \alias{facet_grid} \title{Lay out panels in a grid} \usage{ facet_grid(facets, margins = FALSE, scales = "fixed", space = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, switch = NULL, drop = TRUE) } \arguments{ \item{facets}{a formula with the rows (of the tabular display) on the LHS and the columns (of the tabular display) on the RHS; the dot in the formula is used to indicate there should be no faceting on this dimension (either row or column). The formula can also be provided as a string instead of a classical formula object} \item{margins}{either a logical value or a character vector. Margins are additional facets which contain all the data for each of the possible values of the faceting variables. If \code{FALSE}, no additional facets are included (the default). If \code{TRUE}, margins are included for all faceting variables. If specified as a character vector, it is the names of variables for which margins are to be created.} \item{scales}{Are scales shared across all facets (the default, \code{"fixed"}), or do they vary across rows (\code{"free_x"}), columns (\code{"free_y"}), or both rows and columns (\code{"free"})} \item{space}{If \code{"fixed"}, the default, all panels have the same size. If \code{"free_y"} their height will be proportional to the length of the y scale; if \code{"free_x"} their width will be proportional to the length of the x scale; or if \code{"free"} both height and width will vary. This setting has no effect unless the appropriate scales also vary.} \item{shrink}{If \code{TRUE}, will shrink scales to fit output of statistics, not raw data. If \code{FALSE}, will be range of raw data before statistical summary.} \item{labeller}{A function that takes one data frame of labels and returns a list or data frame of character vectors. Each input column corresponds to one factor. Thus there will be more than one with formulae of the type \code{~cyl + am}. Each output column gets displayed as one separate line in the strip label. This function should inherit from the "labeller" S3 class for compatibility with \code{\link{labeller}()}. See \code{\link{label_value}} for more details and pointers to other options.} \item{as.table}{If \code{TRUE}, the default, the facets are laid out like a table with highest values at the bottom-right. If \code{FALSE}, the facets are laid out like a plot with the highest value at the top-right.} \item{switch}{By default, the labels are displayed on the top and right of the plot. If \code{"x"}, the top labels will be displayed to the bottom. If \code{"y"}, the right-hand side labels will be displayed to the left. Can also be set to \code{"both"}.} \item{drop}{If \code{TRUE}, the default, all factor levels not used in the data will automatically be dropped. If \code{FALSE}, all factor levels will be shown, regardless of whether or not they appear in the data.} } \description{ \code{facet_grid} forms a matrix of panels defined by row and column facetting variables. It is most useful when you have two discrete variables, and all combinations of the variables exist in the data. } \examples{ p <- ggplot(mpg, aes(displ, cty)) + geom_point() p + facet_grid(. ~ cyl) p + facet_grid(drv ~ .) p + facet_grid(drv ~ cyl) # To change plot order of facet grid, # change the order of variable levels with factor() # If you combine a facetted dataset with a dataset that lacks those # facetting variables, the data will be repeated across the missing # combinations: df <- data.frame(displ = mean(mpg$displ), cty = mean(mpg$cty)) p + facet_grid(. ~ cyl) + geom_point(data = df, colour = "red", size = 2) # Free scales ------------------------------------------------------- # You can also choose whether the scales should be constant # across all panels (the default), or whether they should be allowed # to vary mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point() mt + facet_grid(. ~ cyl, scales = "free") # If scales and space are free, then the mapping between position # and values in the data will be the same across all panels. This # is particularly useful for categorical axes ggplot(mpg, aes(drv, model)) + geom_point() + facet_grid(manufacturer ~ ., scales = "free", space = "free") + theme(strip.text.y = element_text(angle = 0)) # Facet labels ------------------------------------------------------ p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() p # label_both() displays both variable name and value p + facet_grid(vs ~ cyl, labeller = label_both) # label_parsed() parses text into mathematical expressions, see ?plotmath mtcars$cyl2 <- factor(mtcars$cyl, labels = c("alpha", "beta", "sqrt(x, y)")) ggplot(mtcars, aes(wt, mpg)) + geom_point() + facet_grid(. ~ cyl2, labeller = label_parsed) # label_bquote() makes it easy to construct math expressions p + facet_grid(. ~ vs, labeller = label_bquote(cols = alpha ^ .(vs))) # The facet strips can be displayed near the axes with switch data <- transform(mtcars, am = factor(am, levels = 0:1, c("Automatic", "Manual")), gear = factor(gear, levels = 3:5, labels = c("Three", "Four", "Five")) ) p <- ggplot(data, aes(mpg, disp)) + geom_point() p + facet_grid(am ~ gear, switch = "both") # It looks better without boxes around the strips p + facet_grid(am ~ gear, switch = "both") + theme(strip.background = element_blank()) # Margins ---------------------------------------------------------- \donttest{ # Margins can be specified by logically (all yes or all no) or by specific # variables as (character) variable names mg <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() mg + facet_grid(vs + am ~ gear) mg + facet_grid(vs + am ~ gear, margins = TRUE) mg + facet_grid(vs + am ~ gear, margins = "am") # when margins are made over "vs", since the facets for "am" vary # within the values of "vs", the marginal facet for "vs" is also # a margin over "am". mg + facet_grid(vs + am ~ gear, margins = "vs") mg + facet_grid(vs + am ~ gear, margins = "gear") mg + facet_grid(vs + am ~ gear, margins = c("gear", "am")) } } ggplot2/man/find_panel.Rd0000644000177400001440000000130013031506205015150 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-.r \name{find_panel} \alias{find_panel} \alias{panel_cols} \alias{panel_rows} \title{Find panels in a gtable} \usage{ find_panel(table) panel_cols(table) panel_rows(table) } \arguments{ \item{table}{A gtable} } \value{ A data.frame with some or all of the columns t(op), r(ight), b(ottom), and l(eft) } \description{ These functions help detect the placement of panels in a gtable, if they are named with "panel" in the beginning. \code{find_panel} returns the extend of the panel area, while \code{panel_cols} and \code{panel_rows} returns the columns and rows that contains panels respectively. } \keyword{internal} ggplot2/man/aes_linetype_size_shape.Rd0000644000177400001440000000450513031506205017756 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes-linetype-size-shape.r \name{aes_linetype_size_shape} \alias{aes_linetype_size_shape} \alias{linetype} \alias{size} \alias{shape} \title{Differentiation related aesthetics: linetype, size, shape} \description{ This page demonstrates the usage of a sub-group of aesthetics; linetype, size and shape. } \examples{ # Line types should be specified with either an integer, a name, or with a string of # an even number (up to eight) of hexadecimal digits which give the lengths in # consecutive positions in the string. # 0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodash # Data df <- data.frame(x = 1:10 , y = 1:10) f <- ggplot(df, aes(x, y)) f + geom_line(linetype = 2) f + geom_line(linetype = "dotdash") # An example with hex strings, the string "33" specifies three units on followed # by three off and "3313" specifies three units on followed by three off followed # by one on and finally three off. f + geom_line(linetype = "3313") # Mapping line type from a variable ggplot(economics_long, aes(date, value01)) + geom_line(aes(linetype = variable)) # Size examples # Should be specified with a numerical value (in millimetres), # or from a variable source p <- ggplot(mtcars, aes(wt, mpg)) p + geom_point(size = 4) p + geom_point(aes(size = qsec)) p + geom_point(size = 2.5) + geom_hline(yintercept = 25, size = 3.5) # Shape examples # Shape takes four types of values: an integer in [0, 25], # a single character-- which uses that character as the plotting symbol, # a . to draw the smallest rectangle that is visible (i.e., about one pixel) # an NA to draw nothing p + geom_point() p + geom_point(shape = 5) p + geom_point(shape = "k", size = 3) p + geom_point(shape = ".") p + geom_point(shape = NA) # Shape can also be mapped from a variable p + geom_point(aes(shape = factor(cyl))) # A look at all 25 symbols df2 <- data.frame(x = 1:5 , y = 1:25, z = 1:25) s <- ggplot(df2, aes(x, y)) s + geom_point(aes(shape = z), size = 4) + scale_shape_identity() # While all symbols have a foreground colour, symbols 19-25 also take a # background colour (fill) s + geom_point(aes(shape = z), size = 4, colour = "Red") + scale_shape_identity() s + geom_point(aes(shape = z), size = 4, colour = "Red", fill = "Black") + scale_shape_identity() } ggplot2/man/ggplotGrob.Rd0000644000177400001440000000044613031506205015171 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-build.r \name{ggplotGrob} \alias{ggplotGrob} \title{Generate a ggplot2 plot grob.} \usage{ ggplotGrob(x) } \arguments{ \item{x}{ggplot2 object} } \description{ Generate a ggplot2 plot grob. } \keyword{internal} ggplot2/man/ggplot_gtable.Rd0000644000177400001440000000160313031506205015671 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-build.r \name{ggplot_gtable} \alias{ggplot_gtable} \title{Build a plot with all the usual bits and pieces.} \usage{ ggplot_gtable(data) } \arguments{ \item{data}{plot data generated by \code{\link{ggplot_build}}} \item{plot}{plot object} } \value{ a \code{\link{gtable}} object } \description{ This function builds all grobs necessary for displaying the plot, and stores them in a special data structure called a \code{\link{gtable}}. This object is amenable to programmatic manipulation, should you want to (e.g.) make the legend box 2 cm wide, or combine multiple plots into a single display, preserving aspect ratios across the plots. } \seealso{ \code{\link{print.ggplot}} and \code{link{benchplot}} for for functions that contain the complete set of steps for generating a ggplot2 plot. } \keyword{internal} ggplot2/man/geom_abline.Rd0000644000177400001440000001067113031506205015325 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-abline.r, R/geom-hline.r, R/geom-vline.r \name{geom_abline} \alias{geom_abline} \alias{geom_hline} \alias{geom_vline} \title{Reference lines: horizontal, vertical, and diagonal} \usage{ geom_abline(mapping = NULL, data = NULL, ..., slope, intercept, na.rm = FALSE, show.legend = NA) geom_hline(mapping = NULL, data = NULL, ..., yintercept, na.rm = FALSE, show.legend = NA) geom_vline(mapping = NULL, data = NULL, ..., xintercept, na.rm = FALSE, show.legend = NA) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{xintercept, yintercept, slope, intercept}{Parameters that control the position of the line. If these are set, \code{data}, \code{mapping} and \code{show.legend} are overridden} } \description{ These geoms add reference lines (sometimes called rules) to a plot, either horizontal, vertical, or diagonal (specified by slope and intercept). These are useful for annotating plots. } \details{ These geoms act slightly different to other geoms. You can supply the parameters in two ways: either as arguments to the layer function, or via aesthetics. If you use arguments, e.g. \code{geom_abline(intercept = 0, slope = 1)}, then behind the scenes the geom makes a new data frame containing just the data you've supplied. That means that the lines will be the same in all facets; if you want them to vary across facets, construct the data frame yourself and use aesthetics. Unlike most other geoms, these geoms do not inherit aesthetics from the plot default, because they do not understand x and y aesthetics which are commonly set in the plot. They also do not affect the x and y scales. } \section{Aesthetics}{ These geoms are drawn using with \code{\link{geom_line}} so support the same aesthetics: \code{alpha}, \code{colour}, \code{linetype} and \code{size}. They also each have aesthetics that control the position of the line: \itemize{ \item \code{geom_vline}: \code{xintercept} \item \code{geom_hline}: \code{yintercept} \item \code{geom_abline}: \code{slope} and \code{intercept} } } \examples{ p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() # Fixed values p + geom_vline(xintercept = 5) p + geom_vline(xintercept = 1:5) p + geom_hline(yintercept = 20) p + geom_abline() # Can't see it - outside the range of the data p + geom_abline(intercept = 20) # Calculate slope and intercept of line of best fit coef(lm(mpg ~ wt, data = mtcars)) p + geom_abline(intercept = 37, slope = -5) # But this is easier to do with geom_smooth: p + geom_smooth(method = "lm", se = FALSE) # To show different lines in different facets, use aesthetics p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() + facet_wrap(~ cyl) mean_wt <- data.frame(cyl = c(4, 6, 8), wt = c(2.28, 3.11, 4.00)) p + geom_hline(aes(yintercept = wt), mean_wt) # You can also control other aesthetics ggplot(mtcars, aes(mpg, wt, colour = wt)) + geom_point() + geom_hline(aes(yintercept = wt, colour = wt), mean_wt) + facet_wrap(~ cyl) } \seealso{ See \code{\link{geom_segment}} for a more general approach to adding straight line segments to a plot. } ggplot2/man/draw_key.Rd0000644000177400001440000000273613031506205014674 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/legend-draw.r \name{draw_key} \alias{draw_key} \alias{draw_key_point} \alias{draw_key_abline} \alias{draw_key_rect} \alias{draw_key_polygon} \alias{draw_key_blank} \alias{draw_key_boxplot} \alias{draw_key_crossbar} \alias{draw_key_path} \alias{draw_key_vpath} \alias{draw_key_dotplot} \alias{draw_key_pointrange} \alias{draw_key_smooth} \alias{draw_key_text} \alias{draw_key_label} \alias{draw_key_vline} \title{Key drawing functions} \usage{ draw_key_point(data, params, size) draw_key_abline(data, params, size) draw_key_rect(data, params, size) draw_key_polygon(data, params, size) draw_key_blank(data, params, size) draw_key_boxplot(data, params, size) draw_key_crossbar(data, params, size) draw_key_path(data, params, size) draw_key_vpath(data, params, size) draw_key_dotplot(data, params, size) draw_key_pointrange(data, params, size) draw_key_smooth(data, params, size) draw_key_text(data, params, size) draw_key_label(data, params, size) draw_key_vline(data, params, size) } \arguments{ \item{data}{A single row data frame containing the scaled aesthetics to display in this key} \item{params}{A list of additional parameters supplied to the geom.} \item{size}{Width and height of key in mm.} } \value{ A grid grob. } \description{ Each Geom has an associated function that draws the key when the geom needs to be displayed in a legend. These are the options built into ggplot2. } \keyword{internal} ggplot2/man/fortify.lm.Rd0000644000177400001440000000452213031506205015153 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-lm.r \name{fortify.lm} \alias{fortify.lm} \title{Supplement the data fitted to a linear model with model fit statistics.} \usage{ \method{fortify}{lm}(model, data = model$model, ...) } \arguments{ \item{model}{linear model} \item{data}{data set, defaults to data used to fit model} \item{...}{not used by this method} } \value{ The original data with extra columns: \item{.hat}{Diagonal of the hat matrix} \item{.sigma}{Estimate of residual standard deviation when corresponding observation is dropped from model} \item{.cooksd}{Cooks distance, \code{\link{cooks.distance}}} \item{.fitted}{Fitted values of model} \item{.resid}{Residuals} \item{.stdresid}{Standardised residuals} } \description{ If you have missing values in your model data, you may need to refit the model with \code{na.action = na.exclude}. } \examples{ mod <- lm(mpg ~ wt, data = mtcars) head(fortify(mod)) head(fortify(mod, mtcars)) plot(mod, which = 1) ggplot(mod, aes(.fitted, .resid)) + geom_point() + geom_hline(yintercept = 0) + geom_smooth(se = FALSE) ggplot(mod, aes(.fitted, .stdresid)) + geom_point() + geom_hline(yintercept = 0) + geom_smooth(se = FALSE) ggplot(fortify(mod, mtcars), aes(.fitted, .stdresid)) + geom_point(aes(colour = factor(cyl))) ggplot(fortify(mod, mtcars), aes(mpg, .stdresid)) + geom_point(aes(colour = factor(cyl))) plot(mod, which = 2) ggplot(mod) + stat_qq(aes(sample = .stdresid)) + geom_abline() plot(mod, which = 3) ggplot(mod, aes(.fitted, sqrt(abs(.stdresid)))) + geom_point() + geom_smooth(se = FALSE) plot(mod, which = 4) ggplot(mod, aes(seq_along(.cooksd), .cooksd)) + geom_col() plot(mod, which = 5) ggplot(mod, aes(.hat, .stdresid)) + geom_vline(size = 2, colour = "white", xintercept = 0) + geom_hline(size = 2, colour = "white", yintercept = 0) + geom_point() + geom_smooth(se = FALSE) ggplot(mod, aes(.hat, .stdresid)) + geom_point(aes(size = .cooksd)) + geom_smooth(se = FALSE, size = 0.5) plot(mod, which = 6) ggplot(mod, aes(.hat, .cooksd)) + geom_vline(xintercept = 0, colour = NA) + geom_abline(slope = seq(0, 3, by = 0.5), colour = "white") + geom_smooth(se = FALSE) + geom_point() ggplot(mod, aes(.hat, .cooksd)) + geom_point(aes(size = .cooksd / .hat)) + scale_size_area() } \keyword{internal} ggplot2/man/render_strips.Rd0000644000177400001440000000127213031506205015744 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-.r \name{render_strips} \alias{render_strips} \title{Render panel strips} \usage{ render_strips(x = NULL, y = NULL, labeller, theme) } \arguments{ \item{x, y}{A data.frame with a column for each variable and a row for each combination to draw} \item{labeller}{A labeller function} \item{theme}{a \code{theme} object} } \value{ A list with an "x" and a "y" element, each containing a "top" and "bottom" or "left" and "right" element respectively. These contains a list of rendered strips as gtables. } \description{ All positions are rendered and it is up to the facet to decide which to use } \keyword{internal} ggplot2/man/limits.Rd0000644000177400001440000000110513031506205014355 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/limits.r \name{limits} \alias{limits} \title{Generate correct scale type for specified limits} \usage{ limits(lims, var) } \arguments{ \item{var}{name of variable} \item{limits}{vector of limits} } \description{ Generate correct scale type for specified limits } \examples{ ggplot2:::limits(c(1, 5), "x") ggplot2:::limits(c(5, 1), "x") ggplot2:::limits(c("A", "b", "c"), "x") ggplot2:::limits(c("A", "b", "c"), "fill") ggplot2:::limits(as.Date(c("2008-01-01", "2009-01-01")), "x") } \keyword{internal} ggplot2/man/geom_density.Rd0000644000177400001440000001204113031506205015543 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-density.r, R/stat-density.r \name{geom_density} \alias{geom_density} \alias{stat_density} \title{Smoothed density estimates} \usage{ geom_density(mapping = NULL, data = NULL, stat = "density", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_density(mapping = NULL, data = NULL, geom = "area", position = "stack", ..., bw = "nrd0", adjust = 1, kernel = "gaussian", n = 512, trim = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), it is combined with the default mapping at the top level of the plot. You must supply \code{mapping} if there is no plot mapping.} \item{data}{The data to be displayed in this layer. There are three options: If \code{NULL}, the default, the data is inherited from the plot data as specified in the call to \code{\link{ggplot}}. A \code{data.frame}, or other object, will override the plot data. All objects will be fortified to produce a data frame. See \code{\link{fortify}} for which variables will be created. A \code{function} will be called with a single argument, the plot data. The return value must be a \code{data.frame.}, and will be used as the layer data.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{...}{other arguments passed on to \code{\link{layer}}. These are often aesthetics, used to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. They may also be parameters to the paired geom/stat.} \item{na.rm}{If \code{FALSE}, the default, missing values are removed with a warning. If \code{TRUE}, missing values are silently removed.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom, stat}{Use to override the default connection between \code{geom_density} and \code{stat_density}.} \item{bw}{The smoothing bandwidth to be used. If numeric, the standard deviation of the smoothing kernel. If character, a rule to choose the bandwidth, as listed in \code{\link[stats]{bw.nrd}}.} \item{adjust}{A multiplicate bandwidth adjustment. This makes it possible to adjust the bandwidth while still using the a bandwidth estimator. For exampe, \code{adjust = 1/2} means use half of the default bandwidth.} \item{kernel}{Kernel. See list of available kernels in \code{\link{density}}.} \item{n}{number of equally spaced points at which the density is to be estimated, should be a power of two, see \code{\link{density}} for details} \item{trim}{This parameter only matters if you are displaying multiple densities in one plot. If \code{FALSE}, the default, each density is computed on the full range of the data. If \code{TRUE}, each density is computed over the range of that group: this typically means the estimated x values will not line-up, and hence you won't be able to stack density values.} } \description{ Computes and draws kernel density estimate, which is a smoothed version of the histogram. This is a useful alternative to the histogram if for continuous data that comes from an underlying smooth distribution. } \section{Aesthetics}{ \aesthetics{geom}{density} } \section{Computed variables}{ \describe{ \item{density}{density estimate} \item{count}{density * number of points - useful for stacked density plots} \item{scaled}{density estimate, scaled to maximum of 1} } } \examples{ ggplot(diamonds, aes(carat)) + geom_density() ggplot(diamonds, aes(carat)) + geom_density(adjust = 1/5) ggplot(diamonds, aes(carat)) + geom_density(adjust = 5) ggplot(diamonds, aes(depth, colour = cut)) + geom_density() + xlim(55, 70) ggplot(diamonds, aes(depth, fill = cut, colour = cut)) + geom_density(alpha = 0.1) + xlim(55, 70) \donttest{ # Stacked density plots: if you want to create a stacked density plot, you # probably want to 'count' (density * n) variable instead of the default # density # Loses marginal densities ggplot(diamonds, aes(carat, fill = cut)) + geom_density(position = "stack") # Preserves marginal densities ggplot(diamonds, aes(carat, ..count.., fill = cut)) + geom_density(position = "stack") # You can use position="fill" to produce a conditional density estimate ggplot(diamonds, aes(carat, ..count.., fill = cut)) + geom_density(position = "fill") } } \seealso{ See \code{\link{geom_histogram}}, \code{\link{geom_freqpoly}} for other methods of displaying continuous distribution. See \code{\link{geom_violin}} for a compact density display. } ggplot2/man/fortify.map.Rd0000644000177400001440000000152213031506205015315 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-map.r \name{fortify.map} \alias{fortify.map} \title{Fortify method for map objects} \usage{ \method{fortify}{map}(model, data, ...) } \arguments{ \item{model}{map object} \item{data}{not used by this method} \item{...}{not used by this method} } \description{ This function turns a map into a data frame that can more easily be plotted with ggplot2. } \examples{ if (require("maps")) { ca <- map("county", "ca", plot = FALSE, fill = TRUE) head(fortify(ca)) ggplot(ca, aes(long, lat)) + geom_polygon(aes(group = group)) tx <- map("county", "texas", plot = FALSE, fill = TRUE) head(fortify(tx)) ggplot(tx, aes(long, lat)) + geom_polygon(aes(group = group), colour = "white") } } \seealso{ \code{\link{map_data}} and \code{\link{borders}} } \keyword{internal} ggplot2/man/ggplot.Rd0000644000177400001440000000641213031506205014356 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot.r \name{ggplot} \alias{ggplot} \title{Create a new ggplot} \usage{ ggplot(data = NULL, mapping = aes(), ..., environment = parent.frame()) } \arguments{ \item{data}{Default dataset to use for plot. If not already a data.frame, will be converted to one by \code{\link{fortify}}. If not specified, must be suppled in each layer added to the plot.} \item{mapping}{Default list of aesthetic mappings to use for plot. If not specified, must be suppled in each layer added to the plot.} \item{...}{Other arguments passed on to methods. Not currently used.} \item{environment}{If an variable defined in the aesthetic mapping is not found in the data, ggplot will look for it in this environment. It defaults to using the environment in which \code{ggplot()} is called.} } \description{ \code{ggplot()} initializes a ggplot object. It can be used to declare the input data frame for a graphic and to specify the set of plot aesthetics intended to be common throughout all subsequent layers unless specifically overridden. } \details{ \code{ggplot()} is used to construct the initial plot object, and is almost always followed by \code{+} to add component to the plot. There are three common ways to invoke \code{ggplot}: \enumerate{ \item \code{ggplot(df, aes(x, y, ))} \item \code{ggplot(df)} \item \code{ggplot()} } The first method is recommended if all layers use the same data and the same set of aesthetics, although this method can also be used to add a layer using data from another data frame. See the first example below. The second method specifies the default data frame to use for the plot, but no aesthetics are defined up front. This is useful when one data frame is used predominantly as layers are added, but the aesthetics may vary from one layer to another. The third method initializes a skeleton \code{ggplot} object which is fleshed out as layers are added. This method is useful when multiple data frames are used to produce different layers, as is often the case in complex graphics. } \examples{ # Generate some sample data, then compute mean and standard deviation # in each group df <- data.frame( gp = factor(rep(letters[1:3], each = 10)), y = rnorm(30) ) ds <- plyr::ddply(df, "gp", plyr::summarise, mean = mean(y), sd = sd(y)) # The summary data frame ds is used to plot larger red points on top # of the raw data. Note that we don't need to supply `data` or `mapping` # in each layer because the defaults from ggplot() are used. ggplot(df, aes(gp, y)) + geom_point() + geom_point(data = ds, aes(y = mean), colour = 'red', size = 3) # Same plot as above, declaring only the data frame in ggplot(). # Note how the x and y aesthetics must now be declared in # each geom_point() layer. ggplot(df) + geom_point(aes(gp, y)) + geom_point(data = ds, aes(gp, mean), colour = 'red', size = 3) # Alternatively we can fully specify the plot in each layer. This # is not useful here, but can be more clear when working with complex # mult-dataset graphics ggplot() + geom_point(data = df, aes(gp, y)) + geom_point(data = ds, aes(gp, mean), colour = 'red', size = 3) + geom_errorbar( data = ds, aes(gp, mean, ymin = mean - sd, ymax = mean + sd), colour = 'red', width = 0.4 ) } ggplot2/man/ggplot2-package.Rd0000644000177400001440000000164413031506205016033 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ggplot2.r \docType{package} \name{ggplot2-package} \alias{ggplot2} \alias{ggplot2-package} \title{ggplot2: Create Elegant Data Visualisations Using the Grammar of Graphics} \description{ A system for 'declaratively' creating graphics, based on "The Grammar of Graphics". You provide the data, tell 'ggplot2' how to map variables to aesthetics, what graphical primitives to use, and it takes care of the details. } \seealso{ Useful links: \itemize{ \item \url{http://ggplot2.tidyverse.org} \item \url{https://github.com/tidyverse/ggplot2} \item Report bugs at \url{https://github.com/tidyverse/ggplot2/issues} } } \author{ \strong{Maintainer}: Hadley Wickham \email{hadley@rstudio.com} Authors: \itemize{ \item Winston Chang \email{winston@rstudio.com} } Other contributors: \itemize{ \item RStudio [copyright holder] } } \keyword{internal} ggplot2/man/guide_colourbar.Rd0000644000177400001440000001433313031506205016230 0ustar murdochusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/guide-colorbar.r \name{guide_colourbar} \alias{guide_colourbar} \alias{guide_colorbar} \title{Continuous colour bar guide} \usage{ guide_colourbar(title = waiver(), title.position = NULL, title.theme = NULL, title.hjust = NULL, title.vjust = NULL, label = TRUE, label.position = NULL, label.theme = NULL, label.hjust = NULL, label.vjust = NULL, barwidth = NULL, barheight = NULL, nbin = 20, raster = TRUE, ticks = TRUE, draw.ulim = TRUE, draw.llim = TRUE, direction = NULL, default.unit = "line", reverse = FALSE, order = 0, ...) guide_colorbar(title = waiver(), title.position = NULL, title.theme = NULL, title.hjust = NULL, title.vjust = NULL, label = TRUE, label.position = NULL, label.theme = NULL, label.hjust = NULL, label.vjust = NULL, barwidth = NULL, barheight = NULL, nbin = 20, raster = TRUE, ticks = TRUE, draw.ulim = TRUE, draw.llim = TRUE, direction = NULL, default.unit = "line", reverse = FALSE, order = 0, ...) } \arguments{ \item{title}{A character string or expression indicating a title of guide. If \code{NULL}, the title is not shown. By default (\code{\link{waiver}}), the name of the scale object or the name specified in \code{\link{labs}} is used for the title.} \item{title.position}{A character string indicating the position of a title. One of "top" (default for a vertical guide), "bottom", "left" (default for a horizontal guide), or "right."} \item{title.theme}{A theme object for rendering the title text. Usually the object of \code{\link{element_text}} is expected. By default, the theme is specified by \code{legend.title} in \code{\link{theme}} or theme.} \item{title.hjust}{A number specifying horizontal justification of the title text.} \item{title.vjust}{A number specifying vertical justification of the title text.} \item{label}{logical. If \code{TRUE} then the labels are drawn. If \code{FALSE} then the labels are invisible.} \item{label.position}{A character string indicating the position of a label. One of "top", "bottom" (default for horizontal guide), "left", or "right" (default for vertical guide).} \item{label.theme}{A theme object for rendering the label text. Usually the object of \code{\link{element_text}} is expected. By default, the theme is specified by \code{legend.text} in \code{\link{theme}} or theme.} \item{label.hjust}{A numeric specifying horizontal justification of the label text.} \item{label.vjust}{A numeric specifying vertical justification of the label text.} \item{barwidth}{A numeric or a \code{\link[grid]{unit}} object specifying the width of the colorbar. Default value is \code{legend.key.width} or \code{legend.key.size} in \code{\link{theme}} or theme.} \item{barheight}{A numeric or a \code{\link[grid]{unit}} object specifying the height of the colorbar. Default value is \code{legend.key.height} or \code{legend.key.size} in \code{\link{theme}} or theme.} \item{nbin}{A numeric specifying the number of bins for drawing colorbar. A smoother colorbar for a larger value.} \item{raster}{A logical. If \code{TRUE} then the colorbar is rendered as a raster object. If \code{FALSE} then the colorbar is rendered as a set of rectangles. Note that not all graphics devices are capable of rendering raster image.} \item{ticks}{A logical specifying if tick marks on colorbar should be visible.} \item{draw.ulim}{A logical specifying if the upper limit tick marks should be visible.} \item{draw.llim}{A logical specifying if the lower limit tick marks should be visible.} \item{direction}{A character string indicating the direction of the guide. One of "horizontal" or "vertical."} \item{default.unit}{A character string indicating \code{\link[grid]{unit}} for \code{barwidth} and \code{barheight}.} \item{reverse}{logical. If \code{TRUE} the colorbar is reversed. By default, the highest value is on the top and the lowest value is on the bottom} \item{order}{positive integer less that 99 that specifies the order of this guide among multiple guides. This controls the order in which multiple guides are displayed, not the contents of the guide itself. If 0 (default), the order is determined by a secret algorithm.} \item{...}{ignored.} } \value{ A guide object } \description{ Colour bar guide shows continuous color scales mapped onto values. Colour bar is available with \code{scale_fill} and \code{scale_colour}. For more information, see the inspiration for this function: \href{http://www.mathworks.com/help/techdoc/ref/colorbar.html}{Matlab's colorbar function}. } \details{ Guides can be specified in each \code{scale_*} or in \code{\link{guides}}. \code{guide="legend"} in \code{scale_*} is syntactic sugar for \code{guide=guide_legend()} (e.g. \code{scale_color_manual(guide = "legend")}). As for how to specify the guide for each scale in more detail, see \code{\link{guides}}. } \examples{ df <- reshape2::melt(outer(1:4, 1:4), varnames = c("X1", "X2")) p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value)) p2 <- p1 + geom_point(aes(size = value)) # Basic form p1 + scale_fill_continuous(guide = "colorbar") p1 + scale_fill_continuous(guide = guide_colorbar()) p1 + guides(fill = guide_colorbar()) # Control styles # bar size p1 + guides(fill = guide_colorbar(barwidth = 0.5, barheight = 10)) # no label p1 + guides(fill = guide_colorbar(label = FALSE)) # no tick marks p1 + guides(fill = guide_colorbar(ticks = FALSE)) # label position p1 + guides(fill = guide_colorbar(label.position = "left")) # label theme p1 + guides(fill = guide_colorbar(label.theme = element_text(colour = "blue", angle = 0))) # small number of bins p1 + guides(fill = guide_colorbar(nbin = 3)) # large number of bins p1 + guides(fill = guide_colorbar(nbin = 100)) # make top- and bottom-most ticks invisible p1 + scale_fill_continuous(limits = c(0,20), breaks = c(0, 5, 10, 15, 20), guide = guide_colorbar(nbin=100, draw.ulim = FALSE, draw.llim = FALSE)) # guides can be controlled independently p2 + scale_fill_continuous(guide = "colorbar") + scale_size(guide = "legend") p2 + guides(fill = "colorbar", size = "legend") p2 + scale_fill_continuous(guide = guide_colorbar(direction = "horizontal")) + scale_size(guide = guide_legend(direction = "vertical")) } \seealso{ Other guides: \code{\link{guide_legend}}, \code{\link{guides}} } ggplot2/LICENSE0000644000177400001440000003556412766514773013066 0ustar murdochusers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS