Subversion Repositories HelenOS

Compare Revisions

No changes between revisions

Ignore whitespace Rev 3673 → Rev 3674

/branches/dynload/boot/boot.config
83,5 → 83,8
@ "fat" FAT16 image
! RDFMT (choice)
 
# Preserve A.OUT header in isofs.b
! [ARCH=sparc64] CONFIG_AOUT_ISOFS_B (y/n)
 
# External ramdisk
! [ARCH=sparc64] CONFIG_RD_EXTERNAL (y/n)
/branches/dynload/boot/genarch/balloc.h
31,7 → 31,7
 
#include <types.h>
 
#define BALLOC_MAX_SIZE (1024 * 1024)
#define BALLOC_MAX_SIZE (128 * 1024)
 
typedef struct {
uintptr_t base;
/branches/dynload/boot/genarch/ofw_tree.c
121,7 → 121,6
memcpy(current_node->da_name, &path[i], len);
current_node->da_name[len] = '\0';
/*
* Recursively process the potential child node.
*/
219,10 → 218,28
ofw_tree_node_t *ofw_tree_build(void)
{
ofw_tree_node_t *root;
phandle ssm_node;
ofw_tree_node_t *ssm;
root = ofw_tree_node_alloc();
if (root)
ofw_tree_node_process(root, NULL, ofw_root);
 
/*
* The firmware client interface does not automatically include the
* "ssm" node in the list of children of "/". A nasty yet working
* solution is to explicitly stick "ssm" to the OFW tree.
*/
ssm_node = ofw_find_device("/ssm@0,0");
if (ssm_node != -1) {
ssm = ofw_tree_node_alloc();
if (ssm) {
ofw_tree_node_process(
ssm, root, ofw_find_device("/ssm@0,0"));
ssm->peer = root->child;
root->child = ssm;
}
}
return root;
}
/branches/dynload/boot/genarch/ofw.c
48,7 → 48,8
if (ofw_chosen == -1)
halt();
if (ofw_get_property(ofw_chosen, "stdout", &ofw_stdout, sizeof(ofw_stdout)) <= 0)
if (ofw_get_property(ofw_chosen, "stdout", &ofw_stdout,
sizeof(ofw_stdout)) <= 0)
ofw_stdout = 0;
ofw_root = ofw_find_device("/");
57,11 → 58,13
halt();
}
if (ofw_get_property(ofw_chosen, "mmu", &ofw_mmu, sizeof(ofw_mmu)) <= 0) {
if (ofw_get_property(ofw_chosen, "mmu", &ofw_mmu,
sizeof(ofw_mmu)) <= 0) {
puts("\r\nError: Unable to get mmu property, halted.\r\n");
halt();
}
if (ofw_get_property(ofw_chosen, "memory", &ofw_memory_prop, sizeof(ofw_memory_prop)) <= 0) {
if (ofw_get_property(ofw_chosen, "memory", &ofw_memory_prop,
sizeof(ofw_memory_prop)) <= 0) {
puts("\r\nError: Unable to get memory property, halted.\r\n");
halt();
}
81,14 → 84,18
 
/** Perform a call to OpenFirmware client interface.
*
* @param service String identifying the service requested.
* @param nargs Number of input arguments.
* @param nret Number of output arguments. This includes the return value.
* @param rets Buffer for output arguments or NULL. The buffer must accommodate nret - 1 items.
* @param service String identifying the service requested.
* @param nargs Number of input arguments.
* @param nret Number of output arguments. This includes the return
* value.
* @param rets Buffer for output arguments or NULL. The buffer must
* accommodate nret - 1 items.
*
* @return Return value returned by the client interface.
* @return Return value returned by the client interface.
*/
unsigned long ofw_call(const char *service, const int nargs, const int nret, ofw_arg_t *rets, ...)
unsigned long
ofw_call(const char *service, const int nargs, const int nret, ofw_arg_t *rets,
...)
{
va_list list;
ofw_args_t args;
119,7 → 126,9
return ofw_call("finddevice", 1, 1, NULL, name);
}
 
int ofw_get_property(const phandle device, const char *name, void *buf, const int buflen)
int
ofw_get_property(const phandle device, const char *name, void *buf,
const int buflen)
{
return ofw_call("getprop", 4, 1, NULL, device, name, buf, buflen);
}
144,7 → 153,8
unsigned int ret = 1;
if (ofw_get_property(device, "#address-cells", &ret, sizeof(ret)) <= 0)
if (ofw_get_property(ofw_root, "#address-cells", &ret, sizeof(ret)) <= 0)
if (ofw_get_property(ofw_root, "#address-cells", &ret,
sizeof(ret)) <= 0)
ret = OFW_ADDRESS_CELLS;
return ret;
156,7 → 166,8
unsigned int ret;
if (ofw_get_property(device, "#size-cells", &ret, sizeof(ret)) <= 0)
if (ofw_get_property(ofw_root, "#size-cells", &ret, sizeof(ret)) <= 0)
if (ofw_get_property(ofw_root, "#size-cells", &ret,
sizeof(ret)) <= 0)
ret = OFW_SIZE_CELLS;
return ret;
192,7 → 203,8
ofw_arg_t result[4];
int shift;
 
if (ofw_call("call-method", 3, 5, result, "translate", ofw_mmu, virt) != 0) {
if (ofw_call("call-method", 3, 5, result, "translate", ofw_mmu,
virt) != 0) {
puts("Error: MMU method translate() failed, halting.\n");
halt();
}
212,7 → 224,8
{
ofw_arg_t retaddr;
 
if (ofw_call("call-method", 5, 2, &retaddr, "claim", ofw_mmu, 0, len, virt) != 0) {
if (ofw_call("call-method", 5, 2, &retaddr, "claim", ofw_mmu, 0, len,
virt) != 0) {
puts("Error: MMU method claim() failed, halting.\n");
halt();
}
269,8 → 282,8
phys_lo = (uintptr_t) phys;
}
 
return ofw_call("call-method", 7, 1, NULL, "map", ofw_mmu, mode, size, virt,
phys_hi, phys_lo);
return ofw_call("call-method", 7, 1, NULL, "map", ofw_mmu, mode, size,
virt, phys_hi, phys_lo);
}
 
/** Save OpenFirmware physical memory map.
281,10 → 294,13
*/
int ofw_memmap(memmap_t *map)
{
unsigned int ac = ofw_get_address_cells(ofw_memory);
unsigned int sc = ofw_get_size_cells(ofw_memory);
unsigned int ac = ofw_get_address_cells(ofw_memory) /
(sizeof(uintptr_t) / sizeof(uint32_t));
unsigned int sc = ofw_get_size_cells(ofw_memory) /
(sizeof(uintptr_t) / sizeof(uint32_t));
printf("address cells: %d, size cells: %d. ", ac, sc);
 
uint32_t buf[((ac + sc) * MEMMAP_MAX_RECORDS)];
uintptr_t buf[((ac + sc) * MEMMAP_MAX_RECORDS)];
int ret = ofw_get_property(ofw_memory, "reg", buf, sizeof(buf));
if (ret <= 0) /* ret is the number of written bytes */
return false;
292,11 → 308,22
int pos;
map->total = 0;
map->count = 0;
for (pos = 0; (pos < ret / sizeof(uint32_t)) &&
for (pos = 0; (pos < ret / sizeof(uintptr_t)) &&
(map->count < MEMMAP_MAX_RECORDS); pos += ac + sc) {
void * start = (void *) ((uintptr_t) buf[pos + ac - 1]);
void *start = (void *) (buf[pos + ac - 1]);
unsigned int size = buf[pos + ac + sc - 1];
 
/*
* This is a hot fix of the issue which occurs on machines
* where there are holes in the physical memory (such as
* SunBlade 1500). Should we detect a hole in the physical
* memory, we will ignore any memory detected behind
* the hole and pretend the hole does not exist.
*/
if ((map->count > 0) && (map->zones[map->count - 1].start +
map->zones[map->count - 1].size < start))
break;
 
if (size > 0) {
map->zones[map->count].start = start;
map->zones[map->count].size = size;
308,13 → 335,13
return true;
}
 
 
int ofw_screen(screen_t *screen)
{
char device_name[BUF_SIZE];
uint32_t virtaddr;
if (ofw_get_property(ofw_aliases, "screen", device_name, sizeof(device_name)) <= 0)
if (ofw_get_property(ofw_aliases, "screen", device_name,
sizeof(device_name)) <= 0)
return false;
phandle device = ofw_find_device(device_name);
321,21 → 348,26
if (device == -1)
return false;
if (ofw_get_property(device, "address", &virtaddr, sizeof(virtaddr)) <= 0)
if (ofw_get_property(device, "address", &virtaddr,
sizeof(virtaddr)) <= 0)
return false;
 
screen->addr = (void *) ((uintptr_t) virtaddr);
 
if (ofw_get_property(device, "width", &screen->width, sizeof(screen->width)) <= 0)
if (ofw_get_property(device, "width", &screen->width,
sizeof(screen->width)) <= 0)
return false;
if (ofw_get_property(device, "height", &screen->height, sizeof(screen->height)) <= 0)
if (ofw_get_property(device, "height", &screen->height,
sizeof(screen->height)) <= 0)
return false;
if (ofw_get_property(device, "depth", &screen->bpp, sizeof(screen->bpp)) <= 0)
if (ofw_get_property(device, "depth", &screen->bpp,
sizeof(screen->bpp)) <= 0)
return false;
if (ofw_get_property(device, "linebytes", &screen->scanline, sizeof(screen->scanline)) <= 0)
if (ofw_get_property(device, "linebytes", &screen->scanline,
sizeof(screen->scanline)) <= 0)
return false;
return true;
/branches/dynload/boot/arch/sparc64/Makefile.inc
28,6 → 28,14
 
TMP = distroot
 
ifeq ($(CONFIG_AOUT_ISOFS_B),n)
SILO_PACKAGE=silo.patched.tar.gz
endif
 
ifeq ($(CONFIG_AOUT_ISOFS_B),y)
SILO_PACKAGE=silo.tar.gz
endif
 
build: $(BASE)/image.iso
 
ifeq ($(CONFIG_RD_EXTERNAL),y)
39,7 → 47,7
$(BASE)/image.iso: depend arch/$(ARCH)/loader/image.boot
mkdir -p $(TMP)/boot
mkdir -p $(TMP)/HelenOS
cat arch/$(ARCH)/silo/silo.tar.gz | (cd $(TMP)/boot; tar xvfz -)
cat arch/$(ARCH)/silo/$(SILO_PACKAGE) | (cd $(TMP)/boot; tar xvfz -)
cp arch/$(ARCH)/silo/README arch/$(ARCH)/silo/COPYING $(TMP)/boot
cat arch/$(ARCH)/silo/silo.conf | $(SILO_CONF_FILTER) >$(TMP)/boot/silo.conf
cp arch/$(ARCH)/loader/image.boot $(TMP)/HelenOS/image.boot
/branches/dynload/boot/arch/sparc64/loader/asm.S
105,9 → 105,28
* 1. Make sure that the code we have moved has drained to main memory.
* 2. Invalidate I-cache.
* 3. Flush instruction pipeline.
*/
call icache_flush
membar #StoreStore
*/
 
/*
* US3 processors have a write-invalidate cache, so explicitly
* invalidating it is not required. Whether to invalidate I-cache
* or not is decided according to the value of the global
* "subarchitecture" variable (set in the bootstrap).
*/
set subarchitecture, %g2
ldub [%g2], %g2
cmp %g2, 3
be 1f
nop
0:
call icache_flush
nop
1:
membar #StoreStore
/*
* Flush the instruction pipeline.
*/
flush %i7
 
mov %o0, %l1
134,7 → 153,6
retl
! SF Erratum #51
nop
 
.global ofw
ofw:
save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp
/branches/dynload/boot/arch/sparc64/loader/main.c
38,6 → 38,7
#include <align.h>
 
bootinfo_t bootinfo;
 
component_t components[COMPONENTS];
 
char *release = RELEASE;
54,6 → 55,15
char *timestamp = "";
#endif
 
/** UltraSPARC subarchitecture - 1 for US, 3 for US3 */
uint8_t subarchitecture;
 
/**
* mask of the MID field inside the ICBUS_CONFIG register shifted by
* MID_SHIFT bits to the right
*/
uint16_t mid_mask;
 
/** Print version information. */
static void version_print(void)
{
62,6 → 72,39
release, revision, timestamp);
}
 
/* the lowest ID (read from the VER register) of some US3 CPU model */
#define FIRST_US3_CPU 0x14
 
/* the greatest ID (read from the VER register) of some US3 CPU model */
#define LAST_US3_CPU 0x19
 
/* UltraSPARC IIIi processor implementation code */
#define US_IIIi_CODE 0x15
 
/**
* Sets the global variables "subarchitecture" and "mid_mask" to
* correct values.
*/
static void detect_subarchitecture(void)
{
uint64_t v;
asm volatile ("rdpr %%ver, %0\n" : "=r" (v));
v = (v << 16) >> 48;
if ((v >= FIRST_US3_CPU) && (v <= LAST_US3_CPU)) {
subarchitecture = SUBARCH_US3;
if (v == US_IIIi_CODE)
mid_mask = (1 << 5) - 1;
else
mid_mask = (1 << 10) - 1;
} else if (v < FIRST_US3_CPU) {
subarchitecture = SUBARCH_US;
mid_mask = (1 << 5) - 1;
} else {
printf("\nThis CPU is not supported by HelenOS.");
}
}
 
void bootstrap(void)
{
void *base = (void *) KERNEL_VIRTUAL_ADDRESS;
71,6 → 114,7
 
version_print();
detect_subarchitecture();
init_components(components);
 
if (!ofw_get_physmem_start(&bootinfo.physmem_start)) {
82,7 → 126,7
printf("Error: unable to get memory map, halting.\n");
halt();
}
 
if (bootinfo.memmap.total == 0) {
printf("Error: no memory detected, halting.\n");
halt();
/branches/dynload/boot/arch/sparc64/loader/main.h
41,6 → 41,9
#define BSP_PROCESSOR 1
#define AP_PROCESSOR 0
 
#define SUBARCH_US 1
#define SUBARCH_US3 3
 
typedef struct {
void *addr;
uint32_t size;
/branches/dynload/boot/arch/sparc64/loader/ofwarch.c
40,6 → 40,10
#include "main.h"
#include "asm.h"
 
/* these tho variables will be set by the detect_subarchitecture function */
extern uint8_t subarchitecture;
extern uint16_t mid_mask;
 
void write(const char *str, const int len)
{
int i;
56,36 → 60,40
return flag != -1;
}
 
int ofw_cpu(void)
/**
* Starts all CPUs represented by following siblings of the given node,
* except for the current CPU.
*
* @param child The first child of the OFW tree node whose children
* represent CPUs to be woken up.
* @param current_mid MID of the current CPU, the current CPU will
* (of course) not be woken up.
* @return Number of CPUs which have the same parent node as
* "child".
*/
static int wake_cpus_in_node(phandle child, uint64_t current_mid)
{
int cpus;
char type_name[BUF_SIZE];
 
phandle node;
node = ofw_get_child_node(ofw_root);
if (node == 0 || node == -1) {
printf("Could not find any child nodes of the root node.\n");
return 0;
}
uint64_t current_mid;
asm volatile ("ldxa [%1] %2, %0\n"
: "=r" (current_mid)
: "r" (0), "i" (ASI_UPA_CONFIG));
current_mid >>= UPA_CONFIG_MID_SHIFT;
current_mid &= UPA_CONFIG_MID_MASK;
 
int cpus;
for (cpus = 0; node != 0 && node != -1; node = ofw_get_peer_node(node),
cpus++) {
if (ofw_get_property(node, "device_type", type_name,
for (cpus = 0; child != 0 && child != -1;
child = ofw_get_peer_node(child), cpus++) {
if (ofw_get_property(child, "device_type", type_name,
sizeof(type_name)) > 0) {
if (strcmp(type_name, "cpu") == 0) {
uint32_t mid;
if (ofw_get_property(node, "upa-portid", &mid,
sizeof(mid)) <= 0)
/*
* "upa-portid" for US, "portid" for US-III,
* "cpuid" for US-IV
*/
if (ofw_get_property(
child, "upa-portid",
&mid, sizeof(mid)) <= 0
&& ofw_get_property(child, "portid",
&mid, sizeof(mid)) <= 0
&& ofw_get_property(child, "cpuid",
&mid, sizeof(mid)) <= 0)
continue;
if (current_mid != mid) {
93,7 → 101,7
* Start secondary processor.
*/
(void) ofw_call("SUNW,start-cpu", 3, 1,
NULL, node, KERNEL_VIRTUAL_ADDRESS,
NULL, child, KERNEL_VIRTUAL_ADDRESS,
bootinfo.physmem_start |
AP_PROCESSOR);
}
104,12 → 112,59
return cpus;
}
 
/**
* Finds out the current CPU's MID and wakes up all AP processors.
*/
int ofw_cpu(void)
{
int cpus;
phandle node;
phandle subnode;
phandle cpus_parent;
phandle cmp;
char name[BUF_SIZE];
 
/* get the current CPU MID */
uint64_t current_mid;
asm volatile ("ldxa [%1] %2, %0\n"
: "=r" (current_mid)
: "r" (0), "i" (ASI_ICBUS_CONFIG));
current_mid >>= ICBUS_CONFIG_MID_SHIFT;
 
current_mid &= mid_mask;
 
/* wake up CPUs */
cpus_parent = ofw_find_device("/ssm@0,0");
if (cpus_parent == 0 || cpus_parent == -1) {
cpus_parent = ofw_find_device("/");
}
 
node = ofw_get_child_node(cpus_parent);
cpus = wake_cpus_in_node(node, current_mid);
while (node != 0 && node != -1) {
if (ofw_get_property(node, "name", name,
sizeof(name)) > 0) {
if (strcmp(name, "cmp") == 0) {
subnode = ofw_get_child_node(node);
cpus += wake_cpus_in_node(subnode,
current_mid);
}
}
node = ofw_get_peer_node(node);
}
return cpus;
}
 
/** Get physical memory starting address.
*
* @param start Pointer to variable where the physical memory starting
* address will be stored.
* @param start Pointer to variable where the physical memory starting
* address will be stored.
*
* @return Non-zero on succes, zero on failure.
* @return Non-zero on succes, zero on failure.
*/
int ofw_get_physmem_start(uintptr_t *start)
{
/branches/dynload/boot/arch/sparc64/loader/register.h
33,8 → 33,7
#define PSTATE_PRIV_BIT 4
#define PSTATE_AM_BIT 8
 
#define ASI_UPA_CONFIG 0x4a
#define UPA_CONFIG_MID_SHIFT 17
#define UPA_CONFIG_MID_MASK 0x1f
#define ASI_ICBUS_CONFIG 0x4a
#define ICBUS_CONFIG_MID_SHIFT 17
 
#endif
/branches/dynload/boot/arch/sparc64/silo/silo.patched.tar.gz
0,0 → 1,372
‹;!³HìZlU~ÿÎìxwì8Éxc;N.Ï?ˆ—œkoçÇq4zÊq)¤=襳NL“6‰-bîZÕ“ÍÚñµ@×fëú"rLœÅX\tgBŽDæ莆=“¿Zq”R©ZB”Z!¹àÎöó™M–ˆ­*Ô_iwޏïûþzßï½y{v=p°µƒ¾Ê'Šgc{;¿×nÚ-~sqCtc”Ö®nh߸.Ú¾i=E×®]nýJ¹òŸ‡öÄ‚ºcßïÜ÷p_Ö¿ð,<ÿ H¶4Zºž¨úTµ¡7i£•MhTñ³—rvzµ^Q¾CSB·*ëíèR$Œ+ü,…êNõ:ó1C9ÝDµ²IJ\#²Wët*ˆ¶1KØ[t²·*~~55™üÇèæã nR ã9ñ»&®úhÊ FÒèØ…^¼Ý”ÒèkC­ÐInMjTƒ¶0Ãrð›!º¨Í(By[ê;Š(O§-ÍR„v±I§™&Cy»ÉPßi2ÊAóò¨bh‡~™Sy¼ù·.íÕ\>îÒÒ£)ÝåãÑú1$Ù ¯¹ýß³éD{4j¦-á=<ÞÕüzåò=TU€9ލÐ
ä˜iªþ%Üç·)~[©«7ÛI³/•çÀ¯à¾5]ù«\?ô’Ç#ÿ©N™NC²!9“GŒÓ2( &È’
°ÇÞÊŒ˜cË´3©
+)¢xï†<R
+¸7šô|ä;<22ÏŠåÁ}ËÃMW{¯B_2ø¬\»LuÅŸƒ2à¨ü
+ž3ŽhWñ^Öïéï&ð'¶ zý¯¢Œ¶
+s|qÙàm¹UVèÌ\
+¼õæ¯þ|XƒÞ)˜É§†J@S¡Ê!…JÙG‡äÞyàíd?÷qîeœ…¹Õخٿ"¦Êö »`ŸšwT³´(N8wÇ8¶å6ö¿¤ïÿCA!%5c3rèϝf©?W‹'ÐÇðÀ÷qJ¶$+”™A.ª*ðË1x4èå=ÆíÈDè«uš3³ŒKJ2”™Åm—xL!®Løq…e8öÖs#o…YvωS¬òu30znÎՍI1ŽEÏ”<Lã%BJÿ(úN†^˜³s§‡³Ûõð˜"ê㪑_Õ¬kÓróÃ]ižüÏaSö â!S²#6Çå„bK#AßÕ¦E°?=œ4¶æY÷áçì¶ç0VI’©2<t¾§‚6|®ÞÈ Ü×D«ÝöÂÈ¢:m/̱®¹Ëø]AßG<²½œtã<-L“™~ú_ÁoÚà“WOñÜû:^É}ÎÝ/ÎùóRÁúãõ‰£ˆv´•´#Ž°nâdHë&ÑŽñ5à9žÿ §Þ<xÒ¸øƒÊÓ«m´^ý+”˦WçXÿ*çQ5“ÿ ëÖ|Ê ÊLþpVçÀ 1=ä@¶·«¯Dtµ(6&yÝ‚qµ:IzÊËKÜß-Êc,[ç3n{ƒsSÀ0³X!—$œ¶3³ ™R­>”ߟj;óžCÖæ)ºQ´}€þè€&Zε¹”%ë´}ˆ¶[P¿Œ2æíÌ•„j…àÑlÛ™_ç¾dèÌ,Ó„[¦…å|ÊmàSåvöûiŠÀçuðýò°ÖÄ~¦&üq~èÍÏ¿ö
+øåöBip㳸å[×ù9ƒãçM;bÉ(/⼂ùx’ípµ5X¹x·Y²¯—®ỎX—™¿¢ü_ÊóÏü"ïKœÿác]Èû;˜Ïé&-âó$ËÌór½ÝˆzsgH5n,¼&þ¥—ïâ„Ð<ÿ›]ßÿ¼x:óô²vÃñ¢Ä·ÑE<ðsÉÐÙǘ7ÐÚlUŠÍhûmçЦ€ÎO–ù`¾ma´ƒocq¢
+mÀû«TØÚìÇ
+wݍ1?öÞÒ?ƒ¿oOöÕPæìK½ ÍÌsJ~:Zþ7ë¬E<¶c×ýÆþµ»ö¬ª³Ý]SlçõwJ«g^¸Ëüçïäx½owZË ƒdµ(wZ„´Ìåmþ‡ÂÖãÒ™ià*į,Ö ÖB¼f8‚õB\èrŸ»npón×/~žùaÙwÑ_Xïp|f}|Ôlí¼Ôlm¿Ülí˜k¶î9±ÑP1‡ÖäciÁ_X·þúB9U)¶A†ï± ³MbóûÑjCqVê|/²¶ûyՍ¿t–ÀºÕ&³¨»k¤z¡b=´¹çÊ€$ßnžpý8·rœôÚY2Ê òr¾é‡ÇA?{›Ø†òJn;KFMv³¡rlö`„„ºÆ|€‡*æ×9ð¼0Ãk_Ì÷Ø‘Ç^&»*3Ãyœá²Øã Mn™ëŒ/»•(­XÒ‰vC:ßisåêLþÞ·0߬› KÃî¶qý<t‡}YÖxÚ± ÝÝoµxû-_>eW&È€œä\q=/eFŠ×Ýà]-ò«ž‚_àaoU§<;zdðÝÆîë{/?¸û„ǯán.ìMÞ1‹ß‰%[¯fEì ·Œµü%K|ígá#³¯ÃGª6¸¶˜?˜
+Ÿà}B˜}kõñ´½Ê4Ýø<>î^„¯&¯Å4;úˆk¿è÷c`ÚÇgdBö×n¥¾¼¥¾Ý-*ðËócƒÎàSÂÏÝO1î;ˆy± ¿\Žò/¸<+¦D,UÿQœòyÐMrÜ÷ñœF=UTgÓêWýx9úñ ¾wý˳Ö…ˆ%3ÈsR4—IÖå\£uçF^§ð~é(¯#Ç¿
+:¶
+…cäp}Éç8Ê™7n›]ó¦+ÇpøM rŒCŽËºX† û2°oÜ(æí¸{Äç Ø'< ~ŸÝâñóY1ãïcŸmõà0þïn°Å-¿À²pqۍxÜ}¯3^»Â¯j¹\v]îzæy”!gø,ú‹ühύ~äÆôy¶ÇšðìgÁ°¿]BÿDucº‰<>#×ã±{¶Â맚|¸4y½-Åg<Ü<·ìþY ÛÌ2è~¦È'…õS‘Ÿü'héôù´°®
+£¿Àï3×{ùòW©ê˜Ê|ÀÇåÙ`ìóäÀÞ•åðà>OÞaï\ÀNù°Sæ³ bXè¼’çƒÇÔ{9¸:UY5Oþb«æë$4ä¶ÍwñzË_÷ª~žëæ±îy‚à3¨w!›YLƒm$àÅë‡=}º6Â>òö€ó{ þþ »¹v"Žç`gçŸòûÁÎØn~·úçå­~¡Í¯wtuõtÇzöÎÓ»º;ðûö;¢Ñµ Çm;wuØÍŸÙ:ÞÛÃýì=°{wç÷÷îêôñíÚÓuCöìÞËðîz»öÄÜ:£a¸Î=â½ÿCî¸]±}û~cgÏž.—MÚëvßðJ?xpo“صgï>†èît‡Ówöt?ØÕ½ÏãöZÄö»ù|ïÝ×Õ
+’â]>' Å¿óµ’åczÝ:Aﮜ
+ï¡”Á§–‚ßúw€®”Õl‰û.²îq4“çDJ4Ù‹YG6Ø‹y܏"°5ðþ*d³Nƒ-ƒßò„lËÏ–â@g°C óp¹/’ $”|žqð̇üSøÙá(|áQ›ýz~`¥-õµ6á¾~ØÃò÷KÙš?Ú¨‡9>þ:-æ{6ñRâ{1ìÇWú)ÿ t?rV#çæØ
+aÀ,î^=‡9½ÊZœr^æbD<·n£ÇíYw{ìˆx¥–»æöðä 0÷ùv÷›LâPtýgç՛ׯûÛßþö·¿Ýýí~ßo§Õ”Ò‡~ ùx—ʤ2èI吭•3Tb¹
+[’OºØVè±ÕлNŒÎ³ê~?ÏZnëe4ñ4Œ?ò»˜‡×°›2g6åڐbN¨£1€óØc-Gx… ߆ðm2¼áåƘÀLjnàãDxˆ…»¤2Ÿæ(ŠÛÅõš°¹«¼—YKIÇ$»¦Ø¹H)»¦
+é2óüdï=iLŽk
+ÊX
+^/Ý
+½ü=jS´—‰õ@ºÚTš©lèJ
+Õé.Jܞǥmö4ßÆüºg7dÙª$}K‹Ð„õAõyƯ¢ññ”-ÃøEºm†ôOÊÿ¼ß8ß6!?åUaýÜŸ¢ú=N4ﮡ};Žov_~¹É¥Ç“;¾“Žw¬Ê˜NëD®»õq¼¨gXºÛ؏ÐîÕäÃFq(ç$ÙV›}æl²3"|÷_rþ:&e´¢ùt¹v ƒVÇVÈ dPEw%§µó0ô¤nÏKÕãî¥53ô(ïa}pŒ`b&ß³â{O´Þ%yFºGÊ4ù5Í: ™æë@sÃ’<Û°[Èn\À’-²÷`%ÜY‚“ãêqÈÚñä¸Oë ÌÑóËñ©SµIÖ ó 6&öµ
+àCU)/aOÑÞ§ÁŠ:©ÍsöÄàùáü¶ìZBزGN´e×ùmÙ£1-6nË®%zf†ÂÂ<:<nË®ÕÜÄÑúضeG;<´ðmÙCáOÛ²O¤y¢-;§y
+[v-F4æ·e„ìÄ„-{4ÒS[v-!é?0nË®%Fç‹P= OÔãê¤z ·q¶ìÙz^¤-;퇒ͲàÙ…Û²óòæ·e×ès…,Dä·e×hçúH˜"ß3w®-ûfÔ}'Fòù¦+´ð1Ìýd7Ì÷jF« /ê6Bð©ÊÐ:/ùª™Éð«.èˆo">%àQ¾\8»Œ§kÃAÌ)Zñ¸ÎÛh“B<C}5Þì·ÎGën²[¾œ|Õ,î§N:E ù¾6æþ©ï'…ŒÇ¬@ƒcÞ?÷pq­õЇTC¥±üñâÂפ}þÇ;¾e•83ϲL¦;°;³%ðNf@cŽç4Ãiîd³ÐWKº0íÏ£œ_’¿žàMƒ=XÁ\wŠÖûRv§‘O ÑÇivëMqᯓ‚܏ÜAr¦Ï¥ñ¢Ï­+é;°,ÓWó½õð² âèlE~“ó]¢ÓÞd+ßéÓ»H_ÂsÑ´WIç
+¹Å÷gÀ^ßÃqaÌ6–e*_³,M88_ _Lj›/¦ýÈ·(O1}‹*Ó›Óˆçß<QŠwŠyÎ…ñ³uùå!^pýmÏ×lƒ™×¨Žv]Æý™ùþõÔ–xÞFïDc4î„6x–è$ºÈÖ}[m˜ö™f’| Ý¡ÓøÚUÌËÆúí;I_k³ s˜Ï— —J8¡»ç)à#ù¢ ´%“.ƒ|ëÿ ¼šKßÈ÷Tœûfþ”ÎlÉõñêñXËs÷ío»qáýÈ›óOäô­ææð0K?8¬7¬‹1S%Ÿ@Œûž˜ºé¤˜“Ó:ù˜×°ÎLò>å¤yhD?h“–{‡ü}($Þ)L0GñþëîâçW8©©nî¯6Å}ÔÁؘCwýdže˜=ɧƒôîCúA˜ R-‘߇4:0чãEÖ‡´¢ËÈúVt}1>¤|ÌÛwa>¤]ÃK+º.Ƈ²´è‹ñ!ÕÄ›ã,ºß]ô~ ¼»xÒñ9HøÝdç„<>¤Zý¸iÈø´©–÷!Õtÿ^ÐSøF÷ñ0÷!î§0ͱˆ‡Z.|Hµú¯#^ø&Wû&÷Žûjõ#îä^Pwæñ0ááqztïë¤t©+\…ø£:êtNRA¯ð!žèCŠ¹qüÉ}H£)ö#ü
+ Òh_?óør<Ãã>¤üýÀÔ>¤ìщ>¤ZBøF­ü>¤Zý¹}HCmŸö!%]=ԕ߇tJÙÈãCš•Ȇ9îCªÕ“ÜŽº*ÚÆ}HC«P·ì¶DxÚmk~ÒŠ,Í#9áÏïCJëòI
+Å…)ßç ²f]¸©V?ƒ¯!ȇ”ä’|HCñ‰zF®oÝ>Jß:חߏps?¾ç€wà³ùñ«¬|~|Ù²žDYÎWÖÔ~|¼ïH?¾OÉLß¹ýø¸ì8@Ã}Ôãǧ%âR'ÎïÇ—¥+§Çzî=#æǧm~|áêq?¾põõø’üø´ÍÔŸül ò㋾5îǧע–mŸÏO«çüÄ-ø9ُï¬z.?¾]Ð HF¨Ùº†™Lbm²ù™ÓÁß¼WõRÚnƒ¯OŸ@9O]&[ı^§®ìÚl"Þ󄒦ﮧ®+»œü;·ç‰9iù|ô€ÊGýô|âé´â6Ù}ÞJ&„-Fï;æ[”V@x(tQ:Kh§p!K¡¼3éL®žíi5-T†:˜9Û»™Ïs½àҁË\Wq\¨—æ„}9á;ŒòV ¼¢1¾áB
+O‚ù6â}¦a¯„™
+çµ€ñHøZ„ òà\Œx§„¹Š×9vÁ4W$°•yu„ÏäÁ_ŠøÓæR„ÿï<4_˜O$¼áóà,@üÿHÂÿÝ»[§öIÿ±Žs Ý¼R¾|›zöLD~ŽJ;ó&îçNÅCLû£LþQ&ÿ2Im&åKË•I×.l‹/ôLÉ‹=Ë'pž³± ÷^²=–ºàǶ.¸€sÜ0'{É®Nž«èíqÚ¹à»ÜæÇMë··IågÚv>Ò^8cÃoŸ&úÝÛ—„ƒÔo³ç.òsáÈF×ðÒ(ñmÂù‰SœÕH{}òìGõÑOó’ŸÑHgury†#p|<¬¦¼“ùúyÏ’”ópY·8”g3ãëxâ·˜@7ÙY?¦s\x!ŽxªRXÆ9çâv>ñs> bÏëàûÄÉ„Ø;¡ýf)‹¡7ò³¨4²‘ÚKû˜:›µ‹ô‹©{£|_Óÿ\€šýÁú0ÎÞ[ËJ>{ç8li°Ð±4èV†àAËݤk™»Y²Aç Îït³Ÿù1®ú{† ïÀåÌ?p3ÖÚ·S?-Ó|”Æí-(îC,XJ߀ÜXOLäíY&ÞÿŒ¾o™»ÅÞR‚ÛÙsö‘n£ÀTŠ£öáå[)^~bÈÔ¶è)ÿ#åÌ–/Ò|”FåótºS)gnù‰˜È›Xbœ_bÝ6&Ñ/Í~“xèš9A\Õ+^\‘A¼Jë%Ú—4ûŸfqƒï…« MW§1´é8Œ<
+-vrãj½i}dm£ÞÙÚª7·¶¬Õ¿¦olÝмºe^§¾¦©SojélÕW7vt6µD:ŒçFVëkhjÓ‘µ©AoÙ°>ÚØÞÁX/Ói%.@æû"ÍM«uûˆ™[ZÚ6e‡ÞØÒÐ~[g£8v†Ý¾¡¹³Io‹´Symtrø øu‘Ž,¦5Í‘µ(‡èonìlÔ››P$Jìlol̍_ÝÔÑiih ògcÉ©ýšÖöõ‘N½
+——W!.…ì©…l›Åæ°Eìza³Tåa‡âT\Š[Q¿P‚Š®T+†¦îäf“Š¼òrÊË%¯y¡ª¸DÉnNŸ—SVÈŠ@Ãtv)›ÍÊY»’]Í®e7²»ÝÁ6³ÝìeöŽâ¥yy‰Nä/ô2¶‰e”Œ3ãÉeÊ3ük¬8Q +~`e¬X棳¨<2?Ձäƒhòáváö3~´¨Á2÷%L EÙZŠx—Ìç‘85‰Ã/Ëœ‰ûRÜ¥<Ï•ôïp8ñsÉ_Á¤Ÿû<?ÏEþÔ¯ø§´€OAÜ%ò‚Wm®6Gø?I.ü`FœŸÃb6dK™Î*1ŽûYû>þW!þ6¶1*«¬ÎqøyžV ˜[Îˁþ…ë'2¤ò+Àñ¯@‰AÀ.ÅU,µìA`71-u3ÁU¢Ðô¬b+Y5¨£\:/We#Óû%Ö ³X™¤DÔ)È) ²ø§Òª9¤‹×¶ 4ø9%xïÅ{ç&Ž,E¨ yK8¨K-ÞUÜ.ŽÑâ)+Ù ¥LÒHWè
+³œ“Ëñ^Æa]œ+~YªÎÿK@‘‹óCPZ†Øj¤ÕðP§¡Œµ!\ƒÐÀ—&ú'®V¢dá֍ԕÌåqbûæ½™Lé6XÐÌXùãâè7‡ó·g
+¡úr>  /[Ø.ºô>ùÍ‘“Ë^¯2U Y¥òa­H>PÄ/IøeìêUÔ=9eý q@ØÁô½JcÄ0å+þ¹Pæ ‘†üõf%S"?Dòï³<ÌPáņê xánÌÿ±'Äl¼¬¯dnnÊhF‹ô[Lü0¦³Å‘M9¿dº
+(|÷M^p Ÿ1½—]ì#í@FùÇ™X@Æ ®‚↿¬V–b½o3)þcQîxÊ9ù«FûŒ?©Ä–——SÍ D—-èž-Ÿg}?¯pV÷Aý.4ª>©p• Nï=!k"_Í5ÁÓÏž_Bt읿O$ìêœOÞR\.´
+úJ Á¥ŽÆ2ÖûËq¢A²«í›Fa`Àüa•.ä¨éÕ®‹*Pë¡Ù­Á¨?”m–È#ŒpÁÂ/†ô—¬cîpôµó÷…Ï@ùËFiòú#†éõÎyÕ_è(—œXÚ‹×o(†Õ«Š%Õsè;CùØ°{nsö´ ´¬É[\r+í1Òð~w¤ÌtRFT|½yT2.¸~~ +ãA§Kx½Q#ËÂÕ=ý«8ÏR+VúԍUXӻĔŸ¨hBŒ&ˆdÝÿf19qzïÓRÚ
+àõãò&‹;Ì4-í–3PsÝì»zQ¼J`([$OJIO:âìº/©X®ÑEYõâ=p_1µ?¶J½#h«ÉBÀQÿ¢5?­;~{B™5:dAµsïñxoŒÓŽ ©øÖ„n>ý«ýjh'¾ ã”Ÿ¯zq̃ô“_njx ýÓy¡§W&à@y‡ñ^¬õ±òŽøÆÿ\YxVx?ÿH^õÈÓ¤–´uÍ’VudI¸¶\Nw‹÷6œY¯û¿r¬±ÈÂ"ÈÝ>Ó†-x^ðÍUÿàÑ°WrœÂVÞó ÂÒ¥NAðóK}êÌŸ­/{/l¾åxCô[~$Ȇu_;©¸¦Ø´ÐW±À ›,åNh!MíÅvV;ž`Èã0ŠšEÜaéLÂ?6!# ¦¨âRnĸëwÏ»`QñH à o(–ËPc§>ÌþPWuíªÊÚ¿“ù-é«>ó¸
+VDl¸¬¥ò'|Ô>åçÜ{¸~jÄϪÌb0H68ùé³ý$+´K%s§£Œ4~8ûÀ|ûRlõâÅ‘é;ð‹oëR!ªfŠûy£ÖnC¶BDqdÙ+‹"Fê¯Ü,o^ÄÕOlñzàea£ÔA`tßv@¾7ƒµ|‡Ì$z÷™jÛ\h·LKÁUž»j&ÌîìÌ¤žæâÆǨK$üy^Cеüû¢¡þŽ1ùQòNŽîÒËüŸa‰N˜*òUÎSRì¢S¤÷•Vi0U“œé q€Ú˜(fÌÚMrÉÁ~à÷
+²YíV£þú·ŽÛ4Ï-Ìœ ÞRóìÍEŠã¤ób[¿'-N”ZùžxÇ•sF&²l²Å%‰ÇwÜ6Y””‘ LßiqÈØx¸m-foËkosÿÜb²uâ¼Î%¥»1?;· 2Ç1­^£5Þ#sbY+“r}O²Õ=Ÿ5†Û -¸ž·é´Ã5Î<€÷€¬dMè-µÃ3°4´hXR‚<{×D¨ ü÷Ƚâ
+ÍsÄ
+âÛoñþìËF´Ç:€%2®Âr›&'|­G$”&HGY†¾¾Y®¨»ñ²˜C—‰~ûbZ¿ç>goåïõýü•£¼NûÌrd¨jiÑúéþS¤ë¯ùg÷vŸ9tÛ«ž½þÒçY—D¼òÒ=Ꮳž®ä[mdù§n%³?Ä}Aoqu~šã.ò³ A‡¯‰‡…Ï6ÄÞçT=çõìè
+šò!.Íç:ld~ÄÓ†Ä?ê<~wv¬J~ò‰mÂ+ï1ÚË´Â>óÌ»÷ª§^‹þz+â˵=‹`5¿ÍÄ`Â}V»ØîKÓ¹qqEP¥‡Ð
+U©ã]TÒq¹{ö»ûH»3G
+þÁ‡LîbõêÁ0ªj ¥è þ~ÑÙžáÇonf ZÍÝM-Œˆ)ŠŒWÃÁü DWÌ7gDgÙhÐ[ýÿ%¿ëDïI~¾.–»ÇÊq9DeÛŽÓÈ"dÉ2=
+­M;ÇVenª@•Ç:Õ3j×f]pÿ <'*¬¢ÛѦ×t®/\ÆFßêHt®‹ÇZNÂéÑÑú¶þtrª~[ݸº°Œ#|b^ Jå©o_¡VQRõ §×ßk>k$ñ¤«‰¾à»^yÚ¿®&®Î]O‚©°Ç1ˆ6€ØIåëÖ¤Æ_£Ÿã*Ÿ 9Äî“u>wd¬w7*Ûé~ð€÷ëò×/ªOuŒ`!Òœ¥8¶sAzîí„ M“fv­›43wÎ)æ²2ÿ2O¿ã£J¨.R÷³^®æÃ~œoqáÈ‚^]A!îqßfD<Å„}Ýߘ¼Êcc÷Ï>‹i$ü²ó)IqM”²“Yª¶
+ÉÔ<9xÍݤÉw
+njq›Oí¡Þ[7K5v[ðBí8÷øçÞ®j #§Öþ÷ü?ÌŠ_±ÐÀ;ÛÝmí%•~û?Þ#QoˆÀfŒþZ¬ìTÂñËÂçο¿ŽÄ$)´ð¡#u> ßäºð ²]¶Õ¡cW_cÆN*}fª} =Ù…ñaµÈóh*æ1órýS¹?A;ŸEzª.ÃÞ®kW2r½9†%žzbþ{oÂ6]m*¡˜ã–è³>ÕT@Û¿g–†/0và€e^ú­]¸/·ˆz°àßÃ{n‘­GŒ(=mèPƇ¥¸¿Ó–€©'çbå ÙŒ”4ø->‚M¤=œú˜º˜º¬e>ÒÖ\J½ŸÊÄTyšg6·åŸ¿y¬‚cä1C‹WÌ1³y²C]âiÞ¥ÃþÝß•J”A|_ÀÌêÁ1Z®ËêQöÜûâ{z¾±ÖûQì2˜û# ™â#v¨²õè³A
+¸aö„†ɳ'nÚ ¶ßp !žÂ«C3²¨¿Ç.4LçÊ€SVrD/´>–ÎB›Î¿®žÚë‡,[9Ú+ÙBv uÐg@0MUÇ<”µ>_Jûª*ˆAV÷‰m÷¿å¤Xm3ÁxœëšÙÿRxd
+ IӁëšpšÊäw4úÇñ<œšªËeK‘Ç—–õʼ½»ŒÍ9–6¹“=gæ'ÒsiŒg¿ÎüRl1
+ŸÐY/Óï‚ÿË‹2hg5Ï•þ¦DávómLT… <N&‰À3‚ê£äÔî·Vƒ©½”ÆS-»\{V'û0;õëj’UÜ#:Áç>‹›]Â+’º’×ݺãEìèíº[ðU£÷Îè?Îó dø寍€âŸçù±ó³=eöÅ¿X’¸ƒ¼}½Û‡£Š@êd“E‡&.Ó Óz‘@)3ì÷Ôêžt:þdŠçá;ìõÙ«Æ×u×cŽ?«M—Vuø:‰Ø+:M£0~ãÅ­a&u·ñ³÷×bòiIb#œiØS¸¹qáµ½•y›þÿÚ"C¿™½ T´Z+^<K÷1‡o÷rbn¸Kþð0ŠÜ/Ž…6O4R$¿U+Ï4bçSJ"§ÝÐ×Ñ/¨GÖroî
+Fœ4FËâ,lq! –7E‡5¹*<sV
+ï ¹BÑB’˜fK‘™l‘º²˜ônâÆs÷ºÔ;­rãˆÅÇU±¹d[–ڝV öp¬*LoF+®°-ææÿ_sC+2Z`:ð™ì­ýÕ\Èx{À®~ ¯ÀøK¤ã—t󙝆X¬Q`°1öÏ·M; ÓHKÔ”ÅÚRºÏL:àUƒ±˜À§"à×æùµ4€ÃÒFº7¬$xÆ~ÇF²rïýçrì¦>bsž^è;gX´ ¢Ñ7íSá‚„veí7°¿ó
+£eà¯8Qº—¿Éš¼Vå4qG„’‡9÷fœîÜ›ãFÁO›½^sÈ_3É*ªOrYpù"é<$Ï$ՍjìÊ¿W±È`ùG¨ÿJWß¿ŠÚ·º¯ tv<Qwbj‹½˜pÓÛAê×Hâ•”ÍDçÔŠ4:Ÿ5E8@I¦LRÀ½¤Í
+·–ºÊ UQaˆÍðÆ‚DUqíòï·Õl;Y^):CqFb°ò=™åÐa…ÔãJý2³àWQÜ·Ú{}œßçßðã7¿ô
+I ÀÚð“ÓÒ73Տo§êLDªMç|¶î`ŸÂdÍ7X½=:9ö4˜·ðVx,׈çÄ¥}*Àòƒ²Þ6—Ä{ü߬¢bES…°t ,l繶ͦ&óâÔvËûLQíS™ÕˆW¦ñIÚ‰YÓ¹Y8é·=Oö·5xµ¬sïy
+8l'Êì(‚Ž/6Ñß`ÿ’‡ßƒÎöÿó}-[íæÞäY?¹Íë×½M½Ô1\»$cô÷§·ùJÊ·Þà…w‰ÿžÐÓgÐÕ[ÔæœÍyÌ´íGŸÓÐì9P-è½MÀA0ǁ£¼E#þöÑ{rXuŠ {/ökæ«ŸI_¹P{ëcĹ.¾”{=(4œoÌówÚ¡ýbäŽ=¯A=óåM|3­8zd¬~%kЕ*Ìþ@±<“»/Y!á”ó‘aî¼ ¼" ðÁNUéÐÎü¼C“T†ZƒIîfï;ÿèœ=\Ô qž£Ì®m…–eødeц Ÿ¶ÜoO‰0CÕRW$óºñt7›/Q‹»l)O}øôìß»,«'A!¸ ûÿ¢.Ŷóµ~´6U¾8 ¤Ó.ÚªY^ ÙKØ›J 0=œ¡¥a2â%·»lè–^ÎÜË’ÜQÚ"U>À÷öPû…º°Å
+Š¦eŠw0Ïë`üºx^-.­ßW%_Qi™iÚ8 [|JÂÎý:Ÿ±†¦)½¡xd²#Áž
+o#!6×>2°Ï7Óÿ¨$ƒÚ¬|ÙøG“ðŸ*À-â\ê'/ÃǪP×67íüß’;OA‰M£‘ÿ¨üå”Ù{>²ºü–6±ûaëS;ò¥‹%‘Ù­>ñ¤DÇ+9¦mY;ÎÈÔmÿ×d`ÉÞçÊqå¥P‡z‡C}­Ò°;>ç ðùÄ 17Ëé÷Œ. &.{€íÌ•¨5°á
+ÝÒÀè?˜¢ç?W­UG4Kû¾ÅçÈ…Iõç™…6>ß,f­¼w)%bàòȬªâ™=¯èÚ¸ô…Ú=F[‘ëKø¬øª¸ñÕ‰ؤj€VÉî‚ÅwÆc¢½ù6Ôçwà¾äÞ‹m9׶½UÅר/"Ìù"˜IèWÈÿ¦€¥þëV*ë”ïS½Dv—þm3ÍQ¸|Þ·°
+%õ«+J36_KºÕŒmïÔÄ;<W£ÿ u_y}ÛR^»MÙààÔsg|]êøn¦ ëu…‚åøâýƨ‹#Côð{“e_às$?[]ƒ¾Id„èËú_Öij³\H¡°hÊÈ+“4°Î³0ÌbÌü-Ó}Ö÷áªÃ4ñ9‹¼3ƒëUÃÅ“RDò6àŸÞ× ¼8÷m 5/ëDcÑnLîà((2µuYÀ´m·dÞ&á™Oý²erŸbÖ/õâŠÜXüðÜÿÅméâ‡tRzRôb&ð9h„·òͲ†1ôÙB„ïá³3¿K©ÑN“äÀWl=¢=ï¶v¾‰»SÇÌmý{׆K Ì•_‰C9¥´×¯µZHžæÞâ<¦­ª
+S$¥ç{‘MfYO¡ ß³Íæ³_HäùÜ£ñ÷ëg[¼ÿÅòšãâÎɏÜïï?
+¶<OûØÙû1I›û‚&Cýí`ùPˆ<À™¯M•±0ªÛš¤R°]V©âo¯÷ŒØO>cFN
+¿º£+µ
+c¨Y×fênð8wW
+<—úz“ÁĜ봱²ÏA½ëìLÒ]ÿ>7Žòllºµ·òí÷I>öR½qãF«ö‚·ÅJ‘ªèËV°­Óˆ7‰¾ùr·§FåfvM%E6÷è0ðà-ÒΥݗ¿–l>`7´ÞÇgÊpC'ZcREOÞ£ÞÙàÅpE|š®ÝmÞÃÌT’ÛÊ©è
+~¯™ßN«Þ`1qšÀú§j0`¿õÚFÛŸx¤©–r‡¥†¡ü©™ÎÇbƒÏÙ‚•¤c-yÅ Ûub
+êÚ“÷
+óe™úî´“Óž4¾)ž[1ˆÖ±ðî…Úmï£à¤Ëúe–Ç·#DC£y9”@]÷pcÇ’. RL+eÓ~mݝ“½ÛÝ uÚ6ËÉŠX(Èbæû›»£øÝ"
+C8²tæîJq ¯O™y­^W(,Aúp@D^ ¿=÷ó‰²S‘ªÔ’Û‰­Oùmy.²hI»§ð~|$ì$8격ÛQê@tÕâ-×4¼µM†×ìʼ³#×Ëöè€Ëv9Jò$¶ÖŒ´å}>eögHÅÀÊè+yS½/Ñ™§W—읂¸ýÏþSÆ9†ƒ …@]´€Û"B¶îXw;ºÕFµ„û tran!õÃ}yÍWxco8”¥Ï÷¤!ð‹Î[ü]N jŒàI‘ßQÚ–c:m19_îåöÚ¾¶`TL2˜ä¹Y倫ÅTêðÿ£ÞEþ´‚ÞÉ0å2E<™–JZÿÊ}4î«Ï_â:78\­Ý÷7®îéæ
+%Bs™FfRVEX’®Lë´ïµõzð
+½µdËOÒ(Ö!℈ÞÞ(˜ãþÇÅ=öêÇÅãP‘aïÕd°ÒgF’ðÐ!JèŸÂIî{I8jt}nÂt 3ï ³`bn–I˜*òŒËÅý.5•¹Ý&µ´¬›wºúدOm€/õ¿‰¯¦v ”…Ê¿ ÃI5Üà[À\ÈÇzCÏãÄs+QÛ¼eÔÜÎ^¤7po¬?øÌ’}éü4©§•R«ù”dzÀJ‰Ä~•x ÖrånÌÿ}Ø„àlK›qÑ]b×”æ°äžïTÛñµ›½ \Ã@s€=–D°ÒÁHž×Y©16–õaè¸ñÖfÌ«®&ér»‡w–=5ÇFË-¡ t“tËÁÞÆPKV_õœ­5ñbljŽ´›lHÁH$AÚ°©“"÷ùøÃ,‰œfÆ×>nèý¯3¾M´Žo×UÔýåÙ½Bý ‘pd:JÜÎ}w¢+F,6„ö÷~&µ”Íï<4Kÿ’{âò>Ï`G¥ú#,ÏX-ѳdï6ÑÃg§UàzBBV¯³uÛГ=×8M„øFö¶î§…=3KÍ)Ì‹×Õ{
+NÇ¡\Îû&Œì<¼´`®qrõí€5¬‹•%§L­Ž‡¾ÈqêÁºž9Ø𑺼ôùÖEkA»éH‰~úLv˜µ¨%•`×—–Ù,á=Ÿ{b–ŽjŒ j^<¹ˆéȾ‡~^—KÙK×YŸÚ} ÊõÛz‹ô`8HÁ‡q÷§Z`K{9ÔGøøK0Ú“A•<Š ÍÂÞС¦ê™à¼:mœ`yÌ™åJóˆë=îU§]*2àäÑ!Q€'¥nó5Ó;Ó}F-‡µo”£¸=ӏ-þ¹ëÁ/oLÖØn‹á[çHeO†k€øp/ÝþyÝ‘¸>.`û¶ý¶§Lò¼º¥X2ÉîXß'ÓÐÉ$¯ð ˆn:pt~fÊŬúz}bßú²#ulÈiüì4Þ‰z/ƒõÝDÉ -"²åàù×pèÙ£+úwQÈÍÏÄ©qnüºwý?õJRJÆÃAéŒçy‡PNóܽ_²¥)}{Tj÷dPmä–!J«Bô÷†ÌOÿ+[¥`‰mkfÐÎÑB>"±«ýðà¾kŒÃ“ sEn½<õ­ˆÌ
+ºÍ¹×ÚuŠyŠN°ëºÕ¦Md2Î,/ïȶ¹­?{^mfJä®wŸ¸æú(±L#
+ö—·Åà:JÅwº¨Bø×›/5Æ©EÄŠÊ4[5i…b¾Î¡Æ1u(
+‘DZìiJ–{)“‚Û†H
+ÄDÒ7­bO¨¤d9GÀ3÷eÃd +J®ßeºŸx%ïý¾BA§£‚Éý½=ߛʴG©„±} £äS{žÿw<—ºO÷}~í\?îöèT±ÙhˆÀ‰<nîEŽ$è踝#8 t´K§nÿãsät¦ÍŠ3¹À1U‰­Kä*x…Xjè$´Lß›€é|‡ó\G˜QBC[Ᏼ\‡u¼2\oõ-Ôý°[Ë¢à J.¸0ïkÖço;âÿs¹ÁÛ̍e_ª³ "¹êŠ_äû?ÇŒ,ˆ åOš²ñÙê© ,ë=Aù9É»Zâ··žþ}x q‚ :o§Ï7Ù4ó% ²Å½§y:$o뛉*U•Çšm´ áÏÚ[dùÆ[~®Øú¤øq[úf±a)/7Ôa]h—yˆ,ñ¾(ÙgZoj×!·¡ÇR^ÖK«#«¯ÇÏ),ãËGyáþëNÍþº3°Ž€˜Û…ßIvc™©ïØ©¢}uÚXL2×Gy….–f~NùÛŵm½ü¹:/ꏆc,é׿¹‡}YŠ ×a¾šl!Üáy€½U½ÙR7î Âìmžq@(½V0ñ1½_=”m–W#še«l2pOw„D‚Êëoì¤1j–TbŸrÇ,BÞ†Ûpëœ×\K"^V/ØOr4ÚE7‰<2=™¿¦q yýªûX ö¯ö4‰˜Ó:¦º(i¹<ë€Òù÷¿dBzÖö(öÜ°Úý•‘<õÔýn’Æu’ѼÔpfS
+h­ÜÙ5·¿H¼+-ÉFkÄgºb£>ÇËÊ3Ôhzz\ÓÞŽrÑΤüª°qñE)ŸØ5Þí¬¹ñBÆÄîrXÂÐÎ6fTÄç×qPwò;¿xïy‘÷ w{K=¡­ÙnVô¿=„þ64N1Gk´ð¬ÈN±kŸ?Gô~\̸<¢±·Ó°à•%ö²Fkô\õ‚Èl¸õˆ÷¨Í)^/Lяõü™Måè¡-þ“2†…žî
+¼!ãÓÇÙ L x6#o_ý]Ú€I’†¸âz•kgVbØŠòþ¯Ã_YEÊn•à\¸×?!2ˆ¸'ùùAý=‰z
+`Ë/ï´Ø™9ÖÞq…Ƕ·f="»
+âÄ}05+¨'ÿEA7Â\èÔˆ‘-Fp7rºz«ù®š4„hJóbõARØó?§‚#%HR—±Ôà{hIÛ^À!‚ÚY©'¼³ú@†½Sƒ¬u¿-ùÈSË&§âV¢|¦®I¬¾3_“È×´Ë™½q57
+±I…]*o˜
+qg7Õ2?å>ßÖxóGÝ{Ñ4pG¶¼Ë»’G]³Ý'óBº¢»ÝŒÀ¤]TÁ¯md`rx7èo•ƒÄ›üœ#à´ä-;£[»|sØ­¸qDzâýºiW#m.£ùMçréx7ùrœE€BLj’òA(.袉/'DºêWíœï±`ñ»µíƒ;ðÝ—•%'¿Nêò?‘‹ù´õÊ3¢«3Z,ÜfZ=r_cµ¡Rô%¨e8ͳO¸õü&º&ê÷ÿg.œ‹ñcÉÞø{K…( í©Úõ\pÙbÿ¿-Þ¤‚Ýæ÷¡â½@ÌßlBn'x#ôºáÙð F¨o]Éî0Y6$(žƒ´À?Ùñ"彞÷XƒË¹C‡å¬!®©B‹«z°¶®½hûøKk÷®‘ ´»‰äs+ç³K•ž²Ü¤Ü´òaŽ4°ÀÔ¯˜T#;0Oð¤(©XèàZ'«{º¿rÁ¾[â\ì§YM©FXÒ®µ›iBwv¼mò3ìÂ
+ZÖiҐûògPZ³îQ›,â»ût–Ñ¥¾¤»úP¯§úÎŒÒÃ¥Ç觬W¢®¿]"Š^3~U.¾0,ªÒž6øº&ÊÝdýè½ùsS ÌCíuYï“/(Y¾5©/£o<ã1#;C*<½
+7s–]G^q6fs«“ Î|(Ùß
+òpÍ‘aDƒ3ÑbØ˘×ä‘#®R¶ò“Çà˜âõT>º·nHª]OÞ•FÍY¢XéÎ÷˜[.pŠÊÏÎÒ×>×2m:ðŸ"!Håã«–sß-Ñ6Jxž_«¤–IÈ~Ë倶¶ òéŒÖÔ[GoW sëkVWßgú·iTØÅía1qùü¢¶]þ›´^îÅ{o;{õK~lÍZUò:ûî±|½ÖáÃuØŽÂÖ °~(Êíað(öz›Ílã‡áÀX®MâNDìRzã­[þÝÇ8e,eb°„ñ/ØL×^…z¤øÜÁwHÌ4h1Æ0Á¿$°Íƒ2î–>¶³Yz⓾¢ÃŽ¾|&Ùii_•t¯mé¯]7t‡†aÛjFæ'WÎ7/ySŽ|oëÁ¾¿ •l¾úã¢+‹>dë=5.SwøÇ$Çþ2øéú·HLT·Ÿø z¦Á^ýØ4°œÄà¥½ÃZ¿ówo,ÂGÐYE'8§ÜsIãÔ«¢0¥å’½?ö?l¿¹·˜ŽÄZö˜Ó<T0XiãµÓ]ïdB2Ö4LÉ­2§ü…Bû‰Òdí§X´Ë;ï.»ä•(»ì¢>ŠÄÿ^nE+´àoN>&o×ÖW¿.Θ²!ÈwÔ¨&ˆYN˜zk3¬ïÂ;fÎ'>_£ÎUÏ$Ô@]e;üã¬\ŽÜƒžÔŽÿ8;%õty¸í`‘
+j}]ú™ýÍÌ‘Jû;~ù~ç.ëú„räQ]¹¡è0{ú’刼V1VmI
+†js^?0¯Ç¾
+­/¥Œ¬!®p‚¤­íÎB]ö«ëpÓ½½Yœ’Ó±Ñ?§;N3:›ì»uÌ ÇÊ>¦æBú`K°ÄÑÔ„±Î8uˆÀ÷ÛÈSã¨mÅΤ(9\¶LFšÛqöæ¨Ií'(/£Æ”"{5£­CtÉÜ<o¤¾ÏÔ
+ÚUÄfóƒÂûQ®‹¿ín¶ÝgŸºÕ¾o7_ßã‹ÈEA ë<‘6S÷`I:D–ŸÀ†ŠiyôŽäž‹; ƒÙÔæB¾ÙŸ¹~PõŠç¾@& Å)ù¡’_[¡.Ë7vÙ3Xå˜å:ØÒ”À~ÛÓtµ,ÏÑ‘3'í çOϘõñºÇV_ÒʲíñŽg"·-üùäì}å*ã2wìxzúåY&RúÓ\þÌjŠE.÷'çÈ\
+yóI¤dTç—£XuídqT4Î3¾r)O¥p ­­N_go¢ÉÚ²­ö”\´Ë®g{ÞªLýÎÏ”ÿÚ¼líÜ(Ùx"5ò ¸pîÝúéì?¬S´2ëþ™ˆ¢‡“‰6wNË{5.ŽÆ«+òÓÏ<îq4Íò Ä%ð@ì‹Ø}*GÕ8à¡žÊb¾ó¶9_ÏÖügÒÆIà“ÊÚmÑv˜‚Ttü†# oRú¡“hIò?Ò‚GÑS9µì£ÜJ­SÕ!‚åe•pSð©M_”‚éÃä·Ã/&ÒÎÏÆoWêBsȧ¿x¸©V´‰!ÞyZ㡝k_â7*{Õ ÌéPÈ£AOÙv´(—òÂS&›¶Î®œ•`ÈÐØ­vŒ.önH{ç¹lñú$dzAV?·iW7Ÿ÷=$–¶RO_%«)R–j'fqè.ÿmbvŸ¢üF™"níI\Αo+ØB/â/¿
+€7b‚¸^zZAÙYk:6|J¸œãÍ%9¦\¦^– n”ú‰âòè(n%mùplˆåRžZŸ^Ôž qäõ6Úh‚>¦k‘§ÎàVÑsãH¼æX§ñûã4ã²Ôk¹ñ§°%5êà¡%C­©¯õ
+ý™ì ©xVÑË_ÑvÚ:%ʧË[nö·"‡5ŠLV½‚e³òçï;Ónk#¸”*½®ÎYˆµ1;©’?þQuãmÖpAঔœVÀ½’4œã;NG“+J㝷Ä%¡˜Ó)Çðæ¡g²€1…ygænµxrÌO4xºý ñßI¦úþz9¿¢,Zªzõbѹq}^]qt]‡xG1—·6%j¢9Á¡»&SZPÍüI•kTñâÝñ"e»êËl vùOÜLDëزøºc5Vfô§Ý¡³ãk P…|Ñ0´~Õõ¹³p»~±¬kø}ÑáõÓož«WòrÓ2.úð¬lP¨I ô3éEµ·ùñ;Sb>Ñ/&z]óÅ”ø¿¶šd˜…;-Õù†úV” Iÿ' l†¾%£{þ†ëšó|-Œëú½§
+Môxé®lîC·u‰éßyªZõ<Ù䓽ֵ?Eê;ŒÊœÌÌhßL,Õ†±)‘i=:Úä¾y¥5k{Ýß›ÄD¦öãú¯y {Š¨àXàÙs—…ßá
+¢Bw~Ó¶3þ؏<QÒ(Ô»^gÈñJ ödGIÓ*F\¯t.öeDß!xÊ^]ÏʾSTÀþÌS7mÊÂ: ˜öQ·
+…µGÎ~wNÞkÞˆ¦GùúÚ)f;hOßRÔ{[øo•ç¢jÎŽ²"v Vœ8/1IÔUÃf;Ýíš©2Ìî~˜ìú;ÖþÝe¿Ûì 0*ÁB¯àI헝,òH½‘e¢tóìf}à'oÐ,²²CQO*:׊\̲œˆËRсuJ…–µrtøå¬2ìf²Ø ¤/XZ’^ÎUnšlúp·=šdÿ”/ܶÔxÇ»ØËr°$ÁèÑ.Ùxݝ£GT¯×1³õKuÏ›k£ Q=|¬Ýìÿ13܏
+~e-ô6˜-][‹WHq£^xûö!Hµð¯Ïß³ Þ€œU#?N¢Vˆí/sXæ§ÜyŸ¦ìbeñt ÚKw°ŽïÿF®4ÊÖËétaÛÄÌ*_Bôª“XÓƯ÷pÚx
+’¶¾pœ.Þ…
+Óî±|Kºœìc<L=Åæ¨}éý#~ÉvR4¨ºÞ}®:™›[‡Â)ævÄ\/ÌDf§ƒ’i>~¿X9ôg£5ÿ†Û}µ&5×”:­‰D1Kj Þ¶â×Ø(òWX\®ŽWÃQémEBÞH°¹…Ï3{¾®Ø©¼Æd“o:à¸6øyFø$©iZlÎd‹g¶e¤lº)UL@.âÚªÅ{À±ÜÚ|+
+À÷¨SñÄ—zkÎS êV³ ÎÖô~¨†Ñ%zêÎ@+1ð à ê指–Æ¢c>ë^¢[¶B2l¼}f³Ñþ‹" d,+â3s<ŽQøâìçÛCC§–ü§ý!hè;Q~!hº†Z…S,ˆÑÓãjˆ3Y;nK~°–Wp´4?ÞZtTY.Sxy•k·øDGËßr·µT¡ÿð@ägÍ<ÈTÍí´L”À¼ÁšGÝ·]C"Ú”³rªâÿÄuԏ9®Â{äv°)
+ˆÊô×@ÏW†1,Ó:,›£‘֏¼–:1¯øOŒ”`ÝÚeÚ½g
+ôqsð³w'¬\YÙ,|÷<óc¨êüÊVýiuëÊý¡µ
+}ö´àÅ­Û‚Í¥]4Ÿ!±Ü‹EÜ‹:h±æÈõ,í…Ét`
+Õ¹—”(‹69Êßk“—FÞ&ìUKŸ,ZmÇç¯]Î'ÐHðîÖA¢“p8NÌôþþ± ò7DÄQ@’²÷M’öåFÆ“ƒŸ“Õý›CÆ#.Þ 5äj¼ÑèØ÷g¼[«÷s3üoãjf `»¬Zyõ^¤ð@qا£æŶüR9*ixbÏ<Šqt³þuâQÅ#>ÓMíÊìÀÈ%¶cœ„¸çzʺs%`gËô>§µ’kâëÇxo¡AKè|GÒôSxÆ\^»åÈžá(FNI…¬ù'œý7R)™ûµÂ˜óÖ%#±üø0ˆÍ¢µa”„ÂÍ•~¹¶-ÅŠQÛ(=˼ÍÈÈ~à›‡eÑÊiR4r×ü÷ƒÓÞ¢Äc±MëZ¼ðìø-Ä„µÝvÿ…™Æ10¹mËUÉî_Í·õ!NÔLD-ï|ɾÑw¦¸óò¸
+´D±y»5â™Ç¯˜ÓÖ:–è¤K^ŒÕŸ5Eú69ñå Òçcƒ·ä*ùvÙÜ'W‡2ÓÿR#ËôHÑ›á;wa
+rEè¿ôÛÕæ樆տÙQ‘ìvì“cƒà?Ë»m‘£HwÓr(†}GàPÏ÷â·RÕ>³}Äz£ñ9µò•
+ߧœA„©úì ¿þjËÚ.ã| ÏT8’ 1/+i›6­¹þåZ¿j0ãRæب¹Øu©e]ΔYJ8…Z))Äôå`R{*ìñ>(élÙߧ pq_Ô—¿E熨œÇÅ‹¡¿{$ØM;<^¡•{À¶J Öåæ>¯æÒÊSâAõsþÖ¿;rŠ‡]*9™t¸ -÷oUÝÞ†Ï_]x}8{7VìèÁt°qÑÊ”ün—âõ;‰~sKÎÇ&"º9l¼J¦‹‚Dìþìpÿw„AüŠvãº#Ô.“o¶•Ù®ó:újiŒx,ðäÎd]-ÓK ª'‹æúDÊt2À½·J¹eù‡°tEE/èQ8Ÿ˜–¶/Ö‹qùJ,ÇIy.[Iâw ‘¹1Xå}W@q v»žç¹ÔH¶#/J
+fôŸéq1ýÖ[˜odW;~=i6ôÙ GÌ6"EÛ›B­DfLSkfj4ƒŸ:E.=–n ©¶¬¡§kš°Cl˜Ûl¼û~V¿Ä­hg„œry¾Ô_ã{Nˆ•*lûÇŽX¢ýü'~ãÑ\ Ùwù–w^Ù ö‡Ž¶ë›Ã/ñzñÊY3ÖË­Š“¬ã†pa©‘>¶d ëv{s£ZèF5§Rº"ÇÖgUmá,<‹Û#Íæ¦ÇBBŸuÞò_8sQ±Öø5Æ]¨tÞä`ÜÙÆÌ8†l õWxþC…U ÷¹•¢$‹
+aoŸø
+Å®÷ø°ëäìÕ}]畹”óå`ÑùËÔ9%ýéÓÁV|öSwç·r˃k÷ѱÃïZ$î^ˆ²?ESc•î-#›6CÏŸݬGµÆt-òI6`WøòñÊËð%Î!7²jpoæ£7ãính4§Ònf}O³Ò!Â7q6Úa,‰Ð”~^®·¬ÝõÀþø¥P/“zúW+žá¤19%ð+ó:@g­JMsÔf¨tíÐàCºl“ j1Z}a’{²² õ»kM›ÂÊë¿ûPûæúŸ· ºc©Å5‚Òc]´ ÀÅ3Ob†õä"¨‘[ç5Γ¸— # 9l
+~šzañ¯€QWp± ‰ß[p`96µØ}wþµ®ÐRñ yïJ©EfËøaQÛ‹¬ºðiÝä[.E¼áŒæ²Tœ3Âñ£˜ñ•ùG
+~D·žò×°àeE¸Õ«Csf¿<_.øŒÒˆÀ¹g'<èÜ*ö|¬šïÐœfÒá„'‹Ô—ç1ñÅ ¸'}s»ŒbY¡Cãè×JòÒ¯ÅÚz%·zÞìogµKÖ-÷§|cïG„8C"]©òœž;hC«• E:ëPÅàS×ømÒÆ×8«XÇb¾èH¿­gÓmüË~érì˜Wñ=ŸÎ/àG<ʦ#Í2wö¶ß)”¬èäõ™¤îtT×æãפx:â µ/¦ ökÛ
+ø>4©[Ê캑Á«…3=Jû‡–&Ÿ®»^ ÖYqí˜^õAÙ#Oç‡Ùn™Ÿ)œòMT¼œ
+\£}2ˆê÷»hy¶ÞÞö·Øð×~ Þ½”ïI[ÁÃ+™yµžîaoWZ«C?Ð ò;WüY­dMeà3èEÌêŽÑá÷~šîͤdCñ£®t%Ͷ\‚äVåãMG)
+1c¹ØÝðøDt\‘%¬ ‹%æÙù¹0ÏüK´ 8ðœ|+¤# û~ú™\=êH&'µ7µÅ]eÈn¶×ïIhïžÍi¿…føÛ–¿><Cdâ1¬PM”Û±~"HvPŽõïöZév@ä¦Ý¥oÇVw7æ¤Ã×« _àr§§®G°ZÌé‹×ÑTkؾØ}Ôƒ…nd›g>” ~ˤ°`•}ZpJ7ÐB9íy”‚ûÓòñi¼úh<ÚŽ¡Nt×"ðÓÖ¿%!Ow»Ø;‹î.qÓöb¯“:¡ºx,fþºÃ 1(:ÞW.j,‹ƒéÛç÷9mŽšq¤CXÇ/ç“A±*tÌ,¥Ñ?¿]>àû"_{/I¨¦J©ÖÁ'Bš7õÁê)q2×ÇP mƒ=U‰Ÿv¯µKgseÀ£;_‚4Ö°8ʧÎ÷P\`XÚŽw_…£8æ yY¼åG?kàµ8Ê­ …¼©2 ¼ ¹™µ‚­ß绹¢ª‡»-7:µp÷…è€xí³‡¬i‘<u±r…Š’ˆ_Ö¦K©Cmßœ¥‚XOsžKߪÄ݉ýh9?Üü/Zy¦/C»Í„/T"OK,M“YÐ^mÑQçZ§Q ‘M3Å2l¾]¶D›çâ|a4ø½B*ßÙ*ÛtiòàoŒh<÷EDÙ3ŦøßæY8W_MÖðš6û‚ܦ$ÄvýßÜÇ´Áu¥tãoŠˆ³o‡)܈¬¡X^¯+Ö/äoË£Œ ”p ÈÙ[v¸Ò>"ˆÜõÈЖ“{ÿìÀFöJ<>}ˆãåx†Éë>ë» Ä'àPþdÑøìà-¥DœdL¶åj"΂ݼ»F”2ÑȽ×Z@›N£/1_ˆ’»bi§ñ®I
+4jÑs’§Ž Û_vs¶Q@_T¬×ÏšúÖï½ ¬Ì›Z›¡½Ì“˜s”.vⲐ ~Üö»î†KTùç³níÁ& žoE4D}(åÎdÎáSJE›Î£Vû£©Šè™N"9sKÃð‡¨Zþ=YºUB Èþô­Oµê¼%²>ÍIãð˵Î[;Á§³I m`¶Öb+ ÔM¬þðáb–b_ÇÊïº d[©ÒùÉÅ:Ʊ
+µdÎYóÀcåXOcµç}eR9Ò<fު+ìó«ß˜“&§ksO¨éQX¥3èÎ3„â´—ÜÖ.±QF+4ð9±¹¸Í‹ß¢´G,œÛ áÙкúƒR¿ÎþE± ®@0Ó»ßV‚ü {h†ß¹qãs¡ÌäÀz _¼ÔÛK\hêe(±2i`hö1Øói‰óõÉ©`H†Ïé-ß_þ&gd°/ùþê×UºBïCRÿyLÎñp¾ŠºÊÌ,slb0knúsÖ¶öËî®ÛYgÏ/­÷Y8Wœ±,.B,v©¸§>âùjÿøÕÆ\•ÌÝ èDŸòYîNkpÃ~*ÖP‘E…ûp3¹À¤9i<=ÁÅØ ð_àZ3LV¼áÇãMá?!ºøÇLM(•g÷ü®ð¼s±^£îuW‹[?¯ÏýIl@ðb¹¸å3„Ü1eê Ñ•<C8(Ä,½tr5+Xî^–1vjíÚy~ã'ìP‹5«c3]Û—cGÌvÁ±°þýS‘þ!7çÑìKõªmç*‘Ñ}sýÖK ž6^ì±HûÂ!ÁM;â:ÚõÒ02¿ô4ùàäü–¹2ú‹3Ž›Œø‹UÜ"Rp͈Rôtå¤aqéÀ2x7®.g"€/ªÏ™æ kŒª—pU”[Gv.–«ÎɈ)Dò÷“Ïejð…es™21E÷WihTL¨kaÀƒ`ª‡õùÿµy:/l¬Ç®£ZÆ“׸­¤ùÎ?Ük:^P A”p‚Ÿ#Ž‹Eú¾55ÝâBŸiE½e\Ú}>^Üsà h¨šû µ¡h[¥E7FG»ù…är9ÀwŒ:çÂDѵr8öp
+›Qöñž^ûÓÚþ—OrÕqþorこûën¢RPS×7h2ÈÑGfî¿ä0|
+–j]yz” Þ2 Ú}#;U¸žóøئ—rAüÄæ)êrhª(/ºÜãëî {ù³‡!þõjKzÑ’1-p•²ðØóxô¹šx£Ÿbvy2Î#7 ¹¸³]¢)º¦ “çü$P ðär©¥ÿüÕ‡px ‹D(CН³X#w·ÀüÃœ•„“Ýî†79¥jÏŽsGE¬·œž.è^ر̶‰‰ ÿ…vWë” 9mWÒkÄÄÇÞmòyZ|4‡›8->Ä·5{@i'äßÈ·(¾z·Æ:6ãYöXÇš]lèâÇGÀu% å[öqº‡žæ®Ï
+¤³ØŒô®÷|1äô-xAž[ª?üÓæbDaö¡ßµÁ@‚ïd`êõ\ñ€¿7È‚2AjD”¸VMr“K[,?bÔ…?½ E´M½é$L»PŒpi•w(Ï=·3ˍ’[ŽÃz! O¸–áí£7(}A#|7"±ëõh–^K•œ æƒH»V-{wðF:Ýíg‰Åšj&Ñ‚±åu“rÁX/k>ç8ÁXß‹˜×ó&:™ˆ¼ƒ
+z¥§XC/XÓ¤gX©€êM;‹{ yìu"ï·¢ï'aQ…ìâúÚRBL`WÛ#’‹VßRB²8¤VlúÑqÓ¡qÞ‘dM*·¶àD§c/F6eر7 œÌÿ¥¾ÌÁ®o=}~qyúÚá«<¦ƒÎºlýÔ\ýX¿«L™û+ŒõSU˜¢’ü¤¿…Íé ªw¬š4R
+üéÝaxké<î[WQ½™Eû¡w6œv¬‚Úægk‘E>2¼/l`ØRÇdÙü<¶Õ;ƒ”iqöRvÏJ>ÿ%¯}@é/¯®ÐkwÐ î X¯)óʆH ¡Qà¯ÕçƒÀSÙ´åÑF%•}¬Ò8AžŒ_pHª—Å+e¤ÊÛˆ£¤}‹òâÖÑëðkO¡Ûæ
+OˆÊ–CfÊñh´ã¸À‰¤Ï9[‡ú*›þ×ÖÛ»¡à\L…™|*Ìò4GìÏ>$ôL ?¿.Ɖèµ<nW<o‰'ܐl4³ ï&{^˜é$0=–ªyVÄþà‚Ag“¶ÆΪ2ëµ"×0àH»T3BôÆ’å Š»ëT¿bDéJoÕW®ë\mÜÅ*»ÇHƒs ºÒ+s$uÁír Ú=)SFÉlh*ÄMìÁ¹lªl5uÁH·ÿœ?a3òËæâ`’ë‚WÿåèQZvÛñ|› ݐmÏrx¾sºoÏ­ #¿³®ó
+Êšˆw¦·Ç]_<7†¸-_­)JìÊÄûX̸ƒ`è0µ±ԍ¬©wdkF(Q:™lŠm~QÙ˜ÄÂ÷ ‡i8Ï2wyœä¡º}3=SŒy3±Ù6pöh WÄ]©áçð;c%¥å®cbÃ/Yì΄æ.¥œ~Å–GŠGöY°/T5©¸E¿õ}±Õ³áíSz›>GõÆaɻ궐dò…¬~Ϲ›ë©ýÓ¤
+„­zZÝÕÌìçkAô&ÒÏT‹Ø „€š«›n­ÿ“¼[
+|oZn¹’K~²Lj7ŸXó^t>ö•éñ¹/ÔhùWfjÊÿöÏO#ÿoè30zëu£Ì-^Rö\à/WÈè „lò»ÃnV A¹.|š+×\<ÜA~¦B¤÷ëø; È¶Âþaicê’tp”͸ðòX¯ûÖŠ«FÙ[v[qË´ËúvÚ›öÊ¨7þ©Ð=¿zv& ÚÖe+f0I\€‹W2ŽÅ]ë "äЭ®»¦þúŸ$Bpáº"9'?¶Ú£ñÓC ð`Í­KEñ¸ÓÍã&
+ãÑáTŽ§íÀÏêà7†ÃRï©CùSÊ÷ßü³ ~¹2&1¨nß{ÙŠVÉcãP¸%ãsùšÃ›.V”]9_ ð’ˆNR‹¿’å(„õÖ ƒâ<ç}†fœÓ«Ißã
+óô²ÖßÉI½ôN&‡\îm(påWÎ#·ý#Y9W‚Ã_F5‚yLÈýQõFî蹁âõ鞉޹ë¥W–ÿQ¯Zsâ¿ ÜSÛ­Š?Oy!fŸ²¾Ì¡<Ô“Š.¾X$Ý-‰LF}xöÜ»|Ú†gÔéýS—ðÚõ'‡ñ©`ßÅc¯â’±'CßG%h,€éå4_ü!ÞÕîi`tq•`”¤ÞÌuâûW¬~UwŸXúLÖdÌGØÚÚi.úëz{ç”ñÇE® ÅE%Ò Ó7+O¬‚ê/×ÍåÛ£ÕFÔóJo¯Ä«Êq’u‘wþ—‰#5“=kËé­Ìç’î¿y{~ÛP7yZäKÊ”IFi`Í*~ÆÖõ€eÕÏwõw‹Ù~Ë[·¸í¦>¾è²žîŽ>ªºé»û¦4©N ¨òu× I<
+ÖHúþU¯± ÐO_ŒpxdðË?`WÌ£Ô/ÏáyñœïDñËÉ™yt$ôPÙ=QÌÛ*ó:—ú‡á6$ÿ>P1"ˆ:ñ*p4˜ádÙ_šÀÛÅ4Ví«†w¤[Pió¤?H´ …㑝„‡zçŠsûÏÄc=? ]üyã/ 4ŸîUÕà,°ø—[½±b£G=ÆÐ-F±du ä·Á±ÅÅP>žÐµöàÞë!F%m˜V.=Á{ñ…2iïìQÿ€C{8ÆÆ¢cPõG†»·ç÷`Œ­¶Nˆ?!NÀ[µî_¯ã‡OožïÇ)0>lHµÀdw¦kÄ~kÞh¶zÎ[ñ4÷!íµhÃ·ß€Ÿ³âwÜ+[AÚãb›=øÓ
+´vWk''áçgz©—ïTïo¯_ÍI»ÌË.×ý=¤´Ÿ§4¿
+è¸$²ç’ü‹2Ø^xð:ÎA 7•ˆ‰ F€¦×†„ 6w ãæó=©B*‡¦K§ˆJîÜ\ÁUÔ±"„É:†°êùa…žáï•~ÀJäZVŽ–Þ]Ezx¦;º•Ó¤‰§«ÜBê–{¥b&Rk{äý4¼¼µy®) ³¶½x•Xœ]'÷žq{ö~ÒßËk1JVf¯úž5]ÎjGQ<›zÏß'> üx‚x°K>nغŽÒüäe²h÷I±þq#¥Ì–Óôþýbeëã ùi;ü”{*)oJÒEß.§“›í7’õ–¾ ûd¥¦=Rƒó'hqLÛÛÎù„Èe¿º˜£$´ô„GS¯È©éLÖMéÓ•r«ô¯¢¬ Áp½g‚iüÀô0‡¦£Ü5 >Âëz㱈,ߟƒw´­eUŒÌ犬b[ºgƒ<&yñ&8×–iaUS調ÿ~^ºç™E;ã´llËE¿ŽeÚo©ÿæ‰ÏI ÍòÞÙIL\\VçñgáäÌ%üêîÆÜ­4?¡%öTÙ\(¸°±ÞL¡(ÏS‘µV@ې XqÝ9†ù0rQG>û¼Dåšì–¦Mº³Ï8B;ðî<EfðÝBBÆ­–,‹3ҍзTÕ®>1C¿ÝÄPƒck¦P
+ Ù¸ š‹g¶.^/ûÚh5 ÁKñ¡i:¼¿â‹n#›8Éyw5Î[EæŸyz°8D§œìØ¿ÀmàXöÿ(Ynžfìœæ'¡(÷1wÈ¥ ˜óŒb$ZHQŽFß_ÉJꬒzÇ–㌞øtC ’z¤¯ž-κuº+þ0ý 2Åû¶s!x-6(ôâôñ;˜™ÓPöÁ|OÉÝÏê«Ãêféåu%,ÒŠÀ:Ô”'!6Gñ/E78+[Œ6Þ:·^16üæÓÉäàlS­@/jEÁ¹6.n\\1é–ƒ»ÚJ—Tþÿ9¬]Û\ª7T2µÎ‰Y¨¹d8Û“±Ò¸z?0G#Et$2 Ƚàaýñæ:¨pûp6Q*‡çóÑ ñØ<
+ÍÛÏ£.aüCÊ{N£p¦Rd§\g¸ÊQ¼ [R­3yü6þêîº$°àN3£¤ÁtÂÚÆŽk}JDñ¢¸¨•Q¼¨×*ßR{Ke5Á¢
+Hùç ±`•¯ïádïyëÀÈ´òÓlOpoymdð+\v Cjn<%Œ®$öR@l
+|HP;Iäi§<à={¸Îò‚~3´¾ß§ÏúSšuÁ¿Û®N-rkëáðP]…Gî1×°äÌè:n©Î˶¼Éô-fì¬~šÛ`¤‰ó¨Æ‚*X
+Lág±oª0gÅeüuFˆ­p6´ˆƒTl۝GDö_£yhÞ›•=³
+^[aÇçÔˆ6’<õ
+>™>Ï*ŏþÜ'~½ë%¡_“fJ
+vG¨§J2ÚI kËßtbçÓb½HɦÒÂ6Ý.so®yþ7øο^IÖ”(÷å7º®ðñêÛ¥ÊæÆö$·Ö‹ÇsãœCÔ™m±;û’¨¡U
+¯“U´H‰•}F§Èz°ü³çœ^nI­š.pþDÏE\ÓçhüØ®cÐãÍH{ÌÐúÚ/ß7+ì{¸×)Ѹ¥³ È£’—hgÅE "d`Y³°Þ¹ØXîBÞ+ØL6¶›upÃîI¡9€èTl?ιÃéfÚú?‘Qîû‡;uaíbÚf QÓ¢Rã½s!®m ×U‚‰ƒ ‹
+ëê‡*íg0=žVðà”¸Zq˜¯a Ó0V &$½ù'7:;PéWÃìr+­òÇôè±¾@?Þ‚;ƒìý.yà(õ”]X–cƏìUÄùO ©×Åž›ç+âó»-<r¶²|¢Ë>F{†¿z}Ó©uš!ƒ­ZK—€­—rØš;Åç{HhC Éë3-zW`ŸÏðÓ*ø¶ík¸h96z쩸1X/§m¹Âüäð|ò•oª×ú ÑNêhÕT†–³´JƒcØe¥çòÑa
+gøÞUŒ½nÒ¬z ÷Œ‚ ¾êû˜_ÍŸÈÆ}ª\D8ÖŸý‰‡kïÉ{îkárŽœqÜQ"ƒ¾Çu9ØÙ­ezï 'AÌÕ6§Ý¬aÝ-6RÈ7`·+‘ñø.ITvIÄeJˆ dÔšè`êÌÿˆ
+ñ<ìwH3RpIf ]^²A…ô¸¥QcBmtáö wšœ°Tÿäqg°ÒeG#Ìž³J‘ÜA%z ñžŒ2O (+ž£imOåæ—h)´ØƒúÁwAcÜ¥ïÚC­›V­–­ò°qÉö3íw²j+ïMC–Ÿq¶ïjA©Þó­¶71W€ 2fåžr¤Žz(92j·²ôþÕl¶€¿¸?Ï|nZø4¾ƒø€’t$#·ï'þk߇þu9^WxÅkׯr(¨ì¬kòï³ 3ŒWm©y
+ýÃW¿…DÝ÷²+ÿ.¿ýoÑ¿¸¹§»"¶×g‡1
+Õêm1í—#~gÙå:aŸ7yÞÜ}?®Í¼•Ž­ZÏ]/ç]v´ÙÍ[:qIæ¶Ä=7êHŽMCÉ]o«gPìžÔԍ”
+\öTkÿˆ2i¤7æYøà4+]úOËVXƒ,"!.ìѱ!?Œ)Þs)p~S9ËY¥evX†~ëç¤Z(¹Þc£—ºÈ?´xuë€AÙŽæàøüòõ< C5z/WÅ4¶6m,m£ƒá@ìéíÞå•ùSvuùpEråôŽÙ”¸šç¤ò:Ü]†Ú„DNæW©WqˍÿèŠ)u;ô4ñKˆ5 ®ù]¸™ìÅþqôØßXäš6}ÚMA¨û±J¼¸T=ÊŽ RFö{v,@WrµVÎo‡Z´GRZÞYÛ¿9ÚË_‚¥º«?g…O˜oÚÊhœYB0°»¤F¨_‹úI2µÎ
+é-鱃
+²3pSè€voþ4/X%¸S§|xu£€ÛÎL¬€ç||ù¤Ôÿþ?xFŽÈÒfã4
+W²ùï™Á¹õ·Õ*¹r@¸Ô·¾yc>m¯åFÇqN(ø¬@ݯ>³¦Õ¡Š°ØÝ&èeÄ6à“=ز¥WÿáK?vfu¾íd¹Öü#ÜÒúľññr·û¤c¼×=‡ÐM‚éù²n€c¬Åº`ÚŸaÎŒÛ-šó²t2©dAiþÁS*OçoEXƤ¢èyCä¹Û[·#=,†‚Xƍ¯9·ønu*·ëlw¼Ë¦£kM—Ü œAEçlj혿Ӫ`–ËçÑk(/Bi!öñäv¢¹c–r;°¦68ÚÕ<€üË|ùx‚pÜŽK5³Ž±
+LlåƒiÕ|UPc­1µ—u=X—äYþ 9^-MS;^Ai‡¯äýïï½¼ÒO/µþ©TĈˆWêòȵ¬xœÃÙkžQA/GŽŒU—jÏ—;Û=mã_X#ù«P_6©½*c"‰‡ðÇSvÍöžÎ™ æµåõdÅí`ø-.®¶?ú‘¢ZWwÇÆöd·Ä‹Æ˜K;„!yá=âç ü{•¬€ááO^ µi<êðݍCEýº2ÍÙÑE›&h^PŽOÎü¦N`JЏ:bm±—È×+GJÁêOÒ½]Ü‹œµŒ­F¨_ìÆ~ƒêŒSV  9ŽÙ1Ie=Í[þŒ†±ëÈQê #ÔyJš]Þ
+)ñóHú>V+ ú×ð
+ÆÐÜ<³H‰ßȁ¶ƒÔVƒ^ Çré†u3,¯©úEñv6æ\ÁðhÊl)Á9œŽ7:³­_q%#­ ><¹:]/KvKu.q%{éÑÚîêOcuvÂ6ümÁÆvYóæÿÿ™šï2b–õY÷
+®¬2­m_±ÃM¶oÑÄC€ýKJ
+îø÷¨×þôþe ]”†åßZZšgmL¯ˆEh¼­ T…ðOž_¸\¤ˆ€Û1¬Þ~J¨úK·Ô±Rߧ {Ýq„ª–DÏDPK xïã}•'ß½夝Yf*çѯ¶_ìŸ:õíÔ‚½Pìµõzd 4}Ifœ1Wѣ䊉‡¤|ÙîzþÖ0v?8Ê’òV/ŒVnƒ¶Î+¨YBÓ‚ÒuT»[vï¾ÅÉÝ•¼«WÕH¸Gt£ÿ­7Õ¹‰wü(•‡…]÷€ª+&„ÿhƒüPÆr9CMru¨™»Ygâ£ô`Õ‹ö¸ñ$=Y%ºìSŠ€À“ų»è+ZšÓ°‚”<:À³Óp]šÆUI‘ÚRÛÍÏúpLa£êsS›E ~ËܳÞ:Q§C‹?‰ák˜ÓÕç~<ŸIÜ…‚~õêàÀÎŤvÁÝ»‚çlÙ1÷P#ª3ZÖ?
+³G„ bÅ6òuâõš•œ„{ÙiIu…*Ë~Ì®’­D#TjYyžn%q¶üz‰"ňû,fìWä7†y^.5D­‚ƒ§¥þ䮤z(´GjTz;‡ ]#úÛU£wxhº}äýSŸñ>æÊ)$:rÑ/]p؝‹¾óAÉöµDʲ …Ýßýâþí×Õ[pQA:”î IaÔè†1ºa"J‹ÒR#D`ôF7 lÒ%=jt¼¿â½ãswnÏóœï9ǤÏ]éÊäu³†$Rº®µZ·÷K
+ñ";ZIK<O<óŽß*̤îÅË)Çã÷ìµ2„%úh¯Û·4T¤¿Çãù5ÛÈ‚B _²Ù?»§§2D¶
+3[œ2z°
+õà˜a­ânčÓû±W}`Ò ®ìâÇ
+£kº}a€02±·@ƒ#ÍU~h.j¶¥"èhXÏcaöLþÑ~&•¬
+›á:&æÇ
+†øÆË1‚•G`»._ö ±ø{‘òûýÛËž×ê<^ J;2’AN3¤ ¬rR=ç+…§c:þhWJ}®Cvf×È D})YX]Ã&x²/x× ‰+ +¾k¨–5Ŷ†à¥`{ð›i¯|ÕÐ*ÀwjÖŠ±!œý`:s³ ¢¯›yæ¢<æ_”o¨*5(,‘e–—£[ <9šê>GYµJ©¸¡¶ÈQс<Qö\+aÔÊ ¸]úóÞòÉòçfÆÀƒÛ‘Çm[Jg‹¡{Ý᤽Ϟ͡jñ ¾¿4Ï;3žÙt’6UÁÕdåÃÅÅòçz¬Nx‡p ›ÑK@ª<³'Û÷‹9Qæ̐TÔ7÷Óu©ºuò1NN°|˜§ÔêÌ!¼°âœL…Ø î?ѪaÜ{±QùqL _ £>°ì{Ñ—£l  b^ôË¡‚¸¸°H'\ÿÔzÍ+‘íï«#65Œ©aɃ¤âºõ´WW²\}©¦‡cÕQ!êzï}ÊNø¦JÉ2h8;Kdœf2žqÞ•ÏÆœïÌÚœä £Ÿ‡úçíï÷ºš®u=ÈÛ²D׬åBì+©˜i9@H®±"Ñ®ÀÈéVÚ+l ã&=wVéy¼øT}©DvšM0é/øi¼*+›Ì’d\ð_ÙI ÆgÉÁ±jÁ…ðSºzyRÂ䜤BçY6Š°ÛIÍ";Véðäor 4ž`àÙjìê,|zªrãÜëñu?çÀnÝ2ˆ£¼’3û¼v¯·gôâ'X#xñŽÙb˜ðÍÞjéxº×]ãî Œ[žŒZþ0º+<ºÛ]è\‹1”…6,.u+ŸÖDÙ‡Áîg¼î=æUKDg¯E¿à“³HBÕfÎèéj¶éšÞ–F‰¬1œ’¾Æô[)W|F‹H¸BróHýYþβzoÝaÄ=Š›ùïú>Yö:— Xm™Ç
+˜5ÑYG ý÷²_ê-ÔùíÙ·ÅSÈ’m©!sÌSjXíóä•Pͽϐ/€Öÿv­¶¦Râ„N˜NJá”^ðóòåÆBÏq™õÙÅIvŠeß̼Š/‘$noÿxøî¼PYéü‡Ú¹ÝÃ.ÙÚÚ;«)ôÆ—ᵇ]jÆo¦+­W¢Ÿ13™_<ÅÆÅJÙ@<÷Y1£=µî{Ç \‡×kT“'xË&¨ß•<Ìßý°|¹˜„óå50÷:¯&j!Å/¡™ƒ~Ð@J÷!1Mï
+•ú-gbÁ= º¡9ßïQËûéÛ æ3×Ö]åñ°!¾ý·)óå~fl|nØ°61ä²{-¦Ñ~`úÓó
+ñZ«živðsˆeÈø—<ÒñŽ¿ÔÈHI¶/—MÏ|M”±Kä}T@ª\œ®f¦–ýÎÌÁÁ³¬4PÔÿŶ߿¤Ëò”€þ·ãÝ;ëH“ž Z‚6»k÷X>ïøEÎƱq†”fÎûà…Pãï¥.Õ-šî¦y”…Öás‚~üUöYÑCŒDA„;™ÃN’Â[7.û›8<BÈÏáM´‡íÏeÚ“‡¸ž”C£µW„Ç*êùÀB•ùN-cÆ-)Ùvº•‘P™Oç3¡ÍT¬B!”Èá{Ys0AÏô•>!k9Úšê ¬äRŠ§//ŽǏ¥ðß}9’ùÌn9U&©™³°#œîá)“Û´ÙZŒÔŸQ©ö^-G™'î•ë"í]6Û‘Ç]†Õ)¯)í„‚Y.ŠÖž’‰=–l$npÛìïÛ­éijóî>ž¢êjy¹Âqæ"èX]UŸUéÿÄÿÁiìW+ie*’¡ú=ù/xDw øiýq
+Çïút¬Ô/腏š/¢ñËöc‚Ŭ“{j—‡úÙïHŒH„ÅýØX®YÄNÓäGX“ü¹6<£¤âäeô=fµbÿ)3Á®Oåm¶dÐ5!\š²cœf’5k¾{úŽ»“@±Áh_—Ü
+ ñ†)·¾Á
+õ»4¬“óy6C'
+¬ŸÉµêÙjÌ^£=òO_wؽVhXy%–Oz.ëË°º<NéŽ|æ%=«€4xuvšÙX
+U%öúŽ 'Æß®Ÿ›¥n~] ©\)ÆËÌ7{쁏>ãÝzcågzz‡‚ìÆð;SnJ#¼­5wŒIäÌ
+–îÁ|Wl$þ+´‡ý‚÷ûïËÛ¼^ÃL=Ãþ¸ñàÒ\˾ê
+Jír€g!œŸf¢dkâ¬d³z&ì-õ dx¹sA0wèìrpu;gu¹·réÈÎÌ@ËðaªÒ7EG¢& {#“ -([â؝i/¢¬ðûÆLsbERƒ•ó¿÷æ¶Íúç3gùÒ5®ÖŠV0c©´â,œW‚Hœðàà™Iíà™ÂA• ØMÜtJ~0x«¾æ6ÑFŠX6ï᦯ŠÜ‘–@”ù}i˜O7aÛ“‰-Á§øª\ ñCÏö™ Æ¥<ÆeSˆü¤ˆcÔpp­§ìñȄͬ¤¦MNûØ¢"ô7½’ è!QÍÙ€Ú¥àˆ|CÍ+ùpP"ëšÁÇVzCG'[œ¨7<ú²ÕÍýwˆVa úšœa'ˆ´«üègèw]êçý…ÔäÁ£Ž`g6¿7e?Y珶GÊŠ°0ý;LÄ%OVò*iÝ;™…›ÌL› +\zÊy8Á®ÿ:¼ØŸ#®Ãèœì
+»0e"jFìnò$Û»D#;ÉNofýüÐĉ,®ÔW`½•íàý”ºòn¯¼E`ãt§
+?§ˆàLJäî#ŽLÚ<ü#<ƒì”-™Ø(9÷¤ßoékñbÄÂ:¨é
+HŒÙqå-j8pÒW¤Aõ¦éJþ)ð/’,r×Ëñ!QMÞCÞxßáQÑÑÑ&ºÜyò¬½‰N¯µ¼ÿjű’?@×dfÒ"˜G¡ÊûZlk¨jÔ>hN¦—1žµôã7j½Ýgn)øT¥Ä .§bïA#‰>ÚhrqMèsr½åö´Ø&Z‰‹¥H@”óK®£!Páv^GÒ¤ªû¯ îj¬ˆ*3â†Ò,˜•È‘bA¨©Êˆίœyœ
+{}£¾Ø+AQݦßSs
+Îs”s6֐ø/W0LXíw²Ü¼Úƒ€‹ÿû‡äAx2bD´ÉMýa“©\mfØøÍɧ—ï7Ñ·¶?"Ý`õ`C_¾·¯Ã°l|éÅb CÄít–EYsì~OÕøhß{XrÕØ©rΣ`çËûDÿ6 dw´3ìRó IIòcU•†ì}¹¢
+˜#¤¥Ùý[éY*òg8ÏÓ)©µDàƒÈUî_™z:4mº2lú·rÀ‡[K¿R¼4«E™²À…jåÕNŠ
+~âPœñoeþ£©Þ¤BGݲÍñWµUb¢OÜ*¿ÿ,Å%72aë³sñ§L÷ÇéûlvEct`À܉–²éžk«Õ4<WGîY2H'.´Ò²ækQ?
+_tÖÚ’{6Á3á²zû²ÒȻ ñµÙÚò€þ?k^粤‘üdñšl§xQ°á»ºj¦Ò
+†ÜX±÷K3¿Ê¼ÓIÍð¡dåFsœÑ9_—ÚsÄíPµœ¼v«úo[gæ¼S¹´[h«šä…!;öÙ#âX$PÐ÷ªeŸt:o¾ngªè˜žÐô‹¡ÉCÏ›¸é¥CÇ'V·iÃaŠ˜Ðé,€Õuû5Ç@éWebé'4Q˜a:šdõ
+£ [Pàb–¦†üŒ9Øò]õí%¨÷ÙUnŒø6C–(ú™Òk²¦×·ë:…g."²~£•Â «ËÞÎê+H¯eÑ°Éi×ð»É0©M̐Qô‹8ö*ÓÉ ¸U'iåxÐbKáS½V˜¯¦a–sÜ£´}w~¤A³N:çl´7Å¡3ÎèY
+ó‰ˆ8 Ì}%s³ê:³ÚÂ$:d4Äéé´¢‚s±OŒ`'ðñˆ¿Ö¸uÇ>KÈÉ 2lº
+ˆ$6ÐYTºÕ埆&yæ½Yžñ~s›8ÝÖ)U°µFBJe(*¿÷Ò²~I Ï
+H®ˆþþýì&aÿŸç&)¡AœÏ÷ûí,¹b÷N;eë3¡‘>¦ø"#@E×–·àíFP'Ú(çÔ؁f=dÖœ[ÎGšyíÙ \”äÓyµ·ˆÐ3b*\Н3åf¬•A9וxéË¡c5óݯ„·ƒÊ›¶éÒö‹—‰
+KŸÕyŠ­r‹VZ¢S„X¨N[J ½*ͪ¢£œú˜¨=ôªƒ+¬% `?¼9ì_©ýdº˜3ƒ`¦8ØíUè"!Šmùï„¥ÈøÑ_¥/è©^dó/RðùTIO)—±â™î¶çŒõÁ§!0¥£ÕJ¦È^±W;ÛÀd†ôŒŠ'±ŠÁEOÚaJ™áÚéOøäæ3ÄõùÂõ%þúêúò~X ¡¯±Ë«B§R Q­¾pu[eð~h ý/(A<ƒ­K‡¾Õ3T' ›wŒ§3@¬‡þöÊ^ÜAÛT¡iF¢gÀh¾ùxmÈ[^I‰^Ÿ“÷V*ô;©4ójMgï¼ð Kô¼t8R”+ôuqvFŸ¿Ñ’îDWŠàÃ.»"&±¾IWð%Ëi~‡1îÑSçʤ… ¾&¦°Ö”F÷Hšgå…vÜ)ÌÔózÄߐ´« •*7•h3ÊØÜ­
+îJ,b›/"ü‹†Œ’,΄æ8fíXyç\ô2$ïܬx°ØG ñs'ƒ»—zgÁ· RpóÂÒ=߯øg›ÇÖNh±Ûøû!ZŒSƒùŠª“•¦ñcºË¸£JËÀ+çC™éæˆíSÌúqÖN`s²_j¹Òn)õ ©½˜…w´À.f›z2~Ι‡˜1KèȲp+¤d¼9ËÅMéáöUt®~e*¯"úpʁVe‘2ƒþòÍ ?v*Pwû _ Hy˜WÒdâú๸„˜ôՁÌlydx&^±·Ê­®΀~©uŽ)é“úk’—lb›Ó?Ë ¢,&шؓfåIyjˆ÷5+½Ùtgèr#Ç4~¡~¯Yoòš5a{Ò<ûO1C¡¯ôLNüŠdw6|áWÙU/á¤U7õUV®8y½õµlÁ$Ò|âÀë±cʼnÆO†‹G±€[Çs/Ê>…Ñ_\þ6/- ÛÔp׿ìL¬¸RØ=vž8` ;¹„”—Ò+©Ï.à×Ã@A ¼»Û2¾¡ñ[ tJ;<ÆÿÌv7M L!È_ê*ñ¤ÓôrßøÔe~’
+ýR'ª.°‚¼Ý¦pJúg‰°éZ˜²WðѺ
+°íǾòN§Õ²
+KŸc#fdÕ)Þ(F“?szo|}†˜8T=*ƒ»=¶O5©Wo.|¥êÑ=´U¢
+ó¤ÁìH ¯Ê0¢•ßãç浪ìš\…žÆª«Ø‘m ZåTí¾½Õ¡vRWg±²C÷¾Ö9Ú½§}—¿Î´*~Kñ¡E›ª)åÉO©–ß=ñ©qL”™[\6P?m—Ê)x»{é° ÷uûŸþœ¹P‹ÊUV@ÜqÅEUÞüùQ.ú6¯’íØõ ÂùòKÜõ2Ä}$•®ñ‚#€êJOà*œÌaäP¿„ܼŒXrÐ%ºuãƍ7nܸqãƍ7nܸqãƍ7nܸqãƍ7nܸqãƍ7nܸqãƍÿ·ÿêmf×@
\ No newline at end of file
/branches/dynload/boot/arch/ia64/loader/main.c
44,7 → 44,15
return;
}
 
#define DEFAULT_MEMORY_BASE 0x4000000
#define DEFAULT_MEMORY_SIZE 0x4000000
#define DEFAULT_LEGACY_IO_BASE 0x00000FFFFC000000
#define DEFAULT_LEGACY_IO_SIZE 0x4000000
 
#define DEFAULT_FREQ_SCALE 0x0000000100000001 // 1/1
#define DEFAULT_SYS_FREQ 100000000 //100MHz
 
 
#ifdef REVISION
char *revision = ", revision " REVISION;
#else
78,7 → 86,6
 
 
 
version_print();
 
93,7 → 100,30
printf(" %P: %s image (size %d bytes)\n", components[i].start,
components[i].name, components[i].size);
 
if(!bootinfo->hello_configured)
{
/*
* Load configuration defaults for simulators
*/
bootinfo->memmap_items=0;
bootinfo->memmap[bootinfo->memmap_items].base=DEFAULT_MEMORY_BASE;
bootinfo->memmap[bootinfo->memmap_items].size=DEFAULT_MEMORY_SIZE;
bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_FREE_MEM;
bootinfo->memmap_items++;
 
bootinfo->memmap[bootinfo->memmap_items].base=DEFAULT_LEGACY_IO_BASE;
bootinfo->memmap[bootinfo->memmap_items].size=DEFAULT_LEGACY_IO_SIZE;
bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_IO_PORTS;
bootinfo->memmap_items++;
bootinfo->freq_scale = DEFAULT_FREQ_SCALE;
bootinfo->sys_freq = DEFAULT_SYS_FREQ;
}
 
 
 
bootinfo->taskmap.count = 0;
for (i = 0; i < COMPONENTS; i++) {
 
/branches/dynload/boot/arch/ia64/loader/gefi/HelenOS/hello.c
5,8 → 5,14
 
#define KERNEL_LOAD_ADDRESS 0x4400000
 
#define MEM_MAP_DESCRIPTOR_OFFSET_TYPE 0
#define MEM_MAP_DESCRIPTOR_OFFSET_BASE 8
#define MEM_MAP_DESCRIPTOR_OFFSET_PAGES 24
 
 
 
//Link image as a data array into hello - usefull with network boot
//#define IMAGE_LINKED
#define IMAGE_LINKED
 
bootinfo_t *bootinfo=(bootinfo_t *)BOOTINFO_ADDRESS;
 
177,25 → 183,21
//bootinfo->sapic=sapic;
 
 
int wakeup_intno;
wakeup_intno=0xf0;
UINT64 wakeup_intno;
LibGetSalWakeupVector(&wakeup_intno);
Print (L"WAKEUP INTNO:%X\n", wakeup_intno);
//bootinfo->wakeup_intno=wakeup_intno;
 
 
 
 
 
{
UINTN cookie;
void *p=(void *)KERNEL_LOAD_ADDRESS;
UINTN mapsize,descsize;
UINT32 desver;
EFI_STATUS status;
EFI_MEMORY_DESCRIPTOR emd[1024];
mapsize=1024*sizeof(emd);
status=BS->AllocatePages(AllocateAnyPages,EfiLoaderData,/*(HOSSize>>12)+1*/ 1,p);
if(EFI_ERROR(status)){
206,10 → 208,18
return EFI_SUCCESS;
}
status=BS->GetMemoryMap(&mapsize,emd,&cookie,&descsize,&desver);
if(EFI_ERROR(status)){
Print(L"Error 1\n");
return EFI_SUCCESS;
UINTN no_entryes;
void * mds;
mds=LibMemoryMap(&no_entryes,&cookie,&descsize,&desver);
for(i=0;i<no_entryes;i++)
{
unsigned int type=*((unsigned int *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_TYPE));
unsigned long long base=*((unsigned long long *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_BASE));
unsigned long long pages=*((unsigned long long *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_PAGES));
Print(L"T:%02d %016llX %016llX\n",type,base,pages*EFI_PAGE_SIZE);
}
status=BS->ExitBootServices(image,cookie);
if(EFI_ERROR(status)){
217,7 → 227,7
return EFI_SUCCESS;
}
}
int a;
for(a=0;a<HOSSize;a++){
227,6 → 237,52
bootinfo->wakeup_intno=wakeup_intno;
bootinfo->sys_freq=sys_freq;
bootinfo->freq_scale=freq_scale;
bootinfo->hello_configured=1;
 
 
bootinfo->memmap_items=0;
for(i=0;i<no_entryes;i++)
{
unsigned int type=*((unsigned int *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_TYPE));
unsigned long long base=*((unsigned long long *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_BASE));
unsigned long long pages=*((unsigned long long *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_PAGES));
switch (type)
{
case EfiConventionalMemory:
bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_FREE_MEM;
bootinfo->memmap[bootinfo->memmap_items].base=base;
bootinfo->memmap[bootinfo->memmap_items].size=pages*EFI_PAGE_SIZE;
bootinfo->memmap_items++;
break;
case EfiMemoryMappedIO:
bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_IO;
bootinfo->memmap[bootinfo->memmap_items].base=base;
bootinfo->memmap[bootinfo->memmap_items].size=pages*EFI_PAGE_SIZE;
bootinfo->memmap_items++;
break;
case EfiMemoryMappedIOPortSpace:
bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_IO_PORTS;
bootinfo->memmap[bootinfo->memmap_items].base=base;
bootinfo->memmap[bootinfo->memmap_items].size=pages*EFI_PAGE_SIZE;
bootinfo->memmap_items++;
break;
default :
break;
}
 
}
 
 
//Run Kernel
asm volatile(
/branches/dynload/boot/arch/ia64/loader/gefi/HelenOS/division.c
0,0 → 1,0
link ../../../../../../uspace/lib/softint/generic/division.c
/branches/dynload/boot/arch/ia64/loader/gefi/HelenOS/division.h
0,0 → 1,0
link ../../../../../../uspace/lib/softint/include/division.h
/branches/dynload/boot/arch/ia64/loader/gefi/HelenOS/mkimage.c
0,0 → 1,17
#include<stdio.h>
#include<stdlib.h>
 
int main(int argc,char** argv)
{
FILE *fi,*fo;
int count=0;
int ch;
fi=fopen("image.bin","rb");
fo=fopen("image.c","wb");
fprintf(fo,"char HOSimage[]={\n");
if((ch=getc(fi))!=EOF) {fprintf(fo,"0x%02X",ch);count++;}
while((ch=getc(fi))!=EOF) {fprintf(fo,",0x%02X",ch);count++;}
fprintf(fo,"};\nint HOSimagesize=%d;\n",count);
return EXIT_SUCCESS;
}
 
/branches/dynload/boot/arch/ia64/loader/gefi/HelenOS/Makefile
28,7 → 28,8
CRTOBJS = ../gnuefi/crt0-efi-$(ARCH).o
LDSCRIPT = ../gnuefi/elf_$(ARCH)_efi.lds
LDFLAGS += -T $(LDSCRIPT) -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS)
LOADLIBES = -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name)
#LOADLIBES = -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name)
LOADLIBES = -lefi -lgnuefi
FORMAT = efi-app-$(ARCH)
 
 
46,15 → 47,18
$(OBJDUMP) -d hello.efi > hello.disass
 
#When selected first lines or second lines, select if image is linked into hello or not - usefull for network boot
#hello.so: hello.o image.o
#hello.so: hello.o image.o division.o
hello.so: hello.o image.bin
# $(LD) $(LDFLAGS) -Map hello.map hello.o image.o -o hello.so $(LOADLIBES) #link image inside hello
$(LD) $(LDFLAGS) -Map hello.map hello.o -o hello.so $(LOADLIBES) #dont link image inside hello
# $(LD) $(LDFLAGS) -Map hello.map hello.o division.o image.o -o hello.so $(LOADLIBES) #link image inside hello
$(LD) $(LDFLAGS) -Map hello.map hello.o division.o -o hello.so $(LOADLIBES) #dont link image inside hello
 
hello.o: hello.c
$(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -c hello.c -o hello.o
 
division.o: division.c
$(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -c division.c -o division.o
 
 
image.bin: ../../image.boot
$(OBJCOPY) -O binary ../../image.boot image.bin
 
/branches/dynload/boot/arch/ppc64/Makefile.inc
26,6 → 26,8
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
 
DEFS += -DOPEN_BOOT
 
build: $(BASE)/image.boot
 
$(BASE)/image.boot: depend arch/$(ARCH)/loader/image.boot
35,7 → 37,7
-rm arch/$(ARCH)/loader/image.boot
 
arch/$(ARCH)/loader/image.boot:
make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)"
 
clean: generic_clean
make -C arch/$(ARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)