From 5d059a9b085dd39ff3b7cd9cb45e2b40a303b60c Mon Sep 17 00:00:00 2001 From: osmarks Date: Sun, 25 Aug 2024 16:18:02 +0000 Subject: [PATCH] misc changes --- .gitignore | 1 + cfg/config.go | 7 ++++++ l18n/en/auth.json | 2 +- l18n/en/ui.json | 38 ++++++++++++++++----------------- mimetype/mime.go | 3 +++ mycoopts/view.qtpl | 2 +- mycoopts/view.qtpl.go | 2 +- shroom/header_links.go | 2 +- static/default.css | 47 ++++++++++++++++++++++++++++------------- static/icon/euler.png | Bin 0 -> 26382 bytes util/util.go | 6 +++++- viewutil/base.html | 4 ++++ 12 files changed, 75 insertions(+), 39 deletions(-) create mode 100644 static/icon/euler.png diff --git a/.gitignore b/.gitignore index c450f48..78f1d86 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ mycorrhiza +demo diff --git a/cfg/config.go b/cfg/config.go index e4eb3b0..548d5d7 100644 --- a/cfg/config.go +++ b/cfg/config.go @@ -43,6 +43,9 @@ var ( TelegramEnabled bool TelegramBotToken string TelegramBotName string + + ReplaceFrom []string + ReplaceTo []string ) // WikiDir is a full path to the wiki storage directory, which also must be a @@ -59,6 +62,8 @@ type Config struct { Authorization CustomScripts `comment:"You can specify additional scripts to load on different kinds of pages, delimited by a comma ',' sign."` Telegram `comment:"You can enable Telegram authorization. Follow these instructions: https://core.telegram.org/widgets/login#setting-up-a-bot"` + ReplaceFrom []string + ReplaceTo []string } // Hyphae is a section of Config which has fields related to special hyphae. @@ -191,6 +196,8 @@ func ReadConfigFile(path string) error { TelegramBotToken = cfg.TelegramBotToken TelegramBotName = cfg.TelegramBotName TelegramEnabled = (TelegramBotToken != "") && (TelegramBotName != "") + ReplaceFrom = cfg.ReplaceFrom + ReplaceTo = cfg.ReplaceTo // This URL makes much more sense. If no URL is set or the protocol is forgotten, assume HTTP. if URL == "" { diff --git a/l18n/en/auth.json b/l18n/en/auth.json index 307420a..39d728a 100644 --- a/l18n/en/auth.json +++ b/l18n/en/auth.json @@ -18,7 +18,7 @@ "lock_title": "Locked", "password_tip": "The server stores your password in an encrypted form; even administrators cannot read it.", - "cookie_tip": "By submitting this form you give this wiki a permission to store cookies in your browser. It lets the engine associate your edits with you. You will stay logged in until you log out.", + "cookie_tip": "By submitting this form you give this wiki your soul, thoughts and mind. It lets the engine associate your edits with you. You will stay logged in until you log out.", "telegram_tip": "You can log in using Telegram. It only works if you have set your @username in Telegram and this username is free on this wiki.", "noauth": "Authentication is disabled. You can make edits anonymously.", diff --git a/l18n/en/ui.json b/l18n/en/ui.json index 8350b05..b68427d 100644 --- a/l18n/en/ui.json +++ b/l18n/en/ui.json @@ -11,47 +11,47 @@ "delete_link": "Delete", "text_link": "View markup", "media_link": "Manage media", - "media_link_for_textual": "Turn to media hypha", + "media_link_for_textual": "Turn to media page", "backlinks_link": "{{.n}} backlink%s", "backlinks_link+one": "", "backlinks_link+other": "s", - "subhyphae": "Subhyphae", + "subhyphae": "Subpages", - "random_no_hyphae": "There are no hyphae", - "random_no_hyphae_tip": "It is impossible to display a random hypha because the wiki does not contain any hyphae", + "random_no_hyphae": "There are no pages", + "random_no_hyphae_tip": "It is impossible to display a random page because the wiki does not contain any pages", "error": "Error", "error_text_fetch": "Could not fetch text data", "error_try_again": "Try again", - "error_go_back": "Go back to the hypha.", + "error_go_back": "Go back to the page.", "ask_rename": "Rename %s", "rename_to": "New name", - "rename_recurse": "Rename subhyphae too", - "rename_tip": "If you rename this hypha, all incoming links and all relative outcoming links will break. You will also lose all history for the new name. Rename carefully.", + "rename_recurse": "Rename subpages too", + "rename_tip": "If you rename this page, all incoming links and all relative outcoming links will break. You will also lose all history for the new name. Rename carefully.", "rename_taken": "Name taken", - "rename_taken_tip": "Hypha named {{.name}} already exists, cannot rename", + "rename_taken_tip": "page named {{.name}} already exists, cannot rename", "rename_noname": "No name given", "rename_noname_tip": "No new name is given", "rename_badname": "Invalid name", "rename_badname_tip": "Invalid new name. Names cannot contain characters {{.chars}}.", "act_no_media": "No media", - "act_no_media_tip": "Cannot remove media because this is not a media hypha", + "act_no_media_tip": "Cannot remove media because this is not a media page", "act_norights": "Not enough rights", "act_notexist": "Does not exist", "act_norights_delete": "Not enough rights to delete, you must be a moderator", - "act_notexist_delete": "Cannot delete this hypha because it does not exist", + "act_notexist_delete": "Cannot delete this page because it does not exist", "act_norights_rename": "Not enough rights to rename, you must be a trusted editor", - "act_notexist_rename": "Cannot rename this hypha because it does not exist", + "act_notexist_rename": "Cannot rename this page because it does not exist", "act_norights_remove_media": "Not enough rights to remove media, you must be a trusted editor", - "act_notexist_remove_media": "Cannot remove media because this hypha does not exist", - "act_norights_edit": "You must be an editor to edit a hypha", + "act_notexist_remove_media": "Cannot remove media because this page does not exist", + "act_norights_edit": "You must be an editor to edit a page", "act_norights_upload_media": "You must be an editor to upload media", "ask_remove_media": "Remove media from %s?", - "ask_really": "Do you really want to {{.verb}} hypha {{.name}}?", + "ask_really": "Do you really want to {{.verb}} page {{.name}}?", "ask_delete_verb": "delete", "ask_remove_media_verb": "remove_media", @@ -60,14 +60,14 @@ "revision_title": "{{.name}} at {{.rev}}", "revision_warning": "Please note that viewing media is not supported in history for now.", "revision_link": "Get Mycomarkup source of this revision", - "revision_no_text": "This hypha had no text at this revision.", + "revision_no_text": "This page had no text at this revision.", "about_title": "About {{.name}}", "users_title": "User list", "no_rights": "Not enough rights", - "reindex_no_rights": "You must be an admin to reindex hyphae.", + "reindex_no_rights": "You must be an admin to reindex pages.", "header_no_rights": "You must be a moderator to update header links.", "media_download": "Download media", @@ -77,8 +77,8 @@ "media_noaudio_link": "Download audio", "media_title": "Media of {{.name}}", - "media_empty": "This hypha has no media, you can upload it here.", - "media_tip": "You can manage the hypha's media on this page.", + "media_empty": "This page has no media, you can upload it here.", + "media_tip": "You can manage the page's media on this page.", "media_what_is": "What is media?", "media_upload": "Upload", "media_stat": "Stat", @@ -88,7 +88,7 @@ "media_size_value+other": "s", "media_stat_mime": "MIME type:", "media_include": "Include", - "media_include_tip": "This media is an image. To include it in a hypha, use a syntax like this:", + "media_include_tip": "This media is an image. To include it in a page, use a syntax like this:", "media_new": "media", "media_new_tip": "You can upload a new media. Please do not upload too big pictures unless you need to because may not want to wait for big pictures to load.", "media_remove": "Remove media", diff --git a/mimetype/mime.go b/mimetype/mime.go index ac5bbff..7b673a4 100644 --- a/mimetype/mime.go +++ b/mimetype/mime.go @@ -50,6 +50,8 @@ var mapMime2Ext = map[string]string{ "video/webm": "webm", "audio/mp3": "mp3", "video/mp4": "mp4", + "application/pdf": "pdf", + "audio/mpeg": "mp3", } var mapExt2Mime = map[string]string{ @@ -65,4 +67,5 @@ var mapExt2Mime = map[string]string{ ".webm": "video/webm", ".mp3": "audio/mp3", ".mp4": "video/mp4", + ".pdf": "application/pdf", } diff --git a/mycoopts/view.qtpl b/mycoopts/view.qtpl index 935e4de..cfc43e4 100644 --- a/mycoopts/view.qtpl +++ b/mycoopts/view.qtpl @@ -28,7 +28,7 @@

