From 4b6b9c3befa0adfcb681c66841bcacd38d4c7de0 Mon Sep 17 00:00:00 2001 From: Rebeka Dekany <50901361+rebekadekany@users.noreply.github.com> Date: Mon, 16 Oct 2023 14:54:47 +0200 Subject: [PATCH] Merge pull request #15258 from overleaf/rd-remove-b2s Tear down Back to School promo 2023 GitOrigin-RevId: e2682f5fd265bdb4ad561a6d98fe49bc1f326489 --- .../Features/Project/ProjectListController.js | 1 - .../Subscription/SubscriptionController.js | 11 -- services/web/app/views/project/list-react.pug | 1 - .../subscriptions/interstitial-payment.pug | 25 ---- .../interstitial-payment_no_nudge_monthly.pug | 25 ---- .../interstitial-payment_nudge_annual.pug | 25 ---- .../web/app/views/subscriptions/plans.pug | 28 ----- .../web/frontend/extracted-translations.json | 5 - .../ads/back-to-school-modal.tsx | 110 ------------------ .../notifications/user-notifications.tsx | 9 +- .../frontend/stylesheets/app/homepage.less | 45 +------ .../web/frontend/stylesheets/app/plans.less | 26 ----- services/web/locales/en.json | 8 -- .../subscriptions/back-to-school-modal.png | Bin 17919 -> 0 bytes 14 files changed, 3 insertions(+), 316 deletions(-) delete mode 100644 services/web/frontend/js/features/project-list/components/notifications/ads/back-to-school-modal.tsx delete mode 100644 services/web/public/img/subscriptions/back-to-school-modal.png diff --git a/services/web/app/src/Features/Project/ProjectListController.js b/services/web/app/src/Features/Project/ProjectListController.js index a9cea74876..89f334897c 100644 --- a/services/web/app/src/Features/Project/ProjectListController.js +++ b/services/web/app/src/Features/Project/ProjectListController.js @@ -469,7 +469,6 @@ async function projectListPage(req, res, next) { showInrGeoBanner, inrGeoBannerVariant, inrGeoBannerSplitTestName, - showBackToSchoolModal: Boolean(usersBestSubscription?.type === 'free'), projectDashboardReact: true, // used in navbar welcomePageRedesignVariant: welcomePageRedesignAssignment.variant, groupSubscriptionsPendingEnrollment: diff --git a/services/web/app/src/Features/Subscription/SubscriptionController.js b/services/web/app/src/Features/Subscription/SubscriptionController.js index fa18ac1743..d23728b8df 100644 --- a/services/web/app/src/Features/Subscription/SubscriptionController.js +++ b/services/web/app/src/Features/Subscription/SubscriptionController.js @@ -127,16 +127,6 @@ async function plansPage(req, res) { plansPageViewSegmentation[inrGeoBannerSplitTestName] = inrGeoBannerVariant } - let showBackToSchoolBanner = true - const userId = SessionManager.getLoggedInUserId(req.session) - if (userId) { - const usersBestSubscription = - await SubscriptionViewModelBuilder.promises.getBestSubscription({ - _id: userId, - }) - showBackToSchoolBanner = usersBestSubscription?.type === 'free' - } - AnalyticsManager.recordEventForSession( req.session, 'plans-page-view', @@ -177,7 +167,6 @@ async function plansPage(req, res) { initialLocalizedGroupPrice: SubscriptionHelper.generateInitialLocalizedGroupPrice(currency), showInrGeoBanner, - showBackToSchoolBanner, annualTrialsAssignment: annualTrialsAssignment?.variant, showNewCompileTimeoutVariant, }) diff --git a/services/web/app/views/project/list-react.pug b/services/web/app/views/project/list-react.pug index ab5c905597..44f1dec2ed 100644 --- a/services/web/app/views/project/list-react.pug +++ b/services/web/app/views/project/list-react.pug @@ -33,7 +33,6 @@ block append meta meta(name="ol-inrGeoBannerSplitTestName" data-type="string" content=inrGeoBannerSplitTestName) meta(name="ol-showLATAMBanner" data-type="boolean" content=showLATAMBanner) meta(name="ol-recommendedCurrency" data-type="string" content=recommendedCurrency) - meta(name="ol-showBackToSchoolModal" data-type="boolean" content=showBackToSchoolModal) meta(name="ol-welcomePageRedesignVariant" data-type="string" content=welcomePageRedesignVariant) meta(name="ol-groupSubscriptionsPendingEnrollment" data-type="json" content=groupSubscriptionsPendingEnrollment) meta(name="ol-hasIndividualRecurlySubscription" data-type="boolean" content=hasIndividualRecurlySubscription) diff --git a/services/web/app/views/subscriptions/interstitial-payment.pug b/services/web/app/views/subscriptions/interstitial-payment.pug index 7e473d3077..efecb58383 100644 --- a/services/web/app/views/subscriptions/interstitial-payment.pug +++ b/services/web/app/views/subscriptions/interstitial-payment.pug @@ -14,31 +14,6 @@ block append meta block content main.content.content-alt#main-content - .container - .user-notifications - ul.list-unstyled(ng-cloak) - li.notification-entry - div.alert.alert-back-to-school( - event-tracking-mb="true" - event-tracking="promo-prompt" - event-tracking-trigger="load" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner"}' - ) - .notification-body - | ๐ŸŽ‰   - p - strong #{translate("back_to_school_banner_bargain_with_x_percent_off_in_school_or_not", {x: '15'})} - br - | #{translate("back_to_school_banner_extended_offer_oct_15")} - .notification-action - a.btn.btn-sm.btn-default-outline( - href="/about/back-to-school-promo-2023" - event-tracking-mb="true" - event-tracking="promo-click" - event-tracking-trigger="click" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner", "type": "click"}' - ) #{translate('claim_discounts')} - .content-page .plans .container diff --git a/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug b/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug index 058dff9c25..a2e805bcc0 100644 --- a/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug +++ b/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug @@ -14,31 +14,6 @@ block append meta block content main.content.content-alt#main-content - .container - .user-notifications - ul.list-unstyled(ng-cloak) - li.notification-entry - div.alert.alert-back-to-school( - event-tracking-mb="true" - event-tracking="promo-prompt" - event-tracking-trigger="load" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner"}' - ) - .notification-body - | ๐ŸŽ‰   - p - strong #{translate("back_to_school_banner_bargain_with_x_percent_off_in_school_or_not", {x: '15'})} - br - | #{translate("back_to_school_banner_extended_offer_oct_15")} - .notification-action - a.btn.btn-sm.btn-default-outline( - href="/about/back-to-school-promo-2023" - event-tracking-mb="true" - event-tracking="promo-click" - event-tracking-trigger="click" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner", "type": "click"}' - ) #{translate('claim_discounts')} - .content-page .plans .container diff --git a/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug b/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug index 5b903848ac..082594e97a 100644 --- a/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug +++ b/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug @@ -14,31 +14,6 @@ block append meta block content main.content.content-alt#main-content - .container - .user-notifications - ul.list-unstyled(ng-cloak) - li.notification-entry - div.alert.alert-back-to-school( - event-tracking-mb="true" - event-tracking="promo-prompt" - event-tracking-trigger="load" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner"}' - ) - .notification-body - | ๐ŸŽ‰   - p - strong #{translate("back_to_school_banner_bargain_with_x_percent_off_in_school_or_not", {x: '15'})} - br - | #{translate("back_to_school_banner_extended_offer_oct_15")} - .notification-action - a.btn.btn-sm.btn-default-outline( - href="/about/back-to-school-promo-2023" - event-tracking-mb="true" - event-tracking="promo-click" - event-tracking-trigger="click" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner", "type": "click"}' - ) #{translate('claim_discounts')} - .content-page .plans .container diff --git a/services/web/app/views/subscriptions/plans.pug b/services/web/app/views/subscriptions/plans.pug index 1676c70c67..cfaa34d60e 100644 --- a/services/web/app/views/subscriptions/plans.pug +++ b/services/web/app/views/subscriptions/plans.pug @@ -12,40 +12,12 @@ block append meta block content main.content.content-alt#main-content - if showBackToSchoolBanner - .container( - ) - .user-notifications - ul.list-unstyled(ng-cloak) - li.notification-entry - div.alert.alert-back-to-school( - event-tracking-mb="true" - event-tracking="promo-prompt" - event-tracking-trigger="load" - event-segmentation='{"location": "plans-page-banner", "name": "bts2023", "content": "banner"}' - ) - .notification-body - | ๐ŸŽ‰   - p - strong #{translate("back_to_school_banner_bargain_with_x_percent_off_in_school_or_not", {x: '15'})} - br - | #{translate("back_to_school_banner_extended_offer_oct_15")} - .notification-action - a.btn.btn-sm.btn-default-outline( - href="/about/back-to-school-promo-2023" - event-tracking-mb="true" - event-tracking="promo-click" - event-tracking-trigger="click" - event-segmentation='{"location": "plans-page-banner", "name": "bts2023", "content": "banner", "type": "click"}' - ) #{translate('claim_discounts')} - .content-page .plans .container(ng-cloak) if showInrGeoBanner div.alert.alert-success.text-centered !{translate("inr_discount_offer_plans_page_banner", {flag: '๐Ÿ‡ฎ๐Ÿ‡ณ'})} - .row .col-md-12 .page-header.centered.plans-header.text-centered.top-page-header diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json index f0d93682a5..37d1e635e4 100644 --- a/services/web/frontend/extracted-translations.json +++ b/services/web/frontend/extracted-translations.json @@ -90,10 +90,6 @@ "autocomplete": "", "autocomplete_references": "", "back": "", - "back_to_school_banner_extended_offer_oct_15": "", - "back_to_school_banner_x_percent_off": "", - "back_to_school_bargain_for_everyone": "", - "back_to_school_modal_offers_from_writefull_and_papers": "", "back_to_subscription": "", "back_to_your_projects": "", "beta_program_already_participating": "", @@ -154,7 +150,6 @@ "checking_project_github_status": "", "choose_a_custom_color": "", "choose_from_group_members": "", - "claim_discounts": "", "clear_cached_files": "", "clear_search": "", "click_here_to_view_sl_in_lng": "", diff --git a/services/web/frontend/js/features/project-list/components/notifications/ads/back-to-school-modal.tsx b/services/web/frontend/js/features/project-list/components/notifications/ads/back-to-school-modal.tsx deleted file mode 100644 index 5ec57eabb0..0000000000 --- a/services/web/frontend/js/features/project-list/components/notifications/ads/back-to-school-modal.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import { useCallback, useEffect, useRef, useState } from 'react' -import { useTranslation } from 'react-i18next' -import usePersistedState from '../../../../../shared/hooks/use-persisted-state' -import * as eventTracking from '../../../../../infrastructure/event-tracking' -import { Modal, Button } from 'react-bootstrap' -import AccessibleModal from '../../../../../shared/components/accessible-modal' - -export default function BackToSchoolModal() { - const { t } = useTranslation() - const [dismissedUntil, setDismissedUntil] = usePersistedState< - Date | undefined - >(`has_dismissed_back_to_school_modal_until`) - const viewEventSent = useRef(false) - - const [showModal, setShowModal] = useState(true) - - useEffect(() => { - if (dismissedUntil && new Date(dismissedUntil) > new Date()) { - return - } - if (!viewEventSent.current) { - eventTracking.sendMB('promo-prompt', { - name: 'bts2023', - location: 'dashboard-modal', - content: 'modal', - }) - viewEventSent.current = true - } - }, [dismissedUntil]) - - const handleClick = useCallback(() => { - eventTracking.sendMB('promo-click', { - name: 'bts2023', - location: 'dashboard-modal', - content: 'modal', - type: 'click', - }) - - setShowModal(false) - - window.open('/about/back-to-school-promo-2023') - }, []) - - const bannerDismissed = useCallback(() => { - eventTracking.sendMB('promo-dismiss', { - name: 'bts2023', - location: 'dashboard-modal', - content: 'modal', - }) - const until = new Date() - until.setDate(until.getDate() + 14) // 14 days - setDismissedUntil(until) - }, [setDismissedUntil]) - - const handleHide = useCallback(() => { - setShowModal(false) - bannerDismissed() - }, [bannerDismissed]) - - const handleMaybeLater = useCallback(() => { - eventTracking.sendMB('promo-click', { - name: 'bts2023', - location: 'dashboard-modal', - content: 'modal', - type: 'pause', - }) - setShowModal(false) - const until = new Date() - until.setDate(until.getDate() + 1) // 1 day - setDismissedUntil(until) - }, [setDismissedUntil]) - - if (dismissedUntil && new Date(dismissedUntil) > new Date()) { - return null - } - - return ( - - - - {t('back_to_school_bargain_for_everyone')} - - - -

