diff --git a/.meteor/packages b/.meteor/packages index 395aeb476941bb6cb816d60dbd593b290da1010b..164b3e945ae92240ba90702a12ceceeab944765c 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -38,6 +38,7 @@ rocketchat:lib rocketchat:authorization rocketchat:autolinker +rocketchat:channel-settings rocketchat:colors rocketchat:custom-oauth rocketchat:emojione @@ -48,19 +49,28 @@ rocketchat:gitlab rocketchat:highlight rocketchat:ldap rocketchat:logger +rocketchat:mailer rocketchat:markdown rocketchat:me rocketchat:mentions +rocketchat:message-pin rocketchat:message-star rocketchat:oembed rocketchat:slashcommands-invite rocketchat:slashcommands-join rocketchat:slashcommands-leave -rocketchat:soundcloud rocketchat:spotify rocketchat:statistics rocketchat:theme rocketchat:tutum +rocketchat:ui +rocketchat:ui-account +rocketchat:ui-admin +rocketchat:ui-flextab +rocketchat:ui-login +rocketchat:ui-master +rocketchat:ui-message +rocketchat:ui-sidenav rocketchat:webrtc rocketchat:wordpress #rocketchat:chatops diff --git a/.meteor/platforms b/.meteor/platforms index 8a3a35f9f6279bd7d2c8e9eb3836224684108ecc..81ae7012de9ed1a8462ac18018a7c94b3820ccda 100644 --- a/.meteor/platforms +++ b/.meteor/platforms @@ -1,2 +1,3 @@ browser +ios server diff --git a/.meteor/versions b/.meteor/versions index 15562e4f1fe3bee89cda5e40ce362107795c498f..3bbb02db1b0fc6ee6eee625c91aee27a3e6b9c22 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -25,7 +25,7 @@ cfs:http-methods@0.0.30 check@1.1.0 chrismbeckett:toastr@2.1.2_1 coffeescript@1.0.11 -cosmos:browserify@0.8.1 +cosmos:browserify@0.9.0 dandv:caret-position@2.1.1 ddp@1.2.2 ddp-client@1.2.1 @@ -39,6 +39,7 @@ ecmascript@0.1.6 ecmascript-runtime@0.2.6 ejson@1.0.7 email@1.0.8 +emojione:emojione@1.5.2 facebook@1.2.2 fastclick@1.0.7 francocatena:status@1.5.0 @@ -58,8 +59,8 @@ jparker:crypto-md5@0.1.1 jparker:gravatar@0.4.1 jquery@1.11.4 kadira:blaze-layout@2.2.0 -kadira:flow-router@2.7.0 -kenton:accounts-sandstorm@0.1.7 +kadira:flow-router@2.9.0 +kenton:accounts-sandstorm@0.1.8 kevohagan:sweetalert@1.0.0 konecty:autolinker@1.0.3 konecty:change-case@2.3.0 @@ -77,7 +78,7 @@ matb33:collection-hooks@0.8.1 meteor@1.1.10 meteor-base@1.0.1 meteor-developer@1.1.5 -meteorhacks:kadira@2.24.1 +meteorhacks:kadira@2.26.3 meteorhacks:meteorx@1.4.1 meteorspark:util@0.2.0 minifiers@1.1.7 @@ -109,11 +110,10 @@ percolate:migrations@0.9.6 percolate:synced-cron@1.3.0 pntbr:js-yaml-client@0.0.1 promise@0.5.1 -qnub:emojione@1.5.1_1 raix:eventemitter@0.1.3 raix:eventstate@0.0.4 raix:handlebar-helpers@0.2.5 -raix:push@2.6.13-rc.1 +raix:push@3.0.2 raix:ui-dropped-event@0.0.7 random@1.0.5 rate-limit@1.0.0 @@ -123,6 +123,7 @@ reload@1.1.4 retry@1.0.4 rocketchat:authorization@0.0.1 rocketchat:autolinker@0.0.1 +rocketchat:channel-settings@0.0.1 rocketchat:colors@0.0.1 rocketchat:custom-oauth@1.0.0 rocketchat:emojione@0.0.1 @@ -134,19 +135,28 @@ rocketchat:highlight@0.0.1 rocketchat:ldap@0.0.1 rocketchat:lib@0.0.1 rocketchat:logger@0.0.1 +rocketchat:mailer@0.0.1 rocketchat:markdown@0.0.1 rocketchat:me@0.0.1 rocketchat:mentions@0.0.1 +rocketchat:message-pin@0.0.1 rocketchat:message-star@0.0.1 rocketchat:oembed@0.0.1 rocketchat:slashcommands-invite@0.0.1 rocketchat:slashcommands-join@0.0.1 rocketchat:slashcommands-leave@0.0.1 -rocketchat:soundcloud@0.0.1 rocketchat:spotify@0.0.1 rocketchat:statistics@0.0.1 rocketchat:theme@0.0.1 rocketchat:tutum@0.0.1 +rocketchat:ui@0.1.0 +rocketchat:ui-account@0.1.0 +rocketchat:ui-admin@0.1.0 +rocketchat:ui-flextab@0.1.0 +rocketchat:ui-login@0.1.0 +rocketchat:ui-master@0.1.0 +rocketchat:ui-message@0.1.0 +rocketchat:ui-sidenav@0.1.0 rocketchat:webrtc@0.0.1 rocketchat:wordpress@0.0.1 routepolicy@1.0.6 @@ -166,7 +176,7 @@ templating-tools@1.0.0 tmeasday:crypto-base@3.1.2 tmeasday:crypto-md5@3.1.2 tmeasday:errors@2.0.0 -todda00:friendly-slugs@0.3.4 +todda00:friendly-slugs@0.3.6 tracker@1.0.9 twitter@1.1.5 ui@1.0.8 diff --git a/.travis.yml b/.travis.yml index a0ba35fa7646ce55ca06a992c3188dbdabed1cdb..6b7015ad45e78f1009a83a481be0e0fff94309ad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,11 +3,27 @@ language: node_js branches: only: - master + - develop node_js: -- '0.10' +- '0.12' +addons: + apt: + sources: + - google-chrome + packages: + - google-chrome-stable before_install: - curl https://install.meteor.com | /bin/sh - npm install -g npm@'>=2.13.5' +- mkdir -p node_modules +- npm install phantomjs +- npm install velocity-cli +- export PHANTOMJS_BIN=./node_modules/phantomjs/bin/phantomjs +- export JASMINE_BROWSER=PhantomJS +- export DEBUG=1 +- export JASMINE_DEBUG=1 +- export VELOCITY_DEBUG=1 +- export VELOCITY_DEBUG_MIRROR=1 script: - if [[ "$TRAVIS_PULL_REQUEST" != "false" ]]; then echo "Building PR $TRAVIS_PULL_REQUEST"; meteor build ../build; exit $?; fi - cd .travis @@ -18,8 +34,9 @@ script: - cd .travis - sh ./namefiles.sh - cd .. -- meteor add-platform ios -- meteor add rocketchat:livechat rocketchat:hubot +- meteor add rocketchat:livechat rocketchat:hubot sanjo:jasmine velocity:console-reporter +- ./node_modules/velocity-cli/bin/velocity test-packages --ci +- ./node_modules/velocity-cli/bin/velocity test-app --ci - meteor build --server demo.rocket.chat ../build - cd .travis - sh ./namedemo.sh @@ -34,5 +51,6 @@ deploy: skip_cleanup: true local_dir: ../build on: - branch: master - + branch: + - master + - develop diff --git a/client/views/login/social.coffee b/HISTORY.md similarity index 100% rename from client/views/login/social.coffee rename to HISTORY.md diff --git a/README.md b/README.md index 2b559138dc328f10f9600310b315fd62f5ac41b3..a07134a1840fddad381043a454bc84b5e177d0bd 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ Checkout the latest version at [https://demo.rocket.chat](https://demo.rocket.ch Available from the AppStore: -[](https://geo.itunes.apple.com/us/app/rocket.chat/id1028869439?mt=8) +[](https://itunes.apple.com/us/app/rocket.chat/id1028869439?mt=8) -Get the app for your Android phone: +Get the app for your Android phone: [](https://play.google.com/store/apps/details?id=com.konecty.rocket.chat) @@ -45,7 +45,7 @@ Download the Native Cross-Platform Desktop Application at [Rocket.Chat.Electron] [](https://travis-ci.org/RocketChat/Rocket.Chat) [](https://coveralls.io/r/RocketChat/Rocket.Chat) [](https://codeclimate.com/github/RocketChat/Rocket.Chat) -[](https://github.com/RocketChat/Rocket.Chat/raw/master/LICENSE) +[](https://github.com/RocketChat/Rocket.Chat/raw/master/LICENSE) [](https://waffle.io/RocketChat/Rocket.Chat) Rocket.Chat is a Web Chat Server, developed in JavaScript, using the [Meteor](https://www.meteor.com/install) fullstack framework. @@ -57,7 +57,7 @@ It is a great solution for communities and companies wanting to privately host t ##### [Hacker News](https://news.ycombinator.com/item?id=9624737) > Yes, we made it to the #1 -##### [Product Hunt](http://www.producthunt.com/posts/rocket-chat) +##### [Product Hunt](https://www.producthunt.com/tech/rocket-chat) > Your own open source Slack-like chat ##### [JavaScript Weekly](http://javascriptweekly.com/issues/234) @@ -72,6 +72,10 @@ It is a great solution for communities and companies wanting to privately host t ##### [snowulf.com](https://snowulf.com/2015/09/25/why-slack-when-you-can-rocket-chat/) > Why Slack when you can Rocket.chat? +##### [liminality.xyz](http://liminality.xyz/self-hosting/) +> Self-hosted alternatives to popular cloud services + + ## Features - BYOS (bring your own server) @@ -90,18 +94,18 @@ It is a great solution for communities and companies wanting to privately host t - Transcripts / History - File Upload / Sharing - Full text search -- Live chat / Messaging call center -- LDAP Authentication +- Live chat / Messaging call center +- LDAP Authentication - Support for Okta SSO through SAML v2 -- I18n - Supports 22 Languages +- I18n - Supports 22 Languages - Hubot Friendly - Face to Face Video Conferencing (aka WebRTC) - Multi-users Video Group Chat - Audio calls - Multi-users Audio Conference - Screensharing -- REST APIs -- Remote Locations Video Monitoring +- REST APIs +- Remote Locations Video Monitoring - Chat-ops powered by Hubot: scalable horizontal app integration (early access) - Massively scalable hosting and provisioning (beta testing now) - Native Cross-Platform Desktop Application [Windows, Mac OSX, or Linux](https://rocket.chat/) @@ -115,7 +119,7 @@ It is a great solution for communities and companies wanting to privately host t #### In Progress - Support multiple teams on the same instance / same VPS infrastructure: [Issue #658](https://github.com/RocketChat/Rocket.Chat/issues/658), [Issue #630](https://github.com/RocketChat/Rocket.Chat/issues/630) -- Support for PostgreSQL: [Issue #533](https://github.com/RocketChat/Rocket.Chat/issues/533), [Issue #822](https://github.com/RocketChat/Rocket.Chat/issues/822) +- Support for PostgreSQL: [Issue #533](https://github.com/RocketChat/Rocket.Chat/issues/533), [Issue #822](https://github.com/RocketChat/Rocket.Chat/pull/822) - Native iOS Application [Issue #270](https://github.com/RocketChat/Rocket.Chat/issues/270), [Rocket.Chat.iOS - HELP WANTED](https://github.com/RocketChat/Rocket.Chat.iOS) - Native Android Application [Issue #271 - HELP WANTED](https://github.com/RocketChat/Rocket.Chat/issues/271) - Off-the-Record (OTR) Messaging [Issue #36](https://github.com/RocketChat/Rocket.Chat/issues/36), [Issue #268 - HELP WANTED](https://github.com/RocketChat/Rocket.Chat/issues/268) @@ -145,7 +149,7 @@ Everyone can start hacking the adapter code, or launch his/her own bot within a Please head over to the [Hubot Integration Project](https://github.com/RocketChat/hubot-rocketchat) for more information. -#### Chat-ops integrations powered by Hubot +#### Chat-ops integrations powered by Hubot Integrate your application with fly-in panels today! Early access is available for developers. @@ -181,9 +185,9 @@ Easy one click install right from your Ubuntu Desktop (coming soon). ### Docker -Use the automated build at our [Official Docker Registry](https://registry.hub.docker.com/u/rocketchat/rocket.chat/) +Use the automated build at our [Official Docker Registry](https://hub.docker.com/r/rocketchat/rocket.chat/) -[](https://registry.hub.docker.com/u/rocketchat/rocket.chat/) +[](https://hub.docker.com/r/rocketchat/rocket.chat/) ``` docker pull rocketchat/rocket.chat @@ -227,19 +231,19 @@ docker run -it -p 3000:3000 -v "$(pwd)":/app danieldent/meteor ## Credits Thanks to +[Aaron Ogle](https://github.com/geekgonecrazy), +[Bradley Hilton](https://github.com/Graywolf336), [Diego Sampaio](https://github.com/sampaiodiego), [Gabriel Engel](https://github.com/engelgabriel), [Marcelo Schmidt](https://github.com/marceloschmidt), [Rafael Caferati](https://github.com/rcaferati), [Rodrigo Nascimento](https://github.com/rodrigok), [Sing Li](https://github.com/Sing-Li), -[Aaron Ogle](https://github.com/geekgonecrazy), -[Graywolf336](https://github.com/Graywolf336) - +and many others. Emoji provided free by [Emoji One](http://emojione.com) -Performance monitoring provided by [Kadira](https://kadira.io/) +Performance monitoring provided by [Kadira](https://kadira.io) ### Contributions @@ -249,6 +253,12 @@ A lot of work has already gone into Rocket.Chat, but we have much bigger plans f So if you'd like to be part of the project, please check out the [roadmap](https://github.com/RocketChat/Rocket.Chat/milestones) and [issues](https://github.com/RocketChat/Rocket.Chat/issues) to see if there's anything you can help with. +### Branching Model + +The [Gitflow Workflow](http://nvie.com/posts/a-successful-git-branching-model/) section below is derived from Vincent Driessen at nvie. + +See also this [Git Workflows Comparison](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) for more details. + ### Translations We are experimenting [Lingohub](https://translate.lingohub.com/engelgabriel/rocket-dot-chat/dashboard). @@ -256,7 +266,7 @@ If you want to help, send an email to support at rocket.chat to be invited to th ### Community -Join the conversation at [Twitter](http://twitter.com/RocketChatApp), [Facebook](https://www.facebook.com/RocketChatApp) or [Google Plus](https://plus.google.com/+RocketChatApp) +Join the conversation at [Twitter](https://twitter.com/RocketChatApp), [Facebook](https://www.facebook.com/RocketChatApp) or [Google Plus](https://plus.google.com/+RocketChatApp) ### License @@ -267,3 +277,5 @@ Note that Rocket.Chat is distributed under the [MIT License](http://opensource.o Rocket.Chat will be free forever, but you can help us speed-up the development! [](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=49QX7TYCVZK8L) + +[BountySource](https://www.bountysource.com/teams/rocketchat) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000000000000000000000000000000000..ccb618ae4b1218d3090ea10e0157a48a5a54465f --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,7 @@ +# Reporting Security Issues + +Please report any security issues you discovered to security[at]rocket[dot]chat + +We will assess the risk, plus make a fix available before we create a GitHub issue. + +Thank you for your contribution. diff --git a/build-ios.sh b/build-ios.sh index 8ab71526426732c1d4543c7f2b88ac6dcb8b3bcc..92c9444debb2996a61dc6ffc08e30022ad64a6b7 100755 --- a/build-ios.sh +++ b/build-ios.sh @@ -1,6 +1,5 @@ #!/bin/bash -meteor add-platform ios rm -rf .meteor/local/cordova-build rm -rf ../Rocket.Chat-build meteor build ../Rocket.Chat-build --server https://demo.rocket.chat diff --git a/build-old.sh b/build-old.sh index 1ae834b842a67380411c1c825f68246073cf30c6..0017dc40e43aab6773a2e60aa2fb38c93307c13a 100755 --- a/build-old.sh +++ b/build-old.sh @@ -1,9 +1,7 @@ #!/bin/bash source ./build-info.sh export METEOR_SETTINGS=$(cat settings.json) -meteor add rocketchat:livechat -meteor add rocketchat:hubot -meteor add-platform ios +meteor add rocketchat:livechat rocketchat:hubot meteor build --server https://demo.rocket.chat --directory /var/www/rocket.chat cd /var/www/rocket.chat/bundle/programs/server npm install diff --git a/client/lib/accounts.coffee b/client/lib/accounts.coffee deleted file mode 100644 index 05c7d4e2ea776b17026471d84aff802bae0dad80..0000000000000000000000000000000000000000 --- a/client/lib/accounts.coffee +++ /dev/null @@ -1,16 +0,0 @@ -Accounts.onEmailVerificationLink (token, done) -> - Accounts.verifyEmail token, (error) -> - if not error? - alert(t('Email_verified')) - - done() - -Accounts.onResetPasswordLink (token, done) -> - newPassword = prompt(t('New_password')) - Accounts.resetPassword token, newPassword, (error) -> - if error? - console.log error - alert(t('Error_changing_password')) - else - alert('Password_changed') - done() \ No newline at end of file diff --git a/client/methods/updateMessage.coffee b/client/methods/updateMessage.coffee index b784413eb90458a1fcb824323acaa427eb6636df..378bb0c9bda332fd6ba2a8b5b4213287f37fef6e 100644 --- a/client/methods/updateMessage.coffee +++ b/client/methods/updateMessage.coffee @@ -9,6 +9,8 @@ Meteor.methods editAllowed = RocketChat.settings.get 'Message_AllowEditing' editOwn = originalMessage?.u?._id is Meteor.userId() + me = Meteor.users.findOne Meteor.userId() + unless hasPermission or (editAllowed and editOwn) toastr.error t('Message_editing_not_allowed') throw new Meteor.Error 'message-editing-not-allowed', t('Message_editing_not_allowed') @@ -23,7 +25,11 @@ Meteor.methods Tracker.nonreactive -> - message.ets = new Date(Date.now() + TimeSync.serverOffset()) + message.editedAt = new Date(Date.now() + TimeSync.serverOffset()) + message.editedBy = + _id: Meteor.userId() + username: me.username + message = RocketChat.callbacks.run 'beforeSaveMessage', message ChatMessage.update @@ -31,5 +37,6 @@ Meteor.methods 'u._id': Meteor.userId() , $set: - ets: message.ets + "editedAt": message.editedAt + "editedBy": message.editedBy msg: message.msg diff --git a/client/startup/defaultRoomTypes.coffee b/client/startup/defaultRoomTypes.coffee index 5ef93048cc0382727e7a8e691dc25eccbc212313..0bba73ffdefbd76f47e3c49926bf4105ff51cbb3 100644 --- a/client/startup/defaultRoomTypes.coffee +++ b/client/startup/defaultRoomTypes.coffee @@ -5,6 +5,10 @@ Meteor.startup -> RocketChat.roomTypes.addType('directMessages', roles); RocketChat.roomTypes.addType('privateGroups', roles); + RocketChat.roomTypes.setIcon('c', 'icon-hash'); + RocketChat.roomTypes.setIcon('d', 'icon-at'); + RocketChat.roomTypes.setIcon('p', 'icon-lock'); + RocketChat.roomTypes.setRoute 'c', 'channel', (sub) -> return { name: sub.name } diff --git a/client/views/app/room.html b/client/views/app/room.html deleted file mode 100644 index 3c2380b39296d286b487af267554a751dfd54143..0000000000000000000000000000000000000000 --- a/client/views/app/room.html +++ /dev/null @@ -1,157 +0,0 @@ -<template name="room"> - <div class="dropzone"> - <div class="dropzone-overlay"> - <div> - {{_ "Drop_to_upload_file"}} - </div> - </div> - <section class="messages-container {{adminClass}}" id="{{windowId}}"> - <header class="fixed-title"> - {{> burger}} - <h2> - {{#if showToggleFavorite}} - <a href="#favorite" class="toggle-favorite"><i class="{{favorite}}"></i></a> - {{/if}} - <i class="{{roomIcon}} status-{{userStatus}}"></i> - <span class="room-title {{editingTitle}}">{{roomName}}</span> - {{#if canEditName}} - <input type="text" id="room-title-field" class="{{showEditingTitle}}" value="{{roomNameEdit}}" dir="auto"> - <a href="#edit" class="edit-room-title"><i class="icon-pencil" aria-label="{{_ "Edit"}}"></i></a> - {{/if}} - </h2> - </header> - <div class="container-bars"> - {{#each uploading}} - <div class="upload-progress {{#if error}}upload-error{{/if}}"> - {{#if error}} - {{error}} - <a> - close - </a> - {{else}} - <div class="upload-progress-progress" style="width: {{percentage}}%;"></div> - <div class="upload-progress-text"> - {{name}}... {{percentage}}% - <a> - cancel - </a> - </div> - {{/if}} - </div> - {{/each}} - {{#if unreadCount}} - {{#if unreadSince}} - <div class="unread-bar"> - {{_ "S_new_messages_since_s" unreadCount formatUnreadSince}} - <a> - {{_ "Mark_as_read"}} - </a> - </div> - {{/if}} - {{/if}} - </div> - <div class="messages-box {{compactView}}"> - <div class="ticks-bar"></div> - <div class="wrapper"> - <ul aria-live="polite"> - {{#if hasMore}} - <li class="load-more"> - {{#if isLoading}} - <div class="load-more-loading">{{_ "Loading_more_from_history"}}...</div> - {{else}} - <a href="">{{_ "Has_more"}}...</a> - {{/if}} - </li> - {{else}} - <li class="start"> - {{_ "Start_of_conversation"}} - </li> - {{/if}} - {{#each messagesHistory}} - {{#nrr nrrargs 'message' .}}{{/nrr}} - {{/each}} - </ul> - </div> - <div class="new-message not"> - <i class="icon-down-big"></i> - <span>{{_ "New_messages"}}</span> - </div> - </div> - <footer class="footer"> - {{#if subscribed}} - <form class="message-form" method="post" action="/"> - <div style="display: flex"> - <div class="file"> - <i class="octicon octicon-cloud-upload file"></i> - <input type="file" accept="{{fileUploadAllowedMediaTypes}}"> - </div> - <div class="input-message-container"> - {{> messagePopupConfig getPopupConfig}} - <textarea dir="auto" name="msg" maxlength="{{maxMessageLength}}" class="input-message autogrow-short" placeholder="{{_ 'Message'}}"></textarea> - </div> - - {{#if canRecordAudio}} - <div class="mic"> - <i class="icon-mic" aria-label="{{_ "Record"}}"></i> - </div> - <div class="stop-mic hidden"> - <i class="icon-stop" aria-label="{{_ "Stop_Recording"}}"></i> - </div> - {{/if}} - </div> - <div class="users-typing"> - {{#with usersTyping}} - <strong>{{users}}</strong> - {{#if multi}} - {{#if selfTyping}} - {{_ "are_also_typing"}} - {{else}} - {{_ "are_typing"}} - {{/if}} - {{else}} - {{#if selfTyping}} - {{_ "is_also_typing" context="male"}} - {{else}} - {{_ "is_typing" context="male"}} - {{/if}} - {{/if}} - {{/with}} - </div> - - {{#if showFormattingTips}} - <div class="formatting-tips" aria-hidden="true" dir="auto"> - {{#if showMarkdown}} - <b>*{{_ "bold"}}*</b> - <i>_{{_ "italics"}}_</i> - <span>~<strike>{{_ "strike"}}</strike>~</span> - <code class="inline">`{{_ "inline_code"}}`</code> - {{/if}} - {{#if showHighlight}} - <code class="inline"><span class="hidden-br"><br></span>```<span class="hidden-br"><br></span><i class="icon-level-down"></i>{{_ "multi"}}<span class="hidden-br"><br></span><i class="icon-level-down"></i>{{_ "line"}}<span class="hidden-br"><br></span><i class="icon-level-down"></i>```</code> - {{/if}} - {{#if showMarkdown}} - <q><span class="hidden-br"><br></span>>{{_ "quote"}}</q> - {{/if}} - - </div> - {{/if}} - <div class="editing-commands" aria-hidden="true" dir="auto"> - <div class="editing-commands-cancel">{{_ 'Esc_to'}} <a href="">{{_ 'Cancel'}}</a></div> - <div class="editing-commands-save">{{_ 'Enter_to'}} <a href="">{{_ 'Save_changes'}}</a></div> - </div> - </form> - {{else}} - {{#if canJoin}} - <div> - {{{_ "you_are_in_preview_mode_of" room_name=roomName}}} - <button class="button join"><span><i class="icon-login"></i> {{_ "join"}}</span></button> - </div> - {{/if}} - {{/if}} - </footer> - </section> - <section class="flex-tab"> - {{> Template.dynamic template=flexTemplate data=flexData}} - </section> - </div> -</template> diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json index aeb03b4246f7ae5ff96eeec70d0fbfa87faec0c7..861332c202f5994e01e600d11e3b2abe396c99b6 100644 --- a/i18n/ar.i18n.json +++ b/i18n/ar.i18n.json @@ -1,7 +1,6 @@ { "and" : "Ùˆ", "Email_verified" : "البريد الإلكتروني التØقق", - "User_added" : "وأضا٠العضو <em>__user_added__</em>.", "User_joined_channel" : "وقد انضمت قناة.", "User_left" : "العضو <em>__user_left__</em>يقم." } \ No newline at end of file diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json index 27f18d58870132f5b5e2ca983fb67e89e6221ff9..e4307a7162574c11deb67a3e3a9d53ceeeeaa4ff 100644 --- a/i18n/de.i18n.json +++ b/i18n/de.i18n.json @@ -4,6 +4,17 @@ "Accounts" : "Kontos", "Accounts_denyUnverifiedEmail" : "Nicht verifizierte E-Mails ablehnen", "Accounts_EmailVerification" : "E-Mail-Verifizierung", + "Accounts_ManuallyApproveNewUsers" : "Neue Benutzer manuell aktivieren", + "Accounts_OAuth_Custom_Authorize_Path" : "Autorisierungspfad", + "Accounts_OAuth_Custom_Button_Color" : "Buttonfarbe", + "Accounts_OAuth_Custom_Button_Label_Color" : "Button-Text-Farbe", + "Accounts_OAuth_Custom_Button_Label_Text" : "Button-Text", + "Accounts_OAuth_Custom_Enable" : "Aktivieren", + "Accounts_OAuth_Custom_id" : "Id", + "Accounts_OAuth_Custom_Identity_Path" : "Identitäts Pfad", + "Accounts_OAuth_Custom_Secret" : "Secret", + "Accounts_OAuth_Custom_Token_Path" : "Token Pfad", + "Accounts_OAuth_Custom_URL" : "URL", "Accounts_OAuth_Facebook" : "Facebook Login", "Accounts_OAuth_Facebook_id" : "Facebook-App-ID", "Accounts_OAuth_Facebook_secret" : "Facebook Secret", @@ -19,21 +30,10 @@ "Accounts_OAuth_Meteor" : "Meteor Login", "Accounts_OAuth_Meteor_id" : "Meteor Id", "Accounts_OAuth_Meteor_secret" : "Meteor Secret", - "Accounts_ManuallyApproveNewUsers" : "Neue Benutzer manuell aktivieren", - "Accounts_RegistrationRequired" : "Anmeldung erforderlich", "Accounts_OAuth_Twitter" : "Twitter Login", "Accounts_OAuth_Twitter_id" : "Twitter Id", "Accounts_OAuth_Twitter_secret" : "Twitter Secret", - "Accounts_OAuth_Custom_id" : "Id", - "Accounts_OAuth_Custom_URL" : "URL", - "Accounts_OAuth_Custom_Token_Path" : "Token Pfad", - "Accounts_OAuth_Custom_Identity_Path" : "Identitäts Pfad", - "Accounts_OAuth_Custom_Authorize_Path" : "Autorisierungspfad", - "Accounts_OAuth_Custom_Secret" : "Secret", - "Accounts_OAuth_Custom_Enable" : "Aktivieren", - "Accounts_OAuth_Custom_Button_Label_Text" : "Button-Text", - "Accounts_OAuth_Custom_Button_Label_Color" : "Button-Text-Farbe", - "Accounts_OAuth_Custom_Button_Color" : "Buttonfarbe", + "Accounts_RegistrationRequired" : "Anmeldung erforderlich", "Activate" : "Aktivieren", "Add_custom_oauth" : "Benutzerdefinierte oauth hinzufügen", "Add_Members" : "Mitglieder hinzufügen", @@ -49,6 +49,7 @@ "are_also_typing" : "schreiben auch", "are_typing" : "schreiben", "Are_you_sure" : "Sind Sie sicher?", + "Auto_Load_Images" : "Automatisches Laden der Bilder", "Avatar_changed_successfully" : "Avatar erfolgreich geändert", "away" : "abwesend", "Away" : "Abwesend", @@ -56,7 +57,6 @@ "Away_female" : "Abwesend", "away_male" : "abwesend", "Away_male" : "Abwesend", - "Auto_Load_Images" : "Automatisches Laden der Bilder", "Back_to_login" : "Zurück zum Login", "bold" : "fett", "busy" : "beschäftigt", @@ -66,10 +66,12 @@ "busy_male" : "beschäftigt", "Busy_male" : "Beschäftigt", "Cancel" : "Abbrechen", + "CDN_PREFIX" : "CDN Präfix", "Change_avatar" : "Ändere dein Avatar", "Channels" : "Kanäle", "Channels_list" : "Liste der öffentlichen Channels", "Chat_Rooms" : "Chaträume", + "Clear_all_unreads_question" : "Alle ungelesenen löschen?", "close" : "schließen", "coming_soon" : "kommt bald", "Commands" : "Befehle", @@ -83,12 +85,12 @@ "Create_new_private_group" : "Erstellen Sie eine neue private Gruppe", "Create_new_public_channel" : "Erstelle einen neuen öffentlichen Channel", "Created_at" : "Erstellt am", - "Custom_oauth_unique_name" : "Eindeutigen Namen von benutzerdefinierte oauth", "Custom_oauth_helper" : "Bei der Einrichtung von OAuth, muss eine Callback-URL angegeben werden. Benutze <pre>%s</pre>", + "Custom_oauth_unique_name" : "Eindeutigen Namen von benutzerdefinierte oauth", "days" : "Tage", "Deactivate" : "Deaktivieren", - "Delete_User_Warning" : "Beim Löschen eines Benutzers, werden alle seine Nachrichten ebenfalls gelöscht. Dies kann nicht rückgängig gemacht werden.", "Delete" : "Löschen", + "Delete_User_Warning" : "Beim Löschen eines Benutzers, werden alle seine Nachrichten ebenfalls gelöscht. Dies kann nicht rückgängig gemacht werden.", "Deleted" : "Gelöscht!", "Desktop_Notifications" : "Desktop-Benachrichtigungen", "Desktop_Notifications_Enabled" : "Desktop-Benachrichtigungen sind aktiviert", @@ -126,17 +128,17 @@ "Get_to_know_the_team" : "Lernen Sie das Rocket.Team kennen", "github_no_public_email" : "Sie haben keine öffentliche Email-Adresse in Ihrem Github Account", "Give_a_unique_name_for_the_custom_oauth" : "Geben Sie einen eindeutigen Namen für das benutzerdefinierte oauth", - "Have_your_own_chat" : "Erstelle deinen eigenen web chat. Entwickelt mit Meteor.com, der Rocket.Chat ist eine tolle Lösung für Entwickler, die schnell und einfach einen eigene Chat Plattform aufbauen wollen.", "Has_more" : "Mehr", + "Have_your_own_chat" : "Erstelle deinen eigenen web chat. Entwickelt mit Meteor.com, der Rocket.Chat ist eine tolle Lösung für Entwickler, die schnell und einfach einen eigene Chat Plattform aufbauen wollen.", "Hide_room" : "Raum verstecken", "History" : "Chronik", "hours" : "Stunden", "Incorrect_Password" : "Falsches Passwort", "inline_code" : "inline_code", - "Install_FxOs": "Installiere Rocket.Chat auf deinem Firefox", - "Install_FxOs_follow_instructions" : "Bitte bestätige die Installation der App (drücke \"Installieren\" in der Aufforderung).", + "Install_FxOs" : "Installiere Rocket.Chat auf deinem Firefox", "Install_FxOs_done" : "Super! Du kannst Rocket.Chat nun über das Icon auf deinem Startbildschirm nutzen. Viel Spaß mit Rocket.Chat!", "Install_FxOs_error" : "Schade, das hat leider nicht geklappt! Der folgende Fehler ist aufgetreten:", + "Install_FxOs_follow_instructions" : "Bitte bestätige die Installation der App (drücke \"Installieren\" in der Aufforderung).", "Invalid_confirm_pass" : "Die Passwörter stimmen nicht überein", "Invalid_email" : "Email-Adresse ungültigt", "Invalid_name" : "Der Name darf nicht leer sein", @@ -170,14 +172,14 @@ "Layout_Sidenav_Footer_description" : "Die Footer Größe ist 260x70", "Layout_Terms_of_Service" : "Nutzungsbedingungen", "LDAP" : "LDAP", - "LDAP_Dn" : "LDAP DN", + "LDAP_DN" : "LDAP DN", "LDAP_Port" : "LDAP Port", "LDAP_Url" : "LDAP URL", "Leave_room" : "Raum verlassen", "line" : "Zeilen", "Load_more" : "Mehr laden", - "Loading_more_from_history" : "Lade mehr aus der Historie", "Loading..." : "Wird geladen ...", + "Loading_more_from_history" : "Lade mehr aus der Historie", "Loading_suggestion" : "Vorschläge werden geladen...", "Login" : "Login", "Login_with" : "Login mit %s", @@ -192,16 +194,16 @@ "Message_AllowDeleting" : "Erlaube Nachrichten zu löschen", "Message_AllowEditing" : "Erlaube Bearbeitung von Nachrichten", "Message_AllowEditing_BlockEditInMinutes" : "Bearbeiten von Nachrichten blockieren nach (in Minuten - 0 zum deaktivieren)", + "Message_AllowPinning" : "Erlaube es Nachrichten anzuheften", "Message_AudioRecorderEnabled" : "Audio Recorder Aktiviert", "Message_deleting_not_allowed" : "Nachrichten löschen nicht erlaubt", - "Message_editing_not_allowed" : "Nachrichten bearbeiten nicht erlaubt", "Message_editing_blocked" : "Diese Nachricht kann nicht mehr bearbeitet werden", + "Message_editing_not_allowed" : "Nachrichten bearbeiten nicht erlaubt", + "Message_KeepHistory" : "Nachrichtenverlauf behalten", "Message_MaxAllowedSize" : "Maximale Größe der Nachricht", + "Message_pinned" : "Nachricht angeheftet", "Message_pinning_not_allowed" : "Nachrichten anheften erlaubt", - "Message_AllowPinning" : "Erlaube es Nachrichten anzuheften", - "Message_KeepHistory" : "Nachrichtenverlauf behalten", "Message_removed" : "Nachricht entfernt", - "Message_pinned" : "Nachricht angeheftet", "Message_ShowDeletedStatus" : "Zeige Löschstatus", "Message_ShowEditedStatus" : "Zeige Bearbeitungsstatus", "Messages" : "Nachrichten", @@ -221,24 +223,25 @@ "n_messages" : "%s Nachrichten", "Name" : "Name", "Name_cant_be_empty" : "Name darf nicht leer sein", + "Name_optional" : "Name (freiwillig)", "New_messages" : "Neue Nachrichten", "New_password" : "Neues Passwort", + "No_channel_with_name_%s_was_found" : "Es wurde keine Kanal mit dem Namen <strong>\"%s\"</strong> gefunden!", "No_channels_yet" : "Sie sind kein Mitglied eines Channels.", "No_direct_messages_yet" : "Sie haben keine Konversation gestartet.", "No_favorites_yet" : "Sie haben keine Favoriten hinzugefügt.", + "No_group_with_name_%s_was_found" : "Es wurde keine private Gruppe mit dem Namen <strong>\"%s\"</strong> gefunden!", "No_groups_yet" : "Sie sind kein Mitglied einer privaten Gruppe.", "No_permission_to_view_room" : "Sie haben keine Berechtigung diesen Raum zu betreten", - "No_channel_with_name_%s_was_found" : "Es wurde keine Kanal mit dem Namen <strong>\"%s\"</strong> gefunden!", - "No_group_with_name_%s_was_found" : "Es wurde keine private Gruppe mit dem Namen <strong>\"%s\"</strong> gefunden!", "No_user_with_username_%s_was_found" : "Es wurde kein Benutzer mit dem Namen <strong>\"%s\"</strong> gefunden!", "Not_allowed" : "Nicht erlaubt", "Not_found_or_not_allowed" : "Nicht gefunden oder erlaubt", "Nothing_found" : "Nichts gefunden", "Notify_all_in_this_room" : "Alle in diesem Raum benachrichtigen", - "Old_Password" : "Altes Passwort", "Old_and_new_password_required" : "Das alte und neue Passwort müssen angegeben werden um das jetzige Passwort zu ändern.", - "Only_you_can_see_this_message" : "Nur Sie können diese Nachricht sehen", + "Old_Password" : "Altes Passwort", "Online" : "Online", + "Only_you_can_see_this_message" : "Nur Sie können diese Nachricht sehen", "Oops!" : "Oops", "Opt_out_statistics" : "Meine anonymen Statitstiken nicht an Rocke.Chat senden", "Opt_out_statistics_warning" : "Durch das Absenden Ihrer anonymen Statistiken, werden Sie uns helfen, festzustellen, wie viele Instanzen von Rocket.Chat eingesetzt werden, und wie gut das System verhält, so können wir es weiter verbessern. Wenn Sie weiterhin das Senden von anonymen Statistiken möchten, deaktivieren Sie das Kontrollkästchen oben. Danke.", @@ -276,8 +279,8 @@ "Registration_Succeeded" : "Registrierung erfolgreich", "Remember_me" : "Erinnere dich an mich", "Remove" : "Entfernen", - "Remove_custom_oauth" : "Entferne benutzerdefiniertes oauth", "Remove_Admin" : "Admin entfernen", + "Remove_custom_oauth" : "Entferne benutzerdefiniertes oauth", "Reset_password" : "Passwort zurücksetzen", "Room" : "Raum", "Room_name_changed" : "Raumname geändert zu: <em>__room_name__</em> von <em>__user_by__</em>", @@ -287,6 +290,9 @@ "Room_uploaded_file_list_empty" : "Keine Dateien zur Verfügung.", "room_user_count" : "%s Benutzer", "Rooms" : "Räume", + "S_new_messages_since_s" : "%s neue Nachrichten seit %s", + "SAML" : "SAML", + "SAML_Custom_Generate_Username" : "Benutzernamen generieren", "Save" : "Speichern", "Save_changes" : "Änderungen speichern", "Save_Mobile_Bandwidth" : "Mobilfunkbandbreite verringern", @@ -317,7 +323,6 @@ "Site_Name" : "Seitenname:", "Site_Url" : "Website URL", "Site_Url_Description" : "Beispiel: https://chat.domain.com/", - "SAML" : "SAML", "SMTP" : "SMTP", "SMTP_Host" : "SMTP Host", "SMTP_Password" : "SMTP Passwort", @@ -329,9 +334,9 @@ "Stats_Active_Users" : "Aktive Benutzer", "Stats_Avg_Channel_Users" : "Durchschnittliche Kanal Benutzer", "Stats_Avg_Private_Group_Users" : "Durchschnittliche Benutzer in Privater Gruppe", + "Stats_Away_Users" : "Beschäftige Benutzer", "Stats_Max_Room_Users" : "Maximale Raum Benutzer", "Stats_Non_Active_Users" : "Ina", - "Stats_Away_Users" : "Beschäftige Benutzer", "Stats_Offline_Users" : "Benutzer offline", "Stats_Online_Users" : "Benutzer online", "Stats_OS_Arch" : "OS Arch", @@ -352,7 +357,6 @@ "Stop_Recording" : "Aufnahme stoppen", "strike" : "durchgestrichen", "Submit" : "Abschicken", - "S_new_messages_since_s" : "%s neue Nachrichten seit %s", "The_field_is_required" : "Das Feld %s ist erforderlich.", "True" : "Wahr", "Unnamed" : "Unbenannt", @@ -363,7 +367,6 @@ "Use_service_avatar" : "Benutze %s avatar", "Use_this_username" : "Benutzen Sie folgenden Benutzernamen", "Use_uploaded_avatar" : "Benutze diesen Avatar", - "User_added" : "Benutzer <em>__user_added__</em> wurde hinzugefügt.", "User_added_by" : "Benutzer <em>__user_added__</em> hinzugefügt von <em>__user_by__</em>.", "User_Channels" : "Benutzer Kanäle", "User_has_been_activated" : "Benutzer wurde aktiviert", @@ -384,13 +387,13 @@ "User_removed_by" : "Benutzer <em>__user_removed__</em> entfernt von <em>__user_by__</em>.", "User_Settings" : "Benutzereinstellungen", "User_updated_successfully" : "Benutzer erfolgreich aktualisiert", - "Users" : "Benutzer", "Username" : "Benutzername", "Username_cant_be_empty" : "Der Benutzername darf nicht leer sein", "Username_description" : "Der Benutzername wird dazu benutzt Sie in Nachtichten zu markieren.", "Username_invalid" : "<strong>%s</strong> ist kein zulässiger Username.<br/> Benutze nur Buchstaben, Nummern, Punkte oder Bindestriche.", "Username_title" : "Benutzernamen festlegen", "Username_unavaliable" : "<strong>%s</strong> wird schon verwendet :(", + "Users" : "Benutzer", "View_All" : "Alle ansehen", "Wait_activation_warning" : "Bevor Sie sich einloggen können, muss das Konto von einem Administrator manuell aktiviert werden.", "We_have_sent_password_email" : "Wir haben Ihnen eine Anleitung zum Zurücksetzen des Passworts an Ihre Email-Adresse gesendet. Wenn Sie keine Email erhalten haben versuchen Sie es bitte noch einmal.", @@ -398,10 +401,11 @@ "Welcome" : "Willkommen <em>%s</em>.", "Welcome_to_the" : "Willkommen bei", "With_whom" : "Mit wem?", + "Yes_clear_all" : "Ja, alles!", "Yes_delete_it" : "Ja, löschen!", "you_are_in_preview_mode_of" : "Sie sind im Vorschau-Modus des Kanals #<strong>__room_name__</strong>", "You_need_confirm_email" : "Sie müssen Ihre Email bestätigen!", "You_will_not_be_able_to_recover" : "Sie können es nicht wieder rückgängig machen!", "Your_entry_has_been_deleted" : "Ihr Eintrag wurde gelöscht.", "Your_Open_Source_solution" : "Deine eigene Open Source Chat Lösung" -} +} \ No newline at end of file diff --git a/i18n/el.i18n.json b/i18n/el.i18n.json index 786250d24c37803e47a03e13c4ca2f5453736787..d9495ff52764856479343b342b7255dadc0898f8 100644 --- a/i18n/el.i18n.json +++ b/i18n/el.i18n.json @@ -3,6 +3,7 @@ "Access_Online_Demo" : "Δείτε το Online Demo", "Accounts_denyUnverifiedEmail" : "ΆÏνηση ανεπιβεβαίωτου e-mail", "Accounts_EmailVerification" : "Επιβεβαίωση E-mail", + "Accounts_ManuallyApproveNewUsers" : "ΧειÏοκίνητη ÎγκÏιση νÎων χÏηστών", "Accounts_OAuth_Facebook" : "Facebook Login", "Accounts_OAuth_Facebook_id" : "Facebook App Id", "Accounts_OAuth_Facebook_secret" : "Facebook Secret", @@ -18,11 +19,10 @@ "Accounts_OAuth_Meteor" : "Meteor Login", "Accounts_OAuth_Meteor_id" : "Meteor Id", "Accounts_OAuth_Meteor_secret" : "Meteor Secret", - "Accounts_ManuallyApproveNewUsers" : "ΧειÏοκίνητη ÎγκÏιση νÎων χÏηστών", - "Accounts_RegistrationRequired" : "Απαιτείται ΕγγÏαφή", "Accounts_OAuth_Twitter" : "Twitter Login", "Accounts_OAuth_Twitter_id" : "Twitter Id", "Accounts_OAuth_Twitter_secret" : "Twitter Secret", + "Accounts_RegistrationRequired" : "Απαιτείται ΕγγÏαφή", "Add_Members" : "Î ÏοσθÎστε ÎœÎλη", "Add_users" : "Î Ïοσθήκη χÏηστών", "Administration" : "ΔιαχείÏιση", @@ -111,7 +111,7 @@ "Last_message" : "Τελευταίο μήνυμα", "Layout_Home_Body" : "ΑÏχική Σώμα", "Layout_Home_Title" : "ΑÏχική Τίτλος", - "LDAP_Dn" : "LDAP DN", + "LDAP_DN" : "LDAP DN", "LDAP_Port" : "LDAP ΘÏÏα", "LDAP_Url" : "LDAP URL", "Leave_room" : "Έξοδος από το δωμάτιο", @@ -251,7 +251,6 @@ "Use_service_avatar" : "ΧÏήση %s avatar", "Use_this_username" : "ΧÏήση Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… username", "Use_uploaded_avatar" : "ΧÏηση ανεβασμÎνου avatar", - "User_added" : "Ο χÏήστης <em>__user_added__</em> Ï€ÏστÎθηκε.", "User_added_by" : "Ο χÏήστης <em>__user_added__</em> Ï€ÏστÎθηκε από τον <em>__user_by__</em>.", "User_has_been_activated" : "Ο χÏήστης Îχει ενεÏγοποιηθεί", "User_has_been_deactivated" : "Ο χÏήστης Îχει απενεÏγοποιηθεί", diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 7d09638e92eb3e50709fa6f87328e9b49ba02278..eb98ef0d1285470ca663589f7bb5ceffd3ea4db2 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -2,74 +2,118 @@ "Access_online_demo" : "Access the online demo", "Access_Online_Demo" : "Access the Online Demo", "Accounts" : "Accounts", - "Accounts_AllowedDomainsList" : "Comma-separated list of allowed domains", - "Accounts_AllowUsernameChange" : "Allow Username Change", + "Accounts_Description" : "", + "Accounts_AllowedDomainsList" : "Allowed Domains List", + "Accounts_AllowedDomainsList_Description" : "Comma-separated list of allowed domains", "Accounts_AllowPasswordChange" : "Allow Password Change", + "Accounts_AllowPasswordChange_Description" : "", + "Accounts_AllowUserAvatarChange": "Allow User Avatar Change", + "Accounts_AllowUserAvatarChange_Description": "", + "Accounts_AllowUserProfileChange": "Allow User Profile Change", + "Accounts_AllowUserProfileChange_Description": "", + "Accounts_AllowUsernameChange" : "Allow Username Change", + "Accounts_AllowUsernameChange_Description" : "", "Accounts_AvatarResize" : "Resize Avatars", + "Accounts_AvatarResize_Description" : "", "Accounts_AvatarSize" : "Avatar Size", + "Accounts_AvatarSize_Description" : "", "Accounts_AvatarStorePath" : "Avatar Storage Path", + "Accounts_AvatarStorePath_Description" : "", "Accounts_AvatarStoreType" : "Avatar Storage Type", + "Accounts_AvatarStoreType_Description" : "", "Accounts_denyUnverifiedEmail" : "Deny unverified e-mail", "Accounts_EmailVerification" : "E-mail Verification", + "Accounts_EmailVerification_Description" : "", + "Accounts_ManuallyApproveNewUsers" : "Manually Approve New Users", + "Accounts_ManuallyApproveNewUsers_Description" : "", + "Accounts_OAuth_Custom_Authorize_Path" : "Authorize Path", + "Accounts_OAuth_Custom_Button_Color" : "Button Color", + "Accounts_OAuth_Custom_Button_Label_Color" : "Button Text Color", + "Accounts_OAuth_Custom_Button_Label_Text" : "Button Text", + "Accounts_OAuth_Custom_Enable" : "Enable", + "Accounts_OAuth_Custom_id" : "Id", + "Accounts_OAuth_Custom_Identity_Path" : "Identity Path", + "Accounts_OAuth_Custom_Secret" : "Secret", + "Accounts_OAuth_Custom_Token_Path" : "Token Path", + "Accounts_OAuth_Custom_URL" : "URL", "Accounts_OAuth_Facebook" : "Facebook Login", + "Accounts_OAuth_Facebook_Description" : "", "Accounts_OAuth_Facebook_id" : "Facebook App Id", + "Accounts_OAuth_Facebook_id_Description" : "", "Accounts_OAuth_Facebook_secret" : "Facebook Secret", + "Accounts_OAuth_Facebook_secret_Description" : "", "Accounts_OAuth_Github" : "OAuth Enabled", + "Accounts_OAuth_Github_Description" : "", "Accounts_OAuth_Github_id" : "Client Id", + "Accounts_OAuth_Github_id_Description" : "", "Accounts_OAuth_Github_secret" : "Client Secret", + "Accounts_OAuth_Github_secret_Description" : "", "Accounts_OAuth_Gitlab" : "OAuth Enabled", + "Accounts_OAuth_Gitlab_Description" : "", "Accounts_OAuth_Gitlab_id" : "Gitlab Id", + "Accounts_OAuth_Gitlab_id_Description" : "", "Accounts_OAuth_Gitlab_secret" : "Client Secret", + "Accounts_OAuth_Google_secret_Description" : "", "Accounts_OAuth_Google" : "Google Login", + "Accounts_OAuth_Google_Description" : "", "Accounts_OAuth_Google_id" : "Google Id", + "Accounts_OAuth_Google_id_Description" : "", "Accounts_OAuth_Google_secret" : "Google Secret", + "Accounts_OAuth_Gitlab_secret_Description" : "", "Accounts_OAuth_Linkedin" : "LinkedIn Login", + "Accounts_OAuth_Linkedin_Description" : "", "Accounts_OAuth_Linkedin_id" : "LinkedIn Id", + "Accounts_OAuth_Linkedin_id_Description" : "", "Accounts_OAuth_Linkedin_secret" : "LinkedIn Secret", + "Accounts_OAuth_Linkedin_secret_Description" : "", "Accounts_OAuth_Meteor" : "Meteor Login", + "Accounts_OAuth_Meteor_Description" : "", "Accounts_OAuth_Meteor_id" : "Meteor Id", + "Accounts_OAuth_Meteor_id_Description" : "", "Accounts_OAuth_Meteor_secret" : "Meteor Secret", - "Accounts_ManuallyApproveNewUsers" : "Manually Approve New Users", - "Accounts_RegistrationRequired" : "Registration Required", + "Accounts_OAuth_Meteor_secret_Description" : "", "Accounts_OAuth_Twitter" : "Twitter Login", + "Accounts_OAuth_Twitter_Description" : "", "Accounts_OAuth_Twitter_id" : "Twitter Id", + "Accounts_OAuth_Twitter_id_Description" : "", "Accounts_OAuth_Twitter_secret" : "Twitter Secret", - "Accounts_OAuth_Custom_id" : "Id", - "Accounts_OAuth_Custom_URL" : "URL", - "Accounts_OAuth_Custom_Token_Path" : "Token Path", - "Accounts_OAuth_Custom_Identity_Path" : "Identity Path", - "Accounts_OAuth_Custom_Authorize_Path" : "Authorize Path", - "Accounts_OAuth_Custom_Secret" : "Secret", - "Accounts_OAuth_Custom_Enable" : "Enable", - "Accounts_OAuth_Custom_Button_Label_Text" : "Button Text", - "Accounts_OAuth_Custom_Button_Label_Color" : "Button Text Color", - "Accounts_OAuth_Custom_Button_Color" : "Button Color", + "Accounts_OAuth_Twitter_secret_Description" : "", + "Accounts_RegistrationRequired" : "Registration Required", + "Accounts_RegistrationRequired_Description" : "", + "Accounts_RequireNameForSignUp" : "Require Name For Signup", + "Accounts_RequireNameForSignUp_Description" : "", + "Accounts_Enrollment_Email": "Enrollment E-mail", + "Accounts_Enrollment_Email_Description": "You may use [name], [fname], [lname] for the user's full name, first name or last name, respectively.<br />You may use [email] for the user's e-mail.", "Activate" : "Activate", "Add_custom_oauth" : "Add custom oauth", "Add_Members" : "Add Members", "Add_users" : "Add users", "Administration" : "Administration", "All_channels" : "All channels", - "Allow_Invalid_SelfSigned_Certs" : "Allow invalid and Self-Signed SSL certificate's for link validation and previews", - "CDN_PREFIX" : "CDN Prefix", + "Allow_Invalid_SelfSigned_Certs" : "Allow Invalid Self-Signed Certs", + "Allow_Invalid_SelfSigned_Certs_Description" : "Allow invalid and self-signed SSL certificate's for link validation and previews.", "and" : "and", "API" : "API", + "API_Description" : "", "API_Analytics" : "Analytics", + "API_Analytics_Description" : "", "API_Embed" : "Embed", + "API_Embed_Description" : "", "API_EmbedDisabledFor" : "Disable Embed for Users", "API_EmbedDisabledFor_Description" : "Comma-separated list of usernames", + "API_Gitlab_URL_Description" : "", "are_also_typing" : "are also typing", "are_typing" : "are typing", "Are_you_sure" : "Are you sure?", + "Auto_Load_Images" : "Auto Load Images", "Avatar_changed_successfully" : "Avatar changed successfully", - "Avatar_url_invalid_or_error": "The url provided is invalid or not accessible. Please try again, but with a different url.", + "Avatar_url_invalid_or_error" : "The url provided is invalid or not accessible. Please try again, but with a different url.", "away" : "away", "Away" : "Away", "away_female" : "away", "Away_female" : "Away", "away_male" : "away", "Away_male" : "Away", - "Auto_Load_Images" : "Auto Load Images", "Back_to_login" : "Back to login", "bold" : "bold", "busy" : "busy", @@ -79,6 +123,8 @@ "busy_male" : "busy", "Busy_male" : "Busy", "Cancel" : "Cancel", + "CDN_PREFIX" : "CDN Prefix", + "CDN_PREFIX_Description" : "", "Change_avatar" : "Change avatar", "Channels" : "Channels", "Channels_list" : "List of public channels", @@ -97,19 +143,20 @@ "Create_new_private_group" : "Create a new private group", "Create_new_public_channel" : "Create a new public channel", "Created_at" : "Created at", - "Custom_oauth_unique_name" : "Custom oauth unique name", "Custom_oauth_helper" : "When setting up your OAuth Provider, you'll have to inform a Callback URL. Use <pre>%s</pre> .", + "Custom_oauth_unique_name" : "Custom oauth unique name", "days" : "days", "Deactivate" : "Deactivate", - "Delete_User_Warning" : "Deleting a user will delete all messages from that user as well. This cannot be undone.", - "Delete_Room_Warning" : "Deleting a room will delete all messages posted within the room. This cannot be undone.", "Delete" : "Delete", + "Delete_Room_Warning" : "Deleting a room will delete all messages posted within the room. This cannot be undone.", + "Delete_User_Warning" : "Deleting a user will delete all messages from that user as well. This cannot be undone.", "Deleted" : "Deleted!", "Desktop_Notifications" : "Desktop Notifications", "Desktop_Notifications_Disabled" : "Desktop Notifications are Disabled. Change your browser preferences if you need Notifications enabled.", "Desktop_Notifications_Enabled" : "Desktop Notifications are Enabled", "Direct_Messages" : "Direct Messages", "Disable_Favorite_Rooms" : "Disable Favorites", + "Disable_Favorite_Rooms_Description" : "", "Disable_New_Message_Notification" : "Disable New Message Notification", "Disable_New_Room_Notification" : "Disable New Room Notification", "Drop_to_upload_file" : "Drop to upload file", @@ -131,29 +178,34 @@ "False" : "False", "Favorites" : "Favorites", "FileUpload" : "File Upload", + "FileUpload_Description" : "", "FileUpload_Enabled" : "File Uploads Enabled", + "FileUpload_Enabled_Description" : "", "FileUpload_MaxFileSize" : "Maximum File Upload Size (in bytes)", + "FileUpload_MaxFileSize_Description" : "", "FileUpload_MediaTypeWhiteList" : "Accepted Media Types", "FileUpload_MediaTypeWhiteListDescription" : "Comma-separated list of media types", "Follow_social_profiles" : "Follow our social profiles, fork us on github and share your thoughts about the rocket.chat app on our trello board.", "Forgot_password" : "Forgot your password", "Fork_it_on_github" : "Fork it on github", "From_Email" : "From Email", + "From_Email_Description" : "", "General" : "General", + "General_Description" : "", "Get_to_know_the_team" : "Get to know the Rocket.Team", "github_no_public_email" : "You don't have any email as public email in your GitHub account", "Give_a_unique_name_for_the_custom_oauth" : "Give a unique name for the custom oauth", - "Have_your_own_chat" : "Have your own web chat. Developed with Meteor.com, the Rocket.Chat is a great solution for developers looking forward to build and evolve their own chat platform.", "Has_more" : "Has more", + "Have_your_own_chat" : "Have your own web chat. Developed with Meteor.com, the Rocket.Chat is a great solution for developers looking forward to build and evolve their own chat platform.", "Hide_room" : "Hide room", "History" : "History", "hours" : "hours", "Incorrect_Password" : "Incorrect Password", "inline_code" : "inline_code", "Install_FxOs" : "Install Rocket.Chat on your Firefox", - "Install_FxOs_follow_instructions" : "Please confirm the app installation on your device (press \"Install\" when prompted).", "Install_FxOs_done" : "Great! You can now use Rocket.Chat via the icon on your homescreen. Have fun with Rocket.Chat!", "Install_FxOs_error" : "Sorry, that did not work as intended! The following error appeared:", + "Install_FxOs_follow_instructions" : "Please confirm the app installation on your device (press \"Install\" when prompted).", "Invalid_confirm_pass" : "The password confirmation does not match password", "Invalid_email" : "The e-mail entered is invalid", "Invalid_name" : "The name must not be empty", @@ -162,7 +214,9 @@ "invisible" : "invisible", "Invisible" : "Invisible", "Invitation_HTML" : "Invitation HTML", + "Invitation_HTML_Description" : "", "Invitation_Subject" : "Invitation Subject", + "Invitation_Subject_Description" : "", "Invite_Users" : "Invite Users", "is_also_typing" : "is also typing", "is_also_typing_female" : "is also typing", @@ -178,27 +232,42 @@ "Last_login" : "Last login", "Last_message" : "Last message", "Layout" : "Layout", + "Layout_Description" : "", "Layout_Home_Body" : "Home Body", + "Layout_Home_Body_Description" : "", "Layout_Home_Title" : "Home Title", + "Layout_Home_Title_Description" : "", "Layout_Login_Header" : "Login Header", + "Layout_Login_Header_Description" : "", "Layout_Login_Terms" : "Login Terms", + "Layout_Login_Terms_Description" : "", "Layout_Privacy_Policy" : "Privacy Policy", + "Layout_Privacy_Policy_Description" : "", "Layout_Sidenav_Footer" : "Side Navigation Footer", "Layout_Sidenav_Footer_description" : "Footer size is 260 x 70px", "Layout_Terms_of_Service" : "Terms of Service", + "Layout_Terms_of_Service_Description" : "", "LDAP" : "LDAP", "LDAP_Bind_Search" : "Bind Search", - "LDAP_Dn" : "Distinguished Name (DN)", + "LDAP_Bind_Search_Description" : "A piece of JSON that governs bind and connection info and is of the form {\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}", + "LDAP_Description" : "LDAP is a hierarchical database that many companies use to provide single sign on - a facility for sharing one password between multiple sites and services. For advanced configuration information and examples, please consult our wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.", + "LDAP_DN" : "Distinguished Name (DN)", + "LDAP_DN_Description" : "Search root; example: dc=domain,dc=com", "LDAP_Enable" : "Enable LDAP", + "LDAP_Enable_Description" : "Attempt to utilize LDAP for authentication.", "LDAP_Port" : "LDAP Port", - "LDAP_Sync_User_Data" : "Keep user data in sync with server", - "LDAP_Sync_User_Data_FieldMap" : "User data field map", + "LDAP_Port_Description" : "Port to access LDAP on; eg: 389", + "LDAP_Sync_User_Data" : "Sync Data", + "LDAP_Sync_User_Data_Description" : "Keep user data in sync with server on login (eg: name, email).", + "LDAP_Sync_User_Data_FieldMap" : "User Data Field Map", + "LDAP_Sync_User_Data_FieldMap_Description" : "Configure how user account fields (like email) are populated from a record in LDAP (once found). As an example, {\"cn\":\"name\", \"mail\":\"email\"} will choose a person's human readable name from the cn attribute, and their email from the mail attribute. Available fields include name, and email.", "LDAP_Url" : "LDAP URL", + "LDAP_Url_Description" : "URL of the LDAP server; example: ldap://company.dns.com", "Leave_room" : "Leave room", "line" : "line", "Load_more" : "Load more", - "Loading_more_from_history" : "Loading more from history", "Loading..." : "Loading...", + "Loading_more_from_history" : "Loading more from history", "Loading_suggestion" : "Loading suggestions...", "Login" : "Login", "Login_with" : "Login with %s", @@ -207,34 +276,50 @@ "Make_Admin" : "Make Admin", "Mark_as_read" : "Mark as read", "Markdown_Headers" : "Markdown Headers", + "Markdown_Headers_Description" : "", "Members" : "Members", "Members_List" : "Members List", "Members_placeholder" : "Members", "Message" : "Message", + "Message_Description" : "", "Message_AllowDeleting" : "Allow Message Deleting", + "Message_AllowDeleting_Description" : "", "Message_AllowEditing" : "Allow Message Editing", + "Message_AllowEditing_Description" : "", "Message_AllowEditing_BlockEditInMinutes" : "Block Message Editing After (n) Minutes", - "Message_AllowEditing_BlockEditInMinutesDescription" : "Enter 0 to disable blocking", + "Message_AllowEditing_BlockEditInMinutesDescription" : "Enter 0 to disable blocking.", + "Message_AllowPinning" : "Allow Message Pinning", "Message_AudioRecorderEnabled" : "Audio Recorder Enabled", + "Message_AudioRecorderEnabledDescription" : "Requires 'audio/wav' files to be an accepted media type within 'File Upload' settings.", "Message_deleting_not_allowed" : "Message deleting not allowed", - "Message_editing_not_allowed" : "Message editing not allowed", "Message_editing_blocked" : "This message cannot be edited anymore", + "Message_editing_not_allowed" : "Message editing not allowed", + "Message_KeepHistory" : "Keep Message History", + "Message_KeepHistory_Description" : "", "Message_MaxAllowedSize" : "Maximum Allowed Message Size", + "Message_MaxAllowedSize_Description" : "", + "Message_pinned" : "Message pinned", "Message_pinning_not_allowed" : "Message pinning not allowed", - "Message_AllowPinning" : "Allow Message Pinning", - "Message_KeepHistory" : "Keep Message History", "Message_removed" : "Message removed", - "Message_pinned" : "Message pinned", "Message_ShowDeletedStatus" : "Show Deleted Status", + "Message_ShowDeletedStatus_Description" : "", "Message_ShowEditedStatus" : "Show Edited Status", + "Message_ShowEditedStatus_Description" : "", "Message_ShowFormattingTips" : "Show Formatting Tips", + "Message_ShowFormattingTips_Description" : "", "Messages" : "Messages", "Meta" : "Meta", + "Meta_Description" : "", "Meta_fb_app_id" : "Facebook App Id", + "Meta_fb_app_id_Description" : "", "Meta_google-site-verification" : "Google Site Verification", + "Meta_google-site-verification_Description" : "", "Meta_language" : "Language", + "Meta_language_Description" : "", "Meta_msvalidate01" : "MSValidate.01", + "Meta_msvalidate01_Description" : "", "Meta_robots" : "Robots", + "Meta_robots_Description" : "", "minutes" : "minutes", "More_channels" : "More channels", "More_groups" : "More private groups", @@ -245,36 +330,37 @@ "n_messages" : "%s messages", "Name" : "Name", "Name_cant_be_empty" : "Name can't be empty", + "Name_optional" : "Name (optional)", "New_messages" : "New messages", "New_password" : "New password", + "No_channel_with_name_%s_was_found" : "No channel with name <strong>\"%s\"</strong> was found!", "No_channels_yet" : "You aren't part of any channel yet.", "No_direct_messages_yet" : "You haven't started any conversations yet.", "No_favorites_yet" : "You haven't added any favorites yet.", + "No_group_with_name_%s_was_found" : "No private group with name <strong>\"%s\"</strong> was found!", "No_groups_yet" : "You have no private groups yet.", "No_permission_to_view_room" : "You don't have permission to view this room", - "No_channel_with_name_%s_was_found" : "No channel with name <strong>\"%s\"</strong> was found!", - "No_group_with_name_%s_was_found" : "No private group with name <strong>\"%s\"</strong> was found!", "No_user_with_username_%s_was_found" : "No user with username <strong>\"%s\"</strong> was found!", "Not_allowed" : "Not allowed", "Not_found_or_not_allowed" : "Not Found or Not Allowed", "Nothing_found" : "Nothing found", "Notify_all_in_this_room" : "Notify all in this room", - "Old_Password" : "Old Password", "Old_and_new_password_required" : "You need to provide both old and new password for changing your password.", - "Only_you_can_see_this_message" : "Only you can see this message", + "Old_Password" : "Old Password", "Online" : "Online", + "Only_you_can_see_this_message" : "Only you can see this message", "Oops!" : "Oops", "Opt_out_statistics" : "Don't send my statistics to Rocket.Chat", "Opt_out_statistics_warning" : "By sending your statistics, you'll help us identify how many instances of Rocket.Chat are deployed, as well as how good the system is behaving, so we can further improve it. Don't worry, as no user information is sent and all the information we receive is kept confidential. If you want to continue sending us your statistics, uncheck the above checkbox. Thank you.", "others" : "others", "Password" : "Password", - "Password_changed_successfully" : "Password changed successfully", "Password_Change_Disabled" : "Your Rocket.Chat administrator has disabled the changing of passwords", + "Password_changed_successfully" : "Password changed successfully", "People" : "People", + "Please_enter_value_for_url" : "Please enter a value for the url of your avatar.", "Please_wait" : "Please wait", "Please_wait_activation" : "Please wait, this can take some time.", "Please_wait_statistics" : "Please wait, statistics are being generated.", - "Please_enter_value_for_url": "Please enter a value for the url of your avatar.", "Powered_by" : "Powered by", "Preferences" : "Preferences", "Preferences_saved" : "Preferences saved", @@ -285,17 +371,29 @@ "Profile_saved_successfully" : "Profile saved successfully", "Proudly_developed" : "Proudly developed with Meteor", "Push" : "Push", + "Push_Description" : "", "Push_apn_cert" : "APN Cert", + "Push_apn_cert_Description" : "", "Push_apn_dev_cert" : "APN Dev Cert", + "Push_apn_dev_cert_Description" : "", "Push_apn_dev_key" : "APN Dev Key", + "Push_apn_dev_key_Description" : "", "Push_apn_dev_passphrase" : "APN Dev Passphrase", + "Push_apn_dev_passphrase_Description" : "", "Push_apn_key" : "APN Key", + "Push_apn_key_Description" : "", "Push_apn_passphrase" : "APN Passphrase", + "Push_apn_passphrase_Description" : "", "Push_debug" : "Debug", + "Push_debug_Description" : "", "Push_enable" : "Enable", + "Push_enable_Description" : "", "Push_gcm_api_key" : "GCM API Key", + "Push_gcm_api_key_Description" : "", "Push_gcm_project_number" : "GCM Project Number", + "Push_gcm_project_number_Description" : "", "Push_production" : "Production", + "Push_production_Description" : "", "Quick_Search" : "Quick Search", "quote" : "quote", "Recents" : "Recents", @@ -304,8 +402,8 @@ "Registration_Succeeded" : "Registration Succeeded", "Remember_me" : "Remember me", "Remove" : "Remove", - "Remove_custom_oauth" : "Remove custom oauth", "Remove_Admin" : "Remove Admin", + "Remove_custom_oauth" : "Remove custom oauth", "Reset_password" : "Reset password", "Room" : "Room", "Room_name_changed" : "Room name changed to: <em>__room_name__</em> by <em>__user_by__</em>", @@ -315,6 +413,23 @@ "Room_uploaded_file_list_empty" : "No files available.", "room_user_count" : "%s users", "Rooms" : "Rooms", + "S_new_messages_since_s" : "%s new messages since %s", + "SAML" : "SAML", + "SAML_Description" : "", + "SAML_Custom_default_button_color_Description" : "", + "SAML_Custom_default_button_label_color_Description" : "", + "SAML_Custom_default_button_label_text_Description" : "", + "SAML_Custom_default_Description" : "", + "SAML_Custom_Cert" : "Custom Certificate", + "SAML_Custom_default_cert_Description" : "", + "SAML_Custom_Entry_point" : "Custom Entry Point", + "SAML_Custom_default_entry_point_Description" : "", + "SAML_Custom_Generate_Username" : "Generate Username", + "SAML_Custom_default_generate_username_Description" : "", + "SAML_Custom_Issuer" : "Custom Issuer", + "SAML_Custom_default_issuer_Description" : "", + "SAML_Custom_Provider" : "Custom Provider", + "SAML_Custom_default_provider_Description" : "", "Save" : "Save", "Save_changes" : "Save changes", "Save_Mobile_Bandwidth" : "Save Mobile Bandwidth", @@ -343,28 +458,28 @@ "Silence" : "Silence", "since_creation" : "since %s", "Site_Name" : "Site Name", + "Site_Name_Description" : "", "Site_Url" : "Site URL", "Site_Url_Description" : "Example: https://chat.domain.com/", - "SAML" : "SAML", - "SAML_Custom_Cert" : "Custom Certificate", - "SAML_Custom_Entry_point" : "Custom Entry Point", - "SAML_Custom_Generate_Username" : "Generate Username", - "SAML_Custom_Issuer" : "Custom Issuer", - "SAML_Custom_Provider" : "Custom Provider", "SMTP" : "SMTP", + "SMTP_Description" : "", "SMTP_Host" : "SMTP Host", + "SMTP_Host_Description" : "", "SMTP_Password" : "SMTP Password", + "SMTP_Password_Description" : "", "SMTP_Port" : "SMTP Port", + "SMTP_Port_Description" : "", "SMTP_Username" : "SMTP Username", + "SMTP_Username_Description" : "", "Sound" : "Sound", "Start_of_conversation" : "Start of conversation", "Statistics" : "Statistics", "Stats_Active_Users" : "Active Users", "Stats_Avg_Channel_Users" : "Average Channel Users", "Stats_Avg_Private_Group_Users" : "Average Private Group Users", + "Stats_Away_Users" : "Away Users", "Stats_Max_Room_Users" : "Max Rooms Users", "Stats_Non_Active_Users" : "Inactive Users", - "Stats_Away_Users" : "Away Users", "Stats_Offline_Users" : "Offline Users", "Stats_Online_Users" : "Online Users", "Stats_OS_Arch" : "OS Arch", @@ -385,10 +500,11 @@ "Stop_Recording" : "Stop Recording", "strike" : "strike", "Submit" : "Submit", - "S_new_messages_since_s" : "%s new messages since %s", "The_field_is_required" : "The field %s is required.", "True" : "True", "Unnamed" : "Unnamed", + "Unread_Rooms" : "Unread Rooms", + "Unread_Rooms_Mode" : "Unread Rooms Mode", "Upload_file_question" : "Upload file?", "Use_Emojis" : "Use Emojis", "Use_initials_avatar" : "Use your username initials", @@ -396,12 +512,10 @@ "Use_service_avatar" : "Use %s avatar", "Use_this_username" : "Use this username", "Use_uploaded_avatar" : "Use uploaded avatar", - "Use_url_for_avatar": "Use url for avatar", - "User_added" : "User <em>__user_added__</em> added.", + "Use_url_for_avatar" : "Use url for avatar", "User_added_by" : "User <em>__user_added__</em> added by <em>__user_by__</em>.", "User_Channels" : "User Channels", "User_has_been_activated" : "User has been activated", - "Username_Change_Disabled" : "Your Rocket.Chat administrator has disabled the changing of usernames", "User_has_been_deactivated" : "User has been deactivated", "User_has_been_deleted" : "User has been deleted", "User_Info" : "User Info", @@ -419,13 +533,14 @@ "User_removed_by" : "User <em>__user_removed__</em> removed by <em>__user_by__</em>.", "User_Settings" : "User Settings", "User_updated_successfully" : "User updated successfully", - "Users" : "Users", "Username" : "Username", "Username_cant_be_empty" : "The username cannot be empty", + "Username_Change_Disabled" : "Your Rocket.Chat administrator has disabled the changing of usernames", "Username_description" : "The username is used to allow others to mention you in messages.", "Username_invalid" : "<strong>%s</strong> is not a valid username,<br/> use only letters, numbers, dots and dashes", "Username_title" : "Register username", "Username_unavaliable" : "<strong>%s</strong> is already in use :(", + "Users" : "Users", "View_All" : "View All", "Wait_activation_warning" : "Before you can login, your account must be manually activated by an administrator.", "We_have_sent_password_email" : "We have sent you an e-mail with password reset instructions. If you do not receive an e-mail shortly, please come back and try again.", @@ -433,8 +548,8 @@ "Welcome" : "Welcome <em>%s</em>.", "Welcome_to_the" : "Welcome to the", "With_whom" : "With whom", - "Yes_delete_it" : "Yes, delete it!", "Yes_clear_all" : "Yes, clear all!", + "Yes_delete_it" : "Yes, delete it!", "you_are_in_preview_mode_of" : "You are in preview mode of channel #<strong>__room_name__</strong>", "You_need_confirm_email" : "You need to confirm your email to login!", "You_will_not_be_able_to_recover" : "You will not be able to recover this message!", diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json index 7ddc9011322f0d61fa23300bdc089d0d84c0d46f..d9c22cd7cfb23f6ab3c5848cccec7f286544a48b 100644 --- a/i18n/es.i18n.json +++ b/i18n/es.i18n.json @@ -1,6 +1,7 @@ { "Access_online_demo" : "Accede a la demo en lÃnea", "Access_Online_Demo" : "Accede a la demo online", + "Add_Members" : "Agregar miembros", "Add_users" : "Añadir usuarios", "All_channels" : "Todos los canales", "and" : "y", @@ -10,6 +11,7 @@ "away" : "lejos", "Away" : "Lejos", "Back_to_login" : "Volver a identificarse", + "bold" : "negrita", "busy" : "ocupado", "Busy" : "Ocupado", "Cancel" : "Cancelar", @@ -23,15 +25,17 @@ "Contact" : "Contacto", "Conversation" : "Conversación", "Create_new" : "Crear nuevo", + "Create_new_direct_message_room" : "Crear una sala de mensajes directos", "Create_new_private_group" : "Crear un nuevo grupo privado", "Create_new_public_channel" : "Crear un nuevo canal público", "Created_at" : "Creado en", + "Deleted" : "¡Eliminar!", "Direct_Messages" : "Mensajes Directos", "edited" : "Editado", "Email_or_username" : "Correo electrónico o nombre de usuario", "Email_verified" : "Correo electrónico verificado", "Enter_info" : "Introduce tus datos de acceso", - "Error_changing_password" : "Contraseña cambiada", + "Error_changing_password" : "Error al cambiar de contraseña", "Favorites" : "Favoritas", "Follow_social_profiles" : "Sigue nuestros perfiles sociales, realiza un fork en github y comparte tus pensamientos acerca de la aplicación rocket.chat en nuestro tablero de Trello.", "Forgot_password" : "Olvidaste tu contraseña", @@ -50,6 +54,8 @@ "Invisible" : "Invisible", "is_also_typing" : "está también escribiendo", "is_typing" : "está escribiendo", + "italics" : "cursiva", + "join" : "Unirse", "Join_the_Community" : "Únete a la Comunidad", "Language" : "Idioma", "Language_Version" : "Versión en Inglés", @@ -68,6 +74,7 @@ "Msgs" : "Mensajes", "n_messages" : "%s mensajes", "Name" : "Nombre", + "Name_optional" : "Nombre (opcional)", "New_messages" : "Nuevos mensajes", "New_password" : "Nueva contraseña", "No_channels_yet" : "TodavÃa no eres parte de un canal.", @@ -87,6 +94,7 @@ "Private_Groups" : "Grupos Privados", "Proudly_developed" : "Orgullosamente desarrollado con Meteor", "Quick_Search" : "Búsqueda rápida", + "quote" : "cita", "Recents" : "Recientes", "Register" : "Registrar una nueva cuenta", "Remember_me" : "Recuérdame", @@ -117,8 +125,8 @@ "Use_service_avatar" : "Usar %s avatar", "Use_this_username" : "Usar este nombre de usuario", "Use_uploaded_avatar" : "Utilizar avatar subido", - "User_added" : "Usuario <em>__user_added__</em> añadido.", "User_added_by" : "El usuario <em>__user_added__</em> ha sido añadido por <em>__user_by__</em>.", + "User_joined_channel" : "Se ha unido al canal.", "User_left" : "Usuario <em>__user_left__</em> ha salido.", "User_logged_out" : "El usuario está desconectado", "User_removed_by" : "El usuario <em>__user_removed__</em> ha sido eliminado por <em>__user_by__</em>.", @@ -134,6 +142,8 @@ "Welcome" : "Bienvenido <em>%s</em>.", "Welcome_to_the" : "Bienvenido a la", "With_whom" : "Con quien", + "Yes_delete_it" : "¡SÃ, eliminarla!", + "you_are_in_preview_mode_of" : "Estás en modo vista previa del canal #<strong>__room_name__</strong>", "You_need_confirm_email" : "¡Es necesario confirmar tu correo electrónico para poder identificarte!", "Your_Open_Source_solution" : "Tu propia solución de chat de código abierto" } \ No newline at end of file diff --git a/i18n/fa.i18n.json b/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..ff270db49a1df7678a9a9dfd83b245959db6c997 --- /dev/null +++ b/i18n/fa.i18n.json @@ -0,0 +1,3 @@ +{ + "Accounts" : "Øساب ها" +} \ No newline at end of file diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json index 62795415271a76737b6928f0a207efca3a8bb7db..f72c176ffe40b3cebdabf3c326ecfad922516fb3 100644 --- a/i18n/fi.i18n.json +++ b/i18n/fi.i18n.json @@ -1,39 +1,50 @@ { "Access_online_demo" : "Access the online demo", "Access_Online_Demo" : "Access the Online Demo", - "Accounts" : "Tilit", + "Accounts" : "Käyttäjätilit", + "Accounts_AllowedDomainsList" : "Pilkkueroteltu lista sallituista domaineista", + "Accounts_AllowPasswordChange" : "Salli salasanan vaihto", + "Accounts_AllowUsernameChange" : "Salli käyttäjätunnuksen muuttaminen", + "Accounts_AvatarResize" : "Muuta avatarien kokoa", + "Accounts_AvatarSize" : "Avatarin koko", + "Accounts_AvatarStorePath" : "Avatarin tallennuspolku", + "Accounts_AvatarStoreType" : "Avatarien tallennusmuoto", "Accounts_denyUnverifiedEmail" : "Estä vahvistamaton sähköpostiosoite", "Accounts_EmailVerification" : "Sähköpostiosoitteen varmistaminen", + "Accounts_ManuallyApproveNewUsers" : "Hyväksy uudet käyttäjät manuaalisesti", + "Accounts_OAuth_Custom_Authorize_Path" : "Auktorisointipolku", + "Accounts_OAuth_Custom_Button_Color" : "Painikkeen väri", + "Accounts_OAuth_Custom_Button_Label_Color" : "Painikkeen tekstin väri", + "Accounts_OAuth_Custom_Button_Label_Text" : "Painikkeen teksti", + "Accounts_OAuth_Custom_Enable" : "Kytke päälle", + "Accounts_OAuth_Custom_id" : "Id", + "Accounts_OAuth_Custom_Identity_Path" : "Identity polku", + "Accounts_OAuth_Custom_Secret" : "Secret", + "Accounts_OAuth_Custom_Token_Path" : "Token polku", + "Accounts_OAuth_Custom_URL" : "URL", "Accounts_OAuth_Facebook" : "Facebook-tunnus", "Accounts_OAuth_Facebook_id" : "Facebook App Id", - "Accounts_OAuth_Facebook_secret" : "Facebook salalauseke", - "Accounts_OAuth_Github" : "GitHub-tunnus", - "Accounts_OAuth_Github_id" : "GitHub ID", - "Accounts_OAuth_Github_secret" : "GitHub salalauseke", + "Accounts_OAuth_Facebook_secret" : "Facebook Secret", + "Accounts_OAuth_Github" : "OAuth Käytössä", + "Accounts_OAuth_Github_id" : "Client ID", + "Accounts_OAuth_Github_secret" : "Client Secret", + "Accounts_OAuth_Gitlab" : "OAuth käytössä", + "Accounts_OAuth_Gitlab_id" : "Gitlab Id", + "Accounts_OAuth_Gitlab_secret" : "Client Secret", "Accounts_OAuth_Google" : "Google-tunnus", "Accounts_OAuth_Google_id" : "Google ID", - "Accounts_OAuth_Google_secret" : "Google salalauseke", + "Accounts_OAuth_Google_secret" : "Google Secret", "Accounts_OAuth_Linkedin" : "LinkedIn-tunnus", "Accounts_OAuth_Linkedin_id" : "LinkedIn ID", - "Accounts_OAuth_Linkedin_secret" : "LinkedIn salalauseke", + "Accounts_OAuth_Linkedin_secret" : "LinkedIn Secret", "Accounts_OAuth_Meteor" : "Meteor-tunnus", "Accounts_OAuth_Meteor_id" : "Meteor ID", - "Accounts_OAuth_Meteor_secret" : "Meteor salalauseke", - "Accounts_ManuallyApproveNewUsers" : "Hyväksy uudet käyttäjät manuaalisesti", - "Accounts_RegistrationRequired" : "Rekisteröinti vaaditaan", + "Accounts_OAuth_Meteor_secret" : "Meteor Secret", "Accounts_OAuth_Twitter" : "Twitter-tunnus", "Accounts_OAuth_Twitter_id" : "Twitter ID", - "Accounts_OAuth_Twitter_secret" : "Twitter salalauseke", - "Accounts_OAuth_Custom_id" : "Id", - "Accounts_OAuth_Custom_URL" : "URL", - "Accounts_OAuth_Custom_Token_Path" : "Token polku", - "Accounts_OAuth_Custom_Identity_Path" : "Identity polku", - "Accounts_OAuth_Custom_Authorize_Path" : "Auktorisointipolku", - "Accounts_OAuth_Custom_Secret" : "Secret", - "Accounts_OAuth_Custom_Enable" : "Kytke päälle", - "Accounts_OAuth_Custom_Button_Label_Text" : "Painikkeen teksti", - "Accounts_OAuth_Custom_Button_Label_Color" : "Painikkeen tekstin väri", - "Accounts_OAuth_Custom_Button_Color" : "Painikkeen väri", + "Accounts_OAuth_Twitter_secret" : "Twitter Secret", + "Accounts_RegistrationRequired" : "Rekisteröinti vaaditaan", + "Accounts_RequireNameForSignUp" : "Vaadi nimi rekisteröityessä", "Activate" : "Aktivoi", "Add_custom_oauth" : "Lisää mukautettu oauth", "Add_Members" : "Lisää osallistujia", @@ -45,17 +56,20 @@ "API" : "API", "API_Analytics" : "Analytics", "API_Embed" : "Upota", + "API_EmbedDisabledFor" : "Poista upotustoiminto käyttäjiltä", + "API_EmbedDisabledFor_Description" : "Pilkkueroteltu lista käyttäjätunnuksista", "are_also_typing" : "kirjoittavat myös", "are_typing" : "kirjoittavat", "Are_you_sure" : "Oletko varma?", + "Auto_Load_Images" : "Lataa kuvat automaattisesti\n", "Avatar_changed_successfully" : "Avatar vaihdettu onnistuneesti", + "Avatar_url_invalid_or_error" : "URL on virheellinen tai ei ole käytettävissä. Yritä uudestaan.", "away" : "poissa", "Away" : "Poissa", "away_female" : "poissa", "Away_female" : "Poissa", "away_male" : "poissa", "Away_male" : "Poissa", - "Auto_Load_Images" : "Lataa kuvat automaattisesti\n", "Back_to_login" : "Takaisin kirjautumiseen", "bold" : "lihavoitu", "busy" : "varattu", @@ -65,13 +79,16 @@ "busy_male" : "varattu", "Busy_male" : "Varattu", "Cancel" : "Peruuta", + "CDN_PREFIX" : "CDN etuliite", "Change_avatar" : "Vaihda avatar", "Channels" : "Kanavat", "Channels_list" : "Julkiset kanavat", "Chat_Rooms" : "Chathuoneet", + "Clear_all_unreads_question" : "Tyhjennä kaikki lukemattomat?", "close" : "sulje", "coming_soon" : "tulossa", "Commands" : "Komennot", + "Compact_View" : "Suppea näkymä", "Confirm_password" : "Vahvista salasanasi", "Contact" : "Yhteys", "Conversation" : "Keskustelu", @@ -81,15 +98,19 @@ "Create_new_private_group" : "Luo uusi privaattiryhmä", "Create_new_public_channel" : "Luo uusi julkinen kanava", "Created_at" : "Luotu", + "Custom_oauth_helper" : "Kun perustat OAuth Providerin, sinun täytyy ilmoittaa Callback URL. Käytä <pre>%s</pre>.", "Custom_oauth_unique_name" : "Mukautettu oauth yksilöllinen nimi", - "Custom_oauth_helper" : "Kun perustat OAuth Provider, sinun täytyy ilmoittaa Callback URL. Käytä <pre>%s</pre>.", "days" : "päivää", "Deactivate" : "Deaktivoi", - "Delete_User_Warning" : "Käyttäjän poistaminen poistaa myös käyttäjän kaikki viestit. Toimintoa ei voi perua.", "Delete" : "Poista", + "Delete_Room_Warning" : "Huomeen poistaminen poistaa kaikki huoneessa olevat viestit.\nToimintoa ei voi perua.", + "Delete_User_Warning" : "Käyttäjän poistaminen poistaa myös käyttäjän kaikki viestit. Toimintoa ei voi perua.", "Deleted" : "Poistettu!", + "Desktop_Notifications" : "Työpöytäilmoituksia", + "Desktop_Notifications_Disabled" : "Työpöytäilmoitukset eivät ole käytössä. Muuta selaimen asetuksia mikäli haluat ilmoitukset käyttöön.", + "Desktop_Notifications_Enabled" : "Työpöytäilmoitukset ovat käytössä.", "Direct_Messages" : "Yksityisviestit", - "Disable_Favorite_Rooms" : "Poista käytöstä suosikit", + "Disable_Favorite_Rooms" : "Poista Suosikit käytöstä", "Disable_New_Message_Notification" : "Poista uuden viestin ilmoitus käytöstä", "Disable_New_Room_Notification" : "Poista uuden huoneen ilmoitus käytöstä", "Drop_to_upload_file" : "Vedä ja pudota lähettääksesi tiedoston", @@ -102,27 +123,38 @@ "Email_or_username" : "Sähköpostiosoite tai käyttäjänimi", "Email_verified" : "Sähköpostiosoite vahvistettu", "Emoji" : "Emoji", + "Enable_Desktop_Notifications" : "Ota työpöytäilmoitukset käyttöön", "Enter_info" : "Syötä kirjautumistietosi", "Enter_to" : "Astu sisään", "Error_changing_password" : "Virhe vaihtaessa salasanaa", + "Error_too_many_requests" : "Virhe, liikaa pyyntöjä. Rauhoitu hieman.\nOdota %s sekuntia ennen uudelleenyritystä.", "Esc_to" : "Poistu", "False" : "Ei", "Favorites" : "Suosikit", + "FileUpload" : "Lähetä tiedosto", + "FileUpload_Enabled" : "Tiedostojen lähetykset käytössä", + "FileUpload_MaxFileSize" : "Suurin lähetettävän tiedoston koko (tavuina)", + "FileUpload_MediaTypeWhiteList" : "Hyväksytyt mediatyypit", + "FileUpload_MediaTypeWhiteListDescription" : "Pilkkueroteltu lista mediatyypeistä", "Follow_social_profiles" : "Seuraa someamme, forkkaa Githubissa ja jaa ajatuksiasi rocket.chatista trellossa.", "Forgot_password" : "Unohditko salasanasi?", "Fork_it_on_github" : "Forkkaa GitHubissa", - "From_Email" : "Sähköpostilta", + "From_Email" : "Sähköpostin lähettäjä", "General" : "Yleinen", "Get_to_know_the_team" : "Tutustu Rocket.Teamiin", "github_no_public_email" : "GitHub-tunnukseltasi ei löydy julkisia sähköpostiosoitetietoja", "Give_a_unique_name_for_the_custom_oauth" : "Anna yksilöllinen nimi mukautettua oauth varten", - "Have_your_own_chat" : "Have your own web chat. Developed with Meteor.com, the Rocket.Chat is a great solution for developers looking forward to build and evolve their own chat platform.", "Has_more" : "Löytyy lisää", + "Have_your_own_chat" : "Have your own web chat. Developed with Meteor.com, the Rocket.Chat is a great solution for developers looking forward to build and evolve their own chat platform.", "Hide_room" : "Piilota kanava", "History" : "Historia", "hours" : "tuntia", "Incorrect_Password" : "Väärä salasana", "inline_code" : "koodi", + "Install_FxOs" : "Asenna Rocket.Chat Firefoxiisi", + "Install_FxOs_done" : "Hienoa! Voit käyttää nyt Rocket.Chatiä etusivulla olevan kuvakkeen kautta. Pidä kivaa!", + "Install_FxOs_error" : "Pahoittelut, asennus ei onnistunut, seuraava virhe ilmeni:", + "Install_FxOs_follow_instructions" : "Vahvista sovelluksen asennus laitteellasi (paina \"Install\" käskettäessä)", "Invalid_confirm_pass" : "Salasanat eivät täsmää", "Invalid_email" : "Annettu sähköpostiosoite ei ole oikea", "Invalid_name" : "Nimi ei voi olla tyhjä", @@ -131,7 +163,7 @@ "invisible" : "näkymätön", "Invisible" : "Näkymätön", "Invitation_HTML" : "Kutsu HTML", - "Invitation_Subject" : "Kutsu aihe", + "Invitation_Subject" : "Kutsun aihe", "Invite_Users" : "Kutsu käyttäjiä", "is_also_typing" : "kirjoittaa myös", "is_also_typing_female" : "kirjoittaa myös", @@ -146,7 +178,7 @@ "Language_Version" : "Suomi", "Last_login" : "Viimeisin kirjautuminen", "Last_message" : "Viimeinen viesti", - "Layout" : "Layout", + "Layout" : "Ulkoasu", "Layout_Home_Body" : "Etusivun runko", "Layout_Home_Title" : "Etusivun otsikko", "Layout_Login_Header" : "Kirjautumisruudun ylätunniste", @@ -156,14 +188,26 @@ "Layout_Sidenav_Footer_description" : "Alatunnisteen koko on 260x70", "Layout_Terms_of_Service" : "Käyttöehdot", "LDAP" : "LDAP", - "LDAP_Dn" : "LDAP DN", + "LDAP_Bind_Search" : "Bind haku", + "LDAP_Bind_Search_Description" : "JSON, joka määrää yhdistämistiedot.\nMuoto: {\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}", + "LDAP_Description" : "LDAP on laajasti käytössä oleva hierarkinen tietokantapalvelu, jolla organisaatioiden palveluille mahdollistetaan kertakirjautuminen (SSO).\nMääritystiedot ja esimerkit, katso wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication", + "LDAP_DN" : "LDAP DN", + "LDAP_DN_Description" : "Etsintäpolku, esimerkiksi: dc = domain, dc = com", + "LDAP_Enable" : "Kytke LDAP päälle", + "LDAP_Enable_Description" : "Käytä LDAPia autentikointiin", "LDAP_Port" : "LDAP portti", + "LDAP_Port_Description" : "LDAP-portti (esim 389)", + "LDAP_Sync_User_Data" : "Synkronoi käyttäjädata", + "LDAP_Sync_User_Data_Description" : "Pidä käyttäjädata synkronoituna palvelimelta kirjautumishetkellä (esim nimi, sähköposti)", + "LDAP_Sync_User_Data_FieldMap" : "Käyttäjätietojen kohdistus", + "LDAP_Sync_User_Data_FieldMap_Description" : "Määrittää, miten käyttäjätietojen kentät tuodaan LDAP-palvelimelta.\nEsimerkiksi, {\"cn\":\"name\", \"mail\":\"email\"} -määritys tuo käyttäjän nimen cn-tiedosta ja sähköpostin email-tiedosta. Käytettävissä olevat kentät ovat \"name\" ja \"email\".", "LDAP_Url" : "LDAP URL", + "LDAP_Url_Description" : "LDAP-palvelimen URI, esimerkiksi: ldap://company.example.com", "Leave_room" : "Poistu kanavalta", - "line" : "viiva", + "line" : "riviä", "Load_more" : "Lataa lisää", - "Loading_more_from_history" : "Ladataan lisää historiasta", "Loading..." : "Ladataan...", + "Loading_more_from_history" : "Ladataan lisää historiasta", "Loading_suggestion" : "Ladataan ehdotuksia...", "Login" : "Kirjaudu", "Login_with" : "Kirjaudu käyttäen %s", @@ -171,65 +215,74 @@ "Logout" : "Kirjaudu ulos", "Make_Admin" : "Tee ylläpitäjäksi", "Mark_as_read" : "Merkitse luetuksi", + "Markdown_Headers" : "Markdown otsikot", "Members" : "Jäsenet", "Members_List" : "Jäsenlista", "Members_placeholder" : "Jäsenet", - "Message" : "Viesti", + "Message" : "Viestit", "Message_AllowDeleting" : "Salli viestin poisto", "Message_AllowEditing" : "Salli viestin muokkaus", - "Message_AllowEditing_BlockEditInMinutes" : "Estä viestin muokkaus jälkeen (minuuteissa - 0 poistaa käytöstä)", + "Message_AllowEditing_BlockEditInMinutes" : "Estä viestin muokkaus (x) minuutin jälkeen", + "Message_AllowEditing_BlockEditInMinutesDescription" : "Syötä 0 poistaaksesi muutoseston", + "Message_AllowPinning" : "Salli viestien kiinnittäminen", + "Message_AudioRecorderEnabled" : "Äänentallennin käytössä", + "Message_AudioRecorderEnabledDescription" : "Jotta tämä toimisi, WAV-tiedostojen lähetys tulee olla sallittu", "Message_deleting_not_allowed" : "Viestin poisto ei sallittu", - "Message_editing_not_allowed" : "Viestin muokkaus ei sallittu", "Message_editing_blocked" : "Tätä viestiä ei voi muokata enää.", + "Message_editing_not_allowed" : "Viestin muokkaus ei sallittu", + "Message_KeepHistory" : "Säilytä viestihistoria", "Message_MaxAllowedSize" : "Viestin suurin sallittu koko", + "Message_pinned" : "Viesti kiinnitetty", "Message_pinning_not_allowed" : "Viestien kiinnittäminen ei sallittu", - "Message_AllowPinning" : "Salli viestien kiinnittäminen", - "Message_KeepHistory" : "Säilytä viestihistoria", "Message_removed" : "Viesti poistettu\n", - "Message_pinned" : "Viesti kiinnitetty", "Message_ShowDeletedStatus" : "Näytä poistotila", "Message_ShowEditedStatus" : "Näytä muokkaustila", + "Message_ShowFormattingTips" : "Näytä muotoiluvihjeet", + "Messages" : "Viestit", "Meta" : "Meta", "Meta_fb_app_id" : "Facebook APP ID", - "Meta_google-site-verification" : "Google sivuston vahvistaminen", + "Meta_google-site-verification" : "Google Site Verification", "Meta_language" : "Kieli", "Meta_msvalidate01" : "MSValidate.01", "Meta_robots" : "Hakurobotit", "minutes" : "minuuttia", "More_channels" : "Lisää kanavia", - "More_groups" : "Lisää yksityisiä ryhmiä", + "More_groups" : "Lisää privaattiryhmiä", "More_unreads" : "Lisää lukemattomia", "Msgs" : "Viestit", - "multi" : "moni", + "multi" : "monta", "My_Account" : "Käyttäjätilini", "n_messages" : "%s viestiä", "Name" : "Nimi", "Name_cant_be_empty" : "Nimi ei voi olla tyhjä", + "Name_optional" : "Nimi (valinnainen)", "New_messages" : "Uusia viestejä", "New_password" : "Uusi salasana", + "No_channel_with_name_%s_was_found" : "Kanavaa nimeltä '%s' ei löytynyt!", "No_channels_yet" : "Et ole vielä millään kanavalla.", "No_direct_messages_yet" : "Et ole vielä aloittanut mitään keskustelua.", "No_favorites_yet" : "Et ole vielä lisännyt suosikkeja.", - "No_groups_yet" : "Sinulla ei ole vielä yksityisviestikeskusteluja.", - "No_permission_to_view_room" : "Sinulla ei ole oikeutta katsella tätä", - "No_channel_with_name_%s_was_found" : "Kanavaa nimeltä '%s' ei löytynyt!", "No_group_with_name_%s_was_found" : "Privaattiryhmää '%s' ei löytynyt!", + "No_groups_yet" : "Sinulla ei ole vielä privaattiryhmiä.", + "No_permission_to_view_room" : "Sinulla ei ole oikeutta katsella tätä", "No_user_with_username_%s_was_found" : "Käyttäjää nimeltä <strong>\"%s\"</strong> ei löytynyt!", "Not_allowed" : "Ei sallittu", "Not_found_or_not_allowed" : "Ei löydy tai ei sallittu", "Nothing_found" : "Ei löytynyt", "Notify_all_in_this_room" : "Ilmoita kaikille kanavallaolijoille", - "Old_Password" : "Vanha salasana", "Old_and_new_password_required" : "Sinun täytyy antaa sekä vanha että uusi salasana, että saat vaihdettua salasanasi.", - "Only_you_can_see_this_message" : "Vain sinä voit nähdä tämän viestin", + "Old_Password" : "Vanha salasana", "Online" : "Online", + "Only_you_can_see_this_message" : "Vain sinä voit nähdä tämän viestin", "Oops!" : "Oho", "Opt_out_statistics" : "Älä lähetä anonyymejä tilastoja Rocket.Chatille", "Opt_out_statistics_warning" : "Lähettämällä anonyymit tilastot, autat meitä selvittämään, kuinka monta Rocket.Chat -ympäristöä on käynnistetty, kuten myös sen, miten hyvin järjestelmä toimii. Tätä tietoa käytetään Rocket.Chatin parantamiseen.\nJos haluat jatkaa anonyymien tilastojen lähettämistä, poista ylläoleva ruksi. Kiitos.", "others" : "muut", "Password" : "Salasana", + "Password_Change_Disabled" : "Rocket.Chat ylläpitäjäsi on poistanut salasanan vaihtamismahdollisuuden", "Password_changed_successfully" : "Salasana vaihdettu", "People" : "Ihmiset", + "Please_enter_value_for_url" : "Anna avatarisi URL", "Please_wait" : "Odota hetki", "Please_wait_activation" : "Odota, tämä voi kestää jonkin aikaa.", "Please_wait_statistics" : "Odota, tilastoja generoidaan.", @@ -237,20 +290,22 @@ "Preferences" : "Asetukset", "Preferences_saved" : "Asetukset tallennettu", "Privacy" : "Yksityisyys", - "Private_Groups" : "Yksityisviestikeskustelut", - "Private_Groups_list" : "Luettelo yksityisistä ryhmistä", + "Private_Groups" : "Privaattiryhmät", + "Private_Groups_list" : "Privaattiryhmäluettelo", "Profile" : "Profiili", "Profile_saved_successfully" : "Profiili tallennettu onnistuneesti", "Proudly_developed" : "Proudly developed with Meteor", - "Push" : "Työnnä", + "Push" : "Push", "Push_apn_cert" : "APN Cert", "Push_apn_dev_cert" : "APN Cert (kehitys)", - "Push_apn_dev_key" : "APN Avain (kehitys)", - "Push_apn_dev_passphrase" : "APN Tunnuslause (kehitys)", - "Push_apn_key" : "APN Avain", - "Push_apn_passphrase" : "APN Tunnuslause", + "Push_apn_dev_key" : "APN Key (kehitys)", + "Push_apn_dev_passphrase" : "APN Passphrase (kehitys)", + "Push_apn_key" : "APN Key", + "Push_apn_passphrase" : "APN Passphrase", "Push_debug" : "Debug", "Push_enable" : "Kytke päälle", + "Push_gcm_api_key" : "GCM API Key", + "Push_gcm_project_number" : "GCM Project Number", "Push_production" : "Tuotanto", "Quick_Search" : "Pikaetsintä", "quote" : "lainaus", @@ -260,8 +315,8 @@ "Registration_Succeeded" : "Rekisteröinti onnistui", "Remember_me" : "Muista minut", "Remove" : "Poista", - "Remove_custom_oauth" : "Poista mukautettu oauth", "Remove_Admin" : "Poista ylläpitäjyys", + "Remove_custom_oauth" : "Poista mukautettu oauth", "Reset_password" : "Nollaa salasana", "Room" : "Huone", "Room_name_changed" : "Huoneen nimi vaihdettu <em>__room_name__</em> <em>__user_by__</em> toimesta", @@ -271,8 +326,15 @@ "Room_uploaded_file_list_empty" : "Tiedostoja ei ole saatavilla.", "room_user_count" : "%s käyttäjää", "Rooms" : "Huoneet", + "S_new_messages_since_s" : "%s uutta viestiä lähtien %s", + "SAML" : "SAML", + "SAML_Custom_Cert" : "Custom sertifikaatti", + "SAML_Custom_Entry_point" : "Custom Entry Point", + "SAML_Custom_Generate_Username" : "Generoi käyttäjätunnus", + "SAML_Custom_Issuer" : "Custom Issuer", + "SAML_Custom_Provider" : "Custom Provider", "Save" : "Tallenna", - "Save_changes" : "Tallenna", + "Save_changes" : "Tallenna muutokset", "Save_Mobile_Bandwidth" : "Säästä kaistaa mobiilissa", "Search" : "Etsi", "Search_Messages" : "Etsi viestejä", @@ -286,8 +348,8 @@ "Selected_users" : "Valitut käyttäjät", "Send" : "Lähetä", "Send_confirmation_email" : "Lähetä vahvistussähköposti", - "Send_invitation_email" : "Lähetä kutsu sähköposti", - "Send_invitation_email_error" : "Et ole antanyt yhtään pätevää sähköpostiosoitetta.", + "Send_invitation_email" : "Lähetä kutsusähköposti", + "Send_invitation_email_error" : "Et ole antanyt yhtään validia sähköpostiosoitetta.", "Send_invitation_email_info" : "Voit lähettää useita sähköpostikutsuja kerralla.", "Send_invitation_email_success" : "Olet onnistuneesti lähettänyt sähköpostikutsun seuraaviin osoitteisiin:", "Send_invitation_email_warning" : "Lähettääksesi sähköpostikutsuja, sinun täytyy ensin tehdä SMTP asetukset.", @@ -299,7 +361,8 @@ "Silence" : "Hiljaisuus", "since_creation" : "%s saakka", "Site_Name" : "Sivuston nimi:", - "SAML" : "SAML", + "Site_Url" : "Sivuston URL-osoite", + "Site_Url_Description" : "Esimerkiksi: https://chat.domain.com/", "SMTP" : "SMTP", "SMTP_Host" : "SMTP-palvelin", "SMTP_Password" : "SMTP Salasana", @@ -311,9 +374,9 @@ "Stats_Active_Users" : "Aktiivisia käyttäjiä", "Stats_Avg_Channel_Users" : "Keskimääräinen kanavan käyttäjämäärä", "Stats_Avg_Private_Group_Users" : "Keskimääräinen käyttäjämäärä", + "Stats_Away_Users" : "Poissaolevat käyttäjät", "Stats_Max_Room_Users" : "Maksimi käyttäjämäärä", "Stats_Non_Active_Users" : "Passiivisia käyttäjiä", - "Stats_Away_Users" : "Poissaolevat käyttäjät", "Stats_Offline_Users" : "Offline-käyttäjiä", "Stats_Online_Users" : "Online-käyttäjiä", "Stats_OS_Arch" : "OS Arkkitehtuuri", @@ -334,10 +397,11 @@ "Stop_Recording" : "Lopeta nauhoittaminen", "strike" : "yliviivaa", "Submit" : "Lähetä", - "S_new_messages_since_s" : "%s uutta viestiä lähtien %s", "The_field_is_required" : "Kenttä %s vaaditaan.", "True" : "Kyllä", "Unnamed" : "Nimetön", + "Unread_Rooms" : "Lukemattomia", + "Unread_Rooms_Mode" : "Lukemattomien tila", "Upload_file_question" : "Lähetä tiedosto?", "Use_Emojis" : "Käytä Emojia", "Use_initials_avatar" : "Käytä käyttäjätunnuksen nimikirjaimia", @@ -345,12 +409,12 @@ "Use_service_avatar" : "Käytä %s avataria", "Use_this_username" : "Käytä tätä käyttäjänimieä", "Use_uploaded_avatar" : "Käytä ladattua avataria", - "User_added" : "Käyttäjä <em>__user_added__</em> lisätty.", + "Use_url_for_avatar" : "Käytä avatar-URLia", "User_added_by" : "Käyttäjä <em>__user_added__</em> lisätty <em>__user_by__</em> toimesta.", "User_Channels" : "Käyttäjän kanavat", "User_has_been_activated" : "Käyttäjä on aktivoitu", "User_has_been_deactivated" : "Käyttäjä on deaktivoitu", - "User_has_been_deleted" : "Käyttä", + "User_has_been_deleted" : "Käyttäjä on poistettu", "User_Info" : "Käyttäjän tiedot", "User_is_no_longer_an_admin" : "Käyttäjä ei ole enää ylläpitäjä", "User_is_not_activated" : "Käyttäjää ei ole aktivoitu", @@ -358,20 +422,22 @@ "User_joined_channel" : "Liittyi kanavalle.", "User_joined_channel_female" : "Liittyi kanavalle.", "User_joined_channel_male" : "Liittyi kanavalle.", - "User_left" : "Käyttäjä <em>__user_left__</em> poistui.", - "User_left_female" : "Käyttäjä <em>__user_left__</em> poistui.", - "User_left_male" : "Käyttäjä <em>__user_left__</em> poistui.", + "User_left" : "Käyttäjä poistui kanavalta.", + "User_left_female" : "Käyttäjä poistui kanavalta.", + "User_left_male" : "Käyttäjä poistui kanavalta.", "User_logged_out" : "Käyttäjä on kirjautunut ulos", + "User_not_found_or_incorrect_password" : "Käyttäjää ei löydy tai väärä salasana", "User_removed_by" : "Käyttäjä <em>__user_removed__</em> poistettu <em>__user_by__</em> toimesta.", - "User_Settings" : "Käyttäjä", + "User_Settings" : "Käyttäjän asetukset", "User_updated_successfully" : "Käyttäjän tiedot päivitetty", - "Users" : "Käyttäjät", "Username" : "Käyttäjänimi", "Username_cant_be_empty" : "Käyttäjänimi ei voi olla tyhjä", + "Username_Change_Disabled" : "Rocket.Chat ylläpitäjäsi on poistanut käyttäjätunnuksen vaihtamismahdollisuuden", "Username_description" : "Käyttäjänimeä käytetään sinun mainitsemiseen muiden viesteissä.", "Username_invalid" : "<strong>%s</strong> ei ole kelvollinen käyttäjänimi,<br/> käytä vain kirjaimia, numeroita, pistettä ja viivaa", "Username_title" : "Rekisteröi käyttäjänimi", "Username_unavaliable" : "<strong>%s</strong> on jo käytössä :(", + "Users" : "Käyttäjät", "View_All" : "Katso kaikki", "Wait_activation_warning" : "Ennen kuin voit kirjautua, tunnuksesi pitää aktivoida ylläpitäjän toimesta.", "We_have_sent_password_email" : "Lähetimme salasanan nollausohjeet sähköpostiisi. Mikäli et saanut sähköpostia, yritä uudelleen.", @@ -379,10 +445,11 @@ "Welcome" : "Tervetuloa <em>%s</em>.", "Welcome_to_the" : "Tervetuloa", "With_whom" : "kanssa", + "Yes_clear_all" : "Jep, tyhjennä kaikki!", "Yes_delete_it" : "Kyllä, poista!", "you_are_in_preview_mode_of" : "Tämä on kanavan #<strong>__room_name__</strong> esikatselutila", "You_need_confirm_email" : "Sinun tulee vahvistaa sähköpostiosoitteesi!", - "You_will_not_be_able_to_recover" : "Palauttaminen ei ole mahdollista!", + "You_will_not_be_able_to_recover" : "Viestin palauttaminen ei ole mahdollista!", "Your_entry_has_been_deleted" : "Your entry has been deleted.", "Your_Open_Source_solution" : "Your own Open Source chat solution" } \ No newline at end of file diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json index 29399fc7c90035f5b1159228c0d79fac0df8462b..a32780abcc816ec9f00ff31735fc65298f05063e 100644 --- a/i18n/fr.i18n.json +++ b/i18n/fr.i18n.json @@ -4,6 +4,17 @@ "Accounts" : "Comptes", "Accounts_denyUnverifiedEmail" : "Refuser les emails non vérifiées", "Accounts_EmailVerification" : "Vérification de l'e-mail", + "Accounts_ManuallyApproveNewUsers" : "Approuver manuellement les nouveaux utilisateurs", + "Accounts_OAuth_Custom_Authorize_Path" : "URL d'autorisation", + "Accounts_OAuth_Custom_Button_Color" : "Couleur du bouton", + "Accounts_OAuth_Custom_Button_Label_Color" : "Couleur de texte du bouton", + "Accounts_OAuth_Custom_Button_Label_Text" : "Texte du bouton", + "Accounts_OAuth_Custom_Enable" : "Activer", + "Accounts_OAuth_Custom_id" : "Id", + "Accounts_OAuth_Custom_Identity_Path" : "URL d'identification", + "Accounts_OAuth_Custom_Secret" : "Secret", + "Accounts_OAuth_Custom_Token_Path" : "URL de Token", + "Accounts_OAuth_Custom_URL" : "URL", "Accounts_OAuth_Facebook" : "Connexion avec Facebook", "Accounts_OAuth_Facebook_id" : "App Id Facebook", "Accounts_OAuth_Facebook_secret" : "Facebook Secret", @@ -19,21 +30,10 @@ "Accounts_OAuth_Meteor" : "Connexion avec Meteor", "Accounts_OAuth_Meteor_id" : "Meteor Id", "Accounts_OAuth_Meteor_secret" : "Meteor Id", - "Accounts_ManuallyApproveNewUsers" : "Approuver manuellement les nouveaux utilisateurs", - "Accounts_RegistrationRequired" : "Enregistrement nécessaire", "Accounts_OAuth_Twitter" : "Connexion avec Twitter", "Accounts_OAuth_Twitter_id" : "Twitter Id", "Accounts_OAuth_Twitter_secret" : "Twitter Secret", - "Accounts_OAuth_Custom_id" : "Id", - "Accounts_OAuth_Custom_URL" : "URL", - "Accounts_OAuth_Custom_Token_Path" : "URL de Token", - "Accounts_OAuth_Custom_Identity_Path" : "URL d'identification", - "Accounts_OAuth_Custom_Authorize_Path" : "URL d'autorisation", - "Accounts_OAuth_Custom_Secret" : "Secret", - "Accounts_OAuth_Custom_Enable" : "Activer", - "Accounts_OAuth_Custom_Button_Label_Text" : "Texte du bouton", - "Accounts_OAuth_Custom_Button_Label_Color" : "Couleur de texte du bouton", - "Accounts_OAuth_Custom_Button_Color" : "Couleur du bouton", + "Accounts_RegistrationRequired" : "Enregistrement nécessaire", "Activate" : "Activer", "Add_custom_oauth" : "Ajouter OAuth personnalisé", "Add_Members" : "Ajouter des membres", @@ -48,6 +48,7 @@ "are_also_typing" : "sont également en train d'écrire", "are_typing" : "sont en train d'écrire", "Are_you_sure" : "Êtes-vous sûr(e) ?", + "Auto_Load_Images" : "Charger automatiquement les images", "Avatar_changed_successfully" : "Avatar modifié avec succès", "away" : "absent", "Away" : "Absent", @@ -55,7 +56,6 @@ "Away_female" : "Absente", "away_male" : "absent", "Away_male" : "Absent", - "Auto_Load_Images" : "Charger automatiquement les images", "Back_to_login" : "Retourner à l'écran de connexion", "bold" : "gras", "busy" : "occupé", @@ -81,12 +81,12 @@ "Create_new_private_group" : "Créer un nouveau groupe privé", "Create_new_public_channel" : "Créer un nouveau canal publique.", "Created_at" : "Créé le", - "Custom_oauth_unique_name" : "Nom unique OAuth personnalisé", "Custom_oauth_helper" : "Lorsque vous configurez votre service OAuth, vous devez indiquer une URL pour le Callback. Utilisez <pre>%s</pre>", + "Custom_oauth_unique_name" : "Nom unique OAuth personnalisé", "days" : "jours", "Deactivate" : "Désactiver", - "Delete_User_Warning" : "Supprimer un utilisateur va également supprimer tous les messages de celui-ci. Cette action ne peut être annulée.", "Delete" : "Supprimer", + "Delete_User_Warning" : "Supprimer un utilisateur va également supprimer tous les messages de celui-ci. Cette action ne peut être annulée.", "Deleted" : "Supprimé !", "Desktop_Notifications" : "Notifications sur le bureau", "Desktop_Notifications_Disabled" : "Les notifications du bureau sont désactivées, Modifiez les préférences de votre navigateur si vous avez besoin de les activer.", @@ -120,8 +120,8 @@ "Get_to_know_the_team" : "Venez nous rencontrer", "github_no_public_email" : "Vous n'avez pas d'adresse email public associé à votre compte GitHub", "Give_a_unique_name_for_the_custom_oauth" : "Indiquez un nom unique pour l'OAuth personnalisé", - "Have_your_own_chat" : "Disposez de votre propre salon de discussion en ligne. Développé à l'aide de Meteor.com, Rocket.Chat est une solution pour les développeurs désirant mettre en place et faire évoluer leur propre plate-forme de discussion.", "Has_more" : "a plus de", + "Have_your_own_chat" : "Disposez de votre propre salon de discussion en ligne. Développé à l'aide de Meteor.com, Rocket.Chat est une solution pour les développeurs désirant mettre en place et faire évoluer leur propre plate-forme de discussion.", "Hide_room" : "Cacher le salon", "History" : "Historique", "hours" : "heures", @@ -160,14 +160,14 @@ "Layout_Sidenav_Footer_description" : "La taille du pied de page est 260x70", "Layout_Terms_of_Service" : "Conditions de service", "LDAP" : "LDAP", - "LDAP_Dn" : "DN LDAP", + "LDAP_DN" : "DN LDAP", "LDAP_Port" : "Port LDAP", "LDAP_Url" : "Adresse LDAP", "Leave_room" : "Quitter le salon", "line" : "ligne", "Load_more" : "Charger plus", - "Loading_more_from_history" : "Charger plus d'historique", "Loading..." : "Chargement...", + "Loading_more_from_history" : "Charger plus d'historique", "Loading_suggestion" : "Chargement des suggestions ...", "Login" : "Se connecter", "Login_with" : "Connectez-vous avec %s", @@ -182,15 +182,15 @@ "Message_AllowDeleting" : "Autoriser la suppression de messages", "Message_AllowEditing" : "Autoriser la modification de messages", "Message_AllowEditing_BlockEditInMinutes" : "Bloquer la modification de messages après (en minutes, 0 pour désactiver)", + "Message_AllowPinning" : "Autoriser l'épinglement de messages", "Message_deleting_not_allowed" : "Suppression d'un message non autorisée", - "Message_editing_not_allowed" : "Modification d'un message non autorisée", "Message_editing_blocked" : "Ce message ne peut plus être modifié", + "Message_editing_not_allowed" : "Modification d'un message non autorisée", + "Message_KeepHistory" : "Conserver l'historique des messages", "Message_MaxAllowedSize" : "Taille maximum de message autorisée", + "Message_pinned" : "Message épinglé", "Message_pinning_not_allowed" : "L'épinglement de message n'est pas autorisé", - "Message_AllowPinning" : "Autoriser l'épinglement de messages", - "Message_KeepHistory" : "Conserver l'historique des messages", "Message_removed" : "Message supprimé", - "Message_pinned" : "Message épinglé", "Message_ShowDeletedStatus" : "Afficher le statut de suppression", "Message_ShowEditedStatus" : "Afficher le statut de modification", "Messages" : "Messages", @@ -210,24 +210,25 @@ "n_messages" : "%s messages", "Name" : "Nom", "Name_cant_be_empty" : "Le nom ne peut pas être vide", + "Name_optional" : "Nom (optionnel)", "New_messages" : "Nouveaux messages", "New_password" : "Nouveau mot de passe", + "No_channel_with_name_%s_was_found" : "Aucun salon nommé <strong>\"%s\"</strong> n'a été trouvé !", "No_channels_yet" : "Vous ne faites partie d’aucun canal pour le moment.", "No_direct_messages_yet" : "Vous n'avez pris part à aucune conversation pour le moment.", "No_favorites_yet" : "Vous n'avez ajouté aucun favoris pour le moment.", + "No_group_with_name_%s_was_found" : "Aucun groupe privé nommé <strong>\"%s\"</strong> n'a été trouvé !", "No_groups_yet" : "Vous n'avez pas encore de groupes privés.", "No_permission_to_view_room" : "Vous n'avez pas la permission de voir ce salon", - "No_channel_with_name_%s_was_found" : "Aucun salon nommé <strong>\"%s\"</strong> n'a été trouvé !", - "No_group_with_name_%s_was_found" : "Aucun groupe privé nommé <strong>\"%s\"</strong> n'a été trouvé !", "No_user_with_username_%s_was_found" : "Aucun utilisateur nommé <strong>\"%s\"</strong> n'a été trouvé !", "Not_allowed" : "Non autorisé", "Not_found_or_not_allowed" : "Introuvable ou non autorisé", "Nothing_found" : "Aucun résultat", "Notify_all_in_this_room" : "Notifiez tout le monde dans ce salon", - "Old_Password" : "Ancien mot de passe", "Old_and_new_password_required" : "Vous devez renseigner votre ancien mot de passe et le nouveau afin de changer ce dernier.", - "Only_you_can_see_this_message" : "Seul vous pouvez voir ce message", + "Old_Password" : "Ancien mot de passe", "Online" : "Connecté", + "Only_you_can_see_this_message" : "Seul vous pouvez voir ce message", "Oops!" : "Oups", "Opt_out_statistics" : "Ne pas envoyer mes statistiques anonymes à Rocket.Chat", "Opt_out_statistics_warning" : "En envoyant vos statistiques anonymes, vous allez nous aider à identifier le nombre d'instances de Rocket.Chat déployées, ainsi que le bon comportement du système, et donc que nous pourrions encore améliorer. Si vous souhaitez continuer à nous envoyer vos statistiques anonymes, décochez la case ci-dessus. Merci.", @@ -265,8 +266,8 @@ "Registration_Succeeded" : "Enregistrement réussi", "Remember_me" : "Se souvenir de moi", "Remove" : "Supprimer", - "Remove_custom_oauth" : "Supprimer OAuth personnalisé ", "Remove_Admin" : "Supprimer administrateur", + "Remove_custom_oauth" : "Supprimer OAuth personnalisé ", "Reset_password" : "Réinitialiser le mot de passe", "Room" : "Salon", "Room_name_changed" : "Nom du salon changé en : <em>__room_name__</em> par <em>__user_by__</em>", @@ -276,6 +277,8 @@ "Room_uploaded_file_list_empty" : "Aucun fichier disponible.", "room_user_count" : "%s utilisateurs", "Rooms" : "Salons", + "S_new_messages_since_s" : "%s nouveaux messages depuis %s", + "SAML" : "SAML", "Save" : "Enregistrer", "Save_changes" : "Sauvegarder les modifications", "Save_Mobile_Bandwidth" : "Préserver la bande passante sur mobile", @@ -304,7 +307,6 @@ "Silence" : "Silence", "since_creation" : "depuis %s", "Site_Name" : "Nom du site :", - "SAML" : "SAML", "SMTP" : "SMTP", "SMTP_Host" : "Hôte SMTP", "SMTP_Password" : "Mot de passe SMTP", @@ -316,9 +318,9 @@ "Stats_Active_Users" : "Utilisateurs actifs", "Stats_Avg_Channel_Users" : "Nombre moyen d'utilisateurs dans les canaux", "Stats_Avg_Private_Group_Users" : "Nombre moyen d'utilisateurs dans les groupes privés", + "Stats_Away_Users" : "Utilisateurs indisponibles", "Stats_Max_Room_Users" : "Nombre d'utilisateur maximum par salon", "Stats_Non_Active_Users" : "Utilisateurs inactifs", - "Stats_Away_Users" : "Utilisateurs indisponibles", "Stats_Offline_Users" : "Utilisateurs hors ligne", "Stats_Online_Users" : "Utilisateurs en ligne", "Stats_OS_Arch" : "Architecture", @@ -339,7 +341,6 @@ "Stop_Recording" : "Arrêter l'enregistrement", "strike" : "barré", "Submit" : "Envoyer", - "S_new_messages_since_s" : "%s nouveaux messages depuis %s", "The_field_is_required" : "Le champ %s est requis.", "True" : "Oui", "Unnamed" : "Sans nom", @@ -350,7 +351,6 @@ "Use_service_avatar" : "Utiliser l'avatar %s", "Use_this_username" : "Utilisez ce nom d'utilisateur", "Use_uploaded_avatar" : "Utiliser l'avatar transmis", - "User_added" : "L'utilisateur <em>__user_added__</em> a été ajouté.", "User_added_by" : "L'utilisateur <em>__user_added__</em> a été ajouté par <em>__user_by__</em>.", "User_Channels" : "Salons d'utilisateur", "User_has_been_activated" : "L'utilisateur a été activé", @@ -370,13 +370,13 @@ "User_removed_by" : "L'utilisateur <em>__user_removed__</em> a été éjecté par <em>__user_by__</em>.", "User_Settings" : "Paramètres utilisateur", "User_updated_successfully" : "Utilisateur mis à jour avec succès", - "Users" : "Utilisateurs", "Username" : "Nom d'utilisateur", "Username_cant_be_empty" : "Le nom d'utilisateur doit être renseigné", "Username_description" : "Le nom d'utilisateur est utilisé pour permettre à d'autres personnes de vous mentionner dans leurs messages.", "Username_invalid" : "<strong>%s</strong> n'est pas un nom d'utilisateur valide,<br/> utilisez des lettres, des chiffres, des points et des tirets uniquement", "Username_title" : "Enregistrer un nom d'utilisateur", "Username_unavaliable" : "<strong>%s</strong> est déjà utilisé :(", + "Users" : "Utilisateurs", "View_All" : "Voir tous", "Wait_activation_warning" : "Avant de pouvoir vous connecter, votre compte doit être manuellement activé par un administrateur.", "We_have_sent_password_email" : "Nous vous avons envoyé un email avec des instructions de réinitialisation de votre mot de passe. Si vous ne le recevez pas dans quelques minutes, veuillez réessayer.", diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json index 58742fb751b087f38976d306bf98bd475651f3da..c6f3ffa45c467df28c9dcd402a52577ae257aa90 100644 --- a/i18n/he.i18n.json +++ b/i18n/he.i18n.json @@ -126,7 +126,6 @@ "Use_service_avatar" : "השתמש ב×וו×טר %s", "Use_this_username" : "השתמש ×‘×©× ×”×ž×©×ª×ž×© ×”×–×”", "Use_uploaded_avatar" : "השתמש ב×וו×טר שהועלה", - "User_added" : "המשתמש <em>__user_added__</em> × ×•×¡×£.", "User_added_by" : "המשתמש <em>__user_added__</em> × ×•×¡×£ על ידי <em>__user_by__</em>", "User_joined_channel" : "הצטרף לערוץ.", "User_left" : "המשתמש <em>__user_left__</em> עזב ×ת השיחה.", diff --git a/i18n/hr.i18n.json b/i18n/hr.i18n.json index c323f9c37d86f1ad23226eab6b554b7b2670ea03..c881293a275bc063393634c0ac0932708e995313 100644 --- a/i18n/hr.i18n.json +++ b/i18n/hr.i18n.json @@ -2,20 +2,23 @@ "Access_online_demo" : "Pristupi online demonstraciji", "Access_Online_Demo" : "Pristupi Online demonstraciji", "Accounts" : "RaÄuni", + "Accounts_AllowPasswordChange" : "Dopusti promjenu lozinke", + "Accounts_AllowUsernameChange" : "Dopusti promjenu korisniÄkog imena", + "Accounts_AvatarSize" : "VeliÄina Avatara", "Accounts_denyUnverifiedEmail" : "Odbij neprovjereni e-mail", "Accounts_EmailVerification" : "E-mail Verifikacija", + "Accounts_ManuallyApproveNewUsers" : "RuÄno odobri nove korisnike", + "Accounts_OAuth_Custom_Button_Color" : "Boja Gumba", + "Accounts_OAuth_Custom_Button_Label_Text" : "Tekst Gumba", + "Accounts_OAuth_Custom_Enable" : "Omogući", + "Accounts_OAuth_Custom_Secret" : "Tajno", "Accounts_OAuth_Facebook" : "Facebook prijava", "Accounts_OAuth_Github" : "GitHub Prijava", "Accounts_OAuth_Google" : "Google Prijava", "Accounts_OAuth_Linkedin" : "LinkedIn Prijava", "Accounts_OAuth_Meteor" : "Meteor Prijava", - "Accounts_ManuallyApproveNewUsers" : "RuÄno odobri nove korisnike", - "Accounts_RegistrationRequired" : "Potrebna je registracija", "Accounts_OAuth_Twitter" : "Twitter Prijava", - "Accounts_OAuth_Custom_Secret" : "Tajno", - "Accounts_OAuth_Custom_Enable" : "Omogući", - "Accounts_OAuth_Custom_Button_Label_Text" : "Tekst Gumba", - "Accounts_OAuth_Custom_Button_Color" : "Boja Gumba", + "Accounts_RegistrationRequired" : "Potrebna je registracija", "Activate" : "Aktiviraj", "Add_Members" : "Dodaj ÄŒlanove", "Add_users" : "Dodaj korisnike", @@ -26,6 +29,7 @@ "are_also_typing" : "isto tipkaju", "are_typing" : "tipkaju", "Are_you_sure" : "Jesi li siguran?", + "Auto_Load_Images" : "Automatski uÄitaj slike", "Avatar_changed_successfully" : "Avatar je uspjeÅ¡no promijenjen", "away" : "odsutan", "Away" : "Odsutan", @@ -33,7 +37,6 @@ "Away_female" : "Odsutna", "away_male" : "odsutan", "Away_male" : "Odsutan", - "Auto_Load_Images" : "Automatski uÄitaj slike", "Back_to_login" : "Natrag na prijavu", "bold" : "podebljaj", "busy" : "zaposlen", @@ -60,8 +63,9 @@ "Created_at" : "Stvoreno u", "days" : "dana", "Deactivate" : "IskljuÄi", - "Delete_User_Warning" : "Brisanje korisnika će izbrisati i sve poruke od tog korisnika. Ovo se ne može poniÅ¡titi.", "Delete" : "ObriÅ¡i", + "Delete_Room_Warning" : "Brisanje sobe će obrisati sve poruke u toj sobi. Ovo se ne može poniÅ¡titi.", + "Delete_User_Warning" : "Brisanje korisnika će izbrisati i sve poruke od tog korisnika. Ovo se ne može poniÅ¡titi.", "Deleted" : "Obrisano!", "Direct_Messages" : "Izravne Poruke", "Disable_Favorite_Rooms" : "Onemogući favorite", @@ -88,12 +92,14 @@ "From_Email" : "Sa e-maila", "Get_to_know_the_team" : "Upoznajte Rocket.Team", "github_no_public_email" : "NemaÅ¡ ni1 javni email u svom GitHub raÄunu", - "Have_your_own_chat" : "Imaj svoj vlastiti web chat. Razvijen sa Meteor.com, Rocket.Chat je sjajno rjeÅ¡enje za developere koji žele sagraditi i dalje razvijati svoju vlastitu chat platformu.", "Has_more" : "Ima viÅ¡e", + "Have_your_own_chat" : "Imaj svoj vlastiti web chat. Razvijen sa Meteor.com, Rocket.Chat je sjajno rjeÅ¡enje za developere koji žele sagraditi i dalje razvijati svoju vlastitu chat platformu.", "Hide_room" : "Sakrij sobu", "History" : "Povijest", "hours" : "sati", + "Incorrect_Password" : "NetoÄna lozinka", "inline_code" : "jednolinijski kôd", + "Install_FxOs" : "Instalirajte Rocket.Chat na svoj Firefox", "Invalid_confirm_pass" : "Potvrda lozinke se ne slaže sa lozinkom", "Invalid_email" : "Uneseni e-mail nije valjan", "Invalid_name" : "Ime ne smije biti prazno", @@ -121,8 +127,8 @@ "Leave_room" : "IzaÄ‘i iz sobe", "line" : "linija", "Load_more" : "UÄitaj viÅ¡e", - "Loading_more_from_history" : "UÄitavanje viÅ¡e iz povijesti", "Loading..." : "UÄitavanje ...", + "Loading_more_from_history" : "UÄitavanje viÅ¡e iz povijesti", "Loading_suggestion" : "UÄitavam sugestije...", "Login" : "Prijava", "Login_with" : "Prijavi se sa %s", @@ -137,17 +143,18 @@ "Message_AllowDeleting" : "Dopusti Brisanje Poruka", "Message_AllowEditing" : "Dopusti UreÄ‘ivanje Poruka", "Message_AllowEditing_BlockEditInMinutes" : "Blokirajte ureÄ‘ivanje poruka nakon (u minutama - 0 kako bi onemoguÄili)", + "Message_AllowPinning" : "Dopusti pribadanje poruka ", "Message_deleting_not_allowed" : "Brisanje poruka nije dopuÅ¡teno", - "Message_editing_not_allowed" : "UreÄ‘ivanje poruka nije dopuÅ¡teno", "Message_editing_blocked" : "Ova poruka se viÅ¡e ne može ureÄ‘ivati ", + "Message_editing_not_allowed" : "UreÄ‘ivanje poruka nije dopuÅ¡teno", + "Message_KeepHistory" : "Zadrži Povijest Poruka", "Message_MaxAllowedSize" : "Maksimalna dopuÅ¡tena veliÄina poruke", + "Message_pinned" : "Poruka je pribodena", "Message_pinning_not_allowed" : "Pribadanje poruka nije dopuÅ¡teno", - "Message_AllowPinning" : "Dopusti pribadanje poruka ", - "Message_KeepHistory" : "Zadrži Povijest Poruka", "Message_removed" : "Poruka je maknuta", - "Message_pinned" : "Poruka je pribodena", "Message_ShowDeletedStatus" : "Pokaži Izbrisan status", "Message_ShowEditedStatus" : "Prikaži ureÄ‘eni status", + "Messages" : "Poruke", "Meta" : "Meta", "Meta_fb_app_id" : "Facebook App-ID", "Meta_language" : "Jezik", @@ -164,25 +171,28 @@ "Name_cant_be_empty" : "Ime ne može biti prazno", "New_messages" : "Nove Poruke", "New_password" : "Nova lozinka", + "No_channel_with_name_%s_was_found" : "Kanal s tim imenom nije naÄ‘en", "No_channels_yet" : "JoÅ¡ nisi dio nijednog kanala.", "No_direct_messages_yet" : "JoÅ¡ nisi zapoÄeo ni1 razgovor.", "No_favorites_yet" : "JoÅ¡ nisi dodao omiljene.", + "No_group_with_name_%s_was_found" : "Privatna grupa s tim imenom nije naÄ‘ena", "No_groups_yet" : "JoÅ¡ nemaÅ¡ privatnih grupa.", "No_permission_to_view_room" : "NemaÅ¡ dopuÅ¡tenje da vidiÅ¡ ovu sobu", - "No_channel_with_name_%s_was_found" : "Kanal s tim imenom nije naÄ‘en", - "No_group_with_name_%s_was_found" : "Privatna grupa s tim imenom nije naÄ‘ena", "No_user_with_username_%s_was_found" : "Korisnik sa korisniÄkim imenom <strong>\"%s\"</strong> nije naÄ‘en!", "Not_allowed" : "Nije dozvoljeno", "Not_found_or_not_allowed" : "Nije NaÄ‘eno ili Nije Dozvoljeno", "Nothing_found" : "NiÅ¡ta nije naÄ‘eno", "Notify_all_in_this_room" : "Obavijesti sve u ovoj sobi", - "Only_you_can_see_this_message" : "Samo ti možeÅ¡ vidjeti ovu poruku", + "Old_Password" : "Stara Lozinka", "Online" : "Online", + "Only_you_can_see_this_message" : "Samo ti možeÅ¡ vidjeti ovu poruku", "Oops!" : "Ups", "Opt_out_statistics" : "Ne Å¡alji moje anonimne statistike Rocket.Chatu", "others" : "drugi", "Password" : "Lozinka", + "Password_Change_Disabled" : "VaÅ¡ Rocket.Chat Administrator je onemogućio izmjenu lozinke", "Password_changed_successfully" : "Lozinka je uspjeÅ¡no promijenjena", + "People" : "Ljudi", "Please_wait" : "PriÄekaj", "Please_wait_activation" : "Molimo priÄekajte, ovo bi moglo potrajati neko vrijeme.", "Please_wait_statistics" : "Molimo priÄekajte, statistike se generiraju.", @@ -211,8 +221,12 @@ "Room_name_changed" : "Ime sobe promijenjeno u: <em>__room_name__</em> od <em>__user_by__</em>", "Room_name_changed_successfully" : "Ime sobe je uspjeÅ¡no izmijenjeno", "Room_not_found" : "Soba nije naÄ‘ena", + "Room_uploaded_file_list" : "Popis datoteka", + "Room_uploaded_file_list_empty" : "Nijedna datoteka nije dostupna", "room_user_count" : "% korisnika", "Rooms" : "Sobe", + "S_new_messages_since_s" : "novih poruka od", + "SAML_Custom_Generate_Username" : "Izradi korisniÄko ime", "Save" : "SaÄuvaj", "Save_changes" : "Spremi promjene", "Search" : "Traži", @@ -247,9 +261,9 @@ "Statistics" : "Statistike", "Stats_Active_Users" : "Aktivni korisnici", "Stats_Avg_Channel_Users" : "ProsjeÄan broj korisnika kanala", + "Stats_Away_Users" : "Odsutni Korisnici", "Stats_Max_Room_Users" : "Maksimalno Korisnika Sobe", "Stats_Non_Active_Users" : "Neaktivni korisnici", - "Stats_Away_Users" : "Odsutni Korisnici", "Stats_Offline_Users" : "Offline Korisnici", "Stats_Online_Users" : "Online Korisnici", "Stats_OS_Freemem" : "OS Slobodna Memorija", @@ -264,7 +278,6 @@ "Stats_Total_Users" : "Ukupno korisnika", "strike" : "precrtaj", "Submit" : "PoÅ¡alji", - "S_new_messages_since_s" : "novih poruka od", "The_field_is_required" : "Polje% s je traženo.", "True" : "Da", "Unnamed" : "Neimenovan", @@ -275,7 +288,6 @@ "Use_service_avatar" : "Koristi %s avatar", "Use_this_username" : "Koristi ovo korisniÄko ime", "Use_uploaded_avatar" : "Koristi uploadani avatar", - "User_added" : "Korisnik <em>__user_added__</em> je dodan.", "User_added_by" : "Korisnik <em>__user_added__</em> dodan od <em>__user_by__</em>.", "User_Channels" : "KorisniÄki kanali", "User_has_been_activated" : "Korisnik je aktiviran", @@ -292,16 +304,18 @@ "User_left_female" : "Korisnica <em>__user_left__</em> je otiÅ¡la.", "User_left_male" : "Korisnik <em>__user_left__</em> je otiÅ¡ao.", "User_logged_out" : "Korisnik je odjavljen", + "User_not_found_or_incorrect_password" : "Korisnik nije pronaÄ‘en ili pogreÅ¡na lozinka", "User_removed_by" : "Korisnik <em>__user_removed__</em> maknut od <em>__user_by__</em>.", "User_Settings" : "KorisniÄke postavke", "User_updated_successfully" : "Korisnik je uspjeÅ¡no ažuriran", - "Users" : "Korisnici", "Username" : "KorisniÄko ime", "Username_cant_be_empty" : "KorisniÄko ime ne može ostati prazno.", + "Username_Change_Disabled" : "VaÅ¡ Rocket.Chat Administrator je onemogućio izmjenu korisniÄkih imena", "Username_description" : "KorisniÄko ime se koristi kako bi te drugi mogli spomenuti u porukama.", "Username_invalid" : "<strong>%s</strong> nije valjano korisniÄko ime,<br/> koristi samo slova, brojeve, toÄke i crtice", "Username_title" : "Registriraj korisniÄko ime", "Username_unavaliable" : "<strong>%s</strong> je već zauzeto :(", + "Users" : "Korisnici", "View_All" : "Prikaži Sve", "Wait_activation_warning" : "Prije nego Å¡to se prijavite, vaÅ¡ raÄun mora ruÄno aktivirati administrator.", "We_have_sent_password_email" : "Poslan ti je e-mail sa uputama za resetiranje lozinke. Provjeri i spam folder! Ako ga ne primiÅ¡ uskoro, molimo te vrati se i pokuÅ¡aj opet.", diff --git a/i18n/hu.i18n.json b/i18n/hu.i18n.json index f9c030084348228a011e575cc358dadb2a079354..fbc75e72ccf07833aaf6abb891797bca227f338a 100644 --- a/i18n/hu.i18n.json +++ b/i18n/hu.i18n.json @@ -108,7 +108,6 @@ "Use_service_avatar" : "%s használata", "Use_this_username" : "Használd ezt a felhasználónevet", "Use_uploaded_avatar" : "Feltöltött kép használata", - "User_added" : "<em>__user_added__</em> hozzáadva.", "User_added_by" : "<em>__user_added__</em> felhasználót hozzáadta <em>__user_by__</em>.", "User_left" : "<em>__user_left__</em> kilépett.", "User_logged_out" : "Nem elérhetÅ‘", diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json index 81fedc920ec6cba556dc3c9677565d2fac9fd18a..672374e1b9d9b656dd10be2c37709302d66b2fae 100644 --- a/i18n/it.i18n.json +++ b/i18n/it.i18n.json @@ -62,6 +62,7 @@ "Msgs" : "Msgs", "n_messages" : "% messaggi", "Name" : "Nome", + "Name_optional" : "Nome (opzionale)", "New_messages" : "Nuovi messaggi", "New_password" : "Nuova password", "No_channels_yet" : "Non fai parte di nessun canale ancora.", @@ -108,7 +109,6 @@ "Use_service_avatar" : "Usa l'avatar %s", "Use_this_username" : "Usa questo nome di utente", "Use_uploaded_avatar" : "Usare l'avatar caricato", - "User_added" : "Utente <em>__user_added__</em> aggiunto.", "User_added_by" : "Utente <em>__user_added__</em> aggiunto da <em>__user_by__</em>.", "User_left" : "Utente <em>__user_left__</em> ha lasciato.", "User_logged_out" : "L'utente è disconnesso ", diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json index 3f6b4f9338c137ccb4dd062dd2e6d48e9314bb80..318b963b6d9bb315050372dcfac8cd958645d733 100644 --- a/i18n/ja.i18n.json +++ b/i18n/ja.i18n.json @@ -6,9 +6,9 @@ "and" : "ã¨", "are_also_typing" : "誰ã‹ãŒã¾ãŸå…¥åŠ›ã—ã¦ã„ã¾ã™", "are_typing" : "誰ã‹ãŒå…¥åŠ›ã—ã¦ã„ã¾ã™", + "Auto_Load_Images" : "ç”»åƒè‡ªå‹•èªã¿è¾¼ã¿", "away" : "離å¸ä¸", "Away" : "離å¸ä¸", - "Auto_Load_Images" : "ç”»åƒè‡ªå‹•èªã¿è¾¼ã¿", "Back_to_login" : "ãƒã‚°ã‚¤ãƒ³ã¸æˆ»ã‚‹", "bold" : "太å—", "busy" : "å–ã‚Šè¾¼ã¿ä¸", @@ -135,7 +135,6 @@ "Use_service_avatar" : "%s ã®ã‚¢ãƒã‚¿ãƒ¼ã‚’使用", "Use_this_username" : "ユーザåを使用", "Use_uploaded_avatar" : "アップãƒãƒ¼ãƒ‰ã—ãŸã‚¢ãƒã‚¿ãƒ¼ã‚’使用", - "User_added" : "ユーザ <em>%s</em> è¿½åŠ ã—ã¾ã—ãŸã€‚", "User_added_by" : "ユーザ <em>__user_added__</em> ã‚’è¿½åŠ ã—ã¾ã—ãŸã€‚ by <em>__user_by__</em>.", "User_left" : "User <em>__user_left__</em> left.", "User_logged_out" : "ユーザã¯ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸ", diff --git a/i18n/km.i18n.json b/i18n/km.i18n.json index a8734d20cf29532654948d75f1b8ecba001816a4..4bbd96dbedbea65167b606c5b45170fb022035a4 100644 --- a/i18n/km.i18n.json +++ b/i18n/km.i18n.json @@ -2,14 +2,35 @@ "Access_online_demo" : "ចូល​ទៅ​សាក​ល្បងវា​លើ​អ៊ីនធើណិážâ€‹áž‡áž¶â€‹áž˜áž»áž“​សិន", "Access_Online_Demo" : "ចូល​ទៅ​សាក​ល្បងវា​លើ​អ៊ីនធើណិážâ€‹áž‡áž¶â€‹áž˜áž»áž“​សិន", "Accounts" : "គណនី", + "Accounts_AllowedDomainsList" : "ប្រើសញ្ញា ក្បៀស(,) ដើម្បីបែងចែង Domain ដែលអនុញ្ញាážáž·áž€áŸ’នុងបញ្ជី", + "Accounts_AllowPasswordChange" : "អនុញ្ញាážâ€‹áž±áŸ’យ​ផ្លាស់​ប្ážáž¼â€‹ážšâ€‹áž–ាក្យ​សម្ងាážáŸ‹", + "Accounts_AllowUsernameChange" : "អនុញ្ញាážâ€‹áž±áŸ’យ​ផ្លាស់​ប្ážáž¼â€‹ážšâ€‹ážˆáŸ’មោះ​អ្នក​ប្រើ", + "Accounts_AvatarResize" : "ប្ážáž¼â€‹ážšâ€‹áž‘ំហំ Avatar", + "Accounts_AvatarSize" : "ទំហំ Avatar", + "Accounts_AvatarStorePath" : "ទីážáž¶áŸ†áž„ផ្ទុក Avatar", + "Accounts_AvatarStoreType" : "ប្រភáŸáž‘បន្ទុក Avatar", "Accounts_denyUnverifiedEmail" : "រាំងážáŸ’ទប់អ្នកមិនបានផ្ទៀážáž•áŸ’ទាážáŸ‹áž¢áŸŠáž¸áž˜áŸ‚áž›", "Accounts_EmailVerification" : "ការ​ផ្ទៀងផ្ទាážáŸ‹â€‹ážáž¶áž˜â€‹â€‹áž¢áŸŠáž¸â€‹áž˜áŸ‰áŸ‚​ល", + "Accounts_ManuallyApproveNewUsers" : "ទទួល​អ្នក​ប្រើប្រាស់​ážáŸ’មី​ដោយ​ផ្ទាល់", + "Accounts_OAuth_Custom_Authorize_Path" : "ទីážáž¶áŸ†áž„ផ្ទៀážáž•áŸ’ទាážáŸ‹", + "Accounts_OAuth_Custom_Button_Color" : "ពណ៌ប៊ូážáž»áž„", + "Accounts_OAuth_Custom_Button_Label_Color" : "ពណ៌អážáŸ’ážáž”ទប៊ូážáž»áž„", + "Accounts_OAuth_Custom_Button_Label_Text" : "អážáŸ’ážáž”ទ​ប៊ូážáž»áž„", + "Accounts_OAuth_Custom_Enable" : "អនុញ្ញាáž", + "Accounts_OAuth_Custom_id" : "áž›áŸážážŸáž˜áŸ’គាល់", + "Accounts_OAuth_Custom_Identity_Path" : "ទីទាំងអážáŸ’ážážŸáž‰áŸ’ញាណ", + "Accounts_OAuth_Custom_Secret" : "ការ​សម្ងាážáŸ‹", + "Accounts_OAuth_Custom_Token_Path" : "ទីទាំង Token", + "Accounts_OAuth_Custom_URL" : "URL", "Accounts_OAuth_Facebook" : "ចូល​ážáž¶áž˜â€‹áž ្វáŸážŸáž”៊ូក", "Accounts_OAuth_Facebook_id" : "áž›áŸážâ€‹ážŸáž˜áŸ’គាល់​កម្មវិធី​ហ្វáŸážŸáž”៊ូក", "Accounts_OAuth_Facebook_secret" : "ហ្វáŸâ€‹ážŸâ€‹áž”៊ុ​ក​សម្ងាážáŸ‹", "Accounts_OAuth_Github" : "ចូល​ážáž¶áž˜ Github", "Accounts_OAuth_Github_id" : "áž›áŸážâ€‹ážŸáž˜áŸ’គាល់ GitHub", "Accounts_OAuth_Github_secret" : "GitHub សម្ងាážáŸ‹", + "Accounts_OAuth_Gitlab" : "OAuth បានអនុញ្ញាážáž·", + "Accounts_OAuth_Gitlab_id" : "áž›áŸážážŸáž˜áŸ’គាល់ Gitlab", + "Accounts_OAuth_Gitlab_secret" : "Client សម្ងាážáŸ‹", "Accounts_OAuth_Google" : "ចូល​ážáž¶áž˜ Google", "Accounts_OAuth_Google_id" : "áž›áŸážâ€‹ážŸáž˜áŸ’គាល់ Google", "Accounts_OAuth_Google_secret" : "Google សម្ងាážáŸ‹", @@ -19,21 +40,10 @@ "Accounts_OAuth_Meteor" : "ចូល​ážáž¶áž˜ Meteor", "Accounts_OAuth_Meteor_id" : "áž›áŸážâ€‹ážŸáž˜áŸ’គាល់ Meteor ", "Accounts_OAuth_Meteor_secret" : "Meteor សម្ងាážáŸ‹", - "Accounts_ManuallyApproveNewUsers" : "ទទួល​អ្នក​ប្រើប្រាស់​ážáŸ’មី​ដោយ​ផ្ទាល់", - "Accounts_RegistrationRequired" : "ážáŸ’រូវ​ចុះ​ឈ្មោះ", "Accounts_OAuth_Twitter" : "ចូលážáž¶áž˜ Twitter", "Accounts_OAuth_Twitter_id" : "áž›áŸážážŸáž˜áŸ’គាល់ Twitter", "Accounts_OAuth_Twitter_secret" : "Twitter សម្ងាážáŸ‹", - "Accounts_OAuth_Custom_id" : "áž›áŸážážŸáž˜áŸ’គាល់", - "Accounts_OAuth_Custom_URL" : "URL", - "Accounts_OAuth_Custom_Token_Path" : "ទីទាំង Token", - "Accounts_OAuth_Custom_Identity_Path" : "ទីទាំងអážáŸ’ážážŸáž‰áŸ’ញាណ", - "Accounts_OAuth_Custom_Authorize_Path" : "ទីážáž¶áŸ†áž„ផ្ទៀážáž•áŸ’ទាážáŸ‹", - "Accounts_OAuth_Custom_Secret" : "ការ​សម្ងាážáŸ‹", - "Accounts_OAuth_Custom_Enable" : "អនុញ្ញាáž", - "Accounts_OAuth_Custom_Button_Label_Text" : "អážáŸ’ážáž”ទ​ប៊ូážáž»áž„", - "Accounts_OAuth_Custom_Button_Label_Color" : "ពណ៌អážáŸ’ážáž”ទប៊ូážáž»áž„", - "Accounts_OAuth_Custom_Button_Color" : "ពណ៌ប៊ូážáž»áž„", + "Accounts_RegistrationRequired" : "ážáŸ’រូវ​ចុះ​ឈ្មោះ", "Activate" : "ធ្វើ​ឱ្យ​សកម្ម", "Add_custom_oauth" : "បន្ážáŸ‚ម oauth ផ្ទាល់​ážáŸ’លួន", "Add_Members" : "ážáŸ‚ម​សមាជិក", @@ -50,6 +60,7 @@ "are_also_typing" : "គឺ​កំពុង​ព្យាយាម​ផង​ដែរ", "are_typing" : "កំពុង​វាយ", "Are_you_sure" : "ážáž¾â€‹áž¢áŸ’នក​ច្បាស់​ហើយ​ឬ?", + "Auto_Load_Images" : "ផ្ទុក​រូបភាព​ដោយ​ស្វáŸáž™áž”្រវážáŸ’ážáž·", "Avatar_changed_successfully" : "ផ្លាស់​ប្ážáž¼â€‹ážšâ€‹ážšáž¼áž”​ážáŸ†â€‹áž“ាង​ដោយ​ជោគជáŸáž™", "away" : "ឆ្ងាយ", "Away" : "ឆ្ងាយ", @@ -57,7 +68,6 @@ "Away_female" : "ឆ្ងាយ", "away_male" : "ឆ្ងាយ", "Away_male" : "ឆ្ងាយ", - "Auto_Load_Images" : "ផ្ទុក​រូបភាព​ដោយ​ស្វáŸáž™áž”្រវážáŸ’ážáž·", "Back_to_login" : "ážáŸ’រឡប់​មក​ឡុក​ចូល", "bold" : "ក្រាស់", "busy" : "រវល់", @@ -71,6 +81,7 @@ "Channels" : "ប៉ុស្ážáž·áŸ", "Channels_list" : "បណ្ážáž¶áž”៉ុស្ážáž·áŸâ€‹ážŸáž¶áž’ារណៈ", "Chat_Rooms" : "បន្ទប់​ពិភាក្សា", + "Clear_all_unreads_question" : "ចង់ជម្រះចោលគ្រប់សារមិនបានអានឬ?", "close" : "បិទ", "coming_soon" : "មក​ដល់​ឆាប់ៗ", "Commands" : "ឃ្លាបញ្ជា", @@ -84,12 +95,13 @@ "Create_new_private_group" : "បង្កើážâ€‹áž€áŸ’រុម​ឯកជន", "Create_new_public_channel" : "បង្កើážâ€‹áž”៉ុស្ážáž·áŸâ€‹ážŸáž¶áž’ារណៈ​ážáŸ’មី", "Created_at" : "បាន​បង្កើážâ€‹áž€áž¶áž›â€‹áž–ី", - "Custom_oauth_unique_name" : "កំណážáŸ‹ oauth ឲ្យមានឈ្មោះážáŸ‚មួយគážáŸ‹", "Custom_oauth_helper" : "áž–áŸáž›áž¢áŸ’នកកំពុងកំណážáŸ‹ OAuth Provider នោះអ្នកនឹងទទួល URL បញ្ជាក់មួយážáŸ’រឡប់មកវិញ, ដែលប្រើ <pre>%s</pre>", + "Custom_oauth_unique_name" : "កំណážáŸ‹ oauth ឲ្យមានឈ្មោះážáŸ‚មួយគážáŸ‹", "days" : "ážáŸ’ងៃ", "Deactivate" : "ធ្វើឲ្យមិនសកម្ម", - "Delete_User_Warning" : "ការ​លប់​អ្នក​ប្រើប្រាស់ នឹង​ážáŸ’រូវ​លប់​​គ្រប់​សារ​​របស់​​គាážáŸ‹â€‹áž•áž„​ដែរ។ ដូច​នáŸáŸ‡â€‹áž˜áž·áž“​អាច​ធ្វើ​បាន​ទ០។", "Delete" : "លុប", + "Delete_Room_Warning" : "ការលប់បន្ទប់មួយនឹងážáŸ’រូវលប់ចោលទាំងអស់នូវរាល់សារដែលបានប្រកាសនៅក្នុងបន្ទប់នáŸáŸ‡, ដំណើរការនáŸáŸ‡áž˜áž·áž“ទាន់បានបញ្ចប់ទáŸ", + "Delete_User_Warning" : "ការ​លប់​អ្នក​ប្រើប្រាស់ នឹង​ážáŸ’រូវ​លប់​​គ្រប់​សារ​​របស់​​គាážáŸ‹â€‹áž•áž„​ដែរ។ ដូច​នáŸáŸ‡â€‹áž˜áž·áž“​អាច​ធ្វើ​បាន​ទ០។", "Deleted" : "បាន​លប់!", "Desktop_Notifications" : "ជំនូនដំណឹងលើ Desktop", "Desktop_Notifications_Disabled" : "ជំនូនដំណឹងលើ Desktop មិនបានអនុញ្ញាážáž·, សូមផ្លាស់ប្ážáž¼ážšáž€áž¶ážšáž€áŸ†ážŽážáŸ‹áž“ៅលើ Browser របស់អ្នកប្រសិនបើចង់អនុញ្ញážáž·ážœáž¶", @@ -120,6 +132,7 @@ "FileUpload_Enabled" : "អនុញ្ញាážâ€‹áž±áŸ’យ​ផ្ទុក​ឡើង​ឯកសារ", "FileUpload_MaxFileSize" : "ទំហំអážáž·áž”រិមាកំណážáŸ‹ážŸáž˜áŸ’រាប់ការផ្ទុកឡើយឯកសារ(áž‚áž¹ážáž‡áž¶áž”ៃ)", "FileUpload_MediaTypeWhiteList" : "ប្រើសញ្ញា ក្បៀស(,) ដើម្បីបែងចែកបញ្ជីប្រភáŸáž‘មáŸážŒáŸ€", + "FileUpload_MediaTypeWhiteListDescription" : "ប្រើសញ្ញា ក្បៀស(,) ដើម្បីបែងចែងប្រភáŸáž‘ Media ក្នុងបញ្ជី", "Follow_social_profiles" : "ážáž¶áž˜â€‹ážŠáž¶áž“​​​បណ្ážáž¶â€‹áž‚ណនីបណ្ážáž¶áž‰â€‹ážŸáž„្គម​របស់​យើង​, មើល​យើង​លើ​ github និង​ចែក​រំលែក​បទពិសោធនáŸâ€‹ážšáž”ស់​អ្នក​ជាមួយ​ rocket.chat app នៅ​លើ​ក្ážáž¶ážšážƒáŸ€áž“​របស់​យើង", "Forgot_password" : "ភ្លáŸáž…​ពាក្យ​សម្ងាážáŸ‹", "Fork_it_on_github" : "ទៅ​មើល​វា​លើ github", @@ -128,13 +141,17 @@ "Get_to_know_the_team" : "ទៅ​ស្គាល់ Rocket.Team", "github_no_public_email" : "អ្នក​មិន​មាន​អ៊ីមែល​សាធារណៈ​ក្នុង​ GitHub នៅ​ឡើយ​ទáŸ", "Give_a_unique_name_for_the_custom_oauth" : "ផ្ážáž›áŸ‹â€‹áž±áŸ’យ​ឈ្មោះ​ážáŸ‚​មួយ​គážáŸ‹â€‹ážŸáž˜áŸ’រាប់ oauth ផ្ទាល់​ážáŸ’លួន", - "Have_your_own_chat" : "អ្នក​មាន Web Chat ផ្ទាល់​ážáŸ’លួនហើ​យឬ។ អភិវឌ្ឃនáŸâ€‹áž‡áž¶áž˜áž½áž™â€‹ Meteor.com, Rocket.Chat គឺ​ជា​ដំណោះ​ស្រាយ​ដáŸâ€‹áž›áŸ’អ​បំផុážâ€‹ážŸáž˜áŸ’រាប់អ្នក​អភិវឌ្ážáž“០ក្នុង​ការ​បង្កើហWeb Chat Plateform។", "Has_more" : "សញ្ញា Has ច្រើនទៀáž", + "Have_your_own_chat" : "អ្នក​មាន Web Chat ផ្ទាល់​ážáŸ’លួនហើ​យឬ។ អភិវឌ្ឃនáŸâ€‹áž‡áž¶áž˜áž½áž™â€‹ Meteor.com, Rocket.Chat គឺ​ជា​ដំណោះ​ស្រាយ​ដáŸâ€‹áž›áŸ’អ​បំផុážâ€‹ážŸáž˜áŸ’រាប់អ្នក​អភិវឌ្ážáž“០ក្នុង​ការ​បង្កើហWeb Chat Plateform។", "Hide_room" : "លាក់​បន្ទប់", "History" : "ប្រវážáŸ’ážáž·", "hours" : "ម៉ោង", "Incorrect_Password" : "ឃ្លាសំងាážáŸ‹áž˜áž·áž“ážáŸ’រឹមážáŸ’រូវ", "inline_code" : "inline_code", + "Install_FxOs" : "ដំឡើង Rocket.Chat នៅ​លើ Firefox របស់​អ្នក", + "Install_FxOs_done" : "អស្ចារ្យណាស់ឥឡូវអ្នកអាចប្រើប្រាស់ Rocket.Chat ážáž¶áž˜ážšáž™áŸˆ Icon នៅលើ Homescreen។ សូមរីករាយជាមួយ Rocket.Chat!", + "Install_FxOs_error" : "សុំទោស ដែលវាមិនដំណើរការážážŽáŸˆáž˜áž¶áž“បញ្ហាលáŸáž…ឡើងដូចážáž¶áž„ក្រោម", + "Install_FxOs_follow_instructions" : "សូមបញ្ជាក់ការដំឡើងកម្មវិធីនáŸáŸ‡áž“ៅលើឧបករណáŸážšáž”ស់អ្នក(ចុច \"Install\" áž–áŸáž›áž”ញ្ចាក់)", "Invalid_confirm_pass" : "ពាក្យ​សម្ងាážáŸ‹â€‹áž”ញ្ជាក់​មិន​ដូច​ពាក្យ​សម្ងាážáŸ‹â€‹áž”ាន​បញ្ចូល​", "Invalid_email" : "អ៊ី​មែល​ដែល​បញ្ចូល​មិន​ážáŸ’រឹម​ážáŸ’រូវ", "Invalid_name" : "ឈ្មោះ​មិន​​អាច​ទំនáŸážš", @@ -168,14 +185,17 @@ "Layout_Sidenav_Footer_description" : "​ទំហំ​បាន​គឺ 260x70", "Layout_Terms_of_Service" : "áž›áŸáž€áŸ’ážážáŸážŽáŸ’ឌ​នៃ​សáŸážœáž¶áž€áž˜áŸ’ម", "LDAP" : "ប្រើ LDAP", - "LDAP_Dn" : " LDAP DN", + "LDAP_Bind_Search" : "ចំណងស្វែងរក", + "LDAP_DN" : " LDAP DN", + "LDAP_Enable" : "អនុញ្ញាážáž· LDAP", "LDAP_Port" : "ច្រក LDAP", + "LDAP_Sync_User_Data" : "រក្សាទិន្ននáŸáž™ User ដោយ Sync ជាមួយ Server", "LDAP_Url" : "URL របស់ LDAP", "Leave_room" : "áž…áŸáž‰â€‹áž–ីបន្ទប់", "line" : "ជួរ", "Load_more" : "មើល​ទៀáž", - "Loading_more_from_history" : "លោážáž…្រើនទៀážáž–ីប្រវážáŸ’ážáž·", "Loading..." : "កំពុង​ដំណើរការ...", + "Loading_more_from_history" : "លោážáž…្រើនទៀážáž–ីប្រវážáŸ’ážáž·", "Loading_suggestion" : "កំពុង​មើល​ការ​សម្រáŸáž…​ចិážáŸ’áž...", "Login" : "ឡុក​ចូល", "Login_with" : "ឡុក​ចូល​ជាមួយ %s", @@ -190,16 +210,17 @@ "Message_AllowDeleting" : "អនុញ្ញាážâ€‹áž±áŸ’យ​មាន​ការ​លុប​សារ", "Message_AllowEditing" : "អនុញ្ញាážâ€‹áž±áŸ’យ​មាន​ការ​កែ​សម្រួល​សារ", "Message_AllowEditing_BlockEditInMinutes" : "បិទការកែស្រួលសារបន្ទាប់ (ជាចំនួននាទី ឬ0ដើម្បីបិទចោល)", + "Message_AllowEditing_BlockEditInMinutesDescription" : "បញ្ចូលលáŸáž 0 ដើម្បីបិទការ Block", + "Message_AllowPinning" : "អនុញ្ញážáž·â€‹ážáŸ’ទស់សារ​", "Message_AudioRecorderEnabled" : "ការážážážŸáž˜áŸ’áž›áŸáž„បានអនុញ្ញាážáž·", "Message_deleting_not_allowed" : "ការ​លប់សារ​មិន​ážáŸ’រូវ​បាន​អនុញ្ញាážáž·", - "Message_editing_not_allowed" : "ការ​កែ​សម្រួល​សារ​មិន​ážáŸ’រូវ​បាន​អនុញ្ញាážáž·", "Message_editing_blocked" : "សារ​នáŸáŸ‡â€‹áž˜áž·áž“​អាច​ážáŸ’រូវ​បាន​កែប្រែ​ទៀážâ€‹áž‘áŸ", + "Message_editing_not_allowed" : "ការ​កែ​សម្រួល​សារ​មិន​ážáŸ’រូវ​បាន​អនុញ្ញាážáž·", + "Message_KeepHistory" : "រក្សា​​ប្រវážáŸ’ážáž·â€‹ážŸáž¶ážš", "Message_MaxAllowedSize" : "ទំហំអážáž·áž”រមាដែលážáŸ’រូវបានអនុញ្ញាážážŸáž¶ážš", + "Message_pinned" : "សារ\n", "Message_pinning_not_allowed" : "ការážáŸ’ទាស់​សារ​មិន​អនុញ្ញាážáž·â€‹", - "Message_AllowPinning" : "អនុញ្ញážáž·â€‹ážáŸ’ទស់សារ​", - "Message_KeepHistory" : "រក្សា​​ប្រវážáŸ’ážáž·â€‹ážŸáž¶ážš", "Message_removed" : "សារ​បាន​លប់", - "Message_pinned" : "សារ\n", "Message_ShowDeletedStatus" : "បង្ហាញ​ស្ážáž¶áž“ភាព​ដែល​បាន​លុប", "Message_ShowEditedStatus" : "បង្ហាញ​ស្ážáž¶áž“ភាព​អážáŸ’ážáž”ទ​​ដែល​បាន​កែ​សម្រួល", "Message_ShowFormattingTips" : "បង្ហាញទ្រង់ទ្រាយដំបូន្មាន", @@ -222,29 +243,31 @@ "Name_cant_be_empty" : "ឈ្មោះ​មិន​អាច​ទទáŸ", "New_messages" : "សារ​ážáŸ’មី", "New_password" : "ពាក្យ​សម្ងាážáŸ‹â€‹ážáŸ’មី", + "No_channel_with_name_%s_was_found" : "មិន​មាន​ប៉ុស្ážáž·áŸâ€‹ážˆáŸ’មោះ <strong>\"%s\"</strong> ឡើយ​", "No_channels_yet" : "អ្នក​មិន​មែន​ជា​សមាជិក​នៃ​ប៉ុស្ážáž·áŸâ€‹ážŽáž¶â€‹áž˜áž½áž™â€‹áž¡áž¾áž™", "No_direct_messages_yet" : "អ្នក​មិន​ធ្លាប់​បាន​ធ្វើ​ការ​ពិភាក្សា​នៅ​ឡើយ", "No_favorites_yet" : "អ្នក​មិន​ធ្លាប់​បាន​កំណážáŸ‹â€‹ážáŸ’រា​ពáŸáž‰â€‹áž…áž·ážáŸ’ážâ€‹ážŽáž¶áž˜áž½áž™â€‹áž¡áž¾áž™", + "No_group_with_name_%s_was_found" : "មិន​មាន​ក្រុម​ឯក​ជន​​ឈ្មោះ <strong>\"%s\"</strong> ឡើយ", "No_groups_yet" : "អ្នក​មិន​ទាន់​មាន​ក្រុម​ឯកជន​នៅឡើយ", "No_permission_to_view_room" : "អ្នក​មិន​មាន​សិទ្ធ​មើល​បន្ទប់​នáŸáŸ‡â€‹áž¡áž¾áž™", - "No_channel_with_name_%s_was_found" : "មិន​មាន​ប៉ុស្ážáž·áŸâ€‹ážˆáŸ’មោះ <strong>\"%s\"</strong> ឡើយ​", - "No_group_with_name_%s_was_found" : "មិន​មាន​ក្រុម​ឯក​ជន​​ឈ្មោះ <strong>\"%s\"</strong> ឡើយ", "No_user_with_username_%s_was_found" : "មិន​មាន​អ្នក​ប្រើប្រាស់​ឈ្មោះ <strong>\"%s\"</strong> ឡើយ", "Not_allowed" : "មិន​បាន​អនុញ្ញាážáŸ’ážáž·", "Not_found_or_not_allowed" : "មិន​ប្រទះ ឬ​មិន​អនុញ្ញាážáž·", "Nothing_found" : "គ្មាន​អ្វី​ប្រទះ", "Notify_all_in_this_room" : "ជូន​ដំណឹង​ទាំង​អស់​នៅ​ក្នុង​បន្ទប់​នáŸáŸ‡", - "Old_Password" : "ឃ្លាសម្ងាážáŸ‹áž…ាស់", "Old_and_new_password_required" : "អ្នកážáŸ’រូវážáŸ‚ផ្ážáž›áŸ‹áž‘ាំងពាក្យសម្ងាážáŸ‹áž…ាស់ áž“áž·áž„ážáŸ’មី ដើម្បីប្ážáž¼ážšáž–ាក្យសម្ងាážáŸ‹áŸ”", - "Only_you_can_see_this_message" : "មានážáŸ‚អ្នកដែលអាចឃើញសារនáŸáŸ‡", + "Old_Password" : "ឃ្លាសម្ងាážáŸ‹áž…ាស់", "Online" : "លើបណ្ážáž¶áž‰", + "Only_you_can_see_this_message" : "មានážáŸ‚អ្នកដែលអាចឃើញសារនáŸáŸ‡", "Oops!" : "អូ!", "Opt_out_statistics" : "កុំផ្ញើស្ážáž·ážáž·áž¢áž“ាមិករបស់អ្នកទៅ Rocket.Chat", "Opt_out_statistics_warning" : "ážáž¶áž˜áž€áž¶ážšáž•áŸ’ញើរស្ážáž·ážáž·áž¢áž“ាមិនរបស់អ្នក, អ្នកនឹងជួយយើងដើម្បីសម្គាល់ចំនួនករណីនៃ Rocket.Chat ដែលážáŸ’រូវបានដាក់ប្រើ ដូចជាករណីចំនួនប្រពáŸáž“្ធ ល្អកំពុងប្រើប្រាស់ ដូចនáŸáŸ‡áž™áž¾áž„អាចពង្រឹងវាបន្ážáŸ‚មទៀážáŸ” ប្រសិនបើអ្នកចង់បន្ážáž€áž¶ážšáž•áŸ’ញើរស្ážáž·ážáž·áž¢áž“ាមិនរបស់អ្នក សូមកុំធិចក្នុងប្រអប់ážáž¶áž„លើ សូមអរគុណ!", "others" : "ផ្សáŸáž„ៗ", "Password" : "ពាក្យ​សម្ងាážáŸ‹", + "Password_Change_Disabled" : "សិទ្ធជាអ្នកគ្រប់គ្រង Rocket.Chat ážáŸ’រូវបានបិទមិនឲ្យប្ážáž¼ážšáž–ាក្យសម្ងាážáŸ‹áž¡áž¾áž™", "Password_changed_successfully" : "ពាក្យ​សម្ងាážáŸ‹â€‹áž”ាន​ប្ážáž¼ážšâ€‹áž‡áŸ„គជáŸáž™", "People" : "មនុស្ស", + "Please_enter_value_for_url" : "សូមបញ្ចូលážáž˜áŸ’លៃរបស់ URL នៃ Avatar របស់អ្នក", "Please_wait" : "សូម​មáŸážáŸ’ážáž¶ážšáž„់​ចាំ", "Please_wait_activation" : "សូម​មáŸážáŸ’ážáž¶ážšáž„់​ចាំ ការងារ​នáŸáŸ‡â€‹ážáŸ’រូវ​ចំណាយ​ពáŸáž›â€‹áž”ន្ážáž·áž…", "Please_wait_statistics" : "សូម​មáŸážáŸ’ážáž¶ážšáž„់ចាំ ស្ážáž·ážáž·â€‹áž‚ឺ​កំពុង​គណនា", @@ -275,8 +298,8 @@ "Registration_Succeeded" : "ការ​ចុះឈ្មោះ​ជោគជáŸáž™", "Remember_me" : "ចងចាំ​ážáŸ’ញុំ", "Remove" : "ដកចáŸáž‰", - "Remove_custom_oauth" : "លប់ចោល oauth ផ្ទាល់ážáŸ’លួន", "Remove_Admin" : "ដក​សិទ្ធ​អ្នក​គ្រប់គ្រង", + "Remove_custom_oauth" : "លប់ចោល oauth ផ្ទាល់ážáŸ’លួន", "Reset_password" : "កំណážáŸ‹â€‹áž–ាក្យ​សម្ងាážáŸ‹â€‹áž¡áž¾áž„វិញ", "Room" : "បន្ទប់", "Room_name_changed" : "ឈ្មោះ​បន្ទប់​បាន​ប្ážáž¼ážšâ€‹áž‘ៅ​ជា: <em>__room_name__</em> ដោយ <em>__user_by__</em>", @@ -286,6 +309,10 @@ "Room_uploaded_file_list_empty" : "ពុំមានឯកសារដែលអាចប្រើបាន។", "room_user_count" : "%s អ្នក​ប្រើប្រាស់", "Rooms" : "បន្ទប់", + "S_new_messages_since_s" : "%s សារážáŸ’មីចាប់ážáž¶áŸ†áž„ពី %s", + "SAML" : "ប្រើ SAML", + "SAML_Custom_Cert" : "វិញ្ញាបនបážáŸ’រ​ផ្ទាល់ážáŸ’លួន", + "SAML_Custom_Generate_Username" : "គណនាឈ្មោះអ្នកប្រើប្រាស់", "Save" : "រក្សាទុក", "Save_changes" : "រក្សា​ទុក​ការ​ផ្លាស់​ប្ážáž¼â€‹ážš", "Save_Mobile_Bandwidth" : "រក្សាទុកកម្រិážáž”ញ្ជូនážáž¶áž˜áž‘ូរសáŸáž–្ទដៃ", @@ -316,7 +343,6 @@ "Site_Name" : "áž‚áŸáž ទំពáŸážšâ€‹ážˆáŸ’មោះ", "Site_Url" : "ážáŸ†áž”ន់ URL", "Site_Url_Description" : "ឧទាហរណáŸáŸ– https://chat.domain.com/", - "SAML" : "ប្រើ SAML", "SMTP" : "ពិធីការ SMTP", "SMTP_Host" : "ម៉ាស៊ីន SMTP", "SMTP_Password" : "ឃ្លា​សម្ងាážáŸ‹ SMTP", @@ -328,9 +354,9 @@ "Stats_Active_Users" : "អ្នក​ប្រើ​ប្រាស់​សកម្ម", "Stats_Avg_Channel_Users" : "ចំនួន​អ្នក​ប្រើប្រាស់​ជា​មធ្យម​ក្នុង​ប៉ុស្ážáž·áŸ", "Stats_Avg_Private_Group_Users" : "ចំនួន​អ្នក​ប្រើប្រាស់​ជា​មធ្យម​ក្នុងក្រុម​ឯកជន", + "Stats_Away_Users" : "អ្នក​ប្រើ​ដែល​បាន​ចាក​ឆ្ងាយ", "Stats_Max_Room_Users" : "អážáž·áž”រិមា​អ្នក​ប្រើប្រាស់​ក្នុង​បន្ទប់", "Stats_Non_Active_Users" : "អ្នក​ប្រើ​អសកម្ម", - "Stats_Away_Users" : "អ្នក​ប្រើ​ដែល​បាន​ចាក​ឆ្ងាយ", "Stats_Offline_Users" : "អ្នក​ប្រើ​ក្រៅ​ប​ណ្ážáž¶â€‹áž‰", "Stats_Online_Users" : "អ្នក​ប្រើ​លើ​បណ្ដាញ", "Stats_OS_Cpus" : "រាប់ CPU ប្រពáŸáž“្ធប្រážáž·áž”ážáŸ’ážáž·áž€áž¶ážš", @@ -349,7 +375,6 @@ "Stop_Recording" : "បញ្ឈប់​ការ​កážáŸ‹â€‹ážáŸ’រា", "strike" : "strike", "Submit" : "បញ្ចូល", - "S_new_messages_since_s" : "%s សារážáŸ’មីចាប់ážáž¶áŸ†áž„ពី %s", "The_field_is_required" : "ចន្លោះ %s ážáŸ’រូវ​បំពáŸáž‰", "True" : "áž–áž·áž", "Unnamed" : "គ្មាន​ឈ្មោះ", @@ -360,7 +385,7 @@ "Use_service_avatar" : "ប្រើ %s រូប", "Use_this_username" : "ប្រើ​ឈ្មោះ​នáŸáŸ‡", "Use_uploaded_avatar" : "ប្រើ​រូប​បាន​ផ្ទុក​ឡើង", - "User_added" : "អ្នក​ប្រើ <em>__user_added__</em> បាន​បន្ážáŸ‚ម", + "Use_url_for_avatar" : "ប្រើប្រាស់ URL សម្រាប់ Avatar", "User_added_by" : "អ្នក​ប្រើ <em>__user_added__</em> បាន​ážáŸ‚ម​ដោយ <em>__user_by__</em>.", "User_Channels" : "ប៉ុស្ážáž·áŸáž¢áŸ’នកប្រើប្រាស់", "User_has_been_activated" : "អ្នក​ប្រើ​ដែល​បាន​ធ្វើ​ឱ្យ​សកម្ម", @@ -381,13 +406,14 @@ "User_removed_by" : "អ្នក​ប្រើ <em>__user_removed__</em> បាន​ដក​ចáŸáž‰â€‹ážŠáŸ„áž™ <em>__user_by__</em>.", "User_Settings" : "ការ​កំណážáŸ‹â€‹ážšáž”ស់​អ្នក​ប្រើ", "User_updated_successfully" : "អ្នក​ប្រើប្រាស់​បាន​កែ​សម្រួល​ដោយ​ជោគជáŸáž™", - "Users" : "អ្នក​ប្រើ​ប្រាស់", "Username" : "ឈ្មោះ​សម្ងាážáŸ‹", "Username_cant_be_empty" : "ឈ្មោះ​សម្ងាážáŸ‹â€‹áž˜áž·áž“អាចទទáŸ", + "Username_Change_Disabled" : "សិទ្ធជាអ្នកគ្រប់គ្រង Rocket.Chat ážáŸ’រូវបានបិទមិនឲ្យប្ážáž¼ážšážˆáŸ’មោះអ្នកប្រើប្រាស់ឡើយ", "Username_description" : "ឈ្មោះ​សម្ងាážáŸ‹â€‹áž”ាន​អនុញ្ញាážáŸ‹â€‹áž²áŸ’យ​អ្នក​ផ្សáŸáž„​ដាក់​ស្លាក​ឈ្មោះ​អ្នក​", "Username_invalid" : "<strong>%s</strong> គឺ​ជា​ឈ្មោះ​សម្ងាážáŸ‹â€‹áž˜áž·áž“​ážáŸ’រឹម​ážáŸ’រូវ,<br/> ព្រោះ​អ្នក​អាច​ប្រើបាន​ážáŸ‚​ážáž½ážšâ€‹áž¢áž€áŸ’សរ, áž›áŸáž, ចុច áž“áž·áž„ ដក", "Username_title" : "ចុះ​ឈ្មោះ​សម្ងាážáŸ‹", "Username_unavaliable" : "<strong>%s</strong> គឺ​បាន​ប្រើហើយ :(", + "Users" : "អ្នក​ប្រើ​ប្រាស់", "View_All" : "មើល​ទាំង​អស់", "Wait_activation_warning" : "មុន​ពáŸáž›â€‹áž…ូល​ប្រើប្រាស់​គណនី​អ្នក​ážáŸ’រូវ​ážáŸ‚​ទទួល​បាន​ការ​អនុញ្ញាážáž·â€‹áž–ី​អ្នក​គ្រប់​គ្រង​ជាមុន​សិន​", "We_have_sent_password_email" : "យើងបាន​ផ្ញើរ​អ៊ីមែល​ជាមួយ​លំណែនាំ​ក្នុង​ការ​ប្ážáž¼ážšâ€‹ážƒáŸ’លា​សម្ងាážáŸ‹áŸ” ប្រសិន​បើ​អ្នក​មិន​បាន​ទទួល​អ៊ី​មែល​ទáŸâ€‹ážŸáž¼áž˜â€‹ážšáž½ážŸâ€‹ážšáž¶áž“់​មក​ទីនáŸáŸ‡â€‹ ដើម្បី​ធ្វើ​វា​ម្ážáž„​ទៀážâ€‹áŸ”", @@ -395,6 +421,7 @@ "Welcome" : "ស្វាគមន០<em>%s</em>.", "Welcome_to_the" : "ស្វាគមនáŸâ€‹áž˜áž€â€‹áž€áž¶áž“់", "With_whom" : "ជា​មួយ​នរណា", + "Yes_clear_all" : "បាទ, សម្អាážáž…ោលទាំងអស់", "Yes_delete_it" : "បាទ លប់​វា!", "you_are_in_preview_mode_of" : "អ្នក​ស្ážáž·ážâ€‹áž€áŸ’នុង​ទម្រង់​មើល​ជា​មុន​នៃ​ប៉ុស្ážáž·áŸ #<strong>__room_name__</strong>", "You_need_confirm_email" : "អ្នក​ážáŸ’រូវ​បញ្ជាក់អ៊ីមែល​ដើម្បី​ឡុកចូល!", diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json index ddf0e3c0873f1490632e01c0dd5e6de662732f40..f6e1c8fe9f8d524233f5d650a8ac471140682367 100644 --- a/i18n/ko.i18n.json +++ b/i18n/ko.i18n.json @@ -4,6 +4,17 @@ "Accounts" : "ê³„ì •", "Accounts_denyUnverifiedEmail" : "확ì¸ë˜ì§€ ì•Šì€ ì´ë©”ì¼ ê±°ë¶€", "Accounts_EmailVerification" : "ì´ë©”ì¼ í™•ì¸", + "Accounts_ManuallyApproveNewUsers" : "ì§ì ‘ 새로운 ì‚¬ìš©ìž í—ˆìš©", + "Accounts_OAuth_Custom_Authorize_Path" : "Authorize 경로", + "Accounts_OAuth_Custom_Button_Color" : "버튼 색", + "Accounts_OAuth_Custom_Button_Label_Color" : "버튼 í…스트 색", + "Accounts_OAuth_Custom_Button_Label_Text" : "버튼 í…스트", + "Accounts_OAuth_Custom_Enable" : "사용 가능", + "Accounts_OAuth_Custom_id" : "Id", + "Accounts_OAuth_Custom_Identity_Path" : "Identity 경로", + "Accounts_OAuth_Custom_Secret" : "비밀", + "Accounts_OAuth_Custom_Token_Path" : "Token 경로", + "Accounts_OAuth_Custom_URL" : "URL", "Accounts_OAuth_Facebook" : "Facebook 로그ì¸", "Accounts_OAuth_Facebook_id" : "Facebook 앱 ID", "Accounts_OAuth_Facebook_secret" : "Facebook 암호", @@ -19,21 +30,10 @@ "Accounts_OAuth_Meteor" : "Meteor 로그ì¸", "Accounts_OAuth_Meteor_id" : "Meteor ID", "Accounts_OAuth_Meteor_secret" : "Meteor 암호", - "Accounts_ManuallyApproveNewUsers" : "ì§ì ‘ 새로운 ì‚¬ìš©ìž í—ˆìš©", - "Accounts_RegistrationRequired" : "등ë¡ì‹œ 필수", "Accounts_OAuth_Twitter" : "트위터 로그ì¸", "Accounts_OAuth_Twitter_id" : "트위터 ID", "Accounts_OAuth_Twitter_secret" : "트위터 암호", - "Accounts_OAuth_Custom_id" : "Id", - "Accounts_OAuth_Custom_URL" : "URL", - "Accounts_OAuth_Custom_Token_Path" : "Token 경로", - "Accounts_OAuth_Custom_Identity_Path" : "Identity 경로", - "Accounts_OAuth_Custom_Authorize_Path" : "Authorize 경로", - "Accounts_OAuth_Custom_Secret" : "비밀", - "Accounts_OAuth_Custom_Enable" : "사용 가능", - "Accounts_OAuth_Custom_Button_Label_Text" : "버튼 í…스트", - "Accounts_OAuth_Custom_Button_Label_Color" : "버튼 í…스트 색", - "Accounts_OAuth_Custom_Button_Color" : "버튼 색", + "Accounts_RegistrationRequired" : "등ë¡ì‹œ 필수", "Activate" : "활성화", "Add_custom_oauth" : "ì‚¬ìš©ìž ì •ì˜ OAuth 추가", "Add_Members" : "멤버 추가", @@ -47,6 +47,7 @@ "are_also_typing" : "ë˜í•œ ìž…ë ¥ì¤‘", "are_typing" : "ìž…ë ¥ 중", "Are_you_sure" : "괜찮아요?", + "Auto_Load_Images" : "ì´ë¯¸ì§€ ìžë™ 로드", "Avatar_changed_successfully" : "아바타를 성공ì 으로 변경하였습니다", "away" : "ìžë¦¬ë¹„움", "Away" : "ìžë¦¬ë¹„움", @@ -54,7 +55,6 @@ "Away_female" : "ìžë¦¬ë¹„움", "away_male" : "ìžë¦¬ë¹„움", "Away_male" : "ìžë¦¬ë¹„움", - "Auto_Load_Images" : "ì´ë¯¸ì§€ ìžë™ 로드", "Back_to_login" : "로그ì¸ìœ¼ë¡œ ëŒì•„가기", "bold" : "굵게", "busy" : "ë°”ì¨", @@ -82,8 +82,8 @@ "Custom_oauth_unique_name" : "ì‚¬ìš©ìž ì •ì˜ OAuth ê³ ìœ í•œ ì´ë¦„", "days" : "ì¼", "Deactivate" : "비활성화", - "Delete_User_Warning" : "ì‚¬ìš©ìž ì‚ì œì‹œ 사용ìžì˜ ëª¨ë“ ë©”ì‹œì§€ë¥¼ ì‚ì œí•©ë‹ˆë‹¤. ì·¨ì†Œí• ìˆ˜ 없습니다.", "Delete" : "ì‚ì œ", + "Delete_User_Warning" : "ì‚¬ìš©ìž ì‚ì œì‹œ 사용ìžì˜ ëª¨ë“ ë©”ì‹œì§€ë¥¼ ì‚ì œí•©ë‹ˆë‹¤. ì·¨ì†Œí• ìˆ˜ 없습니다.", "Deleted" : "ì‚ì œ!", "Direct_Messages" : "ê·“ì†ë§", "Disable_Favorite_Rooms" : "ì¦ê²¨ì°¾ê¸° 사용안함", @@ -113,8 +113,8 @@ "Get_to_know_the_team" : "Rocket.Team 알아보기", "github_no_public_email" : "Github ê³„ì •ì— ê³µê°œëœ ì´ë©”ì¼ì´ 없습니다.", "Give_a_unique_name_for_the_custom_oauth" : "ì‚¬ìš©ìž ì •ì˜ OAuthì— ëŒ€í•œ ê³ ìœ ì´ë¦„ ì§€ì •", - "Have_your_own_chat" : "ë‹¹ì‹ ë§Œì˜ ì›¹ ì±„íŒ…ì„ ë§Œë“œì„¸ìš”. Meteor.com으로 개발한 Rocket.Chatì€ ìžì‹ ë§Œì˜ ì±„íŒ… 플랫í¼ì„ ë§Œë“¤ê³ ê°œì„ í•´ 나아갈 개발ìžë“¤ì„ 위한 훌ë¥í•œ 솔루션입니다.", "Has_more" : "ë” ë§Žì´", + "Have_your_own_chat" : "ë‹¹ì‹ ë§Œì˜ ì›¹ ì±„íŒ…ì„ ë§Œë“œì„¸ìš”. Meteor.com으로 개발한 Rocket.Chatì€ ìžì‹ ë§Œì˜ ì±„íŒ… 플랫í¼ì„ ë§Œë“¤ê³ ê°œì„ í•´ 나아갈 개발ìžë“¤ì„ 위한 훌ë¥í•œ 솔루션입니다.", "Hide_room" : "ë°© 숨김", "History" : "ì´ë ¥", "hours" : "시간", @@ -153,14 +153,14 @@ "Layout_Sidenav_Footer_description" : "바닥글 í¬ê¸°ëŠ” 260x70입니다.", "Layout_Terms_of_Service" : "ì´ìš©ì•½ê´€", "LDAP" : "LDAP", - "LDAP_Dn" : "LDAP DN", + "LDAP_DN" : "LDAP DN", "LDAP_Port" : "LDAP í¬íŠ¸", "LDAP_Url" : "LDAP URL", "Leave_room" : "ë°© 나가기", "line" : "밑줄", "Load_more" : "ë” ë³´ê¸°", - "Loading_more_from_history" : "ì´ì „ ë‚´ìš©ì—ì„œ ê°€ì ¸ì˜¤ê¸°", "Loading..." : "로딩 중 ...", + "Loading_more_from_history" : "ì´ì „ ë‚´ìš©ì—ì„œ ê°€ì ¸ì˜¤ê¸°", "Loading_suggestion" : "ì œì•ˆ 로딩중...", "Login" : "로그ì¸", "Login_with" : "%s으로 로그ì¸", @@ -175,15 +175,15 @@ "Message_AllowDeleting" : "메시지 ì‚ì œ 허용", "Message_AllowEditing" : "메시지 ìˆ˜ì • 허용", "Message_AllowEditing_BlockEditInMinutes" : "ì´í›„ë¡œ 메시지 ìˆ˜ì • ì•ˆë¨ (분 - 0 ì€ ì‚¬ìš©ì•ˆí•¨)", + "Message_AllowPinning" : "허용 메시지 ê³ ì •", "Message_deleting_not_allowed" : "메시지 ì‚ì œë¥¼ í• ìˆ˜ 없습니다.", - "Message_editing_not_allowed" : "메시지 ìˆ˜ì •ì„ í• ìˆ˜ 없습니다.", "Message_editing_blocked" : "메시지를 ë” ì´ìƒ ìˆ˜ì •í• ìˆ˜ 없습니다.", + "Message_editing_not_allowed" : "메시지 ìˆ˜ì •ì„ í• ìˆ˜ 없습니다.", + "Message_KeepHistory" : "메시지 기ë¡ì„ ìœ ì§€", "Message_MaxAllowedSize" : "메시지 최대 허용 í¬ê¸°", + "Message_pinned" : "메시지가 ê³ ì •ë˜ì—ˆìŠµë‹ˆë‹¤.", "Message_pinning_not_allowed" : "메시지를 ê³ ì •í• ìˆ˜ 없습니다.", - "Message_AllowPinning" : "허용 메시지 ê³ ì •", - "Message_KeepHistory" : "메시지 기ë¡ì„ ìœ ì§€", "Message_removed" : "메시지 ì œê±°", - "Message_pinned" : "메시지가 ê³ ì •ë˜ì—ˆìŠµë‹ˆë‹¤.", "Message_ShowDeletedStatus" : "ì‚ì œëœ ìƒíƒœ 확ì¸", "Message_ShowEditedStatus" : "ìˆ˜ì • ìƒíƒœ 확ì¸", "Meta" : "메타", @@ -204,22 +204,22 @@ "Name_cant_be_empty" : "ì´ë¦„ì„ ë¹„ì›Œ 둘 수 없습니다", "New_messages" : "새로운 메시지", "New_password" : "새로운 암호", + "No_channel_with_name_%s_was_found" : "<strong>\"%s\"</strong> ì±„ë„ ì´ë¦„ì„ ì°¾ì„ ìˆ˜ 없습니다!", "No_channels_yet" : "ì–´ë– í•œ 채ë„ì—ë„ ê°€ìž…í•˜ì§€ 않았습니다.", "No_direct_messages_yet" : "ì–´ë–¤ ê·“ì†ë§ë„ 하지 않았습니다.", "No_favorites_yet" : "ì¦ê²¨ì°¾ê¸°ê°€ 없습니다.", + "No_group_with_name_%s_was_found" : "<strong>\"%s\"</strong> 비밀 그룹 ì´ë¦„ì„ ì°¾ì„ ìˆ˜ 없습니다!", "No_groups_yet" : "ê°œì¸ ê·¸ë£¹ì„ ë§Œë“¤ì§€ 않았습니다.", "No_permission_to_view_room" : "ì´ ë°©ì„ ë³¼ 수 있는 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤", - "No_channel_with_name_%s_was_found" : "<strong>\"%s\"</strong> ì±„ë„ ì´ë¦„ì„ ì°¾ì„ ìˆ˜ 없습니다!", - "No_group_with_name_%s_was_found" : "<strong>\"%s\"</strong> 비밀 그룹 ì´ë¦„ì„ ì°¾ì„ ìˆ˜ 없습니다!", "No_user_with_username_%s_was_found" : "<strong>\"%s\"</strong> ì‚¬ìš©ìž ì´ë¦„ì„ ê°€ì§„ 사용ìžë¥¼ ì°¾ì„ ìˆ˜ 없습니다!", "Not_allowed" : "허용ë˜ì§€ ì•ŠìŒ", "Not_found_or_not_allowed" : "ì°¾ì„ ìˆ˜ 없거나 허용ë˜ì§€ 않았습니다", "Nothing_found" : "ì°¾ì„ ìˆ˜ 없습니다", "Notify_all_in_this_room" : "ì´ ë°©ì— ìžˆëŠ” ëª¨ë“ ì´ì—게 알림", - "Old_Password" : "기존 암호", "Old_and_new_password_required" : "암호를 변경하기 위해서는 기존 암호와 새로 ì‚¬ìš©í• ì•”í˜¸ë¥¼ ìž…ë ¥í•´ì•¼í•©ë‹ˆë‹¤.", - "Only_you_can_see_this_message" : "ì´ ë©”ì‹œì§€ëŠ” ë‹¹ì‹ ë§Œ ë³¼ 수 있습니다", + "Old_Password" : "기존 암호", "Online" : "온ë¼ì¸", + "Only_you_can_see_this_message" : "ì´ ë©”ì‹œì§€ëŠ” ë‹¹ì‹ ë§Œ ë³¼ 수 있습니다", "Oops!" : "ì•„ì°¨", "Opt_out_statistics" : "ë‚˜ì˜ ì–´ë–¤ 무기명 í†µê³„ë„ Rocket.chat으로 보내지 마ì‹ì‹œì˜¤.", "Opt_out_statistics_warning" : "ë‹¹ì‹ ì˜ ë¬´ê¸°ëª… 통계 ìžë£Œë¥¼ ì „ì†¡í•˜ëŠ” 것으로 우리는 ëª‡ê°œì˜ Rocket.Chat 서비스를 설치하였는지 ì•Œ 수 있으며 얼마나 ì‹œìŠ¤í…œì´ ìž˜ ìž‘ë™í•˜ëŠ”지 ì•Œ ìˆ˜ë¡ ì„œë¹„ìŠ¤ë¥¼ ê°œì„ í•˜ëŠ”ë° ë„ì›€ì´ ë©ë‹ˆë‹¤. ë§Œì¼ ë¬´ê¸°ëª… 통계 ì •ë³´ë¥¼ ì „ì†¡í•˜ê¸¸ ì›í•˜ì‹œë©´ ìœ„ì˜ ì²´í¬ë°•ìŠ¤ë¥¼ ì„¤ì •ì„ í•´ì œí•´ì£¼ì‹ì‹œì˜¤. ê³ ë§™ìŠµë‹ˆë‹¤.", @@ -256,8 +256,8 @@ "Registration_Succeeded" : "ë“±ë¡ ì„±ê³µ", "Remember_me" : "ìžë™ 로그ì¸", "Remove" : "ì‚ì œ", - "Remove_custom_oauth" : "ì‚¬ìš©ìž ì •ì˜ OAuth ì œê±°", "Remove_Admin" : "ê´€ë¦¬ìž ê¶Œí•œ ì œê±°", + "Remove_custom_oauth" : "ì‚¬ìš©ìž ì •ì˜ OAuth ì œê±°", "Reset_password" : "암호 ìž¬ì„¤ì •", "Room" : "ë°©", "Room_name_changed" : "ë°© ì´ë¦„ 변경: <em>__user_by__</em>ì—ì„œ <em>__room_name__</em>ë¡œ.", @@ -265,6 +265,7 @@ "Room_not_found" : "ë°©ì„ ì°¾ì„ ìˆ˜ 없습니다.", "room_user_count" : "%s 사용ìž", "Rooms" : "ë°©", + "SAML" : "SAML", "Save" : "ì €ìž¥", "Save_changes" : "ë³€ê²½ì‚¬í• ì €ìž¥", "Save_Mobile_Bandwidth" : "ëª¨ë°”ì¼ ëŒ€ì—í ì €ìž¥", @@ -293,7 +294,6 @@ "Silence" : "무언", "since_creation" : "%s ì´í›„", "Site_Name" : "사ì´íŠ¸ ì´ë¦„:", - "SAML" : "SAML", "SMTP" : "SMTP", "SMTP_Host" : "SMTP 호스트", "SMTP_Password" : "SMTP 암호", @@ -305,9 +305,9 @@ "Stats_Active_Users" : "활성 사용ìž", "Stats_Avg_Channel_Users" : "ì±„ë„ ì‚¬ìš©ìž í‰ê· ", "Stats_Avg_Private_Group_Users" : "비밀 그룹 ì‚¬ìš©ìž í‰ê· ", + "Stats_Away_Users" : "ìžë¦¬ë¹„움 사용ìž", "Stats_Max_Room_Users" : "최대 ë°© 사용ìž", "Stats_Non_Active_Users" : "비활성 사용ìž", - "Stats_Away_Users" : "ìžë¦¬ë¹„움 사용ìž", "Stats_Offline_Users" : "현실 세계ì¸", "Stats_Online_Users" : "ê°€ìƒ ì„¸ê³„ì¸", "Stats_OS_Arch" : "OS Arch", @@ -338,7 +338,6 @@ "Use_service_avatar" : "아바타 %s 사용", "Use_this_username" : "ì´ ì‚¬ìš©ìž ì´ë¦„ 사용", "Use_uploaded_avatar" : "ì—…ë¡œë“œëœ ì•„ë°”íƒ€ 사용", - "User_added" : "ì‚¬ìš©ìž <em>__user_added__</em> 추가함.", "User_added_by" : "ì‚¬ìš©ìž <em>__user_added__</em>ì„/를 <em>__user_by__</em>ì— ì¶”ê°€í•¨.", "User_Channels" : "ì‚¬ìš©ìž ì±„ë„", "User_has_been_activated" : "사용ìžê°€ 활성화ë˜ì—ˆìŠµë‹ˆë‹¤", @@ -358,13 +357,13 @@ "User_removed_by" : "ì‚¬ìš©ìž <em>__user_removed__</em>ì„/를 <em>__user_by__</em>ì—ì„œ ì‚ì œë¨.", "User_Settings" : "ì‚¬ìš©ìž ì„¤ì •", "User_updated_successfully" : "사용ìžë¥¼ 성공ì 으로 ì—…ë°ì´íŠ¸í•˜ì˜€ìŠµë‹ˆë‹¤.", - "Users" : "사용ìž", "Username" : "ì‚¬ìš©ìž ì´ë¦„", "Username_cant_be_empty" : "ì‚¬ìš©ìž ì´ë¦„ì„ ë¹„ì›Œë‘˜ 수 없습니다", "Username_description" : "ì‚¬ìš©ìž ì´ë¦„ì€ ë‹¤ë¥¸ ì‚¬ëžŒì´ ë©”ì‹œì§€ì—ì„œ ì–¸ê¸‰í• ìˆ˜ 있ë„ë¡ í•˜ëŠ”ë° ì‚¬ìš©ë©ë‹ˆë‹¤.", "Username_invalid" : "<strong>&s</strong>는 ì•Œë§žì€ ì‚¬ìš©ìžëª…ì´ ì•„ë‹™ë‹ˆë‹¤,<br/> 문ìž, 숫ìž, 마침표와 ë°‘ì¤„ì„ ì‚¬ìš©í•˜ì‹ì‹œì˜¤.", "Username_title" : "ì‚¬ìš©ìž ì´ë¦„ 등ë¡", "Username_unavaliable" : "<strong>%s</strong> 는 사용중입니다. :(", + "Users" : "사용ìž", "View_All" : "ëª¨ë‘ ë³´ê¸°", "Wait_activation_warning" : "로그ì¸í•˜ê¸° ì „ì— ê´€ë¦¬ìžê°€ ê³„ì •ì„ ìˆ˜ë™ìœ¼ë¡œ 활성화시켜야합니다.", "We_have_sent_password_email" : "암호 ìž¬ì„¤ì • ìš”ì² ì´ë©”ì¼ì„ 보냈습니다. ì´ë©”ì¼ì„ 받지 못한 경우, 다시 ì‹œë„하세요.", diff --git a/i18n/ms-MY.i18n.json b/i18n/ms-MY.i18n.json index 733b93e708875f878b837b04c5c880f1ba615401..cb00194771e5a166ee2de30ac2883fba397cf453 100644 --- a/i18n/ms-MY.i18n.json +++ b/i18n/ms-MY.i18n.json @@ -4,6 +4,17 @@ "Accounts" : "Akaun", "Accounts_denyUnverifiedEmail" : "Menafikan e-mel yang tidak sah", "Accounts_EmailVerification" : "Pengesahan E-mel", + "Accounts_ManuallyApproveNewUsers" : "Secara manual meluluskan pengguna baru", + "Accounts_OAuth_Custom_Authorize_Path" : "Authorize Path", + "Accounts_OAuth_Custom_Button_Color" : "Butang Warna", + "Accounts_OAuth_Custom_Button_Label_Color" : "Butang Teks Berwarna", + "Accounts_OAuth_Custom_Button_Label_Text" : "Butang Teks", + "Accounts_OAuth_Custom_Enable" : "Aktifkan", + "Accounts_OAuth_Custom_id" : "Id", + "Accounts_OAuth_Custom_Identity_Path" : "Identity Path", + "Accounts_OAuth_Custom_Secret" : "Secret", + "Accounts_OAuth_Custom_Token_Path" : "Token Path", + "Accounts_OAuth_Custom_URL" : "URL", "Accounts_OAuth_Facebook" : "Daftar masuk Facebook", "Accounts_OAuth_Facebook_id" : "Facebook App Id", "Accounts_OAuth_Facebook_secret" : "Facebook Secret", @@ -19,21 +30,10 @@ "Accounts_OAuth_Meteor" : "Daftar masuk Meteor", "Accounts_OAuth_Meteor_id" : "Meteor Id", "Accounts_OAuth_Meteor_secret" : "Meteor Secret", - "Accounts_ManuallyApproveNewUsers" : "Secara manual meluluskan pengguna baru", - "Accounts_RegistrationRequired" : "Pendaftaran diperlukan", "Accounts_OAuth_Twitter" : "Daftar masuk Twitter", "Accounts_OAuth_Twitter_id" : "Twitter Id", "Accounts_OAuth_Twitter_secret" : "Twitter Secret", - "Accounts_OAuth_Custom_id" : "Id", - "Accounts_OAuth_Custom_URL" : "URL", - "Accounts_OAuth_Custom_Token_Path" : "Token Path", - "Accounts_OAuth_Custom_Identity_Path" : "Identity Path", - "Accounts_OAuth_Custom_Authorize_Path" : "Authorize Path", - "Accounts_OAuth_Custom_Secret" : "Secret", - "Accounts_OAuth_Custom_Enable" : "Aktifkan", - "Accounts_OAuth_Custom_Button_Label_Text" : "Butang Teks", - "Accounts_OAuth_Custom_Button_Label_Color" : "Butang Teks Berwarna", - "Accounts_OAuth_Custom_Button_Color" : "Butang Warna", + "Accounts_RegistrationRequired" : "Pendaftaran diperlukan", "Activate" : "Aktifkan", "Add_Members" : "Tambah Ahli", "Add_users" : "Tambah pengguna", @@ -44,6 +44,7 @@ "API_Analytics" : "Analisis", "API_Embed" : "Benam", "Are_you_sure" : "Adakah anda pasti?", + "Auto_Load_Images" : "Automatik Memuat Gambar", "Avatar_changed_successfully" : "Avatar berjaya ditukar", "away" : "keluar", "Away" : "Keluar", @@ -51,7 +52,6 @@ "Away_female" : "Keluar", "away_male" : "keluar", "Away_male" : "Keluar", - "Auto_Load_Images" : "Automatik Memuat Gambar", "Back_to_login" : "Kembali ke log masuk", "busy" : "sibuk", "Busy" : "Sibuk", @@ -67,6 +67,7 @@ "close" : "tutup", "coming_soon" : "akan datang", "Commands" : "Arahan", + "Compact_View" : "Paparan Kompak", "Confirm_password" : "Sahkan kata laluan anda", "Contact" : "Hubungi", "Conversation" : "Perbualan", @@ -78,8 +79,8 @@ "Created_at" : "Dibuat pada", "days" : "hari", "Deactivate" : "Nyahaktifkan", - "Delete_User_Warning" : "Memadam pengguna akan memadam semua mesej dari pengguna itu juga. Ini tidak boleh kembalikan asal.", "Delete" : "Padam", + "Delete_User_Warning" : "Memadam pengguna akan memadam semua mesej dari pengguna itu juga. Ini tidak boleh kembalikan asal.", "Deleted" : "Dipadamkan!", "Desktop_Notifications" : "Notifikasi Desktop", "Desktop_Notifications_Disabled" : "Notifikasi Desktop dinyahaktifkan. Tukar tetapan pelayar web jika anda mahukan notifikasi diaktifkan.", @@ -105,11 +106,15 @@ "Esc_to" : "Esc untuk", "False" : "Lumpuhkan", "Favorites" : "Kegemaran", + "FileUpload" : "Muat Naik Fail", + "FileUpload_Enabled" : "Naik Fail Diaktifkan", + "FileUpload_MaxFileSize" : "Fail muat naik saiz Maksimum (dalam bytes)", "Forgot_password" : "Lupa kata laluan anda", "Fork_it_on_github" : "Mencabang pada github", "From_Email" : "Daripada E-mel", "General" : "Umum", "Get_to_know_the_team" : "Kenali Rocket.Team", + "github_no_public_email" : "Anda tidak mempunyai sebarang e-mel umum pada akaun GitHub anda", "Has_more" : "Ada lagi", "Hide_room" : "Menyembunyikan bilik", "History" : "Sejarah", @@ -147,14 +152,14 @@ "Layout_Sidenav_Footer_description" : "Saiz footer ialah 260x70", "Layout_Terms_of_Service" : "Terma Perkhidmatan", "LDAP" : "LDAP", - "LDAP_Dn" : "LDAP DN", + "LDAP_DN" : "LDAP DN", "LDAP_Port" : "Port LDAP", "LDAP_Url" : "URL LDAP", "Leave_room" : "Meninggalkan bilik", "line" : "garis", "Load_more" : "Memuat lagi", - "Loading_more_from_history" : "Memuatkan lagi dari sejarah", "Loading..." : "Memuatkan...", + "Loading_more_from_history" : "Memuatkan lagi dari sejarah", "Loading_suggestion" : "Memuatkan cadangan...", "Login" : "Log masuk", "Login_with" : "Log masuk dengan %s", @@ -169,15 +174,17 @@ "Message_AllowDeleting" : "Benarkan Pemadaman Mesej", "Message_AllowEditing" : "Benarkan Penyuntingan Mesej", "Message_AllowEditing_BlockEditInMinutes" : "Sekat penyuntingan mesej selepas (dalam minit - 0 hingga melumpuhkan)", + "Message_AudioRecorderEnabled" : "Perakam Audio Diaktifkan", "Message_deleting_not_allowed" : "Pemadaman mesej tidak dibenarkan", - "Message_editing_not_allowed" : "Penyuntingan mesej tidak dibenarkan", "Message_editing_blocked" : "Mesej ini tidak boleh lagi disunting", - "Message_MaxAllowedSize" : "Saiz mesej maksimum yang dibenarkan", + "Message_editing_not_allowed" : "Penyuntingan mesej tidak dibenarkan", "Message_KeepHistory" : "Simpan Sejarah Mesej", - "Message_removed" : "Mesej dipadam", + "Message_MaxAllowedSize" : "Saiz mesej maksimum yang dibenarkan", "Message_pinned" : "Mesej dipinkan", + "Message_removed" : "Mesej dipadam", "Message_ShowDeletedStatus" : "Tunjuk Status Pemadaman", "Message_ShowEditedStatus" : "Tunjuk Status Penyuntingan", + "Message_ShowFormattingTips" : "Tunjuk Tip Pemformatan", "Messages" : "Mesej", "Meta" : "Meta", "Meta_fb_app_id" : "Facebook APP ID", @@ -196,22 +203,22 @@ "Name_cant_be_empty" : "Nama tidak boleh dibiarkan kosong", "New_messages" : "Mesej baru", "New_password" : "Kata Laluan baru", + "No_channel_with_name_%s_was_found" : "Tiada saluran dengan nama <strong>\"%s\"</strong> dijumpai!", "No_channels_yet" : "Anda bukan daripada mana-mana saluran lagi.", "No_direct_messages_yet" : "Anda tidak memulakan sebarang perbualan lagi.", "No_favorites_yet" : "Anda belum menambah sebarang kegemaran lagi.", + "No_group_with_name_%s_was_found" : "Tiada kumpulan persendirian dengan nama <strong>\"%s\"</strong> dijumpai!", "No_groups_yet" : "Anda tidak mempunyai kumpulan persendirian lagi.", "No_permission_to_view_room" : "Anda tidak mempunyai kebenaran untuk melihat bilik ini", - "No_channel_with_name_%s_was_found" : "Tiada saluran dengan nama <strong>\"%s\"</strong> dijumpai!", - "No_group_with_name_%s_was_found" : "Tiada kumpulan persendirian dengan nama <strong>\"%s\"</strong> dijumpai!", "No_user_with_username_%s_was_found" : "Tiada pengguna dengan nama pengguna <strong>\"%s\"</strong> dijumpai!", "Not_allowed" : "Tidak dibenarkan", "Not_found_or_not_allowed" : "Tidak Ditemui atau Tidak Dibenarkan", "Nothing_found" : "Tiada apa Dijumpai", "Notify_all_in_this_room" : "Memberitahu semua di dalam bilik ini", - "Old_Password" : "Kata Laluan lama", "Old_and_new_password_required" : "Anda perlu memberikan kedua-dua kata laluan lama dan baru untuk menukar kata laluan anda.", - "Only_you_can_see_this_message" : "Hanya anda yang boleh melihat mesej ini", + "Old_Password" : "Kata Laluan lama", "Online" : "Dalam talian", + "Only_you_can_see_this_message" : "Hanya anda yang boleh melihat mesej ini", "Oops!" : "Oops", "Opt_out_statistics" : "Jangan hantar statistik saya ke Rocket.Chat", "Opt_out_statistics_warning" : "Dengan menghantar statistik anda, ada akan membantu kami mengenalpasti berapa banyak", @@ -241,6 +248,7 @@ "Push_enable" : "Aktifkan", "Push_production" : "Penerbitan", "Quick_Search" : "Carian Pantas", + "Recents" : "baru-baru ini", "Record" : "Rakam", "Register" : "Mendaftar akaun baru", "Registration_Succeeded" : "Pendaftaran Berjaya", @@ -256,6 +264,8 @@ "Room_uploaded_file_list_empty" : "Tiada fail yang ada.", "room_user_count" : "Pengguna %s", "Rooms" : "Bilik", + "S_new_messages_since_s" : "%s mesej baru sejak %s", + "SAML" : "SAML", "Save" : "Simpan", "Save_changes" : "Simpan perubahan", "Save_Mobile_Bandwidth" : "Simpan Jalur lebar mudah alih", @@ -284,7 +294,6 @@ "Silence" : "Senyap", "since_creation" : "sejak %s", "Site_Name" : "Nama Laman:", - "SAML" : "SAML", "SMTP" : "SMTP", "SMTP_Host" : "Hos SMTP", "SMTP_Password" : "Kata Laluan SMTP", @@ -296,9 +305,9 @@ "Stats_Active_Users" : "Pengguna Aktif", "Stats_Avg_Channel_Users" : "Purata Pengguna Saluran", "Stats_Avg_Private_Group_Users" : "Purata Pengguna Kumpulan Persendirian", + "Stats_Away_Users" : "Pengguna Keluar", "Stats_Max_Room_Users" : "Maksimum Pengguna Bilik", "Stats_Non_Active_Users" : "Pengguna Tidak Aktif", - "Stats_Away_Users" : "Pengguna Keluar", "Stats_Offline_Users" : "Pengguna Luar talian", "Stats_Online_Users" : "Pengguna Dalam talian", "Stats_OS_Arch" : "OS Arch", @@ -318,7 +327,6 @@ "Stats_Total_Users" : "Jumlah Pengguna", "Stop_Recording" : "Berhenti Merakam", "Submit" : "Hantar", - "S_new_messages_since_s" : "%s mesej baru sejak %s", "The_field_is_required" : "Medan ini %s diperlukan", "True" : "Dayakan", "Unnamed" : "Tidak dinamakan", @@ -329,7 +337,7 @@ "Use_service_avatar" : "Guna %s avatar", "Use_this_username" : "Guna nama pengguna ini", "Use_uploaded_avatar" : "Guna avatar yang dimuat naik", - "User_added" : "Pengguna <em>__user_added__</em> ditambah.", + "Use_url_for_avatar" : "Guna url untuk avatar", "User_added_by" : "Pengguna <em>__user_added__</em> ditambah oleh <em>__user_by__</em>.", "User_Channels" : "Saluran Pengguna", "User_has_been_activated" : "Pengguna telah diaktifkan", @@ -350,13 +358,13 @@ "User_removed_by" : "Pengguna <em>__user_removed__</em> dibuang oleh <em>__user_by__</em>.", "User_Settings" : "Tetapan Pengguna", "User_updated_successfully" : "Pengguna berjaya dikemaskini", - "Users" : "Pengguna", "Username" : "Nama Pengguna", "Username_cant_be_empty" : "Nama Pengguna tidak boleh dibiarkan kosong", "Username_description" : "Nama Pengguna adalah digunakan untuk membolehkan pengguna lain menyebut anda di mesej.", "Username_invalid" : "<strong>%s</strong> bukan nama pengguna yang sah,<br/> guna hanya huruf, nombor, titik dan pemisah", "Username_title" : "Daftar nama pengguna", "Username_unavaliable" : "<strong>%s</strong> sudah digunakan :(", + "Users" : "Pengguna", "View_All" : "Lihat Semua", "Wait_activation_warning" : "Sebelum anda boleh log masuk, akaun anda mesti diaktifkan secara manual oleh pentadbiran.", "We_have_sent_registration_email" : "Kami telah menghantar kepada anda e-mel untuk mengesahkan pendaftaran anda. Jika anda tidak menerima e-mel berikut dalam masa terdekat. sila datang kembali dan cuba lagi.", diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json index 182c08aa265499697933865b0b5241b860331ee4..9c5ca9b4252d8e8807a2891aee686792c47d8b55 100644 --- a/i18n/pl.i18n.json +++ b/i18n/pl.i18n.json @@ -106,7 +106,7 @@ "Last_message" : "Ostatnia wiadomość", "Layout_Home_Body" : "Treść strony głównej", "Layout_Home_Title" : "TytuÅ‚ strony głównej", - "LDAP_Dn" : "LDAP DN", + "LDAP_DN" : "LDAP DN", "LDAP_Port" : "Port LDAP", "LDAP_Url" : "Adres URL LDAP", "Leave_room" : "Opuść pokój", @@ -150,8 +150,8 @@ "Not_found_or_not_allowed" : "Nie znaleziono lub nie dozwolone", "Nothing_found" : "Nic nie znaleziono", "Notify_all_in_this_room" : "Powiadom wszystkich w pokoju", - "Only_you_can_see_this_message" : "Tylko Ty widzisz tÄ™ wiadomość", "Online" : "Online", + "Only_you_can_see_this_message" : "Tylko Ty widzisz tÄ™ wiadomość", "Oops!" : "Ups", "others" : "inni", "Password" : "HasÅ‚o", @@ -184,6 +184,7 @@ "Room_name_changed_successfully" : "Nazwa pokoju zmieniona", "room_user_count" : "%s użytkowników", "Rooms" : "Pokoje", + "SAML" : "SAML", "Save" : "Zapisz", "Save_changes" : "Zapisz zmiany", "Search" : "Szukaj", @@ -204,7 +205,6 @@ "Showing_results" : "<p>WyÅ›wietlono <b>% s</b>wyników</p>", "Silence" : "Cisza", "since_creation" : "od %s", - "SAML" : "SAML", "SMTP" : "SMTP", "SMTP_Host" : "SMTP Host", "SMTP_Password" : "HasÅ‚o SMTP", @@ -223,7 +223,6 @@ "Use_service_avatar" : "Użyj %s avatar", "Use_this_username" : "Użyj tej nazwy użytkownika", "Use_uploaded_avatar" : "Użyj dodany awatar", - "User_added" : "Użytkownik <em>__user_added__</em> dodany.", "User_added_by" : "Użytkownik <em>__user_added__</em>dodany przez <em>__user_by__</em>.", "User_has_been_activated" : "Użytkownik zostaÅ‚ aktywowany", "User_has_been_deactivated" : "Użytkownik zostaÅ‚ deaktywowany", @@ -236,13 +235,13 @@ "User_logged_out" : "Użytkownik jest wylogowany", "User_removed_by" : "Użytkownik <em>__user_removed__</em>usuniÄ™ty przez <em>__user_by__</em>.", "User_Settings" : "Ustawienia użytkownika", - "Users" : "Użytkownicy", "Username" : "Nazwa użytkownika", "Username_cant_be_empty" : "Nazwa użytkownika nie może być pusta", "Username_description" : "Nazwa użytkownika jest używana, by inni mogli CiÄ™ wspomnieć w wiadomoÅ›ci.", "Username_invalid" : "<strong>% s</strong>nie jest prawidÅ‚owÄ… nazwÄ… użytkownika, <br / >użyj jedynie liter, cyfr, kropek i kresek", "Username_title" : "Zarejestruj użytkownika", "Username_unavaliable" : "<strong>% s</strong> jest zajÄ™te :(", + "Users" : "Użytkownicy", "View_All" : "Zobacz wszystkie", "We_have_sent_password_email" : "WysÅ‚aliÅ›my Ci e-mail z instrukcjami resetowania hasÅ‚a. JeÅ›li nie dostaniesz wiadomoÅ›ci, spróbuj proszÄ™ ponownie.", "We_have_sent_registration_email" : "WysÅ‚aliÅ›my e-mail w celu potwierdzenie Twojej rejestracji. JeÅ›li nie dostaniesz wiadomoÅ›ci, spróbuj proszÄ™ ponownie.", diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json index b54800e035b428b0a4d036bf4e51f2fa793440ae..69fd6340f1a4c3c2d0ca25f99fa7d6460879fa4b 100644 --- a/i18n/pt.i18n.json +++ b/i18n/pt.i18n.json @@ -3,14 +3,29 @@ "Access_Online_Demo" : "Acesse o Demo Online", "Accounts" : "Contas", "Accounts_AllowedDomainsList" : "Lista de domÃnios permitidos (separados por vÃrgula)", + "Accounts_AllowUsernameChange" : "Permitir alterar usuário", + "Accounts_AvatarResize" : "Redimensionar Avatares", + "Accounts_AvatarSize" : "Tamanho do Avatar", "Accounts_denyUnverifiedEmail" : "Proibir e-mail não verificado", "Accounts_EmailVerification" : "Verificação de E-mail", + "Accounts_ManuallyApproveNewUsers" : "Aprovar manualmente novos usuários", + "Accounts_OAuth_Custom_Authorize_Path" : "Authorize Path", + "Accounts_OAuth_Custom_Button_Color" : "Cor do botão", + "Accounts_OAuth_Custom_Button_Label_Color" : "Cor do texto do botão", + "Accounts_OAuth_Custom_Button_Label_Text" : "Texto do botão", + "Accounts_OAuth_Custom_Enable" : "Enable", + "Accounts_OAuth_Custom_id" : "Id", + "Accounts_OAuth_Custom_Identity_Path" : "Identity Path", + "Accounts_OAuth_Custom_Secret" : "Secret", + "Accounts_OAuth_Custom_Token_Path" : "Token Path", + "Accounts_OAuth_Custom_URL" : "URL", "Accounts_OAuth_Facebook" : "Login do Facebook", "Accounts_OAuth_Facebook_id" : "Facebook App Id", "Accounts_OAuth_Facebook_secret" : "Facebook Secret", "Accounts_OAuth_Github" : "Login do GitHub", "Accounts_OAuth_Github_id" : "GitHub Id", "Accounts_OAuth_Github_secret" : "GitHub Secret", + "Accounts_OAuth_Gitlab_id" : "Gitlab Id", "Accounts_OAuth_Google" : "Login do Google", "Accounts_OAuth_Google_id" : "Google Id", "Accounts_OAuth_Google_secret" : "Google Secret", @@ -20,21 +35,11 @@ "Accounts_OAuth_Meteor" : "Login do Meteor", "Accounts_OAuth_Meteor_id" : "Meteor Id", "Accounts_OAuth_Meteor_secret" : "Meteor Secret", - "Accounts_ManuallyApproveNewUsers" : "Aprovar manualmente novos usuários", - "Accounts_RegistrationRequired" : "Registro Obrigatório", "Accounts_OAuth_Twitter" : "Login do Twitter", "Accounts_OAuth_Twitter_id" : "Twitter Id", "Accounts_OAuth_Twitter_secret" : "Twitter Secret", - "Accounts_OAuth_Custom_id" : "Id", - "Accounts_OAuth_Custom_URL" : "URL", - "Accounts_OAuth_Custom_Token_Path" : "Token Path", - "Accounts_OAuth_Custom_Identity_Path" : "Identity Path", - "Accounts_OAuth_Custom_Authorize_Path" : "Authorize Path", - "Accounts_OAuth_Custom_Secret" : "Secret", - "Accounts_OAuth_Custom_Enable" : "Enable", - "Accounts_OAuth_Custom_Button_Label_Text" : "Texto do botão", - "Accounts_OAuth_Custom_Button_Label_Color" : "Cor do texto do botão", - "Accounts_OAuth_Custom_Button_Color" : "Cor do botão", + "Accounts_RegistrationRequired" : "Registro Obrigatório", + "Accounts_RequireNameForSignUp" : "Nome é obrigatório para cadastro", "Activate" : "Ativar", "Add_custom_oauth" : "Adicionar oauth customizado", "Add_Members" : "Adicionar membros", @@ -51,6 +56,7 @@ "are_also_typing" : "também estão digitando", "are_typing" : "estão digitando", "Are_you_sure" : "Você tem certeza?", + "Auto_Load_Images" : "Auto Carregar Imagens", "Avatar_changed_successfully" : "Avatar alterado com sucesso", "away" : "ausente", "Away" : "Ausente", @@ -58,7 +64,6 @@ "Away_female" : "Ausente", "away_male" : "ausente", "Away_male" : "ausente", - "Auto_Load_Images" : "Auto Carregar Imagens", "Back_to_login" : "Voltar para o login", "bold" : "negrito", "busy" : "ocupado", @@ -85,12 +90,12 @@ "Create_new_private_group" : "Criar um novo grupo privado", "Create_new_public_channel" : "Criar um canal público", "Created_at" : "Data criação", - "Custom_oauth_unique_name" : "Nome exclusivo para oauth customizado", "Custom_oauth_helper" : "Ao configurar o seu Provedor de OAuth, você terá que informar uma URL de retorno de chamada. Use <pre>%s</pre>.", + "Custom_oauth_unique_name" : "Nome exclusivo para oauth customizado", "days" : "dias", "Deactivate" : "Desativar", - "Delete_User_Warning" : "Excluir um usuário irá apagar todas as mensagens desse usuário também. Isso não poderá ser desfeito.", "Delete" : "Deletar", + "Delete_User_Warning" : "Excluir um usuário irá apagar todas as mensagens desse usuário também. Isso não poderá ser desfeito.", "Deleted" : "Deletado!", "Desktop_Notifications" : "Notificações Desktop", "Desktop_Notifications_Disabled" : "Notificações Desktop estão Desativadas. Mude as preferências do seu navegador se quiser habilitar as notificações.", @@ -129,8 +134,8 @@ "Get_to_know_the_team" : "Conheça o Rocket.Team", "github_no_public_email" : "Você não possui um e-mail público em sua conta do GitHub", "Give_a_unique_name_for_the_custom_oauth" : "Dê um nome exclusivo para o oauth customizado", - "Have_your_own_chat" : "Tenha seu próprio web chat. Desenvolvido com Meteor.com, o Rocket.Chat é uma excelente solução para desenvolvedores que querem construir e desenvolver sua própria plataforma de chat.", "Has_more" : "Há mais", + "Have_your_own_chat" : "Tenha seu próprio web chat. Desenvolvido com Meteor.com, o Rocket.Chat é uma excelente solução para desenvolvedores que querem construir e desenvolver sua própria plataforma de chat.", "Hide_room" : "Esconder sala", "History" : "Histórico", "hours" : "horas", @@ -169,7 +174,7 @@ "Layout_Sidenav_Footer_description" : "Tamanho do rodapé é 260x70", "Layout_Terms_of_Service" : "Termos de Serviço", "LDAP" : "LDAP", - "LDAP_Dn" : "DN LDAP", + "LDAP_DN" : "DN LDAP", "LDAP_Port" : "Porta LDAP", "LDAP_Sync_User_Data" : "Manter dados dos usuários sincronizados", "LDAP_Sync_User_Data_FieldMap" : "Mapeamento de campos do usuário", @@ -177,8 +182,8 @@ "Leave_room" : "Sair da sala", "line" : "linha", "Load_more" : "Carregar mais", - "Loading_more_from_history" : "Carregando mais a partir do histórico", "Loading..." : "Carregando...", + "Loading_more_from_history" : "Carregando mais a partir do histórico", "Loading_suggestion" : "Buscando sugestões...", "Login" : "Entrar", "Login_with" : "Login com %s", @@ -193,16 +198,16 @@ "Message_AllowDeleting" : "Permitir Exclusão de Mensagem", "Message_AllowEditing" : "Permitir Edição de Mensagem", "Message_AllowEditing_BlockEditInMinutes" : "Bloquear edição de mensagens após (em minutos - 0 para desabilitar)", + "Message_AllowPinning" : "Permitir Fixar Mensagem", "Message_AudioRecorderEnabled" : "Gravação de Ãudio Habilitada", "Message_deleting_not_allowed" : "Exclusão de mensagem não permitido", - "Message_editing_not_allowed" : "Edição de mensagem não permitido", "Message_editing_blocked" : "Esta mensagem não pode mais ser editada", + "Message_editing_not_allowed" : "Edição de mensagem não permitido", + "Message_KeepHistory" : "Manter Histórico de Mensagens", "Message_MaxAllowedSize" : "Tamanho máximo de mensagem permitido ", + "Message_pinned" : "Mensagem fixada", "Message_pinning_not_allowed" : "Não Permitir Fixar Mensagem", - "Message_AllowPinning" : "Permitir Fixar Mensagem", - "Message_KeepHistory" : "Manter Histórico de Mensagens", "Message_removed" : "Mensagem removida", - "Message_pinned" : "Mensagem fixada", "Message_ShowDeletedStatus" : "Mostrar Status ExcluÃdo", "Message_ShowEditedStatus" : "Mostrar Status Editado", "Message_ShowFormattingTips" : "Exibir dicas de formatação", @@ -223,24 +228,25 @@ "n_messages" : "%s mensagens", "Name" : "Nome", "Name_cant_be_empty" : "Nome não pode ser vazio", + "Name_optional" : "Nome (opcional)", "New_messages" : "Novas mensagens", "New_password" : "Nova senha", + "No_channel_with_name_%s_was_found" : "Nenhum canal com nome <strong>\"%s\"</strong> foi encontrado!", "No_channels_yet" : "Você não faz parte de nenhum canal ainda.", "No_direct_messages_yet" : "Você não iniciou nenhuma conversa ainda.", "No_favorites_yet" : "Nenhum favorito ainda.", + "No_group_with_name_%s_was_found" : "Nenhum grupo privado com nome <strong>\"%s\"</strong> foi encontrado!", "No_groups_yet" : "Nenhum grupo privado ainda.", "No_permission_to_view_room" : "Sem permissões para ver a sala", - "No_channel_with_name_%s_was_found" : "Nenhum canal com nome <strong>\"%s\"</strong> foi encontrado!", - "No_group_with_name_%s_was_found" : "Nenhum grupo privado com nome <strong>\"%s\"</strong> foi encontrado!", "No_user_with_username_%s_was_found" : "Nenhum usuário com nome de usuário <strong>\"%s\"</strong> foi encontrado!", "Not_allowed" : "Não permitido", "Not_found_or_not_allowed" : "Não encontrado ou não permitido", "Nothing_found" : "Nada encontrado", "Notify_all_in_this_room" : "Notificar todos nesta sala", - "Old_Password" : "Senha Antiga", "Old_and_new_password_required" : "Você precisa fornecer a senha antiga e a nova senha para alterar sua senha.", - "Only_you_can_see_this_message" : "Apenas você pode ver esta mensagem", + "Old_Password" : "Senha Antiga", "Online" : "Online", + "Only_you_can_see_this_message" : "Apenas você pode ver esta mensagem", "Oops!" : "Ops", "Opt_out_statistics" : "Não envie as minhas estatÃsticas anonimamente para Rocket.Chat", "Opt_out_statistics_warning" : "Enviando suas estatÃsticas anonimamente você nos ajudará a identificar quantas instâncias do Rocket.Chat são implantadas, bem como o quão bom o sistema está se comportando, para que nós possamos melhorar ainda mais. Se você quiser continuar nos enviando suas estatÃsticas anonimamente, desmarque a caixa de seleção acima. Obrigado", @@ -278,8 +284,8 @@ "Registration_Succeeded" : "Registrado com Sucesso", "Remember_me" : "Lembrar-me", "Remove" : "Remover", - "Remove_custom_oauth" : "Remover oauth customizado", "Remove_Admin" : "Remover Administrador", + "Remove_custom_oauth" : "Remover oauth customizado", "Reset_password" : "Resetar senha", "Room" : "Sala", "Room_name_changed" : "Nome da sala alterado para: <em>__room_name__</em> por <em>__user_by__</em>", @@ -289,6 +295,8 @@ "Room_uploaded_file_list_empty" : "Nenhum arquivo disponÃvel", "room_user_count" : "%s usuários", "Rooms" : "Salas", + "S_new_messages_since_s" : "%s novas mensagens desde %s", + "SAML" : "SAML", "Save" : "Salvar", "Save_changes" : "Salvar alterações", "Save_Mobile_Bandwidth" : "Economizar Banda Móvel", @@ -319,7 +327,6 @@ "Site_Name" : "Nome do Site", "Site_Url" : "URL do Site", "Site_Url_Description" : "Exemplo: https://chat.dominio.com.br/", - "SAML" : "SAML", "SMTP" : "SMTP", "SMTP_Host" : "Host SMTP", "SMTP_Password" : "Senha SMTP", @@ -331,9 +338,9 @@ "Stats_Active_Users" : "Usuários Ativos", "Stats_Avg_Channel_Users" : "Média de Usuários por Canal", "Stats_Avg_Private_Group_Users" : "Média de Usuários por Grupo Privado", + "Stats_Away_Users" : "Usuários ausentes", "Stats_Max_Room_Users" : "Número Máximo de Usuários em um Sala", "Stats_Non_Active_Users" : "Usuários Inativos", - "Stats_Away_Users" : "Usuários ausentes", "Stats_Offline_Users" : "Usuários Offline", "Stats_Online_Users" : "Usuários Online", "Stats_OS_Arch" : "Arquitetura", @@ -354,10 +361,11 @@ "Stop_Recording" : "Parar Gravação", "strike" : "tachado", "Submit" : "Enviar", - "S_new_messages_since_s" : "%s novas mensagens desde %s", "The_field_is_required" : "O campo %s é obrigatório.", "True" : "Verdadeiro", "Unnamed" : "Sem nome", + "Unread_Rooms" : "Não Lidas", + "Unread_Rooms_Mode" : "Agrupar Salas Não Lidas", "Upload_file_question" : "Enviar arquivo?", "Use_Emojis" : "Usar Emojis", "Use_initials_avatar" : "Usar as iniciais do seu nome de usuário", @@ -365,7 +373,6 @@ "Use_service_avatar" : "Use o avatar de %s", "Use_this_username" : "Usar este nome de usuário", "Use_uploaded_avatar" : "Use o avatar de upload", - "User_added" : "Usuário <em>__user_added__</em> adicionado à conversa.", "User_added_by" : "Usuário <em>__user_added__</em> adicionado à conversa por <em>__user_by__</em>.", "User_Channels" : "Canais do Usuário", "User_has_been_activated" : "Usuário foi ativado", @@ -386,13 +393,13 @@ "User_removed_by" : "Usuário <em>__user_removed__</em> removido da conversa por <em>__user_by__</em>.", "User_Settings" : "Configurações do Usuário", "User_updated_successfully" : "Usuário atualizado com sucesso", - "Users" : "Usuários", "Username" : "Nome de usuário", "Username_cant_be_empty" : "O nome de usuário não pode ser vazio", "Username_description" : "O nome de usuário serve para que outras pessoas possam mencionar você em mensagens", "Username_invalid" : "<strong>%s</strong> não é um nome de usuário válido, <br/> usar somente letras, números, pontos e traços", "Username_title" : "Cadastre um nome de usuário", "Username_unavaliable" : "<strong>%s</strong> já está sendo usado :(", + "Users" : "Usuários", "View_All" : "Ver Todos", "Wait_activation_warning" : "Antes que você possa fazer o login, sua conta deve ser manualmente ativada por um administrador.", "We_have_sent_password_email" : "Nós lhe enviamos um e-mail com instruções para redefinir sua senha. Se você não receber um e-mail em breve, por favor retorne e tente novamente.", diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json index f0f14796ac386a6e9c75e127e46ced0e1df42fc6..c069e2dc5e4dbb03d3024fdaa21da16a91b1a325 100644 --- a/i18n/ru.i18n.json +++ b/i18n/ru.i18n.json @@ -2,6 +2,11 @@ "Access_online_demo" : "Попробовать демо-верÑию", "Access_Online_Demo" : "Попробовать демо-верÑию", "Accounts_EmailVerification" : "Подтверждение e-mail", + "Accounts_OAuth_Custom_Button_Color" : "Цвет кнопки", + "Accounts_OAuth_Custom_Button_Label_Color" : "Цвет текÑта кнопки", + "Accounts_OAuth_Custom_Button_Label_Text" : "ТекÑÑ‚ кнопки", + "Accounts_OAuth_Custom_Enable" : "Включить", + "Accounts_OAuth_Custom_Secret" : "Ключ", "Accounts_OAuth_Google" : "Google логин", "Accounts_OAuth_Google_id" : "Google ID", "Accounts_OAuth_Google_secret" : "Google пароль", @@ -14,6 +19,7 @@ "are_also_typing" : "вÑе ещё печатают", "are_typing" : "печатает", "Are_you_sure" : "Ð’Ñ‹ уверены?", + "Auto_Load_Images" : "Ðвтозагрузка изображений", "Avatar_changed_successfully" : "Ðватар измененм уÑпешно", "away" : "отошёл", "Away" : "Отошёл", @@ -36,6 +42,7 @@ "Chat_Rooms" : "Чаты", "close" : "закрыть", "coming_soon" : "в разработке", + "Compact_View" : "Компактный вид", "Confirm_password" : "Подтвердить пароль", "Contact" : "Контакт", "Conversation" : "Диалог", @@ -43,7 +50,9 @@ "Create_new_private_group" : "Создать новый приватный чат", "Create_new_public_channel" : "Создать новый публичный чат", "Created_at" : "Создано в", + "days" : "дней", "Deleted" : "Удалено!", + "Desktop_Notifications_Enabled" : "Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‡ÐµÐ³Ð¾ Ñтола включены", "Direct_Messages" : "Личные ÑообщениÑ", "Drop_to_upload_file" : "ПеремеÑтите Ñюда Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла", "Duplicate_channel_name" : "Канал Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ '%s' ÑущеÑтвует", @@ -53,13 +62,15 @@ "Email_already_exists" : "Ðл. Ð°Ð´Ñ€ÐµÑ ÑƒÐ¶Ðµ ÑущеÑтвует", "Email_or_username" : "Почтовый Ñщик или логин", "Email_verified" : "Ðлектронный Ð°Ð´Ñ€ÐµÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐµÐ½", - "Enter_info" : "ÐвторизациÑ", + "Enable_Desktop_Notifications" : "Включить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‡ÐµÐ³Ð¾ Ñтола", + "Enter_info" : "Введите Ñвои данные", "Error_changing_password" : "Ошибка Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ", "Favorites" : "Избранные чаты", "Follow_social_profiles" : "ДобавлÑйте Ð½Ð°Ñ Ð² Ð´Ñ€ÑƒÐ·ÑŒÑ Ð² Ñоциальных ÑетÑÑ…, форкайте на github и пишите Ñвои отзывы о нашем приложении у Ð½Ð°Ñ Ð² trello.", "Forgot_password" : "Забыли пароль?", "Fork_it_on_github" : "Форкайте на github", "github_no_public_email" : "Ð’ наÑтройках GitHub отÑутÑтвует публично доÑтупный e-mail", + "Has_more" : "Еще", "Hide_room" : "Скрыть чат", "History" : "ИÑториÑ", "hours" : "чаÑ(Ñ‹)", @@ -71,6 +82,7 @@ "Invalid_room_name" : "<strong>%s</strong> недопуÑтимое Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð½Ð°Ñ‚Ñ‹, <br/> допуÑтимые Ñимволы: цифры, подчеркивание и буквы.", "invisible" : "невидимый", "Invisible" : "Ðевидимый", + "Invite_Users" : "ПриглаÑить пользователей", "is_also_typing" : "вÑе ещё печатает", "is_also_typing_female" : "вÑе ещё печатает", "is_also_typing_male" : "вÑе ещё печатает", @@ -83,19 +95,23 @@ "Language" : "Язык", "Language_Version" : "РуÑÑÐºÐ°Ñ Ð²ÐµÑ€ÑиÑ", "Last_message" : "ПоÑледнее Ñообщение", - "LDAP_Dn" : "LDAP домен", + "Layout_Privacy_Policy" : "Политика конфиденциальноÑти", + "Layout_Terms_of_Service" : "УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ÑпользованиÑ", + "LDAP_DN" : "LDAP домен", "LDAP_Port" : "LDAP Порт", "LDAP_Url" : "URL-Ð°Ð´Ñ€ÐµÑ LDAP", "Leave_room" : "Покинуть чат", "line" : "линиÑ", "Load_more" : "Загрузить еще", "Loading..." : "Загрузка...", + "Loading_more_from_history" : "Загрузка еще из иÑтории", "Loading_suggestion" : "Загрузка предпочтений...", "Login" : "Войти", "Login_with" : "ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· %s", "login_with" : "ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ·", "Logout" : "Выйти", "Make_Admin" : "Сделать админиÑтратором", + "Mark_as_read" : "пометить как прочитанное", "Members" : "УчаÑтники", "Members_List" : "СпиÑок учаÑтников", "Members_placeholder" : "УчаÑтники", @@ -106,9 +122,11 @@ "Message_removed" : "Сообщение удалено", "Message_ShowDeletedStatus" : "Отображать ÑÑ‚Ð°Ñ‚ÑƒÑ \"Удалено\"", "Message_ShowEditedStatus" : "Отображать ÑÑ‚Ð°Ñ‚ÑƒÑ \"Отредактировано\"", + "Messages" : "СообщениÑ", "Meta_language" : "Язык", "minutes" : "минут(Ñ‹)", "More_channels" : "Другие чаты", + "More_unreads" : "Еще непрочитанные", "Msgs" : "СообщениÑ", "multi" : "много", "My_Account" : "Мой аккаунт", @@ -116,13 +134,13 @@ "Name" : "ИмÑ", "New_messages" : "Ðовые ÑообщениÑ", "New_password" : "Ðовый пароль", + "No_channel_with_name_%s_was_found" : "Канал Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼Â <strong>\"%s\"</strong> не найден!", "No_channels_yet" : "Ð’Ñ‹ не ÑоÑтоите в публичных чатах.", "No_direct_messages_yet" : "Можно пиÑать пользователÑм приватные ÑообщениÑ.", "No_favorites_yet" : "Ð’ избранном пуÑто. Попробуй добавить Ñюда что-нибудь.", + "No_group_with_name_%s_was_found" : "ЧаÑÑ‚Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ <strong>\"%s\"</strong> не ÑущеÑтвует", "No_groups_yet" : "Ð’Ñ‹ не ÑоÑтоите ни в одном приватном чате.", "No_permission_to_view_room" : "У Ð²Ð°Ñ Ð½ÐµÑ‚ прав Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñтого чата.", - "No_channel_with_name_%s_was_found" : "Канал Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼Â <strong>\"%s\"</strong> не найден!", - "No_group_with_name_%s_was_found" : "ЧаÑÑ‚Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ <strong>\"%s\"</strong> не ÑущеÑтвует", "No_user_with_username_%s_was_found" : "Ðет Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼  <strong>\"%s\"</strong>!", "Not_allowed" : "Ðе допуÑкаетÑÑ", "Not_found_or_not_allowed" : "Чат не ÑущеÑтвует или владелец ограничил доÑтуп ", @@ -138,6 +156,8 @@ "Please_wait_activation" : "ПожалуйÑта, подождите, Ñто может занÑÑ‚ÑŒ некоторое времÑ.", "Please_wait_statistics" : "ПожалуйÑта, подождите, ÑтатиÑтика генерируютÑÑ.", "Powered_by" : "Реализовано на", + "Preferences" : "ÐаÑтройки", + "Preferences_saved" : "ÐаÑтройки Ñохранены", "Privacy" : "ПриватноÑÑ‚ÑŒ", "Private_Groups" : "Приватные чаты", "Profile" : "Профиль", @@ -161,6 +181,7 @@ "Save" : "Сохранить", "Save_changes" : "Сохранить изменениÑ", "Search" : "ПоиÑк", + "Search_Messages" : "ПоиÑк Ñообщений", "Search_settings" : "ÐаÑтройки поиÑка", "seconds" : "Ñекунд(Ñ‹)", "See_all" : "К общему ÑпиÑку", @@ -168,7 +189,9 @@ "Select_an_avatar" : "Выбор автара", "Select_file" : "Выберите файл", "Selected_users" : "Выбранные учаÑтники", + "Send" : "ПоÑлать", "Send_confirmation_email" : "Отправить пиÑьмо Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸ÐµÐ¼", + "Send_invitation_email" : "Отправить приглашение по Ñлектронной почте", "Send_Message" : "Отправить Ñообщение", "Settings" : "ÐаÑтройки", "Settings_updated" : "ÐаÑтройки обновлены", @@ -176,9 +199,11 @@ "Showing_results" : "<p>Отображено <b>%s</b> результатов</p>", "Silence" : "Тишина", "since_creation" : "Ñ %s", + "Site_Name" : "Ðазвание Ñайта", "SMTP_Password" : "Пароль SMTP", "SMTP_Port" : "SMTP Порт", "SMTP_Username" : "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ SMTP-", + "Sound" : "Звук", "Start_of_conversation" : "Ðачать диалог", "Stats_Active_Users" : "Ðктивные пользователи", "Stats_Non_Active_Users" : "Ðеактивные пользователи", @@ -193,20 +218,23 @@ "Stats_OS_Type" : "Тип СиÑтемы", "Stats_OS_Uptime" : "Ðптайм ÑиÑтемы", "Stats_Total_Channels" : "Общее кол-во каналов", + "Stats_Total_Messages" : "Ð’Ñего Ñообщений", "Stats_Total_Users" : "Ð’Ñего пользователей", "Submit" : "Отправить", "The_field_is_required" : "Поле %s обÑзательно.", + "True" : "ИÑтина", "Upload_file_question" : "Загрузить файл?", "Use_initials_avatar" : "ИÑпользовать Ñтандартный аватар", "use_menu" : "ИÑпользуйте боковое меню Ð´Ð»Ñ Ð´Ð¾Ñтупа к вашим ÑообщениÑм и чатам", "Use_service_avatar" : "ИÑпользовать %s аватар", "Use_this_username" : "ИÑпользовать Ñто Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ", "Use_uploaded_avatar" : "ИÑпользовать загруженную аватарку", - "User_added" : "Пользователь <em>__user_added__</em> добавлен.", "User_added_by" : "Пользователь <em>__user_added__</em> добавлен <em>__user_by__</em>.", + "User_Channels" : "Чаты пользователÑ", "User_has_been_activated" : "Пользователь активирован", "User_has_been_deactivated" : "Пользователь деактивирован", "User_has_been_deleted" : "Пользователь был удален", + "User_Info" : "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ пользователе", "User_is_no_longer_an_admin" : "Пользователь не больше не админиÑтратор", "User_is_not_activated" : "Пользователь не активирован", "User_is_now_an_admin" : "Пользователь теперь админиÑтратор", diff --git a/i18n/sv.i18n.json b/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..561a0a5f033f68488fc1a148ba3098607e6953f4 --- /dev/null +++ b/i18n/sv.i18n.json @@ -0,0 +1,235 @@ +{ + "Access_online_demo" : "GÃ¥ till onlinedemo", + "Access_Online_Demo" : "GÃ¥ till onlinedemo", + "Accounts_denyUnverifiedEmail" : "Neka okontrollerade e-postadresser", + "Accounts_EmailVerification" : "E-postverifiering", + "Accounts_OAuth_Facebook" : "Facebook-inloggning", + "Accounts_OAuth_Facebook_id" : "Facebook App-ID", + "Accounts_OAuth_Facebook_secret" : "Facebook Secret", + "Accounts_OAuth_Github" : "OAuth Aktiverad", + "Accounts_OAuth_Github_id" : "Client-ID", + "Accounts_OAuth_Github_secret" : "Client Secret", + "Accounts_OAuth_Google" : "Google-inloggning", + "Accounts_OAuth_Google_id" : "Google ID", + "Accounts_OAuth_Google_secret" : "Google Secret", + "Accounts_OAuth_Linkedin" : "LinkedIn-inloggning", + "Accounts_OAuth_Linkedin_id" : "LinkedIn Id", + "Accounts_OAuth_Linkedin_secret" : "LinkedIn Secret", + "Accounts_OAuth_Meteor" : "Meteor-inloggning", + "Accounts_OAuth_Meteor_id" : "Meteor-Id", + "Accounts_OAuth_Meteor_secret" : "Meteor Secret", + "Accounts_OAuth_Twitter" : "Twitter-inloggning", + "Accounts_OAuth_Twitter_id" : "Twitter Id", + "Accounts_OAuth_Twitter_secret" : "Twitter Secret", + "Accounts_RegistrationRequired" : "Registrering krävs", + "Add_Members" : "Lägg till medlemmar", + "Add_users" : "Lägg till användare", + "Administration" : "Administrering", + "All_channels" : "Alla kanaler", + "and" : "och", + "are_also_typing" : "skriver ocksÃ¥", + "are_typing" : "skriver", + "Are_you_sure" : "Är du säker?", + "Avatar_changed_successfully" : "Avataren har ändrats", + "away" : "borta", + "Away" : "Borta", + "away_female" : "borta", + "Away_female" : "Borta", + "away_male" : "borta", + "Away_male" : "Borta", + "Back_to_login" : "Tillbaka till inloggningen", + "bold" : "fetstil", + "busy" : "upptagen", + "Busy" : "Upptagen", + "busy_female" : "upptagen", + "Busy_female" : "Upptagen", + "busy_male" : "upptagen", + "Busy_male" : "Upptagen", + "Cancel" : "Avbryt", + "Change_avatar" : "Byt avatar", + "Channels" : "Kanaler", + "Channels_list" : "Lista över offentliga kanaler", + "Chat_Rooms" : "Chattrum", + "close" : "stäng", + "coming_soon" : "kommer snart", + "Confirm_password" : "Bekräfta ditt lösenord", + "Contact" : "Kontakta", + "Conversation" : "Samtal", + "Create_new" : "Skapa ny", + "Create_new_direct_message_room" : "Skapa ett nytt direktmeddelanderum", + "Create_new_private_group" : "Skapa en ny privat grupp", + "Create_new_public_channel" : "Skapa en ny offentlig kanal", + "Created_at" : "Skapad ", + "days" : "dagar", + "Deleted" : "Borttaget!", + "Direct_Messages" : "Direktmeddelanden", + "Drop_to_upload_file" : "Släpp för att ladda upp filen", + "Duplicate_channel_name" : "En kanal med namnet \\\"%s\\\" existerar redan", + "Duplicate_private_group_name" : "En privat grupp med namnet \\\"%s\\\" existerar redan", + "edited" : "redigerad", + "Email_already_exists" : "E-postadressen finns redan", + "Email_or_username" : "Epost eller användarnamn", + "Email_verified" : "E-post verifierad", + "Enter_info" : "Fyll i dina uppgifter", + "Error_changing_password" : "Fel vid ändring av lösenord", + "Favorites" : "Favoriter", + "Follow_social_profiles" : "Följ vÃ¥ra sociala mediakonton, forka oss pÃ¥ github och dela med dig av dina tankar om rocket.chatt pÃ¥ vÃ¥r trello.", + "Forgot_password" : "Glömt ditt lösenord", + "Fork_it_on_github" : "Forka det pÃ¥ github", + "Get_to_know_the_team" : "Lär känna teamet bakom Rocket.Chat", + "github_no_public_email" : "Du har inte nÃ¥gon publik epost i ditt GitHub-konto", + "Hide_room" : "Dölj rum", + "History" : "Historik", + "inline_code" : "inline_kod", + "Invalid_confirm_pass" : "Bekräftelsen matchar inte lösenordet", + "Invalid_email" : "Den angivna epostadressen är ogiltig", + "Invalid_name" : "Namnet fÃ¥r inte vara tomt", + "Invalid_pass" : "Lösenordet fÃ¥r inte vara tomt", + "Invalid_room_name" : "<strong>%s</strong> är inte ett giltigt rumsnamn,<br/> använd bara siffror, nummer och bindestreck", + "invisible" : "osynlig", + "Invisible" : "Osynlig", + "is_also_typing" : "skriver ocksÃ¥", + "is_also_typing_female" : "skriver ocksÃ¥", + "is_also_typing_male" : "skriver ocksÃ¥", + "is_typing" : "skriver", + "is_typing_female" : "skriver", + "is_typing_male" : "skriver", + "italics" : "kursiv", + "join" : "Anslut", + "Join_the_Community" : "GÃ¥ med i communityt", + "Language" : "SprÃ¥k", + "Language_Version" : "Engelsk version", + "Last_login" : "Senaste inloggning", + "Last_message" : "Senaste meddelande", + "Layout_Home_Body" : "Hem Body", + "Layout_Home_Title" : "Hem Titel", + "Leave_room" : "Lämna rum", + "Load_more" : "Ladda mer", + "Loading..." : "Laddar..", + "Loading_suggestion" : "Laddar förslag...", + "Login" : "Login", + "Login_with" : "Logga in med %s", + "login_with" : "Eller logga in direkt med", + "Logout" : "Logga Ut", + "Members" : "Medlemmar", + "Members_List" : "Medlemslista", + "Members_placeholder" : "Medlemmar", + "Message" : "Meddelande", + "Message_AllowDeleting" : "TillÃ¥t radering meddelanden", + "Message_AllowEditing" : "TillÃ¥t meddelanderedigering", + "Message_deleting_not_allowed" : "Borttagning av meddelanden inte tillÃ¥tet", + "Message_editing_not_allowed" : "Meddelanderedigering tillÃ¥ts inte", + "Message_KeepHistory" : "BehÃ¥ll meddelandehistorik", + "Message_removed" : "Meddelandet borttaget", + "Message_ShowDeletedStatus" : "Visa borttagenstatus", + "Message_ShowEditedStatus" : "Visa Redigeradstatus", + "Meta_fb_app_id" : "Facebook App-ID", + "Meta_google-site-verification" : "Google Site Verification", + "Meta_language" : "SprÃ¥k", + "Meta_msvalidate01" : "MSValidate.01", + "Meta_robots" : "Robots", + "More_channels" : "Fler kanaler", + "My_Account" : "Mitt Konto", + "n_messages" : "%s meddelanden", + "Name" : "Namn", + "New_messages" : "Nya meddelanden", + "New_password" : "Nytt lösenord", + "No_channels_yet" : "Du är inte en del av nÃ¥gon kanal ännu.", + "No_direct_messages_yet" : "Du har inte startat nÃ¥gra samtal än.", + "No_favorites_yet" : "Du har inte lagt till nÃ¥gra favoriter än.", + "No_groups_yet" : "Du har inga privata grupper än.", + "No_permission_to_view_room" : "Du har inte behörighet att visa detta rum", + "Not_allowed" : "Inte tillÃ¥ten", + "Not_found_or_not_allowed" : "Inte hittad eller inte tillÃ¥ten", + "Nothing_found" : "Inget hittat", + "Notify_all_in_this_room" : "Meddela alla i det här rummet", + "Online" : "Online", + "Oops!" : "Oj", + "others" : "andra", + "Password" : "Lösenord", + "Password_changed_successfully" : "Lösenord ändrat", + "Please_wait" : "Vänligen vänta", + "Powered_by" : "Drivs av", + "Privacy" : "Integritet", + "Private_Groups" : "Privata Grupper", + "Profile" : "Profil", + "Profile_saved_successfully" : "Profil sparad", + "Proudly_developed" : "Stolt utvecklad med Meteor", + "Push_apn_cert" : "APN Cert", + "Push_apn_dev_cert" : "APN Dev Cert", + "Push_apn_dev_key" : "APN Dev Key", + "Push_apn_dev_passphrase" : "APN Dev Passphrase", + "Push_apn_key" : "APN Key", + "Push_apn_passphrase" : "APN Passphrase", + "Push_debug" : "Debug", + "Quick_Search" : "Snabbsökning", + "quote" : "citat", + "Register" : "Registrera ett nytt konto", + "Remember_me" : "Kom ihÃ¥g mig", + "Remove" : "Ta bort", + "Reset_password" : "Ã…terställ lösenord", + "Room" : "Rum", + "Room_name_changed" : "Rummets namn ändrat till : <em>__room_name__</em> av <em>__user_by__</em>", + "Room_name_changed_successfully" : "Rummets namn har ändrats ", + "room_user_count" : "%s användare", + "Save" : "Spara", + "Save_changes" : "Spara ändringar", + "Search" : "Sök", + "Search_settings" : "Sökinställningar", + "See_all" : "Visa alla", + "See_only_online" : "Bara online", + "Select_an_avatar" : "Välj en avatar", + "Select_file" : "Välj fil", + "Select_service_to_login" : "Välj en tjänst för att logga in för att välja din bild, eller ladda upp en direkt frÃ¥n din dator", + "Selected_users" : "Utvalda medlemmar", + "Send_confirmation_email" : "Skicka e-postbekräftelse", + "Send_Message" : "Skicka meddelande", + "Settings" : "Inställningar", + "Settings_updated" : "Inställningar uppdaterade", + "Showing_online_users" : "Visar <b>__total_online__</b> av __total__ users", + "Showing_results" : "<p>Visar <b>%s</b> resultat</p>", + "Silence" : "Tystnad", + "since_creation" : "sedan %s", + "SMTP_Host" : "SMTP-Host", + "SMTP_Password" : "SMTP lösenord", + "SMTP_Port" : "SMTP Port", + "SMTP_Username" : "SMTP Användarnamn", + "Start_of_conversation" : "Början av samtalet", + "Submit" : "Skicka", + "The_field_is_required" : "Fältet %s krävs.", + "Upload_file_question" : "Ladda upp fil?", + "Use_initials_avatar" : "Använd ditt användarnamns initialer", + "use_menu" : "Använd sidomenyn för att fÃ¥ tillgÃ¥ng till dina rum och chattar", + "Use_service_avatar" : "Använd %s avatar", + "Use_this_username" : "Använd det här användarnamnet", + "Use_uploaded_avatar" : "Använd uppladdad avatar", + "User_added_by" : "Användaren <em>__user_added__</em> tillagd av <em>__user_by__</em>.", + "User_has_been_activated" : "Användaren har aktiverats", + "User_has_been_deactivated" : "Användaren har deaktiverats", + "User_joined_channel" : "Har anslutit sig till kanalen.", + "User_joined_channel_female" : "Har anslutit sig till kanalen.", + "User_joined_channel_male" : "Har anslutit sig till kanalen.", + "User_left" : "Har lämnat kanalen.", + "User_left_female" : "Har lämnat kanalen.", + "User_left_male" : "Har lämnat kanalen.", + "User_logged_out" : "Användaren är utloggad", + "User_removed_by" : "Användaren <em>__user_removed__</em> avlägsnad av <em>__user_by__</em>.", + "User_Settings" : "Användarinställningar", + "Username" : "Användarnamn", + "Username_cant_be_empty" : "Användarnamnet kan inte vara tomt", + "Username_description" : "Användarnamnet används för att lÃ¥ta andra nämna dig i meddelanden.", + "Username_invalid" : "<strong>%s</strong> är inte ett giltigt användarnamn,<br/> använd bara bokstäver, siffror, punkter och bindestreck", + "Username_title" : "Registrera användarnamn", + "Username_unavaliable" : "<strong>%s</strong> används redan :(", + "View_All" : "Visa alla", + "We_have_sent_password_email" : "Vi har skickat ett mail med instruktioner för Ã¥terställande av lösenord. Om du inte fÃ¥r ett mail inom kort, kom tillbaka och försök igen.", + "We_have_sent_registration_email" : "Vi har skickat ett mail för att bekräfta din registrering. Om du inte fÃ¥r ett mail inom kort, kom tillbaka och försök igen.", + "Welcome" : "Välkommen <em>%s</em>.", + "With_whom" : "Med vem", + "Yes_delete_it" : "Ja, ta bort det!", + "you_are_in_preview_mode_of" : "Du befinner dig i förhandsgranskningsläge i kanalen #<strong>__room_name__</strong>", + "You_need_confirm_email" : "Du mÃ¥ste bekräfta din e-postadress för att logga in!", + "You_will_not_be_able_to_recover" : "Du kommer inte att kunna Ã¥terskapa detta meddelande!", + "Your_entry_has_been_deleted" : "Ditt meddelande har tagits bort.", + "Your_Open_Source_solution" : "Din egen Open Source-chatlösning" +} \ No newline at end of file diff --git a/i18n/ta-IN.i18n.json b/i18n/ta-IN.i18n.json index 88d38369c66b93066166d9dc7c11c7f3c2972ecc..473329c3c2bf44f6828bcb8081355944247bea4a 100644 --- a/i18n/ta-IN.i18n.json +++ b/i18n/ta-IN.i18n.json @@ -87,7 +87,6 @@ "Submit" : "சமரà¯à®ªà¯à®ªà®¿à®•à¯à®•à®µà¯à®®à¯", "Use_initials_avatar" : "உஙà¯à®•à®³à¯ பயனர௠பெயர௠மà¯à®¤à®²à¯†à®´à¯à®¤à¯à®¤à¯à®•à®³à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯", "Use_this_username" : "இநà¯à®¤ பயனர௠பெயரை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯", - "User_added" : "பயனர௠<em>__user_added__</em>சேரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®°à¯.", "User_added_by" : "பயனர௠<em>__user_added__</em><em>__user_by__</em>மூலம௠சேரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®°à¯.", "User_left" : "பயனர௠<em>__user_left__</em>செனà¯à®±à¯à®µà®¿à®Ÿà¯à®Ÿà®¾à®°à¯.", "User_removed_by" : "பயனர௠<em>__user_removed__</em><em>__user_by__</em>மூலம௠அகறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®°à¯.", diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json index 345683fceebc9d59220a37d9beb9af2806baa517..8c154fde9d4bdecd0f058637e2937b96ee99f071 100644 --- a/i18n/tr.i18n.json +++ b/i18n/tr.i18n.json @@ -2,14 +2,14 @@ "Access_online_demo" : "Canlı önizleme", "Access_Online_Demo" : "Canlı Önizleme", "Accounts_EmailVerification" : "E-Posta DoÄŸrulama", + "Accounts_ManuallyApproveNewUsers" : "Yeni kullanıcıları onayla", "Accounts_OAuth_Facebook" : "Facebook ile giriÅŸ", "Accounts_OAuth_Github" : "GitHub ile giriÅŸ", "Accounts_OAuth_Google" : "Google ile giriÅŸ", "Accounts_OAuth_Linkedin" : "LinkedIn ile giriÅŸ", "Accounts_OAuth_Meteor" : "Meteor ile giriÅŸ", - "Accounts_ManuallyApproveNewUsers" : "Yeni kullanıcıları onayla", - "Accounts_RegistrationRequired" : "Kayıt Gerekli", "Accounts_OAuth_Twitter" : "Twitter ile giriÅŸ", + "Accounts_RegistrationRequired" : "Kayıt Gerekli", "Add_Members" : "Ãœye ekle", "Add_users" : "Kullanıcı ekle", "Administration" : "Yönetim", @@ -51,11 +51,13 @@ "Create_new_public_channel" : "Yeni bir kanal oluÅŸtur", "Created_at" : "OluÅŸturulma saati", "days" : "gün", + "Delete" : "Sil", "Delete_User_Warning" : "Bu kullanıcıyı silerseniz tüm mesajları da beraberinde silinecektir! Bu iÅŸlemi bir daha geri alamazsınız.", "Deleted" : "SilinmiÅŸ!", "Direct_Messages" : "Direkt Mesajlar", "Drop_to_upload_file" : "Dosya yüklemek için sürükle", "E-mail" : "E-posta", + "Edit" : "Düzenle", "edited" : "düzenlendi", "Email_already_exists" : "Bu e-posta zaten var", "Email_or_username" : "E-posta ya da kullanıcı adı", @@ -139,6 +141,7 @@ "Not_allowed" : "Izin verilmedi", "Not_found_or_not_allowed" : "Bulunamadı veya izin verilmiyor", "Nothing_found" : "Bulunamadı", + "Notify_all_in_this_room" : "Bu odadaki tüm bildirimleri göster", "Online" : "Çevrimiçi", "Oops!" : "Hata", "others" : "DiÄŸerleri", @@ -178,6 +181,7 @@ "Save" : "Kaydet", "Save_changes" : "DeÄŸiÅŸiklikleri kaydet", "Search" : "Ara", + "Search_Messages" : "Mesajlarda ara", "Search_settings" : "Arama ayarları", "seconds" : "saniye", "See_all" : "Tümünü gör", @@ -194,6 +198,7 @@ "Showing_results" : "<p> <b>%s</b> kayıt bulundu</p>", "Silence" : "Sessizlik", "since_creation" : "tarih %s", + "Site_Name" : "Site adı", "SMTP_Host" : "SMTP Sunucusu", "SMTP_Password" : "SMTP Åžifre", "SMTP_Port" : "SMTP BaÄŸlantı Noktası(Port)", @@ -214,6 +219,7 @@ "Stats_OS_Type" : "Ä°ÅŸletim Sistemi Tipi", "Stats_Total_Channels" : "Toplam Kanal", "Stats_Total_Direct_Messages" : "Toplam Direkt Mesajlar", + "Stats_Total_Messages" : "Toplam Ä°leti", "Stats_Total_Private_Groups" : "Toplam Özel Gruplar", "Stats_Total_Rooms" : "Toplam Kanal", "Stats_Total_Users" : "Toplam Kullanıcı", @@ -228,7 +234,6 @@ "Use_service_avatar" : "%s Avatar olarak kullan", "Use_this_username" : "Bu kullanıcı adını kullan", "Use_uploaded_avatar" : "Yüklenen avatarı kullanın", - "User_added" : "<em>__user_added__</em> eklendi.", "User_added_by" : "<em>__user_added__</em>,  <em>__user_by__</em> tarafından eklendi.", "User_has_been_activated" : "Kullanıcı aktif edildi", "User_has_been_deactivated" : "Kullanıcı devre dışı bırakıldı", diff --git a/i18n/ug.i18n.json b/i18n/ug.i18n.json index c370f792337c1f433d46214982cca5eaffccefdf..893c8ddb903e241d8e2ad080e1e55100b15f529a 100644 --- a/i18n/ug.i18n.json +++ b/i18n/ug.i18n.json @@ -121,7 +121,6 @@ "Use_service_avatar" : "%s باش رەسىمنى ئىشلىتىش", "Use_this_username" : "بۇ ئىسىمنى ئىشلىتىÚ", "Use_uploaded_avatar" : "يۈكلەنگەن باش رەسىمنى ئىشلىتىش", - "User_added" : "<em>__user_added__</em> ئەزا قوشۇلدى.", "User_added_by" : " <em>__user_by__</em> ÙŠÛÚىدىن <em>__user_added__</em> دÛÚ¯Û•Ù† ئەزانى قوشتى.", "User_joined_channel" : "قانالغا قوشۇلدى.", "User_left" : "<em>__user_left__</em> پاراÚخانىدىن Ú†Ûكىندى.", diff --git a/i18n/uk.i18n.json b/i18n/uk.i18n.json index 5947d6aad39b68716eca3d80beb55016913e8d43..47ccaa042ed5d24838af40208f5461081c8e0606 100644 --- a/i18n/uk.i18n.json +++ b/i18n/uk.i18n.json @@ -109,7 +109,6 @@ "Use_service_avatar" : "ВикориÑтовуйте% Ðватар", "Use_this_username" : "ВикориÑтовувати це ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача ", "Use_uploaded_avatar" : "ВикориÑтовувати завантажений аватар", - "User_added" : "КориÑтувач <em>__user_added__</em> доданий.", "User_added_by" : "КориÑтувач <em>__user_added__</em> даданий <em>__user_by__</em>.", "User_left" : "КориÑтучач <em>__user_left__</em> вийшов.", "User_logged_out" : "КориÑтувач вийшов з ÑиÑтеми", diff --git a/i18n/zh.i18n.json b/i18n/zh.i18n.json index 8b169063f15c07593a9a91b7f34b16eee9b9c916..f8091f5d0498320d852566a01f183ca0a6e63645 100644 --- a/i18n/zh.i18n.json +++ b/i18n/zh.i18n.json @@ -4,10 +4,10 @@ "Accounts" : "å¸æˆ·", "Accounts_denyUnverifiedEmail" : "æ‹’ç»æœªç»éªŒè¯çš„电å邮件", "Accounts_EmailVerification" : "邮件验è¯", + "Accounts_ManuallyApproveNewUsers" : "æ‰‹åŠ¨å®¡æ ¸æ–°ç”¨æˆ·", "Accounts_OAuth_Facebook" : "Facebook 登入", "Accounts_OAuth_Facebook_id" : "Facebook应用程åºID", "Accounts_OAuth_Facebook_secret" : "Facebook Secret", - "Accounts_ManuallyApproveNewUsers" : "æ‰‹åŠ¨å®¡æ ¸æ–°ç”¨æˆ·", "Accounts_RegistrationRequired" : "需è¦æ³¨å†Œ", "Activate" : "激活", "Add_Members" : "åŠ å…¥æˆå‘˜", @@ -22,6 +22,7 @@ "are_also_typing" : "也æ£åœ¨è¾“å…¥", "are_typing" : "æ£åœ¨è¾“å…¥", "Are_you_sure" : "ä½ ç¡®å®šå—?", + "Auto_Load_Images" : "自动载入图片", "Avatar_changed_successfully" : "头åƒæ›´æ–°æˆåŠŸ", "away" : "离开", "Away" : "离开", @@ -29,7 +30,6 @@ "Away_female" : "离开", "away_male" : "离开", "Away_male" : "离开", - "Auto_Load_Images" : "自动载入图片", "Back_to_login" : "返回登录界é¢", "bold" : "粗体", "busy" : "å¿™", @@ -56,8 +56,8 @@ "Created_at" : "创建于", "days" : "天", "Deactivate" : "ç¦ç”¨", - "Delete_User_Warning" : "åˆ é™¤ç”¨æˆ·å°†åˆ é™¤è¯¥ç”¨æˆ·çš„æ‰€æœ‰æ¶ˆæ¯ã€‚è¿™ä¸èƒ½è¢«æ’¤æ¶ˆã€‚", "Delete" : "åˆ é™¤", + "Delete_User_Warning" : "åˆ é™¤ç”¨æˆ·å°†åˆ é™¤è¯¥ç”¨æˆ·çš„æ‰€æœ‰æ¶ˆæ¯ã€‚è¿™ä¸èƒ½è¢«æ’¤æ¶ˆã€‚", "Deleted" : "å·²åˆ é™¤ï¼", "Direct_Messages" : "直接å‘é€æ¶ˆæ¯", "Disable_New_Message_Notification" : "ç¦ç”¨æ–°æ¶ˆæ¯é€šçŸ¥", @@ -84,8 +84,8 @@ "General" : "通用", "Get_to_know_the_team" : "结识Rocket.Team", "github_no_public_email" : "在您的GitHub上å¸æˆ·ä¸ï¼Œæ‚¨æ²¡æœ‰è®¾ç½®ä»»ä½•ç”µå邮件作为公共电å邮件地å€ã€‚", - "Have_your_own_chat" : "拥有自己的网络èŠå¤©ã€‚对于希望建立和å‘展自己的èŠå¤©å¹³å°çš„å¼€å‘者而言,使用Meteorå¼€å‘çš„Rocket.Chat是优秀的解决方案。", "Has_more" : "有更多", + "Have_your_own_chat" : "拥有自己的网络èŠå¤©ã€‚对于希望建立和å‘展自己的èŠå¤©å¹³å°çš„å¼€å‘者而言,使用Meteorå¼€å‘çš„Rocket.Chat是优秀的解决方案。", "Hide_room" : "éšè—èŠå¤©å®¤", "History" : "历å²", "hours" : "å°æ—¶", @@ -121,13 +121,13 @@ "Layout_Sidenav_Footer" : "侧é¢å¯¼èˆªé¡µè„š", "Layout_Terms_of_Service" : "æœåŠ¡æ¡æ¬¾", "LDAP" : "LDAP", - "LDAP_Dn" : "LDAP DN", + "LDAP_DN" : "LDAP DN", "LDAP_Port" : "LDAP端å£", "LDAP_Url" : "LDAP URL", "Leave_room" : "离开èŠå¤©å®¤", "Load_more" : "åŠ è½½æ›´å¤š", - "Loading_more_from_history" : "åŠ è½½æ›´å¤š", "Loading..." : "åŠ è½½ä¸...", + "Loading_more_from_history" : "åŠ è½½æ›´å¤š", "Loading_suggestion" : "载入建议ä¸...", "Login" : "登录", "Login_with" : "使用%s登录", @@ -143,8 +143,8 @@ "Message_AllowEditing" : "å…许编辑消æ¯", "Message_deleting_not_allowed" : "ä¸å…è®¸åˆ é™¤æ¶ˆæ¯", "Message_editing_not_allowed" : "ä¸å…许编辑消æ¯", - "Message_MaxAllowedSize" : "消æ¯æœ€å¤§å…许大å°", "Message_KeepHistory" : "ä¿å˜æ¶ˆæ¯åŽ†å²è®°å½•", + "Message_MaxAllowedSize" : "消æ¯æœ€å¤§å…许大å°", "Message_removed" : "消æ¯å·²åˆ 除", "Message_ShowDeletedStatus" : "æ˜¾ç¤ºåˆ é™¤çŠ¶æ€", "Message_ShowEditedStatus" : "显示编辑状æ€", @@ -163,20 +163,20 @@ "Name" : "姓å", "New_messages" : "新消æ¯", "New_password" : "新密ç ", + "No_channel_with_name_%s_was_found" : "æœªæ‰¾åˆ°é¢‘é“ <strong>\"%s\"</strong> !", "No_channels_yet" : "æ‚¨å°šæœªåŠ å…¥è¿™ä¸ªé¢‘é“。", "No_direct_messages_yet" : "您还没有开始任何èŠå¤©ã€‚", "No_favorites_yet" : "æ‚¨è¿˜æ²¡æœ‰æ·»åŠ ä»»ä½•æ”¶è—。", + "No_group_with_name_%s_was_found" : "未找到ç§æœ‰ç»„ <strong>\"%s\"</strong> !", "No_groups_yet" : "ä½ è¿˜æ²¡æœ‰ç§æœ‰ç»„。", "No_permission_to_view_room" : "您没有æƒé™è®¿é—®è¿™ä¸ªèŠå¤©å®¤", - "No_channel_with_name_%s_was_found" : "æœªæ‰¾åˆ°é¢‘é“ <strong>\"%s\"</strong> !", - "No_group_with_name_%s_was_found" : "未找到ç§æœ‰ç»„ <strong>\"%s\"</strong> !", "No_user_with_username_%s_was_found" : "未找到用户 <strong>\"%s\"</strong> !", "Not_allowed" : "ä¸å…许", "Not_found_or_not_allowed" : "未找到或者ä¸å…许", "Nothing_found" : "没有找到", "Notify_all_in_this_room" : "æ醒房间ä¸çš„所有人", - "Only_you_can_see_this_message" : "åªæœ‰ä½ 能看到这æ¡ä¿¡æ¯", "Online" : "在线", + "Only_you_can_see_this_message" : "åªæœ‰ä½ 能看到这æ¡ä¿¡æ¯", "Oops!" : "å“Žå‘€", "others" : "其他", "Password" : "密ç ", @@ -218,6 +218,8 @@ "Room_not_found" : "未找到房间", "room_user_count" : "%s 个用户", "Rooms" : "房间", + "S_new_messages_since_s" : "%s 新消æ¯ï¼Œè‡ªä»Ž %s", + "SAML" : "SAML", "Save" : "ä¿å˜", "Save_changes" : "ä¿å˜ä¿®æ”¹", "Save_Mobile_Bandwidth" : "节约移动带宽", @@ -245,7 +247,6 @@ "Showing_results" : "<p>显示<b>%s</b>æ¡ç»“æžœ</p>", "Silence" : "é™éŸ³", "since_creation" : "自从%s", - "SAML" : "SAML", "SMTP" : "SMTP", "SMTP_Host" : "SMTP主机", "SMTP_Password" : "SMTP密ç ", @@ -268,7 +269,6 @@ "Stats_Total_Users" : "用户总数", "strike" : "划线", "Submit" : "æ交", - "S_new_messages_since_s" : "%s 新消æ¯ï¼Œè‡ªä»Ž %s", "The_field_is_required" : "å—段 %s 必须填写。", "True" : "是", "Unnamed" : "未命å", @@ -279,7 +279,6 @@ "Use_service_avatar" : "使用 %s 头åƒ", "Use_this_username" : "使用æ¤ç”¨æˆ·å", "Use_uploaded_avatar" : "ä½¿ç”¨ä¸Šä¼ å¤´åƒ", - "User_added" : "å·²æ·»åŠ ç”¨æˆ· <em>__user_added__</em> 。", "User_added_by" : " <em>__user_by__</em> æ·»åŠ äº† <em>__user_added__</em> 。", "User_Channels" : "用户频é“", "User_has_been_activated" : "用户已ç»æ¿€æ´»", @@ -299,13 +298,13 @@ "User_removed_by" : "用户 <em>__user_removed__</em> 已被 <em>__user_by__</em> 移除。", "User_Settings" : "用户设置", "User_updated_successfully" : "用户更新æˆåŠŸ", - "Users" : "用户", "Username" : "用户å", "Username_cant_be_empty" : "用户åä¸èƒ½ä¸ºç©º", "Username_description" : "这个用户å用于让别人在èŠå¤©æ¶ˆæ¯ä¸é€šçŸ¥æ‚¨ã€‚", "Username_invalid" : "<strong>%s</strong>ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„用户å, <br/>åªèƒ½ä½¿ç”¨å—æ¯ï¼Œæ•°å—,.å’Œ_", "Username_title" : "注册用户å", "Username_unavaliable" : "<strong>%s</strong>已被使用 :(", + "Users" : "用户", "View_All" : "查看全部", "Wait_activation_warning" : "您的å¸æˆ·å¿…须由管ç†å‘˜æ‰‹å·¥å¯åŠ¨åŽæ‰èƒ½ç™»å½•ã€‚", "We_have_sent_password_email" : "我们已ç»å‘您å‘é€å¯†ç é‡ç½®çš„电å邮件。如果您没有收到邮件,请é‡è¯•ã€‚", diff --git a/packages/autoupdate/.gitignore b/packages/autoupdate/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..677a6fc26373dfaddcf7d4b8a52711f7257e1be5 --- /dev/null +++ b/packages/autoupdate/.gitignore @@ -0,0 +1 @@ +.build* diff --git a/packages/autoupdate/QA.md b/packages/autoupdate/QA.md new file mode 100644 index 0000000000000000000000000000000000000000..62afdc6cdf0aba7514af160adfc07660d3e0224d --- /dev/null +++ b/packages/autoupdate/QA.md @@ -0,0 +1,115 @@ +# QA Notes +## Hot Code Push Reload + +Run the leaderboard example, and click on one of the names. Make a +change to the leaderboard.html file, see the client reload, and see +that the name is still selected. + + +## AUTOUPDATE_VERSION + +Set the `AUTOUPDATE_VERSION` environment variable when running the +application: + + $ AUTOUPDATE_VERSION=abc meteor + +Now when you make an HTML change, it won't appear in the client +automatically. (Note the leader list flickers when the server +subscription restarts, but that's not a window reload). + +Conversely, you can force a client reload (even without making any +client code changes) by restarting the server with a new value for +`AUTOUPDATE_VERSION`. + + +## No Client Reload on Server-only Change + +Revert previous changes and run the example without setting +AUTOUPDATE_VERSION. + +Note that it might look like the browser is reloading because the page +content in the leaderboard example will flicker when the server +restarts because the example is using autopublish, but that the window +won't actually be reloading. + +In the browser console, assign a variable such as `a = true` so that +you can easily verify that the client hasn't reloaded. + +In the leaderboard example directory, create the `server` directory +and add `foo.js`. See in the browser console that `a` is still +defined, indicating the browser hasn't reloaded. + + +## Test with the appcache + +Add the appcache package: + + $ meteor add appcache + +And do the above tests again. + +Note that if 1) AUTOUPDATE_VERSION is set so the client doesn't +automatically reload, 2) you make a client change, and 3) you manually +reload the browser page, you usually *won't* see the updated HTML the +*first* time you reload (unless the browser happened to check the app +cache manifest between steps 2 and 3). This is normal browser app +cache behavior: the browser populates the app cache in the background, +so it doesn't wait for new files to download before displaying the web +page. + + +## Autoupdate.newClientAvailable + +Undo previous changes made, such as by using `git checkout .` Reload +the client, which will cause the browser to stop using the app cache. + +It's hard to see the `newClientAvailable` reactive variable when the +client automatically reloads. Remove the `hot-code-push` package so you can +see the variable without having the client also reload. + + $ meteor remove meteor-base + $ meteor add meteor webapp ddp autoupdate + +Add to leaderboard.js: + + Template.leaderboard.helpers({ + available: function () { + return Autoupdate.newClientAvailable().toString(); + } + }); + +And add `{{available}}` to the leaderboard template in +leaderboard.html. + +Initially you'll see `false`, and then when you make a change to the +leaderboard HTML you'll see the variable change to `true`. (You won't +see the new HTML on the client because you disabled reload). + +Amusingly, you can undo the addition you made to the HTML and the "new +client available" variable will go back to `false` (you now don't have +client code available on the server different than what's running in +the browser), because by default the client version is based on a hash +of the client files. + + +## DDP Version Negotiation Failure + +A quick way to test DDP version negotiation failure is to force the +client to use the wrong DDP version. At the top of +livedata_connection.js: + + var Connection = function (url, options) { + var self = this; + + options.supportedDDPVersions = ['abc']; + +You will see the client reload (in the hope that new client code will +be available that can successfully negotiation the DDP version). Each +reload takes longer than the one before, using an exponential backoff. + +If you remove the `options.supportedDDPVersions` line and allow the +client to connect (or manually reload the browser page so you don't +have to wait), this will reset the exponential backoff counter. + +You can verify the counter was reset by adding the line back in a +second time, and you'll see the reload cycle start over again with +first reloading quickly, and then again taking longer between tries. diff --git a/packages/autoupdate/README.md b/packages/autoupdate/README.md new file mode 100644 index 0000000000000000000000000000000000000000..87e4354676421dfbfcbfdc2c22ade8d5cd6abaa8 --- /dev/null +++ b/packages/autoupdate/README.md @@ -0,0 +1,11 @@ +# autoupdate + +This package is the heart of Meteor's Hot Code Push functionality. It has a +client component and a server component component. The client component uses a +DDP API provided by the server to subscribe to the version ID of the most recent +build of the app's client. When it sees that a new version is available, it uses +the [reload](https://atmospherejs.com/meteor/reload) package (if included in the +app) to gracefully save the app's state and reload it in place. + +`autoupdate` is part of the [Webapp](https://www.meteor.com/webapp) +project. diff --git a/packages/autoupdate/autoupdate_client.js b/packages/autoupdate/autoupdate_client.js new file mode 100644 index 0000000000000000000000000000000000000000..3f34c9658946ca2c9a3c2662b761c58a67c434e5 --- /dev/null +++ b/packages/autoupdate/autoupdate_client.js @@ -0,0 +1,156 @@ +// Subscribe to the `meteor_autoupdate_clientVersions` collection, +// which contains the set of acceptable client versions. +// +// A "hard code push" occurs when the running client version is not in +// the set of acceptable client versions (or the server updates the +// collection, there is a published client version marked `current` and +// the running client version is no longer in the set). +// +// When the `reload` package is loaded, a hard code push causes +// the browser to reload, so that it will load the latest client +// version from the server. +// +// A "soft code push" represents the situation when the running client +// version is in the set of acceptable versions, but there is a newer +// version available on the server. +// +// `Autoupdate.newClientAvailable` is a reactive data source which +// becomes `true` if there is a new version of the client is available on +// the server. +// +// This package doesn't implement a soft code reload process itself, +// but `newClientAvailable` could be used for example to display a +// "click to reload" link to the user. + +// The client version of the client code currently running in the +// browser. +var autoupdateVersion = __meteor_runtime_config__.autoupdateVersion || "unknown"; +var autoupdateVersionRefreshable = + __meteor_runtime_config__.autoupdateVersionRefreshable || "unknown"; + +// The collection of acceptable client versions. +ClientVersions = new Mongo.Collection("meteor_autoupdate_clientVersions"); + +Autoupdate = {}; + +Autoupdate.newClientAvailable = function () { + return !! ClientVersions.findOne({ + _id: "version", + version: {$ne: autoupdateVersion} }) || + !! ClientVersions.findOne({ + _id: "version-refreshable", + version: {$ne: autoupdateVersionRefreshable} }); +}; +Autoupdate._ClientVersions = ClientVersions; // Used by a self-test + +var knownToSupportCssOnLoad = false; + +var retry = new Retry({ + // Unlike the stream reconnect use of Retry, which we want to be instant + // in normal operation, this is a wacky failure. We don't want to retry + // right away, we can start slowly. + // + // A better way than timeconstants here might be to use the knowledge + // of when we reconnect to help trigger these retries. Typically, the + // server fixing code will result in a restart and reconnect, but + // potentially the subscription could have a transient error. + minCount: 0, // don't do any immediate retries + baseTimeout: 30*1000 // start with 30s +}); +var failures = 0; + +Autoupdate._retrySubscription = function () { + Meteor.subscribe("meteor_autoupdate_clientVersions", { + onError: function (error) { + Meteor._debug("autoupdate subscription failed:", error); + failures++; + retry.retryLater(failures, function () { + // Just retry making the subscription, don't reload the whole + // page. While reloading would catch more cases (for example, + // the server went back a version and is now doing old-style hot + // code push), it would also be more prone to reload loops, + // which look really bad to the user. Just retrying the + // subscription over DDP means it is at least possible to fix by + // updating the server. + Autoupdate._retrySubscription(); + }); + }, + onReady: function () { + if (Package.reload) { + var checkNewVersionDocument = function (doc) { + var self = this; + if (doc._id === 'version-refreshable' && + doc.version !== autoupdateVersionRefreshable) { + autoupdateVersionRefreshable = doc.version; + // Switch out old css links for the new css links. Inspired by: + // https://github.com/guard/guard-livereload/blob/master/js/livereload.js#L710 + var newCss = (doc.assets && doc.assets.allCss) || []; + var oldLinks = []; + _.each(document.getElementsByTagName('link'), function (link) { + if (link.className === '__meteor-css__') { + oldLinks.push(link); + } + }); + + var waitUntilCssLoads = function (link, callback) { + var executeCallback = _.once(callback); + link.onload = function () { + knownToSupportCssOnLoad = true; + executeCallback(); + }; + if (! knownToSupportCssOnLoad) { + var id = Meteor.setInterval(function () { + if (link.sheet) { + executeCallback(); + Meteor.clearInterval(id); + } + }, 50); + } + }; + + var removeOldLinks = _.after(newCss.length, function () { + _.each(oldLinks, function (oldLink) { + oldLink.parentNode.removeChild(oldLink); + }); + }); + + var attachStylesheetLink = function (newLink) { + document.getElementsByTagName("head").item(0).appendChild(newLink); + + waitUntilCssLoads(newLink, function () { + Meteor.setTimeout(removeOldLinks, 200); + }); + }; + + if (newCss.length !== 0) { + _.each(newCss, function (css) { + var newLink = document.createElement("link"); + newLink.setAttribute("rel", "stylesheet"); + newLink.setAttribute("type", "text/css"); + newLink.setAttribute("class", "__meteor-css__"); + newLink.setAttribute("href", Meteor._relativeToSiteRootUrl(css.url)); + attachStylesheetLink(newLink); + }); + } else { + removeOldLinks(); + } + + } + else if (doc._id === 'version' && doc.version !== autoupdateVersion) { + handle && handle.stop(); + + if (Package.reload) { + Package.reload.Reload._reload(); + } + } + }; + + var handle = ClientVersions.find().observe({ + added: checkNewVersionDocument, + changed: checkNewVersionDocument + }); + } + } + }); +}; +Autoupdate._retrySubscription(); diff --git a/packages/autoupdate/autoupdate_cordova.js b/packages/autoupdate/autoupdate_cordova.js new file mode 100644 index 0000000000000000000000000000000000000000..5cf39ace8bb3a7eb6c823eb25f5cb95462c0b21c --- /dev/null +++ b/packages/autoupdate/autoupdate_cordova.js @@ -0,0 +1,316 @@ +var DEBUG_TAG = 'METEOR CORDOVA DEBUG (autoupdate_cordova.js) '; +var log = function (msg) { + console.log(DEBUG_TAG + msg); +}; + +// This constant was picked by testing on iOS 7.1 +// We limit the number of concurrent downloads because iOS gets angry on the +// application when a certain limit is exceeded and starts timing-out the +// connections in 1-2 minutes which makes the whole HCP really slow. +var MAX_NUM_CONCURRENT_DOWNLOADS = 30; +var MAX_RETRY_COUNT = 5; + +var autoupdateVersionCordova = __meteor_runtime_config__.autoupdateVersionCordova || "unknown"; + +// The collection of acceptable client versions. +ClientVersions = new Mongo.Collection("meteor_autoupdate_clientVersions"); + +Autoupdate = {}; + +Autoupdate.newClientAvailable = function () { + return !! ClientVersions.findOne({ + _id: 'version-cordova', + version: {$ne: autoupdateVersionCordova} + }); +}; + +var writeFile = function (directoryPath, fileName, content, cb) { + var fail = function (err) { + cb(new Error("Failed to write file: ", err), null); + }; + + window.resolveLocalFileSystemURL(directoryPath, function (dirEntry) { + var success = function (fileEntry) { + fileEntry.createWriter(function (writer) { + writer.onwrite = function (evt) { + var result = evt.target.result; + cb(null, result); + }; + writer.onerror = fail; + writer.write(content); + }, fail); + }; + + dirEntry.getFile(fileName, { + create: true, + exclusive: false + }, success, fail); + }, fail); +}; + +var restartServer = function (location) { + log('restartServer with location ' + location); + var fail = function (err) { log("Unexpected error in restartServer: " + err.message) }; + var httpd = cordova && cordova.plugins && cordova.plugins.CordovaUpdate; + + if (! httpd) { + fail(new Error('no httpd')); + return; + } + + var startServer = function (cordovajsRoot) { + httpd.startServer({ + 'www_root' : location, + 'cordovajs_root': cordovajsRoot + }, function (url) { + if (Package.reload) { + Package.reload.Reload._reload(); + } else { + window.location.reload(); + } + }, fail); + }; + + httpd.getCordovajsRoot(function (cordovajsRoot) { + startServer(cordovajsRoot); + }, fail); +}; + +var hasCalledReload = false; +var updating = false; +var localPathPrefix = null; + +var onNewVersion = function () { + var ft = new FileTransfer(); + var urlPrefix = Meteor.absoluteUrl() + '__cordova'; + HTTP.get(urlPrefix + '/manifest.json', function (err, res) { + if (err || ! res.data) { + log('Failed to download the manifest ' + (err && err.message) + ' ' + (res && res.content)); + return; + } + + updating = true; + ensureLocalPathPrefix(_.bind(downloadNewVersion, null, res.data)); + }); +}; + +var downloadNewVersion = function (program) { + var urlPrefix = Meteor.absoluteUrl() + '__cordova'; + var manifest = _.clone(program.manifest); + var version = program.version; + var ft = new FileTransfer(); + + manifest.push({ url: '/index.html?' + Random.id() }); + + var versionPrefix = localPathPrefix + version; + + var queue = []; + _.each(manifest, function (item) { + if (! item.url) return; + + var url = item.url; + url = url.replace(/\?.+$/, ''); + + queue.push(url); + }); + + var afterAllFilesDownloaded = _.after(queue.length, function () { + var wroteManifest = function (err) { + if (err) { + log("Failed to write manifest.json: " + err); + // XXX do something smarter? + return; + } + + // success! downloaded all sources and saved the manifest + // save the version string for atomicity + writeFile(localPathPrefix, 'version', version, function (err) { + if (err) { + log("Failed to write version: " + err); + return; + } + + // don't call reload twice! + if (! hasCalledReload) { + var location = uriToPath(localPathPrefix + version); + restartServer(location); + } + }); + }; + + writeFile(versionPrefix, 'manifest.json', + JSON.stringify(program, undefined, 2), wroteManifest); + }); + + var downloadUrl = function (url) { + console.log(DEBUG_TAG + "start downloading " + url); + // Add a cache buster to ensure that we don't cache an old asset. + var uri = encodeURI(urlPrefix + url + '?' + Random.id()); + + // Try to download the file a few times. + var tries = 0; + var tryDownload = function () { + ft.download(uri, versionPrefix + encodeURI(url), function (entry) { + if (entry) { + console.log(DEBUG_TAG + "done downloading " + url); + // start downloading next queued url + if (queue.length) + downloadUrl(queue.shift()); + afterAllFilesDownloaded(); + } + }, function (err) { + // It failed, try again if we have tried less than 5 times. + if (tries++ < MAX_RETRY_COUNT) { + log("Download error, will retry (#" + tries + "): " + uri); + tryDownload(); + } else { + log('Download failed: ' + JSON.stringify(err) + ", source=" + err.source + ", target=" + err.target); + } + }); + }; + + tryDownload(); + }; + + _.times(Math.min(MAX_NUM_CONCURRENT_DOWNLOADS, queue.length), function () { + var nextUrl = queue.shift(); + // XXX defer the next download so iOS doesn't rate limit us on concurrent + // downloads + Meteor.setTimeout(downloadUrl.bind(null, nextUrl), 50); + }); +}; + +var retry = new Retry({ + minCount: 0, // don't do any immediate retries + baseTimeout: 30*1000 // start with 30s +}); +var failures = 0; + +Autoupdate._retrySubscription = function () { + var appId = __meteor_runtime_config__.appId; + Meteor.subscribe("meteor_autoupdate_clientVersions", appId, { + onError: function (err) { + Meteor._debug("autoupdate subscription failed:", err); + failures++; + retry.retryLater(failures, function () { + // Just retry making the subscription, don't reload the whole + // page. While reloading would catch more cases (for example, + // the server went back a version and is now doing old-style hot + // code push), it would also be more prone to reload loops, + // which look really bad to the user. Just retrying the + // subscription over DDP means it is at least possible to fix by + // updating the server. + Autoupdate._retrySubscription(); + }); + } + }); + if (Package.reload) { + var checkNewVersionDocument = function (doc) { + var self = this; + if (doc.version !== autoupdateVersionCordova) { + window.fireGlobalEvent('onNewVersion', doc.version) + onNewVersion(); + } + }; + + var handle = ClientVersions.find({ + _id: 'version-cordova' + }).observe({ + added: checkNewVersionDocument, + changed: checkNewVersionDocument + }); + } +}; + +Meteor.startup(function () { + clearAutoupdateCache(autoupdateVersionCordova); +}); +Meteor.startup(Autoupdate._retrySubscription); + + +// A helper that removes old directories left from previous autoupdates +var clearAutoupdateCache = function (currentVersion) { + ensureLocalPathPrefix(function () { + // Try to clean up our cache directory, make sure to scan the directory + // *before* loading the actual app. This ordering will prevent race + // conditions when the app code tries to download a new version before + // the old-cache removal has scanned the cache folder. + listDirectory(localPathPrefix, {dirsOnly: true}, function (err, names) { + // Couldn't get the list of dirs or risking to get into a race with an + // on-going update to disk. + if (err || updating) { + return; + } + + _.each(names, function (name) { + // Skip the folder with the latest version + if (name === currentVersion) + return; + + // remove everything else, as we don't want to keep too much cache + // around on disk + removeDirectory(localPathPrefix + name + '/', function (err) { + if (err) { + log('Failed to remove an old cache folder ' + + name + ':' + err.message); + } else { + log('Successfully removed an old cache folder ' + name); + } + }); + }); + }); + }) +}; + +// Cordova File plugin helpers +var listDirectory = function (url, options, cb) { + if (typeof options === 'function') + cb = options, options = {}; + + var fail = function (err) { cb(err); }; + window.resolveLocalFileSystemURL(url, function (entry) { + var reader = entry.createReader(); + reader.readEntries(function (entries) { + var names = []; + _.each(entries, function (entry) { + if (! options.dirsOnly || entry.isDirectory) + names.push(entry.name); + }); + cb(null, names); + }, fail); + }, fail); +}; + +var removeDirectory = function (url, cb) { + var fail = function (err) { + cb(err); + }; + window.resolveLocalFileSystemURL(url, function (entry) { + entry.removeRecursively(function () { cb(); }, fail); + }, fail); +}; + +var uriToPath = function (uri) { + return decodeURI(uri).replace(/^file:\/\//g, ''); +}; + +var ensureLocalPathPrefix = function (cb) { + if (! localPathPrefix) { + if (! cordova.file.dataDirectory) { + // Since ensureLocalPathPrefix function is always called on + // Meteor.startup, all Cordova plugins should be ready. + // XXX Experiments have shown that it is not always the case, even when + // the cordova.file symbol is attached, properties like dataDirectory + // still can be null. Poll until we are sure the property is attached. + console.log(DEBUG_TAG + 'cordova.file.dataDirectory is null, retrying in 20ms'); + // REMOVED to prevent loop in new app + // Meteor.setTimeout(_.bind(ensureLocalPathPrefix, null, cb), 20); + } else { + localPathPrefix = cordova.file.dataDirectory + 'meteor/'; + cb(); + } + } else { + cb(); + } +}; + diff --git a/packages/autoupdate/autoupdate_server.js b/packages/autoupdate/autoupdate_server.js new file mode 100644 index 0000000000000000000000000000000000000000..e8cc178579274e42c5d98540814bcddf2b2967c9 --- /dev/null +++ b/packages/autoupdate/autoupdate_server.js @@ -0,0 +1,198 @@ +// Publish the current client versions to the client. When a client +// sees the subscription change and that there is a new version of the +// client available on the server, it can reload. +// +// By default there are two current client versions. The refreshable client +// version is identified by a hash of the client resources seen by the browser +// that are refreshable, such as CSS, while the non refreshable client version +// is identified by a hash of the rest of the client assets +// (the HTML, code, and static files in the `public` directory). +// +// If the environment variable `AUTOUPDATE_VERSION` is set it will be +// used as the client id instead. You can use this to control when +// the client reloads. For example, if you want to only force a +// reload on major changes, you can use a custom AUTOUPDATE_VERSION +// which you only change when something worth pushing to clients +// immediately happens. +// +// The server publishes a `meteor_autoupdate_clientVersions` +// collection. There are two documents in this collection, a document +// with _id 'version' which represents the non refreshable client assets, +// and a document with _id 'version-refreshable' which represents the +// refreshable client assets. Each document has a 'version' field +// which is equivalent to the hash of the relevant assets. The refreshable +// document also contains a list of the refreshable assets, so that the client +// can swap in the new assets without forcing a page refresh. Clients can +// observe changes on these documents to detect when there is a new +// version available. +// +// In this implementation only two documents are present in the collection +// the current refreshable client version and the current nonRefreshable client +// version. Developers can easily experiment with different versioning and +// updating models by forking this package. + +var Future = Npm.require("fibers/future"); + +Autoupdate = {}; + +// The collection of acceptable client versions. +ClientVersions = new Mongo.Collection("meteor_autoupdate_clientVersions", + { connection: null }); + +// The client hash includes __meteor_runtime_config__, so wait until +// all packages have loaded and have had a chance to populate the +// runtime config before using the client hash as our default auto +// update version id. + +// Note: Tests allow people to override Autoupdate.autoupdateVersion before +// startup. +Autoupdate.autoupdateVersion = null; +Autoupdate.autoupdateVersionRefreshable = null; +Autoupdate.autoupdateVersionCordova = null; +Autoupdate.appId = __meteor_runtime_config__.appId = process.env.APP_ID; + +var syncQueue = new Meteor._SynchronousQueue(); + +// updateVersions can only be called after the server has fully loaded. +var updateVersions = function (shouldReloadClientProgram) { + // Step 1: load the current client program on the server and update the + // hash values in __meteor_runtime_config__. + if (shouldReloadClientProgram) { + WebAppInternals.reloadClientPrograms(); + } + + // If we just re-read the client program, or if we don't have an autoupdate + // version, calculate it. + if (shouldReloadClientProgram || Autoupdate.autoupdateVersion === null) { + Autoupdate.autoupdateVersion = + process.env.AUTOUPDATE_VERSION || + WebApp.calculateClientHashNonRefreshable(); + } + // If we just recalculated it OR if it was set by (eg) test-in-browser, + // ensure it ends up in __meteor_runtime_config__. + __meteor_runtime_config__.autoupdateVersion = + Autoupdate.autoupdateVersion; + + Autoupdate.autoupdateVersionRefreshable = + __meteor_runtime_config__.autoupdateVersionRefreshable = + process.env.AUTOUPDATE_VERSION || + WebApp.calculateClientHashRefreshable(); + + Autoupdate.autoupdateVersionCordova = + __meteor_runtime_config__.autoupdateVersionCordova = + process.env.AUTOUPDATE_VERSION || + WebApp.calculateClientHashCordova(); + + // Step 2: form the new client boilerplate which contains the updated + // assets and __meteor_runtime_config__. + if (shouldReloadClientProgram) { + WebAppInternals.generateBoilerplate(); + } + + // XXX COMPAT WITH 0.8.3 + if (! ClientVersions.findOne({current: true})) { + // To ensure apps with version of Meteor prior to 0.9.0 (in + // which the structure of documents in `ClientVersions` was + // different) also reload. + ClientVersions.insert({current: true}); + } + + if (! ClientVersions.findOne({_id: "version"})) { + ClientVersions.insert({ + _id: "version", + version: Autoupdate.autoupdateVersion + }); + } else { + ClientVersions.update("version", { $set: { + version: Autoupdate.autoupdateVersion + }}); + } + + if (! ClientVersions.findOne({_id: "version-cordova"})) { + ClientVersions.insert({ + _id: "version-cordova", + version: Autoupdate.autoupdateVersionCordova, + refreshable: false + }); + } else { + ClientVersions.update("version-cordova", { $set: { + version: Autoupdate.autoupdateVersionCordova + }}); + } + + // Use `onListening` here because we need to use + // `WebAppInternals.refreshableAssets`, which is only set after + // `WebApp.generateBoilerplate` is called by `main` in webapp. + WebApp.onListening(function () { + if (! ClientVersions.findOne({_id: "version-refreshable"})) { + ClientVersions.insert({ + _id: "version-refreshable", + version: Autoupdate.autoupdateVersionRefreshable, + assets: WebAppInternals.refreshableAssets + }); + } else { + ClientVersions.update("version-refreshable", { $set: { + version: Autoupdate.autoupdateVersionRefreshable, + assets: WebAppInternals.refreshableAssets + }}); + } + }); +}; + +Meteor.publish( + "meteor_autoupdate_clientVersions", + function (appId) { + // `null` happens when a client doesn't have an appId and passes + // `undefined` to `Meteor.subscribe`. `undefined` is translated to + // `null` as JSON doesn't have `undefined. + check(appId, Match.OneOf(String, undefined, null)); + + // Don't notify clients using wrong appId such as mobile apps built with a + // different server but pointing at the same local url + if (Autoupdate.appId && appId && Autoupdate.appId !== appId) + return []; + + return ClientVersions.find(); + }, + {is_auto: true} +); + +Meteor.startup(function () { + updateVersions(false); +}); + +var fut = new Future(); + +// We only want 'refresh' to trigger 'updateVersions' AFTER onListen, +// so we add a queued task that waits for onListen before 'refresh' can queue +// tasks. Note that the `onListening` callbacks do not fire until after +// Meteor.startup, so there is no concern that the 'updateVersions' calls from +// 'refresh' will overlap with the `updateVersions` call from Meteor.startup. + +syncQueue.queueTask(function () { + fut.wait(); +}); + +WebApp.onListening(function () { + fut.return(); +}); + +var enqueueVersionsRefresh = function () { + syncQueue.queueTask(function () { + updateVersions(true); + }); +}; + +// Listen for the special {refresh: 'client'} message, which signals that a +// client asset has changed. +process.on('message', Meteor.bindEnvironment(function (m) { + if (m && m.refresh === 'client') { + enqueueVersionsRefresh(); + } +}, "handling client refresh message")); + +// Another way to tell the process to refresh: send SIGHUP signal +process.on('SIGHUP', Meteor.bindEnvironment(function () { + enqueueVersionsRefresh(); +}, "handling SIGHUP signal for refresh")); + diff --git a/packages/autoupdate/package.js b/packages/autoupdate/package.js new file mode 100644 index 0000000000000000000000000000000000000000..8895552bf35f6f788575b3a0508cc7541c5395a2 --- /dev/null +++ b/packages/autoupdate/package.js @@ -0,0 +1,35 @@ +Package.describe({ + summary: "Update the client when new client code is available", + version: '1.2.4' +}); + +Cordova.depends({ + 'cordova-plugin-file': '2.1.0', + 'cordova-plugin-file-transfer': '1.2.0' +}); + +Package.onUse(function (api) { + api.use([ + 'webapp', + 'check' + ], 'server'); + + api.use([ + 'tracker', + 'retry' + ], 'client'); + + api.use([ + 'ddp', + 'mongo', + 'underscore' + ], ['client', 'server']); + + api.use(['http', 'random'], 'web.cordova'); + + api.addFiles('autoupdate_server.js', 'server'); + api.addFiles('autoupdate_client.js', 'web.browser'); + api.addFiles('autoupdate_cordova.js', 'web.cordova'); + + api.export('Autoupdate'); +}); diff --git a/packages/meteor-accounts-saml/saml_utils.js b/packages/meteor-accounts-saml/saml_utils.js index 31d572c59492cf1d6a4e286ae385be93c7be4d8a..c90734a645156a443a35767f3d6c7849ef5e5a8f 100644 --- a/packages/meteor-accounts-saml/saml_utils.js +++ b/packages/meteor-accounts-saml/saml_utils.js @@ -58,8 +58,7 @@ SAML.prototype.generateUniqueID = function () { }; SAML.prototype.generateInstant = function () { - var date = new Date(); - return date.getUTCFullYear() + '-' + ('0' + (date.getUTCMonth() + 1)).slice(-2) + '-' + ('0' + date.getUTCDate()).slice(-2) + 'T' + ('0' + (date.getUTCHours() + 2)).slice(-2) + ":" + ('0' + date.getUTCMinutes()).slice(-2) + ":" + ('0' + date.getUTCSeconds()).slice(-2) + "Z"; + return new Date().toISOString(); }; SAML.prototype.signRequest = function (xml) { @@ -105,7 +104,7 @@ SAML.prototype.generateLogoutRequest = function (options) { // options should be of the form // nameId: <nameId as submitted during SAML SSO> // sessionIndex: sessionIndex - // --- NO SAMLsettings: <Meteor.setting.saml entry for the provider you want to SLO from + // --- NO SAMLsettings: <Meteor.setting.saml entry for the provider you want to SLO from var id = "_" + this.generateUniqueID(); var instant = this.generateInstant(); @@ -172,7 +171,7 @@ SAML.prototype.requestToUrl = function (request, operation, callback) { samlRequest.Signature = self.signRequest(querystring.stringify(samlRequest)); } - // TBD. We should really include a proper RelayState here + // TBD. We should really include a proper RelayState here if (operation === 'logout') { // in case of logout we want to be redirected back to the Meteor app. var relayState = Meteor.absoluteUrl(); @@ -438,7 +437,7 @@ SAML.prototype.generateServiceProviderMetadata = function (callbackUrl) { if (!decryptionCert) { decryptionCert = this.options.privateCert; - } + } if (this.options.privateKey) { if (!decryptionCert) { diff --git a/packages/meteor-streams/package.js b/packages/meteor-streams/package.js index 0b2b99d974d70a599740eac992592bcdf8cbfd2d..1f4b367cc05be0d2a55850b637d2982403b1e22c 100644 --- a/packages/meteor-streams/package.js +++ b/packages/meteor-streams/package.js @@ -6,6 +6,8 @@ Package.describe({ Package.on_use(function (api, where) { api.use('underscore', ['client', 'server']); + api.use('check'); + api.use('random'); api.add_files(['lib/ev.js', 'lib/server.js', 'lib/stream_permission.js'], 'server'); api.add_files(['lib/ev.js', 'lib/client.js'], 'client'); }); diff --git a/packages/rocketchat-authorization/server/functions/addUsersToRoles.coffee b/packages/rocketchat-authorization/server/functions/addUsersToRoles.coffee index 3b04cfa6fd5f82848a62d2fbe2dff8a5bf352d4a..3af878e6814adf10ef689e91cabe3eb8508bb1c3 100644 --- a/packages/rocketchat-authorization/server/functions/addUsersToRoles.coffee +++ b/packages/rocketchat-authorization/server/functions/addUsersToRoles.coffee @@ -16,11 +16,13 @@ RocketChat.authz.addUsersToRoles = (userIds, roleNames, scope ) -> existingRoleNames = _.pluck(RocketChat.authz.getRoles().fetch(), 'name') invalidRoleNames = _.difference( roleNames, existingRoleNames) unless _.isEmpty(invalidRoleNames) - throw new Meteor.Error 'invalid-role' + # throw new Meteor.Error 'invalid-role' + for role in invalidRoleNames + Roles.createRole role unless _.isString(scope) scope = Roles.GLOBAL_GROUP Roles.addUsersToRoles( userIds, roleNames, scope) - return true \ No newline at end of file + return true diff --git a/packages/rocketchat-authorization/server/startup.coffee b/packages/rocketchat-authorization/server/startup.coffee index a8072af4f3c23aecd1bf1253a9576de9b52ac8b5..c7cd71d40729c789b8fcfa8723077cca02e0a1e0 100644 --- a/packages/rocketchat-authorization/server/startup.coffee +++ b/packages/rocketchat-authorization/server/startup.coffee @@ -72,6 +72,11 @@ Meteor.startup -> { _id: 'delete-d', roles : ['admin', 'site-moderator']} + { _id: 'bulk-register-user', + roles : ['admin']} + + { _id: 'bulk-create-c', + roles : ['admin']} ] #alanning:roles diff --git a/packages/rocketchat-channel-settings/client/startup/messageTypes.coffee b/packages/rocketchat-channel-settings/client/startup/messageTypes.coffee new file mode 100644 index 0000000000000000000000000000000000000000..3870f1ef762ef43f2c38dfbc876c828b2d4170bd --- /dev/null +++ b/packages/rocketchat-channel-settings/client/startup/messageTypes.coffee @@ -0,0 +1,20 @@ +Meteor.startup -> + RocketChat.MessageTypes.registerType + id: 'room_changed_privacy' + system: true + message: 'room_changed_privacy' + data: (message) -> + return { + user_by: message.u?.username + room_type: message.msg + } + + RocketChat.MessageTypes.registerType + id: 'room_changed_topic' + system: true + message: 'room_changed_topic' + data: (message) -> + return { + user_by: message.u?.username + room_topic: message.msg + } diff --git a/packages/rocketchat-channel-settings/client/startup/tabBar.coffee b/packages/rocketchat-channel-settings/client/startup/tabBar.coffee new file mode 100644 index 0000000000000000000000000000000000000000..17d1680317e5f51238544bf6c4a08cc9e7a6cc61 --- /dev/null +++ b/packages/rocketchat-channel-settings/client/startup/tabBar.coffee @@ -0,0 +1,12 @@ +Meteor.startup -> + + RocketChat.callbacks.add 'enter-room', (subscription) -> + + if RocketChat.authz.hasAtLeastOnePermission('edit-room', subscription?.rid) + RocketChat.TabBar.addButton + id: 'channel-settings' + i18nTitle: 'Channel_Settings' + icon: 'octicon octicon-gear' + template: 'channelSettings' + order: 0 + , RocketChat.callbacks.priority.MEDIUM, 'enter-room-tabbar-channel-settings' diff --git a/packages/rocketchat-channel-settings/client/startup/trackSettingsChange.coffee b/packages/rocketchat-channel-settings/client/startup/trackSettingsChange.coffee new file mode 100644 index 0000000000000000000000000000000000000000..b3618dd7232e96c9c775de28896c58df47feef05 --- /dev/null +++ b/packages/rocketchat-channel-settings/client/startup/trackSettingsChange.coffee @@ -0,0 +1,15 @@ +Meteor.startup -> + roomSettingsChangedCallback = (msg) -> + Tracker.nonreactive -> + if msg.t is 'room_changed_privacy' + if Session.get('openedRoom') is msg.rid + type = if FlowRouter.current().route.name is 'channel' then 'c' else 'p' + RoomManager.close type + FlowRouter.getParam('name') + + subscription = ChatSubscription.findOne({ rid: msg.rid }) + route = if subscription.t is 'c' then 'channel' else 'group' + FlowRouter.go route, name: subscription.name + + return msg + + RocketChat.callbacks.add 'streamMessage', roomSettingsChangedCallback, RocketChat.callbacks.priority.HIGH diff --git a/packages/rocketchat-channel-settings/client/stylesheets/channel-settings.less b/packages/rocketchat-channel-settings/client/stylesheets/channel-settings.less new file mode 100644 index 0000000000000000000000000000000000000000..0227c11170d8da36077c2baffa8c113f2edd2ce1 --- /dev/null +++ b/packages/rocketchat-channel-settings/client/stylesheets/channel-settings.less @@ -0,0 +1,17 @@ +.flex-tab { + .channel-settings { + margin-top: 60px; + padding: 20px; + + form { + label { + + } + } + + .submit { + margin-top: 30px; + text-align: center; + } + } +} diff --git a/packages/rocketchat-channel-settings/client/views/channelSettings.coffee b/packages/rocketchat-channel-settings/client/views/channelSettings.coffee new file mode 100644 index 0000000000000000000000000000000000000000..4f9f5d344c5d991fad19f382913407cb7ea7e37b --- /dev/null +++ b/packages/rocketchat-channel-settings/client/views/channelSettings.coffee @@ -0,0 +1,23 @@ +Template.channelSettings.helpers + notDirect: -> + return ChatRoom.findOne(@rid)?.t isnt 'd' + roomType: -> + return ChatRoom.findOne(@rid)?.t + +Template.channelSettings.events + 'click .save': (e, t) -> + e.preventDefault() + + settings = + roomType: t.$('input[name=roomType]:checked').val() + + Meteor.call 'saveRoomSettings', t.data.rid, settings, (err, results) -> + return toastr.error err.reason if err + toastr.success TAPi18n.__ 'Settings_updated' + + + # switch room.t + # when 'c' + # FlowRouter.go 'channel', name: name + # when 'p' + # FlowRouter.go 'group', name: name diff --git a/packages/rocketchat-channel-settings/client/views/channelSettings.html b/packages/rocketchat-channel-settings/client/views/channelSettings.html new file mode 100644 index 0000000000000000000000000000000000000000..c72ecae4ad66d4f22d6ecb136fc607766b3e11ab --- /dev/null +++ b/packages/rocketchat-channel-settings/client/views/channelSettings.html @@ -0,0 +1,25 @@ +<template name="channelSettings"> + <div class="control"> + <div class="header"> + <h2>{{_ "Room_Settings"}}</h2> + </div> + </div> + <div class="channel-settings scrollable"> + <form> + <fieldset> + {{#if notDirect}} + <div class="input-line double-col"> + <label>{{_ "Room_Type"}}</label> + <div> + <label><input type="radio" name="roomType" value="c" checked="{{$eq roomType 'c'}}" /> {{_ "Channel"}}</label> + <label><input type="radio" name="roomType" value="p" checked="{{$eq roomType 'p'}}" /> {{_ "Private_Group"}}</label> + </div> + </div> + {{/if}} + </fieldset> + <div class="submit"> + <button class="button save"><i class="icon-send"></i><span>{{_ "Save_changes"}}</span></button> + </div> + </form> + </div> +</template> diff --git a/packages/rocketchat-channel-settings/i18n/en.i18n.json b/packages/rocketchat-channel-settings/i18n/en.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..ba1d6c016df575a3fd51bca1114e7e932d220575 --- /dev/null +++ b/packages/rocketchat-channel-settings/i18n/en.i18n.json @@ -0,0 +1,8 @@ +{ + "Channel": "Channel", + "Private_Group": "Private Group", + "Room_Type": "Room Type", + "Room_Settings": "Room Settings", + "room_changed_privacy": "Room type changed to: <em>__room_type__</em> by <em>__user_by__</em>", + "room_changed_topic": "Room topic changed to: <em>__room_topic__</em> by <em>__user_by__</em>" +} diff --git a/packages/rocketchat-channel-settings/package.js b/packages/rocketchat-channel-settings/package.js new file mode 100644 index 0000000000000000000000000000000000000000..06b8f3fe128ac6140841c36bb2827c5a803c48f6 --- /dev/null +++ b/packages/rocketchat-channel-settings/package.js @@ -0,0 +1,48 @@ +Package.describe({ + name: 'rocketchat:channel-settings', + version: '0.0.1', + summary: 'Channel Settings Panel', + git: '' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.0'); + + api.use([ + 'coffeescript', + 'templating', + 'less@2.5.0', + 'rocketchat:lib@0.0.1' + ]); + + api.addFiles([ + 'client/startup/messageTypes.coffee', + 'client/startup/tabBar.coffee', + 'client/startup/trackSettingsChange.coffee', + 'client/views/channelSettings.html', + 'client/views/channelSettings.coffee', + 'client/stylesheets/channel-settings.less' + ], 'client'); + + api.addFiles([ + 'server/functions/changeRoomType.coffee', + 'server/methods/saveRoomSettings.coffee', + 'server/models/Messages.coffee' + ], 'server'); + + // TAPi18n + var _ = Npm.require('underscore'); + var fs = Npm.require('fs'); + tapi18nFiles = _.compact(_.map(fs.readdirSync('packages/rocketchat-channel-settings/i18n'), function(filename) { + if (fs.statSync('packages/rocketchat-channel-settings/i18n/' + filename).size > 16) { + return 'i18n/' + filename; + } + })); + api.use('tap:i18n@1.6.1'); + api.imply('tap:i18n'); + api.addFiles(tapi18nFiles); +}); + +Package.onTest(function(api) { + +}); diff --git a/packages/rocketchat-channel-settings/server/functions/changeRoomType.coffee b/packages/rocketchat-channel-settings/server/functions/changeRoomType.coffee new file mode 100644 index 0000000000000000000000000000000000000000..e9c89567302e183d11b51dec04818c0dacdde7c5 --- /dev/null +++ b/packages/rocketchat-channel-settings/server/functions/changeRoomType.coffee @@ -0,0 +1,47 @@ +RocketChat.changeRoomType = (rid, roomType) -> + console.log '[function] RocketChat.changeRoomType'.green, rid, roomType + + unless Match.test rid, String + throw new Meteor.Error 'invalid-rid' + + if roomType not in ['c', 'p'] + throw new Meteor.Error 'invalid-room-type' + + return RocketChat.models.Rooms.setTypeById(rid, roomType) and RocketChat.models.Subscriptions.updateTypeByRoomId(rid, roomType) + + + # username = s.trim username + # if not user or not username + # return false + + # if not /^[0-9a-zA-Z-_.]+$/.test username + # return false + + # # User already has desired username, return + # if user.username is username + # return user + + # # Check username availability + # unless RocketChat.checkUsernameAvailability username + # return false + + # previousUsername = user.username + + # # Username is available; if coming from old username, update all references + # if previousUsername + # RocketChat.models.Messages.updateAllUsernamesByUserId user._id, username + + # RocketChat.models.Messages.findByMention(previousUsername).forEach (msg) -> + # updatedMsg = msg.msg.replace(new RegExp("@#{previousUsername}", "ig"), "@#{username}") + # RocketChat.models.Messages.updateUsernameAndMessageOfMentionByIdAndOldUsername msg._id, previousUsername, username, updatedMsg + + # RocketChat.models.Rooms.replaceUsername previousUsername, username + # RocketChat.models.Rooms.replaceUsernameOfUserByUserId user._id, username + + # RocketChat.models.Subscriptions.setUserUsernameByUserId user._id, username + # RocketChat.models.Subscriptions.setNameForDirectRoomsWithOldName previousUsername, username + + # # Set new username + # Meteor.users.update { _id: user._id }, { $set: { username: username } } + # user.username = username + # return user diff --git a/packages/rocketchat-channel-settings/server/methods/saveRoomSettings.coffee b/packages/rocketchat-channel-settings/server/methods/saveRoomSettings.coffee new file mode 100644 index 0000000000000000000000000000000000000000..6375bf5f289180ce9e3732a313febb8522c65e56 --- /dev/null +++ b/packages/rocketchat-channel-settings/server/methods/saveRoomSettings.coffee @@ -0,0 +1,26 @@ +Meteor.methods + saveRoomSettings: (rid, settings) -> + console.log '[method] saveRoomSettings'.green, rid, settings + + unless Match.test rid, String + throw new Meteor.Error 'invalid-rid' + + unless Match.test settings, Match.ObjectIncluding { roomType: String } + throw new Meteor.Error 'invalid-settings' + + unless RocketChat.authz.hasPermission(Meteor.userId(), 'edit-room', rid) + throw new Meteor.Error 503, 'Not authorized' + + room = RocketChat.models.Rooms.findOneById rid + if room? + if settings.roomType isnt room.t + RocketChat.changeRoomType(rid, settings.roomType) + + if settings.roomType is 'c' + message = TAPi18n.__('Channel') + else + message = TAPi18n.__('Private_Group') + + RocketChat.models.Messages.createRoomSettingsChangedWithTypeRoomIdMessageAndUser 'room_changed_privacy', rid, message, Meteor.user() + + return true diff --git a/packages/rocketchat-channel-settings/server/models/Messages.coffee b/packages/rocketchat-channel-settings/server/models/Messages.coffee new file mode 100644 index 0000000000000000000000000000000000000000..0a8e900e45d40835d506b73c468240b2d9208a8c --- /dev/null +++ b/packages/rocketchat-channel-settings/server/models/Messages.coffee @@ -0,0 +1,2 @@ +RocketChat.models.Messages.createRoomSettingsChangedWithTypeRoomIdMessageAndUser = (type, roomId, message, user, extraData) -> + return @createWithTypeRoomIdMessageAndUser type, roomId, message, user, extraData diff --git a/packages/rocketchat-chatops/i18n/fa.i18n.json b/packages/rocketchat-chatops/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-chatops/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-chatops/i18n/fi.i18n.json b/packages/rocketchat-chatops/i18n/fi.i18n.json index 73d7555f6449d5bb6e09e8f5968b25d9a685fea2..70ebca1f53b84507cc72415602653dd801a820cd 100644 --- a/packages/rocketchat-chatops/i18n/fi.i18n.json +++ b/packages/rocketchat-chatops/i18n/fi.i18n.json @@ -1,4 +1,5 @@ { "Chatops_Enabled" : "Ota käyttöön Chatops", - "Chatops_Title" : "Chatops paneeli" + "Chatops_Title" : "Chatops paneeli", + "Chatops_Username" : "Chatops käyttäjätunnus" } \ No newline at end of file diff --git a/packages/rocketchat-chatops/i18n/sv.i18n.json b/packages/rocketchat-chatops/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-chatops/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-emojione/package.js b/packages/rocketchat-emojione/package.js index 607949ec77b069e46baaa1be2a8735e154f767ab..761d9d0ff8753afae6e5f894bc2e8dee6ceb5d00 100644 --- a/packages/rocketchat-emojione/package.js +++ b/packages/rocketchat-emojione/package.js @@ -10,7 +10,7 @@ Package.onUse(function(api) { api.use([ 'coffeescript', - 'qnub:emojione', + 'emojione:emojione', 'rocketchat:lib@0.0.1' ]); diff --git a/packages/rocketchat-github-enterprise/i18n/en.i18n.json b/packages/rocketchat-github-enterprise/i18n/en.i18n.json index 8fb066fbe088b41a8e5ab751523eb8434ed5b8aa..dac5ec52b61b9339d966208eb872912cb0fdf663 100644 --- a/packages/rocketchat-github-enterprise/i18n/en.i18n.json +++ b/packages/rocketchat-github-enterprise/i18n/en.i18n.json @@ -1,7 +1,10 @@ { "Accounts_OAuth_GitHub_Enterprise" : "OAuth Enabled", + "Accounts_OAuth_GitHub_Enterprise_Description": "", "API_GitHub_Enterprise_URL" : "Server URL", "Accounts_OAuth_GitHub_Enterprise_id" : "Client Id", + "Accounts_OAuth_GitHub_Enterprise_id_Description" : "", "Accounts_OAuth_GitHub_Enterprise_secret" : "Client Secret", - "Github_Enterprise_Url_No_Trail" : "Note: Please exclude trailing slash" -} \ No newline at end of file + "Accounts_OAuth_GitHub_Enterprise_secret_Description" : "", + "Github_Enterprise_Url_No_Trail" : "Example: http://domain.com (excluding trailing slash)" +} diff --git a/packages/rocketchat-github-enterprise/i18n/fa.i18n.json b/packages/rocketchat-github-enterprise/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-github-enterprise/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-github-enterprise/i18n/fi.i18n.json b/packages/rocketchat-github-enterprise/i18n/fi.i18n.json index 06dd996c99c061aa3c02f3520b909ab4d0619fe2..107ca5894b88e55952d55b6e92e5713011692d91 100644 --- a/packages/rocketchat-github-enterprise/i18n/fi.i18n.json +++ b/packages/rocketchat-github-enterprise/i18n/fi.i18n.json @@ -1,3 +1,7 @@ { - "API_GitHub_Enterprise_URL" : "GitHub Enterprise" + "Accounts_OAuth_GitHub_Enterprise" : "OAuth Käytössä", + "API_GitHub_Enterprise_URL" : "Server URL", + "Accounts_OAuth_GitHub_Enterprise_id" : "Client ID", + "Accounts_OAuth_GitHub_Enterprise_secret" : "Client Secret", + "Github_Enterprise_Url_No_Trail" : "Huom: Älä syötä viimeistä kenoviivaa" } \ No newline at end of file diff --git a/packages/rocketchat-github-enterprise/i18n/sv.i18n.json b/packages/rocketchat-github-enterprise/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-github-enterprise/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-gitlab/i18n/fa.i18n.json b/packages/rocketchat-gitlab/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-gitlab/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-gitlab/i18n/fi.i18n.json b/packages/rocketchat-gitlab/i18n/fi.i18n.json index ce7e0675b85ead87704432aa7c33ef23e85d788a..aa29615cd108029974531adf38285605c00aeacb 100644 --- a/packages/rocketchat-gitlab/i18n/fi.i18n.json +++ b/packages/rocketchat-gitlab/i18n/fi.i18n.json @@ -1,3 +1,3 @@ { - "API_Gitlab_URL" : "Git" + "API_Gitlab_URL" : "GitLab URL" } \ No newline at end of file diff --git a/packages/rocketchat-gitlab/i18n/sv.i18n.json b/packages/rocketchat-gitlab/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-gitlab/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-hubot/i18n/fa.i18n.json b/packages/rocketchat-hubot/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-hubot/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-hubot/i18n/sv.i18n.json b/packages/rocketchat-hubot/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-hubot/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-ldap/.npm/package/npm-shrinkwrap.json b/packages/rocketchat-ldap/.npm/package/npm-shrinkwrap.json index 3dd543e2c5edcb2c0baa55db7fae152344bbf01e..0835e040aaf7a46be52b1f347c2c4cd8fc27c49f 100644 --- a/packages/rocketchat-ldap/.npm/package/npm-shrinkwrap.json +++ b/packages/rocketchat-ldap/.npm/package/npm-shrinkwrap.json @@ -1,62 +1,116 @@ { "dependencies": { "ldapjs": { - "version": "0.7.1", + "version": "1.0.0", "dependencies": { "asn1": { - "version": "0.2.1" + "version": "0.2.3" }, "assert-plus": { "version": "0.1.5" }, "bunyan": { - "version": "0.22.1", + "version": "1.5.1", "dependencies": { "mv": { - "version": "0.0.5" - } - } - }, - "nopt": { - "version": "2.1.1", - "dependencies": { - "abbrev": { - "version": "1.0.7" - } - } - }, - "pooling": { - "version": "0.4.6", - "dependencies": { - "once": { - "version": "1.3.0" - }, - "vasync": { - "version": "1.4.0", + "version": "2.1.1", "dependencies": { - "jsprim": { - "version": "0.3.0", + "mkdirp": { + "version": "0.5.1", "dependencies": { - "extsprintf": { - "version": "1.0.0" - }, - "json-schema": { - "version": "0.2.2" - }, - "verror": { - "version": "1.3.3" + "minimist": { + "version": "0.0.8" } } }, - "verror": { - "version": "1.1.0", + "ncp": { + "version": "2.0.0" + }, + "rimraf": { + "version": "2.4.3", "dependencies": { - "extsprintf": { - "version": "1.0.0" + "glob": { + "version": "5.0.15", + "dependencies": { + "inflight": { + "version": "1.0.4", + "dependencies": { + "wrappy": { + "version": "1.0.1" + } + } + }, + "inherits": { + "version": "2.0.1" + }, + "minimatch": { + "version": "3.0.0", + "dependencies": { + "brace-expansion": { + "version": "1.1.1", + "dependencies": { + "balanced-match": { + "version": "0.2.1" + }, + "concat-map": { + "version": "0.0.1" + } + } + } + } + }, + "path-is-absolute": { + "version": "1.0.0" + } + } } } } } + }, + "safe-json-stringify": { + "version": "1.0.3" + } + } + }, + "dashdash": { + "version": "1.10.1" + }, + "backoff": { + "version": "2.4.1", + "dependencies": { + "precond": { + "version": "0.2.3" + } + } + }, + "ldap-filter": { + "version": "0.2.2" + }, + "once": { + "version": "1.3.2", + "dependencies": { + "wrappy": { + "version": "1.0.1" + } + } + }, + "vasync": { + "version": "1.6.3" + }, + "verror": { + "version": "1.6.0", + "dependencies": { + "extsprintf": { + "version": "1.2.0" + } + } + }, + "dtrace-provider": { + "version": "0.6.0", + "dependencies": { + "nan": { + "version": "2.1.0" } } } diff --git a/packages/rocketchat-ldap/config_server.coffee b/packages/rocketchat-ldap/config_server.coffee index 1782d782b4da4d3a679e80933ebcada243e40cb3..fd4f3f5f133ebb3ab71d08b8116a841a79c9da15 100644 --- a/packages/rocketchat-ldap/config_server.coffee +++ b/packages/rocketchat-ldap/config_server.coffee @@ -5,7 +5,7 @@ Meteor.startup -> RocketChat.settings.add 'LDAP_Enable', false, { type: 'boolean', group: 'LDAP', public: true } RocketChat.settings.add 'LDAP_Url', 'ldap://', { type: 'string' , group: 'LDAP' } RocketChat.settings.add 'LDAP_Port', '389', { type: 'string' , group: 'LDAP' } - RocketChat.settings.add 'LDAP_DN', '', { type: 'string' , group: 'LDAP', i18nLabel: 'LDAP_Dn', public: true } + RocketChat.settings.add 'LDAP_DN', '', { type: 'string' , group: 'LDAP', public: true } RocketChat.settings.add 'LDAP_Bind_Search', '', { type: 'string' , group: 'LDAP' } RocketChat.settings.add 'LDAP_Sync_User_Data', false, { type: 'boolean' , group: 'LDAP' } RocketChat.settings.add 'LDAP_Sync_User_Data_FieldMap', '{"cn":"name", "mail":"email"}', { type: 'string' , group: 'LDAP' } diff --git a/packages/rocketchat-ldap/i18n/de.i18n.json b/packages/rocketchat-ldap/i18n/de.i18n.json index b45818dfbc3442d99f7a415a12ecbbd066e9d039..22e1aec0e1553993b912be11b53e78c0a31c39c5 100644 --- a/packages/rocketchat-ldap/i18n/de.i18n.json +++ b/packages/rocketchat-ldap/i18n/de.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "LDAP URL", - "LDAP_Port" : "LDAP Port", "LDAP_Dn" : "LDAP DN" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/el.i18n.json b/packages/rocketchat-ldap/i18n/el.i18n.json index a649fce780d00420e2183bbe142bf1e7eca611aa..22e1aec0e1553993b912be11b53e78c0a31c39c5 100644 --- a/packages/rocketchat-ldap/i18n/el.i18n.json +++ b/packages/rocketchat-ldap/i18n/el.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "LDAP URL", - "LDAP_Port" : "LDAP ΘÏÏα", "LDAP_Dn" : "LDAP DN" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/en.i18n.json b/packages/rocketchat-ldap/i18n/en.i18n.json index b45818dfbc3442d99f7a415a12ecbbd066e9d039..22e1aec0e1553993b912be11b53e78c0a31c39c5 100644 --- a/packages/rocketchat-ldap/i18n/en.i18n.json +++ b/packages/rocketchat-ldap/i18n/en.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "LDAP URL", - "LDAP_Port" : "LDAP Port", "LDAP_Dn" : "LDAP DN" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/fa.i18n.json b/packages/rocketchat-ldap/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-ldap/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/fi.i18n.json b/packages/rocketchat-ldap/i18n/fi.i18n.json index 733d1e150a59fbaacf5f99b7122675f4e7b84980..22e1aec0e1553993b912be11b53e78c0a31c39c5 100644 --- a/packages/rocketchat-ldap/i18n/fi.i18n.json +++ b/packages/rocketchat-ldap/i18n/fi.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "LDAP URL", - "LDAP_Port" : "LDAP portti", "LDAP_Dn" : "LDAP DN" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/fr.i18n.json b/packages/rocketchat-ldap/i18n/fr.i18n.json index 9970877ee67e8111a0b29ce3b960525b5281cc3b..edcc9623eefc3cf8ea3317a70ff2eabdb9d2fba3 100644 --- a/packages/rocketchat-ldap/i18n/fr.i18n.json +++ b/packages/rocketchat-ldap/i18n/fr.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "Adresse LDAP", - "LDAP_Port" : "Port LDAP", "LDAP_Dn" : "DN LDAP" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/km.i18n.json b/packages/rocketchat-ldap/i18n/km.i18n.json index 8ff98cb68f07e802a5b8c1abbf69b6da6e81fce0..7d77c88f8a00149b9ac87bdd8eef644654a8b574 100644 --- a/packages/rocketchat-ldap/i18n/km.i18n.json +++ b/packages/rocketchat-ldap/i18n/km.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "URL របស់ LDAP", - "LDAP_Port" : "ច្រក LDAP", "LDAP_Dn" : " LDAP DN" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/ko.i18n.json b/packages/rocketchat-ldap/i18n/ko.i18n.json index ce57535ed743cff11804c93d8cc94f109efce0e4..22e1aec0e1553993b912be11b53e78c0a31c39c5 100644 --- a/packages/rocketchat-ldap/i18n/ko.i18n.json +++ b/packages/rocketchat-ldap/i18n/ko.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "LDAP URL", - "LDAP_Port" : "LDAP í¬íŠ¸", "LDAP_Dn" : "LDAP DN" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/ms-MY.i18n.json b/packages/rocketchat-ldap/i18n/ms-MY.i18n.json index d6c3fbb791a93e9b33d221789e28999bbbda88d5..22e1aec0e1553993b912be11b53e78c0a31c39c5 100644 --- a/packages/rocketchat-ldap/i18n/ms-MY.i18n.json +++ b/packages/rocketchat-ldap/i18n/ms-MY.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "URL LDAP", - "LDAP_Port" : "Port LDAP", "LDAP_Dn" : "LDAP DN" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/pl.i18n.json b/packages/rocketchat-ldap/i18n/pl.i18n.json index 860e847dc2a42a71ef874fbac4a3c6e9e0c551e5..22e1aec0e1553993b912be11b53e78c0a31c39c5 100644 --- a/packages/rocketchat-ldap/i18n/pl.i18n.json +++ b/packages/rocketchat-ldap/i18n/pl.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "Adres URL LDAP", - "LDAP_Port" : "Port LDAP", "LDAP_Dn" : "LDAP DN" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/pt.i18n.json b/packages/rocketchat-ldap/i18n/pt.i18n.json index 94b6eca223cc368b70b3015910cef126a875ff46..edcc9623eefc3cf8ea3317a70ff2eabdb9d2fba3 100644 --- a/packages/rocketchat-ldap/i18n/pt.i18n.json +++ b/packages/rocketchat-ldap/i18n/pt.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "URL LDAP", - "LDAP_Port" : "Porta LDAP", "LDAP_Dn" : "DN LDAP" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/ru.i18n.json b/packages/rocketchat-ldap/i18n/ru.i18n.json index 29d388a254a516e1b6f5a669ad89b874048c5ad7..89e00dcc897ee5a92106eb1aa0cceb6795dee80f 100644 --- a/packages/rocketchat-ldap/i18n/ru.i18n.json +++ b/packages/rocketchat-ldap/i18n/ru.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "URL-Ð°Ð´Ñ€ÐµÑ LDAP", - "LDAP_Port" : "LDAP Порт", "LDAP_Dn" : "LDAP домен" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/sv.i18n.json b/packages/rocketchat-ldap/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-ldap/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/tr.i18n.json b/packages/rocketchat-ldap/i18n/tr.i18n.json index 85805bc82c6c45662e84d53226d5e6af429bd4a4..6f31cf5a2e622e523ae008338072897b8e56c993 100644 --- a/packages/rocketchat-ldap/i18n/tr.i18n.json +++ b/packages/rocketchat-ldap/i18n/tr.i18n.json @@ -1,4 +1 @@ -{ - "LDAP_Url" : "LDAP URL", - "LDAP_Port" : "LDAP Port" -} \ No newline at end of file +{ } \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/zh.i18n.json b/packages/rocketchat-ldap/i18n/zh.i18n.json index 2d41c6ba40ccfe56140705ca84b8b425a69fcdc2..22e1aec0e1553993b912be11b53e78c0a31c39c5 100644 --- a/packages/rocketchat-ldap/i18n/zh.i18n.json +++ b/packages/rocketchat-ldap/i18n/zh.i18n.json @@ -1,5 +1,3 @@ { - "LDAP_Url" : "LDAP URL", - "LDAP_Port" : "LDAP端å£", "LDAP_Dn" : "LDAP DN" } \ No newline at end of file diff --git a/packages/rocketchat-ldap/package.js b/packages/rocketchat-ldap/package.js index 83d74fcf59f20df33a26c181fc05217f1e8154ec..f832514eb3db1b35f1f12303ef1200bd60fd7910 100644 --- a/packages/rocketchat-ldap/package.js +++ b/packages/rocketchat-ldap/package.js @@ -6,7 +6,7 @@ Package.describe({ }); Npm.depends({ - ldapjs: "0.7.1", + ldapjs: "1.0.0", }); // Loads all i18n.json files into tapi18nFiles diff --git a/packages/rocketchat-lib/client/AdminBox.coffee b/packages/rocketchat-lib/client/AdminBox.coffee new file mode 100644 index 0000000000000000000000000000000000000000..c2cc37bf180e75d956b34b2bdc1aca6e74a268b8 --- /dev/null +++ b/packages/rocketchat-lib/client/AdminBox.coffee @@ -0,0 +1,16 @@ +RocketChat.AdminBox = new class + options = new ReactiveVar [] + + addOption = (option) -> + Tracker.nonreactive -> + actual = options.get() + actual.push option + options.set actual + + getOptions = -> + return _.filter options.get(), (option) -> + if not option.permissionGranted? or option.permissionGranted() + return true + + addOption: addOption + getOptions: getOptions diff --git a/packages/rocketchat-lib/client/MessageAction.coffee b/packages/rocketchat-lib/client/MessageAction.coffee index d77cf8fc80d8e5a6fb07edbca039ceecb67f54f6..3aec40bcb3ed1b0d5746f32b9fc880be0641ae69 100644 --- a/packages/rocketchat-lib/client/MessageAction.coffee +++ b/packages/rocketchat-lib/client/MessageAction.coffee @@ -1,6 +1,6 @@ RocketChat.MessageAction = new class buttons = new ReactiveVar {} - + ### config expects the following keys (only id is mandatory): id (mandatory) @@ -9,7 +9,7 @@ RocketChat.MessageAction = new class action: function(event, instance) validation: function(message) order: integer - ### + ### addButton = (config) -> unless config?.id throw new Meteor.Error "MessageAction-addButton-error", "Button id was not informed." @@ -29,18 +29,18 @@ RocketChat.MessageAction = new class Tracker.nonreactive -> btns = buttons.get() if btns[id] - btns[id] = _.extend btns[id], config + btns[id] = _.extend btns[id], config buttons.set btns getButtons = (message) -> allButtons = _.toArray buttons.get() if message - allowedButtons = _.compact _.map allButtons, (button) -> + allowedButtons = _.compact _.map allButtons, (button) -> if not button.validation? or button.validation(message) return button else allowedButtons = allButtons - + return _.sortBy allowedButtons, 'order' resetButtons = -> @@ -59,7 +59,7 @@ Meteor.startup -> i18nLabel: 'Edit' action: (event, instance) -> message = $(event.currentTarget).closest('.message')[0] - instance.chatMessages.edit(message) + chatMessages[Session.get('openedRoom')].edit(message) $("\##{message.id} .message-dropdown").hide() input = instance.find('.input-message') Meteor.setTimeout -> @@ -108,7 +108,7 @@ Meteor.startup -> timer: 1000 showConfirmButton: false - instance.chatMessages.deleteMsg(message) + chatMessages[Session.get('openedRoom')].deleteMsg(message) validation: (message) -> return RocketChat.authz.hasAtLeastOnePermission('delete-message', message.rid ) or RocketChat.settings.get('Message_AllowDeleting') and message.u?._id is Meteor.userId() order: 2 \ No newline at end of file diff --git a/packages/rocketchat-lib/client/MessageTypes.coffee b/packages/rocketchat-lib/client/MessageTypes.coffee new file mode 100644 index 0000000000000000000000000000000000000000..3e374f4d7cace7513e86cf03b9d796585a742a02 --- /dev/null +++ b/packages/rocketchat-lib/client/MessageTypes.coffee @@ -0,0 +1,70 @@ +RocketChat.MessageTypes = new class + types = {} + + registerType = (options) -> + types[options.id] = options + + getType = (message) -> + return types[message?.t] + + isSystemMessage = (message) -> + return types[message?.t]?.system + + registerType: registerType + getType: getType + isSystemMessage: isSystemMessage + +Meteor.startup -> + RocketChat.MessageTypes.registerType + id: 'r' + system: true + message: 'Room_name_changed' + data: (message) -> + return { room_name: message.msg, user_by: message.u.username } + + RocketChat.MessageTypes.registerType + id: 'au' + system: true + message: 'User_added_by' + data: (message) -> + return { user_added: message.msg, user_by: message.u.username } + + RocketChat.MessageTypes.registerType + id: 'ru' + system: true + message: 'User_removed_by' + data: (message) -> + return { user_removed: message.msg, user_by: message.u.username } + + RocketChat.MessageTypes.registerType + id: 'ul' + system: true + message: 'User_left' + data: (message) -> + return { user_left: message.u.username } + + RocketChat.MessageTypes.registerType + id: 'uj' + system: true + message: 'User_joined_channel' + data: (message) -> + return { user: message.u.username } + + RocketChat.MessageTypes.registerType + id: 'wm' + system: true + message: 'Welcome' + data: (message) -> + return { user: message.u.username } + + RocketChat.MessageTypes.registerType + id: 'rm' + system: true + message: 'Message_removed' + data: (message) -> + return { user: message.u.username } + + RocketChat.MessageTypes.registerType + id: 'rtc' + render: (message) -> + RocketChat.callbacks.run 'renderRtcMessage', message diff --git a/packages/rocketchat-lib/client/lib/openRoom.coffee b/packages/rocketchat-lib/client/lib/openRoom.coffee index c4dae8c00a15a6498a45998be145e8e8c029c550..545dce131b85cd960539bb4b3580f566491542bb 100644 --- a/packages/rocketchat-lib/client/lib/openRoom.coffee +++ b/packages/rocketchat-lib/client/lib/openRoom.coffee @@ -62,4 +62,4 @@ currentTracker = undefined if ChatSubscription.findOne({rid: room._id})?.open is false Meteor.call 'openRoom', room._id - RocketChat.callbacks.run 'enter-room' + RocketChat.callbacks.run 'enter-room', ChatSubscription.findOne({rid: room._id}) diff --git a/packages/rocketchat-lib/lib/roomTypes.coffee b/packages/rocketchat-lib/lib/roomTypes.coffee index 69622f99ede31cda57a5308248ca662527f90d5b..891ec9d27eaf9c46d3647c7d22129ddc0e7032d0 100644 --- a/packages/rocketchat-lib/lib/roomTypes.coffee +++ b/packages/rocketchat-lib/lib/roomTypes.coffee @@ -2,6 +2,7 @@ RocketChat.roomTypes = new class rooms = [] routes = {} publishes = {} + icons = {} ### Sets a route for a room type @param roomType: room type (e.g.: c (for channels), d (for direct channels)) @@ -58,9 +59,22 @@ RocketChat.roomTypes = new class return unless publishes[roomType]? return publishes[roomType].call this, identifier + getIcon = (roomType) -> + return icons[roomType] + + ### + @param roomType: room type (e.g.: c (for channels), d (for direct channels)) + @param iconClass: iconClass to display on sideNav + ### + setIcon = (roomType, iconClass) -> + icons[roomType] = iconClass + addType: addType getTypes: getAllTypes + setIcon: setIcon + getIcon: getIcon + setRoute: setRoute getRoute: getRoute diff --git a/packages/rocketchat-lib/package.js b/packages/rocketchat-lib/package.js index ea4c4ff85f55eed130ee7c5aff529cb7ffa975dc..fde76ff1f8664aec17521f6039287fcbc705da73 100644 --- a/packages/rocketchat-lib/package.js +++ b/packages/rocketchat-lib/package.js @@ -13,10 +13,14 @@ Package.onUse(function(api) { api.use('coffeescript'); api.use('random'); api.use('check'); + api.use('tracker'); api.use('ddp-rate-limiter'); api.use('underscore'); api.use('underscorestring:underscore.string'); api.use('monbro:mongodb-mapreduce-aggregation@1.0.1'); + api.use('service-configuration'); + api.use('check'); + api.use('arunoda:streams'); // COMMON api.addFiles('lib/core.coffee'); @@ -48,9 +52,11 @@ Package.onUse(function(api) { // CLIENT api.addFiles('client/lib/openRoom.coffee', 'client'); api.addFiles('client/lib/roomExit.coffee', 'client'); + api.addFiles('client/AdminBox.coffee', 'client'); api.addFiles('client/Notifications.coffee', 'client'); api.addFiles('client/TabBar.coffee', 'client'); api.addFiles('client/MessageAction.coffee', 'client'); + api.addFiles('client/MessageTypes.coffee', 'client'); api.addFiles('settings/client/rocketchat.coffee', 'client'); @@ -59,6 +65,7 @@ Package.onUse(function(api) { api.addFiles('server/functions/setUsername.coffee', 'server'); api.addFiles('server/methods/joinDefaultChannels.coffee', 'server'); + api.addFiles('server/methods/robotMethods.coffee', 'server'); api.addFiles('server/methods/sendInvitationEmail.coffee', 'server'); api.addFiles('server/methods/setAdminStatus.coffee', 'server'); api.addFiles('server/methods/setRealName.coffee', 'server'); @@ -89,5 +96,9 @@ Package.onUse(function(api) { }); Package.onTest(function(api) { + api.use('coffeescript'); + api.use('sanjo:jasmine@0.20.2'); + api.use('rocketchat:lib'); + api.addFiles('tests/jasmine/server/unit/models/_Base.spec.coffee', 'server'); }); diff --git a/packages/rocketchat-lib/server/functions/setUsername.coffee b/packages/rocketchat-lib/server/functions/setUsername.coffee index 24cabea806fe42b10ed3ef6ddff2ebb242e39089..2e4d5982937db961d4a1ce5b973315da44a5308e 100644 --- a/packages/rocketchat-lib/server/functions/setUsername.coffee +++ b/packages/rocketchat-lib/server/functions/setUsername.coffee @@ -16,9 +16,14 @@ RocketChat.setUsername = (user, username) -> previousUsername = user.username + # If first time setting username, send Enrollment Email + if not previousUsername and RocketChat.settings.get 'Accounts_Enrollment_Email' + Accounts.sendEnrollmentEmail(user._id) + # Username is available; if coming from old username, update all references if previousUsername RocketChat.models.Messages.updateAllUsernamesByUserId user._id, username + RocketChat.models.Messages.updateUsernameOfEditByUserId user._id, username RocketChat.models.Messages.findByMention(previousUsername).forEach (msg) -> updatedMsg = msg.msg.replace(new RegExp("@#{previousUsername}", "ig"), "@#{username}") diff --git a/packages/rocketchat-lib/server/methods/robotMethods.coffee b/packages/rocketchat-lib/server/methods/robotMethods.coffee new file mode 100644 index 0000000000000000000000000000000000000000..664cb049bda7d24e22d156cbae5a576e3faff77b --- /dev/null +++ b/packages/rocketchat-lib/server/methods/robotMethods.coffee @@ -0,0 +1,19 @@ +Meteor.methods + 'robot.modelCall': (model, method, args) -> + unless Meteor.userId() + throw new Meteor.Error 'invalid-user', '[methods] robot.modelCall -> Invalid user' + + unless RocketChat.authz.hasRole Meteor.userId(), 'robot' + throw new Meteor.Error 'unauthorized', '[methods] robot.modelCall -> Unauthorized' + + console.log '[method] robot.modelCall'.green, arguments + + unless _.isFunction RocketChat.models[model]?[method] + throw new Meteor.Error 'invalid-method', '[methods] robot.modelCall -> Invalid method' + + call = RocketChat.models[model][method].apply(RocketChat.models[model], args) + + if call?.fetch?()? + return call.fetch() + else + return call diff --git a/packages/rocketchat-lib/server/models/Messages.coffee b/packages/rocketchat-lib/server/models/Messages.coffee index 9c2787eb72dbc7c5dd9c7a409aa87242cda5adee..49ed13ec71a2d4bb6e3baddf56e7152100336b80 100644 --- a/packages/rocketchat-lib/server/models/Messages.coffee +++ b/packages/rocketchat-lib/server/models/Messages.coffee @@ -3,7 +3,8 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base @_initModel 'message' @tryEnsureIndex { 'rid': 1, 'ts': 1 } - @tryEnsureIndex { 'ets': 1 }, { sparse: 1 } + @tryEnsureIndex { 'editedAt': 1 }, { sparse: 1 } + @tryEnsureIndex { 'editedBy._id': 1 }, { sparse: 1 } @tryEnsureIndex { 'rid': 1, 't': 1, 'u._id': 1 } @tryEnsureIndex { 'expireAt': 1 }, { expireAfterSeconds: 0 } @tryEnsureIndex { 'msg': 'text' } @@ -76,7 +77,7 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base ts: $gt: timestamp , - ets: + 'editedAt': $gt: timestamp ] @@ -92,11 +93,28 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base return @find query, options + findPinnedByRoom: (roomId, options) -> + query = + _hidden: { $ne: true } + pinned: true + rid: roomId + + return @find query, options + cloneAndSaveAsHistoryById: (_id) -> + me = RocketChat.models.Users.findOneById Meteor.userId() record = @findOneById _id record._hidden = true record.parent = record._id - record.ets = new Date() + record.editedAt = new Date + record.editedBy = + _id: Meteor.userId() + username: me.username + record.pinned = record.pinned + record.pinnedAt = record.pinnedAt + record.pinnedBy = + _id: record.pinnedBy?._id + username: record.pinnedBy?.username delete record._id return @insert record @@ -114,6 +132,7 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base return @update query, update setAsDeletedById: (_id) -> + me = RocketChat.models.Users.findOneById Meteor.userId() query = _id: _id @@ -121,19 +140,22 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base $set: msg: '' t: 'rm' - ets: new Date() + editedAt: new Date() + editedBy: + _id: Meteor.userId() + username: me.username return @update query, update - setPinnedByIdAndUserId: (_id, userId, pinned=true) -> + setPinnedByIdAndUserId: (_id, pinnedBy, pinned=true) -> query = _id: _id - 'u._id': userId update = $set: pinned: pinned - pts: new Date + pinnedAt: new Date + pinnedBy: pinnedBy return @update query, update @@ -157,6 +179,16 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base return @update query, update, { multi: true } + updateUsernameOfEditByUserId: (userId, username) -> + query = + 'editedBy._id': userId + + update = + $set: + "editedBy.username": username + + return @update query, update, { multi: true } + updateUsernameAndMessageOfMentionByIdAndOldUsername: (_id, oldUsername, newUsername, newMessage) -> query = _id: _id @@ -184,6 +216,16 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base return @update query, update + upgradeEtsToEditAt: -> + query = + ets: { $exists: 1 } + + update = + $rename: + "ets": "editedAt" + + return @update query, update, { multi: true } + # INSERT createWithTypeRoomIdMessageAndUser: (type, roomId, message, user, extraData) -> record = diff --git a/packages/rocketchat-lib/server/models/Rooms.coffee b/packages/rocketchat-lib/server/models/Rooms.coffee index e31711c7f4c1ffeccb2808ccfc57bb394bb8a4c5..dddc8f8c0216399447eb301955ced7cbf142a33c 100644 --- a/packages/rocketchat-lib/server/models/Rooms.coffee +++ b/packages/rocketchat-lib/server/models/Rooms.coffee @@ -290,6 +290,16 @@ RocketChat.models.Rooms = new class extends RocketChat.models._Base return @update query, update + setTypeById: (_id, type) -> + query = + _id: _id + + update = + $set: + t: type + + return @update query, update + # INSERT createWithTypeNameUserAndUsernames: (type, name, user, usernames, extraData) -> @@ -332,6 +342,6 @@ RocketChat.models.Rooms = new class extends RocketChat.models._Base removeByTypeContainingUsername: (type, username) -> query = t: type - username: username + usernames: username return @remove query diff --git a/packages/rocketchat-lib/server/models/Subscriptions.coffee b/packages/rocketchat-lib/server/models/Subscriptions.coffee index 7c98e495264e9b4c3171767323cef77b0eb98c8e..f698bea67354dfc1d80fd4812577483412f52dc6 100644 --- a/packages/rocketchat-lib/server/models/Subscriptions.coffee +++ b/packages/rocketchat-lib/server/models/Subscriptions.coffee @@ -194,6 +194,16 @@ RocketChat.models.Subscriptions = new class extends RocketChat.models._Base return @update query, update, { multi: true } + updateTypeByRoomId: (roomId, type) -> + query = + rid: roomId + + update = + $set: + t: type + + return @update query, update, { multi: true } + # INSERT createWithRoomAndUser: (room, user, extraData) -> diff --git a/packages/rocketchat-lib/server/models/Users.coffee b/packages/rocketchat-lib/server/models/Users.coffee index 14201607bcab63fe4664504b6fc67c32ab021b51..38ed2b668802e116539e3e194e7965c8ade8ed78 100644 --- a/packages/rocketchat-lib/server/models/Users.coffee +++ b/packages/rocketchat-lib/server/models/Users.coffee @@ -28,6 +28,18 @@ RocketChat.models.Users = new class extends RocketChat.models._Base return @findOne query, options + findOneVerifiedFromSameDomain: (email, options) -> + domain = s.strRight(email, '@') + query = + emails: + $elemMatch: + address: + $regex: new RegExp "@" + domain + "$", "i" + $ne: email + verified: true + + return @findOne query, options + findOneAdmin: (admin, options) -> query = admin: admin diff --git a/packages/rocketchat-lib/server/models/_Base.coffee b/packages/rocketchat-lib/server/models/_Base.coffee index c3d5e7f3b0cfc809ace6ffd7d8d1cd537d209620..9c91ac7380df86a0df44b153868b63e2a663c19b 100644 --- a/packages/rocketchat-lib/server/models/_Base.coffee +++ b/packages/rocketchat-lib/server/models/_Base.coffee @@ -29,7 +29,7 @@ RocketChat.models._Base = class return @model.allow.apply @model, arguments deny: -> - return @model.allow.apply @model, arguments + return @model.deny.apply @model, arguments ensureIndex: -> return @model._ensureIndex.apply @model, arguments diff --git a/packages/rocketchat-lib/settings/server/methods.coffee b/packages/rocketchat-lib/settings/server/methods.coffee index dab38c13425e164fe4b86925ba5dc8730bcefa74..20939369bc44feedfa899a3f1901bc31fd6d3cfc 100644 --- a/packages/rocketchat-lib/settings/server/methods.coffee +++ b/packages/rocketchat-lib/settings/server/methods.coffee @@ -18,12 +18,18 @@ RocketChat.settings.add = (_id, value, options = {}) -> updateSettings = i18nLabel: options.i18nLabel or _id - updateSettings.i18nDescription = options.i18nDescription if options.i18nDescription? + # default description i18n key will be the setting name + "_Description" + # (eg: LDAP_Enable -> LDAP_Enable_Description) + updateSettings.i18nDescription = if options.i18nDescription? + options.i18nDescription + else + "#{_id}_Description" updateSettings.type = options.type if options.type updateSettings.multiline = options.multiline if options.multiline updateSettings.group = options.group if options.group updateSettings.section = options.section if options.section updateSettings.public = options.public if options.public + updateSettings.placeholder = options.placeholder if options.placeholder upsertChanges = { $setOnInsert: { value: value }, $set: updateSettings } @@ -49,7 +55,10 @@ RocketChat.settings.addGroup = (_id, options = {}) -> type: 'group' i18nLabel: options.i18nLabel or _id - updateSettings.i18nDescription = options.i18nDescription if options.i18nDescription? + updateSettings.i18nDescription = if options.i18nDescription? + options.i18nDescription + else + "#{_id}_Description" upsertChanges = { $set: updateSettings } if options.persistent is true diff --git a/packages/rocketchat-lib/settings/server/startup.coffee b/packages/rocketchat-lib/settings/server/startup.coffee index 9c0cd80b4a7512530711b18dca98d4cc3e55b888..09e68acfbece4d81da8c794346d9ea6a5cc2b8cc 100644 --- a/packages/rocketchat-lib/settings/server/startup.coffee +++ b/packages/rocketchat-lib/settings/server/startup.coffee @@ -39,11 +39,12 @@ RocketChat.settings.add 'Accounts_AllowUserProfileChange', true, { type: 'boolea RocketChat.settings.add 'Accounts_AllowUserAvatarChange', true, { type: 'boolean', group: 'Accounts', section: 'General', public: true } RocketChat.settings.add 'Accounts_AllowUsernameChange', true, { type: 'boolean', group: 'Accounts', section: 'General', public: true } RocketChat.settings.add 'Accounts_AllowPasswordChange', true, { type: 'boolean', group: 'Accounts', section: 'General', public: true } +RocketChat.settings.add 'Accounts_RequireNameForSignUp', true, { type: 'boolean', group: 'Accounts', section: 'General', public: true } RocketChat.settings.addGroup 'FileUpload' RocketChat.settings.add 'FileUpload_Enabled', true, { type: 'boolean', group: 'FileUpload', public: true } RocketChat.settings.add 'FileUpload_MaxFileSize', 2097152, { type: 'int', group: 'FileUpload', public: true } -RocketChat.settings.add 'FileUpload_MediaTypeWhiteList', 'image/*', { type: 'string', group: 'FileUpload', public: true, i18nDescription: 'FileUpload_MediaTypeWhiteListDescription' } +RocketChat.settings.add 'FileUpload_MediaTypeWhiteList', 'image/*,audio/*,application/pdf,text/plain,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document', { type: 'string', group: 'FileUpload', public: true, i18nDescription: 'FileUpload_MediaTypeWhiteListDescription' } RocketChat.settings.addGroup 'General' @@ -63,10 +64,11 @@ RocketChat.settings.add 'SMTP_Host', '', { type: 'string', group: 'SMTP' } RocketChat.settings.add 'SMTP_Port', '', { type: 'string', group: 'SMTP' } RocketChat.settings.add 'SMTP_Username', '', { type: 'string', group: 'SMTP' } RocketChat.settings.add 'SMTP_Password', '', { type: 'string', group: 'SMTP' } -RocketChat.settings.add 'From_Email', 'no-reply@rocket.chat', { type: 'string', group: 'SMTP' } +RocketChat.settings.add 'From_Email', '', { type: 'string', group: 'SMTP', placeholder: 'Name <email@domain>' } RocketChat.settings.add 'Invitation_Subject', 'You have been invited to Rocket.Chat', { type: 'string', group: 'SMTP', section: 'Invitation' } -RocketChat.settings.add 'Invitation_HTML', '<h2>You have been invited to <h1>Rocket.Chat</h1></h2><p>Go to https://demo.rocket.chat and try the best open source chat solution available today!</p>', { type: 'string', multiline: true, group: 'SMTP', section: 'Invitation' } +RocketChat.settings.add 'Invitation_HTML', '<h2>You have been invited to <h1>Rocket.Chat</h1></h2><p>Go to ' + __meteor_runtime_config__?.ROOT_URL + ' and try the best open source chat solution available today!</p>', { type: 'string', multiline: true, group: 'SMTP', section: 'Invitation' } +RocketChat.settings.add 'Accounts_Enrollment_Email', '', { type: 'string', multiline: true, group: 'SMTP', section: 'Invitation' } RocketChat.settings.addGroup 'Message' RocketChat.settings.add 'Message_AllowEditing', true, { type: 'boolean', group: 'Message', public: true } @@ -78,7 +80,7 @@ RocketChat.settings.add 'Message_ShowDeletedStatus', false, { type: 'boolean', g RocketChat.settings.add 'Message_KeepHistory', false, { type: 'boolean', group: 'Message', public: true } RocketChat.settings.add 'Message_MaxAllowedSize', 5000, { type: 'int', group: 'Message', public: true } RocketChat.settings.add 'Message_ShowFormattingTips', true, { type: 'boolean', group: 'Message', public: true } -RocketChat.settings.add 'Message_AudioRecorderEnabled', true, { type: 'boolean', group: 'Message', public: true } +RocketChat.settings.add 'Message_AudioRecorderEnabled', true, { type: 'boolean', group: 'Message', public: true, i18nDescription: 'Message_AudioRecorderEnabledDescription' } RocketChat.settings.addGroup 'Meta' RocketChat.settings.add 'Meta_language', '', { type: 'string', group: 'Meta' } diff --git a/packages/rocketchat-lib/tests/jasmine/server/unit/models/_Base.spec.coffee b/packages/rocketchat-lib/tests/jasmine/server/unit/models/_Base.spec.coffee new file mode 100644 index 0000000000000000000000000000000000000000..422fb80e1a0674a67aa0a72114f8b2b1a261be5e --- /dev/null +++ b/packages/rocketchat-lib/tests/jasmine/server/unit/models/_Base.spec.coffee @@ -0,0 +1,24 @@ +describe 'rocketchat:lib Server | Models | Base', -> + + beforeEach -> + MeteorStubs.install() + this.obj = new RocketChat.models._Base + + afterEach -> + MeteorStubs.uninstall() + + it 'should exist', -> + expect(this.obj).toBeDefined() + + it 'should provide a basename for collections', -> + expect(typeof this.obj._baseName()).toBe('string') + + it 'should carry a Meteor.Collection object when initialized', -> + expect(this.obj.model).toBeFalsy() + expect(this.obj._initModel('carry')).toBeTruthy() + expect(typeof this.obj.model).toBe('object') + + it 'should apply a basename to the Meteor.Collection created', -> + name = 'apply' + expect(this.obj._initModel(name)).toBeTruthy() + expect(this.obj.model._name).toBe(this.obj._baseName() + name) diff --git a/packages/rocketchat-livechat/app/client/lib/chatMessages.coffee b/packages/rocketchat-livechat/app/client/lib/chatMessages.coffee index 2f3b198b310c6fcd053d3f6f058154911096aaf1..2cee37e8e78ff79d5d921e54e590336b5743cabf 100644 --- a/packages/rocketchat-livechat/app/client/lib/chatMessages.coffee +++ b/packages/rocketchat-livechat/app/client/lib/chatMessages.coffee @@ -95,12 +95,10 @@ class @ChatMessages if not Meteor.userId() Meteor.call 'registerGuest', visitor.getToken(), (error, result) -> if error? - ChatMessage.update msgObject._id, { $set: { error: true } } return showError error.reason Meteor.loginWithPassword result.user, result.pass, (error) -> if error - ChatMessage.update msgObject._id, { $set: { error: true } } return showError error.reason sendMessage() diff --git a/packages/rocketchat-livechat/app/client/lib/RoomHistoryManager.coffee b/packages/rocketchat-livechat/app/client/lib/fromApp/RoomHistoryManager.coffee similarity index 100% rename from packages/rocketchat-livechat/app/client/lib/RoomHistoryManager.coffee rename to packages/rocketchat-livechat/app/client/lib/fromApp/RoomHistoryManager.coffee diff --git a/packages/rocketchat-livechat/app/client/lib/avatar.coffee b/packages/rocketchat-livechat/app/client/lib/fromApp/avatar.coffee similarity index 100% rename from packages/rocketchat-livechat/app/client/lib/avatar.coffee rename to packages/rocketchat-livechat/app/client/lib/fromApp/avatar.coffee diff --git a/packages/rocketchat-livechat/app/client/stylesheets/main.less b/packages/rocketchat-livechat/app/client/stylesheets/main.less index c43ea669f2b8a352fcb33ae45e138d62aefdb40b..1573e9cc323190a0884682b5f26c29ca10338f1a 100644 --- a/packages/rocketchat-livechat/app/client/stylesheets/main.less +++ b/packages/rocketchat-livechat/app/client/stylesheets/main.less @@ -290,7 +290,7 @@ input:focus { position: fixed; bottom: 0; width: 100%; - height: @footer-min-height; + height: auto; border-top: 1px solid #E7E7E7; border-left: 1px solid #E7E7E7; border-right: 1px solid #E7E7E7; @@ -301,11 +301,12 @@ input:focus { display: block; padding: 6px 8px; padding-right: 38px; - overflow-y: hidden; + overflow-y: auto; resize: none; border: 1px solid #E7E7E7; // margin: 10px; border-radius: 5px; + max-height: 200px; width: 100%; font-size: 12px; -webkit-appearance: none; diff --git a/packages/rocketchat-livechat/app/client/views/message.coffee b/packages/rocketchat-livechat/app/client/views/message.coffee index fd6455ab38d48d8029316d0790d2681d9ea46038..1b49884bd821812463129ca722f73cee1b784c45 100644 --- a/packages/rocketchat-livechat/app/client/views/message.coffee +++ b/packages/rocketchat-livechat/app/client/views/message.coffee @@ -23,7 +23,6 @@ Template.message.helpers when 'au' then t('User_added_by', { user_added: this.msg, user_by: this.u.username }) when 'ru' then t('User_removed_by', { user_removed: this.msg, user_by: this.u.username }) when 'ul' then tr('User_left', { context: this.u.gender }, { user_left: this.u.username }) - when 'nu' then t('User_added', { user_added: this.u.username }) when 'uj' then tr('User_joined_channel', { context: this.u.gender }, { user: this.u.username }) when 'wm' then t('Welcome', { user: this.u.username }) # when 'rtc' then RocketChat.callbacks.run 'renderRtcMessage', this @@ -37,7 +36,7 @@ Template.message.helpers return this.html system: -> - return 'system' if this.t in ['s', 'p', 'f', 'r', 'au', 'ru', 'ul', 'nu', 'wm', 'uj'] + return 'system' if this.t in ['s', 'p', 'f', 'r', 'au', 'ru', 'ul', 'wm', 'uj'] Template.message.onViewRendered = (context) -> diff --git a/packages/rocketchat-livechat/app/client/views/message.html b/packages/rocketchat-livechat/app/client/views/message.html index 101d5ce431c31b2dcdedb56493d09376244a5520..056a0cee163fd66f030955ddcd9c3ece01d8752e 100644 --- a/packages/rocketchat-livechat/app/client/views/message.html +++ b/packages/rocketchat-livechat/app/client/views/message.html @@ -1,10 +1,10 @@ <template name="message"> <li id="{{_id}}" class="message sequential {{system}} {{t}} {{own}} {{isTemp}} {{error}}" data-username="{{u.username}}" data-date="{{date}}"> - <span class="thumb" href="#" data-username="{{u.username}}" tabindex="1">{{> avatar username=u.username}}</span> + <span class="thumb thumb-small" href="#" data-username="{{u.username}}" tabindex="1">{{> avatar username=u.username}}</span> <span class="user" href="#" data-username="{{u.username}}" tabindex="1">{{u.username}}</span> <span class="info"> <span class="time">{{time}}</span> - {{#if ets}} + {{#if edit}} <span class="edited">({{_ "edited"}})</span> {{/if}} </span> diff --git a/packages/rocketchat-livechat/app/client/views/room.coffee b/packages/rocketchat-livechat/app/client/views/room.coffee index 4a856e8cc01a9fd660fcf99fed31ea6e6718b56b..3ac81b7c28485049fdaddeca55b3a93588a50e46 100644 --- a/packages/rocketchat-livechat/app/client/views/room.coffee +++ b/packages/rocketchat-livechat/app/client/views/room.coffee @@ -13,6 +13,14 @@ Template.room.helpers Template.room.events 'keyup .input-message': (event) -> Template.instance().chatMessages.keyup(visitor.getRoom(), event, Template.instance()) + # Inital height is 28. If the scrollHeight is greater than that( we have more text than area ), + # increase the size of the textarea. The max-height is set at 200 + # even if the scrollHeight become bigger than that it should never exceed that. + # Account for no text in the textarea when increasing the height. + # If there is no text, reset the height. + inputScrollHeight = $(event.currentTarget).prop('scrollHeight') + if inputScrollHeight > 28 + $(event.currentTarget).height( if $(event.currentTarget).val() == '' then '15px' else (if inputScrollHeight >= 200 then inputScrollHeight-50 else inputScrollHeight-20)) 'keydown .input-message': (event) -> Template.instance().chatMessages.keydown(visitor.getRoom(), event, Template.instance()) diff --git a/packages/rocketchat-livechat/client/route.js b/packages/rocketchat-livechat/client/route.js new file mode 100644 index 0000000000000000000000000000000000000000..fb95d8c23c9761027bbac2ec19b3b23dd94d312c --- /dev/null +++ b/packages/rocketchat-livechat/client/route.js @@ -0,0 +1,11 @@ +FlowRouter.route('/live/:name', { + name: 'live', + + action: function(params, queryParams) { + console.log('action route livechat'); + Session.set('showUserInfo'); + openRoom('l', params.name); + }, + + triggersExit: [roomExit] +}); diff --git a/packages/rocketchat-livechat/client/ui.js b/packages/rocketchat-livechat/client/ui.js new file mode 100644 index 0000000000000000000000000000000000000000..78c60da223ba34106dea4b947151de66d29c04eb --- /dev/null +++ b/packages/rocketchat-livechat/client/ui.js @@ -0,0 +1,9 @@ +Meteor.startup(function() { + RocketChat.roomTypes.addType('livechat', ['livechat-agent', 'livechat-manager']); + RocketChat.roomTypes.setIcon('l', 'icon-chat-empty'); + RocketChat.roomTypes.setRoute('l', 'live', function(sub) { + return { name: sub.name }; + }); + + AccountBox.addOption({ name: 'Livechat', icon: 'icon-chat-empty', class: 'livechat-manager', roles: ['livechat-manager'] }); +}); diff --git a/packages/rocketchat-livechat/client/views/sideNav/livechat.html b/packages/rocketchat-livechat/client/views/sideNav/livechat.html new file mode 100644 index 0000000000000000000000000000000000000000..c6aab41be12ed88e9eba43690512998ee8b91eb0 --- /dev/null +++ b/packages/rocketchat-livechat/client/views/sideNav/livechat.html @@ -0,0 +1,12 @@ +<template name="livechat"> + <h3 class="{{isActive}}"> + {{_ "Livechat"}} + </h3> + <ul> + {{#each rooms}} + {{> chatRoomItem }} + {{else}} + <p class="empty">{{_ "No_livechats" }}</p> + {{/each}} + </ul> +</template> diff --git a/packages/rocketchat-livechat/client/views/sideNav/livechat.js b/packages/rocketchat-livechat/client/views/sideNav/livechat.js new file mode 100644 index 0000000000000000000000000000000000000000..5c3b73247da14bb8157968fa8ebfaea9664d390d --- /dev/null +++ b/packages/rocketchat-livechat/client/views/sideNav/livechat.js @@ -0,0 +1,33 @@ +Template.livechat.helpers({ + isActive: function() { + if (ChatSubscription.findOne({ + t: 'l', + f: { + $ne: true + }, + open: true, + rid: Session.get('openedRoom') + }, { + fields: { + _id: 1 + } + }) != null) { + return 'active'; + } + }, + rooms: function() { + var query = { + t: 'l', + open: true + }; + return ChatSubscription.find(query, { + sort: { + 't': 1, + 'name': 1 + } + }); + } +}); + +Template.livechat.events({ +}); diff --git a/packages/rocketchat-livechat/i18n/fa.i18n.json b/packages/rocketchat-livechat/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/fi.i18n.json b/packages/rocketchat-livechat/i18n/fi.i18n.json index 828c21abf530bfdc10c23e7b523a0d0bf6de5e3f..7a2d15b05eb818aa4a53c53d566891f6e7f92e7f 100644 --- a/packages/rocketchat-livechat/i18n/fi.i18n.json +++ b/packages/rocketchat-livechat/i18n/fi.i18n.json @@ -1,4 +1,4 @@ { "Livechat_title" : "Livechat otsikko", - "Livechat_title_color" : "Livechat otsikko taustaväri" + "Livechat_title_color" : "Livechat otsikon taustaväri" } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/sv.i18n.json b/packages/rocketchat-livechat/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/livechat.coffee b/packages/rocketchat-livechat/livechat.coffee deleted file mode 100644 index 4ff8e57dc72fee2dbe9a282b3800e3f9133c1458..0000000000000000000000000000000000000000 --- a/packages/rocketchat-livechat/livechat.coffee +++ /dev/null @@ -1,33 +0,0 @@ -WebApp = Package.webapp.WebApp -Autoupdate = Package.autoupdate.Autoupdate - -WebApp.connectHandlers.use '/livechat/', (req, res, next) -> - res.setHeader 'content-type', 'html' - - head = Assets.getText('public/head.html') - - html = """ - <html> - <head> - <link rel="stylesheet" type="text/css" class="__meteor-css__" href="/packages/rocketchat_livechat/public/livechat.css?_dc=#{Autoupdate.autoupdateVersion}"> - <script type="text/javascript"> - __meteor_runtime_config__ = { - "meteorRelease": "METEOR@1.1.0.2", - "ROOT_URL": "#{Meteor.absoluteUrl()}", - "ROOT_URL_PATH_PREFIX": "", - "autoupdateVersion": "#{Autoupdate.autoupdateVersion}", - "autoupdateVersionRefreshable": "#{Autoupdate.autoupdateVersionRefreshable}", - "autoupdateVersionCordova": "#{Autoupdate.autoupdateVersionCordova}" - }; - </script> - <script type="text/javascript" src="/packages/rocketchat_livechat/public/livechat.js?_dc=#{Autoupdate.autoupdateVersion}"></script> - - #{head} - </head> - <body> - </body> - </html> - """ - - res.write html - res.end() diff --git a/packages/rocketchat-livechat/livechat.js b/packages/rocketchat-livechat/livechat.js new file mode 100644 index 0000000000000000000000000000000000000000..b33e6eb59094273cca8dd1dd573c9d9d55cab518 --- /dev/null +++ b/packages/rocketchat-livechat/livechat.js @@ -0,0 +1,25 @@ +WebApp = Package.webapp.WebApp; +Autoupdate = Package.autoupdate.Autoupdate; + +WebApp.connectHandlers.use('/livechat/', (req, res, next) => { + res.setHeader('content-type', 'html'); + + head = Assets.getText('public/head.html'); + + html = `<html> + <head> + <link rel="stylesheet" type="text/css" class="__meteor-css__" href="/packages/rocketchat_livechat/public/livechat.css?_dc=${Autoupdate.autoupdateVersion}"> + <script type="text/javascript"> + __meteor_runtime_config__ = ${JSON.stringify(__meteor_runtime_config__)}; + </script> + <script type="text/javascript" src="/packages/rocketchat_livechat/public/livechat.js?_dc=${Autoupdate.autoupdateVersion}"></script> + + ${head} + </head> + <body> + </body> + </html>`; + + res.write(html); + res.end(); +}); diff --git a/packages/rocketchat-livechat/methods.coffee b/packages/rocketchat-livechat/methods.coffee deleted file mode 100644 index 2edd1dd9c4f230e4a9f1d4bfe755083101a45255..0000000000000000000000000000000000000000 --- a/packages/rocketchat-livechat/methods.coffee +++ /dev/null @@ -1,81 +0,0 @@ -Meteor.methods - registerGuest: (token) -> - check token, String - - user = Meteor.users.findOne { "profile.token": token }, { fields: { _id: 1 } } - if user? - throw new Meteor.Error 'token-already-exists', 'Token already exists' - - pass = Meteor.uuid() - - loop - qt = Meteor.users.find({ 'profile.guest': true }).count() + 1 - user = 'guest-' + qt - - userExists = Meteor.users.findOne { 'username': user }, { fields: { _id: 1 } } - break if not userExists - - userData = - username: user - password: pass - - userId = Accounts.createUser userData - - Meteor.users.update userId, - $set: - name: user - "profile.guest": true - "profile.token": token - - return { - user: user - pass: pass - } - - sendMessageLivechat: (message) -> - console.log 'sendMessageLivechat ->',arguments - - check message.rid, String - check message.token, String - - guest = Meteor.users.findOne Meteor.userId(), fields: username: 1 - - room = RocketChat.models.Rooms.findOneById message.rid - - if not room? - - # find an online user - operator = Meteor.users.findOne { operator: true, status: 'online' } - - unless operator - throw new Meteor.Error 'no-operators', 'Sorry, no online operators' - - RocketChat.models.Rooms.insert - _id: message.rid - name: guest.username - msgs: 1 - lm: new Date() - usernames: [ operator.username, guest.username ] - t: 'd' - ts: new Date() - v: - token: message.token - - RocketChat.models.Subscriptions.insert - rid: message.rid - name: guest.username - alert: true - open: true - unread: 1 - u: - _id: operator._id - username: operator.username - t: 'd' - - room = Meteor.call 'canAccessRoom', message.rid, guest._id - - if not room - throw new Meteor.Error 'cannot-acess-room' - - RocketChat.sendMessage guest, message, room - diff --git a/packages/rocketchat-livechat/package.js b/packages/rocketchat-livechat/package.js index dff7c5ae6a0d845309a64db3814a96dcf8b8a843..f02fe7245eb6483cbb0379972a2dc31a097a4018 100644 --- a/packages/rocketchat-livechat/package.js +++ b/packages/rocketchat-livechat/package.js @@ -18,14 +18,23 @@ Package.registerBuildPlugin({ Package.onUse(function(api) { api.versionsFrom('1.0'); - api.use(['coffeescript', 'webapp', 'autoupdate'], 'server'); + api.use(['ecmascript', 'webapp', 'autoupdate'], 'server'); - api.addFiles('livechat.coffee', 'server'); - api.addFiles('methods.coffee', 'server'); - api.addFiles('publications.coffee', 'server'); + api.imply('alanning:roles@1.2.12'); + api.use('kadira:flow-router', 'client'); + + api.addFiles('livechat.js', 'server'); + api.addFiles('server/methods.js', 'server'); + api.addFiles('server/startup.js', 'server'); + api.addFiles('permissions.js', 'server'); api.addFiles('config.js', 'server'); + api.addFiles('client/ui.js', 'client'); + api.addFiles('client/route.js', 'client'); + api.addFiles('client/views/sideNav/livechat.html', 'client'); + api.addFiles('client/views/sideNav/livechat.js', 'client'); + api.addAssets('rocket-livechat.js', 'client'); api.addAssets('public/livechat.css', 'client'); api.addAssets('public/livechat.js', 'client'); diff --git a/packages/rocketchat-livechat/permissions.js b/packages/rocketchat-livechat/permissions.js new file mode 100644 index 0000000000000000000000000000000000000000..4c4c84f3ff4247d7f9d557fedac3e6dacbccbcf7 --- /dev/null +++ b/packages/rocketchat-livechat/permissions.js @@ -0,0 +1,32 @@ +Meteor.startup(function() { + var i, j, len, len1, permission, ref, role, roles, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + var permissions = [ + { + _id: 'receive-livechat', + roles : ['livechat-agent'] + }, + { + _id: 'edit-livechat-settings', + roles : ['livechat-manager'] + } + ]; + + roles = _.pluck(Roles.getAllRoles().fetch(), 'name'); + + for (i = 0, len = permissions.length; i < len; i++) { + permission = permissions[i]; + RocketChat.models.Permissions.upsert(permission._id, { + $setOnInsert: permission + }); + ref = permission.roles; + for (j = 0, len1 = ref.length; j < len1; j++) { + role = ref[j]; + if (indexOf.call(roles, role) < 0) { + Roles.createRole(role); + roles.push(role); + } + } + } +}); diff --git a/packages/rocketchat-livechat/publications.coffee b/packages/rocketchat-livechat/publications.coffee deleted file mode 100644 index e51b3841a7ef4c339ace2b4ba16df1055ac4e48e..0000000000000000000000000000000000000000 --- a/packages/rocketchat-livechat/publications.coffee +++ /dev/null @@ -1,9 +0,0 @@ -Meteor.publish 'visitorRoom', (visitorToken) -> - return RocketChat.models.Rooms.findByVisitorToken visitorToken, - fields: - name: 1 - t: 1 - cl: 1 - u: 1 - usernames: 1 - v: 1 diff --git a/packages/rocketchat-livechat/server/methods.js b/packages/rocketchat-livechat/server/methods.js new file mode 100644 index 0000000000000000000000000000000000000000..f97d83ecce67e1d8896c045cbc50d096be662299 --- /dev/null +++ b/packages/rocketchat-livechat/server/methods.js @@ -0,0 +1,102 @@ +Meteor.methods({ + registerGuest: function(token) { + console.log('registerGuest ->'.green, token); + var pass, qt, user, userData, userExists, userId, inc = 0; + check(token, String); + user = Meteor.users.findOne({ + "profile.token": token + }, { + fields: { + _id: 1 + } + }); + if (user != null) { + throw new Meteor.Error('token-already-exists', 'Token already exists'); + } + pass = Meteor.uuid(); + while (true) { + qt = Meteor.users.find({ + 'profile.guest': true + }).count() + 1; + user = 'guest-' + (qt + inc++); + userExists = Meteor.users.findOne({ + 'username': user + }, { + fields: { + _id: 1 + } + }); + console.log('userExists ->',userExists); + if (!userExists) { + break; + } + } + userData = { + username: user, + password: pass + }; + userId = Accounts.createUser(userData); + Meteor.users.update(userId, { + $set: { + name: user, + "profile.guest": true, + "profile.token": token + } + }); + return { + user: user, + pass: pass + }; + }, + sendMessageLivechat: function(message) { + var guest, operator, room; + console.log('sendMessageLivechat ->', arguments); + check(message.rid, String); + check(message.token, String); + guest = Meteor.users.findOne(Meteor.userId(), { + fields: { + username: 1 + } + }); + room = RocketChat.models.Rooms.findOneById(message.rid); + if (room == null) { + operator = Meteor.users.findOne({ + operator: true, + status: 'online' + }); + if (!operator) { + throw new Meteor.Error('no-operators', 'Sorry, no online operators'); + } + RocketChat.models.Rooms.insert({ + _id: message.rid, + name: guest.username, + msgs: 1, + lm: new Date(), + usernames: [operator.username, guest.username], + t: 'l', + ts: new Date(), + v: { + token: message.token + } + }); + RocketChat.models.Subscriptions.insert({ + rid: message.rid, + name: guest.username, + alert: true, + open: true, + unread: 1, + answered: false, + u: { + _id: operator._id, + username: operator.username + }, + t: 'l' + }); + } + room = Meteor.call('canAccessRoom', message.rid, guest._id); + if (!room) { + throw new Meteor.Error('cannot-acess-room'); + } + return RocketChat.sendMessage(guest, message, room); + } +}); diff --git a/packages/rocketchat-livechat/server/startup.js b/packages/rocketchat-livechat/server/startup.js new file mode 100644 index 0000000000000000000000000000000000000000..f9beb312b1c73159109be88d817fe8ea76d1ce68 --- /dev/null +++ b/packages/rocketchat-livechat/server/startup.js @@ -0,0 +1,14 @@ +Meteor.startup(function() { + RocketChat.roomTypes.addPublish('l', function(identifier) { + return RocketChat.models.Rooms.findByTypeAndName('l', identifier, { + fields: { + name: 1, + t: 1, + cl: 1, + u: 1, + usernames: 1, + v: 1 + } + }); + }); +}); diff --git a/packages/rocketchat-mailer/client/router.coffee b/packages/rocketchat-mailer/client/router.coffee new file mode 100644 index 0000000000000000000000000000000000000000..361cd663ae9343d2c483c2c4e8548d2296bf13e7 --- /dev/null +++ b/packages/rocketchat-mailer/client/router.coffee @@ -0,0 +1,15 @@ +tabReset = -> + RocketChat.TabBar.reset() + +FlowRouter.route '/rocket-mailer', + name: 'rocket-mailer' + triggersEnter: [tabReset] + triggersExit: [tabReset] + action: -> + BlazeLayout.render 'main', {center: 'rocketMailer'} + +FlowRouter.route '/rocket-mailer/unsubscribe/:_id/:createdAt', + name: 'rocket-mailer-unsubscribe' + action: (params) -> + Meteor.call 'RocketMailer.unsubscribe', params._id, params.createdAt + BlazeLayout.render 'rocketMailerUnsubscribe' diff --git a/packages/rocketchat-mailer/client/startup.coffee b/packages/rocketchat-mailer/client/startup.coffee new file mode 100644 index 0000000000000000000000000000000000000000..c7abd7b5de98b6864db1d65549c6bd068071bfc6 --- /dev/null +++ b/packages/rocketchat-mailer/client/startup.coffee @@ -0,0 +1,5 @@ +RocketChat.AdminBox.addOption + href: 'rocket-mailer' + i18nLabel: 'Rocket_Mailer' + permissionGranted: -> + return RocketChat.authz.hasAllPermission('access-rocket-mailer') diff --git a/packages/rocketchat-mailer/client/views/rocketMailer.coffee b/packages/rocketchat-mailer/client/views/rocketMailer.coffee new file mode 100644 index 0000000000000000000000000000000000000000..d615dad8f3905a3046683d2031008eac636c6c21 --- /dev/null +++ b/packages/rocketchat-mailer/client/views/rocketMailer.coffee @@ -0,0 +1,22 @@ +Template.rocketMailer.helpers + fromEmail: -> + return RocketChat.settings.get 'From_Email' + +Template.rocketMailer.events + 'click .send': (e, t) -> + e.preventDefault() + from = $(t.find('[name=from]')).val() + subject = $(t.find('[name=subject]')).val() + body = $(t.find('[name=body]')).val() + + unless from + toastr.error TAPi18n.__('From_email_is_required') + return + + if body.indexOf('[unsubscribe]') is -1 + toastr.error TAPi18n.__('You_must_provide_the_unsubscribe_link') + return + + Meteor.call 'RocketMailer.sendMail', from, subject, body, (err) -> + return toastr.error err.reason if err + toastr.success TAPi18n.__('The_emails_are_being_sent') diff --git a/packages/rocketchat-mailer/client/views/rocketMailer.html b/packages/rocketchat-mailer/client/views/rocketMailer.html new file mode 100644 index 0000000000000000000000000000000000000000..309b0d661226db72b9fd7225c5a1ebfa799fa15d --- /dev/null +++ b/packages/rocketchat-mailer/client/views/rocketMailer.html @@ -0,0 +1,49 @@ +<template name="rocketMailer"> + <section class="page-container page-list"> + <head class="fixed-title"> + {{> burger}} + <h2> + <span class="room-title">{{_ "Rocket_Mailer"}}</span> + </h2> + </head> + <div class="content"> + {{#unless hasPermission 'access-rocket-mailer'}} + <p>{{_ "You_are_not_authorized_to_view_this_page"}}</p> + {{else}} + <form> + <div class="rocket-form"> + <fieldset> + <div class="input-line"> + <label>{{_ "Email_from"}}</label> + <div> + <input type="text" name="from" value="" placeholder="{{fromEmail}}" /> + </div> + <div> + <small class="settings-description">{{{_ "From_email_warning"}}}</small> + </div> + </div> + <div class="input-line"> + <label>{{_ "Email_subject"}}</label> + <div> + <input type="text" name="subject" value="" /> + </div> + </div> + <div class="input-line"> + <label>{{_ "Email_body"}}</label> + <div> + <textarea name="body" rows="10" style="height: auto"></textarea> + </div> + <div> + <small class="settings-description">{{{_ "RocketMailer_body_tags"}}}</small> + </div> + </div> + </fieldset> + <div class="submit"> + <button class="button send"><i class="icon-send"></i><span>{{_ "Send_email"}}</span></button> + </div> + </div> + </form> + {{/unless}} + </div> + </section> +</template> diff --git a/packages/rocketchat-mailer/client/views/rocketMailerUnsubscribe.html b/packages/rocketchat-mailer/client/views/rocketMailerUnsubscribe.html new file mode 100644 index 0000000000000000000000000000000000000000..0460087f1a32cf5a0b0aca3092aff5315c077673 --- /dev/null +++ b/packages/rocketchat-mailer/client/views/rocketMailerUnsubscribe.html @@ -0,0 +1,14 @@ +<template name="rocketMailerUnsubscribe"> + <section class="full-page"> + <div class="wrapper"> + <header> + <a class="logo" href="/"> + <img src="/images/logo/logo.svg?v=3" /> + </a> + </header> + <div class="cms-page"> + {{_ "You_have_successfully_unsubscribed"}} + </div> + </div> + </section> +</template> diff --git a/packages/rocketchat-mailer/i18n/ar.i18n.json b/packages/rocketchat-mailer/i18n/ar.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/ar.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/de.i18n.json b/packages/rocketchat-mailer/i18n/de.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/de.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/el.i18n.json b/packages/rocketchat-mailer/i18n/el.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/el.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/en.i18n.json b/packages/rocketchat-mailer/i18n/en.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..bbde6b8b80761c76f0c0b12f0ac089ea3356c6b0 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/en.i18n.json @@ -0,0 +1,15 @@ +{ + "From_email_warning" : "<b>Warning</b>: The field <b>From</b> is subject to your mail server settings.", + "From_email_is_required" : "From e-mail is required", + "Email_from" : "From", + "Email_subject" : "Subject", + "Email_body" : "E-mail body", + "Rocket_Mailer" : "Rocket Mailer", + "RocketMailer_body_tags" : "You <b>must</b> use [unsubscribe] for the unsubscription link.<br />You may use [name], [fname], [lname] for the user's full name, first name or last name, respectively.<br />You may use [email] for the user's e-mail.", + "Send_email" : "Send E-mail", + "The_emails_are_being_sent" : "The e-mails are being sent.", + "You_are_not_authorized_to_view_this_page" : "You are not authorized to view this page.", + "You_have_successfully_unsubscribed" : "You have successfully unsubscribed from our Mailling List.", + "You_informed_an_invalid_FROM_address" : "You informed an invalid FROM address.", + "You_must_provide_the_unsubscribe_link" : "You must provide the [unsubscribe] link." +} \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/es.i18n.json b/packages/rocketchat-mailer/i18n/es.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/es.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/fa.i18n.json b/packages/rocketchat-mailer/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/fi.i18n.json b/packages/rocketchat-mailer/i18n/fi.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/fi.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/fr.i18n.json b/packages/rocketchat-mailer/i18n/fr.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/fr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/he.i18n.json b/packages/rocketchat-mailer/i18n/he.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/he.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/hr.i18n.json b/packages/rocketchat-mailer/i18n/hr.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/hr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/hu.i18n.json b/packages/rocketchat-mailer/i18n/hu.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/hu.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/it.i18n.json b/packages/rocketchat-mailer/i18n/it.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/it.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/ja.i18n.json b/packages/rocketchat-mailer/i18n/ja.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/ja.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/km.i18n.json b/packages/rocketchat-mailer/i18n/km.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/km.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/ko.i18n.json b/packages/rocketchat-mailer/i18n/ko.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/ko.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/ms-MY.i18n.json b/packages/rocketchat-mailer/i18n/ms-MY.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/ms-MY.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/pl.i18n.json b/packages/rocketchat-mailer/i18n/pl.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/pl.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/pt.i18n.json b/packages/rocketchat-mailer/i18n/pt.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..cff0ad90bedaab8d58f221f88246fa44b0b7b63b --- /dev/null +++ b/packages/rocketchat-mailer/i18n/pt.i18n.json @@ -0,0 +1,9 @@ +{ + "Email_from" : "De", + "Email_subject" : "Assunto", + "Email_body" : "Corpo do E-mail", + "Rocket_Mailer" : "Rocket Mailer", + "Send_email" : "Enviar E-mail", + "You_are_not_authorized_to_view_this_page" : "Você não possui permissão para visualizar esta página.", + "You_have_successfully_unsubscribed" : "A partir de agora você não está mais cadastrado em nossa lista de e-mails." +} \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/ru.i18n.json b/packages/rocketchat-mailer/i18n/ru.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/ru.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/sv.i18n.json b/packages/rocketchat-mailer/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/ta-IN.i18n.json b/packages/rocketchat-mailer/i18n/ta-IN.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/ta-IN.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/tr.i18n.json b/packages/rocketchat-mailer/i18n/tr.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/tr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/ug.i18n.json b/packages/rocketchat-mailer/i18n/ug.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/ug.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/uk.i18n.json b/packages/rocketchat-mailer/i18n/uk.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/uk.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/i18n/zh.i18n.json b/packages/rocketchat-mailer/i18n/zh.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-mailer/i18n/zh.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-mailer/lib/RocketMailer.coffee b/packages/rocketchat-mailer/lib/RocketMailer.coffee new file mode 100644 index 0000000000000000000000000000000000000000..90d0dee81ab465bf3ea6c3355693c865035f5ab8 --- /dev/null +++ b/packages/rocketchat-mailer/lib/RocketMailer.coffee @@ -0,0 +1 @@ +RocketMailer = {} diff --git a/packages/rocketchat-mailer/package.js b/packages/rocketchat-mailer/package.js new file mode 100644 index 0000000000000000000000000000000000000000..db49ba91bc2601ea3e9f12ce45da666881962d72 --- /dev/null +++ b/packages/rocketchat-mailer/package.js @@ -0,0 +1,51 @@ +Package.describe({ + name: 'rocketchat:mailer', + version: '0.0.1', + summary: 'Mailer for Rocket.Chat' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.0'); + + api.use([ + 'coffeescript', + 'ddp-rate-limiter', + 'kadira:flow-router', + 'rocketchat:lib@0.0.1', + 'rocketchat:authorization@0.0.1' + ]); + + api.addFiles('lib/RocketMailer.coffee'); + + api.addFiles([ + 'client/startup.coffee', + 'client/router.coffee', + 'client/views/rocketMailer.html', + 'client/views/rocketMailer.coffee', + 'client/views/rocketMailerUnsubscribe.html' + ], 'client'); + + api.addFiles([ + 'server/startup.coffee', + 'server/models/Users.coffee', + 'server/functions/sendMail.coffee', + 'server/functions/unsubscribe.coffee', + 'server/methods/sendMail.coffee', + 'server/methods/unsubscribe.coffee' + ], 'server'); + + // TAPi18n + var _ = Npm.require('underscore'); + var fs = Npm.require('fs'); + api.use('templating', 'client'); + tapi18nFiles = _.compact(_.map(fs.readdirSync('packages/rocketchat-mailer/i18n'), function(filename) { + if (fs.statSync('packages/rocketchat-mailer/i18n/' + filename).size > 16) { + return 'i18n/' + filename; + } + })); + api.use('tap:i18n@1.6.1', ['client', 'server']); + api.imply('tap:i18n'); + api.addFiles(tapi18nFiles, ['client', 'server']); + + api.export('RocketMailer'); +}); diff --git a/packages/rocketchat-mailer/server/functions/sendMail.coffee b/packages/rocketchat-mailer/server/functions/sendMail.coffee new file mode 100644 index 0000000000000000000000000000000000000000..ed46eafdf7c0c3b6e3ced3a670273e9b4d34b5cc --- /dev/null +++ b/packages/rocketchat-mailer/server/functions/sendMail.coffee @@ -0,0 +1,35 @@ +RocketMailer.sendMail = (from, subject, body) -> + + rfcMailPatternWithName = /^(?:.*<)?([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)(?:>?)$/ + # rfcMailPattern = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ + + unless rfcMailPatternWithName.test from + throw new Meteor.Error 'invalid-from-address', TAPi18n.__('You_informed_an_invalid_FROM_address') + + if body.indexOf('[unsubscribe]') is -1 + throw new Meteor.Error 'missing-unsubscribe-link', TAPi18n.__('You_must_provide_the_unsubscribe_link') + + Meteor.users.find({ "rocketMailer.unsubscribed": { $exists: 0 } }).forEach (user) -> + # Meteor.users.find({ "username": /\.rocket\.team/ }).forEach (user) -> + email = user.emails?[0]?.address + + html = body.replace /\[unsubscribe\]/g, Meteor.absoluteUrl(FlowRouter.path('rocket-mailer/unsubscribe/:hash', { hash: "#{user._id}:#{user.createdAt.getTime()}" })) + html = html.replace /\[name\]/g, user.name + fname = _.strLeft user.name, ' ' + lname = _.strRightBack user.name, ' ' + html = html.replace /\[fname\]/g, fname + html = html.replace /\[lname\]/g, lname + html = html.replace /\[email\]/g, email + html = html.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + '<br>' + '$2') + + email = "#{user.name} <#{email}>" + + if rfcMailPatternWithName.test email + Meteor.defer -> + Email.send + to: email + from: from + subject: subject + html: html + + console.log 'Sending email to ' + email diff --git a/packages/rocketchat-mailer/server/functions/unsubscribe.coffee b/packages/rocketchat-mailer/server/functions/unsubscribe.coffee new file mode 100644 index 0000000000000000000000000000000000000000..9b559f1d38adb3b4cb527f6c4466422ffbf7dc94 --- /dev/null +++ b/packages/rocketchat-mailer/server/functions/unsubscribe.coffee @@ -0,0 +1,4 @@ +RocketMailer.unsubscribe = (_id, createdAt) -> + if _id and createdAt + return RocketChat.models.Users.RocketMailUnsubscribe(_id, createdAt) == 1 + return false diff --git a/packages/rocketchat-mailer/server/methods/sendMail.coffee b/packages/rocketchat-mailer/server/methods/sendMail.coffee new file mode 100644 index 0000000000000000000000000000000000000000..7c693bd6b57f31be6bac052847c533a8ae973626 --- /dev/null +++ b/packages/rocketchat-mailer/server/methods/sendMail.coffee @@ -0,0 +1,13 @@ +Meteor.methods + 'RocketMailer.sendMail': (from, subject, body) -> + + console.log '[method] RocketMailer.sendMail', from, subject, body + + return RocketMailer.sendMail from, subject, body + +# Limit setting username once per minute +# DDPRateLimiter.addRule +# type: 'method' +# name: 'RocketMailer.sendMail' +# connectionId: -> return true +# , 1, 60000 diff --git a/packages/rocketchat-mailer/server/methods/unsubscribe.coffee b/packages/rocketchat-mailer/server/methods/unsubscribe.coffee new file mode 100644 index 0000000000000000000000000000000000000000..5d0a1e6a44883783fc76a43153419e74e23def90 --- /dev/null +++ b/packages/rocketchat-mailer/server/methods/unsubscribe.coffee @@ -0,0 +1,10 @@ +Meteor.methods + 'RocketMailer.unsubscribe': (_id, createdAt) -> + return RocketMailer.unsubscribe _id, createdAt + +# Limit setting username once per minute +DDPRateLimiter.addRule + type: 'method' + name: 'RocketMailer.unsubscribe' + connectionId: -> return true +, 1, 60000 diff --git a/packages/rocketchat-mailer/server/models/Users.coffee b/packages/rocketchat-mailer/server/models/Users.coffee new file mode 100644 index 0000000000000000000000000000000000000000..1125205ccc0388d9496d79e571afff99bd3566d1 --- /dev/null +++ b/packages/rocketchat-mailer/server/models/Users.coffee @@ -0,0 +1,17 @@ +# Extends model Users + +RocketChat.models.Users.RocketMailUnsubscribe = (_id, createdAt) -> + + query = + _id: _id + createdAt: new Date(parseInt createdAt) + + update = + $set: + "rocketMailer.unsubscribed": true + + affectedRows = @update query, update + + console.log '[RocketMailer.Unsubscribe]', _id, createdAt, new Date(parseInt createdAt), affectedRows + + return affectedRows diff --git a/packages/rocketchat-mailer/server/startup.coffee b/packages/rocketchat-mailer/server/startup.coffee new file mode 100644 index 0000000000000000000000000000000000000000..24ee1c22c7725d0da4a14019d620206748226fac --- /dev/null +++ b/packages/rocketchat-mailer/server/startup.coffee @@ -0,0 +1,2 @@ +Meteor.startup -> + RocketChat.models.Permissions.upsert( 'access-rocket-mailer', { $setOnInsert : { _id: 'access-rocket-mailer', roles : ['admin'] } }) diff --git a/packages/rocketchat-markdown/markdown.coffee b/packages/rocketchat-markdown/markdown.coffee index 4af338c7d79a1d5382b7d24189a3f9a28fd914b9..78c06832cfbb40ede68ff9f2a7c9ec14e084833c 100644 --- a/packages/rocketchat-markdown/markdown.coffee +++ b/packages/rocketchat-markdown/markdown.coffee @@ -47,7 +47,7 @@ class Markdown message.html = msg - console.log 'Markdown', message if window.rocketDebug + console.log 'Markdown', message if window?.rocketDebug return message diff --git a/packages/rocketchat-markdown/package.js b/packages/rocketchat-markdown/package.js index d4c5118b360760f0efd2f6748ca2e7d6591b4f0e..69740c6cd827c746a0e553bb0f81c77e64de2dc1 100644 --- a/packages/rocketchat-markdown/package.js +++ b/packages/rocketchat-markdown/package.js @@ -8,15 +8,20 @@ Package.describe({ Package.onUse(function(api) { api.versionsFrom('1.0'); - api.use([ - 'coffeescript', - 'rocketchat:lib@0.0.1' - ]); + api.use('coffeescript'); + api.use('underscore'); + api.use('underscorestring:underscore.string'); + api.use('rocketchat:lib@0.0.1'); api.addFiles('settings.coffee', 'server'); api.addFiles('markdown.coffee'); }); Package.onTest(function(api) { + api.use('coffeescript'); + api.use('sanjo:jasmine@0.20.2'); + api.use('rocketchat:lib'); + api.use('rocketchat:markdown'); + api.addFiles('tests/jasmine/client/unit/markdown.spec.coffee', 'client'); }); diff --git a/packages/rocketchat-markdown/tests/jasmine/client/unit/markdown.spec.coffee b/packages/rocketchat-markdown/tests/jasmine/client/unit/markdown.spec.coffee new file mode 100644 index 0000000000000000000000000000000000000000..f154266a873cf2a2f5420fee83207ec7fbb09992 --- /dev/null +++ b/packages/rocketchat-markdown/tests/jasmine/client/unit/markdown.spec.coffee @@ -0,0 +1,4 @@ +describe 'rocketchat:markdown Client', -> + + it 'should exist', -> + expect(RocketChat.Markdown).toBeDefined() diff --git a/packages/rocketchat-message-pin/client/actionButton.coffee b/packages/rocketchat-message-pin/client/actionButton.coffee new file mode 100644 index 0000000000000000000000000000000000000000..78527e098fdc338816d1bede7debb54ab9221a44 --- /dev/null +++ b/packages/rocketchat-message-pin/client/actionButton.coffee @@ -0,0 +1,40 @@ +Meteor.startup -> + RocketChat.MessageAction.addButton + id: 'pin-message' + icon: 'icon-pin' + i18nLabel: 'Pin_Message' + action: (event, instance) -> + message = @_arguments[1] + message.pinned = true + Meteor.call 'pinMessage', message, (error, result) -> + if error + return Errors.throw error.reason + validation: (message) -> + if message.pinned or not RocketChat.settings.get('Message_AllowPinning') + return false + + if RocketChat.settings.get('Message_AllowPinningByAnyone') or RocketChat.authz.hasRole Meteor.userId(), 'admin' + return true + + return ChatRoom.findOne(message.rid).u?._id is Meteor.userId() + order: 20 + + RocketChat.MessageAction.addButton + id: 'unpin-message' + icon: 'icon-pin' + i18nLabel: 'Unpin_Message' + action: (event, instance) -> + message = @_arguments[1] + message.pinned = false + Meteor.call 'unpinMessage', message, (error, result) -> + if error + return Errors.throw error.reason + validation: (message) -> + if not message.pinned or not RocketChat.settings.get('Message_AllowPinning') + return false + + if RocketChat.settings.get('Message_AllowPinningByAnyone') or RocketChat.authz.hasRole Meteor.userId(), 'admin' + return true + + return ChatRoom.findOne(message.rid).u?._id is Meteor.userId() + order: 21 diff --git a/packages/rocketchat-message-pin/client/lib/PinnedMessage.coffee b/packages/rocketchat-message-pin/client/lib/PinnedMessage.coffee new file mode 100644 index 0000000000000000000000000000000000000000..ff0a36d7d667e69e02d05671f57df4e34b5e4ed7 --- /dev/null +++ b/packages/rocketchat-message-pin/client/lib/PinnedMessage.coffee @@ -0,0 +1 @@ +@PinnedMessage = new Meteor.Collection 'rocketchat_pinned_message' diff --git a/packages/rocketchat-message-pin/client/tabBar.coffee b/packages/rocketchat-message-pin/client/tabBar.coffee new file mode 100644 index 0000000000000000000000000000000000000000..f4b8d24a66b68211b85dc870ecaca04247dfef90 --- /dev/null +++ b/packages/rocketchat-message-pin/client/tabBar.coffee @@ -0,0 +1,5 @@ +Meteor.startup -> + RocketChat.callbacks.add 'enter-room', -> + if RocketChat.settings.get 'Message_AllowPinning' + RocketChat.TabBar.addButton({ id: 'pinned-messages', i18nTitle: 'Pinned_Messages', icon: 'icon-pin', template: 'pinnedMessages', order: 10 }) + , RocketChat.callbacks.priority.MEDIUM, 'enter-room-tabbar-pin' diff --git a/packages/rocketchat-message-pin/client/views/pinnedMessages.coffee b/packages/rocketchat-message-pin/client/views/pinnedMessages.coffee new file mode 100644 index 0000000000000000000000000000000000000000..c60783c49ef7a7985d2bf5e0f0502e66a2b0544c --- /dev/null +++ b/packages/rocketchat-message-pin/client/views/pinnedMessages.coffee @@ -0,0 +1,21 @@ +Template.pinnedMessages.helpers + hasMessages: -> + return PinnedMessage.find({ rid: this.rid }, { sort: { ts: -1 } }).count() > 0 + + messages: -> + return PinnedMessage.find { rid: this.rid }, { sort: { ts: -1 } } + + notReadySubscription: -> + return 'notready' unless Template.instance().subscriptionsReady() + +Template.pinnedMessages.onCreated -> + this.autorun => + this.subscribe 'pinnedMessages', Template.currentData().rid + +Template.pinnedMessages.events + 'click .message-cog': (e) -> + e.stopPropagation() + e.preventDefault() + message_id = $(e.currentTarget).closest('.message').attr('id') + $('.message-dropdown:visible').hide() + $(".pinned-messages-list \##{message_id} .message-dropdown").show() diff --git a/packages/rocketchat-message-pin/client/views/pinnedMessages.html b/packages/rocketchat-message-pin/client/views/pinnedMessages.html new file mode 100644 index 0000000000000000000000000000000000000000..d1c470c7f41cfe8820a6e9e3a8df161a2dae65a7 --- /dev/null +++ b/packages/rocketchat-message-pin/client/views/pinnedMessages.html @@ -0,0 +1,22 @@ +<template name="pinnedMessages"> + <div class="control"> + <div class="header"> + <h2>{{_ "Pinned_Messages"}}</h2> + </div> + </div> + <ul class="pinned-messages-list scrollable"> + {{#if Template.subscriptionsReady}} + {{#if hasMessages}} + {{#each messages}} + {{#nrr nrrargs 'message' .}}{{/nrr}} + {{/each}} + {{else}} + <li class="empty"> + {{_ "No_pinned_messages"}} + </li> + {{/if}} + {{else}} + {{> loading}} + {{/if}} + </ul> +</template> diff --git a/packages/rocketchat-message-pin/client/views/stylesheets/messagepin.less b/packages/rocketchat-message-pin/client/views/stylesheets/messagepin.less new file mode 100644 index 0000000000000000000000000000000000000000..de3c15683ba13efdebdd51c390e7cb22505cdb50 --- /dev/null +++ b/packages/rocketchat-message-pin/client/views/stylesheets/messagepin.less @@ -0,0 +1,26 @@ +.pinned-messages-list { + padding: 30px 0; + + &.notready { + background-image: url(/images/logo/loading.gif); + background-repeat: no-repeat; + background-position: 50% 50%; + height: 100px; + + .message { + display: none; + } + } + + li.empty { + color: #7f7f7f; + text-align: center; + margin-top: 60px; + } + + .message-cog-container { + .edit-message, .delete-message, .star-message, .unstar-message { + display: none !important; + } + } +} diff --git a/packages/rocketchat-message-pin/i18n/ar.i18n.json b/packages/rocketchat-message-pin/i18n/ar.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/ar.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/de.i18n.json b/packages/rocketchat-message-pin/i18n/de.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/de.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/el.i18n.json b/packages/rocketchat-message-pin/i18n/el.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/el.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/en.i18n.json b/packages/rocketchat-message-pin/i18n/en.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..834bea1c96d2657e23cf1465e088c49ec72208ef --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/en.i18n.json @@ -0,0 +1,10 @@ +{ + "Message_AllowPinning" : "Allow Message Pinning", + "Message_AllowPinning_Description": "Allow messages to be pinned to any of the channels.", + "Message_AllowPinningByAnyone": "Allow Anyone to Pin Messages", + "Message_AllowPinningByAnyone_Description": "Allow anyone to pin messages to a channel, not just administrators.", + "Pin_Message" : "Pin Message", + "Unpin_Message" : "Unpin Message", + "Pinned_Messages" : "Pinned Messages", + "No_pinned_messages" : "No pinned messages" +} diff --git a/packages/rocketchat-message-pin/i18n/es.i18n.json b/packages/rocketchat-message-pin/i18n/es.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/es.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/fa.i18n.json b/packages/rocketchat-message-pin/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/fi.i18n.json b/packages/rocketchat-message-pin/i18n/fi.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/fi.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/fr.i18n.json b/packages/rocketchat-message-pin/i18n/fr.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/fr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/he.i18n.json b/packages/rocketchat-message-pin/i18n/he.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/he.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/hr.i18n.json b/packages/rocketchat-message-pin/i18n/hr.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/hr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/hu.i18n.json b/packages/rocketchat-message-pin/i18n/hu.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/hu.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/it.i18n.json b/packages/rocketchat-message-pin/i18n/it.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/it.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/ja.i18n.json b/packages/rocketchat-message-pin/i18n/ja.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/ja.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/km.i18n.json b/packages/rocketchat-message-pin/i18n/km.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/km.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/ko.i18n.json b/packages/rocketchat-message-pin/i18n/ko.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/ko.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/ms-MY.i18n.json b/packages/rocketchat-message-pin/i18n/ms-MY.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/ms-MY.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/pl.i18n.json b/packages/rocketchat-message-pin/i18n/pl.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/pl.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/pt.i18n.json b/packages/rocketchat-message-pin/i18n/pt.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/pt.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/ru.i18n.json b/packages/rocketchat-message-pin/i18n/ru.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/ru.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/sv.i18n.json b/packages/rocketchat-message-pin/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/ta-IN.i18n.json b/packages/rocketchat-message-pin/i18n/ta-IN.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/ta-IN.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/tr.i18n.json b/packages/rocketchat-message-pin/i18n/tr.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/tr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/ug.i18n.json b/packages/rocketchat-message-pin/i18n/ug.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/ug.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/uk.i18n.json b/packages/rocketchat-message-pin/i18n/uk.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/uk.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/i18n/zh.i18n.json b/packages/rocketchat-message-pin/i18n/zh.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-pin/i18n/zh.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-pin/package.js b/packages/rocketchat-message-pin/package.js new file mode 100644 index 0000000000000000000000000000000000000000..69f0358da29e6d86fb1bca4e98226ac0fc2f5c7b --- /dev/null +++ b/packages/rocketchat-message-pin/package.js @@ -0,0 +1,48 @@ +Package.describe({ + name: 'rocketchat:message-pin', + version: '0.0.1', + summary: 'Pin Messages' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.0'); + + api.use([ + 'coffeescript', + 'less@2.5.0', + 'rocketchat:lib@0.0.1' + ]); + + api.addFiles([ + 'client/lib/PinnedMessage.coffee', + 'client/actionButton.coffee', + 'client/tabBar.coffee', + 'client/views/pinnedMessages.html', + 'client/views/pinnedMessages.coffee', + 'client/views/stylesheets/messagepin.less', + ], 'client'); + + api.addFiles([ + 'server/settings.coffee', + 'server/pinMessage.coffee', + 'server/publications/pinnedMessages.coffee', + 'server/startup/indexes.coffee' + ], 'server'); + + // TAPi18n + api.use('templating', 'client'); + var _ = Npm.require('underscore'); + var fs = Npm.require('fs'); + tapi18nFiles = _.compact(_.map(fs.readdirSync('packages/rocketchat-message-pin/i18n'), function(filename) { + if (fs.statSync('packages/rocketchat-message-pin/i18n/' + filename).size > 16) { + return 'i18n/' + filename; + } + })); + api.use(["tap:i18n@1.5.1"], ["client", "server"]); + api.imply('tap:i18n'); + api.addFiles(tapi18nFiles, ["client", "server"]); +}); + +Package.onTest(function(api) { + +}); diff --git a/packages/rocketchat-message-pin/server/pinMessage.coffee b/packages/rocketchat-message-pin/server/pinMessage.coffee new file mode 100644 index 0000000000000000000000000000000000000000..7a62e55f3da45d6934df4dea17ee3c4e21a8c574 --- /dev/null +++ b/packages/rocketchat-message-pin/server/pinMessage.coffee @@ -0,0 +1,53 @@ +Meteor.methods + pinMessage: (message) -> + if not Meteor.userId() + throw new Meteor.Error('invalid-user', "[methods] pinMessage -> Invalid user") + + if not RocketChat.settings.get 'Message_AllowPinning' + throw new Meteor.Error 'message-pinning-not-allowed', '[methods] pinMessage -> Message pinning not allowed' + + console.log '[methods] pinMessage -> '.green, 'userId:', Meteor.userId() + + # If we keep history of edits, insert a new message to store history information + if RocketChat.settings.get 'Message_KeepHistory' + RocketChat.models.Messages.cloneAndSaveAsHistoryById message._id + + me = RocketChat.models.Users.findOneById Meteor.userId() + + message.pinned = true + message.pinnedAt = Date.now + message.pinnedBy = + _id: Meteor.userId() + username: me.username + + message = RocketChat.callbacks.run 'beforeSaveMessage', message + + RocketChat.models.Messages.setPinnedByIdAndUserId message._id, message.pinnedBy, message.pinned + + unpinMessage: (message) -> + if not Meteor.userId() + throw new Meteor.Error('invalid-user', "[methods] unpinMessage -> Invalid user") + + if not RocketChat.settings.get 'Message_AllowPinning' + throw new Meteor.Error 'message-pinning-not-allowed', '[methods] pinMessage -> Message pinning not allowed' + + console.log '[methods] unpinMessage -> '.green, 'userId:', Meteor.userId() + + # If we keep history of edits, insert a new message to store history information + if RocketChat.settings.get 'Message_KeepHistory' + RocketChat.models.Messages.cloneAndSaveAsHistoryById message._id + + me = RocketChat.models.Users.findOneById Meteor.userId() + + message.pinned = false + message.pinnedBy = + _id: Meteor.userId() + username: me.username + + message = RocketChat.callbacks.run 'beforeSaveMessage', message + + RocketChat.models.Messages.setPinnedByIdAndUserId message._id, message.pinnedBy, message.pinned + + + # Meteor.defer -> + # RocketChat.callbacks.run 'afterSaveMessage', RocketChat.models.Messages.findOneById(message.id) diff --git a/packages/rocketchat-message-pin/server/publications/pinnedMessages.coffee b/packages/rocketchat-message-pin/server/publications/pinnedMessages.coffee new file mode 100644 index 0000000000000000000000000000000000000000..7daf7a32bd576bc82e502cff3987260fe1876617 --- /dev/null +++ b/packages/rocketchat-message-pin/server/publications/pinnedMessages.coffee @@ -0,0 +1,21 @@ +Meteor.publish 'pinnedMessages', (rid, options = {}) -> + unless this.userId + return this.ready() + + console.log '[publish] pinnedMessages -> '.green, 'rid:', rid, 'options:', options + + publication = @ + + cursorHandle = RocketChat.models.Messages.findPinnedByRoom(rid, { sort: { ts: -1 }, limit: 50 }).observeChanges + added: (_id, record) -> + publication.added('rocketchat_pinned_message', _id, record) + + changed: (_id, record) -> + publication.changed('rocketchat_pinned_message', _id, record) + + removed: (_id) -> + publication.removed('rocketchat_pinned_message', _id) + + @ready() + @onStop -> + cursorHandle.stop() diff --git a/packages/rocketchat-message-pin/server/settings.coffee b/packages/rocketchat-message-pin/server/settings.coffee new file mode 100644 index 0000000000000000000000000000000000000000..364d316c89426cdd0de6184861c02938e90ad20e --- /dev/null +++ b/packages/rocketchat-message-pin/server/settings.coffee @@ -0,0 +1,3 @@ +Meteor.startup -> + RocketChat.settings.add 'Message_AllowPinning', true, { type: 'boolean', group: 'Message', public: true } + RocketChat.settings.add 'Message_AllowPinningByAnyone', false, { type: 'boolean', group: 'Message', public: true } diff --git a/packages/rocketchat-message-pin/server/startup/indexes.coffee b/packages/rocketchat-message-pin/server/startup/indexes.coffee new file mode 100644 index 0000000000000000000000000000000000000000..c008b0c36577662bbbbbf85ead918312f64597de --- /dev/null +++ b/packages/rocketchat-message-pin/server/startup/indexes.coffee @@ -0,0 +1,3 @@ +Meteor.startup -> + Meteor.defer -> + RocketChat.models.Messages.tryEnsureIndex { 'pinnedBy._id': 1 }, { sparse: 1 } diff --git a/packages/rocketchat-message-star/client/views/stylesheets/messagestar.less b/packages/rocketchat-message-star/client/views/stylesheets/messagestar.less index 1750399d391ddd65259bd991ca98d22a7a9e1cb6..b31cb69553af5fbcaafa34da94d6d0d9dbd47820 100644 --- a/packages/rocketchat-message-star/client/views/stylesheets/messagestar.less +++ b/packages/rocketchat-message-star/client/views/stylesheets/messagestar.less @@ -19,8 +19,8 @@ } .message-cog-container { - .edit-message, .delete-message { + .edit-message, .delete-message, .pin-message, .unpin-message { display: none !important; } - } + } } diff --git a/packages/rocketchat-message-star/i18n/en.i18n.json b/packages/rocketchat-message-star/i18n/en.i18n.json index 7377102ab14796f3162476fc3e5e832c20cd8b72..756eaee93e8f3e897af472d740c10e6bb4635f45 100644 --- a/packages/rocketchat-message-star/i18n/en.i18n.json +++ b/packages/rocketchat-message-star/i18n/en.i18n.json @@ -1,7 +1,8 @@ { "Message_AllowStarring" : "Allow Message Starring", + "Message_AllowStarring_Description" : "", "Star_Message" : "Star Message", "Unstar_Message" : "Remove Star", "Starred_Messages" : "Starred Messages", "No_starred_messages" : "No starred messages" -} \ No newline at end of file +} diff --git a/packages/rocketchat-message-star/i18n/fa.i18n.json b/packages/rocketchat-message-star/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-star/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-star/i18n/fi.i18n.json b/packages/rocketchat-message-star/i18n/fi.i18n.json index 6f31cf5a2e622e523ae008338072897b8e56c993..9eea3ddfbbf9f4a2abdc4a01a5dcc9500d5b421c 100644 --- a/packages/rocketchat-message-star/i18n/fi.i18n.json +++ b/packages/rocketchat-message-star/i18n/fi.i18n.json @@ -1 +1,7 @@ -{ } \ No newline at end of file +{ + "Message_AllowStarring" : "Salli viesteille tähti-merkki", + "Star_Message" : "Merkkaa tähdellä", + "Unstar_Message" : "Poista tähti", + "Starred_Messages" : "Tähdellä merkityt viestit", + "No_starred_messages" : "Ei tähdellä merkittyjä viestejä" +} \ No newline at end of file diff --git a/packages/rocketchat-message-star/i18n/hr.i18n.json b/packages/rocketchat-message-star/i18n/hr.i18n.json index 6f31cf5a2e622e523ae008338072897b8e56c993..f57e88dc1e86b7b8cae22bb35abecc47ee0579b6 100644 --- a/packages/rocketchat-message-star/i18n/hr.i18n.json +++ b/packages/rocketchat-message-star/i18n/hr.i18n.json @@ -1 +1,4 @@ -{ } \ No newline at end of file +{ + "Unstar_Message" : "Ukloni zvjezdicu", + "Starred_Messages" : "Poruke sa zvjezdicom" +} \ No newline at end of file diff --git a/packages/rocketchat-message-star/i18n/ru.i18n.json b/packages/rocketchat-message-star/i18n/ru.i18n.json index 6f31cf5a2e622e523ae008338072897b8e56c993..24843cb079a2e507a458e6560294c7723539d789 100644 --- a/packages/rocketchat-message-star/i18n/ru.i18n.json +++ b/packages/rocketchat-message-star/i18n/ru.i18n.json @@ -1 +1,6 @@ -{ } \ No newline at end of file +{ + "Star_Message" : "Оценить Ñообщение", + "Unstar_Message" : "Убрать оценку", + "Starred_Messages" : "Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Ð¾Ñ†ÐµÐ½ÐºÐ¾Ð¹", + "No_starred_messages" : "Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð±ÐµÐ· оценки" +} \ No newline at end of file diff --git a/packages/rocketchat-message-star/i18n/sv.i18n.json b/packages/rocketchat-message-star/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-message-star/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-message-star/i18n/tr.i18n.json b/packages/rocketchat-message-star/i18n/tr.i18n.json index 6f31cf5a2e622e523ae008338072897b8e56c993..4f7823db29f65111127ee4dc3608c5c109d53a07 100644 --- a/packages/rocketchat-message-star/i18n/tr.i18n.json +++ b/packages/rocketchat-message-star/i18n/tr.i18n.json @@ -1 +1,5 @@ -{ } \ No newline at end of file +{ + "Star_Message" : "Favorilere ekle", + "Starred_Messages" : "Favori Ä°letilerim", + "No_starred_messages" : "Favori iletin yok" +} \ No newline at end of file diff --git a/packages/rocketchat-oembed/client/baseWidget.coffee b/packages/rocketchat-oembed/client/baseWidget.coffee index 8a84ed7a506cacec97311ac9fa52b69b2c2f6b37..ebe69afefc4d27e857eb0bbb05b9be11cf1008fd 100644 --- a/packages/rocketchat-oembed/client/baseWidget.coffee +++ b/packages/rocketchat-oembed/client/baseWidget.coffee @@ -12,7 +12,7 @@ Template.oembedBaseWidget.helpers if this.headers?.contentType?.match(/video\/.*/)? or this.meta?.twitterPlayerStreamContentType?.match(/video\/.*/)? return 'oembedVideoWidget' - if this.parsedUrl?.host is 'www.youtube.com' and this.meta?.twitterPlayer? - return 'oembedYoutubeWidget' + if this.meta?.oembedHtml? + return 'oembedFrameWidget' return 'oembedUrlWidget' diff --git a/packages/rocketchat-soundcloud/lib/client/oembedSoundcloudWidget.html b/packages/rocketchat-oembed/client/oembedFrameWidget.html similarity index 67% rename from packages/rocketchat-soundcloud/lib/client/oembedSoundcloudWidget.html rename to packages/rocketchat-oembed/client/oembedFrameWidget.html index f478120bed7fe7d7e6f913e280e7bb624653f80a..6965b8e6102cff91fc4690785b9a71aae2a58d80 100644 --- a/packages/rocketchat-soundcloud/lib/client/oembedSoundcloudWidget.html +++ b/packages/rocketchat-oembed/client/oembedFrameWidget.html @@ -1,7 +1,11 @@ -<template name="oembedSoundcloudWidget"> +<template name="oembedFrameWidget"> {{#if parsedUrl}} <blockquote> - <a href="https://www.soundcloud.com" style="color: #9e9ea6">SoundCloud</a><br/> + {{#if meta.oembedProviderName}} + {{#if meta.oembedProviderUrl}} + <a href="{{meta.oembedProviderUrl}}" style="color: #9e9ea6">{{meta.oembedProviderName}}</a><br/> + {{/if}} + {{/if}} {{#if meta.oembedAuthorName}} {{#if meta.oembedAuthorUrl}} <a href="meta.oembedAuthorUrl">{{meta.oembedAuthorName}}</a><br/> diff --git a/packages/rocketchat-oembed/package.js b/packages/rocketchat-oembed/package.js index eab59017ae916fad8b1824d6d0f99ee9a205ed09..ace7d0496be20df1c7ef2e5d2f55f0321ede8563 100644 --- a/packages/rocketchat-oembed/package.js +++ b/packages/rocketchat-oembed/package.js @@ -11,6 +11,8 @@ Package.onUse(function(api) { api.use([ 'templating', 'coffeescript', + 'underscore', + 'konecty:change-case', 'rocketchat:lib@0.0.1' ]); @@ -30,7 +32,10 @@ Package.onUse(function(api) { api.addFiles('client/oembedUrlWidget.html', 'client'); api.addFiles('client/oembedUrlWidget.coffee', 'client'); + api.addFiles('client/oembedFrameWidget.html', 'client'); + api.addFiles('server/server.coffee', 'server'); + api.addFiles('server/providers.coffee', 'server'); api.addFiles('server/models/OEmbedCache.coffee', 'server'); api.export('OEmbed', 'server'); diff --git a/packages/rocketchat-oembed/server/providers.coffee b/packages/rocketchat-oembed/server/providers.coffee new file mode 100644 index 0000000000000000000000000000000000000000..ddb4f66802a8c61de205e480e0f85120b33839bc --- /dev/null +++ b/packages/rocketchat-oembed/server/providers.coffee @@ -0,0 +1,74 @@ +URL = Npm.require('url') +QueryString = Npm.require('querystring') + +class Providers + providers: [] + + @getConsumerUrl: (provider, url) -> + urlObj = URL.parse provider.endPoint, true + urlObj.query['url'] = url + delete urlObj.search + return URL.format urlObj + + registerProvider: (provider) -> + this.providers.push(provider) + + getProviders: () -> + return this.providers + + getProviderForUrl: (url) -> + return _.find this.providers, (provider) -> + candidate = _.find provider.urls, (re) -> + return re.test url + return candidate? + +providers = new Providers() +providers.registerProvider + urls: [new RegExp('https?://soundcloud.com/\\S+')] + endPoint: 'https://soundcloud.com/oembed?format=json&maxheight=150' +providers.registerProvider + urls: [new RegExp('https?://vimeo.com/[^/]+'), new RegExp('https?://vimeo.com/channels/[^/]+/[^/]+'), new RegExp('https://vimeo.com/groups/[^/]+/videos/[^/]+')] + endPoint: 'https://vimeo.com/api/oembed.json?maxheight=200' +providers.registerProvider + urls: [new RegExp('https?://www.youtube.com/\\S+'), new RegExp('https?://www.youtu.be/\\S+')] + endPoint: 'https://www.youtube.com/oembed?maxheight=200' +providers.registerProvider + urls: [new RegExp('https?://www.rdio.com/\\S+'), new RegExp('https?://rd.io/\\S+')] + endPoint: 'https://www.rdio.com/api/oembed/?format=json&maxheight=150' +providers.registerProvider + urls: [new RegExp('https?://www.slideshare.net/[^/]+/[^/]+')] + endPoint: 'https://www.slideshare.net/api/oembed/2?format=json&maxheight=200' +providers.registerProvider + urls: [new RegExp('https?://www.dailymotion.com/video/\\S+')] + endPoint: 'https://www.dailymotion.com/services/oembed?maxheight=200' + +RocketChat.oembed = {} +RocketChat.oembed.providers = providers + +RocketChat.callbacks.add 'oembed:beforeGetUrlContent', (data) -> + if data.parsedUrl? + url = URL.format data.parsedUrl + provider = providers.getProviderForUrl url + if provider? + consumerUrl = Providers.getConsumerUrl provider, url + consumerUrl = URL.parse consumerUrl, true + _.extend data.parsedUrl, consumerUrl + data.requestOptions.port = consumerUrl.port + data.requestOptions.hostname = consumerUrl.hostname + data.requestOptions.path = consumerUrl.path + +RocketChat.callbacks.add 'oembed:afterParseContent', (data) -> + if data.parsedUrl?.query? + queryString = data.parsedUrl.query + if _.isString data.parsedUrl.query + queryString = QueryString.parse data.parsedUrl.query + if queryString.url? + url = queryString.url + provider = providers.getProviderForUrl url + if provider? + if data.content?.body? + metas = JSON.parse data.content.body; + _.each metas, (value, key) -> + if _.isString value + data.meta[changeCase.camelCase('oembed_' + key)] = value + data.meta['oembedUrl'] = url diff --git a/packages/rocketchat-oembed/server/server.coffee b/packages/rocketchat-oembed/server/server.coffee index 196d0f4affd385c35bd75a529335157292a13716..4a59fda45e25ba05f68ab3bda22bb620a7d36b1c 100644 --- a/packages/rocketchat-oembed/server/server.coffee +++ b/packages/rocketchat-oembed/server/server.coffee @@ -24,7 +24,7 @@ getUrlContent = (urlObj, redirectCount = 5, callback) -> httpOrHttps = if urlObj.protocol is 'https:' then https else http - parsedUrl = _.pick urlObj, ['host', 'hash', 'pathname', 'protocol', 'port', 'query'] + parsedUrl = _.pick urlObj, ['host', 'hash', 'pathname', 'protocol', 'port', 'query', 'search'] RocketChat.callbacks.run 'oembed:beforeGetUrlContent', requestOptions: opts diff --git a/packages/rocketchat-slashcommands-invite/i18n/fa.i18n.json b/packages/rocketchat-slashcommands-invite/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-slashcommands-invite/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-slashcommands-invite/i18n/fi.i18n.json b/packages/rocketchat-slashcommands-invite/i18n/fi.i18n.json index 1622a0afad979732c0541cd5573c65bae7d11204..b455034ccb228132795de74ea09b145846fe02af 100644 --- a/packages/rocketchat-slashcommands-invite/i18n/fi.i18n.json +++ b/packages/rocketchat-slashcommands-invite/i18n/fi.i18n.json @@ -1,4 +1,5 @@ { + "Invite_user_to_join_channel" : "Kutsu käyttäjä kanavalle", "User_doesnt_exist" : "Yhtään käyttäjää ei ole olemassa nimellä `@%s`.", "Username_is_already_in_here" : "`@%s` on jo täällä." } \ No newline at end of file diff --git a/packages/rocketchat-slashcommands-invite/i18n/sv.i18n.json b/packages/rocketchat-slashcommands-invite/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-slashcommands-invite/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-slashcommands-join/i18n/fa.i18n.json b/packages/rocketchat-slashcommands-join/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-slashcommands-join/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-slashcommands-join/i18n/fi.i18n.json b/packages/rocketchat-slashcommands-join/i18n/fi.i18n.json index 17c66619689b80513c762729b2477243019087eb..40103a63b261f1317617d37b62bf3644d92f1dad 100644 --- a/packages/rocketchat-slashcommands-join/i18n/fi.i18n.json +++ b/packages/rocketchat-slashcommands-join/i18n/fi.i18n.json @@ -1,3 +1,4 @@ { - "Channel_doesnt_exist" : "Kanavaa `#%s` ei ole olemassa." + "Channel_doesnt_exist" : "Kanavaa `#%s` ei ole olemassa.", + "Join_the_given_channel" : "Liity kanavalle" } \ No newline at end of file diff --git a/packages/rocketchat-slashcommands-join/i18n/sv.i18n.json b/packages/rocketchat-slashcommands-join/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-slashcommands-join/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-soundcloud/lib/client/widget.coffee b/packages/rocketchat-soundcloud/lib/client/widget.coffee deleted file mode 100644 index bf4c284024d35bc5b1292425ea8c3c0fc705b5de..0000000000000000000000000000000000000000 --- a/packages/rocketchat-soundcloud/lib/client/widget.coffee +++ /dev/null @@ -1,3 +0,0 @@ -Template.oembedBaseWidget.onCreated () -> - if this.data?.parsedUrl?.host is 'soundcloud.com' and this.data?.meta?.oembedHtml? - this.data._overrideTemplate = 'oembedSoundcloudWidget' diff --git a/packages/rocketchat-soundcloud/lib/server/server.coffee b/packages/rocketchat-soundcloud/lib/server/server.coffee deleted file mode 100644 index b1bbe3be4eb09471618ef0eb38a30785d7bf107f..0000000000000000000000000000000000000000 --- a/packages/rocketchat-soundcloud/lib/server/server.coffee +++ /dev/null @@ -1,19 +0,0 @@ -URL = Npm.require('url') - -RocketChat.callbacks.add 'oembed:beforeGetUrlContent', (data) -> - if data.parsedUrl.host is 'soundcloud.com' - newUrlObj = URL.format data.parsedUrl - newUrlObj = URL.parse "https://soundcloud.com/oembed?url=" + encodeURIComponent newUrlObj + "&format=json&maxheight=150" - data.requestOptions.port = newUrlObj.port - data.requestOptions.hostname = newUrlObj.hostname - data.requestOptions.path = newUrlObj.path - -RocketChat.callbacks.add 'oembed:afterParseContent', (data) -> - if data.parsedUrl.host is 'soundcloud.com' - if data.content?.body? - metas = JSON.parse data.content.body; - _.each metas, (value, key) -> - if _.isString value - data.meta[changeCase.camelCase('oembed_' + key)] = value - if data.parsedUrl? - data.meta['oembedUrl'] = URL.format data.parsedUrl diff --git a/packages/rocketchat-soundcloud/package.js b/packages/rocketchat-soundcloud/package.js deleted file mode 100644 index 054b7802923c537cd6514def75caecd60e5698de..0000000000000000000000000000000000000000 --- a/packages/rocketchat-soundcloud/package.js +++ /dev/null @@ -1,28 +0,0 @@ -Package.describe({ - name: 'rocketchat:soundcloud', - version: '0.0.1', - summary: 'Soundcloud integration', - git: '' -}); - -Package.onUse(function(api) { - api.versionsFrom('1.0'); - - api.use([ - 'coffeescript', - 'templating', - 'underscore', - 'konecty:change-case', - 'rocketchat:lib', - 'rocketchat:oembed@0.0.1' - ]); - - api.addFiles('lib/client/widget.coffee', 'client'); - api.addFiles('lib/client/oembedSoundcloudWidget.html', 'client'); - - api.addFiles('lib/server/server.coffee', 'server'); -}); - -Package.onTest(function(api) { - -}); diff --git a/packages/rocketchat-theme/assets/stylesheets/base.less b/packages/rocketchat-theme/assets/stylesheets/base.less index d858917f1615e5c4cf45b560e7eacb7a278de9a6..c8a913a1aa36527def81a5741c71a24ead8d0636 100644 --- a/packages/rocketchat-theme/assets/stylesheets/base.less +++ b/packages/rocketchat-theme/assets/stylesheets/base.less @@ -20,6 +20,12 @@ -ms-user-select: none; user-select: none; } +.allow-text-selection { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} :focus { outline: 0 !important; @@ -1706,6 +1712,9 @@ a.github-fork { } .page-settings { + .settings-description { + .allow-text-selection; + } .rocket-form { max-width: none; width: 100%; @@ -2439,9 +2448,24 @@ a.github-fork { display: block; width: 40px; height: 40px; + &.thumb-small { + position: initial; + width: 20px; + height: 20px; + display: inline-block; + vertical-align: bottom; + .avatar { + border-radius: 50%; + } + } } .info { font-size: 12px; + .edited { + border-left: 1px dotted #BAB8B8; + padding-left: 3px; + margin-left: 3px; + } } .private { margin-left: 10px; @@ -2453,7 +2477,7 @@ a.github-fork { .user { display: none; } - .thumb { + .thumb:not(.thumb-small) { display: none; } .info { @@ -2466,6 +2490,9 @@ a.github-fork { } .edited { display: block; + border-left: 0; + margin-left: 0; + padding-left: 0; } .private { display: none; @@ -2537,7 +2564,7 @@ a.github-fork { .compact { .message { padding: 5px 20px 5px 70px; - .thumb .avatar { + .thumb:not(.thumb-small) .avatar { margin-top: -15px; } } diff --git a/packages/rocketchat-theme/i18n/en.i18n.json b/packages/rocketchat-theme/i18n/en.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..31987697d1dbdc8e716f528f5442f9b23e31b83e --- /dev/null +++ b/packages/rocketchat-theme/i18n/en.i18n.json @@ -0,0 +1,45 @@ +{ + "Theme_Description" : "", + "theme-color-blockquote-background" : "Blockquote Background Color", + "theme-color-blockquote-background_Description" : "", + "theme-color-code-background" : "Code Background Color", + "theme-color-code-background_Description" : "", + "theme-color-code-border" : "Code Border Color", + "theme-color-code-border_Description" : "", + "theme-color-code-color" : "Code Color", + "theme-color-code-color_Description" : "", + "theme-color-content-background-color" : "Content Background Color", + "theme-color-content-background-color_Description" : "", + "theme-color-info-active-font-color" : "Active Info Font Color", + "theme-color-info-active-font-color_Description" : "", + "theme-color-info-font-color" : "Info Font Color", + "theme-color-info-font-color_Description" : "", + "theme-color-input-font-color" : "Input Font Color", + "theme-color-input-font-color_Description" : "", + "theme-color-link-font-color" : "Link Font Color", + "theme-color-link-font-color_Description" : "", + "theme-color-primary-background-color" : "Primary Background Color", + "theme-color-primary-background-color_Description" : "", + "theme-color-primary-font-color" : "Primary Font Color", + "theme-color-primary-font-color_Description" : "", + "theme-color-secondary-background-color" : "Secondary Background Color", + "theme-color-secondary-background-color_Description" : "", + "theme-color-secondary-font-color" : "Secondary Font Color", + "theme-color-secondary-font-color_Description" : "", + "theme-color-smallprint-font-color" : "Small Print Font Color", + "theme-color-smallprint-font-color_Description" : "", + "theme-color-smallprint-hover-color" : "Small Print Hover Color", + "theme-color-smallprint-hover-color_Description" : "", + "theme-color-status-away" : "Away Status Color", + "theme-color-status-away_Description" : "", + "theme-color-status-busy" : "Busy Status Color", + "theme-color-status-busy_Description" : "", + "theme-color-status-offline" : "Offline Status Color", + "theme-color-status-offline_Description" : "", + "theme-color-status-online" : "Online Status Color", + "theme-color-status-online_Description" : "", + "theme-color-tertiary-background-color" : "Tertiary Background Color", + "theme-color-tertiary-background-color_Description" : "", + "theme-color-tertiary-font-color" : "Tertiary Font Color", + "theme-color-tertiary-font-color_Description" : "" +} diff --git a/packages/rocketchat-theme/package.js b/packages/rocketchat-theme/package.js index f061fa72b39c830abd8f9366b476399df7f83770..7a2d5830675ae1e4e3e60cbd4260356b1ed3b00c 100644 --- a/packages/rocketchat-theme/package.js +++ b/packages/rocketchat-theme/package.js @@ -37,6 +37,19 @@ Package.onUse(function(api) { api.addAssets('assets/stylesheets/fontello.css', 'server'); api.addAssets('assets/stylesheets/rtl.less', 'server'); api.addAssets('assets/stylesheets/swipebox.min.css', 'server'); + + // TAPi18n + var _ = Npm.require('underscore'); + var fs = Npm.require('fs'); + api.use('templating', 'client'); + tapi18nFiles = _.compact(_.map(fs.readdirSync('packages/rocketchat-theme/i18n'), function(filename) { + if (fs.statSync('packages/rocketchat-theme/i18n/' + filename).size > 16) { + return 'i18n/' + filename; + } + })); + api.use('tap:i18n@1.6.1', ['client', 'server']); + api.imply('tap:i18n'); + api.addFiles(tapi18nFiles, ['client', 'server']); }); Npm.depends({ diff --git a/packages/rocketchat-ui-account/README.md b/packages/rocketchat-ui-account/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/client/views/account/account.coffee b/packages/rocketchat-ui-account/account/account.coffee similarity index 100% rename from client/views/account/account.coffee rename to packages/rocketchat-ui-account/account/account.coffee diff --git a/client/views/account/account.html b/packages/rocketchat-ui-account/account/account.html similarity index 100% rename from client/views/account/account.html rename to packages/rocketchat-ui-account/account/account.html diff --git a/client/views/account/accountFlex.coffee b/packages/rocketchat-ui-account/account/accountFlex.coffee similarity index 100% rename from client/views/account/accountFlex.coffee rename to packages/rocketchat-ui-account/account/accountFlex.coffee diff --git a/client/views/account/accountFlex.html b/packages/rocketchat-ui-account/account/accountFlex.html similarity index 100% rename from client/views/account/accountFlex.html rename to packages/rocketchat-ui-account/account/accountFlex.html diff --git a/client/views/account/accountPreferences.coffee b/packages/rocketchat-ui-account/account/accountPreferences.coffee similarity index 100% rename from client/views/account/accountPreferences.coffee rename to packages/rocketchat-ui-account/account/accountPreferences.coffee diff --git a/client/views/account/accountPreferences.html b/packages/rocketchat-ui-account/account/accountPreferences.html similarity index 100% rename from client/views/account/accountPreferences.html rename to packages/rocketchat-ui-account/account/accountPreferences.html diff --git a/client/views/account/accountProfile.coffee b/packages/rocketchat-ui-account/account/accountProfile.coffee similarity index 100% rename from client/views/account/accountProfile.coffee rename to packages/rocketchat-ui-account/account/accountProfile.coffee diff --git a/client/views/account/accountProfile.html b/packages/rocketchat-ui-account/account/accountProfile.html similarity index 100% rename from client/views/account/accountProfile.html rename to packages/rocketchat-ui-account/account/accountProfile.html diff --git a/client/views/account/avatar/avatar.coffee b/packages/rocketchat-ui-account/account/avatar/avatar.coffee similarity index 100% rename from client/views/account/avatar/avatar.coffee rename to packages/rocketchat-ui-account/account/avatar/avatar.coffee diff --git a/client/views/account/avatar/avatar.html b/packages/rocketchat-ui-account/account/avatar/avatar.html similarity index 100% rename from client/views/account/avatar/avatar.html rename to packages/rocketchat-ui-account/account/avatar/avatar.html diff --git a/client/views/account/avatar/prompt.coffee b/packages/rocketchat-ui-account/account/avatar/prompt.coffee similarity index 100% rename from client/views/account/avatar/prompt.coffee rename to packages/rocketchat-ui-account/account/avatar/prompt.coffee diff --git a/client/views/account/avatar/prompt.html b/packages/rocketchat-ui-account/account/avatar/prompt.html similarity index 100% rename from client/views/account/avatar/prompt.html rename to packages/rocketchat-ui-account/account/avatar/prompt.html diff --git a/packages/rocketchat-ui-account/package.js b/packages/rocketchat-ui-account/package.js new file mode 100644 index 0000000000000000000000000000000000000000..77b86dc6268700c6db01d19bc64cd4980fade8e7 --- /dev/null +++ b/packages/rocketchat-ui-account/package.js @@ -0,0 +1,39 @@ +Package.describe({ + name: 'rocketchat:ui-account', + version: '0.1.0', + // Brief, one-line summary of the package. + summary: '', + // URL to the Git repository containing the source code for this package. + git: '', + // By default, Meteor will default to using README.md for documentation. + // To avoid submitting documentation, set this field to null. + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.2.1'); + + api.use([ + 'ecmascript', + 'templating', + 'coffeescript', + 'underscore', + 'rocketchat:lib@0.0.1' + ]); + + api.addFiles('account/account.html', 'client'); + api.addFiles('account/accountFlex.html', 'client'); + api.addFiles('account/accountPreferences.html', 'client'); + api.addFiles('account/accountProfile.html', 'client'); + api.addFiles('account/avatar/avatar.html', 'client'); + api.addFiles('account/avatar/prompt.html', 'client'); + + api.addFiles('account/account.coffee', 'client'); + api.addFiles('account/accountFlex.coffee', 'client'); + api.addFiles('account/accountPreferences.coffee', 'client'); + api.addFiles('account/accountProfile.coffee', 'client'); + api.addFiles('account/avatar/avatar.coffee', 'client'); + api.addFiles('account/avatar/prompt.coffee', 'client'); + + // api.addAssets('styles/side-nav.less', 'client'); +}); \ No newline at end of file diff --git a/packages/rocketchat-ui-account/rocketchat-ui-account-tests.js b/packages/rocketchat-ui-account/rocketchat-ui-account-tests.js new file mode 100644 index 0000000000000000000000000000000000000000..c5623d89b9b83281cdedde8f0349f6b945fde691 --- /dev/null +++ b/packages/rocketchat-ui-account/rocketchat-ui-account-tests.js @@ -0,0 +1,5 @@ +// Write your tests here! +// Here is an example. +Tinytest.add('example', function (test) { + test.equal(true, true); +}); diff --git a/packages/rocketchat-ui-account/rocketchat-ui-account.js b/packages/rocketchat-ui-account/rocketchat-ui-account.js new file mode 100644 index 0000000000000000000000000000000000000000..164ddd9eed0377e69b3f6ecc9d5c7b3f425dcdcd --- /dev/null +++ b/packages/rocketchat-ui-account/rocketchat-ui-account.js @@ -0,0 +1 @@ +// Write your package code here! diff --git a/packages/rocketchat-ui-account/styles/account.less b/packages/rocketchat-ui-account/styles/account.less new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/packages/rocketchat-ui-admin/README.md b/packages/rocketchat-ui-admin/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/client/views/admin/admin.coffee b/packages/rocketchat-ui-admin/admin/admin.coffee similarity index 100% rename from client/views/admin/admin.coffee rename to packages/rocketchat-ui-admin/admin/admin.coffee diff --git a/client/views/admin/admin.html b/packages/rocketchat-ui-admin/admin/admin.html similarity index 75% rename from client/views/admin/admin.html rename to packages/rocketchat-ui-admin/admin/admin.html index 2cffc76a600e443a0239e83d9c8a3ef4fa3e327d..868662ba7e76e1535510085742946172c751a275 100644 --- a/client/views/admin/admin.html +++ b/packages/rocketchat-ui-admin/admin/admin.html @@ -12,7 +12,7 @@ {{else}} {{#with group}} <div class="info"> - <h3>{{description}}</h3> + <p class="settings-description">{{description}}</p> </div> {{/with}} <div class="rocket-form"> @@ -33,55 +33,33 @@ {{/if}} {{/if}} {{#each settings}} - {{#if $eq type 'string'}} <div class="input-line double-col"> <label>{{label}}</label> <div> + {{#if $eq type 'string'}} {{#if multiline}} <textarea name="{{_id}}" rows="4" style="height: auto">{{value}}</textarea> {{else}} - <input type="text" name="{{_id}}" value="{{value}}" /> - {{/if}} - {{#if description}} - <small>{{description}}</small> + <input type="text" name="{{_id}}" value="{{value}}" placeholder="{{placeholder}}" /> {{/if}} - </div> - </div> {{/if}} {{#if $eq type 'int'}} - <div class="input-line double-col"> - <label>{{label}}</label> - <div> - <input type="number" name="{{_id}}" value="{{value}}" /> - {{#if description}} - <small>{{description}}</small> - {{/if}} - </div> - </div> + <input type="number" name="{{_id}}" value="{{value}}" placeholder="{{placeholder}}" /> {{/if}} {{#if $eq type 'boolean'}} - <div class="input-line double-col"> - <label>{{label}}</label> - <div> <label><input type="radio" name="{{_id}}" value="1" checked="{{$eq value true}}" /> {{_ "True"}}</label> <label><input type="radio" name="{{_id}}" value="0" checked="{{$eq value false}}" /> {{_ "False"}}</label> - </div> - {{#if description}} - <small>{{description}}</small> - {{/if}} - </div> {{/if}} {{#if $eq type 'color'}} - <div class="input-line double-col"> - <label>{{label}}</label> - <div> <input type="text" class="minicolors" name="{{_id}}" value="{{value}}" /> - {{#if description}} - <small>{{description}}</small> - {{/if}} + {{/if}} + {{#if description}} + <div> + <small class="settings-description">{{{description}}}</small> + </div> + {{/if}} </div> </div> - {{/if}} {{/each}} {{#if section}} diff --git a/client/views/admin/adminFlex.coffee b/packages/rocketchat-ui-admin/admin/adminFlex.coffee similarity index 87% rename from client/views/admin/adminFlex.coffee rename to packages/rocketchat-ui-admin/admin/adminFlex.coffee index 2e28926314792b830ec4cbe60213e4be271cec34..3e664a14bb297b91bd5d2bd5f03fca1227bfab5a 100644 --- a/client/views/admin/adminFlex.coffee +++ b/packages/rocketchat-ui-admin/admin/adminFlex.coffee @@ -3,6 +3,8 @@ Template.adminFlex.helpers return Settings.find({type: 'group'}, { sort: { sort: 1, i18nLabel: 1 } }).fetch() label: -> return TAPi18n.__(@i18nLabel or @_id) + adminBoxOptions: -> + return RocketChat.AdminBox.getOptions() Template.adminFlex.events 'mouseenter header': -> diff --git a/client/views/admin/adminFlex.html b/packages/rocketchat-ui-admin/admin/adminFlex.html similarity index 84% rename from client/views/admin/adminFlex.html rename to packages/rocketchat-ui-admin/admin/adminFlex.html index 27bd9d2c7eccaa226c045ec6000ffa3d878d5f4e..c5c7b917f4d8e7f8d08dccaf8cf63a22e3fbbb8c 100644 --- a/client/views/admin/adminFlex.html +++ b/packages/rocketchat-ui-admin/admin/adminFlex.html @@ -25,6 +25,14 @@ </li> {{/if}} + {{#each adminBoxOptions}} + {{#if permissionGranted}} + <li> + <a href="{{pathFor href}}" class="admin-link">{{label}}</a> + </li> + {{/if}} + {{/each}} + <h3 class="add-room"> {{_ "Settings"}} </h3> diff --git a/client/views/admin/adminStatistics.coffee b/packages/rocketchat-ui-admin/admin/adminStatistics.coffee similarity index 100% rename from client/views/admin/adminStatistics.coffee rename to packages/rocketchat-ui-admin/admin/adminStatistics.coffee diff --git a/client/views/admin/adminStatistics.html b/packages/rocketchat-ui-admin/admin/adminStatistics.html similarity index 100% rename from client/views/admin/adminStatistics.html rename to packages/rocketchat-ui-admin/admin/adminStatistics.html diff --git a/client/views/admin/rooms/adminRoomInfo.coffee b/packages/rocketchat-ui-admin/admin/rooms/adminRoomInfo.coffee similarity index 100% rename from client/views/admin/rooms/adminRoomInfo.coffee rename to packages/rocketchat-ui-admin/admin/rooms/adminRoomInfo.coffee diff --git a/client/views/admin/rooms/adminRoomInfo.html b/packages/rocketchat-ui-admin/admin/rooms/adminRoomInfo.html similarity index 100% rename from client/views/admin/rooms/adminRoomInfo.html rename to packages/rocketchat-ui-admin/admin/rooms/adminRoomInfo.html diff --git a/client/views/admin/rooms/adminRooms.coffee b/packages/rocketchat-ui-admin/admin/rooms/adminRooms.coffee similarity index 100% rename from client/views/admin/rooms/adminRooms.coffee rename to packages/rocketchat-ui-admin/admin/rooms/adminRooms.coffee diff --git a/client/views/admin/rooms/adminRooms.html b/packages/rocketchat-ui-admin/admin/rooms/adminRooms.html similarity index 98% rename from client/views/admin/rooms/adminRooms.html rename to packages/rocketchat-ui-admin/admin/rooms/adminRooms.html index 08756aff8422df2de00f7cb63efef866f2e72a5d..cc39896ec68f55b78b78aeb5c7abf753ee214357 100644 --- a/client/views/admin/rooms/adminRooms.html +++ b/packages/rocketchat-ui-admin/admin/rooms/adminRooms.html @@ -17,8 +17,8 @@ {{#unless isReady}}<i class="icon-spin4"></i>{{/unless}} </div> <input type="checkbox" name="room-type" value="c"> {{_ "Channels"}} - <input type="checkbox" name="room-type" value="d"> {{_ "Direct Messages"}} - <input type="checkbox" name="room-type" value="p"> {{_ "Private Groups"}} + <input type="checkbox" name="room-type" value="d"> {{_ "Direct_Messages"}} + <input type="checkbox" name="room-type" value="p"> {{_ "Private_Groups"}} </form> <div class="results"> {{{_ "Showing_results" roomCount}}} diff --git a/client/views/admin/users/adminInviteUser.coffee b/packages/rocketchat-ui-admin/admin/users/adminInviteUser.coffee similarity index 100% rename from client/views/admin/users/adminInviteUser.coffee rename to packages/rocketchat-ui-admin/admin/users/adminInviteUser.coffee diff --git a/client/views/admin/users/adminInviteUser.html b/packages/rocketchat-ui-admin/admin/users/adminInviteUser.html similarity index 100% rename from client/views/admin/users/adminInviteUser.html rename to packages/rocketchat-ui-admin/admin/users/adminInviteUser.html diff --git a/client/views/admin/users/adminUserChannels.coffee b/packages/rocketchat-ui-admin/admin/users/adminUserChannels.coffee similarity index 100% rename from client/views/admin/users/adminUserChannels.coffee rename to packages/rocketchat-ui-admin/admin/users/adminUserChannels.coffee diff --git a/client/views/admin/users/adminUserChannels.html b/packages/rocketchat-ui-admin/admin/users/adminUserChannels.html similarity index 100% rename from client/views/admin/users/adminUserChannels.html rename to packages/rocketchat-ui-admin/admin/users/adminUserChannels.html diff --git a/client/views/admin/users/adminUserEdit.coffee b/packages/rocketchat-ui-admin/admin/users/adminUserEdit.coffee similarity index 100% rename from client/views/admin/users/adminUserEdit.coffee rename to packages/rocketchat-ui-admin/admin/users/adminUserEdit.coffee diff --git a/client/views/admin/users/adminUserEdit.html b/packages/rocketchat-ui-admin/admin/users/adminUserEdit.html similarity index 100% rename from client/views/admin/users/adminUserEdit.html rename to packages/rocketchat-ui-admin/admin/users/adminUserEdit.html diff --git a/client/views/admin/users/adminUserInfo.coffee b/packages/rocketchat-ui-admin/admin/users/adminUserInfo.coffee similarity index 100% rename from client/views/admin/users/adminUserInfo.coffee rename to packages/rocketchat-ui-admin/admin/users/adminUserInfo.coffee diff --git a/client/views/admin/users/adminUserInfo.html b/packages/rocketchat-ui-admin/admin/users/adminUserInfo.html similarity index 100% rename from client/views/admin/users/adminUserInfo.html rename to packages/rocketchat-ui-admin/admin/users/adminUserInfo.html diff --git a/client/views/admin/users/adminUsers.coffee b/packages/rocketchat-ui-admin/admin/users/adminUsers.coffee similarity index 100% rename from client/views/admin/users/adminUsers.coffee rename to packages/rocketchat-ui-admin/admin/users/adminUsers.coffee diff --git a/client/views/admin/users/adminUsers.html b/packages/rocketchat-ui-admin/admin/users/adminUsers.html similarity index 100% rename from client/views/admin/users/adminUsers.html rename to packages/rocketchat-ui-admin/admin/users/adminUsers.html diff --git a/packages/rocketchat-ui-admin/package.js b/packages/rocketchat-ui-admin/package.js new file mode 100644 index 0000000000000000000000000000000000000000..bebed82fd631dcbe5bf009830b426ab110f8d8c9 --- /dev/null +++ b/packages/rocketchat-ui-admin/package.js @@ -0,0 +1,54 @@ +Package.describe({ + name: 'rocketchat:ui-admin', + version: '0.1.0', + // Brief, one-line summary of the package. + summary: '', + // URL to the Git repository containing the source code for this package. + git: '', + // By default, Meteor will default to using README.md for documentation. + // To avoid submitting documentation, set this field to null. + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.2.1'); + + api.use([ + 'ecmascript', + 'templating', + 'coffeescript', + 'underscore', + 'rocketchat:lib@0.0.1' + ]); + + // template files + api.addFiles('admin/admin.html', 'client'); + api.addFiles('admin/adminFlex.html', 'client'); + api.addFiles('admin/adminStatistics.html', 'client'); + + api.addFiles('admin/rooms/adminRoomInfo.html', 'client'); + api.addFiles('admin/rooms/adminRooms.html', 'client'); + + api.addFiles('admin/users/adminInviteUser.html', 'client'); + api.addFiles('admin/users/adminUserChannels.html', 'client'); + api.addFiles('admin/users/adminUserEdit.html', 'client'); + api.addFiles('admin/users/adminUserInfo.html', 'client'); + api.addFiles('admin/users/adminUsers.html', 'client'); + + // coffee files + api.addFiles('admin/admin.coffee', 'client'); + api.addFiles('admin/adminFlex.coffee', 'client'); + api.addFiles('admin/adminStatistics.coffee', 'client'); + + api.addFiles('admin/rooms/adminRoomInfo.coffee', 'client'); + api.addFiles('admin/rooms/adminRooms.coffee', 'client'); + + api.addFiles('admin/users/adminInviteUser.coffee', 'client'); + api.addFiles('admin/users/adminUserChannels.coffee', 'client'); + api.addFiles('admin/users/adminUserEdit.coffee', 'client'); + api.addFiles('admin/users/adminUserInfo.coffee', 'client'); + api.addFiles('admin/users/adminUsers.coffee', 'client'); + + + // api.addAssets('styles/side-nav.less', 'client'); +}); diff --git a/packages/rocketchat-ui-admin/rocketchat-ui-admin-tests.js b/packages/rocketchat-ui-admin/rocketchat-ui-admin-tests.js new file mode 100644 index 0000000000000000000000000000000000000000..c5623d89b9b83281cdedde8f0349f6b945fde691 --- /dev/null +++ b/packages/rocketchat-ui-admin/rocketchat-ui-admin-tests.js @@ -0,0 +1,5 @@ +// Write your tests here! +// Here is an example. +Tinytest.add('example', function (test) { + test.equal(true, true); +}); diff --git a/packages/rocketchat-ui-admin/rocketchat-ui-admin.js b/packages/rocketchat-ui-admin/rocketchat-ui-admin.js new file mode 100644 index 0000000000000000000000000000000000000000..164ddd9eed0377e69b3f6ecc9d5c7b3f425dcdcd --- /dev/null +++ b/packages/rocketchat-ui-admin/rocketchat-ui-admin.js @@ -0,0 +1 @@ +// Write your package code here! diff --git a/packages/rocketchat-ui-flextab/README.md b/packages/rocketchat-ui-flextab/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/client/views/app/flexTabBar.coffee b/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.coffee similarity index 100% rename from client/views/app/flexTabBar.coffee rename to packages/rocketchat-ui-flextab/flex-tab/flexTabBar.coffee diff --git a/client/views/app/flexTabBar.html b/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.html similarity index 100% rename from client/views/app/flexTabBar.html rename to packages/rocketchat-ui-flextab/flex-tab/flexTabBar.html diff --git a/client/views/app/tabBar/membersList.coffee b/packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.coffee similarity index 100% rename from client/views/app/tabBar/membersList.coffee rename to packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.coffee diff --git a/client/views/app/tabBar/membersList.html b/packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.html similarity index 100% rename from client/views/app/tabBar/membersList.html rename to packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.html diff --git a/client/views/app/tabBar/messageSearch.coffee b/packages/rocketchat-ui-flextab/flex-tab/tabs/messageSearch.coffee similarity index 100% rename from client/views/app/tabBar/messageSearch.coffee rename to packages/rocketchat-ui-flextab/flex-tab/tabs/messageSearch.coffee diff --git a/client/views/app/tabBar/messageSearch.html b/packages/rocketchat-ui-flextab/flex-tab/tabs/messageSearch.html similarity index 100% rename from client/views/app/tabBar/messageSearch.html rename to packages/rocketchat-ui-flextab/flex-tab/tabs/messageSearch.html diff --git a/client/views/app/tabBar/uploadedFilesList.coffee b/packages/rocketchat-ui-flextab/flex-tab/tabs/uploadedFilesList.coffee similarity index 100% rename from client/views/app/tabBar/uploadedFilesList.coffee rename to packages/rocketchat-ui-flextab/flex-tab/tabs/uploadedFilesList.coffee diff --git a/client/views/app/tabBar/uploadedFilesList.html b/packages/rocketchat-ui-flextab/flex-tab/tabs/uploadedFilesList.html similarity index 100% rename from client/views/app/tabBar/uploadedFilesList.html rename to packages/rocketchat-ui-flextab/flex-tab/tabs/uploadedFilesList.html diff --git a/client/views/app/userInfo.coffee b/packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.coffee similarity index 100% rename from client/views/app/userInfo.coffee rename to packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.coffee diff --git a/client/views/app/userInfo.html b/packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.html similarity index 100% rename from client/views/app/userInfo.html rename to packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.html diff --git a/packages/rocketchat-ui-flextab/package.js b/packages/rocketchat-ui-flextab/package.js new file mode 100644 index 0000000000000000000000000000000000000000..e508f10d508e852834862fd3156a6068a28d9e21 --- /dev/null +++ b/packages/rocketchat-ui-flextab/package.js @@ -0,0 +1,37 @@ +Package.describe({ + name: 'rocketchat:ui-flextab', + version: '0.1.0', + // Brief, one-line summary of the package. + summary: '', + // URL to the Git repository containing the source code for this package. + git: '', + // By default, Meteor will default to using README.md for documentation. + // To avoid submitting documentation, set this field to null. + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.2.1'); + + api.use([ + 'mongo', + 'ecmascript', + 'templating', + 'coffeescript', + 'underscore', + 'rocketchat:lib' + ]); + + api.addFiles('flex-tab/flexTabBar.html', 'client'); + api.addFiles('flex-tab/tabs/membersList.html', 'client'); + api.addFiles('flex-tab/tabs/messageSearch.html', 'client'); + api.addFiles('flex-tab/tabs/uploadedFilesList.html', 'client'); + api.addFiles('flex-tab/tabs/userInfo.html', 'client'); + + api.addFiles('flex-tab/flexTabBar.coffee', 'client'); + api.addFiles('flex-tab/tabs/membersList.coffee', 'client'); + api.addFiles('flex-tab/tabs/messageSearch.coffee', 'client'); + api.addFiles('flex-tab/tabs/uploadedFilesList.coffee', 'client'); + api.addFiles('flex-tab/tabs/userInfo.coffee', 'client'); + +}); diff --git a/packages/rocketchat-ui-login/README.md b/packages/rocketchat-ui-login/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/client/views/login/footer.coffee b/packages/rocketchat-ui-login/login/footer.coffee similarity index 100% rename from client/views/login/footer.coffee rename to packages/rocketchat-ui-login/login/footer.coffee diff --git a/client/views/login/footer.html b/packages/rocketchat-ui-login/login/footer.html similarity index 100% rename from client/views/login/footer.html rename to packages/rocketchat-ui-login/login/footer.html diff --git a/client/views/login/form.coffee b/packages/rocketchat-ui-login/login/form.coffee similarity index 95% rename from client/views/login/form.coffee rename to packages/rocketchat-ui-login/login/form.coffee index c1a78915ea178c74255b29f97510129dfa929b64..face5c303d9b707fcbd261def0e23146320e9167 100644 --- a/client/views/login/form.coffee +++ b/packages/rocketchat-ui-login/login/form.coffee @@ -2,6 +2,9 @@ Template.loginForm.helpers userName: -> return Meteor.user()?.username + namePlaceholder: -> + return if RocketChat.settings.get 'Accounts_RequireNameForSignUp' then t('Name') else t('Name_optional') + showName: -> return 'hidden' unless Template.instance().state.get() is 'register' @@ -129,7 +132,7 @@ Template.loginForm.onCreated -> validationObj['pass'] = t('Invalid_pass') if instance.state.get() is 'register' - unless formObj['name'] + if RocketChat.settings.get 'Accounts_RequireNameForSignUp' and not formObj['name'] validationObj['name'] = t('Invalid_name') if formObj['confirm-pass'] isnt formObj['pass'] validationObj['confirm-pass'] = t('Invalid_confirm_pass') diff --git a/client/views/login/form.html b/packages/rocketchat-ui-login/login/form.html similarity index 95% rename from client/views/login/form.html rename to packages/rocketchat-ui-login/login/form.html index ee95ca7ca6dd9eb8b622e01f759cf866c99c3f9b..c1247d08a256f7ad01e0db0119c862d30cdee33a 100644 --- a/client/views/login/form.html +++ b/packages/rocketchat-ui-login/login/form.html @@ -15,7 +15,7 @@ {{/if}} <div class="fields"> <div class='input-text active {{showName}}'> - <input type="text" name='name' placeholder='{{_ "Name"}}' dir="auto" /> + <input type="text" name='name' placeholder='{{namePlaceholder}}' dir="auto" /> </div> <div class='input-text active {{showEmailOrUsername}}'> <input type="text" name='emailOrUsername' placeholder='{{_ "Email_or_username"}}' autocapitalize="off" autocorrect="off" /> diff --git a/client/views/login/header.coffee b/packages/rocketchat-ui-login/login/header.coffee similarity index 100% rename from client/views/login/header.coffee rename to packages/rocketchat-ui-login/login/header.coffee diff --git a/client/views/login/header.html b/packages/rocketchat-ui-login/login/header.html similarity index 100% rename from client/views/login/header.html rename to packages/rocketchat-ui-login/login/header.html diff --git a/client/views/login/intro.html b/packages/rocketchat-ui-login/login/intro.html similarity index 100% rename from client/views/login/intro.html rename to packages/rocketchat-ui-login/login/intro.html diff --git a/client/views/login/layout.html b/packages/rocketchat-ui-login/login/layout.html similarity index 100% rename from client/views/login/layout.html rename to packages/rocketchat-ui-login/login/layout.html diff --git a/client/views/login/services.coffee b/packages/rocketchat-ui-login/login/services.coffee similarity index 100% rename from client/views/login/services.coffee rename to packages/rocketchat-ui-login/login/services.coffee diff --git a/client/views/login/services.html b/packages/rocketchat-ui-login/login/services.html similarity index 100% rename from client/views/login/services.html rename to packages/rocketchat-ui-login/login/services.html diff --git a/packages/rocketchat-ui-login/login/social.coffee b/packages/rocketchat-ui-login/login/social.coffee new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/client/views/login/social.html b/packages/rocketchat-ui-login/login/social.html similarity index 100% rename from client/views/login/social.html rename to packages/rocketchat-ui-login/login/social.html diff --git a/packages/rocketchat-ui-login/package.js b/packages/rocketchat-ui-login/package.js new file mode 100644 index 0000000000000000000000000000000000000000..5b2c11042cbc43f79ad3d0a646a1b166440571df --- /dev/null +++ b/packages/rocketchat-ui-login/package.js @@ -0,0 +1,40 @@ +Package.describe({ + name: 'rocketchat:ui-login', + version: '0.1.0', + // Brief, one-line summary of the package. + summary: '', + // URL to the Git repository containing the source code for this package. + git: '', + // By default, Meteor will default to using README.md for documentation. + // To avoid submitting documentation, set this field to null. + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.2.1'); + api.use([ + 'ecmascript', + 'templating', + 'coffeescript', + 'underscore', + 'rocketchat:lib@0.0.1' + ]); + + api.addFiles('login/footer.html', 'client'); + api.addFiles('login/form.html', 'client'); + api.addFiles('login/header.html', 'client'); + api.addFiles('login/intro.html', 'client'); + api.addFiles('login/layout.html', 'client'); + api.addFiles('login/services.html', 'client'); + api.addFiles('login/social.html', 'client'); + + api.addFiles('username/layout.html', 'client'); + api.addFiles('username/username.html', 'client'); + + api.addFiles('login/footer.coffee', 'client'); + api.addFiles('login/form.coffee', 'client'); + api.addFiles('login/header.coffee', 'client'); + api.addFiles('login/services.coffee', 'client'); + api.addFiles('login/social.coffee', 'client'); + api.addFiles('username/username.coffee', 'client'); +}); \ No newline at end of file diff --git a/client/views/username/layout.html b/packages/rocketchat-ui-login/username/layout.html similarity index 100% rename from client/views/username/layout.html rename to packages/rocketchat-ui-login/username/layout.html diff --git a/client/views/username/username.coffee b/packages/rocketchat-ui-login/username/username.coffee similarity index 100% rename from client/views/username/username.coffee rename to packages/rocketchat-ui-login/username/username.coffee diff --git a/client/views/username/username.html b/packages/rocketchat-ui-login/username/username.html similarity index 100% rename from client/views/username/username.html rename to packages/rocketchat-ui-login/username/username.html diff --git a/packages/rocketchat-ui-master/README.md b/packages/rocketchat-ui-master/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/client/views/error.html b/packages/rocketchat-ui-master/master/error.html similarity index 100% rename from client/views/error.html rename to packages/rocketchat-ui-master/master/error.html diff --git a/client/views/loading.html b/packages/rocketchat-ui-master/master/loading.html similarity index 100% rename from client/views/loading.html rename to packages/rocketchat-ui-master/master/loading.html diff --git a/client/views/main.coffee b/packages/rocketchat-ui-master/master/main.coffee similarity index 99% rename from client/views/main.coffee rename to packages/rocketchat-ui-master/master/main.coffee index 19264e6724166a044005a370c96debb0b29d49ce..e43df650fbdf5df92f237ee2c97583651c2893a0 100644 --- a/client/views/main.coffee +++ b/packages/rocketchat-ui-master/master/main.coffee @@ -10,6 +10,7 @@ Template.body.onRendered -> unread = Session.get('unread') if e.keyCode is 27 and e.shiftKey is true and unread? and unread isnt '' + e.preventDefault() e.stopPropagation() swal title: t('Clear_all_unreads_question') diff --git a/client/views/main.html b/packages/rocketchat-ui-master/master/main.html similarity index 100% rename from client/views/main.html rename to packages/rocketchat-ui-master/master/main.html diff --git a/packages/rocketchat-ui-master/package.js b/packages/rocketchat-ui-master/package.js new file mode 100644 index 0000000000000000000000000000000000000000..280af721a3fa1a369049c5fad2e11ff27d75a13b --- /dev/null +++ b/packages/rocketchat-ui-master/package.js @@ -0,0 +1,30 @@ +Package.describe({ + name: 'rocketchat:ui-master', + version: '0.1.0', + // Brief, one-line summary of the package. + summary: '', + // URL to the Git repository containing the source code for this package. + git: '', + // By default, Meteor will default to using README.md for documentation. + // To avoid submitting documentation, set this field to null. + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.2.1'); + + api.use([ + 'mongo', + 'ecmascript', + 'templating', + 'coffeescript', + 'underscore', + 'rocketchat:lib' + ]); + + api.addFiles('master/main.html', 'client'); + api.addFiles('master/loading.html', 'client'); + api.addFiles('master/error.html', 'client'); + + api.addFiles('master/main.coffee', 'client'); +}); \ No newline at end of file diff --git a/packages/rocketchat-ui-message/README.md b/packages/rocketchat-ui-message/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/client/views/app/message.coffee b/packages/rocketchat-ui-message/message/message.coffee similarity index 60% rename from client/views/app/message.coffee rename to packages/rocketchat-ui-message/message/message.coffee index 27151ef7fe32022c0460c821c5e010c04c53f8bd..2792c4cf8cb7445a57a501193e8116c0f63330a8 100644 --- a/client/views/app/message.coffee +++ b/packages/rocketchat-ui-message/message/message.coffee @@ -1,53 +1,36 @@ Template.message.helpers actions: -> return RocketChat.MessageAction.getButtons(this) - own: -> return 'own' if this.u?._id is Meteor.userId() - chatops: -> return 'chatops-message' if this.u?.username is RocketChat.settings.get('Chatops_Username') - time: -> return moment(this.ts).format('HH:mm') - date: -> return moment(this.ts).format('LL') - isTemp: -> if @temp is true return 'temp' - return - body: -> - switch this.t - when 'r' then t('Room_name_changed', { room_name: this.msg, user_by: this.u.username }) - when 'au' then t('User_added_by', { user_added: this.msg, user_by: this.u.username }) - when 'ru' then t('User_removed_by', { user_removed: this.msg, user_by: this.u.username }) - when 'ul' then t('User_left', { user_left: this.u.username }) - when 'nu' then t('User_added', { user_added: this.u.username }) - when 'uj' then t('User_joined_channel', { user: this.u.username }) - when 'wm' then t('Welcome', { user: this.u.username }) - when 'rm' then t('Message_removed', { user: this.u.username }) - when 'rtc' then RocketChat.callbacks.run 'renderRtcMessage', this - else - if this.u?.username is RocketChat.settings.get('Chatops_Username') - this.html = this.msg - message = RocketChat.callbacks.run 'renderMentions', this - # console.log JSON.stringify message - return this.html - this.html = this.msg - if _.trim(this.html) isnt '' - this.html = _.escapeHTML this.html - message = RocketChat.callbacks.run 'renderMessage', this - # console.log JSON.stringify message - this.html = message.html.replace /\n/gm, '<br/>' - return this.html + return Template.instance().body system: -> - return 'system' if this.t in ['s', 'p', 'f', 'r', 'au', 'ru', 'ul', 'nu', 'wm', 'uj', 'rm'] + if RocketChat.MessageTypes.isSystemMessage(this) + return 'system' + edited: -> - return @ets and @t not in ['s', 'p', 'f', 'r', 'au', 'ru', 'ul', 'nu', 'wm', 'uj', 'rm'] + return Template.instance().wasEdited + + editTime: -> + if Template.instance().wasEdited + return moment(@editedAt).format('LL hh:mma') #TODO profile pref for 12hr/24hr clock? + editedBy: -> + return "" unless Template.instance().wasEdited + # try to return the username of the editor, + # otherwise a special "?" character that will be + # rendered as a special avatar + return @editedBy?.username or "?" pinned: -> return this.pinned canEdit: -> @@ -82,6 +65,45 @@ Template.message.helpers else if @label return @label + hasOembed: -> + return false unless this.urls?.length > 0 and Template.oembedBaseWidget? and RocketChat.settings.get 'API_Embed' + + return false unless this.u?.username not in RocketChat.settings.get('API_EmbedDisabledFor')?.split(',') + + return true + +Template.message.onCreated -> + msg = Template.currentData() + + @wasEdited = msg.editedAt? and not RocketChat.MessageTypes.isSystemMessage(msg) + + @body = do -> + messageType = RocketChat.MessageTypes.getType(msg) + if messageType?.render? + return messageType.render(message) + else if messageType?.template? + # render template + else if messageType?.message? + if messageType.data?(msg)? + return TAPi18n.__(messageType.message, messageType.data(msg)) + else + return TAPi18n.__(messageType.message) + else + if msg.u?.username is RocketChat.settings.get('Chatops_Username') + msg.html = msg.msg + message = RocketChat.callbacks.run 'renderMentions', msg + # console.log JSON.stringify message + return msg.html + + msg.html = msg.msg + if _.trim(msg.html) isnt '' + msg.html = _.escapeHTML msg.html + + message = RocketChat.callbacks.run 'renderMessage', msg + # console.log JSON.stringify message + msg.html = message.html.replace /\n/gm, '<br/>' + return msg.html + Template.message.onViewRendered = (context) -> view = this this._domrange.onAttached (domRange) -> @@ -102,21 +124,10 @@ Template.message.onViewRendered = (context) -> if lastNode.nextElementSibling?.dataset?.username isnt lastNode.dataset.username $(lastNode.nextElementSibling).removeClass('sequential') - ul = lastNode.parentElement - wrapper = ul.parentElement - - if context.urls?.length > 0 and Template.oembedBaseWidget? and RocketChat.settings.get 'API_Embed' - if context.u?.username not in RocketChat.settings.get('API_EmbedDisabledFor')?.split(',') - for item in context.urls - do (item) -> - urlNode = lastNode.querySelector('.body a[href="'+item.url+'"]') - if urlNode? - $(lastNode.querySelector('.body')).append Blaze.toHTMLWithData Template.oembedBaseWidget, item - if not lastNode.nextElementSibling? if lastNode.classList.contains('own') is true view.parentView.parentView.parentView.parentView.parentView.templateInstance?().atBottom = true else if view.parentView.parentView.parentView.parentView.parentView.templateInstance?().atBottom isnt true - newMessage = view.parentView.parentView.parentView.parentView.parentView.templateInstance().find(".new-message") + newMessage = view.parentView.parentView.parentView.parentView.parentView.templateInstance?()?.find(".new-message") newMessage?.className = "new-message" diff --git a/client/views/app/message.html b/packages/rocketchat-ui-message/message/message.html similarity index 68% rename from client/views/app/message.html rename to packages/rocketchat-ui-message/message/message.html index 6dc5bfa222b85147c1a5a773305615080a67302d..3e1767267ba36e758ebf7126870b248ae42e4445 100644 --- a/client/views/app/message.html +++ b/packages/rocketchat-ui-message/message/message.html @@ -3,9 +3,21 @@ <a class="thumb user-card-message" href="#" data-username="{{u.username}}" tabindex="1">{{> avatar username=u.username}}</a> <a class="user user-card-message" href="#" data-username="{{u.username}}" tabindex="1">{{u.username}}</a> <span class="info"> - <span class="time">{{time}}</span> {{#if edited}} - <span class="edited">({{_ "edited"}})</span> + <span + title='{{_ "edited"}} at {{editTime}} {{_ "by"}} {{editedBy}}' + class="time"> + {{time}} + </span> + <span class="edited" title='{{_ "edited"}} at {{editTime}} {{_ "by"}} {{editedBy}}'> + <i class="icon-edit"></i> + {{_ "by"}} + <a class="thumb thumb-small user-card-message" href="#" data-username="{{editedBy}}" tabindex="1"> + {{> avatar username=editedBy}} + </a> + </span> + {{else}} + <span class="time">{{time}}</span> {{/if}} {{#if private}} <span class="private">{{_ "Only_you_can_see_this_message"}}</span> @@ -24,9 +36,13 @@ </div> {{/if}} </span> - <div class="body" dir="auto"> {{{body}}} + {{#if hasOembed}} + {{#each urls}} + {{> oembedBaseWidget}} + {{/each}} + {{/if}} </div> </li> </template> diff --git a/packages/rocketchat-ui-message/message/messageBox.coffee b/packages/rocketchat-ui-message/message/messageBox.coffee new file mode 100644 index 0000000000000000000000000000000000000000..815aca534b8981316ba15aef510d4b97d5fbe7b7 --- /dev/null +++ b/packages/rocketchat-ui-message/message/messageBox.coffee @@ -0,0 +1,135 @@ +isSubscribed = (_id) -> + return ChatSubscription.find({ rid: _id }).count() > 0 + +Template.messageBox.helpers + roomName: -> + roomData = Session.get('roomData' + this._id) + return '' unless roomData + + if roomData.t is 'd' + return ChatSubscription.findOne({ rid: this._id }, { fields: { name: 1 } })?.name + else + return roomData.name + showMarkdown: -> + return RocketChat.Markdown + showFormattingTips: -> + return RocketChat.settings.get('Message_ShowFormattingTips') and (RocketChat.Markdown or RocketChat.Highlight) + canJoin: -> + return !! ChatRoom.findOne { _id: @_id, t: 'c' } + subscribed: -> + return isSubscribed(this._id) + getPopupConfig: -> + template = Template.instance() + return { + getInput: -> + return template.find('.input-message') + } + canRecordAudio: -> + wavRegex = /audio\/wav|audio\/\*/i + wavEnabled = RocketChat.settings.get("FileUpload_MediaTypeWhiteList").match(wavRegex) + return RocketChat.settings.get('Message_AudioRecorderEnabled') and (navigator.getUserMedia? or navigator.webkitGetUserMedia?) and wavEnabled and RocketChat.settings.get('FileUpload_Enabled') + usersTyping: -> + users = MsgTyping.get @_id + if users.length is 0 + return + if users.length is 1 + return { + multi: false + selfTyping: MsgTyping.selfTyping.get() + users: users[0] + } + # usernames = _.map messages, (message) -> return message.u.username + last = users.pop() + if users.length > 4 + last = t('others') + # else + usernames = users.join(', ') + usernames = [usernames, last] + return { + multi: true + selfTyping: MsgTyping.selfTyping.get() + users: usernames.join " #{t 'and'} " + } + +Template.messageBox.events + 'click .join': (event) -> + event.stopPropagation() + event.preventDefault() + Meteor.call 'joinRoom', @_id + + 'focus .input-message': (event) -> + KonchatNotification.removeRoomNotification @_id + + 'keyup .input-message': (event) -> + chatMessages[Session.get('openedRoom')].keyup(@_id, event, Template.instance()) + + 'paste .input-message': (e) -> + if not e.originalEvent.clipboardData? + return + + items = e.originalEvent.clipboardData.items + files = [] + for item in items + if item.kind is 'file' and item.type.indexOf('image/') isnt -1 + e.preventDefault() + files.push + file: item.getAsFile() + name: 'Clipboard' + + if files.length > 0 + fileUpload files + + 'keydown .input-message': (event) -> + chatMessages[Session.get('openedRoom')].keydown(@_id, event, Template.instance()) + + 'click .message-form .icon-paper-plane': (event) -> + input = $(event.currentTarget).siblings("textarea") + chatMessages[Session.get('openedRoom')].send(this._id, input.get(0)) + event.preventDefault() + event.stopPropagation() + input.focus() + input.get(0).updateAutogrow() + + "click .editing-commands-cancel > a": (e) -> + chatMessages[Session.get('openedRoom')].clearEditing() + + "click .editing-commands-save > a": (e) -> + chatMessages[Session.get('openedRoom')].send(@_id, chatMessages.input) + + + + 'change .message-form input[type=file]': (event, template) -> + e = event.originalEvent or event + files = e.target.files + if not files or files.length is 0 + files = e.dataTransfer?.files or [] + + filesToUpload = [] + for file in files + filesToUpload.push + file: file + name: file.name + + fileUpload filesToUpload + + 'click .message-form .mic': (e, t) -> + console.log window.AudioRecorder + AudioRecorder.start -> + t.$('.stop-mic').removeClass('hidden') + t.$('.mic').addClass('hidden') + + 'click .message-form .stop-mic': (e, t) -> + AudioRecorder.stop (blob) -> + fileUpload [{ + file: blob + type: 'audio' + name: 'Audio record' + }] + + t.$('.stop-mic').addClass('hidden') + t.$('.mic').removeClass('hidden') + +Template.messageBox.onRendered -> + # unless window.chatMessages[Session.get('openedRoom')] + # window.chatMessages[Session.get('openedRoom')] = new ChatMessages + # this.chatMessages.init(this.firstNode) \ No newline at end of file diff --git a/packages/rocketchat-ui-message/message/messageBox.html b/packages/rocketchat-ui-message/message/messageBox.html new file mode 100644 index 0000000000000000000000000000000000000000..3b1113685e9397c57d1c01c0dfd927f2353fcbc4 --- /dev/null +++ b/packages/rocketchat-ui-message/message/messageBox.html @@ -0,0 +1,72 @@ +<template name="messageBox"> + {{#if subscribed}} + <form class="message-form" method="post" action="/"> + <div style="display: flex"> + <div class="file"> + <i class="octicon octicon-cloud-upload file"></i> + <input type="file" accept="{{fileUploadAllowedMediaTypes}}"> + </div> + <div class="input-message-container"> + {{> messagePopupConfig getPopupConfig}} + <textarea dir="auto" name="msg" maxlength="{{maxMessageLength}}" class="input-message autogrow-short" placeholder="{{_ 'Message'}}"></textarea> + </div> + + {{#if canRecordAudio}} + <div class="mic"> + <i class="icon-mic" aria-label="{{_ "Record"}}"></i> + </div> + <div class="stop-mic hidden"> + <i class="icon-stop" aria-label="{{_ "Stop_Recording"}}"></i> + </div> + {{/if}} + </div> + <div class="users-typing"> + {{#with usersTyping}} + <strong>{{users}}</strong> + {{#if multi}} + {{#if selfTyping}} + {{_ "are_also_typing"}} + {{else}} + {{_ "are_typing"}} + {{/if}} + {{else}} + {{#if selfTyping}} + {{_ "is_also_typing" context="male"}} + {{else}} + {{_ "is_typing" context="male"}} + {{/if}} + {{/if}} + {{/with}} + </div> + + {{#if showFormattingTips}} + <div class="formatting-tips" aria-hidden="true" dir="auto"> + {{#if showMarkdown}} + <b>*{{_ "bold"}}*</b> + <i>_{{_ "italics"}}_</i> + <span>~<strike>{{_ "strike"}}</strike>~</span> + <code class="inline">`{{_ "inline_code"}}`</code> + {{/if}} + {{#if showHighlight}} + <code class="inline"><span class="hidden-br"><br></span>```<span class="hidden-br"><br></span><i class="icon-level-down"></i>{{_ "multi"}}<span class="hidden-br"><br></span><i class="icon-level-down"></i>{{_ "line"}}<span class="hidden-br"><br></span><i class="icon-level-down"></i>```</code> + {{/if}} + {{#if showMarkdown}} + <q><span class="hidden-br"><br></span>>{{_ "quote"}}</q> + {{/if}} + + </div> + {{/if}} + <div class="editing-commands" aria-hidden="true" dir="auto"> + <div class="editing-commands-cancel">{{_ 'Esc_to'}} <a href="">{{_ 'Cancel'}}</a></div> + <div class="editing-commands-save">{{_ 'Enter_to'}} <a href="">{{_ 'Save_changes'}}</a></div> + </div> + </form> + {{else}} + {{#if canJoin}} + <div> + {{{_ "you_are_in_preview_mode_of" room_name=roomName}}} + <button class="button join"><span><i class="icon-login"></i> {{_ "join"}}</span></button> + </div> + {{/if}} + {{/if}} +</template> \ No newline at end of file diff --git a/client/views/app/messagePopup.coffee b/packages/rocketchat-ui-message/message/popup/messagePopup.coffee similarity index 100% rename from client/views/app/messagePopup.coffee rename to packages/rocketchat-ui-message/message/popup/messagePopup.coffee diff --git a/client/views/app/messagePopup.html b/packages/rocketchat-ui-message/message/popup/messagePopup.html similarity index 100% rename from client/views/app/messagePopup.html rename to packages/rocketchat-ui-message/message/popup/messagePopup.html diff --git a/client/views/app/messagePopupChannel.html b/packages/rocketchat-ui-message/message/popup/messagePopupChannel.html similarity index 100% rename from client/views/app/messagePopupChannel.html rename to packages/rocketchat-ui-message/message/popup/messagePopupChannel.html diff --git a/client/views/app/messagePopupConfig.coffee b/packages/rocketchat-ui-message/message/popup/messagePopupConfig.coffee similarity index 100% rename from client/views/app/messagePopupConfig.coffee rename to packages/rocketchat-ui-message/message/popup/messagePopupConfig.coffee diff --git a/client/views/app/messagePopupConfig.html b/packages/rocketchat-ui-message/message/popup/messagePopupConfig.html similarity index 100% rename from client/views/app/messagePopupConfig.html rename to packages/rocketchat-ui-message/message/popup/messagePopupConfig.html diff --git a/client/views/app/messagePopupEmoji.coffee b/packages/rocketchat-ui-message/message/popup/messagePopupEmoji.coffee similarity index 100% rename from client/views/app/messagePopupEmoji.coffee rename to packages/rocketchat-ui-message/message/popup/messagePopupEmoji.coffee diff --git a/client/views/app/messagePopupEmoji.html b/packages/rocketchat-ui-message/message/popup/messagePopupEmoji.html similarity index 100% rename from client/views/app/messagePopupEmoji.html rename to packages/rocketchat-ui-message/message/popup/messagePopupEmoji.html diff --git a/client/views/app/messagePopupSlashCommand.html b/packages/rocketchat-ui-message/message/popup/messagePopupSlashCommand.html similarity index 100% rename from client/views/app/messagePopupSlashCommand.html rename to packages/rocketchat-ui-message/message/popup/messagePopupSlashCommand.html diff --git a/client/views/app/messagePopupUser.html b/packages/rocketchat-ui-message/message/popup/messagePopupUser.html similarity index 100% rename from client/views/app/messagePopupUser.html rename to packages/rocketchat-ui-message/message/popup/messagePopupUser.html diff --git a/packages/rocketchat-ui-message/package.js b/packages/rocketchat-ui-message/package.js new file mode 100644 index 0000000000000000000000000000000000000000..f06271a56d727523089327b96b5cba006b6777ce --- /dev/null +++ b/packages/rocketchat-ui-message/package.js @@ -0,0 +1,41 @@ +Package.describe({ + name: 'rocketchat:ui-message', + version: '0.1.0', + // Brief, one-line summary of the package. + summary: '', + // URL to the Git repository containing the source code for this package. + git: '', + // By default, Meteor will default to using README.md for documentation. + // To avoid submitting documentation, set this field to null. + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.2.1'); + + api.use([ + 'mongo', + 'ecmascript', + 'templating', + 'coffeescript', + 'underscore', + 'rocketchat:lib' + ]); + + api.addFiles('message/message.html', 'client'); + api.addFiles("message/messageBox.html", "client"); + api.addFiles("message/popup/messagePopup.html", "client"); + api.addFiles("message/popup/messagePopupChannel.html", "client"); + api.addFiles("message/popup/messagePopupConfig.html", "client"); + api.addFiles("message/popup/messagePopupEmoji.html", "client"); + api.addFiles("message/popup/messagePopupSlashCommand.html", "client"); + api.addFiles("message/popup/messagePopupUser.html", "client"); + + api.addFiles('message/message.coffee', 'client'); + api.addFiles('message/messageBox.coffee', 'client'); + api.addFiles("message/popup/messagePopup.coffee", "client"); + api.addFiles("message/popup/messagePopupConfig.coffee", "client"); + api.addFiles("message/popup/messagePopupEmoji.coffee", "client"); + + +}); \ No newline at end of file diff --git a/packages/rocketchat-ui-sidenav/.npm/package/.gitignore b/packages/rocketchat-ui-sidenav/.npm/package/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..3c3629e647f5ddf82548912e337bea9826b434af --- /dev/null +++ b/packages/rocketchat-ui-sidenav/.npm/package/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/packages/rocketchat-ui-sidenav/.npm/package/README b/packages/rocketchat-ui-sidenav/.npm/package/README new file mode 100644 index 0000000000000000000000000000000000000000..3d492553a438e46facd411cd3e206a648395a38c --- /dev/null +++ b/packages/rocketchat-ui-sidenav/.npm/package/README @@ -0,0 +1,7 @@ +This directory and the files immediately inside it are automatically generated +when you change this package's NPM dependencies. Commit the files in this +directory (npm-shrinkwrap.json, .gitignore, and this README) to source control +so that others run the same versions of sub-dependencies. + +You should NOT check in the node_modules directory that Meteor automatically +creates; if you are using git, the .gitignore file tells git to ignore it. diff --git a/packages/rocketchat-ui-sidenav/.npm/package/npm-shrinkwrap.json b/packages/rocketchat-ui-sidenav/.npm/package/npm-shrinkwrap.json new file mode 100644 index 0000000000000000000000000000000000000000..943eb58f7fd99bca7aeb2cb487e7257aabd85be9 --- /dev/null +++ b/packages/rocketchat-ui-sidenav/.npm/package/npm-shrinkwrap.json @@ -0,0 +1,285 @@ +{ + "dependencies": { + "less": { + "version": "https://github.com/meteor/less.js/tarball/8130849eb3d7f0ecf0ca8d0af7c4207b0442e3f6", + "dependencies": { + "errno": { + "version": "0.1.4", + "dependencies": { + "prr": { + "version": "0.0.0" + } + } + }, + "graceful-fs": { + "version": "3.0.8" + }, + "image-size": { + "version": "0.3.5" + }, + "mime": { + "version": "1.3.4" + }, + "mkdirp": { + "version": "0.5.1", + "dependencies": { + "minimist": { + "version": "0.0.8" + } + } + }, + "promise": { + "version": "6.1.0", + "dependencies": { + "asap": { + "version": "1.0.0" + } + } + }, + "request": { + "version": "2.65.0", + "dependencies": { + "bl": { + "version": "1.0.0", + "dependencies": { + "readable-stream": { + "version": "2.0.4", + "dependencies": { + "core-util-is": { + "version": "1.0.1" + }, + "inherits": { + "version": "2.0.1" + }, + "isarray": { + "version": "0.0.1" + }, + "process-nextick-args": { + "version": "1.0.3" + }, + "string_decoder": { + "version": "0.10.31" + }, + "util-deprecate": { + "version": "1.0.2" + } + } + } + } + }, + "caseless": { + "version": "0.11.0" + }, + "extend": { + "version": "3.0.0" + }, + "forever-agent": { + "version": "0.6.1" + }, + "form-data": { + "version": "1.0.0-rc3", + "dependencies": { + "async": { + "version": "1.5.0" + } + } + }, + "json-stringify-safe": { + "version": "5.0.1" + }, + "mime-types": { + "version": "2.1.7", + "dependencies": { + "mime-db": { + "version": "1.19.0" + } + } + }, + "node-uuid": { + "version": "1.4.7" + }, + "qs": { + "version": "5.2.0" + }, + "tunnel-agent": { + "version": "0.4.1" + }, + "tough-cookie": { + "version": "2.2.1" + }, + "http-signature": { + "version": "0.11.0", + "dependencies": { + "assert-plus": { + "version": "0.1.5" + }, + "asn1": { + "version": "0.1.11" + }, + "ctype": { + "version": "0.5.3" + } + } + }, + "oauth-sign": { + "version": "0.8.0" + }, + "hawk": { + "version": "3.1.1", + "dependencies": { + "hoek": { + "version": "2.16.3" + }, + "boom": { + "version": "2.10.1" + }, + "cryptiles": { + "version": "2.0.5" + }, + "sntp": { + "version": "1.0.9" + } + } + }, + "aws-sign2": { + "version": "0.6.0" + }, + "stringstream": { + "version": "0.0.5" + }, + "combined-stream": { + "version": "1.0.5", + "dependencies": { + "delayed-stream": { + "version": "1.0.0" + } + } + }, + "isstream": { + "version": "0.1.2" + }, + "har-validator": { + "version": "2.0.2", + "dependencies": { + "chalk": { + "version": "1.1.1", + "dependencies": { + "ansi-styles": { + "version": "2.1.0" + }, + "escape-string-regexp": { + "version": "1.0.3" + }, + "has-ansi": { + "version": "2.0.0", + "dependencies": { + "ansi-regex": { + "version": "2.0.0" + } + } + }, + "strip-ansi": { + "version": "3.0.0", + "dependencies": { + "ansi-regex": { + "version": "2.0.0" + } + } + }, + "supports-color": { + "version": "2.0.0" + } + } + }, + "commander": { + "version": "2.9.0", + "dependencies": { + "graceful-readlink": { + "version": "1.0.1" + } + } + }, + "is-my-json-valid": { + "version": "2.12.3", + "dependencies": { + "generate-function": { + "version": "2.0.0" + }, + "generate-object-property": { + "version": "1.2.0", + "dependencies": { + "is-property": { + "version": "1.0.2" + } + } + }, + "jsonpointer": { + "version": "2.0.0" + }, + "xtend": { + "version": "4.0.1" + } + } + }, + "pinkie-promise": { + "version": "1.0.0", + "dependencies": { + "pinkie": { + "version": "1.0.0" + } + } + } + } + } + } + }, + "source-map": { + "version": "0.4.4", + "dependencies": { + "amdefine": { + "version": "1.0.0" + } + } + } + } + }, + "less-plugin-autoprefix": { + "version": "1.4.2", + "dependencies": { + "autoprefixer-core": { + "version": "5.2.1", + "dependencies": { + "browserslist": { + "version": "0.4.0" + }, + "num2fraction": { + "version": "1.2.2" + }, + "caniuse-db": { + "version": "1.0.30000362" + } + } + }, + "postcss": { + "version": "4.1.16", + "dependencies": { + "es6-promise": { + "version": "2.3.0" + }, + "source-map": { + "version": "0.4.4", + "dependencies": { + "amdefine": { + "version": "1.0.0" + } + } + }, + "js-base64": { + "version": "2.1.9" + } + } + } + } + } + } +} diff --git a/packages/rocketchat-ui-sidenav/README.md b/packages/rocketchat-ui-sidenav/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/packages/rocketchat-ui-sidenav/package.js b/packages/rocketchat-ui-sidenav/package.js new file mode 100644 index 0000000000000000000000000000000000000000..8c51ef517ef28ea8dfce26e188cd7a71c3f2364e --- /dev/null +++ b/packages/rocketchat-ui-sidenav/package.js @@ -0,0 +1,56 @@ +Package.describe({ + name: 'rocketchat:ui-sidenav', + version: '0.1.0', + // Brief, one-line summary of the package. + summary: '', + // URL to the Git repository containing the source code for this package. + git: '', + // By default, Meteor will default to using README.md for documentation. + // To avoid submitting documentation, set this field to null. + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.2.1'); + + api.use([ + 'ecmascript', + 'templating', + 'coffeescript', + 'underscore', + 'rocketchat:lib@0.0.1' + ]); + + api.addFiles('side-nav/channels.html', 'client'); + api.addFiles('side-nav/chatRoomItem.html', 'client'); + api.addFiles('side-nav/createChannelFlex.html', 'client'); + api.addFiles('side-nav/directMessages.html', 'client'); + api.addFiles('side-nav/directMessagesFlex.html', 'client'); + api.addFiles('side-nav/listChannelsFlex.html', 'client'); + api.addFiles('side-nav/listPrivateGroupsFlex.html', 'client'); + api.addFiles('side-nav/privateGroups.html', 'client'); + api.addFiles('side-nav/privateGroupsFlex.html', 'client'); + api.addFiles('side-nav/sideNav.html', 'client'); + api.addFiles('side-nav/starredRooms.html', 'client'); + api.addFiles('side-nav/unreadRooms.html', 'client'); + api.addFiles('side-nav/userStatus.html', 'client'); + + api.addFiles('side-nav/channels.coffee', 'client'); + api.addFiles('side-nav/chatRoomItem.coffee', 'client'); + api.addFiles('side-nav/createChannelFlex.coffee', 'client'); + api.addFiles('side-nav/directMessages.coffee', 'client'); + api.addFiles('side-nav/directMessagesFlex.coffee', 'client'); + api.addFiles('side-nav/listChannelsFlex.coffee', 'client'); + api.addFiles('side-nav/listPrivateGroupsFlex.coffee', 'client'); + api.addFiles('side-nav/privateGroups.coffee', 'client'); + api.addFiles('side-nav/privateGroupsFlex.coffee', 'client'); + api.addFiles('side-nav/sideNav.coffee', 'client'); + api.addFiles('side-nav/starredRooms.coffee', 'client'); + api.addFiles('side-nav/unreadRooms.coffee', 'client'); + +}); + +Npm.depends({ + 'less': 'https://github.com/meteor/less.js/tarball/8130849eb3d7f0ecf0ca8d0af7c4207b0442e3f6', + 'less-plugin-autoprefix': '1.4.2' +}); diff --git a/client/views/app/sideNav/channels.coffee b/packages/rocketchat-ui-sidenav/side-nav/channels.coffee similarity index 100% rename from client/views/app/sideNav/channels.coffee rename to packages/rocketchat-ui-sidenav/side-nav/channels.coffee diff --git a/client/views/app/sideNav/channels.html b/packages/rocketchat-ui-sidenav/side-nav/channels.html similarity index 100% rename from client/views/app/sideNav/channels.html rename to packages/rocketchat-ui-sidenav/side-nav/channels.html diff --git a/client/views/app/sideNav/chatRoomItem.coffee b/packages/rocketchat-ui-sidenav/side-nav/chatRoomItem.coffee similarity index 90% rename from client/views/app/sideNav/chatRoomItem.coffee rename to packages/rocketchat-ui-sidenav/side-nav/chatRoomItem.coffee index dc25a452a24f6c71c23f2b190458395be08716c9..c1482357b983165406ef4432a7dbc77f06f59b7e 100644 --- a/client/views/app/sideNav/chatRoomItem.coffee +++ b/packages/rocketchat-ui-sidenav/side-nav/chatRoomItem.coffee @@ -8,9 +8,6 @@ Template.chatRoomItem.helpers if (FlowRouter.getParam('_id') isnt this.rid or not document.hasFocus()) and this.unread > 0 return this.unread - isDirectRoom: -> - return this.t is 'd' - userStatus: -> return 'status-' + (Session.get('user_' + this.name + '_status') or 'offline') if this.t is 'd' return '' @@ -19,10 +16,7 @@ Template.chatRoomItem.helpers return this.name roomIcon: -> - switch this.t - when 'd' then return 'icon-at' - when 'c' then return 'icon-hash' - when 'p' then return 'icon-lock' + return RocketChat.roomTypes.getIcon this.t active: -> if Session.get('openedRoom') is this.rid diff --git a/client/views/app/sideNav/chatRoomItem.html b/packages/rocketchat-ui-sidenav/side-nav/chatRoomItem.html similarity index 100% rename from client/views/app/sideNav/chatRoomItem.html rename to packages/rocketchat-ui-sidenav/side-nav/chatRoomItem.html diff --git a/client/views/app/sideNav/createChannelFlex.coffee b/packages/rocketchat-ui-sidenav/side-nav/createChannelFlex.coffee similarity index 100% rename from client/views/app/sideNav/createChannelFlex.coffee rename to packages/rocketchat-ui-sidenav/side-nav/createChannelFlex.coffee diff --git a/client/views/app/sideNav/createChannelFlex.html b/packages/rocketchat-ui-sidenav/side-nav/createChannelFlex.html similarity index 100% rename from client/views/app/sideNav/createChannelFlex.html rename to packages/rocketchat-ui-sidenav/side-nav/createChannelFlex.html diff --git a/client/views/app/sideNav/directMessages.coffee b/packages/rocketchat-ui-sidenav/side-nav/directMessages.coffee similarity index 100% rename from client/views/app/sideNav/directMessages.coffee rename to packages/rocketchat-ui-sidenav/side-nav/directMessages.coffee diff --git a/client/views/app/sideNav/directMessages.html b/packages/rocketchat-ui-sidenav/side-nav/directMessages.html similarity index 100% rename from client/views/app/sideNav/directMessages.html rename to packages/rocketchat-ui-sidenav/side-nav/directMessages.html diff --git a/client/views/app/sideNav/directMessagesFlex.coffee b/packages/rocketchat-ui-sidenav/side-nav/directMessagesFlex.coffee similarity index 100% rename from client/views/app/sideNav/directMessagesFlex.coffee rename to packages/rocketchat-ui-sidenav/side-nav/directMessagesFlex.coffee diff --git a/client/views/app/sideNav/directMessagesFlex.html b/packages/rocketchat-ui-sidenav/side-nav/directMessagesFlex.html similarity index 100% rename from client/views/app/sideNav/directMessagesFlex.html rename to packages/rocketchat-ui-sidenav/side-nav/directMessagesFlex.html diff --git a/client/views/app/sideNav/listChannelsFlex.coffee b/packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.coffee similarity index 100% rename from client/views/app/sideNav/listChannelsFlex.coffee rename to packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.coffee diff --git a/client/views/app/sideNav/listChannelsFlex.html b/packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.html similarity index 100% rename from client/views/app/sideNav/listChannelsFlex.html rename to packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.html diff --git a/client/views/app/sideNav/listPrivateGroupsFlex.coffee b/packages/rocketchat-ui-sidenav/side-nav/listPrivateGroupsFlex.coffee similarity index 100% rename from client/views/app/sideNav/listPrivateGroupsFlex.coffee rename to packages/rocketchat-ui-sidenav/side-nav/listPrivateGroupsFlex.coffee diff --git a/client/views/app/sideNav/listPrivateGroupsFlex.html b/packages/rocketchat-ui-sidenav/side-nav/listPrivateGroupsFlex.html similarity index 100% rename from client/views/app/sideNav/listPrivateGroupsFlex.html rename to packages/rocketchat-ui-sidenav/side-nav/listPrivateGroupsFlex.html diff --git a/client/views/app/sideNav/privateGroups.coffee b/packages/rocketchat-ui-sidenav/side-nav/privateGroups.coffee similarity index 100% rename from client/views/app/sideNav/privateGroups.coffee rename to packages/rocketchat-ui-sidenav/side-nav/privateGroups.coffee diff --git a/client/views/app/sideNav/privateGroups.html b/packages/rocketchat-ui-sidenav/side-nav/privateGroups.html similarity index 100% rename from client/views/app/sideNav/privateGroups.html rename to packages/rocketchat-ui-sidenav/side-nav/privateGroups.html diff --git a/client/views/app/sideNav/privateGroupsFlex.coffee b/packages/rocketchat-ui-sidenav/side-nav/privateGroupsFlex.coffee similarity index 100% rename from client/views/app/sideNav/privateGroupsFlex.coffee rename to packages/rocketchat-ui-sidenav/side-nav/privateGroupsFlex.coffee diff --git a/client/views/app/sideNav/privateGroupsFlex.html b/packages/rocketchat-ui-sidenav/side-nav/privateGroupsFlex.html similarity index 100% rename from client/views/app/sideNav/privateGroupsFlex.html rename to packages/rocketchat-ui-sidenav/side-nav/privateGroupsFlex.html diff --git a/client/views/app/sideNav/sideNav.coffee b/packages/rocketchat-ui-sidenav/side-nav/sideNav.coffee similarity index 100% rename from client/views/app/sideNav/sideNav.coffee rename to packages/rocketchat-ui-sidenav/side-nav/sideNav.coffee diff --git a/client/views/app/sideNav/sideNav.html b/packages/rocketchat-ui-sidenav/side-nav/sideNav.html similarity index 100% rename from client/views/app/sideNav/sideNav.html rename to packages/rocketchat-ui-sidenav/side-nav/sideNav.html diff --git a/client/views/app/sideNav/starredRooms.coffee b/packages/rocketchat-ui-sidenav/side-nav/starredRooms.coffee similarity index 100% rename from client/views/app/sideNav/starredRooms.coffee rename to packages/rocketchat-ui-sidenav/side-nav/starredRooms.coffee diff --git a/client/views/app/sideNav/starredRooms.html b/packages/rocketchat-ui-sidenav/side-nav/starredRooms.html similarity index 100% rename from client/views/app/sideNav/starredRooms.html rename to packages/rocketchat-ui-sidenav/side-nav/starredRooms.html diff --git a/client/views/app/sideNav/unreadRooms.coffee b/packages/rocketchat-ui-sidenav/side-nav/unreadRooms.coffee similarity index 100% rename from client/views/app/sideNav/unreadRooms.coffee rename to packages/rocketchat-ui-sidenav/side-nav/unreadRooms.coffee diff --git a/client/views/app/sideNav/unreadRooms.html b/packages/rocketchat-ui-sidenav/side-nav/unreadRooms.html similarity index 100% rename from client/views/app/sideNav/unreadRooms.html rename to packages/rocketchat-ui-sidenav/side-nav/unreadRooms.html diff --git a/client/views/app/sideNav/userStatus.html b/packages/rocketchat-ui-sidenav/side-nav/userStatus.html similarity index 100% rename from client/views/app/sideNav/userStatus.html rename to packages/rocketchat-ui-sidenav/side-nav/userStatus.html diff --git a/packages/rocketchat-ui-sidenav/styles/side-nav.less b/packages/rocketchat-ui-sidenav/styles/side-nav.less new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/packages/rocketchat-ui/README.md b/packages/rocketchat-ui/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/client/lib/Modernizr.js b/packages/rocketchat-ui/lib/Modernizr.js similarity index 100% rename from client/lib/Modernizr.js rename to packages/rocketchat-ui/lib/Modernizr.js diff --git a/client/lib/RoomHistoryManager.coffee b/packages/rocketchat-ui/lib/RoomHistoryManager.coffee similarity index 100% rename from client/lib/RoomHistoryManager.coffee rename to packages/rocketchat-ui/lib/RoomHistoryManager.coffee diff --git a/client/lib/RoomManager.coffee b/packages/rocketchat-ui/lib/RoomManager.coffee similarity index 93% rename from client/lib/RoomManager.coffee rename to packages/rocketchat-ui/lib/RoomManager.coffee index b5684d5785ed43352576fe217e9c55f576b979c2..a9e8a7a406b3d3c495c9da08cbe051c1fbb32ee3 100644 --- a/client/lib/RoomManager.coffee +++ b/packages/rocketchat-ui/lib/RoomManager.coffee @@ -110,13 +110,7 @@ RocketChat.Notifications.onUser 'message', (msg) -> Meteor.defer -> RoomManager.updateMentionsMarksOfRoom typeName - # If room was renamed then close current room and send user to the new one - Tracker.nonreactive -> - if msg.t is 'r' - if Session.get('openedRoom') is msg.rid - type = if FlowRouter.current().route.name is 'channel' then 'c' else 'p' - RoomManager.close type + FlowRouter.getParam('name') - FlowRouter.go FlowRouter.current().route.name, name: msg.msg + RocketChat.callbacks.run 'streamMessage', msg RocketChat.Notifications.onRoom openedRooms[typeName].rid, 'deleteMessage', onDeleteMessageStream diff --git a/client/lib/accountBox.coffee b/packages/rocketchat-ui/lib/accountBox.coffee similarity index 100% rename from client/lib/accountBox.coffee rename to packages/rocketchat-ui/lib/accountBox.coffee diff --git a/packages/rocketchat-ui/lib/accounts.coffee b/packages/rocketchat-ui/lib/accounts.coffee new file mode 100644 index 0000000000000000000000000000000000000000..d81d0e7c5a4121d5d189267b1b3ddeb7d53f60e4 --- /dev/null +++ b/packages/rocketchat-ui/lib/accounts.coffee @@ -0,0 +1,17 @@ +Meteor.startup -> + Accounts.onEmailVerificationLink (token, done) -> + Accounts.verifyEmail token, (error) -> + if not error? + alert(t('Email_verified')) + + done() + + Accounts.onResetPasswordLink (token, done) -> + newPassword = prompt(t('New_password')) + Accounts.resetPassword token, newPassword, (error) -> + if error? + console.log error + alert(t('Error_changing_password')) + else + alert('Password_changed') + done() \ No newline at end of file diff --git a/client/lib/avatar.coffee b/packages/rocketchat-ui/lib/avatar.coffee similarity index 93% rename from client/lib/avatar.coffee rename to packages/rocketchat-ui/lib/avatar.coffee index 6fb117efa5905172d28ec11286902849c385f8c7..7fb7cf46f3cd1bcc6382ef11840005dec9167b92 100644 --- a/client/lib/avatar.coffee +++ b/packages/rocketchat-ui/lib/avatar.coffee @@ -8,7 +8,7 @@ path = Meteor.absoluteUrl() else path = '/' - return "#{path}avatar/#{username}.jpg?_dc=#{random}" + "#{path}avatar/#{encodeURIComponent(username)}.jpg?_dc=#{random}" Blaze.registerHelper 'avatarUrlFromUsername', getAvatarUrlFromUsername diff --git a/client/lib/chatMessages.coffee b/packages/rocketchat-ui/lib/chatMessages.coffee similarity index 99% rename from client/lib/chatMessages.coffee rename to packages/rocketchat-ui/lib/chatMessages.coffee index e2e881ede3f87b2b9d6e1ed8bb7f6dcd751d320b..fa01c9bd0184a880171377eb522e7f773901937d 100644 --- a/client/lib/chatMessages.coffee +++ b/packages/rocketchat-ui/lib/chatMessages.coffee @@ -1,7 +1,6 @@ class @ChatMessages init: (node) -> this.editing = {} - this.messageMaxSize = RocketChat.settings.get('Message_MaxAllowedSize') this.wrapper = $(node).find(".wrapper") this.input = $(node).find(".input-message").get(0) @@ -41,7 +40,7 @@ class @ChatMessages edit: (element, index) -> id = element.getAttribute("id") - message = ChatMessage.findOne { _id: id } + message = ChatMessage.findOne { _id: id } hasPermission = RocketChat.authz.hasAtLeastOnePermission('edit-message', message.rid) editAllowed = RocketChat.settings.get 'Message_AllowEditing' editOwn = message?.u?._id is Meteor.userId() diff --git a/client/lib/collections.coffee b/packages/rocketchat-ui/lib/collections.coffee similarity index 100% rename from client/lib/collections.coffee rename to packages/rocketchat-ui/lib/collections.coffee diff --git a/client/lib/constallation.js b/packages/rocketchat-ui/lib/constallation.js similarity index 100% rename from client/lib/constallation.js rename to packages/rocketchat-ui/lib/constallation.js diff --git a/client/lib/cordova/facebook-login.coffee b/packages/rocketchat-ui/lib/cordova/facebook-login.coffee similarity index 100% rename from client/lib/cordova/facebook-login.coffee rename to packages/rocketchat-ui/lib/cordova/facebook-login.coffee diff --git a/client/lib/cordova/keyboard-fix.coffee b/packages/rocketchat-ui/lib/cordova/keyboard-fix.coffee similarity index 100% rename from client/lib/cordova/keyboard-fix.coffee rename to packages/rocketchat-ui/lib/cordova/keyboard-fix.coffee diff --git a/client/lib/cordova/push.coffee b/packages/rocketchat-ui/lib/cordova/push.coffee similarity index 100% rename from client/lib/cordova/push.coffee rename to packages/rocketchat-ui/lib/cordova/push.coffee diff --git a/client/lib/cordova/urls.coffee b/packages/rocketchat-ui/lib/cordova/urls.coffee similarity index 100% rename from client/lib/cordova/urls.coffee rename to packages/rocketchat-ui/lib/cordova/urls.coffee diff --git a/client/lib/cordova/user-state.coffee b/packages/rocketchat-ui/lib/cordova/user-state.coffee similarity index 100% rename from client/lib/cordova/user-state.coffee rename to packages/rocketchat-ui/lib/cordova/user-state.coffee diff --git a/client/lib/customEventPolyfill.js b/packages/rocketchat-ui/lib/customEventPolyfill.js similarity index 100% rename from client/lib/customEventPolyfill.js rename to packages/rocketchat-ui/lib/customEventPolyfill.js diff --git a/client/lib/fileUpload.coffee b/packages/rocketchat-ui/lib/fileUpload.coffee similarity index 100% rename from client/lib/fileUpload.coffee rename to packages/rocketchat-ui/lib/fileUpload.coffee diff --git a/client/lib/fireEvent.coffee b/packages/rocketchat-ui/lib/fireEvent.coffee similarity index 100% rename from client/lib/fireEvent.coffee rename to packages/rocketchat-ui/lib/fireEvent.coffee diff --git a/client/lib/jquery.swipebox.min.js b/packages/rocketchat-ui/lib/jquery.swipebox.min.js similarity index 100% rename from client/lib/jquery.swipebox.min.js rename to packages/rocketchat-ui/lib/jquery.swipebox.min.js diff --git a/client/lib/menu.coffee b/packages/rocketchat-ui/lib/menu.coffee similarity index 100% rename from client/lib/menu.coffee rename to packages/rocketchat-ui/lib/menu.coffee diff --git a/client/lib/modal.coffee b/packages/rocketchat-ui/lib/modal.coffee similarity index 100% rename from client/lib/modal.coffee rename to packages/rocketchat-ui/lib/modal.coffee diff --git a/client/lib/msgTyping.coffee b/packages/rocketchat-ui/lib/msgTyping.coffee similarity index 100% rename from client/lib/msgTyping.coffee rename to packages/rocketchat-ui/lib/msgTyping.coffee diff --git a/client/lib/notification.coffee b/packages/rocketchat-ui/lib/notification.coffee similarity index 100% rename from client/lib/notification.coffee rename to packages/rocketchat-ui/lib/notification.coffee diff --git a/client/lib/parentTemplate.js b/packages/rocketchat-ui/lib/parentTemplate.js similarity index 100% rename from client/lib/parentTemplate.js rename to packages/rocketchat-ui/lib/parentTemplate.js diff --git a/client/lib/particles.js b/packages/rocketchat-ui/lib/particles.js similarity index 100% rename from client/lib/particles.js rename to packages/rocketchat-ui/lib/particles.js diff --git a/client/lib/readMessages.coffee b/packages/rocketchat-ui/lib/readMessages.coffee similarity index 100% rename from client/lib/readMessages.coffee rename to packages/rocketchat-ui/lib/readMessages.coffee diff --git a/client/lib/recorderjs/audioRecorder.coffee b/packages/rocketchat-ui/lib/recorderjs/audioRecorder.coffee similarity index 100% rename from client/lib/recorderjs/audioRecorder.coffee rename to packages/rocketchat-ui/lib/recorderjs/audioRecorder.coffee diff --git a/client/lib/recorderjs/recorder.js b/packages/rocketchat-ui/lib/recorderjs/recorder.js similarity index 100% rename from client/lib/recorderjs/recorder.js rename to packages/rocketchat-ui/lib/recorderjs/recorder.js diff --git a/client/lib/rocket.coffee b/packages/rocketchat-ui/lib/rocket.coffee similarity index 100% rename from client/lib/rocket.coffee rename to packages/rocketchat-ui/lib/rocket.coffee diff --git a/client/lib/sideNav.coffee b/packages/rocketchat-ui/lib/sideNav.coffee similarity index 100% rename from client/lib/sideNav.coffee rename to packages/rocketchat-ui/lib/sideNav.coffee diff --git a/client/lib/tapi18n.coffee b/packages/rocketchat-ui/lib/tapi18n.coffee similarity index 100% rename from client/lib/tapi18n.coffee rename to packages/rocketchat-ui/lib/tapi18n.coffee diff --git a/client/lib/textarea-autogrow.js b/packages/rocketchat-ui/lib/textarea-autogrow.js similarity index 100% rename from client/lib/textarea-autogrow.js rename to packages/rocketchat-ui/lib/textarea-autogrow.js diff --git a/packages/rocketchat-ui/lib/trackRoomNameChanged.coffee b/packages/rocketchat-ui/lib/trackRoomNameChanged.coffee new file mode 100644 index 0000000000000000000000000000000000000000..8b3a0769febae4f4b9f11b9e85d6e2753536a69d --- /dev/null +++ b/packages/rocketchat-ui/lib/trackRoomNameChanged.coffee @@ -0,0 +1,12 @@ +Meteor.startup -> + roomNameChangedCallback = (msg) -> + Tracker.nonreactive -> + if msg.t is 'r' + if Session.get('openedRoom') is msg.rid + type = if FlowRouter.current().route.name is 'channel' then 'c' else 'p' + RoomManager.close type + FlowRouter.getParam('name') + FlowRouter.go FlowRouter.current().route.name, name: msg.msg + + return msg + + RocketChat.callbacks.add 'streamMessage', roomNameChangedCallback, RocketChat.callbacks.priority.HIGH diff --git a/packages/rocketchat-ui/package.js b/packages/rocketchat-ui/package.js new file mode 100644 index 0000000000000000000000000000000000000000..b7fef9bb438a823b88cc79f72ac265db050856a5 --- /dev/null +++ b/packages/rocketchat-ui/package.js @@ -0,0 +1,98 @@ +Package.describe({ + name: 'rocketchat:ui', + version: '0.1.0', + // Brief, one-line summary of the package. + summary: '', + // URL to the Git repository containing the source code for this package. + git: '', + // By default, Meteor will default to using README.md for documentation. + // To avoid submitting documentation, set this field to null. + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.2.1'); + + api.use([ + 'mongo', + 'session', + 'jquery', + 'tracker', + 'reactive-var', + 'ecmascript', + 'templating', + 'coffeescript', + 'underscore', + 'rocketchat:lib@0.0.1', + 'raix:push' + ]); + + // LIB FILES + api.addFiles('lib/accountBox.coffee', 'client'); + api.addFiles('lib/accounts.coffee', 'client'); + api.addFiles('lib/avatar.coffee', 'client'); + api.addFiles('lib/chatMessages.coffee', 'client'); + api.addFiles('lib/collections.coffee', 'client'); + api.addFiles('lib/constallation.js', 'client'); + api.addFiles('lib/customEventPolyfill.js', 'client'); + api.addFiles('lib/fileUpload.coffee', 'client'); + api.addFiles('lib/fireEvent.coffee', 'client'); + api.addFiles('lib/jquery.swipebox.min.js', 'client'); + api.addFiles('lib/menu.coffee', 'client'); + api.addFiles('lib/modal.coffee', 'client'); + api.addFiles('lib/Modernizr.js', 'client'); + api.addFiles('lib/msgTyping.coffee', 'client'); + api.addFiles('lib/notification.coffee', 'client'); + api.addFiles('lib/parentTemplate.js', 'client'); + api.addFiles('lib/particles.js', 'client'); + api.addFiles('lib/readMessages.coffee', 'client'); + api.addFiles('lib/rocket.coffee', 'client'); + api.addFiles('lib/RoomHistoryManager.coffee', 'client'); + api.addFiles('lib/RoomManager.coffee', 'client'); + api.addFiles('lib/sideNav.coffee', 'client'); + api.addFiles('lib/tapi18n.coffee', 'client'); + api.addFiles('lib/textarea-autogrow.js', 'client'); + api.addFiles('lib/trackRoomNameChanged.coffee', 'client'); + + // LIB CORDOVA + api.addFiles('lib/cordova/facebook-login.coffee', 'client'); + api.addFiles('lib/cordova/keyboard-fix.coffee', 'client'); + api.addFiles('lib/cordova/push.coffee', 'client'); + api.addFiles('lib/cordova/urls.coffee', 'client'); + api.addFiles('lib/cordova/user-state.coffee', 'client'); + + // LIB RECORDERJS + api.addFiles('lib/recorderjs/audioRecorder.coffee', 'client'); + api.addFiles('lib/recorderjs/recorder.js', 'client'); + + // TEMPLATE FILES + api.addFiles('views/cmsPage.html', 'client'); + api.addFiles('views/fxos.html', 'client'); + api.addFiles('views/modal.html', 'client'); + api.addFiles('views/404/roomNotFound.html', 'client'); + api.addFiles('views/app/audioNotification.html', 'client'); + api.addFiles('views/app/burguer.html', 'client'); + api.addFiles('views/app/home.html', 'client'); + api.addFiles('views/app/privateHistory.html', 'client'); + api.addFiles('views/app/room.html', 'client'); + api.addFiles('views/app/roomSearch.html', 'client'); + api.addFiles('views/app/userSearch.html', 'client'); + api.addFiles('views/app/spotlight/mobileMessageMenu.html', 'client'); + api.addFiles('views/app/spotlight/spotlight.html', 'client'); + api.addFiles('views/app/videoCall/videoButtons.html', 'client'); + api.addFiles('views/app/videoCall/videoCall.html', 'client'); + + api.addFiles('views/cmsPage.coffee', 'client'); + api.addFiles('views/fxos.coffee', 'client'); + api.addFiles('views/modal.coffee', 'client'); + api.addFiles('views/404/roomNotFound.coffee', 'client'); + api.addFiles('views/app/burguer.coffee', 'client'); + api.addFiles('views/app/home.coffee', 'client'); + api.addFiles('views/app/privateHistory.coffee', 'client'); + api.addFiles('views/app/room.coffee', 'client'); + api.addFiles('views/app/roomSearch.coffee', 'client'); + api.addFiles('views/app/spotlight/mobileMessageMenu.coffee', 'client'); + api.addFiles('views/app/spotlight/spotlight.coffee', 'client'); + api.addFiles('views/app/videoCall/videoButtons.coffee', 'client'); + api.addFiles('views/app/videoCall/videoCall.coffee', 'client'); +}); diff --git a/client/views/404/roomNotFound.coffee b/packages/rocketchat-ui/views/404/roomNotFound.coffee similarity index 100% rename from client/views/404/roomNotFound.coffee rename to packages/rocketchat-ui/views/404/roomNotFound.coffee diff --git a/client/views/404/roomNotFound.html b/packages/rocketchat-ui/views/404/roomNotFound.html similarity index 100% rename from client/views/404/roomNotFound.html rename to packages/rocketchat-ui/views/404/roomNotFound.html diff --git a/client/views/app/audioNotification.html b/packages/rocketchat-ui/views/app/audioNotification.html similarity index 100% rename from client/views/app/audioNotification.html rename to packages/rocketchat-ui/views/app/audioNotification.html diff --git a/client/views/app/burguer.coffee b/packages/rocketchat-ui/views/app/burguer.coffee similarity index 100% rename from client/views/app/burguer.coffee rename to packages/rocketchat-ui/views/app/burguer.coffee diff --git a/client/views/app/burguer.html b/packages/rocketchat-ui/views/app/burguer.html similarity index 100% rename from client/views/app/burguer.html rename to packages/rocketchat-ui/views/app/burguer.html diff --git a/client/views/app/home.coffee b/packages/rocketchat-ui/views/app/home.coffee similarity index 100% rename from client/views/app/home.coffee rename to packages/rocketchat-ui/views/app/home.coffee diff --git a/client/views/app/home.html b/packages/rocketchat-ui/views/app/home.html similarity index 100% rename from client/views/app/home.html rename to packages/rocketchat-ui/views/app/home.html diff --git a/client/views/app/privateHistory.coffee b/packages/rocketchat-ui/views/app/privateHistory.coffee similarity index 100% rename from client/views/app/privateHistory.coffee rename to packages/rocketchat-ui/views/app/privateHistory.coffee diff --git a/client/views/app/privateHistory.html b/packages/rocketchat-ui/views/app/privateHistory.html similarity index 100% rename from client/views/app/privateHistory.html rename to packages/rocketchat-ui/views/app/privateHistory.html diff --git a/client/views/app/room.coffee b/packages/rocketchat-ui/views/app/room.coffee similarity index 83% rename from client/views/app/room.coffee rename to packages/rocketchat-ui/views/app/room.coffee index a3e30778731adc992924c3837107a11d6368ffee..2aa4d4093553b7559c792373a72edde2f25dfb92 100644 --- a/client/views/app/room.coffee +++ b/packages/rocketchat-ui/views/app/room.coffee @@ -7,12 +7,12 @@ favoritesEnabled = -> # @TODO bug com o botão para "rolar até o fim" (novas mensagens) quando há uma mensagem com texto que gere rolagem horizontal Template.room.helpers - showFormattingTips: -> - return RocketChat.settings.get('Message_ShowFormattingTips') and (RocketChat.Markdown or RocketChat.Highlight) - showMarkdown: -> - return RocketChat.Markdown - showHighlight: -> - return RocketChat.Highlight + # showFormattingTips: -> + # return RocketChat.settings.get('Message_ShowFormattingTips') and (RocketChat.Markdown or RocketChat.Highlight) + # showMarkdown: -> + # return RocketChat.Markdown + # showHighlight: -> + # return RocketChat.Highlight favorite: -> sub = ChatSubscription.findOne { rid: this._id }, { fields: { f: 1 } } return 'icon-star favorite-room' if sub?.f? and sub.f and favoritesEnabled @@ -36,30 +36,30 @@ Template.room.helpers uploading: -> return Session.get 'uploading' - usersTyping: -> - users = MsgTyping.get @_id - if users.length is 0 - return - if users.length is 1 - return { - multi: false - selfTyping: MsgTyping.selfTyping.get() - users: users[0] - } - - # usernames = _.map messages, (message) -> return message.u.username - - last = users.pop() - if users.length > 4 - last = t('others') - # else - usernames = users.join(', ') - usernames = [usernames, last] - return { - multi: true - selfTyping: MsgTyping.selfTyping.get() - users: usernames.join " #{t 'and'} " - } + # usersTyping: -> + # users = MsgTyping.get @_id + # if users.length is 0 + # return + # if users.length is 1 + # return { + # multi: false + # selfTyping: MsgTyping.selfTyping.get() + # users: users[0] + # } + + # # usernames = _.map messages, (message) -> return message.u.username + + # last = users.pop() + # if users.length > 4 + # last = t('others') + # # else + # usernames = users.join(', ') + # usernames = [usernames, last] + # return { + # multi: true + # selfTyping: MsgTyping.selfTyping.get() + # users: usernames.join " #{t 'and'} " + # } roomName: -> roomData = Session.get('roomData' + this._id) @@ -188,7 +188,9 @@ Template.room.helpers return !! ChatRoom.findOne { _id: @_id, t: 'c' } canRecordAudio: -> - return RocketChat.settings.get('Message_AudioRecorderEnabled') and (navigator.getUserMedia? or navigator.webkitGetUserMedia?) + wavRegex = /audio\/wav|audio\/\*/i + wavEnabled = RocketChat.settings.get("FileUpload_MediaTypeWhiteList").match(wavRegex) + return RocketChat.settings.get('Message_AudioRecorderEnabled') and (navigator.getUserMedia? or navigator.webkitGetUserMedia?) and wavEnabled and RocketChat.settings.get('FileUpload_Enabled') unreadSince: -> room = ChatRoom.findOne(this._id, { reactive: false }) @@ -293,44 +295,6 @@ Template.room.events event.preventDefault() Meteor.call 'toogleFavorite', @_id, !$('i', event.currentTarget).hasClass('favorite-room') - 'click .join': (event) -> - event.stopPropagation() - event.preventDefault() - Meteor.call 'joinRoom', @_id - - 'focus .input-message': (event) -> - KonchatNotification.removeRoomNotification @_id - - 'keyup .input-message': (event) -> - Template.instance().chatMessages.keyup(@_id, event, Template.instance()) - - 'paste .input-message': (e) -> - if not e.originalEvent.clipboardData? - return - - items = e.originalEvent.clipboardData.items - files = [] - for item in items - if item.kind is 'file' and item.type.indexOf('image/') isnt -1 - e.preventDefault() - files.push - file: item.getAsFile() - name: 'Clipboard' - - if files.length > 0 - fileUpload files - - 'keydown .input-message': (event) -> - Template.instance().chatMessages.keydown(@_id, event, Template.instance()) - - 'click .message-form .icon-paper-plane': (event) -> - input = $(event.currentTarget).siblings("textarea") - Template.instance().chatMessages.send(this._id, input.get(0)) - event.preventDefault() - event.stopPropagation() - input.focus() - input.get(0).updateAutogrow() - 'click .edit-room-title': (event) -> event.preventDefault() Session.set('editRoomTitle', true) @@ -388,13 +352,6 @@ Template.room.events 'click .message-dropdown-close': -> $('.message-dropdown:visible').hide() - "click .editing-commands-cancel > a": (e) -> - Template.instance().chatMessages.clearEditing() - - "click .editing-commands-save > a": (e) -> - chatMessages = Template.instance().chatMessages - chatMessages.send(@_id, chatMessages.input) - "click .mention-link": (e) -> channel = $(e.currentTarget).data('channel') if channel? @@ -411,11 +368,10 @@ Template.room.events 'click .pin-message': (event) -> message = @_arguments[1] instance = Template.instance() - if message.pinned - instance.chatMessages.unpinMsg(message) + chatMessages[Session.get('openedRoom')].unpinMsg(message) else - instance.chatMessages.pinMsg(message) + chatMessages[Session.get('openedRoom')].pinMsg(message) 'dragenter .dropzone': (e) -> e.currentTarget.classList.add 'over' @@ -439,36 +395,6 @@ Template.room.events fileUpload filesToUpload - 'change .message-form input[type=file]': (event, template) -> - e = event.originalEvent or event - files = e.target.files - if not files or files.length is 0 - files = e.dataTransfer?.files or [] - - filesToUpload = [] - for file in files - filesToUpload.push - file: file - name: file.name - - fileUpload filesToUpload - - 'click .message-form .mic': (e, t) -> - AudioRecorder.start -> - t.$('.stop-mic').removeClass('hidden') - t.$('.mic').addClass('hidden') - - 'click .message-form .stop-mic': (e, t) -> - AudioRecorder.stop (blob) -> - fileUpload [{ - file: blob - type: 'audio' - name: 'Audio record' - }] - - t.$('.stop-mic').addClass('hidden') - t.$('.mic').removeClass('hidden') - 'click .deactivate': -> username = Session.get('showUserInfo') user = Meteor.users.findOne { username: String(username) } @@ -517,8 +443,11 @@ Template.room.onDestroyed -> Template.room.onRendered -> - this.chatMessages = new ChatMessages - this.chatMessages.init(this.firstNode) + unless window.chatMessages + window.chatMessages = {} + unless window.chatMessages[Session.get('openedRoom')] + window.chatMessages[Session.get('openedRoom')] = new ChatMessages + chatMessages[Session.get('openedRoom')].init(this.firstNode) # ScrollListener.init() wrapper = this.find('.wrapper') diff --git a/packages/rocketchat-ui/views/app/room.html b/packages/rocketchat-ui/views/app/room.html new file mode 100644 index 0000000000000000000000000000000000000000..919ef914666a63e29f16a5bf1f70d6d3fe137acf --- /dev/null +++ b/packages/rocketchat-ui/views/app/room.html @@ -0,0 +1,88 @@ +<template name="room"> + <div class="dropzone"> + <div class="dropzone-overlay"> + <div> + {{_ "Drop_to_upload_file"}} + </div> + </div> + <section class="messages-container {{adminClass}}" id="{{windowId}}"> + <header class="fixed-title"> + {{> burger}} + <h2> + {{#if showToggleFavorite}} + <a href="#favorite" class="toggle-favorite"><i class="{{favorite}}"></i></a> + {{/if}} + <i class="{{roomIcon}} status-{{userStatus}}"></i> + <span class="room-title {{editingTitle}}">{{roomName}}</span> + {{#if canEditName}} + <input type="text" id="room-title-field" class="{{showEditingTitle}}" value="{{roomNameEdit}}" dir="auto"> + <a href="#edit" class="edit-room-title"><i class="icon-pencil" aria-label="{{_ "Edit"}}"></i></a> + {{/if}} + </h2> + </header> + <div class="container-bars"> + {{#each uploading}} + <div class="upload-progress {{#if error}}upload-error{{/if}}"> + {{#if error}} + {{error}} + <a> + close + </a> + {{else}} + <div class="upload-progress-progress" style="width: {{percentage}}%;"></div> + <div class="upload-progress-text"> + {{name}}... {{percentage}}% + <a> + cancel + </a> + </div> + {{/if}} + </div> + {{/each}} + {{#if unreadCount}} + {{#if unreadSince}} + <div class="unread-bar"> + {{_ "S_new_messages_since_s" unreadCount formatUnreadSince}} + <a> + {{_ "Mark_as_read"}} + </a> + </div> + {{/if}} + {{/if}} + </div> + <div class="messages-box {{compactView}}"> + <div class="ticks-bar"></div> + <div class="wrapper"> + <ul aria-live="polite"> + {{#if hasMore}} + <li class="load-more"> + {{#if isLoading}} + <div class="load-more-loading">{{_ "Loading_more_from_history"}}...</div> + {{else}} + <a href="">{{_ "Has_more"}}...</a> + {{/if}} + </li> + {{else}} + <li class="start"> + {{_ "Start_of_conversation"}} + </li> + {{/if}} + {{#each messagesHistory}} + {{#nrr nrrargs 'message' .}}{{/nrr}} + {{/each}} + </ul> + </div> + <div class="new-message not"> + <i class="icon-down-big"></i> + <span>{{_ "New_messages"}}</span> + </div> + </div> + <footer class="footer"> + {{> messageBox}} + </footer> + </section> + <section class="flex-tab"> + {{> Template.dynamic template=flexTemplate data=flexData}} + </section> + </div> +</template> \ No newline at end of file diff --git a/client/views/app/roomSearch.coffee b/packages/rocketchat-ui/views/app/roomSearch.coffee similarity index 100% rename from client/views/app/roomSearch.coffee rename to packages/rocketchat-ui/views/app/roomSearch.coffee diff --git a/client/views/app/roomSearch.html b/packages/rocketchat-ui/views/app/roomSearch.html similarity index 100% rename from client/views/app/roomSearch.html rename to packages/rocketchat-ui/views/app/roomSearch.html diff --git a/client/views/app/spotlight/mobileMessageMenu.coffee b/packages/rocketchat-ui/views/app/spotlight/mobileMessageMenu.coffee similarity index 100% rename from client/views/app/spotlight/mobileMessageMenu.coffee rename to packages/rocketchat-ui/views/app/spotlight/mobileMessageMenu.coffee diff --git a/client/views/app/spotlight/mobileMessageMenu.html b/packages/rocketchat-ui/views/app/spotlight/mobileMessageMenu.html similarity index 100% rename from client/views/app/spotlight/mobileMessageMenu.html rename to packages/rocketchat-ui/views/app/spotlight/mobileMessageMenu.html diff --git a/client/views/app/spotlight/spotlight.coffee b/packages/rocketchat-ui/views/app/spotlight/spotlight.coffee similarity index 100% rename from client/views/app/spotlight/spotlight.coffee rename to packages/rocketchat-ui/views/app/spotlight/spotlight.coffee diff --git a/client/views/app/spotlight/spotlight.html b/packages/rocketchat-ui/views/app/spotlight/spotlight.html similarity index 100% rename from client/views/app/spotlight/spotlight.html rename to packages/rocketchat-ui/views/app/spotlight/spotlight.html diff --git a/client/views/app/userSearch.html b/packages/rocketchat-ui/views/app/userSearch.html similarity index 100% rename from client/views/app/userSearch.html rename to packages/rocketchat-ui/views/app/userSearch.html diff --git a/client/views/app/videoCall/videoButtons.coffee b/packages/rocketchat-ui/views/app/videoCall/videoButtons.coffee similarity index 100% rename from client/views/app/videoCall/videoButtons.coffee rename to packages/rocketchat-ui/views/app/videoCall/videoButtons.coffee diff --git a/client/views/app/videoCall/videoButtons.html b/packages/rocketchat-ui/views/app/videoCall/videoButtons.html similarity index 100% rename from client/views/app/videoCall/videoButtons.html rename to packages/rocketchat-ui/views/app/videoCall/videoButtons.html diff --git a/client/views/app/videoCall/videoCall.coffee b/packages/rocketchat-ui/views/app/videoCall/videoCall.coffee similarity index 98% rename from client/views/app/videoCall/videoCall.coffee rename to packages/rocketchat-ui/views/app/videoCall/videoCall.coffee index d777b03072723b61f73883413de166efe5693ec6..a3431aa73a0fa6ad33c58a2f1b37b9471b0b6337 100644 --- a/client/views/app/videoCall/videoCall.coffee +++ b/packages/rocketchat-ui/views/app/videoCall/videoCall.coffee @@ -9,7 +9,7 @@ Template.videoCall.helpers videoActive: -> webrtc = WebRTC.getInstanceByRoomId(Session.get('openedRoom')) overlay = @overlay? - if overlay isnt webrtc.overlayEnabled.get() + if overlay isnt webrtc?.overlayEnabled.get() return false return webrtc.localUrl.get()? or webrtc.remoteItems.get()?.length > 0 diff --git a/client/views/app/videoCall/videoCall.html b/packages/rocketchat-ui/views/app/videoCall/videoCall.html similarity index 100% rename from client/views/app/videoCall/videoCall.html rename to packages/rocketchat-ui/views/app/videoCall/videoCall.html diff --git a/client/views/cmsPage.coffee b/packages/rocketchat-ui/views/cmsPage.coffee similarity index 100% rename from client/views/cmsPage.coffee rename to packages/rocketchat-ui/views/cmsPage.coffee diff --git a/client/views/cmsPage.html b/packages/rocketchat-ui/views/cmsPage.html similarity index 100% rename from client/views/cmsPage.html rename to packages/rocketchat-ui/views/cmsPage.html diff --git a/client/views/fxos.coffee b/packages/rocketchat-ui/views/fxos.coffee similarity index 100% rename from client/views/fxos.coffee rename to packages/rocketchat-ui/views/fxos.coffee diff --git a/client/views/fxos.html b/packages/rocketchat-ui/views/fxos.html similarity index 100% rename from client/views/fxos.html rename to packages/rocketchat-ui/views/fxos.html diff --git a/client/views/modal.coffee b/packages/rocketchat-ui/views/modal.coffee similarity index 100% rename from client/views/modal.coffee rename to packages/rocketchat-ui/views/modal.coffee diff --git a/client/views/modal.html b/packages/rocketchat-ui/views/modal.html similarity index 100% rename from client/views/modal.html rename to packages/rocketchat-ui/views/modal.html diff --git a/packages/rocketchat-webrtc-ib/i18n/ar.i18n.json b/packages/rocketchat-webrtc-ib/i18n/ar.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/ar.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/de.i18n.json b/packages/rocketchat-webrtc-ib/i18n/de.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..332a0f2d96ec9f088cf0f1b6b0be12f90dd63439 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/de.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "Video-Chat", + "Remote" : "Entfernt", + "Setup" : "Einrichten", + "Stop_Video" : "Video stoppen" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/el.i18n.json b/packages/rocketchat-webrtc-ib/i18n/el.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..d4fd3d2608dbc29a3a26e581f8099b217230d18b --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/el.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "Συνομιλία μÎσω βίντεο", + "Remote" : "ΑπομακÏυσμÎνο", + "Setup" : "ΡÏθμιση", + "Stop_Video" : "Σταμάτημα Βίντεο" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/en.i18n.json b/packages/rocketchat-webrtc-ib/i18n/en.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..84f089985d26760c2b67f08e8f39fda77693317d --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/en.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "Video Chat", + "Remote" : "Remote", + "Setup" : "Setup", + "Stop_Video" : "Stop Video" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/es.i18n.json b/packages/rocketchat-webrtc-ib/i18n/es.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/es.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/fa.i18n.json b/packages/rocketchat-webrtc-ib/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/fi.i18n.json b/packages/rocketchat-webrtc-ib/i18n/fi.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..ab7aed7ca7bf0c85af125591c4c4bc97004b1bb8 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/fi.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "Videokeskustelu", + "Remote" : "Etä", + "Setup" : "Asennus", + "Stop_Video" : "Pysäytä video" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/fr.i18n.json b/packages/rocketchat-webrtc-ib/i18n/fr.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..41647a551e7524ba7b873110908e3c92672e119e --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/fr.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "Tchat vidéo", + "Remote" : "À distance", + "Setup" : "Configuration", + "Stop_Video" : "Arrêter la vidéo" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/he.i18n.json b/packages/rocketchat-webrtc-ib/i18n/he.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/he.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/hr.i18n.json b/packages/rocketchat-webrtc-ib/i18n/hr.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..524e429ddff61d050ca2116e246765654635fd51 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/hr.i18n.json @@ -0,0 +1,4 @@ +{ + "Video_Chat" : "Video Chat", + "Stop_Video" : "Zaustavi Video" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/hu.i18n.json b/packages/rocketchat-webrtc-ib/i18n/hu.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/hu.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/it.i18n.json b/packages/rocketchat-webrtc-ib/i18n/it.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/it.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/ja.i18n.json b/packages/rocketchat-webrtc-ib/i18n/ja.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/ja.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/km.i18n.json b/packages/rocketchat-webrtc-ib/i18n/km.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..98eedeb7c4d9acefad2f4c9d31460f5727004a67 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/km.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "ការ​ជជែក​កំសាន្ážâ€‹áž‡áž¶â€‹ážœáž¸ážŠáŸáž¢áž¼", + "Remote" : "ពី​ចម្ងាយ", + "Setup" : "ការ​ដំឡើង", + "Stop_Video" : "បញ្ឈប់​វីដáŸáž¢áž¼" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/ko.i18n.json b/packages/rocketchat-webrtc-ib/i18n/ko.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..36785947aeb6b060fe0cbc2efb2a3119658b9a5a --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/ko.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "í™”ìƒ ì±„íŒ…", + "Remote" : "ì›ê²©", + "Setup" : "ì„¤ì •", + "Stop_Video" : "í™”ìƒ ì±„íŒ… ì •ì§€" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/ms-MY.i18n.json b/packages/rocketchat-webrtc-ib/i18n/ms-MY.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..ac751a74fe79bb862d2c676aa6dacb85e3fb0377 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/ms-MY.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "Perbualan Video", + "Remote" : "Kawalan Jauh", + "Setup" : "Persediaan", + "Stop_Video" : "Berhentikan Video" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/pl.i18n.json b/packages/rocketchat-webrtc-ib/i18n/pl.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..ff189e84d63917ed87ce74a18ee9485820b95cc3 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/pl.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "Chat wideo", + "Remote" : "Zdalny", + "Setup" : "Opcje", + "Stop_Video" : "Zatrzymaj wideo" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/pt.i18n.json b/packages/rocketchat-webrtc-ib/i18n/pt.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..f9378d46d1792b968c70b08388c9d2d3a5762522 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/pt.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "Iniciar Video", + "Remote" : "Remoto", + "Setup" : "Configurar", + "Stop_Video" : "Encerrar Video" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/ru.i18n.json b/packages/rocketchat-webrtc-ib/i18n/ru.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..ebedecb615ddd6aaf263650266a4b51a2ddf3671 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/ru.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "Видео чат", + "Remote" : "Удалённый", + "Setup" : "УÑтановить", + "Stop_Video" : "ОÑтановить видео" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/sv.i18n.json b/packages/rocketchat-webrtc-ib/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..cd7a07141b6d5772936ab1de036537e111b23cc0 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/sv.i18n.json @@ -0,0 +1,5 @@ +{ + "Video_Chat" : "Videochatt", + "Setup" : "Inställningar", + "Stop_Video" : "Stoppa video" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/ta-IN.i18n.json b/packages/rocketchat-webrtc-ib/i18n/ta-IN.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/ta-IN.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/tr.i18n.json b/packages/rocketchat-webrtc-ib/i18n/tr.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..c1fcf250151e1e6315d706a28a2b184455df82d6 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/tr.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "Görüntülü Sohbet", + "Remote" : "Uzak", + "Setup" : "Kurulum", + "Stop_Video" : "Vidyoyu durdur" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/ug.i18n.json b/packages/rocketchat-webrtc-ib/i18n/ug.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/ug.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/uk.i18n.json b/packages/rocketchat-webrtc-ib/i18n/uk.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/uk.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/zh.i18n.json b/packages/rocketchat-webrtc-ib/i18n/zh.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..efbd1904e4be69a0cffda79dcd3523cc928f59f6 --- /dev/null +++ b/packages/rocketchat-webrtc-ib/i18n/zh.i18n.json @@ -0,0 +1,6 @@ +{ + "Video_Chat" : "视频", + "Remote" : "远程", + "Setup" : "设置", + "Stop_Video" : "åœæ¢è§†é¢‘" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc/i18n/en.i18n.json b/packages/rocketchat-webrtc/i18n/en.i18n.json index c52ef5d8daa579f6f2609b1e03080487339d7e57..e88088a6e9e442e2b3388dc61b7e52f2203014bb 100644 --- a/packages/rocketchat-webrtc/i18n/en.i18n.json +++ b/packages/rocketchat-webrtc/i18n/en.i18n.json @@ -1,5 +1,9 @@ { + "WebRTC_Description" : "", "WebRTC_Enable_Channel" : "Enable for Public Channels", + "WebRTC_Enable_Channel_Description" : "", "WebRTC_Enable_Direct" : "Enable for Direct Messages", - "WebRTC_Enable_Private" : "Enable for Private Channels" -} \ No newline at end of file + "WebRTC_Enable_Direct_Description" : "", + "WebRTC_Enable_Private" : "Enable for Private Channels", + "WebRTC_Enable_Private_Description" : "" +} diff --git a/packages/rocketchat-webrtc/i18n/fa.i18n.json b/packages/rocketchat-webrtc/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc/i18n/fi.i18n.json b/packages/rocketchat-webrtc/i18n/fi.i18n.json index 6f31cf5a2e622e523ae008338072897b8e56c993..15ae2233e745e12532ba1226aeffc173fcdbf6e2 100644 --- a/packages/rocketchat-webrtc/i18n/fi.i18n.json +++ b/packages/rocketchat-webrtc/i18n/fi.i18n.json @@ -1 +1,5 @@ -{ } \ No newline at end of file +{ + "WebRTC_Enable_Channel" : "Ota käyttöön julkisilla kanavilla", + "WebRTC_Enable_Direct" : "Ota käyttöön yksityisviesteissä", + "WebRTC_Enable_Private" : "Ota käyttöön privaattiryhmissä" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc/i18n/hr.i18n.json b/packages/rocketchat-webrtc/i18n/hr.i18n.json index 6f31cf5a2e622e523ae008338072897b8e56c993..54271ccbfcca706512a7ded8e23d222b7cce2ff0 100644 --- a/packages/rocketchat-webrtc/i18n/hr.i18n.json +++ b/packages/rocketchat-webrtc/i18n/hr.i18n.json @@ -1 +1,5 @@ -{ } \ No newline at end of file +{ + "WebRTC_Enable_Channel" : "Omogući za javne kanale", + "WebRTC_Enable_Direct" : "Omogući za izravne poruke", + "WebRTC_Enable_Private" : "Omogući za privatne kanale" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc/i18n/km.i18n.json b/packages/rocketchat-webrtc/i18n/km.i18n.json index 6f31cf5a2e622e523ae008338072897b8e56c993..33241c7353ac8b61da73abfdfc8191fb3476e3fa 100644 --- a/packages/rocketchat-webrtc/i18n/km.i18n.json +++ b/packages/rocketchat-webrtc/i18n/km.i18n.json @@ -1 +1,5 @@ -{ } \ No newline at end of file +{ + "WebRTC_Enable_Channel" : "អនុញ្ញាážáž·áž‚្រប់ប៉ុស្ážáž·áŸážŸáž¶áž’ារណ", + "WebRTC_Enable_Direct" : "អនុញ្ញážáž·ážŸáž¶ážšáž•áŸ’ទាល់", + "WebRTC_Enable_Private" : "អនុញ្ញាážáž·áž‚្រប់ប៉ុស្ážáž·áŸáž¯áž€áž‡áž“" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc/i18n/pt.i18n.json b/packages/rocketchat-webrtc/i18n/pt.i18n.json index 6f31cf5a2e622e523ae008338072897b8e56c993..a0c6d126b9939b7bf501792fe7b199b638ac3e3d 100644 --- a/packages/rocketchat-webrtc/i18n/pt.i18n.json +++ b/packages/rocketchat-webrtc/i18n/pt.i18n.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "WebRTC_Enable_Direct" : "Ativar Mensagens Diretas" +} \ No newline at end of file diff --git a/packages/rocketchat-webrtc/i18n/sv.i18n.json b/packages/rocketchat-webrtc/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-webrtc/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/en.i18n.json b/packages/rocketchat-wordpress/i18n/en.i18n.json index 06727b945fe9491bde227d219837827b0bff01fd..129f9acb958838396960ecdd4ef90e0da00516af 100644 --- a/packages/rocketchat-wordpress/i18n/en.i18n.json +++ b/packages/rocketchat-wordpress/i18n/en.i18n.json @@ -1,6 +1,10 @@ { "API_Wordpress_URL" : "WordPress URL", + "API_Wordpress_URL_Description" : "", "Accounts_OAuth_Wordpress" : "WordPress Login", + "Accounts_OAuth_Wordpress_Description" : "", "Accounts_OAuth_Wordpress_id" : "WordPress Id", - "Accounts_OAuth_Wordpress_secret" : "WordPress Secret" -} \ No newline at end of file + "Accounts_OAuth_Wordpress_id_Description" : "", + "Accounts_OAuth_Wordpress_secret" : "WordPress Secret", + "Accounts_OAuth_Wordpress_secret_Description" : "" +} diff --git a/packages/rocketchat-wordpress/i18n/fa.i18n.json b/packages/rocketchat-wordpress/i18n/fa.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/fa.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/fi.i18n.json b/packages/rocketchat-wordpress/i18n/fi.i18n.json index 6354e33657240c11d0d26f4bb62648c46857aabb..1cdd8e853ede09a501e4b2acedb59c68026dd3bf 100644 --- a/packages/rocketchat-wordpress/i18n/fi.i18n.json +++ b/packages/rocketchat-wordpress/i18n/fi.i18n.json @@ -1,6 +1,6 @@ { "API_Wordpress_URL" : "WordPress URL", - "Accounts_OAuth_Wordpress" : "WordPress Kirjaudu sisään", + "Accounts_OAuth_Wordpress" : "WordPress-kirjautuminen", "Accounts_OAuth_Wordpress_id" : "WordPress ID", "Accounts_OAuth_Wordpress_secret" : "Wordpress Secret" } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/sv.i18n.json b/packages/rocketchat-wordpress/i18n/sv.i18n.json new file mode 100644 index 0000000000000000000000000000000000000000..6f31cf5a2e622e523ae008338072897b8e56c993 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/sv.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/private/images/icon.ai b/private/images/icon.ai index b2a399f35d977b1607d7d09f9103be6040fbc957..9279c915b9e302e6c7df531eb92b694dc6e61cc8 100644 --- a/private/images/icon.ai +++ b/private/images/icon.ai @@ -1,5 +1,5 @@ %PDF-1.5 %âãÏÓ -1 0 obj <</Metadata 2 0 R/OCProperties<</D<</OFF[5 0 R 6 0 R 7 0 R]/ON[8 0 R 33 0 R 51 0 R 69 0 R 70 0 R 90 0 R 91 0 R 111 0 R 112 0 R 135 0 R 136 0 R 159 0 R 160 0 R 182 0 R 183 0 R]/Order 184 0 R/RBGroups[]>>/OCGs[5 0 R 6 0 R 7 0 R 8 0 R 33 0 R 51 0 R 69 0 R 70 0 R 90 0 R 91 0 R 111 0 R 112 0 R 135 0 R 136 0 R 159 0 R 160 0 R 182 0 R 183 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 47054/Subtype/XML/Type/Metadata>>stream +1 0 obj <</Metadata 2 0 R/OCProperties<</D<</OFF[5 0 R 6 0 R 7 0 R]/ON[8 0 R 33 0 R 51 0 R 69 0 R 70 0 R 90 0 R 91 0 R 111 0 R 112 0 R 135 0 R 136 0 R 159 0 R 160 0 R 182 0 R 183 0 R 204 0 R 205 0 R 226 0 R 227 0 R 248 0 R 249 0 R]/Order 250 0 R/RBGroups[]>>/OCGs[5 0 R 6 0 R 7 0 R 8 0 R 33 0 R 51 0 R 69 0 R 70 0 R 90 0 R 91 0 R 111 0 R 112 0 R 135 0 R 136 0 R 159 0 R 160 0 R 182 0 R 183 0 R 204 0 R 205 0 R 226 0 R 227 0 R 248 0 R 249 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 47430/Subtype/XML/Type/Metadata>>stream <?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> @@ -17,15 +17,15 @@ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/"> <xmp:CreatorTool>Adobe Illustrator CS6 (Macintosh)</xmp:CreatorTool> <xmp:CreateDate>2015-07-14T15:28:51-03:00</xmp:CreateDate> - <xmp:ModifyDate>2015-08-11T22:47:20-03:00</xmp:ModifyDate> - <xmp:MetadataDate>2015-08-11T22:47:20-03:00</xmp:MetadataDate> + <xmp:ModifyDate>2015-11-15T14:09:12-02:00</xmp:ModifyDate> + <xmp:MetadataDate>2015-11-15T14:09:12-02:00</xmp:MetadataDate> <xmp:Thumbnails> <rdf:Alt> <rdf:li rdf:parseType="Resource"> <xmpGImg:width>256</xmpGImg:width> <xmpGImg:height>256</xmpGImg:height> <xmpGImg:format>JPEG</xmpGImg:format> - <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A5ZXOgdK6uKurirq4q6uK
urirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4
q6uKurirq4q6uKtVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXV
xV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVargV1cVdXFXVxV1cVdXFXVxV1cVdXFX
VxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cV
W1wJdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdX
FXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFWq4pdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVd
XFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFVtcCurirq4q6uK
uriq5I5H+wpb5An9WQnkjH6iA3YtPkyfRGUvcCVZbC8PSI/TQfrzHOvwj+IOwh2FrJcscvsH3rjp
t6P91/iv9cgO0sH877D+ptPs7rR/k/8AZR/Wsazul6xN9Ar+rLY6zFLlIONl7I1UOeOXyv7lE7Gh
2PhmSDbr5RINFquLF1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVx
V1cVdXFXVxVquKXVxV1cVXRhGdQ7cVJ3alaZDJIiJIFltwQhKYE5cMTzNXXwTu306zQBgvqE7hm3
/szmM/aGaRq+HyG37X0zQ9gaPEBIDxPOW/2ckWAAKAUA7DMAknm7yMQBQ2DsCXYq7FVskUUgo6Bh
7iuWY8sofSSGjPpcWYVkiJe8IGfR4WqYiUPgdx/XNng7XnHaY4h9rzWt9k8M98R4D3cx+v70suLa
aBqSLTwbsfpzd4NTDKLiXi9d2bm0sqyRrz6H4qVcyHBdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXF
XVxV1cVdXFXVxV1cVdXFXVxV1cVdXFVtcCurirq4q6uKo/TtRMLCOQ1iPQ/y/wBmavtDQDIOKP1/
e9N2D24dPLw8h/dH/Y/s7/mnYIIqOmc0Q+kAgiw7FXYq7FXYq7FWnRHUq4DKeoOShMxNg0WvLhhk
iYzAlE9Ck99pjRAyQ1aPuvcf2Z0Oi7SE/TPaX3vAds+zksF5MPqx9R1j+sfd9qXgEmgFT4DNqSBz
eWjEyNAWqLbXLdInP+xOVHU4xzlH5hyodnaiXLHM/wCaVwsrw/7pb7sgdbh/nBvHY+rP+Tn8nGyv
B/ulvuxGtw/zgg9j6sf5OfyWtbXK9YnHzU5ManGeUo/MNM+z9RHnjmP80qZBBoRQ+By0EHk4somJ
oimq4WLq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirVcUurirq4q6uKuriqb6Pe8h9Wc7j+
7Pt4Zoe1dJX7yPx/W917L9qmQ/LzO4+n9Xw6JpmkezdirsVdirsVdirsVaCqoooAHgMJkTzYxgIi
gKbwMnYq7FXYq0yqwowBHgcIkRyYzhGQoi1CTT7OT7USj3X4f1ZlQ12aPKR+/wC91ufsXSZOeOPw
9P3UhZdEiO8UhU+Dbj+GZuPtiY+oAuk1PsjiO+OZj79x+j9KBn0u7i34818U3/Drmyw9o4p9aPm8
7q/Z7VYd+Hjj3x3+zn9iEOxoeuZ1ujII2Lq4VdXFXVxV1cVdXFXVxV1cVdXFXVxVbgV2KuxV2Kux
Vcjsjq6mjKag/LIziJAg8i2YcsscxOJqUTYZRBKJoUkHRwDTONzYzCZiej7DpNQM+KOQcpC1+VuQ
7FXYq7FVSCCeeVYoI2llfZY0BZifYDfEBEpACzsGV6V+Uv5g6mFaLSJYIzv6l0VgoD/kyFX+5cuj
p5no67N2xpsfOYPu3+5ldj/zjn5nkAN7qVnbg9o/UmYfOqxj8cuGjl1LrsntLhH0xkfkP1p3b/8A
ONlio/0jXZZD/wAV26x/rkfJjRDvcSXtPLpAfP8AYjR/zjj5YoK6pe17/wB1/wA0ZL8nHvLV/oly
/wA2P2uP/OOPlihpql7Xt/df80Y/k495X/RLl/mx+1BXH/ONlkw/0fXZIzT/AHZbq+/0SJkToh3t
sfaeXWA+f7Ejv/8AnHPzPECbLUrO5A/Zk9SFj8qLIPxyB0cuhcvH7S4T9UZD5H9TFdW/Kb8wdMBa
bR5Z4x+3albioHfjGWcfSMplp5jo7HD2vpsnKYHv2+9ic0E0ErRTxtFKho0bgqwPuDvlJDsYyBFh
ZilQuLK2uB+8T4v5xs335k4NXkxfSdu7o67W9lafUj1x37xsfn+tKbvSJ4qtF+9T2+0PozeabtOE
9pek/Y8R2j7M5sNyx/vIf7IfDr8PkgM2bzTWKuxV2KuxV2KuxV2KtVwK6uKurirq4q6uKurirINF
YmyAP7LED9f8c5rtWNZveA+l+y0ydIAekiP0/pR2a16J2Ksh8q+QfNPmeUDSrNmt60e8l/dwL41c
9SPBan2yzHilPk4Wr7Qw6ces793V7F5Z/wCce9AtAk2vXL6lON2t4iYYB7VH7xvnVflmbDRgc93m
dV7R5JbYxwjv5n9X3vStI0DRNHh9HSrGCyjoAwhRVLU/mYCrfTmVGAjyDoc2oyZTc5GXvR+SaXYq
7FXYq7FXYq7FXYqgNX8v6JrEPo6pYwXqUoPWRWK1/lYjkv0HIygJcw3YdRkxG4SMfc8z8zf849aF
dh5tAun06c1ItpiZoD7An94vzq3yzFnowfp2d9pfaPJHbKOId42P6vueP+avIXmjyxLTVbNkgJ4x
3kfxwOe1HHQ+zUPtmFkxShzen0naGHUD0Hfu6seytzEFfaZFcAunwTfzdj882Gk7Qli2O8Xn+1uw
MWpuUfRl7+h9/wCtIpoZYZDHIOLDtnR4ssZx4omw+danS5MEzDIKkFOuWOO6uKurirq4q6uKurir
VcUurirq4q6uKuriq+CGSeVY4xVmyvLljjiZS5ByNLpZ58gxwFyLJrO1W2gESmtN2PiTnJ6nOcs+
Ivq3ZugjpcIxg33nvKLtbW5u7iO2tYnnuJmCRRRgszMegAG5ykC3MnMRFk0A9z8gfkNbW6x6h5rA
nuDRo9LRv3ad/wB8y/bP+SPh+eZ+HSdZPJdo+0BPpw7D+d+p7DBBBbwpBBGsMMY4xxRqFVQOwUbD
M0CnmJSMjZ3K/FDsVdirsVdirsVdirsVdirsVdirsVWXFvBcQvBcRpNBICskUihkZT1DKagjARbK
MjE2DReOef8A8hreZZNR8p0hmFWk0tz8Df8AGFz9k/5LbeBHTMLNpOsXp+zvaAio5tx/O/W8Ouba
4tbiS3uYmhuImKSxSAqysNiGB3BzBIp62MhIWDYKCvbKK6i4ts4+w/cHMnS6qWGVjl1Dre1Oy8er
x8MtpD6Zd37GNzRSQytHIKMvXOpxZYziJR5F8t1OmngyHHMVILK5Y0Orirq4q6uKuriq2uBXVxV1
cVdXFXVxVkelWIt4ebj99IKt7DsM5ntDVeJOh9IfTfZ/soabFxSH7yfPyHd+vz9yaWVndXt3DZ2k
TT3M7iOGJBVmZjQAZgAWaDvZzEImUjQD6a/LH8r7LynZi7uwlxr06/vp+qxA/wC64q/8M3f5ZtMG
AQFnm8F2r2rLUy4Y7Yx9vmWeZkOndirsVdirsVdirsVdirsVdirsVdirsVdirsVdirAvzO/K6x81
2bXlmqW+vQr+5n6CYAbRy/8AGrdvlmPnwCYsc3cdldqy08uGW+M/Z5h8zXdpc2d1La3UTQ3MDmOa
JxRlZTQgjNWRT3sJiQBBsFKtWsRcQ+og/exio9x3GbDs/VeHLhP0l0HtD2UNRi44j95D7R3fq/ax
2udK+aOrirq4q6uKurirVcCXVxV1cVdXFUbpFt694vIVSP42+joPvzB7Qz+HjNczs7z2f0Pj6kX9
MPUf0fayXOYfT3vn5C+Q47Ww/wAU38Vbu6BTTlYf3cPRpB4NJ0H+T/rZsNJiocReO9oO0DKXgxOw
+r393w+/3PYMzXmXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8c/PvyGlxZjzXYR0ub
cLHqaqPtxfZSXb9pD8J/yf8AVzC1eLbiD1Hs92hUvBlyP0+/u/H6Xg2a969jOq231e7YKKI/xr9P
UffnUaDP4mMXzGz5d29ofy+pIH0y9Q/T9qDrma6V1cVdXFXVxVbXFLq4q6uKurirIPL8XG1eU9ZG
p9C/21zn+1sl5BHuH3voPsnp+HBKfWcvsH7bZN5a0aTWtf0/SkJU3s6RM434qzfE3+xWpzWQjxEB
6LVZhixyn/ND7GtbaC1tora3QRwQIsUUa9FRBxUD5AZugKfMZyMiSeZVMLF2KuxVjPm38xvKvlUi
PU7ktdsOS2UA9SYqe5FQFH+sRlWTNGHNz9H2Zm1G8B6e88mO6d+f3kO8uVglF5YqxoJ7mJPTBPiY
pJSPuyoauBc7L7PamIscMvcf1gPRLe4t7mCO4t5FmglUPFLGQysp3BVhsRmSDbpJRMTRFEKmFi7F
WC+ZPzn8kaFdvZyTy31zEeM0dkiyBGHUF3aNKjvRjmPPUwiadvpuxNRmjxUIj+l+Cu8tfnJ5J1+8
SyimlsbqUhYYr1Fj5segV1aRKnsC1T2ww1MJGl1XYmowx4iBIf0WcZe6h2Kqdzc29tBJcXMqwwRK
XllkYKiqNyWY7ADATTKMTI0BZLzrUfz+8h2ly0EQvL5VNPXt4k9M/L1ZImP3ZjHVwDu8fs9qZCzw
x95/UCyTyl+YnlXzTyTS7o/WkHJ7OZfTmC+IXcMPHiTTLceaM+Tg6zs3Np95jbvHJkuWuA7FXYqp
Xlpb3lpNaXKCS3uI2imjPRkcFWH0g4CLFMoTMZCQ5h8c+YdIl0bXb/SpDyaynkhDn9pUYhW/2S0O
aWceEkPp+mzDLjjMfxC2M+YIq20cvdGp9DD+zNn2TkqZj3h5r2s0/Fhjk6xlXwP9gSCudA8A6uKu
rirq4q1XArq4q6uKurirKdIXjp0I8QT95Jzl9ebzSfU+wYcOjxjyP2kvTvyJs1uPzDtZCK/VYJ5h
7Ep6df8AkpkNKPWx7fnWlI7yB+n9D6azaPAuxV2KoDzBqq6RoWoaoV5fUreWcIf2jGhYL9JFMjOV
Alu02HxMkYfziA+O9S1G91K/nv72UzXdy5kmlbqWb+HgM0siSbL6dixxhERiKAQ2Bm9w/wCcdfMt
1IdQ8uTuXhhj+uWYJ+wOYSVR7Eup+dfHM/Rz5xeT9pNKBw5RzOx/Q9szOeUYJ+dHmW70LyTK1m5i
ur+VbNJVNGRXVndl9+CEV7VzH1MzGG3V3HYeljm1A4uURb5ezVPfuxV9Sfk35lu9f8kQS3jmW7sZ
XspZm3Z/TVWRiT1PB1BPc5ttNMyhu+fdt6WOHUER5SHF+PizjL3UvEf+civMt3HLp/lyF2jt5Ivr
l2o29SrlIlPspRjTxp4ZgayZ2i9Z7N6WJEsp53Q/S8RzBerRWmale6ZqFvqFlKYbu1cSQyDsy/rH
iMMZEGwwy4o5ImMhYL7E0LU11XRbDU1AUXtvFccRvx9VA/H6K0zdQlYBfMdRi8PJKH80kfJHZJpd
irsVfMP542scH5i3zpt9YiglYAU+L0lQ/fwrmq1Q9Ze/7BmTpY+RP3vNNZWumze3E/cwy3s81mj+
OiPaGN6Kfw/3QYvXOnfLnVxV1cVdXFWsVdirsVdirKtHblp0J8AR9zEZy+vFZpPqfYE+LR4/cfsJ
enfkTeLb/mHaxk0+tQTwj3IT1Kf8k8hpT62Pb8L0pPcQf0fpfTWbR4F2KuxVAeYNKXV9C1DSy3H6
7bywBz+yZEKhvoJrkZxsEN2mzeHkjP8AmkF8d6lp17pt/PYXsRhu7ZzHNE3UMv8ADwOaWQINF9Ox
ZIziJRNgobAze4f846+WrqM6h5jnQpDNH9TsyR9scw8rD2BRR86+GZ+jhzk8n7SaoHhxDmNz+h7Z
mc8owT86PLV3rvkmVbNDLdWEq3iRKKs6orI6r78HJp3pmPqYGUNujuOw9VHDqBxcpCny9mqe/dir
6k/Jvy1d6B5IgivEMV3fSveywtsyeoqqikHoeCKSOxzbaaBjDd8+7b1Uc2oJjyiOH8fFnGXupeI/
85FeWruSXT/McKNJbxxfU7thv6dHLxMfZi7CvjTxzA1kDtJ6z2b1UQJYjzux+l4jmC9WitM0291P
ULfT7GIzXdy4jhjXux/UB1J7YYxJNBhlyxxxMpGgH2JoWmLpWi2GmKQwsreK35Dbl6SBOX00rm6h
GgA+Y6jL4mSU/wCcSfmjsk0uxV2KvmH88byG5/MO9WP/AI94oYXP+UEDH/iWavVH1ve9gQI0ovqS
801luOmze/ED6WGWdni80fx0X2hnw6OfnX+6DFs6d8vdirsVdirVcCXVxV1cVdXFWQ+XZ+Vq8R6x
tUfJv7Qc0HauOpiXeHv/AGT1HFglj6xl9h/bbKPLWsyaLr+n6qgLGynSVkG3JVb4l/2S1Ga2EuEg
vR6rCMuOUP5wfY1rcwXVtFc27iSCdFlikXoyOOSkfMHN0Db5jOJiSDzCphYuxV2KsZ82/lz5V81E
SanbFbtRxW9gPpzBR2JoQw/1gcqyYYz5ufo+082n2gfT3Hkx3TfyC8h2dys0pu74KQRDcyr6dR4i
JIifvyqOkgHOy+0OpkKHDH3D9ZL0S3t7e2gjt7eNYYIlCRRRgKqqNgFUbAZkgU6SUjI2TZKphYux
VgvmT8mPJGu3b3kkEtjcynlNJZOsYdj1JR1kSp70UZjz00JG3b6btvUYY8NiQ/pfgLvLX5N+SdAv
EvYoZb66iIaGW9dZODDoVRVjSo7ErUdsMNNCJtdV23qM0eEkRH9FnGXuodiqnc21vcwSW9zEs0Eq
lJYpFDIynYhlOxBwEWyjIxNg0Q861H8gfId3ctPEbyxVjX0LeVPTHy9WOVh9+Yx0kC7vH7Q6mIo8
MveP1EMk8pfl35V8rcn0u1P1pxxe8mb1JivgG2Cjx4gVy3HhjDk4Os7SzajaZ27hyZLlrgOxV2Ko
XVNRt9O0+e9uHCRQqWLMaDYd8BNMoxMiAOZfHuv6tLq+t3upyklruZ5BypUKT8INPBaDNNOXFIl9
O0uAYsUYD+EMY8xzcbeOIHd25H5KP7c2XZWO5mXcHmvazUcOGOPrKV/Af2sfrm+eCdXFXVxV1cVW
1xV1cVdXFXVxVHaNdi3vVLGkcnwOfn0P35ha/D4mM1zG7uuwdb+X1Iv6Zek/o+1lecy+nve/yG8+
pdWP+Fb+Sl1agvprsftw9Wj+adR/k/6ubDSZbHCXj/aDs/hl40eR+r39/wAfv972HM15h2KuxV2K
uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVbJJHFG0kjBUUVZjsABirw386/zA9aL9B2T09UVmpUFY
j/NT9qTw/l7fFmHq8tDhD0vs/wBn8UvGkPTH6fM9/wAPv9zxfNc9kxPV7wXN6zKaxp8CfId/pOdP
ocHh4wDzO75d25rvzGoJH0x9I+HX4lBVzMdO6uKurirq4q1XAl1cVdXFXVxV1cVZRomoi5g9Jz+/
iFDX9pex/rnO6/S+HLiH0l9H9n+1PzGLgkf3kPtHf+v9qcWV5dWV3DeWkrQXMDiSGVDRlZTUEZgA
0bDv5wE4mMhYL6a/LH80LHzZZraXZS316Ff31vWizADeSIH/AIZe3yzaYM4mKPN4LtXsqWnlxR3x
nr3eRZ5mQ6d2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVC3+p2djHzneh/ZjG7N8hiryv8AMb8z
VsYDEvFrpxW1sgagf8WTU7DsO/buRRnziA83bdl9lS1MrO2Mcz+gfjZ4NdXVxdXElzcSGWeVi8kj
dSTmqJJNl7/HjjCIjEUAk+uaiLeD0Yz++lFP9Ve5zYdn6XjlxH6Q897Q9qeBj8OJ/eT+wd/6mMVz
oXzp1cVdXFXVxV1cVaril1cVdXFXVxV1cVXwTywSrLEeLqag5DJjE4mJ5Fu02onhmJwNSDL9PvFv
LZZgOJ6MvgRnL6nAcU+F9S7N1w1WEZAK6EeaOtbq5tLiO5tZXguIWDxSxkqysOhBG4ykGnNnASFE
WC+0rWRpbWGVvtOis1OlSAc3YfLJiiQq4WLsVdirsVdirsVdirsVdirsVdirsVQN3remWtRJOrOP
91p8Tfh0+nFWP6l5wmZH+rAW8SglpnILBR1O/wAK4pAJNDm8l82/mlFG8kGkP9buzUSXz/FGp6fB
X7Z9/s/PMLNqwNovTdnez8perNsP5vX4933+55fcXE9zO89xI0s0h5PI5JYk9yTmATfN66EBEARF
AJfqWpRWUVTRpWH7uPx9z7Zk6XSyyy/o9S6ztXtWGkhZ3meQ/HRic88s8rSyNydjUnOlxwEIiI5B
8y1GeeaZnM3IrK5NqdXFXVxV1cVdXFVuBXYq7FXYq7FXYqyry6hXTQT+27MPl0/hnPdpSvL7g+j+
zMDHSAn+KRP6P0JxaW0l1dQ20QrLO6xoPFnIUficwALd9OQiCT0fascaxxrGgoqAKo9gKDN4+Vk2
bXYodiqye4ht4mlmcJGu7McVYxN5xn+sN6MKm36KHry+dQaYqrRec4j/AHtqy+6sD+sDFUSnm/S2
+0kqn3UH9TYqqDzVpBO7uPcof4Yq4+atIB2dz7hD/HFVN/N+lj7KSsfZVH62xVDS+c4h/dWrN7sw
H6gcVQU/m7Un2jWOIeIBY/iafhiqTar5idIjLqV+IYTtWWQRoT4U+EZGUgObbiwTyGoAyPkwbWfz
U0a1Bj06N76Xs5rHEOvdhyNP9WnvmNPVxHLd3ul9ncs98h4B8z+r8cnn+u+bdc1tqXk/G3rVbWL4
Ih9FSW/2ROYWTNKfN6fR9m4dP9A37zz/AB7kmypzkr1PXILWscNJZ+lP2V+f9M2Gl0Esm8tovPdq
+0GPT3DH68n2D3/qYzNPLPIZJWLu3UnN9CEYCgKD5/nzzyzM5m5FZk2l2KuxV2KuxV2KtVwK6uKu
rirq4q6uKr4Y3mlSKMVdyAo9zkZzEQSeQbcOGWSYhH6pGmb28CwQRwr9lFC/OnfOUyTM5GR6vrem
wDDjjjHKIpnX5O+X31nz3YVWtvp5+u3B7AQkGP75CuWaeHFMeTg9tajwtPLvl6R8f2PqbNs+euxV
LtT12xsAVZvUn7Qr1/2R7YqwnzB5j5QyXuozLBZwDkRvwUdOnUsenie2RlIRFltw4ZZZCEBci8e1
H80defU3msCsNgDSK2kRWqo7u32qnwVtvxzXS1cr25PaYPZ/AMYExc+ps/Z/Yi7T83tRWv1zT4Zj
Xb0XaLb/AGXq5Ia09Q0ZPZnGfpnIe+j+pMrb83dOYf6Tp80R8I3WQf8ADenlg1o6hxJ+zM/4Zg+8
V+tE/wDK2vLf/LPef8BF/wBVcl+cj3Fq/wBDWf8AnQ+39Tv+VteW/wDlnvP+Ai/6q4/nI9xX/Q1n
/nQ+39SFufze05R/o2nzSnwkdY/+I+pkTrR0DbD2Zn/FMD3C/wBSXXf5vai1Pqenwwmu/rO0u3+x
9LKzrT0Dl4/ZnGPqnI+6h+tI7/8AMHzXeB1N6beNv2IFWOnycD1P+GyqWomerscPY2mx/wANnz3/
AGfYkE9xcXErTXErzStu0kjFmPzJqcpJt2UICIoCgp4GSEvNVsrQESSVcf7rXdv7PpzJw6TJk5Db
vdZre19Ppvqlcv5o3P7Pix+/1+6uapH+5iPZT8R+Zzcafs+ENz6i8X2h7RZs/ph6IeXM+8/qSyuZ
7z7q4q6uKurirq4q6uKurirq4q1XFXVxV1cVdXFXVxVkfl3TCi/XJR8TCkIPYH9r6c0naOqs8A+L
3Ps12VwDx5jc/T7u/wCPTy96eZqnrn0V+T+laX5W8vPNfycdY1FhJcx8GJjjWojirSlRUsfc07Zt
dNi4Y78y8D23rxny1H6I8vPvLM7jzhZKP3ETyt/lUQfxP4ZkOmSa98y6ncgqriCM/sx7H6W64qxf
XvMmlaJb+vfzUdq+nAvxSyH/ACV/idsryZYwG7m6PQZdRKoDbqegePeZvNmpa/cBpz6VrGSYLVTV
Vr3J25NTv91M1eXMZnd7vQdnY9NGo7yPM96SZU561JYpP7t1f/VIP6slKBHMNePNCf0kH3FdkWx2
KuxV2KrJJoYxWR1Qf5RA/XkowJ5C2vJmhD6pCPvNISbW9Mi6zhj4JVv1bZkQ0WWXR1ubtzSY+cwf
dv8AdsgLjzTENreEt/lOafgK5mY+yz/Efk6bUe1kBtjgT/W2+wX96VXWtajcVDS8EP7CfCP65n4t
FihyFnzee1XbmqzbGXDHujt+37UFXMt1Dq4q6uKurirq4q6uKurirq4q6uKuriq2uBLq4q6uKuri
qc6JozXLC4uBS3Bqqn9s/wBM12t1vB6Y/V9z03YXYhzEZcg/djkP537PvZRmhfQGefln5bs7q5Gq
3csTtA3+jWgZWfmP92Otaih+yD338K5mlxAmy8729rpwj4cAd+cq6dw/T+K6kxCKWY8VHUnYZsLe
MESeQSe/84+WbFSZ9RhLAkFIm9VqjsVj5EfTlcs8B1c7D2VqcnKB+O33sL1z82J5A0WjW/og/wDH
1OAz/wCxjFVH0k/LMTJrCfpeg0fs5GO+U8XkOXz5/cwO6u7q7ne4upWmnfd5HJZj9JzDJJNl6THj
jCPDEUAhpp4YIzJK4RB1Y4YQMjQFljmzwxRMpnhiGMatr0l1WG3rHB0Y9Gb5+Aze6TQiHqlvL7ng
u1+35Z7hj9OP7Zfs8vn3JQCRuOubB5sFVW7uV+zM6/JiP45A4onmA5EdXljynIfEr/0jqH/LVL/y
Mb+uQ/L4/wCbH5Bt/lLU/wCqT/00v1u/SOof8tUv/Ixv64/l8f8ANj8gv8pan/VJ/wCml+tY13cv
9qZ2+bE/xyYxRHIBqnq8suc5H4lSrk3HdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFW
q4q6uKuriq+CSNJVeRPVRTVoyaV+kZGYJBANFuwTjCYlKPFEdO9ldn5g0yZQpb0GGwR9h9BG2aDN
oMsd/qfQtH7QaXIACfDPceXz5fcmaOjqGRgynoQaj8MwjEjYu8hOMhcTY8m8DJ2KuxVRnvbS3H76
VU9iRX7uuWQwzn9IJcbPrcOH65CPx/QlF55pgQFbVDI387bL93U/hmww9mSP1mnnNZ7U447YY8R7
zsPlzP2JDd31zdyc53LHsOgHyGbbFhjjFRDyGr12XUS4skr+4e4KFctcR1cVdXFXVxV1cVdXFXVx
V1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVW1xS6uKurirq4q6uKrklkjNUYofFSQfw
yMog82cMkoG4kg+SJTV9TUUFzJ9LE/ryk6XEf4Q5sO1tVHlkl87+9edc1Uje4b6AB+oZEaLF/NbT
23qz/lD9n6lGTUb+TZ7iRh4cjT7ssjgxjlEONk7Q1E/qySPxKHqcucN1cVdXFXVxV1cVdXFXVxV1
cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVawK7FXYq7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWq4Eurirq4q6uKurirq4
q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKur
irq4q6uKurirVcVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVd
XFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFXVxV1cVdXFVtcUurirq4q6uKurirq4q6uKurirq4q6uK
urirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirWB
XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
Yq//2Q==</xmpGImg:image> + <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F
XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq
7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYqhL/V9K05Q2oXsFmp3DTypEP+HIwGQHNsx4Zz+mJl7haQ3H5pfl/bmkmtwE/wDF
fOUbe8atlZzw73Nj2TqZcoH7kNH+cP5cO3FdYAP+VBcqPvaMDI/mId7M9i6ofwfbH9aZWX5g+SL0
gQa3acm6LJKsRP0ScTkxmgerRPs3UR5wl8r+5Po5Y5UEkTq8bbq6kEH5EZY4ZBBorsUOxV2KuxV2
KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoXVbi+t9OuJ7C1F7eRoWhtS4i
9Rh+zzIYDBIkDZswxjKQEjwx7+b5w8z/AJs+fdSuJraW5bSkRij2lqDCylTQqzn97Xsfi+jNZPUT
Pk91pOx9NAAgcfmd/wBjCZZpZpGlldpJHNXdyWYnxJOUO2AAFBbil2KuxVHaXrms6VL6um3s9m9a
kwyMgP8ArAGh+nJRkRyLTl0+PIKnES970Xy1+fmv2ZSHXIE1K3GxnjAinA+j9233D55kw1ZHPd0e
q9ncUt8Z4T8x+t7H5Y85eXvM1sZtJuhI6istu3wzR/6yHf6Rt75mwyRlyeX1ehy4DUx8eid5NxHY
q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq83/Nb8rovMNu+r6VGset
wrV41AAuVUfZb/iwD7LfQe1MbPg4txzd72R2scJ4J/3Z/wBj+x87ujo7I6lXUkMpFCCNiCDmte3B
trFLsVdirsVdiqI0/UL7TruO8sZ3trqI1jmjYqwPzH6sIJBsMMmOM48MhYL3n8uPzkttaeLSteKW
uqtRYLkUWKdugBH7Dnw6HtTpmww6ni2PN47tPsQ4rnj3h3dR+sPTZp4YUMk0ixIOruQo8epzKJef
jEnYJXcecPKdvUT61YxkVqrXMIO3XblXIHJEdQ5EdFmlyhL5FCSfmN5FReTa5Zkf5MoY/ctTg8aH
e2jszUH+CXycn5i+RXXkNcswD/NKqn7jQ4+NDvU9magfwS+SMt/N/lO4IEGtWMrGnwpcwk79Ng1c
IyRPUNUtFmjzhL/SlM4ZoZkEkMiyRno6EMD9IyduPKJGxX4odirsVdirsVdirsVdirsVdirsVdir
sVdirsVdirsVdirxD88vIKQOfNWnR0jlYLqkajYO2yzU/wAo7N70Pc5g6rF/EHrewO0b/cz6fT+r
9Tx3MJ6h2KuxV2KuxV2KuxVUnuLi4f1J5Xlf+d2LH7zhJYxiI7AUp4GTsVdirsVVILm5t39S3leF
/wCeNip+8Uwg0xlAS2ItkWmfmX5704j6vrNw6j9i4YXC0Hakwen0ZZHNMdXBy9l6afOA+G33M00b
/nIXW4Sqavp0F2nQyQFoXp4kH1FJ+VMvjqz1Dqs/s3jP0SI9+/6noXl/84PJGslY/rh0+5bb0b0C
Lf2kq0f/AA1fbMiGohLydLqexdRi3riH9Hf7ObNEdXUOhDIwBVgagg9CDl7qSKbxV2KuxV2KuxV2
KuxV2KuxV2KuxV2KuxV2KqGoWFrqFjPY3aCW2uY2imQ91YUOAixRZ48hhISjzD5F8waPPout3ulT
nlJZzNFzpTkAfhYD/KWhzTzjwkh9L02cZccZj+IJfkW92KuxV2Kr4IJ55VigjaWVtljQFmPyA3xA
YykALOwZVpf5UeftSCtFpMkEbb87krBQf6shD/cuXRwTPR12XtfTQ5zv3bspsf8AnHnzJIAb3UrS
3B7RiSYj71jH45aNJLqXX5PaTEPpjI/IfrTq3/5x0sVH+ka5LIf+K4Fj/W75MaMd7iS9ppdID5/s
Rg/5x58s031K9r3/ALr/AJoyX5OPe1/6JM382P2/rcf+cefLNNtSva9v7r/mjH8nHvX/AESZv5sf
t/Wgrj/nHSyYf6PrksZp/uyBX3+h0yJ0Y722PtNLrAfP9iS33/OPXmSME2Wo2lxTtJ6kJPyosg/H
IHSS6FysftJiP1RkPkf1MX1X8qfP2mgtLpMs8Y/btis9R48Yyz/euVSwTHR2OHtfTZOUwPft97FZ
oJoJWinjaKVDRo3BVgfcHfKSHYxkCLG4WYpZD5Z8++afLci/o29b6uDVrOWskDf7An4a+K0PvlkM
so8nC1XZ2HOPXHfv6vaPJv52+X9ZZLTVgNJv22DO1bdz7SGnD5N95zOx6kS57PKa3sLLi9UPXH7f
l+p6QCCKjcHocyXROxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV84/nrbRQ+fZJEFGuLWGWQ+LAGP/
AIjGM1uqHre69n5E6au6R/W88zGd27FWQeV/InmfzLIBplmxt60e8l+CBfGrnrTwWp9sshilLk4W
r7Qw4B6zv3dXrvlv8gdBtAkuuXL6jP1aCMmGAe1R+8b51HyzMhpAOe7zOq9osktsY4R8z+p6NpWh
aNpEPo6ZZQ2cdKMIUVS1P5iBVvpzJjADkHR5tRkym5yMvejsk0uxV2KuxV2KuxV2KuxVA6roOi6v
D6Op2MN4lKD1kViP9ViKr9GRlAHmG7DqMmM3CRj7nm/mT8gdDuw82hXL6fP1FvKTLAfYE/vF+dW+
WY09IDy2d7pfaLJHbIOId/I/q+55H5o8i+ZvLMlNUtCsBPGO7j+OBj7OOh9mofbMOeKUeb0uk7Qw
5x6Dv3dUgytzWe+Qfza1ny08dnelr/RRt6DGskQ8YWPb/JO3yzIxagx2PJ03aPY+PP6o+nJ9/v8A
1vobRdb0vW9Oi1HTJ1uLWUbOvUHurDqrDuDmxjISFh4nPgnikYzFEI7JNLsVdirsVdirsVdirsVd
irsVdiqA17XNO0PSp9T1GT0rW3WrHqzE7KijuzHYZGchEWW7T6eeaYhEbl8s+dPNd15o1+fVriMQ
hwI4IVNQkSfZWp6nepPjmqyZOM2+h6HSR0+MQG/60otbW5u7iO2tommuJWCxRRgszMegAGQAtypz
ERZNAPbfIf5GW1useoeaQJ7jZk0xT+7Tv+9YfbP+SPh+eZ2LS9ZPJ9odvmXpw7D+d+p65BBDBEkM
EaxQxjikaAKqgdgBsMzAHmZSJNncr8UOxV2KuxV2KuxV2KuxV2KuxV2KuxVZPBBcQvBPGssMgKyR
SAMrA9QVOxGJCYyMTY2LyHz5+RlvMsmoeVqQzbtJpjn923/GFj9k/wCSdvcZhZdL1i9N2f2+R6c2
4/nfreJ3NtcW08lvcxtDPExSWJwVZWGxBB3BzCIp6yMhIWDYLIfIvnrVPKeqLcW7GSxkIF7ZE/BI
niPBx+y38MsxZTAuF2h2fDUwo/V0Pd+x9PaJrWn61pdvqenyiW1uV5Ie4PdWHZlOxGbSMhIWHz/P
glimYSFEI7JNLsVdirsVdirsVdirsVdirsVfNf5uefH8ya41laSV0bTmKW4U/DLINnmPj4L7fM5r
NRl4jQ5B7zsbs/wMfFIeuXPyHd+thFnZ3V7dxWlpE01zOwjhiQVZmY0AGUAXsHbTmIRMpGgH0l+W
v5Z2XlWzF1dBbjXJ1/fT9RED/uuKvbxbv8s2eHAIDzeE7U7UlqJUNsY6d/mWc5e6h2KuxV2KuxV2
KuxV2KuxV2KuxV2KuxV2KuxV2KsG/Mr8srHzVaNd2irb67Cv7mfoJQBtHL/xq3b5ZRmwCYsc3b9l
9qy08uGW+M/Z5h82Xdpc2dzLa3UbQ3EDGOaJxRlZTQgjNYRT3kJiQBBsFnn5P+fH8va2NOvJKaPq
LhJOR2imOyS+wP2W9t+2X6fLwmjyLp+2uz/Hx8cfrj9o7v1PpDNm8I7FXYq7FXYq7FXYq7FXYqwj
83/NDaF5OnWB+F7qJ+qW5B3UMCZHHyQEV7EjKNRPhj73bdi6Txs4v6Y7n9H2vmXNW9+92/IzyMlr
Y/4nvo63V0Cunqw+xD0aQeBfoP8AJ+eZ+lxUOIvH9v6/il4MTsOfv7vh9/uet5mPNOxV2KuxV2Ku
xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5D+evkZLiz/xTYx0ubcKmpKo+3F9lJNu6HY/5P8Aq5h6
rFtxB6b2f1/DLwZcj9Pv7vj+ObwzMB699P8A5TeaG8weT7d53531ifql0SasxQDg5/1kIqfGubTT
z4ovn/bGk8HOa+mW4Zll7qnYq7FXYq7FXYq7FXYq+f8A/nIDV2ufNFppqtWKwt+RXwlnPJv+EVM1
2rlcqe09nMPDhM/5x+wfgvP/AC5o76zr1hpSEqbydImYfsqT8bf7FanMeEeIgO61Wbwscp/zQ+vL
a3htreK2gQRwQIscUa7BUQcVA+QGbgCnzOUjIknmVTCxdirsVY35r/MLyv5YpHqVyTdsOS2cI9SY
qe5FQFH+sRlWTNGPNz9H2bm1G8Bt3nkx/Tvz38jXlysEou7JWNBNcRJ6YJ8TE8pH3ZWNVAubl9n9
REWOGXuP6wHoNvcQXECT28iywSqHjlQhlZTuCCNiMyQbdJKJiaOxX4odirCfMX5w+StDu3tJJpb2
5iPGWOzRZAhHUF2ZEqO9GyieojHZ22m7F1GWPEAIjz/Ft+W/zf8AJevXa2cU0tldSELDFeKsfMnY
BWVnSp7AtU4w1EZGl1XYufDHiIEh5M1y91LsVU7i4gtoJLi4kWGCJS8sshCqqjclmOwAwE0yjEyN
AWS8+1D8+PI1pctDELu9VTT1reJPTJHh6rxMfuzHOqgHdY/Z/USFnhj7z+oFkXlX8wPK/mfkmmXX
+lIOT2kw9OYDx4nZh/qk5ZjzRlycHV9nZtP9Y27xyZHlrguxV2KqV3awXdrNa3CCS3uEaKWM9GRx
xYfSDgItlCZiRIcw+Q/MGkSaPrl/pchJazneEMf2lViFb/ZLQ5p5x4SQ+mabMMuOMx/ELei/84+a
s0HmO/0xj+6vbf1VH/FkDbf8LI2ZOkl6iHR+0eG8UZ/zT9/9j3zNg8a7FXYq7FXYq7FXYq7FXy5+
bVwZ/wAw9ZeteMkcY/55won/ABrmq1B9ZfQux41pYfjqUx/I60Wfz/bSEV+qwTzD2JT0/wDmZktK
PW0dvTrTEd5A/T+h9JZs3hHYq7FUDr2qLpWiX+pleX1K3lnCfzGNCwX6SKZGcqBLdp8XiZIw/nEB
8iajqF5qN9Pf3spmurlzJNI3Usf4eAzTkkmy+l4scYREYigEPgbHtX/OPnmS5kN/5emcvDCn1u0B
P2ByCSqPYl1P3+OZ2knzi8p7R6UDhyjmdj+h7Pma8qwj84vMd3ofkyV7NzHdX0q2aSqaMgdWZ2Hv
wQivauUaiZjHZ2/Ymmjmzji5RFvmXNW987FX05+UHmO613yXBLduZbqykazlmbcv6YVkYk9Twdan
uc2mnnxR3fP+2tKMOoIjykL/AB8Wa5e6p4t/zkH5kuo5LDy9C7JBJH9cu1G3OrlIlPsCjGnjTwzB
1c+UXq/ZzSxIllPO6H6Xi+YT1SJ03UbzTb+3v7KQxXVs4khkHZl/WD3GGJINhry4o5ImMhYL670T
Ul1TRrHUlHFb23iuAo3p6iBqfRXNxGVgF8zz4vDySh/NJHyRuSanYq7FXzT+dttHD+YV66bevFBK
wG2/phP+NM1mpHre97CmTpY+RP3of8np2h/MXSSOjmaNh7NA4/Xvg059YZ9tRvSz+H3h9PZtHz92
KuxV2KuxV2KuxV2Kvl3827cwfmHrCUoGkjkHXf1IUeu/zzVagesvoXY0r0sPj95TD8jrtYPP9tGT
T61BPCPchPU/5l5LSn1tHb0L0xPcQf0fpfSWbN4R2KuxVA69pa6rol/phbj9dt5YA/8AKZEKhvoJ
rkZxsEN2ny+HkjP+aQXyJqOn3mnX09hexGG6tnMc0bdQw/h4HNOQQaL6XiyRnESibBQ+Bse1f84+
eW7mM3/mGZCkMyfVLQkfbHIPKw9gUUff4ZnaSHOTyntHqgeHEOY3P6Hs+ZryrCPzi8uXeueTJUs0
Ml1YyreJEoqzhFZXUe/Byad6ZRqIGUdnb9iamOHOOLlIU+Zc1b3zsVfTn5QeXLrQvJcEV2hiur2R
ryWFtinqBVRSD0PBFqOxzaaeHDHd8/7a1QzagmPKIr8fFmuXuqeLf85B+W7qSSw8wwozwRx/U7th
vwo5eJj7Euwr408cwdXDlJ6v2c1UQJYjzux+l4vmE9UidM0291PUINPsojNdXLiOGMdyf1AdSe2G
MSTQa8uWOOJlI0A+u9E01dL0ax01TyWyt4rcMNq+mgWv00zcRjQAfM8+XxMkp/ziT80bkmp2KuxV
81fnZdxXH5gXax9beKGF/wDWCcj/AMSzWao+t7vsGBGmBPUlDfk7btN+Yuk06RmaRj4BYHp+NBg0
49Ybe2pVpZ/D7w+ns2j5+7FXYq7FXYq7FXYq7FXgP/OQOjtb+ZbLVFWkV/b+mx/4tgND/wAI6Zr9
XGpW9n7OZ+LEYdYn7D+C898uaw+ja9YaqgLGznSVlH7Sg/Gv+yWozGhLhILu9Vh8XHKH84Pry2uI
bm3iuYHEkE6LJFIu4ZHHJSPmDm4Bt8zlExJB5hUwsXYq7FWN+a/y98r+Z6SalbEXajit5CfTmCjs
TQhh/rA5Vkwxlzc/R9pZtPtA7dx5Mf078iPI1ncLNL9bvgpBENzKvCo8REkRP0nKxpYBzcvtBqJC
hwx9w/WS9Bt7eC3gSC3jWKCJQkcSAKqqNgABsBmSBTpJSMjZ3K/FDsVYT5i/J7yVrl293JDLZXMp
5SyWbrGHJ6koyulT3ouUT08Zbu203bWoxR4QRIef4tvy3+UHkvQbtbyKGW9uoyGhlvGWTgRuCqqq
JUdiVqMYaeMTa6rtrPmjwkiI8ma5e6l2KqdxbwXMElvcRrNBKpSWKQBlZTsQynYg4CLZRkYmwaIe
fah+Q/ka7uWmiN3ZKxr6NvKnpgnw9VJWH35jnSwLusftBqIijwy94/UQyLyr+X/lfyxyfTLX/SnH
F7uY+pMR4cjso/1QMsx4Yx5ODq+0c2o+s7dw5Mjy1wXYq7FUNqV/Bp9jNeTsEjhUsWY0GwrviTTK
MTIgDmXyNr+qy6vrV7qUhJa6maQcqVCk/CDTwWgzTTlxEl9L0uAYsUYD+Ef2vSP+ce9IabzBqGqM
tY7O3EKE/wC/J2rt8ljb78ydJHcl0ntJmrFGH8438v7XvWbB412KuxV2KuxV2KuxV2KsM/Nvyu+v
+T7hYEL31gfrdqo3LFAQ6Dx5ITQeNMo1EOKLtex9X4OcX9Mtj+Pe+Yc1b6A92/Izz0l1Y/4YvpKX
VqC2nMx+3D1aP5p1H+T8sz9LlscJeP7f7P4ZeNHkfq9/f8fv971vMx5p2KuxV2KuxV2KuxV2KuxV
2KuxV2KuxV2KuxV2KuxVbJIkaM7sFRRVmPQDFXin5z+ffUh/Qlk9DKKzUqCsR8ad5PD+X55h6rLQ
4Q9J2BoOKXjS+mPLzP7Pv9zxvMB7F9RflX5Wby75QtoJ14312frV4D1V5AOKH/UQAH3rm1wY+GL5
72vq/Hzkj6Y7Bl+XOsdirsVdirsVdirsVdirsVfOH5w+Qn8v602p2cdNH1FyycR8MMxqzRewP2l9
tu2a3UYuE2ORe67F7Q8bHwS+uP2jv/WwOzvLqyu4ru0laG5gYSQyoaMrKagjMcGtw7icBOJjIWC+
kvy1/Myy81WYtbopb65Cv763rQSgD+8ir2/mXt8s2eHOJjzeE7U7Klp5WN8Z693kWc5e6h2KuxV2
KuxV2KuxV2KuxV2KuxV2KuxV2KuxVDXuo2lmnKd6H9lBux+QxV5l+Yf5kpp9uY14vduK21kDUD/i
yWnYeHft3IozZhAebtezOy5amVnbGOZ/QPxs8Jurq4u7iS5uJDLPKxaSRupJzWE2bL3uPHGERGIo
B6D+TfkN9d1ldXvY/wDcTprhqMNppxuqe4X7TfQO+ZGmxcRs8g6XtvtDwcfBH65fYPxyfRebJ4d2
KuxV2KuxV2KuxV2KuxV2KoLWtG0/WdMuNM1CITWlyvGRe47hlPZlO4ORlESFFtwZ5YpicTRD5a87
+U5/K3mGbSpZROigS28wFOUT14kjsdqHNVlx8EqfQ9BrBqMQmBXf70ltbq5tLiO5tpWhuImDRSxk
qysOhBGQBpy5wEhRFgvsi2kaS3ikb7TorGniRXNyHy6QokKmFi7FXYq7FXYq7FXYq7FXYq7FXYq7
FUHdaxp1tUSTAuP2E+I/h0+nFUi1DzXKUb0ALeJQS0rkVAHU+C4pAJNB5V5s/NGKJpINIf61dmoe
9f4o1PT4K/bPv9n55h5dUBtF6Ts/sCUvVm2H83r8e77/AHPMLi4nuZ3nuJGlmkPJ5HJLE+5OYJNv
XQgIgCIoBk3kDyBqXm3UhHGGh0yFh9dvabKOvBK9XP4dTlmLEZnycDtHtGGmhZ3meQ/HR9N6RpNh
pGm2+m6fEIbS2UJGg/Ek92J3J7nNpGIAoPAZs0sszORuRRmSanYq7FXYq7FXYq7FXYq7FXYq7FXz
h+el1FP59ljQ1a2toYpP9YgyfqkGazVH1vddgQI0wPeT+r9DArS2kurqG2iFZJ3WNB/lOQo/XlAF
u5nIRBJ6PsuNFjjWNdlQBVHsNs3T5aTZtvFDsVWTTxQRNLKwSNdyxxVjsvmuf129KFTB+yGry+dQ
cVVo/NsZ/vLYj3Vgf1gYqrp5p049VlX5qP4HFVQeZdKJ+2w9ypxVx8y6UD9tj7hTiqm3mnTh0SVv
ko/icVUJPNsY/u7Yn3ZgP1A4qg5vNOoPtGqRjxAJP4mn4YqlGp6+Y4vV1G+EMJ2rK4jQnwoSBglI
Dm24sM8hqAMj5MI1j809GtQY9Oje+l7PvHEOvdhyNP8AVp75iz1cRy3d5pfZ7LPfIeAfM/qef675
t1zW2peT8betVtYvgiH0VJb/AGROYeTLKXN6bSdnYdP9A37zz/HuSfK3OeieQPyf1fzC0d9qYfT9
GNGDEUmmH/Fanop/nP0VzJxacy3OwdH2j21DDcYeqf2D3/qfQWk6RpukWEVhp1uttaQiiRJ+sk7k
nuTuc2MYgCg8XmzTySMpm5FF4Wp2KuxV2KuxV2KuxV2KuxV2KuxVDanqNppmn3GoXj+na2sbSzP4
KorsO58BgkQBZbMWKWSQjHmXyLrur3Gsazeapcf3t5K8rL14hjso9lG2aeUuI2+l6fCMWMQHKIZL
+UWgPq/nmxJWtvYH67Oew9Igp98hXLdPC5hwO2dR4Wnl3y9Pz/Y+ns2j5+7FUBqGs2dkCrN6k3aJ
ev0+GKsP13zCPQkvdQmWC0gHI/yqOnTqWPQdz2wSkALLbhwyySEYi5F5BqH5oa6+pvNYFYrAGkVt
IitVR+07D4qnwVtvxzXS1Ur25PZYewMAxgT3n1Nn7P7EXafm7qKg/XNPhmNdvRdotv8AZerkxrD1
DRk9msZ+mch76P6kytvzc01l/wBJsJo28I2WQfe3p5MawdQ4s/Zqf8MwfeK/Wif+Vs+XP+We8/4C
L/qrkvzce4tX+hvP/Oh9v6nf8rZ8uf8ALPef8BF/1Vx/Nx7iv+hvP/Oh9v6kLc/m7pyj/RtPmlPh
I6x/8R9TInWDoG2Hs1P+KYHuF/qS67/N3UWA+p6fDCa7+s7S7f7H0sgdYegcrH7NYx9U5H3UP1pH
ffmB5rvA6m8NvG37ECrHT5OB6n/DZTLUTPV2OHsbTQ/hs+e/7PsSGe4uLiVpriV5pW+1JIxZj8ya
nKibdlCAiKAoKeBkyfyv+XHmzzIyNY2Zis2631xWOEDxBIq/+xBy2GGUuTr9X2nhwfUfV3Dn+Pe9
p8m/kz5b0Fkur7/crqK7iSVQIUP+RFuCfdq+1MzsemjHnuXlNb25lzemPoj9vzeg5kOldirsVdir
sVdirsVdirsVdirsVdirsVeGfnj5/W7nPlfTpK29u4bU5VOzyrusQp2Q7t/lfLMDVZb9Iev7B7O4
R40+Z+n3d/x+55DmG9M+hfyk0jTvLHl95b5+OragwkuU4MTGi7Rx1pSoqWPuads2enxcMd+ZeC7a
14z5aj9EeXn3lmM/muzUfuYnkb3oo/ifwzIdOlN55h1G4BVW9GM/sx7H6W64qxrXfMelaLb+tfzU
dq+nAvxSuf8AJX+J2yvJlEBu5mj0GXUSqA26noHj/mbzZqWv3Aaf91axkmC1U1Va9yduTU7/AHUz
W5cpmd3udB2dj00ajvI8ykgBJAAqTsAMqdgiLvTdRszS7tZrY+EsbJ/xIDCYkc2uGWMvpIPuQ+Bs
dirsVdiqJs9M1K9bjZWk10x24wxtIf8AhQcIiTya55YQ+oge9kmmflR5/wBQ4mPSJYEPV7krBT5r
IVf8MtjgmejgZe2NNDnMH3b/AHM00b/nHi/fi+s6pHCOphtFMhp4c34AH/YnLo6M9S6vP7SxH93E
n3vQvL/5VeSNEKyQWAurlNxc3Z9Z6joQpHpqfdVGZMMEI9HSantfUZdjKh3Db9rLsudY7FXYq7FX
Yq7FXYq7FXYq7FXYq7FXYq7FXmP5sfmnHokMuiaNKG1mReM86na2Vh4/78I6eHXwzF1Gfh2HN6Ds
fsk5SMmQejoP537Hz4SSSSak7knNc9qzv8tPLdnc3I1W7lidoG/0a0DKz8x/ux1rUUP2Qe+/hXL0
2ME2Xne3ddOEfDgDvzPl3D9L1JiFBZjxUdSdhmwt40RJ5JPf+cPLNipM+owlgSpSJvVYEdisfIj6
cqlmgOrnYey9Rk5QPx2+9heufmvPIGi0aD0Qf+PmcBn/ANjGKqPpJ+WYuTVn+F3+k9nYjfKb8hy+
fP7mB3V3dXdw9xdStNO5q8jksx+k5iEk7l6THjjCPDEUAq6XpWparex2WnW73V1KaJFGKn5nsAO5
O2MYkmgjLmhjjxTNB77+XH5P2WgGPU9Z4XmsCjRRj4obc9uNftOP5u3bxzYYdOI7nm8Z2n21LN6M
fph9p/Y9KZVZSrAFSKEHcEHMp0KAn8vaBcGtxplpMd95II269eqnImAPRujqckeUpD4lCf4J8mf9
WDTv+kSD/mjB4Ue4Nv5/P/qk/wDTF3+CfJn/AFYNO/6RIP8AmjHwo9wX8/n/ANUn/pii7fy/oFsa
2+m2sJ23jgjXp06KMIgB0apanJLnKR+JR4AAAAoBsAMk0uxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku
xV2KuxV2KoXVbW7u9OuLazu2sbmVCsV2qLI0ZP7QVtjgkCRs2YZxjIGQ4gOne+dfMv5OeetOmlnS
H9LxMS7XFsxeRiTWrRt+8LHvSvzzWz00x5vcaXtvTzAF8B7jy+fJg9zaXVrM0F1C8Ey/ailUow+a
sAcoIp28JiQsGwpYGTsVdiqZ6R5Y8xawwXTNOuLsH9uONig+bn4R9JycYSlyDj5tXixfXIB6P5a/
5x/1a4ZJvMF2tlDsWtbciWY+IL/3a/McsyYaQ/xOi1XtHCO2IcR7zsP1/c9h8ueVNB8u2n1XSbRb
dTT1ZftSyEd3c/E36h2zMhjERs8xqdZkzyuZv7k2ybjOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV
2KuxV2KuxV2KuxV2KuxV2KuxV2KqN1ZWd3H6d3BHcR/ySorr9zA4CAebOGSUTcSQkdx+XXkW4fnJ
odmD/wAVxLGPuTiMgcMO5y49pagcpy+aGj/Kr8vo25LosJNKfE0jD7mY5HwIdzYe19Sf4z9iZ2Xk
zylYkNa6NZxOOkggjL/8EQW/HJjHEdHHya7PP6pyPxKcAAAACgGwAybiuxV2KuxV2KuxV2KuxV2K
uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku
xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux
V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV
2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2
KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K
uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv/9k=</xmpGImg:image> </rdf:li> </rdf:Alt> </xmp:Thumbnails> @@ -37,7 +37,7 @@ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass> <xmpMM:OriginalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</xmpMM:OriginalDocumentID> <xmpMM:DocumentID>xmp.did:05801174072068118083E6B8DFAD3211</xmpMM:DocumentID> - <xmpMM:InstanceID>uuid:c13f4026-f884-c44f-9f69-7c6a0e5ade17</xmpMM:InstanceID> + <xmpMM:InstanceID>uuid:9fbc347a-8c8c-a044-b8b1-cab794b5c2dd</xmpMM:InstanceID> <xmpMM:DerivedFrom rdf:parseType="Resource"> <stRef:instanceID>uuid:dd072d7b-0748-3146-9743-f08357fdf253</stRef:instanceID> <stRef:documentID>xmp.did:03801174072068118083E6B8DFAD3211</stRef:documentID> @@ -600,11 +600,10 @@ -<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 2/Kids[10 0 R 162 0 R]/Type/Pages>> endobj 10 0 obj <</ArtBox[0.0 0.0 512.0 512.0]/BleedBox[0.0 0.0 512.0 512.0]/Contents 185 0 R/LastModified(D:20150811224719-03'00')/MediaBox[0.0 0.0 512.0 512.0]/Parent 3 0 R/PieceInfo<</Illustrator 186 0 R>>/Resources<</ColorSpace<</CS0 187 0 R>>/ExtGState<</GS0 188 0 R>>/Properties<</MC0 182 0 R/MC1 183 0 R>>/Shading<</Sh0 189 0 R>>>>/Thumb 143 0 R/TrimBox[0.0 0.0 512.0 512.0]/Type/Page>> endobj 162 0 obj <</ArtBox[0.0 0.0 640.0 640.0]/BleedBox[0.0 0.0 640.0 640.0]/Contents 190 0 R/LastModified(D:20150811224719-03'00')/MediaBox[0.0 0.0 640.0 640.0]/Parent 3 0 R/PieceInfo<</Illustrator 186 0 R>>/Resources<</ColorSpace<</CS0 187 0 R>>/ExtGState<</GS0 188 0 R>>/Properties<</MC0 182 0 R/MC1 183 0 R>>/Shading<</Sh0 189 0 R>>>>/TrimBox[0.0 0.0 640.0 640.0]/Type/Page>> endobj 190 0 obj <</Filter/FlateDecode/Length 980>>stream -H‰ÄVËŽ1¼ÏWä’±8+â„ЊÜG<. ÁJHü=e§ÓÝBpcW³ÛN;N•íræúú!\_=Pxöü!\¾^(P¨e~¾½¿¼ _°x}ù†ÂǧK¤Dø‘"ÞÛsé=ß»Kæ‘ÆÊÜ<ÚíóåÙ»p}ó‰ÂÓ§ðâ]x¼¼x…3¯OŽa!ˆ'×€¸=ဎø'<ݾì辟ƒª&9d¡T«°mo쯔ÄÌ-a½Ø_ Q8•˜=Õ1ÂísIB=ô–Fo!ªø&&MT›KªK)æÏÜØ#–¹B†O•¤4pDV<è¾€M˜5ד6•6°�’„se”Ô¤Öæ� Up2€eq’Q°'ã ’áÐá(Ž®pI¥j KGš@Nñþ‡½à…-Ç4{/=ÖÂÈIÁê;\´‚O µ&Uðƒ["9§Qún’Ÿ6ŸÑ,Lë³…ë²³Ùyƒwx¤ì@ŸÍŠ£N H:Àxa‹É'9àG¤OJž)˜#瞬%=‘;¬–gf’¢*uJd´L Ò‚4¬d£¾#e½UÈu$AWìE‹¬hŠîWeá…VSXÅÇJNì+[‡ì+ÖW[^«Ó¢µZ·óf3F4b»¶vÖ¯Íkkç¶5ý&v¸âyA£4µzîY§½¦ðºk·¶bV·ÆÈ›ƒýºpÁÚ¬èé,Ê©µZÅ2£ÅÄ"2-,Öuï6glª&©}I¨8ص; -ò§(&®À”M3k)–bš Ú&Àf™l³Z¢.@TwXÿH—dE. -ž:ìjY‡jz±¬SOÊmÖ“dxs õÝŠ¬h·áȇ¼]ic€‹} -ÖL_<0"L™i@.ŸWö4Ä_S,•ømžêac¬£¼FŠ‘N@g*ÉÚ\04¬Ûü?ﶉ s9<@¹›>W€Íö©±=¯WÛÖ»˜¼LËŒŸ½Ù´¶ä.ÅBUÑ¿sñÊdò¿‘‘{2÷T"÷4äLâÞÓÀ±ÿÂC j\¬åxôÿXþg6³åæçO#@ÈƯÊAoÉ”–>e¢Mœ ÜïhD\,П#ÜNmÃMê—r“¹Ø2/n¨8ÛÈ:Ƽ—zÔ:ÇêR3dšÙ‡å.y›¼˜’ûHÈ’ÇÔÀ•3Çø6Vì†!Ÿýsì0Ú![Û¬§›;š_ |ÅY>|ÃjÑ.lPa¤ºöê#o:(9¼µÿ,tÿšõxù)À�j³äž endstream endobj 189 0 obj <</AntiAlias false/ColorSpace 187 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 191 0 R/ShadingType 2>> endobj 187 0 obj [/ICCBased 192 0 R] endobj 191 0 obj <</Bounds[]/Domain[0.0 1.0]/Encode[0.0 1.0]/FunctionType 3/Functions[193 0 R]>> endobj 193 0 obj <</C0[0.14902 0.32549 0.501961]/C1[0.0745098 0.160784 0.25098]/Domain[0.0 1.0]/FunctionType 2/N 1.0>> endobj 192 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream +<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 2/Kids[10 0 R 162 0 R]/Type/Pages>> endobj 10 0 obj <</ArtBox[11.293 52.1318 491.293 460.543]/BleedBox[0.0 0.0 512.0 512.0]/Contents 251 0 R/LastModified(D:20151115140912-02'00')/MediaBox[0.0 0.0 512.0 512.0]/Parent 3 0 R/PieceInfo<</Illustrator 252 0 R>>/Resources<</ColorSpace<</CS0 253 0 R>>/ExtGState<</GS0 254 0 R>>/Properties<</MC0 248 0 R/MC1 249 0 R>>>>/Thumb 143 0 R/TrimBox[0.0 0.0 512.0 512.0]/Type/Page>> endobj 162 0 obj <</ArtBox[75.293 116.132 555.293 524.543]/BleedBox[0.0 0.0 640.0 640.0]/Contents 255 0 R/LastModified(D:20151115140912-02'00')/MediaBox[0.0 0.0 640.0 640.0]/Parent 3 0 R/PieceInfo<</Illustrator 252 0 R>>/Resources<</ColorSpace<</CS0 253 0 R>>/ExtGState<</GS0 254 0 R>>/Properties<</MC0 248 0 R/MC1 249 0 R>>>>/TrimBox[0.0 0.0 640.0 640.0]/Type/Page>> endobj 255 0 obj <</Filter/FlateDecode/Length 933>>stream +H‰ÄVKŽ7Ü÷)tiHŠÔg›I•^ä�NV ` ·OQjµúÙ0œ1螦$J¬"‹z/¿½†—w¯~úù5¿¼ÃëeñútP(:Ÿè¯ÏßÃßÇËë +·@©á‘ñ„·&~ÅÄŸoǧÀðÇÁÌ’ô²P*E8<þ:|Æߢ‰)‡XÆÕߢpÒ\Ci©ôGÌš„Zh5õVC4NL–¨0œ5 Ì=©ª¯gn‰º;jˆ\BÆš"ɨãˆlø°k�N‚0K.·5pÒÚ1�„s¥kªR[zdT€É× XR±KÅ�|2ÒŒ eD§¬I‹øØQh8Ãü¿>ß.ÇTŸ—–z¡çd@õ–XžJIfÀ‡e‰8䜺¶Ë¤qÚüŽÎÖ©ÛÂeÙÙí|†·W((»m`Êw³à¨ÛH’u ^±ÅòIvøô‰æIÁ„9·Ä\'‘¬š' “¤(‚L݈ŒÎ”€Ð°ÈF~{Êx+‘KO‚ª¸’ÙPm@\™Å*”šaƒ•|ŒäÄcä¬kÄëê,£½jUZôRk~Þ,ÆȺ¸×Y®Ñëµzaå¶ä]ï!ÄÇPC<w/(”jžÏ‹uºòc¨\ɺ¬3™—íɦU4JããýÁÁÿ†p·`3²ÓèTãTkÑXf”˜ø¦¥híP÷es†SqI]CB:‚]ÞQÀŸ!™´?‡Svͬ¡¨Ét°]€Õ™¬3[bC€Èn÷ú‘&É“¬†%<uØÌY‡jš:ëÔ’qyD'é£8@}ó$ÊÈ°r餷FX<Ü°êúâŽáÊÜ ²Öv¹hˆ_R7‹;_5Ò[>¼5¤×Aa§[E ‰³o*ÉË\Ð4¼Úƾl‚κW�rs}® N{tó{M®O{ò2™qöiÓrÛà6õŠØ÷±ŒÌo0¹÷¯ÀÈ3˜g(È3¹Ãð]ŸaàØÿƒC j"ˆìû8ÚL +ÿ6šYróùVòök²á-™ÒÒ§ÌFtŠ³¢ƒ{‘!èOn§zÆM6.å2;³ú2/n¨8û÷y#.õhe¶Õ¥fÈ4óh–—ä½ó¢K^-!Hºï®+g¶ñ³ø C£÷϶Ã(‡ìe³¾£ÝÑü1F¼‘Uħ„Èyö<@aP]Z-o.0á-ÿ»ÐǬ÷Ç�Ìø endstream endobj 248 0 obj <</Intent 256 0 R/Name(Layer 2)/Type/OCG/Usage 257 0 R>> endobj 249 0 obj <</Intent 258 0 R/Name(Layer 5)/Type/OCG/Usage 259 0 R>> endobj 258 0 obj [/View/Design] endobj 259 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 256 0 obj [/View/Design] endobj 257 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 254 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 253 0 obj [/ICCBased 260 0 R] endobj 260 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®cÖ}êÒõ0êè8´×Ž8GNg¦Óïï÷9÷wïïÝß½÷ó� '¥ªµÕ0�Ö ÏJŒÅb¤ � �2y.-;!à’ÆK°ZÜ ü‹ž^i½"LÊÀ0ðÿ‰-×é �@8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚ó�ÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAüom?çW= @@ -613,449 +612,421 @@ H N'çÎ)Î].ÂuæJ¸rî î÷wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â*6X[ݱF=3ë·YŸ±~dó ·‘ÛtÛ´¹iÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=G</zÁ^Á^j¯^—¼ Þ¡ÞZïQïBº0FX'Ü+œòáû¤útøŒû<öuñ-ôÝà{Ö÷µ__•ß˜ß-G”,ê}çïé/÷ñ¿ÀHh8ðm W 2p[àŸƒ¸AiA«‚Ný#8$X¼?øAˆKHIÈ{!7Ä<q†¸Wüy(!46´-ôãÐaÁa†°ƒa†W†ï ¿¿@°@¹`lÁݧYÄŽˆÉH,²$òýÈÉ(Ç(YÔhÔ7ÑÎÑŠèÑ÷b<b*böÅ<Žõ‹ÕÇ~ûL&Y&9‡Ä%ÆuÇMÄsâsã‡ã¿NpJP%ìM˜IJlN<žDHJIÚtCj'•KwKg’C’—%ŸN¡§d§§|“ꙪO=–§%§mL»½Ðu¡váx:H—¦oL¿“!ȨÉøC&13#s$ó/Y¢¬–¬³ÙÜìâì=ÙOsbsúrnåºçsOæ1óŠòvç=ËËïÏŸ\ä»hÙ¢óÖê‚#…¤Â¼Â…³‹ãoZ<]TÔUt}‰`IÃ’sK—V-ý¤˜Y,+>TB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßYÕ.©=bàá?SŒîÆ•Æ©ºÈº‘ºçõyõ‡Ø Ú†žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝèþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_p߶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO�¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬ÐD¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ -¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ�÷„óû endstream endobj 182 0 obj <</Intent 194 0 R/Name(Layer 2)/Type/OCG/Usage 195 0 R>> endobj 183 0 obj <</Intent 196 0 R/Name(Layer 5)/Type/OCG/Usage 197 0 R>> endobj 196 0 obj [/View/Design] endobj 197 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 194 0 obj [/View/Design] endobj 195 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 188 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 186 0 obj <</LastModified(D:20150811224719-03'00')/Private 198 0 R>> endobj 198 0 obj <</AIMetaData 199 0 R/AIPrivateData1 200 0 R/AIPrivateData2 201 0 R/AIPrivateData3 202 0 R/ContainerVersion 11/CreatorVersion 16/NumBlock 3/RoundtripStreamType 1/RoundtripVersion 16>> endobj 199 0 obj <</Length 944>>stream -%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Gabriel Engel) () %%Title: (icon.ai) %%CreationDate: 11/08/2015 22:47 %%Canvassize: 16383 %%BoundingBox: -69 -576 571 64 %%HiResBoundingBox: -69 -576 571 64 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: -69 -576 571 64 %AI3_TemplateBox: 256.5 -256.5 256.5 -256.5 %AI3_TileBox: -28.5 -636 530.5 147 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -311 80.4463 1.34 1928 970 18 0 0 -4 38 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:-144 -556 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 200 0 obj <</Length 28598>>stream -%%BoundingBox: -69 -576 571 64 %%HiResBoundingBox: -69 -576 571 64 %AI7_Thumbnail: 128 128 8 %%BeginData: 28466 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C452F282F282F282F282F282F282F282F282F282F282F282F282F282F %282F282F282F282F282F282F282F282F282F282F282F282F282F282F282F %282F282F282F282F282F282F282F282F282F282F282F282F282F282F282F %282F282F282F282F282F282F282F282F282F282F282F282F282F282F282F %282F282F282F282F282F28062F0628062F0628062F0628062F0628062F06 %28062F0628062F0628062F0628062F0628062F0628062F0628062F062806 %2F0628062F0628062F0628062F0628062F0628062F0628062F0628062F06 %28062F0628062F0628062F0628062F0628062F0628062F0628062F062806 %2F0628062F0628062F0628062F0628062F06282F062F282F062F282F062F %282F062F282F062F282F062F282F062F282F062F282F062F282F062F282F %062F282F062F282F062F282F062F282F062F282F062F282F062F282F062F %282F062F282F062F282F062F282F062F282F062F282F062F282F062F282F %062F282F062F282F062F282F062F282F062F282F062F282F062F28062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E2F062F282F062F282F062F282F062F282F062F282F062F282F %062F282F062F282F062F282F062F282F062F282F062F282F062F282F062F %282F062F282F062F282F062F282F062F282F062F282F062F282F062F282F %062F282F062F282F062F282F062F282F062F282F062F282F062F282F062F %282F062F282F062F282F062F280628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E2F282F062F282F062F %282F062F282F062F282F062F282F062F282F062F282F062F282F062F282F %062F282F062F282F062F282F062F282F062F282F062F282F062F282F062F %282F062F282F062F282F062F282F062F282F062F282F062F282F062F282F %062F282F062F282F062F282F062F282F062F282F062F282F062F282F0606 %2E0628062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E06282F282F062F282F062F282F062F282F062F282F062F282F %062F282F062F282F062F282F062F282F062F282F062F282F062F282F062F %282F062F282F062F282F062F282F062F282F062F282F062F282F062F282F %062F282F062F282F062F282F062F282F062F282F062F282F062F282F062F %282F062F282F062F282F062F282F06062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E06282E062F282E062F %282E062F282E062F282E062F282E062F282E062F282E062F282E062F282E %062F282E062F282E062F282E062F282E062F282E062F282E062F282E062F %282E062F282E062F282E062F282E062F282E062F282E062F282E062F282E %062F282E062F282E062F282E062F282E062F282E062F282E062F282E062F %280628062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E2F062F282F062F282F062F282F062F282F062F282F %062F282F062F282F062F282F062F282F062F282F062F282F062F282F062F %282F062F282F062F282F062F282F062F282F062F282F062F282F062F282F %062F282F062F282F062F282F062F282F062F282F062F282F062F282F062F %282F062F282F062F282F062F282F062F280628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E2F282E062F %282E062F282E062F282E062F282E062F282E062F282E062F282E062F282E %062F282E062F282E062F282E062F282E062F282E062F282E062F282E062F %282E062F282E062F282E062F282E062F282E062F282E062F282E062F282E %062F282E062F282E062F282E062F282E062F282E062F282E062F282E062F %282E06062806280628062806280628062806280628062806280628062806 %280628062806280628062806280628062806280628062806280628062806 %280628062806280628062806280628062806280628062806280628062806 %280628062806280628062806280628062806280628062806280628062806 %28062806280628062806282F282E062F282E062F282E062F282E062F282E %062F282E062F282E062F282E062F282E062F282E062F282E062F282E062F %282E062F282E062F282E062F282E062F282E062F282E062F282E062F282E %062F282E062F282E062F282E062F282E062F282E062F282E062F282E062F %282E062F282E062F282E062F282E062F282E06062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E06282E062F %282E062F282E062F282E062F282E062F282E062F282E062F282E062F282E %062F282E062F282E062F282E062F282E062F282E062F282E062F282E062F %282E062F282E062F282E062F282E062F282E062F282E062F282E062F282E %062F282E062F282E062F282E062F282E062F282E062F282E062F282E062F %282E062F2806280628062806280628062806280628062806280628062806 %280628062806280628062806280628062806280628062806280628062806 %280628062806280628062806280628062806280628062806280628062806 %280628062806280628062806280628062806280628062806280628062806 %280628062806280628062806282E062F282E062F282E062F282E062F282E %062F282E062F282E062F282E062F282E062F282E062F282E062F282E062F %282E062F282E062F282E062F282E062F282E062F282E062F282E062F282E %062F282E062F282E062F282E062F282E062F282E062F282E062F282E062F %282E062F282E062F282E062F282E062F282E062F280628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E0628062E2E %282E062E282E062E282E062E282E062E282E062E062E062F062E062E282E %062E062E062F062E062E282E062E282E062E282E062E282E062E282E062E %282E062E282E062E282E062E282E062E282E062E282E062E282E062E282E %062E282E062E282E062E282E062E282E062E282E062E282E062E282E062E %282E062E282E060628062806280628062806280628062806280606062827 %4C4B6F6F6F68936F6F696F4B4C2728060606280628062806280628062806 %280628062806280628062806280628062806280628062806280628062806 %280628062806280628062806280628062806280628062806280628062806 %2806280628062806280628062806282F282E062F282E062F282E062F282E %062F06524B94939393B5FD0793B593B593936F704B2E062E062F282E062F %282E062F282E062F282E062F282E062F282E062F282E062F282E062F282E %062F282E062F282E062F282E062F282E062F282E062F282E062F282E062F %282E062F282E062F282E062F282E062F282E06062E0628062E0628062E06 %28062E06284B6F93938C9393936893939368939393689393936893939369 %702728062E0628062E0628062E0628062E0628062E0628062E0628062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %2E0628062E0628062E0628062E0628062E0628062E0628062E06282E062E %282E062E282E062E282E062E6FB5FD1A936F4C062E282E062E282E062E28 %2E062E282E062E282E062E282E062E282E062E282E062E282E062E282E06 %2E282E062E282E062E282E062E282E062E282E062E282E062E282E062E28 %2E062E282E062E282E062E28062806280628062806280628062806286F93 %68936F9368936F9368936F9368936F9368936F9368936F9368938C6F2706 %062806280628062806280628062806280628062806280628062806280628 %062806280628062806280628062806280628062806280628062806280628 %06280628062806280628062806280628062806282E062E282E062E282E06 %2E282E062E062E6FB5FD1C934B2E062E282E062E282E062E282E062E282E %062E282E062E282E062E282E062E282E062E282E062E282E062E282E062E %282E062E282E062E282E062E282E062E282E062E282E062E282E062E282E %062E280628062806280628062806280628062806286F9393936893939368 %939393689393936893939368939393689393938C936F2806280628062806 %280628062806280628062806280628062806280628062806280628062806 %280628062806280628062806280628062806280628062806280628062806 %28062806280628062806282E282E062E282E062E282E062E282E062E062E %6FB5FD1B93B56F4C062E062E062E062E062E062E062E062E062E062E062E %062E062E282E062E282E062E282E062E282E062E282E062E282E062E282E %062E282E062E282E062E282E062E282E062E282E062E282E060528062805 %28062805280628052806280528062869936F9368936F9368936F9368936F %9368936F9368936F9368936F9368936F4C06282728274C4B4B4B6F4B6F4B %6F4B6F4B4C4B4C2728062806060628062806280528062805280628052806 %280528062805280628052806280528062805280628052806280528062805 %2806282E282E062E282E062E282E062E282E062E282E0652FD1F93706FFD %0493B593B5939393B5939393B5FD06936F704B4C282F062E062E282E062E %282E062E282E062E282E062E282E062E282E062E282E062E282E062E282E %062E282E062E282E06062806280628062806280628062806280628062806 %4C9393689393936893939368939393689393936893939368939393689393 %938C939393689393936893939368939393689393938C9393938C9393934B %4C2728062806280628062806280628062806280628062806280628062806 %280628062806280628062806280628062828062E2828062E2828062E2828 %062E2828062E28280670FD3C936F70272E062E062E2828062E2828062E28 %28062E2828062E2828062E2828062E2828062E2828062E2828062E280628 %05280628052806280528062805280628052806062793929368936F936893 %6F9368936F9368936F9368936F9368936F9368936F9368936F9368936F93 %68936F9368936F9368936F9368936F9368936F9368938C93694C27060628 %062805280628052806280528062805280628052806280528062805280628 %0528062805282E062E282E062E282E062E282E062E282E062E282E062F4B %FD25938C938D938C9393938DFD1093B593936F52062E062E282E062E282E %062E282E062E282E062E282E062E282E062E282E062E282E062E28062806 %2806280628062806280628062806280628062806286F9368939393689393 %93689393936893939368939393689393936893689368FD04939A9AA19AC3 %9AA19AC39A9AFD049368938C936893939368939393689393938C6F270606 %280628062806280628062806280628062806280628062806280628062806 %2806282E0628062E0628062E0628062E0628062E0628062E06280670FD16 %938C9393939AC3A1CACAFD0FFFCAFFCAC39ABC93938CFD0D936F28062E06 %28062E0628062E0628062E0628062E0628062E0628062E0628062E062806 %052806280528062805280628052806280528062805280606279393936893 %6F9368936F9368936F93689369936893939A9BCACAFD1BFFA1A193936893 %68936F9368936F9368936F4B050606280528062805280628052806280528 %06280528062805280628052806282E282E062E282E062E282E062E282E06 %2E282E062E282E062E6FFD1293C3C3FD24FFCA9A938CFD0B93282E062E28 %2E062E282E062E282E062E282E062E282E062E282E062E282E0605280628 %0528062805280628052806280528062805280628066F9393689393936893 %939368939393689AA1FD29FFA8C3939368939393689393938C934B280628 %062805280628052806280528062805280628052806280528062828062E06 %28062E0628062E0628062E0628062E0628062E06284BB5FD0A938C939ACA %FD2EFFCA9A8DFD0893B56F28062E0628062E0628062E0628062E0628062E %0628062E0628062E06052805280528052805280528052805280528052805 %280528066F8C936F9368936F936893689AA8FD32FFCA9A93689368936F93 %68936F280528052805280528052805280528052805280528052805280528 %2E062E282E062E282E062E282E062E282E062E282E062E062E6FB5FD0893 %9ACAFD36FFCA9A8CFD07936F52062E062E282E062E282E062E282E062E28 %2E062E282E062E2806280528062805280628052806280528062805280628 %050627938C93939368936893A1FD3AFFC368939393689393936828062805 %2806280528062805280628052806280528062805282E0628062E0628062E %0628062E0628062E0628062E062827FD07938C9ACAFD3CFFCAFD08936F2E %0628062E0628062E0628062E0628062E0628062E06280605280528052805 %28052805280528052805280528052805938C936F936893689AFD40FF9A93 %689368936F93692805280528052805280528052805280528052805280528 %2E2828062E2828062E2828062E2828062E2828062E066FFD0793C3FD42FF %A1FD0693B56F2E062E2828062E2828062E2828062E2828062E2828060528 %062805280628052806280528062805280628057093936893939368C3FD44 %FFA1936893939368934B0605280628052806280528062805280628052806 %2828062E0628062E0628062E0628062E0628062E064CFD06938CC3FD46FF %A1FD07932828062E0628062E0628062E0628062E0628062E060528052805 %2805280528052805280528052805286F9368936F9368C3FD48FF9A936893 %6F938C6F052805280528052805280528052805280528052828062E282806 %2E2828062E2828062E2828062E4BFD05938CBCFD4AFF9AFD06934C062E28 %28062E2828062E2828062E2828062E280528052805280528052805280528 %052805280593939368938C93CAFD4BFF6F93939368936F06052805280528 %052805280528052805280528280628062806280628062806280628062806 %4CFD0693A1FD4CFFC38CFD05932728062806280628062806280628062806 %28060528052805280528052805280528052805284B9368936F9393FD4EFF %9468936F938C6F0528052805280528052805280528052805282E2828062E %2828062E2828062E2828062E28FD05938CCAFD4EFFA1FD069328062E2828 %062E2828062E2828062E2828060528052805280528052805280528052805 %4C939368938C93FD50FFFD04936893270605280528052805280528052805 %28052828052806280528062805280628052806284BB5FD0493A1FD13FFA1 %C3A1CAFD0EFFCACAA1C3A1FD0FFFA1C3A1CACAFD12FFC368FD0493700628 %052806280528062805280628052806052805280528052805280528052805 %28056F8C936F9368CAFD11FFC36F93688C6893A1FD0BFFA193689368936F %CAFD0BFFCA939368936893A1FD11FFA19368936F93452805280528052805 %28052805280528052828062E0628062E0628062E0628062E06286FFD0493 %9AFD11FFCA8CFD0793CAFD09FFC3938DFD0693CAFD09FFCAFD06938D93C3 %FD11FFFD06932828062E0628062E0628062E0628062E0605280528052805 %28052805280528052827938CFD0493FD11FF9393699393936893689AFD08 %FFCA938C9368939393699393FD09FFFD0493689393936893CAFD10FF9A68 %939393692805280528052805280528052805280528280628052806280528 %062805280628054CFD05939AFD10FFA1FD0A93CAFD07FFCA8CFD0993C3FD %07FFC3FD09938CCAFD10FF9AFD0593272806280528062805280628052806 %2805052805280528052805280528052805062793939368939AFD10FF9A68 %936F9368936F936893A1FD07FF9A8D68936F9368936F9368C3FD07FFC368 %9368936F9368936F8D9AFD10FF9A689368936F2805280528052805280528 %0528052805282E0628052E0628052E0628052E0628064CFD04938DC3FD10 %FF9AFD09938CC3FD07FFC38CFD0993A1FD07FFA1FD09938CC3FD10FF9AFD %0593272E0628052E0628052E0628052E0628050528052805280528052805 %28052805062793939368939AFD10FFC368939393689393936893A1FD07FF %A193689393936893939368CAFD07FFCA68936893939368939393A1FD10FF %9A8C9368936F280528052805280528052805280528052828052806280528 %06280528062805280628FD04938C9AFD10FFCA938CFD0893FD09FFFD0993 %94FD09FF9AFD0993FD11FFFD069328280528062805280628052806280528 %0605280528052805280528052805280528059368936F936FFD11FFA19368 %936F93689368CAFD09FFCA689368936F936893A1FD09FFA1936893689369 %9368CAFD10FFA89368936F93692805280528052805280528052805280528 %28052E0628052E0628052E0628052E06286FB5FD0493CAFD11FFA19A8C93 %8C9393CAFD0BFFCA93938C938C9ACAFD0BFFCA9A8C938C9393CAFD11FFCA %FD0593700628052E0628052E0628052E0628052E06052805280528052805 %28052805280528054B8C93939368C3FD12FFCACAA1A1A1FD0FFFA1C3A1C3 %CAFD0EFFC39AC3A1FD13FF9A93689393934B060528052805280528052805 %2805280528280628052806280528062805280628052827FD0693FD4FFFA8 %9AFD05934C05280628052806280528062805280628050528052805280528 %052805280528052805286F9368936993A1FD4DFFAFA168936F938C930506 %052805280528052805280528052805282806280528062805280628052806 %280528066FFD04938CBCFD4EFFFD0593B54B280528062805280628052806 %280528062805052805280528052805280528052805280506279368939393 %68CAFD4CFFA193689393938C280528052805280528052805280528052805 %28280528052805280528052805280528052805286FFD0693FD4BFFA1FD06 %936F05280528052805280528052805280528052805052805280528052805 %280528052805280528054C929368936F9393FD49FF849A68936F93689327 %060528052805280528052805280528052805282805280628052806280528 %0628052806280528066FFD0693A1FD47FFA8A18CFD0493B56F2805280628 %052806280528062805280628052806052805280528052805280528052805 %280528052827938C9393936893A1FD44FFA884A18C936893939369280528 %052805280528052805280528052805280528280528052805280528052805 %2805280528052805284BFD0793A1FD41FFA8A8A8A18CFD06934C05280528 %052805280528052805280528052805280505280528052805280528052805 %2805280528052805064B9368936F936893A1FD3FFFA8A884A18C9368936F %938C6F050605280528052805280528052805280528052805282805280528 %0528052805280528052805280528052805286FB5FD06939AFD3DFFA8A8A8 %A1FD08930528052805280528052805280528052805280528052805052805 %2805280528052805280528052805280528052805286993939368938C93A8 %FD39FFA8A87DA8A19A689393936893936F05280528052805280528052805 %280528052805280528052828052805280528052805280528052805280528 %0528052805286FFD0693FD39FFFD04A89AFD099327280528052805280528 %052805280528052805280528052805052800280528002805280028052800 %280528002805280028056F8C936F936893A8FD33FFFD04A87DA884A19393 %68936F936893926F00060528002805280028052800280528002805280028 %05280028280528052805280528052805280528052805280528052805284B %B5FD0593FD31FFA8FFFD05A8AFA19AFD09936F2728052805280528052805 %280528052805280528052805280528050528052805280528052805280528 %05280528052805280528056F8C9393936893CAFD11FFA8FD19FFA8FFFD04 %A87DA8A8A884A89A9368939393689393938C6F0506052805280528052805 %280528052805280528052805280528052828052805280528052805280528 %0528052805280528052805286FFD0693FD11FFFD07A8FFA8FFA8FD07FFA8 %FFA8FFA8FFFD0CA8A19AFD0993B5934C0528052805280528052805280528 %052805280528052805280528052805002805270028052700280527002805 %270028052700280505009393936893689AFD0FFFA87DA884A87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA884A884A8A19A6F9368 %9368936F9368939393692805050028052700280527002805270028052700 %280527002805270028052728052805280528052805280528052805280528 %05280528054CFD0693A1FD0EFFFD06A8AFFD1AA89A9A93938CFD0B934B28 %052805280528052805280528052805280528052805280528052805280528 %050528052805280528052805280528052805280528052805064593939368 %938CCAFD0CFFA8A87DA8A19A939A9AA1A1A87DA8A8A884A8A8A884A8A8A8 %84A8A8A8A1A89A9AFD0493689393936893939368939393686F0506052805 %280528052805280528052805280528052805280528052805280528052828 %0528052805280528052805280528052805280528052827FD05938C9AFD0C %FFFD05A89A8C9393938CFD04939A9AA19AA19AA19AA1FD049AFD04938CFD %0F934B280528052805280528052805280528052805280528052805280528 %052805280528052805052700280527002805270028052700280527002805 %05006F929368936F8DA1FD0AFFA87DA87DA87D9A689368936F9368936893 %6893689368936893689368936893689368936F9368936F93689393938C93 %6F4B00060505002805270028052700280527002805270028052700280527 %002805270028052700282805280528052805280528052805280528052805 %28054CFD0793FD09FFFD06A8A19AFD27936F4B2805280528052805280528 %052805280528052805280528052805280528052805280528052805280505 %27052805270528052705280527052805270528050569939393689368C3FD %06FFA8A87DA8A8A87DA8A193689393936893939368939393689393936893 %93936893939368939393689393938C939393696F4B270506052705280527 %052805270528052705280527052805270528052705280527052805270528 %052705282805280528052805280528052805280528052805284BFD05938C %9AFD04FFFD0AA89AFD0893B5FD1793B593936F6F27280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528050028050500280505002805050028050500280505219393 %93689368937DA8A8A87DA87DA87DA87DA884A8939368936F936893929345 %6F6F93689392938C9392938C9392938C93939368936F6F21270505000605 %050028050500280505002805050028050500280505002805050028050500 %280505002805050028050500280505280528052805280528052805280528 %0528052827FD0793A1AFFD0BA8A1FD0A9327280528274C274C4B704B6F4B %704B6F4B4C4B4C2728052805280528052805280528052805280528052805 %280528052805280528052805280528052805280528052805280528052805 %2805280500280527002805270028052700280527000605938C9393936893 %9AA87DA8A8A87DA8A8A884A89A9368939393689393938C6F050500280505 %000605050006050500060505000605050028052700280527002805270028 %052700280527002805270028052700280527002805270028052700280527 %002805270028052700280527280528052805280528052805280528050605 %FD07939AAFFD08A8A1A1FD0B936F05280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %05280505050027050500270505002705050006056F8C936F9368938C9A7D %A8A1A87DA89A9A6F93689368936F9368939393684B050500270505002705 %050027050500270505002705050027050500270505002705050027050500 %270505002705050027050500270505002705050027050500270505002705 %050027050500270505002728052805280528052805280528052827FD1193 %8CFD0B934B28052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805052700 %2805270028052700280505006F93938C9393936893939368939393689393 %936893939368939393686F27050028052700280527002805270028052700 %280527002805270028052700280527002805270028052700280527002805 %270028052700280527002805270028052700280527002805270028052700 %2805270028280528052805280528052805280528054C6F9393B5FD14934B %280528052805280528052805280528052805280528052805280528052805 %280528052805280528052805280528052805280528052805280528052805 %280528052805280528052805280528052805280528052805280500270005 %0027000500270005002700050005004B459393938C9393938C9393938C93 %9293686F4B27000600050027000500270005002700050027000500270005 %002700050027000500270005002700050027000500270005002700050027 %000500270005002700050027000500270005002700050027000500270005 %00270005280528052805280528052805280528052805280528052827706F %6F6F93FD046F4B4B27280506052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280500280505002805050028050500280505002805 %050028050500060505002805050006050500280505002805050028050500 %280505002805050028050500280505002805050028050500280505002805 %050028050500280505002805050028050500280505002805050028050500 %280505002805050028050500280505002805052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805000500 %270005002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002728052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528050505002705050027050500270505002705 %050027050500270505002705050027050500270505002705050027050500 %270505002705050027050500270505002705050027050500270505002705 %050027050500270505002705050027050500270505002705050027050500 %270505002705050027050500270505002705050027280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280500 %270005002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805002705050027050500270505002705 %050027050500270505002705050027050500270505002705050027050500 %270505002705050027050500270505002705050027050500270505002705 %050027050500270505002705050027050500270505002705050027050500 %270505002705050027050500270505002705050027050527052805270528 %052705280527052805270528052705280527052805270528052705280527 %052805270528052705280527052805270528052705280527052805270528 %052705280527052805270528052705280527052805270528052705280527 %052805270528052705280527052805270528052705280527052805270528 %050005002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280505050027050500270505002705 %050027050500270505002705050027050500270505002705050027050500 %270505002705050027050500270505002705050027050500270505002705 %050027050500270505002705050027050500270505002705050027050500 %270505002705050027050500270505002705050027050500272805270528 %052705280527052805270528052705280527052805270528052705280527 %052805270528052705280527052805270528052705280527052805270528 %052705280527052805270528052705280527052805270528052705280527 %052805270528052705280527052805270528052705280527052805270528 %052705002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528052805280528052805280528 %052805280528052805280528052805280528050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500270005002700050027000500270005270528 %052705280527052805270528052705280527052805270528052705280527 %052805270528052705280527052805270528052705280527052805270528 %052705280527052805270528052705280527052805270528052705280527 %052805270528052705280527052805270528052705280527052805270528 %052705280500050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500272705280527052805270528052705280527 %052805270528052705280527052805270528052705280527052805270528 %052705280527052805270528052705280527052805270528052705280527 %052805270528052705280527052805270528052705280527052805270528 %052705280527052805270528052705280527052805000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500270005002700050027000500270005002727 %052700270527002705270027052700270527002705270027052700270527 %002705270027052700270527002705270027052700270527002705270027 %052700270527002705270027052700270527002705270027052700270527 %002705270027052700270527002705270027052700270527002705270027 %052700270527000027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500270005002700050027000500270005002700 %050027000500270005002700050027000500270005002700050027000500 %270005002700050027000500270005 %%EndData endstream endobj 201 0 obj <</Length 65536>>stream -%AI12_CompressedDataxœì½m$Éq&øâ?ä}@.vŠáîî¼Å•YUZîRAR+‹A«§Eöª_==Òñ~ýÙ󘙻GfVOõËPÄiÊÑ]•–áoæöò˜ù_ý¿ùÝW·ß¼ý§_¥›ù0ýÕ_Þ½xöþí»_H=üêÕ«ï¿{ÿ¤Ÿýöç‡of¹èöWõk»ð¼x÷ÝË·o~ɯøåîþÙ_?û§w/_¼:Ü¿ùËW??üìçòÍï_¾õB¾{ùüí››g/î“ûïž½—oBøÅ\ç°büåRpÁ³7ÿúì»ï^þ¿ø:§š„v|ûý›o^¾ùÃñíÿóËÃWy;|µ–|XK8äE¾þ¯/û⻸æîíóï_¿xóþ7ïÞ>ñÝw§·¯Þ¾ûî—‡ÓŸž½9üͳ?È7Ïÿ÷‹W¯ÞþÛáøêÙó™¤Íë×/_½æ½~öþ"{û«¿>~ÿòÕ7ûýëz! Ï5‚œ¾f•ÿÔ%ÕâoË׿z-”ß½xÿ^ÞMˆûí_Ç×"ËÏþço_üá%;_:èýܪ}÷öÛ×ÏÞýËwWZ…ïÿâõ·¯¤3Ùî¸æ›õð•þ?صÒíŸXñUNRWšåÏ€¾Ç%½Ÿ^üëËÿöËÃß¾}óB;ãöÝûßé°,Ë<ëÿúÍo¿õâÝß¿yù^^2ƒ´ioüÍÛo^¼’ëÛý¯ž±XBÿ_/øý³wxñ^Æòí«ïßsŽU‚ôö¯Ÿýé†,êþîÛo~ÿöð¿J!ȵ7Ë’Ó!ܤå¶X[‘ê+ŸòÕrHµ=7ôÿµzT†ªü3ñ72p÷îå^¾ùåWÒXéú5ë˜þõ»—ßô!-ñPõ?¶å¦ÿ6ÿ§/-íÿþÅë™J§¿¦Æ|ó7¿“çÞ¿ùæôö5á;Ì}™odº¼zûý®ýÍoäöï¿ÕFðó×2^¿y÷ò êœþ–ßÔ¯óê{ùê¯ß½ýþÛ_½ùç·ÓÏtÿÏeAË~sø»úßòA–-§ëá÷ïž=— -äs»FÖï·?ÿ`uÒ¸w/ú¥ÜÉþû‡ï¾{ñϲÐúíJ½ó¯/^½ýv¨¶Qž½ùæðÏÞ}ûÃUÿæÕ³7ÏÞHo5ÿúå¿Ê7Ϥ§zÝö„Je¢|+Ã[xÉÙ>pÁðÕôìý…'½xóÍwný¸q¥ýp}¿{Ž9øîp|÷ýw<üþíÛWÚýWv#“Šëÿ2žñÞðæïÞh]>É.8’°¡¿¸§ÈÕ?A¾üK®ýôìÕ«—x÷ìÛ?¾|~íW¾oOÒï>fbýéõ?½}õò»×}> ”ß<{÷þåóW/~÷§ïÞ¿xýäÁ=ÜóR˜Ü#Ëøƒ×üîßž½þÇ_¿ü§wÏDúùàêÃ�üóË7ßÈÜÿÝ÷/ß¿èôöõ·^¿ûã³o_°ïÿøÀ+×*\¿Ö?2÷¯¾šÂáøf`ýýîÙ7/e×ëïß¼yöZØúŒtHåçÓUªìXñpüfúŸÓ™îORîXüçåaf V¢ý’X–+E¨ÿX¥øÿÿOüùO‹U=ý_òÇt\äßzÌüWEþÝ7ùwä¿»ãIþ=ï§Yþ…Sä¿Ä«ýŸNË)Ëï<Šü*§*ñ?þmúŸo±,˺ä¥HÙ–[)§åN -Z0¯QJZ—?EJ]o¥×Óz'EÚ˜gR^òšñSsò–o³´'Ÿò”‡üPæ¤Ä’ð©'K©,·å–o¶pŽáî¤ÃçbŒ).1Çk¼ÇxïÓœBJiIk*".ߦcºK÷˼Ä%I½•ï~/ïÖ4ñ…ñº§õ^^3ÊK®òØMÞKÞIÞ&É{àù§r_gmñò¼Ùhy¶–Ä¢?ÁÊŒb#yoåŽåÄr´r;I£n¥i(Õ -»"d–ÕÊÂ"ã[Hã‚ôÿ,ãp/åNZvZŽŸMZZ¥½Òé2røI|Õ =1Ë$½—r—dZHÿÜJÙ&é¬*]†‘Z¥ûéD´*H‡Î2)ï¥ÜE™MÒÍ·R6¾EËC¹/wÒAGé¦M:«È°2€I†2”Y†ö^:ó$]z+[¥{³t²ˆ¦ÒAfǽ̑“Ì–Ûu[ë$ã‘eT6/XÓî¬Y›5iµæHcä-–Ã_}}|'KVäÊÃ,f©ËVä÷R¶’îÍ:o5@ôœË²Š`zò,É_ɪⰊ,²¼Ô'’ç×_¬¾ãwx7LÀŒºæ°eÜs‰¤ÌÒ/3–mŽò;ÅuÙø^Ú*_í‹T'ov¼kÕYæèå²ýöÕ7/Þ~IyÚ}’ç媳•Àb#÷_¦ùü'œ•8”de±²òŸ—Œ“üKi¥ÎÛ®Üå(ådån(÷óÃ4?xÙ½Øø‡’†²ìŠæ‰¿t‰ëR¯CÙvå¶ñŠ£ñå—Gœäƒ3˜‡±Œ]Ç—óŸ4”e(+\V>ÞÚK›ýÿv(G-d cùØh¦Ýx.èö±•2µá]†AÖQGWø3cTën|·a„åÿɆÚû؆Yc”ïÇÑ–ÿõg¾:ÖqÚ t2Ví¬[™¸³ôýßZÙŒ%~ù–±E¨n7}ÌPt|È6, ÉÆcu²rÇroEÅ_[Òˆq,Gi±Ž¯ìÐ#Éû&²ñ™ÍÛØ”¾A/Ü +'ÌqâsñœÈ=:sÞdÂ.ý £„«AÖÀN Iã(Ì_wk•1²l›I²eOòBAf©ŠÕ¤Šwï™Ò„JU¶¦£lRwåAæI¨QvÇUäR·z[õ®Þ×™/qÚÒ¶lRÏV·m;n§í~{Id“\D¬É·õv»½½Ñëöt{w{Ï™)¥”ÍT2;©<v -{⤮"2Õíéx:îN2ÙGa9)ßÉËÝÕ»íîxw™óá~–qÉå>ß‹ðq¿Ý˳ NC)q& -ÒÒy÷‡[)òȇ;ˆ¨ûËYF³}¾ÊÝPNC9îÊíP6/“üW‡R†’weÊ^*îE&àÔ$à¸caùÎã«ß?w»rÒ¢2üq(·CÙv¥¥%eî×V–]IC‰C C™Ç¢]>Yßo?þœ†rÔ•¹ÇýèíÇÌGk?DûaYT9Fb‚}Çï»Ûºù¬oÙŸSëÒ}Gî{oßcgý´ïšé¬G´7nl,ÕJ±BÝânµB•å.Y‰×žm™ÊúÛô÷–é³üçÈrkec©VdmCµÊVV+ÉOÉŠ²^gôÂA},ï9~GŽWåø¬¦vý=;ûÈÎìË•½‡>›ÙGwìtDØò•mEg6èŽ ¸å+¾áÂ7 -Ðeø G©YBÇ„¶ ½3 -7Ÿ'™H÷ÒË'az·Âþª(dY˜á"L1 -kœe‚ÝKÿŸ„aÞ -Û¬[º -#M²Ùd"ÜI7…ÛnµNÂx³0àEtŽ(ìø3µˆ<OçŠÄÇêT‰îLÚR¨ -¦SîLýÁ¶Z¨.܈4½®ŠˆŽ¨Wá:¿Š×™.xGùMÕ¾JéO<Uíy«a~{¿bGìŒáa`õÊ6™T«L¨ “éÚTŠ¶Gp÷Áî@ë»ÐÊÕë;‘íEjÀgc¿k›]6Âùv—Úv‡ÍîTå~TéWSê)5Ph¸§ØLpX›èp;v;zrÚü UÊ -swüˆÕ¢kÅ7Ķ‹ò{¶œÖa0ÛAÚ,EÂЄ•ðTð¹mÖ Œñƒ5Æ›ãR³IÉT+X•WÔ«a%ì ½ùjOè+¥ƒ´()$ù"3àȹp&xW¬¶8ÇyNŸ*‡¼G»ø -;Ús£âEÚõg«ñ³ã±‰¿^º"Sw*N1µ'›™gÔŒL[švöž8Ú{¼ìU0ßcÎ,@'ûtœvŠš†\)Àïí¬Ô³Ò•Hý+OÍh´7%]”x¥ØÏ´Ót/:¬¸QHk¿ï®áSÓ´O¦ŒU;»Z¶GKu½o”|-ù‰¥«”ëX¦ýÇflè_–ôHᤘæøÄrƒ¯”é‰>ùçšîþY?_¬BßCëQ•Q]̾³¢–%ÜHQMv#†ôéÌŠëf‘>ýÏW³K¨¾zÇ{Ôuì*ýåj-Íw–]üÕmCi\ Ó¯Lù«™%ºyêl9ú‚¼›£Öhä:^]ŽÇiìrAš1å|}Ö•[gÜBsm‰¶ÏÓÅÊ<_„—‹òƒeº0^[©Z¿gËslŸ½†?´Žÿý—ݯðšˆ:j?—úÊ#—úK!3tè{J›i~ÙäØ´Ÿ‡Aâ(;‰#ühÔ€&Q © -%h¦¤:ЉÆÕƒjÓƒ’éAЄN¢©Uš’–‰ªPàâx V|‡'Èý•.èBІ¢jCÔ‡îL:RªÔ‡ s…É”¢j¸'zÒ A5ªT -TŽ—Ò5¤5¤#t}_¸T!ø“Ì£DÓŒú“îD]r’{”ʲ6R"§RÒƒ)ÖG-“Èm›ù”Šù•Ô«”(ÅÇ‹C¦=™o鸓Ï*(”ejœúBêd,·¤êï‘çKM^{„ S½`œ;ÉeÇ#wqÚÉ$(g¼í*[û€q)1<M<Ê>¾ä:6mQËh¦öf¹ÁÔ¸·…ù¾:ÙqWÒ®ìÍnëYÉ»R¦)¯ìŒ|•ŠÒ¾Üž•ãy™šÍËËÝE¹üy¸,>Ǧq§~WJ¼ZÒÕ²8Ì༬”ühi¶ÜigØ-47¨l?Pn§9ùz9>±¹O;Ëõ‡ÊÝÓÊt…xmŸ\¦G¿úÄŸËMôS+2ÃÍÜÔÏh-‹5gºy³XqëçfÅl£“™JýÇyC_6>ÎY]EvIÞ´j³]&´äVÜÌ[[٬ܶr¼Â£ägº`P×XS7Ý_çFšaBqŸÇ¸ÎÀiŽ´á<Îk>ÀcvLÅËôAžr…“ü™>Ì7žÀ2ÎXÃ4r‰Of ÃzŒ1<‘ \®üÇ×ñ‡ËŸi” ugE‘í¤ÆN:a#áRËd¨/÷ʼnûº'êK=²ŠûÊ%·æ™½ƒo–¸¯@PÕbÚ2Q>u/-ü´÷ôÔÎgÈ/üÀg{K~[, õÝÂ{Á’܉NÜ -I›ŽÜ£p£»æÎEüƒ$ Ÿî"¯ ¹P,ßDD¿¥÷$üâÞ¼¼óm˜DŽ”çáî…Ã7ßJúÛàø¥ëW -¦#Á@c¢x!P/ãÅñ>Óq£OX½Â'ò",íú‡çÆrÙ:›uöÚÙªqÔ©±ÒÎBuv¦Ùyeç‘7Žñnj|päïíyÝÈâF¶60³iàc{ÖuƬ®H>—ühi®Ë-q™3±c,Ó‡¸Æ²‰'n🺎; mÑ�lk>dÆuÈr9”t#$6@Ø.íü²›U¡`5܈˜îü:BÚB.ÛBð´ÛèkH¸²Fû:†5owVãMš×¥ƒÙ>·"¾ x+ño²È3îåZ”oÖµ-„å M˜â².‰Üëu¥›YØJ©/TŸ¾[žH(|s^ï«Âˆµ.‡Js…£¢.·uÛÕµÎó6¼Û—©ïÓG1–›šÒ†šêZ¶ÏÊóÚ®ÌT{óm»~þØ4Ý_ôƒàƼøwïžÿñå7?Ÿü¥ù&ç û$Æ1ÅR2Œ²¸Ø½ø#¿[¶vÇÁïÐÈ.»ã`wØ2=~ÒÍÚaO½Ý´ä›”0½?áÁûû?¦›÷/’>ÆÿrãâH{Ûl׉¶ß¬æÏ,¶»ÜÚ†r7:žm³X%»%!قἊ@z)<Ð*¤"A¦0pK1àž»€^Ø÷uÏ¿¥µïîب F÷©}[ÍäØ‹g€ªKלô -7PÜúVòÚÏãhØÑx½šQ†VBEN;ÑÐç†Âb( -ÅQ’‚¦Â{SœVuë~2 Cž„ }³M -Á>pRig€,MºÙFp§ãdx !½VGRfUa¥œ -ù´Cþo¥w¢þ¼+êG·î¢#/vÀ ³ÎÍëy¢uPÍÅÌ~‹y‚Ÿ˜yZFÝü÷¨Ø&Ã4Ý5Ó¡—ܾLIáI3…¢û}�Š6¨¨šOÕžšV±R³ÈÔ. -5ŒJkð-õŒ# wÅÊ*]åPôçʸ…B‹³Æ›¸îAíÃð ŠÕ¸Ä‰JH¥ÒÃOFUäL1]CÛ"Qî-e†‘}¯’`Nl$=Qª¾opÒH…ÄA¥£Fr¢Frt2…$ -I1eäHeäŽÊˆN»²zt¦…L´qt5äRYM¡*Òô#uj"ʇpgøç¤HOáåß÷íï=Õ¬æ“Á¨åƒù"ï»WÒÿ7õªWƒ¼A¬C³Ð§†°ï¿Óî÷bì×áØkÃÝ«ñ_¸â´CÞ;þ¾Øÿê5ÐÿÕ™Ûÿ¿Ýùîªmø{à(°Ú©Ì…‘ «ÍžŽª§dðÙ}Éõ¥–ˆ9_fœ1ÎÈêÿð3úÎýyÌ[9ºBsKŒŠK‡è¥Ouq/ǹ#öòÓøûüzÄ@ YÅn<ŽìH»¿Ó4|XÎ\6£#çºÏºß<ØÓ…¯Gû®»”{¯öîƒÐ=0;dêñ -2µ(µÃQˆjTåôÜáeŸÈn¹ÑëV_hÌXÉO’mùºéï]¢·Í%ZȬÌ-:Q -è¾Ñ;¾œn{ºñùÖ×6¿¶ýùHÌ(7AÙ'ÛÇpÜGìè=ºÇ6餂yHÏ1¤¡H?€#èÚ'ׂråK´øP~0Þ-ßfŸNú)]šQ}–ðÒV¸ôt˜¾Û!¦Ÿ•Õüy?7§-=b¥ç6QÌ®¤-ÓúmÎê¬Ý¸×qîN6}3·Â>‰“A•—«+×'ô½u×iðõëä–2Ù/6Ë3•Š(ÊzÉÁu£P¿°Nû{N}N~Å@\sÒ‡Dœ—ëžÀxnÜ¿š¸<±Çó_RL—ÑgpÿëA—0]®(gÛ|æÏ}<È"MÆY„¬œÇÖ¬œéêâ9Τ¾~Æ54¬¤³pT2ÓJÅâ;#2—T¡SÏA˜ÕJÛˆhÑ5C½^·Ö²3cÈÕqˆùü2õÑêSsÞµûMaO#›¥fÙ²Ö|#òSíoóÉ5ðùeIÂú`›JeCt*ï ¡ˆÜâ/4µ.Â3‡F¬Yn ÝPùÙ© ¬Î)±×´UýdŸ©g°)¸Æ5í]«f»Y×y4¢|~MeNùþõëï`QÑ?h3«Õ ù¹@6JUcei=Çú[콋î -†DëâõÚdèÒ$åÉ表£(ÜÃN©îMCÔbm(ÍPªˆNÅw>®sj´:ái„Uå܉øh[Ù½kž¢{½d�PÖCí:õĉ€§Bø“*¢®Œ}4Þä -ö¢á®M^ÖuZ–„B;D5•U‹íR<´¶Í¸y–DÔ0¤S«§VÖVúOi¥¶rÛʱ—)Ÿ†Ò½í{—Ëã»’†Â¾›ÊÒʺ+—?õ¬lWÊíTn/Êé‘r÷ÒÜFÓuŸ5•û-œÈS_¢\Æàö(ÜÒâp}•†}<Iå¢<öhb,ÅÉÔÑ]L -—Ùà _v×ðfq0wƒ¥fñõûÌdkâDïàÜ‚uW×–ääÖ›À‰fÇÕæfeÖ ÌÄ;Ì@wGΣKØÆXÉ@m Ñ>涗Jc/l/8hw™Íî²Òê¢.à9€ïÌú)Äu«Ä½Ù]èû~ÀýÛÀÛ`s91*Ï{Ã6ßïtæüÍ”;ÂÆÀ*ñv(M‡ÐtðÇj:sçTf»�ÊìÂ2¦abTÙƒ`\,;Ǻ\b\.ñt§é -ªå*še”[/Q-½LW$㫹'�ä–ëHºÇPt,ÔÔóëѺ¥ëñ¹=6×ß¡Ký&ÒB;Eô}ômcvɺKÑ=ж ȃ@|§ ¨}`ms/Ãi»jx¦ŽúàtE¼n¢¸PÏô@Ó§+ªà^Ü«ƒ{…°š)´´ÍnšZØUCWcK»1*âà (Þ7Å EOþàÛþ³µR[é{W߆×V–^&Ó+»v3Œºæ qö2jbÏiÐaN»r¼(·gåÚOÈN÷åêÎMSÏ㥉ASÿó¬,]¸ƒM[úå㣵?¯ÍÉé,Fò2f{)¹Û#·Í975ƒÝh¬»·iÚ u;3úêš·Îýu·>¾ÅÆG;4žÅ2œš§j;‹hHÝVgÖºûr7qÅ9ý7s` -§îºTÃ]w^îÝ—=Ò¡P¶]'wP/fÜ…<Ü“_í6 -%¥øVÏ[ÄÔk=Ø&w×Òk‡DhPD¶T[¡ÁÑRnI™Z”ăéÊ=O–ƒëhܧZ=ȦI˜’’ÒDÝÇCRÕظǢã<Îb»M¦~mƒ�úXPl/˵�Y“½ü¹Œc{,|ê -~º ÝJùŠ`”ºE\ÿÞ�ë\E¹#æFÚÍ�+l¡[!®&û´»?Æ:p‘à0\ËzvIwÚ†[ J³XÖŸðxܺ†¿?xôúd0Ôsê>ˆ>M-Û`5ÅÂ1§9ûpºíÝ[Ýı\(Iþâtß_ÿ¼ÇI[`F‹§f#ø�’vêíyúí…{Ž€±·wý=Y‡‡Ý뎚ÝcÉ®SOöX{â %AÉJOrû0õô$?jF•Ÿ^X_x°q§¥¬3’Æ¢Vgèâ…fØ5<]ùãz¶ÅϯJ¸£&3ßgKÜÑ>ƒÎóU*d©zÝqÑhà0¬çá ‰ØƒëF“—n-q©š]*—¤B˜4ÚíÔL‘ì¯ÐVx7$?s“ê{ê³b0z‚è25¸Êªb@•p~5›É8?ZNî·‡©™O¸M_YÌâPúlJ«A]·ðSŸ&³µ(Öþ΀.cé!»õž+q_¦¦Õõ’®–呲îËtFÈO*åñ2=úUý´2}ÄÅW”¿Ë2=í²§—Ÿ*¼rA“\ -Ë‹¨ì) ”]®ÅHtQ᦯ÆÜ.dÕt;µ<È*_a{³+&l³Áç,†§æ:`®…îL +ç‘;û¸Ær�’»ˆÜQ \nÆZá?“ÍÄ“9Tï-ˆc¶8ž`ê‰CçÖÏãÅmús;gñ~ív·~tÃH醔p^¦1ÐÎ*“vÜ…¼pl?çåŠã‘ÒmJu?<©\Xxöeú¡>¶<µÂ'ÿLO¿ô?L…qè÷O_©Eܪo¨å˦4x’VO£¾!¡Ã‰Z‚ú4C+t³‡†«^wÙYÕÕãÛÑÍs•ƒ8q¨í•è¿«\ÄùHAVAe&·;N¢ñs^ÒùI4“Kç*«Ù#Ë40ÿéstÏWvÈs�Œs˜é‚É<Ælâ#åŒãLOd@?ÄŽZ™>ôå'”ò¸O*?Uøg¨ðc¢Sžüó¡ -÷¸áta);;ŽÙp¦fÙeNÃlÚѧ&¹{;›é‰€Œ&‹=¨íŒ‹‡&-´®ìJGÉ"H -™Æ‘GGèᡤ‰ÎkE:€•Àî.R`ÝÖ«ÀfÔ#ש²ªÔ|Ö«ò¢ÉØÐÉB–à[ÍmŹ¥ó+wKu0•§‰TדFEhÔnö -ɹÐ:ü(‚øîJ¹Ì¦¢žàùƒ%N§øä²<¥LO»ì”ŸZ¦§_ú¦B7kÝ]$Ÿ=Êœ-÷«,:dc½³Ä]™ »f¦ê:ÒF•iŸ -–šë(³Œ®-¥`’‚= -Î,8²Ô‰¥ ó;¦ßRhùêy·è©jé‡kñhª©ÈŸ’zø<ùpK?ܱã“y™ÜÃäÞ¥dòÐœJw¼Ÿ×R7]H“yÜ}´w¹ã¨;ºËht¥î-šFgÑÎQtî&:w=âšÎD¹‡vΡy†¦ÇCלBOð16ç©åô”2=í²G,QWÊôôKÿÃTøù‰ƒüÄAþr×ç_~…?qŸ8ÈOä/w}þåWØ}ÝWO®{:®ò=30çe+L¨²Ê¥”U]ßaFôÔ•?øg¾â5ÿ¢µš™eB:¬áf6ºÑϾñëå™òE7ˆÛ?¤å&‡žßéWìï/Rëó!âÈÂ\¹ÿüŠv)W|þ#ù3ÝþñºÛ?ÂíŸÜíß²‰ÝŸA“ïÎ ÊîX·wåôqE«9‡!ãçC>—ïF!w Élpñ»†¿<z©^ÆÙ¸1q<F® ²ñäÅñÔųòWMObsj™ýºËæ‚Å~|vc«\CBÂóº´ãr씚v.§ðèIgênÆ“Í|î##K¹*§)i •¼g^˜+.!1/Ú¼Úá£ç\Çþ|¹*5ºtc`m"+iµp‘j9‡¼ªÓðœIxh¸¿¿Î§Ý¯Ïþ"Mùâ}ó™,ð*Œ½7<ã•nÔ`Œ“Ã.7Y.p“×ÀžghUÝûqÚæj¿ÞŠë Ò]{&oÒ§@(Þ'<Õã¾tLŸ0yD‡jÿxâ¾þñ°ç*u€éíxÃù?:Ê/]=~7× gÏ2¾ŽI–tK¸oi^{’×u8M3œ'fÉfHßÎ×S¹æ–ÂõÖâôtÞÒ=¥ñÆ‘*ÞJu¯”g£³êhÁÄ÷æ’ï°ž4Ä ÃU§ìDzóUfDÓ¨ÞhîùBµÇaz†4Ìò–Ýå<¿Ë˜á%Òù>Ó%ïY^Æ</C�ÉôXI;ÃHª|)8íõÕöt8íÙÜþØ\ ûð)ws/’ûæÙR‰ õNáV¹æÃõ£Å?æ¦Ï[gõêB«»ä-šç@³1;\Ô¤*=“þ<ó³ÃW;£AXõ†û†zhH¿Õo–Þ°Ë#x2Opâ:šï7ÙJÑ'<råõìAŽºèŠ~c#ϳå\Ë—®ä˱\9S0sÂC=¬Qw¬Ý%‘PÇïvœFxÍdÇíx”¡ÇªÅ«¦ÏíÏX¯>)~ uO{ZçlÓY\\´ 47§ãCKbÖpÏC†6ž.”ŽAúðŽy3³¼E”gâô fÃ$UÜ3ùã*,p¦}p“IµÊä -þ9ÊŒ+¾“,ÍF¹ÝòHL= òºdõ„Ó588ÄrŸg„_þ>·-§!•cË+ßpñŽßzŒíïÓ.Í@Ƕðõœ>bÌ®[™\Ún¯äËÿ�ß<çœÈbÕ±ÿðÿ:ô?·¦–ìTŠCîÌu—Á¡¿ßcúœE7ܯÁˆÅë°»¯»QèÐ\f’]GÐYNY¢ƒÙ Ö‹½�Пû‰˜Ÿ•XŸ1>‰¸Àyî áYØH˜œDÜÍF8 `2À·è›gÞÑÇzÔêô9gú‰Ä?½Ù'½Ù &f™ú‘ -~˜7*øyžH|7²<ÒÊà(ÍcuùGÏóUErrùájU°\æÈœàkȤû¤k)55ž$¤zWþhUæx³‰ -=¼éVÍ1Ÿg÷*à 6ß/fv?«VûtFâQ´Y¸ -¶†9m9Wm<“û_ù㪠ÿ…*ü,!¹&ã/;»9Ó&!{Oµ$íLÐîÌéÙ,1س&AÖ=òÞ6ÅdJ8¶½m2ýû®éßáä“/íxÏ/ÞVÏU¥’…<íO£:;ˆjÕˆß@5E5¦üð™yO+ÓÇiôÃåß¿BµËi*Þ}üln°´é9é*幄wl‰¬³Â&E>ÙÎhlÝÁ!ÏYÒª–O|±ìln89q—x0¤o¤ÉdiéÔˆ÷š¹DS Í–¶*Ò`G¸'^«–ã¬G,u@íà.9KFv~Ö7ó]]/ëÕ²Lu¹Zò§–éÓoýBêÔèY×<§Ú×ó6=±a±Û@÷TÍ0ð&Ïòéî“2ÿã÷˜äzÒ]@ö'áÝ?éç§ -Ÿpƒ‚1Ëj<‰ ÓpqîÌÓo<õ‚^¤Ä»…ÇÙÎ<È’Ý(×±ò˜X7vM´»3äÅe‘÷³gý¸ˆ4 ‡x{jüžQ<ev<q{»˜ò-#äþ¼úŸJÿ¤C«èxù,¿x…jŠ9Ù9Ð+M2#¸«ZÚMzÐ2|øP“©à‘÷F§…û8$Hr·'IܡΓYº,ŸÞÙ»Ofó>¶ØOßHzÂÌþ3düœÎòn.%=Râõ2=òEøÔ2}ú_¨BÅ:tŸÀèp¿@¸@@8þa<x¼çƹ1îÒâõ$éOɈ·Ï‰ÇÌ_º’Z£_öȯ³@š«‡eÞOEå\`WžVNÓƒ\>®üûW8øþÝ¥â£ÂêÓ#_\?tà2{ú˜EZÑtõ‚|‘]rŸa2\,$_FÇÉÖÐfk'›7nÙgd\\Iqθ=“üƒÝ'ZäÌ«6ù$»ùƒ¼ö‘œ<ïŽU÷•w©øs*¼®",è¦qL*È…²r–Qy„…uí§iDSKí{—f‘ÖÝEåÍ5{20ô‘ZX±D€E½HA…»‰RßÉ’þB3ÅŸeöƒ‰OÏ0ðÁ¼7Ý|Qå?µê©ðwœšÜG‰Ïä<Èwê ÆAx»¥®9,ýÙ#iªðâg¯ŸY ñÔ>øÙ;ñLáÛ+‚ -Jí(Ÿ½¦¹MƒªYÏTͲSR˜ªò™sñóg©ðêÁcÇZ™® u~¦Ó¨Î4-碩M†Ü/8 ¸Í‡Ø --™^²CÁòRÏr�jR=÷"Ž~Äy/öt†<H`k^£}¯3íDZ–”Ÿçê)–ÿÞRñçTøˆîðH1cºPA.••½23è9טú¹VŽ–U¤p?ä™[Ž‘dyÌ{:úNý¬ñÍ<¦ý`¿h‡‹ë~·ÓΔÍ]é÷;Ñ~èù[å…a¯VHÉ¿»TücTøAÝbzä‹Ç˜ûk:O׈¦!/£BÕÕ,Ï Ðu±ln„ÒÓôO¦ÄõãÚ¦è]fìOlï ¿l®sLŽõ»8WObÏ»³qO÷wg¨³" ø0a[8¹·áÆÜÅ ]ÍÕSê ú=”å&¬epÊ}^5tms܈£žCÌ<ŽGxfX5·ã’¶ˆf¾zôå…tXÊ°åþ2Ÿ]“ž~ôQMªå—›²{O®á³œië5gÚºC¦^ŽœïWON»,ç˜sLÎaEþ§!Ëé'ùÿý€Ãýñ]ÄJ矧h0žìx.$@àa«Ûë·pšºx–u:î<îÉÔ³‘:žßð0´vy€Ã6’¶?ÂaiG8ÄéÑSº~;˜§ l†}ÞÖÈÄæXKñS³ò,(2®€Æ‡G3µ~üÍzΖ, ºeN,±ØÕc6ű^‡¥~½Ÿ·Ö®ÂÀןpà?áÀÂQxÞ®4¡^D…'D=ž›Þ4º/l’i;ÍgÛRxûäíÇÝÙ9«~dP?4¨¶CƒòpxQ?0'#ñþ椻YøIwëy g)ì&ÜcßÖÜ*WE¦²~(ríѨ¯œ|°Ã_)ë²K¾6u‡êÝB±îÖSëÖ³µó“.ÞözxÚã“÷qf¹›Âsߧò߬Š§±ô'åÉ??±5ȦDíBæ,„uPæ¼m6ÅͶ¹~~¦èÙ:ù캾t¤Û?üñåûÿùp|õìù¿È²Ø}üsœri6ûÄs@¦‹„³ž®ÚÓÍŽ©fïÚq‚û\ÕžcöÔÕ½¥—}•<=þ˜ÿØññŸÿ? ï‰ÿŸ>=�ÀJKé‰ÏÍ.gV“ó|•Ëê'Ÿ°2©šúÈLñÜ«E©“¥ç'v¸ç(Ñwc€¿÷vàéòœŸå'6«á‡,†O‹·¸<láS#.ö©úaç)$î®$)xÒTø„“kæ/uvÍte"ìBuèÿ'Âx&©Oƒ!Yõ‡¦Â%¬Þ§«63òT?/Àå|RÜMŸâ2L‘a¢L˱OGñå¤g“¡ÿ|^óL];»ì¹Ût…¹]Ñ/®fÞ綀¢é3#ŠŠÆõ¢éÓcŠÌ³pTãÍén™dmìÓŽÜ_I<òc]ô)¦º«‡Mc¬kX>Gòyⶻžºm2³³·µämwOJ߶OÞfÑHÓç…#iT¯¡V4}z@«À3dCª¤*Ëéá,=L¹’A槩ðÓTøi*ü4KõI•.òC}ü½?–ÉI_ÿíÛ7¿y÷òÍû—oþðÕWƒ®=~1ýí·ø&é7¿yöþý‹woD ¿}õ§ï¾{&ê·ýqض›-§žÓ%çtˆËr#Û¸üòÌ¥Ì7½åÿÿøoòë{þé>Çü?þ7ùóñߤñ‡¿9üÏÿ5¾Ñ[~+¿ü^åáµ/tøõHõ÷ùõpÿ5Úîî7òï·ïÞß½|þþåÛ7ÏÞýéðKš,~q|ûö•´þWÖ_ßóòýÛw_Ÿ=ÿé¯ÿòÕ‹¯ûâùûŸþ³ÜðÊ?kêúžÜ±5ÇéqT Ú C\91™Õ’þÙªÕÏ -\¶:§íðÏXÑ®ãR7sÊ2îõ&‰d¯#M‹"pÖí&‹Hu#U‡µà°Vis•ËkL‡u½ ²¶Ïq[]odñÖÃo2B@Eò¿YdU–íF„~œ›o‚,ÀÃ’ndE»m»™…+’|YXyѧÅz³Fôë|³n›LÑr“`|åme¹D®ÊÌ•§eyʼäCŠúN ¤µn‡$ÍéVobµd˜k±Ïåò&üã¢DE’á\1UkZžo ”–|ƒ³Qº&ÈZ<,á&‰~shW¤õfñ›Âª¹½vÌ+r¥iÊ4$'Ëùf Ûr«©‚Þ•o¶òuãIRW]pîšnŒ “ñ›¤5첯°(tuª7óZÃa‘>ö'ẏ@v²ê}Òç€xB±f,ÂR6¼³Œ8:W>/‡Åxo6` 3_úSšÊÑD-\òÌ5K;Ӣ㵬7ò¦6^)ÜÈß2‡²ôkvÉíUÔ‰C^dÜVyäå!Ro–‡ÉÐêm2å‚tÜ¡dDkWv¢pç·ÉŽ$Y”i RO–YJ›T²J2êBÔï!ÍÒ Mƽ.2Î2L2ñ9ƒeJ -¿×“׺ɳô¹Ì@8™d*áaÒ²*w¯2§’Ì6NéuÖñ6`Ql"#¯‹t@BïɳäÝç5ÅÃÅ*Ã]ÿÌ}Ç!¯Le‡ë¹N^D™XÈGÈÙ²!èZ¦ZÙsû¬“G^K¶ê~¬Qê†JŒàòÙD™»[ÆUVÌ56¬=Ë m¦â…úUÞŽVÏYüÝ) #dXJ’5/óêõŽ¸è¼J2+e?Þ@íU8„°ÚUF±tÐd–YýªEŸÚëq‚=Mosb¼UÕnýáiFÐÛüÚUþÖž³¶y£ÿÓßËÿä âWß}ý7ÏdO=½ýöO_¿ýgnýîí÷ßêqýŽß¾øöų÷/¾ùZ±ÛI¶ÃÏ~~øǸ²§ÈÄXóLL‘ð•Ï¹éì&ŠJ\Çݤè¹Üº›,õ¦l«lŒX0‹ÎÜNDn¸Je‚ˆÞ/SY&J+½¬W !®{ì¢ l%‚(“Eo“Õˆ¨ƒCYµòFØì -ÞæÄ0ov_Ä.-;sÙ(ÂûrÜ -ï\lï×ÉÄÕëæª/Ö([ÕMž7:Q˜çykqÃÛݲ_ïaA©QºU¸ÊëQäp¬ ìp¡×9VÀV#£bµÈ_œû%èÂ$»R«£ìI£I2˜Oòjf]¦íQs_¶ýuÚEþš³fí&þnÊ¥4×HµYö:‡æµ„l™Žgæô¬êg—?¶EvlpQöNöèºÀ»*«ÄÊèn "V¿³|»®Â1¥°]ϲ×È~€wƒñÊY¸s–•ÌÜ*ûÆf·-²µVÙüd%o²ù6ÙD’ÐÛ°Hã6aÂøÜ×d÷ÙDèíB>"ÆȲmѶ#!–µê>"\ç!ۈƄÞa¹¼Š¸!\cN‹Ý&ÄEZt=¶O>,Wd$¢óþ8ÛY°8°·Ês×YžÿzGD{±K;×%qaÖDáq]nŸŸ{—û5²Ç#GI¯Ä ö(½Ë‰2¢ýZ5]»äþ,'èmöBý*åVÏYÃvs-n¿ýlÖ =Ê– ÁCö~]¤¸Ê(Éàʛ߄*sE†bƒ—ˆ¢ZAy”HÆ2†«¤³HF½'ØÓô6'–(à‡^ˆÌ«šô6§v•¿u«ç¬m÷T·bï}öZ 2UVÈ»˜2ÂÙаéf‘7ƒ°r^ùj¡D¬Ta32DXº†Î™d`´ÂxWÌr‘|o"Ö“Lÿ<ËÂ.äYÎý"Y5äÛ)9¿7‚h,w7¢/9Ëê,ÉÍ»M¤¡Z°)Ûuö 7™³¼†µ‹U¸ë¬*ÐvJ”é»ø*1Œ Üu6ŒX*Ü!Ô¾‰XÙ)¼SvØÊð÷ëä˺,Üò¨¾Ñ¶°ÚN%í•øþX³k€NáÅÇû$Þ)+.qË™!ßÈØÞ¤»ÌÆYö UßGCé=g#a¬œ~TÈäƒÜP¯+XÕ³õļõ“£q3ÐW�ÏP +¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ�÷„óû endstream endobj 252 0 obj <</LastModified(D:20151115140912-02'00')/Private 261 0 R>> endobj 261 0 obj <</AIMetaData 262 0 R/AIPrivateData1 263 0 R/AIPrivateData2 264 0 R/AIPrivateData3 265 0 R/ContainerVersion 11/CreatorVersion 16/NumBlock 3/RoundtripStreamType 1/RoundtripVersion 16>> endobj 262 0 obj <</Length 941>>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Rodrigo Nascimento) () %%Title: (icon.ai) %%CreationDate: 15/11/15 14:09 %%Canvassize: 16383 %%BoundingBox: -69 -576 571 64 %%HiResBoundingBox: -69 -576 571 64 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: -69 -576 571 64 %AI3_TemplateBox: 256.5 -256.5 256.5 -256.5 %AI3_TileBox: -28.5 -636 530.5 147 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -297 16 1.34 1444 866 18 0 0 0 38 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:-144 -556 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 263 0 obj <</Length 7015>>stream +%%BoundingBox: -69 -576 571 64 %%HiResBoundingBox: -69 -576 571 64 %AI7_Thumbnail: 128 128 8 %%BeginData: 6884 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFF %FDFCFFFDFCFFFDC2FFA1C39A9A939A9393939A939A9AC3A8FD6EFFA1BCFD %1193C3A1FD68FFA19A939368FD11938C9393C3A8FD64FF9AFD19938D939A %CAFD63FF9A936F9393936F9393936F9393936F9393936F9393936F939393 %6F938D9AA8FD62FF9AFD0493949393939493939394939393949393939493 %9393949393939AC3FD62FF9AFD1B938D939AFD62FF9AFD1E93CAFD61FFFD %04936F9393936F9393936F9393936F9393936F9393936F9393936F9393CA %FFFFCACAA1C4A1A19AC39A9A9AC39AA19AC3A1CAA8FD4CFF939393949393 %93949393939493939394939393949393939493939394939393C39494FD11 %9394939A9AC3C3FD47FFC38DFD1D9368FD1793689393949AC3CAFD43FFBD %FD3A938D939AC3CAFD40FFA89393936F9393936F9393936F9393936F9393 %936F9393936F9393936F9393936F9393936F9393936F9393936F9393936F %9393936F9393936F9393936F93689393C3CAFD3EFFA19393949393939493 %9393949393939493939394939393949393939493939394FD139394939393 %9493939394FD05939A9AFD3EFFFD1C938CFD0493FD049AA19AC39AA19AC3 %9A9A9394939368FD1093C3CAFD3BFFC3FD19939A9AC3A1CACAFD11FFCACA %9ABC93938CFD0B938D939AFD3AFFA89393936F9393936F9393936F939393 %6F9393936893939AA1CACAFD1BFFA8C39A938C93699393936F9393936F93 %93C3FD39FF93939394939393949393939493939394939393C3CAFD24FFCA %9A9A939393949393939493938DBCCAFD37FFC38DFD0D93699AA1FD29FFCA %CA9A9368FD07936893A1FD36FF9AFD0B938D939ACAFD2EFFCAC3FD0A939A %FD35FFA1689393936F9393936F938D9AA8FD32FFCA9A938D936F9393936F %9393CAFD33FF9AFD049394FD04939ACAFD36FFCA9AFD059394939393FD32 %FFA8FD07938D93A1FD3AFFC3FD0993CAFD2FFFCA94FD06938CBCCAFD3DFF %FD0993FD2EFFCA93689393936F938CA1FD40FF9A9393936FFD0493FD2DFF %BC939AFD0593C3FD42FFA193939AFD04939AFD2BFFC38CFD059368C3FD44 %FFA1FD0793A1FD29FFCAFD0793C4FD46FFA1FD0793CAFD28FF9A936F9393 %9368C3FD48FF9A936F939393689AFD27FFCA939394939393C3FD4AFF9AFD %04939493CAFD26FF9AFD0693CAFD4BFFFD06939AFD25FFCAFD0693C3FD4C %FFCA8DFD0593CAFD24FF9A936FFD0493FD4EFF9A6893939368C3FD24FF9A %9394939393CAFD4EFFA1FD0693FD23FFCAFD05939AFD50FFFD0693A8FD22 %FF9AFD0593A1FD13FFA1C3A1CAFD0FFFCAA1C3A1FD0FFFA1C3A1CAFD13FF %C38C9393938CC3FD22FF9A6893939368CAFD11FFC493936893689AA8FD0B %FFA1936893689393CAFD0BFFCA939368938C93A1FD11FFA1936F9393939A %FD22FFFD05939AFD11FFCAFD0593949393CAFD09FFCA939394FD0593CAFD %09FFCA93939394FD0493CAFD11FFFD0593BCFD21FFCAFD0693FD11FFFD08 %938D9AFD08FFCA9AFD0993FD09FFFD0893699ACAFD10FF9A8DFD0493FD22 %FFFD0593C3FD10FFA1FD0A93CAFD07FFCA8DFD0993CAFD07FFCAFD09938D %CAFD10FF9AFD0593CAFD20FFA19393936F939AFD10FFA1689393936F9393 %936F93A1FD07FF9B936F9393936F93939368C3FD07FFC368936F9393936F %9393939AFD10FF9A8C936F9393CAFD20FFCA9393939493C3FD10FF9AFD04 %93949393939493C3FD07FFC38D9493939394FD0493A1FD07FFA193939493 %93939493938DC3FD10FF9A9393949393CAFD20FFA8FD05939AFD10FFC368 %FD0993A8FD07FFA1FD099368CAFD07FFCA8DFD0993A1FD10FFA18DFD0493 %FD22FFFD0593BCFD11FFFD0A93FD09FFFD09939AFD09FF9AFD0993FD11FF %9AFD04939AFD22FF9369FD0493FD11FFA193689393936F9393CAFD09FFCA %8C936F9393936893A1FD09FFA1938C936F93939368CAFD10FFA89369FD04 %93FD22FF9AFD0593CAFD11FFA19A93938D9393CAFD0BFFCAFD0593BCCAFD %0BFFCA9AFD0593CAFD11FFCAFD0593C3FD22FFA16893939368C3FD12FFCA %CAA1C3A1FD0FFFA1C3A1CACAFD0EFFCAA1C3A1FD13FF9AFD0593A1FD22FF %CAFD0693FD4FFFA89AFD0593CAFD23FF93936F939393A1FD4DFFAFA16893 %9393689AFD24FFC39394939393BCFD4EFF9AFD0593A1FD24FFA8FD059368 %CAFD4CFFA1FD0693CAFD25FF9AFD0693FD4BFFA89AFD0593C3FD26FFCA8C %936F9393939AFD49FFA89A689393936F93A8FD27FFC3939AFD0493A1FD47 %FFA8A19394FD04939AFD28FFCAFD0793A1FD44FFA8A8A1FD0793FD2AFFA1 %FD0793A1FD41FFA8A8A8A1FD0793CAFD2BFF9A936F9393936993A1FD3FFF %A8A884A193936F93939368C3FD2DFF94FD04939A93939BFD3DFFA8A8A8C3 %9393939493938DBCFD2FFFFD0893A8FD39FFA8A884AFA19A8CFD05938D9A %CAFD30FFFD0793FD39FFFD04A8A194FD06938D9AFD32FFA1689393936993 %A8FD33FFFD08A89393699393936F93689AA8FD32FF9BFD0693FD31FFA8FF %FD05A8AFA8C393939394FD0593BCFD34FFA168FD0593CAFD11FFA8FD19FF %A8FFFD04A87DFD05A89A938CFD079368C3FD35FF9AFD0693FD11FFFD05A8 %FFA8FFA8FFA8FD07FFA8FFFFFFA8FFFD0CA8A19AFD0B93CAFD35FFA89A93 %936F938C9AFD0FFFA87DA8A8A87DA8A8A87DA8A8A87DFD07A87DA8A8A87D %A8A8A884FD05A8A19A93938D936F9393936F9393939AFD37FFCA93939394 %9393A1FD0FFFA8AFA8A8A8FFA8A8A8AFFD0FA8AFA8AFA8FFA8A8A1C3FD07 %9394FD05939AA1FD38FF9AFD0693CAFD0CFFFD05A89A939A9AA1A1A8A1FD %04A8AFA8A8A8AFFD06A8A1A8A1A19A9493938CFD0C93C3CAFD38FFCAFD06 %93BCFD0CFFA8A8A8AFA89AFD0593949394939B9AA19AA19AA19AA19AA19A %9AFD12938D9AA1FD3BFFC368936F939393A1FD0AFFA87DFD04A89A8C936F %9393936F93939368938C9368938C9368938C93689393936F9393936F9393 %936F939393689393C3A8FD3CFF93939394939393FD09FFFD05A8AFA8BC93 %939394939393949393939493939394939393949393939493939394939393 %94FD0793C3CAFD3EFFFD06938CC3FD06FFFD07A8AFA1938CFD21938C9393 %9AA1FD40FFA1FD06939AFD04FFA8FFFD08A8A1FD1F938C9393949AC3CAFD %42FFA19393936F939393A1A8A8A87DFD09A89A93699393936F938D939A9A %93936F938D93689368936893689368FD04939A9AA1A1CACAFD44FFCA9A93 %9393949393A1AFFD09A8AFA8C39393939493939394939ACAFFFFFFCAFFCA %CAA1C3A1C3A1C4A1C3A1CAC3CACAFD4AFFCA9A68FD05939AFD0BA8A19A8C %FD0793689ACAFD5EFFCABCFD06939AAFFD05A8AFA8A8A8A1FD0B93C3FD5F %FFCA9A689393936F9393A1A1A8A1A8A1A8A19A93938C936F9393936FFD04 %93CAFD5FFFCA9A939A9393939493939394939A939AFD079394FD0693A1FD %61FFC38CFD1A93C3CAFD63FFCA9A938DFD1493BCA1FD68FFCAC39A9A9393 %68938C9368938D9368938C93939AA1CAFD6FFFA1C4A1C39ABC9ABC9AC3A1 %CACAFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFD %FCFFFDFCFFFDFCFFFD0BFFFF %%EndData endstream endobj 264 0 obj <</Length 65536>>stream +%AI12_CompressedDataxœì½éŽ$É‘&øö¾? SASSÓøƒÂãàp†ÝMT±EcPÈÎÊ&s:BVVs¹O¿ò}"¢ªæîyIlW(2#\\MÍLQ9>ý›ÿã·_}qýÍÛ}ñE¼šÓßüÍÍ»ÏÞ¿}÷Ë©‡_¿zõýwïßô³/~ùj–J׿®_[Å|ñî»—oßü’_ñË{\ý³/ß~óîåïßþîÙwÏ_¾~ñæýÛŸ~ösùúw/ß¿z!^>ûæêÙËŸû=¥‘Ûgïå›~Â/B:„õ—󆯟½ùgß}÷òÿÅ—9Ö(´ãÛïß|óòÍïoÿŸ_¾ÈÛá‹Tò!•pÈ«|ýß_~ù⻨sûöù÷x°ß¾{ûüÅwßݼ}õöÝw¿<ÜüéÙ›Ãß>û½|óìð¿xõêíÇWÏžÿû$¯¾¾ùê…¼áëgïaÁû^ÿ:,_¿ù꛿ûþõ¿¾wÏu9~Í&ÿá;iKšÅß —¯ýZ(_½xÿ^žMnˆ>ûòWÇñ1„Èò³ùòÅï_²ÿ¥{þ×ÏÙwo¿}ýìÝ¿wáðýï^¼þö•t%ß{Iù*¾Ð_ã«+¯£ý³T|•£´ç+ô~Ñ*½Ÿ^üÇËüåáïÞ¾y¡qýîýW:,ë:Ïú¿~óå÷¯^¼û‡7/ßËCf6í¿}ûÍ‹WR¿]ÿê;%ôÿµÂïž½ûý‹÷2–o_}ÿžÓ¬ú¤·óìO/0d‹Þàï¿}ñæwoÿ‘ÏøŲ™,‡pW<×z¨Y>U»Q¬íŽ¡ÿ¯ £4â釿ùÙßË„~ùæ—_HsÒé)ëhþêÝËoú`–åPõ?¾ÅUþmþOWÞüýûo¬3dÝüí0)æ«¿ýJî{÷æ››·¯ÑýßaÖËlx#åÕÛßëwío~#—ÿ¾?-#õÛw/ß ÍéïøMýú·¯¾—¯~õîí÷ßþúÍ¿½~¦]žæÝ‹ƒ~)+•ý·,ÓoþèÕ·/þMÖD¿\©woþãÅ«·ßÍ6ʳ7ßþéÙ»o¸éß¾zöæÙ»éåß¼üù晼Zo»ÓžÐ¨Œì·/ž¿ç%¬rrƒG*_ýðþQ*¾}'kä›Ãßÿëÿ–Ò�×ÿáwïž=—qiw8íÕ³oèùŸ½ÿƒp¥o¾ù®5 ÷ý¡´~̯žc.¾;ß}ÿÝ¿{ûöUkvÿUkÝȤ¢þ_Ç=~ËÞüýí ó;Y…Ó; #ú«»‹Ô~øòå_së7Ï^½zùûwϾýÃËç—npáûv'ýîC&ÖŸ^ÿëÛW/¿{ÝçÓ@ùí³wï_>õâ«?}÷þÅë'îáî›—²àÖùêÏÞ?ÿÃo^þë»gï^¾xtõa�þíå›odîõýË÷/z½}ý-Ä—ÃWxöí¾Æû?ܳæWÁôµl#“ÿâ‹G¸¿l~Ç7Ã÷¿z÷ì›—²±ˆ,ö«·¯¾yñæð%øÑ´û$ÛX9¿™þeš–õð7_ßMÿmšOÂIY†¬VÿyÉø7ɯ±”Vê¼íÊõPŽRn¬Üån¾Ÿæ{/»–¡Ä¡¬»’´LüUB–Rø»eÛ•ëpl妕c¸•âŸn'ùpGÒm¸ËØu|8ÿ‰CY‡’–Œ2鯥¥.›ýÿz(G-Óÿui,͸ÏuÕ>¶R¦6¼ë0È:ªãèV)øQ»ñ݆–ÿ'jìcfýQ¾G[þןùâX/Ón £Œ+~cd1Æ™¥r”ËÉ_[ÙŒ%~ݱܞŒ¢ß4rû˜¡è ùm6X2@“ÆêÆÊ-Ë•{_Yx™q,GiµŽ¯ìÐ#É=ûfáËg¾ÞÆW¹å{ÂÌ)#0ñ¾¸Ïc\cŽE4±-¥ÜÆ{í°F‘³ÓZÖºnëõz\o×»õ^:rI1)§’¶tŽé&Ý¥ûI(È,]sÊ9×¼åë|Ì7ù6ßË\Ò kͦԲ•c¹)·å^æI¨K]kª¹–ºÕëz¬·õ®ÞË|Y¦-në&íluÛ¶ãv³Ým÷2iÂu¼^¯Óu¾®×ÛõõõQÊÍõíõgÒ"/°Ó±ëq“¯ŽÇ›ãÝñ^fW˜ØÛñf½I7ò�7ÛÍõÍñæææöæ^&[à(¬·é6ßÊÃÝÖÛíöx{s{w{7˸Ļõ.ß•»z·Ýɽînîn§»»»{̈{é°ût/oz/Ï~-Eny/WÞŸüÈXÎ2šíóÝPn‡r3”ã®\eó2Éu(e(yWÒPÖ¡Ä¡Èœî—VFÖ™ï<>úÝøs»+7Z&þ:åz(Û®Ô¡”¡ä¡¤é.µ²îJÊ2”0”y,Úå“õýøôãÏÍPŽZ¸2w㸽ý˜ùhí‡h?,2Ó0û!Øwü¾»›Oú–ý9µ.Ýwä¾÷ö=vÒOû®™NzD{ãÚÊÆR+™%YYY¢•eâÚ³-SY›þþfz/ÿ9²\[ÙXªYÛ“ü—$++K´¢¬×½pPË;Žß‘ãU9>‰‚A˜Ùí·ìæköja?®ì·À~ºcÇÙuâ›'¾+^pæÝò®ùÈ…O¸ò‰ä9d¶ÜIgÞߺþU…eáf«pµE¸ù<ÉDº“^¾¦w-ì¯^a„Ib”%È{/#~+ÝqÜ®…mÖMÂH£lAAöã{™·ÒMGá¶[“0Þ,xQXqû^fÈôá±\«®¥ÓN¼£°ð ý½Ì[éØ£0øM}vŸ„íGaþ!Ï“Lã;ãÙ®eƒ¨²Mä”dȲq‘îeºÝÊXeSÙds)k–mf•íf‘Mg–y'³âF6¢kÙê$;SŽIö¨({UYå^fèvQl«Øh“ln؈Ã2pÙ&ÐZ-ÔóZ¬'J7uÈoØù7J*)ˆìÀùðÀíØðËûÅ;–ÎîV¯,a“I•dB™L—¦Òb{wüè¸.±%®^߉l/ÂV$»¼7ö»¶Ùe™eõÂvÛv‡Íî7äÅMbˆ&ƒ—(4ÜQl&8¤&:\ÝŽ^€œ6ßk“òÂÜ-?bµèZñ ±í¢üžoηÖa¸¦Trw#K‘04¡G%<|T’»¡ ~'M²õu\j6)™j›ò†z3l„½¡_ì }äq tvÂ%…(#_d9N¤ïŠd€sœ‘çô©ÒùÎÈyÈ{´‹/°£=7ú!^¤]²?y1›øë¥+2u§âS{´¤fdÚÒdø +ä;u¯‚ùÓ´&鳧bwC Ú•üÞNJ=)]‰Ô¿òäjf+ëY‰ge¹PìgÚiºg +VÜ(¤µß·‹ð‰©iÚ7¦ŒU;»X¶Ku½o”|-ù‰¥«”i,Óþc36ô¿ÏK| pRLóòÄr©ƒ/”鉟üsIwÿ¤ŸÏÖ ï‹¡õ¨Ê¨.fßZQ Ën¤¨¦»ÃVúdj³/o7‹ô麚]BõÕ;.Ø£®cWéÏWki&€l%5A· ÅqN?¼2å¯f–èæ©“åèòvŒZ£‘ëxq9w¦±óiÆ”ÓõYwV¶nqÍ¥%Ú>Og+ótž/ÊGËtf0¼´R[¿'ËslŸ¼†[Çùe÷Ù¼$¢ŽÚϹþ£òȹþãRÈúŽÒÆfš_6yciÚÏý q”ıÐè@Ô€&Q © +%h¦¤:Ð ?ªÕ¦EÓƒ ݈t¤TiJZ'ªB‹ãžZñ-î ×WÑ„T‚6´¨6D}èÖô¡#õ¡J}8W˜L)º§†µH#¨F•ª”£•ÊQàRº§†tC :´¤"wEUQ„&Q”"Ùa iæŽêÒ¨KP˜ 2Ai‚ÚTÖDÅ ªS$§š©>Ý›b}Ô2‰ÜÉ ²[¡ü–Q?â'P~ê\2ŽE—ÒT2«T PÖ©qê3©k±Ü’ª¿G<ŠH”‡¦AÚ1Õ3ƹ“\v<rǧL‚rÂÛ.²µG$ˆs‰áilâAöñ9×±i‹ZF3Õø³7Ë ¦Æ½-Ì÷ÕÉþXv%îÊÞì–NJÞ•2íLyegä«T”öåú¤OËÔl^^nÏÊùÏýyñ96;õ}¸P–‹%^,fÉ;/é’,Í–;í»…ææÇÊöåzÚ™“/—ã™û´³\?VnŸV¦ÄKƒøä2=øÕGþœo¢Ûnæ¦~.æ±Ð²ZQs¦›7‹·~nVÌ6:™©Ôœ7ôeããáœÕUd—äÝJ«6Ûu¢ÑHKnÅͼµ•ÍÊu+Ç<J~¦3u‰5uÓýen4ð¡é&ô÷yˆëœæHÎüæ³c*ÆX¦GyÊNòC,dzœo<eœ°†iä͆õþcx"8_ù¯ãÇËŸi ugE‘íFtÂBΊë:‰¤—_ìQ8úcgóÈÂ'›è•"Pºgö¾YÙ\Ô9)ŠÂA[&ʧŸöŽžZõÕFH—ô×â>Ûk +ÀðÛb©ïÞ[–ôàNtâVHÚtä…Ý6wî,â$IøtWy<HÈ…bù&"ú5ý»7Â/îÌË;_‡Iäø…ò<ܽpøæëBI¿týJÁt„ h`ŒtüÐ\§ãFŸ°z…oÈ‹°´ïéžËufëlÖÙkg«ÆQ§ÆJ;uÖÙ™fç•GvÞ8rÄÛ©ñÁ‘ÿu¾·çu#‹ÙÚÀ̦íY× ³º ùœó£A¦¹,·<ÄeNÄŽ±LqdOÜà?v›áú_¦yÀ‡Ã"åC¯VY.‡¯d,¨úÕô7_?¥êñ»ó¯’TLó¡†+ÑóƒÍÖC[W!—m òe€v»8Z9Õº¬òGI‹}½„”·*h#ËUœÓÚnöÉ ñifÑLS–Z³,òŒëD¹å›mmkš7b¨…)®IþXð;mÅ«YØJ¨ÏÔž>[ž…¡¢æTx]F¬m‰ŠXµýE8*Ú’qKÛ®4ÏÛðlŸ§½Å¥\Õ7´TSÙ>q(O[»0SíÉ·íJøùCÓt_IZ9Þ6ˆ£#/ƒÿþÝó?¼üæç“ÿ!. ²x•s}ã—R2Œ²¸Ø½ø#¿[¶vÅÁ¯Ð€»â`WØ2•e}x¥¸X;ì©¢›Ö|#¦÷GÜxý‡tóWÿþ'écü/®ÚÁÿÍ÷Ÿ{ÛuÛo’ù3‹í.׶¡ÜŽŽgÛ,VÃBÉn@IHö‚`8¯•"^GŠ÷´ +©H)\S¸ã. ö}Ýó¯ií»=6*ˆÑ=BjßV39öâÙ� êÒu'½Â —ÂJ^úy ;¯“eh%Tä± =qj(,†¢P…!)h*¼30ÅMR·îãðò$lÈè›m‚P0èÀèð•vÁÚ¤›Ía·:Nc Iéµ:Š2«b+åTȧN“ôDÒ™l3ÅÐd€ÁÛ¢þqt«á.:òbÜ0Ûáܼž7´ª9°˜Ùo5A0Cø“3OBË( ›¿Õá¾(¶É0M· Çtmè%7‡'ƒ))<i¦Pt·ó¢@ÑUó©úÃcÓ*5‹Lí¢Pè´_SÏ8Ò°p;Q¬¼§ÂÑUEbÜTïPÍ£ëÔ>ªˆPèÐ@òD%¤R q5äv§Šœ(#¦‹`è5J}Ä5’éD%ÁœØHzC©ú®ÁI*$*5’j$wH'SHâ SFŽTFn©Œ(à´ë!ë ‡@iZÈDGWCΑdŠU‘¦‡©‹PQ>d€;Ã? Ez +Ïÿ¾kï©f5ŸF-Ìy×½’þ×ø»¬GP½ä bš…>6„}ÿw¿Wc¿ÇN w¯ÆáŠÓyïøûbÿ«×@ÿWgnÿÿzçc¸5¨¶áï ü£xÀjw¤v4F6¬v6_´z::¨ž~iÀg÷%×—Z$ æt™qÆ8#«ÿñ=fôœúò.˜·rt1„æ–çÑsŸêê^ŽSGìù§ñ÷éß#-yÄ@ YÄn<Œìˆ»¿ã4|XO\6£#ç²Ïºß<ØÓ™¯Gû®»”{¯öîƒÐ=0;dêñ2µ(µÃQˆjTåôÜáeŸÈ®¹ÑëV_hÌHä'Ѷ|Ýô÷.Ñëæ-dVæ(tßè-N·=Ýø|ëk›_Ûþ|$f”› lƒ“íƒãN8î…#vtÝãG‚tRÁÇ<¤§Ò‡P¤àH§ºöQൠ\ù->”ŒwË·Ù§†“>GJ—fTߣ¥¼´•.=!¦owˆé‡ge5ÿAÞÏÍi@KXé¹MÔ{³+é›iûÇ6guÖnÜë8w'›¾™[aŸÄÑ ÊËÕ•ëúκëfðõëä–2Ù/6Ë3•Š(ÊzÉÁu£P¿°Nû;N}N~Å@\rÒ†Dœ–ËžÀåÔ¸4q1xbç?¤˜Î£)Nàþ—ƒ*Î+,`º]QN<¶ùÄŸûpEœŒ³¬œ‡Ö¬œéââ9Τ¾~Æ54¬¤õîj!3&*ÎßaõFQ¡SÏA˜U¢mD´èš¡^§m ©ìÌR»›ø>W{´úÔœ·@í~AØ3ÈÇf©QW·å+‘Ÿjšn÷/kÖÛT,ÂúíÚŠÈýxCü…W«ðÌá%R–KC7T~rCj«sŒìÇ·J£Ÿì³5öô×ø¦½kÍlW)Í£åÓ[ú sÊ÷¯_¿x‹ŠþA#˜YÉϲQªÃ(Kƒì9ÖïØ‚`ï\tW0$Z¯S“¡K“”{$£‡¢Ž¢p;¥º7 Q‹µ¡4{@©":ßù°Î™¨uRžIXUÎmˆ¶•Ý¹æ)º'ÑK�e;Ô>±¡SOœx*„?©"êÊèÑ÷GãMî¡Pao1ܵ)ÃÉZMi¢¶J(íÕTV-¶KyðPj›qó,;ˆ¨aH§V¤VúOi¥¶rÝʱ—)ߥ{Û÷.—Æv%…}7•µ•´+ç?õ¤lÊõT®ÏÊÍåö‘ÒÜFÓeŸ5•û-œÈS]>G9ÁíQ¸¥Åáû* ûx’ÊEyìÑÄXŠ“©£»˜.³ûA¿ì®áÍâ`nKÍêëö™ÉÖÄ ½ƒsÖM®[in»¶é|G[&p¤Ù1ÙÜ„%æÈ™x‹èná…󨻄¯é¶ñ#V2Pˆ´¹í¥ÒØÛÚ]f³»$Z]Ô¼5ðYÁ� +qÝêqokvú~§pÿvð6Ø\nƒçá›ïw:qþfÊÆaãN`•x;”¦Ch:x†c58ó*³eváÓ01ªìA0.–b]Î1.çxº›éªå"še”[ÏQ-½L$㋹'�äÖËHº‡PtjêaŒÙõh]ÒõøÜ›ëÏÐ¥~é¡"ú>ú¶Ç1»dÝ¥èhÛäA ¾UPÔ>°¶‹¹çá´]5<QG}pº ^6Qœ©‚'z i‚ÓUp¯îÕÁ½BXÍZÚf—¦¦vÕЕå¥Ý˜ñ~PïšbТ‚'¿ñuÿÙZ©ô½«o镵—ÉôÊ®].ƒŽF]sÐ8{51Žç4è07»r<+×'åÒOÈN÷åâÎMSÏÃ¥‰ASÿó¤¬\¸ƒM[üåãµ×fˆät#y³½”ÜÇm‘Û望šÁn4ÖÝÙ4톺™N}uÍ[çþºkßb㣺œÄ2Ü4OÕvѻάuwåvâŠ?rúoæÀ*NÝu©†»î¼Ü»/{¤C¡l›&wP/æ²y¸#¿Ú>lJJ3ð%Ï[Äkí}÷¶ÉÝÒîwcœb‰Ð ‡<4Bƒ#T bjQ÷¦(÷T&w¤µðÚ,†81†NdÓ$LI‰q¢îã!©áBlÜCÑqg±ˆÝ&S¿¶A�}((¶—õR€¬‡ÉžÿœÇ±=>u?‘î>¦<†°"¥î@—¿7ÀEš«(wÄ܈@»`"Áöº¢ÙNpqõ‡XþáÍ›g¯_|sø½‘áçÓ%bǺ\Èø“š®1dý Çkøû½G¯OC=… îƒø÷àSõ«ÿ÷z‡9µbj€ÓmïÞê&ŽõLIò÷ ûþø§/pœô ÌhñÔl i§þ>Oà£=pÏ0öö®¿'ëð°{ÜQ³{(yÂeàoœz÷÷ÄA?J‚’Ï”žäú~êéI~ÔŒ*?=°>ð`ãŽkI3Ò.EÎÐÅÍ°WjxºðÇE†øšî¨™xIiMïhŸÆAçù"²4v\t1pÖó á ‘Øƒë&°ÑÒy'TÍ.•KR!Lš +ízj¦…ì¯ÐVx;$?s“ê{ê³b0z‚è25¸Êªb@•p>™Ídœ-'wÛýÔÌ' +\YL_YÍâPúlJ«A]·ðSŸ&³µ(ÖþÖ€.cé!»õž+q_¦¦Õõ/–õ’öe:!ä'•òp™üª~\™> òåï¼LO«öôòSƒ*4)Á¥°Ü¸ˆÊ^%²Ëµ¸]T¸é«1·Y5^OšË¨ÉWØÞÇ슑Ûlð9‹ái ¹˜k¡;SÃÊyäÎ>n§±€äÎ"w(—›±VøÏd3ñƪwÄ1[O0õÄ¡s©ÅóxqÛƒþ\OÆY¼_»ÃÝ0Ò£Dº!%œ–iÌ´³ÊÄ·;/é¬Nƒíç´\ðq<PºM©Nã‡'•3ϾL?TáCËS|òÏôôªÿi|ˆƒ@§¸3xz¢q¾¡–k,›ÒàIZÁ?LE› ”Ðcº´ÐÍî®:í²³ª«Ç!·£›ç"qâPÛѹˆó‘‚¬‚ÊL®wœD ⧼¤ó“ÅL.«$³G–i`,þÓç螯ì!§�ç0Ó“yˆÙ,”Ž3=‘ý;jezìË(ò¸*?5øghðC¢SžüóXƒ{Üp<3‹”Çl8S³Šì2'Ža6´Û¨Ä¥"wog3=¢‚Ñd±•ëv§û&´®ì{JGÑ"H +™d|¢%1ÑyH°Ø½ÕE +¬@¤Û:ØlF=bp*«ŠÍg”MƆn,d ¾ÕÙÜÖZ|‘ûX:¿r·T³Qyš¨Au=iT„Fíf¯œ +Ã"ˆo/”ól*ê ž-Ët³<¹¬O)ÓÓªÝ䧖ééUÿÓ4èfÛ³ä³G™³å.É¢C6Ö[KÜ•™°kfª®#mT™ö©`©¹Ž2ËèÚ‚Q +&)Ø£àÌ‚#KX +2¿eú-…–'Ï»EOUK?\‹GSM Dþ”Ôçɇ[ú᎟ÌËä&÷.Eƒ‡æTº€ä×CvîF¢i2’»ö®#wu§Qw£Ø½EÓè,Ú9ŠNÝD§N¢üCÓ‰ƒè!÷ÐÎ9ô˜ghzÈ1tÉ)ô?csžZnžR¦§U{Àu¡LO¯úŸ¦ÁŸ8ÈOä'ò×»>ÿúü‰ƒüÄA~â ½ëó¯¿Áîë¾xrÝÓ‰p•—ea£ëzÝ +ª$™c ”’ÔõfDO]øƒæ^óÏÚª9БY&ÄC +W³ð°Ñ~ò×—{Ê9\!nÿ׫z~§Gjì¯/ÒjZòa™¯"ŽÞ=¿þ´F»¾”>ÿ‘ü‰nÿå²ÛÛ?ºÛ¿e»;&ßž@”,ܱ®oÏÊ͇m憌ŸÇ|.gÞ!Bî@“Ùàâ· '~~ôR=³qcâxŒ\@eãÉ‹ã©‹'寮™žÄæ¦eöëv.›:ûñÙV¸„„0,„çuiÇåØ)5í\OáÑ“ÎÔ!ÝŒ'›ùÔ +##‹¹*§)1á8lá=óÊ\iu ‘yÑæ´nóráËØŸÏפF—¦y lMd%m.r@-çWCuž3 +×÷Çù¸ëõÞŸåU>{ß|"¼È�—ÇŽÞžñ‰G 7j0ÆÉa—?„›,g¸ÉK`Ï´ªîý8mó‘Ö/¿Åeéî}&¥Pþ ¼OxªÇ|î˜Þaòˆ„ÇZÿ�xâ¾ýñ°ç*u€éíxÃé?:Ê/^šëq7× g¶œd|“,é–p×Ò¼ö$¯i8M3œ'fÉfHßÎ×S¹æ–ÂõÚâôtÞÒ=¥ñÆU¼Du¯”g£³êhÁÄwæ’ï°ž8Ä ÃU§¬ÁÀ0á#æ÷Îâ{£á Yc¦gHÃ,oÙ]Nó»Œ^:ßgºä=ˢçe ™Š igcx�Iõ�’ϧ½¼Úž§=™Ûš+a¿�>æjîErÝ<#ûA!2¡£^)Ü*×<æÌn÷!}Ú:+ZÙ´‡²Ÿå îÙƒŽôŒÕ©ìËÃ,ujèô8=ÿTÚã:\çøW¹Ö¯zØï5žXí÷ºÞå_àTX8%¢Lý?Ò˜à?+<¸#PfðÈÿºÚ™_,¦Ä»·àˆÅ`8š` îòài¼ØÀ88-YVûÖÖ»ÅøÛz3ßeÆ—5¯YÆûŽ=î×¹ùÚÍìøôd?Dš ì¸qèáÄ®dU`P='ãÑ<éš‘Qþpœk\ü`çÙ[wö¶œÑhÓŒ1ƒ•ÅU}‘ú±]û#»ÆúÒp8žÂÆ,ZìÎòCÝœ˜Ô²e‰Z-*ÌmiwvÎáÛÐ&3 e˵šÉ,˜¥ìÎrGݘMLe£O=@õ4óÕô¡Ç§žä½YWÍN\ªp,0ª²Ì+6EcÅÌT²0>X®âåþ÷™Ú#GÜ0!:—9l—,¹,¤ÌÒ/sdV¡£l©ïª—xåçiîÓ¸h½ÈEë.ÅnË#é™$Çœöº7ÝT§Ôiþ|èp¸ ܵØy�ØõKýbùÑ¥3fc½1<M<[÷7ôLÇË9Øþt�úaŒ0?Í9v)ëX¸uÌ2ŽM-L×í2(îÁáÊ}vU> -™……ßîä5‘Ø&;´Ìcµ=âwé¿zß~tñNË# ÐÚݺ|8D/6æ&&êøгÈþzÇ£Ú6žÑ…yßÓ³É3rï™g°mt¾DiâŽ)t“pÖ™^–M&U’É& v”W„F2B°ÁkŒ†É »ÿeýô gÿpˆ¬qz®ÆúŸð¾m9 qÛé-ºÈQ°±³=CcØдKÖÒ#„Æ 1ÄgŒÔiÑ1Êäâ.tá©#ðÍSΉ\€=‚jŸº@•Û«–x_…²!qÚåÁéÏ÷ƒ>eÑ-zB‡`D4wðr)Ÿzõ�æãN#Ôò$371–ìç2 �”w‘“‰ˆÉ"%#Ñ‘�EÞ¹ö¨#‘èÅ2:À†@ ê“'ÈÚòz`õô)'Vû¹î?=ÙG=Ù ~Š¾RšIüÑLšçy…Þ|%Ë#&†˜j6Àó?z¶Ä*úïp"ÊgnVÕóu^x²BÊ!0£tßB12ŠÐNtÄË…?Z“y14'—|ÞfÕ¨ýi^Fo2\aóýlÎË“fµOg¤oÆ;Wá‹¥0Ç£3çª/Ï#R.üqÑò™ü$!½$ã¯;ï#“Ï!Zµ£.îyÌ…3GrqoéÍÀž5•¼î‘w¶)F3ebÛÛ&³bÞ6+f0‹Æjg4Œ§4´ã©ÆÓ©†£ýd!Oû3ýNŽóÛå7FÓìñô¶>~òèÓÊýôaÃýpùË7¨Þ Mh¾"…çþ +Êz&幄wlé�#skª çÆm8SÛÁ!ÏYê¿v*ƒ› Üü|Ã]âÞâ%ž×–”’QS3:k"¹Ù’ÿ-4;Näé+«eŠìqŸ=,ap:Ÿ¤t¬á¬ÄJºXÖ©®KþØ2}ü¥Ÿ©A=w¥'ôôKôÔbO[ìß6Ð=á=ÜdÑså/t©íÇÿñ{<*` Þ5ôQ??5ø„ì(¡YVãò8S§‰Ï<CüȳÃ!è-ò âAÀƒx·òPð™ÇC²å:âþëÁ®‰v·f ½6«¬[cýÐ8õS»Û#ý\’ñ¬îvJ÷îˆnŸò-¯îôàÙÜñ¬<˜»j,ÓÅ3»;½ûsågoPM17ô}ú½–D¶ZòMÓòÆ<~4ÔÔŽAÊ{£ÓÎOxÒ̹ŸÐSÍ®ÂPçÉü…÷–•ôÖ¼†7æ9<¶zßHzÚáþ3äMžN²¯g%>P–Ëezà‹ð±eúøK?SƒŠëžÕÑ·êÞÕp†#sYmYFÇ£"7.»ä¢ý¨‰§äÝgeþD�ŒŒ1„{üìI8âÅ#‡ï¦‡bÏ€O+7ÓC?¬üå |q©øÇhðQÝbzà‹ËG·œŸA1žEAhºxK>ËÑ»ÏÓÎ’/£ãdkh³µ“ Óਆž&ìr¢°pÂíyT +Ø}¤EþÞB"Ô&e7¿—Ç>’“gáÝKÕ}å/.Jƒ—U„õÂ4ŽéL9SVNòÒàÚ®ý4hjÉô}ïÒ\üº»¨¼£»o,¤äH-¬X:Õ•¢ÞBA‰Û‰RߥN-NB¿·ù¼aâS_7|0ïÍæÙ¾6ùOz*ü§&÷Qâ39ò¤:ˆqÞ®©k@‹ö|?5xö³×Ï,]ÃÔ>ø fˉ·WZÛh{Ms›U³ž¨še§¤Z1Uå;æìçÏÒàãªÁC‡¾Z™.¬wz2Þ¨Î4-笩M†€¹Ðï÷ öZJÒhG+æ!1©eRÕÔ¤îEýˆyÏÓÂö¤°<Žek^£}6Äæ+[hYÂÑ&<ÍUÏþKKÅŸÒàºÃÅ4ŽéL9WVöÊÌ ç\:ŽeꧯX9Zn¦~ÈÊÝ¥in™šÉÕô÷tôæÝ©7Ãñ¨ŽéZE½žv¦ìÅÙ•~¿Ú¯=�ÝÁ^’¿¸Tüc4ø¨n1=ðÅà +ÌÝ%§kDÓp–I/£BÕÕ,ϬÒu±ln„Ò;™L‰»N<¹Ùyö¾?ó¤C¥³¹Ìy09búì”ñUhv'ŒßÜÝž`w‹p$@Ê„mdæè[wñAÃOÉ\=¥^á¸ôCY¯B*ƒSîÓš¡k+ÍËÆh”9,™‡š ÏI3ä®q[cB¥2úòB<¬åJØr˜OnIÏû Wªå°¬We÷ÝÂ'9ÓÒ%gZÚ¡Ž/â^N÷«'§Ô^×SÌ)&§Y#‹Þ+ÜÛõsÜüÿ~LìþÝ.bÅÓÏÓN4ÏÇ= p‰°ÕN?w$ü‡áM]<É*=÷Ç÷#)²×?ž‚s?Wy~Î65¹?gmá,Óƒgát üz0OAØûì×ѦóRKñ³ó,hat–¨/Û˜?Éwýáëi…²$èv–9±.Å®¬ùµi4ÀeÀêG\ûikíb0Mú)šæ§hšŸ¢i>k4M¾´Ðò°ÎÀiæ*{·}™Ã<¶ÊFwá¡çµƒ_7üqðêþ¸<Ÿ¡-ŽÊ'¶óùžèSÇo»8€ÛyŒmxBŒíÃ'´˜Fþ™MjMRx"·xÂAÎ|ú¡y·vÚ¸œ×Ϋíè¼<á×ÍÖ8®ÝÞýÁ;ánö~ÔÕzjÐÙ‰B»YøÐ÷Ÿ4·ÊE‘·¤Çâ·Œ}~äüŸnür`u—=ó¥©;4領Û~0Z»7XO"µOÏÏ9{ÚËAÚOÞ‡7»Ý~x÷|êþùȪxÚ–ü¤ÓbNÏ-"TP;”9e”9o›MqÛ&Û\?=Yûd|r[Ÿ;ÞûŸþðòý‹ÿz8¾zöüßeYì>þ9ÎÂ:7{~äiXÓYÚu?´Á“® ×oÛ¡ºû<Óú Psw–d}â ö±3sìñ Ÿ¾q3œûÂøéã8¬´DÈž®øÔlvbõú1O;³Œô9c“š˜)žÁ:ÙÌ:Yz–~Waz¦~ ¾nÊË]þÁÓ>N²ô›Õ÷1‹ïÓâeÎú؈™}‚~äÐi"¥Û©zž4>âü¶ùsà6]˜»P+úolj0žÌíÓ`8²á±©ðCÇ6ìm07ÀT?-@étRÜN¢4L‘a¢LNµOÊôù¤g“¡ÿ| ^ò,ŽîÃÑ3;p·és» _\Ì¿¿Ï¾oaÓ'F„ ë!aÓÇÇ„™gè¨Æ#šâí:ÉÚØ'ߺ»~ëÇ:ÀïcLð›>ÄØÚ°˜ŽÄôô¥·=édf%æ0m)L?:Až§O'³| +·=žlúø€2"ŽGɆ4ÈX–ÓýI’´r!ÚOS᧩ðÓTøi*<”<ñRžeIüðk,““¾þ»·o~ûîå›÷/ßüþ‹/]{übú»oñMÔo~ûìýûïÞˆ~ýêOß}÷LÔoûã°mW[Ž+<ßkÎñ°¬ë•lãòGÈW2—2Ÿôšÿÿóå×÷üÓ}Æÿü'~üòçÿâåå{ø—ÿ5¾ÑK¾”_~oòðZˆg7:üf¤úóüf¸þmwõù÷‹ëwïo_>ÿòí›gïþtø%M¿8¾}ûJÞþ×Ö_ß}óòýÛw_Ÿ=ÿwé¯÷òÕ‹¯¿|ñüýÏÿU.ø?埽êùž ÜòmþžÓaÁ¹jƒÓ߈Ì?/ÕRßÚ1âÕOÌ]·:ÇíðÏÏØЮãbWsÌ2îõ*Šd¯#¯¶ˆÀuHÛU‘ê +þJšJ‡Tpd¹¼s•êu‰‡”®‚¬Ãs\VÓ•,ÞzHËUF¯HþW«¬ªÃº]‰ÐÔóUxX㕬µÅ.Û®fá +‡(_6^ônK½J2u¾JÛ&S´\E_yYY¯D‘ZÕr·,w™×|ˆ‹>1Õíå5DºÕË„B-ædìs¹‚¼ |Æ(_Ñ‚d8Sa‰Õ^-ÏWPJk¾Â x‡Eº&ÈZ<¬á*Š~sh5bºZý¢p%‚jn½ä„Œ¡š8):s¾ZöB’!•AЫòÕb>à¡n| iQÚª+N…Oñʘ€0¿HÞ†]öE¸…®ŽõjN5VéCaB§À|d'I¯“>D÷Š½Æ*,eÃ3ˈ£sW$]ÂÈxo6`3_úS^•£‰V¸,äž Žâªãµ¦+yR¯®äo™CYú5È{ÉåUÔ‰C^eÜ’Ür]ä&Òn–›ÉÐêe2å‚tÜ¡dDÛWv¢pç—ÉŽ$Y”1i'Ë,¥M*Y%m!jûgy¡Mƽ®2Î2L2ñ9ƒeJ +¿×“Ǻʳô¹Ì@8 e*áfòfU®N2§¢Ì6Né²è¬ãe2À¢Ø,Œœ/Ò½'÷’gŸS\g«Wýô-‡¼2¡+ês¼‰2±•—³…I¯dZá vÀÜ>ëä‘Ç’º×‘•#JÝЈüV>»•(sw˨eÍÈ\㋵{9¡ÍT<P¯åïÑÚ9y1ïÐ2,%Êš—yõzG\u^E™•²o Èö*BXm’Ql4™eAVF¯µê]{;N°»éeN\®Dc•Akí„«éÆúÝŒ —ù3µZþÔ“wó—þ/ÿ ÿýÓ7ˆ_÷õß>“=õæí·úúí¿qÃøÕ»·ß«;Äå+¾|ñí‹gï_|óµÜb·“l‡ŸýüðÏÿtaO‘‰‘2ó•!qÙFõ\Šô½Ÿ@¬q7áM6ÛMÖzU¶$#̪3·‘[®n™ ¢÷ËT–‰R…ÇJ/k ¤…a]„, ÊdÑËd5"jäP’6Þ›ÕàeNóf×-Ø¥eg!Ex_^¶Â+WÛÁ{=™¸Zo®ú`²UÝäy¡…Épž·7®`xÛá¬[öë=¬èa"u‘n®òzGù+;\EèuŽ°ÕȨØG}$¾Ë½ +º0Ê®ÔÚh»Sëhƒfż™Y—i»ÕÜ—mœVɸ5sòZ»‰¿›r1ÎUsåÉþ@çÐœJÈŠ Ù‰“?¶Uvlp‹ììѴ›”Ubå4™‚ˆÂo—Y¾MI2¦¶ëYöÙð¬s0^9wβ’¹U€[aßØì¶U¶Ö*›Ÿ¬äM6ŸÃ&»€Hzv�y¹M˜C +�ûšì>›=¢]ÈgáAÄÙC¶m±íHˆ%UÝG„ëÈ6¢1¡7E˜AªW7„kÌqµË„¸Êdσí“7ËUDÙDë +‰è´?Nv,ìrß4Ëý_ïˆx_ìÄòžiœF˜5‹ð¸€.·ÏϽK]zÙã‘c¦7⻕^åDdj¡ª5Sеkî÷r‚^fÔkù#·vN^l7×ÂáúÛOfmÒ£l™<dï×EÚˆIFIWžü*T™+2l3¼DÕÚÊ£D2–90Ô’^Ì"õvœ`wÓËœX® €z;"2'þ~7#èeþL–?ukçäÝZï©nÅÞûäµdª$È»˜2ÂÙаéf‘7ƒ°r^ùh¡,X©Âfdˆ°t7,2ÉÀh…ñ&Ìr‘|¯¬'™þy–…*\Èyivdý9÷J²jÈ·ct~oÑXînD^r–Õ X’›¯v™HCµ`S¶ëì=@o(2gy [)ªp×I*ÐvÊ"Ówõ+U$bA¸ël°T¸Ch}±²Sx¥ì°[•áïõäKZWnyT_Šh[Hv¥SÉ@DûBgE>?Öl +Ð 2¼øxþ ƒÄ+eÅEÎaÙ#3äÛ«¸b·‘Ù8Ë>!£êûh(½‡–YÆH+§2ù ÔÀz«z¶ž˜·¾qrô1Žaz`ðJAá�”UÖuíaàÂu¶|äÚåE{`þ²IIw Çßf½ÿé=Ù¦¡;p’ܦ˜tÓ©å38XQ^@Ö„]#‡N§øYÁá‡z‹¼~CS`wÔU:" +?š)4˲ni½²=Z«×ž¾µuú–Þ¢™jï`FÏiQ)c[˜ˆSEÁ{EÆK;JQ-KÇ£Q±²j:mÉz‘~O£è•ñjV>Ö“]ð«¡FÙݳQÛ³µ¶ÚóŸ¾gëY%ìQd©™¾Þ‘°Â¢öòZU ¢DÌB'83BÖ ^+WÖÖN#ØÝžÛtSb”)1·µ³Øµ»A×·?S«åOí휾ÛÃÒÚ§˜› #ÎBíK`oP´Ü¼u "ë楰Š&ZÖμ¡Tö¾™—Ta.àæ%ˆ¨ó¼®;óÚbÒh7/Wònn^ +4_ŸÍKä–àyn^’7¿‚ùº™—@X–½u),«Jqf]w•í=4ëYŸ(;ëù¦Íº„ C:mmÖ¥V£[—À2×µö§‹ˆB[Íͼ™ûÛθR©Â¡Ý¸Ô$7/a…ÕX·y Œ7EáÓͼ$‹h[`E3ë•ì;ã’,½4£ç̶$Ë_æíâ¦%ùW»i ü â˜0³,I1æÍ K·e Êή$b63ºYi£„\šUIvÌÙѦDÞ·•ÐlJè:‘nR’{_Á°3)¹+—”›”‚L× ¹k_Âm9kG“R€òZºE Ûç\óÚ,J¡.:‹G‹v*ŠµnQ’ûʦ,ì&¥³…u²w1^*¬;“R#º5Ó¡&‘Í\¦ŽL£I »ÕáÎë-anóFœ0y:ÑLA7µ{&¥ö@½–¿‡·súb#¯yhÝ™”:ÑLAà‹qKÍV$2'ÂÞ¶E áZCYoÚ›qÂ`ãéD³õvÌVÔï6X”Ú#µJþÌ™“7ûk7(}¼v/|©äBfœ{=Re)Ó@×ܲqT*„ Ól(%³C¥Xjæq›á=ŽI—¥hæInÅRC¶ w˜ýÆ$Œ¤™ñEÅàZv"O½„FP<ôÒ+Á²^D„¯Õü +NØ6m¿ÙßAÄj˜3R63á8U +#0Æ.y èËUÑ6¸„½Zë»`&êóÞ<1”Yí›ØDR;T§ +S~U+.=ËbÎðÅœB§hÏÁ óXoQOÁЖSüžn¶6j1—\kºG¯ÝÓ)z¥?[«×ßÊÛ:{ÏEÔiF~ȹ9oëÞ—…œ»9ÓPO´ùÒ½iMSÊî3wšìÔ"âJ÷§‰v/û0=l¶°ˆ|Ÿö5Êx‘w(.tf»Í§ÍAÄ"_3æTƒŠ›&‘{ÕÀÝøl͆=©[¸Ü¯†+`J7ÏšÈ2ø1u׬�2Ù}ÍsmLÄÁÒk²äæ\ƒ^”Õ„û¶2Û;¸‡*“Üjt±Euíì|l”<Óº4'\[«Ü¹yÙEuïe£r 5¤yÙ zÊn´n¶bR@÷³É>¦o䎶€}TF«¹ÚhnHÁtækË«OÅmPÏ·óÛÝmèÀyuöçþ6ª7ÞÑnË!^nÝã<$ÛšËm¡‹¤†îsã•xßætƒeµÍwº¡¹Z–ܽn°SRIi~7ÙÚDP3Os¼-4BÙ!›çmgtª9_³ÎÍï &!Š™î|ƒr¹JÎæî7|ÏeõzO²1/[wÀÁÁ—in±FÙ9á†zæ`Új»çÎFP¿ÖYxÛ=eç‹êµçom¾ç™;n‘®JÒi{0œ{ÍùµÙhKè.2'ìr½–í?CCb7ܹä0 Bro +jIX†aç“ëµÚ“·†Nßðÿ·BTˆAÍ•!Â(hÓ»!õ:|-Ú!vÖF:¨ßÒ§Ðdio&E¸)®hªƒ-#^‡’ˆ0ô6á:åVjðsŠjLQ=z½\nãÁQÒ†h<+$°^¿R´»R6$ÞS®œ#Ì60’b?:{Í (BŸ‚,Í};¨A7´‹4¬°[ s‡fJ§¨f"‹'Îy¨'œ§BÍëMuÊÜM§Ê+èöÝÚZ…,aîé”ç6’|´^ÍŸ¾5uö–Ë6ŸÃÏÿ çÀÎÑ;®Ž¯{zaÆŸáÁi®Þ ‚l{_/-żÒݸ`:Ë%¦aN5êêsÊݽKrÎèîÞFÙ¹{{=÷ã.\q¤ÄÒ'U§b(ÓèàÅ.6'£}=àó] +ãL†×{*|�Kî^߶cº3¶vžß^ͽº½©N±[ÜX©À·¶ Ó²æ·tÂÎ<TkOßš:}ËÁ~%|¡îµÄFu-±Y]KÄ´ QeÔÁ=DÔ_š–…*Ta‚®%Ââ@{á¨%6;žk‰Íç + ÌÐa⣖ÝoTI˜ÈV™Ì®$úçQGtZSa¦Îðï5Ý¿¸å½Ž+VYñl^ë9×ÏûòÔŽ”Õb±Ó;Õõ:še0«šî‡?rLe¯#Òê×e¨ªÚüz[2êkÕôºÞ–ë~ýž£ŽØŸ×koÕÚ:}ÏËåO1…¯É`)0<ÃéûzO-¦ô¬«; ³jXU3d–Fq{8-œC=ìèpÍõ¶ÅîéÌè›YZ[² ËÃ=âÆtsU¶zíù[[§ïù£x—¬Sºge# xO©]Ô†b´¨à°DZ²Íü©®ÀÅK¡áÐÍq29è‹‚A} Ê6Uä-i!Xa[}YÚæä°ÀùˆÍXm1„=`ÁAåÂT€dª]±Ùš€SÙEàÈËFêú9½²ly¥w•†^ô«t–Íi¨øo%û¾êÝðtURàˆ†¿µBˆýд;QádÓt~+€v¦üÇÍO¸"¦ÃÜ),¸‚ÀVa¯¥›/€§Ò嘱ˆªâ>ó¶Ìª«Ö,Íš ð- K…î.ZÀaO©3Òè£k¾‰¶ÿ•Uu$WÅP(TòtœhvKVü®XËjðæNu³f ½Ò'Àzj§êŠ7ŠÎ‘¨xœ¡žlŠ¡¦±F±{ê• þÚÛZt«î¹ôÍsx¶V¯=këô=)pI˜K—^u*Ãk0xœ/A éj^ÌÅ U3쬰¥¬Š£W™pöë .Ò(J[“Æ ljÕÜàÚÔ×Wºß&j¯W6‡ +nzÎJ….l£XN¨à„Ú2+U^mY6MìÔ]Ƥï~gäZ8í‡XG¹Æ>}Øì+è-ël¯éç eGU{!vØ-pÞÖ6hOà>|Xˆïúš› + :(³Ç�Ûˆ~OÎïyj’«”愈¿ØúK¢‰M¿RÙHÍ´y±îÈÉ+ɵÁ¥ë¥´Yà᥉=¸ÖvJƒ�”]ãIk\›Ù‹MÑó¹~ÂZ0%dÃËÐtözO•¥®jòÈkÕ±ZasÄæ ]ï]ÒѼ³×+êKÚj”8˜ë:5ᨲpÚ‚Uù~O£è•íÙZ½öüÓ÷l7™¶ôna¾s«z½§njÆX…n1Ø=hHâ]Œ¢H‡ Ø¡ž¬×%íÚj»§_iÔb®Öü¥0uö{:E¯ôgëõÚó·¶Nß³õ€Ì–°åŠòGXâë[s¡¹~v{ F’{a%¢|ÅÏtÿ÷j+’Æ¡©Fñ[ê• +ñ‡>CoPŠúí³2 +.¯Ô_ÈÛ9{EyØ[+Q_@uGs¸ÔÒ¯BõD˜TG%k˜E—K§(ïI&r§ÔÅÇò¶ŠÝS¯lÔÅ»Þü�p=ô{å¹==[«×žßÚ:ÏÖîÝEñL¢¸˜ÿ¬Qa_ƒN8cæÉr£¨ðoœ·Ð)ÏM,¡‹¨¼ƒ©Fñ[ºˆ`T³Zô¶„uMÙoiu؃y¥þBÞÎÙ+þú|Ã0c§ ÇkêÆV•™ÖQÝØ‚r‚£ÈaÝ0IÄêöwvCÐW¯‚#»ÃN°³5h÷"¢@ÚjhC�¨$MÈFŽíFG©CÓÁݨ“ûhÜM3Ț׎î¦ØIƒwƒŸÆíÞ7#`©á»a³vÎé>d@hüAýkñ†Uu1H5wj`KòºQž{·ƒßõÃ=´å¿§«AFÚ‹)¹} ý–NqIP×k/åM¾åeõüsà½éõZíÙ©ŠÒhàjÌ)™<[Ç`7Šš+ª=Ô34woªìŽza£Ê.ž «mM³÷[–Á\ÜÕkOßÚ:}ËÆÍ`º…³j»p +Ã^4ªPiˆ!«¨¥/˜qž=ü#ØÆ +›mYsêÅÙ€š¥Fñ;:SR*Ll@yõ¶0¡Öm¼§ST¬Ó'kµÚ³·–ÎÞñG1M4X1Ö¡Ô#ô²M†Ž}ÇBI‘^.¿CÇé!Ž~§', Áß!çleY:þ½QT¼Q�|¯æØvÛfwÊF}Ǩ䥇žB£ª#†‚m²uƒÁÃY®*„ÃÛÑû” ;%ÃÀàW6ªH3óBŸ†Áàï¡›¾ÁàEŃÁ÷zo_Š! :ÅÍ.85\ì(ø…n@dNnë(x¸!ÔNæ(x¸bÉ©£à¡KtåÃQðp³>ÑPðÔ9â;7å£áà: ½ÅaðòÕ†ƒÇF‚Ä9& Šx®Ÿá|ÊžØ%ŽA¦x½§Š +†£§âœï¼ Xx'ø$!~½×2ˆûÐP£Ø õÂFuÅ®5àÔ2¢ïE¯ôëõÚ÷¶N_²IúÌk èèðõFmwÌ~:KJB>:†+8þz[´ ûi÷4Š^iðõ¡žA܇¶ewÏFmÏÖÚjÏúž.Ž¹SV·^wª°0ax.ìÕLxµãÓÅYa콞#Ý{[b÷|> ˆxê&4¤ô¶f{³~O£èjoÏÖêµç÷¶ÎÞóa‰÷sàâw`1Æ7¬XCÆ7¬XƒÆï°b ß°b ß°bͶÊ5x|Ê5||Ê5€ü+Öò +Ö ò +æùT¬äT¬ÁäT¬ù×vP±ƒoP±†”oP±^g„Š5÷\{…—oX±†—b 0ßb1ïX±™±b 2ß°b™oP±†™‘b 4ï@1GÍ7œ˜ãæw81Î7˜˜#çJ̱ó;˜ƒçFÌÑó "fðù@¬áç@Ìô Öô#>¬!è>¬Aè»ÛAô;|˜£è<¬Áè<¬áèwð°¤o𰆤oø°óµxê5Èù6P ÓÕÀë ÷Õ0î;|XƒÂ÷zŽ–ïmuÊ€Õ¨†éjm5ÜW»çÖžm¨×žßÛ:{Ï‘ùÓ“´Ã‡ Tƒu9”Ý_ ï>ÂÃ*¾×2ÜüÐN£hj¨®Þ”¿ú xX{ªV©=wkçôý.©—Ý“s›°³÷4*, E¥¬D†R½aÖ—¸¢ê¿sù^O¸T\ÃØV£Ø=›á@©²¢Àʇ¶lËî9óy½þüÞÖÙ{¶õð) +öIÊ&juqUãLÁŠ½§²-¦�1‰Áš£ +»ÜíÅ0¦LµzÁ€.½©F±[>7ƒQ£«m%ìíi¼§QôJ´V=}kêô-{_~¼~ Oà\Tç™Ñ¤ÑN…m‹É+€4Ç €9ÿ4›*éÕ¼<QG«Çº”‡¶:Åî©Ý©Û¬ÐßÞ–PÊFÓî齧?[¯çÏßÛ:}ÏÆÖj’6,”×{*z×Ðg[J–:æ çXm¢ï<L]Æz²ÓÐ`ÚÛj»§ïiZ3!|Þ,hu¸£~Ö«ü¹¼Îð>ÖÊé~–EN¡H`êC‹ +.z½§uvSzN×`‰'"ÂÁ`©tJ[KyYÆzò�‹2´F±{ºÙ§Q5IVkjeüËpG%ø²·óZÃi;§¯Ø;òøn¦ê£0-tñõž +ÈYÔøfE—a-ðæS9§�îUÖf…`´jÕñ¯©N±[ºóר¢WÊ9Þ̬&ØòÜT\{²V¯=}kêô-”I üÄ"ú#+£9–œ¸ê.OÝb8@‰¨ª3‘ÓÚg}'‘õŠÜ¯ÕÉêÂé8Ánåʹe!¯t‚{3EÃ%ú½Ê©Ý¨xP…?²µsöbÝ•º¨¼! Åýˆ(½5gu~ÆEcÄêP¥ëe¬›*°àU5�m§ìnz™19À’Z;X?Û6ÜÍîzÕgjµü©½Ówû1–·Yˆ,P7è5z½§B¾Ë*³ÀEe^TšÐÌhNq>–cŒc=¼ý–ƶÅîé|̨E!ÝC[ÕÄŠ~ÏÚkÏÖêµçom¾çç'NúrIj„¦¼ ãèëÆx„¡ ˬf3Ê׋›WŒ '\hë6ÔšÕ[64ä¿¡^بßäЛ¢'ÖáŽNÑ+ýÁz½öJÓ—ü1d\0Îl c‚cD:q1PœµD¶x6 PrìUáâ²ôհƘգ5Õ(vGWþŒ +×1Ž-$/ u¸¥ôÂödš?|kéä?ÿ„¤ f¶xjY ŽAnT›’Ê[Ò†Ú5xË-æNÑ·bþÜm¬7Ó|14廣_7û„œ‰õ†„"ô:ÜÐ)Þÿú`½^{øÖÖéK~žÈž¨¡¯K|½#VOJÍ|ÈXŸUí¹HÖß)*\¬ž‰¯Õ)I…†¶Ånév¥JŸ1—Zok™5ð§ßÓ)ÏíaõÙz={üÞÔÉKz×}¶°®‡Ãµ>—ÏÐÈh߆fðkŪs0³¼è\€óq,3@Y ¬n„2WÄ^ÔÔ‘Ì…®ØÌ£÷0f™û",ÅŒô1gä` ªyÀ0#l+cxÂCé\jG0à QJܘavžÙÄ|¼„(Æ_N ïÁËr³™#íØe†G.¹c—3�Ô};v¹ÀµvèrÙdÝËlÈeŠÈ4Àe˜p·²æŽ\„Ò¡jND"eò¶í±Ë@Ë,°E;t²Ø;pùl´÷Ç +£3ØÐ[îD³`#ï"GÑÁÈéŽ%ì1Ë~€¼ub‘g«PX½NÀÃhãÞŽÁûÝ´r&¯ÕžÚÚ9{·‡ý+Ÿ„æXö(e q¾“kÚÁ’cEbC%Fœ†If™eH†ÿ#Xž=’!:w1f6š¡È²~7ؽ1"EÜ€/FÐÑ 9Ž”¹ç=âxîPcà€+v,C/Ð?NpÆP ;Æx±Çpä0’&å¼Ç¯ÌR×iH˜¾¶”àâաņnàç¤}Ú Å€0kçà&Çü+iíxâjOâhbÌ£9†=˜¸T[؆%F¿ŒHbæ›Í{±°Bé0bƒsî âZlü†Çl‡ëÊ!ÄœqŽÞM¿ýÚËYÍùÕpÃhP_æFÈÑÀ`Ƨ˜aÌ͵Ä|½™NÀ»hßÞŽÁ€ÛÍ°p"#ög¶fÎÞÌ_´”Ò(܉Ží¥ez@ÿˆ_N0Â"l–°aÙEóØJ#ì�ÂNtL¯·Ó`¿v³8ØÈiý‰•³÷òŽŒø@º¯G¢cy±¶È6·ä=*V¯P‡JØ¡è¦ôfœ0"t;Ñ€¼ÞŒ!}Û8p{¯ÓÞÂÛ8}-_äb +ó¶‡w¢¡wÑa„ý&ƈ_nñÀúS_ôZpMR«ôva�äv¢áv{;ííwÀý™¼V{joçôÝü¥aæIÌ÷9 Ñ»²8¶È<6ê…é©Ðs=`…™KˆpoòøÖŽF n'^·µcˆÞv³õÛžÈë´÷ðFN_ì’3Nï…ç#\°S䇸Ұzh0€€²ûâ¼®=^~çP–N¬H¯¼ ¸ÃF¡{è¿ÖŽƒ�ÛÝF¤`(§ö÷–Î_ð³k,â'H‡_üúÍû‡ŒüöÝ‹ÿxùâ_ùößÙ#<=¢wþâËÏ.KÂóHþû‹—¿ÿÃûÖ«¾ýökyÉûwoßü`Ýß¼ø·÷O®|ûò5ºîå‹ï¾þŸ/þ¤µðoÞ¾òwÔЫüø;þÓËoÞÿA/Xj¿žý«Tæ@þæíóáyæ›ÇãÿöÅ»ç/Þ¼ïõOÆòNÏȹ{ó]|ñÌœÿñò?^ü|Ò_Ô¯²ÎÏ̘o([UÔôRCœ.ž—£é;6Çnå 7ŒÒîv<÷¦QÛcý¦_‰¶»úÏqjMɲ#Ì8vxYqÊ4‹–YÏ$^üLâu—L%i®^¤\=8ˆ/‘½©,AH€]ÕqXøçªÇ Ägƒ¶TZRgk»"G•Ú£p´xTš›I ì•»�HâJ÷bD§‚,Pêe[.0ŸC^ÝV…€’¸Ù„d Á8´°ã H¡v€È4–’¢— +@‰¦íA�2™„¸´7Ó4ï–ë@)xLÑ”{'͇p +ȞʓýxK‘Jß0LhOS£F%0㔯Õ#uÍA/Œë¦”ÄñHÁrdÍ4¸õ+Såž´HçPuáõ’diFi´¾f9äGÔÎ|J&LcrMdÍáEå9Nr:AE�Y²&eµ0G‘V“¢ª3¿°,”è@þœíô †ºæ`ÖU¦0˜áxÓ0l=Kx‡ài7³ ƒkç]ÁÔzp¯ÔÕ(«RàeiW®´…*¶šñ™™‚‘?‹‡Ú㞌Ìeqc$¥ì:ñb£Í�tŠÊr3»"ðüÇó“ä–+A%«Ê…îX*rÙòŸÍfãÜ‚±DßX«f”«+†t†¹Ha¥1ÚQl5&Â7·jüTY 11ë¦ÒNᲬ¶tHÉþ°€ÊÙu‰u4K#ZOIÁŒ§�…2‰^CLHñjGMF8Ãwv5vƒ%]êÞø…«h¥Å+B/ÎÈS²Á±®à1¢å¿fhƒÜ'0li7kH �ÇuQ§$“ŸWh°™<ÂEÛÆ´$ N#öf¨xü¼º‹>`àe¬ +º>ä¡Û˜6UÓjâN|acÇl)„aò%,®Êì¬K¥ì=I"ÒVÁÀ·0$(«X‹ó¨)Ò¡ äÐÙˆC�Iöäs÷ÍxÂ5«¯s + ŽIäÌqŽÑGb¶Ê¬Â.áj–<p�}³HÔß™ñjUëÀ*Q €¶Æ êuˆæb! (Ò2ë"Fl˜W6€Ñg?ÊJÙ»cFH½|b´ËDX‡Ëªfèð†Ÿ[çËVM‹pÀ@bds’‰ó^I +P e¿lªì雽[AÄÊb¨Nè +pV,³":#¬o€ãÏžŸDZ3�ôÃd³í]Bž©&¶Âp³WfxIÕD5ubµ¨¿Šã¶°Ûø‹Á˼°o»E0Ô'M¬¾L'<.ÙAHç>àV€ã0¶ºÂ“°š…8 ½ µq¸È\\³ö5íÈ‹':z1èôFÎll½`-‚HÛjΚO—•`Þ-.½4þº!…¥üÎTæ`¤6K®ˆ*ê„Y +,U‰†42Œ0’Wl½›úme»çÀ&úrÖyUt”lW.6k“ÁŽkËC·ÌU¦ç8„Ü¥uÿß`0J:D–çá‹ÃBx,÷™cBì¬ï ƒñó¬#-«OAPÌk!„X’ÝšB.ôªøé*ë™Jõ‘7Ñùð +¢Ûú^Ò£:?˜)¸Ðº·"a"\rØ ÂU¦|ι倗mŽV…gõh0WT{Èš¤e'îM}”�€x +°tûñ«Ææ-Dšrg_6€†²Ñkà4·Œ…ù —&KhH°ðJpm�‹GÒ$ +K 0&6€+{¨T|šä°VõRÌ<\ +)Êu“3µq%<7a>bµZH¹Ï$› <·j‚@]£¼x°-‹kÑZ›.n‚»‹Æû n[ ˜9¦?[&!dR3±c®Œ}jŸƒ÷V5O¹´¢‘¢‹ŠÖÒØTžÑ¢rϲ2¶ExnrÐaÖPú Iu'ŠŽt^-Ãgœ R“T!i.5÷áœYdþÁU£ÒVžûgf}ÄH4,mi1kR¡‚@›Ä$Œ®š=5=ÜpBsݘ‘‹ç®àœšMÌ/®ºê{Uõ+c–Óœ•×™Þ8Ë¢ÎS¬ãZºä¶q›U>b$'”æÒ±·r³¤·Â/âcçÍßcá¡gøœ²ârj07Ù»è”B>^òŒ“ˆ1HÓ_£ò=*°ªuúÆ$ö€>KT‚¿:Cz‚I&¶d•Õ"œ]6k¤ƒh`J,\„†-³fõÕÕÔúÜm"ˆJ�±ÐöT5t„„iá¤Än‰9C»l8[íf �V®xu Wˬï¦l,XogÕ!ÖU-áZ³žÿÆ.ÂâÛ¢ó1ëss\è*öˆ¢oZ¶º„ÓÀ{ÉBÞrÚj!¾û¹m}ðÍb!OáF*CÃÅv€í|M¶í1'ÔÂÓ.¢K& ø”AŒH¶†x®)ÄE%0öqhe.í2¦Ä[WY`¡b¿MrÇxSª•¹s''P©SAÐŽèÉ7àÅPÂØ‹";³˜pÊЬM ¹Wj»jó“ɧzc‹Kå½@ãRDN,ªg¢9í·o1΀Ï1Y@‚š› Áø\½‘_�ü3%Æ•¤eNS~éûŽÚˆÕÔ?Æ`³œ)ÿ"hK%0ý¬ØD¥VÇT*ñÌEæ}âá_F„= +‰f+•¦W¨uL oSqĪôcK6¤æ¢z E%,ÕB̶b3úƒáuyFÐDrVN˜-惙«‹SÐq¥]E˜�šJQÕ5â&0K5â¦!ß5f… fᔳ!lq”@¤^¤’�9SJF›UX׌¬×W³Í*ä}]L"Çr"¢åÅï…5y�–—ì–èŠÉÅDÐÙRâ²Í÷ó¦‰A\¨˜nÄo!ýøÝWÁƒð³¾Z¸--u«8t%h“Èٗߥ‰Ír—ã1Ô„$-Åå² R!Ž£ š´”›-OŠÆ…ç›m±$wD/4E©G|´Cd–mf£Æ!Žœu8�B¯èU\qi¾cóGPŠŠš÷KŒªçq’3Ÿx 3S<{&ðó–1ý;‚æŠf½)Ywö¹q'"l]ñŸ5aº Ã1)ª_á¸úÆð9‰Š˜-˪æm,Æ)AФT«òË(íkîËËPÿb.ö>&w*œ<€’L²;Y�#¨„[ÓEòŒà?„=BõóSã=ö))ÒFuX7Åó2;¼\µ¡å²×ÚÔÔ[Šzl€¯äa}“hÒT‚²Ãð!u¦ˆÐÍ¥ŒÄMš.ê”ÓœíÐ2@'çQž„§Už._”0õgUe‰aö<˜` ŠyBF`ͧŽˆCfçOvÂR»Ôœ‚²þŒþ%1{ÇBòa2“�(³i¸Â?™×ý•Ìx¯w¨zå¢'9!,ÐïÀ#½èª²³-†Ý/cæ˜èV°ì|ËX-N +7=q€ÎEÀAKDÒx᫦²®Úï¦B·9߀1!e zîEÂ…›'“ÌœÔĸ²Kõ\”mÅwÏ~GÅ›fåï¨93ø¬P bíô&ÚWôÊ R“Š‰tá¶dÇ‘' +$ÈŠ +û\RËÿÍ,Šõ€É1óv#Ý9ºYUi¬E>]7"ÎN¦�Û_˺i¤(n +WË3“¯çò¢æTP×l¡14¥â-Ò¦°sBŠ@¡–îWRê5mÈ/Š¶x`3UâãÌŒ<‚Á“íá�£Y3‰/i±T;4xsŽeͤHð¹´ó_ÛJÂÆB#!¬Yð”LpZs�+„†²úAž›YLµ!îš%CžÉ§ÑÆ|V˜ðêÒ¯[5i/Í^¬¤à˜ì–Åò>RMºÜ~¤ÃË <t+O“Ü”YĆø<î<X +‚€š¹Š3ˆe€DbŒb@ÄreŒp°Fg·ØÃÂɘv +ƒØ DݘuGÆ1”íššßS.Š®õʹ›ÉQÜÒK2 +§0¤ôÍw/øIˆÁ…«ºÏ¢¨;ƒàIep3ûtŒó=ñö©ª"γ^©ù g“p`P£½Uz€V·fe«8ws£¹vAæÅÚ˜Ö52l|óµ<[òÍ)£Z€ :³l“«›ç6mà@KI¥¤‚âJØŒÁ`SÏäØädï†ÐLø2ÏjÂ|FLãÆs5”ÌžH2gqð…0JAƯ¤Qävzµ/QúÅ2ÏHÜv5&mÂ’·øû¼j*—m.E ¡/¦šôÐè¥ÎúrpVlæœc`ÖÌ°†X°TsN÷Q+ì2ë +dPëÌÂUÑ%ŸTI(y½‘Zô3œqŒ©‡ë„1Ç~0²ÎRcŒè†Ì„g„Ù:œV ŧ‰išYzÁ¹‡„¦Îš©„Á03S°t§Cf9Ôa¾,vÊ5÷38c²m ˜÷r§D_( Î<§¨-€èf~,ðtàû%ö‹(`ž2 ‰þ7™ ´{ñ|f!ò=¦¬zZ‘1ùVͤ³1<HäØ‹ðI$^?E§ê1‡'A&Va>äUA@ÞÎ !Ï@GbÕ£Í`‡d37¡äDâVˆôV‡ßß.\-Ka–®MMm4çGÊ3Ì´E bOUó7’¼ÎÌ̼pߪIA„ot:%7“€X‘˜ÄçH²ÅÛ¦Þ"bè-®Ï’w?<¨Ü+Ð4ÓUÏŒSÛHÉÙŽùFèo,°ÉZøà*v¦3ã~ЗÍQæ@ƒH·0¬\Üdw—² ó-AÅ�zÜŸÝj;Jga® x%…7VV#Œ¾WX I`˜H ”`i×Ùé³iÙ“g‚—±kpGFGƒÒîë…f3~†•½ºÀ@|ù¢¹µ™*k«j…T‰.éÇKRƒÑC¤–Å4ݪ)¤ì�R)ãG#L«&Cßé)0X@4k&MH)+¼Ÿ—ôÜGœÃZõì,MûÍzF)šnnAØG»PÏA H€‚銂®¢ÙÎÅú&ðƒk¯®ðZŠÅá[�$"æ�†$Ùpî1¼œÎ³ƒŠg0¼)gÄ;ò€9»ˆÛ1Çv¡½ ÛF`˜EÓÐÊù™nªÜU¦€FšÕ'¨á«ÊVtÀIíÈcŒM¡ý•¦Ÿ`‡¸_†=Ádu[â�òŸ˜×Tk!{ú"CÊÕà#÷#ýúìÆKÑiV°+œA˜ŠiV;-Ü#n`óÓìË¢[#BýiÐ+‹šÏ¬Ýjp5¡Ñ@&6h�fÒâËì³j£¦Ù Q±Ø+ì³Ê8vâ×ažÀ4ƒE´8j÷D£aÂ[BîÁ¢CPL³ž:¬´#íؽ„y‹p=LLNÀÑmik½®4ìèE§$ØgQd=íëÖ<œ quƒ–ÌQ΄¦p›1Tt1Îù™‡Ë2UñÍl>hqÙØŒˆÜEþ†M/ë†æºªDºÙ+0ðüê’!Ø3àà0W �%AB^ÝBݨSèq*€ie/ÅS)”zDff%ÚŒÓb€ãbç!‚PZ¿ÍÜ®‹ù˦Ž5nHAŸ‘8\6{ç&VÀy ¶&YE=¼)ϬÝúrcópÅd@¤ÞkÖ`€¸("„M Ö³ƒ`º‡X Laö¨C@"˜w hΚ¨ÖéeëÑ/ËwÈ^D÷;“xéGaÔl´ûì²&‰Ñ¬KðIé³ÂóS´O9ÊÐSÝûèÒCÑ=”- ýG«ÞMž—mô÷ø#R°g3fu.Ï´rK+\È‚$1ÁÛYÜ ‚M }"£@€(ª¡0ëØN¢r¨w37&\|iÓ¬]ôúÌ}ùÏ€™ÕÊ‘®tå±ßpúaZÈ ÌMÚºîÁ'™ÄÑjmEu0ä°JUhRe’]¦Dj¤Ð Ó©zÆøqòȯVÁ7õ1p‹u'ô5+¬“Ɏ™ÌèªÚì õH¹ßùÌÍ|«™à=Õ|ä¦!¹àl)ýÈ¥m¤T9‡K º#=Ràº`b3Ë¢"¾¡åq¡/¿@ÊÞMã!híså„j†ÈðYO" AKìª>J\5·$¥È³iSX˜™W‘Ýósdr8™½µ§6å�#Š,ïóz”b ¢„3ýÏ—Ú›U¤ØDT¶œªÔa 9TžñB ;hó'˜Iµ£n€<¤ +h©Åô%B‘ òu—@a{Ô|9kX‹œö–ƒÂe=G¿âÖã3Èœs:‰ÌFûá™Ds3=˜Z[Æ4TM”€£Òg'mq¤y“ƒgJ!g‚…¢Ëf¼Ï‘P4$.¾ÙŽ'‘^Çl%Úñkep^ÚçjûèZ:€AæÕ2³éÈÀ!Íš°ÑSˆ…nêkPµÞÙ•9«LÇD4%ôhGn£¡‡Ê¬¤e�5˜tiV‚-ýà:ÚWµÒ %0ü›l>{BVy µÛ� CÛcÍ^GÓ,Äkx™àöyº½—ÉœâbSO±`&/AÏuV8±_ð3ï<~¬Xž™¼é‚ò«2P=‹Yef{Ù®›!H�¯€rÎ.†n†{ºˆzƒ¡‘™(Š¦Û¢%ë.8>�ö0ÚiµdÀUk!›ùV-¦Qà·èz‰&”CßÊê°Ñ…0k6'bWÖnîav®ÉU³{U=±S>k€-œè¹_FøÌl°È`FUtߺÚÝÀ‡Aˆ®qÑ"È£cÔüÇ„Ë<¿ÍÞ±¬¾¯ÚN¶Sph%Ø6^HšTE6IÔ ŒL|èM™ÜÊ]«†v*`@™ypÜò ÒY»± D29ô#‘A�fÎ0Ù‘³†Ðg¦zC6ߢOÿâ– †ÙóÄÙ¨ˆP"ÓjkGûUtc`±¢™v“q©Áà+80vx²ËR¸,Y+@i>aXD´Á;Å,{Xs꨻f*.Ò¬Yh5ÄÒævƬ‰qfÚeØÎ�ºšUU!(1“^HÜ3…Sà!ÂcK@@…OOøšl–(‡Y×_ŒçHÃw™Ô¿XÅ +‚·ÞvøÅ(V-øQ© &E´©GÞ3˜¤‹\õ2š%P²_FD�ˆÕ’rS˜ËÑüb @Ò'pÒeÒ„,€‰\—H1BÇà/bNj¦þ[BË\ߪS +õE׌¸'À x_€÷î8…ZCHÆçŸõ’-7•[õ¢¨.$ «‚ž?/>µh» ò˜¼/ªbÂc» ŸCy”¢n"×r%è½Òj½@eÂ@¯ ƒ¶s¢b«.ßç6Ò\e�3Ø?Û®@0±nȳ⤺ÃOX™µ½Š & BQ¸ršÛ‘N³©è3–ûF†ílTXª¦qH›Ú&ThT*›uQOƒ 3+¸’h\(†`±¹O’"WÁFèAÃ)J¸;˜ ¦tH€àvß Jy^ÐhPšÍÊŽfªÆ”ýf¹*·©‡˜/ZëÝÆ;“ëÁ†‹ï®œó2P{ßêVWGš¶*n&˜UiëNjH{:gÜî=k~²†^,^ƒAËÉ¥–E]ÙfØígàSruñ«+q.dÇñÈP¹-±¥@¨VmØm½)¼@!�†„MóQŸ‚ÑGÛÃÓª¦ðÜfˆÊÃtäVNˆ…f§ˆTPàœÆä(´Á "¶}%ÓÞÏ„?·«]»úÙ̘'£þóÃ/¾zÿîå›ß~v<^?þýë/ß¾†º»x+;‰ÒA°ŠÂŠñÚ¨•qavªXÖ0+ªÓEÃrêàšÊˆ—�µ®*Hãª1/†Ë§´Êè–в¢û`E\ikç=•p3#Ÿú¢â„'&îõ6îÌý¡J“;¢pœYq!0CñPgÙÕ&ºÈq²*X½7 ×Íqqu+èdæ±³ŠbLeBB0 +qÈ'κk‚J< ))«ÕØ‚$‚n€B„ëjÎT<Œ§§ð g$f°ÅåÜŽúJ<’fù%¤±dãXïQ®šÊ«gCW‰ãƒÏÁF•J¸j]S»*çÈÔ{«^ED�tú5h|9ìfè}3hr' }³¨Fâ6gp*pXlW ÆAÌÕÌÅI +k‘Ã,jÖ#±ÙÒ—4)O¢Nm`kÛÉ”ÆùÃjøîFe•{CRöHÌlIAô°HudÑ{ãÚk¶$/<Ú²ixŒ·úCóüE Óý*&ªaŠÌ^ª8ÓJ£�€Qà0y¬ÝÑPÆy6Ö±FÔâ(Òñ¹Îž–4Xª°¿Íój'v&nÿ°¤±HÂ9è‹éU³õu2]d±PÅd „tHÓÌ̈q5ð +>¹oÊóÔT½)!š6ãóqêâCZ%ìª90…zp!à|€ü]ŽY8ìÂp`dO<º£–Âi¦{+rÆCÎe|™¿@òPg«¯Fj\VÅ\Ñ<fcþÒŽ¯B¦¬"©¹‚�ˆ�NJH³¶£i„²*î9dŠ}d¢™)1 5•Y%øÚAŠõÙlDpº‰Œ…õ!o®^²µª”0ºÆs\!PWuEófkT’²V#pÉ|¤Uç$À"1¡alVºjIT8kmLT@“6^5MMzYR¾Æ4žèn`Ù`¿‡,OŽD0¤IF/sb4µÐ +œøãB¶â¢[| `RÊZ-?¾\[Â=]¥tbMj²_è&˜‹ºë1û}>±ùÁ°�Â#ž<B°ò¬yÑ +2²ºÜ¤fç¬^¸¨ ËN¸¬bÍkt¥•Äqkq$œí8Ÿm±Š,Žu^t-3ˆ1kÜ ++|£xõU¥6ÜÙõyˆ$XxÚ76Ð"AV‚1#a6-z‘®¦,TïwÓh@äY{p‰ó=1¢P%]Æ-tk·¸ê…JQeST“€4p‘“{3ˆֶ^ÐÏEZÇ㇎ -Ùçþ$z¬š(£éfÎHG’52¥OÌ“žtÅMFjHÊ®6ÅÜlÕV5�]êŽFz62ÞTÏ“hR¬J$U§£ºéŸ†žCáypP»¾ÆÖjÖz‹‚ûªj¾¤ð£E²Òt4r0‰Ù¦Ç Ç`rö=’.eÝÑÃhd âN�Eçsrð"£†~èÀnTÄéÔqB‚úß-Â…×èÖsN*‡öêuÖLöt�E{tVŽGJ7¢5ÂJ›¦2%§`þUõÈYDj»©FšÃÊÆw¦¸;€-)=3#;¡™Äh÷Z³AyëH^°ÕÖhÔlñª˜v€§=,AeÛ½Üý9e{íy LÕɬÉÔ‚†zAÆe;PÆDó†áŒçVÍ´DuOc±°Æ4^„ÇÃP»nYõ¤unýÊèý슬²h,¡¦1¤§kæºaVCè_šÿ ¶‹¶LW_T4ùŸ7„™.œ& ò^t~,ži1(ì°GúÃ8ÈI£ö3¾à敇ΨÛ~i²bÂái€¯hnÞ‹Ás±eLäù‘‘{±¼p\éíÉÜQafSÇѵ¨»„€îˆ=h÷ŠpóEš +Q‡(§þ„ÕR—ÍjâUØÂxD5ôiM‘¦‘ý?‡Ðxú³h/0ßã$–Íb +€ÎÀÉB@§ÑN…s`h6¦¹Â¯Z-lÿ³&½¬À+ÌŠñ^8WÆo¦ShAl«A,€åWðð0îÂ!Ûâ8‰±@zp>¨èI¸@i÷âÁåš$s³¥ y<×Ëdð/æ+=·€wŸG"”ÛŠàEÉÓrû +A(e.fdã1K¤¦!é°vèµIÆ3͆h=¦¬HŠ¾!aåqÃj<õË +hzîD¦¥:dÏåP-ó„¥mÆ0gñü‹zŸg>d{T!ºAí‰+çú²XNK¨Z°…¨æîÙŽa]»[à’‡¦šo¨=*U¡Ï$@]^ƈxô3Bl‘ùÅ4"`ØÅÎöâ]˜–¢¼ÑC·yx¨¥ôä¶lÇ-!«ˆóã3F°0„+h„$‘%Ñ£ôrÃà—®ñÒ§ð&ˆ2¢ç=Ò¹B·¢2 ç4!4ë`& .lqÞÑí²ÅR>àHƒ>C‚kc¶\_-67ª¶¤1’ÂÌšÎw[7EÛñ˜†Â"ð.$-¢–̇ ÎsÏ®è¡ç0cûŽ¦š±°›@L–vÞŸe¬Ž›âÙ8SÊm–¿ñ»²àâ¦9 š}Rļè›QŠæúc(xU�ÑT:j‹zŒ¹èƒ²•–,¦�BL=,É:;3ȪÁ!o,VÖ¬°„ŽÕ¼6¨‘êÒ.#XDα¨ú¤.2~†"5@èU0bcJ„kð§‚,<Íjy‚ +Q\Ç+NIa%ìM4²boŠ«.×T<Ü,L»YTå†öÜ- ¸)D +h‹ÑÀA†Ý¿›bÇŠBŸÛNHuqEꌪIÊu^Uæ!àü*ZÎ^˜\‰Ñú°Î1ÛÐVís`ì\i^+©àu$²U<®~8¤Š®`½¬h‚�kW-÷6 sÌÊÊ@άg®0Lx6>WcÞÓ\.³mÎÑãZ³Â¯$rK +7X´áXÝL’‹úY½VøÌIÔõæWñ êqs@3•þÛU?-(NE— h"(cx’!€Ë"´X¸•ûÂ\(cÚ†èT“‰‰§^«ë“èØ™ÖÄa‡–gX,îší�>Æå-DaÝ4ᎴŠ2ÐÊÕÌiø}«…,I´˜Ãßò“HatŠet„¯æ¥ahvTÞ�’ŠeY'öâÙŒÑaà±KŠyIÃZ(зÃ7=jR-½8±™G¤z‡5W³ÑÂUQ:StÆζ)n†Ÿ™ï¨êºó«Vº€EÏÏ<ÎS? +àŸUºÆ"‡ê?…Rf&OÀÌêÅä[’'²š €š4K2ùYå5Øñ¡3 $å¼j84S9`ÿb:¨ÒSV1ŒDË÷@C/ÚNN o-uõmÓÍó<Ûð0<ƒAÓ8¢ïz³¦Eãûò¸ApLØS–d¹tÕÙÆÏꀛ›¯W+mÅ:DƒIõèÜ<¨…ÎÝv*bÛQP“:(ƒ�È#Šg 7)� zË�ªÙ×áý£AÎj‘�Ž‚fÐ�Obz"ÏùƒU¢XêæíÅSÆ\*¥ª@Ójáz8ÉÌÃ$vB]ÇˌȼéЪnßÀC0ñyµóœ ²[Uëx«µÍjFÐ #¤aî°F¬žÅ†Q�~j4ùªZ&ºÚ•CT¦£°´ÄZi-Y*`¸v݉¥QãèêbÁùÕ A€ ’áfE/k6l<³€HÿIÌ“–³áâ®æátD’¢Læ“Ù¢¦dWªÚ1D©ÒÐØ /$bñaˆ((ƒ�6Ž@%ÃFJ=x†˜çÞ—çÍk¼ÑØGT#<‚øÌœ…[Tì +šii•Lχ S‘m,Ò[•l×Ûl½Òvâ=ÌÇšÔˆä‘bŒ:Âä-LÔUÍÉ¥·ju©¶¡ó2@:`B‡Þ +EÀjAÔ~}Ë ÂË€²™}—¸h 3»¥î$\`çB&//\5vWfT`Çò8¼¥¨*«¯f)Ä@Ugså +50‰X`ªpp´>VÝÌ€QÕMÎ<¤T>Å¢0XZ5¶æ[tO‹æQÔ5 µŽÍu눻DËN¿·A"©+Öú~ÁM Y°�Áφ£ƒuÆyNQ¦P,1c« +T:ŠNÄUUÃðœ-à†`ïÕ‚‰Uƒ¦£gÕ(afœà•IÜñÕµ«~Fg*T6 +AH¾Æ Û¥ˆD{{Gz½TÞôªß†Ø‚N\4GzÑ4?p°ò\Nÿ{o·³]’¤åAŸÃ·cÉFjXùŸ¹ e,c!cƒ,«5®i`¬é4ùìýÜ?‘™ëýªð²7ؘézã[k=ë732âŽ+¢Ñ ÞTä² +ÃÆ^ª`-¹Áƒrašë×çó¨|\î]MˆÀºH�GxöK¤%ù'Œ…Fkç6T”ŸR=¿`Œ¤Ñ+܆ýå ©h{MiA¢¹Âeõ¥*gT~rV¦ŒŠàç×'ÉýñùcÇsMÞLèý$°!oØn>–$“bik`Nª]-.ÒH&PðpJ§=Iuí×ýGyËPÆ[_q³’ùôp°Ùƒ€çåT$ñUêVwÕÈWßè‡_Ññú;¿€pþO>Ðÿ÷0ê/´ÝÿwœÝ¯ýܺºßÔ]|©iÌ ÝÍlIU6s_4¹º‘»e)½È]4ÅûÄÝÎ>"ýîb-78x»X‘~~wãv±†šj)¸i»™5-uÃvñ7N5X»ø»ŠÐ»Q»Ü'µMÚÅqÇX´›Y³þÂìB¡h¤Šˆ³"z.Èn³rëbìB3M؈]J" „ÝjEÔ°{É×ÅðÖÀëÖ¢ðí‹®[‹”ü®’;QÁÖÎ~¿ÐºL²ådÝj…ÁºÍÓèÍÕ…¤RìWcuƒu¶©ºˆØ胿 ºˆZä2S—½yæ:H]&ãKyu›‹C6P·ií6O—†ÞÞ8ÝVÌYš.Ž“çaé6‹È^(]´Ä¹@$]èSxébe&”ÂÅÑeú³ôƒÑeÁÐ8Ý>CÂt1táñ–8wŽ!Íit1‹àt9U÷zø¹¬Ü +T1>±¨ïzÑs£bÉø\‰ÍÃÎåŸ.ÌÝÑyx·Ê{šœ‹Ž0šA Ε!¢›;©j.z`¦h.’ì(Ⱥ™¹Ë5™»3%ÌÅŸœ.0vY5h¹+i~1,îV'7+wvå!•‹/«Î å⼫öÝ \ˆ³O N.Kbñ©'—3!n7q˜Ó^›“ËYÏÄ[rr-"+/N.5døÈÍÉ¥‚,I +©õ$Ô/Î^Õµ6 N.îûcmè£8óË%w¹ËNPrõ« +P8##¸ucreœkÓla ¼oºÖ£ÁíÆäò]¡ÜÚ˜\z+d]»1òxcr—éÎAÉ»!é“ úý¦×f䮬_ +D®@È]Óú©‹>¦Àã"ª€Úí ãâ4Z¹Ù¸È¸3V"4.^ýG¥îb9 +Zw¡ª¥ÍÅåËSƒŠ‹¹+¾‹‰>©Ûû0<Û–¬ â¶CgÛ#P³î/x¸`àG‡Û¤ø»a¸Ma¯@ᢾ¿$\üÍ_¹HzHP@,ÜMŽœ‹€³PÆ ÁínÔÜîÄ` pïÆ+spYKÛG�p¡Gòk¯Y-)wão«Ky‚~Îõ}†ßŠW^ìÛj¼H°o««T}‹¿r¹É·û8ß2ÁÙ³À·µªþæÞŽ½Eº–Ô[øPíé/ê-WD«ô6w=÷`Þ~uÍ")0&çYÞÈ[E 4eâ-hM|[o›»Þ¼[Â!ž¹q·ÍåJA»Å>™"ÛS8‹•†ÚCŠu‹ßéìä.ˆmËZ\ [¢.n570·ÈS#òtQnQg^FÝ[Tl3~lÆmt»·�xâ•2Ѷ¹Yëù“B¹›o„q9tÛ–½4ܳ„ùbÛVç—mËïEÝ"Ûî?/°mJÂØö³PRá«a-Í7Ö¹mÐ=kÛ\CT[x¡¸ë7ÔnL¯i‹‘„É#mñÏMÜM´Å©'g -e(�žm«ŒåÝ4[˜øEg‹¿q׃f‹árf‡‹pP³l!ÆC˜%X¶Àª4AÕ÷䀜#Y‘l¡MD`"@¶¤_–úâØRÉð¹I±ÅàYÎ7ÄHÅa[S‚-H”ü/€ma?‘¼ùµO~^À×âï´Ê‹^›—øm¯Í +þº6þ×·6·¶0}•7¶¶Pš_ÔZ¤Ì²ŠžXQ +³ÎKªŸXøz!k‘‚ȇbEWu¬…¤€HÏ°öó¾âQX‹9NOÈS=ªñë›V‹Ò‚6¬®ÿ3«ö‘üü…ªjmŒCªÅ͹8µ‡¹›R‹‰ µ˜A©…䱨¡jÒØŽþ…¨jóÂFÔ"-!Š¬µKX¡ ™³gl@-Êb6[†wO©Ha&ÑO)(à6%4íRÔšYcò™mm0mü}siÃXÚ¥µ¼‰³àb}AiQQ‰Fʱÿº‘´ûï‹H¶�Ò¢ÞGÝ<Z¿f7Žv±\¼n-ÊçᢌöáX°ŒYܺ¢ ÑBÞA˜EÐhjÅÊ›F‹¯“"‘ Ñþ–i%¬EGû°bV,à=à ü³—‹F¯ +ªë3¿Y´ $díçeá¸Q´T9–7‰³ô“6ˆ8›‰øe€h1B0rƒhÙ=}΢}@Fd>H´Xc`¼A´¢h¥Ã¡}Ì-‚,e¾(´#ªZÈdžV‚A‹qçù… ÅŒÒQWj- ,Š‚„ŠJyñgsÓÐoþ,+›U¼ÌL;þžâîïTSÚØðY䔲f³)´s¡gá‡uá’ÛľK³nð,D†ÂÜÜÙ°vÒ9Ó¦Îò†½qtâá] æ,¤�9‹gwˆ‹8ÛdïIZŠë¸ƒ7‹{n/Ú,òìdÊ6[–á¦fÍ‚aëÊå]ÅW Ò,F6."ŒmE©ú›3‡ñº°!~G)³ñ÷ ™Ý63fÑœ÷aWïÑW—5Z„M庳jˆ1úF̦êbª˜…A8¬C˜MÅYÜM˜ÅVÂZ̃ï…0Kkº(±07|ÙÄŠÀ6Þ|YHXŠ}íÙEóß|YZf.o¾,ŽGùâæË +ºÊáËJS¾�f /N`0Ã]²ó˜%:u¤ùÌÒ*䨳øæ47`–ÿÁôÒM˜X¶ÌC˜åÕ!:³ ³ü§d$ï†Xåéê¹ Ì2ûÄ#³|4„¤Ý„Y$ˆ”Š2a÷驳¬ž<_a–y1F +ƒ0K¶)ªÊ1K=C—7b?€²—M˜Åù(?„Y’á×›0Ka£ŒA˜%?»o±d–ÙįaV’¨~�³4°sH�fa—è&ÌÎÊüef«TÜ7³ü)Ãxf™Ó‡dÂ,c<Ë÷‰Õk« ²óÌ‚¹ ²ø²` ˜xY4ªR«´/»ZT—š/ËÆ¡Ëâ0ËiÏ —EȆ6زL©¨ÂlY\•H/¶ìZþ-»’x~›,‹ä@ªo®,â„jf¬ì,Âmª,Xo¾ ²3GÓ43eaÐHYe/Ê›(‹m•(Ëð²ö(Ë|~ã ”å%ç§ ,¿Â�Ê‚ƒ‰¸äÍ“]®E4N±*ÿM“Åßµß,YX(+1Jx]#I–°ÍÏ÷tƒd³î)m’¬âäN2°€�³Ÿ0ŠI–ƒaÌA’åM¯zUÄiÀ¨~£dPjlH”, ˆ¶J–h7JV9˜–7JVi’96JVù—5_(Yœ2åa’e¹ ëk£Ñ#ÊMñ}Ü,Y¶8€† X²Úù™%Ë{ÂZ¹‹%K#âçfÉ23Žt°da`áfÉÂZ²di@\%X²4°-ÙÅ’¥ä‘šÃdÙ_Àd1|PqpÓd%ƒÌsÓd¹f¯ ɦìœÅM“…‘é… Én±¤h²‰ðžÑ^4YéKM–„ñ‚&K›Ã\4YŒÚ¤ä&+¢ÿJA“ekoX7OF–ÉP6‘ZæÊÒÀ*î(+#’Êò8,84P²Üo ,;! Û@YKä@Yöå;|eU4«²hWÃI;ˆ²P>SØze)‡6FšDÙTö5Q–ó¾²4B"HY©ª³2DäpñרMº‘²’Q뻦@ƒ–jI”Ý +é›(K·®e rx‚ÄOg&ˆ²Ñ?éPÆÄbÈ ÊÂâ)ê‰ðõä7R6öFÊòXìHYˆâ©²|!eqò³)ËùX ZÚàÞŒ/DY*X^DY짂¶ ÊâFˆlpe!a7ÕÝDY¼Xü((›š;F¾€²,—¡"$€²ìÂ¥Ô¬²ôÅHº²)2Þ(+ËÁÉ~ïÂoçcé#¥øÆÉ +’7Mc+¥Ñ¦ÉêÁ¯ôÂÉÒ_,p²84ÌÁ“…³ÒÍ“eš|Ž“åߘ¥‚'+C_/ž,~iäÀÉò{@’~f£È¶\ ù5”¨N–yÉÔ7'£Ðló“ÅxæÌ"m=Zk +%Û1À<óE’…í1óujbJÄ‘…:w¾(²ìD÷¹m‘í® ô&øCÂínéY`£…#B«XL?–0ÖUÃÄ^¯ozlü}Ác·ÉìØé97¨°`¥²Hç"ÇŽ¦¨ñÞ¦àØøûâÆn“±±Ÿs§ÎÑÔØùZuAcƒ–ÌØùhhdì|Ü0ê"Æb“_›™/v>zuo\ìpœ Å27¦i± ›wÁb -s³b*¨X ?Á Š… ŸR€bñ7r¡Á‰"·Þ”Øa©W@b‡»—#–AêÜ_ˆØn!±øÜ&KÄåÁèpb€X4¼A63ø°=+yáai*yÓa±‘„†ÃúÃèˆUÆFÃ"™‰”³È°€a±Y}å·Xì\X$f)W1vxMxSaÙΔ¦‚Âvq Û ý»‰°<‘ºy°l3}h°a¯ú‚Á²¸o¢Y°ÝÄÎ@ÁîClw~/8°ÃI“gÄ¢À‚JP °“Ò…|Ñ&ãBÀBÇÅÕIl³´\ +�,IWD»þ+‰¨!S* vÞ#Ñ_§õ +7ýu4ðW¨ÝY½dö+P¶(ӻȯ‹¡Ý²Á¯Xm²Áƒ‚ãïûºM¦¾‚ëÒEöVŽqq3_—¡0|Å:ŒŸk _‰7hjµ‘¯0JQ¬ˆu(]éšÊ/â+HCñFù[QKjä+· ÜôB¾b +ã¨ÈW8”eó^gÑ¿q¯X&¡Ò?h¯<›G©â~Â4¢u× ÀUÀ•îUn‚ ¹jÓ•Ü)öƽÚU(÷ +G³À½ÒÀòå÷J?‹'nÜ+ñ z‚÷úËñÃoþ³ò^BÃçæ½Òˆ(cð^V+y^-#Ýý"¾2(áI_‰yàÁE|]Uï |ÅsuÀ×½à+Â^ìïy_ÕúP‰¯4àœëèu9õŽç‰RÀWEÔzÛÀWÖô‘Ô~_XzœÌ’¬¨K@ÄWÆ/˜¾¯Û14ò•ïŸ…ª‹§+‹ý…|½Œ¹'GÀùJ¤CSšf#_)4‡ˆ%¯‰°Ýœ7òÕЊòB¾R!H=€‘¯b‚µ²‘¯x„\äÜÈW”g` ÄW”™¬jÖå¦7ïš$C¥é5Ã'Å(¸WÆŽªºümÜ+£] Åxܧ3p¯44UæÚk߸WÎÀ½ò×ò|Ñ^£codÓ^¹¬¬¿`=#L¤ Ø+Â0îÓÌê 0›°FÔ+K'r}‘^Q4Dh¬A¯cŠÛœ×á"ó +[QE"UíÃõ¢yþnÈ+tiËLW!EËÂëèŠäÜ€×Ñ\mo¾ë*B5Ý!²Ê/¸+ú5`L ¸k_îni¶kw¬íF»‚9„ Q]»"xÁu%£h´Ö•ÍC™ÕGÀPWöCãÅtí®¾Œ2Vô°Èª\gÍÎëí›èÊþõl +sÞ<W°¢àäÝ8W¸¼YçÄdº]a®ÕU€7ËkG7¯§ƒYçÀ2ä¿á‚ß W64ys\Ù+'—q€Ê•›âŠúGºÜ†¸¶¦m‚á +eÖÆ7Â6¸òp…"¦ ½ÊÕ$3¦µíêñV•€k«’Ã^û°‚èÆ·¢œ%ïfV„øVÔ’`þ¼é�MàwÞÚæîIË1U0$ë^ìVØð麵yz r+Σ˜¹ZÈÀj3¸ ÅqÔ} ‰g7¦Wº\+�p)7,§7³uº‘ül]^ݲu¹OO[¡é%âí¶B0Ê"FóZYB³ÖƵBŸŒ�ÜEk•Œy³Z—ÃØjÅßñ+Aje`®vZ#„ VÔõ€ƒpsZQ£Çµ§1Ë¿ ´.ÇsoH+rz3" ìŠí«Šæ”ÇÒJ#±Â–O%b4sÝV†³á«ÞV6¸Fè/ ˜Ø $£5E{‚‹ÑzŽdF+DУ•ê}%nF+¼˜x!”¦‚ÎÞÙf´:5»^ŒVz^lý`F+3˜u‚ÑúÃÁª_Ѻܲå…hEÔ•Bÿ ´"êÅ\Ï`JO&¶n9Ë"¥ÌÐV0¨ÔtVìÆÊ geQ¢¼j¢YWðUƒ¸ªpÙ…jÕkß%‡±º6M¯MXò:˜•n8óõfåb‡©å�³2„ç¾Weµ‘æ²ò¼P+½¹¬tpIÞúºc¯ÒÙ«Í1+bæø¶±¬´°ëe嬅1–•ÉÄXÖý÷ee8—ÕúƲª2wÖeeþŠÕ–•Áo6ˆ![{¤ì.+=ß,Àê©)„ç”ÓƲ"ö΢#SYùïEØMeåáΕ5E ²R¼Aô¦²ÒÈÚTV8¤˜ÊÊÁµ7••ÞÎ;¨¬0°:6¨¬0Pm~SY¹¨äØ/*+• K!#ý:F‡©„Ц²r‘‰»XV¼×í•U¹ÅR_TVò$€4*«Ü©o*+bóSn*+MÐU…`ìÍeUD_ãÕ¦²RÅ€@QPYi(¢°"€Å½ª7§¢š(ÞkSYÉ¥K +æ !Þ’nÐMe…ࡾ€²2×6“:-n&+xZLOïà9¸`(+Ò|?n(+ŒlÎ*(+`@tÊŠô#D7”•ì1,9Ê +=¶€²Ò�©ô e% ‡õü†²ŠØó¹›eån¬u¹ ¬©ÙM(+êZ¹¬(«šwƒ!| ¬L[±ÞÄPVžt•/@(+ðm\LVØô[f²&’jjÝLV7¹™¬0;LVnÅë7“•NâÄo&+òâT˜ÉŠ'K|U0Y·áf²£™¬88A[MÔçùb²"cJ§ko•µ€ $ëþû"²†-€¬‰.HdÝ/ã deæuÙde©0’ÓdeËüÓÝÆ%÷L_0’XX••É(ý½ëø¢WÝü¦äG<"ð¯X?Þ<Vâš|HeK°ÞÈÊμy¬D>Y’š¡OCUñÁcåÇääñÕa¢Ê50w$ð‚Ç +=›Ç +#õÁc¥ÁÍHÉc¥áÑqêùV²Ò¤&²2»J‘SY¡WcIÜ‹ÈŠÇÜÍY'“üCý@ d¥|‹ÀÈJ@]_4ÖÏÊæÈŠ·ŽŸ^DVXÉÞDVZðH6’• +Ún$+ÇVçd¥bŽU©d……q«ÉJ“ÙO#YI°T9$™y1Y·m3Y9Q—LVÞ«Y¾@YaÕ+e(+\ìo(+7¡f憲ÒÊ'PVῆ1Âufx/(+EtYK]3g×P±¡¬d(AY°e}r@YYIšq«|ëyÝ”•‹–tl+z¡pn"ë1´ƒ¢†˜Çúý«ºñŸ;Q…™88VU•§Mc…·ÎVÀXÉíõÍbEˆåµF±v©«7‰uª„ýbýØ©FªB6`a€X±jFƒž›ÃŠu\¿wP'n«õž/+jQ$`+ÚkˆC"+â•-Õ€’kTØ›¿ŠÐjfƒn +¬,ä7~¶I$«è«Ò=s³W¡ªG±Ì^…:^Åß!~“Wñ7Ê{oò*ᵟ!ȫОCÁ°O "[®FJŒÉ¸Å®B]]ðµ»´Tº…tAW¡¼!^ZjYß¹Z:[b_¼UxËãVÙ{í)›¶ +ª]}æ¶ZŠô�›µ +-x#’Õ%0 €èEZ…’Ñ�îóá¬DÔJycVË’’””UdBÉÔô‹‚T3[$\ŒÕj¶\ V[cV±`çºö¬":AžKĪSŒWíYÝtUب32\û,e&)}̸Ъͧ «6·Ÿ°j‹©æ€U¡:a Ý`UH"ðž« +çp¤TP&¸ÌTFÌRu°ÐïTE<‹–Jžê0Ú'pªØ‚›¦ +¥ó_†©b6Ù,UÈ°X§p¡Tqy˜¤ƒ¤ŠËgÕáI„j½9ª¼A·Uf«ENd¶®«Pÿf¨vóü¡%ÂAPí®ÿ¿ªlxPÖæ§î¢OãSK“Ó‹žZͼ +x* ŸH™ÚÊÆGnt*A¹nrjs[¡�§6«on*lE�TªjI•èySS[hþ¦¦Vìš +/Š]Óœ<Cõ{ú]ÈTŠFÙÄT:ðᘊ;�%åÍK…íY}ãR_œß–Z˜úH/Xj T‚•ZX~•Š?3®ê"¥ân<”Zðê‰dÂae~yaRQõú/V”¬é# ©¨)"×õb¤² ·HùjmB*ò”}¼ø¨¹«È2ð¨øÐ £â燐5#ò´ÃFYH¦›ÂV~è7•€tÛ�F…€9¾�£âeÍœn.jÚè9XTÌp +ƒŠŠøÐ#–ꆢ.ÖŒ§ÃD¬¸<HTŒ[zµ w³‰¨ÉS¦¨xjzáPñÁÝ*t“H_ ³"/÷‚¡‚’�ýC°P@TŠ ²ìy|!¡B=ÓkvýÉ/l½Yòƒúy±�›ØTF7ºÞZÞT„J=TLå�P‘áLýÍ?Eôy̓?ūʶ¦Ÿ~&þªŠÈ?-r^‚}š=3ú”e½x‹.ò)Ä}lî)$áö¥@OúB=�¾nè)e\*\ºP-{1O%U`cvIbCt«e)G–ºÊ¡ÜÐSDÓE‹6õ¡á çùÎÏý5h›ÃëÓ€žB�ÅU0OÈS䮦(¥›xŠ•8d<EÉ3„"Á;%q ®î£|ÓN›I;Åßc¾P§Íî ";ˆ¸{€NIŒ÷✶&ÚHŠH‚·�S�?œŸÚ”Ó™v”6,–yTµ4 Vã7â6ÜÈ œ.cö 8Rÿºñ¦ˆdcÖº)ª`Øò6Hœ!³t³MçT[Ï@›Ø3˜¥c*]qƒM^ƒ¶>% ¬iü}SMÃPÓáÙ5p¥£ky3M¡°,’oÑ6“B«A4Ý_@Ó°Ï”ÖU7Ît¡pÓL!1%ÉÄ0S�Íè ˜)gy¼X¦Ã½he:¬u p)^í’Çd +¨ñ§zMÓ¼c +¥[P;ƒbŠøZQ¼±þ]Å”qÄôb˜NCfa:Ýj'¦nl{óK³l5ð¥ÌqŠœÄ¹N9ÐzÃKƒÚìÒ9Ý&Ð¥Óß‹\:™”~ËEI,q p)þÎ +on)minl)X¯-µõ)ðÁnhé:ÃXÙEìHÁ,e•G~KB(€¥x礛7¯4Zÿ¾p¥3�ŒA+]±Z X)Ë®Ú|³JM¢Ý¤RœÏê‡SŠ¢VâݘR„‰ªÎ¼O*KHé>Â…(‘C4¡t:Å<Òø´o>)d¢Ÿ +O:“nÜÆŽŽjÙM'í + #2-ÄošMJõð¬o4épSêM&%£—&Ï©? iïxNªÐj;{•ôcP]æ %íŽön&i¢pÒe·ÛpIM@Òn@ËbŽ¬òž”’•úmÓHQV7:ÕÕO/i]Ql)õé=:.IY-žvÎÙTÔ±g÷LÕ¨N|¿ ¤ÍzÍ ER«µM AÁ½¤ÈBFüQ®†¼jCI@4-T(*ݱ¼¶f©˜6{´fõ´x¡G+×2ņA5Ñ&VËùnð(Þé¬l‹\O`G¿:'?üŠŽÏ¡ŽþÔQö_¢È�#égŒ•d¶4w§%Õ®'·eZÚŽ¯(VŒ—Ó’`h³ætwwBtŸ8þÔê +X]!zW×’Pk‘äò0¸ MG¤uç†Á뽌bQésh3ƒF‡å,Ôx‰eý VU‹¾f;{>HØŽ• W”&—§1eÎy9ÈWÙÒÔ™L°tHÆê#ñƨy]¨Å…O¨å£Û +d¶â.<ÔöYÅ›-ÉÑA'ÛÓäþX³9©¹„Ö¿3ÓJh,%= ‘£µu‘†Ý·kR\0,”q"=ÌßÜSšM^±ìeÛöųÅzžöG£&ÊFþ½WåSÙŽ•ó,dJê û™‹Û…“Ɉ~rQ¼ÄãHÌ#,k¨â7£+1Y£ì¿Cå;P>±PR›žjëp&]`Aè’Wý]²HãTCíÆV9Ý͵`é-þ ²LK/§9¼�mÐRK…G®6L8 ©;¯®=#'ÆåEÒv;a@›Ù!×Ùª+׎— NC¥Ðs€0T>&„®Ñu@(5L?ÄL—Œáòq+Á`1(o¬ZT GJå·:ý)Ñ’âláõy?d>ð7‹Rx|Vÿ–Ø�|·¬¦Æ÷ñ» +ËðV<PÕ§¤Ìã’Špõõ4;ãóRn¦¥.vTv_(|6cz²†•‚ ZAô£eð:‘U4À©Î¬¨ØM•BÃJSV¿Å°_~ÜãR–¨ô^.ð„UÚ8MM×W‰8.º,YŽãOÈ q<õD¬„-0*gu¥fst0Ý÷¥ÌQXùºð½aŽKæÅ–Ý®_ä6£lƒÍnŽCa(n'´?~!ñk’>¦1Ï(ÂÎ(~fßé; ^§S9ø ÃU@Àè ë,ĺ±ûj7°£6›†Àñ±ò;X*@Ñ3YÒp%.x’;R“̓þ–Ð §¸;µ¶‰]ï'ÌIìçªú}äŸü<(zà7…ç»[AàDé÷,KƒÓ\Â,é“Ë[2œ�‡X3²tÅoX€çó›ŸäW‰r+?~ÿ8íA'ö$½à:ÖÀ€ãªX¶×$JVäýð›j?9˜É.´ÈǤælÅžÙø(±ØclƒúÁ¬eo®Y,™”¬Ô¸å.xÉ”¬c±ÝÐ@WÃ8¯æ _#¬T<6r»ñ·Îó ù(ÝÒ_ZJLѨ]了V$Ù»»ñHr‰_,mèYɲDŸ™_†[˱'V&ˆ!V…·•ˆb>£KÎî%ì@nÓCÿiñ'õÞ!f�ù‰æöá·Šuvˆúóá¡‚Ï(êÇ‹Ù^þV¨ãÂòùuúd§°ïÛêz˜$H„'²fò3ÇÀðø-øÜÐ*KâË^ÞÜ?éÃAÙƒ_MܸºùìY*–ÛòEB¯·'¾Q-çÍ@>„¾"{ÔT!’ +—’ËXYÇKÊr2?Ç›¾œÑJÊK·"«¥~°QJX'^2³–Ô‰:Öî.؉}u//E}xa%¤�ÖÆWAgú½EP7ïÙ„¡×Ê9©“XAŸµõêE~„;ŸØ"— +•™¯íBåû[ªéVÑÍ|6Âuln@‹ +¬Ç-Éäìù•Ý¤ +ª#(ÊFò>¨ ùbBgÆ'ÔUs[ˆÓž1‡“ÖØ¥Pûlºª¢ðÎÉÍb¬çÏü×Ovt1O ç·a§žfŽçe™BÃ…‹LT>j5[tlÆš¹²•bQUY3TbÝmIЈ{±‹þÏR½º»&qÇø†XoÃö‡EÉZŠ‹/\wéŸ:¶F¬Ø-öÑ ˆ3¸üøgµ<]I‡sª{tÒ¤^3†ü )K6ëÌ&— ’¼êÞOçOrø£ã÷¹Üóeª_'%ª´´½~íX8õH FA0:ÖÔ\56©§vw‚é¯(Õ»UÕ\„Åâl¤ÂñÝ6—¤žOvV‘À|Ü:m‘àÄuSV—œ…>‰¹µ¤É¨·2ûŠ/S‰¡@²“Ý~ŽÔ2¨L!¯-T›–&MFÓšüN7[e …{²È‘ìý‘Ô {eCº)¿ Ä_±Ù÷¬#ð�˜âÐgâÒãCÖÉôUT1o‹²OU©û³VUœÓ©"Xzúå®Zö¹ßËŸ¢Ht$¨®$7ˆºOÑYâsFª‰2�TFðܪa,Lþ‘8”rìJÙ{J}GhÈÓ¬i¼H•x°á–,tøµ§½?(QòãPÖ^€wY;â:H¼\-ò¾RÂUÔ†§$Ÿ„�·þQ°‘eÊtö‹°døÍ`=VÐgȹ¯}ñ¨Ô¨òRF5wO‘F"w§Û.áiÖEiÇîA‘R€ÉçFð”©ó¶ <cè9ÖéE+¢®Å�çç´ ½¤<B[ô¢‡Ïv¶óêŠNòÖ—…²ïÆÖD-&?€OÞýº‚T'BOÁxœ,ûè6qv:%±Ù£Ç¤|Þ¯¶ËßYئ{ñÖå¿)êzˆ‘œ²Ô‹Ác«zH¤½ +ÇÓôh©* ¥v;{´é‹Î6%ìSUî¶LEüª˜”jôpC.œT7¨ÉôeMu1)\:°D‚Cˆ¶;Ä‚ï‘>C›¬Bô !0-ÞóãésƬXšp¸®”dŠ£P%pØ‘±%²FöwÈ…òI¤i61ív¬Òã¸þ ËLK,:()~?ì"&û©ô7Ž}Ù“:C%êÛ6¦¤o4ò#@Íû +Fç”_ 1I[ÌŽ¨<²–ìŠèáí›I.ËîÔ–Gè€aÕ>[ò¿=tù0ŠÚÁ‚g¦ñüñ0CáS•�œõþ +ç£ÑíGô=ðl+©‘"vЛ?•æ;V"Õ3"È‚ß2X·W»Š:ɤǥ%ñù1¾Ö²nƒi]Íì,› 1ôêñÃWœ7;5‘Ãz¡ê‹¯úcÇy4ÍÅ”jšmhxtŸŸ*-)æ¹ì %Ve»Éš·Û©“Á°óe”oõð'·ñaz>ÃHTòeüêäÇ £Nº¢:Â<¼“j‘…Ì{±wÀrÄ2¦ÌÛYßàâ6œ¢¹l¯Æ¹åbHÆ6‰½hzM?߀|€\æŽnÂØEÇÀx„ÎPœrJTk CEˆ†êˇ•Zô׎d ñøIgªV඄ž‡gy;å‡'àí^e©€qp¾&åLÂKkp3x´¼ „2KøÉâ–ã<…j$¬B0ðÓ�#—mŒ‹Áv° • + »ÇÔSxÇx8t+.]iÈL¿aTXPÀ‹lV‰ð0/MÓ¶cw*+þ·Jsˆ‹eàH;º´ Ï»% +7áíRõ9 &ƃoX"FsO¢¨yII¯cÎU(HÑ9(+•«‹Ü±_¾Y¢,¥"ødŸà#w:£‚awŒ‘Õ)}XK†nXGFŸ”``F€ƒÇJ{G:•¹º!……#,,<äO¦eƒåW™šTœbMJ[3’Î`?_2†r‡*¤q§Ù�-B~ûC_(Np4‘áŒN)–a+ûÅaj”Ý=L‘ò¸Ÿå£nç0ô\÷~³7Eó¸ Ãâ P(°V¬Ã%“"0éÏHõ)Pœxi¬X'1 +Í÷xX·¸sì£l5Œ0Bª-#N„îV<UB£ï@‰‘Fˆ"Ùþ–Ø!X8qCDz|å,eè ÉÈô½ÙîØ,îtüÃß ¡ˆ"a#ñ¬eVÛv(UTØx¼K”c$æeââ þ§fí)Åòc‡ˆ UŸ¬Ôã‡;Z8‡b¦Œ>ªÏ«S@þ¸zÑâÕ„g·¿gXcöS…²<–Þ0¢IíÐŽ9^¶}XŒ^ÒÇà]©‘sÂ8ļ"<£Çªœ 6cÒ !-ÜWhÃø°ù€ª¬ëÐÅŽ‘ïÇڜܪˆ}g‹v$‰Œw)™!E+9긲ÅÌÉcØÚc"[f7¼1lÉçÓb_lÞ¥œ–ó+:‡©¬U1âæHÂíðr‰#’1~Èf1?—ÇxÜ6%_9:ñâCKîæœ1 ú[”…2J~¯•É!¨è¢=�ÈZZ§ºˆ!Sù[´ÛpF>нq‡â! ‡[¼¢· +”0Í-Çr0ôöGãèQBVÏvÙMà¨L(÷pô–]qþŠ¿¸9ÅU…°1:–h1Ôƒ°¨Žk–SÝ «<‘)uL¦VÛ]´÷O’–Ù=fg¶¹ +¥ï'ü©GÎEDF¤(ó!ŸÕnè–þÉÑ üš=ì5¼¥°´GÛôPÈË:uËØ逇]Žqø½Vô‹ëüb•à‰©•ðÞ"äà +…„òº:+âܹ\¥©È?S +pg2 „NÑw"di@IÉu–®ñ†S°¬g:¹Ç¼¶YÍ“K¼9ÂÀÿÀ‚‹3 d9+ر`ƒ¥w§§©TÖžÖWÂÊ®-¸&’¼8bUR̲Šñ•´sÞ¡POPSs’Bœ„¾Fd32"?mh2èy÷ƒ&ÑF5fez_S-ûbÀИ§]·=ɆRÒŒ@óHÓÔ£E1Ó!œÀ¿Ø~@ÎÕ‰t •æw³”̆TÝÃ+B©ò fÁ¤À…]ŽÔìsCw™-üâ?çñb`*ˆ…à-[¼¥\”ïÎÌâ]FùkZ`l ¾*ª2³¨ëáf¶ˆ«Ã25YÛ5¾e$0MY>ËGýä{U°×ìë^Z^e®PåTÝRš=ã`!n +Q}9}ȹ3mÓU¨!;¹¡çèž«‘ð7‹aàtÆ-ÆX{¿NͳÐrÖŸ�”ºëg̓)D`¸{5%N•°`/¦«7ªkSäÔLÉVOJD³¾‰;ê(á`ìTÞÁC6«lsl7jÜ´ÑA<d˜bFáG¸+¬¼×(ËÞNb‚dYZ„·Û+§Z5àÎ#’`×vÌe1×=IíÙLøœì�Æ"œ¦ °”œoÂ"GªÈù9ÛfÐ Ô|†ÛxM +Û±>î"³<¿³¾œ§ ^Íaѽ- +ԟͲûÔ¨mÜFÎp¬•í‘ ¿>³Á&÷s:€ÚæI+ÏI‰‘[ÀÂnÌS(Egò!"É'B4£{.âËÝÛ±ï",lôÃÜýÊa‰(ú¬&Ô´¥N=Ì€Ã@5 š!/Ax‚ÐÌÓ0TÃF-‚3°LŸ,k±˜Ïg¢FmÊý,}«xpèÇü%Cáí`"J»?/jáÂyKlãë¦çJº‚êÁô#É^E窮8V ˆÒËÂYþÌ¡"ÄTºM\5?qr}…M +i¤²~ïòƒ¹þ, +âmÉñ‰<&ö‚ a·£b[”ÂÅT·ÂP®•á†¡!RŠ›ê“jXØ(½‡N~³»r-±Árr*ƒÊ£Ýà}Ar ·‡9¥°z;/âh™Iì,ù2 AÌ ‚2̦!´ÍVs÷e@Q"¥a•–ˆçUÚZJTøóm½•Î0Üvù¦90:éAÂÂËdÒÉmZ’¶32C€O„#QM¡$,AÒ=ÛáºXR¶pPʬMŒj{Ð2.¿(“H‹¸ øGš]¥§öØ‘("1â¹¼,ÑS&; ¹>çncZp9ÀG2²Wíì+3¹Ü?a£ƒøe]V}²ñÈóMA#â·OwM&4‘&‚ÍTŽ%1icº"—±¤r‡ù`1Á \aQªÛÔ£‰"'‡£ã‹÷ãÄBG†’™wÛí‡FDGŠXjŒžC}&)n KPÝ3 +רFOÈïãfs9ÈÍ80ÜšœÔU·«¸m7¼pVªWy¼Ñ‚¥5dÔi)Â^öžªµ.z£hàèŠx:¥fÙâQjj‹Ÿ|ܨ>ÑáÍy9„*‰ùÞnÖ¿ùÏ +ùe ’Ìe¶#5‚Vek»EeO¦d¹Nq(rž¿c‰*!¤§OWtÅLJZ¸)z¥7ì—ì®ÉtìÊ”öã +¸¥…rÏZ>g"º|±.ªõaºp‘Ý©æ¶c¤ÕÎM{ÅH«BQÔ±3 ~€âá"ã–K”ÙÃҟꔨÕÉIn/k$PÊÞ¸UjÊ,Ö¾ÈpŽÙ9—Qƒäµ?ø²›A'v§¹ß[§¦$Z˜q€‚…õåù±žŽš–2öž*ƒ(ŽDQœËF¤O‰s5°¸|†Ë¼Bu’ôÙPÌH *ò’Û嶙¡ÈȬW€‹Ìh-V¸l£Nœ‰…§¹^aÇ‚¡ÄSB*{A5qw"KŸÌ£¢AÉŠú‰:qô†±ñÅ{œ=--¸ G0"¶ç‰¹ßØc5lrT™ÉâÙü“Ða±jdXtèDeL ‘FZ:#WÃxî:TùK§ÆBbxÂ\TãfH´Z´KsOΔ(-dû°fÐJžåYÅMqU-@ W>¡ÇD†WW[µN©žES{G&WÍѳú® +¿P`VÝØ…²à$d•o~ì©ä;K(iBõ&æMªfuÑ1 !²diºNMVŒC…K˜<’³T•‡:ñÕP‹Ÿ‡‘:vIàÒѱTX4OŽlñ*f‹¬œ'ÙÝ.©Pk g&’¸°ì„ávV‘9Ì©²= +òœ•*Ô>K‚žx’½1G‰Ÿäª�‹ ~nÍ•ÿüy²Y£ +Öf™¢² H52(G9¬Súê=K‰aÐppÈ x1[÷I“’Y‹´6¡d6tÙXo€cŠÕ3%æÇZ%ŒÂ“atÓͱ¾âFé+ÇõAM„XÄ2t~º1ž@¶Q·Ã’Aj$œOÔ�äxïȇ… ÖÖ$TS{¶{OöÂÒÁ·ÌUìÄ8®ð½6aæ–ª‘ái]=+b¹•ü‹Ô7ráî ôÃ11BØÐ'ÿ“_}””‹ã|zLz”‹#?ÕC·¾ídò{W³ÁáP'jª9¶:–a]{ +„ËE%0¦ý¶œDÈŽ×[Ò½È;‡ãë¥ápØCºÄ³IUK¡6WºÐ°‡'ù¸ <Œ\™3ÁS ë‘›¹Y¶ßí™Ð€±µÇ© +nÇgÿ$ @123ßÊå1Ó‘-I VUBÙ$ÝáÐ�Û]@ +9(‹žhxÙ“âwœ£øÚõ¹�p:õFõ8@f„œØá85¨S“ýO䨲tX)÷‚âùt凂öÝô°rh4aUÕؘ.@4‘u¡ø¶&ìÁGß‘—ëxM]*|š¾Aò¤0ýgEŽ–\J&D ¬tÔ™+ŸÒ¯O†äØP6Y<µkàAR9¡ÄäئøÞø㯇0¦sR†^ŠÛüÁÖ©BŸÜÐò˜–^ž'ÿ{†²ŠqD¦·òãVÏìq¹vn®î ÷Ìꩶëdºôšzà̤ *eÞB‡A›“=´ÈiAy[î÷vÆ ³�L»éC°.(¨eÍŽy!|¤ŠzÅ• æ +gòcÇû²}ºÛÔ´óܽßÁØä†ï=§4“uM´°Qr媹I®Jì;¼“.™Ró_ÕiáQu[X>hµ,v(™1®_’uML“.?Í¡:¢¡ÈS<M.YDU³ò|è04?^•ÂaÇÙÓÞ‘=çhMNHƒñ�ã_TÃÇú%]d1G.Ÿ.²8¤3#R#2Æ’PÎP÷ÈØ•r]1Ü%‹ƒ`Èýì(€"Íz×—ÂÂ%4Ý~Ïž!¹´ÖœR=Ê¥¡öFˆUé$0’Pz6Ý+ü‡XmwU¤&¦Í²; !Z2QS¢D´U%±£ +äщ¹«ì®¯‰4|6ª(‚¸Û¹‚:sX9ŒBTÏÎxüp™ÕQt¬ÖPNÀÈðæH|0ÑIä‘舣 ¿èå‰û_½>ÊQ>U2b‹ÔÌð†¡÷1L¢Ec9ä' Žð/•o “¤OX”I¢HòÚYž”wPÞNvuñö“2™×˜Ñ‘¾@ø‡šcèMÔTÝ™Hl—‰’ +®ÃW|½` é# ¯µÐ«+{*¢úzN¦°ª¶‚+ëXzgayfü&üHÖWaÝ‹XJrÁá¦ï„ü«ø£+õÄ;Ër‚)]øÇ%VRÔ®€Ü0cñÍêø#‚(XˆB5¦ˆ!N×™U$ÐÂPݘéjV&F¹oFU +€ÇÖ�U(ÑŽÍ ”1–Îù!Ó n O¶ s(Ô¤·5;pQ£H¼(ZsMG ¿K— Z’÷··+±J›ä`ÔÛ‚ªäXþnëjÊvdö'¤Ð`©’{¿²L•é課ÐkH6×YWß9^«Ê°S;UuƒBÊìgñ#ѧϖ0v�í7FÓ£ÜÅIü&æÐa„–U›\ÎL),Ô~Â{Ý# +5èÛö#…¹™±d@îNffØy€ü°‰ŒfÓ$)å^3¢ü¼ð †$a/¶`Õ*U#*v–d¡«¥ÏÈ!ÛDR¸uÓÇcV–µ$ƒà”GüªŒx\¤”CËJMf4ð`Pøšý‰¨¾QßXÀP]H™�jÅ ÿLöòºÁcPäÌŽ·‚ž‰¼Ý™†G‚’œ„ŸÊ$D¬º„�u»[Å È`mza•¡•^ H]ȼƒyì¥&‚?'±æÔRþ¯²¸:ŠÛDÓpz¸ˆ×h²£Û¥fa¸lÛQüH¥Ý†{¶5YUCÝP©>5>Iêeåºo‘¦\wKM9á8Î+Ç\VßQXMV>'(ó°RÀý_ˆÁ"Å"bÍ嫦:O¿“—›ôÏU0OC²ržÆbES´Ø {ñ¢>N}OêR #ã…‡e‡ûžuY©”‘ÒµˆPp,y*L«=·µ»Òª›4¤]лø§ÿk®&Xy!XÑÔ{ÍJv©i¢@Í�^£=;½½6 +Ø&ÅÒ3»-[ @ô…:Õ¤¥6ÝîDòÁ¥9Ánw¬úVŠÚÕEš&c¸ +L7í’ÏÏ~C=öñeyÔ[n‡†ù‹J%-°ž¥¦½k–Y—Jä5"?Âl;5ýjHÕãy( +Œ(Å|êÔ5lÕÈ<ÿ¬Š‚zÔ¯CUŽ¦ÏÚ³9‰—….-xhÒص™W8BXŠ_de~‡ÛH¬vÎsZ‰‚/ùÙðÿÇÞD6i*\HŽjTU»Y» Èïz©J2KåñTp‚V`…l÷&þ$Û80* VÓ85J”¥dr�*Kº3±ôÉKe "Ú341°Ö¡«BÚéQÜÛð-‡�,ò>ù¦H'2ÒŠ`âSj2]+‰°Ò¦8%¬T/ÊRÜþê^ݦDã)uãÏHS‡ É»j.‰D·&q²ÚQß³|”¾zŽ¸^Ÿ¦ÌÃB1,<ÛÜ)Ž=…±ÇÒ$2÷ +Ôç<“)ò +» ¤} ²§g<‚Ð’yEQ9MÓ?V$/úð=(=g`É)…üîÚïX"ª;•¼L’'@+BÚðY<ÂzÈrW‘@\A¹‘ªYµêSp\îÉw¸0JQsä*ºj¨]½\Ôé8»û¨*™ eRç?øYªô ‘ØÑ©:L‘ÃÜ5Ÿå¹â©Ìfå\¤pNŠ)Z 5º2Çuа²�a\U¿ 2¡èa +-çýIOLúÁ©)ÏZéh¹8¯ÀëdmnC}fcC&HQúŸ\+®aõ¼õæï<*ª"^’|«WÜ„^ÊI£ÍãÒC6jÓy|Ö|R@ ªÎ[±awqá +¬)U]$-~³Ã5Í'¦òFP1§‡™–gÅcÿHfvD£|9;Šèö0Ò½ºDÝRâÓïñ°’©ê>)¿…=WPp7Ï +VUxE¢;ÁH£(}(Š¢=ÑhŠñËÇ]ª;²5$5H%(jÂJ@3ZX4×3q;Îy*»T™ŸxW>ùM®“`Ý_28WVÓñÛ6Ë£E”Vz4´²½TÇwÑØH¿h¥àŒô'ϲZ΢ñx6Òk7êA<Œ^5~„{"¥êÈayQRe ª…¥:;ª_ITrJ Ôdq2:27ôÕkÏa0ÄÒxa!cå0…×ã±×óÄ«NÑ®ü¥òw£Ì2-¶¥zì�Ôå×ÝÚ}d§#.ÄÎŒèÃJb¦6(Ù—Ü1˜óÚ³/²Ïi’׆CM•2»C9GJ¶D©IN–…¡(i¤âù¤ºžd®Å|‘HŸPÜ!Ö-ÕmºG,ãÒ„+a=ÖO{æÂ4ž«*BÛðÄüW„ÖSµÉíª¾U.L¦¦j½øXI=õ„$Lk‹}•rÜБ"åâ9l Æ¡d9Eìt}‚€¸›d”ûÇj¨™„mªžbf}ϲ¬3Ê"‡(‰ +9Ws'fàY/ÍÚa8¦ÛOC˜wz6¦:î|W<Ý(Ûƒeë¿B×Áò¸GUÚJ‡ç€¬}·0øU—’kz?T·É$,ß0ÈÓxÁÆCvÎи'TÊUdM}E„,K‡^eo¬¢ŠwM‹°l®P%t…` ì‰ÚëàXËø7g%ëYá$°@«Js¬R_´‹Î芞†‰!bÚ¶OHMÏ8⢧^¿"²”)<Ž•F÷FkĽq3V”_®Gë‹HyÊé_ç'lÇwQÈRµ§ð°lgM)9]¯€¢#}ª £·£…ÃŽ¢Þ®¦×µ¸V姑C‰â]:"b K»¶c+h–ù,K¶Ñ±³gòµÇìÃ)A‰Ù¬¯–ïa‘ï8•68Û1¼ß”fiõþû9Ò»måÕrbƒÌ› +-ˆ.é×Í Ë¬|彃ÝMkqÙQ÷f ¢HX/÷¸„hw÷vqdŠ~rxÏÔ'¢m¸Q„«d”âÇD™@Ê’€å¤ßV™‰‘)˜È+K�Êט£Yé1}¯ ƒM6VõÛÎèîÒ˜¿<=—<ôŸü{NÈ/…4y3™N…Å.©Š°ã˜…¿³¦@¸qøØ7ë&)™Åf¡ÕA¿)0¶ëYÇ¥DV[²f9I¨ŸLÏ/ûÜ“úšEÅ? ò?—ëÿcG¥í‘iKå‚Tm°™±‹X³Äc·~’삨b«ð6!‘""ÆéV; LqVc=ïð +lyȲ9–&±Ž“eB}«éufˆö³Ë’œnVoTDçhÒ{r–‡•:iZˆ…D'¦]bÇšqcÓŠlt}LÞYÎDZ™¾_ŒÛ¢ËLŠé°\›Ûá3}8”Ÿ4ws[4|ÃT÷v˜aà‡'JgœÚÿ®ÿ®ôb�ÃPý>‚>ʸ BV¸Ÿ +àÇ-ÅŸ§ +^k~LN“Ydé‡jùM,¬€b0´¸ªH+Öo»øÿXò]¬r¬IBVjñç%QÇÞvéW›[D¸“Òä4õ|`¡ò‹šË*µM먮L*¨¡`•&êjUã{–ã½=í= • 5~Aä×l·Q{¨¢.d17+~ŸŠ‘t@±<žguJÜšj¯vAF2• NŒ!ÍàøÌæ‡Cø¡HØ ™—¼vÜG:ò�_©Ü«Eâ5 +ÕCêEíù¨Oäyí1·aø‹nÖÄR¢Wzqú™%®Éd=ÀW?ë‡_щû/í¿‘£/Œ6¢di(‰Í#bڌƢh6#7C»,g^ƒ¡ *üê*ßb1Ü]Òåo‚6Ê3Yöd€vtžÚül,×ØçÆg祄é¦g“Ù?êЗǘ›ÍÝ’*U—ÃÁ‡ý +âGòR±ÚÍÍ®O 5ÍFdˆÙ‚ f7ëç^ÐìèK³™Ù$Ú;ÃIMµíEÌ>F³«›fn^6Є„Iܸl j›Sq-Z±mXvµràÅÊf²1«:™E EU²[Ì·(2Xñœä€àÆd³D Šðùm¸; Ù(–戌lJJy#²›ˆ6!½Õ²…ùèüUT·xó±Ù~Ím +™q<»Y¾÷bc�×ÊAc#þ¤–z&ccõ7|‚Ë\p釋͢3åæ˜@ì3cýnŠåaœYA§}†ª}WÃMÞöMÄæDÞ…É&›õ€F_eƒ/vT½m6!Ãß6›.=› lFU™ÀFa‹¬,:IØ£Š†rs°‡Ã$ƒýYÑ0ùµ)Ø˽ý^l¬Ø1ØKMƒ€½’–ˆ/�65Ú‡îŽÌ×.è×Ëý„_ðëÙ• ö5�xn£¯ÇsëE¾^S=7øšUg%«†€^6” ñfŠ³ÍD•ˆXœt$L…¯6øe7nðu¢BTÊNÑ%&À×´HP:o¶[÷28À×X??¡Fö +‹¦ oìõªN«öý8´Y`¯Ùƒ±·›{-ëT½«6O²ØB÷¸âñæ^Ã:¤ 7÷šmBºË½Ÿb¥7÷z™ç¾±×ÑD(¨×¨×h^Ëmè5æ‹å•=Î^Wmâõš!\»€×02¼kÄ5FÎß6îgÓ¤þÛ•Ìhð¬°Y×k˜,:å5œ|¸I×Xë2µ ëÙT#˜k”íʹ!×Ýmš6ãº-ylqÝ.Æẚ•™\ÈÁŸ¾u“"óE·nŽËÛºMÓEm Ãþ¥Èº"C¹w€£ágp©sÔ§´©ÖÌMP§h¨u¬i0Ûð+u#‘RŒÊYhÀöÂÉ19Åyó¬kT~κ>¡ÁtÖåÍEf] ÝÙ0ë5LÁ²†a´ñí…²>Ç2Éšùß¡¯Šª_–È°rþ€¬±¨››qÑ€\¢Š…Œ±†³Fö±Îý‘b9‘ÉÇ“®æ«'¡Ti¹1㋳|1¬Qõc ¬IiæU“`ž‘…`M"Ê£8:é!-ŠÝ_Ýšó€7½«"e^_c>5˜Ôìâ—ÞäjBAnÀu âup«£‹ì[”‹Rº¦V×aqC«‘Œc¬ófVŠÍ7/�Õ8¥fœc¤c¼Õ@–Še‚ø;jZ™ï…AEø¬ºFž>XÕ¸VNª>†‹TÍŠÈš©ºEû�U·($¹9Õ-ºU§ºE)I`ª›»áÝ”j–|ÈÄH8VJÛ˜Q ”½Õ8#Þµ Tƒ,Á*õ�T·ªX䧆M¢ùÔ0hÞ0žƒ%67šPb| §†h’¡ç€S@¤ª¦‹MÆn£©k³ˆ5ÈÔø ™©»ÁÔTŒ<ÊŠ²Ö¡:h±±Ô%¦Ù›J$üͤ®‘$u :ùM¤.¡- 5ªtÑ<jv$µð`ã¨3ÊP’vÁEú6‹:/ÅŒnuaBSòtz…™=Õé0x[ŠÉ½†åòŠ ›BwqeÀ¥³IëÛ‹AÝ÷ +ÛÃf¶Ákbd4Ýõਹ<k‡@Ý£ŒOüéÇ »~Úµ©‡>ý8!µáÓßkþž~Äô;èéçï¾ÁÓð«Ò;9=ƒ7vº²)«tôªz¬ÊÝÞÌéÉ tûv˜Ó°X9½œVy§—“€Aœæúåà¦ñç˜é=gkÀ7lš[•|±¦Ñ=Ò8êÚvœn£¦»JÈiznÐô6gz94øh†Ó8žcsøuoeÇx3¦á ¦·-ÓyW}`:^Å›/b€F±ðÒX*±½PÐ¥Æ"S}Ó¥q„ÜƼ´05¼4>hvQ~á¥BK9xéß2éV{:|i +Æ4ï{Xp>:óø—68bÓ¥s«o¸4VÙLU[zÑWmß‚-‘h–oo´4<V´›,ýð'«ÕpHQ>þ9?ïdixEuÎà2|&C]ìŹÑÒr +¤ÚdiK‚xÀÒ¸UÉrÅGÕæ/¬t6‘`S¥ÑþiE`€aKŠ¢‹) ÁHw¯Ú׫¡Ê«fÎ ”&´[Œ)ý·*Ù6OÊAnœ4ŽUšÜ(ç‘£ïNßK’ÛǺYÒp »{c«Âòð©ke ¡¯#{¤·18ÒPD°ž80Ò¼E©¾)ÒÄœ”q ÒÅEI›!-ð½Ò0ò¡AB„gÌÆÙ[›²Kqš‚]–ÅMu}ÊÃŽ®¡Í t4Š&¸ü "4hB”CÜàh¬1¢+&ý142`¥ÛpS£ÑÐ趬¾fôwNuøÜ‚ŒÉ»˜ÑêË3úaFS'Dz½`FS!H™ü…ŒÆ‡ÊXÀFFc3„CaŒ1c=1šÆtqŸõrçµÑ‰¨m¼Ñx¿È¸vìêb`4ÿžæ?·>¤GÝÀhÈ •K`´ÄHå1šÐ•1š’JƒM¨sè71šV1„MŒæã½b4¥+Ì»ÝÈhªUZ™M¥ +ÃQŒæ&É€íÃŽƒ¼žáâ@FS©ú´º‘ÑPáˆZx#£©kØÈèD¶/ŒŒÆ;)ò팦°™AÒ@FÃBÂfF‹dRöé˜Ô_i#£¡>Ræ0ÑÔ 3ö|#£©.cˆ5Ñl˜Áøª‘Ñ4ð5¿‘Ñ’¥õCŒ¦K¶MŒ†…uƒ/d4.IPç@FC¨˜w £)GRîõBF³¹n|G¬µfìJA#£—hÆÔ†Z3Æp½š„®›6{júxxÑ«E³ÑÜh\4ŽB çM‹^3ž«aѸ1ò°h\E_/X4Š"ÊNV4:¹“¯¨hòvUŠ hDDÕÑœèY„óÛ˜hj_²ÂÌ›>ÝjÿhH4btšÝª1ÒˆŠ”MˆfPê† D³É7ó†7!šWœ%5”“zÜ#j¢QõÚëøöD/W¶n>4[k;ïAÐ!»~‹Þ¼áаW4“ Ã($,44{?B^:QœŒcPš Z3‰;"n4´8pÅýHÙ팼…¥c ,jÇö› « ͆¦Í^‚ MC@¥7šVÖ&š?Pg á3¡µæ·gŠñ6š¥ *èŽT5óƒ¹áÐ,§ Š9àШP¾+àмAª²¼àÐIÅïëÛ†C³ß6ð‡fmÃc:̆C³ºdc¥‡¦…q €CӢΊšJT©”L‡fO¡æšJÉ2À‹è.#Üxh©SIN7šÛ‘OxhLGjï}ã¡éÕ¨Õ¡ñÐGÅxhXjPž7V9ÆCÓÀèdà¡iQó©ÍX«BM‡VgË€„îA˜‰ƒÛ ˆæ∑ D'BÁ'¦¹ú‹-+?]¢y,Õ¯Š ƒº9Ü„h¶H¡h!ÑZ˜¥p‡¡¾ Ñ*žjÒÕM•ôÏõˆæ‚eºè#¢)ÓOÞˆh*¹õYM‹>€‹M+EÁˆ–T>›P½�3ÑàbDK¯Ãi5 d™DODôV¼¿Ñô +Ù¿9Ѹe"ZÑŒ/„hF4T[kD4Ãœâ‚�G7¾#Ñé´31#ÚÑ‘yÑŒ¨ÌÀwìßü\¥ü´`DÓTr;V¬˜_¿"¢±$8’¬´Q(Ñ$³%÷RÞˆh~ÕåÁˆh¼fP!:µh—{¢Y>E•M¢ÙP!¢éÉçTß„è´Aˆ–åð¡¿_ìµFß'äþÁ‡Fi»ÀC'’/ŽäßHâÛ͇¦•Ò`ó¡q|IÎ ‹dé7 Və͇¦AiA¢eaÂëDãÙš*øÐHL2xhdòÞ·ñÐÌC²L)øЫ[ïØgq‘ÛtèQ"#kcÃÁ†î¨wHv£¡a|Ìnæ̃P;CCJ=ÁÚ®=ÛiRgm*tRÓتWg°n&twïë„É « =£¯6§˜M¢òªÇÈÞØMúpâ ·á¦A£aÐÓóù†<æ¤ +®=šÃâ{«"ìÍ&Aoà ‚>Fq G·ú40Ð JìvS 7; Ð=3%hÔ¼îB@c·à83x4C»�èùøu¿ùÏ#Zlþõ 4þÔÑ)/ú3Ñ¿Ð1ž²YÀÁ~IHÅ‹üÓ²ì j4ˆÇô2a¾±Ïã‰t®©Ïà ‘6ôÖ…ÞÌçn?d3Ÿ�eF ŸG|´ù¼‘jA|”iá�>ƒºYØ%¦±ÈÈ„<vÔ´çAœÂ›öÜ“ò¾f=# Ë´~ žuÁ2ܹ@Õƒèénõã2çyx•úÂ<³ïóª‡òܵòÚŒçÍñÌSªðŒÌ +ãñw±wÛÎ>ÂüܹR7ØÎ×Q6Ù¹Gf4ÀÎ#RHAqÞãÀu0Qe¼¦:cÌK7ÂyF¯Ä›é<»Åè{«ed{!åk&5ЙxËYφî›Hœó ÉsžÁš3ꘜ˜3ˆÕìÇy¡œ#Ù圱TfÞË çý÷Íq>Fcœt‰þ¬ܚÅľ⼂“g¬%õÕÃ9QÛîfv›á«0u£ú†$ÍWÇòÈpæÝÂÒ&©áË`A0œ¹ ?ôÃpƪé!ÎhðîR]¤ù±¦áqó›?—G®ÈÆ7ó”xwßÌ‚þ¼å]D§‘üfVôOC°ÕY0E×í›ßÌgÉB ó›ùJ4¢%^NV3¾øÍlW P7<=e8ïýð›ÿ¬�gÆI¹ºÎ´Râ�gEK>Àf†Õ,âB83\E}P œñ\ýF8ƒÇÈä&8ãÊU`糚 ‚³¾é© ôfÙñÕ>”2k9ê/ÛŽYv;#í³‡eœaj Î,ULJ‹àŒ«”:-Îxím +„3\; Ên†óñ`ƒáÌ×3¤"<I1”ÂÚçËj†3»÷2ôgX$»ÎÄ=PqçD¬¶+èÕK‚Z/7Ão¬Õf8S—§êW3œñ|UŽ|3œQF¢W œQª%\º¬—ü¼�ÎP—_ž?ÜhÁoÆ{ÂõÉÍof€‡Ãuð›à—À£-Í5 §ZŠV·ö¥Ž“Çb‘tð›ù“YÂof 2šÑ«äìyÜøæ5ƒ±}èÍ(§^Ùðæ9´ÚÝìf–×ðÌ/t3ºÁmr3¤“¬ÔpóˆÊ¿›Û<º‡ÇÀ6(^jóˆç¢6ca³ŒhfPd˜lÈfó8ïßÄæÑ‚ a`ó.‹6®ˆ0imc84™² +–üÖÜ||±šAébÜ,Pͽ¸õŽAÍÄz •CoN3;=Â9ó²p¾‚Aif÷ù¡dòNËõ¨�ŽÒjŠýa`]$®¢>b$lD3»¼W}Ö@!QÇo)�Í ®Ñ½ùÌÈÞŒxf@:sòÓÎÙÔ(¡ÆƒÌ/¼Â@3ðBÝiÑ0ô>,03[}år¸ÌàS]tc™Q«5‚©Ìy«€2c]ÄÛÉ# Ád†t©™£ÌU3ÄM"%^HfLÓ‘¹UÖ^»©¢õæ1s)F€ƒ¹-{Ý<f(K8Kß8f\-hÌmžîÞœLPW%‚öcnÃ_Z°˜[Ì^bÆù3w³ +L‚ÄŒ©h\¢Î6ÝíâÆ0Ãy×òßfœš †0Cä4Óz1˜W,Ò‚Á¼ZôÞ3‚yu§Ž/3´Ä*¤5€yuÿxð—mÃÜ:a5s2|y9°ÙË0Äomô2\z9’›¼‘©7xyŽè¨`îò +Àf`—WÂ/ê2-zoúŽÈs ÔÌ\ÿPS—iMÜ2¸D®wö«9&7uÖÅ‚ÿ .“å÷B‚ˆÝå†._‡3t¡›ºœ’Ý^Ðe|Ö:Ðeæ›); è²@V–>=ü@ +;ºÌ4/ç´€.ïAFPï׃./7›z1—×`a#—Q5Ïú˜ .ÃyHF0oÒ1Lo•&·ŒÝ˜ ºiË,Œ‡µ¼˜e/ö²Þgˆ4Yò›ûHnp–¯ÄÙEZæÒ€ºˆ -sAÆ~–æt éÆ%3Ô)ð´AË<3uÉ'ªi´Ý—=»¡¼êƒŠ~F”xd—ž\œeÖs¨ÞÊœe^ö`}•9ËÛrs–±£È&ÁYÆIºÿæ,몪Z¹8Ë°ªop–a¡”wƒ–é€óÝ eziY›1AJƒÊÜ„Yæ|d7f™'ÆHr`–ÓîI˜e–‚pн0Ë4VwaM ÍVÂ,sÐc1ÊY¦ƒ™-Ô/ZQ$•loÌ2,*S¸1Ë\kÎ0f9±®H׫“ÀØÁÒ…³ÌE1õÐÁYÆJ–5 YVR·Ô7f™q’:³Ì%’ºE³L6ZµìóDÜsh¥³L6Úôf|´9(`7f™jFÇŒY¦¡ªÌ�wêùÂ,#céûoÌ2ä êܘel£vc–‰Vì1Ä3Õ¹._ÁfZŽÁÜeÒ´XY³·kÍBû ,cݨ—ç¦,3¾LÖcP–ácÊÑÊ2bŠƒÝ”eqæ8”ejÿô š²L¥ô7eYJÊ>eYŒ+ÂDLYæž*³º(Ë‘l{Qêž¼Ú Ê2’‚‡_”eÉ'×<”ež~’²Œ�–ðdFÿ¢ ËséÄY¦…¡²«X†,s3ÝC–yì䶲ÌÕØ,Á¸,Ëh8C–á†,_VC–ñŠ²<™á"%ð/È2–ŠòîövÙK«`,Ã…XÞÆ ,s=§\½ Ëû}}–™z&a Ë,y§j ËLF댗¤uÙÔWì!WK",3FñŒ”ê~æ:6gÙ°Ìm¸â½Ë$ÏtËrÌCXf¤j~,ÛùähWœ"ò!�Ëüú"£u³©v<°K/Vˆ„ڪܩ`™±!°L‹æ1–iÐà",óö3cˆe¦º)XÄ2ªä¼ËD[¹;©¶P™uu4acڛ݄eê:r4Oà(�×GÙu–3))¿Ë°’ ¾Ë´ð!c™ +oÆ2GUN0–9QyõŠËtaÏ‹±L‡6»—„ƒcæîlÈ2 mDo†z¶5 ËœáV¯²Ì{ÆÞò7eV½hAY†EJ© ,sJ nÊ2|TAYaoôCY¦ŒP½<®’7J#YO”e(w8¬lÊ2³3thoÊ2£Ö¬¸Ê2x©@z2Ü ¶8{Q–¹rJ—q…# œÛp#–Ñ$*ôÆ/Ç€åï¼ú_uáÀÛý´ƒQÚ¡ðæ¦o¯Œ'\¦±èÊÝÝÆ^pånæêf+wŒ7ZyÕð"+OG7 Ùuꇬ<ã»ÁÊ“‘¸{/1q7Uyº¼äUFÑ•Of*ó i9ÊP0R}•t»ÊÐnqHPqvýëÍS†mš±¬¦]ü€)3´Ê›¥œ]9³YÊ0°V ”©©wH|ÃÐH§Æ*F(etÄ+]'¸bí{”Q¸@0lp”´1Ê%=ße§"ˆ2õÁu†2ðIëP.-œHó“K4å |2LN€nz2ÒÐÊNžŒŠ€fÆ2ÃzÅ´Ži|AN.!ôp2rRˆ¦¼¸É(…‰¾¹œ^‘jPÆÑoŠNDȾ É5XŽÁLfToƒL†ÞƒY⛘Œ½î�&C‚ÒíÈSRÔ{á’û$DÓ’±#ãKÆš»YÉÍ’µJnÑs3HÉͳԋ”Œw‘X )¦úÌIFþyèß÷lÊUÖ£o«ßaS0’ÑU½+,¾+&°ìË!ÛÂÇ2LÁÚ|dìÅ~(7eMG†c@{À‘¡¯SIËÅFƵv×B’JJS@*H`¾ÁȪ«ß6™š§y˜ùìW¼ È=Z‚y—¿¹Šñ""³ +e ò)V6¹¸�ö…C®‡2½L5¹•z 2A+\±¨"¿EÓ³ !·P«Þ dqÆæ “½Âõ‹1Èø-¶¥¸1ÈÕÅ›‚/M!ˆdîziéµÈÈb0/dPmø¹DÛõ€\vó>óQ¡!’¦ñǤ™™a¼éÇFðã2bêsj‚Zoô1_;KÃ8¯€-Gùv€7ïû棦Lõ†.Ê)ÙÓ’¨Ç )#›¯æBŽSóyÙæÔ˯‹Åys—ªóŽa D_¸ã1oÚñgšguáW“!ƒuÜ8 ªÆo£ŽÙZ!Œ˜1?°È5HÇx§³qÅtÜPéöÔSVˆasð2æÑ¥Ç|äM9^L†¦or\ÝÉ{3Ž‡J@߈ãÏ„¹,xâ8yZ±u¦/¾ñä2ÊFL[’ቂÌ,Ù$Ø×I»X&’–Õ„O/änqò7ÚXº¯C6ѪÀ`ã-n_\ã®*‹ƒ5¶0qS™P™â3éU‰Xü:º‰Æx+’AhŒ’°e®yÆxŸ½ÑW±OkšM3.öšfœÃ–1kÔ=âÊõn]Õ–ô”°¨á+¹9Æ(83JùÂ[ÒãÆ A:c®ªX¦zCŒ¥ å@ŒAý¬Óú¡SÎù„%dOÔŠÆv¬!€¥V—‹ñÁ}ïÿšÞ=FßiSŒëtÃÉ€«l3Œ[)í…0F�¡˜:I¯¸ªy`LGµ!¤ò@^¨IpÝAUƒ^ܲ3y»¸…¶Àèb¤[©÷r1r”Ò€_àâÖŒïqìjQz8&£ÿp$ö[<S$—e#"¶Ž-^I„³FVM²xEÿŽ äê ¶‹¾’çÔÀ£KÁ;o…`:î†Ïé–ÈÁ*ÞtÞ@MA÷ò&ÇM!f..8ÅÛpcŠÃ¸)ÅÃ3ø¦CÄËÕï )†øVg2œTˆâóçE(㮼êáÀŠÜxbˆ‘E2x4g¬ƒNÃ4O÷x¥Ñë;ØÄ#ÔI"Í9Ì›LîT ñzÏÀþ—ŸÍFï–x6;Ó%¦¡\XbƯÓJ<ƒäd&ñt;°@GëðH£²ÓæC“ÉD£qÄP_òÞ4â Ì +1‘‹L‡™E<ý¡¾PÄ(UJ&„F霚˜‰†ìèùÓˆ™(8Ä`:QAbñ*v�o +ñºÛ"Âc!êy¤!fÉ]~#ˆçbˆ+ÄHß«RÃ�âh¶þâÏà¨~xyYµéì$ŽøÀ‡ÍšÞèaœÐê<¼Š$»/î0>7ËvxE)LP‡¯ÃlæðŒ„l ‡§SS›/ÃÀ8µ«ˆÆæ ƒÖÇÅÕcéîÁþ #²ÖŒul˜šóY߬a$7F¨'‰§.›¾@ÃHLEé´hˆ’3ŒWs¯ºåétoÈp²`oÃ>F†»áF›o‹%m2Ív†Å'>×4z‘žJuQÞ.r”ŠÚÍÆŠGÀJ£…±Êé Æj*•~¸ÂXs~˜_Yµ˜àEnel¨00C¤ðºõ! +CÐD¤d�…¹6siËšI.-ó¦7–Ú¡ k%ÛL˜kÝ‘ß,a¬Š—ÑļÕ0¨ ß(ájeæ‹$€Tœ7¿ÈƒmŽðWGç‡_щúÿFø;<ð/¹}û{ÿèuú‹¿üÝ?ýËßÿ_öû¿þÝ?û‹¿þw&GMÁßûg¿ÿ“?ÿ™]þç?ûóßÿî¿ÿýŸýëóW¿È2ŽMÿâßþîsòÿÝ_þÅÿƒÛþøûõWÿÑÿ·öÜ’?ûý¿ûÝÿøûÿ[[ÿ¯ñ‡¿øó}¨¸þYã5þ¯ö§õo´Cý¥cãþäÿølÌôã_ütÏó‹‡ÇéÿÓßÿåO¿ÿã_í¿<Ëø›ÿêïÿ£ò»øÇ?õÎø»áïßý“¿øã?ý¼dõyÏ~û[™ÿÁïÿõçÞ]ÿð›òoñ/Sÿòþòßÿ»Çù¯ÿÉïÿú›ÿø–þ›ß<ßþþçÿþÅ_ÿæßÿæ†~¾ýŸÿø??¦¿þV¿ýãoÿÛÿþ|ûSlùÏ~óÛ±0†ãÿýaÿñ4ù~„…J±5~ÙüÙåÇû8?þæŸcÿO¿sÍ×ýYÖ`ù iþ€r0 Ï’ï³òÂ|ÆáNcsÿâOxLR“À³Mìv7t–¤Â¤ÛãöêcDµAþb{Ô î§ß¼ÌÇç^¥ãóz^'F�Kb,õßÛ&Åž^G=Æ×\æ}²ç ×U}~úÍ¿ú °J.&˜¢Ì†AÛS0±’þq´' +$>‹_äÁQ~´PÂù¹«éùö÷`ãJ-•tk!ý}Ì0b}]y!fÿÌCocSòƒWv™«ï£Â}ú¼ï3°ñ§Ÿ?±?ÿ\qüÃÇóø<*È8ˆÑ‰c—Ûì³`ñÝB�÷ôÅؤÚgl3rc¹{”ˆR¾½ÏÀÆŸ~þÄ|Æÿåõý¥×·ÎšMI›Œ¢|ÖÜÀ× âÍýŒög ®Np� +`ƒ#ƒÿåÆ"펺¤×)$/‡îs½l÷eóuÎA¯›uNàucQâŽ%Ç{[˜Ì/kßö˜Ï[°z¿.ßÝ¿å¸ð[žÉ=üuWqÖPj¼~ÿq.æ>ÑËv_Ó1_×zÝ©s¯»Š_€ÏüÞŽgþòºãû¹óyöAïwå»;ðë¼®Ô©µ¯#W¦Öü6ÿV#(¯‘ë2Þ#×e>#×uÔ3r]gp\¹K‰ýÞv ÐæëQñuÇ|í9êu]ß݃Ÿ4H&×|¹9˜=žòå ˜(*?ëç.ã}j—ù\ÆuÔsÁ×Ü7sÝ@ñµ-jû±ðzõ_gpÌ×Ùž£^×õÝ=ðÍ9wí5KŸg|ÍÒçm¸féËxÏÒ—ùÌÒ×QÏ,}Á=KŸg|o»ß†û¨Çø:ƒc¾Îöõº®ïîÁwoÎëæœg|ä¼ ×Ï]ÆûÔ.ó¹Œë¨ç‚¯3¸oÎyÆ÷¶ûm¸zŒ¯38æëlÏQ¯ëúîüôÕ÷ ]í;×ÃÖ—;ABËøj|´Âÿâz`ZDýíÏ9·¾Ìü6~q=îm;qŽzŒ¯3¸ÌçlÏQÏe}wþöä™tï{z„óãÇ“¸Îò2ÞWt9#çê/WæܧkÒ¿ïéå \ÛOâzRÛø~ªÇ|½û¨×«òõü*Óã™uïÛz<„óûÇ•¸Nô2Þuy#ç\¾Ì¹U׬ßÖËC¸¶=®Äõ°¶ñý`ùz öQ¯·åë øÛ¿ªçíÇ3b}>Õ0¿>j’Kíã#ðÇ—€-™žñ�²EÒïïÏÆ/À½íù¨ÏQñu—ùœí9êu]ß߃_yññºµç‹½Ná|Û×É^Æû®ááÜ„kp9·ëúï[{}±×¶çÛ¾Ø6¾î1_/Â>êýÊ|w~ÍåÇ뾞Oöúýóq_gz﫺Ƈs®ÑåÜ«ë;¼ïëõÉ^ÛžûzZÛø~²Ç|½û¨÷ûòÝ=ˆé¼ª0ዯS¬‡yùЂ@wðò.ãíi\æã•\G=þËu·¯óý‰Eðã»õ[¾¬wxZ,'ù2Þõe>Î÷uÔ㦗ï–:¯ßÅ)þs…UÿáÿôTý‰µ–¿]¬•wìk¼õ„Uñ‚ý‚Ñ»þøõX'æú·Žöjã´‰%ðçåÙGVXÏfO@Sz]¾Ø„œÜÓ†¬\úíuL®ëgþöúý0îicñe[º_G=Æû.ë>ÕsÌëš¾¿þ_mÒÀ¿¹É¤‹×)ÐÝàã=çzÙ®«:Öëœc^·êüþë¶Ê1É_¶ÍÒ¢½Ö6¾žë±ž7`ó~U¾»þ_eÂ`YÆ—{ú¸„æõû¼¼ò~U/ÛuIÇz]ý9æuŸÎï¿î)~ öþeÛ¬lèûImãë¡ëyüû˜÷{òÝõÿjÑ*”=y¸,ëÄ <æßjˆÍ£Æè]ÆcSzzÇl®ªyµHÛø>ƒXéßê'ÛùÝÛI]ßG=Æ×óu¶ç¨×u}w®˜C“«{ßNžíËA8Oöôþ¹ËxŸÚe>—qõ\ðu÷ÍÁT?çú²ë½ÞG=Æ×óu¶ç¨×u}w~…¥õ~9öRåX8ÿߖp^Ï*Œ_Þ–{Ûý\=¶öõMýXìÎœ´þcÙÇ:OìúÑs¿^'xîí½í~ +×A}}[|‚¿âG¿öå£óëöðVýbôå~¹•qkÞG}}_zŒ_zd÷QñuÇ|í9êu]ß݃ï>ú×Í9û:Èy4×Ï]ÆûÔ.ó¹Œë¨ï@£Ïàk Q¯Ð—@cýzs.ãëŽù:ÛsÔ뺾»ûžŽmùî¾"÷JÜÔýûÈÒâÅ~ée¼¯ê2Ÿ;põƒö|ÍA¿OìÊA¾õ1üãØ)ßfŸEŸí= ^Æ{ð½Ìg ¾Žz†ôëîáÿûûU†…ã ËÓûº°õåáÓÿsìÿíÿ}Y ÈWÝQd¯0ìÕ¾½q¿¬îm‹ŽzŒ¯3¸ÌçlÏQÏe}w~(²\áûž¯ýüøqﯳ¼Œ÷]„sõ×òâܧ˿ïéå¶_ÛÿþzRÛø~ªÇ|½û¨×«òõüZQd{Ã÷m=Žûùýãá_'zÖç\+Œs«.oü¾—ç~m{\üëamãûÁóõì£^oË×ðëD‘{„ÙæHß}ÿa~}ÔÅ1ÞFÄÚü:�°Æ,ï€a¶/_M_>þ³ÝùœÏñŽñõÛ—ùœç9æuEß_ý¯ +xÝÔó^§p¾êëd/ã}a×ÀpnÂ5¬Äͺ>¿sS¯ïtow¾çë!mãûóõð÷1ï×仫ÿ5¯;z>Óë÷Ï}ée¼¯êθF”¸S×—wîèõ‰îíΧ|=¡m|?Íc¾žü>æýŽ|wõ?ý§‡7ÿùÿø'øýŸ~¯ÐæBp³>ì[ó7ý3Ÿ§PÖ`ÕÅmþñmñ0 ßùó9Èyz¿†Ðôu’싳ι#ƒDsÖÜÆÏïÉø€9-c{V“1¡Hû ?ÕÛVýøó?÷#üË-©Ðÿó8÷>}hŒ›²Ì{ÊØ÷üÉÏ;ec+Ï£ÎçÁjNÿ`êŸOÈFÔ éêP#cÏà3|œ< ³èæ½Ð7Pw‚}}ÌT¯û°ðûžåâ-?ç4üûÙ¦çîþ¤|v'èP·Ô§4¶õt¾&ßð}9×VÇ>ýº¯l#à\ÿ—'ðƒ zj<ì!ò=€¨�p’¹ëù’NÏKº{÷myÒ¿VrŠ‡ð|Öú-”xùut7T±jå³Ö<F4¦±OߘÇØÛzËŠYWÇddñç~?N5ùx?裟ʸlDË ›�ä´ñóiØøðfµ%þ±{Yaîº9,Äâ›ÜTþígÿ?øtZ¾:6(ˆçÓz‰ç“k÷Ó¨~›ëóo|D(¢\ú|r-F;Tß” }6îÁípa$Þ[Âoø!öÇk/+Šüâ 36E¹Œ3>éëK‡9†&m‹aŒ&öâV¢$'ÅKÒrõD!XëaNË·_l÷³[I_Œ¨Ç¤‘í$lDÇkz~öçb,DeX¼,ÿªûO¤sã0SïŒ9u?;Œ_6ÖÏní;4UtëmGó¶Ú +ʘ=@�ðÄr 磧ÛÆG°ð8~öÎÛó9É©C ö.^ÖŸÊÚFõláªI™ûŠÇÏš}c@þzØx¤¬©öyö‡0Ì,sÕ€�#Š!ý˜JØZö3B¬Äî6O0,bÿ\mlç ïà™ñÏÔùú Ì£€ŠÍÕo<C1aŒW{áÙð·µÐ"þ‡8ÀäYð�yo;Çþ±|à>ŸÚås€gD–Ì9ušÛº<”<›ŸG«XçÙøøy²ÿ±h†ý¹Ÿów°Ð«¡ø”T=Ò,òëg˜‡ÆÇ®Hò÷Æܸü/Pdº·Íè(`ãˆã7ó³gà[úÝŒ1=ÿ`óçò‘?óÍø&£]�¾lÕ¶¦†_i6·˜ƒYX+cîše~îÎÆ."1+Æv†ÆæO&o¦=vñP¬cs#HÎÖ\÷ØþÄØžPéëMWô˯Ÿöå‚ÿð3f¢ß?Îë¿Œ{ê¤Ì‡e^%0 Ú|ˆ'æ¹Ï}œ¿tÓyr ç˜\9£ü!Ìiø鳚^ÆgU¿Sm<%Œã‰yüé~³iÎ%¶5¶-ŽZõ-~áwéb<è—pˆ�ð©1�ÿ£Í³'æ³"â� cŽOƒ°æŸ=nÜh¡W¾¶þƒÍö8¸M]ÊÇØöàÆú[ÙGnšídΫíSÛÛæ=ŽÎcL9Æa ™þ1Œ‡>n)q5>ƒ‰¹üg/!® ]‰žqýÜÂüœÉês/dì+¦.lqV5?ø�„ÏØœ{l›·Ë™ç>�ª«lämÿÙûѳZ=öUèOüÁæô$/6èÚXŠ?èñäF hÔ•âÍ„9‡Äz«'P½Fþö³gpûñst®c á*p{w¶åq{l¿0TØ\b‘ÉV6ÚsÁöXóK~àˆ+fwã0v;‚DPþìœo€Î¦fÆEÚŒÌæ2c1ö£Íž÷ažûÅìO,þyˆŸ=®°4À®|)3O¿˜�ÖîuêÄâñÇ0?u\ćð±a|ú·Ÿ=n\aúêû+>«{µª%•ŒÛ±^üјàâÈø\/2¹n2'g#Á>Àþ¾òŸð‚~þÄΗ@X¢_ä˜@¾¼ßš@¾éÿåß¼íë¸ÿËçÿοçxˆZÓÛuùƒÍ¹i’„yrr!¶{_Ç‹±ô±â“žæ›þú6wô&Õ¶iä}C–mOžþ¥Ôc¼AÁΡ°{⑱¡-º~«ØIt3kÜe˜k+&€^6¦8�_[|ŽëÑjæó=}|¶ä[Ùr,çzb�ú¬ÇÃM£âÛ>¶÷A9¹Œ=Þž6[þù ôZ_´‡W½e>¿;§çþÎ ö@HcÒ2ŽîÁç…Ÿ6F�& ð§$ëŽzÙA%�$üCZ;Â8÷ΡíŒÏåG›ûŒså´èôîw6¯ö½±µ¼ëõCn+Ωôâ+¥Ó$ãçR|Q¹íÝ?÷'žHÌ)IT0 ‘ÝŸLº^*F-Îﯽ®î}_VÝ_Ý!ߪYö(¿ÂøYÛ¬kË8n~b’†Æ\B÷r._,ÅDmyJ¡ùz/_‚¦3fË´ÐzŒ¬Dºò�hòTã~'¯f*I˧žO2VÇ¿@ÏLkà³ÄÙSsëÞ6z£§04ƒ—ò™Z¾…Wž÷>nCùyoI½ŒÛÃ-0—-¶-ö‰€J‹f?rðË2ª–&`¨å8z%þ¡¶·ì½î䤛ˆWRw¶N5†ÐÕƧ?é2Æžg?šÏ…ùº@T¬>D¸u�Ö>{Áá´öëd:n¿^ûž5E¢yW»À·</‡"~070_F¼ãz=Ð#l?Í°µîO“¼³èw¶ÆvÐæôuíØ Ì>è‰g$áž¼áþ–Ö˜ç°uìo)nÁ/ôÙ×?ú<û×æÖ‹·=1y®%¼åê1•Ò÷N”.Ö¢u¯“ðÂÈ#f¶=õ¥ý%xôÉ~n÷6—2óa2’ÓêÏÎÇE í`ŠÁ÷3Í”ø@žˆ™ñ‚5%kZãÔŠW¤CGþ`æ:t\W{| r?FPSuÁy/ÓÛšáR×w¬�êW&I¹¤í—%>rµfÄcR¼Ê@Bµf�ɘ÷`1ghŸ…Ï>@8‰,®p"GÚ0f»0·í1®*êÉßä‰ÖNCìªOmdE°Ø‘#æ‘ŽLæÞ?ý0—ÆEt‡Üó ‚s6>17<Ã/tA§Ñý–!"ù£ÍgÕ:˜‡pL’ïX‰K5>”µØ–@ˆ/â3KäØ}éŠ0q»˜E>§•côÀî;µ4²cÓk˜øÌØ,ö,äb¸Ò›ŒnîßWlû<s;ˆš…Ðßc‡û&*Ct�Ä"«o"¹?ÚšZ÷{K§ +Æd\•Ã€2>ª5‹ÛוÄi³78ã�ÏA[Y3°£Ÿã{Â@kÎÖ÷hûÄ{„Äe¼1\®ÚâyqÐð¶;Yû3öqÃÉðbRÆVÚžEü<±„çÀ.9ûuîÁäÔ8±²§œÙ#žär”/YèŽ!:º›[wÉKÈK¥¹-‡ +cÚ¾½˜‹–dðŽ—O-¡í€Ã)Ò¸ªë^¯<MO"ÇÌÑ#f~s$fF—¯ zúþr9ˆ¶¸á¬¶áœ¾r„ûÔÃQ•Q¿@žµÆÒÀ´g-û@Co·ºÃ¿“±<ñÒÕÕ°ÿ^ÄdŽ~P{Ó‘Rì’HsÅØýˆµîlŠ[³ä~îT'…¶ñõ×sUÎo½†p ¥÷°Ìø¬{QŒÀ>@›ñfp%cMs6û�µŒÛ™‰Ô±oV‹eÔ‘=œ`|—°¡õëc¿!f1@[\ÁìûÆbÜ!ÞØm.ù‰5+ÖÔa~RÞ~’&Øìs×!y€gSÈçûˆÇ€F1ʼnÑ}ùò°ú[…oëË[˜ùã¬ÂgýÉ ‡iñ<'»ëhñâ4‹=ý!sÍ{DÃô£ÍißĘ aÌ_c:蓧lŽ»C‚é| +ñóižpÇŒ2^äO#"h¨cL‡¶ºÃ;Y˜m^·8„“Wbkd Å(d53>ÃpzRR—D?¨pëÑ:Ç>Â^yr7Q?�õJ9æ½�ÏhWÇUÞÄæ-ƈ�Á³®Pššë @:q¤þï3ÅååìøùÓkßjþ½ßëgÿ8†¼±G7Å<°ív×Lq€Übxæ»xJŒ®9+Àð8uqOF cwxÖþ!ŸËs<DÏ96í{Ó¥9 +}ž˜§Ÿ±1t:=ïj‰ßzì°áY8jšÛÿé1—°cyÌÔkùd±*Š•j„ßþrxÀ¯²'™¾8ƒ¸,4þ‹µZßa“猹Y"§ß*~:ûžN—mm« ÎzQÕHÞ‘z(ⵌY‡ùŠKXW"®ëºÝe/,íìØØöBeÄzà ½ÆªßsôßÜŸÏEÆî{•Ñ/"€É&Â|ºGãÇÏÇ›[ë^c^ÖþÈoÏ}·žûï`Fëuë®J¬'žÛUšhÜ(#Úv«¤As°CFòhNkÏ;E’*tvÏv(V&kÖî=[ÆÓœAcÓ×c¡”^½vĶ¦HàâCÚ«ºYº·íµï¸…u7ø’b-Á˜é9ÀY6ølÝ]åø¦6îRÏíì¿"V\Dúíèº +†{Ÿ=ï=ØËFßo´6Iç¼òþ#ϱúµxþöÞµ¹[ÝŸo•þCWʽÎÜÝx5º“š–{¼ûÚN&»æL©(ªeqL‘:$åÄùãçã¾XXh>›²%‘ +óÙ‹�X�ÖÀJy µ©ÐO–í¢"²iáÎN4Q]/ôû’‚ùó°ºü»*¶ÿRg+#–¹P™Æ ËV&ö ÊS<5xÙ´º¼ÃZeÈ„‰l]N ˜TVT\–õA¨VðFnÓ‚/5€Ô=aÌXHR*Üàn"’—ñ.9j ýq„¤²v1puó€ÆRàB?ÅŠÜà_�WQ²ƒŸö^èêEF)i�éa7íT½¯È´‹¹ÆS&š@-e˜0%Âò„üÙ„ÍŽL•ò.uÌ~t–÷³(šÈÉæ%¼iH¨C ÛI�G–C{5KÒIJ;Tš€2ɣ˽`J*òm"ž Á$N ÷¦_!xŸ‰ ²…Àà·UD“@�Û<tÄá—P–8ÑÜs'¨‚bʽ”ˆ—êú’Æ”ü2¼Õó!P2﯂ï”dí ;ËÁå +¬Ža“å‰KOáŠu¤Ÿðà‚üâ¼ùÂùÀ!òîXÓJqý¨¿ÊƒN ÁÁ7¢ASï– ‚@UAt² )€ë˜kÑK?¼*°m¹Wpø’ÁoÞ„mfš$„�£Ñøã +2ÐGŒO0ïÁÑíÙ,᥄@ôA fK‹06œ +eIŽIHy¼™PD}ñ’4,xk˜ÀÞ 8*ðtðh-ÏôåféÈ?m¡œ(_Y£”,hÛCÙàRT '‚Ÿ_Zœ€œLt�¹ojU*‹Éäɼ.¨ŠÄ©�Ýh}†<) +Rò!Pj’q$yœÖ” +Ak .Š`!"<Y5ë/‰Â=LyÑဠË#rª˜b”ѹPø[I<P3å”× 3¨hå`'@^^¡ç€‚[ñ~€"�%ŸT4,è |²Ê`¸ô'-”d#2Þ¸Ä‘•–ì–jÙÝœ|RKAH†U+MÛª²:ú¤–Á©0÷š¦ž®èîÄ2O‰³26†ýͱ,_ä’€šy^™6 Yøáð+s'E 7Ü€ªH ‡ÜÔ@nØÕC +n@‘˼ÑÁa¿bñÙõUJò@©|d¸›ã$€"Rî}•h,ñqŽxÊ�Tf§}j7ÚÅPf¦¢~βgKâ~[%¦*t}ñÀœ{``¢ûm©ÉyAŽƒÿ.Y!€!øÖT^Ä@¿f,$6£…q ä¸ $¿¬RÄtJÉÙ²H„«“°1r²´DY¼É”笒ŽÛAiÍP:<ÁÞbBë©Âû°[ˆa.(¤¡À<!¡líJÁÕ.M¡S8��ƒR¶+aÁ&ÆUqDQ2í>–Ö÷ÅÓyKçÜ�/s£Áçºðy¯t*AYùf:+HN�°%Rɾ—©Í“¾j6š’ÁB³|é %”µ’ uÁ@6[(xàÁј‚Ç� ðˤJ°ÁÝïð¡3U2u¢pÊËJpKIn›¨º9D72«hߤ +ÃKb)ÈÏ«Rp8kþ‹Ê2%‚c•¿;*œ7’\Õ¤V´ISØJ1¿SH.ʔʔѫLß�Ä<H>l$•%.£„<¾e¤ß†+½M"ECq%‡yÃÒàŠh]s©CQr‡…ó¾ FÝF¤y-ËØ·™iç@ŽhýS:`Â÷ˆHé‡÷[Q»ìµ/’“)pœV$¦3¼ ç8Ä1U9Q´*Æ“¡†/,‚JrxWT± É$4À>ÌŽÏŽý†ÔHyBgYE"¤!X9i+¸~Ô1`ÖtXà_¡_ªZ<µa¹HZ˜x&ÄåB'úR<„’LªŒa:§H¦’ƒdHËœêÊ-‰¢Q†V·Q$Î(®¨‹Ê’Ç¥*¼_‰Ë&™¨À2&9"CÓ@Ìü‚0°i5õßı–Á+¡Ñhå}€“`2î¦÷À’÷Œ†¬zäK¯¾ÙOË’€EÅAkÑ‘T{«ŠƒLê;fX;œ{sŽ/K®KàBDÔt¹·‡úh·D0Ò +j–Ìæ +¬#8ÆLPX”ñþ½7ü¸2‰‚e8ÊÈ‚>…Ȥ ¡*Ö°£Tî/œZr¤/4I5@éZt„S°5!Šæ¶ðê%0–Kö‚Q,÷®á°²Š‡›,ÿh.b–Pƒ·œ…3”C%˜ók‘TÝÐy+§·h +zYÅq+Êhj@ûtžÈ ÈPÇH)…,Ë{¨U‘S’¦xÚ’"rï§X·’BEÔ@ÉaZ’9·"§¢hÒ +ÜkA[õLÌÔFuÀId½Áˆ_f–+Šs§ !ÀX¢h†DÞÀù.]0°ûÁN]ðqÂÀ×ǘ<²ûK‚ëˆÕc™—-4¡ÉV9#‘ìzA¾¡Hô< RW0B¦A{hÐ$ÜJIÑ\ÏÈ‘ l¯qCZ$k6Ld)Û_ÅG±ØR[*[a5ÚRèXóE©´G ’ˆ÷+á|¦Š ½`%%·šô€Ã�1¨é$€UNô]k©]¦kÀ……’Lt™´«Xv”§,%Å)áãŽé`É!ˆÈpÄOÄXFhUr·|È!ôŠI{¢½‘ì‚3CV•4¹Ä¨.ŠÊ`AòQB¢bYlÕ¾KnU”<¹Qñš5,[Å8ϨhÁw!(ŒêKmÓ]êáÀ0AkE@^öŠØrPUš÷£Œú +CªBH¨?b ´0±[Aȃ ºYZÚ¤’€RÑ’“Q‡¥aFù0% ÀÅSx4‘[ÞLÊPPɨ"ö3逸æËÄz±õÄ–šæðRìÈ,Þëásï‰Hú,òKʽ†‚Ôl1~^ZÅzºHâiùl.Ç·o×Â-ƒ}`É¥“û€Š˜NÁf1ÐVÌ° «!c˜»ÛI6�mEZ'õ–Ü@ݪ‚[Z¯Ç Çœ n‘e/gÛ¢/[D"Š%™ch5©EeEHÌbó%‘Q&H<ˆ Ú@e´U²X ªYË”œt®FÒ©H{¨LË<D‡—¥wN‰›…Ú-KŠ¬+ØÆ—ÛúcÙTžG<D•u¤ÐÊÒyÞ!ø‰fáË”ö£ +;Ðy·JZ8ÐïóD’S�‚JIVƒ¼àC2¦ - ,²®ƒlÏ›®s°å#–,/(Úkó—MJºK8þ6ëóÏgèÙ6 Ý“4à1Ť›N…x(Îà`EyYwv,âd‡®‹Òü†ªÁž¨76ªtD~0T%Rh–e3<Ò(zg{µv]{ûV×y+½D3ÕÞÁŒž×¨R:ƶ®`"N=XïÿmÝQŠjY:Š•U×ÃP—¬‡€éÏ4ŠÞ™n¢°òñ:Ùe¿êj”Ý3µ½[««½ÿy;[È*a߈"KÍôõŽDýŠ–´——ªJxÝ a:Á™²Îô«rÕamõ4‚=í¹M7%&™"s[=ÑÔžf]ßþNí*k¯ç¼mKkŸcn‚Ž8y´/½AÑróÔK7/…E$0Ѳvæ%¥²÷mͼ¤ -ƒp7/ADçeÙ™—P×ÍÍKà•|š›—ÍÂ'Fó¹%xž›—¤å70_7ó1îK!.*Å™u ÜU¶÷ЬKd}¢tì¬Kä›"<6ë6é´¥Y—Úݺ–¹,µ¿uˆ" -m57óRˆ2÷·q ¤R…C»q©In^ -«©n;óïš„O7ó’,¢-ŠfÖ%,*Ù=vÆ%Yz댞3Û’,™·ÑMKò1-4 -vÓøAÂ)fY’*RÊ›–„oË@•]IÄlfÆs³ÒF ¹4«’옳£M‰¼o+¡Ù”Ðu"ݤ$Ͼ`gR -òT.)7)™®+€È®} ·å¬MJÊké%lŸsÍK³(…u%ìTkÝ¢$Ï•MY^ÙMJëlïb¼MXv&¥Ftk¦C]E6sQˆL=¸Ž&%ìVÂ_`´„¹Í+qÂhäéD3µjÜXÔž5š”Úõ«¼^ÏyÃF^-òв3)u¢™‚ÀÓ¶6[‘Èœ›Úv%pT„ûWÍúÐ^O'š%¨×c¶¢þ´Á¢Ô^©]äïܪ9kÙ_ºAéÓµ{Yà±’™qîõH•¥L]s#ÈÆ P©‚N°¡u5Ë1TŠ%R3OÛït´HŠ¸mMfžäV,Wȶá³ÿø³ -#if|Q1¸…È[ÇÐj‡€^úE°¬ák5¿‚¶Mëoöw±æŒ—”ÍL8ÎFÂŒ±1m\mƒKØ/k}ÌD}Ù›gÆ2«}›€Aj‡êTaŠ"Ã/jÅ¥ç Fs€/æ5tŠöœ)×Eõu9ÅŸéfk£sɵº ;qôÚ3¢wú»µëz«¼®‹vþ(¢N3òCÎÍy[ö¾4¨(äÜÍ™†ëD›/Ý›Ùt]³ûÅÌ&;µˆ€¸Óýi¢ÝË>L›l+"߯{e¼Ä':³ÎÝæSƒæ b‘¯sªAÅ͓Ƚjàn|·æVÞÔ-\îWÃÖ0¥›gMäü´v׬�2Ù}ÍsmLÄÁÒk²äá\ƒ~ ,(‹ ÷me¶6¸‡*“<jt±%uíì|l”<×%6'\[‹<¹yÙEeïe£r 5¤yÙ zÊn7Û‚1) ûÙdÓ¹£-`•Ñj®6šÖà:óµ¡áêSqgÔó-b~»» 8/ÎþÜßFõfCÝáçñrë7a¢"ù؆Ô\n‘.’ºÏw¢½ÍéËj›=îtCuµÄܽn°SRIi~7ÙÚDP3Os¼ÅPvÈæy‹àŒN5çkaÖ¹¹ó½Á$D1ÓoP.éïÃåÂ|Äý†ï¹¬^ï©U6æ¸ulLs‹5ÊÎ 7\g¶¡®F±gîq`u¥ó×ê‚"Ko{f£ì|qÃuíý[]çí¼pÇEéªU:ms¯9¿b¶„î"sÂÎ!ׯ²ýg¨¨Qì;—Fx…Ü«‚Zâð@#ì|rýªöæ¢óþÿVˆ -)¨¹2$m:c7¤^‡¯E;ÄÎ:ÃHõ[úš,íͤ÷#ÅMu°eÄëP†¾Àæ"œBç¢<J ~NQ)©G¯_—Åxp”uC4žV°^¿S´»S6$>SîœÌ60’b?ºhæ™” OÁF¶Î};¨A7Ô‹4¬°[ s‡fJ§¨f"‹'Íy¸N8O…š×«ê”¹3šN•&èöÝêZ„Ä°ÏtÊsI¾Z¿Ìß¾UuÑÊÇe›/áç…ÿ†s`çè…WÇ×=½0ãÏðà4WoA¶‚½¯—–bÞén\0 e’ÖaN5êâsÊݽquÎèîÞFÙ¹{ûuîÇ\i¤¤Ò'U§b(×ÑÁ‹]l^mŒö=ôˆÏ7BFNÿ×{*|�1w¯oÛ1ÝÛ;Ïo¿Ì½º½ªN±GÜX©À·º Ó²ætÂÎ<\ÖÞ¾UuÞÊÁ~%|¡îµÄFu-±Y]KÄ´ QeÔÁ=DÔMK„Bª0A×aq ½pԛϵÄfŽsfè’cÙi‰ÐýæA•„‰l‘ÉìJ¢uD§5fêÿ^ÓýèñK[Þ눰b•ïÖ®k=ç:âe_žÛ‘²Z,v:b§º^G³fUÓýðGNkÙ눴ú¤%×…ª6¿^W£ŒúÚ@5½®×åº_æ¨#öwë×µVµºÎÛyÝ¡ü9¦ðe5X -Ïpú¾ÞS‹)=ËâN¬VÕ™¥QÜNçpvt¸æz]bÏtæaÔͬ.Ùˆ„‹åá™Nqcº¹*Ûuíý[]çíüQ¼Ëë”îYÙ(ÞSjµa+„Eb¢%»ÐÌŸ* \¼þÝØ×!“ƒ¾(ÔcP¶©"‡t°hI‘`…-Fm,msrˆp>b3V[aXpP¹0 ™j—Ccl¶&àT¶¨il¢®ŸSÑ;Ë–zWièE¿JgÙœ†ŠŸÐ*Ù÷U«’G4tø¨ÝB”臦݉ -'›F ó[´3å?n~ -À1ævHaÁŒ�¶ -{µ(Ýl�vžJ—cÆ"ªŠûÌTØ2«~¬Z³Tkl€ÂWžLÏ-à°§‰Ô™htHÉ5ß•¶ÿ…¯Uu$ÅP(Tò|œiv1+~w,e1xs§ºÙ�³††^é“`=µSuÅEçHR<ÎplŠ¡®c]bÏÔ;5üµ×u«žûæ9¼[»®½«ë¼?ŠWÌ¥K -¯:•á%<Η †‰„õfŽæâÀ„ªvVØRÅÑ«L8û}Pé¥Ic6µˆ‚jnpíjˆëÆÑ•ƒ.Â÷‚‰Ú¯+›C7}g¥B¶Q,gTpB확*¯6Š,›&vjI.cÒw¿3rËDN{Å!ÖQD.C±O_6ûËÊúÈ:[3⼡ì¨j/Ä{a ÎëÚí ܇/ñ]›¹Ù �r¡ƒ2{€°äÏäüž—ªö ¹Kù®ŠøÑÖ/ØhŠ+M„4húÊFŠhæ° ÍѺ#¯n]Y]Œ]/¥Íj@�/MìÁµF°S ìê<_v14 uHZãÚÌŽ6E/çúkÁ” ¡éìõž*[K]Ôä‘—ªcµÀæˆÍA»Þ)º¤£xg¿®¨/u¨«QÒ`®ëÔG]…ÃP¬BÀÈ÷gEïlïÖ®kïßê:ogs¸É´¥wó[Õë=uS3&À*t‹Á~°Ò“‘†$ÞÅ(ŠtŠÝ®“õ×]]bÏô;ZÌÂÕê‚¿¦ÎþL§èþnýºöþ®óv¶ÙVl¹¢ü–øzGÅÖ\h®ŸÝ^‚‘ä^X‰€h_ñ3Ýÿý²ÉæÒPU£ø#õÎF…øCŸ¡×(E ý‰öY…¿—_Ôäõ\4Ñ{k%ê¨îd׺@úU¨ž“êh d ³h¬©tŠò˜4`"w*A]|-¯k Ø3õÎF&Øõºà€ë¡?Ó(ÏímíÝÚuíý®Ëv¶HpïFÅ3‰âbþ³F…} B88ጙ'Ë¢À¿iÞB§<7±„.þá:À àlU5Š?ÒE£šÕ¢×%¬hÊþH#¨‹À^Ì/ê òz.šø#èó ÃŒ‚¯¨[Uf.QGucÊ+Eë†I"U·¿;°‚¾zÙ ö -;[ƒvGÖ†6€ -AÒ„läØnt”:4Ü+Óê>wӲ䥣»)ä�vÒàÝà§i;ƒw£e,5|7ìbö óÎ9߇?¨í ÞÐa’ª.©æN liC^7Êsïvðûá:Ãpu9ÅŸéjQ«öb«JžDh¤S\ÔWë×µFyUç¼®ž ¼7½^ÑÑžª(®Æœ’ɳuv£¨¹Â ÚÃu†æîU5‚=QolTÙÅ3aµªbvàþÈ2˜‹û«µëÚÛ·ºÎ[Ù¸L·pöAmNaØ‹Fj"EÈ*jéæCœgÿ¶±Âf[–œ‡ëÒl@ÍVS£ø))&6 ¼z]˜PË6>Ó)*Ö雵«Ú»·š.Úø£˜&¬kˆPêúNYŒ&CǾc¡¬‰^.¿CÇé!Ž~§', Áß!çl%ÆŽoo�ß/sl;„m³;e£¾cTòRÈà O¡QÕCÁƒ…6ÙºÁàá,WÂáíè}J’a`ð;U¤™9Ò§a0xà{è¦o0øFQñÇ`ðý:‡·ÇbHƒNq³ƒNF 7; ->Ò͈€£àÌÉíe7„ÚÉ÷B*yí(xè]ùp<Üì„O4<uŽSÇÁ£ö¦|4<P´·8#@¾ÚpðØH8Ç$ÂCÏu�Âc£â;\NÙ3;°£Ä1ˆÁ¯÷TQÁptqCœ³ÍÛ€…w‚Oâ×ûUq*j{ Þب®Øµª�œŠ#ú¾QôN±~]{ùV×y#›¤ïqÀ¼–àŽ_oÔqÇ짳d ¬CÈG§ÂpÇ_¯‚6a?í™FÑ; ¾>\g÷¡®FÙ=³QÛ»µºÚûŸ·³õ€ÃÅ1wÊâÖëNF ŒÏE€½™ ¯v|z£8k"Œ½_çH÷^W§Ø3ŸO"žº )½®ÙZÖŸi]ííÝÚuíý½®‹v>.ñ~ \ü,æÀø†kÈø†kÐøV¬aãV¬ãV¬ùÃvX±oX±†oX±ßaÅB¾aÅD¾aÅ#¿ƒŠ5|ƒŠ5˜|ƒŠ5ÿÚ*Ö`ð *Öò *Ö¯¡bÍ=ךÐàò +ÖðòR¬æR¬#æ+Ö ó#V¬AæVÌ!ó *Ö0ó#R¬æ(æ¨ù†sÜü'æÀùsä|C‰9v~sð|È9z¾AÄ>¿ˆ5ü|ˆ9€¾áÂ~ć5}Ç5}wc;ˆ~‡s}ƒ‡5}ƒ‡5ýÖ€ô Öô v¹Ï} 9ßáêaºx½á¾Æ}‡kPø~£å{]2`µªaºZ] ÷Õž¹Ã‡µw®kïïu]´sdþô$íðaÕ`]ewàWû𰆊ïWn~¨§Q´Ö@5TW¯Ê€_ý<¬½U»¨½w«ç¼}×ÔËîI„¹MX„Ù{–„¢RÖJ†R½aÖ—¸¢ê¿sù~p©´„±®F±g6ÃReE•uÙ–?<s†wóëúû{]ílëásì³”MÔêҢƙ‚ÿzO e[Lbƒ5'v¹Û7ŠaL™j׺ôªÅùÜvFM¬:Ôµbo_ÇgEïôWk—µ·oU·²÷å§ë—ðÎEu‘MíTض˜¼HsìÐ�˜Sð_gS%¢š—'êh×1¤nÍC]bÏTŽîÔmVèo¯K(e£iÏtŠ>Óß_çïßë:ogcHK5IÊë=½kè³m]-uÌAÏAÚ:EÛ<Lãu²ÓÐ`Úëj{¦ïiZ3!|^,hux¢~Ö»ü½üš¡=VËy¿È"ç‹P$0õ¡%½ÞSŠ‚º »)=§K°Ä á`°T:¥¥ãx¼@t@†ÖÕ(öL7û4ª&ÉjU-Œž¨_ööb~ÕÐ"缉½#?C€?ãfª¾1 -ÓB_ï©€œ%oÖXtÖo>•s -àNQemVF»¬:þµUÕ)öHwþUôª@9Ç«‚™ÕD�{¢Qž›ŠkoÖ®koߪ:oå2)a!ŸXDde4Ç’Ý¥àã©[ -(Uu&rZû¬mY¯ÈóÚ5Y]8½'Ø£\9W¢,ä…Np¯¦h¸DV"µÛªðW¶z.Ö]©Quà -îGlDé9«ó3Ey 6©C•j¬”±nªÀ¶«�G¨ªh=`OÓÛœˆÉ–ÔêÁúÙ¶áiFp׫¾S»ÊßÚë9oÛ±ü¸ÍBdºA¯Ñë=ò]¶P™G•9ª4¡™Ñœâ|,§”ÆëÐúmëj{¦ó1£…tuU+ú3kO¬1¼[»®½«ë¼_Bœ8ë˸ªšò6Œ£¯wT[à†‚¶ÄYÍf”¯£›WŒ '\hË6\5«·l¨È)þ@½±Q#[rèUÑŽ“êðD§èþbýºÖ¤V×y#Œ3[˜à‘NŒj€³–hÁÏJN *\ºA–þñ2¬1fõhU5Š=Ñ•?£Â5BŒc«ÉKCi½±½Y»Ì_¾ÕtÖÄ/?!iƒ™-žZˆcƦUå-©Cí¼å–r§h«˜?w¯›i¾ªr‚=Ñï›}BÎDzEB zèï}±~]{ùV×y#¿ÌÖ -dOÒÐW†%¾Þ«'%Èf>d¬Ï¢ö\$ëï.ÏÄ×®)I…†ºÅév¥JŸ1—Z¯+ÎøÓŸé”çö²úný:{ý^ÕY#½ë¾XX×ãáZ_Êghd2‹oC3øµ`Õ9˜Y:à|ËPÖ -V7B™+b/êÚ‘Ì…®ÔÌ£‘ö0f™û"ÄŽbFúÆ -ƒƒ˜3r0Õ<`˜¶•1<a†¡t.µ#˜á„(%íÌ0;ÏŽlb>^BS‡/¯ ïÁËò°™#íØe†GÆܱˀ꾻\àZ:t¹l²n‰e6ä2Edà2L¸[YrG.BéP5'"‘2yÛöØe e"lÑ]†,¶¤\¾í½Å±Âè64–;Ñ,ØÈ»ÈQt02BºS {Ìr oXäÝ*V¯§ðp'Ƹ×c0äþ´Üßɯjomõ\´íqÿÊg¡9⥂”!Î7pr]w°äÂX‘ÔPÉŸ‘§a’™G&îÉð˳G@2Dç2ÆÌF#YÖï»w#&¤ˆðÅ::à §‘2wàñ¼GÏjpÅŽeHãýãgºcŒ£½†#‡‘4)ç=¾xa–ºNCÂôhØR‚‹«d„ºŸWíÓ)d€Y;79æ_Y—Ž'®ö&Ž&Æ<šS؃‰Kµ…mXbôˈ$f¾Ù¼ÇYC(FcpÎD\‹ßðzíp]9„˜3ÎÑûé·_Û`9‹9¿n¸ êËCÀ9Ìø3Œ¹¹ÔX€ƒ¡WÓ x· ãÛë1p{Ø�îodÄþÎVÍEË¼á° ëº -w¢c{i™Ð¿�â—3Œ°›%l#DXvÑ<ÖÒ;€°Óëõ4د=l¶rZc«å¢]ÞàĈߤûz$:–k‹lÃá¾ Y{KÞ£‚aõ -u¸;Ý”^F„n'׫1¤o{Ô�nïã×´VxçÍòö"S˜·=¸ ½‹~#ìweìá€øå¬?õE¿ -®Ij•^O#€ÜN4Ün¯Ç ½ýi¸¿“_ÕÞÚë9o›7fž•ù>ôo#:bWÇ–˜ÇÆ@½0=z®ì¯0³%–÷&Ooõ8aâv¢áu[=†èmP¿íüšÖ¯ä¼aלapzGžpÁNuâJÃâ¡Á�Êî‹óºöxAøC‰X‘^yp‡0B÷Ñ~¶§HÁþRNí/î5]6ð‹kŸœ,â‘7X¿øÕ›÷WÁ¯gÿôꅾȯß>ÿú¿¿ø“ֽ·_üöųkG“ܽ|ýõo^¼{þâÍûáúÇžñ›w/þõå‹ûú·oÿí;k^‚7ItÛÇÀ3Oþë‹—øãûG;Ä/}ûí×Ò‘ïÞ¾ùÁkýâŸß?ùb4Rzåå‹ï>¢§·¯¼Þ•?ÜÆxùÍû?^Ë{=#çþÍ7vßÕ3sþÛË}ñóIQ¿Ê:?3c¾¡dlUQÓ±†4]=/GÒwlŽ=Ê+n¥ÝãxîM£¶×úu¿ÿmw÷ŸãÔš’eG˜qìp\pÊ4‹â¬gG?“xÙ%SY5W/R.žDˆ—ÈÞT– $À…®ê8,üsU‚câ³A‹•–ÔÙê®ÈQ¥ö(m^•æ4©=R¹€$.t/&dq*ÈÂ�¥^¶åó9áÅmUH(ˆ›@H–ŒC;žˆj·øˆLcëªè¥ÂP’i{€L&!ÅÖ2Móž`¹‘B€ÇM¹wÒ|§€ì©l˜ìÇÛ‰TÚØzÀ0¡=mLš”ÀŒoP¾@ŽÔ%½1-›RVŽÇ,GÖLƒ[¿sÜ“¢tuPÞqÝjYšQµ/ÙFùÁu€3ŸV ¦±¹&²æð¢ò'¹ ˆ‡ "€¬NY„ò²0'‘VWEUg ~aY(Éü9ÛéuÍÁ¬«La0Ãñ¦aØz–ðÁÓnf@×Î3º‚©õà^©‹Q¥ÀËÒî\h 8Tl1ã33#µÇ3™Jtc$¥ì:q´Ñf�: Ee¹™]xþ‚ãy‚ÉòÈ…Æ ’UåBw,‘Š\¶üg³ÙÂ8w€`,IÇ7Õªåê‚!a.RXiJv”[‰ðÍ-?U"¤ &fÝTÚ)\–Õ–)Ù_P9»oå5š¥µ¯«‚[O -e½† ˜0âÕŽšŒp†;îìjíKº\{òÑJ7&ŠW„^š‘§dƒc]ÁcD "ÊÉй)N`Ø"ÒnÖ�ŽkT§$“ŸWh°™<¨ucZ§{3T<~^ÜE 0pŒ2V] òÐmL›ªi -5q'¾°±c¶„°GyˆWevVI¥R öž$i«`à‹ Ê*–Á"Ã<ÂjŠt(9ôp&â@D’=ù\à=G5‚°$ÍêëœBƒcVræ4'ƒè#1[eVá@—p5K8€¶,‚�õwf¼ZÕk`•¨@[Òõ:$s±i™u‘@#6Ì+Àè³e%„ìÝ1#¤^¾1Ùm¢,ÃmU3txÅÏóe«¦E8` 1²y•‰ó^Y @Ë~ÙTÙÓ–}ZAÄJ4T't8+⬈Îëàø³çg‘Ö�ýpÙl{—„gªÉ‡õ€0ÜÅì•^Rµ�Q Á5©ZÔ_Åq[Øm¼að2Göa·†ºñ¤‰E×鄇Ã%;©àÜ< -p†âÃVWxV³¤„¡¶1.£ÌÅ%k_ÓŽõx8ÑÑ‹A§7ppfcëkDÚVsÖ|’¸#ðipéØø놖ò;S™ƒ‘Ú,¹"ª¨&XªVÒÈ@0ÂH\±õn귕ힻ҇³Î«Â £Õvåb³&Ü0é츶<tË\dznCÈ]Z÷ÿ £U‡Èò¼1|cXÏå>sÌBH] ‚õ4p0~žu¤eõ)Šy-„ŠC²[UÈ…^?]e½1S©¾ò&:š ºÝ¢í’ÕùÁLÁ…Ö½ á’Æ�®2åsÎ-¼l[p´Â(<«Gƒ¹¢ -ØCÖ$-;époê£�ÄS€¥ÛX46/iÊ=n� d£×Àin‘ù c“%4$Xx%¸6 €Å#i…%À•=T*>MrØ«z)f.…åºÉ‡™Ú¸ž›0Ÿ°ÀÚUH¹Ï$›+xnÕ0º&ix°-‹kÑZ›.n‚»‹Æû n‹PšÓŸ-“2©™Ø1WÆ>µÏÁ{‹š§\ZÑHQÈEE¯ÒØTžÑ¢rO\Û"<wuÐaÖPú «êN鼊Ãgœ Ö&©BÒZ ]F5÷áœYdþÁU£Òžûgf}ÅD4,mk4kR¡‚@›Ä$Œîš=5=ÜpBsݘ‘‹ç.àœšMÌ/-ºj»ªú•1ËiÎZו˜Þ8KTç)Öq-]r۸ͪG1ÈJsi†Ø[¹YÒ[á7ñµóæíˆ<ôŸ×¬¸†9µ@˜›ì]tJ!/ù -ÆIĤé¯IùŠXÕ:}2‰= ÏV*AŠ_!=A‹$[²¿Èj În›5RŠA20%.BÃâ¬Y}uõµƒ>w{¢@,´=U ÝaÅ´OpRb·ÄœM¡Ý6œŠ‡v3�+W¼ºÆ…ˆ«eÖ¶)ÖÛYuˆeÑDËp¨Ö¬ç¿±‹°ø¶ä|ÌÀúÜ#@Å^QôMËV·âôA#ðY²7„œ¶«_Šý‰Ü‚¶>øf±§ð#•¡áâ�;Àv¾¬¶í1'TäiÉ%|Ê &$[C<×â"ƒ{8´2—vSâ-‹,°±_‚&¹c¼)Õƒ ‚Ê\+s'¯4 R§ ƒ ‹;êÉ7àÅPÂØ‹";³¸â”¡Y«.@r/ÔvÕæ'“O7ôÆcå³@ãRDN,ªg¢yÝoß bœžÓjWDˆÐÜlÆç꽈üàg˜¹Ð(1®Ì -sšòK' (ØwÔF¬¦þ1.�›åLùA[*égÀ&*µkLE¡Ï\dNàÑ'þeDØ# h¶R©zZÇò6@¬J?¶dCj!ª×PTÂ’qP-Ä`K!6ƒÁ ?0îQ—wM$gÕêôˆÙb>˜¹Ú±8WÚ]„ ª5©ºFÜ#V# nò]cVÈÑ�aNÙ9ÂG $êE* 30¥d²YÁºfd½¾™mV!ïk4‰Ë‰\ˆ–ÖäX^²[¢+r$AgKH‰Û6ÞÏ›&.1R1݈ßBúñ º7î‚ág}µp[ZêVqèJÐ&‘³/+¾K›å.Çc¨ IŠÅå² R!Ž£ š´”›-OJÆ…ç›m±$wDGš¢Ô#¾�Ú!2˶³QcˆGÎk8�B/èUÜqi¾Só'PŠJš÷KŒªçq’3Ÿx 3S<{&ðó–1ý;‚æŠf½)Ywö¹q'"l]ñŸ5aº Ã1)ªßà¸úÆð9‰Š˜-˪æm,Æ)AФT«òÛ(íkîËËPÿb.ö>&w*œ<€’L²;Y�#¨„[ÓEòŒà?„=BõóSã=öiU¤ê:°nŠçevx'¸jCËe¿jSSl)ê±5b¼VëkD˜DWM%(;_RgÚ™Ý\ÊHܤIà’N9ÍÙî]!Ó -„pråIxZåéòE9�SVU–fσ bPÌ2k>uD2;ÿjç ÄÚm| æ5(ëÏè/PVaGp,Ä!!&3 €2û‘†ü“yÙßÉŒ÷ú„ªwF=É a¶@øéEW•%Àh1ì~{0ÇD·‚å``+Sµ8]$¬ÜôÄ:- Iã…[,šÊºjM|"˜ -Ýælc8CÊôÜŠ„7O&˜8©+LàÊŠ–4é¹(ÛR‹ïžý‰Š7ÍÊßqYâÌà»BBˆi²Ó›h_Ñ;ƒJM*.¬Œ K·%;N<Q`…¬¨°Ï¸¶üŸÉÌ¢X˜ŒÀ3o7Ò£›‘U•ÆZäÓuó'âìôh -°ý…±¬›Fº€Bá pµ<3ùzî!/jNuÉCS*Z±n -;'¤jé~'¥>P× ùEQLb¡ªQ|œ™‰G0x²=`4k&ñ¸FKµCƒ7çXÖ¼@8€Ÿ±ÿÚV6 aÍ‚§4`‚ÓšX!4¤ÕòÜÌbj¬ Ùp?ÐŒ(òL>6æ»Â„Wc¿oѤ½4{ñ"×Àd£å}¤ ºêJpû‘/ƒðÐ<MrSfAâó¸ó`)djæ*¶xÌ –‰1ŠË•1ÂÁV<*Ýb'cfØ)bƒB’tcÖÇP2´kfh~O¹(¸^)çn&GqK/«Q8…!¥o¾{ÁOB.\Ð}¢Þ î‚`$•ÁÍtîÓ1Îv¢õkU?Dšg½SóAÏ&áÀ F{«ô�nÍÊVqîæFsì‚Ì‹µ1jbØøæky¶ä3š!SF-´�tfÙ& 6ÏmÚÀ)€šV• -Š+a3ƒeL=“c“WkR@3áË<«yó1Ï9Ô@R2{"ÉœÅÁÂ(ýˆŒ_«F‘ÛéQÔ¾H@FDèË<C"qØÕ˜´ KÞâïó¢©\¶¹%„¾˜êª‡FÇ:kãà¬ØÌ9ÇÀ¬™ ` 3°`©æ¼2ÜG°qÖÈ4 Ö#˜…%©¢K~U% @æõBDjÑÏpÆ1¦®ÆûÁTÈ:K1¡2žfèðºh(>MH³ÐÌÒçš:´#8B5S ƒaf¦`'èN‡Ìr¨Ã|Yì”kîg0p¦Õ¶%,`>Ë}¡€€8ódœ¢¶�¢›ù±ÀÓïcê7QÀ(<e@ýo2AhÏâùÌBä{.L=Xõ´"cò-šIgcxÈ°á“H¼~ŠNÕcN‚\y ó‰ D€¨ -òvn0y:«m;$«A¸%' B¤·:„üaø6rµÄÂ,]›šÚhÎO”g˜hKzŠ=UÍßHò:33sä&¾U“‚ÞètZÝLbEbfW8GVËP¼mê-"€ÎÐâú,ip÷ÃʽU3]õÌ8µ”œí˜_a„Þ²`eH–iძTؘΌçAsŒ›9¢Ì‘.2¬\Üdw—² ó-AÅ�zÜŸÝj;J'2×¼’Â+/#Œ¾WX I`˜H ” ¶ûìôÎY´¬‰É3ÁËØ5x"££AiO„õB³™@?ÃÊ^\` ¾<jnm¦ÊÚªZ!U¢[uŠ£‘Ô`ô©MÓšBÊ €!Õ™2<Úz8Âd±z`2DðžƒD³æª )e…÷óñV=÷ç°V=;KÓ~ó:£M7öÑnÔsP `z¢ «¤@¶K±¾ üàÚ‹+¼–":|€DÄ€ÀƒÕD6œ{ïEF�§óì âoÊÙñŽ<`ÎnâvBÊ©ÝEh/ˆÁ¶fQ5´r~¦›*wU…©àC‡‘fMêÔp‡Ee+:àäêÄcŒM¡ý•¦Ÿ`‡¸_†=Ádu[â�òŸ˜×T¯BöôE†”«ÁGîGúõÙ— ¢[×YÁ®pa*®³Úiáq›Ÿf_¢nõ§A¯D5ŸÙEt«ÁÕ„JL�™Ø }�˜I‹/³Ïªšf'DÅb¯°Ï*ã؉w~ óÜ�¦,¢Å Pë¼' Þ -p‚b -œõÔa ˜hÇîAØ‘V$€ëabrŽn[·ÖëJÃŽ^4pŠ@R€}¢"ëi\¶æá«´ÕåLh -·Ce@@㜟y¸-SßÌæƒz—͈È]äoØô¶nh®‹záA¤› ¹Ï¯.²a=sUÐ�P$äÅM! Ô:…§B˜VöRü8•Bù÷ Gdf^D›ñ p\ì<DJKà·™Û5šÿ°lêXã†ô‰Ám³w~Qabœ‚`Ë`’UÔCKyfí¦Ð—“ÍÓ!ú¬YƒRTD ›¬g;Àt±x¿ìQ‡€D0ï@Ñœ5IÓqë7Ñ/ËwÈ^D÷;“xéGaÔ¬´ûì²&IɬKðIé³ÀóS´O9ÊÐSÝûèÒCÑ=”- ýG‹>MÞ·mô÷ø+R°g3eu.Ï´rK+\È‚$1ÁÛYÜ ‚M }"£@€(ª¡0ËXÏJåPŸfnL¸øÖM³vÑë3÷å?�fV+Çz£+ý†ÓßÓBN`nÒFÐu>É$ŽvÕVTC«µjMªL²Ë”äAºa:UÏ?#NùÕ*xà¦>n±î„Þ’furµ£;iæG&3ºª6;h=Qîw~s3[5¼§šoàÜ4$7œ-¥Ù¡´Í€‚Ô*çp)Aw„¢R*�\÷LlfYTÄ7´<.ôèð¤ìÝ4‚Ö>WN¨f˜Ÿõ$´Ä.ê£Ä]sKRŠ8›VE…™ÙxÙ=?'&‡“Ù[{jSî0¢¨QÁòŽ1¯G)*Zq¦âùÖÖ²Š›Ê–S•:4‡Ê3^4cm~â3©àê¤ ©Z*š¾D(TC¡î(lz‚/g ¯"'„}„€¥hpC¸¬çäOCÜÚÊø2çhN'‘Ùh?¼hNÓ£©µeLCÕD 8*}ÖxÒGš#œ<S -9,]6ã}Ž„¢!ypñÍv$8‰ô:fÃ(ÑŽxUç¥}®¶®å¡d^,ó1«NÒ¬ =…X覾Uûá]˜³ÊtLDcQBOväÖ2Jq¨ÌBZPƒI—f%˜ÑÒ.£ýpQ+ Rÿɪá³!d%7P» `0ÔM0VÐìu4ÍB¼†— n˜§[»Læ„œ¢M=ÅFd€™@¾=×YáHÄ~ÁÏ0¼óø±byxdò¦ÊïÊ@õD³ÊDf{Ù®›!H�¯€rÎ.†n†{ºˆzƒ¡‘™(Š¦Û¢%ë.8>�ö0ÚiµdÀE¯B6óZ -&L¢ÀoÑõ’L(‡¾•Õa£aÖlNÄ®,ÝÜÃì$\“‹f÷ªzb§.|^>9Ñs¿ð™Ù`‘ÁŒªè¾e±§ƒ\ã¢EGǨù —y~/š½#.¾oÚN¶Sph%Ø6^HšTE6IÔ ŒL|éM™ÜÊ]«†v*`@™y0n ùé, -JÝØ"™ú‘È €3g˜ìÈYCè3S½!›oѧÿ!ªe‚aö<q6)"”„Ä´ÚÚÑ~ÝÄX¬h¦Ýd\j0ø -Œž°ì²ndÖ -FšOmFðN1ËÖã¼vÔÝ3iÖ,´bis;cV„•qfÚmØÎ�ºšUU!(1“^HÜ3…Sà!ÂcK@@…OOøšl–(‡Y×Æs¤á»\Õ¿XÅ -‚·ÞvøÅ(V-øQ© ®ŠhS¼g0I¹èm4Kà -È~ VKÊMa.'ó‹�IŸÀI—IWd\Éu‰#tþ"æ¤fê¿¥!¸ÌµmU2ÐP¨(ºnaÄ=N€øÀû¼wÇiEj 9 Ÿ7~VÔK¶8ÜTnÕ›’ºL€<, -z"üx¼MøTÔzä13x_Tůí‚þ åQŠn¸+¹–k,AŸµ.ÐT&„ð -2h;¯T¬sÕåûÜFš«€`ûgÛ•�&Ö yVœTw8ã «Â"³^C¯bƒI‚P®¼ÎíH§ÙTôË}£VC v6*,UÓ8¬›Ú&ThT*›uQOƒ 3+¸’h\(†`©¹OVE®‚Ѓ†S”ðt0Lè�Áí¾3@•ò¾ Ñ 4›•ÕT;Œ)ûÃr;TnS!0_´Ö»v&׃6;Ú®œó2P{ßêVWGš¶*n&˜UëÖÔötθÝ{Öüd !-^ƒAË«K-Q]ÙfØígàSruñ«kå\ÈŽã‘¡< rŠ©¥@¨Øm½*¼@!�†„MóQŸ‚ÑGÛÃÓª¦ðÜfˆÊÃtäVNˆH³SB*¨@pNcrÚà†�‘•'Û¾VÓÞ/„?·«] »úÙW̘'£þóÃ/~÷þÝË78üìx¼}þüû׿}ûþ®ÝÅ[ÙI$z€UVŒ×FŒÃ³ËPŲî„YQ}˜.–SïÐTF¼¨uQA‚Wy1\>¥UF·„ÎÝ+âB[;ŸÉ(¨„›ùÔçh'<1q¿nÓéÎܪ4¹# -Ç™3uÆ‘mPm¢‹'«‚Õ«áqÓpÝœ¢«[A'3ŒUc*‚QˆC>»qÖ]TâiHY³Z-H"hà(4A¸®¦áLUÁÃx{ -ŸpFbÖùg�ËÁP\Î]ਯÄ#i–_Bjà[mã=ÊMSyõlèJ"q| `°ñ9ب2B w-ËÚîJÀ92õÞ¢w�~ ß@»zF[M.ð¤Á¢-Kjô(ns§‡ÅvÕ`Ä\Í\œºò*r˜¨f=Ë‘-}I“"ñæ êÔ¶&°žLi‘0lá -ßݨ¬roX•}3[R=,RYtÆž\{Í–ä…ÇA[6 ñVh`ž¿tºßÅD5LÙKg#cZh�0 -&σµ;Ê8ÏÆ!öÁ‚«8ŠôG$|®³§% –*ìoó¼Ø‰+·XÒX$á´az×l}½š.-T±�!Ò43s�b\ÍÁ¼„OnÁ›ò<5Uo -ÆDsÂf¸ut>NÝ@|H»»jLg¡\$8Ÿ —c"‡]Œì+pšéÞŠœñs_æ HêlõÕA˪˜+šçÑlŒÁíø*dÊÁ*‚‘š{ €à¤„uÖz4PVEÀ=‡L±ìO4S %¤¦2«dŸ`A=H±>›N7‘±°>¤åê%[ªJ 3 k<ÇuQW4¶$•!)K`5—ÌWZpN,2Æf¡«–D…ñª‰ -hÒfÅ‹¦I iAo[•¯1'ºX6Øï!ËÓ…ãi’ÑÛœ˜Lç_,´§C�þ‰ÁV\t‹/LŠBY»ÊÏŸ/×Ö€pOW)XW5ÙGº æ¢îzÌ~ŸpGl~0,€ðˆ§…¬<k^4ˆ‚Œì‚î€7©Ù9ë.é�è2†.«XFó]ie帵8ÎvœÏŽºx‰,ŽuŽºˆÄ˜5n…¾ÑG¼øªRîìú<D,¼Ví“ ´HPÁ˜±b6E½IWSª÷»i4 ò¬=¸ÄÙ$F_Q¨’.ã‰"ÝÚ-®:R)ª¬Š€j€.rroFñ‚¥ôsÑ£Ö1ñà¡#hKöy…‰žª&Êhú†Y3Ò‘dÍ„Lé3¤UOºâ¦#5$eW›bn¶j«€.uG#†=›oªçI4)V%„’ªÓQ݃ôOCÏ!ð<8¨]_cm5ëuQÁ}U5_RØÄd‘,¤t�Lb¶éqÃ)˜ƒ}E¤[³îèŽáH42ˆq'€¢ó=9x‰Qà -?t`7*ât -ê8!AýïáÂûô K9'•Ã{õ2k&û:€¢=:+Ç#¥ÑŠá¥…MS™’S0ÿŠªQ=r±¶ÝT#Íaec›€i#îà@KJÏÌÈNh&1ÇýªÙ €¼e¤@/Øjk4j¶xUL;ÀS‚– ²í^îþ’²=ö<P¦êdÖdjAC½ ã2Ž(c‚’yÃpÆs‹fZ¢º§±XXc/Âãa¨Ý@·¬zÒ:·~eô~vEÖY4–PÓÒÓ5sÝ0«!ô/ÍÚM[¦«Ço*šüÏ«VÂLN“ù,:?¢gZ -ûì‘þ0rÒ¨ýŒ-ܼòÐu›Ã!UVLx"< ð•ÌÍÃg1xnã+¶Œ‰<?2qaGË+Ç5‘Þx±š;*ÌŒacê8º¢¢º»AèŽÔƒ&ñ¬7_¢©×åÔß°Zê²Y@¼[¨†>)Ò4²ßãçúO?p-âæ{œÄ²YLÐ8Yè4Ú©pÍÆ4Wø]‹¥â‚íÖ¤—x…R1Ú…sÅaüf:…ĶÄX~õ×ã.²-^“¤çƒŠž„”v/\®yA27;P -Âð‘Çsi!p°œAÿj¾Ñshq÷y„ By¬^˜<-·¯„RæbF6³dAj’a‡^ë‘d<ØLaˆÖcÊŠUÑ7$,<nX§~[BMÏÈ´T‡ì¹ªež°”¢ÍÆá,žŸ"ªÇðyæYm*D7¨=qá\ÑrZBÕ‚-X@5wÏvkìn€Kšj¾q ô¨T…>“�u9Žðèg„Ø"=ò‹iDÀ°‹íÅ9™–¢¼ÑC·yx¨¥ôä¶lÇ-!«ˆóã“#XÂ4B’È’d†Qz¹aðM±k¼ô©¼ "ƒŒèyOt®Ð¨À€LÃ9MÍ:X… ¦¨Á…-Î;¹]¶XÊiÐgHPcmÊ–ë«Åæ&Õ–4FR˜YÓÙ¶eS´Y`(,ïA2É"jɬqØà<÷,!éJz1¶ïdª¯�vˆÉÒÎû³ŒÕiS¼1+gJ¹Íòw ~W\Ú4D³oCBJØ‚£¶Œ²P2×CÁ«º�ˆ¦ÒQ‹ê1æ¢vÈ6VÚj1í�bêaIÖÙ™AV yc°²d……¬HááXÌkƒ+ÖÛmkƒ¨Ñ9U¿ª‹ŒŸa€X‹ ô.1„1„kð§‚,<Íby‚ -Q\Ç+NIáEØ›hdÅÞ”]®klðp³0ífQ• -@`Øp·€à¦0)h .F#vOüiŠ+ -!|n;!ÕÅ©3ª&)×yU™[„€Cð«d9xW`>r%&CêÃ:ÇlC[µÏ±s¥y@D¤‚Ô‘@ÈVñpP¸úá*º‚õ¶¢ p¬]µÜÛ4Ì1++9³ž¹Â0áÙøD\y[™æ2ζ9'kÍ -¿È-)Ü`цcu3I.égõZá3'uP×›ßÅ3$¨ÇÍÕTúoýD4R² 8]‚¢‰ XDÆð¬†�Š–E(Z¸•ûÂ\(cÚ†èT“I+O½V×'ѱ3‰Ã, ΰˆîší�>ÆåE¢0î:ᎴŠ2ÐÊÕÌiø}«…,IÍŽám£ü$R؃bá‹yiš”7€¤bYÖ‰=›1:<–cI1oÕ° -ôí°ÀMÚ†TKïNlæi…ÞaÍÄl´ƒ°CgU”DZ³mŠ›ágæ;ªºîü®….`EÑó3O€óÔOçø•îÁ‡±È¡:§è§PÊìÂDâ ˜Y½˜ÜcËꉬf ®š¥@™ü¬òìxŒP†’r^4š©°1Té)«Æ¢å{ ¡u¯N omíê ꦛçy¶à-`.x"ƒ¦qDß1(ô6fM‹Æöò¸ApLØSâj¹tÕÙÆÏꀛ›¯W/ÚŠuˆ“êÑ/xxP»íTĶ£à*LbXè (.œ%ܤ�€è-¨f_‡÷9»ŠpTã€xÒ¨€ÓyάÅR§0o/¶˜2æR)UšvŒÀ<Lb'Ôe¼ÍˆÌ›} êö <ŸW;È *»UµŽ·«¶YÍúa„t#̶ՈճøÂ0 -ÀOM&_UˤQãà¡I9De: -KK¬-%ëA×®;±4i]œ_ "ÙVô¶fÃÆ+1{ˆ€Ä1ü‘Ä<i9> îjnNG$)Ê4Ñi>™-iJÖt£ªC”* òB"†ˆ‚2paãT2l¤Ôƒgˆyî}ynɼÆ}D5Â#ˆÏÌY¸%Å® š–VÉÄø|˜0ÙƽU«íz›WÚN¡‡ùXW5"y¤£Ž0yF5FUsréã‚Z]ªmè¼ ˜Ð¡·‚@°ZµßFß2ˆðÀ2 lf_¯ŒKŒCÂÌnkwFعÉKãÍãݕر</Ueµi–BTUp6W®@¡Q㈦ -GëkÕÍUÝäÌ#@Jå[D…ÁÒª±5wXÔ=9DÍ£ž¨9j@j«)ê&Öw* ˆ–;~%nƒDRW¬´}ÁM Y°�Áφ£ƒuÆyNQ¦P,1c».¨tˆªª†á=[À ÁÞ‹ÿì½ÛÎ.IržwsëÄ€-`¤Ê}æ¡Ô–aÙ-Z,[‚ats$ÑàŠ2á»÷÷n"3ë_Ý”h¶`耜þcUÕWÛÌȈ7žÐ -š‰žª*a'¸gT}õ<ÅÄZF`<c2K6:A€¯±È6ÏKqƒj¯äkdÖKËè¥:\~KºjŽ1‹‘>„ùA‚•WDár‹ -D7xS‘Ë*{©‚µäÊ…i®_cœsÌ£òq¹w5!ë"áÙ/‘–äŸ0ÛPQ~Jõü‚1’F¯pö—ƒ¦¢í5¥ˆæ -—Õ—ªœQùÉY™2*‚7ž[\Ÿ$÷ÇçuÏ5y3¡÷“À†¼a»ùX’LŠ¥Yt®9©vµ¸H#™@ÁÃ)=œö$Õµ_÷å-Co}ÅÍBJæÓÃÁfž—S‘ÄWa¨[ÝU#_}£~EÇëïýÂùo} ÿïaÔ_h»ÿï8»_û¹uuÿ¾©»øRÓ˜º›Ù’ªlæ.¾hru#wËRz1»h:Š÷?ˆ»}Dú ÜÅZopðv±"ýüîÆíb 5ÕRpÓv3kZê†íâoœj°vñw¡w£v¹Oj›´‹ãŽ±6h7³fý…Ù…BÑH?&gEô\ÝfåÖÅØ…fš.°»(”D@%»ÕŠ¨`÷6’¯[‹á×EáÛ]·)ù7\$w.¢‚[ý~¡u™dË#ÈºÕ -ƒu›§Ñ›«I¥Ø¯ÆêëlSu±ÑAuµÈe¦.{óÌuºLÆ—ò&ê6‡l n+ÒÚmž. ½½qº˜³4]'ÏÃÒm‘½Pºh‰#rHºÐ?¦ðÒÅÊL(…‹£Ëôgé£Ë‚¡q º}†„ébèÂã/,qîCšÓ èbÁÿèrªîõðsY¹¨b|bQßõ¢çFÅ’ñ¹(›‡Ë?]˜»£óðn•÷49a4ƒœ;*CD76w8RÔ\ô:ÀLÐ\$ÙQu3s—k2w%fJ˜‹?9\`4ì²jÐrWÒübX.Ü'¬NnVîìÊC*_0VAÊÅyWí»A¹g!žœ\–ÄâS N.g8BÜnâ0§½:6'—³ž‰·ääZDV^œ\jÈð‘›“KY’RëI¨_œ7¼ªkmœ\Ü÷ÇÚÐGpæ—/Jîr— äê3V*V pFFpëÆäÊ8צÙÂ@5xßtGƒÛÉå»B¹µ1¹ôV(ȺvcäñÆä.Óƒ’vCÒ'A*ôûM®ÍÈ]Y¿ˆ\/€»¦õS6|LÇETµÛAÇÅi´r³q‘qg¬Dh\¼úJÝ+Är´0îBU[K›‹Ë—§s%V||R·÷ax¶-9XAÄm‡Î¶G fÝ_ðpÁ,À·IñwÃp›Â^ÂE}/~%H¸ø›¿r‘ô €X88¸=š9g¡Œ‚Ûݨ'¸Ý‰Á@à"ÞWæ&ಖ¶�àBä×^³ZRïÆßV—òýœ3êû¿ÿ®¼Ø·Õx‘`ßVW©úår“o÷q¾e‚²gokU1üͽ-{‹(t-=¨·ð¡ÚÓ_Ô[®ˆV èmîzîÁ¼ýêšE8R"`Lγ¼‘·(Š@hÊÄ[Ð"šø¶Þ6w¼y·„C<sãn›Ë•‚v‹}2E¶§p+ µ‡ë¿ÓÙÉ]Û–µ.¸@·D#\4Üj:n`n‘§Fäé¢Ü¢Î¼Œº!·¨ØfüØŒÛè,v#nðÄ+e¢ms³Öó'…r7ßãrè¶-;{i¸-þf óŶÎ/Ú–ß'ŠºE¶Ý^`Û:•„°íg¡¤ÂWÃZš+n¬-rÛ {Ö¶¹† ¨¶ðBq×o¨-ܘ^7Ò# “FÚ⟛8¸›h‹S!OÎ@[$ÊP�<ÛVË»i¶0ñ‹2Îã®ÍÃä7Ìá fÙBŒ‡0K°lUi‚ªïÉ9G²"ÙB›ˆÀD€lI¿,õű¥’ás“c[Š-À³œoˆ-ŠÂ¶:§[(ù!_�ÛÂ~"yók žü¼¯Åßi•½6/ñÛ^›ütm&4ü®-nlnmaú*olm¡24¿¨µH™e=±¢f—T?°ðõBÖ"‘ÅŠ®êXI‘ž/`íç}Å£6°sœž§zTã×7¥mX-\ÿgVí#ùùUÔÚ‡T‹›sqjs7¥j1ƒRÉcQ;BÕ¤±ýQÔ,æ…¨EZBYj—°B/@-2gÏØ€Z”Å:m¶ïžR‘ÂL¢ŸRPÀmJ>hÚ¥¨/4-²Æ(ä 2-*ÚÚ:`ÚøûæÒ†-°´KkygÁÿÄû‚Ò¢¢”c:ÿu#i÷ß‘6l¤E½Žºy´~Íníb¹xÝ4Z”ÏÃE íÃ%°`[³¸uEA£…¼ƒ0‹ Ñ>ÔŠ•7_'E"A£ý-ÓJX‹ŽöaŬXÀ{ÀAùg/^þT[×g~³hA6HÈ(ÚÏËÂ1p£h©r,o-fé'm-p6ñË�Ñb„`äѲ{úœDû€þŒÈ|h±*ÆÀxƒhEÑJ‡Cû˜ZYÊ|Qh2FT) ´É<ƒãÎ3òA‹¥£®ÔZ@X63•òâÏ榡ßüYV6«x™™vü=ÅÝß©&¦´±á³È)$dÍfShçBÏÂë*Â%·‰}—fÝàYˆ„¹¹³aì,¤!s¦Må !zãèÄ!0»ÌYH0rÿÎîq¶ÉÞ;’´×qoöÜ^´YäÙÉ”5l¶,ÃMÍšÃÖ•Ë»Š¯Z¤YŒl\D!ÛŠRõ7g;âuaCüŽ:Sfãï2»mfÌ¢9ïÃ$®Þ£¯.k8´›Êu!fÕcô˜MÕÅT1)‚pX‡0›Š³¸›0‹„µ˜ß7`–ÖtQban4ø²‰m¼ù²>°ûÚ³‹æ¿ù²´Ì\Þ|YòÅÍ—,t•Ã—•¦|Ì.^œÀ`†»dç%0KtêHó ˜¥UÈQfñÌinÀ,ÿƒé¥›0+°l™‡0Ë«CtffùOÉHÞ ±ÊÓÕsA˜eö‰/FfùhI» ³H)eÂ,îÓSg9„Y=y&¾.Â,óbŒa–lST•b– z†.oÄ,~�e/›0‹óQ~,³<$ï7a–Â&Fƒ0K~vßbÉ,³‰_/¬$Qý�fi`ç�ÌÂ".ÑM˜%œ•ùË Ì"V©¸oføS†ñ"Ì23¦É„YÆx–ï«×Vdç˜sAdñeÁ@$0;ð²hT¥Vi^vµ¨.5_–[C—Åa–Óž.‹ l°e˜RQ…Ù²¸*‘^lÙµü%Zv%ñü6YÉTß\YÄ Õ>ÌXÙY„ÛTY°Þ|AegŽ¦ifÊ * ‘²Ê^”7Q%Ú*5P–á3dí7P–ùü6Æ(ËKÎO?@Y>:~…”qÉ›'»\‹hœ,bUþ›&‹¿k¿Y²°PVb”,ð(ºF’,a›ŸïéÉ&fÝSÚ$YÅÉd`f?a/’,1˜ƒ$Ë›^õªˆÓ€…QýFÉ2 >ÔØ(Ym”, &Ðn”¬r0-o”¬Ò$sl”¬ò/k¾P²8eÊÃ%ËrÖ×F£G”›âû¸Y²lq� A°d1´ó[3K–÷„µrK–FÄÏÍ’efè`ÉÂÀ$ÂÍ’…1´dÉÒ€¸J°di`[²‹%KÉ#55†É²#¾þ€Ébø âà¦ÉJ™ç¦Ér+Ì^A“MÙ9‹›&#ÓA“ÝbIÑdá=£½h²0Ò—š, ãM–6‡¹h²µIÉ5LVDÿ•‚&ËÖÞ°nž,Œ,“ l"5´Ì ”¥UÜPVF$+”åqXph ,d¹ß@YvB@¶=€²*–È+€²ìÊwøʪ6hVeÑ®†“ve¡|¦°õ&ÊRmŒ4‰²©ík¢,ÿæ;}!ei„D ²RUgeˆÈáâ¯Q›t#e%£ÖwMÿ,Õ’(»Ò7Q–n]Ëä$ð‰ŸÎLe!¢Ò ,Œ‰ÅA”…ÅSÔ=àëÉ3n¤l:팔å±Ø3"²ÅSeùBÊâågR–ó±´&´Á½_ˆ²T:±¼,ˆ²ØOmA”ÅÙà&ÊBÂnª»‰²x±øQP65wŒ|eY.CEH�eÙ…K©Yeé‹teSd¼7PV–ƒ“ýÞ…ßÎ=ÆÒGJñ“$!oš,ÆVJ£M“Õƒ_é…“¥¾Xàdqh -˜ƒ'g¥›'Ë4ù'Ë¿1KOV†¾^<YüÒÈ“å÷ €$ý(ÌF‘m¹òk(Q œ,ó’©oN,F¡Ùæ&‹ñÌ™EÚz´ÖJ¶c€yæ‹$ÛcæëÔ&Ä”ˆ#uî|QdÙ‰îsÛ"Û]èMð'†„!ÛÝÒ5²ÀF= - -#F„V±˜.~,a¬«†‰½^[ßôØøû‚Çn“Ù±ÓsnPaÁJe‘ÎEŽMQã½M $À±ñ÷ÅÝ&cc?çN£©±ó´ê‚Æ-7˜±óÑÐÈØù¸aÔEŒÅ>&¿263- ^ì|ôêÞ¸Øá8A‹enL!*ÒbA 7ï‚Å"ZæfÅT4P±@‚>¥�ÅâoäBƒ;Dn½)±ÃR¯€Äw/ F,ƒÔ¹¿±ÝB bñ¹M–ˆËƒÑ-à"Ä6*�±hxƒlfða{VòþÂÃÒTò¦Ãb" ‡ô‡Ð‡«Œ†E2)g‘aÃb?²úÊo±Ø'¸°HÌR®b,ìðšð¦Â²)+L…íZã¶úway"uó`ÙfúÐ`;Ã^õƒeqÞD³`»‰‚݇8 Øîü^p`‡“&ÏþˆE•¡@`1&¥ù:£MÆ…€…Ž‹«“Øfi¹�X’®ˆv=üW+PC¦Tþì¼G¢¿Nënúë4h6à¯P»³zÉìW lQ¦w‘_C»eƒ_±ÚdƒÇßöu›L}×¥‹ì7¬ã:ãf¾.CaùŠu?×@¾oÐÔ,j#_a”¢X+ê:<QºÒ5•_ÄW‘†âò' ·¢–ÔÈWnA¹é…|ÅÆQ;¯p(Ëæ½Î¢'~ã^±LB¥Ð^y66RÅ/ü„iD뮀«€+ Ü«ÜArÕ¦+¹Sì{µ«P6îŽf{¥åËî•~OܸWâ0ôïõ;—ã‡ßügå½2„†ÏÍ{¥QÆà½*¬Vò¼2ZFºûE|eP“ ¾óÀƒ‹øºªÞ…øŠæê<€¯{!ÀW„½Øßó¾ªõ¡_iÀ9×ÐërêÏ¥"€¯Š¨õ¶¯¬é#©ý¾2°ô8™%YQ—€<ˆ¯Œ_0[}!_·chä+ß?TOWúùzsOŽ€ò•H‡¦4ÍF¾RhK _a»9oä«¡å…|¥Bz�#_Åke#_ñ¹È¹‘¯(ÏÀ2ˆ¯(+"2YÕ¬ËM5nÞ+4I†JÓk†OŠQ p¯ŒUuùÛ¸WF;º‹?ð¸Ogà^ihªÌ;µ/4Ö¾q¯<"œ{å¯åù¢½2FÇÞȦ½r9XYÁz>F˜H<°W„aܧ™ÕA`6a¨W–Näú"½¢hˆÐXƒ^Ç·-8¯ÃEZ7涢ŠDªÚ‡ëEò:ü5ÜWèÒ–™®BŠ–„×Ñɹ¯£¹ÚÞ|×1T„jº+B,d•_pWôkÀ˜p×¾ÜÝÒl×îXÛvsA£ »vEð‚ëJFÑh/¬+›‡ 3%ª+Ž€7, ®ì‡<Æ‹éÚ]}e¬èa‘U¹Îš5œ9ÖÛ7Ñ•ý‡kÙ@WZç¼y®`EÁÉ»q®py³Î‰É2t ,ºÂ\««�o–+ÖŽn^O³Î €eÈÿA®lh>ò渲WN.ã -�)”+7Åõt¹ qmMÛÃʬo„+lpåá -ELz•«I(fLkÛÕã*!�×V%‡½öaÑoE=8KÞͬ'<ð¨%ÁüyÓ[šÀï¼µÍÝ“–c>ª`HֽذáÓ tkóôäVœG1!.rµ#Ôfp+Šã¨û@(ÏnL®t¹V�àR,nXNofët#ùÙº¼º dërŸž ¶BÓKÄÛl…`”EŒæµ²„fk…>¸‹Ö*ófµ.‡±ÕŠ¿ãW‚ÔÊÀ<\í µF=@¨ëáæ´¢FkOcZ—1~Ai]ŽçÞVäôfD@ÙÛ!VÍ)¤•Fb…-ŸJÄhæº!gÃW½!lpÐ_@Z1±HFkŠö£õÉŒVˆ F+ÕûJÜŒVx1ñB(Mœ½³Íhujv½ô¼ØúÁŒVf 1ë£õ;‡-‚U¿£u¹eËÑŠ¨+…þAhEÔ5Š¸žÁ”žLlÝr–EJ™¡.`P!¨é¬Ø ”ÎÊ¢DyÕD³®à«qUá²Õª×¾Kc3tmš^›°0þäu.0+ÝpæëÌÊÅSËfeÏ5|¯Ê0k#Íeåy¡VzsYéà’¼õuÇ^¥³W›cVÄÌñmcYia'ÖËÊXc,+/“‰±¬ûïËÊp.«õeUeî¬ËÊü«.,+ƒßl7B¶öHÙ\Vz¾Y€ÕSSÏ)§eEìEG¦²òß‹°›ÊÊ3Â*kŠ>Ae¥xƒèMe¥‘µ©¬4pH1••ƒjn*+½=œwPYa`ulPYa Úü¦²rQɱ_TV*–BFúuŒS ¡Meå"w-°¬x¯!Ú*«r‹¥¾¨¬äI�iTV%¸SßTVÄæ9¦ÜTV=š «Á؛ʪˆ¾Æ«Me¥Š¢ ²ÒPDaE�‹{UnNE;4Q¼×¦²’K—ÌB¼%Ý ›Ê -ÁB}ee®m&+t0ZÜLV𴘞Þ[Ás pÁPV¤=ø~ÜPVÙœUPVÀ€è”éFˆn(+ÙcXr”zle¥RéÊJ@ëù e±çs7ÊÊÝXërAYS³›PVÔµrYPV5ïCø@Y™¶b½‰¡¬<é*_€PVàÛ -¸˜¬°é·ÌdM$ÕÔº™¬4 nr3Ya$v,˜¬ÜŠ×o&+œÄ‰ßLVäÿÄ©0“O–øª`²nÃÍd=F3Yqp$‚¶š¨/ÎóÅdEÆ”N×Þ*kHÖý÷Ed [�Y!]"Ⱥ_ÆÈÊÌ'ê²ÈÊRa$§ÈÊ4– ø§»;ŒK`$±°* +“Qú{×9ðE¯ºùM%ÈxD4à_±~¼y¬Ä[5ùÊ—`½•!œyóX‰|²$5CŸ†ªâƒÇÊÉÉã«ÃD•k`+þîHàz:7FêƒÇJƒ›‘’ÇJããÔód¥IMdev•"§ ²B¯Æ’¸‘¹›³N &+ø‡úÈJù!•:,º¾h¬Ÿ•Í5o;?½ˆ¬°’¼‰¬´à‘l$+-´ÝHVÎÉJÅ«RÉ -ãV’•&³ŸF²’`5¨> -rH2)òb²nÛf²r2¢.3˜¬¼W³|²ÂªWÊPV¸ØßPVnBÍÌ e¥•O( ¬Â cZ…ëÌñ^PVŠè³–ºfή¡bCYÉ(P:ÿ‚²2`Ëú䀲²’Z5ãVùÖóº/(+-éØVôBà6ÜDÖc4h-,D 1õ;ûWuã?w¢ -3qp¬ª*O›Æ -o+¬€±"’Ûë›ÅŠ ËkbíRWoëT ûÄú± ST…lÁÂ�±bÕŒ=7‡ë¸~ï2 NÜVë=_VÔ¢HÀV´×‡DVÄ+[ª/�+$ר°7¡/ÔÌÝXYÈ?nü*l“HVÑW¤{æf¯BUb™½ -u6 -,½Š¿Bü&¯âo”÷ÞäUÂk?BW¡=‡‚aŸD¶\”“!p‹…]…ººàkwi¨t7è‚®ByC¼´Ô²4¾rµt¶Ä¾x«ð 2–Ʋ÷ÚS6mT»úÌ7lµé6kZðF$«K"`@Ñ‹´ -#$£Z-$ÜçÃY-ˆ¨•òƬ–%%))«È„’©é©f¶H¸«Õl¹@¬2¶Æ&¬bÁÎuíXEt‚<—ˆU=¦¯Ú-²ºéª°Qgd¸*öYÊL*Rú˜?p¡U›%NAVmn?`ÕSÍ«BuÂ@ºÁªDà=5VÎáH/¨*¡Lp™©:Œ˜ ¤ê`¡ß¨Šx-•<Õa´OàT±7MJæ¿SÅlþ²Yªa±NáB©âò0II—ϪÓ"ÔzsTxƒn10ªÌV‹œÈl]W¡þÍPíæùB5J„ƒ Ú]ÿTÙð ¬ÍOÝEŸÆ§–&§=µšyðT@>‘3;µ•ÜèT‚$rÝäÔæ¶BNmV)ÞÜTØŠ�¨TÕ’*Ñ󦦶"ÐüMMØ4^»¦9y†ê'öô»©Œ²‰© uàÃ10w�JÊ›— -Û³úÆ¥¿8%¾!-µ0õ‘^°Ô@©+µ°ü:*f\ÕEJÅÝx$"(µàÕÉ„ þÂÊüò¤¢ê‡u_*¬(YÓG@RQSD®ëÅHe @n‘*òÕÚ„Tä)ûxñQsW‘eàQñ7 !AGÅßO]/8jFäi‡ -²:L6…üÐo2*鶌 -r|FÅËš8Ý\Ô´Ñs°¨˜áñ¡G,Õ E]¬O‡‰ZYqy¨·ô"jîfQ“§LQñ*Ôô¡⠂»4Tè&‘¾*fE^îC%ú‡`¡"€¨%&dÙóøBB…z¦*Öìú’_Øz³ä7õób6±)¨Œn*t½µ¼¨?”z¨˜:Ê "Ùú›ŠèóšŠW•mL?ýLüU‘~Zä¼û4{fô)Ëzñ]äSˆ+úØÜS, HÂì)Jžô…z -�|ÝÐS$ʹT:¹t¡ZöbžJªÀÆì’Ä"†èVËRŽ<,u•C¹¡§ˆ¦‹mê)BÃÎóŸûk:Ñ6‡×§=…*�Š«`ž:)§È]MQJ7ñ+qÈ xŠ’gE‚wJâ@]/Ü)F!ø -¦6“vŠ¿Ç|¡N›3ÜA:Evq÷�’ïÅ9mM´‘‘o#�¦�~8?µ)§3í(mX,ó¨jh¬ÆoÄ)l¸‘A8]Æìp -2¤þuãMÉƬtSTÁ0°åm8Cféf›Î©¶ž6 °g0KÇTºâ›"¼ÿ"l}JXÓøû¦š†- ¦Ã³kàJG×"òfšBaY$ߢm&…Vƒhºÿ¾€¦až)¬«nœé0BᦙBbJ’‰a¦�š!Ð0SÎòx±L‡{ÑÊtXëàR¼Ú%È0PãO)ôš¦yÆJ· vÅñµ¢x!cü»Š)ãˆéÅ0†ÌÂtºÕNLÝØöæ—2fÙjàK™ã9‰sr õ†—µ'Ø¥sºL K§?¾¹t2)ý–‹’XâàRü.ÞÜRÚÒÜØR°^!Zj)êSàƒÝÐÒu:†±²‹(Ø‘‚YÊ*ü"–„(P�KñÎI7o^i´þ}áJg�ƒVºbµ°R–]µùf•šD»I¥8ŸÕ§E'¬Ä»1¥UyŸT–Ò}„Q:#‡hBétŠ%x¤ñiß|RÈE?žt&ݸղ›NÚFdZˆß4›”êáYßhÒá¦Ô›LJ.F/L:žSÒÞñœ -T¡Õwö*éÇ ºÌJÚíÝLÒþDá¤Ën·á"’›€¤Ý€– ÄYå=/)%+õÛ¦‘¢¬$0nt*ª«Ÿ^,Òº¢2Ø(RêÓ{t\’²<Z<íœ!²;©(¨cÏ ï™ªQø~AH›õ›AŠ¤Vk›@:‚‚{H‘?„Œ<ø£\ y#Ô†’€h*Z¨(PTºcymÍR1möhÍêiñBV,®dŠ ƒj¢M–óÝàQ4¼ÓY;Ù¹žÀŽ~uN~øŸÿBý©£ì¿D‘FÒÏ+ÉliîNKª]OnË´´_Q¬$/§!$ÁÐfÍéîî„è>qü©Õ°ºBô®®%¡Ö"ÉåapšZHëÎ9ƒ7Ö{ÿÄ¢ÒçÐfË!X¨ñËú.@ª}Ívö|°%&+®(M.OcÊ"œór/®²¥©3™`é2ŒÕGâ;Q:(òºP‹ŸPËG·È,lÅ] x¨í³Š7[’£ƒN¶§Éý±frRs %,¬g¦•Ð,XJ:{"Gkë" »oÖ¤¸`X(ãDz˜¿¹§4›¼bÙ˶í‹g‹õ<íFM6”ü{¯Ê§²5+çYÈ”ÔA÷37¶'“ýä¢x‰=Æ;˜GXÖPÅoFWb²FÙ‡Êw |b¡¤6=ÕÖáþ:LºÀ‚Ð%ÿ®ú»d‘Æ©†Úrº›kÁÒ[4üAd™–^NsxÚ ¡¥– -\m˜q@Sw^]{FNŒË‹¤ív€"6³C6¯³UW®/A†J¡ç�a¨|L]£ë€Pj˜~ˆ/˜.Ã-äãV‚ÁbPÞXµ¨Ž”"ËouúS¢%ÅÙÂëó~È|ào¥ðø¬þ‡<,)°ønYM'îãw–á(x ªOI™Ç%áêêiv Æç¥:ÝLK]ì¨ì¾PølÆôd +´‚èGËà/t"«h€SYQ±›>*…†•¦¬"~Ša¿ü¸Ç¥,Qé½\à «´q$šš®¯q\t[Y²Ç+žAãxê‰X [`TÎêJÍæè`ºï[K+˜£°òuá{Ö̋-»]¿ÈmG!؛݇ÂPÜNhüBâ×$}LcžQ„œQü̾Òw@¼O§rð†«€€ÑA×Yˆuc÷Ôn`Gm6 ãcåw°T€¢g²¤áJ\ð$w¤&/šý-¡þNqwkm!»ÞO˜“ØÏUõûÈ?ùyPôÀo -Ïw·‚À‰ÒïY–§¹„YÒ&ÿ –·d8±fdéŠß"° �Ïç7?ɯ äV~üþqÚƒNìIzÁu¬ÇU±l¯I”¬Èûá7Õ~r0“]h‘IÍÙŠ=³ñPb±ÇØ*õƒYËÞ\³X2)Y©qË]8ð’)YÇb»¡® ‡q^ÍA[¿F<X©xlävãoæòQº¥¿´”˜¢Q»Èu H²w7vã‘"ä<¿XÛг’e‰>3¿·–cO¬L)B¬ -o+Å|F—ZÝKØ/€ ݦ‡þ9ÒâOê½CÌ�òÍíÃo9êìõçÃC1[ŸQÔ³½ü ¬<P-4Æ…å3òëôÉNaß·Õõ0IOdÍägŽÿ€áñ[ð¹¡U–Ä—½0¼¹Ò‡ƒ²7¾š¸puóÙ³T,1¶å‹„ _oO2|£ZΛ|}Eö¨©B$ÿ.%—%°²Ž–”åd~†7}9£•”—nEVK+2ü~o£”"°N¼d&f-©u¬Ý]°ûê^^ŠúðÂJH,¬®‚Î,ô{‹ nÞ³ C¯•sR/&±‚>këÕ‹üw>±E.8*3_Û!„Ê÷·TÓ¢›!ùm„ëØÜ€X[[4’ÉÙó+»ITGP”å}PAòÅ„ÎŒO¨ªæ¶ ¦=c'±K¡öØtUEáœÿ’›ÅX%Οù¯Ÿìèbž@ÎoÄN=ÍÏË2…†™¨ -|<Ôj¶èØŒ5se+Å¢ª²6f¨ÄºÛ’ ÷b-üž/,¤zuwMâŽñ ±Þ†í‹’9´_¸îÒ?ulY-°[ì£Agpù)ðÏjyº8’çT÷è¤I½fø[R–lÖ™M.$yÕ½ŸÎŸäðGÇïs¹çËT¿NJTii{ 0üÚ±pê‘@‚`t¬©¹jlROíîÓ^=P<ªw«ª¹‹ÅÙH…ã!»m.I=Ÿ>ì¬"ù¸uÚ"Á‰ë¦¬.9}skI“Qo!dö_2:¦Cd'»ý©eP™ C^[¨6-MšŒ†'5ùn¶Ê@÷d‘1"Ùû#©)A÷ʆtS~ˆ¿bZ³ïYGà)�0Å¡ÎĥLJ¬1’9(諨bÞeŸªR÷g;¬ª8¦SE°ôþôË]µìs¿—?%D‘èHP]InuŸ¢³ÄçŒTe�¨Œà¹UÃX˜ü#q(åØ•²÷”úŽÐ§YÓx‘*ñ,`Ã-YèðkO{P¢äÇ% ¬½�ï ³vÄux-¸Zä}¥„«¨ OI:> ný£`#Ë”éì!aÉðšÁz¬ Ïs*^ûâ3P©Q奌jîž"DîN·]Â7Ò¬‹ÒŽÝƒ"¥�“Ï[à)Sç9lxÆÐs¬Ó‹VD]9ŠÎÏizIy„¶èEŸílçÕ&ä/e%Þ1Œ‰ZL,�Ÿ:¼ûu©N„ž$‚ñ8YöÑmâìtJb³!FIù¼_m—¿³°M÷,âËSÔõ#9e©ƒÇVõH{Ž§éÑRU@KívþöhÒmJاªÜl™ŠøU10)Õèá†\8©nP“éËšêbR¸t`‰‡0mwˆß#}†6X…èB`Z¼çÇ+ÒæY±4áp])ÉG Jà°#cKdìï -# -å“HÓlbÚíX¥ÇqýA—˜–XtPR<ü~ØELöS!èoû²'u†JÔ·!lLI5:ßhäG€š÷ŒÎ)¿@1b’ -¶˜Qyd-ÙÑ#ÂÛ7“\–Ý©-ÐÃ:ª}>¶ä-~{è>òaµƒÏLãùãa†Â§*8ëü ÎG£Ûè{àÙVR("Eì 7*Íw¬DªgD¾e°>n¯.vu’IKK&âóc|þdÝ49Òº,šÙY6AbèÕ㇯8ovj"‡õBÕ1^;ôÇŽó -hš‹)Õ4ÛÐðè>?UZRÌs;ÙAK¬Êv“5o·S'ƒaçË)ßêáOn+âÃô|†‘.¨äËøÕÉ5@FtEu<„yx'Õ"™'öbï -€å ˆeL˜·³¾ÁÅm8EsÙ^sËÅ2Œl{Ñôš~¾ù�¹ÌÝ„±‹Žñ 8+䔨ֆŠ Õ—+µè¯É@ãñ“þÎTÀm =-ÏòvÊNÀÛ½2ÊRã"à|#LÊ™„—(ÖàfðhyA&e*–ð“Å-Çy -ÕIX…`à ¦F.Ûƒí`A+v/¨§ðŽñpèV\ºÒ™~¨° &€Ù¬á/2`^š¦lÇîT:Wüo•æËÀ‘vtižwKnÂÛ¥ês@MŒß1°DŒæžDQó’’^Çœ«P - -¢sPV*W¹c¿|³D#XJEðÉ,>ÁGîtF=Ãî#«Sú°*–+Ü°(ŽŒ>+(ÁÀŒ�•öŽt*suC -GXXxÈŸLË˯25©8Åš”¶f$Á~¾dåUHãN³Z„üö‡4¾Pœàh"Ã*R,Ã2V ö‹ÃÔ(»{˜.("åq3>ËGÝÎaè¹îýfoŠæq†ÅA P`X‡K&E`ÒŸ (êS 8ñÒX±Nbšï%ñ°œqçÙFÙja4„T[FœÝxª„Gß$#E²ý-±C°pↈô"øÊ%XÊÐA“‘é{³Ý±0XÜé ù†¿BEÂFâYˬ,¶íPª¨°ñx— -(ÇHÌËÄÅ,üOÍÚSŠåǪ>Y©Æw´pÅL}TŸW§€:üqõ¢Å« ÏnÏ°Æì§ -ey,¼1`D“Ú¡s¼<lû°½¤Á»R#ç„q†/yExFU9lƤBZ¸®<Іña=òUY1Ö¡‹#ß9´9¹UûÎíHïR2CŠVrÔqe‹™“Ç°µÇD¶ÌnxcؒϧžؼK9-çWtSY«bÄÍ‘„Û;áåG%cü$Íb~.ñ¸=l$J¾rtâŇ–ÜÍ9cô·(e”ü^+“CPÑE{�µ´NuC¦ò·h;¶á6Œ| {ãÅC@·xEo(aš[Žå`èíÆ6&У„¬ží²›ÀQ™Pîáè-'ºâüq'rŠ1ª -act,Ñb¨aQ×,§ºVy"Sê˜L¶»hïŸ$ „-³{ÌÎlsJ9"ÞOø[Sœ‹ˆŒHQæ5B>«ÝÐ-‡}“£&ø5{ØkxKai¶é¡—uê–±Ó5º,ãð{è×ùÅ*Á'S+á½Eȇ# - åtuVĹs¹JS‘¦àÎd¢ïD6ÈÒ€’"’ë,]ã ¦`YÏtry5l³š'—xs„ÿg6ÈrV°cÁKïNOS©¬=¯„•][pM$yqĪ¤˜eã+iç¼#B¡ž ¦æ$…8 }#Œ$ÈfdD~ÚÐdÐóîM¢jÌÊô¾¦ZöÅ€¡1O»n >z’ ¥¤æ‘§©G‹8þb¦+B8±ü€œ!«é*Íïf)™ ©º‡W„RåÌ‚I#º,©Ùç†î29ZøÅ ~Î!ãÅÀTÁ[¶xK¹(ߘŻŒò×´ÀØ&|UT=dfQ×ÃÍl*V‡ej(²¶k|ËH`š²|–úÉ÷ª`¯0Ø×½´þ¼Ê\/ Ê©º¥4{ÆÁBÜ¢úrúsgÚ¦«"PCvrCÏÑ='$V#áo[ÃÀéŒ[Œ±ö~œZ›g¡å¬?4(u×Ïš;RˆÀp÷jJœ*aÁ&^LW?oTצȩ™’2¬ž”ˆf}7wÔQÂÁØ©¼ƒ‡lVÙæØnÔ¸7h£ƒxÈ0ÅŒÂqWXy¯Q–½8ÄÉ<²´n·VNµjÀG$Á®í˜Ëb®?z’Ú³™(ñ9#ØŒE8MA1`)9ß„EŽT‘ós¶[Í ¨?ø·ðš0¶c}ÜEfy~g}9O¼.šÃ¢{[¨?›e÷5¨QÛ¸-Œœ>àX+Û#'~}fƒMîçt�µÍ“"Vž“#·€…ݘ§PŠÎäCD’O„hF÷\Ä—»·cßEXØ臹û•ÃQôYM¨iKz˜‡€j@4+B^‚ð<¡™§a4©†Zg`™>YÖb1ŸÏDÚ”û-XúVñàÐ ŽùK†Â!ÛÁD”v^ÔÂ…ó–ØÆ×MÏ•tÕƒéG’½ŠÎU]%p¬¥!—…*²ü™CEˆ©t9š¸j~âäú -›ÒHeýÞ#äsüXÅÛ’ãyLìÂnGŶ&(…‹©n…¡\;*à +BC¤7Ô'Õ<°°Qzüfw#äZcƒåäT•G»Á1ú‚ä@osJaõv^ÄÑ2“ÙYòe@‚˜eZ™MCh›,¬æîË€¢DJÃ*-Ï«´;´”¨ðçÛz* `¸í(òM#r`t2Ò=‚„…—ɤ“Û´$mgd†�ŸG¢š„CIX4‚¤{¶[Ãu±¤lá, ”Y›Õö e\~Q&‘qð4ºJOí±#QDbÄsyY¢§Lvr}Î5Ü&Æ,´0àr€dd¯ÚÙWfr¹ ÃFñ˺¬údã‘9æ-š‚FÄoŸîš4Lh"M 7š¨/J(bÒÆtE.cIå;òÁb‚¸Â¢T/¶©GENGÇ ïlj…Ž$3ï¶ÛˆŽ±Ô=‡úLR0Ü@– ºg®QžßÇÍær7šq`¸59©«nWqÛnyá¬T¯òþ(x£K=jȨÓR„½ì=Uk]ôFÑÀÑñtJͲţÔÔ?ù¸Q}¢Ã›órU>ó½Ý¬~óŸòË@$™ËlGj ÊÖv‹ÊžLÉrâPä<ÇUB*HOŸ®èŠµpSôJoØ/Ù]“éØ•) ìÇAWpKåžµ|ÎDtùb'\TëÃtá"»!RÍmÇH«›öŠ‘V…¢¨5bg@ü�Å(ÂEÆ-—(³‡¥?'Ô)Q«““Ü^ÖH ”½q!ªþÔ”Y¬}‘á³s.£Ékð 8(d7ƒN,ìNs¿9¶NMI´0ã�ëËóc=5-eì=UQ‰¢8—6Hžçj„aqù—y…ê$鳡˜‘@>T8ä%·k?l3C‘‘Y¯�™ÑZ¬pØF8Os½ÃŽC‰§„Tö‚kâîD–>™GEƒ’õuâè cã‹÷8{Z<ZpŽ`DlÏ!s¿±ÇjØä¨2“ųù'9 Ã2bÕÈ°èЉ0ʘ"´tF®†ñÜ3t¨ò—N…Äð„¹¨ÆÍhµh—æž6œ)QZÈöa%:Í •<˳Š›âªZ€®|B‰¯®¶j2.R=‹¦öŽL®š£!fõ]V~¡À¬º±eÁIÈ*=4ÞüØSÉw–P4Ò„êMÌ›TÍê¢c@BdÉÒtœš¬‡ -—0y$g©*uâ«¡ -6?#uì’À¥£c©°hžÙâUÌ9<4X9O²º\R¡ÖÎL$qaÙ Ã1ì¬"s˜-Re{ä9+9T¨}–=ñ$!zcŽ?ÉUAüÜš+ÿùòd³Fþ$¬Í2EeA‘jdPŽrX§ôÕ{– áàAñb¶î“&%³ hmBÉlè²±Þ�Ç«gJþ(̵,J5„!&Ãè:§›b}Å5Œ:ÒWŽëƒš4±ˆeéZýtc<l£n†%ƒÔH8ž¨ÈñÞ‘A4¬I¨¦öl÷žì…¥ƒo™«8؉%p\á{mÂÌ-U#ÃÓºzVÄr+ù©oäÂÝ-@è‡c -b8„±¡Oþ'¿ú()Çùô˜ô(G~«‡n}ÛÉä÷®fƒÃ¡ -NÔTslu,,úö.—ŠJ`L+úm9‰7®·&¤{‘wÇ×KÃá°+†t‰-f“ª–Bm®t¡aOòqx¹2g.‚§@Ö#…7s;²l¿7Ú3¡9�ckSÜŽ9Î"þI€bdf¾•Ëc¦="[’¬ª„Z³IºÃ¡¶»€rP<Ñð²'Åï8Gñµës�àtêê;q€Ì9±ÃqjP9¦&ûŸœiQeé°Rî;ÄóéÊí»éaåÐhªª±1]€h"ëBñl)L؃¾#/×ñšº3Tø4}ƒäIaúÏŠ- ¸”Lˆ -Xé¨3W>¥_ŸÉ±¡l²xj×<Àƒ¤(sþB‰É±;Lñ½7ñÇ_aLç¤0½·ù½S…>+<¸¡å1-½:<OþöeãˆLoåÇžÙãr9ìÜ\ÝAï™ÕSm×Été5õÀ™I.Tʼ…ƒ6'{h‘Ó‚ò¶ÜïíŒAf˜v;Ó‡`+\PPËšóBøHõŠ+AÌ -Î:åÇŽ÷;dût¶©iç¹ z¿#‚±É Þ{>Ni&ëšha£ -äÊUs“\”Øwx/&]27¤ 翪Ó£궰|ÐjYì(P"2c\¿$뚘&]~šCuDC‘§xš\Z³ˆªfå9øÐah~¼*…ÃŽ³§½#{ÎÑšœ ‘ãÆ[¿¨†;õKºÈbŽ \>]dqHgF¤GdŒ%¡œ¡*+åºbZ#¸KÁûÙQ�Ešõ®/7"„…Khºýž=Cri9¥z”KCí«ÒI`$¡ôlºWø±ÚîªHML›ewB´d¢¦D‰h«JbGÈ£sWÙ]_iølTQ<!p·s%tæ°r…¨ž!ñøá2«£èX¡œ€‘á9Ì‘ø `¢1’È#ÑGAÿ~ÑË÷¿z}”£|ªdÄ©™á C)îc˜(D!ŠÆrÈOà_*ß@&I1ž°(“D‘äµ²:=)ï <:¼ìêâí'e2¯1£#}ð%5ÇЛ¨©º2‘Ø< .%\‡¯øzÁ@ÓG8,@_j¡WW86öTDõõœLa!TmWÖ±ôÎÂòÌøMø‘¬¯Âº?°”ä‚ÃMß ùWñ9FWê‰w–åSºðK¬<¤Z©\¹aÆâ›Õ%ð+F3P°…jLCœ®3«*H …¡&º1ÓÕ":-¬LŒr3ÞŒª�ª*P¢›(c,#œòC¦?@Ý@žlæP¨I;nkvà¢F‘x;P´æšŽ@~—.Aµ$ïooWb•6ÉÁ¨·UɱüÝÖÕ”íÈìOH¡ÁR%÷~e™Z+-ÒÑUd¡×l®³®¾s¼V•a§vªê…&”ÙÏâG¢OŸ-aì�>ÚoŒ¦G¹‹“øMÌ¡'Â3,«6¹œ™RX¨ý„÷ºG<jзí!G -s3cÉ€ÜÌÌ°ó�?ø%`ͦIRʼfDùyáIÂ^lÁ:«UªFTì,ÉBWKŸ‘C2¶‰¤pë¦Ç¬2,kIÁ)ŽøUñ¸H)‡–•šÌhàÁ ð5ûQ}-¢¾±€¡º2ÔŠAþ™ìå/tƒÇ È™o= x+º3 %9 >•IˆXu êv·ŠÁÚôÂ*C+½@‘ºy òØ;JMNbÍ©¥:ý9^equ·‰¦áôp¯ÑdG·KÍÂpÙ,¶£ø‘J1º 1ölk²ª†º¡R}j|’ÔËÊuß"ÿL¹î–šrÂq:œ!VŽ¹¬¾£.°š|NPæa¥€û¿!‚EŠ/DÄ(šËWM!už,~'/7éŸ9ª`žZ‡då<)ŒÅŠ8¦h±öâE}œ2.ú$žÔ¥@FÆË÷=ë²R)#¥k¡àXòT˜V{nkw¥5T7iH» wñ;Oÿ×\M°òB°¢©÷š”ìRÓDš<¼F5zvzzm*°MŠ¥gv[¶@€èuª-H-JmºÝ‰ä ‚Ks"‚ÝîXõµ«‹4LÆp˜nÚ22$ŸŸý†zìãËò¨·Ü ó•JZ`#<KM{×,².•$0&ÈkD~„ÙvjúÕªÇóPPŠùÔ©9jتyþY'õ¨)^)†ª %MŸµgs/;]Z$ð6Ф±k3¯p„°¿ÈÊ,ü·‘Xíœç´_ò³áÿ½;ˆlÒT¸Ô¨ªv³v0@ßõR•d–Êã©àÀ -ÙîMüI¶q`T¬¦qj”(KÉä�T–tgbé“3–Ê$@ D´ghb`CV…´Ó£¸!·á[X:å}òM‘Nd¤?À8,ħÔdºV;a¤MqJX©^”;¥¸ýÕ½ºM‰ÇSêÆŸ¦’wÕ\‰nMâdµ£¾gù(}õq½>M™‡…bXx¶¹)R{ -c¥Idî¨Ï-x&SävAI!ú@dOÏx¡%;óŠ¢4rš¦7~¬H(^Zõ=à{QzÎÀ’S -ù?þÜ!´ß±DTw*y™$O€V„´6à³x„õå®"¸‚r"U³j;Õ§>à¸Ü“ïpa”(¢æÈUtÕP»z¹¨Óq"v÷QU2ʤÎð³Té>"±¢7Ru˜"†¹k>ËsÅS™ÍʹHÿàœS´jteŽëþ ae7�¸ª~AeB5ÑÃZÎû“ž˜ôƒSSžµ†SÑ.sq^×ÉÚ>܆ú(ÌƆL¢ô?¹V\Ã>êyëÍßyTTE¼$3øV¯¹ 5¼”“F›Æ¥‡4lÔ¦óø¬ù¤€T·bÃî -âÂXSªºH:Züf‡kš?NLå bN3;-ÏŠÇ"þ‘>ÌìˆFùrvÑía¤{u‰º¥Ä§ß-âa%SÕ}R~{® ànž¬ªð -ŠDw‚‘FQúPE{¢Ñã—»Tw dÿjHjJPÔ„•€f´°h®gâvœóTv©2?ñ>®|ò›\'Á:»¿d:p®¬¦ã·m–G‹(¬ôhhe!{©Žï¢±‘~ÑJÁ!éOžeµœ%Dãñl¤×nZÕƒx¼jü÷D,JÕ‘Ãò¢¤ÊÞ7uU5Ju<,vT¿’¨ä”@©ÉâZet -doè«×žÃ`ˆ¥ñÂBÆÊa -¯Çc¯ç‰W¢]ùKåïG™eZlKõب%ʯ»µûÈNG\ˆ7ч•ÄLmP²/¹c0çµg_dŸÓ$¯ ‡š*/dv‡rŽ”l‰R“œ,CQÒHÅóIu<É\9Šù"‘>¡¸C¬ÿZªÛ.tXÆ¥ WÂz¬ŸöÌ…i<WU„¶á‰ù®5¦j“=ÚU}«&\˜LMÕzñ±’ {ê I˜Öû*帡#EÊÅsØŒCÉ,rŠØéú7p7É(÷)ŽÕP3 #ÚT=ÅÌúžeYg”EQr®æþNÌÀ³^šµÃpL·Ÿ†0ïôlLu:Ýù®2xº+4P¶ËÖ…®ƒåqª´•ÏYûnað«.;$×ô¨n“IX¾a§ñ$‚‡ìœ¡qO¨”«Èš0ûŠY>–¼ÊÞXEïšaÙ\ Jè -Áص×Á±–ñoÎJÖ³Ã/H`V•æX¥¾h=œÑ= -C$Ä´m7žšžqÄEO½.~Ed)Sx8+îÖˆ{ãg¬(¿\Ö‘ò”Ó¿ÏOØŽï8¢¥jOá)`ÙΚRrº^EGúTAGoG‡!=D%¼\!M¯kqÊ#N#‡;ĺt DÄ@—vmÇVÐ,óY–"l¢cgÏåkÙ‡S.‚³Y9^-ßÃ"ßq*mp¶cx¿)ÍÒêý÷s¤wÛÊ«åÄ™7Z]Ò¯›A—YùÊ{»›Öâ²£îÍD=4:°^îq1Ñîîí$âZÉüäðž;¨ODÛp¢WÉ(5ĉ2”%ËI#¾$2+)"S0‘W–�”¯1G+²Òcú^A›l¬ê·ÑÝ¥1xz.yè?ù÷œ_ -iòf2 -‹1\RaÇ1gM€pâð± nÖMR2‹Í -B«ƒ0~S`l×3² -Ž%J‰¬¶d=Ìr’P?™,ž_ö¸'õ5‹Šä.×ÿÇŽJÛ#Ó0–Ê©Ú`3c[±f‰Çný$[ÙQ!ÄVámB"EDŒÓ9¬v4˜â¬ÆzÞáØò*es,Mb'Ë„úVÓëÌíg[—%9ܬ<ߨˆÎѤ)öä,+uÒ´‰NL»Ä4Ž5ãƦÙèú˜¼³œc!3}¿?¶E—™Óa¹6·Ãgú(p(?iîæ>¶hø†©îí0Ã0ÀO”Î8µÿ]þ]éņ[¡ú}'|”q„¬p?À[Š?O¼Ö4ü˜œ&³ÈÒÕ†s›XXÄ`hqU‘Vþ¬ßvñÿ±ä»XåX“„¬Ôâ;ÎK¢Ž½íÒ¯6·:ˆp&¥ÉiêùÀBå5—U2j›ÖQ]™TP BÁ*MÔÕªÆ÷,Ç{{Ú{*Akü‚ȯÙ$"n£öPE]ÈbnVü>#é€by><)Îꔸ5Õ^í‚Œd$*AœCšÁñ™Í‡ð'B‘"°2.yí¸tä¾R9¸W‹Äkª†Ô‹ÚóQŸÈóÚcnÃðݬ‰¥D!<®ôâ4ô3K8\“Éz€¯~Ö¿¢÷_8Ú#G;*^mDÉÒP›FÄ´1DÑlF<n†vYμCTøÕU¾Åb -¸»¤Ëßm”g²ìÉ�íè<µùÙX®±ÿÎÏÎK ÓMÏ&3†3Ô¡/17;›»%Uª0.‡ƒûÄä¥bµ››]Ÿ@k›È³AÍnÖϽ ÙÑ—f3³I´w†“›j=Ú‹˜}ŒfW7Íܼl “¸qÙ@Õ"66§âZ´bÛ°ìjåÀ‹•ÍdcVu2ŠŠª e·˜o/P6d°â9;È�ÁÉf‰@á7 -òÛp5v@²Q,Í5Ù”2”òFd7mB6z«eóÑù«¨nñæc³ýšÚ2ã y8v³|ïÅÆ&�®•ƒÆFüI-õLÆÆêoø7&–¹àÒ›EgÊÍ1Øg(Æ.(6úÝËÃ8³‚NûUû0®†)š¼í›ˆÍ‰¼“M 6ë'¾.Ê_8ì¨zÛ<lB†¿m6ÿ\z6ØŒª2%€ÂYYt’°G åæ`‡I6û³¢aòkS°—{û½ ØX-°#b0°—š{%-_�l -j´Ý+™¯]Я—û ¿à׳;+ìk�":ñÜF_%æÖ‹|½¦zoð5«ÎJV ¼l(!âÍg›‰*±8éH˜ -_mð5,ÊnÜàëD:…¨”.¢KL€¯i‘ tÞl·îep€¯±~~B3Œì=LAÞØëUVì5úqh³À^³!co7÷ZÖ©zW%lžd±ÿ0„îqÅãͽ†uHAoî5Û„t—5z?ÅJoîõ2Ï}c¯£‰PP¯Q¯Ñ¼–ÛÐkÌË+{œ½®ÚÄë5C¸v¯ad -4x׈kŒœ¿mÜ5ΦIý·+™ÑàYa³®×0Y4tÊk8ùp“®±Öej'@׳©F60×(Û5”sC®»Û4mÆu[òØ6âº]ŒÃ=t5+3 ¸ƒ?|ë&Eæ‹nÝ—¶u›¦‹Ú†ýK‘uE:†rï�[GÃÏàZSç¨OiS™› NÑPëYÓ`Z·áWêFZ#¤•³"Ѐí/„“crŠóæYרü -œu}Bƒé¬=Ê!›‹86̺º³aÖ5j˜‚e ÃhãÛe}Že’5ó¿C_U¿,‘aåüYcQ7-6㢹Dc gìcû) "Å:s"“']ÍWO0B©ÒrcÆgùbX£>†kÇ@X’ÒÌ«&Á3<#7ÀšD”GqtÒCZ»¾º5çoz5V9Dʼ¿Æ|j0©ÙÅ/½ÉÕ„‚Ü€ëÄëàVGÙ¶)¥tM®+Ââ†V#ÇXçͬ›o^�ªqJÍ8Ç0HÇx«,/:ËñwÔ´2߃Šð/Xu<}°ªqœ,U}©š‘5Ru‹>öªnQHrsª[t« -Nu‹R’ÀT7wû)Õ,ù‰‘p¬þ”¶1£(ÿz!ªqF¼kA¨Y‚Uê¨nU±ÈO ›>Dó©aмa<5!Jln:5¡$ÄøN Ñ$Cϧ€HUM›)ZÝFS×fk©ñA3Swƒ©©y”eCuÐbc©KL³7•Iø›I]#;Hêtò›H]B[@j4 Ué¢yÔìHjáÁÆQg”¡$í&‚‹Zõmu^ŠÝ$ꄦäéô& -3{ªÓað¶“{/5ÊåA7…:ïâÊ€Kf“Ö·ƒº;ﶇ+Ì,lƒ×ÄÈhºëÁ!PsyÖºGŸøÓv/ü´kS}úqBjç1¾×ü…=ýˆéwÐÓÏ߃§áW¥7vs zoìteSVéèUõX•»½™Ó“Aèöí0§a±rz9ò"N/'ƒ8ÍõËÁMãÏ1Ó{ÏÖ€oØ4·*ùbM£{¤qÔ‡5í8ÝFMw•Òô6Ü émÎôrh"ðѦq<ÇæðëÞÊŽñfLÃALo[¦ó®úÀt¼Š7_Å�4bᥱTb{¡ K?ŒE¦ú¦Kã¹xia -j>xi|Ðì¢üÂK?„4–rðÒ¿eÒötøÒ ŒiÞ÷±à|tæñ/mpĦKç Vßpi¬²™ª¶ô¢¯Ú¾[#Ñ,ßÞhix¬h7YúáOV«à¢|üs~Þ1ÈÒðŠêœÁeøL†ºØ‹s£¥åH´ÉÒ(–ñ€¥q«’åŠ>ªÍ_Xél"Á¦J£!ýÓŠ Á�ÖES‚‘î^µ!®3VC•WÍ(Mþh·SúoU²mž4”ƒÜ8i«4¹QÎ#Gß¾—$·9Žu³¤áv÷Æ V…åáS×Ê*@B_GþöIocp¤¡ˆ`=q`¤y‹R}S¤‰9)ã@¤‹‹’6C[0à{#¤aäC ‚4„Ϙ ³·6e—8â84=º,!Š7<šê6ú”‡]C›èhMpùDhЄ(‡¸ÁÑXcDWLûchdÀJ·á¦F£¡ÑmY}Ìèïœêð¹1“w1£Õ—gôÃŒ¦NŽe{ÁŒ¦B2ù•±€ŒÆf"‡Â -cÆz.b4éâ>ëåÎk£PÛx£ñ~‘#píØÕÄÀhþ=Í'~n}HºÑA*—Àh‰‘Êb4¡,* b4%•.1šPæÐob4b›ÍÇ3z;ÄhJW˜w»‘ÑT«´272šJ†£ÍM’Û‡y=ÃÅŒ¦Rõiu#£¡ÂµðFFS×.°‘щl_wRäÛMa3ƒ¤Œ†…„͌ɤìÓ/0©¿ÒFFC}¤Ìa £©fìùFFS]Æk £Ù0ƒñU#£iàk~#£%Kë‡M–l› ë_Èh\’ ÎŒ†P[1ï@FSŽ¤Üë…ŒfsÝøŽXkÍØ•2‚FF#.ÑŒ© µ<gŒá0z5 ]7/möÔôñð¢W‹2f£¹Ñ8¸h…@Ï›½f<Wâpcä7`ѸŠ¾^°hE”¬htr'_3PÑäíª'@шˆª¢9ѳç·1ÑÔ¾d…™7%}ºÕþÑhÄè4#»Uc¤7";)›Í Õ Aˆf“oæ oB4¯8?Jj('õ¸GÔ&D£êµ×ñíˆ^®lÝ|h¶ÖvÞƒ Cvý½yáa+®h&‡QHXhhö„¼2t¢8!Ç &4AA 4´fwDÜhhqàŠû‘²ÛyKÇXÔŽí7V@› Mš½š†€Jo64¬M -64 Î AÃgBkÍo/64Îãm64KTÐ ¨jæsáYNAsÀ¡Q¡ |WÀ¡yƒTeyÁ¡“Šß×· ‡f¿màÍÚ†Çt˜ ‡fuÉÆJMã@‡¦E/84•¨R)™ÍžBÍ5•’e€Ñ]F¸ñÐR§’œn<4·#Ÿ(ðИŽÔÞûÆCÓ«Q«Cã¡Š5ðÐ°Ô <o<4¬r:Œ‡¦ÑÉÀCÓ¢æSš±8V…šÎ– ݃0·ÍÅ"AˆN„þƒ/NLs+ô!ZV~º&DóXª_!us¸ Ñl‘BÑB¢µ03ZKá2C}¢U<Õ¤«›*é)žëÍËtÑÿFDS¦-ž¼ÑTrë³0"š}�#šVŠ.‚-©|6 zf¢Áň–0^‡ÓjþÈ2‰žˆèx!¢é²s ¢qË$(D´¢_ÑŒh¨¶Öˆh†38Å#ZŽn|G0¢ÓigbF´£#ó0¢Q™ïØ¿ù¹JùiÁˆ¦¨äv¬X1¿~EDc1 !Ip$Yi£"P"¢IfKÑüªËƒÑxÍ BtjÑ.÷"D³|Š*› D³5 4B&DÓ“Ï©¾ Ñi‚-ËáC¿ØkŒ¾OÈýƒ$ Óv‡N$_<É¿Ä·›M+¥ÁæCãø’œ ÉÒo@4¬’3›MƒÒ‚DË„׈Æ/²5U𡑘d> ðÐÈä¼oã¡™‡d™Rð¡W·Þ1°Ïâ" ¶éУDFÖƆƒ ÝQ-îìFCÃø˜ÝÌ™¡v††”z*‚µ]{¶Ó¤ÎÚT襦±U¯Î`ÝLèîÞ× =’VAzF_mN17šDåU‘½±›ôáÄAoÃMƒ>Fà §çó yÌI\ -z4‡Å÷VEØ›M‚Þ†}Œâ@nõi` A• Øí¦@o$v@ zfJ(Ð0¨yÝ…€ÆnÁqfðh†v'�Ðóñë~óŸG´Ø -ü3 .êhü3¨%¢S^ôg¢ c<e³€ƒý<’Šù¦eÙ!@0ÔhéeÂ|cŸÇé\SŸ‡"mè3¬½™ÏÝ~Èf>#�Ê@>øhòy#Õ‚ø(ÓÂ|'t³°KLc‘‘ yì&¨iσ8…7í¹'å}ÍzF@–iý@=ë‚e¸sªÐ3ÒÝêÇeÎóð*õ…yfßçUå¹kåµÏ= ›7♧Tà7˜0Æ;ãïbï¶}„ù ¸s¤n°¯£l²sÌh€G¤‚â¼Çë`¢ÊxMuƘ—n„óŒ^‰7Óyv‹Ñ÷VËÈö :CÊ×Lj 3ñ–³ž3Ý7‘8ç’ç<ƒ4gÔ9090g«ÙóB9/F²Ë!9c©Ì¼—AÎûï›ã|ŒÆ8éý…Y¹5‹‰}7Äy')ÎXK꫆s¢¶ÝÍì6ÃV-`"êFõ Iš;¯Žå‘áÌ»…/¤MR–Á:‚`8s~è‡áŒTÓC0œÑàÝ¥ºHócMÃâæ7.\‘oæ)ñî¾™ý3xË»ˆN#/:øͬ蟆`«³`Š®Û7¿™Ï’…æ7ó•hDK¼œ¬f|ñ›Ù&2®@¡nxzÊpþÞúá7ÿYÎŒ’ruœi¥Ä!�Ί–|€ÍªYÄ…pf¸Šú @8ã¹úŒp‘/ÈMpÆ•«À0Îg5g}ÓSè ̲ã«}(eÖrÔ_¶³ìvFÚ+f)Ë&8à Õ@œY<ªŽÁW)uZœñÚ Úg¸v”ÝçãÁÙ¯gH5Dx “b(…µÎ—Õgvïeè?ΰHv3œ‰{ â(ΉXmWЫ—8µ^n†3ÞX«1Ìp¦.OÕ¯f8ãùªùf8£:D¯@8£TK¸tX/7øyœ¡.¾<=~¸Ñ:‚ߌ÷„ë“›ßÌ�‡ëà73À#.GZšk@OµníK'Å"éà7ó'³„;ßÌ@e4£WÉÙó( -¸ñÍkcûЛQN#¼²áÍshµ»ÙÍ,¯á™_èftƒÚäfH'Y©àæ•7·ytmQ¼ÔæÏEmÆÂfÑÌ È0Ù6Í çqÞ¿‰Í£AÂÀæ1\m\3aÒZ3ÚÆphZ3e,ù7¬¹;øøb5ƒÒŸY š{q냚‰õ*‡Þœfv:z„sæeá0|ƒÒÌîóCÉä–ëQ¥ÕûÂÀºH\E}ÄH؈fvy¯ú¬€B¢ŽßR�šA]£z󙑽#9ðÌ€0&tæå§7œ²©QB™_x…f&†a…ºÓ¢aè}X`f¶úÊåp™Á¦ºèÆ2£WkS™[óVeƺˆ%†7“F.@‚ÉéR3G™«fˆ›DJ¼Ì˜&¦"s«.¬½vSEëÍcæRŒ�s[öº!xÌP–p–¾q̸þZИÛ<ݽ9™ ®JíÆ܆¿´`1·˜½ÅŒó)f4î$8f˜‰SѸDmºÛÅa†ó®å¿)Ì85A"a†Èi¦õb0¯X¤ƒyµè½góêN_fh‰UHk�óêþñà/Ú†¹uÂjædøòr.`³—aˆßÚèe&:¸6ôr$#6y"/R?nðòÑQÁÜå€ÍÀ.¯„_Ôe$ZôÞô‘æ@¨™¹þ¡þ¦.Ó*š¸ep‰\+îì=VsLnê2¬‹ÿA]&#Êï…» Ê ]¾gè2,B7t9%º½ ËZù¬u ËÌ7SvÐe¬,;|zøvt™i^Îi]þÞƒŒ Þ¯]^n6õb.¯%ÀÂF.£jžõ1A\†óŒ`ÞZ#¤c˜2 -Þ2*M6n»1AuÓ–Y[ky09Ê -(^ìe½Ïi²ä56÷‘Üà -_‰³‹´Ì¥uAZæ‚Œ)ü -3ÌéÒKf¨Sàiƒ–yfê’7NTÓh»/{vCyÕ?ýŒ(ñÈ.=¹8ˬçP½•9˼ìÁú*s–·åæ,cG‘M‚³Œ/’tÿÍY†WUUµrq–aU;ßà,ÃB)ï-Óç#ºAËôÒ²6c‚”•¹ ³Ì øÈnÌ2OŒ‘äÀ,§Ý“$0Ë,á {a–i¬î š,š„Yæ Çb”³L3[¨_´¢H*ÙÞ˜eXT¦pc–¹ÖœaÌrb!\‘®W'±ƒ¥7f™‹bꡃ³Œ•,k@³¬¤n©oÌ2ã&$uf™K$u‹0f™l´jÙ牸çÐJf™l´éÍøhsPÀnÌ2Õ$ŒŽ³LC1T™<î(Ôó…YFÆÒ÷ߘeÈAÔ¹)0ËØF7ìÆ,Øcˆgªs9\¾‚Í´ƒ¹!ˤi±²foך…öAYƺQ/ÏMYf|™¬Ç ,ÃÇ”£”eÄ»)ËâÍq(ËÔþé4e™Jéoʲ””}ʲW„‰˜²Ì=UfuQ–"Øö¢Ô=yµ”e.$¿(Ë’O®y(Ë<ý(Z%e,á/.È2ŒþEA–æÒ‰²LB7dV±þYæfº†,óØÉm%6d™«±Y‚qY–Ñp†,à Y¾¬†,ãe x2ÃEJà_e,åÝíí²—VÁX>†±¼AXæzN¹z–÷ûú",3õLÂ@–YòNÕ@–™<ŒÖ[/Ië²/¨¯ÙC®–DXf0þŒâ)Õý4Ìulβ`™ÛpÅ{–%Hžé–䘇°ÌHÕüX&¶óÉÑ® 9/DäC�–ùõEFÿêfSíx`–^¬ µU¹S/À2cC$`™Íc,Ó ¡ÁEXæígÆ:ËLuS°ˆeTÉy#–‰¶rwRm¡2ëêhÂ2Æ:µ7» ËÔuähžÀQ�®²ë&,3fRR~#–a%|#–iáC -Æ2-(ÞŒeªœ`,3r¢òê—éžc™mv/ ÇÌÝÙe&ÚˆÞ1ôlk@–9Ã^d™÷Œ½åoÊ2¬zÑ‚²‹”RAYæ6”@Ý”eZù¨‚²,ÂÞ臲L¡zy\%o”F²ž:(ËPîpXÙ”efgèÐÞ”eFYq”eðRôd¸lqö¢,så”.ã -5F@9·áF,£ITè#^ŽËßyõ¿ê·ûi£†5CáÍMß6^O¸L=bÑ•»»½àÊÝÌÕÍVîo´ò4ªáEVžŽn@²ëÔYyÆ;wƒ•'#q÷^bânªòtyɪŒ¢1*ŸÌTæÒr •¡a¤ú&*èv•¡Ýâ âìú×›§Û4cYMºø;Sfi•7K9»rf³”a`;@)SSïø†¡‘NUŒPÊèˆ1VºNpÅÚ÷)£p`Øà(ic”K4z¾)ÊN1Deêƒë<eà“Ö \Z8‘æ'—hÊød&˜œ�Ýôd¤¡•2<ÍŒe†õŠi7:6Òø‚œ\Bèàdä¤Myq“Q -}s9½"Õ Œ£ß ˆ}A“k°ƒ™Ì¨Þ™½³Ä71 zÝL†¥Û‘§¤¨[;÷Â%÷'Hˆ¦%c7FÆ–Œ34w³’›%k•Ü¢çf’›g©)-î"±@R24,Lõ™“ŒüóпïÙ”«¬GßV¿Ã$¦`$£«zWX|WL`Ù—C¶…e˜‚µùÈØ‹ýPn<2.Ê šŽÇ€ö€#C_§’–‹Œkí®… $••¦€:U0À|ƒ‘U1V¿m.25Nó0óÙ®xA‘{´ &ò.$r7ãEDfË@äS¬lrqì‡\4dz™jr+ô,d‚V¸bQE~‹¦gABn¡V½AÈ0âŒÍA&{…ëcñ[lKqc«‹16^š:C:ÉÜõÒÒk3‘Å`^8È Úð;r‰¶ë7�¹ìæ}æ£BC$MãI33ÃxÓ7Œ(àÇeÄÔçÔµÞèc¾v–†q^[Žòí�oÞ÷Í=FM™ê ]”S²§%Q3RF6_Í…§ -æ1ò²Í[©—_‹óç.UÿæÃ@ˆ¾pÇ9cÞ´ãÏ4ÏêÂ;®&Cë¸q@UßF³µB1b~`‘kŽñNgãŠ7踡Òí©§¬Ãæà'dÌ1¢KùÈ›r¼˜Mß6为“÷f•€¾ÇŸ sYð&Äqò´„cëL_|ãÉe”˜¶$ÙY²I°¯“v±.L$-)ª 7ž^ÈÜ8âäo´±t_‡l<¢UÁÆ9Zܾ¸Æ]Uklaâ¦3 2Å5fÒ#ª±ø5ttñV$ƒ6Ð%aË\òŒñ>{!¢¯„cŸÖ4›f\ì5Ì8‡,cÖ¨{Ä ”1êݺª-é)aQÃWrsŒQpf”ò…1¶¤;(ÆA‚t Æ\U±Lõ†KA2Ê#‚úY§õC1¦œó KÈž¨íXC�K.ãƒûÞÿþ5½{Œ¾#Ò¦×醓1VÙf·RÚaŒ�B1u’^5pTóÀ˜ŽjCHå¼P“ຂª½¸egò.vqmÑÅH·Rïäbä(¥¿ÀÅßãØ9Ô¢ôpL$FÿáHì¶x¦H.ËFDlZ¼’/f1Œ¬šdñŠþA,ÈÕl}%Ï©+F1–‚wÞ -ÿÀtÜ +žÓ-‘ƒU¼é¼ š‚îåM*=š0B(Ì\\pŠ·áƇqSŠ‡gðM†ˆ—«ßRñ96Îd8©ÅçÏ‹PÆ (&\yÕÃ'¹ñÄ#‹d:ñhÎX†ižîñJ£×w°‰G¨“D<šs˜7™Ü©@ãõžý.1>›Þ ,ñlv¦KLC¹°ÄŒ_§7”xÉÉLâév`$ŽÖá7Fe§Í#†&“‰F㈡¾ä=¼iĘ0b"™3‹xúC}¡ˆQª”LÒ951 1ÙÑó "¦3QpˆÁt¢‚ÄâUì�Þâu·E„ÇBÔóHBÌ’»üFÏÅWˆ‘¾W¥†ÄÑlýÅžÁQ üðò²jÓ‡Y%Hñ›5½ÑÃ8¡ÕxxIv_Üa|n,–ìðŠR˜ _‡ÙÌá Ù@O§¦6_8†pjWÍ9¬‹#<ªÇÒ7܃ýFdëØ05ç³¾YÃH =n:ŒPþNO 0\6}†‘˜ŠÒiÑ%6f)®æ^u[ËÓèÞá…eÁÞ†1|Œ&wÃ6ßKÚdšíŠO|®$(h -ô"=•ê¢¼\ä(µ›-Œ€•Fc-”Ó,ŒÕT*ýp…±æ -ü0¿²j1Á‹*Ü,ÊØPa`†Z;HátëC† ‰HÉ� -smæÒ6–5“\Zæ'Lo,µCÖJ¶˜0׺#¿YÂX/£‰y«aPA¿QÂÕÊÌI�©8o~‘Ûᯎο¢õÿ?Œðwxà_8rýöþÉþê>0ôÉÿù“ÿãϧøñ/~úãÿñwÿ·ŽÝžoÿàŸÿîOþügöúoÿì÷üÏ~÷—?ýîumÿK¿ñÏþòwÿןýî¯ÿøŸÿÅ_ÿ{Ó£ná—~àþ³Ï)ý÷¿û³óoÿêyɱé_ü»?þÜ ÿî/ÿâÿÑmüÝ¿þ«ÿäq‘Ÿ»òg¿û÷‹küá/þ|_#ªº?ÃâßxÿëŸýé_ýÛŸ}–ÿø7ÿÕ?ü'åÿñþÔûáÿøþâÿìó’ýÕç=ûíoeþG¿û7Ÿëºþá7ôïð/Sÿòþò?üûÇù¯ÿèwýÍ|KÿÍožoÿðóÿò¯ó~óC?ßþ‡ÏüŸÓ_«ßþé·ÿí¾ý)¶üç¿ùíXÃñÿ~¿ÿxšˆ|?ÂB¥Ø¿lþìòã}œó‡Ï±ÿ§ßÀ¹f‚ëþ,ë?°ü„4@¹ÐgÉ÷Yyá?>ãp§…±¹ù'<&©IàÙ&v»:KRaÒm†q -{õ1¢Ú ±=ê÷Óo^f‰ãó¯ƒÒñù=¯#€%1–úïm“bO¯£ãë.ó>ÙsÐ몾¿?ýæ_ÿX¥LQfà í)˜XÉ -ÿ8ÚŸÅ/òà(?Z(áüÜÕô|û§û°q¥–JºµþÀƒ>f±¾®¼³æ¡·±)ùÁ+»ÌUŒˆ÷Qá>}^÷ØøÓÏŸØŸ®8þáãy|dÄèıËmöY°øn!€Ö{úblRí3¶¹±Ü¿½ -JD)ßÞg`ãO?b>ãÿòúþÒë[gͦ¤MFQ>knàkPHPñæ~Æ�‚�û3W'8�…Æ°Á‘Áÿrc‘vG]Òë’—C÷¹^¶û²Žùºç ×Í:'ðº±(qÇ’ã½-Læ—ǵïG{Ìç-ؽ_—ïîÀßq\ø-Ïdˆþº«8k(5^¿ÿ8sŸèe»¯é˜¯ë?½îÔ9×]Å/Àg~oÇ3y]ñý\ù¼û ÷»òÝøu^WêÔÚב+Sk~›«‘ ”×Èuï‘ë2Ÿ‘ë:ê¹®3¸G®Ü¥Ä~o;Phóõ¨Çø:ƒc¾Îöõº®ïîÁO$“kH¾ÜÌOùrL•ŸÇõs—ñ>µË|.ã:ê¹àë¹n ÈøÚµýXx½ŽzŒ¯38æëlÏQ¯ëúîø朻öš¥Ï3¾féó6\³ôe¼géË|féë¨g–¾Îàž¥Ï3¾·ÝoÃ}Ôc|Á1_g{Žz]×w÷à»7çusÎ3¾rÞ†ëç.ã}j—ù\ÆuÔsÁ×Ü7ç<ã{Ûý6ÜG=Æ×óu¶ç¨×u}w~úê{®öëaëË ¡e|5>Záq=0-"ŠþögÈœ[_f~¿¸÷¶Ç8G=Æ×\æs¶ç¨ç²¾»÷ òLº÷==ÂùñãI\gyï+ºœ‘sõ—+sîÓ5éß÷ôr®m'q=©m|?Õc¾Þ€}ÔëUùz~•éñ̺÷m=ÂùýãJ\'z¼‘s._æܪkÖ¿oëå!\ÛWâzXÛø~°Ç|½û¨×ÛòõüÝ_Õóöヱ¾?Ÿj˜_5É¥öŽñøãË�À–LÏx�Ù"é÷÷gã—àÞö|Ôç¨Çø:ƒË|Îöõº®ïïÁ¯¼øxÝÚóÅ^§p¾íëd/ã}a×ðpnÂ5¸œÛu}†÷½¾ØkÛóm_lß÷˜¯aõ~e¾»¿æòãu_Ï'{ýþù¸¯3½Œ÷U]ãù×èrîÕõÞ÷õúd¯mÏÇ}=m|?Ùc¾Þ‚}Ôû}ùîÄt^U˜ðÅ×)Öü|hA ;xy—ñö4.óñJ®£ÿå:ƒÛ×ùþÄ"øñÝz‡‡-_Ö;<-Ž“|o‡ú2çû:êqÓËwK×ïâÿ…ªÿøú -ªþ§ÄZËß-ÖÊ;ö5ÞzªxÁ~Áè]üz¬sý;Ç{µqÚÄøóòì‰#+¬g³' )½®N_lBNîiCV®ÖGýö:&×õ3{ý~÷´±Æø²Ý¯£ã}—uŸê9æuMß_ÿ¯6iàß¿ÜÖdÒÅëènðñžs½l×UëuÎ1¯[u~ÿu[å˜ä/ÛfiÑÞk_ÏõXÏ°y¿*ß]ÿ¯2a°,ãË=}\Bóú}^^y¿ª—íº¤c½®þóºOç÷_÷?P{ÿ²mV6ôý¤¶ñõPõ<þ}Ìû=ùîúµhÊž<\–ubóo5ÄæQcô.㋱)=½c6WUƒ¼Z¤m|ŸA ¬ôoõíüîm‡¤®ï£ãëŽù:ÛsÔ뺾»WÌ¡ÉÕ½o'Ïöå œ'{zÿÜe¼Oí2ŸË¸Žz.ø:ƒûæ`ªŸs}ÙÖõ^ï£ãëŽù:ÛsÔ뺾»¿ÂÒz¿{©r,œáßoK¸¯gÆ/o˽í~®ƒ[ûú¦~,vgÎÚÿ±ìc'výè¹_¯<÷öÞv?…ë ÇÖ¾¾->Á_ñ£_ûòчùu{x «~1úr¿Üʸ5>ƒ¯F=Æ/F=²û¨Çø:ƒc¾Îöõº®ïîÁwýë朇}ä<šëç.ã}j—ù\ÆuÔw Ñgð5ШWèK ±~½9—ñuÇ|í9êu]ß݃¿ûGOǶ|w_‘{%nêþ}diñb¿Îô2ÞWu™Ï¸ŽúÎAû¾æ ß'vå Gßúþqì”o³Ï¢ÏöP/ã=ø^æ3P_G=Cúu÷ðÿý‰ý*ÃÂñ†åé}]Øúòðéÿ9öŒöÿ¾¬ä«î(²WöjßÞ¸_V÷¶ÇÅ?G=Æ×\æs¶ç¨ç²¾»¿NY®ð}O×~~ü¸÷×Y^ÆûŠ®Â¹úkyqîÓåŠß÷ôrÛ¯m=©m|?Õc¾Þ€}ÔëUùz~(²½áû¶Çýüþñ𯽌÷E]k„s®Æ¹U—7~ßÖËs¿¶=.þõ°¶ñý`ùz öQ¯·åë øu¢È=Âls¤ï¾ÿ0¿>êâÆo#bm~�Ø -c–÷�À0Û—¯¦/ÿÙî|ÎçxÇøúíË|Îóóº¢ï¯þW¼nêùV¯S8_õu²—ñ¾°k`87áVâf]Ÿß¹©×wº·;ßóõ¶ñý@ùzøû˜÷kòÝÕÿš€×=Ÿéõû烾Îô2ÞWu ç\#JÜ©ëË;wôúD÷vçS¾žÐ6¾Ÿæ1_O~ó~G¾»úŸþöáÍñ‡?üÉï÷§ßÆ+´ù·nÖ‡}`kþ¦ÿaæóʬº¸Í?¾Í þôãû ¿`>ùOïך¾N’}qÖ9wdhÎÀšÛøù=0§elÏj2&iÿàô§zÛŠ¢£þç~„ù±%úþçÞ§ÏqS–ybO{âž?ùy§llåñyÔYâ<XÍéLýó Ùˆ$]*cdLãñ|†s€tÁ|â¢úêN0 /£™êuÞaß³\¼å眆?ÛôñÜ}ß”Ïîê¶àú”Æ6¢žÎ×äþÀ¡/çúÑêا_÷õƒm¤œëÿò~УA¯õ‚B‡=Dž¡G�N2w=_Ò©âyéC×bï¾-ïCú·ÀJNñžÏz@¿…/¿Žî†j#Vüb֚Lj†Ã4öéÛ�ó{[oY1ëꘌ,þÜïlj¡£&ïç�}ÔâC—hd€œ6~> Þ¬¶ÄÁÿ!v/+Ì]7‡…X|“›ªÀ¿ýìïÿGŸN«ÓWÇñ|Z/ñ|rí~Õo3°c}þE”Kÿ€O®Åh‡ê›á²¡¢ÏÆ=8°.Œ„Â{Kø ?ÄþxíeE‘_tƦ(—±qÆ'}}é0ÇЄ m1Œ±ÓäÏ^@ÜJ”ä¤xIZ®¾•(k=ÌiùVâ‹í~v+éË‚õ˜4²„è8#cbMÏÏþ\Œ…¨‹—åã_ußá‰tnfê½€1§îg‡ñËÆÚâÙ}‡¦Šn½íhÞöA[A³(�žx#CŽÄã|ô´cÛøÇÏ^Ây{>'9uÔÞÅËÃúSYÛ¨ž-\5)s_ñøY³/cÈ_”5Õ>²Ã~f€™e®`D1¤S [Ë~Fˆ•øÑÝæ †E쟫íô}<3þ™:_´“yP±¹úg(&Œñj/¼3û�þ¶ZÄÿ˜< ïmçØ?–¯ÜgàS»|ðŒÒ’9#§Ns[—‡’góóhë<?Bö¿3Í°?÷sþz5?’ªGšE~ýóÐøØIþÞ˜[—_ãŠL÷¶lñcüf~ö|‹@¿›1&°âïmþ|A>òg¾ßd´À—ÚÖôÑð«# Âæs0keL Ð]³ÌÏÀùÀØED£#fÅøÂÎÐØüÉäíôÇ.ŠÕclnÉÙšëÛŸÛ*}½éŠƒ~ùõsþ\ðïÆŒAô;ãÇyýWqÏA”Ùã°Ì«Ä�D›ñÄ<÷¹ó—n:Oäá“+g”߇9 ?}VÓËø¬êwª§„q<1?Ýo6͹Ķ£Æ¶³ÅQ«¾ÅïÏ üŽ!]Œý�>5æ@â´yöäÃ|VD aÌñiÖü³Ç{-ôÊ×Ö¿·Ù>·©KùÛÜXŸ@c+ûÈM³Ìyµ}j{Û¼ÇÑyŒ)Ç8¬!Ó?†ñÐÇ-%Î Æg01—ÿì%ĵ¡+Ñ3®Ÿû}˜Ÿ3Y}î…Œ}ÅÁå€#îªæ€ð›smóv9óÜ@u•¼í?{b?z–@«±Ç¾ -ý‰ßÛœžäÅýBKñ=ž\èÁºR¼™0çðX/"cõ„�ª×Èß~ön?0~ŽÎu4\nïζ<ní† -›K,2ÙêÁF{.8Àk~ÉqÅìnÆnGÊŸ½‚ó ÐÙÔ̸H›‘y¢À\f,Æ~´Ùó>Ìs¿˜ý‰Å?ñ³Çõ–Ø•/eæéÀÚ½NX<þ槎ë‘ø>6ŒOÿö³Ç+l@_}…Àgu¯Vµ¤’q;Ö‹‚?\ŸëE&×Mfàäl!ØØßW~âñ^ðÃÏŸØùKô‹È—÷[È÷/ý¿ú›·}÷ùüàßûÜQkz».¿·97M’0ON.Ävïëñxñ1–>V|’ÃÓ|cÓ_ßæŽÞ¤Ú6¼oȲíÉÓ¿”zŒ7h!Ø9vO<26´E×o;‰îb&c»s`ÅÐËÆàËbc‹Ïq=ZÑ|¾§Ï–|+[Ž%à\O@Ÿõx¸ rT|ÛÇö>('—±ÇÛÓfË?ÿ€â�”^ë‹öð -£·Ìç×cçô\ÃßÔ aLZÆÑ=ø¼ðÓÆÀ$þt€¤•`ÝQ/#¨€„HkGçÞy"´ ñ¹ühsŸq®œ}€ÞýÎæÕ¾7¶–÷a½~aÈmÅ9•^|¥tšdü\Š/*·½ûçþĉ9%‰ -¦!²û“I×KŨÅùýµ×Õ½ï˪ûk¡;ä[5ËåW?k›umÇÍO¬SÒÐøƒK¨ñ^Îå‹E£˜¢-O)4_ïåã+CÐtÆl™öZ‘•HW�MžjÜïäÕLE iù´Ø÷IÆêøè™ií|–8{jnÝÛf@oô†æ`ðR>SË·ðÊó>ÀÇmˆ!£1ï-©—qc¸æ²Å¶Å>Piñ¬âGÞaÙCFÕÒµg@¯Ä?Ôö–½×}€œtñJêÎÖ©Æú±:Ãøô']Æ8ÀóìGó¹0_ˆŠÕ‡·ÀÚg/8ü‚Ö~]Bƒ¬@Çí×kß³¦H4ïêq£ó–çåPÄææˈw\¯z„íg ¶Öý)bòwýÎÖØÚœ¾®„Ù=ñŒ$Ü“7ÜßÒó¶Žý-Å-ø…ƒ>ûúGŸgÿ:ÂÜzñ¶'&ϵ„·\=f£Rú>À‰ÒÅZ´îu^8�yaÄ̶§¾´¿Ïƒ>ÙÏíþÑæ’b@f>LFrZýÙù¸È¤Lñ ø~¦™È13^°¦$pMkœZñªƒtèÈÌ\‡Žâj¯AŽãÇjª.8ïe:`[3\êšãŽ@=ãÊ$É¡1—´ý²Äç@®ÖŒxLŠWH¨VÂŒ ó¬#¦ñí³ðÙ'"‘ÅNäH{Ælæ¶=ÆUE=ù›<ÑšÃéqhƒ]5⩬;rÄ<Ò‘ÉüÁû§±æÒ¸ˆî{TpÎÆ'æ†gø….è4ºß2D$´ùŒ¢ZóŽIò+ñc©Æ‡²Ûè�ñE|f‰»ï/]&n³Èç´rŒØ}'£–FvlÚb Ÿ›Åž…\÷@z“ÑÍýûŠmŸgnQ³ú{ìpßDeˆ€XdõíB$÷G[Së~oéTÁ˜Œ«rPÆGµfq»ãº’8mögàÙ#h+kÆöbôs|OhÍÙúmŸx¸Œ÷ †kÀU[</>Àv'kÆ>n8^LÊØJÛ³ˆß‚'–ðØÂ%g¿Î=¸ƒœ'Vö´ƒ3{`Ä“\ŽòE#Ý1DG÷qs‹ã.y y©³4·åP!cLÛ·÷sÑ’Þñò‰¡%´p8E—@uÃ땧éIä˜ù1zÄÌcŽÄÌèò5AOß_.‡@Ñ7œÕ¶"œ“ÁWŽ`Ÿz8ª2êïר³֘áAC˜ö¬eßhèíVwøw2–'^º£öß+˜ÌÑjo:RŠýOi®{�¢±ÖMqk–ÜÏý‘ê¤ÐÖ"^£ãz®JÃù×´ô–Ÿµq/ª‘Øh3Þ®±d¬iîÏf –q;3q€:öÍj±Œ€:²‡Œï6´~}ì7Ä,h`‹+˜}ßXŒƒ{"Äû£Í%?±fÅš:ÌOÊÛOÒ›}î:Ä#0ãlb -ù|ñÐ(&¢81z /Ÿƒ@V«ðm}y«3œUø¬?¹á0-žçdw-^œ¦`±§#d®yh˜~´9í›4ŒùkL}ò”ÀqwH0O!~>Íî˜q@Æ‹üiD¤ µsŒéP‚ÀVwx'³ #àÀë‡pòJl챡x…¬fÆgNOJê’èn=:Cç8ÀçAØ+Oî&ê •A¢^)Çœ¢àYíê¸Ê›Ø¼Å xÖJXSsH'Ž4Ãÿ}¦ø¯ü±œŸ"zí[Í¿÷{ýìÇ7ö覘¶Ý®àš)[Ï|·â�O‰Ñ5gž§.îɨaìÏÚ?äsyŽ‡ˆá9Ǧ}oº4Gá Ïóô³"6†N§ç]-ñ[6<«GMsû?=æv,™z-Ÿ,VE1£RðÛ_ïøUöd 1óÃg—…ƱVë;lòœ17Käô[ÅOgßÓé²m5ÁYo"ªºÉ;R¥B¼–1ë0_±c ëÊBÄu]·»ì…¥Û^¨ŒX<�´×Xõ;pŽþ›û3â¹ÈØ}¯2úEÄ0ÙD˜/B÷hü¸ãù˜@`sëqÝkÌËÚùí¹ïÖ“cÿÌh½ncÝÃU‰õÄs»Jed@Ûn•t!hÖcÈhC¾Íiíy§HR…ÎNãÙÅ -ãÑdÍÚ¡gëÏx`š3hL`úz,”Òk¡×ÃŽØÖ \|H{U7K÷¶½ö·øØ{×æ6r$Qt?Ÿý‡Ú8Ñ÷ºçŽè«P5s",¹íñ®ºíkõkbvBAQ%›cŠÔ!)w»ÿøù¸™@&P|eK"Õì‡ÈJ( $òàw;‰d ԙƢØznW‰¼i�²J©&Ög¦#.Èüýº{ÌùÜË¡V�|ÃÕ&"öKò^$;GU$Â@¬”Z› -ýdÙ.*"›îìô@SÕõB¿/)˜?«Ë¿«bû/u¸2b™U‘iÜð°leb¢<ÅSS€—]A«Ë;¬U†L˜ÈÖåÔ€I`EÅeY„jßjä6-ø2QHÝÆ…$u¡RÁ=�î&"yï’£‚Ñ'AH*kçWw0h,õ�.ôS¬È þp%;øiïõ‡®^d´‘’VÖxÓþHÕûŠL»˜k<e¢©ÔR† S",OÈŸM˜ÑìÈT)ïRÀìGgy?‹² ‰œl^ÒxÁ›†„:Ô°pdy0´‡ÀQ³$M,[±C¥ (“<ºÜ6¡¤"ß&â™Lâzoú‚÷™*[È�~[E4 °MÁó@G~ -e‰Í=wâ*(¦ÜË@ùèx©®/iLÉ/ûQýp11%óþ*øŽAIÖ²³\®Àê6Yž(°ð¨Xg@ú .È/Λ/<"àŽÅ0×ú«<è”|# -4õhÙØ TD'š¸>€¹ ¹ôëۖ{‡/ü&áýAØö`¦IBøa0j?® }4ÁøóÝž}Á^JDj¶´céP–䘄”Ç›¹¡EÔ/IóÀ‚·† ì ‚£OÖÒú,ÌaP~a–ŽüÓʉò•9z@É‚¶=” .Ez Hñù¥eÀ ÈÉDû¦V… ²˜L>�™Ìë"ŒªHœ -ÐÖ7`È“¢ %¥&G’Ç©aM©´Öà¢Ö"É“U³þ’è!Ü#À”¾�º<"§Š)F…¿•Ä5SN Ùx=Ð0ƒŠVväUàz(عï(PòIEÂҺPÁ'«†»€AÒBI6"ãKì>Ê*YiÉn©–ÝÍÉ'µ„aØQµÒ´*«£Ojœ -s¡Éaê銞áþ@,ó”8+!caXÑßËÒøE. ¨™ç•iš…_¿2÷wRzà ¨ŠÔpèÀM ä†]=¤à¹Ìö+Ÿ]_¥$”Êg@ö¨»9NØ*"åÞW Æ爧@hFpÚ§v£]efj úççÜ*{¶$î·UbªB×̹–Á!ºß–šœ·Ñä8øï’Õ‚oMåEÌ�ôkÆBb3Zˆ·Ð@AŽJòË*EL§Ôš\-‹D¸:©[#'KH”Å›LyÎ*Éด֥Ãì½!&ıÞј*¼»…æ‚B -ÌÊÑ®\ÍáÒê0…�0(ua»lbQw@%Óîàci}_<·tNÁ ðB07|®Ÿ÷J§”…o¦³‚ä�["•ì{™Ú<iá; f£)Ùê,4ûÀ—žPBY+™Pd³…ò)xl�Ð�¿LªÜýñ:S%#Q' -w¡¼¬÷·”䶉ª›CtÓ*ñŠöý@ªÐ9¼ä –‚ü¼*UÑ -‡³æïT–¹($«üÝQἑäª&µ¢Mš:ÀVŠùBrQ¦T¦Œ^mez€ø æAòa#©,qq%äñ-#ý6ÄXém(Š£(9dÈk–WDsèšKŠ’;,œ÷5ê6"ÍkYƸ…ÌL;rDëŸÒ+¾GDJÇ8$¸ßŠÚe¯}‘œLã´"1á9Ç!Ž©Ê‰¢U1ž5|aT’û¢ŠM&¡öav|vì—0¤v@Ê:Ë*! ÁŠÈI[Áõó Ž´¦Ãïø -ýRÕâ© ËEÒÂÄ3!.:™Ðâ!”dRmd“Ð9E2•$CZžàTVlIô2´º"qFqýè@]T–<.PáýºH\6ÉD–1É’˜bæ„i„M«©ÿ&Žµ^ F+Ùp7½–¼g4dÕ#_zðÍ^ÈxZ–,*Z‹Ž¤Ú[U<dRß1ÃÚáÜ›s|Yr]"¢†¤k̽íð8ÔG»%‚‘VP³d6ÇP`Á1f‚¢Œ÷ï ¸ äßÀ•I,ÃQFô)D&MU±†¥rádhÕ’#}¡IªJ_Т㠜‚ Q4·…W/y„q°\²Œb¹w͇•U<Üœ€dùGƒp°„¼å,œ¡*ÁœXsˆ ê†Î[8u¸ESÐË*Ž[QFS2اóDAæ€:FJ)d9h\ÞDŠœ’´h4ÅÓ–ì‘{?ÝÀº•êˆ(¢JӒ̹9E“Và^Úb¨gb¦6º¨fHZ ë Fü2³\Qœ˜; ÆE3$òÌw!è‚Ýv"肾>vÀä‘Ý_\G|b˼l¡iÍ%H¶Ê‰d×ò Eâ àIº‚2 ÚCƒ&áVJŠæ¢xFŽ `+x’Ð"Y³a"KÙØþ*6 8ŠÅ–ÚRÙŠ«Ñ–BÇb˜/J¥=j@Ä@¼_ ç35Pí�+)¹Õ¤ˆAM'¬r¢—èZKí2].,”dŠ ˤ]Ų£<e))N wLÓHAD† ~"Æ2B«’»åC¡WLÚíd윲É%FuQT^�’òËb«–ð]r«¢äÉŠ×<x¬aÙ*ÆyFEC¾AaT_j›îR† Z+ò²WÄ–ƒª¢Ð¼eÔ_PRB*@ý¥…‰ ØŠBeеÈÒÒ&•”Š–œŒ:, 3ʇ)Ix�®(ƘÂë ‰ÜòfR†€‚JF±ŸyG-(5_&Ö‹¥¨'¶Ô,0‡—`GfñfXŸ{ODÒg‘_Rî5¤f‹ñóÒ*ÖÓEOË·`sa8¾}»nì�K.Ô؇�TÄt -6‹¦°b†] ÃÜÝN²h+ÒÒ8©·äbèVdØÒz=N8æu‹,{9Û}Ù"ù°P,ÉdC«I-*+Bb^›ïÀ(‰„ˆ2A:ØàA Ð*“ ’ÅJPÍZŽ ä¤ p5’NEÚCe"Xæ!:¼,½sJÜ,ÔnYRd]Á6¸ÜÖ˦ò<â!ª¬#…VFλðqÀO4o]¦´UÐØλ ¸UÒÂ~Ÿ'’œlU‚H²äÇ’1UPh1Çá€F -ªð>u¢šV’ù'7‹+˜pûÁÌõ b™Dmi4±¾ÈvC.@àD¬ž2 ŸZcÌÙÀ„(ÏcÁEÉy0˜}ž³ô§ÁòôÁô‚e ×ká0ŒPPz} -EnÀPÎÜlëÊC¥õ!Ø�rz "ÑÐGíqžÒ>¬h ¸4’€qÏ•˜LÂP6Š ÎÀ²’ÓN,NQQh:<¼§ ·;zm…÷SIž±89šXjì"k&ž9~1ËÐ-ÍZÀŸ€0E<¾ -2§=MBªp[{X”ƒ¥ÒI�6ºrx`Øp7¸„}E¾…¨hvm0 ™˜fÁ‡Y Ð(Z31ó”õž¨tçàI�!©·kŒd’â-N`¿6’KÊØ®á4è/@íÉÀ!-‰“î¼¼„0«Hñ·Èþ³ ÝÂ(4e2NkÙxæ:|¶oàÞ@A¸)ØZž³ú|$%Ì°–Í`ðáÆÖrÙ’,h£Ø èf'†~´µ¦H¸eI‡!èèÈ xyÌ “€Câ�j¢«¤¸]”$ÀƒmI›Œ,‡à5ÁQÐE`q+›ÐUÜÄÔ@Ù¼3)– ®yð² ΃Ûo]Í"o’¬`Kß!ö_Æ=¼ÑÄËKMÎÄ#0Ô�äƒÌG^©…á䡬5ðÄ(ÙMÀææ‡(u*ÈFT•‰†½o¶¤ã Vu ÔTŽQë/þŽ¼�Õ&M}<0è¾qb*–91˜q…¨ -’YÙשô.Ó~ÏQ.)*¦làX x½,áJ+[UùÎ}ÑE¥"v'&x;TÞ¾ëD”+ŸJ5ìD^œ¤l -k Óªâ`† Ð 0iõ#›„ ðBÞåñôe®&ÝE”n�”$©GÿªH®„÷W”$©¤©©86÷)�‚›%FBæ”ÀÌ aéI�Åû6¸Éæ9©Q,òR9‡Hà„SðIJk^6±2yêº Ãh)ÂŒÀÈSÆpE�ÌÍäyÊVœmêáʬEÎ.§0‚ŽwF–䪒¢<¸ÔÔ/+)¨&W” -^'}üøCæ”G’;#Ü\®Xê‘ä|©¼¡8ìG[’ŸeÌàP÷ON™ã:i ¤ÝàNoM 0OXØ0cŠ",ŒÏås¼?sÎV«qŒÑ†åS‘Oé’ÆÒÆ%/nõ'ã"©rEÉ=¹¡DÒW²¬-¸®·?XØ„÷ Í )iq‰û’á.‚õü8xÛGh\H¹ûJ6èÂ’»ï¼6ÑZæ9;7kvÀÊiÂ,D_ñÙÎÇ6Ñx“w(ˉ³BŠ#Ì\Í%9^(/“,¥{Á&flcykÖñ’O‚Éù„RVùV9…ê‚+8[ãr+£×·öþˆH5ÖN GvièÆŽÈ•½Œ2�e¨(ˆ6$¡¦"í‹ñiêп^æL94Ç-ÀR#°wme90û?…²š&¨|Îü‚ôh5ñ@-HLV¶¤x�á·vXµ!Kxmjyqþf8·”o@ˆD˜‡Ðvh€uí°ˆ°`夶ä5 ù?%«•w<Áe?ÑXbìB΄ݨ?ˆÅ5 -6š ɇð¡x7(Šµe$ö«ªÈH’L£’LxbìJvtÏ9üN�UeŠ�Aj¾]0Õn«pb •ƒ -URFI>H}261:J)ó‚+ÎOUIM½ÕI9ïQ.@"“ -´Ã+V® ÷8T·lìÌKO0$Ž ’âÁZŠháíUé,L(Yb °,hb\”ø 3qí0 -ð©„Wq`´Ëi2}^DŒÃ¡èÔÜç‡ñÀ˜A¶ã³²PáYìßU°åÛC`úv‡x!“ðSa?—Þ1ÍÓžBRj«p pFÌ$A.˜UÎeÒŠ‹Ö„ˆ>�Ò"drR‘†]5œ‡‹H\„0Ñ@Îý8Äp…18Õ)ÃៈØ>ZN&@ÉD–§UæD’QˆódVæÉ’ž‚‚–2,b\ ×,Ã5‰hÉ:(ây`ˆ·G¹âM g3ë…0V±¸„|n� -:Ö¿)CЛ® -ÊUWZBz…Ž P2R0æRñ¥)nR’ÒŠ¥äh9ÿ�ûv!/!½Î[ýâ‹šZ ‘(6Ó2–ÀÎÑLzm1’XQ…ÐJ¥R^ð8„$F²‡Áù'…Dþ!†ZK©gSe�ëÉ0Ç!VSpZM4>‰[PHj5ž‹šKiˆëpÅÑ¢†—eå†|…tJ“ìO´˜ŸPª¡&¼Ëè>$ÆÆJÁV ‚gÌ&úDJú"-EIû%Êѹ’Óæ®ÉA»ÐMŒÄQ[ͬtLäå‘S4³ˆÜ~AÏÙ_å~ï(ˆª¥Ž™êJ±5ÏT~¿‡`óàK àÊpÙ’b¯Qð1쬒@ÇjÀ–÷6¼Lqb”!�貸j¨¾¢ÈLÚ”@hâ$%d�wÁë^л‚FÙ` ç@œ^EDAéÄ@I™ Ë‚‰3då*’„ŽèÚrL‰XIH¼$…0H‰"böÒ"˜(<˜É-ú -ú~YïµíG¡¼„¦ |›æÖ‡‹)Pª”¼èhë¹’Á9ÇŸ»Ò’E1aBl}™fYáÏ -8pÒöÁ˜%VNKd’vzàk0Ã2N™OÜâèxI–tåÁvl9?#d! -@Cê)2é<â 芓Àªð~-”Ù®´ \*8œˆD$~Jx®CKJ²‹Ë>¼_RÜ*É6¾™z˜ò$€£*¬B†�²<òg°Šµ¢ÐWÈÚ™[sã4�²,K92\ƒkÐ+M[Ñ•%u‘÷´DPtYÀüLhØ4Š/¢êšW&&dŒÙp8oÈ) ÀœíoFQ_KkSyË·«)¿&›\¨£LñÔ Ï³}&fùÑ”íñçU%åG’$)Ó:±gEÎÀ,óµ¹õ†D�dª‘`Ö‹²‰ÊL>DÌ·Òƒ6©OE’€YÅX)Js¼bVSþ¤œ rÔ@LI‰‡ºJˉ9uIª<ò¨eìAÓ*â/Lˆô…’̦ɘÈP:äEB¢‚’3Ro=Pf4s/¬Xy[æœíI3£I¹Ž -ÞóèòÃÕ%Yé0.ô$€ã™€¨�d*IôÉCúä†*ÍíZ¥™ÿµT–ˆž )¿ŠÄ†ÂÙÜ Û[@ˆlkËœfcõ ˜ãW}uÐÒÐÞB»ž—i ³ Äô�¶¼9ã»+” -A} -˜K›êKfKÍe›fmRÄo%TÀÄR2B�êè `£*=¨B"-[$Œ;e„ü3/[ÊdUTl.§<Ð*ëú8Ì -Ù"“\Y–ƒìrŸ:0 ° ñ‹ †#ñì£Úñ ªÇªËT—T*NíÆ—àé¾’|¾ñ|ª(i]Ô:”ëôRìЩ1 뇱H-¨lÅŽf¤É`ô™àÄÞÐ@Ô?Ò^ŽÇåÆiólœXfºMN™«’³�rôUD]éÜ‚l~»ÉPu‘87æÖÅ&Or½4œÉsMY…LNÙ¥pia0˜.…ÄJSRQö�¤ä‰*u¢à�Fq fT8Ð6 ýF0^ÌÀ2¤%µ†lHÔi¼>$(Î<+`Ré‚<6Ù¡2Ð�Vš»2MZ¯8îG¤°p´\Gt÷Prð(ò’ÁÖf•¨pRlF4!W‘_Õ¬%^À4µ$àÐVü‡×c{Ç)ê@á—·×.F [XÞ¨*§)#õ:âŽÆ´¢VÍ'mœ"3 *Ÿ)ò -çÑçÇ´)¢51;…HÐ+•ŸŒ±`Sô§!(^Ñ3– ˜î!Ê˾¬ä¨¥œÓ{Bf -IëNJü@)SWá%:Ì5EêGÊBDÉýÙü²ü�¥8™j8'1uȇQˆ$WYæ ã(¯P”0x„“ÀøI`ËÉb0ãxD.%6)Ì …˜ÍKæýÂy8INÌ拆t“…à«lbB_£(±ª cñƒ”Ë ÝøOØòØlîõW((–ÒHBɘȳ$a¢ÞæaàšÖh’3ä©…pŒ½å´fh¥ˆ,<û°âTÑAØE+@Ì(HB4® Jiª½�ä|¥*¨UÅ1Vd,<4E>Ù`¨Åó€Ó«Ø1ÖiÂQº£`qŒjÔƒƒwMÈÀh–߈Áé ˆ—5¥·†ûáæ!Ýr™¤ÎÂø†ã@¿ª@d+G`’ 3Hö�©Â¤ÏšÀä²à,ÁP´YSünEx‘¸@™âIŸfÁ„’gø$þ€ŠâdK–µMôBÌ‹`Z9‘L© ¨KÎAiul@óÞEu£Æh2)p¢VÑ÷Ñ7`Híî©Õ·1½_†xŒQ†'a9ß²Ï/NÖæWœ1i–XãY<c’4œØ+j G–’PœsÆÖ%çË•ˆ=ˆÑ~˜ýÁ“ÜUš—œƒ¥ÐÄϤ²ÁL·¡¬ œ"䯂LâgÑ3œ4<Ü¢%c¾é¹ôä?¸<ÙóÀ¾Fª¬á¤¼Z�f©(–r°ŠrIÛ&Ç‹Ff]¼°í0•ŸŠºG ðð’²1ú6iuf!{= -Œ´ò0hï*€--kJ"kÈ/‰·hŒ%£,S¸o ŒX–’¼H)¸Õ"i£CÙœF@…nq¨¬Ò–˜Íú…àå98 hÞªŠ4¯d - kk|À®²Â3«Ï5àØàËrfMÁRæ|‹âp¨È!·Îy &Ñ™4Ê$®³R¥ Èù—±›¯,§Îà�ó§ò°¶çDÎ+³sox²¶6¸+�P7<wXb‹7¥•5¾Œ¼‡È#h¹È'™G#à -½,ÊZ–—H²ˆ`+ùe,2é8„Y±›.„›‰ËX}]Ÿ"<E'h0€r8¥äH…AóÁ1[‹÷*˜†`ÁEá#—AÓÉ¢XyÅàù,ÆErÁ²—'‹Û8á+Þf’NÐoªâíœ÷I'0S{�r"t•äœ [¡¨¶\Ÿ3¿PèÆ‚¬téÛLºôÍ0›¡*r,wà˜¾‹òYÚ¥0Xˆá’b-G>‡Âƒ9Ù—¢#-K§DÂV$Gˆ™ÿTð-ÇúœD r‘6Ðì×I¼ -©™Ë®B¢@c�rhü4»h‚Y -Û¢ðuà:ʉ¼R(8´rªÊ¼"çÛ¹lr—!b&OÔU�[!¤U‚">`BrNcù%yy -È…\~«8ë ºž,|r“MØeÒ{ÕÆÛœ(;"ieéRŒåy)‘|€À")y¸øÆ›…Ý¢9–IÞU JèþÏœ¯4ðçª1áĦº‘UA‰™dˆ®dÂ~Rù÷ÓnAVŒÓÒ ºV i¥zYԘØb�ÒÂ6”¯A$Ù1èþ‚E¯‹÷äΔç~pv^ Áh™M¢4úA/Œù²1WõšZšùö&Áɪøž¹¹VãR…Žr¬ˆ·J,Aaj-¾ ÒPn(¤“ÔóK;ß,½Oû”Hþ‡‚®Oµ+žo#-ùr¼’…NŸÞ·Ì#¡L§«:sFѱ6MLïïZÔ1êqáw€?8sî±!£Û”? R½J1â¼…5W!A!4 Yµ‹þ¯bà]j8¥VSþÌu,ž4Et/ÓJòIü¤ÙøÊF±¡4:Ñi¡ÐIaÙáÒ{¦x ;bUºÌv€x%ë7¹f}ãO€‹9¡øÊè`Y¶_„Ï·K/¬¼k©?ó -ºF³ÌU¼ûTŒZ,9C‹·ˆ,j„¨gž8¤Ûó-€s³õEk=2ô'‹9áÛó"ljY%éΰúV‘K!$VÑ\-èJ<‘“?ºÞ,l–®ŒT”òš´ÿW¬ùú‘5œ ÙŒZk‰€=h›,r(mÁá&Bl•ã0Cjäùª;F]p¼õCÂÈ3$^CŠ.Ä'‹9Áëë«ìÉ×Ù/?7¾-»ÒÞ�ðìûÑð͸?œö‡ï=oºO8øþ~¹ÿéô§—/ú×ÌÁSþšýåàé/ß|?º¨áëó~oÚ »ãO«~ø&{òÛÕ`è~:tÝ÷Ïo¦õäëìÏOŸ endstream endobj 202 0 obj <</Length 43317>>stream -ÇÝ™½÷ýÁŸÂï2{új8¿ÁŸé§ë~{âx’¯¾Îžþ8ì÷øÔµ;|×,ú±;¸ñeí_L߯.<ì^aYוPúÏÛ<¢÷uÿÝûië!Qñ{Ó³WgÏ×ï»g¢íÈú®äšá@™{Êèü_uoz4º^¸¾~k;¢KÜ:®ètÒzÂuî}¨í×á§Ö#ú´ÕãX3™É8~£ÏÕÝÝ29½Ÿßêa¯n‹ -_µ%6è=÷<ªáètÚŸöÖÐô8¦ –þ¡?¨ÛoÁF{¡l;´áÍÕëÞ´ûqƒ‘¥Uî}`° ÛŽm\OníO9*~ÿt¦“›¶c:ïNêãú߸=ÙžzÎÔjC–D¬Èâƒ79ÉêZ’“Øõ“qϳԶ£Ñu=îNGãÖÓ+lõ~êו”Ç‚²÷>šÓÑ͸W¿w¯ß÷{퇵Á¨pó®®G“þtƒ½sý@Ö²mž>¯/³oö"àöhçD@½÷"àöŽãÑŠ€—ã®ãößú“½¸SB`kŠ¹·AlãÜË€{p/îeÀ½øù“~t2à#Ú!ð¨þXNßw/F¿>cà¡|,Ò&#y´"Òùàf 5Ü=~´µð0™^<¯?ö»Ð¡ £´Òñ¨WzlÂËîÍdÒïÖ®Émd°G——“zº¾ï»·Ÿ6¡¯µm¥ í¯‹‡8½Ú¤ýÙuÑòðº“Ýÿ÷ÏîíûÉuÝ{}³¦ãûMÿ›~�Ì?8€öFƒÑø/¿¾_+…¦<§A{…p(}ï#lí„1¹_v{õi¯»É¨•À6Øztn/Þºão» ëaûm6_ñþG¹é GÃÉ´{‹AÆŠ»$©8qÍýÓI¿·ÆÊï!zŠMƲåb´Ù`(_\Ž¾Väͨ?œžl¢`º]e}vìI8ÀöÜÑ–pGÓšr+ݶU6\»¢,¹…9e[h ?}Óí¯c\v(tÇýéû«zÚÞv·KÄaã}´í„á~¬Û*E|h?=bvÚDµˆz€´æ?¬Qé¥Ñ[=5s—D<’#twäèÍí»Â}WßÕ€ÉÇÏ=â)¹»~ì¾ÌÉ,öŽG;áxt< ŽÆuý{kcÇÖzýâO7XŒÛ®n=Gë_Õ^‘vÑþDˆØz »¢¹èºíÍÀ»¤©¹±û>¡;ÓBŒ»ý›öÄžŠ?‹<_¿ FïZóí[ÚÇ^l9u{t1Y—ºíiÚž¦Ý))Ø,Fc›‰Zë‘ì -UÛ Öo»÷þáÝù!?ЖßU÷ÝÇš#à¼õá²ídìñg;hí½»kÙÚ/Â]9òöLÛÊu°µLÃ®Ø v9kÃùç†Ý¡âíG²+¤`ƒvë}¡îp×ßóHZ/³Éf!0ûò¬µ)èø}w8¬§õ îm¢Ê™¯xïƒ|ÛÚLtÛAÎW|°ãèyr=èöê«z8ý®{½{gÒU×5ÕÚ�»²Òf ·ù”m=’9eÛs@[~2åý›Í}¯mGŒßÚ‹‚Tü.£ñw-ÈÇ6’½óÖRúÖ‰Ö#Ù"Ñ>vv3¾lp:}y‰|[vßåF~l—ýÁ`w¯ÁLë ?¬»}°øÑûnÔÞ6©°½êÌé¨=g8z€t¿v?9_ÄrÚoD-}ù{׸F ¤íÀºýiÿcûµ+lïIp9]µ'Xø,Ãö“ÔëÝ\ݬwúH§)©rÿD¢õ¾ºhŸ Ì—½ÿÐÈÖ\E2_ôúï±÷m§¬Yëþe˜Ö³v7)¶·zøÒ$™t‡ý« 6ÎŨìvú»Þ£q›i?’]ÛL¹w›ÙŽíþXÝfz{·™q›iŸn×üfÚ¯Â]9‚à¢ÈeöŽ3÷0Æq¦ýHv…lpÆn½ãÌîú{IkÖzï8“ígà8Ú;ÎlŸ´ôhgÚdgNÙÇë8#öŽ3;DözÆq¦ýHv…H<jÇ™ N§‘È¿°‰hwÜ6 !;2•;œ¬pOÈýdìn:ŒÝ™‹»ëÇÃöáѤŒ|öêì9&¤9ÛL-ÛŠ ÜSìñ&åy”¹ÔÛ+Þÿ�éyöô}+öômOßv„¾µ^«{ú¶§oߎà;Հ‚=uÛê¶çÞöÔmCêö‡fÞöÔm—¨ÛžwÛS·ÖÔ-5mæ²ñȈ\ëÁ{çNY ÷›hƒMdÿÈ›¨õà÷›h¿‰š›èMÿ·zðfÐýt¶Y¸è6z™<3=Îü,¾ÝÀé,©qïC{Èë¶v‡Žë«Ñº¬»•“Fdâ™g¸¿yæþÿÆ}wŸß¸²;w®¼ï¬ ׂ§í¨v)Ï>oGÃåyÌ©^Dû¬!ÛŸë¥åA¾Oô²x\œèåžÇÓ^Ô—ýáÚ˾S²x]w§Ï7XI]Id³-¬Ôù&בoy”À&cÙ•8ûùÄ@p·÷eî”c[¨Botu=š8šýúfÍÙ½µný¡lmÛå¿Ññ´#¤á˜6×nÓ…G—¬;îOß_ÕÓöûg÷Ćgí¶“‡ÛœSÛî`Ðz_}h?;brÚdÇX:õ"y묱r§Ñ[=5s—D<’£twÌ·:…w…;ÚG!>rûófy>·QÏ´·?/æÞþ¼5[oÆ% h™³ÑòÞ›óã½ôeosöhØÛœ÷6ç/=˜½Íyf|{›óÞæüÙÓ³·9o·"|osžYƒ;¢:Ùm›óEÿòò¦ý&ÛN6ήІ;5ÈÞ·ÐÛšÎÝŒ/(rºYþõF¥íµ¾„…z<:IoØ~ ÎÕÛÞ!úݲÙô5êÜûÐ>ÕƒÁè׶ãôß½Ÿºß{®¸õg«íUp©‚óSþÍ»q]¿qd¶þƉ1ýw£o>öGƒzú͸¾øf4î×Y%öº¹™qíus{ÝÜ^7‡æcºûw“Co¯ Û+èö -ºö9nZ›ÿê{ØHý“Ô¸úW¶X÷÷þÕÍtÍž)… ò¦ýyÞG9ìÈâûÎ<÷¢áI л·&×uÏÒãGþð˜8âQkpœÀwï -€íÀ°#¿ýíÚ1訩æ+>€I|ÓQn¬Œ›¯¸Wæ<¤2'¨n¼2'hvP§³WæŒöÊœ%Á^™ó¥‡¶Wæì•9{eÎ^™óGVæÖ+vÇ«b¯™Úk¦>§+§ANÚ«¦¶P5õ˜3s<²Àû[¬Â]ñ¢ÜáôƒþôM·¿Nm´{„áqgæØÔñuë‰Ã£¼÷£}î„-OËÑ~ û´[æÇúGLËñ@Gè>»ÕN¡·âG·ýÝ”Ûö#tŸÙj„>ø@þ€Gèî8l|úîŠRaŸÕêQfµ:}ß½ýú®TÚç}ú£û·NǶöߪe·ƒýG——“z -}×ÍÏ®ì«ÇägÝúòÖ‹ÖwcÑ-Èš0ÈoH^ã>úCÉ·'»BÚo!,lËäÜégwæe/Äm¹'tþUÛuúkÿb¿«Púþ•“ªýˆÞ×›ødqñ{Sµw?{ôCŠÚ÷<ÔCaZ/ÅöœãC0Ž›Œ¤=ëØ’sÜZùÕÅ^ý±“¼Ø^ý±Ýûê1©?ÊÇ¢þh?½úc[á½úc‹éú^ý±Wì”úëiw§À½X½ÓìËq·7í¾õÛøÊ-1Coºçqõ6Óµ¤¶±Ž‡£ÓiÚ[£gLåR(ýC°ArFûWP¶vÖÞ\½vËõãCK«lñ*Ü1.ï´ÎÐtÞÔ/Æõÿ¾©‡½örÐLûŸ²‡t5Ü–Sáñå_z¼YˆòNëëY¦£öÇö膲O¨äÑ°C •68.Ç£«öd?�³õxóC=¦ôPð»žjŸMiAïH“ôÃÍøüfàÖÔª÷ÉRv&ŽsåÄŽ¨‚o¶WîT‰<:/´ F´C^hñÄ8[Ú»W™V©Ìï[ni½·Ûý8Ú´%Ó¶[ŒÇ¯öoí|²kZXOïŸß·âÿXÙ½¸—·ŒHì¥Àú±—÷Rà=Ž©)¶>%÷Rà^ -ÜK_Õ‘íñËs0ìåÀm[O×^Ü‹{1p/îÅÀϚ̣7щ?FïÆÝöäw/>¼x(‹¸ÉH¸Qœù–‡þ<ÆüŇÝͯñHÃ}C†ÇBöùBv)_È>]êª<Š|!÷íA¼ÉØÛNÌ6̮ЯËýíå9t{¾É<htÝíõ§Ÿþ²&u2ý4ho¨¥lO½€aîÞ–š`>ÉãÇ´±?—ð85ÝŸ“ÒiÛÞ›\;"íðý†›^6»å$oÃáì -{LÒPk©ÉÍø²Û«O{ÝM¸ŸF¥û·l´–üB= 'Óîº+Sqi¶ÞöÑï–ͦ¯QçÞ‡öëû ¬`hr¿¶8Ò’ÎVÛ%å:öýÑdÖ*Zçªîa#EtRãþ7¨jMb»¿÷¯n60sùcµž÷‘îlb¾£lÏ=)> z÷x¿[\’¼g˜öÓ#8r·6Ã!mÉo» ë øÂùŠÛËR_7f~ç+î÷´gžöÌÓžyº¬OÃVÞsO[È==Nµú£t ¿Å*ÜkÕï᨟¾éö×q6»GºãþôýU½Áý�»D 6µ…l=q¸ÄûAk;í§çÃCÌNû¬I-–Dmõ@Ö¸¼¤ÑÛ,Á~XS2ˆØ¡û#ôr„ÞŠÝöctÓ¥¸í'h{2·å'hûìOÐmÈðÝUõþRÉGÄ=â)¹»~ìÞ²Øg@ -,èÎe@z¼àµÍ¢³{bÜýçÃÝkÉn4»œÛéªëšjŽcèûKWu²Þei÷HÄæÄoëYþ]ô!m‡‹ßÚŸdTüeÁÁhü]‹ ¸„ã1‡þ’Š<ʃx·SŠ¼~ôáµ÷¢�ºï,YùömÏÆq¸ODZ%”�”Ä°W~x„§/àíi÷ö›+7¨v…]Øao†”B´ Ü!Ú_¾‹øm¨û®l©ÝæÀaf~¹¬Ç/úãG§=Ú*¾-ó<íž·ÇÃ.è<eÖÚäƒcÿi3MY£ÎÃ%»öÞîQyt‹c³<ûc,·—ûåöðËMüQˆÛÑ;ª <ÁÞ?Œ»ÃÉeûÛ.¶gõü‚û1òpSwr˨¢mW›ÜF˜Ø1o‡5'è÷l0¸sÚ°;âÐíˆæ®¬Õu½‹>Üæ -«¯ž½ùÙ·Ã¾Ê -@ g߆o\˜çЃêwýaúÃÁ÷×؆ö?~º: ž<»¸È^t?ŽÆ@Dòì™ûÿ—_nÜ¿yöú ï•uRmGèR[ïÒEnKí¾67eé¾”e!É~éDÇ‘_>¹‡ÿp_þå@¿f"ϾËþñÏ<»€7¼=8Ì;Z²¬2):¥Ñ&»:8EGT¹v…;ÂJÝ1•*3(-EéÞq( TTÙaÕ)D)Šìø „ìen³“¨jMåªÊ¼“çºÂ/Òø¢:yY¸æ…í¨B*„¨¢Yû`l€…FM§”…ô×U„M„@½¼S•R'¥ªŽÔEï“)²C×L^ÂûEÙB+è9cáPˆŽ{mẮ;•(L,vrPv4èÛq/Ê«\Å íÆ•¾¹wà@•‚wrãf«”qTn˜º¨d:tQ¹o€lÂû,k# -a:Œ’ÏÇ¢é8A®p†L!ŒÄjÊȵ[1�07•ë Û©òÞÕQ¹)°ªSUºHA -ÖšrMÃ䖶ʔè([¹±[‡”¢(@ýQRJè"ƒ\¯«Riߎ[¼e´HT~ÜÒ&ÏUÊÍšÃ[¢*¤•›!X¦°Ð˜ ô\¿òB™R›,̪ɒ5à&¸ -†výÑ%•‚ñUy®ªØN\„ñe°xÁI)×!lì4,«Üªd`°W”&ŽþpVHt¨dÜcqd!Ûí;W³p(™¹o ps¸à†‡K}t“ï -c3YººE¦;….Ý’…Û1á…ÛÚ˜Ìmó\ié*0Ä!Wð^×_·)TqûQT•”�*…k¶¿„fÝšQiGˆ\üx€Äëâ Èž|ýòóÁWg‹H•ƒÞ’X¹šÈ@oG°|OnC² æmˆVŠ‘„l}u6O¸¾:Û˜t}uv+âåªÝ†|}u¶€€yàÆ$«Í1œ'c_ÝŠ¹jó¤ÛÚœ˜9|݆œ}uvK‚æÍHš_Þ· j~G݆¬¹š@oAÚÜüoJܾ:›'onºæÜWg·!q_ ÷úäÙp4Ì*Y Ìž«^Uªr¨ììx:lÌ!Í—¢¬€úÄMi¥î~GÜŽ‹@TïÙI·XÔ"lò -‰Õ›‡ Î,ò¡óX'¦g_?;¶“ÅGÀ< -",±›¥y4D`| LÝ*`ìr¬½‡û³–ÖGK„¥™GM²t/?:ˆ§ ÙØ"{z4 \ÁWB½q2f=~;õîË›þ…—5]óA‚Jýv=ObR(·ùªL»S8²ªÛÆØq©¥—Fž¾»ï»í*4Z«N}Ÿ�Õ‰?/Çý‹ÿ¬?ùvÍü«ß:¡h2£/B쀻Î*Z,yÙi4ut3Ž†g£N¼K…©?Ý8¼=›l‰€¤›òQž½;p#Ïœ±°çJü’ sdFúßýI!óÎ$x°žAË<S&3üZó•à䯀B;| -`Áðó„މߡ¤;5Üwªo2lÑñÔø†“zmå¤ÃPº“ô˜ªÜ ^ Wñ ->Ülwš;¢\8Ìs*î¾ùŽäa˜á´Ð×ã\Ç6 -8t°Y©ðÂ/ð«‘6㪎ÑÉ<ÞÂ+±iîfîÅ ì<Q#ð -ßò±ÀÉÁÑ9ì‡ ¡_dïÆÝ‹~í“ú'õ°‚ I…ÈŽÞœ—Ã?ÀÔ¸Þ 4#À½ÎVlCøåªQÐ,.è¶ýQ¯e‹GZtG—k¦éèèàO?ºïŽ—i‚¦«yáËáÂo)æsBø<mLçÜ\ûUp—Ãü'ÁA²¤â:+„H:µé”'ƒì-›dÙz’]!Çé50-aJÌì$«ÅÝ4ÍLòòZµè&?NòÊ-¾åÖYáâ˜Ø-$ÒÇãú¢?ÍŽ»ã‹¥DúÎÔ^²Àýêf,|ó[EV(øIOºð¡„D-…,¿rŽW(·àn,|FÝ»$p–þIý–TñÍxÚ[o¼9t(|¡V’þ‡QÑw‡·+~…ŸÖí5ÇnÈð)*(ìþ#.Ü@Eüñ0©sèÛ’UÚ·¹'ìÛe(æ;}ž -jB£ôßVà'âè;“þœÖ$/9i¼ºàÈèݳGŽ3ÊœH Än³çÝiý¢_.æÙ!¿ÅŒ(4n2„vüeò%·F»cΕɄºèî9·Ûí:‹¬ÇaáÏ7Á°,}Xœ0ט5ª€ nd¡ @:ÎØ±äŽ -t¬²ÒÌïw'ÃAë6Ã%fý1SЇ_‘Ž»;€Ó×w_ŸÀUþ(–³fåÉã~€“Ëdñp¿„ãAÀ“ƒ<b–”0<V¶q´¦<9[p<W<<øÔ~|:ŽöV\ÔŠ.æk‡©×3_7LU%üÁ‘g~ )°£aÄô)–µ¨â`õÂÁ–°$rx½[~T‹~ÀR¥?è2Œl¾ÂÑ -*/÷‹ô£~¹ï{ø«Gàè¯Ù| ¿"T³€«³¢âì Œ”ñƒ ->V,A”ú¼!3CÒm‡T¬’ -ËM„å&Â2SñóK-7.7Û„k3?®¶™ò³ƒ~Ò!÷=_p±ée;F/Ù1zÙŽY4o®ô‹Kdýáã‹-.½n¿è%ûE¯Û/sCÊýÚ’~ I¿¢rþøRëJ¤“¢›p-ç"Ò9™)?Ó‰ÝGîWSþ~Á%%–ì -±dWˆ%»bAïQ«Š+Gfçþï[KbÙvK¶ƒX¶æzôçê èqõ_`íøxû‰™�•ŸÅ¾‡7ûkÇàJ1¸jTøûåÖN³÷z¦÷ó+¿Ù{½²÷{ïyHsÿ÷K»Ãü,P°ðw*)…`XV„ܱÝ=G4³]éNaLxvÞµ†§Ì+tÊú$¨‰ìÙ5¾ZgÌÔƒ<U,ñ÷)cØý%øµ«ùõª,l“×´~MÌ2È–.(jJÏÚ¶ku–ãXÖª¬Ö닾˜(«\/DNTÇ+·L ®/F¿.Pï£î(‡E´–_–U¬CÔWs†_P‰V[êNcÑDCõP‚�Ç`]ö¾7ÄÚP†[€+fbÛRĶ»¹ -ÄMÑëªP†ûD�tïÀ—TÜ Ž 4zjue €Z¸dŸ�Ѷ¹Š¯£ŸÞÑѳ^ïæêíhÊÁ¨a} ¡–<C€˜ÜTƒî|Û)ðÄ1(™ÅƒŠˆß°û&ƒ§¬dÔqî©!¨'ý”這ŠêCÃåì -:>(ç–AhÔ(²`¬ó˜fqÓN´‡ÿ‘‹B•¢S¨(ªò"H©‘¨Ñc¹7](ÒJpï’e•r÷"‘—I- š›¾é¨Å›Ü¡ØxI ¢_bAþi )nßLÕ9{úýhú¶îÆn²þŒ4}éÔÌÒããg¯^†éýár4¾¢ZØYG/FçõÙ³WÕ™ëîéôÓ >‹¯nì1Öv·nä-TB¯d§Ÿµ[Í.𫃹]×<ï“™}4·×R*÷ßBØüfžÝîs$a ™Hë -¡925»]îàÙm©Aæ Å,ùmcA[Oì²½éù”‚ö¦N¨€Xº7±R®™ -è„ -lø¦£oÒºù’/Cvlû®6™6¶o”Àþ¦K° J€¥p2�jdM© -?ÄÿçÍo($Ð&a9•v²à}•¯‰åªœ,g"ÂTçhö[[;¥µà…>r0W„íã£_ôW3ì3³Ð+8çY›°ÎBK¥3œÇhht’OG–àA@'_ÐÇò„+.�ÅŠ—È΃c`^•ÈÑÉB¢!‰@@ö´ÀÚ¢S‚cî<„ª-eŒtØ!zá‘e¬ÎàË(¼KKѱªDÏ÷pIuBµ#O"©Pna:ÑÍQB ÷We:Jj¹¸ªEŸ?p¨dG™¥>p¯-ÁÄk:ZZ³ä®kee€Õ1îQ®sŽ*ÚŽ-D…‡—*/—T•Ð°Dõ%!P³]Ýò. -ãíV¹ã± »/Øs%’%{îéwÝɇæî;é?Ô~-ÿòW÷çÆýA4n¥Ö¡\Ão»Œ¼9s/qTï%Òãúcã&?e¿|ï�ÿàé;Dí,þù'X×h&y¿¼€|9ÿ_™¬¡vºóöåywÚý‹ÛÒüòêüÛgÿóþ{é?ÿ~_þóÿ÷ýü¾¤ãûß÷¿ÿÛ6¬ÏÕ¿¯Û_Ÿ÷wìQ�:ö7"[ÆDëûµ|H•½¸ùý÷OPÉätÿêÈ)Ÿñg¿üžO¿LgháÕðc=ž5eðñ }Ý‡Û àçý p;‘åtÌæÌ«=ñ“@m×ñ Ÿíg9‰n òºÁÑ?»ÆN½Æ¿ï�4ÇV@Âc‘�>"V_L«_bsìEŒì„÷ùn²™Œ¯Î›£Ú”ÑpœæY Ç‚ÞžÙ€p‡[³r[†£m¯±_½Àå‚òêd–1Tíx†g¯²g7ÓQæ7dÿ÷:Js2×ëóI=þX_œ9†üÌš$Û"FpT!‚#*¡söbÌ•Æ}‘&/‹äØY48†Î~nÃ+@@ƒx'÷EÊÊÅXžuî³Ìý/u‰Þ¶ÂÿB€cÏQçJGØ Â¤Ð:èVM©Ë¤í€ðM˜ì˜¸“&LYThSãî‹ÑÖ·å»@hKð{äõÙ~8±"˜O Ø…ã¸òF0Zð~+t¬rÕ„ù†Aß"LúrÛ)1Ä)é´ÛÆUQ–^ƒf¨(ÓáVaUIã)„zaÜë,Ìchœ'Š»L1õ4™aWŒCm§�šá9\¡Ï§v¿ëB40˜Âü µ#¿Ú¨è¶ šŽ)«]' ™Ûâ(Z:ï €È ˆ¿„Cä†üú}ÜÍ<®O„¿9L!þ`©C4[Š¿–vG”´“Âòw(usßÀvsc¢cm²TÄ¢~*¶žBƒQ˜Âp˜Ü8c‚»RêjJeh@‘Êð ‰Ê$�¦2³ØÊ9…)Ç訌(M‚Á¶Œ?GbÜiÔ$<9DR6p -ž©R•Én@þ㯃!ÆÆ ±ÜÓˆ> âx}ËésÀÝ–�uî�®Š&êRϸLŠ)w]4¨Ÿv‡^.mŠ9冒«qªShðjå†S@@[1ÖRÛ¥±ó»#ʸ‡e< -ÅqúvÓ瀲9ì�ÊJG¤i)GV&¤Ç^º&EQ¦(³©¬J1æø+iÓ£°è”¦Ð&¶›Æ"ˆ1–‚`dÜ. ^Æý‹ã1(ŽÒ7›>„ÍáO[áCn„¥ ˜ñèöÛS8αlön`Þ¬R"]Ã0in8ŒEc,Áи];¿;Ù–ÔÈ2Wãq†v“瀲9ìøS!°-˜å ´)‡W9–±|�²DUÇñedðè9áï”°w±V`Òb»@ïN˜; -›òvB’ØvŸÚ†_N€ÈØ$áëb-9·øîãyì ʈ=IPF q><øÀ%(#*A1Z\‹X1n—� ÊQ–€üШa<½<AYèa‚2×â‘S» €P6‹ï– Œ@<4bvxðÄ%8#Æ)ÁqW\-°_ÜnxN0Fˆ°ñã¢Fyäôâ_Ô½a4®Æ㦆�!l7 f-Ý–·O8gãìO‚0â’„+ÅÕˆÙ↠ŒAg ÈæÑÓËÓ}º˜nÌ0Œ¸1iì¼1#€7æ~Rî,âL2†üȈ›¡¡ÃÆlQDóNbe@DX1ÂRŽ‹¦‘óË#¨‡_4‚Ȉ>l5yÈšÅKÊŽE\„Elš8ˆ+b‡"ªˆc"qTÔ&=G<1„Ñ”@p<Ô&—ÞqD=‹8¢¾„GÚLžŽfñ‘ò_G¡ñ”Löýx‰¹‰8 -PD±H!Šš¤çˆ"†0Š‡Ú¤á†—FQ¿"†ÊH¸Âc M&ÏC³ØH®ˆ!‚ÐpˆQáx™ˆ!bx"Šˆ'â:gâ6ÃsDCE Ä«eC›4^zk²ÓBÏ"Ž¨ï\‡FKmÆ瀣Y|¬mk«Ì½û‹™,óÿü"]U¾ØdÉe�äËù¿-L–nŽ>×b¬*ôßÇçÏýñßšÿÑ·ý?ûøŸkèß¾Ìê[þãmÿÙÛ7³¢Mp‘acÚÚ´¬y3Æ ½…yÃWœ5pÌ@70q@Í9#‡ëmÌ‹pçGÁü’ͪȶW0€¸ŠL 3ÐöFWqÄAoiÁšs¦h{cŽkÖ‚ÀÛDán9ÒJf ˜J\ÍÆ„ÞÂ\‚õf &M`{“ jÎh‚ÐÛ˜Man–˜Sf T ™á¼I¡·2ª`Í9³Ê´½a6gZAèmŒ+‹°·ÓŒ.M`k³$à›7¼`Z¾[™^ æ¼ñeÚÞü9 ç00ÔÍM0°¶ÁL3M`kã¸*Ï™g úï¨6g¢iÛi`4sf�nn¨Y€åˆ]`Ài[›pÀ fÖˆƒ©Z77ã€;Îœ!§ liʱÌs�¸¹9g®Vpófž&°µ¡ÇU›7õ pscV›5÷4m >8šY“76ú,ÀÖª3mΔ�70%<qTë$,ñ&&¡„õê&°µY(2ÃQË“ðÂbÓÐl@ì¼É(n`4JØÞboc8J˜Ûboc<Šün±·1 -ÀV^·ØÛ˜–>·ÙÍÍK‘m õ&¦„Ám õ6f¦¸jÁÜ6 Á-P cÛ@ëmŒP ûÚÀìmQ GÛ$·0F-À×zn6Åìæfª„“MÑz+SU¯¦h½•¹*²°)V77YÍãi=ûšbtscVd]S„nnЊjŠÌÍZ‘gM1¹¹ak?ëùÕ“››¼˜WM¹¹Ù+²¤)"76}E&5Åãææ¯yì¬gPS<nn‹ÌiŠÈÍc‘M¹¹,r¥)&77’Íãg9&—eC¸s¯ûrUᦱ]Õ³©ˆg<ùï*±Ò«ðš%*Ì–+eUp3 ^ÃbÐ¥€@pk‰VkW¨å ¸k"/0å†IûT -:ü;Qÿ§¤Þ9¸êH7ŒKù¬ÆÒ1<Òs 90&)[ƒTå<�kåÄm'-ÏŽ}Cr_ .O@4P*…�89ˆ¹¸‡eHR¾�ÄÕ±åR-€�ÕkCg4 '»Ù -Ó‡ÅR3}¼¯,Ãpå#k7¨È´íXÜöSma€ù›î°œF“Ú_Èðz>aÓ¦w2p¶¦§ -Tn‘€¢>ó‰^«àç/bªð?xÄÛf : ]ñ|Š`LÐá¡XSe>‡‹wÆõew’ÅïÐ^åS'oJÞ˜t”²q—˜È¬t¥ - ð©!›‡ƒ—Ð?øÀaü0>,ñ>ÏÛ ~ÂOÒßäã+øKÇa‰ç_’ -¥ÇG¹*…Zë„Ï<ÞH`†9>õl®}±¸`1—=my‹GZ”Åü… -6.1ÄÏÜÀ÷!"<¢5 éÐã)~ð”$Õ˜Áôo,+ú©ôí…ùLÞ›t'Læç^‡�ymeÞÄÔ©Ù$wÕâ‚…œ¢å-µjÂä!ô©�?;ýˆì”êh70’ÁŸUKÐ…Òoè"YÊ -/ò‚Üý迹_”›+ôçk6µ2)‰-;ˆZ%%9¤éWüªýYÐëXh®©}ĸOQéÏIœòÅÎ6Èô-ýÑŸ“vPÜê4Û¡ÞÝq=ºþñzÅÍI›&Väì0 -³QŽ³ÿøL—ÈH©øUò×äġ*;6ܬ¤!%å!_Ÿä½g6|E_gü¯_ÂÊx+4‰— Ñ·î–pEáZ%÷Ðh#4}|@¯;9Húo¨]LJg= àPUØÊUø.H¯ñ:H¡Èõxà%I2| Hò×úøaäEXëA›%1áµÐî—€y0k£¿¦‡‘3Žrš¡øÍwƒ;w’Lmî‘(øæ&t…†}Lù2÷7•|9�0?eøYrƒÓâ¢ïpZÚêü-N‹‹.ºÇ)a;R¤]¥ØLp'#™£ˆkB5M)My\h33‘ÎQÒ‘Ïg.àf¤æ _VÊ£®qÛ$5Ç«¶Õ\Ý•-µn¹qóRÜbW3{of_òÒ=äµ;»ÏÒ¦ë8ÙÉ>L¦{ ÂÅg\n%òþ¾Íe…m±áK[>jÝráŸÅÌɧ¶‹Ÿ`Xׯ^ Ž•½ä,Ògðo¸¥F& jžý…»ßüÏ—q&ñîM®&3=;ç—wžxNu*ëè“ãÎfõ6òŽÃœ®f(îNµd¡“¸ò÷êÀ§7)܆+«ŽÊJ\6‡ë>áÎ)úŽW¡…†€Ò,, Xo·ˆ!#-Ü -‹7?ƒz&,“Âë»iÙ8®Á ;*;ye¼^®*¬W¸a‘9�µqâóÞ6Þr8ÛÃÙ®Îç0°×þ5r˜¢ë0ÅdÏß~æ$ ƒ"0\Zf:Êêìïþþ³ÒßÉËmB–Nô‚+èëqYx¤Æ/zä±Ô,¦ïH^»åïS£þ¦CùX5‡`kПÇ1wªPH”kô¥ -†Hëuã'óÕ|ÜÃÞ_1§Ñ[žÖä9™Ž%�jódî-Hþ L|íaã™ÚåTðKgÓæàJ¸H^x -Óa¡bP/zæÒ‡±!|è*‚‚^ô˜xWµS†#µ@ågu%VŸi9¾õø>/ƒÓƒFø^•j•³oOOô8œšwIˆáB/·ßP±U©2$†ñ ·]5aŽØXeÐNV¢M´a•@S®ô0Q¾E,R+-7B�zQï€A®}£xh:P -ßC€Þ÷…ËPo¹‘Ùõ–)\žþòÝɯžgÉžôúãÞ >Sg_gRáfÊ•w?6¢*Ül8úT +-F`bø0ÐH¡QÞ§NTÓJ2ÿä‚âfqSn?˜¹T,“¨ -#&ÖWƒÙnÈœè‚ÕS¦ásAkŒ9˜åyl ¸È"93°Ïób–þ4Xž"˜^°¬ááz-†jJ¯O¡µÈ ÊÙ€[€m]ya¨´¢>Û�CN´¡Qd!ú¨Ý ÎSÚ‡ wƒF’0îù£“IÊFÔXVrÚ‰Å)* +M‡‡÷ôvG¯m£ð~*É3'GK½UdÍÄ3Ç/fº¥YòP¦ˆÇWAæÔ §IhBnkë€r°T: ÀFW׀¡¯È·pÍ® &4Ó,ø0Ek&f^€²Þ‚îá< à ¤#õàv‘LR¼Å ì×FrIÛ5œfý¨Ý ¹8¤%qÒ——f)þÙ6¡[B…†c£LÆi-Ï\‚ÏöÍÜh"7[ËsV_ƒo¤„Ö’¢þ1ÜØZ.[R‚m{ݬsâÄУÖÁ ·,é0//‚¹`r�pHÜ@Mt•·‹’x°-i“‘å¼&8 +º,neºŠ›˜ˆ"›w&ŲÁ5^Äypá‹¡YäM‚5l)ð;Ä~á˸wÁ#šx9p©É™x†€|ùÈ+µ0œ<”õ¢ž%»ÉàØÜü¥NBÙˆª2£÷Í–t¼ÁJ¢”šªÓ1jýÅß‘ Ú¤©òÝ7NLEÀ2'Æ3®PUA2+û:•ÞeÚï"Ê%E¥À²• «"Ï£·•%\É`e«*ùo º¨TÄÎàÄo‡ÊÛw=ˆråS©†È‹³‚”Ma tZUÌ&~d“°>BÈÛ¡¢¼3>¾ŒÃÕ¤»ÈƒÒ €’$âÈ Uâ_É•ðþŠ’$•45‡Àæ>@ðb³ÄHÈœR¢�˜¹!Œ = `£xß7Ù<'µ#ŠE>B*ç œp +>ÉAiÍËÃæ!V&OA@äa-E˜yÊ®à‚¹™</CÙŠ³ ÁB=\™u¢ÈùÀå´FÐQãÎÈ’€Ü@UR”‡—šúe%ÕäŠ2BÁë¤Èœ²ñHrg„›ËK=’œ/•7‡ýhKò³ŒŠàþ Â)süB' ”´Üé©æ fLQ„…ñ¹|Žƒ÷gÎà +r5Ž1Ú°|*ò)]’ƒÂXÚ¸äÅ¡þ¤¢u\$5@®(¹'7Ô@ “HúJv€µ÷Àõö¿6á=hsCJZ\â¾d8…‹`=?Þ¶ÁRAî¾’ º°äî»0¯…M´–yÎÎÍš°rš0ÑW|¶³Ã±Mt'ÞäÊrâ¬â3WsIŽÊË$K)Ã^°‰ÛXA^àšu¼äS„`r>¡”U¾UN!…ú£à +ÎÖ¸ÜÊèõ½?"R`E „5‡S#È‘]:…ñB«ãre/£@Y#* +"‚ I¨©Hûb|š:ô¯—9SÍq°Ôì]ÛBYÎ@Ìþ/¡¬f« *ƒ3¿ =$ZM<P“•-)@øVmÈÒ^¤D^܃¿Î-å"Ñæ!´`];,â�,X9©-yMCþOÉjDåÏEpÙO4–»3¡Cwj Ä¢„Gq‚M…&Hò!üA(Þ Šb-d‰=Çj€*2’$Â(…$“ž»’Ýs¿@U™"@šoLu„Û*œXB%Æ B•Ô€Q’RŸB€MŒŽRÊ|…àŠóSURSou’DÎ{”„HŤípÀŠ•+hÄ=Õ-;óÒS‰#ˆ¤x`°–"Z8„G{Uz�ÊFÖdžX,š…e+>ÈLBE;Œ¼D*áU˜�íršLŸãp(:5÷ùa<0fPD†í8Äì„,TxûwìÆCùöG€¾Ç!^È$üTØÏ¥wL󴧔Ú*œ�(œ3If•sE™´â¢5!¢€´™œT$†aW çá"!L4s?1\!CÎEuÊpø'"¶Ï†–“À‡‰P2‘åi•9‘dâ<™•y²†¤ç„ ¥‹WÂõKãpM¢A²ŠxâíQn§xÈÙÌz!ŒD U,.!Ÿ€‚Ž5ÇoÊô¦«‚rÕ•–†ÞD¡c”ŒL‡¹T|iŠ›ƒ”¤´b)ù„ZÎÿ…À¾]ÈKH¯óV‡xÄ¢¦VC¤�ŠÍ´Œ%°s4“^[Œ†$VTá�t R©”<!‰‘ìapþI�G!‘ˆ¡–ÁRêÙT€Á:F2ÌqˆÕœV“ƒOâÔ’Zç¢æãRâz�\q´¨áåEY9¤!D!Ò$û-æ'…j¨ ¯ÁA`Á2ºO‰±±R°¨à³‰>‘’¾HKQÒ~‰rt®ä´‡9‡krÐ.ô@S�£qÔV3«yyäÍ,"·CÐóDöW¹ß; +¢j©c&¤ºRlÍ3•ßoÇ!Ø<øR¸2\¶$Øk|;«$б°eŽ /Sƒe�z£,®ª¯(2“6åš8I ÀÝEðºô®`àÇQ6È9§WQP:1PR&Ȳ`"ÁY¹Š$¡#º¶S¢V/I!LR¢ˆ˜½´& +fr‹¾‚¾_Ö{mûQ(/¡)ߦ¹õáb +”*%/:Úz®dpÎ…Äñç®´dQL˜[_¦Y–Cø³œ´=¤…A0æE ¤•ÓR ™¤øZÌ°ŒSæ·8:^’å]y°]�[ÎÏYˆÐzJ‡Ì_:8ºbÆ$°*¼_‹Ä�%B¶+-(— +Î'"‰ŸƒžëÐ’’ìâ²ï—·J²o@&‡æ‡< à¨J+«!€,†ü¬b(ô²¶pæÖÜx €,ËRŽ×`ÅôJÓVteI]ä=-]0?“6⋨ºæ•‰ c6ÎÂrJ0gû›QÔ×ÒÚTÞòíjʯÉ&Wêè�B<5ÈólŸ‰Y~4e;AüyU dù‘$I +´NìY‘ó0‚Ä|kícn}«!Q�™j$˜5ä¢l¢²“ó-ƒô MêÁS‘d`V1VAŠÒ/‡˜Õ”?)gB€5SRâ¡îÒrbN]R«*<j{ÁÄt@«Šø"}¡$³i2æ2”Ny‘€¨ äŒÔ[Ô‚ÍœÄK�+VÞ–9g{ÒÌhR®£‚÷<ºüpuIV:Œ= àx& *�™J}rÀ¾¹¡Js»Viæ-•%¢gBʯ"±¡p67ÈvÅ"ÛÚ2'†ÙX=(f@ÅøU_´4´·Ð®çÁeÚCÃl1=€-oÎø.Á +¥BPŸÂÅ&äÒ¦ú’YÁRsÙ¦YÛƒñ[ 01‚”Œ€:zÂÄبƒJj ¤HË ãNa�ÿÌË–2Y›Ë)´Êº>NÀ³B¶È$W–å »Ü§(,Hü"ˆáÈE<û¨v<ˆªÀ±ê2Õ%•ŠS»ñ%xgºo $Ÿo<Ÿ*JZµNåú½;´pjÈzÇa,R*[±£ir�}&8±74õ´W ãq¹qÚ<'–™n“Sæªä,€}QW:· ›_Án2T]$ιõG±É“œÅD/ gò\SV!“Sv)\ZD¦K!±Ò””G”=�)y¢J(8€Q¨Î�4¤MC¿Ñ�Œ3°Ì�iIáu¯ Š3Ï +˜Tº Gv¨´€•æn…L“Ö+Žƒû)l�-ÁÝ=”<J£¼d°5¤Y%ªœ›MÈUäW5kk‰W0M- 8´ÕÿáõØÞqŠ:Pøåíµ‹QÖ7ªÊiÊH½Ž¸c‡1¨UGóI§ÈL‚ÊgŠ¼Âyôùð!íBEŠhMÌN!ôJåçc,ØT#ýé_ŠWôŒe ¨¦{ˆò²/+9j)çôž™BÒº“†?PÊ”ÀUx‰sM‘ú‘²Q2G?F6¿,¿�@)N¦ÎIÌÅãGòa"IçU¤yÃø#Ê+å�á$p ~Ør²Ì8‘K‰ÍB +3h!fFó’9F¿pNA’³ù¢!Ýd!ø*›˜ÐÆ(J¬*ÈÂX@ü årB7þ“�¶<6›{ýUÊ# +‡¥4’P2&ò,I˜(‚·y¸¦5šäÁyjA!co9G)"Ïþ�¬8UtvÑ +3 +’+ˆRZ j/�9ŸC© +jUqŒËM‘O6jñ<àôãDÁ*vÌ„5Ašp”î(X£õàà]20šå7bp:(âeMéá~¸yH·\&©³0¾á8Я*ÂʘdÂ’=�Cª0é³&0¹,8Ë_0T�mÖ¿[Á^$.P¦ødÒ§Y0¡dÅ>‰? ¢8Ù’em½Pób˜VN$Sjê’sPZмwQÝè1ÚŸLÊ‚¨Uô}ô R»{êFõmÌAï—!c”áIXηlÀó‹“µùgLš%ÖxϘ$ 'öŠˆÁ‘¥ä眱A†u@ÉùÄr%bb´fðÀ$w•¦Dà%ç`)4ñsF'©l0Óm(+(çŸù« “xÁYô' ·hɘoz.=ù\ˆìy`_#UÖpR^-�³T”K¹�XE¹$†m“ãE#³.^Øv˜ÊOEHÝ£xxIÙ}›´:3„½FZy´wÀ–ƒ–5%‘5ä—ƒÀ‚Ä[4 Æ’Q–Î)Ü7F,KI^¤Üj´Ñ¡lN‹# B·8TViK ÌÆfýBðòœ4oUEšW2…�µ5>`×Ya‡™Õçð lðe93‚¦`)s¾Eq8 +TäçCç<P“èLe×YH©ÒäüËØÍ×–Sgp�ÈùËÏyXÛs"çÙ¹·¼Y[Ü�¨ž;,±Å›R‚Ê_FÞCä´\ä“Ì£‘a…^e-ËK¤VYD°•ü2™t¬ØMÂÍÄe¬¾®O‘ ž¢4@9œRr¤Æ ŒùàŠ˜Å{ÌC°à¢ð‘‹ ÆŽédQ¬¼bð|ã"¹à ÙË“Åmœðo3I'èŠ7UñvÎ{¤˜©=�9ºJrNÐ-‹PT[®Ï™_(tcAÖºôm&a]úf˜ÍP9–;pLßEù¬�ÈíŠR,HÄpA1–#ŸÃáÁœìKÑ…‘–¥S"a+’#ÄÌ*ø–c}N"9‚Hhöë$^…ÔÌåFW!Q 1€ 9´F~š]4Á¬Æ …mQø€:påÄ^)Z9Ue^‘óí\6¹‹1“'ê*€-Ò*A0!9'Š±ü’¼<äB.¿�áUœõ]O¾?¹É&ì2é½jãmN”‘´ ²t)Æò<Š”H>À`‘”<\|ãÍÂnÑË$彩%tÿgÎWøsÕ‡˜p +b +S]†Èª ÄL2Ä +W2a?)Èüûi· +Æié]«†´ˆR½…,êÌwQRl1�iaÊ× ’ìtÁ¢×Å{rgÊs?8;/ +wÜ΄€à�´Ì&Qšý Æ|Ù˜«zÍ-Í|{“àdU|ÏÜ\«ñV©BG9VÄ[¥ +– 0µ_i(7ÒIj‚ˆyˆ¥o–Þ§}J$ÿCAקZÈÏ·‘–|9^ÉB§Oï[æ‘P¦ÓUŽ9£èÆX›&¦÷÷ -êõ¸ð;Àœ9÷ØщŽmÊP)Ž^¥qHÞš« ЬÚÎEÿW1ð. 5œR+)æ:Oš"º—i%ù¤ ~Òl|e£ÎØPè´…‰P褰ìpé=S<±*]f;@¼’õ›\³¾ñŠÀ‚'ÀÅœP|et‰°,Û/B‡çÛ¥VÞµÔŸy]#ŒYæ*Þ}*F-–œ¡E†[D5BÔ3OÒíy‰À¹‰Ùú¢µú“Åœðíy‘ãĬ’tgX}«È¥«h®t%žÈÉ]o6KWF*JyMÚÿ«�V†|ýÈ NlF-‚µDÀ´M9”¶àp!¶Êq˜!5ò|ˆGÕ‰£‹®8Þz‹!aä¯!Eâ“ÅœàõõUöäÛì×4¾-»ÒÞ�ðô§Ñð͸?œö‡=oºO8øé~¹ÿéÝ//_ô®™ƒ§ü5ûîàé¯?žü4:¯áëó~oÚ » endstream endobj 265 0 obj <</Length 43348>>stream +ãÏ«~ø>{òûÕ`è~:tÝ÷Ïn¦õäÛì¯OŸÇÝ™½Ëþà|\áw™=}5œÆßàÏôóu ¿=q<É7ßfOö{üε;üÐ,ú©;¸ñeëŸO/Wv¯°¬ëJ(ý×mÑeÝÿp9m=$*~ïczöêôÙàú²{*ÚŽ¬îJ®”¹÷¡ŒÎþ]÷¦G£›á¹ëÛÑè÷¶#ºÀãŠN''¬QçÞ‡Ú~~n=¢Ï[=Ž5“™Œãwú\ÝÝm!“Ó›ñÙÍ ö궨ðU[bƒÞsÏ£ŽÞMûÓÞšÇ4ÁÒïûƒºýlÔ¹÷ʶCÞ\½îM»Ÿ6YZåÞ²íØÆõäfÐþ”£â÷Og:¹i;¦³î¤~1®ÿ÷Û“í©çL6hÉ@ÄŠ,>x““¬~ß’œÄ®¯˜Œ{ž¥þ°í®ëqw:·žžXa«÷S¸†¬¤<”½÷Ѽ݌{õËq÷ú²ßk?¬ Fõ€›çxtu=šô§ì»è²–m»ðôy}‘}¿·oD;'꽸·wV¼w·?øiÔŸì…À[S̽¸ B`kç^ÜË€{p/îeÀ/—˜ô£“7ÑÉ€Gõ§zðî²{>úíåc6É£‘ü‘ƒjŠ;;p¶Uv˜Lϟןú]èÐrQZéÞw6¸Ysz}ùá8„—ݛɤßã62Ø—Ýy{²xþt±ý@ÚSÅóß·|¯l;Q]\Lêéú±»»ÿ5Žp÷ö½È[Ÿ7×uïfÐÿðûõhXÛÏÍ|ÅûçÍ7äñh8™vo1ÈXñÞ9�!E{£ÁhüÝo—k¥Õ”™ø<h¯8¥ï}„5&7ã‹n¯~×ën2ªF¥=½ÿ‚±Ànx}³f÷ܱß:ëÄ5÷O[„üÑ<„è)6Ë–‹Ñfƒ¡|u9úNX‘7£þpz²‰‚ént•õ»p&ž„ƒi÷¸£Çiv¸•ÖdÛ9ûôAÅ¥[˜S¶…&´–%>¶ß2bÇ´ˆj?õ�i}~\£J¢·z kæ.ˆx€tÇýéåU=moÞ¥ósã£fÛÏÎû±Üß»:dú¦Û_§ÂÙ¡íf`[NßÍ5É»âaòc=þP&w%Út«=â)¹»~ì¾×+öŽG;áxt< ŽÆuýGk#ÆÖzý‰âO7XŒÛ®n=Gë_%:ãÙÇÝóþMûUJÅï}ZÏûƒn{»è.‰¥Ð®õ@v%ؤýÌœ·Ÿ™ó‡d‘GãëËÑ`ô¡51ß±eOÝvˆº=šöèèÚ‡0íiÚ=ðßÅ‘wƒÈ¸-ßð m;³ã7Ú-¿«î»5GÀ+lËwÿãÏvÐÚ+wײœµv„pçí%ž¯”ë`k§lWN¦]ÎÚð¬µ&øø²;Öƒwõ îm"ÎW¼÷%÷¶µ–ø¶ƒœ¯xïƒ\ã–_›…\<T¬E{2±õÎ;‡U:k½Êvå¼m?¢]9Žž÷'׃n¯¾ª‡Ó»×»w&]u]S °» +åý›Í}¯mGßÚ3éT|›·×¶“¾Öj»!}›¥ ÝÒwaµ?¶ ÛHö6˜Ž-ß*íc¹w1AJkeÊÎÐÖ#º:°-»ïb#?¶‹þ`°‰»×à¦uÐÖÝÖ>ØNÌëý8jïG›TØ^uætÔž3=À@ºƒßºŸ×pq z2íŽ7"(¾ü½k\£Òv`Ýóóþ´ÿ©ýÚ‹¶÷l»®Ú“,ü�–aûIêõn®nÖû®¤Ó”T¹"Ñz_·ÏæËÞ8[k>)™/zýOØû¶SÖ¬uÿ’rëY;ƒ›Û[=|é’LºÃþÕçŽbTv;ýÝa¹w›Ù29¯÷èÜfÚhWT"{·™eÿè‚7Xa[¾û¿ÛLûÌ‹»æ7Ó{„~3÷~QäÖÎÙ®œM{Ç™½ãÌòµ\±Ž3‰wœy<ÌRïÑ9δѮG{Ç™“–ÖxË<bÇ™ ¶×¶“¾Gç8Ó~D»BúvÚqfƒéØòò¨gzÎq¦ýˆv…|eÑî¸ÿl0•›ÒšÊNV¸CÚ~2v7«ÇîÌÅÝõãaûðhRF>{uúóêœn¦•xdN¬í•LûdIПO÷H¯â¾Mzž=}kEߊ?3}k=ø=}ÛÓ·=}Û)úöÃØöìÛ£"o5Ì鞺í©Ûžº!uÛ3o{궧n{êöب[j6:ÝÌ8þȈ\ëÁîNY ÷›hƒMdÿÌ›¨õà÷›h¿‰Òï<3ý°ßnà˜Ô¸w–Ìч7ýßëÁ›A÷óéfAŠˆÃ=ç!¯ÛÚ:8®¯Fë²bìVNšþð¼¾è×^‰šú‚]×Ýéó R4$5î?QÃ5dÝi;¶]ʹ³OUãÑ°C©jsvÑ>QÈö§wiÉŠìs»,çv¹ï5˜‰ïež ãþæ™ûÿ{÷Ý}~ï~Èî<åAÄ–Ùl+õo^¼_)ù¾]€7¸>~WÂ6ÓŸ4`àÞÅ‘½ùfg‚Á7Ú>[N»{£«ëÑĉÁ¯oÖ®¯@æˆ4Ów.´V°}l¿i>>Äži?5¾Gé@ÔCȲƗDoõ@ÖÌ]:ñ�éŽûÓË«zÚþˆÙ½3tCyaÛOÐÛœ:»t’Þ}:ÊGp”îŽùãVS»3nHû(ĽýyGíÏ›%"ÜÛŸ÷öç½ýù~Æ÷xï|ÙÛŸ=ööç½ýùkfožßnØŸ‘ݴ̿߈õÜÛœ·W‡´ÝÚ–½ÍyosÞÛœïÇ$sÞ¿¸¸™ÔÇ£¡ãM‡í×Ú\½íµ:ùmñn£¼ê:÷>´Ïõ`0úíøý—S÷ûaò«¶âlµûç,Z“ù›ñ…“^6›Áf¥í&‰[~‡½þØN ‡õˆ¯%Þ«àö*¸½ +n¯‚Û«àæÆ&Ó ¿›pŠ{=Üvéá¼Lðý‡q]¿wÜeý½;ãúFßêõôûq}þýhÜ®³³ït÷‘¨µÆ´¸‡tYIû§Œeëuÿè_ÝL×Üá™Ò*ÿ`ÚŸç}Tkœ�Á|`ß™ç^L9 ´{÷6€h/è_×=wÐøýÚ±h£æ+>€nÓQn¬s›¯ø�\ì)x÷ÕR,×½^êAõR´¶#¼e[Èí^™³Wæì•9{eÎ^™³àhß+söÊœ-PæÕWæÍêtöÊœí–e÷Êœ/Qæ<…|l~I[¤™zä¯ÝUM=æÔ,¬øÂþ^ñ¨bŠ·6‡Â–§çh?}zŽ-s]ݧçxÈstSÁ?CïçÊ•{çò§oºýuf´ýºÍQÛ~„î3\mÛºÏpµG褶m?F7=qvåÝg¶zT™6žÖ}V«[ôãaûðh²Z={uúî²{>úmïÐÏŽ¼O0qAë”eûÄÛÅ ìv°ëë@Ï[ßF‹Eï}‰µÈ’šä÷-ß+ÛNÔF“z +;c\ŸoD®w +¼Æ‘þ©d„ÛOî#¶er÷ é{!îÑ qBçß´]§¿õÏ7p"¥ï_ñ¯Úè²ÞÄ'‹‹ßû˜¢¨½O±ü%¢ö=õP˜ÖK±=Ÿÿlþ&#iÏèÿ¾W<°¤PìÕ»)øì¶ú£|,êöÙ«?v@BÞ5*°WìÕÛD×÷ê½úc§Ô XO»xríÅê¶`_Œ»½iwðÓ¨ßÞIÜWn‰zÓ=«wwC÷žÌàÝ´?íÑ3¦‚)”~ßlJݨsÿ +ÊÖŽ°Ã›«×n¹~Ú`hi•û_…µ“»’p:ï´N-uÖÔ/Æõÿ¾©‡½öRëL-ž²}2í}þ¥}þ¥{ 8ïÒ™ŽÚ³%£Ê>•”GÃ¥’Ú༻®Ú“A,ü�ÌäãÍŒõ˜cmÀ;}õ¼X¢MÚ8›Òh’ÞߌÏnç;¨jÜçٙ໠dŒQß":m¯†]©yt^hŒh‡¼Ðâ‰qº&l~¯2R™ß7_ßz1n·Zûq<Z/´iK¦m·_íßÚUh×´þ° ŸÞ?¿oÅÿ±²{p/n‘ØKõc/î¥À{SS +l}Jî¥À½¸—¿ +«#Ûã—[gÌØËÛ ¶ž®½¸÷bà^Ü‹_*4™G'n0¢ÿ1wÛ“ß½øð2à¡x,Rà&#y´rࣼ¢5ϽÏJ±bÒFÙväÖ¾Ýΰ±O0ºj û_È/݆ác£i_-_È}k»NÔð·fw6èö>~ŸyÐèºÛëO?·žn2ý<h¯¥ïßgz“ÂweSm4¨]ÙS/`!îÞ–zœJÓ/É´íºÓÍvÏžƒx`b7Á„Ç‘äýî77‰†xy{{Ùb¶Þýk›7ÛIïzÝ ø¡F{Úo—d4„;î[Îd„³Õî?°·5'{3¾èöêÍ&°Yi/ÁX6¼lxW®MïP~¼yaŠÖ™šê{ØHÔ¸ÿBµ¦1Ý?úW7˜X¹ü½ +éöCf3ºVëyÙˆ“MŒÂw”-๧'á|ÜAÞ¯õv¦;pøýz4¬7àþæ+n/ûG}ݘů¸g÷ŒàŸ˜¼Å•Ùw˜i|[Èíž{Ú5îiÏ<Ýóô.ˆÝ垧ÁàQzYßâ<Ú±~™ÇkÕ[ŸôÛo±sÚdMú£t j«²Æq"ˆÞfqöãš’é@Ĥ;îO/¯ê îšØ¥stS¥ñÖŸ¡Ò±zП¾éöשzöGè6¦·ým?ýºmÙ¡x„ÞJjÛöctÓg‚>žtwTÕûK%·˜3ºs²;SrwýؽeñX3 =Â[æR§Ç{§_ÛÄ@»çç¸Oñ»TþªëšjŽcè»Èòðï¢oi;düÖž–Pñ #Û~ª½tU'ë]®vYŒÆ?¶Ø€ÛH8!õ¨Ó¢Ük(àm¨ÝN)rØš]Úöœ"‡&©È½¨¬îyL¯ï?4øèÁ®¦ãxœ®€·_wÛo†Ù˜WÝv"v +˜ª÷÷‘túØbv`z¶}ɉöwcï"žNYë0Ê]ÛR»Í?J*þëE=~Ñoƒe[æyÚ=k?Ç» ó”YkûŽý—Í”š:—ìfØ{»{DåÑ-¶ŽÍòìϱÜ^î—ÛÃ/7ñg!nG쨂òdUx?î'ío»ØžÕÿ85'·Œ•Øv¥Ém¸Ó]à¸ýtm Ͻל4'½ñž [05Û‚’ÛÙ½è-úñ°}¸ÍVß<{%òÓ†ç|•€@N ߸&0‰Ï¡ÕúÃô‡ƒŸ®± íz÷ùêl48xòìü<{Ñý49ȳgîÿ_;¸qÿæÙ냼STÖIµ¡Km½ÏNG¹-µûRØÜ”¥ûR–…´&ûµ{}|~ýìþÓ}ù·ý–‰<û1ûç¿òìÞðöà0ïh]Ȳʤè”F›ìêàPQåÚî#tv(uÇTªÌ ´¥{Ç¡4PQe‡U§¥(²ãƒ²S”¹ÍN ª5•«*óNžë +¿Hcà‹êäeᚶ£ +©¢ŠJd=샱5RÒC\W"´6õòNUJ”ª:R9¼Ov¤È]3y ïeG 猅C!:îµ…ëºîT¢0±ØÉAÙQÐ oǽ(¯r_$´WúæÞU +ÞÉeŒ›RÆQ¹aꢒéÐEå¾² ?î³,¬(„é0JF<0ˆ¦ãAºÂ2…0«)S ×nÅ�@ÂÜT®3€4l§ÊKxWGå¦ÀvªNUé")XkÊ5 “[Ú*S¢£låÆnRŠ¢�õGI)¡‹r½®J¥};nñz”!Ð"PùipKC˜<WT)7k?nuŠª@Vn†`˜Âz@c&Ð;pýÊe"H9\o²0«&KÖ€›àB(\ÚõG—T +ÆW幪b;qÆ—ÁâE'¥\„°±Ó°¬r·ª’Á^QBš8úCÀY!MDС’q!Äu’a„l·ï\Í¡@td^ä¾ÂÍàFT€.õÑM¾+lŒÍdéê™îºtHnÇ8„nChc2·Ís¥¥«À7†\Á{]ݦP ÄíGQUR¨®9ØþšukF¥! +t|pqðó¯óƒ"{òmöë?¾9]Dªô–ÄÊÕ\@®�z;‚å{r’5oC´RŒ$dë›ÓyÂõÍéƤë›Ó[/Wí6äë›ÓÌ7&aXm–ˆ9à<ûæôV„ÌU›'eØÖæÄÌáë6äì›Ó[4·hnEÒüò¾Qó;ê6dÍÕ\@Ø�zÒææSâöÍé<ysÓ5Gà¾9½ ‰ûætè¸×'φ£aVÉi\`ö\õªR•Cµ`gmÇÓacin½eÔ nJ+p÷;:àv”X¢z'ÈNºÅ¢`“WH4¨Þ<qf‘7=˜‡ÄZ8‰0=søúÙ±,>æQaɈÝ,Í£!ãK`êæP‘�c—cíE°8üØŸE°´î<Z",íÌ<j’¥ƒxùÙAœÐ8mÈÆnÙÓ£Ñhà +¾ê“1ëñð‡!¨w_ÞôϽ¬éšTZè÷ëÑxú>ˆQH¡Üæ«2ívNáȪ6ncÇ¥–^yú¶î¼ï¶«Ðhz7èû¼ŸNüy9îŸÿÏú³o×Ì¿úŠ&Ó1:%Ä8±ëô ¢UÀ˜—HSG7Óéhx:úäÄ»T˜úËÃÛó°É–Hº)åÙ‡G1ò\À{®Ä/ Ùð7Gf¤ÿýП2/áL‚ë´Ì3e2á5_ Nþ +(´Ã§�?OèøJºSÃ}§ú&ÃOo89 ×VN:Å¡;IÏ©ÊÝà•p¯àÃͦq§¹#Ê…Ã<§âî›ïH†¾@A=p=Î%Pql£€C›…‘ +ß!ü¿i3®êÌã-¼â›ænæ^ÜÀþÀ5¯ð-ûœÁøyúyöaÜ=ï×n1©oqR+˜`‘D»ˆìèÈy9üLëMB3ÜëlåÀ8„_¯Íâ‚nÛõZ¶xÔªEwt¹ašŽŽþò³[ñî81q™&hºJ‘¾.ü–b¾1'„ÏÀÐÆtÎ͵_Çq9ÌÒÚ$K*®³°Bh¤S›Ny2ÈÞ²I–'Ùrœ^Ó¦ÄÌN²Z\ÐMÓÌ$/oñ¨U‹nòã$/¡ÜâkQn)Ž‰ÝB"}<®ÏûÓì¸;>_J¤ïLí%ܯnÆÂ7¿Ud…‚Ÿô¤[�Š@ÈAÔRÈòû'÷àxµðˆr~áÆÂhÔ½Kgé?‘ÔÑoIߌ§í±õÆ›C‡Âj%é}wx»âWøiÝ^s솟¢‚Âîï1âÂ}TÄ“:‡¾(Y¥}›{¾]„b¾ÓWá©ð¨Fá!4J_ðm~"Ž±3éÏi½ÐÚñAò’“Æ+¡ŽŒÞ={ä8£Ì‰Blá6{ÞÖ/úõà|žò[̈Bã&ÓJhÇ_&_rk´;æ\™ÜI¨‹¾àžs;°Ý®³Èzþ¼q‹Á҇ŠsY£ +ØàFÚp¬ªãŒKî¨@Ç*+Íü~w2´n3\bÖ3}ø鸻8}}7ðÅð \µáb9{aVž<î8¹LGðK889È#fI ÓÁ“aeGkÚÈ“³ÇsÅÃOíǧãhoÅEèb¾v˜zí0óuÃTU2Ìpæ‡ ‘€‘;FLŸbùX‹*V/l K"‡×»ågAµè ,Uúƒ.ÃÈæ+-¬ Òùr¿H? +é‘û¾‡¹zŽþšÍ‘ð+B5±j0+*ÎÊøA?¨0!ácÅÄA©/R13$ÝvHŪ!©°ÜDXn",3?¿ÖrÓér³M¸6ó£Ñéj›)?;éÇ ýrßóðñ›^¶cô’£—í˜EƒðæJ¿¸DÐ>¾ÚâÒëö‹^²_ôºý27¤Ü¯-é—ô+*篵®D:)º ×r~ "“™ò3ý—Ø}änq5åáïW\RbÉ®Kv…X²+ôµª¸rdæqîÿ~µµ$–m±d;ˆeÛa®÷H®ù1üWÿñÖŽ?籘˜¹PùYì{x³ÿ°v®ƒ«F…¿_oí4{¯gz?¿ò›½×+{o°÷ž‡ô8÷¿ÖÚ¹;ÌÿÌßy§’R6A€eEÁÛ-ÐsD3Û•îfÁ„gç]kxÊ\ѹB§Œ I‚šÈž]ã«uÆL=ˆÁSÅŸ2öÝ_‚_»š_Ÿ¡ÊÂ6yMë×Ä,Slé‚¢¦ô¬m»Vg9ŽeÊj½¾è«‰²ÊõBäôGu¼òqËÚñèú|ôÛõ>êŽrXDhùiùQÕiÀ:dÐJ}59aÈaÑÑø%•hµÕ¨î4MÔ:T%p|�Öeï[PqC¬ e¸¸b&¶!El‹`±›«@ܽ® +e¸O@÷|IÅÍÐàB£§VgQ +¨…Kö m›Ûªø6úé=ëõn®ÞŽ¦•Ö’ê`É3ˆÉMU0ÈáΗ±`@샒YŒ0¨ˆØñ »/a2xÊJF}çž‚zÒO™˜©¨>4\ή ãƒrn™„AÒ(Æ:i7íD{ø ±(T):…*€©*/8¡‘*ñ‰m0–{Ó…Âá gð.YV)w/y™Ô¢¹é›ŽZ¼ÉŠ—*ú5ä_–Ↄröô§ÑômÝÏÝü)õR„ÏRÙãg¯^†I{1_Qf,ì‚£«ç£³úôÙ«êÔuâÝôó >¯ö¥6Þc¬ínÝÈ[¨„^ÉN?k·š]àWs» ®yÞ'3ûhn¯¥T4î¿…°ùÍ<»ÝçHÂ2‘Ö &Bsdjv».ÜÁ³Û<R‚ÌŠYòÛÆ‚¶ž +Øe{Óó)íMP±tob¥\3Ð ØðMG-Þ¤uó%«¨À£Ý¾«M¦í¥°¿él…`i+œ€YSªBÀñÿyó + ´‰DØDN@¥,x_åÀkb¹Á‚*'Ë™ˆ0Õy+ݹµµSZ^há#sEøØ>>úEp5Ã>3½‚sžµé�ë,¸Tº1ÃyŒ†F'ùtd TtAð},O¸âP¬xì<8æU‰,$’dO¬-:%8æÎC¨ÚRÆH‡¢îYvÀ꾌»´«Jô|q/�—T'T;ò$rÚ +å¦Ý%ÔÐIpU¦£¤–‹«ZôùJv”)Pê÷ÚL¼¦£¥5KÞêºVVXãÎå:稢íØBTxx¡òrIU KT_Â5Ûõ×-ï¢0Þn•;ºû‚=W" YÆ&ýØ|lÊ®¯†Nž›ÖçßJÀǃþõun0m€Ÿ÷'°CCé_ÿæþܸÿ1èÆìú;zÀ5ÿ¶;ÁHS×)G%_"¥¯?õ1ŠôsöëOðOžîCÔæâŸ5^&ó×Ëåe�äËùÿÊdýèµÐo°/Ï»ÓîwnI{ðë«ÿë?¾øŸÿóßKÿù?ðûòŸÿû¿ïç÷%ßÿ¾ÿý?¶a}®þ}Ýþú²€,¸cˆÐ±¿Ùr0&Z?å[ªìÅÍ|΀ª&ÜÀ7§@~™'8ýõÿõ|Çx<W¨…“þð#ÑÒï±ÁÓ™¦<1“@=×ñ ŸíŸg9‰n Ú¹Á¾<»Fÿÿ~�Ð[QsŒELøˆX}!0~M̱ 0²Þç»ÉbDXd2¾9ulŒjSFÃqš·f5z{fÂnÍn@<ÊmŽ¶½^Är|sú—Ês¨“YÆpPPµãž½ÊžÝLG™ß`ý?ê(=ÌIg¯Ï&õøS}~êòS_h’l‹ÁQ…Ž¨„ÎÙ‹1W÷Eš¼,’/`gÑà:û¹Q¯� âÜ)+oO`9xÖ¹Ï2÷¼Ô%zÛ +ÿŽ=G+a'“Bë´¢[5¥.“¶�vÀ7`²#`âNš0eQ¡M»/F[ß–ïA -ÁïA×gûáÄŠ<bn<`ŽàÊÁhphÁûбÊUæ}‹0éËm§Ä§¤ÓnWEY6z š¡¢L‡[u„µV%§êu„q¯°0¡qž(îB2ÅÔÓd†y8\19´h†çp…>ŸÚý®ÑÀ` +óƒÔŽüj£Dh Ú6Ph:¦¬Rt`$dn´:ˆ£hé¼'�B ƒ"þ‘f,ðëôq7üñ`¸fph<þæ0…øƒ¥Ñl)þRXXÚQÒN +Ëßu¢ÔÍ}ÛÍŒ üIˆŽµÉRu‹š¬Øz +!FXDa +Ãar㌠îBJe¨«)•¡E*Ã&*“�˜ÊÌbp(ä¦ ££2¢4 GØ2þ‰q§Q“ðäIÙÀ)x¦JU&[¸ øK`Œ¿†',Ä.DüqO#úx4Šãõ-§ÏwsXÔ¹¸*š¨KA8<ãZ0)¦Üy,tÑ ~Úz¹´)æ”J®Ä©N¡Á«•NmÄXKA04n—ÆÎïŽ(ãF”ñ(ÇéÛMŸÊæ°(+E¦qd¤ Y™J{éšE™¢Ìv¤²*Ř㯤M¢SšB›Øn +‹ ÆX +‚‘q»4tzuD÷/"ŒÇ@ 8Jßlú6‡<m…¹M–‚p`BÄ£ÛoOá8Dzq<Ø?º1x³J‰ t ä¹á0AŒ±Cãviìüîd[R#Êx\ÇÚMžÊæ°ãO…À¶`–ƒÒ¦^åXÆ2ðÈUÇ”‘Á£ç„¿#PÂÞÅZI‹í�½;aîP@*lÊÛ IbWhØ}j|9"cG„¯‹µhäÜnà»ç±ƒ(#ö$AxhÄùðàw” Œx¨eÄhq-bŸ]$(cPDYòC£†yðôòe¡‡ Êh\‹GNí&�BÙ,v¼[‚2ñЈÙáÁG”àŒ§gÄ]qµÀ~q»á9ÁA"Â"Ä‹å‘Ó‹|Q÷„Ѹ›N�„°YÜ4˜µt[PÜ>áœ,°? ˆKJF¬W#f‹&@‚2Eœ% ?6j˜GO/O÷eèbº1Ã0âƤ±óÆŒ�Þ˜3øI¹³ˆ3Éò##n††NOD³EaÌ;ˆ¹+j–aÄKA8.n˜FÎ/£F|Ñ"#ú°Õä9 k/);qE±14jât"®ˆŠ¨"Ž‰ ÄQQ›ôñÄFSÁñP›4^zkÄõ,âˆúNmh3y8šÅGÊE„ÆS2Ù÷ã%æ&â(0@EÄ"„X(j’ž#ŠÂ(J 8j“†^1DýŠ*#áF54™<Íb#e¸"†BÃ!F…w\àe"†ˆá‰("žˆëž‰ÛÏEa%¯– mÒxéÉN=‹8¢¾s-µŸŽfñ±:Pô®l•¹×x5“ežáŸAd¬Ê›,¹€|9ÿ·…ÉÒÍé—Z,ƒU…þûïøü¥?þGó?ú¶ÿgÿÿ³` ýÇ×Y}˼í?v» Ú6f MÁš7cÜðÐ[˜7|ÅYÇtÔœ3rø±ÞÆ̱w>qœ;d³*²ƒí ®âÈ´½ÄU\`qÐ[B°æœ)dÚÞ‚ãš5‡ ð6‘E¸[ŽôE†’è¦Ws±¡·0—`½YƒIØÞd‚ƒš3š ô6f“E˜[åæ”èHf8oRAèŒ*Xsά2moXÁÍ™VzãÊ"ì-Çô£KØÚì øæ /˜–ïV¦¨9o|™¶7¿@È9us̬-GðÓLØÚ8®Êsæˆþ»…ªÍ™hšÀ¶FÍœ™€›j`k9bpšÀÖ&pƒ™5â`ªÖÍÍ8àŽ3gÈi[šr`,sÆ�nnÎY€«\ż™§ lmèqÕæM=ÜÜ؃ÕfÍ=M`[ƒŽfÖäƒÀ>°µêL›3%À ÌA OÕ: K¼‰I(a}£z§ lmŠÌpÔò$¼°ØÀ4´�[+;o2J€¶·ØÛŽæ¶ØÛ"¿Û@ìmH°Õ‚×m ö6¦¥„Ïm`vsóRdgh½…‰)aph½™i®Z0·MBpTÂØ6Ðz#T¾60{CTÂÑ6IÁ-ŒQ𵞛M1»¹™*ádS´ÞÊT•ð«)Zoe®Š,lŠÕÍMVóxZϾ¦ÝܘYס›´"‡š"ss£VäYSLnnØšÇÏz~5Åäæ&/æUSDnnöŠ,iŠÈM_‘IMñ¸¹ùk;ëÔ›Æ"sš"rsãXäASDnn ‹\iŠÉÍdóøYŽÉ¥ÙîÚë¾\d¸iDìßGWõl*âOþ»ÊG¬tÇ*¼æE‰ +³åJGYÜL‚×°t) ÜZ¢äÚj9îšÈL¹„aÒ>•B‡ÿNÔÿ))¤w®:Ò #ÃR>«±tô\CŒI +ÃÖ U9ÀZ9qcÛI˳cFßÜWƒË ”J!�Nbnîa’”/�qµCl¹T ÀpåÃÐMÂÉn¶ÂôáG±ÔLï+Ë0\9äÈšÁ *2m;Ö@†·ýT[`þ¦;¬§ÇƒÑ¤ö2¼žOش霩À©•†[$ ¨Ï|¢×*8Äù‹˜*üñ¶ˆNBW<Ÿ"tø_¨–ÀÔG™ÏÀáßâq}YÇdñ;´Wù”ÁÉ›’7&¥lÜ%&2+])B|jÈæáà%ô>p?Œ…K|§Ïóv‚Ÿð“ô7ùø +þÇÃÇqXbçù—¤BéñQ®J¡ÖúBá37˜aŽO=›k_,.XÌeO[ÞâQ«e1¡‚Kqã3$7ð}ˆh h:ôxŠ<%ÉD5f0ýËÄŠ~*}{a>“÷&Ý “ù¥×!@^[™7ñ„uj6É]µ¸`!g§hy‹GZ„ðÁy}*À/N?";%Æ…:Ú ŒdðgÕt¡ôºH–²ÂË‚¼ w?úoîåæ +ýùšMLJbKã¢VII©AzÁ¿jAô:škjE1îSTúK§|µ³ 2}Eô—¤·:Ívh€ww\®¾^qsÒ¦‰9;ŒÂlT £Áì?>Ó%2R*~•üõ0)q¨ÊŽ 7+iHIyÈ×'ùGï™ _Ñ׿Åë—°2ÞÊMâ%Hôí„»å\Q¸VÉ=4ÚMÐëN’~�Ã*BÓÒY8T¶r¾…’ðk¼ŽR(òE=xI’_’üµ>~y@VÄzÐfIÌGx-t…{À%àFÌÚè¯é!d䌣œf(~óÝàÎ$S›{$ +¾¹‰G]¡aSG¾ÎýM%_�ÌOY~–Üà´¸èÂ;œ–¶:‹Ó⢋îqJØŽiW)6GÄÇÉHæ(âšPMSJSÚÌL¤s”täË™¸©y—•ò¨kܶIÍñj‡Å…m5—EweËG[nܼ·ØÕÁÌÞ›Ù—¼tyíÎî³t†é:Nvk²…“é^‚pñ—[‰|Â…¿osYa[,DøÒ–Z·Ü@ø1s²Äi…íâ'Öµð«WÂ…c%A/8‹tÀün©‘Iƒšgá®Ãßã7ÿóEœI¼{“«‰ÆLÏÎùÅ'žSÊ:úä¸s‡Y½¼…ã0§«Š»SYèä®ü½:ðéM +·áʪ£r—ÍáºO¸sŠ¾ãUèEa#ä„! 4KÖÛ-bÈH·ÂâÍÏ ž ˤðúîcZ6Žk°èŽÊN^¯—« +ënXd@mœø¼··Îöãp¶«Ç‡óã9LìµM„¦è:L1Ùó·Ÿ9Ià —–™Ž²:û/ÿYéïäå6!K'zÁôõ8Œ,<Ò@ãÀ=ráØjÓw$¯Ýò÷©QÓ¡| +¬šC°5èÏã˜;U($Ê5úRÈ C¤õºñ“ùj>n‹‹a﯂Ó胃-OkòœLÇ�µy2÷$P&¾ö°ñLmÈ,*ø¥3isp%\$/<…é°P1¨Ž=séÃØ>tŒVAA/zL¼«ÚÆ)ÇŽ‘Z ò³†º«Ï´ßz|Ÿ—Ái‡A#|¯JµÊÙ·ïÞ5èq85ï’Ã…^n¿¡b«ReHãAn»j8±±Ê ¬D›hÃ*¦\èa¢|-ŠX¤ +VZn„�ô¢Þƒ\ûþFñÐt "¾‡�½î—¡Þr#³#ê-S¸<ýõÇ“Ÿ_=Ͼ˞ôúãÞ >U§ßfRáfÊ•w?6¢*Ül8úT 4éV+¼A#ï¨R8v‰ahÛÑi…Îs4¹èxWÝq Ð`å&LË '®s?„ßr\Y¼ü‡ €Ó¢ÒÞ£°0ðSûÇéƒØ=ˆ§- -or}%jÔ*ð4ÈàÓZPžx:Íäxnh@i*¸:½”ÉpÝÆuj’RŽVU±,p¶!Ó¸wŒv¿ÙB¡T¡Á`v_˜2ôÛÃ`ø‹ä…#ž…ÂåcÉéÀŸî…7-7;t<׿ݗ#(.YeÚƒ´}‹Š¤ª2åR–Óº;î½_YøŽ©‹;º`‹fÜÆöi“Jw¶Vh¯Œ*ïB#ø ¢£³;\µðÖo!Œ'.Bë\óJZ ©[Çà…�îu«*ò +or}%jÔ*ð4ÈàÓZPžx:Íäxnh@i*¸:½”ÉpÝÆuj’RŽVU±,p¶!Ó¸wŒv¿ÙB¡T¡Á`v_˜2ôÛÃ`ø‹ä…#ž…ÂåcÉéÀŸî…7-7;t<׿Ý×#(.YeÚƒ´}‹Š¤ª2åR–wuwÜ»\YøŽ©‹;º`‹fÜÆöi“Jw¶Vh¯Œ*ïB#ø ¢£³;\µðÖo!Œ'.Bë\óJZ ©[Çà…�îu«*ò �^÷gä¾sûË£H£ÜWáö%¤w1hFú[åÝ>Õ2ì«r0„WB¥ -÷Nšq+™,×S[Ðo!Ã!v’+«Í…ÏoXY7<¸µ@Ooð<“pñíÌ`g€Kw.(«J³djôa®¯½Óf ÞWs3ÀÍç½+ggÉ»1n:O®ÖüL¡¯Úæså]gf+$§Üt¾`Ú‚ÓåGœœœ¯Îâô|Æ´¸!8¢NÔV³Ï+"é¡2䢌7Ly—HJ½Y(¸9c€Í&—Á.Q¦ü˜øuØMñOwM6LG ¡ÐífZá±cL.cæÞ!àF¼GVxtÀµMŽ…rÄ´Àx9‘Då(^åØë]càŒá,£¥.}Y¸ãRÃ}ÆÞ{’E{>D5¸…—<cÚ8s ";ŽÓ`> +÷Nšq+™,×S[Ðo!Ã!v’+«Í…ÏoXY7<¸µ@Ooð<“pñíÌ`g€Kw.(«J³djôa«¯½Óf ÞWs3ÀÍç½+ggÉ»1n:O®ÖüL¡¯Úæså]gf+$§Üt¾`Ú‚ÓågœœœoNãô|Á´¸!8¢NÔV³Ï+"é¡2䢌7Ly—HJ½Y(¸9c€Í&—Á.P¦üœøuØMñ/wM6LG ¡ÐífZá±cL.cæÞ!àF¼GVxtÀµMŽ…rÄ´Àx9‘Då(^åØë]càŒá,£¥.}Y¸ãRÃ}ÆÞ{’E{>D5¸…—<cÚ8s ";ŽÓ`> \Šîܲ0Y®ÛRŠB¼}´{l.¼=£2^fpKM Üþ”wa—ƒa®‡JTˆ¹¥j`‰¢çzŽø+s˜;>xâ|üAy_ã+wÖºþâÞîZ«øJkw;º(Pô,tò¸‰Å 3³´ƒQX;D1¹í¯á·t ;SŽT%ìT'*8¼€±štÛ ‹ÌÜ3 *4 ¸µdØö”vG¿ûH@{'„T<ôœ@^ºEÁXÕESQlÚR£÷N¸eÉM·Tf ]ù4¨•á~£|J[Gˆ<oŠž)®Úé¼/¿ñîb¾¼0Ç ‡zWyG.È�!c’áz ˜!¡=¨ðĈ327iÇóó¸ÚÓìžn¢dBmaSÔx¯ÛÌñsǬ”ãÛ}sÒ™ªÜ -Ñàëm¼†@šm¼¼ûôý³³ãîxþìÎUg¢ã]AÕt ¹ð—|å’´ p!‹ýÒz§2jÝMkб - ^®�1B§2xÒ¤D%êÑaÝ3ŽŸ³ÆA,z¸w¹I“Ux†óÄñâîÅ -k� $;ó#ÈI)üeh$0ËrWöTFzÝvµTVvC5° jš}·µJP¨²Kðßp-W -$�Þrƒì&ƒ\€€Äf@ñì›ñ¯¢g¯ÉóÃÐüö�MNxô¡GšÂQeÂC¦�ùAá(aLx¤UãÖУCwèF�„nºâäž‚¾´w@Ïîí•ýÊi,£cŸª’ -évîY ðÂq’(8²vÜz5ÞËCpŠJ¼Q–êÍC¸% REe©Ü_[V"©!Ž½,sŸ&1TúÜñ:)Œ+‚N¬ãc6}Õp¶»öËК;VE¯@ÅÎR½yµD¹þðŠÝgl+×j²–%:1¦›16?×R à‡eØÈÒU*þ6è \¾“¹Ýf<o³ÆE�”ô†Ð�®~d4ü+Â3ª,äF§˜_pÑäßAêEh‚:93о¸ÊÖ$sU+•s`ªÝìPƒôHo¤çÐ%ªºÚæÕ Ô¦ ¾‚*Ó#µMÏáÕT9t¬ÙïÞ}(Ü«¤ã¼Œã¦,h¹“`rÔYZ“Ë-< èžuLJÓîù¼ƒÊ&N)hº«ç•ÿŠ&qäJº‚JÈx_�ø‚F¤×øˆ¶=<=èj™Ò?ºyôE©Q¾©ð&ROº¥YÁ*ÉcéLhRzŸ°³roð)é,>ÃY “ﮪhý¡6ñÁwñÐSn>YÌÌSèÖóµiïÁ!BÇM`4ã;!Úú1Ûÿ¬9[âa庚E…ûrƶ½Á[nóÖù›æfü?+âê`~Å4ÖSºÖæV"¯QoLoc]›8·…6¿ucé}¾‹![-@YÉÈÖóS,¤Y]³°‹¦xƒ·ÝæóSüUp -dº«Ãú÷-Ñ3¹ÊA3Ö€wGÈ«ù5A3qµ`ßÅ[x©ô<$Ö¸ôïPóï ZW3ÂS9×â<$Ö¸ÏÇäãÙ„Ÿ DÛôä¶^ª÷CýÛôÙ¸îž]Žz7“™ --loA^+‹ïTw\².‚Ć®1Ž»Ñ±YJeTö˳ŇÜß"”£sg›./HwÌ'áá0<Í?„ï\6E|%ËÒ-Ý_,8ÙèpnƇ“ðpžæÂ÷ɯ6`ÇÀ -8«@†Ì1ÃL™oƒ ³½}?¢;Œ{ÍááAL™þpðý5üRú_ÞnÜß×çÿª{Ó%—o&ï³ïºÃî»zœ½_�?´ò·ÌÿxÜúŽ’_¿ï÷BÉòŸf*»žv²·£›áÅÓù²_g‡OšD¾²F³°É®± WáÅ ;¥òn1¼:¤¾o>~ß÷FÝAv˜½©‡½þ€Šc¾h£BwúÿNÜ÷á»›šÊ†©šm›€*h†<ý:ëxT»¹i úOØ\¯Ý”¤Ýv©3ÿ¿‚óäfp‚Éž½:;»57¨±…“þ¹Û=gǧ®dq=ý£Õ= iÉd»‘¤KaàþÿÈ0ä«úz«W«™7;A¬ñÞüŽÞkð½0øZ'Wá‹*ü¯ÅK¿äÄ,ÚU°Üf·•ƒ9ªšgŸfô/ÌÏÓ,¸OÆ#Hð·˜ÀûÍ’Œ#ò›8ŒãûúW*œ‰æ£š{„a›iå8 Ü;°ßŒ{à!Ê\UÒã _Šƒ/;£•ÿ…®yž<ýÏáè×!>¸ƒòɳÁ§É¤{öòôëìé÷nÆÜ¡óô™;I?ÖTäéñèê–þ‹þÀ *¹Iï3_ÀC=óþ4ù³ã]ŸþÔŸôÝq ηp:íö>lÐÂQwÒï¥ÕÇ£uûú¼‡Š®ÅUWm?õŲֺí`{xú¼¾Ì¾É²'I;pœ“ák³o²§oºãé‚‘†7ýi›Ah»vWá‚uC?Nêo?ÖÃט»ñôšVÒ×óë9û‡�õ”ÿ¿{P#ë„"ÇÎY©Šf×›\-šˆæÞ´Dó Nß¼ÔèÕî¹ -ï”7Vøû -½ŽIwâ5ÞæWVZ8†sÓÊÆXY £A=¼øBzŠm¼›â8bý¥9xúíouïú€?`Ý9b7sá6Ó¹ÏïÃÌ<úã.½×——“zú5NÀ’ú¡Â«Áà…‘Ñ¸Ó½vlöSAú€¾'F³‡ÊìÛËKwP¹Ò?ô§ÛDxŸ¼¾™NœØ—X‘Ÿ÷'׃î'ÿøuº}]?¬WC_QÙµ=ó¥¡/¾x‚J£DUe™0hwJ„Í*zDcj}šdƈí>QöçÁƒ;ËË;QUBàÅÑÒ -ïé£ËªŒõœêŠ4{õó¨J%‹í¦*{>u‡éÒ®í›=ŸºˆDß•ƒæž}cÚ䨱wyÔ,$óhIÉŽGãa=ž|)2?Ó(“ö•s!§c¤·áfOÀåf²l™ïµØ]‹}[íyØ…„¥Ünv¿·{7““+naî‹49ÚEè -§12ûùPÒ¨?©Ò»¿Ì¹ö¢îN߶ÛhÌeJ:ÑÞ®<Ñþ@´¨ÚÓ¢=-Ú)Î`kèI ñ£{zèÉÑà¦Î¾¯·ÝüÀ<’•ÌýU1ÂJ[§ñèŽl„kQ¢§ÃŒ_²pÓ*Ð/¹0ó>ÉâóIÑCàÄä…'óŽ´²,|zq‘WèIQا1D2@ª¤(–¢F<&ÔE—M¸ucÚ'Ê¡ÄßgH·e+ø¶'#ñ± Ä–®Ž–xƒFÐò¡#? ”|°†lj¾¥(\!'¥UªèV™W–Â]Š‚•Û^Ò˜¥¸Ð__\1ö ;NF¡W¸Qx/-Ä)yBÝQ~IA`|¡-’ip^•K{7+ì.Y7È;`"Ù1…*+X*Wã9l6.AL»€*`ä#Z¶:Š\Òì—Ǻå¡uYÂ%Á±Ý¯ C'vþ`i¯—Y²4ì..;]{‘y¯Lçñûñȉ™ë¿{?pÿOwJîÜýêH«•š_ KCáN·¿X¯2ßøíýKªœ.φïübÚ9‡õdÒ€b¹Ÿºã>çÄÊ)Ä~y^_»Õ8y¿ªô¼ïúŽ¨œ)þ¶taiý0Âýòõù¿Þºµù—, IËÖaõi½‰iV–I;íÝ—†/çR‹ -÷äf§IcLOö{£‹z•û ≧¡Ú|µ³S23‡gŒê6Z~ð3/$†½§Cïax]#s·mUáÇÚI¡ÐËtÀïÍÌì—åË’+m¾(ïEèôû78ÆA$ä—Ò17šl§g¦Pü §×€�Èü §ÃŽ]N¦�Ö¸ô¯Zî‹=ñOèˆÜJâ6N¸Zeé^R…,‹=‰¿/Q½[ï½Ë4+ò-q-8:w;nA¶£<_™ï�m£¦læÚ¯’»]%ᦴ\$æ^=ÁwwŽUù§ø¦y>]g§ï»£_wJ-²÷ïÙ²íü`þ=¼J‚¾ÜR!¤¹Úù¿~ô|0D´Ðso2î5TE烛q(àÑy3©ßœž0f•"Qíº‹uYv{?ÿŽ1s|ÑXâñ¹AºÃÛ:yNzƒq£ƒëñ´1¸ën߶ Á'ˇeßþvÝu´ô¨¾ëì§z< ÜýÕ'ê?¹Ý§Ú“àÏM!ëha!H7Bâß<SZ 9ÚE¥Œê¨*ÿ#ärô¯B©¼’Þs£ª -¸U�ÇÝ)‹ò|ßqºŠ?m{}]9ý -ù&wËú¶§q[FãŒÍŒ«ø³¹Ì´©ÍTûÄd~Sù°ãžlE3ÿá Ý›ÁôŸ µ<í_]˜Z†TK|Ö‡ûÔ?ß¼h€"LçGŽ§I¯1=æ·Ã‹˜sm†Í7ÝA=ÖØ÷7ç{ûäivç~£þå÷ƒYøÁ›Þ<Zžüü¾?ýoí»›LwvP‹sZ=yûò({[_„¦ó/"ÅÒ…ºd>ŒÊþ½À¶÷Åi4D¥•{9®ëa(f„|ZõŽFyWw”>þÔ¥Âe© -t'´E%Š$/,†ð‹PX•ûƒCRzÑ(ü]÷]=œvCyÇ=¹ÂèlYYdŸ¤•‹V‡ „¢DWXAÑ Âû¿b“uìföò¯ªÊŽþª ¡-wUŸ>]Kí+‰·Þæy^aÂÇ -Ãl 9\$‡eô’óÍJ‡ —•¥kV<eÖU8³Ei}dž?×äí¬¸›öèå_«<iê:Ü¢×x×»FJS˜I9çí+pÜÜôO¸¿®Á<6(…F}¸9æÁ -å½Ô]ÛZá…[–U‚nš è tø详¢µ*ôG‰²Ô¡¥àí^)ø—"“Z’€:…¸S4Óp³^é¦Ð{Õ-lå›KJ´i¡‹sÍ œ 7IsB4„ÕP~áT¹*ý¢6!øÔæ²rSÑ‚Ñ9´‚îÔžÕ…ðêq×Åå�BT˜MÉûÑÂ=fa¥HAßžÁ‰(…kÎjÚ4…‚Tª°T „Hø,MnÀ>ªÄXipõHŸÄ7„ÝÒ€ÿ‚ðïÆÛC) —¡Ò0m«Ûhyaü¼‚„HŸ§4i,œÚÖm5ã;àÖ®-=òÍ!Î/dߌÒ<8!¸¡RkŒ“©ò{¥5èœÐúnqPQ1×6«0–¨ÖfYS\+Ú/Uè•”´›JkâÆÈB³©#q¡0„Ø¡ #eIØ®Üfñ»Ûh|}®t¥½>Þ·Á £s¸L'3ô¬píjŸöCríæËí/ÜsÚHlQP¤HN«^ùêÇEäì’´HÄN82!ÂfªüR•}~u¤Žà;ãCPüªÏaSº žÑDêÊìƒy…N5°›r?`•¢k!ì‡v“%ò+4í&G~ 9”•9.W{ÿôªÈÑq ïýÎiiÀÞ/ÿ -#®˜h·Ò<u%ý5-¥•¸TØ÷}¾D4$á¯Êã‰kñþ—.¥ÏO^ÁÖOz(œ)蔓%ì=·{µDú ׳úSÚÒò(à¤�üñð6aÑ–¸öSŽ*kÜt®MåW¯®‹¢ôáõ…‡"Áаh÷Ž>¡4îNˤQù‰sƒÛaÛï0GÇ*¤Û|T!WéQ·/»£ -¦´äFAFÄ5¦6ê°_b[î�ÖØÓ´0!ÒPð¿k´„®âŽ-£±°žº•xO'F¿x*Š˜‚sPƒ–Éì�w0n"šJ˜ -U1º¥'ÜÊ^¸|ª²Bw2Êí¬=YÞ»føˆ(`<rJIÍRùõouŽÍ–:wßñ„(N6<ŠÎÚpv¤'<Lü”¿ãEŽHpè„{°1è‘掰¦Dsº`‰â¹Íœ…›#‘åÚö¨uKßóU)pq1ìL:Æt[)¢¶xÄ^µµžZw~ZÛ²p{Ñ(©¯‚¶Uœñ°UÄ«Bªë7“·À"7ýçÌ³Ç ¯½ÈòÚ,Û8ýðimU(k¼÷Þ÷/ÖV -ÅB=bÞãKo®®H<\õ^_la/Gƒ‹z˜½EG§5í¤e¡±åÚÙ¤ÐÂú‚XeUNø™J¡¨?Åž¼w?af¨7ï6züY”Ï1iüf†k±ãŽÜïNnðÎÀ`‰_Y†u$auòñ_TÚ(åãuÝ~Æ-oœü"|RÌ$9&ðmÀD H†{a”ÅCòiâêÎPt2u„ÉwLQf¿øF-îE`Ê-“NG|‘™0ˆ|ÉÅƤ;nñ4ÓüzZÃ_ lDÜ¡¯‘q©Lú%·&úÔÙ/¡a‰å÷—v¶t”‡©méÉ¡;=Œ?p«Ùœ‚ÿo>F5Ï3'¶!a•Nî*<ÃãæÚË –º4û%´hý ‰¼„%ªãŽ—û&€³øŨ ¾–üX¹Æc·ûKRL©Må“ü…ëÌ1϶r õeö1�9 -3°~e´n•Å6äK4L¬ûK{ëçú<; Fc'§n®y—…Åì(´¦Ð7f»J²B1‹-™Ñs?·¤FÀ}|N8¨-±Ò·HKųPxf[æ¡Ü0žG… -ʆeBª1sBªïƒŸÉ -fT†&ÜÉ‚œb*€ø&$GÅN¸Íh½ÙEI‘mžGô·©Q˜[£×©¥$ÝN7¸ª¤dÁë[&ŽÂåF3बâú¾±7G¬£"UÔ&׿œô'ÓT=×ô˜7v¤é.D"EËoz‘Ìœ^ ßz›ËkDžÞ„Íü›ëÑÍt:†ÛZçïo».ïÉ›Ñõ×ÍZ0j7b~~ÓÖƒ³ãÁhRû‚¯C¹î´~ѯTðEpå>ÞžÂOë®;®1ãú¢?…Õá~¨™ÖŸüÍ! ïQ»È^t?ŽÆ¨Ì{‚CýzöJ7?Æå¸ -óùÜ íªN]ÿºpÿ=gÁ§DGÏ¿|wòýè¢^øã7Ù“ß®C÷óaw:÷ÏÝ -—ã=}6v§ð½4ñÚOJ9jp1®‡¾YèWø3åûõžü?ÃÉÙÇîxòM’s7-ú±G_à“%åÀÏ=™4žv;çýá…ªh‡ÄÓzú=¢a=†ÒÒ~Ø1GÃe]NÇ7õ>ÔmÆF%¿ÐôæèÅÊÑ·š×>Ü›Ùfá¯ÉÞèî@˜Ž®îj«ïûËÇÖƒƒ¢í—òÝÿLº`B„3Ï‘Ž¶ËñÎ÷Å)dªßš®<†]:¹üu‹OãÞ¸RxÇg¹Ðì ¼l˜¿ö/0vtí䆂K[è}’7¬•|Ø!:){ݘ>µÎ§‰¹×ä·Vdä¡ÂnRˆq>r²ëÕI}9}=î;1±Í¨æëlÁYDîtt3îÕGàùEèÝnKbo¾)õ‹Ñøª»Œˆ¤¼ìê•…k -ý°K<_ðk:®iwü®ž:>T"“WÏÛŒn¾ÎÎËåk)ÁtÜN®»®¹^+"Ý,ÿàk`õàúÃi=t{í¤ñ´ô–l8ú.Gå|›¡5Ë?°ú?_à?-ˆÓÕFƒ¼Úš!®¿KôÙm·,cÙ-8o×.÷&Ë6©õC÷ft=í_õG÷Üm铺Wõ´{Ñv?·Õgöã^ÃG›—ÆÊÿø®¾èß\eoëÉhp³¹™g¯„ÈØ®âæþæóÇLëa=ÎÞŒkHpõ×"·>{UeßÕ“÷ÙÛîÄmñ°z’×ø*oÔx}3½¾™®©Ãyztî¤;|wÓ}WgoF×7×\Þ¿áhP×Àäÿ±G‹àx<ºƒ™gšgfH¬TžYðí¶ߌܓõäíÍ §B„âd7˜`ç»ôëPÿl<=uÇ™OÇ“à”zÿæÙ[1¹ÍÉ«ßÖƒFoýk±oF“>ô•$Ìfyë:b†Çz5¡î»é÷³RÇ,†Ê¢ÈliÅ—ÀP¹!†Ü[£è¾†œ\è»Ã‘ÛT—Ö×1§Xåpݽ¸˜9u¯ðŒhr=šÎ€ºƒ~88-æ×ýŽi -o ÆLž½ÊžÝLG¼õfO{ÜlD;²ÃQïÃÈíÔwÞybEѾۼÝiCXMÈ-Õ(\e×ÝkGM&ý«›A7nsÉÛ¼ÊRÎܽ³áJSÔ²LÊviÑôнCº7Ïnöùb-›z‡1íÊ2[StbYI‘tpmѤkËrD¡JÅ%‰bw‡»“SÆ£hÌÒöñÇ:O‚ìÛ‹þ´{Þô§aÍrHÚËÁè¼;x[_ß&)…N(î[Ðä%$·ùë£ëä7G$òì’š1.ËÃuoêÆæÞØö¸¹C“ç³TæM=ž\×HÌ_ºõrFùÜ^F£ñOÝaòÞ-F,ï›AÏœR‰bmK0œ7®õq=|ûÛ”S:˜–×À6DãéÔmŠðfHØiÁ“ºõ›ÒÒ®Cè·Ýº#Tx¥mŽfbCmÚX„@[™v„x3üÅãÕð¢þí´î†›ÕyÑOÖ¼—ÆòiZV‡óy“ËÍÜrn¹þÜÔZ+ÚMgæg6¥é¦¼&~A×à¢3Y]¡7è_;òÌßyzçÉw³Z¥†¼wZþÖ:Âu2êupªNÒósqÙW òxõ<-™þüØ -áÍC(iàpÍøÿoº0¡ÙIý±Ì"Bžº³ÅòïFÄÝÉ;yÂExöêÅÍ`@„7Äƺ_ÑC?} ITÒveyÏ„•èhá1³°è[::"C¿°ÜëënÏmV–}ÑíÕœËsUiX†³…Ë¥ýø©_ÿê°ì˜Çi<ZïØ©ÄÎG7Rˆ£V3ƒE[ Ë5Ð(—´ø‹„²€˜ÃåÔ(Y¦¬J±¢èQz*óž-’=ÛNû™ÛÝɺ¡ ù$ÉšA‡ûí½à¸¬(œÇ£ž¥mBÁÈ̘åczì¬(CJ‹.#lŽô‡u6Á“yŒ.*<uœUÜ+&‰—‘\Žü¿Ó>þ-1›B¬ÁºåïÈ)ïÇÒ.[T8_-ȌѦÍEìHß›îاyüü¾ß{ÿf<KËÖŸfPÚ( -Y@ÜéYJ±¨Áo¯Îë‹v ¾yþÚt»=ec“ù<}ñsvçÓ£Œ„´%gÓÌsÞläo?|w’‘š,ûqRŸž.nhöí£ëOÙQ·÷„ªá¬àç˼ö7uöËwoÂiÓ¿ê¾k¸B„‚�ÎNoÎ/!‚eœ5Äå´E×ÁÙÂz‹) <J37ï¿-ìnZè;Ÿ»be™ŸûËѯÑMe®Äìì…“J=¿¹ô{ jB¢_é¨~ßýØ-‘ÔNÁÞšTÆL4Caôfÿ•ç&,îMëé[ÖS¡^¹a½ ÎÕ†õĬ‚Eµ@ÁÚU™d‘D³¾ô’i“Í—¹vë~iËÅÈ_SËÞªVq«Zf!×TÒ‹çxM-Õ$Ïí*…å$ój‰E›t]¥ÜWj;¨Åëiyñ™’X$†y5I:RËïº× Œ,ÒJ/¯ñCj»^Zú‡ç?ƒ;Wz”¯jüÔ±\x^O?4Ï}Ì×y9:qg6‘ÔÁâ“afþäqu®"&Wö³É¤zý(3íZWqâÔÔÑýÁÌÜ6Ê.9Ñ -kfþñΣëì;[Ô£þ¾‡%“<ÛpÖT0Ì¡?žÎÏ&s¼Á7Ëšn›‹¥¶’ä÷™÷~ûÛõh<6ˆ4 ¦ÊqŽ…áækò¶ó`ß@qNÉ4ƒùÙŒM3v#!³g¯²—”’JyCÒ*Ó‘¯tlµcÞ°*.g+5ß$²oßœnü*_ký»6µSÑ)ÒL‰%Gõv:DÀ -Û\S¾u?vÏ@°c|*Þ`{È…ÍÛTa3WôujN—‰@R?°ì“j|±ˆ·@<ýÉ«zRU¯˜)úzFïÔÆš s×MPx ž|‹íåË®ÅT³ØbTù2ípÚ[®¤«²á(*ñ²þ•t`êªPÎû7¼ëitÛxú¯Ñy›ëdš˜ÌÒѹ -nKŒÝ֘òvW—š|è_Ÿ;Œ|hnÇÙbãÚ |RÃhÆ«KöFƒSë'ó&ÉÙò4ìdDß°yý£óWÃËQÕk½¬gçýéUæYä‰VZüúÝÕ‡Î9hG——ïøÊüç’âWÝñ‡ÉlñEho6~3©ÙC&oÐ`Í~®ÏŸþÔ¿¨GO¿9™®þçjtêkÄLCëÀd:è\øWà"¡)]3[P-”Þmê\_\¹ŸÃÖº¾hݸÓâ‹æþúzŠ˜W&¼=è»*³p¦]¹$Ž ÔrY©Ô7_”ËJ¡b¢3¨/[–œŽÂ9h¬]]r__æbuÙtÅ>q‹ÏQÔ‹ìüSö|܇`æ•“�Ó“aþE½¬-/ô¾ÉÎ/kj”hEW46SlnÒ±ZÍW“´‹zÒ7\`u_Hrσúª± jäZ”ëN<åjMRÓ1?êÁ¸sņ˜e%z£!亷‰c’|$žû<9xË…¥Ç'º@¢Åyp¶à¥cè:�4¥/,u\MV|ë»ÎÊÅÊ|œcågKM@Lm-÷qõ'½ëAïÓrªäËô†³FÙÙ2Óþ uY2¾àÜ|½¡ÜŠ¾ã VÁ8¸ŠîB© åˆ]»r±¸§Óqc´©ã–ü’‡žÀmÜËÎhGâ]lÒ¢ôš2½ñèzM`ÖúŽ}YSlœ$w]÷R‰Ï»ãÉŠyl²ñxiQx:šõ\^69cZðE±- -s7Z”§æœy¬]§‹Áj’çË\/Gsj›Ùb'Ï“¡mÑMÜ@çìà3%ÎûÀ¼®˜èIgX¿ëF/Ë%…z³ ¥åÜq3\ÝÖ@ôPÕ5'ÍÏ”›¼ï:! ^%(TOÁ–G÷O&þ‡3›¥ì":ÿÛu§áË„][Tj<ËÛ£"cQÉw¤€EåÂ)‹æ3–ó–ÍÕ%ý$Ã�Sr·!H/)8ºî *X`²bƱÀÅÍJÀ -Ê몯f3œD7YF`©Ë›aoÅ*ñe‚6‚VÊšƒët‡Crú\,Mc©u¢Aï*a—žüØ9íd>/–“r/²ÿzrúóë7ÿõuöQ®Î®7—°|‹xHWÄ«Ô§hQr)ê]}Z!¶'GÓ÷uêÅʲõ3*žHש.ÆD•Ü›þoõàM=†<öA?ê“þìôøÕ«Ò<¯aôðã¿ÿû¿{S½ù£³ÿûÿú_êùÓ×ÿ—½ïJpÇ<ïPrÎVpÎ9çœs,ç´³Óïj{œ½Æ’’lK²$ËvõßNOWË -� ‚ �DÒå‰T'_¸2Ï)²„' §Š¨ÉrÐ]^\«x®û³Ðº.ãêDöðÏ?ÿ ˆnE½FŽ Ú´\¦rÚ²±Â?ÿ,<•R¸PžàÏjÈÑ[lÀ…ªþȉpp– Û£^Âç¶`½wÔ†üNRiøÓCþNO�þ,P/WÛ7ü9!†œ%â�.´rÛrçàJçƒ?«2UBcÁµ¾$/'Të<®Œyøu,²:W-ð'ÙP[Ô\6Á… #ŸÆ#³Óþ¬ÁŸ¦ØÐÔ‹øã²…ñåøDþ$ûâ-³Û¶çñȼçûÇÞ¶–±q•Ç½ÑkÈLdz"l1CÕãY…õ8 µ¶+Ýè\“TE3W¢O’Œ$&!S‘Ä7„ȦˆUvÜè°Ž•ÿùG}Pž‚v{zµ°WM6CLaËrë7ÜÆC¦‚É!†ƒW›Óƒ§_·©›Œ§Ê Bél7Á×àvtS“éƒÛëÕí]¹ŽNa�ž¤ÊÖ:Hn —*'ÑÍ›±D¸Õ.‡ÊÓ€:³(¬°=ZóâØ7Dýk_L½oêá®}^»§Æà±µ -3Xéµ�øÂetª^CÛýâ÷ÆS»=3©GV¾¤ÛËe±à10qbÙxÞN(¯“þ±¬ÓÄà¿œ4…viw¨bî"«Åô"S9¶]¿9:;±ö<ºó¿kKfn°:¶¬ÆiMΓ:'±1j¼†2-ÅŒä¯!lr•:ÑÔ4¥‘©Â›à†olª±Ãa9ωÐi’ÂkWNy) 0g÷¡ÊYÂ1|ža'“!ÑŒCN“Y›ºD4œËù¹CJå?$ÿƒ(t˜ Q�™‚ȧÉ_‰6¬€gO ¤/°rz¬túžÑå›GDïvéI'ǼAÏXmþRĵ{'ú½aÚ‚gÝ ™ o#jD®î¹…1šG”¸aŒ¨`êª}à}M ÚÀ¦ƒèb•=¢Ïẍ¡$#Æz¿Ž˜º±_Ä<6éËbåCÐm±„`gÇ!%B\kvĦö¦»QÑGØà„8ƒ9qÅIÄ]Cúˆg2#„øÔ â÷§H î[ Áf@Ân}‰t$¦>)‘xñD’ªCI -$cº†ìH5@òƒ)ªí)¤4J*gEjh³†Ô¯¿r¤¹7ÆöÀ·XºÍšé—6]dXµ‘q½\A¦Íƒ™OýYd dF“ÈÖÝ:"û‚9'#r1âI9’]åŠC8'W‡j¹vÙ¬É ‘�*7UC9šyä–ÛÊTrÛ¯;-wæ5Z¹Ç½ëÊýš‘W<µŽòȲ\‘Çû«<ÕKmäÙn² /LsVyySÚÉk—zUÞBœnh#—*È@>ÞÌsO -—¯j�ÀVqèÉEg -`¹hjv…¼rR*ÔÖÀR¡[ -SÅžT`DË©°© ƒÂ¹Þ¡g®–ÛŠh>]P$+h\‘m¬}Šb·dUT}&EK¡Ó(z®ƒ\1*ŽNŠÙ¢²Uüâ™_™J±+G–Š³:´PʹRcŒ,”†~b©D=™_¥ ©m•®îà¨ôgˆ2Å4Ê$2)s††MY6ž}ʆÙPv-õ¢räVt”ó\f©\ÏWåá’0«ÏÕ'S©ÔÍ|Ve¸jº*,?Ú©ì—AåÍ«ýª0:¯¨ËÒR•ËøtªŠÃTµä—¦ª¿YUÓß•]õ;U‡ùd«F¦#«Z³ž–Ôfõö ¶:äµ»ˆuÔÁUH+S©özFk®wêªÚèS·K‰±z„®¬êÅÌÖQï¢ ³újÒ54êsä1Í,MµÞ3k<%OWÎìšT¡2Õ»þ€¦±Ò4ýë2§™Û[Í6›h.ë`�È?߇hÍsWSkwÙÝZ߯ó¢Å=MmHEmuWQk»ÝÑD;M²ÚMµk/áŒ\§ Ï&:KÄPÔ9²Y¿.Ð?›u‰cô¬+š×S]3iè†{$£[ù«�‹î¸qÚôªèÑ 7«; -½½=êIëZŸ$”3}I½é[ûY_?ÞŒºúõª×Ñ_öƒŽA§[ô¸s?0x’ò±!:D熼1º14rÍ“a$?«¿9§Ùp‘—2•Q;P„x<•7zMûŽ1vŽ¯Œ…ÉYalõŠ„q2$bÆíxÝ0ÉwյɤòL·)d -å Sf3ß›ê¶.av9ÓÚ\^š®‹6j6„;9³]=Þ˜ƒËÀbÎÔµ s=ëUšG™ZÒ¼Iï6yšðZLåòØâœ*l–È5Ù·ÜÂÒ®¥ûÀˆ6˱أZmÈ‹5Å ØFq4})*Ðú"Ú@Ç%†î�^L•Òfe*Ëë,˜¯¢[b©šÃj{Ž±ÈÛ%‹u\u\…pܧ1àþ}lƒg"ýÞÔ›8Ð-ø1«ÐºheGغ!± kDÑN=—2HüfN«¼Q@e*«å1X}^‡ÚšnäÖ¦^y±ÎZʳõL(Ï6ÃZ±¹¹-‰¨l5KAg›˜¨íhÔ;ìz}8`wbä=¶TìÕre`o´ûÑÕR;ô]«ÝáÒMã`=Kô3MGݯÓÓ^ï8OáÚ’+4œÞdòàÌDÂVgÛïÉ;W™à¯KQâ.|–)ºÂêúÁUŠ-½®áL æ»ÓktëW’Û—#@fîÖlyp¯ª¾¨LåQf6{5’ˆ{¢QÍÙSö²ži#ñ\FhËj6o0ò»ò—“”wäìê¼Çy{è3ZŸ_?Õùò£åÄ7¨+3¾CÚFø‰ÌÉï‹Ž{þ|FŸòÚ90úþÃê ˜L‘uÀŸ?õ…C¶ÅÑÀé0r-…„%rš`E«B‚ÓíúBú½uˆuV¡Ø´µ5yèW3Z†5ÞõoØUºnÙz -÷à Eøpšdªˆ9¯'"!<ëT.—td>NÔ£Êæuuòçhº`6G{e(zæ*1‹Ú¿Š…z]¬ÖEB±•~ÛŠk¿ç¸Ç²tÅó³u->.\Î Äó%l&g?‘Òå–DO5É%ŽÝ)‰º2‘d´xZ'›Ë˜?¹Õo)c5ãO…tºßT3‰¤~]‰SZwÅóiÿLaHWªË^zYŸù3ÚBçœñµûõ0Í\@^®.YóÔÊúxX¦ÊV4!}vYïüætRÏùWáH®Z[á¹ß°É‹e>duò ›"Ÿßz»Ñ‚9÷¢}/täWcá[kŠør¤(¦Ýkqpé_JHo~-9ã{y©àÒªdªÒÜ`וµ–"Z¿ŽrÝi ”·ùZºb™©k•„¥<®ôºC‘w Ug5àÝÚBuq™kúI]Qw2îZ»,ÕNUϺnëû°znéÏÕçêØoC®XeªFh1¯5ÚN•¼qšûcM{²÷Û,´žæb›´C¥£íÕÆ^w¶‘ÑjÞv/³vÕèÞ··1]¶ƒÍÏúN†Xô;ÓþØßÕù&H7¢Zµ»ÝñÁßCzfµLÕóäÝã^TÉööÕ£oÙýÒž÷W}m`®Õbƒ”s&Í¥a¨³¦®ÃÈ[ûËd¤L»£@°ÞµƒÅÊèš*–Æžr±8®OëÅñI?.OœùK]¦šTÎXg²Ï¤FS»qñ;-MÐÓt[ïèfÖ4j›}íðlñ”çDò8™Íë|='R‹BE=X¬Ï{dI”vžeѲ/7ëÓieíê<«RÍÝYíòY }þÚ‹“Ôo¥kØþ)ßÚ¥ÞL×õhȱ>ÿFo¬äÜ´®Øl+onýÛ ·²Ýöñxz§Ñº4»˜ëî&Ô·7:Ì—}:I4ö˱ß{ÀÑ‚âP¬†‡½IËTGçÐo;6R#ù !̳SÐÜ«ŸzGâ¬SÍ]ÿã¿Ûµ8Ã^¥ŒíŸ(™|Î2lŸ¼w#nzæÓ+Ëý’«©´~m'µÙ\IwîþôèpöæÞ-¯ëZïÅh|@eÄOûmètùÏþ´.¿pÆ -~X½¹Z1^ÇÚí»GÆ$ìx¸}@TŸŒyßÛÄ 3¯È˜”ü•’óå1OÜï%dèó9j$§u ÐP,¿D>¡l©ß‰û<orË€ MNûñè’ýwvo#N}FNN2\òL¦mVba·ïÈpÀél}ç3`l_V;:‰éñÉ"Ï×y©q·o)Þ "‰îô‡0`SÆVçgߦ¦ «ùJbÄÇ -]zð¿Œé&Â<I|G¯g¤3²ÊØÄc¹dÓÑeV]^·ãÝhµç7ìÎ7ÑývÔÁ°™Õ-:”‡@à3î¬Çq¾í -É�ÕÐxÿ¿Â]üSFv£½o|E§eÒmµ½D`ÆÊt‚Óè¿ïS“ýÕ{Ädû-á—o“’óÑ”„_J'dn¿ÛOÈZ |ä´Š’~+L«$¬¼„CZ¤â¿àñ#8}¡-÷ÛGÕÓj¿hÌ>UQ²â[Ç‚ß…MüÛ†b#!q•g-„Íž$Zdt N…XÍÄv9¥Ÿå ¶Ò ¬7ÌUOTeX³1L–"o(æ´~ ùÆâŠF¯6ß$ÅV˜ -!<>`z¤˜qÂ\t?Iê»åAk¬—«¢ñ¬WÃ/IÙ ^Ýbx^µ’ºjúè=ú5ÓU.£Ýôž *¶Ö[àp¸a×V—`Îü�Ëà粜ýÐá—?ç[êÊ–³ÝÏ™J<í~˜6iÙÎð6U_�¿Ÿ¦c&B.$p6°ÿî¯?0“~€ -?£f'‰š·v0¬›ÈøÝ?ÝÂý\öÄdö³"cÀG?›Ñá!? cdf%4Î×É6/µ‹’¡ƒ0¶ö+hÝ~þ@¿:ÿ\wkXÛ,Y-œV‡‡x&0¸OF‘»9É1lC©ÊèÍr€Ð+ áBì˜s탘[µ'Qœ¹‰éýø§@=bdˆí [uÇàmø4žQÓ˜&ÔS8xJl—îÅIÇ£VYÌg¥½–ŒÙî`-áÏYîlW“ž®G<†çœ*ÌjU è9ú]QeÐÓ7ëƒ^ãá<gp‹Lôd‘Óí¥ô%¼H–²A¯uV‰¬|þIÔlÖ,žPe§-€Ï«ÜŽvâýí…m“1´ÝgÏ€`—¥ÁoW\ãQ«²þÝh2UtŽ¦Ç¼À”×ÜQ/uº¡jÄ\FÊ|ÏÝz×ñ^Ð}6o Q£ê×&¦s™Š$V|¤ztÞk8àV_Ó=//‘¥£±È1TG'Xöô4 -hò9Ò_ô÷àJ}„»…HØäüU†*&ÅŽjCs4½ÊT®_a›ØJÚÈÒ:ðxC*BmçC¸MX‹GfW½¿žV,=“Éh ¯V†Ø<»¤0c¨eä8”C÷ªŸž†7ª€Æt2t¯¡lE}„í×=é%!SÙ=õ^0´›h¶_Îcql»¾kÇÒÝ!N¢ésÍ¡™9:u¯"–_,çÓšŒ³ðÆQÜR=heUÁHÊ«hÄŒ.ÛŒKªcWø‘}ßàO;n|¬è‘`ý;èß®WÀ!éØöÒÒÉ^ëì&š5ëÓ,Šõ¹¨eäUÇCû±Øáƒ> …|E¦BÇò”•¼6øã^úÊÛˆe¨×#Æ؆·ð`Ý&jðûcF<Xøh8 Ÿ×3ýÍ÷É‘¼7À+„m4ðR8}o@ïÑ�Lë+×fVòž G$©á¦²ÕÞ¶ÿNBÕè¯!:·dŽ±ÑH£Ûǵ’7øCÕåä**'¹P'À臽–|3mÇšÃÀõN"ŠkYlÚ_?€97æSò6`}t^‰MIz°#Á¯ð4¨‚eªØ�3ÔÃÖf:<–5«;×#ä´Nv0xz£!¼wõ¹¤dwœI÷¨… d*ÁwÕÆ£,Œ¦mnð'®(8~ûxôT/òP5}¹>“’3’ºß¾yBà½*cGó*Ä¥ÓµìšÅµêƒ.²´—Û±1êÕGg§“}ž{C(r܉‘M„iŒä6¯i‡35cŽ¦~#jîSꬷ™P¡ÎÅ#ó´Å2ãi<2ݶHáÉ3‰ðÆîk<`Û/Y_;œ¬*|œ6ÈT ³B4±VÍ�ª’—&@çîÆþ¹µÜ÷&àÊxIäc—Ëà±æ9ñ¤Îûydu^Ù¡´4uŠ¸N‘J>z噹Õ[0“Ë:È^9ƒ/ÝNß.º@Žà©*«O\Óm¨2LG-+Ÿ6N˜k’öP5·_ëÕÔ(s–š2•×€ÆºwrbÆ}«íî&ó«+6YÕ7äÙŒ(Á¬îh²@<ú4¡òæ g¾W%øÓXå¥ÞÊ´*;™Š!ÂoÏÁªC]ˆdUŒµdèÕÑyHÓgåx| C–d7€ÌÝÍÀ”²9OéчÏ׬•†ñµ,¢‰}ÌXø�K 0±›Jƒßg'ȧtÀɪ4…]Cà+Õh&“4Ž1›Ž| -û²Ðï¨×«¹ *¼I£f8VÇüt8+½5XŸ¡[{WC3Úmü™†Ñ6 QWé–Ï®š~podÞÃa -ßÐoŽè3ÚEäöá/¸Ò¹Šä7·¯oÈ{Ôí!Þ”ÁÕo”z¾±`‡³yð%&Ë6ÊÁhüý‹ôz¥[C5 6@!±M!»IB„?uá -uFöŠÄ¿æ’ˆnò3Ò¬—¤ ÄBBÔvŒ¯Ó—‚¼T€?“”ÔËýàŠÞƒ=Ûšü J?tïk D†öàÙ—û@àHâF,ÐPúõŽÿF'9¨÷?)~!9bfµìË},Ù}‘2$d¨«[¯è§ÌŸ�‹c¼b‹6’eöêÁ*Ï<±‹¢7I‰9}†/ó•ä FŸñ'ót“ú†ÆwÁn ó[²»?)„’ãr'……=ªí Dª€|S…¦;üN�&“R}!G|þ©¥ñIò¦ŸädÐ9ú›ûÀ?¾¡¦á"ò’<MÎJ·Î^¸]‘‚Ý z -ætf(þKÐëž+´•ç‹P+3΂ªÖ3»xÃÖ2UB•�µÄ¦µ3t“kIå.U}Ѓ‘‡!B~]˜tJ…*DÂÅ»²±|è–…Å$+`O™”ŵ‰ï甚–jÄÃY¨¼ÓE"Ó“¿úrò±@;<í,ý`qç±è -¬•uªÖ5ÚDÌßO“Š²ÏÃyÞlF!{£ÓsGÓ>DÉ1ÒžIrtI¸Vò¯â`rTœž2L3,<^DgúXYh!�&åbØÚÀ=7ËÂo·›vm6xÆî¥ã¯Õf¨]°çEm–©8ŠóMm&»F»hÛ®š·UdžZ¯;¨QZÝÓízH4.i8«ÏÄ£ºiæA%`ï߀}`ÉIµãÀ¸|aÉIµãdª»%gzh…R-’Ýh&l×�ÑI¶Gñ@BC²=}Ö)ò·§ -]d±Œižoã NC\ëYÆÆ”ôhi>¯©Öô�¦Ðù…Œ -FC‹ÉMýa'�s5¼Š,;`>ÚsÃg°—b\WÜxâQ[7øCÍc(¶/!ÚLÔÒLÀ£’‘Pç%úé^:Ö×qÍfÆ ¸L¸à¼ò Ï0¼ÙÕ#èÜIÝGÿÚÂìN†×0Škgä6Azf0.~ÈåɘîîÌî:UýÓÚÊ°/sɨŽ7(Uô\eZrÀýKäÎYnèP)„*‰é/ÐÛ}'<XC\dC½F¥¥ãÓ^ñ0ìÔsêA`y¾’4&s̨¸HjÛλr˜Ä,SñáþkÌ2Õ÷%ía�§k¾#pÄû=½"Û]‡¸Êµu>`;“l:\*ÉØÚæiO -R¾R'YŽ|@ZI·•7¹÷‘TtÓÜQ2…ª‘Z-6.†X½™¼ÉûÄ%Ѷ÷qm&±‚ŸFÓ±c¶†xHgÚZ®lzô¬Dq{H[g>Žq™üó ÛÃ&qöÊTŒ5Ptþ‚n$MÑôI?|={ ³7ÖÊjnj�R×³ƒ%ï 6Dè<Xtíá{s§q“––9{M2IOÊzµ)Q>Çzûü±D™ƒp?XW^.óù2ÕcÔ',f,Y7ÂWª€0fËe—›¹&W‹œ¤µÌ[ä^0÷ÙŠ‡-5Ú n̉äãºVñÂ\±SCè£çV#T®º±¡ýpW¿LP”Ħ¬o0_î>‚à§ù‰¹vÓob“’ν -#ðÍØžŠ:W[òä½ðÆ©Ñ1Гî›XTG�& V£ésÉ(SyæÉñ"ènX€]èaþ‡Ž¡ªPŠÝ« žL®+P66 øJ16®jô<·�¥$ ts•h¢œË¿ŠÉTa“{v¸«7vJ“¨ª••ø@¡îƒaÙž‘¦¯Qsyj"ÓTË+»<¾‹Ðž^ú–¦cÅŒVºF#I…êñÈ´÷±ûHgë+9~`Tu‹Èb±‡ˆRtÁsר÷€>F¾iuyw‚/Q¯Øí!Ï+®ðÆ‚X ÆQÊpÏH³îÆäa«Í}¤çþCÂ<sÜ0LVpÒxccKûÀÃ@™Œë5 öb¨àŽe‚žð¡ÞÖ,bÔ=½Z�3íŸÇÀ¥|Rì½v¤ãI8‰ê] ¦Ñ¹ -bCÓb™Œ9ÖUŠÐ`ðõA.BH¦sÚNž¹õbØ›‰H>RÇš7Í«Õ°…Kd²5�ÖÑŠÎç%œ‡žDÐkBpÝ/¬ëPºØÌÒ}€¯R÷Ægi§ÕK(™ôÌ `¾Ôë ׈ÊT@„yœ±ödÜf´·+ä`ÍAÇm$BËœ5ŽèÖÞWœKO3‚Õ¶ç»ç‘"¥kŠUCWðXŽ¿¡L#œã€�Ì¢èÀÏ…·¿MZOi5 e(–öáNÔfó‚%²è^߆)i -Ö3ÍÕà -wg"LþãL³3Ðf,¤škÈ9>,sýªã”Ó:ª˜ž`ß—!Thª“ðÒ_Ó -;EwÝüêŠïä5¶¼Fײ«8D3éù:éëZq¿Àµ²¤]…Š7T¹V¯´ªf/¡±ÉÄ…7¿Óõ}@¡Ê&h \g$gî€eI;°>ó~Û§¦‘”¥¨Œ>{åࢠz}ë*àþ€Ó®”[T®ßã¨×Ô!4lf¤Ë9vQ§Ø¡+T¨%ã¡òÞ7ÙRž1¹7õ0�eªàÎIØ«Sª&@5DÕv¥bLÄ#¡Þ" x쌹xSƒì�‚2ÆÏ.\¿'M“|iGmáøâ»ÏÓ„u::Å€&1øž‰¥X‡lÉ^ -nð¢½UKÁ‡%§ U¬ƒ„�õ%TQDÒ¡]RŒ{㓳”™ -Ùþnñ‰2>†¶ŽPຨͅI#Pwãì7šéU‰¸v_˜/»B[ÀC %ŠôÓS˜ñ¨ -Ô€vQºšvÆêÝj#ØgS4•j*¡)±‰Î¼}y¨¤·Ô(\* ’„ÙvKôÖS¦GƒÖxpák’ü31—íÚ Šë؃!–òh,uÚZ´'!§ Ó°4%dýØ㻯/–"j°8ÁòW®y˜Z9\¶Ú°…öx,WwŠi�º0³_ü*0Üw⨃›"5e4]ð¸„ßœÕïK0${”½[Íň$åQ…‡¡ƒsM£“Û¼ãö.(f;g :¡jUUº¯È䌷‘|¬´¯s%´É5¸NÙ÷²$lEÚXÕ„œÆT®®¸b@ ½VG\š]0¦6GØnÈ>0[¡-ö¬¼òj°´B=²sH¨âÕCx³Ý;ÙâxnYÎúCÎ|¸÷¥¨6øBM/f²;öÔ&M¨ŒœH°X)]cö”´Éj9’žÛpq{2Êh7©ÓAo2bfc)u`Y;Ø3Eá¤Ò?ËÐ -ÄÚü*ï,j_7êÞGSÓÒ%šÖjãäîqt†ŒPOoñªÁƒ“}Ðx/ПZµ‚cÛU¥~M~צFÍàY×”ƒõ…è!>0'!˜(´„¹Å¶£:¸î ¸òE6»Ük¼vWvÿQãJ¯»àºË¬Û*MË©3mF‚±©|A‡<JF€¦ô"ŽÊtïM”}ÓÃ5èžN'U7>ÒÃVM4ÛÍ]t^º„îIê•||{×%™¯MúBH±EQÌn?b® -Ðf*ñx½Œè¤l‹©èTÓ†vãÅCAaAìãÛxd q”4¤ÖC[ÿJʱ–Š)-éçÀШ9ªÚ¹ÖÁß,è÷¶Á2™!‡ Ðsõæç,ɸa· -$Œ~e™� !†³ BT¯BûeAÿ˜>B”¿ vÄ€Jž„ -™äª>-Hœl°^éF•ä±IkÖñŒûߨ%ö:éÚ¯býæ²ÌS‹Õê塽VèüRKB5ïr`?^Ó]<ûØÄ®³…s:ÝʱK•ÏþkJÔkÀŒW¶c¦–s¶6côW}ãʳÞ~ÌŒ`6Í´@ü{1n_îpô>Ïؽö=–mG}“Sj»ÅØM¾ J‘ep -VÀM¤Ú‡æZV4ÔC�ÛÆ=£ÿ,3Ú]šØä*_=Ì¢Ç^=sÛ Dt¬È¤Õrsʶ]ÁFÉ &wØžn7° ¡]�)]¯‡ÃÉЦ‘9Êh {Ð÷¤ -ɲÝݬA_fq`#§Î½a²-/ÒèªK:€ kbôÔîVô$…Ù\C,gpYg0‚9TšRlâš·§¦>(]µXGéZ4N eI+T÷ûTøh#+éŒ÷È7s8\¬³x™o=Âà Ðdæ[O lW?8÷tµ[oÎóäQFûÿÏÿ0¤¿9ONóÓ‘}jLj·þÉ®Îöq1tã]Üó›£Ýì~âøSs=p¸±Ýôö$¼‰aƒðl±ÚÁC}oÏdd`*óoŒ¡Áo:€^6¶ CÎò¯p«·ä&îJ÷+ò‡T/áèÜ•XCoÛ(:G[þûSÜà+Û—ˆŽHú“ES–©ƒíEtù¶1.WàÑpnFWw1æšQÄ„æpÔâkiIô6$¢+YÏø9][…¡Ÿ; '˜‚Û6÷CΕÇS49˜EdªÓÉ‡|:˜qýΤ·aŽïÛÖzìÔm£Ñv¼UûB¾ T…P–“¾ðeíBÝ¥:d&².% ØÓKÙóéä9Wc -µX+T7-;;ã—:Þ߯ÕèT‘˜°§zöØΫÁŸ@ÔdÇÉq‰®Í–³3au=¿àgb¾nEÙH»§^®[âGšpômîTßÌ‹´¯Ì„ƒöÔ¾Ê$TüH½ˆötÆT'~¤E¬k•ãný©Lõ@{Ös&¤¶¥v¤iÅø‘Zu]ƒ_ð÷Tïí@Q;l²|}EãáLP�©]¡Üt>¤>Ÿç+¤dLîmñª±ô Ê‹4‘Ä«‚äÅÛþêD -xqcipr÷êÏB´ºçQÕ¶ˆÎÓ¤Öý+eÑ0´¨ÑpÚlÛÁáôÁÉÚÁ©·ÜUGvG\‰ñ"í†e!¤`ÝVZO—¿¯^¤wV,ge~¤¥ˆÎTn³|H žÛÿ@ -Æ…ÍJú@;XàGjmµÐ¸Íó"•Çey‹øÊTh¼×‹ôÕ®Pw¹ˆÒš0ëüHhH3Ó:Z$R¸«É&ðEaÐH[&-‡À¼ÕG“7Ö]ÇYHÛ^4ë0a©žƒT¦:Ë“³½½<2á�ãÀåßl§=@jW8ÖÓx_iÍé{.)ä1N_SGwð÷”/ó"x4„ Ò̬B |H¡ä·vLhe “óõõ,Ï$gùN[§åEZ×ì‚H+ËÒpL"•©žûÚI õÌÁË4K¨jñ ×Çô–ó!2¢ò‹�;´ÈDù‘æü±A¿Ôëñ"íÖ))\_žûúÛ²MãH»N´wÞ˜ø‘æÛ‚ËIp,$ÚAÊ´$ðIU1 H[54¶Ú¦y‘:ó&9와hÝGé˜Ðq&®éI¤¸Æ¯M²{šE‡zw"5>,-�û{¼ }߉‹ô¼Wûh¤—€ÓS¤;êè(¤á–bBãé\ó#�@k~–J)ÙW€4ry…I¹BÀ2&Ž 4¬yj¥!”îH†D -±Ðh•§Óh¼ƒHQÒÓ)4Ûßø7pžm¿nz¥ ¸KfyåûÙ°*£õ‡Ùh`g7*YS÷÷nÁ§¶=]¢É¡êúxú$ù誾c 6Dníú98OíNlP¥Ÿž×ΧYiß-åM¾ç”P,¦Ü]Á§N\_ -?]Žúš;ÅžŸ‡pu{"ø4kØpá§ãÂÜóxÊ¡˜]QOÆI¯IuÒ[;SO皣‹ómÍ°º)§sLî~¢Xmœ®ìøžSR.jXŸŸ6Tc"ü´uûnãy>TõJÁ§¿—â!)øt]ÇÃ¥ÇÓ'Šm×q_èkФ’Ç&ø4[ýMaŠ©&»q%+ôµQ§ºzÁ§±Pn<|šÆrL˜b!WêÜOmI4æÓßúìÖz8O ÕÒ9@?˜½ÜY™¬úÐã¹õl5–ÙXj:ZþUøô@›£ñ=áý9O]±ä~QB3‚˜Ò®°0«ðÞ‹#Æh9ÿ4Hûín½Q2‚Æ7*‡o’ï$Ç5¾¢‰–çÀÎaéc~¡¦·äÜ€–cFXrÎرÍ+r5À7÷Þñ),+ßX¤“<vºÍ&–¸=ÉeªZÒÒ@jW@;§ÃÔÚj"‹È/ÆÑǘ}%-A¤pÉ›!2‘Z+ÀFf uæÃÒ©Zx %µÿ;R‚C^¨ýß{šØ°êZ¤õÊDË"°DJjÿH=´ÿþ)諯=A¤€Àg«0R¨ý"•© þ¿äï«1‹!Íj‘’:Å)œû,´P§¨²Fu溡'¯èÐEÚÓ”÷ú×íŽ9÷Þ´+ŽýX³ðò=Û’æ;ZZ„AŸ»!ZZ>MÝ¡v©Sf8hüñë‰.êJ3ã-+…Ûøøã?h§UÚX‡2‰²÷ý÷p‡¨%Aø]Iå/Ù -¿+щÁ5ŠAÌÄC4Ñèý1ýǘÛÓHø†à®[‚ö€ÎùÔKï{aËrUÝÿ”™3í3+Ü_ŽB, fw‡é�íSM®Á 5Th¯úu(½ÇŒÕlÞ=n ÁhÚ¦R‘ C6ØV_£Ö®§QÌ& ®Àº9#® ?ÇH’HËÞ5œyEtø‡n<eÌóôOƒöO¦zôü#8‚·ñ«È_ŸâÞ?=Íc|=„ÊkM„XÒÇoOò'eYH$–0Lþ‚’Ia÷±<¦·8ëÁW¬™â¬D÷ø>åyé”›6ÍÉ_S·]iqºË„‰Å=ºgÑÓ±E!(zd¯X7ÖM˜¼7™E@5%zøi×A†&°@{Œ1#õ‡¦¶ã§]Ë„Šm¡YIúãx»Ö’¿ß5æ*FvŽÔ«¹W¤NdÔônoC¢N¯˜«£W³¢YMþ“,õý[â“0€w€9×dÐö> ™|>Ô©AãšQa2°‘R“$Û@ùù?$*¼J/÷ßsœL:uøaRñ"éÎØåÑ?Ï»Q\꼟u`É›WѱT`Æf„:Æ&Å[�ɨeø†PŒ9 ðЇ#ú™7@ÿîRð™7 -¥{“í"ûrIð¶ÌŸŸ…:Dg—šåI{’‡Å—3<É4ñJ“*zÖγL%¸0IÐ/m¦s\–dªwÆ7i’|_{â›ûÓ[Nó+·,¼"MºÒ‚ke¡L·GŠJš$¬Ð݆N¦’6‚ÀÊU,^éü¬Ü©D‹7Æ/QÜ>@Qœü°ÊNB»`^‘`ìåÝvÝvxi`-q#æN2µº¯)68ý!ÅØíÍvØ~˜¡ãôd¸^üçµcÖþhO’ÏRhyh<Ü\"/äCÁ柕—€üÏfe¸yT¾g(Sû±O#™„[&Ùm %þ>uZrµTãã®[r©ã?ß—å—n~Å0É -¼óåõ0ùÏâ&§!4'?7å…ÔŽnùM^L{FC(Ù °D-’ÐuÝyÃ&§6%ÙAF÷ؼw›mp•‚<{€Sh‚ˆˆÃ+>&HJ\í©Þi”âCÀ––pÊõ.*ñeYª�H=€T{_¸ $—I#:KWxíÏàjò_ßo -nê5þ‚©¢,Ö;'’ÇkøØä€÷—„Tþ¤w¬Äˆ%}Šš=¤•ˆõægë>ÅÉ/¥kmaOð4ì{ŠóZݯ½K€kåÒ<$b¾„4×%Ëm˜K–ã!٦ټ€QüÚ%ºÆ˜Hôè¿í&Iø„œT÷ÆÝJâ6%}e/˸7�q²Cd¤ÊÓhI+Κ*à÷‘©Ä¼tÛ4ÜÜm}å÷dyíë㈠¤Ž]'3ä&ËÓp`©ÒÁ+W•| ìL¤e²eR9ÃU¥ß¡¥‘íQ‰·GªÔG0l±·ÂGþl¾¸K:ñ®½æóÌcñ»¯/x£îº'Ô!™J„Óï°½O@ ¦²É^Œ¹4Â^8éeœ¥NH—Ôá,t¯Ö!¦.Kõ…±ÔÁÍ* 3~ö -ܓ‚³ŽÁÉÐó{>ïç>7+|«{WTò$�&äoåó¶R–…¿{còñÛK`ÒÈT_oR£&¾äÉ$Ãa’﵆ާà|;)(wkòå&“ßóþºw·÷y€±vß[DÙûƒR»0jÙg„Sý“†|*S½ž†–7¿½Ç' DÀXN½$R2ÔO÷‘µŠq%Úy{’hç5wO‚DãõD�a‚Ço%Zí!ÑnÖë;<Øk‰&“¸ƒ}.Ñî³2QßÿD£Æ'ÑÞžû�ÎûíÉwAÁù^¢A(ßï½’pDvƒŒaí}Ç"Sñi¬E¨¾³ ™[‡ü:ŠÕXfÇ[›çÉ7ï}»{[_暣°’¨™EÀ</\ø&3åOÌ`uä-!+S ŠÙ£Ø“¹NÚÒ,KüŒ'¨IH¼†#Mµ„Búa�œïC H(5gçý5ö¦»D÷2Ïn ì/|ÕÔZúg€Ú{5wMßè÷&ÉËç¯-¾fCª7‹á»\ oé÷â>Xì{ý¾{ä[ß]Å਽ïÒz^Å œoô{”ûZøù*FÂáÑïù ÜW8RWCñµ”0Ýã׫!k-p÷‰I,à#AùÇE¯•¬à©G† .08‰ “”F »oÍæ7¾jŽŸ�ûvv3ÚÅ3·ÅcE(&Iݽ$Ä"d±4Kšç"»§@ϺEÄs%!œŽÓ$AŽ c{^N/îÂ1›ž–¥ˆÙ"É®”°0ááæT0<O8rMÀÞ-Ã¥‘RÂäŸÿ.Ú�Ü»¹{{¤Ô`„Ò“Éþ…‡PÌñžŠ!ƒGr`–䃥€ Lö–hð-Ų›ÿ^R£$rÄÓä¢Wdjê>Ö3¿-·ãµ,è1 ³åÎÄ´+ c½CL!¢óæb|tÔÉ-ßçÐ1W±ç:NÆÐÇ9tât¤Lþƒ:A¤d`¶à›9tâtÌlÁorèÄ3èXZß9tât¬lÁ/rèÄ3èD²ßÊ¡Ï #³ÿ ‡Nü=:·ú뺧‰ËÊ »[_æЉgБúØë:V@²H†YQçÓ¶…cà…38Á.šÄëé¾ÜÖKË—Šsläƒa£\í—Ç9 ÕÓÛ‰²Wû÷†Ž±Çål|L'žÅ®ì\Ñû¯•’6ûÕ_9QØ{|bÀÄã°¤õôõ½Êœ“Ü?Žçêy¾H'ºåý& d>¾ð\‰5‰/eöå¤9I²&Æ yÄö¼—@uy+„Šã yßm,ä4&OûÚ_Õ2)Ä»&“˜ìÆŽ„|×1Hr2óo=ÆT²›Ð¶ ÛJz•ì&lŸŠo80¤eL4„eš¾2CbœlV¦°4`ì,ìyÇfŒ_e>J“Y£ø[F/9+…ÌÞ1!BùVŠ)™û–“˜uøÚ¶ÄâÛ˾ëcÏ®³WŽÃµóÀq“€ok¼A³ìX%Õ.Á,0†¦ÄÍ{©vIÎ㻾Š#oü*ÿEÁrZ §¦ 'Áˆ«ÒÏ1ðßR!Ô¨ _Š¦ðø½Œ—E0M°=˜¼ã'5Ïyz•#ÆìètìÏ2DO¡Ì”w€½æxéc;X¿¤ØË4Qé|H´(ÆvüâáfËÄtJrëy2¹¤é²O>ßg3ë>ÕËü~Kñ|9�k9{Eæ1Äûü3ÝI ÆÞÝâ{aì-’’=!�ÜÅ@¼:ŒóýT i©rÐ�}½¾ÜTþiSÜ^;d¢.i˜•&`Ä=±½XŽœìEš³„-O²CâGžÈžÌ+=Ò}~ -å×F/HÎØâäßÔ{îS‰Ò”^$È=Iጨïjþ>–’:ãó]PûM½çÞN³ãF}L§åOƒŒcJ³À›V“XùÈ Qø;î‘&±'óëUL„NV©MN'Ö$îÙfŽÿ—JIúLšôÈ|¥4a¥½Ç÷"=Gé6«¿ñÈ0ìýô÷�@+ÝñFÚ'™§lÁï=20 ã‘ÊH}•Ÿg}Ë#ÃëçOKHÏ‘–œSôÀ„{ÍÉÒÂ÷`©”,gʲpܸe™Ô - Ì ž“xÈüM$wIó7NÐ5·öEL¯”4´Ø™ëL ö.½‘>öºÀ›-ø*¯îí ÙçU2¯Nb¼žh^#uT$Søµ4#zHcö2tKÑP½âóY¤ðžÄ…î–ó.˜ô7ùpË_ÄÔ‰çýþØ'ùp|QÐÅí_çÃ}‘gñF>œX„êßåÃA¯õ—3PB>ω ‚I\Ÿçñ¢¡nßhþ:Ž{î(•÷×ùp/O ø“|8ÖŽ•„PËÏòḶ˜Ð¶Ìdû>³.p @±c"…tK)1‘õ½¤˜ÈWsÿ¼&¾U"d€Ä÷Ùè$ã«Ñ—GJ‰ J#áüA&×S$ƒHük‰“ë„bÏñÎŒZ6Ïš£þ)âYs|1œI(èíiÖ¿™†ä#†WáÛi€‰+Ã'ǧaë uŠhãÞïÙ‹¼Œö7§“pÞ›>ùÈ�Ο$BF-ÒV±—p„8MK(ÌúùHà—§¡±½ÒœÓuÆgL>?Øé¥A}ÏHÅ䟈0ú,t°ðG©#ù@B©ÄŒÔ‘|,Åeð"ÕïO2R»Ç¿ÉH…pþ"#æ‹}Ÿ‘ -¡üEF*„#íhŽIÌ×GNáCSß2Ò™èÑgOÃæ×Ó“ -Ç/Çþ:ŽŒçèù‹T8ÞqùóT¸Ïý–lŠ‰ÛîoØ•_¤Â1Ï "“áþ•T8¯Â¿ -Çï“hŸµÄC¦(`žŸ,–ø´ŒU•r"<[‹˜_˜ER½ (›$¢2&|²Ý›:ÌÓ!Ãïn.0²Ñ[·pÄN碜oÉ{`yÜÌÍ«ë -‡Ã]nÞQžåá1aÕ8#>zÈ—þÂ2±©QÅô‹»”Á~¼ê/Æ‚–‹Hþx5àh‘eãíØ)JÚ«éHØ<‰D–,BP9Ü–#Õ†ÝdÚãÄÎÅâË:ƒV£ÔÎ;s–ÜE&{±“Ý<“BŽé|f µ-õ*/²Ê°³¶šbÉnS‹ R4^ ‹eØ© -«ÜHéPiÂäb åæb¹ g†Ž›ìfm.³÷Ê„œ0¹V,Ù 3s²ëñy¶Bvv…âh¿v…’Ý:bYg[ñ»}µ*ˆT-§BHgâõøJMa¤±|'!H^åŽð„–Øv䨂 K÷š¼¢ùÜ-ñ=ß{”Wõ¦µ›•Ñª+RïÑKgÖΣˆæoV’?~ÝpT1ß±„[¶kØQ}aíÕû¿Iíy¡Êõš×±:Jhc_L¤Q¯‚S_ÅyPÖë_V’ã+;Âs¦Šï’X%¹·¼p¨äÉÙä™oÄõ½*"'×'Ÿ^‘ì_Ý·WÅF¤öïuÉDUg„s–Úõã¤Ï—ÄL¸‘`¸«ÔtâžÞO²é>óü›MÇgÜjqþ]6Äóa¾Ì¦ãó rçË÷Ùt|¹tŸf> -gÓñùâù#í¿É¦c‘…ž³¼ç}•MÇêÅ !dÓ}¸"¿™MÇ·Os_+ÿ,›Ž/—ŽiïÿM6_.ÄØž7²éø|í· -ì—MÇ7º¤§÷O³éø”fìèßdÓñåÒ œ6ÿE6Ýs“– -aMéÓl:>åT¦úël:¾ñ㉆ú2›ŽêeMá²é„t˿ͦ“N±o²é8 ¸{â”M÷ÅÞΦͱú³l:þÜê¿Î¦ã�°üq6ßn 'þ²éøÄÛzý‹lº;#”M÷z}ù‹l:>b<´ñ¿Ê¦{•Éõ7Ùt|¹t‚õø¾7�MU_죛„«x=©äÖæ˜øt|1ÙYÄ·î…jÙ|^¯î©I¸Ëó×õꄵitº4oÑéA%V$$ÌÉ|©XHdV‚‚@Ö³P£8M’* -$T—coL}Ô$H1Ш·Ê.‹5‰?BPˆÐI¤ì²€È„«Û" -`é3Ç""”®Ã‹Âæâž¹{µ,±Bw_—¹cœs%Q%ÿ¤Ì`u¹Œ¤\%‰eî„2¹¤%ÒI -O~ºûn¬ƒ”*3¢^*Ieî^z!a¾.sGë0â…î¾.sGå¾½(t'móèùƒs®ˆ@ Déy™?Q:d*÷ǹ< k>TþÜåê^ƾâO˜FgQ¼¤D:)Ͳ׆ÂA’ó‘°Ã7‚È u]lN–Va`Vh¸ùDðÐTÁ>ó %´ß“(n?LìbEC¦z.9 -€z?&9 -�“Ñ-ØLʾ?É|ü~+V9œ}‰p$ÕvåƒÂˆìªüÅ$¡<e²óf -¿Îe'IJ¬ªÁM¬ìžk+»¿;û“BÆ$ÖJf̵K”U>R¾¬÷*CÞÒ…™xÏÔ¢–¸Põì¼þ“Ì”ûÉÇïkÏ ²×¿ª`…·ˆ%ÏýÚ[…ª…vß`áµ¯Õ -ŠXTçpþà”� -ηժ)(·IÈwÂá{±ª5 ‰oíðê<Ó°.!‘A’þë -w·üJ¡wLCžàŠOëV¿WáN,óñ‹ixc4ºÂÝŸTÊ{™O$RÞ·ùD÷JyßOC‘ -wì¼$)ù!ŸT¸«÷ -kܽ_áNê©æ0ûéûÄÚîñ¡æY¯’k°×jŽLŠ¢CÕ¦û,±–›ùhûÖós¼éÐïsEÂù@n>áüI>g•f‹½„#œËIb’½:f‚,—÷N~;_sW -ãÓ4tk_„¿Öî›Ä4&)IL_Ÿk‰2V1)iLìN¾ð>@ÝÇE0É•”¡.j¶ßg¥[+eVJIbÒøv\åûS»²ùV“P¬(²Ò¾§6éÞ/Nåç(†<‡%6[T ˆ¿Èq˜…OƒöË»éÞ*÷H’RXkýÝÑT-r÷ír\[‚GS½¯ÃŒÏo•{|Q)ÏòaŽ+c~ÞÃ0$d=¿ÎqM’œõ,–ãJ{€à@düønªÌxKúªÑ5 [Ò¨b–®ÈTÑ€¡Rõí‡;¸JÉì¾x³Ÿâ¿<J-<¤k—á;¦¯XIxù@™‰”•'SõV‘éªb×asG:-|8pÞé:tcl™ÌIÃCõB¹v…ÒQÖõ„’ðº‚HA_äñ!ØW4¡hבjRcóB¨›îôžÉõ pц3²SÓ·úQGàd9ê´Î†©L Ì9ÇJÃqsÿ˜äÍx‹Hí -•5>|°ÜŒ¸Ò„Ò.Œ4QR´ù’ußœIVj%iY¬Ž`¦.Œ4«ÅY‘]�>7Þ¯è$Ì«Þga¾À{D|™_‰õîˆ÷þ{,“ Ï-+Wé¼oÖÐÞöâñß:‰a“€¨6¹Äªbö:pRÂÚ`û¸‰M/=$Â)IÏ¡U‚M‚œ,ܨˆ”Ԧ׉M翪ÌB:t_Tf‘êIŠŠ‡V ÝSe€ òNšXÖçäÉ/²Ò^DhRT’Iã'Φ׻ý»{aÞÝÛUšô¥Å/’‰þV”–L%Ö(a?ñ{MÒR8N‹nÏSl,G\ź~={ó:ö\3å3SÀNI8úú…¶û«Ã[&DÚ ‡²‘DÝËRwyú±oN¢}ä$>÷Q²ÿ–õ[çZ÷cz–Ù§hÂ,Ào¡å;+N0_ì•Õò|VœˆÄïcðl±ŽâoÕ;–0ñ?³‘Gq®„ùt×›J¸šÇäŽÕëòu¬–qýü¯]vd=>A¯Šõø@°vžÞ×Gj?i|MáÍÁ÷ÉžêY|Q–M<“é+×[ç0šÄÉ™&Ä|Ç/µqV“¡úôn5cÖ¾™ -¸VJHådžs%’ -øª¤ñ‹ñ{ì¼O¯u$3§®1o•™7€½ª¢£áf׊�ã¬*ßQìe.ôN²w.¿¤ØËz:oQ,kí -�{JæÓiŠ}˜(5Pò9$B b’r�E¢Ó%dJÍ|ö'¿“(5yÂáûY€Rs�I¯õÇY€,V±0¹q°ïeJÍ„û<ðAOq¹Áαz7PjàÝFþ(P IO9€ÌýJª=Ͻú¾(ŸôŠlßåcôå_,Ê÷äUøWŠò½ªÈö7Eù¨œqåû¢|2VøçEùžë#ÿEù„ë#ÿeQ>Iõ+¿)ÊÇô*ÀFÙE“èUj°pU¿ïφJÿÅÙPëúI:êëº~Œ®ýÁÙPBuýÞ‹Sú´®ŸxU¿Î†â©ë'îâ·Ä߯ëÇÏ|¢gC}P×ï5'ÿE]?ñÈ»çê˺~¯2¹þÈ¡+ZÕO¦zË¡+X×O¼kßÅÇuýX yªê÷AÞº~ââ‹Pý¤®o:¢Ø©æÒ #9S–÷,èêú‰Ÿüußÿ²®ŸèB!W±?¨ë'î~ë*‘º~â¦.oôuýøÒ$Sï»z|óþV]?q(ÐÏÿuýÄ7Td’á|“øÎÍHý´®ªÉ¨êǬ΀~Q×3 QvU?Ö™]o§§ ÷º~/ó^ÿ¤®ŸxU¿;'Y×O<àš‘‘úU]¿Gþ/rιú¸®Ÿ8I öêú‰Ìµóšø£z|zq(’ëñ½(''¹ßWuýîPx§Ï»ÙOuýDò^FÛÎÞë'®ÉÃþ¢®ŸÐ^ÞIü,K‚:ÛI|5 _ÕõßofG|^×Mm®µøi=¾÷‚4„ëñýÁô¹Wõû¾Ÿ”$¦W§7<Çj¼WŠ›‘ú]]?–cû©ª•1ô}]¿{ª”X]ѯëú‰«9<öv]?ñª~_ŸÚD×õûÒ×'±®Ÿ„¼×?¨ë'^Õïíz|eár¤ås]¿Ï“áUýX¾ªë÷ìJfVõ:åìݺ~âá]œUìãº~âNŸÒÇuýxÆ…QÕOü\8éuý>÷[²)ö~Γ€]ùE]¿‡àâ«ê÷qô §®Ÿ(G0*€|W×O\1¤¬×ïëú‰'ÄÒ+ò×uýØäVõ{ÒÇ$ŸdÅ®ë'¬Q:Ì‹“¬$Öõ“¤Ã|]×9’Ï8"Ùµó“¿®Ÿøâ šÅùg ±ÔºoáYÚb:Z¡ÆñÁ=WjI¨ÈY+Á]a×®xà='m‘ÅM7{ìÞø}f<团QiY+¤yÿ j)ÌìwzæY–hösßðóËJ1tòJÔÒ\;¨—`>¢ÌùSfT»C,“ÎÁJœ–é¸Ós•jzi«Ó„a4¹È‡ÇkØŽtGS\ ƒ*›Ó“Tç -Dzí¸nud*‡Íl8sñ¦9c>!¶lÂ:—×µÀ´’³7–ÕYÞv¬kgse#¤³FåÕrfíÞx›ûY@»;GÕ)¸³ç‘F> QÚ„]5ï¤RºëRѱî»37=÷ÉÜNZ©#fC?ˆà‹cÝà%4A4΄Ñø|’Fvuùtº´§³³‘:+úöñÙ6îï™–UƒÏbj˜‰¬K~K{ûµœÎÝ=,6çRP¹ÕÏ2„•_êig®Ð¤t€õ½$¬'yb*}(˜Mó‹$èîE Ç…P"‚}%3µ#ͬ¨¨·«~åîd‰«qëâªØL‘)Ì$Mß’C‘«ñ`ÍÃxµÜŽÌIDBñjU…*gSÒÞ/îÙ*û3}@׊FÒÜÃßÊèk|tðÛU‘«LmÇgM²€f¤—(7íùÈT´\¼é å<õÄ]Šu1Ö}@¶?±©7»¡¤8õã ,U>S‹Ö˜ÊØê=YäDö*´ÝCNe!Vo&áèpqc†I»Fʬ÷ÛZ'ÒrB--ŒF\(Il±™5·+LKúŽE;ðÓ¡'³~ÀIÀOŸ‘”0 - XÅ:'p#b¾}·ÄcxÎ À&QCÔ¨ºÆµÉT -3j–ÛØd}t¡¿CG66®‡é#˜'²Y0ðÀg`<)#>™êö(bz<ÂÃíZàö uÇ—aâ3)SËaò: 2ök,‘•î÷—e*,Ñ7OîL8‰ƒ…÷,´~dË£0Ëh‹%íYþÄ)Øã¾ê»d ^0¨¡—L¬×øµ0ܪd¦^šØ#N …Áa'l’,?i°“v£Çª7Xr•5žVäS\gwOoH«æT§t¢ø¦¢Š]:Àh]É´÷‡Zz[Žb†'ÿíò-³óÀcÇK‡ˆ2 bÅÙk¨yNvÍš9zS-œua\×® $«@Šµ:ø}à‡„ÒëƺN×]§ë[×ÆÇ€áѤòtÃL‘(ÚNap!WâÑIÁF_mj8}uíôiÝéFú -_Ø bÐBˆm3Ì×ØãƒM¥¾\Ë4ì¡®yç¶6ÎhÍÐ3ý%k[ï³rÌèË°DàJãa -åðƼЇŠ“y6šI!•‡ ¹oæDîÎ5ÃçðØIªkjvkOÏBvƒPã5+ÙZBíéØè«èhu ß«oCÜÖ"Õ^<º‘OBåjW#SÅƦ`.Ö^2žžû—ƒš‹lÕ½ ¬fÉÍ»X{–›·UJNŽÜt÷ -{m¬Î¥ÃºÍ R`O†c¨¹ú,7¹e‡5dÇXs’GÔêî{|@üÓÝh® Ô¨†›ý3jYËÍ–•¼¨&”®íEµæ3-Ç€´$ÁI+øiÕ‘iÎX¬„?ݬ~(¡|ø.ø¦EJÒLêu0ôÆLz" ‚ž†¤EÀ§”DyF>ÈhaìëæY »ám@3zJ†#ªñýž‘¾Wà Og�o8êÉÈpš²¤jEmãˆÆ”†á£Ô“(û�‚Öž\Z`×»!x»©gYM‰DÜD¾,¹òüÌZn°¡,…²ô!¬)ÉúDªI2+QÞÓí]á¨%Zû,¿´ŸŸd4t&·Yj%yžZPB§ª]¼~20Õ„7Pa�Huf6€¥¿6ÐSq}åT0k¬ƒ$²gxOî9¯”–©nãi†ªM©]ÞBì ôàJ�}¡@$ÕI¦ÖxÞ�OD Ç�(ây¦·‚…ɘ4À+óýžå~Œ‹±r„úÁ‰bvÀömÆ*¦~è^°föð¦bùð›v”²±²Ü -ƒ5ÁM/°CÔq.äQ;Ö"G¨“(Z¤žI×íÞÔòL,ô¸„uÃíl‹dÏ,ÿâ�©ÙDNëçC/èßÅGaMk½ø{(¼d±ph6Èoaœ¢g s"ÆŒ#Hî$ÐEÚÓ>™aGÁlbL®£ˆÐg_”H"Àm& 8¥ËÁŒàQOœM„‘7ÿ ÑÙ`NF1«Þylf"¥ÿž ¸u«Íîo"{KŒ"Â)ÜêHãòh~’±¯Èƒ2b=wÔw"4Eø�Xz£b—•<â”Zqn|Å‹ÐK,Ô8_¤tcpú°7 éŽø®KÞÑxŒ5+źQì¾ãéâàx—–Ò(@ÌÎâÝ��ôJ’“o ‘ãžb¼nƒ¨t:ÉI�$ÅZÛ4™kM˜o¶ºwþm1÷’lŸKqû5‘ÇÇc³Ë7 �€ ò5Õw_òXk/Äc’AŒO¯¤ÍⱧn,¿$eq}}ðØg Z ÓµyóöðƒË>im˜1HIQìÝÑh-_Ïxf@_žZ±þr4Z»+‡”7ŠIïÆéÅÜàk+7Áߺʿcì¶BñzEÆÏÝDS_V˜ ÆãO×€ûŠ<ž_QâE–ó´!-Å(1^Ÿ¿•–ãÝEÂJ$²Wñ6¼––ã+Âü9QÈY?ÕŠ›§3IÙp[ÎÅp{k;z+}ã`ÚDŒÇC1æšJ ß<<eMhñÙ¦O1»¤^z÷áôÖäH¹íR¯e£ò^¡Õ=0B[ÅtóVvÏðçÝ—Ôܯ´”a7;¯¡6ž¤ì]¸ño$núgÄl¦Ìí[L/´°ïæ8¨Â7³×ª½;uLç¥ërwîeÌYÃÝm˜1±<ŠÆ¾ãî‚É<ðõ¥gºá+`ÂÐ.Š„Oÿ¸ÇôŽ&"FÆ–w4‘2CçЮk líÞùðN¢Œ‘?‰@ ?‹Áìí¶(ÆIjë½0“fܧVBÖ ´ö ΗbÁ}F€à¨?k$X=å±;ÄÝ3i0ø^|j�Ì@iie®Ûá ËÐØÞ6E-#¯Ú½Øij2Uܳþ2Üë”ó=Ñ,1·ßo{ð÷Ý"hã.‘§ôâí¤K¢.í,¹œ‰xP3«FSSB[Õ&vc•*Óá§ÛÀZI{ˆZ#ë½ë#€åâ¢l\ ]"FÚ½>®Yh'︉bãlJ®:í÷q¿+…ƒ±ˆÛÕÔJyàôЮË$D¹E~6oN¹u½]õÜ6Æ5¬ŸnÍzJ0ôb@û%sGÕ½/ë´Úˆ°“pzf}Ý<²´ÇáSáäó´Pzü¡"¶®šKÓ|G:!#î ³\ú(–À‚Zp5ÂnWÓ‡xB;‘.¿Ö§ÖØ.õ¸^ç÷8ê&y.>Ì©\”3T=8;ÐtÂ`#ç~ÏNÏÅ&ª TqÿàûÞÁ;ÅÞð¾ïä;¯ï•ð}ï ¤Ø»þÁ÷½ƒ'¿çdzCÿã—9\„í‡üc)_7³Sá´Z¬v?F™Gf ¥0¬¶›îã§Ù¬:ûß—è~rÝÎv—÷%T‰¤RN[t6ÙOg?d0“m踋 Í43·´Y.FÒYŽÎ]‰uRQö¢s´ågLJK9Tˆqù›ªab&WÕbÄãD›<áϵÊSDâÝX%¥’^Âט!—mpv HgŒkXM€å!ÖÏÊAËyáµ$CíL´¯W‚–º¿9á~&+z€±ëͳI™‹ÑyóVÄdÑÔáfyôEuZ£.„wÓˆ¡$ÏÃþåáƒ�b -S¨5$ýQÔ²ÑÑÉjÜ@O¹ÇRnÃ]Ü“bVFícÆÅÂOnÐòN?r'ã6ý,äOÒ¨¥¯~g¤r £µÍ–IèŸn‰Rd(§3<!†1¯¹/·™œB»L9þÆVæc#S¦ÜÊ|<øZM ¶ûLÜÿ‚š@†åъ¿§&ÈTâËúߨ ”k[2ÄÕ èÜ…OM€ŠÎMQø÷ÔЗ»¢ðï© Œù2ù÷Ô™ê¡(pÕñˆ: -1ëZhñ¯ïůДZþSªÞ¡Øh"º|[KËÍ«»EjÈÒ@Ñ6~Ä´+u¡,uÁuAÉ5¯¨óµ(Q&MHKN¸Ç¦få@¿4:šnVí#ðã«¡¡¬? - ´´„;,iI/å\Dzä°Ci1ÉÓ§ñÞÕ›²¬š3¥x¬Œn¶äX,Í—tì®|†3úðA `qœ¢•’c=z -pä*D*l™ng¬Ãù.Î6¾Ð‡Ã4önä©Œ -¨“ÚÍÇ5ó®ÅÐ*Qba…Ë›iD´DÓÞ= -àPJx2$v¢†“þY=÷0ÖÇN$æÕ—dħûþ?§¤*–ëÛ8›ƒ°<jÑÄÜ_œ83œýE¹hïþ³sñiѪO˜ÉÐm»Í·¿•nbm„šr \ëj¬P»Q…•Ñˆ‰úi'5la�ÀâÍFnøÒ ô´œNªì–•¿#•Èh~’Ïo÷êÇÛ½Öɲ*ì@’åXê>íZa»¥ºüH;Dï{ÒÇëëƒ ýè¶IêÑôî›LÅÝ„$OEÿ|RÇ·û]B’÷ß°¯]ukçáF„ Á ¹+LÁjy¶fÍØ‚$OÒ"ÁÍ…p¯w7"è9[¦/·¢}—Çö¼t·+ƒîâEÂV4bÈ·M'ST$÷ùXId7›N‰�ÀèKäÆ'dQ7im BsžA©¾éÀ›RŒ-í7ºQs[Þ -xž•F×Eÿ OC“ÚÀ@SL*% nzÕç}f’f<DPÞnH$%¡ÄH�gy"6ÜKyÈT0àáÈx˜ý:úÍø/fà)úAóùh ù’Ç€‚¢ýŽÇ²Vó€ ‰‚èÑoyL³Ô~ÇcèN'Àc’Ad Æ—Â@v‚Íc}‡ù›Ñ�ö¼ÏÂ�ð˜T‰¬üõtå@‡±B…O²ìãoCßÌOJØòPò—£Ì—3^¬ 0ˆùàþn4 V+NJr}ëFÒon<µÁžÅ 6þÅÜHÊø‹6œüŒ±"'sÍË�1[ƃá¶"‹¶B¤ L˜©8m ç>·¥ÃôGLL>ówAf0ÀwŠ¶áYZN©�óg²dþ,ÕBtt¨ Ó’å£XÙV§ ™X£Ã ½ŽÙH/M4P[ðæx¢vÒ[vX»p¦…„<:Éÿ›L y /¬L‹»÷ô»]LÎ&Ë!²¸?âl@k^ϼWÓÞ÷òF情õžÀ�Mk`R9Äa¥ d|rÛ`ONlø³Ä„ &¤l‰¶ÓÇ»iÓĘ#7ÓÉ!ß•,tÆE Eù“K4XÀ@$X‚á”LNô~´Îd…ÌY51wùA„ˆ}Ò«ÀˆÙÚ³¹ý¸.÷¾À,Dô±”õ=¶&l—¢r–赋Påª\ÅÚÓ"ÜfªbþÅ{×~v`´úÄÝoieù-£ÇY&:É¢b¨a¹1~À÷ }ÚÀn®¨¹¥�·ÄýÊJˆy¶vð³MZIdÎÅ„øö}׿ޯ0f~Þ¿'0´ æƒèZysIþÚn}iÛ?K’yüᦴô̤„ZW€Dí?†–ÚnÄÈkx…3ßÌ-¬ðž•'ŦÖ[‘¨Á©‹Çc¹ºóæ ÝÚÐÙØm‡üi¾;5Ú”Þ!Õ5ø¡cʱ7\ƒ:eï¹?tÊTo¹?tB¯‚D×àþü2L·)±Ý”¹E)S©ÀÊìr=Àlƒðl±ÚeGÿdØõ -þÿÅmpþý±Á›Ù±LK¾úƒë~²;™j` .ÑÕä²ÚïF§ÿþ¸Á-ìÇÞï7?ÚPªoüÄþ÷aºüPŸÕWçÕx3û©î"•Šn,Í\¶–Šþ¸(Ø�Û¿ÆЀQï‰ÁeÂÈПø·ùЧÐ\d(Ý1p÷¿àG\ü‚[ÿùÁПÜO§‡þLáe™Íý˜lûÏVf²»¨Ë,yi·‚øø~A?mm·mgÓŸÅi4]ÁÝ`¡#š\(ƒ®ÔßðBfBÍ(øîü1Ùäµ ^f—Ëeû¹?´9ˆ°¹¥? là'æt ½ìÄmÄOxò&ü°død§ü9 W8ÌÏä �ÚïÀ0 -$¬VHSŠl˜Ãìp’Ú0œº Z4I#2û¸&e¼B Éísò„¡ÆÊ~*|î¹}zh'."ƒX¨¼!¿`³n‘M´C ÷vÿÿ1c’L¸í>¼V–À¬?VÜA]ðp=¨™ÃjÆYCzÿ„üaM¨!u¸È7é@' ðŸ‰ìœ¾Û«÷ÖLþÿ ‰Z6L-�`9 …¨ÉôbA èÅ�.O‚í_\l¹ ÷ÁŒvtÎ위9Á…ÓI.xÐÚá"ï€qòßæHúbuÚ͸‹€\h3 Ù–qÀÌ8a“ð+ê„wP§Ã‰«ÝjvÚÀ›0ð²p: —Ûpð`Ìî06Ð`+a5c.¾f-s�–·b˜ÙîÀg`„ÍìtÁéAØT—‡2„oû!Àk¨r›7;q\â|t:±Ç‰'P³ÝæÀo)êĬð;«ÙF`ÄæÂÌ6» t9Ì.ua‰þØqÐ,Ðx„&f·™íV;ø̺cwØ~`ƒ68Éff…ÒØP -�¬VðÅ$îr€wéOK.pœ�¯`@î;A?·› Œ$”3;¬„ã§.ߣäÔÇœ�¸ÓŠlfÜI€~à8f&œ.;ãÎm`&2Ö=«L2òŽÓNݱÙ�tòŽ‹¾c·ãØí»Û[¶4€}Çå™Øœ.³‹�Tº·›Àq³Íúèau™mN0à‘a¶Ú ¼QÉ -D C€NwRZ€©Q'þ ·ÕŠ›í(à‹ºì1*‘ì6;ÍÛÈYq0¾.H¨ûøZ1€Çà�?Ø�X+ î¼bÅœf«ËÊd©û-ÀŒwλß|ð§%Ì8b6&à±&°`ÜÙLW3j…ì~›”ƒÜÁ˜:è‚Ý x |y›`ÄÁ} -ý¿Z¬¦µˆþÿ‡½ÒCI£ÕJÇRšk{hhnÅPã»ø£ýû}3»+ðâà…áEIofžžÖDHiÕªcŽ*L2)HîIv ŒQƒR8U()®km`Á~C«Í¨;ƒCŠ˜dpÌç•ÚxEǃÃešAj²!±0Dp`CT9=x¢’C÷®Ë BãʪBU8œÕújœÄ9Û3„ H>Ja{Ï BVP +o 0èMh“#ôž¿ -ƒ’íZƒp܆\?z4B5 LÉHa<ä't¸ç\ƒßDèT0uŽ‹„ÐGD<-8ˆ¾Œ’öÈ?<ÖEE`óÆ:…(z&,³ˆ»£Mi®gròqõøVj/ø)wßGœ*IØü«¡ØIãBhE1âŒÔRB[u¤ Ö}Pé“æÐûÜÉ9T¦1-cžÅÝR¡–ºdH¯7A˜Xö•Ç•Íç`ׇä†îž¤1ž¬Bóð®yþRg9©à;YÁÜe¼`âRf0u97ëï{1Gòözø°?ì\BÏe¡ñ¡wLà^R¤*pdõÙɳ,3…ºB¶¢”à€4Y³qŽ¬ ål -œ8PÁ&¦Ô¢…Sµ¹<®œ G»>éj›%¦‚ï¤s“ƒ¹ËéÁäåý‡’c¡Åí+f8a{˜ ªš“/•`lÍ«Åþ}ˆšU‹SÂ(VRΦÀ‰lbJ-Z8U›ËãÊ r´ë“Þ*¹Yb*øNj0w19˜»œL^NÐ’{ºq妑ÇKõLWì2¬¸üÃгåjcþlaëpË‘oÜb€&P ~ÅD66Å�xß[1@ï<ŠƒQß8ÖGöDÖµ¾‡Íí½lˆÛzŠl‚¸höú-äÈ7ð6b'ßówã}š5N3þj΅͹µW7çý®="‹/Á¯u½øæ(Ž3ÁyáE &jÀ‰æO;‰äý[Æ!1ü†QÑ2á׉QMôv=Ì}YÙì¶_›Ÿ¿¶ÇÕî´ù³m6ûýá¼9oã?Íî¸=Çmsz9üeS¦áëõ§Ï«Ná‘ø endstream endobj 185 0 obj <</Filter/FlateDecode/Length 983>>stream -H‰ÄVËŽ1¼ÏWä’±çueAœZq€ûˆÇ$X ‰¿§ìtº{@nìjvÛé<\å*g®¯ÂõÕ…gÏÂåë……ÂâŸoï/oÃ^_¾¡ðñé)~¤‡XÕŸµ÷|ìS¤”4Æ(Ì-”VÃíóåÙ»p}ó‰ÂÓ§ðâ]x¼¼x…3¯3ž<z+ƒxJãú€$nO8 ã#þ O·/{v_KŸƒN22R¨©Va;ÛÞØ_ÑÄ„œ[¸ÚߢpÒÜBí©Žn—˜5 õÐ[½! ñEL%Qe,ÖT%0¤ª6Ÿ¹'ØwÔ¹•$sª¤BG䂇²`‘1Ts=ÍÁ"m�I8W†¦&-piž eF†Éæ Y,”ªb—†¬É8H3&tLÏNY“Öà`Gí à -Þÿ°÷¸°$ã˜f不ÑZ9 úŽ) Rk©àôDrNCû’Ÿ6Ÿ!¦õŠÔbáºâlqÞÒ;f((;mP”ÏaÅQ§P¤2€xå+È'9Ò O4O -&Äȹ'“¤s¹#jy’0IŠ"¨Ô‰ÈhL h ‹lÔw¤Ì€·ê¹Ž$PÅ^´È¢èqU³ µ‚ Vñ1’ûȦ}ÄtµÉ蘵”MjÝΛbŒŒÔhˆÚäM¯Í„µÉ9m͇Þ#RFˆî†¸í^ ”V¬ž;ë´×Ã^÷bíÑVÌ=¶bÓR¹4>ÀÞì×{ÖÈètfPÝZÕñ̘ئ¥hæîsæÔªYjROvŽþ -ŠIÇ£;0eóÌŠ:PL‹ÛØŒÉ6«%Å ˆêÓtIVd-˜ÂÓ‡½ëpMWcz*ÜfÑI†‹Ôw+r܆g†}Èå2`HkŒ´Ø—¡`ÍüÅ-Âœy€FÊÚúyd§!þJU<X<*ñ[#=Õ£g¬Gyƒa§SE¢‰³m*Éd.h¦6ÿÏ{l¦CÒY€ÜÍŸkƒ-ö®±=¯WÛÒ»=y…ÆŒŸ½Å´–à,}±T)Çâ•?Àä1~#÷`î¡@îaȆízÇþÓ.Výý?‡ÿÍ”Üüü©°2¤^䀷lJËŸ2ÑfΆî÷<"nøOn§¶åMÅ/å:;³Ú2/n¸8ÛËóF(¸Ô£}w“›aÓÌÞ,wË[çE—Ü[B®°ô8º®œÙÆ·¶b7yïŸm‡!‡l²YO7ow4¿@øˆ5²†üð «¡E»±…AuíÕ[ÞœPÈÓ[ëÏF÷¯Y—Ÿ�qäÎ endstream endobj 143 0 obj <</BitsPerComponent 8/ColorSpace 144 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 64/Length 677/Width 64>>stream +Ñàëm¼†@šm¼¼ûÝåJdÇÝñýÙ«ÎDÇ»‚ª7èrá/ùÊ%iàBû¥õNeÔº9šÖ c@¼\.b„þNeð¤H‰J0ԣúg+>gƒXô6pïr“&«ðç‰ãÅÝ‹Ö�@Hvæ;G“RøËÐH`–å +¯ì©Œôºíj©:¬ì†j`@Ô04ûnk• P#d3–à¿áZ®6H�¼åÙM¹‰Í€âÙ7ã_EÏ^“燡ùíšœðèC4…£:Ê„‡LòƒÂQ˜ðH«<Æ¡G‡îÐ�Ýt;ÅÉ=?*|iÝÛ!…+û•ÓXFÇ>T%Òíܳà…ã$Qpdí¸õj¼;—‡à•x£,Õ›‡pK@¤Š ËR¹+ ¾¶¬DR3B{Yæ>Mb¨.ô¹ãuRWXÇÇl:úªálwí—¡5w¬Z‹^Š¥zój‰rýá1»Ï ØV®Õd-KtbL7cl~®¥@ÁË°;‘¥«Tülи|'s»ÍxÞ„g[ Š�(é ¡\ýÈhøW„gT9XÈN0¿à¢É- ¾ƒ Ô‹Ðurf }q•IæªV*ç*ÀT»Ù¡é‘ÞHÏ¡KT9t9´Í#«¨M@ |U¦Gj›žÃ«©rèX³ß½ûP,¸WIÇyÇMYÐr9&Á䨳´&—[x¾ïžuLJÓîÙ¼ƒÊ&N)hº«ç•ÿŠ&qäJº‚JÈx_�ø‚F¤×øˆ¶=<=èj™Ò?ºyôE©Q¾©ð&ROº¥YÁ*ÉcéLhRzŸ°³roð)é,>ÃY “ﮪhý¡6ñÁwñÐSn>YÌÌSèÖóµiïÁ!BÇM`4ã;!Úú1Ûÿ¬9[âa庚E…ûrƶ½Á[nóÖù›æfü?+âê`~Å4ÖSºÖæV"¯QoLoc]›8·…6¿ucé}¹‹![-@YÉÈÖóS,¤Y]³°‹¦xƒ·ÝæóSüUp +dº«Ãú÷-Ñ3¹ÊA3Ö€wGÈ«ù5A3qµ`ßÅ[x©ô<$Ö¸ðïPóï ZW3ÂS9×â<$Ö¸ÏÇäãÙ„Ÿ DÛôä¶^ª÷¾þ}úl\wO/F½›ÉÌ …¶· ¯•Ewª;.YAbC×ÇÝhŒØ,¥2*ûõÙâC îoÊш¹³Í‚‰¤;懓ðpžæÂ÷ .›"¾Èeé–îoœlt87ãÃIx8OóáûäÎW‹�°c`ÐœU Cæ˜a¦Ì·Á‹ÙÛN Ñƽæðð &|L8øé~)ý/o7îïë³×½é’ËŽÆ7“ËìÇî°û¡g¯ÇçÀü-ó?wƒ¾£ä×—ý^(ùÞ!ÿi¦²ëi'{;ºž?/ûmvxð¤YAä+k4›ì›p^ºS*ïÃë¡Cêe£ðñewÜuÙaö¦öú*ŽMœû¢ +Ýéÿ3q߇nj*¦j¶ylª vòôÛ¬ãQíæ¦è¯<as½vS’vÛ=BæM`Ìüÿ +ΛÁ &{öêôhìÖÜ ÆNúgn÷œ¿s%‹SÀè)ìÍîiHK&Û$]ðkÿóÿG†!_Õ×[½Zͼ٠b÷æwô^ƒï…™À×:¹ +_Tá-^ú5'fÑ®‚å6»ÌQÕŒø;û4£a~žfÁ}2A‚¿åÀÞÏh–ld‘ßÄa?Õ¿QáL4ÕÜ#üÛL+ÇIàÞýf܃'Q檒ùR|Ýü/t!ôäàéÿŽ~âƒ;(Ÿ<|žLº§/ß}›=ýÉ͘;tž>s'駚Š<=]]ÃÒѸB%7éýaæx¨gÞŸ†"u¼ëÓ_ú“¾;n¡ÁùÞM»½´pÔô{iõñècݾ¾Ä¯Ç¡¢kqÕ¥ÜO}±€¬µn;Øž>¯/²ï³ƒìIÒçßgøÚìûƒìé›îxº`dÇ£áùMÚfP+ZÁn€ÝU¸`ÝÐÏ“ú‡Oõðõ9ænE|F½¦•ôíüzÎþ)@=åÀoäÔÈ:¡È±sVªâ_Ùõ&D‹&¢¹7-Ñü�‚Ó7/5zµ;A®Â;åþƾÂ@@¯cÒx·ù••ŽáÜÄ´²1VV èhPÏ¿†žbcï¦8ŽXé@žþð{Ý»>àXwŽØ Á\¸ÍtîËû03þ¸dïõÅŤž~‹°¤~¨ðj0¸Aad4ît¯›ýÔŸDS> ïI£ÑìÄ¡2ûáâÂT®ôûþô6„—÷’/î›~5œ8‰ fþÉ뛩ÿÎÆàçýÉõ ûÙ?~û°´{×öÌ×>„¾úâ}*zU•e Ý)~4«è©õi’#¶ûDÙŸ{^~sVU¨B¼8ZZá=}T`Y•±žS]‘&cÏ£~U©d±ÝTeϧî0]Úµ}³çS‘è»rÐÜ3°`L›5ö.š…d-)Ùñh<¬Ç“¯EægeÒ¾r.„ãtŒô6Üì ø¢ÜL–-ó½û±s¾·EО‡]HXÊíæa÷»q»w#09¹²àæ¾H“£]„¾ p +#³Ÿ%ú“*½ñëœk/êîô°ÝîDƒ`.SÒ‰övå‰ö'¢EÕžíiÑNq[COJˆÝÓ“@OŽ7uöS½í†ä&(à‘¬dVÚ*8Gwdk$\‹=fü’…›V~É…™÷I_NŠ'&/,8™w¤•eáÓ‹‹¼BObˆÂ>!:jT%E±5â1¡¦( +¸lÂcÐæ€8Q%ø>Cº-[Á·¥8‰%¶,pmt´Ä4‚–ù% äƒ5dPó-E ä +y48)R¥@·Ê¼²îâP¨Üö’Æ,Å…þ:ˆøꊱÙqª0 +½ÂÂ{i!NÉêŽòK +ãm‘Lƒóª\ŠØ»YawÉB¸AÞñÈÖˆ)TYÁ:P¹‚Ïa³ùs bÚÄP“¨ ѲÕQìàêf¿<Ö-Ë( Ží~m:±ÈðKÃx½Ì’¥awqiÜéÊØ‹Ì{ez8/Ç#'fþ½ÿáràþŸî”ܹ-úÕ‘V+5+¾–†Ân±^e¾ñ/ò/ÁðP´iëÉäy}íVÓä5f»ÊIó¼ïÞíúüKwÜç\Xü+Wžý›¦º–+®üløÁ/ÜùæP,·ðøK£u3Ûï¹âoëA–ôû”—¯ÏþýÖí‰ï²4.[7›OÓ¨)Hˆf㯈ºìéÏÃ~ot^·wÑyÛ>iu.µ¨rìØ™ÃÞÓ¡÷0¼®‘9ŠÛ¶ªðÖcíf[(ô²ð;A33ûeù„Cr¥¯3ÝwDƒcDB~-s£Évzf +Åÿ÷pz €Ìp:ŒÑÅd +`M€«Aÿªå¾Øÿ- þòÿ°½Ã0Kw¼*dY쉗¨€Þ-‰÷ÞešùÀ–¸¹•¿ ÛQž¯Ìw„ €¶ÑS6óNíWÉÝ®’pSÚ.s¯žà»;ǪüŠSügÓ<®³w—ÝóÑo;¥Ùû÷lÙv~0ÿžÆ +^%‰@A_n©ÒÜ íüßâÀ±7>.*ûá÷ë®#GõÅh\g¿ÔãI`ïé&ä³Áð<}îMƽ††çlp3<öo&õ›w'GŒI¨H²»îb]õ.Gã?°1–3λãKD7ÈŽx[ŸÐIo0ntðS=ž6wÝíüÐ}@2üŸŽÜîSíI𗦂u´0$‚!ñož)-‹Ž†í¢RFuT•ÿò9‚V¡‡T^Iï¹QUÜ*€ãî”Ey¾ï8]ÅŸ¶½¾®¿Œ~ƒ|“»e}ÛÓ¸-£qÆfÆUüÅ\fÚÔ0™r†Éü¦òa9Æ?+?øOíÞ¦ÿJ¨å»þÕõ€©eHµÄg}¸OýË ¬‹(Âü¼qäxšôÓcþ0<É1×fØ|ÓÔÓi}sÖº·Oþ™fwþ×·8ê_ÿ8˜…¼éÍ£åÉ?.ûÓÚÿÖ~õºÉtgµ¸0§Õ“·/²·õyh:/ð"R,]¡KæèìÕØö¾x!mƒ¨´¢r/Çu=ÅŒ°•O«ÞÒ(ïêÎCƒÒÇŸ»T¸,U¨D‘ä…åÂ~ +Ë¢òqpAcHJ/…ì~¨‡Ón(ï¸'7B-+‹ì“´còÂê”P”è ++(:AxÿWlòoŽÝÌ^þMUÙÑß´!´å®jáÓ§k©±}%ñÖÛ<Ï+LøXAc˜!‡‹äÐ Œ^r¾Yéôòo²tͪ‚§Ìº¢ +g¶(‚Ìsáçš¼w³Ñž½ü[•'íA]‡[ôÏáza×Hi +")ç¼}Ž›Ûƒþ ÷×5˜Ç¥Ðè¢7çÁ<X¡¼—ºk[+ü±p˲*ÐCPÀMó¡A„ýÍTÔ 6B…þ(Q–:´¼Ý+ÿà2BdRKP§wŠfnÖ+=Âz¯º…¼csI‰6-tq®93á¦1iÎ@ˆ†ð±Ê/œ*W¥_Ô&ŸZÂœCVn*Z0:‡Vн‚Ú³º^=àBˆ +³)y?Z¸Ç,¬é1èÛ38¥pÍYM›¦PJ–ª Ÿ¥É ØG•+ ®é“‚ø†°[ð_þÝ8p{(¥á24@¦mu-/ŒŸWpƒÐ€éó”&å€3C»Âºf|ÜÚµ¥G¾ 9äÑù…ì›Qš'7Tjq2U^b¯´±3`Zß-**æºUÀfÆÕÚ,kŠkEû¥ +½’’vSiBÜYh6u$n!†;"t¤, Û•Û,~w¯Ï•®´wÃÇû68at’ cãd†ž®]ãÓ¾cH®Ý|¹ý…{N‰- +ŠÉiÕ+ßbXõ¸è\€]’©‘Ø G&DØL•_ªR¢Ï¯ŽÔ|g|Š_õ9lJ7!Ð3šH]ƒ}p#¯Ð©vSîìc òCt-„ýÐn²D~…¦ÝäÈ4‡ƒ²2Çe à*pïŸ^9:.á½ß9- ¸Âûåß`Ä áVšG ®¤¿¦¥´×ƒ +û>¢Ï÷ˆ†$üUy<q-Þÿ’á´â9àÉ+xÁòI…ó r²„½çv¯–H¿ázVJ[Zœ€?žÃ&,Ú×>cÊQe›Îµ©üêuãÀuQ”>¼¾ðP$ ãÞÀÑ'”ÆÝi™4*?qCxp;lûæèX…t›*"ä*=ªàöewTÁ”–ܨ5Ȉ¸Æ´ÀFöKlËÀcš&D +þw–ÐUܱ…a4ÖS·ïéÄèÏAåB`@SpjÐ2™ â¦ÀmBDS S¡*FW¢ô„[¹Ó—OUVèNF¹µ'+Ð{×lcGN)©ÙB*¿þαÙRçî;ž…Àɦ“GÑYÎŽôäÁƒ‡‰ŸòwüB€¡È p6Ý!œñ֔hN,Q<·™³psä#²\Ûµné{¾Ê!..†I§cØn+EÔV€X«¶ÖCëN£ÂoB+p[no#%õUжʃ3¶ŠxUHuýfòXä¦ÿšyö8áµY^›…cï>~^[ÊįǽËþùÚJ¡X¨GìïÑ%¾ôæêŠÄÃUïõÅ6ñr48¯‡Ù[ôqZÓNZ[®M�-¬/ˆUVå„Ÿ©ŠúSìÉËq÷3f†zóa#¡ÇŸµ@Aù“Æof¸ö1îøÁýîäïÜ –Xð%eXGV'ÿE¥=R>^×ígÜòÆÉ/Â'ÅL’cßL„Šdˆ°FY<T Ÿ&¨îE'SG˜|Çõgö‹oÔâ^¦Ü2étÄ™ #€À—ÜZlLºãO3Íÿ§§5üÂFÈú 9—ʤ_rk¡OÝšý–H1Q®qigKGyq˜Ú–žºÓÃø·*‘Í)øÿÆácTó<sbVéä®Â3<n®½Ü`©K³_B‹ÖŸÈKX¢:îx)°o80‹_Œ +âkÉÿ‡u‘k<öp»¿$Å”ÚT>É¿P¸Îól‹ ×P_f¿£0ëWFAëV9pPlC¾DÃĺ¿´·þQŸeÇ£ÁhìäôÑÍ5ï²°˜…ÖúFÂLÂaW)CV(f±%3zŽâç–Ô¸/Ï µ%6@úi©x +ÏlË<”¦ÂóÃá¨PAÙ°LH5fNHõ}ð3YÁŒÊЄ€;YSLß„„á¨Ø ·7»(i!²Íóˆþ65 +skôAâ:µ´•¤ÛéW•´€,x}a‹ÀÄQ¸\Âhœ”U\_Â7öæˆuT¤ŠÚäú—“þdšªçš>óÆŽ4ÝÅ‚H¤hùM/’™Ó«á[osyÈÓ›ð ™ÿp=º™NGÃp[ëüýs×å=y3ºþùºYFíFÌÏoºÃzpz<Mj_ðu(×Ö/úõàœ +¾è®ÜÇÛw0äwu××€˜q}ÞŸÂ…êp?ÔÌëOþî†÷¨g/ºŸFcTæ=Á¡~;{¥›ãr\…ù|î†vU§®]¸ÿŽž³ïð)Ñ/xViɯ»ÞJ‘Ü�|…™f Éõh:êúá=KÚúóë~ǃ49…Œ¼ü›ÓïᢻìÙÍt”½íNÜëÿQÏ´èÐ ²sÆÇá¨÷qt3Í>x +µ¢h2¸YÊÎ@w|·…«ìº{íVõ¤u3`Gõôî¿*›Ž»ÃÉuw\{ŸÝ;ûç®4uQ$åÜ„žÜ,g= Ÿþw'b»nY™LºžÝÔ-‹~@Åi»²nÍù’ŽÈ*³¼¤H:°¶hÒµe¹Ž4;®ŒJÒZ<î?u'ïR<&ó÷f\Oêñ§:ƒíšýà¶O÷¬?èOÃýˆOþù£ÛR7WÙÛÚÍïMКs6el‚ý»zzs~ýÓzèfÛžf`y¯Ž®D0’ëÉ%/D\Ék| •7j8ºxíVãê:y¼Óq®s'Ýᇛî‡:sĈôÜ>}6v\/~uæ]=ø{wêš9õºËu—uï¯Ç¯ž§%ÓŸßÃý—ðÖæF…ìvÿ¿›.LDvRª³{@ÈÓwŽ ÿðãè< ø‰Ðw>&3ôñÙ«7ƒ¡!˜÷ܯŒ+Ý£A]ŸÍ½ú¥ËëÔ´… ï|ãª^×hk‡+4OßÂÑó2®Ó|U¹£…KaÑ·´œãbYXîõu·ÇëT›•e_t{5Ó¬*}R_Ì.—öã—~ý›ÃòswXt‡½P¾„°BTaa-¼µ/$ýnŠë7\ë¸Ý/£Ñø¨ÕÌ`ÑhÄr 4Ê%-Æ{P·(ô’R€¼dA˜²*ÅŠ¢q0é‘RdL@ºîÄÍÜ&èNÖ ÚkŒdÍ Cb{O”–=®ƒãÑ ÏÎÒ6¡`$°fù‚ÁÅøÃïntÓµeaHiÑ”nç ’Üñ<èël‚ΓyŒ.*<uÔ>îÇ“ÄËH.Gþß/õÇhø÷Ú‡Åûή_þŽœò~,í²E…óÕ‚Ìü<ìO›‹Ø‘¾7ݱr›üã²ß»|3]ô5ßþË(m÷wrMø@‹üáê¬>o×à›ç/ M·ÛÓ£5™Ïw/þ‘ú×ÙûÜï‰Çû’³iæ9o6ò÷÷?žÀIŒê$ûyR;yaC³o]ÎŽº½Àè g™Q_æÕ°7¸9¯³_|N›þ•;J' ~�8{wsvª«qÊ�4[tœ-ܪ·èËàQš¹yÿ}awÓB?z/”•eþÑ:Qd’pÊ3%fg/œÄPêùÍõ ßö<t|¥£ú²û©?Z2"© àÕIetAߤ7û_Nf‹{Ózú–õT¨WnXOüTÖ³Ì[‹j‚µ«2É"‰þ~}é%Ó&›/s3ìÖýÒ–‹‘¿¦–½UâVµÌB®©¤ÏñšZªIžÛU +ËIæÕ‹6éºJ¹¯ÔvP‹×Óòâ3%±H(N{‚š$©åÝkFI<ËkDN¬(ýþù?úçÓËô(_Õø;ÇráYx=ýLÐ<÷1_çå®þ!’:X|2ÌŒÁŸ<®ÎUÄäÊ~¡Ù‹Ñøª;'c-E`c¦ÝAë*Nœš:º?˜™ÛFÙ%'Za•ÂÌ¿#žÂ^;ìëÏž±³Eý1ê=,™äÙ†3@æ9p.Oçg“9ÞàûeM7‡ÍÅR9<ù}æ½?ü~=O bÆÅF58Ù1ê�?9Ð å¬;ˆXžÒ,ç?)Í2˜¿t‡ýÉ¥ëW"¡¢¼T¢XÛl–7®5ì”g_)c t)E¾"™ !mµ^„Œí¼]§]o+ƒÆ¼ìŸ¶QX×4Ô¦E´•i‡@46ÃßÍ ¿÷?ô‡¯†çõïïêÞ(áZ[ÕyÑOÖ¼—ÆòiZV‡óe“ËÍÜrn¹þÜÔZ+ÚM-4±hf—ɢפM5ý5hÌ'«+ô@êéÀ%ù÷l\p’jDÍ_C˜r’‚Ý_8:=yG Ë^MU–ï9kˆG×`”ð1#s:¼¥rÇ« ÉeÁfe[©Üͧ2³ÈL\P pÖÌqòcˆ¦t‚5¬ßlF”†ôðgoI!b2yµ#kïGoýkýœŽ&}Ö3vêŒmë"å+%³U*‹"³¥[n·ÁP¹!†Ü[-6ÆPQe…¾ŽàÐÝMUÅ¿þxò“ëõÂ…æªü~5ºŸÝÖ÷Ïn¦¤ÊI—ç7ñÚOJõ.ûƒóq=cæ¡_áÏ”yÒ'ÿ÷prú©;ž|ŸhÒ¢Ÿâ^FødI¹!¯…ГIãiG±sÖG›šh‡DÇbù-±Ci鯴Ho;Æ¡“ZŒo0ê}äú±Qɯ4ý_8z±rôæµf£6íLîÒFÿîSëExÃðz7Ço=,%»»uøݤì¸<8ÒÑv9Þù¾xöœéÊcØ¥“‹ß¶ø4~àm0ÅñŽÏ2óîËy†‚#ÚV“¾~–çë<,E.4†Ë†ù¨<ÛŒ-Üú]õíú]&ŠÞ‡RЖés›á|=Që¶#qbãšüÞŠVnÅYDîÝèfÜ«@¹ûUèÝNKbù‚_SŒM»ãõ”tܯž·™ëù:Ìþùé¥Ôd<Y»HÀbeáÆ`ÓÒ;/—¯=@SÖVK¡Qþa—A¾np}prt{í¤ñ´ô–l8úôÓÁú¶~hÍò¼yÿÇü§ÅƽÚhW[3ĵów)[Ú-ËXvÎÛõ„÷ÞdÙæ¡ôн]OûWÁß{[úäÄã‡îÂU=ížw§Ý/íGõ…ýøÒfÇ%…ÂÞ·/£³îàm}}3ˆ®—M£^°4§~ÃɯïG×ÉoßÃoœ’i†DÍfljè ³g¯V74˜!μ—Ÿ÷2‡Ã¤fPl½>ƒýómÃþ9[ôupÝ}·ÌÏ·Qê=;ø¦XÄGO<ýÅ{N¥žb¦èë3n›pÞ¼k&(¼O¾Åvˆòe×bªYl1ª|™v¸ +í-·yWÙpmâYˆ6o0 ’ÝeõêŒ(~Ï¥§ÿu®»jÇ4~˜éÔ\1xow0X]jò±}æ†#Ï×n$“º7^]²7Øñáɼåv¶<Å6m0"ª’:a\ ú?Gg¯†£,ÆÚ¬Aô²ø·MÎúÓ«îuëáÓU?×no0î\Î×”è†ç‚ÿ&«Kòú:ó)pEË…¥ÇçÑÒÞ/p"œ-xáv¥‚Fr½°Ôu°†Ïæù·~è\¶(9‰Èl© „P[kË}Z=ÆIïzÐû¼|Áù2½á¬ÃÐl™i†>.ß'„®×ã!”[Ñ÷ëW;îx=ÔçkJM(àÚ•‹Å½ ¤õöuÜ’ŸBÊи¸uÁаèy}´7Q¨.íøœíkÊôÆ£ë5E€Pö-XSlœä\÷R†ÎºãÉŠyŒ#]\tõÅ´uái2¤ueÇQ‹[,-}Õœ4»Ñ¢0w£EÙq�4µ‹á´s>XMò|™ëñÅhÎÑw¶ØäæŒö£Z4G7йÈÉ™g}8 VLô¤3¬?t£³Ø’B½Ù˜¡¥å†SôsXQf z膶˜´¹r“Ë®;€ëX‚Bõ¼íèÊ°ÄEj¦`³”]Dç¿î4ül±k‹JÇ3!¹ø»¨ä‡Ù’KÊ…S0†-šÏXÎÇÂ.9è¯ ®�v\é’‚£ëÞ +ª‚&+fœß¬d°WP^W}5›á¸©Éú3K]Ü{+V‰/X{Z)k¬Ó)uÁbNKù#gÅ!|•°KO~î¼ëd>…Šã0ϳÿõäÝ?^¿ù_ßfŸäê¹f®}Ø^SÙ4Sô•©¿ë¢2äîÚ»ú¼‚eN +Ž¦—ëXfÏb.ØëÎ�oxmM«Óâ‰c£ñ›Iý|ÔC1›EÁàç “ðô—þy=zúãèÌ¡uÍ‚™ F¼á·9×Ét�l¼¹ZBÜšÕBù¸/ÚÔ¹>‡Õ5¶îÔõyëÆýÒæiõõxí€2áí¯³X®\ÂZ•Z.+•ÚE¹¬Æy&lú’Ì3kW—L8†2_|4qÙtÅ>q‹ÏñçÙÙçìù¸IaV󧮕™\ÀrÏ`my¡ËftÔ²¦FIùŠÆfŠÍ“(…†¡Õ„㼞ô?$VY(Ëž{îZ¡7¡”MÙúN¤ëTcbÌÏ›þïõàM=†|ó C@y=¼®é%ÝÄÙè}jUÉ@|¥Pà<ûJ˜Âd¶RóM^S³é«|õïú¢Ì#í”Ðô›ç/N_t'SGx!ÅrzA…)¢ýÙxÅ:£ÂïÇý+p¼_±8¨èÛúCË’h8:Je¥¥Eß8$½JµùCE9Ò£mÙ·k6n£ðû•X£èњôÙá>)Ø–ÕP”ŽÛõ²ÞqeQ EßMÝÚåäKfAúUн¾¦·?yéø—¬;®3ÇÀdáÊ& ùÛe=Ì&>–µ;Lo¦Î€zdÝ €ý®qNÕÁÃ)6Þlìóè&»v¢F6fÓZ†Wûæ>À}.ýÆ‹þš¹—qÕ¡C\6A½:ëÿÿì½W‚òÊÎ(:æð™œq�“sNMÎ95ÐätÏù÷ÙÚÎƲ±mLÓûíìµW/ã U©T*I%•(ëäßvò?ð,+Ð1*Yžt¹ÍV°yÙ}‚Ÿ04¶=v ûü;|?Я/ÿnû ,´`—_tî´ gçõñ!'DÕ3v8©õ u>ìÀtý_‡ó¦ú¸—üe`LÔP»÷Ȩ¢ª^ÏPÆ»_ +Vxßz€„YfÔ†ÁC5”°ŸÅ‘ÿÂïœ?%1™”¥°IÐPî„ø¤Î{Qú¼ ÍJaÆb‰Î·éäZ˜üÏâ,ßFœþŒÒ¨„핦šŒcõþµ>Ä)ãýÏÀÌ¢9FéñÉ\äë/¥¦Âý[š÷@Àc:ýK°„Çuþ»o³sÐŽõ÷Z¡‘t‡ÂT=ùÎt{¡FŽA‘[B€l§4Å:Ç).ÇriȦÀ–¯¯n»é~²ÞÊóÛC¯H�QL'%ä×÷,`q“ÄgÂYãbî/‰©ùèôp÷’¯>åœ/Äiï_1Ã1mu½D`Q{:GQtΓÿyŸšü¯Þ#&ÿÛwh ¿|›”‚Þ $üR9!‹‡ýaFÓ*FN§,9á·Ò$q*Â*JY›v™@uþqRˆÔŽÐTh-~«¢ä·"$¿ã*ÜÆWá䔼zÓ %îΖQ…ÚoAå´5I+¶ñÉ‘>ss½ó¾+?ÿBnÅ”X·¸«'0óÁ›´géIJ{^ÇäÿY¥×€Qþ&¼ñ¡êÓ`àÖàR€/ šÜaú¯D?âD‰8bë»UųY+±€c :Ã%}Ïh þIÛš#ô%[,rNïV¾åÉ¥«Ñ_Oì-ÙÈ$I/ÒH‡ŠÎ°¯Ð7#çÛÌJâEs:5(zIü$–VTñíæHÀz¼D.yÜ¡ÒEüä|)w-3•B$à\Ôâë`h–°Û Ë'T…yàs'R:Ÿ»›¾&~1g×fî… Øue ‘š[*áÔ¶b?[CK¥K|£¹©(0ÛûínVzýh=noJ#å¾çD›Ô â»Øw–„UwKÓóo•Ž"Vj?ñ=h¹cÛȶíûŽ®ñ•»‹ñÈ1Ö'fXá „ -hò%>\àJJdçY$fóüh£5›fO·¡=™ßT:ïÑ2KÎ\c|åùQ¡·Ä¾¬cK$nh¤â‹›9ÔÌiVþÙl²WkKò»°¢1c¨câ>¯µcßz˜›Ç¶º°Áv¶ôoÑBM‚í7Eü¹¡Ò‘þæ ÝÏ;K°èw¸wýàÚív\¾‰èy–Å,ÆBœ%r—& ›Û°p·tî[Ç0¾X1h´Y±»¼£{Ð)è"ñl@ÓJZ½®—lÔ„ÜñÃÐhÎ{>|ªP`C{èPˆ4kàôÈYÙC:…bicX³9/ Ø@SL8&} +±tÏ )(Ô+*:UgÔµ%” +0WV2O¿·&Ç40¼ƒgë¶QK(”´â‰ð2ÈÀiþùÏ×I¶Á�^)æb°€—b9¶ƒG0c° +_Z8©{.$–Q¤ŠqØIvÉŸY´žø±$¾ùSr21hcä´Q d£P´¾š]£eí¬ãý¨{ÐÑ€oæÝd{¾±$¢¹–ǦÃ͘gk?gîÖ9$¾kÉ9EO�vb²„4þ=B²J—a–fÌÙÎ¥"çóªáô[aj„<®õ™ƒg¶ZbïPHJ~ǹt¿Ó‰XJ¥ó[‚7c*±ÅbhÎåÒ蚆"§‡ˆ¿~UGë¹ëí™”‚‘äÐý>ðí3ïÕ;Ù×Q!nUï"eÔMñYí&§hÀœXœÏVtQúÙ†Ðä`‰QHGG9Œâ¶€mœ‚35oOdÜzîÓê©vùhi+¦âß9Šå§óT|¾ëPÂSdÒ±-l=`“×B°ËÔ5AAT:ЊE)‘Þè�U%�%~ûZ‡çÖ +ß›+ë5}TO½^‹ßù% ˆ?{9|Ç×—5 ¥¥WÆMšlæÑ+ÿ§ߙ\5Aö*Z‚¹nîŽtÙrŒ�Ousú:šï¢µq.áX)À·!CFëÅÃ2Ò¬g'©¤§ÒVé4ÙgÉqLZ_xJOúÚ`ÌoÞälsÒßPd;¡³¾g(�ñ4D«Û£™û^e’âÏàtWWf{4ß©íU:Ž¿?Eên})^8Õ1Þ’aÖ'¾£†!o ¨¦R#²¢ºdî~¦”k*xÊŒ>|¾á4œ¯Í`M’Öú,¨Xi‰ÝÖZBA’ žFkÖÈ>¾^Wæ°k|¥žÈç3¶T é2QOa_–æ=ýz½ÑŶ9ÔǪ÷˜ŸnOxmvFšÔíêîhÞ¸K‚?óšÇæQú*× zÁU;îM"Ü{Ø2¤åãæÍ óaÞ¸Œß?üW&o™úæþõuþc<¦À{á*¸úIЯÀ—!ì˜ä6¾Ä…CaÙ%„ 8g¿Èmæ ¦5t“`ã� +Õª›DøÓ«Ñ÷`T¯(,ðk!‰˜&?#-(Ú@,Dc/Ìù:w-ÀK0øÓ‹rII¿<ŒÜ©¨pH@Ó³køºCFÙ¾ðJfhßÁ0P}aGÒwb†2¯÷Bw:ñÈA¿÷øIóÅ93¯ T_رä÷EÉP= ¯î½bžr,RŒñŠ-ºHÛ««<ó,Ä"I,šÞ%îäàô¾,JTŠ78}>¦îœ,ÒMú‚ßî·Tw{!R ¥Æ…%…?ª4í Dº€bS…¡;üN�.“Ò}¡Fzþ©•ñEòvˆâdÐ9ævàßÐÓpÿR<MÍJ +·‰,ݯ¨ÁnÐ=s:8V€�ÿ!˜uÏÝG«ßË<P+óGÁ‚7óûTÃ6*]Z—µÄe$9ºÉ¢¤F׺9âGËÈá¾N,m¦0B•â±2«lì$ߺei9+HØS6íCAñnS‡oZÍKµ…cÂa±Ñ"ZÝ›âñù9Ô}5óX ÝþnŒ~Ô °ø¾°Ä¬•Í ª‰4 ÆtÒòu˜g4Õ _ð4¶ÝN¢d«7ð%rAD+0ÒÜþY£u÷¸VŠ¯â`rÔO‚žrL3,6]&ædUj!�fÕrÌÙÂýwË"D’À¦ÝØ-þ©oåþkµj<Åù¿¢6«tÅù®6S]£]?´m7@ÍÛé“c·Q×=Ô(¾ùn3¦Ç�—Œ +\0çS Ó<ÿ °÷ïÀ~aÉ)µãÀ¸|`É)µãT:Ö’³=´B¥–N™~"# €ALSŠíQ<œ6PlFŸ7šüݹÆ_®’†ç»xKÐïf‘wq¥�3e†Ïº 3€©�t~)£‚ÓÐrfÛ|Ø À\ã«^˜dqüöZN™Ê[*áêâ–PzlcxÅ–êD›O8Ú™0xT±ú¯V…yzУîÍmZFùé..9¯ühØ?Žm÷Í8úígÙÑ¿u€0;Æ21ç-†bÖƹOŒKoõúó6öË족Û]7/À0mœkñz´W,áæät‡RwCÏU¾£Ü¿BXÎòA‡J)ZKÏ€Þ<ã‘⥰j½ ñ†/€a§ÿ¦„W—EcÊ:ǬƸ—¢¶ë²¯Æ(Ì*î¿Æ¬Ò=pßY’Œ8};‹ÀÌšTrã:ïÎó€íqÏ +¹X¥&cg÷ÅxRàT¾jMŠå¨”•t_ùp›ïÏ&¶mÀ[´o4’“ñÒbI6Û™»¼O_Ó]Çø2æÓk8ð94—<Åakˆ‡tf¬åÚvÀÌJ'£úÄÔ¹¨‰qŒ×úŽðý0\` +g¯JÇYeç/èFÆ–ÈÍã׳—Ó8{ã`¬ç uCÞD¬0Z¡©~„àC„΃eï1Ѿ7_·`¹³×Ö«Rô¤W'ÕKÒb&¿K”í8Š #MíõJ3_0_?%)ÂaÇ2M+|¥cwð\vÅ…wvs¨):Ñ˼C�sŸ¯x¸R +iñaä+eꔯܫ5wp„>zé´¢Õº¥Ÿ“Ç+¼úá‚¢%6m}ƒùÂú²€Ÿ¾Ïܵ›yÓ’œULAèU˜€o¦>”ð×ô‰”ÞñEÝ‹m==å¾I&L`ÒH=‘»T¬*ÿ;3]F|-°ãKsÔ=Xš8ª +½ cälóÞ€²±mÁWÊÉiÝ`i¼(%�¥_¬%ÒÈ7°üë˜J³ùGV½!iM¢®×ÖR#~†1êzFš»%ìÕ¹-âûúÙp–78V¤:µ3ž^æ–¶SÍŸŒV¹%âîñÈv”1v¤õ•?0ª¦e|¹\N£Ä)ºƒ…à¹kô{@£Þtz{É—èW\éîXäolë@Pãhexà¤Lº@w“ê˜Óå;1sÿ!až¹î@Xfk8iÉ©£{á LÆ XP²-ù’ùˆ?väh‡÷õ‹[Mÿ QÀl‡ç1🔇‘�‰ôüiQg•`f=ëØ$9¶-·`‘ÉÛ“ÃIí�1Zä"„b:ëìoQ[/d˜l§ã_ñ&öм^]ê6€-¼j “aÀ°îNâû»‚‹Ð“ˆlÈ®û¥MJX/ŸYú°àõp–m|qZݹ„–IÏæK3¼‰BÇ„JD˜ß“ìΦ]NkqR£sh±Œ¸¯h+])Ĵ鉾âYùÛq¬±»°žGš”ÞM4Yº½UÀc`9JÿDóXQ�0‹¦¾Û•B.e=eÔ<>”1 X.ˆ{P—+�–Ȳos¦Œ-ÒÌ·×w(܉sA„N;0Í–Häž-xH ·¨gz\>æ=úu÷¹hô¤uI3Á!0OèÐl/`¾fvš¾/t; +ékÁsÀÚ X½«¾æ˜Èç¾7™`߉ø®•ã:Zî…úÑÚ~cT5²‚&g³ÛþÌ7ì€z¢µmÄ-y—žxÑÞË’qä|æý®NM+%K!P'}þÊÁÕ 7uÀýa©U;tÞŸÓ¤ +×Ô14l”Ë9yÕg‘;ر7ZjdRÑê!8Šº²þ)µ7õ0�UºàÎI,`Òêf@5Dõ¤V3%Rñè`™Š‡ý$g.ÞÕ ’£`A�@PÀø¹Ñ¥÷çlh‹c/íé-œ`jß™c†¨»¦Ï%¾£I I|‚ÏÄÒl¢®Ì 7xJ‰Áº£ÃR4FkÎQZ„þiâ¹è>c>¥©ÙEÉL…lÏZ|²Œ¡¸^zsaÖ +7}ø¸Häu"e<T0îËÞèðPK˨"Ãܬb@3m�í¢r³íuÖj£œØ["›mk¡)±M,Cu´bv4(\i ’„¹öGâÞS®ýNDœ©È2ئøgã.Ûo€*eâ2„X!¨~ ±4k‘Ìh¢fàiJÈæ±ÇÇ®/4–&aqxÀòWmXE˜F5\¶º°…d*Ylzä4�SH˜Å~“nV§8™à¦HC›È•ü^é÷�g À{Ä +ÉåïVq§ãuBãçèàB`óÄì>ï„=…ŠÝä+Zˆ^´^×UØ™šñ®Í)þ•¬,c›¢EmrnÒ< [3ƒ6Ö Q5‡«ëî‚XPÂl41A×vŒ©Ë#-…f'´Åž•WQ –‘ u¨GöŽi]ª~Œmw_;V‹áX0ؾ”õ–`´d$m¤û@oÒD«È™"•r nÿ(I›©Wã_‰K.1^›è'RQ}.ÈÄí|,•¾,Ë1{¶œTæçq;Xû>F«{‡>ØOø‰ì¼rMäŒÆµ{œX G+Âó{¼€nôàä 4>�ô§N£äÞ &u¥_SߦŒÙI;r1µÕ`}!@ÅŽÜI& +#aî†A¹ë®n{(®‚‰¥‹T¬·þšÌI¡ôb+³î«4#§.Œ ÆB¥FÜêQ�š2ˆ»kóC }Ôm× o>ŸÕ}øÄ\ŽmmX=Ýî¶÷‰ïÊ5öpOÒ¯| §·Ôxp[Áå¡ÄM1’<aÞÐfj©T½N€¨°«ô²µ�Æè~º|((<ˆC|—Š‡ NÜ- ÍhÍ5¼Qr¬£ãJKæ904îúƒvÞMä§�ú½kñLfHãq(†GôE_GŽs–bܘ!PƼvÌ€†ÁÙ!ê×Ñêd~L)Ê߇Q;’@%Í¢¥|fUŸ¤N5 Öï¦UQ'gEÏ?i~Žäè¤÷°NÛ«0gl^è—Çd£Ôû¡—„z!ÕÀ~¼(fºúÉirÅŠ&ÓÚ½ÏV,ÏþkZÔÀŒ×v“¶Žgs¶gô×CëÊ‹™<å'a0›F þ˜°/,sÐ?õm‚e[�ÇÝÜÀ”Úí0~“Y�D%¾ŠÌÁ +¸·¢‡è·‘ õ�å®õÀé?ÏŒ&¡‹ÂœÝÔë‡YôØ«çaîz€ˆÎ€™²ZîNÙ®7ÒªXôTàßÓíô5º#e ë p8ú‰òrÇÀ ýÙR¦JúÚ)èË"läìe0NCVcäE]BuÉômœž’>Í@Q¸‘Ë;²$‹/˜u+˜Cu )%g! yûú£ÖÛHö´ÞeëZ–qBuH‡Ï€6þŸ›XÇ…KPçzQÑ€n/ï\&î[hT4™ûÖ#ùŽŽòã¼ú‹´³õ~³½\í³G5\ãÿ÷ÿþ¿ò1–Ì7—Ùùû|âgf÷›…õåÊI¼×™,L.×{8áý,TnéwAZÝq²¿ñ 3ˆ Hòæ-çb#¤ + G)ãõ§&ºs0Vû.j +„ÿAÎ-Ñ;3Õˆ¯¹zשbÿ?žRç¶JéÓ…ãþó1b6¨Ä˜3Üã*$Kÿyü`Aðȹ’ÅÀ…öÖ¡e.tðGíIÇ"‹4Õý +>wEšƒ“ \ÔÏäx–ÍÁŸ~êgŒðøÃðg‰~¹ÞùàÏõ3ê©GpaTCب§üó ®LAøHÓ´Áµ‚k3|I]Më6_¸²~Á¯“@ŠÔð'ÕPÐmpa觩øâ|‚?ð§-9Œðbþx]1|5=S?©¾xAËH×îñ,)ƒà€p8®ÀÌGÕ©@âµ…°™ˆ9låhýtÂ6fƃäTëëÁ`]"#†É(b‚•š"¾%ªAVx"Kñ„¶çCÇM¬úŸÿ€©uŽdn½$ë¶NO"¶˜cµYîã¡ÒÁ¿ÔÃÁk|3ƒgÞt雜§Ú3 F élQ7Á×àvtÓ‚Û›õý]µŽNižd«Öº)n‰UjaÑÿ²céX§[Vça},éÐ8a{ŒöåihI„6Á¤þÐ6§c}rÛøæÖÈ©³ŽqXéµøÂåt®ßœÀ"²¼Í$["Éüˆf|@0hÅ»-ÉBê‹$´·ÙþãØäòˆ%t=» +ís>&¬g9¿ªt@¦…ìP�º“ÝïTŒrÐ9òߧ{×ÂÖôÌ”€p·Þ¢ùŽ0§KÌæô(½ZU@3‰m]º)OLzpz¨+9€¹p�å±$þŽbg2*‹O$bÅbH8¤ôXþ‡âáÿ fC4ŽÙQÏ3?’h9ÏžãÎ]a;ÕÌX™Ì5bújŸ³Ïk¦xœWð3cø¬ú²eÛZ€ò¸ôÀG6ÈÛˆQë>DcM|!ZÜ2Etn0uõÁ’ð¾Á‡¦cxÛCLÉÚ1çývÄRQÇksØDlýäbŸÚLˆc¹"è®\A°‹{š«!n qé9„´j†ˆO¤H Þ”3ƒøÈñÏf`„ ¾åFB¡\ 7ƒK$²Ç,HÌgN ñžf„$õg-’*Ÿ"HFwì#ÙÒQƒäm·(R˜èFÈWØbBÊz2‹T¦Ñ5RËHm7æíG´Ö$ÒW�K¿Ýp#ÃʶŒë.+2mVkȼ}Ô"ßóPY&Wd£G3ÈÎ×9!‡’=œfrµâ5’ÜÔšc¬¨ÖÇ4zµqÕn¨-ñ0ª¶]tc5ZœøÕVÜ©tj×/§ö|Œj¿oßW‡“€:rîœÔñUµ¦N óNuvݪýLI]šê궲W7®Íººƒ8ýèVÕ‘zº˜¿ýY\½n��;Íq >–=Y€åjhuí¬Õèá•Æ´ž¶4¶0¢1¢ãѸô„EãÙM.šÀØÿ‰TºšÄW®¤ÉÔД¦ÐÚ5å~Å©©ÿmšŽÆdмGµfRžœ5‹em§ùÁó?*f_¯4}t©U—ÂßZƒ5¾ÔZ†é•õç´.¤±Ózû£“6”?"Úx3h3DÔ¦-ZZ.mÕz j[v_ZÛw4ËÚ‰OÓÓ~ó+íf|¹i×´]‡øoA`«èÛ_åf� +ï×d¯#¯Q‹.ð¥ébèwM—^UVºb>hÒÕÜöˆ®£¾¶uÃí椛ÿ¬IÝÏh\Ö¿g;=2Ÿ8õ†Í¼¢·ëwG½Óöë}e¬§¬£@ÃÓ§Éf^_loöúºÞÔw+é©~‚®úåÂÕÓï-»þf3µúKËf°-mƒ³9°üßËœ†l©67”û¡°¡µ6 ÃÛªhø&;î®›HÈ?C(ˆíßÞ¶‘ô’>cðÇs5&Sþ¶±¤¢±¾¯éýþdfœçŽã6†’Æk,¯6b‹™É·”MîB!d +/vSú”¸˜ÊöÍÜÔÎÅ[¦ñɛ֡:Àb:m=.³.q²˜íúžÆL's8ãܘ3„va®èsç°š§ÛIß¼YzæëaÔ³˜LË÷FF=µ$Æè·åËšØZZÅöÙ2Q_t–Ÿ¢Çn¹ª«n•ÎjibV<•ý²l‡ž5yI¥ÙEcíÊ„u6&’ÖÝtÓ²©÷õͦYlnŸ-j‹~Z¶üöû`kºú„mÜom{ue»-»¨Ýëí¤~ºµGVG€Åžo[öf! µOòŒ}›ÛoêpتթÃ3׸ñ[fè(ù®„£ÛÈ €]ŽSy8EÆh�%š vMRhîZÖ Íe¢…N+„ݼ˜.kV7†}™X°fZaÙ ZÄ7ŽM±øÛgÊM\wZGq<h°à¡Cr‹çãÃÞ6ÛÓ8ÐüÜø© 1¦DmONÓ˜ˆ»Æ ¢ìŽãÛ«?…¥Ç©n•P•Îé¸Æ-Î`Àwæ:µ³mÖ^‹Žöâ¼Ú‹Ë²1_]Þ–[íJÇã:WÃQ2¹f¶%ê:YÍnÒlŽ…I6Ω˜£FÖ«µ9Ý·äÉÛÑ»Í}'éöšæ@¿w§‡ù¶»Â7îùù`v_æpm)–Zž@&sôäã1§§òyÖùÈWSŠà^|‘/{cúæÑ[I®ÞñBæ»'`õ™×ŠÏ—R#@f…Ó¾ÎbuôëÁ°"´ùíÁSþDÂpñ׃‚ÞÊü× Ú + F+‰ÿ¬åÕ,˜xú¦Àé»;ÚÂx0dž›‚_“Õ,8jjóÁcÎE„¬éü9LL¡¯¼9u‹`ôCÇõQ¶Ùâ›pèë<—Ž…rx’²&ÂçãÄq”ÒŽHÔM"5£‰Ìw›c6QbÒ[G“óÎ2ÚZ¶¾£?†É +Ø›Ÿ˜·rÛÅòGôÆÒšØñ<³¨tqû—™ˆGñB(^»^sñïiº™Ð¶oó„»ôuIäJv{bÐZEÇq±–tèCëdÌc6%}$š\›w”¡õsIù+oêk±i¤¦¥ë%øLÁ´Ë榳¦/€%=ÐÍŠé“ÅtÎ Þ|<“(Ÿ7™ö*ÊìÌÛeÖZχ²Q“é'ÛèÍâÙoúœ3Ýð¯\h¡±äjõÕ ·j.Byc©wÉ»Ãf¾º˜x¼\_FϹSŽð˜JW¨¢æªÙû)š0¤Ycñb½±Æ‹?1?òeq/W_Q2Ùûj¹4__»@?Q²SþRbˆâ¥žúf-’C_M4ål¸+®Ãk|ß*žÔA])y:•®òm!MU££ŒVÃÄ»Úô8ÂÕÝW#Ws,ôZÚQÖ†%Ó±Ž¨û–º§ÔË>c©¾¼~OæYSÓˆõò¾F·©4Îuÿ¦é±fq*6¿õÉŸ–)Vsªtèò»ÑêztêÖù;”l“™ÁO»d1úÛËMqÖ±ŒµîNbИv=ÜÓE&ëï®oUwëVß¡»Kš +=ìûbîå‰å°7NC}Sp†ôãºu·ßŸCd`׫tÿ—o:hTj…Á¡¾uR3,!ÝïáÚmnŒìFr”5bîѬ½²ŒMÎìmßc›ñ°wM´ÙiŽ4[“n¤\›Ü²åÊÔ_-—§Íy³<=›§Õ™çëÚTéfµÖ›òÙÉœ´.æ•zžïš=Ó™C]‹r°[lãþê7‘9;Köí{ó!–Nd—¥š~´Ü\ÈŠ¨ìý«²c×\m7çóÚÙ7ùו†¯·Þ€öùC–gÙŸZß²û9.³ÁW¿oš‰¨{sù9N¶dųíÜ°ÅNÝÞ…v‘@m·â©ÜÞ`ôöIÖßÏhð`uÛ¯‡\†hVÓPàˆ£%ͱ\’SéNžqÈuje'ê3BØçˆ}Ð<ÌîôŤûöòLú'3üa׳‡å«îÖö“£ Ýîé•ÕáeÖsö`ž'#Þ=CÞQr?¿·�"†71l[,×{x‚Íý™ŠJSäÞµ¢-!×Øm 7§Ôa)Ú,áÕ•€W¸3Pñìƒ +{E=ðáú5–øö¦70e’øF;!ö)n VÉb"2AÄæ0Tj m@gïzëj ¿N}óÕk±@lhGÁŽ‘BïB⦊ó‚_Š q‰3\‡ˆ˜‡ð�Ûs×¥²a(Òã)š-â*ÝÛiÔzüÊEòÞKÈ“ ´ì©C×ÙLžû]4ÑMuê©`48ÃÌQ÷žÁBh+–¸Í\ø +¤Twé[׫{z©p9Ÿý—:@bÍ¢gîÆ£eOêÚć iÏõ…¹ô�{ —�€í¹YBiDOuœ—ÄÆî¸xÒNÏÉÿ~¦·àëN‚´ûq¤i÷ÐåËí¢H‡Ú/ #Ð>’ë|Z'Ž4€ÏLwGZÆúN5î3?E{1X‹6 ¤®•qbè$Å‘:M}K�_Š÷X@²jÇmA¬¯h*–H %5ÚýÙ”@Ú¢©ï¯Ú)•©Ê¢M#=–ÕE‘¦3x]’¼x7TSH/N“ü1mNîßBˆÖô<ªÆÑÛb&€Ôyxb¥c– R—k7:>>8™F;:VûºÒÈ„t§´˜(Òax\•BšQé´„Ñßïk�\4«EUi%n +´»‚R‹ë=‚qá³’9ܔđ:;4åE¿D‘ªSK·¶ºÃKbHU:45¤$úJjt›}1.…t‚¦ã¦8Ò45,Œî…Æúò |ÕXÃÒŽÍ( pøËdÈ›ìoR<¤Ý�ZpÛ0ˆÔ,@ªÒ]ԙŬNl8@ë> +ù·ÐëN$’÷fžJ!M EóÀK!…<&èköä‹üœ¿ª¢Hk~!‰4¿¨¨R(ù=Z™Ôb}½¨ó™ÅW¯k2Š"möKI¤µUe<¥‹ê©¯½4ÚÌâH„®‘Š‚âH9µR “!Úæ(¾J¸WB[á|Bi1” +ƒ(ÒAi“¥Âõ幯?×<%´ïA—Mé×ÏqWòzR€…B;ÊÚö’>ëjDi§&×»œ(RÏ—MD6 Ç�ZßI8in#÷ˆA:%L‚Icê&f +)n3üžÐ±Ù…H¤�DÀþœîB?x"½ôAé5lôéOz&i¬ƒeù‚Ðz¾4BÀÐÚŸ¥RÖFõ _ŸDaFMÒHÃXÞ&„Ö£ó‹^i/ž§B,Zíù<™î!RT€ô|Ž.wþÍ!¤×Yi¾Š]@^õa1®«ýa1‘üFeúáÁ'ù´SÁvM©§+43ÖÝOŸ$?½ ½Ä×`ô–ø½]?·à)éÁFuæéeãyš•ä~¥n‹=§…b9ëëK>õàæêXúéj24°{~ÅõÝ™äÓ‚eÆ¥ŸNKßþÇSÅHMI=›f$¾ödô™@ãB?ý6œ¼‚o–õ]9ýÆÔ¾'Š5¦¹Ú^ì9-å–ÍYòiK7u ÒOû _ðN1‘çcÝЕ|ús-3’O7M<Vy<}¢Øn“ + ¥¾Mªø]’Os¸3Ô–¦˜n¶ŸÖ +R_ë}¶o–|šŒ§É§9<¬Æ¤)EpÉ'ñÔ•A“Aó½Ï>£_ðÔR¯\ÂÌÓ¸= œ•™ú8mŽ>ž;/Nk•oÅѹ¡gäÏX·…OŒ9š¹hÑ;\¾è+žÃ¯ZhaÆ[ÎÛæOþ±Ã{)Äš¨ÆáŸe¿±Ö-#|“jì.ùÎjÜ,Ûyìž>ÒðanGÍ hépf„£èـ۾ѪÖ|ߟƱNM@:©“çÛØnã‰Û³Z¥{ ¥, ¤¤Ú9=q¤ÎNW)XD~0>Æí+eéH"…KÞL +霋ÔY62ç+Vã ëõšRJûg‘òBíŸíizËCjêPÖ+-ÀA\)¥ýK ö Ðþ‡¤ /¼¾$‘_œÒH¡ö/‰T¥ƒúÿJ¼¯Ä.‡´`DJé¤pîóÐB¢ÎÕ…÷ŽžºbÂïÎwJÞÞv{îÜ—x“Ôœ†Évéå{®ÃwŒ´ˆ>÷£Œ´|šºcãR§ÊqЄR·3#\ôµˆ`Æ;ÖŸõñ't4Î댱em¦À‘…h¤@„¼íÕŠ7ÝK�Á5IBÌÄC41èCIóÇZ<0(øŽ€Õ-A{@ç‚Gú%÷ ˆ½˜cµHèØ?U®ÆÌøÌJìË ˆ%Ííî8f|J É2¸¡‡ +íÍ|§·3â˜Óƒ²žO@ÖãŒæ\:õ2d‹o%‰5jãÍ +ÅmÒèf�¬[´â†0Êñ£ ÜÉ´ÜbùWD‡˜ÆÓƼHÿˆdÿTºG©?’#x¿šúõøiØþ™ë!T^2ÄR>~Š?iËB!±d€aæØOJ”J »ß‰å·½ÅY¾âÈ4g¥û§÷)/Jw ÜtNþ˜òx¬ëÍÉÓ]%M,¾è1=‹ža’/zIÑ£zźÉ~öÌ% Ûdõ´è§Ý0 u†Àí±&ô†vØ^œv")¶¥f%åíZGý~׸«Õ9"ܬ_‘:×3» ¢ IX½â®bœ^-Êv=3úOb4 °4ouHLÂ�Þæ\›C[vrù|l҃ƵÃd=b!Cµöóÿ’0¨ô*½:X‚wÎáp2åÔ†)&Š¢;g—Çü<ï&)¥óN~Öµr¢nßdÇRƒY˜þéY8›Ol$£1™N@1î€Â?`@ŽègÞ�ýc¥à3o”*l“8í¢úrM‹¶,”ž^¤:A׆ãI{’‡ÅW´<É<ýJS*z6ž‹J'¹0)Ð/m¦w•\–TºwÆ7 i’y_{›ûó4_N‹«xx,¼2Mº†s’ke©Ê´G‰Jš$Ð݇N¥S6‚ÀÊ—U,^éü¼Üëd‹7Æ/]Þ=@Ñœü°Ú^A»àiJ€ñ”wÛußáe€uä˜w:ÉÕê>¦Øèü‡ãK´7ÛuäûaÆîó“áz ]~©óö_@{2bÆ ”B+º@ã±ö +y!Ç8 +¶ø¬¼†Õ6+cí“ö=C™Þ}ÉÜ2)<h-ñ÷©ÓQ땬n)¤NèÂ.Ë/ÝâŠaF DçËëa +]äM<ACN~nÊ) ¨!Ýòw4y1í9 ¡md‹ÄµÌ@×uï ›œÞ”ä±±=øà2µsÚà*y>ù §ÐFT|HL¬¼Ú¡Ò½Ó(Í/�_ZÂ)7¸êä—e¥ û�Jí}éþ\¥Œè<]áµ?C¨É?|}?Y¸©×ú¦J\±äà’~H^,œ¨á#a“Þ_Jù“Ù±’#–ò).iöPV Ö›SœG,vŠS_ZïÆÁŸà9Øþµº_{—�ת•yHä| 9¡KVØ9—¬ÀC²Ëñ5x £øµKt3‘˜ÑÛM’ƒq E¥î ÖJ6%wã/Ë¿po�>8áT‡¨H•§ÑR>V‚5UÂï£ÒÉyév9¸¹ÛùÈïÉòÚ×'þHR'sä&ÏÓpä©Ò‘›P•| íLdd²eR9/T¥ß¡QíÑÉ·G©7ÜGpl±·Â¼@þÝ|ñULò]{ÍçùÇâÇ®/¿ðFóÂuOªC*§Þá/z¿�á†Î¥z1æÊ3zá¤W –:)]PG°Ð½Z‡¸º,ÝÎR7«Üø Ø+pO 3HÎ:'ÇA{ìïù¼ŸûÜ®‰vü]QÅ[�˜”¿UÌÛJ[RþVìÉ'n/I£Ò}¼IAšü’§R‡oH¾×fOœ†ó餡°ÖäÊ]&¿çýuµ÷E€ñvß[DùûƒJ»°ùgœ +Sý“†8|ªÒ½ž† +–·¿½Ç'¡DÀXN³"RrÔO߉·Š %Úecz’h—pODõÄa"§O%Zã!ÑîÖë;¼Øk‰¦R¸ƒý^¢±³2Ý<üD£&&ÑÞžû�ÎûíÉwAÃù\¢A(Ÿï½Rpdvƒ¬1#»‹ãPéÄ´Þ"Ô<ÈYÐÜCqÅiòã-Íóä‡÷>Ý€½¯/߆“´R¨™ÅÁ</]Å&3íOÌ`Mä-!«ÒIŠÙ_F?ð's“²¥y–øo0j‚ &) óŽ2Õ^ +å‡p> HÔ‚÷×pø›î +ÝË"» °¿ðUÓk!èŸjüÕܵ}¢ßs˜t¢®^>¶øÚ-¥Þ,ŽïBr5l½¥ßËû`!°ÏõûþIl-|wƒ£ö¾Këyƒp>Ñï9Pصð÷«GD¿ƒÂZ¯p”®†òk!%aú§WCÞZ8îSXÀÝ? G‚òG4‹Y+yÁS0I]`t–.) +vßÚíO|Õ??�öéìæ´KdnËÇZËPL‘º{IˆEÊ"ciW4ÏevO〞M‡ŒçJA8 I’AÅö¼œ^Â…)n·=-Kq»C‘]©`aÂcí¹dxžtäš„½Z†+#¥‚É5½ü]´-�&¹wÃz{”Ô`„ÖŸ/ü…‡PÌýžŠ!ƒGrdW䃥ILöŽlð-ͪ»ÿ^Q£rÄÓäbVdzê>Ö³«¸µ,˜1 ²å.KĶ¯Œày†IÄ%†0o.)–AGŸÜòyw{Î dý:‡N>ƒŽ’ÉC'‰”Ê “Ì|3‡N>ƒŽ›-øI|Oëû ‡N>ƒŽ—-øA|L¶à[9tòtT¶àäÐÉ¿ÇäVœC÷4qyt¬eña|¥½Î¡ã$Ëd˜• )1m[:^:Hì¢ I¢žÞÄëÀm³²|©”ÀFþu0lB¨ýŠ8”zz{ þjÿÞÐqöø€_ÓÉoæ±+?W”]ãJ’Á?‹æ+' +O˜|–²þQ¾¾W™sŠû'ð\=ÏåDw¼ß$‰ÌÇž+¹&‰¥ÌÁ¾¼•4§HÖ$¡ Øž÷¨®o…‚Ðñc¢Á ﻥœÆÔÉ`û«:6|×T +“Ýø‘ï:)Ncþ©Ç˜Nv“Ú¶á[I¯’ݤíSù Ž´LʃðLÓWfHRÍÀËVŒ‚…=ïØLñÓ«ÌGe2k’zËè¥f¥”Ù;%¤C(ßJ1¥rߊ +³_Ûö€Xb{Ù¬>öì:{å8ÜxŽ7 ø¶!4û‹«´¤Ú%™ÆÑ”„y`/Õ.Åy|·W1ðoäñM_å¿hxN+éÔ4é$yUú9Þ\i¤KÑ”¿—1ðŠ£æi¾Stü”æñyίrbä˜ýY†èù±ó!•™ò°×¯œb|ë‡{™&ª¼“‰ö+Šñ¿x¬Ý±ñ2‚Àz‘L.eºì“Ï÷ÙÌb§zUÜo)Ÿ/'�!`£æ¯È" ÆøƒÆ²³;£ÀØc-¾ÆÞ2£ØØ“ ŒQüˆWG£€qfOÕP–*÷«¡¯×—»J#>-`ŠÛk'ƒJÖ% ³Ò$Œ¸'¶—Ë‘S½HsV°åIuHþÈÕ“y%£Gú.O¡üÆÄUÉ9;#Rœü“}Ͻ#b*ÑšÒ‹¹'©#u]Í¡e•ÎøÇ|—ÔÇ~²ï¹w¤Óì„D¿¦Óê…§A%0%¤YàM¯I¼|dÐ(ü÷‡L“ø“ùõ*&C'§Ò&ÉG§¿NŠ“k’ðì»ÀÿK§$ý…G&Gyd>ŒRš°VG†Ùã{‘ž£õÙõŸxd8ö~îs�`”‰îx# í7™§lÁÏ=20 Mà‘‘ÊH}•Ÿç|Ë##êçÏ)HÏQ–œSôÀ„{ÍÉÊÂ÷`©”¯,çʲtܸe™7,Ì Ÿ“xÌÿM$_Åð7NÐ5ŸñEL¯’4´_°sט@&í]z#}ì)tA4[ðU^ÝÛA³ÏªT^Âx=Ù¼:Nê¨L¦ðk'h^ö*Îìåè–²¡zåç³Há=…Ý=ç]*0éoòá –¿ˆ©“χ{ÿü±ßäÉEA—w÷AžÅùprª—½ÖÎ@ùp"'‚J&qý>Ž uÿÆð×ùpÂsG錸¿Î‡{yJÀŸäÃñv¬„Zþ.Nh‹ImëÀL¶Ï3ëá÷g1‘�?&RJ·TÙ<(Š‰|5÷/âS5 NH|žNÁ±¾}…p”ä‘HB¡õ1 +Îdr=E2ÈÄÀ¿–h0¹NÚ!öïÌ©e#ñl8™Ÿ"ž §!˜„’Þžvó“iøH>âx>†�˜ì±2brLrvŽJ§¡Œ6éýž½(Êhs0ç½é#‘àüI"d¡l{ GúH`‰Ó´¤Â¬Ÿ~yß+-8Ñd}öaÁä3ùƒ^ÔlF*¦þm€§ÏRÿ*#u¢)H"U˜‘:QO•¸^¤úýIFjÿô7©Î_d¤Â|±Ï3R!”¿ÈH…p”-0‰Åâú¨ "}hêÛAF&3úüiØþx +RáÄåØ_§ÂQñü²=‘ +':.ž +÷{¿%Ÿbò¶ûvå©pÜ3ˆ¨d¸ÿJ*œˆWá¿ +'îShŸuäC®(àžŸ,—ø´’ŒUUr"<_‹Û_˜EJ½ (—"¢2&}²Ý›:ÌÓ!Ãïn.p²Ñ; +·päNç¢\lÉ{`yÜ,Ì«ëK‡#\îÞQ‘åá1aÕ8«>f¨—¡Ò*½mNF Íü–Lyµ‘aª*'#Ž«HþT=ìîPeÃÝä9Íõ\<fŸÅã1G!¨ïË‘nËo2ãqâçb‰eA+‰ÉQêIçy*¾2—½øÉnþY©Èu>sºVf]�9HeØ9;m¹d·¹C)šªÇä2ìt¥uq"…t,ƒ4mór +s±|–Ç'Lvs¶W¶2¡ Lm”KvÃì¤üz|þT†©ÑœÈ[_*Ù'—u¶“Ï°;Ôë’Hõ…Åj.…t!_¯Ò–Fšüê¥%É«Ýþ‘Ò +?ÃŽU0a™^SWŸû¾ç{ö*ðÞtöŠ :Meú=fé,"Šè×ÝJ +¥n[á‚*ç;VrË×`-{º/¼=¢²þð7©=¯#T…^é:V'Mâì‹É4êUpê«8ÚzýËJrbeGDÎTQà]’«$÷–®—P"ù"’:ò¸¾WEädãú”óÓ‹"r’ý«ûöªØˆÒþ½®5 ˜è¯êŒÎRû ~œòù’^H"’wUZ€NÞÓû›lºßùaÞͦ³îµ8ÿ.›Náù0fÓ‰ù…óåól:±\ºßf>JgÓ‰ùâÅ#í?ɦ㑅™³¢ç}”M'êÅ !¿È¦ûåŠüf6Ø> »VþY6X.×Þÿ›l:±\:…±=odÓ‰ùÚïØÿ.›Nlt)OïŸfÓ‰)7ÜØѿɦ˥“8mþƒlºç&4ÒšÒo³éÄ”S•î¯³éÄÆO$êÃl:!¨—5…•M'¥[þm6rŠ}’M'�%Üÿ£lº_Qìíl:Ù«?˦Ïþël:1��ËgÓ‰í–bàÿ ›NL<ð׿Ȧ{±3òGÙt¯×—¿È¦#ÆCÿ«lºW™\“M'–K'YïsÐö0�yõÅÞ:ºIºŠ×s‘Jam…‰O§“G|çAª–ÍïëÕ=5é +wyþº^´v¡ŒNW‹á-:=¨Ä‹„„9™/…,ÀKPÈz–j” IJE‚êrü©_5 R4ê²ËrM¤”02t’)»,!2á*Æ·ˆÂXî"°ˆ÷ø¢°¹¼gŽ–%Wèîã2wœs®ªä¿)s'Y].¯(WIa™;©L.e‰tŠ$äã“…î>«t稤ʌ¬—JQ™»—EH˜ËÜ1:Œ|¡»ËÜѹo/ +Ý)Û<:æÿàœ+"ÜÀäQyžEþÏB”Žù‡Êýë\е I)JîòÀu/c_ñ'L£ƒÆ³¬^Q"’ˆfÕëCé Åù…�‹LØáAd:’®?>'+«°0kÂ|"xhªdŸÅΆ’ÚïI—w¿LìâEC¦z®8 +€z?¦8 +�SÑ-ØLɾ?É|ü|+V”9œ}…pÕvƒÂ‰ìªýŤ <e²‹f +¿Îe§€)J¬•ª!L¬íŸkkû¿;û“BÆÖ*fܵK’”u1R¾¬÷*Cm~ÞÒ…™xÏÔ²–¸Tõâ²ù“Ìöäã÷5‰gP…Û_U0ÊÒ[ÄŠç~ãBÕR»o°ðÚÇê E.ªó 8pJ� çÓjÕ4”û$;áð½XÕ†‚D†·vxM‘iØTÈ Èÿq…»{~¥T»_LC‘àŠßÖ~¯Â\æãÓðÎhL…»?©”÷2ŸHY¥¼Oó‰ØJyŸOC™ +wü¼$%ù!¿©p'WïÖ¸{¿ÂÒSÍaöÓ牵ýÓCÍ‘²^'Ö`¯Õ•E‡®M÷»ÄZaæ£ëSÿÌ/,Š¦C¿wÎçróéŒçOò9‹¨2[ì%é\XA“êÕ1T¹¼wòÛÅ’˜¸»¢P@XŸ¦¡Ïøb øµîuߦ1)Ib2‡BK”³Š)Icâwò…ïôŠÉ4&ŸQQ†º¬ÙÎÎJŸQɬT’Ädî…Ê÷oíÊö[ILRD°v¢ÌJûžbØfrx?8•_ Š–ØîÐ5 þ"Ç5n—>UÚ/ïV¤{«Ü#EJi}¬ówGSu¨Ý·?ÊqíHMõ¾3½¼UîñE¥<Ç/s\9ó“ ÃPõü:Ç4IqÖ³\Ž+ã‚Qp‹ã»«~0ã-¬'6X<æȵšE®¦Ò%–Z=x[Hp•.SÙ}©v?5Ç !u‚^x(×.ÇwÌ\ñ’ð¾ÂU.R^>œJwÑ4;e®«Š_‡Íïu$òáLÒIxçÛ؇ñe² 5Kåþ‘»jH%áõ%‘‚¾¨SGB²¯hZÓmH"5d§ö¥T6Ó)›Éõ pÙ…sòSÓ.·þQGd9šŒáÞV©J ,¬9ÇKÛsÿ¸äÍÊHIÎù•?|°ÂŒ¸‘Ò´–”Fš®hºbH©ºož/µRˆ´*WG0ß”FšL6R¼È.€VŸ[Ù+& óf:ø£/ñG%ßãæW¢c³/ª�¢Åw¸&Ë$èsÇ)T:ÙÍÆÛÃ_<ã2~bv¡S6 ˆê2Q»A¼*f¯'¬Í�vP˜ØôÒC"’ôZ%Ù$ÈÉÒŠ+ImzØtù«Ê,”C÷Ee¥ž¤„|h•äÐ=Ufjï„ ÉeÝ Nžü +íE„&M%•2~lz½Û?Ök óîÞ®²(Ѥ§(-á|QLô·¢´T:¹FIû‰ßk–ÒqZL{žbcâ*Ù™ù›×Éçš)¿3%�쬂£¯_ø`‡É¿:¼±cC”p¨ IÖ½¬t—g˜üä$ÚGNâÓ‘q¿Jvß²~ë\ëaò—žeþ)š0ðÓChÅΊ“Ì{eµ<Ÿ'c�‰ûÇøA#"[¬“Ô[õ¤%LêÏläIJ(a~»ëM'ÜIÍcjÇêuù:^Ë„~þ×.;ªŸ¤WÅyz + ØxÎïë#µŸÁ¶ôæà{‰dOõ,>(Ë&ŸÉôVŽ•÷s8Mä¿ÌÓr¾ã—Ú8¯IœP}f·š3kßLÜh¤rrϹ’I|UÒøÅø=vÞçé׉:Š™AP×X´ÊÌÀ^UÑ1³ke€ V•Ï(ö2—Gy'ù;—Rìe=·(Vpö%€=¥‹i‡Å~™¨4Pñ9$R bŠr�e¢Ód*Í|ö'¿“¨4{ÂáûY€Js�)¯õ¯³�y¬"ca +ã`ßËTš)öû,À=åå?ÇêÝ,@¥9€¬ü«,@‰&=å�r÷+éö<÷êó¢|Ê+²}R”Ó—ÿbQ¾'¯Â¥(ß«ŠlS”ΑWP>/ʧ҉h…^”ï¹>ò£(Ÿt}ä¿,ʧ¨~å'Eù¸^Ø(R²Q‰^¥KWõûül¨Ü_œ ¥°®Ÿ¢³¡>®ëÇéÚœ %U×ï½8¥ßÖõ“¯ê÷«³¡DêúÉ{…Ä-ñ÷ëú‰3ŸìÙP¿¨ë÷š“ÿ¢®Ÿ|dë¹ú°®ß«L®?rèÊVõSéÞrèJÖõ“ïšÀwñëº~¼†<UõûEѺ~ò‹PýM]?ÑtD¹SÍ•Fq¦¬èYп¨ë'ò»'þa]?Ù….NbP×OÞ-üÖ T2uýäM]Ñ(è_ÔõK“|L½ÏêñýAÎû[uýä¡@?ÿ_Ôõ“ßPQ)†óIâ»0#õ·uýDTMNU?nuôƒº~‚iˆò«úñÎìz;=eëú½Ì{ý“º~òUýXNþ°®Ÿ|À5'#õ£º~ü-1^œsõëº~ò¤4Ø?¨ë'3×.âêñ™å¡(®Ç÷¢œœâz|Õõc¡ˆNŸw³9žêúÉä=¼Œ¶]¼[×O^“‡'üE]?©5¼ù¼“ø»ü-êü}'ñÕ4|U×O~¿™Eðûº~|jÅßÖã{/HCºßL¶ªßçõø”$1½:½á9Vã½R|ÂŒÔÏêúñÛOUý茡Ïëú±©RruE?®ë'¯æHðØÛuýä«ú}|jS×ïC_ŸÂº~ +ò^ÿ ®Ÿ|U¿·ëñý*W -Ÿëúý>žSՃ壺~Ï®dnU?©SÎÞë'Þ%XÅ~]×O>ÐIàSúu]?‘qáTõ“?Ny]¿ßû-ù{?çI®ü ®ßCp‰Uõûuô ®Ÿ,Gp*€|V×O^1¤×ÏëúÉ'Ä2+òÇuýøVõ{ÒÇŸdůë'Ñ:Ì‹“¬ÖõS¤Ã|\×;’Ï82ÙµóS¼®Ÿüâ ›Åùg ±ôºïYºr:Z©!ñ!<WjEŸ¨(X+Á]i×®|འm‘ÇMw{ìÞ„‚Gn<í›bPy+¤ýð ê(-H–ž_<K´p¹oøe…€e%‡Xz_ZÔÑÞ¸é—`>¢-†²vÔ¸G³ÞÑIœW¹Th;ðVf£mg2ÄN14³üŠjN·‰ô's\#:—ÇŸÑK§ªë´éôT:·ËîœyŠ©¶=o?#®BÚ9ŽU7ð¼V$[«úâËujßÚVÔäLü¨ëÕüÆ· ´‹°q¹OºsdO~!¯°AKӤ͚n+MÏyè/|Ìܧr;Cz‰Ø-Â/OMK€0DÐT,CSß³š&õÕóyì5ž/žVö¢’Ó‹kÚ+³™–uKÐakÙ‰‚W}O{ûqœ/ý,6çÕйÕÏ2„—_êïFÞè¬r„5[Ö“¼19)äĈEt÷ª‡ãBhɾRƉaQÖ4»õvv¤ô¸syÓlçÈf’æîÉ¡ÈÍzt~ÁxµâžÊID¢©z]‡jsÊÞ/ø*ûQ0}@×ÊqNÒÜÃßÊékbt‘ºøM¥KtS‹6U@3>HWÛäW|®Ž8®\Äq™ûS^ͦœlEˆ! Û>”Þ6Ûýh†D¦�NótK—Ï4b–¦2v†9S½Šî“£ùVkdI6Ûx:\ÞÚaÒ®•6ëC®Î™²œPÇÕ£FWZ;\vÃý +3R¾c@÷üt›©¬_ p²Gð3h¥$ŒÆ�V±Þ܈Û囹$^ô�°Ô’°ên)c&›Å¬†Õ.9Ûœ¼¨#ä6Q …`æ8æ¯'<Z8&ÚxP¥»?ŠÛðX·¾?Ȳøò\|6mvu'Ì— ˆŒÃKÔöžåñ²J‡¥‡öûÈÆ“>úPxÏÁèG®/fí°YÀáOœ†=êXØýÊôˆA ½bãø`µ¸!d„áV;ýÒŒŒC8‡±Y¦DýdÀκ=Œ«NÊâ(Ö6xZ·ROqé›ß‘Öíw,¨IëAñmM—´zM€;Ц–kï̶ÍOþ#Æå :hfÇWå@ÄšKÀÒðŸÉPÃùuæF8ëb¸©[C(VëôpvàÇ„6§F¦^7Ýæ›{×[ÖÇ€á‰LòtËN“(ÑÍbp!×â‰YÉÅ\m8suë ÝOš&#æ +_º bÔ@ˆ];Ì×8à£m¥¿Ýªì±©Ír[ç´fìŸÿP(Šu쬜rú2n!q¸Òøa˜B5¶µ/ÍÑòì»Èg‘ÚC°›9qÖ9 çø;‰1BwË.îí8¨nz¼á¤ZKèý=s•˜¬Ù÷æ½æ.*lM)^¤[õ,Z÷ *]rj‹´àb âÙ˜¹=’ô\ä«üM`=On²bíYnÞW1(9rÓ7(ŒÉV¬˜‹™¶gxH™‰%Q{ýYn +˨Ž±æ¡Ž¨5±{|@ü3Ýho,ô¨ÆÚÃêب펵º¬'´ÞÝEö#Ç€´¤Á)+øé4QiÎX²?}¬!(¡|ø>ø¦ EJÆNéu0ôÆNy" ‚ž†ŒC§”AEF>Èaìë æY ûñ}@ófZ†Xãº){ÏÊÜk`§ó€7ÜÍL|¼‰ÎyRµ€¢®iDãJÃ؉¤ôäe Ê>€ s –Øõ~ÞÃîêYÁÍP"²Q¯�K®z?Ž;l(Kak€,}kZò¾�‘jSÌJ´†÷´ÃÀxW„j©‚ÖAÇãç§ ]¨]Ž‡ZI݃§TйnŸ�¯Ÿ-\5‡×8�²}«`jŒÌt\_õ +Ìï ‰ÂÞÓ€{žeê»xŽ£jÓjW ”dTžÜh� /4ˆŒ>ÃÕzÏ[à‰Ô�Eü‡é`a²f,ðÊÎÞs°÷À¸Xk'¨œiflßå¬bú‡îkfï*V¿kW@)›j«} 08ÓšÑÌ‚;D7áEµ£a-r„>‰¢Cé™LÝîmã‹kƒ€¥“—˜)o¹Ÿm‘ØÕ? ÐK + µÛ¨iý|è“á{§á.m¿a…—*Íõ½5œ3@ÌôÎÄ”s KS¼;Rvì6¨ä:šC.ðe…"|Ðå’@PºÌø õÄùD˜¾D z[ÌÃ)f5¸Lí\¤Œâ?$°nµýÁýmäàHÒD8Ç:=e|@ÍO1ö y@¥Cœ—žž%B[†à¥w*öÅXIÀ#N©s”çÆW¼½ÄRm€óEI7Fç_vãî!¡ÜŸuc%:± g¥\7Êýãg<]Xi)�¡Œ�Äâ"ß �À¬¥8ù"?x Èë6ÈJ§³š@Q¬³{€@3ÅÎŒûf§Ïòo‡3ðhjáû\Ê»yŒ:ü3[\?�l‘y¬¹ÿÇ:)Sbz~Í ]=ucõ!)˛ۃÇ~¢3R0]Ûwo8ˆ©´ìSÖ†‡”4ÅÞÎêõŒç¶ôå©›G£³¿ Hy§˜ònœ_Ì ±6ðrB›ú3Æîj4¯WdüÒ€@ÍUb:ýíÀ®ÈÓÅé%^´a%1?A8ÒRŽÓÍåSi9Ý_¬D2ëÐôt“oÃki9½!ÜŸ3š÷S¯¹{:3´ ·å¼··±gv‚Ñ·ŽæmÄz:k±]¢•@ðÍÃSÖ†É1ͨxŠÅ5â¡ôRÖ‡3äX“í®O{@ÁŽ‹Î{…V÷È +mÛÝ[Ù¿ÀŸ¬.c`¯Œ´a·¸l 6ž¡í]¸ño¥¬nægÜn§Íí{L/´°Ysœ7±»Ùë4²ÎD×y齲ν¼…û `a݆yÏ£hºYLþo@hýËè_ {†qQ¤ƒæÇ=®w4·rð¼£é¬:‡Ì€v}mk.?€wÒUŒúI„øYŽ<`·E9EQÛì…EŒ2à> ´ + µ—Îp¾”KèÛ°'-øÙ Àši—ˆ£Ü#XϤÅÒ4ð© °¥¥Sx¸nÇw,c@c²kK8&½o¹74TºT éüá¸×iç{º]án¿ß÷àÙÝ"/hã>.Q§ôâý¤K +¢)ç©x=éTÄ°¨'²ó ÂXÕ6vg•:×ágÚŽÀZÉxˆ:'Ûõ Àrõ26-Q.+ã^Ÿ6Œ“wÚF±i!kW=ŒñGM‡xÈ›ÅÁXM'Äýjî¤=ðVfh7U +¢Ú"?Ûw§Ü¦‡Þ¯†n›â†p!Ä´f3'8†1bü’Å“ŽíËfGRVóÿbhúŽ¯ÈT)¶õh<bžºC?tÄöÃUsmÛY¤3*â2Ëuˆbi,bWì~5¸€gŒéúã|jëÚL™M!¿»iSSã¢ÎK;Cõ£‹Í¥-.jîHf.¶Q e¤Êûß÷²{Ã?ø¾wPì¼¾WþÁ÷½ƒbïúß÷ÒœüžëŒþŸÊí%\ÿ¨?Žêm»8—ÎëåzÿϪò«Ñ,†5öóCê¼XÔÿûš8Ìn»ÅþúÏ÷ÏųY+±˜æ‹T0“kìfņáV†¿¹[Ú<#å,%¾½éMFS Nßh'Ä™´–r¬Ÿëê'TËÌNª=ÄŠ§jˆ1s±ÂŸz•§‰$º±JI%³&±8ÇnIK±ÐìPÎ︞ËC²[T#ŽË2àÈD»ùD7Õ¬EWôpwÂýL^ô�g×[d“(2W=b +|9›ÃЄ›å ÐmÂã@¬¦HÞÍ!–Šúöï>#¶(1‡ZC1Ÿ4@-›œ<\Q¡Ç-Ì”{,u©Ñè>Üå%fUôþ1f].CÔ¶#/áô£v2îÓÏAý„!FæêgA)&F0œ` ™Œ…ùé3ÚhE†v:Ãbß ßõ>“³èc÷‘+ÇßØÊ|ldªt’[™« ô6ð‹û¿ &PayŒ¢ðßST:ùeýoÔÚµâ/Õ è°ŠÂOM€ŠÎ]Qøï© /¬¢ðßS8óeößSTº‡¢ Tä#B˜(Ä‚Ojq`Ä¿yºASjõL©æ0 „b«˜¾ºFFnÞ|e(R3@–†ëˆi½ !¶}¥e©®Z¡yEX°C‹:0i¢FjÂ=65kGæ¥ÉÉvüpl¬†¶þ€´´0Òî°p¤%³”pCPÃ¥eÜn¥NŸÆ·@Ö±n_í´â±¶ú,TØcÉœXÒ9°»¾ò‚ч�‹ûü´0S@ W©h RaËŒp;cÛª÷)¾ñ…>t®±—ö™ o)e„R@=ôn>–n=¬Ã¨Dé¥RìËÎh$Úˆ#‘P�§„Ò“#±Ó œðÇÂÉêaÃX;‘@˜?V_ŠŸ4ØýAIU:,-9t 6ayôþ¢»¿8óäû‹r5²þ³KùiÑiNÛ™è}»-x¸—nâm„ÚŠ Üèí¼PRƒèbÚÄÄLÿ´“sp�`©v£6|™€fÚN§TvÇ:ÔHRÊd´Åç÷{ÍÓý^çìX—ö–G År<uŸqðÝŽJ]~”ƒbö=™ãõÍ‘–yrß‚¤ôhf÷M¥nBR§¢ÿ~Ò$¶û]BŠ÷ß°]uÏñN„Á!µ+ÌÁéx¶fÃÙ‚¤NÒ“"ÁÝ…ömöw"˜[¶·¢ƒ×Çö¼r·+‡Â¾òUÁV4b(¶Í$ÓT¤öÅXIf7›I‰�Àè+äÆ'TQ7em CsžAP©>éÀŸRœ-í7ºÑð9Þ +xž•VïÕü OC“Ú"�ÀPL)% n{Õç}n’f=ÆQÑn($%¡Ä(�u:³°¥<T:ðpâ¼ Ì~óf곈ý`ø|22|Èc@A1~Æc§ý@’ÇdA#è§<fX?ã1to’à1Å +ëKá :Á籡ÛþÉh�{>è�xL)ˆtAýzºŠ`ÂX¡Â§Xö‰·ah'%lu(ùËÑ� +æË/×Ä|ô}6P«•'%µ¾Èu#cK½77žÚ@0¨072á*þ¢ çã¬ÈçÕÞp@L‡ºÏÖ€éÒb¹¯È²iÓf*A˜¹/lÅLë¶}Ä3[ÐþYpâ’mx––³p6Ìý™)E¸?+(êÂŒ”Fù(VFµÕcCfÎDØ2j'n“t!>ÈQ ´‡Á¹;žèÜŽÖ.i¡ Ï‚Iòÿ$ÓBAžè/Ó‚õž~¶‹)ØÃäc9Æ—ì#Á�ô·~™¹÷FváËÊ}°t² д&c@ÑöPš@Ƨ¶ ÔĆ?+\Ø`¢AÊV;p¼1M¬Ej3=™ò]ÅÁd\„³´?¹Â€D%8NÉÌèÌìG›lNÈœuw—/ñ+ˆØ§¼ +œ˜ý§=ÖèÇM™Tàí�n!¢gˆ•Bð±5ẖµ‹ô ëYFk7í:Ù—á6S{ð/>¸ #Œ£3$X¿¥“ç·L„Ý,³´lL’E%ÅPËqgü€=@û´…Ý]Q-jKn=´öÊIHúw$øÙ¥¬$*çbF |—Ýõï¢ìÆͯÀ‡lC—à>Hl´w—äëÞ—.ù»$™ÇaJËÀþ@JèM%HÔøÓiéíFŒº†W8÷ÍâÒ ï9ERl*©q³OX<¦T*YlzîžÐ]L}$äO;ëÔèÒx·R×à/ƒPŽ½áü¥cPõžkð—ŽA•î-×à/ƒÐ« Ð5xø?!•_¥ƒÛ”£ä~ÎÝ¢TétàNmq½á®Ql±\ï“ÿYœUØ?úüÿ‹»à(ü?úÏo¦*#õê?Üô¯°WéFŽèùšXÏ®ëÃ~rþŸ>pûçˆÛÆh¶–jýKþïãá|ýGÖ\_ÖÓíâ_ýð/^«™àöèÈÑ.ÙÄ?ß?öÀöï1t ƒGô{rp¹ð@ÇG*ô_üÛþ_ OÔŸèü,©P¦wàÑÿ€9pñný¯ú¯ø¯7@ÿÍágU•Ëý³¹Üä¿ÊFzéËuI:Á|Ì^0cS€ÇØØï'»Åüßò<™¯á–0i¢ðÙ¼(‡¶ôßØReCí(øîùg#Ôµ^v¯×ëúÇ>t¹ ˆ¯½c> \àæñJ½ìÁ]Ä¿ØìMø1Åð©>ø߀\±˜8#PH¿ÿCjîÿKNšLN'$'M1Ìmw{5]N_PðœN†šqÉÒÕ†¡œWèѸNý‚pãô0‘÷QrÁçЇûÇ s$5fqÄBÞ9ø›uÿˆj" ²íþ¿Ãûrxq;¼N–Àœÿœ¸›¾ àá.fPg*·ÓŽó†”ý„úaÍè!u{©7™@' 🙊ÎßýU¶5³ÿ;h2ƒVˆÑË)X\©%Éf{±¼ÌÒ +Ù§åÕõ_\^]¹¼¢ìÊjdz{'apáñ„Þ´v{©;à_œú·=Q¾;=¤÷]v‚�4Ûqî˜'\`r�~E=ðê±c8ñÏI:ír^& r¹oÁH·p; §ó¢ð5h™°¼Ã줜.»Ç§A¨^/e ßõ�¯¡$ä6/n÷à^¨0ùèñ`;3N vÒåÆ9o)êÁœð;§ÝE`Ä?Ì‹Ù]¤ ôºí^õa‰þ8hh¼B#]vÒI‚ÏÜ ;¤Ûõ6Øã‚“ÜcwcN(ÝÀ¥�Àê_üƒd½nðŽ"ý×Q'À+ûÐOÀív£Ebv·“pÿkªÀ÷(5õ1�îqâ�›÷ 8ŽÙ —äܹÌLÅ»çt‚IFÝñô—@§îx™;$‰c÷ïîo¹Ý|ØÐ�þ¯@æbóxí^P‰m7ãv—óÑ7Âéµ»<`Àã +^ÂîtA x§’ˆ†ºXR:=€©Qþ ·Ó‰ÛIðESõÈH¤‹£y9'Æ× ÅŽ¯qðƒ À@µ’�²€å'æ±;½N.K±·�3²œÇÞ|ð§%ì8b6&à!1°`°ì¦«uBv¿Ï ÊA7îæLtô�^_Þ'Á"`'! ꢔ7U™1âÝ£F’ºã¡×j°ù7Žàߤ‡Šb®gÙ�6%‘QFºÐBHJ@I¨Æ€^Q°ót…ÌÈÞtžÁH/œþÐSŒôpnQó͇½Ià`ŽûXh@Ü€[à½Vö{ôsòÞC Ã17¼€€!ŒÀºp�íº \€ áM'JÚ½8f +¨èr0¦ËŽpíQw3š€ @þxQŠ“Àû@ÈxI0pD½àzÀ§„‡¬@€ÙBð3¢z‹bS'eÈÖ�/wÐxÃ9w8ä¹ßc©V»×Epi-2&qUŠÀø‡¶ÜÞ^[p@9Ž°ð‚&î¸7ÁÜøþá$iG1ÀX 'Äÿ_‹ë4aø úY"Á@Çnb°Â@E7‰¨ ¡¥-¼>ÿ¹µ}V¬JµÄ€„þú.öŸóùs*i°Oj$“¨‡Ã0eø°û˜v¥Oå÷@„yMQã@å‡D¨˜µ©%ž“æåÇ…ÉûdËEúâßØòß¾¯Úâæ¶Ø¾âÐNzÉWº‚Ø<_˜ëBó½)ßF:ð{?Ncæoí9fBŒìp^´´c˜©L<»@½¶±W,ï+t)"K%h¦Fåã„>5ˆ,(amLt°dÎ)öÐà)›œVà³-Wz©Ú’ÆDò•Ö 6ÛÄæÛƒà|ƒþ¡ä¨âôU‘³L<!:€ƒŒ6'm-b_æ¯ZÍ]X%xæ*SÂÚ˜è<`ÉœSì¡ÁS69?.¬Àg[®ôRÉ%‰ä+Al¶9ˆÍ·Áù](¹ÍÊœÝ:F77#Û–j€x¶ÿàðïŸ*íÿ"„’˜ øVÓ¹`ƉfèÞ¡ RÌ´àÕ 373©OÐcEº•¥‰oDS©`Ú);!RD¥¤&j-÷7Ø(T8Åà}ɨ•2IJ°RŠ¨Rä• ´Ç-yZ¬{×LT–tµ¥GŠÃ[ Äž§×IcŒ´7Ö0/†n,›7|ùbØVqo=õ‘¢|îwÃËÜ~ ój·ï†¢ÇéІoüRìæa˜æ¡ØL¿¤ Ä /ˇ§ÇÕ!Xâ endstream endobj 251 0 obj <</Filter/FlateDecode/Length 934>>stream +H‰ÄVKŽ7Ü÷)tiøÓo›I•^ä�NV ` ·OQjµúÙ0œ1螦$J¬"‹z/¿½†—w¯~úù5¿¼ÃëeñútPÈ,ã‰þúüñø=ü}¼¼~ ðx”Ox{`âWLüùv| +¬s’®ArI¥‡Ç_‡Ïø[,1iˆ5aÜüCN¦5”–JïáqDµ$ÔB«©·Š0d81åD…ál©H`îÉÌ|=sKÔ-ðØÑBäš“(ÖI™:ŽÐŒ| ÀIrNEËm œ¬v�$á\é–ªÔÀ¹Ž�=2rL¾Á2€¨P*†]*à£8ÈʈÎØ’•à;`Gk à2æÿõù\pQS}^Z굆®)Õ?X*±–’r>,KÄA5uk—Iã´ù œ)2·…˲Õm=ÃÛ+”Ý6ÈÆw³à¨ÛHRî@¼b‹ä“ìð#èÓIÁ„Y[b®“ƒÈ VÕIÂ$)Š S7"£3% 4,²‘ßž”oå#réIPWÒ"gEWf± +¥–±ÁJ>F4ñ9+äñº:Ëh¯Z•½ÔšŸ7‹12B£.îu–kôz^Xg9G -ºë="d˜ðjˆçŽà…R³çób®|à*W².ëLæe{²iUÒøãxpð¿!Ü-X'£5Щ ºÖb[±Ì(1ñLK +ÐÚ]ÝËfåT‹Kê²ìòŽþ2’Iûs(0©kf EëH¦Û€í¬ÎdÙ’<ˆìv¯i’<É–±„§[vÖ¡šfÎ:µ”¹Î<¢“ôQ ¾y’3ÊÈ°r餷FX<Ü°êúâŽáÊÜ ²Õv¹hˆ_R7‹;_5Ò[>šÂéõJ„n&VßT’—¹ ixµÿ|Ù.:¶W�rs}® N{tó{M®O{ò2™qöiÓrÛà6E_ÌEò÷±ŒÌo0ÚûW`äÌ3” ä†Üaø®Ï0pìÿÁáµ@‘}GûIÁáßF3Kn>ßjlŒRϲá-™ÒÒ§ÌFtŠ³¢ƒ{‘!èOn§zÆMy\Êevfód^ÜP±úsïóFȸԣÿv›š!SåÑ,/É{çE—¼Z‚Hºï®+g¶ñ³ø C£÷϶Ã(õ²Y_Ñîhþ€#ÞÈ*â3Bä<{ 0¨.Œ–7dá-ÿ»ÐǬ÷Ç�®øÍ% endstream endobj 143 0 obj <</BitsPerComponent 8/ColorSpace 144 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 64/Length 677/Width 64>>stream 8;Y9N_3)VX$q5pboO:S*XkZf?Wh9[pEB=P!#Q\rSiNQpYnTp=h^*K5=p=rj61g>-l F3A#,[q#H`\'F?-Z$U8U%nccCHaL0f39.+/YP?=9>12o#eBXraB,*c8hTo4&U/^er krIOKkCXBjK/"UM!erHAW\@9bMD^NIe/=-#<oB^15O\Ae#gbQn&ha#.o1Ao4BV\OH @@ -1073,17 +1044,17 @@ E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn 6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1 VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH< PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name(Layer 2)/Type/OCG/Usage 19 0 R>> endobj 6 0 obj <</Intent 20 0 R/Name(Layer 4)/Type/OCG/Usage 21 0 R>> endobj 7 0 obj <</Intent 22 0 R/Name(Layer 3)/Type/OCG/Usage 23 0 R>> endobj 8 0 obj <</Intent 24 0 R/Name(Layer 5)/Type/OCG/Usage 25 0 R>> endobj 33 0 obj <</Intent 42 0 R/Name(Layer 5)/Type/OCG/Usage 43 0 R>> endobj 51 0 obj <</Intent 60 0 R/Name(Layer 5)/Type/OCG/Usage 61 0 R>> endobj 69 0 obj <</Intent 79 0 R/Name(Layer 2)/Type/OCG/Usage 80 0 R>> endobj 70 0 obj <</Intent 81 0 R/Name(Layer 5)/Type/OCG/Usage 82 0 R>> endobj 90 0 obj <</Intent 100 0 R/Name(Layer 2)/Type/OCG/Usage 101 0 R>> endobj 91 0 obj <</Intent 102 0 R/Name(Layer 5)/Type/OCG/Usage 103 0 R>> endobj 111 0 obj <</Intent 125 0 R/Name(Layer 2)/Type/OCG/Usage 126 0 R>> endobj 112 0 obj <</Intent 127 0 R/Name(Layer 5)/Type/OCG/Usage 128 0 R>> endobj 135 0 obj <</Intent 149 0 R/Name(Layer 2)/Type/OCG/Usage 150 0 R>> endobj 136 0 obj <</Intent 151 0 R/Name(Layer 5)/Type/OCG/Usage 152 0 R>> endobj 159 0 obj <</Intent 172 0 R/Name(Layer 2)/Type/OCG/Usage 173 0 R>> endobj 160 0 obj <</Intent 174 0 R/Name(Layer 5)/Type/OCG/Usage 175 0 R>> endobj 174 0 obj [/View/Design] endobj 175 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 172 0 obj [/View/Design] endobj 173 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 151 0 obj [/View/Design] endobj 152 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 149 0 obj [/View/Design] endobj 150 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 127 0 obj [/View/Design] endobj 128 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 125 0 obj [/View/Design] endobj 126 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 102 0 obj [/View/Design] endobj 103 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 100 0 obj [/View/Design] endobj 101 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 81 0 obj [/View/Design] endobj 82 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 79 0 obj [/View/Design] endobj 80 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 60 0 obj [/View/Design] endobj 61 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 42 0 obj [/View/Design] endobj 43 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 24 0 obj [/View/Design] endobj 25 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 22 0 obj [/View/Design] endobj 23 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 20 0 obj [/View/Design] endobj 21 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 18 0 obj [/View/Design] endobj 19 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 184 0 obj [183 0 R 182 0 R] endobj 203 0 obj <</CreationDate(D:20150714152851-03'00')/Creator(Adobe Illustrator CS6 \(Macintosh\))/ModDate(D:20150811224720-03'00')/Producer(Adobe PDF library 10.01)/Title(Web)>> endobj xref 0 204 0000000004 65535 f +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name(Layer 2)/Type/OCG/Usage 19 0 R>> endobj 6 0 obj <</Intent 20 0 R/Name(Layer 4)/Type/OCG/Usage 21 0 R>> endobj 7 0 obj <</Intent 22 0 R/Name(Layer 3)/Type/OCG/Usage 23 0 R>> endobj 8 0 obj <</Intent 24 0 R/Name(Layer 5)/Type/OCG/Usage 25 0 R>> endobj 33 0 obj <</Intent 42 0 R/Name(Layer 5)/Type/OCG/Usage 43 0 R>> endobj 51 0 obj <</Intent 60 0 R/Name(Layer 5)/Type/OCG/Usage 61 0 R>> endobj 69 0 obj <</Intent 79 0 R/Name(Layer 2)/Type/OCG/Usage 80 0 R>> endobj 70 0 obj <</Intent 81 0 R/Name(Layer 5)/Type/OCG/Usage 82 0 R>> endobj 90 0 obj <</Intent 100 0 R/Name(Layer 2)/Type/OCG/Usage 101 0 R>> endobj 91 0 obj <</Intent 102 0 R/Name(Layer 5)/Type/OCG/Usage 103 0 R>> endobj 111 0 obj <</Intent 125 0 R/Name(Layer 2)/Type/OCG/Usage 126 0 R>> endobj 112 0 obj <</Intent 127 0 R/Name(Layer 5)/Type/OCG/Usage 128 0 R>> endobj 135 0 obj <</Intent 149 0 R/Name(Layer 2)/Type/OCG/Usage 150 0 R>> endobj 136 0 obj <</Intent 151 0 R/Name(Layer 5)/Type/OCG/Usage 152 0 R>> endobj 159 0 obj <</Intent 172 0 R/Name(Layer 2)/Type/OCG/Usage 173 0 R>> endobj 160 0 obj <</Intent 174 0 R/Name(Layer 5)/Type/OCG/Usage 175 0 R>> endobj 182 0 obj <</Intent 194 0 R/Name(Layer 2)/Type/OCG/Usage 195 0 R>> endobj 183 0 obj <</Intent 196 0 R/Name(Layer 5)/Type/OCG/Usage 197 0 R>> endobj 204 0 obj <</Intent 216 0 R/Name(Layer 2)/Type/OCG/Usage 217 0 R>> endobj 205 0 obj <</Intent 218 0 R/Name(Layer 5)/Type/OCG/Usage 219 0 R>> endobj 226 0 obj <</Intent 238 0 R/Name(Layer 2)/Type/OCG/Usage 239 0 R>> endobj 227 0 obj <</Intent 240 0 R/Name(Layer 5)/Type/OCG/Usage 241 0 R>> endobj 240 0 obj [/View/Design] endobj 241 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 238 0 obj [/View/Design] endobj 239 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 218 0 obj [/View/Design] endobj 219 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 216 0 obj [/View/Design] endobj 217 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 196 0 obj [/View/Design] endobj 197 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 194 0 obj [/View/Design] endobj 195 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 174 0 obj [/View/Design] endobj 175 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 172 0 obj [/View/Design] endobj 173 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 151 0 obj [/View/Design] endobj 152 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 149 0 obj [/View/Design] endobj 150 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 127 0 obj [/View/Design] endobj 128 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 125 0 obj [/View/Design] endobj 126 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 102 0 obj [/View/Design] endobj 103 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 100 0 obj [/View/Design] endobj 101 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 81 0 obj [/View/Design] endobj 82 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 79 0 obj [/View/Design] endobj 80 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 60 0 obj [/View/Design] endobj 61 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 42 0 obj [/View/Design] endobj 43 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 24 0 obj [/View/Design] endobj 25 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 22 0 obj [/View/Design] endobj 23 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 20 0 obj [/View/Design] endobj 21 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 18 0 obj [/View/Design] endobj 19 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 250 0 obj [249 0 R 248 0 R] endobj 266 0 obj <</CreationDate(D:20150714152851-03'00')/Creator(Adobe Illustrator CS6 \(Macintosh\))/ModDate(D:20151115140912-02'00')/Producer(Adobe PDF library 10.01)/Title(Web)>> endobj xref 0 267 0000000004 65535 f 0000000016 00000 n -0000000399 00000 n -0000047530 00000 n +0000000495 00000 n +0000048002 00000 n 0000000009 00000 f -0000194280 00000 n -0000194350 00000 n -0000194420 00000 n -0000194490 00000 n +0000172712 00000 n +0000172782 00000 n +0000172852 00000 n +0000172922 00000 n 0000000011 00000 f -0000047590 00000 n +0000048062 00000 n 0000000012 00000 f 0000000013 00000 f 0000000014 00000 f @@ -1091,14 +1062,14 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000016 00000 f 0000000017 00000 f 0000000026 00000 f -0000197190 00000 n -0000197221 00000 n -0000197074 00000 n -0000197105 00000 n -0000196958 00000 n -0000196989 00000 n -0000196842 00000 n -0000196873 00000 n +0000176774 00000 n +0000176805 00000 n +0000176658 00000 n +0000176689 00000 n +0000176542 00000 n +0000176573 00000 n +0000176426 00000 n +0000176457 00000 n 0000000027 00000 f 0000000028 00000 f 0000000029 00000 f @@ -1106,7 +1077,7 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000031 00000 f 0000000032 00000 f 0000000034 00000 f -0000194560 00000 n +0000172992 00000 n 0000000035 00000 f 0000000036 00000 f 0000000037 00000 f @@ -1115,8 +1086,8 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000040 00000 f 0000000041 00000 f 0000000044 00000 f -0000196726 00000 n -0000196757 00000 n +0000176310 00000 n +0000176341 00000 n 0000000045 00000 f 0000000046 00000 f 0000000047 00000 f @@ -1124,7 +1095,7 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000049 00000 f 0000000050 00000 f 0000000052 00000 f -0000194631 00000 n +0000173063 00000 n 0000000053 00000 f 0000000054 00000 f 0000000055 00000 f @@ -1133,8 +1104,8 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000058 00000 f 0000000059 00000 f 0000000062 00000 f -0000196610 00000 n -0000196641 00000 n +0000176194 00000 n +0000176225 00000 n 0000000063 00000 f 0000000064 00000 f 0000000065 00000 f @@ -1142,8 +1113,8 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000067 00000 f 0000000068 00000 f 0000000071 00000 f -0000194702 00000 n -0000194773 00000 n +0000173134 00000 n +0000173205 00000 n 0000000072 00000 f 0000000073 00000 f 0000000074 00000 f @@ -1152,10 +1123,10 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000077 00000 f 0000000078 00000 f 0000000083 00000 f -0000196494 00000 n -0000196525 00000 n -0000196378 00000 n -0000196409 00000 n +0000176078 00000 n +0000176109 00000 n +0000175962 00000 n +0000175993 00000 n 0000000084 00000 f 0000000085 00000 f 0000000086 00000 f @@ -1163,8 +1134,8 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000088 00000 f 0000000089 00000 f 0000000092 00000 f -0000194844 00000 n -0000194917 00000 n +0000173276 00000 n +0000173349 00000 n 0000000093 00000 f 0000000094 00000 f 0000000095 00000 f @@ -1173,10 +1144,10 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000098 00000 f 0000000099 00000 f 0000000104 00000 f -0000196260 00000 n -0000196292 00000 n -0000196142 00000 n -0000196174 00000 n +0000175844 00000 n +0000175876 00000 n +0000175726 00000 n +0000175758 00000 n 0000000105 00000 f 0000000106 00000 f 0000000107 00000 f @@ -1184,8 +1155,8 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000109 00000 f 0000000110 00000 f 0000000113 00000 f -0000194990 00000 n -0000195064 00000 n +0000173422 00000 n +0000173496 00000 n 0000000114 00000 f 0000000115 00000 f 0000000116 00000 f @@ -1198,44 +1169,110 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000123 00000 f 0000000124 00000 f 0000000129 00000 f -0000196024 00000 n -0000196056 00000 n -0000195906 00000 n -0000195938 00000 n +0000175608 00000 n +0000175640 00000 n +0000175490 00000 n +0000175522 00000 n 0000000130 00000 f 0000000131 00000 f 0000000132 00000 f 0000000133 00000 f 0000000134 00000 f 0000000137 00000 f -0000195138 00000 n -0000195212 00000 n +0000173570 00000 n +0000173644 00000 n 0000000138 00000 f 0000000139 00000 f 0000000140 00000 f 0000000141 00000 f 0000000142 00000 f 0000000146 00000 f -0000192896 00000 n -0000193716 00000 n -0000193766 00000 n +0000171328 00000 n +0000172148 00000 n +0000172198 00000 n 0000000147 00000 f 0000000148 00000 f 0000000153 00000 f -0000195788 00000 n -0000195820 00000 n -0000195670 00000 n -0000195702 00000 n +0000175372 00000 n +0000175404 00000 n +0000175254 00000 n +0000175286 00000 n 0000000154 00000 f 0000000155 00000 f 0000000156 00000 f 0000000157 00000 f 0000000158 00000 f +0000000161 00000 f +0000173718 00000 n +0000173792 00000 n +0000000163 00000 f +0000048443 00000 n +0000000164 00000 f +0000000165 00000 f +0000000166 00000 f +0000000167 00000 f +0000000168 00000 f +0000000169 00000 f +0000000170 00000 f +0000000171 00000 f +0000000176 00000 f +0000175136 00000 n +0000175168 00000 n +0000175018 00000 n +0000175050 00000 n +0000000177 00000 f +0000000178 00000 f +0000000179 00000 f +0000000180 00000 f +0000000181 00000 f +0000000184 00000 f +0000173866 00000 n +0000173940 00000 n +0000000185 00000 f +0000000186 00000 f +0000000187 00000 f +0000000188 00000 f +0000000189 00000 f +0000000190 00000 f +0000000191 00000 f +0000000192 00000 f +0000000193 00000 f +0000000198 00000 f +0000174900 00000 n +0000174932 00000 n +0000174782 00000 n +0000174814 00000 n +0000000199 00000 f +0000000200 00000 f +0000000201 00000 f +0000000202 00000 f +0000000203 00000 f +0000000206 00000 f +0000174014 00000 n +0000174088 00000 n +0000000207 00000 f +0000000208 00000 f +0000000209 00000 f +0000000210 00000 f +0000000211 00000 f +0000000212 00000 f +0000000213 00000 f +0000000214 00000 f +0000000215 00000 f +0000000220 00000 f +0000174664 00000 n +0000174696 00000 n +0000174546 00000 n +0000174578 00000 n +0000000221 00000 f +0000000222 00000 f +0000000223 00000 f +0000000224 00000 f +0000000225 00000 f 0000000000 00000 f -0000195286 00000 n -0000195360 00000 n +0000174162 00000 n +0000174236 00000 n 0000000000 00000 f -0000047984 00000 n 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f @@ -1245,36 +1282,33 @@ l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 18 0 R/Name( 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f -0000195552 00000 n -0000195584 00000 n -0000195434 00000 n -0000195466 00000 n +0000174428 00000 n +0000174460 00000 n +0000174310 00000 n +0000174342 00000 n 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f -0000052463 00000 n -0000052537 00000 n -0000197306 00000 n -0000191843 00000 n -0000052961 00000 n -0000049561 00000 n -0000052847 00000 n -0000049415 00000 n -0000048365 00000 n -0000049598 00000 n 0000049814 00000 n -0000049695 00000 n -0000052729 00000 n -0000052761 00000 n -0000052611 00000 n -0000052643 00000 n -0000053037 00000 n -0000053238 00000 n -0000054233 00000 n -0000082884 00000 n -0000148473 00000 n -0000197341 00000 n -trailer <</Size 204/Root 1 0 R/Info 203 0 R/ID[<D66DB9F6794B485686BE511CE008EC9C><1297730D06D3463C93340FE671760224>]>> startxref 197524 %%EOF \ No newline at end of file +0000049888 00000 n +0000176890 00000 n +0000170324 00000 n +0000052998 00000 n +0000050312 00000 n +0000050198 00000 n +0000048811 00000 n +0000050080 00000 n +0000050112 00000 n +0000049962 00000 n +0000049994 00000 n +0000050349 00000 n +0000053074 00000 n +0000053275 00000 n +0000054267 00000 n +0000061334 00000 n +0000126923 00000 n +0000176925 00000 n +trailer <</Size 267/Root 1 0 R/Info 266 0 R/ID[<D66DB9F6794B485686BE511CE008EC9C><F02F34907B944F28AFBF9514F1FFE5CF>]>> startxref 177108 %%EOF \ No newline at end of file diff --git a/server/lib/accounts.coffee b/server/lib/accounts.coffee index 230477775300eb99e2efddb89d1fe3691a5b09d5..eb0878f6cfc0e313fb2041c7f4d138fb0767855d 100644 --- a/server/lib/accounts.coffee +++ b/server/lib/accounts.coffee @@ -27,6 +27,17 @@ Accounts.emailTemplates.resetPassword.text = (user, url) -> url = url.replace Meteor.absoluteUrl(), Meteor.absoluteUrl() + 'login/' verifyEmailText user, url +if RocketChat.settings.get 'Accounts_Enrollment_Email' + Accounts.emailTemplates.enrollAccount.text = (user, url) -> + text = RocketChat.settings.get 'Accounts_Enrollment_Email' + + text = text.replace /\[name\]/g, user.name or '' + text = text.replace /\[fname\]/g, _.strLeft(user.name, ' ') or '' + text = text.replace /\[lname\]/g, _.strRightBack(user.name, ' ') or '' + text = text.replace /\[email\]/g, user.emails?[0]?.address or '' + + return text + Accounts.onCreateUser (options, user) -> # console.log 'onCreateUser ->',JSON.stringify arguments, null, ' ' # console.log 'options ->',JSON.stringify options, null, ' ' diff --git a/server/lib/cordova.coffee b/server/lib/cordova.coffee index 2e74f6fdd62d35ec2aa03e985d50503865fbee9f..c8b966982fd63e10022863193df92510f6729cf5 100644 --- a/server/lib/cordova.coffee +++ b/server/lib/cordova.coffee @@ -12,16 +12,20 @@ Meteor.startup -> send: (userId, notification) -> return RocketChat.authz.hasRole(userId, 'admin') - Push.Configure - apn: - passphrase: RocketChat.settings.get 'Push_apn_passphrase' - keyData: RocketChat.settings.get 'Push_apn_key' - certData: RocketChat.settings.get 'Push_apn_cert' - 'apn-dev': + apn = + passphrase: RocketChat.settings.get 'Push_apn_passphrase' + keyData: RocketChat.settings.get 'Push_apn_key' + certData: RocketChat.settings.get 'Push_apn_cert' + + if RocketChat.settings.get('Push_production') isnt true + apn = passphrase: RocketChat.settings.get 'Push_apn_dev_passphrase' keyData: RocketChat.settings.get 'Push_apn_dev_key' certData: RocketChat.settings.get 'Push_apn_dev_cert' gateway: 'gateway.sandbox.push.apple.com' + + Push.Configure + apn: apn gcm: apiKey: RocketChat.settings.get 'Push_gcm_api_key' projectNumber: RocketChat.settings.get 'Push_gcm_project_number' diff --git a/server/methods/createChannel.coffee b/server/methods/createChannel.coffee index c3dff18c170b06fda7c9a9cec613a466acfb2532..817412e50834369d8d5507e835c26bda4ebb3ab6 100644 --- a/server/methods/createChannel.coffee +++ b/server/methods/createChannel.coffee @@ -14,7 +14,7 @@ Meteor.methods now = new Date() user = Meteor.user() - members.push user.username + members.push user.username if user.username not in members # avoid duplicate names if RocketChat.models.Rooms.findOneByName name diff --git a/server/methods/deleteUser.coffee b/server/methods/deleteUser.coffee index b388826833bf9158390dad05f77f978d4182eb35..c2fd053f6e02e072097a156265a90d8277b197b1 100644 --- a/server/methods/deleteUser.coffee +++ b/server/methods/deleteUser.coffee @@ -18,13 +18,12 @@ Meteor.methods room = RocketChat.models.Rooms.findOneById subscription.rid if room.t isnt 'c' and room.usernames.length is 1 RocketChat.models.Rooms.removeById subscription.rid # Remove non-channel rooms with only 1 user (the one being deleted) + if room.t is 'd' + RocketChat.models.Subscriptions.removeByRoomId subscription.rid + RocketChat.models.Messages.removeByRoomId subscription.rid RocketChat.models.Subscriptions.removeByUserId userId # Remove user subscriptions - - rooms = RocketChat.models.Rooms.findByUserId(userId).fetch() - - RocketChat.models.Rooms.removeByTypeContainingUsername 'd', user.username # Remove direct rooms with the user RocketChat.models.Rooms.removeUsernameFromAll user.username # Remove user from all other rooms RocketChat.models.Users.removeById userId # Remove user from users database diff --git a/server/methods/loadHistory.coffee b/server/methods/loadHistory.coffee index f7058298f3203f4bebef3d385522a0b8f8aee610..921bfae150a9a21e46346007b69a7f1badc27e1f 100644 --- a/server/methods/loadHistory.coffee +++ b/server/methods/loadHistory.coffee @@ -12,7 +12,7 @@ Meteor.methods limit: limit if not RocketChat.settings.get 'Message_ShowEditedStatus' - options.fields = { ets: 0 } + options.fields = { 'editedAt': 0 } if end? records = RocketChat.models.Messages.findVisibleByRoomIdBeforeTimestamp(rid, end, options).fetch() diff --git a/server/methods/loadMissedMessages.coffee b/server/methods/loadMissedMessages.coffee index 7978c0b622453c6e3f47e91c77c6db292691fe6b..e6c201aa77b229b7685c53bdc84114fcf201814e 100644 --- a/server/methods/loadMissedMessages.coffee +++ b/server/methods/loadMissedMessages.coffee @@ -11,6 +11,6 @@ Meteor.methods ts: -1 if not RocketChat.settings.get 'Message_ShowEditedStatus' - options.fields = { ets: 0 } + options.fields = { 'editedAt': 0 } return RocketChat.models.Messages.findVisibleByRoomIdAfterTimestamp(rid, start, options).fetch() diff --git a/server/methods/pinMessage.coffee b/server/methods/pinMessage.coffee deleted file mode 100644 index 727e230fc096ab14659931f8096084e14839f065..0000000000000000000000000000000000000000 --- a/server/methods/pinMessage.coffee +++ /dev/null @@ -1,23 +0,0 @@ -Meteor.methods - pinMessage: (message) -> - if not Meteor.userId() - throw new Meteor.Error('invalid-user', "[methods] pinMessage -> Invalid user") - - if not RocketChat.settings.get 'Message_AllowPinning' - throw new Meteor.Error 'message-pinning-not-allowed', "[methods] pinMessage -> Message pinning not allowed" - - console.log '[methods] pinMessage -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments - - # If we keep history of edits, insert a new message to store history information - if RocketChat.settings.get 'Message_KeepHistory' - RocketChat.models.Messages.cloneAndSaveAsHistoryById message._id - - message.pinned = true - - message = RocketChat.callbacks.run 'beforeSaveMessage', message - - RocketChat.models.Messages.setPinnedByIdAndUserId message._id, Meteor.userId(), message.pinned - - - # Meteor.defer -> - # RocketChat.callbacks.run 'afterSaveMessage', RocketChat.models.Messages.findOneById(message.id) diff --git a/server/methods/registerUser.coffee b/server/methods/registerUser.coffee index ec9baf84f4961ece93a79a937677b122828a1280..4a73cd73167e8c70dc172b4ce376978088a94a3a 100644 --- a/server/methods/registerUser.coffee +++ b/server/methods/registerUser.coffee @@ -10,3 +10,5 @@ Meteor.methods if userData.email Accounts.sendVerificationEmail(userId, userData.email); + + return userId diff --git a/server/methods/unpinMessage.coffee b/server/methods/unpinMessage.coffee deleted file mode 100644 index 5381b5b796a390d92ece86214edd75c62d005957..0000000000000000000000000000000000000000 --- a/server/methods/unpinMessage.coffee +++ /dev/null @@ -1,23 +0,0 @@ -Meteor.methods - unpinMessage: (message) -> - if not Meteor.userId() - throw new Meteor.Error('invalid-user', "[methods] unpinMessage -> Invalid user") - - if not RocketChat.settings.get 'Message_AllowPinning' - throw new Meteor.Error 'message-pinning-not-allowed', "[methods] unpinMessage -> Message pinning not allowed" - - console.log '[methods] unpinMessage -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments - - # If we keep history of edits, insert a new message to store history information - if RocketChat.settings.get 'Message_KeepHistory' - RocketChat.models.Messages.cloneAndSaveAsHistoryById message._id - - message.pinned = false - - message = RocketChat.callbacks.run 'beforeSaveMessage', message - - RocketChat.models.Messages.setPinnedByIdAndUserId message._id, Meteor.userId(), message.pinned - - - # Meteor.defer -> - # RocketChat.callbacks.run 'afterSaveMessage', RocketChat.models.Messages.findOneById(message.id) diff --git a/server/methods/updateMessage.coffee b/server/methods/updateMessage.coffee index dc6b47d9c5343ebe99aa8af91409ee4212710b9d..09ce1aa2d6f58b05aac92e1e35985dddd3079e81 100644 --- a/server/methods/updateMessage.coffee +++ b/server/methods/updateMessage.coffee @@ -12,6 +12,8 @@ Meteor.methods editAllowed = RocketChat.settings.get 'Message_AllowEditing' editOwn = originalMessage?.u?._id is Meteor.userId() + me = RocketChat.models.Users.findOneById Meteor.userId() + unless hasPermission or (editAllowed and editOwn) throw new Meteor.Error 'message-editing-not-allowed', "[methods] updateMessage -> Message editing not allowed" @@ -28,7 +30,10 @@ Meteor.methods if RocketChat.settings.get 'Message_KeepHistory' RocketChat.models.Messages.cloneAndSaveAsHistoryById originalMessage._id - message.ets = new Date() + message.editedAt = new Date() + message.editedBy = + _id: Meteor.userId() + username: me.username if urls = message.msg.match /([A-Za-z]{3,9}):\/\/([-;:&=\+\$,\w]+@{1})?([-A-Za-z0-9\.]+)+:?(\d+)?((\/[-\+=!:~%\/\.@\,\w]+)?\??([-\+=&!:;%@\/\.\,\w]+)?#?([\w]+)?)?/g message.urls = urls.map (url) -> url: url diff --git a/server/restapi/restapi.coffee b/server/restapi/restapi.coffee index 90ba65e19b124ed1a2a935520b835c535a8d863d..55f4c2bea0f10d2314fa52673c0f19062cc2067b 100644 --- a/server/restapi/restapi.coffee +++ b/server/restapi/restapi.coffee @@ -99,23 +99,31 @@ NOTE: remove room is NOT recommended; use Meteor.reset() to clear db and re-se ### Api.addRoute 'bulk/register', authRequired: true, post: - roleRequired: ['testagent', 'adminautomation'] + # restivus 0.8.4 does not support alanning:roles using groups + #roleRequired: ['testagent', 'adminautomation'] action: -> - try - Api.testapiValidateUsers @bodyParams.users - this.response.setTimeout (500 * @bodyParams.users.length) - ids = [] - endCount = @bodyParams.users.length - 1 - for incoming, i in @bodyParams.users - ids[i] = Meteor.call 'registerUser', incoming - Meteor.runAsUser ids[i].uid, () => - Meteor.call 'setUsername', incoming.name - Meteor.call 'joinDefaultChannels' + if RocketChat.authz.hasPermission(@userId, 'bulk-register-user') + try + + Api.testapiValidateUsers @bodyParams.users + this.response.setTimeout (500 * @bodyParams.users.length) + ids = [] + endCount = @bodyParams.users.length - 1 + for incoming, i in @bodyParams.users + ids[i] = {uid: Meteor.call 'registerUser', incoming} + Meteor.runAsUser ids[i].uid, () => + Meteor.call 'setUsername', incoming.name + Meteor.call 'joinDefaultChannels' + + status: 'success', ids: ids + catch e + statusCode: 400 # bad request or other errors + body: status: 'fail', message: e.name + ' :: ' + e.message + else + console.log '[restapi] bulk/register -> '.red, "User does not have 'bulk-register-user' permission" + statusCode: 403 + body: status: 'error', message: 'You do not have permission to do this' - status: 'success', ids: ids - catch e - statusCode: 400 # bad request or other errors - body: status: 'fail', message: e.name + ' :: ' + e.message @@ -136,7 +144,7 @@ Api.testapiValidateRooms = (rooms) -> @apiName createRoom @apiGroup TestAndAdminAutomation @apiVersion 0.0.1 -@apiParam {json} rooms An array of rooms in the body of the POST. +@apiParam {json} rooms An array of rooms in the body of the POST. 'name' is room name, 'members' is array of usernames @apiParamExample {json} POST Request Body example: { 'rooms':[ {'name': 'room1', @@ -163,18 +171,26 @@ NOTE: remove room is NOT recommended; use Meteor.reset() to clear db and re-se ### Api.addRoute 'bulk/createRoom', authRequired: true, post: - roleRequired: ['testagent', 'adminautomation'] + # restivus 0.8.4 does not support alanning:roles using groups + #roleRequired: ['testagent', 'adminautomation'] action: -> - try - this.response.setTimeout (1000 * @bodyParams.rooms.length) - Api.testapiValidateRooms @bodyParams.rooms - ids = [] - Meteor.runAsUser this.userId, () => - (ids[i] = Meteor.call 'createChannel', incoming.name, incoming.members) for incoming,i in @bodyParams.rooms - status: 'success', ids: ids # need to handle error - catch e - statusCode: 400 # bad request or other errors - body: status: 'fail', message: e.name + ' :: ' + e.message + # user must also have create-c permission because + # createChannel method requires it + if RocketChat.authz.hasPermission(@userId, 'bulk-create-c') + try + this.response.setTimeout (1000 * @bodyParams.rooms.length) + Api.testapiValidateRooms @bodyParams.rooms + ids = [] + Meteor.runAsUser this.userId, () => + (ids[i] = Meteor.call 'createChannel', incoming.name, incoming.members) for incoming,i in @bodyParams.rooms + status: 'success', ids: ids # need to handle error + catch e + statusCode: 400 # bad request or other errors + body: status: 'fail', message: e.name + ' :: ' + e.message + else + console.log '[restapi] bulk/createRoom -> '.red, "User does not have 'bulk-create-c' permission" + statusCode: 403 + body: status: 'error', message: 'You do not have permission to do this' diff --git a/server/startup/avatar.coffee b/server/startup/avatar.coffee index a2949af98fd3f0be84b010f2289549c3df67e6f9..387fed26d88ac52dd2d3702548ab60ac3cf80e81 100644 --- a/server/startup/avatar.coffee +++ b/server/startup/avatar.coffee @@ -29,14 +29,15 @@ Meteor.startup -> transformWrite: transformWrite WebApp.connectHandlers.use '/avatar/', (req, res, next) -> - this.params = - username: req.url.replace(/^\//, '').replace(/\?.*$/, '') + params = + username: decodeURIComponent(req.url.replace(/^\//, '').replace(/\?.*$/, '')) - if this.params.username[0] isnt '@' - file = RocketChatFileAvatarInstance.getFileWithReadStream this.params.username + if params.username[0] isnt '@' + file = RocketChatFileAvatarInstance.getFileWithReadStream params.username else - this.params.username = this.params.username.replace '@', '' + params.username = params.username.replace '@', '' + #console.log "[avatar] checking username #{@params.username} (derrived from path #{req.url})" res.setHeader 'Content-Disposition', 'inline' if not file? @@ -45,19 +46,22 @@ Meteor.startup -> colors = ['#F44336','#E91E63','#9C27B0','#673AB7','#3F51B5','#2196F3','#03A9F4','#00BCD4','#009688','#4CAF50','#8BC34A','#CDDC39','#FFC107','#FF9800','#FF5722','#795548','#9E9E9E','#607D8B'] - username = this.params.username.replace('.jpg', '') - position = username.length % colors.length - color = colors[position] - - username = username.replace(/[^A-Za-z0-9]/g, '.').replace(/\.+/g, '.').replace(/(^\.)|(\.$)/g, '') - usernameParts = username.split('.') + username = params.username.replace('.jpg', '') + color = '' initials = '' - if usernameParts.length > 1 - initials = _.first(usernameParts)[0] + _.last(usernameParts)[0] + if username is "?" + color = "#000" + initials = username else - initials = username.replace(/[^A-Za-z0-9]/g, '').substr(0, 2) - - initials = initials.toUpperCase() + position = username.length % colors.length + color = colors[position] + username = username.replace(/[^A-Za-z0-9]/g, '.').replace(/\.+/g, '.').replace(/(^\.)|(\.$)/g, '') + usernameParts = username.split('.') + initials = if usernameParts.length > 1 + _.first(usernameParts)[0] + _.last(usernameParts)[0] + else + username.replace(/[^A-Za-z0-9]/g, '').substr(0, 2) + initials = initials.toUpperCase() svg = """ <?xml version="1.0" encoding="UTF-8" standalone="no"?> diff --git a/server/startup/migrations/v22.coffee b/server/startup/migrations/v22.coffee new file mode 100644 index 0000000000000000000000000000000000000000..8ee08ea3e79776d1144a12b0e13f240811d1b4fc --- /dev/null +++ b/server/startup/migrations/v22.coffee @@ -0,0 +1,10 @@ +Meteor.startup -> + Migrations.add + version: 22 + up: -> + ### + # Update message edit field + ### + + RocketChat.models.Messages.upgradeEtsToEditAt() + console.log 'Updated old messages\' ets edited timestamp to new editedAt timestamp.' diff --git a/server/stream/messages.coffee b/server/stream/messages.coffee index cd90dc5995a24b066c5251f87b3bf77a38f3ec92..d82a0c1d1649923d41e7a15dc13d5f170c1be29e 100644 --- a/server/stream/messages.coffee +++ b/server/stream/messages.coffee @@ -23,7 +23,7 @@ Meteor.startup -> options = {} if not RocketChat.settings.get 'Message_ShowEditedStatus' - options.fields = { ets: 0 } + options.fields = { 'editedAt': 0 } RocketChat.models.Messages.findVisibleCreatedOrEditedAfterTimestamp(new Date(), options).observe added: (record) -> diff --git a/tests/jasmine/client/unit/lib/sideNav.coffee b/tests/jasmine/client/unit/lib/sideNav.coffee new file mode 100644 index 0000000000000000000000000000000000000000..745cf2591ae4f888bf13175c7a0676a67c470c16 --- /dev/null +++ b/tests/jasmine/client/unit/lib/sideNav.coffee @@ -0,0 +1,5 @@ +describe 'App | Client | Lib | SideNav', -> + 'use strict'; + + it 'should exist', -> + expect(SideNav).toBeDefined() diff --git a/tests/jasmine/client/unit/markdowntest.js b/tests/jasmine/client/unit/markdowntest.js deleted file mode 100644 index 0d5f214423c22ea686caa0dcb9f7ba01480591fc..0000000000000000000000000000000000000000 --- a/tests/jasmine/client/unit/markdowntest.js +++ /dev/null @@ -1,7 +0,0 @@ -describe('Testing rocketchat:markdown', function () { - 'use strict'; - it('should highlight with bold when surrounded by *', function () { - var output = RocketChat.Markdown({'msg': '', 'html':'*abc123*'}); - expect(output.html).toEqual('<span class="copyonly">*</span><strong>abc123</strong><span class="copyonly">*</span>') - }); - }); \ No newline at end of file