{%s lc.Get("ui.media_noaudio") %} {%s lc.Get("ui.media_noaudio_link") %}

- + {% default %}

{%s lc.Get("ui.media_download") %}

diff --git a/mycoopts/view.qtpl.go b/mycoopts/view.qtpl.go index ddb1450..c2304bd 100644 --- a/mycoopts/view.qtpl.go +++ b/mycoopts/view.qtpl.go @@ -137,7 +137,7 @@ func StreamMedia(qw422016 *qt422016.Writer, h *hyphae.MediaHypha, lc *l18n.Local qw422016.N().S(`

- + `) //line mycoopts/view.qtpl:32 default: diff --git a/shroom/header_links.go b/shroom/header_links.go index 0d2be2d..aff86f7 100644 --- a/shroom/header_links.go +++ b/shroom/header_links.go @@ -31,7 +31,7 @@ func SetHeaderLinks() { func setDefaultHeaderLinks() { viewutil.HeaderLinks = []viewutil.HeaderLink{ {"/recent-changes", "Recent changes"}, - {"/list", "All hyphae"}, + {"/list", "All pages"}, {"/random", "Random"}, {"/help", "Help"}, {"/category", "Categories"}, diff --git a/static/default.css b/static/default.css index c1b708e..03a0c2e 100644 --- a/static/default.css +++ b/static/default.css @@ -21,7 +21,23 @@ ol:not(.mycomarkup-doc ol) a:hover { text-decoration: underline; } /* General element positions, from small to big */ /* Phones and whatnot */ body { display: grid; row-gap: .5rem; } -header { width: 100%; } +header { width: 100%; display: flex; } +.logo { + padding-left: 3em; + display: flex; +} +.logo img { + height: 4em; +} +.logo .ominous { + width: 8em; + align-items: center; + display: flex; + padding-left: 0.5em; +} +.logo .ominous span { + text-align: center; +} .layout-card li { list-style-type: none; } @@ -30,6 +46,8 @@ header { width: 100%; } body { grid-template-columns: auto; grid-template-rows: auto auto auto; } .main-width { width: 100%; } main { padding: .5rem 1rem 1rem 1rem; } + .logo .ominous { display: none; } + .logo { padding-left: 1em; } } @media screen and (min-width: 500px) { @@ -48,8 +66,8 @@ header { width: 100%; } /* No longer a phone but still small screen: center main */ @media screen and (min-width: 801px) { .main-width { padding: 1rem 2rem; width: 800px; margin: 0 auto; } - main { border-radius: .25rem; } .layout-card { width: 800px; margin: 0 auto; } + .ominous { display: none; } } @@ -120,10 +138,10 @@ main h2, main h3, main h4, main h5, main h6 { margin: 1.5rem 0 0 0; clear: both; .heading__link:hover::after, .heading__link:active::after { color: #999; } article p { margin: .5rem 0; } article ul, ol { padding-left: 1.5rem; margin: .5rem 0; } -article code { padding: .1rem .3rem; border-radius: .25rem; font-size: 90%; font-family: 'Menlo', 'PT Mono', monospace; } -article pre.codeblock { padding:.5rem; white-space: pre-wrap; border-radius: .25rem;} +article code { padding: .1rem .3rem; font-size: 90%; font-family: 'Menlo', 'PT Mono', monospace; } +article pre.codeblock { padding:.5rem; white-space: pre-wrap; } .codeblock code {padding:0; font-size:15px;} -.transclusion { border-radius: .25rem; margin-bottom: .25rem; clear: both; } +.transclusion { margin-bottom: .25rem; clear: both; } .transclusion_failed { padding: 0 .5rem; } .transclusion__content > *:not(.binary-container) {margin: 0.5rem; } .transclusion__link {position: relative; display: block; float: right; text-align: right; font-style: italic; margin-right: .25rem; text-decoration: none; z-index: 2;} @@ -142,31 +160,31 @@ article pre.codeblock { padding:.5rem; white-space: pre-wrap; border-radius: .25 .navi-title a {text-decoration:none; } .navi-title__separator { margin: 0 .25rem; } .navi-title__colon { margin-right: .5rem; } -.upload-amnt { clear: both; padding: .5rem; border-radius: .25rem; } +.upload-amnt { clear: both; padding: .5rem; } .upload-amnt__unattach { display: block; } aside { clear: both; } #new-name {width:100%;} -.prevnext__el { display: inline-block; min-width: 40%; padding: .5rem 0; margin-bottom: .25rem; text-decoration: none; border-radius: .25rem; max-width: 49%; } +.prevnext__el { display: inline-block; min-width: 40%; padding: .5rem 0; margin-bottom: .25rem; text-decoration: none; max-width: 49%; } .prevnext__prev { float: left; } .prevnext__next { float: right; text-align: right; } .page-separator { clear: both; } -.history__entries { background-color: #eee; margin: 0; padding: 0; border-radius: .25rem; } +.history__entries { background-color: #eee; margin: 0; padding: 0; } .history__month-anchor { text-decoration: none; color: inherit; } .history__entry { list-style-type: none; padding: .25rem; } .history-entry { padding: .25rem; } .history-entry__time { font-weight: bold; } .history-entry__author { font-style: italic; } -table { border: #ddd 1px solid; border-radius: .25rem; min-width: 4rem; } +table { border: #ddd 1px solid; min-width: 4rem; } td { padding: .25rem; } caption { caption-side: top; font-size: small; } .subhyphae__list, .subhyphae__list ul { display: flex; padding: 0; margin: 0; flex-wrap: wrap; } .subhyphae__list ul { font-size: 90%; } -.subhyphae__entry { list-style-type: none; border: 1px solid #999; padding: 0; margin: .125rem; border-radius: .25rem; } +.subhyphae__entry { list-style-type: none; border: 1px solid #999; padding: 0; margin: .125rem; } .subhyphae__link { display: block; padding: .25rem; text-decoration: none; } .subhyphae__link:hover { background: #eee; } @@ -187,8 +205,8 @@ table, } .transclusion_blend .transclusion__link { display: none; } -.layout-card { border-radius: .25rem; background-color: white; } -.layout-card__title { font-size: 1rem; margin: 0; padding: .25rem .5rem; border-radius: .25rem .25rem 0 0; } +.layout-card { background-color: white; } +.layout-card__title { font-size: 1rem; margin: 0; padding: .25rem .5rem; } .layout-card__title { border-bottom: 1px solid #eee; } /* Other stuff */ @@ -323,7 +341,7 @@ kbd { transform: translate(-50%, 0); background-color: #fff; - border-radius: 4px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2); } @@ -498,7 +516,6 @@ kbd { line-height: normal; display: inline-block; border: 1px #999 solid; - border-radius: .15rem; text-decoration: none; padding: .25rem .5rem; font-size: 1rem; @@ -991,4 +1008,4 @@ figcaption { padding-bottom: .5rem; } padding: 1rem 2rem; font-family: Georgia, serif; } -} \ No newline at end of file +} diff --git a/static/icon/euler.png b/static/icon/euler.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6f75d254d821987d066dabd4155728dbc8663e GIT binary patch literal 26382 zcmeAS@N?(olHy`uVBq!ia0y~yU}#`qU?}EbV_;wiu;8j;U`V^_>EaktF(>x#%}FYe zla_VX)`$rPh8llXoffld)2`LkQnm`SW;1roa+smWkl(;gOk_?bmw4kDGIEz@_-o^`@<&!0d4?N7h2|8MbL4e)~(I0WB83d#Y<5U5~GOdcOW&`nSCw ze*JN}9ai`2b^Ont%lCi!@xei4>D9UStk;^9-1zP;D)^>$0So7g4fXCUp{_0rZzNaN z_i70#F?20jEd1AU*^CAUF3pb*|MIU$;um54f3UP9Aa%>ZDay}3x5jZfvu_RY()|*5 z^Ly{~>EUkqIltTb4oWl!nN?-;u$Agxxm8hDmv)md3i@oVSIo+s^A$ zE&{XoOnBOEoECrcz4^bnhU1&(?5-*b8nUi$#0-zj`|Ti@s}ktg@#Wr)@4Sw06WtVD z9aRLDpSa-me(KsaJ=b>Zi@CXtS1@C%kymn0ACHG+;{l1ge4($W+>6*g^_G&3TPH}#_o2mPvE^Rlsc9+BA4on)`Vq3G7c66AAa zO2Yt~kJP;9HsBOry zg?~yzmeSIhKerg@s!z*(`tx>p)OwfB6>M9|n=~AC5Ae%ASQ!|^@FpN4LE_uypHBq@ z{k5H(rY>kT)M@#Wmbh!H*XrId>EHW=ofTRfvYQtk&P&esDc<$}=-%7&<(*&NJvWbI z$&?p+o4NY^`#C=B+rRkhxovNAZXf$vm3%u-?wfVrrp%ygnEu)8nsshtqeiy~13GKVzvUDCfnU~UY=k=o6 z`#bkWsYGw@efsgx{C}(K&ws!FUv61ze)LlBN7wV`dumP!c5+|7%}LXG?Yld1^D6)S z;qE`}B(&nHUV?yQlFAZ~IcaTNLQ0zF=bRJI+aA8HR()CL3?|0ZDX$#wefrO!$Z>@OITcz7J#lH=6aPVLJ-6P%{c$~m$8{r<YyKvX+Oi$j-H!5;j}3SW#HXM=4_O`YTZZvPUNL8L>EaDjhLkIAJ;Ivdh}uC~l<< z>DCP1^VUuZ)7W~KKfXu!`RAFLvrbqVx3%t=V)SUDm&-+g4#lA8%`5sN^mv$@H{KV_ z(#*N-mdmT6kiBG^*W0<3J3st*$ecOP!uv`2=Oa%aPJCLT=5M^3EvcWUWv|G*`1O1C z#a)bh`|N#q-2U3fPhY3k{d+zC=dYjP%cjgIatlh(4|}7g-*x_U=Ya)Nr(R^&|IOz3 zqV_}i{~!65`+s}9G*Er0|Nr#=Gt1}yJN50BfM9o&^Tdbti?2I6PnCFV8+6;6bHRj? z1N%gy*50|cI`lu!w{4f*7jJjdWIgIs|6%r&=f>UJg$&(-KF#r5@b%aQN57lho~w0_ zz1VVZg2c|fdxEkSzq3vbd9CHOG)LM=?fJ~qodN7$u60x=-q#I{m6NZis#1C0sUX(4 z<|*fq8TW3d~E^+CZIp_SD(}xraye5`^c8b$Gv)p+3 z=hn=54G9nTYuWy|FK@NgBrY!g=C-MGl$O4=ssDLodVJlZpRd!`oxiVf+v^MWmD>xp z^{tq|;UVwy*@ds^T9RUv(rJ^zyJg>^ex9EHpZoLm^ktWol`uEpejkD(8&wQKu zzgaK69F@M8ZT!E@Ri^A^6H60IHv8|4nt#7mi?bh;pJViNW@ePcs-Am}SGu_N9}hm) zG9lyYEFP93uO%~d#CsFfbyc5bs_W zdfTSyhu&>3xg8edv*n(nmZ4jg?h%obnoSy8r~F>oe{fZW?5SPr_S}o(P~3RcD?D*l znqU8Wi+H(?OeZHd*8nDG$HzW#dM#TvO!w;$_}sZ7OLK#1cH!y1R|%dIi>ja1|E&LO z|MSyp|0!ROZHs%kR@hnLs6$U!cE)R-HL<>xo5VtFy^e8k)!tw5Em1xb^ATxt8Y3)}DmC#iE*`kHX3M@tEJUo`n zn3<%s)MuXBvdY9+>P{UkG7}Z9WVzl?Xt-sbu{PTE_Ej%I*((<{eP6~3cs}`=a;^HlJ)3?=rcG@bu$aQJ$?U#4EHs9N0EvU0; z%G`wtiU#_P^7TI&FF#ghUY)F>V&bw&EBU}CpE=KFJ}pV>Ir#dt`2>e~X=47muXk#)gd^#tkK6KoN1mj+r(a}*x~MJFJkTJ~ zk{i7PQ z2{`iWp1=$>?oz3iDMp(5OQy_FbH2QVThTqqYmQ&KKqAkdEv!-UTdv*Qe%5amUx`NY zjki-0N}E`=3g14q_ieB&&-=Hk8ktQq-l*Bfocn&_(`SGC&p$t(dhWkJ;M*hi^_!;N zjZ)-%v7udCal;({nm<2e@7Mmft(&V4TGxf= zDIC!~OBTHO>K41cC(cqmp~UY0C*%5`=l^%^|8u$i$*;H4-exUEOC7o<8nW$`T%p>r zaC(G$)gP(7#%}5Ncex)TyZq-)^z>&AD>2zvl`*L@=dG`#Lat0<&>2sOkln`5<_gnjUJNv&6f8CQ#9hve* z^6T8onQ62976e4I=ElgStv;nmNP7Z2?lIE8MeO| zoVu=D%CMTCz|)%Q**33lZj{#A5V!X$%2Zrbq&9@DD%V#G`fZ?5)Ai<-0^6$>Vy|?k z7`c5oZo?BO!aP}Et4IUOwBzc#P0RdVIId~x6KuNsB~d_-cY@)Jpl^R}$@B&#ZP>TH zs$;T7OM+;Aw%DcY^D0Gn$#>Vixqa^K*QvKlpML$?8Wd*LdvDeD zh0U6(b~d&@*CcJo-F=mXL;l`e9p9xsJ~tUI=jdkMFOTz1)^EKgr6BTOM|Q?@VgL8@ zDk^HWtg>R+_V(22&*4Rzyf<7wv`y66qxjLbw>^CE^Y<53*S1~sG@MwJbieGiR#U)h z10AJw??R&&d!qwi?A^JlX!lxB!eTfC zm|fn8eA^V*t=K)^zW&kq|3B?NU%vnE)a%pQ@piS3Zf{S25oW&Nf;)5Qv!_R%K0NaD z)U0`7iUf?)lH6gx-U<vvYsgN~J@S z)`(74;W@r<`HUBPKYl)6|M=(6na`iE-?MK|!QQya%F1Qa=HAn~z0K%sw_mvG z&*}L8r{0z=F7KY8>6-PjEtgNb>ilw6(H(d5a&G5+sO;dF=&&WvkvH9+Nk}PBxq9WB zYUgFfg>_GUzpp=Evis8O{Q+_Nf2E6s9E;xfewviq=U4Z+kEn1=mWV2|oA04nxGzR0 zoW;6SXwmc62X{$YegE{S_w`q=o964*huhWvbII>5jpeQ7F4!IGICX|n@VPnu#`WKi z{}+9Kf4{p+#@@T}VXx=b^~6Vij-P6_Mnh}qr9FKXS+^FNX|1)3aB6?*D?dr+vx|-H zoUE@eXZCJF zYU{P{^8Y8^u6q3RY3uE;&t9HZ%5j;H(4KkMeBJfc_oK99*u9n-3pnxc)klA|i&8(9 z(yprR_uM!$uEO5`OYY<4&-0gv1kD}&eF zFm0vO3$sG+-rr~Y`RQx%eYJnj?0efM&U1K)^MjJ8fY51^MLP{y?CQQxoFja5<4+Og zn;R<}Pb8fP(LMeqJ~t@hPnadcQl6;0xm7E?dS3EQ3Uh6*+GzS>?d`@Fy+NzCck`CW z6n0sRhRNW5b3{L-npTN*f)zNwphdvB_>)2|E3pVIX0 zj=reebDQIab!U6~;}$Mw_N8L$uD_O@)TemqYLMgVtNX6Gb?~s=T6v*M{Qo2sd?0?D*H;} z_79up{Mi2gM}9=UdE9#aHQPli8{=kAOsG72!mXKQy0 z2e0|dqabkj!N-v40X`$FQ0-kj+*>Blt=-@condsCu3 z?Q9&^?On_prXSlUE?~2XS6iU=M$`9qx3>jnFYZmVaNjIveJo)`hCxx=Rj#A28U-q< zY98I)?QU07bAH!)oBHas+h*VPZio%nU!<(47V`Ib*F(P6)mnSQUTw2F!h1h1o}$m+;GufH8z+A>)#nWX+ZyZ^8I>NkHKr`D$ToU5w+csc3w`-|*b&AJ&RlCG~_ zTxsQDSXHrY@H2h!9bo^zw*~2hW9E zgVv}MZw^m98}^dfZTtE4Nf*_bG+jPfZd|7wU8u7-G^t_Nda>M+0z3N;?>-$lzMOx} z>r>P9=U3ELF5_Qno}S$6mTh+W#nww#>*P4OoI4%F<-=EBl8sd@+QRfL-6DMgSGRYAW z#e-Asmwn4sKiaX%cFO6ejhRvJCcKq(_}VVF=wPW4mCVu|(Z|^`Awcr`!3kRrnek5He=qm-|EKzY_BS(MpHmGs-4XWj&)vT) zk$v*DdnOujmI=>oRkBO9I@H^GEAM~r_GyL_oK#vkn6`>2r?xp9$h#$Y>&i~HTzLht z%Aj*+E~o6=%Z+IPUeac9>$_!Cj=-djPZN3q7M$zh zxcF?&qOPoj42SkYrq4W9hYUqp6z!hr)O}S;v%Z5iXa9Wo`#tQUd_`l+?-${=PdXBUZTau6EkFKrvM>9_L)kry z$rt*Yuh|A^vQ4{j;rtJdTOJbE3Ov*Grgv}OFilK!;kI+z-qrm5=A=3I^3O9*A2z1i z2|7PA(Vz2drrj03L%FG|uktysbaT+0{q(s=rOo`ANh#~6zW$naBtX#Vfw}$W*a+$B z@-3_5J*veHb}AS>F}Gptp4Mr&V*UKT+mCd&D!cCqeSh4yPw4H^V+|fE9UH5r+1&N7 z?+7z=H`EF{H+il_;IhnzkK6fG>{lM_KJy^=dO^i?zsxUt)_w0XTmE9tz7Ntx&U=e=!xGt{Jo<#k&fPds`nz5nFNgNJ+lxto2z6&wk?x5`}pmC7pN zz`%Fv+qQOf$aY-p-LL|7N-)lRnOAb*={&iU}LFRtf3YfI#ldVaqs z`lHr#Bzcp>y7>6q84|hb436C1adKzAg%U?D&#qYl zPApOK9L$2MJf@FaeVz!sx7_lr%%A^Y{kpw3W0d@b6J!fc&%7kHSbMQ{t=yHo_Of}} zf0NjgcIQmVI=sGe=FT~0*KVh6-&(eB&z^wYzD6Gdf9=tEVzSXkn18vjzW(|>`}S?h z(|$VRi=x}=**t8UIPF{JblZ0C4aW)Aww`hHZs~$@O*X+LdO!3kMIgX?^5dg*t9c580z&u_oH z&TT%=Fy-^l9+wlFedVIpzj^KVy6$3vJBIufbHX`gYK)ab!r0hPH0|H;@cxZ<$vs<3+*M8r*~S;QXCAd??-nXA zxcKQqfKu2LIf1pSW;wl3m|T%4x!gsDFSIJ;)m~?zMdjv7ZjtZ%l8y<~F@NG%bdZmo z@#KYBwQIRD%z2b#Om-&vr_EE+OlnqqlYZ4;#-s_!Y4he+Solwg`uXiCcWOw&1Qt2} znW~)Y*IVD-XB48Nd$o~marxQLE^od$ByHum@>;>;!NU@>XJy7~9yIKAWjZ+jv*H24 zDH1{lmo*-m^1RwwCCS|ONCE#vcOl6vW{Hc7|4OvvJk1DS{m9v1?wp3?FKkk6QygRS zo~h=1s#&vl_p-CMj!P^OFZ@=thG#>2g8kLNs~pU`PgMQ4{Vk)l?4!iuXvWGdJ~!UC z%S=$2#y6)m*|be`S?&xcFUgGjwv{sNMy!V#F3oBTzbL=OMcOoZZQ^^`x1yYEH(KV* z3|{iptFcgbKR>P9-_QM!?e#rg|CeD`S8FInCHSAb6t#YuQg!>SS;4QE zV)=aB-ksN5nxLGR&v=ykVabELO%m7daq^VQ#P1tu{3FB>z>) z*bpty7qEU}$%VSoJ zMBR0C7xBDPKeo8#gyW1i$0Cw`%n#J(dwb!iLQlflwPuf<`DFi1T4VicvGI|vsKt7> zdy*T%7iAK%`#`p>ujTy!_$9KTJB+{|e=x3vG}TQSi~=-x7E8GDf? z9qJBt}Tm5j%_Nr5AZqMfzmTUVMBfGb^ae+bAXPb53nLpfCD7eC_^{?9f z$Oma@)f+a2C2iaO@4xl9;$u?5y5-uUyA7K}n;ieD$~Q^an_IdvCx@(Ucw^R=XSL_J z9}j2GqHFWJZm-P|lUzRx{BKQBh^{^ydN7yOK0?<$U6e`T-I z$$8sXZS0xtbjm4v?yXrDZ@!c0sa@}!ote8?u-IAPakauprxz0!96j{cQSg7RNk@`y za{06Tl}EXDNJvTvY-Jb!;cIBwbYDpI!E!^Fs`X*k70($TT`}fP+#9V@Aag_Up?T-z zuH-uhwT1V$?g)9st605w-RCj?IhFDKESt5a zQ>|I=op{P+8OS@SWXt6x(WRd)nY%iSmY&G;QZd~6`P;AF>G|hh&11)7k4GMNqzxWl(AzW7vETVAJHv+yDTjNM-Fx#Ce7`t-ndelpK#Rx9?db;j z3(w^LeXou%F_t9h31Vzn>$H2eMS+OR^a`Mrv!TAouZ8;&&`>*+c6 z_Ukc;sW$pPm1@f}GPm*yom9#a$Xc&)Qf>8N<+vWc{>M8$9OUFVCn9^dUFGdRh4=0X z5z>Zjhu7V^d_UGzrYF^*Ji_GY|9FSa!aD}5Q<^z=_J01+*Dhf>W77^h`#b#JBCq?a zSALILFy*dNTe+AaTl@62xmVWJO~_%m(q70C%(G&$a`sDya?Rh-+XWYWd>OTsF_0td z$hACuTZ`$A{T(K^_TIIv5M(>a#XcovWq);7m)7b1apL2N`)9XD z>hJ1{e<9r&bk&8+eX>GCD3|-iG))Dz!wWf+ZdtsYCT0^QWAH}W{X$klkngIz)-8qq z`r_U@>}{);>-H!MaLX^@y~Zdby34wLh5xm-#pyei%(}nt!Z))7tE#-$^WQdZduQq@ zAGd|CB&1yQm z>#?6DNwd;JbVD=O9?7|%&hy%V$E#eo>3X0d%cQApcDC7WS6A^h@YHg@wX!OC*F3k3 zC%W(DM5})?OonMJ%<2xD?zg)Ht=9bB9L6c=#C~gs_~PUr64&MB{uz1YzFV}=Wxi+6 z#rJnu8QVJk+mt!AKY#Dswl-nn%NYt?PjhGAzTLQa7eo4g8O<{yevGRXdy;bX@6>R! zEt=b~uvKtz{p%Mj?$4YWW^9nIEl~UOIkI8PmPyMbW4q<^3bQH``WnT2b`(F*RXic9 zKI8f1`n8w7J=@B0?r4sfX4L2O_nHU%cHMpS?nrOrzh}$3o24xlTzJoE##a2_BFdmU zLoId_hvB>W_NpTR>5H8TOjq|8H{V?B;_tsIA?Lwi)z`e%23eEuu6ul~HDO`G7jwOu zD;F)7uE)^ z+kQ6COZ9onf+aa3{~vFN=K3)EmBaM&FYX`P;r_8Sq<`MYH;UntUANy~PBvi!DzH?B{4|k4zW+{_wKx@mF)d>Be2~=y;;p^!)ZkY0HSC^)=HP9nZS& zO-Q_$dEM}0_QGpP^PSHKzmQmeYOh#lT!ovnMfLvG`TZfqXPlZiw49C$dR*OZx%Yui znxpE4ImHD&KK)4rCB_93NrE4?=xoXJcr=A6dgF6vgF82bwyZHBuzgQmI?zEx(?Z?R%f6pz_ z`*dvUb?fBsyd_e5I*o(QJ=n8d@gm<9gXxCdPWjJ7-1l@U%F45RWcqBe=kV=ym$Xvj z-%rf?!k7G`(ncZEbn@zyCH_vIUZn5`w?E`IoMk0-{LR5A=W08)8sC#&s=g{zcTFfx z$#}jieqx^NrNrr*b01AKxy7^V_7T&iCrq?|zxcxF(x*jdL!f@Q%W?5tVl$$&15C1Hx`@DC;#_%Mq5XS3bNr{*4Zs{{w6nj$0^Cp{O z$?50U=F74B=%hqTzWAR1!@={Urr=-woV`C!Z~K4md)AzvCU;wPxXk8wc3S%OT+G=K zbb5BRSXRoUX3Hzu?#}twN{$7eFq$nERPg0u+@_fkZsr%fc&tpc3ohF*FEe-O_1^Hl z^^t3_H1i^XBQmU_s{W0seqSUqau??8=JxE`x=^U+muwsVnm-Gy+>I-|#By468IKfh z59<2JxtGssS7QnP%f9y6DX0HWIq_Ffs`gZhXa0vr(h{5@%qKN&r}E;9ETcfC*RM|k{Z^$1D-CaOSd^7p*Map3Pa2yL^gQkDILZt0h6) ziC#-A?(UxaM6BUJ{<1Z741Iqpd>;4l*In3IbgoD4#l`18yC^Yf=q4yz?AoeX#^STQ}x zb$vsK^o<=h>#lmuP_J4&B`IsUfUzZO)Rsuc4^6&h+^=Krp3_S+J|%NF@nc`t)xt?{ z--n;+NRB)A;>5I5vrb-BVR_Pbi|;v0*K^zFF-JAxc1FK=zxUU}%HmlY&$7gupy#^Q^!f8Y6)DeeC8naH}R z)rAaSc?C_@F1Y*UqSRKa=Mxei$Aq8hGM>{sLw@6n1-a5b+?x}Q${$i`TqSsgW!jx37P6YW2g1VOJLvZ{E7O zJ}RH(%<|5J6A8Mlb0&L!&Q?CpcP~-gRdkX@`TW@D{6#Wd+h;a}PV(##uKzOen$yj* zVZ1WATTgwM{*E=UVm9lZz@4q1Gu;lpefcGB#f*zj8kso)nYuh@9X&gFTdirxdVW9k zVv~daYt}z~TYSsnk`?3n4ehf77M2;GS>ZL;%q(MZ;P>8bZ@=tvzTasyfnn+D?F%i~ z5{f4+Sf*m=$MicF3RTr}@%DdlOMqx7~wzxUY+DUoS& zDq_v^tJh|~E?JkiXlhWBzO>@3#ABtgE4LQd&3|Vs@0cSYviH4MZT3@+{hYTCfB0>+ zOVCADgHdDMLhBm`z8_v(u%q?svmFgHvNG!hb_MzUXi{xs4V&Uw07>L zV$Wt=w7U_V?y>0QyS;lRE%JQxJxF8gq`KrI0ny3&-zxc@1+G1O>v~+}-FQb{*R|D4 z^H_7AeG_!O6Mpjp(-z^TsdIgI*(Sx!j}Gg<)w@u+`}5;G zg_1im%Zro_wsfX$e>sn#TKh}jT6^21-Sg{q?{)wGqClgei`!;xMWDS(+a}&wWkntD zT%K+F^6ziasd8nu&x&6{F8{q?(Nb#{?{V=@Yt-j|a_4{FJ)*nn_@4{hA*PSn-ils% z)%^C`p|@XWZhF7vyZpsO3nDb@0XDi%~3=>MPoy0^JjM)k&ti2fvz z{G&?0G7XlVTztAQIYO)J=A3g)!VbKz^B3F|IC0OnVdvT}dxfm#EEk^s(?#XNx4E^k zH?tS7_*AvKsHcNHYx=>+?MLSycf6wFpg;BNwu`G1|2ntzcUb?9tEj3`X**M8{J%BV zxb|t0mGI_|dY2`9;?#N-TMRg2&n_#Ixnd%5OLMPqwyMC1#H5VxCj>0l6rI)HamQ!- zwprKf-!EIe{`WhrsLy*XV|MdZZTq{4J?E6j;m^B+5AhuO8t~*d(~Gpd`<~2kvG4O?OLaB(1In8Q#iSaaeka#p~bxCm7Dh2vrJx^sGIk}xztkMB;iik zu87*i4W|xnGi%v2#Y>F&%CCTR*R@ZZG+T9qWk22jXZrt?PwM(fOb31Enq{q>vNr0( ztKJuiJNYNq#fx1&|NR@|)4-J(rJ$m9Xl>u_mTYb7 z)cbdBZr^eZUEJ1b^AzT71?6PC59`Uo$tRD9OiccZuHq{S+huR9mc5GamZqiuQC*!!FTTWY-I z_NiAEzGO=>-+kSUYoZ~G%Ey|!H@>?~KCsnna-aXjz0+RrZH-xW@{;J`m!F$OdY32o zsh@rMtkH&D;n$mcEbFpYisgphxV?bK_^_2#qeP2{(aG;38RZ+a%e0ktSIV`jwCF7n zV3wbEZ}G2XGNyuy1+|lU-tCw=3+fLWt&=y-3y@$ag~*sd+zzH+^wCnz4!U+ z-b=eq9*@1gAoe8VvS6hZn)CIF_sKiB&MYL1Nbrg{ zy|A-+^>#y>^}M|Ye`@Z$zrp#}BZm0=-m7ar1y4Bf^Gl0I!mP7G&la5Np0Ri4%?-B| z4$e?*)bu|x!{g%HYx&`~wr$MQ-YaryUtx7+p~u!cnzvt9J^l7}=Gu^;P2!1Z7xQN8 zrOgg|)u%BfZEe`Oli57XnX4v?9=U6I$zQ4KC@s$K+^oI{Op9l}blaJGCvM#yyZs-&mOj0`t!T9$&rC5D z)ea`+e9NhQ*PXjuP4m}2-l9;lXw~(?eBqNXRxIIkp0?R{>Y|Ap!F=WUe#%KCQdg1M7-S1g#9^lL$E__gb^mu|2ybeU)}@qGHH z-Q_;h-7o!g>01_Kwe$SPNy5ROMAVt9HYyqTvnV;Utv&Bknx?D0G%RoX-2C`?Kfjz- zkBc+Aws!Ke&d)EI3^#@s3(cJ_eA?)C+2ov+L7!&|3a<}cVHIG?9&quX=KP8u9~{o8 ztN0q+m$)C7aa}rETBB9t*wT!{mojtDE$+C+>e=IBdg%9xtK453gB4~h`g_MMxLAGp zlT+6_8U-!cU+oG6C9SE`^Y3fCK3BH))93sDj=il~`sI*B@5>UUr#^9h+Z>e6X4ow@ z-1uzfCHCuUH`vZzUiY#&e&3#gX!9=d@ZbBS-uXZH{a)|S%YJ*S^ZO=lnOGtaopzG@ zv&fH4=F9HQaJBGH_cO}ayCF9`YW13@QMw+zD8Qjnclih*Cytk@IHT^!b34p@s&H*rP-?<3X|oKni+4u|AXoJ z^1x$JW!tiJZ=a4jb36Uikr^wp6Xz){&wN&6`SG~@pT5(NzyEpJey;s_e$C%ctNp;v$*;5Uuu0}l&}9I>n~q_{L`1d8mq;clb6jbiRw7`r*b#jwp%~G{M3&B|IPUS z7ybX8x%bz;>X~S9e$MnWo>Ob){(O4fFZA<l=-VaNv9z6WmnQ8Y~zy2The7o9b z*UyUynyMsg_d3P-J*iZB!g(h-ang}%R!@J<^gkcI?fNMR>4n;f{R-A^FN^^XAr9Y4=}{(5Zs`S~yZO0y)^?fCG${+IG+qsd7Rwnf(OdEdJ5 z(9cf?-q-)H4nDD>z;6Ca*Au4?{dsrjQ(a@3qQMEKy|?oAsx-d6e*VmJV@uy9Pko}q zrnQ&%?_0GZ1(v%kbBlaFw`k04UoLz*D~*@Srmn)@ zV`9I3O~Sv^`#+rj|0jLj>tlO-&J?H35`Nw;{QR^s@51&IB|9b37JN88UHnwo%dH=( z_6B-A+?5~my*K*i&)e&z=hy$7`F**t{l4nsm-k3$RV6TIolz0`t~mSZ^j9pm9^Ad5 zaO}v_nvdHq23(snDe}k~{q;wt{A}OH|7uZkrvax= zu*wlX4(moXtBFNwdcyX0b;s@hyzBh`?EZh|`S!KXPH)$bS%3b7!J1uHxE6o@TclL~ zKjYtbJC7BqkAM9-W54hGpV`anP3G6IE$WR6-_mED>*MT}q~gzQA1C+ns?W@O`~ROf z{=WXnUHxa5eD|CL*n zwUtk=$J>3}KELkKbN~1kH*)MxC*03_v)Ax!TDkhA$h6hUvv~NPPi{Waw0Mc3i|~vy zllf<#2|9M{iPNm};{VM5|NTEvKhsW&;D!(78*;il}zu<6O&NllyCPDnRjBcFf z$Ncw9jtgPB`CWCz%xMBCk6zwo-xBuiqm#_3^7nQIf1Mx9G2Z|0kMaEdH4DF;d%fI0 zL(^tY^^-3@9QeIXaB}um&I-(2v;Mq`(DMa-`I8+O;x?OTcKY)8yvs*D{x0@OF)I zj9QpCyU}Os#`|U2mp4qzd3(2K$|q(`j_H@r6wR8jV#d7{AFHZW{bx=Q-a6Cc>x7b< zFK%0P-Tx$1Qlj&0rmXIc{TB>Y{;sKW3B9>)ean>!kM}=nC2V5E&OH~l|Nq5!`|V@7 zHH$+hpRx6w>EW_9sLb7NdvD<0y?1jBww@6-J2b0oo zFKzfOtdgE>>3{E1WQv{dvI;Tjl%pAM9+@0_P+D9av_2)d!0&;D&m@!RJ_V?N9pKOGmJ9NyLxm05#?*zw^*^#np+}3VqJkMM@x1;0i z9EZ6aMFCd@IV=U0pBOgVDKMYfrle(KYqP24#3c1+5S_wb@(h z=Ju-{tLOC>{cM=qJ0U4$nuL+2jMDY2-L+pl}-fmhGL{bYtbU!-1N64sdC1 zj?pVuI+l2_%Ak$U&ynLocDl*qudM3JIF9*PRphGO40^<|#N_TuzaVz4xrQx^*w!2Q zwq*RMDOeu#RYN?vN_oP9^2%L_ugzXAk#^H(ZgITs7T(SG`DcsKjrFoKg`Su9=LIYC zuzk(nziIlZU!P8uMc>RfKlRURp7Hb3%#(7DZ`|QubZT-XOPg`>yo>8<{(hP|{cGAB zm#xinoRp5Ao3eI?^sVNwo;;w;}g1*uyHHw0%YGu&6USYT~*b#*mUVteL}tEc~_J!(2}=iSBBD}CF# zz8q#cyRA^NJ%ICEX}E#8uW9GjKCkuf{F>hCZP?4QTQoE;()xLV$-21r%v#^&jL-cu z)E4~x$Jsh#^TN|F%p&J7nJ7Lv^73KQgpzYMb~Ycc@BcIPYniglfe$GgbiU@dmpc|Ff@ht0gmIU+*Ad-B`1 z|Gwk7?e+P;xq|n<%zU?ZW6=!LlYg^C4$mnx=Q;BK{wkA9Ki$oV?hI~5ehw-@yY!=8 z%s#zA`WBm!)Ft-7+>T4p&e6`%``smM&MZygym`q@-R1kC$&RnB4O1Vh@Wo$lvpT(f zq2Ki&onJ?$)NG%aE5|7m@STl^ed^yI^4bACbF6AwcQ>dkG|!hzUSj=9YDVJ7eE1u_mcugTD_hj37)e8=*r!G5Hdb=VvS3k&SW^VSe zTU?C`MK8X1yXNKr-{41k&ZH@~|2?zyYIW^;=e2An5%Rt>gqRQH+1ap$~rq0 z{Bah|-L`34Xz~LW{*{h@40_nsUR-?hR*Qt-*$GNc2An%ef(+Kq+qkIr-m<;TCeqE` zDrat5wdOIe%@q0-=OCOev^z#}p_H6G|AaH&_y2GFY4rKmr&G(%@Begq{rrhy5z~y7 zXH>1)qOHhjIZOCefZ~$QtzmK3d&M4X6WhkO zS34fGQ{+($iZ=9nFnh`D-FgWLU$g~{l|J!()SdJB*$Z8}*G{qB&-wf=&OBJVCs+LV z(+khM-?j(1mTtL|OLwB)yA$DT^QuI1Xs5eCaAE(|MKmhkx8!3C^}R}vg~2kUaIGe6{WnRCh5-5DGm6N_V2*jON$D0E(dgO z3$>NHp=^1nD%G>I{qvEhCJVEwrJv=j{(t0c~^_Q4)5lacHVT3Y7*gemee#jw(y#yo`P*klKbks zt{7+M;~yX1@GiW$b9F`Z!j%@;=8~t6@#lT9^IWucwP*1sjn8Gu%T6w9dL-X~AT=8`0 zX92Fa9D-d;m6=5r`+vXI&p_F<1RpOrCGlZEJ_qI#Cu}Rb~ z_>}1DbJJx(gdgX-=^ZkMB3w$6YrWO_OSR6+Z_lll9(a8C%+Eaq zkw&LQUTnSdGDWKO_;F*y^kQLIw|TzLD!wlJY5(IZ$1(Zu+jBG@?l|5zW##ROKO+sD zR>sX=u)_b4*OFY!lCj0Ql_fK+C@!_mmcEoA*wwy)g(O0f8PIZ14 zx*|9I?(AB-H7B?y@u+{8x+(b7lALXCAKf}WWpl2ND_@4dh22xn-ktL*z<77q{$}y{ z%^RgQs;&rn?UmoUEB5BP^*u$&_w%-SrQeRYF0FrFKW4r8<^_U#qd!fF`>5@){_G;2 ztOHjj=DpQb(0Kmz$j^_B%gg=01X|8lo2L0WXzgjwlNqVcFZ;Y@V{#Rrt@e9$-Qx4X z?_SJ1u`&7FmVf(WH;GJ|XvuebOLa-dqhA*9-f~7bid|{As;uxNb5qCTd*9usa42Q) zJaL|{p?0tcege79Q^sP@%#IGf=MRZ&qnE9slKjcX!Y_^ z46E<;`U&p$vwCjzu3Wsf@W$z{X&2SinK$jR+q-@J-q2h70i;FGiTiVXat$%QsHB{AK zJ&7x4slcAwiX5LS)9!b#oRy@)cUfh&#TI$d^`ab_{@-J4kIjy_GCO~^=!&I{_m2HN zcH{IWrkC44vskWbeK5~y$M<+Hfsb7GSDx9&6Qw#M#P^79f33TM@mg%VZW-==An@80+6 z)7ztG=j(JG&3JqN<(40A7rb~5O71m?a?F1G?bDg(@%7JcKR^HGbr+wuLvLwp<=(t2 zY`e>D+dS*bQ23J9y}Y-M9ADLZZ_M5_-A{VokQcOjume(C{_##-$a z=if)?ZsUcdmsK8CiuDMfF2_r^-@y>#oH&!f3TdoPwhm%El#UpA|<=Ff@u|Ng}n zR(^Nc7n5VSxonw$#P#r!l5f|;UwxhW;Kb4{fnu|+(zQ=M&wN?(u zIekWRrp0Fy*J%?tF7=pw-=$<}9F($r@!F4nzRrHj6ve&$_PLBsH;3euo|DU#oZQ3e zW_mlu`1s+)i!a{E-COfb_sz$BE=6{}d;WiDd}=b=+N&?GJ2`iT%;KEza$~mVmtV?p zmL!CHH9VvBO`t-~HM%EmYW2hNiaRUHragV~`o{eezLUS?2uDu`mgW@ zN$1aV2zzKQefV1&PyC?>?$Yf6@z3(ty?(quW`B)ab@{@KWDOrhgVM)0_-9sB)Ia?5&wBBm z=be{d9bnlV2>ZkuvWBDO;P3D6D=I8*{}!Bl{kXu&t()eEX=mJ4 z@HLw$o2PE?mOd{h-f`X^L4dK?3(xPS)f%<%Y@*jyxI2sXQM2m@0~tb zQ`yE}#Fz5HVyjV$BG=-biH(&XjHUL9{MvTu+tfJoU(dW2z0ERu8+S9${8hjzuFp>! z<^Ny3|M|y1W`6m7%Jb)6m>`+BNal~m;i40oMYH5B=h}bxvb+9+bmFFMw{F#j#_6jm zUuLX~obl}FRF}N}i<(8&Xx+aqz2(%eU%ln2i*u##+xeSV$W(FwL|dpC-2W1N3o zdcR$KCKrFD(iFe_xhkQPWG3x;ILWkFQ=UOI9lJyyTnyE9Jt~oqJ6sdiTD2^ZG2y;-_wR&A5NwcGI=K9T&0Psbk{h!@~XY z_dkF6Sp8_vg!BAMDwi#r8I*frqD$sd!&#z1mZ~Qhi$I$3k!rrxWrnR|2i_q zr0<>op+Nf?r`R^S_HGr~o+w$~8gMs%&2{m->*AN?-pwxjJ*)anS-g>;aQ}VVPaprd z*ntL24tmOQ^EQ`uE;E;yw)Tae=4R$B{%v0l?c#luQp0#>o8FR^$i2TAbJ@agEAf=G zg)i-S`0xM3OWIp+{JI&%wU_7G)=g{Y-cnYcb0GX;7fX_~4!<@3^{M~$oslK6E9b8>`QQX%f(zCX(*WI)tS8BiKp?F z)@K{Ts&vb_yq627m@*q0kzmZEhUw zZu!@YgXg{68$2ubypQIEuE4`bcvYLPTfLeQ=aHnZ>JlYy;x738+KRJ1hCw`AF5S$x z-uiAz?(;CM*cQ3PSIv{ce%FRrTNEpu6Fc>Ji^AcE0I55!C!gMRtjV0V{miTLTl@3k z8kq0d#zx5b9g*q%BYCE4-&aOo&z}a1N{l-fE=esc-*Re>aBah{u&=jvZEXzgXS;BC z;jZNGAFjUXn|*x7yKaHL+`EBq#I|NJ_^fw(5OROn&iB^aZ%@s=om*MF`pBLS|H|!! zJ|8Kuo9&Ywd1CX!SBtJmPI*|cPHW4%2^kM=yuH0!I`Cv*NLZ2wPpO3Yjb@`y&5c%D zO>Xx~wAh&~_qn~vUGTP|$sS`)&B@8ncGV@{&wrxObMZzkdx5rf_1?g1U-S0eP?8BDW z&ky>v?RM7s+`A_$GWEi?56L$|m2}FR0rwBRDLRNB7RFSAT2^pJ?AmI8p!dK)LAdX>~ktM-HWSbzaLk zySGF3Q|;{=+j?_(qHbqwtuis-SG?$S!ExFd5v4D(y4JPYTizbiuvOwlwyie# zu9>k9-@$_BDKqu?TPhP>oLRSD{n2#xA2ZUPSjd_$E={^%9bz4@Zu`mn zEsK&ieO;_%=>A7r<9YAO55B)A!;y9Fr@hTzsk14; z-=#|o+WHb%ww?ET8#X(9{qsLjXTz6={C@4EGKu4+#NpJEQ)S7z(%ZQ9274{s8B%k_ zZT(RT1|=WAe|x^Ay;?ly=5a%R1MS^X&3kKXeI}l**th#6i`^!(@4?OoQ%;2(eS44j z=Gt4$F8pV&v0klRI(_bxJCnorn7tM_!XuIF;dWQ5dDGi%d2J2bPHFmn_;5nv)LJvS z>B3$Kx4CmQPS)0Xubh$=WWrHC_0o&EmyJHZJ1l%Ub)jqGeeOw3(xu(IC(nF*+-BzE z6WiW8B+Sb(x>a4=b9^VujMLshEkSFO_V8P|N*+GKt{5TzGfee{{nj^M!q)am9%Fg8 z^y0f;b=unkKJVp!$6&PT=e;Rux{r3P+f(!VS<6JPq#v(@g|pSlcXwU1X%sa4&i&pd zh-cpks|i60s^7W3O%Y4pB^^9(S!c~G&9zF08=77;q~=dGD`@I8Z)RHl(#OiyA}+7S z{b<-_v+Z-Or|I{ksr2s>yZ+L7UfP5c_pG{SY^%2@42}K9*C1@0rJJ!qBw*XzqbhrjXMP!sqrBXyPUWnp&hqio%(vg<+FmAR=t=Ix!2zsjw? z5Yn5m@@~$PP#sr=8Iwz!+}u-dgcxwmYPz__>BGdl<%`YUgi8F*lV4#b@X#bxuI^8x zNN#H+*TIlee9rPE?<k^rWMyXnbSUJnVC6HmEnEZqr}q~)UChNfcsYN-5b{ro!+%M_x0R^CRe68bh$*E z*jghy)j+4_YGGD*ReO_Ysng9Qf^_H=IC5ESLPV#M;Sh}Y4{a)eb^87kq z_mD}GlN>54DioHT*!OMOyn=MNX@2U3|M68dhnsk3ca8bvN zENkW&@4`MXU%UOz?)O8#S6d!kTkyt^ZOMx{`yC4M87%dmrPNtutlYZSkj=mKQTKwg z%hpYqyZmX7)sxujrDxUcV&p2m|2Xkne}2UF-q+hU#^wIAZ!_w;ACw-E88W-$n_sZ< zmMdx9OZWYM$2`5Ay=`;Vv5$MRHuEYbozb+ObCY*zS$W~X-NxQ?lS@8Fhozp9l)VsD z|Cuwy{v?Alx0TTfrGA_qW+soqpM?E%awz=H%dK0YNjQcV2SgIDG76`F=I| z-B+S!F5}#DbnDFR**XWDb+fY1gj`H~d?`rUGgrCe?M&;AnUB~Nl@u4=dYSb(r+4Cl zYg;1obM))yr9ZoA#n_~46C!v;JkV_VBG>f~&T3q*dmz`+RsC~2Ur`2EpUKs;k;Ngm zpJ^WC)j0b-d|Aq5_xB4+w^;ArD1Tb{*#jL(ZI-jk$~J62bo#USt8GDdRTk&Z){Vp0gQswVBISE?6tLNp#-T=YlI3Eh@cg{=Bo6 zyJzdzXTTH6>)4r9dRFkOlfm`Nx$$e~eTbeOyveeye+K_KcdjszK8D47o4fV~FE~=@^q$c&)c^VfiJI*5H=~89Pa&eX= zV~*rfKI0C#cakMU;Y3IrFIozH+PMLZ!g&SWPwr;!SnzQPfwB!9R-LFuF;-{wbs{rB|ivHA7CT3_#*T^6+P zTUv2@f?czvpFqnktymweJhS)G&p)?*zrX+SmoEqIX&FQ3~I&rgXlN}EW_r+uT zlV`kN&?UMua8apv>T{Lu#;S+DpKXtA*jiX<^rj+&{p#PuqZ!*bem^Jhc)x5x>Pyy_ z<=ii-yHiY?7(Li!tCw^#E#sKxaiybV_s>_Ae+pE%?>@VcyW@c%b4t{Ev%b(^t^Z}R z-CG^MH9t*oU68c;EyIy$tI(xCScP-#mQT`Lkrv;wy$X8n&86Nw3L%{B_sIqPsU{#V%0v>MF3D z+vmhB$n&;@OYT6;tjZX#g3bq7R%`I_JOT(@oyCc5!n_+v=7_fjUZ0ED9yOoi?cUS-qS0 zhrLUDkE9%5;@83--)8?^v$InCu*o+k&F$4L8*=Y6MxOJrG(6A!*~Ie3*4gEka+B|C z-Hyw2)^rW*eWIiHb`!6nB1d(krHP2F@iDVy?+*QbfB)mZyVgN{G3)ikbdO9+TskEu zd$;)7vxm0%C!hVb^eWTcw_i3sy0d7Wk-xESNtUU>>xQFecSrUJmIUnKKNn}A5v$kF zSGz#!ecqMwdHa7fv9tTWdw1{qQO~l^tMX4dfMv`A5A{|_`naIs6)~hO0F4Lg5;>8@)T)LznX0mfmt?=0v6IU%Pq^ zaI`sWv%1mE8FJK;OJl|C*z*VXOq_Q5=C^O9HtGH=R8|Wfd$4U?&eB;+bxy_yDIYuY z`~CgTU*0h?owMkw%V^qMyQXyQ)|)bFX+CFj#8qUL^yP&8y7l({af7Ep(|lI8-srt> zJ2qwZ;+2af&vD#ZXTE3YHVy&iSnXA1hZxM2Y{K?DY!Yxitf*NmsQHMseNoYy-=)hF z%#99Q=1Nk&d(W3`+MlEHp*uN^-xlBexA5T(r+tg3oP3)U==yu3(9v>Xw*8iJpNc-Q zU$i!_!;Hy*?;=*;lShF?9F$tuKDP^ZQaVB=M}SdiywKec>MY8>t|Ocb|2o;JH=?N z*{MA1smWV%-=8kpb^EjLWfrEZ?ysG#GFKGcHqY6*qjmPrns2Y}efs#3SI6e|`{#vg zX1>mMUAX7q$^C!roqcyL-ShJL(+;KMy>@li4}Y=stx(PWu&(n)ROs~P-5Zi;+;;sS zXTIy>;{ZqNBNHYHXz*^!nlC={f%F9trdi*$i_YH0{NV2K?|Z8M_hrs}^S<+9IooR8O)~kpwmzTo%MqmpsrNCyH?_HH z@1Ie+c3abFNy+7x>FIpg!Rrsm+E`}z$jCG%|LtDyA%6H5f4|~k+djFL>RCH>w|swR zwkd7%zV}D-cekF@I4G{XZkHb*;pws5FPE7po<$r$oXgl{|j_UgL zHBWnVryJxxShy!^ZIv&ZlHN_>o@4XQ=+$@J{_6j5U)!|}CX+X@dd9^(E-@^YcyHB{ zzVZ6I#CxABZr)c((0jyj@Y$POnO6y=8kcHY{-_>zcF)WI949ZKrq3cihebZ^#le)q z(_$01f7O2!+uUlxD7)oZ_rhIOXAR#~wJ|qa{CI!!s=erEvsZ`n|F4*~>DR{F`WEt+ z76rV27G7Y#=q}f_do}O-z3*-{^D^B2?(444pEea$>uwRO{c%}=%bAVepWmjoV!`i4 zD-^Z~C#f-oC29qoQB1z0yz};A*=>)N^7RzTPtP#VxK!v`|Isd8q;T7X z2MMn_qNF$#14;#Ce0v_LTz+@ACH&xC^ZV{^)MaHDUe2q_+4?5n_j|_$+mbkx>@2@L z>^ynpi(VM-*;x-3E_*9|Z(7&o166CMdG9s2_x;qbqSV{rr}hcE$JKT<-{-y4E)<-6fOpn;);HH~m5I&{=Q&c&^Fz4D?tMq&wJWM665@(C_oVy~ zIK3w4%KQ1E`%-V5kLTx%HTb@*g?XbROXtm1FCS#xyY^21HOFML+Um=%-PYU ztsNR|lPXr!=Gm^0^E+!{CeO0UqF<8||0kDBOI18tu)oq!>h!a1dD|?4T7q=uN4?rO zJ@1a|?z5KayUOBQljZ)kvoG3p{k*^nzj*0=X6t$r_x!J2eBEo3!^>}vRNcOnE*80e zq_L>B^4ZVV;#FH0US)i!@<= zf5#SjeYCq>Y~@hQ;B;pWhi#YD?|Anxc?qVaGd8#C&JoDku9O`gzAUJBZt)zwDW&?~ z{S*Wup5=6lUfezH!;kVmVg8ke1P!vjPY0V>~9#5l%Iq8YtkS86tgq zSKzj}_s(wJGVR!|wR#GYZ{a2!Q#YSU+?yv|QOuCqwqNGU`)jidXNeq$tMTb{`Op}X zw0`&27CX_FMIf}O0V4?*C@M_a<^tn&AZ$F{mZ-X*N(F_8ucFE zbLDwyA{c$!Y}ZWF#UAFYmkh1etqrc>j&#`jzO8cJJK2LT%(S)%0Q>Pg`N?w$)Xi@$BV^-B8fv8iV?eW|0vSE$rkpL@^F6Jsz;EZPs~!utU!NVgX!pev z76u&l6AV?YIUZfj=h*f|afaqsiEj?xTc_u;TzhDKs!r{;OxpHKJ?k1QBIos8Gn3sG zzSmTREoysncywxh?=pjBZ=U!sec!rA`*ughoC_Cr_{^+~>Ij)UN!iVdm-(tgZvK16 z-R~JWCf;J(oBuu3fMee8vrmFss-e6?Tpv2Yc~BJjs|jIh(tE zvld73xo=zVMc&x6>@IuJ(hzw;|FV^?Q&!yjR1qrUllIKDeNok#mf++A9kzEA7pzU1 zR7IlP_~zTo*UogD%+L62XS2)IE0;GgvFOCLW7|)4ENeOWIfeC=#P`JG z7W@1=j!by##(w!(>lBBCcXuzC$?mKAma+a!&(CddSIp|tR9ZHF{n6vA>mrVt&CE8C z-*;&jZ%*5V)gQ%oU3Zc?6zKT#-Mu53aTn62pqsljjJTP5OKDu-o50t-fTA>>md=F09$&w{q$(@%c|ouU*sleQuw4 zymWfz3V!K_avqNZg8#p{U6=k|Dttk4j*9)<^DO4BL2K-{olM&x>$+WZ&jQOH?GD>YrG@9O*eG-$y-c$9e64CO>@V}nk%o`E^#f5F1250 zom;bb>!E&mJ)1fHTQ<#JIMsf0a{cGmr;UTp>D2vjWn#YZ?bICg*@8Q!U*7lL=Q2;y zn`Ht@hQ8l#*Kb+1&5cjRWm3z5pCudToR*f23j8Iz%=Ut<;e*(zLFHANaYtUxmCg@I zzkHxoBH(^<{I|R2lcmC9yVrKEKKt))#l*$Zt-C^$8$-kwco;OMgbSBH@LO2XsxPF# zx&FNVz4jZ|pUmkz`QXX5)iZ5>E?l)#AoOn+_v=U zQVB=32UC6?i0iU!?f${KE%2AcvF~?p+*WkyPJ7g)nSVK$BaG!)Lg-?-W+`*!6B4J7 z=*0G(zc;7Ze$Hb1Jwf?Piy{v2>2LE{ov*+Bm+tDdR*#qMP@LRbuv==Cx}4_~?u&1x zm9Bb}H=j+heF~@MgvI({U(Vb18Qm+c&7He0EMi*J&9c`{c6EOmGIQsdSQD*N)J*M}cw+9keK(PfqX_Gui>y6?LsbWax@yXa}@B0XpQ^;yN5(zmDm z__B6^&F6|!bJS-n+LWUBwAIk(r_IwhQ%cnLdlh7TUtnV0kg#s`(va?REVnjn{i=B5 zSP<*CU537!ZNoQ2I;=N)x@zxT!6gq9x+glX{{H8&p0ie}xqtjt>3wneb}1|3=0<1i zweGAwXRDPqcbWB?Ig4-aPmK9`Z+E1$_n!7E*LW^)T+F>!KRHgO+ibqf`}y95{)_D- z7Hzrp^Ig0AkMH$=tgn@-dMG`cx&FGg{(AF(r(tC(ZeF=I`}YK8EtgxX;eJ;#W@^a` zc9~mc3%guTC$yY>tWzar<+dj^`m9i%)y8WFPv<`UX!7~t%QKaod*1bWixq8JbmQ2K zw9MPP4!n4?d*Q-wzhBz9a4QCRD=+cMy>~Pr#NbcSO_!~=64rb_w_HE|-l_=Ouzhk) zzQ4D=wcdVK;nHG(;N_-Y!)}^8e~8-bDv)NDd3BYHc}P>@^>&TR@-t?t+!T&$ikR~9 z@4fETT8SEK%h&DR*?jZ8bU^CA+O*$HY42whKYM)q`w|<$pl2^%+G%)PfS9h^!Qt2w_rG_iWNZq_Ez z^@sN5d+4bcZCBcouDT~l`gqWmzh{F}`n&FE1i$A_d zJbEUzBdlMQ?cmRb=Dm?|CiOO}&D)&jrGFPJXbUh%{}5KwS~aWk|3h~6f-74K+Z$P9 z^wQ<-+s>3?TX^Nr^!4liy#36*e!Fz_+ao5*h99eb5!HO!M8WBB!*ckO`C3S zcCCzcs#VylJNMh&V^dseT70DACy&RPq<+tbeL*@Fa{}(5$nUYhy za&=$U>OY@;P7ZyU^!j%3nXq)8+2@{SnuYnVd~^GqRK>zxKY<-@Pi^;~|KsUr@#nwT zAMFWvdL;Y)j(vNIcHdobE$>Fyggrad8NN>wSC3rv=i2`p(dU_;NV*plYxT@Xy4f~w z|3i-*s`GZ;TzolmqM=0fVWz4DIS+ehKK;kqw(M5e_R4uZFDDy64}MlMYsR7pn+=vv z7Jc?gH+%aZ`Q{C!w~Zwh|FreoVmyPzG)=={L$IKYR8OL7eR=GC#Q=smERuJ^R3|Pw zP_(Ty_w>&*MY{^>D%`(y#+%#B%$zy%`OPkgDM4D-uWSE~dvkqTaC_#P_3O>+>i!z#3FVVL2o-CZ0v7q?89yX2al}#vEtTp1(%QOUyALW)f_K$ zW^c%zue=AfP+_LI-l&F9#A e>(iP4`e7yiP2Pq(M>8-mFnGH9xvX
+