From 8c4cbd2b1b10c4d4b76ecc6911faa0da2524d540 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Mon, 22 Sep 2008 20:41:01 +0000 Subject: [PATCH] 32-bit mouse pointer support. The pointer imagery are the icon files of the 4-colour custom text file images. Tooltypes XOFFSET and YOFFSET specify the "point" of the image. The 32-bit pointers can be disabled by setting option truecolour_mouse_pointers:0 The OS pointers (for "Default" and "Wait" only) can be used by setting os_mouse_pointers:1 Deleting the relevant files has the same effect :) This complete set of 32-bit images is drawn by Martin Merz (Mason). The code to read them is derived from sample code by Joerg Strohmayer. svn path=/trunk/netsurf/; revision=5401 --- amiga/gui.c | 232 ++++++++++++++++------- amiga/gui.h | 10 + amiga/options.h | 10 +- amiga/resources/Pointers/Blank.info | Bin 0 -> 1719 bytes amiga/resources/Pointers/Caret.info | Bin 0 -> 1605 bytes amiga/resources/Pointers/Cross.info | Bin 0 -> 2046 bytes amiga/resources/Pointers/Default.info | Bin 0 -> 2045 bytes amiga/resources/Pointers/Down.info | Bin 0 -> 1719 bytes amiga/resources/Pointers/Help.info | Bin 0 -> 2775 bytes amiga/resources/Pointers/Left.info | Bin 0 -> 1609 bytes amiga/resources/Pointers/LeftDown.info | Bin 0 -> 1765 bytes amiga/resources/Pointers/LeftUp.info | Bin 0 -> 1695 bytes amiga/resources/Pointers/Menu.info | Bin 0 -> 2577 bytes amiga/resources/Pointers/Move.info | Bin 0 -> 2840 bytes amiga/resources/Pointers/NoDrop.info | Bin 0 -> 2801 bytes amiga/resources/Pointers/NotAllowed.info | Bin 0 -> 2533 bytes amiga/resources/Pointers/Point.info | Bin 0 -> 2755 bytes amiga/resources/Pointers/Progress.info | Bin 0 -> 2851 bytes amiga/resources/Pointers/Right.info | Bin 0 -> 1609 bytes amiga/resources/Pointers/RightDown.info | Bin 0 -> 1669 bytes amiga/resources/Pointers/RightUp.info | Bin 0 -> 1687 bytes amiga/resources/Pointers/Up.info | Bin 0 -> 1617 bytes amiga/resources/Pointers/Wait.info | Bin 0 -> 2449 bytes 23 files changed, 183 insertions(+), 69 deletions(-) create mode 100644 amiga/resources/Pointers/Blank.info create mode 100644 amiga/resources/Pointers/Caret.info create mode 100644 amiga/resources/Pointers/Cross.info create mode 100644 amiga/resources/Pointers/Default.info create mode 100644 amiga/resources/Pointers/Down.info create mode 100644 amiga/resources/Pointers/Help.info create mode 100644 amiga/resources/Pointers/Left.info create mode 100644 amiga/resources/Pointers/LeftDown.info create mode 100644 amiga/resources/Pointers/LeftUp.info create mode 100644 amiga/resources/Pointers/Menu.info create mode 100644 amiga/resources/Pointers/Move.info create mode 100644 amiga/resources/Pointers/NoDrop.info create mode 100644 amiga/resources/Pointers/NotAllowed.info create mode 100644 amiga/resources/Pointers/Point.info create mode 100644 amiga/resources/Pointers/Progress.info create mode 100644 amiga/resources/Pointers/Right.info create mode 100644 amiga/resources/Pointers/RightDown.info create mode 100644 amiga/resources/Pointers/RightUp.info create mode 100644 amiga/resources/Pointers/Up.info create mode 100644 amiga/resources/Pointers/Wait.info diff --git a/amiga/gui.c b/amiga/gui.c index 5c1e47ee6..78bf209aa 100755 --- a/amiga/gui.c +++ b/amiga/gui.c @@ -57,6 +57,8 @@ #include #include "amiga/iff_cset.h" #include +#include +#include #ifdef WITH_HUBBUB #include @@ -101,13 +103,13 @@ bool win_destroyed = false; static struct RastPort dummyrp; struct IFFHandle *iffh = NULL; -#define AMI_LASTPOINTER GUI_POINTER_PROGRESS +#define AMI_LASTPOINTER GUI_POINTER_PROGRESS+1 +Object *mouseptrobj[AMI_LASTPOINTER+1]; struct BitMap *mouseptrbm[AMI_LASTPOINTER+1]; -int mousexpt[AMI_LASTPOINTER+1]; -int mouseypt[AMI_LASTPOINTER+1]; +int mouseptrcurrent=0; char *ptrs[AMI_LASTPOINTER+1] = { - "Resources/Pointers/Blank", // replaces default + "Resources/Pointers/Default", "Resources/Pointers/Point", "Resources/Pointers/Caret", "Resources/Pointers/Menu", @@ -125,13 +127,15 @@ char *ptrs[AMI_LASTPOINTER+1] = { "Resources/Pointers/Help", "Resources/Pointers/NoDrop", "Resources/Pointers/NotAllowed", - "Resources/Pointers/Progress"}; + "Resources/Pointers/Progress", + "Resources/Pointers/Blank"}; void ami_update_throbber(struct gui_window *g); void ami_update_buttons(struct gui_window *); void ami_scroller_hook(struct Hook *,Object *,struct IntuiMessage *); uint32 ami_popup_hook(struct Hook *hook,Object *item,APTR reserved); void ami_do_redraw(struct gui_window *g); +void ami_init_mouse_pointers(void); #ifdef WITH_HUBBUB static void *myrealloc(void *ptr, size_t len, void *pw); #endif @@ -143,8 +147,6 @@ void gui_init(int argc, char** argv) bool found=FALSE; int i; BPTR lock=0; - struct RastPort mouseptr; - struct IFFHandle *mpiff = NULL; Object *dto; /* ttengine.library @@ -193,47 +195,10 @@ void gui_init(int argc, char** argv) } } - InitRastPort(&mouseptr); - - for(i=0;i<=AMI_LASTPOINTER;i++) - { - BPTR ptrfile = 0; - mouseptrbm[i] = NULL; - - if(ptrfile = Open(ptrs[i],MODE_OLDFILE)) - { - int mx,my; - UBYTE *pprefsbuf = AllocVec(1061,MEMF_CLEAR); - Read(ptrfile,pprefsbuf,1061); - - mouseptrbm[i]=AllocVec(sizeof(struct BitMap),MEMF_CLEAR); - InitBitMap(mouseptrbm[i],2,32,32); - mouseptrbm[i]->Planes[0] = AllocRaster(32,32); - mouseptrbm[i]->Planes[1] = AllocRaster(32,32); - mouseptr.BitMap = mouseptrbm[i]; - - for(my=0;my<32;my++) - { - for(mx=0;mx<32;mx++) - { - SetAPen(&mouseptr,pprefsbuf[(my*(33))+mx]-'0'); - WritePixel(&mouseptr,mx,my); - } - } - - mousexpt[i] = ((pprefsbuf[1056]-'0')*10)+(pprefsbuf[1057]-'0'); - mouseypt[i] = ((pprefsbuf[1059]-'0')*10)+(pprefsbuf[1060]-'0'); - - FreeVec(pprefsbuf); - Close(ptrfile); - } - } -/* need to do some proper checking that components are opening */ - options_read("Resources/Options"); verbose_log = option_verbose_log; - + ami_init_mouse_pointers(); nsscreentitle = ASPrintf("NetSurf %s",netsurf_version); if(lock=Lock("Resources/LangNames",ACCESS_READ)) @@ -1584,39 +1549,170 @@ void gui_window_set_status(struct gui_window *g, const char *text) RefreshSetGadgetAttrs(g->gadgets[GID_STATUS],g->win,NULL,STRINGA_TextVal,text,TAG_DONE); } -Object *ami_custom_pointer(gui_pointer_shape shape) -{ - if(!mouseptrbm[shape]) printf("%ld is null\n",shape); - - return NewObject(NULL,"pointerclass",POINTERA_BitMap,mouseptrbm[shape],POINTERA_WordWidth,2,POINTERA_XOffset,-mousexpt[shape],POINTERA_YOffset,-mouseypt[shape],POINTERA_XResolution,POINTERXRESN_SCREENRES,POINTERA_YResolution,POINTERYRESN_SCREENRESASPECT,TAG_DONE); -} - void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape) { - switch(shape) + if(mouseptrcurrent == shape) return; + + if(option_use_os_pointers) { - case GUI_POINTER_DEFAULT: - SetWindowPointer(g->win,TAG_DONE); - break; + switch(shape) + { + case GUI_POINTER_DEFAULT: + SetWindowPointer(g->win,TAG_DONE); + break; - case GUI_POINTER_WAIT: - SetWindowPointer(g->win, - WA_BusyPointer,TRUE, - WA_PointerDelay,TRUE, - TAG_DONE); - break; + case GUI_POINTER_WAIT: + SetWindowPointer(g->win, + WA_BusyPointer,TRUE, + WA_PointerDelay,TRUE, + TAG_DONE); + break; - default: - SetWindowPointer(g->win,WA_Pointer,ami_custom_pointer(shape),TAG_DONE); - break; + default: + if(mouseptrobj[shape]) + { + SetWindowPointer(g->win,WA_Pointer,mouseptrobj[shape],TAG_DONE); + } + else + { + SetWindowPointer(g->win,TAG_DONE); + } + break; + } + } + else + { + if(mouseptrobj[shape]) + { + SetWindowPointer(g->win,WA_Pointer,mouseptrobj[shape],TAG_DONE); + } + else + { + SetWindowPointer(g->win,TAG_DONE); + } } - + mouseptrcurrent = shape; } void gui_window_hide_pointer(struct gui_window *g) { - SetWindowPointer(g->win,WA_Pointer,ami_custom_pointer(0),TAG_DONE); + if(mouseptrcurrent != AMI_LASTPOINTER) + { + SetWindowPointer(g->win,WA_Pointer,mouseptrobj[AMI_LASTPOINTER],TAG_DONE); + mouseptrcurrent = AMI_LASTPOINTER; + } +} + +void ami_init_mouse_pointers(void) +{ + int i; + struct RastPort mouseptr; + struct DiskObject *dobj; + uint32 format = IDFMT_BITMAPPED; + int32 mousexpt=0,mouseypt=0; + + InitRastPort(&mouseptr); + + for(i=0;i<=AMI_LASTPOINTER;i++) + { + BPTR ptrfile = 0; + mouseptrbm[i] = NULL; + mouseptrobj[i] = NULL; + + if(option_truecolour_mouse_pointers) + { + if(dobj = GetIconTags(ptrs[i],ICONGETA_UseFriendBitMap,TRUE,TAG_DONE)) + { + if(IconControl(dobj, ICONCTRLA_GetImageDataFormat, &format, TAG_DONE)) + { + if(IDFMT_DIRECTMAPPED == format) + { + int32 width = 0, height = 0; + uint8* data = 0; + IconControl(dobj, + ICONCTRLA_GetWidth, &width, + ICONCTRLA_GetHeight, &height, + ICONCTRLA_GetImageData1, &data, + TAG_DONE); + + if (width > 0 && width <= 64 && height > 0 && height <= 64 && data) + { + STRPTR tooltype; + + if(tooltype = FindToolType(dobj->do_ToolTypes, "XOFFSET")) + mousexpt = atoi(tooltype); + + if(tooltype = FindToolType(dobj->do_ToolTypes, "YOFFSET")) + mouseypt = atoi(tooltype); + + if (mousexpt < 0 || mousexpt >= width) + mousexpt = 0; + if (mouseypt < 0 || mouseypt >= height) + mouseypt = 0; + + static uint8 dummyPlane[64 * 64 / 8]; + static struct BitMap dummyBitMap = { 64 / 8, 64, 0, 2, 0, { dummyPlane, dummyPlane, 0, 0, 0, 0, 0, 0 }, }; + + mouseptrobj[i] = NewObject(NULL, POINTERCLASS, + POINTERA_BitMap, &dummyBitMap, + POINTERA_XOffset, -mousexpt, + POINTERA_YOffset, -mouseypt, + POINTERA_WordWidth, (width + 15) / 16, + POINTERA_XResolution, POINTERXRESN_SCREENRES, + POINTERA_YResolution, POINTERYRESN_SCREENRESASPECT, + POINTERA_Dummy + 0x07, data, + POINTERA_Dummy + 0x08, width, + POINTERA_Dummy + 0x09, height, + TAG_DONE); + } + } + } + } + } + + if(!mouseptrobj[i]) + { + if(ptrfile = Open(ptrs[i],MODE_OLDFILE)) + { + int mx,my; + UBYTE *pprefsbuf = AllocVec(1061,MEMF_CLEAR); + Read(ptrfile,pprefsbuf,1061); + + mouseptrbm[i]=AllocVec(sizeof(struct BitMap),MEMF_CLEAR); + InitBitMap(mouseptrbm[i],2,32,32); + mouseptrbm[i]->Planes[0] = AllocRaster(32,32); + mouseptrbm[i]->Planes[1] = AllocRaster(32,32); + mouseptr.BitMap = mouseptrbm[i]; + + for(my=0;my<32;my++) + { + for(mx=0;mx<32;mx++) + { + SetAPen(&mouseptr,pprefsbuf[(my*(33))+mx]-'0'); + WritePixel(&mouseptr,mx,my); + } + } + + mousexpt = ((pprefsbuf[1056]-'0')*10)+(pprefsbuf[1057]-'0'); + mouseypt = ((pprefsbuf[1059]-'0')*10)+(pprefsbuf[1060]-'0'); + + mouseptrobj[i] = NewObject(NULL,"pointerclass", + POINTERA_BitMap,mouseptrbm[i], + POINTERA_WordWidth,2, + POINTERA_XOffset,-mousexpt, + POINTERA_YOffset,-mouseypt, + POINTERA_XResolution,POINTERXRESN_SCREENRES, + POINTERA_YResolution,POINTERYRESN_SCREENRESASPECT, + TAG_DONE); + + FreeVec(pprefsbuf); + Close(ptrfile); + } + + } + + } // for } void gui_window_set_url(struct gui_window *g, const char *url) @@ -1692,6 +1788,8 @@ void gui_window_remove_caret(struct gui_window *g) GetAttr(SPACE_AreaBox,g->gadgets[GID_BROWSER],(ULONG *)&bbox); BltBitMapRastPort(g->bm,g->c_x,g->c_y,g->win->RPort,bbox->Left+g->c_x,bbox->Top+g->c_y,2,g->c_h,0x0C0); + + g->c_h = 0; } void gui_window_new_content(struct gui_window *g) diff --git a/amiga/gui.h b/amiga/gui.h index 179d43e8c..89cd74f03 100755 --- a/amiga/gui.h +++ b/amiga/gui.h @@ -24,6 +24,16 @@ #include "desktop/browser.h" #include +/* temp icon.library stuff */ +#define ICONCTRLA_SetImageDataFormat (ICONA_Dummy + 0x67) /*103*/ +#define ICONCTRLA_GetImageDataFormat (ICONA_Dummy + 0x68) /*104*/ + +/* Values for ICONCTRLA_Set/GetImageDataFormat */ +#define IDFMT_BITMAPPED (0) /* Bitmapped icon (planar, legacy) */ +#define IDFMT_PALETTEMAPPED (1) /* Palette mapped icon (chunky, V44+) */ +#define IDFMT_DIRECTMAPPED (2) /* Direct mapped icon (truecolor 0xAARRGGBB, V51+) */ +/* temp icon.library stuff */ + void ami_get_msg(void); enum diff --git a/amiga/options.h b/amiga/options.h index 40ad24d69..4859ba084 100644 --- a/amiga/options.h +++ b/amiga/options.h @@ -29,6 +29,8 @@ extern char *option_toolbar_images; extern bool option_no_iframes; extern bool option_utf8_clipboard; extern int option_throbber_frames; +extern bool option_truecolour_mouse_pointers; +extern bool option_use_os_pointers; #define EXTRA_OPTION_DEFINE \ bool option_verbose_log = false; \ @@ -39,7 +41,9 @@ int option_modeid = 0; \ char *option_toolbar_images = 0; \ bool option_no_iframes = false; \ bool option_utf8_clipboard = false; \ -int option_throbber_frames = 1; +int option_throbber_frames = 1; \ +bool option_truecolour_mouse_pointers = true; \ +bool option_use_os_pointers = false; \ #define EXTRA_OPTION_TABLE \ { "verbose_log", OPTION_BOOL, &option_verbose_log}, \ @@ -50,5 +54,7 @@ int option_throbber_frames = 1; { "toolbar_images", OPTION_STRING, &option_toolbar_images }, \ { "no_iframes", OPTION_BOOL, &option_no_iframes}, \ { "clipboard_write_utf8", OPTION_BOOL, &option_utf8_clipboard}, \ -{ "throbber_frames", OPTION_INTEGER, &option_throbber_frames}, +{ "throbber_frames", OPTION_INTEGER, &option_throbber_frames}, \ +{ "truecolour_mouse_pointers", OPTION_BOOL, &option_truecolour_mouse_pointers}, \ +{ "os_mouse_pointers", OPTION_BOOL, &option_use_os_pointers}, #endif diff --git a/amiga/resources/Pointers/Blank.info b/amiga/resources/Pointers/Blank.info new file mode 100644 index 0000000000000000000000000000000000000000..5ce812b263ddef88804d54983901a16c84b17b4b GIT binary patch literal 1719 zcmaDXz`)1=19}X43~WF?V`i>UKxVFF07&9L5I__(FfcH(Fr@xDtB_f4bpXg?0AU1Z zfG|O(Fr}Yz4`4<}jj~2VfS3>fr=2tg0fy1ELridus)2`qL~vxVRcJ|OPG(7FYO%g= zX--LISY~QDNPz$lb4B>Oxdpq1*cyODxFV5xj0|r6LB7D!ZH1?^zn`03J`E}514Q?HZX8PN7tio|MH*DIb(7~>z~oi z%PISwEa6tQEVtUbS2VM{Olpf_Y-;$;)dvex{`bvz?jU(p;>XVw@2*tETL$z^4Swz+ z=@nD{i*dhj>Y^Cy=}C_}UiDp$unb>zYVM|hXF|7S=R0qVIzMIUrxyloE8a~tud8_U z`;kjoe%1OZ;ZJ>&cK?6Y`?>u{+5KmKHKo6&KaJZNc<#u&$MbI7iP!Rdum1C8?A1BX z%N||-e)QSDpv-gXKh_?dbN}h??=eZ0pV#dXc+LE)F)s4@gCCA&U!PU&@&3;FTJYZ6 zFQ?Ydu>QNL=tg?n@!20;U*zBWyk=oU{{uhUmA{?N)W3}GTV8ke!vAoiFB$h^S1A8G zBe^ED$&9uU{$qT~7y%j} zOpqx|ndUVH%wYaIFlhlM1*k+qOoNyVHgc309w7ipJ5OUq)6VdSPx|>nA~-VGDzqds zC$l6owOHS`G^ZppEHkwn`L5zw?*9lzT4zg7enT_ot=P_ON{3uuL^2G<5G_dxc*I z@8`$N*co}A-TcYFrvDCK%B`8LaG{}sNoyyG@}!~0m~^sFNN+kPUS=Bc#^IB_U~2^Wt!j4Is@8vst# Bw+a9N literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/Cross.info b/amiga/resources/Pointers/Cross.info new file mode 100644 index 0000000000000000000000000000000000000000..7aa4331390aaaa50dba848a9b6843722f2928c3f GIT binary patch literal 2046 zcmaDXz`)1=0(A_}81#UU4ajHACI{x<+c z?EfDClJ(%U10n7IgS5$mNq(?6Ggu8XSQq2aO*;udZ!s`H!UP=K%;1=3o&yr*nG7Oj zCN%&_^LY+HG69%+U?fBYA`4Lo(ZvKwL69^!0jM0LVQ2w~;K*RB(2~rY%#zI1VtwDz zoRZA2%+zv_FF@hL9pUfh7VH{gYiIxx;*Lac-TZ@m85o#8c{=<1xj8z!0;Sn>b(w%! z$}z~@2`F;|C<4rlOlKJwD(1Wm-|rorC{lZ2qsa1q%(A=1Hd&?!y0B~VeG)4SbYyYe zpeH(~D_GIl+C?=Ys(Xry%#1ihcJZOzWY=OqaSUshcM~Ly`>l+`qkB>;LYgt!m|eR)l@joa$6rCe}Jr(q{gw zL$_{7bY0ZA_x9bbua|0QIbyRuTn%{w|?9c$xTzp5tf zTH*RDE#Wo(=gu8r33GG*m{TC|@n4Be|D1j+v=G-T78El&$%u6 zbB)v1MgL;(w(9z+=dZ97gS@|z_g$n#d+M`kq4z)fewUI>&rmMkTAnrI=b1Ihc^8_m z7;jaqR(mcTbbX22o$Qjizvas9(o4gN_Mb`rl$xi(e{HK^k>%}oYu>%@*rR{`&E?{_ zb0SmEpRqd0`+m-HGq*dEcc0fN*L_}J5>9POetmUQ)Rsa?aOR6QbAt j*?rJ?aX53{%WnyrKkWIX|5wk<02TbW|B+jVQNt7fJb}_v literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/Default.info b/amiga/resources/Pointers/Default.info new file mode 100644 index 0000000000000000000000000000000000000000..dc8c2b0edffb8a985b29aeb5d57ff6ff5f3bb7f2 GIT binary patch literal 2045 zcmaDXz`)1=0(A_}81#UU4ajFq{c|oM_0Q=8Ac_A#0HPTf8WPt51P96-=kM}x zadGJp&{Q;1;+&|m)I!op)aTQQvVV%gouz08C ze?^Hb%UR#1H#Kp+dV2eN`T4m&1#DTrb3NylKX>k?Y|Xp(|K2_1nV+8aA+;=Q?WPB> z@5tEk@I0tCnt68T1Xm-^w#`}pdG_h*B%FMIyg!1+K3J3gy4gftulvo>cbA^~aphiL z{KE}T&;8U}mmhrV{@Qn^zlxPhE=|Ajp8dyNzo&8KtM@OTJ?q1v=bMjZI5R){{p&+v z)vpOf>#bAlCD*KuepZ;PD;E-;ylT7ndo}gDuk=b?>wV7}eP6xmLU3efK&7S7LV;<= zj^BOJ_dPgxTKX(&QPGMkH#*wm^nbm6{c+D~?v)nso zIZ<%s&)9YMmBLSGZknE>_{rdv#@H#jR^?(=TT9U)p==i}-t= z_B~H+Hnm^TxXXT>BhGbk#id(aZvE_^4gHOd_t*1^TIMK*Q;P2uy}RxAP4lhZ-=fAX6JC4${`I!f)^gRCI;H)^ zpVnyG&dT2HA^X%uwfb1)(%)`Xk2n2|e3!ZZ(%!jmTi$e?*nDrrmwjq>MRika{k~?{UGV~_fjI`yY^bH7bX*M0Y?&-3kd?Yq0JrI6|GE5YsB8Ac_A#0HPTf8Wo6OyhW zmv$tABZI9%OEPmZOEOc7^?gfoN;1PTQ_Deq5&&YZ2!A)XVAl{^1CR(;Br=bY!OcI& z7g)Nj@O1X~b8~cd1u9|F)nx(-IR?1{!-cUIC;}`f8JidwD(1YMYUsffC~;ig#LdF; z_63FQE?$1;__lTk9C5s$u*H&f=Z-r8&W!>}J1nPpdwUBwD$G=9;#8WU;3441BIt7Y z`v2;E-BEqpstNfxM;dNrAuZq~0cPTbuUw;)L5x55jioi)_h1oG5CX_x!mW_fB1o zyrr{i;<~?DrnMJvuWPv@#t>opds5Q@*{a$*1xtrPQqg8pk=2zRUN;isHlly+z z^1ScIv#i#BUB7&;pIr5|skP57wqJ~0>!#j$M8482b36Zr^x&K2eeMe1FXk?FinCew z)HE%9M>$LRgH<=Px$kUZ%e<3yv2^E}qrbQ|v)Q!mPV4u*`{%Z`0ej|^oK4~pn@b~% zzRRRuuRe5N>VLob!qsVWmmixnQ}wLe?0w$P%B}5h+a~+ny#40!_Rqg37+IZqmnQ%2 aaj{j>mbYibSR4i5=-+wsRTnNaF#rI!p7p!{ literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/Help.info b/amiga/resources/Pointers/Help.info new file mode 100644 index 0000000000000000000000000000000000000000..ca5947105ecf0c3a24ef4a550d104a43fc04cbf1 GIT binary patch literal 2775 zcmd6ndpy)>7r=jGFs2LM#v?L$~NRSFPb8m)Fw5??C<$`|M18A{{435GvD)^^E~JIopXL?W)2UbARttT z18Kn@QP@TWtPd#%tPiJx4FN1bLr^LNp@gB}aKcE)_CtlR1w32iKNh$}C}_ay1bWM! zDYEuO7>O_*Aq627VM;1cDNH~C8{r&Kf(<#C-1R}27uJMfO00>(#H?+HiC!~-2_YWn zXW)kjOMo~9Kn#e5gpg;V--9)Z4fqX+DUyRS!p)xih^#?{aLNc#sfc0%ma+jKpn>9v zg1X-2fu7{&f(TJM(i1t*6G#r}i5$|6P5#fGu)%p06Y&2p$m|3{cxZEWm`Fx!gvh&t z){yl&!VQF*!zoAwhJcBXjc^VqfdE8s1t4M=p@aa$VGyDb!UG0-AR8N^1|h>(sj4`DjOG=!XPf(03k6x)IoLvwNT2m#yW^H-hb`bEqMDlUPY`A1V08%IsfRuAAEihY1jS!@ zSDJLfDORReBKLrr-ec%|A%%AE;s*m#pYr!FbIBpL3nv$BhLmMUCJyRPDQRgcnrVIh z7W()!v3yg^c)(OvmMs3{KSaE|O-#+*eM_g3j5}V<{$*!7bnl2Bul&nk@)EIPX8d%@ zXV0bUw|aO-)z*j8y)ZF43!a3D*+RqBkXf zEH5q10OuO#5)^i!z|t%F_S5oupBkPtnVE9$KJkX(=^(2YdZXNr3wLXEC{y`-ul8_x zZ*g%0MK$^TzR7{=)3x>9P#5cmajL`bRKDs^Jt>QTLb+YKd@j6HTLQkH2UySV|yIPG6Q6N-Rzw5=A_n4S+W^@l;;vq{q!`R zQK7`i%4A1$cG6|#a!Y6D?7dt#q2VIWceiyu>8waiO3<)*mP_8z_QyQ=wKUe1D!xCn z8avhG%wP&DDXGfdsp(Ei@^|-Bsngp}E3G1F^_EpvkNsF8GFT?c&8Zh5TC41PtC6ma ztHvMsXP!Z~l;3vUw8+`e2#vTZpTWsCx66g8nlV~ca}4+9Mr$qCZNlj#-$PBSt&J>y zg)r>Dhj_8Or^(+wG4cM2 z@uTO`Jwm9u)2%eME0H_Iqnf=ly3CZiik@SXTXtfOCJx++ctab$Ls(Ss5I0!O&(?VR zof}!wx*!y*{U{@HmnHpC*(a#T`NRplalDs;bOzb+ns1fUjdMJU!Y{?&tuJy#YE&L( zds<6PhLzapyfMx?H6o*2v*%DfPiTkYI(cNugv5&N*GxY^R1L)YV?!O|9cR>?oSl=8 zzV^s{cJZPN=lsOM1C7c*Ni|sS3Yw;i8Toweawp4q+H**RJ3pMAFFSv|-)w2fl0wfK zqn-799o*jPT-ZzNRFD3oHi=D=j&Dvlsos<>roP(L;#qn`N5D42MV)#4wYXUC^+Wp>=ar-3$J*CLgx%8Je0y>b)#`}m~crTCnE3+hOrYoTbI})Q2C?CV36otC!Fk_YG7u$;*6B&$UufyC|ghlV7 z{Xg-v|63~u%X!b;1{OpJ1gn>?!Da#erI#`-sDG`gbDTt`&nR5yto`O zHB&{(@nj{uv@$o>okeGh#Tv$i8lSuJ;Z2+VC#v5UL(z^u#wL3=GFG}hMrR%#Yxi{? zRUac!WM(HmFgV^t`5WXZ!|Mynrsee#yx8`!Kcm_k_>~VTKMLV`Hu!d-J5Ko84)AWs!NNN-?*44TuY1&-d#W*;-<{f_8N?hj^=$5xAi=GFY@|ysem)I7;*4V zv_jWIq0&Prn`#nogxZwNshxhbZgcad6XW)>=)hH3dU<(We!)vUr;q(9Bs6itXr)=P z?8~{IvdZik_d>4Tb2~>MjEff~Wn_maQWWCksjY!}s~0hq_6be)GiPclj=r@%cF;S? pcQ}wpUMo9nkU~7ZZ!Lo0u`$63rgG{21xB2$7%J)WX@4Mu`5Th%So#0} literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/Left.info b/amiga/resources/Pointers/Left.info new file mode 100644 index 0000000000000000000000000000000000000000..5a4575cfcc8fcae9e02dab2714398616eff41e80 GIT binary patch literal 1609 zcmaDXz`)1=0(A_}81#UU4ajFq{c~nP>YsB8Ac_A#0HPTf8W}9{!g9BfQSay31QUJ^lHaJg2mk&aMTQuWs#g)$9lpILM`R#6dx%OTkI-$jjHZ z+u2-1wtDBi{C+@EM6WWrZ`GB*9}H(I$n@72nuIN@zL23H(Hr!uRO#IU<~N50b}JmX z_Wk42${RXj5$B&roK5>N$IrK1b?&k3wQThkH34N?X1`nd`qAEyL$e<*h}KyYtg&G3 z`NcC&FPwLBMxOc1Bi>uN*5BX0@NUhu@-q8Z#f95v|FyU`QM>xm<@9-9r+i(K^hPYw z*1xJM{n?Ld$-U{`+hgtr+P__{yub01&f37uyw!{Nu228=rgdUYsB8Ac_A#0HPTf8WB#ZI)MDd)Bqw`K?Fk+m^=a|8<5BjF#70Qr^~ zOtOCfvH8K|eXz*?10a$A4M-%2$pA^l!!Yd}0Qrtl0Z1?~fk_qz5Sya`L|z0D42!^I z3z&qY8VLIjSY#Lw62XzdR-q-CIhiGysm1!fr8y;;VVSArAg>7kF;|4Yn_IAJh^+xg zgewx6$H?I3ALI)R!fT$+{(f$b&aOZuY`VHkKq1Eb{}FjUNWJI&U^ zDNv+=-^9zrWwQ|PMIqj;raPjXyKl@0==KOso}kw`!`WL!&ojj&v^aa~l%LI~4%e88 z1g8AcxmsrR{I0tQCok`Nx983LPhWi~wD_*spzvp&-))nPkt=yFR9|!bW_jm}@Z5K2 zdE<^GRS5AUoiE-IQIQTdQo>Zq z>GHjCXU?5_RH)D}{o{}5&0*fn`_7)(o>z4*)zP%Ln&nG&+P)I`Uw<>?WD~cC-Clm) z?1by2`M0f1jVn%nH=2LEJxOr>snnWvVHYsB8Ac_A#0HPTf8W_&CcI&kb|9hA1NK}8m}~))kHF+bFv-yXqF5Y2B$EP&WQ3%e z2_QB@0+<|LghX&;uvKVDW=>{FW@@p%Z)r|RW>{uwImnkFzjHD9m>or2 zpR=#|!~9<%_rN)=ItM$&xihp9xVSkpFR}2xbmE#FvMD23)hyG8i<6Bh(yVzMN0LjD zglE_D-JA1nq`jW|!1_Z%`7+CxcV{kae}CDCxV&zYta8#iJ$eqSqW}vMYWaU!f5Og(Jq!R& C7xUc! literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/Menu.info b/amiga/resources/Pointers/Menu.info new file mode 100644 index 0000000000000000000000000000000000000000..2a1143f11dcfff39f85a38152af39cdc9b1369c7 GIT binary patch literal 2577 zcmc(fd0bP+7RPUh1}j(=iz1ap1%;2GsYnrmtP&$gKz2kckP-+1K@((2BoQiT3yM+< zYC@nIt*j~tQWgW20P-ZrBFZ9Rk?k3is)&@3yxhU}+V|-{{i~kOXTI~BGiUCdd*;j? z(}WPve{CDI4MHi$2vUr0Cn-i-6P{2gZ7F~WL5O9La_%zZEUj4j*hp1Skdk04M_lUkWXqAUI7( z!G|aQuXaH3N&tm`8VWd8RRPB$0U-yl?(g%H){b)9N)rLz2FwG@1WW}y1;}K=9n%qJ znh54a7|<;TIA_yF@WubN0Om44q>;W-Lq;I?Mj)?C+6HJe@PoC`lHLvcOCEUTr!-xk zARk*lDk+*oC52PAd&EamN&ckp1b9!H%C<7l6N~k6_1%qzJu8F$JVHQNPj3$hTCTFs z#S@Qpa&c9Lpe!tumk8nHz1LZpph=}inW<&UUr{1k%p&80BXnCdEW$Gn2y~mz`9=Lu zLWw?8y86rOIp0_4yfWQydX2Dn`%bF((af{Wn_g@;v5F)g=J%5Eva78pjw7i%jtlnU&r>-JQaYn0g;$diEUZaL~GW z^@&EOyeHEk2a8XeWeK>IZ+}0EGcKr)SDTPpWu4a23VAv$_+q82PRayoqich+%oQ`8 z=HTWQ`Kq|Mcx*D@VUr`zD_iI$+iw$Qps#<@zOc6pKSS-99trKR+cBEg`)_>;Dvi(> zN!N+G*qp?>#^I+lv*(E1uWq{_<5dFS%Z>Mqgb0 zQ|Zq?8`VqOPa!)GdqJy_$b`fpy~l&q3-2G_TyJm3J@IbJndsZYHs35bq`5YtVU1zz zHasrz0x605uD_&FihM!Cb~Z$)#djx-6O6UyKX1EsPiBLLILB@1hMLgWoJ5h{_ceNx z+FA_*`jz$CVIH5YI(#ubBe=p?yFHiCV*Vyi*WD?)$Z69X7fuRHFtgPPm_a6*Cd9vQ)mhW8; z507XH#d4slYZNhgwY|OFDlxW90b^_XtfK?Jh8v@?YmWE2??Uy3gmnS( zsoICS0bKcdn=K_HHc@DTfqz$bw|JaFByN^i&Tq|WyDyW`@!MFnp)?xJI_T1D?rTo! ziJ9{8#jCBD)&-pL8?%c{JC{|AdsS5(gcB^U2U&FjbE*9`Y}JDYT)$hs25}9fisy75 ztwrrVc>9MAgI?{5%No?YO<11FR$Dk?CWcxmG~D2aqunY2MPvCIkI7slE%hk>^rr! z3ueSCvI$wIBtWOU_U6q9z1>wS7Lzb<#W7FTk$R6-mxmsC&dk@bg}gtWl0vnH4Rho_9*VT$418_<6MzB4Xl literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/Move.info b/amiga/resources/Pointers/Move.info new file mode 100644 index 0000000000000000000000000000000000000000..606f5d283a7ebee3bc49fdafcaf11d42a26e6bda GIT binary patch literal 2840 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 U9-S8)67eytsr63@X$dL?JU=TqfMuy=s ztSHE#A}~+^lwmnk2s_|{1`-tpM3K12O~Ne@j%;_BEq8184{%>q|N491*Y)c4>#s+Z z0R-@`p%3T-a?l(>asA1H;+i3V3leDTJdgqa2pNFlnx;*0EzE&t0DOHKDLWy&3P{05 z(U6}?0Ju}!ks~dv!Gg0=c^vr0oreIqlW;uS1wjJ_Ar*i#kj{WQq&A=lc^tq)Vx-Cg z7om7JunCDmz#=8^(g+E>8elGf{Vd0SoJopwi&DW#I0nu_xTgEBu`?aKRO83#pv{fA=|a!OrAFze(t zkDDZ{e`(MYv`!-}K2KV0O=L=LZWugVQ5pv$Nd9#6(luhzQ|^v$Jz+ zlSnQ+Mb2d#dp#~QH}^&4%Ov5D(Va(CRnwly$&#%#eHomhG1BmG1GQ|>y2aPW=ZYvp z&0w*qscDx;BnlO*Qs1vCcVhGCj1_eCmx+$_prBEW;e~~TmP@3O=I9B8np*yrrlux7 zD=W)R?%E2vM`f5uBwEpfgAb7$9QZ5WW~ZmWpPHI_Tv{q{3k(eW?)>==r~4i@G8l{y zjS1}-EEXHKrMJi)rE99HcKZ7Ib|!dx-&(^TIu!gTBO{}sfq?zHs`rAV;pXi_|t=3xc2Qg*p>ZzC%<26 zZf?dI8nWhJk-ynn=37XLIA&mwaj<{<<;&}9I6U4tVcgr>`{IQQKl(RE-AA^V|Jp=l z9G}P3g`AudbJzDS|FyFaOI6Si3WYd5Jz-r9Nz_k#(A3nWhDNWkeH%^8-thSxCX<;E z5D>u5&L+t{B?1Nrt#iB&K4F#i!%Pqa(N3pMt#@=>;d}V`^|Dy31V_j2q*z{W@8Ydn z`xm%fUGgP`g`@Mv=7}G}iy9m0=%-s?j(_T9-T0eR1G>g&G`hQM{n&cmJEO7Md-oVh zyLZ3!T;1H<)ab!RzEv(+;4Y?rd1TsE*F4~DZTlm_51mDhB{S~W%&`y(WnERw*}Wq7 zY}DyaKe6D*kt1m#Rh{kamM84{!u-9wykv(~d6=aGw41|hlJDV-yRE5Wrs`luELHpK zuhXF~mT{XzB4wE7FdHtF&jbYpT_lqoCJ#}US64H>($~?su(Y_S)9GcN`pvu|YyIOn zF%O&e#h?P-MoS$ZJDtb36d$eVn4GLMnV!DCQeRQQq|@n3&+`o$nOCm-!a3L$a9ayl z$+H&hugmN%zRPPV)6?;BadAp9 z{#III+0l#krU1$Upan#2^{t9YN&OhUcvIoykm>xCcEZ))o>hC+DinEC+xYqxHrW;A zh8D9}uNWJJb&*?H6ZP%+0<$`$aFimU#;p3mxVt`?v~@K89hZAd!%vu=l~vrs<4G#Y z%R|)7B0)l6=B*B~O^mILO-vwlt&z>M@iq1Aad9o!t8$9!Z>2#cjTYklg*H7y{(*|r_ zHe_jf3r8@0)s-L3+BKDBueYDDXsI0UO(BfMf2EF^5=7Hv9&^u|O^ev46RD>(%eJlN zZiq$Egw`cYjyyi#p{H_5YIeK5_KogV`v#0cv5YgJwXI=@=N3s&73S4zoHJl;WO}xT z31Vq3rWKp5@^K7pL1&q{aeYJgiqjCq|9w~4#FNVK&d@{x_a(THbTEp0^u zV!An{0&kIMx`-3bkdy9SnypeV`b$_@zw?VzvE&x#f`)+7&7?)#%DL#n6L->jd-CQS fsvks2?AAtpD@R%EG3s-%{zN7!BN@TCkhJzsxea3> literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/Progress.info b/amiga/resources/Pointers/Progress.info new file mode 100644 index 0000000000000000000000000000000000000000..c47d52e997f16e1b3963c495f94a2f57dcd66bb1 GIT binary patch literal 2851 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 bL|-w>AJ7ajf2qR@2h(qYA#Xx$$_?N@9DKmO literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/Right.info b/amiga/resources/Pointers/Right.info new file mode 100644 index 0000000000000000000000000000000000000000..7080c4e77680e284aea09462e9a1dead6e85224e GIT binary patch literal 1609 zcmaDXz`)1=0(A_}81#UU4ajHA%#{pC{d493Na8;bfM^DW1_lO37KY4Rp@6K6*BgL5 zkO&fh@<66ArJr&SV1~%Cfhl$f2~xxS{{WbL03;dM9{>r){~(e9LNXozv4=N64inY} zuwM@#NQej|#2_lcawC8Mr=2tg0S3&p!~VYk7y#_xw8IWgDG+jmrX5yLYGD5Z3KJFv z2RI24VF1el^YX|662XzdR-q-CIhiGysm1!fr8y;;VVSArpb!uMVy*~(H@9Hd5L*L~ z2v;OBkCDO6KgbtY3|V~~9FKiV5|X!hd;(K?HQH5SZ0 zzj)^9h4W6%$TOdL#Ct2(`up1#-mSS-US|KQxN!UIzZUlSw|WuZ_37W XI*XnsUjEM~hyWMsKk!aJdTucQ11ry7 literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/RightDown.info b/amiga/resources/Pointers/RightDown.info new file mode 100644 index 0000000000000000000000000000000000000000..0f5c181cf4df6dc33adeac81ea3b8c68850f8463 GIT binary patch literal 1669 zcmaDXz`)1=0(A_}81#UU4ajFq{c~nP>YsB8Ac_A#0HPTf8WFk^$>aeG@qtNpFv;8iq8QJBIe)-p4VbJ4lMq)xNO`b`9GDzN z1SCwjz&>IHlS~lbK_q0r92PL?0w#}uNk~|MnM0far=2tg0R~)Y2NDpFh=(Ks{sxer z*$;q7<~Jac5fUB{vK}PD07*3v5~6Jwr5#9^2!TB+2qrliKopAuh-A_Mk&GfBlA#4m zLedU|JzUa`L~vxVRcJ|OPG(7FYO%g=X--LISY~QD$io6a%oXA9<`(Q4Vru{r;fh4& zF*3OM2l)a6sm#;a-_Om_*%hdSO;;C~`4}C8+?{|_3{V7EP%;KGFjUNWdu5~7;Q*0i zAAd9Xor|?f+njuGZE*a8{tLb@rYvmgUfS)wvej>Hj8)gWgHB%2FBOhDU08LLgK=U* zGo!5CdvVW+s}h#qIq>sfY~D2c_Tt4;1ZE#@f8P4uaYET~wHrMfE+6#X|Nqys-_!Qp z_OgB@Z;@{Hc;CeXo33{sI+_%ox_EAJn(?|E>FaC5zPzc7%y^zxa4zSV>(;K*X~ta7 ziZ9>3dCcwH%(E72LmpgteerV6v1%K?{rn(61m%K-O#q)PcpW8mUHE-X+ jZ?_D;#;W~TpB$h0cE%5R5ho7C76B*`T+5WfdGH?q3|;l1 literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/RightUp.info b/amiga/resources/Pointers/RightUp.info new file mode 100644 index 0000000000000000000000000000000000000000..140ef15c5ddd853f0ad31c213c62a19ae990b896 GIT binary patch literal 1687 zcmaDXz`)1=0(A_}81#UU4ajFq{c~nP>YsB8Ac_A#0HPTf8Wy@&NgQcvwPu3CK;}~Z=$TqbzNE1)iwEaTb&Lr6q)YFw}_=sh+Vw&;tl>=CLz{S zZrpm{E--P2?YzlB9g9kRl%BJj;iZs&K{%9T9epHqI?X?M)AOsn4R7{0RAtb4<_i?=`KYu~Xpq+s632U_$0R~Yd0 zo-@ocIdto->G##4F=?B3Xo|(|zI}K3XJM&4`vsO^4_|#NYkog-_UxsTvS&ZrGP8br z=C#aiAr<$$-^)I!eRlW5yPw&{+t*#tS>c%6gwe8=4PwSlh7BRLdX1e{>R4}Lqw341RdWdH!G CjPW=C literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/Up.info b/amiga/resources/Pointers/Up.info new file mode 100644 index 0000000000000000000000000000000000000000..f4b44421fcceed61b722f4c93a6fee4e00662f44 GIT binary patch literal 1617 zcmaDXz`)1=0(A_}81#UU4ajFq{c|oM_0Q=8Ac_A#0HPTf8WI5WARKVUS z0+RwrC5K1aK@O8NuzwGO$>(4a zlA4GiA$bw3X*duP!I8mMp(U9)nI)O2#rnRbIVG84nW^OC;}`f8D$t4D(1YMvO9|@ zP{j4U{S)s$?JqAyL`VDQif@=^Qs)>I-I{qMK{+#2;2=j6e@K8LCyS$n@F0^Ceod%Whx!*0is>s^kjqlXA1kwcEAlUtRU`_Wal# zZ?FBi`}*XnFyo81D?(BxrWQ%`JLhhH_qaxH`O{CAde0`jzV&z2{gzvOy3y6^e#hQF zxa`-X{hYk7kJa11zg@ogr>}49jJr1)a+!Cx?Gh|`KHK>Y=LXyQB`a6%b}Ntdm6I)F z-r}`9#w_{Oys{&o`R3E|8r-(b%P-ftyQ6$Zb!q;J g^50T-GD_6$O?Ypn*dpM>0VO8<{=ok9$K5st0Lxg(iU0rr literal 0 HcmV?d00001 diff --git a/amiga/resources/Pointers/Wait.info b/amiga/resources/Pointers/Wait.info new file mode 100644 index 0000000000000000000000000000000000000000..88aa27a0300a8122955afce275c3d67d6be79cf2 GIT binary patch literal 2449 zcmdUueKeG56u{q+h%wmI7BgmaD5W$C`8E-zRP3US)*vz(Uo$n@qzy?zH07((gzVyE z(-#%nFeAqtMTWK-N@nD1j0TA@`DpfiX42qDaant(#x2|yYRX2*U&Ar!A5NFh=Iq#-~|f(D=? z5fFzH!qky-V5-ZLVIq`&Z40aaKS}=gFD<$aEUIpRnwo&Rin^>-=thd$Hliu)s{oAv zU?#&{q5^bfyyg<1EAt?9f&Nv==iYfl`_JA{RF$BpFhNo6B)JeiqLOks=!Gu{`b94P zn@NfoB?$^0r^xWt^bUNUFGVp7kU9%kb(9mPxFy^)un@)-6ePn7z5(#B+XFgo0S1Iq z#G|A@SLT7hMSe}P(l@}@eoq`Fni59|r{i}YiH@WEKnXtz&Y%UqNPlk+4_|jbr%juH zNi*Q{)&lbI_Sp@OOxliZ-d-Lq+uUKVnz=bVQwSFyqATo)f-Uecs)j&NJX3OU=XTQG zWoguDu3NgA>f&Idw@9}#SB{Z~*&*F;QqUESOD9CEvZgw?Ou)Qtv+quK-&U2sU2=Y&Sdn_;M z3@d5Ut?0$`79IXAIq&&x;!nQ5e>^~;P`pvGc;L#beIIAXNZ0F5%<(5DC&xWKJsaA1 zJa*{^R$*`|`o?mns;a6hF)=aEdU`fwXJ`8a2jlN$)>l?~nwgoo-I4nS2F`~C1qJ1_ zvn!81)^nckl}e=%hK7dEy1UnrNTg>10X{4&Y_p}MF`Z5)WAybe6cu6DtzVy8T3Sjt zOs6A_jg9rDKDO@XjO|H84ULV(jz}c=*RQV&2ne`PRb{TBsHdoY~aXnbxP@R$X1K_F5*ZjgF0dA{JM6FRHtLpKPlxpPH)4 zD=5emHy7vS#qH!DTIvwdA<~cGSYDcuO0_&}dj$fUx`z*=q<3m+OdK2>hI&P!wansh zGFj?QBwiFJ930A7RQn!9SL?K7KC-;TU@!(nqLzWazH1l^X8YC|tFjLqXDh1%6QgzK znM~$onM_6|-P&r&)k|p4=J%nQE>l_+G>zWe++2ptCWu|I*Sq+M^z{R>_VIqhl7)Bg z-d!CS7;q+ypIhVHkJ>cm?x=mM3C}rO)VbI{rY(sbzl!aYVA6^YHt20c4rj$@iw8`s zt*1>%<3;3~!-2!svhu~^$bQ~Dq37Ci+Ak>d+>8#krC3i7XWg_gI2f*v!Q?eJyFYGe ziNBbWv$6kak&29r47Mnt zzA(J-&MNM1$(AD>Qk%H5?TyQ_oNVnFXf%2V%PT7@ldLu|k;T=YDU5%6Pq)8ZU}2qV zpRS(L^fJ~$8Zvgw)VbK(%i9|cboYBr4GjysI&cM>k=XP+R&2y1_t*0dh_J{t5a05!E|=RIq-F1 zh4$OCGUK2#)RGfZH(n)2SP=LTL@QjBeE?o#R%2Fk7MWl&i;A>4a=tK>RtZ;;mQ~cr zO+EcF;_1fGV->S{DzP2L3mB{i!;S4CDcAP#orqv*3xryw5%c|bPIr$aPSCrk3GD*A zguxpq|CJ|R+J=zEtB2lb>5&~|-VHy-^F?`!{8avA{Zt6-i=m7kr4V?Mp*{0d6xxCzF0e1^N@* CDA?Bk literal 0 HcmV?d00001