ubuntu-settings-components-0.1+14.04.20140306/0000755000015201777760000000000012306027154021311 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/SettingsComponents.qmlproject0000644000015201777760000000105112306026751027260 0ustar pbusernogroup00000000000000/* File generated by Qt Creator (with Ubuntu Plugin), version 2.7.0 */ import QmlProject 1.1 Project { mainFile: "SettingsComponents.qml" /* Include .qml, .js, and image files from current directory and subdirectories */ QmlFiles { directory: "." } JavaScriptFiles { directory: "." } ImageFiles { directory: "." } Files { filter: "*.desktop" } /* List of plugin directories passed to QML runtime */ importPaths: [ "." ,"/usr/bin","/usr/lib/x86_64-linux-gnu/qt5/qml" ] } ubuntu-settings-components-0.1+14.04.20140306/SettingsComponents.qml0000644000015201777760000001612412306026751025700 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 MainView { // Note! applicationName needs to match the .desktop filename applicationName: "SettingsComponents" width: units.gu(42) height: units.gu(75) ListModel { id: mediaPlayerModel ListElement { song: "Mine"; artist: "Taylor Swift"; album: "Speak Now"; albumArt: "tests/artwork/speak-now.jpg"} ListElement { song: "Stony Ground"; artist: "Richard Thompson"; album: "Electric"; albumArt: "tests/artwork/electric.jpg"} ListElement { song: "Los Robots"; artist: "Kraftwerk"; album: "The Man-Machine"; albumArt: "tests/artwork/the-man-machine.jpg"} } ListModel { id: timeZoneModel ListElement { city: "San Francisco"; time: "3:00am" } ListElement { city: "London"; time: "11:00am" } ListElement { city: "Rome"; time: "12:00am" } } ListModel { id: eventModel ListElement { icon: "image://theme/calendar"; eventColor: "yellow"; text: "Lunch with Lola"; time: "1:10 PM" } ListElement { icon: "image://theme/calendar"; eventColor: "green"; text: "Gym"; time: "6:30 PM" } ListElement { icon: "image://theme/calendar"; eventColor: "red"; text: "Birthday Party"; time: "9:00 PM" } } Page { title: "SettingsComponents" Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Column { id: column width: flickable.width height: childrenRect.height SliderMenu { id: slider text: i18n.tr("Slider") minimumValue: 0 maximumValue: 100 value: 20 minIcon: "image://theme/audio-volume-low" maxIcon: "image://theme/audio-volume-high" } ProgressBarMenu { text: i18n.tr("ProgressBar") value: slider.value minimumValue: 0 maximumValue: 100 } ProgressValueMenu { text: i18n.tr("ProgressValue") value: slider.value } ButtonMenu { text: i18n.tr("Button") buttonText: i18n.tr("Hello world!") } CheckableMenu { text: i18n.tr("Checkable") checked: true } SwitchMenu { text: i18n.tr("Switch") checked: true } SectionMenu { text: i18n.tr("Section Starts Here") busy: true } SeparatorMenu {} CalendarMenu { id: calendar } UserSessionMenu { name: i18n.tr("Lola Chang") iconSource: Qt.resolvedUrl("tests/artwork/avatar.png") active: true } MediaPlayerMenu { id: mediaPlayer property int index: 0 playerName: "Rhythmbox" playerIcon: Qt.resolvedUrl("tests/artwork/rhythmbox.png") song: mediaPlayerModel.get(index).song; artist: mediaPlayerModel.get(index).artist; album: mediaPlayerModel.get(index).album; albumArt: mediaPlayerModel.get(index).albumArt; } PlaybackItemMenu { canPlay: true canGoNext: true canGoPrevious: true playing: mediaPlayer.running onPrevious: mediaPlayer.index = Math.max(mediaPlayer.index - 1, 0) onNext: mediaPlayer.index = Math.min(mediaPlayer.index + 1, mediaPlayerModel.count - 1) onPlay: { mediaPlayer.running = !mediaPlayer.running; } } AccessPointMenu { checked: true secure: true adHoc: false signalStrength: 50 text: "Access Point" } GroupedMessageMenu { text: "Group Message" count: "4" } SnapDecisionMenu { title: "Snap Decision" time: "10:30am" message: "My mother says I'm handsome!" replyMessages: ["Yeah right", "Sure she did"] onTriggered: { selected = !selected; } } SimpleTextMessageMenu { title: "Simple Text Message" time: "11am" message: "I am a little teacup" onTriggered: { selected = !selected; } } TextMessageMenu { title: "Text Message" time: "11am" message: "I happen to be tall and thin!" onTriggered: { selected = !selected; } } Column { anchors { left: parent.left right: parent.right } Repeater { model: timeZoneModel TimeZoneMenu { city: model.city time: model.time } } } Column { anchors { left: parent.left right: parent.right } Repeater { model: eventModel EventMenu { iconSource: model.icon text: model.text eventColor: model.eventColor time: model.time } } } } } } } ubuntu-settings-components-0.1+14.04.20140306/cmake/0000755000015201777760000000000012306027154022371 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/cmake/modules/0000755000015201777760000000000012306027154024041 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/cmake/modules/QmlTest.cmake0000644000015201777760000001167212306026751026445 0ustar pbusernogroup00000000000000# add_qml_test(path component_name [NO_ADD_TEST] [NO_TARGETS] # [TARGETS target1 [target2 [...]]] # [IMPORT_PATHS import_path1 [import_path2 [...]] # [PROPERTIES prop1 value1 [prop2 value2 [...]]]) # # NO_ADD_TEST will prevent adding the test to the "test" target # NO_TARGETS will prevent adding the test to any targets # TARGETS lists the targets the test should be added to # IMPORT_PATHS will pass those paths to qmltestrunner as "-import" arguments # PROPERTIES will be set on the target and test target. See CMake's set_target_properties() # # Two targets will be created: # - testComponentName - Runs the test with qmltestrunner # - tryComponentName - Runs the test with uqmlscene, for manual interaction # # To change/set a default value for the whole test suite, prior to calling add_qml_test, set: # qmltest_DEFAULT_NO_ADD_TEST (default: FALSE) # qmltest_DEFAULT_TARGETS # qmltest_DEFAULT_IMPORT_PATHS # qmltest_DEFAULT_PROPERTIES find_program(qmltestrunner_exe qmltestrunner) find_program(qmlscene_exe qmlscene) if(NOT qmltestrunner_exe) msg(FATAL_ERROR "Could not locate qmltestrunner.") endif() macro(add_manual_qml_test SUBPATH COMPONENT_NAME) set(options NO_ADD_TEST NO_TARGETS) set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT) cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN}) set(qmlscene_TARGET try${COMPONENT_NAME}) set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME}) set(qmlscene_imports "") if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "") foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS}) list(APPEND qmlscene_imports "-I") list(APPEND qmlscene_imports ${IMPORT_PATH}) endforeach(IMPORT_PATH) elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "") foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS}) list(APPEND qmlscene_imports "-I") list(APPEND qmlscene_imports ${IMPORT_PATH}) endforeach(IMPORT_PATH) endif() set(qmlscene_command env ${qmltest_ENVIRONMENT} ${qmlscene_exe} ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml ${qmlscene_imports} ) add_custom_target(${qmlscene_TARGET} ${qmlscene_command}) endmacro(add_manual_qml_test) macro(add_qml_test SUBPATH COMPONENT_NAME) set(options NO_ADD_TEST NO_TARGETS) set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT) cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN}) set(qmltest_TARGET test${COMPONENT_NAME}) set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME}) set(qmltestrunner_imports "") if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "") foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS}) list(APPEND qmltestrunner_imports "-import") list(APPEND qmltestrunner_imports ${IMPORT_PATH}) endforeach(IMPORT_PATH) elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "") foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS}) list(APPEND qmltestrunner_imports "-import") list(APPEND qmltestrunner_imports ${IMPORT_PATH}) endforeach(IMPORT_PATH) endif() set(qmltest_command env ${qmltest_ENVIRONMENT} ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml ${qmltestrunner_imports} -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml -o -,txt ) add_custom_target(${qmltest_TARGET} ${qmltest_command}) if(NOT "${qmltest_PROPERTIES}" STREQUAL "") set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES}) elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "") set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES}) endif() if("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE") add_test(${qmltest_TARGET} ${qmltest_command}) if(NOT "${qmltest_UNPARSED_ARGUMENTS}" STREQUAL "") set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES}) elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "") set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES}) endif() endif("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE") if("${qmltest_NO_TARGETS}" STREQUAL "FALSE") if(NOT "${qmltest_TARGETS}" STREQUAL "") foreach(TARGET ${qmltest_TARGETS}) add_dependencies(${TARGET} ${qmltest_TARGET}) endforeach(TARGET) elseif(NOT "${qmltest_DEFAULT_TARGETS}" STREQUAL "") foreach(TARGET ${qmltest_DEFAULT_TARGETS}) add_dependencies(${TARGET} ${qmltest_TARGET}) endforeach(TARGET) endif() endif("${qmltest_NO_TARGETS}" STREQUAL "FALSE") add_manual_qml_test(${SUBPATH} ${COMPONENT_NAME} ${ARGN}) endmacro(add_qml_test) ubuntu-settings-components-0.1+14.04.20140306/cmake/modules/Findgcovr.cmake0000644000015201777760000000170212306026751026766 0ustar pbusernogroup00000000000000# - Find gcovr scrip # Will define: # # GCOVR_EXECUTABLE - the gcovr script # # Uses: # # GCOVR_ROOT - root to search for the script # # Copyright (C) 2011 by Johannes Wienke # # This program is free software; you can redistribute it # and/or modify it under the terms of the GNU General # Public License as published by the Free Software Foundation; # either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # INCLUDE(FindPackageHandleStandardArgs) FIND_PROGRAM(GCOVR_EXECUTABLE gcovr HINTS ${GCOVR_ROOT} "${GCOVR_ROOT}/bin") FIND_PACKAGE_HANDLE_STANDARD_ARGS(gcovr DEFAULT_MSG GCOVR_EXECUTABLE) # only visible in advanced view MARK_AS_ADVANCED(GCOVR_EXECUTABLE) ubuntu-settings-components-0.1+14.04.20140306/cmake/modules/ParseArguments.cmake0000644000015201777760000000340612306026751030010 0ustar pbusernogroup00000000000000# Parse arguments passed to a function into several lists separated by # upper-case identifiers and options that do not have an associated list e.g.: # # SET(arguments # hello OPTION3 world # LIST3 foo bar # OPTION2 # LIST1 fuz baz # ) # PARSE_ARGUMENTS(ARG "LIST1;LIST2;LIST3" "OPTION1;OPTION2;OPTION3" ${arguments}) # # results in 7 distinct variables: # * ARG_DEFAULT_ARGS: hello;world # * ARG_LIST1: fuz;baz # * ARG_LIST2: # * ARG_LIST3: foo;bar # * ARG_OPTION1: FALSE # * ARG_OPTION2: TRUE # * ARG_OPTION3: TRUE # # taken from http://www.cmake.org/Wiki/CMakeMacroParseArguments MACRO(PARSE_ARGUMENTS prefix arg_names option_names) SET(DEFAULT_ARGS) FOREACH(arg_name ${arg_names}) SET(${prefix}_${arg_name}) ENDFOREACH(arg_name) FOREACH(option ${option_names}) SET(${prefix}_${option} FALSE) ENDFOREACH(option) SET(current_arg_name DEFAULT_ARGS) SET(current_arg_list) FOREACH(arg ${ARGN}) SET(larg_names ${arg_names}) LIST(FIND larg_names "${arg}" is_arg_name) IF (is_arg_name GREATER -1) SET(${prefix}_${current_arg_name} ${current_arg_list}) SET(current_arg_name ${arg}) SET(current_arg_list) ELSE (is_arg_name GREATER -1) SET(loption_names ${option_names}) LIST(FIND loption_names "${arg}" is_option) IF (is_option GREATER -1) SET(${prefix}_${arg} TRUE) ELSE (is_option GREATER -1) SET(current_arg_list ${current_arg_list} ${arg}) ENDIF (is_option GREATER -1) ENDIF (is_arg_name GREATER -1) ENDFOREACH(arg) SET(${prefix}_${current_arg_name} ${current_arg_list}) ENDMACRO(PARSE_ARGUMENTS) ubuntu-settings-components-0.1+14.04.20140306/cmake/modules/FindLcov.cmake0000644000015201777760000000172012306026751026551 0ustar pbusernogroup00000000000000# - Find lcov # Will define: # # LCOV_EXECUTABLE - the lcov binary # GENHTML_EXECUTABLE - the genhtml executable # # Copyright (C) 2010 by Johannes Wienke # # This program is free software; you can redistribute it # and/or modify it under the terms of the GNU General # Public License as published by the Free Software Foundation; # either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # INCLUDE(FindPackageHandleStandardArgs) FIND_PROGRAM(LCOV_EXECUTABLE lcov) FIND_PROGRAM(GENHTML_EXECUTABLE genhtml) FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lcov DEFAULT_MSG LCOV_EXECUTABLE GENHTML_EXECUTABLE) # only visible in advanced view MARK_AS_ADVANCED(LCOV_EXECUTABLE GENHTML_EXECUTABLE) ubuntu-settings-components-0.1+14.04.20140306/cmake/modules/EnableCoverageReport.cmake0000644000015201777760000001641412306026751031111 0ustar pbusernogroup00000000000000# - Creates a special coverage build type and target on GCC. # # Defines a function ENABLE_COVERAGE_REPORT which generates the coverage target # for selected targets. Optional arguments to this function are used to filter # unwanted results using globbing expressions. Moreover targets with tests for # the source code can be specified to trigger regenerating the report if the # test has changed # # ENABLE_COVERAGE_REPORT(TARGETS target... [FILTER filter...] [TESTS test targets...]) # # To generate a coverage report first build the project with # CMAKE_BUILD_TYPE=coverage, then call make test and afterwards make coverage. # # The coverage report is based on gcov. Depending on the availability of lcov # a HTML report will be generated and/or an XML report of gcovr is found. # The generated coverage target executes all found solutions. Special targets # exist to create e.g. only the xml report: coverage-xml. # # Copyright (C) 2010 by Johannes Wienke # # This program is free software; you can redistribute it # and/or modify it under the terms of the GNU General # Public License as published by the Free Software Foundation; # either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # INCLUDE(ParseArguments) FIND_PACKAGE(Lcov) FIND_PACKAGE(gcovr) FUNCTION(ENABLE_COVERAGE_REPORT) # argument parsing PARSE_ARGUMENTS(ARG "FILTER;TARGETS;TESTS" "" ${ARGN}) SET(COVERAGE_RAW_FILE "${CMAKE_BINARY_DIR}/coverage.raw.info") SET(COVERAGE_FILTERED_FILE "${CMAKE_BINARY_DIR}/coverage.info") SET(COVERAGE_REPORT_DIR "${CMAKE_BINARY_DIR}/coveragereport") SET(COVERAGE_XML_FILE "${CMAKE_BINARY_DIR}/coverage.xml") SET(COVERAGE_XML_COMMAND_FILE "${CMAKE_BINARY_DIR}/coverage-xml.cmake") # decide if there is any tool to create coverage data SET(TOOL_FOUND FALSE) IF(LCOV_FOUND OR GCOVR_FOUND) SET(TOOL_FOUND TRUE) ENDIF() IF(NOT TOOL_FOUND) MESSAGE(STATUS "Cannot enable coverage targets because neither lcov nor gcovr are found.") ENDIF() STRING(TOLOWER "${CMAKE_BUILD_TYPE}" COVERAGE_BUILD_TYPE) IF(CMAKE_COMPILER_IS_GNUCXX AND TOOL_FOUND AND "${COVERAGE_BUILD_TYPE}" MATCHES "coverage") MESSAGE(STATUS "Coverage support enabled for targets: ${ARG_TARGETS}") # create coverage build type SET(CMAKE_CXX_FLAGS_COVERAGE ${CMAKE_CXX_FLAGS_DEBUG} PARENT_SCOPE) SET(CMAKE_C_FLAGS_COVERAGE ${CMAKE_C_FLAGS_DEBUG} PARENT_SCOPE) SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_CONFIGURATION_TYPES} coverage PARENT_SCOPE) # instrument targets SET_TARGET_PROPERTIES(${ARG_TARGETS} PROPERTIES COMPILE_FLAGS --coverage LINK_FLAGS --coverage) # html report IF (LCOV_FOUND) MESSAGE(STATUS "Enabling HTML coverage report") # set up coverage target ADD_CUSTOM_COMMAND(OUTPUT ${COVERAGE_RAW_FILE} COMMAND ${LCOV_EXECUTABLE} -c -d ${CMAKE_BINARY_DIR} -o ${COVERAGE_RAW_FILE} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Collecting coverage data" DEPENDS ${ARG_TARGETS} ${ARG_TESTS} VERBATIM) # filter unwanted stuff LIST(LENGTH ARG_FILTER FILTER_LENGTH) IF(${FILTER_LENGTH} GREATER 0) SET(FILTER COMMAND ${LCOV_EXECUTABLE}) FOREACH(F ${ARG_FILTER}) SET(FILTER ${FILTER} -r ${COVERAGE_FILTERED_FILE} ${F}) ENDFOREACH() SET(FILTER ${FILTER} -o ${COVERAGE_FILTERED_FILE}) ELSE() SET(FILTER "") ENDIF() ADD_CUSTOM_COMMAND(OUTPUT ${COVERAGE_FILTERED_FILE} COMMAND ${LCOV_EXECUTABLE} -e ${COVERAGE_RAW_FILE} "${CMAKE_SOURCE_DIR}*" -o ${COVERAGE_FILTERED_FILE} ${FILTER} DEPENDS ${COVERAGE_RAW_FILE} COMMENT "Filtering recorded coverage data for project-relevant entries" VERBATIM) ADD_CUSTOM_COMMAND(OUTPUT ${COVERAGE_REPORT_DIR} COMMAND ${CMAKE_COMMAND} -E make_directory ${COVERAGE_REPORT_DIR} COMMAND ${GENHTML_EXECUTABLE} --legend --show-details -t "${PROJECT_NAME} test coverage" -o ${COVERAGE_REPORT_DIR} ${COVERAGE_FILTERED_FILE} DEPENDS ${COVERAGE_FILTERED_FILE} COMMENT "Generating HTML coverage report in ${COVERAGE_REPORT_DIR}" VERBATIM) ADD_CUSTOM_TARGET(coverage-html DEPENDS ${COVERAGE_REPORT_DIR}) ENDIF() # xml coverage report IF(GCOVR_FOUND) MESSAGE(STATUS "Enabling XML coverage report") # filter unwanted stuff SET(GCOV_FILTER "") LIST(LENGTH ARG_FILTER FILTER_LENGTH) IF(${FILTER_LENGTH} GREATER 0) FOREACH(F ${ARG_FILTER}) SET(GCOV_FILTER "${GCOV_FILTER} -e \"${F}\"") ENDFOREACH() ENDIF() # gcovr cannot write directly to a file so the execution needs to # be wrapped in a cmake file that generates the file output FILE(WRITE ${COVERAGE_XML_COMMAND_FILE} "SET(ENV{LANG} en)\n") FILE(APPEND ${COVERAGE_XML_COMMAND_FILE} "EXECUTE_PROCESS(COMMAND \"${GCOVR_EXECUTABLE}\" -x -r \"${CMAKE_SOURCE_DIR}\" ${GCOV_FILTER} OUTPUT_FILE \"${COVERAGE_XML_FILE}\" WORKING_DIRECTORY \"${CMAKE_BINARY_DIR}\")\n") ADD_CUSTOM_COMMAND(OUTPUT ${COVERAGE_XML_FILE} COMMAND ${CMAKE_COMMAND} ARGS -P ${COVERAGE_XML_COMMAND_FILE} COMMENT "Generating coverage XML report" VERBATIM) ADD_CUSTOM_TARGET(coverage-xml DEPENDS ${COVERAGE_XML_FILE}) ENDIF() # provide a global coverage target executing both steps if available SET(GLOBAL_DEPENDS "") IF(LCOV_FOUND) LIST(APPEND GLOBAL_DEPENDS ${COVERAGE_REPORT_DIR}) ENDIF() IF(GCOVR_FOUND) LIST(APPEND GLOBAL_DEPENDS ${COVERAGE_XML_FILE}) ENDIF() IF(LCOV_FOUND OR GCOVR_FOUND) ADD_CUSTOM_TARGET(coverage DEPENDS ${GLOBAL_DEPENDS}) ENDIF() ENDIF() # This gets rid of any stale .gcda files. Run this if a running a binary causes lots of messages about # about a "merge mismatch for summaries". ADD_CUSTOM_TARGET(clean-coverage COMMAND find ${CMAKE_BINARY_DIR} -name '*.gcda' | xargs rm -f) ENDFUNCTION() ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/0000755000015201777760000000000012306027154022573 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/0000755000015201777760000000000012306027154024373 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/0000755000015201777760000000000012306027154025462 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/ProgressBarMenu.qml0000644000015201777760000000216312306026751031257 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Standard { property alias indeterminate: progressBar.indeterminate property alias minimumValue: progressBar.minimumValue property alias maximumValue: progressBar.maximumValue property alias value: progressBar.value control: ProgressBar { id: progressBar width: units.gu(20) } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/TextMessageMenu.qml0000644000015201777760000000234012306026751031254 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Renato Araujo Oliveira Filho * Olivier Tilloy */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Components 0.1 as USC SimpleTextMessageMenu { id: menu property bool replyEnabled: true property string replyButtonText: "Send" signal replied(string value) footer: USC.ActionTextField { anchors.fill: parent activateEnabled: menu.replyEnabled buttonText: menu.replyButtonText onActivated: { menu.replied(value); } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/GroupedMessageMenu.qml0000644000015201777760000000347712306026751031751 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Renato Araujo Oliveira Filho * Olivier Tilloy */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Standard { id: menu property alias count: label.text signal dismissed() iconSource: Qt.resolvedUrl("artwork/default_app.svg") control: UbuntuShape { height: label.height + units.gu(2) width: label.width + units.gu(2) color: Theme.palette.normal.backgroundText radius: "medium" Label { id: label objectName: "messageCount" anchors { horizontalCenter: parent.horizontalCenter verticalCenter: parent.verticalCenter } horizontalAlignment: Text.AlignRight font.weight: Font.DemiBold fontSize: "medium" text: "0" color: Theme.palette.normal.foregroundText } Connections { target: menu.__mouseArea onClicked: { menu.clicked(); } } } onItemRemoved: { menu.dismissed(); } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/HeroMessageMenu.qml0000644000015201777760000000473112306026751031233 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Renato Araujo Oliveira Filho * Olivier Tilloy */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem import Ubuntu.Settings.Components 0.1 as USC ListItem.Empty { id: menu property alias heroMessageHeader: __heroMessageHeader property real collapsedHeight: heroMessageHeader.y + heroMessageHeader.bodyBottom + units.gu(2) property real expandedHeight: collapsedHeight property url avatar property url appIcon signal appActivated signal dismissed implicitHeight: collapsedHeight Rectangle { id: background property real alpha: 0.0 anchors.fill: parent color: Qt.rgba(1.0, 1.0, 1.0, alpha) z: -1 } USC.HeroMessageHeader { id: __heroMessageHeader anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right avatar: menu.avatar != "" ? menu.avatar : "artwork/default_contact.png" appIcon: menu.appIcon != "" ? menu.appIcon : "artwork/default_app.svg" icon: appIcon state: menu.state onAppIconClicked: { menu.appActivated(); } } states: State { name: "expanded" when: selected PropertyChanges { target: menu implicitHeight: menu.expandedHeight } PropertyChanges { target: background alpha: 0.05 } } transitions: Transition { ParallelAnimation { NumberAnimation { properties: "opacity,implicitHeight" duration: 200 easing.type: Easing.OutQuad } ColorAnimation {} } } onItemRemoved: { menu.dismissed(); } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/SliderMenu.qml0000644000015201777760000001314012306026751030245 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Empty { id: menu property alias minimumValue: slider.minimumValue property alias maximumValue: slider.maximumValue property alias live: slider.live property double value: 0.0 property alias minIcon: leftImage.source property alias maxIcon: rightImage.source signal updated(real value) property QtObject d: QtObject { property bool enableValueConnection: true property double originalValue: 0.0 property Connections connections: Connections { target: menu onValueChanged: { if (!d.enableValueConnection) return; d.originalValue = menu.value; d.checkValueMinMax(); } // need to re-assert the reported value to the requested value. onMinimumValueChanged: { if (menu.value !== d.originalValue) { menu.value = d.originalValue; } else { d.checkValueMinMax(); } } onMaximumValueChanged: { if (menu.value !== d.originalValue) { menu.value = d.originalValue; } else { d.checkValueMinMax(); } } } function lockValue() { if (!d.enableValueConnection) return false; d.enableValueConnection = false; return true; } function unlockValue(oldValue) { d.enableValueConnection = oldValue; } function checkValueMinMax() { var oldEnable = lockValue(); if (!oldEnable) return; // Can't rely on binding. Slider value is assigned by user slide. if (menu.value < minimumValue) { slider.value = minimumValue; menu.value = minimumValue; } else if (menu.value > maximumValue) { slider.value = maximumValue; menu.value = maximumValue; } else if (slider.value != menu.value) { slider.value = menu.value; } unlockValue(oldEnable); } } implicitHeight: column.height + units.gu(1.5) Column { id: column anchors { verticalCenter: parent.verticalCenter left: parent.left right: parent.right leftMargin: menu.__contentsMargins rightMargin: menu.__contentsMargins } height: childrenRect.height spacing: units.gu(0.5) Label { id: label text: menu.text anchors { left: parent.left right: parent.right } visible: text != "" } Item { id: row anchors { left: parent.left right: parent.right } height: slider.height Image { id: leftImage visible: status === Image.Ready anchors.left: row.left anchors.verticalCenter: row.verticalCenter height: slider.height - units.gu(2) width: height } Slider { id: slider objectName: "slider" anchors { left: leftImage.visible ? leftImage.right : row.left right: rightImage.visible ? rightImage.left : row.right leftMargin: leftImage.visible ? units.gu(0.5) : 0 rightMargin: rightImage.visible ? units.gu(0.5) : 0 } live: true Component.onCompleted: { value = menu.value } minimumValue: 0 maximumValue: 100 // FIXME - to be deprecated in Ubuntu.Components. // Use this to disable the label, since there is not way to do it on the component. function formatValue(v) { return ""; } Connections { target: slider onValueChanged: { var oldEnable = d.lockValue(); if (!oldEnable) return; menu.value = slider.value; d.originalValue = menu.value; menu.updated(slider.value); d.unlockValue(oldEnable); } } } Image { id: rightImage visible: status === Image.Ready anchors.right: row.right anchors.verticalCenter: row.verticalCenter height: slider.height - units.gu(2) width: height } } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/PlaybackItemMenu.qml0000644000015201777760000000541612306026751031377 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Nick Dedekind */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Empty { id: menu property bool playing: false property bool canPlay: false property bool canGoNext: false property bool canGoPrevious: false signal next() signal play(bool play) signal previous() implicitHeight: controlsRow.height + units.gu(2) Row { id: controlsRow anchors { top: parent.top topMargin: units.gu(1) horizontalCenter: parent.horizontalCenter } spacing: units.gu(2) Button { objectName: "previousButton" width: units.gu(5) height: width onClicked: menu.previous() text: "" enabled: canGoPrevious anchors.verticalCenter: parent.verticalCenter Icon { anchors.fill: parent anchors.margins: units.gu(1) name: "media-skip-backward" color: Theme.palette.normal.foregroundText } } Button { objectName: "playButton" width: units.gu(6) height: width onClicked: menu.play(!playing) text: "" enabled: canPlay anchors.verticalCenter: parent.verticalCenter Icon { anchors.fill: parent anchors.margins: units.gu(1) name: playing ? "media-playback-pause" : "media-playback-start" color: Theme.palette.normal.foregroundText } } Button { objectName: "nextButton" width: units.gu(5) height: width onClicked: menu.next() text: "" enabled: canGoNext anchors.verticalCenter: parent.verticalCenter Icon { anchors.fill: parent anchors.margins: units.gu(1) name: "media-skip-forward" color: Theme.palette.normal.foregroundText } } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/TimeZoneMenu.qml0000644000015201777760000000177412306026751030567 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Standard { id: timeZoneMenu property alias city: timeZoneMenu.text property alias time: timeLabel.text control: Label { id: timeLabel objectName: "timeLabel" } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/EventMenu.qml0000644000015201777760000000410412306026751030104 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import Ubuntu.Components 0.1 as Components import Ubuntu.Settings.Components 0.1 as USC import Ubuntu.Components.ListItems 0.1 as ListItems ListItems.Empty { id: menu property alias iconSource: iconVisual.source property alias text: label.text property alias time: dateLabel.text property alias eventColor: iconVisual.color USC.IconVisual { id: iconVisual source: "image://theme/calendar" visible: status == Image.Ready height: Math.min(units.gu(5), parent.height - units.gu(1)) width: height anchors { left: parent.left leftMargin: menu.__contentsMargins verticalCenter: parent.verticalCenter } } Components.Label { id: label anchors { verticalCenter: parent.verticalCenter left: iconVisual.visible ? iconVisual.right : parent.left leftMargin: menu.__contentsMargins right: dateLabel.left rightMargin: menu.__contentsMargins } elide: Text.ElideRight opacity: label.enabled ? 1.0 : 0.5 } Components.Label { id: dateLabel color: Theme.palette.normal.backgroundText anchors { verticalCenter: parent.verticalCenter right: parent.right rightMargin: menu.__contentsMargins } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/SimpleTextMessageMenu.qml0000644000015201777760000000520312306026751032427 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Renato Araujo Oliveira Filho * Olivier Tilloy */ import QtQuick 2.0 import Ubuntu.Components 0.1 HeroMessageMenu { id: menu property string title: "" property string time: "" property string message: "" property alias footer: footerLoader.sourceComponent expandedHeight: collapsedHeight + fullMessage.height heroMessageHeader.titleText.text: title heroMessageHeader.subtitleText.text: time heroMessageHeader.bodyText.text: message Item { id: fullMessage anchors { left: parent.left leftMargin: units.gu(2) right: parent.right rightMargin: units.gu(2) top: heroMessageHeader.bottom } height: childrenRect.height opacity: 0.0 enabled: false Label { id: bodyText anchors { top: parent.top left: parent.left right: parent.right } wrapMode: Text.WordWrap elide: Text.ElideRight fontSize: "medium" text: heroMessageHeader.bodyText.text } Loader { id: footerLoader anchors { top: bodyText.bottom topMargin: item ? units.gu(2) : 0 left: parent.left right: parent.right } height: item ? units.gu(4) : 0 } states: State { name: "expanded" when: menu.state === "expanded" PropertyChanges { target: heroMessageHeader.bodyText opacity: 0.0 } PropertyChanges { target: fullMessage opacity: 1.0 enabled: true } } transitions: Transition { NumberAnimation { property: "opacity" duration: 200 } } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/ButtonMenu.qml0000644000015201777760000000207612306026751030304 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Standard { property alias buttonText: button.text iconFrame: false Component.onCompleted: button.clicked.connect(clicked) control: Button { id: button objectName: "button" width: Math.max(units.gu(5), implicitWidth) } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/ProgressValueMenu.qml0000644000015201777760000000200312306026751031620 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Nick Dedekind */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Standard { id: menuItem property int value : 0.0 control: Label { id: progress objectName: "progress" text: menuItem.value + " %" fontSize: "medium" } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/SeparatorMenu.qml0000644000015201777760000000032612306026751030765 0ustar pbusernogroup00000000000000import QtQuick 2.0 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Empty { implicitHeight: units.gu(1) Rectangle { color: Qt.rgba(0.0, 0, 0, 0.15) anchors.fill: parent } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/UserSessionMenu.qml0000644000015201777760000000256312306026751031314 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Standard { id: userSessionMenu property alias name: userSessionMenu.text property alias active: activeIcon.visible control: Rectangle { id: activeIcon objectName: "activeIcon" width: checkMark.width + units.gu(1.5) height: checkMark.height + units.gu(1.5) radius: width / 2 antialiasing: true color: Theme.palette.normal.backgroundText visible: false Image { id: checkMark source: "artwork/CheckMark.png" anchors.centerIn: parent } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/SnapDecisionMenu.qml0000644000015201777760000001031612306026751031404 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Renato Araujo Oliveira Filho * Olivier Tilloy */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Components 0.1 as USC HeroMessageMenu { id: menu property string title: "" property string time: "" property string message: "" property bool activateEnabled: true property alias actionButtonText: actionButton.text property bool replyEnabled: true property alias replyMessages: quickreply.messages property alias replyButtonText: quickreply.buttonText expandedHeight: collapsedHeight + buttons.height + quickreply.height heroMessageHeader.titleText.text: title heroMessageHeader.subtitleText.text: message heroMessageHeader.bodyText.text: time signal activated signal replied(string value) Item { id: buttons anchors.left: parent.left anchors.leftMargin: units.gu(2) anchors.right: parent.right anchors.rightMargin: units.gu(2) anchors.top: heroMessageHeader.bottom anchors.topMargin: units.gu(1) height: units.gu(4) opacity: 0.0 Button { objectName: "messageButton" text: "Message" anchors.left: parent.left anchors.top: parent.top anchors.bottom: parent.bottom width: (parent.width - units.gu(1)) / 2 gradient: UbuntuColors.greyGradient onClicked: { if (quickreply.state === "") { quickreply.state = "expanded"; } else { quickreply.state = ""; } } } Button { id: actionButton objectName: "actionButton" text: "Call back" anchors.right: parent.right anchors.top: parent.top anchors.bottom: parent.bottom width: (parent.width - units.gu(1)) / 2 enabled: menu.activateEnabled onClicked: { menu.activated(); } } states: State { name: "expanded" when: menu.state === "expanded" PropertyChanges { target: buttons opacity: 1.0 } } transitions: Transition { NumberAnimation { property: "opacity" duration: 200 easing.type: Easing.OutQuad } } } USC.QuickReply { id: quickreply onReplied: { menu.replied(value); } messages: "" buttonText: "Send" anchors { top: buttons.bottom topMargin: units.gu(2) left: parent.left right: parent.right } height: 0 opacity: 0.0 enabled: false replyEnabled: menu.replyEnabled messageMargins: __contentsMargins states: State { name: "expanded" PropertyChanges { target: quickreply height: expandedHeight + units.gu(2) opacity: 1.0 } PropertyChanges { target: quickreply enabled: true } } transitions: Transition { NumberAnimation { properties: "opacity,height" duration: 200 easing.type: Easing.OutQuad } } } onStateChanged: { if (state === "") { quickreply.state = ""; } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/AccessPointMenu.qml0000644000015201777760000001021112306026751031232 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Renato Araujo Oliveira Filho */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Empty { id: menu implicitHeight: units.gu(5.5) property bool checked: false property bool secure: false property bool adHoc: false property int signalStrength: 0 property alias text: label.text __acceptEvents: false CheckBox { id: checkbox objectName: "checkBox" property bool enableCheckConnection: true height: units.gu(3) width: units.gu(3) anchors { left: parent.left leftMargin: menu.__contentsMargins verticalCenter: parent.verticalCenter } // FIXME : should use Checkbox.toggled signal // lp:~nick-dedekind/ubuntu-ui-toolkit/checkbox.toggled onCheckedChanged: { if (!enableCheckConnection) { return; } var oldEnable = enableCheckConnection; enableCheckConnection = false; menu.checked = checked; menu.triggered(menu.checked); enableCheckConnection = oldEnable; } Connections { target: menu onCheckedChanged: { if (!checkbox.enableCheckConnection) { return; } var oldEnable = checkbox.enableCheckConnection; checkbox.enableCheckConnection = false; checkbox.checked = menu.checked; checkbox.enableCheckConnection = oldEnable; } } Connections { target: menu.__mouseArea onClicked: { checkbox.clicked(); } } } Icon { id: iconSignal objectName: "iconSignal" color: Theme.palette.selected.backgroundText keyColor: "#cccccc" width: height height: Math.min(units.gu(5), parent.height - units.gu(1)) anchors { left: checkbox.right leftMargin: units.gu(1) verticalCenter: parent.verticalCenter } name: { var imageName = "nm-signal-100" if (adHoc) { imageName = "nm-adhoc"; } else if (signalStrength <= 0) { imageName = "nm-signal-00"; } else if (signalStrength <= 25) { imageName = "nm-signal-25"; } else if (signalStrength <= 50) { imageName = "nm-signal-50"; } else if (signalStrength <= 75) { imageName = "nm-signal-75"; } return imageName; } } Label { id: label anchors { left: iconSignal.right leftMargin: units.gu(1) verticalCenter: parent.verticalCenter right: iconSecure.visible ? iconSecure.left : parent.right rightMargin: menu.__contentsMargins } elide: Text.ElideRight opacity: label.enabled ? 1.0 : 0.5 } Icon { id: iconSecure objectName: "iconSecure" visible: secure name: "network-secure" color: Theme.palette.selected.backgroundText keyColor: "#cccccc" width: height height: Math.min(units.gu(4), parent.height - units.gu(1)) anchors { right: parent.right rightMargin: menu.__contentsMargins verticalCenter: parent.verticalCenter } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/CheckableMenu.qml0000644000015201777760000000524612306026751030674 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Nick Dedekind */ import QtQuick 2.0 import Ubuntu.Components 0.1 as Components import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Empty { id: menu property alias text: label.text property bool checked: false __acceptEvents: false Components.CheckBox { id: checkbox objectName: "checkbox" property bool enableCheckConnection: true anchors { left: parent.left leftMargin: menu.__contentsMargins verticalCenter: parent.verticalCenter } Component.onCompleted: { checked = menu.checked; } // FIXME : should use Checkbox.toggled signal // lp:~nick-dedekind/ubuntu-ui-toolkit/checkbox.toggled onCheckedChanged: { if (!enableCheckConnection) { return; } var oldEnable = enableCheckConnection; enableCheckConnection = false; menu.checked = checked; menu.triggered(menu.checked); enableCheckConnection = oldEnable; } Connections { target: menu onCheckedChanged: { if (!checkbox.enableCheckConnection) { return; } var oldEnable = checkbox.enableCheckConnection; checkbox.enableCheckConnection = false; checkbox.checked = menu.checked; checkbox.enableCheckConnection = oldEnable; } } Connections { target: menu.__mouseArea onClicked: { checkbox.clicked(); } } } Components.Label { id: label anchors { left: checkbox.right leftMargin: menu.__contentsMargins right: parent.right rightMargin: menu.__contentsMargins verticalCenter: parent.verticalCenter } elide: Text.ElideRight opacity: label.enabled ? 1.0 : 0.5 } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/SwitchMenu.qml0000644000015201777760000000373112306026751030271 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Nick Dedekind */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Standard { id: menu property bool checked: false iconFrame: false control: Switch { id: switcher objectName: "switcher" property bool enableCheckConnection: true Component.onCompleted: { checked = menu.checked; } // FIXME : should use Checkbox.toggled signal // lp:~nick-dedekind/ubuntu-ui-toolkit/checkbox.toggled onCheckedChanged: { if (!enableCheckConnection) { return; } var oldEnable = enableCheckConnection; enableCheckConnection = false; menu.checked = checked; menu.triggered(menu.checked); enableCheckConnection = oldEnable; } Connections { target: menu onCheckedChanged: { if (!switcher.enableCheckConnection) { return; } var oldEnable = switcher.enableCheckConnection; switcher.enableCheckConnection = false; switcher.checked = menu.checked; switcher.enableCheckConnection = oldEnable; } } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/qmldir0000644000015201777760000000143012306026751026675 0ustar pbusernogroup00000000000000module Ubuntu.Settings.Menus AccessPointMenu 0.1 AccessPointMenu.qml ButtonMenu 0.1 ButtonMenu.qml CalendarMenu 0.1 CalendarMenu.qml CheckableMenu 0.1 CheckableMenu.qml EventMenu 0.1 EventMenu.qml GroupedMessageMenu 0.1 GroupedMessageMenu.qml MediaPlayerMenu 0.1 MediaPlayerMenu.qml PlaybackItemMenu 0.1 PlaybackItemMenu.qml ProgressBarMenu 0.1 ProgressBarMenu.qml ProgressValueMenu 0.1 ProgressValueMenu.qml SectionMenu 0.1 SectionMenu.qml SeparatorMenu 0.1 SeparatorMenu.qml SimpleTextMessageMenu 0.1 SimpleTextMessageMenu.qml SliderMenu 0.1 SliderMenu.qml SnapDecisionMenu 0.1 SnapDecisionMenu.qml SwitchMenu 0.1 SwitchMenu.qml TextMessageMenu 0.1 TextMessageMenu.qml TimeZoneMenu 0.1 TimeZoneMenu.qml UserSessionMenu 0.1 UserSessionMenu.qml internal HeroMessageMenu HeroMessageMenu.qml ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/MediaPlayerMenu.qml0000644000015201777760000000561712306026751031231 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Empty { id: menu property bool running: false property alias playerName: playerNameLabel.text property alias playerIcon: playerIcon.source property alias albumArt: albumArtImage.source property alias song: songLabel.text property alias artist: artistLabel.text property alias album: albumLabel.text implicitHeight: column.height + units.gu(2) Behavior on implicitHeight { UbuntuNumberAnimation {} } Column { id: column anchors { left: parent.left right: parent.right top: parent.top topMargin: units.gu(1) leftMargin: menu.__contentsMargins rightMargin: menu.__contentsMargins } height: running ? trackRow.height : playerRow.height Row { objectName: "player" id: playerRow spacing: menu.__contentsMargins visible: !running Behavior on opacity { UbuntuNumberAnimation {} } UbuntuShape { width: units.gu(5) height: width image: Image { id: playerIcon } } Label { id: playerNameLabel anchors.verticalCenter: parent.verticalCenter } } Row { objectName: "albumArt" id: trackRow width: menu.width spacing: units.gu(2) visible: running Behavior on opacity { UbuntuNumberAnimation {} } UbuntuShape { width: units.gu(10) height: width image: Image { id: albumArtImage } } Column { spacing: units.gu(1) anchors.verticalCenter: parent.verticalCenter Label { id: songLabel } Label { id: artistLabel } Label { id: albumLabel } } } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/SectionMenu.qml0000644000015201777760000000227512306026751030436 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Renato Araujo Oliveira Filho */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem ListItem.Header { id: menuItem property alias busy: indicator.running ActivityIndicator { id: indicator objectName: "indicator" anchors { margins: units.gu(0.5) right: parent.right } height: parent.height - (anchors.margins * 2) width: height anchors.verticalCenter: parent.verticalCenter } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/CalendarMenu.qml0000644000015201777760000000414012306026751030534 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem import Ubuntu.Settings.Components 0.1 ListItem.Empty { id: menu property alias collapsed: calendar.collapsed property alias currentDate: calendar.currentDate property alias firstDayOfWeek: calendar.firstDayOfWeek property alias maximumDate: calendar.maximumDate property alias minimumDate: calendar.minimumDate property alias selectedDate: calendar.selectedDate implicitHeight: column.height Column { id: column height: childrenRect.height + units.gu(1.5) anchors { top: parent.top left: parent.left right: parent.right topMargin: units.gu(1) leftMargin: menu.__contentsMargins rightMargin: menu.__contentsMargins } spacing: units.gu(1) Label { id: label anchors { left: parent.left right: parent.right } fontSize: "large" //ItemStyle.class: "label label-date" text: Qt.formatDate(calendar.currentDate, "MMMM") + " " + calendar.currentDate.getFullYear() } Calendar { id: calendar objectName: "calendar" anchors { left: parent.left right: parent.right } } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/artwork/0000755000015201777760000000000012306027154027153 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/artwork/secure.svg0000644000015201777760000000435312306026751031171 0ustar pbusernogroup00000000000000 image/svg+xml ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/artwork/CheckMark@18.png0000644000015201777760000000144412306026751031767 0ustar pbusernogroup00000000000000PNG  IHDR$"PbKGD̿ pHYs00 tIME;IDATHǭHSQ?n6| $B("-2MT4Hf6QhBh]b R#QO" HA6:wߦN;s=s7L0M%}I|>4t Q@}P0L- 7 O,@1")4Qha 7 aL)u爓량V@ܤZ"zҘb1FN^lnQS!H3kYOJby\6Q 閃'JyXZTs@Zɚ+yHb;R3/ok1s8N n1 ut"IDATxڴYsDy a'V<b+b KB;k5cUZ۹[ꫯc65]5e^㬿m=[.]ݸ8y>7ժнYcbj.}͡Co`~=ͫ9wΗZ=z eIt_gәɹ#0ʙaӡ9̳_s׵qttTθuE?\HQNK ᾞb`ckƸ|3k СHƺ%kM~…*,H D!k X;! [$襤̝Z%јk -BqudJ!"P*1zױCZ:mŵHrqLpMŅZ&k81 8MnPD|#G>bb"پ.CϷ:ݏ jN<4Vcns1z6K p\ w%H_$fS< !%Cb/. ;]'FTG nM$_tRst~a?x͡?pzks KO\io dzrW5> Ν;+z xq?]|M."Y) $Lnݺ%jZ6j^EW fRgy&WuCDHiWޠKA0<9v `dhc Oߚ۷o7/^ܓ=8J$ZKs0ofk׮5/Bp|(UhY넁36,҂\ᨐ-.nQE",G،8ZKj[6Š:NcZ]c0eŸMW 퇊gu~J»)fL1~O(Bjxdf.NI(W/JtXdOj>մfVX1Bq9=; <nxCދopopY*j9 O1aƬ;Yv}t6k 0g2N6믿;֊FT-x}[M-aY `4y nF3nDۿ^}x9f1᧷{3p}MeMzk˾)[nm]=}~1>\<']7e8:ej]zRW._%׶?g]?S_7/ݓƺMeY`u [!~]JgmZ͸?T%qSHᅬb1o#eb'^":<<:;m\Ӽ5gŁxy׵O믿Zxdy`(/ػh6QoXg[)oWrQ%I1ӡCuw%EsB6客/BPjhk6dƵ^#&ɵZ6-?7 aJdck̲Fb7k >6z ܽQAz3Q"b*a\&!01uu"sa w֯Rǩ"`ݡ7y-ޥ˖E$)ic28Şگ mw%U)<;TA^8e-́u&)݋3oƺ`}lh6v+ꟴpLTbQ?gejV(G[҆ig;<_gaSY % Ԗh*OE(%wUФwfsDqe6#ke)>CVڧb\t<[w-ɂ "HaSu[@F* ӁRʞ>ڲ!7>(:zΰ=~O5857-ذN[ҨJeof;|ɥ5G](7i۔Lu(+#SS/2l] pf.+;IKx#o&4>g5]ԻoJhg}ablgIS >23tl]pԐ(od M$ HI-jIn5CgQ>|Vo*T=nN6m w7Z5NW[Qgu֕iwr@ ڗoJs'A] p Bҗ^z\)yuSņDh'[Bz&VQlnEPtͶ{/TiVuorG}wA|L6LF_"TlV=k6? }7M:Y)ڄgp?s7ҷI,&NP ض>VO>}R{ɷ4A~s/nÎNR.ToKy$N^~`_|o2Oy晜T"cvv4^r%:Ƀ+k٬U .w*mowKz˕ )R:|(~?%) v 0^(-`EJGg̤IENDB`ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Menus/artwork/default_app.svg0000644000015201777760000002346612306026751032175 0ustar pbusernogroup00000000000000 ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Components/0000755000015201777760000000000012306027154026520 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Components/ActionTextField.qml0000644000015201777760000000375212306026751032272 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Renato Araujo Oliveira Filho * Olivier Tilloy */ import QtQuick 2.0 import Ubuntu.Components 0.1 Item { id: textField property alias text: replyField.text property alias buttonText: sendButton.text property bool activateEnabled: false signal activated(var value) TextField { id: replyField objectName: "replyText" anchors { top: parent.top bottom: parent.bottom left: parent.left right: sendButton.left rightMargin: units.gu(1) } placeholderText: "Reply" hasClearButton: false onEnabledChanged: { //Make sure that the component lost focus when enabled = false, //otherwise it will get focus again when enable = true if (!enabled) { focus = false; } } } Button { id: sendButton objectName: "sendButton" anchors { top: parent.top bottom: parent.bottom right: parent.right } width: units.gu(9) enabled: replyField.text !== "" && textField.activateEnabled color: enabled ? "#c94212" : "#bababa" onClicked: { textField.activated(replyField.text); } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Components/HeroMessageHeader.qml0000644000015201777760000001032612306026751032552 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Renato Araujo Oliveira Filho * Olivier Tilloy */ import QtQuick 2.0 import Ubuntu.Components 0.1 Item { id: heroMessageHeader property alias avatar: avatarImage.source property alias icon: iconImage.source property alias appIcon: appIconImage.source property alias titleText: __titleText property alias subtitleText: __subtitleText property alias bodyText: __bodyText property real bodyBottom: bodyText.y + bodyText.height signal appIconClicked() height: units.gu(9) UbuntuShape { id: avatarImageContainer anchors { top: parent.top topMargin: units.gu(2) left: parent.left leftMargin: units.gu(2) } height: units.gu(6) width: units.gu(6) image: Image { id: avatarImage objectName: "avatar" fillMode: Image.PreserveAspectFit } } Image { id: iconImage objectName: "icon" anchors { top: parent.top topMargin: units.gu(2) left: avatarImageContainer.right leftMargin: units.gu(1) } width: units.gu(2) height: width horizontalAlignment: Image.AlignHCenter verticalAlignment: Image.AlignBottom fillMode: Image.PreserveAspectFit } Label { id: __titleText objectName: "title" anchors { baseline: iconImage.bottom left: iconImage.right leftMargin: units.gu(1) right: __appIcon.left rightMargin: units.gu(2) } elide: Text.ElideRight font.weight: Font.DemiBold fontSize: "medium" } Label { id: __subtitleText objectName: "subtitle" anchors { baseline: __titleText.baseline baselineOffset: units.gu(2.5) left: __titleText.left right: __titleText.right } elide: Text.ElideRight fontSize: "small" } Label { id: __bodyText objectName: "body" anchors { baseline: __subtitleText.baseline baselineOffset: units.gu(2.5) left: __titleText.left right: parent.right rightMargin: units.gu(2) } maximumLineCount: 2 wrapMode: Text.WordWrap elide: Text.ElideRight fontSize: "small" } Item { id: __appIcon width: units.gu(7) height: units.gu(7) anchors { top: parent.top right: parent.right } opacity: 0.0 enabled: heroMessageHeader.state === "expanded" Image { id: appIconImage objectName: "appIcon" height: width anchors { left: parent.left leftMargin: units.gu(2) right: parent.right rightMargin: units.gu(2) topMargin: units.gu(1) verticalCenter: parent.verticalCenter } fillMode: Image.PreserveAspectFit } MouseArea { anchors.fill: parent onClicked: heroMessageHeader.appIconClicked() } } states: State { name: "expanded" PropertyChanges { target: __appIcon opacity: 1.0 } } transitions: Transition { NumberAnimation { property: "opacity" duration: 200 easing.type: Easing.OutQuad } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Components/IconVisual.qml0000644000015201777760000000453012306026751031313 0ustar pbusernogroup00000000000000/* * Copyright 2012 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ import QtQuick 2.0 import Ubuntu.Components 0.1 Item { id: icon property url source property alias color: colorizedImage.keyColorOut property alias keyColor: colorizedImage.keyColorIn property alias status: image.status Image { id: image /* Necessary so that icons are not loaded before a size is set. */ property bool ready: false Component.onCompleted: ready = true anchors.fill: parent source: ready && width > 0 && height > 0 && icon.source ? icon.source : "" sourceSize { width: width height: height } cache: true visible: !colorizedImage.active } ShaderEffect { id: colorizedImage anchors.fill: parent visible: active && image.status == Image.Ready // Whether or not a color has been set. property bool active: keyColorOut != Qt.rgba(0.0, 0.0, 0.0, 0.0) property Image source: visible ? image : null property color keyColorOut: Qt.rgba(0.0, 0.0, 0.0, 0.0) property color keyColorIn: "#808080" property real threshold: 0.6 fragmentShader: source ? " varying highp vec2 qt_TexCoord0; uniform sampler2D source; uniform highp vec4 keyColorOut; uniform highp vec4 keyColorIn; uniform lowp float threshold; uniform lowp float qt_Opacity; void main() { lowp vec4 sourceColor = texture2D(source, qt_TexCoord0); gl_FragColor = mix(vec4(keyColorOut.rgb, 1.0) * sourceColor.a, sourceColor, step(threshold, distance(sourceColor.rgb / sourceColor.a, keyColorIn.rgb))) * qt_Opacity; }" : "" } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Components/Calendar.qml0000644000015201777760000002232312306026751030750 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ import QtQuick 2.0 import Ubuntu.Components 0.1 import "dateExt.js" as DateExt ListView { id: monthView property bool collapsed: false property var currentDate: selectedDate.monthStart().addDays(15) property var firstDayOfWeek: Qt.locale(i18n.language).firstDayOfWeek property var maximumDate property var minimumDate property var selectedDate: priv.today Component.onCompleted: { priv.__populateModel() timer.start() } onCurrentIndexChanged: { if (!priv.ready) return currentDate = currentItem.monthStart } onCurrentDateChanged: { if (!priv.ready) return priv.__populateModel(); } onMaximumDateChanged: { if (!priv.ready) return priv.__populateModel() } onMinimumDateChanged: { if (!priv.ready) return priv.__populateModel() } ListModel { id: calendarModel } QtObject { id: priv property bool ready: false property int squareUnit: monthView.width / 7 property int verticalMargin: units.gu(1) property var today: (new Date()).midnight() function __withinLowerMonthBound(date) { return minimumDate == undefined || date.monthStart() >= minimumDate.monthStart() } function __withinUpperMonthBound(date) { return maximumDate == undefined || date.monthStart() <= maximumDate.monthStart() } function __getRealMinimumDate(date) { if (minimumDate != undefined && minimumDate > date) { return minimumDate; } return date; } function __getRealMaximumDate(date) { if (maximumDate != undefined && maximumDate < date) { return maximumDate; } return date; } function __populateModel() { // disable the onCurrentIndexChanged logic priv.ready = false var minimumAddedDate = priv.__getRealMinimumDate(currentDate.addMonths(-2)).monthStart(); var maximumAddedDate = priv.__getRealMaximumDate(currentDate.addMonths(2)).monthStart(); // Remove old minimum months while (calendarModel.count > 0 && calendarModel.get(0).monthStart < minimumAddedDate) { calendarModel.remove(0); } // Remove old maximum months while (calendarModel.count > 0 && calendarModel.get(calendarModel.count - 1).monthStart > maximumAddedDate) { calendarModel.remove(calendarModel.count - 1); } // Add new months var i = 0; while (calendarModel.count > 0 && calendarModel.get(0).monthStart > minimumAddedDate) { calendarModel.insert(0, { "monthStart": calendarModel.get(0).monthStart.addMonths(-1) }); ++i; } if (calendarModel.count > 0) { i = 0; while (calendarModel.count > 0 && calendarModel.get(calendarModel.count - 1).monthStart < maximumAddedDate) { calendarModel.append({ "monthStart": calendarModel.get(calendarModel.count - 1).monthStart.addMonths(1) }); ++i; } } else { i = 0; do { calendarModel.append({ "monthStart": minimumAddedDate.addMonths(i) }); ++i; } while (calendarModel.get(i-1).monthStart < maximumAddedDate) } currentIndex = DateExt.diffMonths(minimumAddedDate, currentDate); // Ok, we're all set up. enable the onCurrentIndexChanged logic priv.ready = true } } Timer { id: timer interval: 60000 repeat: true running: true triggeredOnStart: true onTriggered: priv.today = (new Date()).midnight() } width: parent.width height: priv.squareUnit * (collapsed ? 1 : 6) + priv.verticalMargin * 2 interactive: !collapsed clip: true cacheBuffer: width + 1 highlightRangeMode: ListView.StrictlyEnforceRange preferredHighlightBegin: 0 preferredHighlightEnd: width model: calendarModel orientation: ListView.Horizontal snapMode: ListView.SnapOneItem focus: true Keys.onLeftPressed: selectedDate.addDays(-1) Keys.onRightPressed: selectedDate.addDays(1) delegate: Item { id: monthItem property int currentWeekRow: Math.floor((selectedDate.getTime() - gridStart.getTime()) / Date.msPerWeek) property var gridStart: monthStart.weekStart(firstDayOfWeek) property var monthEnd: monthStart.addMonths(1) property var monthStart: model.monthStart width: monthView.width height: monthView.height Grid { id: monthGrid rows: 6 columns: 7 y: priv.verticalMargin width: priv.squareUnit * columns height: priv.squareUnit * rows Repeater { model: monthGrid.rows * monthGrid.columns delegate: Item { id: dayItem objectName: "dayItem" + index property bool isCurrent: (dayStart.getFullYear() == selectedDate.getFullYear() && dayStart.getMonth() == selectedDate.getMonth() && dayStart.getDate() == selectedDate.getDate()) property bool isCurrentMonth: monthStart <= dayStart && dayStart < monthEnd property bool isCurrentWeek: row == currentWeekRow property bool isSunday: weekday == 0 property bool isToday: dayStart.getTime() == priv.today.getTime() property bool isWithinBounds: (minimumDate == undefined || dayStart >= minimumDate) && (maximumDate == undefined || dayStart <= maximumDate) property int row: Math.floor(index / 7) property int weekday: (index % 7 + firstDayOfWeek) % 7 property real bottomMargin: (row == 5 || (collapsed && isCurrentWeek)) ? -priv.verticalMargin : 0 property real topMargin: (row == 0 || (collapsed && isCurrentWeek)) ? -priv.verticalMargin : 0 property var dayStart: gridStart.addDays(index) // Styling properties property color color: Theme.palette.selected.backgroundText property color todayColor: "#DD4814" property string fontSize: "large" property var backgroundColor: "transparent" // FIXME use color instead var when Qt will fix the bug with the binding (loses alpha) property var sundayBackgroundColor: "#19AEA79F" // FIXME use color instead var when Qt will fix the bug with the binding (loses alpha) visible: collapsed ? isCurrentWeek : true width: priv.squareUnit height: priv.squareUnit // ItemStyle.class: "day" Item { anchors { fill: parent topMargin: dayItem.topMargin bottomMargin: dayItem.bottomMargin } Rectangle { anchors.fill: parent visible: color.a > 0 color: isSunday ? dayItem.sundayBackgroundColor : dayItem.backgroundColor } Label { anchors.centerIn: parent text: dayStart.getDate() fontSize: dayItem.fontSize color: isToday ? dayItem.todayColor : dayItem.color scale: isCurrent ? 1.8 : 1. opacity: isWithinBounds ? isCurrentMonth ? 1. : 0.3 : 0.1 Behavior on scale { NumberAnimation { duration: 50 } } } } MouseArea { anchors { fill: parent topMargin: dayItem.topMargin bottomMargin: dayItem.bottomMargin } onReleased: if (isWithinBounds) monthView.selectedDate = dayStart } } } } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Components/qmldir0000644000015201777760000000031512306026751027734 0ustar pbusernogroup00000000000000module Ubuntu.Settings.Components ActionTextField 0.1 ActionTextField.qml Calendar 0.1 Calendar.qml HeroMessageHeader 0.1 HeroMessageHeader.qml IconVisual 0.1 IconVisual.qml QuickReply 0.1 QuickReply.qml ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Components/dateExt.js0000644000015201777760000000442412306026751030462 0ustar pbusernogroup00000000000000.pragma library function diffMonths(dateA, dateB) { var months; months = (dateB.getFullYear() - dateA.getFullYear()) * 12; months -= dateA.getMonth(); months += dateB.getMonth(); return Math.max(months, 0); } Date.msPerDay = 86400e3 Date.msPerWeek = Date.msPerDay * 7 Date.leapYear = function(year) { return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) } Date.daysInMonth = function(year, month) { return [ 31/*Jan*/, 28/*Feb*/, 31/*Mar*/, 30/*Apr*/, 31/*May*/, 30/*Jun*/, 31/*Jul*/, 31/*Aug*/, 30/*Sep*/, 31/*Oct*/, 30/*Nov*/, 31/*Dec*/ ][month] + (month == 1) * Date.leapYear(year) } Date.weeksInMonth = function(year, month, weekday) { var y = year, m = month var date0 = new Date(y, m, 1) var date1 = new Date(y + (m == 11), m < 11 ? m + 1 : 0, 1) var day = date0.getDay() var m = (date1.getTime() - date0.getTime()) / Date.msPerDay var n = 0 while (m > 0) { if (day == weekday) n = n + 1 day = day < 6 ? day + 1 : 0 m = m - 1 } return n } Date.prototype.midnight = function() { var date = new Date(this) date.setHours(0,0,0,0); return date } Date.prototype.addDays = function(days) { var date = new Date(this) date.setTime(date.getTime() + Date.msPerDay * days) return date } Date.prototype.addMonths = function(months) { var date = new Date(this) date.setMonth(date.getMonth() + months) return date } Date.prototype.weekStart = function(weekStartDay) { var date = this.midnight() var day = date.getDay(), n = 0 while (day != weekStartDay) { if (day == 0) day = 6 else day = day - 1 n = n + 1 } return date.addDays(-n) } Date.prototype.monthStart = function() { var date = new Date(this).midnight(); date.setDate(1); return date; } Date.prototype.weekNumber = function() { var date = this.weekStart(1).addDays(3) // Thursday midnight var newYear = new Date(date.getFullYear(), 0 /*Jan*/, 1 /*the 1st*/) var n = 0 var tx = date.getTime(), tn = newYear.getTime() while (tn < tx) { tx = tx - Date.msPerWeek n = n + 1 } return n } Date.prototype.weeksInMonth = function(weekday) { return Date.weeksInMonth(this.getFullYear(), this.getMonth(), weekday) } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Components/QuickReply.qml0000644000015201777760000001076412306026751031335 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Renato Araujo Oliveira Filho * Olivier Tilloy */ import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem Item { id: quickReply property alias buttonText: actionTextField.buttonText property real expandedHeight: childrenRect.height property alias messages : messagelistRepeater.model property alias replyEnabled: actionTextField.activateEnabled property real messageMargins: units.gu(2) signal replied(var value) Item { id: header anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right height: units.gu(4) Row { anchors { fill: parent topMargin: units.gu(1) bottomMargin: units.gu(1) leftMargin: messageMargins rightMargin: messageMargins } spacing: units.gu(1) Image { width: units.gu(2) height: width fillMode: Image.PreserveAspectFit source: "artwork/message_sms01_54px.png" } Label { height: parent.height verticalAlignment: Text.AlignVCenter fontSize: "small" text: "Quick reply with:" } } ListItem.ThinDivider { anchors.bottom: parent.bottom } } Column { id: messagelist anchors { left: parent.left right: parent.right top: header.bottom } height: childrenRect.height Repeater { id: messagelistRepeater height: childrenRect.height Item { objectName: "replyMessage" + index width: messagelist.width height: units.gu(5) Label { id: __label anchors { fill: parent leftMargin: messageMargins rightMargin: messageMargins } verticalAlignment: Text.AlignVCenter fontSize: "medium" text: modelData } ListItem.ThinDivider { anchors.top: parent.top } ListItem.ThinDivider { anchors.bottom: parent.bottom } MouseArea { id: __mouseArea anchors.fill: parent onClicked: { actionTextField.text = modelData; } } Rectangle { id: __mask anchors.fill: parent color: "black" opacity: __mouseArea.pressed ? 0.3 : 0.0 Behavior on opacity { NumberAnimation { duration: 200 easing.type: Easing.OutQuad } } } } } } Item { anchors.top: messagelist.bottom anchors.left: parent.left anchors.right: parent.right height: units.gu(6) ActionTextField { id: actionTextField anchors.fill: parent anchors { topMargin: units.gu(1) bottomMargin: units.gu(1) leftMargin: messageMargins rightMargin: messageMargins } activateEnabled: replyEnabled onActivated: { quickReply.replied(value) } } ListItem.ThinDivider { anchors.top: parent.top } } } ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Components/artwork/0000755000015201777760000000000012306027154030211 5ustar pbusernogroup00000000000000././@LongLink0000000000000000000000000000015000000000000011211 Lustar 00000000000000ubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Components/artwork/message_sms01_54px.pngubuntu-settings-components-0.1+14.04.20140306/Ubuntu/Settings/Components/artwork/message_sms01_54px.0000644000015201777760000000433312306026751033546 0ustar pbusernogroup00000000000000PNG  IHDR66EjtEXtSoftwareAdobe ImageReadyqe<$iTXtXML:com.adobe.xmp RMIDATxOH#wǓ1ucntkT`{,*ɢ7EbKWHE۵e-z(HCu1F3fldF|$7K (Pk*7`7`7`W+*GT ]Aӡi$h,zj$zCt_Wl2򳳳oC *.bDXrFFV lllqpppRi+++o JAKZ wu~~[ mQ64 G1b`j [`#FysPlqqq$fh`*F{*Lj"i$v.LLL8&,&>>^t駧 MJUc(X ZV!I ]ם0L)P:{QgϞRah5AHKKc QFrIIɃZ#66֊c){`NNNNS#;&,8886voI!2bTdJbXL]Vakk&pT*==Ū_ZZ #RHyGG+W Fj0ҿ&\Ԅ|,hduH?% 2 <=C~L2o:UR4MawęL&%tEsT]/Uf7n8vsq{a;ꪍ FGGj"<ХƧA-//{럐>ˢPʁM>jnn@El*xА$pO.7FH .EQށLLNNV F1,m6ﲉ9&BIngkߠR745)ިz8< *إk6Gkkk?O/t_V8R@=6T,}@ԁz!G@] TmmR?C!! 5*2jx555{RP%gXn<|+Ǝl M?vOLMIENDB`ubuntu-settings-components-0.1+14.04.20140306/tests/0000755000015201777760000000000012306027154022453 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/tests/CMakeLists.txt0000644000015201777760000000035612306026751025221 0ustar pbusernogroup00000000000000add_subdirectory(utils) # QML tests that require graphical capabitlies. add_custom_target(qmluitests) add_dependencies(qmluitests UbuntuTest) add_custom_target(qmltests) add_dependencies(qmltests qmluitests) add_subdirectory(qmltests) ubuntu-settings-components-0.1+14.04.20140306/tests/utils/0000755000015201777760000000000012306027154023613 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/tests/utils/CMakeLists.txt0000644000015201777760000000003212306026751026350 0ustar pbusernogroup00000000000000add_subdirectory(modules) ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/0000755000015201777760000000000012306027154025263 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/0000755000015201777760000000000012306027154026545 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/CMakeLists.txt0000644000015201777760000000002712306026751031306 0ustar pbusernogroup00000000000000add_subdirectory(Test) ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/0000755000015201777760000000000012306027154027464 5ustar pbusernogroup00000000000000././@LongLink0000000000000000000000000000015200000000000011213 Lustar 00000000000000ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/TouchEventSequenceWrapper.hubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/TouchEventSequenceWrap0000644000015201777760000000247612306026751034031 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef TOUCH_EVENT_SEQUENCE_WRAPPER_H #define TOUCH_EVENT_SEQUENCE_WRAPPER_H #include #include #include class TouchEventSequenceWrapper : public QObject { Q_OBJECT public: TouchEventSequenceWrapper(QTest::QTouchEventSequence eventSequence); Q_INVOKABLE void commit(bool processEvents = true); Q_INVOKABLE void move(int touchId, int x, int y); Q_INVOKABLE void press(int touchId, int x, int y); Q_INVOKABLE void release(int touchId, int x, int y); Q_INVOKABLE void stationary(int touchId); private: QTest::QTouchEventSequence m_eventSequence; }; QML_DECLARE_TYPE(TouchEventSequenceWrapper) #endif // TOUCH_EVENT_SEQUENCE_WRAPPER_H ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/plugin.h0000644000015201777760000000166712306026751031147 0ustar pbusernogroup00000000000000/* * Copyright (C) 2012, 2013 Canonical, Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef UBUNTU_TEST_PLUGIN_H #define UBUNTU_TEST_PLUGIN_H #include class UbuntuTestPlugin : public QQmlExtensionPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") public: void registerTypes(const char *uri); }; #endif // UBUNTU_TEST_PLUGIN_H ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/CMakeLists.txt0000644000015201777760000000122312306026751032224 0ustar pbusernogroup00000000000000add_definitions(-DQT_NO_KEYWORDS) set(UbuntuTestQML_SOURCES testutil.cpp plugin.cpp TouchEventSequenceWrapper.cpp ) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${Qt5Gui_PRIVATE_INCLUDE_DIRS} ) add_library(UbuntuTestQml MODULE ${UbuntuTestQML_SOURCES}) qt5_use_modules(UbuntuTestQml Core Quick Test) # copy qml files into build directory for shadow builds file(GLOB QML_JS_FILES *.js *.qml qmldir) add_custom_target(UbuntuTestQmlJsFiles ALL COMMAND cp ${QML_JS_FILES} ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${QML_JS_FILES} ) add_custom_target(UbuntuTest) add_dependencies(UbuntuTest UbuntuTestQml UbuntuTestQmlJsFiles) ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/UbuntuTestCase.qml0000644000015201777760000002353312306026751033125 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Test 0.1 as UT TestCase { TestUtil {id:util} // Fake implementation to be provided to items under test property var fakeDateTime: new function() { this.currentTimeMs = 0 this.getCurrentTimeMs = function() {return this.currentTimeMs} } // Flickable won't recognise a single mouse move as dragging the flickable. // Use 5 steps because it's what // Qt uses in QQuickViewTestUtil::flick // speed is in pixels/second function mouseFlick(item, x, y, toX, toY, pressMouse, releaseMouse, speed, iterations) { pressMouse = ((pressMouse != null) ? pressMouse : true); // Default to true for pressMouse if not present releaseMouse = ((releaseMouse != null) ? releaseMouse : true); // Default to true for releaseMouse if not present // set a default speed if not specified speed = (speed != null) ? speed : units.gu(10); // set a default iterations if not specified iterations = (iterations !== undefined) ? iterations : 5 var distance = Math.sqrt(Math.pow(toX - x, 2) + Math.pow(toY - y, 2)) var totalTime = (distance / speed) * 1000 /* converting speed to pixels/ms */ var timeStep = totalTime / iterations var diffX = (toX - x) / iterations var diffY = (toY - y) / iterations if (pressMouse) { fakeDateTime.currentTimeMs += timeStep mousePress(item, x, y) } for (var i = 0; i < iterations; ++i) { fakeDateTime.currentTimeMs += timeStep if (i === iterations - 1) { // Avoid any rounding errors by making the last move be at precisely // the point specified mouseMove(item, toX, toY, iterations / speed) } else { mouseMove(item, x + (i + 1) * diffX, y + (i + 1) * diffY, iterations / speed) } } if (releaseMouse) { fakeDateTime.currentTimeMs += timeStep mouseRelease(item, toX, toY) } } // Find an object with the given name in the children tree of "obj" function findChild(obj,objectName) { var childs = new Array(0); childs.push(obj) while (childs.length > 0) { if (childs[0].objectName == objectName) { return childs[0] } for (var i in childs[0].children) { childs.push(childs[0].children[i]) } childs.splice(0, 1); } return undefined; } // Find an object with the given name in the children tree of "obj" // Including invisible children like animations, timers etc. // Note: you should use findChild if you're not sure you need this // as this tree is much bigger and might contain stuff that goes // away randomly. function findInvisibleChild(obj,objectName) { var childs = new Array(0); childs.push(obj) while (childs.length > 0) { if (childs[0].objectName == objectName) { return childs[0] } for (var i in childs[0].data) { childs.push(childs[0].data[i]) } childs.splice(0, 1); } return undefined; } // Type a full string instead of keyClick letter by letter // TODO: this is not ugly, this is uber-ugly and does not support // any special character. Remove the keyMap once keyClick(obj, char) // has landed in upstream Qt. function typeString(str) { var keyMap = { "a": Qt.Key_A, "b": Qt.Key_B, "c": Qt.Key_C, "d": Qt.Key_D, "e": Qt.Key_E, "f": Qt.Key_F, "g": Qt.Key_G, "h": Qt.Key_H, "i": Qt.Key_I, "j": Qt.Key_J, "k": Qt.Key_K, "l": Qt.Key_L, "m": Qt.Key_M, "n": Qt.Key_N, "o": Qt.Key_O, "p": Qt.Key_P, "q": Qt.Key_Q, "r": Qt.Key_R, "s": Qt.Key_S, "t": Qt.Key_T, "u": Qt.Key_U, "v": Qt.Key_V, "w": Qt.Key_W, "x": Qt.Key_X, "y": Qt.Key_Y, "z": Qt.Key_Z, "A": Qt.Key_A, "B": Qt.Key_B, "C": Qt.Key_C, "D": Qt.Key_D, "E": Qt.Key_E, "F": Qt.Key_F, "G": Qt.Key_G, "H": Qt.Key_H, "I": Qt.Key_I, "J": Qt.Key_J, "K": Qt.Key_K, "L": Qt.Key_L, "M": Qt.Key_M, "N": Qt.Key_N, "O": Qt.Key_O, "P": Qt.Key_P, "Q": Qt.Key_Q, "R": Qt.Key_R, "S": Qt.Key_S, "T": Qt.Key_T, "U": Qt.Key_U, "V": Qt.Key_V, "W": Qt.Key_W, "X": Qt.Key_X, "Y": Qt.Key_Y, "Z": Qt.Key_Z, "0": Qt.Key_0, "1": Qt.Key_1, "2": Qt.Key_2, "3": Qt.Key_3, "4": Qt.Key_4, "5": Qt.Key_5, "6": Qt.Key_6, "7": Qt.Key_7, "8": Qt.Key_8, "9": Qt.Key_9, " ": Qt.Key_Space, } for (var i = 0; i < str.length; i++) { keyClick(keyMap[str[i]]) } } // Keeps executing a given parameter-less function until it returns the given // expected result or the timemout is reached (in which case a test failure // is generated) function tryCompareFunction(func, expectedResult) { var timeSpent = 0 var timeout = 5000 var success = false var actualResult while (timeSpent < timeout && !success) { actualResult = func() success = qtest_compareInternal(actualResult, expectedResult) if (success === false) { wait(50) timeSpent += 50 } } var act = qtest_results.stringify(actualResult) var exp = qtest_results.stringify(expectedResult) if (!qtest_results.compare(success, "function returned unexpected result", act, exp, util.callerFile(), util.callerLine())) { throw new Error("QtQuickTest::fail") } } function touchEvent() { return UT.Util.touchEvent() } // speed is in pixels/second function touchFlick(item, x, y, toX, toY, beginTouch, endTouch, speed, iterations) { // Default to true for beginTouch if not present beginTouch = (beginTouch !== undefined) ? beginTouch : true // Default to true for endTouch if not present endTouch = (endTouch !== undefined) ? endTouch : true // Set a default speed if not specified speed = (speed !== undefined) ? speed : units.gu(10) // Set a default iterations if not specified var iterations = (iterations !== undefined) ? iterations : 5 var distance = Math.sqrt(Math.pow(toX - x, 2) + Math.pow(toY - y, 2)) var totalTime = (distance / speed) * 1000 /* converting speed to pixels/ms */ var timeStep = totalTime / iterations var diffX = (toX - x) / iterations var diffY = (toY - y) / iterations if (beginTouch) { fakeDateTime.currentTimeMs += timeStep var event = touchEvent() event.press(0 /* touchId */, x, y) event.commit() } for (var i = 0; i < iterations; ++i) { fakeDateTime.currentTimeMs += timeStep if (i === iterations - 1) { // Avoid any rounding errors by making the last move be at precisely // the point specified wait(iterations / speed) var event = touchEvent() event.move(0 /* touchId */, toX, toY) event.commit() } else { wait(iterations / speed) var event = touchEvent() event.move(0 /* touchId */, x + (i + 1) * diffX, y + (i + 1) * diffY) event.commit() } } if (endTouch) { fakeDateTime.currentTimeMs += timeStep var event = touchEvent() event.release(0 /* touchId */, toX, toY) event.commit() } } function fetchRootItem(item) { if (item.parent) return fetchRootItem(item.parent) else return item } function touchPress(item, x, y) { var root = fetchRootItem(item) var rootPoint = item.mapToItem(root, x, y) var event = touchEvent() event.press(0 /* touchId */, rootPoint.x, rootPoint.y) event.commit() } function touchRelease(item, x, y) { var root = fetchRootItem(item) var rootPoint = item.mapToItem(root, x, y) var event = touchEvent() event.release(0 /* touchId */, rootPoint.x, rootPoint.y) event.commit() } function tap(item, x, y) { var event = touchEvent() event.press(0 /* touchId */, x, y) event.commit() event = touchEvent() event.release(0 /* touchId */, x, y) event.commit() } } ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/testutil.cpp0000644000015201777760000000372412306026751032055 0ustar pbusernogroup00000000000000/* * Copyright (C) 2012, 2013 Canonical, Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "testutil.h" #include #include TestUtil::TestUtil(QObject *parent) : QObject(parent) , m_targetWindow(0) , m_touchDevice(0) { } TestUtil::~TestUtil() { } bool TestUtil::isInstanceOf(QObject *obj, QString name) { if (!obj) return false; bool result = obj->inherits(name.toUtf8()); if (!result) { const QMetaObject *metaObject = obj->metaObject(); while (!result && metaObject) { const QString className = metaObject->className(); const QString qmlName = className.left(className.indexOf("_QMLTYPE_")); result = qmlName == name; metaObject = metaObject->superClass(); } } return result; } TouchEventSequenceWrapper *TestUtil::touchEvent() { ensureTargetWindow(); ensureTouchDevice(); return new TouchEventSequenceWrapper( QTest::touchEvent(m_targetWindow, m_touchDevice, /* autoCommit */ false)); } void TestUtil::ensureTargetWindow() { if (!m_targetWindow) m_targetWindow = QGuiApplication::topLevelWindows()[0]; } void TestUtil::ensureTouchDevice() { if (!m_touchDevice) { m_touchDevice = new QTouchDevice; m_touchDevice->setType(QTouchDevice::TouchScreen); QWindowSystemInterface::registerTouchDevice(m_touchDevice); } } ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/testutil.h0000644000015201777760000000226412306026751031520 0ustar pbusernogroup00000000000000/* * Copyright (C) 2012, 2013 Canonical, Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef TESTUTIL_H #define TESTUTIL_H #include "TouchEventSequenceWrapper.h" #include class QTouchDevice; class TestUtil : public QObject { Q_OBJECT Q_DISABLE_COPY(TestUtil) public: TestUtil(QObject *parent = 0); ~TestUtil(); Q_INVOKABLE bool isInstanceOf(QObject*, QString); Q_INVOKABLE TouchEventSequenceWrapper *touchEvent(); private: void ensureTargetWindow(); void ensureTouchDevice(); QWindow *m_targetWindow; QTouchDevice *m_touchDevice; }; QML_DECLARE_TYPE(TestUtil) #endif // TESTUTIL_H ././@LongLink0000000000000000000000000000015400000000000011215 Lustar 00000000000000ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/TouchEventSequenceWrapper.cppubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/TouchEventSequenceWrap0000644000015201777760000000255512306026751034027 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TouchEventSequenceWrapper.h" TouchEventSequenceWrapper::TouchEventSequenceWrapper(QTest::QTouchEventSequence eventSequence) : QObject(0) , m_eventSequence(eventSequence) { } void TouchEventSequenceWrapper::commit(bool processEvents) { m_eventSequence.commit(processEvents); } void TouchEventSequenceWrapper::move(int touchId, int x, int y) { m_eventSequence.move(touchId, QPoint(x, y)); } void TouchEventSequenceWrapper::press(int touchId, int x, int y) { m_eventSequence.press(touchId, QPoint(x, y)); } void TouchEventSequenceWrapper::release(int touchId, int x, int y) { m_eventSequence.release(touchId, QPoint(x, y)); } void TouchEventSequenceWrapper::stationary(int touchId) { m_eventSequence.stationary(touchId); } ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/qmldir0000644000015201777760000000011612306026751030677 0ustar pbusernogroup00000000000000module Ubuntu.Test plugin UbuntuTestQml UbuntuTestCase 0.1 UbuntuTestCase.qml ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/Ubuntu/Test/plugin.cpp0000644000015201777760000000234312306026751031472 0ustar pbusernogroup00000000000000/* * Copyright (C) 2012, 2013 Canonical, Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "plugin.h" #include "testutil.h" #include "TouchEventSequenceWrapper.h" #include static QObject *testutil_provider(QQmlEngine* /* engine */, QJSEngine* /* scriptEngine */) { return new TestUtil(); } void UbuntuTestPlugin::registerTypes(const char *uri) { Q_ASSERT(QLatin1String(uri) == QLatin1String("Ubuntu.Test")); // @uri Ubuntu.Test qmlRegisterSingletonType(uri, 0, 1, "Util", testutil_provider); qmlRegisterUncreatableType(uri, 0, 1, "TouchEventSequence", "You cannot directly create a TouchEventSequence object."); } ubuntu-settings-components-0.1+14.04.20140306/tests/utils/modules/CMakeLists.txt0000644000015201777760000000003112306026751030017 0ustar pbusernogroup00000000000000add_subdirectory(Ubuntu) ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/0000755000015201777760000000000012306027154024327 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/0000755000015201777760000000000012306027154025416 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_SimpleTextMessageMenu.qml0000644000015201777760000001262512306026751033263 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Nick Dedekind */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Test 0.1 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height SimpleTextMessageMenu { id: messageMenu removable: false title: "Text Message" time: "11:08am" message: "I am a little teapot" } SimpleTextMessageMenu { id: messageMenuRemovable removable: true anchors.top: messageMenu.bottom } TextMessageMenu { id: messageMenuSelected removable: true anchors.top: messageMenuRemovable.bottom } } } SignalSpy { id: signalSpyActivateApp signalName: "appActivated" target: messageMenuSelected } SignalSpy { id: signalSpyDismiss signalName: "dismissed" target: messageMenuRemovable } UbuntuTestCase { name: "SimpleTextMessageMenu" when: windowShown function init() { signalSpyActivateApp.clear(); signalSpyDismiss.clear(); messageMenuSelected.selected = false; } function test_title_data() { return [ { title: "title1" }, { title: "title2" }, ]; } function test_title(data) { messageMenu.title = data.title; var title = UtilsJS.findChild(messageMenu, "title"); verify(title, "No title"); compare(title.text, data.title, "Title does not match set title."); } function test_time_data() { return [ { time: "11:09am" }, { time: "4pm" }, ]; } function test_time(data) { messageMenu.time = data.time; var subtitle = UtilsJS.findChild(messageMenu, "subtitle"); verify(subtitle !== undefined, "No subtitle"); compare(subtitle.text, data.time, "Time does not match set time."); } function test_appIcon_data() { return [ { appIcon: Qt.resolvedUrl("../../artwork/avatar.png") }, { appIcon: Qt.resolvedUrl("../../artwork/rhythmbox.png") }, ]; } function test_appIcon(data) { messageMenu.appIcon = data.appIcon; var appIcon = UtilsJS.findChild(messageMenu, "appIcon"); verify(appIcon !== undefined, "No app icon"); compare(appIcon.source, data.appIcon, "App Icon does not match set icon."); } function test_message_data() { return [ { message: "This is a test." }, { message: "Test is also a test." }, ]; } function test_message(data) { messageMenu.message = data.message; var body = UtilsJS.findChild(messageMenu, "body"); verify(body !== undefined, "No body"); compare(body.text, data.message, "Message does not match set message."); } function test_activateApp() { var appIcon = UtilsJS.findChild(messageMenuSelected, "appIcon"); mouseClick(appIcon, appIcon.width * 2, appIcon.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyActivateApp.count, 0, "activate app should not have been triggered"); messageMenuSelected.selected = false; mouseClick(appIcon, appIcon.width / 2, appIcon.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyActivateApp.count, 0, "activate app should not have been triggered when not selected"); messageMenuSelected.selected = true; mouseClick(appIcon, appIcon.width / 2, appIcon.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyActivateApp.count > 0, true, "activate app should have been triggered when selected"); } function test_dismiss() { mouseFlick(messageMenuRemovable, messageMenuRemovable.width / 2, messageMenuRemovable.height / 2, messageMenuRemovable.width, messageMenuRemovable.height / 2, true, true, units.gu(1), 10); tryCompareFunction(function() { return signalSpyDismiss.count > 0; }, true); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_SectionMenu.qml0000644000015201777760000000362112306026751031260 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Nick Dedekind */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height SectionMenu { id: section1 text: i18n.tr("Section Starts Here: 1"); } SectionMenu { id: section2 text: i18n.tr("Section Starts Here: 2"); busy: true anchors.top: section1.bottom } } } TestCase { name: "SectionMenu" when: windowShown function init() { section1.busy = false; } function test_busy() { var indicator = UtilsJS.findChild(section1, "indicator"); verify(indicator.running === false); section1.busy = true compare(indicator.running, true, "Activity indicator should be animating when busy"); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_ButtonMenu.qml0000644000015201777760000000420612306026751031127 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height ButtonMenu { id: buttonMenu text: i18n.tr("Button") buttonText: i18n.tr("Hello world!") iconSource: Qt.resolvedUrl("../../artwork/avatar.png") } ButtonMenu { id: buttonMenu2 buttonText: i18n.tr("Button") anchors.top: buttonMenu.bottom } } } SignalSpy { id: signalSpy signalName: "clicked" target: buttonMenu } TestCase { name: "ButtonMenu" when: windowShown function test_click() { signalSpy.clear(); var button = UtilsJS.findChild(buttonMenu, "button"); var button2 = UtilsJS.findChild(buttonMenu2, "button"); verify(button !== undefined); mouseClick(button, button.width / 2, button.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpy.count > 0, true, "signal clicked not triggered"); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_TextMessageMenu.qml0000644000015201777760000002001012306026751032074 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Nick Dedekind */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Test 0.1 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height TextMessageMenu { id: messageMenu removable: false title: "Text Message" time: "11:08am" message: "I am a little teapot" } TextMessageMenu { id: messageMenuRemovable removable: true anchors.top: messageMenu.bottom } TextMessageMenu { id: messageMenuSelected removable: true anchors.top: messageMenuRemovable.bottom onReplied: { textMessageReply = value; } } } } property string textMessageReply: "" SignalSpy { id: signalSpyActivateApp signalName: "appActivated" target: messageMenuSelected } SignalSpy { id: signalSpyDismiss signalName: "dismissed" target: messageMenuRemovable } SignalSpy { id: signalSpyReply signalName: "replied" target: messageMenuSelected } UbuntuTestCase { name: "TextMessageMenu" when: windowShown function init() { signalSpyActivateApp.clear(); signalSpyDismiss.clear(); signalSpyReply.clear(); textMessageReply = ""; messageMenu.replyEnabled = true; messageMenuSelected.selected = false; } function test_title_data() { return [ { title: "title1" }, { title: "title2" }, ]; } function test_title(data) { messageMenu.title = data.title; var title = UtilsJS.findChild(messageMenu, "title"); verify(title, "No title"); compare(title.text, data.title, "Title does not match set title."); } function test_time_data() { return [ { time: "11:09am" }, { time: "4pm" }, ]; } function test_time(data) { messageMenu.time = data.time; var subtitle = UtilsJS.findChild(messageMenu, "subtitle"); verify(subtitle !== undefined, "No subtitle"); compare(subtitle.text, data.time, "Time does not match set time."); } function test_appIcon_data() { return [ { appIcon: Qt.resolvedUrl("../../artwork/avatar.png") }, { appIcon: Qt.resolvedUrl("../../artwork/rhythmbox.png") }, ]; } function test_appIcon(data) { messageMenu.appIcon = data.appIcon; var appIcon = UtilsJS.findChild(messageMenu, "appIcon"); verify(appIcon !== undefined, "No app icon"); compare(appIcon.source, data.appIcon, "App Icon does not match set icon."); } function test_message_data() { return [ { message: "This is a test." }, { message: "Test is also a test." }, ]; } function test_message(data) { messageMenu.message = data.message; var body = UtilsJS.findChild(messageMenu, "body"); verify(body !== undefined, "No body"); compare(body.text, data.message, "Message does not match set message."); } function test_replyButtonText_data() { return [ { buttonText: "Send" }, { buttonText: "reply" }, ]; } function test_replyButtonText(data) { messageMenu.replyButtonText = data.buttonText; var button = UtilsJS.findChild(messageMenu, "sendButton"); verify(button !== undefined, "No send button"); compare(button.text, data.buttonText, "Button text does not match set text."); } function test_activateApp() { var appIcon = UtilsJS.findChild(messageMenuSelected, "appIcon"); mouseClick(appIcon, appIcon.width * 2, appIcon.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyActivateApp.count, 0, "activate app should not have been triggered"); messageMenuSelected.selected = false; mouseClick(appIcon, appIcon.width / 2, appIcon.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyActivateApp.count, 0, "activate app should not have been triggered when not selected"); messageMenuSelected.selected = true; mouseClick(appIcon, appIcon.width / 2, appIcon.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyActivateApp.count > 0, true, "activate app should have been triggered when selected"); } function test_dismiss() { mouseFlick(messageMenuRemovable, messageMenuRemovable.width / 2, messageMenuRemovable.height / 2, messageMenuRemovable.width, messageMenuRemovable.height / 2, true, true, units.gu(1), 10); tryCompareFunction(function() { return signalSpyDismiss.count > 0; }, true); } function test_replyEnabled_data() { return [ { tag: 'disabledNoReply', enabled: false, reply: "", expected: false}, { tag: 'enabledNoReply', enabled: true, reply: "", expected: false}, { tag: 'disabledWithReply', enabled: false, reply: "test", expected: false}, { tag: 'enabledWithReply', enabled: true, reply: "test", expected: true}, ]; } function test_replyEnabled(data) { messageMenuSelected.selected = true; messageMenuSelected.replyEnabled = data.enabled var replyText = UtilsJS.findChild(messageMenuSelected, "replyText"); verify(replyText !== undefined, "Reply text not found"); var sendButton = UtilsJS.findChild(messageMenuSelected, "sendButton"); verify(sendButton !== undefined, "Send button not found"); replyText.text = data.reply; compare(sendButton.enabled, data.expected, "Reply button is not in correct state"); } function test_reply() { messageMenuSelected.selected = true; messageMenuSelected.replyEnabled = true; var replyText = UtilsJS.findChild(messageMenuSelected, "replyText"); verify(replyText !== undefined, "Reply text not found"); replyText.text = "reply1"; var sendButton = UtilsJS.findChild(messageMenuSelected, "sendButton"); verify(sendButton !== undefined, "Send button not found"); mouseClick(sendButton, sendButton.width / 2, sendButton.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyReply.count > 0, true); compare(textMessageReply, "reply1", "Text message did not reply with correct text."); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_UserSessionMenu.qml0000644000015201777760000000446312306026751032143 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height UserSessionMenu { id: userSessionMenu name: i18n.tr("Lola Chang") iconSource: Qt.resolvedUrl("../../artwork/avatar.png") active: true } UserSessionMenu { id: userSessionMenu2 name: i18n.tr("Sponge Bob") iconSource: Qt.resolvedUrl("../../artwork/avatar.png") active: false anchors.top: userSessionMenu.bottom } } } TestCase { name: "UserSessionMenu" when: windowShown function test_name() { userSessionMenu.name = "Test User" compare(userSessionMenu.name, "Test User", "Cannot set name") } function test_active() { var activeIcon = UtilsJS.findChild(userSessionMenu, "activeIcon") compare(activeIcon.visible, true, "Active icon should be visible when active") } function test_inactive() { var activeIcon = UtilsJS.findChild(userSessionMenu2, "activeIcon") compare(activeIcon.visible, false, "Active icon should not be visible when inactive") } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_CalendarMenu.qml0000644000015201777760000000476012306026751031372 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) property var date1: new Date(2012, 2, 10) property var date2: new Date(2013, 5, 10) property var date3: new Date(2014, 6, 10) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height CalendarMenu { id: calendarMenu } } } TestCase { name: "CalendarMenu" when: windowShown property var calendar: UtilsJS.findChild(calendarMenu, "calendar") function test_collapsed() { calendarMenu.collapsed = true compare(calendar.collapsed, true, "Cannot set collapsed") } function test_currentDate() { calendarMenu.currentDate = date2 compare(calendar.currentDate, date2, "Cannot set currendDate") } function test_firstDayOfWeek() { calendarMenu.firstDayOfWeek = 5 compare(calendar.firstDayOfWeek, 5, "Cannot set firstDayOfWeek") } function test_maximumDate() { calendarMenu.maximumDate = date3 compare(calendar.maximumDate, date3, "Cannot set maximumDate") } function test_minimumDate() { calendar.minimumDate = date1 compare(calendar.minimumDate, date1, "Cannot set minimumDate") } function test_selectedDate() { calendar.selectedDate = date2 compare(calendar.selectedDate, date2, "Cannot set selectedDate") } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_PlaybackItemMenu.qml0000644000015201777760000000637712306026751032234 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Nick Dedekind */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height PlaybackItemMenu { id: playbackItem } } } SignalSpy { id: signalSpyNext signalName: "next" target: playbackItem } SignalSpy { id: signalSpyPlay signalName: "play" target: playbackItem } SignalSpy { id: signalSpyPrevious signalName: "previous" target: playbackItem } TestCase { name: "PlaybackItemMenu" when: windowShown function init() { playbackItem.playing = false; playbackItem.canPlay = true; playbackItem.canGoNext = true; playbackItem.canGoPrevious = true; signalSpyNext.clear(); signalSpyPlay.clear(); signalSpyPrevious.clear(); } function test_buttons_data() { return [ {tag: 'next:true', signalSpy: signalSpyNext, objectName: "nextButton", enableProp: "canGoNext", enableValue: true}, {tag: 'next:false', signalSpy: signalSpyNext, objectName: "nextButton", enableProp: "canGoNext", enableValue: false}, {tag: 'play:true', signalSpy: signalSpyPlay, objectName: "playButton", enableProp: "canPlay", enableValue: true}, {tag: 'play:false', signalSpy: signalSpyPlay, objectName: "playButton", enableProp: "canPlay", enableValue: false}, {tag: 'previous:true', signalSpy: signalSpyPrevious, objectName: "previousButton", enableProp: "canGoPrevious", enableValue: true}, {tag: 'previous:false', signalSpy: signalSpyPrevious, objectName: "previousButton", enableProp: "canGoPrevious", enableValue: false}, ]; } function test_buttons(data) { playbackItem[data.enableProp] = data.enableValue; var button = UtilsJS.findChild(playbackItem, data.objectName); mouseClick(button, button.width / 2, button.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(data.signalSpy.count > 0, data.enableValue, data.enableValue ? "signal should be triggered" : "signal should not be triggered"); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_CheckableMenu.qml0000644000015201777760000000505612306026751031521 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Nick Dedekind */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height CheckableMenu { id: checkMenu text: i18n.tr("Check") } } } SignalSpy { id: signalSpyTriggered signalName: "triggered" target: checkMenu } TestCase { name: "CheckableMenu" when: windowShown function init() { checkMenu.checked = false; signalSpyTriggered.clear(); } function test_checkChanged() { var checkbox = UtilsJS.findChild(checkMenu, "checkbox"); verify(checkbox !== undefined); compare(checkbox.checked, false, "Checkbox should initially be unchecked"); checkMenu.checked = true; compare(checkbox.checked, true, "Checkbox should be checked"); } function test_clickCheckBox() { var checkbox = UtilsJS.findChild(checkMenu, "checkbox"); verify(checkbox !== undefined); mouseClick(checkMenu, checkbox.width / 2, checkbox.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyTriggered.count > 0, true, "signal checked not triggered on checkbox click"); } function test_clickCheckMenu() { mouseClick(checkMenu, checkMenu.width / 2, checkMenu.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyTriggered.count > 0, true, "signal checked not triggered on checkMenu click"); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_TimeZoneMenu.qml0000644000015201777760000000366412306026751031415 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height TimeZoneMenu { id: timeZoneMenu city: "San Francisco, USA" time: "10:00am" } TimeZoneMenu { id: timeZoneMenu2 city: "London, UK" time: "6:00pm" anchors.top: timeZoneMenu.bottom } } } TestCase { name: "TimeZoneMenu" when: windowShown function test_city() { timeZoneMenu.city = "London, UK" compare(timeZoneMenu.city, "London, UK", "Cannot set city") } function test_time() { timeZoneMenu.time = "12:00am" var timeLabel = UtilsJS.findChild(timeZoneMenu, "timeLabel") compare(timeLabel.text, "12:00am", "Cannot set time") } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_ProgressBarMenu.qml0000644000015201777760000000440412306026751032105 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height ProgressBarMenu { id: progressBarMenu text: i18n.tr("ProgressBar") } ProgressBarMenu { id: progressBarMenu2 anchors.top: progressBarMenu.bottom } } } TestCase { name: "ProgressBarMenu" when: windowShown function test_indeterminate() { var indeterminate = progressBarMenu.indeterminate progressBarMenu.indeterminate = !indeterminate compare(progressBarMenu.indeterminate, !indeterminate, "Cannot set indeterminate") progressBarMenu.indeterminate = indeterminate } function test_minimumValue() { progressBarMenu.minimumValue = 11 compare(progressBarMenu.minimumValue, 11, "Cannot set minimumValue") } function test_maximumValue() { progressBarMenu.minimumValue = 98 compare(progressBarMenu.minimumValue, 98, "Cannot set maximumValue") } function test_value() { progressBarMenu.value = 36 compare(progressBarMenu.value, 36, "Cannot set value") } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_MediaPlayerMenu.qml0000644000015201777760000000375412306026751032057 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height MediaPlayerMenu { id: mediaPlayerMenu } } } TestCase { name: "MediaPlayerMenu" when: windowShown function test_running() { var player = UtilsJS.findChild(mediaPlayerMenu, "player"); var albumArt = UtilsJS.findChild(mediaPlayerMenu, "albumArt"); var running = mediaPlayerMenu.running compare(player.visible, !running, "player should be not visible when running"); compare(albumArt.visible, running, "albumn art should be visible when running"); running = !running; mediaPlayerMenu.running = running; compare(player.visible, !running, "player should be not visible when running"); compare(albumArt.visible, running, "albumn art should be visible when running"); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_SwitchMenu.qml0000644000015201777760000000530512306026751031116 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Nick Dedekind */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height SwitchMenu { id: switchMenu text: i18n.tr("Switch") } SwitchMenu { id: switchMenu2 text: i18n.tr("Switch") checked: true anchors.top: switchMenu.bottom } } } SignalSpy { id: signalSpyTriggered signalName: "triggered" target: switchMenu } TestCase { name: "SwitchMenu" when: windowShown function init() { switchMenu.checked = false; signalSpyTriggered.clear(); } function test_checkChanged() { var switcher = UtilsJS.findChild(switchMenu, "switcher"); verify(switcher !== undefined); compare(switcher.checked, false, "Checkbox should initially be unchecked"); switchMenu.checked = true; compare(switcher.checked, true, "Checkbox should be checked"); } function test_clickSwitchBox() { var switcher = UtilsJS.findChild(switchMenu, "switcher"); mouseClick(switchMenu, switcher.width / 2, switcher.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyTriggered.count > 0, true, "signal checked not triggered on switcher click"); } function test_clickSwitchMenu() { mouseClick(switchMenu, switchMenu.width / 2, switchMenu.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyTriggered.count > 0, true, "signal checked not triggered on switchMenu click"); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_EventMenu.qml0000644000015201777760000000422612306026751030737 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height EventMenu { id: eventMenu eventColor: "yellow" text: "Lunch with Lola" time: "1:10 PM" } } } SignalSpy { id: signalSpyTriggered signalName: "triggered" target: eventMenu } TestCase { name: "EventMenu" when: windowShown function test_eventColor() { eventMenu.eventColor = "red" compare(eventMenu.eventColor, "#ff0000", "Cannot set color") } function test_name() { eventMenu.text = "Gym" compare(eventMenu.text, "Gym", "Cannot set name") } function test_time() { eventMenu.time = "6:30 PM" compare(eventMenu.time, "6:30 PM", "Cannot set date") } function test_triggered() { mouseClick(eventMenu, eventMenu.width / 2, eventMenu.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyTriggered.count > 0, true, "should have been triggered"); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_SliderMenu.qml0000644000015201777760000001230412306026751031074 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height SliderMenu { id: sliderMenu text: i18n.tr("Slider") } SliderMenu { id: sliderMenu2 minimumValue: 20 maximumValue: 80 value: 20 anchors.top: sliderMenu.bottom minIcon: Qt.resolvedUrl("../../artwork/avatar.png") maxIcon: Qt.resolvedUrl("../../artwork/rhythmbox.png") } } } TestCase { name: "SliderMenu" when: windowShown function init() { sliderMenu.minimumValue = 0; sliderMenu.maximumValue = 100; sliderMenu.value = 0; } function test_minimumValue_data() { return [ { tag: "less", minimum: 20, value: 0, expected: 20 }, { tag: "equal", minimum: 0, value: 0, expected: 0 }, { tag: "greater", minimum: 0, value: 20, expected: 20 }, ]; } function test_minimumValue(data) { sliderMenu.minimumValue = data.minimum; sliderMenu.value = data.value; compare(sliderMenu.value, data.expected, "Minimum value (" + data.minimum + ") not functioning"); } function test_maximumValue_data() { return [ { tag: "less", maximum: 80, value: 100, expected: 80 }, { tag: "equal", maximum: 100, value: 100, expected: 100 }, { tag: "greater", maximum: 100, value: 120, expected: 100 }, ]; } function test_maximumValue(data) { sliderMenu.maximumValue = data.maximum; sliderMenu.value = data.value; compare(sliderMenu.value, data.expected, "Maximum value (" + data.minimum + ") not functioning"); } // simulates dragging the slider to a value function test_setSliderValue() { var slider = UtilsJS.findChild(sliderMenu, "slider"); verify(slider !== undefined); slider.value = 20; compare(sliderMenu.value, 20, "Slider value not updating menu value"); } // simulates dragging the slider to a value function test_setMenuValue() { var slider = UtilsJS.findChild(sliderMenu, "slider"); verify(slider !== undefined); sliderMenu.value = 20; compare(slider.value, 20, "Menu value not updating slider value"); } function test_updateMinimumValue_data() { return [ { tag: "less", originalMinimum: 20, value: 0, newMinimum: 0 }, { tag: "greater", originalMinimum: 0, value: 20, newMinimum: 20 }, ]; } // tests that changing the Minimum value will update the value if originally set lower function test_updateMinimumValue(data) { sliderMenu.minimumValue = data.originalMinimum; sliderMenu.value = data.value; compare(sliderMenu.value, data.originalMinimum > data.value ? sliderMenu.minimumValue : data.value); sliderMenu.minimumValue = data.newMinimum; compare(sliderMenu.value, data.value, "Minimum value (" + data.newMinimum + ") should update the value if originally set lower"); } function test_updateMaximumValue_data() { return [ { tag: "less", originalMaximum: 100, value: 80, newMaximum: 80 }, { tag: "greater", originalMaximum: 80, value: 100, newMaximum: 100 }, ]; } // tests that changing the Maximum value will update the value if originally set higher function test_updateMaximumValue(data) { sliderMenu.maximumValue = data.originalMaximum; sliderMenu.value = data.value; compare(sliderMenu.value, data.originalMaximum < data.value ? sliderMenu.maximumValue : data.value); sliderMenu.maximumValue = data.newMaximum; compare(sliderMenu.value, data.value, "Maximum value (" + data.newMaximum + ") should update the value if originally set higher"); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_SnapDecisionMenu.qml0000644000015201777760000002675512306026751032250 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Nick Dedekind */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Test 0.1 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height SnapDecisionMenu { id: messageMenu removable: false title: "Text Message" time: "11:08am" message: "I am a little teapot" } SnapDecisionMenu { id: messageMenuRemovable removable: true anchors.top: messageMenu.bottom } SnapDecisionMenu { id: messageMenuSelected removable: true selected: true anchors.top: messageMenuRemovable.bottom onReplied: { textMessageReply = value; } } } } property string textMessageReply: "" SignalSpy { id: signalSpyActivateApp signalName: "appActivated" target: messageMenuSelected } SignalSpy { id: signalSpyDismiss signalName: "dismissed" target: messageMenuRemovable } SignalSpy { id: signalSpyActivate signalName: "activated" target: messageMenuSelected } SignalSpy { id: signalSpyReply signalName: "replied" target: messageMenuSelected } UbuntuTestCase { name: "SnapDecisionMenu" when: windowShown function init() { signalSpyActivateApp.clear(); signalSpyDismiss.clear(); signalSpyActivate.clear(); signalSpyReply.clear(); textMessageReply = ""; messageMenu.replyEnabled = true; messageMenuSelected.selected = false; } function test_title_data() { return [ { title: "title1" }, { title: "title2" }, ]; } function test_title(data) { messageMenu.title = data.title; var title = UtilsJS.findChild(messageMenu, "title"); verify(title, "No title"); compare(title.text, data.title, "Title does not match set title."); } function test_time_data() { return [ { time: "11:09am" }, { time: "4pm" }, ]; } function test_time(data) { messageMenu.time = data.time; var body = UtilsJS.findChild(messageMenu, "body"); verify(body !== undefined, "No body"); compare(body.text, data.time, "Time does not match set time."); } function test_appIcon_data() { return [ { appIcon: Qt.resolvedUrl("../../artwork/avatar.png") }, { appIcon: Qt.resolvedUrl("../../artwork/rhythmbox.png") }, ]; } function test_appIcon(data) { messageMenu.appIcon = data.appIcon; var appIcon = UtilsJS.findChild(messageMenu, "appIcon"); verify(appIcon !== undefined, "No app icon"); compare(appIcon.source, data.appIcon, "App Icon does not match set icon."); } function test_message_data() { return [ { message: "This is a test." }, { message: "Test is also a test." }, ]; } function test_message(data) { messageMenu.message = data.message; var subtitle = UtilsJS.findChild(messageMenu, "subtitle"); verify(subtitle !== undefined, "No subtitle"); compare(subtitle.text, data.message, "Message does not match set message."); } function test_replyButtonText_data() { return [ { buttonText: "Send" }, { buttonText: "reply" }, ]; } function test_replyButtonText(data) { messageMenu.replyButtonText = data.buttonText; var button = UtilsJS.findChild(messageMenu, "sendButton"); verify(button !== undefined, "No send button"); compare(button.text, data.buttonText, "Button text does not match set text."); } function test_activateApp() { var appIcon = UtilsJS.findChild(messageMenuSelected, "appIcon"); mouseClick(appIcon, appIcon.width * 2, appIcon.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyActivateApp.count, 0, "activate app should not have been triggered"); messageMenuSelected.selected = false; mouseClick(appIcon, appIcon.width / 2, appIcon.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyActivateApp.count, 0, "activate app should not have been triggered when not selected"); messageMenuSelected.selected = true; mouseClick(appIcon, appIcon.width / 2, appIcon.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyActivateApp.count > 0, true, "activate app should have been triggered when selected"); } function test_dismiss() { mouseFlick(messageMenuRemovable, messageMenuRemovable.width / 2, messageMenuRemovable.height / 2, messageMenuRemovable.width, messageMenuRemovable.height / 2, true, true, units.gu(1), 10); tryCompareFunction(function() { return signalSpyDismiss.count > 0; }, true); } function test_activateEnabled() { messageMenuSelected.selected = true; messageMenuSelected.activateEnabled = false; var actionButton = UtilsJS.findChild(messageMenuSelected, "actionButton"); verify(actionButton !== undefined, "Action button not found"); compare(actionButton.enabled, false, "Action button should not be enabled when activateEnabled=false"); messageMenuSelected.activateEnabled = true compare(actionButton.enabled, true, "Action button should be enabled when activateEnabled=true"); } function test_activate() { messageMenuSelected.selected = true; messageMenuSelected.activateEnabled = true; var actionButton = UtilsJS.findChild(messageMenuSelected, "actionButton"); verify(actionButton !== undefined, "Action button not found"); mouseClick(actionButton, actionButton.width / 2, actionButton.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyActivate.count > 0, true); } function test_replyEnabled_data() { return [ { tag: 'disabledNoReply', enabled: false, reply: "", expected: false}, { tag: 'enabledNoReply', enabled: true, reply: "", expected: false}, { tag: 'disabledWithReply', enabled: false, reply: "test", expected: false}, { tag: 'enabledWithReply', enabled: true, reply: "test", expected: true}, ]; } function test_replyEnabled(data) { messageMenuSelected.selected = true; messageMenuSelected.replyEnabled = data.enabled var replyText = UtilsJS.findChild(messageMenuSelected, "replyText"); verify(replyText !== undefined, "Reply text not found"); replyText.text = data.reply; var messageButton = UtilsJS.findChild(messageMenuSelected, "messageButton"); verify(messageButton !== undefined, "Message button not found"); mouseClick(messageButton, messageButton.width / 2, messageButton.height / 2, Qt.LeftButton, Qt.NoModifier, 300); var sendButton = UtilsJS.findChild(messageMenuSelected, "sendButton"); verify(sendButton !== undefined, "Send button not found"); compare(sendButton.enabled, data.expected, "Reply button is not in correct state"); } function test_reply() { messageMenuSelected.selected = true; messageMenuSelected.replyEnabled = true; var replyText = UtilsJS.findChild(messageMenuSelected, "replyText"); verify(replyText !== undefined, "Reply text not found"); replyText.text = "reply1"; var messageButton = UtilsJS.findChild(messageMenuSelected, "messageButton"); verify(messageButton !== undefined, "Message button not found"); mouseClick(messageButton, messageButton.width / 2, messageButton.height / 2, Qt.LeftButton, Qt.NoModifier, 300); var sendButton = UtilsJS.findChild(messageMenuSelected, "sendButton"); verify(sendButton !== undefined, "Send button not found"); mouseClick(sendButton, sendButton.width / 2, sendButton.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyReply.count > 0, true); compare(textMessageReply, "reply1", "Text message did not reply with correct text."); } function test_reply_with_message_data() { return [ { tag: 'reply1', index: 0, expected: "reply1" }, { tag: 'reply2', index: 1, expected: "reply2" }, { tag: 'reply3', index: 2, expected: "reply3" } ] } function test_reply_with_message(data) { messageMenuSelected.selected = true; messageMenu.replyEnabled = true; messageMenuSelected.replyMessages = [ "reply1", "reply2", "reply3", "reply4" ]; var messageButton = UtilsJS.findChild(messageMenuSelected, "messageButton"); verify(messageButton !== undefined, "Message button not found"); mouseClick(messageButton, messageButton.width / 2, messageButton.height / 2, Qt.LeftButton, Qt.NoModifier, 300); tryCompareFunction(function() { return messageMenuSelected.implicitHeight == messageMenuSelected.expandedHeight; }, true); var replyMessage = UtilsJS.findChild(messageMenuSelected, "replyMessage"+data.index); verify(replyMessage !== undefined, "Reply message not found"); mouseClick(replyMessage, replyMessage.width / 2, replyMessage.height / 2, Qt.LeftButton, Qt.NoModifier, 0); var sendButton = UtilsJS.findChild(messageMenuSelected, "sendButton"); verify(sendButton !== undefined, "Send button not found"); mouseClick(sendButton, sendButton.width / 2, sendButton.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyReply.count > 0, true); compare(textMessageReply, data.expected, "Text message did not reply with correct text."); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_GroupedMessageMenu.qml0000644000015201777760000000524512306026751032572 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Nick Dedekind */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Test 0.1 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height GroupedMessageMenu { id: messageMenu removable: false text: "Group Message 1" count: "3" } GroupedMessageMenu { id: messageMenu2 removable: true anchors.top: messageMenu.bottom text: "Group Message 2" count: "5" } } } SignalSpy { id: signalSpyTriggered signalName: "triggered" target: messageMenu } SignalSpy { id: signalSpyDismiss signalName: "dismissed" target: messageMenu2 } UbuntuTestCase { name: "GropedMessageMenu" when: windowShown function init() { signalSpyTriggered.clear(); signalSpyDismiss.clear(); } function test_triggered() { mouseClick(messageMenu, messageMenu.width / 2, messageMenu.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyTriggered.count > 0, true, "should have been triggered"); } function test_dismiss() { skip("QTBUG-35656"); // TODO - Remove skip once bug has been fixed. https://bugreports.qt-project.org/browse/QTBUG-35656 mouseFlick(messageMenu2, messageMenu2.width / 2, messageMenu2.height / 2, messageMenu2.width, messageMenu2.height / 2, true, true, units.gu(1), 10); tryCompareFunction(function() { return signalSpyDismiss.count > 0; }, true); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_ProgressValueMenu.qml0000644000015201777760000000333112306026751032453 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Nick Dedekind */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height ProgressValueMenu { id: progressMenu text: i18n.tr("Progress Value") iconSource: Qt.resolvedUrl("../../artwork/avatar.png") value: 0 } } } TestCase { name: "ProgressValueMenu" when: windowShown function test_label() { var progress = UtilsJS.findChild(progressMenu, "progress"); verify(progress !== undefined); progressMenu.value = 20; compare(progress.text, "20 %", "Label is not in correct format."); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Menus/tst_AccessPointMenu.qml0000644000015201777760000001114112306026751032063 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Nick Dedekind */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Menus 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Flickable { id: flickable anchors.fill: parent contentWidth: column.width contentHeight: column.height Item { id: column width: flickable.width height: childrenRect.height AccessPointMenu { id: accessPoint text: "AccessPointMenu" } AccessPointMenu { id: accessPoint2 anchors.top: accessPoint.bottom checked: true secure: true adHoc: true signalStrength: 50 text: "AccessPointMenu 2" } } } SignalSpy { id: signalSpyTriggered signalName: "triggered" target: accessPoint } TestCase { name: "AccessPointMenu" when: windowShown function init() { accessPoint.checked = false; accessPoint.secure = false; accessPoint.adHoc = false; accessPoint.signalStrength = 0; signalSpyTriggered.clear(); } function test_activate() { mouseClick(accessPoint, accessPoint.width / 2, accessPoint.height / 2, Qt.LeftButton, Qt.NoModifier, 0); compare(signalSpyTriggered.count > 0, true, "activate signal should have been triggered"); } function test_signalIcon_data() { return [ {tag: '-10', signal:-10, adHoc: false, icon: "nm-signal-00"}, {tag: '-10:adhoc', signal:-10, adHoc: true, icon: "nm-adhoc"}, {tag: '0', signal:0, adHoc: false, icon: "nm-signal-00"}, {tag: '0:adhoc', signal:0, adHoc: true, icon: "nm-adhoc"}, {tag: '25', signal:25, adHoc: false, icon: "nm-signal-25"}, {tag: '25:adhoc', signal:25, adHoc: true, icon: "nm-adhoc"}, {tag: '50', signal:50, adHoc: false, icon: "nm-signal-50"}, {tag: '50:adhoc', signal:50, adHoc: true, icon: "nm-adhoc"}, {tag: '75', signal:75, adHoc: false, icon: "nm-signal-75"}, {tag: '75:adhoc', signal:75, adHoc: true, icon: "nm-adhoc"}, {tag: '100', signal:100, adHoc: false, icon: "nm-signal-100"}, {tag: '100:adhoc', signal:100, adHoc: true, icon: "nm-adhoc"}, {tag: '200', signal:200, adHoc: false, icon: "nm-signal-100"}, {tag: '200:adhoc', signal:200, adHoc: true, icon: "nm-adhoc"}, ]; } function test_signalIcon(data) { accessPoint.signalStrength = data.signal; accessPoint.adHoc = data.adHoc; var icon = UtilsJS.findChild(accessPoint, "iconSignal"); verify(icon !== undefined); compare(icon.name, data.icon, "Incorret icon for strength"); } function test_secure(data) { var icon = UtilsJS.findChild(accessPoint, "iconSecure"); verify(icon !== undefined); accessPoint.secure = true; compare(icon.visible, true, "Secure icon should be visible when access point is secure"); accessPoint.secure = false; compare(icon.visible, false, "Secure icon should not be visible when access point is not secure"); } function test_checkBox(data) { var checkBox = UtilsJS.findChild(accessPoint, "checkBox"); verify(checkBox !== undefined); accessPoint.checked = true; compare(checkBox.checked, true, "Checkbox should be checked when access point is checked"); accessPoint.checked = false; compare(checkBox.checked, false, "Checkbox should not be checked when access point is not checked"); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/CMakeLists.txt0000644000015201777760000000162412306026751027074 0ustar pbusernogroup00000000000000# add_qml_test macro include(QmlTest) set(qmltest_DEFAULT_TARGETS qmluitests) set(qmltest_DEFAULT_NO_ADD_TEST TRUE) set(qmltest_DEFAULT_PROPERTIES "") set(qmltest_DEFAULT_IMPORT_PATHS ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR}/tests/utils/modules ) add_qml_test(Components Calendar) add_qml_test(Menus AccessPointMenu) add_qml_test(Menus ButtonMenu) add_qml_test(Menus CalendarMenu) add_qml_test(Menus CheckableMenu) add_qml_test(Menus EventMenu) add_qml_test(Menus GroupedMessageMenu) add_qml_test(Menus MediaPlayerMenu) add_qml_test(Menus PlaybackItemMenu) add_qml_test(Menus ProgressBarMenu) add_qml_test(Menus ProgressValueMenu) add_qml_test(Menus SectionMenu) add_qml_test(Menus SimpleTextMessageMenu) add_qml_test(Menus SliderMenu) add_qml_test(Menus SnapDecisionMenu) add_qml_test(Menus SwitchMenu) add_qml_test(Menus UserSessionMenu) add_qml_test(Menus TextMessageMenu) add_qml_test(Menus TimeZoneMenu) ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/utils.js0000644000015201777760000000047712306026751026037 0ustar pbusernogroup00000000000000.pragma library function findChild(obj,objectName) { for (var i in obj.children) { var child = obj.children[i]; if (child.objectName === objectName) return child; var subChild = findChild(child,objectName); if (subChild !== undefined) return subChild; } return undefined; } ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Components/0000755000015201777760000000000012306027154026454 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/tests/qmltests/Components/tst_Calendar.qml0000644000015201777760000001214212306026751031574 0ustar pbusernogroup00000000000000/* * Copyright 2013 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by Andrea Cimitan */ import QtQuick 2.0 import QtTest 1.0 import Ubuntu.Components 0.1 import Ubuntu.Settings.Components 0.1 import "../utils.js" as UtilsJS Item { width: units.gu(42) height: units.gu(75) Label { id: label anchors { left: parent.left right: parent.right top: parent.top margins: units.gu(2) } height: units.gu(5) fontSize: "large" text: Qt.formatDate(calendar.currentDate, "MMMM") + " " + calendar.currentDate.getFullYear() } Calendar { id: calendar anchors { left: parent.left right: parent.right top: label.bottom } selectedDate: new Date() } TestCase { name: "Calendar" when: windowShown function init() { calendar.selectedDate = new Date(2013, 4, 10); calendar.maximumDate = undefined; calendar.minimumDate = undefined; } function test_collapsed() { calendar.collapsed = true; compare(calendar.interactive, false, "Calendar should not be interactive"); var collapsedHeight = calendar.height; calendar.collapsed = false; verify(calendar.height > collapsedHeight * 4 && calendar.height < collapsedHeight * 6, "Height did not expand properly"); compare(calendar.interactive, true, "Calendar should be interactive"); } function test_selectedDate_data() { return [ { date: new Date(2010, 4, 10) }, { date: new Date() }, { date: new Date(2020, 10, 31)}, ]; } function test_selectedDate(data) { calendar.selectedDate = data.date; compare(calendar.currentItem.monthStart.getYear(), data.date.getYear(), "Current year does no correspond to set date"); compare(calendar.currentItem.monthStart.getMonth(), data.date.getMonth(), "Current month does no correspond to set date"); } function test_firstDayOfWeek_data() { return [ {tag: 'Thursday', firstDayOfWeek: 5}, {tag: 'Sunday', firstDayOfWeek: 0}, ]; } function test_firstDayOfWeek(data) { calendar.firstDayOfWeek = data.firstDayOfWeek; for (var i = 0; i < (6*7); i++) { var dayColumn = UtilsJS.findChild(calendar, "dayItem" + i); verify(dayColumn); compare(dayColumn.dayStart.getDay(), (data.firstDayOfWeek + i)%7, "Day column does not match expected for firstDayOfWeek"); } } function test_minMaxDate_data() { return [ {tag: "Min=-0", date: new Date(), minDate: new Date(), maxDate: undefined, count: 3}, {tag: "Min=-1", date: new Date(), minDate: new Date().addMonths(-1), maxDate: undefined, count: 4}, {tag: "Min=-22", date: new Date(), minDate: new Date().addMonths(-22), maxDate: undefined, count: 5}, // max out at +-2 {tag: "Max=+0", date: new Date(), minDate: undefined, maxDate: new Date(), count: 3}, {tag: "Max=+1", date: new Date(), minDate: undefined, maxDate: new Date().addMonths(1), count: 4}, {tag: "Max=+22", date: new Date(), minDate: undefined, maxDate: new Date().addMonths(22), count: 5}, // max out at +-2 {tag: "Min=-0,Max=+0", date: new Date(), minDate: new Date(), maxDate: new Date(), count: 1}, {tag: "Min=-1,Max=+1", date: new Date(), minDate: new Date().addMonths(-1), maxDate: new Date().addMonths(1), count: 3}, {tag: "Min=-22,Max=+1", date: new Date(), minDate: new Date().addMonths(-22), maxDate: new Date().addMonths(1), count: 4}, // max out at +-2 {tag: "Min=-1,Max=+22", date: new Date(), minDate: new Date().addMonths(-1), maxDate: new Date().addMonths(22), count: 4}, // max out at +-2 {tag: "Min=-22,Max=+22", date: new Date(), minDate: new Date().addMonths(-22), maxDate: new Date().addMonths(22), count: 5}, // max out at +-2 ]; } function test_minMaxDate(data) { calendar.selectedDate = data.date; calendar.minimumDate = data.minDate; calendar.maximumDate = data.maxDate; compare(calendar.count, data.count, "The number of months should have changed"); } } } ubuntu-settings-components-0.1+14.04.20140306/tests/artwork/0000755000015201777760000000000012306027154024144 5ustar pbusernogroup00000000000000ubuntu-settings-components-0.1+14.04.20140306/tests/artwork/speak-now.jpg0000644000015201777760000025601612306026751026566 0ustar pbusernogroup00000000000000JFIFHH8ExifMM*GFGIPiV Jv h([C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222``! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( VV[{EB718$RnqWg|O[X 6 %xWea Vja&GS\ʵuOh A=k )Q@~3k|UiI,-w 9^Ti3uAcmwzFXgz3=ZL%|VQsdF1z =%%8N8‚~]˩YX( Š)Ҁ |ym|kiv̷kn( 8`{KVi>T;xo-έZpBE 3b7yx)tw[[_ ,6YhOA;cּ|bTQDe&8%pp w?r&6 wh!FK15j<=ep@n/J3۠(?F F<Ԩ6i&eAG*GׄNtWۙ7<Łm02O5}֍aOP?ƏG&ZQ8we4>ǩ+_|AK`Fyn9疯Iq x.%h!5gp劒29#q{V"1{)lQZ9~0^|h fL8K3\XX!Et{-f kLj-ZBNLDS k0i Q5˱Pof_ ˥^I~VC{׭]ǦC|u\DJFQrNq&g2 5|S[O湉w>w(xz+^Ο,Q6y/7v$w&t9UP8$`{ "c(iI^+RZ15Lu'N0-Χ?g85^xΚJ+PB3HNo*R,OM6_W-N NO9._ +tI 0K8$ZRZ5"\-Ռ{lF3+׭.ɀrEcJ"q9'?iҡqRx98#^J<ұD]+۫<(ZV.ÀSںjYjϣMF<ƌ4?#߅R8;G?Su@VrTX^jüD2;n=N}ko/CtوtQʎzN6eiPЮ;.SpI8㊭6Kw5$ܜU71h>W6,0 r@w៨&$ LcH]7~3pxQ8sDU/bj Â^&e 5E=$$h$vcm`X\,/$6Au'r:ڝq}J$X4LWnbb.TuK)]?sڢ;tFG5ҢvjХ\*Rʧ?A\m: *<\<5[2Yb^`+n ѕmx8apl4Ѵd1^_%ǜxS*/CW֜tM̂;],rIrH.ҫt]DUHmgyy 5iL60d! ϡ8R.ShOtBFW[KkEdzfh:fo:E8y"I #ޓsT-ivJQv"Ʋ`#cI)'kN}FFږp.$U/ ʎCdFӀNnx*"ӞmFt8-Bn"I}£19Qºr|Mъ;K;I1DĀ8rDeFzd4W9;.[mkm)Ыdg琟Ԟze,L0ieLx{d}6sygaoh{[,:=0bӻE$$VK  ]i-AS~/ռ&TgQ('=oDB7Ktg8AzeT!wfVyXw~ƙQNNYl5lbBFO@ ǖg0תd_.b}Lњ7R'iWqhA&,xK_\tr-X$ c+Սe;)D,{)]"a}r~\JΚ2$IO/ˉʖLcتݯq(o˲)bpdSԞGN}+3òc _7X hmܕ]qynQNF jܳ4C q} uJ~ͤUV #nH\{}]jz HIc,pEqkb!G N:i.d67҉sNHֽڙ<Đ`lu\<] W+!SmxG/1\Σe𸴶c }=jm XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km Ehttp://ns.adobe.com/xap/1.0/ 00 C     C   " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S(((((((((((((((Zom"p+DhQ^C~~-7% Ԓ0k/+P7CkX@EI.:sJ#Z6mf|MmV-:]2coWh;o-m湞9C3E(`ҹ>ʍeyEy=F0z6wBg8NPҢ3 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (@8h_A*yn٘j ?xvT qWoow_ab,|<\K)~Tz=;z-Lq2șe?*#KҬ ἺԤSkh5W|0~-xt: >wajGq*ɴ^ơ]uQ]<cK!]u3u(spZZ1Qj{g_x2n&B~U.ͅ~ j)2}MG"{3C h$_Ԏ!g3iP\ut۝S/"^VZUJ>/m"=w?Z߷=8I,?c8*WILW>(X >ܤ7WN0+0sU5ZSZLvIsFzN0==wn:%Τii"819'5c8^'Zc^UyӕV:_fl)|->y m\513;7R<ڵl_Fh'RE=*~ Y,,F)PrR8biڝK-"Xnq3_O/Gs1tԑ$BzdƕW,iӀZˍ3ѽ|uK*g2ohAj^Ӽyo3kyrRO^59x[F'85)6ͼLH`};+ѥ}Q!l•jӾ6/)Sn+S {F%؂'ie^kŵFDXRN>lwPTqy|l(\9MVd sKN0 oαFB\i% ;-R[>q@p=ZakKYF1{JM78ߍ^,qFGX q +gyVpykb99eխ/&-a*B }_.]NV7A1@{v9 }Y7?>Dף5kaR3_~ƺ]Gv\sܳ~W: HOGW >"Km×jiӤ_:o(ĩJR= ";iOh ޡ%n'hmt0|9 WMeh.F'=Y)IK;]i"1FF7>0d،2ۗ޳kUx}M-5BQ,qִ>\'|f._,&>cu+98Os䜗1aǰ1m޽Rmmm{iQʧ߾3_= n&FҢ|y"'+8{(\ {hU$&o F8[\4:&׉-h8ZvЧib#cc~lwq}ድ#،xG ^XtfCj|B>b!2Ƹ4'6:jsa*F%~S]oh6^!Vo.{m0c#9֯?'<徱&sZ۲yۮP-QO͒q M7i3A5BOEUDJ>͵b*r_1oM([H v%ff$5o6ԢU1}0>޵KHj =dơ"f3TGs1%Z{ 5cRf0FFF="ObQlYA{g5{2]^$-Mݳٔ? q]ņΉG2vn;tU =lwʜdi5">7iV2;A_dxC ^Լ;tFnR;=|%С.k_"%{w~#'')KA<V?8 c'\^ΜR?Hj7}#QеQfy_u;֎z3u%Fzc޾?|E]$"#_%ovq{eG;ycda#8c$p\ӭ(ۑj3jII?gG񍆃n$T4Ost=n_㼴q${W^SBɷEZ:|8Nw=3zOu|sk밵4>GB1oS4hQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESM:9}}8;OI ]RjV@xHs*zn펕߉~xV'|c,^OQv;H/}W_mO$קԬR\ $)"^rO볗6zb\܃+曨Zg(P>NV՟kzyukRdd!N@ }%x9|9/ J\H.6_3pgwrIf9&?/N\& +uhu>[ [gVmڴPeh?}YOc_B,"ZSZUԠ¹C+<+ X:jZ3+8tDn/_I?~I k01ߚ< Zs6Fgo5WJzq 4x7R5]ꉂa]C*n'W EO?YռW3=+O#{Hc+KY HvD+N;^3}vMKP\Ke2C T$X.y_Mxk0̍FHYЏǯq__wLrS^4P0 Z(((((((((((((((((((yC@XgokUEgkppp$c$ɥYHfwCi#?xOJteСRut/^g h,>5Qx&5gȇO`mMpV3_~>$% XkNy OH=Go½~:C wuf:}=$W ?=gѱ¿Bg?ْ7j:^blG;A_=;Gg?S3|ҎViWUޱooݒ6IxybB7ZLmE w&8 wajzfDcqGҜUKxS޹x{i7_~^¼_mKaaf=m2jk.n10:\_EB]4^eod 92<Z*|ZūJ鶓^`\) |`W :)U8`mE^w)Zq˲նS XªM73FFc7+ 0N7)BvUIv+G{WП j[M_\j:dg8Frqupr׹O_)>hrXGbQG ךxǏd̽-,'#~jBYuvQZᘐ[ּ:hҝaqKI'{gı,n d6dl?~|6>|a{ u1ur+K'*&Ԗc:׏Q$zĸ?4Y,nR1+SsCT0~J]8wscE>?>XJqf5nSUQGBGⷉodUh?e7uO7)ci>3>S~ӿ 죮+˿ggNO6news}3*X}6`qtgޭ_<X9u8C?xck|1|'qVe++~pl}}?:q)iZ}4 wpcO~u(tZ5H+w>|JSYk}wuz$[NxwҮ⾼6?8*@Rkx(܂PbxZz/?s-cDH56Wӵ{-/Ӈη-G*I<^mo0SW_$=$Z',m_H됎0 8?RkI{kk.\(Q6S>z8hy2G_EEmcqӥv2igV 3rQIq1րs@ EPEPLv@AeST2C,YUBI'g nK>a3YjIq;C3ߡT_Œ^:bkvqF%t1PCcjWi:8r A2Q4nH G4')((((((((L3P\lϥUՅW+iQE (4Buun w`C_D}#^5; J-ؑ~]pȃc 8Wꯏ'k捩ͦѩM%S][?_z_Ne|Ui42izsxlGLtҼJ:i}>+G FYVkXYO[[ /ź5k;Cm !;ng`8 A:ckxm[맶gL'|6uB2@ 1#pI_>I;d6lYI'kUjB*\GeXjզ5wľ#Gq{Z[Z2BGד7_]4v=ɮxDT#1מ4gqc ՟-Ԕȋx_k/kJu f=?g/~>4Tx{NpEYo_E޿hfG?[ ^j03DzOuk/s]WyiIkk[]Wwot}H^vqڠ{KAhR/ ^^M+[}*y1ۧjiKg>دNw=Jxښ?$<%2k d6 Wd@=k>[8FC(6SV%E;TE"nW+[76aIzVm.3Eb֌3OTϗiox7E5kmk ^4ѡx?ֿ{:-Vlw#"h֛ ! 1!Mr_UK_:5߅_¶Z_-Vt[EԠu"!~ndtu+OUo# kM[m!ׄ|&ӤM+H-5͂dѓ'8vg~*CAmM%Aw/BG; ZsRJ]^q~VxWoV!*C?|mh -u."1[A fl]e7-C_g $P \ ^iVp)%9 {MN{M+#(J3[3'u]7NmoV_%Kkl!R zh#P`*D'+@vdwШS8% ɫTI!QI]@4 zR@ E&8Z(zPeO1 fKejhXi6I.ߛc#V]"awq5ETxd2:H7C zZ^鎶툦;[zr$sMhpe.])h?/\2 *qz 21Fj$g;S-K븮F2:bU zzƗJDw6m+BG٧fY%q1kb?! (XM i-f((((((c631@ GVlt-:{J (WtDOkY$~#9E|g:}?JKxznMd ' 7*@ M*.#eLD!Eo|_xO]ZR_*C[dlW>0~/A/l%>4hVAM'= Ŭeڄ x$#B:Ny洢X-K/ ];H^@3x8a駵ϯ)ҧz Mc^)յKR/(VrbГߚT:OCL?~;}֋AͭĆe|AZitȭFε?ږHOҾ &[):t10E_jZO}^|G@OO >.X6b>id=RxJ*wJkG-|+ᯁeI#`u/K+f? ]س2;ּp,C⣗LW ׽-[9[$f*M ƵmѺbLZQp+H'qpCUi ]I\T<\yZX2x:XG}E,EHe0jk׍Jrg FP>[;?2-~ KT7f q[&=qu&w\{1"x-߇#:$j7LU>!iדKIlr}Cu!|WTc*ujui =wl #COzdmA^[i5b0`8ֽ]ʑY]e^4zh|cIҭfIۚQsHpAKײyBHF@Ȣ?6 {JC\$x!, e&Hr0U!vFN>ZD!0BFՖbpr:PRx#P #ʝ.at{ P!i;n!O+bMe^n_BMgs1;[oq,Ho- m 8j ~Wz帺΍., 9#ڍrr+SЫ qV^ԙ&&ڗDHEF]&RfSOI^y$c""]G—wZ5{$+00NN+%NM⧔Ow4ni/~?|c{~$:x5h)$?lߊV.清GC!F+L cekN?;[ d=X0TpxiM\l#&A6aǽyVx]vC٘ nZ aj|Տ<#ض%Vf:s_ ~'Ŭ4rdN\r {W[hl[멷{Jqn>j "{LlURq9,xXNWy}>`ySޗIq^J$v97'%\_qȖۜǸ(c<\]=2N6]?|k>LkkpxY#pA*}AYǞp ~'i_ZkrRud z"򚳳? Jt*JUi'f3Ft5 ?+Oj~;OHeCĬ?쪃o}VޭdٗPIߣxG9KRV;j ̣+f,Q=I+qJw>,Rz67c^K8y׷F9tV }=*+``V*c\;Ks:D q~H<)HgYښm9-LAstPqTVMgVm>>g4XJǷOxݞ۞X ve,? ַa>J=X#'#VI09@`mKX8zzR=jU9;)$-q/sHC_EN^l~7 }$Ҽm VS =厪 LWJw1̷> _ |8ޛ>/o%-L">=ΉaeiYr"\rK6YYNt5ek=`&pxX6- ym&ރ|}7OOQ/y",Q=jMDE3pq!iYils@h%-@4H7#5q"GnO%f>if'$gN:cЍO9OK2E;DQf8z_~տwskDvmRc=ImohNe~k\u>fkbR6Ȕaqjp`=E~|]Kj.Fygf{5v)"YXNI{& 6ARpyfl }O^ko,d]۠ہ NkemCfPTI ?+8=1ܛXҚneXn$["] }zYJkSTܣokگKA-R4C4*U0UB\tsEݾiglj[IKKܬSܛIi4W_ٟe[vT`ٝX(=>',|O.yZ<;O@c(-=t5*^꽒ONՎĺ_|?pG;SҌ׼ӭ"4rK oIwb9U`۬_*6S 7c{uhA`ƞnأSrz5sdӌs:F0? ,Jb#'h" F Vo,KZ}3޴"Pi<զ J#w)nόmUKշN[)WxT1=3XU-iՖ\o{ıY>N+/(|gT#'|Ҽ ^&1UV^Βg(iUn1c;5Ҡ#N|3V)$SO(wriBՏ,nRdd`p=EveK.YuN6#/3-\g ע\+~縱20?XQֱéA0˚3&xqyڳF\SOsqY33c7fk -r@ƿ:t/ Es(ď '_t,AcyRto``P:nQGƥ*rd ayBR#gs`~_6l[]HAP0~]ZQ<@H FAiҟIņ[WwRwgRxySjLG}d8?^+m$R1_?CTT>+lc0ZuUW܏X2a4Y(bGirq昪\6I99זi j`[Pʈ3^kL(#֗4P7nQfPێHHe*`iP!qڳ;Ke3) W 0njzU˄Y(qӞ}#Xc) (DqǶ(ЇLl[Hlm"ϗa98QIeh9\$XSzF%q?Ʋaƍ81ܹ,0!v6JMAHbța7ްo$SP *A3 X(K):Ii_j {?PRʹiؾNSрtRYvȄKm4h2 pNWF09y{r&53vcJѳE*@`JĽ^yЀϰg;(sJhV'GK(QOsk(YISԩK×$cUm8d547U .Ba@~ǞW>9Q]T#db:ŸI4nFy,ǟRkӴX* ~NC0;ֶUSKr;,dR.m2qϮ"+H[$mz- $glᕻV2HiDm,pM`|nm '.2x;N {Ԗ6`Mv~Pg<֭"{ Gv9$1ӤX%6HѰԬ;۟^FGZs[QX삸t#ZsrE+gU?JISڴ&6Y%iH`@ 1qԩs J2I }3Dk)+-)_㚂07\fXs\ K#"18R"\sR[yO/[pFw˴qSGnB7Oj9#*uf<ت֮ X1\lzz8txX%qi[٫m B&@,Fq %UAWmhP2δ7.0O8qSmh=8FN7ء$0@PW8xۼ2$6m$DkMv^ uoʓ5|M\=lDh^*rJǃYzE2Jp6.I?(;>Ex.5{{X{zWZa8WWTά}r~]VvqXĩE` YQg2kkoœksT\ڝq&IŽk^3HV޸&Ǿkޮ_^kpnl1fMe;\G$ AS]|=J OOM#fU+'{WGmue[(&.Y!$$N7x8`Pf<jQ!$*׶TcѮ͔s Cp cl+v=dq4'gy*%v\jsW:#_۾Xd2s#R˫^-Etկuk^qHDmm=G#M>8,vwV wsO|z N<"Vg`ƘZqiM+MD(F1c UhTbrȷknQr;ws8}+Dv6rJ᧺]hK*IwW+o ba6y،vy<[M֫Kؠ,+(RLq'}kټ8Ci܉ߢ_{+/ZVJ; d֗dlܝ^LƵ])f:v?/7i0[n?Vu4=Qd#LCIMW~-fw:}[Xyur妏q3ԭZ!>c_П|Q{%16AX!X|ʾ|of;ɮO$ _*BZj;{k"DTLv?0}!1UkT_cgy$Cbrq^} H® /Oy,9+;סxchQF-ǿ\)X Z1=2eOmm%sa$[*m o}*`@Xu'Zڔ)+쾱K٩"2Ozh1A+_E0l=ҵh5)h_#=uZQOSYZ-^bQzkվ~ВKPBGkD}c?WFe x?Z^) :V *7q}zSsƝvrfUISp𧎯|!xg1[. 8?_X|?У[`gj>f[ J={i]J75|@Dz>q48%^~n c¼]_ AnNsʸ'il~ %|6mJK $wQ #χ Vs;V}XCs\{ךMĢk2 Á}ki<'=Y":;WJH8G:%ޭB$.N~xtC,66z7kvHP:Qi]СYqӧu`TSGTY0,HhC1H9+-,cd*׮Zߴ3:c־WGӇ-&tfrB1ZC&9Ak(G&`X *GR`mFx)J=q r<q3 0i~3?1ɪ_aެ[nA>SW#ܒK!+rz=e$V+}EZ)K0ܤp}{՘fe pO45ճǸF)M H<|) , |U m]0 9*-F@cV6#(EƆKKT#%h K?8F1<\5 ;wM2hq'a9¶NI$VWZP y.-nVy'm/4,"H!@Fё+hzT)zSV44>o V֚׈˺rvٶ584n?g=H[}o&h0N3*,6EvhJ])ovpvqi' [[i.V@HPTW3jg/- 5&q{N z,!(?}`i;IљHee8 5d?92;sԚ8Uh 22gnf}Mȷi NHoZ*Ty{Vj݈ª dSṚB@r364Gka dS!=Mjm)(?-p>xL9tⱓf5,hJeps#*inL:At8⤎0=Ob{G$(K;_ǽXc'u!D{%P O\e]\ߊo9`I,{Z:\l2/b+^ˀ)} Nq?F\F:zV?vi6?:;%s5Ì.==}]> Ӓ5f׋)W,5晦/^ΚP"P |:.}=k恎q椖"8 k|D"evkN\uqr:gYdtp(i`NkM&^W?H6G3sכաʽG"a z;ƟZٚtW+;f?V962;7}kMZo+T$3?$55-OTp-c?۩̑/5嚧i3z affE<}}>&:Dc|6 X-oc"5(fq{ (V맡fFwb$it:9һ>,[h~r(UNpqYv@~ui5\%~)ʜGk] LOe+z+>xaāNUCm޹mrKTb]*쇯_zlg$oV7+&c')$Yhkh H?t:=ll J1ytOj6H^@t-AtN- y;O B?gu\TҴʰJݬ2|`p;wF|sݨdԶ~J(8 rqֽCgO|\Og4E7>"ȶhg~A 9 V0sr NؖOmZw/=+φp2s˵+ogh?f d_Մ%H&\l45Lj #ҤEZ+c#VPPNxǡšۋ&eԢ#e B7H`>qq!8J,a؟7<].NVipM/>B$u+hASԔMZ7tz\zHp+i$1 rIWٿ'df | -ݏ!iR{gҸ/5ߋ8iMddutǓ *H>Z=Gj4cAoLj]eHы1ՍIW#ZKW. !=b~wvwD(w9bNN Y̒UUqz?jߊW>9hJ-4%GhGs,)=[c1QMrFSӎbӍCtۑ)`zc^=֥p%If$9!TmQ>[OɔK:>]Tx4+3L@?ơHϠQM&/DM`jF!bG@p*hЮ]85kL,fv`Cɵ 36#Toi"Lܜ[FR8U[nTtGn>Jb~ĿA +ҋB&ՙkx'V# $ף7խ\-Im=@ 60c]&c۟#)O tT*#su,+S(tM3, Rȫ}`{Obγ'0^kٝ$~>i7f]`Lw閌)?Wx7_| Sy*]C!k{H*;O(JPjy%JBWyt~>1L?9?jX%^Xh17 n3JR.n#foxшytǕK$r`UAJs@d%vUT2ON:k[±%VVy~[q(ILR9^Fhm~OmVxr+ʪIyF_~22F뎵S|˘C/~ޟkM-D3lۦgel235b$".89^ ӻ=L47'IDcbOzg!&Jc85X3׾f -Ԝ& (K%<`zWQduP)6 ,%{U9=A;Ud$vEF7,7Dxڽj4\:DuO^gq\\ `={_WV FEg-?szoSG Qgj[8B*8U/gHQ~rN{ v#$~ҼYn` /5^cⱍӽmbhvZ/y$ɸ8_ʹwV؝nqϖ:׋_x^.s+?wTY'Y6}6[;Sgtha0u^"{|!I놛UԦ%V>֚DwLV-gn"HG_YjHXE~=u2nec!Z X+x[Cdܮ;dX<><ϻ#2ﭑf; [r6s}h8--$/lywjJ)rcrr2a}аUnKߝ$3ڨE)pvڙ;Y|pj.Z]27(dqMLcY? :.-SMEGOΒwzjWjVwQI#鿺I#zFGo<QGȧԞOsq2]ۭ"t?LKܓ0|WTVz}ZcnQi*[^m?jڣKmyt$"7=\&r9㞵_%ӿFޕ‚g$4?;Ga F#`sww8il0^N)L1m/՝LJ,maҥ~m8yTFIPV='?|F~Ӵiwr$rE2>U% B2Y۶H*]ry"؆.3®sM}:}O}.MF37sG=2GZQPPZ+9wKCax_~U $b:w\uoKg$幓U1$sA<=|?'ǗIؑ |z-u L:ˏ ?+ń\H9<.F5'Rnad<`A$zVF5%{<8* 7y>Dn|ߣ]l,2kDʒ.5E"Xb@C(ʓ񩠐09N(gtv? >#?!i>)CH֎Rv,0ھF5hn6nH<y?,[0'+A?c?>'Enj׮|'3/^# 7p)P9f#O6.N~'`8yI+^} π߲Tw>/_3'-?OL>6~vzBtkYoItꑞ<|M#9/:X.mZ&i&%?0[G=+sYjzdWp_su!K#j[ˏBwn^u |1k8Mս6b(=Ձ>ּ#^٩kes+8+LryCn+f3ˢR[)J&!dT3YXTMs۵˷ O&QV=6;$c #7ǽl÷u65 ;W-<s޼OZI,31WZ+w$hPMNUɟBp~R+xa9U=qYԭ#viB"xLڃ *{z{{OjzL)u!`O#gu^ ,[گb1ӹͷI[~YމjoQOOWJQsv[&ѮZǞGB0$gEP;T"F1iX_9OoZus(Ŝ&qGvY/= UW=m#p[Wo7+,-ط +_7{K &e{m8R<$'3zկ(?f{-^;⳰wt`ZnP]q$rE|}cv<[֮mQ{81=~v_mQ:Ug^tOe=5GC5|7JEitY=6¨};/䳴+8/d',*KO<<_mjmqt$uk{ma{ 4XfsJSlShӴ+7nS׵ˍPam,"Xٚ(x%yMbV/l@m v䑅8ӊ޺Jx#C|Jt;ڣu |Jms֮Uk0TeMԺoj58|7w7&NQ( WhNql[$,JJ.W/ji-`2Aa"ZR["vH c\{9U4ko4yn6XZ {==q2?t0esVd+0>*S[qInͻc?\s-2̐DQכG^œyu>?t+g6ϋ vۂdߕ 7_CaKbx6I)խۯB~"|cYd[xWtyȍ\o3ĶD, :: yC?:EtxnZOYUZ#慸u2b1ޞ2 ~͂ 9+WC? __kFkWP˂<12W8Bd}?~o~8]:B._NOjk㾛XC[%:xOIↅ9/ά&?_&]Gxi=GZ/"/8G޳o͎3՘љCr+sSqwu6H=@ LlpqWD #~}aWTٕ\RO ;{̖±Rr:`m"28զť\/\vħw?J #$Ξ%!%#AITykEdV|$i0;g9*!-ǰ=k_ ?ÿ 4O~e+δ-_sv:VID4sck U{gOwnU[3rZ{+*)uiTAxy7iU 3M;~lx R5du΁/|Vtq˻#kIH|3;M.ok#99Z+QXy3YR b{/&-UX\l0RʖÃ^OZk% ghcF<&vOJzGSsR#{UV DY֛D<ƻ} 7၍j:Bzy? l|!?m$~BRlws/Ԩ@䖗yz-cv)Ԟjڝoڠ/汵4[n-v[FB:ȵ5iKL M;ʹl<(yWv/#sC[Ԛv濂HHT1G'`@x"-9eźD D+}?!\l[K]I;=❨^̖Gl%wqtϡy vo03[8.ǓƷuX/`{W/=qMCo];DV41x{#_9KTŬBc9 g=+Sm|#>g.cn Il eceDI'yR!;b3٪ o1;~8C7ο]Ⱥ]3>݂ %$@?tzq邺mmq9BMC15KHUŋ\;-]/#Nv\av 8[mXSNF{Xr֧!ba ۣlr89|R/vZzoE 6Bȑ<(X׫qrkٿciUn=+"OW͞2Ҁ{ lh?Ji>i-Ckk73?u7Q$N]\XrA=zT`cǚK]Mj8i*^^k7S[݋K[VHeAq/lM]ژ@=+'ox<#  }{|`XuI;AČqAҿ5 {{,0d\n͌g|WݥU%ON~+F+)jf`ĖuE Qo1iŸ|i Gr}ON0Ԕ_ZfsxDZGa? [k !9rïmw>wP XECӭ%m;gf5V^ڧ+W/4saQҢ%u\˨\}}t^M#Ns$rYI'u6 a³XZ|##7FT:bz}LŤEFk#c%h9S˱r8x\Tstw0ϯU EK6Njz gO 'bUo؛60d0dz1 K)H8 92OLB*1^uyؼwR+_g&Fn_P.A\_ j[W^=FkGbHᶅg Q8 ⾨x>Ou3jN7FG2#eZ-$CxuYyrXzcY|I+e7aB8Hu$ӗ~f2^Ū_]pH(60cq}OsX+R?=OkMHll$;b2&7 K'z׽nxw*ҸDQܒkk^%?L50{ W5Mm-Í29/,|7a,8$S>|mFTMӧ:?Y=u(3?\/BI;'^s{iwR4Kp+KH_?R{qlFwB힧Ҽ5vfxG*=N:WiES˳|3kPkG11/"%~a竁S Ymb`D~/ |w|? A7zfز2IzHZ0o}Uç{tٯGúݽZ.-sZXr:SRcIg{H$+Yux7_>$kʱ}G5Թ<,*SDw'ӵ8]2Ҝzf譵if <W[&鼹/דu*1ab+>XE{٥cRQU?:SP2O]ޏx#inQ wAÊԒ,9*z av8D5y\ÞDAKL+@Q+Pr힕 OQ[j RN۾\OҚWSǖ-MwZV66`|q\^}P=0;U?×(|zu~-Zi"@2XݸvqUJK(˦ `bNZZk2Jo,pz |lK)$z.+$Ha 8':~[#ȌIhq!|ԉϗ.xB?Ωimndsw?LOj<'i=9`zx.<=D'*yQD-͆Cxu>UGԎ,SG7/ '^sDEn~vǥ` <'l:jY"bZǨ=F6KHcq+Aqswm#=B>u]Jm-4=h DQU%?1$ӧ|ri f̸iA9+ڧ# =Nkɖ:v!87fw{0C|et|5L a>[7s!x573Ǻܟ /|xoH#epXb[sj ~ƚ~o!3\ī֡1F$w> |?Ǐ\ kdv^Y_'V8){YliSx/qhox:}4/{XB`E@Tu8Ҿ_?#W47{:b\VtRક Gƺ?>=|: Jt\Ы=cH!dU6ĸs/t?^2kO5O,9Iwvy ;U:gV>~Z1'ӭ>&Qm%nzۥU爴2e2?ǂHMu8Han67 ORm:7$`ag5몊\/N_&rWVa&SṮ-l*gWOes'ja1ta0U-WږO-&$"93|,;/4_O w}K6To *~zw9d7l&VFD\zzW1O4W:$ڈVJbprDe_#5j-CQҵKm2D2:Z?[A¥|=s-B2BN__<9 >-M""S)8Ӎjc$rk~cVxCK"ߋ$xCDio9p#HGa15OxT}WYԮu+f濘'0+M8hSH ORI\uĞZZiaH]{\T{nlx*toY==fx]];D yxJuܜ˩ݼ[" +6>h_p0Iv;~W2|Yx# V0Nud8[LlՔ͈đHQw318ԓ_›v/[`DYaA}X rM#>?|QW]*2Qxu_zݽίĚ姅ṻy_}˥Kj7!_!<2z=iƩs2e/`泷I .׃ IjrԊ#XJW}kJؕBqu# 8V@r8ZTj( '7O3ƠǠ8.#R˧DsOŚнsB؏[2=j2Y+?7Ҽ =/cqTXxst7xW\T]8i`T8kcٿ6k3u'a$!+ׇZ 2?=Q?8|Z׈m{npDy݁eA5w?gߍRi|07,.=v?Ln{]J!pLp _:o(Mc|ѰlL—sOc^ 8ayޯ6ZyJk:߃P֧1/gݜ`WQolבTE-şWW7+WTl2^_[:8jQC)ճ<~{Zى.O'Ir8_I~ܿ ~|+b|Km"H2FO11`p cM>Y-$7#_:Ui)EV~ѷ .T#<xlc1܀8 $5Ċ|Oq?h;Qu8t-L+]a@$I$U*EͽaS\U*y= }5c/gOtim!`:^57+?{~5:ĭSUs ;YG |Oo i}'K9.p^Lm TYu0_?/c, $ _u3!soOQœ]< 7_* )$(G޷W9_z_mt% 6? BFkivAgs6uaqUv׊EH|НQ:p@;檽S̜+6גζi %[  yϹ_r:gm7wkM~]X<+ᅎFLa,tǏG|;.~,d#*kgaT|kleGVRy/p8च\/MnύCk~Ԛ(jؚR%Ghr3 =+/7aSIo|`gA!s<_~'IqG||eӢiRFؔ;Y>3]o'kWW _I$."QdV$ϣ7^Iw䍔.]'E?nuJ[]k㗌QnO!b{qZ>>8MKPյ!kM{.qK|1p1T~&|V2|I|Y{ۗe#s9.y$MTke-#S\(X| s]:/At' 4g9( 8S՘hN 6n뫋kmO>h.c." oB{ӓkӴʹlެT3]qPL=_m77ePl|j9QwP2ACGAՠeM\)~c 3}wdHwvRՄ!.!{yeW`2=Ve{F&&Qwv[鷚\e,GpF Q.5UK'{Y$#…YS9 @bIqvwc'5,oC҉n.;/Pg?thq#qÞ0KgxMCvq[0P˒Îje^;Q-״+l*JTn'GU9?h럎5tYiуDj^JA W?i%ܩw^Z#o\rTԯ[Cf y[cHÖea?A%eƃ||Qo$_d(Eҽ-?k^=Ě i* YI95_hZO+8x-/뻿ey/Ԟ5ZFLӱڰ6;?>~>*_ti|ۉ. u2 0zR20;ԟ-]iZ/ղ48z⺿ڿF /eT3pé=d=NqNIPz^J*Y~JoxFm[nոP,v *+W5s7%rj0|gUXˀ}qWI[c N9/^hZ`&8P3P:%ն|:jEF+oԇ}n*=*;b2 5$NvϹ_><EL,,ؾ=I?b?hK(՜4Uv\wvzI#T!PgiSmkWYu'/5Z֒iƪvmA|4 IwjY.^wp7)x&Pb7c*xhJI/6rH6daZvV)J >^kfU=qɃֱ|C M5˯,v}[Whґu9YV%ģb3JO,FqZF#өV`3)vnҽS5_s^}7Mur690D[团z+<{,!04hK;9g <9RVrL,wʗ2!>sNPM:g$a:9wVHٖ+SRrzq˨H䕗g+F%Mut,OR{U,L{lUG ֟PVXpO$+ٛi`5xZ&d /Wh#$wo3\sr$.1?`df~0Iz`sU$GeMcYKP}GW`NhpTpER6A'T0#x@ F㊦_͜H?JrB8Y;,+,)7L{v,xCN'4 o%`dielFcQWwH/7_z|);M>,ma-QC# Xf#yb}/[l|QvxL/^=>3i^ /H˲U H<ŗ+N̒DqosO=w~u;瑯 {mc'+*'J?%ƻ{%#qmHqMzkR9OxJwv>ez# HkF\UK2J)-Ț@yt~xc<[  yH-B-,_̝ZRTR $~Tw8jTM[>g]cMV}kST2~Xc'2Ltݹ~оx.{SxlV H٤ &>wsr9=i\3G\JG5 v;~~ο mWE(9+={Iпji!Q"% ;_5<ڧ/#\b8Wuψ.|C75fK#9f>g_?Jwɵj ȷ/ݝDEX+VVQ4B.)?E0I?G$I/+MS :X o.vVcR2@Q | I3x p֮cY[bS, ,F1)!'S-/ s>cnul\MRf}#HgZ%ȝ}ߴěM̬R$ȂrDq/e'$M~i/w֯?{XlWN_T+jz2[?Jp#6f|n xb|fXcUBcf\}+IIhqլ(lk[׷Һ{G]TۣDG> aw46G` ,I>xC:aiݳVr|ylf61dn!eGvuźj׿<koh; HJ1 v8˫{d}xO ;y%דEuHdd2se?i3+ߐc~~~zkۛZIosijM.b32{'~k?;/\u m'6_js8!hP1rD}e^ⷚvqVnS~xՊ|>=oD񞩈8ҡ 60/Fi>d'ߍ>?h_X[Fb GNĎ ?r}*R~&A]SU}FGnpZHl89ڸ-#Y~:+Sr%  G1_Iy~䏢aJfn ivxe-?F:~5ǠVX#"â$@uф%=TbeWkNSHY%]XL*яp957u˿ ZNZٟ}"; / կ;p;bV9'Ҹ cCľUz"U@vQWӓpGNtb=5^˷[چe'|3>8^Y :"vV'ȝ~}Ib&x䈀Xz? KB>|! BO ©Ǟ W<*:}>2o]/_C>|Cu=h1sYUX`'8Lnf9p}3kw6:{C`'u F]IO⍖KE Z\=܀,3_)Ϧ]^}At8mZZL#,JѠȘ%YPWJq26[/51X_ŸO ٳTӴOƚ2|7^6 -O-Wɚ\8I"h,9^=u5C ^M`mB(`==ů@[ɧ0̈Ȩy'3rЦqoytPnq g|wak56ݖTPqklO5)""MB <;zOi?OM \ŪR/b$m7{"ry=\:qpnpiS??s?ѧ@41gTX[""75Z^=CV]^%wYdߴ8xvM};jSuK&;'.XOW%Ri/C P|듌w IRJ;wS\ғVWV{gԮ]n<3_\|O6}:dO$앾u9~.f/vr<XS'ap1S冭{tOYkVׂݬ3FFr: دm]h4=4[ |23@_ |/@IRu; d%5ዤ:ߋ o-1砈`t-ʍGXyJ( u /5~x\YI\IʜO!.@۽kǫWT/WnQ7쀶 \3 ̆ȍTKNO-NqƧz|vyutܠ 1I6g.צ |wyywW̷׷R4\NŞGbYNk={◍t sNU򭠁7f/Vc€Mv(:|ܿ~1kcg{k?O $A+M_jѶۀ#||1? _`]h^-_~߳^+$Qj%.|kFvY͙'<#HUS1y__>~+42aGv!x]ʖb;;}ԴqjI#گEXw"Ó\ aҖ(G;r2+u/[aFr4 4qp;?T LukS/JZB Hߞs|Dko[Hкmms%ޤ=T = 4!J wҵxKuo!3~%dCƾ/[ͧ~?xIkCǣ*oaf_ᾡxUǝZ"^hi1YQz(9f?/toƚwjӴ7!V噏Rk\Q!+?H?׀~7x|]$C$J<$?~||]l&}|A[,>bdҹԑ]wBxDu;N^eD4˩#&|c`k!$m𖱥%(sXi27t9&?1U |Լg+JNn] WiZ/ٽƏOMű.4n9 g |{۫ᧃ5믉g_KV.`c̋C4r:!zO\/,$5X8 J,"CI~}kdI];Si3a7TVSgi.hp{Ʈ ?Ӟ.o.eay89$IfCjJŝҽ[¾r3"DC1CVx.{z./~"kCܲ 21kſfڹ>|PĈNos5t$|@h^YFq{c2Lj.piq}|5xzŚeƞ}F:dgںhRYMOUJwT ,xWl"B|qͺK95ʿZa_F a/j>^W:-B/G|Ch,dm*c FrךgI.vGb}e~5u:4$,NN^[qo~HaGF8ɮ^'gνm[0Xobsp1|$CM?o/Esب~N\ſ" Q|C? o%0$R\Y%7(=mv=ߵ?’x7V +?C.繸黻|B'uzE^ /lZx3Cy6vC,IFA^k,|#]?(&uusk)ai||My%?gVzbxƗm,!0s#?=wYo}V^Sղ׏rK\u__>7Kxv>m4V0_ " V,X$#BRweg k5 +_jW|r~Y<)!Mm8q I9,:8R\)F |_]ӡ)=u>]㯌^Is?7 wƽ0 _8f{ 'n=GB̋^l{HFGN^/3 ;jfbNr*3ؚ"͹1=1KT[=/MB? K c ^Lfu8\b=/_zH?xQLRL oa.kx}wgڙؖVf$\w\x^vdIY#F7_i0{׫xſ?d#hw)VeۮL*ݏVbyohlTД=Yc)KD%2MnxF]'fS]=đGb+ZG_nB@lϕO>E;#ׅxR_ Z\Ki5hfVuv;'4+3^h;I~[͕.*TѷFsV D{3==kF\hW)a}U"_]WffhPG+^ ͽ+ƣ ?JۺWW$Xd +эI+}NE$U}0@۹洬m;hTf[Z>s(h mQ'Tp>mbWZȷb Z}/@=j1w Rf22:5Zj3_G Fcv2ָQvOmG^wHQ,sBC:clI-#TKfn. y, O$1FmoG2CGR UnWx^ m4I4BcmvU%(tww3x?G,_M/ _SVQA`9 I'"w%..d|KkkwXrI8PG?JR⮴8FSVGSVĿ2AMwۢ H0 =;)ePE_zд;f`wb"9bؿ^ o"Lp&n|B7uY?d~`x55L7E].}-3J9M(Z ,ZZ|QJ:._+m{o_ك埇5/|Cp}:/ H"_os5GW[D}@*As>-~-Oχ Mqm\5B9U* Ey.hֱnʣq'ք+c8:J%{.\yS..do]䑸$7x3WWNeT3^= Uu$Q 'H6M+0 6{ HX'dByJӱSxnmI'W$~:W1tH휙6+|+FkKc*Y&B$Pϳ5e3xĭ4・۞3~+(AS՟!Iҁ|7<fW |Q\r~̪,~o ~\51hlP"TVfYX5)<811'ߚvHuVW#xϡE{x0 ;5 ZI+O4ZQ}cPHrR!;Ttz=tr,c%?.u.KW7(YmߢGqdJy6C2^/c|O[;=gN I*;m|7'5'G6yJڳ`,zw|741&U ?s#>_cybp)bt>NLkOٷC%x7ˬވ㲴l~@EQIO^u,6$<~ ҈rX~N^IulYJ\߭yZC3-_6y I&I__oG.S|fW&=3=/< n+=#Hd^p}3B.9u!:}~Vsʟ^_ywji:plܻ A zU=vGuJt0]eWxίE=TGbI>OJ~~!3GKnOp{|_R?!*_kڅd/L3Vy`zWϿj?4W]SzhmA猕#KԪ֚Iwl+U/eݽ~'瀼mC*,h7oo$v0b:̿#GbΑح$'rJҾ;_oZ[ xWwOBdνSG1KiH,K=OSwo+"{#_k^4htM*6\BȤe9|B'X΍<~oF#8mO]WE)_ {%DB~5߳(8|Ew*^^zl yuZ0Z~J>W+<7785[f~7(r r+5⿏ãگXv s7zr:Woum|qèGEyggc̗ $o] ISl#pvf` px-v.c &r7$)~6Z׉ԧxأlH嗂I{*p>l~&}r7fhcl 6Y<߶] |n)to?}lF?W2_4j28}0u?|%/$Mh\i1On$Msn=fEa܉-W".۔|*MeP-ɍN]OFԊØQXm tV-eb{ks- Gy֊VgN +vL 5Yj2;UAAUnh@g+" +:`;cJt~uIƳam'7V( sH9?im5Y4x <n%m1^y q \nH 1eO>~_NeXpg0P&9ZԕGy{BVc)MXk9/VZCfHP|#~2xMoRȾՠR@w~_ ~_ſϫÚ,';*)p|t+?n\\77E\ig$|<(#p'=pkS~O~>tǼ/՛ˆ72f NH\^6<z[ZRUUF22+_?h>$ mX`koYN:֯O~Xr>*!(b@9˶}ׇ_~߱wjO{F䃰`u5O -tΫghZn:BF_0XOtSZwKj=e/O_"qyះխE1- v#hb6GZSmzΣZ3^j,ŏ g< M[S'v5H󓱳g#Uǖ3ImuCSXo\2,U9 1#} ZfJY.n\󦿩xt~ j:F<iR^)i/ |Nzs_T?4{߇ x{P_=αwʐLwpiE+Z5\v:aե=/mR)~9E[|MJM8^\0-yKxVH!I\,) `cy>$"̰o+1 󎦮cQxK{ \M:pȪ H+Vх8ѢJ_= >9|WjZ͞8y` ouXEkopڵ#8pgB8FvNY~acbǗS\1T|M#jW՟蚗1SPASke⛱e>F{ٳMmm_T"H}7_H4Mk04w :u&aN3MJɵ??-|=u#JH^?EsKF:ׁ_cjI> Fe;g'{Ƿk:խ|7i1oS7RݎjiNkx>0xPӭ| Ť{fE9\~_-٣fb o95\dMFܐ drqZm?>!xԭu$| ժNvS%hSZ=WIE|ZIe,l%0`Cl vυenP% Wh~%O:x7O9"#^d*:7d<3O7 vW}*Ng;CC>?Q$-0WkJrʹ7e'Z FY{WNOBQIu<,kr Ts7rKe7/||UZ>uQ-ܜGov>V8z2Z\J>SF j=:{jo 3rO}vYlG+%wz^]kQ]Ϋtud#aEy.pYp kc_`׈9c!T9'(Bֵ<5fb"/_jz%[y# O#O|qŃ.|@n#wJ$<-h(%&\D.mrY"'W30{LœkQⵏ]UƯ#`O8I}b2}CP؈:"q>à |]41rیTG"|Alj]-}=ULPVU%Vt/5+ +D76@8qz#u)m_CϤm[}\_sb #A?uxI4m.r:$sڽ(5gX4'IYI[s|>vEyFuMC:y vӧӍF*jާ|P# ,6`Z'DL\X̛k鈿a[.=GhrT@X&.C^b "󚺣A(輙1E(I?>] l4; 4xNۗlnn+ΒoOd_2,vģlZ=; evGg ļOEnGhh*@ I$sףBpZR&Fy[oVϛiiښ@dhb:YPQ̶"D9֭ y*&̽[̄eT.㑁һ-%\ceh$I*6[a1:rAgsqwQ9z0-HL.Irp:zWG?h/ٟwԼ>-m/!W[MdEt!©+"s};I .YX!#!1G9{q홖RpbyGrsX9?G,d?خF όll!y`H#S|1iM{$Ѯﯮ#N! 3[].%JtoKaЌb99?Z2 FA$y~N$x`U6`9&TyuiRioK7/ZNG'>- Pw;.bXb;yS:,'BF6{{W;Xگ٭a[!E Q' l9;i:.AFF',{(@pS|p@ziv<{ V}sQ6W!+.6dye;njηO[i%ݺf nQĪdo42$3_O|x&)qG{ȵK-`_{H)/a"Yt6GK{$koncXF,p2z3 z'#R:rўmce8//PB[Xd|bo-jsj2*9ey8;t^h'u;mn쬥[n2윈RxT=1[EjNttouku8iJj9N,0'ʺ/&~;xO? 2Wl2+_zҾvgW"IƩ)ĥ(NLPzzWۿW}+_c"4v%S۽ 1¾Y^㳒IUD!|Bz G$tM)NRrFYv\ 'tއ-g\&#yH@E~rH8?bY.E(ʠEO zWYXwsco5 y)'x^ៃZֵkg:--p] @p:U\zGS/Wݏ!ᵺ]c6A*P1  PGwuBT9UR$Wg;3i'bN[͙hpNy\ Y$gvÌ'=O鉎NssO7a74ic9s^v.BTUGntN';/# &5ݏp"؉Dfм/`&n3;I8وWO ЍIbrkKq%ݥL'rF ?m{ҋ-F=[?Wƨ{*0V~6xըJ2I$[w&@ߏci$2GU ku+xHJ޷Y\p3rJrz2O%O"^d^7׸^߳Əeyt,o?M^/y 1,+~0\>u ?6 Q~wqO7rce$_=*_zY{a:΄nv# kZK3 ?ʠ X]jp[Ee"Ssý`SNJkFSҥ-t} kZw~!f}=SHȲ(8E|t;bB_漇w 3R6㹥TTl+HhR潜 Nuc4z.[׮>bdz/jT|5[rz($F61ϵv^oO_na[=H[k+#w8@vFO)xoY#̉Au>0;t:P xs%)ڼWb<ҫuxGޛ^zZSI۹5 N4z4_[^_pZ ga!88Ϡ/_ǯRxYX4J *23 sҼ"KG Es2y nHW}NU%.汿n+]e׃%Srl;)2jZ(5-޷W^:֗]7}_? $Q-Ι2O źg澨/4}GKNo< %QB8<uʭ]oھ% S;i:9{uq}^:0ܴ ]"F@#x=טO& lb)3nYt +bc/YR@#7<2秭tAODmV:i-ⷎ3!+2q}s)6}MW(xU?bgH.y{NE|3ρ:{vV{$P7Ҵ ^2sÓuj#N5]CPlZyp"'}GD/59r>ykfPU()wGܖfYbB.L`+֠ƫ-_P&H4<9qׅhzcCŵ=;WiKh?02'Fxvgxsuo˛]ٝ5; Z[Tev>Ƨk$ %uzv涼MyKԦ#ݰ㞼}xqfeJt\Swv//ڎZ(C$Wd=~R<Aΰ4AJ|c>E0mΰ4[[Ygxs!9.UHIyOi+io=͹Bcn<>2c)Uow5橪> x2:cTqWZvxL }7M}=lnm"&I1Q%r\W>ڟn}?RJt9*9jA8"`!ZKu w"(18Uƺ!4;%*宯"Mzx55[=0,odUR}T6pH95;O56~B#C+m,T.H=r5>UP^&s-bȼnצk x uS۝SdG=5nҸ@Hl䖇,36n||Hm5ɏZBO]׋ML&1/O` \j>|Nyu&KY>xR+ywnfŗdr#xbםIEPvf򢑉+9\8/y8vYhw٦|W%6"Y ukkgD e|O#7n`ZT[7ԹCUW~| ૨oWWiag ?sz>x{:Noc1=**WyZ巒v~kTJR4aP(bkAxV&Bsל{AU =p2h.2yvM2q!7~5uO=}6\IUP`r"~9\|,ՍGF`q(/30{3K.n6wq)Iy%؍2M OBno%`V_ otOx>O!fH,6·$%dP<WS]-4at |sq5[ %'ũBKxlGz2jw"OjjӷK^sJH/Y%{VUܷ}?EH-gB?=kf-3F 'nleȗxg3N A.z#O[k˼̠Q/ZP1y 7!{ucQ7O״׊TypBq{/KxjJz5,ظ!5ZU~jKUucЍUM&}O˩zLH5k]>u{}" )ܜ_K|g׆ ӵm)4HV+lgqqEx/-*Af=" dS )9-dVFn++VWk~ܙKڧ>sU-s}cq9"V͎@L`״E^7ĻK[xZD18㑸ִ0|2~26s[Wzb\X#c=+<;;J+.-%2RcE<Đx6__,ѧS1UlԮ$[Y|Ui"74<#iwjKOVhpC9-5-<ǥX-+Qxqt']v~pm\\?RnM)Tz{M*΢\Kŏ e%ȞBVx+kq˜13\֟x/M~gԭh#wT<;=O]u Ķ|Ǵ~\WdG-r2WFS/m崺t -8/U1am48;y=1ֶ>\8"io RI%qUovZouQe,:"Oq$2Ź1,ٌz+?gxC' I溽ܒMId`ڽ v(xc^Tc -=nF_Z^vzPI'/ s1YFp2}=+E8Bhw 2 P9R}H#?^?:w sE*ǙF)$/GnpkMe(\4rGNE|iJ$OxLtvʥʅVD_L09׆d*Xd{<΅-χ۽dm6#,͟pO%n&e*Wu5^h#7uą 7;\ץckl-^.lo nǶHǽ}Vesa IA8=K =]Y u@67Z2=ꍩ`޲q?_A (Xu<*Znw; x\I~5x!.:vc[Lsxz k$k8GJ&i̤m ۆf=v@8+`dwz03\(SBRH?^51F,.Yceq_JkQHE6 L2 Zgl7~DcR?3_BZZ2,Tų1Wx)6yMŽ"tV/%>\[oV@'zt˄巋U3[~*szFCܮ܄v]瓎WbyВc,g,') ~5U6 kiOʅo:%|r:sZ8)>wZ$ɲƕb6iVPA+Ip yBw!Rz$\IH˓rmR#W+=3Bô).4%\H<BS>$zS@(-P=+ZtKFT7cƵ"HlzOl/iZu cBSvH+>Zi6oFQE%><|iOY,kh͐ܧgvݥtǧ˾(niSAc$|Acq&T1q^h^w:kY l&:O$gsuxFjpZG漷ΛcE|c=ϯ_*R0nͯ?u]&4$nG4}s:B֬'UvUAꟳo(~xTծ mBͭDHB2=r3\Oqt3rIF{Whb?QܔlO:' rN)w=?| ytZxz|AS_#9ێNNHOLWxʥ ea+*Nqe_{'K'F&qJ3HX/DPܾcslsܚl$261Ju^S۞1_YBL*VdQȿ( ;ڎ8ۭRkLo-)X9g'S5mn_zk7Ė&.[WBrJڸ**4R+][#Y$aM}.jvڥȁUJ6~k׾36~,(E‚9;k񮳫x/Y= prJC3ʞN;8d!EFsVoc婢z%čoQ\{J-)%#*yo(41O{u,ȱY.<P<ٮ 3rҺKk G-Qԕ@y8U;YvXAsoKjNr^ٞώKuqkf@$re`N^mτޥ2Z\\.3ȭ;w.3x+4ىs5ki.Q0Qɐu8±zMxj]P4l򢵼Xg95͈٫HO޽]>Vo;v_EH;iZ_;iCphǗ=NjH + (\V[Ȱ-Ѷ| r:q_=-Ϫ-m"-/(1ϥy|!]麨"dBw@#ڽ h$(a#X@xk&l58Ó" >>oO8sgkSXM' m<$7Ny0-˘F;wG_j]=l]ԋ&vңWF6ۭx/qs}}R/ D>l;02?rx=+ҡt~Hc4]wϞ^PϦw7Yﻚ#; ۦ{"$+q$^7}5Ƌ;$wH pJ"PI]x2֋c$]7Qӌc޽*z9-C-a2MJ 6DlIJ^ǤV!HFG`h)&of4tnFx\dozIJa$dWѯٝBJ2q+|Y݋s~"&AkXe a)"#+gJj+recH? KmVUN{ֿB}.eq,<c8VvFEy9!k#$/Z`W!e/Mޝ8#=Y%KC-ǧ 4; r?:r zqQ9JԀO_LӸ{RrI'&ɰsvV~u5n!` ?9`sj+#@gڑKr[xǥCk{ye clC/棾^i`/N41ۡbTF`AZ aG+Gi @8yVIS̓a錃ӧP Akwd8&yR"ē`foq6֔9@+&6m 2c"K©qA+" $ Rfzqiْ4oAj"%lQS I|Hʃrږ-HHC8C4>g~ MqԤMRu d.q{W宷+7E%In.Hc X;/?7?JXDž?hߏ:j&)A4ǜ;4 ?=k~_[${{k!8mJyǶ+4av}6S>y^3MQA@<Gֹ;ĸ-+Aw9brA$kY֭I%ӥWBX3yfǾH3OFix4l_N#<(#OYo )XБW4noPz[ߞ hzǻhQWVG NOvj'ӬayKs }kBiKgj/^>o_ Mc6)OE{ |F:) WCͩ[%)ʾYFf=ڞf8t6g`Fp?WgQ'gy%8<͓B/|& ][_=dg.2ja|#/_yCwqF4徟>SyMIR6dA|M=/m))O a{wxԂ8?imR>@̧k~p{;Tj/Jro23ԭɨiW,~@;gWS`=__l|@ǟCMiP7¾8;{0<ZgSj[Ŵϡbr c,2?5Adz?BwVdֳ%rs~Ҽx?<7򵄄6 '~M0d2v23k5%F"U2RV?3d1JQkյkFuY-㺑W⾴~=?Gf.W{Sy#}=u!w#kvϷuRjZ>j@mBYֶmB2˦̶^ZIe9د~`q:GeгA2t%dS0Ԇr#W y Ö( 08*gD-&2Gˏεb{֏ WiNyIb\IUd* vBQ, _1ιfp OPxh`Z9F,0H*hʜM3Brx¾0M_u+ /؁;_/$]HFA=8\{|K0{}:Wq$ L,Ck/ ǐ]Qro_>N)x|jYh?txZ]ɹP@eDpNx9eeP{Lcxbu\t;{6]ǥz׀_w<-s ƿs)'rA5=O2$GɧllZG&JOp$#m+zhRCy l X690[QkTTp7[ۀ sׯ־_컔El$cx8-\h; Uymaգ@6,)c-T;5,C8x1F׷4rMlApnKWpx\y"cX#5P9i:m{s{^%2 U5vU"3c5ϥ\w̽J:ck}"m1^Io,?5/@ƽgNM")I.ޣz:o.K [I_+<g/CD~5Z֢?VB框˸]a x\ qU+Cȟ so$zUBt_>Uw?4hX(RX%.B$_Io }gVa'TpT#(\~9W5N9o# j@I$a"~KB67cK6y,dK;&Ր73GsܞkլnoX#<)fIN9zFk6f}.)(ܱ{d {xs>1kHlli`7yҾ1NJvw$\+$> 2Jta*zA;eX̀J1ZoFL3ALrVRά,v|1L#աp,dngn1^w ZNsCnp0NҾz?Qpy[$LWN<=5JbF[v>_(}ΧpaFCXm(w|gpa+XFuCK{eP/#2G=XWOOQ&3yJRP? _ٛR٬hvKiß~ihK #a0^˟~[󨦽Cp|ֈ5q c̅zJ3恮~{m : YI0|X2J{W|*E.ܛ25;L*8:κZANBoI'ϧz( `k|]a?: "6t\v>yy'26v ON6$SDA(Heg8l|,#6?9!FB \+?`1\x|)GҾ{'^n$VMKuf^W?~j uyͶd#碿b;M$-h!ޙ vQ8|G{q寯_,żrH3 g#ux_ºup}TBuς9ƧBoٽќmKO9zuς;oEoq.u^ٯ{XFQ{5{G?ubuntu-settings-components-0.1+14.04.20140306/tests/artwork/rhythmbox.png0000644000015201777760000016613712306026751026716 0ustar pbusernogroup00000000000000PNG  IHDR\rfsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< tEXtTitleSpeakertEXtAuthorLapo Calamandreiߑ*tEXtCreation Time2009-11-22&|IDATx Wu/|z_fѾZz6? ˇ̈́@5q , !YblI-ɲvi4Ru?ު[U=#٘-_wOUuuw !zr\.=8-+w޽k+zy~f{}ˢ뗼~k_,/:xv[~/1;Xx7W;U9{w4khh0q-KVTk<>XU./ Nr-tYq̣f-ZЪU+'yCvq?&Hn=IO Z'+5w\.;sd[*X,dj.| y._6+?~n[GKޗ}mi۳Y~-Jw呑[^tOsn''?n*}_bőۥ{$RxY9I;ԅ+fǵ;_+s?}ۣwk[(s^)58-[6?zwJ I3O '&:w6? $ LkaBis6+GL;e ߗvw|}p[.役}ϗkgf-P* {{>y󦽷zKauM;N<)~ ۶ms?M<;o۫]Vnjqbϐ몕ɸu]^j_|e z~~Fp{&=ܗb_EQԂ-軱' ̀@KO _/W{n✘•+D>n>J!98.o' Wӵ>wo=:O^4|"XcܻB o}]`M9%+?hRg뎿4q4]$-b[2aZYݜc?WH _嗿R?M %eBwMϘNnOJ-'N=K#@1E'tH 5%D[p R *JrR-_˻q@k9h|R<m7+Yڻ-ZfƁn4_dI2TT]if,w\ O}E۳fjed b?НPz S \,Bhxd_ڶn̠9<%-&AO qu* сⰔls5-_{RA1?d`z& 7!ݴr{AxLL6Bt3H$Dg U0 XQO)a6Qúݍꫯ.^;М 0-&A';)2Jo%nw?x(~_~蠑c"N{]xqPTcQmB|H I:5- /K^ٹ :ίO.?M%Li."ۏo,tR|K5_%b>Asw +]DyOu R "g$}^|.AcFAY5I>a"W}ё[!3q\+VV{J "CzMle!:mdi)ΩvـLZC ;n_s";G@aÆ Ww4Vh4 Z͂v'& *c~-NK@M]$|Izn. L/(E haC `d29Zf;;.řt+4 ?ъ~fK>UwW~xyo}r|)FCZ _XA"Ma/ۅŚiۃ}Ԛ}xVʊq"r-0'"La6SNgX!u{7}vY\[JGw%G}7p;bPn9p!R)_Wb`V+M8h\W.Tj3\bU7yS_='nS6] u~{sϟݷ>v?$mC[`~xWw՗!+cH JࢋY ZMAu@>.}w+'jBv&?8oPv[ X5ӺUA 0ΓR+c9_.Ŗ9[Ga |tAN<JA*A. 5|$= *rSZ h^Y%iį (~; 7['HB;gK]="tpwsDOl~˷_ @F?K$H`>OX\.\U:E3\@Eo"t0P\RYzVh q/'J!_ ăFW44+4ПH=t 6ǫ)&iÆ 6uF6v{:$ft5Nyy].uz/O/ڳfZkWٺ.[~aɽ^.HiV.hb@&x俤\QJ SQ^sI;i4[knptķ 7=^74s!ljvX88OJ8WwݭJ1Yk͂x|%@/S~Tc%ݥ FO/@0AaJ0 '; 6}M5eQxhP]OzoФon C:z$lO^W-_OXskԯYwK}vC~Coըk!^ Bb&g~Z49$g3o}[7ug4)xxئLSd2KB*gRȦM+knH)>]̗c-|]b Xi&㹦-*W}ޫ^ OiuaZCru=ucZ/?Tt59<(&jp'A:ѡ5kx{7 ǃAJ%/'#W3%7Xu^1L<' :{ի^8_(\n"J` 7k|ñ賒k50~h ڤT4wm8XE#鼑|ho-+P=T8T_h`)` xyPbg;`˕7f"S/cG\SwQ7JP;j5O%֯jZբrKjvkN)H>غߺG +g5{s&ø'44i°0=sJ <g;_K8Pĉ_ro.we ^G2p(i4ac?ihUE͆Dk1"ӖN{i]WskKfT+X4,Jj80 O51ךHGι"@ 1XcxLNGW1fMK?{0*BU2+n})O=}C`UDXkOWytdWB~$.u~uu}b<7x\{TUEb 7@KV l@F]Ic 20 0!үX 3P}}X__߻mH?i TF7E8["mCpgQ%NjPӿr}b ?;$tD0ꌆA=Zj"̂u -!0 S9oHܬ')̧Lj~g'j S%э7l~ 3ej,0?:uJL(ErDhK"(ᢠ*RmW7ǫr tU-Ϙ=y' SU*y9 b zErͥom5U~V~dMS@? 4dTd1,5M!y9_5G]w3N8;b՘Q }C~| . 5 f=0c/~s7@t&<`n@1p/y9[O`uQ'mFa0'huoUWSn y ig _[F꒙CƼ|,^S6vdp`(,w{X ir ifUπB"q*Q72֟OĘ?ϝmH͐"c.IרI"Q5N Q TYfhx{I7n2`oǞ`k>W,xfs"!o5_]0Sysx?)먛GWZ\ilEkمh̿:-II~jbvtE.U%tmNEu[hXkn4lWI13wkA]*9nzaA53;D߅_3GrOoqǷv u:.:IqIn{7ٮ0W\!܀DPP NS/|ӷz_s3R!Iroo@7$Ҿ}Nοӗn2}sO]w=}#~/>xۗwyyt~:)1)5+ωz oF,tcw9ڪQDɹ+l *ߨR"(e1e2/֧!( `ޒ<^=!q*WS_R3Liׅ?cVɫ.AG3*NEr)AѐV!$ͬS_ޘdO_c+zLW^ zoCO~>/7tˏo{﹏~yϽ[~B7_ͧ o^:WV_}oЎ;il|&ՠUnhx<@3ºCخ-,PAǢ˸zZ˕7]mPr6 W3[ŖrAxWoL߬M4aߋ6?vY\wܞpd"n@p)-,n|نICsВƬDp ѧ?Y?W-oy?3rl3ΠM6YgEgs6m޲oXOk֮˗Ȃ448H###tRZ#߸ayڰa#^?nߟMo{k~g~ Xe0wSٖlOA=Pt l pI҂TPPZ|*hfZo ce6%yyNޯTq;;CVO7 _{YZɹE.KqST9Μ1f [DhGMYaMC)͂a8OOk_{5}0XpdʹiFZbOB#i$]vO{Ojݴ{Cs.~tϽ}r=s'ۻ>.+X֯_OtawG!݈׾ri|b-Fv`ANZR/ź3)$6̟NQ1+6AdAA$T`q%!==;f sEK#=k^F@d]Ͱi*qaFF1L],#&'aɠ{Οmٲ֮YCޣǎ҃L|عy)3SNOOsEmm]Y<4O<) ~H ];s=hKv]g;r+;1fUpz$ǚ JFtCt'eH6e"t5 i :Mh;Ӽ=(.NFk`nG9rQ? W?hz LpF.\W e|O,b `XfBGf7TO5&FO|} 3<-18ӬdTw$Soek4ac1mZȑ#̰Iedu| D XGX,*˯|__z{V/aAIIxK@7=$t6 4Dt"a&h dؼ`x-*Њ<^|@673IYHCF&*d }o4kDnz }w6њ~q"n'RAWa` ao ?s/wF'hjj6J~eLd/5vڻo3Yfh\>Z`,^(}%r-E id Ka244(׀z5<<S4q|6njUIH2 cڿ}.T0cٲS.:pg`Y[f ppJT"XoǴ)i MidM:b<5y-!5xT2sgͺcQ_%Y_drIxŌMc3 *8 [8Vk6:X~r hup#D=O5ͭju|c3?:"˖/n5w]>ֳ5W+eZ(}}K9 8 ~z__{SE{*K.T,E*Ʌ혤\qjx_Oor,+AJ`X*"JBE⡇л~'v?0MLNp2zT;0?hBF3Bk*KUN>ա(GG9ֈ86CS4 ! i6-kv jEJ!^O>.<wi̖).uu{<_ℌr4Z#8-Lc~;` ;`~x<vXhE}>9^o'>Iwv_v Zϻw^ڹk(gkViŴ|R{00facr)ЂfMk4LQ=R<+q)(,!A#]̪ 1%vw'Op*>K`?3j}_+:FOk]{xf^7Nq^M0N+q$Z Cd`L@LYܿΨ$OηPhN`zMiG{dsW' mJf cBTbC矮 6!3.YgD5R\ )IOW}/}nOǷ]?V'?nvzLc壏>9D])ؤ_rdEUv0ZA2{'7>>A'I:1J'8}L~ޘ<Z. &=4137^B,_FMuXNްx;B>cя~L?4%? H\^/agt5sޡ3Čr';Np2#4ft iU,h4<TrՁiqHo>`6rf'#&Kz_jA,6뻞MUh.W^clg0II$ѹv_sELtlί]4g[xhKhQɵ@Cv1ɘF1Q3ri/YA;0롁'4,ظdt1iz#G=Ɩ A|I^7/)ypq%ǥPdaCf0<łv+bȫX;hRǏca284Ȃ,u Zj6G&s4zrcN,衯c";H 't1"\h4 Z5t -pT$?VgËMc&fgs-|n1lKKGjG~##%D_g18߶GĔ?S3W0?a O060ƾGqzv<@<`- 0+ޫЌQC˃8"lrbJjG$# =L< "5hnB Դ0==Á;kʜkgH/ *HwKCNpٷoٳGk^G`uۿ}&8b!p[2fα !JVD>19%"B7n (ӪY.hĘA:XsJ8ᴠo>~+8,I]iR) lAh}XI & D34#iÉv,W5f]CҮrNZz]>>++R… ڒ`aeWE;`t|`n)V+4=4jA0J 潵:Ycm\VZ(2(WP鑟d#РJ&{sϽo~7>Ϗ 頠 G<u `MШrkIa2h8:]\3s#$=3ERfqxtcල<';8P &G:7n7Zt w#zJl3H.%U4NT%2?rDǎgE9`,ۢL2 J>5# pgX ߩ,o(e׸*𩊑 sz_YP AP\*TC5OÉbWF{˖aVY9vF!F;pѪw"^U/d濢]JNF&Ff&.FgOhPqhX&Pe^E_Ēʉp B[NwZ_q%2.ojjp Acҿ6y$lRq`B^Hxzz&Q D#$#OAAl(p_@H 2;5 %I9Y 7h WxUgfj~?,$u) ƛP];2"bV]41.h]ړ>f;Ud-g :PHcJ5u+)e3Y=_kO'=R"f$abCQtȑ3ࡀ :k#]|VzSϣkWI&f&_"ihP }}w.ٙ?"5b)5B~g:FIMRGG"&h!`رx`'FĿ knfӟv|Ü)q8VW \}GkĽ "*7h3Ufamи`": .؎g,vt&- @ i1ƹ^贈+&+'ԍA5׊ `cyBS5=)"Ws?:yigwڹc'p>0A VI*Ra "ԤdtQ GN -Xoڸ^zKw_Od}§ iբ*T7i2M떌K.8D/ߺ[{{wAieE~ƆihdX b' Ll*7H[R(WX0v=Hkh?%)(175Xn( ø SfGXӏ+*i3cUxGEZՉ'̻*rŕL>Mdȑf(F 312WR"Mc}>xtR>N8a!+n͠Q{ge f#2 \|z$C= rPq|B̓ EAC^{bBI޾~t&xt~w^z++(-晍fsRTIVeWТ$Ye&MSRf/z#~I0m8t&&=ēTBn:Z7Lt@ ۮ /5E&4 Hhn^ڤq=,VO0i*C@gtfML۸BaP E y 'w"zܶ42 dKwg |`EY:"%&&h:[dWIc9+}[h<ՀAaY Z9IВ@'G51" GPݸeWӋyR[V/V_4=b=)tJ+HR]v! Ƨp|VWQ*P-KW^r7b=V纀InV\#K0TYޖ/OKL$`섫mpu<F 줠8DGn"4.hWorryq@;v 0fP;v=8U\ۊ3B&Iu+Y k7J&32KAEJ݇@{'I3 AGN6 W!Vȴ`ǣj,Egpu"@Rbh1!~YQCm3钧O5WCn>D3+#K# _^ga!dC`䵗 םq{rBsFD9_oPe.lAd%i&V|cfRxlsNE-%&P$C 6<ӵl I`/?gLNXXi@[ ?9&)_QbRH, ^U$#>P(?de GTq^ A72D7}=ecNj{zJ5ft2!h޲b7> ǍJllBY Q ?` jYemI@F -?~nzo?@m)ӖsXE8Wuvkn2Q%.&8i C\K.Ge"\CrĴ†$:(vAMN6 ̱i8iCy~O$UFc!(=5&i+vWY4D܆-60)xw|7m$ՍΪJ&* 9)D_c>҇F&:? !lK0E KJs^.XSP5RtCz1hZmgEtN-^V^Apze8RsNLުbzӘcOi fUiWVw`v6`!@p倕0] |)z_V[C -2nrոq\,tU A[/% -?'6?ȴi) MÞE3 5<8)d:AL\u9 )FOj $U0)1Ĉ$/KDTj?_xRΖIo؄Thaq~&9G&`Pu*X~C* /4fu#04hAI7,;:=yͨpM`^N>C}JkR81c{ُ}`\8¥ ;ԯ4,q, rhꅴz*-X2[yX7C!BڥlrɱDnP$2tL֐X RךyV4ڈVvt ɂsix*< r )Ң3fIk TOq`YhGLKM?'y%q"cXN=:b J} ܎xw&y,XJQ oU3hfnP4'3We9hp. ?3 JcؔH)FBC{;9 q*sW94uaVƱxESWlUˊ~ә"c` EYTxP%_4LܧDytP}'.bSNM20J4A22b w ;F׭JOL)w853SХW)SYHȷzgVLF%. HZLrmbtjt?*<t15<ݕ82>[Lcx%<;30 vTB]< ,J}Ux'1U(kHֿ}} urU b"JQq?_mj9{$p+W=!zC̼`:XjT`*h^D ; *Ec3S|zRg#`P}fF.:S}EpgA0{9.qm@P4u2]z/9QF._c;Q;_ )z(-ly{Ly`7;@Xhƌ͈T ')L &  9L@X INKK 527e,oD_D)LNLGQ1`v_K#($dZ,i\ 'rm9OPU[ojHA&U䶚d"0wD8 b\fqͼ`0|zá290~C7^ ZQGJ{c;3,rQ)̆: ҋN4 4vS ߭Q(e=sQzƆcr ENWI<&`|n .#øpcnMDsEcŽM!QZ14@,]EhۻMm3jRQ m_J5;ҴU?g"Y1ټ ^gЁhPj/ǵOM[};Q4]|?+Ӳ}˹4>/Qӯjg钧`~0 W+!MT׵B,0ނ07q|LE؋qCOp`87 ,鹰&?9Ȭ@8a FB0FE%g징 ghɊe{Z( ftSR|iN5@7`_'?*uH [ @M' 3nGWfbYf"?]F9hM2Bq;hȲ?O _T{n!NJ)SX{{g^mOA2Z菤dL`wEOE~ :jrDA/ *ڊ }ి寪v + 3{^gNxOSq؅(LS@^ݒ=+ZH/ al4 nx0&~hZ `CgS#cJK s/VV4ג-Bh /:W5.PCPo.=ze_JjO_q;.To`XB 8A~MZj hwZڇSd Y3C"}" mrO])8=d kZS൶,@o' ,4@)"| iB3Au6D=#/l`]^Oש/|kADL%墮ӈd\֦"eK|Fˠ Fhj8 /+p"KSbNi|0}{l7A`gӿfT? |%< }pLYP@6q `Cpd@&4 9_j|.C# PXjr*Xa7Vзg{--s "a/H??x`'&KdE2SifRio+'^q XrZ"(pNkFU@|A p+SNyWI@K s SNkȉ)? BD'/JO P'|/sttyhd I8Rdu-Lケ<~4 `;̈5}!C:L2ۏ:l-[HhxZUنjIcW,R Ғps+qkKAg.  G*S8Wڥd+ 67ӯ^Cp@=S28aSeR-h4Lo ؼ L* k`6T"U0K0v`R ڤgJje1j%pp _8;[q,lU&j?Q'Hfr0Wuʛp9ֽ 0ށKvcq k0E^84|y`$Nfc`CC u))f?/[H;-?r-9@wС#`e.-<\aA+1=hZ.K_}B6 ) xD Xx i&sb:ƍ@yE0K)tiq3hVĩI@L|6hڢ\$FJ*:gPf8S!)ozQ1;XO4ӦoRRo]'&EVׄJx xP;6"``td~dz$aih a]M _#,Z.!>_KHU)]!^pG|GoK>yApbLj%q?rBYNB#דauYTݹe0#DNt}b_-sZ)i`h hLgv`KkVSa`4('hyhA`GD#<3ębuyA.po]hh[zb/f]#&؉-39kw7ʋ/)@#U`>&WW.@E'Ǧ}[548#I4vC3̆Cn cQO,WDpd{~(G¡y׫Lx0;L}[M>| uG),U 8|.Ƨ+7nݏ.{qcvw=?i҇>ݔ#o`Fjf 2lTΎpƦ3.-sB(pr䳪Х]g9!/ݼ0n@` v@TX}zhgLD`Mm ,yeC磩EA6OG6bJsg̰3UFZLz\o` glTRZ{nhCiAtg)L8T֎cO.z,HVC`!t ǣ.Kv[;c: LE@ gb0Ю!4`;Bp'j1bFFNl[D[1LНw% G}F~0(1u>GILC h}t8?fl ,%l8h %~TaӁo"胟9~uSzm}Vzs.M6⥋U_hQ6<>"R#0J@T\%w9H"@tU K䵪T3Qδ d@9zmhYnSv$& lݰ*3؁p>9(5)xqPq/^隱ju#VWC;'v(#Qk Xp~DP9]zi}æ8"3ȀL4l]f*uXĆK.afEs@Uu -RI)7 :O} 1ɱpN毁LM':6AUЬ0’6/0H^#o:_Pv6Qhtʖb@@Di7uQ1t #M  ^  ;J fF;`AqU%p. :ɘ\4L`߆Q%W]2ƁFCHqOU`ldL_Ph?D;V-QaɀC?|'3L_.t&8W*eڸa]|߸>䘇\7M?3Y T2} -B pYPq @jڼrB#8 cW";wTb4ilXA04f ;{@S$!M\ne'ԦhiG+@Ej^oҢ`7I9~eq0({4ڄnaDlmʹSA&_pw?}xqߦ0UL@il09Yڴb);r9e ERKg> H@M>}ɍ,wM7DA51݌na-߷`Ϧ5k$X.WK`j JKXPoӀ=i娔 |~XcM-L7GղG ۄykc;~a%1t) ,:8aR]0ӥM V@Fw2a1B@托einh="2W٩UT~qaQn^J Pˀd? #--uW9"dbЦiqMUCa{K`m\1fo^GA.N DaV/00HXDp/FA13)I E`o_GMVnژp9_l28h|IA@1X$NΨ!0%) ic6`AYY0^ ,&,/B;7XkŠ RHH򜇎^Qŏ„"cM&|00` 0ilJ4|I_XM4\zǟ6q=7U;4 LP17uuՎTo$bǙƒVsa5ž6e"T/ @kOJ*Bfom< .^=W} OE oݺ72Gs{~E6Y a6hL$:V -gm Hײ\҅YZ@f52$W`"61Hc0Y94%4m "s1Z|o#]F!JEm$؉VP5!{ )Bynt/Z*;$/:c(@;EP6@@7G4/p>ֶ?3C}|B/,vҝ hz(AUDj1NXy{hx(I~;1YnF@S6sY wlǜ}L1_"xBZ(c-$@.NL@5PS@d81[UDn!-X)܌Z(b L,ݴ}FÚ*l0}D3UAQЪMq4`oL*otz[~b>qJeQfyuT?D ̿ 5M4 T)O IކƮ.ĠA1 F idiŒU` U`FY~)lp\ü7FLa1G ӟM*U>JUkT44r[]lp<8Nd,}D2L LJ<{syUE8J]A=h6UYAxtn11{Z |\3n0 84qBgُd|FH{HIHVt39)^ԙNEiO~xI@ 0ңGDSZ(W5|l|d~tʁPIH,CfS-äPb , RH?'5}r{B(dR}rЂ?{nu}έ73u($ ( 8ɖc'Nd9"J$9Vf˲%EUؒ(RDRILy3=;_}=wpڭZ׿,hK#CT۷;J~X ;^AdᗟZmc3giѮ5 K lgxv{yb]EJ 3ӷ'@d_Θס 4s9g؅A2ra=`HȄC#_*"z a~"T`;Ll4ɩaccܿaBZ|(w.HN-0jK86*rVzƦ4s$̕AqhRu4'D9%}Q[:H{"# ve<W_") ;|- oA:7)fAIwbRlz1W v/:T5 0d#.GX̩]C.Ae伷☠#L[mSz{م5voZ屛N85&PaΡfɘ#OYTܺ[..tE6"(hHcz1D ݀|^@rOK8VOJ݉벮m o2FP \.; ܾ0Rn͜ͷ@;zun@Su,2:,YWRx^mUFD3cԎP)90K{ U'ְBИAmT` S։{9zv'<~+9,:s` 2_U>`6d^YY %g2uV Tn FCP;b ;5"'v %b=hVM8i!%Y7'bŚfn8˶/}Vn``=pȢ>㼓NԓLeFN+TFD&KZݵfaE;&g܅~1t2`H@qߩdo 'R!TN *0N@ t|kf^P@(1\qXh` ϟ Ru[?Ӂ D7FϨ ؀E#L.\}!.*a2#n\I$6~{kNl'! 6"|0,)Fm> 3P.[-\*3L. )A٧hF5Ǯ2݊p0(LE NH Mo)Jx(`%)}=fr PQߧ?H$Ke /XӰ acc&4@(aAL1Fn#@m:jX 51+FxN|"z KfMw{RsohN]kgT. A|/&Ń)aR7d؟mT{N^cDތB5 l^s~=R<-d' PkT8p9״Lԟ̍ΡA5zRxuy[- YS\mޔ ~:Q'&¦J*Wu Z"شfttLMh0޾ U&K4ᝮsf;تo d7&!IL/>˵}v՚>} ~I=)G#NBT~wsy̹Y z(A =Oorci/sO$]whv4SN`?{ӛ;W:3yH0 %:ݲ ʭ=Czw]^_Ht,+,p.'SCS 3+:Cܵ `myΜHg}5Ŷ/}HDgp*)?~#/8F+f%=ȂZc1X* Ui!D$=pk,eUz,| {H?t8PBg?ύBMLsC Hse԰TW)_.rXɁ c%`@Cxajz-ҥ;d켴h_#V3dl&Af/T!hۭ.K97H;vSD?ԉ?ڢ3k$f6\'w ȫił5}΀b֠G/)6м$嫿A?:%F!QOGu %_@Gn~VYOG\C t.v$x*877vk{kֶ"gTrӄ$A^5'nUB(㎜Dp+ĵtfĜ(h"賂]v}\ @Lc}'.}duZ^)`F+SةȠe|*W'b #$ D t|m~@v%40|S1 fv aLAÊ W3O|^9z°X(vdN'}>ɘHKȃCt!.v\s< 99%JfME Ld؅7GqЄD+-f"RX6Hw+5>@^'},ۢ>=Bv{О#eeS/I#}KyG Vy!sP*OoxK niЂ8045.P-+.>Eas:WkZ8`0O|ٟ~0o`&w;Jց@B 2睐^&Dj"dρL'Cš7D\eF& Z@DIʬ%OzNQ8N 5:-6s7+Eg[ISyPar!\]UR;~o:usuLgfF%D բ"]ߨGGM;pG{]!3v~+^yL¥B̔VE`g=nxGGG] e>/ПK_ :unZ_OsϾ@O|33mln8iz΃)Z'dN9jw/;2:HS <<GjQ*MM= 7V5jo<_NyЯT2" =00Fթ6_p>t%8J#+f8Mkkw?(a:gAJg7h>N~,T}kוBd*/^HD |AvtdQrsV66aŶZ ?~qF̡39=J bssjYTvS,k" B/L_—蓟k>'O|?:}&]hll(Mzj @[# =Z2p~^h‘% ~o[j+Z@+. BNJb[$˽)N29M6ZGQ*2s|RmeQ;7jkỶ抺]H?全W@_WTRa<K_FuS@t~ a^=_85JϝۅkP ('uC+0D% 8JnfB?a Z3S4Ao簁#0ݍm*AkDh?3~O?8M`Ό2?pQ9B*Vk =J ,^[C[\v o<߷eR8r 8p{H `RMx9abbDZ3e3g6}Y&H4uj.@ ߿ࣧYy7\wɌ`I'`(l_.դeAK}J92N1ŕX W2":h;)Ȁo =ZzAb:庀~t|2-c߾g`cpv~뮻|ÛhRv17\X KƭjDmv պJn*PHgl+,f O19GsyDVT<"bQ[,m?)-;:;^^){It3Kko% oK蛶iccglFDgVY=P{Y-2:F333TZ!UxDHN6`>w| .@ح@D ⃁=8?%h|DpJD.|[1b%^BW]}]qtѕW^n| t /"`s=p?~4;=L3Vw(si Ҵ`tLǟav z @7_:c,Oh\ҳ Cl% ެoQssĵs ֋$vksάՑL*ָ}n[:[7惣)YDn.vSϦ:dQ[;BD&33v\ w{K(fID2ES<#*/*IXEZ;$64 Ыy)X@ &:F }!'881Ww1޹Qx`D;C͟M׈ֿtL#'FrLVT;ח?xq8U*mmhiI0|g T*9M2 r7]w^)O OAc13 6~ R*TxȨIoa"X}"-E赙{c-cMcmJJ`7<[m>ʏ2j+FU|K42}1F^䆂WovY8RR/ O."؀HF=ehcBdhHҤ77Z٤gM6_^Vy(;ʙa(îZQTg(d)t~"'3~g~ lN+U XG1qvv= uyqzcxi$Akq*৔6tQvQ^^kR6s%"*|ͷ xa, a͂\8s}OnD+aMw3m bI!Q8A7t? @RaՆE˧{KɁ5L^T`UY?r׶^빞?ۊwٰΧOyyVrٲBiu9gtޟ[ihV99h"됟4F BOAH׻ϭ7R^&8 Cӟg}ƒV7V'撋/f@Hɹ 9OM(DbM!bZ׮m,^\l 7O=vw(g/;Q5~"?*df^'>%"Rzxz_ HBc@XY;mvx*Rq_vԿ[:L_{~K^zE0q`mjx~h"dKE٩{JvN Tdgur)-ǯB (ŕbxaLN}xjjv04Tb~QyI؂Ӈ o{l N@9Wl<Lrmuam̲ X yrG!1/Fiq:s]sZRk2WW:2/$q.r0l6s#huFNw2nd;+bsyBw`D<.@ D'TG:n^C/\kPPIlŽ# Rl?,q袋(A@

<?ܒ&wʂpfBs:&P,jVfroz'ƋLρio4TiZs!ۣH$Ȼt`C06|cku ͣ~~yAGNqe Zx 1|ژbimmT;xU47;0WQ9ք4D&'-m ^r XSLpѬ|j a+;/$l@L@y\[QH4DXHZ!FEu$Y*)9UE)穛N~)& Rx޽;*9M4`\:$M;nF/ 2D  ڷB( @.W{ =wp$S*BnwT^V; tuT[ۅ?5!t3@Abm^<KrA>K~>M@]t'< -Rb^|"o W_FnQp*ȈH~roe?*RrԱ6҇./70ec+vm`cL][d蔗ۥLgQK5r)>h]]ZP'a\F`X N1JMh;͸hXٖ#dII6$]l|l]FEGBR i-,Cr{ru>27﷪m@>~M#$nB3A!:7НQt PCcKk-FԶV0p Y7QGhjZץRѲkCqh18A0`}|=f2kZ=Xr8bZhQm{K%ʲiz8Rڿ%vЖ2'tjR=KQ&_ ~}^hX9%f2][ P]w/`dXtUohؽvak`.Jj]@of,GK y.*p2ּ XWHCC% 5uZ=FJ>x!9~}ZMh@OpЏ<5O- Lޜ7ȁכ<]9兎-= )lyivvg&f(1 5`uB:&l@PeO s3PWnrl/3uv:|]Dܦ`}[a넰 A\v>>5iPރ,CCEMrDW_5IPEꫮRkJCo"x@6(X0sFW%7;f-':977L"Zy}Jw;+EvF^BZ_X.,bҎXs 13RWQkijrJ} = DѦŔ.$#ra%x| C/?*o-7Rۑ#Fai1 ;@;ՁS cQ%(G#cZm="Z*7PTR̢v0h@͊D\*qz"ZIOJ'_ur(_C$ `˅65)&%&n`(|0tپ 1lC'V8l{ d`z{dG`˯*$M!,ВѮv1w:q(&v8oOʜ"\ykHT~~SU, .y7-Kk,_o?^hFHhY1.h- Г$z)m$?b7ikv Fp=0ӏRI3at,F JY%'!F V3^P?f&Ar|2ԉ8<*[419IoyM4g%vz[ȣD&wN@LV֦ebFQYhVA:˃n O9!G Az0g*l@2fXp,T(QVY, "xt1(t*Tb93r#]=2}ȩYptJ$ewDG')r]]3 y*'_fRD"O/ea,Ъґgs]|#@Iq2(9g w@x9ƀpIM> PWr o춓>Al9Fq[6>H&uQD N]d (6X.D)atN5l 4߁r ޽С\fa޹kU)ppP1S\o%tliI&E*@0/rjBe1X>\@5#̥O*a}@we@{/#2&h鋲KD"S4CВ~y|癊L}5c vލD coh=*qCE4@  ldM9P05+1Blȡ<E7p xؐě)x,T>% 9׮(xM#smX5i~㿻% agtd >m\rڍ(\'Z,plf:"GJKK7`DtM;Ҟ,1-aEPQ##5l!hck} R.5$I`&ckC\ niջ96j1p dpG'ϾPɇ/cnӯ2QJ@Dwf*>*(ēWA]p0j q_ ͍*2K"Ϛ(ȰȕlnKAT[ ʚ=(5.ڵlK368[! v?c"@>O @x@ۂ$>y#E*q϶b@ADrgA^E b9h5/NXо ]|lFS尭ċk+tj!Px $O˔B#z3:}"%$Zk(* e;$sOh ?~+[nCcA#t sÃő7!0$H#%<)l6`va)(H`ӰmvF zΏݽVgc)C: $(W5m. 2VuNk]aTd IoHIbɕ0y3Xn_*'JRb*}K3O!קY]R8G`n~%=km.h#ooǎ@v>&oA 4 iT4Ր8eʗdoJS TyE>p99cQK;~gB?$0"[A Ľ]5#\-&` $ئpsc^`uJ8ߥrT)0l +r; *e@?%r[NMc>>ۑΐH: M "^EL$M4hn:ݮ1]25൥UZY=~7';͔# 1zX@: ݽ˶hӗ٦J>i0 lܽBЎ[ן4j U(m)Xࡦ9#s[_}9LSlѱe sr}"AKLO }w鑀6 @*6|SeD 8a9'_\ilH;tY_)\a=o ޾^ O&?xΕrW Z5?vZu 4rZ OLj͆R H̳tvHk \vN˫ttGcΑ!O–=cgDFVbxҤ6_@F;F<|~_>S\JB3c?)Ҙ@3 Q֘u14:ʧ(\]Si׉~ۛN-#q~:0܏_9}/~ /D>J HWã\M\r1MOʑox݀L"ς5p'4ӫ`mbbbM@ _s`TWR%^B } mNF{uҕ*+&\f* 0R!גnR0쵚i sE~-`m 3gaŋN}2@ cXȪ5^(֚ Cم;"TB6p-?/W]f}~%>dy;@ަ|KIџAҗv]ZZw|hnvsQdkk>@)|AENCcfR+5$ۺ C& meF8?Ozp~Ǡ`&zx4Zz~; TH*I3? OAͷ%Z|tt)iƸ@r6-hZl| Vc<~yyE-ʁ4u+n5 ,p~w gG3_+7_ӱE=[B9Aj@DHaA?!S@ϼCǚ TCd`=J/̜ s|MZ]YSgӌ hxdI@]w :tQNdnK$p5bG~uE< M[kծ[^ü%`&& }@m lHWRnAW=R[ZJ@~JSVuV=9}@ D-J?hL4@`ptL''Ƶ !߿ͯѷ|):jYW6unˤEjC`yi#ʛj(R/_?(M/?SU#'4vz ~lmCS}"}7PS3 ҚU/+_nӜ%&';O}կϽme-BBDZ{Y9Q"WG\3D1;Ϲ vCK6`WS%@0ly2*vZ*"*Mqb5jD-(`J^Uv`$p(ЁU@֜Ece(x/OD+ǟT@ujrʨբz8,bv5_ @ej KMg G=OCN[AxxUP)4\):n}mC ||I$;?CPW+*AP"*rweV#|`V4o',|3"0m]GƆr43U]@0&֨ ϲ+W-n+=QTWMA[tr֧WԷ͞@SҌv)bd?pǽ92/-\Kl# s;842 l+x f"ܗF(+@"ڪTX0sqqq>g5P:Nwܬ;MG/| O|~3?TfB tzN/-wIQЈ2~=#EvX$`4 ŝ'jUrYf).4X m5w|y{çG^b jES}?θ[7lnz9dA<*'GS x` ;uұ4fâQNPbr}}u=EעnXuntOG_qen( @G=xϋ%4C݂MfbX[ⳡT+R!0ډ!$J2xA}>G^9j*̇<4D9ʙH N:MKjb5_cc4H c*]e793Cs.P)4xynFF?-r:Yo”6)ў͘ZN6ۈ{==`WU.lx@cCJ@ + 'N؊@!,#'0a85L4D[OJ)q_|Cbp`` fͽifjʴzb&U&U1Wv:9 J*ۻܿFb'-ʨ0F 8)fa'E+%m >pN<‚6K*_i[^Dc^8@/2}ߥo~i׾N_Cͨ~FCUϵU,2 @),ۧCv L{mml(W9v-Ţ?]1^(hvUAXX\ڵ @M :ּi0P%ƛMخ~l5NVU{zZdzRh A>5҂gDl:g@$D6^;jX?(ѣ/[/" |yrs|~!nN?==IcؽTRVVT͂:s}(961v1C;`WkYjMr2+.__u^<7g]DK6uknkk=z<X=#7I6{U H11STr'5 E}G]᮹Lҏ4Z=Ï!u@d10䠊n:uQZl0)Эɽ׌`s` LE\"8e w!F9=[90vi-;ډ'aO<:t4;pr01ZC o>jպ Q[]=ˢ ɱM^*5 .6"Z5%:SǏK=荇Ѿ}8 =&ӳcH;q_}Z+lǰBo+ 'E6MN>4jX 6@=YelgZJJE!lOOSL8ه"ʄƉ@sv(Μ슺Y=q IH 'I*=ﻃ|>¨ӧhM[TQhXc ` +H0p*Ƕ0@4`~Q0N m'P &v@ D} 5݂2xӧO@^ {!͕/FX9sq_y^*-P?ɨt/bz]wEo24E0}+]D* @uϞ=zۭjAxA2Q哴z(U6N?j8l.;) {QADYإ7٨@+@Bʝxp *c_\#2Q ƿƼƻ:`z< aKKq,rq[uaMC8R9_'i#+`JN^ ^ :7Q;n|F߯ ;}C~'}+{#6unW9Vaf}?qG9/tG x1`>SӜ|؀/`@ Sy6 [3v&K[;X'AǺkyc߱ . P֛s'3M5}Qxt.|Û#^  MEu};[n&Iaw90ٳ@Dypd'頒vpʀhaSE.bq*M%@JB;1jGtyגՍFAN͌NV!e콎= {s77pU`g\)ѐ󓥤xURWEW3(wd@Fl6Svo% d! n8Bc߸Rp<} jELM=2*xEe.qI6w$7"%<;`"LW:R\ytAkMo|7ӝwNwy n6\4CMRYeQ< 50h4S;6x#{IYB|bިb5ሦ&;nt=w|E}vq_G^w^qtEr5b#uΔMEq F$(9$h/J5Qǚ~7y] = N@(l;K0`x 6,@9U'pRN(O>O}cqŋӥ#Y_Wҥ8 @QB>&Hܻw.Uz[;o]Ͽv4W;0Ϝqޥ.v<5G}ݣ0IeTs꘧ ~f Q ><2|zߧl9B~ݫ";q_>3>;TH}(3>܈sfL̡X8z$]0Uk.YO`ho+X5G8&%cFpt={]jEz0ӭ 5duq (DD @xڄ«lA=sCHPFlv2mf'ջi}rs\N ̲Վx#ymGjWT.,C@f~4Fd8;(;:qe|8@oz{*Ͽ =R&0 <ۜ0{ KQ_;~{uد!p)41 V0F 2 VX~?+Ov& @`R l6J; !ܖ:S!Iwki`:30 |_&bN5+SbfdIe^u]9>$ewу 7ຽ̂]+t}t2{ fnE> Er)e8ǣtjN=;p#OUGCSCZ]og&}7w iumXBe#l4Sq` c-(66"*waY9)_nJaDpPCۤ~VW $T]Ƈs4:ݿcumh zArpn@ٻo/] 7Yw}Gm\j~1 x w GᏏR_t7GkQ̣(!?7Ufv{z/"%aݜ9}pGTKq]z1[L$E<Ԡ(`hS3i,l/ch05׼nf랻wޥ ӆJ N{Ņq*(9֫5lqpswK ZPσݢ*M@:LR~\r w|";2FVfpdD7һiezw&RcQ.i8aGZ2 9z?M&P'JyvAz`Ƌ#gcx&jgzexo-tǝwpy큷O9LE^#Fwwpﱛo{|1|<υDNw+s/z+ijop4mniN#+"tX+B3~xn~휣Ͷf{ qa .ή{[ zApR0ze]W[ [JQ0R~<@1p>ɸ܅; c "z()Be7v *,G*`~CAvKQî~}dž~z,[nCoQ/睺T"*OՈ<5ȌWgL[ZXX΀+$a$ϙ`>-S p[}0qD}&wv89\'/z0MD$H4wFN8#pusڰ3ĸm 0t(97\+ts=cÜi*k4\ <2SBa,9r2Vdr`mb m_PW.];PX"%+gڃng3צ\n*sAkR 2vW \1~$;OLIN s]G\N??hc{.@EəXXawR8l/^9>+GYRI@BO|Oeh1#JpM:xC|6h*̈/)W xBWØwuK~"+D HJcxӨԶkswkݶ,uې);A9;ízKM2Y4_90qeΥYz6ګ@(!A4AA3"yW3:aO H{|7ݻ: j!$Dckg`3ܙ g/PC*C4Lܑr$-xV$ ]}} ywoqKb' bPt\<I~DX93hhً>?5ق)+eJ>@[V`_d3q͘9tX߰ kLJw3>_Fԭ@Gĥ?Szp`rr@۳t?l 6xW7!Jw90-fYA0&j%$"o-՗U( M{$~-fupl$xjWu gTsEޒfMfWWLf)8[Otjn5heTHI0hYYiз 09b)Ȍ–ޅ3d ~P`̻ytz4Dtr$D+,Wx:HYb#{zaGrܺ!;Rw[?;x)llWϚ@3BAT;Wt;RPMHΆ@bG/^UC0*0 Oi-!OW ʬw"n@1xmfwȸ *I7H3ϡ `Mcm uzK6*)2+ HҀAHAYtooHU"YƠwfPuIryM\ ;1[\(bhuPƺH@ȮJ{"5x5+$lIn'llc[ [ڶ:%jjC{ɠ kg Å kBT.v|(c(-;iIP!n6Z(@x*h"z"-@dh9"yѼu[h K .b+lJJ){s#@V{+)Hq~&ym1\&8 QP E٭ȳ{aw80Hfgg;=vz}>@wݩλ>w]}wC{0޳Ubc OCU<*p2SбT9 P*j-35$Me[M9Iz: i@\ &c44MHD%&evPί-sgO1ؽ[S6Fc:"ȿn:x˱7.C;n>;YNi^/*B#D G0@&粣K3Hs"$Ѕ!9q腮Zh~I -W{G#vQXҏu\r60ysLr4>ƼSB nGUNǏ0[n%U6,g֥^FOkʫnb灑hFTs:{+$et娔Ce3& RУGymcg`Ctk۷>t8 O w WgA"9\'Ο|4<+*W!sUW]M}MS:p:p^zܶ G$RQ&c3t/pbBN? aF~ΪcoK1?l6D'ԯފa=M jr-;E`|~< BfčB" ~B͘wprcq.* 8Mzy5<8-&%mgytD9K\ʏA:RbیL $ D<‑,76 dXݭ9&f`;*܂s?ɉN"lb0P dl*KNܸc|Ci7k'g5a?7kk봥M0*y׫ 6]vf6Gr,N M,Ѡ1* cI`]?;o? Js46.Z!|4`=z9$MTXOȭqյypbir7GAoQĻ3;(]rs}]w!-&% p00K)AEpN`CLC5@ < ?YװagZۀUu̿B99)0ЖC^]@_ ﬋zvr]tE Lqٮn~=6@;bd՞"[d&P d}Ѡ7&`!q9hn5 ;N_ԅC~ Y9ɱy>:"瞛] e 2̊|wuT!` =xbzo-uh#F[` +8L>4ՠ6`#*߂Wn)Q'`00$v 6H|^.yvZơ6"G@R>+[1=~i* AN=s/=#VW'~6۠:6{&8M1ڃO?s+ c `?\Cp>ʻ1݄9ced`?ԗ=?ؾkic;j/fVAKḤ`‘>ݑa^W+/>k܁G&^ͼ5s+qo& 'Gv) Ҵ0;rW F6ٱaunuΌ5CRM3X5fABO^!`%?2`:tO>O-I=J69|8F(V3,g«7L;q`. V6 \6a<)<;NDsC3'U[K=16E{wtQ7ԉ14vtYJ Kڼ mE|Nc9[ P_2ڄ]@yn,.O)AVA_ =t$jcPK~IDYaw+ .[Amll;9]*c?_҈]'K7c0{䎮u+<] ߀",z~% Fvj}Z=AZJܿ>.* >l^[Z_[+Sv2҉ʓ{=+<,_`jg;h_NĕDS})@ngͰ"0Ȍ)I2~E[{֞X_5*?͔W :<>~JhzP) 0xڝXsˑ<*ݪnETsVp`3OLvS~uX&[1("!зo9́FpؿnnmمB']@ ` h^ ^Nkv_}WRp\v~~Zǚ;|ߵ- j0 Gg-i9ܼBm*qOp ]Q#b*V=H)Vn 6 ŨA&Ÿ$%9p\~"[R{W5 3&Q_Eemk#/ʆzuS4c-ON}a+qץ{hAŨr2Qh^y:{TxVxbfF%Dz Vii`VK㣓E2Ka+nnˌ>هܯˈ FTEX=f ~jN}XVg5T#,g6>=7ӗ򵖄DŽO ;8Dф-(zB{g1ORJfu籑qB!1&dğB0TuO dUTl4ʐD;N^eW 2oMm hkzǷ>3;& -~ <5ٓ£³6"kc S ZgCLNL+s9?@( Լr%yw)\djfh ȯe}0Ai'"07(5c"= ğ3>*T?V/NHš~#:ow|tE*HxȦfK) ۜhtT`n ]!׶;Ѷe0jrS@Q(VyV 0W! *lEw S-wS J WZ3eHр1wyBDЏ Z r_{+ nQbاi7E#/ZKFx?֕5% 8/@=qrhGeAgdH.y@/ It #&ty3%Rua)k  dO?yaSN~si HK\yBp=lŗ:/}d}ÿX\{]mscZܔ;+("v%ـ[?e^!+435mBC/t:P. ynRt(V`C"_n(Rr Ǐy(`gV{9ӏ %6ss;3~TJilLʁ;ِT=wy]S&TGHdr?(D݉VXONrУK vM_.!=K(/툊g<@ ѡ ?aFO^;2 YOS_88dz.1=H 8T%ԽaF!ԄLr :mi>&D90JՕ]A?|)hhA<ROE+G*F@P0 xԾW M @ xZ~ev#o ?8?8<LA* DŽӣ~f7%$=zPE(`Oy' FaC]/%,ɤ,Cbv˥|.SDe\T6mh@Qtx(3P h r%^'ů?%FX穎k{:qT&#C/pDDҁD1',`*:ihOB1B@C*>(4@\ADn,0 0loKq𑖁r< (T@s)m{YHqkpMr6_43]aa&nX*Cc>2ت_?ȟCD gPrO0?*ڞbW4(v_ .~?4rhudX58?3w6xȀ̠lPӨpCBTwf>8.+͸4@6`s?;:pug&Vb g)K1lۆ@ P8d~~?Lߍk,DQܣ\xwY .qta6e>xp^Y`8N^GjƔ;٥90DQT yQ_)o7P~M^=:ty緘}|B8 bo w[C@g/6hfEYV-/8OD(M`O @}l ԅKMܤX"<^|z~f+/ J/ـ0㩶m5pY@ym+-pn+b`PL݇;,%J.P 4`:|0)gp=1'ߏD}K%ahg\iX@Vt|͛L5pvt@[4 9@Q>U҂P_c 0U \I`ʙI&ĖZƍB9/(yO $݇#TL" E}Oǂ^pGh~f/q: F4̝w 뢢TjV_^= T J20\Is8F$U /x`R%3`o1x#t0 N(_Gߧ=1@y& MePA28GX;9KSspvp~9OpjO"||-|tPg=C"an$<d>sMک[4:eYK`xF lVuMNOt&=|Wp Cy7,NFʙ4 F(<h߸qre!gwDMBOUcK!(D0*-F $%$F0:7*LDJn) 5saz ㆿB,DCMj*< 8UȨkZ0o:&੢zS/!(}$%SsP}{ǂ`d<w1{ ^ `vq+*US*t S<`!hRD-(;o<)6`<7|qHgm[.n@|>剡"W1&?4QK5_VK6 Mk$=,ڶx]NpSqV{G]\wxWwϋ^ (\)pNlMJkl<{Sb Hi5DOr薵`nP$LڤŮ6-8.{!=7$<[+`c='@ٰ8aW] ϱ幸-Z? {'*TW&-X""^1Xg{߭- /fDA242On_]=tEr,h{t]2*L$^weQ80cSbd p)n?@D#f,8 uѕ.f@b @l! aj*yT Aѩ7o]Y`C)s p7+0To[Hu=x < 'onuM6xb ԿazŖ:GH@8cCh/ i64_Ih?CAd,&ވXZzS5"A& 8b"Ñx+[vl] ?(sg6A#?8?K?~xXdL,[ΪAy$a*0=y8#"9`i rI)y!}.Sl =fdt) %׮ϝ? ΢3y~CI5 Ц$ĵ̗3\uh؝NuRcQgF!v  > +8Žm|hua>~`L"oU~nܸ5TR?g-)81(k>\D|k0j3&n0`$'nùn c:Q;蠃z:IvѾ^G> ~}{?ӧϖIYO~~Cl: @Sh?h*4\bcѣG5[ TT+ZRYUk5nD J#C>-Z΁tRaz[[/@oMa!Cwn]{ >6ڌjGh{r-@Z{sToB,ZT>;wa[^^nC;"UR%rUR^+1)5RbK% W!aHyzޗ5S.M>]jK-;!m. F 9? W=cAюd}zSd`nϞ?aK HRfumV Uս#+ཇA/AJlys̩,=(1wH{iR6+Ac#@Ш'W jwu {w=8~sg`qad$ cZRzH5˥l9LMk7?9s[o}퓏OܸJBM)&jj A ԗ5ȟAӅD" !uf@Ҫm۫=/_yiA.]k787;|vvn,(p͵'.]3Ïo~ߺpŅ'5XY)젩؇5V`HQI $D~_S(68?:r2urYarŋ ܛ=˗ϯeՙ[yPן1^az, t\=+:6R@G & uf0t`mINk痎EU 0(0p%I/*^+@R[ B/icrMaxvT$j?qVK9I"* ce_o7!V;Lmmf˛8=7IZΒ imu%HL[ufn/=rYՃ.IE[c1&e<#ʴN,B`p+VdzݱU6FY 5RlZJ(0F TBAF L(vF9E+%5u׸.ro+!xw;bs%ݸ>~\ f1  Hk,f]ѕ(7z_B6ZSfp:DE[-׹؊ekSXjK7_A^ۙ6Ƽc^8 G)+ }Euck_?C*+A;8GQ%hUkm/-⃒gP t^Љe<Sk.77D{L01(ڥhyIޟSY[y^ff4 z^օ,;pIENDB`ubuntu-settings-components-0.1+14.04.20140306/tests/artwork/the-man-machine.jpg0000644000015201777760000046356712306026751027630 0ustar pbusernogroup00000000000000JFIFdd-DuckyV Adobed     !1AQa"q2 B#Rb3 $rCS4cD%&6sEF'!1AQaq"𑡱2B#Rb3$rCSc%4Ds& ?A[ YRL"JQASez#@Feػ/oȨ@<ΨZ;ϱ2Ə_Ճߩv.䵥*Ӷ= ǥTfV~Y)[y& Lj`B,k/T2s K{-KWښA;yneLU7:aRnB`pГ kFfd eZew1$eKy#748 @Kie0!.s4O;,a3S!h'ks~szj-M-om< %)WDf 0TJr kԧL\%v{vͶ֔VkB\̢Y6.K;0&q P.DP<6[9/PRi3u49g.`r%Z鴹30h[SuJ Oplk+9Pei0̺)a⃺uy'EēzJt=@C( nj@8pNjzy d6 0i ]_(8&7'ϻqkLՐ}\ضVbej֭6ABa+z'&58BO+%>Q)a{a`/b#npd򩔆(t0EvBqǎ)5jU~Vg鍷6ͶhPm64AyaJipL(͸Ob vLF|Jۇfs~a\u[㾚mB'PE_#5ğPddH8[nNNiyieSJ՟k?r1mm{sIT$uOV~g7`9%1$enվrM4aϜz3fnRH+sA9ztjȴ L(O2I8 ^NC:]e6K@s&Q\W nDzht+#JI$jIVMRt,yF_!n}N.ݶtU|U1-Yrs+2@y6x&%}tCNC/pnFŀOb'7[=SPsM d?#5,$-.ܻI d*OՌmJb5n@  $,kQ-2p-c ^H&Ci<`k^|+IPZTdIP$??#F@agU-7<J1p3dS4ß%2H t@ @>#I08g0uT|bad ijȧd >O__hx+ѫ0(_A%G6uPˈqHZU8:aAg0Tޔ c[(;Hq6h5krkS hRN< mR@q*9$fHR7>C o?B~~[O#ޏSe#f ef̑T'%Kʐb ӤesҘ?=X{}& 1qNn۴1rUKrԹ&1aIJ*WW;φp,iOdyC˵i,fR-ܭeq54,8]BRB pV Ejw.߮闝/O1.8js3X<;n6ݴj bJdt: ӳN[eg2@\t(gaW=]GeҪIn(JF>] g8KV廭W{YKQvOwet $5J#pQ1d>1J[L֫ssSyܛufuEn:-ŭDNClve-׹ՇUٹIЄ*Z@e2"o6۟]Ե*F~V9ID&: MF`ʰzjW 8FS qqq?ˢ鶝+H;wL Bw&jki=0 KC'PIs۲|tq;?hvj3U '_rVo9198[)ɥ<|q^:Lɣ>ƽ>nFϻibٺI(E4VVRktmÛL'[)<T9d9x_TK*cu=OغNH#q(ѐ8e6FiOn֥dmM.j:WsTyW˷\puIRLSy`V9#-˩))peZҏRr?gd&cWv 4TFy䒧G!}>xݺ]U?~'(={6j MdXS2ۖ鸠:ӏfdpaoWH`ی{=9ٺVaO5Tt8CHR-N,8hj^>qrf튟u}i֖RgOVm[lfLLkAAm>N u{ZN??(sK1CE{ĝW B8?=-),Aı"JyՄ eD Ic_jW5P^`%%@Ēb;TOV\QlT:Eb'#q.oI󯎆'b_Vm/LWqO04Qg 6.|0yU"ag81pn:2d3 L.kWqԳvC[l!vQ)*3.Cm4BPR5ǦhZңE45@HnNYlҥU*iu"rUz~l1ߩ'JJ.Iq8x 9nnM7pR,9)Fn)'0t:b>1`~4[7}YVzU;ͥ(Eb_P"uV6c] bFTLL(sNk0 bJrJt`M-lT)JMQKPh[`W-eC }Yp'm۩̯q>XTӵiډBD3eI kugTU> NXn{W1G?MP f/烨h{K̀G摥W831 (p# Aم| I-f-'J~< TbD81s1pϟBkH:@ ˆjޕ,\`#>PPuiB3ϟ< it1幨E\㜤LkP̨]0& pWLcR":0Gx03 U Q8Æ61 :j"*π:?2TS QD3(i HH $~ 8H8]m)$AG,'Dq),11H$) z-'F  2([cP 5J`xr`VQ3XϥЛM4\)KItR%V<}`r9ahKS>1SߥК˪vu{L {[PJ7:S󌄙3LPBb(@.S?=`Ìsn>~a'yuuy$Ԧ :-mH$*)BB age>|k}c{j~{ipmy-2Ӯ\!\ SiҴ9( bONd~H^2#s$gi4\e!9J[y\K+ j\lnՎMr}!.u)iKJl<GfLgҴy (S8>P}cQMf$jF)JſSSUqVޗ[mԩ9 q }C{?j%RVĈTCiYhJ ʝ_Y W SRɤ!NdEG8F)?|<ŁrʋjY]J>4Y k1IKWm(c;j>ͨ{İ!* 5m-2`(I2 Du]<-{P~QS꣼ \s)KJ#K?I%E)HOT깬V&'?!2ƓWv 9O-RL޽:%) m ,8(q^^Sq܏h4R]N7^鞄cne Dۨf8xF@{{rn$EE΍%))L@yv&͖+Fۯ=R޺ᕝ[6M %b0Z%X::= ~ѸtzQO-$5(JG2L0{t)Ci[meIj)93%]o kϯu7Q0aYKD0G3۪WZVK 3=};he[Vg30ߺ`2 l dzG/,iU>m .gzDص; Q|"cQ7$0T*(؜pJ&֧F'^kId8s}[kgLKZ"É ]Cׯ7[z9j`CW0iMLz@xbJ!Z-շa*3Z]0 *qCJ|+BĜRvt1W`87 W oB2BҀ?Mkbf2ǿ'mcWnm6pj -ƫd[.;wObY-pλL=*Y>=jdрc]ҶU5GLRCBz)69ʵneJ[c10ʼxeBZ<`!]tqyQi78=*ߛSv 7eiQnn04iF`8boZXSr`ϗ?yxg}˗}%nuä0*UOimnjӉSTH 4)!>kQ{S׺>Mt7[VۋuG͍)25sSzw1P?feܮ~x  pA>:鄧ߟ.r+e}Θo.Xj/ԇ2`SCx;{\R>29$Az %I!ω5OD\\uꚦVzxG8zm],2@҄ )@**^ Sq4Ҧ)hc@ ADd #)!YprMx@U"180-!Y18#)jA Oq|(~VHEpii0\Á pTA7)Aq1ょ04$b&G] 0:LGp\R ! IO.C㔾P@aVu"(O'/ $YBd$*8XP;WLo/YFp!JĒ8危'*8< C!: P( 1ɌvpԸ`",8 q A+) xrZ=`g@K2r:iHꟄc<9@\x ttd)CpL=:1Z=B#q5@{0GGT᎒GG+)#GP ӹ_^忭vL싲sHKS#Z_l`RIBX]5˅9{(JYT(KQz\H%nö 5Zm0ON3%PqKbsY?<8KFMFތ?no;{F.Ap0jOU3Ru Q%g[l LngYzWGQڈ{)'.+)م&[ӎ(󮨭NjRI-7KB<\\ָ՜_Q.$O2`sY11`FJUpqʱ x):ő=\WePqamC yYxԶGC|o1z}mUZ/ bm:KՓn]I<1urvJFv~ND]S8gd";6o$)X%][R]r6ݎ>=c?]zM2+~O(yBs"{alsDjF>^LN6DJ⹹o֬Gx\%bFDpk gKu _VBIPM#$rl¹6Z(@)@ m'cL1^}Q)4NCaꎫ:bT^m4xpq{PU˾#Hmq!i1wmo⫁s 韩V[JJ36$?%+зq,(伳iLRA@ρT.k۹Τ8n&ݺm+,;P 5 @7& %?`pLTaL'`&ա`!^ &eTV<:DsH*>X:jۧ?cz˴tͳ)iWqnwijHJPIIA9H&7=Cqy>vM.EVul<@WQ7j ),%H%>yg?$d5$ X!0NXqmX)qTsXwHax4+R9Öxג>ZpG?f92QSjQn1 B>00ZFb`43>|r$J9|D0݃N:eBњJ@1)V)D W1 BP'>qc`"LSe-i?n`҆P]uIK`D@t{ 2^[Yi Tr Ie$h'Ԑah5*$6z~.Iħ[PuʹV3z!Rmf7=2@Ja>CXp`'a!ݹs.jsse®AHn3"+JeD0;hW˿58soNN,Mv{VݲH&ֳlO3$&[2ڔòo$<ҵiʢԪ0RWoXtdif̡ˉ%39:*굔 (8TA w_яkc[=Skw^EųCNU驁-QϔeQ)HkCĤG dP %@V}>`3Rln+ͩmJ NNi,̰!C9Aj)˗?;{}0{i6Q &KP23v?0ࣄ ӟ~GJ]ŰBi;ģ[@ylRjJbi-8ڃ3(4!0VF9Ds+.ݷo﬍8kUۇJUNHgZˣLBKWMq%(f>?8(9ؗOaꕠ^.eVdP p}rH!HX|J.>=ҭ*mƫ25aűXP켽P0V3˪0R['NO|^"Ws}J"7-|͖锩sQ)).dQV,bqy}BґY8OgȞΖϵۨC`;lD.=@ fAyePTBaWqR}oڡ'ۗ=K?Ӧ-ٱqc) μ7|M\SBiNve˵-"|GO:ԽjAVĺ%?8TVs,JE2$%'eGFBR, dyc!ӳ+ڪ-*TQmS9${{J^egioǻMM{蚵 {onv펦1ntNYuTP|d~յVe?#~l/7T@ay$t۪άĶJ N+dA+m'әȨaӖwZ.IDϺ-uPlX aф2"ݴ].˕HL>KyD2PU썤sAvI?syts_QM*N Oy'=rs(mPa)j`=^Pz?x ڼIG|Js7i0 ߗdCwܗ͑9;t̤V)KN^ZIT|,=GS+isOnb1?FC޾4[+uHumD2Af\躖䱖TBP%e LbA#uMPþz=IpߥAɨf/M;_ldL:@|L?䔎Ic>w-R4C1뮄dz)fꎛJM "kP k!@I#ۄ^)8U*RHK>j )8q 4Mx/COG:ඵ^ 2FjUnj0\p޵ٛ&M`jDa̐~V]3Bޟn. o>B(}M^]:cRh2_p}Qo]}s]qĺV^ wN}ZfK>11~[T^ARƙA\|<Yh$&# <)ڃWq ֵ .I'HQyϖ "domcD'6)"@=/#òb!>Ď\ =qQ*,H⤏l~vKV`pv*iAkB`0?~F1%DG>YPH$g4 `hHP*JƖ#LJbc8獕e,' W.PּNd9LoWNgp20@BBOYcC۞#霗ـtPrtJ N\15 )O c"GpYTIRdž5.p+h$2?;M۹^wr[d{WWmB&:t5 t*IPH^pOv6h7 n>)V힩ə[yJTWi=z4tj' 0kr˳ACf}QGvϷ+w\z}ƭ̥͹'YɰyY7MBVpVvU6"m_tTJz_Djgjl+X~YJs Hwv7xvU˞韪ųvTBT_WOUrbif-}۔ӱ%_хJݪItfgnisHJ&R$xG=}UǷKw}in-}؝D6y9첂`tD3H+J1~?ڥp ZaK˥ڄ VPffU2 WPpmj0; 0/ϪFź澓MMHvrkjY zB8Jy+mJPSP/D`AC?÷eg`?K߳vfQ} N4$3*|"*,6^@96Cn{l.;CûNU>[6'piV6}(zzsI)F Lw<A?o]љ-y_2Bf  *R-27~Z{au_]*?H#! .SelĘډW%J01&'rqQrkmägha:'T b=E7@5pJQr"QFZPGQ4@&`<-/mܟ&x^ )%e̲f)ZqIXzUǑ8_[=BcFת+T *Ԫ%BNɳk+L M1SAqA~ i{>Kr#?x~辢Z*eƥ[{ѷVEqW6Z)?uC1匿xjmeZyߦkmkTjeVs2kmgy..hS)T5Dyٍ?Q}k[d푏W{, 5<jiÒEɲ[-sm÷Cͽ* JޕH:5(|*qI=һk S,< rJz'; β`*2FDq;w _v+SC%,ESZ-Ĥ)XmxsǴ;nB٘z)j$ +gť}V:iM MEo!2Va9U]Y]k`NN)7BsvQyZl$\I-ܽvUR>r-e Wzi0ٰ\_;SF7?X=CWd6*]'J8j#:u+GS-Lh-@?D X~NݾelFCԪ^lU b ZqEkڶHMܓnNA$jV 8)GĜS/nnEtLm]?h-B3g.v$CLOۆ4*(1JNj8a- JGp80dۜ D0#G#.D2Axࠉ&ZT OOaGJhre(£8cA~R< +􂌂9F>5tz:> ϳ V& iH~p2GUFRa`P`h-q??{̜J1LPӌӊJBx >n s x4B}n9A20rC'<@N'c  lcŵJ2D#x$*'xs' EYMTqDO~X4!rPCĚN0L84dPQG3#D'}b##ႂLt'TVB1τpdtfd,-1'@@cp0 .DGÖxD e*&2Ք8: T`OX*$R"@LA,(Qˎq0,RcBSc' <<L#GN~_y;f_B잛()J=eԢte25FRe1!.Ivf9GnKJV1?WΑGyf旟Ĩj*jFB~'ru_wWNWeR}뵊Ԧ'B]3.̕8\ @4;Z-73Jf~JaJͿ+2nk6jL VRF`}MO/c6N&B%MMTIЗMK*YebR^XFQ[.f׿őXv1U!r-n^^'0t? T UCi1ڸWҿ>.Kf۹7է?dɳ?7!)RCO=%?s1P8 N8᭹okd3r~޲nVrKԕѤ]c*fW>*ؕS& yzYa'-N8rˉƅ-u\^ ۨHrv `\\_{ev߆s5Kgo W-cm5ⱇ˥3G:gۛ.C0neSiGr"ZR@odj)XUYSiM*G -һUQjxpF'Qt*{{E:w l\уJMgwTRjNݴ҉+}Cd|*ϞvT4oyt'^.nRq\-:m+q(L>XKx~^%~) ڷZ=üi)ޢuzcdyybHqFB|\zSuM?5jLZm9ɩg>G j `1gGhz{r\{ʚu$3 x!6D_ M,IUŢiC<|6n6~.Ea%WgRVR.]i+YA?7K)RgvhIÖqn+.QK;I- *Rbnz/ƫy_>JK6}1PDh`,vG|x΄/+ퟦޢAgv߰6fgnYD$qǪmYR83uQ$?H3<{ںz@D:],_.M8{ujNZ(Rq(;k?(bd@eLIv÷Zq5n'ɑs%$ 2z4!$|\zcy.k]htX-au&'/~+TZ8$ QB8灁j@RРJAa2X/ K2VL50`9ęΘ]'<Ӝ ):|p b `x$ݰNRp<<@a͝{O!=IVq4O&Mǐ쬖ԉ:MQbH-LH}uVgG6m )KO$wc{L+eSZG~~,& z BMΥ'*[nn|8dWsOa(U)hֹ'.zϯNjܝXJXeޥ̐ }>=د6A_L[E֚{ힳ{8[\7nJJ$P*O?1UR=O^;S56ۚuK$iB%A!ȈrW2rB` b||SPW8Hi@&ġC $U ˏM)^u{["D}uK LbZWE~1Kh.CP|R"sэvֽ X^?t|rޠuR19p#E[j%tgf`A0\:ޡ)rC D)n6HBLJ g٫y+֗,uH5NA" i"pħN N6iR}]sy} ;FUW5r'%%"ٛrl Z.Y%2Ͳ„Rӊ&'PN5-!7F6NmAxq,h*X qVASߛGnIZ$TPҕ- $>X[g髫=DdUI@YJhy*L;4􍼂:k)<n$29b_yZh4>؎`d_][,:1eoQ(T+bܔjF`YICRR2LN(wjK^ò=97mTn8ɜ #%d# &BtH5iR7P#Dk4Gx5($ÉuIER= 0! P(ÐJN JRB:@Fqdqq (g|9`9ȆpGL $HÎx6 >Xk, I*X"G/< P@TrO B Iq(#㋐3*>\uɥ(!%2"91R21!u Iou[뢮*mE B5j. 긻}O,6y!J@aг)Q'2x=Su=jXM`yp3Rj&I7Z@,px `rm NVr(cMPADu8c)9䤚u//.:Phl-j$$piy@^|mR{n/r5S%EUv6:0ʘۀd4!Aÿ. @q^jNBMvaʩw%HsCRdT_\Մ֭w N~B`9܇|pحtvʛs]ˆm/20k:VÎ);$Rְ` !}9@rًq6ճ0i%Gm .^AID N=*H#!QUXA>P>LT*-g^vlma!MH135@L\rNa*֭JJ@@+]38%6N9bvgLt̥F~ݛE$XK)K@ Q)rIRLAT!lo}alu}AèI+4 MF-W3rrW;nRZʫS ә$kZY<6R *8q8d{:-a۔쫁y:mnS32slMm,>iKB {r*tnTuFZ+.TSERGN"i<AFuU /pqv-׆uj,Kzrveɪi<4i*lzS"ƞC~8Eۢ zꋏ#n\<Ɍx`S'Uͨ.IکfE] 'AL@&*#*~N彝O& ᗶriMx#әV׍}W\fܚQu6uJSźn)j1OWGzʱ9m "=}2bDx|d81' R IJc}"1!Y&Y bqئ]y|ocO]W!f{[C46E<Ɍ\5; yF;pN~atCQH2xPbyv7C|3 #z/t֛ȼI#LnHGg-kr?dPU%!kTA J~6,3.JEWyr֟Xm*mT5PVFq=gm#%NG=.f=PW|1S޶ݹy7/LT쌺o7M}ޜ THT<ӤwUkT9> ;YJdgCl{]@;Gqf'?R#0Xm*uHL}]u:zV;ODD;w)\QZpQmdqSg?f#:Ox<߇#4__7;7;V꺡̷̑l{r[t&Sse =wœvOgFٷV/Kk1PP 7CIhVRRPTx1Pܚo?<8G7jۂ[,.軋%71Q2gnU4J @=7%sQ%97V/)-`$ϗ(-w7]f>XFߢ;7M;+ʼ8xPӞEUlAZt ̃ǖ+3B6P\`WÊI NJ$<,7{$q)"?!u8N ҂7``sa1P+M1IrG4& T!Ԍ%`\c ۄ%Q&ԉC2GxGTa_pSLiA8rpX$ .b<~bO8At 팭scy"d3+14ܣM-^Am%JQ>@`*χ]M.Q<57vw&otk4Fc/KӗI'/pԣcal|;毩y_ܒEMSWk'&Rq@AÙ\ "V[҄G3@wafGX6m֥CmX ,%1PQOV<Ԗ1;qCCYNA]jcL3Z8 Y>ܒ 1͔E#Л}6Z++Lr RA J"xp6A[\Dr>w-ޕ>MMIې |I0zZDtM)f#ڕI5YͰ a'uni}]|}CS*ڴ"e`V#L> I!qPBGV rja'4eSML{ih)E%@&T1g)c Ӿ8 db<6~y(5Hg%[83en-JRa 7d;-nтOWU!n}3 R.l8DuL^X> ʔePf'6D~ԝpq:\7Lv5 g.~MwnR{o*Izfۨ,ѨRZRȸK!S 2 Sp hWzD/G[kp; KԨWN~I(VFYRaP'$ G{Y]bU+L.NedXZL'J]!+HfN2MynOßO;T[}B^^~yғ,%+2%+1(>tJ `#?ܵG|'&c:l&33 @Jqk@fBPN8]S/z{r[L?-Um54VciB ܿ _Q]nó+S^um<6( &bnPm,s QŽC/9/ msu56 Oh'j+-TՄڵ=.$`VY>_9TCEI`:vmȦ뛘r+pmM(Τ8P]p-c RhC{=v.v^]3>j7 ҥ>Naˆʘ҆RUR0xpW bL|~һ\7چW_Թc/9tI 0L6D((aJ4r(ЩUͦ(RI%L&۳(4]&2FpJ3?1Oj}cwOrǡsѻ-WKHjLMCfVHزV AB)0mn&`vqm!a`#%QF"3ږ!# Z# >0^}e'PArRx:P0c =4%eҵͺM6)DIn{@$RQ\L1qmk3sICZ),e`}^c笨Zv[Րcvw M*?:[yMŴ/9Gk\$PE'{SOja>5@~>Xw7E[GJzUlh:+ƴ}p'$#`,kNBJqSnKEHYN@@(3}֥Lat&߽Zl-w5Mj<%Dnwlr@^eEJKXY%e#17{>] 18[?ed:E6}-?B[>Ȏ[{nuU~HTtΖQ21+s6p?g/I֗ze%VۉTȋnHQ)R3)M`ib]\!ĜFZ}W8c&e6ʓiRol'2g ` ~"IIaH"c?)\Q”Dgq1#_ $1t$p"ҐhE&09 -F T5@gt72A)1!p  #P1$G|&J 3%BBn#Ͻ+))󳮷-&n$D<1 zCs3 _@q,ϼb6-dԜjD0ZC*VRD#O_Sk)ikfL\1Q~[{M}M- F@ Js =ӔĠ %+>$㗺3.ܘCF$0&0IX~V\Z *i; j!"շ?埽bFiY3L34Cf(JH!00"qnhO+w)CAVC5!{I5:[S!Ab8pB!O4T慎nVrZuSd_[S0Jx%*>RO-~I2u7.N9a[omD c*Q)!g'Tƨ%GJm[mV,U>SOa (8:<(到 f;#Fh@Ho%jg`$bH\ /Ӕasp$wC]~8KEC9卭Z#( թ\Hg1J+D+-qHږ>zu&'MݚuZP 0x% iqFHeۙmӼ$pnm3@:b1*Vks V`iR ~]xhFܑq\[ugIkuٽ&Qt+4v)FYDKziL3RTTTSjT}G#=9wՇo/ۿ"Ss;2Nnʏ-qoЖfsMy >fff]}@pgҦѤLHrnQ~gϷqݵ6) Q=)G蘕| MRbW2d\#ڥi;I饿2g\\tJԲ4>A[#z ʍ9_k!U܇kv\&PcTevġ,HIHJ8j Qʯz aVJvvzRFLIpj3BYiP1,eIeDhYaud~J;ުw22nmf. ]3-3\~Kt(IT,tsCcsfi]ҷbXB~Zߺ] i@'Tİ?A) Q(E 3¦5&OkW(-syVİ`2ok O6}: Ks=pXEL3(m#CekqWI( T5S{_OT/鬊u-I͞G^٥~ZA>ps)pDAtDaݐE.C={u;Ӽ^*NV.gwJRc$2@Bn{ծr7n1t'{TVcM)1xd3A /}Ye6іۆQӘYT Ce9d~ ޚM0_J&U>y `)`% @d|Az7 "]Nt۳u*sCGjk @'wM/|L%nRR=(p⹼n ڞ1z}H֣9^]7CrZ-Ὠ.mx}!^Cy5j^9]!}7;}ޭYwēMaU+R̹*V L><= 9H~S+;I^ТyHkڟ9NH7U-+~LEl"set]ӳ;2j]PWS)).q zz=]Wc6n\aAٱ mt0rF8vfP:LF>t?UY>̵p#SdgN.lj:T%$3J\tGʵ`,.?rYT}?h³i9rkqq슒z_vL.S5'R2!N'3߼Gn٘*]̫hw~'az}FNMtO\81O읝R[_9q2O#|g8AsI%~'?iF磻J5:WsbV4j>g|kDvǂĮq<L8,6T2<e"`ZK[QNC#eq1HJS$me*w?8Deњs3my@HMzUm7IMKĕ6&ZRVp*DZI$@&]iˈ)pdBnXi!oo];]eTtԸ-k?<}Ҷl.X3?u";ىU\6%d!9765JR BmuxD{4Hw{pF̺(<.G(@8p&{D;1~|lװe-KnJ*TQVÊҒyrY\b?(b x^٢P-rJHM.R*&֥MQ1#{J۞O09ơcgtҔ!uHRI8ϨAuAL˴4Ҟ[krYY| $<kJEi-)(M PRqxe>&D1>?nG'$ Z$PgY\ӫZ}GQ1Fy,|B'f*"sHIGF3>Rغ2i[5)4E‡Hl禀-j@ S]!rJnnaB>ϩ[7jYt8ڥ-]nfqR-%\ddtX3SHK섵(~_Ǻ9Uow6;zmʴHqQī f%K⵨**W!FR<ưȊ4TH#2A}Rlwalչ3O<)o*R\ [Iҩ7PAò@;._cDn{5cn(UB2Qi1$0=IҰBa1|wotM[ۙIuKq%Rij&lk@ZXҰa28$}6}tgu[j\wCb{qi:W0D%jJydBӐ+38 }@m..cg͢MI[ќPiL$ҋIњqeNҸ- 6{B1"N1=MiAJKFZRgesR3H%Mx "é?[L(?[nzUY4NS'[-@~rD>X7+nZw\vjkingi9`01'?.NN0BRy7l^R/?~U E!2)Q:ݩ:u犖"CH jhQ4Mpw]i4ԨZФbblm@T( zC'>!&uP\]6kKH{z/dhQuaL,i񿓒dl#ۗh-a68 RF^zխǪ8 cT@CvKkgśw^vR)rVri2?HD(+JiC K ʻO"=ި]6OG˶ JM$vNhժ- 65yeaOuŝ[cK],6n͸pUiv#(uT u i,iP>т5d""R&=t|T7J©mE1-2Zj4 Ir8Mїfß>t~B]IÒI٭gsln?KT!3q:e67OnپzΨj^3(?4mUvvviJjXˡiULjH># l8ki/ "OQ[;XwV㥩&n &޲;nKj yB[z*eJJo{Yַ'DW?tP[ͻwk bhw@98̖nU mfr̥&t of J85lEj0q嫯M:nꣶmԟR⓵Ssd4ytLas IRi1u/0K%>mS|#V՚*KMN OoqEa!y'!ѵtJϹ>U3ď&0P=ukoiN3G.&N}X^6꺠plrKG$~28w{Ԕ,}7 |{1VE7nnU2nZ\kpɋrFVR$ԄH02! J@{1MW̨\8ǥ,-֛ih@քC$ %*pa~`A(Q2`P?sRYRNqDq,^D@`YCJpC,%' ^ ΜȜhL JNG`YXD 8 a`i̘q;#@!A$$=V+[Yl7L,⬅&RVsQq8=/{⤒$cxn(!4V@y[۶s4P4J:O7ӷjhU.Jb*N@tGPH0!N)uz ~> Z]~ڶ-JР4!r !'q%R|DXi{xMdQjl˸U:%d1`EexD-['Ӵ +ZC3-I6%$9@zl t5}h'L&k/{&46R \”TuQ(dׇ5ie[*ipm8ݣ\ Q37:R̓[gre{ӬFq}+fRG8"}Ho|ir͙Ҥz5"],.f!֦&n9I!sQ?pY`d l7_pmL Ai6ؕN8kW1'өyV|mDFn7RoQyQ@@D ѻV7Z[2)ny;*mʸ$1R*Ba]΅:V* J{;Ji[3#["BCM<:wJr:#'zTjB9<g}:T>{إmX{jqnMC3%#3OU>z 03Qʹܾ͗tY@g02zmI"n^K.I)mmb~VY%P0 Q\27.yF=:=mlM!0rJFhLquju[Tu#yLiN]o(BxaM,N~PK5cje^~H*U8%itJӓ,0-dǐˉ8(Ii{aQ)׾[6ZP&h{7!4'*).DP I<.H/?!Hl3 uK;>[sS۞(),Q-ejRI*J%8m 8&Շÿ` loWwa;h졪~#s@#0mu~)[,M&be! F93pF}?}Wgͱke-~+: !ϖp%.4zjH0vpP#~s I^wB̔a2Π_HHr)aI6 LQ{iC)w 5Ѳw\nKi(rzPSljT{`Pwֻ\c$&]A;_V*Pb~8Q2ډD P B;,v%#=-<öF;k]tWZ i\W/2т&%8RJU-Q/z6]OmdҧԔ8-i81V;-{8ZV%e^ow3mRmJBr陦5lnQ\X2HQ gW*(GɝkvUvQJf[Ϡ1#?&ꘘy'0I p,l`?X~S~lJd|fz+ƃSlSYu]0 6TقTRJF;YD% EPŵnSxVV*J^L3N $ @xdя+})޺e64 *k2C3s-*7R<'Nj6+ ˤ$Sdj]sA=7MWC0 4hɊ^E֮ *oL9$G  2ZѶ)hkFB<ﻆvꮫUٸ f""xG KwP`~cA>8)X6䄥qܠ.M.e.Kr0z2C"⼆^$bvv%G+c4n|Yیk<ss q"6ooLSh5]3RS78ِXh}#lqn䤨܂15Lוys Mı@2͡ j`*DjqlIPLJ%\K2sҕn>鷶.Uf{#\mjIΈD*эnʅ4V`p~Q]c;}gQ##< շѪ:^$eLњDF3Ӣu)ǸVިm ⟺t#KKKoctioKPd*b:Èz2#q^Q'6N]Nޣ*F@wvG?(}U~[̿o'!muSˢA7:#ƛ۲nҧ߶䤼N4ZBH8DUnLI-;bv9gҕE))PHK̑|B9Lm6%Ƙ$kY\}W~[ӛBf%2(HXh#JDO! a~P^QyW:d»}īpjfra91$)|u 'eԨ_k3eŕjB}$!{]߯o<싓y Je>gU THRZuRķM<ywqvYӞu#O;+ڭFRgL<*imRʄ= KP:T)FTϏ?ow0GI?_ݟnwjKrܖug%I!U+23RSmOM,*f.M:-TpO@).H7gw=Y}K{U)8줜i!Sԕ+P8X[< i!#ۅz?Gפ%UJ8n b~slhZX`8TH8 qg8'?Uw?g~e7ʢǕ'jR31\ vrKp̓J4jj=d:/.\ lKLe\ (> 651mWSI $xluf^K)4ĽZBh4޵KjHRILF9Pnhpl:~=V녻n|KM^8U?]mIe-˵PbVY 18@hqxhSrדg%P{߷JJv^Z)K FX)&)J89\w_N~g'7cc|-BvL!:UexuSP bDU1Ȟ{=\,|]K փ.B$LNSJi >Ґ!u2 8mmW5IChve4ym$Cri#\`R{CGnl5 XvO}w.*U*I8jCD+dGt7ܟ֝45"PoJ~ dxdbSi{#;*\x^  hJЉxA_t{.NsO<JBa'ǞXhT$UWVψ0j2K@hL9RkB"ھ$ uStvU[?)z`Vnc>Tu 2"LUhb֬ =?&4:! 6J( H e5n.I.tĩQ_:۵6 egHAj"˺vb}Rs.(1 Hr!֖mJcB=e^ ݫsX渜4$H{hݔ”>>Gr=~uYxC*7 .e6ʿO%SH&te}}I?(!y]TT zbv?Io05 iHt+`Fxպz6&G_~{ ڴRx೗x8No[s4-ʲ Ԫ#(9 H>p'pӦwNC?(NtAR5wx8&֌:)ߙgQV%㭕:OŇp-oY59Lu]\qm?4ȧdYykOSQfKk"S #LN*u[q3U:}dpqzs^Զ7M J+ĖJǠ~it?Ua\İ8@x+7MawiW}=.zL8wpm"m6&I@evK1H 6r yKԩ& \-m*eJX Lɣ2c?nΪ޹T.0?tA,OLf>rːZhp59Ţ HB[ m$6(JF@ RIrJЦLM@ AIQ@CcɌ ``*МDem$ßLJ< R|X1 B9R9@ScI@C8像gX y/uIamdQAyq݂yAF1y\pvBG\R<d¸!JCEux;bC<#g-M>.ZfX:RKl t JI&惄Ȋm{2\ATEw4 vjYm:gB8NĄE7M9A_0ԹiӤ'ҝYXM#qEԭ-7,䒤2WQ , r:łݤN?f|Sѧ=^E?pm~$bӎR17>I@oOoׂImOJR 3z~i a;EiҳK Z[W&f3'ā"] vE}B9f}N@g{GΠ⼢ЖVn(J|c^6;q 7͂'iX8eKc4b,)QfC4J#AIjwT #MsjI_uلAQR@\|5"rn\}GÊ$q  XTbbLa~1;eGT8O>֏TAԘ$a&B1dfQ*rhN/IyG19<< 45ysmlsR{^]\ܝd\Y%O3!).t؞m]5L;ÚƏ'cG?v\}ymؖJLOMYѦ.Y6fÕ 1ޝovv.JfTg_~b P1w_wGޕ913nn534WI3(@ %+gIࣁ  #z?Kի/KX]b㐖bjmtʓ-)2M%BTLx .Ajݾ/G׫˫j'%k/λHK(UTqCIFJc$$A>~AnȠI)īԭy .* DGI:0j@\ûӞoj~ٻ3M@ju*zJP}yS3X-CK޶q]b+_iHSʳ!ƙe-2n:(N1N1ݡ}A{2rUL 5q20í36nmND^!CKt7"8ZÕ:q91;<թǔˏ-D3ߨ< e\)qt[Q3)mfٚ#`)_.6kq9˒m=GPѬr !{[r~*mcB#:zNjW2}˂ᆒ~hbT*UڃjUIjvakY&9yoBb6ѐyr7 TuZ$8`!:(:UP08P8b#!8;#$ `j@ǔS\ ';U)5$'J>OR|\>ԶpDF#5O%޺!ڂ† =L]+ MĢO)0"Bg{] HƵxǯvmگSU!<6sY>ZqR>g )2bRQ8Bn\ GJӉn`qTqj9j!PÜ-jtZUc첃V($mOqM1`ʅL]ZXh p*%jŅd/uIy mQ@RL>8ܯoi*i /n[:r}K@ ]rH).q!؝^^UTڳLMHA/SgF"hnjC~6<.ޖuH`$P{Ua`jN-XJ6mgȤ%e\BT.BJHȂX[/-#}si;KȌ1͚^[uZuOEy#Ǒ-vAN>l cY$mweSzz:T˥NQl^]Eu o9'P)#H9 \S[/-SHM!ZF3+/YRBC}ϝbaI o0O%tq;kvR$R #gߎwTۀnJ{ D6I^򘢩T,+';כ&څ/RQ@`pf ?s?0IMl6b{ܸG&qhXshm-TZ[s0/,@ RM:K&z'=;zZQ?UGN]Bt' I/( bp $c2jn>!.;u”SߌZK{֘X&n9W$Y9Ql("%K:Sk \qJnٷDos]TdbmR'Q-K4A0 ciV"vN" 7%\8Y=&ho]1l2[ZM/楈a-8RIFxp 4j(%"{@J@҄4;BRzzqK@Ĉ4 [:}MSZƀ#W{ؽ-bީW5IW ')-7B(R&$!5߬ !9S"nns,Z!JYE޻ko]$yIRfRߨ0iu5h/3^!`XVݽfLRٗ[ҢV@DmV 1j7fiٓ>mO3SKJԖG{!]6q c}ҫ궕&P*V'.WSTҩٹ-#"}݄+ TRynJ{ĝDAJawMқ',QjrҳEc[eySm?mF(,s(8)zk}+:;vm3ꚍ1 @,G/Qbw:FͿnW^R 7whkr8 &1I%Ldz)(c,*Y|xJP|!$H{{p݂eЍQ\9pMO֜ڡhz_~`դJdJOHҋq/>wo4.VJMdqHhzP\M. гGg) _ۮo`eʹnYpPezFr?/34RK ֵJa% CL#ВT 4;}9IG}=Yoyɭ(y -'2fֲVJu <@ 5k853>Ȕ6KTZkGD?oin5([M++In4jpDL5-VLaPW.Fp ۟WL)n^)i Oj',7Om̒{Fm׾o=P-ɵlEjeGdDA> '"}O_01џp8KYAMU5(]~ԣO ̘n.)QaU}{]Z_;Wڽ1fZL92 |q=iR4e{ӏ˽HVDQC?H:n6ѧfarU b)7.-+Y4kKӈ#p{ztumZvRnWC,nۯ_WFJb疥8Yo%NGᨪ ZꭰY.|@vDm>uʇܱpo#s[tE0wE)L[Ks62bmQ:s# fkSZ\uʱv.MʭR4TW@#}:bp0gðN<վTWI7wNƟ;q L-*ݕ}L<[%&$%ؓƑ]VZ߷oHI@ Weݺ|2(O VA! @!\1Ƶ􅵫EK*ULjo`VuQ!B JD84$^]bVNq㋔tyH̜=,P`yϐ8/*^m}Jyc0^PR~X i*h#XG(|+wm7 }2ST5D̓K8JeY8SNG \:qnBgAS+Zv mgv6XU'{- ©U^&FLI)Hm .]MWXqiXt5s{fƣ)R堗Xv%ǜTzwlڱH&|JgȇJD۶y4"iWFX++mimlL7!#T#K\s*m{6)6x{3ͬX6b~Nɪ[M=ފf5znP/M-M)Yi".pG/:'cՎޫmea2<)t<2.ʕ!ksNDmcrFJTixM*I)Ȅw/`N^uڧ"F|ۢaL:֧ӂ }%{P3YEè,`E@.W(T-K[QvnbU+]y1Rљl)Y"jsni1̫IȔXүwGܕYiitJR%JSq.-Jj8Jn4vUABй̧ v=Ǩ~kHBs#k.o StɩRiHB'RH!թn\KV.7:}2HDoT=߲CyyCV->^xdž*\h|ݧۿ[S)zmԤۋH.=196;o 1$>R U;ڻ/H̼Qmk*Jқԕ}xJI/[G /!v:ʤn;;zOxTKF4tӞ#jtk5NY蜺f潃Aȗf<Q]n|)qiajhTӥCJ)H p)Yx⭿ΆjgGt-kW.3]?R`WY8)4$ 9߀$ QL-0c(MJ:u/ގ, 6.IѷOmjS}÷rժ5NQENJ:ZH'1dqҐ|GחG;d}N9oLJn\E p(,kW%OZ !&%'PYl4b?STHXW3]֗CZ7ueܲ.d*-jkZu*HXdq'n;(JNù%T.KekqD9Q˔6Gu%y=N(/v}@>{Go5j4zJ:7BpL0E!R eЇ@Ȣ(%F01QG>Um[nBz=}9-q-!qp!0KDEhµt@[{{x5\Ko[~V~B^eFBx%YI0!AY JDKzcqBE45zÊT=GRIQSĸ<*۷SP>Uj%4`vF}Xj5.?QK nĤdv">b }@p#:zfr<;>1o=WjWG .Fm_9a,ӓ+uVRқI4d2<^^\]u{GLI&!A 4( 8}<Q3E01c$red&vxn?NR YPW>՘N_v 0OmvS8v6N:(Wx~[q2$wg;l&(Vx s֟IqiJDNpL7%tNM%kވd$RrsAܜԜ9dh}њ\Bi$}nlBV+|Cpu-%)冽g:$T/Mӻm:^& La,ŷvɳ7 ܅Jn__A6q\oWy5\Vx[?;nN,mFۤP?Gp+ߤIvR8ʘyPRO%$f[\V֦t-lZ4:FvcTnܷUAm>\".%z\qq*R"O/[SoRbĸ = 8F䶕/,ޙ&, ݋jdk+A:TT +X6 qOlo:<#ǰF־ln~t&^F%0&Ew+lr]]IyF y1(B\?-Ϋ):Ny NǬP*ܗXmK&WAEbZv{RM2#-NsQ9Fn c0GKv^6BN؞CD*zᎧ8EA -8ㄥDLy THCgTƘG8LTlP~`\m   dU*%S =IX/l:{$ts\D0H1q+88=Q1@?zRTH %x X;w&Ƒpy$O88׺OōV?럪պp;mB6K̨ NjF gJօP < \12&R4` B/kp8 iG"C:ܪoB \R`&QzlG`;t鋂(ԩ}zq䩹då(J՟ڕRy~xDsp(Ɯ 87vv.6V H\ @AJ7u-e0g쟸i2ᒑ(#v6K*]E2ЈC1'G[tkMXACUL,:33%\m]P8^ G:p FS+dLԛJv҃zJs$N)-J9ugl?iѿMJ)jO-$3kfHhR>Qѽ%'&D#PP$q06ŕZDg;>V=Rx6ˎiϨ}0<21eJU)8'8;iWA_Vk}v$ܫKtXlB$b#FϮ=IŇ/*[l.Fw N\nȾ5,יU*shA A*bNnq=td]Ur)bTͷ,Yl,ԓSeGmW4 'fs͠\q>L)sr]JDtAD9bWvpURZmHpynѩv^1)\8!^E՚@8`;rܖ)s+mĩ8C B#%`Ӹq?m=B $sOM_}Ә#}Hvsm-[*]erԶyu:%[Ш7ĒQNBvGP/?'$sIZ+uJ\Ž_ĥ($d꣜P>g H aY :H)x$D{g3\xd<2pTJ c0:Z@5 Dc"\z19cg72r0qIO7 F >Uyt}/ͻEID56uVSei)< 8Wf}\4ݷv3VBЦ&zX8b M)t_W'wҦ^2ϲʛ? s)^ ())CԃN" fW8?v?U_HSqwVz==Jt ~5RyĿ.Zї{JpB\ ܛyhU:TS25/hM̺VPҝZIuJ^ew 1?}3﷍Oph`ܱb@>Йm\f-*G/)fqѠ1qpLlmߥfA)ާvP7qrn&^AM%d 2$* (:u}׳SZR~Qz[*vM,k@'2AtV7mWYVRIˑ iXqgeVfQONWطZ}liG'4ͮ|_vQѐG T;bָ:(v5lzPjZ)8F?2qq-l;vK .U@0pq1{a]`4qV SU'j(7swez}ٲSn9kzI J)\̭Z&TtiIN^PLq^yǣ1t$F &Qm`UP?O:])\Ɵ;ֺiPͿI3#ӇR{wF]*dT#`mUmIŜO`:b?Sv` ǯQv7nF<8%D׸eXY;y-02=nʠ Ž-ɎS_V;Iұj"W4)p(ߩKuJ%&Cτ6ܲRzk9g.-ؿ#IO.cSZqրWQI(P6EԹvV:ҙ}zT!I0 sVfԦHp*;F6UmnNK\%OlSnٝT.)=7MNA㩧v;sp1W:f/-Y'`(cf>VcS-Z=1I87ͥ}ө<NNJV\:KSGQG!tU[7)1{FދW1.tLT?pW=W6NI=3>bk+D4&0+@sXtZ_q<5ʿ4ǰGzѴZƲI V@S΅lMT߮~{|-e8.K2D%y0xԧZ.QeBkap7-޿ĎA . eiHԵyg)= Nр>Qo,-RiIAp#Q Xvޗ+Mst֮٘U!2sb{ïMkjЧKH1.E3S[.`y$?8P,6hx #:nv&~30% H@CR_c[_d8@1!%+56"naĜpui3( ToO*m?z~$*QuD|áXiS`j}V U:ɩGtE%x;M)f唦եk(gqSK_:E"vNeKtnhwM&]΢J蕇jTTD)E_ےiU>FJm+vU]/CMy<` @s MPCօB!I$|qRu2A#ީhL>f 8${D)C߀N0)V1T)}II9r@5_#wcrwFbHjMDO⡿SrI06hxJŵYFecF5RMvRZR[B>J:G",w o7[?ZR6ETE 8XIxzAEq_TCHRJt:itQ㗆4:ESEun.Nw"Af sS&aKOCㇷVb内P~5}~V>#"Jyrz8wew~x\bX)螞NZ¥Ӂք2(SVXk5ZT8=@1wzʣ*AhyiNUCn2eS7= 9QZiS(l$KR/q{&Swvնpklx >98k]oMR'r d?'ߝr璄 zCXl#jq vmſYacrD"-Q&aMKu"33mޭkGdU?Ǻ+{mv\BuMcilQA:``0wSs>%]QhmN]f}WW9FV\qwfВE#PX񂒊cX;qϿk,b'UqԘ*mʻ"Mɦ YQNJ# 2L%~vЖ7zo*"Z}$G G$?fմ-IA*TGo={-ZڐTx?H#p]}Fwf)$ :e:iuV8,%+ 'vz{_KVjဴ AR ,FQJ[}nL(Jʁ̨c㍱CAo^q\SK5&x@r##Ǐہ%Nԫ]M.n,O3Sp8 X5߀1zߥ]jZ1Wybp9)GLZ{I}4z.AI+L&Ry4ھ=⥽m*rv7O= :H. iS,Fâ~Ch&V+uf*Zms{TԮ9 {o?kQmm6߭1s'w{يi߰_e+2ԕ*'/= qjA kik%6W^s߷K)>オ+xo4AQ*iug\7~z@+ɗifHJA<F1+A#;9 ·c X,+Bi\YRzJrÎ&6n.H Q:ӝIw9AiGW&OfP-2hrM+CItU[=[$a"}wޟ :l`NDt4MpndÔ] IIȶҎQg1cM;fw-z[N۽AVRj!DnZcQCZ ֔[y՜֣N(W_2vKӶmsظB)iո!)JR ))b=V)/{Ld =Un)흺yK])46׀yV龒mmyiv1WzܫT6*U$ ɉb*uk/,tEdy_kCrV@CcrcTrH0c, 'cxBo6R'Jy⊋ (,98qqFPmAc l"cv8gک-ʅ~==TY!KaDp8=9oS%jǟս6wx+RH3OLF4*ZCy3iC蓼ЮG@cWV5uCcþX;};j 0yL<6:dJvFwV[#H"JS^ycY: Y!sQop5zeF7"ꏶ8<g k22nYER#1\ o?:%JIBs`1^$$ng Uz0#MkRfBG2]mE#ZDI?}T~ {p񆝥<n]RsB8lt.WEMmtτTN&OH)kKu US8V'(l B8ώ'HssΛ%amnI)rNێ9|+d 漢P+4U!CڒUnI} `!'5tl 7}M>$qAZ?@1$q6u\r=yS$\Pmέ. '顧.>CJ Z-$9csi6 #FnsT++{CtniVe vOisq/qt\o}6WaccX9)߫,p7IyC=7Q[mH:8GP>Xn*-:nh!pRF`бqwqOȗ:Cs.I;>֥M.|ڔ(%Q&Q.ȘfH^-;+-)L=$ W9Vv%Q܄R~$q*Qc:>@sq-mlu~s9+m VݨMhy&2 9b1!t; ,KrҾں~je.ECsaġ-Z@D=ShkfsK  Y+O-$&),T"GC RǶ"HːJDgѪRHxcC^ 2Q;0D 8 >ݤ&p\>P4>1.j˜{B@PB ?cI!zZc1#Jm",n% B .>r&);nÜܖ. م,<\p<g +{*z9{Yz[~}F.]VoEFHͼa_@Qٌx˛YOOgǶ;Gh.nH3rIҵJ'\#q*E!k)_pWBEV.)u9/qbx.X?C@9+*Lyy/{{U6핻)[e~XB oۺO㑋Kuú-eHaiB[=r2uTr2j*I jIQv_Yɰҏ?`ݾ6փ^MJR+Iƣ~n;DԶBBI85OJkfw" K&2䶡#=buӋ(~?}<+iruu_, πtwwC zتJ-jì9QA0Z T2Ͱ΃7i{YqkSi.W7ijL!9J%"ṉ;Iu>%*#[:4괴[h۫M 2N 9K)jedǡC"!n:YldGf1=pڮI5"s uzkΚU'3%PIL Qņ5pp}e;O{=}pAGa.nc_xQyK66G0͜Ǽb7~Zgiþ-uKoLa#j7I {@F2GPqI*x.?)ńB>Zѹ\Džf TR(jeiL0d<ѧZ:mWAom^iR`R7꫖fʺ5SB8K(RG,zjo.w7؞B\Lydz?GQ%A"@ ڲ`8+r#.mk?kMnRl-!q*W?1u{6ˤ$i`w@c^'Qs"?jV8%XߚT.qόr>#u+1NwaHNRR^!1KD#ٍ6g>< #AR$EkA"D5S&Mq#_I=ejgHkm X#KVF$K8$pTIvkkUfNBaDT FP `v1[nfih+S-0ڱ U,ΡmRMsNqǙL`2ߔDÚ@G"&zBjKZ=%?e{($/]aRڥ SP @זJ *88M);ck*S;Nyp:RJRq<Ψ qCֱGͧ;چtT,}أT)6uU iҊKBDW.`Ui7#U3; {٤UNKKT2Eȍ+y)ĀxGJN3>e!ZZ3 co>C* @| HIJFC<:BQ(վVUYҚ5BYd1P,)qq=wpT-ۅ4\Tm7$L@A/t--p&D(8W}=mcEň<h `sLNbY&>)1ĮQV6鳱Ta.l'P>rۖ+M,3eNcY[O.q٭,(_/(ЀC)Y8[mJ$&oWu*Dt^nZ5USRpԕ!zLs8wB:G8n+TA&'6^DWTQmIeY9g]ŴǶ~YWvj!9"9݇o$hSڐ㤨ZnPgqSTJ4+&&Ki yeF \ 㚆 tA^Q/U&ڻj )HP!I≺Z2 ~Qti9:bH=pBV:9X#Ym]姰qalSsKLLa(bה/"fj|z 鬩-5rܓyVSnJMC.BWH|ڶЧ8#ݏ._BzUw+eAݙXV$&SsNU[HD+́ sڽ -tůJ*۹Zԓ"ϦTTk m.ǒ48n(:g0>Q쾝k Wt 9H`n$!$x6 &30uV',8 aJ ;8&t $xC yP>0A 3jtXI+W0,iazP\9De`h/:04n^|}s^oG )Օ4㗺4giJĕGHN6jX LY}ۛ^7&fZAkZ A'aGOtꦰ|ʀb&>iD/5Nj ;R RPӫ,]EnSi61-//-KWL,+PU3  J?g[׵}MOq%1&fX^zsC ;T& [P*R|VӁ4(/xfkC2ʎ^bд4Ly]p1oܔk[Bee]dFkRBr8닇Qe(sH?q TIsOTV;bT횵d6$c2>xl/Y8.:cygP,nfS`a$3U(qv MTwT@D8b/`F_7ܻ5å y$}KC}5y2<<6g{).UoUTf%TcC}R.Zo9bjlVetsOnTZԛr]egҡ|nu?.CvgLVbni1\89G؝fξT{-.A)C?([ZU8wޑWW_P;#پoeN#{w/ʾ-C@Ԧːm>OmĠ~= O?xħEݨ[ %L[.8qPn.EUR`=7RLF(ǣұ?k\PpEG>Q~sI*rOS֜C1q7JխMLqk2ݱp6ʸj )bOih.dUgETA^Tb"ݎ~8CA RM;0^qRۥ( ?V\3keo% 1In])R"} j櫕88X:. 4^nvT[7emNRxilǤ9qYŎ4M+ۺDeRUu,2FAMnWp-rDimP6d-ԡNkQ&8]WVrd#ӝ?;^d=iShBnL\Nd!yppj.q8iG,(=7RR+U+&ónJN8$ajU 5|,i=qNݷ$Qprze֥-d1>v(!u(NB:) gAƭFmyir$tT^0B`6J{*j@v; 4\T\QsM{&75B۸ETṃi@D}:QT(==Z(:Zй{9ݗԶO*v ZfvOoL:J4@bN+;/5k@3BR-l_u"a=T $뚦$Ӫ$90tڔf%c`m1ʊx"s5fW&$7.\L[PJc2=-ƛ]Pj}P##u$,AaBbBj5a[-+OPxwFym 2TΔ5/Uhdx{^mgY>EW0pbތ}DߩwVbfܪ .a_vI}d>U-ZPH"008us O|>wz-KMSR\hpRᘩ+3N_ӳIYKcW /ϫ6,oԫnh5}8MbLEF `9Y8E4HAOʼeQ>|8κp*"G{?wiW٪ٸS%!MJkO%ڳj\̩35!CU7(T)UG:s|Nɧj_!>X/5JίZ `$ څNhW,4H<3Ěa6L 8O4BCg/2R@G(ry'0.>eߘ+La3Niw1UT[UVٸ7D"M+6e\#0L!<ŝw-i\?( ޞڲ?E'8O "*ojk>0)m @i0>a[5aVuwp^榐$&[<[Z[FvjJ!+e3-+bm~ֻUR'6ܑkZ;a[&2ʾCO[G(Q MVzWdVg f*b's, vP5{o'r-MR M zN73O+/}mw{Djt zfs).h1j1}Ȃ9ȎxA0>v֤O44  !aiQ 8#a0H wmfUcJm N[J:d~G#;Y+un/iw #š']ٔ!Zj# 4cːɭK׻s\{)͂v]O2Jѿ1E@(r'Е$F1 1u^qPcʾl{{sCxhv xD)!&U`*S`I(rH50xcJ; nn8&%{mWrtBT^e%D~z[[\b3j^z׽tP~68M>M2jJԋi^iLL6~+=8Eq&) ˎbaoi{gғ8I-۟:snn IO%.qv9oe*T&M`2j%.8 NpJR 3˚wKtO86ygǬv{Kt/.֍JԨJhSWv'{jZ*[xe$p -?cSC>6QӶސ_] 1@Dlv۽I&SǢڊOQW7`,ϵ>XFONc<(i 39&z9q9c㊶=F8 BDe^|iA8r NaB*x`x@?/ G6gMFAL[%V+KαM<`/#wJmpU#yvwz$Ss!cT4@ nI>qt42UΓ i18䎌˯%JT~(IRtM18K:9%YiOfE֡x.2x}:[BH!,6yiOTɉ5p%QTiBNdCQC;Br;c'%i{{Qh3K̸K)Z=Yթ5ژD\LMݔ3[cqQ>mV( #MιFuNFZ@p{umX 8YcNFc>H#Dm͵vq7̽+TL-w!N,\^޻WIm@rw7 c1]D:ҿYm/SoJvPm[vZUJԽNbZViYqž]gB T洑 Kul^ܒOT#myN稚Rl0\{G'rO;Ok HQ5?'*O50Ґ1*q( Nj9 1 CbE*I&Mor=̰ Ԓ{rVeuDO(I:N-$1ByneJ Jc%6ŵ)DkV'";Ko_bPi^")>\ų* $(1NV֧Ҏ{m)lIonpjBuR+ ?")T@X }$D?]\Tuڔf=tBzSk5Jû4'66dSRmZLs#NV5^3O؂xfaQagcRlOI=< ƛ0h+NTit',#Z渻iRė1\NGH2~vqU1S$$QS BY+rK@RWHq̦_M%b^A v [~5 @9.1nbըd?S9ŏcoP=sBS>"%J88*`&yG4vzYm VjZG#k{=EshΔoDyM>.xPWz\\u#Q$$sƅcId^}Tqqv?O"5mdAxYA(BDbk]*)D›=I8d\?ISz\iE8\Q` 1lc0xD42 L"}9 AT,K-0I{0 (QeF$2r‡SBl&x/H(N(@. gGhFp_L|yF<Bdߧ)v+h+pAfrdyEfBf#^rl)QmY50+O8A#qrrǟn9[zz!H~Yh\amھ^]$We`aY-1O V{jMn Jg3 }mEjj~RQS ,$4f[^B@%M*ۖMiǕUsB)∹#؛Vi;a}<aC Gamow#qe?v'~fQ>l]+M4qrTKL =uD^{8R`JV%'HK)<217_~کs1yC_!nYYԭ[nӤip~FP)MQLN$CV#ӻ6gڶƓhn h'؊!c<yvQRUar:rN/#O P$6:Y`C <QG.~X0;iJQ7,/ƛ6XQz߫iz(H9ZDŲӻr.f@2BH E_rIv'$/kV[s !3$"'c<{"[OkqkangE˒4JJ09(`*>`b>`ױRgRal֘M)Z0AayPQ4[884U[T䒴p$GR[4C6J5Gy.NJ"ĩ63񕘘ZeZV8#ZW^P wdvڔq9刈3"*ޡ3.J8cRqow -*CE'wU@qb`{(OtwGou)u@T3,-00KҎ 8+ J D9ͨxvpgmY-`(>: no=Oj >r6msiJҢ9(8\Z\i42%5*&f 9?߲Sl)f)jq^Qm%)mM&QVb$:s)7QLYEt0qɊS5l٩ J|EBty(>`Y _ӞnVWd)HhmVgiړX*^(c֕ɼ~I7j^tD{#wNcW̦1K'ҷp]Qmk.Un5pufUmS37Jt+[lO#Y$B0ִkyUkO37kJw;2H7FN<%}nvgvwfzOa]vLP:\f/ <")O,n:W*i Pq8֮ik>b#$t9!W;B[Gi'Q%?Z-F7}Vd@)IIGKJU {k/6PL'.52/74$<lBRѩkassT 8(uNFX!nٹ3%FmOMb0M%ejWm@[Yqoso)Z6ȷ3\ʤ+ApXdǑ۪]K3#6gDԾ8(!8/~ë^WkiM ` }QPN)W̵|. 5U{u7*vvUipLf}$@p=6#3 TopC鷷 %|\1'W}`Zm)| I SQpfRܺsU2w ;ݛR`U{}Y׈[d(8rF-}3Y !g O%1nvNZ;Iwjfm~)Z56ٛ>! V%{Z4_.'Ǜ ESMbrtbB5NหebrjR)۟@"XiG~&@@.8I9{|RJ}D8pۅXrx42J<'08;O8MNq$G?nB m[DY1$9Dfk1G1X~*^z\.砿nӪ4I|"P${VsJnml"ẩTGhjlլfڪ32 jBd6pyn8gҷ=;U&ٴ3N M8VT {f ;^Oӊ峎\Q\O'ۊ_WK면 {ees U6LxWCSZmq/T4<Θ}$l>vEMt$XZ:@ApոU 87_\:.]_Ct>ٷS! R@H&#,Ǟ!Ih@WH-VT亚tjALZ﷬:\o#mXֳh4Ɵufº,&jYJZ$Oji6089ֽ'q{[ M'0<ᘧ9a(f&KfG-jRek>feI]^Si5C.ܦਜ਼z [ǹa \C$}vɶM$e62i3:PF4E\3u.kJ\ FjxB^._YyFkz7r8ػ:D2TkZc$<#֕. T182hĞ)r~msNv MUTPO"'ݯnZ+_+X2ϴ<םSìj-}wI<j8ݖv z;tCg: 6<+S]n'GMdч=?weQ0yGG"zA^әCmYTJWB߄iĸ# @r c9qJ3XLL(H$ 8Pe !(ӎkqT"$8eysOoP{s(9I TEOKDmEyIT9jTĜ)Tن2-]uQ 8a=WK$ϘIX+k.e!XE 3&,{{pv ө]S2 ֫kT[@)kˤꀈ<ʟQ;]6:!2BmAm6ԙ{RiANIqrm!kJU1ǎ+6wuY]/\UOd3 rtLx 8۩r؄w1mRߕda%9/pjN*f 0qV/9S[.2ABP#GiCuM{w 8EiNo[woiE-0;')ayPji%J =$IJu6/$mC8-|?rژ& %X}7 _kVP//WM=nZRG@%AQȌs ՟3EP 7hD_QضF?n8/ݔStVVFVryGY*t1\A+#V6M74K@ Z;m!r\ʢQ%q^uK**7ƯO+} l"kW:u7Xf)!Ꜭu-.i! 00^ۼnuK%r'(MFZ V3Lօa_&c bbXy8ڮE'PIRfBs A83HLV/B͢<":O! @#[o(aZ b̕JPbUMBEBqFӴlTWLMbJA t&#P8c -Y^RMFN?kٯw66viw6޲Ԋ#ߔکU*GCv "5ySinhҬB+A!9FuQ54a æ]˴W&w__Tʠ'%:ɨUmFUiK`9ݷn5Qj3rd@y»ܼ}G\sX4)x9f~Uk5  ˊyijoyZw=d{fٶA$Ɔ$TE6:ZE2l j={oySix#SYһoSi_Q{T)(̓jmM3ղbGqlі*y@8Jrуm?UZԠۧ8kF5"\#enVa?,Bm/28p 1化{*9lČx-YsDP Gq#lH$ByRP>fH#<.XUp$2U(t.(HRHHRT!kc;~rKAҧ9qY][^jڎcM=4a勖Քj#+ .y˫̺kpEWA@8 kbpozffo(VJ `qg,!a;k<GDf1j-qLnQ*[!@@#G>pH@yrB Y@#P!x $0R%DB rppl%:ϗ1OXJm.^#}T8As3F 38)- F#Sd, A"ԋj cjSi7TωGً'KeqP؀$tquFl\(%ǨTgm*M xӟ12I10Pc)a:|8I`,,FG.QX3>TcBA|0Ҋ s#udr.+(pDb9BxhYhE!qMQ`LeFi <#R}s5U6Z\LD̍=!Rrr-"S@k$ aص N1)5mхHsH!UfJƲ ۽pO)QBttS44vv9j0K~f{ky5jAs\>3"S_R^}֓ԕdj-qJ7^ wط#rg؏V]Ia)qP$m5<$acCIHϜ_{7?XZߝ鯦R2qC9!CFZ9Qπc9TJS@7Jy,L!JU$ OjYw򯮖TiL'p>?Nw)Jzu0*#ԟ״[dR \95HiFm|J +q!@qc ;"cvh"%*2"}( Ij9S|ʂhW^o{RTy A$Lj,cAOnq6gs0bߓy_iSAQ'Gּrw3OqP[af 7 f)//LsISΥg7[2|}A =O,O@wk߃5XZ;( Sde ]zfMSj%haO2^xVƅFPa+*!F iC19H.ʑ0籠\20\#36MUO«hyu'&ְbPR2,l[1, _SPݺW5] t 6䒠;0fg^uυ>HT尻 +6vu]u ).gmԿ?%E+Vӟ&꒠B؀Sndi07[Voi^X$rmSo\ٜAP>m!{S%)t!G!,WJK>ډ }o0@k#"?#k/LqaSj1 :pVjULeK*:eGsH<&b]mʤO)֞SӜ$6ۛ`\w9{]-o.c/(5f #18ԝD%j{#&\51rJi;€2Ki$# 5M{QDc1\S㼷89; Sp83 `JE(I5XFt$$X;]g| m^ÏŠ\=˜( +\U :898 .@Tt#~P%A|qȕ׮vt֩(Sqnd&3+GTu j%>MOs_}=>7KV%:~NYsXQ#,[Ќ#"򡶷c5.A_:aP381k}j/E%Ab=eq;;ShV3Ls35)&jR:eL0ą8{q[>ޡiHYە;WjP+O&9 I.&0 PAÙ,R CF%$Cc(P2BR"La78&F4EIڭ/+IjyuiORfejVIQHI~9M\r3>U)b lwyU -]$- AZo!-chtEZ&>:ImvZfn_bL, +k$V5Tf\I㊾.G,Y4`>)Dv($IxbL)„GL8bLs0L$3]1?a@P23R 3埖8 LeZ ~83"i F8i'l`NQÈ>0c 8a9RBxӁv(< @9<^86kV@b,:{h#-,*u eħ!`&íH9BwieӷMF};ߪ"vBa1:,p+L<ףm.^WyI^R03 )J:ڏt%ݥbMյUUZLbXh.]zHBRQ֙䱠}D۫7Wu1]Sޮk2n6՛VzǩǛjULJ$!JR)+RƫuJҥ&yv=Êèi1o{@OGdrky+;7uJT}}UC$T>KAcgBu2aݑӜa61sQIw+-Y cf6`E!)XZĤTG 1s2 d%)VZsƘk\"yHK(.PIbRBX%#7rJXWN]mVKp08op- q:cjEA,~Kn6j{%—ܕ"e 3J%)@HxbmV2' FԗvWUFhYM jRP9"_R{KjVvԘPgknM2%GHx`h-[&i NHL5H#=*[K}R t!Be942]uDd0aJ$ڜRVQВyn*VDq ,ЙG޽ )pk@'BTOmYz]3Cϴј* Z5P! ,,;a?aQ@.8JluKUcIY!GA!ƖPىN\c<1;KT7Z;ILm(y3֓-Zd tǴ}Wzkk,m0&X)Q@B!LN}שcM:xO8;\L{Npjttp҈ R3juG/UdwZ YT2j0n$Vs)vqZH<4Ŭs1!ZZ<*S>&ݯq() /eFӒx (C2o?EA88>:. *g< Y$n7N%0R>8#x CF7b x/a()ԸL,P8{w c)Յ>pxU@JcBzۓvY$I̢ T- P9kpڌ3iج@"9QQjismAR :,vd0 c_6+x*9i*KW/Xe8v q!xS8 F 981Y®h!Lw Zdf4y]$mq'9\6nY D`w녖qeΐ IAHfD";wܵ1}⪷ST KD" 'o>lhkszOs{Ӟ[:ƳQјr xZ2I[L1//.9FbMZi6)H\\TkHRmЀ#͔?, JiiJSg(b@dp.xq)pb!!P$4! zLB92KyI1:~ CJd&s`# )*)#1>xHd'ŏzu "8"1X0JF12qGe%N\6#pi?.Kf%gQ!Xu=rhkU &tU{Zh0ӭMD+yL&fJJaŖS)LFhqE[vH s/m-uKIrL9g GL@*+54,tb,r2Jq)3ihzb'a}>C4btǸ>ePf)liI eK1\**sT y*)C>b}mF@~Yr4ԘJ]PZ 4Dq"!QTQfTꭶG`T}k{ZyAb҄r?hw;jl*Ja4ÂZ`Q@{O\Gj_sږ+ۇ)G6B+ cǽ"guAB#*զiPwuZiЃ#ܵjP-:^gNK kV. b?QЖuYO(LHTRzPSRNq$CݫKh% 3&![&ؓZT EIJ+a`Dbɰ.]J rD'Jkˆ).2a Vbqj;}-dդ)RHkfyN&kM8{MۯRnh xVj7u7M$9dS%ZL% R, sj۬Typ8qQUϭ/l{Jt~ޚTb0%d 39#u,iݢ4Ryai_ _҆}sni⛀G9yFV.%K軂OJe!wTcYge*O6PAF"9e;KS&Ȧb=T OPxN@rj:4~^]PgxݵT r9]etݟE6\Mn'pr.JBUnmQ\TuL&9CIx `fuϛqf]<_|S;{]cy{TљGnJfj/As/x )Rݺp?|9۠5:NE=UQ^NH|Iԥs?!CZx P(i,W<:f*m#0II{vG1ڌ P0Ձ2)t|ygsg.0ࢤ<A#IIW8XtS` ~8BDペל$#q3E%g0Id=0Tdžj 8q&F? u.15pc<=2jD]<4AdqH8gi~KArY0qskph!zóéE0{Av>Epy~-ɶˍ$q6 < q/ݹ9Kƕ9(wmNj]Dl*AQ$f#In4]@]H?gEi8BV 90NT gX JDIbtA㙄Ri['I9g# o8r`[*-PiɢC")Ȍ燶Qbq~=ѫ}݃nU.pi S:zJER-% ?n+OzSTLNNW|7[ݽx4zLsrY^p˅UjSSim]p#Wu-dP9ǭvM6d4O2q/쵯fnrnMvSr~vZQ?-J-=*B L[D nKXz`\^m'5S5|0*L`@Yeǖ5"Kh>>\2ëf+m⯀S+=FwKYTU}ERrašG|y稽=5ow d&tZum[kkk^֟N(ڱon%+S6myYm )vꞧQGe֥AGc7.[9 qS_Dۭz8IxbW+Je5J?KO:amIkO*i]+Qc47=^L^ZJn912UPCRBF{f嵷IZXeԢFN| r%ꛊ u%e& y~IpHN@Ȯ"A% hr)8Zcg|ck2'51TAb񳽥OzM-SZ 2>I~uG&^HGY )TM:]%#f'| oDPTJ *LVB ticRaF\>u7jqWFSQ l"c+ua PLI ?q0xÇ<. g>#RbP?<6x ěqLD(9yP8I W vyB#cRK4 d (ҠAe* \3ABA[J%*`p>&Ӥj"i4K;%Hmھv'V:r|8a}t"_y*'(qo^Ĥ~Ťt%Z)SΫOFPL~-hrR 8;a7Mmt/j> o《F|KRU: L6%?6Ǩ0 T A&>c}7VYIFϩwu 1q QQP>&Dt,) eRZݖ:m!JI%}嗁5q1ENUmbiM3Zp3;mZٻv]ےʀm,@w ^^2֞mP?LǠz7zNFk!Çd|m6[MNӥd,uqxp={,EiN<> SELSpsN 1emK[r^7Mv.58=iJ1R#%YG8bouj JbGw8ݺm{5:vOuQ+ifv#2]%o/ݠ5˹2 :|Lq\_]hQ4!nRN-(fc6OnONտ7qUJY[ dIL'a8"0|( h$1 THJ '#"fZs1ą\ "H T00P'u4 (A&11ɸ3$GpaM@\`{గRuYr j1Z${=3]4)7[eݻpf ]ĪUPQA' صPUՌM*4]RQ DU$ E*wnSHk Kyŷ*t2 o-җti%@)\"7 M "=A־egyUs?(%Wݳہy*:tdJa={3iGFzɊZB},!!JyIC7덡PcPql8_xڋiVjsX&H ?8oW֯i/#۵J%w̜I1%\Siˈ!Ͷ_? ̢ҿRe[Ц@:iGo>1 k{^\y%BMH7w*WvA@?voD;gp-1T"5r'7Ħ9@( %E$Rxx i$ںڪ 4K:r'1!o9{G@z)C#(ẻ_p쇑& 5\wJ<5K327F$4{.kfT=ߌc~m⣛Q `']Fzp!86m6ް*bd4(Sɏ9iKwm!hbw@מMMqr[Uwt2"N i}ֶ2~}l)@m" :?sY+Bt3Ol3/#%R–ZsL+g`K-PRIXnv;Q09t\S>'i=Qfi8p=~KoKWfWCr!eٷt&:a l/wZ4I%ۄhUl RsXR`k=$^"[w;8Uomp_T_H<_&LH?gq-vWjK `UhiȜbIPS[J qz!( +T,x1v:Wke}Ywl_E.&JBK,Ԏy(+6'(>v9@91ٟo7ВMR' 5L?N-}EOD7B7Fq-m{a6Ún%J,ʺQ!"f&RRKi)mI1<06u:[SPHTy7fe?ӭ& f=&}գj*Á O9Igg']K2L !':浭$;afСEjC s@$l=n5sJqT$f?ށ~V껑ijK6$na(q}mrkW^QKh)f1Yb;hzۮ 2Q"r! H)%ZX)z'H$ قf`c l3$T(rA$ 72"68鞚DŘt'&yD臩Cb)3-ugh )Khm` Ϗ<ñ)0J5߽)Ϙ ]11Zn,{1t-*8x{95piN qEF~cXyzf|%v38ؗ:H4{ۊ JVHD}xÚL,H00 SOՌa)1sP(4@L>JI9`PI;a ),UB8r2R1PYֈ8 c#M67$-B?x<:D(ްTo)85ϧ庝=?ëcۺLK&@n-ъ@LEk'iG+=ډB^o6vʭ-TaG0h'P>Zs~5K*ʛF(xd>_Wlײ t)%2zfIRo9iɉID%@/Q#re{vd:;e:~YMf]II{juڲrqB 9(_]0tq~b z_zJ]/0cr%hpRZu7v缪e\a < ʳt9.>Y]1Ď\z+Џcvzwv㨰Li982EK`%" 9 RA]z5ƣ@kF {TT`! $ptIJC}5 : >G,t{ڊ@0PN9qqC2@!F|02#><.*P>ڠS |~v{,r| J">>ۀ:fL怰I \!`D %C f|p/Tc"f} )1K!sL6LJ~ȌI/t2#I$p* H EgW2IWHr$ &PqyB D9d<ʼ 100 І @ FRf'H>斈.mK8C0Nb^ Npʶ慎`g fvu}7/qSmiUP(YjHΈ"8Ecm7mKxrjʒ_̺zrGV|21vݷ;*_d(q N^ʑH(V97gvtLImR?Xz3Q#́۾*HN7K{kU^;@Vn|R)S)2wDeXo,j3%foP87Ζ-<-R0B9G݌Ȁ=AYM6ђG~;IoAe&1/2c kRPg,eCC2S\s`F4y~U'0 لC#Am%-x(*p SQ@R)Ș}"x E1}ͮ˙s!#7IQ~/zo)R >bα$\>%PHȮ9e,cX^A6AA$ N⇔!59)2hH \xZQ"9rlL=CP5.l(  q`v>7(:ׯlo*W\'_9~X~G5zzժky(u\sIq$AJ" I}eBZ-{^[S|!;iĩ]m[ISx)@?N%͖Mp\tz![IyDsuwgE+jQ҅5|-Ϋ-"UԶ޶JvMkMeF.FB, o0ݟO+,TDš:!rnK%/!=clIk rNBI fqdB&4HP#8H Q:|! (AA1N\0pBсHԔb_`% $(”x!i$A P 82GP+P#d.~ق9\HLx-09yx㋊K! Jq.f*Dsm-j'ۜVwɎiҨg 8T  a3ĘAf25$>Y7meV-yd2 i揜`Cۈlqc4/(5M<ú7W~p+ew"4*AEUj2 *=M *mp'$6J\F#g|Ho,pjaxNc]6TD]mYփDT`!n$/{vO8 <>ouZDΓPfacQſwf]uiQTEպ_qd1]}GT%Ē*Om=aHRĜI=ƵI1${|XI a; KmDp ~0굍.8=/.?DF0*1>*􅐆4ixAꌳ`("?uF}:rK g/n@9¯hb eyjԠ Je{tKRV=)6{Re|q´xE!RzmPZ[Or$C1tV61>4zp!s G;mqJuȬF'.$u#vڪr˶+unk@'Y3v?<ҨAIM"eB de㭵mB2AiTT F;0F@<0G&^SzԒ'Qcu)Eե ڐATS '#[DSy^Yj 9Pʄu":L# pPGReɇf%˨ʊ F)6@j"g&qIG  "׽ʳXYOP! 3K$)j}ؼ[J0kDeFoO=iQ#槪6F\4NJ &Qe)(!D,N8Fmj[{|$Gq^NR5ODu_ WŸ̓aeÇv4Zi@QGl+@1۪j&%u}u2 3VZ,\7 }H?KہJb=HDnuQVLxxbut}3 {ܩ\b˖*ٙWjjO$D l9k N=Js85{O# ߽iݗ dT,KO vbit9+Vnꬽ0NP<՗mӪ7ˤJDn"]CSo^u!:ӌ XZbOCH5E%'$P1e?2~qEܒ?lX?i3HKd5W<6|)V#FA&18pnqIQ&'A; j )!pX0JPDrŽD-1(TBA)8' P~ĘB00mJ0%a5p :Pa<8`5r}E`9F'x88i G>p3B a ZUp"~eA:~~a餉y56U p0Qjx{V|N'o:?uj , 5!8^d=rl#Y{=#>1gu6YRY_[fQpvvٜZW[_̑e9dyӆW;B޿Q]]'2;0@$is9e g 3ؤ6N>g)II:NAkpm639~q q]܊-7<v}кV Ju# 7Q3Tij4*p#Zk =e+!:V"r U`=sIxdab/d\ZkRs#"3ÀMB.W*iJ!#.Q "× kCNޤs?.zRJBqR{R6JbMVe@I.IJNǔ#]YT1IwFi[vn?M7ϰ?8Kip |$q0jamt~\3yҁ xeQP a%VAZ"DG8pg*c IF"XG (101H8N BgLJ 9r!T'Npb`RsL2>,R68,@#Rqy""{TؠPL*|L3i8طV?=OϫsMM7%ShUwuƕ-WpW'<zb2vߜ|6˭ +Rqc8,Xh 1y.GGR4 @ {yn&| m*Ԕ$Nf9} gKQ&[ԿV*I `; E9@^QLs Wi/n6s`+3 4 9~Q-u+Dƒb5J \\}ѦR}7 QIW.L hM-nӦѠd3B ַ5-붳Jb6K]ƭV@`0 C~SZEq2ӊ?K~ G$7{V_Ó;[WfܷvS?CG1'C)<3(g@ huiVxgώ9,c;^Sジ"MQҬ9ďnANB< !kA $bc8gs\Hx9j&<ˆxs,xg5+! ;C3!e!C֮g8\ePI'( *5P18ی uf#А`@( AD AG1,('(p3J}IYNC8j.>>9e7U(C[.11;mܱ*r燴2O(n<4Ac8t -%(asᎬPW8qJB*- c98'8LnzV 'lE[`)1uCxJ|bGdsb0=ɸWm9[ZCe:\*?uGۅϔ$?Q?VmzWh}@Ti7Пp(fOI\ub%KZIxmIl ;#nWnW;anw3]%@AGNuh(ǠtPZpi[nMFBZIJzgj>|2=&g fC]FFFOqe6JQI09ējTPKzW-h(&(mU S5SXu*LDAD@cDG`0Zy :aLD#C(EÊ Јg! &РjK2Z IJ׀s@03`3Jϰ%Xe46 Rny lm/)Wʍ84W} z>ar.1ЭIk+AB1'tiu*/yqrQT5:eC: VPFG.X^V"Ƕ okR`hqJYIe80s Q m%&Cq8A:VJ\"DYx8Be)4Af?n` 0 4))3 9'y01N,#Ba2p$+O44"x@C ߕ`3k̈,HvRZriL ]RzBm Sk#JNkY5n(A2!oӋ.ڪVJe2 e+nUe&}(ųƳPk1qi>l:K+CPnQukHQ9cc%C t=x 3?8c˓(N4$*'YC w'.!BP $iG,q 1%e2hQ%R[(h!ǕOBLơ sB*cZRt͘IXχ?vx}318y}[:f1- B˷*2i][R8S6m|+q3SejB8+Qt w[oߨ=%!DɎO!%g8Պ^:|DL"8,dʂ#[H?-v}Kڑ7,=N9ɇ z13WakX:vG1u])oV#MԤ&gEsyc=N[KhslOBGp#]s D+sF;0$ 1$P3#)H) 08~pv(6H*V 9r82}pTE13 GXP|!OL ǂ"B8!HZIa9gE=R~@9PBe%K!=|Lw]}ڛj? 2" >)M[38~uY y@$?H~9QpCJ|?3>;# . Jx g˗ 83a%dR69 8Dp-aSP%ћKi+X B7޹nu)BhFdNxzZͶր1[zzf=DDg^ZZ\L-+3FKj++7 R41u*aq">Tݿ}n&mvOiPWզ+4+1 ?Gbb9h%jY*ホ'-ԯBTP`<2PXM|)x[# F̬LTRzAaG /Y*"9p1x; iXd$(1yBLaI8 k*8uI Z5C8F n!?1iJe}:Ig`:A}цeCRsz1G.'gxAZ p4CQ8Lt0A!DC:5ۚoo.-#b ++ gO>Qzj(- QǖB_o`hg@HAcKITHR U=e! nj*QJ߁ˎ~NR_^je`hEH+Q S0G2S"eCè~y8VqDn*6sXD-"\s>Xt&D{a,$.ЖuTW\?Q)*(rĦӶUC?zP-P!j[dF8[H-!d1+_+Tt3]kmt]NN $DFm<{}-Z%ҍp PxF8`!T C1:&БS Aq 2L *}7jk8 : PJ* pHyGCnTjRr@hΙiu 8bOiEe_I߁F]Y7֮)%&Ů \4 Y4NX?y 1mJ97}GomQɥ8Ni0 ʠ L#~xdqРA0P☈IwB%c!dĸAT3@GLD{ҐB 2}^80 fuD\0HOtFca?[$O;mo.M&33TY Ed$88E'4jcj*)$^039Emp#1#"8}6ۗ.9~bX(\3YH71U$1 q $i'_#<0jŸf"!.%*R#qOԂncI'qicxڠ`w2 MRz!X'x^=4 $)b CMa kJ^vp%y)yζAPUc= ԛԲL6s 'v=LGtHO[b7#7{62jRmŽ+=VSlr٣bzjNl&0Lh@LIr Ce2:DiDd! eG\2qȜ("_%e0:G9r!8P@PG݅ p샀`xg[1~K]6ut#au&*L>|F %lU݋qEh@ă @4*0)L!' gQ(""002¾@*pp(tL@q5pCHTUGcX A!8ڐ9K䐲8J8Vځ'*⬭Fa#@!2ɀQ4u-ןTpQB4_.XpkZdQUC|| @0/C;87/<ڸCK*,!pY1p#mvqW[Q.G1vlOZ)Ls ITRo<@<+T'9@IT9E/9^[2ekriP*0Ə ZS?컎3>Y֧4hܤ~%K}0T$کSKKJÈjDŽp8EinmΦT =񃃃L 8y/j$9Bd~$0Ռ+8c8S@V#n'Z*u++})3DG1;`\D[ϐ*SLb`` ,* r0K%J $@0Rf1IC <8 9DLI#d8SLt~P|JJLL>88`_6vaDa8)jp@eٗKj'1pW?Q)!(RRG(L1TA#L^9X'@ t&: *<^xsA$s[gT=:I\NW8~/),!_" m2Vq0wAR">0sÞ0`R$gpTA\p 0֬ )#1K>)l8jywԟmN_= L+mjAsS ۣOTOt\Qdq]P2xLZ@&28c1)l%+.&g򁙀JL#<@ CoK? T`L" H8ÂA3A:}&<J RlDW,8q Y$GFˆHZ;D'tDap A0OH49~_þyң !dRJbBu2 TRME2&U ~iɐۛ)Mu/9Q mk a:PpfyUƵĚٙϺ&t X) ֨A Sd$)7cz볚kJyHCӫ=P b8ִޣi~=fEӪv})}[ݡyGrp I4",{~!qѥ+eN4eQNDr8Զu$灏AtmXSk'4iF?W,3sd"yP6*Wd伬 :A.)Fe\s;v,.#:jmYx3 ;u;{v#J3ԖbZ`13sMHixI0wv3No;ޝt[U]L۔2)_jUA-ej89p44c\<{c"BP xO$TO(+G Lp(GUDf)r `j;@k$ȪT(;54rcωŎiLZ Xƺbiʵ*'Tr4^"Q0mZdeĕ,瀚 DEPY˄0>qƒI>tψg8<$f!,K(rNaq¡d8a@In!gH# SJk&>]j<ہkIp J r 2Q&Uz&9Uc4-uVOy+E [ ?EbXl#bUcF r',)$0P)ƶA -ɍGP^e=^`{>o|CԺVTͼ!=՞0VIz|B!Jg1ٖ pG@3Dई9ʭҕsP^!3 i)*:)KL P*<$oydqt]%7Yn/ڶJ_E)0 CYSu^RM]Z¢3u ާ WQJ9jY~M7Z|Ր^I\[R}BŶVKUgQ޵AE_%B4cJqXn ^zRr3tY)n$&6? %HPwh:G_kRYzдFމERkh`A*7%[}tyQV+wS2њ@I Dn{_H:ZG/SVmox4^[@N0a@BTSug㈒&/q$p+H>~8B$H0qp$T*8 `d9IEÐx6~,`՗ 2$A0Z#I^ud2"~m.QU(:lRU G>a5*3cV?JSWӗm؈uG-c6;m:" JԘ 4vTi=  =:`$H+(1&XT P!p%Y3\c0R@8!>8%$D `>sX3۫6æ:je]+h:RHقĥPK%1ҲH窗iiVd" kR eGGG.>AYeX,&MMm$)@ '7Uչ|1]7`H<}`D(@ZCq`Q`g ej`d20'q 8+0{ .G Ҁ@8'C5`8ki !q1g L\,)'Y~$Bh0T=8fy!`9t TZѦ*qv*4K5ԧVshBLG>&-.zL-怭 ~QpV WT?HV埑p62ct<'y *iM)8op%#miE5nSm# |<0]WAtJ3ǴÛz Rnk -8 L5*&UJؼ~P UVWQ346L9(̶75=omm }So{Í:%k\OrįiS@ f=#<@6 ~1v\߸BAMoEhL&eÆ'8|H㗷"Z+xB矷!7=<`'&yv quz /+YdpŠ€0xlKx7EUenC*Z&&u-IRCŻjX.ٙIc^zr5:mV'#X&e [B< m:XN6Iԥ! 2H0劾鼶эոa>%~qtzw~aQ+URPjafZs6dŜTNB[K $).a%p:%عmb焙IkmV$4OZY3I7UuԷwU ƎM͠'52GJU3?soQFx.lfFPVKÇn1y=aԖqkXt_d14$zmgpV6%9$Z(U<FkY9N+lk*++o{&i\8 faXq:íME*I*̨"$f}eO),#)jL`r>ю*vDQNi<xq0}9+0*k.R/*(Ǚ2L #νCR ˿S3E,$< śJ_wT]_~0+-Z!Yh1d?V#mn58lVڝmYP֑=ìɘHRHÇ&E ߸6f)A$ @*qlY9T" <}CXPu|\+0!V\|Q (K->`an2'QO}F1\\aJ)إɀRʒ8āwzx!J0L%D!NYyg焋8dP$9LJ92* (6ʔ@LN-U/ @x% ZT['ሉ8I q ?ҁ:Nq ]K#1fJݕO JF\eAF0 YVmmcQ-sH# XB]̡ )Krryt0LʲNsFq(weDS@hZfa>BԐ(T\A-$D0:a7< m&:x8M* BI:QM\M: PJ>67Uqqi wpſQMqip.0yHz<Y4zҾ{?%+_C?Xl|Dk&|8(sgSTk5ƨt%'-HjMJZm R 3Ĝ7ULĦӵ[mVLhc0+Ǿ `2A"@ȁpb⺜H[@yn/ۇl=1 '9a#)%&9N1h-'Rbrї1@je理+»-&Xqi%1lDB*9G,*pV7笾ͶX?KB)?ZݺL/KDCl&(O@EUՌxΉpUfuC2O%\k#ݟǧ鎝pÇ 3įásjPB@TmI#+jע9Q^yglpٟL㌤rX~Zs#DIDԣ~H@^*0 vݮ(x?\vNʰj-{n|̀SonMkVqQ]NW6Ds #q`cE͸9w:z`i5uB"MjCn )hOIB^J~oՆ4 ZH ہ7vM)%)9٨?Aj&o}(wͷ~bLSPn?i5`xbct[]{0F!ArDM;viT IT`ִ̉ k}Zk2^fR:IPe*p&d[Jٴg뚢pƷil}^yv( FŢeĢ$-~⛭2tTͭ*tS (f:JSKr$⹬Q6_sѧZk+G]3e_n')J筇1+e 7 Q)+(i-^z"Ǐb[nu<շuCmPe(&, BH|BD qTc7X@W$3'"r29 eM4Xu=@'1Æb?lmAceid9i BQ  $*T6ݨL % "6 -"a[R|V %<&);fmIfYH׷% jLA12牑9'B&zyԶt 0M$ѳ4e$XR&0Ҁ>q&>ml6t i{`!s/tS##-rnN39qp %Դd @gIRR顏6y#p0be DGRL! qĭp1< HBADr$թ2JTF|≯`ljaut`A.z[p # Ns`,gR'Rb$v XRcȈe@gib\X56TUb`r)a'0IaVh -$Di0G<0mDK!g:Z 38 OeDGI& q0yIMƕkU6IuI)uB X#H&8"8C:ƣ鴁{(ۯ.R6JFJ̥,IdRiĝ+u]:H4ŵ<]ظ,Kwܴwux>Y'CH1gWuAEd+z۝PhU{~H<`y Aֱ6m?p7:j6GC08<`O- `jIYxG*Ǩ=Yʱų"!Ô(3Z PߋKy(Tj}"SQ<ѕ&Zy)ρ=>@T`hSq2}7Y˅7X_ .N˟9a9D[|c> #˚8)(([}BO݌2 $TIS98V:.zZsTY\& 4'KL PDz˗,sLB* PrqNR]TJu)&&*Wb;{Ϯcke`lF5H^U%30/9*Oxh4NVOZԫ`$sg9n#A8[Pm6ώig=Y Ox8p:L,@0\0!1ڨJۭۚa5PR [+V@CƑѵ^O;ַalmkq(r4UbxfRYLH aje3h$@Ds+ =GIM$P&7)?(MJ5p, *0'(j~>~~Ӫтi_ۦ*eL\kO"I 8x;O;nrţ(%ыN+'z~usO!D:Txʼn_yfjTz܉YmYQ_cvF6CfnZ{rڥ֙ۚNa^T#\O![GO߹Z41;I,: &bZ X˯KU\n%Q1$A0" qQV.aFEJ\Òl䤸"|0[ Jh\AO8rO$,-tsa_q[*hNP @+(۶o~=a uhbECH Ğgr -lIlnPvԗڨ8k|G64iumMiL**C/Ԡ`V2H'Qq׍kTnW]Jkq ?Oof6֡*B(U\RK8nnN͹wPWZiaAmUfxhp\xbdۛMA:jox}-soP8>˹ *'!V_@q:UpMI^ǒ#AG1ZÈ5c+\•i**<g>gs: aG€S~eQikm0N!-j*P X:vu a>ֶ Bti#3k] NPNU Ŏ"J3O|b[Vu3=.fCN0B1Xgk}r[bܑlF\Ɉ1tm])Asն4Wi1w (i(d2V.jVP9+{0A(%@[ .؉^zFq.+LDspi ``Rp$etD AN=bV'3XMR \dJ '/Œ20C0#( |B"K8Q 0"}!`Y̐f=4̜ )E/SֳϭaM*[%’Gx*ak+qBX2u؄,zĤr0G4cIlE_"{òvި[ *e '>|+D'/BKn嵤(H)LZD$*Zs{Vyd{3ku mTfRcsd hQxLxZUJN\@*R5'ByKHBN#F0kl $NijwD"z:rp\ANiƉ7">zMjG/b(FyP<]9J=m>q6 CL9AvũV " osPe8|b?lޔ"תiW!` Ng5X O3W j]|_nfxr%=+0} VAma0F.BnYv2PΦIAwazZgq꾙ږUJ!kkV?۩ ^m{ђ:洗>6*t@P1`u rѪU,I9'6K~ZPkw謠x>ferv$CzWFnϵ?D<:Yih" [X$X}ɴ\*UO`)}ϯTeA *\4&& Zt@]K?:Vl&KVia uىq _[s#DaIs0?z#UEBBNLcEé6 Ꟑ?oʍ˾8 ʩ]l˪I1ARRKJL ̜uuCΚ!?}G=;moӶ𫩝,Tq""{5mVwuf]ǚ3j56z?0e(JWPxT6Qh'vTF*BDbBޘn4.ōuꍫvv|?YD2=v+jHn~Wj&V'i֔0A1<9KZ]S3/({Ɲ޶USn_¿$e uШhؖSsUЗPu|PĥN}{7M pbWqlj $S ?ģ9{jN=[ڄ6e_h$KkL! yG=Rl]hpK?aoDni/z~ʡ|JqE*;S_[OS&&3t`I(x@ⱻ3(hq1M=p㥠0̱%h J@zC+p!1,`7xQr{"݊fFj' i]'i5:]_n8$N]*N1:F?Zg grQ',I)Է ! Y:i$.FD}˜P1qkQDCDD(^4#W/vdD!@X[3ovR/O~Wzń}unwŶnhָDgl8c%i`^kQ A UGXHYcΔ ̖E\p"a,!*Z H8G`^c 6,@ˌp.0HmkJN~|s8@iH3)!'(340,M AT >P8惜(єzYMD)D}!pTT[gg,,k4]ՓrSh t8{3h %ʊB~XydΘ%Jls<&ss [s>%N>EY;zJY! 98qYHGbֵpZ,c>zXov;E:aQFpHR"DHϗ T=->B mTI0'P8;:p*I>`%9lU-Sjqy•ZiKSy- d2bt釙  b3 p#"SԔꠑ I(Q1 Ll$H$g^tJ'Cܫ2IT.`FZFYCsގ+]7Pm*M il "&<*H,Y$I[!q\S- R r|!`'όc)-qa<:E]m!طiK>j_NꯝP~p7> ]ďUO**qZ_cI.GZ$c:A i.PZ+#9]l0l) W)AL?/&fI[@9jMtju4<:z*4eIg9G8u/ȺCz8~p7ī"KN%)HP#6\t(,AP@ゎQ+M @RoM e)Lu&"f8R>1x'5I'U3?8}Eŕv)y˹g%}R̳b3 ozKTm45gJ%IITb4&qa)6Lչk#}Lfmlv[zÚXF3ðq*V &geFZ~YP9)Aj>SewVw ί baԛN?p-Rbu4I n"' Lf]ӬKe@:S T&'axq^wWwlZR#h6nmp:q Ãpml;V2ۙ )̃)\өZRsH+BOTZOfZ{FRߩmNZ՚jTŨIER 6ݛMO[iDOENJ\^1CH aFؽ>ISHXG xkv;nQ~r>US@«{fm4Zqs&0ᆷ>o4µ4@pbKl?ܩVM Z5G{Ě(@"W7h[ !{D6}r\JIwOQ8b@明Xmz>?~`pwqV6/pݸGTsj;D6Kme;?Lm},:GzyB H9Gm{Թ{xftTPWm4H3Fs 0Z >)QƐS* !Q0Vc`YӲvyT'=;f[QB]T# pPpT.9$Hm:Svl&jTZ]4RL6ڹ6 V=+JSg0xt @"Unj3NV܊YJcuW2ѭ,zCaꪕN4;R,Ze0Ja0Q2{jWJbzgF€׌ePχg 0P ԒH1Ak*'L ~FZ.@ R;Y0J@10IKr w}D4R@v9#.$"DD&{E5FE dž\ &!9ͷ|nǐRhK(Ho 9= *LJ!M@PR'@q`w45GD&rY!JQ`{¹&2R~ 8$k^*.ᛞiFJWID{` K߄|gFrҶ X|Dv0N/n2z2 -Q <RII:BO@7vX$pZ qr]eR9pل*.+|I4!*]dkFe99ՆB27ו.jTq$'.!*T+Q XhBYi$WSj f^'g (I^R\i ̉R$ HPiҠce@:Y- T:i _A){?gey ckfL2N5]9aԣX40u?_kB~sTz7^EկE(-!)> ̂8xx2'(2mؚ@TҠHRT A0):=k VXp-E;Iy2~֝Bnu=)[&!<Ųp)}PTOyޙug:BH;)[LMBq]K.,ZO,9z;MSE1OYvVq8$p^F)B3ͿM*Rm ꖠhq'$oͭͺ(_ϲ*3uo:Λ cM: hsx m11c_rʦ#r-:=+YdϜZ)$F)MMm6IkjM#[&Sj׶=y!@5FQ^޷=.&[r'禬uS?o9$ę}(hDGXrh}M Rx\ZokfZH,@cjmKcolڍm랄QVaH@q<8a-ۅZ؄c}4-n6v5P H*"Sp@6m&ݩNFr\miP$JTbiw Pҫ~ֽ Vʥf(xCCUWo9÷=/2<]nCp8cdZ6UEVj1O.b+hTcq b7M(}ۛh]Nj4FJ_JmN`."1$buX|LTk|uZfH̡9!o.܋݊%U2SrfViPLT cRy>6;; 72}k6H 7d>#:~eŃXmޯƺĻ#Gʓһ}y"RU7b[ )>Ng@up"9D͝#Nnỽ:K+GmU O a1&-η.FgNyqjҎ8e}xANS>Jvi_iGti/pe xS u*0ĩ4 ]55j|5sX9F 8AMNqK !5mM&:4 \ez& ͺnuLcP/,Sͷ4Ңۈ90sIM$nޛXҮҺ zb",2CiL!XPjF;=@s' b.84\EB«JKid%\@ _Iq@e7 Mh%E&+3,&5Hx ;2KO0g⬠>]ZsĞ'wS&'1LN2Tꋂ( /pƜ')J @DO3Bŷ۬IUf=O2`%Gߊ[if-?^X/6[ rϞ\q{S}F>xuYu.˂3&.b-&ʎ8G>IT;V@D.)lGH?`%6|>PXec#ك/pGnAT 7NaO-q0%s1`fBF9J+AwMa,|r^'P}It'{y>Vl&YcҬA0tQ`Y?J]z!#zԓ<G#LDN4X+dZ$#K@dt(rs2:#Itil4MF)'Us϶|L2p=X?ˮI=KZ^fn٩qA+B#-Bck,jEg?W?vuN2%LZT۞&r]+UF'a}vԸ6 .(N@',^61=qm@$.'u:Nkj}{s] 4$[f$Wm{>՚vK7BA(@#xb?zﷳjO^r\bK;Ӫgv; Oۏv@qGfb]DѨ*6-+9dTUBTPlGUT@mDbUkR5\-֬Y9z141.&fs o#(G8eu+ײԀ(Ng^BJ <481;׶- \LZ)q*pPD9qVn[]yI&ߧVɵUkuEVړPBxNpdդs{ur8hReF*]'>Aп1m*wH y:}.rGN׽ܟn$h4^qLO6ذ׼rkWϵ ˜tGbkRB"(GC-$yiC~p*Vc9ѹ1 . !QȒHjB+;ΟrJDps F[,g~),Dsc4 "ڿP4|ĥ)#(K:l$rώ prԇ:D@2W  ,Q&'P1'X L}Zb: $T ~,rdliQ"#X3Ohf/39QbTO1:^m #Ø۽8K=޾um@8$*A2Τ#B|=LٕNi q$yB$(scPTR4F@>x#AaQ gXHa!`c@xB82I xL%0Ish0,sׅ+SijQ Q*Y\zse+霸G_[)9[[r @Oz+ӎ4AoRAƮ<7PDy۽vM*-әB]xT'N6I9OSt{46fI[R Qm4RD1gC'ӽ)t4bSq?&&c4 ,#zw"WҨ3i({[MʠԴDQ ~ON3KZ[0'88Zf !ӆbtNQx=%`X;V`A^BC 1TarÒ8f7Q')pi1ɤT%9QW)%!k6O!311.8cYFJ $Bwvvg'$ ""φ5.>֗Px݇! !el_ˏ028Dt9~Y)bC>GY18 ELDH.q}&"1φ ` r]TU.Q0@aJ[rumR /N A.I߀ia6u".ܢ}gS%,!r.0tRzyU*IS pB1PI ya 0/M]V\\xGac!ǔꂈ Ïq%vWmķ8<2LHC@Ta' LA19`A\1O*(RsFca >W>u!AqU3L(:fu0 `tB<;"'P6i;{ԇ[9.}R I $s' k7E: R|r6_MOm'WMmgRtfA+dԝNUڰO74T2Q1Zޚ@ZJ'xbZ'ڿZifcq%3 Ӧ/m_ܮowRnn4(&5Ę/K]AȪ&)u;. m%0L@/+)NA8Lzmzk6r#v[O?Hݫ:.Ztdz-PKnXT@Ůkfuf1$b]G)yo_y߭} RH^@/ԢXǪnl3{]SͥD-,>\J(ĮCj)T?.)˰N(]qRq}MJ8CQ@9[rVm.MldY]'ITKi?يwεJL4YΐmB kUO ްu1wSS_Iķxa&n)SuLq)[,oj~ڣkG@oԊ!2JBHR~J3*Rӈ,:`PuMPH3m_Tu75RB5e%f'+HqTΥJZh/Ԡ|J=!ޏ<s9wcn|}=s"B9eFxj'OrE Mn%-1,Ҧ ևQ4ͺ}Wrj#.|Gu~Cwz􋼰0Bs0dC`2IG`4S"/vOECBUK Ĭ(cF߬C,h$#žy;ߨx |"ϑe-i?3T^YG,F0hH3<a ZDbB}<#r]RHÐG :&Jҹ0ܵ10 '!Dj7S޷W[J1sвs"Km!UBFeFy Vۮܦb/nꭋr+iyB '&ԋ Ϩ]CmKr>JBbb|}ޭh2dĘm`ګ75i@S2TwF`uRRc7IG0Ē}bzfSC>)%J9pE4N,}+nVwݨtn%O(mYFܥ|Rd|_Q۪pwǭ“wkB+Ǹ4 # 4G-$X|?zd`Ʉ€QZ`Jm,*8-JMx!XvIU5-d| J2 {kN(G x&\$DŽxaAPaSGl*`>>n$PT_Qv1uVNpinML .RfaFif*s㋗LnuTxG82vʊ <"z|2)VrCWyY%6eY AWy`DJ1 [ʿ`iOG  -U]Cl6JYQAPXWN6oW̷ԂLtt7^`{jЄQf+䖡VyaaVQ" =oKn96 C3 PG?fk<~0ڵVS}0OD*L|Z~OE2(|iQBILG1#ꍍMTp(¥W#N<p Vc˺%(0,i&)s82@ y{2|hvFa eTC߁cP{!;Pjcb=*i rM:(EgP s@\P FRF5Ϧ FŁ~ ]bV.6ћ7.|D!š-) 9jIi[i y/ AO\tMX~`! AD&c֖{+/ۣPoRirK%Ap IqËus,2s'Lc-&oOr]U:4 "v21.rVi@gAe2wE8QieTuGq-*[=}r3ϑ;[ݝ.\֍d0. # >cx*B]+!l4mj̳ B0I G»=aH]]8)0G&Q ֽKyd6U \%O a#;_dl]4'A,u^vhE:A-guCnVvuI~'H:'w6y쭻9zى~Ħ&.z: !$&=HpE ZWWxCD Dk]ӧwu:N^x2=`#63U/coqZ XQA'x@b)3r |L?(9Q Մl6%v) xjTr5 *G?AmKl4y0T5 :#WG(sO -%y)ÇP 9Bd<JJFcÆ-&MYAPSq:p)ҲIhRyyaӜY(%$rǎ 'R!9 $*Rm)HfMa)ʒQ>8ucInXT2hy@5ܔy$J ~Q꧆moBmu2WIW?]qDVo Î 3sI05 9eq1ay` B!T*+6 4vB A&)#;]- Mb:ٵsX!u-'nvm˷;p>q#֨-ĩ* #,Uk믵tS ?Sr#cæo{&sr5GOT!Uo\iuJZejx򆦒H@ ҟL#vֵE'Ri*B*b3MEXo)]kKZKW6ZS&Jŭ`m{6\zNlFf›eF:IH@n;ӯ-ӨgOM͝M6w #O:`*$l+.mɥh\傢'*D~f ~߾Cl twN*-#)f ݝԭpeHjQ r(- O^=F}otdNKEwj7J ]J5rFCY#sՉ(rON55CJ=&*븅CIq̈Rqge߶<4Oya=aYccn(ǁ=D PRPA*X.xԫ8KK+L/;(X9 Y-G]vfE]AYr?U?{!vnL_ryeLۀm 0H\0\2 \{|"g7-=f}544PQ &qYO( EǺ'n7q<}PN4;;W>]4,xߪ:fmcnzB|* C卸m8L6! $dFPa7m4MVf+]G^揕PQ`jTW0ӔjӫJ㏞ɌWC:SJܖ$C^2tV$E.,A*fY+$p~Èb݇eSZ!C],ؘZ ADG<я:T{zU!Y-De0֣^Ȉo-*jh&<Ҝ`ᆻq<c`1֠2]!2 De}Pqooo//L-.1:8+LO::ڸq)<}0+Gts8#pXYs3 ˖  .*+Ac`AyKWX..DwvZ12޴J\':qcʥWtJS 6ߕHLϰVġ0Gg}Mm,'iտpW:AV%mZ2F{YCH1LOr8@|˪ʃn3g0CS)%Dpm }mfV~=ѣzkW"0Yl GIN卟ivd2bQ6`'JC8kVꄗ;^E-(`F}38T )1>j^]C jP'1 AIYJH9W P&=Ǻ\IH1TN~9~PfV1)$B$0۶ HmVYyf=xCW1 P? Mf^PɖRF8{Y)E{:Ǧ^ݔM;!DŽQ\u)nRQi*'F VIE*>Xlmi@Q<#xN*W1O:EX}Rwef][_.&ilJZB"I0@q.SܪtNp33ʑ_p~Y>/GEV`K4',,6}Bn*)YvMI&&6ԥsJ8eiƨJM$ISPf P1Ӱ~0=x˥~\~iĜ@rCko':TDTjCa*kW0%0BSBg\G%A !FhjSt4M榑0 +uhsBBL" 6 ۦ iE"]O[# 1O!T0 L}UV}R6NXF#=5mgsRQҝɏDeQrq8)U+&E&j՚]=|ΐJ Br# [^_k{E6ID1xv*5ӿin]73-lPFܗ]rEøh KI).G v6t.[NҦ>L]n-*5Ah%) ]9=oY]GZ'K0 l} AX^mMmv~.jqD=~_k.5\Qv9d vnmqnBEk^ORխ l$ N"8[poh :N8H])=9n0Mc*UWA^~yNWwZj̲ViI@!(FqRFhgId#+>7;&nKӐ J2Ĉ|عݻbq zEbI)B.A#F^fhiivQdrﯷꎯl ȡ%TlY[MQ\vTJҦW$MO;:at4Ńp蟾'+ܾޥ5}fCS35Ә + ²- PYj^) 1:DۋϺn4 91#ޡ7϶mj]AdP̘YgYMH"F]7*H-4xkԢbx+L|%R`R,N⥟ݗSB¯ 7e*8d֦݂OH>јeDUk1WR nj^$G]Hq2=QB$"q3ߕU*$ˢPA1 ~[f?Scujb D<)P8h"E#eJXAc,|IPe*F-Y%KT^1"emQ|s #Ϟ :c/o#rNX=e..# uekzje)+uU0Vd=4Z mµ@qq-'\Dsþq3mzA'2JHX⑴ƌBXL9d>yc ޝPzb*-BP8~3̑RT2"$A.D €B%8,%Q(uqr8$: jp`QB38LAz.ʶPO$j"X5 Ph^j Vuxy=£X8[la\*RHlV-Ƽ!+XA'O,X Dq ~r˞9i Ds jGmzY%iM8ڡ(AAH nSu*ZAD2ZV iӕ)/%$Sea @mypW@Oo>>ʍm u\+ 4*tf] D=IW >LkPrHrlD"1u ^@0 e/3ԙ&d1V PZ]48B% M@0@1.sXV$K55QD+yhm $xa*sƅ.(̜}oaoRⳃiis BE̼Aq?4|O,l[,(i!*95.1P*f.&-騤&Q0%7ZL-Jm2Hn'%\I1z=FTF靗%:LP)v%p'131{]fr)Eԡd}"0 BW D ޴f_ I@^H'(5mUӫ.ʦZI"%*09'DӲ} Fa~t"ZNz`P,ّ8mOUBO"MnraIϙu_p*ȳ.E1)_BTko5&4NBTR"Rs%HÒhnghsR:PG( DT-sbT &oZb:rP(H `g>G_=HG_R$HeĀ~(1^Z8 u 0S b;iW1"#߂c 1U`Ɣp@8C<1r0  +hajx\pGKV늉1BʹI1DǞ[QsL?t-J NK\ b;l^Dl? Yy 4#-Nk* f,1鞢[]wګVc1>N}bz(3W}dtsA*B Um۳er򝟐Y {v횈$ y&F1.pUPݪ}ԪkTyҒIb+H94d}ߦ]w(Y 4Or)\@4`!SR&U7ǭ SSRD(0##J:Vw>XU+Fx'iJ mYUgS*ɵG0{"]n{qtX[$/۱s'TĒbkeF*F8a5wC^`\I2yDH2H;g6Y8@.+ܱ?o>fv$HvJZ7ȓZ,Q$a 0{FN^y1nufY^R~p .@@qާi8Is[r&BQb?]}Gqhm*TkZ*8wG=kMӨja}&ʪAB1ͧ]ۣ rr.%B)Ng11bU~ފyi0gkQN<*Tj-jȦ_n嵙(AHLbTr*oTJ5蝣qnE^4dc$]Y%6OSn$(1N7OKD1ޝ[YЩ.hx6BNZ%)<qG63&|?N6i}ÂԮUH;!bT IixG~ҍI=)DJ*_010wAl"¹9}BO!pQ3ef߹(X DUy-Hb|IW39c@* {*+f~$'qJ􌡍 tXǓj8/iqh:PJ8\S]6 uϊ8ߤ46iR%i 18cvXNݴ;6cH" ֔D$$Z6pg!;8-A)1JNg'.3B"+$D,(qA#JP ^`x42VRĻ(A:Issp[jg:oU=EfZPq$Sy d>p]އ'rC*Q!a +b*8xAu`tL,pr`eig\]r.&OLYheAs8` L(|Nd$8)odJD8=ڡ" mA+%0(9Y 8!7 s H>f8ŒH34mq@]q%\ApR2iǺ[2+ش?.X&<ؗ\ I[n4֐J#FQa{Tq DVֻqQ+lTt`fT2.O5R$ [n1eU!DtJ=8,SaI(:1VQ<-H+ԅy[SEI5"kNT_0+TJG?nئ+I[WӒ)22+s0q\YMW `rﯷi.ٻ›n~՟AmymҟQ=E B#.`~18De81301`"yt@@p Iu8Lc88`5s=" >`AJ80(5C$J 9~* ml.KPyUq11]54*۫#@.+2e1d龅:oi;u@GYKJx!ΒLm3 P}/LRBRPծ\Jq!}RZ" h2ՈNZnNi6֒iNCc߮NUg{OnTSA3=E#WSD NIqt I0 9ǟ:o`ܺ*ml_h8P+9˱JDr{6-%$Nm 1.CmK  @8]-q0{)qzfҗlۭ:XdJHmW!ˊY+;]yS,6o2Hs$6Ъ(76\wm;Z [ )\Fj#SE7\yިMJњ*E74QL r<\qZU k|D}F߳o5,jM&|8snKnյ<cTa= h[UE\p=zq,0ad_'eAvڥIQ%0*O2Ls8GҷuO5W;);OL!"g>qi%}u 4+eYpIR(q9PԲө&|8.vvoZ0 x]$E(eiҷ}JwOtwnV.}G& wKY <0W?mkJ1BHLbx p s0@2q3ZLS r#8[J@@`8+!C1ۥ Ҩ#B AH~. [(G7v2L&U iFjOY*_.F':nֽ$IJ1\{JTi()fUe ffaK(\ *) R\?zಕ@'8u ypP I _n"nI4n)R c>8YI9.X#/kYX&^yQt'-&"HϺ$\1V'MtTfNq!h$̥ NE><+YL~omR,5;X13KHe B@JP 8aT\[۠q7-eX)ʃun@eThn7 moW+D%y-$I5 m 4],)j2֥3bGp!/3Vk/R+%>aEQf!c<)o%j@a# .<#$ /Y:9x(=3@&~vj3\!mry`DF8(341itL*~ t ,`IYln)n7#PeL'[;ESjV`I*I_åJe xb[n~X=ֶN3ؤf}]G-mY[M&# hhN(E@.И&Uuj&KR!jSQ+!!_tmТZ)Egl}?;q}?JvM Gf")2OdXZ[. SDYP='?0ˉ,ǴYC:ʭ?ڭ#8 n^ 5HMәM:Y_}O*wT4>ҬPiF;~kY,X R݈OymUi.K(nU @q8`LZ1lKmwsjJi#<8g|sNleVSBQ=ษ>)u=3 Q^0T!r۫ g§GO*nڕnHi:jDJX 8EvVңץcFtGڬL&pտpP(h[. /  VlʎPaRWm#b&`&1A2 1u"UyWi΀Rbjss$/hQx *#HW }KEe8emLմJ#|j!9 _P刉VmEUpSm`:)* 2pr\S#2ˎ -JTLlI%pPa>S$*HrJ j CH d pJ8J(:Wc~ VI L FrLa|cC$yl6OU(B8  }Bz۞6q eIpaYwRU\DÇ0P ][Zd94WYa'ۚny3)q9s' ViW4jXǟz{&k 0i+&UwT[ۛ2Sꨩ.ZI[R LRsQe'4N$/,jnzY"pS Rg}<ڛX=E#DΜKFsrM]of"W[ˁD˟%)z? xJ;N[:Z%Q3|/(=qc.ņD )KnSX?;^IT G-,@c^tEz fG(oqNꀩ-`$ʎMU*B"7q7MK[S3ZGK#@Zĕ *#ݓ_;5\;UaԶwAg6X5֪=ʸ5CR%-;h쭛&b3 8^)Rt1 MkkR]/nz]hK&z%5&&Y{J̻/vmBW7&ҥ(;,0S?2\%*qӶ֞kkH;@pաrMTUݕ]T':v҂ ["bOppx.\c5S흸)sC?ےDRXvxHW9ZIbBO6q8NƤ08Uk05La15@Nr+aʕ{Z5&TcbU!YaڗX1q(:Ҟ{Zsd̀ H~v$ y0eI  3 S2쉽 5Q$Aja批-4#:HPuC{`ej~蒸H]qטr+'[l{@ 2] w֪C+3r-(BU' 3u\b+}— `NW\kr\h-l6!@_Lol*:zmqG8+Цi1]U_7wZ٦ft84?>PyV?tb}S-/ l.JKff[ %N yCQNҽRq<}-@sFX j7:X%陖Pړ**Nyq´쪸 +a[m ϹfqDCS)9*QZb#?p c0osJsqD̶ei^Y8@ K4Qׯ6:xB: d9Î" ARWh%9RVDq-ꉄk0㻠Ei:URSWGL7ocWԫ[/+Y\Vu!(PwjD</0Z+g5ͻ[j@ ؉@ (xeHS/ӌSAȜn3 x(cÈYOI8:@\eVxpL'^=j[W. F)"\@̓0kN勇Vm*x3={"zvKP)H$C1PpB)TDb{&aZP2GRmtOCsuyD@UTzcjku=2JK$IR$1B 5TUL϶&ĽD+}NBu8BA$ֶu6(?.1՝QamKץ6rRFC9kۚJҴKm.L-) ^Nν csimg"1ϻd|ꎤmڦvPM1KGjֵiR|: 8IF< _m=H1`?(K]eÉYyVtIeZh*pk>a$ # U*n2͔rQe$ny'ٖlഘgv5g9+tLz- mIa7BJ,)gURdf}H)Lg%*I[ 4<$ "ƖcC{RwolSunR*i  <'-T-ۀIB[Y0V>$Z nqb(܇^Z5b<@jՍR%% }oHT=nI W.HFآng>Zd(RAdJR(a 2d@Юssu. qH0 X|yC ^jj׬UK:A! >,phԉ4[Ijb7s_8G!ڌslk`R#!<f:qH# H=)Npe &#C4 K@QRy 3#HyrcTm@+,`( V̟فI@ l) .%G,>x!L` Q|< 5!E7WݚH'rmT7dQQʩFm?qzau\QխhÛB RjDWغEB[BTC(i'Q Z}(\ 9)o$^ cۅw?*\XCҘCNm6n7|I3R䀛4Ҙզ !'<p8/Ԩ-^YE/#. qXԽNVQGݤא< H[tZy49ZݩԦ,]UI]=ޒBA(C('-jmg88enVZ͔]M$" $9LvEje?176TXԦß8 "apk45@. s8hjvP(K7ԥNQq\UuGI* ?Y T$GHRRq`Xn 8殙ZW TFG L-̮tD%е1Dx f8wOqN3.WJ eΚjJHd7;MpjEehyu]$ ]d%uڴ'i|]JiNTR:ZZh46NeJ8p͚Ͷq kv7ΣwI8x$%9K(Ӈf)fVVqdg[(˄FۗuGx*T#0IO>*`xOG=5"[Jtt&^fm)LÒJbrVYaB?O0bB.Fbb~b-;@TܔJu(zb]ґ*1)/qp"NM7xI!JfD9%i\zJ[aW:.fPH\H 95kVʣEfUE }6ǗXW}:D QgmGmm&jujl)-[ VP8htu 00P#zmvmfe)ǔbs UW)(!Mĺkץ) IuǦE2VP aw5:[kZH.j9b,:"@hH1OŜ3'  C R|*u@,_sJj/ZUm"@:t"TfnRS8uYZKRIjŶeqaZN@2t Qe/ z4PBRB:4T 40<7F:M&CFh1q{MGx%ܐ1?ٝ$W=6:ʵ)F?PfK%L|cދZݠ p Ĩf~ 2@*$މ#?TfJiiT s.NP;zeֵI81\,ťm}ϡێa(]TeI =Ba sWgOeQ Q<7 1~zSPi r|B ĥf)Yݘai È <8E!{byv鲕u$>B$G? 9$p0T57҆Vm(u>#g( MJѼ6쩗)t9@XYU$ C Fs%rJ犺td)yiJR!:`jlomt35ChrNʺZZ:e$r^Η)y'TEG%sg]Ri+nM?-$BepK((A|b>j+h'eH#nt>(m}!E-"uSrT!3uNU0JdĶu{ n`G(9Lƚ'liU0E1ayb*DY4wFܪaQW]*7&B2a~m B( %55 zM>1U>ړگv+;-P'eEb;*.),'J`xhShQ5`C˗]F7Z#ρ&JYaAc`\|KvyȳVeBzkzDe&kʌD awcu^KB⩋@8m~mкQ2j[01 yxbo׬mP8K~JzoU;S7990 =;Lfz6:Y+"# nݺkynum*|xbxX9< ĢxoqΰSJOH]TG1oc^ʻmke#QoSu>Wu9Y-7k #3lPivR[*&%'Jzc^KD"E|1'aTf 3m{=L5oA"D:2#h"ܷW'v^Ε!(j PVB+0&ytDi1:eB9qfp.j·.AiAT-z,1!7K{]!j*׊\1_7Jomij64㤳Tݑ! #(oN:[TdBe/0:3>1tS˩031 'nѱ~ZRB(xUu/T"<R+P4=EGs‡8TDfc 2 >#]!}Vas[i JRU(`\e6eßOZ 8qߺ[j%Ձ=9QAe)djQ0u'$Ͼq \ZQald3*Ŗ6O{!ep'yeE3N"xz3am/W%z{l;]_a"eL&IqTڙ0p㊉*QTTĒs8T%؞1疱ۥBGCc E>:TQ\&HQ^Qe(y=- ǦCs/`~%]zÖR]LU8DgO q_mo*jq5Ke&b4=JQ>\N 3jj86Kn/UyjEAl8y`iSx8oy|-hΛ6?vM?kiC4B\)\mQ'M'm+v׼qYTEhSz9IqFg׵'$%2jzq<h{ 9pQ:N[p&J>hTzhf7ט͙#cCf A_yO;듟LĚ]Ts<%dz2P}J4b$Ih e$'j]6@3 P˅r>S1犗K]UrQˬJp&`۷=ϡ]jWd&!R}Pٶ@SM*ak,1*3ecKU.nXڇ`Ha!0f^2mF' 4<` Cݒb%Q K8rHwac F[Nݮwra9p>1aV@'xxbݍB f I$Xh7.?av}2֭ zJ$?d⡟xtMO>Jǝ?Wlvm}]#ij5Mż7^ܛuɻ8L8%$# 5 0xom zD$I̞&$ KH6Krg $W(hIYe0R[3 39 ^#U+.:RVN@‚ke&ښsioC/MH )eb;i ?(lc}nOLMA}q_\ک dS6BnvI\niyX$VS3>{zBց.SMO^QD][Z[~49Q-n4_HV\!EݨH3m+sjQQX$X J-bH%9';rsHAn%>a)!ԭ|@Ӕ8aJjT r.GUTa0p0%H!hZV D0g0/~VnDAS 'Ԥsp O/1];q6`uǖ JCϸ $vQtRT9'H9c (S31 G8w!ܕ6o$@'_(x؉,#El/Ne=(1xaBc )m%)GI%}F rR9):LOU#Aw`)3z)J%=B"Nj4,&7*e4H /Bd8u֒}C,9A?2mRF]0A(x9cFacy~`D??CT3a] { [s])+\ј*dφ,;eCwnlQM368ΥգeQC`ډJ^}}n-Qn5U,m55"jM4d8q1q@R9 Lmە2ښܺGVG Fi֝[ֺ/E=EFyM@5yNg "aU({Gp\gpgy"-!҈$ z4EH}oDT^\w}J[SVҵ]F9 Y B[Z.inV4CIRPIH&'8~eͽm\{Trkݷ{V. Ȍh|Im~G,ۅAc4,?pB9q^. e ."S[ƽѻ7On;6Ʉiy=>qB,B,YpYڞTnʔ+R }fbø2Ε} ߥSbyamһP_oOZ|肘q*O|Dh?`moM]&Q[iP9 ZĊgE@I}cct7Q7{U h3'rJMnΪeP'ɘ-Y> blfƣHZS-1+@<25s""=deE* 8@pN(bNsERX\PDu\U2ҕB'4̸K.8,e+r M^NC2G t,FBNTZu 4A1 O^qiH3\شoVc.V 06\p7Orx܆ie_,AIJ>I1)K8efK;--UI7TP<Ȃ,GϔJUqkI"cX7Ai+gIdМJR x/KN1 Nt{qfw?CZԓ()E` yƿVw˶%lMQ.KLm>+5)aM0CZ+VhpRah~ڪ{3ě BV熷4Pq\[bg7FuJʥ`Tc.y1s{dgRDKp~6fp "~&aΔG `e eՑD>d8g]-.yqQQ[Ql"EO%B`!*<4zv/'>yuO#XhLЍ4,1. abw]z64JY4G8b=&H8ĊߔXЛ̒5@%A\>~UMQl$(=]C?M 1}{ ˎy'kɤP) mPB|KWl(Qz!)g2y8/.nj]<ԯTOrЫ4ѥiH*`r1!LV8 j1c#Vf:IIC3;*OH%``8FI! @ؽ񾜢NIKJ)ܔ\P1ԯT}rA3~KŨxm]!3Ԁ :lG5})ZC=ΪZA8#_;;MM_&̻l2BPRF@' #mmXLl^S ^ʟul63'%V9d-$T9gş򀅈H)Gi5>CPXF ,4bYZ)qc0|0ՠ}P #mgVىkQ+0z]0A0 00ÊT*Z,E}?za!K>8Hp6Zٌzޣ  #%XpFr%4IrT tJ3OEG`3BŽ8e灎ѥTn.%ZJDWc( %$6p.)Ȭ&].ͥT1Z@FT4PP.1}ۨݶɗ!J6MKRxq8\TV֤ >xlbraQbǑ+3X2A%:r$GB T}Q9GV 3 d姥B}2k- P>DaJos҄֍ջVno0q[*s?5UP;nԔ?N+™" [/s7#OP7;m,t];AS"QI8Pɷ;3?rԻSOMz1ԑ$ʜN$M2EqٙpKnҞTNT;0HCfSQf칩ݹڢfi&R.R@R9bj([?)JaG}`M8 'Hf1SdG1Z|.r+#w0*RhmVI{J=MDEoMqʌlmLJJ˰S0W2ykjTN(i *md[{̨O3S -]Q뒆nTje2JsE~X_q |sjD>fnf0 |#VpRX$7ە'10J*n&DV|юPWBҗ-3?Em0:A\a+84ļꅂR>CEI&eEqttd aV9Z "WBuO*)RҠt$q%{#+qooRF_ KPA$Ji[~zLD8hb>Zᄅ JKS4AP ̯,8ur@d%j+)|?8bmW枋#A$ PÛ /ܛquN$Sgn* RD7¥C$@v.*BgY zx%C=2*yѺtԪPU?2 RJF$g`ۉJd}+@B{5xV7&VO`) Rc"<0L?LrbFQZwb>2ՉR  ۋqFQcRyfaDg .AZI"DtZZߘ^)K'#ω{ m94Ivn[\G$yKHJR ba Jǿl(Se69 :,ֵ^Дď,j†҂y0*'3yE0ڋs3AIhr(LQ}D==tij1WA:2M @9'݋|jAM\!=KcX>MӐL(PoܝSooWwYp.7%s.i3N6j̟O2W{Rnܯ3&7&7 9R 9D 1I"r׻} A24Z\CJIJ"g8U1"47ڒv~+PrT$Wfi6+Q)Q+[)Ȉ;)C۟ki;gJ&)e<>UNB8I*װk-ܵ䉵Eܹ1D%8ڎ{4THT(kIK3(TDYZQґÎŴ\լAqsy{ʕ&i q<^yξi=D򺺐>ߩô,n5Ƶ(:T]0OGxY S3?-LX p#Z\6y#7QQuytgg%IKJBҡF1h, ܨeLx{*1 *#qC<Ցl&Z\?:MS%s!u#iЀ˖$h4@4 5J'v1M}?7=ϠQՍMOsZV#Hbp\ircDa%ATZ1-#3 >j}3ؙۊ闌/EbG5BӔpMH$*JIZt 8R)3\ DIL\bFӡ jlj)]AD$ x *a@)rQL+4r!ACT o+0U}UZ uF&jUGҤNJ+  ;E]2DD!zI X:|ԭ= !-C<:l+soї۫U F *pzDpV)"s֪?Q$P&gB%Om |ПDLg:zPPq#i>rH77OQa~CW8W7)ỵ_ax}3'9q -;:7 >:}_>||0VQ;b~M_Cn~gL~-#T#<0R:%inѫW+Q'8,ߒ{:(CqoԡQ 4 y=o_#z/X8O/F0qgpUS\GGţW8M,t!&A$V|ھNFՇ^>pN@z/Lt|?〦 0Elu;?&kGGzgtzk+qnʼnM:i N0ӧϭHOO#'#NrF P֎Վ~[ݵ·aG(ag*jb̺kz.csċɒ~1uyN0+SEu:Z u-_k<5A_d|kOGCpV~"ߪp *Wժ*ժ?Ch =OF98SE/X-N#Tդ,6v}0~qtCVk]e jbZF1O,`OG(!t`CD:gr2t8/'tlWC:D1)OFWkӌDY.M,2X634 PH?c?': xGݞ&k>jQ#a'گUD8{Rj).|~g]~5^qdžSߑV(Nˏ˖MuWZ57R_>_[}NB{|ß9?P e~#y_sXfzv.khV|!,<֌T\WF扖 gYWCVíXZh|U>zѣG\r#O4VSW;]}ft8؆v╴`թ!t.qO _̿:1>.GWN'=~v_-NHR/+}~3\ G|cubuntu-settings-components-0.1+14.04.20140306/tests/artwork/electric.jpg0000644000015201777760000063036712306026751026461 0ustar pbusernogroup00000000000000ExifII*r(1 2i< ' 'Adobe Photoshop CS5.1 Macintosh2012:12:05 08:00:300221({HH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?ĒI%)Zģk*ƱſKx}/jŎ^A&gn~oIMF( y.CZn+ڡq+Y[_]{\^HcD7~6MAAu{Xּցwm\IMYnKXdzzg|;{DؘզnXƊ}?q Z~X`4h#ounII*Ǥd\%G;lmG>ϥڈԮA)ĭSOtIcWmn:z7UY<lU>${~gV&Eڽÿ >+&&qp k|QRĺĒI%.7DT5R-0 XN[ퟑBl[, @..Y~/sW1~k#?NOD*ʰ589Ms/6eGgq?7 Mؖl{5[nN=E_Τ0 D~oMmls饂[,{eU3QjYi9AB23>M@Z/4 7L!f+[u @;d%@(oī<;UgOTxwwː{NBp`krGˋMq'N_ĒI$6m% 4a5D3C 0tk]1AsJZjgpA;X~!{cGu:kSo=Ǣ܎P//yCꭾ{]}F%:N qj#*c1s*\;Fw+unƿ?i sk'~om C߲_t^e(P2-!˙;5ߡ6oP9e.c\wm[<1gIt#+dbf ɏFs_`䏉Zv+_K[-A#H؍e Ιʶ{9{^]c5B%MYvƶ#qg.Tz oa}浡)vy >j'_6udg!5Dr?}# K>OrYC ̭ӴAnbg#)z3PtVFCK7m?Ku[ZOkqԒI$ML(J(Mt쒒ڷ+BTfիCӳ3f\s%mA|x">U<#ŎZ5j8woC=F8~뿔n򞽚xkD﫡鸶tNVC/7%U>ޝ}=73=?Gף.:OK敥suL 5d۫sC?GG0=>Yw[1!S[o/uK]k_nȺ[c%iYӛSuڿSwX坕zu{ Z@յϤy'R~.wW͒u[(=F`&Ɩc7i}3P?TԖ7ǀ^kef7u79mcS-.9έn{nݵwB 1 'QuP%*[[+Mw*?O۽yH*Q1H 97Yf{Vf1;ۡz]mh@v5ˋꎥmw;r#='o?ԒI$`3m#K\HnPa W* ANVSKe-s6cK;?4 8qO{讫XZِ\?۵(哄nܞ'\|5:]rַ ??-:En` .?1QuF9?QpGfMoаrg򿖫r XeeQy31"=?1i }6sv*4alC-L ^{|fԞ~chn2E_˵t=8~fhs6=G(8#|<1d8M({ޠts9v CV\>pѩ oO۲)B<0ӏpp-?xU/c8Zx*m;U-h!!q=VmwMYbƀ<78ߒo~uɵh4As#Q {h&x07H[Ax A蕷M6+)][D6k-k?1Obf7bk]aW,Z';9c [sGnYK;7esnֿ޷oֿ֯=9s_fmĪIѯzk_PUb6T潂KCs}79෮fֺwEXC5.!jp5;կH P k,DF?g+>ָ݆-lw}+kkXZUA&|WuOybWmk͵{w~H_Z:'Ygx˲cmoZlA7`-4D7^w}Uix |ʻ21BY긍QK'0q1غdU3_\[`md{>~׽߮5=WS,sl|ATXJD] Wͱ\k,܈@ Qhu]m{E.GK.eTٵu>oAnK^˨pȩ=;ϥVO .-ٌ-cm-vYHcl{WzhNksa#ҍlVؘ!^ 05Q uW>'Sr}#nI>DZ FԒO %vkB8@[٧ z+=")!x{9c[w}cuh`x ]XѿäDL('p2lzbX^}G$I3'ʁ:XsXIDO}˲ge[}uu kZ}=`kX?=ޫ #cXyeo7C=允u+s[ؒAtM،kKSt{IebD?cJv?evv0q:Oɤzm|{eB>HqMX_ ;]w -lCyq3kکXuC%N / ]$RI+L\NRyR1$48G1HM1; \4- $W=V_Ho~ވw;~=;= JKqMmqnw4n?r-v=Ť"[t{l}{lhs zo[ylw`II$|ӵA.DkgkO$ az:mNC ;w׮B+ O H 9i~O,=,~ػq02x:O~0mG*NGNM|e0Fq:/pIVXƓTVcc/) 8@I%6JlJdSa쀒JNGw$|TRIs}!gڳNt_JPRM !"Photoshop 3.08BIMZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%GZ%G8BIM%V{}Ho=Nv8BIM: printOutputClrSenumClrSRGBCNm TEXTColorMatch RGBInteenumInteAClrprintSixteenBitbool printerNameTEXTEPSON Stylus Pro 38008BIM;printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oGrn doub@oBl doub@oBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@Y8BIMHH8BIM&?8BIM x8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@5S:8BIM8BIMmRichardThompson-Cover-300dpinullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM { Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?ĒI%)Zģk*ƱſKx}/jŎ^A&gn~oIMF( y.CZn+ڡq+Y[_]{\^HcD7~6MAAu{Xּցwm\IMYnKXdzzg|;{DؘզnXƊ}?q Z~X`4h#ounII*Ǥd\%G;lmG>ϥڈԮA)ĭSOtIcWmn:z7UY<lU>${~gV&Eڽÿ >+&&qp k|QRĺĒI%.7DT5R-0 XN[ퟑBl[, @..Y~/sW1~k#?NOD*ʰ589Ms/6eGgq?7 Mؖl{5[nN=E_Τ0 D~oMmls饂[,{eU3QjYi9AB23>M@Z/4 7L!f+[u @;d%@(oī<;UgOTxwwː{NBp`krGˋMq'N_ĒI$6m% 4a5D3C 0tk]1AsJZjgpA;X~!{cGu:kSo=Ǣ܎P//yCꭾ{]}F%:N qj#*c1s*\;Fw+unƿ?i sk'~om C߲_t^e(P2-!˙;5ߡ6oP9e.c\wm[<1gIt#+dbf ɏFs_`䏉Zv+_K[-A#H؍e Ιʶ{9{^]c5B%MYvƶ#qg.Tz oa}浡)vy >j'_6udg!5Dr?}# K>OrYC ̭ӴAnbg#)z3PtVFCK7m?Ku[ZOkqԒI$ML(J(Mt쒒ڷ+BTfիCӳ3f\s%mA|x">U<#ŎZ5j8woC=F8~뿔n򞽚xkD﫡鸶tNVC/7%U>ޝ}=73=?Gף.:OK敥suL 5d۫sC?GG0=>Yw[1!S[o/uK]k_nȺ[c%iYӛSuڿSwX坕zu{ Z@յϤy'R~.wW͒u[(=F`&Ɩc7i}3P?TԖ7ǀ^kef7u79mcS-.9έn{nݵwB 1 'QuP%*[[+Mw*?O۽yH*Q1H 97Yf{Vf1;ۡz]mh@v5ˋꎥmw;r#='o?ԒI$`3m#K\HnPa W* ANVSKe-s6cK;?4 8qO{讫XZِ\?۵(哄nܞ'\|5:]rַ ??-:En` .?1QuF9?QpGfMoаrg򿖫r XeeQy31"=?1i }6sv*4alC-L ^{|fԞ~chn2E_˵t=8~fhs6=G(8#|<1d8M({ޠts9v CV\>pѩ oO۲)B<0ӏpp-?xU/c8Zx*m;U-h!!q=VmwMYbƀ<78ߒo~uɵh4As#Q {h&x07H[Ax A蕷M6+)][D6k-k?1Obf7bk]aW,Z';9c [sGnYK;7esnֿ޷oֿ֯=9s_fmĪIѯzk_PUb6T潂KCs}79෮fֺwEXC5.!jp5;կH P k,DF?g+>ָ݆-lw}+kkXZUA&|WuOybWmk͵{w~H_Z:'Ygx˲cmoZlA7`-4D7^w}Uix |ʻ21BY긍QK'0q1غdU3_\[`md{>~׽߮5=WS,sl|ATXJD] Wͱ\k,܈@ Qhu]m{E.GK.eTٵu>oAnK^˨pȩ=;ϥVO .-ٌ-cm-vYHcl{WzhNksa#ҍlVؘ!^ 05Q uW>'Sr}#nI>DZ FԒO %vkB8@[٧ z+=")!x{9c[w}cuh`x ]XѿäDL('p2lzbX^}G$I3'ʁ:XsXIDO}˲ge[}uu kZ}=`kX?=ޫ #cXyeo7C=允u+s[ؒAtM،kKSt{IebD?cJv?evv0q:Oɤzm|{eB>HqMX_ ;]w -lCyq3kکXuC%N / ]$RI+L\NRyR1$48G1HM1; \4- $W=V_Ho~ވw;~=;= JKqMmqnw4n?r-v=Ť"[t{l}{lhs zo[ylw`II$|ӵA.DkgkO$ az:mNC ;w׮B+ O H 9i~O,=,~ػq02x:O~0mG*NGNM|e0Fq:/pIVXƓTVcc/) 8@I%6JlJdSa쀒JNGw$|TRIs}!gڳNt_JPRM 8BIM!YAdobe PhotoshopAdobe Photoshop CS5.18BIM[Gd[Gd[Gdsf/sf/sf/mmm7i7i7i9= 9= 9= 8BIMᣑhttp://ns.adobe.com/xap/1.0/ 00EE7C082796FF3A8B853A94E8DB02C5 41B0426FD2B51369BEB37D1EE717CEDA 7CF42B4EA86BE962ECD991B417784D97 8F7154372527D291432F3C4CC5EDEF43 98ADCF6B5808CAC08CB6223E074C76DA A5FB864C53D21F60DD4CD1316E523DFA BF57B81A9408AF1CA9398E57CCD42FC9 C5B2B278634DA92CB6D3A59EDBC5CA47 uuid:058A49DB06FE11DD91F687D301BCB260 uuid:1B9AF97F6DAEDC118E0ED9E8BEEF5534 uuid:26C1F89E3C4ADF118A5F839B39D8AAE4 uuid:58F338083D9FDC11B449D23BD4528914 uuid:732CDF9BDA4ADF11B3FA8121BE74646F uuid:9545EF1373A1DC11A4F6ED22B4787696 uuid:A314A7337278DE11991FF28167F4E92B uuid:D3EC7778876511DFA58A94E5DEF6E887 uuid:EA4E4949FF7ADC11AB86D1CF4F8ACBD0 xmp.did:018011740720681195FE8B3FB77580C2 xmp.did:02801174072068118C148025D7C53912 xmp.did:02801174072068118C1487E86D91AE35 xmp.did:02801174072068118C14AC2E64B5207D xmp.did:02801174072068118C14B89C6647F72E xmp.did:02801174072068118C14E63B606D5345 xmp.did:04801174072068118C14E63B606D5345 xmp.did:3872A0E227206811AD1B9C09C3F08F77 xmp.did:40FB977471216811BFC9D265B8B93FA0 xmp.did:62DB79183A20681195FEAF3088BA9C4D xmp.did:778F23A37B316811BEDCD5AD10915AD0 xmp.did:793C62AC3A206811B699FEAD67B282D6 xmp.did:79DB8D923A7CDF11967EEA98132AE291 xmp.did:9167FA13CACADD11A2DEB41D46FE7831 xmp.did:9BBABA8F0C2068119457B0691F3D00D6 xmp.did:C301129869CDDD11B4F0BAD9E1358AD5 xmp.did:CDE0CBAC072368118D4EA4A8E9E1FC1C xmp.did:F77F117407206811AB08FE7D8895351A xmp.did:F87F1174072068118083A91E0F3541BA xmp.did:F87F117407206811994CF31B3B6F4586 xmp.did:FA7F117407206811AB08FE7D8895351A XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@;     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?kJ x'#]?՗5\oŬx_޺ϧ]>>ԍU߃?Po@?}n9yd6ݿ?淋 um}z@76 {^ ׿ֽױŽסּPz|)6᫧j:yeҥcI% :A_ߺѮϯR+9|W')<ıo?u >Q>7H߿>i\uT%P uMt`V)dX0׍̖2Hcȇdh&pLPS}.c˨HydkHդv6l/6ߺ{T노^ Wߎ=f.pYܜ&|^5Y &WB&W1(]IߺY+6RfKoghQ%d#yjibFAkxߺGMPʱV1fc#=T316OH}PJSs4ͮL8zǧMU :PKgSUP$NIj$@#W˭SHt&$?ڽ{XDtN#@omT!LTs?[K(a U1WM0F(z) +)lAA^qw,i*N`Xp#ӯPy&;ddO.7>La؉80 ~>]kP5f/t%Ƽ2T5IVA Hr߈( :zEw|)SAҖXpJi OI$2(؛XC^(uڼ`,@ث)R 6Fi ٔed g9bQ#m;djHd7=׭u=6ekT06 zBkVӥvGBU4T=İբ\\nCN\}2MbyŹ?.7E}uBQU*eV)KAMQYU" HOM2HRNg۹(19Z`]XiP?mbco~`1=¾[OsQ,[gqSSOS>14<$Pă;O0IMT# :pE},yo Qڃ->+_IUy H8'(V`<jPJtvZzt EQ#E2hƎf(5bbbkHúq҄Z<}9º4V٭vcP^mybk׍Fi5:sdiT씿ıոuP3U&u_Q r?OiæAX"')hjkj:bjRG2,@S`[D!KzңI=;=DU1>z䦞R:,H/`?OjG@J;+aHVO"?Y_g6TA/IRM3CMx=Tu S-$KQ )b Z,2 VP} 9#=X T)"{A?}\ uu8-M7 }?_{-IKlk^ԬN~ ~9 Gԉnc\Ptdֽޯ>܄QMRA)SފScKZ{ϴzz'=޹H NSqٽK[%̴>}@7?q`iN}K~'u8hi?r?g/Z=ڃ=kIjl^\>SJǯۃ`86{Z'^>&ujTw6 m\n/?Co~ï~/u|'mo^{[}z?TiîJOy$~ u6/oi}qߒ"c[t(qu_֬*2j'=@[TJ>޵N}.ٜG?bm3.-ُ6^*`2T OfTΩ*ۯS\{,zs?dI;db{wjPm3xU7ĭwCLI둇Q^zSϐ_1%w?[3oWo=ÚGCSմu5FFzZ!]_nUE q_#O!_ֿf꾔p++WwktI/fv6;?hQQ&/M4tt0Ƒ4`=J/]ݲkg;z5;15UnMin~ۢZxh;Y*cU=$Iz8֩Bsӧsvfn0Yy"Iߔ Óŭ4! ̌Ԟ|4]Fß~z6\ycL}`hSH*]M-\z%@,}Z7|w|'[=2wqPS G5WOCK)蠩T: $jʈ>߆0:@a߿.Rn=s֔5qM=Y]dV譳[KeҞ9ꕮi?q߻?kՌ!Gz-1{]ciX]؛Zu>8gVOC>3G7ڔu;>m zlɒJ|eu,RT"+,uǏ{ ,(KrWb{T8ظRe9C 'jZjyte${^bЁݿ۽;mbO;lm\dX auA(z1c(* vek:z3OM,M:oOǻ:Ot:iIޒcJ-%l)50o5UIHAOkG5fӵxs_fwTuS:g e7_\oTlgj5)E[HB\U,n!>&޹wV^wÈ2;&3w: iWtn;=ka٦pryX"%SU$0*B*QL@zyBWǽ_]aaoݷ'o=ͅ4k-!2F@Lsʦ#]c˧5$zn͑כfxWޱ齗i/ϻ78ZnI)&UW9ťh+)ֱ\uG @o_)jsK?هz\hػxJ Qm3ySB{ =a~b kw8mSqUo Fg1֝ɂؘipK!%>1h+i99X.Yʰΰ-?._%ކ=]=S}mkH6_|vB*o< RԈK ARQW1luWUx䉮C,o?ђXXY*An( Esէ|QlPt '~0wSe0;itgK}\6Rz\:n읅^ %Viwh+YdLҐ|?ʿ=4_)vmW7^ovT9Gۏ5% G.S q4 Y_^}Nf)қU.W@/B⦡wGLTA=$UqdW[Ar&![ˡUMBgaOa֧v۪{VL)[%pxjz/yU/p=<h]MdSu+Zt}c WǦ}~cˡkw/hu?}77[|~_^nNWdc{pG[w^:xv'3C'=E^A $1-*I~'d`cϥ1N\:iZB=~dz}m[ֻg6/f[ItGtcquYt$eX#xً{h#OIPyyps56Fd>77g7tvY}[7MSjjv~{Y!9*ǗZL>zX5i$E Re+rF ><=D]ٛw!" ׽] zqlnJZ7ѹQSΉ*,JW*yN1&먲nln&ٔ tdUmWz:Zz %A)EP=MHh~t<>?./2~KbejwGm~̯o&o;!]uRwOlb3RkۙeT[1)>R0SϠKޛ+mݻ6W}[|½/؅vj dz#S@kq-Q&G#WY+U[_PZکeݙIԲjCӡ* x$8?WN+GIiM`8'}Hϻ)S{%u1V?mƑ HWQV cb(}u y{{ mK_^ >-cE?XğDڜ⦽J85)uo'M="P.\7Ϩ,?ě8LI{ߏ>׺PySPߑ?on> ?^o~]s#_Mz9Mj<} ZOϿu`Hz-k->׈zKnE ymo?=87}i*<]wůȏv>Z4;~u5һ::Oƿ^/vnA\K|zøwIN[^\? N]}Cqъ3OQTW`n{Irۯxd)YQb裂E% 4qQQ(1׈ϣ0R2>N)~+M;i Gqtw]1ZX8U<tTQkKMSE,UtR%%],SSAQO4RxhYHXy׀pKޟ,G4$j!{8ջ/s X_ z[:0KnpE::nMk49]9E&61M,OE}YE &&hq:j ۱3|bmyMxߒO%gvc-.ܛ:)+́&ՅXCCä7Ę/Pܖo mRBkvJ &SpmZPDu!L&f ̡iNN݇WSv?N{O=eT_GMQUU}{'ʺ K>ښ~ҳTʺ>UzЄr ZӫVǙ^xvu-ꃴѠA[Cvv({0 sq\>OxwODHwk|ph; 55[#{ISRoDȣzkU,IStڏn+Oُ$AQK51׶^ݝKO;$!jcaˈ:[ 8́ANΠwJc3D@ &|Bj9jM_[V#{Fyͤ.@f8ٔ\)Y Ӫ*ԯ@M.$q_9.͍:W$Nڏq>Zy{Z#{\}fgzD6ž :|AOKCEN^@i, ;tmާұx(syq?]|oPma͖?!z#WU@KdV#:)rҌx$s!}@ ?C+U2>W5]<scn]# G}e&]Mؽs^:zZI,tO2N; EjO}'>jK}D4 V5*59>@o.e6%;w]=~zsC,~ڮxҔxaqydA[{1<݇4<GKѕdIi@H#ΕUt6oWv~ttT9uAnلP*N(ISr=fIB^qBJ?3b9aob%^"jk#E? "5m{$Ή$[=VFzi,]=Gz\fpo}쬾):ej,L٬ II-A;QAJu* zq9n - Ŝ]M؛uu>ܳk2dU^̞|=N-r3O=m=ڛaG}n~J|nvܫ]Y]Iny7euƦz=KDu*AײxKSԕ?m~zuNڴ+oMӌip2RZXS {,zz/O#1VUn#u)*vc-=@đB5@6=Xg3/9}:-7KqU`hɴ܃wU`+LQJj 5{ШPz{tE=;t.ݙOA1jz97T[odϺzkЂels7s2IVF,>12YJ5`Ny2y-1ٽ6n3CdaasTiY-db*Hf9tVٍ~]7ѠoCtgla(k7sPg'E:3S#ZJv}e[_u.3+[bk)tQïUz٢=m#X UM֓db UDONeç*w|[_{,uKipsY욽qpJvi0nFXu)) xﳠK1Mǝ/_Few.3Yt,VETVV U@ӏ^ u6Jj qoǏ|p"T(S=D4 RTU$4qI"5Ud,1+F6(A`xtfҗrX.Wgnlc[xl=W 6릅&U!ls@Hq@T=6F퇷q[of9sq][5+fn.6Nkcvcn-qno[nݷQ;rnoOo  I^/MVOX5@bA 'וv Q%koѼ~O.nNۻ߭}ԛ)A*(귖޻m&è?)(q%K,2%emY^..=sK#.FG}OR>ۛ1{pͻlU^ܽw|xٴ8J:| ,榙QZٲ,Z.xӇAKc,$g`]7}7뱝>"zm^*NƸ1u^tx\1C-Ϸu%iǢxϡCC`lN썽M4zlη/c2X6a_$^*PWX%.E,&#PNkзДaNbvnz:}O73=ۗn͆c)c+LҴq,0YcUJál[@Ak>.V2YyXbttH8OMK)щ bHa%>K$~g6o`[iopŎe(CAǥvtv;:x^8HPTqMgvF;tVuy-#Zo=6+9Z#Y[W.PZDstEA~ |`程][-}ٛAr&>/%g+a`3EoAAX67I5DBŭNথ=?<צIiTV&}fuuk{]ńgOkka_ccB\;ho>n i[O%Z+% "UeqJYctG>Μq7ۛhhd3&ꭅ~ktȑh2{p{w5Q]IEEo !})BOA~+Uouf{um͙b f<^qn[{ KGo1Tkkme6>5J?,$M3EZuoۊd~3df{?׻pV̢J=6]-N{OkEW<\:DD \)v/oMiz|1򯵢o|N ,fCC},)H Wo} -EyH}0z+X1cMlXTԀqnG{&3xwrO4d( @mb.^v,v؆r;z "A& X^Đ[o FsԑR4WbNXn.m6Z1BpUCS3k$6Jϡ($ i^?>75i[{}n> Q{jLccc*= $~nk{^%yߺXO<[DSzטps"\VG]>[{s׿ߟ޺ 9~&N'_[@{[ÎB-s{^8~~BF:Ⱦx}{W^:'7{[뫏?{}?{&A?׺%x{9=u-C$^>ǂ/͇ur-ߺ"-͹>׺8  i {zz6?CK!xuІ_#[Kf6qqkXߟǿu}<i=6ؽ_@/ Jt 6𽏽T'OJ ZR?OۛX{lϪt-6ؓ8s{֝8ϧō y i$tEFV_ӝ=& i u1qDkq$ikQ6A6?E}VfΓNu*-+ìUM0<-45ha1x[<~}Xՙ N =$ϓ.+m]=i+$n#{V&oL>q{m+e2zW?.öbDP.I*?#ֵK q\1běUKm%p1Ѵ0x禚#]@xThGǥ~USIm'@V:PFV^=Z[ISFΞcӤVJ_-sbZRMoamTSˠDi^`G<#[ߟ=4zQNE\~}\PNB؂P5YOЀus`Gdz;(̓ t oczvfB$)"[EWOvt"H` UPT2ˡ|tj=Ir]_Kcac^eYS=w&O:28=MMDKڴ KEuK{vٳZeͷ0Fjե: { zn}JI[xadzO*Z5zۓ5uSծSzBzo$Iń0Gz1Ǥee v#O}&_kԁ.cuVgtlkuIFioOqvW*)KV }x$7J%->־Μibk [}??>Z-.!Y]W!w31PI$ػx E(ʠ,H䧑}@6^@o6w*(J]lQO'} Ooh&5n4WOO1Ӿ*t\߃Z@^:H$sr-^ͭbj ^d&O&Tj?8'Un}P%<8ztg0MYtE܃[kr;+Uli`IdV Kie. Nm/`q뫴BǸӛxI/GClb.XNZbEb[y ={A)_N\i3 +)'4xОiQN?l`ӎ "Ǟ=ۨ%#T6/Dûs$+ -p?_#"%VY/(;:#YjD%ԟ{@T"@?#WPV& ňs,=k QSVXl-n}A-/"^*[qjXېG qu ۨM*!gccoŸX{8QQ^VrrO\6/7\QS?~nӞGߺ+ǮD?{?c'_p}m{$ۋ[8nqV @8H Sn}PP3\8aՖׅmߞm>ֈw?wGמ~ר+P1ׇM?ߺ:H}{V1~q{^/#Oou~?؀#׺p {PC/zTS=zOZve'HolD?؁`gX.9[GՀN:_,}(1׫Ը)y6sٵӭt_qsnom{#`l>qo~EhN,\ߺ^X[\^6n?>,h:δHo?JUtqΖiqk.>K{mژWx}C͹oNc Jm}OӁ??둪@+tUΖYߐm=^ANF <.?%:@JWJD?ֹppF(:m,^}@?P?͇u@uocXɵkӡ3Ǯf;"QsJP PA"OzO.kש۴'wSoޙZ)gMOCS,3Ub@SY-4fzZ妨XBT{Znnb~ޗ_i*/\_=XgYά/V>%o +eoڼQUa(iPrXA(aG]Խvu7km|߻2f-<KUO-u455Le&O_ͻ#A 0GMKm$LqO Ȩm( f:W٥ + 8xpiA7`Ŋqu.>ݷS2"I(t\Km{HX i~;vAn;m4"70-qĉmsDzb\6:,VEW ^ŷ-*BOʼn-rK_= Sԧ=UV r̶TRI ~^x&Ԏr]BI-L1aB0"sI$GU"M*+OS+DrލJlTKϱűRq%=U'ucC5SP+ okpI[ř1< H|`B*̾F6M &OM՘]i@?n9p0>=C;Q56jJҳQ&ecSç?';3Eջ?ultTzWס T:D-zQSSYqd 3 ~]I|n<.v7-HRk>$uWx!7',jI$i6=} R:D'M()rN 3\Xsc{^贏M:X"G+R#~G x:@(yt@jy &xb4_:t}D^^vB!`Nk{ݺ|Ƌax^[HXfx!zrAq?}֬ uI'{ ^#Z#jE|狟ǿuT&~Ss~ꠞ>C ? ^'O>sߟr6?RqoǏ>yܐ?S{~'9>׺ToַuƜ8Gly^'-ŀ$=kBE? uu h{X0\=p&q<{^Blu!)p-{ž^ScAaX}/Vm$uឤn@AՅ*:)IPy< ߟ݃ץ!TBib>z0:)qK۞EhOJ2Fzp ~_iN SX=m&&PԀ1<#7oߴǢ҇0v?a5!zvk GWצ:o{'O cϻצTTA?q\u#bx^ bOIө>]KHܡ66s>Hx(!rx&~ OwCCӤ rI+o#XGRJh8zv v}>GKIDrbdUx[R={h[` Ms' 5w+5gjNIKX$^PCrI ~HJ)U"v^ٳLCʛpz 7}۱Jp/3_ӧB՞RhX|meСyZ]?[DR<08#klɪgEI^DGiLht?&ߏ[u[WagFVtt+ՅwW-xІ1H:6P0t銱п#o cO?tf 6=゚8ޮvJqr؃ <BJS}JܝAiz 7^Ë$Piu"UgPcf@$[y]9t[Ҭ}_RHC{Ƿ:1лeB:fKs͉bx{Wlji}Ŝ(j>ھ=uˏ?~o]{/qlqd[~xo~}#]yc[{o~Gyn7 lGϽᠨ=xs? ]/ɹ}Kj{\qa7_ߺ@]~@~}T-u G׍Iׯ{@<ߛX~^R?}}u??uޢ8~>{I?Лm؂OR[O.϶zRcFa'-:b5=nzx]mr=6x֎ A<~8u" O^`y[rZߛߋg)[S!7_/qc<{lz:M{q?n-ſ{o?.H:EF d 9d͞['&I7fk V&u>,jxu)iӆ ňR8Wu!(5y߁'׽jgJ`aNoxi:U/ȸq $קrItTU}WŞ䦿U^m?y\)=M~}ph 7vkTFv~> $q oMxF=-zǰS}u+(r<:BTu1YnjzX4M6*x7Cr  FA0xt13#TP]|oxwľq=ڟuѵG]c [qncGJ UgFVFg}z2w# ,(zC{^|">uWF5 Ĭ;Mq"GK (+eI6Q >wI,T\JIaX%*^PzW,BK Lp'I`zffM6S4,=VBm.Nz -> fe=k_.;41C[O M0Ѫ@(e5 */f;L]4l#4:Cco,2D@_QY)F[(܅eMCNډ?٤KE:HNxyu)?n[/axP6(&:Ȫ8}/ۏ~xSX?Q#^>Ns??}: Tg uϮP?[r>$~4~-k{^-]k&^O<xSnm~b]b?ֱ~ u^א,9#}cG߿u E׺_9OǴ]FzRIď<}}^G^?m>p  kGNrx}?jdtϦ VmrA-pob?x\EMAsպpQ.H?כl@z V<%8<6-A#H` A_?}xK&t0#U ^G'MegKm< T5&qcyV5BVEuLt,d_-KZϦ&`e<[kq, F Q<Hkӛڠ(mmo׋h $%r ۅ-Ǵqr+.h\nmk>5kO.@v`SO#iziM0:O?a׀Ȟpx`0+ǯMq' k/*>kM1vm[B8fnmE2; 2T1O8bJ* ypn@ΈQ5:M=, !ąRBtd'E1Ɵa?E>g|-mɵ;1ڛJ]>iQʭc !**ģ$,V)LiPӢSPPCJƣ؏sg+Rk1 _?z|UtJUX)tK<=4D{|!tԑmR=+C-VHHu#<ط[}C#TЛ9z%`!5TtUJ/,0TViK ozoLּ+e[DP A$z/Lf+D &1UP|+,rO?=WpJ ypQ$8=/hy@huEI$uT2 *ZWE /uź%c5K&ARKA 7 i'ک&$lh~Ϡ~mpbZTԚӖ7% 4ѫ%30'Ј7ݔ\^R䒡}cG>92ǟNW[u]N TȨ<(%#]HA!t>oWukՓc O{$<~aNOkQc\PZ1qzu #X,RsRA㑜Bc!*hFS#Blpci'HϵtJ=:^LA "?:|aO9|̣feR0.P2Kf(XywRki.j'nm.q_Jq?gC=&[!U@~RĐeU(`oܟr6N:.6Rn2 # ?U_4'ZO\5iߐ.>#hkE8ncv&?mpƮv{#I P ,}_<K}LFgGV:rU>EH7K{r,ӣuG&\Cʼn:uZ7s{8ߺYp/qn>xӔw?^ƢoӃ?T)Oo<B+>//jNAl7Б2ߛ9aoɰ@´Idt-?6oI69è Xq̀b@zϟYBImocakTt=B_CN'5P2zt@_/7w'.mD+ԚGF=#ҋ&5֖iX5*-}K}A[Ӷ@GzlD4.~ޓ0R20S{[ٓe+POnGVkk~ya?DX H cn>qYa,?^?~=xV(:M%Znmc$gZR‚lT^^nێyNO'n8?%uABBޯӪ:XXp},M͹y'Mcj1Nf?R q|`Bj MU5i*[.MW"܎6r(::?GS`v: GvnlJ\=#- +\ZhcU=,~)Xēucg i 1$xpY.唬0P TRo{lϝ*پ-]w-xhZ~LVՊ`ړ}F")|&9 K7E=/$HGM:5S&GJ#l\I,Ӥq(bI$PEJ]NW #k+ேi'rv 41]׸E#Ǝ!~߷BQ!Q些j|18CKxVN]58BjЂzUUWbYtp Dx m G Ơfe<8t"<$Y(X%Tw:* RTqtI OeGՑd{vƍ)f_DZ)h<2Kzzgkkit˶~TGi=DlΞ;"*E)0/LAƧXzi܅uYؑ 0MA x|xyV9T^X/y:|`G7Ҩ ϟ=&{2mqC>xmj22aVYP)ɢI$E>ě5̩! ?zy)4`Z OUUue<d1p (r+'ڍ٤znn@_R"dѨZ"*4sP8joi#o4C.j[@SM8!֤?;d$cIr=,XUƱ; P"}I#mʮ(&*+dNb`S]HׇT[fwQ8#$O{IR\ԑm#2 5M+xH$AcΫ4ad@z,4BTI[I{&z/F|_>c&q?SߺJ1ZZ-hPWWNJP uϟXzW\ /ZP{={~v8~=林׮~ok[}^ߞ?{[뱧qmk{^ߞy~?~﾿{}9؋[>~w{{^"\6ߺS"67IoӄKǫ펫ӜKǧ -JQPFQd֦zNtGCIqa=Ѹtԃynz~{Qևp[rj)_C1 ߎGq;PE|zkCo}ϴޙjPӇO FPx<~ԏh$\t崚$=KBG}?'׶ϟF`=qHFd< 8=ֿEΚCʗMkzHߥ&=G|}HY|Iy$]V#iB'RӤte#-~~{ejN"m zlbK^AkUtBqN$p8Omؚ|2Xہ5zqx"n>~{D<:t Au c❵[מ>>xWJu&y%Ӫď-ַ#)Sь1xS]yXTߎ #L!ytW"*EH~|y^<.]ͼ6bpcJLv##-f2X!`ڡ#0(RqOOѭ>$Zx5POwx}N짥ž7dn:zlTe*c)(M 5,I;?H%$ԟ^;2[VH jjTpԞ=xݷY bbafef]D-_~η ! T1ZheѥϙNzks+IWӨ  C!g} 9>dU`AQՀ8)գPl J0 `3̩N e,B_j_=7gbb`‘)WA}!VpƒձxTeJV,HB#QE6c=.yo 4 x c8p<ޗΩf֓ FOM$V@fOb b6@%~໦УA?:OO"01x F'%b֌K+UX4H(MzCc=Kz_rOqJPx4ҝ94(,XBJ!ˡn!I'mR|^}-6gTUz' j gNF.y.&ْzWo7N=Gqjrt`߶U{87*yObK&`E=IMgq>Cz_ڸ̾zYԴ)!V2t{}Am|{╆%hgy{[e/3(h  ZyA=rYZJTQT+0ϮvCsacky^s7$%cAZ=OI}h8>L*QJ(`ҡ4~x>a~ZmiEUX3XqdE@7kO"0]Ib?K^҅XJ\~$qͯug0eDMaJWBgqJ#[MΥ_Q0E$wbP*#$o*IEֵ+=9ID7XxӋ#h=p<}?ݩ(sP k#?c>ZPRr6~V?r>?r7_yz1s{~H}o{槯~?'}ݿYGӏ `_ߺ\-Q͏?״B?_Ͽu.I?&C?=uO7, Umͮ?Sny[?ĄZ=Oq}Hudק(߫OuaQǥ=M@ABI_Ņ{cSӄ7A_JjsuS?& qyAo[ȽHp ziGXdP<}=B[qǵh܁a]^R`]mlËd:O# 5=9(Hӎu:BAQ`F>GclgvRDMm Jrv7^aH)8S6U;X8i.E]AL`d=l ~;/6.Z?uG'Y=VYg룡QcpcTӳF'-Ą-G j-ς}6,S_>Ӆ-n{'kdcTCjJiB]Z &K{cgv*hOcۢM5ubo ^ZH͌gdG$zEfR9*.9.ma0SC'[|Ij܂ <85=.ubʼnȅ(HMP$Qdf7'؏a[+w EjGDW Ik3j AYG5Fpt67S#ppڝi66h(41S131x-DZH,QB:y6[ǚEf!*xqew8R?_8J^Yˣ,K2TxUW@j{9姖R=Mz)6 HYӟC]u-<(iOJB,Hц@6;՝TϨo,˫H=زef-M<+̠a>oTNC^%4dC{6&C F,$T7e @nI(7I">>;5_k*n*=>]tD$A@n)>gk~Z5GCo#sJ:Vod4WXܥx XE}6&Ca:.mq1?Lnz)#ΩKI RE1k@4j-n=*lV-@Ghf"}HO?prfQjMO[Pq,Q}TKA$HЂ՗L0AKwJ-khn")<{qǷ/7ɍ)=Ӵ/Mb-+)! #UV0OԤQ yxx.n#mR fjOuiSӠ\,t,J,.Bl Xe uzp6]DTRg?IbۗS $+Hd?[Qʷ[QR= Z}8>@L { kB؛.lG~Ou}[L9dOG>׏IVXm0<&h1znk"E:hVMVu [opA"ow( KN2Y+RB9W:ZlxtmT'O}/L8g J7?Ӑ@7.V:s>OվպOg/j_Z:w?{]r-u?O8<O~wEGu ߺ]mr=uUG98@87I6c{é* k<#ȯJ*7*H$&O|+)Gtǀ~.~?:xz<ƿ<{3a"xó%(:if؛[-aۮxVt ?C?>_.DĒ.j: =YQŏJ?MCtSЫnDǵ/3 qSG_.G:;U"7z'ku~y#(|n`Mg=5MH/.5g%-qU" SdutմittۙlTUS钮 ؑKd0ҼGV(O>='`_ 'צˮҨ9_ݴ~!O^~x#j|dE#n-oƔ#S=bgªM X'N/16f ~,n||t՝z!폄_m|oh5E fG VTW8E$?Q3{fb!ҭxW-SR)"i8jt[[@H>n|A!QN?_N.B MFo1ZCϣE V29&6! Jc #7\܀@ X{s}(دZV~Uu~J m,"gBvśH$ )d_ң׏Rp`iUCT0>,_b(_u14-D?KL=(Pj_cM>_ XҭxR`iZL6晡ұzj#BBRI*s9g[n{mtYOُX/:x( Ќ`qx֦+wMW'OUt-;pJ$:ZE3ά8 m<kxo>>߼W>ا pȷ égٹZ[ xgY꿫6>CVHR4xШebf,-}-)SF3z3rjxV~Fg넻FjdfUXȉy@ {=^TrCtOY+E j1|H USEP&AUCf 5ҮɷE<+IKɭR.Iyi"u ~9=F:H87o͏BxPz\2v1)u\0kcDz s(ҨŅ+1N]BJ\:K4d3^?P/61B !$$;sуϿv>x6pQ[]OY=qOl}9ݬ'VJmәܸiYh%ZnHaGG7[\#{V @h3ӽ:&Gߐ>w?oS0/howNnT/HނZzzad1:d>d?{0mI5$qUZ=ko;Zɜ*|8g?}kiY>~o1_Z-Cw7Whڎ;BoJw^ۧk~Mv_M|}dk5(j%NG! UTtQRJKAZ٥.0Qaq(1‡R(l\˶v+"3&h:eZeugG#7{+0?:S ^{c3!ݑ1`x  ?d` jz(Ff h-TjRmo#ľ^1DQ3/#4UUP>"ȋ*z`Si`'DdcI4!dcv-{]u]p)7IoKVR&ខX$I-%F|̰2pbIe 7i ¸#iPP4Յ$I}8}iҫidc=" E3%q4%+\(,E_ݹ{) ƽBǹ&Hn 8O̟3^Ϭ,Ei)ٞ9Q]mɐmar{o6JKi8.ߟo'AEO̞'ҕ5gkh za ҥ摕pAHCwAks;H#{s[޺p8uLզVH(ὉbeydiIQq`y2 V2iJ/^w1 P⤟3)ٛEaXeHQuJ:IGRH )Pqjg۴E_?nKU,tXf0Z$VW*GjpWJĂpc65~HQeKY5.[\p= 'BSp;9Ѭ::Pmxn,"'&A>.\3/T?ڑ,ۥ@nb6}<4h,̨mCA~R!~hѶtƤb9( >gtd 纯`z/^î * -KPBRJzHbCY]Av0yۖ|u3#SZx,A?ޠG_ezsLtۈzQ\wa~@~o4h gL\W(-oy[7Z&\WϨE[ʜZ%kj}~"uO_uw@?Oכ{{?ߺ] u-Goߺ]ؐ,H6݉N=u& [[ߺ]@*9}l@1G'ߺR6`'$R}:/oluNCa{J|@s9{a\n!~M'zJOK[u6EȶqǶzH+Җ]Bֵ ǴRS_.RNop !0?Nx>6ۭ-9!u:[iA^׆ō7'Bx!ucDͯu-dSפEN4P$kI9=ř:§}@Pzj:jT#!HV0e$hZ)=5[)t,+p2_73T<%;7L&;꼮1=lP6n^sQyD9-. R8}M\RrF80ox SmE,==E5DE-L2SRA#EQKUO2$T#$U {#:FѲQTԳ+1 VRV\)ҽz8N4qkqtԵϕRc(c/%UmT 4:&iBϴ]F).(IOFvlxw >Ge!c%..m۞>R.hiay!LbzxT# ՃK2**kstm.hE*x祼f ١i.9!C'Gv_Eoq _Y 5NMӀfIv^ kVFb"tKFW1k*Aj+hk 5 :7VB`I>Dž>~Ω gtFѳxʤ*#EH)a#0Ѓ{Gfd(*|u!l\QFtdvفdR1IfPf$ZRނA}ɻej ХQHQZKZ@BX16ܟrNelPq',cN{GAfIQO^"TĞUCkS_6<_ >Y찿/+^P*4}Bn _˪ܔ/^j*U^F*<8vW%iҍE`}bw{u;r;#xyt!(`Ɗ|DqT545b4.~Oo, )қQ<qz$daX ."XfQOM,~`Xs|~'l2VE9z@ب GP4*&f &龒{22QQI5oiG$HD5>ߺ0kH+6Bdc2H]Zˁs܁}hU#gE-'(+ُH(X@K C3@cpZ}W_ʎ[9dbsK5@8'?}ѡKJԒ) L Y,6{\)nEc[=ǎIb#ZRy=8tµsSi T$h|mQbI P}eNu[4Ct@h*(Yܛ>#$B9m,"IK#e!0luo$jF>WӠ[7|r.P!GӛZ)ܶhy4 ,IR7X_SÏeRCN$۟8|>-lUP~-*!?ݧ~=6:qk~^GBqעf:J|tEߏ{Ϯן}u^[}׺k??ߋ{^"??K׺rI7_ߺ\&Ԙ$?o>s׏NQE.y:SoЩ͸?~JTǧW94zs8I66^}:}cjdp.b~=ׇO%9?QcXb[tLP?}qo '죇OВscasO#Bki=*"xŭb?^썥zLİuy5',wWˢ{Մ?^llJ5Trߟh/,(„tc2-8] \}X^?QGd$B{p:}ڕ(澥RF@HsaEYi&xюrdllW1ubXC34 ?1]B0šWr]%VR:٪iUUPGY4\[j*C!P4I?=)WGW|9CPO Mϗ9 Lzc4p 7RWZm%!Q 5A N= 9wqw6i,eRV-:bA$8ӝz6{gvPu<;ڛ Eۛi{Q*#̑If&rI+0 ᨡ+ƃэ9[ٝiyo@+ i@[qlu_ճg7vvhlۋ&K9I Hb$ :",#;Dl`FH|_)W7PįZ2rizoߩqՕcr/D& ,un mM^LWtn:VI]D)#H%-2giF*>G?)ԓlmVdn"ˉz{[ B C ˬW3a],Y}Dr\B$ N=3$ j*|VC^ઠlZ1E8Mk1oͻy;#VB|83ni,"y䬊ʤyc&A=cHֲTE(BzRV*,Cu~uJJʝG̲M*CĀ*"PIkN.X!EHe!EIAOUK%DqkȊYc>"8WJu&o`d2r$tm{GvNg2XlE^rz]AWQĢj, SU2f_]!KDuPv Z&<UV5G1;+AiJ*3v92i[Z!xT)Lov / xJ#2U'eIJ)RjԟJ912~`c" exLFŚ\_n5 9-^]\ %Ȫ#t5:GfSR<dS($1 Ek1}_;۴W~1K jEqCBFO /Oˠ- J(ĎrɑJ:pEqԞ#4o 'z-8ؚ9ΑRrjI1un@tmWq8~~|z2-U|zҾbi[!(YLJ[Y,8hH<V춸{a{FĂ(?fzywsz w5,O"BE 2 eԿM@ 8]F= :m@ P?%uAS-Қ)WF@y$DE<` 'bc2}H`D œ$%d$I) U4;q$Hse oor-S<Mn+%TF7wڸhD1FD)Q".娨Dj}u\%ͫ'NW if#b_. ?o;(%ђHcTI/ͽ][i8ϗc)_}Tc?Ae m,:y[\LP ̪Dp$TB^v;VGYS^pkkV9qxd'Ѧ EBå$@Ҙ^K[B=d/sZ]+?'6dvr N0@"S9ܑ;; DƹA?[PT^`qrn ݬIS`}"C垣I gZ r =AX#tMsrP'p-KXϢ)mƭ/Zt$^ޓ`ZįRTK%j2Z!$qDI46_N=#Wuz&*|xO?A6?}8Cskpx^׺>LׯHbO<.}&s_ߺY?ֿ~?ug{ ~~ ӻ#_MsOu^\p? ~:O!Rt_~çՊÏKjVĀiWU`?Kq~}U@OYbq-GN-hd96>Wz0j=eJg8>ifץ gCoS"`A(@nqrEiwu#>AC)A>>[v-Ǡ^<'E8zr$E@"ŁB}$\ԊziYUM\puXQo~ͺK!?:ihNA`<7!;c6\zi [6&O>H'VV >f"wbpsТDPr>cyX5#F?<KOٚeVGSVd)^]QAzZ,4`Lz_ar Ozq$' |ǘR6rLRO.*^cC姕m׿}K"<&B8Թʷam1 Nj:jP&ǁ_nD*t'MXjj p-.\8&=R)|^;Wj%D#aΑ\ |)0vCLEEpH<t0Eejy YiꩧGx*)٣TOOSUpYH om%8-oz=/|o^-}o\>!䩧Zܸjn-0U6Z! TݙEYPTӈ>G=okֻ{z~<'VmǗ9o.{r_sFX'.M4բmEd$/E >ukGG^Ϸb(@+M:@ X@*έC]{?:lj> "d{cifk+`JJwIR[I4dIKnmU >ܙ*-1Dz܄9:t W+ 7e?n~ڮ@p5wjVh4l>̏VCw*sL՛%d#0߻U=˙"b,OSVvwk I`@x=za4SFejXطPIJ$SapO{p*wPB=+FJꗉW섓R`sF&7mJǀl[phU9}z]nX@ Si쾢#W@JӈќF .cr@ F,YgϘ?D7I#ZCz6[/i(|7,#<*IVm$ !/sss .>]OK@>Tiiг >/KO,Ld`#F  @p91n W]C12ybpLTcZH*N0 ,]^I.0 Qy:>{ P8$wȉqU(VEk 5* Ϥϧ)[a?HSde vu\me˗ni8χJiƬ"tR7Lz{$Vdd.7<7F54 IAҮPݮ,AǙ PxӠ 9^J SPURVRT#G,sG5HxRLs>S?o@9R3NgAVH)Ȕ=?") '´!G4 IN88ϦzHB"4#,m`5 E"r~ $Ri>4;#,ɀ=5rMRĭO DKŨťTMŇ$ ?sEq.MAOfM7Z!x1`IӭH_ۏbz~w`DTe+OxzVyL(LRMYM$8,E\@T@J&|iSNhٝX:Waq$"-Tf?\8ZWXrk[rMྖN: IW>gACa*_8Sw͟~"j2xt}%삇OGwQr??ǎG}@ߺ\97?=uڐ/?׷ߺ\Qx~uӁk>{@O/{qkccϿu 9k^B\qq8WIǩߏϴW鿫c(NqS)d[^IXK{p-ƕSQӽ!scqɿeeNzWoЏН FVߒM~}\=ilot\,H)l4"xIJ>k& |z|)e@ Or{-kOE\1,|Қh,`M-@?[{)-VQN{tRCMj=42Gt>4юzy"ޯ}]@$碉 (j2OyU/NXTrEUo~G tn$ΊtW}cl_CDzs~w;u]\_@cDӘmpށ_Ϡŕl&OtQKDf*5U :oBwFFNxQ5bR P #Kt=Vb@BUZ}*J8.1|n'A6QI"ŵ/q 6vu-=#p{!15$wYIH|nTߋ>6:t, eN?a^۲TCT:KiJ+$suFѺikX}ɱ4s}ۆf wƽ{5{'հ >f5-fkgNWrv^Papqd2F9*'lچczct_A=TT u j|!d*Ç`7De-|KX̠"E6F3˦7;2ԥ)2PF*B棭Mft. ;ry(` LMTxeGm5J(?IENj,̑]]G16}uH..?v.n]Y._5[{7Cdfd19JBWG[K `mFŎwxgGx~lX1o0́4n]‘7E74%b0LXH@){-qPs@:*S[;c'%Fp8V!SML%~?, KIָⶼ$}Ӣ]h$1SZq)ѽ][9* jrߵTV&HSYep[b@b{ӎ@C.$C[f"Hb\2aZh(: g:26[miy~?c-M=>GUJDQ "ܝSh$\d[{m^ә{{FZ+A ,7+som1328&.{\Y!+M c' ϠZi_4U[רڣdH< KjpBzH*3Q"H#$M/dd7n! 0_zw是o%+:iO dytuޯA:-oM.o32Ty7[Bgu=U_ҷb\EaZS Wl40)Lbr/[X&sLW+k$]CZ0@Pժo۴1d߶İ "U:4}sOPUUa2掮KX1&IVZ:)(֥}Żt.uu1K-CMUЩІ4hi=:o_W.kdE ]q8*mP8˜160aI(;JPis?.3[ vznk䁠Y_Fݤ>w:BP T0$N9z7ۧn$SURq*u9$ZiJE[l$nJ۶?|g|F Rjk .i$V4'Eov>JJ$5s4dRK!P?Oy+o+{hK> គ65YGU43E;IOi٪|YVԪK. (G1V=N}PkCCх2۸x3Fi© ,9 v# #w1 [F1t<}:$%,!k\N-IRS>z61e<:D%FuUE8>qĞ' #*9 !:W>.?jܑ#XxNm"M<-Hm}zZ p=NL4E؃Ŵ'&ܓJ:_lNح 3o$o#v$1xIù>NJ[ 744qB.m)Ary?s)~UjtZwQ0ˎ_jЭa\^&z'eh D@ _𷸅Z rR<69liЉy'emضbz@Sw~OɏR&˸xN uG=S\I|UDpnZϸo^#cE:y[tX5buS֒D=w:tN7`~?˷KX>U:;޼ -8/-/夘Л%龒cKϷeivS ^&1O[<P43,RDVFу+_˨fWxPx88o>[;ԝ_SSw.5['ÛfqϱshT@Ufjc1 k5/=A 8-Jj!G>\: IOA_K_4u<LPWB᫢(D"{IV!wGg>_y[#x, '>֓x6/)lVe㳴-npe䎣#GֲSdq BT ӵ OsA.zTpք{zõ&ٞٙX)rS⪚ Dy*4/x]Yoq6$h:'b`upo9u[gyȧ>AXv߫Td6qx '/4}Tv+~cr}43/GTצb)颚khsg6}u$of脔QE)EHN)}4HOf&sqe,l(Ni@AZtj]*TG)"ZIPd%R.uZV8ѥݟU7[(7bI*t5SdS8ڹc#>]'9dyf$΀>䵴f?9Έ|n֥^BYEk³,%HP/hANs.#CdOl*%ZSܹM ]ݻ*2;W0,ƱEh1,Esϱ[=]If>Ƥ=bߺW;$7i$q|LHJXX}ƅ >NhXb!AXE>$^9A?%;YrR!5][]YЩ ziw (yi:e >s_q3*W=f-rUZ5@hx M?}:P&UT(*aiv˧ ^_MHQ,t|> _Yj)7~/3/d?\rUغJ,Q9\fUzo]O_7HȸnK$_L̍, T.@ pKe7 x-ڭI :!E0=~t=]M~9n~|~a\z6F?|YWREcLJpt"G,*tյ,qMH B@iti/>ӭ` <ϗ[5Z@^,5`Dj*"XZ1d4ceI@؛a2D0 ڗUx\}:+yV5*s[y#RDVxƚE}]tp)}w=9.OΕWϤNb ~2<¢:I.MR kR J3 {ce\vNX:j۶ֿI% EQD>[ DayI-ՙ5)R$}"k1u">]5^%jy4틦R'5o)hQ2{KԪl  b] xֿ:t$z%U3"8ZWr &Ky´Wk!\}<MҤRCGKLxLBGiO(X5#@moIcǫ&C$`jWy Z`*?/dtYXkQ] %b 1#ЬCFQc=ҴWSۿ*\P>g~JͯEDK 3moTwsZfQ m|K1::6Б4P'֘P< ! e<Ɲk <@5hh&EP"nA H6ӫu_lG݈Q!~P9V3$Mc@ԏhXUcB:\^G"bAҲK"R@B}fP@'=wAJY8tTd0PE%l'tؒon㔷Xե&z||s3mh}By*^mI1g;Q1XU%EbI3YI)GZt5H犖yW?{廴wocs¾jP\.$C2Kp#i#8u'3 X&qp=^ʭJS ?QV5,=:0es2kԫs43,ђƵ@KK)]rI_ a0S:Y B>c ^a&t63YL^'uR⤕[KQ#ZK 3ܗ$#>B}Gx*qVCAvߓw E>lV+1eb(Jj*ƶ׌[%DI t6U2-'s-~"?.qzmY-ɦ5]Z)4N:/[KwȾܹosG[xٔWylk6j:'j$H_Ŀ2wGL?E~C-r[Y!ƞGaݼ_FU);:z45fZg+M˧^˪Y˳fkа ’3J>=n7 Ԇz^|K~h~{=;dY{vOܛ h(~sS)+ݜ34ݪJ AVZ =%kkH4f\׍<~MŅ)|zjWjpZB,> F@jT=˅86pԚ?A hw=a6ٸmgS2I_Ǵ0CCS4hܹz$QPh)RM(@?ϥ{.} }L DZc@2 N3N4{Gfn Jue.ڌ6mLYjbT)D4F?Hv=kaA5Oο!ky(8u\y{-&G1U]M5MfC%[5elT1gPYI!@Փ绠W0F/ĒMk=)¿gOVژ(V>T{Y*;8u]O=kψ|YKi-vbl4ߒ,9"Y"fyoCJ}:oV "@?o^e}'ӄBGܷNC¾zϖGM>V_:H6*+6em,כ4"Bt$!.!ǥSB8|DPWMI"Iv&~Λ<_ŒCP>_@r⎌\c"J㡓>8ȼt=q++qJזglLQq,][ PI㏓8u"fRw޹y>T5Ym^O|Uuݱٕٺ]F+bcb+fbU(o* -3 _PO}^H]5pd?Jtm#$6guj{bTx6۸=cb͏Ʈ>'s9aByM^ y8a֪Fj*`縸HXZy 3vuuʱWOBjMW/5X% ͱ5ԳR FRb")"[ smOݶNԗq)gN#I#,J F\x ឤ%j-A':/[º5eК"ETߪ[KaOtd{𴳳E4HyBg(XZujSu#-mAEwl$4 D-T2J }] "*JT夀#R/i>שXwy)'tU;`ŬBO-=H%2:ZD7*8'JQG$r)(1GJ }f:WRs4ưO?Y<HJzu('=AVq=z6Y(ۂi_􈏮5o*VQ5DL'."=E,6? ~(T*[ǖ?Sk$8'ϡma.ȪJI $>xtO'سh$T`: oW$ѸQ|P}~ގQ#ıE Fp}xqE-wy-޾DMiR7/ 7 $. ݋hC[:IUK#іrdfR+Zww0b1aϲ{ڒh>=iO|Gg-ip@&~c#uQKLRWmM)VHPY5/f=TLEe^qtL?xNL^kIˊEī i܈.S_ti^~)m&m}?׽B#m\r/^ O~q[m?ߺ\okuѵߺ]'mk{^($s<ȦxV| P}x!  [okЅZKyhvEX$QЭ3,w,ߤ_wZ:K U~GϡW/NV&n<+ЉCb!dBVZuS-T. < И%)5.[|{Zs_OQj6T6SuċE jg` R)&9 HzØ$x%K\)+_a&GQ_4(qlJ*A ^ocfcbJ!(hn9yo dk@IϢl{PnUU1͆Gp}ag U}=_O!RS`is ل!-T) yO nFMµ@j˸ZRzA}77#%V>7QݕWS%-TOJ9ɡ jYUkpB;?U\iǥOK$Xe+ $S_} [Je?ˤMfBZ DB2-U!eb~<G\:nc13n\uSrm=K/<{2Ur?oQ=^O# z5jHC  @^rߢY瘆r(>gR:,ԩb9 Qa^7In?пnuTdԏ"E6rEC{J^A 2gV:UuGs-i4O_".N,Udm=טbcōIU|չw:'4qR QO##(Kk+{uLҫTB;U]EOikxT<:=k,&z/QӛFFfg9i~)_=Zb%܋IfۄD3~J3DQt ~ߟGc : b+AGE#j+rm)[XD(3•ֽ -W%Ԛz(EDP;4b "Vl[Yc8<ďN=,_=OA6cwRס30<. Q$q2EI!@PkIkwO>dh/Iӊ<1M\Y r8@\KҼ}lv[)V7A ;x Ի)^E&dd-D4@8f \s.wyN3gjF(A-j#O"MSˠyF'C};X;,I'BPӋb#DJL%rD*ZEaI$+]#Ǽ%5R:OL'cډkd?($KMG "00@@r9 ,\׮NDѧmG7AhiU١/S)ԅ& kfL'zzjۨv/cm~ TTIMTdL)B"Ru>捷rK5b8vk4Z?LtQ?`ziiP")D-21b4Tox٭1n3* c^cgmotp?Ϧg%D,BR`"U]J5T`,R+ҕO8MmwϗGU_;&8lrGL0Ҵ,4$2_ $n]t!kx|>rjE }j)O\kwH&L2!fnnQmX1נ4drˢB a#>Z>MJ ?6ӣs]NjΠ?*\W 3~u}Ђ܂cvyE{yߺ]~?u"<_ߺ\ln ׺\ $p@ͮ=ǯtp?EϴhN:}Zu"yGm uv0:tLM];":[#)>o& B:d1!Oԕ2n]Hy_b{ +x Q?ATHt0 [I -,SĴkǏE^жˆx2%ܟJ"UHژҥJ$QaӢjgWJ.ਢaQ/#mq?zjI5<oO.Gy"H}{s&c 0VT%[ŇMíH] kvRJ-:ji%fFbÐ-n}75u$%v tqO-&BLHgRIaߛ E Ŵ:Ѷ˸\헯qUˣϷ^"x`ȁBqVi^f_>{m[0gpL@% o{*5ѡa+ZttKRR1 #6y+Om$KWp=HMb;{l(cW UHS*{̿CG!H~xip%dSUe>_C]KZh^-KZdix~|EK-967vyUSn%>v$auTJyŭ Iy<+~ݹKF08$ң- ǒwN%FQ#O?#u!g1Ux yG\3x^) x/h}۹طiɀO?ˡ͎[ro21U'G@f7'RAC(f)o[:KP.[}]\hOi53?&(UM-b+Jcas}AMxiBqe2,$dhb@RNRֱ?ɷgwA;H_EHBҊlWյH[S4#fRRK"K& h2 #dk+8*34R=+:'S))gPY\kp o.E cCy6ZBF?_,zz 14qZhD[AFf+UKsk6}8S=H0ZڢC?_1OsYd4dr&G`T)fbJH~ނud M+4(8%n#>Mu=tU5XYם!xjM"YdGO ]{z`4Z07VU䤞HxjZxDf %1-5r('M-t'1i!TjRa`* 4zKtaMr)v] Ɵ= ,Y@@R.QS -VUx7DB5:iʐ (Y /]_/Zc9UI],0Yf%*뒢16:JXNLS9_#H!'h)ZUc|;k`dڻ'CCB.ppY9ٝzT >ZmF$5Xl $ Osm; iu^2QM!.-r6d?J %oaCKQ$qDY}o!ЬdPrb=-cRR, #&fWi C,T\T_[6F\CW $ с y 炡Qg \_>PdP}(GnA ,l=ZTͼTT 77,BǚWW1a"ʠ)a{Rt,I}!DZ ~]"9LTT$zZWR{LUЭH0U }jKMm8 -vKjU͸hVj#աU,) ʱ?\qL/, ZӨj;}{ ؁ԏ15•+!dщ5TDI+,&Joa -gp#6wzP΁&M`C5Y׈V=AJ0ìq)9Dl6<㕠8?zo|KׯЀkM͍Or??׺kÏ^'-ɵn}uy}~vH{ Hqp?6T?B'nWKm HHdP8?O9t**.(j tΨG*k_h$u|A47J}APѾ6M$_'WHHh8z>Pjus/#蟋_=ޮ-\n>M(XȀE_xNNm>8nC%>|GERǪKfmjԽnGf:FnV'*1u4L?P+`\s=qo4/D:87Q:sd1K90SI>ȯԫ%ץݔ:":6]ekfԷku#ѱǸKvU?ՑПg嵙4H i:6l~nA"A=R1ɆyTHKqwa*őM1ղվ܀Y$FYIb$!OX49IZ6&!~l9_`b$):fөOe7{6%q6 4|]v~)18ʴhD)V )*u Ú"bߤO?Iۂu> dY>>74y85)gڍe4iL>Go5#*7HͽԚwM(T//>Rp~ߟ`=g5 :y)w"H?df˥g^%M8dYu( #5}TaԅŮx;Is+SS ҙ:*7Q{!>0)2C21D,dwv_G[Vq3i_Qzz^ `~rViڨD2°U pb*mk?޶I!i}oOMkt(Zc3lemuR  $} M) Um%GHPzJ-=?tzڿSTfj䥡c墎BjhqtrɮhcfgU kjnӘf.;KXֈYMj}ӭ#|/=d*.O[r˔j6Ȯ#M t+T!a-bI!bj+SsB=E2i*:$RZ4?F^/9!~OO3kdFEv:Jx,qq>kuy,.S$p3N_{vyj*:3K7X)O|zdBҼ@jC*˥餉i"T \܂Y l'$sMahҏ)US,U&wX VRڽw{- ;MGuVނc.6Q<]cW!C*V4P -tTTytɽ~jI Z!xČlH6YNz^~": 7Ȗ3q2+$D*)]%_~HoQx7NuPsUqczt+PyjcYAd^} ]$i6A]9ItZPʰ :_W&tD#B +JW˧(ؔ'zvL*R%riV3Btݸ$@ ѰC߳yycx#N4OVc!B`mE.tYyfbF(j}:0&[5) Π {9{%oۭ[W53H@6k|SJ*9#4JIA g oſOvSfWΔ9q7<~SӯІQ?{ M׺?Hc׺y /{^똷oǟ~tqͅ8_׺9A"H^m"'nqaҜG^V*zRu1Tt'2TuY+P:6 Jb$"~R?oAlkrkѝ=_2x\s`F:?m wh#Կy]ۆZyߛIl |.+ï2FvzN`eoݑ/OOIvv'8c}M (&ةYG"WaP\(XKrB :_r[s>zR7!$ʔM9VDAYT?[(|GE6VkW%~YrN4Z5Ϗ4bܵ]'%B2x"";:k䰵k3a|;c in iH\{mOܾ>~>ڷ+h永 n5ǫU0ȼb++ ) L'?nܲiɮNG$˸mH t7ǺU5]-#Mg=4ց@6&y?6 uʑjjQp}~΁ ^"Qe:S4Q%ap5ω*u>/}{Ƶu{ͼY}Fx|]o| ;Mx.fVoK "KJ P:-ۗm}(KI$kA[+!$UE$-=t`,Բ]Hݚ2G =$\{5wg%.c55t(}+ oPp yPj6#{mFn p$cD 6f!o{ cŏ;p6GXj^#?gYEOOi@T3ZD#C+s͟! ;R5t hvhXxygn:RUGdŽZv΍I}?٨Į (zduGԀG7` BLk/C 6O ALB  {zQ"}?zrkN=$RT  ,U:px4*nRXdh̶V6'Ic1:~ej}$WƝ8J&ݕOdB.ia[dR )A§ j/~^M:ˬdh5[]V/^ʜs !QS8Կzb~P0$.A{Lim'=m+CSvVjzWC]wK $5ێGK4P!O^jCZ|x%2lW^RT؊'j \^WK܋Ym[ٚWԡ1Rq:;Gᩝ7}QkWECUmͻNJJr.APȵ]%mf?Iީ7_lll"iH.+{;WMɷi'}X1Tͫ\ujڂX{kq^m(N7@?xuisoiM"Ӯj*E'&@ukߑɘ3V_D\ʖjJ|Gyh!iiTiW4Si(TG׭=^["ꪪ Y51UKILGeAs;T [eoCi˩+aHUKSFKoll1zI6Xe-up,OG,0rAON@h Xl#Q?iYsF`=+cI.u+EC"g[mvQ|9E?053t{$H󪼬@ꐑ$ lc3@RJ#U?3Y)4~R[Ӭ~%mrApf;+_GSZV?NЃc76{O?7#a{n>_nX&_u^E_ߺ] y#9^L_}<}>i#),G${Jͧ]+(ha*@vz>Lt Ox~}醜+M)ҧm `Q"4=2M5ݝEu :՟237y%DW%e>P32} ϰ- [IS[IykU?)ˣ⎪Lmn` cdUϮddh׷[xΑz7ԺKqG?ҞǡKUU4h$&V 5ZKZM->MnZ\ВϹ~U=zi3Dף$ZJu0phLa/<ˡ&DJeКz1^'JeexMRq?b=oN?.{NDgUkYbcN~ n&0&bͻ[0n#&"pÏit[GdLHVUYQb&CX෼ w eud8oyE2YECFqQV1Y` =w:H vnih[[H_RxS>q0x=Sc۩"}0U$\ȪPlH~g%NsX0 jSjxWo#kR8o@ol|rV.*y"Xzmf#sNXݕA@ xe45{Fy%ie8KC]dS'r.?.wZz lS4(C2iԯ!@ڈfyN1[pڗ߈2=z e <&FfA&7ڣCV#odm[%qҕ[kITbn{|)sQ# RE&f%zn"UpL?fl~q7kJ7?YI|$77r>FqN{7%CQ"Z)qGGBKmLnO{;K GV {O3}L0N&RF~Y"ct`nP]e#KcM^]5KUKd3%+ G]1:`Wti9?˥r8`QXu7e[#{ ](jWLAg<[1b -+}Aؠ]\*x6NĚ> 6T&gB?kУ\R@>RȒV`y|lWYZOhuԩD( gC}"\sՇ_-5/[`(v%>#pŚk}SspO ]}7vQ-,&IҐ.쟺]Zx#rĚPV@4./,n #5 ɤ $?,uix: 63lb#c(qԟs]ZzdIh|GR ,~E pM8=B'A-jO\:IS4Z%X߷R&4!0/2FMĻ{"”SQ ֔~΃2SsĵުG Yo%Q̜3)F%T-!l|CK@jzEƑ< u[!&dעk0n:)@]PWL)eOxt`MǶ6ѹj?=D[ޕPSQŷGX|0L&8XD$.PҘ3z\h$GL%Q\V֙LUG#iSPh-R4m?Qrtej3BO3xS IX8ҥ#.H\ZWE[O3=*ҍf9)J(W5A n/c`-6Ɔ'u(:_ѵ ꪟU^k M-Zn*I% :4cDѦIT%8ıXTjtXnHj\gˠ?[#/5r-~ݽkOӚ/--ЊZ~x=?#ߺ]_u?@-[ߺ\r_ӟ~HZ >zS@TZ~x_9׏ZD)u,@A#m6fPѡ( `XhEAWzxhx^׷7UYT2[sJA09>ܣK6Ia-{[=stTb?G:E ]=ٺE?Mlm;}w7FQvvĒ Lр*YNn؛}.WV=Џusܙ͑Kqgnr:ONL],9CGKWGY&&YX (n6+M~9eI&}82r8~]'*1 #e->/ŅAɿ]սVaur7=GO5=a Tc"A+]O2 2^.RR 5emH;5_nJ:(֡i|$iDnX?CG>CtnVPOЁ8x+Ak2:u EFsv#Ǘȷ-zd` b2@OH͵Ff5&Lz̮3=#u  <{{[;dQQ?oCN|kgF;$&eV"6_e1o$R2$6ŐҼϹkxޣLO$ٌs)|e7(" 9ٴ\ }?M{o63T'.Z^_Ic;vnblGCt6g}n*e'4Lyϧ rV͐ PKHBHQxp7.;pOBN9j@ 58cvٻs'oSO$q!"^jBZiJe/#d48ݵ+3*ࢠRRQbfH%wigQrZH__ͮmgVG?ů1r=KG};~;p-&- u`̮3SAzuuV ͗۝MF%QVrhp88l8¨j8~}Zgj$?f쭃״Nj5si.kݣXA)PQ&/ع{s' X5%R55*+R:#K[HL>M]00(|pzwįD ޸DK{1>})ܪD.9<mqR(%V9|#n #_.Jov{& ,Ft΍gPFGB˦X=?cw:mU˖ꏩi S֧sL|:):K˩ۧ 5%(N#W] i I<`r=7+ri! PRpxw?@57$v8h O *Q2X$>yuΡ. Z9zPӀ$S3JD\0G@ ^)%N]!(Ĵ#ojX0R5c-csniqta_ P/ҽpcj3T-TZzbXgDPaF$iN [U۱$ :^va8(_i:Amd!GDTV9WU\/ [d n>޽?04'ʃ^CiL99qIc2 \#ML;-K% \M.+IJ(A[ I=#)td-6bJ0+2X<:jH.OEsuXjeGwAkxх G㽞ծaIL>d.Q%u+DZ1Rd0(d@V Tcy:p>gP$1o@.("HdRܖt#H+?im${$$GdTx}/*#D@oyX. O~J<˥6bhgP0ǒ_wI3h='4jS*$UVB+sőz)T&DN#*b"Q五f[-dVҿ/NzOb)"Q^# ]MzjH 1eۢmdʝ^iහ#i4gۍ,SNO,LlIRIo w_[U.0ǢẶi*)֞LA0B@Uiݭ ^ c:gn=,R?QiAGFUp7ts+D'ukUWAAU$4n~HYl{{~9ToUS_Є/6?׺Koſ׺ߏcOxu,~C#{b.E_{ZcgAqkӑ7ϭtTDFߨ{oi$aʌEqЅjB9%Z'oDz-Cʵás p*W *cU6֙l]m(IT `СlCOS.>S`VHC[*@k^O~vbH _ĮdD28_QLTi 0Xɱ7'w@$2#ZYb 0ҿaO0mhd=Ƿx-!jUJ2}V_AڽnBA[E2ggwl,h:?w]% J%4-lC/k^}niMۈ?asۣ 5)04᏷Eטf|xܸL2H~&'Rxg >sd\zn"55TTԱ*7=}n]nmLt":r>β/ծ˾>Ƒ\1ӵ& p!ϐU,]:Ńpl5 [|ݬwNSݫ-J]Nq$Gȍpxy tn6&zZ H)gOuxP~{i}`Qa_E6 HO +:yv~eAq eg>cܮ&+Oƾ42$!Xu'*lSM+2KbدJ#}!I|Ǒ{Vܞj&"bFy("u؃[{yǕNv Z1\z)lzH;xW.,i҅I 5)R1_&Y$R5 ۙ%mDex֙E?x`erNup1XuHGk}x#ܛerԐXF䑤,P=1t6ve>OQ,u>\Ȓ3x,?{}M|ߙ7HoXDGĐ+9@s5|4s T^ZV㱵P @b=$'gH}Z?gݯS~.oٶy礥7|n)pe_M)sKK[_oypPdMn~LFi-o>‘Dj+\ Lqm= {y4W)n>񝟾0|3WCqTz9 S=nDun҃\3E.H{b~FXihOP>W+~ڵP.;oT+CrXJsnj `cͼu?Žsjbi/ƞyL`}PdyM Z m]V{ *h5A1Զ^FXTq u VthV}|ry..oobu*O*:kjy}_]br55qp^1I(TfY٘ 'O䝶x޿y^L X.WLet3I*3Ta$mJ<>ڷh]]v^Yƨ魣{DNbU܎?'*K~&SEt }>Y׺K[>7ԨRry ,/:zy P׺Rݴ<\{NFJJ8n Kq@@ A30/ֹ&qW35p8tq Ez}-U+)j'Hɦ Hh%Htv Rv.HK^,lc1dR~ɯ9kmSAF>c˥ nCVFCeP(zdr$USKdg_#t S)j?Kƍ>"Uk_?Zg6ptꩉ8\&QI/]j%`&Xۇ=/kAxd/Hd}p`WZq8'϶2@iXΦdL  ZI߸<"WsiZ[?Ϡúy,B+~= 3'MOKvr e'NiTivFTHʥtxtX=[ouK.o"2/O˨p^V,u/E+BϯF_htE;+wWbS-+'*ǐRsc+ Rq$y,-ŅU]KWЀ=\YvFj|H #!r3UVE8ʈf1-`hJ.U"R?m+8s>\\lmA|& hF\MZL,5hױCBD}[&#%퓔t?m.cÝ'Ҏ.մt\51BEU&n4,ߥ. Tld>TtOt7xژoA5W=y)EOLibxXj$E<[y>m\v?*5#zGQ})o6l{5 >L2j|6ɼQbҎ+, jd8qd% #BV,o_xm6_p}ߔ<%2B{XM*t7؟ue}~w5P(-@XP ]|_nZafMKRlĬn}ߚF>\ϼEC%JKpקaqG[RU["s }=m;g6r}ͅcJ?Q1}hXf.2>{k iZ*vi 8: m~Oso0K[)*2P/ ^a9Iʿ}~4uȲT>I~Qmm`܇6H-w;,AU'ʾ\|oXt ><~dt?NruC;+$54-UG 3$hXHp(ome\mYKpFBFhI " wOjY`.-93) MB GϢiImʣ% "bz˟i= v+P+ S@ѿ6ssgSl6n~ʠThMKS y]$/oy6 q}n5[ p]˸ )Z`@ A3~dҧ~NCw ېKxw<#(.rYdm~r{ gBY [cF>GRk:ob*B7HV:y0#ǾR`@]-_=ĩZ oo򛂟oes&Rke§#Ƹ#u3Y64#Lҹ?gs^=&>H`a Y xgqBj;ⳛ7tQcœNoGvoh`w w ʠPQR4^y AF gi1\̝a,ݙ3b6ԙjܒgo)[T)tv&uryzodrTkZ* I? X)q}1ʎTeZTy5O*W JXH {wB|b\2MIt,Pص'2;bӀxkҫ)wTt2r }$!R2u.>_KDRAU"@ ~9uO!Bzh} 5YX+*)[o*J/Κ8@+7Ooz>yF0@QOHidSQQSIIb`, OOލӚ%_M3/-8q>^4VV+ebS=$7h9di7T+U;,!4/_^v5??.|Unf:,^ёcU9hXE ~)W@w7]o: hiݢHgT:C( H xB_/ ۹n^~z+++ZHZ Z$eTH⌛( >=wHV8+!88XܘH:.bST>R -[P:"ԍH'Hʃ {!j4hΠ§k~FLIG*. ^=$Q+xyױ}>uŭ{xo~r/kߺ^9׺xXߺSȺߋͬ?I}QbCĭ/ NFqz:a6i"\IOP`DlcZ3P{>ln`>-NUz3IeiUSA4Ah5%2k-f?ŵ;m Qc:yT*b E2 |SWaq &A$'SMyQټ>yM7[-J<;?o@٭s 3 zVmݫ4& с橚5CUJռMң)s^6_un#1bܐ:o`Hdz'Qݦ./oK9t;Lib[*kj*'OSo>>vJ,QǤ읹14ZB?DQݱ܀¾P%%j?*ҧo|jzkktgT=HX}=c tcenЋ0?nz#Zvdb JkC%75#:`vZКc Ȟow+f#=l}Uɍذ2΍.NAo$2AY5qS$7?F{H:rt$.FaA+V4 A4=F{q;bs*OՌG#"W GՐ(iQqM62Ƕy #9/1;i6mcoqFmX^ZWSR>}b?:iu6 uS 1se+N|wvgi>S/7>=|tT{#Y;N*1=Ē5Mhƣ'A yku`i]m *,Q[GvvcO^s3y鎝tn>ؙZBVVRzmfm(6T2SY9q]K[XGkPG kB&:WMzvov+}q٭/":XI23'̞~/|_͟b:\Qa_!n5 SSJQ]t +=!mo4XO #!R?#5owt&j|&'Ҡ Qc矩݊2fSJ`I'=|ϾwpcPGE۽ILEA56]D:Hח[EYt/co S}'G{~4`;qL6Ӳ?zW[SsecQA+Dž[j*ʑ%4Uc1ӳ)lY.^#D> P8K9Ttu.EQӉ$.(~DZxS6vU*};%SN-;Z)c+h_M7okTДoe\Fzۏe^ 5xNeTarx *2tԫbJ8YC*6з~.wUS\‡AݡVyX"q# 4t9m9)% IQZh䥒6Y4 ~83.HU\StUuBqCD8heE6)#*"*E5KFM FsF((ϟΞ],Zg?|vA) hTHi-UJጯ! EŽ!@}75VV1"HbKOITt I q^qc.AEJx)玞qB*f p]C!Pf") 0N|DCKWmjP#[RˡAfAsf4#Kb-#b,J:pn./[lhJAB>SYRZ/o`׹_qBNJГǫUPmOܱݍYWDiEbJoxB8E0i/4=ITa P 0?7k>W$W<ӇGzF#qto⢧K"Zdъ_X6A;5l43p: s-L'n'|}`b(iM\Z"GZSfۇ6G.<˂~?>='Ӧ2}+~dz 7_Ќ~fx)<,h#r^sN{k4i!svN/մ44I;}gkt![3]hO-DGU?;%l5S*VZ1 4p,*%Xa4bĈqnBi!tI&A6Wi Hk`5 ANda6egcs"]oᎏ@3[ HڜJ2lR8dʕl_ڸvؓXN|NkZX)n-UZl>GI[;?frWа:xzR0L/"\>lobޠ]$cMx׉=Џs~lS}?׭#n,~>׺~-{\#6׺돡u/~=u*7ZڗG5\!$}E+o6jMGK_M:Ϩm4ףHtG} {J4b`Y-{k ߟǵ{tɽ:mv3۰`Xqш²":(B*"_ڛyBW|-˻[K!@qBN;raU`n o(pV^69V#_}Xa%g鍴ns}"UnuXOp(IXH8x E'ٚT Y~O#oJWt $O=*(vךhեT}.G ~m@TV}e""TP~C_gKM!h1vKJ?B}I{jf6D.kmB=E(~_J] YƐ6AC_yt mISϥȧIx_H1؀rM̓νZxB#Δ zפ/ |Y#Y%VhbuOoǷ^K($hK}Aj\>@t(s`OO2)MQT(UkH")^=iyw|I89ۃiS WCZ?_Fq|ʦͿ̉19w$olvk#N*8bmr{?e.SڽO+ϕa 20_^~ԥ䞪@RXhu7\hS>Y kdL_4?W'ش[Yֹ>nتrVrGg <>]2%~zPZWRSqnJ .mYz$]qKHI2?ҧQW#&ܲH^.ϲXԈۃr-[Ҟ^tL6u:+/av ??.V9foqc=##G"SG%e<5"8Noq_m6?yY #x/f`gW ٻws{8/z흻*z%EÎ)kI*e=9ÖwoohY qB@A%Hrswhwi9ҁ[Gyw6nWCWKKWw)RHcaH,nm, ¨⦘#}߹x?::}-;tWQQ_W;)6%Dw㩶9):R0lv#&v!Ҫz n<{kZ_I"@v&EX(;Cݝ;kw7J U LԳbicEa2VDV[c5}DuRMk:3vYld:PꩡT࿒LzXJ<'fL4Ie-Q<,)cX]$F#[m UYTGl=6pۼCw,`(((,j)_2;ݸ;32SKmYW &pQP>=dH"= l|B RXj:n> b cʸVUǸpYo۶fܛ^#zJ։d7fS%3h5(-\ٷ'Hc$?X=k#O2'[JP""'y[Z5 6BmrA$[ZB+Mo4N5CάHga!sSH($7O$ڕ 73ɠW֌jH@mj}2Hhخ&!VoͤKM'@M) rɏ3%28>  oSp/U:WځBtF1VBT1:r,R+Q-U6 GNd>-#TbϏ{iԆe$E=Nas#Ǫᙸ%,}y"yPє R UkҚ{zVN7?Oox*G;tJ  #'FkѬ7Jk v $R(T[. 瀠h9cle F׀xz*'siq=%S*2dhPydY:6'=%zcfYIBYc-ko{}};4ZR/ ɯ\!,^3AC%""m*87 H[0K d/!O_О=-!I/iN XJ\FFФqbs:+$*د\ӥ;ϷŪt}Tuq6Fv*$r$,$@K$zN(Tj EMZCNUzK֢85ԟNGekhk =JSAM!e1դ)#[Ȳ)U➼:>?S )L\]_9b*>"sJⴍu Ģ.ZvHFlό~_55Q̤JȨe2bgNew`>)Z3s\U]Bˤe71F"ti *Ymm l 5GB1ϤRȔng>JuH$g>2hɌ(`3fJ+GCʭ`#ȆK5G:#ژzI,? yf:Dp}MϵYFt_uЏy?<}?ׯRHOu?ߋ^->׺_^Ksa=u3kMqzyqFREqo즎j+L~`&}R <-1q0ȹ7{ ]\Up+Ԋť 5S#O<:K(>%,d0ܸ:3[e\ESQ^h{Gi [z'?qMF̡H-oYTK7)i5{g\d#@Ch垅|_bvH®PiҺtXxQ~~!!`xޅVrUp@vYc]Zͩssfcx| I.c|KhIP'Q1[,oqɷqGix|m<ʅExgE͚\r1.TIjQ3+7 k9҇F3ǣ=}6P <>sj-²YDʐ bny'۬X:*;$Ȁy잳ADa" RI\'ׁU$Gg4r4EUu3ҪD?$("ʬ-m'Aee?ЏјT}}?>;[nl>t#1 U=vJ#IdWA$,TwOh糌vATu_{G=Զ䜅ivGRu7)HZv ʸYD/ ۞}[w%nX+( }%q6͓? u'H4{ N끨*WH!@sonKbPy_kv4]pkLm_Nrd_EKBM$@K/iÁ2 :x0?etgyygS^ J)<ǐ)9>5iVI\}'1:lun?wyUh7)couf_#>?vǶ4z`uMV.5=ûVi {7-$ U>0Jͽ}LtpՖ'#Zb^`!%mWrRVbAtl洦8VQ[ o>c Io*رS-]CWƱF}L%,bHmtt@ @>O`+x5KT?ʙۿnlq4ZPv,o[k7 h#*UUfEo9>Ҵ:jn.[S5-^ۏ-+*>B$4âUb2m%-e9zi {iTg#4 ]{lK{² Çoz{ooMQGޔp>&Jj6b Ŵ.Um̽3A?,F'+'1oͬUCi<N=N]K$ HGǏGs]RH5 kU@Z_>K+ hsZӠ-ښCWʳC"}s}XSbI[X-k]t9hDT ƥAA3kG{A4tkOt}zTRPaXU&ꡮMAk^Az>4 pGP)QY1=3.K)Tc_g\ncYclCcjPu>ZM\i?U[r-RMcӥ#Jh2GhP׺?Of^ԸH7X%O>EآS@I#>WK( I%UZ>52[#})O Sbm 7r7bݤ"fV-W:RT>cSAS)!U-=,%PiGbʹyX˛e@bf\5\|OU +iI'5|I:k/x⊺(wwѵՐDt:9e $KNH[lLԏ ,<UgPjz+tpz*OYIJchc>:GP8٠* ǣV!}VgeժIT)V?pC/#HI, 'BxҭFm'B،—zeJpi*ibPu* Q,cR ~M*ƿ3QQI:%x Qu h]l{N:hCk;.DH2rI#2=u A-*No:ʱpl}Gl/FZV:ЇbO#?K}}o{{^O{^뿥>_ǿu ~[/qǿuǞ.#ߺYӃqߺYQ7?@/l./~ ֣={`/sPZ Xl2,~UrSun⬢У{ySC/7+nX‡k+5ON\[hCc'zzAnhTj 1RXj4bTl']ٶAARE%1A=SĐ\ /A8*A^W73X9ǡ$mW"e*ٔǞ,O,k~{'EÀ= g5]Hi$Xl}Q7A=0lrdrJFF^JGklsH9rE`'39yM\ۦZ̻9h{ӷܱFw+ӢAXvljs4;7=I]#ŗ )Noc?v6ΕG9F(vc_qwq&<Y#KܛgJG?[B^Un~RY֖otUoNV6G A%L#W(#uO%{HYI!8kOM;pC-G.׶rU|ܘw3wJ nWYjBekmUes p£)=.qH.iZƚb~!QCBtYݝqujJfyO5Tz=DŞF;IKXڦS^'>ױ77ЌUWrda%r.3MvU?C|ܔY֛b+([k(2Y' dn9I2š B`Nfܯ9z-bE;7,1j> %uZ$SۘKkݪH*EjuPE=+_˯.#(6#mλK{9S# rVVu)F_ ]]ܳmR7nv|RG+SUDp…}a?oyO`m+Ef)Z8y12mnf'kcP|=O~{'wػfSgFj]᷷2?s8 г$f7tWb"Nn$e@tUR’(d>PK9~iE<fjCCCCNHez6Th6RH%pͱY =5BDWaݶ?T{$m2$HPbK xȒM:/dnwo׹ei ԫj60z'~/=鼶߯ їz{^hda+vbSe]XEq*FنGqt&hG_禽O7gqw&K%(= #V؝];ªlOfD4DN5jh[>p`$_҅i|=igYo-#4ԚsSciC XXUS@RcSceƉp ^ἵJi4>cO~~GӇ@ͯq~u?.N!Yr&8xىWU!)-=|' Y tЃ \4vOzlO mc'P>]$k9X14DZTx)IQtqŬR0իǢAhSC2BrX7ϵonkȢ&iӒ@ \d`0B_dIxW! b9,w=ݒ[ܵ`E:pҴ!͗H:6PuIƛ~ú-vXڜxCTt \!9JR2Z'fISٵ+ےTmrKyevzjV')C5m{`%/W"EWvRέQP5q{.? -US?o,^3B\긵Skv{Ȭi48Z]x>v?eSb8]E3I,3f" = H'Co g3s*Y)e7-~3O,XH򸨜$ZƲP/ak4#0I"q:nMkLYR^7h⍫VHXZ^($-p~-kŘ:Y"2T8ekgX!_#'3-HQ#p_P b.1 C]">j;isqkݒVbL9*35"U,}']Џǽ^׽ago{^ߓ?=uؓrOd[lG{^땅"܆${<~A?Uf$tu&;QNUͯ'r} Czvxp~UudYd*@<:pZ|sq_=.ȨUK`xZ&!vYTu)VE^<=w[5<-BMkઞ9{^,u4fJ_$^O5*,[ʃ-nHߡx;=KCe*,Z#MY5єIXĊ)8Lbq  ,Yo7A]'K}1R(44z끐HFBbU2yۢJ>ۦ\!1MG*ES݄Hzʸ'scLQNgWִ}HW _C P3xۯ= b ] Wz]2Ct?m P+ZOG?'Q3O:k"Sa,b x7 M>ĉ=z̪ޠt׍}6ao7m=YbƞK.EWc#n$S%@\ٮx W,Xׁ/=M{@koſ#=ӺbpH l.}?7[߫z֘=x}?퀹UW KWy[#6ڟ2)O+jYʼy~*Jp 멭nlie<#+lW2Mk_|t:ZS߼2O53ٻ[vK->]^K#=KUVO'[1yjJa㥭Zx9yrlj'JEQ֤yMF''zK$ oaqao}M?ٳSהj fɷk>:'TRF/$񛧱k+e읍]{ 1ui[TBu|m\q-]%E>J1a@'lM%-Cb~d|-YE۪BI0:i7+$tJf31 өPm#I j$y! oj "y'] L=q 6wn#FBzEg*bQ9I D1%>n,f{ ӎ3CN5 B:+~nH߽;Q5RG,Z= x^Ȟ!F SrN)ޙޗOH>YrWQ=mDlKQZEʣ؃`xݼnwr~yY^F' h'!@Z|#ar3G6&tDj3ʶS0l_د]{%x־5 cPkrQWb+Z? k;Kok:77䋏wlci3&BqO`bIfOR{JQ uVGGb;a"6Ţ#l/cQy־ҋ8u̚߷TTUPQC]/,G^^G4)- >:@K@)O=."o#;*B(t!$TREl攔”(O'hI'Eҧ3ʕڒHv ؤpHj$b=P4sQ\)4j|Roǿu?>׺oqo׿??Cjֵ[[ߺ\ Ԏ~rnߟoߺ]kqa.ԘͿ= G(&WM/<}E׭=53Ǩ${GqfT7TAm PƦO"7R}yܶACZJ Ә*B)byި }{dќR7-tt#ѝR%SM 13|s0!?Г5ŁdV=O[e*Ywd׏ɗhl5|Qc3oIfTo(,-rTnԏQݻx!ܐE)t읍#OF"dSe5zG?}6Buw-ѵիj'gqS\t9#s>~g;q1gμ8~NFɔ1bTR ܍Kkp(MfBFӤQY_{;Iǟ@mp봦!P7 \\ G4FESbOHb4֕=%秽64a8E,?æք _:OFP}@"?saCԐƽck_[=JVBxtWggnc/0fTHEno-U,,R1HOM${O4 z,¹b3Ah>*`(:;j]ߛ1ۗ3͇٘ʌö1nj["TIH*ۓx/W@Lh ,hI"KTbTj~\iAWJ(/bIO'}yWFH)Kbx?BHO0(h}zE# ߍҁoPzJ~\8L0$ӣ3q|_m ZS LbSC_K %N%I R 7Ͷs028x䍊I.CG"ё`$p'1A**0+ [h'`ZꍽG-.Zj@j($!rM<sת-,[ \,)^1;A="np351IF`>)`!7,_/j|eU>dO[vGkndy}6mG&nTL6Mh h{#j`xJVSR"(I 94@Mu05-p1\y_;1{%2wqvݠSc*7k㶮Ԥc޸ ۴SљFe5mN+囋hr Vg&I53WhԆ9.yxyu+8P:AKp}-uphV*)%1<21T`1k}cBwC`=Xk=j1W3TWT9M$,%\3D$1F6ܒm+J`86x?}O9OY\l\l!ICRPOovNauGjCC>*U`E 0K]LzQ#xg3NdHafak4qoX42А:C+VP16my[a31")R)WUNV:6wwml&ؕU5,6'L5U [@,f*XsV OcfЫltڢ\q Ѽ)Ο^]5H[>{Ͽ+"EvVhH?Iꦠ RSS}INP9\NNЌ$b ƀO/&ޔ;B%u2 $k̄?2=TѾpNI(77B ȏ#`Gmqrm{1hT|#JЏ//ϭhvg{}1r gQ ʬ Pt= EClY$&qZ`[Qt\{S쩩⦨CS"F u2h#SG.m ndHSh+X@W:T=UI%C= }6i*V_S,Z(VE'=h+ZJ^+OOϪPW}UNr%\qA<&C.i' PxwUI}TgaH%TF4ҷ(DC,atT@H T޶U'HJJ[=1x<rR'(xv| x95G?OǷ4Ӛ BiϯЈMyߺ]-,a}u}/kpym{fock{^NG^띯 7^"~qsމ4={EJ9 ~,HE:^~ْ$Yu1볷C,K$ U[X/a›X偩!=^Hx)*5FX_EM7_ <lwk"KorTƸ?oGiUJ V@*D"]m#tH;|kO˞v[i*~Gϧ*%VI,&v`G,b:2݀[ 6?O1"A$,&ˠym,~J! ihވ? đGW+[=8Rtٟ:\iVxdWs x,nYkr{(?)Y>="j(oa} GaM*z=\/$T67MڦI5Ԇz[NG"sڈ$Xc,=&\oמA5:a#`s76ET$PHrH u#$4"`~m`FOUd᎜)=,m]MI%LUSӵ P=BX4Tk.X@rs)X: ylM_ϺWzyM:{_~ WK˥ 2eX9BќW0:OQOX0չtҲPtuoJE0hSISܒM@[d^=I4zU2c*H,-?2.Mգ%y"0˥wt{(k Q:q]+#uLHFu1O?KY]Zu/!qDe_De6d)Nd:Tnooϳh7! U|ILתĄ<:e.a>_P ؑqs}5+:ˣ4ޤjˈF5g2yy6Jz(cqmԉY%GMTp:= ۡLqqmd1-UIP!YO隞F`Mh$UիDRR2Ԁ<Ÿ>}OYm]Ŭ+_0|H )/dz] ʆR p#DQ {Zu[m2Fe N8sشh$^W՜mۛo `4CXyHj+`K^falg:  * Nb9ͬ+9_cFSreq)%mdRq2CK&:0}=s,=)|:! LjT+JZбKgk1JI/C5D2)d@LH9 [!nsM rf3p 5$I15(E<)jU#3C}Df[U cyvڥ/G4?HXW<@ZYd+R&[%~#4!d[J.@|{eMPqŸ>lB16t;)R6&b%2F2JEn8$}yovrIa)SmWx#DIonQJlXuIGzXi`/,p 9n--Co ּg$2HJ^Tݿļ(LdH0F$YE>?Sj~h#ЎKB#E/j+k&҉XڢHêM_ 9@VC^Y)?o 0+D$I;@G$b̲±w )!$1tglus)]fgAHN%pmP׫`h5V1RSFj)e$?Yd:%QJp4> (25-0ԚY"h|zZIk9#Ǫ0 Rxt?_m?~}H?IQ]ЎIU8<s<m>׺ u~~=uI<}@u ߓž}=uZZ $=׺fAaqap ZߏB7Ϫjʇk-okzugE2ho&>Ezh/~?O~fzztGL{h˪ʆ`?@ד>wqJTч}CE%E,*zA,SkRDIyhoܬWP=&U15V))cy ;ʤVeMretr=:W_=樦a s]4KJm`_U}O B{F~~O܇fY'dH't7Iu̕uꑐ/3e#i6V5)u֜z5v/Z>o GY"Q P` ~dKcOaitv[ڰ.8|涤'Dk݂:X} JȽ5bju{ RΌ/p i Z@!=G6ƹ颦+-൬yٔ.)G=It[vRX.+ңkm&#rL$;2wOUjحz9`"isDL rE-}ki’LPL~+\J Lxl<Θ)an/$X~GEqj@EKH8jk* iKK@ܒA$qt8ٺUPloK>GXN=@ϥUZI&9kf,0.o˥41hNB [>Λd?OyxH1RDqĊZF[R@3Z⾻Ynf*٨ڞWyM|U-poʏq&-5J*~Tq1kċn SSCJS׏hf>!<5;UUmt"IZHZ1rK";\Gkv |X*+trZ%K"8W-}W:Ǻ>AnâO}ٙ}Ŗ͛geveK>JNtt>ysN2Al w\khb sC:TZ`e,<Эi3UNW&4|LȌ8I+i0%I2DSw>OdSܮQ櫾\)c&Rd!(]L-MmsJ74+ݸ˵y̎<}<†;!*XLz״py*3狷y{\&1&HQVaѶpە\7CD`m huE}%>hdN֫szl'{b:zEݹq{5I]U\y#WgYn..BieUAQІyk9B ,)b aW 8դOC7؛g6;xe>_;2iqd1{(Q d5%AV`ʣWew2V=O.8u.LjkfQEhFUNk$;EK:sY;O; YWE}f*jX@qnT$mحvGVZy#R2P3El-*Vȣ}D֚RD )!}v% |\UmNi} I`ox*tTfEVDy@}BV QK,p+j7J=8ӝ&Bj'@b)6X9'=\##_gIYhALEAڣ@d% {嶡ӱ S~ZaIVHiƉV/+_Dܑl-k?GO`AKԑO4VYljK-),=VKMh۪=zt5#/(H:F}<?<~z`CAЈͿ׺a׿O{Ϳ"NI?W^"c'ߺY/nGA{Ƞ9=Q;qn9o3K8u k^ĒO o pX{3:øf|-n>5mB?2Q]ECe^6z\4g(ψ.ov<4 S ʒ2 A܀ӛm>I2:.i*kf]6o E4[k3rQ6g7=~F'Qe+);e0O$PTYԫdbm6qjv "(UZHoiILRC$MhAa.V~x}2x~ػN[6oQ@r0jѥ`c* KqvmUWaUdfiGrr=UBkCI ^{[{?wFV&fWNiEs 71Q8M9)d] Wn]fr\|d oi !: J֞u$9G ^h@h‘^u% Wq?}c=+6utvJSQU4&5<Ę(ԑ%PCDLJ[`[mÀ-)E8Ѹ1Qǡuq߷+Qub 0tBC `TuMKZ,vXͻRdtxlZ_* l u_}`L iO)Z.(Pd"іEuƕE˫H!_$~,t+.-ߏSjcqndk u] 6+`}l2x.m$R dҢ F^r=m|o}m\bmMm*1EI^CKAU?"zWFiK|fWDGa.=G1.*j1T.ACG8ǞImsoJ1"(G \2. {GG[ UHe,Xʎ (/ j!?6z+pl}=.VD%U%\-H@ghYUB YmM2\PyPz{OezSDҕ*uW9:**ҏ(gX稓Z$pU{‘7r${<)JoIRWHZKE7{pҴ4?I7 u3Nn]uF(*0u@sͅ `t =2W4P),JPq"}"4 9@I}iBaiu-,y? iL#15?_'E5}.IaM kX'_ВX?}?ׇ&7[c{\q{~{9{BX7 X_>׺I?Eu_^ߏ~LM:lHҷJ6$Zq=4ЗCM_qZ=uFJnA?fVz&I@4ЧՀM!o7>/ :$܌xd#mNa3S#b@G$鸽oU%r'w;HQďڇڃ$fKVI'?k=9+%<y=gTP iU!J1u#*u\[=2?u|Iln ;?*WJxn?GbO ٵ@ &˩qVU=,`y#rGS{5ܶc >^ /aQ)EY"{Hm꿭@@oj.z.hQ&!_/HꚏvKH25$IR!?}#=jU5IkF*\z w>*"54zAvfPXC[Mj+;j$IU'?EYO{@sV$Lke->֎.Silc嘛ےߤ_ϺUNBJ H1ȩS- ܩhkBmNZl73 ĝf1”[zef*xk2)?u^*V2D`EwE(!&u*P(xJ`$ʩZTO1B'MEiҝgALBAK7jm5$[R%IPRPoAbi76 .-c}tDFX2z;Hzt6=?olꫭ&(A4`<}m6-Ƨ^WiӤl+w7}G^A8t6 ;?r1ᰙ}ǔh0(d+M 5aN"IfEySU(+NsL++0{f nɺXյ_p1M V|0&[ 0?KokrDƇ>—_N$#qOMQ:OrgfsfݴTdϛ4;Zh6KM+y#AQT-]!vi}6 *WV|xNό+20Sm_U5\M;XU2 [m\]ꅏֲ%eu3L .tV*8~;/:xb5p{tuJM8LF|=Jh 7:x!MxzHs4KRˏP?x +}fs,.И|lܕzvyv[PTG4Dޥ(fFDS&:թg'8p G6'l3A5y<_UoylDy N/(ilP*j$qZ Ȇ47xASlS8潟nEPM0o Lp󨩯O~F"38-߻G|.Gl˺X[s6,N轑zj|Tzjjxdzt3{?;X-gDU*3T#}G#YdDp I |V8c™/y-Nf ]~Yq3|Y,ݽ ,ux+:uVDJbjeX,|i0Ӫ;Vk@M pE+^Mitx$cZq 8T4<ނ۴k.!TO_5`OA1ݿ0;;7LT/Ş*ԶwF ` |s,dC<>.E ul ,LG4ui;Yw4a߇-BC#N C\RK0PV#5`|^u RƬDT)N:Ão]K2&alkzn٦3ci&h>8B$egHKX{,0d841 ኊO2*x|}vmlN f`;ػBJcSզ*%)*|}RǡAbb呔)ESx֟o^;hUT*+|.(VBsQ'lܙ, U}ALn|W|2[̲ =s&\xbJɯЉ%5|:G˚ŷsTbg?=Wܹl!%3|JעqMTN%T?P9j@$SêܮZR g3nv͏]閬;ǽ{ a3jJY$gh&ߝ*b<{2X4?^\22>j?m z/ӝȽ|q{G~E}@E.neq[`CQĐhsgWQݧH]kAQQ =+5e e7cgv$ZFxKxMsuy RZ>_ fv?{7o,~Y.!%[7vol޸&XݯǮ5 ܼ-+gDмrƂ8d#H@A-kP?RTmc]ݸ4ݘ?6-䥥zu.y3jM>^0|,Gfas-ěGHMnnJʁ& TNݴ$1Ai|=}x#v A쎍e]d,n44f|zO{O:TW=ѿ;adm\mϰ6^ꂻPqS䶧ac4UUx:\%Y^ ouiGUTiMB5o r褠`JQXNo۷\mqK#)I$5IZH(T3VL(yg(aGY&!۝TkoN6r`C 8QXB6EGQ5ͺZ;,0GKZ H\j,{HW6 !F?:$k˫CIyyvE6c_XRO 0570˯ZK\/؞˝ )n@ÇцrrЫsLyW[Ӫ!WUVSO9 ḣRNmOgn`Xo+\][C,2@t` N6e-͢7'[;S4AEVh>c)Nj G齚WJскxS1HimG^܂u7G˾P+_NS6OW?}$QUawUJF7zOO {ok[:hG:OODrG6oNITӪjYmZ^YVoIt*?:t}#<<['+?*gV M/-]4k >#=C ~ŴV Q?v<:ILH 6ǂl.o>ص VVQWSԑppte<ˤ&RWid3&$H?{Q5"P(bڹ4Mh~}U<(nU^G<H']V=+_vk)[HA|K$Ë#^@߃-hёt{bVhhs?gJΫYg6[Mm.߱7.WE{yCSőzo LPEnkqFfF3Q궷}ip/^fޝSJnhݽir;*>n G~3? nVf*ehffNB>^ ϟ@.Rw;s7f=rRѮZJ&bzbUΥDylDx&41=Mϩ;ga-JMha[pdqX;Vpń͝۸6͆M3]#rK~0"ofpIC_>+^jE*0'Åh)tI6ڥtYN/"LWIwnas g7vVBZ*ڬF$b4Ҁcy7:/m $7- {MWMM:<]gջeI2*TتaQ5iA>aVƀ|NO:#[U4JdvDt󾳱c>J(5c&J$:@COc%A{^&àC1͑jk'Q"I7v~z<-RjcѣTHR8V#IUQdžGE\#1"5'٥<:Aϕ:t؝B7WF׭T)wpq}XNr+\F|0<%N[ FQPİ)h(~xu5d |?XS2ZZԚlA06"5A։vOB MbSkKL__3:W_:yL1rP w$6 KǶ8pV:Pϥ$xS5\uXj?` OP;yؼ%Ne8AQQe%B+|m(d: rŷOwfg hr+OCCãmj-n7IfV&Tv0 ҵurKQ4E<$egfXR0@Hc^ʠT$y˦'|$wbEV$*ΝΗa+: 򝓑i[y-YF!eʦVY&XYx`A$h40UITw7P]X_mW3@&hf@,k f͛oɮ{^uGan޴ P.%ܛdnJωga(aEOT:Vx ɒ"V7fV$8uԢ 'H0&kunVP4 ]*t@.ٮ*w.C&Rǔ앦ڲeˣMp%1̱K_P吱8f z1'*&Јm HĀ⤨ j@4f4v|a, zɊh.^;ӽ6ZJj0T0$|ۤBF=H+|t_{nPcOd7δ>c=?A>UQmriG\k!rvEF1"JlQZw\hsx7CDPj1wmv fkRM+}z UH$xTcGXs瓸T.D h84gʀh#C9`t=tJ\c²N1U "\BKjG5]R@NPbAP _E*iǧ\b|M>mvUn99eZTb6f]ha/"K'ˏQbr-PdtcvqS2 6B*I:*~cw{-J|0TfbM(rQ"fʡoQn Пn7HU*ꝗK$=j͠mȏV<]?Krȁ0W|Eqlb= bUym3J\y5Iang| rXZgdVUd+2}9Rmk{7X6K΃t{gy}_ F}.#6 ~->K ?%N`O[ͮx{mw{ F$F Tz2͸l#'JX@)U<&jB˨C3W+~D @{wÉ2i4 R>}?R5i7 Eq ϧG6eR,ѷLp.qP @lK/7[qݞX.zv=;mSRg+Y!/P>b~?yBSEGԭawmz%3äFgpOvpA[}}'qof}dr7ѳ}꾵 50ݭvT~}-YBHAǢ{pm7rF~TL▐> $R un?Դ@LRz]<ϣ%3˩:{vl~;zc Xo[ϰe<=bygGa,Yn`QA'&*z_g%V $[M**m<|)N ոklmfn^crYWNzdJ J 8s?$M!+4RV@q=bD ]&MI ȚI- r!cU1f}AfQ zg: ?`mWSAVE6:%VEJwk/H^8IHTg4:ИG.}?.Y\fx鏩Blk{2=O@+O3_q:HpY:,Y*g{uzb8E 4-3ı_}0+-҃nRJoh=QOJRRJ ZU#dITVݰHW=/) FV\n2p5wvKWZZh]C ,U͉{'s|>u|=ɱ^>)rdk#:JbQ23fz*jE8H<{45BT&ŸgGk t骏1flhۑ#IQ =4 6(Zy ; _J1Vh /Qzy9ae_d;#‡ˣ9޹bBYSId8$3F O4dv+A:ǷXDH$$s:u}RTa2xZ3FCG9-B !hʎG3 |N?xƊ6WHh?n?=bl6c)iڌ5(ʬTΓkPdw4hΕˢ)h1OϠy߃'>sQ;3%-UTB|"5*xf^H4njH5C->d}z.^Y] ш_x}ψ5E)drԯ7E|U\U,3:uY[|ެmZ6Kc?}  mߏ=+G9Ǧb,&k+_M>x".&V{`4*۾4rʿުi8'k\ 0hWįԒSoдׇIY#s!)m}QXoo:[)sNЏEK-o}uױ{^.8_RGߺ]?{r9~~[H >m~wZ=>S8bOeVRJ:L$>^  Ҋ'6=9xէ Pˋ6.qeS EiǥI4GB.&,KeAI_Tr'*HB.6BxuبH* ϲ/ o^YR`@j_AW=,(FCXV$HR ǿp OQN$:H8ϥe $m`-6an/<.mC}-5 y>sd|xA4-B $? {q9`LAZl 55)ԌvZ,e9 WiX:Rw˓ 6ݦ6Cj16v,LFUakrO.b{)ڸ6u@UEq{.ԡb`jC_|-,ut=ȷNÏnWw,zь[51G=fbXС_ivih+l1_Emhns?~?_k ge jjxcG+?GeZ Tt#ɀq4Jk[r?޽\ '*\Vu <_ތҍ%NNpE_2IU㞖E"[sk_ϴr0&=<-XcAOKB!#6s{LmF$t e:E:fRÀc(*⇣;I UPPudVH^c`H"޺:[\Ěiz>jOM}mo}RBJE"  DrAasLiǢy9!" ] zcM8'}UfbTꯙ4|JǬ>6yT,Ѽ):xD 4 pޞd+$?oK{wy/1BF):+&n6|& "f'&:hHedR`Vpq,s[*Ir=sO>C˩;;7 x\55!XVhyVlTϦDX7f/B0dU^癩%o8bJ[S|zUéik/2>]a)SR %xuwGh' d>3eAqnǸDV>j&1~_˧}#u!ePvXhYɞD X*ݙ{=z}-V]10i},4u Rcy'iڕsANV:dzJH3ȐU Dh$‡ "k#ȭkS_ .=!2UupGD&"V}Gz`T:АcϽ^7?^s^o~v=66'o{^뿧ck$\[}u&bA# doS!a< V J~}9Bߛ?Xytqӵ}xW cQtو?Es8׹{C.n@~]+I֨>}(; ?Ky#/ߛelIGҲT.TX /ϲv@G Rt⿳3 Hu^/*OLOMh~tqScᨔ%CcyL: W9TRsJ'oZ=Zt]pu$}moҦ8[zm*Y6)e<DzsnԐ pKJq˧,3>jra=!<˨|?i;ڕ< Iu]HM@ׁϳ(y9EDZt>T-!TF54  tr bMZ8Fl*b:zh|T7<^ݍ3ngXx \Tpi&}(`us\r+m1DI:\,]b$R]5ˢ?77w<OfZ= O˫R8_// iW${S̠jzM'-,#fN[lnIxw,Rƥ$Cs1[L!W^H7'q,\g2@[Xe[^&b=Gâޮe?'$SYsp sW=qX[ X t&R OrRE=фmJ:uSm<*7 6Wy !Xނݮ1џM(S%v.uqƥt/crI:2SpEErP& fYOŽ'dz)8c³SY1T af6#[kUV˘EմJ´>Sg⡯g1x`qU3"2D(!둥YY፾,(o.4W 41f[ n;5}9-0GkimgWH/"TkIeV}6,ѿ{{~9F=sq~ފnyUd4!_|+Z 'F(CPH#!&4jyUB=7`lkBmoۉ#r|I~5YWwUckxH{>L?gU"G3^HfR5G$TIeb#܋ܥ m2qSNm";}ƧXנ,tsWOsF#v& R@~ҩ#*3Jq#7U'O-@ kץZ혞LkXcВ X~#IKS~Ata,I?‰7*AOiT³ihbY`H3$QU.H<]ިJ"}qz2Kb'KRz:W5}-\N!EG&L]==$uQ4R )$9BL%}zFzš3"M? O/ZjyxȚ:ؒJvN IQ*797yZGWDҊ}1kAPM({U1Y`>xž`PNW= 2Օ3$ s*L)kG$}/ofqq>%NޑUHԍ1ʬwe7jVb-sRMk'Pt3#1UO¹_K÷x5~}3O$IoHmZے>E uF=&J@cr-k8ˤK4ڵ,Qmkkq{{V0MqGtuY`cH XOh:Ж}8}?׸?ߺ] }?{ ~pTp{ ɵ6XqD@|\ 7usɱ֔^2j$}y<Ƕ\(=kuoNC?I*@؆n\\O,|3UCGlk\> hX?N5%`D+q$ DBk5MǪ(G1i+5*iDW~Yk?)W&B X#٢۸PeB%:NTn(Hʋ M|܂6>t-uTS+ɹ$sͬ8w 5znۍ&[5jdCq#7<_bCZ&QOӄ9Ygq?K8=#Z[=OXR}cj:dJ~HۯD媤`пutѥ6FdXdfY"KY'0"'Nr:ݢ s_ˣ]Shsgk,% ]NM+K5%m e*g, DfRGyE,R>ӁVG Pxx%_2TTƟ1= ;*lm5(5uPH;SWQy\V7'[pHeGIȑtAZ:2HGG{_]CH@*ԩY)S}$E4~.v@4>ޖZEysr04['#U$8d8H {@ʖ\#9759M4*pa99>~]SE<< ]]s+I}N%ax6]OKNr#̰F&cd{3߃)M $HN??G{n#y /H8GQĚس`9>2~_ˏzwŮҧrT c i sjYe"C],hnC)Z( s\yy 5w")J?J.9QH¦zIJJRfXe3 znok=T9sN$ O#e?tˇS<(EG<ůb}ܣ!m>|e3iҋjxَ33֯#bJ-?rΪńW ^(44>Ew9CÀ?/?OhiIX̏U!֣Ze%PI,f)1r.GB$0WUUA5':T,$EEa(FG*t_*&ψxynlD¥!,D`TuyYX= {@]z- p| FytE ꊟh‡:I,I~M*脱 M})7'HZYa)1 ~ xf#N }=4:`5>?tMuH(.  f^jQ@!Kq;yt֕BQGBXVeງ!xNJI2 miVt[?MH銪h]@`Aኅ<n<L. zgk7jjiI8=zdſTF[_h4/IKP1З6No}?c8^{_I" so{Z׺M\؋Z^P8f[% X>߈WS{Z~=_-Z:>ۀ ֺk{Z?_ߺS#7"Ā]+G?^xߟunéyv6_ln)X_9? O0%Nq6#xo/zZ?.!C{{}˦AӏOTI!:c.ŏp,8#iX=n@H=+ ەTZ+"ǮX=*$cg<~؀*Fdp Xu`t+B1\>c?8Lp%f$ da'ӡdP̺+5<^e'/i\pABwл'YܸKOO(q#% e$x#Sܘݸ6Es?X䌯 @ПU&_7k125T)Z V}z2۬%Q$2V gx?ZI3j +Tv]@qDz= +k* 5a*olmU8 ^f5x%yjH5v桧M#̮d#QX{w2ӅkOC_u{6w=b^ Tړ{[G%.>:JbYǟ"1,VIi,,5~ T8|"|OW'QI be5H?B=*BSGRTr\(0*|Y'tUDcE!gud 45IPxS|_.޽+)|TU<-Lq@?} -fHܒ଒H:g. B??v n'5?.? j5hIAI,q%-峋*"}.`m:I*0E+LҔ_e4" >_잙㣢"J0&]ds>׺X_@׺rÎߐA~gH67sn}?^Pӫ Ců?\=ԕ6__P~JC{yCa9JA ?O͸_G=\TyXlHx?B~_l@4h;@cVV,H?7h!ڛXʱzyzm*asm%l8FmTaQ>1 "XŬA[wgѷTFXb _Vo$J)2HOO#޾ q3w[ąYC*&TEͽ".e?;`/\[ݺh( i9l~-O~Cp!Muƒ?=M?}":M޿vÏPd?܋[ څJd9bzIs4N=77ϧZowj66 ]k9coС{~~ ͫiYң'Q>sI㆗7pU L^0Ud{K/OFSJRtX}<>b:C,_{IGI>#8I(| KFXm+DV{{eZUtPXM}zsM8~{I$uq'+3ҋnȘ&0S8BFYm4ƬJe*͊á2ngi IK H|rQN '{{sE%_^wMJ4 Gt.mgI3DP̶ C$(rGQawc(*\G>]nߝx/?d,RůMxc:t@ 'Gw_gWmGH"AmsZQϠ5r+cl8|>QyNX ѳe!Gx_l<* O>,wX 0~Ϸ)PUGO$ #Y%EH#@ iK*$>n,*"%Nh N?-s*8WЭި* Ec `Þ?R LE[Q\ytϛE*0";Qe0ᐲ8,-t8BPt9b%S&D WuQ5RrSfeGooe#/8ִmoVAV|nF>j6$mtCO@ .@f7Π\L΅1jSRx:={ZLCIS?*VDART.oi^+LqԡPSCO#GO*^Ya%ëI. 7EG x+Z܃g]A@ S)VyhDD$eWQd 5@C8}-^wA[RhG_]Z$8l ̡C*H ځ盟EJP[ 0#+E'Q#IY0~@,~dzn:cVzK̪ `/-` -gM;˦'VY~~3,HϗP[nO&5\1VR]`-?.?4'd"roCm_QX[{sJB :Т#}ȪM-#oSozf 3׺αlH\C'UH[p?OEŏm~s O{^"\ \pG/~HE~t"f[nlkx\.sk}TWFǧ؞D t>}8@7&}?'>в݃i# }Eo_ߺo}Ff<[OMkê38G 7}}E>@פר2,lT/?PL\o{ۃ{ox)OP$ )zdn8}j@9놦'x?>T 5a^ Ajnmu9A뚶 <_)L`ʇ+5~qxV: 0, Om<[:C!{ൔQ􏯶\- n=:֋ǥϩW.L"8[Yܺ*B ^{*M^'jaSLt0,)il. ޫna'}Tz6CKt ۖ:[݁d^LEg'XUjz6%zdƑugR1`C>ݹQ#,E$c ګge^O--B SO3'YP` Zo-cc@Y NN 2:=8\L'#YC"KB#' O#P_3t%osLtI7Fa樖&ZyȐ:u`n +μG!\m qbY$ /t܇Y,KrsF*%EFej|mS1HP% O&kqe4yRɍv2j? oX&Eg'<:URAU 3NH18e+)2ڛ@ ,8)C/e1?'Ν m7h OW$S!S={E!a4ȍK!b ߣ"FONB`ze*'I4uy&bRR̮onY##}Ja+[# E&d#6!1,P"( KEؔ+Zq|_O[iU.Bi)* mO)+ȷmŽvbR⢜)PWT cGKg{;y#oQMW@A#ȧW66tSN =6X05m?}&+g ok^*AL'ʜC׋ۺF]xҫPYI?\\scrOPGO׬B^ߟlI]g }u?׺ ǟa{,ߐ~b=$7#Źo~Pz̼@n׈5O㟯ok~Z^&}vJdC͇?O~()^ s#DWX5nx[>(|z_:NOz@opGEz)/c>d˥Qo~Ohchk*ua>_ #>A+f0@<o#fI]=N&Fѡf%a +<X#"'"1Otj) . RnX7'm W"jTte4L$E W !l [_w, 8uIR9ЩN@2i@JM #lb<>%9Gkq=7mlŪ*(ehS9mZQMIpS &8h2Yk*4`txws*D }8zJd04z| @ųŋcv ݺ^mҺH!҄gKPSwhb\PW <fG!5{s{ag mnQ\aU?a'N>@s%oHuj& LW:ho l<-MRhxcjy !ˀƠ9Qa:[$>_!uݼ[[J.{v~??@Rfv-e-Vb TQ )z%-{_pܬʑC\|>\Wb | %USR̭<74Z 1:H'Qy YHGhqG=?g@WdjEuNg\yy׫7%DRM$eM͸bGIk>Bus%1xH#&Rj[Hc)?ٚcLfa%LWçQ f6H{R88>Ӡbi5?"jLuLYM+:E2-Lxxo$Q`zR|хe'J@8晪4$E'̳RВAK~}2eWRRS=%$5m )YF]\QǨ RFj3uwK90= 3;钚iJ.26Tkȸ_/TpOOGH[OmZ9%̑@QFT$4zeck#؂@ фJ|~] ݣ M, ҄bICq9HzއIgfU o/@tGpS[z CϤWV1in&MYa꾞XOgVOHbROܕ7{2U=3 K(4I#kkzmZnƫA:q'ksǷ9n[nANMO D<'XߑWUG%Qu}'o9$(Kq6az]eO}~e nHbbEm{ZZN-qk5~׺Ha{{{`yxh/齸S{_?k=u~l[pl~^M{Vzfs<_HNj=I e8lGpHM<nOo{[}Ԓ=JI _Jn/XZ"lt a}}ԏdc/ e<Ÿӭ~ޔ=sЛsfM\iy)jZiO1Ē}?q, yuZ?A^<:j?{zV TJo?޿<}}NPP$jߑk.I<\T5x`2OV@ gǽI)׬O6[WM~OimkǫFOr(B faaǻ]X2|p~(Wwm)gXj:h7bdRؠc؊t D}n2L=} 4P[Q1dh%Mdj 2Wy؝ SZ8y,tQ}ݏ댥0Nކ@ #%~> dt"\x;5E&ھU5 Gdvj5T$`GLJjky<G&})C_-=[ܽ1܉k-SC垦n<;++K4X+I[Nwxn>qߚ6Vk~rW@kԧ~G=۷[lWI홥eq|i(h.*K,,##?|wA!^Yx/6-hAרջknHk OQ8uMhгL X67Ÿ10ҤGx)S~߲:2Ef'2HTQ$#ةu Q]K߀-or>Mp|Pz6ͪVYb0hkEJc}t+ R$$ o8?PA?1ǥm#y:IuޛL=L4rV*C4SY,.FCfvUH"w+z B$ꀍP =&")Vڢf EoភQd*HrlCow_<>nL|: k$zwoAcaW|`{cP~RM*?>BQ j=wh FXY>BXZjWWק,ltI^YU^  tȯAFJHby,8b/oQ)1>Xx6<_f4UuI$Xp>o߷BQzXpnn>}~}a/$_ju]KQ<-X}-[n  ߺYFŁC?_@ {{VP#&l}PO]>_/sߺ\9"߀sA@zc~#ߺ\Tn 6@#u>xߺ\Ƚ}?o~ʼn$G$~En/Ͽu'F\.= O:pm<ۓk=."Er>[b?$[NkAׇN06<^ZmJH@A\Ǜ_`=ei߈ǞM9!^C}x@?ϻzt^5 n.O$ [ $^?)׺_?So~=朗EN)N :H%:jzxc2<: <1 #P>RM"E$>d\q3BY4@$OBCtou!7>HPc'VV Sy 8#@ vڰHra||ADPz;E<e1s#1-[нv7heu"ЗDS=yk[qnZ?]:)V@9K9< [yڢC."jҍAxtmT`6+TMN'3AS g* EAevW|k[I ʌ>hGG{vo;UWO]2DѩH#[Oefdԓ1UMEM2S2r#ͶmW7gH48u[eH7AViR29PW+_K -^B{IUhgR *CE J:hIdk$qf!A!\ܫ0$rBY U:p't[>EŽ<=Į0gcUFH=#{?je۸<૊TCH}=DS)v8 ϲ{k+1YY4"4g $Њq۶ T"ƬހP[3NScovVbWfE< YۙSK4&)i$E@Fn/6պ[ᾥIZT5 ߛ @W%UpXT#A7όNvfy<_pvXDfEY!)lE ގպt+JmJiJ4Kl~)]>,ui+½)躛2q+)h(54W7,kBHEqeH{xM.ۼvȪ SMt&E7|6 Ϸ f)uTֿ>!:b=w3V}SDQAfD^@~!Y,Mk7#IZM~h*Tg^PIp+,Gn}F FLU]As{Y͏_oPʓv n/fp8ta_>E'?o[ov=7T7_n:/y#-{}m`=O7?uV<}.7umFAskZ{ߛZX"Z׺} '/=&׺uG]c{}8>?O~]vK>~(<{^뻋?͍ߺ٥p1 /Ůo^uW$G_{޴PB?y޺`\'בo#7}I?ן~Eq=cbovs<{ҽW V 7r5Ֆ^Fѻ7?7]ܩŎjvG`s5 Tꔭ )*=Bƻ}{A'lm@i7c^#qQ/n?s z ZfAQV„=C}U쏏~hH6~>d2MKG]bj!4~dnK|Isre( owSSIyPېk_w *GdHU +g(8&T[#tc*ŋʤDrSʂ*lmu̶K;BJb qZi+tM^wKg?F%߽=Nl6o ThXŹ%EOH5]>9ڵSskKuXVm2 AiiЁt' UֻGv1QKGs-ϸ(|KG#y&Wi!fD,SI/ o\GZ j33]Yr7$F) 8`|8M<[Rm?U˗:pue2P%W>xڌYz(}ī`5y}cX9x|@pE+T`(B_۶xl!I|"2(Q@$H_B( k۞8ϲ]E}j-qg9uQ8`8c9֔ȱPW=.ۘB-+*VS@h @{]4e4#\ГNFᦌTKiiAPk7QXOImEHNHѦ33HMv -e:mm<"+{'OztKt_N-IT/3TPVwhِcufM:WXpM`xC !@qCdJBBc)|r)9!vqy^C0w,N\H?gQw6F>`~]n%0Ol9K-kM:M2o3@!8wSMEMiF)CЋShsybj?~A OlugD{CxR`H^VdJ*m ,K59޹dU QUYOx={緻+TGF轱]SS2S"Kyآ ygFZ]6E;ִjWu'67ƬA?t zp5Rg#H 4¯K*FXi6<9\mH>~ΏlO&%o-阭OO6dkF[vVb}[oĹ·yfn+t 5[Zd>$4 QѪEϨzۥPQq&׼mfEIRF 6lRJV?( |qG-4SoQ vCP8'h"=??ɼ6T)igT#:YϭO׿܁8 5ZE(=(:2xJ{/`.8bŽfHz􉫆p$.AXssp,}\i8FuZe\Xpy-tת,gK1wos'o:d=7.> n#J$ӨįFKE1u:u #5~Z=޲ "ÛuQ7$mՆ :_̀u^1XX}}?@T^ce<؁k}uɿ[a_ߺ],UKs[q,~~Hg1K vSɢ׷_e)u:t G rXƋPz=s{-rB6pڗS;l{o2oV=ᅦ rH։Wb4LƠ.^{ ?(v6;iwE^ nT68ک[s૱r49Cը2İIt^h[Tv駃P'MgK22jRz&rOR w:%W5АR6ٿm̗m2Kmxl{#@ P jeo )mܘۍ͊=9Y*i+ej@0$Yӹr&1j iweoV=ߵv_^-־)F\JW!q&OooLvGgb m]VgbOX6QGijX%xFI9U hyNt-fw]1$7  H6;)6z'"%eeK#H$EGN[[{ndzSvnV! ]g_ɖؽ5tT=4; IOCx |DۛvV8-n9\Ub'I ñ>D1O v5Kg&B f%. ,5++=ݓIԟ U tSdi*{*9(rʼG5LH%8yUOv[gmٮD%u &RœIPˬ FtIs*?;{yy1ٵCEu pGƁ>۵=-[VJlِnfq{?Եj%YթtH'bݹnٷ}M[] 'ÝĊUbcpU‚̛C5heA ((%ҳDf!Kv}(ϥ BĨB"ϙPqXҟU Cٌa43v͹b[ p=J(TU{C愕;^a}AZY-c7X]j;tS4cPj(UlIԤrs_ii@0KV =j$hn5H[roVg ]M+N >޲3pMAM'N%B'7btĜt ܲThfԥ4a^qOtC44r nuG ܦ+)]$B#ctS4aRB]@؂vq<}Mt:(m&9#B#Ԥܬl-04@EXBOIk{\²!/}ʛmBI |z1]^LraE(I ,u)c{ɰ3xeC(Aܹ(#Wj|ݛjd|~l*Z1Ւ)id$q1Qp4؛ͮgٸٙc?>~"F?CFGo|ԎI#MDL#HbJWSjV+q$Xe0##LEͻ"n)?2[5G"l3[#fzqY6jT@JdFYU {)Z7#5շނ:?ST5Q*hyLIkeS?=)FEΟs廅g0?Z~όBDuGʕVO7{a7@{0ڔנ'3 7 zA_Eu=§#. P"ok[{9R7J-^EI d%o߁qiíרrI]6#OvPIޡ>E7 JtMAM@+<}?Pn=M PGy?ۛq}E xi}X = f}>܀? Iֺޮ q~`\Ÿxl=ur ߺԁ+5'yp S{^+\Ǒ"oZ뒫7#>׺ӏ{^<43/ְ"=uTzʋr?Oa9_ȱ'a#u.4X\>:Sl [( p-oϿu"=onu,/[{7{9Z67_&_ߩ]Ǵp\ace4Ĝͭ##z^<C\O{` ^5sm N>KO6??>B)B.qקJ:zV5xI񯥋q~8[h=JOqA6034'{䱯;x66E =H^68 *+-Xp<{׵juE<>WSK^R'齅k_>Lg޻*QZ~A~ <:UXe"ߋ5ŹSVt5zBI [<_'ި=: MTcRMTy}A$RSMmz#YfT1^WGT4 W57F3(`8*@TPB#H-BPcf5jroI<aojR"y4~S k<~>k`3T 7ǧ>}{Qz؝CI>׿>pnn ǢJǏZ5B4j'-/M0G[ORb> ׳q_~Oz[ié,$ 0C@MZ"8FI>\zT܋I?}Fc[2TYM,=O Z2@_=iGIJQOpnܥ'O24ءԶrXAr]+h}"12f>QΦds ReJ]j7 nNOeSC#ǢЖ*HJ(6)#\" iXǟCq˒RP:0zit>QLXAe?MʸSCпmw+YX=eIkPHbģO6xҾ>Ctd.z@淜lZ?0$圩$Ki1nf=D:QAs}FhȐ4-eIAPo긾>^}[2äsW5Tz}Wx~}cGS61"ڵ.t6H{4}jɡQ^IPIw uV`NzcX76xqŵxSOBMұ?]}>}o҄Q>?>׿dcO x~~G>t_O}>?mO=u~?޺MmO_~]o}?}wc߇T^>_]~7\{yO~?WW/χ^}O'u_}W{T=?#h?7.%w ,}uNO>o]~??{zqx}LJ^?U\}?O>~ϭ:?{.:)2jv}WXз}?Ѥ_?:L迫q_?/MM?ۭտW~O{O_׺?X}u+K}{*?SMLom4/^'[zW?O/ǏM#G+׬'?O_>ׇԘw??=Ӧ_aWz?AWfV.!~}L}g}OϤS_?k?/O4߭W_dz*?.~Wxyuu~#~i?O8kKm_zQi??? 3ߟ!gVpD|Cl}}1_gOen#g~>޼^~_Wubuntu-settings-components-0.1+14.04.20140306/runtests.sh0000755000015201777760000001101612306026751023540 0ustar pbusernogroup00000000000000#!/bin/bash # # Copyright (C) 2013 Canonical Ltd # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3 as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # This is a very quick and dirty attempt to figure some metrics for our tests # It monitors all qml files with inotifywatch and generates a cobertura # compatible coverage.xml file containing the statistics. This is far from # perfect but its a start and indeed gives somewhat meaningful numbers # # If this proves to be useful, it probably could/should be rewritten # in a more robust and flexible way, preferably in a language where # floating point operations and xml writing is natively supported. if test -e SettingsComponents.qml; then echo In-source build detected. SRCDIR=`pwd` elif test -e ../SettingsComponents.qml; then echo Out-of-source build detected. Found source dir at .. SRCDIR=`pwd`/.. else echo Out-of-source build detected. Source dir not found at .. echo Only in-source builds or out-of-source builds with source dir at .. are supported. exit 1 fi cd $SRCDIR file_list="" for i in `find . -name "*.qml" -or -name "*.js" | grep -v tests | grep -v debian | grep -v doc/`; do file_list="$file_list $i" done (inotifywatch -v -e access $file_list > statistics.txt) & INOTIFYPID=`echo $!` sleep 1 cd - make -k qmltests cd - kill $INOTIFYPID sleep 1 countedfiles=0 testedfiles=0 countedlines=0 testedlines=0 testedfilelist="" for i in $file_list; do countedfiles=$((countedfiles+1)) thislines=`cat $i | grep -v '^$' | wc -l` headerlines=`grep -n -m 1 "{" $i | cut -d ":" -f 1` thislines=$((thislines-headerlines)) countedlines=$((countedlines+thislines)) grep $i statistics.txt > /dev/null if [ $? -eq 0 ]; then echo "[Y] $i" testedfiles=$((testedfiles+1)) testedlines=$((testedlines+$thislines)) testedfilelist="$testedfilelist $i" else echo "[N] $i" fi done filespercentage=$((testedfiles*100/countedfiles)) echo "Total files: $testedfiles/$countedfiles ($filespercentage%)" linespercentage=$((testedlines*100/countedlines)) linespercentagef=`echo "$testedlines/$countedlines" | bc -l` echo "Total lines: $testedlines/$countedlines ($((linespercentage))%)" cd - coveragefile=coverage-qml.xml echo "" > $coveragefile echo "> $coveragefile echo " SYSTEM 'http://cobertura.sourceforge.net/xml/coverage-03.dtd'>" >> $coveragefile echo "" >> $coveragefile echo " " >> $coveragefile echo " `pwd`" >> $coveragefile echo " " >> $coveragefile echo " " >> $coveragefile echo " " >> $coveragefile echo " " >> $coveragefile for i in $file_list; do found=0 for j in $testedfilelist; do if [ $i == $j ]; then found=1 fi done thislines=`cat $SRCDIR/$i | grep -v '^$' | wc -l` headerlines=`grep -n -m 1 "{" $SRCDIR/$i | cut -d ":" -f 1` thislines=$((thislines-headerlines)) if [ $found -eq 1 ]; then echo " " >> $coveragefile echo " " >> $coveragefile for linenr in $(seq 1 $thislines); do echo " " >> $coveragefile done echo " " >> $coveragefile else echo " " >> $coveragefile echo " " >> $coveragefile for linenr in $(seq 1 $thislines); do echo " " >> $coveragefile done echo " " >> $coveragefile fi echo " " >> $coveragefile done echo " " >> $coveragefile echo " " >> $coveragefile echo " " >> $coveragefile echo "" >> $coveragefile ubuntu-settings-components-0.1+14.04.20140306/CMakeLists.txt0000644000015201777760000000614012306026751024054 0ustar pbusernogroup00000000000000 project(settings-components) cmake_minimum_required(VERSION 2.8.9) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) # Install paths include(GNUInstallDirs) include(FindPkgConfig) find_package(Qt5Quick REQUIRED) set(OUR_QT_QUICK_LIB ${Qt5Quick_LIBRARIES}) get_target_property(QMAKE_EXECUTABLE Qt5::qmake LOCATION) exec_program(${QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_QML" OUTPUT_VARIABLE QT_IMPORTS_DIR) file(TO_CMAKE_PATH "${QT_IMPORTS_DIR}" QT_IMPORTS_DIR) set(OUR_QT_QUICK_INCLUDE ${Qt5Quick_INCLUDE_DIRS}) LIST(APPEND QT_PKGCONFIG_DEPENDENCIES "Qt5Quick") set(UBUNTU_QML_DIR ${QT_IMPORTS_DIR}/Ubuntu) set(SETTINGS_COMPONENTS_DIR ${CMAKE_INSTALL_DATADIR}/ubuntu-settings-components) find_package(Qt5Core REQUIRED) find_package(Qt5Quick REQUIRED) find_package(Qt5Widgets REQUIRED) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) # enable QML debugging string(TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_lower) # Build types should always be lowercase but sometimes they are not. if(cmake_build_type_lower MATCHES "debug") add_definitions(-DQT_QML_DEBUG) endif() include(EnableCoverageReport) ##################################################################### # Enable code coverage calculation with gcov/gcovr/lcov # Usage: # * Switch build type to coverage (use ccmake or cmake-gui) # * Invoke make, make test, make coverage (or ninja if you use that backend) # * Find html report in subdir coveragereport # * Find xml report feasible for jenkins in coverage.xml ##################################################################### if(cmake_build_type_lower MATCHES coverage) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage" ) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage" ) set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --coverage" ) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --coverage" ) ENABLE_COVERAGE_REPORT(TARGETS ${SHELL_APP} FILTER /usr/include ${CMAKE_SOURCE_DIR}/tests/* ${CMAKE_BINARY_DIR}/*) endif() configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") # Doc OPTION(GENERATE_DOC "Enable qdoc generation" OFF) if(GENERATE_DOC) message(STATUS "QDoc enabled.") find_program(QDOC_BIN qdoc) if(NOT QDOC_BIN) message(FATAL_ERROR "qdoc command not found") else() add_subdirectory(doc) endif() endif() # Install subdirectories set(QML_DIRS Ubuntu/Settings ) # Install arch-independent assets under /usr/share install(DIRECTORY ${QML_DIRS} DESTINATION ${SETTINGS_COMPONENTS_DIR} ) install(CODE "EXECUTE_PROCESS(COMMAND mkdir -p \$ENV{DESTDIR}${UBUNTU_QML_DIR})") install(CODE "EXECUTE_PROCESS(COMMAND ln -sf ${CMAKE_INSTALL_PREFIX}/${SETTINGS_COMPONENTS_DIR}/Settings \$ENV{DESTDIR}${UBUNTU_QML_DIR}/Settings)") # Tests enable_testing() add_subdirectory(tests) ubuntu-settings-components-0.1+14.04.20140306/TODO0000644000015201777760000000123512306026751022004 0ustar pbusernogroup00000000000000[BasicMenu] Add tests? [ButtonMenu] DONE - Emit the button click signal to the parent? [CalendarMenu] The Calendar components needs to support multiple models DONE - expose some properties DONE - Add tests - Do not repopulate the whole model on property changes, be smarter [EventMenu] Date of the Event should be formatted DONE - Add tests [MediaPlayerMenu] DONE - Right signals for skipping songs, maybe extra properties exposed [ProgressBarMenu] DONE - The ProgressBar does nothing, needs API [SliderMenu] DONE - The Slider does nothing, needs API [TimeZoneMenu] Needs to format and support real timezones DONE - Add tests [UserSessionMenu] DONE - Add tests ubuntu-settings-components-0.1+14.04.20140306/COPYING.GPL0000644000015201777760000010451312306026751022773 0ustar pbusernogroup00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ubuntu-settings-components-0.1+14.04.20140306/cmake_uninstall.cmake.in0000644000015201777760000000165412306026751026101 0ustar pbusernogroup00000000000000IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") IF(EXISTS "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSE(EXISTS "$ENV{DESTDIR}${file}") MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") ENDIF(EXISTS "$ENV{DESTDIR}${file}") ENDFOREACH(file) ubuntu-settings-components-0.1+14.04.20140306/COPYING.LGPL0000644000015201777760000001674312306026751023116 0ustar pbusernogroup00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.