From 1598da1ea3e59293cd63b66d140dc659e0def37d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Zyba=C5=82a?= Date: Mon, 1 Feb 2021 09:24:13 +0100 Subject: [PATCH] Add configurable social links to scala3doc --- project/Build.scala | 3 ++ scaladoc-js/src/Main.scala | 1 + .../src/social-links/SocialLinks.scala | 12 +++++++ scaladoc/README.md | 6 ++++ .../dotty_res/images/discord-icon-black.png | Bin 0 -> 1559 bytes .../dotty_res/images/discord-icon-white.png | Bin 0 -> 1559 bytes .../dotty_res/images/github-icon-black.png | Bin 0 -> 1714 bytes .../dotty_res/images/github-icon-white.png | Bin 0 -> 1571 bytes .../dotty_res/images/gitter-icon-black.png | Bin 0 -> 386 bytes .../dotty_res/images/gitter-icon-white.png | Bin 0 -> 5522 bytes .../dotty_res/images/twitter-icon-black.png | Bin 0 -> 19901 bytes .../dotty_res/images/twitter-icon-white.png | Bin 0 -> 18385 bytes .../resources/dotty_res/styles/scalastyle.css | 27 ++++++++++++++ .../src/dotty/tools/scaladoc/Scaladoc.scala | 1 + .../dotty/tools/scaladoc/ScaladocArgs.scala | 16 ++++++++- .../dotty/tools/scaladoc/SocialLinks.scala | 30 ++++++++++++++++ .../scaladoc/renderers/HtmlRenderer.scala | 33 ++++++++++++++---- .../tools/scaladoc/renderers/Resources.scala | 8 +++++ 18 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 scaladoc-js/src/social-links/SocialLinks.scala create mode 100644 scaladoc/resources/dotty_res/images/discord-icon-black.png create mode 100644 scaladoc/resources/dotty_res/images/discord-icon-white.png create mode 100644 scaladoc/resources/dotty_res/images/github-icon-black.png create mode 100644 scaladoc/resources/dotty_res/images/github-icon-white.png create mode 100644 scaladoc/resources/dotty_res/images/gitter-icon-black.png create mode 100644 scaladoc/resources/dotty_res/images/gitter-icon-white.png create mode 100644 scaladoc/resources/dotty_res/images/twitter-icon-black.png create mode 100644 scaladoc/resources/dotty_res/images/twitter-icon-white.png create mode 100644 scaladoc/src/dotty/tools/scaladoc/SocialLinks.scala diff --git a/project/Build.scala b/project/Build.scala index f015bd7760f5..d7a3668a82e2 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -1624,6 +1624,9 @@ object Build { "-skip-by-regex:.+\\.impl($|\\..+) " + "-comment-syntax wiki -siteroot scaladoc/scala3-docs -project-logo scaladoc/scala3-docs/logo.svg " + "-external-mappings:.*java.*::javadoc::https://docs.oracle.com/javase/8/docs/api/ " + + "-social-links:github::https://github.com/lampepfl/dotty," + + "gitter::https://gitter.im/scala/scala," + + "twitter::https://twitter.com/scala_lang " + s"-source-links:$stdLibRoot=github://scala/scala/v${stdlibVersion(Bootstrapped)}#src/library " + s"-doc-root-content $docRootFile" )) diff --git a/scaladoc-js/src/Main.scala b/scaladoc-js/src/Main.scala index 25892c5acb7e..7b32aed9a1ea 100644 --- a/scaladoc-js/src/Main.scala +++ b/scaladoc-js/src/Main.scala @@ -2,4 +2,5 @@ package dotty.tools.scaladoc object Main extends App { Searchbar() + SocialLinks() } diff --git a/scaladoc-js/src/social-links/SocialLinks.scala b/scaladoc-js/src/social-links/SocialLinks.scala new file mode 100644 index 000000000000..5fbe42eb99e7 --- /dev/null +++ b/scaladoc-js/src/social-links/SocialLinks.scala @@ -0,0 +1,12 @@ +package dotty.tools.scaladoc + +import org.scalajs.dom._ +import org.scalajs.dom.ext._ + +class SocialLinks: + def addIcon(elem: html.Element) = + val img = document.createElement("img").asInstanceOf[html.Image] + img.src = s"${Globals.pathToRoot}images/${elem.getAttribute("data-icon-path")}" + elem.appendChild(img) + + document.querySelectorAll(".social-icon").collect { case e: html.Element => e }.foreach(addIcon) diff --git a/scaladoc/README.md b/scaladoc/README.md index ad5a6c0247e5..c55a256e342d 100644 --- a/scaladoc/README.md +++ b/scaladoc/README.md @@ -167,3 +167,9 @@ Make sure all the tests pass (simply run `sbt test` to verify that). A documentation tool needs to access compiler information about the project - it needs to list all definitions, resolve them by name, and query their members. Tasty Reflect is the dedicated way in Scala 3 of accessing this information. + +## Credits + +- [Flatart](https://www.iconfinder.com/Flatart) - Gitter icon + + diff --git a/scaladoc/resources/dotty_res/images/discord-icon-black.png b/scaladoc/resources/dotty_res/images/discord-icon-black.png new file mode 100644 index 0000000000000000000000000000000000000000..e756933de15e4d4b1485457e69b3885601c6e1cb GIT binary patch literal 1559 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 DGqDaI literal 0 HcmV?d00001 diff --git a/scaladoc/resources/dotty_res/images/github-icon-black.png b/scaladoc/resources/dotty_res/images/github-icon-black.png new file mode 100644 index 0000000000000000000000000000000000000000..8b25551a97921681334176ee143b41510a117d86 GIT binary patch literal 1714 zcmaJ?X;2eq7*4oFu!ne{XxAht2qc?8LXr|_LPCfTpaBK7K$c{I0Ld=NLIOeuC;@2) zZ$K%a)k+m-s0>xHmKxL%0V&0TRzzznhgyqrIC$F)0{WwLXLrBvd*^wc_uSc%h%m9E z{W5z3f#4_!7RvAyFh6!S_*<8qJ%KOIm?#E|L=rJQq=gB5C6WLG5;c?r%V0>EmEH#X z5eSwPRa6WXBMs#$5H%GtW2go-in9p>zW@UYDNNWc^XOXZQ? z1QjEV00I#$3^1wQUJ8&-2UsjB-G|9y(LDhMNN3PM{APL4eYi{(m*ERcUnJa{R+-3^ z34^A6;U^v`8N*O6ji%S@sd{fJqD`XFIUJ5zgTe5^5nj414F(y!G&=H(f)Lgzv?>%+ zAsWD}2qhpH7>|TU`X&W6IxDNuO_vET7|j5oG&&VDr!)hUO8+0KR?nh!m<)a!?|%yG zqOwq!CWCcIhE{<$E|F|@g>nP6FoYr6C<8>D?ID9%&5J(4oSbR1I^byW*g@__U z4QsF&uJSEcFeleM3~ChjEQGbHOjsGDMbyAl(p=Ttv9RaVo8~I#js@@Y9C^_2U})yn zzSHU%6FxuY?d;&65MyR({^lU*3$z$ZllDb(o&<7d;A_`h2U+3~BJ2Hv`{W}KEU801#cv_B|9Cm!ynR{S`AMsSn z;7E=B;mb!wx$L;S>yGXG^6=&WlQn9$s?&L%Y1D8TI^MlKB1DqsEng$>f4=xYWBoPI z_S1p!sJ#d2?YI4kPA{k}Eby?F=f-J9zIc`YDl^pzjVm~9ebE?Hn?t0Nx+la|D0MB; z9)2xv1G>a1|A9kQ>~DV<=X3-4yC&n!m8-3K#P z{X@0zRuQsy$+N ziSCoLJU{Z$nQy4A4Y5UJ07$5FA~qL2%Q+cLaqDU?Lz3?=BC5;Nk6BbTmmceEaM>-Z zi>O&-dSE=%ex;vcvCOk{*JQ5^_4M z4lW7%l9IqY(z7pV(?I@@8=KPFO82)O{VDI18-*d-k$YmI^XiuPs_LuFw<^ZcD}yP5 c*NrbeloN*74g`U%%F6r~k%+>C^#XapzmV0H-2eap literal 0 HcmV?d00001 diff --git a/scaladoc/resources/dotty_res/images/github-icon-white.png b/scaladoc/resources/dotty_res/images/github-icon-white.png new file mode 100644 index 0000000000000000000000000000000000000000..628da97c70890c73e59204f5b140c4e67671e92d GIT binary patch literal 1571 zcmaJ>c~BE~6izDPQq)#Nu*KOf(n^(VHY9;fiINM65``pc+9*v(mL$bwfCjbc%v9V{8r9iX|O%>Nr%pLD2qT{mty}c=LVleeamv znz3SOSm@kP8jThvOOq(56Yzh*fz(booe!uZij=BJC6+_lbvQ~B8nA2>kXdv_RDtRY z`5QXWWEySCe6vbTs^#f?J!WC*{1~RgVx!nJTJjQyO{dRANgx|FnymtGbD9%JmCh9^y)##j7{Dcqfn*1ta$rG89pJF6w-S7Z037$rr|y0;1Onp_ zGFJdT6Q!1C0AdVB0WOmpuV=AgAQ550Tn+-mivTtYPJmz*#75#_n9oV%!#rSOfmAfy zki%C~=fTp1{O#BLpJ|0jj#m6#|LRWit-vq3PE1z9ZqyvET4sX$-Icqy7t z<=aq5ff86AuBZBu6EjJsYWM0uejufWFTwPA7Su}0Bm$7KFb!q{Um_8~A{LUG#1l(l zSehUda@kU8LIRg9fkk2tZ;~ss5~R+mM<==F7hLHpxqLB>>PQS%Vc7b~?q!%T5+h8Q z4G=4Nzyi5WZ?^gkasJ{?Xhm`JC#WG6$1K2jb@=9&D3EgD#3UhGh#*21rJjulVXjCF zvp76q62jt0zzMG5C7DlfMgPl%C^3+~wf|}Lq=}jz|MmIcQjh1Ok6NjD$Em^Iv26D> z8tt_TnM9~^Tt8mflRGPOrrX|HtT3gG4LEuuk{g2Rn}QgJIa?gZo))!!=o_l9bvD%A zZ`aHajl8#~u?!4f7F#*b*->A=R2L)6!>saz?h>#wTXT-I(XmQ zx{84skS>k=i~i`(6k4C7;Zpfx%dCPVjPayMf8pugtGM=~s=Id1l#8MZJ1-73wV#Q3 zR3>v3%}jbQs1f_Z0xo;%=LILlA+nTpKI4ha%xWW}uqHrNao~&T4AY6m`P$_n-6h*g zhoX+e4n%~gl_lhe#s+AMb7d{5WzvYTa%6Q~si@@4{;s(0zU|H&P3fE+t{7X`S#Cj@ zC#vd}^4pcBD*77Ny5=j$h8EL2_t$O38$SQiJ6fPjJMimypr~MB2(&P0aI|h}$64<0 z>_~duqNjaT=DM^6+N{&B_lED;F2wrl?!4Lk*2((x!fmrcsw+=cI^qttuZ9C}-m~5E z-ryYVpL%^xR#&(0YI5hz<(}F7-p)?FPcyJO-zVO>%9ZDXJH8pnY;GJYFDQ>vd#j_* zRrd}L(r=!g+1#nQwsO?kpS`Qq8`NxE+Zy{gf7*_7J*U2V_|NpLo{iasj7VCg_V9&| ShohtYzipXxh2)4xTk{zzS`v=VI|J$Xpi-|cYw5+p~Dm>4%LoaRqfwvE>{x_R$&|kMUtAyeBwgz9O8%$=L z3EVeIfw^`qUrR8={+yAFSH+o3AG1nfZZC!{1DC(z3HNfAU3ym3=?3XwzNu literal 0 HcmV?d00001 diff --git a/scaladoc/resources/dotty_res/images/gitter-icon-white.png b/scaladoc/resources/dotty_res/images/gitter-icon-white.png new file mode 100644 index 0000000000000000000000000000000000000000..fe16cc659fd2e44255b6e99ee6149cb4e31c2248 GIT binary patch literal 5522 zcmeHLd010d77vRcL5D>UcVfh%!plYiNd#m`kcgbn4 zb6K(9E_yNUJIB9F+YpiP=p%d$H$hb3$DgpaqP9%>w_o_J+0N}QeY%d+jrM!Tm6W&i z22D?~ohkXIZTdv4Yjt;T6i<=5$er(7eBZ62Ep8i5cJdCo=TZIT0Vz%UWY)KR72Wmg z|CO<9-U_IDR_9ax=eGFWqb4jZt?R4W{5bPrBe}QZVry-w_k$1GJzT=eyGC_1j(WELXc;S_ ztVP(d;Xux)!xK9XOt>&*ndF=LIpmd&2xhl=!iP8G$9PIpN3W}vRE0lFAImws(WHpH zaFdjN{i8zXpcOWoTK(DIRz`a{HaZ-)^_ze4Qdxb?{V}``e#$S3ajhsN!*g%X4)q)( z+YvnbvEST>s}$}Ht3}$YqlQq}+U!cdzt{h~Fs9aa$OlFpspYxG8T(^pHJA_D@{o&%>*CrzKpe*-bN1l?HZ_n{_w%Z9Q;H*2!f zs;+#U!tYyAek`-6s(o`-Wovm>$0O~r9< z!@Z8p=$vr4VBK#k#@;?xu;Qob#M=nm`^br{SG(GG2%T14S~y%0UvcM`#;xbqc%Kx_ z#~N>kJ{+0je4^l11h%dI(uem>xfL&-;WA`V>mobVz3oM7OIKEqNG_|Cp!So+F?<=O zp}`0yMQJ9D4)g|z6gZbr#A=EU3LC2@ljYcEQ7(l~t1)a&`@#qW|oyCFx0@7z| z4X_E)>L(Et77hWbm*GmCL5XQ81Sc%TG7TYADj28qlY>#2&;*SA0f=iez21P(Mc{%B z<^uq97K6cs7%Ygzqg(rfQL%WyTdVI^5$H)b!8$sV#-M97uX*SV!mPn~Z}iY7f-Q)i zfaP_1E-bx@r;Q*RwJQ;!lRbKYu1P6tVuBU}5-6p7;pd2l1VRipCkSE(a8L;5$WVwWMOcUwW}@;SmKBvqt2e+} z8A?zAa+(tGumhP4Mxc}n@#Int#Fp~p5SPJZLr9RE%abEK7LNm4QN-a&&9Wy2SDr~xfFugK|BbRGJ_Z#In3n-p=K r)q#q7W*J#u&83t6_s2 z!!;q)7^ODTG&qo`)SwarOo+w|WU`oC7LUye;Bi;EQUfbcx=yPwyAaF52a^H9!bEQXX0sj4g&&EdumQspF-#poC32+@l;)PA1ot-! zKL(ST9nD}AA^NSq<04=M-Fz8Le;fFBOp-LrsQuq~2B8Bi;kdzw;i@=1PMVI&3~%Ro z6L^3r0qk{p1D-AVgGv1dF4$78(ZCnOv#sJw&Td}84Rjrc`3nkVncm3yb?VVw%EY^4BQ^+1NX=NvLHI=Pki*3+n*Q#P`?lIPWrx= z>%Cm>q`*6Y-&farx!y^EcLKk!uK$}{)j~w^7*9m=-uA2T}v+5wiIr>e>pfKKiU6_{jFzf($ddJ&di?EHg*0vQw@IW zZq52VHQ8~$HRxjJ&-;5`6V7}>^9TaJYw4BXDyEUD&yqZ@jEkY?YAuUJMlx^<;A6O ztttr0v45>t{~^u8x#${j>U=yi?vzkMP{(t$&RNXCV&KSu+Ksm&9}HiJhMTi<2&To}NT< z9zncpNM)Nw0i&ZqBo;dUU~4mM(lno`l9|BtTqFoj1gD7C_B%DCx;FJb5xDxPGVI;% zGPJTD5|x`b>2Thso?pz3_kWPMFZfvty&xjK`Q`eO3q{Wxio$#%#*9C;AVP3)^6KKB zoBArF+I(FynqG%yFOc2 zcgQ&7(Rf$4wsSkrJs#I%m`hy~;>x@3l;O_JyO$6iB4MncHX?P&zX3>e B`dI(~ literal 0 HcmV?d00001 diff --git a/scaladoc/resources/dotty_res/images/twitter-icon-black.png b/scaladoc/resources/dotty_res/images/twitter-icon-black.png new file mode 100644 index 0000000000000000000000000000000000000000..040ca16995674eb360877c7e9cfb2e5d797e7e8f GIT binary patch literal 19901 zcmX`Tc_7r^_dkATV~l;x9xa+dwn7UrBt>fM5*n!pAxgHG##YfjwroR@?3F!ghF&U5 zq>`dgp;D416#1R${rUd>cxCQ=-sipdoO|v$kFz{q=V*H@g-P-xgplyAo!jjY!ozQz zJ&_N3)-ji};g3Mj&V3;WX|3k{hY2e%2}MW+?b=Rt2+R8R?$60iXc>gm-7^+sK;9>ZDHr+(d9 zIHbBX<8jc60&Af|CJsTu@Yi%Lo&bM1E0|dLGbBjGz@N!@HvEg`&1k$oQ9olYVi806 zk!)^)SZKTX8;Z$>$XcUEEBwOxRt7FCXLl_v6fYiHK`H3U@i+Z`(CVoT7O^9ATi+xu z1ukc_oLMLQj+?0{&ob#Ui(ib1*+a=5oF2sWk$7vpI;;Ck9rJ6n80#vCRrZrv(@`w` zcOk^;%fWlg_t3J06hf6JLylqZnok3Lmf%GKitLhFE18tL8+=_Akp@L0N+$s$U4{TaS8b> z0TD*xzwxd|*FG`%!#tzbsV?%YN*xXImY!tW=~o_z{>9gCro)^IdBx{^VBsFH*Mt zld>63HV*bqH$6PcIa7mmV)aYzv5I77@O8`a#+e>WzL$a1es`+((`f;rJ&NQRDy-IB z-{TtOg2nce`dFDg*Mmy+F>lp?n9mN$$9r8Tn~jgO2m3W2zrAt(+oY$iZmZGGP{V=~ zMk802hN3ZOX0@~EBiTy_lNVavY*ocbhI{11IP124w0ngeQ0=;KPIvTIwy0{{(-wVc zkOd|3pxMaRGtLw1QX&q#m3a0}Wqz;7DeK6-QvGi+_Rb%8+>$SBV(^XVCs`(})N9al z`!%0gUG>A>>W}@(3%xi5j~FVgVFkP~q82}{}-X@7s+#^aq7n-7+o6Zt6xA!Gl&Jea(7M1S#t4WDTJZp!!G z6C0|P5!$Wtus&IL)b53-8P>(BykX&T`~CLXy2_Iy`bN&Ri?dHItCW;m?XZ9omyvTI z`pp@{-0&Mx?XN5(F$0$>YQ`$g1Lf-}_LbT~>T%V-tA&h=PL%q$UDqIvX7|bl--g}v zRZa=NJST(et83Sr>|Vt79yFK6Pe+&kTqw>50gIh-t(_8PT}B2!!ZQv8`Dd@Xbcah~ zhQF>(a8-vhG+_I0*mP$?OfAH|X0=0gZcf9oJSP49xa;fFBzW9g6qOY2@VoHLmnQA+ zMCS>@Da!B!Hx;gVge_l!5g7CmlXj6B+>TKg13^{C$G^eRAO&67R8 z?_cJ@K8CJXNpp8Cm||a!dmXi;x$D%)ex%-3N%xKJxTJ3)>Il3yGNU**Nl2JVda%AS zakYL%n_qU$ZEH6%(JUE+}wUEyqutBqQZzlo5G#BuC=3 z4br(hRlt1{XI#cP;-31IDL6KeGbL~Ar(LA~q-hW3yF-wYsGV&k!|twL?)Ij;9t6~? zYgkF!iIyUAN)m;)_*?%ib$ak}X=~i1<;W`!OKG4%baZ%KWZN~wHgOfEhq;QY+t;j6 zOqGe1uUVn_@ubz4n<+`sQbuqEf0|mIR5I&JF~FLdSoIHw#|CacGkaG$4_gp1#2y~1 zx$VoO@8B-ANlxY2rFt8vB2$yL!R6dIJZHcu?np#?r0o$=#mBPKEAIY~ubA+iSh$ft zq^#RovNpl9FAkv#e~z?^b9iTBy7p%RE45;&^@ym^&3a!ZJAWu(q(APk+L5=saczNn ztncStMs@A&ccndF3zRu0ACCzL;oiS!#_T?*Po>!g)vhfO7}eLmiA6h{-_PVaKClxk zvdr0EnQPY*y+|CXo?| z7|uiO9jlEQ(1IQ2#5T<5yU=LH0InG!Y6_#{YfKT>}z z?Gas1PLTWS{o;1leYZRGL3QMR=`u<;jc!_y^78+k)NGV~x;&Uedh?&+oZc-n3vSFq z{K}e1lUJuH66mGbPEd&%mGtrgx{O%ZceiIJt&ZL*5PWdyJTvB)-${$VhqrbWZ0)^; zIHUe~1!8pZ`r=J5 zUE3l_;}rMTh#^i#Db&G`u< zE4+&{ueUHiD(5;N9fB%`R(~OpFf!fwe&A9lv$Gv1R1pzLyWuRg+xX^3$M8F1GKjO9 zD8SfJs;`;ux3*81d4}={lVEAQtuoJB>eI>i6xLwlmstTml&Q7`$yfDsFzTUsL#HLz||epRn0CLt>nRD79Z| zq6nzBfHj!&Csg<|r{E2?b75`4iQZ}4Vjj~k-K?_(*VUG}5)H`!(>9nfYZ`wTuOZ@` zrC#bin$)Ui9o8;5VLLX0;cSezCDX}f3vr> zm~vy5*zS!v%T{TvlQavnW$q~qh$1HW5LUIAwIVn;H~R>y4B&AW(kq*GWM&$!(vF0p7y>lOu}E!(o8QH&wbw3nh(k6D(>n`Qst zpEo{6L>pHF1Jjo#E@E`9v>Uz9DwugAJiqs~G(opjoZq%c6R`z!Ta8sQNV2U(P&5ud zINmhNetnEzR9ptps`b)LwaLi-?Ouv|9d2;km@FG!9S<~K&#*=umd7oYP*0P2EtQ&l zd|ljRDbqURDm?tks>f>&$RV|>V+{*gCobh^kam=-rLTjv z8Rry<0;wzPt;*b|V-F@T85ecdy}X6vsHLRFnkeZZ$*^O>AAB21$mD4OmyT(%=6Vn> z18O@kM?%8L>{1#3eQ7syYuJQ;+m%!tQd3zIc2hYPD@|z6j3=1Mpx%6k`8UCcQ`00Z zVdQaY1Lu zxX>2t=5;DMw3jc8D@sM(7pSO}BaBLxT9#|hU$&-2gy|svlm|3avukH1WATkvYx+at z-;FCI;-&~cPmND4R}>~4z^$DgpVexW6~bZY;stkq#J6DS*6(k!E-L=|Zj~|!XsNEu zV!6|O`b&hL@n=6hFXKflHmKt6k-27nEUI}#dbE`_w2dFH{bS*hdm(FLF~2GEJQg=^ z@O3V02jvT9NIB6A#%AnB-+M0FfS;+q z8W~B#g|Mhk4U-VkO+$WM)#(SQbiZd|( z$yWGpfg$hH0y&99fwqA&`~0}m`pe@L*6rM8?>E-tXKG@PHnkgXND}%Fu|*56o9;v$ zHO<-Yr%FagMHB;66w_-T`VXxl)7}3*S*y2t(F~Vd-grk`1Xn5G?yS)jkNaa?zR~Sf zrlaeBkpiUB9i=TL`<^CWAR_mzZY`#3QTi$SZI)Scq3V)xxDDabAFRw1BQtF2`Ul-h z_u@Z0gx?EUOGfkyTJ1*6fP|Y}or-QmW37)t<1ahA zo9~v<1I=*)X|qM@KSni3ZH5Xwn-Zmc%O%lZ6`G;KIKN*mdX%q{>VAhP?NT~MxN=i2mJ`HW-X`r~hOKZ&t-!LYE>T1r97+r4*$Rt=QY z`3`CM^>2IKu4Df8@{8IeH^RXus-_{uF<$(p)d6js=6mwml@6WXJL7TH9r7-%nI~(4 zXT+qw0r1k)TJFhyEL(Cq4-NS(=*a9wmH2RjZ=VR&0axBeqd2{VmoO9Q_5hB)E6|*1*&h|S(kn}p5Xw)gGjz&ZPiD&) zuGQ25awSGCyyl<7F$ivH`|y4WMW-_F?mG6@`=w6gjq$O}0Aq3>{j<69)mcjG{FZ_f zA9An`R6kji)VEXm3~gvnTITy5hm2QMhdYnTxU>*-@_Ggr+KkbVvR}!nbib8-;-rD` z!j70eAHPI4Lw?D%r{%&j76q+)g+~M41?tSHZ86>fg`A6d_113&TZ^Ce#$pvjf2T-3 z0v&hgg&l_P)?GnH|Dye`=mXN!eU_U9@kbPhIiU|u(-oroXN1mX^u{u8NxR`Pr#l9) zjPDv6;<=k5(CDYDb01kfwspored}|(s)YPozZ4oM4(u4mtbYW0_QBi9@g}*_NyI%9(RCj^R$nmj2F4?LHNGIFZjJE}IS82>+r6%WYE<%N(aY*Kv)#oe`Odo}@BQT=gU4*X zD4HHSnCx7zN)Yvx*V+fd^u4%m}AoqAtnGQRpOs&r2aZ=rU2zmK2=*>m-~Q`f1+iR!j`%?Zn9*WgfJ zLvgRl`+`|Ehq1+J)-U;Ie&a4a*%aQB95pj0dzQf+$sQi#Q^Mk2oF|}uT|t5C^LO{t zIG=M^)I@LSUwuw@g2j@GS|(0 z(p&jNQ3H}?@aAt+l*pJf#JMu`k}f8!ay!>lk`4UzKLE<597_Vq-9QYkHbT3 zOyjAa)H2N-ZM1?o*?5XMvx#MAxM9Xsl=Muaj<2<#0r^~kcw6tS`Ki@3OekBX)nD#xl;^gjCi2C z@q0LN_}W+SV<0pYmNj9{)GTDF*CoIDPu3(YFgS0=>u?(@tEWRYbUWSFTdHvn-w}|@ z8!=Vt=R-Tr{KEOBCMKLdtE-%5_yyV9+8|V-0I{$Hx#r$Qd9%9nx)WQ2>8p-_SLK^P z5@4Rk_7xATn)Xiq*`aPh$3oPG9^Mj<&%4Ivn3}sz-z~K>Ix)srZ)b~8yPVz{Vm6-O z3|CuI!+FJ`trO*Us%T%4-G7HBwUK5(-(?jdi5}b~ycJ(#3bblYocP4+V$0w2Oymy` zsKfw4E*(d$zR;l`wDCTUetFyS>CpIQ|+ z>74v?=T>Z`TC*jp%e_qBqfI^2$v^XX?yi#O;5&koBlfYkh!~of$-F$|*MujG!T$Ws zqC=Lwk6Lzn36(bc@uPw75VPo8h_bQ3RH@dkj=HOaaXABL7LaDnl=Pl%@?bKPNadIs zZYZ9n?GP`(Qaq`t7H1vzr{P1hfp7JSyJ z&BzlF!pOb}q^x~aqw!gdtWzx!F#A6qJz9kLI^Pr+gl`EIg}2T#X?zZ7Fw${!g=`qn z%hncge5MQ*dC&IMSc%?Zp z(azahKr%k+X(Rb4-Hk#W1ZV2rqg|Bg#k zklU~<=MW9))7=QM4PGBs=4NcYCuht@Xe;zI9>w7_r1OmVu! z^gS5=Yz|}uPQqN#x|is#O-@pWLVcTmbz);5w!8kPG>6o@c7Ur^uQ^SOO3ifX;!&0E zX}(kX^yC~J!HrG|71h< zH`{)B2>B=jI*ZNOc=B`0J-x?6KlC1(t~5ZX^oi#A$=`CFXPpn>0RY5p|U7zGr6vcJpc;lga7}8WWy@Dbympk5i3##p!6%M<58ljbYat%*G;X3eh`q8p05Q}=cSm-^HTlckT=&=RBt)uzLP_A z>DBy%x1x;4>Bns559I*6jO7f-WOL!Y8g)|a(}T}8Y?6|P%uewY4HEMgj*iPob4*H5 z(W?$Q1+nh`x_Qfi1l<8zf6sgu+nxtAyi#b&S4nq7{!guW&GoX|fRt>P6rz7dH{)1c zP#fZ?Cy0_rjs%Xws5vfHY~Q+ZaSS7cNcx+SDF6OtkSeG9fl^$$dF;FAqVXw^ulo0F ze@am?DtfB9abC)+5v({*o>gTW`F>%M=K4Zbmg}~&G1jM-i-+vc#I=&#XKh{K0$YZi zba%u&#nECfQPv&^+qm6=dd04Rq?+Y)To;{+lrRgEHk-fKp})!SH6zk(iz1@$V=^n0 zUY*cIf?>Lbuj#${l|P2a4p|6UOG+GS( zViLonv9ategr{CADJMW?gnpFC3@lPdTV@O1(gSL^S8Pb{?7<3ZcJ{{Z?_(e#wLrT~ zxl1l3uP;g9Ps=VTLXe}3|AM&GfNE=)omvtuc}Gz9xt=3abDzf$=M$d5djz(Cv*L9@ zoO@6=+o&&iW&@%JGnuVK(nMY{8gfz>k-s`-%hJD&bfl?NFFaum?oMUpr4TN+-m4_B zTY*6$lH|R{xyEgLakZ~JR7{Ph40|7ral`9h8n=eo_UbCLx>LTmZH`20g}*Cx)k(@U zKI(|!zP-f{XpDx=x6()MiD=nbg)Rny1w{@+HdbGrT<}Re&*Wzr-hJ$NV2$ZgaNqA> zr<0f0{Y)#4y(at7b3v#52*4+lnx9X{6cnq(2>vSlokZ~IKOElFM0VsKRVwApwR^V( z)$4EI49;bHx%ye%(RIJ>|E`c>AMI-IGHIDRnCz)#RM%5edH0gRO1P8~QkvufR=byI z<8y3Z!@e*vt8p_CvGTFl*hOzY`5z~Te`q7REt5H-C`TmF;=M=4+7k!szs8o-=bdvt z9NYOh3xg_kHjq*et<*QY7W`#ttbT#t+)<@33UMBFkbRQb^j*Dcu_q2ch##JIJKO!v zaFS0RtD_1`ty0!J8c;dB(#Cxgs$D3LSB-ktI$0k_^psKC=yon>v*9=f4ee1UIkDzq zBEfko&9pl`xzHceE58O3oaV%bU|3M{n778Ie&EQ-a9r~(Cv9bhWw@Sm{ABRo0}jRF zW*JFhqs+LHH#F|K_nL1=fP}WwD)SdF*e3rh3-m^HEt)&$1J)0_r3V?;UZKm7l|M>_ zU-Pb3U+xRse`#aEl~1{PeJMa$40>C{rAqg`5&d0L!Vf9lO8N0{g*D{9oy&Fnev=A*o1r4v3D#6Ef5GiCVt?s(~l$Kj;BkN{20I*ksIPes7y5X<0^aVC&u6E=8mD zFt2Tf^W_$1rl;~oc*RCs%70&mbCAxzNrbFd=dX-lMgxDA=f0 z$QrnJ?vdU|XZuSpyL+o(cQxsPIoXTd~xQePdBq&VC1pu2) ze7=$SR*lMi1W`mtB5$YBFqu3C6veaI5{D(5$DeocUTdx2|3-~UwXm}a7i{kT*T?um zB&lDs+ajczbun55)|}pUKmM46lmofogo-9iA%AL^uVxpGR^hfUX!CDX=&5vPGOaqx zY@}qMvA!Yr^;;=>s~fr0R|k{#wpVqJ-N=PabYEoIow)z@W=<-T_To4l@yH;}(#Mlu^+3=*&bG@_F;`Q7p-PRjdu(7P3 zcnF&!HYl!y>h}?oYvLv&iNmW}!)V-D|9Au50UH#g$q~BDh(Ew}y@BV0_#9#%91GZU zKSJTiCI|XIYUuAG-bLu_{$E4=#BgC%$=vMO=`++?bJ4M8<_nS*KSHu@3(00TB1B0? za#HdV?{Vn2F1EYoE+(bhZTYu5$@`(Ww+2=;oelk0d2YfQsEl}gxNNV0;QN`WFaT?# zE*JXhoMM?LjedH>i*5UlN8ca6`8mhc1t+A;!rr~`g1uc=CHo9Kp>jKt;5s#R>Vm{ArKgVVtXEOg7XDURed&?J0Z?mz^qiSV;PYrHJ3q7)$4NNS(iWFEKLGFyQGb? z?CzEIFIro0KN?Y{g{FGry2>2nS+te`AdCLaLGpwtt#aFR9u**DN(P@};n4!cC;y&- zAE)G_Po8(<>KlDJoN@Frzp4l5H^2S$J^>)0l}DINk&T;gs4Vt-501t!Z+$%!^~=6@ z#U3r-@aTG@l3~ym47H`6o<)Ozb>wspeJ*w1QkY#aPb^bsp}1z?c6HeZdnn|w{U4Lm zp`rXZ{{6?Q!7WV?yXbGh8+66)yh!Qk_56f|*qJ0qY$=pm`vloy<4SCPsI4y}f|nky z59S%Y{H9hg^HRw-m(6xJ3>oIW`qnjGzU_&*Ea+m9&>A?PDM*bL%MU&Cbrm7)Y1?A< zVD658LV7%LVQjj1TC}YuK{8eZgBX!nsb#(!CzjV#lU3By_SKeXgDtGatSf*AN!klA{p&= zixoQ1wXMp{R?O<55m5L-?@8tAGJbHfps~Bl``*PWWvQKI&?p?cx6cyK(0%!8lWpF~PoS**A`PQ9Mk$Ze zM5PID9)o)f12=+P%t}aw1%rV3=XM=b;?*#rO7#sNw}9^HG%1$-7(g7hC#1o1on+8F zwSQh%SWxAB!oW|4k;xx=vM21d%lN7PHsN%1>t~0(RBkx<`tSnjKyN57$O0fUif`Ou zMT?L(O=$!2pBSv9f2g@>1#c(5RGCCvCZv55E`|?rFzDPL#H@*}I3T z)Wm^JO%9Sm?AQNX7ifKV2oyE_x1)RqDIt|YR>NtQZtDP(mr{cr`*>JU8j_aA>v^6E z%;%DM>0+=@6F*_y|Mn?br6iO;&Q>X4_ryvm9}}1@Y~w3DPA)HB<$o=yX#qY7d#iUQZ)HF3Ar4oNv_QPr7A7ga z$M|%%)5QJ?3r=189sWP+S#W@lTXn6*siB}KV6v*w8(R%huQ0J8unUyxy^Tvx5FpuE z<(d;A;>+8aHJ%VF2kDvlQ+v1`#9{OQO@yBoXx(5pPK{=ct@+mQKdR3x;BoSBIzsw9 zU6!137ALPu-gJ8iTo&X?-^OJm2$KHyES*g^UF{@=cjVm!(FV-}ReI^Fu}r;}lRQ5S zjBAQ7lX}6`R_x#Kx->SOrdzOaBKDGQ+H<4Z;8P&vJ8e?N?x6S9&-~tL}>5$`w@Ml(|@zIG7u-xC-e>MRPO2m*2QWS=n)o|2-2oOx`>AnPf?uNKngW)gN~7`zE^J(XbBLi!0-K&>XSMn1R;5v%V__c|Xn+AN?7z>7Qn9;H@hg?r zX=}sj5!#StDi@HxUpz;6ZV0w>?Dv6;3_d}7Tb(mgNewH_>f|Q4Ft&dRn5K>=NK#sa z=Ms4UoMYg#mA)2$wv1QD2Eq5jrvY1W)OdaBBsC`k)kdY?zy`+2tQpMh&ML8& z=PmfbmQ#)z7wt^`X%shka0ZH>k@5%+P>A1EmnNKi+9IrNX#)CZ$kst}lB`Zrm-Om* zdZ1i0Y}@aBFjiyXw*S6Zh;FDmG&4)Yny)?Yf>~YKpj7Gcm7lV%qUsKX*Cs~Z=l@^- zxsM<2I7m6b(e8gM=D-8cN%Oh|Cq{0D2}u*AHBMXbAUMOqjU?d0Po<9VU^s_)QAui? zJy`TFf#Tx zc?}(c+ZQyh+3>0^;0j3AW}lRlIziXc3^U=;&M^(>SVxxx{P4t+YIW4)2k0)|d}7`s z*5)o6RI0a~6~AiS;0_ZWQ0Lsq>`?2A=)NuMB_j0x0?&czzTM91DbH+ID<$a}UVAxY!kiH2|bA*0#qHvd4(M@|GFaU>8k?QGbCL zxWfea_8AgI1|Yn2xO5}&BTxTPBHRE)k#)!YubyXe0U%pxH2;r6;ky!7E`VSafqJvs zHyQkIl^vfh9N9W5S$R~Q#HVjqJ5>Ac*yN9^t)VM8NL?-w3~eX<=e-9+u=t-c`R@6` zK}xJGsk2=AJY1AAYgJ7DD)P|E!KzgQo4^bdomWlphm70_hAXT;yu0_K$csgDZh-+$x(Z#T$D=n$wFYl@$gs5#MO#JzlvD8Q4^ zC(rc=W&B1~$+{22MuvvYUBe?rb-jSBj+c3!y9uYp1&F*-_roJwCCsVwN%nsLWeJ3HSSfmFst6DMbuVtA0 zmPq<+bz84bRJHL0+_s{0Uu^MOGTZuaDmOag@MMQOA7bkj3lycY855n=YTpFG^c8Vz zh@R^J;&!rkFtG`%Ho|n+KszhT0DQHClul`Vx5|&Q(-RqRF=dL>*b$H@jVREesbvC1{|UjAW4!aa`CMIiN5P_ z4R^vVjQs&Zsy8?wP9ITN#iiX&^A8V zp5*0_5<1Y`RNsq}2IV<0=FpB=|2zVTrf2Tb@mn7@(E&=5`3AocF7)Gr$>I6F(bNVj zihFXja?-q-RG;H|AY=7yHTGt}&@x^|f~t*Kk#Q@%xm4n?(cG&`@+vG-dNgtPB2NGf zAeY!FE_Fh)70}Ux{X^m&X_G_wLL+~sx>$DC%zwA3F&C$+@R+@0Sj@N(2KDh}iuhaw zsIS|)I6VJD->7-tWwBASxWMJCTg$nDQybe6H{%We@?>Z3v`Mc2)D}=`)M5eND$(y3C2% z|8#fQO*fm$k78dgoM-CZ=DqZIYf!?>P75v@PR{+qy?-=2&FB_XjZJ>Oa-Mno-=J3+ zHm0@U&8WA|Z;ZQKLdr>w26I<=bB|&rc;OS#L1Vt?1m&8iKEZWhUe*byOf}%Eagj0$dxp0{wew#d`@o$oqhN^K& znIf`R&SM|s^OpI09E_#|Ppv2GRzxp+Is|r)b@HqbXr{qk6!$o>J=sEFTJMTn$%9Fp z{z0?@U=kSIPbbg*3D~k4^k7-riPwg_zB25Nn#9mxY z{F_sr$1QP{CD)OGwFSm;Cq*ei zY|lF|VH2M182>YDhVM<*R3me40*<{l?8XSHF(1b`Qv4*R51=kcTcYzkT-d_+4#wKi zit@(eZ#yR&gV>c6!J3^k(~~?n+Obep`iie+`#9!R5A0i~5&WB`=c1Sz8=C1W-hh?{ zKs9~AsQ=b1qqwtLb)XJnGUj(k;%Z=$BSJj6)%OWVCl0p1p;o>yZ%?J)s-SBk)WF=rWbyYHZA8%lQOFU8f zd4%b`sRL^$1@FX~Z{H`P?yA$On3v`>(`kUhyirG*;M&|jO%pBSKe4(sOv-Hjoe}~0 zB-G<+s#J_ST+*-1QxodQbQX%s-vMOVPXIJ;>I^j*s&TpP2Ot{wavaLKPD)61XZL(e zweBl_=Z+ZaO*WM5dVShDn6~}*cIa?V?Q}FPfSs1zJ?P!F17M!-r(fNtYjI!I$ZWsO zn&ffGn2=i-q~@)K*$5IQW@q(SHSU1WW;{yoPzVuV3m=ivVf~8$!LT}{RLTt1IYaCQ~{Wv#(119`Y~D#KZIi=_|1;B-l^f%UHl zHLGB-TFlS8X?6`k(cNm&1f6xu@u_xD*}Z=Z?!#4_DyGVYhHC%GS+v1tF+`^Tit)ZE z^tNyoP1y1&jeaLqWJw}U6YmolMe(Y=G$eRdcOvZ#VQohVhqI-UU;qdM0XTtwuWOJZopD^m{d#p%1Zb7Kc-5j_CL_)i`6|@m^R?*y?Gv zXCmSdrzV?$k{P%$r5T~1XhTfWz=Ga_Wv&;nASWBXp;`OzEgfX4?I9?@j$vYXDYAX= zMU1~?-SKD0^y8jmn;5!2#*Fo6b+-wtDkg|UpL&l>W4EQA-$h3-JYUwUTxSzWwJ~@C znXdNV#Na|P78Z*`Y;nW2YwChp=!#5i`ehD4%`9Pl9hDX#PcuqE39AP%*JC4c zA8f%0LHt!(3^Z&?xL*q<8LoyyQPmnnmW{yPfz<$W_O!2%g%2YMv^#g5j?2gzg;XGh z@V#LqCS|H|Fqwbt#<1Z+3{nV!Z^EP{U|&AFlaJRr$o8?|n3MF+^1cH0Vb$QF6ggT# z0&QSoKbr#c41#Lt1k%Gu*sFu}p#~eE01o zz~C1kF=AL5e35H6_T4kapoS1hvp#VNBq}b2YSlGXc;}t*#UY=5o7=#$m1p3?T?T(j zby8%A2@|>#FC&-pY~=FREvRz;--Tuh*0eeru6(^QCm#w*Tv^<+_a^DiuQ15rpB$C_ z`ykk$uw!#yhM;Ju@Gd-~3>MRX#r8YCl{u2fEsY<(O~ON|AZRLcOHwI(5AEQkwLN`l z14~7=XioCWY~H4``uBr zW!)Oo3$vUksnW~ZH%R0ltq==$t1tI5g^hZbH&fY`1;)c}_b~`3CV~8BV?W{}Amm}6 z17$@}i3#*=l_r=PT9r`WuUP7FC(w}@mcANRSOHx*mXjSy|LcN0I_k{y(}ziPn0~65 z%3bOt#*w4?h;9n73DjccE+&?}3w(qgUpieC-Ke9a;8#p+s@&x&$`}PxVn$pUhetx& zcOw4_=do-#KudNOlLPKJx(cjV0`*-saHHbHw0NU-z^H5(<;y37)zMMK=m@|jtD(wU zP!$M~kl-xWo|>~fwq_igc;66n?aWioA-VxpBlhs>P5ykFa0a+1$TCQksbLYMij$-c z%IBU6T8&HX_Sv|y%f7(%$HGUcoHy#3D+3>Pa)|_v%1D;Bm*=o$Ad!(FF2INlo&lVf zHN8twzcL9vO^|@D4Ysf;x5)X2t1xK8S_u?O&qtd!!52>|5~#%!ev|+2_d)nggx`~~ zJCV@Eb6EDNLLwSUbhP@ieGN)z-Hz#2;5|JgeGNZoEJ63#ErptNED+ke9ZTkjT4wp)W3-muCESY_*-QZeKKblfa&H`yJjft`QR#yj*}UtvifT}cg0>&6#aZVQ{xgrR>M-1 zabfcjgaRXWQ?irroIU{pC$PQ~q3Chlauc@*2TmVU7c{DmMM*st`nwkvc0Pya+)O7U z4^~Kkj1GKJvMtOEO%^*^9ksQppF7LAEkAbts!;s9Xm3?N zQ_7%7lIRJ+&ukRy#E6Kl5tC+DZlp*58i!54QumZCfM3~k3ib7Q4fqF*U%`Z^NO6Q7 z+3-1IG06YB>MCx}4cut6o_TtunwW#3+*v%T%pU#SA_;p?$U|yA>&5DxB2;tg`)_l4 zIcz}S+-klR9}xQXY0$2%-jdjnLPL@&V#w5cz#nzw(9mkN|7(bSBQwPB#sW64K7Sey zY>s@o9dz%r@GEv(R`4VChEuw`=tose#Yl8~@H6k@k2unas5^Vyt}SCsU^0t_a3ChW z(aox2h~wenN}MF+AwD%MH#}-vm9OGC zmOLb)S-#1?kpDs03RG!02t^~QGT24f9>0VjDbsZF=~l#O`t52}KY12ouv*IW(uXi^ z#uB*3NsrT4)%~o)7_5^r75#smnU33;1(qU}N_ptl&4%~gKe6a@+G#x6Dn?>^z4}fN zd@P9Ar+$f}Z#&71i;sevN2lLxATZv)u|(bCc_{R9$hLEvf{sKWBvSasvXWdd5J^Dy z;n=K0p~{i%W*DQ^4?|&k1BZ8R^f`nS-+SSi8b7e?{bra(RT;?|OTldsPDqC+di*8l zRU(RnW0bcPMD%XA)5J<|GfZ4vH5~N;BS|ECGscRN<{`|979e!EJ_{E=&UuePvRanH zC}NG2&Q>_Q7&woyM+;F#;CQqdH)X?x=S3EPxYc?meWdm9MW-@k--Y3(>T;e z63ttLqGr?(ed;=enPk^i;4G};W`=1J<3sdcPRCykMNf!g>7V1UzYcyUbI<7@bnjO+ zD_D0f5$VX7VYVji7wBzaC_xy{e7AVrFERS|IBboRjbPTJ$7OiLX^8P!c_uy{tzIoP zS$GyZJ9cj!A8H&{4cHj;U6r#_fME1=bFDr0@h%8l)|`R@e?tqT6JW*_`j5r=`SvE` za4h0P8n;SuFRUZ#M4NHrn#AxIze|F!|60H53R6QG;QYfGUIfD&w4;t^g^kp}XqL%;y>I`p?4}b%nig=4Wje8?yO!UIggBdNvS}U{V;)Op`pRr|ZsKiLuAE+VfxH-ulHidmR6!}Q2E{&o*Ot7~#Bx0IBXRlX zAQ5qHmK{9L*{05r`|b5&FxdX8HKp?z)8wNlghmPr>Zc}i?b^=mL^=l)_DYrZ2ftAT zPp8){Jj?^MVh$Sp{w_~t$t^T2!|u1<9KQh4u@e<11~i(Yp7Ok*FUxDjUbuvQertjl zKZ8b8(ZkPcq^cAx!R?8^pT4Rx5it&&kSAUJ2sqsQm+YCLw*A;4{p>_$Dz7ItSm_E! z7l+v07!Y`z`KXQzg2JO7aw6Rv?!Q&_S^ ze44T$>hJ5{PA$9r+UCCi-%!miIK-Ii{X!Q(OTWL7c8+;+^O%~vTi*dl3s7q1Q02YY zIOfdsrsn!_DGUnzC3a@0^#-2q%r8hNtK0Ll`7h5WF>X~ZvQ8plKDTkrsT$?>{!H!| zHHr!>2~}z*{b*W;8aAf?<9dE_Kg>K?a-WE=%@Ia_bn1BBxsT({EWv615<}hBxCzWd z!%(yAJ154n(=rl9zjZ#-y6;Ykq4e7oGSb-YTH83L6F&Ax3^&a)3M_D>r>!dDpMIRK ze0n|&ML_(c6&8XIJ zIr-Wg;oIf+Yk+1ZHN?6(k+&VrZsXR$U2Z3doFSVnQa6`dnKzDXrbXca-tPtTbYsH; zty=DgU=8X{Oq}1!y4-~M<@mMsvlN^>vm~Gq(oHAn5u|_ zrdSb;+D*h~+R#>phR7>AP##4?B|OCH!cZwws4!I#N-+a%trjKtpe<TrsU+R*!Dan^y-s@`&ephgDbRgXa|-p9%LX8HVfES-!Ywc_`#ITw zRL{ed_E9B}4R`KL(2TIGXV5|8ifne%EBuSOV>CewR(t8mShnKz--`R z*|PxHKf^C;Fq_0QL1gerpEuzA6OwSUDL81de`|Q?wWp^s+tETDepcn|(h4L0z?v9H z0_V2|FBLd`)ci`NNUulIqaMDsYW zYv*Cs{o-gQNi5VVj}ewTF|tZKI^A9iw>0%xK*BVtJ`j#{1z&*6ZK8&Aua$Py99?p-8Z zsSNW+8;fO30~qL{5Q+?-Ec`*F%2MQM~m|lWqz= zs(q1}&ibV+wSM>UTNSIAF>3;MZ$zL2YVoHAI&v;|)&+7=`PGIRN1rf+#^S^_+xC&F zH5Y7;;^_W0>0s;&?N>#VL|o&B#%@1Z)V6FHa5cS*sT$5j_KB0a{Oz{86W~6Q#me;h z^HhrOyC@__p6nKt0@bi7VrBEVv1|7W{sLNhSg|@q1i4?QU`pcEg-Ja6yP2;|Ld!1j zy_A{m^;ke_)er#-7nDvx5(@>9YZISqv?>gW9(+j3`6>HPmvB|4 z@*(6^Rlux*9~`;nxxgm_WftAptF2Z6BBwhOc5mqcbsAAvRN>VJdX%=h8c?>3BrMhU z4#-a7)9B`91Ly4o65-21+>E}-v`QH_&~VO! z*{&wZ^!pJag^8SMJu9><4TdbxYG9H94@Tp049f}uoOm7$JW@}qsX3mZ!D#R7Q0e^Y zh3ahtwgM!h=dnO!^}b}!p2d8vc~1y_y=RQ3=3nk*MHV5@?Ap_0SO|Y)vzNhVSCvyP z*|u#?0k4&CVz9p3nTd(=#Hf60;J)l4$0J25tj^@>&H+g^`oBowOZT*e{73W2GGj?T zS0umxSE~T4E6!Ve9M)N)NfM*0vWP7k<>`uftBUvP&{xMsD#wR%9SUZDyZ?DKLRkS6 za%%E?EzSCAQ~qq%(DD~aCuc+F8Uf7jUa7Rtomq>}Rz8>R{chzA%6qwdal^ekPfzTd zshs`<3h&kj1HXa5>>s-rZgh!^eR_)zSzknl#(;c)?6GVQsvrS#5F;?N4+StLT&aaH e4P?8Kwqc&$GnSIVSd*oul*rnykTHs~#HWx5gGjcfvQv#j zn-JNTMkYH7QI%^M zF6b8L2KEXuaV_DNN-dL16qd&Aq8D>$R2Gv(Gz@sV>tbTv#|@dk)^*&Ic`-V$^e*uM zM*YwCJ$pvpyjcT{G1|rCz4+iEMUaYtpV{^QKR>sZkC6~^*?-w-Fd^=))ZUFt$tI8c zOijML*!FjzW%y0V+tOocPW9hj^1qwz`Sa&~77kGaeM5e({5x=-&l5k=87>3mQTcd*3v)bS!GU4#B-o+a|+xmDkHZg6tzqEJCfi0a6)}Q{P_`X$_Ng zT&{&NA6t<3B9?6~OFSO+=H%!5bx9oV{%HqBnjk3hpN-M1!higy?QY zp$CFgJH!aOwAR)UHtp1vCeMr&ujzw7oY#LzIjtUo97 z%ekG^SOY(W=%$OkIC2&XA=aLIz0AI8J-&uZ9F~yiw4#}Ipn2@`oW#=y%xm`|&E(16Jrw`yi9yLr z1@9C*?#ia=N0|`>o!WlLWyfO?h$51XT2K~o%O98N`-6__ld716%w z=4qu^c`SN&(BQ`GDOF6;P<$?*rI_ZkzZ+wSxmT=LHzo4gHc@QN$~(Bn-C{?P<3XQt zHKV}heigqf#r{8^y5cxpl@ zCaY?dqT!kJO;!}$W7j8N>a~d@*4`^&bMvLg&TB`+|H5w$7U<|tuFA?174R*RusvXO z&Y3swQNGQ@^SG4c&2z{6`&E+%lD{r@@WtXZOJwejyw1yqCL*tdy_#>`ZPB}K+}WoG zuh`n>{>|rX+pi@Wl;@oBy+=5QOL^Gm=pFiTkG}r~SyH5;p1R=+(=tie5@o)US9;8! z95!GHd(LUh4f~$+{qp!r#%_x4&&)yXU25&!XV}*ZhQqfb2K7rzR^pw#f!N7wt!vsQ z+V9wg&nX8#9pGDEmuOpAc8lyj9LPM99=;C4XgYpd-~mC9Mf5(=l@*YCez7N_c#-1-GySKGStrtG~ zsso35CinFJnKrO=Zhsp?z4z>^eyMW5&bu=Sw=`^+%=2HKY#M*EbNu11931-b>M#oG zj!((WCJ2ZM4I6x`I2RBZp!L({eGzF2!!oXR zDQ)DiS7X>h?I8nIL~#}MajH&189~k*yu~iX5Byw z#Q2)+TWc%ywE1S({o9wrj%nN(WZwV{YF1>b+#-kdj$M}87zAQR?ea%xHpt|?or~m* zQQoLhThO`%cSoBP+w!fBj)*hlg$e8B(;wDWF(P)3Czbyk|M8_I?w)}3 z@?V|1|7z^I+k^XNekSFD2_liJ)(F{<$M> z*iz`}<-GHhm7}dI_F0NP)E5#E-Cu2)5TCR6WFOayY*p@>Gx$rAfen8SM-f~U74j{|g)^fakMjv9 z2Sm`zJIJ-qZv6fbS^kEObdf5Cmg#y(=8GwTzfv-Ba>AqUO^ughO1D_=jD$yO;~{C( zs-li;D{T%oy`z%ZhZg8=X0H__Z?vu@+E3UnA9L)=aYb^T^N)VrYe1yHzdx3nX_P9; zgQBY2jUoEvk6m>SH`ZQy;^O%Li%bU-CU)djU>pdOD1I zx^V%6l-H=E!)of}7dHnjnXf~wsp~9-b2lViE+{owFNU_RQb%;{o*KorN_R(^#lsG_ zMuO9BgqE*at-qau7JEgf|@1t zyP>29Ei|P`zs$lNQA+F6n`)-b(5lmK-Yzbtdx+I<9*8;=sx(<^z!hi29?#`Q9B;9;-}g2cnx^1Qr)Zoeu%hTidGf|oqZ zf4MQ4e_-HJ=kVzD<5)h_`ue*U^R!N&Y4N_HrXB5CnN5h2RX=uq?{GNU`hCZwj=)A8 z7gA*k;g&XH9k?QM%7rf_ZQg>pOdx(%g)EneSXr!YzJq3=&t|T9HBe$rIIl>)L+rzcWgl3qo?p0RP(%vfF+n8PU6n%DV=_+?gpl0OooWh{ z4iI_!_OJ-?r-;p&ROrN=<2um~w?v|?x=9nNs!dF&IP5y)=h>OeBi+mXjpmj7M+BKn zgZoJdBW0#b2pGoGLRVWKg#D$M0@cK3(Q1twA?u zAM5DD%$BL5)O9X0h^^`&isTYf=py?3_;8rw?Jz5W&+nx3p{*+F?pNZmU0&`g2QaMl zOVx_7_QWihKY9!cxa~J(*KU*`F&+%xNUhG+Kzv&g#?EU`%1TBAT zx&vB{78Fe1cyVGf>&fVHkDDX??osoiBk8jGCUS_s=lstoqoaslUESSFmZ;eB{C9iM z?|UHzV?04Ks(Jl$X2;onhLjlE`nEey<`)W_qE zK}#=vBel0B|6rre%4|X!hTaWQ9yiW#^WN<7xOh9Caj-Gz*r==w(w%s`53%=khgn8U zvz7%vCabBtS7*)~{cmC_)0gBW$J&$;un&XwnH#)EoT8oMzdj5&G_BoytyJ0lN94>V zvxWPoKSdS)V7Pv1-MnkkybQ^m6yo@fw61vP_U4pgTcl}q9bG;y;T-PP-FWN@vDh^O ze11b?!&=_xqi1PaTlkz}gKa>Qb9=hH{oWlk)|Vq*{PC#rQ)>|)GI;0QcqeGJdjGWm zo&Kp`Zz5NWH9tDEd&gvSbLY+6~OVe8q9f+zps&ZBJVL)zxh&29#)VqKeTXBq%VyH-Lb;qiV+|BIVv2Smm z9~1o0Lv!pLVVQ5N70u~;9xui4;I$^!H>W&Z#OfZ-5)x<))(mU+0LfcqIyq$G%t>J* z969+g7WMv6&2czdv$4-9#ixhkd}hdO*9%?C=j;{DB4Ruld%^Wz(9`ZsB?%oH??2d% z!!BKWso>taWaepfm_Yowv6f$^M(GX5XgMEoJ>yCQk^8HICduz!AJ$zd{N>Q7J^R9* z50Y)A`?fZn|8b#Z@nwo7Lv5I}_=$+dpC2rx1~qXSM?qj?0YmSP#C!+5j!+^(EnQPj zr&{mH^My!IVvg3j?*f*7(df7H7~wwBgG}sE zy`+_amZF%ium0@$`{gWRGlq&SCWBa`Qa_a=suX-fj{k}HR4%|T-&?Ta@{iSp-`5o$ zA6(pr4p;=pp@e=H>1Z1FNMF|I)&r($b-&~u;>yOba=ZH8{OUDDT=_^hiMB!hljpD< znXSL$lB!Pn zz0Lm?(s3TZb9{Uc&UCm+?EHX@9^hwge?KG;J3E9ns{C~X2=a`p(0@JXm=M}}MDCss zqWdaH{Y)M=Hy7sn`8L;IzCZDvU65f|VlSWVte%t2K{jfhU6NtMt@}`&dP`WYw>3`I zOr6Xkg-m>q32a;=z}jbQCW7TkgeX2I`v$xd$R7D=X_g$d+8DoQW9d*5uG?cLXEOV2E|%bDB zdldx!%gXe#M()|Fu}C*3(1HoQw(yWZ={2%z{VEYX3N9`or=*pt@OTXX?hFiVVO0KvCn(rZ_bVHEP7^>J}tdG zwQC}^>*5kWYYHL$^d5!BH&c~KazbWfTgI*1XWyx~& zxP$0&_fl9F#2WDU%HXy9N;xZz6E^v-!8#-QH_;s>7i3ACT_O8B^YZpk*8YCL$Jp1H zAf}O^N@gq{@4-j4vMhV>lqt|W=ferrCV&44Z8Bp<{y3qMo75nTR{Y3&oT4H~-Tln6dxseD?%uW3xwE^x(f_jBcYj)Y0kY$-DQtgr(p46v@!az) z#|WF0N@b2y{by!^yCy%aB-`&c7A^j`70auf?ti=Ba$*13Rjkv4qKFmMS9K1zorcza z>Lvfpt4HKiaJCmuD0STKY3p2TO0Ip%Rq(s|8OyQ)rsAW+3010-BMNZ#MyZb@co}J` zR7nyg#J2};unHOR=J8Llfx1oaDvR6I`!`z5N7haFMGFJv8OtpV&y@lfr#+36pQ&8~ozF6Iiz0S6qH4FK+i6%b&LPG9#&i{HE^V#FT z-<_J-o`r-&3V89_x9d_=TqQ|zem4H2R-6;>+A(}EAoRk2gSt%`4!;@rKkd@ebqlMo ze7RpSS=BzX>ydWhz(36$Z-`aG^3h<73C00N>cHJRZ4K-n%k#trGC*rG-RE&}P$-929x^n#bj#NUYOn~0>$B6GMY6}ZMyEk z#Ab;VznaneGRqmk_jckh4T*}QobOpFT+b>TUKaWlXfglxZ^wdipO0|aqZv^YHrODi z-L5E&r^Qw%jU`MGI7A@WW^31}8=f$DQ@Wa5`<$ylCseOOFC^DtIWc|H_zLP<4REORey z2Q6hdP~oS>gXMB(oU+e21`!0))yRx3fh}9CzX>r;^UGr?wz+ERy0|DR6I-0{3(qle z-HIxwwF{2}X0x}WHres_p}LHh>uWo6h3%x|u$_0`xC~Vk6|p$4Z5Kv)dbzXMvL*qc z%D3LOpB|6wv9qI6<1x~l`O&RCNzrkgGC(s`77fMDJ4eu3;|~iF+cX(BU-B#O(QLvZ zmW9EJ??7fw4P1(j+pO1*FTPqXfGRC)It$?RI7Xx&@utrn`aMi`h}{xYcN=ZuYCk%X zC35B~&*;PpY`9r3fa9y%sj0MmU!H=oUKiK!r{Q8{g58s-P2Od#XtCSQe%YH2L?EI5 zG;U`9tN~xK9@(aZNcX|<(?nrdujvNK+}9(DmsrUCJO_Q9n2=<2UE8KBNyV^5qk+E8 zqANFD0PqeP+9xOse6Z!_WUlNtLaS>4E#=GWbB=A;n1=<)flq=MuQD7F#lNB;o)cd8 zUymZm&zy1OM1b_Nq#VbuTG15YjS^BgCQRYR`iBp1|C$>)orfFvc=lKB!h5lpTZ@9q zjFR6nx22w0y_Cjpcf}kiEY)3*G{3qOEP^QC>U-kM1qHu4htpU!_^;o#6n;0t##qh^ zAlCNWGPAZ_Q{@82uU3h?n=~+3eZ78L=UN!sJKIv~hr?n-Cv}$wc`t$4Mt_ri*ZZ#u z1!O(`DS@6oJK>UAqW07aif&)RkbJ5==30wz?pZw-(7RT*7$$+p7!G_{?q;%i0m#9y znf%L?9zRtN0JHf;CcPqt7>aKWNV{rS^Ct;V3F8vJvDv%F+ z#GTG@TLPab#ylLK@K|Yp(D$-57G(+Z`ev5T?CQefc{-ru#co?#O65vQ)gE)d9c;)^ zS-&S&x~TA~sIrlM$<*LJvKQ*@%arHu+ zY@@cOHC;SmhQOFt?aq*iVIC+}Wiy~(eXt4nRj{b6<-@HztnJz2u{Fc&;IOLwJ#Qr*qf+L^H5Ab^R_|8 zO9MkUes`d9p$t%_*LUM7JBlO}+a5I5m2H#7MF#&7M{?Qn`12AZlc`M_34E1XLutv| zT~ZJy1NSf2&K1MiRU;uo5PkmcqB7%-Ad$F=9F|jpWz5_%BqvB;M2U7ZnjE$18?>qY z;VU(aVs>uyf0>?QIekHtg_Li2?1B8H$BXlF*H5i<hXs^q4eBZvc#$Py@VlT=NPuhXP^Ejr&!;wPs8M&N zM(W2i!M(7uuegxPrk@L~WBA%lRIfMrdFYb8lkLOBbUYnr?s?h^jSD_U&O17?bEffqj<%mV zF0aI)mWVHHkedVRqg5&Oc*>s^EG&bGP4C}H$EWEc26Y(lxfpA4(yTe5H%p*M?f zyc!ho;E*Oa^fMuYQ*#anEAIO?A-DiUE!}52;qHiAf^Fm0&Wlf<%Lk=T;yZuS%ASJ&lJa5|yT__zmur7`|4a7+R${%8VEu~I;MUg{~St=x&p_9P?fVIO@-QI2zr?D zjNpP5bA}br3Fcv`w}Za(re7Crw(4)!^uCdL($frj$nt>x_?v=P zdHY^Stt#9Z=Iz*AwUf!56BL5FpT@FO#NeI-P6RxaYF2MYnDH>@6;qH6K6nj>KmDm% zCBhGOGD336EEV%@nuYgz#o(YJk7j$iYfz~cb=UqFncwZJ={`RR}!^>Fp6J6jyxA@g0EN;5Of%W*a!;+xWD896VYJQ3Qk zhD>$`huc%L@Xh$kZ~OTBHj;vPoe8wk*+{H*wq3cZ>hNmae{Iy&haP(FI;7j&i{<0> z5#292F-hGK9nEX=>B}@@r;5S8RqX=&`eLTn&*Kltdx5?<-rv^H*n=_5Yg2M(426VG zeyuIr^U`e%u)RpiYWe&B8wEzU1PmG*b-_5N0wTRVk9%8o@&E9#f2|*#8z> z#7!{)&{w#~CVK^x3v^t2skdM}dSGTE{FYF|g(rF2V6bxWELJF!`Q${9VD4J^vtiQr zX7irIV(a(Q=oiZcd)L6ix0E1}>}l-U;Pj>^3q|HSq3CU3qQpf)BqziB5fC_?LWZ z3)j+9_S6D1;VLRDo?pEZ*qC3=mKTo7R^XX5}x-cbN0c(xiz5Z6&uOJf(n(l+^ z%$V(MyTh)$7=wb=zl=uvXza@|%!c@zKliqu=a*eo>7iJddMU^nUZ;P59-Vgk9g7vt z_h(DYq}-#RbNu(XTwlg$?)~C*{V&HscZ@c>0^4hk1c}e}!IlMo_&a*)2X*tgxxRE! z7?At3gRy+WyQ$BpP5x!8-i2S4kn?)!x^lQ&Z<%i1KEwk2#ML}>$2IBEpS?|2L#A50 zebZ!;MOI&L$Mb)aCVY#E>K_c1C?~9W1h9xJI9lME|Bglfh>5D|2b-DhKT?}$elu1P zG?e`G;1A;fEhF-*oncw}1Qoi!{@cFb)n~~I`xZ1{GM_#G`tVIH1CyGs!z`F4ON1qe%DD_ok9##eGG=!FE>-8 zwJU%|w+97re2dA&*C9*-9Q6|`hCUR#ms6XP^e;mCzO!8?!y|@y;}0ZQr%Gy8sQl}Q zqZUzNmggFN*fvn55(u!H*FxC)b-lMg#4~S{@T50iy>wRuu4!)m3ml?|R4Q%C|Hi?6^`LN4*^o&Ev%`lzzO-6D4Q^dZRuvnFaa;ayGcj8&J-Eu|GGfe`5?9F z9mEVp3MHRhQ}}%se;*8hmY?e)U0IL@3uE(-;QwW1?wWQt_V73TcpYv5p_;= zoc?dbU)$FB?c4$Wr0pl|m`Qj|zQ|(f>AWO={BkqZ?0>^4)Xjw~SJDleM?91d8kWp( z=w$UWdHw)s?NOOkAT0ql;J=BcVZR9~yar?T@7;bJUgYpUrxfbmb6ja{)f;mEDjL;s&HQWADeTQzvxCVw0*)&h}*zQO{(EEczP zTyY)Lq{0UZw5QGXB)tZ|m%9>D?TO4~-l!*z>Vf>KjG|Nx(FZ|V#J|V#c=PCYy_ye) z7t3&k=StxIm`nk{zz7IkM+S>4Q3CsfAv4m-I;F6Nys+mgEBpOPV2#jBZigU;kMwoBEE{*T;h0dHUf4U^_SNlGhpCAd z)_b>t$!z(jfx`#QFmH4V=toAxI^O*c=D}r{rY2OOzQ0825uc4+PTKo~jrJ34pvNg~xY)ZUJ*)*L{+61&5#f zR6;CT4P-jF{u9B*JeiwW&Y@mkK?G%PlqSt8Qkxd-D^(zgmyqPG8S{S$Sfq?YyOaBK zV^X_vtKfPLVAgViUGOZp41Yd7KV{bQl@1f66)7n>D@mn36!lrD2_WfG+ZwL5huC6G zuG6B|KhRminqtV_B7fYwS?*nAkQmG=Ij5RWMvdH`IG);dB1sIE3pqVVK-+4v=>uFI z0|@o3GNV9yWb>lb;NcB>^7HA(g7@=)9jCwIJWkt|#@;<*^-4_NoF_%N87!61bw)R_ zLiXbcAu)jDPcK9L8f3Xv^|R!cYhhrqy;VwIj84cD{-Dc^5HJ6cQ3hL+q6BSP({!%~ z^F3;CQwD66l60(wd5}Pi?OA>Lkd7$~kM5G&rol6gV@g|-#i9M8TN-r#SoupnlI4UU z9WywV=(@`Z*ZkSK5DW3~EKSVGwp(VU2?T6iaInC-0l@9}AHdB5Eu{IG%I)2JkLxoT z2c7zEKZIH9=&1W3Sn5&SKfL*|=UNKG6%Zx_@2SDju_{QQZ096(&pIdD+nzkcO4sS` zujGe9DOZDQ$4>mKrp#I&69756+aWfi`Yf-LwrAsY0>JI2=G3#f8ikcTi&SWDM;!n( z!wtQ8KU5q>j(7d}r~?bf{q?OY`@OY@U#n$<2yjUYzT9uQo@eY0()iO2yf6i%{n5jQ zvJ!{?CB=g~35G{(zf&ivMwKudsN>h(HshG8VnDIap)vpl7T85KGC6?_FT>jEob%Ru zh&{g{fQdQtB+3pL&_pcuRN?4Z{)KAcS-ONHVmb+ zc!w$`Qi_y1vu;qF=O}dMIL}{yAV~bID_JPmW}H{jUNWG#gU ztoK{;kTc1!r&jzdHK&_MNBTTSme)45W0IpN1aY) zVtqe&N)*|HX7294pc?b)49Dl^{?4(AZcxK3J0CeCVGCAOc1S_)FT9PYdTtKFaIGx1!mQkh*bP7tlW4z}`pk>|x)sgU_1m`aP8|rb%{QTRem=uY{v>GX4_orTSH)zOgRGQ|B82|g-7oQg6@PUuY zl*ZaVVS#zESCseZI>RZN+7>!HxE-APgo<&?&2mZcSc56GN6fwZ#bEQ!ZtB4$+FN5R zjT4D{eBi!uJ!|y732iORXXIsX)l7?qJvUqKJV6z8A?X&uEeH8Q^{^ngw+2avnZ|E$ zi7;ND`UC^qT4@aO8>vfScomaX)@Xrs^6TL#=~S*FFXJ9DW}R->p&hU`k_@FJQ>3Vv zx-CiR=ho@g9={4_PKIji0qaRjVSjQ@e8`9%te~Uvw@;|9U}A0WNkvB+0ib%#1uy5k z@pgM0KJ|<4gFOui;3j@FFeAj25s1Z2qh5Zj=b#9u#*MiQML}Y*ove)FjnvWFdqB?Z z)W-}+l4zyb1mXJK{6i3xgRVK+QL1tHN_t2|7sZcfB#Y*ndb5qGm(GUn^5eL=$Q*x| z7-g#&dBJHt%y{#~6vp*iWY)oZwlTpWQx!8{Som3)j4yBrRywdVhHp{^gZf$Xa9JX- zvmJ+@y}#W>Uh#462RN`g1$uDc<)igO7ddnp-ckVx zqeC8|z{7_Sy28#@VHz!FCQ|fP*_KNvX!^IxBz%pcuLRYp~Q%8U@ z2>GBq_TDQrR3h?6IX@v>ELMEF7|sDYpNkYtkxCt@zg4nQHtbvtP+zB#fA7xEUdXf( z*S#i$E8B=ebb^5rO`RvT`AO9LEFomVsq@z?cV9~Aow4rW+@+;2Nz2U-Pela>Ex;C{ zOOyx#SHe2Wqa;?DJs*-jYqa=!C1P~l(qOqWnTtv{QvU|>$OJkaBzwhzy?@k4$9DfS z@cak5G1gL~%CW{DaQrebO2&b<8f3p_|4AMm<%4;gYa{zTNy0?K_#C_C+Ppui`o~lM8gqMHuKeay*lQbWY6B0taX!Ozd1w&_ z^)Hq%%m3N9^zWL5$GM%wX)uV9-D$Ap*BTuSe7%#_X}|;F?CbZ6+j#!b;7O^6AEA+} zcCJ#L5EITre{{VyuO11xZfr|wx3>LMbp>9p87WHr32Pnh6`viJg+u1mofL)}n5M0~ z5t&SHDG_7|Y7sLWT|uGA8#yUO1Y*V~E#kUt7=FaKbE8|Vub(M>^sMctds1K{qyESR zwB*S{iGOhN@3%cRlmxJaDLgo7s}MzGS`=q&peAe5Sw@fF5Zo>8KK zsF)7pi+j^SfGIU8PMyT8pOow|zb=JPT0_!LPrn=%!}|EG&(&ApifunH?r?M9`v9kney!Hz^%=6*d?KUV`io`BUfH64pAr`$mqX`e>14m2P00&`q zYxw0Jb+?h}t^%5c=Goxzp8v!zH(l#L3j;0tY_eDnFihPyxJd|yFSF#~(bYx?*E~5J zAz3gvx#c7i>>CGJx~H%hC$jyhAdS3jLMOI1y%64bL+lDL6Gt<_wtd`CSUJ&H4!n`tq;$SX@qKtE)}V#Q zW43-h77>asqfBD5_V0nU{jk8vzU-WTh&%&}P5W#s`z{f>6%56m8|;(G$HyAWo_ z+Q!7j9zV>(w5F3DqU}mr-?vR-d_JE2@8OZJ;CXC+feB>9V_Q4ZV!e$|1B-FvJu-kr z@AJt(byzN#0G>#o5ko|Rq^pqyw#NN@I$ys^xj^D4t>-PUapVOou>FcujL#(hiU-GF zpSX9%72DzstR^vahTAp&d=7@ioH*pS*VPWKxRKBB0tTsl7`)k>eJ?P=6dJ`|)aQ&2 zY^d*hAZ-byu059GR2cIiO6{d|K04AOKDFCrTfNc&wpB{tbLKul;?w`wutBfA*&Hup|yk3-g z_R<>I0bfs$)fpymIKQ$^WslT1Ahdfi#c9i_02K!hvEpk#E&^>>2dYwW)*==Uc)Q5- zUjR+T`IlMXHfWGpCr`av{+VSgf^@eW6J#MK*5k-!r^S{OOMq>So3Enh^sSikfs1R% z5VeG2kIC!gQ82JAGFR}@{0G-zNLy)?gf^HWxpr#fUo24-4)l>>COC#Q4?x7=ZH@ab z5z^yCtd0L=9yNRa2*CIIzhD_X2cGId`XeQ)w?S(GT`g7=^hl9Y;;{?8dt7Au(Fc{oCqbQOJv#wpVHg8A|w8b^pG{T~!UnCs?%0V2y zGr5@{ENqNJ9-&GrMB7#~i2kOGv)2^>Rc_j^u<|l|z~Q7tWJL{1AV%gN#f@1E+goJD zUvF#8(e)6XfznQ|QD-bdKaaH+D2+v?e#D^EFKw}Welfj#;5nWYUY>5mFtFZRThu$j zSPPey>KfW>-aj#oD5`;mj8;EW#=eoqsoa$X5n>P&Y@kSq!QpjzK>##njNEJCO%M|? zE(vaP-Q6*yu$s&;Apq#P9>E?%g9kHI-}$d$#soV*N)N{&;g8yT;!qOA^o(j8i*Bk8 zhp5{O5dj7Z5s%94y*;uCkW8?%ZMX%NLPPHd5{NN1(@LoGioc6we<&glS@c0k#CY&q zT^;%2@U*x;1QAhT@E6m+x5x6)b6Du}hKp=g>4yFjAsB}2?{udvM|ivj=5@fKV3gmB zLtNDW@#t-WM3zYSv2sBR*yZr`1_UTgNhrV;uJC#ApZ*0-0qDH?K0#QtZ4+W>5Cj>r zf<(r(?69#=@u%)(YHRY7>p{I`;QoC+>Vze!3D6s3S zu-#zR(gt-26sxL^+|uG&U~yJ__9zy?{BFD)mgp5&HD z0EjrGS!j6(Uj|%hs-KL;4ZooN)3b6vSDxO<b|Y=n>V&Tn zI*q0A6g!PO>lc$6h!nnaIL=mxitzZ-V!{kMMPl%S&XV9ev)AQs+Vg{`dL6DB(rLWycwRf_GpeZyf1|NFB>CYAf*pZdmb=zJR{hb4> zl4>!D>Aackw=rzW1;gFTo8KpxRB&`Vua3LVK=&ETpz62KvEGC3s>sCN29dT~W7s7X zFS)~P3l#R+7;4snn&Wq8HLbWQfZm*z?Kz38;d?`E%PcTrL2%fEvI^n5%LMjII2Jc2 zQT{wP!W4F&K_-VJgZQHa1rc{UtQ0Ni^UdRY8PI1>djiTip6#^72Am%?7SPPxygvlO z$!uY;id%BP1WM7Q$^|$(H^*_+dU-Lq+|%G_Q_698jyk_Ie20e;j1o@5BA~6NVk!d+ zirJI5A|{uBJpbz1His!rm&bP&6%Yi4wQ!7<`w3bmj1t(hI&l)>fekZ=&GxTU@G{)M z0!ZW6d^Q5BrUK6N@K&49_rnY~2sSz~lsj|)79QjM@kz0HXgC0j#m!#~js_ocAHDV? zj#65wO!5Bd!yg?AZr!{p|1x$HSb-Db;)r4%Xn-=opSvqaK&+JpD-doYk+sto-b7VQ zW^*q(__CCM~lZ~I_{u02@>Uj#++ar1HyO? z`KfZGaCl&@DrJxF^_&(%-=B9{Fk}f3%V+FpI@@cCVIC z#X2E3`8(+nye;Y0n!^Nv*l94us&W!Et{zrl$u^Ea8vF+Rj-0W&YRG-uHQ znR2ZsOy>6(g)rU|!1nu2id4xW4!dm?a*tu5#mz%|LRt6Wh&`l?;belv%WYmbGqn># z5B(s4cwugn16e`@7cs;!tSGoV)B20A%z=hpYzzlPa73o#+5br;WCg9$g}m0yNeu4m z`{?6U7RrH;a1ZuW8B!6dkr?)jB(O0|>_Sd27CpV%6Ngr4K)`C-AaT?XK1%Bf(JYjz z;iumNS7(|&{bCq{o?da|V_*b{e*eMbJkRR^{}NDxsv>-q=ckY4qFIbgL5T0#=^=u) zLfo&$y&(J&%mq0eiv1@@B#%HCJ>3%yxd4UIiw+}}jOCCS(d2I1yD0HNHqMG)EoR>; z@k^XcLRk{sRK8#Ssk{yRqwuToJ>|r6JX1pgJcS>r%(0e!7`d)Xo|ionnD+SQP))}U zGHdIV1-s@gqQ5^W;TWHF-i9|6@FTo9u{e4a9_f0$*?$>GEdoCEaOQaoco(`R4s(%b zKitQY6KE7ojopeFnF?@4b&oC1qFZ1lHjEPZu8zW&F^xY+O;;->gYWmC_mV_IY48UI zt1lGrzvx|wqkKAtUA(+(lOfqT}zzL`OPYCas28T>o^ zfSwARQ_eU5QQl;midAxQ=LL}8lRi+godl{p_=eWm64Kc>?z{YB8Bi0|^D!wp(gleu zjx*N(+V(|zLHrFc+j8kY(&D0?95IcGK7f!w0PpVt?EDWL-?*Kmz%2&`z@<63q-;K< zbKe04g*%Wx?jIOi93FhqyHXuUS2qcQa$__)E}(4M?<=1mYW{dLToiwv)43#n0f$V& zL&!G1dfv18?bQIJDo*#ESiZC!yIBFvJ_=7(4jeZGpW<4Mn&|N9C=_P5GEe1N>*l;2 z4l5D&%e0+1Vki43nfA9H!6C*s&&OuBR{Vz;k>8CRQ&zMbIp;76-r|+8_{p*m(_kd} zYQl;-z0Ku|*c}rA#P}QW;^$Tjhib3y$o`~3toegS=*h-pQ(SV6CJH%G0jfE2u48WE zkud?y`j#$S``ok&$GzV!PrQ6&r)>XTnBR<>hI>K-997X1CkwJok%Vx?^Dra0vTsPv z%}yWHK$mXaprv?ildgFP@Hh8^1i?2)1VtM5lnca#T^J`sJuy^5=;2TC-_p(*Y8Z51 z^GLqRp)pm|Szj5)-7zVKWptBGN$N7nSfsOf7}~k%wu5ZbI`{IckNkSr`m!?8*ieJj z)8zhx@-INKYQRdVUVGAEv>9rfa2m2|(%1!Ou_gOL_Re$?HuPkb9Vsx=T6@7E5X+B> zpJ|=FbPeVpHUB3B9k=|&HUXPSCE~^xfU}HuTzVDLH~jd&b1yc))q5v-mlBrNm>0`@ zr}033Z|dApfC+^ZZiyv|-~64%Hi&;u$;I;_?qeJlm2`tTaFB4}C3>9xC0OgR7}OJ> zM^c}phX#F8MWHyzhB4T>7^Qe9+oU3F4^l^(npD;yG}csxzOg$NMUap>j#$=%G|R-{#eba({Z2xc2=x zRB2B(ROV%PcZu+yg0jDJX`vA^E3uS;VLC#_1pFWQZMwC0ov<+h+!s(KOuLhL3pP;>byK7A)wqii9!`DsF7bbAo|Cy z>1cs&J`{S!f_lGeUCfHj8c0`sUeA<1kI?o1Xu85zv=zK6|LUUR=W1EXp~ox6=w zmI|qIV#|_GE(S%qA2`B!g+;}QKnE@fBg6E{Q*a>K3=zW;iq(;m~l=*lk$*^)=>9&GVBY?pq1yiyfJ(xOHHI)ix5kbSTG8 z#Lx+$#)~wHpvHg%e%E^Jmyk3&;WkB0m_I6+wW&x1?YVkVq-`hgERhmKa`p&6Wm0C~ zF{kWD90q-NAhQg*1K)D=@bn8ZyGfzf;e;{DV`L_&$?ZJP$J$?-G>&@&X2#6|W2vTy z^xYkVO?;1Va)8|V{#SD|8!FLYWDU3Lg(RV}h+`0t9uVoFg@C&u2 zlw7lgi3W_XWfVf_w;BmONwKh~8Goo0ZkT;D>D%95A&cL{meav>&5BuILf4(P`gr$X zV%?|oK7;SuV_VYa{sgW3xH+nMX7gW!6wlL;@U!ZE_U+&9E#Xtg+};QP3XE4LLEWh1 z?<^U97*@RhQH~&-Fo?4;kCzD3_@Bf%&<^5Wqw(@gq(G~PamWG#KeIdFB;?aq4F8VB S90Mi?q3zc8RuvX>=Klk?^^WrZ literal 0 HcmV?d00001 diff --git a/scaladoc/resources/dotty_res/styles/scalastyle.css b/scaladoc/resources/dotty_res/styles/scalastyle.css index 69e3814f55eb..4f13b266524f 100644 --- a/scaladoc/resources/dotty_res/styles/scalastyle.css +++ b/scaladoc/resources/dotty_res/styles/scalastyle.css @@ -661,7 +661,34 @@ footer .pull-right { content: url("../images/given.svg") } +#leftColumn .socials { + margin-left: 5%; + margin-right: 5%; +} + +footer .socials { + margin-left: 10px; + margin-right: 10px; + display: flex; + align-items: center; +} + +.social-icon { + padding-right: 5px; + padding-left: 5px; +} +.social-icon img { + height: 20px; + width: 20px; +} + +#generated-by { + position: absolute; + right: 10px; + display: flex; + align-items: center; +} /* Large Screens */ @media(min-width: 1100px) { diff --git a/scaladoc/src/dotty/tools/scaladoc/Scaladoc.scala b/scaladoc/src/dotty/tools/scaladoc/Scaladoc.scala index cec8d648f0db..8f483f777848 100644 --- a/scaladoc/src/dotty/tools/scaladoc/Scaladoc.scala +++ b/scaladoc/src/dotty/tools/scaladoc/Scaladoc.scala @@ -38,6 +38,7 @@ object Scaladoc: sourceLinks: List[String] = Nil, revision: Option[String] = None, externalMappings: List[ExternalDocLink] = Nil, + socialLinks: List[SocialLinks] = Nil, identifiersToSkip: List[String] = Nil, regexesToSkip: List[String] = Nil, rootDocPath: Option[String] = None diff --git a/scaladoc/src/dotty/tools/scaladoc/ScaladocArgs.scala b/scaladoc/src/dotty/tools/scaladoc/ScaladocArgs.scala index ac45d706b805..19128206cd5e 100644 --- a/scaladoc/src/dotty/tools/scaladoc/ScaladocArgs.scala +++ b/scaladoc/src/dotty/tools/scaladoc/ScaladocArgs.scala @@ -36,6 +36,11 @@ class ScaladocArgs extends SettingGroup with CommonScalaSettings: "Mapping between regexes matching classpath entries and external documentation. " + "'regex::[scaladoc|scaladoc|javadoc]::path' syntax is used") + val socialLinks: Setting[List[String]] = + MultiStringSetting("-social-links", "social-links", + "Links to social sites. '[github|twitter|gitter|discord]::link' syntax is used. " + + "'custom::link::white_icon_name::black_icon_name' is also allowed, in this case icons must be present in 'images/'' directory.") + val deprecatedSkipPackages: Setting[List[String]] = MultiStringSetting("-skip-packages", "packages", "Deprecated, please use `-skip-by-id` or `-skip-by-regex`") @@ -49,7 +54,7 @@ class ScaladocArgs extends SettingGroup with CommonScalaSettings: StringSetting("-doc-root-content", "path", "The file from which the root package documentation should be imported.", "") def scaladocSpecificSettings: Set[Setting[_]] = - Set(sourceLinks, syntax, revision, externalDocumentationMappings, skipById, skipByRegex, deprecatedSkipPackages, docRootContent) + Set(sourceLinks, syntax, revision, externalDocumentationMappings, socialLinks, skipById, skipByRegex, deprecatedSkipPackages, docRootContent) object ScaladocArgs: def extract(args: List[String], rootCtx: CompilerContext):(Scaladoc.Args, CompilerContext) = @@ -119,6 +124,14 @@ object ScaladocArgs: ) ) + val socialLinksParsed = + socialLinks.get.flatMap { s => + SocialLinks.parse(s).fold(left => { + report.warning(left) + None + },right => Some(right)) + } + unsupportedSettings.filter(s => s.get != s.default).foreach { s => report.warning(s"Setting ${s.name} is currently not supported.") } @@ -142,6 +155,7 @@ object ScaladocArgs: sourceLinks.get, revision.nonDefault, externalMappings, + socialLinksParsed, skipById.get ++ deprecatedSkipPackages.get, skipByRegex.get, docRootContent.nonDefault diff --git a/scaladoc/src/dotty/tools/scaladoc/SocialLinks.scala b/scaladoc/src/dotty/tools/scaladoc/SocialLinks.scala new file mode 100644 index 000000000000..4b2f43202e25 --- /dev/null +++ b/scaladoc/src/dotty/tools/scaladoc/SocialLinks.scala @@ -0,0 +1,30 @@ +package dotty.tools.scaladoc + +import java.nio.file.Path +import java.nio.file.Paths +import dotty.tools.dotc.core.Contexts.Context + +enum SocialLinks(val url: String, val whiteIconName: String, val blackIconName: String): + case Github(ghUrl: String) extends SocialLinks(ghUrl, "github-icon-white.png", "github-icon-black.png") + case Twitter(tUrl: String) extends SocialLinks(tUrl, "twitter-icon-white.png", "twitter-icon-black.png") + case Gitter(gUrl: String) extends SocialLinks(gUrl, "gitter-icon-white.png", "gitter-icon-black.png") + case Discord(dUrl: String) extends SocialLinks(dUrl, "discord-icon-white.png", "discord-icon-black.png") + case Custom(cUrl: String, cWhiteIconName: String, cBlackIconName: String) extends SocialLinks(cUrl, cWhiteIconName, cBlackIconName) + +object SocialLinks: + def parse(s: String): Either[String, SocialLinks] = + val errorPrefix = s"Social links arg $s is invalid: " + val splitted = s.split("::") + splitted.head match { + case "custom" if splitted.size == 4 => Right(Custom(splitted(1), splitted(2), splitted(3))) + case "custom" => Left(errorPrefix + "For 'custom' arg expected three arguments: url, white icon name and black icon name") + case "github" if splitted.size == 2 => Right(Github(splitted(1))) + case "github" => Left(errorPrefix + "For 'github' arg expected one argument: url") + case "twitter" if splitted.size == 2 => Right(Twitter(splitted(1))) + case "twitter" => Left(errorPrefix + "For 'twitter' arg expected one argument: url") + case "gitter" if splitted.size == 2 => Right(Gitter(splitted(1))) + case "gitter" => Left(errorPrefix + "For 'gitter' arg expected one argument: url") + case "discord" if splitted.size == 2 => Right(Discord(splitted(1))) + case "discord" => Left(errorPrefix + "For 'discord' arg expected one argument: url") + case _ => Left(errorPrefix) + } diff --git a/scaladoc/src/dotty/tools/scaladoc/renderers/HtmlRenderer.scala b/scaladoc/src/dotty/tools/scaladoc/renderers/HtmlRenderer.scala index 307b6d6bb740..9b2c87bc0cb8 100644 --- a/scaladoc/src/dotty/tools/scaladoc/renderers/HtmlRenderer.scala +++ b/scaladoc/src/dotty/tools/scaladoc/renderers/HtmlRenderer.scala @@ -172,6 +172,16 @@ class HtmlRenderer(rootPackage: Member, val members: Map[DRI, Member])(using ctx ) renderNested(navigablePage)._2 + private def hasSocialLinks = !args.socialLinks.isEmpty + + private def socialLinks(whiteIcon: Boolean = true) = + val icon = (link: SocialLinks) => if whiteIcon then link.whiteIconName else link.blackIconName + args.socialLinks.map { link => + a(href := link.url)( + span(cls := s"social-icon", Attr("data-icon-path") := icon(link)) + ) + } + private def mkFrame(link: Link, parents: Vector[Link], content: => AppliedTag): AppliedTag = val projectLogo = args.projectLogo.map { path => @@ -195,6 +205,9 @@ class HtmlRenderer(rootPackage: Member, val members: Map[DRI, Member])(using ctx ), span( args.projectVersion.map(v => div(cls:="projectVersion")(v)).toList + ), + div(cls := "socials")( + socialLinks() ) ), div(id := "paneSearch"), @@ -220,14 +233,20 @@ class HtmlRenderer(rootPackage: Member, val members: Map[DRI, Member])(using ctx raw(" Back to top") ) ), - raw("Generated by "), - a(href := "https://github.com/lampepfl/dotty/tree/master/scaladoc")( - img( - src := resolveRoot(link.dri, "images/scaladoc_logo.svg"), - alt := "scaladoc", - cls := "scaladoc_logo" + div(cls := "socials")( + if hasSocialLinks then Seq(raw("Social links ")) else Nil, + socialLinks(whiteIcon = false) + ), + div(id := "generated-by")( + raw("Generated by "), + a(href := "https://github.com/lampepfl/dotty/tree/master/scaladoc")( + img( + src := resolveRoot(link.dri, "images/scaladoc_logo.svg"), + alt := "scaladoc", + cls := "scaladoc_logo" + ) ) - ) ) ) ) + ) diff --git a/scaladoc/src/dotty/tools/scaladoc/renderers/Resources.scala b/scaladoc/src/dotty/tools/scaladoc/renderers/Resources.scala index fc7e86102865..06c8108d6875 100644 --- a/scaladoc/src/dotty/tools/scaladoc/renderers/Resources.scala +++ b/scaladoc/src/dotty/tools/scaladoc/renderers/Resources.scala @@ -138,6 +138,14 @@ trait Resources(using ctx: DocContext) extends Locations, Writer: dottyRes("images/enum.svg"), dottyRes("images/enum_comp.svg"), dottyRes("images/given.svg"), + dottyRes("images/github-icon-black.png"), + dottyRes("images/github-icon-white.png"), + dottyRes("images/discord-icon-black.png"), + dottyRes("images/discord-icon-white.png"), + dottyRes("images/twitter-icon-black.png"), + dottyRes("images/twitter-icon-white.png"), + dottyRes("images/gitter-icon-black.png"), + dottyRes("images/gitter-icon-white.png"), searchData(pages) )