- -

- - {t('back_to_school_banner_x_percent_off', { x: '15' })} - -

{t('back_to_school_modal_offers_from_writefull_and_papers')}

-

{t('back_to_school_banner_extended_offer_oct_15')}

-
- - - - -
- ) -} diff --git a/services/web/frontend/js/features/project-list/components/notifications/user-notifications.tsx b/services/web/frontend/js/features/project-list/components/notifications/user-notifications.tsx index 3046435d3a..e647f97e44 100644 --- a/services/web/frontend/js/features/project-list/components/notifications/user-notifications.tsx +++ b/services/web/frontend/js/features/project-list/components/notifications/user-notifications.tsx @@ -9,7 +9,6 @@ import INRBanner from './ads/inr-banner' import LATAMBanner from './ads/latam-banner' import getMeta from '../../../../utils/meta' import importOverleafModules from '../../../../../macros/import-overleaf-module.macro' -import BackToSchoolModal from './ads/back-to-school-modal' import customLocalStorage from '../../../../infrastructure/local-storage' import { sendMB } from '../../../../infrastructure/event-tracking' @@ -36,12 +35,9 @@ function UserNotifications() { 'ol-groupSubscriptionsPendingEnrollment', [] ) - const showBackToSchoolModal = getMeta('ol-showBackToSchoolModal', false) const showInrGeoBanner = getMeta('ol-showInrGeoBanner', false) - const inrGeoBannerVariant = showBackToSchoolModal - ? 'default' // This test should be disabled to prevent double modals, but sanity check to be safe - : getMeta('ol-inrGeoBannerVariant', 'default') + const inrGeoBannerVariant = getMeta('ol-inrGeoBannerVariant', 'default') const inrGeoBannerSplitTestName = getMeta( 'ol-inrGeoBannerSplitTestName', 'unassigned' @@ -50,7 +46,7 @@ function UserNotifications() { // Temporary workaround to prevent also showing groups/enterprise banner const [showWritefull, setShowWritefull] = useState(() => { - if (isChromium() && !showBackToSchoolModal) { + if (isChromium()) { const show = getMeta('ol-showWritefullPromoBanner') && !customLocalStorage.getItem('has_dismissed_writefull_promo_banner') @@ -93,7 +89,6 @@ function UserNotifications() { splitTestName={inrGeoBannerSplitTestName} /> ) : null} - {showBackToSchoolModal && } ;W!%4(yapu&aTl3Y(yRaXv)^fy0!dV12E2!Dze z+}LJ<)6UtgcJv^0_i4Gql_OzdIwJKuo8L1)^+!s3$w11&8rk{c4s#b~nX$AipJQPFB5 zf}|MnUSPgbZuR=|W%b4LS5i4PI1~g(teR*#^6F{yn~vax1(;Zz+t=Man2L(756T)B zm#;3Cj!l7&WT?{WrLS+X=EnmL(G_5`?}f3kLuF|RUc|+H;(4bkClKMNJB=i(s_G*F z(~F2mi^jh}s`ur~8m&6NzP_a(n?19M7&}b1y?q>?1t<`r$IWCSSK&N7yebEd&_o21 zfElD2a7jS)3JRK7&tD-`vQ`^pHW8(eW`Cq|@M+%CXgxDSb_?iljLX z;l~Hi{6{@+S8+1A3MYK5XKrpm`1trpEC&ZKg$$dXo`tS-sjI6iI~1a+shOKwPe#av z#F7$nB_t%Uv-2R?*4Ni3sMFY}5B5S?r5JE|d3mK7@s5v=nWTkQ_x_U0qO6d{9u3Ifxh?9UT^3*np(|;;F5!gMu7e$V4mkWbx{F^(px2srNsC zr?vmwKJ`7hK0W3C7xbTN!l(Z!^sYWVY5s2n&r{I<&OeR+pX}39{l7xO{|)({eBFQV zNRdxZ@lQ_^|1JKXy8kNX{}=fGTwR~c|8JN@_m=oA3W|)YlB~3@PtIZP%|{}+*7DCT z-zy3$7k?$RQ0(qwv=}*BYYjScIW$Gm}vRvE z33n(_#<#xiVeu_ftEdbN>vHbp`|WHt<=Z6&MFJK96@g=|ff#cB?eTn6p07_me?J}$ zvp3_Sr!WORdqE)Ro6TzgFyCIyD0lM*ZJA#!k|9RQo`x+zQZzf+Y;D=!*G~GHwI0Y) z=@;auPd-qzDXiWJn@}a5z@R#>{O<5#rl1Z(fNuf)$S0h{v4jJq; zSGuo?v>ESMW=?d1wJ&JQIB;&+BeYnPe2MI@U9uc6B|DbKN@$Thwpr0kW2F)IY)$Jm z7lyrUA-1|v!~u+-q0Hq|Ct7cnzSr?VCVvT*-Tb$@u7jcJtTWfgSv{=da-#Z>cx$p2 z;Nz_4gnrHr8dBnSq(nLo(e_AwqLvTuOBBy83Zs(}M|tKomz6_n`|ziC#j zgM;Vlf$CMlbrH1W(lzk+#yFH+$v-T}ka`p$m4*aUeMCXG1XI4?b0L$~4wV6nKwASs z<$*|f)rE!#E7kypALaVUlA}BJ8YB#uB+2c`@PnCh0&bnmigLw1m7uQ3Aqy>@ES!pU z3o?5_k2(t^VE|371q(11mCw~%N;k^`#XKXdUu^+fk#zl+&WzbCGnzC@x$zTG;0LE9MV^q?um%?V5VAW~ZCuf)c;wV8yC1)hgK-!(57ip>x#u^?mJPKG?Z zsWHV05W$td)Rau1-c}Ev=%I~Cr`A%Xnr@Y4ihPzerHEsHtw?CJRY9F{za6Mn_pxQ1 zK&u39us6n~&7elV`1$OoUbt&Q8)etujjawE@xVRmTosxJ*P9J{d_8-psZ|5541*fq z;%615Ynx!kEUTNW1~jw0yKC_l(<~J=j=hdJG7yJ?L$Oky3<%@%{wtT5KS>gg`P^hL zfnq&r0pHpF9`ZsBpFsgjipepTM|9QZ^k$pcFc!ZX2Jh$Z@bf2o4!r>lP{qQjRXB2h zAFf#YQv{X1P+}R{&>eW{*kqu?QVW_9kAWc4UNA*lFMGD5Af*V(XZbQQ-s4?pmca4I zQEhH1VBaGDDVW%s^k&^g9SeZRO@czLTVpvRpLI=IXiC4Iu8200Tr%OJVYsnAECk9y ztLLhQk3f&}5<*q+lf>MOWjo<|pH9~J)G90IU0GyC=*eS2A0x}n=_B7NyJ8=A>^uz@ zS*A4g7CmN!hOubiIngPC7o9QCOv?SsRS`FHHxV;}Qwd2JxM)&2DX4RpZ6|sD5^-{n z!xd`mDoZ{ftls(q&xF;Ks3jq|8A~;199{2k9SK=fd5P$}&Xg${u{9RI)EK7)-82W(m%rh=*&9Jr2(+CbOR#DU{PaBH@(ypd9><|A9{{>XcaQwXBFH zO)N(-#?%8Ph~wdjV~=e4iaMis`a}Uv-XAsndL6st&`|;V;c%hq~8z{ z`s_sx>U|!+#-NVGwKw(p-x1&x0r2K<}KagezC99^G? zef_|tC)W-FeJ&Ut@$nq?)$RCr?43U2VkfM7#b}Z#x=<_6l~ujIA6cC?445XaLgIh> z1d}W5et1r4PV9dvXs6iD@bjfflQ74&`^~*(zXePFcoTQ3Y@_l^@MuRGhhw%hL1d$h z!Qr36BQj8tRu5GH;H`(@C;&OdN4-yvk%TT{*J~f~$d|iL*U9qcGq%LQ8e@<8;0iZ3 z#R&aIp8e2!0+R1vYNVPyqVEU{3rz0D@@MT84I3SLE3B~8MhRMgW>dus1LF55k`hKu zwz2$r79SCxZm6F`x6A{8>NS4T!heEXsD!A_U%95ZmE1a2i~4B5HowjB{k$1$7k+$6 z(2CymtyR;&?d%tzG%}-UYRJ8StJuH~tuSu{El6x^(i%hVsRd zp>I=>@Yw;~=<+}n?fQFLRb#48M}n%3M+l|+OsVOUsCYkvJm2lic*#ef8cZzZh?Z>It1PWE8RXFf^(g1fYyBZaDk->33Bdgeu*uyezO z(6kg(JHIMGlG=FH9KT%7;P8Z5t_ac)u5XV$tQT=pdw1KyO(5|Kwd~b!-Wc{DT6JD$ z_xW=TWkb2_=o}wKrcvW=O%&BYh11)7T#+z^`IAhSKvRF;r0v|#UXfGv(l_l>bd5v; zXM;uC4P`vI_E7u*0SN$DzR<)pleT7&0F+JNYO7sDl;3J|84&8Y$Xykl?4M9zyA zpYQGUxB^o`4;E5@?5wn7Is9ogWiVqbNV<|ZwduMBeL4<9)W$9GwX}WS6M!lPc&!Uq zF|>+^@E`O{(g&DayBIcsyZ2IurI@1WjW)90Q@b#55<1ZpJEHys%0N_PRp*M6n(e=e z)}9~hAAA4dZJHu0ww7)SlR&L-TeEVzrm_sfM)@oQgGTz`%c;`9W)o64atOKX)B2TJ zjNjjfJf+CxRlE0|K9al{82gG%XX98e%c?SH%duM)#{&FCs)vx5NY4bSpRyV?>#3t% ziQu7mMQorn*-KKAq+|kEkM6G_8LlvHT8$AVc~l3)K!KW zm3AM?`am!@GkO=bG@`Wh2L%tG8jU-c5}n5=30{jFl;V+%}VD?&sz3DicL(yhzcEfDe=4 zdz7-$1AuXs!wD@+*!h|>^1VSLg^CpQLc38NN! zmae#>f6I>(RRo@&>~eJ;#T=_=!P{v|W6tfNpDkH+VBdQ7|=_3Mu&$^QLl@)*)nWA&!B*10?$|PU9If_3I5U0|MzVW`SAt_q-dBP`K z-o>WJEM=uN1HASirg;P62#F+#!W46!+%{_5J!`CYG^t#QM}AzVd-hU&`LZOV;Nn zD~F!F4BB*3#?t01rD9`9ku`o4>gCKDzJ=GAmg2T;*mqNZOKNBQ%%aJK7F59qtk<(Z zzr4nibx>1&Y|h_zk!w)*?Q(@amSKdOC4BN)N-%;{PC_8UP`jq!4=XlqhQdko5y{ls z>rp4m*=cHFa}kB}?F85B&T&h8MzccbweK?0E<;V0>5#dZwT(rtDDmc47HVR zyF2-s4R6d$($OEEGs>0tv_M^gUH}smGn}gR&c%v;MhpaXzdYx;i;FMhte(FRzJ!`b zT1V%X0iCL`Oi7YElnb|+*T!h54=)>W~E{trHxh+X#K9 z3K&aWR=%AX5NxORYTOMV{ec*(=O=jY^O4d1k?j^$M)p-5{P@g~ryCTb-RMf$U$#fS zO*e=_A^;Z0JNa{@2#lM41g$Fp2MEr2Dh8|84f9A(r+Ab{26(}ScZ|xT-8!_`*|;td zUE(>cFyR^TK{P8gr4Bg03P~%&HKRB}Ec(^xKxygLBKCs;BcScOG43RyILRHb@UcLs zfu?`Fqr^_J`XwrdqrC_@n1e|PDEz%3kQrNCl@d13)Axo1{4;KCI+pGX@8?&&igJ2) z!$mqLVMmb|YG(Wn;MiYZ+9C(C25ZZnBe}L%I$?jZ<}CGrDMg*G9q4C-q+-Lw$t#L( zLit7TX2fo`UA#Ig8Tn1phgUH-ft-2Vqe#uM z&qU{<(;-GbJ=9AA~kL!=G@EXQNr9)>=P6wf6CDsj*l>Pa? z|NbTYNP^>(u*I{uLc+))&Qf7tKr>?HeMIM$5C}L!(SXk;oHr#Vq_psas*aO6#x73@ zsNbE9M-h&r3MaMTi>toen@9TQ%g~tw%Kmwo@s$_@rX9{Myd{5`G(?0TO7h{l%I`rB zsW@xiCWIo6wG_f+Qkmpnx0*~u{H-hB-+sjK>terauGVSBa2%*%oMs~#O8P)|EAK&M z3Y`&ki)}%JW@Y&6hJXw*zE76;pTLeIR#_@g{TGvn?KRcSa@{LUeFF+{VB{7=c+;H$ zxsNQ+gih`kA+*oXe;S?LcDZGJ*m!@b_y81Z{yvxr!#KF>J}vnh}j~Ukh=<6x}wm z+Uxa*Q=umtbY8Th%!y}nF%9iybB(Eg1_B(9Ww?1f-roo^tLOOmHxKt7l>|tXA~kt* z2qXbOs_7b^)$Sm`FtbwF)%sKQQ zOsRnlzC~auwdAHJ{3sail1%K=9lL>KmG(OW`)A7F9hywh2F*h!YC8b}-S6e46c=R$ z!&hX)iYa83KCmiHuU%^LTvX8AI6UVzsxHdR&0@DHeev1lYW8dLM^62uzVlBheV+Wz zcwr2th!%sRVkra<6Sj6W?bXD&z6&mPh|Co8VkyDlL_w@?Zl7?k6CnE_B=Ogp9zlBib4NGc^RE6?leZ&}Pvj$m~3%ogAT^7%}I{ z)rY8s67Dunh2mf49_+IK+AY@nk#4*OMX zl2zD*?B=iXjfJ0IcPoTrEGwk;^$`|2AFD_pRrzYBPca`D0Tf>*ZCx73b#PQLwA+A~ zY(|D)2-QZ9R>9EAC=Ng@5=Sw((-6UpGYR~K+D<8rh?F=qMFTrxX*T*S;rHWChe?^> z;JtibKSGIPx#EaBnE&nd!W7ABJo&nGGdvlExdeisC8fd@)mL8}mnVVrN8&{Sr>6VF zWmb;`4mgSB9_-213K17$1?1C;Vgho|tvq@i$OGuaT()QB;~2lWqT;?GP2B3c$3TMV1@*upxt5+{e^LvjLraZN}YF}Ef8`-XN>rc za&QJ8nNIMxcYW6q(ik@eCy;njJy3ex8ZM3&{+4o>BbH3op`Bz6f15N=vwS_gnhxIL zst%~-TKSW(zT&F8eC9}N0@*M48nCC|?fFqwHWThaY%kO~<$s8=gLDzqYb|=iRxIZK zNK9S{uDP>>_{}AF*t@EQz+F{6(E)Nj@Yph`T~1O)m5*}KUy;4k+hS4y577DO&1XYJ zvLXf1`b1Ylb3|~Jmj9(N3`N%AnxPL5HksgJ&%+=MVUHvrfiMA+mTdh7!%7UBUwwcA zg0?QV80`%)g|_W1DHx>r?PsvHNg!b0SSBloV`xhghYYm+emyU(U=Aw*8`%nA33CE}ofO3vKrWESo zj|wM7auAVhwQsXFQJ|dg@0J5Eiq=UpCtbg`A^HCiWn_Y;z!V!n?Uc-sJiy0g2*PEV zL#_B<#Z2Cc;%BiUfRQ6j(?+6n#Mg+q6Y@6h*V>R(hU?Lcb7Cbd;5%T_%DTRr3q?Aj ze5L~)_^;Mp@byPH<~LA)0@Uz9#r;U-$Ro=w1t!Fr2)w20w;L`-$Si3duuQv-@f9eQ z?o>I?OQR(#0bI@`iGMvfjxIi^8({(c(qj@F+8)TcL2Pg0o^uu^Dgj>qZF}&i`NyC! z3a-Wm&fx+XD5pWhp!lehKr__#6lTEpJfyQWO2SoP0}4#4rG3qw70X}%87wwex#y!0 zpiKhp&259|3V_>U@oRYerSeKKN@1(j+x>S|L7C?kKj>dx)E3xDQk=z12X|#O@A352 z5yRRsEPDIAdx#xKw95Sf-EnJIO=ChM-;)KD+Sevh_pGY8!W(Sy!$M&`glnQLz-^<~ zEI4K;*EMIo-DndGC#UadA44F5ofuEzJW7N}vg?HLA6CD?j0z_!0^!x}Lw>Lp{{d+% zQp(PHoV9l!jst|5Ve|=n0B)237JW#3U~6u5n6|Mb>z1C8_sGoOp0zb#G6?@w^*U29 zJ0Fku#LzH0&tIFn|x4XJ0buuPx0Yl9gd91oH(92|sbuh(ndrxDK{Q;bLd+RW=O z2Z6qUOsg~z6vHJy1KKZ|I-CGosq85vxEc}8ke^XnFz8}O-XEk08svK*{Ps7jh)Q5< z1ZnaIoPvXdze^Uk~i=7#Q66 zX+1-*DQvW0=_l3P&bWvWpg{Y1Qv)+rFRjaC*pQOm8MJdq;b*%rjuJDt3yX(nSI6SK ziOQm4fvv+wgBBtwE{Sdl4N6$MipxeMAkA*@5*)w+rOKQfA68EJCjQsKKW#Pz_jPpb zYI2}JH6K>b_M^xu--P759%p!=2IUm069toa`2yyD(3oVAQ-KTOAd$*6 z$mDBWn4L&#Dzawr%wr50DRAzxsbQZOQJ7uuhL$M+<9osGx}zGB z2HRe-V$aTGUt5{z{%7YWsIVz>*JC5OMR?A0@X{x^$XK9&ez#S{ecaTy>FUCw8XccX zPpr$yP&Dw2+htR(EwsGUOj@YAv`Fm)<$cJd&TxljKUPt}=deWZIR*82+4{=bjfkD3 ziDc0aUFo-NBl=8KP9ZJ^3_1N?tvuG+2nC23c3fcVJCr{;KxIik^Y!{90ts>j1|N@W z`w0n|&`+ue7lPUXq#q?L@~itD5Ehxm7`wJK3%bMvMun3hjh`9nu)Av~I!s2~rL@0% zZ$CpRO4KVn7$wKz?DpoR)^nf;()4Pe%E~JuCZ#O50rv3h(@ht$Qr9<$y8l7`b}TF? zSDNA=d@vAs&ZBp)ljW-kN!|}^wG0+l2ZV>w;QU>yPa2-Wo$S!&poF7=LFAQLsjJ_P zY;?*BvKW6*PLk?!_VbfiN&(a=kv#!XPQ7TCU99QsI7u(uT3|+E516#2 zxqHO3;RNzkBMX+843e9v|BJPByO73*>D$JdDXSx`wwJ&WPJj0q&-P}`rH2aVS#$(Y zpG7Z!y%ru;*bmX#1ggJr;oaKV4FU984u6D6Enhz>;X`^qIzty-hTU?{X_kfnK+RG*-_@Qv2}}$30AL#XgJa}`<|N&{&f=Gg z=aw!a+1)EcdQ5*&xC5>7PBS@+=>?(*@WIsyRp&^?5N(khE_1{%WO3&rsr;%-@Z&Vp z{UbcogN9DN7FUCG^mtn$k;IroT|hNVn4e zx;r5NRtn-E5o0WVfz+uvXx{=k89=&kdR(+gQ>Pj+s$cOw@Irt2=vJqoHtHGh3$g&~pU8 z9F8D00l2!*I`1;};b&bOQrzV7c1~=w+-NY|Y(&eOewN!9g}HL#L|X*34E>MhBF_+O zF-bkzgd5(si7yKF`coVXIRwKK69WC#r%NkA0b*1@dzvr2mCH2b3XJi3#hjw}% zpg(P_iGv^i92+aCWSyfo=2;zF2l2=_y1tT4Y4H8k94jTMV^B4*d`XJ0$+-g7W9yUY z+7(6XN7lg6(iRp1f`J)sU3(ue1~4l;*U;O!?)kNG2=v#1p2wH0kKPi~a-n(0Z5ZEv z7GEwNy84m}^#37c0|(F|$sZga!1GUR-O8l{wqZ=zqG$SEAr-$9Yj%9FOFvHu(@wU* zICsnJqP})0$pWf)!@cY5mUoML+CD4Ic4;$v{4x@n*2RCke3*Ol>(B2(kEJ*$o#*W^ z#u>Nqv*QeI^`JO7|F@04Kv)e9g1A}T`acm zUcBKxetLX;=CAFw!W}eiEEO`ttqFN9FGlj=LXEQA)kLsf3X7{QkU+ zAv8bmwqn1RTYW)~?}jyrvDg(kDMfg~z0r%Z590^8E4D3~k|IGpuSiKnZK}65O!UW= z&?X3On+)O-({IvxVVo@NPqI&;Uir6jB;b1o=p;Vo z_I+>XpFnnwQwLZ?nD3c-EW>EF!HNr?0B5%&e%2gXkpAOE^ebTPNGtrKUtG$&m1Eec z_t2e(p)ZXZQCdk+B(puz1_6Ia%L|g}#D%BFStz+;ne<*tFr*|u>!4%1SE!51sopFX zmABJwQfb8mS4&GCcrH5rjT6^fBs5v)5qh(}#6tY<2CqET>zszOoCnH;LD4RnB37=9AfE(3i+c;y0)ucx8`LRl;~5l^nE`}v>Jp}!NmAVM8>UJ}rjT#L zvGankxBxB+2b&Xkq7B+54gc7!-;H$Zs~IDQyx~Q(HB4x+?ro?FA`+jWh!y1zw6eLh zBU`qT9`0+ahuCCRRwx#z!6K=Rl|f;e29by$g0)kvdDA!JM`x9`1dmoIXIDVy3tMDkXUUl4^@+$%f2A2y|xT&H|@Il!*nA*bLW+JksiQs^IT?^O}+e%{}fn zF06tT)fPnDK~BHCI{k3>@DFmgwPu~AYyKZ(9eA3VhRg_&a;UC7umTP*@(bdEtnsO(FDOrDFDiz z<0_VwiAogMB5IHT&ESdhvWHuXWlxoZ=$fEHit?ut7)Tc&En7|aueKjK;d!b;iOE~? zB`P?hBS6j+f=?m;@VmgMyg(h>iRH}~dv-ml)L}{5#PsVbc%*|d_BSDZ69y%O=-!lT zD79CX?XP1ZyV`TTV4=8j%reoV8cTZQP~nSL8AL`(XqT_6p<;=0HVaGn+uAFWFtX_x z^-B``nK?pHjc>8fSVQ(t2K}$gpNyr_i12666mEa0qsMe;GO~%6Ya;TRJ-xmxXxeYv zkmN<&>Ad<7^iXK_uSpF>+AZ%(D)wwlNR|>;XP6aMPL;C1&7QQb5>I~vjqc?-j+X11 zF!UPOu5%NDnwOGm+iP{dYbePf2c0Uuq(R-fZ2o3|;JA+<9Z&#;IDtG>UB^g7RqY}$ zKx`|D2PyQQB7rm2c9wGX#Bl0^jZ3?+zJ%Be9#;>YoNRtV3Y`lRT#t= zh(8T{`_6bKTgRh{|9Y_r44XKqO-Nah_bVZ6s!RD=QJGx&oc4p#_3XI#e97su$6SyW zWpZgJjFT4GJ(ZkJS(pGCjI~bJWr~f(RkJzR>v!Pj;+37|+pDFk_c!^PmJ9yoN1{*u z?!OHzRkLnOTRsW>A+-dXW{Ut~vvbv(l*9Ma5VB0lpD$xENSWDVl=vr`Nr-d?joy`7 zHpn6-1#FY#7u?&yypdD2<{VXq^B&uyTCx0gj?6EwM|}f1!W`bQ(5+Jy1)f^If&HwP zlH49tpDH)TC7k-X(lYLOGP>aOIncH$i_5sj;m-x&({6deY_q;M0Rh`Zw8&I_HI0Wo zdfS%f5S4=#KWO~naj&e++f(d)&!4LT^S2jX3?zpOz28fm)-BEfrkYMsM8ech)YN z?Aneb{U4wjL$XKnyoHm*$9_+8cvoM!fO9tPGr6e}^tQ^7jYaeHt%MlfhmVc`gd^Z{ ztf%t$q<2-TdvuzMXl1lerh^iwXtJn>b^V8XG;)(@Bs|HEt20>FSZ6uLLEe}S`Juj$ zPL+qAL4L9`EpFz0a^ODqvK89o{JZgVMWXJle9@ioV-$roGn60@Am>PS5v@Tz(g_FH z#?9CWAEcT!Ph6T}qdz#t5FhLcT(P*1`~sZs2=;uxvibDoHE?z^&?v>43A$f_Tpi^f ztkh~EYJrc)C!n&7D`!0ZbcBI1)3`FDf34I9!+Gmk7WXsEx}P(Z8rKR%B6Z3t6B%j_ zEOZn_fm%8_uCpfwGN6OsnSI>q2$ClE<3`FPjvwRn-?s}?>N7kqNSuAs%LXkE;w15 zdFl5Omao9q7FhAD$eXKyX*3Hy%!o6vghIoU1}Q8nc7!DiB@kiPRdqkkSk%Q#y?1ME z5Yo70tD0eY^ENi@gd#nR=Oa)6Wa2=(M|bFrrBXt4YW}jGEUD$BI7Vh|bWTC8NR$nA7Cpfkqee80$9fu*rx-GT|y8TY1{?BW9nK-n-n?U^CYNYBZeQ%~(7@2^0h1p3Jt4h*_P*=Yllf2fN&r1R|&CPg@NYIbnlj_+94 z-RoR2aMqDC_q2)MPi}d>#g%OLn|5WXhOa`o2XcnF%@9WP{JYqWq>uJXeXoryD`F1U zrH`DaW|OyMhr|>s$mf#SRlzy}?=r+%o)>NNQ|m(xdlBzhXX=OMBp{8T7_%%bCz?=B zlJ-WUyLKTBBFDsKt(~xtjULR7fw)f9yxQ7lMR9KZ?%=MI^Bb=B1T}yMPVuW{-z{KP zG7n4Hn*r@caU#Dhx{-0Q{wt3x+e(EPQM=R@n3Jj-JFV?EUx6v&is}i3H>YR6n+XY&RvrG!bf_UVbVc}w zWGB#K>_ZZMzq2Z8`$?wFZ{H5v^0yb$@;u7Sxb38vh0yY0nZG1=&mOy6^sbVqQPL0B z*%4N)u+7u$QRExm6UTE&UdsJ5{xO>G-mxCPc*A$N?)b1rboj~MbcK~-Y9d~8#!UpMpN^til|>WR=<8ZPHGyTyJdC z(~|oRw{G1SWo}J&>Tj+#KxwPK(pJOk15JHpcyj>RB;wCK1;h{GYzmtK5R5H9FYN9t znf;I{IRj5x~8^>P19vMRuxFB zFuSBlPVHs|af}xq=J6-EfP2f%d!>d)qf=_kCRcSwEMSuSBHdpGTvQ#%fT;dA=9}=a z9~3E6{pA-nd*|89zBwOuV(BP- zI;FWWlO~zTnk`FBf}CdI%M_&p4nnLSfh1(H{Kbl2#T7W+ve83E&vWNIGWbxGDY$>ASAgpRb_i7>5qnUPmw!4NdG3+HwP%ifz$G7d0Z%#BMb<4d`mz@-S|Dc$m~YyZt*JTW0pX2$;r~E z^o1V0KHsNLie^#0R^^DAb*#mr?BLCcSvHRkSAmr4Kr^&?!Wh+#o~9XBm2J+148r-~hF=7|A_VzOS$pSZ1c zX7UsOlk#s|j9MGS9G4cJWU5Zj%+~#frs$`7F!?{O(##Pn%(`Y@nt5YCIzsqRKV@Hi z+y^}g*QUe@n>n2l2K0)IK5_m4{(4nM=kFn;Ea~BL<~rVl?vhE43U#_zq2=pBN@Wu^$L z$Zlbf`2ArpaX4B4PyMg!Uj}~N0ueg`p)m@q8>uwze&|VBl@pPl=%kgt*}h{U17rmk zeS+hXw70m&FB+X{L_?5ap86&1N~MkH({dpGCZWES%h?#cT$TqFjU}-)UKt~}8!Id?GGy7wo5osS*t@Y5E%=LLsgBQaMKn7wf2)}~W_Px^Qz@Jq zKmn>hCp*4u(Fw2KtXNZuPCd1!3(-nG0h;;2eFx|df!n#+2myaS%;mU^cs{lpF!{8g zpNy?72Qq@n>hS}AYXe&A_is+hc8uf$hQjGa{}R_PB#;CzXJXF;6A(V zj|np**;RbtAbg7gWdLbnasoxNb_LJcoU3S`M6F9qo>)!R1$(frgOAQ|!3_SAL_%sz z0d?c}#ufTGaYO`rnu&^vH8!z*duUE*PA(7j4fx=sgMWHV=uf?C#AZdi#f+caBv7J6 z6A@m#Eakuk9WGFxbHKK7ko?2`97P$>v9S3hamU}SiN7NA4mg$L%y+AJs5n{Adv3Wt zTe~q!9}JvxjdsM)_`GEq;l#-F&GCHh85ImVK|1KPS#U&jlB``q2V+nh&Wy6RhW#X? z_x+ZG)b|WUFwDV+VHPN2w>vMRLYPff=#0kVP=}1?o%tuy+OG~hQrivkDmW%%olWYKokSWDzE6Uv#n_TL`ELBI-&V``K?xL z)L(HY@zvbs%^2J^_y%fe_(Q_`q_VuGKn!FV+I3dm47Jl zlZquDx^@T~fMQ`pXQ>*wr8>f}H^lz3o#3Y^7%{v42j<~XUKA}PkQI@HC$d*0OyEA1 z7bXLs$Q_y1B;=F{2J%^qPT2jmRkK(ueRzI{%dXHC@v0)V9o?c=40}&Ec$?8yQLP=^ zB~^<-(wCDuXSptgY&)$SVu^J=!NEh3RFWX$auI#n%q}Qbt1F_O-d?h>&PJ)6Mo}H= zJREF-Xy{^C7Ah}xytjLJDHR1rei3oPRg)GS?&6{NX#+pMI*0Jrf{7?%h=|v*&r@bm zkwu(3H*2$`o{kwn0U%_0Uc{V-d{}V>(4>OKTMhmDv)DmAE3zcA4(cX9>M$XL2}aYx zDB^sKGYUgY0@C*Q>2P3KVH^G5^$I!<%6dFWYbnUl54sPnt>Q4r+;Ja`(g>;*xXY zDE?BE;x|!`0M{9f1OGbXR>?CBFuOArtzP&o=a}_OSWO>UNEUGx>Xg8ec!J@{zS$bd z;Y0vQ)z5He{&S}T-#H03x1Wo2Nr3|M^PH+-uT*~f2Jc`fw_8i5)*IbN!h}D;>A+or zhrmW|!zOZQcKqa`in`onha<>FT29FsSwfNJbpvJVujLzZ4h?1#zyIr2V0Bocqt%hN*^+_JG)5gkZe2!IM zOx)vrSn|Qt+Zqi3WM=NYKgf2(Ey}rnV=eMR=le(u9H=ftp-v8QsB0ua`%>*ZN1Dw4D>_x$+KAnj;2 z^dw3z2>M+3yRqS})u1lgBMpPisH?}}=}LUNDz!9ChdkQ rw6+PpTUmXsnONc~!Q z1Al-q_B)=#{YJ7zk5+lXrGnDkdRzNS&!I+dsfC9oeq>au-ekh*RVoePcx-QU;LYFG zx~DlE-^6*Zo$2&sx4tS%!9Hu>!mmRnh`LIgyUlDc&>&|d+PLwP z5LB6U`@3jXmBjZa%Db(e!<{SNG!C<%hvn}}mq9L9@zo*ZnhBbCKr`1vlv&XI@M`<0 z{chl0tE8V~_T&ha<{;+E(7e6mY+nAO*XGwNa|cJJgrMu&uZj7A`xQ51Q*kR{p3e)t z_N5UGwObf!2s=|bfA~qmurZnu-|^_|^?Fe}mxH;Ub%8EG+wwGuBCRa3bN*z#Ll6G`d}srh-lYRdZY;D6{jm;mAb`_Z`CrTLn+BHK zT*Xz?rHUP7^H}a5tZWTL^q{FHfC^r7`GCbxPim}9iq~r_BUE9wpqP4LM~9kX*E7Gc z9%1*CcCDqMRsZ8&`S_m7nift@P7E1|{O`ho!5<~Mw_uRF==?R`l+P$4Hh<``XC{d6 z4wq0Xvc_%moc5zzx4pCHd>)kK!qx4Z-u%n3LF z55qD^V;@zE6#+&nIRzD{4NRUPgBZ#Uz#A+|qIJeiN>Z4!(3< za6D@WqTnPO;=Wq0lbX2TmsTQd`WqAs=e&#tP2t%a&I6M^I$H{cBcm$i&ZOi#GA- z^O%<>> zHC?K6#oHa}Ds$)nO0M30t3u4vXhg^E7}-&-hd#pN<+jfzd2}8e%Pn63=53WAM@wzw zJV02NYfK+Y3ylkTWt8>}cr=zsnS9@l-Sy~36H)yyD2YTLp+yTtm(z$904~Tq|pAD@2 zrUU<)h)7H8@7Xwv7vH|8;hP@Ue-8BOsC!dxiSEP>_$+)5EnW})+K%wue3a0ExG2~C z;Ib>vcZz5-AOgoIK_WLo0ELdY;uOfxq3!T*srY31e)fiiMLcl%@;ju;-#zkj$i|Jf zHE7EV1Uc~q!XIR+FpUEoQ_?_y>@sby(K#rLmGtFJ&c?^DnvxXuhF3uO1h-FZ3Ig; zq(BR%322%ghXV`YoZvQ>GX@ab50j|X zr3vNPDrM^-rB8q57S^8wO0;%zMMT;t(TQ-`PW)ERTAEZbbk|)c+ee7zt0FQ`^5`I_ zU{=@Feyu@+nyC7X*zu|#3q!Oe6|@~=O~8IvF8IfK-eXYK%Ym7d5Dg(+kS>1I>z89H z9NN_dcbr9Z;QQao!=OzhpS_?-ZP$>PJMlk;kTKu>%-Iu~51jW=%NW(Fke-?MvY4oI zzU}kP#TQya{Yc-9!MBc{Ht>wtvc16|R2% zw_iAhxd}L>a~Td7qOCrbYHL7F(U*#BZ2nTef4#6Po>`J6lwgjuTSia z?osIwx*B4s>4@R$ysPI$NoUf8V7PzY`_qw1IZfjVYdtdT$Oxm0dM?mRZiQ{yFkpk6 zrV&%c{AQCT{k6DErsvIiP<4luKW1rKY*@j{sjJwhvxK3KILyY&7VnKV=qS8n=L6O% z2>>J8C!843pHPKuB{$6Tu!<#_e_-~O)|Wc;7)6<@@5xBY3Q8(a8hCNO1> ztEj)+-PI@KSafeWht;U1rT^+_o-;{ZGtNs`;zFbI=5p)0&(A-#PMdaf^H)ok)`f!W zmK!afyj{Z}W246AeQPFeH=MLN;IiMRbfCwMuALxtj_JmVH@;d+CAKRcC~}#;WZKPt zTdpYWf7Ht2#O?LG{o)5_Q^6`3ox=dhckW%t^v!IPb$a;lh z(-FR`4uy@)#0V8m*4ErnBIYQ-UzD;SFU@_cl84lZm&t3*AE`*PbaE#>eAGIto%>Op zI!Dm@0B(O%xl1;CB)(TWPWW|X!v^45le33I3-?R2taR7mmX`L6(fTh}#^NY*;msM% z$CswtGfvr%)2Ps;Da0K%vvWJKGdgCQ}u12&;DRp?=YUBjk`)bG0YXZ-oD|c9RIX@M1I;gPTFyzGX lzuN>@9BGP#j{Ij|^@`*1k!e~_fX8Vtc)I$ztaD0e0swoe