From a8ebc7d86dffd0519a91c9ce6601bef6ef8a1bc9 Mon Sep 17 00:00:00 2001 From: jc Date: Sun, 1 May 2016 15:58:00 +0200 Subject: [PATCH 1/3] libconfig --- .../addons/addon-depends/libconfig/package.mk | 38 +++++++++++++++++++ .../patches/libconfig-0001_fix-include.patch | 12 ++++++ 2 files changed, 50 insertions(+) create mode 100644 packages/addons/addon-depends/libconfig/package.mk create mode 100644 packages/addons/addon-depends/libconfig/patches/libconfig-0001_fix-include.patch diff --git a/packages/addons/addon-depends/libconfig/package.mk b/packages/addons/addon-depends/libconfig/package.mk new file mode 100644 index 0000000000..0f2db98b35 --- /dev/null +++ b/packages/addons/addon-depends/libconfig/package.mk @@ -0,0 +1,38 @@ +################################################################################# +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="libconfig" +PKG_VERSION="1.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://hyperrealm.com/libconfig/libconfig.html" +PKG_URL="https://github.com/hyperrealm/libconfig/archive/v$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="lib" +PKG_SHORTDESC="C/C++ Configuration File Library" +PKG_LONGDESC="C/C++ Configuration File Library" + +PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" + +PKG_CONFIGURE_OPTS_TARGET="--enable-static \ + --disable-shared \ + --disable-examples \ + --with-sysroot=$SYSROOT_PREFIX" diff --git a/packages/addons/addon-depends/libconfig/patches/libconfig-0001_fix-include.patch b/packages/addons/addon-depends/libconfig/patches/libconfig-0001_fix-include.patch new file mode 100644 index 0000000000..79b0a2e00f --- /dev/null +++ b/packages/addons/addon-depends/libconfig/patches/libconfig-0001_fix-include.patch @@ -0,0 +1,12 @@ +diff -Naur a/tests/Makefile.am b/tests/Makefile.am +--- a/tests/Makefile.am 2014-03-04 03:04:17.000000000 +0100 ++++ b/tests/Makefile.am 2016-01-22 21:22:38.742833399 +0100 +@@ -3,7 +3,7 @@ + + libconfig_tests_SOURCES = tests.c + +-libconfig_tests_CPPFLAGS = -I$(top_srcdir)/tinytest -I../lib ++libconfig_tests_CPPFLAGS = -I$(top_srcdir)/tinytest -I$(top_srcdir)/lib + + libconfig_tests_LDADD = -L$(top_builddir)/tinytest -ltinytest \ + -L$(top_builddir)/lib/.libs -lconfig From a48b1eabccb4ce2dabb88628c0d8110cf0bfae24 Mon Sep 17 00:00:00 2001 From: jc Date: Sun, 1 May 2016 16:00:23 +0200 Subject: [PATCH 2/3] libvncserver --- .../addon-depends/libvncserver/package.mk | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 packages/addons/addon-depends/libvncserver/package.mk diff --git a/packages/addons/addon-depends/libvncserver/package.mk b/packages/addons/addon-depends/libvncserver/package.mk new file mode 100644 index 0000000000..fb858e52fd --- /dev/null +++ b/packages/addons/addon-depends/libvncserver/package.mk @@ -0,0 +1,47 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="libvncserver" +PKG_VERSION="0.9.10" +PKG_REV="0" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="https://libvnc.github.io/" +PKG_URL="https://github.com/LibVNC/libvncserver/archive/LibVNCServer-$PKG_VERSION.tar.gz" +PKG_SOURCE_DIR="libvncserver-LibVNCServer-$PKG_VERSION" +PKG_DEPENDS_TARGET="toolchain libjpeg-turbo libpng" +PKG_SECTION="libs" +PKG_PRIORITY="optional" +PKG_SHORTDESC="LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program." +PKG_LONGDESC="LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program." + +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" + +PKG_MAINTAINER="Lukas Rusak (lrusak at irc.freenode.net)" + +PKG_CONFIGURE_OPTS_TARGET="--disable-shared \ + --enable-static \ + --with-sysroot=$SYSROOT_PREFIX \ + --with-jpeg \ + --with-png \ + --without-sdl \ + --without-gcrypt \ + --without-client-gcrypt \ + --without-gnutls" From 7b2c8e72ed8652f55385de5c2b68efff0f389491 Mon Sep 17 00:00:00 2001 From: jc Date: Sun, 1 May 2016 16:03:19 +0200 Subject: [PATCH 3/3] dispmanx_vnc --- .../addons/service/dispmanx_vnc/changelog.txt | 2 + .../addons/service/dispmanx_vnc/icon/icon.png | Bin 0 -> 34389 bytes .../addons/service/dispmanx_vnc/package.mk | 57 ++++++++++++++++++ .../dispmanx_vnc-0001_fix-cross-compile.patch | 20 ++++++ .../source/bin/dispmanx_vncserver-service | 27 +++++++++ .../source/config/dispmanx_vncserver.conf | 9 +++ .../service/dispmanx_vnc/source/default.py | 17 ++++++ .../service.system.dispmanx_vnc.service | 13 ++++ 8 files changed, 145 insertions(+) create mode 100644 packages/addons/service/dispmanx_vnc/changelog.txt create mode 100644 packages/addons/service/dispmanx_vnc/icon/icon.png create mode 100644 packages/addons/service/dispmanx_vnc/package.mk create mode 100644 packages/addons/service/dispmanx_vnc/patches/dispmanx_vnc-0001_fix-cross-compile.patch create mode 100755 packages/addons/service/dispmanx_vnc/source/bin/dispmanx_vncserver-service create mode 100644 packages/addons/service/dispmanx_vnc/source/config/dispmanx_vncserver.conf create mode 100644 packages/addons/service/dispmanx_vnc/source/default.py create mode 100644 packages/addons/service/dispmanx_vnc/source/system.d/service.system.dispmanx_vnc.service diff --git a/packages/addons/service/dispmanx_vnc/changelog.txt b/packages/addons/service/dispmanx_vnc/changelog.txt new file mode 100644 index 0000000000..9455e1f3c8 --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/changelog.txt @@ -0,0 +1,2 @@ +8.0.100 +- Initial addon diff --git a/packages/addons/service/dispmanx_vnc/icon/icon.png b/packages/addons/service/dispmanx_vnc/icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1d64bb47836304b72e6cdd953fcd8f5afebac128 GIT binary patch literal 34389 zcma%CWmg?dvz>#xyNBQecZc9^2@%{065Qn++#%S5ySux)ySux)!{z-4cdcG)raw(j zRdsdkUAu!-l%!FSh>!pPK$Vq|Py+za$14axfcto8*%g=oKmduXgxEKir4w!V6r9~h zFQ@YRZ09pN>2uQDP&y|Z#yc`~&Rz0p>=-jQwqUm4)=xgDI5-$N2nbW|=Qh&qYv*_G z!s}-%qhn(yV{4~eEAi`9?gAX^9vlMa*LU~!6bkxC)ARq4pbB}j`qL|*O6vm%>IrRq zIB*bF|3eFf|JQWJ2$W&H-X^|V>f5q3#Hgg>N#v%a|FonU(Q@Z5Z2fOOkyOBm#Ogp6 zRy>>x@S7Z5$rdVSyE;PW*$$*v2#<3bvPf;2yP(dfD9xlbk_^WJ{0;{<>W7ZaT@}p_ z9{uPQYN^bTLU*}h&Y=(R3L0 z9YC+37?u`4fA2i!`%8rdnCNG^Ej)YI^-N(=&~HL8i){Iehfy$%VUP+9VFjDICc`?D zh zV`!-xW|Kq_u{gZ^4rRrMAEv7tbljrT;^VVP6$l@~?uT4mHSwapLapOb6d>$oI6?tk zFVh_BDS3gS^EzPiFBkg`OEOKAcR%gn0eqWYK$QRY0ZE7+NczU7YXf8VZQ? zx9j)^EttmC{jed*Mjg#m0`Ny5>x3iUiD`R9;*BuqQ zfS1cL?Pf3XqDTM#{mh^1atYMgw;)wROuj!1DSx!T@|Cjs7pkiC)+y4xn<>#jHZVcn z@BRi#pP&JKFT9HqNmPd0l*3gF$7jzYp%2R~1m}r8zTBHb!-S!Q;b1IiEjRkX0B-kZ zq@S#ZF)T5azj0<+w_!(Zv!M5Kez=cDayNZc`p})jduS+$WK7Vzv)Spi=zEn)0kA>e zpzdxJQ>_gzA#&yChW-)XW#1|-h~;!2XtiLuiZI^NfsW6$eBe@$XhOOgII)HDglzj{ zl9(;hlRTo~VJS^mLErpphuh#M92esuD{sFH7eKh4o^FR0+qsiQA&W?W zZzo0D|L~w21HIIs{5bu)=syXO4pxvi(JuT99^ge~-Co@+vi-oe?!`Xx@(~4uaq-zZ z>0lLC7_li|D1eKBx{M9DIhzgbd;aT6y|lQ#SoYZ<&EqIb^*K9LsfV95XlGc}llYcr zX7f>g`J{F9`fTxll~1_f)nUJYzkFY0o2}3FaD11QFMi%Bu+_q$>lrz}_ZHAtzRh+A zTc@N>+x!LJkLWkp1ira<3r()~XAQ~44i#5qVf9||>uN+?=kC%KAp9{P(~|V3d+cUW zO>`AZ=vEqFG@L(M6%&B5fCkD3mRswbB0{82l+)YHNW6^RVrA-wyW@jV&{GkwpHD0< z0rC6#?ww5kaXyl^WzW7lk#v29 zb|<~l%N(C5p)N7cq`P+#D^a0V#?zfPgaWitJ4j$|Moei=Tl$?~W`3854g7#+8`BgK zZfUzm2fWXGiTy}u)?wS?HIjl8oiaqAYtiF}Uv(&wI=y`;Nf^H1S#|m^sXShdtMFg% z>Y**t0~0(8*E0x!+wIY<^g_vL7 zF*b9Y&3l#0^t7+NZ$h0U?2h+mtLbp|q7wkch;ni|Tu7AS4;^@NPrl&1#RdU)}~9M9L8#>Z_BBR38(l_#cWTrFVYyx#SHtUwvqc+x{FKm;n% z*F{cGi1{pQ1a_P;vB<+_3S=aBNou*FYfd{0?scAjv61U_8QoF0v^VnJ+9OhIhHw9p z{W*MG17bGWF!3t6YZbw$hLdF^_dOKcDb=d+zFl{P=8Zc0P#Enq z_EP+d@HyP`a!BDx%5r+}w(*)vTYl{+XR{abtq2C)Q?t`OZ`<|M_~^+K&+d+)wb#Y3 zW;tY+C)!RDyJVn4z{wd6=_7Tycac6J%U}w*eZF%SL4NW{Cc4y@!BeE*2M`t}ftpj3 zk#ny9Hidp-uvTl9?rn4a<%vm2dk@>^S;5j=eg%nU9CP^ideNFf*1J(4H{w4Z$rMO^ zZG59Azfd5Y46;a6e0!N+&oVe?Zf+jO0TT3`_cwqHQ|0Ag5jJ!W?5NMos80sTl$SJp zk`febQ-2=X^hG-~SMP-4+aF=3q(-_RPkafo2T3W*_%1c)q-4R?EoVokZT5F<<82+= zd~?=szO{dLDjM#e(3e`~v<7;kx(r~%caJp+zlbIG7!UkDS*z~&ax`x#$cRCv*3}*!goNc$}S}Sq_R_zeAr2x1Mt{)-_ zdd6@M0`+_daMmUSU}z4GjuUtLKj#Km|=U~ct!r23I(tV>E!{?7~>{*~vmmgaHV=7o5KWcFrJ3UY0s$EMU$Z7w}SlaKh zo+$RPn0Spq^F8CCQ6$@AnWni}q{?)hOjA~@6970||65q(+54{W4`N#hvncKNb z#ZPx%?Lf4nhr3=6?lXc5$Zyp3=V<51%Y^~wwEfTY<)f$8QR2Y#<2vr{uz4%^n~^?t z9iBnW=F8OXCuG+JUA=YspLI9tu_IpHXJ_R|z>2A9za9X&eN$dsjo9Lgs}=f8wGX<;;-6*mZz0;%9_oUG3k|=W*ZgjSJAYrbxs;KQPY31d8gPID)^7 zpR&eRDRgt)%0KXxKMFZ4JgvESturFPK$R6)*YE8aI;V{mKme(?ZS;j(=!s4Y777d- z(`R5J8@~D-O5>XKjQpKr8MjMUo)YNcPesC5iSw(427!wTv^hk<4y;8D_ar5?7=iPI zC0rQU*OPL{RZt@NgAXSAv*#90@1>lq+bO=y_ilC>67P7ibu_+ z=WD6nPF1iUMUBJ${)bWR7U+6(au&gkVnhV2rMyy%tXG!T1`3RMe)S>dZY|wE*e%wd z1tNKTlhd<*8`rn5#t*jAZVm6WVQIX#YFB4)-y#vY(t;lG$R6L|X7_Cg>!LK$hU>H? zf0k51wb#^^PkaMGAda9qAVWHm%yZ-H1^ZuCc?%jF&x*NowEh$(IE)S!4h^1SCVuo;{R#p0u~mx2pQ|&NIhX6>vTs6R-mA6 z!z*^%cB5buAQB&BCBkz3(>JdE@MuW*cECi zPzh?B@n|MvDGVj}O31vD6*du8di&=$jj{C{`hO;Z>I4vGyHF2w#~`kov_WE;FH z8&C)uL`6AsMx{Ck3cEAIruvMKz-}P=$Krx9ApurH!SV|R``>y4yZl@@qlDs3_hKt2 z(Jo7`@8AQ8c2)JIc-^2I&JHcw~xr9oz(h0YrNBdeeQ`0$OR zi1o6V#G4Untbv{NH;YgIR)hex>-c9N3((Nc)2=h^ zu6Gri;xpd;Y4_yO z;jRqOxjn8sfr}EKy8w*5CK_Q;L?|c^YB%81*K?BVX_1cCz1CITPvPI)%D;pDMP^Uh zw75?FyU!P;0MaWrIYM+X00HD5dSY{pko%@XpyPrS@X!uk5{-t4Rv*aZm@!Rr;;vUm zes`@(EFHhBDQkxC#Uw{sm5b8-Q=fK7&TC`*A>u)E%KBI$2|M!D&yx5qDqKZx@yGwb zCU*ADfJ{wLuo`58^ZV*+;nSWlkX>Yb293~W4f$?fak*kr)M_g&&;~jsf$>FGPD6BI zAw~n5oY9j3{UThplLdBuA}fRJ?-4%VPa&jw7x5j2afAou%gVP8dx^eJp5Y_qKlV}a zq-NLOA|?;IWAdTbx-%3Zug~2dw&;`e*hrF;&MXDQvVLoJ4yE0H?_@eg^B4hQWc<(E zbve4-wZIg5DeAZDG!%LUWC!<~Y>&IUMRiB53fG{(f(Ke&ZugcnCKZsN`gC901B zRJ3;j6erLK>KGE&8Hx%hOTCir)D(^Dqn<$LjPSzyn!5nXa%-EfYAuhYbAqpT-vh1R zC9;netDi801_0I(phXkRB}Ui|2=IO949EyhZ4FgbDd;T|f0>z?L3Q7oka@g5j?$^* zQWq9vsU@@#^dr+>4qG^YSAdI_)z$x*B2QL<^(Y!6e@>H?JrfRCT6bgj@r~;qZ<6ZJ zGS~EH867Clwn^CzxeT=}t0~dA&)ozvH0vwSDHLv%MzgagnAnu!gkxSDS*GYz+|N7Y z)7j2Dj15JOT`khykaKr=X~L9&3+YmWEZaOP8})w~o&Y?W9~{sG3k$4^-ds#N(Gupd zK2kryH_`NDONO~qyIt>)xpRAFoQE3`KJ)O2zN5Oo$6Q9@;XT$~|MG~VNmBalLGoW3 zS_^oaF8T>wFTx@CLZAvJJbT=>&B=c*$Deb8VM(`k1U66c+_OzE| zb||0?fVS;B%tEY*46Ri-t28|(?!V>weDnD9^cuDZKDh+{BzTt*!(`B!WAdtPbXE-e zu{--jRq&YT%>h~kF36kfi@br2HdcTW<}xrx@$ef9h0nPDFM5(*$)FOtALT(Ia=eU; zGp44w@@vC0QN~eG1rEHbn3rhd;tlvul0MPcE%;(~H@0^gpGM6hvioD#sylYFo20# ziv<`nBb?0N9)rHr>7-W}|D}k84!n3s;NT7w1H1d}hO^bOa!;*Sq4NaB0hB zCmSl7EWeFUdMY%^H6nvQe)N3X(isdc(wAkW&|_W<2WvjVaAxhNsl9tZF332@4hK#M z$SwHhe41E6Xk;j;fCDNNfc25>?50ju2_A9!oqtdxDI0%!?(q7SHY73jCN!{8-9NgJ zOI=W6aCLPw7Rx2vSm9#^g@lony@_FCHd#jc+vzZ*;EoicVfAl`3Hs7%DNCXzh?0-g z_!Ft-EeJ6T>jn=)COD+(+jVJ(lX*6#$`&~@orD*}Quv9H?s2)N?;ELw2IWPtB0z@# z1)y=G0Dg*)C9KkJ1gGb?d%8-NZAq(0?7a0#mrqwt=MsmN*#pCZ!O>k%4MW4by@3LOrHwg+EYT_U^ zySu@$heSbvb=+?2FIS~MSIA&ZosMIWC$=|qz2jCM1dog}$ei;%Mp%&pC&>Wn2OC2! z8ZJ}4Y3P5ME%`l?c|`j0P<^4%gOK@T$vdkXUNtRV(>+*cAD^-#E;g*8hS_YcndK=W z9a1o7rJC|DXsW<0cEYFtrPZn9d0tU8L)$V;88breta1Vval5yGZ{mVKe=WQsA7c4d z=>?uqpl0jMb`A4>)F;z;nPCQCHlaUq7d8cd<<`!i90q+P^8O~TJCXE!d3ThfZk7s_ zr=*y-AX}W{=TVDn&;rqVFhZs0wt&Oer-8`>PD>cA(%;C=HKLhjaFUK20vSE08^IVZ zQQ`kG@9OJAbWn+6p8{b31}j#P{YgsxAy)Wn`xrcKbKqc#+7ikyA!}!hcE}eeHQx8- z^;yN^0Eqaz7G!_bD9H0;=4oj+oQK;^LMqtgpC8^T$As$yM$bn`CH#JVEc}SP_i$vJNT?rbt zUJiWe<6S|HLL%s?w+xRBBRk;OmE)ai&ZMJ<&COzqooA2!7Zsb)az4l1&SOvX0trz< zx+ce(ZT|u}FilC{x4_5Wb}wYLhR#c$-YS_$1_FuD0I9{)9ZAL54E+GYkMh_imLxC1mr=U5=31LXDw}-!~x9WSt9ac$l z#lr2C)D@8>|H2l-#t%1Hx=dmCB0+Ua9%RIZSw*N;(%G6lv`*VApxl7~#p=bvGIvHk zz#^I%UM6(I=YS2cs-JG!!&UE!d5?Di6F0#{UUt9ehtST%$Np1XXnjzRO%(`4Qts2v zj%f=2!`$cTpWuNrThf>Sryj*_!)n0pMk&A`WlRqD+`_|?EDr!dDkz3KPYYD09Z zH%nqv!KIMk&Wq3X&#ymFfB%6yYbE9Za`FQ~9q1o~Kzuyq)rOZ*sZQ{SB5{=S7B2%5 zGLf74oP9))sHHhaEFLb`k!!RW5ml{4q!SbrDKlvx639mosGnJ&2Tcqj2c*$Up{Jqj|HGIJ4!G-`hik_KT{!+u|0rcZDcPy4_ zs@U)krv@C`&8AcNKYt3v;o_0gnVg&ql9iMC8j5GOSjV)4eC=Sl3@3YeX}0I&yR5P@OkD&cEw=UsXpfY)WnN@6eD+=ZUzL z&aG28nnVy&`a}`e@4M4Tr5`%sLw|)-NC=Gu;vpsg7pS}k8;d;Y7fcF97K&2LY_#dCIDw;`$>f><1}R{v*#*`3PwWvWp5y>PKWolWbo^%l;~$2;rzTDicex~_@aZj!43NZswW~9D!j-P@kPo zzs_A6@_L-`Mv(LQbe$mIZXe`Sv&wNoC8{&JuJJ20k&M+a4e^e#ps8V`8zC_S!1$D}M^rQT$%(9{6!8%Z2Fer4@ASYVsH?r~Degc5hcZ zF=hFl@C_cVinnr>!*8-blH`*@dO(_xTZZ-hU%IGkYkZoO7FQ0Zzv~gu@Ms$+i`8@t z%uOY$dAnf$?JdMugtJ{cH0EQi|K zD)l{$FH}5Z@96w{yd@1C%|bMZUYB|579K}x;WZ-wh=L3X&d!&8OC*tP%)5Wk@j2Hm z^_73l3Ry3cR#r%01sO_*OU#$8vKBbA^aQ_py)3YeygwLz(QPAfmz+xHwat?2YCih; zq$Z!?G@&pOQI_S3Ld=aazitB!hfeloU3z=w(SD)Ho)(Q%&@UGXrr0z$~nUqob8=aHXPkyAq4o~%%SyP(liMx97n}=#*)mhigcKrhFQN6{& zJ`~{3AF&63nG8_TZ{4CiNxr42`j1JhP;kXEC$j*pOUJ{-pa<_<*oc6v>0LOCSQw?W zx6V2(x}+`@-~G84U#BC5&)#O|Kouv*P1$``eh8i;@b_4<0zNir_?*>}-b;h6%SrNj z4+I2_BN`hb=P4`zPg~8-<~*p@^17$V+h`g;rJz6>^il3UxywK(F|_#cJkMN#MO(!G z^t;P~5#^A1>59M^M&xS5$^+wWnX18j`oyGm0c3DSzFEu%H18R*=*W5hdoiBqmp6^2>hdkI5@D$JuX0RFZ&|J z)2 zOZU7ZoGa7uhc@WKF*5xjKqD@wYl2IIP8w0hv*zQs=Bav6c!~bs)Hit+W&cd?u3S?u?R zB7mXaC2bgS=q5BgC0kjON1PgX_&+9>=hOPjNon%UiA-@F{pLK;8_cknXl@6J}dQ>sl>b?~0p&5~f*NcpqQKX#zg0YWTwKAh!2 zCarUqa#qOevy2@nLW5q{3yq2QFR2ZrW#B@jc^VBGq8)-cdCu>IBdPnPd+d=s^Q7x> zgQ@^^Ikw2lyjX*P*MWe!{Yp-uq zEpaAX1~~t}m``~fR!~s)K~fWK+5)_U<~Lf5Vy8Ec*9+BP5j+;nh;e+DuCY?hDB3-r z^#e)8vdPV}ZxT!y`>FR7Rhn=iR(>dt$BxQMH#Nk_8yofyuhUfw|I}L=0KK2n0I&p+ zwSy0Fw(QLVzoJtAN<2$?QNbi{8jz{HRG+MsRt{_TKssx^#dEM+C!?oS00r5>=;_d*#l$T(Rj!ZFqlsp3GM!k8{YGhfDBJU=poApU`g+w5OT# zc;ky8;}7y+!)IXh(flf~;jz$N;ize};>v<0Nn9W!b5o33bH)31gS8qG{F*jD{qdK@ofLE)&XHkmCr&y+=rvgkr_I#1uF zy^Uc|%Fshj%!>hYf{#M&qO^WZ&HP=p?rP6hSDKqYw?e#~e8rqG_pdQ&E-Nh+jls%7 zrOQr~G^@s%Itcu4BJw@RnD^D=2h{?GAZG>)0T_&hRcUcseXuOs*gu3ui z|C|!UYlo1m3x+l2u~PB87C#J*2nm<$AN$jAQdHPrFoc^R=!Bx?4;l%2ycKXdQHc-^ zxF?uK|NbR?%0JCDZjaHP^5LR-FO^nRoc@02PJLT%PtVqtEyNG=acf^?G%(RWTPj>F zsUwzNeL_xwvY2zJ#D2fRY?1xT!;X3`W(tN%2_15#6HU*U#OO1+#56sJDPAv9_S4u8~j-NkKrK5PDjd`V43MYp$A+?qiA zA;I`|KAOxU9g4>^GC&-Q9zwd=^sAy7Rppx?A+^;&5m$lyg zZl~x_=u>QVGMvnkOc1apyE|KmAOQua_|)2A)Wx}TJ|a1^9sS0sa<9w~ja?!4To}Lk znci-Z2Cs(<^uP=tLje)oBmk!{HibqR=UW#aN$NW$8p|&~cA8tiiOC+yq`#hShE)rX z>NLuI2~nRXzwi~x^>Vdwh=BXYQeAd;5+wS1ZcoptTnTZSMYEO&`C~ipr!#d{LO-wWqi1GwFw_z@eUvlW zWvyheOus+L*5q=^frY9cHt~k<4EkObvf!xPfr<|p--*S-s*~e!8DYg+X#*OwTnu7& zZ4jrFBspty3fou4$xFBEjcZUid96V^#T-TBq)`sryI8KbPLF=6d9=vBQ}>x3lq%$R zyD_^R+ai^7D|%iztFVYo8i`v1DSF#?`8~rT%$4g#&KCbL><&QXwciW-qaQ_@^@rV{ z2SM;|!7zc}kwHyO?aThJ!$~DH621`S_%EGZ{>YVgp>YhqG1#pj6ckCS@@$Ax`8vLB zhW+&FN*stJYt2dM`qN(~BC|Iqj#vS|w1Xa52ByBmUHQuQ>_$3a+Y#+5;t-p76(5<| zzn)JF?oLlNe-2_MwW(VVQZ=8P6}!lU9T3Xf-}u)&j+saV+-jsEc;?>f%@@_!CgXnS z1VJ-_WD zQBl)st_iep{QgI~zg}TQESw^M9@@*v%OLtYhl>-@`#M_HXKt0lX0$sp>+#>_5Q~a_ z2LZf~{mmlCpUadP4`|rWlmY>k1B)dEK)>)KfxGaNO5sapG@fb}S>5ppVSE@Nqnhrw zH$?1-GRI>ElPb!-R^^bQ_q}B6Eq{C+6+~gKsF%Smx{=2Atq?|>>-*z*<;A&MS$}{3 zg(k;hC~swvSDgPTOQIqn5H8y-36Fh&_0HUQouU_P?;uediJCmvbkBfsJf;t*nq8ep zEB>EE&rrWD)KRKbgw(QpKP3x|5);Ins`Y-|Ikfzfo-x_Q1D6vQWL~Gjoly6q*A6>5 zZL=!o9*_f*!D3;mSCb8AB)b>N=9vI&VGNaH~sB~ z)>s)n_9dY40>yI9_V)XaLZlY`tg~v2{x2yext^?(bhRb%Ue!` zmk0l$lCiP=Xc8AgKR8onr`iAyhSBkt$q11TZQHZ<{}fgkaN?8*J3D*&+jmw!=|n3I zutAwjnkpKcyXkt6!l4pNTb3A7X) z*A`3g@*adlIizVxNg+z9{FRs`MX&qLD}NbZXu zb(f>oUf89(ZA-aZ(O9{tU!D!(624g*oDRj&F(R!@F=DVeHkO-dU_u2Ue$WxNBfLE( zHxf}$Sx2ue9?%v4U3iOjasx1iP$U9)M8E+K3_!*653U1QHtOB(M`=eJ`kLh0WOrJe z)7O}*r7CTAEpA7Kv$j{KFfw73!L*-Eq?$>ZKii(0P197J!1}0jum@>T-nwsF_zen{ z#!GJ+YSFRuYObg8x?A$DlZy$7iT>01%JhTdc3N`E@&7$+(W~j>d{XPnffFtF&{W?4 zH22718@L}C9$eWX^#oKYrFP|~d-&)I-Qp;jQ|Mh2@xeWw z{28s~nAAo}N@yPiuJOw*3s@D4kHA1!h}84_9{e6S%-pQ7I3QIxZa<-}OyB;K%*$j-;{WWyU{i0n z_JD^Nj2F7lNWOxdH?ovryg_mU(&uQl^lf!mi^RK!vLQIEoW#RBm#upyF4MSM+0 zjES}dUVo2p)b%vB zW=`Xy3O4C2=(umY7usD%;5P4kw$%=lNMv!^Kq%Lgk5-))7m6k#N3XK@-Wox~^$2g}CLJmO6J zqr03d(=MJ0if7g?8v9N(WIzL57$T*QB)6~mw^8yBOwIf#Czccp0cplu_lh@CG7(|F z0p)Z#_|-zo^LADa8Sy^^IDCoYC!@oCm*dmKpY*>~LB$NdGcdgIQJ>cks+D>Tr)9=y#R6m#rDk4b|%j`aZ*9L31>Hlc;rC&q!*W=4lp*WDj~ zW-C9RH5~sP!KiI-FYvD9azT(ak}B#JdD%q&4yVo9qtN!@Fj@v#sq|*$sSzY8oCJlM zzpMPyDW3d@)6>)6kt$5E{3y%QQN-Q>i`TpIav&A*3ZIhA~k9+i}DI_x99 zd?kMYR{d4=Z9*6_urOTSTkmIt7e`jAAD3%zZ{I&W$N0DDkY+ciSavJg1dAkYeRHr-H7+u`1h5MVvejmC)L-~N zA%3FJta;SyUq+tPLEbt-?hJ9hxEbZPKo=oMMLw-k}H##b0{q@Xw$W(ux-euKszR-uBUrb!Gxc+Z1dDA7g6{B$CLQAHk5XwCt8MqihoCJrqw`VK9yF!7!d53cY8N4#s z8xOqzVDxsdLPFvSMpI(Z4PifpFV4Nmauta$`euR(5Djx$-e&hf^bJdtZ}+G~?Z$$gh` zpT>1lxA%EJZ&XPjX;AoS0^dqW3WESYUs^k6Z6#3K8GN0*uJ>@UnU`iax~+Wb9WMOS zPeLGtzSB`sAuSW^lluWyq$v!Ywm8NGvui-jpN4f`kA6J#vUsU7ia?@%;#b~phzZ_r z$-5|zM03zaJZrZGF;cKSWzsUHiyC=AC7}`oImIiA{b|vRDV~D~`_uV%$>Hv62Oqw* z85VFMDg!{+-Ue1INxY67jY@w9BRO3mirJxqd(J$cw&t48x}c$e)1?}2Ca+Jk5<@Ce zt)J0noXNmiuE(bz1@Q@b$jnQg%)1h)fE)F5h08wq`vd&j+e!8JZB=zb3iJgQ@FTK9 z;}#Nb9_RE|B#Bd#O0;IQO1(h&V5_AXSxMNVuh1%JY>n{_Ym>^8W!eJid!J2rh;(ov z8@B}x`o!C4#M~qw5c-=ZjCdyK8<#OA1}}rX%UNzbE$uNovows1htZLJzTZPE;hh@X0QMw=?QR<&d>drQk+|Z{R1` zgiYzg@z+D#_qY4@@)R$HVJ@sl0mq}*=(-Wy4N8)i=C(OJy_FO`l#^G}FXy>EIbc6F zFLRKS2guUp>$HFFxT9EN{`kh@yiRusk4}G7t9x9d5!DlD;dl7X_6)~k@;o6XF(U;l z!6~h7#8u9>*yJy=S){I)K!^7IJQA>wE%G$-hXf~CL_MLsg`!;pt8nN)9Cz1>g2no= z2JCtrXQtl>Nr73i0hbA8&?<`N&nqYea zZuIvwKIHbprhh{o9oGrDyb+iyg;hlLx~O825Wf8^k+13f5O-ZxX=|9f0iuKC?suGM zEh5B;#q9-uXSIo=*{~($B8WKf>crHlik@pu{=mOaA)8F`Pweh_ zW>tug+8i3zzff|~#bToE_w!^x!fHH)`TLu*3FY782pi-!9bRlQgfVKVjq|Ysc<;Qx=093OS#mHWPpL*jFT%r41aM zu=Yqwnt4^QSCqvg-Alu8@P93Y#i$7z>3jphKr=VpIEqGho5QDL58>f3O6OBO%W;q+fVO=c>7`JA`* z_g8BYjMHul{V0rr+s?CLzTEu$;;(dd@7#IU?2-w4qt)*Zfu+0S3FZo{jhB7I7B|Za zLIDcN)a{>_!&_Argc+rBRY9goyf| zIsL6Yh5nF#D5aPI0D>BH#wfYH2Gx5?ecUKHLm)Y^Qv{~KO=cijpYe7dWv_~gI)07) zzEbX871EdzsUYL=!H8kdc*4O~c*0?W!YK<0CU5yb!tdsIP^DUpYHSEXuUw}y#O7Oq z|5l~j!@m)vaF?TVtwECf1XfUP& z$Jhsu+S0dVk8%yFEI!sh>_gGf#SDn`spZh98I{n0)f<88bEDvVFpGvu@hexH%vV|Z z!Um%*mwO~mY?^{Ip-#D5y}Q}9MB{!zue!IY>BD-{a-D}oWpKzL&-w}O(6+#|$-C&S zZs_9heI$5a;Neo)D=XSCfm;Ed^4_>0a<}jOqZ6~r_D0c_<(La9z}Xy-i7W0fp>u=J z$MZ2vhhgVB*UYf}mE1{1zX#1KUsc8lytbK+rS}Vh?DIZbzg)>n4BuAptJ>dOt{PKc z-e!L7ZZ%AUOu_UiO8l`4LBjkilD_H!$`JoxRkHv+myXwhyZ)dh@Pn^&+>&k@xepb2 zWcRsR)QeVnn$T17u|dD1;>o{Z3<^?+(}{Im&)carxcK+q!)~zPe~kMr*JA>5O%^>* zF8o<^iuBrp2q@K)(jA_JXBL*jLH8$%>fYGXv9~=IIpmN@^gApRPU|O}vxaT7T($~v zRnLD#2RPG5hHTwyZr6&IuSbltIFj$2uDQ_7T3%eBR%HmGFB2@xQbckFC&*nGQvMGc z21qeu1qimtfq{Q)e2ctSXJ2sl%MIR^WT-wl)wN1ceaJqXruMA=RszP_W`Kl8+39^l zK|#K9Y896?|KI`Zw^3ThYa^&}M*|*?*Lns4#WvGFtoDRIvq-2>Ivq59fbU*n?#@{% ztoLORT!5N@{#-unPJ>{>Wg4l7lftgZ1da+9wpZUa7sqL$37S~0Fekudl^_h_htqZ6 zHU2gv$b~I$NX8gk{=T+5xH(~M@7tkLlg5ge93qD)V}xVff&f5h!2=vAMK zw_a+gih8=4TXEL05Cx4_TsY+w3wZ{WvlQj`$zz-noQQ)CCQYZ2%>jr14yoaV9#-z+ zWJtg{P19z!w%m`FqUG(llTPn<_3fnut1=2o1`@uvpc9RgNP>WDbiY=(#i#<|;7ME)?YW#ZEtgeWv*(@k>YSFuE&(xQPhQAM>rTJsV7?K8_%1LnP+KI z)YL@QmK=}2nX|@(9DVyb?+Yhd8fHBC{<{9|aYi_tOt=g_YusNMReKGSMh$*^P+-eD z{H99;X-l9Npv6yT)(t?HoEE5YE*F@B`X=iozpNYc#E+UW6iC7H1asA7oUuAP|EYOu z_m2D*R0m@?32?><53Kb(Oc{`*T%%P9zoYEBcHWzDd^SnF{owJ}ALi;=4VS{ZUNRYp zQ3I-k7Ogx)7YTVVCL{7=qJxEh57UPWzrWbyLgj?7%mgQ)x#Nta2`%5GO^Q97RF7{R zOlEuaXXbVD3Z7rWuw4^{*zMGN{-}X8p0`HEWFeZhA#2vPZ@RCNFVN46oU{dE2zlTz z$0qM1GXO5tlh7TldBB7qJJchiaDTwOt{5S;5kd|Md58`){AQ;#d1n~0^*32zM|#+o z*6LN<*+uZnb$StmcH*Vcg|_;gfXi(6mxcoI`LsWBTtE0jYptjQO(Ck>dL>ueQh%Ao z_BI}n2ct;C_V`-5JKO9`4hn5A4jFu!18&a4&_2$|{)Yo!bep3EwvQ_SEAgVa-A`7; z+-k;{%ElZ>N^9U`s#GV%tX72}S(+ga9h+VlIDP^jI0&_>C zvhsT7R$HvSlk%cn6I2I=KCTdPQDMSxTdhZ!roW>*Rm?Vzk?Zl0iLEe31uedntyn_S1^i1QEl+VDQ78AU+; z<5|o?=HqrveA<@U&q$HC24#5Cx`#ciU--U=qVFijcnQzeR8YY5e}#ODAc#(@8@>JJ z)i8_ogvHQ*uI=3JXnSK`@cXE#0k>g)85I}AVIT#2OsqNy?FE|XIKRz+aB{!|0|-d` z8(LT*I@f}3`wr*4=3w}pHtC5QbnuYPpc%JBq_=hxQLPe? z26Erli5@24E&dPhCMwPy#K*arK$CR>#* z{Yv$gSchx+mzpxAAT+GM#*>FIg`kwtowS=z(CjLq*>LA2B>byNqNb&N zqpMI|Zrb61+#EYUJ(32nMis?H7_?t@+o8ijX@`MTodjJ0Nie{Q??Pwy%Nh2e14S(b zxqz;#YTTQ~oL-^jI-@NGeJvr4Vk_3V+YK>+fSuoIZnL=97uY=MWc^lAStcquPK`P? z?0>^v$GI@#@(M5pn~}DJws%lQrbGc9xo4tia%ds)6&YeUPiV! zu-s{{p8mkWFr??Pc&~wio)2W9*;8?LaHh&18>h01y?4!uF^r2b^E%KvixxPSTBDJaeomb z<#qY5cF_3idHYX6u&`a>;^6;LbQWw;bzK-f6LgKhOLr^M-9sZSEz&I^-8F=CcZdw# zp|sQh3L+iS0!la1&Byl-=9+WPy4GI%e(rU@j;-qGQ_0%i1*BiI&Q1m)l^&{U6>7PI zqnBa>=R+uew1QSW+ozoAfYv@qAc;_p2o(}Icd_a4W3i=WfvUVj&Ys==gu{C|8so5w zvh%B_c1c6=*OwSJdz??deZ+Rx4(aQ?KaC~jck=32eR${A`P#usi-tVb+(?Ve>{6I@ zQ#Y*Q|Koqjf#bXpSv_pbj;mfA1Nu`lb1h$F6OpV-_sDYgpC7tGM`GaQEQ(Kfr(L!9E$KF2PHn z^6tFi`^(spsl=SVCw@vNIWE~C>ze?UwGny#p8K#leIen0yqoL%=XZ-O!`>WE-GRsIB<@7&?-?_!ys7c? zN(b0{lUR)B!n`~>ARE@T;|c~}o7Q|^_O>lzIxTL;ZO$N!=4kOd+leIygIkt87$@b~ zqmHXv^hqgzzF;fE=8YGVG9N*kf%l%Xe_Ax8;)4Qj{o)6{v+qEQV}_Z?J8km?*?yUa zV&Fs%D}Q=ZJdIQgcMtHADE z{r>69IfKraE*7IYO@EqCn17sqW<1J&xU)54-qcbHqHG_ipZ4DBy7%!PbsWwXA&R^_ zy4*Qb4aN(k(EA)X)dBd*x4aK)WG`jta+XS?FmMh|pa$k#{(*t#1z*7PRo$ouf)&NV zis}Ui@ZD#*^P~AX+CxHEtMvlE2Vq1se{xO%-9pou4-vFc;ZsP|ywgi88#z=fAva}g zJp^AMhS0dq?`ep3Yuhva+v4vyivVLn&sw<}_pkyUGdsJ=D^vUb_(@ysqTXbfI7OWn zdC6d~Qs*VJQ9b$V}52lOBdnQR8@(N=gj9Pq>g&bD$0Cq&mX}Q_$UIG_m z_W&BJM))^Y6m4Oy(qj8jJ1yV)PPDu|B_cBg%3R+sJmu86xsxg1IgFkwzKt}|F#470 zu)|}!Y+wn8?Jak zDiIHw{vb9@{e7Jt2>A3JS_`NF7*HCYEAu74DK%`U zOs4{n7t9YLi(#*Sb2k0N?{54lZCTpJWs2gigunY~-4t&w5eks!18_czRa8h2t!jLh zPal52PL=Gdvpb^tte;d4DJdh?y=_M1{hPFr`Gd0c;Jsh^u4iUu zo2)#zc19T^25Yp7h0K#&-QdBnNIFxdZk`d1IvuKxa==XU0D!k=N2mWM+dEWJeh3M?Pj2Me6kP!vXC*(GFckQ`2DXBP>+SiHvh?5&& z6a)Bp>=v7yn#IVbOi|^EY|(VBDyZ%6v!(+}^X_Tub-2CLR*I~arv<>$gXXf3--dSs8Kgu#SwE0KquVUtzJ-GqtFI@5 zvGLV_?VJ2dUS3`u+@K%h1=~~YEpEJ8i`Q3ciRszB@^a_Kkq(uhdRVM+a1fh2E$7zM zWa{~45{*{`)8HMh^G*0Gj?JV`8Kp6WqEV$JF)IpF2*IPd=x&Ke=a(ez>(xOUR=Hz3 z7FvW0(K98pfSrXxNpWFn`Ta;lqFk~?kUx0O<^8Iln;Hao-_BPIAk|Xvw)TS63n)Hs%{pu)N|Q}fn|!;~g!+u5u5n2voEj$78Vy3_>J3x=qnqf9~T7g`bc zik~sa&ejv>pKi~qg$~sJ{RII|g`eG2xVSaUW>lTskr@~4q(p6-GmFRJ+{?!y5E%w* zwtsU3`NpBTIPWOk3!ppmMUl$h)+MH)gE0zJ-uZKt)8O)6zWIULc=f4B3V;al^ZdJz zKu6>>e{I{1z3#5cVBP$7|7}mg;Iyd0j|Qh(uTxJPwaxK%4cZQd-A5M%MVZz7Kc00) zE%@D!dn@&SQ_!lV1{^SU-NHM)RGcRZ?o>t-VI`hwc5nF<73lvrx2FqUTZLc^h`p zM9^02G?eW9`p>T~asTFopQ|;7?9`cAPIU#|R^A2hwdcEAPY@JQz0~>A{+>QH(g3%_ z4Qsun!s*628dxse82VRjM^}}}DW4oaIufG9zP5R?a!}Wb&A~+uQ7fC|Yf*SWtv+QZ z$vv@wVlv-6gRf*|k~y(jHcKDaqM14ApM`yY2>Kg6;CgPI`W-*9HoYvnq{GUp)@DsR zY0Z}Nth6D1rtXuU@;pjC&spY_XFS1LrDlU&ZQ2k@v#ae&Cw?y6DdNTp1)*?Y*5D##kw@yU|Bi`=O07{LR z4MH`FGfM)Q*iqpOa%zW@4XiZxquwrKXFGO(u+FE$*$xcol?G@muY1xqzxet;KZ5@w+7Goid!dn+#)_b#~_| zR8a7Asqc(U?oJyn1uq|+f>Y{-KZQL$<*^o8TD~61al8^Jrsjt2%>G7fhD8*r=7Rxu zJfvUy5y=xmtxg71M&*4lB>B%`Plb!ly-)w}Vz?m5L#Cp}@K3+kQST*T!de(u<&tCUE`&1 zXkRiu18w%Y?)-6{=xEy=@E+o5DOZ*g>^q(%`|$4^a(l_1_$bzU_rWVBUfg|EfR``D zP`hrq(;=-$n&FBj<@P=?)1<#T)3n#OMnwygpP|f-$q55bp?lGmjMkTi z<$-z#2RBI#6WDb=XjYQ`s{;y=;9Eic(=`n*t%&-{htD(=CUu?TaGW*Q)`vl$U=a{7 zehp3wH#(0fskTyY!nA>XlcBx9x7wiX^LqxG%*=i_U{mO*-s>$$W=#)UySKs~9dM+U zR(9(Wmh4HG{3L?bc$BSyBC#4az-5Z}#n+?x68zYH)aBri&LqLJm)Hg!es0$0QNONt z9b0ccq}OqL<6v;ygV74BEKg2i1%dK$i}faE18jqiSMJKNM(aPsCc0R?>nFjPBc`Bm4f~_ zyslAOX1}OGkyy%5`m*@6cP6au^gIKI*jy-%mz7V1^t{f8isqimhqKs^lHT}3`gQ$# z7Wg$ccc+z{l1(hxDsql57jUT)x-KOV`*Xr_I0mKPT64oh&$h-##F9ji6Ru)FJu@y4 zW5hzBU}Xg*l)vGzJYN54{Xzywb8INw-bl;KNe{Y@!2LebvK*6J*G`frksaoxtNng( zaOAt=1TZHctm1%p_RWaQqWz|_O6TSfHlYwlFH|LROsV`dq!q!aT)WG~mp$lVa&NHI zC^TY~O;mN=@aNw34w<_$8biG6Qpw=d{V%x3h_UlwnAL1z3=sm+C1xShj#Zyw1iLhB zjr85RFMm%^qkLWb%VJv4Xn2eLIo82Iob2VhspR~mC@oMf+58Lx=S*yJH3F_-gLHWY zLQy}JE6L%yRMlr^>zTxB(_1P@ZFla(F^yHY(qCd_f_>>0y$@m*-*-bU$66upsKqMB zGmV`PW^!1=_#(K!(RM=}6spfGZD>b8mFudz1!uK;_#zLr(OUV&QE%?A@*nRMORg61 z&fm#3gyjWgANLV&n&|{92Z9%R7!{8vDV@y{5c}k9WB=tym1oHLOQ|;&dabb_@7JHR z!3OI*k4moRl>wAFe;J$i>WS9{nkJh196BP~t85t#xTyRF5ZTj_(j2-{5NVVy)>g>9 zFmEsoZ_9hvFnCl-gjV=Y?biqNC9hKtTxxEh#vsx;<;MPEwDE22#c7$;!|Rg1%}Ggo zH_kIjJ`S&&vz^w%uY2Pyrc(UQGphfIeE6ctGTvoX?_Ox)Jm2v~fY|)@^OWrNh&9a zu@m{XQni(b{bx9%@APUkIVml!r%2)NfDq%o+DL`_&9q z3aUNUk3cA(oiH^ynMO@pnf8XAVd}NNc`mQlsktjbUi?jhyw@vs>#n`pb{$(rQF4fg zh`>*x^Pt;934_*kK7q(QupBe}U3{JeVH345W}tH?-Un(?dJSOgbp_?3`zOJFu7$q4 zpA-erC;mj!Km!`Vm+0p}e*H5RPY7z!tM2b#000TOdP9{XMEb^| zTh6yO+7ua4K&M>W7>BF+$?e0gwvakNFTXD*@Eu4=v#z)Lw3Q!h5)z_ou7PZ;_lcGO zDPqI8ImhH>wi_Mj4Y6aR!LPL1DS%6}OJoDXpTVnPr&VmZ#_M^{*2&#ZH*JyAR-#_p z$S+uJauj(98CdcWu$4Cx;*y!C!Hs4hy?|yYYXX&58EGUNRMo%xp#IN~);|iwEly9| z?{0VcGB71`=&lpquz-Qm`1(Ropm>Xh;uQh9Il!%{R@~KpHSQFfaYVSjx#?__7?vLt zy5Cpuq*jQDMo%D%&Mj5zE5=%zFfKMg@>_($B>v%$a_Z=YIn379=$_yQLe7>Oa5L5T z$Qrh6Szr@krrI@#X7O9BN$(zpVmwMgv#CG_%eGI2RJr(f9Ui$hFV1#JqHfG07WCd7I; zaQMMACzk;db*c0a)>DX3;yVh!g%4zw^!rs#3KwIpQedB?38DZ4jV1F3yRPO}$4k!r z96n0Yi~ZUQoM}CaAO4Nyk9qPZ33>cjv+AALnfSC3Bo>*9WLiG)@4h%5{@Y>AXH!FH zHR%kQm;W)s6z9jAqhc!Z_x{BhcfD&Aj3}vcwCG{3DU=vhQGP1^Zo2d5AE(fg>si%5 z=|rnIs{Z8uYvODD)7w#<&?OHfb-F3?7Uz_&`qgF`f$ZDX@4F^EpSP#y8w@_%;B5wq z)0);A(Q7?o{=BA~nJg>noLYA7_xHNzm%BVjl*!i4j=b*N_y27hluuV`qovb0D_F-m zb(|OU@;>MSfCJ8>^0>eQnW@vPq;MyBhhH#}=5fHl<2yoO4XT0c?>Mf1hXmO03(ho0 z6<<@|MngaGTVucfdSidKJwyFG8f#{jeXEoJLF3W9X)(mr?(_}(OxE8+{R?i^0?5?S ztOrV4;}R(eSy)n?D#6o;)))zw0Ke%PA|>*@3S^rhUTw46;v0+c;p-FB5_JXT-&-V=c;AJlbQBZNrdKzCWz>J_`;d_AU|&0H zG7N`bb~cX)n{3Wf12P=v@hk80$zM2fNF9IBW&iAc7|CWe^|~`hpQ!HhpR5dOQHyWe zuXm+s=@BR$3uTe2O?o3dpQmJGb!M5o=of zQL)4 zUcNMJRB8eoet6!?yqXr?&P4VlO5kL_vtzzing8^5I6=4fc=*%O)h|CPtKf%|@drtr z>$RzN0@2$SjBlVE(vkF6o-OjENhrqgmMXfkz1h2dE~(l<`?3BC2KPK7p{D| zxjk8gp^!ik?@Gk7x-giUOngMi%haHKZ|fvwxoc$q(fC7-C?Z6QE6D`J%o5q+%A zk~&@T4S2cQ;&$y;ZQ4RIfKM$WNmMEmK=9*kuuqZUKF1+>yn)o92HD7S|1SLXeF%bL z00JGcw1kxeH^-gUc<4&?b6V2MMY@p$9RR4ve^oZ?UC9cY1plqIcUL_O2OKh8_uvPJ z6Ks(Lg<3RMVK-}-AYJmrU7nBR6u7q>wptC7seTRMWr?TwAZL!xaadzY7#C|D!0$|B z;`2{_pAe4O=;2kanyGm>^mbTPUi8-Ph_6$hWA~4X&xf<^x5A8G4~6OMpDlK@s{c#R z$L|t14;UIZ;i%=|Wk##1&5EI!a#m26E7rO`r`zMUh{vOQ@{Gt;vl6c2U$+$j>Q1xD zN8CuG&N0h;W|l-Ad$VE|FwlYy1++JX+^>8uPHlqnA~db{_68;rT>b739!CA84tyk& zTyb|cwk-FCxc;8$?`gi)gc%OX(!p$OZ$IPj?2z@2c50WJovqSukC!&ZEINF{1m%U{ zw!bDav!;#p*>!gvTY%j{xv5_D+Xe;uH=B^crnNGfVmjBd-xzdVsQicj`^Bu^&6TUJ zwq`{Q`hUItM`^c<_CGX>V>{o?O+wGl%7H0Kpu_UAk`farodtlqxx1k36|G${C!Vf&HlA?~kJ9$Ubqj<&uk6Kazt^u~nPY zB5hyda8fZO%_QgoZ<$q4BWJjG>! zf}x1RcK8B<*W2K~azPP~fwy6B&&i})6)@svkpMI8$wfBsB-uhYd{2;Y-ATTnze_0) zx?0jj!0oeKH2BfF#AScsLwsFl3}G`hj_v?`YT$DTqHmH1OHJ&4PtFn$V}xZ2_jJ-H ziD&GKSpj{_o!&?DVZW;M%%3QF`wzeGLPK-L3NlV@Kw4bcE4uo|C59g+MxB{a|LqKl z52v@)EPO#@@45o}ujk>94l^pg)=4rouF)qA!t|B*-bN%}N@1SuC3egir0rVX_9vOd zH-+qSX%!X0N+jAjBe9}%^s?a!`9R3u#!^rZ1ys5D{W~z=k}3i~zua~@1?8m>Bd$j* z9{eh3qyAM5TzCp=fg3g#nJ4$g+uf5MHz;)0w|-@Rn;eGl!m9A+2fDTEOvoh684lYn zC_D&t^`&-&I5Cz=b*es)OUm^WxZ^BUPG%RHDJ~tSS5-u?3k-XTt3@*hC zV5_3~<+`mcd)cQUluiMQ@;&tPIp1L`Q9>g>vF_IZr@;8?Mo^!v1T4z|!pZd0nS`{! zzsu+_vrm{r7oprzr1>bE&v{&f#tjYuBQA63fH{kxl&NP~*ADFGPTXDpd>%CDqJ%wQ z*+<>6d=@QVzK+}OxH;WvD)Ic*ASVAWdOKXsgGL;a2#Q;q&rOr}-7zXYQL#g*#Ui=U zXy=lThoIT0{9~c~CwITryjAz0=j(!h~U`p|76A<8MnNpQK`z19ZTu&9}2U zbc7jG_syctK}%mp`N9CD+}YNzcVq(mq*~;w^Bv@GR5DkK2c%Xfdv(vH1Loux_(^k{ zFOeZ+&+WbQ&pf_G>)70WxtbIHDCKU*;o*BWPT%CB=YYqlz4|i7(r8`E-2dvR23R-(8gZ>c} zl-BT3`%!k*a{u?MN03@X0`SWLPyguy$b+)r zm$_8H5*Yw===dCnnf_W~`%~35<$&|m>F{55YUs3J_kdrs@5t=WIG66%UJ9SYVxPh> zE*Ae7h^eI#eu|#iW5`#Z5wRqaC?r_3arRP2CPqi=Rbf(6IumE6vFUad_U4iGDYqBi ziR)l;Pgg~(C5l%D8MS+DyUcGWwRzzFTx|Z&bEU-n_}!6$r|D6&kT=**q9XmF3A83i zGZcXEVS(z}KkusDRW#t^Gdh%x+mh5TcR<>Mz}UdDGaem@jd}4}xl= zdr@RH-rQEYzRJlk-=5Oz{GG*N*B6ZJa-&QB^Oa~I`SODuv`VjFdp&wruCN~^td=)d zYowandT}srbH=Ph&PS5KX`DRpQu4i!-?`_?n}vI(z_vOQQHS6w;6wk}G0oJe1WwqK zlISbde_y!^Aj?7MMOgF${t(0w-&#^zhU4Ob2Y|AkQCI*20l)kd)8qAqP)Z>|@j$q)sybWgUIbu3J)r=wL$(LmDJ#&DBN(T!$e*nA7m z$oE#RN2?1n$Co+h+tD^*7>w5Y!fDZGTzc2fnmo4Ot*7FZOE4@`gb`qF(^;?)T;PP^Q(gZn9Z*@wanrF8?uv%cJ#ly}|^BcLRXtf1IAZifBTw9|Ote2lSEg zb(U6Tecq1o0Ri~O*xaZ?jDD! zpU;Xdf5eAceXCrnA^T;XY_iWi%ize<)wf4h1mQJ&c;7>Nacur^xt=E5G_Yhi>}N+n z>(9M%6l+!>WimP{&Dhq0!D6vVG4fB}gx{RY_d8p;b1vPn@Z@>ClsUbqvEhssOaeW< zTfBh&s%mt!HLp>A-6s1wnn+sen>L+myvhNQx?aSwXkzk{Xpz%VixCY$SKQ4mQzuW> zoL#=VskO2S;r=wVrEVZkIZVDHzP^n|7Wa%bnq1TMuP~iq&xe|~E&=y`Y55Wu`tJs3 zXP-I{&SAod4iQm2>IfSMM(;!uWud6I!h0*?m|@4;7o`(;MJ*#ES@X734Ln9&x4M2u z&XsssAGxB>F+6%H;PA!npVF8Fm_N4M<-dR04t>z-%#SU_0fLIVpUd6|-*+@Yv@7Z! z+ZD7{mPT8~u7Vn&1QUX)Y4;Yf*snXBxzuakMxMTHDcrx}(Q#vDw6vJ`UJ2rk%lsJk zNY1VLrDcdLi{ z@qV2Eb_o$T4B*C2TAAxZM1N(2pTAKBP>E-C8S7m^KxVdFi~*2*9M9l!B^2_#pu z;*|+P;jqrliX$-Nfczl)*J|Q_*VjrvM*GPpu+^QGq6!%!U;Aw0zEDwK`qNT+$cJPq z_8U7k9?FP1`WVqH8-e_V>|s+yKOK3ScU8;2zOm6DNO`@UnMF(!1Y5a4a{%3L521Va71XwkXv zya$@IRtOpldAdCt=?wa31MBkZ26=W(e40<~=SBJ38p(bP%Z(;bvxx+dy;*E7xVjV3 z;XTNzbE7O7Txg@vglI1N*BX=2CT2ZZ8+Ju`c6O8wrbrVm4w5NJW5xA7wP9mi2ORg) z@dA#Q7Jgw+L9zaDUyjb(h&AdUvSnPVGdh&J9L_N__oa-p*LHFDF8#JE>_ki(;5O0- z1HsGaKy-!#fY-<1rzgHlu*zF`=9SgWq9uhW`n-ETyL8@Fs^muXLFLCzH%S%L$ zuR@e61KN!P7ak#yAb<;~5~F1Ht0)RF>Cj!_DxzyNb#u^(5BqxU$w42F1DYLsl=QCtnnmNTPMjw9s$Nk61sEZ0W-{55f!Tr}aJs|7t1 zd$P#Oze+t+pIxm)1l1p+7(XYOkvLkWN(gt$=(94mvs*etDE? zbK~i$>)CyHdHc&-_dGg=SfL!GRA$T)!s+O<)3L~@@We20NdVw|_9^Xpw*9ML2aCTJ zJ*^^^W!{ZN7ueTusc1-Hm*GLos-*0BKd&|&cI`xRUWl+^DRG!J;9^mvJWqyv9>h&s z6ygE-3?pKI$vlLEBB0L;g;CzSt3u;hR^wr~g(q7d2@2b&M}MeO2a_AzYlTjxZyQ1O z77!SnM-^!c&U7twk8%WMBxYK7E~Ouu=}37*Jl8Qh*oGr4L)n<@)0e`N(xc%i}-^<|&l_ENp`EjjCK^l%3;2Jm;Zja4uFxve!kuHQO2TJ~v zdx_yN^&_nrF9eh)Yog+WK3wEYeKm~OupOfV*Z+MGxp@je;hY%}BS*?W9qrLFE0P zgN*hU4VBegA$hvNRX^p13V!S|cLBpQgtpQ+3e?Uqdt-4836$3u4B%0tZFQ&#Av_1s zF^~fNa-(aWU1{NyIU4t)XQCTjnC8Cb zrVWqNy&6=G^Dw+SbtYe%I4W`ct4iU>&@PKtFJHuF)LHTdRJR+F&tE--3^QtqOJU?Q zY|jwnE96UWKm;bT+tPsR2LW+8cmS4NP++~}VJ?U~|9UIpX6}_VbHXKQ1a9dDj#4oR zVk%)HCxj*30Co2_MUC?%D1cI3{0_$SGb|FH+E5CL;Jcd+lE`68h9(I$Os#JpRX+Hg zMUJi}g7b~?bu-a|JQLWC7ZJ-CJ{PY(kRhb>Z2l>ZRvuQmA^>5xaXKtQ84B|7kdb%L z@*o6Mr!5f^ohhVxJNK&=jwS`=Iq9?wibolkTc6W}9zTl!gx{KoU1}*j=1_&MD(>{^ z3~}e5^XN4Z04qh4V(L=voLyZRydJ|CnziC3zcIhJf7B~~IbB=quyL&lxbz(SqupMo zY>zvIw7!z7b|+}kU577{+9d#!;PuNCrtvFBQk;>5FwJ_Mn>NgRJBM6K# z`v!$k-Mi<)-4=ybz2{04v0DT8zV3KS59In?)qdS0EI(RMAVO-eU|-0Al`8aDrvK^S zrpW9ZhARZAxWg+w-8s#o0H3E80Bw*aX!Nrk{4HWbn@yzw5p|b7hV72DO}I?2Xs+)l z%s^Zc!j1Kwp-8o9M=6Nl-yT}>g3mEE6oN7C-e|Y{cLhP&4yi+qi;!Cklm!DBQIEU@ z78ySQYeV|(o7%;QJbbYi496Q-2o+ma-xFTNM-@8@oB|U+0m-=AR>71g(|yEAvEE}Sptt> zJ1?;19e1_x%RjwdhabWhefC|9R=&C&g;NE>8A7NUC-UUr{R-NRD1XD!c4>HE3x5eD0>V zxxL*4)fY)ZZV)%7=L4CM3%K$!>TvOsh=o-;i4ua*oE9KRlGP(^?GT zOK5jv(}ZyV8K>_u414VhRK`o{uUt`{-5_4@!j2&?kNmwLL~x~h#mY{4Umrv{R z9l!MD4kS2b%QP&Q7}auEKhO=&mwT}aq2t2fCfZN^yXgu>-b%|Ltx(UT?_G)Il4QU$ zP0UFM>YwbCWk_^yHLxTYwN-R!1<3})LF4PRsU${30L^_a%>2FDr8Vg`a`jS`QgADx zblFAWUT&2&RPw*$3K3A(g)~;g-S!9G^(2`mp#Y3E)Z78mbB746g|4%PAW6&^paSIF zHmI-k2xAURGZID6G&v@yxcqTxJ0JXzlqpquQipbIiM#}TI>$+XZzN(--b`hZ(S^gF zvIq=HJXjs0J*8tzgvWNEH$MmvwXXh^?z`@d>t7@?f-u+n zAIhNco1`yZ(0T`bQP9%WvrM2KqN#q;V-iHQHvmP-hJM^#*((XlNAo(=J<`oH2j^E_ zJ3_;Jsp1s=MBD^uc!uMy;;l@mtSLG!AebS}3ac(rh!jMd$$uG7OL523UpoBc;B`Ue zzd?EJ2U9d$W)qN*`#1&!;L4x~$}iq*;x|{kM$qR#UfFlQAP@ub8Ey^{paweR5DVj) z3=luor6^n2Q(q-dToMW0ZMUz%P}&db0HP+qF~Xo}rf(wP%=|#Fu%{gonZOH08n-jo z3n`%+ZCWr(x|uqH)eWxbE1DgtJw?q*3kk@#Ok{*<1fsN~+Z2hFFb!|pfORBSF^1pt z7T|mcetroHsny8)@G&(hhm=I*stKaZyF4rno-3_(J9*<7V^iF62UODN$Z2vz>yL0* z5i(u+c%a3&hv?PI(zAZl5u)+oN!Gl!dI?_X{p$3h@yq>UXdui@2@B(|w(F>98Exf5 z=KDNe87L1SGSCh#axgT*WEQN^m`D}vw=OhW@CtYbQV`>Qn+fOydv@F6f^<-$NxS(% zm7UIK1Mhm7tPOr!n$C@_{VJ;>B6lM*n@$8v2`|{HQUgRR@sfjpE3P)!UflnUH91`v z;je~E*%yKA44CgA_)!Nfkn4j7lch?pTy|ba?KM$jjEmp_uBWo;ZK$Jd}`<+owbZqf&Ad84IQi902C{UV6x`5T|Vh zIvf*m*52W~f=-WMC&YrY-ffQ~UtJCEG56Sm;f5iQhmY#t-jR_1*}r8WOv+ZUR^vAz z=pJYv1Lxb}T&XMO1(}r5n115db|DMURKPLhVjyIMD7wRoL^F?5lSOAl0+K@sO}%#_ zuq*OWcIe^IZRKwD8|T2^$_Gb_K|mgT6dzgzIudKOEnW_IN`eu=@!qQf@*25lbK-PG zQY>IH!mIe%d<5+~EEX<7EBv83FZftw+5$Tl}9585pA5+plW*1UD({6z4GsQN@r{s ze9Y&T2gG(xJO6mGy&}uVpCbjJ>Q40|pXI%h-ZVIEQlTIz4)4hZ8fjo=hWJWux$~B- z!I$wrU#+iB!L(=$3Vnjvl8^K4hf<__rXdlSKT$lN;JjJ`(?v9aI%98cRMa-mWWeXH zEDq!056aw?UCnzOzq;8dqyQB_R3Eu==JX6zRFUZD19cg!HO_yQyP{grUcmt}%gu+u zH>l+H&}a70bq2nMtqfC+&!WT7yKSdw|2tmW1Htk`FL&@KXjip2EYD^B1$hQU$-$=4 z|1yoQUlPE<5t=vs-?$4T|8bcfh(VDJP;Jar9Z`_D%j#;6m_@o4)+*=c>(sQbxj`3O zm84<9&3*{rjLjJnu0d$u`@!do7VC-;#c5gefIvAz{4iqraB-S(Z$D#6b#;XfN>NAC zA@QuR!*Y3wF0QY<$VD*gqk(Xa#*X2W2g$Q;OFOqON^MSsh^cApvP}5PIuD2 z^3isHN`p>}e`6tM<8FTPbH546!sMm&$RQhUVHnuu#lDEZ#k~4_U$?lrb|rr9)X0c~ zg%S#ig&lu(?$Iy%&ZESKQz#XK)IfxO6lqAr+$C#um&n3IfEaf8a1u_YL2nqw!y<{X z&1?xO1N$xO?x8Gak((g4^zIcHeEtgE0$P7|rd@yhD_F%RRQW*xhN8v2t1dBe8)O!W zQA;`Gxu2TtIcu8bWdW40H!uO}sU1{&Dr}6}>?2}kdb!{CN8*{)O?}WIlZRc9VH$Tp z1A6vEKAN|Jbe^yDo;v;eci6am3`(Mjl@C5Cc;5=4WaF!G`=t`8+m`1C?u1&Yh={XY zH}THQSzP7V;-zHTYa$mP0?j!M|Hs%~4Zueo#DMtj9Ed~mxE4LldNF{3PjwY*P@)5F zm2tc%nNDBLWE%ef;9l*$Zj8pA69MtRDhK&s9H;KZh0>;?&yXl!2b`1#pb{lU1WRRx ziN{xQnj1nYcN3#9mxzDM5h534a0pSQA$hy8KVvL>pmZp%S9Gs~)LLD4WkB zpR~MB4l=8h5MRA=21ywZ3sCMI6fVf1xtspOu++`kYl?1f)bu4{#r7yt;ocl91@_}w zjodkljka9j%Os`?`}0iNfKtiihB6ms^LngHmLh=!xhvor?1(-GMOfTXW5E>wy{^-M zU80+MIz)MA(p~H`rsI@3BeJU5#WtemfPMW+2MuPxX)iVq*YD#C$N2|8UHSn6;BYBO zV!_tqclR!BU;(D?sj(CYv2v^Nv~i{ZxN=pMiUn4DW1$_aYr73sx)n+kj-eSb?>Lk|ytRCZ|CoV=;%jskx6&R}Cl0GQI$-AC@@ z!3Qq8ME`$z+YCwsp~wGyZlhoL^9?$De{n?TVuK5s#zD;NboXN*G0ngp7pAEU)weP^ z2;vknIW>@H0+k46O|rOqBS<&D{O0U8WWVZLK#^3^Yl(*2%AlZD+IA<;kG^t}bQpPI z6&e(;q9CD+!V&^&fE>~Sk3y9gcU(=RjGAnbW`6zY&5^U(Jsy>1zbCDFxG`$&Nc{VN z51KBJ;{WSVhTM&XfzP?9ZqLe)M#gHsZeRM;LV*m+{}y2gT*z{|miG`fZP>E!mKby# zCN06h2Oa-4c#uLsx{@69+TZ&M-!h+hX|*dio3W_!EcnmKmCD0pRX^UzW$>}K-Kv4{U@LiD@lM4-~j*FcPX$&hs%?& zyu=)bA)L?jt)Jncgl;I!c;Sf==;XFE6F`LEO`Q;!ObN$D0PtLr1)FFC4j^WMH>9P3iI?!(E=4&Q3Rfoq zWm0{(ULu9x(DKmX)B+K?H_IuSTKc<_g zQa_2-BzUHiV8J&R(?dkj@7}kLj~ufPI(&aE^1e#C@BEJ%zC|f4m3M1{4h@UQaHj+9 z%VW>zRp0ev$uMrUquQfZmk#1%m^vs+-}v1Dy>ki z?m`fu2|#=c8rE6$%b=qN9CEl%@C^Qq|ObP@Za58Byc`RUV5mZJ!rc@l+<-j zq>jRJ1T7PDX=4BtAf>py0GT18I|!rz)evM68`@(Sf9LyIHI@F^PtCVKZegax^1RdK zwou!(h$q;%AMxf_YzNV}02=0%XDg53&1``bI|CA{uU)5A^YQUI-|T$6V7lyV^+E2o z+mD1pJ_(g-;jX6qd&GOG;so4bgZK}x94I3UsU{D7bGlG3M`$Jh0&dgIp>)sXU>+AD zjP14|i6mBLHw0E7zaf`fP%9lf<9`h5aMqa>^0S3kw)w2vRMXbaQ3LnB{AgPSrixGs zvF^|J2mb{xCOq7Toe|JR5M8b;ZYJNS&>=8V^PO`)m0*ICrb4AswY;^mfJtJr5dd#m z&J<3F1qiDT?7k%oEpIXD2J9_^Ad+}=IttSlGvSE3Okazdyzss>vn(zn{a+er;)hch zE*j)zpe(oi&cwWwkI|^OJNjSU^w7l%4eI-n-R_eB{(Qxu(5ppyOf&i>X;N^~yB=P4 z7tUpW^jzm|h~HM8?e{(>4&WAT9}^^qMiC6q!-&wz`R?Nc5%*v-kg0^?7dE#1f3|hP zR=!)W$uCm~J82CC#Z|Fuuk@jY1m^ISD0L>R{pM&?3W(c`Gutj~rwDFrS6^_NUh;b; z2~8xy>EUZF-!%sF2|pM5jyL5!ZL8E_hE^%$EGL1Liu+z4p;bm z;xhW?!29pVZNu;!*6{{?OkVA9_gv_7%bx%M@89t?Fx_yZ&fed<2?pT&7G}TCU%ECD zR1^JZ5{t)1Xr$Y6B__0f@^b9_`rhSR*+!iGQQUr4P_%8gD8U=NtfA|HBJYXnV@p(G zUI_8s(l*yZ{#|JOy=hR}i1zjI!~JdQ7EbQ%gdP;MPnb*kZRO4LbK9WJFqfHMM=p&B z=#wpWn9n7SF((aA5Ow@JyW4uL`^e!mF23)z6bAg0F+~ zBRb9apa*;NmfB`mOLv9u;Am#LDG@%0PQoB^Q|>MD3v>0JGe=3 zl@aWDQt9L=Nypf!hB>;O*lh9zWqrmMj@7#>wBbWZmwzaZfd3|omP>SJ6ulV+{oc*Y zSmVX^`CW$IG2bGaKz5}@R$sYFdHwwAsmtvmnXmO(!~A%42XXrQpe4zPx!T}FyF&-1 zvqcY5ymL~oSP|QzGRF=e{!;O7ZC$%1_6lUTQ2!6hZUD)GE{-NNU{=}&I(Hw+%Icng zMM=TWWj}^}WL@5gWq=Ivdv$rFG_$KGp(Pl6#EHqA)Tv!*8nU7g9JqthQCL+Wq% z^wSneo3YZP1+Ad*<}ToT{B0_Dit{Zh_#~E~XSXNJiB_#_V&$v8u^bF>2Kw<0nXlx; z=R0rxfcj2Q4jv}T=m;2}i2}E=Tj;THN-gK{sBmWzJfLLFM^mT(yXv|#ptRY41B>Cu@W^+_ew!h=u*|y zsNOZxh;&jDyIcMT#kCPsG>Jn=H zmcn>&3!+h%xN&*gWIE&tzFXO!9B=D3eyYm(u_Lri?^2KE3NrAAMwefc&NYjvQSrL^ zrc@VEhqpQvNhD>plMcrzB=K3RFGejKfH-qG_p3B+RKNTTyeE(quAi8i3T4RS<~4oP z(LT;*T*j4Moh3CpA=p-tsYa8JnnBepJ5YtHS|q-E8`d4X3Vghow6yQlz__jk9tYa_ z`7dpg`VFC=AAhc%wi!RS%QMOXO&zu4v#eZ?RsyL2B2~t5{>XQ%Qbho=mnHe>1E4ax z(<%Fr#7vAX*X>Znwx?@p54(xr(%rB4gCIcVk{x7W7)E?!kuWZhZ2Z*%=5Ji0r~*Npb0-*$CHPS_1LKFTIkW!{DiMBH?E3k3|->k9vtd=CWX52tGGI+H!@U` zRRTNp5y8&0_`}}hjgXh2&{{&uHXFFOTGq2`!+(R`#zic!*G>pRY0qJ1h_*>f4`JXf zK0;`UYmPu)YBf&fbewga$RjyT+nXXOOMBufP-Y+q57aRMR0W1|^>%W$NF54nBoHNM zumZsw6`i{RE0CY8Xjez%jYOV-ecRAjx)6e>k+q~O<{#0xr0OPt0;>BDJU?t~bjYbI zMBa8*Dk}JGQuR}5tREQBCrkH?pF>RUvKqlRm=@O#Eb^k#-_)Q?qd%x! zwG?U+0dkkv6z)>#$6xvdk0(RpQXX(ba5vjFae=$D`RgU`r_;MeRO0^v)&wd0iwWN( zNrw3gli=Sf{-j%f>y8~euHCw2%U?lareKl?LXa7S+1xhBXJ;Wl_gq!%hS}ndHY16e zb*tsMM%(pbvuGSgTiSGsThd{Harmq-Td{}p*VRG%473YC~ruB$FjP* z`pC<#ymFTy0U0Yi3Ka>&LoyK=#xF|tAxC;?_n!k52}m-?w$065x^3IGzs<7j?4jS0 zv5e&{BFoFm_X_aK*L+F9pMr`2j@F+CB7s2(K(?O}f7_q}{}!mhuPbbxojp%z19#@f(3JqB^Z3#fz{2Khy@z*KTH#0MHw$KRf6lTGPAlVl`ma&|9BGmn(!q&f6jQU^c&|GQ) zG96gHHdtx`3(&$b*p>ifa*qVP49IV<_Z^$RjcnSq>74D`x8Ev=;09qD%no!X$1;`; zBx1xru(Y)F*pVYgzPh@)y413{#;(Mk9QEg+A_3_aSc24fV=Yc79eh&VKOZW)f2L*o zpa=q(5gNgVrlzLeH;x#LE=B^i{aBZ*GYrW9nSjMu>WI=%b>BYsxZ_Lln?~OS3 zx{A~S+>u)6%4uUpoFSf-2QF z+3Pt+3_yi_dSKJbCi)8eNJc z0IBv%GeEvb@XdNZ=nF_C0O{$M>c1oaNd(cD|5(N{meVdP&=7!36&@M^NWjZ3kTGM4ouc=Tr8d}``Y0>FQLa7ke#8u5Aoluu2< pui#lP*E*K5q=*mv0PD!S{eMi+({y$!snh@f002ovPDHLkV1gZo7C8U_ literal 0 HcmV?d00001 diff --git a/packages/addons/service/dispmanx_vnc/package.mk b/packages/addons/service/dispmanx_vnc/package.mk new file mode 100644 index 0000000000..38c5effadb --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/package.mk @@ -0,0 +1,57 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="dispmanx_vnc" +PKG_ADDON_NAME="Raspberry Pi VNC" +PKG_VERSION="78e6673" +PKG_REV="100" +PKG_ARCH="arm" +PKG_LICENSE="OSS" +PKG_SITE="https://github.com/patrikolausson/dispmanx_vnc" +PKG_URL="https://github.com/patrikolausson/dispmanx_vnc/archive/$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain libvncserver bcm2835-bootloader libconfig" +PKG_PRIORITY="optional" +PKG_SECTION="service/system" +PKG_SHORTDESC="VNC Server for Raspberry PI using dispmanx" +PKG_LONGDESC="VNC Server for Raspberry PI using dispmanx" + +PKG_IS_ADDON="yes" +PKG_ADDON_TYPE="xbmc.service" +PKG_ADDON_PROVIDES="" +PKG_ADDON_PROJECTS="RPi RPi2" +PKG_ADDON_REPOVERSION="8.0" + +PKG_AUTORECONF="no" + +PKG_MAINTAINER="Anton Voyl (awiouy at gmail dot com)" + +pre_make_target() { + export SYSROOT_PREFIX +} + +makeinstall_target() { + : # nop +} + +addon() { + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -p $PKG_BUILD/dispmanx_vncserver $ADDON_BUILD/$PKG_ADDON_ID/bin + + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/config + cp $PKG_DIR/source/config/dispmanx_vncserver.conf $ADDON_BUILD/$PKG_ADDON_ID/config/ +} diff --git a/packages/addons/service/dispmanx_vnc/patches/dispmanx_vnc-0001_fix-cross-compile.patch b/packages/addons/service/dispmanx_vnc/patches/dispmanx_vnc-0001_fix-cross-compile.patch new file mode 100644 index 0000000000..344c283d61 --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/patches/dispmanx_vnc-0001_fix-cross-compile.patch @@ -0,0 +1,20 @@ +diff -Naur a/Makefile b/Makefile +--- a/Makefile 2016-01-22 20:52:21.000000000 +0100 ++++ b/Makefile 2016-01-22 21:29:34.601124600 +0100 +@@ -1,9 +1,11 @@ +-CXX = g++ +-CXXFLAGS = -Wall -std=c++11 -O3 -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM ++CXX ?= g++ ++CXXFLAGS += -Wall -std=c++11 -O3 -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM + +-INCLUDES = -I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux +-LIB_PATHS = -L/opt/vc/lib/ +-LIBS = -lGLESv2 -lEGL -lopenmaxil -lbcm_host -lvcos -lvchiq_arm -lpthread -lrt -lvncserver -lconfig++ ++SYSROOT_PREFIX ?= ++ ++INCLUDES = -I$(SYSROOT_PREFIX)/usr/include/ -I$(SYSROOT_PREFIX)/usr/include/interface/vcos/pthreads -I$(SYSROOT_PREFIX)/usr/include/interface/vmcs_host/linux ++LIB_PATHS = -L$(SYSROOT_PREFIX)/usr/lib/ ++LIBS = -lGLESv2 -lEGL -lopenmaxil -lbcm_host -lvcos -lvchiq_arm -lpthread -lrt -lconfig++ -lz -lssl -lcrypto -lresolv -lvncserver -ljpeg -lpng16 + + SOURCES = main.cpp \ + UFile.cpp \ diff --git a/packages/addons/service/dispmanx_vnc/source/bin/dispmanx_vncserver-service b/packages/addons/service/dispmanx_vnc/source/bin/dispmanx_vncserver-service new file mode 100755 index 0000000000..aed9147e3d --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/source/bin/dispmanx_vncserver-service @@ -0,0 +1,27 @@ +#!/bin/sh +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ +. /etc/profile +oe_setup_addon service.system.dispmanx_vnc + +if [ ! -f "$ADDON_HOME/dispmanx_vncserver.conf" ]; then + cp $ADDON_DIR/config/dispmanx_vncserver.conf $ADDON_HOME/ +fi + +/bin/sleep 10 +dispmanx_vncserver --config-file="$ADDON_HOME/dispmanx_vncserver.conf" diff --git a/packages/addons/service/dispmanx_vnc/source/config/dispmanx_vncserver.conf b/packages/addons/service/dispmanx_vnc/source/config/dispmanx_vncserver.conf new file mode 100644 index 0000000000..8d7d5b9cbf --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/source/config/dispmanx_vncserver.conf @@ -0,0 +1,9 @@ +relative = false; +port = 5900; +screen = 0; +unsafe = false; +fullscreen = true; +multi-threaded = false; +password = ""; +frame-rate = 15; +downscale = false; diff --git a/packages/addons/service/dispmanx_vnc/source/default.py b/packages/addons/service/dispmanx_vnc/source/default.py new file mode 100644 index 0000000000..1a91d91ede --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/source/default.py @@ -0,0 +1,17 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016 Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ diff --git a/packages/addons/service/dispmanx_vnc/source/system.d/service.system.dispmanx_vnc.service b/packages/addons/service/dispmanx_vnc/source/system.d/service.system.dispmanx_vnc.service new file mode 100644 index 0000000000..70e616d79a --- /dev/null +++ b/packages/addons/service/dispmanx_vnc/source/system.d/service.system.dispmanx_vnc.service @@ -0,0 +1,13 @@ +[Unit] +Description=dispmanx_vnc +After=kodi.service + +[Service] +ExecStart=/bin/sh /storage/.kodi/addons/service.system.dispmanx_vnc/bin/dispmanx_vncserver-service +TimeoutStopSec=1 +Restart=always +RestartSec=2 +StartLimitInterval=0 + +[Install] +WantedBy=kodi.target