From efc2e685e46323a8194e4c2eafb9307a9e9a98d7 Mon Sep 17 00:00:00 2001 From: stevenhowes <38082088+stevenhowes@users.noreply.github.com> Date: Mon, 17 May 2021 20:48:48 +0100 Subject: [PATCH] Proper sound for phasers and explosions. Multi-channel audio. --- !TheEsc/!RunImage,ff8 | Bin 23244 -> 23460 bytes !TheEsc/c/CTheEscape | 14 ++++++--- !TheEsc/c/Intro | 1 - !TheEsc/c/Mission1 | 57 +++++++++++----------------------- !TheEsc/c/Mission2 | 2 -- !TheEsc/c/Sound | 69 ++++++++++++++++++++++++++++++++++-------- !TheEsc/h/Sound | 16 +++++++++- !TheEsc/sounds/phaser | 1 + !TheEsc/sounds/shpexp | 1 + 9 files changed, 100 insertions(+), 61 deletions(-) create mode 100644 !TheEsc/sounds/phaser create mode 100644 !TheEsc/sounds/shpexp diff --git a/!TheEsc/!RunImage,ff8 b/!TheEsc/!RunImage,ff8 index 5026c2e3a6563d9ae9e1597cd7fdb565f555a313..c4dc83131e0d1689270ee1bddc6fff412cc3d998 100644 GIT binary patch delta 5332 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 WU<{xPFryhu9;TZ!i|OLi=l&ZJ;dN2~ diff --git a/!TheEsc/c/CTheEscape b/!TheEsc/c/CTheEscape index 4f9704c..f8222ef 100644 --- a/!TheEsc/c/CTheEscape +++ b/!TheEsc/c/CTheEscape @@ -5,7 +5,7 @@ #include "Sound.h" #include "Graphics.h" -#define SKIP_INTRO +//#define SKIP_INTRO //#define SKIP_MISSION1 //#define SKIP_MISSION2 @@ -52,9 +52,10 @@ void exitfunc () { free(fontbuffer); free(tilebuffer); - inreg.r[0] = 4; - inreg.r[1] = 0; - _kernel_swi (DataVox_Unset, &inreg, &outreg); + sound_pcm_unset(5); + sound_pcm_unset(6); + sound_pcm_unset(7); + sound_pcm_unset(8); } int main(int argc, char *argv[]) @@ -65,6 +66,11 @@ int main(int argc, char *argv[]) atexit(exitfunc); sound_on(); + sound_voices(8); + sound_set_voice(5,"DataVox-Voice"); + sound_set_voice(6,"DataVox-Voice"); + sound_set_voice(7,"DataVox-Voice"); + sound_set_voice(8,"DataVox-Voice"); // Set initial display mode display_mode(DISPLAY_MODE); diff --git a/!TheEsc/c/Intro b/!TheEsc/c/Intro index f36eb05..100df2b 100644 --- a/!TheEsc/c/Intro +++ b/!TheEsc/c/Intro @@ -7,7 +7,6 @@ void intro() { int currentstart = 0; int introframe = 0; - sound_voices(4); sound_set_voice(1,"WaveSynth-Beep"); sound_set_voice(2,"WaveSynth-Beep"); diff --git a/!TheEsc/c/Mission1 b/!TheEsc/c/Mission1 index d234ba6..b95a444 100644 --- a/!TheEsc/c/Mission1 +++ b/!TheEsc/c/Mission1 @@ -22,6 +22,8 @@ char *sprites[] = {"player_ship","durno_ship","ship_trgt","durno_ship2","ship2_t char hudbuffer[63]; +unsigned char lastnpcchannel = PCMCHANNEL_NPC1; + struct EntityLocation_s { short signed int X,Y; }; @@ -146,12 +148,14 @@ void game_spawn_projectile(int id, int Px, int Py, int Vx, int Vy, enum sprite_e Projectiles[id].nextframe = tick + 10; Projectiles[id].damage = damage; Projectiles[id].collidable = 1; - // Play it - inreg.r[0] = 4; - inreg.r[1] = -15; - inreg.r[2] = 1; - inreg.r[3] = 1; - _kernel_swi (Sound_Control, &inreg, &outreg); + + // Alternate between channels + if(lastnpcchannel == PCMCHANNEL_NPC1) + lastnpcchannel = PCMCHANNEL_NPC2; + else + lastnpcchannel = PCMCHANNEL_NPC1; + + sound_pcm_playsample(lastnpcchannel,PCMSAMPLE_DURNOTORPEDO); } } @@ -195,6 +199,7 @@ void game_draw_player() NPCS[Player.targetleft].location.X + ((NPCS[Player.targetleft].hitbox_bl.X + NPCS[Player.targetleft].hitbox_tr.X)/2) - 1, NPCS[Player.targetleft].location.Y + NPCS[Player.targetleft].hitbox_bl.Y ); + sound_pcm_playsample_ifidle(PCMCHANNEL_PLAYER,PCMSAMPLE_PHASER); } if((Player.firingright) && (Player.targetright >= 0)) @@ -219,6 +224,7 @@ void game_draw_player() NPCS[Player.targetright].location.X + ((NPCS[Player.targetright].hitbox_bl.X + NPCS[Player.targetright].hitbox_tr.X)/2) - 1, NPCS[Player.targetright].location.Y + NPCS[Player.targetright].hitbox_bl.Y ); + sound_pcm_playsample_ifidle(PCMCHANNEL_PLAYER,PCMSAMPLE_PHASER); } if(debugs[dbweapons]) @@ -502,9 +508,7 @@ void game_tick_npcs() NPCS[i].collidable = 0; NPCS[i].sprite = explode_start; NPCS[i].explodenextframe = tick + 4; - sound_play(1,-5,0,100); - sound_play(3,-15,0,1000); - sound_play(2,-10,1,100); + sound_pcm_playsample(PCMCHANNEL_AMBIENT,PCMSAMPLE_SHIPEXPLODE); } } } @@ -792,38 +796,14 @@ void game_tick_input() void game_setup_audio() { - sound_voices(4); - sound_set_voice(1,"WaveSynth-Beep"); sound_set_voice(2,"Percussion-Noise"); sound_set_voice(3,"Percussion-Soft"); - sound_set_voice(4,"DataVox-Voice"); - sound_pcm_loadsample("sounds.torpedo"); - - - inreg.r[0] = 4; - inreg.r[1] = (int) audiobuffer; - inreg.r[2] = (int) audiobuffer + 20000; - _kernel_swi (DataVox_SetMemory, &inreg, &outreg); - - // Unsigned 8-bit PCM - inreg.r[0] = 4; - inreg.r[1] = 1; - _kernel_swi (DataVox_Type, &inreg, &outreg); - - // Not timed - inreg.r[0] = 4; - inreg.r[1] = 0; - _kernel_swi (DataVox_Timed, &inreg, &outreg); - - // Bitrate - inreg.r[0] = 4; - inreg.r[1] = 4000; // I was expecting this to be 125 to 8KHz but.... No idea - _kernel_swi (DataVox_Pitch, &inreg, &outreg); - + sound_pcm_loadsample(PCMSAMPLE_DURNOTORPEDO,"sounds.torpedo"); + sound_pcm_loadsample(PCMSAMPLE_PHASER,"sounds.phaser"); + sound_pcm_loadsample(PCMSAMPLE_SHIPEXPLODE,"sounds.shpexp"); } - void game_draw_hud() { draw_sprite("lcars",4,DISPLAY_Y-164); @@ -873,7 +853,6 @@ void game1_death() { int currentstart = 0; int introframe = 0; - sound_voices(4); sound_set_voice(1,"WaveSynth-Beep"); sound_set_voice(2,"WaveSynth-Beep"); @@ -926,9 +905,7 @@ void game_tick_npcs_scatter() NPCS[i].collidable = 0; NPCS[i].sprite = explode_start; NPCS[i].explodenextframe = tick + 4; - sound_play(1,-5,0,100); - sound_play(3,-15,0,1000); - sound_play(2,-10,1,100); + sound_pcm_playsample_ifidle(PCMCHANNEL_AMBIENT,PCMSAMPLE_SHIPEXPLODE); } } } diff --git a/!TheEsc/c/Mission2 b/!TheEsc/c/Mission2 index 295fd5a..1830057 100644 --- a/!TheEsc/c/Mission2 +++ b/!TheEsc/c/Mission2 @@ -165,8 +165,6 @@ void game2_death() int currentstart = 0; int introframe = 0; - sound_voices(4); - sound_set_voice(1,"WaveSynth-Beep"); sound_set_voice(2,"WaveSynth-Beep"); sound_set_voice(3,"WaveSynth-Beep"); diff --git a/!TheEsc/c/Sound b/!TheEsc/c/Sound index ae79070..72d8ea1 100644 --- a/!TheEsc/c/Sound +++ b/!TheEsc/c/Sound @@ -13,7 +13,7 @@ int composition_startcent = -1; struct CompositionElement composition[COMPOSITION_MAX]; -unsigned char audiobuffer[20000]; +struct pcmsample_s pcmsamples[PCMSAMPLE_MAX]; char *notes[] = {"AX","A#","BX","CX","C#","DX","D#","EX","FX","F#","GX","G#"}; @@ -28,7 +28,7 @@ void sound_composition_load(char* filename) int length; // Attempt to get file info - inreg.r[0] = 13; + inreg.r[0] = 5; inreg.r[1] = (int) filename; _kernel_swi(OS_File,&inreg,&outreg); @@ -38,8 +38,8 @@ void sound_composition_load(char* filename) if(length > sizeof(composition)) { screen_nobuffer(); - printf("Composition exceeds %d bytes (%d bytes)",sizeof(composition),length); - exit(0); + while(1) + printf("Composition exceeds %d bytes (%d bytes)\n",sizeof(composition),length); } // Attempt to get file info @@ -198,12 +198,55 @@ int sound_composition_incomplete() return 1; } -void sound_pcm_loadsample(char* filename) +void sound_pcm_unset(enum pcmchannel_e channel) +{ + inreg.r[0] = channel; + inreg.r[1] = 0; + _kernel_swi (DataVox_Unset, &inreg, &outreg); +} + +void sound_pcm_playsample(enum pcmchannel_e channel, enum pcmsample_e sample) +{ + inreg.r[0] = channel; + inreg.r[1] = pcmsamples[sample].data; + inreg.r[2] = pcmsamples[sample].data + pcmsamples[sample].length; + _kernel_swi (DataVox_SetMemory, &inreg, &outreg); + + // Unsigned 8-bit PCM + inreg.r[0] = channel; + inreg.r[1] = 1; + _kernel_swi (DataVox_Type, &inreg, &outreg); + + // Not timed + inreg.r[0] = channel; + inreg.r[1] = 0; + _kernel_swi (DataVox_Timed, &inreg, &outreg); + + // Bitrate + inreg.r[0] = channel; + inreg.r[1] = 4000; // I was expecting this to be 125 to 8KHz but.... No idea + _kernel_swi (DataVox_Pitch, &inreg, &outreg); + + // Play it + inreg.r[0] = channel; + inreg.r[1] = -15; + inreg.r[2] = 1; + inreg.r[3] = 1; + _kernel_swi (Sound_Control, &inreg, &outreg); +} + +void sound_pcm_playsample_ifidle(enum pcmchannel_e channel, enum pcmsample_e sample) +{ + inreg.r[0] = channel; + _kernel_swi (DataVox_ReadAddress, &inreg, &outreg); + if(!outreg.r[1]) + sound_pcm_playsample(channel, sample); +} + +void sound_pcm_loadsample(enum pcmsample_e sample, char* filename) { int length; - memset(audiobuffer,0x00,20000); - // Attempt to get file info inreg.r[0] = 5; inreg.r[1] = (int) filename; @@ -212,21 +255,21 @@ void sound_pcm_loadsample(char* filename) // Length will be in R4 if it exists length = outreg.r[4]; - if(length > sizeof(audiobuffer)) + if(length > 100000) { screen_nobuffer(); while (1) - printf("Sample exceeds %d bytes (%d bytes) object type is %d\n",sizeof(audiobuffer),length,outreg.r[0]); + printf("Sample exceeds %d bytes (%d bytes) object type is %d\n",100000,length,outreg.r[0]); } + pcmsamples[sample].length = length; + pcmsamples[sample].data = malloc(length); + // Attempt to get file info inreg.r[0] = 16; inreg.r[1] = (int) filename; - inreg.r[2] = (int) audiobuffer; + inreg.r[2] = (int) pcmsamples[sample].data; inreg.r[3] = 0; _kernel_swi(OS_File,&inreg,&outreg); - - // Fill remainder of array with final byte - memset(audiobuffer + length,audiobuffer[length-1],sizeof(audiobuffer)-length); } diff --git a/!TheEsc/h/Sound b/!TheEsc/h/Sound index e628a44..ad139c6 100644 --- a/!TheEsc/h/Sound +++ b/!TheEsc/h/Sound @@ -37,6 +37,15 @@ #define DataVox_AdjustMemory 0x443A2 #define DataVox_SetInternalPitch 0x443A3 +enum pcmchannel_e{ + PCMCHANNEL_UI = 5, + PCMCHANNEL_PLAYER = 5, + PCMCHANNEL_NPC1 = 6, + PCMCHANNEL_NPC2 = 7, + PCMCHANNEL_AMBIENT = 8 + }; +enum pcmsample_e{PCMSAMPLE_DURNOTORPEDO, PCMSAMPLE_PHASER, PCMSAMPLE_SHIPEXPLODE, PCMSAMPLE_MAX}; + struct CompositionElement { signed short int Start; unsigned char Note; @@ -46,4 +55,9 @@ struct CompositionElement { unsigned short int Length; }; -extern unsigned char audiobuffer[20000]; +struct pcmsample_s { + int data; + unsigned int length; +}; + +extern struct pcmsample_s pcmsamples[PCMSAMPLE_MAX]; diff --git a/!TheEsc/sounds/phaser b/!TheEsc/sounds/phaser new file mode 100644 index 0000000..1c18b1d --- /dev/null +++ b/!TheEsc/sounds/phaser @@ -0,0 +1 @@ +€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~~~~~~~~}}~~€€€~~~~~~€€€€€€‚€€€€€~~~~~~~~~~€€€}~}~~~€€€€‚‚‚€€~~~~~€€€‚‚}}}|~‚€‚~{~}€€€~€~}}~€€€€‚‚‚€~€~~~|€~€€€~||~}~€}{||~€„…‚…ƒ~€€€‚‚€~€}}}}|}z{||||}€‚€‚€€~€ƒ„…„‚}~}~€€€€‚„„…‚~~}ywuvuy|~ƒƒƒ€‚„ƒƒ€~€}}|zyz}~ƒ‡†‰‡‰†ƒ‚}~{zywz{|‚ƒ„…„‚€}yyyz{|~‚~}‚‚‚„‚~{{{~„ƒ‚ƒ„}}ƒ~{xy|}„„„ƒ|{{}}||}~~€€‚„†„~€‚}|~}|||z}}„ƒ~€{}€‚€{y|}~€„…„ƒ€€…†‚€~|xzz{yy{{‚‡ˆ‡†ˆ„}{zzz{vtw}€……‚‚‚†ƒ}xwyz€‡…ˆ‡‡€~|vuwyƒ‹ƒ…yztx{ttv}‰ˆ†‚Œ†Š~yzz|t{xyw~}„ކˆ’‰ovijjsvow}…‰™”—Ž˜†ƒrnchxr{v~t†ŠŽ†Š‹ˆ’‡y}yztsjlrxs{Œ…”Œ‰†…‚rx}o€~xtvs{{‚|†‰Œ—}„€~uynmq„|Ž~„‰Š}‡{ˆ‚„‚ltrjwt…~€„„ƒˆŽ†„xsqe{}†zv~o|„Š‚†…‘ˆ‹”}…x{smiiqrŒx†ŠŠ‹Œ’x|‹suzw}m‚b~x}ƒ~Š–„ƒ„ƒwqpjwts}o…™‹†wƒ‘ƒ|x‚}xhtsv†…‰Ž’’Œ}Œ€qn^q}…Œ’„…‰x‘}„ˆ{†z{mvhlwƒuŽutƒŠ‹‹‡iƒk‰ŒŠy~v‰‰yŠz‚”€tz{ƒ‰qpwvjo†rvˆƒxƒ{€v…vaz‚wjq€„„~‰~‚{s}ŠŠ†rdf~oqƒ„}t„…|svyˆ•€few‹usrmu‚“vyž‡uˆ‡ƒ„z€{t}…{|Š|ƒŠ…‹ˆŠuv”•saq ‘lpo‘­Œœƒl¢¤˜†y“{ypP…Œx†›”Žƒ…Xokw^l_S’zo€{t¤‡m}Rƒ«—c]Pq•™g…§‹•dclŠ‚wŽXo‚ƒ{\wwxŠl\bI”uq~]lxq†‚tk{—ˆYiƒ›}r‚¥¥{wˆ}‹wy¸~ˆ—yhy¨—gNy’¤žUvrЦ‚txjoˆ˜­`ov‚¯Šr…•r‡[’Y~Í{Ž”]ºw€SPn°a‰½B¦¨K‡;šƒ\•a¦|Z¡‰hH…bj­My­_sª<{‰s]nƒ›e“bb•žW™eEµ¡kŽ¥Th¬ru½nJ“\˜ xb”rе™]Ѝv‰ªˆLruh{œauk‹²Hpšgr{savs[ˆ•n[”°Ÿu„¤ƒrt‰yŽtCŽ“h„¨pjt`˜ƒultoyÁ\DcuºX\U˜bºtGš€‡Œ\ª•d³|нy™ g—…n¼t^{Oƒ‘z¢ªe——`µ}<…mnƒ2Ž>k wŒ¤h‚vwŒu{jwilˆ‹—–b†³r•’l—zM–œYž”kwf‘XpmbŠuŸnfv”›@\‹vzpŸ’fŠŒš™Žˆˆƒšš“‡y‡Œvs€‰qv‹ƒ†‘…ju}ˆ†hcgWq‹ob]}š†˜y›‡zˆkp„l|th†z“l‹…†˜vuxƒ›w{‡‘ƒj`…•lkˆ‡œ…c„Ž…ˆhh‚}wqe‘‰…rq‰–‘rlŠ„‚wb^“Œrm†”|r›Œi„uyœmyd™zŠƒŒ®€„Šru‚krmZ`z…‰{a{“£Šjx……u]gŒ{`~‹Žmw™Œ‰ub’˜|}¤˜u…Œ}}VZ†…xyy‘£Ÿ}vˆx–UF`}j]bw’©”vm“˜‘~iyƒ‘zdppŒ{r›œ¦cq¡•…mf|s‰xKVg†©‡…ylš¢€uf|••‡lkzxxcd•“˜{}}mtƒ‰…Š‚f‹}n†x‡‘z†’„l—›`^hˆlT‡š‘t¥¡…“mv‡c’l]y‹dvox™„}¡ppŒ{gXzr‡‰€y…Œ¦ŒŒŽŽ®vdwszaO{“ƒ‚j¢†{¡—€–yŒ‹Xi^byu{t€‡‰s]qj——އŽdŒxx›w˜ˆy†v’ˆŒŸrŽw{~Szio”u‚u_ƒxxp‰¬Št\‚~`JoŒ“~i†£žp{‰˜¦ƒ|re”‰“uU‘™š›MŽ–t¢B}¥„˜@W•sŽEUœq²]H²{j9­v‡Z•¦Žq]‹x¤jC–ƒ¦¬I˜¿ŠÍb`—_–‚4u„y£YY~~›¡dn’¢Ž\Xam£q^piš¢sl|t¿”X¤b³Pvfœqf„x……‘µxošv§|L„d‰€Rxw©—b€e§©XuP~°lgkf«•wW³’¥z4†rŽNoz–®r{{l¥‚uydŠˆ‡|m˜•Žqf›”–„PX{†‘€Mn‡—»Sqs™¹i_Xx¢x„n_¯l€ªY©]§dvV–f¨oƒ™f}b—‡bn†°as~p¥ˆbƒ‚«–bŒk€•I‚ˆTœi_¯^t¢P”œ[u¥xl‡^l†|‘–swŒ™œ€[f¤žvnc¥jYoŒmj‚§pZ~q•–rr|—{yzlŸ›y…lŒb|pn©•ƒŒlx€uwnŒ’’€‚t|cƒƒc‘ywŽfl—a‹TŸuU¡g~¦eŒ˜o’€mƒtˆ…z„eŸx¦vYi‹¬Rzd«sj‡Q‘šq£uh•i f…vL‘Š„«tcxpˆeƒ|w™žˆq]{‚ŒŽ_ˆkƒgM²‰i|O޾Šsfr“’`Pˆ•¶B}˜†±f=ž‹©nk°‘zf\nª…cˆoŸ¤Ac‡Ì„j‚‚T[˜¦zmY_±¤€om»±{tzc¡t1rmÊa‰c—¯XaqkƤcl\‘y\Rd‰˜nˆZ}ªO|˜i¯ž\meŠ–u{c~šx|h|¦„j‹ˆ‹»}>wujƒPSФšxlm’­ig}i°Ÿa„o–Q]e^§¢‹•v¨¶‰ƒVX™š}hTv˜¦’Mbˆ‘ÅfrЉ›‰@Zof“•†—š­Œfp€‹œzc‰•}`s“Š“|p¤irYsšxopj’{pŒwttmc‹j‘–u­ºq]cV‡¤€j[k’•|\aª]pvywgTfzsuvsqwˆ‹Ÿ—†€lxngog~z•Ž~Ÿ{cƒxwœ¡„v–s_x[‘‹m›u Žs€b^ˆŠŒˆd‚s_r‹’‘vu––œ‚\z–w„–wŒ’›tkŽcf’q{ŽŒ§“Zg’{|cd}‘vbjxx ¤€™‘yxˆujvs‡sspn}›‡jzŒ§ŽjtœšcDf“†}ltƒv]}¦yy‡„bGSjƒ‰tpy—£’ql‘Œ‹~z€Zq_o‰v—r¥Ÿu¤vuŸ‡{{s‹y‡eŠUmg«u„{“ަ~k[U‚‰’xcmp‹ ƒu“†™njƒwpUr˜“Œ…q“u†T€‡_•Yypw‘}’y€•}r{{{to€l ~]‹oމi†–~pm{y‹€UpŠ|¤Œcm‹œ~‰yc§›zxTq§—vmRpž “€y‹—„kZj…‡|tˆ~w©ogb•†‰ƒ^“z…ožrt’eЉžiŠ”‰}kj„ƒo‰m”‘pžS~‘Y±t€zL†j|lesh¡›‚–vsŽ{u~{uuty€˜~‚……¬{v…pŸ©ykn™“ySDxާ”flm™™ŠYoxƒ_jOW‡xž£h†v­t¤ƒe W{—LŽƒZ¦~«e¤”vºrˆƒd—^q‚W‰„t‚|twf†Ž`ˆlNfh…Z‰|v“p‹Œo•‚~§€u‰mx{i„y‡¬”—¤’‹{uˆ”{z†‹‡Žrvˆ€“„vn~uM‹xR˜fLt…O†TO©oxŒb}wvnKu£†˜˜lˆ•‡‹oT•’ºr{™U˜–b¼†€ºNˆ”C´ykÁb”•>’kU¤g‘Lƒz€‡mŠ|Œ©†‰\aƒs¢{hˆc˜°yhI§Š’­QyyK–{y ^€‹o’ˆg^my¥nj{Mq…^‹]ˆ…w—ˆxkRoˆ¾¬”VŒj¦ge¥~ž°y‡Tw’d®™€³l^‰emsg‡‰ƒ€‹tn^€p||—•oie]€—q‘‹kœ‚]„Yvc‹ot±€‡Ž_ˆsu”Y{™k•…MŒ}n½•rœkr˜nin~—o‡ƒl†zŽ[™‘\©‚Pªpi§b‰¥a€Šc›™„slx‡oŒ…npw€‡…s‘ze¢‡gŸSl§O„•T†‰|¤…rŸ›‚tjNo^‡Wq¤œškwƒœuqlmQ‡=§e³pp»v…y[{ŒyœŒŸqT`^•ye‘…zª}ƒ¬ca³{†žM’œ\ŽaT¢a{§‚£ u’£’ughQi~a‰^ž„]«g²v‰»k}va‡aXQO’…«toq— bˆX‡tH€iJ‘‡­‡|¢x€•x‡bw€[§‰O±lfºr“µfˆYŽtx’‰†„‚”„Žr\œ|^€ˆvœŠY}™y|‰pw‹vi~bv‡_‰sq“Œˆ{{wmm‡_ˆ‘[t…r}†nŒumˆŠqˆ©‰ŒH’Že«ˆkjdˆ¢qŸƒsÍd‘tsŸan~{ˆqhm†–‹‹—~˜‘f“ŒV…Up™Va_s™|ƒ’~¯•qŽue›k\ˆH{ŒU}dpœˆ­šª_†UP‹of—}P’uz´“Šƒœ¨rXQŽui‹mœ…†£ˆ€¨hx›~‡TQƒWƒ™uˆ£šƒ¢suŒgq„o›jH™g}•e¨Ž~f‹Š‚yJ]qŒzq¦{^{©€•WXš{ocO¢‹k‡–†§pZ‚‚hwƒV”¬h„ƒ]{c‹{z…r†„lz‰t{Š›bw¯~{wMt}aœ’v—b†—u“{wЇ‡’O£Lƒhb·”Œs§zdiVŸ„zV¢n§Œg nŽ[zvt zw…†~Snˆuw”–xc{€—`zˆ‡“kƒy…•gtcl‰†rrž¢yS‡‚yCxˆg™bp›iwmr‘„rj–vt„Zw k{ycŸyƒ¡k¬‰u¹pŽ^–l„[œz‚ªiœ±€‹|qŽ‘roŒzzj\‚jj–‡œ“l|~†sh‚j‘…X˜w}ˆv”¨•o“taˆldŒp‡v‘Œq‡…¦zi„\\‰oŽnzzj¹qL‡fs©p^oiWN¦“grw„y©xaz‡|žŽXŽ…`šii‰žŒO‹hr§L“z¹Š†•VƒoN‚iqŽ‘‚uys„„t…Žˆq`m‚Š€„—¯rz“V‹‹auЉt¢†ˆ–t~‰ƒu}p––oktzŽmsŽƒœ‰c‡‘…jwz†ŠkZztxw]q—’…p~ {t€j¡ƒ[‚Sž¥J†evˤv…„ ”|Wc˜wcE¦§v…8a—…‡`_…¥yugX ‹D“LtÁf¡i€±r–ZŽ„z‚lŒ™œxuœ”ˆ¤[t­‚x]{v„>s³n‰}Lœœ™Gn]ŠiM“ŒƒœhušŠ|qd™˜Ÿ§Ÿ¬¯~z~w~Šc`‘›ž„€_’‹hkoФž^`Zp|][Miš‰Š‡Y«|“`c‚’|X}„|{[~x”v˜qpmr‚f†rrvq‰–ˆrqp©dJ“{†Hc­’nF© ‹”Owšo–sX¶…§d‚l`‘|`p_¢¬y—hŽÃ†…bd»wYg:„®{‰[[Ç‘•™E—¬Ž±Y@†aƒŽ7j†ƒÂŠe‘xº®HmisÁ…Vlc£‘OkVi»q–z«¯noav vw€b‚¦kyPx–‹s{€š”¢|W†”|ŽkK•…{vWkŽƒ•px®š™‚]p’‚†Em•xŒu[z¨•ˆŒ{z£€£|X—dSœgJ«Iˆ¥K­vhÆn€žX•…m]`¾e1Ž“s°{G­Šž°Ubr–‰Ouvœ‘r`a…‚}qe |~’iª‡u’ˆSdmyŸ‰vl‚žµ~|w{¦ŠyCnw’›dMi ~‰X[¢¥ ”dJ{k’Fb–nŠ˜q˜cžx²›\‹t€‹bHš}œzt­™ƒeq½y\Œ3n²Q‡‹Wœ¶v£†Q¯Žtkk‚ybuVv¤oˆŠ•‰ˆ¨•w~^]“qala®š~pj›—Švq¹›UqOc¦iQ‰k„´rz~j£~X‰iwš_x‰]«vfha‘jh}¢ªuNv¡¦¥YY“}[jƒž§ou„¦˜~’s|“z[|‡o™qx˜€…lŠxƒztž‡tmQ{‚Œepƒ—Ÿ”QnŠq·„E€{œnko‘Ššq[Ž™ll‡“jxs_¬‚dq\s˜se}bu™„‘xU}bvŽI\xv ªuW–Zf«‰hw«–rj°ž£}p¸¥rƒmq¬…v‡„ƒ¡“f—jj˜c…js¡i°™PŠ{b‹sJcy„³¦vbˆ›ksY<›trtd¡£UŒQF¹Uo^rª™Ru‚bž¢fhr|¥fx’x“Š‹qs𝀓ub•sw[Q‚Ï£q‡‚¡cE‰u UH‘˜´xk„¡‚rY|‹©pR”}zšxj„‘–€vˆ‰e`}kršguto“„v‚X|—‚œzYa‘yŽ~dz„“‘~jwŸf­œŠ›w]yžŒpoS}´––y\`…‡¦„_Œ^~¢}ux]9”q§p`¢˜ŽzWv thq}~„{…¡“†œ[‚‰„…zts”y[~ˆ€´€b{“‡vj’gh~`—W’¡m˜}N–}ŠRx‘žOZˆh„u€„Ãky¤V™«[{jw‘rŒcg¦„–“uv¯ oše]“agT£d­—V®{‚™Xƒe}­X’|Qš€†I•ZŠÆl†}„Ž£™gZyi{vˆŽ…_ŽŽw•y‹vƒnw†AŒ‘cŒ]m“c{mo©w…n`‰•koxƒ›{ozr†£“d{lŽÄuŒZe­v“fs¬rmŸbsxSŽ_š|IÍ“tªrw‹a[bj \r·Zžo¸‘z•i}‰Y b¬Zi‡Zžxl—s’Ì|‹‚Z¦scKh•^•‚Xu›¯n¤“]lZ’{g‰lk~\˜œVª³qŠƒnyux\` oi¨mq‘z‚Žfy’u•qpy•zi˜su¬g¢¤f©ƒ‚šT‚‡7’‹V•‡ey’›tk³jCœ~`›Š;l©{dv‰}k•xY ‘rª¥b™‘U—|m˜qŠˆY±|N£hq¤|“W”†}²]MŽ{Šˆ`pr{™€Š†vvˆ–Šˆau}{…{]|Œˆ~‡okvpjz|mŠ´{•Q††nZd™e»@u³p¤žlVvª_u TlÉ|j•Wtmš]}›iz¥vucaXv–j’²Šovz\˜‰AtŸ‘™ww“‡ …‹j|oresrw‰{u¬š‘h™qxšEYh‡re£v}”s‡˜s˜¨†vŠˆŽ v…gbri~‚°|y›k……ˆmGˆpWo\{s€wxf`®fm”6pˆ|‡^u‡o~“~ šXŒœ|“`a…Šwbrˆœmu›f“³`Š«xxaf~z•nx¡€‚•t€˜ƒ}iqƒœc˜•R«‚Y™[Yzz{‡r{µ}‚›O†…k}^|zx|q¦oš±‚}{j£†ƒR[¹{€©c‚ž‘ºmh‹Qs‹nj‡Št‰}{„‘_‘—j|…™oƒB¨¥W‚{’’pq“•ksq‡’P]YT…eYn\}^i„Vp‡C]eZwl~od’„y–…{}~«{vª‡„š§š®€Ššž}Q{¡˜…Uyœ”‹ic›£–}frikjt~„zŸ¨ƒ‘–mvŒ€‚yu–“`¦uc—zz«†M|¡{gr‹nm›~k’˜p‹ƒx¨‹Q[_£}…„dŒ½}z‘\Y[ˆ¥‡~}ktš~lb]…k vSj‰oˆuWµ’z‚Vz¡t‚‰Ltl˜q›©ch•¤ƒPgosÀ‡KŒ~‚xƒ³rgŽNr˜{ld~¦¯}~_~~hy¼jl€r±vop‚˜³ii™xj‹w]vti­Œs©±‹Vc‚oŽ~GYœ¨–XO˜ŽZ“…`Èžo™Iy¼V={~mv_}¡sr£ˆs‹hq¥~hm…Œ‰~c{moª€nžŽ˜™~…•xbƒo_¤‘l|i‚|f‰‡ˆ‹”vu«‹?Zpdw…lzw±ŽGƒ¹œ\ˆ{¢‡aŒ_Ž­nmh¶ukÁo| ^“eo‹¦†”RN™aqk;‹„t§do…cˆ€eyWŠ’a‰vnr|¼‘oÁ ’޵‹„Uf—_¨¬7‚«˜ÀS_ ]thXi”Xv|qƒT‚›Sƒnm{€[‡–ƒ’aœož—Wu´}„w`}g…ކx˜?œV˜c_°gjŸ…n£|e¡†e‡Z‚˜jqžmŸ‹rƒ¤zx’`ˆuj‘šuzš}nˆpw™oŒUp€€oWt{z¦‰Š|^ –y†Wl£yar^Œ|eƒ˜¤’„ƒrŸ‘Mz``’W]Œ‚£|R‘‰“Ž]~šœ¨Zi©ŠŸŸaƒ‰¥qw’“žo‰˜Ajy\¡f¤xŠ’~f Q‡‘‚¨_l†€•ki•‚wdm£‡y«ž[|kV˜~ya6¤©z’puº}z–Z|qg‰gz…I{g Š[£§…Ÿƒj™’[e|„…lha…¥bht¿‚€Ž¨s>wl}QXz–¡zmt•°€xk¬ž_Tvx‚˜fo|ÆvJyt£¹]i¦­gV‘O˜ˆ@ƒx”ƒ^‡•ƒm}’”tsŠtz`Sˆ~…s“ ‹›oj—„Š…jƒ“|WK‚o†“b˜—•¥ot†pxzYmg]x•o˜‡€˜…wšcƒIdv ”{{~uª„hxc±›`fj–fVއ—¼ŒvpTz…mj‘Œ¨ª`yt¦ggnrŽqj’›–vK{¤‘~f„{kp^v‘te‡|¦ƒB‹‘y¨nfš{†xvz‰“w¨u„yj°ŒNn„hˆuJ‹v‡I}´l£ƒ0†W|Diœ}\[¦¬ryšŠÝ“WŽxœ—vZ€£‰y|¡‡nQ™‹’’:{u‚a^n’vBnny{iˆa¡q}’’¢syšh{lbœ’‰‚}„¬¬‹xZ‰’—onv—€R~dfžh kŠ|Jw›a‰~T«–bz\p —zoŽ™’ƒgI}™…šW“©}‚s]¡•xŒhzp¢qO—{s‘jœˆq|{mˆ~nŒ~kw‡…ˆŽ”p…¨LvUžŒbs…’~jv|‰š‹oŽ…}œfeq[|}yvj‰‘n—©q’]–Ž‚|Z€€“er‚{”…ptu¢²‰pZ‡¦€|xi„Ÿ€[j‘€•”T`¤©…€‚“‹–†cp”ˆl†n{¨‹l€p„™jvŒŠ—˜l}ˆrmef|Œkv„‡…|y|†‹u€„U‡•~vWgm”a\“ˆ‰x‰g…”Pd‚k‘[xŠŠŽiT™ÀpU‰p•£;[“„¬‡`—”{”“Zl’w³W™w|cm©œŒ„x€®|q}G¤–j‹uy¤zijs†‚|v‹|k‰}ƒ¡auŽ‚ŠrssŽ‚gu‰€£‘ewv~›mjta‘a‰…eœ™Œopr•¬[actŸŠc„}‰¸lf…{Ž—Z]{‘¬ŽuVz†ƒ…Ov”œ§d\wt£p`”m°°f^a‰ŠŠsOœŒƒ¿fU‹¯ŠT†y›¦YfPƒ§to‡tŠÂu[ŠŠ…oZt‹ŠŽzO‹tƒ¶An«‰®ŒF€a”­ZmQ ²tycm£’s‚†™‡ƒ€`Šz…›_YŠtuS_­ˆƒœj„”†o`{wƒ‚l†ƒŒ„i”ˆž—ws|‰yn|~ƒŠƒ_`s‡št]«‡€dgu}¨~khŠŸ…QYj•‚yc¢«™Xxrp”hz‘—yuf}o]Ž•‰‘fjs€eL•‡€µgz¤w zcŒ‹enj{kz¢“‹a}v‹l{xˆ}]`s†Ž~o†›˜{…xzvs~pvf‰k_’{—–›™˜s\ycKwq\›„t‰©ˆwpu–Ÿdpm›iZŽh~Šj‡«‡}‡xžƒ†gŒ…wy|„whss‚||~šˆƒ„}‹l~hfƒjaax›cŒ”¦–„‡’ŠjUr}Žyn~o’“¡l^²–šSKtvzrRqƒ‡‡ƒ}„ „oqrƒ…ƒnry`v……©Œ‡™„¤kr’|unq|pvo~z‡‡‹Œoh­}v…[„ŽM{d‘v‚Ž›†‚—a‘’k˜qY”vx£`s™tªR‡{¢yz‰urfgrhmznީЕw|¤_leˆ[ŠŒ`{Š…Ž{}ƒv–|’nŒp‹‚jag¢‡u˜|}—e|–ywyqŒ›ˆŽˆq‰…z„k}ri‘yw‡l‰˜‹ƒy˜ŠW^uY„c€€`…›{‹~y†™”}qlz~‰yw™~rœ’€‘pvž¦ š}^vv’pmƒb•ŒuŸ€i\n‰utaXyo‘lsŠuŽ–zzf|y…žttŒ{‡špt‚u”¾qs‰q‰—}hu•o’wY{xi›”lvX]”›Šc_”Š›mdƒyz•†{~mj”–™€€f‡“žos†u’w‚R€š}£…Hov|–mx~{¢€jŒo‡vv“ya‹Œm‚~ƒ‘•}q“|‚ vcp{yw}j¬˜mU‰’ecvˆ¢wŒ‡h“mss‚˜Œ}{Ÿ•utoz{bwu˜}ˆ]†’xoo“€œ”cqy}‹aKpp“½q{|¸ˆlsZ{ŠvmŽl…jyo£sŠ–¨NpSS–uZƒŽr“‘†‡uƒ’tg|†~šjƒby…ƒ‚…™xxn~u†£uŒ€j|btm|~£h‰}y’ƒhqzo–„j‡^uŸl”›c¡|i»ujG‰”qryŽ~»jO–\ž‹Bƒ‘š©S]~msmsb˜‚g¢‰”žr‚g}µ{wwer ‘vvm“‰‚pm—£ktŸz¨ŠXoˆ™kSr†®xQ‡‰’­p`‹‹‘tqš„ŽxNŠ€–vi–†xƒXk}f{Šw•™xˆo†^€\_‰“štxwt±{pŠT©nu]o®xjav©¤ˆduy“uVnŒ›tSs‚¡ƒe…Š›Œks†¨šmUo«Ÿz_Pˆžv”‰Y—™z—z{onŽ‘qdh‡›€ƒ}?nŸq˜ƒ{ƒ‡Mx¤aˆŽi‘{pe„cT`ž¡“z„‰¥uO~|…Vm•„›fJ€—œš_WxŒ”~vm‘ŠNxŸŽ˜f\Šš­™^`v•š|eˆ†Œ¦zbU}Ž“•ZOy†©‰|h^”w€™Š‹†„`ˆ‰F„ˆ^¤…xi€u|œ„by—šUf¬zIbO‰³€q\‹Ã’jip¶wRwš‘…WKo‡šSu ›‚j›¬ƒ‡n`“rrxZƒ‡…yr˜“t}ŽŠ¦Ž}‚T‡zl~Nu‘…ªŒu s}¤X}™^“‰lƒ†jmˆ}•Wyv´€~—‡šv_vmzwMv¨”{tYr›™q|“Õ†fwj||M9j€“¥ll¦¬©•Yt§jawjfa†’ˆ’m€Ž«}v|f•}i~emuo—ŠZƒˆ°˜˜otzŠtwdR˜…–‰އd‹€†¢p\Š„›aUm”‚c_yŸŸfhqi™‡Z`l§¸©kTŠ›u5[£Š““Kм¤}R—zˆ–KvŒ€–`wˆhžpd²j­^}g:«„Y‘WžÅhzS¦„d_}’z|l|‘ˆž•‡ªhT`“Ëcf…a­žYjQiž‹†x~y…›Š‡{injw–|aob€°r~ih¢±˜{lnr‚\m•q’œtž‘npj¨‹~bk‡¨|W|—mdz‚“zeˆŽkwiZŒŸ~mv¦^dk’§†fx¹ˆsjV£…ˆ`|ky„™ŠKj˜’¥wMq‡‹–nbpux}šua™iH—ƒr’mq|}p…|n|yމqqVi²’f…i„¿‰^|…«i|ƒY­€Cfy¤“s}l“§{nž‘ªla}V‘yQ€u©qwšœŽˆ“‡†Šyuul€zts•|ŽzŠœ‰“ƒiuo`‰[y‡m›}lœk‹¦a‚ŠlzY€ŽVl††‹yc†±˜~gm„szwctoz¡Šf•¡…œNU­yuU‰„b…§§tnXpÓŠWbN¤vb`|–“‘pr‡£¥jLM~œZ`s’¼ªbjvx¯„u{`Ÿªk‰wZ‡›‡}Œl©lw|€¼´Špkƒnnaa‡n› l–‘pŽoˆqŽ}lm}Xq„\—¨p’~U®œmyx‡‚sO…p›szpa{V²k•h}‡bs‹Hj•hˆˆ†›xvxi n‹rRˆwpl|›™q|Ž£…ns~¡yrrS|œyyˆ–žšwav‡Ÿœnesƒ¯vKb_°­tješžeW‰‡¶£Ctzi½g;{x‰¢ˆPpq»w€…k¥’^zud–hW¤ƒSžZŠƒ]³žu—z}€m†r^nXtªŸ~„š…—V¦”Zivi|e€w‹™|˜—q’‡z‰€kb‚]uxk£lz£p‘…_§‡—}dluoyq@qŽ¥mœ—…£ˆxojƒx{]dƒq…¡€\™–­zZ •isl_r™k|}g—§ƒi‡~všŠr|}‰xGw­‚Š|`‚Ÿ™\oun°f„\ª»Tˆt\ªu\|o©Ž€x~‡—s‚‡c–‹b}g]dsˆ{Š˜’‰™mxqt‡p_iwv†…ˆŠš{}y|hƒ„d‘z}·scšr–Œg„”’y[l——o`k{›lg¡~ƒ¢mœ¤n‰ˆwnpu}›|ui‘{iŸ„f©†… oZˆvpz}r€‰•VYzƒ°–@b…“—PT{ŒŽ‘So˜uyB|”—rUrƒq|Upž† ›ˆ{wŠ‹©fSyf¥‹xŒ‰š”‹zo†š mis¤¦v‹“”f‰sºse†c”‚j\†¤†xy| šP_pO ›mfnV{¥yXi‹¥”aYndsol@vŒ‚œmLˆ‚›¢Ti‘r‰nU||~~‹…Œ”V§v™h›Ÿw¦XxcZ«œs¨¡‰¯•Z“Žmƒ…‹™rivo|~Ž˜œ uqo_œ‘orR€³xleN—©go’p™›Mmfk›„{f…€~u†ušb€t@‘d¨]l­h{„`‘†ožŠ†]u‰Š’fqˆ~±\”…‚¡r oƒ_˜™zh€¢­ƒjjy©Œizlr„frŠ“—q`y{hjmt|ˆ–ryœvnxoŒ«ƒ_mvv¬[b²kpšyjpŠ~‡ ˜vstƒˆX|x‘ign‡l–€n”ƒˆŸk]…spqŠ£„sq…†„„rtŽ’“~uŒr–¤nƒ{wˆ‰tl›¢ ™h‚—l„Q‚†kŒj˜‡‹lˆrhx†Œew‹nkpKq‘kw|{z€…fwb]‰eƒbu…nˆtfif‡¨tlh¥ªYeˆ—‡_o¡‡ˆ‹Imœy–¥s‚—†…`¢³zœa“†w”ue–ž›§z{™·¡€rYˆ¤Œyfdž–|s|…hug«|a–cu‡czŽqljb~{ipx~~sysŒcr‰ow‚d{kwww„ƒ‚Œ‡€j~uvsaˆ‰ˆ“tr†’‰y|ƒŠŽ‚yuyˆ{~„“Ž”‚|vs‰|„‰yŠŒ}†sz”‚ŽrŽ…‰hfw†„k{ˆŒ…tx}…xrv€w~{r}zx{r|‚nqyq„‰xzˆƒtz{€w|~}…y†ŒˆŠ†…†‚‚wt‡†~‡~„ƒŠ†|„ˆ€Š|xxszzuy€€~…„~ƒŠŠ‡‡ˆƒ„xxx|~{}„†ˆ††‹„€|~}xtrtrqnovwuz|}€zy}~zuwx{zxyxy~~…‡ˆ‹‹‰‰Œ‹Šƒ{zzz~~{‡‡‡‰ƒ~‚‚ƒ~€~~~zzzwx……ƒ††‹‰‚ƒƒ{{}‚|ƒ……ƒ‚…ƒ„„{|€yyyuxxw|~}€}‚€||x{~{|zx}}xyz{€‚ƒ~}|€€€‚„€ƒ}€ƒ€€€€€‚€‚€‚~|~~}~~€‚€~~€}|}~~€€~€€~~}|}}~€€€€~~~~~~~~€‚~}}}}~€€€€~~~~€€~€~€€~~~~~~€€€€~~~~~€€€€€~~€~~€~~€€€€€~~€€€€€€~~~~€€€€€€€€€€€~~~€€€€€€~~~€€€€€~€€€€€€€€€€€€€€€€€€€€€€€€ \ No newline at end of file diff --git a/!TheEsc/sounds/shpexp b/!TheEsc/sounds/shpexp new file mode 100644 index 0000000..405aa99 --- /dev/null +++ b/!TheEsc/sounds/shpexp @@ -0,0 +1 @@ +€€€€€€€€€€€~€€~}}|||}~}~‡ž–‚womow‰ˆ‚xrmllkqvy‹”–˜™œ–Œ‰Švonqtuwibdinsvwqrƒˆ–—¨¬¥–‘Œ‡Š‰Šuopw}{jTXW``bhksŠ“„ˆž™–‡ŽŽ}u¢sƒœ­uu—†h]‰”\……]^u„˜}Sžˆc`Nr™™f|ž‘Rl“lT°z—›œj¡†cgx“‰wzUzhXx«§¢x„¡m`}]k8wqq_”·]u«”a•nv„¦|€ˆ\¦‡arˆŒ™‘ŒtmWirgŠ¢šv€”£tox^j_…œ¤’ƒ¨ˆw”’nm€WaxhNKClnqk‹±¸´®­ª«ª›Ž~shiiotow}sqodeotvxs‘‰ œ¡¦¦£ª¦ˆ\KLJORRQP[u‘«¾ÆÂ¶£~ohZVNLw™¥£››¥«žˆebgtvupiaZSKJKTZkiŠ´µºÅÍäݬ¯¨ƒ~~ti]PD;=ADNewk›œ¸Ú·™µ·œ’Šms^KDITdoh€ŠŠ“™›—’Ї|qk…ismopw‡‘“‘‘Ž‘“–›š™”ŒwoeZME<@4OQ•vš–­¶Á½§¾zUfz˜moƒwt^a‡ofd~ »ÌÏ·˜ybKQXPkŒ›Š„{~†–‹rYHBRI\o?­ž¥¯µÁú¬“mbW[^mz{¢®¸Ä qb`fjoqndVKDCHU]rª¸Â¹Íס„‚Œ”—‘ƒo^QJGGOaxž©¨£§œ‘‰…xlYPA[cE`ay£¶Ð¿©°…\z©¨•ŽŠŒ‹‡~rdYQOPU[ft‚“£¢§¸¬Œ|…ˆƒ|xfYGFfV>Hj—¯»ºÄ®ž}\w~›”}‚•Ÿ¨¥¥˜ƒpcRF;?J^ruƒ–£—s}jaz•sGd“”™Š}”¬«š¡yt‹{€Ÿ¬³¡™œ…^A"CO^}{€ƒ†…‘ƒqz…Œxqtnuˆ~y…žµÆÍËÀŒu–‡~T6bigpx}}~woJFL@>On‹¢³¼¾³£žŠ…•q_x™–†€œ™ƒr|mhc[i•ŠŠy{yokqoyƒ‚kXHIK_gI€¥®ª¦¤¥¡¢˜ºË—ª¡¤Ÿž£ˆyS9$(Gb{‰’“ˆytNNt„u{{sZy£€™¢¬²µ®Ÿ¤¢‹}lg]enšŽ„†ˆƒ|v^C65BUi{†Ž“—œ¡§¬®®ª¦›”…„k]b_]MIGJKeœ£°´¥¦³ºœgŒ–~s]LSG=HgŒŸ¯³©’eVPDKXvŠ¢ª¶¬¸˜ƒ™„‹x|oh[jt‰Š†ˆ‚ywuwuu ¡¢™“•”ˆ€vk`UJB;4DP6Dh~™¯ÁÌÎÊÁµ¨”ދІˆjYltn]YSPX`l|‰ªª˜ŠŠˆŠ†€uiWDJZ`d\j‘¢®ºÀÀ¶¬Ÿ‘‚wpgdfkv‡– ¤¡›‘„xld]ZZ]^^\YW]__hr|†”Ÿ¬¹ÅÍÎÎÇÀ°¤˜‘…YDEKSY\ZUJB=?H\Uz«¸Á½´©¢–°©š¥š”¤žƒthfimpwd\|a<`wƒ‰tgaŒ|‘œ¡—Ž„…‚‚„‹“š ¡ ¡˜†ymOIA6.04\€}„Œ”𢧱·ÁÀƼª—…Š‹‘wFBFJXzކdXcWsu‚wu†€~z|}…‹™‚²›š¾¨š£¤^y„¦zPel„U\hTPT`dcp{„¿©‹Œƒ ¸À°–nUXZgO€¡£Ÿ€€~Œ«ª|ƒfWUtu|yu‹‚˜xs‡—ƒŠ|˜¡ šœ™†}VF9MD5@\}•°£ ¬®“œxR]’ˆe{¥¡š{xcdfju‚•£¬®¬¢•Š„„vWirj^OEAGSdj…†}u|†—Ÿª¬­¦£’–h†i€”‘zeh\kpilw€…ŒŽŠˆˆ‘œ¥¦£ž‡…i[`eULA1MFUn†‰Ž“‰ƒ……›³°°ÇÏÎúª›Š|pjcd\PF:407:BMZjxˆ•£¬¸ÀÉÊÉÁ¸³‡‚ZNW2./:I[gu€›ªµ¾ÂÁ¼¯¬¶–ZY_dspyxlbXTNhzxz…‡”­¹¹®š…ƒycPosopaxv€“‘•‚tvyswŽ•z‚ƒ‡Šrpj’„‚—…—žŒ¤®‘„‡–“{kW>/+,8J\}˜Ž ¨¨¦”‰€yvv{„Ž™£©«©¤œŠj[SLKJDAJUe}–¦¯¯®¤œ„wodjpZfUZh~œ¤¨¤¡—’ŒŠ‡ˆŠ‹˜š™˜™hc{hE,(Qeq~{rw„qdlŠ–Ÿ¸‡¢…ž±›³œ™y‚nx~˜—™qaVF;+WQKY0Jh… ¹‡’¤µº´°žŠ{kkfjs‰¬œš©µª˜‘…‡€ypfe9IiEI[wwyeMq•£¡˜“”“„uss{”•­½˜œ£¡Ÿ•kL,@_jomeYifhipŒ «¸¹À±­ª™\]gtrNJFb¬‚ƒ~”’Œg‘–Q`‡‚Žt_Œš’zhPHKm™‘¦¡Žost|‘”‰Šˆl€ruftŒ˜—¥ŸœŸ“‘weqt}Œ`8Qs‹~unf_]_hqˆ“›œ¤’˜•Œ‰ƒ‡‡{sporx€†Ž•šžš•Œ†{€}vsnqnoqwxywsnhb]YTSP]SYb†‘…™“—¯ÐÑÔ¸´µ¥Ÿ””ŽŠŠ…ƒ|txbMhMfm90>NHjLCf†Ž‰’–¢¢£š“–Ž‹£™™¼ºž§«žš¢›‚]G0/8+>;W{£«›¤£ž›ž¥¤šhOKNZdr{„‰Ž‘„–‚‰‡‘§‘”››ŽubWUUWZ]^_a`behnu€†z›´¥³Ä½¨£žœŸ¢¡›“sfK8O67%2b†™hŒ“‚„‘–ž””‹~okgmr‚Œ£¯°œ¤—®–oxv€€p_NUcx•ª¶¤‹mYFD:j‚eo…šŸ¸¢yZLbnflw‡“¢¥ž™ˆŠ…Œ”–r_zŽ“‘‰|sjgimu“˜—}s€Ÿ«‘k`ml\NCdlmt}†ŽŒ’‡|xfa]_g|®¸ÄÉËàФ—†€qJ=0;LXOb‹„}loh…“Š—Ÿ¦¥¢_FAEFSg~‹š¯·±©ž—ŠŒ‘‹ƒ{vronnqtw‚„‰ˆ‘­¥™’š˜”„phaSMJGGDEEILQhƒ€nj|µÔÜÙ̾®£—ŒŽ•™Ÿž—Їn\Q@QbXOGFIVf{‹˜Ÿ¡›¡£dxs]iU„›–“rc†±ÈÀ°¡–ŠƒysmqnYg|}˜†_Lswnu—™j‘žjsŒpane]Z†©±®Ÿ‚v‡Ÿ•‹“‰Šq`J?HWbs‚Œ›±®˜˜œœš…ueVK@DUSYjŒ«¸º°¦¢¡¤¦¦¡šˆu^HQD;7Oip…Š›˜‹}w{_{ˆ„ˆmy“–„yp{‘¡Ÿ œœ—˜’œŸ”¦¨¡|ywql\[7*7,OJD08ƒ“£Ñ¦¤°¢œŠŠ‡ž¬®¦¤™–•xtƒŒ~ehS8K.5ZZp|‰“—Ÿ¨­¯Æ¼‡tsnknin^Yqrnnpxˆ’’’Šƒzrieeorx„›”¢¢š§³Åº½²§ž|fRA630:9ZVGwy’oTƒ•¬´”˜‹ˆxn`n­ÀÍÍéŽs_QHJP_iˆ|£³˜„¢—gQ\Wq]iut{pin{‡•ž¥§¦ –Ž„|pxnGallqŒ‹‹ƒ€xxsvwˆ”¥­¢«Ž‡Ž‡Œu^F@2;]w†—¥¥¬¨xr~MO`y”sm{ž¤Žžœœ¢¡¥dpŽ…{unnlyvs’””‡}ƒ}xsbY\^AAZF[‚‰{z«¾ÊÊÓù²©·tmXW[WVPSKgu[s„™¢¢‡ˆˆ‰‚}tlgnopt}‹‘­²µ©žŽyqe[TOTN5a•‚‘¦›‘‘ˆ~“—Œ–ž˜‹ubSMPSaiƒ›º¶¶Ö³œ‘›ŽŒ}lH/SOG7E|p‚Œž¨ªœ‰k€a.rR•Š”¼œ„|{“—›°¹³¡jRypXTt`^ze‡…‚Ž•›¤–‰Ÿ£z?XfroLAPbs‹„†ua‚vvŠ‹Š}wƒ™¬¼ÄÑÔ©™—Ž|hnr\JF@DFRvs}š—›š•Œ„‚kjqjppt€{Ž­¢« ¢ ž›’’eUE<;+ /=n¨¼¦³ÄÎÑͽ¬fNC;f{‘}«œ¡›Œˆs{yg’pc‚[\G37]ˆš’~ž•‘ •ŒzmXelda€©¯¶²³¬¤’€i[DR[OƒqnŒ¢±·µ«º¡~w~qcVUmnbK0Le𕢑‘t’©…v™‡k}uh‰xe†‚~‰‚ˆˆ› §¬§¤•„s_XCB86HzroŽ˜£“w‡¤Šž«™–‘ˆ†…‡“‘†ˆhj^`iGd´®¬°±±›†Ž‡‘”– ›¢ž¡‰†^lzumncI=Gr“¨¯«™ƒ†kXYA‡Ž˜—‡}ކ“s‹xu‡euqxu‚‚ytu||ts„†‡€{z}ƒš¥°­¶®…kƒƒzSAu|yhbZSs¢q¢£l[s|›„nplrqws„Žx…Ž‚ ¥ ¨~‚¢–‡zuxƒ‘™ ›‹‡‘wrsh^Xkd~l`\jdsy‚ƒ‚~rnvsrntvt‰‘‰„‡–«°µ¶¶¶³¦œŸ’‰’|‚ŽsstoZJ@:9@GOV`aiws\Qjy˜x„v{“®½åÒÌ౨¥››s~lv€Ž”qV]E0;4-@9Qj|Ž –›€†•}mr•¨¤ž¡Ž‰“žŸ©±®¥Š‡ŠxdkTC@>4@Pi{“z§|„žzpoƒ¤¾Î²ŽŠ‘Œ‡–nrƒžxˆtiec\X]KVEkˆ—‘”¢¤š„zobh|z…•““¡±ÉØÓ‘z……yeDF>HKBUKYet}‰“¢½´¤‹‹‡|§’wr€‰‘~fN@DI^ov›§¬¬ª«¨«–•Š€X^hBLawxkqluuxއ•®«±®ªšyi[^^GTTemu„“’§ŠmjcSTpª¼Â¾³šŒwouwvi{}š’y𠩍“v[D8;H\m}ƒ‡˜xhxlb_yާ¨¦ž™ŒŽŠ†…„†„{‚}wka^bouzy}z„†¢¯«¶­¯« ŽrYD7(