miniUI/0000755000176200001440000000000013277616536011464 5ustar liggesusersminiUI/inst/0000755000176200001440000000000013061634105012420 5ustar liggesusersminiUI/inst/www/0000755000176200001440000000000013061633767013261 5ustar liggesusersminiUI/inst/www/miniUI.css0000644000176200001440000000466513061633767015200 0ustar liggesusers.wh-fill{width:100%;height:100%}.abs-fill{position:absolute;top:0;right:0;bottom:0;left:0}.gadget-tabs-container{-webkit-flex:none;-ms-flex:none;flex:none;height:51px;border-top:1px solid #ddd}.gadget-tabs-container ul.gadget-tabs{width:100%;height:100%;list-style:none;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#f2f2f2;margin:0;padding:0;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.gadget-tabs-container ul.gadget-tabs>li{-webkit-flex:1;-ms-flex:1;flex:1}.gadget-tabs-container ul.gadget-tabs>li>a{display:block;text-align:center;color:#777;text-decoration:none;font-size:12px}.gadget-tabs-container ul.gadget-tabs>li>a>i{display:block;margin:auto;font-size:24px}.gadget-tabs-container ul.gadget-tabs>li.active>a{color:#337ab7}.gadget-tabs-content-container{position:relative;-webkit-flex:1;-ms-flex:1;flex:1}.gadget-tabs-content-container .tab-content,.gadget-tabs-content-container .tab-content .tab-pane{position:absolute;top:0;right:0;bottom:0;left:0}.gadget-tabs-content-container .gadget-tabs-content-inner{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.gadget-title{-webkit-flex:none;-ms-flex:none;flex:none;position:relative;background-color:#f2f2f2;height:45px;border-bottom:1px solid #ddd;padding:0}.gadget-title button.btn{position:relative;height:31px;margin:7px 10px 0;z-index:10}.gadget-title h1{position:absolute;top:0;right:0;bottom:0;left:0;font-size:17px;text-align:center;line-height:44px;margin:0;z-index:0}.gadget-block-button{-webkit-flex:none;-ms-flex:none;flex:none;background-color:#f2f2f2;padding:0 6px;display:-webkit-flex;display:-ms-flexbox;display:flex}.gadget-block-button .btn{display:block;-webkit-flex:1;-ms-flex:1;flex:1;margin:6px 6px}.gadget-block-button-top{border-top:1px solid #ddd}.gadget-block-button-bottom{border-bottom:1px solid #ddd}.gadget-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;height:100%}.gadget-content{position:relative;-webkit-flex:1;-ms-flex:1;flex:1}.gadget-content-inner{width:100%;height:100%}.gadget-scroll{display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;-webkit-flex:1;-ms-flex:1;flex:1;width:100%;height:100%;overflow:auto}miniUI/NAMESPACE0000644000176200001440000000042513061633767012700 0ustar liggesusers# Generated by roxygen2: do not edit by hand export(gadgetTitleBar) export(miniButtonBlock) export(miniContentPanel) export(miniPage) export(miniTabPanel) export(miniTabstripPanel) export(miniTitleBar) export(miniTitleBarButton) export(miniTitleBarCancelButton) import(shiny) miniUI/R/0000755000176200001440000000000013061633767011661 5ustar liggesusersminiUI/R/layout.R0000644000176200001440000003264313061633767013331 0ustar liggesusers#' @import shiny NULL #' Page function for Shiny Gadgets #' #' Designed to serve as the outermost function call for your gadget UI. Similar #' to \code{\link[shiny]{fillPage}}, but always includes the Bootstrap CSS #' library, and is designed to contain \code{\link{miniTitleBar}}, #' \code{\link{miniTabstripPanel}}, \code{\link{miniContentPanel}}, etc. #' #' @param ... Elements to include within the page. #' @param title The title to use for the browser window/tab (it will not be #' shown in the document). #' @param theme URL to alternative Bootstrap stylesheet. #' #' @seealso For more information, see the #' \href{http://shiny.rstudio.com/articles/gadget-ui.html}{Designing #' Gadget UI} article on shiny.rstudio.com. #' #' @export miniPage <- function(..., title = NULL, theme = NULL) { htmltools::attachDependencies( tagList( fillPage( tags$div(class = "gadget-container", ...), title = title, theme = theme ) ), gadgetDependencies() ) } #' Create a tabstrip panel #' #' \code{miniTabstripPanel} is a tabstrip panel that contains #' \code{miniTabPanel} elements. Similar to \code{\link[=shiny]{tabsetPanel}}, #' but optimized for small page sizes like mobile devices or the RStudio Viewer #' pane. #' #' @param ... For \code{miniTabstripPanel}, \code{miniTabPanel} elements to #' include in the tabset. For \code{miniTabPanel}, UI elements to include #' within the tab. #' @param id If provided, you can use \code{input$}\emph{\code{id}} in your #' server logic to determine which of the current tabs is active. The value #' will correspond to the \code{value} argument that is passed to #' \code{\link{miniTabPanel}}. #' @param selected The \code{value} (or, if none was supplied, the \code{title}) #' of the tab that should be selected by default. If \code{NULL}, the first #' tab will be selected. #' @param between A tag or list of tags that should be inserted between the #' content (above) and tabstrip (below). #' #' @seealso For more information, see the #' \href{http://shiny.rstudio.com/articles/gadget-ui.html}{Designing #' Gadget UI} article on shiny.rstudio.com. #' #' @examples #' library(shiny) #' #' miniTabstripPanel( #' miniTabPanel("Data", icon = icon("table"), #' selectInput("dataset", "Data set", ls("package:datasets"))), #' miniTabPanel("Subset", icon = icon("sliders"), #' uiOutput("subset_ui") #' ) #' ) #' #' @export miniTabstripPanel <- function(..., id = NULL, selected = NULL, between = NULL) { ts <- buildTabset(list(...), "nav gadget-tabs", id = id, selected = selected ) htmltools::attachDependencies( tagList( div(class = "gadget-tabs-content-container", ts$content), between, div(class = "gadget-tabs-container", ts$navList) ), gadgetDependencies() ) } #' @param title Display title for tab. #' @param value The value that should be sent when \code{miniTabstripPanel} #' reports that this tab is selected. If omitted and \code{miniTabstripPanel} #' has an \code{id}, then the tab's title will be used as the value. #' @param icon Icon to appear on the tab; see \code{\link[shiny]{icon}}. #' @rdname miniTabstripPanel #' @export miniTabPanel <- function(title, ..., value = title, icon = NULL) { tabPanel(title, value = title, icon = icon, tags$div(class = "gadget-tabs-content-inner", ...) ) } gadgetDependencies <- function() { list( htmltools::htmlDependency( "miniUI", utils::packageVersion("miniUI"), src = system.file("www", package = "miniUI"), stylesheet = "miniUI.css" ) ) } #' Create a title bar #' #' Creates a title bar for a Shiny app or Shiny Gadget. Intended to be used with #' \code{\link{miniPage}}. Title bars contain a title, and optionally, a #' \code{miniTitleBarButton} on the left and/or right sides. #' #' @param title The title of the gadget. If this needs to be dynamic, pass #' \code{\link[=shiny]{textOutput}} with \code{inline = TRUE}. #' @param left The \code{miniTitleBarButton} to put on the left, or \code{NULL} #' for none. #' @param right The \code{miniTitleBarButton} to put on the right, or #' \code{NULL} for none. #' #' @seealso For more information, see the #' \href{http://shiny.rstudio.com/articles/gadget-ui.html}{Designing #' Gadget UI} article on shiny.rstudio.com. #' #' @examples #' miniTitleBar("My App", #' left = miniTitleBarButton("prev", "Previous"), #' right = miniTitleBarButton("next", "Next") #' ) #' #' @export miniTitleBar <- function(title, left = NULL, right = NULL) { htmltools::attachDependencies( tags$div(class = "gadget-title", tags$h1(title), if (!is.null(left)) { tagAppendAttributes(left, class = "pull-left") }, if (!is.null(right)) { tagAppendAttributes(right, class = "pull-right") } ), gadgetDependencies() ) } #' @details \code{gadgetTitleBar} is a \code{miniTitleBar} with different #' defaults: a Cancel button on the left and a Done button on the right. By #' default, \code{\link[shiny]{runGadget}} will handle the Cancel button by #' closing the gadget and raising an error, but the \code{Done} button must be #' handled by the gadget author using \code{observeEvent(input$done, {...})}. #' @rdname miniTitleBar #' @export gadgetTitleBar <- function(title, left = miniTitleBarCancelButton(), right = miniTitleBarButton("done", "Done", primary = TRUE)) { miniTitleBar(title, left, right) } #' @param inputId The \code{input} slot that will be used to access the button. #' @param label The text label to display on the button. #' @param primary If \code{TRUE}, render the button in a bold color to indicate #' that it is the primary action of the gadget. #' @rdname miniTitleBar #' @export miniTitleBarButton <- function(inputId, label, primary = FALSE) { buttonStyle <- if (isTRUE(primary)) { "primary" } else if (identical(primary, FALSE)) { "default" } else { primary } tags$button( id = inputId, type = "button", class = sprintf("btn btn-%s btn-sm action-button", buttonStyle), label ) } #' @details \code{miniTitleBarCancelButton} is like \code{miniTitleBarButton}, #' but the user can also invoke it by hitting the Escape key. #' @rdname miniTitleBar #' @export miniTitleBarCancelButton <- function(inputId = "cancel", label = "Cancel", primary = FALSE) { escapeHandler <- singleton(tags$head(tags$script(sprintf( "$(document).keydown(function(e) { if (e.keyCode === 27) $('#%s').click(); });", jqueryEscape(inputId) )))) miniTitleBarButton(inputId, tagList(label, escapeHandler), primary) } jqueryEscape <- function(x) { # https://learn.jquery.com/using-jquery-core/faq/how-do-i-select-an-element-by-an-id-that-has-characters-used-in-css-notation/ gsub("([.:])", "\\\\\\1", x) } scrollPanel <- function(...) { htmltools::attachDependencies( tags$div(class = "gadget-scroll", ...), gadgetDependencies() ) } #' Create a content panel #' #' Creates a panel for containing arbitrary content within a flex box container. #' This is mainly useful within \code{\link{miniPage}} or a #' \code{\link{miniTabPanel}}. You can use \code{miniContentPanel} to introduce #' padding and/or scrolling, but even if padding/scrolling aren't needed, it's a #' good idea to wrap your custom content into \code{miniContentPanel} as it #' fixes some odd behavior with percentage-based heights. #' #' @param ... UI objects to be contained in the \code{miniContentPanel}. A #' single htmlwidget or \code{\link[shiny]{plotOutput}} with #' \code{height="100\%"} works well, as do #' \code{\link[shiny]{fillRow}}/\code{\link[shiny]{fillCol}}. #' @param padding Amount of padding to apply. Can be numeric (in pixels) or #' character (e.g. \code{"3em"}). #' @param scrollable If \code{TRUE}, then content large enough to overflow the #' \code{miniContentPanel} will make scrollbars appear. #' #' @seealso For more information, see the #' \href{http://shiny.rstudio.com/articles/gadget-ui.html}{Designing #' Gadget UI} article on shiny.rstudio.com. #' #' @examples #' library(shiny) #' #' miniContentPanel(padding = 0, #' plotOutput("plot", height = "100%") #' ) #' #' @export miniContentPanel <- function(..., padding = 15, scrollable = TRUE) { container <- if (scrollable) scrollPanel else identity htmltools::attachDependencies( container( tags$div(class = "gadget-content", tags$div(class = "gadget-absfill", style = sprintf("position: absolute; %s;", paddingToPos(padding)), ... ) ) ), gadgetDependencies() ) } paddingToPos <- function(padding) { padding <- sapply(padding, shiny::validateCssUnit, USE.NAMES = FALSE) sizes <- if (length(padding) == 0) { rep_len("0", 4) } else if (length(padding) == 1) { rep_len(padding, 4) } else if (length(padding) == 2) { padding[c(1,2,1,2)] } else if (length(padding) == 3) { padding[c(1,2,3,2)] } else { padding[1:4] } props <- c("top", "right", "bottom", "left") paste0(props, ":", sizes, ";", collapse = "") } #' Create a block-level button container #' #' Creates a full-width container for one or more buttons. The horizontal space #' will be evenly divided among any buttons that are added. #' #' When using \code{miniButtonBlock} with a \code{miniTabstripPanel}, consider #' passing the \code{miniButtonBlock} to \code{miniTabstripPanel} as the #' \code{between} argument. #' #' @param ... One or more \code{\link[=shiny]{actionButton}} or #' \code{\link[=shiny]{downloadButton}} objects. #' @param border Zero or more of \code{c("top", "bottom")}, indicating which #' sides should have borders, if any. #' #' @seealso For more information, see the #' \href{http://shiny.rstudio.com/articles/gadget-ui.html}{Designing #' Gadget UI} article on shiny.rstudio.com. #' #' @examples #' library(shiny) #' #' miniButtonBlock( #' actionButton("reset", "Reset to defaults"), #' actionButton("clear", "Clear all") #' ) #' #' @export miniButtonBlock <- function(..., border = "top") { cssClass <- "gadget-block-button" if (length(border) > 0) { cssClass <- paste(collapse = " ", c(cssClass, paste0("gadget-block-button-", border))) } tags$div( class = cssClass, ... ) } # Copied verbatim from shiny, except replaced p_randomInt with sample.int buildTabset <- function(tabs, ulClass, textFilter = NULL, id = NULL, selected = NULL) { # build tab nav list and tab content div # add tab input sentinel class if we have an id if (!is.null(id)) ulClass <- paste(ulClass, "shiny-tab-input") tabNavList <- tags$ul(class = ulClass, id = id) tabContent <- tags$div(class = "tab-content") firstTab <- TRUE tabsetId <- sample.int(8999, 1) + 1000 tabId <- 1 for (divTag in tabs) { # check for text; pass it to the textFilter or skip it if there is none if (is.character(divTag)) { if (!is.null(textFilter)) tabNavList <- tagAppendChild(tabNavList, textFilter(divTag)) next } # compute id and assign it to the div thisId <- paste("tab", tabsetId, tabId, sep="-") divTag$attribs$id <- thisId tabId <- tabId + 1 tabValue <- divTag$attribs$`data-value` # function to append an optional icon to an aTag appendIcon <- function(aTag, iconClass) { if (!is.null(iconClass)) { # for font-awesome we specify fixed-width if (grepl("fa-", iconClass, fixed = TRUE)) iconClass <- paste(iconClass, "fa-fw") aTag <- tagAppendChild(aTag, icon(name = NULL, class = iconClass)) } aTag } # check for a navbarMenu and handle appropriately if (inherits(divTag, "shiny.navbarmenu")) { # create the a tag aTag <- tags$a(href="#", class="dropdown-toggle", `data-toggle`="dropdown") # add optional icon aTag <- appendIcon(aTag, divTag$iconClass) # add the title and caret aTag <- tagAppendChild(aTag, divTag$title) aTag <- tagAppendChild(aTag, tags$b(class="caret")) # build the dropdown list element liTag <- tags$li(class = "dropdown", aTag) # build the child tabset tabset <- buildTabset(divTag$tabs, "dropdown-menu") liTag <- tagAppendChild(liTag, tabset$navList) # don't add a standard tab content div, rather add the list of tab # content divs that are contained within the tabset divTag <- NULL tabContent <- tagAppendChildren(tabContent, list = tabset$content$children) } # else it's a standard navbar item else { # create the a tag aTag <- tags$a(href=paste("#", thisId, sep=""), `data-toggle` = "tab", `data-value` = tabValue) # append optional icon aTag <- appendIcon(aTag, divTag$attribs$`data-icon-class`) # add the title aTag <- tagAppendChild(aTag, divTag$attribs$title) # create the li tag liTag <- tags$li(aTag) } if (is.null(tabValue)) { tabValue <- divTag$attribs$title } # If appropriate, make this the selected tab (don't ever do initial # selection of tabs that are within a navbarMenu) if ((ulClass != "dropdown-menu") && ((firstTab && is.null(selected)) || (!is.null(selected) && identical(selected, tabValue)))) { liTag$attribs$class <- "active" divTag$attribs$class <- "tab-pane active" firstTab = FALSE } divTag$attribs$title <- NULL # append the elements to our lists tabNavList <- tagAppendChild(tabNavList, liTag) tabContent <- tagAppendChild(tabContent, divTag) } list(navList = tabNavList, content = tabContent) } miniUI/README.md0000644000176200001440000000372113061634132012725 0ustar liggesusers# miniUI Provides UI widget and layout functions for writing Shiny apps that work well on small screens. Designed to work especially well for creating Shiny Gadgets. Inspired by the lovely [Ratchet](http://goratchet.com/) CSS framework, though currently miniUI doesn't use any of Ratchet's CSS code. ### Installing ```r devtools::install_github("rstudio/miniUI") ``` ### Getting started Check out the [Designing Gadget UI](http://shiny.rstudio.com/articles/gadget-ui.html) article on [shiny.rstudio.com](http://shiny.rstudio.com/). ### Example ![Screenshot](tools/tabs.gif) ```r ui <- miniPage( gadgetTitleBar("Shiny gadget example"), miniTabstripPanel( miniTabPanel("Parameters", icon = icon("sliders"), miniContentPanel( sliderInput("year", "Year", 1978, 2010, c(2000, 2010), sep = "") ) ), miniTabPanel("Visualize", icon = icon("area-chart"), miniContentPanel( plotOutput("cars", height = "100%") ) ), miniTabPanel("Map", icon = icon("map-o"), miniContentPanel(padding = 0, leafletOutput("map", height = "100%") ), miniButtonBlock( actionButton("resetMap", "Reset") ) ), miniTabPanel("Data", icon = icon("table"), miniContentPanel( DT::dataTableOutput("table") ) ) ) ) ``` Full source at: https://github.com/rstudio/miniUI/blob/master/examples/tabs.R ### License The miniUI package is licensed under the [GPLv3](http://www.gnu.org/licenses/gpl-3.0.en.html). --- ### Compiling [Less](http://lesscss.org/) source to CSS **You generally don't need to do this.** This build step is only needed if you want to contribute to the development of the package by modifying the built-in CSS styles. #### One-time setup **Prerequisite:** You must have Node.js installed. ```sh # Install the grunt command if necessary which grunt || sudo npm install -g grunt-cli # Install dependencies cd tools npm install ``` #### Building ```sh cd tools grunt ``` miniUI/MD50000644000176200001440000000106013277616536011771 0ustar liggesusers3e588758a978a9edceecd8a3da62d71e *DESCRIPTION 2ee516efe14e50639469572c1edf93c8 *NAMESPACE 5ad16252dee113e1ce91f1fb47ac5123 *R/layout.R 79f2639a74ad2a62a8e7720893a82be5 *README.md 021c342fc56e614ddbbd70ee4d76da0a *inst/www/miniUI.css 0bae96d4202ba0f3f4ce1e22c5260992 *man/miniButtonBlock.Rd d5d17dd970b821745a6d1907af8bb094 *man/miniContentPanel.Rd 9b10196e7d062743fdc604c5567ba595 *man/miniPage.Rd 19c7a33815d3596efcb08cef2a300484 *man/miniTabstripPanel.Rd 2d90e8348547203b809f9953d5ddcf8e *man/miniTitleBar.Rd 4d691e3b48aa21edafe101ecbdaf1655 *tools/tabs.gif miniUI/DESCRIPTION0000644000176200001440000000121713277616536013173 0ustar liggesusersPackage: miniUI Type: Package Title: Shiny UI Widgets for Small Screens Version: 0.1.1.1 Authors@R: c( person("Joe", "Cheng", role = c("cre", "aut"), email = "joe@rstudio.com"), person(family = "RStudio", role = "cph") ) Description: Provides UI widget and layout functions for writing Shiny apps that work well on small screens. License: GPL-3 LazyData: TRUE Imports: shiny (>= 0.13), htmltools (>= 0.3), utils RoxygenNote: 5.0.1 NeedsCompilation: no Packaged: 2018-05-18 17:00:34 UTC; jcheng Author: Joe Cheng [cre, aut], RStudio [cph] Maintainer: Joe Cheng Repository: CRAN Date/Publication: 2018-05-18 18:37:18 UTC miniUI/man/0000755000176200001440000000000013061633767012233 5ustar liggesusersminiUI/man/miniTabstripPanel.Rd0000644000176200001440000000367213061633767016157 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/layout.R \name{miniTabstripPanel} \alias{miniTabPanel} \alias{miniTabstripPanel} \title{Create a tabstrip panel} \usage{ miniTabstripPanel(..., id = NULL, selected = NULL, between = NULL) miniTabPanel(title, ..., value = title, icon = NULL) } \arguments{ \item{...}{For \code{miniTabstripPanel}, \code{miniTabPanel} elements to include in the tabset. For \code{miniTabPanel}, UI elements to include within the tab.} \item{id}{If provided, you can use \code{input$}\emph{\code{id}} in your server logic to determine which of the current tabs is active. The value will correspond to the \code{value} argument that is passed to \code{\link{miniTabPanel}}.} \item{selected}{The \code{value} (or, if none was supplied, the \code{title}) of the tab that should be selected by default. If \code{NULL}, the first tab will be selected.} \item{between}{A tag or list of tags that should be inserted between the content (above) and tabstrip (below).} \item{title}{Display title for tab.} \item{value}{The value that should be sent when \code{miniTabstripPanel} reports that this tab is selected. If omitted and \code{miniTabstripPanel} has an \code{id}, then the tab's title will be used as the value.} \item{icon}{Icon to appear on the tab; see \code{\link[shiny]{icon}}.} } \description{ \code{miniTabstripPanel} is a tabstrip panel that contains \code{miniTabPanel} elements. Similar to \code{\link[=shiny]{tabsetPanel}}, but optimized for small page sizes like mobile devices or the RStudio Viewer pane. } \examples{ library(shiny) miniTabstripPanel( miniTabPanel("Data", icon = icon("table"), selectInput("dataset", "Data set", ls("package:datasets"))), miniTabPanel("Subset", icon = icon("sliders"), uiOutput("subset_ui") ) ) } \seealso{ For more information, see the \href{http://shiny.rstudio.com/articles/gadget-ui.html}{Designing Gadget UI} article on shiny.rstudio.com. } miniUI/man/miniPage.Rd0000644000176200001440000000156313061633767014260 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/layout.R \name{miniPage} \alias{miniPage} \title{Page function for Shiny Gadgets} \usage{ miniPage(..., title = NULL, theme = NULL) } \arguments{ \item{...}{Elements to include within the page.} \item{title}{The title to use for the browser window/tab (it will not be shown in the document).} \item{theme}{URL to alternative Bootstrap stylesheet.} } \description{ Designed to serve as the outermost function call for your gadget UI. Similar to \code{\link[shiny]{fillPage}}, but always includes the Bootstrap CSS library, and is designed to contain \code{\link{miniTitleBar}}, \code{\link{miniTabstripPanel}}, \code{\link{miniContentPanel}}, etc. } \seealso{ For more information, see the \href{http://shiny.rstudio.com/articles/gadget-ui.html}{Designing Gadget UI} article on shiny.rstudio.com. } miniUI/man/miniButtonBlock.Rd0000644000176200001440000000206713061633767015632 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/layout.R \name{miniButtonBlock} \alias{miniButtonBlock} \title{Create a block-level button container} \usage{ miniButtonBlock(..., border = "top") } \arguments{ \item{...}{One or more \code{\link[=shiny]{actionButton}} or \code{\link[=shiny]{downloadButton}} objects.} \item{border}{Zero or more of \code{c("top", "bottom")}, indicating which sides should have borders, if any.} } \description{ Creates a full-width container for one or more buttons. The horizontal space will be evenly divided among any buttons that are added. } \details{ When using \code{miniButtonBlock} with a \code{miniTabstripPanel}, consider passing the \code{miniButtonBlock} to \code{miniTabstripPanel} as the \code{between} argument. } \examples{ library(shiny) miniButtonBlock( actionButton("reset", "Reset to defaults"), actionButton("clear", "Clear all") ) } \seealso{ For more information, see the \href{http://shiny.rstudio.com/articles/gadget-ui.html}{Designing Gadget UI} article on shiny.rstudio.com. } miniUI/man/miniTitleBar.Rd0000644000176200001440000000415213061633767015107 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/layout.R \name{miniTitleBar} \alias{gadgetTitleBar} \alias{miniTitleBar} \alias{miniTitleBarButton} \alias{miniTitleBarCancelButton} \title{Create a title bar} \usage{ miniTitleBar(title, left = NULL, right = NULL) gadgetTitleBar(title, left = miniTitleBarCancelButton(), right = miniTitleBarButton("done", "Done", primary = TRUE)) miniTitleBarButton(inputId, label, primary = FALSE) miniTitleBarCancelButton(inputId = "cancel", label = "Cancel", primary = FALSE) } \arguments{ \item{title}{The title of the gadget. If this needs to be dynamic, pass \code{\link[=shiny]{textOutput}} with \code{inline = TRUE}.} \item{left}{The \code{miniTitleBarButton} to put on the left, or \code{NULL} for none.} \item{right}{The \code{miniTitleBarButton} to put on the right, or \code{NULL} for none.} \item{inputId}{The \code{input} slot that will be used to access the button.} \item{label}{The text label to display on the button.} \item{primary}{If \code{TRUE}, render the button in a bold color to indicate that it is the primary action of the gadget.} } \description{ Creates a title bar for a Shiny app or Shiny Gadget. Intended to be used with \code{\link{miniPage}}. Title bars contain a title, and optionally, a \code{miniTitleBarButton} on the left and/or right sides. } \details{ \code{gadgetTitleBar} is a \code{miniTitleBar} with different defaults: a Cancel button on the left and a Done button on the right. By default, \code{\link[shiny]{runGadget}} will handle the Cancel button by closing the gadget and raising an error, but the \code{Done} button must be handled by the gadget author using \code{observeEvent(input$done, {...})}. \code{miniTitleBarCancelButton} is like \code{miniTitleBarButton}, but the user can also invoke it by hitting the Escape key. } \examples{ miniTitleBar("My App", left = miniTitleBarButton("prev", "Previous"), right = miniTitleBarButton("next", "Next") ) } \seealso{ For more information, see the \href{http://shiny.rstudio.com/articles/gadget-ui.html}{Designing Gadget UI} article on shiny.rstudio.com. } miniUI/man/miniContentPanel.Rd0000644000176200001440000000257213061633767015777 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/layout.R \name{miniContentPanel} \alias{miniContentPanel} \title{Create a content panel} \usage{ miniContentPanel(..., padding = 15, scrollable = TRUE) } \arguments{ \item{...}{UI objects to be contained in the \code{miniContentPanel}. A single htmlwidget or \code{\link[shiny]{plotOutput}} with \code{height="100\%"} works well, as do \code{\link[shiny]{fillRow}}/\code{\link[shiny]{fillCol}}.} \item{padding}{Amount of padding to apply. Can be numeric (in pixels) or character (e.g. \code{"3em"}).} \item{scrollable}{If \code{TRUE}, then content large enough to overflow the \code{miniContentPanel} will make scrollbars appear.} } \description{ Creates a panel for containing arbitrary content within a flex box container. This is mainly useful within \code{\link{miniPage}} or a \code{\link{miniTabPanel}}. You can use \code{miniContentPanel} to introduce padding and/or scrolling, but even if padding/scrolling aren't needed, it's a good idea to wrap your custom content into \code{miniContentPanel} as it fixes some odd behavior with percentage-based heights. } \examples{ library(shiny) miniContentPanel(padding = 0, plotOutput("plot", height = "100\%") ) } \seealso{ For more information, see the \href{http://shiny.rstudio.com/articles/gadget-ui.html}{Designing Gadget UI} article on shiny.rstudio.com. } miniUI/tools/0000755000176200001440000000000013277603262012614 5ustar liggesusersminiUI/tools/tabs.gif0000644000176200001440000025747413061634121014244 0ustar liggesusersGIF89a6as0{׫ӕ.pӝtQuuv001>X+JMMh͚븸2/Z_1/ϦYQ4yЮAљJ󇇇0FdͬԨm1G!yʻԪȲr/k˱Лauk>ѥkQeeeGϣFfF.GяӥKZbd.lHgwxCO#2*养NZctgK7oSBVȆvůsȝ$C!"⾌z7..X}NJ9:(vXyZAȲ,g8{ge*r˥㚈hlpt[eסVٽպ~s^ढʘw_ӽй𞴴}~}7Żްߜzx/obvE01'G<@?F]ڍŃ! NETSCAPE2.0!,yH*\ȰÇ#JHŋ3jȱǏ CIR`(S\ɲ˗0cʜI͛8sɳϟ@ JѣHLʴӧPJJիX\ׯ`ÊKY\Ϫ]˶۷pM+ݻx˖.߿ Lˆ+^̸q)mL˘3k<ͱϠC')ӨS^ͺu|r7}rͻYȓ#ʀУKNWfxw ߠaξ{!sO>x>|.m`߁ 6_(a{D[?&!} > $NWaKfu0XՈ%܉,⎿(@)6J:򨤂Bj%RET:FdRK*cO]@4@&| xUXk YWb)q}NU&nsYM.Y}nX ([&J@BB D+Q))"[+!7`b*t*o6@p)mXB*.ԭj-hS F d&2*'G4tqH#A0tġ64\<pG p?12Af-jrIЋڬaj!%K@ ěkVG W >xRS Tϵ%Цn#C20fΎ[.HA1BJI(MC*AHi駃O -t @wy{qΣO.'3Tym TbrFW88G?h;8VK zw)"@) 0yVI@ 45MÚ΄E:;= %\g;?ő^=sq3t]D6zh a`r 6'TPV9£C8@0i:t/ o..]'SpszsNVHe$sdJ18~X̔S j̧P j>Ӧ RuU|d@ &nrBF AriB*QrzOKM1UWt(xSGǪj``"<]$gsO\7:1.gxљl4)Fe6|Ec?lvQoyq˔FI hrA95,@~-)KNڛle`81 ,`"nNVB x} 2io|Ji +\׾n@ؔP]BL'pqx [&4e9:󮋋fJ|3*FvO;ŜIv'gJg1R!t @ $@BAB˰8|>tp rc伯+#0Q5'B_U3ܳhoVwյă^N9rُD[EORhp <%>%0 $lADp~b{*{gw8C€)!؁8hw{{x( #؀Q4X!i/a/1aDX+9h؁NPChTXaZ^vUb#2fxQhlj؆prXvhtxzj!8Xx؈8Xx؉Xx؊$Xx؋<28Xx،8xؘڸX8"X蘎긎Ȍ؎8XXx8yX ِ~ Yy1ّ"9$y(h*ْ.Ȓ094Y6:ʈA P sP )%)Ile 0j\08S٘Ȓ/GG[\) Y4@_HSE 瘢9ȒR' 4 9LGy( ?\;Wk u2Kșٗ@ :ec 78b@Ϩt?/'wŷG(f&( 09k+J2Pq 8 Z8ɜ :$zZ(q*ڢ.,21:6:&x<ڣ> @HJL `MФVzMQz `7JWzg*khhڦJ\ڥ";*vڣG|JY{ڧhq @@[RPRIJHS HЫک )Ae/ T 7J) $`GBP  W $0Dm KpJIj0Z:+Ҫj}0P- n`ҭ窔IQH *`$QI`E6P.ۯ(˳%ڲ/k/Ԛx0)nP) xqJK*>вǠ7kŠ9۵_>06P IK[N4 \ N{K* Zp[KH`q[ b`/ e G˶$H*rK{GJ;MkP=p Z;` -6[8 'Ka t{x|I+ )0K)0j(P˓I~𲹚2$KJJ$ꛮ $ Bp{g\K I@ /}ì̼I,A  ܏uzwlй$`8L6M -,^*2LIjöK:.\:j`*L O|jJlK R/``OZ T$0dpx|јyL[ ۴}PP ٰ(@ȆȊD  D D ^DP hɘɜɠ,ʤ,Xi DPDʽ(˴l˸˼i PX}0 <Ȭ̈<,ƌ؀Ҽ̹̾^~( ։]8b|Aߡ"="#&$c(⽑ Η-^'=L=!~侱,I~EnO伡P ɼ< ;J^kD]PWYA^C.^_ \K8`\\tc>pd.N^kcQMn爎>z` P .Sr>.˄xːN^r+b橞̜ɛ Dޅ< wn}L~ ӗKA}}۞{~\~~]2!A.ޮ_: Lݣlܮ$ؠ) ?/~>߁ MԲ6$5;_ J@CӘxPL1_XW\]`?LfO2irP•0 S` Tr0E R0<  ~o*0DoDu4}#D1/!68ȣ+̚ҧ=|QǢGAcϕ*~Hh…JJ*lRj:RFYp>jNڱiL0mԽ+_&\aĉ/fرc</p,u.4PUg _.P_ Ah× iVM`DFxA6GLY̖ra,ƥK^>z/X-=>w;=<|j ,#T;B 3pC;p &xB4/2 `)$.)|'l7vg ?QBQl *R|od&4D1zD$ͧ|`00iIؘI 5PDUtQB$lBÉ:d؍ 4ڣU~)5DA r[qhlEơ:30H%Ta@:U$YQE&h N8SvD^ pF,+C[SFw^z"Gtt]cnm\d! Pa(ZD3UVt\^oiC`$<Ɔ.le~Kc 8b:8]Px(^ RJ5*Ғs#5ݒ@+e9^kWAipU*!P sĽ"$ބ) ';RG-Y\(p al~U {4Ql#@tM:T?pp*<#'dr!uQqV~y_tlaǧoFL뱱Pľ^+1-J1+jߟ?~^꩷y@$` x@&P@FP KXA fP`9tAP#$a 'BP+da BP3a CP;qC QClxD$&Q†D(FQnqxE,Yb-~Qc$cXF4Q<F8ګqcAQ{G@R y8dHHFrd%-IDJ^Ra&9IPГ$e)98JSRD*]JdYK\^e/}y(^RP0yLd"Ƙdf3GgFSZ4j^S6n~S 8͙rSL:yvSy~Sp @ ƂTbLBņ>TRD-Ċ^TZF=zHe#dGIzR>+]JYR3`HMJS:9)eS:A%ZTqIeT*QjצZUYUpa%+5ZVie V qQZW*5{]XW _ ;XU^X>id' W^,Z9Y~`hZZbjY U׾-Ri[[@ny[pRwUIܑ>t5Z]ZٕvP~WA[^Tz^|NWկ9_qY`[ L?02)\ab^a!gI )V19M⼲ƫbǵ9&yN8>&\dxa=%d'SQ*H+_SrTeA~*f3ih5q3A\kzg?ôρ& P@Vth&}XiKSTҙ(9DOCC]#]mIj[k[׹y]__~]lV lgV`k_m 9ln"VKN+]l4oo9-#p?+)nɉ_׸9XZWr+~(OXrR\s9έsA#Љ^ǡ}^IW 72ꊒUuohO:u}x;6^/<}vcQq >I=s׻bwe<.^F Tx)C_^|`;χҦ/%IO̟>?=I<5o<[W‹I>_>#3 G_ӧ~}g_~}_'~_g~?G_ @@,@<@L@\@l@|@@ @ @ @@ @@@ AA,Ab#E?@ D ~xe$A EoEWEB_`L`0GvlGsm AcĿQBeGN?i?"Hc?mG HdC@>(ÅLF. GIG $`t4H$,HNi(C{GG;H@?.lEKA^Au`JIx|I I~Z+???J ʙH?G#2H28J\t.LʐLR̿ʹBc?AjˉK<@Fotp.Ĝƻ\ItMFlTCjͬy$TFo`Ԍ쇪?͜M{C<,;.N<MB_HM 4$I/DKDڼ4@lL` \OTό\DMNFO~Κ ~(Ot\EHU϶P HLL ?A? ARDmQK\D`Q P[PMLEBF$! MEC(&-MQ%Q[Q(?+TR3"ER.GcR*E3,XT$Dpf`XXX[DkddXW3yXOtX}Y|V? XXmY=Y%H~BtYMZ]ZDZ}ZtZZZ Ă\'ChR^6?-q`L d+h[M[ZyJ( |,]-@Qk聽@h/؅`= h欿h]ڴ"1hͿ)4 Ăǭ\ xfhF5:0mmP`(b IPoH^h (P`h XC8em_=C8G__, .[սխ~>_:.״4_8.6YC#^5}5TM p\*0@b.,0 ,۳M[-zx\DD>H\x[`c*(f`R>~HK=<"@ ״;dH9ЂJ|d-8ڌCpHQH~]x ((b$`[K؂0' Jȝ_r$؁(,H9d >x /Ё X^ .@ϭu[rX_Mn Cq]pgL*'D茶]FA59(ՁT_U晾H*ތ4ݵ^`\ALL}*8 ncvXkg/;~dZ>TSp XN `;ց†h>xkQmX ]EW];ff[n_E;f~f cN;p`;\5 ]Ȯ?Pr(h,[d8d 8̍p\NI ܬjPQj(>Ȅ?_v Ӂr`Hnr$EA](nQAd% ܙ~(f}8"p+v0Gl{L@^Do6^_S:(`IHiP{3%[o^d*=_-H[PuF> q0QfVso`LW-hfa- Haf~=`\n&jӭ%JD肌B> 6jD3E~'u_ݬB ]OnAk ~Լ[ PuKXTU䇣TWV~n-~PIFdLTYTvLZkD^k?Bvo nv)'ws?vt_wvQuowxw|wyw{OKzw}mw~wOx/x?xOx_xoxxx xxxxxxxyy!,Aw @*,8 [j 6-‹3jȱǏ CIɓ(S\ɲ˗0cʜ ƒq8{8TPࢵH*]ʴӥٞJJիXZׯ`r KٳhӪ];8qnVoOT;/F~ LÄ"^̸cK[5ʘ33j<~\Ӈ}ٰ֫c<ښAµ i1pi$pƼУKNسk]Ë/;ӫ_Ͼ{͇;Iϟ_l M )Ś& 6Vha5\Z *a$r؏%h*`6#(,h#hhm?qB6`?$sl)Ƥl=mRe%jmyj^ZQَ>ޗ[~4L2\JD,IbNޙٕzNff hcZ:YJfɨcjfjާC= X"&hE *a Xhj&*fG)A=v*Bkʏ*.lJYZ)BJ,ׂljj h)v鹣跽*,֤[Bd(*<(+ÌMJSA#<ǀaÀB̪ĬR<Ŭ u0ɀ/&24/p ɜ,=hwlίBMϱM33`ЙӤ"2 vV)ui{r,V!\uw81Ն6{ 3tݵmoYg8ΗWy{6 !ڰRtKpbKٺ:kJ8CC: .[a Zްa-~}m3JӆOFӧ\g)8ky/ﮦR2n_~g`gײ6 ?πf- ɂ`ǮL#fcaY' AVjjhτKVxRF4r.!|\O$=$OabbD1_ GYqfcE0Q2|VF/!`Ɓ=ы5,WBp1c\M>PqȾ˚;G*ؚcx;&Q;`#B< 6bl`%.ɒ ],ـ/œaĊ-ˢzPl(W#>E}t`5xM4fVF,%1|TFԴJ@˒kz{nd AIӌd?Ŕ.t3 #)IrYE3R ҝhD=:3%GOk,2)j)9ozJRꤤ&gR2I^L-@#a˩C(Ra568罪ZկNI=':ʇڑd+:ǁTrP! Ws5Pt%$sIlN깔R)[fİIb[X6o2QTOF֢"]ZDM@ꬴq=-BSJSJ:\/5QdU&Ѡ6-8%W֦*+uJ+&ǒ+n誵jl;55FƇJwd.6MӯF{Uꀱ+.5oͰ`ucĻξ&/I W1,UQ7*7cW #.6oF&!~ҵl\'Eֱ6Y<"PbV-CxCͮig_/D'P8I0MgDԬ\A#4 ]J†a`ȴ7N{Ӡ>RԨδ>RVz9YƭwjRסGMlN4wِP n{#r+vIyۻ侷ѝ};Ii 3Wf ϗZsZgЖ?Y0M R5_{+ ;1/3}+yxS/=c_wmqfלٽ.KЧOpZ}aX'$iH˾qPX65"tg{Wc71$ \ 'szo{?Ey.gy0'[〚SH(6 }c}U'%53Pc!(Bg~5hqs5H7xDv)5@yB(RFH&H(}reOmRfSSUhwW(wcdwUw@/IUEܗje~UCXs`WՆaTȇEGX{}'wCV2ceh}A^aEhFggdVBc%㇐r}l6jV i֋kHl6&k֐&llϸkvk&Xjxj؍Vj6fHjloHMH~ç뷉{x<㈉ȉH@g W%+\1Dp ^# Nh;\~Bu#W#mGhl(,L5 yX8yCqMH4ʥ.~hX7y \C9*$ GI(Y<* z,YhQ\ uB*PH 9-5FUي&ɕ7Y9z;ykP G;ȑ5Iy9t3ѕdshؑhHUf薎 'q9NjB۟;LJL0Qx8_\J&LAK)3Ж0!)) 9OU=5?ض+h٦8/ٵ6*qk)(%0˲CG5rtKULt1 GF^3jc!~͡>+Apΰ(=(15$*~~}h$$+O٦\ l ^-~s:s "+Oe 1ߪ"tqEb\=ݝ;9N.H-%<ܻ錮䲎Î5/?}'ܳPg.@>Pl)0y/~茛0p^\d`3S3(,+V<XMښ-) O득DpRP3{ҌUW_z՝Iil/Mͽg_v_Alvl!_:㜉Cdf$XA%dÃհAXb5n1&鑩ΑOmU9իR!ԪI_9KiٍKrFڂNZ:bؐ+nA!oᄄ<8ڃfL\ Sf>xxl_V̳ͧ*X@+L]̯~Ydh0GvLܱ~dD.+/\W7?tog鐷QҺΞy_7HS ^Ҷܯ.OQ/wN/" +=p` @*Bf1Oz7D,<Ld&#IJh MU;BK3kT$Wh#LO#} ,ˌ i g dh#.LLKиDPͮVd\$V !pS+89S!:qQ(Q 0,e0)R,DQ:N4)Pӳ,I\suW^{W^ Xb5XUvYdQbYhw&Zjj=vXm5iWn5W~Veǟ}N*Iڼ1zlݒIP),\׍{ۨr^o67P9 MLFX>*\$"<[ŲIaEݦ#RiBkFd㻹k}~]b|}RWG|{L"BFozbg}%q458 B^B3;附I &ݤwJ`W8uy[VőZ< AP0'p@7ץj(_׿ "-2-"4mx0ݰ@V)"x36-"t _U pSbH'AHF7hC)r^V7$6}d idbM$ʜH/~N~Q!$&T?ʤ0x4 $+FUJimiY$^zrvyʪd!,RLMlFKr#)` li y!lMotT&ImjL`'Ĕ?̡t S0!;ڸ#\C Fy(*.nw&G:qqV$3p>O3P?AxZfbG B{x*u%(t H`}BN|4 1Cp@ڸ$EQ m܃TIĢ:dB$ mR#}0e.`I?1ΝT6zK|6H "}S_ST;Z*+0pp(bcGfq@ƐHF]uHhCNӯ 'G6Z bnu{]fWؽv]\oy ~ )8o{[]j{BHゥapŋ/`v-4&pG58 l`5Vb G g@zxFf,18`r~ctT?\l4Z9M&mX ǎfQKD89}\x<&(i$YЩ*%XQ",.M6"ǒmxάrKkW `F*XٚSiebygc"Bt43%S֡ Ki6j9zjL:ru;_>Tr2/MLy5rSXzeLDRܨ:1IR`w%PL҉ ȕدZl6XzVg{scmۑt͚L| p6 \lQ^72Ri涴,?}w$<9yHm+pgjOy^N q:E$/'Ud psIAlwNF9ĩݚIʶhƱ .An@_ $t=RFWZe&tC<ܫmw >s;~sfEFܚ/~kobH D |Ccڧ6/B{~ + QZZ`(+j;xӐ9K(H;ø^C> @C5@c6 :<9CA{c kƒ1(‚B++B/t0 CiA%T:$,?8AcL6ٳCAlA#T$t%̺p + @,d`z ij6C? Gp9(NC^ā*(Eyc "??RGǡʋF6D tEkD l 4{\|}~Cy,F5d8bA-ƲA [#tTudv <$=CG=\AcCS2BH>F1<\aɖl쿘tH}H4DXHlH\!CC4 HK",JScJ7tʉ\CcTDBSJ4ˈ$DDYԨ|C Y>jʶʯ(IآɓJ$tZȋ'ɫK,KlND\KP, h܉@<H zFI1 usMTˤ4@tęDLMoM :|JʮԈdN;4L$ B*O O,8Lvi7W*iS IH̹; La 1϶Kɫ,KODM%r hE%MQ]QmQUQіp.[` 1Æ~sAaQs) %R`$# ՖkYRqiR)RuRmQu ˆ I$2MLRWHoг4OM,TPSyN:A0Ժ@4EӄNI="\LDTPTKK2PTNdNϊNaaq`>aNil؀ZPN`ZX`&ab!n02ĕi jpj ,m l~!b.`( ` H>Vp.\BdXQ(.c;`ldG+J ` X"pA~5`ʽcFnd X`ɰoXKm@.C{PnY.bG>eT]H*~  `E㤺\SNe^e5QY%bedNf-?Vfg~ffjfkflfmfnfofpgqgr.gs>gtNgu^gvngw~gxgygzg{g|g}g~gghh.h>hNh^hnh~hhhhhhhhhi _(i& b0~E{N]&~i iy&݀ d6jh0w>胡iꡦ( an uvjv]&Kk:>n r(n꧆fksС"밮XNlj6칮kRfgan"luƀn~" ۾mܶ&fm~n&n>nkVúNJjn2r&{8n&o^XnΦ o׾l_omQHtnWtunV p pqHpgUp~kgQ>~Ptu!n"qq r _/r#?r$Or%_r&or'r:jI肸]`$h ;Hr HP " 2XP f9j>h 8iYX>1pet,`ht,i d؄0dK]>o )0v(;h0@(..VP0bPvQ(2OJh t `(R?Y/4ht+>H\(K'h=H1]H Fwpt]" x-CG(q#:0؁-` Q7 t?a 0X9Tvfs,g XO @PDW` ~(x=(uSP*H`ȅ؀*]KP=7$`vp.x߂<G{~TyDl+MHw @ht0|jS8;/9˿]\_vjko-J}K0m~|/_C WOm/u-0P2?'D_ʏY=pDO8@hA<aG{Pr(@-H}T0c˿=#՝q5h"ƌ7r#Ȑ"G,i$ʔ*Wlc .1O 4|h`s0Q zj&"ٓxI4ZUG˰bU0 p z:ti'(ba)v砽# 4Ƞc3n1Ȓ'Sxa‚^4` >&pv`~DԨZR?4XpdB4f'r]8˻њ3'D!P lkpKYt ׳o~*Xa3OI~ 855~9J8!ZV@!, H*\ȰÇ#JHbjD fǏ CIɓ(S\ɲ˗"q0P~9І `"$oMO `8*a?m6JթRHʵW?pDO< Y*QӨuݛ7 mkB+ҜA%Cu֦D\v .߻6vH0_ekP_äs_ %K\~RఄD pIֳ_-. C dUsES`lP(\oTp[ه~5%IG+{17MUr#UO淟n(P d3P?}`O2ڈ 'O%ca)FU?  ~ TOAF~4IPM5@Ej?$aDP9 dBk8%gK}PrT Zg 4irBc'LS\)A~iV ~qV)hN߉RZ׊NP9 <L!s!%L)`Jxc[H0J?'p$nR daQ9tax؛@{jS'mtjv9eTp5I2|أw#ydAMh?8 ٖLV*8!X˪0#ɡ+4KTE TaNjZeA?& HKa\؆?L f'}$ 6ht8ب%` twQVP{7kdx?7uY2^BE@uTMfY DwOҬ%MӀf:-|KE EE{ZĆLp56)oeK@@A÷Q5&ŅSy%8nSc8bPi1u^NEjMF)`uH$\SA {iO/e_7FTAp}0I POO @@ z. F-\1 B|f+F!iqzQ"Ju(< T(iѴ$HZyMJue^=cF5BAhCƚjefM0'| #/#+0% hX=КK\k'(10 3cњ)/'G'Ϳv Q \$ bi <䍮x'֣3;fb8FUQ_z\q.a&KN3DFpFOl`AF  Sc 8mM{^< L2A"kfS3Y"͍nab h„d*} ס$KqR!t D3YqhR7rHc4/4Y(U.18ijlf–4zk\#e&`9&# ]xفb 8eB kl?R68хh FPr@| CgmK:I 8@s+WPuG&Cb7NM p}j8AYb@XW ͭd-2Ӆ#cAQq i" 9 nI椰`d#ANl΄X<fCOs6^w3:A3 -.4)'Pҏ4!Ye<,>MߔL2+91A p@SaLi`Mfγ>πMBЈNF;ѐ'MJ[Ҙδ7N{ӠGMRԨNWVհgMkBcYw^Z׹}/`&6f;nviGl;ܦrk;fymi[^7ouu]~;ގvMlz?v.¡x[7 &3p{vqa>Wrg\0oy=os! lk ~r^F@sߜEzԁT8ѭun{S:'r2zÞu߷oۼ0H a"8voow=h9k~s=Pw ~wǯ}#cNзg|<:)]=7/z[O~/ӝU~ ֿ~kG8|O_کՏoέ}|?//ߡt~Jpp}wJ(vx}WWw{}ug~"X㦂~.oGl`` @:<}MhXTuXjm Dj] 1 ʖ0px)pg*I( G8:)Cnm5{LgHtg zLx|0 |-tVkGyk '~BiVWGi8j)y1?z]'Xڙ WtYf80 . Qw u:@BǕ؀JfzإaiǥzY:y9psA,_7`*k0!}YZpɩ7iS}i:j #jǧww #ٮp~Ǥ  ; )IYGɢKk/b)Fx6ۭ 3@Dtjڂfl # ZSDZK9'(jvCdz6jD2lǴ1[%Ćzf_"yx_i5hj%J ˈȺfɶʨu MKߪ Ym #jktG7! 0 7H7pmypۓ*#G8 ʰZyךIې:ץ[k[Fl#[~승ʤFՒyg:i۾IRȷK*Xو©q*8 Xk 8zhætB\+Z:vRKʯ[n[lY\Il/1>lJ @K*~J=;u6Lع{Qg1Ju+8lE/Jl#0 `@YkX G |a"t;jWlkˬ¼󋻔 RVZ nP[n>ƭ;xᇮ)~y7l*$ ;ܮ_lCpz˷ zVJoɟ\Y"\ R`` ASZ*_Iz ,'+@Įp琏wl>\jXOlGxr!_}v(lP R Km | iBmH xLw0p l0@A#='{.utZ{ LFύ7j(-`؍MaBt7z~k Kgֹx#_ـZ(ݮs}w:Hű-}C "yy +; ԕ<ʦ+ŀ J1Uykc̮銊7,o K& <(}ެpfwtL\۫z=z)RnYw'3nlt#[ý7 '~< *plcf8M^llY\؆m?vB]y۞۪6F|'ۺƚ>*ަ]_&;|wmm_x肾1T`JCnz߯+uVN{km7?Jj'0wBXzph$K& {ٝktqkϷ}Yn|NsSX9o߮< wީəl ު,gf|eam!LȆp (Dd빮8NH;MA~܀v̬oV;a},&{'z;zwFqp:Ip4pPPP:q8~a|\Y {k_`Q6nvtTbBxjϻk-Ǧte۱v7z️seCYni7$͔>u%P(Nc΃+t\- Ol1PKOqOG؊セ$XA$ /(`ÙpiAT/ Gr.Z(BYq.g9}g 0rqFKf"Ο((ΚA$<Ȁc 8#>"cH<=-)5 4=󓧉 5Q -@BT4!%:De.s */B ~;ʹRbrrK0\rInlIӱ`RX(^َrYlW 2kґjDοƒ% p `[ 5ކ:w~?MtZ*LA6 *`aT,S_RX*+qFX0VXA ,(F 7,bR^Y<,_bb>(WeE<QI &Ȏ6j/o8 xÞ7`GK#?wS`Q;#0j,e"EF ,QGᆹrAj ^V% KK,EvcX|bfV؞c&] y.thV:O4Rij8"'†eS@&QC:tLCVy{%c%D! b;6f~ a&Kb !4|_7QR.PKh)9k` (WR@Ax`pY~f,ըuY 1%`BCHڴtnJW52h=}dK^c=`d{nX fܨ'&}DS HHp{ RVt#(v*DX jpgD\WP hEnw|%L\HxN!`0%Ch=)T}FD"Ɨ'vB ,7&\bk #P`W$UALF6`#KD 9H3Et3`HGY En"L@ _0zbO]8a5$T L{88M(JOT&WQFp(D`/'+)4 N|P Re ȝ !ėZLsd҃VB (Pf9ZF mw l(*D핣`/%twlbD1 6V2I&Z`qP,fF9M󱝢֦XK. u$[dnUK :V"0{IJ1PBWk !pDҊF/rOm`^Y,J+ay bFm9q w⴦9UUBZpX[d4 E9:'cc1oC|,  x, wL v%j֖u{%Hn4`]_z9o]ԞՄn0kp É^ЃIMsD$f4|+?KUƀb[3х.}.PS; ,0F^9)Y3ȅCgʊӫ@\اݰ2Xk&{1jk+(+ +; JKB[)p@;2lhyQA-Ö. 4 r& _0Cs|찈RI\cË&0 A viD<ҋK?=B ;h.*t+d*<<3VԱZ̫_BLRB4de< xɇ (PiHRy& +*1>t[A6D*zDs7c6I;#A++9DN|P?X¹.;u`iD[EXIt3\B âXLp IL 8W8{{LF؀F :18<*Ɗ )* c=|5/ 8H=zt@2l>NjD{C+7SȾ ;pHP܍lA[uHs A.M K;̀C{F( >L+>xM.l\>+p` O#I>4;T zɅ;p%#o. &O>Ck+AAH!LXH`llN(v3㼁(*ZNKɁJD `('@. b8 z"τ@Jh2ᬐQ<sŃx,JX"bHtKI\OoDu*8(kDwyy)܇Ü.ض6R; hss5 rȸ\ȇG""chcx NX[;˓,W+ 5PG ,o H|Pɳ`Jx*||38Ѕ6 0?CHdD p؋+6|H3(#$>=Vt!94#{.`ԮhßLD <1<3O*(d=@;}% ,{QXK `BZr>–z\,ڊ[OiR([m %,e3eJdUeTB8(ٱܼnIM4;c71+ Wo~д˄ݸ[׼!,?/DɅP)bQBWׅMþ<>V}bC8xR>4;CLOpyLVmF|12@S5M6] vP6x+H5(1D< 0.]rqcmKC 8@N{BuWç/๑ŊmU `HЋ2$ܖI@AsD5_tᾐKֺ+X iVVU M#h`+,t38+5q1 %8P6~&Xup<u`:Md}ՍF@B ; ѯsPJKޠ[h &AxRHoQP {nAY䰮&(9KE &Ft1 s.Q1u;tMݑcHS]ǃR59 gsXQ Ft> cyUTl" Q |޿x^ ˖Sklm2kL䘃G4_b{MWhvP ?fl<(C[ Ą 2SJX Ca(;>a [ND' ?95Bν漀[hSnAlr)3D֢-#~D.lӻU^10B|]v̗哷vf1IrއLFh=Ծ; ] ͂hF(u[^v߉!1.It9ُR`H8븞k)_+N(Th1b(OvsoLt`D8(9fh7QԠ]m.3pՎAg{KB@! s8ބN6Y#f $kd*^e\#(o7.PofMHZ(18SNeQ04hn\0Nwprſ eNퟻz=^ M:J:&IW;lj[dT$F`}˰b 5T y *nD_ q/X5(0}R@qoKhھVF?k^پ ebQdt?cM,<~ų=E]Df+`n<7(yf/Wrl:7vf R}M@7N(pD+$t-BXYwoAjb jJ|q}s59$un*^_`؅WGPF2- N/y Zd'0(P(O8K87ˡFw򦆧G}mІ5Kuhfbic5+7<%V.fpZ */Pd`o?mG/(^~pP p~ @A3/`87iW*z;>-47)z0^ P+h/(hK\2F2pHl"G,)&PJ4)0\ňc6I&.b1`Qe߾PN:UլZrE*֮WkYjײm;VٱXӺ k\_[׬] )g8\}% 0έۿ0chCCpdTzWtiP a!<,1[$cB@MPP9x9hPEb#,UjcLdһd{/)嵊y'% HE-DRMhd]nEV(MXkV]veA8)pXdCgXd`m ef\"SܐKk CFFGSDB{щXW n\фxx(}s/gRz MԧA8AY!x C1 fF7(*kz Rvz};2VY>vtCl& ?<M`\aJ(F88B0N#">E͞,7e|[%2uanꕫd,6&]t^>/(@ :Hp1niw=2Ip7 <e41]HfՋYWƋUNARu% t`2pgä!Ihr4(tkIeC,Ta WP@j^D0N[cċF앶 RzD ķA~&#Nr<>! ǐ$#Z^*(FoR"͔I t!f&8TgrC0&G.'<⎉fd&7l-Wɛ'I\av0-;P@57\ q3?0&&xg氒8K!ájp7C"M.GIEI%s|hH'*4ZZ\w9lVux"^ꌗ'LB#RH& TBtV Hi\wJfHCL+4!9 ?2vnjc@5>T@C86.1qd6 :+r~]RZSeԡ4b_|h%,wVK_9|X$hv\ &zD%#yڧM S# ! PUrXrĐd}.ǬÉT/3$k1WNu+3_kWJ+z "Qgnβo(NE|%) 0 NC`F)8iMOX߼`s}ERn'?|&" $IXv+F0r kIvt"C˽FT}rD[ꩮʂg5\.Y3pX"Qm\g (6%ʮVqg#Ӣj(Hj9NPSS%n=pXxrd$G 6փ}ś kh#xʓuRäE-V"<89E Ea؍W F0]uuKhLȍ_f|cϽ ld8D$\L/RMdI}$)rB5˵[X TXOVK Lމ8 ,\u-7=dỚۙ]%̧\OM$]Ԡ Z0AQh&$19bvق"^@^\. |Z*fmscR fXA"@Z ,SlD)h"E#q܇w&ADd&8ѿ1L}{Ð)JxɝZHyA%ꝃbPMhgen(zbelj{ih촨ia!c.t"Z*\J->]EnNL Jxh֌zDS8@uݞUoIAUV R|8 k<װZ:y]n=Q+h&!Me1L) ,"Ÿ)DT~*IfoLLLKVpSj!ߒʡ +@]lvD) _ү^ ^|@rh[( `qVA\hpjoy׮Ya?Ls( LkV,;P,ۡDH 0Tʚx%#lJkXXmjvdd QQ%Β 4* *W~D1llɕ,8*V`:_{D4yƎ=[jj+DTB%.Rhb^*(6PFBSHbaoHRА \--TN"\zJ͖@GTa >m &қnlƤɕ #"hnBwEZx\@,͌K!֢hкhC;զ xT=Sc) 4RpNSu&,o)tIEo4&G:=; ׆B@5+pQXNSh~? qrehd>YWKΜD>C2rè6n^)rU 1$wFPMӠQfZSN@^ kA ~On$nlR/1s)J _®UC ͋V%~nRRf5V$kZmn Y ]H@Lfؖ@s'~KpPLń3BmxA%vXJ"RL(΂b2X|4'ne'Vd+! 0ECoBKoʎ9-,M*>]?aaOyޤ p0RkFRqVdpj. :I"q$~݄PM0Ue$mJ(Ύ,[hK%5έu,{-u8VBNnj n9*uwgRwlJbب9 1iTx@ O:y%WE{pNF4?$u5 n[5u)wlalM ̲JVjZJaJ)zMK)Aĺ< `$k`3=!w=x8jSP,k_/ʌrmu]S Jy@Ea퇗#Ӳ5B;D :cStx:jNfn(7;N~8l>5JvR1XAmC\!'syg؝/+|"5Ae OxʠG]8jtcge ` :H7/m2tGIDBu*z-L(_.R@H@<*+pO)ܘ.A,CIj{TCⰚH͛e2lʯ{jbx^ (AG.\wcxVX,,:/z*oV0`&Q m8=ոZL3z"2tOJ?Ɏo㕣J>,U^{c.1Cm7y9c9[\^jD %k6?N@aB:a/ C`qH'f|n(fvZJA15]k?$Fv3Vɗx%Q޿knuwqCHTC"_VE=mѸ%w/OJ\+(@18@2\B8d@eჇ 7nl'!p41rr/ftٲ!$I hPCf!hФ?uڴg.ir9-Ӭ[{6ͲRPr=v,ӠiµuVGm羵{/ܻW\t{!.bq#V֛Wr[f9s}h=H^r$#&,YBf2i7Y!IpH@br@5ĸ'dt H!}aG ,*2TSp{/-[0ŐUhlE\u]j /H*R#$c} (=*/HhmDi_vMHj2$-rXj!f$ ("(⎣y;Nhbπ[$ 4MtEi 'B,T$c9XS:T䰮ViFAFXr1\,1nLYou+ : YԋEY"s '&(۬퀂6')BEP@2z!7͈ nL(;B8RP`/$>d0.id {*J57 :f25[oƹCV}yhqek_㺡*e.r,TxecбD]'C/s+hȰ7N!(;P:Dmt: ,D9y H24:CB ̮v].W#r]jJR\-̭P@f2"j&-]{+88xOP|W&) =w@=HR/ta~"M4 $ Y[Gerg43JD}Aa Hw%rUf֢LEs1(C̏ta'E_#z"` ytGZSRU 2vC FB +JM;%c #h_nr9xEked˜SȪ!%IڨA M(h ~"- l@_Ӱ68Bf4<@cx J@SvIF…f%}S;._t4Bzu @)c vXki6$-i-٥B q{΀8AKb ݅#*:A){@V.r~0uϕi0=_ IcځH' #l< W5j]]$P6KL($ŦTJ^<[`!#_P[ԣ"CHkSR,/햢?9Rr*Hԗ{j1A M]Og =YHe:cS7Il:Nuh;1ֿ߽Wt_9UTG@_֞lS" dSg;qMH݈.Ifm d* tlb.cvoJZ͟, AJ.)(kBO%ؤe`$H^ J;, d"EG py"eh/c‘nGRffjPhfXr=߰ u60S*/NŐ(-'F`LIl)_^@Բ5_ Rd˲&"rbCrbm/Qjac/jfjZ^|n8" |>6,roPnP4oW;}A'C\M1yFjUHv #-Ƒ\Pq@*taAimסr@@/]JL zsydP<{W O,F@( 7EOms PGpԄP1jO,)n^Vǀq4PWThSn@vgw7XJBءaѶ"rqFXx!$Fn=Jw"2\~8`Éhsl7>c@sc%+SvH4xr^vmI]Ts v{Y')h9bV..ƙwlX'v"b|XM6.8o7DC;Oh j ȷ*7р.6⎤SFGs-7g(<COuL21Nt_rVER~/ bVh-'֘Y9&pR &摑iMf<8AZo7gsU(#l79# Zw OtUXME I):SP}/F»d5E dжj qrq' fIkpfN!2boZd!XX$$$1oq1}-5#gqWy+Hw=$ӡǚmUf'FY.")b4nm{t(I@}ģ _ƙ`H4?' 3Y`3#ueӵ2id :)u75U j$EbdˬL.FM'G^mo dw~hWPbUT' 7Z1k&%TQwVכ`no{ƚF @+G#;_h~R9y8=iv۟QYލ@ex8W$uZg.uj8G_-|ظX=EhH2dc;#o=%6A orOXi}C+M-AsGcF;Hw'T݊mʼn[foǾ-rse iwMi~"H _>b=\ <+Rx9FE,o"V\S )or93_qs3ifHsL:nw8+ 8TR$ۄ~J8EpoA[ ~٩>K;߃.uq{&jC^vsFqT2-6c>r3FRƭ$)1N"# {9Onj8f7ѐ3?{x«^+-t[9=_bQZγ"5Q5Gn j҇"~RiDb p~u@X05sEzwu4Ynk l#QkR#P.'Tj'pvs)`A.G1v޺ diL. WWDp@W~VhV䬧B[J o[ן@LFRڲ0 FVTUvLg<"uƳCy.o@,a2hB) %Pd @x؁"} Zd^iNڐН"uy M$E>mJZxE(+r`;$ 6;wTOGC%ۊUNݡH;뺓Ċ,l$z!]rd6$(=f/irt+?-~PYd!-[+X؈Х-GwX1dE(H'#y OOd 9uv5 h)Tx9l,XB_' %H22iLH%.r7iR'S\D!G:rKD" 'IfHA zģ>GE4U%b㐱)#1IP+1G R]Y FP 0B`jH/ LḐ!z@V9?s1D9p&QGrzoq: +TysC P? <+ V  +(Fe'kSRņ2q/3j`%OyA&uURXۂD}^~ 2,}~1q8b~גS$U+\kFF]_s05M'Uu'(0SQ ,1 7BP6kSbÿUS="7+%|w"\v&7 0 cRdk\ fZ4x' ^hA.$oNm8!N,5@rce-0`Nw)J~zȐ3 8hyOYK cI8ŕ(#\lu im'^ZPIpkTL: k )w*50>!OX3C10NpۊFQy0 NzSWBmr ȏaZp8k&l ݪqmiC^WCo.`c4:x-7֟"b-_Y76U8Ynx hmv Zlj lkM^*́R 9@n.-֝t<ǿ{g Y.CFJIi+#^Zu35#b@'X| pC~+v2)QÛoyGF;!: 9^H}Bv5 h'vbEЩVo3NэbNэn8D?ǭ~n^n8z=e9t^p06xwy;PuqӇ76@7&cRqlt!V0 1XW] )j(8ư2gS Z mGnK9UDd?z]EG6RoR"FS>f˷5 "5 ` R`*R\ 0]@]p3H7P]`4QzixՀBt71ruaR,`Mm1&-i4WWx&Ez DzaiGXq82lRw6vL\1=%{"ELUA ' 'pP P  P ' L x g]z~WOT>2g>=& yt'x!bAƀ%icdo5A|*GJv0$ZSY^xZ!l-ALL\kF &0 k \0]US!b ݰhÅyҋhzRM5x"dAtFA#5$<{w$uM"54p \p0 \\ ڐ sB[%t_yF+=&U`r$2bb4Jڂ91ci~rrYnhXwz(.':5`dL¤f|[N:ɍodCR$ BpkkB9x6ؕa]v@EI2{f8Dpp PT9-9(J#4$);KcُcIliT{H/HFV`+Ijo 4Aq"^#IqЈ Pؐ p PX0 iy@T ;4>gU-g^e>KP"!P!:ȗJEEL潎ycHLDJdVd+,^ zu lˁ@l;d^e$jQ_K3&Nhr:}ƅ,D1ڑd vEk!rIĹr?*đ5ש|#/{\/fA#.{vƧ,KQLKba1 3=3c=-9c6!Ccŷazͺ"Ig8z ͺx,4l)EpFG>ECzi~y!ůݬ86Vb kV=Ȇs6ͼP5Fz(׌A=׸ײ/)q]^Di1؂|]j[$i>'724h1&`-h;zI[KM l[oS=}"v$=#Bm#|;FF7SIFi1]ݜUrɩ)u"n.,ix<ש\5]0o;::+1vXKPBٕ0~7.iKx'U V,4Ņ ` bpÊa ۾t\嘞6I>B*cc*#kI̱ .wlal\λ|Q .b eCm5n'P-h8icle 6nw:T:jݍ`ܬ25wZ)0xSo1=x_&0E=W0*fX ^@!/]f޸O++{"Oή:{?eF#9V+ i$P $b@ O$cDp 4Epd,k|r+?X7]{̇;[́-=LܳK=!lbixߐ4NJ GXOe?s`P@81N-}!VmO,4p`Y >T!CRD1vQG$C<ّdpXK0myL7k3\8uyHk" 慟K[>3V?NUbʅI>h,لl׺hk]6Y%yp%b#MBxF-Ճf\ѭ!psJdNbP۶ZN bꓲS$C QngSR 7.MFӤqC0YHSfҙ9*Wu]fzߙ_y8JU}Q*'B(`z&+3 2a#Ri,W"3 G0l3B`Z"d4,t1n6o5lsM-K9NKÂ|lT(J8[k[%5j,O|.^51*`KYXTuw{ qd@(%HEM4CHsRRL2zƑhS~jY%2PKoԳ&U3[vJ9d:NH3\nw,d3Vimb{haqnmTE^WPbT/U7tOKmkIY0;\=,ł|Χft`ȄfkJ99g+]d2t ]L d@]FXBAu[(`Ìfg)1$ QffNܣ! qn`?i,<[_ 4_H$9hI3IG@+/QvNcBA Wt]xׄa£R1+EH 5ռdM C >bˡ"2UqKI|$KYRTEXCd].,JHhFMȑ:CR *ЁB9>$`B#LI3r6C0md Ƽ=Nj7W$zS;#ter0V09YޏXA=-1n:,R%$ĥpu p@t+^ /Կ)CrRRh8 ġ%Knӟ8a2r R0AӸ….vA1!ý@8Q(T UH? T򔒎ݥYG%,v2|LԊ@ h1'啱U.&Xjǘ!4dllɲ(O{(,uˣPo%ED*a~y 'MUN7q]m͝5Z?J-%,aلg&*f];<ƜwC:w!+`i]u kf4*ƍFDYsY]"cL\vח\k-pR_U~ 4kuL{Gf00L/ 09yh˙<_ZTXohaS1$ɚJ: u/O'BgS^%˯e>A>FpA况L]0x`N0:iuE0 pNao@DtOZ+FBzCYxYUBcXUJ2;UytM qZP胓1 T)qs#@хK|!Ekk|Q.a%B (c2C_C:qˍ1#*#QN7p2#DX+xC\8Ai X .Ԃ]XC*V?nCQnfר Qhv$h _yjl9 )Sm{55M+ٮ{F wݢYO%7Fu}{eK4_.FVZ?&Ss Ʒ-erT$I8Rp a'@LM m_C2]ص-S؁i @4á  hJ }'K.`pЇ5(.;&hY.@=ۻ@ֻ v!.@X/\A )H<@A<1|(AC=@J*TxB4^>-2c3a}Z&sZ WX&"Z8&bA-lL<3%_a`, SH s7\8Cd:Գvʞ[|#< aDR3t+ ?V C`\Ce/P(%'x2'Cd'3.0qPHx0d.SE+iZ&2b$YC XFq jH@ どojjԔk ATG,+r4+G,7wHt:D \ʇH3/v14*X\ +.8z})yqLEKA1ۇA $ If/PT/`@hʔtGI, :,ː'["y̅ )-@YԇwX I<xKGSLHy܇y1 $Lؐ dƽ=pIl.WC'LƢl Mc[{ϴ7ٕ0NJ`Y+J>,IsÛ:]#DPF9ILt.*ED>CTETBD~̜~AKKSQk202:)3ͦ0B@mʄSlD%Kg%:Zϣ#" ZSAR0Px"PB )T1*5: Xk20[>!Ps9kCjdU']URXS٨zH9~*LD-u,\qJP I۴Ml9IYIoIӁL[a,֡[֊yPTA"jR/J 9MZ I#(ݴ5gð}[ ۳Aϻӿer: G==XaY|`>K|$nu`EX 6 0 ԥʀ:$=kUe1ndXAP%YllYhz`N;:PS"bs]`<%JJ%Ű'6]3gˀ*8YT/]DM2f`ܥٴSZ5㑫^rDE 5/ (~hXJ!~-.a#ԣ5:^`m`^IdL%5a0FҊ퉙a,Zd06+X&6BgЫb䡳McINmćF:}QK0ӺڢnXܝ$6ȁAeCv`%,ndlD]iq(ިa]cfeڵ([~YK>+0I"Ҋ pgRNpJO%@HZ#43k7RWvn m+1L4Xrܴ"^_B}M%0:%0^,%+hhhee d2*]dmEl^e0'Ȏ )Z%8jIcG&hc|/j&xɿZu] ˤ)G4@x:7/'V}VހQ #Kj qp2qڸh^l){s~̙)E 'ݛ]?Ynulvmυ%8(CBчNNމX n,%bjiNzTA8ێUX﹥ƺîhnʣĈCCخx0muQeOݜcک?N> _K'& pinl=>7.|f|֜V&l~E4w ܃1^H!t2$j"]Fa UIf\MѶh_evhVqN\jx5cX$P&YU.YU^-2dUirb* f8$vYf{\YkI&Bx`yTfI$t f)uXFhu569ci~~8{#!Th*g}"xbm՝^jF+S " E#pwd^k*쵦b+v y妳gnʕVy겾 F_ ߎq*s*;"Y ߋ*I-jkhs/n#̰xŠ\wL._gF.J̸ף?]8ķ.7fi-yҋ_ٲn>$hv`'4BgDƭB:)P*b{fYr*ѡ){y-9 n K2kG/lUЄ҄aeiZY!%"Qd`Ėӣ+*D/ܠTI2KeC(!!hjg2uTo#jLb=сCDribĺ*J GDA/  L$-VR:5IMYcus&M"nK~>)̨ W:z})M;t -R@"QZ~CEٹY>*Vfد=\hg|+tBұ,BօJTW/Uɇ*)!]&FzjIWkjƁ^VS&fQ934Ԕ#`ƴX)ye? ~S*20t_ͺVzUBwkADZ|4뾐u;yxv!8QRԧr!Ug7|߿9_ s]=Iwww=E;Nn6'R 9!DG{Dq ]i \WG]^iX aߖ5a\؞D߯hL.8\ x= AY}y[rE٨IYY hXI]lTO\CL! ѡI[qC HKdPܿ q!!ƴ)H%E &=Oh"4;E`lR+~%fZ"Tӌe-"ɹℨǔ}E="a݀a^,&v$[" V""B\aBjbaW>PٛX!9 /V ?0BXUZ8Q-Vz1abVbU"DzݾmYdd? ,E dnY3cH6R^)i`7d`Ȥ9bBx, Ljy"_ aIZQ>޳ $jEEuyc >;Wtje^9 dԛ \=eťF̥U`EΎA^YmX!#6T|5#@v%حĘ %OBt"iJQM&U]Jqe%e"Fdُ}8] cGVѣiQAb>N`$-nfXRQR'+ ܐ(ٔmREx FYYZtmcu$B`?Q#N8\d [gdYegg. :|JnfmoN",r jBT@=8gEM!qo"gG1gBba4)JOgId)g6Fef!aU(XѩnZ o TR! ΏMѥ@NWz@hNOEURiR}橬* w K>PU hԫi8DY5b*i>ަjgZ=\|Α!!_ĤW7+#کy}]ngnaBB:l)u PlV8P8`fv^n Ǝ,~,ƒ,ǮlȪ,ʖ,fƬdžlȂllrl6j%2VJ*T1DLel,-Ųl۶ӚR-BB--lm- "ж-n,՚~B)6kW>EN (b&ɺnǾϮ-&- ۮ..N.lm.oQQNڏV{Tw:1V^/m ʺ lB>@,۪nl>® mmүl/A;/*8-R-*Jy#Kkb027JpB:n2Xl@2$C$ /˚2 2@"pњ@؁2 h pʃ)Ь ,2.*|,t*4ά:p@-2c1 B +C&l :.@3>72J?gp:\2"Bݕ-h~R[E>mG{C1cwC+Ƴ 2rd= tklvy:h2 k L@@8) /ƃ/Tx?Sw/g/A dƒ|c,.%ĵ L;S6@)(;J@ Ԃ,h{ЗS0ShغƎɏCw<4>9eYzi桅+!" c1ǚ4CX?/CC)//K;`+*=<5wvLuΏЋ s=h2l3[g:w}6I+ 8t:4B;M@`ńd$LL\J6N3CBU H(Aݸ }f$B"9Qd`My<8t (tQi:b^2)f,;lYM{دYֲۖعvޭ׬^MX߰kk.au xЧ&Ӫl/HvB{/02O!#ʕ0Aq] "ͳk#:N`܈kɛD(Pe\71Ad֑Q&dhB:2$G",*` .q.ц ;PeL;ppM!98)bi;vr)C-)(2g sK2"/2J-J/ J1,SDk$L,;J!9SrX 3Gni.POIsr3Ρ$eD{4њ.QH뢞< 44Q!Ym ŲFyuZIH NHSuR?SRZ'07|KM1Vlq\qoXbӓU+a-uOA^mwwYwC7ހYb*R=av 3cwtgDZ(-3ےE9Mo L/-OfyK4"ru ) X9&ee=bzEbv*Mj5}jU7=b:;lnR4۶ݖk\Jii1߶o0vxlǶX89f:?^髛^{:l1nGzia]iq]y߁w/O^og驯^_/O_o__@4$ t!A N1A nAB%4 QB l`5ΐ5 qC=D!;DH#&MtE)NU"Q Uc?F1e4јF5mG9ΑudcF<ڑ}4!F<rL#!iE2>o#$!IQ2z,d(IJUє\+S F’oo_/'KaFҔy1?YL\"sd0R.rx)XS\)Mq17] sD$6ѷuӕ\)in&(h4)CR4gCPsA͗ЊnGARdb|IQR%)LRΔ5M=@STPTdUMEiQwTNզpUРi({<"?)KUPTɚ֔ )p+lM;*Q՟fZX b܀Z I`$!VkF2ZhC\+>Z}{iI0b`E-6 p870 j hdWYZv3rtB? kQ%ڈN÷m̆6̲{k\=%8{he[ê@ 4Eq]{\ڗ[a Ra $X8A]щܕbq k/9!;]mC%%_0@!/UN厳c+oAa bɆ0ރ FwgrfG/7,\7]%Qfrȭi>b{Z؏6#6iQΣ6Q=LJ_ҩva-U[ձo=׽uM=^r7lc/Fv?liO%m _3}\]^ =VKbr1.QJCz,7p/ w!qO1qoAr%7n-wasϜ5qsƱqh!<7ё)D@+6l(P"|vE8_؁exձw^D c ot?P'@3P馐ypIwJ a9 P_")1 ` #18dy2 oH/# C~O|쇸[ݾFJc ַ| \ϸoHoүZ/hĨ!I7/$ @0Imm 0Zp_PАhoplÈK hO`9O  H Wp H 0ː0 0 0l/P,0 Ӑ0Q(lA@ Q(qH~a혎銠PXGQ@ !dOXqh1G1qqi+C|h`ˀ F|q1}hq2 ZA.RN!h*.,2jExcʨp #e0$.nN&ը&݊# a$jNr%èR\b ,wϼ \azK,98-:! 2/8Բr7 L,Oj0`a2-1%H`:2Κ2 .1A6iӾ*0rr2 \"0zR"('+@9)27+S-1F"!eu*s<,39"kR#ah.w:r4q HR3 <@< $5"1d.4C&{N`6!=i3:A9ɳtҿ-'+GG+ /u 9+2.6s=03>12[0>73+mG|A<HaAgO`)B a*t6\\!E9+7\ `7J(jC8 >S7 NJs#Sa>`Q{cIqJ Q%7K:R$ `M@5t48`2r*Y5*,RSpGSVFz"S"r)3N`j)ųPuV \J\+ܴHO Up/YqB! )O?D7HRTʼR%52 `&) T2.TI !0@'2_vz J3#4V:PW)9Atl4Қ)1 =!ZS Fvn [h'S"^VʪN2OUPFT!}xN?k >kr/up+/pEp~@DO6oq}kaVPlqm]e,-wkKa9iRVӌVo2ztR{{4ӜӪZ%lFyH}u |w~q$1 !, Hp*\ȰÇ7Hŋ3jȱǏ 9꠴T(S\ɲ˗0cʜҋ8sɳO^PHхi*]ʴ) t9ꠈ~.4d@ON7&pJEڷpҴݻ OBG?L*a%*.U+׉&8-HRLϠKt^LC%H M6[ G )R@ te&|-GDQɗ gLSL K = L A[diqVM&tHW2"!LD>6@cbaƉ DŽTG4b RK4CC/hO`Ň|(*nZLkc5gI >xRS]vumQw %B"o2UEnԩN nsaTObPJ6Se X >MbT!"S:JUYj?=+@TD*& T^a8r|:$+`,UEVmj$8?`3;Xu߬P'jЂ ArF0HXXM S4h"L!CZ*B M—ł, @ 3+Z 1+j?*ඕV5=:62mA\0Qc|ǭd=*:m? w+ \A.Џz;v?dʐnNH O1A m`Hb? B4 Luz"A I gqPʑ7?} +_+S^m@a#C Qz_~I@?jB@a"n=q{|/V S&:!gXn_>08,jaCXCpq) |NOЀ1g)!QBNa X<j{:ۢ@ *]Bn#ەh@dQ`?Q@pa0{c_if oR9ذ_Ÿ: IP|⺎.!cBU, &vɖj8HjPW!(փL:#@. 498^"9~ o#FGc;P ~9pG P(g?`EUW:>nS{FQI'I` hp&.4, `ԡw Mdp4I > ?z3|o  H٨T/BP,Qh*KP6MGr% 4Qt DDWn3xBkWЀMŬh>E|@ hQԞHbOlAbhHGT"hrΰ…( U0T^1 Dh+@A2#nDt PUH3 O#H2r3[j!E+4Q\/X*mU 95 Ҡu;|o+]cLm^Da1(ubPA`ZtaœzJr!92c 5~ܫ(˅3yAZaI*^ ~_rG٪(T$cLX2 <,QEj-[ _%#}1SItˬ 禶L3i aız@@Q ȃIh:F 2^a7ʧoL#G5,R[s RPEzGCN7rbF[;vHD eHR3pۄ{kLv_.ʹ5RkvLj5 -UPT Lڷd+J\hvH:W Dظŵ o]8ww]CιЇNG$)];PWё_dX{`L.dȺ[pa$ H46OiOL!x񐏼'OW>ص7{GOқOWֻgO_dϽwOO;ЏO[~{OO_}QϿ~'P ؀ 18(؁ >@*,؂.+HP4Hp:<؃>G$X%)HJLHDhM8TXVxPHR^`bZ]8hj4sЏ3*+ْ&k yD8 IiB TDقFqz-ɎPhFy4P\:ٕ ѓ QA_4IR%iq S å!?p 0a ;bC30pIPɒ8 A $aYSop  $$\ K`ɃP@G@G񕹙b9f%@ $,DTq 8+^Q2ay2 >Kp 0Yؘz[z`[` UPD5-P,a\݅q0iy/؟dA3Qa E QBZ@P0+K2k$<,K 3Р% Ri p@"ʤ` Sd1p6VJ +kp r =jmaFcNS $X 2d?^SSAō? Ta:z(X"TLk5o  -80SRR'^ ? P1 z\C  ǸeiL@580 .J`! g"1aB/ Ij,L 5 :*\PZc_c)( pcvT*aCg֙*Pzr0+h(_$[D@`  ! ]0az K *  p/4 г[SSNuX+}:  k&pZkqiE51 ;+TU) 9 Q4RPd+d7;oF[M !  tfкf zz ˵6km38>g ([hG*^ zz)kLڞ{ JfADlT>pG*Kk٘vFậz@y Sl: «UAxvUFr(SLbsKt[(BC^iuoȾJ ~3&JK6a `4 H]:ŘJLNPR=T]V}X=l\͂`b=d]WM(}]l[pr]vt}z|׀}~؄]7؆؊؎ؑӐ]ِؖنٚٞv ڢ]mMڦFڪ4ڮ ۲]eL۶۰/ ֬Í݀̀M~=~.X ҭ {0 h}`|8Kg *0D'YٽmG -{P~0)[{ >~@v}yJcC/ > s) V s 1D-2^~7N~)>KBW͑AN~0~GvK.PG Zѿ?w< KVS]I'Qnmg t$xIЫ%%50 "\() b\@ {non~.MWa雰 ҳzzNXp@L{~mqɰ+zΙy @P:>>Lp `~o$ھˎ{hy:Cz< > no s `QɎ O[T1;%;8.[) ؐI/DT+25@:{0mB߻LD#KS B2c,Hoo{*),P@jZ{Iomd[\(a @K Fyjb sSvh3^c{?q.zzݜvb},pc" ;{h  { q\ケP` kdq2DE O1~k гh>Nί{Td2N5J;Ǡ[ 1W2 6A ĵE0 !?M#YrZ)UT5z,AP.[栅 acʑ&IdiH/aLS)m` cJӧ[ibV-[qX߷C,AՄ2Z8e BN!z7scЎ!Kl.ҫd -:ʗ} 0Ƕ 'vkuyF?!k S@\%#X7޼8?-lUdS1g;]t o?d2",b˭;˥ )"GsrdZ*N*@s\r$3ଡ˫ʤBQG/,r[Ȓ{t^:8@Qb嶰ұ'&hL< ˥#H^Z#ɐ/Uo<F6*ϠJ ~tNїѮ,=TS"³2\-J0X(,@ 9\RP*l3@Db!}u9kMVdG۶D`]"rK:w9x[ewsλ1%bX{#6 m z"X"1\Q.$A8=1z0:TAy\|8o6fxWzj1LaX竰3YϢd'lf?*BGF7΂LvMz_;pt.['RAC"Bvo N#0%V4+i&2Ir(u"a iI8"m?j;?Eb^ 矃o[+*C8~raz|zëW @gfEĄi@#B?$d!  -[`֠vTD5ecTIKShH ϔ:qKV@#kMl,gs]p0ԐPK#D1[H2#Tۋ>+DL="TPpFCrbTZ-p=Dc+O ?w#WM9X%чAL2$I:١O$LSXRNJ%KPI;CY2(U!Ĭ 0jGSQęj2o ș&9KUe:My %HI`>c%gCP.1"χ.4O +?yH>€>(=]Ї#6%5chZt7'ORZ([MI hl SaKE*. ,Am$'>p0DP&{^<⽐ 5T̰/qyER >~o R<2x;tHTP/$wJ+0!(VHA"g.c vD!KO$ʦo a! |5Rb>F7J@;UK07(ng;!zқ @oH @ "aCwRs@?؟޿7>Lث9P!o 78[ ?,yi­b`4 `k-< s ˆX ?:9'+ ahXk/ZX$ЇCpxjA 38|pAs 0 ^؅˯L( c/=lA%lB}x²(?i耔?P8J3%4S6 xajЇC ; F!/cAL =q; 4(k0!]5l'y( ?'[B/Td0yx@;jY 9[ w hT;=d 8 Twx4(?&ZFi|jAk^X3-4y6|[BT9x\aТ!آX/SA0 hc?~[B0рeKK8dh -DY"LEȀ X@BiDzU3qddɇw"+ | "`/9CGx OIqE|w`JlhuT5L2rCG[c^,CƁ&pHhxȓ;qHpJA" HrT.ԇ8j'[B[3xFDI} 0Kiۃ^4%L ;D; ԇ { /HDz M/ڴMtM ( 8u -5L/|ǰ1lPtHO8SS٬/̀XOW KF![\ŀ`x2lPȅ^<:]AAvaQ#PNv{Q VX(@[]Ea3?򃞐FȆZXM׀X؍m؇Հ3c9@CdGdUL2Oؑ Ȇ2r\/;^-AxqМ 3`Oհ WEڠGOŗ <|2rF ]A8ЬPEąvЇ5L ;E -NNEݯ QZ#[CZ\T}RTY.wwPj~H$J3]8;q/k/km51NRx/cݲPrN};R^m/"D^^TEU_-_ٰm_}_>^__1__%__`_.`>#_4C`~`~3f8`(] &#` `M]_a>`^aaaaaaaaa b!b".b#>b$Nb%^b!^zb(brb)b+b,b.bb/c1ؚ`%c4Nc5f*0^c7~c8f6c:c;V!3&;c>9c@0cA.dCbB>dE^JdF~dH6-G ZuP:J{PGJo NHFNv }:Te]X)R>9H ZpV (<\ґvP^ ?w4RPQ.eK^fOe5M`*p`oo肔JPa *qsFgP(I8<:*/9K ǸZAkV$~ v*xY(#0 *ڹH7iX)~"X~V(sx+ _):A98#G^ Rhh6 2WFn 6mj^mFc9n`B P88JjjG]Ȍ :T('h*9kȀ b?ȜXaFىXƳ^pzH6 o \ 2Dnis fk+X50i1o}zpNPNV*P:y:io#i=,  Ђi\YO'FgjU3yڊ?rNkf{@{8{`Mz/zApր*Szsח:@n󤢈?}:h˷ 7ew>m!aP 5 \_|m|xjq7)|3,/A$2l8DC>LB  gBă q#AH K7DZG,4:wq, 0$>2mt!Qj!GA JHpçb{ QDz]A|h,A|(TpZ)H((d$=Ø4 &H0b63p0 HA~a+`J ]pc\XDkF1K}5Yk5R]=6eקY}6m6ru}7y4wk7 .5~~8+ra/8Kj0O~9kSKM9衋>:饛~:ꩫ:뭻:>;~;;;wh<+<;#?|O櫿>>??><ݿ??(|I2| w@D 3 o6 C(`ML.|aPҰ6!Ox-q!?l!C%2N )RV a r-r^_ C=6l$EGFuQ{{+`ud_*1ARz(` XD`EѴ $,?26&PA1yx$?YP{㨏w}:5Sp] #OcO.A|h^5q~5Q,Eg}c xFXK!Vl<sV),@LќJ, `DgAZҔuO8zOjl)ؼ~@ke #hYm= 4h`l"!cَlh:&:ĮDLUT"rlP?vD@BTr P4nwP6U&{Lj ףcNjEձ{&W7pXS:xöj.Uu iyiOp&ZDs~ U=d 6d|nށ:} pJsF>\i4c`Cd>֕Km=HX.G3'nw=zG֎xK+9RA G^>uh\ (M護5%Z!zW [5pZ$-j<"X"ե/ vahosAr=~@y.HXq5@fF} XP\ީR0iWᡂy%]VAURC#F|\ 4yQ1P _Ih] =>bY] 7iAO}q`aOЁ+08#!&0DI>WUj@Daeu!=i^ -^ @#4>l`% 4 C]e #Ġ#tƀ) B.\%G 91zM%"ԅG0<FЅ ˆ ^@>O,BL#$$iϫ!#H wU5^9B9X:#=8Za239"39bI>c@ZO l @ - 1 뵡` +_ڷY(1W\ DZ F٦8dA!#gYIv夦mQ"%1Kvyh%WnL,)0hВ0Q;@ % T]f]5(]R pB?}]9q$b>V~eVe^L&fn&gvgf^?~&iiRfj&kPj&lƦlnkΦm&nPm&oonp'qrOp'r&r.q.s>'q6'tN'uڦtV'vfiXtw~'xx'yy'z'x洧{gް'|'}gȧ}~'''(.(6(k(FNhC@(^(.f(v~n'Alጨh~rL?d W"(jC?haX(GɐA؀=P:SW'Li# ø i%t)-@DҾ F + i$U A= xCDAĩmP)4;x;( kPAq0DxC.`n*S؀s؀TzI?|@a@{I 0XRKΔST`< @+D ɜ(ĚuGD A\jCHĴzjD7J\ njS NNOt3'H y9\@ [Ђ\lrGP@ o:\0Vd5p,6*H<4udo|Yv/a,PYK[ą@fpgkSb&pVwowT6p^|?tcB6n/p< -:tHGjxdv x3ϼ/%&4 ??85}LH\;wˇdŇHTkO 8WOg]0:)HU4Y=Cyn8]99X,P68:> ꑐSro+ѓSlI%CQ h?׈$6h.W7Q"aB 6t!>EƉpA!E(@Pa d%BhMk$)!&0Ig΄  (D!<䀀Vzef@#G jUBXF`ʛ7wٖ&N m߱!46 EɓX/n/HqBlINX_jիYChf6ـW_6h-%t!B|&mLաM&>/(B}zPvN>×WS B?Y$SAoUHg;8lLlq n+Jpk| 8?J8CSP88Фb ZC}DhJq@sc(K#4|\ "4p M 3LxޡaPE$r`H'h!D2KH Ӈy7l(1/bBA٢R+FC,bO#G3` DA֊tCTT*Q#*`TE3&bUX!SMMCGV 7P>*!wsԉz &DACAdbG t',}] JQNߺ^?+|lB" !2@f i2(Mb6IYfEHVڅDFh?j*啣me=Vbm!Z6Mu6eDHXa) %q iaF̮zi$8r*a5ǐ/.'3lTjV46PU+xNHsÍFZi[ MkyKԯRsBO{h1 N .$!@^ Jh!zJ:l}JT%m,EאDMQ2dA(KUϏx!Ԡa8IyяBt/1=_q*q$0G<(k^ H$ԉ9AJp ;aw~wK'iyAYi8‰Em )6Ǹ &*|sH6B)2#HMA~2'asXĀQ4\XmDqF KD#*5i*0`3<r@rA@AwbId40F,SV^}Oܧb!Q~0-QNOXHL&;.`p€ R4+~Ja^lb=C.q0i~?L>J`n/0OAi;Bо.BTF9 x[^Unˣzv|[_V_ߠWV`?// \a __ !—)VYb}ui\cƞeycx9F1\d#6BN0d'?Y?; e+_4fcMa\f3iVf7q\g;yg?Ёu\hCщVhG?ґ)]iK_әsHhNԡI]jSթViVֱi]k[?ruyk_+kbVlJі]mkmo{5>~]ns5?d# l}o~8=p 5^*+G6V#qC8 npuNA5CYI^w jJrGҁ ]Bj|D@Aps, IWg.HVP 'F 4`p'K؛t%n $6{L LיƓ!>M6@{nL WxmNub Qpu6F"ERhD&W5{DD?Ѓ !0+)?1Ah;i1p},"F(| A־̡)PA*O D05SGV+./^*:lgcX4&Yn5HN5 A(!TO >.BD05b@|WG ֆR$pH+(Rp0  @n5HԠV1BU PUJEVM" b52A5D>. a oMT#2"p @ bmش QQUc)B `A`m8Ah@080AB8  FUZ`$V$11-/Q^c;Q0M+\.F!O-"cp&5~cZ92@dmmn.]n/>U@2Ra"' GJGa~u25\!_P"60A `5al\$) *2+î'252B.gt0lR /@&ͭ$k@n( &WAzf Tv/6B`PF2/y2SS QVBs]6 . b"R#+g0̡7S'p3rđRl+20Rn? m0k 0_Rs5 ؞)2!_< +3or$*ɏtԞ [Z 툄SA-2@A4!V?<B34-4 = ;'s- 1@xrA!;c+L'V.D-=ipF6=U*f#Jl#mCyrr@rP)a/A+F#Ԕ$ gFR"^pG!HN4O@FScN[:JFK-B]XɄP(OoHg-&'i4H'$--\~Ra"OTaqChp)Y qYU'5 R=vR15T\֡N$<ЪZ![\ 5!!U! GubfsAπWO\`/ipUAQ7j,185" Q]2 _aG hlC[IM+'e'Qa tw# bQ+_fAfqfPMRbAq.h)nIG"0`L])zqE$!&J ޑ Jsmr 2`(r@*pE7۠rña| "*Tu)'iTUhAr5Q}-sm$ sd}< '4 W*+LQ4lw M(@=W)HWGkWvAA 0l`p+ֳx95M R@00=Kai-G^5$Pa,n8d폆}dV;E"q;D @5GP!c X!pXXQݭ!5e%¤橎Î'Zdm\ A8/9BklXNpF5WY4Ѓ5G+Nz3&eYΕ-S}Ŋ:Z]Za~Yn`eV"$ _ըoٜ}y5H@Y9(9vګ@zYW:餙͡#+:&ڢ3Z{ 7ڣ?::GKMKS:NZ[ڥ_Zgbo8:{ڧ%ͦZ[:ڨIMکZڪL5,Z̟չZڭ;㚮ڮcZi"Z ۰ݚ[̱#+&۲3[W U,*a7Sd(:[O;T.!յkKGxwnL+"> dP n&ζ`7'P b̹I,2HdGiI zA ΄lXpǾ{Ĉ2/&9[LG 2 ID bkdU,EL@A&>9{X m@K!@ht+(6 ~ T>; /A!TA2! xB/d n~L%t7|[#56JDnΫ#]VY0ڣ8k??މ@^gAA"!bhCC>u v!uZ0aڄ<~l,B!NHI>kͦF1eh% l ]0 I N am*P63Q&%5"&VDTS"$l䈬2+յ?߈ S6S7eSZ@2C^߼[{"}?, @>}8x… N1ƍ;z VzHZ MH{̙4Z٘AvFF͡C߉t@mчI{<$D/&x iUG&8h1UB'n'l>T8Bl|X͟ ,Ab!L,ab-*r$;{A‰صqzP 1Ӳ'BuVzV{>_a Q^~Xa .dfb!9Z6%L"$Қ"!#aFMX^> >U%N]! s5yBM?=MّuP`glUQ DР ԁXsΏ<֚m.fY"vWP` .kTq9$¹#>=A i3idrISv >8}T[b)U<8lGWI4J^ey[5B.PUoZzU,քOen裐#餆u]B#f%Q@a'}/ r ">[mH"$ɝaeg1 MV6_hS k,2r4-8 D$@6}Z`k0UγZej dak]r\ ?/x?yONi(q9?JDCy墏Nz馟zꨧxiyi:?׮z7D+{þ{9| @>ěy_!/zs+Gߏ/ pc*p lJp/ jp?p$,8h _p4 op< qD,$*qL,"a P0}G,jq\0qCb!8Edl8qteH3q}@ r,d4ѐl# HJt"Ijr'?s,1d*s t3 ZBsԬ&iljs&7)js,9ωtsl; xs=|s? Ѐ tL4Є*t mC шJtE/ьjtG? Ґt$-IORc,mK_ Әt4MoӜtӁ&7aJf`r n'w%.ˑҘ43_)%<^,unzU*~nv7^{NpvO:N~Vvݶsy|u /)?RW fGX2=OA1r9SN ^=6i_~D\я(J[ڮ7}K t>_{_/Kq#@cwݨ&Gyr{c0 g0 Xwx0l{`B{զ~(^5Yֵ&]}i5 }p^pr6}+w}78GY_-@g HY x/KȄFUk5S#`,؄UhWS0 S)0 Ia(cHehgikȆwtcKE` |0^+|p;u50,Pw sRyX> ޥSP Hq@4 T g =+ vS{ g R ȄJ P0uXP8R"Pհ|@> Xc0X(X0X@>ɰ `@5h+5E&ȏ`G|w&@娉ʸwRpXU8 tZ `sw>0R;`O]K5]IP7ɒ6RT GEh_ X@ { 5cP A Ө IR)hy8^}X3 "͘Qh|IkI[i6_W؇@숔E x}0R*`` ` 0p9mdP0|pΘ^,"08h J@|@f ")h,`f:"y) +Ȝ]@ rHH5`5Лh}Y`` `5@X@*Zn6: e@5w(?f XcɌ \ p=p89Ɍi9Y pB  #0l@ `# +v:,9ޅHg]mȌ,Ŝ# &9Pp xsp`]| $ :ʉzʧТV&P J`:0sZKߨ-) yP5\f`y@)-%]0vpp(,xJNʎ򐇉 Zi" 80Y) It 0Ӡ zL?K @ X` I0@ǘ  lpRX |>`:L*/X% ٗ)h숋H]p3kZ<誢 9:v]$`+] i[ `rpJRJ[~-uuSJp-oF,;wKi,%%Zm躺 Pw@{V;