From bbb1947ffa7c36c5a390f7e2f818ba1df73fdf0c Mon Sep 17 00:00:00 2001 From: Alois Zoitl Date: Sat, 28 Oct 2023 00:28:34 +0200 Subject: [PATCH] Changed shared cursors from bmps and masks to single pngs Thx to Phillipus for providing the cursor images. --- .../src/org/eclipse/gef/SharedCursors.java | 38 ++++++++++++------ .../eclipse/gef/internal/icons/Tree_Add.gif | Bin 125 -> 0 bytes .../gef/internal/icons/Tree_Add_Mask.gif | Bin 129 -> 0 bytes .../eclipse/gef/internal/icons/Tree_Move.gif | Bin 114 -> 0 bytes .../gef/internal/icons/Tree_Move_Mask.gif | Bin 122 -> 0 bytes .../gef/internal/icons/plug-cursor.png | Bin 0 -> 374 bytes .../gef/internal/icons/plug-cursor@2x.png | Bin 0 -> 494 bytes .../org/eclipse/gef/internal/icons/plug.bmp | Bin 190 -> 0 bytes .../eclipse/gef/internal/icons/plugmask.gif | Bin 119 -> 0 bytes .../gef/internal/icons/plugmasknot.gif | Bin 145 -> 0 bytes .../gef/internal/icons/plugnot-cursor.png | Bin 0 -> 462 bytes .../gef/internal/icons/plugnot-cursor@2x.png | Bin 0 -> 597 bytes .../eclipse/gef/internal/icons/plugnot.bmp | Bin 190 -> 0 bytes .../gef/internal/icons/tree_add-cursor.png | Bin 0 -> 406 bytes .../gef/internal/icons/tree_add-cursor@2x.png | Bin 0 -> 530 bytes .../gef/internal/icons/tree_move-cursor.png | Bin 0 -> 4352 bytes .../internal/icons/tree_move-cursor@2x.png | Bin 0 -> 4427 bytes 17 files changed, 25 insertions(+), 13 deletions(-) delete mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/Tree_Add.gif delete mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/Tree_Add_Mask.gif delete mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/Tree_Move.gif delete mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/Tree_Move_Mask.gif create mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/plug-cursor.png create mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/plug-cursor@2x.png delete mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/plug.bmp delete mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/plugmask.gif delete mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/plugmasknot.gif create mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/plugnot-cursor.png create mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/plugnot-cursor@2x.png delete mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/plugnot.bmp create mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/tree_add-cursor.png create mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/tree_add-cursor@2x.png create mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/tree_move-cursor.png create mode 100644 org.eclipse.gef/src/org/eclipse/gef/internal/icons/tree_move-cursor@2x.png diff --git a/org.eclipse.gef/src/org/eclipse/gef/SharedCursors.java b/org.eclipse.gef/src/org/eclipse/gef/SharedCursors.java index 78d96a59d..68a7d467b 100644 --- a/org.eclipse.gef/src/org/eclipse/gef/SharedCursors.java +++ b/org.eclipse.gef/src/org/eclipse/gef/SharedCursors.java @@ -1,7 +1,7 @@ /******************************************************************************* * Copyright (c) 2000, 2010 IBM Corporation and others. * - * This program and the accompanying materials are made available under the + * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. * @@ -22,7 +22,7 @@ /** * A shared collection of Cursors. - * + * * @since 2.0 */ public class SharedCursors extends Cursors { @@ -44,21 +44,33 @@ public class SharedCursors extends Cursors { */ public static final Cursor CURSOR_TREE_MOVE; + private static int deviceZoom = -1; + static { - CURSOR_PLUG = createCursor("icons/plugmask.gif", //$NON-NLS-1$ - "icons/plug.bmp"); //$NON-NLS-1$ - CURSOR_PLUG_NOT = createCursor("icons/plugmasknot.gif", //$NON-NLS-1$ - "icons/plugnot.bmp"); //$NON-NLS-1$ - CURSOR_TREE_ADD = createCursor("icons/Tree_Add_Mask.gif", //$NON-NLS-1$ - "icons/Tree_Add.gif"); //$NON-NLS-1$ - CURSOR_TREE_MOVE = createCursor("icons/Tree_Move_Mask.gif", //$NON-NLS-1$ - "icons/Tree_Move.gif"); //$NON-NLS-1$ + CURSOR_PLUG = createCursor("icons/plug-cursor.png"); //$NON-NLS-1$ + CURSOR_PLUG_NOT = createCursor("icons/plugnot-cursor.png"); //$NON-NLS-1$ + CURSOR_TREE_ADD = createCursor("icons/tree_add-cursor.png"); //$NON-NLS-1$ + CURSOR_TREE_MOVE = createCursor("icons/tree_move-cursor.png"); //$NON-NLS-1$ } - private static Cursor createCursor(String sourceName, String maskName) { + private static Cursor createCursor(String sourceName) { ImageDescriptor src = ImageDescriptor.createFromFile(Internal.class, sourceName); - ImageDescriptor mask = ImageDescriptor.createFromFile(Internal.class, maskName); - return new Cursor(null, src.getImageData(), mask.getImageData(), 0, 0); + return new Cursor(null, src.getImageData(getDeviceZoom()), 0, 0); + } + + private static int getDeviceZoom() { + if (deviceZoom == -1) { + deviceZoom = 100; // default value + String deviceZoomProperty = System.getProperty("org.eclipse.swt.internal.deviceZoom"); //$NON-NLS-1$ + if (deviceZoomProperty != null) { + try { + deviceZoom = Integer.parseInt(deviceZoomProperty); + } catch (NumberFormatException ex) { + // if the property can not be parsed we keep the default 100% zoom level + } + } + } + return deviceZoom; } } diff --git a/org.eclipse.gef/src/org/eclipse/gef/internal/icons/Tree_Add.gif b/org.eclipse.gef/src/org/eclipse/gef/internal/icons/Tree_Add.gif deleted file mode 100644 index 75d6cc23b6110514ffb9c9edfe5f74e9e346e836..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmZ?wbhEHbRA5kGXkY+=|NsB%fM}2i15->(|H|11`2!0!uJT-aEYkg6C67cGZ)RW0 z%yq$4MIV|N-`7Z)*Oge$XTB71VEzX8oSQi!?w>ZFv6#N$iEz0r5dH3``L$O)F3Lmd%;N=+-rP@65b= zmhuvM%8_>Ir{=J&-k~3JGGp7NTPxmAyt?{lo}z$(M6-hLsRg;ys)W=pTnh=3{bZvd et+u+TcK4=@CCPT?iE&Z0W6O>|Omb&rum%9Je=p+z diff --git a/org.eclipse.gef/src/org/eclipse/gef/internal/icons/Tree_Move.gif b/org.eclipse.gef/src/org/eclipse/gef/internal/icons/Tree_Move.gif deleted file mode 100644 index 7b0e9e7e1eff1f037cdabd9ef7728b765b9caf83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmZ?wbhEHbRA5kGXkY+=|NsB%fM}2i15;p2|H|11`2!0!uJT-aEYkg6C67cGZ)RW0 z%yq$4MIV|N-`7Z)*Oge$XTB71VEzX8oSQi!?w>ZFv6#N$iEz0r5dH3`~J6O)F3Lmd%;N=+-rP@65b= zmhuvM%8_>Ir{=J&-k~3JGGp7NTPxmAyt?{lo}z$(M6-hLsRg;ys)W=pTnh~I!2|eQn)W=@p>Fdh=l!ISPTK@-A5Iaza zv%n*=n1O-o0|+xZtudJa6l6(v^mSxl*x1kgCy^D%KkMn@7*cWT?X=r`Eebp?-jDzP z|CD1;(!8W$-QGPp!i%?EwB+%f+QBhJ;?B8D0dRFAA(tRaUGB z>u7oqYRL3xhNzdO__SF?edmGq z@edz6%;5HyDUkHo9s2P2^E-@Z9H!YWP+MR7QR0L2-mbWa^}nEy{NwmYAur`)7C?_N Nc)I$ztaD0e0sz*Ehe-ec literal 0 HcmV?d00001 diff --git a/org.eclipse.gef/src/org/eclipse/gef/internal/icons/plug-cursor@2x.png b/org.eclipse.gef/src/org/eclipse/gef/internal/icons/plug-cursor@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7450e0a928ad2e49a8ddf1e656f3708e7d5915b2 GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Iwh_VCC){ui6xo&c?uz!xv30p zMVShQrV4JUNeV^=hL#G3=2k`~RtBaDx&}bd5_-lDsE@tG)7O>#DTe^N1V{32D@C9X zXMsm#F#`kF2M}g-T4OQ;D9DoT=c6|EAbuzn*J#F#}^WT|e%l~omEI8XRXTQ>t zDX+}FA7IGh(cpFTX<)o!xFF`i9To`(akeSkb7wIyXIy9ydT<6P;KS^-Kv+0|fs=bIK9O@Atn6A*S^3C=2uc1 zO4OFNm^Vx=oxW9J52HlGP1zZ}Dff1*VtvS4k;E{~s!-@2!`YgrX*W}H8yLGH-rATa zvhWBT*zopr0C#z`5&!@I literal 0 HcmV?d00001 diff --git a/org.eclipse.gef/src/org/eclipse/gef/internal/icons/plug.bmp b/org.eclipse.gef/src/org/eclipse/gef/internal/icons/plug.bmp deleted file mode 100644 index 7b0e6a0fbb1d1fa85b6f85873edbfe61597274ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?r-Nyg{c0fu4h!voik%1A&Vqj;t58fVc*T>w&lq%B}#?1wfnt#123V0|30K4rl-X diff --git a/org.eclipse.gef/src/org/eclipse/gef/internal/icons/plugmask.gif b/org.eclipse.gef/src/org/eclipse/gef/internal/icons/plugmask.gif deleted file mode 100644 index 4df91a5d180e1829f997ff3b7f61e03d8112b7a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmZ?wbhEHbRA5kGXkcUjg8%>jEB<5wG8q|kKzxu41CyUi-^$Y**B06EpPRkvXn4L{ zrTmT#<(D%wlI>Ps+NH00t{`{$mO0T;=T0r5dH3``j=eJf9MTw7$r?-#!Il=+kW z4VT>Wl$@7!c7;iNpI69Jy)w=IitlNeh~$|O2ZKB!?!4?fs+xLikL6aX4Oar?s8-*;g{rXS2&~&3-QH+rC~QVsFv&?cx?55jVmZ7_0$sk~xt8 diff --git a/org.eclipse.gef/src/org/eclipse/gef/internal/icons/plugnot-cursor.png b/org.eclipse.gef/src/org/eclipse/gef/internal/icons/plugnot-cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..c96ff7628004dae58c83ffe4c48809c9a8f59c36 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzof6lG66d1S#FEVXJcW?V+*Ag) zqD%!tQw6uwBn2Y_LrVoib1NegD+5ynT>~I!2|eQn)W=@p>Fdh=l!ISP(NeSCQXeS9 zS>O>_%)r3)0fZTy)|kuy3bLd-`Z_W&Z0zU$lgP@zz^Ll!;uunK>+ST1e60!`trx%k zTc2}XjF*#f>Z|j%(Z!`-KX@*QV`yNK*P8z}U0@~Kf6gGU3j4K(JJ>CHeH%7^7GaU{ z*x0fC#chT&4p$ByQ_&aTe8gtJbg-E_pW(-Q8Kv@`{$sOQv-%z#tUfhsA)90R`Sfe2 zeQJ+gzRMbMqUC2)48zqHzbvyIUnR{L<|-Z4wy9u#pef;Nd~p503(IyaIN)LXvN(3n zi46J7rFT45O>g~YGGS`RmG7T)&#%^gnAT?!;v4>*DYs~y&K))bhukwBY+bB|K|km5 zBwUzT*w5V3xWZJyF6VWU;haNxLV?)k*X0_Q!lAJ&I&VNT|{!TUAPGX@xd44$rjF6*2UngF{~ Bt+xOG literal 0 HcmV?d00001 diff --git a/org.eclipse.gef/src/org/eclipse/gef/internal/icons/plugnot-cursor@2x.png b/org.eclipse.gef/src/org/eclipse/gef/internal/icons/plugnot-cursor@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2bbfc7249b8e35f2add3bdb3b2193aa986fc10 GIT binary patch literal 597 zcmV-b0;>IqP)WdKHUX&^B*AVy_kATls9IUq4NIx;jmFf|}8FfcGMgjLK=00007bV*G` z2jvJ52N*FtzOpF*000SaNLh0L01EH`01EH{Laa2H00004XF*Lt006O%3;baP00053 zNklb2W}-OA}d z`gylgD+L15kAPCXAmp6uwrwipQ11s+4vz=~q=ta2VKE79#HE3~@mu9D2uKV8SBJ?Y zP~?r5ay=gTEgBF6qz(aBM`sdxkr&B2sUsnqYV6Cha?p0Z*jt?5TAL_7@&Rp)@C_5)htxcj^{C4?tHGksfg zfnq%J3u}TB4L=QfiL2$YFR(}>7v7ScBKET&_^4TJ(!V};*`_g}&9F+?|z=Sc6 jif~Wi34kC7f+Fh!f_>D0fWp-y00000NkvXXu0mjf`#{?fH7mpmKB##=VK#zJRj}vu3ehs6N UKm|~~0H`hjsNR7=9%c*!04BZ_UjP6A diff --git a/org.eclipse.gef/src/org/eclipse/gef/internal/icons/tree_add-cursor.png b/org.eclipse.gef/src/org/eclipse/gef/internal/icons/tree_add-cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..e6af41d19f07b932589ab17af56a044c3009e5b0 GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzof6lG66d1S#FEVXJcW?V+*Ag) zqD%!tQw6uwBn2Y_LrVoib1NegD+5ynT>~I!2|eQn)W=@p>Fdh=l!ISXQ(GXi#tbOL zS>O>_%)r3)0fZTy)|kuy3bLd-`Z_W&Z0zU$lgJ9>zx8x+45_$vbXqsxVFeD?sc-(* z&pdifQhtFCtIw{|O%?s(OL!Go&P+eu@TKv`i`@aKS&qnZY!ZlQHH1 z7gL%eH%G)@N9iQa1-u_;vL^R1d(R3hZ4l_aTUu(u(6Zx~21BIHzU}%QH#JurxhwPH z=-C*C^>e4s)q6BUHo!Z$p2tu-DRAEL_sf>W?-5dbE_ouE?c$>CG8sj)#6+L`lE0XG z*5rJX$~?1euR4S#FNrO!P~Vbw{P5<4#DTe^Nm>9dc))}A> zXMsm#F#`kF2M}g-T4OQ;D9DoT=y4F6 z7VK}{rK~(7e895d(%kT=+-HP8oMVi(ycYG0b46jitDb@XfxEXKq_$QB8eaQ0--`=q zg5mQdl`G%mRX?-b(XHRnK0D%RJ+l(Kj#A-QX{)Qx4k#wSvo!K|_%b_Tb8C|?Ai{bC1N+K&T%Le1ezkgbvOS!&F7V&jSQLruS!;Z4zl^Px7-hCUkC53Qt8?+ zYfC?~BrvA=Cv5A=@7#Lr1=oiOl}sBLHme&%AAZ#k`aEx5gLv}!1#=@M{(@qk!PC{x JWt~$(69Bss!>RxP literal 0 HcmV?d00001 diff --git a/org.eclipse.gef/src/org/eclipse/gef/internal/icons/tree_move-cursor.png b/org.eclipse.gef/src/org/eclipse/gef/internal/icons/tree_move-cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b3a8f205c2f6cce62cfa48333281f311019f23 GIT binary patch literal 4352 zcmeHKYj6|S6<*s234uF=nv}GLZbcnz$V$7?%Cfc+#+HnwV1Z+~#>NzU_hoM^X@#`1 zWDy4^ws~b@(uT<-1PDn;2#=VF+av^gLa56)j{>1-2Wt00O?ZssP^Lhz1A*RMzbBdL zc&7Ph%}9IqobP`3obQ}_M|Vr%^894&kF^MbB)eVCBKSn*uVyOz4aeg*;G-j6Tq+fT zC>jijyx`+dsW!-=Tuk5*B-Z6GEdN0VI^*`~jG8H%y_(LKv1e-<=59#%(}6enX_o<; z`$k>17>@)~ev?+cFhkXllCc^)gFm9~L>tuS(hiDsllg{#Ll{3+g%+?QctY)=3%qdi#Ahi)vmr*bj@#T^WK>GXj94D0{u5nKA7x&>Zw=H zuL@pc-s(NybLe2hK~(d2{gI@<-4ihJbH?*U-9#1qT|pkapq}X zN%E=NfB0F+_Fwjdd!{|Bcis6ga^j-plxmY|_XEby_Sg2ze5>?I#cK^^Xa2l--Z?e{ijBUHn?K)|@%i-+Za+}xy?;)-DzQ2s zzFD_(F(ULXtW8QyO}wD`c+IU?RIC*5?G|p{N_y$B(2SP(GPoP^R`r4X>|{@r#=hYGA+x6m`;!sjg>TxVDCe#>p zi?ygN#PU>;bLkKTe6#DSBq>N44AE#*A2sR4P^E#eTCE1$XfPTvh`_?N0SUygKzP1P zG05TM!c0gAN`e?bWllhg5y`I8K|eYipFimFjL-+dLn=T$3^5Qi5PIC;_Z!B}2upc2 zkYp&J@0<}XhP%{I#D&F3h~e^TxPUZ&EJeQCQ#isPr&KBUgGy3Rym5=M%m^+R3HcNZ z%NRHx=ZBRDi%^%Er8GBEi6W`ax?@< zVl+W!VkQF5G!uXUENxP#JjfsK-Ywg+3thV#sgT6$pVyY}8RK_&KixWYLIB zYZgfwvq&?UiCakPD5!)Bg<-?VoCK~nk&1_9sHKn*z{U~$ppr8L1C@$HE(-;dfx-g0 zPa(5nhq+LW5CaG*JXj87;+dK;jfhF2aoz zJ_awc0$=;T(DLR%ZG$Cu31PT?tzsJ7QC@D{;M?G7@qVA5p;~;OOQ7iFA`{YgQm#q4CZxcGz?0oIDc6J)m=Jif zyZ&!-X-BV9Tmb$HiprOz_Dk2`MQbX(EZ?bIxsU-z+XgtA7Ic+`5kw2U+G`29hsful zQ7ySWdFspBpUh6jG(}zif~Es*XHIcx$Cul`)NaHzO{cBxw>Et8)vIgfd~!2q|CAqY zT$X?N1sOFHORn@SAsbs#w>I|A zO>cfR9p-eaD( zU?5ul*|GNf)?G;YuyaO@I&*KL*l|kx*x^J=olB)(U-05rk#Zz;-d}^h#j|$FdAjqK KJ6m!qp8PLEu^ngt literal 0 HcmV?d00001 diff --git a/org.eclipse.gef/src/org/eclipse/gef/internal/icons/tree_move-cursor@2x.png b/org.eclipse.gef/src/org/eclipse/gef/internal/icons/tree_move-cursor@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f6a848206325f914620e3a1292652da36f699218 GIT binary patch literal 4427 zcmeHKYj6|S6_#X#WD$ED>QK^0moaR~u;Xo#ty?p^sk%}mEL z%|B~qwRg|?_PghN_uMmk8}e3WC&|7i69@!JPKT`k+^zg2oeBOAG8H$#?Q~U930Hte zpg@qN87~EKu>b{8QHB->qCLL6jO4SBwCho0^%hOhKTPk3cRo9nUX#yU(f_a^4WX?E zs+X}<;Xvw77M3qji0e`nYv9XBzT`YqCpo+Dk8Btdzd!r_hdH_@gZsaqTNit+>CL7c ze&wOa&!dvR)bB84?%NJu`}9EP^HJHyN%x)>JM53XnpHk4(r5le;cq!Q{{yo3#)*>o zh`~04uzn`!lWgq~6U#r#@0fe})cK!!7Yse-YBx*aQnE2t|C~S|+{$ES`+<}V+lpV#Q9j$UD9PE>wEyPnKtFNx z-pyNw-l=;Bl5Vc;JZ4lJb2JRCkil-V@xl4y8(WS?YA-L=esr%U2h%k8B(msQT{R(i@-ud)~7Rm)y0vuQaRA9GcCh{MlQabZPMH zg5uWKZiQ|o?o>LSUI?GNYq%t?7q`8rx$<`GR?5+mzV*MVEB*MB?Qb=lIr!_s6K_ zArkySyC|vSwq&U8ub-}d^0w2Um@7H9&O4YU`saPoN5_0M^Lr~F&FEj2u&Sze9V7V7 zzF%JLT|FS3du^ujaPRI8$(jd(Gr2$VUTnVemg3H%?!gzU3+K%35{t_H?7P)_(gn=D zC9#Bg^F+7B7uS9rjj$eesEzsR>x6xqf}N{Q*S3SIi!z|PN?bV@!TOXq$+{_J)E59{ zClHvIMFTidPH~W%@-Tjj{NeGFa)==<@>Mz);tFI@WsIXLNEKGCEF!AP2@@$_mM$|# zF+kv>I2?-ly#5dtwaDYV7#Q<{(L9 z1-9iQ6yV7sFXOlXrcy;B5oJWHWP=`++GH}R5RFQsfdK*z#rzx|h5ey4o?@88MumtV z6W|!u5AmG1n+ zgo?l>RTWSnHXI})8A*)c0^y)Hjv)yZ<)wUp zGz8*PPr`EyJucRy*mzGoor!^f>Bjgcp+|F%g8|Cr!fY%N<|lR9EOI_xjARLh#D<56 z2B!#G2h&Cq38NYv4V!d20yf}UqmeXe)f7ojpmO>{9PTG5o(hmF8Nfpu)EYJFR>NAo zmVi-$rePdM-LOuF8cChOt)@}+1d7}s1F91DPK=7DA_0|NOBoF)io=M;pn*}X4uy@h z9)aC@+(e)TwZTMEaVmZtu#7yXMXpgIz=(swVSKoUQU&~;xPxC73?u`D#rZk~ z%yB!&1d9^Ys9qLrHBSY zCg53;p=19G&2JvaJiO!%CIse>#ZALIs*tJ}ej0xCGV!ehLGew2;lywXA-s|z<8cD6 zVHZ(``#lus9wX&CYG=No6mW{BC`4z3^%}hiMh$u`?AC(HFt`!5iAHEON@*vvhgh16 z;6WoKSBm`=7Ya9u4mzyXTx(^bv|n~%iBPy- z)Zw&tmkLW?fo>kG?VFu~tgsd(-W8i)&8bq&$q=jW;SDBowqIB%ipg zU|arP>m9U+E>(7S-zf|WU(Wk-Z+7?D(56OZdqUTD{J+b5SY3NNX76qkRqg!3+4(QC zXwHD_y@&m+`PU!UbJq8gcP(#DmdbA)cD}2L&A2R-wkM<@owKf8xZd_U^fzVT>YeLi h>4L2(nbIdUYd?5>|Bt