From b67de0308c40a0357cc7cf4577018bcd6f44dc35 Mon Sep 17 00:00:00 2001 From: David Voswinkel Date: Sun, 5 Jul 2009 10:44:30 +0200 Subject: [PATCH] add sound sample --- snes/xmsnes/InitSNES.asm | 262 ++++++++ snes/xmsnes/Makefile | 7 + snes/xmsnes/cheader.inc | 41 ++ snes/xmsnes/graphics/bg.pcx | Bin 0 -> 12709 bytes snes/xmsnes/graphics/bg2.pcx | Bin 0 -> 166 bytes snes/xmsnes/graphics/bub.pcx | Bin 0 -> 1920 bytes snes/xmsnes/graphics/font.pcx | Bin 0 -> 2678 bytes snes/xmsnes/graphics/gfx_bg.inc | 906 ++++++++++++++++++++++++++ snes/xmsnes/graphics/gfx_bg2.inc | 13 + snes/xmsnes/graphics/gfx_bub.inc | 138 ++++ snes/xmsnes/graphics/gfx_font.inc | 102 +++ snes/xmsnes/graphics/gfx_window.inc | 19 + snes/xmsnes/graphics/gfx_window2.inc | 19 + snes/xmsnes/graphics/window.pcx | Bin 0 -> 238 bytes snes/xmsnes/graphics/window2.pcx | Bin 0 -> 238 bytes snes/xmsnes/main.asm | 910 +++++++++++++++++++++++++++ snes/xmsnes/main.link | 3 + snes/xmsnes/make.sh | 5 + snes/xmsnes/memmap.inc | 42 ++ snes/xmsnes/snes.inc | 179 ++++++ snes/xmsnes/spx_snes.asm | 701 +++++++++++++++++++++ snes/xmsnes/test.xmp | Bin 0 -> 180290 bytes snes/xmsnes/vram.txt | 12 + 23 files changed, 3359 insertions(+) create mode 100644 snes/xmsnes/InitSNES.asm create mode 100644 snes/xmsnes/Makefile create mode 100644 snes/xmsnes/cheader.inc create mode 100644 snes/xmsnes/graphics/bg.pcx create mode 100644 snes/xmsnes/graphics/bg2.pcx create mode 100644 snes/xmsnes/graphics/bub.pcx create mode 100644 snes/xmsnes/graphics/font.pcx create mode 100644 snes/xmsnes/graphics/gfx_bg.inc create mode 100644 snes/xmsnes/graphics/gfx_bg2.inc create mode 100644 snes/xmsnes/graphics/gfx_bub.inc create mode 100644 snes/xmsnes/graphics/gfx_font.inc create mode 100644 snes/xmsnes/graphics/gfx_window.inc create mode 100644 snes/xmsnes/graphics/gfx_window2.inc create mode 100644 snes/xmsnes/graphics/window.pcx create mode 100644 snes/xmsnes/graphics/window2.pcx create mode 100644 snes/xmsnes/main.asm create mode 100644 snes/xmsnes/main.link create mode 100644 snes/xmsnes/make.sh create mode 100644 snes/xmsnes/memmap.inc create mode 100644 snes/xmsnes/snes.inc create mode 100644 snes/xmsnes/spx_snes.asm create mode 100644 snes/xmsnes/test.xmp create mode 100644 snes/xmsnes/vram.txt diff --git a/snes/xmsnes/InitSNES.asm b/snes/xmsnes/InitSNES.asm new file mode 100644 index 0000000..d3a2f5a --- /dev/null +++ b/snes/xmsnes/InitSNES.asm @@ -0,0 +1,262 @@ +;------------------------------------------------------------------------ +;- Written by: Neviksti +;- If you use my code, please share your creations with me +;- as I am always curious :) +;------------------------------------------------------------------------ + + +;---------------------------------------------------------------------------- +; InitSNES -- my "standard" initialization of SNES memory and registers +;---------------------------------------------------------------------------- +.MACRO InitSNES + sei ;disable interrupts + clc ;switch to native mode + xce + + REP #$38 ; mem/A = 16 bit, X/Y = 16 bit + ;decimal mode off + + LDX #$1FFF ;Setup the stack + TXS ;Transfer Index X to Stack Pointer Register + + ;do the rest of the initialization in a routine + JSL $008000 + + SEP #$20 ; mem/A = 8 bit +.ENDM + +;---------------------------------------------------------------------------- + +.BANK 0 SLOT 0 +.ORG 0 +.SECTION "InitializeSNESCode" FORCE + +InitializeSNES: + PHK ;set Data Bank = Program Bank + PLB + + LDA #$0000 ;set Direct Page = $0000 + TCD ;Transfer Accumulator to Direct Register + + LDX $1FFD ;we clear all the mem at one point ... + STX $4372 ;so save the return address in a place that won't get overwritten + LDX $1FFF + STX $4374 + + SEP #$20 ; mem/A = 8 bit + REP #$10 + + LDA #$8F + STA $2100 ;turn screen off for now, set brightness to normal + + LDX #$2101 +_Loop00: ;regs $2101-$210C + STZ $00,X ;set Sprite,Character,Tile sizes to lowest, and set addresses to $0000 + INX + CPX #$210D + BNE _Loop00 + +_Loop01: ;regs $210D-$2114 + STZ $00,X ;Set all BG scroll values to $0000 + STZ $00,X + INX + CPX #$2115 + BNE _Loop01 + + LDA #$80 ;reg $2115 + STA $2115 ; Initialize VRAM transfer mode to word-access, increment by 1 + + STZ $2116 ;regs $2117-$2117 + STZ $2117 ;VRAM address = $0000 + + ;reg $2118-$2119 + ;VRAM write register... don't need to initialize + + STZ $211A ;clear Mode7 setting + + LDX #$211B +_Loop02: ;regs $211B-$2120 + STZ $00,X ;clear out the Mode7 matrix values + STZ $00,X + INX + CPX #$2121 + BNE _Loop02 + + ;reg $2121 - Color address, doesn't need initilaizing + ;reg $2122 - Color data, is initialized later + + LDX #$2123 +_Loop03: ;regs $2123-$2133 + STZ $00,X ;turn off windows, main screens, sub screens, color addition, + INX ;fixed color = $00, no super-impose (external synchronization), + CPX #$2134 ;no interlaced mode, normal resolution + BNE _Loop03 + + ;regs $2134-$2136 - multiplication result, no initialization needed + ;reg $2137 - software H/V latch, no initialization needed + ;reg $2138 - Sprite data read, no initialization needed + ;regs $2139-$213A - VRAM data read, no initialization needed + ;reg $213B - Color RAM data read, no initialization needed + ;regs $213C-$213D - H/V latched data read, no initialization needed + + STZ $213E ;reg $213E - might not be necesary, but selects PPU master/slave mode + ;reg $213F - PPU status flag, no initialization needed + + ;reg $2140-$2143 - APU communication regs, no initialization required + + ;reg $2180 - read/write WRAM register, no initialization required + ;reg $2181-$2183 - WRAM address, no initialization required + + ;reg $4016-$4017 - serial JoyPad read registers, no need to initialize + + + STZ $4200 ;reg $4200 - disable timers, NMI,and auto-joyread + + LDA #$FF + STA $4201 ;reg $4201 - programmable I/O write port, initalize to allow reading at in-port + + ;regs $4202-$4203 - multiplication registers, no initialization required + ;regs $4204-$4206 - division registers, no initialization required + + ;regs $4207-$4208 - Horizontal-IRQ timer setting, since we disabled this, it is OK to not init + ;regs $4209-$420A - Vertical-IRQ timer setting, since we disabled this, it is OK to not init + + STZ $420B ;reg $420B - turn off all general DMA channels + STZ $420C ;reg $420C - turn off all H-MA channels + + STZ $420D ;reg $420D - ROM access time to slow (2.68Mhz) + + LDA $4210 ;reg $4210 - NMI status, reading resets + + ;reg $4211 - IRQ status, no need to initialize + ;reg $4212 - H/V blank and JoyRead status, no need to initialize + ;reg $4213 - programmable I/O inport, no need to initialize + + ;reg $4214-$4215 - divide results, no need to initialize + ;reg $4216-$4217 - multiplication or remainder results, no need to initialize + + ;regs $4218-$421f - JoyPad read registers, no need to initialize + + ;regs $4300-$437F + ;no need to intialize because DMA was disabled above + ;also, we're not sure what all of the registers do, so it is better to leave them at + ;their reset state value + +; JSR ClearVRAM ;Reset VRAM + ; JSR ClearPalette ;Reset colors + + ;**** clear Sprite tables ******** + + STZ $2102 ;sprites initialized to be off the screen, palette 0, character 0 + STZ $2103 + LDX #$0080 + LDA #$F0 +_Loop08: + STA $2104 ;set X = 240 + STA $2104 ;set Y = 240 + STZ $2104 ;set character = $00 + STZ $2104 ;set priority=0, no flips + DEX + BNE _Loop08 + + LDX #$0020 +_Loop09: + STZ $2104 ;set size bit=0, x MSB = 0 + DEX + BNE _Loop09 + + ;**** clear WRAM ******** + + STZ $2181 ;set WRAM address to $000000 + STZ $2182 + STZ $2183 + + LDX #$8008 + STX $4300 ;Set DMA mode to fixed source, BYTE to $2180 + LDX #wram_fill_byte + STX $4302 ;Set source offset + LDA #:wram_fill_byte + STA $4304 ;Set source bank + LDX #$0000 + STX $4305 ;Set transfer size to 64k bytes + LDA #$01 + STA $420B ;Initiate transfer + + LDA #$01 ;now set the next 64k bytes + STA $420B ;Initiate transfer + + PHK ;make sure Data Bank = Program Bank + PLB + + CLI ;enable interrupts again + + LDX $4372 ;get our return address... + STX $1FFD + LDA $4374 + STA $1FFF + RTL + +wram_fill_byte: +.db $00 + +;---------------------------------------------------------------------------- +; ClearVRAM -- Sets every byte of VRAM to zero +; In: None +; Out: None +; Modifies: flags +;---------------------------------------------------------------------------- +ClearVRAM: + pha + phx + php + + REP #$30 ; mem/A = 8 bit, X/Y = 16 bit + SEP #$20 + + LDA #$80 + STA $2115 ;Set VRAM port to word access + LDX #$1809 + STX $4300 ;Set DMA mode to fixed source, WORD to $2118/9 + LDX #$0000 + STX $2116 ;Set VRAM port address to $0000 + STX $0000 ;Set $00:0000 to $0000 (assumes scratchpad ram) + STX $4302 ;Set source address to $xx:0000 + LDA #$00 + STA $4304 ;Set source bank to $00 + LDX #$FFFF + STX $4305 ;Set transfer size to 64k-1 bytes + LDA #$01 + STA $420B ;Initiate transfer + + STZ $2119 ;clear the last byte of the VRAM + + plp + plx + pla + RTS + +;---------------------------------------------------------------------------- +; ClearPalette -- Reset all palette colors to zero +; In: None +; Out: None +; Modifies: flags +;---------------------------------------------------------------------------- +ClearPalette: + PHX + PHP + REP #$30 ; mem/A = 8 bit, X/Y = 16 bit + SEP #$20 + + STZ $2121 + LDX #$0100 +ClearPaletteLoop: + STZ $2122 + STZ $2122 + DEX + BNE ClearPaletteLoop + + PLP + PLX + RTS + +.ENDS diff --git a/snes/xmsnes/Makefile b/snes/xmsnes/Makefile new file mode 100644 index 0000000..613116b --- /dev/null +++ b/snes/xmsnes/Makefile @@ -0,0 +1,7 @@ + + +all: + sh make.sh + +run: + zsnes xmsnes.smc diff --git a/snes/xmsnes/cheader.inc b/snes/xmsnes/cheader.inc new file mode 100644 index 0000000..89abfeb --- /dev/null +++ b/snes/xmsnes/cheader.inc @@ -0,0 +1,41 @@ +;----------------------------------------------------------------------; +; Header File ; +; (Written By MarcTheMER) ; +; Email: marcthemer@hotmail.com ; +;======================================================================; +; I had written this simple yet useful header file to help SNES ; +; programmers with their assembly. This section of code modifies the ; +; SNES cartridge header so it is compatable for use on zsnes or snes9x ; +;======================================================================; +; If you use any of my header files to create an awesome game please ; +; email me as I am always trying to learn new programming skills. ; +;----------------------------------------------------------------------; + + +.SNESNATIVEVECTOR ; Defines inturupt vactor table + COP DoNothing + BRK DoNothing + ABORT DoNothing + NMI VBlank + IRQ DoNothing +.ENDNATIVEVECTOR + +.SNESEMUVECTOR ; Defines inturupt vactor table + COP DoNothing + ABORT DoNothing + NMI DoNothing ; I wouldn't recomend using emulation mode. + RESET Main + IRQBRK DoNothing +.ENDEMUVECTOR + + +.EMPTYFILL $00 ; fills the rom with $00 + +.BANK 0 SLOT 0 +.ORG 0 +.SECTION "EmptyVectors" SEMIFREE ; Set up interupt vector coding. + +DoNothing: + RTI + +.ENDS diff --git a/snes/xmsnes/graphics/bg.pcx b/snes/xmsnes/graphics/bg.pcx new file mode 100644 index 0000000000000000000000000000000000000000..3d120bea116ead1fc6a08d593172837be3e46469 GIT binary patch literal 12709 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 literal 0 HcmV?d00001 diff --git a/snes/xmsnes/graphics/bub.pcx b/snes/xmsnes/graphics/bub.pcx new file mode 100644 index 0000000000000000000000000000000000000000..8d15e273d926d02e26ed65cd6a98c6bbd34c99ec GIT binary patch literal 1920 zcmc(fL1-OC7{?Q-my*jgP2!^jN8Y|K5{*v)>NqfftlcJuj5&;OuP^?UE%f9mI+&DEp&ucuG` z-2C{-qqB==;tR9qXJ+Hzzx_OxC;uPHByUFYp;Y|%O(uBeli`UGDQbrDSDBm`)sVE>3b1Od(l}Q%@OQ%F< zXwo2Stn7-hS@0MpaK|P+99HJK-Gjn0Al}x-MQJPym>QW{F zaY}O=I(70$_gY=ab~;#tS-j2Bu)Nj77#zWlOK(yVw+|iE(iPq~agOX@<}^ncp$dXW zf*P{lzjj{4Jdqr-`8t=Vosc) zl~+jyymBej+a!kOjsCzz<2zsHrFQXT-|XLEGf|uOd`((h?2*0BTeToFj}%E=xJtFt zXM4eBD-|cLJ}mUj!VY#?b+6DDOPf{FBmI@2x8E)8pjBes>$eUiYAHmgRe?L^UzC&T za)LUYzM79p`va;*U?hDVRX*9r6X)9;KJ!Tp zoFZ)bWZVv2!vp3kpN!(j1J`|q4z1*j7y^dSQdXgF6vh<;H$-T>bO5LpifKbNVr0@H z;)03F^gvIDl360VCs-i?NU#JLq0riqq!d7orRugEF`iQeidb>SPpJ_eA7r2-Lr^%t zW2$_?8|DsGi%v9J0MUpdqGMu&2qi;??}04DjM#M?mMypJ02BT)(+C^e)1d#ZwIAs8L>eSh_Cyr7`b2x`+(ojc%zLrBH^ zDrGH%q%Q5cnz7Ss+&-W5E#Ek>(Oql7tQUGUI>?^;Ek}qOg_arfJ+;8#yw_I(*QhiW zfv#YdoGzGRQtN2lyaf6PM=%R)?~-PZ`TkntPy?*)5}`YFh>*kMw7Uo_zM-tdB@FuF zC8ayTe(TUPoF*|E+pjQ@8b=d1nYfTOz?NOXt%Ar$uuVm83Mrq+(cDQa|8Efg1`1r> A5&!@I literal 0 HcmV?d00001 diff --git a/snes/xmsnes/graphics/font.pcx b/snes/xmsnes/graphics/font.pcx new file mode 100644 index 0000000000000000000000000000000000000000..e2d2228adb12c922881d86828cc3793aadd5df0d GIT binary patch literal 2678 zcmbW3O^#eO5XWt6kPxe9OWE6X0j`h>vB+wcxehmA@7LXvAQ%NHiXw>EvVbFu5Wjzw zUv~?!Vk|$~_2K&0mwUeXDnBIt-llK0q=)kG^7qSM<>m2B`Z}fGQhMd|x9Phd((iwy zkB{l``=8R6Khvw`jQl!f-~7MN#p<-#rnNDxwjXVrjMMmR&CWJzvAIp#MwuhqaG~8e z+2}hWJ6hv|ZIa!P?KWm@BhNCnRz`2TNw)09EwvT4&!|c~X>JMXwA=yEFCnNaG~v%G z8q&3#Z3ihgTdSB|vRsPUoM2CVuyD4{W`hP~Ak;ESgW@0zn((0aWYtlfaO>h8`dy_L ztK-Ro0ID5PNtX)~`@d9oziZ?NfLxJ$rsEBd(VmqXWgv8RTyaU@#F9daMr1d4qxZP zS-0u7$%!5~GcdE!#G>#C$iV%=j^tpca&^oD9wDmj(>RvRsMjL5FbfR^Yu zhYj^hM|5_ONvKblrwwcc?Chn$5Pr?#t%ZZ3JVla7F3PDyw^=t5S(wn5`b@aXlmt9B zZaZQB5D|;9^_gPlU-%ljW?jXJ1HqCmLA#^7?BxAGM(CAM_d=1zqMXw30_c!@A1iw= zfIS%jBGX64BkO2);vFoC0ISD7sL+x^;9DS1Fy;$o!<7lAg!`RKAKWk6m1OvifXJF7H5hww4uo6uHvj zj`Fi{@2vuaNWoK8YzRdY0WWSW$~>xSqE$Hj_|P?83Zx(K-u==Gx)eewe6R^6y~b`iFOK|hbAA?+q1TQStV^MVQdV+6ebWuY%E{reR#fEx z+X;Z&<{Y_`F9i_`1g* z91jDZgO2YJ8-Z0w^~3n?PH&G^FR)OX^hRc1`i-)5i@zi^v5J@N=)0G9Sj_q3=9$si-7X=3@5fT?0wE4TF$_* z;0(is*9_u9AbkvsDh!NZ26=?QDWLXaO2!PQl#Gukon}x*a6m$o@R&{mO@tXDe9GAH Gh!Oy3bTJeF literal 0 HcmV?d00001 diff --git a/snes/xmsnes/graphics/window2.pcx b/snes/xmsnes/graphics/window2.pcx new file mode 100644 index 0000000000000000000000000000000000000000..8ccb5f9ef0daed12e26b2a3c50065ab02e63223c GIT binary patch literal 238 zcmd;LWn^Ih0(S;>1`i;Vk&{VDOPMooPEB2n1%tqI1_lX+ML_v_28HbmPo6V~mNPKy zIK#m3nn6Mcq>q77g@F;wAdfIO#lXyPOi+p8l%UcP!P5*v2o6Yy5+37epouU;j7}*j H9}xrqrnW3? literal 0 HcmV?d00001 diff --git a/snes/xmsnes/main.asm b/snes/xmsnes/main.asm new file mode 100644 index 0000000..974160d --- /dev/null +++ b/snes/xmsnes/main.asm @@ -0,0 +1,910 @@ +; XMSNES EXAMPLE DEMO! + +.define nsongs 5 ; number of songs in package + +.include "memmap.inc" ; memory map stuff +.include "cheader.inc" ; snes rom header +.include "InitSNES.asm" ; snes initialization code + +.include "snes.inc" ; snes register definitions + +.BANK 1 + +.SECTION "GRAPHICS" ; include graphics (bank1) +.include "graphics\gfx_window.inc" +.include "graphics\gfx_font.inc" +.include "graphics\gfx_bg.inc" +.include "graphics\gfx_bg2.inc" +;.include "graphics\gfx_bub.inc" +.ENDS + +.BANK 2 SLOT 3 ; include songs/samples (bank2) +.SECTION "SPX_PACKAGE" +TEST_PACKAGE: +.incbin "test.xmp" +.ENDS + +.ramsection "globals" BANK 0 SLOT 1 +bg_ripple: db ; for bg effect +bg_rippleL: db + +scr_fade: db ; for fading screen +scr_flash: dsb 3 ; for flashing screen + +joypad: dw ; joypad state +joypadc: dw ; joypad 'clicks' +joypadl: dw ; last joypad state + +svar1: dw ; general purpose +svar2: dw + +current_song: dw + +music_vol: dw ; 8.8 fixed + +custom_string: dsb 32 + +effect1: db ; sound effect indexes +effect2: db +effect3: db +effect4: db + +inst_timer: dw + +.ends + +.BANK 0 + +.SECTION "MAIN" + +Main: + InitSNES ; initialize everything + REP #$10 ; 16bit index + SEP #$20 ; 8bit accu + + lda #$80 ; turn off screen + sta REG_INIDISP + + lda #%00001001 ; set display mode + sta REG_BGMODE ; mode 1 + + jsl LoadBG ; load background bg + jsl BuildWindow ; build the window thingy + jsl LoadFont ; load the font + jsl ClearAllText ; reset the text layer + + ;ldx #STR_SPCDATA ; draw "SPC Ports" + ;ldy #14*32+12 + jsl DrawText + + lda #%0110 ; blend the window with the background + sta REG_TM ; enable bg1/2 main screen + lda #%0000 ; enable bg0 subscreen + sta REG_TD ; + + lda #%01100011 ; add bg0+backdrop+bg1 and half the result + sta REG_CGADSUB + lda #%00000010 + sta REG_CGWSEL + + ;--------------------------------------------------------- + ; SETUP XMSNES + ;jsl BootSPC ; send code and initialize + ;jsl SPX_Transfer_LFT ; transfer frequency table (linear mode) + + ;ldx #TEST_PACKAGE ; load package + ;lda #:TEST_PACKAGE ; + ;jsl SPXP_InstallPackage ; + + ;ldx #0 ; load song 0 + ;jsl ChangeSong + + ; song is playing now... + ;--------------------------------------------------------- + + lda #%10100001 ; enable vblank irq, enable joypad + sta REG_NMITIMEN + + cli ; enable interrupts + wai + + lda #0 ; reset darkness + sta scr_fade ; + sta REG_INIDISP ; + + ldx #22000 ; set playback volume + stx music_vol ; + ;jsl SPXM_SetVol ; + +_mainloop: + + ;----------------------------------- + ; SCREEN FADE-IN + + lda scr_fade + cmp #255 + beq + + clc + adc #2 + bcc ++ + lda #255 +++ + sta scr_fade + lsr + lsr + lsr + lsr + sta REG_INIDISP ++ ;-------------------------------------- + + + jsl UpdateBG ; Update the background effect + ;jsl DrawSPCData ; Read SPC Ports and display them + + bit inst_timer+1 ; timer to hide instructions + bmi ++ ; + rep #$20 ; + lda inst_timer ; + dea ; + bpl + ; + ldy #(25*32) ; + ldx #32 ; + jsl ClearText ; ++ ; + sta inst_timer ; + sep #$20 ; +++ ; + + ;jsl SPX_Routine ; call this every frame, or every so often + + ;-------------------------------------- + ; slide music volume to full + + rep #$20 + lda music_vol + cmp #$FFFF + beq + + adc #44 + bcc ++ + lda #$FFFF +++ + sta music_vol + sep #$20 + xba +; jsl SPXM_SetVol ++ ;---------------------------------------- + + ;--------------------------------------- + ; if user presses left, decrease song#, load new song + + sep #$20 + lda joypadc+1 + and #1 + beq + + ldx current_song + inx + cpx #nsongs + bcc ++ + ldx #nsongs-1 +++ + jsl ChangeSong ++ ;------------------------------------------------- + ; if user presses right, increase song#, load new song + + lda joypadc+1 + and #%10 + beq + + ldx current_song + dex + bpl ++ + ldx #0 +++ + jsl ChangeSong ++ ;-------------------------------------------------- + + ;------------------------------------------------ + ; if user presses A, play effect1, full volume, freq:4 + + lda joypadc + and #%10000000 + beq + + ; A was pressed + lda #$04 ; freq/priority + xba + lda effect1 ; sample# + beq + + tax + lda #$77 ; volume + jsl SPXS_Play ++ ;----------------------------------------------- + ; if user presses B, play effect2, full volume, freq:4 + + lda joypadc+1 + and #%10000000 + beq + + ; B was pressed + lda #$04 ; freq/priority + xba + lda effect2 ; sample# + beq + + tax + lda #$77 ; volume + jsl SPXS_Play ++ ;----------------------------------------------- + ; if user presses X, play effect3, full volume, freq:4 + lda joypadc + and #%1000000 + beq + + ; X was pressed + lda #$04 ; freq/priority + xba + lda effect3 ; sample# + beq + + tax + lda #$77 ; volume + jsl SPXS_Play ++ ;----------------------------------------------- + ; if user presses Y, play effect4, full volume, freq:3 + + lda joypadc+1 + and #%1000000 + beq + + ; Y was pressed + lda #$03 ; freq/priority + xba + lda effect4 ; sample# + beq + + tax + lda #$77 ; volume + jsl SPXS_Play ++ ;------------------------------------------------ + + ldx #0 + stx joypadc + wai ; wait for vblank + jmp _mainloop ; loop + +;--------------------------------------------------------- +; this function gets called when the snes receives a song message from the spc +MessageReceived: + ; a = message + cmp #1 + bne + + jsl FlashScreen ; #1 = flash screen message ++ + rtl +;--------------------------------------------------------- + +FlashScreen: + lda #16 + sta scr_flash + rtl + +;--------------------------------------------------------- + +cs_jumptable: +.dw CS_WAR +.dw CS_ACID +.dw CS_JOURNEY +.dw CS_SATELLITE +.dw CS_RUSINA + +ChangeSong: + ; x = song + stx current_song ; save song# + + stz effect1 ; zero out sound effect indexes + stz effect2 + stz effect3 + stz effect4 + + jsl SPXM_Reset ; queue reset playback + jsl SPX_Flush ; flush + + rep #$20 ; get song*2 + lda current_song + asl + tax + sep #$20 + jmp (cs_jumptable,x) ; and jump + +CS_WAR: + ldx #STR_WAR_AUTHOR ; get author string + phx + ldx #STR_WAR_TITLE ; song title + jmp CS_BEGINDRAWING +CS_ACID: ; other songs + ldx #STR_ACID_AUTHOR ; etc + phx + ldx #STR_ACID_TITLE + jmp CS_BEGINDRAWING +CS_JOURNEY: + ldx #STR_JOURNEY_AUTHOR + phx + ldx #STR_JOURNEY_TITLE + jmp CS_BEGINDRAWING +CS_SATELLITE: + ldx #STR_SATELLITE_AUTHOR + phx + ldx #STR_SATELLITE_TITLE + jmp CS_BEGINDRAWING +CS_RUSINA: + ldx #STR_RUSINA_AUTHOR + phx + ldx #STR_RUSINA_TITLE + jmp CS_BEGINDRAWING +CS_BEGINDRAWING: + + phx ;preserve + + ldy #(8*32) ; clear text + ldx #32 + jsl ClearText + + ldy #(10*32) + ldx #32 + jsl ClearText + + plx ;restore + + ldy #16+(8*32) ; draw title + jsl DrawCentered + plx + ldy #16+(10*32) ; draw author + jsl DrawCentered + + ldx current_song ; get song# + jsl SPXP_LoadSong ; transfer song + + ldx current_song ; check if song is 4 (has sound effects) + cpx #4 ; + bne + + + ; load some sfx + + ldx #0 ; hh.wav + ldy #0 + jsl SPXP_LoadSample + sta effect1 + ldx #1 ; ow.wav + ldy #0 + jsl SPXP_LoadSample + sta effect2 + ldx #2 ; sd.wav + ldy #0 + jsl SPXP_LoadSample + sta effect3 + ldx #3 ; OWWW.wav + ldy #0 + jsl SPXP_LoadSample + sta effect4 + + ; be sure not to load too much stuff + ldy #(25*32) + ldx #32 + jsl ClearText + ldx #STR_INST1 ; tell the user to push buttons + ldy #(25*32)+16 + jsl DrawCentered + bra ++ ++ + ldy #(25*32) + ldx #32 + jsl ClearText + ldx #STR_INST2 ; tell the user to push buttons + ldy #(25*32)+16 + jsl DrawCentered +++ + + ldx #300 + stx inst_timer + + jsl SPXM_Play ; start playing song + rtl ; return + +;------------------------------------------------------------------------------- +; TEXT RENDERING STUFF + +DrawText: + ; x = source + ; y = offset + stz REG_VMAIN ; setup vram increment stuff + rep #$20 ; set destination address + tya ; + ora #($9000/2) ; + sta REG_VMADDL ; + tay ; + sec ; + sep #$20 ; +_dt_loop: + lda $0000, x ; + beq _dt_exit ; exit when 0 + inx ; increment counter + sbc #32 ; viewable ascii characters start at 32 + bpl + ; check for newline + tya ; newline + adc #32 ; edit vram address + sta REG_VMADDL ; + tay ; + sec ; + bra _dt_loop ; loop ++ + sta REG_VMDATAL ; store value + bra _dt_loop ; loop +_dt_exit: + rtl ; end + +ClearText: + ; x = length + ; y = offset + + stz REG_VMAIN ; setup vram pointer + rep #$20 ; + tya ; + ora #($9000/2) ; + sta REG_VMADDL ; + sep #$20 + lda #$00 ; start clearing memory + +_ct_loop: + sta REG_VMDATAL ; store... + dex ; count... + bne _ct_loop ; loop... +_ct_exit: + sep #$20 ; restore 8-bit accu + rtl ; end + +ClearAllText: + lda #%10000000 ; setup vram pointer + sta REG_VMAIN ; + ldx #($9000/2) + stx REG_VMADDL + + ldx #$100|(0<<10)|(1<<13) ; $100 = blank tile + ldy #1024 ; 1024 = 32*32 tiles +- + stx REG_VMDATAL ; store value + dey ; count.. + bne - ; loop + rtl ; end + +DrawCentered: + ; x = string address + ; y = line + sty svar2 + stx svar1 + jsl strlen + rep #$20 + txa + sec + sbc svar1 + lsr + clc + eor #$FFFF + inc a + adc svar2 + tay + ldx svar1 + sep #$20 + jmp DrawText + +DrawSPCData: + lda #0 + xba + + ldx #0 + stx svar1 +- + lda REG_APUI00, x + inx + stx svar2 + pha + lsr + lsr + lsr + lsr + clc + tay + lda HEX2ASCII, y + ldx svar1 + sta custom_string,x + inx + pla + and #$0F + tay + lda HEX2ASCII, y + sta custom_string,x + inx + lda #32 + sta custom_string,x + inx + stx svar1 + ldx svar2 + cpx #4 + bne - + ldy #11+(16*32) + ldx #custom_string + jsl DrawText + rtl + +;--------------------------------------------------------------------------------------------------------------------------------------------------------------------- +; INITIALIZATION / EFFECTS + +LoadBub: + lda #%10000000 + sta REG_VMAIN + ldx #$ + +BuildWindow: + lda #%10000000 ; setup vram pointer + sta REG_VMAIN + ldx #$7C00/2 + stx REG_VMADDL + ldx #0 + REP #$20 +- + lda.l gfx_window, x ; load graphics + sta REG_VMDATAL + inx + inx + cpx #$120 + bne - + SEP #$20 + LDA #-1 ; setup bg attributes + sta REG_BG0VOFS + stz REG_BG0VOFS + + + lda #($11<<2) + sta REG_BG0SC + + ldy #($8800)/2 + sty REG_VMADDL + + ldx #464 + ldy #1024 +- stx REG_VMDATAL + dey + bne - + + ldy #($8980)/2 + sty REG_VMADDL + ldx #1000|(2<<10) + ldy #32 +- stx REG_VMDATAL + dey + bne - + ldx #1000|(2<<10) + ldy #32*11 +- stx REG_VMDATAL + dey + bne - + ldx #1000|(2<<10) + ldy #32 +- stx REG_VMDATAL + dey + bne - + + lda #32 ; load palette + sta REG_CGADD + ldx #gfxp_window + ldy #32 + lda #(REG_CGDATA&255) + xba + lda #:gfxp_window + jsl DMA_TRANSFER + rtl + +LoadFont: + lda #%10000000 ; setup vram pointer + sta REG_VMAIN + ldy #($7000/2) + sty REG_VMADDL + ldx #0 + rep #$20 + +- + lda.l gfx_font, x ; load byte + sta REG_VMDATAL ; store + inx ; count + inx + cpx #$600 ; transfer $600*2 bytes + bne - + sep #$20 ; setup palette + lda #0 + sta REG_CGADD + sta REG_CGDATA + sta REG_CGDATA + lda #$FF ; white + sta REG_CGDATA + lda #$7F + sta REG_CGDATA + lda #%00000000 ; black + sta REG_CGDATA + sta REG_CGDATA + + lda #-1 ; setup bg + sta REG_BG2VOFS + stz REG_BG2VOFS + lda #($12<<2) ; source = $9000 + sta REG_BG2SC + + lda #$03 ; set character offset + sta REG_BG23NBA + + rtl + +LoadBG: + lda #%10000000 + sta REG_VMAIN + ldx #0 + stx REG_VMADDL + + ldx #$1000 + ; transfer data + REP #$20 + +- + lda.l gfx_bg-$1000, x + sta REG_VMDATAL + inx + inx + bpl - + + + ldx #0 + stx REG_VMADDL +- lda.l gfx_bg2, x + sta REG_VMDATAL + inx + inx + cpx #96 + bne - + + sep #$20 + + lda #-1 + sta REG_BG1VOFS + stz REG_BG1VOFS + + lda #($10<<2) + sta REG_BG1SC + ; setup bg + ldy #$8000/2 + sty REG_VMADDL + + ldy #(1<<10) +- + sty REG_VMDATAL + iny + cpy #896|(1<<10) + bne - + + ldy #$8000/2 + sty REG_VMADDL + ldy #32*5 + ldx #2|(3<<10) +- + stx REG_VMDATAL + dey + bne - + + ldy #32 + ldx #1|(3<<10) +- stx REG_VMDATAL + dey + bne - + + ldy #$84C0/2 + sty REG_VMADDL + ldy #32 + ldx #0|(3<<10) +- stx REG_VMDATAL + dey + bne - + + ldy #32*8 + ldx #2|(3<<10) +- + stx REG_VMDATAL + dey + bne - + + lda #48 + sta REG_CGADD + + ldx #gfxp_bg2 + ldy #32 + lda #(REG_CGDATA & 255) + xba + lda #:gfxp_bg2 + jsl DMA_TRANSFER + + rtl + +BG_PALETTE: +;.dw 0,0,1024,1024,2048,2048,2081,3105,3105,4129,4129,4129,5153,5153,6177,6210,6210,6210,6177,5153,5153,4129,4129,4129,3105,3105,2081,2048,2048,1024,1024,0,0,0,1024,1024,2048,2048,2081,3105,3105,4129,4129,4129,5153,5153,6177,6210, +;.dw 6276,6276,7300,7300,8324,8324,8357,9381,9381,10405,10405,10405,11429,11429,12453,12486,12486,12486,12453,11429,11429,10405,10405,10405,9381,9381,8357,8324,8324,7300,7300,6276,6276,6276,7300,7300,8324,8324,8357,9381,9381,10405,10405,10405,11429,11429,12453,12486, +.dw 4162,5186,5186,6243,6243,7267,8291,8291,9348,9348,10372,11396,11396,12453,12453,13477,14501,13477,12453,12453,11396,11396,10372,9348,9348,8291,8291,7267,6243,6243,5186,5186,4162,5186,5186,6243,6243,7267,8291,8291,9348,9348,10372,11396,11396,12453,12453,13477, +;.dw 2116,2117,2117,3174,3174,3175,3176,3176,4233,4233,4234,4235,4235,5292,5292,5293,5294,5293,5292,5292,4235,4235,4234,4233,4233,3176,3176,3175,3174,3174,2117,2117,2116,2117,2117,3174,3174,3175,3176,3176,4233,4233,4234,4235,4235,5292,5292,5293, ;red +UpdateBG: + + clc + lda bg_rippleL + adc #99 + sta bg_rippleL + bcs + + rtl ++ + + lda bg_ripple + inc a + rep #$20 + and #31 + sta bg_ripple + asl + tay + sep #$20 + + lda #0 + sta REG_CGADD + ldx #16 + + + lda scr_flash + rep #$20 + and #31 + asl + asl + asl + asl + asl + ora scr_flash + asl + asl + asl + asl + asl + ora scr_flash + sta scr_flash+1 + sep #$20 + + cmp #0 + beq + + dec scr_flash + dec scr_flash + dec scr_flash + dec scr_flash ++ + clc + lda BG_PALETTE, y + adc scr_flash+1 + sta REG_CGDATA + lda BG_PALETTE+1, y + adc scr_flash+2 + sta REG_CGDATA + lda #16 + sta REG_CGADD + +- + lda BG_PALETTE, y + adc scr_flash+1 + sta REG_CGDATA + + lda BG_PALETTE+1, y + adc scr_flash+2 + sta REG_CGDATA + iny + iny + dex + bne - + + rtl + +;----------------------------------------------------------------------------------------------------------------------------------------------------------------- +; DMA + +DMA_TRANSFER: + ; x = src + ; y = length + ; a = bank# + ; b = dest + stz REG_DMAP0 ; set mode + stx REG_A1T0L ; set source + sta REG_A1B0 ; set bank# + xba ; + sta REG_BBAD0 ; set dest + sty REG_DAS0L ; set #bytes + lda #1 ; start transfer + sta REG_MDMAEN + rtl ; end + +;---------------------------------------------------------------------------------------------------------------------------------------------------------- +; INTERRUPTS +.index 16 +.accu 8 + +VBlank: + sei + rep #$20 + pha ; preserve a + + lda joypad ; update last joypad state + sta joypadl ; + + sep #$20 + lda #1 +- + bit $4212 ; check if joypad is ready + bne - ; wait... + rep #$20 + lda REG_JOY1L ; load joystate + sta joypad ; save to memory + eor joypadl ; mask with old state + and joypad ; mask some more.. + sta joypadc ; store button 'clicks' + + sep #$20 + lda REG_TIMEUP ; do something + rep #$20 + pla ; restore a + rti ; exit + +;-------------------------------------------------------------------------------------- +; misc + +strlen: + ; x = str address + ; returns x = str address + length +- + lda $0000, x + beq + + inx + bra - ++ + rtl + +;------------------------------------------------------------------------------------- +; STRINGS +STR_HELP: +.DB "Press left/right to", 1 +.db "change songs",0 + +STR_SPCDATA: +.db "SPC Ports",0 + +HEX2ASCII: +.db 48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70 + +STR_WAR_TITLE: +.db "War in Middle Earth", 0 +STR_WAR_AUTHOR: +.db "by Skaven", 0 + +STR_ACID_TITLE: +.db "Acidjazzed Evening", 0 +STR_ACID_AUTHOR: +.db "by Tempest", 0 + +STR_JOURNEY_TITLE: +.db "Your Journey Awaits", 0 +STR_JOURNEY_AUTHOR: +.db "by AlexG", 0 + +STR_SATELLITE_TITLE: +.db "Satellite One",0 +STR_SATELLITE_AUTHOR: +.db "by Purple Motion",0 + +STR_RUSINA_TITLE: +.db "Rusinahumppa",0 +STR_RUSINA_AUTHOR: +.db "by Croaker",0 + +STR_INST1: +.db "Press A/B/X/Y for SFX",0 + +STR_INST2 +.db "Change songs with left/right",0 + +.ENDS diff --git a/snes/xmsnes/main.link b/snes/xmsnes/main.link new file mode 100644 index 0000000..deb9ed1 --- /dev/null +++ b/snes/xmsnes/main.link @@ -0,0 +1,3 @@ +[objects] +main.obj +spx_snes.obj diff --git a/snes/xmsnes/make.sh b/snes/xmsnes/make.sh new file mode 100644 index 0000000..34d9614 --- /dev/null +++ b/snes/xmsnes/make.sh @@ -0,0 +1,5 @@ +rm *.obj +rm *.smc +wla-65816 -ov main.asm main.obj +wla-65816 -ov spx_snes.asm spx_snes.obj +wlalink -rvS main.link xmsnes.smc diff --git a/snes/xmsnes/memmap.inc b/snes/xmsnes/memmap.inc new file mode 100644 index 0000000..403ace6 --- /dev/null +++ b/snes/xmsnes/memmap.inc @@ -0,0 +1,42 @@ +.MEMORYMAP + SLOTSIZE $8000 + DEFAULTSLOT 0 + SLOT 0 $8000 + SLOT 1 $0000 + SLOT 2 $2000 + SLOTSIZE $40000 + SLOT 3 $8000 +.ENDME + +.ROMBANKMAP +BANKSTOTAL 3 +BANKSIZE $8000 +BANKS 2 +BANKSIZE $40000 +BANKS 1 +.ENDRO + +.SMC + + +.SNESHEADER + + ID "SNES" + + NAME "XMSNES " ; Title (can't be over 21 bytes) + ; "123456789012345678901" (just a guide) + + SLOWROM ; Slow ROM + LOROM ; LO ROM + + + +CARTRIDGETYPE $00 ; $00 = ROM only, see WLA documentation for others +ROMSIZE $08 ; $08 = 2 Mbits, see WLA doc for more.. +SRAMSIZE $00 ; No SRAM see WLA doc for more.. +COUNTRY $02 ; $01 = U.S. $00 = Japan, that's all I know +LICENSEECODE $00 ; Just use $00 +VERSION $00 ; $00 = 1.00, $01 = 1.01, etc. + + +.ENDSNES diff --git a/snes/xmsnes/snes.inc b/snes/xmsnes/snes.inc new file mode 100644 index 0000000..c79c780 --- /dev/null +++ b/snes/xmsnes/snes.inc @@ -0,0 +1,179 @@ +;-----------; +; SNES.ASM \ +;---------------------------; +; SNES Register Definitions ; +; by eKid ; +;---------------------------+--; +; Information taken from- ; +; QWERTIE'S SNES DOCUMENTATION ; +; AND ; +; YOSHI'S DOCUMENTS ; +;------------------------------; + +.EQU REG_INIDISP $2100 ; Screen Display Register 1B/W +.EQU REG_OBSEL $2101 ; OAM Size Control 1B/W +.EQU REG_OAMADDL $2102 ; OAM Access Address 2B/W +.EQU REG_OAMADDH $2103 +.EQU REG_OAMDATA $2104 ; OAM Data Write 1B/W +.EQU REG_BGMODE $2105 ; Screen Mode Register 1B/W +.EQU REG_MOSAIC $2106 ; Screen Pixelation Register 1B/W +.EQU REG_BG0SC $2107 ; BG0 VRAM Location Register 1B/W +.EQU REG_BG1SC $2108 ; BG1 VRAM Location Register 1B/W +.EQU REG_BG2SC $2109 ; BG2 VRAM Location Register 1B/W +.EQU REG_BG3SC $210A ; BG3 VRAM Location Register 1B/W +.EQU REG_BG01NBA $210B ; BG0/1 Character Bases 1B/W +.EQU REG_BG23NBA $210C ; BG2/3 Character Bases 1B/W +.EQU REG_BG0HOFS $210D ; BG0 Vertical Scroll 1B/W D +.EQU REG_BG0VOFS $210E ; BG0 Vertical Scroll 1B/W D +.EQU REG_BG1HOFS $210F ; BG1 Horizontal Scroll 1B/W D +.EQU REG_BG1VOFS $2110 ; BG1 Vertical Scroll 1B/W D +.EQU REG_BG2HOFS $2111 ; BG2 Horizontal Scroll 1B/W D +.EQU REG_BG2VOFS $2112 ; BG2 Vertical Scroll 1B/W D +.EQU REG_BG3HOFS $2113 ; BG3 Horiztonal Scroll 1B/W D +.EQU REG_BG3VOFS $2114 ; BG3 Vertical Scroll 1B/W D +.EQU REG_VMAIN $2115 ; Video Port Control 1B/W +.EQU REG_VMADDL $2116 ; Video Port Address 2B/W +.EQU REG_VMADDH $2117 +.EQU REG_VMDATAL $2118 ; Video Port Data 2B/W +.EQU REG_VMDATAH $2119 +.EQU REG_M7SEL $211A ; MODE7 settings register 1B/W +.EQU REG_M7A $211B ; MODE7 COSINE A 1B/W +.EQU REG_M7B $211C ; MODE7 SINE A 1B/W +.EQU REG_M7C $211D ; MODE7 SINE B 1B/W +.EQU REG_M7D $211E ; MODE7 COSINE B 1B/W +.EQU REG_M7X $211F ; MODE7 Center Pos X 1B/W D +.EQU REG_M7Y $2120 ; MODE7 Center Pos Y 1B/W D +.EQU REG_CGADD $2121 ; CGRAM Address 1B/W +.EQU REG_CGDATA $2122 ; CGRAM Data Write 1B/W D +.EQU REG_W01SEL $2123 ; Window Mask Settings Reg1 1B/W +.EQU REG_W23SEL $2124 ; Window Mask Settings Reg2 1B/W +.EQU REG_WH0 $2126 ; Window 1 Left Posision Reg 1B/W +.EQU REG_WH1 $2127 ; Window 1 Right Position Reg 1B/W +.EQU REG_WH2 $2128 ; Window 2 Left Position Reg 1B/W +.EQU REG_WH3 $2129 ; Window 2 Right Position Reg 1B/W +.EQU REG_WBGLOG $212A ; Mask Logic for Window 1 & 2 1B/W +.EQU REG_WOBJLOG $212B ; Mask Logic for Color&OBJ Windows 1B/W +.EQU REG_TM $212C ; Main Screen Designation 1B/W +.EQU REG_TD $212D ; Sub-Screen Designation 1B/W +.EQU REG_TMW $212E ; WinMask Main Designation Reg 1B/W +.EQU REG_TSW $212F ; WinMask Sub Designation Reg 1B/W +.EQU REG_CGWSEL $2130 ; Fixed Color/Screen Addition Reg 1B/W +.EQU REG_CGADSUB $2131 ; +/- For Screens/BGs/OBJs 1B/W +.EQU REG_COLDATA $2132 ; Fixed Color Data for +/- 1B/W +.EQU REG_SETINI $2133 ; Screen Mode Select Reg 1B/W +.EQU REG_MPYL $2134 ; Multiplication Result Low 1B/R +.EQU REG_MPYM $2135 ; Middle 1B/R +.EQU REG_MPYH $2136 ; High 1B/R +.EQU REG_SLHV $2137 ; Sofware Latch For H/V Counter 1B/R +.EQU REG_OAMDATAREAD $2138 ; OAM Data Read 1B/R +.EQU REG_VMDATALREAD $2139 ; VRAM Data Read High 1B/R +.EQU REG_VMDATAHREAD $213A ; VRAM Data Read Low 1B/R +.EQU REG_CGDATAREAD $213B ; CGRAM Data Read 1B/R +.EQU REG_OPHCT $213C ; X Scanline Location 1B/R D +.EQU REG_OPVCT $213D ; Y Scanline Location 1B/R D +.EQU REG_STAT77 $213E ; PPU Status Flag & Version 1B/R +.EQU REG_STAT78 $213F ; PPU Status Flag & Version 1B/R +.EQU REG_APUI00 $2140 ; Sound Register 1B/RW +.EQU REG_APUI01 $2141 ; Sound Register 1B/RW +.EQU REG_APUI02 $2142 ; Sound Register 1B/RW +.EQU REG_APUI03 $2143 ; Sound Register 1B/RW +.EQU REG_WMDATA $2180 ; WRAM Data Read/Write 1B/RW +.EQU REG_WMADDL $2181 ; WRAM Address (Low) 1B/RW +.EQU REG_WMADDM $2182 ; WRAM Address (Middle) 1B/RW +.EQU REG_WMADDH $2183 ; WRAM Address (High) 1B/RW +.EQU REG_NMITIMEN $4200 ; Counter Enable 1B/W +.EQU REG_WRIO $4201 ; Programmable I/O Port 1B/W +.EQU REG_WRMPYA $4202 ; Multiplicand 1B/W +.EQU REG_WRMPYB $4203 ; Multiplier 1B/W +.EQU REG_WRDIVL $4204 ; Dividend 2B/W ??? +.EQU REG_WRDIVH $4205 ; ??? +.EQU REG_WRDIVB $4206 ; Divisor ??? +.EQU REG_HTIMEL $4207 ; Video X IRQ Beam Pointer 2B/W +.EQU REG_HTIMEH $4208 +.EQU REG_VTIMEL $4209 ; Video Y IRQ Beam Pointer 2B/W +.EQU REG_VTIMEH $420A +.EQU REG_MDMAEN $420B ; DMA Enable Register 1B/W +.EQU REG_MHDMAEN $420C ; HDMA Enable Register 1B/W +.EQU REG_MEMSEL $420D ; Cycle Speed Register 1B/W +.EQU REG_RDNMI $4210 ; NMI Register 1B/R +.EQU REG_TIMEUP $4211 ; Video IRQ Register 1B/RW +.EQU REG_HVBJOY $4212 ; Status Register 1B/RW +.EQU REG_RDIO $4213 ; Programmable I/O Port 1B/RW +.EQU REG_RDDIVL $4214 ; Quotient Of Divide Result 2B/R +.EQU REG_RDDIVH $4215 +.EQU REG_RDMPYL $4216 ; Multiplication Or Divide Result 2B/R +.EQU REG_RDMPYH $4217 +.EQU REG_JOY1L $4218 ; Joypad #1 Status 2B/R +.EQU REG_JOY1H $4219 +.EQU REG_JOY2L $421A ; Joypad #2 Status 2B/R +.EQU REG_JOY2H $421B +.EQU REG_JOY3L $421C ; Joypad #3 Status 2B/R +.EQU REG_JOY3H $421D +.EQU REG_JOY4L $421E ; Joypad #4 Status 2B/R +.EQU REG_JOY4H $421F + +.EQU REG_DMAP0 $4300 ; DMA Control Register 1B/W +.EQU REG_BBAD0 $4301 ; DMA Destination Register 1B/W +.EQU REG_A1T0L $4302 ; DMA Source Address 2B/W +.EQU REG_A1T0H $4303 +.EQU REG_A1B0 $4304 ; Source Bank Address 1B/W +.EQU REG_DAS0L $4305 ; DMA Transfer size/HDMA Address 2B/W +.EQU REG_DAS0H $4306 +.EQU REG_NTRL0 $430A ; Number Of Lines For HDMA 1B/W +.EQU REG_DMAP1 $4310 ; DMA 1 +.EQU REG_BBAD1 $4311 +.EQU REG_A1T1L $4312 +.EQU REG_A1T1H $4313 +.EQU REG_A1B1 $4314 +.EQU REG_DAS1L $4315 +.EQU REG_DAS1H $4316 +.EQU REG_NTRL1 $431A +.EQU REG_DMAP2 $4310 ; DMA 2 +.EQU REG_BBAD2 $4311 +.EQU REG_A1T2L $4312 +.EQU REG_A1T2H $4313 +.EQU REG_A1B2 $4314 +.EQU REG_DAS2L $4315 +.EQU REG_DAS2H $4316 +.EQU REG_NTRL2 $431A +.EQU REG_DMAP3 $4310 ; DMA 3 +.EQU REG_BBAD3 $4311 +.EQU REG_A1T3L $4312 +.EQU REG_A1T3H $4313 +.EQU REG_A1B3 $4314 +.EQU REG_DAS3L $4315 +.EQU REG_DAS3H $4316 +.EQU REG_NTRL3 $431A +.EQU REG_DMAP4 $4310 ; DMA 4 +.EQU REG_BBAD4 $4311 +.EQU REG_A1T4L $4312 +.EQU REG_A1T4H $4313 +.EQU REG_A1B4 $4314 +.EQU REG_DAS4L $4315 +.EQU REG_DAS4H $4316 +.EQU REG_NTRL4 $431A +.EQU REG_DMAP5 $4310 ; DMA 5 +.EQU REG_BBAD5 $4311 +.EQU REG_A1T5L $4312 +.EQU REG_A1T5H $4313 +.EQU REG_A1B5 $4314 +.EQU REG_DAS5L $4315 +.EQU REG_DAS5H $4316 +.EQU REG_NTRL5 $431A +.EQU REG_DMAP6 $4310 ; DMA 6 +.EQU REG_BBAD6 $4311 +.EQU REG_A1T6L $4312 +.EQU REG_A1T6H $4313 +.EQU REG_A1B6 $4314 +.EQU REG_DAS6L $4315 +.EQU REG_DAS6H $4316 +.EQU REG_NTRL6 $431A +.EQU REG_DMAP7 $4310 ; DMA 7 +.EQU REG_BBAD7 $4311 +.EQU REG_A1T7L $4312 +.EQU REG_A1T7H $4313 +.EQU REG_A1B7 $4314 +.EQU REG_DAS7L $4315 +.EQU REG_DAS7H $4316 +.EQU REG_NTRL7 $431A +.EQU REG_FBNANACNT $FEED ; Banana Register... 1B/RW diff --git a/snes/xmsnes/spx_snes.asm b/snes/xmsnes/spx_snes.asm new file mode 100644 index 0000000..3c81789 --- /dev/null +++ b/snes/xmsnes/spx_snes.asm @@ -0,0 +1,701 @@ +;------------------------------------------------------------------------------------------------------------------------ +; Copyright (c) 2007, Mukunda Johnson +; +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +; * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;----------------------------------------------------------------------------------- + +.equ REG_APUI00 $2140 +.equ REG_APUI01 $2141 +.equ REG_APUI02 $2142 +.equ REG_APUI03 $2143 + +.include "memmap.inc" ; replace with your memory definitions + +.MACRO SPX_RECEIVE_MESSAGE + sta spx_message + and #15 + jsl MessageReceived ; SET THIS TO YOUR MESSAGE HANDLER +.ENDM + +.define SPX_STACK_SIZE $10 ; increase stack size if neccesary + +.define SPX_XMSOFFSET $2100 + +.MACRO SPX_SYNC + lda spx_validation ; load validation +- cmp REG_APUI03 ; sync + bne - +.ENDM + +.ramsection "spx_var" BANK 0 SLOT 1 +spx_spvar: db +spx_validation: db +spx_package_adr: dsb 3 + +spx_stack: dsb SPX_STACK_SIZE*4 ; FIFO stack +spx_stack_r: dw ; stack read position +spx_stack_w: dw ; stack write position + +spx_var1: dw +spx_var2: dw +spx_var3: dw +spx_var4: dw + +spx_message: db + +ddd: db + +.ends + +.bank 0 +.SECTION "SPX_SNES" + +spx_binary: +.incbin "spx_binaries\spx_core.bin" +spx_lft: +.incbin "spx_binaries\spx_lft.bin" +spx_aft: +.incbin "spx_binaries\spx_aft.bin" +spx_aftf: +.incbin "spx_binaries\spx_aftf.bin" + +.INDEX 16 + +;---------------------------------------------------------------------------------------------------- +BootSPC: + ldx #spx_binary + lda #:spx_binary + + ; x = source address (word) 16-BIT INDEX + ; a = bank (byte) 8-BIT AKKU + + sei ; disable interrupts during upload + + stx spx_var1 ; store source address in var1 + sta spx_var1+2 ; store bank + + REP #$20 ; 16-bit akku + lda #$BBAA ; Check if SPC is ready +- cmp REG_APUI00 ; + bne - ; + + SEP #$20 ; 8-bit akku + ldy #0 ; reset data counter + lda #0 ; reset port0 data (for protocol) + xba ; swap out + + ; load first block + lda #$01 ; port1 = NOT 0 + sta REG_APUI01 ; + + REP #$20 ; 16-bit akku + lda [spx_var1], y ; load data transfer address + iny ; increase data pointer + iny ; + sta REG_APUI02 ; ports2/3 = TRANSFER ADDRESS + + SEP #$20 ; 8-bit akku + lda #$CC ; port0 = $CC (protocol) + sta REG_APUI00 ; + +- cmp REG_APUI00 ; wait for SPC reply + bne - ; + + REP #$20 ; 16-bit akku + lda [spx_var1], y ; load data LENGTH + tax ; transfer to X + SEP #$20 ; 8-bit akku + iny ; increase data pointer + iny ; + lda [spx_var1], y ; load first byte (real data) + iny ; increase pointer + sta REG_APUI01 ; port1 = data + + lda #0 ; port0 = 0 (start sending data) + sta REG_APUI00 ; + +- cmp REG_APUI00 ; wait for SPC reply + bne - ; + + dex ; prepare loop + xba ; swap counter/data + +scr_data_loop: + lda [spx_var1], y ; load byte + iny ; inc pointer + xba ; swap to counter + +- cmp REG_APUI00 ; check/wait for SPC reply + bne - ; + + ina ; increase counter + REP #$20 ; port1 = data + sta REG_APUI00 ; port0 = counter + SEP #$20 ; + + xba ; swap to data + + dex ; decrease loop counter + bne scr_data_loop ; loop + + xba ; swap to counter + +- cmp REG_APUI00 ; check/wait for SPC reply + bne - ; + + xba ; swap to data + + REP #$20 ; 16-bit akku + pha ; preserve + lda [spx_var1], y ; load next block size + tax ; transfer to X + pla ; restore + SEP #$20 ; 8-bit akku + + iny ; increase data pointer + iny ; + cpx #0 ; load another block? (if block size is 0, then no) + beq scr_terminate ; ... + + REP #$20 ; yes.. + pha ; preserve + lda [spx_var1], y ; load something + tax ; transfer to X + pla ; restore + SEP #$20 ; 8-bit akku + + iny ; increase pointer + iny ; + lda #1 ; port1 = NOT 0 + sta REG_APUI01 ; + stx REG_APUI02 ; port2/3 = transfer address + xba ; swap to counter + ina ; counter += 2, != 0 +- ina ; + beq - ; + + sta REG_APUI00 ; store in port0 + +- cmp REG_APUI00 ; wait for SPC reply + bne - ; + bra scr_data_loop ; jump to data loop + +scr_terminate: ; no... + stz REG_APUI01 ; port1 = 0 + REP #$20 ; 16-bit akku + pha ; preserve + lda [spx_var1], y ; load program start address + tax ; transfer to X + pla ; restore + SEP #$20 ; 8-bit akku + + stx REG_APUI02 ; port2/3 = program start address + xba ; swap to counter + ina ; counter += 2, != 0 +- ina ; + beq - ; + + sta REG_APUI00 ; port0 = counter +- cmp REG_APUI00 ; wait for SPC reply + bne - ; + ; TRANSFER COMPLETE. + cli ; enable interrupts + + jmp SPX_Init ; Initialize +;----------------------------------------------------------------------------------------------------- +SPX_Init: + lda #0 ; reset validation + sta spx_validation + sta spx_stack_w ; reset stack read/write + sta spx_stack_r + + REP #$20 + lda #$FEED ; initial sync +- cmp REG_APUI00 ; + bne - + SEP #$20 + RTL + +;----------------------------------------------------------------------------------------------------- +SPX_Transfer_XMS: + ; ayy = 24-bit address + sty spx_var1 ; save address + sta spx_var2 + rep #$20 ; 16bit everything + rep #$10 + lda [spx_var1] ; load length + tax ; x = length/3 + ldy #SPX_XMSOFFSET + lda spx_var1 + pha + sep #$20 + lda spx_var2 + jsl SPX_Transfer + + ply + rtl +;----------------------------------------------------------------------------------------------------- +.accu 8 +SPX_Transfer_LFT: + sep #$20 ; 8-bit akku + rep #$10 ; 16-bit index + ldx #(768/3) ; set transfer length (bytes/3) + ldy #(spx_lft & 65535) ; load snes offset + phy ; push + ldy #$300 ; $300-$5FF = linear frequency LUT + lda #:spx_lft ; get bank# + + JSL SPX_Transfer ; transfer data + + ply ; free stack + + lda.b #$1C ; set table + sta REG_APUI02 ; + stz REG_APUI01 ; + JSL SPX_SEND ; + + RTL ; return + +;----------------------------------------------------------------------------------------------------- +SPX_Transfer_AFT: + sep #$20 ; 8-bit akku + rep #$10 ; 16-bit index + ldx #(768/3) ; set transfer length (bytes/3) + ldy #(spx_aft & 65535) ; load snes offset + phy ; push + ldy #$300 ; $300-$5FF = amiga period LUT + lda #:spx_aft ; get bank# + JSL SPX_Transfer ; transfer data + ply ; free stack + + ldx #1365 ; 4096/3, rounded down + ldy #(spx_aftf & 65535) ; load snes offset + phy ; push + ldy #$F000 ; $F000-$FFFF = amiga->freq LUT + lda #:spx_aftf ; get bank# + JSL SPX_Transfer ; transfer data + ply ; free stack + lda #$1C ; set table + sta REG_APUI02 ; + lda #$01 ; + sta REG_APUI01 ; + JSL SPX_SEND ; + RTL ; return + +;----------------------------------------------------------------------------------------------------- +.INDEX 16 +.ACCU 8 + +.MACRO SPX_TRANSFER_INCPOINTER + iny ; increase pointer + iny ; + bpl ++ ; check for overflow + cpy #$8001 ; check for an overflow reading + bne + ; fix data if so + dey ; + dey ; + lda [spx_var1], y ; read low byte + sta REG_APUI00 ; store + ldy #$0000 ; read high byte + inc spx_var1+2 ; next bank + lda [spx_var1], y ; + sta REG_APUI01 ; + iny ; + lda spx_validation ; + xba ; + bra ++ ; ++ ; if not just increase bank# + inc spx_var1+2 ; increase bank# + ldy #$0000 ; reset counter +++ +.ENDM + +SPX_Transfer_SAMP: + sei ; $14 = SAMPLE TRANSFER + sta spx_var1+2 ; + SPX_SYNC ; + lda #$14 ; + jmp SPX_TRANSFER_MOD; + +SPX_Transfer: + ; SPX_Transfer + ; parameters: + ; a = file bank :8 + ; x = length/4 :16 + ; y = spc offset :16 + ; stack:1 = snes_offset :16 + + ; types + ; 0 = xms + ; 1 = freq table + + sei ; disable interrupts + + sta spx_var1+2 ; store bank# + + SPX_SYNC ; sync with spc + + lda #$1A ; $1A = GENERIC TRANSFER +SPX_TRANSFER_MOD: + sta REG_APUI02 ; set message type + + REP #$20 ; set spc write position + tya ; + SEP #$20 ; + sta REG_APUI00 ; + xba ; + sta REG_APUI01 ; + + lda spx_validation ; validate data + eor #128 ; + ora #1 + sta REG_APUI03 ; +- cmp REG_APUI03 ; wait for spc to respond + bne - + +; eor #128 ; prepare transfer mode + + sta spx_validation ; save + + REP #$20 ; 16-bit akku + lda 4, S ; load file offset sp+4 + + sec ; set carry + sbc #$8000 ; subtract + tay ; transfer to y + SEP #$20 ; 8-bit akku + lda #$80 ; set offset in var1 + stz spx_var1 ; reset mem pointers + sta spx_var1+1 ; + + REP #$20 ; 16-bit akku + +_stf_start: ; loop: + + lda [spx_var1], y ; load data + sta spx_var3 ; save + + SPX_TRANSFER_INCPOINTER + + sep #$20 + lda [spx_var1], y ; get third byte + + iny ; increase pointer + bpl + + ldy #$0000 + inc spx_var1+2 ++ + sta spx_spvar ; store + lda spx_validation ; get validation + eor #128 ; + sta spx_validation ; update + eor #128 ; reverse + + phx ; preserve + ldx spx_spvar ; get ready + +- cmp REG_APUI03 ; sync with spc + bne - ; + + lda spx_var3 ; load byte1 + sta REG_APUI00 ; store byte1 + lda spx_var3+1 ; load byte2 + sta REG_APUI01 ; store byte2 + stx REG_APUI02 ; store byte3/validation + plx ; restore + rep #$20 + + dex ; decrease counter + bne _stf_start ; loop until finished + + sep #$20 + + stz REG_APUI03 ; send 0 + stz spx_validation + lda #0 +- cmp REG_APUI03 ; wait for reply + bne - + + cli ; enable interrupts + RTL ; return --make sure higher function frees stack space + +;-------------------------------------------------------------------------------------------------------- +.index 16 +SPX_Queue: + ; a = $00/$01 message + ; x = $02/$03 params + ; accumulator can be 8 or 16 bit, do not read anything with it + ldy spx_stack_w ; load stack position + sta spx_stack, y ; store bytes0/1 + iny ; increase pointer + iny + txa ; get high word + sta spx_stack, y ; store bytes 2/3 + iny ; increase pointer + iny + cpy #SPX_STACK_SIZE*4 ; wrap to stack size + bcc + + ldy #0 ++ + sty spx_stack_w ; save stack position + rtl + +;--------------------------------------------------------------------------------------------------------- +.accu 8 +SPX_Routine: + ; get messages + lda REG_APUI00 ; check if port0 is different + cmp spx_message + beq + + SPX_RECEIVE_MESSAGE ; if so then a message was received ++ + lda spx_validation ; check if spc has processed last message + cmp REG_APUI03 + beq + + rtl ; not ready ++ + ldy spx_stack_r ; load stack read position + cpy spx_stack_w ; exit function if it equals write position (no messages) + bne + + rtl ++ + lda spx_stack, y ; load byte0 + sta REG_APUI00 ; store + iny + lda spx_stack, y ; load byte1 + sta REG_APUI01 ; store + iny + lda spx_stack, y ; load byte2 + sta REG_APUI02 ; store + iny + lda spx_stack, y ; load byte3 + lda spx_validation ; add validation + and #128 + eor #128 + ora spx_stack, y ; store + sta REG_APUI03 ; message dispatched + sta spx_validation ; save validation + + iny + + cpy #SPX_STACK_SIZE*4 ; wrap read counter to stack size + bcc + + ldy #0 ++ + sty spx_stack_r ; save + + rtl + +SPX_Flush: ; flushes queue + jsl SPX_Routine ; call routine + ldy spx_stack_r ; check for more messages + cpy spx_stack_w + bne SPX_Flush ; loop + rtl ; exit + +SPXM_Play: + ldx #$1E ; $1E = play message + jmp SPX_Queue + +SPXM_BuildDir: + ldx #$1B ; $1B = build directory + jmp SPX_Queue + +SPXM_Reset: ; blocking function + ldx #$1D ; $1D = RESET XMS + jmp SPX_Queue + +SPXM_SetVol: + ; a = volume + ldx #$18 ; $18 = set XM playback volume + jmp SPX_Queue + +SPX_SetVol: + ; a = volume L } 16bit akku + ; b = volume R } resets afterwards + ldx #$19 ; $19 = change main volume + jmp SPX_Queue + +.accu 8 +.index 16 +SPXS_Play: + ; a = volume [llllrrrr] + ; x = sample#/priority/frequency [0ccfffffssssssss] + + pha ; rearrange data + rep #$20 + txa + sep #$20 + pha + rep #$20 + and #$FF00 + ora #$20 ; $20 = play sample + tax + sep #$20 + pla + xba + pla + rep #$20 + + jsl SPX_Queue + sep #$20 + rtl + +SPXS_SetParam: + ; a = index + ; x = param + xba ; rearrange data + tax + xba + rep #$20 + ldx #$21 ; $21 = message + jsl SPX_Queue ; queue + sep #$20 + rtl + +SPX_SEND: ; blocking send + lda spx_validation ; get validation + eor #128 ; change + sta REG_APUI03 ; set port data + sta spx_validation ; save validation +- cmp REG_APUI03 ; wait for spc reply + bne - + + RTL ; exit + +SPXP_InstallPackage: + ; x = address (16-bit) ; + ; a = bank# + stx spx_package_adr ; store offset + sta spx_package_adr+2 ; store bank + rtl + +SPXP_LoadSong: + ; x = index (16-bit) + + sep #$20 ; 8bit akku + txa ; a=x + sta $4202 ; multiply a*3 + lda #3 ; + sta $4203 ; 8 cycles... ; ... + + ; setup send + rep #$20 ; read package address + + lda #$10 + nop + nop + nop ; small delay + clc + adc $4216 ; add multiplication result + tay ; y=result + + lda spx_package_adr ; read package address + adc [spx_package_adr], y ; add song offset + ora #$8000 ; + pha ; save result + sep #$20 ; 8bit akku + lda spx_package_adr+2 ; load bank# + iny + iny + adc [spx_package_adr], y ; add song offset + ply ; restore address + + jsl SPX_Transfer_XMS ; transfer song + + ; transfer samples + + SPX_SYNC + + lda #$17 ; ask for sample requests + sta REG_APUI02 + jsl SPX_SEND +-- + + ; message received + lda REG_APUI02 ; satisfy request + cmp #$9C ; 9c = no more samples + beq + + ldx REG_APUI00 + ldy #0 + jsl SPXP_LoadSample ; send sample + + jsl SPX_SEND ; sync + + jmp -- ++ + rtl + +SPXP_LoadSample: + ; x = index (16-bit) + ; y = spc address, 0=use next available + + rep #$20 ; 16-bit akku + txa ; a=x + sta spx_var1 ; save + asl ; shift + adc spx_var1 ; add (a = index*3 now) + phy + ldy #4 + adc [spx_package_adr],y ; add sample table offset + + tay + clc + lda spx_package_adr + adc [spx_package_adr], y + ora #$8000 ; wrap around ROM area if overflow + sta spx_var1 + + sep #$20 + lda spx_package_adr+2 + iny + iny + adc [spx_package_adr], y + adc #0 ; increase on overflow + sta spx_var2 + + rep #$20 + + lda [spx_var1] ; load sample size/3 + tax ; transfer to x + + lda spx_var1 ; load snes address + + ply + pha + sep #$20 ; 8-bit akku + lda spx_var2 ; load bank# + + jsl SPX_Transfer_SAMP ; transfer data + ply ; restore stack + + lda spx_validation ; get sample # + eor #128 + sta REG_APUI03 +- cmp REG_APUI03 + bne - + sta spx_validation + + lda REG_APUI00 + + rtl ; return + +.ENDS diff --git a/snes/xmsnes/test.xmp b/snes/xmsnes/test.xmp new file mode 100644 index 0000000000000000000000000000000000000000..f473d32084a2ab7e823e046d69e0ab2894bec7cc GIT binary patch literal 180290 zcmeFa3v`>;btd}1@DNCm;7g<^iQogE_yq8iAP5iy2}0D%vST^!%%n-q?{7cOKIZ@q<%Hr>K78Q=Km9NM>HqXI zigHI$J~W{W_*A7w{eyR_?|8pj_(e7T%j%zhT&;F#Ki{lX2ejWG(th@w_6z?&``_NH zow=ZW`JZWnAJ;zU)W74>|LA}|QLX>G8a>dU|Kef&3$6Ouqxye1rvKwEeZEUy>(YOx zOaI@y^eVqT;MX7V>mTszzZ=m1ETI3F9^KiiAMe%A^y&vf`iG|U+iCqLPU`PDt5-j+ zfB1s_TOZet`;9M77=Lo!Soo0fXtm=fn;nN+93O6TJksv?PKVqbR z9CiHLnBy~Jj^>2py-7!E(s8k|*WJ{3)cH~MFBN4*{(JxFj*oZzYRB()98px=qg5LR z9Zr`U&#IbQZ(V&uV`EcY%i-qI#Y3(CwL|ry8dW*8ws%g2#T%)pfSW~VaQF4cJhm=BV;aILY*Q^wd ztN|yvmRyTcI9h1G*?RqEYr$A+QQ=GbS;6#3$enuvKG^nTS?rCD}}MO396h>m0OdzGOiSoYbg}GGl8B8 zQ_7vRs;HY!8-+Jo3Qkc3kjoa=u+!TW^oG6^6fiEeA={u)TMOi}$cj08=G>!aI zO5xPn85-PabaWOSoly#B*B(OGcOIgS&M9l>==M3>dRSR|SX1siLah`YQP$pp#@?YR zD;|7&wD9OUSaP18s{wqP1{3jw2UYuMTPxveN(UcHci^}-9v_4D*# zB;0uvtri|-B&>m z<<>bBkKBs~UvousZa&5UbCFjfelsjjr`!l)rT>C&$h6NoWU*%5~+slv}4%JaYb=AB^;UO34Ls0i|&A&PgJrJJ+qO zokYpwx#Qq`VLI271GK>UwP{@K&Gjmf%!yoI4q!~*NmHHvT)#qs%MIiPlv`6O9=XBX zpppybf=VHECj}C7pQBcV2_YKmX~EZKzn%AF+fJE@9~GYPc;1q$P9s4HD z;9>x!dMly6l&sgCGZ245twV=}u{&d^|LTR=KTFo>&Zm?$d{l15)jM&NPf5ndRHz04 zUAZ$#&5WwdaKY&49ViA!hc+otm=VF*LgWr~2$xCWZVjtY!nI*SD6~>73@Ji8Nmos% zAXrRlSO^!wAca+VElll&3ZWU++n}l(u5R_bZ}M(2;C^Mnbf>pXA#7 zwqmpSlm0wViVFD%{!IJxv7m+q^QKSBr~LT{{>0Mxm=C?6WHTs2N&JcVUyC(g)bhh1 z%_|-ns9jg+zm_-C>+SR(1?08w=ELdj4nx2D{PrNdX2+e`o~G;|9@QxCFO3j(pC3fQalRDi+Zgm9uK2+p8XVs9nDG|1aGA=V5Kq6>5u|H=3@MFkU_#vgT89tU!YCJ^a?R-DwT|X2F8Q^^G)mH+ z3TA};f(4UHrXxtkEU0Q*rZN1=Rsb)9q-zm+*~}A4t_PLB4#Flw-*SE+O;vDprZ9MC z5HMZD75uf#nOg&DVF37;A%B9;h5kZ6-R%d!`%xk=bE{9q0}P$PheB_mchSFj2VP0N z123ks9-$sJQRunVqvHKqkE)Ow{hmLQx^-N=a~y?9qh_|uYX72gr<*Fn-LY5j6_i^6 zwGdF&0;Gk0(n7o_ce*r1yVFIblr_9p?sU>EyePLi)Ix`{)zAHIVaf!jD-G4>X<(82>>YoW37;F~e5Tg_tVpF+q%BRfPR!;4aA zy3>UB%32edh{ijOXjEBiq=7cz?VSd?sobf@pF8z*Pg$#jg{f1O(D#d`D>DPrQR{wo zb=a%v*}%bpraF(;sYT(tS<{s@Ym0-% zv&FdatkqE*Y|0nIct)K0hDHB;y*1d7A8VbnIvR-Z`39@M9v3_6f4eSY4c4JL?kxJV zF)ldXY9(dKuc4QIFA5e-D)}8QiI(Sz5j^A0xpJ*BS<7_K?x|Imjk?j^95-JwGYxar znAIWdRf9Fmb=EcdUk5r%1{T%KI%_Z_#@MiJHq{#WqUp^-Ud5zpt%mekch;<0hW21c z<`q*{t=Ll-VqhH#y3FIPw?gZh6@3|3yRwt8{|12i@_e0TS}7~`6^v@Wp*YZ#wF0Y2 zO?9A}-P)w?uwqm%P)w*9%lxL@UN)v%(eF}&#TafR(ctUcV8V+16*ssYYJzrcN9fh+ zSxu;_`n8Bmg}v^ic`I0CBG@! z9_F^W2disGaTG&(c22e&60LTXn+#crr-)Q|ji=C5$Vw7BF=i7O8E66~nLOrYdGOy( z>iR7BDX9$XD6R^Ime@(ogL#=vf%8|n;UCOMd$b|h4smfagQlKhF7C_2?4(wV=$1Xs z$dwdiourZV>}VM)X193{2V=W9$Rc!Y3l>IMJT?o7bIc!RmuQh-Rl&gJY_wLC3EeG1 z?TcnZW;^1kHLPOHV-*7jamD+^qIuxc;O?_Z0~rykXx8KM!Hfb$YRIg3G(4!NB7AHE zNXl}VkX>dI+$eV8QyZz?Ld@e|NP7I#M)hKBG3K+ozG2vb!ioJ#)nbo;?^_%)h%~4j83RC5K;^sxJdAyv-UZu%%Zo+#|16W>7*1wqk75oVZ8q-Oad?Y>LCU7q#o|27=A`d7B7g)sEsU zv#;C*$!B*LWtQ!h4eYZ1iAt8eg>0Bv=(Unx5a5oY69|NCR-?ME5m`S8gaS^0`xxYt z#Ip@D>N}8Qp5PA3_etsF6F`Og75u`z&DndzLuFP}ZFLO2h(1wHn0_U6chz)}X@`~a zd;%E#M7HCg=?!|$ubN(u1C*&+gD}&B>yGvFSK_)}4^z;wetzAtqs$T`XQ8P5bhC7$ z9@d46-!?v^He|^NiW=pncFtQMfor^a!74Q~gDW>%Gk91Xm;t%pNi7W=@E`f!b-yCb zDakwJv8?vhu-BtOG2tX+!vnI-cDup8&DnB`Z8`s1TJw@q9>}#`kDD!`vh$C5H)HZ zuvQbg{ys@4VjcBrQls(1;%hd!=H{pP67h|gXu>^7{sjOcpr%~k;F6`9G)#X64=Yee zbKOGh4?qg$Z@J=OH{^!Lk3qdqyS2VN2 z#6eDj@P|GGX5jqk4`vLNa|PVCCr6uB#k2?$gc?kSRx~o3-ZC{a3Fo*>rIhA3G_m1% z-R_YiN7?h}DC08`}-axZB0_$TQc(!Qj&)OD)hzQuj zF!>Xk3ERHBMLAd%E;C6q=kB&=Bx zKYczebQX@ygHGhBFBD@@N79?}Zwd?;KvtraG%NZ};NqMK>0fGJ8L zr4{0+R!C}vQ7c(UXoUzGEX1_Jkd-QBQ3@kkA&kz&G_5eK6@u2ZNUIdkgh6`O4kXVs8(prkB19~wL%Mq)2tN^ff0p9t+Pqq=u@{)E`tOc-s@WdcPsKv&Dvr!5=qVUIXH{=uf-cOioOu3 z^>0P08nWt~Dusl+2;xmVaLF?DMZf8V^;758+wlySXRDlE7;t;kET*diFaVen6iw%| zJS)eX)TDX&e8akK1&#=hRq`k?g4iY_9`GiO;v%<9et^+IUz!D z*ALblyBui%w`?~mb;H)gigHqmkziN|SGDd=FdSifl#d*>20?W`-ez^kq2$BuRzF>f zbXpx43X*u%pcqU(d>qAO&0blvzoOl&3mTalT-=lH{vnOH5wse29lLN-}x;5n#*i8O2u z?_=Pl%^HINCvpA&caV$O<#U)gqc}zb|DKT@%t6KI@)((H+rs}<$-ct{flvBA7T&C| z@G-LR^A!euby(N5Vap`9U?ta;yYsf`Tb;D zLx*m*Sh&&Bm^Iz`fx}I7Z!T{hX}U3cV<8_ndb62sA5-!HpRCu;^*V1Jq8nY_{6Ik7 z=*Eqg0>?f2&88*qSIl0;dpXd@_b!_QxOX`;s9ZKf)YIjGu;}TsX;M#_%Yk9&Yl*X@!w>nuFDd_BtzmDW?sqL20WEt@%S&RZcyU<1?C zfOnS6EqrwklDX{>CrmSF;|#8|G3icw+(_Y)%rj$9|R@mS2PR{OS~TMZys-I^{%Vl!XupU z!{py4=%Gs16;5qZVj6W%V624{4Rl--5JVN?#6FN!7{Qys=3--E=yU19c`6vfo70kc zg?@aP5G8wvcO%qZfH>M%=pa%vg)WY^$%)f~6Au$7u)Bd7b>8EajQp~5*+df{`deTl#!uW@012}CVvMW*p3O+ydRSJS zTQ)0zNcIGCN@EE?*%*(iOi)-wxBe;;{4LZvtoS-Y*lvWZ%nS)`LrsfZ8!s&jOT;(9Dpa-W$x6c3d=_*hsCTPtJ4Anf zvkw$pi#okt_@)|Q%jQ9d=^%Syb$RDRV^&BsHplWn5+nu^ymO$yxVOM1tE=(S92gYZ z%*bkj4^ier8~D)2e26;d1CYfYJ_wV`d}u2TrmxHa46+T}@m?aD1&b=~URrJgYYv%k zE$_RuEN-kTmo81--9~WWoP{k~B1B}7rYFk;--IO$ETSxVdBMVzY@o%afJv6g!mGR0 z1Uo{%7t8=MKQBSCn)G;_t0}zv0+j<0zN~y%`31*_0>1sJ-+-kV*iW zXE@DUT_`zUoc7G~`pP^I!{wn50!KiMyl^j?(3fZn;AHBoc4Rc?sl{!R$+Ph%sgw9? zFZUv-nxmE&RI9|M?Gn)U^`57?O4BnoTr{TIm_0Cwp4^-u5tzPsXm6)PtI8o%#}0r2&GUXckqA zAUGev6%Z*Z=TF7Hw~I)OAfFyCa*9nn%|>3 zO5<5qSbk)(KLO)U_WBbg>7CNyljoHyr}Z7#n-s+IDba!u+c(p*4w8eiyU>d9!7{pb z6!$d%MIa17w|Eplm&(JyUt3yS2c{F!H)t4C?Gj6=81`DmB{>>NNqHm{`bB{S)g1J7>>BVL}@JqbAMG2h!^oy<804cKzR z?p<2W-QlHl`gZIHP*&Jxtmn*&@Sung?OqGrL|k8Pzb7>K5?a}9kt1k`wq0Ot6%G9` zp#f3EZIwfVY*ZJnxR{{EuEgLz+3Q$X($fT|$^pWPVcGVdR{WUnbJXg-VM0`2k|Q2- zF8y#}f*l@6mj0mNf~F?kSCE#OFPcsB$fC@z9(Sl3vhlcJ%&(rUs&!&oP)(~dr>kc2 zXR#DBJp=8ZnVZ3`#F^VQUmD%}#2ws+A)*4-)J#6@pIOm#D><{Hg!5ClmYBh=#ThF$ zlTYAJbO!rRW~`AJ>}a9IpVvmP&WBBIRep<>QP6xl{e7!{KE%_`T4xpr0p#5mk>$x2 z(|F%^APY`nxfmH8Y7J{lwHG7q)+2vq^YNnW%VukKRbriqW3K|v@OKc zZYw(X{TrF3y7re6eX4HtU=4q^n9^sl_;7TozH4#NihLI7%*;|l_d-lFQNXOtd}OJv zC!t1A{&;a%|73Ae|Kw-EjZZAq_akvUjO}2b`FcYzmyeBq?Rf4#A5?P6<~%q&FS%P` zKNe_WQsJHlz|M$s3G7``1ePtbrfkY#0^yEf`Y7JDZEV@@jli9e6)V{-=|Xpv_*RyR zutmg@fPOzu`<;@f-R)%|`XzR= z{B2--rRHS;b21mZ1CELz!e3QDeSL30N%ek-K+e-fWaww@P^6f2F0p+t(V_E0dBm358FZNT+nBJTx(jEY+zi)H<6U>8R zpI(aoihYQhQqCpgQW?;HFElSi-Lx2E^NjgSG2W02^a#z1F=n)}m}EvTrtQ+)^WwvF zb&~wzWaX2N=~RBk@g1e`4m#6=Gd?)-Q+No6fcPlTX`Bzjp%xrrQRsM48Yhf!6h$da zDuoH0NaAxz37q`kBTG2)go95}oZL`wM2e0|4bhQ|LKtT+aMB7Vr*M>t4^-jM3l6~a z;MkQ?=vJ^5olb2b*WIaLn|Yxf$GDV2n^HK2gI+lHg(F}};jmJ`xi6do!-=pa?9^5Y z4N9S2DPSk|&6}B<#mvpuGBOnPB{h%5;_@El9xi7O*HmmR6eLKvqeNYs6A5=pyo)1R+I3M$18fs{Wu6*xU zbmedRQ!9VdmRk9~mRk8rb^z{=kwhF1Qj6Q7T!R&@ORFVWP>-+EFj zN=tM_Q3mk0b459h`;+YvqoLur^P>v1FSWUuqUZbH*|E}bqvOvz6!oB{8x8~Kun%~u zs_7gyPGUDTA8zh$X+3f@&=KfpIMmiyReg-_`a0YFUG<$`?CcJF>iD1cjt+b>`0em7 z53A9c*dLAkT=KQaNcwlD&C`o#|F3gD@s8yAcfIphf9#k3;jMT5_@We>fA!d?53o%r9pCW#(g<+00z#lbOZLQ<+Pd=Q5wmyqNiw z%&%p>ka;=tmZ?-=;JL3KmaYYPn;OsS(@J2zBMZE+O6_WQC!hUhlr zI(ktT-3~bqg97UGqUr%d`i=S*tH-v7YN{K-Je-tb<_>Aq8%Ppgi>hvnk!Z87_Q$dz zwHTsdgtQ(s^30IVBX}lafV;KDCf+hB zV>^M;U`t4gt|kCHB6pZE7bZ6KgE4M_xxSYfa@`wFhFsT%!-iaYHf{*D*#)^)k{Uyf zbP$lsCN!beA?P3m0ld9f&3HRd##=m_bYzpP3cafnqzV(dS0~ubYQWq@hb|!(zi1HJ zMlR}`1R^~wL1YYo9WW!#$X6+nyIN^fdm0krPDKs#PCAEwhU zfY#0^av#0up45vyFmC;7bsW4J+Z5c~Z~;c(<%Sb5B6I8LV|H#B0dSjO<|7#aX00Sc zVK*YA!R-WxgODI`Q%Z2i*-9fIZW=Z>310^R0OBTLU#ljICJ-8x`06987Pm|s+(Lt< zzJ1{$-B`Bpss$zN~vd)!{FzHJJ#Q*_7=O&8!$NfTIoE()x?U zRBinQ;%V)*KJTkngOkNzB~2#L6xl^n5HtlPO{P=Q6e-aZ>?-z^Xfg#&k$Y&0UJHVz zzA{Z_nWjhuP1wD4HMECMLqtrr0m8?c46=- zEcq0%`4lBSjg#!cm3)c_K1IuX8fV#E3zxYBF$l3C+JQkGS3MO_0yfL!5R^DNEI|n@ zx(}54Z7BJ7L8;>&D7D&9I&@zs)e0z8)m{q{lu~=41ez+K1e)#xC7Y%o4#HMIiD}ve zC8lW%P&$+~?*pYWO$?SG?RX}N!pcL5;N^op(cmF+5@(U<+>;t7EyP?!lhEkJ& zQk{fSsuD^bK#6H8K?!`i50tFOWD&kb)&1 zSF0)@mD~#{3aIp`(7LEGOppqfSQT;(3auM*^%A7IVVyd6LCPl}b;M>>)X`!?YL9iQ zw^?-`_fA!``dGBv$rp z$8sKCib#ssqKlL0h)ofwOr53eP_$u7k2w{0ch?rj;r76-C>l!E!u=o^FNL3SY>t-N zY}(6~JX%d>gSFdQJAs6mMM$ne-3*3FwhCeDMe=$$HRWWd2P-v(nbBQ1JKzdTGlpk8 z1gaI|_nER4I3>oFN7J*TUXai$LWZb2K=8_rA|fQ(Law%z>PA;~2xXi&{h?HE`c57;_NBY$xkD-iLoi3}aLk`@C7=AvtCQS%P;=o`?9h z{yGzf;0ow+fwHI<0ep$FZZOx?Ssb$YW;%VYYy?FdN46u5YL6t%0BI&j3+hc-6T^TY z&{sW%;bhVxYE3qXcrL1Wz8%tA^ePM_i>a9;OQH;1gE&_V1t#ASzU?$r(Guk8$|k&+ z`1EF@PQf%t6|DnqovU#taac=;UF zHQ6!8w%{AxgMhCj^!6&uyREC?$(X$DL=D0v+d5V%78F3~l7OU+KrRM_ zf)bWP`fgZ)Qi5f~kg_NK0?vfWA*x+sF@RZ1VgoL*I{*us3{0XH*tBs8-M66`Uw@qx zdt`M4^KT;5T&ebuatDhM2Q^Eea`s7xV!8|TNlH5irpJmybR?R9U^)*=m>$}W7-g8& z*)Tnr9mKE%Ob=AR6yHgLae==|38HW)fHwl3Q)SU{S8gO2VIDM-S zfrnrQWjXxqkb>{yV2A)|33o#+P!j(hMotI&m*Rv@3}9?Q zU4)gyt_WwXYJ*VP$`ln8AS~I+?1V!QY6wE5tz4=0$~Ivujn_-Ia&^k7lB&X5rjbl5 zL2)+>q2ZW6!D8-);)>I-t>x;J1MRSm#N7dG@w`izTuxP>^1jxxF*`vTQUYe#S{}qK zRq}C#ttA}I3+@Vtf=RHI1W{OY7)e4DK{PA|3k#`B^Qhe>gPL$dSHhhzst!R}#MP#) zro0I8NL!fxgrmg+C^mux(9Z~&7E&g-yf}=hBr~BNSaG`HoUucSji7)hyFPNy34IuB zwcRryBP?N@yc>y@Eg{)ASMPR$Os*|j;h?42-s7O*bN2-yS!^PVKqxo>LkI(_J1S9V zBd~2S*^!^|4qs{&uUB0p@trKsxuk)H^zNK4+@x=Gyc zjr@$Vi?war_NcKp@b0piP2?g{;NUROE#D`9HC*iQheI8?T0ZROZc zFFVyz?1v+rWHJb)d*Bq*$(kMb`^J8pa0Kw&0f3cazib>GipUQh_APALuE>v|E+fB# zdn3OCBJvyDH}V_ZKk}0SuZa9~a_Xb5-rG_&RWff#kRZMnv`Xx)R10p7BI=83teij~ zRJOJlhZ}>b+l~^GO9oGbnxhot6PICFVD1p~a&}v}g)+7t05IVYO}I}BfL`2}3xKpLI_R^Iq!+6m70U;Q?FArvO?1$xFRkpEdM&5u zwQ5e$t8Q8ls45QflIVuR+#VFmokW*$oI-=44V@M-L6^oWaRZo=u9`IzQJK!3)gfBl zL;7eIWnBThg2Ia$Yu(kswrpG#%SC2+fg|E9Jl+Ys<7Gs|Gc(R`qfZ1r=Bq?Lc$1F3Rb6tcyaB z_PQu0GWNQtv1?tF78`c0i?U23_KLE}E6Q9;#$)*+&%PFSh7ntTG;=q)Mv7mQ^HGCd#h${?i6_tgCT+XPdNRJZ(tW(*`qX zPa8Nh@B%2*qeL+!F=*Og!kSIkGgo*Awq{6T;5aCzSR!tNFT=s_&SJ`*x+3;vFN?^x zIH8FEfN~g|UoqhoQaUONdxkJr%o!*So`R3XRFP&3BENDqB-1NV3dZ9Uj87QDFmYPN zgdr+(D{)uv>Xc#67ADHGg=cIIMrjf&U2I$?S0+ly6-*b%$jX3)T>-n;I4GN_^aB%= zmwEwtsR&%`P$h*iIbD$1EJyf_ltUE*1(j^!W3FE01nh_oNU22xcXg<OcvIXGAg@fvgJtxPHwm> zF?pX!L@@>Y2nxxuR?c9{6Nt)54o@I#d7IA43B>-6mBO!5yw_sSUk}n|Z*;uNvHreH zlm0M{mBQ3LNfgK42%#}MiW8w(WwsV3Z?(s!4Xy-VAVq|Ubcu~H zN+ZwGGAdKX!wu>6SZvj5wkrcR?4c0Jw~0|w5kijvoLF`WiCO6f*veVkQ~JV zMVU)jp^)(!hfgRX7AY#|!6JpAhbN{!DZZmJYkXLeBP<)1DP)GOv4T~!kXjTOy47%r zRqzTnX(A6&N*2Enwns?0kY_}ySXwnZNn9q7Aciz?iDz~O5jL%qAujU_`C(E$!83$$ z|Br(!+e69VGPX!|fL9eyBko05kQMU22pctqYqz6biiMz?dvJ#2eQB*?R3<=H%`(uO zQZFf6=MZ{1ig^L0Sc7`w8>W=P3KC728tAJ@ujAmg2sUW0*Ipad4lvwkm7)S~@TEei zwm+o>v2Yo0?5U9ShCdbfhb!e(iZcGmk+N2TtbH8mF1$r`kr9R)t-u?6=mWzWOd2mr z?8Td;5jwgL-Wn_MMq945gW8JLPJWZKZyAo{iXoR(vSlLGw|hbwqBWCwZHBTVm^*SB z8o9UPkgJ^4a*|04xsbo2yxY2mS5|ld0)^NvPz(Z&(*i`u<*A{NVV>_`M(W~>4zG;4 zKqkVY5n7_VI+%1)U0Ac#h|7US5ih`^Sy2+2dM!rFP%qGq%JA*#LlkWhm9TC0gmg9L zvSX!~JMir|?SH#E*h!Ic+ltdA@+64h5|YRmC6_4cI|!$a%mDk8Yo@()2Y--F5;Ncs zVjyw?L{=4f&t!RtY{q$;vZW(>l$#ZqUxXgqo}iFd%CHzSf*^CkMY~Ti9I|-zicF4o90{EO1hT-dL(L0@fDf{LG#sqbS zFbf%9#}Rz}3UzHXBQd87jEK6L7xz^psz55`&=QF6^=t@9Q&sl9E2O$@WUyHZHc1Q{ z;y^X(ma=9}x0ADGXo}aQJTw-#V1fX6Xf$RM9$Ak=cqeIgHj3hqKf-nwg%Vg26{D6( ze)wHV@^gZpNsc&amn-#&)Yok%VpXKSXz(=Mquvq@jFOW1Y1#@F(J4(pAS3hP%JzHN zdO*CJyq9cW;mXWCpdkcA!-QlxnN^Z55iWA7Z(F+V`$(6w@)90$%RzC-?j44KWlNff zp#WPfUj`H8i+eIN1^I%{kZ*CYR9CBG`QmG{XNe5}R#~SZz`*7$?{$x!06J*I?`a?;!q>vU{f7+~oMVz>cEa)t$2fGv6)gY{y zFqHN>9UR`Qu+&hPk|0-{=#JO}d6H=)y#ZbD3MA9jAs3xrC6587tyEWw=#um`C_M?( z2^n|tBoxM*(vv`IvBm`Qii2qLY8;wt8f7N}tja`%vlsrf>_c2g_L=TZ?P{dW#mtGi zj%*LI6G0dQ!iZGU0n?@CKo=>tAw5V`hjPd5>ENKf?E^NOh!?VBXG`^*B)HXRL$%KA zf$08o%~M&y9;lWFZdME%n$0WdEH=3U&ADmBEO4{ML8nz5tKvvP?-0M*8wK$#c8OtIP6iXZHt3+b=l$|Me=|w4ndqo2}JHVV8AGX*vET_sS$aPkTB)adm!t` z$`J0Lth4kT$S+IZ(Xh*RRO7lz3%{5jQnoso4V8Cg!Jue+a0V^31V({1K0!ey0<LXtqC|L-_5j)Ia!ep%JH5ilbL2@D)LseUo@fVD94o_QYK>RfN`h1xjZG`!Puitz zy8ucEXR&EKnH?=N1XYH(!$C1=@#`--X>GcOlIS+Wuy3t=Tr7!`BMdO; zvz^=@mB+NcB3aa2=NE^7Qd7cr+#U%T79~#3jq=-!| zMk2;xJ6pt9@WR3p)<$q>Ot8;%1^Cn$in-hEb3CmTOC(7vVv|UR(AXZ)@jgRUZFlA+5mh|FE+{(a1b zZQt&-ZM^pcwhhx&RIjvcFolwPyKEcwpzI=!ZJV7iEIE2sF&8Txg^<|UN#ZXP*s+gY z!x=@Cax|Ci8i?b*;I~orzrn7-Q|z{D%&{M6*JuatZo4)MyH@rC8h&i%RpeB4-l!Ux`$l$P13TjP2!kb_>IbiUzm}0mga`hYU38_ z%!|KJXI}gj>I{~`Pg#Q{9e_SdGXj0CG$Ul`$e-Gp3d})MiPabFRV0F1#UgMLi@;?H z#S(B-E&&hACE##*SF&?}SAfB3S1%bQcc8TR+kwU3eJHFr7fUA;e@H_&CgDkj&ICNk z2e3Z@XY9q_U51W*g>CBO;xEpg2F2Of#I2sFECw&FkI%6MO zS6&FNv~_XYSB%JoV3U1C$Qdm83e$xHf*oY)#KGdY3&-HlZv^%q{1wG0W~AgyFry+U2=u|xZioZ2 z;BlC|KAc#eJdoY_G6D+`&#|8^9g&5fg-yYnlxUNFmhCW<5WB>Gu%DIN!zF!40*T{z zppT4t7@Jf}?@!eQdmfJX<;L>to{;KGr@O8q=O zNeCNVbm;$#MYf3UHbGIoA^J-paXh@We*ccCL&kcN>n$ zR@uj7$>7;4tHI#GbYg}o56Z&e^)YjCuv5sC;}i)%03Vo5(t%mAp)W4tk`aM7lk@@By{r$|EYCp@ zwz;sOfMsXmC|(|P9jh?Md<0)ab&f-}vexY~c5INrJ@{Fn)T2BKsG-3ux#%dNO&po+ zV?zdxz)D1AG8-p}ha}@D)-9cxJ&H54%n~pbtr>@KT2|tX&&<}#Gqbhw%xo2(nWYuC z5Mpr&xgnSv3W{}ncZ1D3cu_hzi(N4knpz1-qc9~9Y)Ms#K$LOd1aL{RG(gyE8ZJgb zr)Ozf;9&AfvN~mJgXxNGa5mhDZAZLO2U}k7B@l7)$3_nh(2C|vy^{{mBB6a$9-nQt zx4pc*^BObt-(xKW-|CH% z7*S*BzH2FBT28t4j-p&kIfks6<8To_2S8O1(OOCa<;VoxrdEslYE^a$>FTKF;=NM$ zWWR7r=Gu{YmwTmnkpb}q5~rA|q(rv+3Jz3Iwstv1oZ#J2s4J82VmW1EpXHPU)#l|C z=Y11mL%Ww#sM{V+vM1brWTc%}!yS}}r)UC0#<$9d)L+7Jhz{&DY)3s}&@k8$opv8- zRjY9iO)wIw3k`6DpIyb5-Xw2(4$7TPh+sG|%&TH{%AZz}IF&Ec1a{7vsDa0zD2vkm zw8l+BDB9bx#b!5T{4v}WvB-#GwOO&-{|zpRK!I){O<0>1JN~iSAWb*d;q}^ofD{nz z5*UyP>@dyrp2CU_QrK96(XL?;QY60z9O3N|kI1lN-|aU z8r#t9*(ejptVH62IKt*|7s8jR|=%PWM zEk^whfW*;CBx0MyFmyRwaUdCj#=cDFwP9d!%+_Vv>9ZX#V-a@OMJKqg4MUMfxs;u! z57H8T$>z{$7v2gyT*asfF(suw% zJ^G>{ROV@?nBLJB`S2Wt(!6vJ<_0qv>{o$0KaHSKCO;C}a{7rB{pU3lgi5I-=BE*6 zLaCqTFVCUehn?l6+(&6PVDC30m3|r_EpLD?C3!K`{=ADiNB-z(N~9U)(>(nQmZqPW z4NyRf$$(8=2T_Nd(AB|XRz*O2xJ+Hdc}P%K_q0*YdtmRiZR9@h^VCQ3<#m( zONX8YU2%6CG0jeOR3vrdk}^HQl%Xlii*P97^A27>hEYRX!~}d}3o{EX(Y%vZtjG=j zzhL@=lPNplD(Qq*#}O%Pmv@5FMgin~r4wHNs^A{EVW(4gIa>aQ7bfS$QiLPUjzcd= zFW`l7-FC#;39)?}ei&D6S3K^SWhGuQUc9!CE2fgzpd`F8T$XHDdSiqqVk2HO==EG?(;U?aXtjl6Msmp4w8 zEnuZLrbu^}H>RCK!UR@+I|J8d53k{~`AyjH0^}^27kmC?l zYQ%P_s0&}$qN3BdyB;G_U8v*6l`5*_(w>RJTEz`$OvvG;I&=x@8h1Oj&3Tli@B70O z#h!_yqmV=0yn;(kF7{^Jt*qb&G@Z}y_nnUw*M6jeA{zexy$Y7B+3r|4RT+UmHF>$1 zzRn5C#(o6=g!h!esczDBp&?PD*Mp_>phGM~VMhvmnn5xumEuKm;g{l zEvWwRZPFP4Rkj)CHgPaawkmVryqm!eM38)=Km^mca_;K$4&zCVM4quD5x8CQK^1XG z_kM8*P6xneJ$b)4q`caU-P>@ePx1i)^5p1 z6Qc-sh!im>x5_wsXnT|Zf~$)ciGg=)m2n?KF&DP-?YmV54dG}j!3p{8B&{JhqM1y}F$ z7C(dVV3_?s^3NbB6Ya`dK2x|)&o23Q6n~H6c^uCOo+Eggc(%4H-_;Cv%K=^gsQMvA znUVkA-`UaA@ve@a?NBsT{Yb~3bei4xlK&3hae7rce&+a>@a}K;(}|u>^@ywX>l;07 zz5k?ly?3Mcdhc)aZub7Ky*GRRUGFz~`;`G@Pzfp_C9IgrkTR@1ieEOLfAvECg$wQ( zybIQh(ck=S_sr6(7rw5nc=XNB;m7`(6#92ythwF2V(LfTKc{TYZq6x6=c^a2t?}k| z%hV6KHx;@xwUumcN0X>OzZKMv($C1XB+6vc%=N0^DmJ>JdS-x$2qtn&QE!T`uT?Oy)dSDBrSwsw|L$h?PL>sPg z=S&$D5|p)+3Q=89$TS=y3aLfw%N=u5Th+OIqj{&_!km zz4$P*c?l13Ur{zIN&_kOtAAUf>a+aZsg z##Sm_N&g=c<1AvFwX47jTP9sUOV?!!+gm*c!}%WWKGo8m-%3*VXw@or|4AQr-;Y9) zwRE4xTP}@HFKqd#^>Nv&1(c!C9}7N%#q;ITS|<%n+024HvaLVe>L+=efUpHKAn0ee z#)%q;fCbG0IP40uppTcS;rjqJOHEWEfiXu)_dwgcxJLw5-rL@4hXjbC&8=8V`}3j{ zvw%cwOMtp1iOg(11uocRZJ@iTR{A?b~zsBRnokSQn%FxVqU%Q#jPl~f=e&} zuU`1qs88xQPvqe45)niCL;t3>I{6~5Kfg6rz7FMocIzl=w*??RFRj`081Np02IGKVQ7I^!&(i;0 zqb+~HuM(NMQu*U%Zt>%0_+2RbU&>o9ul%%q_3qvF_KNG&5b7K*|4N!{sJ&dlo2saA zpN7;2)ewH%?6A4-@3vL+oO&A+;m6IuBV!*P8Ren1zm10Q<7N+rB1H8MrXl>e8B49= zx9#xjyY$<3mEwOJL&J}oJs67IBdL{RL#Y)n{?-IjD~BSfm81Bpb*EPD4&yrR{U3kj zt#P~ERnCv9KLZaT|Gj^pBi-@Nj-TpK6;0E1!*DnccwFueb^LVTKlS|S;Lva|_J5AO zXJY-to2Shl+yAi`TCUaruS1TMyARdN1yQ({B#6ZNbQZ|`;#*}inGcZqe@eJYn*SzefSme zDl3i}qqy%2?MHM%2Yzw+ zl+kTuw(z6XV6&7pkglvN#c^tC#5eDxp1yL@zjM+683RO1zcom$j$a*D@~4_}&8uNF z{8IqI9QAs6%DHYBzrG^Z+#ecP@Bm@q7syk3XNqa|O?*@LW<*4V4a9L2E*R z{1^HS9~fB$MGiMuV+w>#j|p5E&G$E0ClpAQ9%HyNmJc>iwNY3MQEMVU#I>N=cu*}U zA=iRIz=LX?%8zla6I6vB*2(-tgEf^MP%$2Gg-QbBZip&>qQM&9QS=l9MGrt6EP#~q zry8s{VcX3H3pQ&UDy0)mC(#xZPazKD5obBX^HXSPT~mlIJf=uDSwQ)5w6w0Q>k5j} zW8Al{(VZ~SIkm1Jd#OMY^gvrWex)8i=#!75xySTYYQ#%CWHw%Y)Q{3ftp5B62EF_k z%C3$>_A0)^Z-X5YrXuK4+d7>VeQKgf~ll_ zq=3ubl1%bK0e=%3xB~@b`A7xymc*2o3J8lJDobdfGN2w&NB&rF?UJm=LiFP5`=SU|>8*5p_m%9TnWl6WMU5NR)9<;Dn-_K%x zuHPD8Y-$&Ber^x~qB|t#=fYNevAZ2t@OW+*Ok8ZBv7BspE(&FCZYL>^`<{zKJc|uq zv`EyKd&kjSI6J1c3xPj3K`l028P^^C)(B+&+!R`Ez3I=qPl)}wX==D>0bGBHMgQDs zG@g8EyjypWUbhPfJogaw(tNWy11$syo_hrSv~e>Gg6GatKh5+z^pk&?4Z_)Kt3h(M zr}UFXv%Zr(V=RQ#?yRZK=7)Vt?lw5wY2R1IyOk?vbuHICcg`{w2Vn9qPc>inD+{LD zjc)_rd7X?dj0$w)O!u2-jGfG4w`Ib-{I)Cel$CtxY`3nxlmuQ-SlP^*KC%SYn-y3U z69x0u82FB6PksLkyk=&53ic>N6_iDP8Y82&lRlKC`mb5Zc?~4wnxP|$&3V&53nqeA z>VJyN5OB?v=U%g>V4Yp`ItjW&%W3q5s(4-3u1--oBJD4&Gi-0C*OjkL6Axmu`LlMPlSG=Rea@OD zE>3=Bs$0Pz^0DqK)4K9{{tSwh4(mm7gRFfr?fv zZzToyrcs4U5z{8QDL_xO{hBpSOq<+3L#zeYV&Ix&$Fz@Yfm<=6YMdKxp8F~x4osc& zK`8ppy0X{}@eeaK(=)4Q(a>TycJhLt7zpBUBIgIq(IqPkU@Z?=lk3VVI#gatgLW&D z2BwH<)4sFRBBUSfzA{N{3xaJy>r}3}cow6IKs2*3SuCtc->*~u%1e`Y0gVEGxn_Z# zaa7eXe6YeVj@n-xap^w$Y=1OrkW2f9eS zZu4Z?x0M9r(Bd?qD#j550WZ;w?~epq#$_Bb=_9>yFolVJYxo8X3e>AOjebv~Un*Sz zK-9Mq2vzWQNV*NRhyZ~(f64l-D zvk-KoDYRO0#mENDkQm3(diy!s>^1EuDhm1Whod=R_7U44iF>=z>#&M`Y_qsthwUyRK7IDQ(|hU^u9H`HUYW*Nr^m5;kyoYF!6kC}I`% z@7IZXnox&c7%luY2|Gfh`c85!c!E;D$UB2VTBxGBuw<+EUj#AUi<1YbHu{Nw=; zKl8RBL~R1x!lWYx^sp%u41H-TqAOsNw1#p7%vTg{yF3}zfYBvaP#UY3rjCK|sR6`m zY#VdL*~^oymnV;xcs1=4jJ-V7dU>j=s%#;*0W7d*vgPumk7I7Ol+?h~Ar#Krh7wpp zCzDOtv^pd0Gnf;THp7LxrV5Xu7+hBQqY zog{t8$GfkbBujcqTGF&n3eeUmD_UhG$)1kAbdoG7N^j=VP^hGj8;GJC7%4WTX{k-y z(?kN7x6Cw3!lGinBKm?UH94d-DWp8BpW%@5oI$2Ef`LVeVnmdueP5YGMES6;!30Do z=9s=b&GBRe@nnkPNs~j5v%dVf?l;egcrpU*EM#Q(D*o=kD`Uj=DwQ&SXA3i2N2cyf9*P0op1P9shvdwQ1Q zN%$r~+Fx4d*nyr#Jb9XWNX+IRw);#IX`=Qy>ojpO{gr7EPYNgcdj1@b^tA7_({?!f%xEn`9HHD9wPiD_wqJ;##?a80t~v`;wP z*Q^9bxnNE{LGh3X5Yj#fr4&y_nVQoxs}G|g#6%3j1Y32~<9IT@WDQe18M4xdCrQr) z{zlV46fy0z?_p|DU>*VKUs@*EW?E+vPd<#!M0AcPwNX#vqHM$8q&G}uZ zBM0ZDpmG=Ls5Y^2H|h{p0(8p}MjeNhXukq<6jnx-EP~u})Y>0&2rEq;m}ZmUG^mA@v}<=I|9PZ=2_AnM|J{srGz_<&=RDA)YHO*8ou(7uKWpr zCz4ueA1RHac$(>&sI{UuGRp}I>h;n?L=_6B@)h9APcT(LADT>Wod!`9EbU0jqGbI} z`>vi=kO&mHYt7DG-}Jtcor2}#F(ur=}dDHu^DBblGk`kzfe3wwt6R4q4Iuq5$kYn;zS!1M`6B<$| z>>wyzHbLEuapDr?IPt};BVRUwCOPjV+C#k)tW;F3ms*;V)Qft9)Dn`yz1$-ug~QxZ zTtNnj0xQJ5q9xQr${yXteVc1YCR1DEo6m4;OED|e9jDerLK#=6@)Wm*8TB|?i~Eq8 zA=O6;lVVd+_99 z!g23;BoVoTL>A8`s%!{qj_I8QrMB z8YvLIu3T@P?W75u0QtJMFix!tsPj||P(YTB0Z*A+3Hj{_T~{-d0~XLn(K7mPBkC%n zYeMhVaZ{=R-J7Y@1-c;hLDaK#LfnuFOCRhpiW~L-MI~E##XT`Nai=skaZ8L$+_J|- zpGtZ|A9m>uU8vL_`h2eriBc7MWX!JIqe?J;c56bTcCbT<7XS7r73K{UdWBk2wdQTr z+EF~awQK(WX75d)qPVuU;p%RXD9{sw%FqMN5Jh@qPy`xihD2osP2w!5?@f$GP`o!W z1~r3<8jRk=D-Nx;xkePrl5|W1MbQXRhGx_xGV}l@QRorSDA4_%Y9!Gl-}nCOUw8fM zTkCsS3)Z6g)IO)4dd{==+51%2@9g}4Ma|;965R7h>gN&m+RH#7hZxBODMnBti)jIM z0dNB)xW|w%#eGr-2+zHS;DK_Y!=aZQ`S{YG2U4$m!XAkOpJcKN8*mn;vS9EZNWDsm z6TN`M0qRzU@F8#t6HnEGl(DJqFdwk#Xl!XHzbqImuYlX;6U!vvG+aypH%lY% z9on*&!I~Q{>PkpZU2*bn*j5HJacComWq8MbfEKuD2tNU z?vKz$yZ|kJ-iy#i%>4L|$bLKtZ1Qiwf}k4I?0&};Tte6vQ?MQlzOV=c)X#7Q#c61- zD02{mXp_Ju{|0PW;Q1I5gaaG0_mwGNi$&l@?zyt)H)KHsIE8EsK3HXCvK`r@ui%`W z1Qw7jst(+)Dat;Bl^<`93}1xx87Z*RSNQ)w()G`nE(OCn%I|;Wc~HSjcmY)Y@1P3t z)yx#A_(b|RbMTcZOkep8)5+=7hm*B#5eSSyF7-FIE}6m<=-(7i*Hyk^M-$X@Zh3+B zAn2H)Y11M;K2Px^{oaTfIEeKir?JQ}n&foLV>cc^PO=l62O8lkqKG~AX*FqUkz*jq z$=>SYx)v}|CT-!(B>3=xFC>GE=n_XTKwu4Y5vc@*@VR7fgtvWi2z2~e@hkqtuXr8y z00#C(Ru(6FO@>&KVo7vy@?_(W-#g65Bf(^U@Nw}gcvJj*@o5lk|5;S=Tg=%T400zC_JD#ENyT1L7!ptcYUQjjqU&z_v7j+CL$X}}1$MJs_u;0Ay zUuYQdFEkAIRv`Od8apXs{~MzG>n|aC<-dgp%$pY=^2CYqf?WL-M$d~B{V(K+@dsTZ zUU^ZI<~~!SmNbXo^@#MF5dBGn2%w=|eP-CFbW6(QX?E!${VqCqw=e1q2{ip(Z6d+c ze_m<4?GiJ&zMm8sATS`SIi)WPUXYcAKr-yB`DcQ%@G#iH1eByK*~^&-v;-HC8eBx4 zZ9zK}XphWr5#c@)5wON9n*+rB<3(V$?u`Nd4g#(4%}s&lBf+K}a4SF@R4U|`&9TQ~ z`~2-t?2Rl9;{#s@YBY8}?1u0~35d)}h0J|3PfW>N48JrCWIA>q3U-XA+iO7hb`X0+ z76Gb2Z{RD+7!Zzub3qfl2sEi5U|R-=jlj?%Kn2JP&r(Jfr{DpZeZ{e7vJu!60b;F1 zAj?4Xvd5};lN69o0JR^wJxK{VvxivrWcmqvnlc9P95e!DA1;B8>n`Xj3AX|YKHz$B z|A6mC3*-Yog@dp+3>RDc;_NVi1(^McC*g|1;VKRU+g0pQi5)DkDd;({4&WlUcfk}` zct~<63Y2>Ab@LQjWig=A^Ts4(aUe+pAOmd}rBQqU8OWW3P<0Zr7`(z0GtUc0Eou_A z(kQResGvzaz@7~|Xr(b;r7;{lx&|35Cots2C2}=`Dl+lM3XZy3PdR+ z2RtsqOJ$%wgKu&GW<;PgbKqHFMgq)$=!E0|GQ44gJ(Cp~7$o}k#^Ixxvo|s6SvYhE z?9JOdUuoyO1UC~0!XbQifwY2Sbdo(9dbYu1Ql-F>C}}bl3d47m0$xUgmVx%FCSGp0 zfL)e2R}#I7lfVv9U|a#3B^Jj;7fU8v?d9hK)dIwncoiplJgc1I(uMvXE?vbj;2NIO zF0V<{z#hvNw5vEW`gv+iwu%8eHJ=kNJRtm?T3(atWjBl^G~S1-K7DQa;Exai@S zO;Kw~z5xB7*RKPU`Ze><`c)hSB>Z^+TZFSKZswl^tQah;pUM4{g1rRp*vzTf_?&{_ zoj)&OUXv0w^Uo3nRzuHg*d#1*9)Hv@P>q{JZ&Jj(>>}pzClLcYodj@F#f}3Nvztm| zKBr=Mmv;OnW$X>RjCs5uV|T%H2*#a)-2>QlY!bjIx8DG?>zESEPT&=$0K|pN4xhyB zdHC$*DO|TE;hR)4fL)B+6n3B4g&*(nd1nb=0~;nH-TokD#eg<{!8rP#80YmDjHCa? zIJ=nP)cF(T?3SKUZc@$gE~hvrc*Z%fP5YV41agKW2K2f3FZAp=FY$fx!NSZUG~|%NFwSXBQ-( zT=If)y$6;x4!ePTCHlW0U;n8`R-yltA@GdMf94@t@QloV#t?W$=09TyJR|d;G4y}n zlkZTh)CK&4M|c1Fx6{$Z!3q4lPk0SHGZ>4-;!n10n#-QgPGV=X!Q)&+0*MGYI!uGs zvA^UL2L2jYJLjihAMOhN1-^kFAt(~u7SM&ug{y_R!i~bWgj<9K!YC*jih;yXEEEUD zLt-agMnM#Brb3w2$UH+@B8) z>?Yx#f=1wjsYXQb;XW_$+CgxdBW?+_+8d5H+8Z|21{}cc;75M5beLgpBLZ#i$Jx&+ z4x2nAzzs#(4>gGxyFs&QxS=F)gap#odwv^I7~aM{Xz+N#o~bsI0|KW^83Cb>-Ef`A zK4{zy(LS7yL<@N;u4L+B**i0w3&dQn7&XDG`5V&WjwX_Xlq} z!!PVP7CAqIs6Nc39PK{$-}wd}Xm)-^xkI5&UXFgu6lhJNt5@}%L*{sFyVEqE{aya|UrF`@pEx}Mo zc4nSmKw>?czB z76Pu|Ji^ibjkS2&sWCstTtFc^d2#Mc5%@YEjQ1Ibj|#!jNfsaF10I7f7k-|~(rKh; zY=$XfN3d;;rd>;M+KtbHBeiR52q0JkAquH@zGwY>hrN!)k+VOFo<=C1?+uQE4;fCy z^Vw75{+7@b>3;(}X?p`aHu?YQ=YM9@|9vxR!GCl{;Zt~OLhbYVeM*7jGwd4k!kns$ z_{%93H94iE4o9YD6j-eOHlsjo;I}FD2giW@<{F&p!ETZZczAIExYHw((FHz}CS8Nm zVa6wpcGtTHcfIo+NKKKy`TA!L*sh}U9VQ)w;|1K8;i9n5i}cZa;7Y-_UlM@Mf8q#3 zPC)4AJK!yjkecS(?SQNwa3yiX;rS4ObVxKA0!#{jIA{iX6#-i${0I@8{)yuSTru(g z@pxwPQ_z8vy}^AhI0ZN$ycfGHI$i)C;Rr4qz{vUVXG$GMydDNZf-n%G91X`+_sh>;Q?D&!GNAeCmI+c?TrGTJJ~;+3QwXL z_R-*u!Hx|Hs1ay{4;~zQ0UaFR{|!3N0wg^6alHQw9o!+|9v4R^4BRRleLHCQU;E3QKfQmc>LO2jIfPRR0{O~_9=<|WV|BW$d zJ$Q%@umN|spAqATT<=^^3Lt*$1SSheXWoedPlA7p|H~unKJ0a8A=pOvF<{OANX!3y z(gIjAsVuly#^OxD<@aM;U+^e74tE1}VY@$yC0>XE+Dtsmg`r7D;fS{>3u8DFfabve zvDC|d%+UYjaQ^#P`9GJ#frKmwiUPm$z%TyIY2aJZV&<`I(S9swGs$MlgRlXMj&^>6 zMS)er_wT#M_Wy)w+`hnWYA8fZXB+8ckXc5Uxh2HGId#=+czIsD)$#PJ@4;h{D>knQ zUiCI6;1Z1*+r(n{JqCZ(TCv|FtjlCFO)$9-rZhR+w2a(kV*C!%KWlx6b=bg{!y0Ca zn;P3h80b8Yg>YehjCNBjWbuJ*TvJMl@3oy6mFLSNlD(H;A>tS&`7JRKBiOj}qI_d0 z7|lW<-Xx1|Vj9XwEuog!3Ez}e)D8RYBEsKQ-0ZYG4546LR;O*1Lz@o%(#SV1@b_K; zJ6wD3XV^7%G4@spmqMT{-h}yC#Ub1`1V%WZnntXvT|JJ`7H;A~Hn&d9N@bZ%THPot zji%aOTcu}X><+>mCGqQ8jB3%kis=L;+Qu@-xila=qi7W52`dZIDjMq#3c87#}f% zuB(T;*S4j&5;bCMUYbQ`)>;X$lFFa)zT=l|7zv4HP;FcWymQG4aaY|VBb+wAgkP(> z*#&FTg42h|{5sg%Va(z4Iz|^ZS3nI(WrmDk7=_B57bB*^JadB?ItOVnqK0Bx!R2w` z(eq3uWN9~HObf;BLO;TVnSWcn`W%<`4K{G6gQm4{EwCwy(mhG+u}9m2Df+26;H$&b^6T^fRJy{oA(^#-}#PEigKz$W3lLYmpmV)Vl! zsEKc&5hpM|OFO~bKY&TGc1!EpMFnXX^^Vp=Fl!*#*Q`mS#QH!mmu`f(-|Gpm#!=as z;urh|{2qZB#V`|SFk>EV-tyJVC9sz1@+Kpd&V(a3t%&K@8ECL=q;2^>_+~0hp;6kO+-QmcE6$%vgj;2X$9r(m=J?fV9QON7L;{6Vdl^O>?7*D z1X2r6Gu#~hwTtv0OJ3e_?#qdtFhe}P>21#4v#>XhH^C=r2`~ipTT|k{K%`nFpJiS` zxevPzE29ac*T^vc?lB+U0Kp26cC~A`b^SJY;G0^S*@qVmzY$II_W!1x2;c2qt!+=G zE`(!Q|u0%`#l4mDc_G_FMe# z&%Ft=Z+>xyZi=weMvI1N z_s^MWHf}UbWiDc-E=e1KjTUS`DJ&5eUA%v_q1)Hy6ISqRaB|FOtdx)b!>CJ3=eg=)$-SLf|? zlMc}6yvW6&eQ$F<0#Eq*z#X%GB|{9Sgaogo4Cv~m9bhxiYfDl> zq^x1}-sRa;E=(TLDG@G<0Gl=Dkd)|nBMcn7MPq{qQg1e&=J~~ybeKZylFit;f(Q?H zb@dxr9TX{fG1hO3W<%2WB`f+b)O7;aud}qV=cPqSce<(dI==B|_!^TG!b{cBU@Ma; z)@r?3@UUgze!Gsqgej>;Gt)PXCuJ@B=tD}hjwDsh+liTD{2Qbpb47h!|9l;i(%Q&^ z@wYa!;E+{JCZXMzD`md-_FHedU4KKmb7DZ-J{^47&^n_DObpThtN~IpU}FwT>z0Tp zH~n-fI0iCVF0|8!rAmgI#+U3$m9huE{PO6EH`vmUw|(Dc%CEl)vuw-(2)f@cWysrS ztkq})K zX~-+-^=E|*6sfNdcMEShyI3LSF5OL^r zgC~}-XqJC>bij92E7@c&lPM)yIvPwGnn|i9bd0*D5x#*<1dGOZ@hXaxyIkC$<^gI^ zsFcW5CYdO`7QHznm2dNvvdvvyVrX8pl)31GkdT<~jc`9=qFJmlB62{6ik|Fa3dS7_p!}a zvwHnqHDv7O)+>@;H?j$v=-P@34Q@=#Xri>Qt8$}YL@LD!b>vrJA{(6vS#6HkVkAT3 zXCrGcU#ErF1SU2Gvzct!O%6;m#nNz=08=*1pvmbbF$pZpX0rwbx3dTs6|!1qF1*Ia%xsFm=9pT82~2)ugViw=!&oLd z)1aS;rN9EC8&j{xBBE+pz>WbkB)M1^T7eZav~TMs@w5VL!qA_trhx#PX_yG$0`H6g zd%DbCA`>&StomuuwQS5rCmW54E;?XXpf?U@7%&1vXZG1b!L@_$0d;K|$-rzB6P>E> zOT-w!2AkYFf~6U06av$r!LqC%wZNJ%U>@Q=8ih{otqS^q={|Q_pAkk2DO970?Sl1s z#%S>7Sg$UN3?dX7Hq@2?9&!amSW1s4-v&W6%xchO*r*T@qxRJ1+CU?W=Gq&;f=pBl zqIN%8-Nu428dG138-NLZ4^QtPYiJlmBlmjn%uHAlXYH=f2R@xg;#OVT?rMf9Bz|}G zGNuM5K*F)+$7@?)w$0zStTUHfK{L5ew0Q2iiV-Mg!9=eIAMT^-1Gr_Kc`!pu?$2nv zS_m_31PaIZtHR+*N@RGHyWZi{g^m)r{v zXX=f%kqn#k(zHx#6}_|YBAnaiSR78DE!}qGltbzm;I!WLl&b(7?3WzN)sowxR8TntD2?f4Yh}Hd!^O= z>sbbee7#I$rB7%Hj23Bof`7)ntKsWpHiKLI!}5UD(sA=NzP)(j3T5yVMob7V)o^4XYgQ|HR+5>5Y1tl>Pa0M3zZUPYnHSn4k05Pw~Z zOu=7>@M~wdR=C=z{bnd6R(A6nw%p|!gIH6kWw@rafWKNR64FYd1L5QWx0$^(Gtvb-CHuYExs=%ieQrt z`x0$N-9wGc;;XYVz^YLCsf*RdOcc;$gwbd!mDxWm6=pF_W;JU7XyA zwcRh&{aA{bnU2)@k&ZDK<6pb#S5l;{IxEM@i>Tbk7)wvs{e zk5WH(O5L%sfd2P8PwmniYu~0Nd-);PrThss)PHZ>R&v`RvzgABJ9g{?XHSpMTcO~R zVH3L|fF3tp8XD3jHjXomCG3md`Vw+`dN2+BB#V(Li6Odl{_lpXF0bvNxo{A zieV0q3ciI_I;5$k31~Dz$%tTmx^^MtSCVBbAJRM)_)398G81VONJ@n`JoAJjxrCLj zr}gm$;!7;~&S66Xg!GcsR?|==c~~ul2>p%}tBG1-8OayWq1#a<*}3T^o1d9p(qmGQ zhdZ(#l=RfP5V&{T`9*%&H8g2Td~C_IEc1|t|dvLaTBSAYA7nkh&<8&Klnprb8l`riB*dLS zh1v;}5|Y(z{7S1zRFckvhW!{ka?#_BS#g4>g9nO+{N4PFW*+0iydw}gN;>y`(GhX^ zis>Y3e-UZ%T+@bRVn~rT!`2tu;}KWVX4X(3j36!|Hrx97!a7k=N)wq+7m+1Jv945q zE$^weM9rkcleJ`3$pB z)krI1N2{+UiBtQF5*QpGxP{_dL?;l%n%la!i~1_!c+fwFsiHjl_G9YJJ~f(O$_A~3D~X#H+9vV zq6vS9{xQ`0%QmkV3Bbc?;uA zZ-OuyhI;GiabryySx#Gx@$Hxijr3YXq4=JfNR#SS?m3e9rpr}kh+@?hK7lc6BgPRJ zt^F0;U}5%Kw;IY7mF` zBEuC7O=2oa=?#SQC}bmjDZ^D(Pg-eo!2T909N9ZUX`^^-}rq6YkZ=QBQj`Zl-$^FuZ%1cA2&e(tP`C9 z8!m=ab%=G(Nn(s@!GLtAr_0&q>93MPZK$z`t zSdH~GRX)ngAzLd3V%u!Q1nvZU`*^j;k7^{zjN>XxM3!L?HW&#Yw)QN5xwlLEI+kVv z?JCoeZIsaDi!bG(uIV~%a>Z)xklI4$QDn3PUaz7(Axma3*xcC6YW?v--ep~Ft`(|) zSY6&OLxJnzM9El{if$mnoWgi=uSVYkqX9`7K9xp-tY2#uGE}HemMw@;Q%vIq8KE$~ zr>RZCzo;S7*z?Yw^}hj)tlG1vGi9_QRmt=a`l?Y`lp~jv5Uaf{a~`G%ITW7Z*zIbE zq&$xEkj&O+ux!X5Y&rh(Pp|b+!~8Hz#2ji?zzIoJm%`w!M`HTf6>;s|=324Y472=m z+4>d@O`7dS4`n|%Q6o!som)lK1hJ1X2bpI$Egb$umX`47@Z6L|Hs*CZ z%UPqlM`@Sw1-ccUuWQPW`#-{d$-c?Jjwy)A%NAT}Bp&~8oAZ@b%HjNDV;pLLkjWdn z0WyM*U;p|grwaYF5UR~j(h8@ldW?O|L^pUFv%5tr5mHX(ny)^Hh+j#NH8t9zJwt7T zV-H&rzIx=B9d`qwYRELoh~&oMH!m!o=0!Ka=7?=sJ!6`Q3d((RLZ7pVCKV-y82vZI zU6c`LO00t_s9);1KAt&*Q4Pm~<3mWzTU)DdP)CL~UW!9k$&4F=M|w7zeJk|lSgxV3 zZdnD}r<&r0-4vtUOK7+yO-vd{M`VHK-Gl;dDy%AZlY9WZBf3;2Qc;`Z1U0iI`f7 zn-KQ%vo@7FWJ_dD0?~w!Y~KR^=#(H|Vu&SkTiKRG8mf30r8~s>*@& zLfP#)L9(~GS9H-xW_T{NJrTiW)lON$AtNNqZX~qlS@eAsL>5_Xqt zN;WOZSmhoX)hugq^QWe&2&50cTR7}2Ih!_gk;;sdTE8Qw!u^?{6t*_j1dp2>azkw( z{~Xf2AB)Ja_Q_b=dwK@^Bz;ofD^MuaRb{=n`I^SI>}9jd@qaFj)nD;+h`Xo?>0D<* zO?6l$mXIj6scCS4i?uFygX_ZzCsuT&>r9atW;}%56UaRlS^T_WL%@1wFFe#jU{m$o zO4<7cqbixnE0xjR<0pFBB68t8m*b^99r5lmeP*>!ogs%Ui|TLY*R6D@mibMN>b`5V1fq;-HpQVsT7fKHb0v|M+f*&RbT!A1t8vSb_38at%-SY8tZ$W&atW>= zn&MyMMhMrm$*MQpS)@M2>V*6J{4@Q@6qRg2=)f+Ad%icNRDYN5Q-qvf;bsdbX96sm zWY$)rNaU-kktGUUFJl}YCd<6@9_g#NFW-QP6t+X0U$6CY5W4u2;H2_!>6&m+wqX#X zp3M$e?ariXXn%K{IU^5Jg2k%+r`-NmzGa_ctFdkCp5?)h<-~Vt8y<>y6a@jD4<3A+e@h>&UyKe6M1#RH4mO^ZN``dC0^P2 zN%9ZSzmbteha6)4j-QurvYyVF^>xAwgmm%r4)(XYl!gvJUwSn?T_eAoxnyrvq~m_% zWHS8+m1zI4{PnxH*oB|nNLQtN&Y!^KXhL@qRMUuD(PvJzaMh^ z{MuWO*$%UieL?Fl9?ksaPJ@l$tWBV_ILc!l1d)j^9o>Nx&i*uO#`#P_qxY!WkZYhb zMcFQZSeI(Ee3dmqCdMMLFDcuze5-}jR+fqdea@cC_$gY+LfI5jr8*wT*cZS*7|-x* zD5qtRYa}*Im13eF5u~cM@@1661y;x7!$?rUtvbmq5>-ibu5u8Lw+kD3g%rySO8^CV z>9f39b%OTS8YS-4t~tHlxs9zOo(YcCu89p|XGeVqBDQ z-bxjbA}GVM_zl>M-p>Xrt@;wndhmIz_bfH10j)6I8##$9^%z>s(xgLw`5PYRww|^u>F4>n* z&{~!8fwIRewv4IV*$w0D*lJrkJEQ(zLmURDqr?8=ayxM>6YAo*NNmgoL>>-r^1)7 z7XB(*g;*BsySshwA?7M)%;`}}Hc6teHL!W9R@BR^B}P0S`t#8b)h ze)(>bHsn)J`PQM&)<5|7PA$UPcW7Ds0nc>g&^i-w-+|;r7uBO5tz4%?&?$)(t#*%Tmj{0uxYl-P z$1L>mu5)v5X8E?uOE=Cxv);xygdB{>{(`rLCTcr0Wzve!uj|h~n%gtLC_$ zePe^1pa_Fb3)7THcVoqRpLWqbxnFGUIP-DrAcFZlXmztaEkmxZ&uHb$K!*{A%jN3z znW!H!ue?8mak6p)l2uKLIb4^*LyEr*N@^ZXJ1oB&Dc(cg*ndbKz}VaW7X366dA!WI zR@B_WM@TRLAMY63D?8{IR1qn(XdhPF{hMrq1;nD>$>~8@jddT zP0Gin$UW|j%=WJZH6!=?R8d_lYR7rW)yCnGiD)^M+R=ap_!=x?RylHT+R|UY&j0bG z`~&`ex24dnnez9VbX#fv8qR5;4mqUuX@!vdR%Z_X_V-)M6drt}F_}K3k~b8Twj~mN zJtvRIX#Bje6pm1}xel`#ZFl+d18_Lc>(lUpMx}i9ZX(+ntW>myv70^lJ!pb{!M{Ue zc7NWOQBHI-`s(}|Bvw_TwU5M-lMlM>7%$zpT%pU;Q_il9FO^?Pe(!|GYUo>)fIV(Y z7_*6#G{RVOf2K=^GSfvxBe*noG(PoB9COJcgITcI|EW**Y~KcpK)K|S(8sSdCodS98LhbfvgqfzEkUm;hMeBIw$P#fE%_jlKXfE_f}t2NeQ^14D*C-* zRZCjEHUHFId4lWdJZ}O_Mt;g`8jZg(yc*Gz-M+iNX&_#HY1^XCv%W!m`KJLCMb2U+ zhIC)g8Sj_;Qj5g(HFYC7F8y-mJ%2G~Wsb_@dPuCnku-I=5C8GsDwBPFk#`ELu4Z%A z#FxhsAMD*W_Ot@2@`!77XPvajeO;B5^~R(Aa$`w+2<0r4j7ZQCQKOL$$*)p_h(#mf zCb>{-DyPk4m7^S=)-5U8zBqJR-&u)|UMNOrPYz&9ebtHO2gAZjZbe8IBQdJLn6eI` z4?4<@DfjR@J&bzxlI48BheiY9G7bOX)zn_ipuvYMkvH8$tbpJI861vQ+En!zxEVs>kCaEZIHRsKYp^vhEq{PCw)gJsIwbGBJXblioJIWtcakemur)@+JexJOb z^3EH+==ngu(mNYY*c5A{jpxDyr45Spw>0ZQG;pXQ?pFVXAKJ4hs7A#}__21wEcuBM zA#~4}{Jx@g`^!g?Y?>hz&E44;KhNl<@YQvv2fkdiO`d=Irle!K`Z4;-<$`~-I7Qz? ze@%b_b0ae7L>g3oKAXP%}cqIy$X z2D^GVLGIe^5NqgmOG2;oCp=(y&NIp%4li{<1K%2ycdVOuI1nDyB=_7ohU8iw)-`ar zdipABn-J}rcqDo=W@gc{=V)+w?jETzoJGvD=haZ2v(5O~7Si(T{D8!lA zz^3T6iPl#4hG>^z8l=~R%g0YUz5k#qj*05&8@{R!n6Fm^xk5v3$v3`6Ltj<@ypT6W zLL+`fB#Ysn7ox;oOT?_Rl2mlB{LKMOz-0-T$)Bgr!yjMr;qak z*V!gcAg6POtQ&ZzvgDWz8~LDxm#=_-ext(FHM~fHt=cRd*om0rYC>)|HOz{lYg!>2 zJMOelG1_d(zse*FQTJ2+cb{7GdgSCGOOT6_^tQq`X^;#3^wVubW!N55E@bs02c-Ee zE>tHcSXLnio4WMo&_PcizmZedLHM>s{(k&Ci?nrMQmu3 zEw4}Gf+nyl1s*ddf>2kZ_e_Ud95?v~-4&S=W3mY3o$l5hX{G)G73B`ii^^Ns-q^s^ z5GuqA2q^!9Js-cLB7BIHZ+lo3k#!rWpRqJyYn5pkdIl@#GpP#RK(BH{XzR8<6WW^; zb4rlVJ&vxQu#E@tPx{G&R^GcGYkMe@Z=Bv5`2NHCxJDCsl+@%$TOc2kWsseBFZ(Y< zffmM|;;?-i@3`Ni6BknMqah~OFOz?{ERNCa*zZU!()C+7=&nl+#lxC z_k9M^6hPHH*%vSm>H9vj+ks_#BDZZA()|?E9404gyo|}NwIisvA-k90GaM%O#fH~( zkMPxskb3`z1B4YS)FZ^mtKiJlpsb8DKe1r?5jp3b9wo)q%dc zUufGDB_yXGZR@*7(3d0`Mg2}s^>W8mZL>O(CtBr>TOM}4qxQNcPYUTJt$V1y#~9 zzV;zfpmsU4OditgzHabZoU_Uurrgcs4Dn-jk`yc2F>XqH6?65?VxafXv-cV z4u&G5F_j&8F0~T0|0yTyB#je{wt0>dyhgGwDLABg*ZjQ+-snL1ZK@yzc0}SSynVaZ z_Vgm*Je7pP-d7~w)XU6MwQn)V`G177E zwh0w#&Y939XW0(rUkz_PnX@ms;LEa(Y42TGI{UtSdV7*VLtNE|3dj6rdHA2Pd_&!( zr>C?>?b+v`pY~jyVb^53VaBP?34YMTNETW5<*%Ow=HDv{&HeJnBcWNh2jZCJTEVw@ z0hfL6ma}+d$mbKuKjhZx&|VL*O@*|%37SYQWwqtgFKt+J>GKV*Df&i4gFfzYC~A$bJGWTUl_oZibZr7FkJ9l}E|Z{zH4Ru#ct@}M_$GL?9f z5)tog^HF*F982TW=rhsBKg?R+7Su#kc4Lz9K7W3tT$t>8KnUgQ6?cjM)pm#e#-Lov z+~9JW8k8!3SR0h`ZGS+zq9tn}`f{jgEt31-N>IkFD?xJSQc1u(y@rS`(OzS3QGFSM zZm#*xn0tnN9}R4rch~dfvB&7+m%Y9x{zLl|DV@oA`9MR$Y-In>S;7C3 zx-W1kdMfulW%aJ?ay0mxh?*x2$z$k@&WJhQa?a~==$G0;=C9I?XzK$`-qq>uGtpjV z`LcP&tJ&z=*NSphAXm03L?v^+OMDpoHJUTm<@4;9eU<2zP1<{bk|Xz&Wu20kvd(xe z`Z)B7`0BP-AmvyUhvVGj#!=2|>gVt)mBPl5@9vL9H;i~GMcpl&1n;t81^Pol#OYs> zBG7}g!W}1UABHJj)f`#7OS*TByufmc;Lmq%MLj1bDgu@d{u|{iG00-+wrWL2XwAJu zM;C=$=@~oy8X?>l?GS&^w`W&)vwS}*f_jTU*p6&2J+&-<|D_-#cYjrQ_Wq_0WXG(^ ziXE?BEGxwas5sGgS(VpWO_vPDB;e?~J6DJswF>pbeItt>2J8 zP{5zhOCJ1j-Ar`;^!rZ#^-JIYQn}yD*JTwJS2ARm`+h4kLWkbR72FqGg zHI#2dk$n-_UtN+FzTMC^jpwTxUG0MGJG_0>zb*wWMK5P;D|)~wJgn&6nsi8?@o0g< zc6RBj?N^iDRlsL6J~*R}O;S|)G%RiOty_jpx84k#W4b0p*VH_mnRVvLW0gonCUW{H zW;Eb+)2G|st-aJJSy5|Py$W$v#0OSIev|yelEw=EIZ&O)Y_X~}Hnw&wPEgz6q7FB? zw0T0P^S>pp+lscoh9v&FKPhzjiA2PI?*6kmYxeC%2N!-A@v869AjKH_(~Nlaw*`uI zmEv*nHpk?rypqCF8JVsx;6d-!Dj6(;DuU5#DTg_AsTy=)a<;gPn&~O5^h?p9W;hQ*XBhZGCu{qE(f4!o*syV{{!H^T0G+0wt z=+acLNc8Db<%!DlXjo>q{(jzgrNUF<(xc5?bx2{$OFLzI{7yAm?w{DL@6TF-mbd4= zTkW-M6wpS0JL8}@cnRsnC#Y;Nm2iZ$IE~b(4kylRE7Ovcn6e6n*T*=8iP(vH_^AI z&4Bao4i2H~9J`(KzJA43em*3^d3Rd!g#09bBYHXAX&y5BbkF)ZhYW=cR)n_7s^kd~ zzaM&!ZTq3>Yh?Q?2fxXmb+}!=Q+;G*UiW8wd7kFL>O!h76Y=)=BmcBLPOkkV z)Jmm?BKK7H%z*h{Ek#2YUm94yxKfKIZaLkY?EmnzVwv01a;K~@6z$B3Qq?Twe2ZSo z6W!L&lnkQ1ck<@wuWjd}#T5myCx?~^(Q>fVc&L}>H)IUKoQ#QPH*~q`USa&1DyK%l z468qBT-%ARf7w;FeR*GZqlm6D#`&pi=%eKF-uehHJ=(V|_Vm%LEtk>p@HJ@fqp%^g zuOmCEX&_;-0#+|w+}fHDC+GesP2TdOGzgvBSG&vyY$`-o)%1A^?^!u$VwJTsZ_K3~ z&3)b47Z!Kgpjf-*jKO1FQ7?KwVsN4@H}$IG%YfHg`wITirfA-pd&u>X=M(g)$ILN9 zMZ_#5>(;-*vuEtPiJ~p(*{W{$BqS$&|Cwyz?GtFa>bhTSpGu_I3_pzzYxWr~k9hOO z_hFkFKSWL?COkMXD)G6L_~Phm+^lj=n9Y zlrRg1&e0MO;kPZx^ank6tB()j906o~Iy*ghu^+!HE`mkWImkn0VkP zcU&^mMN50wkCK;9Jc5?A)qlCRu;*e}#Mpj0$Bo-f^ydyLLd`zp0dbTb9i_#zcC1dt zkRPfYvwTVia^;HQu#`b0a3#uUNLwO<*ZRquPx~#?|3FWcyFBR%dfjz*XyXEk8??By zj-^_DvvrH#p1EO--<>9>J2pi-G&WUp#F`fgw2#*Ezu3(%#Pf1J7O%)M_^p%bokqJ^$?jr>h*s(0Sf z_B3d62v4z@tQjizM=m}${aqO<#BT+qC4GygL17AHKg9xR=&ubCk>E9F?>4$#7YMK# zQ7YPYBVfDgmxg7Ht}{kS(GyA$x(Pd&mtXT$xQb&Pba!J6^`jf+I`7Hb(sQ!GoWQ2Lv(QKM^^~Z4b*Fa=gnr(CLbq z{{J{WlcRWl-*@?&t{mN}$Uf1V6!_p!0UGxDMgPR*l@(~hnle>R_zhH15ccb-#O&!! zik}msPS$NpD^^tGac=Z(msBd6gF?No+|6H%mNsO@m)2|-p_Pr>!yepo%2oM{kJ5Q? zg`gqJR!I+I-qR`j*9VujZAd+Va{l)4^IYLcRC&cA`@!Ym_1@_AnS(!0i%-3bUeDu~ zeX`d7N5#2(|9h%{xL~wemmBldV}ZZoUw0&eO0ZEwF}>AM;(R$=EHC`!uzR74qC+8g zXmm`UrOHtdLk@-sqpmQ~M7K(thwz>nT}N7QRpdVxR48%-P3U{5B2IBVQ>D_nkO%CnSOmKW4uJ39Mg^YZ|ymy z$m{)on0oWLCa$l4d?tWcA(=_Sq5@f2Tp)o2q%IIvX;pU6E-Ipe{j@F!2(49I+Q(W{ zs@Bpv>WDF=8Zp3_MjIe3qPFY-ceW&e8<0#AaDybjp`Yjbdp+}y;rgC?&OP^>bI;7& zbFR80+fzSB(Vb0ss`brys;Ej2B%k+Ey&f#CPJefp0#(3Jm`({_B$4f@|K!?d3NdJ$4>;abEPt1Ft084epBOU+ps; z{?Bun_`lC(0EDf4q8nKltH{FA)6>(Ei=|TR`X27g?-(p5CMG)K$FpapVD7PfR3cAH z0l)yjC;@Qk^RK_>fdCW6gfrLUqern5F~R@-p82xO{Cf!wVMp69rbWLz=c8;g8Udhw zlUC)h2qu03po&OkGTJUD019B87MST&Ni+b)Q$-MV?0@@F%m9tY_>cnHbB6$xGZh35 zG!};gSjpz-e`)>y80_d=*I;4dq);_O9Xi4XutU-R#VCmeCi4gj$Bq_rU82K=g)%15 zvhaU)GNjwCia;Z11Y|_N_<|p{^Ar%6GXcC0F-kRj5L$Gk2$HV5vVjj17!?5G;PgER zz>Xp`hv4@i!Ln|G=cykOm`cBraG2;5RzU=dA2@1^*wM2a+uxka|E~-a2^nI)6VfE) zDg0MrvyT!IJA1a}YTc==>HqRP*G&Upchb}UMJWk>pw1*CPGGJ{r8lx>Fih~35NBeO zGgCucgq)dPKkddL6^H{6Go+8Dnvv~$qM)ua`Xs>z69!}iPvoC+Z2)#wDwSS)mX$su zL->Uj2e60f=^k0JG5>NHb?Yp_Apwyp9oMGMXhQ5<;t%Xzdip;riN9tvVFrWDV6N4K zuFd`z^Ku6BFl+PG*91mNOrysS84yIU3c;owYU95e_0J6ELDoj;tgQ6(8J_3;9zjr_ z>836&J9}pAUN_?TfWmbb5kuhw&jg1~|Fe_OOaf9;ld9{1f&x8;N zdMPtQ!U#xBZDDpcmYtry=@@YbCM$T^x@~Rtzxte1{Qod20;42EGCNiS7_r)|HL7gl zn(1c)(X*6L38V4NH%&%@AMlko1Q64`rrBW;Awxnl35C!AkPOC|faBL{03+^PagLxo zGg6;9ECLMT%y+3;oY_GP2O#;w|6&$iBQQz;0v%gL;7rTfxidpj07R`RB=#tlvWO`sl%F``KH}e=H!EwQ ze=*?BMgk+V@#p?fM37M$382p?f2N;IY5f*ujSPYvzm^l5iV0hGJ_Hf@Cxp`COusrl z6U)xZIELl_qf`*%+(>Mzg;m6Ky&;qZz-Cx@UN9r)tR3eRS^p@BmPdpf2;E3e|9nP- z*Jd!Sjzk+Fmf2CMm1ji6xH3-@O39S6z+2h4jS2mWaVIbe0DNrBqFi9AVB@Za8LvRt zS8XOiieL<|f$NA}qACX5wmG8gNVtkgD*BlaEJ*y<-!On100oh)0c_I(Gvk_9w=MPP zS?uh&!fiyy*@P7w-bZAfh_JIrTidp6g@r8uhy||lpCqj5LP2anc51XrWcz^$;x@jL z$OpCig3t>E43*5ES4UBOt$9SZ)cSd%y4^|2tru) zrgIOo=3OCpzPxotRf(u<)j9FE1cn$z+oOURITK=bT>E6E<@dDgwb@%&s(LOQh&{Sl z%_K0bZwd*F3V4~j*IEi1v9rxF1SV~*0yqcfzt9*6>gQS=2?#M?^Q*Iyt{y!rg9b`dA6=E)ad-%T?VxVgm{`KQo z6+qG)z=*B63eQ9N#&Z2C7~PG=U73``71}C{y)q%)y2(U<3HF) z#Cmajpn$lkQ1O>v;_R-$iM@)lY=}na21#`&c9G{D2!N#;`u(rZ1Zn}rwNTbe_4up} zil4G!LKaj&ao#P-`J&YZNHsL@YdNing1vVvSaa>SlaY#Rg@m)5!5j}w@H}YH05UC& zwEutLZX5R0FMC+^O32U%0sC&_z~@M6`o{pzPlfC-;j#Irya zI0vgL%xhKtXwOykRPW#{&zVRF3G>F*a^R|+Dy1X#pD|u zM-$$zRpcUkvKJAc{5QynJ8)NZ5xlsA$JTZ$jZCd$KeKF$V%J5$O35c&cg##g5*Pml zD=e5&{)R};EBlf(uG9YVDCN8fh-BE+NEi`Fm=dRDt+GBq9>(Y6vlMep_^eHfPmvTW zw7BoIz(`;qDuFp)fEDJq{`H$wdRZ}7jyvScZ6ZFe1HjgCHbIL>B@qhKYu90gdFQVl zRo;4_82ulcW9AEDX&diX7o?^Mg$nT1ZX>u1%f||L*CIbkuh=V`4*_nO*O-K-g?t8# z0WjfCUv0su^Lug?z?^!U5zyo*oG*f|2T%Zz8jZOn6N~AD8|;n6sdMhe*fjjJHnu)$K z;oM2?l0}0ACZ9&IwJcoeA_@9)=R`sW4t*;|D~Xf$_NxMaGakZ`BdBYbG$6HM?M zQrk~lD#qs1I3EHD`Mg*H!?IbMRG?Ac%x6xlP(bIYgvcO30p@7{7@CpcOLv%A>5?M@ zf&T9gKySWQYN~fJZNxgKu+P!rGZ>6B|4@{GaO}itrTuvW&tZ`QxD~`AR(?R?xRE%8 zkOIIRfb-mrfQbhl#GJsGT5~NJZ?TrA-sAZBAz`Hw{ zbu4qPtjRk6hXaFgFBS0LE=&SLQhuq1Nm`sw%*6-t%u{?YUtzS74}uy8kt)1(Pp6&Q z_)PT?k2lkgQNf&dMsyzl_9%4LMTY_05x5J#C!7`l*vqa!{Pl1%q*F2$_;s<=rf-x+ z?E-fz?D{hnGxt0poDv+%8w8)y{E&0AZsNf0fn11fY=8oIX-u zkfE;NbSVl}6o^dl%q+Ndhm6qk8F|Kj>$ z!uu_Hj`KC{bqc2OF{rWTQC0X{-)z&)k?8d}^_l`}!hxeQ=~YXJoX{0G1_TL~+0zC>V1`K2n8DXXSq4iWZH%3;{J z@3z7U|HB~6g20f8)0=PtQ@eqdUvla_Uj=ym%7@Kg8?m(Xw|`wN=0+=dOWzPVpsznH zRjuJ3s65@yQ~;i*jMO)~V1*XA22mzbU?QlfB4{~oDm~3`{kE^6lh9S?GLY$)!Bi1x z@{t;c8EH7rVB9lGyD7e_$E!NvN?`7wl{onA*FRiPsAZAn=*TfZn%0Q*iIg z1#KkTi)vi+C6qbd4+<={0vZh4VE5gEo#M_MtC2Z1zEe$xEWW#jRbR#|zP9+yL?e5r zC_38MlzVJr(O|fFu6?|=duK)$6xjg%q${EUp+AvH%*4Zt{(hyF3R}L+3ETYWc-y}3 z_lBM{{lyZBx^~)JrUw@Xw>$3rNMpCT6I9XmvMHM6UXbTnw483gP&2W(x@b!U#hZv9 z@x2rxuZO;?3i^^f> zA}rZ+WLqF9CYJQ>+TKL>xdVT=hLsgNbq4c{8ybU(Udq_okO2Yt2yU}kYJF2VC4eyH z1De9m9X9&~sTU9ZQ6x?e{tm!T)#DnOwPqTr&BAiK^m?Kz+h-!@jA}82V%mpFO zE}S&0vIR-<7!jRCBDdkV4V_asuv0^t(7PKvFk;0y_2ci2pP z=900!Cm!&qU>5ll3ft%#R5mKVxOvx{Gf7rYeQ_{3+Znf6OvI2q-vlYKt;G;;cx=ic z3Pc2>9VQMX#H-}WApu|oMdqS-+ZOFR0+7K%QRd~q2>NfSFU6`gH3VxaBmD2Ns= zMvS1|H5`XKihZoyC{N7;W=ZNXXpr2oE*F`jA(Fd6hHLRtdVtAm+TIHth=D-}hbM}| zz}Dv7Jzi4?O>gZ^HMUYp6jUxg{JDly3`Ey<(fohUD(asw9x4jmvI=bw;45e~4mNb& zgFV$M{|Q5}KqowCdp)_R6uJ&RspLk1#T%e)Ud;Y*4Z5X_VGO!Hu(ec>Zm8}@A(~v=Dzknf;8b`Th zLF4Ly&1z&I$i9_AvTZ?|rlQ&=^5zX5E;>(gI`-F(zZCDinBTUGNH8b~JC*7BLGSmu z$gb~RafC*S27$-ZiFy^Vu7uW}di2e9lY8;{(}1VWXwV~8`wi{)H|PRNrRr^4U{au= zxWKC+&7(m8ql5Na`k6E<2^C!c^;TTKLI=7gj74p?^Gfm*@(@+e;szx+rPNV_U+BW4{pFHjXe4F$sn?! z^w!C>n~5ZsmB{F&115n%PerEv_%&;Bi>_qr#)0Y1bwwp;be~m2_rEAC_CNHcJTU0^ z`Vt)-=C#KFsin!aMh-|euSA(-t1E;4vI^zaQk}GW@U~L23+VvqN16>`ck!&vA@eSy zAps4J)N!1Quy>n2ny3{p5qq*GdGvDh(o)^Jr3WDc#ZanFY%>RrnMFwTW}2~of*yzf zwfx~tD%xPVmdn=$GbT65R4F*Iwo^4|3}eugFt8FYb|%u-3N!v*TykP?U?Tr*`99gW zn?LS0h6kdMhDnD9q9Jr}!v9QWl&&46xqdeK=NxP&qGC^1#ZI>umb0ue9a@$KK7Ff- zIv%ohs=73Mtvz9c1BD3OaCvEUXcp7x?V&+f<5t6x#7;XgjTXzFDBuI=Rfj;W>lm4XdOGkc zOuHs{DAmRK>ORYWBOny~)XeR3Lo(E>JKwAsh(QLJ^oVMTIkx28;~zG}5DHYnIC{YL zxSukCQmNX_QjWf`oImdEMQrARP}jwiR@%nfm&ze}pii>f`woO>;DZ|BQ$6DI!mXq5 zg^YyclnjabeJnb2~diKCUhOdDq!4 z&qk2}(fXSq#{Hy5G@=63GBk7$rISs(=KYOv=qJZVHqX(R^oT$QLuI+uWk?pUe)kQR zTDS!4n0{*XVF*gIqY92TOc`e*p+&{vNu5F_(#2}h?q1~MRL(Ux>^4CCw&D^v%6+b3 zwnEkw#7sV~i!>ksmm`*oiQHcFSRTcNx3bTK9;BT z>@$R7<3i+`m|5uDAt9yR@AH8Y`qYF)qYFKNG()Tf_3BSKYWusxRc2>VB?C+@1-TGg*!Dofp`ZdRp_9cK z)1r_A)9BR_;efo#;GXS{)RJXQJ8@m$v`vSGY*Gbj*1jU95};auG;24?g~#jyrO(yQ51`>G);TQ~{HpSnDmgKWfMs~BVqOKgs5@X63l;Z3< z*G-p*S3Qx{WEyN`LFEQ`oJw;tPnLewdT!38zO*=`<<(YdkSxzo-WSZV8Qi@3OIU>( z0cqf!2~E;{cu25aLoMxl@Od#nb{$9ay5^2B-`$TvR#f}W9vU!5mQ0(X2RSJx3elDn zZij){6^QnS@_7~AL6PMEH{Ig`PS%ue`>RbkC;;OS|I>7a{YOoX97lvLY=tX*;M z>q{)i9*L~?^H6_A3P$F4u5{L{y>eI<#UEhDwsf&k?x3({v^j;1WL_A@0b4MHBx;wN zU=tLIe00b=p9_rxO zd6|;SMZG6tNUSlnw389)0X2YpM9nfYca_1Eavfzdp`sy@BGthF1cAI38F3m(rv_*Q zO4mYz)_y!B8->=50?zk$S0e%HFbA&=9!ZvN!NJy{3>%Vo4i2jFh29q*b~bEMr>Ys{ zY!2WP;hQvty1xSiL`f$A(JsB=8ceb(I)Pvax<_8wY#naJbZq9gNB&LEQtY&26)ep~gHSW-hG`V*r)h|1Jtlw0v2 zgYP_j{iwpiRK>MP(NjRPL<&}-D8prN6D@cMXvD8_3h<7kye#M1R#__MlIju z>cmGh_(Wt&l7=M}bT969dD%lne5{Ty=bF-Ymu@<_solsj2Ov~1cK>CF5CU|PCNhDf zHR#FEuTRuCvhJeaV6P_g!b*IKTe<1|JcWRSta}$|)w0tOv?rn~$gyty^YXyQ#VXQD zh83aMt^Dv{cz2Wxf&h_`w&OM$&~2q8l(>3HnG>IBT;>3SQcbjd3m#Y&g_xh1>jMLU zF(d`xyN_-p*7t7LRbtS{jFB0r8k%$MYXPzY>5jkzyZcL{`fND4F-?d%eBRBkr@~~^ z+7B{Ab~Ud-E{4~RZOcQhBV6Ym`=t8mCWH;xi}2utl2X#>K)clq=>+XAwT?Jb@ z*0q-5)WD{olOfxCddmbBG>u1pGp{>%4r1iScTX1I%R|#mi;wY1$j$O(xWAKQ(Jn!! zHy-mD_hD-g*P>$+QT=v8#90TUBG;uZ<*|GN^Hw95i44$L2G`{7g@`J0GLcSAu19$0 zq;>(#--t4$ueU`kI9*$M-0R0GUf)1J!XS~72A}GfNHmT5dJf#cMahHSITb+2Y-v-5 zh6<~M6xqu-8Av>M8PT})_=Pb)hCLed^$!7t+!6pWdGjQhXZ;GL2XPxrV;ssr#s~1A zE?#Ia(my!CfrArE(8xY5b*yJ=mrU;(FN0Yon~Y^h`)i12vLX{SEjJg{H=vPJyV&{7 zOltA)+)5uIFXT27{AvuKjT`;Sb8G4-;~fx=2<+lJu4EaLQBr;}4eFpep}LSh7l#$> z-=xFgfE~rH{|R~%26{+~*M-Ww=1YQb(X6pj$Ue{zeeJJGnTbkcLl!hbiW|MH1RYoy@{UB}%k&#{gIv7QTsHpMv)}SXU?`T9H zXNA1IbZJPP%^VE|vmkWfuj5I#w_OTHkKQKASHS!wh=G6Zeiqr`%M$o#l9Cks_&da< zr||K2B%oJDF}sTJ@mubQm(|Won*-TOKlrHt+V&<#jq(R#7q{HZdyafI91q#%T!iWOlum69FTeimqfh z)KP~bDX5FBKZxv|bhW(J6fN*((M!;8Z*@`Qo7i>5xHfE>$#kzS-(!SrDH_;XinLr) z^Dgk-AWH)-rhalL@4D18TBBL<#FdF?sU`|L_8+j+wv9mrAWJ_=;&cM88|~s{T{Man z4yfQ3uW9e=Z@(QOLt$`BbTMm5Ux~L>Up-zKLPkyL@2aDn%#qRoQ)DgAKENy+mqmhX z2=+mkuRt!F3JHt(X3$%Nh3-Nd(-x^5J{t&@d3n^PLUwwsG#rHWx=cu4YRJFdtF`pj z$qWF=wzam)t~7cec2rd`{6Z?;qFK?_9mGL272CqeHZEK|+c$55#e#&W%|474)2o?8 zR^TCh?BB|FBL+%4q>FrU57`Z=?7SdtFv>7cDV4FLqEg0F6?fEe@eSl7+l_b6QmDTn zKNjjzPUackm(T#N_4wMwB$VbU91kXqXO|{Dy^ySm{IMSajtWI1y(jXe;B>N9)DWaW z8G3C*CzWv!IUu+cP%|s=73$a-Zvan znq|yNBX^`apo?pIqFVbYT+~yI+x+(1B^Fn%GE%L8J^#pcN^kSB@_Z@EqB4#CQQ|ga znjYa{XFPgJ8et28K#CSDSutz%Z?4SbxYB$!mE@Me^(r0YzIiA8?VJm8!i&NhlBO}p$=X`@K%f6hqbpv$zi#MaVK2EwRquXb3MVJ>-lQ1F3k_-~U) z1RTP{DfDEd)0;_bAE`(|WPCeOKNYG#oXub`mHHb{V&C}Lv60Q=chG`c-?=2}7E8TW1Qs|Chqu3+M7pw~Jdc$H`Jfc%hT#5G?PB!OMl77h zyPt==xZJ>EoJcjx00HiC+X|&gqh*vHwn!6*G~#&;?jH{nqNs>&+GIP9qh{gsA$Ce9 zRmv<&oKB-#4d_#|eFA8(yg@!K$+MgkL41@0g}g_{3|w>&u;B$>(m2G4)l*mr^`{}x zWLI9@I))i#~d_8MOUN5+;3GCXyI$)(%Ef25}x_S7L!5lox+(>nshUKICabciKDNM0Hm z2fSiN<8~5n{_Vn~s7VkA_GAvIk;FC)OC9Aof%0re%~q1pLrT2O71e{g8_>56=B)U0 z!6t-b846(rl7djB7D&BOcw)TdWRPZ?sGdfb!4&c&)vGKKfoU%f6M-1JUdLUA;Ya5#3-G2az+p^FB( zksLaQI>=I`mh52;C#RpI%t9=F%bPL==ukOeHPR!wf^FpiszKI2C#itU#?Y_qWs|I^ zzILVO-31Tw$~A)i0ZXk-FJr+>XbGd5kL0$T+RY8hXhF=&9CIpNl4?r3Xnk!<-e1Ry z8-yQ7b~dd%AhX5j0rHKEPP8%4YOuFa0fg(Xw)ADMxQ;{_yzJ(8P$}q%C@UbeOk|^0 z;`RB0wm&1#z;01}h6|O3f=LyzbF~q?;_t#pY4yC3Feyj^A=g3J18od_|BpLgPm)Dc zxUvRVj7}tO?oYd+lToe3A86-ygDVc^B8)#$fyYDaLiAi;!8spR|9v#l6`EXK<%O5l zj3lU@)|&SqgGP`!k)kR@$6(4o6M4m5NG8}Xe08(PhI9(L!n&RB=9C_7v`AIffi~2@ z44IxtV&6i+sb_l0#&O00F7l5x#ovZH5WoQyo^Q~o%R{@6GyWzU*V z9S=0nq{68#A1hJqw7k~n6Uo0?F^I%ySU231yNVggJ zWH1i>=ESsNFz=YC*d;)(iTmdMZbbhybdwOoAru=mu{fRNEy!b+0f1E4#zTJ`jB81I z0s;tGPxoS7nj?`$fEvM5BM*`R_Td9|o+C_YH?*!_LzE3hzA{rLMFyr1O7re!)Pd_f zQ1?~NC&Q{EeUL@6jb%(PLmV=n*5*`36n{qQDY!vR5w;WWb8S8W#^7mW8iY+DJ1flS zV!KpT+!uewqcT!F%9)-BEUu^67rr-*C!yULc*urUB684A7F=L@y@{Fp4O&0P}^=mipRX~gmn-o-F)2|sG-`gE;Ypl{Puix+aNMNoM|DY4Njn* zEIOkx&~*darqm!^&ErDC7ImFWNIUjPM(UY5gLb(u+Er4L3BHaQit}m9iyjDqozGaRjm8bRS27+ z3)EDn9z}kM)C5tTHTrT3$suvT0McX`EgF%5t4)@T)^kab8iNKg$MgxwDk_Z9xm+d% zSVBBaPy_k1xbQ9X&)n@eELvu+mK5Fybi&Rsd)<;{d-e^LCEOnSov6h~Ot~4C=T$7T%aqomjo8N_^mQPW3L?)?zGGl~R?_wDV`Is3%|| zz{~&@MlYlA{GMy+n5V;ZOh-z8rDB!+*xDAlc?DLr;`gG9B8U0nJDm73cA7L*tQ9q7 zc6tqQRL&t|w86}dVT=ZOkCJc}ARhTo>1u~**938Wik;^KAJU3BFK=gdZ@;`*YziM< zP`(?@6IUh;_&AMh>Qa(NKL0MKimNK;?)-Td8fo7qUNQ>UJNb@KZr>`N zJ&VJe%xqkY4UxTDW5>7y%K!ZOnf*A80jmagU)a*g*Tsupxmkoz$asplF`+5v@|WMO z5#QVU$A6wLc<$dK>W)`$kZ-&sHq(;FPZrMoSv6>gY)mB56cocA?oVRdle)2l=Iw{K z-(B@U{OzMJn>lL^<%wHXb_V!Og|uM8!PIkUoyq+QZ)X$L8q~2>abk0)sA}y~otW-h zRM}qWsl?ne)I57H6H{T=pK>v;HsmSxe3ARKzyMRlEe>O87Kg=eu=x)*HnOM`l0wU@ z-hClQ9wwG;(XywWCBowCllydeEd4zm8;RG_=r3kbu*k~9JD)elH(-Lk z*xGzmTAiXuG1tu^sMtenV79lwJv$CzTN@IvjV2qr#cZ>sp381^Q!MiCi0s^SFjr9- ze{b)>-3<|nOFQnalJm_@m`HCVQhHOw#!>eVZ?1CS zh^Jft$S!-1SP_4^s5-KJ)>p)~Nie)JnmVQsGBn}C%O5O0{as*sZDe)QF-6cI)f)3p z`gJU}CfxuVsT2i`?A_}#<=Y|-?N4eqM@>D){9iA>&8I(g75C>ih>S1{5_ZwexA`u6 zuBb1%ydH}Htm4Xbi@TXIbwQ_x6037d^3)^ZoW^&4V}h>T;)A@fCmhzC!U+d$z!4 zjIxP+Mm=tRc+;O-u7*7wKKf(t1My;mR>+)oUncfdt{e5aQuw2ITOUkgr&Z)Bj(qdS z=R;%p7sPa=@Lb-ZU8fbRn-lA!)Qq9>pzAyA?(97jrr>&AiVQoG(TQ>K??FQIXgE%(qQsV8^kG^ejd$V-p<7->m zIt11YH|H*R;f`&>*2|as>LbOHBHdJ-`-Uzt?|}!@&d4l%C2!6wt{l&fziYAFxC zyo62gr$-h!&VHll^fEGBr+QdY|DmW;pVImAyG$dyBDP|(po#zdx>tN?_fH9vi9fExrs)>%(a^Cd@!=exF>E6I5SH`P z?k=WXcr}&`_6Id2cd!%>)>I{Td)QkQLF4TEU;OD6BVO>`ZZ+A+ZdXL8c{-R~6DrjY#C1_spz1A(0ps##7nYwGdbE-{VK zK@;%G^2HCGsyH>mWfq?yw*e|SeljOj;;PR?) zBOvM~uNA)yWmwfB>pkqiPsv(_3&asCxibsoQcrupw3aYxHPl4?Ba z%omURo4-&r+Z^VOthf&;U`uSLrwe4o0N36SGF{K#Vvqt!R)$r zHjb?&YcXs3l#aCNcp)|lH}Csy=Z)3aqt(L@#~`pN`Hj0e0*6&>p&Z20%nN%W2U%t;{{F&eJex_RxbyAhq{>Je6{{`iNE8=g{^CdB z_`2D*sR`nr4?xZ92cCa}RYwf3e&+9T4J){oCfidNd0+hXFNqzgqZ3S-DWhKW`rVQX z7!f;N%2Wqn*ruM>NYR6Wk z&$35zG1;Cm4ZyLG6dHb0(c#Y>-(t7d{JFk4tcNG2Ycekvo!$zI6U(ODKf*LTS!NZS zSi1ay5u?y;!K16p>3D@}Z`@zLo)5e*I|lB(_`w>vVqr5YT)azd5#L*S zKWEVKK&RMJ_*W3U-;gctci9X-xwoOSi8k#s?cFETV_Pco+aelCp2~F>mK7db(iWpw zq25sbRaJ~uF*+2}#_dQMRN#R&PV3f=2&{FR(jE|1MPbAia!n?h`0VbK+q(r1KN_Wr zzc|9kFV4IaCUzKID=3ohJBGy?rri?j0FD9=kngJwgxHF%#eQ$yIujIFf)<8!JAT=B zcPM=1Wn4?lfa1XA|J>Xw=XZ&c0Oy)k_|!QZUObN6q$uhX^ftui!P7SbEYeUof@Q3 zo$3t(v*3%eXp!~VctaAe{DfOhfP23(Q1;QiC}(I#{fLb8G&QJUV(CEnZJ>p_mEjYB zo<3l?7x#*_M|zwdZ<`F%o6A$5sPq;WA)Scjj&)6sg$9=!V^*Kn_iMMvC>+-Dpn#rd zs&JcwrizLiW!|2=lwK^cL26GFa~JhalBJYf{5IRU!%aE>Z6;3uV~~v0Xxe26(O#F~ z>unA^-cE+BjJb>@G|<14ec1f^qNzyhD07}2&TcX#0J4>bFY-ip?lTegrfWYX{U`WW zG$`3~&P7xBR|x%0#1&6q*dARR653Sp_ESgc#AsCV;YJ%pwt;(_^C|PrcT&l>YaR)o zEaS*De+(^(dvt;#TVruGb!8@0N==Yum)-581+vB=i!Cs4I7<3b!yPxVR)omxlwLyB z5Zhn2PInC6p`v-KY!Up^CVv}E3F|})K$^2r8anufdWG$FTt>~*x$#cW_|l(Z8Puq; z(;V4+aSVl<+D{f-i8|j=+2{u7WKz6CjI8ap=fdtxLoE7j&BVnY zv+;YfT*`o5duK9JHj?SAfjZ0##9a7wNy4iJUl{|)c2>h}CMne-+|=I#^~qR)9r+vd z6VVMys=?;mS335%ok~>yW=AjGIH(Hp>I(I2 zk1{Aa>7JcyBL)EJxGVp{+Wi+EC>apltC6TaC<)9%sRL;H})Zj0aQ zHore*?}9DHXeVu?w4rNL)nr7Soix5lzTOZFSIQg~S)V&WS>rObPm9-*8rPiiaBbR? znxNK)(lr%JmK~b)NsrWTQD?|YTkx3FA%&>&be5VcEg@?A`i7lwkZll$#>+w$$)v7J zC(>U$Ncu-+6Sl4l`OA$}{-SR1_>w)^5ZN3n-*9vHM?K}C;WZt%?ySowr=?E~w*2N- zAU%{iCTI3LY%NbV1qTlFU2Q`44>Yr1n#Ve1u^IhupnkhP=}7Qm8(|<}-|1T3m| zSNT&Vu!PIwCzoq#|Ke^j(qJ@f&C$>-CqRcfwk^03<-jB(nk}6zq_yEE5gwb`Sd+;X zB5i}|s}2nXM3tu)G=czAXS*!@Ex=`Vu4hV3k@dDDrrK8O>=Jig8^IbW?L`ZUirqxL zVtdB5S-Wc{!llABvUQ8m^u6Q%Y}G6~!;} zS*#q3@vll*s)@y7oz0QT?g&JY?q8Mmsyh9>$|tebZAD#dfT}Z?(jXjHN6TJaE_mEj z@Z0Z-*f7;v&(5@0*pKG0>v0iX=?dj=RPU^$J_p5$3fIKSSbjU^D!SUptMf^bz4@}l zZ#x>d21_)hzPdnt+N4OTa}7A}6V{=K<8=hjsSkEmx{6eEeqBs}YQUGF3id1`3j9`Y znWKq$`amgc8%b)lPprkxnVjoa2AWb8wJyBQ7~Y^zcJ)!tKkl0l_wub*e$H)i&qvB# zHy(8ltK7Ch)e|(P+tfdqsF>=GdfA=Xm!$lve(QKuR$--rZvjEHgj@|{l<3H$fjD?jB9S;s_TyXuE)k7&r&4bdY)6~ zx9hkf*!f&seCM`h$~TEMjt5ToMBbg!vBr9m_2v$u;wMEP;%rm+YOU9lgOu!a%xhz##hE|tP3W}+U@?wZCCAN zys~bkmujuYr4ZE=w%O@M{!<+`E9a=1_oI8RLKFQ@kDzZdMMV^VZb%*1#>j3x%=qhh z&haI(oflRT#iQolmZi^YPC2K`J73R2sm{Z);ooXS@9O;g1d5~P=5>eqJY6_6W^3>_?>+eRi`i6J-_{;9b zcy-2-8>8R1_{6vSgsEaY@3u@vw9d+?^Jy7v%4;=lX&t#6<5a(Ox*^S}#n-FT&A%#` zqWY=upRR%zf2P*Fda&#IWD4Tr^WXC+{u@~UfaLi+BJQ`jn*L5Zwreb6`OaUO9oHT^ zU-%#8orW-30#D>CV>VxQxUAZ~|Ie;we^?j1Jd$NEa^j$X zk%;uLUGiW1f>y=dh_b7_qX7b5*RA?g{#j=OuGT)%ONw}3V^{hH^m5``K? z7ui!yY?wrqPw(uqkyo&K9?m+hP?vKOZ#sCKC)@`jV{+Cre{=R{>zP9!cWM#+a;^S8Re7sX)aNha)W@=V? z#ht+|vZy;l_;E)th{K`NX>x#Ryfiq+cJj>8UV>O#TOUz8TyM2nwtpfK7SS^!a~&bM zXboNaz$=J*rNMoW&1Cbwlms2F`M!^I_?%?oNn?e-N^dxRa@tsF{O)GeErypsJv4N; zL2}1o*XzdRRP&WPBl2(J6RA`QpX~(p!Bw-*Y(Cz1WMkcnEww!s=Ar|?;LsHaEUgo* zKcbM^C}B&)9%&Quq5Eq{0^PDeIm6C5iany=A=wyxWOiUU{TE5jz?bst@4lf(4uAH= zPTww%M9Hrb#?sKH2EL?j;{Cz7_Vza<)X&2w$Cs`Bz3hCyS9xeubh5;rvEAqJrYRSR z>X^e<0e>Zu`lR%PJ_ylBEAv+*Wl6=h}Njf%Q6r-$R zzNGP#WcHi7pgKv=AC1HrVgn+{_UPo{`I%k8a&+~c{EDp6P>R=5n0@0Ua$v1#_n z4~r@+Nj*08M_&rgJpM4_1}ku4pTy^ffi=OHaq*c|ugQn3v?}maZ~cEQY_HwFXDj?a zb1NI!$k&YDs^&KAPK;r8jsw>k>WeLx&@;?jc~0q98}^0gt&$JEmdL_C#h=$M+XK zgh@*DmgS<7#2*&?&Hb}sgO1pF(2$pEOXzg&Qp=&(BTMu}%LH=!(Pbaje_X#>^3Zxh zPi%*OF0ab)56Bge9?BO{AC7g27+^Czg4@CY`yTn|z8)O^a_2p{oAXZN<({`M&dfef z7!F|qgt^%!?EMS46+e6fgTzJT`LE0R3aT8dmp6PYO8p}k=l+cYJoDxF?vEv(tmz|6 zMsM9$+1A@PV?=V?=z8ZSEiFm%KUt=5|5c$TImBQ+w5*6U$%Aa{N>=@MGD+imTk_D@ z-cq^dXD6N~A83$6UkICQ@h(;Jefw#4cLQ=oRZ6NkkxINT zktb-EK0`;pVMz{+ua3_j3wM(bl0pqtoFAu*g+Qj?z@BgGGT=;eW$RG0WzWprIK0l}rVppMOFqmkat+vLw8=kn z@koZk!q>>{bSL%8_2RE3i+0_BzTADYxom&PhSR+EY}5@7JozUK2&ka>!$5Y027)~0G$6^E0A;dhv--n8is_^ zP%-PfFTIU&Dl~j^kfF26fgcQBpoU?Q$e-LjF-_@U$wxFfLqV+NIr4kXoUYq%_p_UC zFj*jIPmYv${}BJ}f!jys$~`!L4tQzxBzfz`(KRD|98#^KN$weO#2>%)v2WQ(Ljb4Y z*6IzD^Jfhv@NW^S2hp16Y?8bk=$svUV)uHKH>E7xjnzA+=~j>AaiQJ)sOR(3-iZYyKyqsM z@5%2~`g?NQ13p0Oc21U5^E|%^3xAp{x0-Ma_jqQJZ2U?TQ@T2mEoZzL=w*`;J;(bi_KB`)o?7eA%sd1Lv zJfC6YKB5KOTJMM+X!_Xqumm{x<;gELn%2vGx-!^zI+@c|4Apr3X!~Gg+2G?H=g-$X zJthe&8s16Em~@svzl_b7|!l z-WV>qLEicLs{>J{Gqg`WV-4M$?Qv$;5%pUT8~d~3*OS}BCV!X{C((Udl;FTvbwe`y z&npZWb1J-+qaLxw&#Ft6w3$VRIftx!tLU64*WmPsv@*Yf*r2UlLZ-ys`12~bp@Svq zAf2{(yneS+@^Ar(uO=}B5{qfp)BViQ!;){KZtVZ_ne%6o+ZITDNVBRz0;|2eFBR!* zWo0eGZeeP!kEHs22!;i`Iv@emV|)KpTY<7$$cc9>C~;C^qcPGO*~?NSutRl`<7J9S z0{%(UZybj1N#;gX%@e!|(nzYOgAW-tG|Vhjhe2rK25|DDPKuH;EjxO~@=?l>`P=VA zo+*W=A~p^cZI*ZnY+sH9+%%NAthA(d0n}#_J-j;jCR$W2F*k;-ay^L8mr%vyc5SY0 z`y@T0N0iMvj_a9jq5J8aHR+C$`WPEDWRv)xx#+R@&&LhypU!MPnDO)8N7`FN-ScIv z2U8}CgrRBDy(s$q7s=c(w#8wb!;m<9nB5TE#ovA<^m`_-f&-Z(l#t&o5&FQvGvC79 zmPQa*c(Sth>GIZ#?~h9;4f{1_a-#8ML*T%J)qZ{Ml0nvle%~|xZOP}s<<1(z$(aEf98{}Q=e*?i|UuPL5w-K3xV5 zQ!73ePOtwW^x$5JnJk#&KE0lPW|(-D-uu3gE0BamRF<&1vLot@vboQQ3J8LV8Wl%WR76H`M8$yUC~9c1RX_*2xLacCB62)%Cvh`(?ym%OCqPVg|`d7v_hp z7-W0B-}|K`&r5>VI1?N5z3@xS-p#lejd%>z>XO6$A1XX!8RI1YQybr*qk;L0 zlIj(z(+i#R<=sa)vnT4>^I6N3r3=wxj`@5W(YkRIbhw1ji1VQnEd^!!?;(#!lG-_+ zef-t$Qcp4|-{ADDcvB5iQXsL@k>ijY@6X$lR>}%GsO-o;-o&L!%Ul;RAkm);F zo*#!Z*RAm%E-BGb2C(a>P1Cs+E62?kBJ|w+)F*(_2{oq5H|=`sBUMUlvLtIX^@|;v zElU)K^(u)JH7-9R^|y5fIA1t_v!%e_aVVIQ-zhY(LXC@;<%8`DeS`G`bQUh7!+H2I`fL6=XU3RX z`}3FlNBX@)l>8^7{5wwjme^zHm9Bwp3VA3yJ+$@^KN36rImq2?LO^>Twl91 z*;ZLHmDQ*oSk`#y^~Wq?Q>)MKHk;Y`p*(PgA@OA9=1jMY)!v?NWjTq0%{}7Mlk?~I zv9k%nsoZcB~e@+bINDE-T^-lE@gtw)yDlwodn_E?ylA~Q zTe``<4U!NOwk}w?{3VZvO2#jl7!Kk~KQc9;ON%kc9w97HGUn~bzu~GtkN1b^^I!fn z(14o6sd#N=I=|$EaS?x5id*98$@CQ5yel1Q6oOp-o(Pola5>k2XO@;0A-Q4^#K+F1 zsR?*2hVL`bzdKU*ozcv9I`TWNanrB-&f5b`yh}<`fscXp(Skl&2midiLZy&SilJkP z_vb2IFqe3(rc7izR@+*h{TzS#m@ax1A9MGVGCagt%B#ICv!-kRs^MLviuL`Y4;~Q2 zG&+5`HoDh@XDv}IMZnDE{7^eB5mj0#Adq^!ZkgSH? zKXps@?zo%J!}LBP>Df+!=)6i{Ej&Z}C1^sE$96(!`v=VtLKWBiJO|B&-o^ zZg6t;Ysxp}k9TSv>P@_z;V_TmoSck}XL#-|m~QY3O353+)=E=@D7~{(PKuL$0G$ruT;%Q7`y~^e>Z9pkACX{}c+2;b%$;BGrWH8Xa9f3dCmq_B1maPh zf^{d9PG^I6Gn%E~phR;XwT94n-;%pSUlW+BP5~ zKpx|!Ho(TtD(Gw>E-ieztx5nIjO>p4Q0E4pSzeMKmbhjSPcBfJjRB~wa42yuS8HaV zhU1(EwD&CbH1ba(XfEzn&h2nhSV#t@LeB+ePJ>Tz+fK}eu3v6&h?}|n8rJtaW{S&P z<^~VH#I(DuIod5Ci1yGL&`&{_8_cZ^(H>5QhgTeX8@Yhk&*$PW)Tw@41Kbf4X*0tA zK<3%wL8&%!e2mvxM0Np3fLiFS{jNxK#AXk;EAR0$JMhpanAQ-%I8{G5hv&MDVS*`J zB7vE^_nKOEg$khV-seRY$v(H?rclb-h4@z(K3$2x4H)*}puZl*>!r+aUhw*WISeKh z&=c?$WmBCu)bv5E+4+OadDayO)@7}&uy%_cyr1aJyk<7P1^Ss-a{(6tK42f|IIz*< zJSzaQ3n154N}Z zkO2PVnD2l#&cGV>KGWhu+{pR{VI}sjD&{H;A&>OXt(>5puF$;uwloB7_!e|=#4L$! zIS?T*>tGM@)*Q8hmsec#N-!1AKrdHXb~&T)x8T9@&2}PJ1i5xSfw)Z0*EK^zp+yJj zXQ2vOwLQSDC@dujay~yJnxbhRL(Nv>K~3XiUs!L_WL`*uTQIca(Q~Z%-tivjW!Ip6 z7=a{&*=rbMdlpQrhfj6WWEJBpte`7ubKe=KHYI#yPQI{j-*Fd6`Sm47lB9YF&EgbW z*8dtl9~OlEf)@=L=)+$XR+b`ag%)ZZAcrJ$Ev3S551UR#T>GZT#68486AW(W^H*V4?H~vo%@yy zn04$(gXOO-;dCam9;n`4E)`z5iIF z&j>W#2RXxCW=!VzE;x=;r2K{9rGf=64tGSNxb5&*{c2N*t%W;p!!`yAl*)+kW=Fp- zf`)Og+K7AN(rb!C5m1_0@3b7d$_Q%xRN%8xkBNqxF2`hosLBc0Nca-OY5mT?bsyAz zPb3J$NAex2I!*A6lxOkjyXBD zi~P17eu`Tg+mIVTheI<;IPcz7X28pc(;j5MlX7;g$*`p&I>G~2CnJ{F8fxUP<7OF{ImJ9z9W2l)LLZs$@nw4 zWf}cL=qJrlc#5x@wT3o-N}#}D&cwIBYvDQR%KFXxm`bQ6v{;P+v@USUs|%jmW0cv= zewCz&Z*i4Ocqi3oOOBvV%~KG3iFn4uWb@;-``<~p-n${)2g}gU)w)%1Xb8)Z(A2&g zBAQ&kWs%@J2FY>k_HIDv&P!c|QVAJUM>y#>zR^0mvi-)6@Ji*_^gzx5&BroeGePVPlNIlbdf;M5tI}nYK#QM4S z!=93u18ZmU+F@5C=M0;+PnJ*x9#i*aOS}<$?d9gki5i@7^Y0JLch^sdo%o?%N~KI@ zvj>vQ+|OA+B_c*>J|t9C_rNfmNWHMc&^a!jFB||E!8Tf;*1XAj38C={9nv{Zx7~FP z`vT)ND*_ui^%!_d^0U?@Pb;_ag0>^ftq$J@vwcItKgp*8*CirORZRN8g z4mV+4rOZA?^A&(6e53U9?|eo>xQL#|7m1Qif!uTV@y-gklBd)oBqGM^GM@PcGm?(v zXCMeZrS(2a>@bFt2cI=QUu)(o*fZW{Ub5D_2ew@t>*{v*(n**U8S2WlqCKsB`pt(l z#nmf?4y2{n?XX)*+L^dW}xr-I+sGaLmBex+z-xHv>$&+(j4 z*wz0GnFFEft0sin_MZ@IM#kAuSdAsPY_WTys)kCR_N=i>=x zIxHrZ3RxzYzrT-*C&0a-&+hDi9#z6kk!D`XZ^sGnPbv+=CP^%Z1S3i_!;poa;NhSM zPXEc-fZ#)g?iaeavmRo2$2RQ6S3QTn5LU_;;Sh>FOBbriS6Wa9Bmx!PMs^F&!s6r) zK9YsUyy0VahVE$tPfFl=q$SoJCY1)0@KVT<>D<;9s6VscQ!O9OHa{&;X z1?SdXPKw&cDQb42C^2!RjUs3+S8b0`h+Uw_NPRIaP45$*iuaLVMA~rJoi}T9JLnF; z?Vmw?*H?9)q1lo-t0I#1rSM5tPX%^|BCN-wb3@2)1#Ui_bTA&euLE3xR zgWn+5dQm@UmcW(z2h_N#6Xo#M6au>{);ocRN9d*1ep~5q!^;#8jVuob8GD0ce`qbz zV6!ok{-ew-x8Yn@Lsze3C$O-c+*kgSj%vss5ZMHq4cXelC+xOQfQ7doLpSDZ46q(G z9fY6W?O_i4xLxLHXT;_^s7w%6FbVQ$%WK{|sw*BlphjE6i-%C#T|RuJ!D>%)k&FfU z@@Y8d0Wodg0Gu5c6zktoHJeu`v7;h8!0KV8?dEY&ym>GD9e*Yw<@4qyxVQ;)v>Nx? z3U>^ShF){r6WrV>ri~BOZ!(1Y<0U>zmW%E9XdJp8Yc_;|cV`jPpDACSfKRyj9S)hN zKMGM$sNQJE*bY(QhHaYHZP>MU?*YQaa{VT-lV26r&t6!rnig`5oXVm-+_9S>6Zs`!G zI?fOtJ4zH|6a4$&xmA-5{$c*7V3EO+q?r}J@!$kU+KjjPmqW1Q2~w&aS?~mYof1LU zE9^&C zT$-B%tAVk#w(%aV@Vatcm&-PuClqeYo*xB>RIn}R#Fh>R921~S$Rsjex&Y2VFL;)z zD%cAX7^21CQ`9Q>@+==CqxKb_;Kl78=p_xTKv)qswi@TRF&B1vqHK!tXgdt~nr0a# zGu!cePzrF>P2_#BlkLfq#lE2#d_bg!_7i`1hGxuxcu@_}5|%IL-wU8^>4l5B5A0tj ztUeA|1%RXrat}Wke+vyIrD_ku^8R~v)?UMXaN@wwMc|oT5=?eJQCIHgeW=;)E=u{6 zUSAm0Vy;~LFsC&-VBpC|Uuc#Z050}g(qMx^CO0WnnF(za--<}~ z=P}{9r?1Wf^~Y0SbJWQ@rzk%iE0{7)#GBuz?2_#+a;s7B(O5)3n4h z&{^J)-hkQBndeXL^3|Xd(V7WR`E^9Gv%Az=1WRAhEH63fh%lp}cufj=vI2@_yg_X^ zxbh~RyWl3)y;`@?62uVC51>RKAGjt_Ie>FUyv+PU$U2zv~3zmLq2nk7mJFbjn z`EA$jhI@Ksc3Vh#_n;Q;8b))UDhl?HkG91vfZ7|Joz&`ZvPoYe8vWmPn-DPmh(TZP z9}0<+)F174`hSDWlhD)i&67hQ6n@(nxRS9B9*+IxP3rtdpPR$6EA8nz?qqx;akZINBC3kOUN#4c#3}ghm&5`VFa^ zTp)pmSLB4u#s#WdYMU@Fw)KbV9B9eXL1H*`I|#pDsE-SQ`2pptQTCiQ@K6A>5bshy z4>k`h`N;6+jzE%C3yhV4U^5&M*?z&FDKCe>gV8m50k#+5xMQ{_-IedVAhUxBkLS34 zI|&c@SQiKOzg+-LrNy* zAp_o3Z#6E)z-u6n=y;UGmc0a8wIQA)vSC{zV3py-dh3cAXyd_nTd{RRFPy409Yyxa z6v1iI-tQ}$ql)1J%HGkH&r=%U6iHie^!a2N0via9I6OzFS`l2t9=Gd&Uacoq)_&;B zVKad(pi(=&vc zZWQQHQc7)jwu%sZLl zhK5gUn)5L~X+5g>&+a6F1twI-YqvEseGCLfHjf4*_Ag+s*vK1_`%iP!>-X{u`hCB1 zW$X9wlZ$^g_8&$~@gjL)Uv)#smeE4KX8P#-!Atye!{ve)_wj84_l>L5mtPX?<%Q}? zA8Fjz^Z1K>#rebpN0{eB*FDh&#t$~%yp}ix1skst-2P>YVTJefdidqq<-?sRA1&cJ zn`H(clHV+ai!cifc`N|F4NSW_5Ha(Ir!!Lh@ z6=o;4V~ujx!kUN^2TV3z@`6UlHylFKRrF?H^Po@PpG`!boF=d%rRvChNr>2wo5Ky^ zOTF8DD~{9$^9Q^-!b&$+c=6T3@tEf;o-W}DorH1kk{Xy(@tFAIF1$A=LQrVzjUd-*{mp{IOfz*5l?Rht=ym?V0mZ_O1VQz z!SbnXbagC;se}D*#~B=9?eB#nS-yswPx|)4@s}wMD~jp8@cuglwj@b&#+Wa5c$@e+IOM7<}WVLMF54#J}3i4~W?nM@scRAHoODKGX#IIQ` zqSE*bk#93fYzFe_(y(eg;^76_r%m_1RM|D#>YG;V9al>P#0k@i7&J;*yTbD0nZtGj zg@8zy>F}c9rOg5TCdsp93H>ERK2Y) zEgN<@7bM%-pL&*0Zgo*JB)+wLrhqYyRA>29{iK~3_^L!RC^WWQG|M-u^lyL|2;4%UrzPIIV713}^Kc?FKb8UwMX5whgmr;H# zijIoHimR1-Bm+JoT#jot{~FlzV!M zpaKjX2vt@%SDmJ0Htg$zVyf6KVfFDGPF!tnTqGyuPD^|(D|XxE6n1qod{(;@mri{T z)aKFy`jWXLu2r}F>;(yJ({Au{g&}hz)tCoAmmB%)qFC{2Z^k*yBy)|;YFinGnh1r- z1mZEU3Ft>W-G2I>?i{NRwKd_Bo&j8|iO1)Xrw;9SGWXttM_a%AjM$Lx=FL<;l$b~F zz}MFLsuS(G*t@j?Um(*(h!Mlp3T0FfgVg$79RuhMEnc(7}D)~NA_{1IH z_o}x2I6pKOSN~X$giAGV@xJwV^nhs9ml|3j{6?vp<3Yi9!>({ekMOG0sdvE#sUISRS(b8YFRlKdsfrWP>>ItG)TY4p)h6hno;kW{nC2MazUG?sZg*x7GQyr*uZ3o!PeM2&DxP-?c(j_`+k>00wWZ zZS)w!DR9W5fA$I85h0Ig*-}Xb&`P{P0=AH;S$Te7vlPv>ple5epzUY-G#|V`TPLHG z(Uf>BVK@U*c!DD9*GWiI&yQUMX@H8P%SpBaRDMdk;WC<3i3bc1X-gjV_iI{u@c}<&%3%NVJ48(#UV2~-g-@>4S5m$e%yk&ryUqXT~}Jc>+@VQ zyh^CexWyx3F{PGqg$U*@3N?Snt-`st00t=0KTyzIDAYrGacy>#L?x6V$s{5mNZJgq zqrmQAqUAlkwrBFhGY!Rv36_^vqFWCGh-os7Vd1H+u5JhhJPRT7pi&T=XN2D1Kkn`S zx2qD+NEF&T2U$FG3qobc_!xVuY6+9!=N%E2YJ0Eq(u^xOWm>=Bn> z=jvn+IfE$CKQu5yn|Ojzc5sr9r-T!>VT zE4HddS%`Mu9;WNlDl=oMZ}EE)^;KmPSWMmf(T)gvOoAOlar zMND@2&d+wUt#09x7(qGdI2uNTmEtn|ecU+GF$^!G{%xqh@iLT`>En{lvA%6PnQ34Y zy(4fzyE4PkjsPs(G1`+og2R#g=}I6IfPyRAtVyKZ6anr2I_|9BGUQ{{Jo%7`U840s zpJtVN@>C{1asuC}yqTG(^%(dz_ML^v2xEr#t9V|@MBmr@SnJk ztkHn^r|KYhPQ_i2{_(6w`p0uEIsK_FKMwB3wC6dy4&1-kc-iEl;R)kga~hLpKX%wU z{n+98+}DN&=iM+kSmStZ=-`q+CJsI~xq(oiUHEd~xmB6@0jn~L?a!wlnWvaMvfo-` zT4NVw(rO;?eC&z6|7e?qOC`NowA1^+V0z6%UUcZgc7&a_aB#b0*<=)^=8;|$=A~JH z>HS*{+h!hFM2!}nvpo3y#+>aY`Ok}1ZLO+X6_I^@W%{R_rKz*CZ_eNG`O*CCpR*sk zZ~OdYse4P-^ZJePFY0&2Wpn56|4Xtn?0Jqf+V2K0I<_iDygla4z>eTIIjD_JZ%{jE zH?sA2E1ihaDyl4Yw2j%xO=L z$(HTP%q|#r$Guf=cYatn5baYnuz`7_P?Q$>K)f^LMWOhh&mRN3oc}D)OLKfMwCktr z`{V0vs|njNH6=HfZX0GRGT zrjI-<_>yMwz#`T3VS!n+Q?)GGySh;9L2eeVqBj?Eqr1M1CA}!Tyehe%JU#P%VZ*MN`{ML1e-t*PuX{eR)AoG9oD}N|4hOzJ zDzs0T7MKNS>T(vOe!R3Q`Au8)O8;tZG^3>=+b#B`+Mg)Jv0U7uqc@~)r)K(DE6iL+ z8}wN2J0qzWg!0EN+Qlx26$KK4*1I6%62UEij6x0;@&%&Y`~k${4*>Rv2e3o# zK`I6DAfpFzGycEB9ir&hZ3mE{>_4ui5#wtx<|&)UeL2$@a`yVA;zk#g$*cFmNlc|2 zzqa?-g5Q!`CWIw>`}y9)N)&GJf?n5N>&nN|dOuI8f3i$;#AvcQ~N@7 zm9cu~3z5OlsB)4p5kQg5wAL8S9^FSnVfR!H9~?$GeS1BpCMRZ(6r7~IuZ-$&kh^|T zpQy}1#%rDafrv^1n&3ygb>qo%1l14}qrUV!r;hnJdbvPOWptgn%V0TaK_yu2)7ul) ziz<S_lFDerVu^UDBDK<~HwcB>(yuH@nfbby zMcaR;=;nYNGkSLf=*q#ehGQcJM!zV~gGMxQ8|mBOW0Yc|`LkeoaH3#9|1nl1I? zQkf^HEs>zjYj$q`rYo7PETZ=nVNv%7*YTdx#WU+l9`)QDjHwp}l(_jhFbnQ@+dan> zE5R_Gt*k8JE7_JH3K!)6^{6VKHJKGrqA}acbBzGBWw`R8ngdw+P>IrPiaM&CaW0Wo zWxrczRvT2ZWB#`KY01pIlE+1}T6SR#R+h=b+GsX3+=>#3;+xKn8A;CvE2Hk%{4M#K z->0L`de9Xs&excaA5AriCEeEoL@)KAS9@81_=k3-b%oP?imuPMseSR6`&@$}@@n6K z-u!cdxj8t^HcFXNuYR8$yO@0EOs;?F7|d*1t+JaJN+vuu^U z#^e}tcfRULw+h$NBPu9fo}rFa&yWftK2rc4zQ{E@+b8~$<^G4}*=x?cKNLPybfe&~ z8X%(kkJsjlDgE+kgRz(#@(JS9+tf=j1(c3&e%`2lWr4Gtx(Kh*>o1gs4gg0n{Xn76 zj$?`=Mgj$TGs=)o>riRoz3*OxCtq~O^CJPmhOPF1ae*th-=er}9LzC%R&i*K->gU3 z8J>{G+crOG;efffJQ~x3&DUP+Ybih$Me=pqf>HsIGc})U)5Fd&aZ=>tQPPQI3WZY8 z*kp=vYvXkljJ?xgsa(?L{E5+1lI8tUYF0!*%1}hW_ZwM77fqPn$6NW?3u%s>c0XCk zvmT#z)-1w{>T_Iw@ey&g={K@z@E%>Jga+h%Pa5v`DL31kbDGo}7QmIeWYJw+P)oRN z4yp5&-?cH4EPTbnDbWl7kH)f)?yLl6`lyIUXPV7LgQ?C`v>Qje?qn+GiH;Fzp#Kw# z@q;?X9~e!Q8qKmJW6@|9Lyv(I0)TdRm~Z=BGvErHrNAP;37{Lx6~rpu_9=CV$cW(M zUgm4MJp^N_cLO)BxBk*plF@+!cjoQZ$AMY)SLp3Xq5u`yKLjEk#O4H{DfoZpQP$`q zdjDl^cMC9y8?PtfGWT7dZ>0_qflaY;HmHoU6_%&Gt?831QB(v0UJ0s5DCyf0)xo;E zY)4P-C6y^WKkw4>3%kn@jth3!m$9n8R<#eCQvD`KS~kXH|0!BQqlIElLZUhqLHaYZ z4&o|+`64Y=053kSdL|*hx(0X0>DBvqsVhr+srpWX^^0iiTOG52fJcj3*xGjIQIEfj zN$i_EA#sSe@GYbxa_K%rgFJSv6O^TWODbX4OFD8MYx_Fb(X(FGXnHLUmezpc?qq%O zK&e;5WsvgpojycRC~EuFqA6&+mQyZ~Xy|O5=fYWvTAOh8iZ#}=ml4T8sdj~*!tT3| z_k%d$)Hee43YKk)*VF*gzCiZqTP{FupKdR`tbEnc@u8*_j&UhgD<)s%LoE`Kil{P{ zTos?1{~LrQ|HT&0RY(<--T-#yN+cm*1R@^NdQQv2jR`y$5%X^9m zgD^N-jMrLkJcOCM*-J|#d9!i0BMY4zMWn}0d#`%yn~2TxzTW*_*DbgC%(ngR*eZ8g z?8&y(ePzzVNNm_(t>hl3Y_ODl8v4|ts={E|8f^uj>y|670*8M;Bu8{6S7*hMbcd(P zv#zc&lGfXw-SCW!>2RL=M5ocQV^o5+x${Erup1mrK9$%yTC=B@jna(k{IR8Vt{Bp< zGSDYalYM)$vh0uktKOP-boj5hGgpI;NGZJLL;j_UGr=Vpz8V6%d|;xY@wc-=_V48? zu%hJhB{sY9si3!CE4(Uxx~bS%DLnQVyc)*|?ve`Ftqfk#fbQ~XHtVU_@Z@F5eRkuS zGxvM-PWQ4A)#|&qZG*hhYkADy$5oi0*|*WNMKf9)F)!x)v_jgl;A1JuP|=DG<3DAC zGa8?6W6#B~H$(GOE|SSU#l-Y1 zZ#D?4mLt^1kJw(`CQ50QjWxSpgvY3KMQx>e{ax*U2jFCR=SE&ay^liVSBX5w5ZBzj zGi;ry?QGvxMuTYsx`+epA7KJ7!HOPstiO3C6i`+yD_3S=SjOEqmiTAj6%JIvk zAPF0cQvJ@jT6{(eH01x{P%682rcr}S#IRSlNo?`jCU5pP4PIx8R`y-h?-P4Ru;TV! zJ%tN@Ok280l!vJn)^*RtJLY}*IEy4IlPoOtt#Arne)NN&lmYx+igQF$*fXCfGdCrq zu`8#3f8E19dBJh_zu%j<$fM_*3ILtCUb-rTWNiFX<3(q@Oy^nE&&A=aevmrhOAa^S zHi38PPr1!B5P1unjVe0YtLblZBnumrD0R_35C^mXXt*t8wMSv@tNm?~b>GvUW`(;XszG;!(T~j+Jdl4xY0QzK{h0&LDZ9-*&NR>M#cV$Uzq;6nL#G14| zuHc;#?#(@hACGl(49m~;0fUXobulQ`E2|^^uLh?H#hGQp+vzWO>n%kV&Rd#Lg#PQnX^>8_U7O@KZ(NptiwHVBhJ=zP&oL ziK?i1MU;&HV zdaVdeOX4VB>H4i@JYlEVJURZh$VrFmx2Z}O74?`IOPz2p{fdYN7=f*kJgz8*&errMnJJ6j zcM@?RULq;#1#R@56m1T<)-#$e>A;L$NwMr_AG7|V<0ZTp{=(nxL7Bx{Yy($TsR)QC<@$v7b@5@&{I>L1Os_(-p94~ z(UCbd#RX4cnMtTLA_1>vF``sT5T%Dgs7#f}bQce>5Ed;F4p5<3$i-w3p%7*vx(6jr z1OP0AK21qd0ZJCALaFhnemV;c;++WyunkK=Le{YWL>Ld!@DwzP%0iprh|V-J?gU6u zp?~bn{TuZH^nyHX*GZ|I2no_tuvmWSfpf#dRS{@N?FR>df?JJ zNxv{ug=Y&bqV*TXW#B`n{Fj6?-dTAL!Sn zbxnu)P#7nqI2JnI0D0dD=EpQ9RzOyH>!xDft*L-!m8>xG>{`|deQla&Id6E8B{ciX z$2osZ8Lxt-E#AAnSTMRC>alwnSrdrBM%9ve@!W_yo2sDh=m#6BgUVpHzLoFYdt7TE zbdSTdxyG&sa%pjUYbOuvgCbtKJap-gY=gH{?8`d_g;c=7oiW9U^&yq8*W{LpV4inl z)ri|HBV)s9i_*nLo38!ZxvmjWl5e@>D^5r#HJMs=FOk1O%*H%T%-vrRa|jQ{N{br>T(k;0{L)yx8M!qqz${e}Lx&bx$ptKm81{!DI8i7>rYpO)M&Z zNgVnFY;#!us>zXwd^YnqEVSOA*TQy5Dkfok*jDVp;}?BNlF5a&+ggVmb^5w7c9&O9 zx^;2#3$~%v#q^JNj~B8xelJgb-n9QoX;PtwY2iWBCWHlO)%(6w#naMX+crMLMu1uD zxRwQ44BGz!?5*@Kx24)Xg?t1-y>d6}SAs{bOWO4otAh9sT|yw)p87z3VG>a^__LS+ zolC{)pkqa0ygEN6X&_WYgia)hFvEK)Y#?5&xZ84FI|kBoQdfD*lj$H=4C>*oZ!#t1 zCkG#=HLF#SZy$w|+KjMvdWq=`M=u3PAW|<{xfQ{>fq*eJ&cA9Z7*fp)+PYL3t%KAf zlQynZmW!bA?m4Cb4?Vs@`mOF7zndHWg6!)26`_~6RYQI}rqr_}_6Zc%;Uu#f_N<2& z&#wu5yYq%S{CWMYt+go^w!y6lC*nEBSqU&Vwm7C?OMV;zgjgR|A9C9dQhPUqw0qv6 zL*obx>Y!Bv6H-#9R0lHe^gx7%WJ7+0u(-}Ho(iEx(c~-~*aU8gt=&)+d>bjFYI)^Z7)=^9iyG zeEUEjC|Iu}vd^yak=(cR!?MqBaFRUm@X@eu?zB~wZNO;Qx6?GZTig0jEOGGbkFwQneH>m6&9_mFS`fh+IOU~pd1RYYBNVMA)&>GL zMbI{-ZIPeKu>wjES{27jt@uz9_Zxg%JnI>BT>SOf@qw?epuM7RUB|cxY~~j3^wi$E zQA;SMt=lrDZFB+TB^Oy+pT<9j%-to4-o+HeUnV2=a zxpNkDGD)^LKZ&;p%1Rc`%}Q=x$p7M{HZgRRnLxiE7g_O-)qjKd$NN7|#YhZ~^aylG6C| zOOCWQ-NT_v}JTO zwe_!8?d6^k>HDS39%RFaET>Xg#&87@U4K&omKSJvk) z+9E;HvI)*r;s)7TrFJuGK#m2Tp035_%1OGRS{xRe>thqVHiIcvvbd5>TuF^1mi4Sq z@^tjo#cR2hY^*0!zSb+3q}6Jb-(wXlQ>+}|j$}CJnlL3gO)$xX6+4PGmCLb$T;jVr ziA1M(ms{L+RgS~mE6=@mN(pIngL%0+iB`q#WJ_~3zmgR=nL@`JH8mZH<;X{ovdc$C zIh;4SyO|2?;A5oh%ePo>(a^MOazm|X3N2BmWnpXOycYQ=_eAYKgz5+({6F^?GB5kb zUH{>+L)3!N6&sMoLAdL$qyD`--hxo8A~P4&EN)?SH9}7Q;6Wu0r~HPjfZ+?#AeoFz zW-PN-pTBYa#hX8CDs>2_$d91PA76MB{z%sS=htuiasK-C5~LbVAZQ$v66A|Ypi*Oh zU_>Aelg=I95WT7T54Mi$Z||D6dkmb_2#RLY0RvTPOB*fQOmwbY+{m~$FU~CP7_JdK zg#}&`u*Hq2*$V&fxT0^3AQ!DveiO19b<#XTsgejbo|*v#h_GR!ih`*RN7R}5We6_G ziNJt>96ySl9q8hiQgR$Y9Qgq|(t=RN8*V}vkneZkQDme@mRYY0&YsOKC^%c9kZV7q zsRTk9;7ms5QJ`hkiy!}=y?>pH)YLFyiIAQ%WScyMCNpT2ak&2!s1ku@(W#%{@tGBA z7F`hmhOUh$Y&e1!qQoIVNDb-qF6D1?_1AZGakFayP|A6eNEWg_7d-#-1)^MSG1!FA zN+UI1i30H?JZe8Kv!rlDcyso=UZi@Jy6FKFn3cW~VJUatxt+Un=g((cq^@xe$hJY+j6 zoD=wiXZk{G@AfRMmrfsp?>v!>)PAo&1)TM-K63sc3bekgl6LL?ci(yWN23Zwr(8sn zZlIJxQ(PK{^lyP(5b&^7fg5}KXGQjo01C=3XxGTUI~NxK6n*`D#?vi_*D|m_(Sa{q zQuXy0*Kd9L^x79$Ud9<4s2V{}T%$*7->jB3p+#1DsCA8vsKiajJctt)e%yrrxRU-K zH}gj-A=A|@ARy4q%`NkvQ$RpK3H7+*N1!6-iB_)BYP9l_AHU>CU(EdSLllw8{O1(t z8db7D`y))QO}ufv;QEgb(n*!NETk`I8~%tEi8a&yp9GMYlm3ZUF3+6T+tSn8-P`gb zW+W3-N_ML2f26rTx(MQa%F52Ze*G*GW8&HC=gwX~d%xiSFPs?}{fbh_tJDZ4{etiBYk$)vnevBWP20t?G?i!f+Pp*)>l`PQxCqp?psQ|;Z8JJZ= zL{>Whm2!6e|ITti<^d%BA6J$9$R?Gt0GrwO^7A(n+=YcXJfKc0oDQ!1(FJtCSET<= z{Uhw)ie$_!AkZ~3>PKxleRc z;MD0Mje3hzz`{Q5Aa|5|_X8CHKx}z)zG*`(Sh}1Wf}46Zywo(a@ep&X^}^sn8Fy43 zqd()@Nal7>7FcYLO*7+|oc!ojaMN^OqXjtlQ=V#zANLj7btcXgqiw{|{m`b1e2lp7 zL^`y0k1fdQzqXi4jaKjCVo>YJ!dRw=I~1FczSRFfLSu~gaAWpWlgP?>3T0S1V=nFW zm)q4b=@Pk; zWt!JVacHcbagLHZWELG{2LzbChJGF=O|-cl<`|`=rv@3PSiXLGZTgqA*r%Zl`DH`OR3UP_f~K)atx0s*yEAveI<3P~mjY88_CpJ12WZuhtU z?)QC@2R+Xu^UizT`#JA>&XHa?=Mf0bR`+uZ;>7TQbJc^elkmBM4b|tWTN|8-bLZ9< zYX5wmI^kVb^<7REr_JYqsyX^@J0dvKUu~=J5O58~W0h_0L#CG&bYHwMC)&d?t@xU# zw#8FvXX(iBaqH__UF3>KA62$fzlT~^XHBm@=LZ{b5v}!=wQ%=w9(=Q2Kx z+PeiL8xIYa>LcAJFK`zok#zEH=s4LsjeL`eOs=jD3HP0~1P@dyUMw|@Z=is3pnmM- z{ubMW%J?5nIww`#dYsdJ?@#DKsJh?WFdE8Cd8dwi|K0V$BM{HFLG5d~N`JXdZ*v0pc|M9%| zg+FYEdXInLPwF}T2?4!xmiy-~pQ9Zm-g)O8elLgl#groUk(n=;jK6hlbkq<7MM5`j>P>%5iv|ZF&?qh9&N3w8wr?% zV}DjWa1p8i_5~Q3orl1_Vu8=Pr`=uV2GCe`V!yg<|AF%IW##|R1_-X)uo@i8eU&nP zL%>o&>+UufL8uaVynO%upB@LT17!!6m6z`yX)OalM_S9uerk=vF;Lte0X*Gs(S-76 z*PCSlIN3ydxp&j!2cJVD<&p$mr+QCtLK)>AMSAnUpclLA#=wmd1m7eNA_x~Llzl1Xq z82lgfYXr{1{~P*@P-ts;Jn+20jRUa(*MYJV0d|j2`rkB0>GLe$0SNss`SlEr>i-JP z!v8Hk0r?4h_U$fZz%~$HGnQQ%p~^G*j1ubq(HN!ARWJz}2!|)^JUk*j0r~l#(0OY~ z^vJHC0>huVTndm!Xm=@0G6?9wV=Nd;FSE>{Z-qkE_NnVs%lb|PS50fBy|Un93hSuhG` zls*ACQ&s{%qXun+KL1GP5zQTiJOXeO&hB&s%);}SOmK%w0j3%*df}O!E`MfVjSXGP zP6YT3o?G^;SNlP~erk=v8O7&+W{5`N>`tdr|Bg?%z5kGHi0Q3Ru0SdqDCqMu9 z#weUoe*M%h%J`yd|Eqqji;anmQD&%O{?QN-E(QZ8frI`hb1^DNKgWj;bYq=TrBs0- zQO4B?+d-lZ)M;=1%QHvhTXuCs;nZc|@qj!A3|c_WLF?ba0fuMnmf`kw-jU&Xk80|$In0S7GFo9{h~g!Tslp@3rzL_|Q#{;@F%2k0q} z$74~L>r^q|1Be6|_skHzsR@t*T%%Uvmxg*2&IsQ}>8#8EbpE9wIynLm;1i&205f2b zp56L69I)H80MIAEFI8*+&fg5tGf4slB%rzm5TX4C`~t7|r6B^6Jp$(^#*bQnf5HdY z)paAp0T}&9hG-PdFZn)#&xj$q_^daEXYOy*5B_6g6wauAJ;Mjk`9Cs5qi}wS&rb^b z>kQE-oS*YOpkL4M`IUxf6wWX4`Da4}BBI+r@q3g_qlS7E&fn?t%x*lBLttQkZis#+ zKLH7UrtbeD-uOvRl^N?)KS3NdL_2o@FoDlA4+|6wgd)!*`(NNQB0qp%e}kj?hlmJ7 zLn9GU;OT%L{pEP)=X4I}*Wcm%G9m(CMl2Yh&$HGjKBImR*u!TUziz}Xg3kRtBAW0_ z&wldMK-ETvLZfhgN$0=eqXYsF7@xmh3;{7npgj0IRj! zJ9j^0*XYm{^s5}u3Bddp`23Pz|6quoS^Qr{ME?TLGryyXUH6k8Q-R-%7$SGk)n{Oy zMV>#4tbPrgUt@^=1)RU>#VEg?DH<5O?mjv)@E~mK>WzjG%LwErU}67N96oA){s!l# zdGCe)7kvMxh-ev@Qw?~c|4c7_jUoE=^a%{jJ^-U1Fiq@QHw-+`KZcIK%5MCGk80t+ ziO_xxKI<}mvP7eX=yp#@F5pkT>KzZnFJq_1PN@Q^{93cCItWp1>RfU#q%ySYldHQ+Rw}E#L9`;6DYjflZX<58Y+o}g@8{g=Td}K> zU%483QhwS+owu8K!9-lHc2nO;nzbnCyUt4yTW8K4>bO_TS@sT#1@Cpg_6E7N=dtW& zR66&yclIq)c+Q{S#(8JitW`G7harhuhu(H=U{ZP&TbbPuDRI?&v^5c7^+Y6f!$sjv zL*03gGIMF)HPTk<_>v= z6oJik2X@q%Nl;4_DBXvBU3Cp+>-z-69I6K8RX2Z5?JJNAW^k9kP^Q0g>dukZt{u3e zf5A`^DF|{PQoytb0*zM{ooYF3 z+GFfEUG#^L^O`8`?dPsSe*owOFf173K{$)w>#Hs)E_t^u;KJVbm2>o;O!%N0ECT@7 zwCpX(rzJ&*9+k>7eNa1qrk$?qOK4ftrmL!^P*OAd>5_Ms;eK@4kVmQ zfp@1t3JT?32eT4%w77W9n`K1@L?@<17~9W-gO2ag$u6t8@>E@IU4RZnv*yPT%4lJH z(S}fp=#eJ~F3O<@z0|MmkL%sgP!3pO3Kfy{$GS_q_tM{KagC=uNIv4)ifG%Y(;}Fc zD^Im%W@e_SRQZT1x#ke6=mVVFmMO(ziRdl23{tht1d%+!|eU_Myha znEB$szS`QFHQ8BNnfdF*g2?_2M+@`MGMTK!zhg$^C)qlZOk2Knyw49FQFJKl=Q+W8 z2+A+@eC>PV3JHB}A3IxYNN)F&t;6DLo z=@^6``u@{rVN?uAw5rk`~)tv&br~{dE z3MJtBDey`ds<%U6PK|(m{Pa1YfY0}^_<^tJASfVqo;-D0cU`Bezi@&FDgzLNs|V?1 zImmB=1b48t(Kir0d|^Km3X}~XSAZ5lxnNcG&hk_Br|aul4b>%U)~wFTT3Rwtle2VfOFN?)CwwfeWkdV%2ifGQi-y}oDS*+UDeOw|WAX9X@5$YPIN zuhq}!AOhoe=t^K&5)6&+C@Ni0l&lh}V)ALlB{SBpl|)w08L1Tj)dG?xx{FTt&(a69 z_XePJ{)h77wRvmSt|^jx<%M!Zyi7kW@Ey3;&8-@+KWBb^T6JJC{Z~S{eBGyE)Tv57 zGopwp5F`rj_3*2ouRRs`wr<_=OUy58eGXsX$Mt^&kk`Fi!0hESS=9U>fN9bKx%|R- z1dtVc)*Zai_|5z8TRW=*o%=d~Mre#`Va)75$nzDm<&VAI8H(!X0^fn_%_qi&@e}qv z>8=bI(l27<@@0uEP>Cz}f}gp1O+nV1qRgAeZzBOoCE)yPCr=&*Y^|yU{LsY$V&-#a zc;v!4--+|53$_WIxjn4P^1ydG-KnA~i+R}Ra9An>J;;#Dghgk8pmV|Bo3E!anKyY6 zTPt@3z5`c&onr5f`t}L!$3YLEZGf-&GS<|0!Ec%S1kAw6QqR@Dc~@=?rNIuW>tXLmp% z`&om8o;853L!*#?dWtD16@o1R0x}x70~Yi<$&s%Dh?WMH_nX0ADd2(83=YpJwSZf7 zx>NOmI|if01%4b@q7VKl4Ui$Q(LkwO4r+?PRhl(YW)Y(*1u6^fsg$KMps5h)bd(05 zw$=lHW&pOXu2xs7)14gglBK#+b@gCW^3zMrW@o7jxNZU1z~J+dSAc&?19G30wPsD} znzaG%u_miDGjI#MrxZw%KmbrGh5ZhI>d6D80pA;dzJeTkhWzlu-RraK>gLv8Fc_|s zqNnOX2hEmJCkeI=U$diU+r2`Rb@GR=TLX|iZK;?-y}=nH`iFqjyvYV5gpmb&R@QA zb47MZDFy5$5J0+M%uQRUEv@ff!7Y0#eF-z{c=p=u#g7VBuU?%E{_bUE-CDHb4_hAZ z07lyS7CC1Q@7TGg32V&eJ9l>Pzt~!EzF+b*!P7n`o7_8L0_fY+6)X4tm!I*7`QBT^ zf+ZB@a&X4jiUPhMGNC~FmTbLX+qUgO`CEcynWA9R{d?JyCyyfwZY|GT@rCw_&%it0 zU$GO2zp=Y}K>_3^&o&Qn{cl+gnJ0`7?{cl!z2M7I!Z~io8psq8)+6wE3n@)lW=`-|HC~6T($lD8>~Ac8i+Sr7Yej)fRv={m zK39>GJElM(ja5FHo3o-IZ%N+RXrUys!1G43X*qPc?JeXowb#?|8%e>?EHGg()8Tx} zcm4B4Q(x2kPCAwn%dn;U-qBykLHBjc58J zPu@16Kw)FZGL+k>2^>ZADv_dKvxq(Zz@ch>LB~GMEk%-Ey~TnEnM1l(R{_K?7%p!* zX4x`qZfqPN51!nn?@M}e&?bo75)t)eIA}J1U>n+yRH8}~rlJzq^n&je+s_3O5jnT09*)?K=SsqJ5Kbo(a#s4-d~ z0jIT&z9j-;r%{}4quOCo$`d(`j%|ZVd7fM#RcH_rQ4$@ZBsEV+n5dyCnQF+*4vov? z)N2lbjp>Xo4oe-wt5dtLnQ_9y^tJ>T&CZ~H_6N`K4QhV`6Y}n9Fl|u*{Wg>*t2{BdbqHCvZ zEP1kgTNdB$Iy=4aqWWe@VFZU{3)He85yBS5#%B^wXa+xaR@R;Gdh znW!oh(uXSfAXrf=lld|UTbQBAQt@haX9QeLt4oYT7SYQwD=jN|xWQ=AC^OT1t&KM3 z7UapveYV@XH0n+P=VICJpgc`-XHb3yZ|E9kwF~p1ev3^rs9c>Vb`TK8=UZILbf#Z( zw^Nn`HlY!yvt#BN(^HTK*L~YOVbNViKBr7= zB&5+-_m@HHbY)uuD=)#Uc~IB>s3gO8T2tR4%uY!Qv1$lm#xORnBv%8~Hwe>HxuiNY zCNF=J<&`t)Fx4~*i$jUUqJ0gvu=&ybYPI3U>@cXiR^32&AfMR=V@{WiDT5m7)Q;Fk z3?n2IpfKq&c}2;v#(cVsrks~4)>vHp6i!|5TFoZ@a4VFV3~5|MWX$T#5gnSc1}{_R zVp32Vf7oE6sgluwR*PRCWs(}>X}}WL=T?(L*DYRUgidF1AzU6zP&Bbpz1d)9uTdul zcehcKQ?k^E+2qYq8d}uFs|B#RCo50QhiqZF##NV)>H0 z-EDRt8>FGG-Ns~?)mFq&-(U|*1#dU|bG%%qhP@`Q+iB?n@5)RVXtlCpG)wb14YtsX za7|TMv5Y%l5UKNJ6g@3FWu7{7K!LNAVq9bA(`K)FP<93tWkfeLI03)pVn+jJqHxuY zc7k*Lx>b(y$vUIy{^yD<{bwf?J=yKAQ+rgKnSP@M=-2d2uEQ0SrIECHmadBS88p2r zr6j~JQfabF!tJ~2DTwA$JChZ;dD;oAiJFodb-LTCxiwwD@fnBkdW&QS_@Tx zbm>kzHM0|0q4_yhhuYNn+ zveW&Vc2~Dcl%B>>*S8B)v-A80jWslnULRTpEak-kACB69pJZ3HTC0vGWX%_PlqVg`A^`t7f} z+aH@QZ=swAyGjP}q#}w6oeUoe{b0JtK zOhrzNOH#PdTf+qO$nk`&tzPYK-Xy2b6tCB(!Pik+7 zVt99|DD)a&J=kfW_#2$z4$q|ab<)t`J1r%@WlWo+?OmmgRb?d0bsWc~ zNfLaKD!4;`IVlQvOG$Ncv*K%=6Aq_}=S~vipOS5h<4I4b_T?)u6eEc0!dLL$ex#@j z>BjTLy)rnRRGjBWXsjE`Ds1CL=`8k5 z-bP(nWO|g#nm}k>p24--p)Nx$7a_Q^JAAILV6JWMV7v#?B~PJsaG7qX7GXWT$y>}| z=oZ-(H;MFME#B^AdP5|6Gi&M`R4K`Wgt&z{-MzCVq~{ztZ1BvVv%g*Ea&YY|Zu4v$ z`oP&F=EwUQlc}fOQi(qr5822$Hvhuso!b6dumi`^l;>+SB0k}#GkChG^Ak!E ze71A2*M3e=YhN)O4N-!ejTSi}=?>*hJ2%kgG8;|><>K-oauS`f(Ns%$dLxNTM%(er z)XS^xhFYTPfC-8DRfknOjQq2kL1&(S)^b^lch zhtH0>co6Y4vUF*Dg2N=WT=-k}$Cd}oS{nk-;v?6`>OAkh9-)Z;ug6*?y#pK87bt7Cij$TEhqeQ1=rattzngsB9Ved)2{D~oYe^}zF+GT+r2bKRSF&* zVi$d!v~L`4`0U*m9xmj3UE9;gsLe=)VXY@i&>R$Mk!TltHYHT;{$fev5H)8el?$`9 z{hkEf_Mz`{Yq&OuDtlVR*D8zL`8+Yi*8WCH(2EldWja*?{ryemR63qYzQX4|m-hj# zPb1Dp$)bmF&E}5nJ2IVqU4kIts|%mWoA7DfaT4~f^_}?J%_1uU?EkL4P<5m;dVn(t zr~0n0`FumwZ0$&KgRTLOAOc)33M)#z`!k6CX zPsfjhF@~0neH@~-IB3cx*LJ_wxOm|OG5=F`v+l(NrsrkD_E|MjxYDyy#jVuFOfLPJ z=de0z6X%31TfUfgzV_T((um7!`=7M;MT`&p5dTL!m5~!wI{m$e+5+rxdc#-jZtbU) z^H#q(?32_+yLymb_ve$e%TGVboAQCFSKGPJe4WnS|EO_MpS@b{4++)H86Qb*v~fPE zxIMF2VtHlPx3$L1cDjr+MW7w#&r%JKe-KjZ_AatB8!~L#Cl`{QYr8RHy>7jeo~Ym; zuWN57@BfS~xiv%k0;)g$dwKdn-NGsFB`G=M)-L&#cLaZ%}!}9dK;~KS~0J9sLGxZkjyz!KVG+>ehbp zMAXKxEzxqJ*mIYk9JM!WYhpytG%ND??e+*ff^qe6ZI3?Ud<^sRDBT6m)6^srJwkia z3^#0kxU{ggO%&8Fx#4~V=jC*8XZ<&OUyV(wO5p784Z@pyJ`9mqHZbsM%g;@(o%GVG z#@7-X1feERvvxgvIEftc?`}+*$ctY5N_>^J_sZHqzxd-FT3bvPw4Z!K(io96H|b#R zpsUu~l3>5ZaZj!BlW?k^y*jzkuFJZ~z10kB>&<-jOV(>Y)PVCIRC3kC7JShDk%v>6 zD%G}4+$))CO}^h4&45~a)5NaYw_OqJdsfCR-0aJUDlHBdX@93KPQR1CxW1;dC&F}; zNpEYEf%#`*g1)du=7^hykY$y z2qO8A7KBql#uEwe*ZA96teSZOt9HzWfnr5@Jw^M?DJ$3dq<2yyt76b`HX&Y&ugm%V z?c~R0w`wIl!7LAP6RC}=esAXTB-dq~Kl0o9zxI83ShuQkYe(YC7Zzv@{XvN>r@ot^ zE59}4Pp4#@S8Dk3Lci2a73nSsnyKT)-~0|Y>EquPMkwCX!vFR0!7#~izm^&HT-gQ5 z;X8QdABlohRj;SlKpPo!OGA%D`{exMYLn<2c?~}fY!7UfLN%bokwSlZS&a9ZW9&DV zOsdA;-+KRD$K@fb)*JEWCka0gi8yPPyx_&ZJiU+qe(*!vjXukBI+cIQZ!@OeDyUJe zY$oodP|o5yi4guxLa(_7;_=1u+$A@(YHi{TpMle?8{qumvxI8uZ)^P1GnSZK>=a#t zZFus9n{%J9^)M7%u75hAT~5@F4RSH}XwQB8!2i<0_-Q)Dq901O9+;bhtHxEHeShq} zg?TWp9}rNvLKeCKc- z5{q*_y0^Kpyu^wxms~a`Uujh6o@Za414Ud8s#&W1!6jRzq+_0&f3l5xvwX0TNwamZ zX|sOR_9h7yhgxE{w^`!lpvr#zFD)!!E5+xI`* zz#WMH4KBUaHX-wqh(x@v^TThqChb37n;Rkay}Fg^*S)c^G)cu zi)#qIN*-b8+l)_bOfqmY9*p3kPd-#vCo9Ci?3L5cmR*Uz-tKKEFyE}p?Q<4)9tLNknx`lGVdo~+K&-|vKGWvJ=YE6t@a?`t{CBVBt$5A8 z;tam@DN(xO9VAM7&CuhbrZMj67*nGc?OXfum%8JO*BAG*WYxHdwZ3h};{i9myltuD z7_NL?D-LcuYV}bvwNZbaoa$M>>xqX@!y!zIzl+w7j@4`%T2mskr!CcR;>Yny&Z z?4QOplK78`F5byHw8wzw!Zn3LpRK6Uf zh3|fsIqS1c>>4QasVgJO%*5N-rxU*79;4RIu^ZlbMeg(JqVWtB4b&^FNf z8o4lK>|w9WR5O71!7OmqV*E;I2jv^t(^$N(x~9OUQ);w3HV$guHiEH3a}aBomU-ZU zR!F7myYDE7nkt^t19RDOZCXi2+NXtrTD(Q?E;;jI!pl09F+837+$I5j`;VbF{U-VX zt$5j~p5gQMf!efYDB4c+A&qXmpL`?jrR7>E^hRgvcd-ub+O^9LbVb?+v~|Jy=iYd& z1=mqJWkF%__3xm|KxXkb9C==#{95N0CBZNnEB5JU&xU5LGY%8;eKNlzAqX2@B6RXJ8JJY zBygh1)Hifr8~71?Ka;JE49oW2J@Y&rf2-r>EP2iQbUZ4ve&b6b-iBIJxb($%1=Nct zjr*uJK7kqj#oUdtlH%=G(J2#eF#l~{ARU^p7n)F3R+e5?ws&N}xdMVF&XN5IS+`=@ z;iNIIeSo}O@ZWxjo=8+u3uuE}{oxrAuNO4OEn_`p^gi51*Y_l{xwZB!Dzi(@M38}P z?JU&^y)uctWlGtk)py$0LR%=DdN6l)phKGm z&z|M*rW2HYO$SXjbV!u#*Uaj!&f-`pS?Vaefjf_K)uf3jV)TR4BYbLKjL0E2BC9ns zFSVBxcHOmZyT6fJnO$NZs&J5DIVTRWS8KX(vodIEPbP{G!(2h)6O%fwWbR3eS0GSh z)Qq{Ve$Q%@hq>hGj7CD;8H;ocW`@%-XP;Djnw&0EKP~4X%J?>F#k_o8cTY;<3Dg_M z8)zr^e9c5?a{8-SMa=HZ@>+Dx25ZBvh&qRGk+FS8~u8$iR`Y z5)P@qC|)VKxM%(#8sT=~;3W+g^RXzgLG z*LPq+8OD#tE#lW>-D4Lg`WwX}Y|&W{d*wCLQgyhitY!0}C3mrA|Lh4KZ_skA&Qr+M z8wglSnoW96{v0}pO$7MLXHO71F*afG!-=QlHdD+Uk>U{O)vbtLedEN=kMP)5N z0%as&yI64&vl)RkqM{S~CdaML}0r|r2DcZZ_A51LdNUDb)$yqWFo zq?E=%zmMh0F80I;(cPY;8TD4Er^3jN-rp?Dx`cCNv^FL)(TeqS-$;mk+P(ynzxci< z?05cq*!}mqXEm~E@i>SkMGpvsg}!3HylG}L*@$M)!Z{ZnZ7V~+;jF20CC5xe8N)5f z0@z{4rWcecsCfno8bfoEtzH#^5*D&#f(D*}y=@soO>!{~qCpuENZa7*+gMxU+Bt5@ zq_6mwR#G%4S~=7G5%NZ$kNuEcAg5n)J4&p--1?f^2ESvH@+GF^1`P zh2?6=x~e1!&zp%ka}MsvD#H44ek`cD2oqD$yIGPx^XZ=Xcv72ta7jDajx7!6lS*Fn zVcgjhs%VENC1@p1lmc>D0xa>>t~ToYnR=ZqGu*{LfI!cM%6Tc{MNi%!eHuIj5&xONJH#vm8lm17gyaDQl8H^U@_P?9SZaM2E_PR6kL zV-<~l&CS^hnBKU|1=@kSb`js{n~c4Bz0oVOifP!G=!x}=aoa+4cCu&~Y}3ZWI%f&S zar*T`xR5oGd1KSCRR=Q@s4npmhRy}sg>Ta1!_ZZ?Kjsd`udhJATyO4h+)P=db^6Dw zjd%37V}h4F(-jR!x6UKwbdV};1BN_Ej&0?|h|xBlxi4i(hg}<27Q7a}}Z*MS6Pq1NLm}hyYIAm8Z-LN-%IOLM~qtfVZAvO8pe`Dbd zJ<8~td>cl0=vAbL3t=3qGNk^YGDHbZ99NT^*NS?^B=hdN zl6tT@X+HhJ8}wtSY+)lASu_k*jxUmY{&3Zk#}#Sgchk}ylz)S6?5Yz{rV)>^4aOM% zf!K7q&S{^Aw3%2G)J)D7SFfr+qLZ_H7H=WLjJ6~(9i92G9hX>|<$Q-ZOt-;j@gNev z7fmOaL#^MGh;?12rHUaFm5M>S+0g=KZ7T>V#q~FeAqTdPDtNJ~grn3Z51i~sS#ouU zuF%r$VNo4+t%#qQcz0xGB|A}iPpyL_Ld|%9lD<6aF;D8 z!-=9dqeLO5l6O(`a`?EsTB}JXN;X@--v1=-&g68viBJi83hr6DNnJ0(2?+M)IgK9N zEoZdDl*q-n!@+~OaOf(ue2+YG4R=pZFk6@+L>t~zaq z+*uAIfkqZhRm-HkMLOrO2Q2;>T!LQ3UGp|y)MQ`@k5;*KTmr_S$Y`_Q9u|!r_&m!Q z!vkDKD0Zaer79=tDS7q8H>)~?C^B`Q1ftMN(A!NGQE~r)$!LL{mwfx27($toHk`7! zQZ`}_(CjD*E8_(E1%twy@m75Z29DRP!-`FWmYV;x(QJj{u$k8W-Zc?*7j&rv6cmL? zVNB>LZgsbg&BOh}VBan{cB1xx!%AVUL6C}TSBe!UI(bf=JLBpNb`OV!ZK>wr*<$lC zTxzq?(hg81IzA(48X>XCv{Ii*;J1v~h*z;F0)LnT!WMR>`&+Xk8gx|UgK8;L;Y9OK z2ZeZ(&CR%st`|yMO#*D}@=tQ>Wx+w1w5zx1#JQ4q?VW?R&@@8Hz*NRi{^{vU%Ctu! zQ%@eE#3``*%g>})LgyN_K}pw|RpAF3QDyXr84Hf*SanQJPgwuiOb%97J!931LrZ_e zJqaYAgp%*zJsBb0M6xsjJ5zEXmU}i8)=_c}MlLZrJ-RgJ&`rfzegy7DxU8rnkrM5| z$s_W4Vo!91Nhl$yvZY&emy;u`*69ehB4kn&RRD9nC^NC_abexSQLR^%PD)8Wg7uO@ z;jFTyV%+EJS;eIH(b0zsT>?^+_=C=r4oaQIL{qT38JFhK^@%VVC%$-pRa;vdwzeP< zUv+qME9y;!^Fz?32x>I;WAi-T{1@+U$9Alt&qyerL}32bmZftMcaGK}ifUx>P083g07sL)&? zn6a{H&G#A=>dw8|l7u`sTXAGHKXiUnUm8{wmN+I!?O|fj$(wNrCaD7bSlMNYiDu8m z_E0GiyFxSRSdTooCv`xtLizlOM+Hdmk&3-334LoN-XyfGXCA`5+bP9}@6Tr{+F~VW zlWc(ATf~J?15M1m7M2l=HD@wRiA}zH*k(qAh32PYs7g9;Wu@bW7}Y!C3M*YE8QMH_ zIRm*nE*drWg%Is)x3*(`LSecjN`f#$Hou?mCy(K=u#H23f%7e*(Dkc%T|A82HFnK# zkB^P|fB2@*>i9YrlT@)8jd8jC7|$g$U!1(1L=EFs1@BD{?!Z<@J0!LxcMj`R9MUQ0 z581HXu5WU=9dMscJkYE3lO`pWe)XfYx*3TCX5)y0(fdX1TAwkpI7H7kqig*P3Y>Ah zN*Aec`Meq7SjFYVRZBCXSyU`Xhp&B?JT*?2clTJ5e^3HrFqQV|p>rh>x(IXJ%8U1+ zUD#wXiEwA!uEM>El#sTiZy&^FM8O%P9f8rpGFLXAz5hd9@l-6?O+iSMMLb+yPR(QK zBvlXde>}%yqCD8fA}3AN;ERBC9aYA=_4bMe|wXA5f(I!m4i?j0k ztz4OyL=lNc_`TbffwM!}gt@IY1lzAblKF?e9yM zm20~PSNB&ELLSyap(4XXNEptPv~fl8l@!g&wPkL$l(PdPNFi%(rLzQ|spq@-7KB+L znu6(h2-8s^bAYtcY;DX6p{}4zg=}8vVw7MNqt8qw;tmWJV@p=Kdvb3 z@(hnnsQ0S>>puz(lSXa?b zMn?4(ho8g>EwZjja~oqZMfX`5vA%ISmQa6VNk>k7COWaXkWt?&>#fK$PR@I>SK-Cx z9+Uk*%kbA?wA9d7{tO!EY?3{N$}_~Gd`EqxMEK+$Ds$kuZb5f68evM84A*BeQDJRp zYH)QL?UP7lR_XzLY$4i|!H=#J3A!+SBAe4ocSNFyZKzqrT+~qESu^V(85zyS9M&wq zr~9l56C|7wMPKjbRm?+V{dg9LHwMlt*~ca6YC!erhP2M!a}4*Ms}+Qll1qjeGOCcDi)q5XGp=63A&-4m0I_x zj~r&h1;)7&EI?7qrCeLBN!MMNd8xY=04t>I4jPOlljIqOs#0vzOW3 zcW{=EkTTk*OFjw-irGAb&n`yoTvJkgP+Avm&5W>9z~ML=S%w%KyY`!M9h*7Oqx2ET zw$J`h$zJ;InMKB-V7Wi_I!l>=9T->G#6hSwlxI?s9viX; z6UyiAnqOeERUiWIlD4>H8QL*(U#@(@-eOD)cS78;6KgQ%&r58;+!UeI+?<(!!A6TOH0fFonioKcSARGh98EXLw&u)&a=69TCmlv z+;%R=B%#p^!aTOf;Ki1d)6zcd?m$p3L3NXK^HTIZb4&;xo2b{ExS2lOl1F1;K2ynZ zd(vI2x+JIJ;QaS4g`qsiX1rI@Hi(IE@}0$*dcqfFo~~+noMtah-bJc2`+-m z!tQ*W30ph@8ER;sQK*>|-i*50f{Wj5>W5JeTYQ~Z`feqfIY1DyMd)la)xn@7&#a>A zRKp&riE#7LX`0Pk+W4^^752#m8Z};Zk*@sTzDh`!IM;%mq^Y>56__2O6 zT2!uA5wCr)8D&j9Oyjll1(?G$d&#Meq#$&{l|t!{4ZohyY0N!99vin*r@^{w@!Ma#~V4R<7&&1iPs zgVRC=&yMv#y`W;tuonHX#a+Cy{G3$XE^Flb*N9-;=~~sz^~T1dXb_iF*zFW7O*(7f zuiJKWbnMJ-iO( zE3rGBJeSo=_n_(BNo^FVu?MB*i|g5t-;OdFK`X2hKNU@Af+FQ~qg+kzx{_Qy|E)?j zH~i5{XQ(9`G*b_kw4Uq}cW6o$w9ERHPrEAgOV?x&a_)Y$irG8+c1w@}14TnA3M#!< zou~uO)RTL%!iu;MfBp1K&38k638)JasKNXj69=n-NGU+UaMdR{BvsYk(p$Z!- zxFuUE=WmI;_=$0zOgK;hGn^FWaNlb6$4p3Uj;JH}>;+c}x0U@hqrdE4mqQ)RnEa%H5V6%i zPL6kY6ODEaWQ7-7i|?LM_oNA`vfCYF)bVB_`tsM${k0;6-rXcnQuDX?chCQ=M)YG4 zM(YleHo1bB>X7^Y1y>6vden;6Om11pZ}zF1QYglyuQ)7fRjZQz{^kk0(ex08O-2&A z8mkdctL9&?QRm)1n&BAe&B5R?X=JxuVb_RH&e(AAoScEWs8K{5*I~hWIg|)<3fHLa zlv|tm17k|muiZH?UjpV?D#D`go^p`{4}(P+NdFl&j7ho&(|rv+GSo@~?o0|_t0>cx z^!?|uxLDOazD;VBWuU1Mr*7og9dOiWrZIw-|#W{)c2YIPRs^bXsT zK`keCC^Xt?7AYf8^wugD(@af9W1=pd%M`n8D2QFq>4|;`Y8}H*2|jr*1NHmCDy@r$ zv$1G5VHYa1o?vKDw8igf;0u4L%w zTnbefQpLt{qezIAC0~e@dl!SnTk>pt7!&eAS)Ui1C!Df7nbAbx6qf9cUe5HR5@_s7 z{?*Q89qERcEQQXCW%BhDXx=IXs$-|N@hR*`d~SUoA5^bW&@A4xGjhf`zSiuHOgxEG zm>59`%H|K~d03YnhGdynccb$uu$^FMGSuj!g}d@0Rz9XYu{Q&pXa}LO$quI=q*;o3 zJVM3(kCIs!Kq`BQ&&Jda)SE3XYVr?gkW654v9cNJ(}NuKWFGIPmX&ttv`xq((9psG z5@ECpwHBuC5?=#o>e*i0jZz?vV>2nG`Ql6L=Ynu==^m8f?wHVW!8 zST-%mo>hj2Dj6s{GogbtMYrRK8)h=^x*{=oNVPCqLi*I-z5eM6=Ad*TUe}w<^b;(( z`n0(%Zv3|qR2_oQ8^Tf{3yOrTGP_{mkd8@EB$R>bI4l~rN@k}UU`9M(_9R!_tu*5ChlMqdKQ++%ui0w$F~yh}l}4AfK>7LU=`;=1}~ zY-tVwj}dX2Fe;BW^(adaj@25xOSxP^iSh;rHX^^{MTP8sTt6n)rEcq7O+SUivav)R ziz&Q>Td>GO^xO6 z5UTAhnZbL+t{GS|!%ql8PCL<_Xg*0z>h93^^l?R&2ZM>&0PgSz_}mor?{~Ef4VEnD zsvBY@mv$K9L>R)H9|g|M^s4iji!`f)Pm-8XC}n!rI-Hu}X3>)Azuh5MKRG}wKVMzpgbFj@I#9&0U7^a<8?G!Pa9L zgB!}dbo9oZFh0c>nS<)|vu7ULK6wtdOJF9dgaRIBFP0o6=6(MNMdm%lWlqwBNrjv- zS-#UWH1|*}GxNHhg*yEn7Sk8WM_a2S7oSlIrRa4V&qpFs1S7JME>~R0Su9z$xZWZe z2n4Qhud?6a!BkxyS#r3s8I=rBnLKiA0%q}1)9TqWnfmIfM{~(F6db+j&Unxgfr(~zgi50t{h0fyO~B&{3Q?UG77chsOms>IjC50FK9u^1 zyGPiOWW-oW{MH@|$AF4h?Nrh5zMKkAy33Q5*J@B74Z)YbRz0SuVv}7;OSFZisK@V% zw?8;n@)UE6mb9`XLY*2~O!T$0UH&^*&niD9B_3C*u}uRp$((u*W+jJ0lR&vTdiQ*y zDapm=qdu3|Cbq;yV5ZQGt+y8SC^Q|a=u6cTTApC0r33ER6{jPy@IkRh0CzzsojQCg z_cQ`ZRga_?Q`%$#)Y{Ip3R))>V2y&Tq0g0-8!&w`*V!gMn}AzI96MF&bfb%FwtW3= z!jKo6dNaJegvALP@JCO+zTw73$H zad1rDkyg2Sn9&9z;pl<5S#~xijHpiZCS2HrwJ{p}99CV!9J;0Xt2M>P+rHSFxxN6YufFgE`#n(iv-ziG zEL5T2+{%2=5vti{$$s*PI)4s&CXFS&v7rsYYTGAqT}m?>CFI?IQ3z%|#uD`OORjk# zy=dyk2sPROd_~Fl`EQwiJU~T@%-*PG3U!fY*YwWf#?`(dtiPdilkZ_Tq>(M1iLZFP z8OMY+XLr?i>1~?0VYf2-!3`f4sQ_ouTDlqz&RAz*IVgNc81l2V38k`i>gSlc{d530xQJ8vaB7T z`WN_0aM}e}GzODkLD~+m8#FjxRtUaAK;A9z8v$4$Mgd>%a0FJI0jN8ij#gb8Sl710 zZ#G!Kw7zpkx547_n=Q^AAn*YPJwgb0h0kCWWpH;mT2Irm6YrMoDC-0X26OktBCGZC z|3}=LM>lcgd*9uX4J5XtZb`-o*jidLo(Z>C+gi{l z%{z*@3B6XKV0lpqWOC6NS08^K%e6@AJ%*GY~cZIA2je`f7AJ7E%e6d z**``?7A-aA4+VRTAAi_r8s1P;WqjyYOY^cRc-k9Fq`x6RpzXb zS`0-lL_)AZ;?lJAk0~kog447&y8p<$qF4L78d zW2m!`@kG4@!4StgUtA(60oBR$j%dK}aFgfGwWM`2qkzfaKkny+UqplWrgTt+=##+sr)73C_k2Lyt(h2gH9JW#>hk5 zj8P4bqW{$j$(_|nA(`R0?)A``v(!h%z+!9xEIO+)EcFOL-LsJxeblV0xo>Ny8*}rw zo*ZA1?=gDAV{*0kg;R#wughe|57=~sBECmW$xBKww5&X^YjP(ep9qW%sA!?JE@Giz zxG5$*G)C0gNR7oCCtXI~ikgYxhih)?1@GSK$n}iN4gCsI#I@stB;sVXlShfTBSu(- zQYKb9tB6Y%7|QR{+((FrkS=_Yc8c-Q5Vc60vNS}mv-c(~-KvRp8MAWUK1@a^<`}Wy zo~yi|ZJ5YJa)0ehUROcPzn{lk^KhPNbQP*E^-kAL5y|5x>U=1~)Z6AW!&PS{ctkj6 z-&lUn+_bS^F=itQ!x@Cp7+v6v%QDZ#QE$I zy3;YWo$&hXbL?WefM}x%(t6l3xv@$W=p5ivvyG3ox!1-(Xqho-AnE*_nCLE}Gcc%J zSRb^1jmWU81!3|QZ>3QvM(F-uts&V17ZH_=Y&}O+-yk0PUq7jQty++4Oz-{vm>lB``0(acHk`Y_BUW80dqI%sr#) z&th+k7)e^j#@9#sO7soCf9E@u@>I3iOI3z6UcRu!$qez`{Y9t|yMDFKJ7yIb-Om~5 zG4aFA#(pWC%4Ll|BZgA~f>uvCN;o}-tLhwubALdD6^zR#a!ZUgTu%lBM>t0AQfTef za*>}%KEa#!&mR*SM>bCv%)3<~v&c8fwT`KR#DnkdKc-i&4G@!z)SLtTwrfPaGG))B z^0!VI(@eS9d1o$WnkBLuV=B7LM8pp($hDR}I`K)?^!l$>d4QoHxSEWZd@z+Lqsd+f z2w*uOxU%Ktjl6~g;ZtVZBZkp@*RJY2Uy$7e8!L*&g$Sa7LQ_IjEyQ0` zZpjkC`Aj1xn<0YQWY2X-F}G}8c=Sbo%NL(|JmiAV1)^$QCd}zoFK6tCyJE*>+csSb`m2g zdzg3OQKvD5Df%I;ouV;j1d+P|=9-npgPF;8Pa5hmvTMPYuUrvP%p@-Yim7!=h`lFv z#=Lg?VI0w~+5R|GxNzUte|DFPvdzaciq11r-|p#MB<=~)W4HS6ClGIpr^KTfL&x-a zAO6N@9_IEL(PD`JovO7G$;Znjeeygxv0Fl&3kg&nqltG9;rn2*k!NT4?A6#3A@q9_ z!k(C|gn2r{ld6z<}h_rSg;2s7GOu=?D@?p z1UGwhb@`kN)rV+R$+D-P9yd}2ub)tquJsd(12JX(QI*wj?^m|whQX%2E&dpi8j~F5 z5rvpv-vEZsF|7N(}RQ7S!A?`!H(npWPnM1dXXe=`VcVEab zQto)fW9VwNQNRtmvE;Eu6oMt=Pif%vR;x_2sIg!&5#5r6w5qlnL$7>0ZlA`+tr zCNsEhqhJLlaM-3}4YhfXx#cNuy9lnJEHV}dU(mm|-G>6@WutM}M_-YQ6p4(;{8Ts~ zTsmg>;iccPW2$%GG%6xcl&zNV^go-yERbpOx` zHdJBA<}d8cNwyx-|F!Dphx?mWPwR7E>31M`OE-tez z+_+~fg2ZxV42@z)k8v;L6Qu|A=+r=ly`6|L@TE`FTvKn@4fav_%DM?#$QUgWN4WlE zzg~RPw(hw65;G&kUFD?-H_$vjZ$l= zuj>y5`HH#~KBnHE{b74cY;dK2_cR)2fXFg-#*DmUK{1S(LfWJt7S@9YAqMGD53G5c> zzpL7yJKz>zhU86<80zg@K}a(O9k)<=k8!ShI1m!BHHL-z=iM>k|0aii(Z~d^D0{8m zPv4eU_hLWCP|)XLmGFPi8Kx>_Np^xH#^h zdU6UlgohsRQ;HZteD+q1rRKbU&R`F?Q?Pi!T4OYzk}@7CIr`kG)#@@fWmJ#pW;yMY zVh$1L?vKzepM&(`e4CqLeK4)xs9Qv%0(Go@+9R1mee7cWgX9HfIYxSL3Swa1*luEo^$OAC}IWrJ==!l$te#D@%<-to}b6r+x0FN!+XPPvl*IrzWxoY zoCf{5lhln-k93!wRa=0iMY&FcL}`u2V6b1$W^1rbh=8q6k_)7ACVQ75IuyNo#oHdy zx7owpmj{lzwZS7OW%BQm9}Un*ZuT{mXOBK(*vFSd+z<7`qBds347XoD=H3F0grqC= zd=8bxKzJScA!pQo%pRH0pK#4PqN6M1`nl131g(_w3=1+S67Df`@W;|ie-&i@Hc_7~ zjKQ+|sZd@2+*L)^yemP^4MU?H#Ah&m>7&2CCHUvbKJ5o=VIBXKsd8MrF)vSY;DW;t zviD0n{m!6vrRG;3#`yYyW)|E=De;u^gC z3coqAiWkP;X3w~xxYs{3m@QO3g++n!Eh}^Klc(;zgYTk$Am8#`;%)xzlQWE7L(ehiL*_2-u-@bJQI`CP#d?N>zaFB>QG+lg8xE5r1s>#{l0ICy!=trR zV-M7tU2hq9Dp4rtXL1Z_-pM=GUWBXN(R#Z5`lPu;8?_bxCAE6*tNL(&$}7o&5uAf0 zImJ(%w+$ig@Yg*vZP~AXv(+#c@cY{)BNY5M z89Lt)YRXzY&keH^_fA|f1g|oA=Q$p>R`+&fDELY3J*_;6rWXG3+k8C8-^WFN^VT-) zSOVg&a#rX}pc+MX;$Z>VzXJ`LTi#f07#PIfPV~C>K8t*lR?8)YU z)@6H70~b#(;*{@|P0>eh{2M;>i=j1>BX@`Kr1>=iRXb`4nG)zx~pxD7If8BbgsiZ;RtLD#PUZi^J)~JMW)3|CPg0fd6VnqIM>$ z3f`18SY~c*#@1-BM&2urQL)_G>E3%480RgHAu^C%B#ie{@YsKO>-Gyvr2+gJEC3wTRc-rrcZ(AZ0n=!HWIdy0 zU~BC7p)a2|LGRs<;)1KOFDEHp-egGULbn#M6)HW7mhpF~LR4*Lb_P}bSp2pg6^W9? zIlKk@ML!b%+J&C?4HS4{!UuJSwMlnpTTU##a0f@8WiwU=918{(KS7?5px&$%JgJRc zG1dQrUhWA-g4-kSPh^=1Den$6W-@X?>} zn4vm-4B69#*bq;vnFR^>iTihm=CMrOuucANt0^iGL797Z43~N(sn6ET;zTAdSdIEP2wSD{nKAe2qQJ_f0@NBh) z^<8fEN}RfBSJ|U1zFV7Dot06%Cw*>L|a*MXts7sQIuRRc+ zzw+tQuL0hA|I5usyR4VAZDcTpL!n3K^xgW%|}m6y(aLa4#+da$kkaqzPsyVr}g2O{_gR?@I+D^UHkqyiTwg!pfjYPX!LeM%q{#+ zCn2SBBtD`Ql&2-t)E$uFx!YBef%C(3?RT{28T~}}4a0~(gWi5Q9>L8)y5QQjDysHE zLY8ieY~woo`*-~)Ew63`?m(=fAGi;%X|L_5t4kH_PSB2Sk}_k@_qg$oFIng2UiTA* z#kup)*cCoSJNb$m{o!G3ss2FhBMK&Auf%7HS))f@TezrYv7zng&V(n1Jrqck4AZi4 zZdd!E-o@w%y(@fuykqE8FWx*-$KNH8<>+VbJ(4_rEJX3vCDw`<~n|BX9)G%84Oz61m5xjCmx=v*`<9s`pvgba+u}#?&@9Zo5aEe z9Ql=aVSD~7ui}fMAIXSxJ4^9U2F{1sD0V$3QX!d)AF%g(}=QiimQrCblPIf&+&e2ds|PZ(_NE& zJ>%Nz-PXI-V<#UQ5_k%fku9#kSLd^@`jQyY3LjEbgv58XHvWWAtJYO%zkgW3#RLMs z_LAjcvh5dtIBf`r&!6a>T8L`Ljo(~Z$l%%ZJe8oV5LSut^yJqSwe{R~Jnml~Lvg=g zMH{=i9lih=e@;6h;vHKxNc~TIU?kXc=FTTZyg#rns*J68g0r@35_u0p)rLYI;v3Bn zQE+j>iB+3fPlR~;(r2O>w?d_re(TL}`14-JpB{44c20FZ!0-H$M!!4a$H-g>T7{$SNZA})sCKmfeR3A# zqT>B=TQ>zR4)JhOC7v|E%-)LkM?d)N@x;QH+Oru`bV$S5hl?u|>I3o}bvqs(%+Y+m ziu)8_KP6fSv=26FW4`^}>?^*DpKH&Zo&Aloh1R{};O2W!GYLViP)wSM>kpL)I5Ri2 zz><>D2J=`HOkDEaMVi{4J+hNRQl^;vO!Ux!{?#Cu-( zxyKkd4r{HOk}W3YzO9Wg8oqq=DA9yp+k#2+1kx4wLWNj9J$2iUuYdhu3gR9nv{AHD zaK7usU*p^2=UyoaI1g(d(Ef=wGN1ljn?aR)V*aMK>`44qi)RN$UwzYh1-> z)ngaDB#KZw%wSxNyZ_2> zv`*Uy?b@fGyjr1g+%+eZl*_d6*Dsv!D|_;l_9`-pkYbW-J&y{dvrs-#@w_8Bp}1hL zx3NejeTb*TTMMU$K~oxWAzE&ENwh-?xp*C z58{%y5T5z$m=oX2SWGL<*(TU=>uUes&b^dZi|<#3DYQ4XLRtil$zgsn7T?Gx!THf> z#H#HRiSR%l<6)!SddAcf6l%0d*TTH)xJBuk&b{yb`;l6)|+ zc{RAlJ^DLHaSdvegsq($i}vA zr#9!?KcDibR#UaiA24aQD7{9@FZj*@{~Z#O+kycIM!EBE`o6jK_M_jw(5PihM8l!~ zI>XeCPWhvQuhUoJsGGNX*VNdDI204Ze|t&!Rz+Q%hS3+vIMc|Tv<5i~oU-~1aQft?sw^aqkPI??U7`*R?id$HR~Q?VYDTB%aa+`i3a7n30`3w#o+nw4KDH>SYO( zDJZ`H(L$83*|(zEyLaq9`yYqE)t%M&t&ttcOBXxu;BO}JBI~EqQ}Bc-uWewHFhwxdRV1Gk>OM87)cqY(yF@$SS=8+w6FiX4jE#>WVe2Nobz|@ z=B4b~8ocnorzE1Cd^et--anY}OzSjQP=k+ssI?1Z-yh^IeokIfyO8!vRtp_4Sf=| z8ikpSG8q!?YU_41PLf@WJ;0RX=+3>r&G)YTRbzz&`bk*uCbTMWKl|SI{>E;*b6H0K zkq=>6hOn$F2rxAoDPz8oQ~~%VySkk?G6FwL@a*Ii6~DE^)^+CSDlIi$K78|h^x~T{ z_k8;QwF+9*=p!+*%NaB-ixie&uZ;-9>mc<6WX_}#VVPpP;{abGeeF+w>LmvSQiee4 z5y&(?l11zAkphE=carQ9N$fmXWHS9v>p=_{i39H2NT>yrjCSs8P))Yen|4jRI0gL1sXTH2xvQfE$?tc}_9O zo+L#Po#f?R-Q*J^vG)ig(nz)hSqPZbDA!2IV*Nw5v5eW3HA=~O7)0`I8_DMdqa?Mq zQ6?oXAuHe5)@>)RBDwm=assE1)PcavpYE|-_~m@yMs%6JyPP5Uz?Sbq)|3=^kU2&h zBg;i68*MpfvLTnH9pr1d9D}@3vy28NuWMYs=kh`RSWZJedEZavAgTW3ndJr~^I2}n zW$_7_U|CzTTvM5hr1JjHQzdgC%R?quPQ3hwEHl(dBHMmC8kh4R4>IvjMO-AH4pyh|~Q{~Bj{ZB2(D*bdb^1Jv)^8Ww1 z>i=X&CSFeRf8BySLmp&a%Nde6EZ6iO$N#yie>utW(f`xm|G$0={6BZUv+CTc|BG3% znmq4x*sPA#6YVGBuiuL%W!yVdC+e8m`rd}Kfz%|QYb$L_A2aUk%Eif)U-txde|TyK zgT2k~FhI>)E-d~!zb|bS?{6+_r{k@$*9!i0Usl2tC1IBJjK<&0)qcEc<6rNeFUhO= z1kSi|aeEb!m<2N(^NT&C}w z==qU%qS^Q6c8w*64_;;T<}lv#&I%q& z_a5Y#f6M*wq$Vy%(2s_tMn(2X)>8g#`t6+F^I?K-GkbnOPXTX!F5llaH3OV!uZ09# z7-Mu-a}bw74ly?J&JDY`{1 ze52Fbe8o1oz{{-4d?$(c_?^y+sx2h{Ry{HApSasRCS4~N?(7)`fl03>Bq)$HFZDPl zCa&>H0LIUobq6NxKqJJ2*rMGJA`@4oWZxuep0^E*k3SR?0xX6zx%8rQ45(9;oPwp1 zk><;nA*`xcw)ve_^Rr{`>tY(3*U6J+N3OTt21>btlI6ksF-N{gsZ#x zXpEprnp5Baj^{>C;kx}0U_!~=m#nL+NRe$!mf!Wfz1b{Yrz3Za=RwE)p2r25*&!f} zSm(g-#v)JyQIV+iP8YbU(;>WFbSH2feO9E=WuQPY*WJ}URlW}F;>aU$7Ge%0);4fp zs(T*XIW(-RE5u(2RJnHq^6QLMLM$i9<=*q!U7AzLOA{#gEOEZcXw1AnREi< zWMySJ#!3PX^Yx+c4&=UT3ZMb6@2o!)uo}p5#NoIP&P+FyRKOHJm~bDpCN`Av!L(?p z?LqTb4Irh4&g9G=KMgFa_vrTdkzorh+|e5&sK5Zsun)apzNP~WlAts^*nI{#ODZdn zDQE~xTt5`5%B_h4C=wYWI#R1mY96Tv@zeUiNNHuAhe>}9dQSH~)|KRq0wg?fmk8t* zg9d+q?swcd20}VrjfWSu0q+^-MqMQ%WZ}~t;~k@NIZ)D(_$7PG39zz0R~+El9bgd* zls42yDS**4dDkARs|1n}Rb;S(m;$ABb^dAk;yAc|_@S;!;)hHDAA>~Dsx*KxjSO`y znu8{dkjJ3FVW*{ah$+`#FzJHfbQpa?SsCDtMO=ir{P-(bI~myse+Fer$L zKDjs&+LJ;$YxB8bXRA#BD(f;vxIX)=rN<>qDM0yLuz2K>GqtWt1U%Bnjk|zSZIWRO znB>9FfyN&jin0TgIa4Iq5lN7$5U{}Lz5dc?w{#$P8+|utqPq!>GDI{p9-!P@TukcD47l0lKcD+)oudE%v*1k9vcI4}wdx=bC)E<)DrcOm_4> zBb`l(b88U(;xjO8^yO9-ajAgm8*FWcbyYwCF~bv+M|;5P1EtIW*ERuMmZ6d@74Skc z>F3yFoT}FWMNklVU~BS&>dHE9D0$KftcRx>innukV18m~+!w3S0hE$G(KTnGfcoMx z2A^~bG+Es&m7J7xf}uhCq4T9AqM3`Vo#?)#^HtT&M?QmUWs>M;2;rRrc1c7VyjwlAwH-{S#_ zqy60F7jp`MjtXy^yLni8dgJZlR5CP*g%P$5 zP6|{cxjMAjKYyRNYSN^L$sK>E&t&&42-HXj0**_whdm7mbry1(6>*p*DHgRxh4G-U z*VOJSB-!Z{I#}$wY`IpU%L5_Fr1i$Jk!m0~pk#8F2Cth=Qu8(05E?ac!d9;^lYFBn z+@UtBakLPWmP7od!8ro>a)lKVjHLB0E%r_o2_;+;Ddmk!48_Png97DEPTVkpesykr zfJw812gLh{`%8pW65`}{SjIACpqz&VT=SQV;F?bN9-r^EgHEDfzNNv9k^bQGgFRzX zxe2A9(dbgwh$&MjB_+L4hG}lnBTtd=U<)@g*=mRRMHT@|90=d-8U+m-Fs3l#n=@G* zY`L08flY4zykkU`qO?c_aCGvr{U(r9D=A#x{AtVKegR8`sreSS?^5TKtXK)e3SYFH zm{gc*)hIWE;kyjx6Z1+}Q?lnxwE2!`0VYOFEN+xOZd*{9a`+Tdw;MTY@?ioE%;(ZA z-b+1KDX~(ii5I1X&0Y=DQqD}kAphM~(@o_@aw1EQTH?C8;RTIcXu$&EPIJFF!92zU_4WrE0Y(}Op&GIE;UOWG+_`u($zaHv1pV60m7X(f!>PLI<<`FHjyp6pk!iv zlY~o)YxAjD78PG0V9;CJ!0j5Hk}hG0EO90qg;bWwNUQrp}%zg`CIbS@_7j$qp~bEh$1N5*cqD1$D8?loHrKXgS(FO(|oNeguf$+C4?; zwJb6rf_RTQ7AzjMlw{^d@0xn1Rcs!L!4}kO>VhdUmW8Q8qIcVdFbg$bCP(S?L!fi za;1r5wk@D)5?Ug~;Ki;J+*pfDBISw5$PFNYRS5~z^oVKx_^_00WQqmj1v1k4tkoSrS)6tQSn_sIEx_9lr+qy*y0>G3dhnPhs< zi?&`?NI||fq%yV3LCvy zAlW}lnAtqF3B`Ef$had2_M~!omDv%8rL8*z7f6Kyz=+&9`ne`o24otp*G?RZ0a!kk zlJDp~Z8?5k%#yHV5{oF(*&Pb0B|x|biQH{ERRlKFs5M-t{Sr9(2rYwi%H~YI36e4w z!{wUDkKI2=dQE{6iLek3KWzf`jT_6E#k>gUK7II>IFlj-h0*aA!cvk#zGDI@Ot-d! znLVZXDVYp%rq|>ZuB%Ac0NzS^U^;$HltXsif~fC#ZyzY!D21iFA|v2T)6IfXwV>F7 zl6{OVIHd-{jd}A+mkwV6+t#ts3i@J~<%~7NRAT}K83`i3cYrTc09gs+c@#WLG(l=6 zmPhx;0pq86u?5+c3{%9{Ho>OIc%~qa9$n*f2`u+iO0^&wv01EvD7ludhQOrtP|u!N z71ctHPyWu%D+tgjD3nO#g~I@pCpN@rc;RMW3-Li9wYUnDr}vG6ZVlCfk&$df?yh5C zprBd>Gb26_K4fMm)T=c>>>s$>IhMZx6idr9d=o?$$i&o;aJ$cIn(gW5%OnU2e2!@A zrC62@sO6Z?7uSBWnHO7GsZ(Zj1ETw}I1|RC77=IhSTD>{1Cr}(_dRI!099$3Ohpeb zfn)vZ*dkd8ANVFuAA2NO7cwDaFpDrrI|iC^RKS=Yc>pe7RFqW6j##U1WY3PFQPEpm;T!hi~=YPP82(@nm15=X$N@Il7Bvk6?x zZvf00s>7Ld+yo>mE7kJshzr~w8dD^eYbs1pdbB;PBoi|eHpe^e5Fdd2s$C4ZduS1K z9!FGF`RgRWx%9K)Q@ehwvq+0X>Gam_X)>M#U(Iu!yaZa_FWjgc5NrbR?$ez=1R4r} zswU#Hb+|<)v;dPb7>q8^z8cMB$;3WWbiUiAWWx{;ydJq?y8bl^N(xg7qLblXU`Jzg znHsSh%(om~;IEVOfhuAfZ!(v&K|Vi*5p~{e1sC}_MJZ~A6C`!Dv#1T_6(DQMce?4O zBn4>l^L-P~nhpbU#s_0igkf3gwDZ_9nH)su^tMiqKxa~6FoQAS@Bp!}QlcU^pg>Ez z94i#VTnh@lIM@eMRY0X-WY9@i84&1lw(uF=y8!eQ#1_lTlE9q#Xy+4+0Fpf+7}XiSO)&DEV@^g%2aP8|R~PQv$gR zNB8!+!2TJvMwdR+Z0WR)@dXqnWzeuKwOXuhhI z>qMlhrq%IKj0G)B3CfQ*cOc-~8fgP}06T4IJr$9W;mJkd#h1a^g4_9WO9`Jl(rWea zfIO;H1fgdHIHbB)%PtmiOwjzqs7NDVS=9XK^Rs6eQ$U_snc=gxbb==taskR86ZCU_xSiGMJ|CRzl2&OuSf=7AGo|aLrNuQDFG<1r#~A!lE{h?3Wr=O4?(Ks^^B!&&Xh`RAiq$rSq>wyPDeSw`G`c$kG#iTJ z?XF|MAynS>%i*N{o}N!?|;->4lz`j+f)M6pkpCTy0E|ljI5s-jjZqML5(CD@)Pr! zU~YptQ|WNuw{*BktBIl%S(u`(b{Jw(z&eqex_GQD1N^8f!d%>VG6c|uh`b;{N=%HjU{_zl zKM}@vbYzUb;&3(_9J}%5VovFnEa2llJv30~Cxhlxh>{#F^W-{-bUJq1FqQAlG0qu&FO*)!>o5d(G0ydNC#G=ygD`7gpEPM#^)Ka)^gm#yFcVnWrPqpMH01fd(YYa$BOgoz@2 zdUJn1;HhQoc>m+;z!+Q~Q@I+BSdjI-L#SOLw-hl0$c?U0mW2(oln|QUX6n`4k|>xy zzlrIbd=xL{$C$|V;rNsNy9P`cOUh*+ownv5w-%M8Y!Aem)=Z9yDP-_U;0R=aW2tcp z6CXo8&~ytAh6(orcVrc4tW6>Lx)gHtuiXlPjAD!`c1vHfSkEHUWMn(C@NlO!h5@4{Ar@sg zY#yMy+jB5!=Lt`IJz+aj02&TUS()kB|(* z&MAfrWfxd@4AMlvNUCZuh7Zv$53`%M=g3pk0^!drM?2st8EI8pAVz0b2x2oWEHw{u z7@bl}kTknxBH9g8?<28{!RJR!Xr%p|09KNA3fC8y=p{`m7LP5*IJ3vVn2y{)-k{7f zG0xayq-+st!C;tUYJ)=-skBH+_m6jgZ+GW#Nh<#{(_A-01B*%QgNo_C)Ouc;X+n@} z1{5XjBHf zfz=AQLK!|pfaZ;La*43OYk{60J5Ehdvw=FW;y-)1du!euYM^dJei~&Ap{12QUk1?6}4+4@*Gx7FNO18PeFd3*{Pq=C(m_ z=!W%TVQvmN>Mhy4XL^OXx=E?_=md!*7xgrK1F*!a<*En7gb zP@2@{u(g9n)w#RnswF$Z0T+u0A=a|b^d*0FK8cpq^T$<=74dlz0;?wt~eys&~2S< zmsg@I{$CF7Ma%nBjR6M347um}N~#31mZzdVSSpRWx}!8cgIeni823HMDWW#~C$oEQ zvX+b?%UIFWomKNlu?U zy+LK?21U%9?Yr9(@~pvm%IS*5iT~c^qEp+`D9;~lg2rTDaaY%)e#n<;zJBA0LTvHq z+UJHBl5X!=>}Y2}MJ^vDncwnhP5)l&qw@atDIeXFTtvbgzb#Q)6+YLtHZsTwDt~+&p^Xbs2yhTyQd|BxYNDU^_#nd+4OcNH%Km@ z9a-Dnn^N|mx!lh`?Vm~OdYs?GY9~EoDHtpnY@e!#4=T9F4a`Z;pdC>k=?w?3}*amF|;nQNzCnBgY=_OzWlw-3tp1&xoCvoi;B zmM;CF&F0FjnQ*N%zuUy7$m7o!wG2rgOqVT%WM6PDn-fUjGW&ESJgmvHyJhA*mlN@` zt5r}t&$>_;9dc64QtNbX+Azh`a%*>pGtC&FwOlQ;==9)LMGG6Xc{G~`6Iu#+){)9A z;%l>fLk%$&7@0Cd;f0#W4Orfi<(jUaTPXCKpN?jf?3FwUw1Mx#q zEZIEDmQJ}GtP1np&#FW|iXvbm^`ENi$g;3d;n#*+o?gfrzpee zX<4njmpzig>26t|O6+Wrb+jcr(&1LiUpQ+PP_jve!4Z3M={nB-@n~d9(Th$qZ}rqlt5hbus|Kxw52}J zY@IIPlHss1((y39>59yMzvX0Z4LBE}h>W-Q(CR7PR%^?QF3HHwiA)-A>e6o2b+UhE zK9?imMr}ca=#$+D(Sl3I2{c~*(%}l_bW7B|P?S6*)R>dInS~L$m-HcZCDw7AQ%>TB zQMX$(!G4iA6e>BeW;8pwg+a;ouiiPtH;TN{Av)Eq3~r5Q54Md`g9E zY(m8=E?f&XsEvyFz7@Xq5vg%#p=S1+7!wmMpX>OYy`@RS2+ESi*)w+&9jj%`X(SSF z_Ohfj`y(~iZ0((9amfzH+&z`c^GiixGslxFa=67JV@5P)@my~GY2&deh!aWR#~X<$ zX#u;OQ@oWs~u?N0gB$A)f2K%AX%AF%~iy z)(gc2AtE-pJ4F`7Fk(&fW75wsW8Qdjni-I;wIPI*IWdA1GKP%o-A+0eJ9avQ6X z;}|AVl+mE$SVZ!Xry*OgXm)fEF?C&Su_ftrqAV|Mgev2aj>cFRE{yLSCRBOcw8@Fy z6k}N$Dy640f<{W|wyq0ID8uO1WIMTeBU2wy1vlDfDl)Dcn`2AHKaSy?)hEi2-#Wl4 zx?}Wm{To>iX?EidWJj%D=E#TuKGOB^wt&+$t4OQJYl2 z{Ws;lH8W|hl`})`mA}cdnwh3mZTT@pg;eI0DP4`3u|&P@hc%mrIuo2PU& zk_asdaYs@l7f^2a!V7vvagmp9kP0#7k-0@*clcj$A$hn+u#dd5&Fg269u=gMg%ph4ABLpH<$LikJNlB@bZ_BIrYax z7HA%y_mGZ7-Yz_6M4@<$lo}NVRdq0lxHM#8@BZDRcRxXn?748wvIR^2PPK^Ev?qay~f(BSVIn}W^NanY6>h#0cEv|Ca8kQwc`CJ z7-*w{*9co5Sn7DbP}S4Y-F$jN!}^B#+TNiEJ6izi+om2B4?7j4X1n!*%9tUR>TMjM zqY<~gppoE?t>!J|75IFvzN0xMF(6w1-4fa5RcNOwSvGPazRBo^ z%%XOx)20h@H&q=zZf3*__atQGqP0e^u&RH+Cf!BVRxml8?T1$^bQV&gVke&uc3Ktq z(oe1xyPI^ev=3DM&9rr8u&hNQ%6R0dfRHwk(ksO!RD``I~($1xP7T*no7<%9yCrr+o6r zJyp24(cKSI^x!fK5$#2b8vXhLjo~;WY+Z(D1va}8f_8s^d48-Hq`U#0VAgMETDG1F z?7?MNP8RITLY^xR{B4BQ&uDaSZs(T>;gJ4=mgj(f~57Lua~&4>S#)w@5(WDGu; zFQWOTuCYEL$FKReQomyPG;s`50=}_i8HRQ-Tu<)(ilw@rTt9Bpda@89MJSj?gt3gi z@>a>;Cuu7gh0e7f^IZozSlLL?ldYLwTNi3D-FT-OlxN1NZK5tWudJjD26jjH>4v

}88KzbXTU`%%USk>c;BFb7 z`RiwvOXFu}ihAjv3}q|WfeT4=V~y-`^)vTrC$MCc2WTJX-HeQJWs@!_m-n-N(liBG3wN-4xbk46YliH1{jSEtEhjS+?}=Jyyf(gI zRAuzajo~d%*xoeKFZ=q}Evy|}Fe&!oUfm3d-`jt5+DY44Vfnh?4KdtJM&h+2{`AB|X#((LUn~O!Qh6M%$E2^)d z)qhwv%SBSt1Jdq{-N6bZ0=lu7K~-9eo~xmp&-mkO`O8gL+nJ1iYUD0PHT_`)fj6;+ zD(bj8!|(aCxg8|?Q>+O-;?0af_$aIOY{_%-A}Nq{U(7&fclY-fDu@a!34u(^aJ}|h zcm4O7l!S~Aj7@dM>UkD(24Vd}zjJ>^kM?hP1DpXP<9w6xg17v%BwdrGai<0P;nMNl z-AK^|d1J=8Kjmt5?Ghv7)AOC?kyeq3=|-8`U*8pK7#X49nVSOZKN>SMPE9RRmynw* zy2At6R+~*y#>%Gte~f>hZfC(FIGWQQ3zi9|emIH1;q<;`J-?EXt(y4rp9Bkp**RB- z)XZvf6f&PvIjtT0C3}T~v^UoOo!6F3L^o%lbNS2n=vTNyi?dy!pmD)z{ ztb*o*FAEh41Y*1TYn_50*K`)weqw2UC4Raw%GAwhLM~}dy;+#bxNZ;;fj-|QWmP<{ zHPn3RqReRCos51sBgn{LY`3ex88X3)U$6{spAE*w*UP^Oj$Hfg9Vw$ba5&5`)JLDC zP%8U|ykC7{$#LOG|Cv%K0~bZWkMy}dXT9pu>>zhes9C3fM077M`%Px_V6r>>Oj}SH z9ifIT^jeBLt7Ean)vX7@$0Cus01k)S&I+wPYx6TA6Op0P_jZ3SIi+AB@w&UefpxxF znDb38zck|dVsGo2KdG#=IF>Q-l`H<5iIkK9S5^Ev4wXM-)wuuDJ!-(x%9yE@PYj$@ z_8FgT3}V`XFTB9@a)Yevc3fnF^H_<}R^+nNULRI#?b$~pv>uI&=CYnT194;1=~3h3_DU+1#==c@7t%2; zEeSW)%wRgd|DOMP;isbSxIapDzy6hBjw9(Iidi$yTUzV0PC+cpqVFkuI8MqcMEq(= z?E`%>e5tMNg%cY{);YQ%%?cVl`L$n8rCttBFFOHw^5m~v&BD2_3rHVGqX%`$;Nt3k zYqa6cF9dt*!Wwbv=da=JivJ|7mLd`?a+~l7+$lu@^2~SgwMSE1GOV^AK07L%|KaNl z=68l){D{n9S()9x{vXETWO}hYYfawRxWGa~dwmgTJTd{;n#|4qoRQ3GJ-5{R+|YNC zrR+Q9d(i46G2Qz9h^3_g+^?bB!cwEoxV=gceJV>SaQbAOQ1Jcs|0W|5C(l~{Tig%B zLtpCue~=M?Z8^MQtLlvbUY2J!U^kVAz(FnIrb06w0X{=f)kcmqEO5txT#|JIwGWig z_88(8(T3tSl>kpz4BHAk%>Dd7V>PW#^h3sy>lbDZ^`AVEZV*uLPwDFX)|fJ#P3e>UGpEvCXPi+2OO@zBJcM=@^mLitEnXn{i{G*y;6y%4%%_Jm5>v>f zIi*?|AYKNY$J`8n_zi`)*?O^7@8vQPq9d5aahnUSAgMQ^8XYyHB`V7)HD=7}d<$w& z#1V%*O?dGlUj6nP&<-P(Zo8VkAc?jDW%$jWw7C{4C|9VKqT7^Ys4GblVBWLM0vdN2 zjg~j%iy@_>5o+hF0I@i7qN|u2@|gtn9BqlJvO~9v%g1p%|6h*xU|-F7Xej z9y;6or9aSn6!N{epLq+4=|ZcNu6h$7S%cI_f(-z%Y6+1z!DL%RuZO&LE9YDA*3D<5@z0oBXk z`MA1Q$Dz4Zp9w;@F%^72ZoP=xoGbz^Ofl8UTVB~vR}7{fqp)3vq_HD7geH0x8emFW zC<_02QL3UeO0{hZ8U&&@7cs`hAHj)K31Lj(+6GRCt9vM@q${GYpjNs?N_8;cb^4Nx zB>v77(8IZrp~M-0V4$9KiHIL*fewsL(#I8@0T6L8h6t-nm_UwzJ7G~F_XJK|(241A zzIse#;TkFQl3h$TZ~@yjD4iwK7FN2rQsG(X_8;v`yCE}lyP4lY1y(*wK+ z6wwfDTZPdsYov>4hW^Zm+36~Sl>Y0zky!jFv=s0X?Iu@X#AaL7(cYU;fH=#tg=X+O zb_p^e2)!^G*|H%-AMQ{A$p&Zh7rLy8 zklWKZT)WZ1UeOLMQ*lpvRTd;2wRbv`LR^HLyMsUX*jg@$7N$diw?EVvizT*8m527o z6UDgx?@RMG)w&|__POWL*lRi9rZRH2Ca(hts*T;=Pp5P&f(S(<%zQ3e0x4QP)gDx# z3Do32g!XvTCQStyTF-q-D%NIzYMZ(K^x57hP;Nauk@jMlDmEVLj;+*A z>I4_8#rD2crs0s%Y21IV=cjteMmj8Dc+JNnp+}CXjXY?5JTcOXXewe zP4sb@aU;63JWu?BW`WXPds76`7mzBQ%qujJ{LQ{cr>~}wz%YQ?6^N+{0nM8!QX7lX zV<4;)Ag8T8&xM+dDSe66an9ntXujS0WOSQ&`e2j)#?qNeu*#UQ#AxvH72DBy(c*0s zAvBdFA*+^BD>sp_70aGj(d(7S1~<#` z6v+HWjBLpljECO$#>}C8p65VAt-0;C`bu}uq9jg*#Eu3-Pqv3jjGQKu#5Z#1rO}NJ zgW>`A&l9J4(Zf(@ym?I&Xlw~qnuRqQVYPh0yCF_|@}`L+G?mge9Rc{aLo3;Lw$W?+ z2E~WB)aJJ@AE*H*(_RcDfv!W~RLX6ga4BgHT+O`fK^e6cgAV(+9=;%xFY>--zqd61 zWe^yrcjoxu65QfVIP>4fQwJBc!C28$QTq}d0;6B7M!qz`OhCJ9<90mq?{F6nqbpw? z+BI$i$sV1%vz*i!0PX_fx7G%ZkfHgNQ%`qV^q4?{4q;ib&OkD_K9yWKmDT7EJ&QFc zJ<&Er0Y^*@Uf%E6jRWV+_LRgKfc{`-$kzLTdaV%DbUou#^awy57$GcmJiZD|B*Zlj?;x9yUGGpkgfTvlB$)gYAEQV4)y8wurs3n z_K?52dHg~kWV604EcuuW1WnD~9KEZRRRxtaqz`u=o_PZ$JSST`ym6Zbl2zJ{CCBEv zLH}XTtu3*iTfxYtfT7-e(Fzz2lGg{aD@{R{u7Gx(th=V5Zw<5FF8odiXfZ|=+wUtm z1ghXSUSHJ2f*ZXD%hG3S(xI38KWa0CW(nXO8_Zb1yO|=enoQ_Uz3o7Uq%lKV%>NfN z3$^AvJ>0HHe+QQ4j-Z|S`?o+|&Y<1w+f#SJ-e|F{eoNYWX!ow#s0Q2c)6ns`KGz|y z9W~;kjV7VjODluKMt668SP382h4OEET1x%5{teyZ+EBU<-QEFF8ti;-7TxmzW8O`N zHv7%>i$DBbdhbheW!GjqaAcIpEs! z=%Fd6<}`6@;FiBK`EkSGyEjGE?&`5rsO0!yzs-=@PVjCprNLuX+XtG6c|XkpqUWK$ z^ou(zdu+BsZ%rsG-c2@^tzhO=nAS0PeHr?^?EilHR9PxCGLd?Fw_~?EG&h}jI@l5ngxVaO8sc`< z7D0{nmd}p7S2Dr*$)qbm&RqdeL;T0S)c2o4!D>%T!;!5}64Yn&;nV3;>1xr^sp21R z&A5r6zLG2PPW;0kq3MKYL5^o{yoBk72XzyRgEm2FRHc_Uk7gk{&awZN=eg?!xZ(?V zm_JAz7AK9E`kXt|&yuA>bHCg4lhxkd zBmMs5DiLXT)#qV0Un$Oh8lIWoxr(w>@tf%+{Gp#MAwW!;Tc zq4DA^(7tQ_nlWb8VNs<&S?nz=h>ZPY=dOBhh<(SkdBxqwbu?a<8a06#2;4{;&n6ZA_Y;np_PbE1VW_LpHAp>B}qj79cG*ARp(k!(tTH#hPZVt2&Yy?R?!SK z0Q&R)@*X#*jR5YVne4}}vKs-{r=~d<9Kt~mv7kk7up!FDgz<<*_<63a!24D5%QyKK zJwQWPzo902VG+P-_KRNS!83wdn{#V5T{HzaX@ylz=UlWE_0SC`-0sn^VnY;WDy+$s z4$voel^!;~5)a78bG65}oJ|vSQY9uu7ejo3O~veV&aKv5pcCJ2mh|{j5zu5cYI5|V z7ac+%7s(rwR5c*Pj~w~%EZ9dd<-HQdHOajQ^kTF~A8+Qp1YpKmx4M}ku~18;z4j@K z|4JD3%)c#&^m3aZr`u(-|M0D40Tb&Yn@+jBB5)f;zYigCwgCZZO8Z29-9sQnu`mb! zJsPkvK(=oyygDfqzj1~NdCGJk9JJ~Qw7R?>u#|7&9JXJJ1JonP=CpSYV*rZ>gr(%l zv17ttnUbi^@$?sh(ntgzTY6#$c!?yTz3(|B08e2JzkS z-lJV=iRS^4ZP)`mvX$N`^4wgolemP{2t4vG8Sm4kya0YV{=ONfh`uEV`TlAkW#Fr` zfLYG1DQ6SsOCrX|j8894ju%JX3&d(jm`_lY5N*9_q|yeCuaz8A*$noIETl2(D_Dgw z=s&1*RU_0&!S3P{7G3@wM}!xGq8~e0{c#lVxx7EIlpwbkUOw{8nW%mLdrJnfjZ(gK{8>&Nn~OzboJv$$-quqdNqvdV<9+wnW8Sh z!S;Acm2t!ZS|th^X--x39&853qlWrYB#2GO#ynH)VM(^ zQ_H49DlkCIiyqV^wd*>Ao5qwXFQ;d2qH*f5{oZS_GVvI*{gB1=7z5F(P|2Y|&Ecnz zl-Wq57spwE-PZGPBxTBg#z~!V>$Pd~AV}@B^QrQ50>^L?nk6^RQWQIE6kdHy1&CAU zO`K{xH<}?DMoAgj7FG?#XvSR{y>7Vil`Rol^@(e$*5;tn$>z<*O24z;f& zbr=(RBf(iXXdkDH`HQ4!L;YDzwlZ;V&wT^k(@;c*9YyS6uq3u>b=!EAIpPN5=2qad zgeVnbTa&BY8J%{JRj>ctcyxy`NEoGAJ`31XfCM>hqd7nZzv&5>>-C>s5)7K{yL{xk zv#Daat3kiN(1Zx+Pi0;VIe6J!B=r;1C>=CMaKV_+7)Fn?}pbP&pWZ&ie&H#_z5VGUyem$Ut(iFdT z_Sh`Y;|#{VE6;xqj8mG^9z%JRz=ZRJ-{Vg?w*h19Qp9aozDMA`VXOb(#EVuz>agAC ze^Nz%3yL~m)Ft=UCm?SWsek|YyXQc_JbJw~?{O=TDn`vtr96HkFt3U13^G4+yspm6 zLP6s=umpp>%$n%6fn1?5Sbr(8(Q~ixY?=%i&Oh=Qm~E!YZQi}g6I6M4_tT$w?GbR} zRZ3^jbEn{3x(q?-I`&aeo;JVa+>&1@7*8A0GMMsfs|()Mm2=-_b3}M-d%w}BiFvay ze{hK`@!xn=mo+z#pmA^4s*Abo7T$_eO#>d`4M;i75Gu4F zs?r~4NL0@V5}v{BG_DPCb&cb+;c1J>#5$EC?P>I=iY!dM(bA2?P6t z&02JL&e>?n>t^yV`u8FI1nqWo3DQOBEL22y$pZkYO3-8LbDxU9tLu=F^#KHApB$(T zA`GKkkox7ixi23bs?Mwj7HJkdYlKF^dw!yhm&%aM^8U`g00wU^bd(2e=?rmhLjGB0 zFuzhHv_{Y$ho5nvmyzg3<;*+UF@t?r`^WsAv>i34(f#G~b7ntwjT;kr)C(ptLygv` zs*fHl5X^ga^6`Thg>d!zWeKkh^xDl=xDj~mWqCtqN(d_x$Sz(;m>FDMgb(Y)7BRb@Ob!*%O}>jG%Rmv z%Z=k7N`hy3Mxy>>?|#aa2nh;fRZq^4s{pa6HcuhA^DEbXM!# zEubh}_Le}DfVk+|Zki-E7H%#RY63U9Q-vcYo6?xi6OjU}g5DUf57O#7Yzzi68&(e1 ziDSh!jCQ*O0UWfB!O3Bga2&O%6?P_Wv#vRE-eJo)?Tb1nlAk-@lHLx8jnw1OqN%L9 z0Mh+{!I>nXaFqf^zu)G1SLg|^Dwz(xM1V{jvl&|U7YdABx|ze;5e-7m>TNRVX~XjZ zcLTgjmz~r7I=aMd(=eyXR1hU!qSOX#^a?5SF`ZhzT_(bP%}Ma#*byvL^^&{D-e4-= zFH>Mzq6Yf}PNQyce9sT6YuEN|F@3L{1VnTitCs0c?FB=9NnP$6Qt4=L3uZ3~WXLIIf_I3iL>2rO~U4b72!Su3#&4KW0Vf>5bNMZV1FR+?aWsB)e z;s_3}^+k*A%xi!Ur+a~O%RXEHh9F{xOf31p{91;1H7*uHh&N)^a6I4ocPengfY)A&K`T; zpTv(7-1cH!J-pt38W0WS-q!K1@drdRMVCA+n^S-%x<6d?uxL#JE``7YeC|&KuI}G? z=GglcUvL!O@BK$m1fcZzyFYSY=$Hc!@*ls+xnrjXKsmQ&j$Wb70+ZPnyb_87W`XI1 z%OQKpVqXIGK39)yKbKMu*u!?bgM&K2bIZB>Iw-qZL;+Gq`XYx-p@=RMXCQE12?V^J zIejt234miHzXnrcX8;h%@!C~@c-#iH7s8z&RzOlcp~YUhj))r#asT;h&qpe=`J5L^jx3 z_WBQr;XuL{{@ws+>f7WF``7@*3@MWuJvREpl!myCex}$??88f&n_>*xi_BYM#LJ0| zaS*-H!=NQfYzH|v19%zY>wwH;NS7G?gVcIuIJtQlz1=x1Mn*6wi!I| zJ77BNlGmB~pV1rPFG=(36rZw0Qvj;Fv53f>gmiQjeYcpY#*?e%oxRoKDW)E8! z9QIy2CYs5*3`}L-4c5D#_X2hhb{w`taO^#7e8`vg0f(Ir(q6A-UV;2Zv?w5aSAj#b zP|Cmd3$m{4-!8~~p$nwd>G<4>UlRa1Pq+D$9eOt)_@Xvlq{}La2a@gve}10w5_XV# z=>23A$G#4}NP@iE4hI0enwS@>q1-rN{dw|Jd+%ql0KC;yd05;}6O_d1wd7Vh_y8}r z`If~EPDIwNCS5r(BuIS$R0Xd$N4Kqn3I?*;&AfSs+62py_dIt!Ol=ovCvxN0dsANu z^Vi-cRogoPf?)IJ*!S8ITtVDMYf9TT-zGuO=YcGtz0-Z+!Rlc1@|ZRqz(c<|rcImP zDD-JM)V7>e?EwVBsge+0@j!I@a(IJ>eha`9Yx(kH=f;KW%SqKC}>R@HO4jv%<)QM=KjsLxAID2-*4Mhc4AGSMF-vH(XK+E z55~UWwL8Qc$gH;gT#<8&2j3VPjE!F?Kk@O;Ozz<=*LYs$&-`E7@4L#||HXY~y~Fkr z-r=?9;ryU2XL8!difhh4lUI*EMp z(DFgvC3~MT>WFqI?@F+KldIUof>#`;2f#bY=c;te(qqC^r!HPi+KWEtZt{on5Jz6j z=0sQ{Z~EXBlv6YFDbJpM$5wxgey=>{V_%MtCL1eHf1(}9w^2<#-qmqJ+!I|N&x?Iu z6D>wzTFQNeUXC?x5-pzJV=bl-rJ5+WXgajf;@=U-qyIY(NiuY~UTgXb6PE?|^7X%q zs+SJ}0aexUdSKf6)Pcv%0s0T~@3=cZ2IJZWQn+Lv-r!VH70R~@#}jKi*Bd*7E>$yx zd7V%opp(}@(|Z;$ufXy;0|#r|=Ef}_$I6;h=O&JVkL`xX(w}%BYO9PlCW^!+#BSbr z*j*D!18TS`sngi?jLuFp&j{0Krw0<%Rn!r)oh^QtiE{Fgov&nt()`%FHwh!~7u!DG zGz=JimDR}LA={OVdK6>yX85%uqOKF~Rv(WladT#lJw~wB38}+#Q%)^);pW#}i~Vq) zhk>D2ct#+rT5%e6T)j4;T!W%C9vbPk;bD7xtBqZRM!ZdwL8FOPwJQ&+-!|*FNa%pwJmC*G36R-5Khvf40w%(T{f0tJ4;@- zMrv)q58N!r8{+Uo+b9b+QQ_l>R}cGEm6rKJmbd$IZ{195!KuI_+kYyRA`zGi`z`L= zHLeb5i}xW5rpPkK5tlRxajh9 znQ^ltc-~|1`Qf!&4q@deVNm#moBy~jB0kRKUA!BDY4P2F4THtT$6R_`u@B1KDT_q8 ziF0FlAa)VCK+|u&%bcB}Kv_>5ZtmYv?lX}*^fS+xAU9kzGI(|~`)T+RgL-lQ&4aT@ z)RfD`<2PO2>tId4XgE@uce{HtaMy)TH}$TCyJ;MMI&t?BGkL*C?C|YPabx@fsoEs< z=DWYhM0KZocImrf1YRZjGyATwmX(y)A5~WR0`y-rC^M$sZOtvCEATGsw{$~W)kcfd zvNKndkz!eQ`rw%=E#JnuDbn1TX8|yHjKmF|>838q7U7=OGf0G5s(~Ncok8OMCDt?4 zoJIcI#sk0DTL9z#hh>g~81Ax-CJsqB=xG1pk>vnpg|$j3v2}I&%*oC{o;|zF{E@qN zbNZ8;YMltP*=Qc~4j&)pbjaQOiKETS9RGv*-Bb2>6=$9pXd`b}h~lO)7C>~6wVcyv z9d(pq@Y_tK%b03c%v2464>Q71`{$LP_?te+8!iW-`HI1xCn+SE>Uf3cGC{6Yl)1>i zPBy-7?mdIAV2n#-`#o^*OucI z4Q{TI&Bbled`l`2O}(LVu5@48srVB^wXVGH*kL%no)+07L?3Cg$ncWfLWBH zv9(ao)KcM4)repMQRaQ5^~R9y#^_OWLU-fJ=CaW&)urW68w!uGp~V>C=aqPU_mjGn2Kn+cE$X{i5{HO8MlgWm7|q*C{1BS$4nC1J{G!>n2W4J^-4!8*=Z^)-aR;6w9-A>L8j{=p%30X9rB-6^MvIZ#M!z&!(4>G0-=2z<(+cA?lc3RxD1!$n z*yXu~3Yr>6IinShu9VAirQ<%`rkvf&$_vMhuASr#|8*M6bbgRm#0|>JhF40Yu{+7Q`cRCmhR%j!8j?Xur>S@#(vc`91VgIPG z)}JYQZ?B%<7nZpHXNLSFumT}Ww7Wyg=F0Oubp>;;^U9OXSr`7s){2oGP?Re@BE;$ zj4)LFLLOhyg(ptCnj__WMbiBVM>Ki%fw1#&Z!E%{RPl)^L(MCq8~G@MX~rx~-cy;= zIO)?%+q%RjHv|%RNt-i#-+8+^Qfh+{-&f$aW0^P-R|x{AMs>WKwJQhx-MCERZxNOH zD+X5SO`3z1wZ>mfEPYN}s=&ZKC@G`~15RW}vCj{`CVj>JL-xVmn32rmOn+@GT{|>& zjhoms@I7gUL#{A3baMg8BrWdj@bM;OVzF(d_cCHO0MQ*;+0`FDrnQcAf8b{vuP>I} zMO3Z_84yy+P)94Iwh4fi$^=*Ol4{t>9D3zkVHh_*7El}T?E_<4gxR6>g<<~kmy6o# zQATBzNiMH^ELY`3wwK;(>NBl`5^lda7<-Nsd3^%m))inGz%k*(BH6`{oRwdg@&FlOxPz{Qg^WfEw$OR zm9g?}$E%a~6|@36Wu{;?Sd?`+hlv^XA$&&Zo30zNuw{ zj#_r_(OP5tMC^bSPP>Cp=~qi~`h&R3gRkC*doX@duB`mZSo^7;5$|+`%NZhkd*@8~ z_fd&8Mvg0}${{x-m@Ika!&Q6jz8_K&7|w2R4gWiRYYT=w96x-Q!Z%@YmCN(_W6uha z+-Yz5)NqntHP;va2i^NkjW0LuzGdP+OJ6N>yLROX8V^8A?82qKHd8NbHrwTY`9^z^vQ+ zh3HK-w697xlbqhp%?W2yX3d-o*d}dv+$9PhF55K8)MhS_hT`s(&RCG9u7;Fh;Jnfa#JOR`Uk>dc@e`s(bbXn z@Xdc~xHD_fHkXnSKXbD`zTHCz*{bH|^4x#;$yiU9>+&KNtj*y=-0#O7J}=oeTvk&FG-(w+yEmfXY-+!+`vj@L0EO&G3SF;ZuK{N2@@kiMT z@kiqaBj!BzILmH%I4B6oEkL~e%Gcy>IGfx+&?_PPe&RH29_KBde5lLar9{05M4d_I zi2pgcsk?@VXEWUMs!ftxnCuTX5N*aU@1}BFR(4FjV5-G6!#1vFFfrgMqb1 z5$uPyNB0}gdrYwxPj&Dd#{`erswHWr^&?y=*PZ`e%I{dGzu65I=*Bk80~Gg5?N)=l zzGtVn6aP43C)Xp~*-wWzxzS;*R4z7NqE3EboWOm6`fP`+_aEi9-E~g#sv@4 z@*7>&**{U=J#T-yf0Wz*{U3I_rzfk~o3B8$H;ri<>R)o&I%jDQCFl^A@DGuh~eQEqx}BF@t<43_GnNdUSCS*=JL~{cHRKH$>iE1Uxzgat3xFgX$xU&vA-; zVFGtE^(I?>yB^mhv25m`%x#`aBbUaCcTfJaCA_BcGzZmVfg4aqEOG9K`Sm*yW)?VM zt{oI+1$H-QnXvo#xu%@f3ZoRnI6<*ATd}EWBw_Cp2^HH&hBPEORmxr2{s~c+GIpJl zUH#A3*bote>sgwda3kDthHLpTx=WLNu9frcBzg-O4MwvMX_$t6^fo?6Msh7BFkTUg zznhUBJ#kd-tW3t1#+!@&qO%>WA%}1ziE|UHgUR_W4nDtYc5U7 zW2?n{rzd6la*j$|4_U4bLS2$wfGPP zbKHZboeAVeEEd}=D%`=Eq2Ryxq1KlB}cuw6UQ;zO3y4U+V>~S(CC2O zdc3rsQ}keYH`;F2ox8}*);#o?*JZoNOx21L?r~i20qb4b5}1#gSNq>HIvIcd#m1n6 z1M&luF>H6V{#^I4YJ~d`n_#@)LxVWZ2PUyU*w<`uiu$GB_f>3-=1x`nPu(oCe9LvD zn+;hMJv+z^{bg*2Jz+MF+uEAbHT4bNjPsgIE-iBUABAi1$$2EG3!lrqhCeWA^BKL! zZbNQfQoXDR=W0wPHh!H+B<`Q2%}JS4KodtD@f`8Z(wHUJqkofyp72Gnd)C!sLmSn_ z9E-$>&T#h|``9sWVp4PswpepoGzWg`-(fS(6(0Kg#wpC(18g^4r(twE#*+IB-dtBb zdrZn1%i^tki!yo7akFWRT6lQSfTN?g;MIg=KI4)T`|)$j2pK23sXJ4S-Z{>mq+mJ(I_r zQt7#Oa5X*^%I#$2Fz48FxKrrUS48foDkC>8!}1XusaHc7a)`!rGHXotjvEhoa8M1A za>3DsDUKe(Q|#i(i{ges1btJiz8jY(&FofqPtCBIG#Vij7`OTcwyI3AwF|ir!U1cK zF6vl}>97qJ-6}_9#U$>!HbI@=sfgsZXz%GYTBj+v)l7L`f@;-(gQK-YxYoK^aUT(O zc`V3m?sLa}lukIBz8&U<+teN6hcGEm#Yc`+J+a6Mgoa6@U$X^k=S2@Hl<8JVhTgKS?I&NZ(95y4^ zvD&H3R-&&BTQaEOEjTuHa=at^y27*}i}Nx42C>?gKRhk|Yq#Z0NmkBvwkvfxj%kcj zbECV)oO_JSaUA4GfFYQOo#uwiwdaX3&yZZgL+f1whQsk3a5U?|)c0droOK)9>LkMR zOt$59)%#T!t3&MOZD-tbs@Z#Ga^LwQ_L~7gOGk&!pV^f4+`2`6z(ryvao!%_D4T{-WR5gj zO4&=IO?+20@g^7R+4tixPEn5sz4#(|dirxYda0>x^$8CEK9SP=t^- zM{~jHFI`QBtjXs`j}>0QuK%rHJe1C}K6P$6qu2xeAqw4HBspJgG1|A~^|LB21J^^K zu5=TMZEmvQjDN5FrLNt~UwaB6kh?2-s*5`QoW-F`sc^cD-kI#Xi>?oGJGI?88@bnC z{b;DQg)PyZ$09D{7@U998zG|$Dc3lt!WOO1CdOhmQhmqTuq9l@UZo;~WXMznn+#V^ z8K7kK=iL_i3WYP-wDTdK{SQy%s?MILSfJ}}p=yZd6HC!WAtvTA9Oalds?RE7^8AI5 z&9y%e{wHUXX;M0M%8hdVRmb+craR^(=U){pEVu7J!ed9cOhpkUH#gYTIxcDrldYdIxK{nt4bufp8k?l?musa+@ofDi@-RZy7|GF0&m(CK^axJ5 zvE?LoS5OaU)U{^mhq1{GE_t;h0@)Hy=e!vSwSQnqtvD|*=x^FF@hO4BQnos~_RVFT z9{|H8m$!yb7Z(#eeo4p}Kowhhjef|lnfSi={@-8t**pnAaeJ7UehR@(RxHaear^$P z(N69PVvZ(+n_5kX<^270^OM4rBKYw8ERXue-NI6gaC+(E>C?@?<`N((MUg?qkI6o9+ zr*KwkCto_c^dJ%keL*SKkrS-XL>wJB@8|Rf?cjc*_)3k4h5jw6lvVOzOY zL_0n)vibis_U3U-T=CxjBmuRM9ne-G2?4ZKAR&NQWnWumU&OlLf`GLa7nUd@riwA9 z5mTiaAR@L=Spr50m7TCvgg^pFtw6{E+RBm*a08NOXz#thd++c0+rBV;TQ=RddUW&^(j0xW1t6;c1dLd0*x#nw3k*#c672fI(fJV@ zZ@xmp-(rz5(&F*3jz4;cnCaqF{G|k&SJsG|D+oZq803KRCe*wivxGG?(G!g|$9h&C z$I??Oh^N~8-`}947wx8g^zT>Ek3D?5-#&08AP*wkZoYDfWJ#|drijSi*JtSw!BDf9 zzh?K*`y|_m&$)|(^!{%nepLi)*3fq!d`byzZ(2tW0$*z1c=h!-y=^MRO_Yj$N3^#NdVqy%(aaAUMio>R^epqz`p=&ehBLJE z9^28plkm=sOrH#{&;B1yZJ}3_-v41cLTo71?^QiFBNJ!nc2;*154PD>M2FCFN%&myXFQ)M0WRrq)m+NJ*x{oFWe zagBC_L~rU3mr56)?pasEAy2ZxYRs}C;;(t)o;W3B)o_n_@XSM>WTDQkZ2ly3z?|;W zE3r{R-Ye)PideKf(q#?ZXJ*boioC74zEnB(H?yKnN!LC)Z@coWdIf#jHj0UJ$|cj^ zKj>FerP7o1@ik{3nSO|l$h(oCc>2|6!P9hYvRoHA9v4P$gUz_%8%Sf!R~rph(=N6T znLeZ;68yEoh8g=1>DxxyF_2khw%%h?)T~v`S=7DH&#y0wV2-zM4^u5Ayrb*A$x2G} zTLlw-s?D&svvUhwt9cJt$q%BhtBHY|GyFHl<~i>X&VKID)JaY=P+1FMWM)zrrAgutu?9A)mc66x5dQCoa>Kts)Y3SY;c{wIkVXuE)=S>$( zd0Q!+ZJ*OA2VQAy9H2AIeS@ z9)`fe6%Kh*WSl4xG3c46UW3p?^$`;?2R*VcrhM}jLGQ*QTf7=;!ssZgMOcv1FP!<8 z)7JGRis(o5MXx)*hU+ZM=oE)p3Z!j+M9u~lGWO!zh|K-^A41 zK9DoAlv!{m!)@G#*3igc;o<(O3iG5xBwxRFmplv&3;el<=nKAtV zCrwEs@+_52XtmCB#iOkEaUG&_t?fCPb}PRVj}N0zdB2dH=8@|hGlhx5pSK)8iTrzLy=YD5Cs$@uB6}L&`cH}H6SdQ|LUfFA zO5++OJhad-knBIqs*QCP%iUZNjg4CO{nN6!XmstU)GA;`48#aCBkL+xXF73e-C~v+ z^qXBq8k?YpNyBox*jja?D$sYT&qTO76IURJPyE=Zba$EQoed-iZ3;y3iIYVWjV=p) zvw@^hNuymfu2JdcH&fed5r_w4^KV3q=-h3m`%Fqx;2cqA`Y@9}m~!$N%apoLXj9%A zd}yj-wlu0M?;X{%w52qJD!wvEJ<(OlU6~SAzz(MJ;haY)X_HrAd}>bJ)eV_WSNMYX zjNyWbloR~g+bgL~1tlT;jE~GgYIGNuzk*6Cc<7Pw8NaM8<jtUX0Zo#@k%S7 zdaC)wKIYUQ1$scCEPB~tdw_X^WxKN==_Ujf_T4p%cNj4{z*0!dc8vb!U zrF4H8KRCmY`KUBL?M>kv)wj0v&T1;6K$4PJ`tiq!6u&yY1E1OU16yzGwNA| zLq-_CtZ8!wqM$XU)W6}XWhSYpsx&0g`p5qG6Co3Q^*a)4oSGO zQsvI*k=t|egwpzl4(W*U{*cmu(IQv|xxSfinvAb_7@P>_7Y)QmPTn?2E_Et@nIo5__sl2QlxBCcHN&QDxyP=ydjs`w_s&fQ~frx5&lRgnK^<=oCvRK0Y4 zw0V!VG|6|e*(46%P%3hWooP_T?&q6VLW6yVC8qpXRDHjD^h_lvh)14mF-deTXF+ASc^+_G0XlI zi06U+6_WO`aGdWyErtdWMkIX804K53owCGl(z}yK`z!)EYdODAGr9`qN`o+BiDdw) zhga4ge`vVKB&Bp@%pwLS*0^!fS6!K)o~XUbt6ZOKQwUZ(zF6VzveY~tSc-0v+eL#u z%2Oprb@MGVyt!A`PeGpXF+E6-EXN?9v8RBMKWn(^`q2Sz<#dvycVhG$*gy7SOv z#Vq&KOQtDxf9W;u2I|HuB5K;-yzWY?WUwLz^KoK@n=f3Z=cFWndCgqQUol9FhGN(&>^#QhheHH;+QfX622K-7tH|10}Yo1D| z<+SWfUtsE}k(`&eO{w@&!3IvoLg7ICiNE=rxA8u;&70G$xnO~vT3`*Pa3j09t24aH z`nVx!=FIUFzn9$GrkSL|5|2dACl&gX{eM=i;ARpEn>T07lyL{*170@FCx>&pnm43v zDpSOBB41XTW;oZEa5fw^FVkj54Rg8U8Ikpst24MZX3k(2TFoaH-^6vx+xV$UP2l);`1R^cCOvixY=y5CkTgb#wG_e&Rdxan77) za`zbcGu>g1|460DVM2w3M(m;#R7X$RkyDJ2~(MMX=vu@i;eb|5TO9P5|Vu ztPfnO&;?UCFD0fyHa+qnPQXHsK8`%u%Z0@e8YHU&961e;VB4u?SR9uy+-D!-)S%$H zM=e!84jMl8+E@;G zs@F8exlzt_2(TX322rNDO>>(ujS`DQj-gSt!FH-|jvGiGk(k8bD>;h5{Y#D5SWLci z*~8%FO2G9uH0pwErFE!t{o9mG2R3^v|PM<0p2OWT`i^UGBEdreK&C5WC80K1X2&14lqP9oLNJ*+M zc$*Sgz?GS};d|w)?O4-SI#LqLS@ZduCWI4`_xn!<83Aubi#Bbw^?fMf{^I~xY#kltUm}RX9cH! ztkb3(;f614>S|gC0Wgg-SkYkA^Kw_OBqibZZZufF=~y0r#@|*2xj?xoiK3q!7jrstoc}Ug?jx#1nXMcVagl9&`y@NN3z}@$5pa|iJ#o zKpc(&vL7VKX${)cR_&5;xOYjGFmUME>OU`k z_V(zXci?g~zQrQ>xRRg*Rj&gR7B{S0AwB`(r)~1G}VKe`p2-l}ZyZX5S z4wS$uFfQn59~PbZtf-*8tf;Uswb)Q9uf6lK>NpC$sH7wTDLCl=xRa*=fG-gwB+F<5 z0O%1H$zGO>$*!DOdCJ{3KT_!o$|z66vo|Xqejubu99Rz?YxEZ1#W*nt#2tsdF)m&# ztC@sbFQMi-hO*B9NBuH0$jbE`QbWDHEm*kd-*!77()+VPs?@#R5JTs0>+QR8NY6kX$3?X3#{OX3ag=;qCsNCfG0O|f?Ebj? z1q+QKfU@rMB!(4avntiiWdjRw;`NvdB4L0*?gS&n11 zmKSErdS$Ye)9ySLR_Pq>yZ>z%>wqa`LWQ-pJx0w;&P+*3PRVxd4UaG)2KkJ=JHEy? z>3U{aG?hkeFc>ud9O`fwa>)R>ARlJSsv8~53>9$tR}o{iP&TD%K?Kk7$EqQK~2tfv$uKT`1I$2 z)95|tpa1!N^-Go`QoguulR|pz&2qVc^ReX$TUJ+Cp551rF-{MCcI>qJGlTj&{U7pd z|MRv7eJL4#F(`x+Zm#xruE(e;@&6>7<&=Z*_6fH$rmwNDvHHa*{UN&qFW>0A1)aA?5W4`Pz7+ymVMe#xuJ_U-@e z=Bg+<@3chIKRBYAe9gG7_>7=dPKIaqZT0L&s6Rb&`kTMAip@cM{4w#7mbJ>NBTv#L zB5?=px#2~+64DWYNhkQ8-eYG~V|G09UADm9T{3+ST zPOjbz^UlhAkRE5X($?Q!8If*r*2UAH9k4lVAvO8Le=1?^=~q8L&VL{A%Y)piK1J2o z^rCt88T`V#UoWj99h2|cr9SeSo|it@v@{3`Gfy5q*9(u59jqeK8X9{+$}!ZRO(fd6 z*~jjTXUMJEAdac%@ME`5>XLuceHWEIuQSnE{*0MR5AgfmLvudI^>DOJY%Dr7U?n>< zd1qW;pj!aj6@)Jnfq!Vuh@OVpqJm>>ZL1=yjdS$$vF55tm73RexZ!=nMdnk6@E9Wk zd1lK#qvzqye%TR@kr=h2o z#^DrjmSOAZp!9qH2x-A5eaeNqhXih=Ki2iz7>&Aq5ES0fxa`KX(d9v`0ASC?677g! z1MJ2Ia~T*I7!U}qEdPR82LA$F?I;vB$gy5dsU4f>N^!MYUICXN=D?1^wgbxrEE!ui zNEigEAE2)N@&foL3bD8W%r(fD7x(mt8)ageOe_O014bE5CYQ;L(*GML`k(RviwDED zB@)2`qPT)lfZzu=Fk#E-Tb|f~U{mD=M$9IH=ot(ayZ-J6Fa#0H=O@iK`&cH z%ZufS_RkU_83lpki{epPlZ@62CTBTG|AkHe=kVpgf5O-Cn6)%>Qk*#lZ;9}Aw*>nMAd^TWN3L92{PCrLVRBygKOnI z*E)ON3@3~~E~%(REL-k%{A0nWs@V;t$onCg6p=`QbiV0~QSsQ7rKoZ@R2#2Dh4Z?J zgDR^ZHkIP40wMjpb|q+Wh7MFeY%ai+`$Jmqwd-)+g@QBI{BrT;fK6!e zUW@yef30rWUzi5_;nITvTv#Dt_QB=+R{8$IMA*d(zYl`pph1Z{L34$%`0(nB7ap`a zh1~>}Exiqf;xvcc3-<@K&V`uq-)>!M)%X<0y8e3ceyg+dO#s?n-69)N6gtdby!hLI zGpQK*yyn&oh19mt)%4=U4n4|?u77^-(zPOvq}bg=c%faTL(%o)_bwIl8InTR`5Tvb zdH|q9$M5CS_zY2@{fpd-9pgG3T{p|ScdfBNQfU9`*Gu;Xb$GgJy!sxkv8bik;dS+m z_CX~;*Q?rvcf{qAJ60yb8*M5;#{yXY{mg=QGQc&Bpx@@c7US@(3xQNe5ZcP?C<1;epB zOT=Pqv(BR$nqiCsko#JQeU=Lri_OWmE+~Kbr=!n(Ez}Y`%GNgPoL83_ZWR5`K4&Qy ztZmjon?KDFpJSITcIUuwh|EFUqE<1U4=h`9z{{^~&M8f49=GL&vI>_H>=&a{n z?-wBV?!w9eG-UgP76N2NdVLVdb-xlo>AqwS4Kh3f#vcWB}YJ=RB#7#cz150WDY$J$P-+Qu$0y zX=jFn|7AI^B-LLLH#}}9Lc(GH&HFBZZ70Ylm1&MbHebIwNQS{KXe|N>h`IuPmh;IL z!DF=LY?e1v-nZT8@0K-tZt}ervtmUS8n^WF8|YiVtP^R>Yj=)jzRR+&x&3m>U| z2L~)RG^0qa%mAOMieAmTV9)}uZ$_c*nXdbX|E^NJjxTg`l@-Y`1pmB@6Y$!Ghn*?K zLFw?aUZu*F>EXOsR4IR*ylkoK0dy2*TEa{@U;U2-S=iK%2QB`+TzEmcn7OoFiDsR!-S~A^pjI090TyUXV;!=4p z6k`X{7!h2iV@*<_Yr48jq5{(#;vlOpLv#ie1{{Xh$#et?Gh_8wec2);uF(AuvQCUK znP4Uz)Krv@Stl3zXDro=As9>M=7Yux?ucV%p=+9BLnQ=i!3+tUdBg3KClv;yp(+{y ztVv!-hRuas1k;@CG{V;q=a>$e$f=4v`T9cpbV4`Z zh@EA6BsqVqec1MUp<7beWThOm1f`Qdbls7?E40t>8E(*!Y?;9+q?yu2!P`RDkng98 zjCu?+km@^CSF~tR=ubsYbH_+N%=GvG8K+A*Sm;W{itD8lszQ+IYZz-nsS5q53DbOm z9>Uz55i?W9l1&s+G7gN^%XMgGTymnkpwtXjNJ)vDt{BtnnXc3{(6TUFNQplvt7rj0 zidkSFus9+IhuNeY7_09^J2PW5GeG`YFS5`z{`^uy6G$?Jy1V(Pn*{PgyW|r~{AMk> znBX2jUK{~I%#`F)V+{{Myqaq~)mX=A?k^<9pPK1z{@0={=R90nXccl2QCX?d-9fL9 zrpOy*i=RXO_tO&^fI%s_Li9MwSCXp5=O4eX{Y_b;S<2tOb+4pmYrBz$L#<7G_|3P! z^9a1Xw=j?FI)z$5OL}tVfpa5K=q;SMZx+W}Aahp^cwu^Zd$tWV!Y*z)+l3V(=XrHr z*E+)WbC<#APP|}(sIstpK?oF&2UU>1JU+W9bf|{T-yHnox>&!!`F>*PSZGI^UcUXi zUAK;PYzwt`a059Z6h;4fWXW&jg5#ycqA{}rb+!u?T6+C_M z;`z7>;4R+wf;aHzj!R0h%DDTR$GX>-MJ{iDe?4cq;jG+MkKy8J}g`Q-8@mnYR< ziu`M0prnELRi*@yBHLEi1F;=f>3ftv0Ut zT6}8gUQ@t6zir|je4nNFULL_>NH{U8#Nm?ULUFGf-$$b zT7F?#`eAFXYSGv{X!zSLUk&*hZ`+P0guA3-$vcFr7*TZ#QWF^Zla;0Bqs@ zrXzbhcwO%$4YGF(Q8K>&AYfzc75C%6Ihv}&bO<462tdDXCKgS0e|$JOrS$4JQ1dvd zpNs*7AcReC{Y4PG1A2Kzq}6IsLKLW{tTn#-NoczIktJ*#`d0Wmi_#GpE%PV~Fb*ZR2QfxhhLLO9M7wek4nT%mf)>Pwd|-M=Ni zfeRmR-^d6M)C|pIqC8;1U4!e+?y>Agp@gS81-83km#l?b2<;Dw2m>woi?SoPWus#s zh0cg~qU~p*+JwUIwr#k9wTTgSzReFK40%I^sJ-^j(HQ8U&{hL%-FmJ@Ak^{ldEyl` zN1;xOKz^I08sqIAx~7z<&kPC)fQ`$G@ps1B?-A!f!E*>C`##vq0L~wHel^>*>l~3= zg@77HfAq+Fn-I5SwymQDZQyOfefI9cjjd)vtLA->2`Qe$bL)qk#2zqxQM;J6^6uH! zk9Y9gCx}n6zZ2(p*gtFzJx0&v3YF~-Lp6&2#r)4JM`g%08kv8E&4 zpFvjf&K^0X*N2^sYi!$1>>N9IZ>;g`*N1)$g}j#Y!lUL06f7<}|DCHV`RtyhETMKn z)bFJBc_6$X+kqT6N8yE<-Lo@JD20)SIE|F3T2za?KV*m>9N7Ob(+Z&mAf zo)YaBq)*Svc-cbKW9XvW1>W2K{L^Qb&hHjz(Heis1SUoZ>qJ3cv}<9F2FK%1uZQc~ zh2&ZI_dC9~F!HnqRr41CH=$rdjD4b?9oDu4=O9H~)HJdMqhq7uhMtzIyhpbtkL)GQ z?BWeskCD|ca$AK4=;C+!=Z_7-qhUI&7w(max4#wjwgh{|H(bc@8 zOMcZ(ZQJL0H4EPXT>n@-ODR!$=a56Sdod-ClycM!Yf$zl z)bZ8$FE}lhC&G2iK1KjrYmfS%5mvtpN%^5)x-ZVlveuMTj`m+wvs+}m@qyN`Z_#Lz zk`g0g=F4y?qC_iIkW_O@J$q%1r(fWSAb>Zg@C@Ictqm_ZkY1JUb@fYWMK&5Mofv10g$v|FuVOZYQ=(%R_{>`jyF)RRVuoYqrUS^wcG zz@`l%zCj{p)YUX3LF$Dxz*=aI(-D^qDzuV)m;ixdi1rj(Ku}nUOH%Bq+_0#1_8mK( zLTD>t>2V(Dh<=*1Pho9s`2(Cb-PZNDd0z*d_D0D8;3Ksn+7B$0pwH%+8tln8z%|oT z3fdwt?R|CZs(_7D^i4Ozr=GE=W#Getp;=99U{q+0KA8yka}`p|Mj4Shv<_uO z3-aa1Q@jyUn(3-(MZ=E+=Cm%_^xrVVD4d1_$OwQu26lt=0#G%%xQix2j4FDr68;3U z0|1_inMfKi0|%teiWwR(Ef%jDy~3h32t;baN+6Q4-}QhXaLD*WY;e>Mp!k5jKXyKbas*E%s6k&ei zRpTe@CXE{I`OU&44{L6R!eKg4wB|i(g8zxZRcyl~fD$NljwL7*MAN_6XP$q?*KVNw z^+zIm0;tgw6#FA-7oooFa~n>yu@@dbdyiAkl(73&5hAuKunHQm%KXh^>E281N9Rib z6x?KWiIRjOYm^Jv{7(X~nw4NE5LhvLTpb7q3wRel+o1)zILBX0YKaYP*3*X|# z-EbOU(PkL_UkZRPr)U>fQk^qAr~q3-WDt8LZ~EBN3Z`bAiPoQn`0IrErBAW}cHbhh zM5`bn*@~&9+2?cbNx4V*-s+UMemX~EcM^cEu_tfX1~?5pg@!rNYEGO1o_I-NZ1sD= z3>!YGrH!s)eA2@bacD?^XdBS8l1$4;`zsB00tU+;1P6&ae~vN9eaN%1YFcR!(p1v` z%Va8J3tQ_PL?F&X(X_~B>6gAVMITMkWzu!Et7nupCK8w+8p(ES9AUZZ53+*hs`wHx zMR*p`6eg^OtADZ?oTU>twuYXCykJ9gfd703(T^QO^aXHut%!z@vQ`xcijgd#_nwWu z&vh7D!72hv5g2j?KCJ5KvR%jshtSG1U%83FZpg%K;?VuL*agH36c}8xUQMw60MG2o7N(Xb1&}kvLK9N%MdM zNRbmzOoR6U;@;XHSJCpO8)rtZ0;_(2e!>Q3$jHd;APwX2|JOk(000v5g?!di05_3p z6~Gp6L6#o-`x?mJ7Qv>F3nW*2zb@DX%9&!Sk$^)YDY|b6wD83 z%}#Ik=@%fpY_J^zGh4eP+s>UbLS6-kg#G<^omS^4$VxyE;N<6Ykxr}Kwujh?7HGm= zT+W|(tQW{2^Rh645iLLvc-zL8www_VkQ<|pqL-k8wJ%zG!7o7iMLHBjJ0u-93PQb3 zXhnoSDg|dC*5NwqZJ{MDnjs~^+n|2*Zx1&BwEfTAiGb)eYYtPX>qU0wW9}3<8n~i@ zL+h1VDpf1eoT3yIEU61b1r+;AHI-@*$r5b~3e?LMJGU9lvPB*1Qc$2#7j&Ttm5*I^ z06dW~$fd48VJHw4Sq2&)RB$kjZ+6Sie)~%<)kdCc;YID%T@*qRrwg=k25xOsLSMV9 zr}jppOG4jRGzsc3k(0dvdshJLo z^wgZ04QL&^579#YS1meyIE^X z2RRICO*;)*r1+^tMrtI=;|m(G!^ToJNbp~1@7nTwugOFAyX(3l*TPZ{J4hDAF3kLW z`i+0VJBTk=BTNAJYzGOARNA}^8y9~*v|m3p;Z)qQb`VK2wj@u9U37o!xSn)2z(qmmvpo8<(6@KZCJRFOyudEt4co7b zuMhnl7Kn0+jq7j&Z zeQb;#H}6EQe>22CXV;Akc@>UF_2s-Yj-NI_{xdZt-*-a>%+fVVHKL(A&}VH-lo!S0esHwS2_9uSKYU z{qRkw>cM4UZ_XZ_nZpmeg~Y+@?E~A692Dz1MW@4|i^qjO9NBZcU1MV20U$A*f>4lp z^HARW5h#{51Y>|0BM{=Ve%L3rBYg&58lzXbzG<+!S@Q6wq*&-`dC-4 zF!@u$p?tWFjsU$UR4f^HP;SXL2_YL@>2gnRgfL4tptK=DdAve5)ff9NUn2%zb-p~iW;uN)$U2xqd01ER0DeJ3PL+*?!v3aC&8ck+7vfR5yOf81`Q zpU(bPI9Ppi#%&A_2(_Q@R|3y_Y^ixvaimqA%F3|PO<28<++Pz zFPsz6PivC$G8t(iM&{K^>Jy7Uim0bAr2d|DH62vuud|c-bJle5?Zrvm^V=tcdoG;Q zTJ+kXggW^6!5`fb6ke@95c%enpEd8p?`b{clGv$yiD$;0-q}vV-I0cdsXFkL<^O7< zx*mjHcTa=Kd_=-83a-B_;4XONs(7oeAWw_6R1Q{mJ@Bh1L(@#I-KjAfDwr@ozIbH0)7@#K|}uJvhz{@QCg!d(}Iu+`ZB8~AGTppbsa=`0jxfC^s-sjDyZ{v!NkCygck!Rri*I1qZ?zEwCo=!b*Avx&7+ zC&$6wYS<;g3M_!s;t*p(?frrF$JI`cd2fG2ob6k;@mt=7*Q^&8hQAKuJ?@>jw$A(4 zUY@f0*I%lPq+7fq-L@|*TNc0K$@ZeXcw=Y&06!O9wWj39lBT5#zyP$w0zzEj z8=#=_6gWHUxz31o9xz`6`_*>-XP#lsV(L#4pKz z;WsxRuLMh}lVirDy(OPE=|;LGvhKT;(^u~P+eU@`_xGVUmu&!WTb32-6Nzej74E_e zp*r(#qp;eX(M7| zrrLVhKT)DT%T7=nd6oB-k6L}yaoo|+Fqto90=iivc)H{AcE-Z%#Z_`qPVaQ%DgZ)q z$SQfbR4o9Mx>S$qNK(wao|sGxNq0>o&WxtQ+9k$K+m4V@9kaDs)+4rp3DKf;8j@WM zGnTwgrg0(wSq5>>n`!wQLu!CNO&jX!X_rd$$)S)A>DQ;;xAv-Rv zZ`hm_<$Jpk<$_e4ZTu)LQuK`V?F24^1N{DLIA8a_r+Cj&xkn`6@%0__-{lX|H5>L6 z10TzCsp>V^SMg@$*E1C>PFx|F)k|Fg$njA;t~@Uj56fhztjn)vI%6|AT6}Yr9SIsR zqt%vQiBBC*t{36!N9{@YfCVj3#aZbKp>Da0YVMuG0D433*;V+EVVMz+qPtQf50uXX^y=;z*a$9S}H%~#yc=t^TRQ?fdkavlS?;Y7Il#W^xy57&T4&HADo;2KEt=r~d9;3?Hr)c$o)x8cY& G%>Myh@T%Vc literal 0 HcmV?d00001 diff --git a/snes/xmsnes/vram.txt b/snes/xmsnes/vram.txt new file mode 100644 index 0000000..e175e9c --- /dev/null +++ b/snes/xmsnes/vram.txt @@ -0,0 +1,12 @@ +graphic source locations + +$0000-$7000 / $0000-$0380 : gfx_bg +$7000-$7600 / $0380-$03E0 : gfx_font + +$7C00-$7D20 : $03E0-$03E9 : gfx_window + +tile map locations + +$8000-$8800 : $10 : background (bg1) +$8800-$8C00 : $11 : window (bg0) +$9000-$9C00 : $12 : text (bg2) \ No newline at end of file