From dbb52300aa6cc0b0db3576a1ca3d97bd8c277a25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Sat, 19 Sep 2015 10:59:02 +0200 Subject: [PATCH] provide icons in different sizes in the webserver --- icons.qrc | 14 + icons/guh-logo-128x128.png | Bin 0 -> 4469 bytes icons/guh-logo-16x16.png | Bin 0 -> 408 bytes icons/guh-logo-22x22.png | Bin 0 -> 528 bytes icons/guh-logo-256x256.png | Bin 0 -> 10779 bytes icons/guh-logo-32x32.png | Bin 0 -> 763 bytes icons/guh-logo-48x48.png | Bin 0 -> 1298 bytes icons/guh-logo-512x512.png | Bin 0 -> 24303 bytes icons/guh-logo-64x64.png | Bin 0 -> 1841 bytes icons/guh-logo-8x8.png | Bin 0 -> 244 bytes icons/guh-logo.svg | 602 +++++++++++++++++++++++++++++++++++++ server/server.pri | 1 + server/webserver.cpp | 31 ++ server/webserver.h | 4 + 14 files changed, 652 insertions(+) create mode 100644 icons.qrc create mode 100644 icons/guh-logo-128x128.png create mode 100644 icons/guh-logo-16x16.png create mode 100644 icons/guh-logo-22x22.png create mode 100644 icons/guh-logo-256x256.png create mode 100644 icons/guh-logo-32x32.png create mode 100644 icons/guh-logo-48x48.png create mode 100644 icons/guh-logo-512x512.png create mode 100644 icons/guh-logo-64x64.png create mode 100644 icons/guh-logo-8x8.png create mode 100644 icons/guh-logo.svg diff --git a/icons.qrc b/icons.qrc new file mode 100644 index 00000000..9de097c3 --- /dev/null +++ b/icons.qrc @@ -0,0 +1,14 @@ + + + icons/guh-logo.svg + icons/guh-logo-8x8.png + icons/guh-logo-16x16.png + icons/guh-logo-22x22.png + icons/guh-logo-32x32.png + icons/guh-logo-48x48.png + icons/guh-logo-64x64.png + icons/guh-logo-128x128.png + icons/guh-logo-256x256.png + icons/guh-logo-512x512.png + + diff --git a/icons/guh-logo-128x128.png b/icons/guh-logo-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..143057115905aa1fd52b44a9aa0b501b55acc5ee GIT binary patch literal 4469 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 CCP=3M literal 0 HcmV?d00001 diff --git a/icons/guh-logo-16x16.png b/icons/guh-logo-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..9e9be80dbca0aa909ba71d17c96b3648c093632b GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?- zLJ($@v2Q2`G9*h}BT9nv(@M${i&7cN%ggmL^RkPR6AM!H@{7`Ezq65IU|ttTv+K6SHJOE71?jUoY#L$>S57av$K;oi0RyGYr2|y(qwWpS$)cwZerNjQqAWH^V^YSH8P|IMNHWN5Ewi|5r68-ZCqQ8Nq`ymfdp=!B zVQ4t}OlexAyY#d|Def!1r`GS=SU#acG0nGV&%W6&CAlN!#y@+w)LZ{WdR1M{!`*(@ zzEwz7)U3$qKT)mrb?UVvFIaszP6R(p|HU%HH{{T3E59UQC^C4u`njxgN@xNA4AG+H literal 0 HcmV?d00001 diff --git a/icons/guh-logo-22x22.png b/icons/guh-logo-22x22.png new file mode 100644 index 0000000000000000000000000000000000000000..a907cb514f7f123146419b781436a52212e029ac GIT binary patch literal 528 zcmV+r0`L8aP)9xbqe6b+DVv!! zmYs$18gHbt80Z8d#8(Es(veE1+_=W;2AC>I7=!~G4}`7B1RLorUaN`M=_8bZPzF-h zFoG#;)5Nt?17U5{NEd%s_xH+zh56d2Xh8_u@5n!WzHvpFDGy*v`Ge!p5uh z5XxXDyFL_!A(!`egx+V`@k#k9+9F^j<&NAFX{1-@GK7JkMT57wmr=GvgWcp4l1Yc! zO^09I>-b=Rz5E*_P;55ig>&<1-f!*V+M~}GB0RT$6DomDuj5ncmMzps;MgK0ssj85d=W6(H9fXve)Pf z*h^mR1qA&HgxJKOzvH^A8hHT#4&}c$XfxaK0sSM5x00c^p4)40KTA(rz|YT*-@(<% z%i7Z2mfy|OF6T&!764#?nxfnbMDAgpojd(b*3MtID>e;T>=;F8C^(JtwN5dHl9IX* z-=6c2FAYt8#!UtdRF~EJN9{faI~Q}GsxIbAh;R3*eGiRSt9b|0t1OIDZL#86xVYgv zkT95RU-!rSqu^tOtKZ(Vg*eoG!NK}K>uPZ6?ICkPh|J`9)azU?qA*xsZ0!Oe3}ST( z1Hm9n3K+7`r%_-eERX;fkh`WP1;S1Q*#PjmwJHGV8GH*sBa)f_KfDpH?#dQT)rJce zv{MCMccW%p?hfs0EX1Wd7c`k;B;+vQ_)ptCFj7+o)k}Xyd>o2jp%2RxWdm$e4QzAi zI|+d1blU#Wou8&#lq7xsF@reMyjbU9TyL!ZE_}nHXB2OU;bV#Up@5;y&f#Y6`>w-x z9n&PMxdl?i9Md9)p^Z(C`gICYY3b2#N1PER*m6*H>VO4tRDlr-PSH3nu1$a5yvYrw z=bdtDa#lwF1YEU3gv0e%ucxw_iaa}I(c1r~C*w5~0K|Q6g@QdV8Qy}Sqaacs+1=fQ z=IZ_K?e95>cF%_(_f(KotOCXwiIF}OsyKN;Oq|<8{QMp-^_c|7YEK?xEu|2ON^`n; zf04D>OLbbx)E<*Ua6trBCnH4)HGlYwW1KVZUp*bcCg~1pr&2v>Jqoe%eG4Gi zc+>$TX3$kpXL)PoBzJjSm*fNf-R_v=`IN~20>=2}enU<}%^{*6+WBRVB%%*lI_WXJ z`XPMhv=qm@k2(_EM;Z!7vEC0e-)*+|b%Vb4)17`IBn}PLyrrpTdVGbIu%ml@t{{VQ zt1ifFY9x&?Pz9t=pak1gaY;|YW7Au5pti0Kzu=&w?YEtH93D^sDO*EaY(!rlBnO9i zKb4e8WQP!=U4=dRlrrCT{1UHa12>i0s!n1<�CJL#Wo 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%0A#6FWnPoqP; zmdsF81>TIwbFo+0Svw@3)hq-2SbMtH5{Bi7rfjwV1Bs6s6B{>Fw+{_M`dImfO+G)5 z^D-s>mFi7-goA%lVo$iSPRitKA2Bmw-A9=N14ocKkr}NV`Wa~Axd+kKccY+r+AAu> zLY`O2u#N#IqkncS0kGwEh;nt=+wY_=$al^?N(vjF#!EiQR_DOM0^!+3EfKpfftj7$ zfF0C%&QW%0+aqp5TofJ*79lmOM}ejL3d4eSd=M$?jMwI$1B)v@II)Cd>kv4mg^9nN zRBIdy@vyNVVD_GUJTaX|njQtVz=8@)k*!6gW~7X&CY3hQXZFk;(JIO_OH0_FV^B|1 z(gQH{xM9{>e*nk7>BZec%%5fLj&1`AY&hH>ww_V5x5CGbDN!*X5Ur+jhcR*q7Hg_%P<)L(nfb{(m- zsj7t90g6R+MR8zOiaN&YZj>)T-A9>Jo%)}cEEEdSxXM2Keg;z$($$l2($)UUqaeS! z4<}8jWyWYYr3GH4)~-o-M{F$o{I1h2$wG;TmXlYQ<$b^M-G^BsMb1o@;SWHBjf;*- z0xKsrFaU*syA_K#sqqFw+MPnMjw1|JRe_g~gZ;&J178owfO2VqocwF_=}hdW+KN(8 zg5XD68Vx8&+6GY_AiQ7R?x#Sij*m9dlceuu{6HY9W}rrg9+XMOUhAbv=NU&J zNDl1CYH>zk2IcH5dRvh&gAAF!_8p)iNO{`dj6vB4g@<{Xec9mm=wER7Xe7k*kFUbi*DY~T4 zlZsfjCcyP8lM43p@rIT@QgpFmk>E#=;67^C&u14X9KstI6l(ktjFjNIK39*1=W9;1 zjQ4HGW7PKSR+vj4dbr+XC7q^_zZivEI_bhohY-Jdx+R)23{B8}Qx_ckcrAEVJatBs z_%ngGB9nUZ73KZcXmF`Y^~TuHY}_hlo%>s$624!t5u@xV?RT#^xM06Xi7lQMR%0R_ z)6PA4Z`D_fu0f0+(`MTT&CR!s@6uDA{bCRR3C5!gAIB!U=4SHI_lU)ZtY&AQv>lNEkZs7gWc@z9n1slF97 zJ0(FxI2ZCMHI*6SdW^AUkvUZ29$Xpne4dpOy}zIs6Q(;lHEU61fdb$4Bv8xv+ALhx zr)z&&9%mU^po0T9&Uwj7`kBkL`@>+qn)>r_KQ+Ak)*wO}39%htGJG7gnH|(kn`S_L z{1k3KX17`bl9lS5atl-@2WXztC$xej+jSj-38kvcZ?VJ}Go_4B6b=D+r%js^~j(H~x~`Rz>}h14|8fk7n6V zi@BjaJ7ULqEyY;(!^f?PnE|@+^wK(D6bo(oRPmT{Mqe!BzC~8sn+f~BRC0|`-CwjC zV?1cdEtx}UfFCTBhmszgZ)kw@AcN5)GA1a3q5F61(7Jb$NR%&gZX7VctPNEO9PhgL8qb}5~x z-TXUVy5;c%Rj4+=3!^lBNL7z;SSpU5jfwdL!bK*>g2S%E?cyCE*#vLxagh^gVlu6rd2VQJZ&~`^eAyg9jG;0n=W?TuRaz}4nuZLJ;&Ed z&(6FK)%eu_PRS>6GRVheNXE_Z5{d>D00THlyvOXMwqkdniT!-P))6x#o00>dh14(?4>U`{zy&O!gi$9|lU+#dkC}b= zvuu_8GP(R+5?qEW-W*48xMy}|C=K#!yOOMMkt$k}y$40gD30Q zq{2e(%W!Q?8PQR-62JVa7!4mWG<(lxHgei7i=L7;#L5aXX;VNf{k(Rp#L_v*NP!+Q zmpbtW`>UrSDpf0Cv;+ahtx(dHZE~nO4f;>v#1zhlrK2E2gK2v;JfVRT?ZHJQ7dk;n zwB9deM3JZFem|3MjoT8mEhfvKe;pu=UlFmQM7wKCMh?FFxt)io_7hf=>l2pFp=?v@ zO`DiWnFXkq!6O#k`>ng2iT4t$Ww3VWC}sdGV~8#w_rrRR#(@)lwL E2Vw&}yx`Ut zPi>7QWr*zizcuj2qY2{+k$C&qiLrzbB+sTV@wzdv@zj(fZu%i z&;N3S)>_j;WG_E{Byc3)S)kOcVk@V20=eQ>UaY*Q?b^K&hzFy5tK@n3=_wnP;(-bX zFN^5$;wyr_04t?DO1m606WpGN?L9UAvD9G1PkY`(;qeu zSK!0a7;Rc#NnS#3vL6iay)q=G1v+N5&9B9K65|Eyw1;>z5R2n^=Y>k&I&q#obd^ zxOC#=p0YYRMj^wG>(^{;JH*{EwYr6^1khB8#;%y=AS7^o(MRG5fAu;(04 zQ}8c>zA)8l39~;+pBmuK*$W-zbXiV!3eYl0>c zLWoiE#aADEGrlN)0e=EdzWAU%>Vw8;gg0YiED1$O0lCylg_dP|*-Q62Gw0_+OEFPF zhFL11pJbDHne+R8=A1oq&KV^l!V`?K-T@w!4T1G$Ltwqx5Lj=XUV*yX3^Iprd<&fZ z?F{GgSA)#r3(N0~)5TfN=dTg7Y=*o0gUs|$`09bC*W!ijAg*@#eDXA(UO0so9dx$; zgfD?oqsnAqidXvgq6L0k{DTuee#ZIyRM7bzi1M=wrc9 zsc?+L+xM}zcPRL@|9~%ne07nNXTCs-;1Qxbnj~bJ6lzN-Kq(<&ggE-l0rvGh*M`{l z@Fn1Ck8^WZ`R@A9R2&B}!x&0PS|LOmwk* z$?-24?c2$P{4|%!^B4#wf}sRMG$=5Xpn#CF_;Bv9+t6CjuBN$Eq)}_3Wu*r^)XFsm8bwokG@2e) z=4QE5T4ZEPj?L*F-x++*LVv~6np0QK^7Z664aY%i!L)5+=_Hl`hSF=(tZ0whGc}Hk z?BUg+9puuPN2(o&z+D!q6~37~!w*vzX|!5khDc>P2!~C~RS7)J@qNeGlI{$oW}rK= z?s$@SM_^oq3%8bVMWIEJ z3MT@s)fNFeQDVZ#D$hni_@%07*qo IM6N<$g5}^@dH?_b literal 0 HcmV?d00001 diff --git a/icons/guh-logo-512x512.png b/icons/guh-logo-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..46a7cc637b8efa00ca50c1746015d5ca0fe52efb GIT binary patch literal 24303 zcmeEu_d8sD6z84MMju^t(vT>L-bD`)5(Lpn)F{!rA-W)vAR#&tqDC2glqiW#^fF4c z=yis{?Dg*Mv(Nqk``db+d4|iKd;0gB&pAho?qhXIG8Qrb04N`7s5}J#DEKWDfDwal zN4|f~z&AnnSyw~U( zFnE*e(|ir~YVF=}?Cj^`zMU<9o?G7H-ZtXxCw;!Qc3TzAi_vp?J3Zs;JU4%Tz1vIM zsh6t(=h6t{dc4#!*itSna=6XuwPI#4XJ9t>ZC4$V%YV4?M3Efj+7c+FrNMVIIy(AW z8E=g|golUcc_0O#qN3sz4MBicsqO)A8k#X~Vt|JySNbQQsG_1D#SDNq{DTt!G&E1x ztpP3`o?_+yf7AaL#Q$rHh|^3}E7b{&j&21M1~d3@e~J80M+(og9%H2 zus53m&jsuw%{NE6d5WE`uAf-Q5d(GiJ;=*5=M0ytz{{@SW!|OdwCXMy{U`;uZAtlh zzv4(c(6-Ucfc=v|_htH#NL%BR#6omOX?+Y!259I(HbA!O{zmC&!b?80j<{}fbtSE_ zg}0z1uo3_UbH0Hr6Sit*6Y-sed%u5WDGMG*fqo-H3=}t9zit;ak;UAM2r^8#J2D0O z(-r*-d!-_(Gfmz*1g4)FT3~j{Dk=c@K~v!K-V>i)8)@zBMz=rWuZ7vEs;E!^`UbbV zg;Hj{Z!vUebhs8uQLcqTt+t|PJvIZp^L|2|MXHfuhm&*n|G%Y`~tDuPWr7Lpx z-;+S!3l)X|&}ZG5fp3ljk4-atd@d7pc022TIWfpz=i&Kn1!NaX$p!n(&-@!{^+{|F zt;FgR4gQ}yKKkI%f@L@NxAV%mQy%NDgKYCgK@i2(AUP`5wr#j;@!Cu2>gK9Xbqp6u z{?{*a-%}sgON)f3v`O_b}vwQwmEN~Z_9;gP;Jc$qnbPY_? z1Vhd&?q$WB{k)TP!A7hM&+ z&5mu5mx<-fJd3b7?fAa)v*9F}K|alG8`5)%?Q%Fz#aR6GeYI$zsRGIXRCz3m&ZFh3 z$~Z~i<@}fRh*rZ|+0cQ=@mS7LA;L!m*4Qd)i>^UIjuPzanCKJ{(5k-0_^vwQZrhz$ z-M{B#JOPI-OVrB6YjElBFKhaeK=^LXONPMlgWVyC;a!lh|7p;ZDm-++dw;U>FXvJe zGw=^P_N>9qy&rTt+k=l}4Qv0!adwUoqDXsUduF@#UO;lxV3l;sAo^Z#$r-JOA$B zXB;9Em=c>4KI`{Y?rhXxmNG+2TX0^R2gsI;5Ez0mA>RCF$RtkS%Qe)~5;2-#=Qj`p ze^+Vi+N0ZRdn1(++1DCg)&qO94I~xcLq2SJn`3Yh%hv#M7zC6WONa-y5WA@p6814C zxq^sh_@E2ql1}G#(1b;1OU!PT@60_BMF4vc8O6q}=s&Q1r{voU7=Wmvo7n5#4JPL_ z^GPt_;%UgZBDSx9PIZQjQ!bJ7OJMhtcSM9OO^a5t74A{X!Kh@I_DFH;Z z|M{-`ZN$bA2-!>*8or6PmjZ)d>_huYIY27PC9{2V?aL?u5yEbKKCU}*=V04lu4AAX9_a>e7AZ{T0Dy(L-l)CNDxBGboNyh1 z#oWP-uvjucuoK-JF4K6*!~xBxk1o)|t`1M^rE<1}75#m+A0Hi^A_>~<b1#PHRRBEn_{7@Z*P20>vY@dI{Qr4U- zUiqMX*$n#UJ6hLF1%!_v$8TbUVz5jr3L!HgAPf5hevYR^^YYNK0QE0r*MG!fb|dU@6KO1O?b_BqE93(OjuQUeQmepd@YAASP9fuZ|xgK z1&0~;9+EiHL4k5Eu8M{NYKy6J-sjh~Uv9-me`^5A=ecr^^Z5z(-isX!(TX796(|fElSxT-pQJWmp^OEr>x%vrF*lUMK09cRnUOIHzZ383p z{S!?UePb|o(0FVRULNAmgu0g(!FJ>rq6cCKA!lEB-v8&(rVVZh!_avt{A z6t%X6Oj9*6$uu9_XjB{_REFX-8y=^{JXWa|z9K>Im+|>V3zOXVKpvKZdQkv=r0|4&O1PyYIYtu1i7p$7|3DNfQS2WzB6~R_r2-TPH z;e$~#2B;ZY0tiL5=VBIm|1QsiHQ)g-8FEY*?0Eu+DtG^YL8j0KIo4Ve!kH#M)M;2* z2v0E-)NAzT7ZmuHXr!~&S_le#QCfZeH4ezvrO_n}cDQJstg`;Fd2i`C3tIk+ap19e zZ`QCo3?h}0^h{Q&X{HJZ#+mNTXd<@@YKaJS5;lG!(56)p>5lC@-N1LX&6qf9{ptPtZ{L3+5U8N~xfIW|Zf!U~qG> zC_=6XGBf%XNew_Zymk4_%-+%TTxNIB+DM`A^7#Y%5hHJI0MO^1oI{ZgI@h7Xca?AO zxL-w|!>HYJL;F=Bg5rgX;DCJ+fRBEi$KFBU2i}1ya-TJwvtv3Tc)}yTP!Bt>k94zL zO561BmJb>jYBoy>5)=mG$`pZ5`Q+QR@wv4#vEM2x!T z$dxUL()=9VLkU`PUq~?Cju1eQG3Zci zw|9Ksz3Yck(GU5L<%3qtYY{y2{O|c)jAJn$chC8lOC|iB1DyfX*L!ZR&aTt8yxC?q zIqym%H;$@p=0N)Z;7{6pgO`;jyEfja{0+Mzt6csvz%;XkG+Wy2ay7aBxZx)7;#or^ z&>QzC{i`LRg=r&+3~td(WD-DcOxE6u5YE5e;S!+s?- zYMtgd0>eb1=b&blNn7D3p{@gPK+=`;uesV7SEhLtIfnApzU)@igwA5&n*2{w>BU() zQakfa(4SvzKYvsH%I}MXEST$nEQaNO1ikfQGT_wBJ5-Am>GRU_bY?;;M@jF#9wfu? z@)8U}54eko_p!w?dqYE1gG*<>;zfLqw;+!Sm&bz`@q}X35GW!R$V4B(cDBq+x~Aa6 z+gFE%3x3Q7+pQO%jqWo1jJqfkfrKNzh9B-Su|NT?eBL@_h)AY!fCQAou($Ab*%GHt z2qL|bG<8|f1;*QgZVz_fKFc-3&dFq{=5 zi6&hK<~H*6DW6_Pv4&4hSzTyt?`HH3v}fXAZTbG! z2BZ*7X^K~;`*>UYu!WyA2VSP?w_vsSa*C3+^jo3Gq_fViqz%rg0qD7*w{{adZ7F5k z6Nf_-1g;j6(U@`$^^yCQZZS~+P}*jDK3^u3BQ|Sv@H*Q56ihmb)3iJH!7S;u%aWsQ z8?^CUp#O(LLmEpYeetp;>Kwi>dh1T^x5+6aRhC5+$)Y0MC1Jh+AtA)phvqP%0zFzD zd1fvvTAlZI8UA1LWMHQeGcm~CDkK>A)HeZTxO_iO0a(|Bs|9l{$SNaNB0@k{2q%0d z>b+2zBU8~l5tMnM?@m>oc>(WM6IA?=wq|Ec_J+VCPKL)ByVlqe-DRnK4J^@mX$Sy; zwB_qedk6c-q&?r?=0#?g-jTXF-&aEsD^Z9*nJl>FoZ(_hC_nwHR~9i~3}@OF^w_?M zNG#84mtmr|5?u^@nv0Y2|LzD=Tx}#WpFAM+-h(KqAjQDQ%B;*%CnXVj`StOjxWro5 zerZR!m8kejvwMR}SyTFoa3 z`6$pg2EX^BwWWuEfciTe&{YZTp$1M&+Z)BNc9s=ItQd+{?HNIvcbzHtDlxyGoG&d| z^*Ndk((f5=g82< znfZ|qyYsm=Da-HkGyUOht*AqQZ?Jt)R@n%qv z4*(>rZ8F!^U*01oQ6f8^UcFseIwA81%sD%**tuACU0yiW0}wK2<5$s=$CBUMn=a;B z;O_d2q=MgEW!cB}tN^QT57t-YX@+W%5s&DOoR;l{LdSKli+fQnEgHxSB{er>YIp7> z7Gjns*NMPm!kQbX^Xc@KMJ~3yPgGUWx~l&F%&aMNv98JYrM_=V;W%GSC=6Qr#QJo} zj)`ii--B~)H!fB09HPjtx#|ZP?-*{8XWTMsgIhYXGeRh8P8Ps}tD@2g4!HeYm1=su z$faiU;iebKT}>D;G%*y9x5A{R_G3u%y(lGCyY6vhwS)FJS|s)8rtQ7-gpPN_o*jys zgMCA~;fj)Ql^bw1mHzYjsiD|}NJdZ5>g=iACZ2N1FhQ@DArJ zScoi-jdCtvCyCZ;AG|5UnTEfHSlxV!Mjy7n4|E$+u_i9;7Fzy&Bmfptof@x3?oHCV z$x0Nz$e=7W8XJkr8J90{+*UTME-iV@s-i`DCB2mm6D&$0u(Q%sW8t!G+t<4zNH+pA zmM2Kr6tJ(?*9Kk)EBnK@TAGVO&F0Z-68r|Yo`g}TCegp zT@y~iWkBHim3S&WY4Mj#7Dz!+?R}HE@u-j=7e%>-i4%6+d&utKgx*o4dn4jFVi`U( z2B*0B>EiYz>Q3XcQNlTF6rd+V>M2%jU02Gf7i0V-qhWRGP6abJ@O0r$de&Yb{Ha)h zC*>7_5$e?a+S#_+v77HUy=YYKc;Uc!HTA-L zsPp8X4ZO%>eXT1R(AXn`FU<9@*2a&dfDiSnE{{zxCt6UbaFmsgN6B1LJ&refT~f8H zz<&4WE|}))N+v!fAxT5>6_tK0OLhQVQj_oXZY(=iiNOx00f2_rp1!8g{=#~^ray3Z z(=cqJk|eEhe|^Y|0$P3J3g>AKK2dH8x?FzGu`|l(&`xf`(HS}L0ACBpH@_xUkgpN4 z0P>q5H>wp0@*SqF3X~KDY+;{}e5Ix8jjCzfZt57drizuM_lX9@F+VASeGkmOaQG0n zTBm68GQZmB)a&rEsdHA{ejMEs37)7sJ*6Jllf?drZNeJ zgInsq4;XsMzyGVDATnt%Tn1|e)qwm0@7oVPUKMT8G4}_G7rM5XTRe^^ z-*$dwH2Re4&AXmZyO=5=7u%MS`Hv&IhX8z5r$x|_a_@4GmcXSHw^(#{l+RMqm=9yK z=6gWCKA5FEb3Sn&`)D-)@{x#)GS@HVcPWe77UdM4ww;vopZ{ws%TJ zZGUme)6Is3k`VhW{2KESN-w-K@?T!D)Ln>KWMWbfz$LYKmnPkkt#YCEE}t|y`qUu0 z_v?5R8>Po-eIEnowmKDX-ROhY#VaESIhZG7?8eb%N6fUXgFQHa6vdQMFF^lE(p7=Bi&eB9Q%Hr@{w(Dw?^ixOYQ z{!Y1FQ5$6Wp!*g-11K-myBR-G0c)F?h8`z^Arr^762>C zmE~^D=nx_;3czglxeUU&ZtkJCvCwgE$->r75Fx0@+td|C!wut6LV2GLl=vl7#fBv?DX)>;CyFGulnI`@5X_T(<}5N z1NvE!3b0FP1;=U@ZNl*H!W!@XTW2+5*HYZCp-i<txnjF9W8w> zZM_jbc=|C=nn5DV1{t1bguWM^pdk~+gE0L=4~6p*>Odf>G#V@q-~PPi=6`w?#_3qTvleqY}IC3oO<7T#QflHUDdN$uh_v5=G4AHWE>+m3aYjX>YXQ zQ?3p4!VE!rK#yA3E8d>FsQ|4%)NsvZadQ3i9BD}gpsF`$w*Cpp11bO2w2oijdteh$ z*wwJcbM|yi46-=a(qvE=49PJDr3L+^Es|d3<)CWfMCjh}UxxU;o`d7Ip+~9;jgLPC58Ra_P*VILJ)mv&ixA?V$UqkC z)GcC!u5^E`z&u6-W{<@RQ#e|+)h1M4^V3eWOHj9_?EOFzVv~Sjwpe<(!O!|^3bI~6 zl$szgG7KM={jN^xy`OtvV%T=u60C*Uin)xg47@N*K30`sMG9aGDDFlZhwmsn2*PhpQmX+H&JOiN9y@ z$Z$d#BU>ilS3zE?iL~J}A7<56*TD+NY6`)wx#G0g!J>V95C=U+2z-R=9k;s?D&A!S&z! z6Bhr@5eV+ogA8%Fw6f2A-)sG?y&iKGVuyQlKLG?MyFxeZgi8yxBXXoi3419a<}>uJ zhA*-hIM|q#U{zmDAU895d7_|@1@JJro*$V(#O6kbIB39|xp2ZTHaFsL)MCoj6;~!; zqwQeQFs6NT4TQP_>D)OwL*&gaQ*7(KW69*uL)3jx#TupS07B1J=G zI&q(ppP83l%=SBObI+iXQvRf_UliVw>s^0W9P)5Uw5?BG|C-|6Wd7iDmT>4A(?37 zWwKSP#t*U2QB&V1oF%JrXm+b5g%NG%5PM40T2|DPZ%&^H56y;lSxTbSL_7mMkLl;@ zJt-uXM&ZRvlRB$%%D@dvd&TDy&a9HC#x~crF&Gi6G;w8vbF%A1Q$0?hv4@5Bks&^1 zo9Mt~1u4Y+!czj7S5=S2Si(=iUXto-Cl_eQ!Ms+SI|{u^@|;{ui9htd5~3)+mm&8i zFV`XB(>E4HC*IgHdvfA584%DV*-lambibeg+p`fdo+axGZRai8+^u-F<{4ikGBaSm zmSdY=Oj4KZ#s`PpV=*$K#FF`lis=RO)+b%b%|#V!GcsjITIAQXlX!`xH3Oz^CNbd) zbKwRWIyN$AX)>>aZ2KB=$uPK!alQ@0BexIE&qBDLeu_in#S`YcIq6MC2~zgi^YuCM znS#B`(P6DAISpQT^tT6|swTqekGLG{PcwdP$+O`GvQ%uFF;f1>P`iN5HKF-&o2;iF z*`R?Kz8meKT(oIogp>E-?pebPBaCFT!DZ)4q1Pof6#;=owQz<_(I>r0O)UfEJv>$c zH%(LhU9(1>4!nUU$4DgE56_OFa`x16-8(H(o`K~dvvjys$gNP55X41L%hSf%N}my# z8Q3~t?N62$V|*i@c!QUIAQ*6%`rM3a+cw&9J|E~W?@RS}7RunXHOGC7y?g%ZMab0r zbL61V$9MG>r}%m{N#x+H5Hcujy4=}C^ek_yQgo5=V=9zDJIED7aoILjvW6+p} zx2{cwBXR{7f>G-G7^$x&!nz}`d%3sR*LH~J|8zOMeUJp#ea@N%=ki!v81Aa3E?-Wc zX>?v5tEGP$`~D4LLOuej($2kkT7Lu4Nk+t;bkbfwH8_T84uSXt?A8yBcs#*2YCFgy zwW2kzy5C><{ve#^I#OPm8=4O+?ar6YE(vi%<`5NLIgDgYKKmtJunG*ZFG+H{ALE_* zWGaZ_Ml%HDQTSkNvT8_3i5EPK6b%T3so}g}#BOHF+|`_FsW9dFyy^@*XC?-o>nE1i zlix{e3~V&>K%Fw+XOq*`q*Fu23W^-#^r0vFL=9a5K7HzScrs}dZzeWCJmO)E?g z3-LP*`?9sgd9NLl;Aqc zh$`UQt#R*?*69R>PmjAQb`S1tHT%+og51jwDX!FnF)qZEYyg{z&xj1k=JN!I&M3NRrfh2#MaDIYw?Xo z*5aSiO^pp=iWhdOFrv*y+}_WIc>8$Kx>vg)xa_@o|MSoUbCr(zER)=Wd!P(nYQ%`x z815~OeZU@d8RvWU|7iIli0@;O{P&3v;LcWm{zzx-Fb%WK4rOz8Wcj~qytOfs-AbK~ zchQ|ADKAg+4DQiyty?6vjbFZpA`svi(b~(|{HE?}+dC*N4=3<;Yx5oL&+_?7x(;^s z9;S=gJ4l<><;##&!iq>Vi6S{Tr`4-;H>0)9sqpo}zlWx2O~xk|m$}UlN5DUS%Jbg3 zp`sQiTirT$>%r0qGn;*WsL@EkZxb=4wm09svjwIjpEj;4NQSUQ31;=u2P6Vq1&WH4 z3z(DHxSg)A=X@V8*a@BjWECy0Jvah*GU5$TWGnb+UeU*fmE}!mM4vB%qp8i8gh1cwn)sOc@?wmeDWJYRqb1PGxhFNnOt%*wxnJaIB&^Q5sh;v_} z$7`yyJJqiTqIj!46cm7$V0$OTv*Pfaut`a=^1^63MMP4!|L8=LAfZS*_{P`z7%_Uu zgj;3<5{+DJZ(F}ClqBN4Tzp<{MdC?*X>LddA51+wA1E_R@Vb-}kHFBHWYZ{Sj)3*GI+`W?kLB>Tbe@3ktNx6u*C(x;Zd>C-Y>j@9ZWl8ZO(9RF z)Mw|~s*(&Oe}H_J5?>giG$SYyfqV4ET7*#L2FN{@{_Fb&!?I zeY`H5jF3G`dD46(L@ocPC(pAZkH247IXjH*MwZ$C@m?yxzsNNBe&w-tk%!bR|k>D;Wa0~oPONEw< zqPw0dochRUS~HO;1-UQ9H4QEL+tPrnh67l7tSLLKyfb*3HLr<20ALYe8Ux@iiW>Siun`S zb(QmEK0aj%0hCx2t*P!$f3Yy-EgyM$(g$W=6e-S!yQVIr`u7PZcTXE50LfYp^C_HJ zC)mGklE}`7XS2X#4>x>HplLE?$Etog+1&6jCj}G~KKr%G3j*?NS9I%|2-TiYEwA?d)d%U`h~*IQ|m78Ux1k)w2G#i#ljr=E~H0@FA`-&v|mPhSo{?tn#Z3ku=Ni z5aw7H<~m6~y29?VrL9S^FYJv8zB}Y$Kf1+P(zwDRGD-B*OS&^mHh%QYmknXI=DSwN zkXz!tereelc?xA~ms>BJI~VGgmvUO2z9*N;P1d+;UG9GS*o_~!xs08U+U3gGY^eg= zQTTFdg|Jn(8>nWlGmAw@VRi)!I}v+)>AJ%<@1<3AtR;|rbFrYqb@|Pm+n`m2Bxd~? z*SJ1jUEZ3OAYZa!6dIcHm^ZiSbhw@)Ok~Q07?d4Pk<+_jMn!?Qbthzy6R&a1iMSXA zh&uJUre$XmuJ$F8c*}G_l|dL*$eZewpsOPX;lO-D?1a1w;T*yhK+t2~+|E)`y9IbFy<- zp7hyiKBUh1E8bgu+tQYw)QnM0wT?YI-{aW6y4Hrso8ncq`AWyUKvuKkAm?|tg3NKR zFC6s=RW{c@CEVtsXOPntsFRnA?;Raoj}>3U?1sQ2c0x8!ToUnPRULTTbLpY^KhOV; z(j-U90o5;NQI2;`ETlrUJ|N$rRzLgfrzTvv(c^@lZtj170N%>!6!yfL#jO*t1TW7jQiW{k^;pt%GpoB5^$5W z2TVZ-WH-xeO0{$p^{OFyRrmC&?`#Qs$){F-oC%Kx>f({T%cC0#+M`Yn<+Tq`2xnhm+YLlG>B=Tm~(SoKA}cd zt!gE%m~V@q)g&3y+l*dy-Gg!C1>sPZbco3V1|>d!nbwBB*)DxvGZ)gk-Y|rX%$hS% z04r+w*-{GPIw5c5vN-VW^lmbY=%IkYvx$&OXr>5DZy)WtoH_1CZHtu-^NL z;(|W1vzld9@ouJBjmXziKEXLN+9a5Ccrb=C4*hY@X>)kMv)uffA}@0f{^D=2VE!o+ zS(ZT6BgWvB@oD5Q7bcy;Y?w)rSAD7Od63mFPo5Yf{=<*I%||i7N2S5Ytew>pS|k@g zI4d9^WicJ7;Gaf@pR6}KHc4q@z`t(~3-Z`_<>Z>BsnoUhBW{iicdmpe=m`i%SQE_$ zKi+ZHB!zG|Te|4Yz=tN`zaO#oU;bdaj0g`il8(sE&0SA!HsN(^EGBV#?JkRY_0pu# zrg;L_x0V7cf~bTAo(mZ;UOksv41u0HrPt4)7rH$48F^XnTq;0s^gD>JQvt(sE$VGD z6O@c-zR{PF9CEVkw`&LCRy;$3eFAIlRsl)h8i9z9QyZSKRswtVcmpo_pQ8`IwTx;+ ztauG)0ua*yVnmlNEQ6BrtJ)>Ea_Z**t2u$Dv%=qCANi(3MGZ-o32FxQDQ~a6ezs}c zwZ3Mg;RTr;_XptpYv#)OS2=lX=C)@1(CljlD-_}ioZbpIaE`tO8lH)whXucfj64#v;_Ja0u| zEB4z}J@O;d9L4&526wQV(P`>`7vtz^;nMui$7z@M{HreF#a#~>E>>v1O}b+wpvQ_k zT}zcxMl>@w#&22(a&xi77?Jt3yt7%%;VN=S88z#OG&N$D*{35BXQkJJH+m_=Bwwx_dqKvwaXJ5U1F9 zs)Pt&b%O0VFMAKTMIwGoe`J8hhFmug$qQF&-52uk~ zpY=<6lD6$!1y>>_3=3}wi>F=_ZpaIX*et9;<5PP)@#;|Sd0b&Jh%dfetd9?Hs|e`#DazE;HW6`=!YJ;&TsEW2?d;Gm0Fjy=}e`$6-lSbq)H5r4=IVR zi;SMOo1Sqg7IsXOy%^Agz1rq`YqvjLNcir(G$A3ejQ?**+9#)AIb#f0T0rieu{GqC z-ed@IN=hB572Ix4m1!hlQ{^+X^rW0VBFrzdV@j3L9ty%IhzoMJ2Fp$y-YwFubO=ih zc!rn}H+PtiG%3fg~xkZK4o={CzU@k4DtFwU;r;UlJHrun8(~C9J90ywR1((NI&-{ zJ&*MZuJ^D(eh(g8c^V}zMk<%o!XF!_uV*K zjc0o)i9~++?mq~wEvPqo_h&@XbNfD!U06h<>@0tXucDnQ!!MS}_oiym7?6W(%XDl9 zVeJ~TBCT=zHS{5)_c!bpf*CA~S}K;Z8nY-gn5#yIR&A3urL$aNdpiO>>{S}9-C&6w z*AF)$9wh4tmU>qo)&At%VrKNp)dZqN~d5O2>^ZUF&KoXKM1SxUZn=wbQqdM>Gmvdyo*ljcPwGik) z)MqoER1P_WMPwMUSqN>x-E6%v^~KV-@*uTD5m);e-fWSx`?M zAm}l@aQ(M)+#JLO$){i!SR^j7KMdA|KPdp~*B{5N|4MybM&+h_z6P826=G%XwB#B2 z(NCG8DxIu)YbBmO%)fnM3%mOwExSnfnG|8&&I}{8spHY2tR~ojc5a#`gNTNQB`gVQ z8-&Q`EcEqwi4rOa+AZMEFE5xLgL?x|fP>lGaDBiB$E?IvRzUOYjnPE&$e{>VxWc2t%7SZeOTkRw0!*?lY_23`NQ@Um0rv=nhcjX8_P5Xu;MluO1 zWD7~fRj(&R;Uvjqf0Gk^*snk5l1GZTwJ?3s{JHllxo<4Q&_+bu8>e%j#Uf3wYU#1d zwTm0g1rLOmyK(8eokGq*t@c^Y%u=cG+=5ZA2P2tBsx-t~EgB=X~srKQ#` z7faZeU7Z?m%o-U#Sc)PSdKJKnpKtt6e?x!C-du1^6+da}!3hjDjna|c=fOUWGqkyQ2#S^GpmOHfNENrcNg$o$24dC#=yK%3k zpaVF-mHo}vx<1J%geyc|Tc$)aRUpzivHA_^6jV9I>^niiNG_Gmw zU}OigX6Q$cKX39dQ+9V}^XCb5RJhaHsNQyP@0D}PplF+$q&?qx3N-OFBFt%&uFQjG zYZomOKsXxHhas6o`V&m^JefG5rG3gfIU*76#%1)Ej?RDy6t6djX)`7MU#Ji_Eo>_G zv^_Rt3WJklkx5~t-6-PA|N0dog>nc}C2vyKsEh)xK(N$q(Y96lpYGJ?bDyerx^7<9 zvlo{k-fac@CX&GyJV16;<+aAB@zueBhGa!$-mub(@5bj255dA`W@I(f04qU_CwqQ9 zetb!&R7gNJ?o??9lTP(-LW>I`$D!_M%{DUB<`6djW%K?_I8?Kxb#3W6H@r`Q{>!!c z6rt4(QiwNeOt2*+>Xo zU#c?{;wtz#b6cU^^gaX}Sn{RwPcvcX=H}9;sKHnvs84flf&CnZ~x zCsc9Ogg;|dworhG2IxL%#I~%&)wM%k-c;>dWmm2 z-a?&|3tdJiE!po(uv(VJMl?TE)Fk*7^YF&4LaP@(PvhYWEmWfGr=^8S$|#AfCBumT#79-1~tWui4FSp;v;SBt9* z(?@fsXy%|wnNSUzd`F@+xmCZU4zlc}K!;==xXQB3ll+FTz5nAJS316fzI4uvGJPC!r%Vd!B@%m$f`Ydrs3eF04S_a(aKv$49 z3ph{CHnJ>Q!c=;%5dcrdaZCxz1v>L!hPh$7;ekSHPnlf~sAl#a<^ead2?^}i?IT$F zWFH+Ae^Fv^arqL79g?&6?SSAXwt{7=JV^5y$0G^DeO z$VefIgGtiM>gUK%fel)WUNl^(&efNIW2%C|v*uM^ zn@Ri4fOl^^FX)E2Ye6Y#RAx-L=_@t3Tm5sB$-v&`Aq=9X)MmHlBE>SbyP2-smR4pS z=+Nyl+h|L`!`7_h1(pjv%1T;`t_pK;$U(Nqk5f_mf7XLho>CPiQDL;YG~2JQF4Cx1!@HOc6gJ(0Fpow><~bLA0hGJ-k8P$1A)`%N_9KY8 z&V2YxYsQ4kI#B~>*T zo*YY1oW!NHT1O)Kenbqw_oyIhnhWc85^OUR-kwV#0cU$9Tf zQccvm7LuW}_y|U@=et~5l=SjFK*-~)9bGMIAV>IuQAiEu=6YQZs{VMk;tP5wrv{5w zz`qoY+_Kovy4o#`W?Yy)k_>k9<)ku|CDNnl`F?T{yym_!B@d6!E~;YCY{B79(r?-4 z6DF{sGF=a6YcsGH-C31^dYm*bg#oxh>(nr-@99vZg6BT~(v|Mp9St02*F_6nI>9xs!xjz|& z{rgV}i1R_AjP@l^6cXauMc>6{@ z<6LNs&`UWm*v4JBbfWh|Jo$1W!|XR4qF5-hdAPY6v!8J*b`f57mf2ObAP0vNqD!vi z)m9KgbB>)Mgp)bhq0fY-ZYU z*=HxP?`5LO3vlH_pMX>#9y6HHs`EJTt&`re0ScYvcU>-pDVSWf-G0OQO>XgC%T3)^ zFHlAOJW&XozxbkI?flvg37#J|AivyvH(P4)?17&9cfZo=>4r}PT|}U-9{Z}CSikzj zn+r~r+aN;7&k4Dk_I;kRdBOJ(&jazPdvPTL49Qs%P7hv?$7XqlJ zNH|5ia9?TDE=DU=f}HOXEM2@FnX)Qd3qp{M2Pc~$$U87CQ8y}|9zjO8`qv91T@4li zH-u4~F1y}SDjjd*X#ww{B%`THO#Oy>7U;3WmQ@EG{yl?|z4{ zu$K*6Wsxz6#n#0@ z^iYHJCqQTrig4tjhr?GVTM)R5J+n+dF%fAZWs#vjQ&5LHo%M(PnO?yrcIka*=l8;O z{wtUwu188vGefPCJ@7G_;PjZjjmR%Tz(@(u<#nS~)J)ZIRFu6*qZ_KrMMoBHq3rGJpKBJ27iqFLi64S>e~Q~2I&S|a)7>gP>fQ^TOf^9!0k++C!V*%cX7=0fgtiKV z8&H4RLI=bLhVh-#C94!b?hi0JjD50Q@41Npu`&*ryK`Up2M0^XXWfq;MSY#oEJR-f zms`Iwk(aw4gMGz=bJ=)AH(PH#SwKVs_MEtirAD!*uV6j&o|0uJ&Hlh_N`Y9+hB0N; zJ@!cMpg2@sDi?A#&tGSrS)Kp$K$cH|5&{>j`RNvKXy{j})I4|+6DXlHJu)Ir9y9@0 zUwOn~O}$U+wm0O_150FLoaknB{1CEp?l@VU( zYgXZ8%{Nr^X|F`xi`h}8C*E682JS|nktAF*mrU$gvwl@LLuiaVoHsh`p54Y)NLsDEy$i`^p?aGxyNaX^-So)O9@DLK^g2pWBp zqOZ?!=x!qGKm~diDdkWtqL?xV~^ta%j^L?bL?|GU2;vYs2#X z;oKp(>L&nocrG90L>p<&J03>|MPvkZ2s%YyL6*5Jdh|C#lCtjjx^TC;x>*((;#!cD zz)wBmrTW*9TOgchnoK#@dbEC{j|e@xZ4u)T=Hd+YegDcz{kJ~$t!p}+K{T@ClG`#9 zZ0_nof&xf>pbAHctzVZ43xV-QhQBgA{O8usyGI`*AGIN=vEX(|NpHyv53ZHdT!Tu&B1R~NEq=TSz_^N<{Kq!iW0TdAFC?b)rAV^I@7o-UW2_*rgcj-+cDo8I< z1VdALZ_>-V`2LG`-VZq^=Vb59?B{-VX0ki8E~s0y-RzSI080n>H~Ma*oP1NslVH4@ z1b0bIDQ|A>yTU~d@Zh)<0d%6QQ}2@JDCXvum9J(~&e1(iQ$T6oiPoKxDD$Dqre67+ zHZ46v&wBUv2^r8xQT6m|@tQVmJolM`NHWi90|k!b{GaX&b7j+P&`Wk^;2fEX9&M}k_?|=;LC7qI;X|6daB;fTw;KHY&C0UJ z3%(D@0{TtksH#xhJz4};h-46u@Y|(9j6_e*TJp+7M^;o07JnJ7&k43?swJG&G(>_> zo3d?HvI-^!AbIT{Xy_zF{S8EOF58D*B7Mg5fv_tB#UZ$ty$3&0CZb1#j9`w^xYC#q z$xW{By&&^b{??awv|_X-D&Q<{BSF76Ko#e~30#3ap61?;C*xfmSRD}WAB^;yR_zrH zjH7<7)Ck7jnJ=cUc<$3xOZbnts&Igt&*F0E)slWQ3j*uioD-xvX2kEu(gxf_3Mp}^ zGDFjyp5}9hKXTFwwUwmQArOsR&^lT~=4pWx`DC!{jw3k1jqS&7=wAxe86qf9d54o? zahRukObyGv`oCQ2_pHZhQf{fYsD$W2>1gq;I?x5<8zqHVyh8haP$4UqB^$Ue((ha) z?Hew#T^8-nqCF>>Slth?;UbbW+xcLP&QBfEg`XTxgBzEz>F|FM4HXN-yyp@NTYSIu z9DbQOo~}~32^O5zmT5I|i1s%#=5cn;6^P1W;{stWJrg3?gjt{$7O<6nXh z)>PAw;e=hm@zyO)XEXvIVF=6u5Lf{1aP1XGlaYWZOxedknvSK?<~uc18iB3+@ycTsDfWM2`qxt*Uu57_?_yvq^GuOYJMAYSEMJJxLY+2z z;!4($jk$;V;bg@TUobyy>ustbPACfks&ULQ=MKl{jV4qrz(b>B4wn808nT94@{O`M zLuBT|XQ(akz%n3`-jOrhI=ghl$5mk5yWDDioKnX4s{lwSVt#}2ZSv(7sQl@E-0&J~ zy0UuE@cuiAk>zc`Nf0z`jNBO3y+w2DgMjUms898I7I#mVxeJ$g8A%X@1ZT!k53x&Y zB5EpuG;$WxE8AwxfB-g0NQF&H-lHl6pzP(JBvud&YlrPtuR|}ESg@4+ZsZI3GD&L( z`ovqGWreAkgSP>^D_0%@3X<0I9M3EdGsfS-(UmNCIhvt@1H0h_NF@doPJMdVEd`5L zLA#nYqlU2R|GIRun`*d+&sHHoQ8huh#xoV^P^l$)N3;HrCf6-OU^4?`j1T8%=0?|@ zk&~@s#`(Q9lEyV@*|_t{=NW}1>5Zu22j3EUD9joY0&&2X(?aEvzpiSZ z$x}2d&1>V~nO(01i=!yzJ9aC~!Z!39Lh)yz`GT1@UXhiC4Yx=PEY&BeTS;Na6P>gq zReGt|_E20qD}@DWNUpyetQ1nitj`{=r~x`cGUQwRj-Azo4JKG?Q7g$f=Ld|$Ic&Z~ zqGRzok@4RRy0DMOMYFv@(`DmZm+rK-pMQD!=_yF3+6(o5*>0Kt z`i8=T85!f%TVDV6yn_H3#L_Z)Wf8HBrr?oIU40F3slAR1h6xlucws9IC)!qnp>`V_NS#sZdwh?xPCxl&S1rQobzF!TWk?5jCS+#ZhqC zZCcFjjUT5*rVnaWCCIAOps4Q$sc%u5qo7kE;I?kL8Er|tplKNrKA?pY6C(6^l0vz< zhr4mR42)P4Ue#(w*`w2 z%V7DA%Z2Sx)YL{Alukx$covWGuPCA9Q;=LuJw4Vy5e7zfaKB1>I$@WSRkrL76RLz+ z|AF-CRJrf6>fLgXZBmdtGoM`l*M`@F-S0^#ipugs+3}s7F!@bee#1#H(n>LZUkvlx zFjUdFj7Cce!eAKzTE+#WW5fj^D=?|hLD|SMyhA=O7q(-Qb)V}wbmnCjjTM`ZEO7f- z)5{JGx(vJegibU!V}}M;xF9R@=H6r=?$_@11`nTyjt~|ju&kwrmBsLjk!lExIf`WgTOGtlU{zq(XZ%nocS~cZKt|9)GWM4gUM7FEH4mFE4l>(RXpc)N z9Bf*V$`DjZlJwHIcDA_6^@Uf%qPh(`_8A|ZYZ|T^Ll2}f9kqnu!VK3Iho#=`7i&&} zz2ulzoZ>bDhwR5#Xu-TfO<6|@-UNm{L)of zW;zq3zcY?}8Qe%Z)bmt+@Ct106tM>9tj^Wg^E*;}2o9ih7TzV5L?c91M46exXZ)JhW+Y2ps~9+5 zvE~H#ssAS==};=t7Mm~nk*%#fX2AK)S-D|L*lnMlvKy@I^fguWm~_Py+b*;DIp`x{iea3`Ev5EFyW7HtP1QQu z1Zi$qH!lnzN1GFqBd1Y<1p0L)xU$Kp;nZebS0+k_sF?f%V~--_hfh;9>#9D-PF3Y9 z{KbCd?H)N-aR9H01TWQ#Et!mwR60A(+anKiEOdG5W@DCXy0HC&eRjwzCG|Ob^clq7 z2y;wWv&ikJTAvV?CEjM~mwRy>R-_gdcYfPU? zC2%MhUYj+>ItFH;Ih9aGu;t9|IdAK$KSz_D4>tADAy!10%J5_N-xHii*~-N92^kaaH`#L3THcr|T)22QdA@R^*J{k$NdDI$RQUz~>~&-8^A7|2 zEH11zc*KmgIK1$BpFSa@Z$LKcUW`9K=*!kVlpWKDgD80@53*~eRMLzy6=YQMtiIjh5}sYK|p5XnpJuh zScT85jBZCXCn^T|PaP-8!Nou2=Bz!eKcq@oT<@KVi~_D`o|yHO62_DDZR**`JHgct z1s%zk@`jr1j&hN(7wVMp?p#KuOG`|f;8iZ&S(#cFl=dNKIHr95Vy!-IM!YzKv;t3d&RMDhSrcw3>tJe>|V6nztMa)l~fPfPW7U%n_Efe$~{%y&u zs62IA9oLXaAr%$PTB-O~nu*Y0aG;STNf$dEw!6xlB~Y_*2dkwt5fOkPR4oG zkD&3y*ISX!^wie%duz`4DHn!e_8sfBG(Jgx_SHCuW-zF@S}(;Mb8HWg4rl|wqll>u z%V(}G@5NU6$M*3R8%jOwOajax;4_YG1F;k5r7Zgs>!Dn{{TtT{@*U$Xe~7}$oRQ|E zt+PIhr-4lv1o(+q?o|18$RtG?m9bipQMNQ0&OW#JX6KRW;YMHNX@Ed!GXS z`S_Up^6=u9Oq5C(bB^IOZi>=Si29Rf1r z@avm0*GDM2)w`U=eZxjhWpBF4 z;|oOjpLL_#Rxljp1k7^TXLo2?+$Wn)EB#F!X@6VaaAb-Foxw3!&c1H>O+FA1IHgTRu)wvdf%M9lyl~= zJvmo{6NH^+JaS1+wPLHvdjKv9WCDWHpJNjF!5f=5o>EXJywm{&51Do**qm7y+@TQQ zs=#Q?%i8(H8Urpcug(y`jXXUfGBX#7t@OW6)8-j%n$0tH-gzEkrO>yw(El<*PAg8QOT%S`=n&H)_}iY1yL4U};g zzX0?0Q$6F|oNQar$JjuT95|+tOgdL8DRI zGtv@r-8(nc)V6n-8tHk*k@W9P%Z=ml)Uv{ZY9Fe5RJzu|+;-qk{yG?~`WH3HDh07R}cCj7KMWRGb z=6|@{U;ELf1-G(p&j+W6MGkC494Nq5lr8^*J+3H){k++J zt?W05Yc+G2{ND9ht{b0pbuwhyt&bM7?`z!I9ZdD8nR29XN0cZeFLqH zkH&H88tHEMs8k+FVfFg|tZ(yhbDc6|!VQ3;#H$De4K>?d-{Ou2s5Ute6WwRtpA=!5 z{p?rK03ZZXUEjvnTHj@CKiyGbV7FN*#gf0)6v!(oj6LixofmJp zTR|y&P;mc8@-}v3K8dL8e{cQ6S4@qgcSH6Z?$bUIK;vy*siB1tN~=x)$j+T7CWNCc zu+V2~@^!M|+Vu6*{7gae!L#m6%EljqSS$j#0a}HxswilvJ-%U~c*W=%*{1-pNk-!n z82KY=d;yV@->WMMRO?=%PuYYzs8dF5$_LpwJ`(xw|GVOSkyTAv>D(H@ zXE*dIvQGBD0!~i=rU*_*pbRqDUs*`)+b#Ls5t#0Xth?@&?)ERFW4dq)^GU|e^YfEs zA238Hg8ELH_t7E$tS~6F;+vyc19pN~$bU^b=P;8p6WuPlEPKf0&I$og!sfpQRxDmx zdPa3<+k=5-x-X}&kKx^GP~D{p+c}+6#+$?K=5q?4lb~6MABridvp1`8Js@L*Y;Sun zP~nGr)XQl^=n5Z+4c7@$cQ$OlbY?SYgChe(Fz11}jBbZ}ts&(WICuhs z?ER1Pe{8vr4Rw#ll%L&y{|ayUmX7m;EfP(vw-49cDmST zE>!^DzqdB?FCb{k>)!TTOO7r)2mU-ro$0T=ga8AGHMmXzYXOiy04?ZS{{QR$MI839 Z=hCja+Bqzr0^cxj`-ZM&p}KXz{{S5|?wp=Mo7C9%$cM0TB%s0cp52k=v4nIL^(t_1?YLne*{5 zwqw%CzRR5)wb~MsA|M|^#Zr?ddM1+sAbl3*M)*gVc4TP;d0AU*lTYCV)HW0S< z0EBHIZ0!LE+d$Z|3c&myE-S18c>T(Gip{Fckh?Bx0J_HI((+Y)I`>ODUe{LGU6(Zg z#by;x49n|9&R%|lO1o|=^sdSp07p9V&gH^Wi12hod&<2zrbkkAjgIuMo@^rwbCNr``u6Y z)wPSZ9%WV5GT^m;oaZl#?;`?_4Nu{T=JM)1_$UDA(VE%ehk49R zNJgS~#>EwbQpPuca5(oMUzvGsE0&0Gqq@vuy+GHv{`e~t8)bercaA&tHUFOS<2y=o zV*fPHO`as?L~U61sGo+(QLqL)9v7Tg6j&NYjB8=iS?pT8_h=1bviS<{^$`= z5tLHQj!iLND4~H=JZ{ai^;yVgr;anXw7|9EA~#B_i1C{PsWg#j6y$Et4s3%W8%Zv- zrHk7Y1fkmW`;EbLmTI#DTGN-xTJvkYB<3j1t0zB4eplbjyom!1% zxrQe@U))1uMDKtQjW~2V9?iDPO1+Fyiid^{FxcB?)$6VmMf(zIzVpm0ym0sg8V9q{ z6uONj>nm$?yJiD|{>V&lF|^tq2lM;L^u&4b$SLxvUh6)s&I9hH#cGkW7vJLYo$H8z zF@D33_w|xYCpKn^{@h^mr`nn?Kk^i_V-vgTEf4^kS}3k?_U+$uW#tBK*F}sFO(n?= zW_z8W?hB0PhqzsBQd-yKWBoWPLbJL~ajCSU2^bXpiA*4#0^b;M zA`YHb%$LiQ);%(@UK-T~)ly>zgyW+J1Mw3$fd2kAvy&qXX0s59aI0LSFOi|LTER7b zhv;>Mqr+o?_z8Y%Oo7W9Bg4X}gX8qXVl36xi4dW&-oX{kfz$x%zelp7zyZV^e;V6u zx2UNCr>FOmN~h>gXKA%MxT1J@`ea~!0tYaV>SJ@UQPCXl_pTGf}9GUWK00IcKTU|<(4pmd(%%kHB zrR~r5{*wX+kc}lt#4?-j4?uCPfrsV~x8_)Flmqn>$^nTJqlb1}yB(KGtxLzi`J0yl z^%4qz&rcjfIX$o~59)P)2>k2v{D+F7yQxqBI9l`M#4LbcKm}TDgNLT=2{)^Sz`TTZ zM(E|kCrBo?S9TPxXk0X_&01hSLOmq)%_q;Gv;zV<7R5v3iN*`?s8Of@9?10Z#gor~ zf}TWtD+4moWMCdb-=qG*p&1JGb$(M?#1jv#6yw=}z@C3!oD=-o@h5n7`UIjJ4(5i* z?!qSMy%c%|Z0hOJadNR3Mogg34YVY7KkB|{0%2+oK-dPt)*gVc4TP;d0AU*lTYCV) fHW0Qx_5l6`&Oh&CZr~|K00000NkvXXu0mjf2mg6N literal 0 HcmV?d00001 diff --git a/icons/guh-logo-8x8.png b/icons/guh-logo-8x8.png new file mode 100644 index 0000000000000000000000000000000000000000..60daa23e1b158e27b327b3979938d0effb8cd6ae GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEX7WqAsj$Z!;#Vf2>S zOAux}KILpRkRe&(8c`CQpH@mmtT}V`<;yxP*I_$i(`ny z)Z{<^|NpONvuWTw_T$fM=`dCugJauvFPFGiQ+r-u)x#qPjvqXE;NYRQtR|uPB8SiN zzn5G#@7{rezekgOw0)LdmB>-uB3bt@E&amOpd(wF8XFrOXY@~Z{M&B9%q=YJ^ub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/server/server.pri b/server/server.pri index 9a0faf07..b2a6fd55 100644 --- a/server/server.pri +++ b/server/server.pri @@ -5,6 +5,7 @@ contains(DEFINES, WEBSOCKET){ HEADERS += $$top_srcdir/server/websocketserver.h } +RESOURCES += $$top_srcdir/icons.qrc SOURCES += $$top_srcdir/server/guhcore.cpp \ $$top_srcdir/server/tcpserver.cpp \ diff --git a/server/webserver.cpp b/server/webserver.cpp index cc93b681..2d0a62b5 100644 --- a/server/webserver.cpp +++ b/server/webserver.cpp @@ -195,6 +195,28 @@ QString WebServer::fileName(const QString &query) return m_webinterfaceDir.path() + fileName; } +HttpReply *WebServer::processIconRequest(const QString &fileName) +{ + if (!fileName.endsWith(".png")) + return RestResource::createErrorReply(HttpReply::NotFound); + + QByteArray imageData; + + QImage image(":" + fileName); + QBuffer buffer(&imageData); + buffer.open(QIODevice::WriteOnly); + image.save(&buffer, "png"); + + if (!imageData.isEmpty()) { + HttpReply *reply = RestResource::createSuccessReply(); + reply->setHeader(HttpReply::ContentTypeHeader, "image/png"); + reply->setPayload(imageData); + return reply; + } + + return RestResource::createErrorReply(HttpReply::NotFound); +} + void WebServer::incomingConnection(qintptr socketDescriptor) { if (!m_enabled) @@ -332,6 +354,15 @@ void WebServer::readClient() return; } + // check icon call + if (request.url().path().startsWith("/icons/") && request.method() == HttpRequest::Get) { + HttpReply *reply = processIconRequest(request.url().path()); + reply->setClientId(clientId); + sendHttpReply(reply); + reply->deleteLater(); + return; + } + // request for a file... if (request.method() == HttpRequest::Get) { // check if the webinterface dir does exist, otherwise a filerequest is not relevant diff --git a/server/webserver.h b/server/webserver.h index c84f3cad..56ee4948 100644 --- a/server/webserver.h +++ b/server/webserver.h @@ -27,6 +27,8 @@ #include #include #include +#include +#include #include #include #include @@ -89,6 +91,8 @@ private: bool verifyFile(QSslSocket *socket, const QString &fileName); QString fileName(const QString &query); + HttpReply *processIconRequest(const QString &fileName); + protected: void incomingConnection(qintptr socketDescriptor) override;