From 6875dc8ea4f9e14f33c217c3596af51c60cfd1b5 Mon Sep 17 00:00:00 2001 From: Liu Yu-B13201 Date: Thu, 29 Sep 2011 17:52:49 +0000 Subject: [PATCH 01/24] ppc/e500_pci: Fix code style MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Put trailing statements on next line. Signed-off-by: Liu Yu Reviewed-by: Andreas Färber Signed-off-by: Alexander Graf --- hw/ppce500_pci.c | 76 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 20 deletions(-) diff --git a/hw/ppce500_pci.c b/hw/ppce500_pci.c index 2db365d0b6..0ece422446 100644 --- a/hw/ppce500_pci.c +++ b/hw/ppce500_pci.c @@ -98,11 +98,20 @@ static uint32_t pci_reg_read4(void *opaque, target_phys_addr_t addr) case PPCE500_PCI_OW3: case PPCE500_PCI_OW4: switch (addr & 0xC) { - case PCI_POTAR: value = pci->pob[(addr >> 5) & 0x7].potar; break; - case PCI_POTEAR: value = pci->pob[(addr >> 5) & 0x7].potear; break; - case PCI_POWBAR: value = pci->pob[(addr >> 5) & 0x7].powbar; break; - case PCI_POWAR: value = pci->pob[(addr >> 5) & 0x7].powar; break; - default: break; + case PCI_POTAR: + value = pci->pob[(addr >> 5) & 0x7].potar; + break; + case PCI_POTEAR: + value = pci->pob[(addr >> 5) & 0x7].potear; + break; + case PCI_POWBAR: + value = pci->pob[(addr >> 5) & 0x7].powbar; + break; + case PCI_POWAR: + value = pci->pob[(addr >> 5) & 0x7].powar; + break; + default: + break; } break; @@ -110,11 +119,20 @@ static uint32_t pci_reg_read4(void *opaque, target_phys_addr_t addr) case PPCE500_PCI_IW2: case PPCE500_PCI_IW1: switch (addr & 0xC) { - case PCI_PITAR: value = pci->pib[(addr >> 5) & 0x3].pitar; break; - case PCI_PIWBAR: value = pci->pib[(addr >> 5) & 0x3].piwbar; break; - case PCI_PIWBEAR: value = pci->pib[(addr >> 5) & 0x3].piwbear; break; - case PCI_PIWAR: value = pci->pib[(addr >> 5) & 0x3].piwar; break; - default: break; + case PCI_PITAR: + value = pci->pib[(addr >> 5) & 0x3].pitar; + break; + case PCI_PIWBAR: + value = pci->pib[(addr >> 5) & 0x3].piwbar; + break; + case PCI_PIWBEAR: + value = pci->pib[(addr >> 5) & 0x3].piwbear; + break; + case PCI_PIWAR: + value = pci->pib[(addr >> 5) & 0x3].piwar; + break; + default: + break; }; break; @@ -154,11 +172,20 @@ static void pci_reg_write4(void *opaque, target_phys_addr_t addr, case PPCE500_PCI_OW3: case PPCE500_PCI_OW4: switch (addr & 0xC) { - case PCI_POTAR: pci->pob[(addr >> 5) & 0x7].potar = value; break; - case PCI_POTEAR: pci->pob[(addr >> 5) & 0x7].potear = value; break; - case PCI_POWBAR: pci->pob[(addr >> 5) & 0x7].powbar = value; break; - case PCI_POWAR: pci->pob[(addr >> 5) & 0x7].powar = value; break; - default: break; + case PCI_POTAR: + pci->pob[(addr >> 5) & 0x7].potar = value; + break; + case PCI_POTEAR: + pci->pob[(addr >> 5) & 0x7].potear = value; + break; + case PCI_POWBAR: + pci->pob[(addr >> 5) & 0x7].powbar = value; + break; + case PCI_POWAR: + pci->pob[(addr >> 5) & 0x7].powar = value; + break; + default: + break; }; break; @@ -166,11 +193,20 @@ static void pci_reg_write4(void *opaque, target_phys_addr_t addr, case PPCE500_PCI_IW2: case PPCE500_PCI_IW1: switch (addr & 0xC) { - case PCI_PITAR: pci->pib[(addr >> 5) & 0x3].pitar = value; break; - case PCI_PIWBAR: pci->pib[(addr >> 5) & 0x3].piwbar = value; break; - case PCI_PIWBEAR: pci->pib[(addr >> 5) & 0x3].piwbear = value; break; - case PCI_PIWAR: pci->pib[(addr >> 5) & 0x3].piwar = value; break; - default: break; + case PCI_PITAR: + pci->pib[(addr >> 5) & 0x3].pitar = value; + break; + case PCI_PIWBAR: + pci->pib[(addr >> 5) & 0x3].piwbar = value; + break; + case PCI_PIWBEAR: + pci->pib[(addr >> 5) & 0x3].piwbear = value; + break; + case PCI_PIWAR: + pci->pib[(addr >> 5) & 0x3].piwar = value; + break; + default: + break; }; break; From eeae2e7b52255dae0976a027b6e11274990c708d Mon Sep 17 00:00:00 2001 From: Liu Yu-B13201 Date: Thu, 29 Sep 2011 17:52:50 +0000 Subject: [PATCH 02/24] ppc/e500_pci: Fix an array overflow issue When access PPCE500_PCI_IW1 the previous index get overflow. The patch fix the issue and update all to keep consistent style. Signed-off-by: Liu Yu Signed-off-by: Alexander Graf --- hw/ppce500_pci.c | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/hw/ppce500_pci.c b/hw/ppce500_pci.c index 0ece422446..960a5d0c60 100644 --- a/hw/ppce500_pci.c +++ b/hw/ppce500_pci.c @@ -89,6 +89,7 @@ static uint32_t pci_reg_read4(void *opaque, target_phys_addr_t addr) PPCE500PCIState *pci = opaque; unsigned long win; uint32_t value = 0; + int idx; win = addr & 0xfe0; @@ -97,18 +98,19 @@ static uint32_t pci_reg_read4(void *opaque, target_phys_addr_t addr) case PPCE500_PCI_OW2: case PPCE500_PCI_OW3: case PPCE500_PCI_OW4: + idx = (addr >> 5) & 0x7; switch (addr & 0xC) { case PCI_POTAR: - value = pci->pob[(addr >> 5) & 0x7].potar; + value = pci->pob[idx].potar; break; case PCI_POTEAR: - value = pci->pob[(addr >> 5) & 0x7].potear; + value = pci->pob[idx].potear; break; case PCI_POWBAR: - value = pci->pob[(addr >> 5) & 0x7].powbar; + value = pci->pob[idx].powbar; break; case PCI_POWAR: - value = pci->pob[(addr >> 5) & 0x7].powar; + value = pci->pob[idx].powar; break; default: break; @@ -118,18 +120,19 @@ static uint32_t pci_reg_read4(void *opaque, target_phys_addr_t addr) case PPCE500_PCI_IW3: case PPCE500_PCI_IW2: case PPCE500_PCI_IW1: + idx = ((addr >> 5) & 0x3) - 1; switch (addr & 0xC) { case PCI_PITAR: - value = pci->pib[(addr >> 5) & 0x3].pitar; + value = pci->pib[idx].pitar; break; case PCI_PIWBAR: - value = pci->pib[(addr >> 5) & 0x3].piwbar; + value = pci->pib[idx].piwbar; break; case PCI_PIWBEAR: - value = pci->pib[(addr >> 5) & 0x3].piwbear; + value = pci->pib[idx].piwbear; break; case PCI_PIWAR: - value = pci->pib[(addr >> 5) & 0x3].piwar; + value = pci->pib[idx].piwar; break; default: break; @@ -160,6 +163,7 @@ static void pci_reg_write4(void *opaque, target_phys_addr_t addr, { PPCE500PCIState *pci = opaque; unsigned long win; + int idx; win = addr & 0xfe0; @@ -171,18 +175,19 @@ static void pci_reg_write4(void *opaque, target_phys_addr_t addr, case PPCE500_PCI_OW2: case PPCE500_PCI_OW3: case PPCE500_PCI_OW4: + idx = (addr >> 5) & 0x7; switch (addr & 0xC) { case PCI_POTAR: - pci->pob[(addr >> 5) & 0x7].potar = value; + pci->pob[idx].potar = value; break; case PCI_POTEAR: - pci->pob[(addr >> 5) & 0x7].potear = value; + pci->pob[idx].potear = value; break; case PCI_POWBAR: - pci->pob[(addr >> 5) & 0x7].powbar = value; + pci->pob[idx].powbar = value; break; case PCI_POWAR: - pci->pob[(addr >> 5) & 0x7].powar = value; + pci->pob[idx].powar = value; break; default: break; @@ -192,18 +197,19 @@ static void pci_reg_write4(void *opaque, target_phys_addr_t addr, case PPCE500_PCI_IW3: case PPCE500_PCI_IW2: case PPCE500_PCI_IW1: + idx = ((addr >> 5) & 0x3) - 1; switch (addr & 0xC) { case PCI_PITAR: - pci->pib[(addr >> 5) & 0x3].pitar = value; + pci->pib[idx].pitar = value; break; case PCI_PIWBAR: - pci->pib[(addr >> 5) & 0x3].piwbar = value; + pci->pib[idx].piwbar = value; break; case PCI_PIWBEAR: - pci->pib[(addr >> 5) & 0x3].piwbear = value; + pci->pib[idx].piwbear = value; break; case PCI_PIWAR: - pci->pib[(addr >> 5) & 0x3].piwar = value; + pci->pib[idx].piwar = value; break; default: break; From e97c363638b32943afc4bd2845f4081496fabfbc Mon Sep 17 00:00:00 2001 From: David Gibson Date: Thu, 29 Sep 2011 21:39:10 +0000 Subject: [PATCH 03/24] pseries: Support SMT systems for KVM Book3S-HV Alex Graf has already made qemu support KVM for the pseries machine when using the Book3S-PR KVM variant (which runs the guest in usermode, emulating supervisor operations). This code allows gets us very close to also working with KVM Book3S-HV (using the hypervisor capabilities of recent POWER CPUs). This patch moves us another step towards Book3S-HV support by correctly handling SMT (multithreaded) POWER CPUs. There are two parts to this: * Querying KVM to check SMT capability, and if present, adjusting the cpu numbers that qemu assigns to cause KVM to assign guest threads to cores in the right way (this isn't automatic, because the POWER HV support has a limitation that different threads on a single core cannot be in different guests at the same time). * Correctly informing the guest OS of the SMT thread to core mappings via the device tree. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- hw/spapr.c | 24 +++++++++++++++++++++--- target-ppc/helper.c | 11 +++++++++++ target-ppc/kvm.c | 8 ++++++++ target-ppc/kvm_ppc.h | 6 ++++++ 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/hw/spapr.c b/hw/spapr.c index 63e5d336ea..c2675e1cc1 100644 --- a/hw/spapr.c +++ b/hw/spapr.c @@ -29,6 +29,9 @@ #include "elf.h" #include "net.h" #include "blockdev.h" +#include "cpus.h" +#include "kvm.h" +#include "kvm_ppc.h" #include "hw/boards.h" #include "hw/ppc.h" @@ -105,6 +108,7 @@ static void *spapr_create_fdt_skel(const char *cpu_model, uint32_t interrupt_server_ranges_prop[] = {0, cpu_to_be32(smp_cpus)}; int i; char *modelname; + int smt = kvmppc_smt_threads(); #define _FDT(exp) \ do { \ @@ -164,13 +168,18 @@ static void *spapr_create_fdt_skel(const char *cpu_model, for (env = first_cpu; env != NULL; env = env->next_cpu) { int index = env->cpu_index; - uint32_t gserver_prop[] = {cpu_to_be32(index), 0}; /* HACK! */ + uint32_t servers_prop[smp_threads]; + uint32_t gservers_prop[smp_threads * 2]; char *nodename; uint32_t segs[] = {cpu_to_be32(28), cpu_to_be32(40), 0xffffffff, 0xffffffff}; uint32_t tbfreq = kvm_enabled() ? kvmppc_get_tbfreq() : TIMEBASE_FREQ; uint32_t cpufreq = kvm_enabled() ? kvmppc_get_clockfreq() : 1000000000; + if ((index % smt) != 0) { + continue; + } + if (asprintf(&nodename, "%s@%x", modelname, index) < 0) { fprintf(stderr, "Allocation failure\n"); exit(1); @@ -195,9 +204,18 @@ static void *spapr_create_fdt_skel(const char *cpu_model, pft_size_prop, sizeof(pft_size_prop)))); _FDT((fdt_property_string(fdt, "status", "okay"))); _FDT((fdt_property(fdt, "64-bit", NULL, 0))); - _FDT((fdt_property_cell(fdt, "ibm,ppc-interrupt-server#s", index))); + + /* Build interrupt servers and gservers properties */ + for (i = 0; i < smp_threads; i++) { + servers_prop[i] = cpu_to_be32(index + i); + /* Hack, direct the group queues back to cpu 0 */ + gservers_prop[i*2] = cpu_to_be32(index + i); + gservers_prop[i*2 + 1] = 0; + } + _FDT((fdt_property(fdt, "ibm,ppc-interrupt-server#s", + servers_prop, sizeof(servers_prop)))); _FDT((fdt_property(fdt, "ibm,ppc-interrupt-gserver#s", - gserver_prop, sizeof(gserver_prop)))); + gservers_prop, sizeof(gservers_prop)))); if (env->mmu_model & POWERPC_MMU_1TSEG) { _FDT((fdt_property(fdt, "ibm,processor-segment-sizes", diff --git a/target-ppc/helper.c b/target-ppc/helper.c index 6339be3a75..137a494201 100644 --- a/target-ppc/helper.c +++ b/target-ppc/helper.c @@ -26,6 +26,8 @@ #include "helper_regs.h" #include "qemu-common.h" #include "kvm.h" +#include "kvm_ppc.h" +#include "cpus.h" //#define DEBUG_MMU //#define DEBUG_BATS @@ -3189,6 +3191,15 @@ CPUPPCState *cpu_ppc_init (const char *cpu_model) if (tcg_enabled()) { ppc_translate_init(); } + /* Adjust cpu index for SMT */ +#if !defined(CONFIG_USER_ONLY) + if (kvm_enabled()) { + int smt = kvmppc_smt_threads(); + + env->cpu_index = (env->cpu_index / smp_threads)*smt + + (env->cpu_index % smp_threads); + } +#endif /* !CONFIG_USER_ONLY */ env->cpu_model_str = cpu_model; cpu_ppc_register_internal(env, def); diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index 75832d83b8..6c7ca6fc50 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -28,6 +28,7 @@ #include "kvm_ppc.h" #include "cpu.h" #include "device_tree.h" +#include "hw/spapr.h" #include "hw/sysbus.h" #include "hw/spapr.h" @@ -53,6 +54,7 @@ static int cap_interrupt_unset = false; static int cap_interrupt_level = false; static int cap_segstate; static int cap_booke_sregs; +static int cap_ppc_smt; /* XXX We have a race condition where we actually have a level triggered * interrupt, but the infrastructure can't expose that yet, so the guest @@ -76,6 +78,7 @@ int kvm_arch_init(KVMState *s) cap_interrupt_level = kvm_check_extension(s, KVM_CAP_PPC_IRQ_LEVEL); cap_segstate = kvm_check_extension(s, KVM_CAP_PPC_SEGSTATE); cap_booke_sregs = kvm_check_extension(s, KVM_CAP_PPC_BOOKE_SREGS); + cap_ppc_smt = kvm_check_extension(s, KVM_CAP_PPC_SMT); if (!cap_interrupt_level) { fprintf(stderr, "KVM: Couldn't find level irq capability. Expect the " @@ -750,6 +753,11 @@ fail: cpu_abort(env, "This KVM version does not support PAPR\n"); } +int kvmppc_smt_threads(void) +{ + return cap_ppc_smt ? cap_ppc_smt : 1; +} + bool kvm_arch_stop_on_emulation_error(CPUState *env) { return true; diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h index c484e60bcb..c298411aa8 100644 --- a/target-ppc/kvm_ppc.h +++ b/target-ppc/kvm_ppc.h @@ -18,6 +18,7 @@ uint64_t kvmppc_get_clockfreq(void); int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len); int kvmppc_set_interrupt(CPUState *env, int irq, int level); void kvmppc_set_papr(CPUState *env); +int kvmppc_smt_threads(void); #else @@ -45,6 +46,11 @@ static inline void kvmppc_set_papr(CPUState *env) { } +static inline int kvmppc_smt_threads(void) +{ + return 1; +} + #endif #ifndef CONFIG_KVM From 354ac20a36a82a5ee09b0a6c8ba8655358a7597f Mon Sep 17 00:00:00 2001 From: David Gibson Date: Thu, 29 Sep 2011 21:39:11 +0000 Subject: [PATCH 04/24] pseries: Allow KVM Book3S-HV on PPC970 CPUS At present, using the hypervisor aware Book3S-HV KVM will only work with qemu on POWER7 CPUs. PPC970 CPUs also have hypervisor capability, but they lack the VRMA feature which makes assigning guest memory easier. In order to allow KVM Book3S-HV on PPC970, we need to specially allocate the first chunk of guest memory (the "Real Mode Area" or RMA), so that it is physically contiguous. Sufficiently recent host kernels allow such contiguous RMAs to be allocated, with a kvm capability advertising whether the feature is available and/or necessary on this hardware. This patch enables qemu to use this support, thus allowing kvm acceleration of pseries qemu machines on PPC970 hardware. Signed-off-by: Paul Mackerras Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- agraf: fix to use memory api --- hw/spapr.c | 56 ++++++++++++++++++++++++++++++++++---------- target-ppc/kvm.c | 44 ++++++++++++++++++++++++++++++++++ target-ppc/kvm_ppc.h | 8 +++++++ 3 files changed, 96 insertions(+), 12 deletions(-) diff --git a/hw/spapr.c b/hw/spapr.c index c2675e1cc1..193398b7a1 100644 --- a/hw/spapr.c +++ b/hw/spapr.c @@ -91,6 +91,7 @@ qemu_irq spapr_allocate_irq(uint32_t hint, uint32_t *irq_num) } static void *spapr_create_fdt_skel(const char *cpu_model, + target_phys_addr_t rma_size, target_phys_addr_t initrd_base, target_phys_addr_t initrd_size, const char *boot_device, @@ -99,7 +100,9 @@ static void *spapr_create_fdt_skel(const char *cpu_model, { void *fdt; CPUState *env; - uint64_t mem_reg_property[] = { 0, cpu_to_be64(ram_size) }; + uint64_t mem_reg_property_rma[] = { 0, cpu_to_be64(rma_size) }; + uint64_t mem_reg_property_nonrma[] = { cpu_to_be64(rma_size), + cpu_to_be64(ram_size - rma_size) }; uint32_t start_prop = cpu_to_be32(initrd_base); uint32_t end_prop = cpu_to_be32(initrd_base + initrd_size); uint32_t pft_size_prop[] = {0, cpu_to_be32(hash_shift)}; @@ -145,15 +148,25 @@ static void *spapr_create_fdt_skel(const char *cpu_model, _FDT((fdt_end_node(fdt))); - /* memory node */ + /* memory node(s) */ _FDT((fdt_begin_node(fdt, "memory@0"))); _FDT((fdt_property_string(fdt, "device_type", "memory"))); - _FDT((fdt_property(fdt, "reg", - mem_reg_property, sizeof(mem_reg_property)))); - + _FDT((fdt_property(fdt, "reg", mem_reg_property_rma, + sizeof(mem_reg_property_rma)))); _FDT((fdt_end_node(fdt))); + if (ram_size > rma_size) { + char mem_name[32]; + + sprintf(mem_name, "memory@%" PRIx64, (uint64_t)rma_size); + _FDT((fdt_begin_node(fdt, mem_name))); + _FDT((fdt_property_string(fdt, "device_type", "memory"))); + _FDT((fdt_property(fdt, "reg", mem_reg_property_nonrma, + sizeof(mem_reg_property_nonrma)))); + _FDT((fdt_end_node(fdt))); + } + /* cpus */ _FDT((fdt_begin_node(fdt, "cpus"))); @@ -346,6 +359,7 @@ static void ppc_spapr_init(ram_addr_t ram_size, int i; MemoryRegion *sysmem = get_system_memory(); MemoryRegion *ram = g_new(MemoryRegion, 1); + target_phys_addr_t rma_alloc_size, rma_size; uint32_t initrd_base; long kernel_size, initrd_size, fw_size; long pteg_shift = 17; @@ -354,10 +368,23 @@ static void ppc_spapr_init(ram_addr_t ram_size, spapr = g_malloc(sizeof(*spapr)); cpu_ppc_hypercall = emulate_spapr_hypercall; - /* We place the device tree just below either the top of RAM, or - * 2GB, so that it can be processed with 32-bit code if - * necessary */ - spapr->fdt_addr = MIN(ram_size, 0x80000000) - FDT_MAX_SIZE; + /* Allocate RMA if necessary */ + rma_alloc_size = kvmppc_alloc_rma("ppc_spapr.rma", sysmem); + + if (rma_alloc_size == -1) { + hw_error("qemu: Unable to create RMA\n"); + exit(1); + } + if (rma_alloc_size && (rma_alloc_size < ram_size)) { + rma_size = rma_alloc_size; + } else { + rma_size = ram_size; + } + + /* We place the device tree just below either the top of the RMA, + * or just below 2GB, whichever is lowere, so that it can be + * processed with 32-bit real mode code if necessary */ + spapr->fdt_addr = MIN(rma_size, 0x80000000) - FDT_MAX_SIZE; spapr->rtas_addr = spapr->fdt_addr - RTAS_MAX_SIZE; /* init CPUs */ @@ -382,8 +409,13 @@ static void ppc_spapr_init(ram_addr_t ram_size, /* allocate RAM */ spapr->ram_limit = ram_size; - memory_region_init_ram(ram, NULL, "ppc_spapr.ram", spapr->ram_limit); - memory_region_add_subregion(sysmem, 0, ram); + if (spapr->ram_limit > rma_alloc_size) { + ram_addr_t nonrma_base = rma_alloc_size; + ram_addr_t nonrma_size = spapr->ram_limit - rma_alloc_size; + + memory_region_init_ram(ram, NULL, "ppc_spapr.ram", nonrma_size); + memory_region_add_subregion(sysmem, nonrma_base, ram); + } /* allocate hash page table. For now we always make this 16mb, * later we should probably make it scale to the size of guest @@ -507,7 +539,7 @@ static void ppc_spapr_init(ram_addr_t ram_size, } /* Prepare the device tree */ - spapr->fdt_skel = spapr_create_fdt_skel(cpu_model, + spapr->fdt_skel = spapr_create_fdt_skel(cpu_model, rma_size, initrd_base, initrd_size, boot_device, kernel_cmdline, pteg_shift + 7); diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index 6c7ca6fc50..fd17d23d2e 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -55,6 +55,7 @@ static int cap_interrupt_level = false; static int cap_segstate; static int cap_booke_sregs; static int cap_ppc_smt; +static int cap_ppc_rma; /* XXX We have a race condition where we actually have a level triggered * interrupt, but the infrastructure can't expose that yet, so the guest @@ -79,6 +80,7 @@ int kvm_arch_init(KVMState *s) cap_segstate = kvm_check_extension(s, KVM_CAP_PPC_SEGSTATE); cap_booke_sregs = kvm_check_extension(s, KVM_CAP_PPC_BOOKE_SREGS); cap_ppc_smt = kvm_check_extension(s, KVM_CAP_PPC_SMT); + cap_ppc_rma = kvm_check_extension(s, KVM_CAP_PPC_RMA); if (!cap_interrupt_level) { fprintf(stderr, "KVM: Couldn't find level irq capability. Expect the " @@ -758,6 +760,48 @@ int kvmppc_smt_threads(void) return cap_ppc_smt ? cap_ppc_smt : 1; } +off_t kvmppc_alloc_rma(const char *name, MemoryRegion *sysmem) +{ + void *rma; + off_t size; + int fd; + struct kvm_allocate_rma ret; + MemoryRegion *rma_region; + + /* If cap_ppc_rma == 0, contiguous RMA allocation is not supported + * if cap_ppc_rma == 1, contiguous RMA allocation is supported, but + * not necessary on this hardware + * if cap_ppc_rma == 2, contiguous RMA allocation is needed on this hardware + * + * FIXME: We should allow the user to force contiguous RMA + * allocation in the cap_ppc_rma==1 case. + */ + if (cap_ppc_rma < 2) { + return 0; + } + + fd = kvm_vm_ioctl(kvm_state, KVM_ALLOCATE_RMA, &ret); + if (fd < 0) { + fprintf(stderr, "KVM: Error on KVM_ALLOCATE_RMA: %s\n", + strerror(errno)); + return -1; + } + + size = MIN(ret.rma_size, 256ul << 20); + + rma = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); + if (rma == MAP_FAILED) { + fprintf(stderr, "KVM: Error mapping RMA: %s\n", strerror(errno)); + return -1; + }; + + rma_region = g_new(MemoryRegion, 1); + memory_region_init_ram_ptr(rma_region, NULL, name, size, rma); + memory_region_add_subregion(sysmem, 0, rma_region); + + return size; +} + bool kvm_arch_stop_on_emulation_error(CPUState *env) { return true; diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h index c298411aa8..82f32f449e 100644 --- a/target-ppc/kvm_ppc.h +++ b/target-ppc/kvm_ppc.h @@ -9,6 +9,8 @@ #ifndef __KVM_PPC_H__ #define __KVM_PPC_H__ +#include "memory.h" + void kvmppc_init(void); #ifdef CONFIG_KVM @@ -19,6 +21,7 @@ int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len); int kvmppc_set_interrupt(CPUState *env, int irq, int level); void kvmppc_set_papr(CPUState *env); int kvmppc_smt_threads(void); +off_t kvmppc_alloc_rma(const char *name, MemoryRegion *sysmem); #else @@ -51,6 +54,11 @@ static inline int kvmppc_smt_threads(void) return 1; } +static inline off_t kvmppc_alloc_rma(const char *name, MemoryRegion *sysmem) +{ + return 0; +} + #endif #ifndef CONFIG_KVM From 0f5cb2989f33059a70e8da335b62af5f27fabbe2 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Thu, 29 Sep 2011 21:39:12 +0000 Subject: [PATCH 05/24] pseries: Use Book3S-HV TCE acceleration capabilities The pseries machine of qemu implements the TCE mechanism used as a virtual IOMMU for the PAPR defined virtual IO devices. Because the PAPR spec only defines a small DMA address space, the guest VIO drivers need to update TCE mappings very frequently - the virtual network device is particularly bad. This means many slow exits to qemu to emulate the H_PUT_TCE hypercall. Sufficiently recent kernels allow this to be mitigated by implementing H_PUT_TCE in the host kernel. To make use of this, however, qemu needs to initialize the necessary TCE tables, and map them into itself so that the VIO device implementations can retrieve the mappings when they access guest memory (which is treated as a virtual DMA operation). This patch adds the necessary calls to use the KVM TCE acceleration. If the kernel does not support acceleration, or there is some other error creating the accelerated TCE table, then it will still fall back to full userspace TCE implementation. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- hw/spapr_vio.c | 8 ++++++- hw/spapr_vio.h | 1 + target-ppc/kvm.c | 54 ++++++++++++++++++++++++++++++++++++++++++++ target-ppc/kvm_ppc.h | 14 ++++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) diff --git a/hw/spapr_vio.c b/hw/spapr_vio.c index 35818e18f1..1da3032215 100644 --- a/hw/spapr_vio.c +++ b/hw/spapr_vio.c @@ -165,7 +165,13 @@ static void rtce_init(VIOsPAPRDevice *dev) * sizeof(VIOsPAPR_RTCE); if (size) { - dev->rtce_table = g_malloc0(size); + dev->rtce_table = kvmppc_create_spapr_tce(dev->reg, + dev->rtce_window_size, + &dev->kvmtce_fd); + + if (!dev->rtce_table) { + dev->rtce_table = g_malloc0(size); + } } } diff --git a/hw/spapr_vio.h b/hw/spapr_vio.h index 4fe5f742c2..a325a5f4b3 100644 --- a/hw/spapr_vio.h +++ b/hw/spapr_vio.h @@ -57,6 +57,7 @@ typedef struct VIOsPAPRDevice { target_ulong signal_state; uint32_t rtce_window_size; VIOsPAPR_RTCE *rtce_table; + int kvmtce_fd; VIOsPAPR_CRQ crq; } VIOsPAPRDevice; diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index fd17d23d2e..06cad41de5 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -28,6 +28,7 @@ #include "kvm_ppc.h" #include "cpu.h" #include "device_tree.h" +#include "hw/sysbus.h" #include "hw/spapr.h" #include "hw/sysbus.h" @@ -56,6 +57,7 @@ static int cap_segstate; static int cap_booke_sregs; static int cap_ppc_smt; static int cap_ppc_rma; +static int cap_spapr_tce; /* XXX We have a race condition where we actually have a level triggered * interrupt, but the infrastructure can't expose that yet, so the guest @@ -81,6 +83,7 @@ int kvm_arch_init(KVMState *s) cap_booke_sregs = kvm_check_extension(s, KVM_CAP_PPC_BOOKE_SREGS); cap_ppc_smt = kvm_check_extension(s, KVM_CAP_PPC_SMT); cap_ppc_rma = kvm_check_extension(s, KVM_CAP_PPC_RMA); + cap_spapr_tce = kvm_check_extension(s, KVM_CAP_SPAPR_TCE); if (!cap_interrupt_level) { fprintf(stderr, "KVM: Couldn't find level irq capability. Expect the " @@ -802,6 +805,57 @@ off_t kvmppc_alloc_rma(const char *name, MemoryRegion *sysmem) return size; } +void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t window_size, int *pfd) +{ + struct kvm_create_spapr_tce args = { + .liobn = liobn, + .window_size = window_size, + }; + long len; + int fd; + void *table; + + if (!cap_spapr_tce) { + return NULL; + } + + fd = kvm_vm_ioctl(kvm_state, KVM_CREATE_SPAPR_TCE, &args); + if (fd < 0) { + return NULL; + } + + len = (window_size / SPAPR_VIO_TCE_PAGE_SIZE) * sizeof(VIOsPAPR_RTCE); + /* FIXME: round this up to page size */ + + table = mmap(NULL, len, PROT_READ, MAP_SHARED, fd, 0); + if (table == MAP_FAILED) { + close(fd); + return NULL; + } + + *pfd = fd; + return table; +} + +int kvmppc_remove_spapr_tce(void *table, int fd, uint32_t window_size) +{ + long len; + + if (fd < 0) { + return -1; + } + + len = (window_size / SPAPR_VIO_TCE_PAGE_SIZE)*sizeof(VIOsPAPR_RTCE); + if ((munmap(table, len) < 0) || + (close(fd) < 0)) { + fprintf(stderr, "KVM: Unexpected error removing KVM SPAPR TCE " + "table: %s", strerror(errno)); + /* Leak the table */ + } + + return 0; +} + bool kvm_arch_stop_on_emulation_error(CPUState *env) { return true; diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h index 82f32f449e..87d1bdd5fd 100644 --- a/target-ppc/kvm_ppc.h +++ b/target-ppc/kvm_ppc.h @@ -22,6 +22,8 @@ int kvmppc_set_interrupt(CPUState *env, int irq, int level); void kvmppc_set_papr(CPUState *env); int kvmppc_smt_threads(void); off_t kvmppc_alloc_rma(const char *name, MemoryRegion *sysmem); +void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t window_size, int *pfd); +int kvmppc_remove_spapr_tce(void *table, int pfd, uint32_t window_size); #else @@ -59,6 +61,18 @@ static inline off_t kvmppc_alloc_rma(const char *name, MemoryRegion *sysmem) return 0; } +static inline void *kvmppc_create_spapr_tce(uint32_t liobn, + uint32_t window_size, int *fd) +{ + return NULL; +} + +static inline int kvmppc_remove_spapr_tce(void *table, int pfd, + uint32_t window_size) +{ + return -1; +} + #endif #ifndef CONFIG_KVM From bdcf9d6cd4ff987e58ba4f311ba7b1a33cf3ce5e Mon Sep 17 00:00:00 2001 From: David Gibson Date: Thu, 29 Sep 2011 21:39:13 +0000 Subject: [PATCH 06/24] pseries: Update SLOF firmware image This patch updates the SLOF submodule and precompiled image. The new SLOF versions contains two changes of note: * The previous SLOF has a bug in SCSI condition handling that was exposed by recent updates to qemu's SCSI emulation. This update fixes the bug. * The previous SLOF has a bug in its addressing of SCSI devices, which can be exposed under certain conditions. The new SLOF also fixes this. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- pc-bios/README | 2 +- pc-bios/slof.bin | Bin 579072 -> 578968 bytes roms/SLOF | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pc-bios/README b/pc-bios/README index 4d1d816fdb..32a438efc0 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -17,7 +17,7 @@ - SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware implementation for certain IBM POWER hardware. The sources are at https://github.com/dgibson/SLOF, and the image currently in qemu is - built from git tag qemu-slof-20110323. + built from git tag qemu-slof-20110930. - The PXE roms come from the iPXE project. Built with BANNER_TIME 0. Sources available at http://ipxe.org. Vendor:Device ID -> ROM mapping: diff --git a/pc-bios/slof.bin b/pc-bios/slof.bin index 22c4c7f5c448e3002aefecf3438f5d080586d666..b9d4f35053be2cd6f599bffddf0ee99627eb00a9 100644 GIT binary patch delta 2772 zcma);e{2)i9l+o74|2XG5K@<<1)3MqK~gx|fsh^n6Pqj{At51z6uKcbm%Fol<9v7c z&W*h$vgy(>`o~IQX_r4TNT;pcw2HB%n%7A!-o^m!M_aZb(fu*CV^hiKB&JqXO0;?J z{Ns`F&vw$g@8^Br_rAa0JD=09HO~H^@obyz#_TlP>Tvno!_%7Eag*KpntAa$wJwu# z2B!bK6SA4<&_^@2kS(}0Jye%TmubdMRAriR5LKCGoR$i^n4MWgsDcnh$VG@I^f^M6 zgsKRwCbWi7HKDbHY6v|<$W7>BLhA_C5~?Hg2%$#_ttYgB&_+U!5vnJI2sIGeM5vL_ zXfvTLgqjF76MBNsRzlkdF@!vXycR9sJ*u7wG~yi}1ywx&e1;{B+uiIu z7-G{Poq7Mzm!U1wHomERFzhH^AsrKEG!kz{$$a1fBwGU_g^i z;DYxI00++jw5t(7HU~hm8KBgeCJ;OasEOb9Twrej+hhb>U;$X2_z<88m;IHA#odYQ z*#Nv))!#8MjirA1abgJqgMTx+4Tl^`y>KhR=IZZeUItoU{*xcw;XwMfEq&3_Teg-B zo2w|SThBfB96;FajCpndzO?a?+uu&-N@g0HTXVNB|MB1Y@}I6{8$iws3`3vUGvlZ_ z9Up{v*zmAt}*F(`v*p{BckICX#4CFvpVeXu04*+1;EY~B>-#9Ls(tz zAE!+Z)tcwSjwV;p;H#H+nL{DRqvqekj*U<=sfc6T6)E_DKGytt#IYZ;r{9e@vhPNm zKVeqmfX%4Y)9Tr2*<|Ow={x~pA;x;Man|_|%`6okX7Dc+judiKn*6NuOEzXHo11n1 z!)A)pj@nd5It`Xz&fi}CdHyaxM}g%J@=MDN`D;rJ`QV+ur0Y`uT27?vfqN7?E04tv zPpZ*+j2%DeN)6AqM^!lxqnMK?PIV5;{I=FvIlW@iI1GN;Vv=bT=bA0U5o z8ch4mpUpWtp#Su}IVT>g@Tkb%o1++;>k!TlU)yT3zVp;Ks;iK79Y=Cpp;@1KGP=rb z`rdR>`*cwjc>~F6SmHSu#TCgwoFK$RU6+(Fii$==6=*%Cp}qLV@KJ%mJ`mqfaA@7K zfBGRsJ0I^I7(Nml=9?qQ_k9Cos3mjr z#kZ)JJUUKDjiDAF5@Vb$(lL<}7@pHOUNVwMQ4Q4Fjh*^X*RkFsv?*PpB3XNmI_b>5 z@+;~jG{=5H)ixoY-!k)TLSK;d6NRTNKgotoh>y`bgqW()M|!#jvg@u=KZa|3NJ6@3 zFs0I8y?u?cby+dOSgELjh*V8fiqs**wW9k%2FP+lN0SV0WeDw!(bh69siZMK{592b zke5|mEIdxf_O4i^chk@6ye=^kZal*&0;BVsLKinLU%HAj$9zdXlkNEp^@7cWm8;g9 zO>a}x=GEU(fv2Nff*F%l{sg1MqgH;XIMb!Ch}LxQaH%2PoFt2al>{yh308Z`-7R*f zJJ>(mRqSq|MNhs>b---m9csX4vv-@&$PAv z@0#vMkU1qB=fa}y=dseto>9bc+=$XljT=k^A3gk$E3fNG-4LUUoRY@k%DAKmcmeN2 zAz?+f%*rz(Vx8KR8a={UUAk|ABSqsvNanQvR_gi#im)18sS!k;mZF@@gk+U7%2&I?LJS7dHM#`SbNVoT_TKbz@XfXKh-WOiNQV+JP!DQBA8t=|n14DO0xzHQT&* zKEH<2{j+Jd-hDss`~AM}d++oJ(%#e*{pRHhbLm?_jvjqU&s}H z>90})6YsUduJp{p&4~atX$ird6GIQAQw5l`5=8+fZA4LkNeV0Q@b69*5hx}=6R;C- z5cmRtdkB;exR<~>0;L4*BTz=*egfqLDhN~(s3K5J-~j^b32Y#+kw6WB2MKHPZ`++Ir`=}zq1&nl>O3u<+HJjm1D(ca$C<}Goc z-H)P21Vxpi5#&R>C*=xHN2%fd+$Zm*mwIo&SJDf84e(p(Kle4m$7iei=OBDCeQnB2RD?#;n^79@B@1WuNVL;AJ#KgI0%>Z6)XHQOl2Ew zknRe2QviHuNloD-fxvh!*OdVfBOuLd1<*T>!vlblsYc*G2k5bj;CvzgkoN|#ByIvU z_F-q@R2ZE10&wq`-TERKYsl;~-S9%m0lZ4MBO?WGL!fc5jkE+7b1TW;e4N1352a^7 zEP3WeqCfZ7pWb3YYT1&yVDyRIJ3qK$_!whPo&*T{ozcHN0H3a@Sbjb=UvP_g=hvw-(In-G`uCe@nI5&&CHKZWi3E+4!LCrHXBMWj5T(akK6jI1Dm$+4$Vi z#TVACmhAs=<-7AW?|)FgXVn~UU}%}fkc=~22Pf;{c|x(9eI5s_J|KpaiJ@;FR4`eo6w)!vO%2sRN+<94sFVRNd&D2f%+CJeGP2*plN{ zy8Yh=Z@FFo;MNZT{p>VV;W+h`a_=~R$)-#CrfI64ngLpx)%&I?m%R%hUsDQ9bm^z3 zsU5{#04xVnd-c?F6gs;+P2pCATXA-Inl853tBvdc(EMKZ_Br}Hr5o*!Avqp#s7efN z#}9@Z;TfzzT&>-n{maj22UYfnf8XIA#Kjdwh-i$&JKWh#uhK2{N;m2qI5g}Z*wuqf zAB|N+K`(uku5{#4GeYTouhXck(3g0mMUm;t^K-O9{SV{re}h(F_KijQ6^Nuemx_1l zzO#>){?eI?v_-%4TiWgJbR1VXRbr%wq%mxSXH<@j;I|?9NSmi*!!KFmXQQ%vFVSZ# z`oG?$JM=f-rajro-_hG41lh}%=|PLdR-~hMXum%54(&`bvJ{CY7%>ue?21N0k{DM6 z9-WZ1a0hZaU8=&lIHE_)al|l&jfou-kDD)SU&CEDrGfYa<2ab?3rVuj;c~g+s^U_^ ztRlGhDCZJ6j=>i@={nfse|Ue7b7x#s@jxNM24#Vf*@zftMM3p(EnIVRODL*n3L9yO z29I*agTYGd9aDsml<*m$^S!93up^8b4;fk`{945P%=}t^Bra6b9aS}9g!!5*1+fZ0g@nNIl9Hd-Woiw_XdD-Ogp=dEz%!ztX+lC<3$BHY zT2y_ps468$Xfc^ckTJ}sAqzoVc#|%36L^wOt>%P$O5Yh*pfev z&rW8PE4GBAs`eiZ=8gWm$uXQi1T+%m1-S#^qu4AZ9Jmxwp_t8={O7(rddXF~YCXbL zh|FSdLaokLx6{LzwV}6Mr5p9YRl2?zAtcD5t!=Rw=P-Fo>l11$e%E!K{KL!He*^Sp BHl6?g diff --git a/roms/SLOF b/roms/SLOF index d1d6b53b71..b94bde008b 160000 --- a/roms/SLOF +++ b/roms/SLOF @@ -1 +1 @@ -Subproject commit d1d6b53b713a2b7c2c25685268fa932d28a4b4c0 +Subproject commit b94bde008b0d49ec4bfe933e110d0952d032ac28 From 70560da79d5be611bd7867f9c590847702c61fb5 Mon Sep 17 00:00:00 2001 From: Fabien Chouteau Date: Wed, 28 Sep 2011 05:54:05 +0000 Subject: [PATCH 07/24] Set an invalid-bits mask for each SPE instructions SPE instructions are defined by pairs. Currently, the invalid-bits mask is set for the first instruction, but the second one can have a different mask. example: GEN_SPE(efdcmpeq, efdcfs, 0x17, 0x0B, 0x00600000, 0x00180000, PPC_SPE_DOUBLE), Signed-off-by: Fabien Chouteau Signed-off-by: Alexander Graf --- target-ppc/translate.c | 482 ++++++++++++++++++++++------------------- 1 file changed, 262 insertions(+), 220 deletions(-) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 1e362fc238..99e995c7b6 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -205,8 +205,10 @@ typedef struct DisasContext { } DisasContext; struct opc_handler_t { - /* invalid bits */ - uint32_t inval; + /* invalid bits for instruction 1 (Rc(opcode) == 0) */ + uint32_t inval1; + /* invalid bits for instruction 2 (Rc(opcode) == 1) */ + uint32_t inval2; /* instruction type */ uint64_t type; /* extended instruction type */ @@ -478,7 +480,23 @@ static inline target_ulong MASK(uint32_t start, uint32_t end) .opc3 = op3, \ .pad = { 0, }, \ .handler = { \ - .inval = invl, \ + .inval1 = invl, \ + .type = _typ, \ + .type2 = _typ2, \ + .handler = &gen_##name, \ + .oname = stringify(name), \ + }, \ + .oname = stringify(name), \ +} +#define GEN_OPCODE_DUAL(name, op1, op2, op3, invl1, invl2, _typ, _typ2) \ +{ \ + .opc1 = op1, \ + .opc2 = op2, \ + .opc3 = op3, \ + .pad = { 0, }, \ + .handler = { \ + .inval1 = invl1, \ + .inval2 = invl2, \ .type = _typ, \ .type2 = _typ2, \ .handler = &gen_##name, \ @@ -493,7 +511,7 @@ static inline target_ulong MASK(uint32_t start, uint32_t end) .opc3 = op3, \ .pad = { 0, }, \ .handler = { \ - .inval = invl, \ + .inval1 = invl, \ .type = _typ, \ .type2 = _typ2, \ .handler = &gen_##name, \ @@ -509,7 +527,22 @@ static inline target_ulong MASK(uint32_t start, uint32_t end) .opc3 = op3, \ .pad = { 0, }, \ .handler = { \ - .inval = invl, \ + .inval1 = invl, \ + .type = _typ, \ + .type2 = _typ2, \ + .handler = &gen_##name, \ + }, \ + .oname = stringify(name), \ +} +#define GEN_OPCODE_DUAL(name, op1, op2, op3, invl1, invl2, _typ, _typ2) \ +{ \ + .opc1 = op1, \ + .opc2 = op2, \ + .opc3 = op3, \ + .pad = { 0, }, \ + .handler = { \ + .inval1 = invl1, \ + .inval2 = invl2, \ .type = _typ, \ .type2 = _typ2, \ .handler = &gen_##name, \ @@ -523,7 +556,7 @@ static inline target_ulong MASK(uint32_t start, uint32_t end) .opc3 = op3, \ .pad = { 0, }, \ .handler = { \ - .inval = invl, \ + .inval1 = invl, \ .type = _typ, \ .type2 = _typ2, \ .handler = &gen_##name, \ @@ -550,7 +583,8 @@ static void gen_invalid(DisasContext *ctx) } static opc_handler_t invalid_handler = { - .inval = 0xFFFFFFFF, + .inval1 = 0xFFFFFFFF, + .inval2 = 0xFFFFFFFF, .type = PPC_NONE, .type2 = PPC_NONE, .handler = gen_invalid, @@ -6693,7 +6727,7 @@ static inline void gen_store_gpr64(int reg, TCGv_i64 t) #endif } -#define GEN_SPE(name0, name1, opc2, opc3, inval, type) \ +#define GEN_SPE(name0, name1, opc2, opc3, inval0, inval1, type) \ static void glue(gen_, name0##_##name1)(DisasContext *ctx) \ { \ if (Rc(ctx->opcode)) \ @@ -7416,35 +7450,35 @@ static inline void gen_evmwsmiaa(DisasContext *ctx) tcg_temp_free_i64(tmp); } -GEN_SPE(evaddw, speundef, 0x00, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evaddiw, speundef, 0x01, 0x08, 0x00000000, PPC_SPE); -GEN_SPE(evsubfw, speundef, 0x02, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evsubifw, speundef, 0x03, 0x08, 0x00000000, PPC_SPE); -GEN_SPE(evabs, evneg, 0x04, 0x08, 0x0000F800, PPC_SPE); //// -GEN_SPE(evextsb, evextsh, 0x05, 0x08, 0x0000F800, PPC_SPE); //// -GEN_SPE(evrndw, evcntlzw, 0x06, 0x08, 0x0000F800, PPC_SPE); //// -GEN_SPE(evcntlsw, brinc, 0x07, 0x08, 0x00000000, PPC_SPE); // -GEN_SPE(evmra, speundef, 0x02, 0x13, 0x0000F800, PPC_SPE); -GEN_SPE(speundef, evand, 0x08, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evandc, speundef, 0x09, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evxor, evor, 0x0B, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evnor, eveqv, 0x0C, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evmwumi, evmwsmi, 0x0C, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(evmwumia, evmwsmia, 0x1C, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(evmwumiaa, evmwsmiaa, 0x0C, 0x15, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evorc, 0x0D, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evnand, speundef, 0x0F, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evsrwu, evsrws, 0x10, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evsrwiu, evsrwis, 0x11, 0x08, 0x00000000, PPC_SPE); -GEN_SPE(evslw, speundef, 0x12, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evslwi, speundef, 0x13, 0x08, 0x00000000, PPC_SPE); -GEN_SPE(evrlw, evsplati, 0x14, 0x08, 0x00000000, PPC_SPE); // -GEN_SPE(evrlwi, evsplatfi, 0x15, 0x08, 0x00000000, PPC_SPE); -GEN_SPE(evmergehi, evmergelo, 0x16, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evmergehilo, evmergelohi, 0x17, 0x08, 0x00000000, PPC_SPE); //// -GEN_SPE(evcmpgtu, evcmpgts, 0x18, 0x08, 0x00600000, PPC_SPE); //// -GEN_SPE(evcmpltu, evcmplts, 0x19, 0x08, 0x00600000, PPC_SPE); //// -GEN_SPE(evcmpeq, speundef, 0x1A, 0x08, 0x00600000, PPC_SPE); //// +GEN_SPE(evaddw, speundef, 0x00, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE); //// +GEN_SPE(evaddiw, speundef, 0x01, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE); +GEN_SPE(evsubfw, speundef, 0x02, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE); //// +GEN_SPE(evsubifw, speundef, 0x03, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE); +GEN_SPE(evabs, evneg, 0x04, 0x08, 0x0000F800, 0x0000F800, PPC_SPE); //// +GEN_SPE(evextsb, evextsh, 0x05, 0x08, 0x0000F800, 0x0000F800, PPC_SPE); //// +GEN_SPE(evrndw, evcntlzw, 0x06, 0x08, 0x0000F800, 0x0000F800, PPC_SPE); //// +GEN_SPE(evcntlsw, brinc, 0x07, 0x08, 0x0000F800, 0x00000000, PPC_SPE); // +GEN_SPE(evmra, speundef, 0x02, 0x13, 0x0000F800, 0xFFFFFFFF, PPC_SPE); +GEN_SPE(speundef, evand, 0x08, 0x08, 0xFFFFFFFF, 0x00000000, PPC_SPE); //// +GEN_SPE(evandc, speundef, 0x09, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE); //// +GEN_SPE(evxor, evor, 0x0B, 0x08, 0x00000000, 0x00000000, PPC_SPE); //// +GEN_SPE(evnor, eveqv, 0x0C, 0x08, 0x00000000, 0x00000000, PPC_SPE); //// +GEN_SPE(evmwumi, evmwsmi, 0x0C, 0x11, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(evmwumia, evmwsmia, 0x1C, 0x11, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(evmwumiaa, evmwsmiaa, 0x0C, 0x15, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evorc, 0x0D, 0x08, 0xFFFFFFFF, 0x00000000, PPC_SPE); //// +GEN_SPE(evnand, speundef, 0x0F, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE); //// +GEN_SPE(evsrwu, evsrws, 0x10, 0x08, 0x00000000, 0x00000000, PPC_SPE); //// +GEN_SPE(evsrwiu, evsrwis, 0x11, 0x08, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(evslw, speundef, 0x12, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE); //// +GEN_SPE(evslwi, speundef, 0x13, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE); +GEN_SPE(evrlw, evsplati, 0x14, 0x08, 0x00000000, 0x0000F800, PPC_SPE); // +GEN_SPE(evrlwi, evsplatfi, 0x15, 0x08, 0x00000000, 0x0000F800, PPC_SPE); +GEN_SPE(evmergehi, evmergelo, 0x16, 0x08, 0x00000000, 0x00000000, PPC_SPE); //// +GEN_SPE(evmergehilo, evmergelohi, 0x17, 0x08, 0x00000000, 0x00000000, PPC_SPE); //// +GEN_SPE(evcmpgtu, evcmpgts, 0x18, 0x08, 0x00600000, 0x00600000, PPC_SPE); //// +GEN_SPE(evcmpltu, evcmplts, 0x19, 0x08, 0x00600000, 0x00600000, PPC_SPE); //// +GEN_SPE(evcmpeq, speundef, 0x1A, 0x08, 0x00600000, 0xFFFFFFFF, PPC_SPE); //// /* SPE load and stores */ static inline void gen_addr_spe_imm_index(DisasContext *ctx, TCGv EA, int sh) @@ -7803,74 +7837,74 @@ GEN_SPEOP_LDST(evstwwo, 0x1E, 2); /* Multiply and add - TODO */ #if 0 -GEN_SPE(speundef, evmhessf, 0x01, 0x10, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhossf, 0x03, 0x10, 0x00000000, PPC_SPE); -GEN_SPE(evmheumi, evmhesmi, 0x04, 0x10, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhesmf, 0x05, 0x10, 0x00000000, PPC_SPE); -GEN_SPE(evmhoumi, evmhosmi, 0x06, 0x10, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhosmf, 0x07, 0x10, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhessfa, 0x11, 0x10, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhossfa, 0x13, 0x10, 0x00000000, PPC_SPE); -GEN_SPE(evmheumia, evmhesmia, 0x14, 0x10, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhesmfa, 0x15, 0x10, 0x00000000, PPC_SPE); -GEN_SPE(evmhoumia, evmhosmia, 0x16, 0x10, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhosmfa, 0x17, 0x10, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhessf, 0x01, 0x10, 0xFFFFFFFF, 0x00000000, PPC_SPE);// +GEN_SPE(speundef, evmhossf, 0x03, 0x10, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmheumi, evmhesmi, 0x04, 0x10, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhesmf, 0x05, 0x10, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmhoumi, evmhosmi, 0x06, 0x10, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhosmf, 0x07, 0x10, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhessfa, 0x11, 0x10, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhossfa, 0x13, 0x10, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmheumia, evmhesmia, 0x14, 0x10, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhesmfa, 0x15, 0x10, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmhoumia, evmhosmia, 0x16, 0x10, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhosmfa, 0x17, 0x10, 0xFFFFFFFF, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwhssf, 0x03, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(evmwlumi, speundef, 0x04, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(evmwhumi, evmwhsmi, 0x06, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwhsmf, 0x07, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwssf, 0x09, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwsmf, 0x0D, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwhssfa, 0x13, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(evmwlumia, speundef, 0x14, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(evmwhumia, evmwhsmia, 0x16, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwhsmfa, 0x17, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwssfa, 0x19, 0x11, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwsmfa, 0x1D, 0x11, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwhssf, 0x03, 0x11, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmwlumi, speundef, 0x04, 0x11, 0x00000000, 0xFFFFFFFF, PPC_SPE); +GEN_SPE(evmwhumi, evmwhsmi, 0x06, 0x11, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwhsmf, 0x07, 0x11, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwssf, 0x09, 0x11, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwsmf, 0x0D, 0x11, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwhssfa, 0x13, 0x11, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmwlumia, speundef, 0x14, 0x11, 0x00000000, 0xFFFFFFFF, PPC_SPE); +GEN_SPE(evmwhumia, evmwhsmia, 0x16, 0x11, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwhsmfa, 0x17, 0x11, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwssfa, 0x19, 0x11, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwsmfa, 0x1D, 0x11, 0xFFFFFFFF, 0x00000000, PPC_SPE); -GEN_SPE(evadduiaaw, evaddsiaaw, 0x00, 0x13, 0x0000F800, PPC_SPE); -GEN_SPE(evsubfusiaaw, evsubfssiaaw, 0x01, 0x13, 0x0000F800, PPC_SPE); -GEN_SPE(evaddumiaaw, evaddsmiaaw, 0x04, 0x13, 0x0000F800, PPC_SPE); -GEN_SPE(evsubfumiaaw, evsubfsmiaaw, 0x05, 0x13, 0x0000F800, PPC_SPE); -GEN_SPE(evdivws, evdivwu, 0x06, 0x13, 0x00000000, PPC_SPE); +GEN_SPE(evadduiaaw, evaddsiaaw, 0x00, 0x13, 0x0000F800, 0x0000F800, PPC_SPE); +GEN_SPE(evsubfusiaaw, evsubfssiaaw, 0x01, 0x13, 0x0000F800, 0x0000F800, PPC_SPE); +GEN_SPE(evaddumiaaw, evaddsmiaaw, 0x04, 0x13, 0x0000F800, 0x0000F800, PPC_SPE); +GEN_SPE(evsubfumiaaw, evsubfsmiaaw, 0x05, 0x13, 0x0000F800, 0x0000F800, PPC_SPE); +GEN_SPE(evdivws, evdivwu, 0x06, 0x13, 0x00000000, 0x00000000, PPC_SPE); -GEN_SPE(evmheusiaaw, evmhessiaaw, 0x00, 0x14, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhessfaaw, 0x01, 0x14, 0x00000000, PPC_SPE); -GEN_SPE(evmhousiaaw, evmhossiaaw, 0x02, 0x14, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhossfaaw, 0x03, 0x14, 0x00000000, PPC_SPE); -GEN_SPE(evmheumiaaw, evmhesmiaaw, 0x04, 0x14, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhesmfaaw, 0x05, 0x14, 0x00000000, PPC_SPE); -GEN_SPE(evmhoumiaaw, evmhosmiaaw, 0x06, 0x14, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhosmfaaw, 0x07, 0x14, 0x00000000, PPC_SPE); -GEN_SPE(evmhegumiaa, evmhegsmiaa, 0x14, 0x14, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhegsmfaa, 0x15, 0x14, 0x00000000, PPC_SPE); -GEN_SPE(evmhogumiaa, evmhogsmiaa, 0x16, 0x14, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhogsmfaa, 0x17, 0x14, 0x00000000, PPC_SPE); +GEN_SPE(evmheusiaaw, evmhessiaaw, 0x00, 0x14, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhessfaaw, 0x01, 0x14, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmhousiaaw, evmhossiaaw, 0x02, 0x14, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhossfaaw, 0x03, 0x14, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmheumiaaw, evmhesmiaaw, 0x04, 0x14, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhesmfaaw, 0x05, 0x14, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmhoumiaaw, evmhosmiaaw, 0x06, 0x14, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhosmfaaw, 0x07, 0x14, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmhegumiaa, evmhegsmiaa, 0x14, 0x14, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhegsmfaa, 0x15, 0x14, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmhogumiaa, evmhogsmiaa, 0x16, 0x14, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhogsmfaa, 0x17, 0x14, 0xFFFFFFFF, 0x00000000, PPC_SPE); -GEN_SPE(evmwlusiaaw, evmwlssiaaw, 0x00, 0x15, 0x00000000, PPC_SPE); -GEN_SPE(evmwlumiaaw, evmwlsmiaaw, 0x04, 0x15, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwssfaa, 0x09, 0x15, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwsmfaa, 0x0D, 0x15, 0x00000000, PPC_SPE); +GEN_SPE(evmwlusiaaw, evmwlssiaaw, 0x00, 0x15, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(evmwlumiaaw, evmwlsmiaaw, 0x04, 0x15, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwssfaa, 0x09, 0x15, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwsmfaa, 0x0D, 0x15, 0xFFFFFFFF, 0x00000000, PPC_SPE); -GEN_SPE(evmheusianw, evmhessianw, 0x00, 0x16, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhessfanw, 0x01, 0x16, 0x00000000, PPC_SPE); -GEN_SPE(evmhousianw, evmhossianw, 0x02, 0x16, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhossfanw, 0x03, 0x16, 0x00000000, PPC_SPE); -GEN_SPE(evmheumianw, evmhesmianw, 0x04, 0x16, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhesmfanw, 0x05, 0x16, 0x00000000, PPC_SPE); -GEN_SPE(evmhoumianw, evmhosmianw, 0x06, 0x16, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhosmfanw, 0x07, 0x16, 0x00000000, PPC_SPE); -GEN_SPE(evmhegumian, evmhegsmian, 0x14, 0x16, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhegsmfan, 0x15, 0x16, 0x00000000, PPC_SPE); -GEN_SPE(evmhigumian, evmhigsmian, 0x16, 0x16, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmhogsmfan, 0x17, 0x16, 0x00000000, PPC_SPE); +GEN_SPE(evmheusianw, evmhessianw, 0x00, 0x16, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhessfanw, 0x01, 0x16, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmhousianw, evmhossianw, 0x02, 0x16, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhossfanw, 0x03, 0x16, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmheumianw, evmhesmianw, 0x04, 0x16, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhesmfanw, 0x05, 0x16, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmhoumianw, evmhosmianw, 0x06, 0x16, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhosmfanw, 0x07, 0x16, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmhegumian, evmhegsmian, 0x14, 0x16, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhegsmfan, 0x15, 0x16, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmhigumian, evmhigsmian, 0x16, 0x16, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmhogsmfan, 0x17, 0x16, 0xFFFFFFFF, 0x00000000, PPC_SPE); -GEN_SPE(evmwlusianw, evmwlssianw, 0x00, 0x17, 0x00000000, PPC_SPE); -GEN_SPE(evmwlumianw, evmwlsmianw, 0x04, 0x17, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwssfan, 0x09, 0x17, 0x00000000, PPC_SPE); -GEN_SPE(evmwumian, evmwsmian, 0x0C, 0x17, 0x00000000, PPC_SPE); -GEN_SPE(speundef, evmwsmfan, 0x0D, 0x17, 0x00000000, PPC_SPE); +GEN_SPE(evmwlusianw, evmwlssianw, 0x00, 0x17, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(evmwlumianw, evmwlsmianw, 0x04, 0x17, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwssfan, 0x09, 0x17, 0xFFFFFFFF, 0x00000000, PPC_SPE); +GEN_SPE(evmwumian, evmwsmian, 0x0C, 0x17, 0x00000000, 0x00000000, PPC_SPE); +GEN_SPE(speundef, evmwsmfan, 0x0D, 0x17, 0xFFFFFFFF, 0x00000000, PPC_SPE); #endif /*** SPE floating-point extension ***/ @@ -8131,20 +8165,20 @@ GEN_SPEFPUOP_COMP_64(evfststlt); GEN_SPEFPUOP_COMP_64(evfststeq); /* Opcodes definitions */ -GEN_SPE(evfsadd, evfssub, 0x00, 0x0A, 0x00000000, PPC_SPE_SINGLE); // -GEN_SPE(evfsabs, evfsnabs, 0x02, 0x0A, 0x0000F800, PPC_SPE_SINGLE); // -GEN_SPE(evfsneg, speundef, 0x03, 0x0A, 0x0000F800, PPC_SPE_SINGLE); // -GEN_SPE(evfsmul, evfsdiv, 0x04, 0x0A, 0x00000000, PPC_SPE_SINGLE); // -GEN_SPE(evfscmpgt, evfscmplt, 0x06, 0x0A, 0x00600000, PPC_SPE_SINGLE); // -GEN_SPE(evfscmpeq, speundef, 0x07, 0x0A, 0x00600000, PPC_SPE_SINGLE); // -GEN_SPE(evfscfui, evfscfsi, 0x08, 0x0A, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(evfscfuf, evfscfsf, 0x09, 0x0A, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(evfsctui, evfsctsi, 0x0A, 0x0A, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(evfsctuf, evfsctsf, 0x0B, 0x0A, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(evfsctuiz, speundef, 0x0C, 0x0A, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(evfsctsiz, speundef, 0x0D, 0x0A, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(evfststgt, evfststlt, 0x0E, 0x0A, 0x00600000, PPC_SPE_SINGLE); // -GEN_SPE(evfststeq, speundef, 0x0F, 0x0A, 0x00600000, PPC_SPE_SINGLE); // +GEN_SPE(evfsadd, evfssub, 0x00, 0x0A, 0x00000000, 0x00000000, PPC_SPE_SINGLE); // +GEN_SPE(evfsabs, evfsnabs, 0x02, 0x0A, 0x0000F800, 0x0000F800, PPC_SPE_SINGLE); // +GEN_SPE(evfsneg, speundef, 0x03, 0x0A, 0x0000F800, 0xFFFFFFFF, PPC_SPE_SINGLE); // +GEN_SPE(evfsmul, evfsdiv, 0x04, 0x0A, 0x00000000, 0x00000000, PPC_SPE_SINGLE); // +GEN_SPE(evfscmpgt, evfscmplt, 0x06, 0x0A, 0x00600000, 0x00600000, PPC_SPE_SINGLE); // +GEN_SPE(evfscmpeq, speundef, 0x07, 0x0A, 0x00600000, 0xFFFFFFFF, PPC_SPE_SINGLE); // +GEN_SPE(evfscfui, evfscfsi, 0x08, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE); // +GEN_SPE(evfscfuf, evfscfsf, 0x09, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE); // +GEN_SPE(evfsctui, evfsctsi, 0x0A, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE); // +GEN_SPE(evfsctuf, evfsctsf, 0x0B, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE); // +GEN_SPE(evfsctuiz, speundef, 0x0C, 0x0A, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE); // +GEN_SPE(evfsctsiz, speundef, 0x0D, 0x0A, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE); // +GEN_SPE(evfststgt, evfststlt, 0x0E, 0x0A, 0x00600000, 0x00600000, PPC_SPE_SINGLE); // +GEN_SPE(evfststeq, speundef, 0x0F, 0x0A, 0x00600000, 0xFFFFFFFF, PPC_SPE_SINGLE); // /* Single precision floating-point operations */ /* Arithmetic */ @@ -8199,20 +8233,20 @@ GEN_SPEFPUOP_COMP_32(efststlt); GEN_SPEFPUOP_COMP_32(efststeq); /* Opcodes definitions */ -GEN_SPE(efsadd, efssub, 0x00, 0x0B, 0x00000000, PPC_SPE_SINGLE); // -GEN_SPE(efsabs, efsnabs, 0x02, 0x0B, 0x0000F800, PPC_SPE_SINGLE); // -GEN_SPE(efsneg, speundef, 0x03, 0x0B, 0x0000F800, PPC_SPE_SINGLE); // -GEN_SPE(efsmul, efsdiv, 0x04, 0x0B, 0x00000000, PPC_SPE_SINGLE); // -GEN_SPE(efscmpgt, efscmplt, 0x06, 0x0B, 0x00600000, PPC_SPE_SINGLE); // -GEN_SPE(efscmpeq, efscfd, 0x07, 0x0B, 0x00600000, PPC_SPE_SINGLE); // -GEN_SPE(efscfui, efscfsi, 0x08, 0x0B, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(efscfuf, efscfsf, 0x09, 0x0B, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(efsctui, efsctsi, 0x0A, 0x0B, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(efsctuf, efsctsf, 0x0B, 0x0B, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(efsctuiz, speundef, 0x0C, 0x0B, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(efsctsiz, speundef, 0x0D, 0x0B, 0x00180000, PPC_SPE_SINGLE); // -GEN_SPE(efststgt, efststlt, 0x0E, 0x0B, 0x00600000, PPC_SPE_SINGLE); // -GEN_SPE(efststeq, speundef, 0x0F, 0x0B, 0x00600000, PPC_SPE_SINGLE); // +GEN_SPE(efsadd, efssub, 0x00, 0x0B, 0x00000000, 0x00000000, PPC_SPE_SINGLE); // +GEN_SPE(efsabs, efsnabs, 0x02, 0x0B, 0x0000F800, 0x0000F800, PPC_SPE_SINGLE); // +GEN_SPE(efsneg, speundef, 0x03, 0x0B, 0x0000F800, 0xFFFFFFFF, PPC_SPE_SINGLE); // +GEN_SPE(efsmul, efsdiv, 0x04, 0x0B, 0x00000000, 0x00000000, PPC_SPE_SINGLE); // +GEN_SPE(efscmpgt, efscmplt, 0x06, 0x0B, 0x00600000, 0x00600000, PPC_SPE_SINGLE); // +GEN_SPE(efscmpeq, efscfd, 0x07, 0x0B, 0x00600000, 0x00180000, PPC_SPE_SINGLE); // +GEN_SPE(efscfui, efscfsi, 0x08, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE); // +GEN_SPE(efscfuf, efscfsf, 0x09, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE); // +GEN_SPE(efsctui, efsctsi, 0x0A, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE); // +GEN_SPE(efsctuf, efsctsf, 0x0B, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE); // +GEN_SPE(efsctuiz, speundef, 0x0C, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE); // +GEN_SPE(efsctsiz, speundef, 0x0D, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE); // +GEN_SPE(efststgt, efststlt, 0x0E, 0x0B, 0x00600000, 0x00600000, PPC_SPE_SINGLE); // +GEN_SPE(efststeq, speundef, 0x0F, 0x0B, 0x00600000, 0xFFFFFFFF, PPC_SPE_SINGLE); // /* Double precision floating-point operations */ /* Arithmetic */ @@ -8286,22 +8320,22 @@ GEN_SPEFPUOP_COMP_64(efdtstlt); GEN_SPEFPUOP_COMP_64(efdtsteq); /* Opcodes definitions */ -GEN_SPE(efdadd, efdsub, 0x10, 0x0B, 0x00000000, PPC_SPE_DOUBLE); // -GEN_SPE(efdcfuid, efdcfsid, 0x11, 0x0B, 0x00180000, PPC_SPE_DOUBLE); // -GEN_SPE(efdabs, efdnabs, 0x12, 0x0B, 0x0000F800, PPC_SPE_DOUBLE); // -GEN_SPE(efdneg, speundef, 0x13, 0x0B, 0x0000F800, PPC_SPE_DOUBLE); // -GEN_SPE(efdmul, efddiv, 0x14, 0x0B, 0x00000000, PPC_SPE_DOUBLE); // -GEN_SPE(efdctuidz, efdctsidz, 0x15, 0x0B, 0x00180000, PPC_SPE_DOUBLE); // -GEN_SPE(efdcmpgt, efdcmplt, 0x16, 0x0B, 0x00600000, PPC_SPE_DOUBLE); // -GEN_SPE(efdcmpeq, efdcfs, 0x17, 0x0B, 0x00600000, PPC_SPE_DOUBLE); // -GEN_SPE(efdcfui, efdcfsi, 0x18, 0x0B, 0x00180000, PPC_SPE_DOUBLE); // -GEN_SPE(efdcfuf, efdcfsf, 0x19, 0x0B, 0x00180000, PPC_SPE_DOUBLE); // -GEN_SPE(efdctui, efdctsi, 0x1A, 0x0B, 0x00180000, PPC_SPE_DOUBLE); // -GEN_SPE(efdctuf, efdctsf, 0x1B, 0x0B, 0x00180000, PPC_SPE_DOUBLE); // -GEN_SPE(efdctuiz, speundef, 0x1C, 0x0B, 0x00180000, PPC_SPE_DOUBLE); // -GEN_SPE(efdctsiz, speundef, 0x1D, 0x0B, 0x00180000, PPC_SPE_DOUBLE); // -GEN_SPE(efdtstgt, efdtstlt, 0x1E, 0x0B, 0x00600000, PPC_SPE_DOUBLE); // -GEN_SPE(efdtsteq, speundef, 0x1F, 0x0B, 0x00600000, PPC_SPE_DOUBLE); // +GEN_SPE(efdadd, efdsub, 0x10, 0x0B, 0x00000000, 0x00000000, PPC_SPE_DOUBLE); // +GEN_SPE(efdcfuid, efdcfsid, 0x11, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE); // +GEN_SPE(efdabs, efdnabs, 0x12, 0x0B, 0x0000F800, 0x0000F800, PPC_SPE_DOUBLE); // +GEN_SPE(efdneg, speundef, 0x13, 0x0B, 0x0000F800, 0xFFFFFFFF, PPC_SPE_DOUBLE); // +GEN_SPE(efdmul, efddiv, 0x14, 0x0B, 0x00000000, 0x00000000, PPC_SPE_DOUBLE); // +GEN_SPE(efdctuidz, efdctsidz, 0x15, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE); // +GEN_SPE(efdcmpgt, efdcmplt, 0x16, 0x0B, 0x00600000, 0x00600000, PPC_SPE_DOUBLE); // +GEN_SPE(efdcmpeq, efdcfs, 0x17, 0x0B, 0x00600000, 0x00180000, PPC_SPE_DOUBLE); // +GEN_SPE(efdcfui, efdcfsi, 0x18, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE); // +GEN_SPE(efdcfuf, efdcfsf, 0x19, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE); // +GEN_SPE(efdctui, efdctsi, 0x1A, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE); // +GEN_SPE(efdctuf, efdctsf, 0x1B, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE); // +GEN_SPE(efdctuiz, speundef, 0x1C, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_DOUBLE); // +GEN_SPE(efdctsiz, speundef, 0x1D, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_DOUBLE); // +GEN_SPE(efdtstgt, efdtstlt, 0x1E, 0x0B, 0x00600000, 0x00600000, PPC_SPE_DOUBLE); // +GEN_SPE(efdtsteq, speundef, 0x1F, 0x0B, 0x00600000, 0xFFFFFFFF, PPC_SPE_DOUBLE); // static opcode_t opcodes[] = { GEN_HANDLER(invalid, 0x00, 0x00, 0x00, 0xFFFFFFFF, PPC_NONE), @@ -9070,84 +9104,84 @@ GEN_VAFORM_PAIRED(vsel, vperm, 21), GEN_VAFORM_PAIRED(vmaddfp, vnmsubfp, 23), #undef GEN_SPE -#define GEN_SPE(name0, name1, opc2, opc3, inval, type) \ -GEN_HANDLER(name0##_##name1, 0x04, opc2, opc3, inval, type) -GEN_SPE(evaddw, speundef, 0x00, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evaddiw, speundef, 0x01, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evsubfw, speundef, 0x02, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evsubifw, speundef, 0x03, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evabs, evneg, 0x04, 0x08, 0x0000F800, PPC_SPE), -GEN_SPE(evextsb, evextsh, 0x05, 0x08, 0x0000F800, PPC_SPE), -GEN_SPE(evrndw, evcntlzw, 0x06, 0x08, 0x0000F800, PPC_SPE), -GEN_SPE(evcntlsw, brinc, 0x07, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evmra, speundef, 0x02, 0x13, 0x0000F800, PPC_SPE), -GEN_SPE(speundef, evand, 0x08, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evandc, speundef, 0x09, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evxor, evor, 0x0B, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evnor, eveqv, 0x0C, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evmwumi, evmwsmi, 0x0C, 0x11, 0x00000000, PPC_SPE), -GEN_SPE(evmwumia, evmwsmia, 0x1C, 0x11, 0x00000000, PPC_SPE), -GEN_SPE(evmwumiaa, evmwsmiaa, 0x0C, 0x15, 0x00000000, PPC_SPE), -GEN_SPE(speundef, evorc, 0x0D, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evnand, speundef, 0x0F, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evsrwu, evsrws, 0x10, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evsrwiu, evsrwis, 0x11, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evslw, speundef, 0x12, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evslwi, speundef, 0x13, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evrlw, evsplati, 0x14, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evrlwi, evsplatfi, 0x15, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evmergehi, evmergelo, 0x16, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evmergehilo, evmergelohi, 0x17, 0x08, 0x00000000, PPC_SPE), -GEN_SPE(evcmpgtu, evcmpgts, 0x18, 0x08, 0x00600000, PPC_SPE), -GEN_SPE(evcmpltu, evcmplts, 0x19, 0x08, 0x00600000, PPC_SPE), -GEN_SPE(evcmpeq, speundef, 0x1A, 0x08, 0x00600000, PPC_SPE), +#define GEN_SPE(name0, name1, opc2, opc3, inval0, inval1, type) \ + GEN_OPCODE_DUAL(name0##_##name1, 0x04, opc2, opc3, inval0, inval1, type, PPC_NONE) +GEN_SPE(evaddw, speundef, 0x00, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE), +GEN_SPE(evaddiw, speundef, 0x01, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE), +GEN_SPE(evsubfw, speundef, 0x02, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE), +GEN_SPE(evsubifw, speundef, 0x03, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE), +GEN_SPE(evabs, evneg, 0x04, 0x08, 0x0000F800, 0x0000F800, PPC_SPE), +GEN_SPE(evextsb, evextsh, 0x05, 0x08, 0x0000F800, 0x0000F800, PPC_SPE), +GEN_SPE(evrndw, evcntlzw, 0x06, 0x08, 0x0000F800, 0x0000F800, PPC_SPE), +GEN_SPE(evcntlsw, brinc, 0x07, 0x08, 0x0000F800, 0x00000000, PPC_SPE), +GEN_SPE(evmra, speundef, 0x02, 0x13, 0x0000F800, 0xFFFFFFFF, PPC_SPE), +GEN_SPE(speundef, evand, 0x08, 0x08, 0xFFFFFFFF, 0x00000000, PPC_SPE), +GEN_SPE(evandc, speundef, 0x09, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE), +GEN_SPE(evxor, evor, 0x0B, 0x08, 0x00000000, 0x00000000, PPC_SPE), +GEN_SPE(evnor, eveqv, 0x0C, 0x08, 0x00000000, 0x00000000, PPC_SPE), +GEN_SPE(evmwumi, evmwsmi, 0x0C, 0x11, 0x00000000, 0x00000000, PPC_SPE), +GEN_SPE(evmwumia, evmwsmia, 0x1C, 0x11, 0x00000000, 0x00000000, PPC_SPE), +GEN_SPE(evmwumiaa, evmwsmiaa, 0x0C, 0x15, 0x00000000, 0x00000000, PPC_SPE), +GEN_SPE(speundef, evorc, 0x0D, 0x08, 0xFFFFFFFF, 0x00000000, PPC_SPE), +GEN_SPE(evnand, speundef, 0x0F, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE), +GEN_SPE(evsrwu, evsrws, 0x10, 0x08, 0x00000000, 0x00000000, PPC_SPE), +GEN_SPE(evsrwiu, evsrwis, 0x11, 0x08, 0x00000000, 0x00000000, PPC_SPE), +GEN_SPE(evslw, speundef, 0x12, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE), +GEN_SPE(evslwi, speundef, 0x13, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE), +GEN_SPE(evrlw, evsplati, 0x14, 0x08, 0x00000000, 0x0000F800, PPC_SPE), +GEN_SPE(evrlwi, evsplatfi, 0x15, 0x08, 0x00000000, 0x0000F800, PPC_SPE), +GEN_SPE(evmergehi, evmergelo, 0x16, 0x08, 0x00000000, 0x00000000, PPC_SPE), +GEN_SPE(evmergehilo, evmergelohi, 0x17, 0x08, 0x00000000, 0x00000000, PPC_SPE), +GEN_SPE(evcmpgtu, evcmpgts, 0x18, 0x08, 0x00600000, 0x00600000, PPC_SPE), +GEN_SPE(evcmpltu, evcmplts, 0x19, 0x08, 0x00600000, 0x00600000, PPC_SPE), +GEN_SPE(evcmpeq, speundef, 0x1A, 0x08, 0x00600000, 0xFFFFFFFF, PPC_SPE), -GEN_SPE(evfsadd, evfssub, 0x00, 0x0A, 0x00000000, PPC_SPE_SINGLE), -GEN_SPE(evfsabs, evfsnabs, 0x02, 0x0A, 0x0000F800, PPC_SPE_SINGLE), -GEN_SPE(evfsneg, speundef, 0x03, 0x0A, 0x0000F800, PPC_SPE_SINGLE), -GEN_SPE(evfsmul, evfsdiv, 0x04, 0x0A, 0x00000000, PPC_SPE_SINGLE), -GEN_SPE(evfscmpgt, evfscmplt, 0x06, 0x0A, 0x00600000, PPC_SPE_SINGLE), -GEN_SPE(evfscmpeq, speundef, 0x07, 0x0A, 0x00600000, PPC_SPE_SINGLE), -GEN_SPE(evfscfui, evfscfsi, 0x08, 0x0A, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(evfscfuf, evfscfsf, 0x09, 0x0A, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(evfsctui, evfsctsi, 0x0A, 0x0A, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(evfsctuf, evfsctsf, 0x0B, 0x0A, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(evfsctuiz, speundef, 0x0C, 0x0A, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(evfsctsiz, speundef, 0x0D, 0x0A, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(evfststgt, evfststlt, 0x0E, 0x0A, 0x00600000, PPC_SPE_SINGLE), -GEN_SPE(evfststeq, speundef, 0x0F, 0x0A, 0x00600000, PPC_SPE_SINGLE), +GEN_SPE(evfsadd, evfssub, 0x00, 0x0A, 0x00000000, 0x00000000, PPC_SPE_SINGLE), +GEN_SPE(evfsabs, evfsnabs, 0x02, 0x0A, 0x0000F800, 0x0000F800, PPC_SPE_SINGLE), +GEN_SPE(evfsneg, speundef, 0x03, 0x0A, 0x0000F800, 0xFFFFFFFF, PPC_SPE_SINGLE), +GEN_SPE(evfsmul, evfsdiv, 0x04, 0x0A, 0x00000000, 0x00000000, PPC_SPE_SINGLE), +GEN_SPE(evfscmpgt, evfscmplt, 0x06, 0x0A, 0x00600000, 0x00600000, PPC_SPE_SINGLE), +GEN_SPE(evfscmpeq, speundef, 0x07, 0x0A, 0x00600000, 0xFFFFFFFF, PPC_SPE_SINGLE), +GEN_SPE(evfscfui, evfscfsi, 0x08, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE), +GEN_SPE(evfscfuf, evfscfsf, 0x09, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE), +GEN_SPE(evfsctui, evfsctsi, 0x0A, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE), +GEN_SPE(evfsctuf, evfsctsf, 0x0B, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE), +GEN_SPE(evfsctuiz, speundef, 0x0C, 0x0A, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE), +GEN_SPE(evfsctsiz, speundef, 0x0D, 0x0A, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE), +GEN_SPE(evfststgt, evfststlt, 0x0E, 0x0A, 0x00600000, 0x00600000, PPC_SPE_SINGLE), +GEN_SPE(evfststeq, speundef, 0x0F, 0x0A, 0x00600000, 0xFFFFFFFF, PPC_SPE_SINGLE), -GEN_SPE(efsadd, efssub, 0x00, 0x0B, 0x00000000, PPC_SPE_SINGLE), -GEN_SPE(efsabs, efsnabs, 0x02, 0x0B, 0x0000F800, PPC_SPE_SINGLE), -GEN_SPE(efsneg, speundef, 0x03, 0x0B, 0x0000F800, PPC_SPE_SINGLE), -GEN_SPE(efsmul, efsdiv, 0x04, 0x0B, 0x00000000, PPC_SPE_SINGLE), -GEN_SPE(efscmpgt, efscmplt, 0x06, 0x0B, 0x00600000, PPC_SPE_SINGLE), -GEN_SPE(efscmpeq, efscfd, 0x07, 0x0B, 0x00600000, PPC_SPE_SINGLE), -GEN_SPE(efscfui, efscfsi, 0x08, 0x0B, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(efscfuf, efscfsf, 0x09, 0x0B, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(efsctui, efsctsi, 0x0A, 0x0B, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(efsctuf, efsctsf, 0x0B, 0x0B, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(efsctuiz, speundef, 0x0C, 0x0B, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(efsctsiz, speundef, 0x0D, 0x0B, 0x00180000, PPC_SPE_SINGLE), -GEN_SPE(efststgt, efststlt, 0x0E, 0x0B, 0x00600000, PPC_SPE_SINGLE), -GEN_SPE(efststeq, speundef, 0x0F, 0x0B, 0x00600000, PPC_SPE_SINGLE), +GEN_SPE(efsadd, efssub, 0x00, 0x0B, 0x00000000, 0x00000000, PPC_SPE_SINGLE), +GEN_SPE(efsabs, efsnabs, 0x02, 0x0B, 0x0000F800, 0x0000F800, PPC_SPE_SINGLE), +GEN_SPE(efsneg, speundef, 0x03, 0x0B, 0x0000F800, 0xFFFFFFFF, PPC_SPE_SINGLE), +GEN_SPE(efsmul, efsdiv, 0x04, 0x0B, 0x00000000, 0x00000000, PPC_SPE_SINGLE), +GEN_SPE(efscmpgt, efscmplt, 0x06, 0x0B, 0x00600000, 0x00600000, PPC_SPE_SINGLE), +GEN_SPE(efscmpeq, efscfd, 0x07, 0x0B, 0x00600000, 0x00180000, PPC_SPE_SINGLE), +GEN_SPE(efscfui, efscfsi, 0x08, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE), +GEN_SPE(efscfuf, efscfsf, 0x09, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE), +GEN_SPE(efsctui, efsctsi, 0x0A, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE), +GEN_SPE(efsctuf, efsctsf, 0x0B, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE), +GEN_SPE(efsctuiz, speundef, 0x0C, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE), +GEN_SPE(efsctsiz, speundef, 0x0D, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE), +GEN_SPE(efststgt, efststlt, 0x0E, 0x0B, 0x00600000, 0x00600000, PPC_SPE_SINGLE), +GEN_SPE(efststeq, speundef, 0x0F, 0x0B, 0x00600000, 0xFFFFFFFF, PPC_SPE_SINGLE), -GEN_SPE(efdadd, efdsub, 0x10, 0x0B, 0x00000000, PPC_SPE_DOUBLE), -GEN_SPE(efdcfuid, efdcfsid, 0x11, 0x0B, 0x00180000, PPC_SPE_DOUBLE), -GEN_SPE(efdabs, efdnabs, 0x12, 0x0B, 0x0000F800, PPC_SPE_DOUBLE), -GEN_SPE(efdneg, speundef, 0x13, 0x0B, 0x0000F800, PPC_SPE_DOUBLE), -GEN_SPE(efdmul, efddiv, 0x14, 0x0B, 0x00000000, PPC_SPE_DOUBLE), -GEN_SPE(efdctuidz, efdctsidz, 0x15, 0x0B, 0x00180000, PPC_SPE_DOUBLE), -GEN_SPE(efdcmpgt, efdcmplt, 0x16, 0x0B, 0x00600000, PPC_SPE_DOUBLE), -GEN_SPE(efdcmpeq, efdcfs, 0x17, 0x0B, 0x00600000, PPC_SPE_DOUBLE), -GEN_SPE(efdcfui, efdcfsi, 0x18, 0x0B, 0x00180000, PPC_SPE_DOUBLE), -GEN_SPE(efdcfuf, efdcfsf, 0x19, 0x0B, 0x00180000, PPC_SPE_DOUBLE), -GEN_SPE(efdctui, efdctsi, 0x1A, 0x0B, 0x00180000, PPC_SPE_DOUBLE), -GEN_SPE(efdctuf, efdctsf, 0x1B, 0x0B, 0x00180000, PPC_SPE_DOUBLE), -GEN_SPE(efdctuiz, speundef, 0x1C, 0x0B, 0x00180000, PPC_SPE_DOUBLE), -GEN_SPE(efdctsiz, speundef, 0x1D, 0x0B, 0x00180000, PPC_SPE_DOUBLE), -GEN_SPE(efdtstgt, efdtstlt, 0x1E, 0x0B, 0x00600000, PPC_SPE_DOUBLE), -GEN_SPE(efdtsteq, speundef, 0x1F, 0x0B, 0x00600000, PPC_SPE_DOUBLE), +GEN_SPE(efdadd, efdsub, 0x10, 0x0B, 0x00000000, 0x00000000, PPC_SPE_DOUBLE), +GEN_SPE(efdcfuid, efdcfsid, 0x11, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE), +GEN_SPE(efdabs, efdnabs, 0x12, 0x0B, 0x0000F800, 0x0000F800, PPC_SPE_DOUBLE), +GEN_SPE(efdneg, speundef, 0x13, 0x0B, 0x0000F800, 0xFFFFFFFF, PPC_SPE_DOUBLE), +GEN_SPE(efdmul, efddiv, 0x14, 0x0B, 0x00000000, 0x00000000, PPC_SPE_DOUBLE), +GEN_SPE(efdctuidz, efdctsidz, 0x15, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE), +GEN_SPE(efdcmpgt, efdcmplt, 0x16, 0x0B, 0x00600000, 0x00600000, PPC_SPE_DOUBLE), +GEN_SPE(efdcmpeq, efdcfs, 0x17, 0x0B, 0x00600000, 0x00180000, PPC_SPE_DOUBLE), +GEN_SPE(efdcfui, efdcfsi, 0x18, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE), +GEN_SPE(efdcfuf, efdcfsf, 0x19, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE), +GEN_SPE(efdctui, efdctsi, 0x1A, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE), +GEN_SPE(efdctuf, efdctsf, 0x1B, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE), +GEN_SPE(efdctuiz, speundef, 0x1C, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_DOUBLE), +GEN_SPE(efdctsiz, speundef, 0x1D, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_DOUBLE), +GEN_SPE(efdtstgt, efdtstlt, 0x1E, 0x0B, 0x00600000, 0x00600000, PPC_SPE_DOUBLE), +GEN_SPE(efdtsteq, speundef, 0x1F, 0x0B, 0x00600000, 0xFFFFFFFF, PPC_SPE_DOUBLE), #undef GEN_SPEOP_LDST #define GEN_SPEOP_LDST(name, opc2, sh) \ @@ -9484,11 +9518,19 @@ static inline void gen_intermediate_code_internal(CPUState *env, opc3(ctx.opcode), ctx.opcode, ctx.nip - 4, (int)msr_ir); } } else { - if (unlikely((ctx.opcode & handler->inval) != 0)) { + uint32_t inval; + + if (unlikely(handler->type & (PPC_SPE | PPC_SPE_SINGLE | PPC_SPE_DOUBLE) && Rc(ctx.opcode))) { + inval = handler->inval2; + } else { + inval = handler->inval1; + } + + if (unlikely((ctx.opcode & inval) != 0)) { if (qemu_log_enabled()) { qemu_log("invalid bits: %08x for opcode: " "%02x - %02x - %02x (%08x) " TARGET_FMT_lx "\n", - ctx.opcode & handler->inval, opc1(ctx.opcode), + ctx.opcode & inval, opc1(ctx.opcode), opc2(ctx.opcode), opc3(ctx.opcode), ctx.opcode, ctx.nip - 4); } From 9bc884b741d3ab5bc3471a5cbccc38480676bf2b Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 10 Oct 2011 18:31:00 +0000 Subject: [PATCH 08/24] ppc: Generalize the kvmppc_get_clockfreq() function Currently the kvmppc_get_clockfreq() function reads the host's clock frequency from /proc/device-tree, which is useful to past to the guest in KVM setups. However, there are some other host properties advertised in the device tree which can also be relevant to the guests. This patch, therefore, replaces kvmppc_get_clockfreq() which can retrieve any named, single integer property from the host device tree's CPU node. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- target-ppc/kvm.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index 06cad41de5..c48cd76b7c 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -650,37 +650,50 @@ static int kvmppc_find_cpu_dt(char *buf, int buf_len) return 0; } -uint64_t kvmppc_get_clockfreq(void) +/* Read a CPU node property from the host device tree that's a single + * integer (32-bit or 64-bit). Returns 0 if anything goes wrong + * (can't find or open the property, or doesn't understand the + * format) */ +static uint64_t kvmppc_read_int_cpu_dt(const char *propname) { - char buf[512]; - uint32_t tb[2]; + char buf[PATH_MAX]; + union { + uint32_t v32; + uint64_t v64; + } u; FILE *f; int len; if (kvmppc_find_cpu_dt(buf, sizeof(buf))) { - return 0; + return -1; } - strncat(buf, "/clock-frequency", sizeof(buf) - strlen(buf)); + strncat(buf, "/", sizeof(buf) - strlen(buf)); + strncat(buf, propname, sizeof(buf) - strlen(buf)); f = fopen(buf, "rb"); if (!f) { return -1; } - len = fread(tb, sizeof(tb[0]), 2, f); + len = fread(&u, 1, sizeof(u), f); fclose(f); switch (len) { - case 1: - /* freq is only a single cell */ - return tb[0]; - case 2: - return *(uint64_t*)tb; + case 4: + /* property is a 32-bit quantity */ + return be32_to_cpu(u.v32); + case 8: + return be64_to_cpu(u.v64); } return 0; } +uint64_t kvmppc_get_clockfreq(void) +{ + return kvmppc_read_int_cpu_dt("clock-frequency"); +} + int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len) { uint32_t *hc = (uint32_t*)buf; From 6659394fa1fa20aa640efa42c8fa5ee6994b6286 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 10 Oct 2011 18:31:01 +0000 Subject: [PATCH 09/24] pseries: Add device tree properties for VMX/VSX and DFP under kvm Sufficiently recent PAPR specifications define properties "ibm,vmx" and "ibm,dfp" on the CPU node which advertise whether the VMX vector extensions (or the later VSX version) and/or the Decimal Floating Point operations from IBM's recent POWER CPUs are available. Currently we do not put these in the guest device tree and the guest kernel will consequently assume they are not available. This is good, because they are not supported under TCG. VMX is similar enough to Altivec that it might be trivial to support, but VSX and DFP would both require significant work to support in TCG. However, when running under kvm on a host which supports these instructions, there's no reason not to let the guest use them. This patch, therefore, checks for the relevant support on the host CPU and, if present, advertises them to the guest as well. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- hw/spapr.c | 17 +++++++++++++++++ target-ppc/kvm.c | 10 ++++++++++ target-ppc/kvm_ppc.h | 12 ++++++++++++ 3 files changed, 39 insertions(+) diff --git a/hw/spapr.c b/hw/spapr.c index 193398b7a1..4d2a55e355 100644 --- a/hw/spapr.c +++ b/hw/spapr.c @@ -188,6 +188,8 @@ static void *spapr_create_fdt_skel(const char *cpu_model, 0xffffffff, 0xffffffff}; uint32_t tbfreq = kvm_enabled() ? kvmppc_get_tbfreq() : TIMEBASE_FREQ; uint32_t cpufreq = kvm_enabled() ? kvmppc_get_clockfreq() : 1000000000; + uint32_t vmx = kvm_enabled() ? kvmppc_get_vmx() : 0; + uint32_t dfp = kvm_enabled() ? kvmppc_get_dfp() : 0; if ((index % smt) != 0) { continue; @@ -235,6 +237,21 @@ static void *spapr_create_fdt_skel(const char *cpu_model, segs, sizeof(segs)))); } + /* Advertise VMX/VSX (vector extensions) if available + * 0 / no property == no vector extensions + * 1 == VMX / Altivec available + * 2 == VSX available */ + if (vmx) { + _FDT((fdt_property_cell(fdt, "ibm,vmx", vmx))); + } + + /* Advertise DFP (Decimal Floating Point) if available + * 0 / no property == no DFP + * 1 == DFP available */ + if (dfp) { + _FDT((fdt_property_cell(fdt, "ibm,dfp", dfp))); + } + _FDT((fdt_end_node(fdt))); } diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index c48cd76b7c..96139acb23 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -694,6 +694,16 @@ uint64_t kvmppc_get_clockfreq(void) return kvmppc_read_int_cpu_dt("clock-frequency"); } +uint32_t kvmppc_get_vmx(void) +{ + return kvmppc_read_int_cpu_dt("ibm,vmx"); +} + +uint32_t kvmppc_get_dfp(void) +{ + return kvmppc_read_int_cpu_dt("ibm,dfp"); +} + int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len) { uint32_t *hc = (uint32_t*)buf; diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h index 87d1bdd5fd..955729a1cf 100644 --- a/target-ppc/kvm_ppc.h +++ b/target-ppc/kvm_ppc.h @@ -17,6 +17,8 @@ void kvmppc_init(void); uint32_t kvmppc_get_tbfreq(void); uint64_t kvmppc_get_clockfreq(void); +uint32_t kvmppc_get_vmx(void); +uint32_t kvmppc_get_dfp(void); int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len); int kvmppc_set_interrupt(CPUState *env, int irq, int level); void kvmppc_set_papr(CPUState *env); @@ -37,6 +39,16 @@ static inline uint64_t kvmppc_get_clockfreq(void) return 0; } +static inline uint32_t kvmppc_get_vmx(void) +{ + return 0; +} + +static inline uint32_t kvmppc_get_dfp(void) +{ + return 0; +} + static inline int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len) { return -1; From d20dfdd4d21d7cae2cbc29e91674ea45f4a025d6 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Wed, 12 Oct 2011 19:10:30 +0000 Subject: [PATCH 10/24] pseries: Update SLOF firmware image This patch is a general update to the SLOF firmware image used on the pseries machine. This doesn't contain updates for specific features but contains a number of bugfixes and enhancements in the main SLOF tree from Thomas Huth. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- pc-bios/README | 2 +- pc-bios/slof.bin | Bin 578968 -> 738744 bytes roms/SLOF | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pc-bios/README b/pc-bios/README index 32a438efc0..0668559842 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -17,7 +17,7 @@ - SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware implementation for certain IBM POWER hardware. The sources are at https://github.com/dgibson/SLOF, and the image currently in qemu is - built from git tag qemu-slof-20110930. + built from git tag qemu-slof-20111013. - The PXE roms come from the iPXE project. Built with BANNER_TIME 0. Sources available at http://ipxe.org. Vendor:Device ID -> ROM mapping: diff --git a/pc-bios/slof.bin b/pc-bios/slof.bin index b9d4f35053be2cd6f599bffddf0ee99627eb00a9..1e84582cc695ff6e5973e045ef31ca951ca15c79 100644 GIT binary patch literal 738744 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 z z;|<`-=SnlHwEtli@henpq zkKr@U#B!ex>!HR)jvF6Zwp_;jVPLJ_H&3vTd^lmb!GoGrC%#(*Jmdo=|4_7TeGYy~l)GYV< zy5(nbdFq+3YS-t}w0xUBeCk`4%lJOrw){-$sP9<5^T_e8<$k<+mY>;n`T=azcnz(7 z&DiPLj_TKYiJ8wBMsbQT-}e{hBd+>dP=H&U;6W zS1dm+?|9X6pHI#5vr0ELzt*`Sr65&JRkD&afnNQCzktmmn>h!`l8)OXjHqaZgxBYtJ*!Q?Ks;} zda2JNX>hF{!)N@AW<% zNG-(6@Y!x7hPN!2>nD%2Etl=^Bi#@$!)N?HjH;Wj&%knDAJ#+Z&su`dI1`wt{_=gL zm-`WqEQdJrL!4hELY#S!CoMm_?szK1Sr_WlmampL8OzTe!lyoKxyl*|l8Gr+(41{OBxv#_wD1^Bh?2^Bh`!P6|HbjA5ekoPeu5cTK~me#!Dfa*i)s zF6+yqi4bQ$5$Dllh%;|;=B3(|{2xtQzH=5n^|TTBKgzsR9I4x*dCTSa^U;FkzTKkb zM>OEG-7<`7SGHr1R>4)f=TzWR&*hYUZO8E@tkSRUIo^gu-;aEcg1cTxo|LS-JR>e7|<9Hob>9@YiamLg7 zf#WT!-|s@l+pt-N`WzXuR{=e*7zNh5L_Er32IZmwe&~n*6{BmTue2(dt zW6Ndx@Jq&1@#XyVm&+kugO7ImG)lkwgaABY`TW@NREV=b)Tb?9EIFRBT;^LpYxz+U zrvM&N=YG-Z3qAO3m+h$hj~Y2%wp`9<`xVQ5K2^)lrO)_v7?qFA|9%r(wRf10; z`YyQAA0YAjRxk6a&w42RQ3?2rKeSwqi~8)h())gmEk9T4wgj&7^zANNeJKea?f!~J z#h2~Lub7wOUeDzem+k7WQkI|0JQzO>qx6#huQHaG3h=4V!$jo&E55Jd$Z_niik6?- zfzLQ4%MZ&tUbbA;>t9tYFLj;1YI#w3&2rzby5(m#;4_~lOjN&GR$m%9ecN)MC;O-B z@V+#B#%ErNdwtJxKaPFNef|T>-&cgs_{=LR|1r2~*Vk=gx!l+I)sp3M{rp$UmP5@sm~f z9wpiE6iH_2<^% zQ{RSB@n!q`SjTeNK0nsA+~?D?{1~>!_(Pbed`4C;+kwZ%Azp^hI7^nxark4)mdk$j z*NG4>!$+K7r!1H4^RLsE&zIp-pM_EN@%o(QQiosXEq{L!KI0T&BI@w#lGV>MZ|ci1 zs$JO*{JLVfJRkMzs^vbPn&s~w!DsviOjJHitDi5!r@jrN^N~C|mdpM0Uw18k{{%kc z^emVAAio}1F88^9Jq&TiWgPZH<>UK1w)_L^5A{nhQT<)E`n-$(I2VhE|2X@t`0g1B z7m|;sU?So_o(5O?#W8&9xt!wiob%&Z%cWnB=Pds~4?g1*V4~VBTD`1akC#Hc44-i- zF}!BETrYaOZn>;?k2gcS44?7aFsi?D9{PC4a^GK$gVLXtfX_Gsn5g~^t^Saf(~m5d z_4o0y<)@{beqy=LXUXzoDpUOvG!gkc!F*Nzavt$S(sCJ>C)j?JK5coC{YM?1$XG7* ze>{JcDT>Ias~arF~J%YEI(mdkaC zCnlE5^D|E@S?=R6TP}5b5?JSd?3iF7`D79%qHa&7z*T=`zw>0;a;fK&8OyysYq{k4 zWX^J*XWsI?SV!hrgo(VwoSx;r&V9>MWB9DYz;dr2TJFbjWVvj&pB!86>p8LfyexdS zy9^Ui&!_mds;AW9sf6Y7T-H-b%Vm9eDrNb689v&5Dg&e9%lXSw%u8`Oe|airxzy*W zyyZThg5^?&r;3)JH-yi8$}mxNsDP_{WdHS4)p9v+eX3@;Z?|sw39KXAZNjK_SM?ol z!K!x8U>?+WV3dBFy5n6~rT2OEEYDNNIDN}~o&(E22shA=V4~U`gR6Ewn1s*x6U+Vl zS+acZK78tzEtmC(>FD?}uLcRr*H$T9NDkP(%17=`4N{iN{28Pz_w8mZe;;*>pS65- z*YSLa=NvDDc+erlDTa92=}VT&b;tqVSN-z+tynI{?Sq=-a@;Ma$1D!)N}q5p{mL0crEnghNXB>`$(#!Vh z>AK}UPQ&uG^ckmVxg5Ve-L_ngZ=dd1?(5&RT%JdIx@WnsbKi1#zUb+J<=arlJcpM1 zc1M=Wb5l=`!K3Otv3fsVOO}6#^8oEWlYohc^Gwp}WqbHc%5r(W_nEZivYmV;WBKA3 zKHJS&F7xdf=B376_6yJCEth^hQ?UHZ1boIX!Ki*E>W)`nRs0Xt9OwH=zjem(2CUK_ zFY#MeFWa$a+E%}244?UQESK%WGhNGNem>K)+}EdXxjawx%)s*F^6=U25Ju(i>o&6d zL+lUr6Btzo->)UBm+j;;%a%*Oo(0zJO23|E{Zu~EuV<5%%lv;fWw~sxo=scs<76zC z{yv+v{Jk~!=D#SZ{aIu9)YmMR?~VCQ-E!YN}SE{&p?*?e;9+z`Pk}0HfOV<1z~AnIH8_R`2VxZ1r-S{~Q-n`OERxbIA~A9*F;3 z%5r%Q?YXq&=ZZdK`D)==%jNm5=W>>xP=?QT^Drt;c@FKlqUBQ0=Sr5BnK$E9U{pO9 z*&cZnM#VpQ?06kk>7|~}HNdr=?J-W%a#>HGYgsP$qn~SA?(^?hem3)C{2q+TXEC^d z2;K)*`INKpsUN~9z0ZGS^|D=kZftou1D|mwmdpC}+>+(;Jlk{2mP@~W3#{{8*Cbd- z{x%5{k>_tyR=;Z+KJ~P!zx!7mXTFNde)hMy5brvDKEwx(7cBSr7cDPKyA^Pi|Jt{@ zIDB8_Q*Jm;tMrSHINl8DJC4&T{nj z&%d2mz9)4YmnF;Pe!*{-Ethfp9T!vaWgLH(uw2IRcPYzPmEoh^-=$$xoK>zqzsp#@ zJM*SKYx(@x@qCC694}bDSaQ5*xy+N_@qLxg`OKT`R$x?}WqbZR=BxENr*FpS+aW#M zWBe|RiZA2%yIx37pZdP#GQPiKzg0f(OT(vrXt~#qEI*(9q<(Cyh<@{)vwA|}cmdknEFm3rpxIz4k<&ys}Yx%}9eCAVtiORnSuIf2Y z9rY#4&lg^{T%H#iRxFqL5380JTJRaaX1QE<9o8-P{c2cVpwBprr}`!HcG$7{lk@PY z@53m)%){XTT-BjehEM&_azBnE%Qvz=)Q>Iq<2bS0>z6F|{av>F^b~x=e?9>dk^l2a ztCu{V=W?oFr)S_ZPTF$G^Lf4>rO#R}c|M=Bd}9wj;}>9}@+?}t)cN_62vRsZso^M;8kp6bSqvCh1Ue52H=W?pfho|7P z-M;0%Ujxf8$it_81QXTn7+l4d^YP~=mdpL_=UFGE_w6oQenAyJ+I=Ab6VdJqNvoIb z$qVeCiZAo?g|y|e|9v52`5x4<-K^!S#*XJK_wnk7I0egPfBizy^216_Ppk5m z_2q@K<+43|p<=llC%jOz{D3-q=0mIE%lv<#VYzR&X}O%oz0k7U$7x$G*HK^SSnlI@ zEtmTaFZ3*zdGbQv@(Vdm?AH(`YMzX&-jCPVazB42miuvEvfRg6wp^YccoA6FS^E28 z!g84pFD5OQ`&KWeEI+0OAN_qXZTW#5Kk|&_G9O;dSuXj%n73T6tG`&V+{Z6k?)z1; z+~;4mT#id$tXS^jR4tcrf06xG^Y+3XeD;_9ju`hBn^rIT{TEx7`}l3k7ZdOqzY7x; zpY5xBWd6L^x7^oxV7aU>FAgoga0x!!9a-+{Gq&94Ke7BBY50t@3=@(6OMF}9e^HWP zA^8&ft@t~#j`MxRrQMfOmY>RgGEN32s$IrYan2jVr#@%7tQRlkLwpRM`a+1;94}ff z^?#{kxo@{@xzzckisin)Rm(42hR=NJFj4(&fUEw>Jb9^Uxol@%YFRGp?@Jxa{djdP z_j&d#zo-nKc@AKr@*IMzJY_rZ(#Y~NmmO9 zp9pc*i#%!h;@I(&<@067GnUKs&);V)m;KuBbCzEu?dC1_?G`MTy8XUrxsPA6T;{{? z%OOsm{jG+0&2d^)H<>5DZ-n^3>DdphPdMJP-1oO_d7=!T`E)FoasPeS@^@C8z7HEU z?#xT&^B(Ef(DHrr@Y(Lj^2M>^v?`7qKmUGWxg0oc2pdx+skRoFY3cbJ}+lsBI@>X4qU~VFT&T&~-^ zT(aEfQ?~qKsY4B1<+C;1pxru*YWKZ;_{^sXqx5qA`*I6h>1EtsZd)$n^>WAZ`7wOP z?^^E1t7o~)hnM@7`*9pt?&AzC_w^ZBesLK-^O?Xz^>+ze^>@t}KK09%%YNz)d|T-+ zp%48Z5|+z;>JLfFCC@*kEWe}#pK&rUD$iYl0|D@?)gMVY^?4YjmvQ_<0bJ#|p#h)z zqUEx^{R7)qdY@<6@}tx68K(-P+Lh}qf2f12IG0dIeG5kEeV%P_rI-6Yf9QmG7e3?k zLVVzO-}1BTj`MvL|7hVu%U4UBk>zJo$9Bh-%YC0eOe|mDhEM&nrsytK)da>ZP8etkuiWeT+Fa7;v$?E0$+aJr8%XadQ70bQ8YPoDD|5&qJ?mzyq zZn>{d!}3xeKJ#zGMCH$V=>D=l)ORiS`S&cB>yv-%Tki88Snl;h%YFVM%Qt4=GoJ}e zRQ^j=FW1lixNNx`|GxsP`zzN6UP)Lk`Mi>}yu$tVELsf_>5nMiOQz}uJV!N_E)NwS9zT)fJj?*gsZs8rvWxMyMuH~!7@EN~nxt#z0X<+#wlv6*n+{YhT?&FUw z_wko3_wko4m-XdUVBKHQznZYz>ywttxWAgR{Magd^y}3OOvJdqnzi~})9|U!SuXcG zUd>xB^WoJ(3@=(PF z&-g9NeVyBupV5U+J#AE-dm(+t>HC)Z_yfy#rjGGPFe?5|6UWD}st%VH9AAc2dO42z zGv8MFw>$lx6PC;P{+abqdYPYpPFXJdyFaHbm(O4PIb*qu*PpYN%RK*c&T_dg@aMec zQnx>|A1cpFYw-U+=H3N7uHs4;t!}mDmhC{32x#!DWg8-6f<$6S%WZJWJkrL%5fhUL zLXtLiCUOiJk#UlC+;VUEk&y$LBLg`{j$ds8TrnYhVsOq?CWgoa7%^k!DhZh=6R_nM zw2+e#!9d%x)c5~uS8Z3dW#c60%)R}6Tea)ot5&UAwQALKZ$WRb*CR0Wa6y~GlL!s^ zkFfltXF7vE=qS7ep+P^nLE%}12K^Y)kxx4UgML}B!aETf^j^Jm+4LW&SM=RBer}(_ zdu&|W^Xq(W1j zy3^i>jq7~(R@%6(-@Qe4@)gQQ{&56`KF9PbJb}>2cX>$R^)|iM|K6lcKfMoe@^7&5 zOFI?bXydxQ>`mFY*7IJ+#&titx5dUiJ-6Dp$EVH4OPC+!%-Xoer`^Usji{vWuyKz+ z%V+3K@3-#lvT=`pw~gy|y|>54y?X4m@$2dlr~EktMm>7}o1HvVarpYlX)Th1wLW5rGb6?7)*Xv#ToFcpfapv1vgtNYhx7m0DVd7Z?hCB<} z70%GWCu%;-$H0@7ioVmv7xgK;%f_$HD!j+WJ$?4tctcRp=MWnDIfrq|KZwAP=bng* z_c1W(cPX6w4En!ID!dY*L9g}SS6xK!DEg?4pWCPKxQ**_^(Acl9;S!~UuolBzSTB9QS*rdA1&X6O<%$|^R2USJx<=wav1V>`6g}ro;JkE zrxC$u`KD}ot>^vDY48>s*Ym{vtv0Uv&Hc>ZkW<(D{;Z8(JBT>tY`1ZbzQe|~-`?M8 zD!ZtpKdLjQx1f!JqK($S;$FT>ZHhyj&;^Y%YV92S*u?OmG zd`>swq_4Me-R~br+W5JYoAeDfuKVi)jW({wu?JE%UXnzdd|D6~a_VvHfmR#W?dw3B zjca>5khSs8hY%v}&}Y2(_S4_4c_uJ?mc z8$X|NL(YS78`pMtu+GNyImv_dHm>!5Flpo0H6Tv@3=KV$^eH@L0IaD$H??;Y$Y!Wk!@t|Gi!;S3Ev4TMSGW8-%u72a#(dc1eA&&HFL ziauxKdc1dV(8l$6?+}w2@@V}W3flNblO#MRbclK~^m9&|!XpR`KKE)oYSUjjSJB6d z=sOi&htS}!?fFo>O|RSUp`?v3jU!GusaQiE-A)fR+W4Ij#7UpBaZeA9jo(ZClD-we zXmYmM^j^N%)8Or=!8>eR_rHgzC!<`R9=dE?x1&SdHtvmBz$X1yqXfGy?r_S+J^eT~{?!)5DSsORLqC_i zpzth0qr6{jS2*=y(Cc<|xU+~pr|7$ET>JmS-8SyY*<<5>6GohJ_8}N8U*==TsoTZj zK^xb0emHOA+RonqZ1T}|{zlNoJ^IjTaLQ}Qqs#S1#K!+d>F14V;G>l5ji^np#~W|N zZQPS5VdKFh;?Ub0bvCZ`^G3ampC3n@^hpGU{2reM8~4i9Xyc765BanpFv@kw5rwxR zH28nDSK(QN2EDecH`_ISEzLd+5)6;XGjW5%D zD3?L+>3Pt`b-(aN-o~|@Zvr;?G$sg~6M8d*U=%su4BPbDPTq{zxE@EnS!v@XZHSY9 z)W&sr-;CS1ZbxrYu2IVSW}S`ecJyYwjeGo)Hm=X#zS&^o6HSsVA{Z?|zz&JG**HMjq7^PHQ2be=N#oV^7%#yvUvY}~8goQ>bti#YSmBN(N= z`uW(+<&3 z+xXWgANe#OFv@$$7KJw=G~~QP(>pf3w&(s9n_k;nf9q-RHXFYqf;i>LA~5pRcGBN| z8oa~CJwBZ_?&+b+#wS-J&U||i7<%x^)oau1?+N$!*|_$r{W%-gF2o3pXJgIQDlfFmc9SBYScPX6wO!}O{ zyKVaEuPL1T4Enz%%=+p>VDb+tocv7su)^~;{q&tKKES}FSLGTA712MS=*iEdPbj>y zh<>TU$lyr1LSAYw=4P< zoBpy#6;6I8eV4+s2o3(1^(dVDO!{7hcNWp772bu=q#sl``I-Fd6i$8y{feN%b4B!( z3MW64KH}m>7#RF#9#uH`neH8FY z7ebT2YF|gl&!o>Q`rab?q{90U8uVWeDSQy2!G9LzW_iiaq_1@G-v<$z^!F&7{7m|| z!XpSx`h>#C&!kT(JdV($pP_K3GwB_LClQ+TeF|?tXwqjD?jSVjcPYFDp-JDR@GL@u z{&LblKfiBBVAA&~ybGa0KaKh&eK!Jw{u@Ds=MWn76&(s^I+MQI#s3hp=_5-1KZJ|u z>lJ;}rk|?X;~(Nh^bX>X^AAY`hCEYFD7*ooDNnn?TWtDiS%tSEH0gU3-ht5IUy)RJ zCqje%n}jJ(9|D8^V%5I>K)sptm577>KZ8Z|cPX5DGwGFn{2nJ2w&^FbJmf=t8}zB5 z!kNzCe-UBQ4D_wk$=?wbtT!k0uGnG&{)0yckK||2>-SUMVKM`+ zVScc~cY-#4ZlA(KHm>LI?}TmqrglXiv2kBY;gvS7=kM=S+qfrB)W-FE`JK3p>-q9K z2^(M4jX29yk6;x2ypsfO=)u!ZgN=LgG}`#NeTb7k%V+TM^yAogO&)R5x7fI+pH>_9 z^wVbJo;+C__w>_l0!IOXX=Fq(e4fg9!W^wVSGo;*r|L#?vXpA^1K@XZqVy}igzn*{MI@R`o^kmtRKjca+{tG4kg5tZ~& z8`t&nUfjmRm57sn!p1%NIvdyZ@?O1-ukJ*gd>RmpQZMf{+VtAa-%HuJw$JyR)8H*O zuI=-^*3;l^Htxxvwei(C#3_FVg3;t>`HXsrQ*P3C*?5NOiFez$mv4`aXZjE)J@X$e z-$CF;zPf*ZFK^@8Zr=xN((Cu>-VfTi*7N%z8=n+M9P+#$F2Z{i9RwJ8w{iWx zKt5sPpJ+jx`PSLE9*5+ak0HMvzvYuQ?&+t&#+?qt$=^X>$gk&#dFF5M*ZoVr)y6&k zZ8q-oB2ND82u9=2{7wErMc--T9{(;IZ;mSZ9)zRuXZ{9%uYUV%+^gT5jeGSw2;AhK zN1WwiXzz>tPZ%zpZa3H^)|g%uB457d>U;0l1jwMr_sheJ}Ddb^yApLr=J!Z zUxTRRpG9EG?;y^6+YyYWpAH-M^wVkMUb(t}8~lUhOa9#m4E|oZdTjioAw}P7<6e3D zY}_kv&c@d?AdY;GGce@Q?fQ5SxFL_WhvUrOz;$_#hizP!_jm-j!9VCA&U`Bo7<_bj zk5}7x3FRPt)W$vfxQ%N)98cJ|*2D2S8(-6fIQb_L7;<`gXaH`=>FJ@-#yvfxY~0g> z1Ki*rWI35{3j%|`SFYC6;B7YUl{ahSUU}PXd~F1A=G%q9kjE=;H*iB9ue?1r?v=OK z#=Y|P0XO&ugNQTV90G&CSKh(X;CUO@M*gI=#A z4W(@S+&;vauYMaj(2t8(*74ocVSj7_Ge2har!)x1lZ@ zUx%pV({1BkzCAX+j{0T3%zw0e2W@(7&qH||*Ye{-fpFRzyFDIOWXRxPH&{1oJoK)a%11n9pcwJepHm>zH94^8U zrJjc)2n>0y>_VJ)rH$+P@^I9~_4@_GaT_m5AWl9E4gOjW!*w>U*X@VvZCvYrIBDaT zb|Oyx4K{vtR^cfd_xL!c!CP$n+hN4XztzUIoe#I!__s+;`VIu9o#zzZh0xH$n54pc z5spUBbO!x;(t-a7gHh;5Snt>3x|9U^2YQy{B<{FRfJbm=@E_O3C%~f!O#Y6-;|L9U z?cYWcHm>J`BSrN)whMIRUvJZoCrmtvU^M;>Ha@-*and*1xW_+b05%$ZC-8-%(0AGNdVOG|y9j6b znQxDcd*$u5aoz4l`fNPN^yHJX@o{|$AGC4ZE=KY;KBLa1FHo~Aq4z-Tt)gR zgn=3Qnc0Rod_J<2@{jTGwXZTR&iTmF`XaogpniOgAIrfX^=1C5@BW*=S+VS^fBiQm zh3KQ5s>od zbC6RKH=6(215O~C^b5`3@jDZ8Yn)J~FJHH+AR?K=L#a$*?9PPfJdf#WB7Tu6+*BSb zh|KLXMfGP3qB_%`ulsD_<&jK($>V8}xF;o@)E2 zIbr6dujqK;+qg^wHZDLJW{P-v{Men4>4@`)GsAh_nH_BwjWMTC$ldK!reCbCOT9!L zUv&%9SFIJIc8hNUct)YW#;D^LvAAChtZ{;CA8`T$)1a?ixw?Fr5UZYr&ZhrsD)ZPt zD)Uq7?SK82JTmJJN{qS&_M*fV{3?}M{<~Du@|((Qmb?1AeYvP^T2^0o`|_7ZnwEW# zK0~iaK8H|8KYs^@*~+#uo=#81{rI=#vl*@|DqmTi%&K3O$5x5VXYWM)twQ~MtGDj6 zt5AP3zaCY8zwzoXcBiht$Tj4N`s>Q9J(!Ypi24{nJq)lOU~2=YhXK^X0P2qRXW1TF z1Jm=O{iT+Ph--Jl8>3}~!YoJl;#)=KtPNr+!c;U_C`2p#jm$^eu})w0m=K`pWP__g zozMo-_fJnXm0g#D4Sc8tUMjjy_}Wk>>G6>|)VVK{trRVRLZM2CakbwUjqxpF0&JjH z%F~{xYYJSKLLJ9b$*Y$(E%TSB%fuB`4(fheA(dKk_0njG2sOv86fi&ew{{ zrX`iX8BTg~Ih(-c1Xn-T8n$5Y6HqGUHzQVZnBZKS|?~?Niym ztD}+Te6z1Jzr)v+UOF+A-|g$p@Avf_^Z9y@Rrvaj)%tR={jkj)zRt|SA=LkKSCU@_ zw!!ujO``lSzLQ#57}*f5@Hw;>S%0dYw0@CJvnhdnn7@{RKW7MD+lF4u@f{nJI<)vHKoy|Nsc7v33Fx5(S|Aw}|&Coi<) z1j_m>Z3udP6%c=3xhUVP?}!i4zYKv#Is=`;&a_X_{si*gR=ZU!gs_>P=_H?wqxqc3zT9;(=@HqC?h+ zYENuSvP~7WC(>8_K=^C7`O~#q{hhe?#kUo@sOLOvAR&T}ktT}7(uDZOk1-uD=(mIX&Q=~>p4zR2DBIAg!qrRD%Z{TB z<#ij1ppJu-A->JmfI0~=AAK>u^pdeVKPbP2g`sYy>A%~FvmZ!r9=kKvB}CIQw+%wc zVLp%T6+Zg;%wG8UxNo+Dw#qU?Pq|h9arM&7!e5pTJmS>HfFaFEo4XD^nf~-kzZ=!= zplkR8@oH=fdi`fbFtcUs&Z;f&C)-Bi{Y}W@htfA3>YpX5U40jNo$;=|k@pthVQt@| z`HcQ+P&V|d&`%@Fp|6wr9qyI-?W2B8A2r+s{f5))AP;n0yUmw8Q$7m|!w+lT4CxPm zIT}OzNm38c_e$922%as~<-3T8r_p;8%Ac48*q$V+;b@ z-67!DXuo3)lP-sN4sqop9F#BWmQAei%Ju`~{{r$K)&HL87~K|6JPcl{eonM_yhh>S z`i~P0&C%uafd2PMHmP6Q{_#c6v(cY?Qnf7EXv_S=gR)MxVmA z%XZB=aoh0F9;BNK`Ou#nd&QM+s1tFtv17{r4Yfm^{P~|cj;Ew=Y?>(h5a}O%g)aI``o)$K*`^|BKcSYXu%Y3h6l99ThJ_Dp zWI|?FJ|5pv$YrMF>oOx4PlhozD)~9|_00E@5GLALDA2#B9s~Z|Kq|kAZShA>@L6sm z`1Ktx-#o8SVEln8!bje)nS5sMU_8D_Ov1RthjC0Wb0=*6VlgiB`a7xk_Y3Q!@A{VT zdHw`452$g9^rtB28OJF>cYGqpo@h_1-@B6iE62m=S6*b>NQlk9r)S@FAf{u}8DxW0?4BqHK#3WKR7V_!-yDM=Y)E=cFrcaup!-lbo; zeC$h2%S$l+ytusSV+Ox6^?W9t&n!u0ewc`3tTibrN^)#xN${K>FZ5vSbOL^=d(`~S zzz@FL$@!g@{^ju7OYZn(({l0QmCIMGXw5g?&Xp629Ei|Y79Qr8-quexMT3qbWMGE;~0!<1`arF zY`d{6e5yNdyf3y-)S;bDA}z0>pP|hc&~|<{$o}kRj1PqCs|q>vm1=xYc&&e?h!p!I z(;u09(7)}1?Y7FcV2oK#X%p}p=)1?kH@9hf>R%?u$3eIM6e0APfeeoE(2u~*4spK6 zarRl4AAT(6pq!9{I!MEZ!Dnebgp9IBjj|s>*^zIKlQhyeTg__mQ<@B?ValWwOx=!c%93DazgOQz1ywCQEx%SK(3!dz31N6>cAH*_hV)y(w$^PQf4ztfxZJAKE-i{!C| zq8`4WjB6u#WuvfRq3>aDd6w5G<0Q(DG1AkzO{lUAQbsA;nfmRYe)B0cm-w2^gmlIHa@ax~6Vhmu~rbzRR}@*H|lABTIId4@c!5NoU&?Pnw#bf5`$gsf=%Ue z)4_YUue#}F#cwg@G|i$8MV?S)LzZP}VEL!__h_?RSBHO=Tw7=yO z9dA{L&bMks*ISE4_gl@P=dB&0_pRNc@2&kJH{cV40~I1aQ0o%|i+#a?W?yJvhc7&^ z+ZP$w@2kX`LN(+|q%TJPK2evRD8ne_MZCIyv4}(8^*0MKBexFqwN@m}_Acum_C&j7 z{Y$?Me?9PgbI4uWI(K6d${sk-9HwoyW<+`I7O^F_rnx%$GZ8{t4J5>cay*vXEOsy3WF4`?Dy!ABG!-rx%EP7m?=S(I>eq2)lzbA8dH`iqzyqwS*{r|sjIhFAZz<_LIIevp4~$Lj^mQzU)#Ea}mknO5!ZJ_`^5kwt+4du?JOG?~z zBcsibHs359_@Qga4|a$9!cM^a$u(!4zi!*0Jx zAFB|9$9y6Ozkszmkw+e)b-M_({!9dqWkg*~h3JEg&91o~>-ghKQY&wony9%+1e+H8 zl^heZFU>qrC!DgviPrJxo0oImTsTs--nH}CV}(LL_^{5n2931|->PRXTv~HY;l#?B zgKLo9*EF-_@tTNhpXu=nt^gLGzl6<%Wxx3Zbi9Fcuo(-I;8XRS>?1BGU!9IPuk`rD z73nE1kIWNtyflb$R9$YF@SmxDoSN74*U69V3U$?uTmGcYCUK)Lq-&tgqYh}Z!l&&B z<&7Y1q_qrnwwr6JBg;^aJ!tQ{nHGIH?N<7E?K=VUC)X*HxZx%16Jsnn-$kD(>k~Fk zeRAz`;F0DA*`l%c-*c4&SaMQ6se|QQ%PkaC`4>k87Lk4MM=y&@s~(qf zUGEGC(Twpk`wz%Bwt1EaHZK$tl$@;?TZfzP$2e@cC_mOL8jmf;x{Hr(cKBnE>p|#C z%5{n?kejmeqP{2({WaH44Vh{^naaeps;ny${YKO$9z{Nl2-{hYxKBZ*AmUF#f34B| z;$dJ;jZd`IRERA#wF2$;#3srF7ye}HR1rqlj<6izqXEK7Za`SP~Ik9^_BI*bF04=XI6XggwkKo_u;p{*(}+25Q^eWbta<;OByY?Q&L`GfBbA5?}j z$p2x*^DN{){`#LPf7AHuWZRSaN={6n4Cko)CeW5JK20ooDSid;ap`}Kr4~KrOi90q zHNckXDb$aXesk-ykpW8AH8+ z&v~Qqf$8vP`I01nVtY!vWhpHx%grcw}&%-!rC%|Dmsz{)hWpj`SyNyH}!&H_Np;xevBUj@NU3OnVT2XtzkiUpBIA2v;P; zWVufUefCH{Q8cH4$ozTxMoC0?v3}1k|F%t}NB)DO=RZk~OaGkw;aj*iuls_H7}sKr zPS%&eI5JAxLZ5mEbqW5BEZ^yTh%67*GUPe~_K(xg&T{)e=!5!9Z=0TyWAlna1$BK= zzyI?mV9)a9W%-(2{XVn<^F+)?sblDTT|!KJnRJk&PwLrNHyL$K7&vJwO!pVar|N%= z_yGB4{>Ad?@dMXspfC0%)EV_f9l|y%PU`J{G&8@Pe@#%zwL|F*J`8&EyS90;yH2ik zb{69V^5iA;^(V>my|S~u=|9#NUp0pi=o@IZ0Bd6|HIP$jr=Q5%|HAK zWmNsgS@{_&e~ho_FZI}DV4o<3-WF4*>{r--&=0KId*RZ|%YQ6yor1YB*Qut8(*F5t z;uzQ9Ya%!!Gf&p9>|691j#GSw zUavVT|NGD;mfg@#;#B=y_#@K%+4?!7|9?ofe*LiMFWwT&zQ%|E$vYYOg(>#rS+kpZEF} z+QVk$U(t`yzovK1O0n-^pDg?TtSC|a)p@Zl>=W+C{LGcBOvxqV=%?r>8ljVQuo3#* zG~}C18q#auoe-_RQ0Y>{jdZDpYDM}X_?Cy7+0T{lmvoE8cTl!L+1Gu*c@AX7pSL%g zL`1fKvp?Rd%FFUOc#bnPUVm(jcUomXhIZ~qIZx9cvpt}!sEcwr{z2QLyr=ZdZ2PC2 z<3iv3=garsH?Vw=ujTCI`^ZK~|6eBG-}fu|TF*|t56gZNeM`%KjsE_Afs(K7EakiH zzgBvF|mglQWKcnK!RL-<}`% z3Dd)#+t02(Lc1mXpJC7c|0wVMFRSu)d_Z~WOW|M6{RQc<9@7FJ^Y?5cX(47W62D!Y z5+b6{VF2s##vAJV@+spEV@@FJOP^QaeC2mobLDs&eLxz%l0MR#pTSqE@%MQr`+@s? zsvMo8lp_Gy<-A4PDg1j2$|A?VsvNFwH_nnsUkU$wioYDA>eX-Alx%1g$l|AnoS(zMJoc%>DJz5IqqK54cdFjkMuYv)1!Fyoa8z3 z3dW63qB{6HW&O+3msdu%zCQAdc3~~rJqOc-y^|pK5xJkjGc3?E&Jk`n zoJ0nw>(&U=QNmlaN=$NS4^qnV$HIMOAV zo?~gbPQRpZq-H_kNc_PSw;J#0eQ)P0 zI3&8{Q;#5R3D)&{NsBSN|8(>yTMl(I14ZDk1ntW!OA>%=A3WcMvro}3U#n~zYCOSu zW*ed2jyD&wT)*Xh`0*Wu_T#$?9mn?#@fs z`2{`$enWZ{_u>3u%F1hC z{#vp6#b>zZ9w1HT`d=}h$+{Wo zBhq0{(AS!|)6ccy6hqLxvg%F|Vg2Ad{}y-M%~$UsEhH^wi*7`l>rGT$+AzS~=!QEvd(Fzw5H{nxF`L>tPY$yBJMl=9gdo1ole;qU3Va zNb{$JSQ-D+Biv8t-WkrCFO_=*C}-`r-7^l&%cLy@Qex~&nJ3~REk2jxeopQ8eTmvN zzEpZ3ma2)M9ygRc4qFYbUnl}Ac^+%Q!W8ywj^_5^S((2)ldYz`&Q33Rq&)rDFXg)- zO~GH5r%V2!oc2h2Prvy~l)Z3I68Y;Z^90is_EbH9Y{Tl@ID94i`SHo{c@Fni>AR)xQ|%nK+~_8E{jO}EXou{t zblar<)tG)UF!pEI&wBeJp!{}Z3bsBQO;kWUu%T?St+-%K4;DWbbh4cn!=fAAr^n~ zY?D`B>O=J}C(qaq?^syK@8`ae^drzI&M(JNrpW_q)`n4D_BnC+PR%;{pZplK?+EQC zAsjisR&9AM@XF|O7>m=7po~b{f%6l;23`&P0gVIO4J-<*)xdrPEDr2p1KR{F0j$r! z*0XORf6C6@@$`^d^!mmXR<6Sj(XfttR8HaJUgk28pLLG1rV5QebFTMjIM zdfZ7_V52{x4dquujtYO$8!vo7T~Z$QCn%%qQzftWcF6KU-@wx-JL==T?~*U`_#oaO z;mZd8`@_`8&+q4&*V3f5SrJ(-D~UKIF;*|J@_7l7{yk|i2KLs4csM^r=3?A^C6r&;n~ES5e5*>M(AVx;Xcgvp!-GU z%Zq3CP24GpXN@?>yw!u~<$+q%|{cNlT7 z^L|O(@nU_Xb1~^7U>6&sr6RCMgyy6l$6oJPyzjAI&hcR1`(GwK^moR2KKVu8z*q(8 zS-0f5=uPkgAGOB{UI%VD8(yT5_M-fm_G5hS((`5TW5ycY;u!M&Y#}s<@6yVCOq~aT z-Lnk8CeIr59pOr34ha7vj9E>{-Y`@ z?XtQld2#tQ7-MFBSQn?=+_DvW@E8}HcFDB7n&O{M9a|s->6wo7Oc&o;=wV(U@qS6% zv8`PXA2Hf9_1ymf&p-45&jWl;9gda<@*nd7&x2=rp56fa$->tE8GYqa^oyl z7+;7ov@744(z1N%2ax_Bkp5qhzAq-7s_Dj0r<%U}In7V%;&f$^{LU(jzjWeC?He)QsAd_J zEa#7wo|wKQtpj=G`p-8XBYq~I%>49v6Z`&XcFZ57ALV=q=TZlrU)viSapx@w@y**M zKm2jmn8y4e+Qo7W%Y8HUbA0D6zDAzg%uAgCST9?H+wJImbKDiQMDdzhv(XE9) zMpugq_+D5-lt_B6-$9rfB74%(7oOOhywzr57*zy~}(w(_&Z9(xYnPG z2?$GZ1@Ju7Rw8_x@Xj#qZ@|51J?Qo;Nb3EPxZ|bdmHiH)-YyzhcLJvKMbG3cf&RBKumPgaca2;(noe9_B-2z`~ z3D$(t=#yakct0cHelKH%Y`<08#khx_8WbN+Q~8?AcnB44J)d#7vT z0ayOkWnu#D0^)kVB<^^ze0a|D6k$ZYUlMn`)N}fRJfhw&i924@%{9{_Jd-KMMsvlv zg(TWVW`p4R(xU!p>w=gs45pIbzI)MEp1+oDyRA%=;JXH_t1sZ*-?j{A<-iN~zE-RY z;a+}!f&NSTE#}3G^5pJb$GR2JWr4cmTs9&8b{U_a$#?L%S(iRSND8dvc=fPD3ph3r`G z<97gFz`dV-2KSuZK+n68I;=5J zHjBLcq=U~4!~YLU|L2IyAis~as=s@oIgN9pKcuW9JLh)o*@NU)uA^ z%E+}dR$hX(EGp|V8=`T1>!Yq_fxAAK8TRA+%t*RSUcV^ShFrfJIOqYvc3*KfH^zL`diB7u5FG~Lcc+|_W`46S<5#`V4V4o?8 z8(w;UM9xRx^SG`e?G57+tb?AzHZco*?s2a5bB`cdC~%EsNX=uJ6g?^8q) z`PBm=nz^6#>uYzWK-W$u?n~~%J=W6yDTVhFqL+{7n806;H08~(m(2Z%IO=lU%FAwf zl=Yt$b#>Q>J$qR9i-UV!NsYsL+ZX<-y!j^7`*%8d);Ns0dMD-A7|P#{a`@6^an~Nk zx%QA2e^m~-q&=AYnJ4*c-fWXGhwDr0LIcy*g|C>4^}Zx*F?GwM8PO&CmCSgAXiuxc zXg3!nGf&8g2cIdsZK`hDO_9UEusZ`mEvC zPOX=bn}LM~=C2FI_KHdL7xWwS8F;Th==qIp+_yO@=eM!fpaYa+)w6u3D=4JDkn3XZ zbB+x;2acvi813ksgt%9hpY1L4DBsIC`nuG||Az8un`)kd_AKpcG%yB2o5$zM(zt9{Tvi8dFz3;iB_6u)z_ z^mnkQd(nhlKaclI+t}XNR=~sBFH&_CEUqiNo<{0*dCdAp+5qeTYl=g!>gV(gv0BmC zG0~L;_RBt`JRz3L{(nbI1X`wwvgVAKK$+TnV&%rgBF%TynfAf`!g;zvd=2`#oZpVB z$q4@8*`9Ga}Zu+EDnd_U< z^hJ;nvZqn!Vbpi|HSs-r7T>hzl_8eB=`>ZTtv}Wmgfd) z;^Kx)sB?s&*lw||CW1Zz8EpC@#*45I;5;K3eEN&R|1{qHtBGTCnmr))5z zkN8d<`y|?jS^peYXd6JDjnWRL@H~C~iPM!4Z26OOaydTLYXDd~k$tb(zp8l%$9()& zS$f`hemezwvA%YMJX7Hyq(8uT5H>$gjR%cA3^^VIA9J32E7rn5E_Pfm0{3EIQg#2U z-ylz>XCE)etY^U^I!1iFzXEd28J|jtQhtBo2I!zC2Ifr_zOOhXVnWR&Xk!lM(m%l( z-X%C6up8sQ=R`TjDXfQQR-+Chg#zk9Y{LElc!W^rKGqB3Wvx?0=plUH0d%F$Y!l-W z;>&VAzZrJ_%vRwC{S}!f22vbb=z3$>cz%L@g`*Qw`P?W5O3{z2zI9!*o)?M0wHb$fY~e1fx0Iqy@5j2(>{QwIgILq*%>E2MpZ;)l zET0fxGW1`lrX2c;?TzJ;KClBe?2a?>{v;kk-r$DSqKthLapZFZzHc?Oc_(C8!3cdf``jRo^qd~*ge z$h9W%3+4~Ii=O(-r{-rPlR(0sx6YVEgcsW*=F@?WpUbtI(vBaTel3ag${xom8{7yR z3}s6=XC3*W z>5(_)$TIK5J>%dfzvJ+mRX0Pg*Q4I{xUz}saNmV}d3=Wz?_$s38eMn;)58v)WT>x% z_?WCutQoJsvsRVvTW}k z!~=3*uip5Mr<#LHee3=ob8XrGt8)zA9NQQJxc2hl*^uAu@9{lEnYVG?N%r?fdCW6U zNbg@XK2Uk@GT8D4hrVZ5s%&fpd|v~e1!7oRg>6$msev`?s$*IC-NQ*JqO>XKlr-+Q zkFegyH3*J@cy087p7sZyAm0~l!#WSG4z&XPTHN(=bo@J*KTAN2E-UhjKxlE8TNZg;W+k z()EXhJ@RazoG0Ja%zQas#kh1fXyp1>753$zgQc*|_zsLoV2k5uhpa==>x=f23GiEW zccE+2dtsBN@ru+B#yvQf@tB)WL5{KDQ?ExKFpl=qIgS$Lfk3aKm0+IHUQo9C&5##gNA{}6)yWv)Po;& zl92Wyzp?eXpP2LpzJoaEeW0&1@C_&FeXnu7S@GBPU7t>e>xidPs8?5}+l@56Mw)Ag zXLg0_Ry_;atzA5~9L!AqIo3=96&U|az@AqD*dnaGCllhYKTmqpLznh-dcB9=OO*b` zI2$n9JcH?Z$$2Kuim`u)P4r<6{m%1#bgnXHft3vM#;4zC(_;TpuzroBB}nO}tMv1tRnzyw_LTc#N@Qu*(hf z>ApbQM69vE*TjbWLC>DK4x0t9)ojQ(n<6G9#O-BC2#Yh1a{P+4rScraY7s@=vV7TX zm;*wVg@rd>CoSgxt=j*YK92tH){|p!YyX_(*Zm309?g#Jk>#h~T#4~D_!f`zjQ+g# zq;B#Ru^sMv3$f3OX$kR}Wt1tl6?<#=*3iPj>(c+s85TEYzVIu^{Q3eur@V4+68S<$ zDDP{se{tKiuYAW{V%#&6Fh<#cJu}ej`E%xp!BN+{OnY+Y(44=DJuQ>u+!N~?qAPo` z9A{yEBzEGS<0;IKL_2%}@3D_4FrR;|AEJrXhkmNgPJHIKjJv)~q%lrx%`J1|@W168 zi$t@fov62`N#{(&nr95_8!It3+br%u8w_l$;aK(4SMoXP>d)${AeT(<`lpc>Tt4o4 z*k9VVDVJ;yYJL^_k{ZvUeNgv2BZ_v{#`<5iT151CM9;G@PLty=>IP%;?9daa+t)Gf z_4+~?}J(2cx0z_XcY(3Z2FZ5wk3*|)1T zTG}|$w69vqb%`&y_9fG)^};ixLl*p5dyh!~QXj?VBVWUwyz&{b$Kdb0v$aEuxu(rM zNe4bMU6Ok$wzM!3t3|u`Qg2-**;}`26`pU7)XDF%tru9^k-2I~*8r-*Zs z>_f0u-`kX_d#Y*Xo#iXBSFP6FdSYGR4`Ekz5$nNsy77N3K0o+WW-G>3-;sTK5_>&9 zem`H+)NaAM_82Q>uJfmG{%(cT31m(!`Nf*E`M!1%`RNOJ@VkP0oFVLGqn}OX1jnZ< zIDTVUGvATxkSE|*SmxOn57z6n4Ec?xOp7dkJUun>6zMUyBhPNk?Jlob=6;KI<#JCC zJ?W|S(1YLA1JYvsvAYE}k$Mw4z}PjNnS(Vt_Jg;{@lo?Ctb5Fb&5Y;1^-bli6Jckt z6X?ayIU{w0aakATpNkT{V{Bm-|~rO17Y3&@I4Fmue$$|`~FyqpzS5Zf9oed z^sSxjBcoZ)4{ww6H`l-Td*=-MFNjSpxggeuH3J9wh`^2xLWgU6X-D^sxuY#@YLU=XoYbnNRe#{~Kt&{ztMXygm z7U;W@`GbyY{j|rA(;f}_fK5M=SM=9`{sGX_CJ&K@{N=irnTXLnxXc!qT3 z4_QJ*ytioj4a+d*8DA(Y5~bIoOk;6IBfhB#=T4BeC`|*?#IVN}-3~k62H%OXGwIUL z^*ogjx7P4^)3rTMHC=O4`R17=7o?~3JY~pP$>*E5ic&+aU{M|c)BgXI{*=6VneuTS zc2d4uHu3pM`TRxl4Y%+)Z@*^pK)>uCY zK(iu{&(Ck03cU=A zaV=BC#}y6dBOeDY5C#zXoGE_p-&233pu3uMXak)!NuS94%R6#^j{B>i_w0GYGW=hr zndnn7cj5em?}xHaLtBW~M8qe_chfx7JM0i~vEeH|5k(uR!MmpD%SbmtJ@;{6wrYb9 zc@|zn{_|D-TX27!y1$w8E9wn=MKr1Wu+cx$KhO_A#;YaG$+Gc`iYy!2dNrP37u#EM z0cqU%O5#`&<&tNz@PBr&hvH8?RvKyh8TXcN8s;;sTl*lpY}?>LJR3 z*al*s7f0A0IEIUD9qxf1-SO=YWWDE{N!a&n!Wn@kaXHWJZNxiiT$|)xKk6!!5TE)I z^JRYoxhvQ1!`k*XX_J%Wd?F*l;2#H_oG)(PC+e{tagV#c|EZZq+K8-^jF0pV=s(YA zs6Wv*)z^lw1h#~Ge>ht4r|CuVmGhd!Z^;w&7-Xm~j%Qi^=;lH>*J`;AfU^bHxMdni zwfOuST-)~Fh5Ht^9kjU|^bx|@%W~=l`UpZF6Wn#%8*d|TrIV1>3G~x;vg|j0Ow)i@ zl6s~-Sx%PGfu0u@ekJ8?@rkc9f20rL{+mjcMY#W#d$0FHhkKmG{`A7aVRycP3@{(r zW$X3EG0a!%6}o7#>*wvBiN0 zR&ri|xfAyC0Frvse)Xx~`h3b;1@?j3xNI)!f=YK83}%`a}Ce7IkS`-^ywdTiUUSo|;AI&B{H zHG%yC>u{rM_aVq}1pYW2ZT5dBA+9@*>F(bx{%`sMJX;ZEyKXMQv-!IG($2v<9IFVl z#%duS_CaLXJ^BB*z?J{_QRCU=C|i7C;g27KeayB;rh21sQ`LaDI z-NBX%>s;Lx(kI*F{H>JP&9AVO>0G}-Uo>C(%gy_IZQz}7c?-?^5~d^XYP=(?#(?_2pW63gNnD{3DF-vgQlzRf>FTgv#`+a?LWlzTDXO{u*vi3}GO{^ezckjZFMZh8l8 zlx>Q6x578Me(kzDNRMYcJ2aMlWAhI2cr;T|+3NE*ZmOWoy!Sn}3$vXpEbLn>(-q(^ z_o*}2s*Nlxydv8VWp~@hFMmy1%=5cs-)GF%dL%euDnzWoaLtu2$3k%-_H?T2IQ> zt|G=cY;-kz$qwH$xc+hT4*xoY_u={muD``O-+QC0i}kd(hG}t*I2ffr;ohC$PZk#T zNc|Icb@huUNDp1Pdv_?ao@+^6p`5p3oCOm8Mt%Q37FV`KTLY1~PZ#ULxCLXF))LTE zjNpF)tm}GUD$eu5hB)r6%7VV6Bvpm8e(*<^W3Jzgw*O)heAtdCC))l_?6LH)EhR*J zCZF-%c>V%#=`VN|i0|>Fo5s#w1)t~I+`QYFrm5ns@=W2a^34n2-yHCOFGF37h`!jQdw}(Whd63Yft6rSYC>YZ~noV@WAH_My-(#ZexNi{&{HZ%>DQ z8Q=Ult92&kE6+O1{n~4#zjWokR<3Vn3Ky5dXVj5SU(2z#k2Rawi#ka|4Vd14RH~eSU zKTpM21AST*<^xFkWbOBPChes$q)~fWy>osne5-$qy{zvEfBZR|-#=B3^GT0!>?;f@ z2kJS^dwroiIm`oo&p75OeH?4k*XZxtaLy^)k6O>r|5I1LBQ{|8Ao2jeJow4-)8^PN zAb+s+0*rGeVUJG7(QjhSiv2dnj}LHeoe*+>!q);XxBX7;n- zg|ov!ezRxeT$VBRL{gv(_``Dixn*GA%6DPFPx=?wV*~l>OP){1el7MDrF~N_==2`+ z12~6QIN_GB;Lx6swjTNzbkA#iY6E%vr8-vm46A&?Za&7ll;cmz%KZALtrw9ch4;{A ze0-0MXR&TQ=?6h!(-*G~$Tr7*=aKd9`32cujJ%EiBQdTi5~*vN_4s}9X0d1B!1^HS zCE)J+in|8ZtPf>g_)H`F0ry}-b1aH_rhlpj8~$WpYw3&MR?y!Nf}Wxd%9r&C z?Vs3h@Vq(u0@#X%mhSz1)h0L z_>nG5J{@Rd9DDT7gzn1FH=X7iD4q{L!x)16!6)SQsTjMfb28}rAAmd&r=RDiUf3_? zz&i`j1#kKD#vSJTUzcCn5dAQ|n?+x&{WiZjRUDe3^QBNFuDZTlQ3_QQSGA2ZDP9Jm^$F&1zzPICD$PDIFQOqyo`;(uP{c(DQ zyUv^tpZswW!l%EEIQ$IakIDEq5SQm!KKVTvfA}BDqg~<#%oWaIU8L9jV>$m%B7GLm z6JZ|nUDBa$d>vu*37o@);hV6Y37)s{8GS$$Yb^9H?i{8@`WMQlWOM7c1T`ebOBdpkFCUFYU*j=UwgkZ>B{#PNu#3*D`Ouw`b)YeO=bX@s7$yi4GA6MG`s_R+TyQTeMuGWqu{K@aGC2_-x;|DC-Y>>K)j- z!d&-f(!NmkYP6?FGyEgYi}T&;C(-@_^4$Gau?x@i`5KI0o^2v8H4f>*|Awwcy1=aa z@xPz8ig^G0^}+V|~K(JHc4g$1yT!CPA*3bvp9W7vDSD2wn>dyM9Xy z;oENb+%ks6a$;_I7uHyN(f9VYPUbj3Od_4W@a#8u_8UH<-t$wjo{05WIiDJ39kwPi z=3(r2Wp(;o6MP5LO~yXn4^R)!6<)|~6}NJngmtlBL+6;o&Xe{7{I9AW1r6T4fSulY zrhGj9cdt(%y<2}s1E0DF+3_dObx41zY)bl3?xTGl|Mv;DMVpdq_G*62{w0U z0SEi#*;KVZCc0P$H z_Ox05uFQsT9PjPkjJ?=$miPAMfoqZPzoV={*yjYu@$ZxY_2p0weXaT&{C3lSlw&Pr zT;^HsJNnA$hhUf2lZO6@Z8IUNXELt-C-)KfF`vR^dsO(VG5T%EM|8V>>`EWg>2-hE zS4h7+yNtLRk8W{ktEK;U`(d2>MIPxUo;|oq)_)4+kCxz{y~5YA2r8At6qYu|4W z497zp7vVmL(Eow`6aLp6>NfAz=WqvQ&=-ada!x^cv7U3jtB>LGlg|sskoK5Ly8?D` z9P#5Sz7+8x#D`RT5#lEhKcV8+BR-7yu!_&dJBA6^+pYNDcGcNuMF6^(f$#YqZMx~Q za-1cQK8*io4?Z-Cv?EA6;-)~J75>^-2uEOauj}fJl`XdXHTYzo3WqX z!nSlTYM$?8#kZZPgsheD8}NT8u%B0WAF{o#WV?&s`(r!8d$V=aA^isZ2cFkyAA)t) zU7!i6Hd3McVKx4&aL1qjw3xC+<@j@W5OwS$Kkz}HF_fl#S$%Wq$+~2^CiQ)0JqAr< ztcQF;(zojIDEyKhv+FYp{N{ijqq2{W_2Jz1;zHYTHKxV-|bfu4;cDv6DBUpQW)crQ( zhXz}qqm~`w>n*#*H(K_KZ(>_DwV^_+L^)9Q=q*gcu^RZlEz|!GQ5xUsfAy{3iR#rq ze+FZqi)8-%ztSAf#~&Pny;saJeZJ0tyVtkHntfe3!^iUym}iv?#vcqkind*k=iQ(y zN4UqqeH!+NHL#skj{mc@TT8k$jhy#mJd8TUxs#7c|9O(1KZ~@T;Enb4l1T`;C$S>d z2VdspIi}Lt?e9T(I#d5#8cDryqd)cHx2L6EdI@JMKPmfv=r%BGyTE$+IPA0e7RC1a zd)@X_5_Wd@Uq#v;xxO}O?9Nm>cs!2u|JO^?Qjgt;vq7Jf_1FJ7oYC0r+mm@2{Tk|9 zf73YAj{h0AUtmA%U0FX$UO(*y-^_62-o#e_^;O&0{{>$_i29lED8gaXGw~A&AFACp zZUy4U5q2UxhVTT!eC@XJafI(9To;`p&c%3dOnmFu9$>w|b|L%?c;yiOJ3@@Z0`k2r z_S?<;rUTm3TWC)l3+VMHe$&A`_i(25C+Md=A+D~VeK$)oXvC){!oh z_T$PSX0-SO_jb{zmEas1+CT1Hd1u~{6yQglq20&6hs`iiegiSS`^5MD*tZ~^lF6-4 zrk8wVnPs${1IAdsOoQ zU;IBGU+0`3Q$HWMgf!p!F~%K`>x!!+|D_8Hhb9we|BX4lTr*VXwBc)KUdd-JUta_3 zjL!@mo@YD{VXqeN!aegNVvxO6+Pr74A3f~i!%sr)7FX_>x9Rkl<2b-u6)x?`&G#7E zn<&v`I$53%-_Epbn=BJ(N?9hhTb7UKGOyB?3&V%mA9QZ7j<)kj%^0Q3%j#RJo zk6xd4>B}zvkuIi@d(YBFKl(Irm1Z4%4tHDAF|%VG+NfxyMBoN_)@9AIq+ku zTw?W?HcR_Shz~cBr}QgX%7Vrl5mlHYg&z2bdp;Hz-=n$ib)+8jqlAqn<-H^?|5{{B3&(U(&9B+Ou z0-Qv?BoSahzRv%?Rn;@4QZ-?7_B?x@bw6r-Q*Xch)%SgM>FS!EF0YQuzH^*tU+K1e zhG?I%O!c;%ju(aD%9`-MlWz>&(Pw z$yL`Nd{_Ih=udbI*R3Z@oQW@s<3p}Pk6l3wa|BrHoUYuD_p!XD(kXy3%m#aP?0qjl6rL+*tg2M@|SnSIz3`0Qd2&3jqoJHYj6 zfCSngA97st5m;Ty<AmAqv+0b<>G3a_o>B@nwM-_jS;7hy4ElED`Yo^t)N5!!rb)fT9V$c;*x^khb zQ}HJVzSMOFbggGv9a}7p4bk<;%fxVhd`RiahpvYt|AK!Ne5vbf=(>z)b?mS>HdNPY zV$iiq>2jg#LB-!9_)=H?lH`_sOsiu*6vu|@66FD1%TboCD9Z?SLf<3uoT)N@sSn@l zZ`rQtyJNV%hyRTj^o^0WeWMn-c1T_4|55OzE^xM7&$O~lw6~#U`S3S+9M5zmRJ-cu z`vBU1@3pO|GJmNL^8y{mg+9@?&KL1c=@V`1;VXC?_H;pKy|PL81HVgTA2oFpIT)kN zSI5^fjpOR~JOv`2I6ht-zf~PCljj%wl4*=dj;Z5w)bWry{=7Q=mO6fpIv!NVx2WSU zIdaR4or>!azGv{}CHS3!n8(2U1joqzm76>G+|=NN<6oKgY@h>Usch3_fi6*AyjCwse(yb=54;cf6nUp&b@Vi7&-h3WL zd|$C6fM@#x9ZQnW3wv;{+<|ik#r-(%%TxE{7ylb|^*`<8^F3HI<6@jLUyW1pd5rr* zS*h^~@B8I=WpWzF_~jsVAP$&Ix%eAAhiTN?PTAL=`ynxw2gj=O<5&wgf#05DEr&V4 z=eQZpoDk=>e)l|iocCFh+#}ixe#4A8mOyCcQ)13~7bIi1J9xf#?;Y4CpE<$Lm@4m& zFedZjoYT4JICWvX71qlc`Tbj@2)c{#R~}oVUzR(*ZxHiNCt70f1s+118o>Ns2W$-t zzsH`kp1Ls>*-5GDWfkf!=Zu>W?@+paCTFuQEJ?Pvkt<_otT**N-ml)D!})Z1zdA+L zr~6T#r-=TS?UAutlDzL1)I-0-{G0NNKH8o&Lo9j`ON_ausQ&5%-YtB80lpi+J0Pd5 zr7pbpfZv(XhA^-iV)_oemT|zbYl&m5{ld`WoBP%Asp|McY5z~qe~ba|)BHbCzi;CG z#p`~?am#*V+~V+kAgH}g9`;4p@jiz8OG=!{qWlr_7Nkp&{#h6Yk*-F%4Cx=LH2EQ< zpHk^XNC%Nt{wHT6EuOiOHcwX9tK)lsyDS5R-yzRGoG4q}OlBKJo>cH0MDz)wwm=j z;z0-R1joDm@O&WGzlx}5!n^Q&Mn^Cq*Mky$thnA}i~iMX-zCln(SGFpROU|cUQnE) z@hg~z#+Usw?%6_5XKX^8VkOR`D})_k{xt_S_)A0e<4)p8)YacP$uZ#XK9;ottipM{#5w!d#4w(I9p@y5&(BVf$H85a{Glk1 zCCR7f@SOS1iWOmJ#md%9=keC66L=Q%tO%ZGEQJr7TB`!T;e9!{MdWhF=LM9!7NOm5 zT9SN5>3df6xAGn_`4;TxDRCy;LN3dgvHrY%lsxV%ui$#86*0ox$yuKegD&*d6Grhf z`j59Ly&cDTabNI9re!|rx79xNiRFYcM}HK!mFI|i@Ey1Z=RER;!4g86Q(y7@xeI z@8aM!!%O2@V#`0|9T)k_v0*Cz%aA|%MVB^2h1!#lJ~qnVED*+##we;Uu{J(1i?-Jj>9{yatN&r@qIt#6G@VqY#^s>OV~ zeaj^HzeUCW`BeN<{=on4Z%#t|!QuPmMEvm#i-iJxbxkPMmd|n^gq|fnr32|ND0ae_Fyo4%z#E05B9!tNYQC){d$!8nKuBNU0{N&5dTCD4Qrbx@@=F|Pf$aMW2GQPpR0q+6P z*QD0&6k{Fnd*1U#Q5TL4lsM-e=V#tO@Hv758}1)uogmi#kH{Y}6yNi59vHs~2mjYR z*8bF>Gw&TdAB6RT`D_zo@OjrHoWgBL|CX{B^+td9zr0`V5WfxOGjdCk_lo|re?v!3 ze;e;rPQ5k^WvnOY1IO?_73IAR$8**3sorsv%TnO^3P0V$ao)D{SpJiJ#8b~``Cac) zWB&o!pTqCZ^Es{m-7m!Nuk3Jf{aGb!d`2seges4pA?_R(^PLwgk9Sxe=UhR4`!fR$ z>ZdFZlm+Tl`h9*`@_fdd?GQ126z}bIR)yOa&x|d-8Zp9eNAca8DnqY-K>w7DzL&pK z+>7@-<>I&e_#Kz{9SNQ#N%jI82kfARy@Yf4Y#@IZIa!^HYhAV|FXq8`dHQi3e~-4C zI3R9A-sKbqK>M$N&ED_4yg3f|v%cc4rB~1E!vk2Eh(%1UhXK7YzrKz7=pW8Gq3nD! zo{48P`jW@x@6}R%z65+6@MFMrUw1zE0er=G^zbzZ$vAbgKPho?wopIwAG{Ct`1G%m zn{me%;X)m^A$_ojhl_ZqJ~;Ib7u4U1sY|ccfB({YbYA-Xsd#TH+ZgYgWW4aCDBc$V zd*d8ai8}oSp2rjMi>KnpHC=L{(~RE>B7X5<@!R&`cM-p*MEqJH89$EY&JV-U_QiN! z0q=`%-`H0w+7Z5MDse_$B98HUryY167jZrMG~=CFNBrMoKRVDFq05?&^UIXJjqi(h zg?lk!e*8^>n77dS3BJephV)oU{9XyM9UuR|DQvq6@9fERW~g?t^w~^j+8kuiHfj$5464zeX zH)D$96g`)I$7JjO!n=;Vx`XFP=i#K(HT)&KZAYxsmRerx7WdEF1>ZTvERKRM@( zyp4EXYr$5m3R;K4kMZ!lVA4Hc}s-$;GoqWeXloF6%!#ou6kn^WAq3^88vl zPx|Hg6WWnX{~iw4`WV(2Y7hT5kM(0c;h7}dto*=vDQI9#<{3ZK}&tQ{6C^T^?%*T*XppyIE??^&ids2&Q8=R zwgbK^3hjX7zIid!AJ!MtHTEy4D_=P<3BSFW^sBt~D_KrXfv1a-W2pFr&V0l^)V_mt zrVnf0XO6+UvUm-_+;g%I@3<=5c&AgacIxHTZF8>6TX);#)$O;wk=KuBZ=<7Zs+VCjX?tSHs+y4%(XVf3Z80KClKb~}gt%+HAtv|i>pV!{9C2 z!X58**W;LPX^-7zdu+Y1cpBd6J#p>y89Vt7b*>Gwug1yc@5o#0&dtMmT4GLr-z2=7 zd-`>GZKx}4Q-7O>vDP+R?}HfEwlQz|(0>8e3;J0`p7`zH&%&Yh_<<;%2YAc#=`Z<$ zc!j9T+iBarX{eviJ0U(BkNgUd->E##{4hr7^tb|B*ijsfVV$_qc%CKIdSs#$M`SO4dSh7rg(|68SH}9%Md{g<5{P4W3Oxf|sxHQg#B*0`75B zxQE>`)tUR_>0-`g`J+-U>punkjPu*PK}Z?T6QQ+JH@S*88~5B3)#rl4I7e~DuXQ(N zteyJE`+R=38|PvkCI{zbNbd1tUYX!})-A3(U*KK>ManJpTlp{&|EK!@10UdC*53aI zy?#{nmzRHD|9{}isGI2j58yZTw*DW#St$6N{(o}1|IZTrfB%J!i)V%lhWG!OqW`D9 zzq0=idj6RGKkh5?Ti2bN>i_@RzMtjAcpSj*ec1n_PV@ufmRjcq<1O#Ir^4u_5tz?G zyT-duyz#*Gm@g3XKXHtovUm*ZMuz?8c(znQ-w)VtI?MUJ7T;Gl6Xzlw62JSw7#@9g z>U!sW_tid1y!UQ==m{sE^BwptT!3qIu)h|1u*O*1B)R4=({o%gkKnBX;&2ON_vUf< znLD{%7z1(6gP(=oxX{~gyDss3Uiavun*R}VKS&CF{B5V#U(bvQJp*fTeYWZ1In0wf zRSag&{GOak;u_J2L(W31{X_fk%zTnI@|k(>J3sio*W-)hb@F%+dV_qAq|}l6tpM|* zZPdrObGJH_=E*H-bHvi9@VdiOux^%vLMyF+q)S@HaV=sUDAsu+)`aVqnW zZNb4acPB*q;5!aD$BFdw;`m0y17kp3JG#a7`I-0g+JD~1_vaP!xEPn?ew1^n_+H=_ z;+*e_>u^lW8GwuTAs==RX-w)_3t61(c5$&#o=9t{`^$ z*jp$GD}EPO>XrGNDfs>c zcCN)dYwM4Moyc-kvV%`H!%d{$s9e>6S^# zSH=-B5WnNYb9SiHAni5~)f^7SK~61pF(1G>*Kr^3>zsdKUhNzEInT3*^JTog@Er6}LA-;E_Y~}R zdT_1mWLs;+y0@achtGx|Galx+n0f4rkQ#(at%{2l(^&EyQf(KN-BAtM~bwgWt@} z4sCaG>C>FMlD}*VkDT2eD{z+Lxo6teS~c|zVIQtDeAfudY6pF0elx$p_1KcFv2 zzSIdH#WnTc72gM)qF|q>mkAZ?oysqiM$w= zT#GTx^G?Rv>o)FfyZTaGdlv5nmf8B;rBSBaHxKe!5(;%Wix>|a%ZNG~_qL9l7hQYZ zV!n$tv+Wwp*&!YLgOk-ZbuON(8+yOi{(K16*TAm!AB3PQ;GzwQu@>r9i1y8KVdFnT z_Y&%UxuD~KlNo&tc_cDL9&OiUMqBsa91V_!eymB^zN-wrI=vmIpq!`Tfe-pMQu>8D z@FKpC>f7?5u+@1GHbXbxnz?I zeQojH*4N;Rb6&LdZ!V3t#*lB{+`L<^b1o0!H|?-H5FL5V#OR1k8Ex0ii$+JjlCk|- zj0Jy*@zFl4*^OAxCeIh)2mJX|zDBI$R0)CIOB-tvy|G|AWo@HRY4xoS9pEuYl zekXW{<%@dQyKdh#6W1Nslu?2AU##2zO2(7@SVJ6>)!S?FKF|Wp8KK^!?#;A!;fV2- z_D&7`eK_q;6|=lcgZMpr>)XYpPwqpEs*dEX+k4H#@FwK*yGXi(RZ@QkBF=)#?{G+aah8-x&u2V$&iY;?SUP*l@>s-VL_mRnZ&W9~YuH*H(-p zYB3Lkx{G#}*EZ=5`sy5>FZ>nXjp7_$&bSSES92IZM`rRE^XP)KU8mR{c`f$7Qy6^K z=^lL9***B4lQU-Kp@jWfRzk`q2nS3{87|+&=?{_{=M;Lm%o%%f6xjrc7M@k3RJGJhcmZ0H=-R@ z_v1aTXdAc}TzgpLhdeoE;PWE5uZ}{Jw}S*RPujE884 z`renixN|(p{vPX@y*M*2`uW$jJikE>b$fZ@-nWy#$z|ngs|)&05}{U&}ZoJ5`CJn^EAfOv1xd{DUsVpyvqj1S(9@+w1n-2o`I zh4IPTaV&;pYU5nEC=>OLgw~%c9O(+~mCXiLY##Ebntsb_ssp zJ+BXY0z2v~>ThvyRI*o%i}?L>-n`qAy=`+b=Qnrci(v=j>-nkkW8nUH*(n%fJ?KnD zKh?9ZvLh^hOMeRH-om$GZCyF{hM)hug*m7fK5s{8@avb)=Xl3q24+gL$9QQ^+Atn7 z^LLyq%ejFa^pD>i;kQPoM#Ew~BNyXN{$6gB7>~xpxU>)HQ^j~R&bp5A^E`PT-i4oY zcpd7@R5=HLXJUR4t%9D74)mPpfrOqD2}q2mPV9z+o)g{jUf{$o%)^U!k^tL*cZrNf z8{&AQllNMWUg6|;vB&Q>JMe5%H^wC5J^1S}XYaiWU-aMVdoM9xukKUDd_C@CyzhAE zD|hMdvGZsCgX2V_BVcECVn#mf-8#Z8>VmxwW4w(u(b1+mAYm`o%iS&7c(nbALD=U+ zJY7Pcct_Ca^Z8l&HKM0&0^U)NxQhE}eEzGGG9>nxHDxw`6{2> z_6rfauH-J-O?^-Pvsmw9Hux;hLe*za*5a10#chliH+fzD<5#FhmTl%TBUW7JPm9&Z zHRQ@z9qr*~8Lz`X6!AhELwrinp4`?`GVy$U27i}}m}M-5WSwh)q>c6L+aaq}om);_ z+|9a$F$Cgs_Az@i8NIR%WETIm?QKbNposcanbevwk?n18PP)Bi zy!xNp-VTWGZ=}6}T%!(+_F{KHw6_n%cvse;!<$UsWO;vfhgaTsrZ|_e@OHsRd9Xa0 zkEdIf%l^gWp}wTP14f%bopi$9`ADNaI;D`PkH=n>ZR^-evTYrEacFxzw$t8TKmD24 zUNI)<7B-=Op-oGY`vc62vA}yqUR3?McsBO0>DOgla;iQ1WjP;tUG|knUX^|2k(Xp& zdE`a;PPZ)iybf%@xFFw*v8+Fz9QNu@XlwEXa-{u75?)@E_WX~(B=bN1qRjvJ3o`%X zJDES$snqg!cKPJL)}H^+_uHUdqx?>c@oYjG<#(LzpZy7+=aKC>&Uhbxk>fh_<0(GU zqj7CI=ADo9sYoC6{9Um1a4+hMsE4AD*m}Ge=kImomKn=Q*FEYOGG4=Vxs~gVVqTB) z-Sgt|zQg;zSv{L@$>6hrT+Zu8PZ@!=dII5jFXP>RF^tg`1adJ(bE((cJ1)d`7kGY0 zaoJx@;d)o7XZ=`D-sO4`Xd_(zAutEy)fNY9@TA*bI~n1p%F+= zndvxng_sK|beysojuR=0IaQAaoKB5%BhuTnbR*JTi0$BlCjwauHV1NH^Y{f@0|g5n z4$NMUb8pFUuWWNpcW=q*yAt)Q7}&O<7~azc9Ye7|e&~T@3F6<#xv;hc_%0V?{I&_# zz7=Cb@x8;AYZ0UG zi)&Yeb*gR2&E9uI%fxpQ-xKRWmEc`WA>8AJ)OS3Ssf#<$;We`T6!CqTyD;R)@675D zQ+{Xm1GXcq7ed|PveGs+AIvmtN83sc`Ob{bPtTc@{5j{L3-BJc=?>=_+*0%G%pddVwQS?5=RsjhFgtnNTl<@BpU)er=SwQ4qfgp*t&_w12HuYz z#=RKk9HO}YDr^6q%lRy<=hwk`W$|4B+S=>;ssy(P^C;pRrukjmVMw<3_GdBo2fMah z;Y2WI|_>-V~C=Uo+TJvL94 zC*%7zp8bMe@vIKYSv>#F=K?pPoa1;uT#UN^u%3Em{v7_hB31#`AH-1j*q%JFmG<#C z`xn&ZfweBiqt0*f>=ou%H;R5F)au~f<>Ea`B3&GH@IC#Nuy0i6bJXwc=$9Pg)Oi?^ z-^YnKfgt8Ew7E4AZ`kj}1ZudY-aQ*eg8mgJIPeM%b-Ee$eCP2AfzsBf{BCO>d}2B5gJ1jM3uCb#w(W;)-g}e0cP8zJ zU*7%g=e;k9@oHa!HITUu8?I$+8|?dAv-{;W?|jjIs&UWp`plS92l*!CYRI=B`TJhV zG9|Glph)Alm_jxyNxymja3j(@zme?@zHXc2;xoSE5!Wg_@7PvxTi*6*xK`nwtwZKL z1$`{~Kg@?BCWj{=Ca{mOL7(15`!Qd1_kq_OXYNJfUE=tjD=Qay%$OU-^ZM(ZyOHKv zd0v^6wqD@$&P_O3s1x1u`cM|yoDBMnMXB*A$3d9SX}k9b*DedJOFAz4g}n5fLbB(+ ziyq{)DndKF9dkOE|Hk_fhtKKo`J!E)w`1NV=kt#1$554f!0#D~W$e;1JVuhr6L=ZU z;j>P{2AHg5S_kuQKXODoOUeG=zVH4Z`XrvMT$21ij5nk0_>NdSEAUPm{cV2+-;E z6>XU3dF>qYWIa3|b)@#*#D$Y_Zti_6pN#T*7@kWV!glE2zXZ<&z0n!GZ}DTOV@HZa zo{Ju1p1F8W%de$9$D@Y6oG+&D@Y|X`yw_u}P3bG3MEl4_v2#B|J7gS z2hm27BFp*#*lV12A=tNo5J9EyRt6__SWNmuom|gVec5_Tzt=nexS*_ zM?s&1@#oQpJPy(re;#es(yNiK2adQOt%k(-^XPI&j607mgT#3A=u$|GGmkEU#Q5^) z{2&?^uWg8vi)^_CV&mk8vCiA5-suhLvUJLEkPho<{qqftZbMB=d304>i@RcVLsd&% zV}o0|SyU1L>Cy-l%qyul}5b-byjs-|uYGP9T_+*rKyYPY_zqPnhO zrMm)F*Hlj!%>#6*=91##V&yE;l~t<*zNV(7)+^wdO)VA8;EcYiadmxl+Esx=6Au?P z*WHUyh;8)E`0O^WaCyKjm=c}pwlp@n&8sTv>+#85RdH91+g#JoTqDeIMqe$A;vp~^ zt14P*s@+vJs~Vfux+@U1o0cuOnM|MTow|nRmWqa!I-FOeOci#RxN=@*3Pw{+MRif6 zs;;Q2v0+8sN~f-JRiTMd(LGId(5w-KcHDG=Z#zbOb)=f+tf;SOt}VKJc2Pw`bx~7I zWn*KDJkK~TH1fPv6%7?Dz4Pi;;WKV{*EYA*tV*5ktgLA%YN=aQQ`ESksJddU(`=?& zDwBT)oFh$*5ocyqEgWxfW>(bK!4EbCv7x;P zN&h1iXfJAG6^5dUs-lYO>ZY1z?}VlrVWv~j++4S^p{Ck9>}hPMSS2DbNu5?yRa0M& zlP9rlc?smvRMD`K=TtSWLbi3H4`SBWF1)^QjTXo?H4W8`O+|Im8^@7{(&;9|ycvC& zhaf)9&1ekOsvPPXT2O?mBQ45-<`#4z$Op1@8>(GYpqZ$G zJe75|5`imP(NuHy>Y9eCwc<3iTj-B8sVK^J(bTwVMKcPt@vhYoum8b#37b5J|7AMt z%$-sZo2WNxuZsnT3Au--g47Y+5I^~ag=e3%OX%m(ch)c zLl1v(i;JRctVc&%-MFfv4qZODZo#4(Zbo0$w5Fzs9Xl@r@Cda9eb`hlpKI#Yutfpe*&tkuMqaTt}A3t&XnR=D9q6oeWDH;8gp`T#Cez# z6C3on`~ZAP@uk(6T&!$tf}LLeHoc2Vt|~Ru@_eBfZY){2w#BQyPG$XF;wpganJCjK zs^YosP2v*87@$|In5+C*%7`zxYKa>`hfvefJQsnXE$%`zC|oj_b&)lf^BC~+`FRk#apym49ST$i-Z z<*_^z&0#z)8EzlCEloT0kvGfZEx0LFp1j~LyLwrvSAPq<+J|a5Rb4D;56=&J=gX$h zSlPlRpr4&~i05z{;;$GAiNO)w6(@=k(em`-?ux^6RjuK5iK7UwvQ719j;si)8}4do zyhqvMU2;VJw0pK^x5%+_^@%1E9zwga0P5i6R9s%PD9*kL6_f5 z%dcGo&&a#fv#S9EtJPJtQXj^gxKi@?m%QWBZ(Nc@+eD3B*~pO+hp=)iDEX=K6@J!4 zt7>Yhn=w+0)~#B-N-9qo;SKeWPw{15KG$A#eW@!tOn0J)z8GJ+s~gZft7^qSS@f_v zpm?~*wlr2X)(;`$SOmS3iSd*bO%*Fwp@)@TG{92S5e%^0MOULLw>Zs>tDA5gYQjYd zS0gdD6ge?2L+gX6E^cF0)#|1u>hOB!O7tkIQ$pt_hS%uJcz()X5m)Q^tLkulM+-+4 z!<8V?h;gp0QanG^pJ?ZMCseYOa9W{T6OGiM6Ga^r&^;JNqca`tUd`bos=*~QW}{bh zU6&U$RjF0)H^W^VMgP>Wa>k4qs-=K;OEX52bJ<^s5vhB7V}w%dWg5 z&A(9|o+}WXpW2F6h>z)$T&WNPR1{YQM(kqHI{dsUaUO;&yo<82*ADS2V3$&FauR#C2FOniUic)c;Z;9Tq$kOq%E0#fuaCt{dWl!hBs!K>Aj^^s0sZTWmWb{zFShb#bqYo!-tmR9x5QOK z-nz-&aWw5txAwX2B5_5NjZtge-c<_u-EzZ{8*cpC4RhV5D)$Q1r_ofgE= z5jH0^dgVZS?(HgpqHiv|Lk_=+>LP`=SJl^{Cg9^8g}1N74cI*uYniyckYiBv2cn9* z?v1!!q_0<=rC3Uj8NpxeqU2({yIOSXskq86Ma1C?Ie_7@=%T%QpVXbY(g-is+&-oH z4qQ_Nf>z4m9Ph(Llg_#okw|?VZkpMpGYbyr!k~pm^Tr=HU%aE{ zLHN&0UnR%q%@~`?;jMd1LoGT_oThUN7T~6RZKTGXQkU`@Is;#1$5rgo*_U1ZrQn!elJsi&vwBdMW zpPirW!_V&Y;V10)h_D?$#Rne~v-8LF+VN9eAH38DPuTI(eE6sJ+4*COeQ+Ost`Glo zsep2_~3(f{7lye$KwMwd(QO9_v}(T|Lk5no*%d4=jQt05j%dK5C1$L z{o{S~j8EA0pI_{Q$9(VsJAOgJj$at_!Q(!7!UylO<1S%Ky^=Sb!}|d@Zs$*MeQ=+6 zPRzCQCwANMNg*G+*N#snZ1HPy%#KeXY~fFd+wqHBAKZt3u@C=ZAAW&Pe5Nv6i=9(_ z^h^uc`P2IB`1F_^FLZtIh#fETvA-y6=g)9`aG&y>>634Du%EMdoQ>$Bs_T{|B3@vFio--@_hPo)oD-EHUBB<%PK zAH1&E&ae03H@bE{zQ@5feB8Ch$Ig3t?fkVqdRl$-wD#Hc+?Q*|+g&@p!3W>uW6zd^ zUC$GpcKjJ1`*()z{GEMv{Cht9?Z9kSVmtq(upR$d!jAvk$KO}_?EHTsY^k6Bl9fpTN{I9gb9nM3FZLISr@f_D!=g-9iAWP(tq5sD^ z$!>Z4k8)nfN%qL}iLjK%Bb5KQZDXBJmEE5zdq0iQM&Pwd_DT8YT}tkOWPH4xFgFpi zvCfCPnSku2^tQ3i$1Xnu@0ao;3Zy^E7a#C1;M^%b$_ZIKf3o4`D#BhGpR>Y(A^xSx zh^eu&-VH;P@-sHmHXf&+-f=l;E2zW&;T=ZL@vL%m2~w|6=)P!T&7yKm9++|19{Q1^=i0C;6WZ z|Fhx$wEuAb|FfIJ7c2h}@P7pSpL&w|KN9|rg#QI6ssB0fKL`F_e3JS<3jU9R{}-L4 z{*Q+Lqv8LQlhprH;QuM`fAW7t|9{+8i{BVlIK^%E3K?o!CuGUK%Jn(>@N_rd1r^El#;r|6EssH2P|2X)6{z>Zp z8SwuM_&@$6^*;~(=fVH;PE!BRg#Ty4|8q}L|IdQ|XTkq-PE!BRhW}^7|NN8G|9tqL z5C6|TN&Pi>oC|3dhmdy@L^!haY3k3C8Kp8)?S!2i=uQvWBy|B3Mb)RWZz zN$`IX{2z0Y`ac=|Plo@eoTUCwf&WwB|LBv{|BK-NMeu*rN$UT_@c&}?pL3G>UjY9L z;Qz>z)c>jQe=7VRagzE!4gODq|Jf(0|I^|BboifjlKNi={|n)N=1J;*5&SQL{~0H# z|1;qK4EP^7N&TM*|7XH~=YPw8ykGlY1{XM?!3w7YYqXVOjkYqZ&lVnhAez&qb3 zI8nU!J%(p-Iu5UQIuAeVbRB-#i64H?*>wc(cRn(~*?nYzlQ>f0^c-35^d5QE*>mJ& zr|-ynPXEz>GjMc*GkA1C0Pp$^iFDv4MFZkv@H$c-B4rJ`?qx zl39HLd3@lvK~}znvq`-x$B@ymvPIufLo9|GBR| z`MnQr{_KA!+&jNmrOSkjiR|(G`=7%i9Z+^TZ%dx@iOk>mBq5Jyx{W75%6D>=EKt(Rr(30^AI>`wmF`e7u4F>V zJxUHp`7QUb!j&KI##GunFRs$vLY}^{Po;M& z*(2qlkdhH8KMG6vZm*JkO7<%`pyZ&GeH8GcFGtCIB@2`cDj8C;M9ESm%ap8DQrXcL zRp|~TJC%$pxm(GEl6#cwQ&QRa9+R-|y&NU;l`K#)sAP$fWlGixnQAxhMHL=XvO`H_ z*L%BEx?9Rm6#j|I@58vnKlIM)QT#nZ2E6*asb8c|-xwd#elFSM`6Fc@Q`&RM1Cl@M z-H_CGxK`@RjLGzSgF;^Npy&|B&U(F9;=iZB?_ge+`8)6DNc{a=CG(YZl`K%QSjiG4 zWq!{4-74+r>lf)+zft+UKcJ3Fdz=rLM7ew*^#(FKM0(b5)cMLj=L41B2SLRTDOsXq znUXOfXT2ly4P-u~aHZFa&j)dZcPY6`NoD^B%FYjZBz}LsI_}|pDm^IWURTLlCF4pe zy?dqJK&HxX?{0OxPs-orNcsLAl`d8?qNLLEyFQuzz2g7AK&5My>`+qX=lovj`vYOb z`46s=rAjLPd=9Go5BAFA1Fqut zDcP^2Dvv)hiTM1nK+2z}<9{qscvQ$)@5*!_Ga=G}%(#%wYt>TzQKo10F$sNpg4bMi z72eKy%?-Cqb!X3*J>xQQfd6JRuU*wrQ3=_CcVtu6dY|yRxQZF_#d6LJk*IIH2k&B6 z3A{YinZcJh;w^j5j7q$gw5qneo*z?hxlZNs*L-ksk{p0wElDcy#z*)VW7-L13ZebW z)jpqx&!S(|F!?dCOvDi@yF>t-g5Ap}M{)BZi!@whVC9&sSD^`c(e2c8T)>v#1+ePE3gOKks}ZEMuSiKkOsHan1?iAM?*< z3Y&L6{r@s{FaKg5#CTQa8<@L`X>6xUk^1lPDNC?>X=T40?}`;IQl||0;N?&7X6#vHxKf=b-hVd+p!Z%x&tArF z6n3BdukVnGM*LaI)PFBtDZustN(E1A4}u0QH)yxXBnQ zd`t|Vz0Ji3FW;~SQbIresDEg611Q_AS8qtd23*9+u;1FH_{(vmI`;ph`JaUp7KD5;jUO(Rct$Pc&(rv^K8ZVAbl{)U_-7po z&x8EeG%m-Tjx&OGzMIBBizq(h^T#xv6y*bKC-zU$_$Ohcu>}s{Uowp!_Tum=j*W)D zmiiFLM}w4cP~&!44FVI=dd_sIU2cJbG(HehAY?$RC-QghIL3Szr1>8+j@(*--WV#Gbmxa78dx+Y5Y)J9e}>T>uFrx zuj5!5aIKzvG@$s5+wao+!+i=T|4G~t*J8(iN@Gk+E{gS%>1`azjwEFN-0vNYVz?bHF^-#^P z$U_;ort>`x`?v+-;5TadA}uzQf5ts&{+|?{bqx3>=vVb$&iBYuGCI@z0as$|-!kH9 z{Iddu)8FrDxU$E|1OB%f9@q4w`-cGIE4DK5d$jn(748E6pJ_dVyA+-e{OvTJ?2>rk z1>k$r_@4(9e;e=*)A&bw6b?T!PNea}Jqn+U(2P#w9}g-#4*ZNX{%225H}HvR{7|pr z!`{qkX|=!7pHM~e-Atad|?_tRHpRAfiFqp$8r=-J8w_pAA0;!;CH9-Kkb(M zfD8QIH2&wP(nI_2PveIW7qP{GKa$2jDOUIZ@UAp2=Ob|JRp38L{1xVkz){O5=a(m$*axS84o2Lg5F2|4SPGG^X%;;J-=Z$GRk*+Y9`i6drKmiVvCj z`xNecRHE<};D1izCw6K4&(gSjZwrn+1in^(l0n5s9I{5G`NwJ{o>2w>&INL5buDQW%5 zJ_Sb5mbCuo)1bohfot{TDAL?G(9NEj)^im82po21&r9Q<^-G-b$i6y_A1{!2fczWM z_z{J3yqSGR8kg@W!a2)<*Qe``y#EL80*|Kod4p0v|7UCCkYuUC;a~QnX})|vsyvpx zD~%8CQGEEF{r747BjqpafA)V*;~#e`KK#yplTI)_^nN7!-_rc!Wr`1d+3%#d{76XYA%1ZhPu41YGVqyc{Li|6?RxZ~rw8Ya(5^dIysGp-jHplRIRSsfM!%Xh zT*16A7@=KvP9TolGIs%gJl&2qdG?e6*T*5flJB5hk9Z-if1p(1&^JPB*8^P&$9W@u zk>-Eeqj1JYyH6QZ_5`B9)Ab?Xc=@tiwEB?L_52~NKd(dS$2?ZKSi-LSu9~KXntDu3 zsm0~WF+0_?)|tU&Y{Wt)M>*D@a3W36vcg%@tUk=Z(h7~`seGMstZlPO znS+I7);Myhh4PA~2$z?GTv;AzX~L3pE#+LIf}a|yMfT!&b4?X+tli^a4sKQBni^+i z{puQ+Uf1HOT3sD+%H<@T42QF#8hV@H&OV~9*Np*SU+H$V#;54o% z*Vf*{LOsa2kvTC8Vzmj{C1T;NttE6}Da3NQW@0%{a>Sx-ut6-^##J60t7N7u5Co?| zMTgq3ES?uZ=I^bsC)VI&?!ZX%ic<5kyn1y5%cupbP*|$rWi%{#)UZ;PzHqeOQAW!W7iI5R z4BP6c$Tm1w;L)EH? z^o_fCp z0kIJaR5n*O-IcBp%{5}_spd;(4aY8@?NvQtkZQ@a0X5p;nt?PDi(xf6sJE>8C~BdG zAGt!JsAy0vVw37c7^JGZQ2Dq%B%(lI9SU{E-cCr zi+&RQMFi`t$(AVkfK&&Vs^)SzR$0xw?Ufy|`RdRV^}BE{kN%3e{nvzo}s_E-q){vWNL!7ayi#_vWAR5#uc<@O22@ zT+Cz|8^)^wzZXKs$0+%lITQ2`WPbUP%FvIk}3GB(?c*a6t)bHsL*ZHwdhG`FV zLVres;(K;tJS=d}PESvP!Z$(kdmY2yjK_iL`34pLIRnp8`1cj=<*VY8@gsw;;*i1d zhb0afZ`tuoa<9g2*vb1C&P@%&L%?pb;LCtn^3B`^{F>qXEHiE)a1iHgN(}qVe6wi_ z=gyR!e+=O>`8yyUz;4)|-3RQk;rIx%+)KcL9x>m%!ouGQOfRoe$sai%(xQK43vf#u zM*gFrCxkTe&0)Q>_?0sexSnqaY4T~Kjx#R6M_pjxA%$-+@UX%=AT9omdK0*A4|&vo z48r2?=<9&%_JoiIf3z95sKQwvEcuRp0k}o~DYJm<`Xf@$DYNZ*PFZO1YZZTy51;MA z(l4Dd2;5SRV_4t5g59WZV|D`DV!;pk@DBmMdpQ5pcYx{s#*julPkrCORk@tz^-Es= zqxh#a8GQDS&@=W*1MgD!@9lW55C8Pj41QedIei)AJ=l%-oNn5=OYzPAP}wt%xHFmT1sqaC`QUZjz4o>^Xd6h6-2_bJ>g z_qf7KAuaaj@puRJLhRULS^STDcR}zw28ri>neB)88xXpkg9rSRxV&*!+X``2gkY8`=D^@*ZEev}fM$?pKB z^AjY2FV4e9lOG4B@w3B7lfR1+o5|k|OyiFZlLUT(5}V2I1*Y*&iID{U9!hK`zaN;+ z=lSFhP+~Lqe1*(LVBHl-NvuCorAgM-up5l-NxEE?^petf#+Qu!r*# zL;1Oa2K_xg{5?bY<3i+t-$#kfv}XXAX3sdL$seS|X7I)LTh9U?+Rr!x(y-xt7u*dN zegQCUrv4zX3$dH}L%_J1{8C`N)|&h>lCc^5vyAI_K-fLjIg66lHsgAC*15p6>z#c5 z0{m$PUW_#2b{5Cad~VRxLpx&@yc*coE%?2_^n7_f^~WISld1m|U^?GLn*7%cT*Mvt zM+WX9P5!3_&hh|$_Cy1B70$Tp`Iac$7!L$oh0lW2`5}eRHE>tq#&{_p$`$tT+NkTv zSA32GE%875Mc}OGDsHmxoEQnCs%R zp(medogYlZ=CjTs8IzNUq^37)kE_RbY5tz>JK$`r?5H5C;ZxIOG>YxY$j; zS&m)ckUt;7#cuMi2BzB+N1A-rBNw~LzX_Pm--R^!ygzcWoBTV0>HKb_$qz%g*iHV| zf$99+NRwX=;bJ%WYk=we1k&WQ++6G?-)xUP;DCQl1B9-J??IaOP+Ih#XV!D2 z|GXCPE&9)U4!Fgh@i}(>c(WXp{_$Nte6t)C|9lQOE%uy$x!s=gm;3NH`|w}&;eTr9 zUr=J_U%+;3vGW2Szb?$T^Dp$V|H2K1J$*={d@uZt9d~JG1p8?0sco#|n(e)x2Z1x* zKY*{>&-|$8b-SJ^ zF7U6bV-Rv1>rA-_pL9LSuPN6Vc!+0!|5XDoR`_iO&X|zj17V57l;0Zs62(6VX^F!{ zJZ{l*k(qC))N>K9Yc@ST_FQDzQ>OIz*mJRuJr|qygr%N~eeAh7f#VjxF8&p8yAdfo@F>*+umdZy(-SoBPzy%s&wHUQW4bRtbXyC5ujrso5<=$SqdxUQ!Q zY3P|=0%6m$8@Nr+E5LOHteH7DY|%4w7I588`bj;En~i^+!S7Z4WstUfJAenU zEBilIahUlyFg@Qsq?zwd2%DalfKSG5#9=1;Hw#{THE>=30MgK3Tnb^)e+hln`TdfA z$-@RdsPG+-Ha#x@*ZuYMyb7GU4Erx(e`v!$0 zf-L8W*o}OH7XZ`qRrMjbVJMziiZu0X9*SqE@(OM>a8)irv%d|2M?K#e%FirQcmmSm zZ}3kBKa4c>Fy1!)5#X9%nYEHXhvEk8MjYnk0n^&iAyw{kCIZ*>M3F|mb0$OZn5l>H zsIlP2{E7U%IP@?di~V!hURdW${a*#9+tZ0O?YYgs;|i}d@D7EW?WjxPG01DNoB0~$ zm>H3LHh0@NWG>Iw?cAmK1&};u=%35_{D=kb2FAQh{yzZI^^=D<%;j~>qJKW~y+s{^ zklR>iehWTbjNQ;b|DYYeA{V$t&lS9`S@c}7%!mI3aNYjhNaOqK%pe5o;YCb4&VYx9 zkkIj79tFR2DE^VF@Uo%!K)=GnL-7v@Q%|jd=L_5!Fz~zqg-0l{@wbbc>M;KwPknfz{G8vpD#N#Kh(;iJj#0jBZK$yI!jkA>f7@FR-f zPl?UcKL||If3DIm<2s!GA&=|)IMT5HLlJL$H1vO108Hbbr|kK#nCD?L`5|CBKY=v$ zmr!Ce`DMT~{&=Am{4mMbOg{71`7x5fk5XbY`5nM?{s2kfcT!?A`Eg(x|NI2f!;G@C+h=+B49|5eBoI4Y4Uq0v6=e!0Mq%sB!S;Y ziOu8>0Mq!B1PS~>@nINW{BBd{$H*J&e4OjUcY$ks4l@M5KztakKL}js$H{~K5G6Ll ze(^gujX%XD3H&ljY$l)OuJhw0fghp7X7XdeH2y^{(&TqgVl(+&z;u3`B=CjAN0Z+T zOygfH;t2k3;M`0;%U$EkFoNGJ*u(jK20u<7`2CdFO#OqvH2qUUB#m_rQE)T(hiI?P z?;{EPd`fI4p9X9EX)%((FQ&w1@M;3p`tnS37C_%k9Tfxm|m zo5}A7rtxRGB!NFbiOt}DLQLZqhX{;yKFOiPX7claY5Ys$B!TZzVl(;0z;u2eN#F-5 zv6=i5U>aY{Uyxra*u(kZq5R8x$pgQZ5}T<%3QW@<^!PE7v6=i%U>bi;ge2(iqQqwM zcLCG*bBjp=znc=9$xi^&`EjJl@1ewI^7jDK`11q_{66tvIDf$4my!qmpq>9|j=_(U zH`e(ymlB&{&!;Z1P1x1=AD^&+Um!mX;|GC%3%kh=+4)zz0bIZDNRT(y35_#w5ij6p z8F;VaFEnt)|CI62;yGXOKP}^V*i3(Gfoc3JLL|Z82qiX?9|NZI!$_0gL5a=ecLCG+ zF_OTKQ(`mu-N1ByoFwpfQ(`mu^jqgANCIE@jgKb3517tpn*4rBY$ksYn8xQc0{Nc_ ziGK$Fvs_?0KSUz<`IOj9egQC@-$@eq#gy1geh8S(7k+|YLNYd!Uj|I$f0_1Cf0z=R z$&Ucj`5}_Pk5XbY`5nM?ewZZiJ1Mc5{5UY3A48h_U6j}ie&{>E^!BocB(w|84{&g1 z%o{A=VH>^__?IpG&A=@B7d+&n=O;e=mw+>NhCK_Z+oFHr7#}`u&$H;+VCd;X8gW=i zJFBsq`92Ly&$l0G@)>6v|5YEH1F18y8~U$eJ(_L7iCOetRS8_TX8>u~bCv0rhkwV1 z|B4-7G|LCS$p=pWx0KhS-x~Zuq+#cxcZT9wgn=(M`)y_a;(Q!tJy&u2EP>DD``EcS zh{HC%kNu0weE3^|YjMuXL7MqKJ`~UN?0nw`|NT%rrHApb#O>-<;FGZ%_2lYpcKn*_ zfNOSo_FO~VA?${pYhu7G_39eVH(KnuW-ss%c2mzWV4V9i@Ddhi$b!=+ty~6KPKako zF+>}7Q_tT4)BMWHMVkB`2#ftCw3B%ldah-;+3$4!D-D7tib7ABubSTxXUq z^}^02l$Lldae;@h8+I-sW{J;|MZkH?$BsxECsIDbNY$)a!VLu zJa)t1TUvoVG#vkG7O)#FIQ4zaf_DRB*%Ql zT<5bsfnOGd7=zu=f9svVbUw=n{98LAwD=q@Q}|CHb-t@`^LncA+bAu1ZVLgw2fJa< zZ5=-N3&1UUZqEg7`JU_cbAemzynPYy2zDdi+v|Z@;&VIWX46l5*k(*UuLJw01%C@z z{&0MGB{1DiRbI_jC2(C&7-{OMhG5+? z;&w*@7~71AvwSV(atHmg)So-4+oI=A_A?eecWwr*+gXb=?7XuB!eZy0ZvwaFYsO#2 z?aqVXTjEpB{>`GNoaJV*vwXP^KLT8DzqA|nm$yKigWZT{Ipc7)1@8p*v<2@5w!nhF z0Zflu6lvzW2O<}{k#CrNs>RN**$>kn=n1o4S@cxg23*fKhBWvU^w-9xJ=AH~Q!xn4 z(w|i30WTTOue=DDp0A2?We~WfyedP$xf}UbE(69`m^j--z6Gb97W=DmfLqG9iaIRi zTU894z8U#e?FJUI;61=-lga-rFg*^PNF)AL0}vL!s&j!`;!|A;+)}Tq&3e@Z9`skU z9Z{EIPxYt3EcR3%G4MFj&{IQOEP85O;ClV+N1FV?p*YnF{7MKt-)@D6AZ_}a4E`>~ zkJ|Yw7)wh$SCshR)pop=?cJiMj&(uv_ee3)@VAckM6eriuG;`i_m}mC{D&Zzx52-w z7MLa9`WzqpH^43W>-+8eh7RDC{-jP-=DWwh!wP3SPsMK9GYIS( z!|@iD`xpyOJ8gIrxW%59Z9e!5KKS1O*V`A%1Aet6AZ+>W1#YRIs{z~U&+2i&E&5lp zye#@xm-^^=+R&3g8g{OxUzU2c`d7eh`St?0<;!vmVK>Ta^+8~k`ml!e(30<(Lg0G2 zu$*A$nh=Dgey&*#+)_W+)C14QZrHQN?B5dLP(RDXV$VHUz(d##J@-(z#jks4zfBMO zAB$i2)B?Bobx#Lyi(mJ20k`-SrG0vNC6I<+QQET+yJ3HHAuyfKawVU(SjPX+un*n} z+|utweVH}YLu0Bno}pAF2?F4n#RT(>iUH0)gant}HyoaJcKf5?vCOWnHuJyOrT zIgq*74g0zDzz}{P(y-@V)&(1%@o&Oz>RAL#uMY{NsizdeGETm?47g>Sd~X;y+qS8n z<+8wnzW~f;=ZnB?cD?~zk550+wDU~}i=K584gR3yuk(q|I<{X+xvy&huE$4}%epS$ zmhxRkyDWGs%dr`|5uessz;wR`kcMBaK?sXqtv?yc&nBIGW8CiHZRZ+%+5vvsGy`W| z#C`H@+u*}z9M)nt{A%+lm$vr}J<6W@N`Oa(>$&eHgO4Qbye|sDbBuiNdjOag&+L4p z!RM5&tsiS&0bJ+1B!VAL;E2Cm?h^1qy!&(o(P5U-!Y^^1%<<@mL;kOB`aw zK74Z728_7H%6#~YfyMqPrY1JeOT{f=lY#K z`i=RJ|1ELb0N7R!H_QO8+esek)dsV^v0RDMeoMRCV2rP_gNh%A%*Ae$ z`-W~{TK{&`MVk8Qm!<#TkN|G!|2Omi*Y%VlO+CF3mg~aCEZ_^U8}@88=8Lj(z=58P zB@nuP<=4hq;1)YKMu1!F+!zIJv1b$eY+b*LH1gdv4ni-NkizpIbFmxtZ!-HU+D$#n zeE4Shl1@J3Z?lK}iN)VdY)2M4Zuqr1?1RUETk84d zF5uPJO+7ySz-HQiiG|O8PmhBt_xtIS?w6`>_wzc=vN!U*zXKS3GjaN=>&ZtNak&2& zgeBh&w(H5*4Lu!u?ffmY*P>@j47g=n{eTPHGG2WkiGlT2d>90j5PTyUmHIG+)^$N>;Zlmb|an-3;=5yjz37dk{$726O3E&mj4Zpr=)`wl-z|L>RAuM{n`66&m9+-N51I%LoH~W3`oG|za zq>=B#;~~~!H}pTu*l)JrL131C>EWfo@3-(Hz_^?G?**pYugdG;IB-jOJ^U*0YV4+- zy>|SOF?KzVnAgEQ;2{o=6hm0z|HzfVbvxrolfMYU#xDbIvGb8u;Onp(_CG?u@3i2( z!0xl)eZXpm_$8voe#{WpY57uVDcFQOL;xo>4Vc>)*(~ROTZ>u@LvJb>rV&Lw7(Z3 zjNR1pJ}{k6JIH6;!q^S|R@QTizgvmvdRWh(XKM(;avj_n1s=g}>Sz8oKK-@CZR;N3 zmN;x3u=5}DX{V1BfN!zqu|>cw_2jWlz%6lj>;)e_?XSgd`1{yiV77b@0k`PiMqe%V zY?}?-qJP_RyZ&u0KDdux+a3pBFW+vYQNG*a5R9qe*ESxv^yk|Wz%Bjxwl{%W`txmO z{bapiz6T*J`F@KwYIcrbxq|<#TnNi`=Ua@Y#hz~&_i-b_;873bY}2y{xJ}Ouz;%0A zM%1$m!ltJhxFv4iVjZ#RXL(uT_N^Vjd5%#o-}*i<&7SN&q-oEK5Vm|@1FrK26~7nK z7XLorHa#pai~X!tHv1nx4Y-!?h+-1QI*(sD6we+|cnPE>o{yISx7hPI<7~5s^~(~^ z$BlWR5i#&+PaMLQZ#QsTzU&8V`7)lieBTGI#UZ-~Y3A!w{~tew!nw%2gDfcMt%Nv7ciT@JAvEs z-3{F4@2`OC`7&P2m;I70-@U+X`LaG*^6kn3ZppWceY~D;F4D-i%Z0Gy+f@wQl5ZEw z#g=a=a9h5W!1a9dk!HRu7hArqz-{@mTx|L70B+0oN5J)bU8I>W%f*&&4{%$)EEik8 z{lIPc9s#cB8$lZRZf7}L>hpHS!;5h!Uh}&me@wo+omE zTl73(jL%1~enZa_EH9g$0v|oIfa~^@Ax%9jN1GnnYqRGj;JTg=($qtJHa)e#ZF-u3 z>w0Jh^+X|Tddzmzq4+OB=3+Pc$tQY&u?`vdljDI|#@kOC@fk@wV9%4Z%cB3uQs9<( zm?t*?*ZtaqH1)9F+Vpe+FT`%zXH9dn2BN0JWyj``A<<;_)pOv&HfSHiqF{C_~!L-x8mpf@FxP-^(Pd6 zvJZcS!5>ik7^J1$J;i>q6uVI_PZ{-RWDYnem#6w5Y<}$ruGu+~9P$tP@Q(rChTX{b zX>**`3l8)=JsZN3@6!u`>-iQaeu)qNHiI8l{N+A;qaPbttN5(vHhZ=L*X$Y5ulTH| zHoi~%pMGtqo{_~$k5QjT(oe?c5QIhlGqgpsXJo15Ka=IdA7}8(6hF_0KhfZa6yK+Q zJ~PYU2NmC^e4klp@beXaDWuI`vwU5}ulC_L0oUR)qDS$gK75X4bbhDeKjg#T3p|3| zsOQhH{#Opi3{s!Qh{Uc*YqyEG?jtkT0}`Jq&) zBuXGlLY5mrSFbB8GfS1Ntjz4pEUCn(?P{i(qj~%xcFvjgJZOsUo<`lgwCpge8CXU@ zGpK>#Xn}K9JhltVYG4>;`7m*0&WH*VaxapQF( zzLfs=2ZQm<16P4Z`q%JCqfdE0hQE-{F9GJ3_Zr?whjLD#^GQbkWBdhlKG_G@-%Ww< z0xV^J>XQY)Q}(Amc^vRh;4h?q3b64M_=f>=`M-{L@c+pg9%=ml2;eDl_~gF@+@*5` z@1#SyrqTJe0RM);r<_ypKSlYlZw|`!De6v&{(tHjz-LqNPXd-kXQ2n3i#_Np^`LVN z@HBo{u9R`_r|zcH`SjNT?#lBL-XYIVKY~Y!d_GMbck#(L@dtX~?+x%T8+^(wh5l#$ z3E=-T{sQ^`&~d>2ehPdVFqfZOcn3c}M7{b>{DpKr-UEIG@U(n?1@IJkUZy=s!N1IW zQ|3XJKLfbS=WV=$&&xgZ_VUjK_;(Ec=kZLD+vRYa#`-4xKTF5|EO~eM=_5MuKRb)Z z6Zi|{_SwKr_DKTZQ=iYJ;Qudxx%A01>A#9c8vf@3{7nX*^^%5v9q{+zFXWTu{y;bU za|3{VFa>@BFqh8=@8I)uY`-aT{@e`U4*mnokNDK96#V~o74UWVW4l4vx5R&O-^(>V z5rX?({@V?}T>NW90{%@t5kmaifI0YuJduEZhfjn6U)Xi=n?%}}xhwUVg1-qc7ylOC zi68Na5YlJ<4*u8_k$^wSCqjrn0ho)wNF?AN=My2sp90LqU&1@_XZb`3@fQGd@vjjH z_=|iZg!q>LbMbEx3HYz_i4fvn2F$@f!15FS3ZDoe{x!f{d?_dJuM-&|#J>rcgFoI+ zB;eoT6CuRE1DK1SClc`Q@`(`O|9Kx^F23RC&n2G}{3yV0;vMw=e1K1ckp3uO4*i1> zk$_*|6CuQB{x1FvA_4ytp9mrTEMN})M1e@a7ryW_#9su=!9RKl@5H~zCqjt-Dqs%& zv1>#E{t}-EA^sJ>9Q+dnA_4y@p9mrTb-*0_lS@Pb{tZ46Li}5Rx%h$y{M$rE2=VU% z=HS1WC(_2uU+}>Y;QvKGU=BV_so-ytAKmx^fV=n+@jzel!OxI>0WcTe@-qQALx_J0 zFc<$gkwAZnPlOP^37CWb9oL8i`~^M{Li~$>Ir!gsi%7t~#3w?CzXX_r|G^0F#J|iZ zLWqAAFbDso8$<&BH9iqSe8xNYQ^$z}{F{6tg!s1sbMcpm1pGUEA_Vwv5a!?)mk8LH zd83a{gb;rdU=Dui3Xy;x@re-P=K*u@%h!km{82s;Li`E99Q?{PA^~5@jh`X@6krbi zEb}A&ET0G={sLeQ{+Vk;0{$YO2qFF@z#RN~L?qz9$|pjIe;F_bztbcV@UQTR5aM40 z%)y@*Jm6m^GD3)d6EFw=>CfA_4ytp9mrTEMN})$0EEF zzsV;;h`$J!ga7vh5BL{}j1c0#3Ydd`@fwkUzr-g(h<^nz2mha6A`qZ{z#aS_x@7RDdf+#G{L2O6fu99F5dwaG znEd~*_zUI{KU@H;(+&R-%3&@AJ`Nb?egT~yl-D~ z#>`K!9{ceZ@beQt0ho(FfOq2m8$8nRe=WezEB;URki$>*ki%D)%qiE8HvCoMn6nGPYup90LqzlL|x zpXC!F#9si+!T+}fA_0GqPlOQv5@0U=B9VaqDxU};KIQD<-yjn3ukeWw;9tECSju|N z)tl+?fA=upllTkt=PTC$bMpN^ns{fvq|XrK`xVl6@UKo03HZ18L3Gc)o;1eOh|Ec4EaSbSt!%t16!|#m(?$H1D z5#C9^z$ZdL|EKQ<%x#YaA_1TIx^!&0PB9)KpmT2)FbDsq@cYMkL@b@re-N|A%0|pl^am8#6z91&=fM3*`B8q@M!6M|>yWpONw) z->ZN#1o_^(4w!@gv$u!@{2P2C1o%IH1hB8gU%=13TYx!qeh#lf=eGRlrgI7K?f47n z+y%^~qx=)1A>=2tx5tULG4u1J^8@(v>8}%;?b5#n9DIjJ?hN2hpZ>c0t^jr){&XF0 z_|p-7^Sebi@NnVEXXf*>fPWYM{CqQ?|DAOBFHoK-_`mQyfV+Br3hyY_FMJ#i@^9#C zI|O_w9sVDK{j$C(;DOFBK9Y|Ai?m@W^sjH|0Y3@&82*CtUSCMZ{{rcx*wruO0Z&

1U!Y$|3v;%@c+{y;3@h3>IT45>i1U%(&_x_#{o|% z@2_4?$G;KES=-UNjHR#bF7xvd(zBhiei?#xnkfLravA*3FXA`xC-_7N@!6hS{3Rj* ze~M3p5TAUx_*aMoeCjzvh<_0<2me>6hy?sgd?JMSOMp4}H*OFK_>>z%h<_C@2mk*f zf5gAWCxVZk`E|ll?Cq~_0-QF;*XMN^=I_$C{M-bbA*9a*!}a*v$H+{kZ4T2 z@NnVEXXZEZfRnz-_ug&%2L5l{!ebbJK0le8TL5$Eh}<`3ZvI(1{%=xmQ}p>ash?@^ zYk(*G@E5|y%x{u@0?$}Je=G9fG5&8I0^H@($lxaDVEhV%$G?d#W$<2Uu~4xb3VKCBah4*st%5ozPP zb$xsyg!t4$2md#ghy?tIPlNz}!xUimw3Wdb`SU?J>dUS z5BT5d0ss0Q@J&77f42wx8+yRMu?PIo9`JAK0e^1~_&4`}M?K)1d%(B!fN$*qf2;@m zeLdjs?*ZS|13u6LKG*~Pcn|pY9`GGK;JF^~p&sxjdcgBN;KRM(|231zoW|cE{^GE4 z-SA)Fh45`L5I;7q8=(y*{5=7jHiPgD0sL$5?$~XbMxk>Vk7x1se!klP`d9G#oA4LH zuL5>o3j7*iv=Jfxb->sMgzy`HkqL#XeP_9D0`^o4#}5X;Z{hJY{z5vp0ZYr5{YXMT z^V?0llg?cq{vMVeaOn>A;AcR8XP=M%+m{S}e*kAWNoP|4Cx3)TKKyq`m+%2RQp&Zn z0C*Zd6M(zr%Hy4MjtBUb{wcs0@TcWk#4iNkPvPOv`G5IN_$(e({DpF80_NcVj?I^} zx2E7P0ydNazX;fqDey~xolSwi3YepB1-uHMOL+Wk{Dpj81}u%v6~LcK!M_TaTP~K9 za=3;^34bB|>wu-n=LX;|9m<7tZU%6clki&sdk#qk<)4(?c_@@j!3g8x>`MCLBH2C=dzGUE|0sNYQ7XtWA11G;O z{W}JJ+=qXWV90G3`E~HW*l*xd0X#DB*#J(yNvDa&KgVC754#osbLkiGPW(kYTsZkA zobpKE>()mGe#wJpzDPcZ|7rkdeuOUt@I|~6emQ`XF5y=K_>zHN4dBEh{xv*YeOSUf z;n(p<_|JTi=?T9Pz==orO&|VW3I={FfHw{Nwh#Z)DFeUb!@tPX=h zs)66a)4~6}J_ElU!21pSP5|Fz;N;h(6DgcSNe@0?;LOLx&l@=Nap4mN&U{?>tbs=X z{EC4y9~b|ofioW$e%ruD@pR<#FE1H*0Z$kIj)9Xe7tZoS&QBiq;a?({@KXVt{1HCo z!Pl+7XyCJWy8OIq;7t!duHPpYeE66027fVtj~Y1harpmI!N4yC@CgHF{x1G0178Z@ ziw1rfPlx|c@tx(pf=5DU-THrG;8#6(=1b&{_}B1AX@Cgr|`TeT~emsERGVoJA{15sJ ze9DLa-c19a_2GX&zA1-h0Ovd53jy4gYcYV|!aMOV`tU!r{9Fp)0|x)q06uHrO97m8 zN&j*HzhdBgI&%I)Ti&Za{EvuEI@j=U@c$^nJK@&@_;CZj5x^}!%*UZ4_ePP<@aHa>GOGR$J|C#TE_XY6C!25mpA1xX9CLjKvM-4m*;0p#m z5Wue*cs_vNHE_~%Q*0i5rIU-aR>f6Krx`S9144E)sqe%-(s@9<;W?^Bn3_#YFU`Cjqi ze{jpduln#mw&l7OzzcXM9p>-k`^QrTej|V{8aU}5J9-`8*9 zo%~-7;I|F@S^&Rm;MaZlpAbws%-^B^Cj$n4(}(|Wmi{dt{wEU#pYbl81p~i>r!%hm zbf1BfuaDs`C@-gEnFA?srgP~3LYasg*FD|u!~bN-z&GLP=6lV+BRm~C|M%!U6Bv)9 z?vw|guj(`YH(#%GUOHRp%v#7R2agO?XUfZ(R|Jw9o-(C2% z-Q9fe`$jYO?tQd+>i9xt{nRTz40gUhQ+RD_rtkLj;--(5Ke%xF!A$1v{>;FI2k-mL zYt>Bu?ZcVAql+6h-v(@SDw7%AoN3+$tqXnkedg$5CIbD;;`+tME#q zM;=dAGwbjkU3h5yBa9=xQ84!^=sz`>SvQuscXtB!2Y_Ve+wR@_5j+^yEy_dxVSdcR z0c8M+|4jMvZ~Wf9yBE%U;{wb0#?RinbKw(P7heC;;sDC~vAeHiGJn1=)AuoG)FSdG zO@0Yu|0gn!p)89m%j-zVvtwaH=4(cmP}XbsyQQ0NPemyI%bEU(%md#(l>x2tH=Zwi zPbQ)aUitku7SiPK8p|@hc>L*G_wKF4JNUi|vJ5fb!tefjH{K}TyLsWezj5Khzuc;I z^s#%l_AM@E-uS_Lw^^Rjzv|1dOmA$ycO7-MpLO@jm)}@e{N{`}1x$e`{~*UrAN%G^ zw2*oKAAI!i`bR!m%?!Q%c&6_~M82|EKpm{>KR@;LzyI_#)bICXPA&eU%!XG!ezUOu z`!m;{_%zD=i3k1->b)@f@q72qpV<&Cd^{6<^!#@{GWzk%x>pYW`oe{Oc;9E3kNvy& z5M*~Iv(C}kJO6ZZrt?ofmT8Vot$TFw2hcu#Fw>mKyhrr-WBW3Xj6O)ce;|5dDU-Pb z{-GEBAA2?vJv+FV`93_K_!;Wny-~>h+ABZ*UsUcW_v?_;>y#68@O8-Nb;!o*CEEab zdhJ=Mk5j9ti%H@$56WUK`5+m?xy?~V;b)5KOpHRn?=NqVF>Ob`T+h6}($n?D`Q^;lq^0*@MB(Bi~(F$&fS+G3 zpWFWd_4lt)?pHFSDA%9dzK8n%A*ugc;9=7fpOxRgVd~&lXs@2hEM{JNZ{|34=luIK zaO!}=Whryt!u_ym_hr_d@B8?A@LB-Rk5IQKGV6W;>==8tZt>|QI2gjV(596B&&A9u zZ@jUW>Jg3-xGFFg4Fphp`xa1+ zW!ov!eA~S*A2H>gU8&sYD>(LHShx5dxfEy%<+d>Mv;Pq?KE-}*bSblLJd+XlM<>>Q z24jWXM7XL)-H z=|1}Sw=I11!2=5yZa=+n;TLxlPg$v)ib;0097Wer^dA?SO+STu_L<8@u)#jt= z^PNh2FsinrPNNY`S5I%wW-^(>W6$rX8M#OovCypp_$MbZ#9}tMw=`x+6UiPR(|Az@Cp8* zVzpK&13N0#YK>B{Q;Fs(bB)&dm~fbXt8%*9?o?XLq*}+1nIgE3*&t~dBlAZXHZDGN zkuW^%c-KP#{FI3=n5P*ZD;mblw-oM=hc_;2mf<)V@H^@F>zC5u8>Z6X?^#NR>-c@+ zqK@CepM;Hz4_;Ax3%7V#8Al=hrp7;bTc45)a>+{D!85P$?38(4{FVa;_C^EWa`eT) zXxGrLA#9irwa?FWiqm*@TKb%|zgm@Aaj4WNS29D>tzx}2`%G;=ZBX6Dd4!l;uBWDpXEPKKoa8ee{BMjUlyNF#!0>b4qhMrK?6G+ z#M$%&^Y{87-n?$SqCeKn;z=`jzlpH?v;34xkNm%u@eF@YAMw9#{xLB80iuHE=%b(j zF7*Jrv*e}$T=+w~?hoL?UkbkHyNiq8>yX&eX*zKa0dDwt(3XqQU;lM6{GkDZ{|9&u zICStc4!im@_x_Y`*8Z57{R#aTmp_gt^keu{{F+SgAN+V616@zxeb;07OE1BCyo6pT zGc(x$1(b}D2i@!|_Q^hYD=cWNYc5g4$8mFtJV(lgN zl7OAA)Y0FRVh(6m*w(3Q7{y2sxd8q+-dwoo7vM(&xX2ywe-OZh7~ucNz@HF+-bu)O zui>3Esl#yqoPl*pz8E6@1GwampW?7e7z6sH`|)u3%p3T71NeY}&jj#M1OFERe8Rwg zEPxjjz8)&z?K3w|!2F|Ag&)hQbO?)B*dL?$l!RJqw>!G~-=*BMq?&6bg;!p625YlHk z9Q^f5L<0U4p9mp-6EFvV!xWK#zrZI#h<_0<2md`wcqjfPJ`n=^J}z|A_6B;}_Z7fs zt1$zSAmzchi*1f@vHN&hINMzs{+1s2V?FQ>rQ<)e1UUP*_v0@PDA#4YkoORN1u!Z_ z2)_!LBcBI}NBLaC<9_^w_}2krxkC62z#KYuT>8*WA8yB~58VpjxAD$=`Ft3EA^kgm zx%B(+PW-z8Jg;z)@bIS$oatOT7yb48XD$&BD+?deXZ-I#wOkpRY2z?qRH<_$oWo=# zYHx|Q7R%*UrQObzDzzHko0u_GTAlORe2B=YTo=~fs9X_p^XTNFXgHd!EaY6!)7ib2 zkc(oN5YW@e>jV3bym&BruGlF?D}~8uy4bEnhVN(w6G0B$i}iAD8gsTY9<|{&MXlax zHENMk>$K)8hP`?t*Qw4`8uKV=dYFu6YDLU8XNw)oTqBF!D3#`0n7-yqQFP$g(HBnc zKYB9SS}ITHWK!IVmMIoQ+%C1M%??T`JVgV;BW60C9nI$xk`Q0Bnqx&}M*_G)_eMa; zl{&53=4eF3JsfS1s*PM}bM$mCHq1=C)KIZt#)~>7og#)TokBpU(1Xxq)T$KAm{((t zT<64^iRasfR2lRNQC>AbI6BvhP!vr@L~2wyk*se6{EJ9VYiDo}Mr`&1gsl@c|f)R;#LPS^mI%>k9=*yur}HeG~j z>~v+Z92KBPwZ=Jz4H78$1ePmIDuKDp(XO>{Fjp=69LyDb0xNOQMPPPww0kWa%vMj& z`Yg;Ad3U^xcV z7>Ed6!v!|B)*H=q%alMTqx~oMN9Y0gJbpNvA5Cl`NoetM=;yFRm>z`0@xxK0UOOKR zus129m7O1iA@ym|isek}NhbvhH0m%ky}LEXlA}%>Qozb4g%Vaot29hDCss3z3bNeT3YJ%IPFtMgunf1;{IR zKzdr6UV3XAe`IWb?g;unhrV`zF2eKJQScGaKe-4K>^%|=KmonS5L5wTk>ck{vz5{r z5^=(SHWi9R3e84?=ry$)Y{qO8+S_#CO8dBv`iV+F4It#yq~=uA6vB{bs1BMOcDjFZ z#Mfz6D`zp*tJE=M=R`r8_MSZUv{nw2PC6vmqpX3i0qn}aYDQRUtDlB+WjsdS2Zd*j z5Vy(HqS)!swl(V8vSmzcR>~5MmRKkoRgqSL$+e}@Br$8KjOfx(4`N^%s@z4RjrLW^ zw$u*oiiSiYxlU!Ft3xsbBnlfC*jUPrJQY>usvR{Is2VXHt0@q8WG&1!PzUq%`8H&w z8l}t&LGzQ^cCJ|M5Jv_+0(Ggb1)h09z{*S;F&9%GT~`u#}0nWVKr%@n9*on zY;69S=aLlhFHGm=+vkn?b*i-*y93m;Guc9Coc)f8!$%IriF*E+jLuiu(h?Hp+vkeS zY_4aLBw{kcDr;%J#@Pv{ZY|hwnmSBYE7?N`(f*_333~T0%DOyXLh44eXZO%<+S^9G z42EEEX}i+|V9Bt@u(<&-POMr#Q>>u{fo>ufRfiJ?kHfT!dW*$~>(H%e<}nbRE!LvB zV*895jzmC~gI>=`^kLOb6{%G!po2N_fK>Tl_BmVOBWi$pQL*sJm=EphWDd!(TdI06 z)nrszXu=XF+8e5erQP*JZv)ECRD7SSNsfkN3fNmk-m+pyAt?G>V`e5oYi!MM+Js(u zb-E$x6OE`Wlq!`n#38miMKx07z*cp-*1+^k+M3(+RfW3JMA_DI`s(3BLbVEpUphpf zHNZm5PMRoDN(^_=Ny#R;BpZm@T)&Cx^EFjQX`_@&v^~q;z{(Cs#$0+irMK97YT z)YKEv3$^0eij*Q!^cRk7(E><)jzo`RG|h3uK!F+K*P!&BLJaoKxOmLZO;=i3Gd9J7 zRJK&Wx|SH*yvPd)F{8?jx2ovJ5Vok~6ny-!jWBtSj7V>paP0lEU6oNsjMAI6;`!)Y zwKEI4h6&nh&IE$Mw4%gf`r5?N1-zM7V-Ee8jEf~shB=_JOUCN~8GTjLgb^5UApcey zD=Fyf!=~b=jeBzp%p(l(t2H{F$l#)F`d!xdxkC2b^h~XaU(+Zbh7PpN=^ZdCbf(&B zcZ3OOr=Ov`Wo7iyiv*-1-JB($*yoDFUGhU#)p`lz5sa$51>8EuL0Pe5Mw_~s@N&Uu z@L;`sY~}?WA4!|wLanuGJ*j}MTii4{KC$eJM^7F;(#?*6pld?^(wMP|QLexa(NjsN ztfYxd>+7Laz)~SK%gG46Hdoxx{HS@%Su3yHn8#$ZW7|z?YL;DR66koMCuxbKamoNu z=BhHR9<*&(CyQZ&q;2R5s95-Q&Eg+)0$lwlOIzJ%%Y&vc4D07Lltd$eab z+o~0Em@=mYYChJFcaG%9d=ags+UWonGOQv`8I#C33lrP4AnhKjI>?RuIn!#fRYRpB zM(EYfc^#7vI0(^JL2j!(mFaq7CY~Dg3x%vvt_B8bQm|c5Icastw@RXRBbq6;bbtd%N&kX> zk&WF{iOF;3(!?Hysg$H&AH=FYM4pevkICwRY%*k}Z#}melN}f+_NzMSTZT$D9#hM_ z$j!`8r7Ku=q=4*YD3g!&fdN`ihfC^0m^~)`Sahwa#YSPX`5Dm{bP$-~b_EEocCL87 zEfXfLL~txXqEM!Rktc_SMs^L_g{1=5y{LOWA&|gg3^u1Q$HDTLu1B(c4U8ZBK%5v% zr3G5#PIqoxzDQ5uCfGSNG`vT1Kmx4zrv)d$@b00Z(HI|l6luZ1NAdH6GWKMh8Qoz0 zAU9|>_fC>}!W>5G2M;c%$X1F}227R!xEhYZF#b=fupP1Tm!}Si=ISjq91xZ)aCwY( z@iPeX@dCt(Y(X1qqS~uRhC}M}bCFDjRgnq6+{I;sr6G7b`Q?use?Z{`X6B15jUyP5 z6pJcAWA8jpIkpsuN#xepD9U&fgWau6i9xZbJe3_>$ZtGbaN;TcZEWRo{Fku< zyEB^JH8fl0Okh=uOYJk&W&~embl#nFAVG&{9Vk%pV10J8v{(F^<4Um6E~=aey%%>V z6Na8StIzREu3q6Z#S$+>qjn*@i<0&snu`$)S0!y)ELi%6!zGZC7Hgubn!aJ;mdx68 z$_CZR=ATO)WVo54nXucCjbL=Pb{%{lrhG8A%LR0I7;?}HU0OiO%+O8E zZZcR7V7RFO5Qq^M*2uYhB}0IH5f)v{L^>QR#RS|RF)>;Cg&%$e9z9&m3RjM?kt+k{ zQBEwkIYxvo!ppZW#u(1GhD_RMuatM&Zo46+X<<5J7&m ztpF-KS;5?I#a1Fx#B#Z9^sZV)6Q5OeKxTDLmg=(XHqpgE zim?&MRU4_hpeuoNkRh&-ZICkE`p^Jigt{$hSKFc;GU46kWxUM} zR=_uUPz+Y7o1Fe%(528pw`t0*}%PP4PzHXm;7KO!7pZRY0nYQbbJ3 zH1td!R~tmSVvn6rk($;a_p)q5drd=)%@-EsxgJa7B+_j=x+zTCm6BeB)w=g+gO)-r zE;?J#4EOzX^eGFmX6fPWZHhf~)fUI$NOV=k`gAB2=L=_Q5-b(<5(D6NvLVYP-YU{+ zx?Ck}q#3l0nCX-aWTsnX9qiFO@b5dN4q}epp>+_CrDdtq=}2NpTIqWo(%Zh-s&-Pk zKR4&__awIcF*IVUJHOBLJQ%ldsZIj6**mFQ?WXBzKcecCYO~=HwW2GB^pNP&*nbgS zoi{LoY_!t%8-h~URcmw}L)sN$C<|ATo%>hF8}qAni7x8#QDPB9&uvp#4zJ8LJ8%Ky zhL!QVuCneyPuOHs`)vouO{6W>zy4@ zaT<=E1ZI5uf9k1du(8WcMw zFS}rB(>DGrDf>jB&tp%zi~%G)T#yP$_gPA_h3MeeYA88m#4{fIy<;H53fFpulC#D3 zs%^4krs?tR5m<25O851~49{0kA6q{6>8cbMNmrh3sj2y8YjKIC{^sZ$?g>z9o-0y2 zEE|x?KWwkq$fY23o;fOeeZA`nwjIbIY?dpc0c@sP2dlwopE6?i9Ho^fiy?2|j4mD-1-7>QAp&aOB6qz~;7hgi-PcpA&yK-{NBS|{1c%<}(EBEuc9o7}jE zrzjV)*jHm6N4R@BE7R*ztzlO&=oz#Q`24re7`I9t zs)J}&JBAe(u;cu#7)I!MLH`}>Z#7%hIXHet@27!)?;(Bq`4GWV4 zk46~hpEjL;2D7^K`QZqDTWK3yF|+OuHDul~J}&biKQwE-Peso4#V<6XX6;>-{7Kyz z#UtHoa1v(#;4-}z^1#|i@iv6tGfNAXBvR)o@U5?aNCDcR)S(x>oq{xoW%*&5;o)Jw$QJJ zrZGu_D06dyv_71M-9m4q+B}=OjH2lblfz$nFr)uj))fz(s%%tSjj>=tB?Uof!BfN_ zM7Vb&@IF?jGV=TpiefFwV4S|~MjgGzi7pUx)sj0d;< z^T>l!03i&%PoMF>`59ewmov$P+9SXiJ5;vDM|ew(+WcI7tGb4nV=vV@+(g@zeQCfP z4$4+4^?ljlQG>me1l!r&mi|^H+4fSy0iun$sP-9pxTX!`R?eA-a)k$8%B|u#Y?2gP zXrz_agOkz7m^emb=K>=Ov;U!vPpzyb5zAqiT2+Eh4T)e) zO9Zv597Nz)(_Kr7HqMYIvTCm?A2_n26JBd7j8&PJRP$Q0SwjNWJMLgg2Qk^(mJ$o=;Gtu9Fral$NAW?kj7J9@=%=`-Acd!z7$|uZ%o-2SOd@H^ zTs@2l*H=SVebju?w#N)9L(6ei(rT?`+GSH%*JN3A*j-E~?8>%?xKkL$w7dR3_wWL(2#B!O^ z8~e4F+gLft2IL?in1|wgt;02DJxwu~b!m&d)C-~xpOHW)c}l@UXZ^Z4jI5l+$Qtt) z5qBq!@tk77!K93RNGZo)^g$ZO4`Fva=W|z-z40`jG1;drH}(!pH)`c(Lp&`(8ovgG zOX$n6S3cwr>vgew7FW7CG^XL*1xL3oN}YL}p%di`h;2`ZsWq+E#hzfLM(U3PN9l)< zEyomEFA=R&KjDrCuO(Y-&_dd?S_aa>>K$5YXCrE?DbCmX0+)4IHH zU_TD58r1#Ku|tN*pbjm6(ZQqR#|~NiG2)woYT1HnOHXz{l7+RvRnT$)L|qqW38cJMPoP z5U>0nNz2HL8@RZY(0a>R%`+>fn~hb)4u*_=G}PVkc0oprppJl?YcQW=)~e~?#Vv|uI0jpQC+yKTD*!$ElM2HW|3znoi@x_!iy@*zIm`3{LF0pir&IpR*;<&3qeloZ)Lou^G(m4n3&Qb*v zMjVym`aiENfCsG)6(f*!pgNE1oSTL}shJGorNmBIlLC3Vq$Fi+TbLG@Lj^36g!a9n zNqoa~NdiR=ZV@D5{9ckRlDPL*r%-jzplc(0V=nb@V1TzlociJjU&gdDOp!56TMiCX zvE*aRC4)rN9GbH$C>bA$whc>1YwOvlttt{0HQ@n4HIRb(T1L&B!I@Igl3>iD$)|BY z7-LhK&r|3zPwpSXEC=zH?vq%<%BlMv#TE~xp5f>NLNj=wt=G)PK=A`7m7q47eI&wh zVA4(Ks7(_bV5faZ6G-til~+>jCUhEWGyR-l$3DJoc;t_7pRS26mr*y zSxBk2a~Pfr3YtGLG4h-(V&e~<@vzixJhn9Th-OY3QCv`ch)(nZ7-)#UBK z{*wnL*qlZrQ~fv0j6U3)1(+5?3LZd-sKiXBMsnuH2?$QNO?=5IjO~JZDt^j#r8Z-H zI=98Y{p2wi6zuPq$O|V=ym;VbmJ6d8#2-8|j-}dq=Q+9^b^%q9LsX;kA=u10x`<$Q zCo5K65nE5!&NpY<+4#P{C&)?Gwi2EHDrk{5KQl8)(6~pnX<*Dff1L} zHJcN#lm}-#Lb#SFqJLW$WlDv15XRVYVXfZAN#3Sd5q4folBE5)OrzCc1>W{`IM36V zn`vVet#O9!lU6p-`GcnppVSU^54v|=M2e2JKBuHk)n7> zQa5ue(L`E2PNPki%Pu0;q3LQJRE%+PlcV_$VGmFj0eEK2N-zfp&SIS%0=!DK6k>$g zD`}gpoaW^r+LAzq&4)~YhIqbe6&Z3?__3(1Y(?K)hHQCML$(`D$!EupVe+V(0NQoI zOH~f48EAHUe7=z@U2)MZJ=TNB$Z%AEZ;>2~agBeBq|6s+?UIhbwl7(OfrkhpNm085 znuF&|`I$t9J-qipeQJBLgi;7sv0%_8f>XF13D}BhyBylD*15lB6WY!hO=Z=CsDAySMgEoY*-dSi6TZ|MARIWZk9e!_gfV-s7=IZ+2gkC z+Jxx(r5PEX6FRoYU6jI<%zs1_4M#}vTW<9 zhWcAZb?mGj+Rij)P{id(v?ZS0i9QY$r)`&q(?WB_rX7J{CTGTkSgM5M#aU=A4$Nr- zl5>j@(n`A@)kWJ;tiHjz5UTp6~l&(eaY8kUx|Ux`(VRY&oRC^yKC&D}H$ z{VhU-{C$20v;I47J#xj&6Rx@}j20>p%9q@U#7tcQN?S&kL9S?Va!l}ne}Bq2 zy=!wIwWN_~yV@#w_>B&?%{a|PW$DyKa(G|5plMtaH5@Hqo+1KiO+!R_j2~`7+W~Db9cc-`31giW9P6LAIQ&-F(RO9JkyKvD zILZ~XB&Yj(@zuQy9W$3Em}OcA@`PVn*EX0`wk|+$o=WD_{E;KSfkAv?e(=@6~y4ykLDWwg;KmZzJK_p~)KSdCX>-V|x6nI{%- zbDOpjX(S7AmnJvkv=%l;3%IpF&2n;uAGO_E`!zx#+-I#DVuh2esAjj*G(L{9X355ycNq!++n2K2lubU5!^Dp~LBh!xIY_L0Iz3j*Ygb~K9C4A1 z<@X0B$iV}MemB3A!nG_Rck%YBcLl2Iiv;+LcspP$3LM5ZSgXzKVR zG5Te1xdROc05%*f)Wbs-<5S#i2-oWhf8zhnEEa?@CY1XaKuw;yNNOg1WoAd&nE_jF zS_hL<2!idvO%%jo?dfj+%KPLyGWdiQzhC2qeBkPu!Ia8g?9N3gITa|5sH^!WSE#R>J48Bt|5eJ#zV6ZoTiEZ<_ND zah!O}Zi$evR-@k)@1%;7^HqsEF;lqy!a58aW9Eq72#g2&`i;gwRGx%gGcH}T=;%NdNVPP69gn?^Z zYSET1S8kq%6O~?zDBYyo0ZDVLi}0owN%ARZL`;#W?Mmeg#05gU_=peOc?3b}8DnHP`}G3XEQs0!mtK&l)Ap`hLdupHk(&|C`)K zfZuuQrD~kI8iQAes5xInW}c!YN~6(~k$xorbH0cPIQ%wgqm#!Jgm<}oljEHZls`#= z;jTpzc`GemFS|xsNRmzqUoTiIEhI^&g?a2+X(35EEnbPV)-v{@#bbkOq=h8ue9`W% zOiUDpm;n(s&a7nxW+@Ih7XV*z+I{*QN(O9&f@(E@$a?4nt(ce+i_VC@RXy9$1ik?> z-Kv&PSF&V658C7^b-9_7>G#8}(Y%h~gyi#b5@$z*`+#_Q=J|uq%V9&@icvgWtk#E= zN@Xq~AzT;=_^z=*7d+fC7U!hgnpa#2V@}^V0wIP39(oezUoAJ6W~EzI^YZq}OZYUs z2TY)fh1Y=LytIXNs!g3x-R|XQhG1kz zn26mSE#XUIS2{kr=8}dk$514#TIFK9y$my@8sbA<1Sl6gn)|Xxx|s5F!2kei7~6h! z$C9VFN5`d9?yPVxTY7MrtV>?2MfM~nDRsmkUH?c?H~z7*=i!+Ow&NG!RcCl+AtDq32QkzlBH6w~OoG&4d|ZjA2;n%y;g?inm)0t4 zp{9J5wARz7n6Xu8lUMPpRS+#2t{IZA;Nq$wD05Qb6r9chM)1{$H>EOI-T{$iRc0(! z8KQcYIX-6AHDRSx?oW>6(VGTm~= z4OkY7w>}!X00$`=OYs20*Oln41yw^M;tl9nXZM2ZmPEAq`k8v;9QMSq#a%jY##CDZ z&p_I+IA>|>Ib`&v_`}Ue${&x@Cd?^Y3HNZuP9hCAxRb=Bohg^PV|UuvYSSTX)9$jd zxLh4$L>o-LyKO8E_$84xEiSJyJbTe5?UP9?w%EZ5OcP98EZ1tgT(^-X zE|x0JN!Q9V)uzKs9ETmLIj|u?({W0q@&@}ziWvxk#^GPl^E8dzxst@>TQ5mdq0_0! z=A7cLx-yyA4T8TK4 zBBwOll}o;BrIM%HikPdjXl@Nt2T~DM+)44<+*waWiCbj{>r&0xM%}SFVTI1YO9x-z z!PV|-ur#~hV(Bm>#wY(g-j%PUbU6Iop7k({z9ki-RJ__-xnlObMb>9AcktOtnnJ=o zhD+T@w$aDcQ%OZLl8Br5Txl6vabt%W>YZcKv`cfPY8N?^V{BCG^B5d;Q8QSvapm0& z-FOBI_r9vZphG$CP7kOVtfwqi8y=a-&$r*MW}e5=jkwsD&ZJal1H!W4?j25xbA=L;6ru@C@-@G4Jn@o&#&KKkaH zxh(VY1EVQfx&srK^&AFKK{-s3^U1)D_P-m^;_=>2wV_xt!fhYD=)rF|##=~1H1wRN zSDwSoU7^OuDxWkvvIpGsatsIM=t4C4I?X~pY8Oz8o7#w6jZUmf zlOMxs#w|&scgDtNuG)0Rj2g|avZ)O#HSEO?4XT1hC$cOx=aZamG?04MF3+JYE6LuY zHGIdbat?ncLuDoJ*hgK4=h~s57zD?Vwf*6}L2xY2e0w@KKN}CpEkYt|A~d=Y5@{2m z(v1MeQzK9ybW1G1Ga0auf-_bzJUC`-raH~LMD#{8tG#*Ge$Az2!J{L#!|?~?CW|K> zgeJ!I?K#_b#R##1sS@GLwC(g`gji<km-CJRDUu~70c1ETU4CAq6VC>rS_%v>=>X=SNO4O(|;~7Pl(r`>^ z8XuAEG#VXmI&CP$a-MEAaCRX|&;!fe+|aa-Fl< zT(ywN;3-BZ&X>uORfKqO9wVG>VE-sVh`Y}if!9qk6U`zib%Ibii@SGLQEX_~n<{qP zD$P0}wuwru^Gy!Zwe*&`q|ZWCz}pDhsB^3o7e6e98>gCX|5Z%<+e>lK7~WcW%D9=+ zmcZs}pPGA8BKba$H{h|Dw)9B@#)T$r+(XE+cac}RN$bPCg~ih%rS4gh;wDv2Rj?f{ z$0%zVI;Dz=q@AU1l)&tDh{%n#jS8q!ZBv9c%~AK?LVRS^J_t*gl_Vb+@vU;7n~f$lJM~sF4=*l6Q?Eg(M)2-3u#F_bPOkm zZpIHDI+{Uh4(RTf#EdD@l1L7v*^V&876WwCTPpfdoZKm@d{7^)lW^MRRWi~M#s~A@ zuz*7_xwG(Sho?BZ5&ooqZ;kyJDqft%3nZByCf$TW0f%=rtvGGRpD3Qe8B1KZH>aPO z-HLiUUB|6O-NB=1`7mgbN?b3=o$q-%*_qsV877!*?LySeFQ@s?BXy~Q1@E~aU ziaFI@BA}+P4o!Sb&JS>IqAaW8>j=6$7)_cq4Mys;Z_wZQitS#!8rTKl%kX2FCW96O zM<7<)a}mCNmsF<5%Vcyxt&bJJAaAz_xWhe(agn{oZhJ}6fMO&CB@H%q6oWOP!qs!2 zUiSXWq#P+UM}lR*=Eaj&e&i6RbUSd3SI>73!+)8?T`^fUu;l{$cPS%$7ESrZwWS=G zaJ9hRQ=eKdwv+PeW%RGEUQ)`ab!!w`M_bxWV}3SMJ*~r9DL9NJYD(L4&kFVl*&4<- zf#L3mO;Y*pWp|yk)0N&AeW{tm39Bx1&pih%Hw@xhe(uUkZRkgpUD`&GgkVobMHAUa zSRT9Su(Wb~HAQR|^wrQt_72O1HEJVT<(^%fU1%GQCo0s#aHK?&2Bo#ZcFAHOIn3aP zipA_%4Cgs1rXLNN>$h-Z4~>*VS5oQth~h^ViH&!+1%Zv7BPl%7rls)=)riB}%Ct+E zIV{WcT($9LB^?hk15txyT(IQF+bU{g@pjAl&2haJS@XN-T^gOL9f1JTwIe{Xl3q#9 zYvCAks}z<~)R~hoCwL4~_m}C;p+#fxbc zuwk<|hgjI#oH+LU+AMh}F{K)gD_o1!t&JENm^B;EWa&JqI|D+@44ITyvmBdSSlW}K5u6v~7zjm!Z%NOh0+`z{rvS!koAyN_vINE-OpT*|s4r+CZoNKy zEH}mhfs<@5F(y5e?c^cX==tYO@||w-*zEVt)g(XoJTvDQC>Dw+^lTkY( zekKPdfH4|{&kF;aGqz{3D2XddI*DyzHU|Z6?3fOKgn06gmyMqRMjVFj zo?QvqB&m~u_N7>(5*0~M@GCU~tdg#txYWN#Gk)=i)qtO^{s?&`N8i8g!w|&dJx8wWcU}zT<}i+H+clz0N@Q)7eJiemSi#wrTl{ z`(+&fyy<=!&Z_VB%g(6mo!BCim0wo_x_^iLGBzQ*`ej{He78wTzxY@F&u<4#?@a=l&sB~E|5+h6_-=`YQi z;+t=sD{muN9ql!GwekA=AGB?Ho`)$d^zCY!?{=K;{EpMQP-5*ZXBXmRH5gtyj*wnM&u4h`Cp+$&r_nVhc_7 zY=fakyosh{Cb1V-cU%OSL)6CoxNud&$u6!5%7!A>>D<8wQ>T#PZXh;wWi!#N@4GXI zv?RFoaOX%?_7Cl1pqnHm6G?%pPqqwo$IxV`yM=0ndt|t0S5`I&ZH8`=^bE0_?PUn8 zm9}ZUdcvwKHVOUqW>wMZxY?fz)x6TSJ&N50!KcP`OC`}pQClh37AVkhm!J+4d za;cvj#C{C+Roq)l@rl`rZgz@wl&cH7EbmuWC2bY&Td;KlQ%{Nfjn*WoPC6C_rjY7gtMWUd(gVRG!Lvaa1&SL~F03{4ZW?>nZd%Yc zA`?M5u~%}@@wR*|wkKUU?!3S~+GpTapM;g@#$Uh*8Xt$Q##>6}tJWrY^j2O|G<$qF zC#L?k@^8W&b19ZTJm2o9`?QTQzWvh_wjI<^v*b{PBF&!k zjH&M0XeED2&$rAg(M$GKz0F|Z@3`JJ?=jee9=~OYi|w@w^|pV>m?7kGW(YYlTb{;2 z-J15)F{ommy@&;w@*{TOam+9q5B;HXEz^R?q!{|ZWdhBoR}>t5v;)OXe!ACyom+lD z&+x^(bsIORu<_*O8V9Cr>JkLc7ju+K(weqOEs00&j7X;^%7p8D@s+YjiQ*U>#w$TE zM8#ydRJ(}^K{YKH7TY;rAXOD8w@K*J6!+l9T_KIvL2(EQ$Y5~w_S8);kB&E4H!`D6 zks`_~&KfG7G5VbB9Nr5<*DXfYwV(|NMp8q)>fNb!9&WOfQ%E~xSy?s%jJWv;JNTt7 zuczwRGKQ4mG_%?aB&$6;_hLf~Z6a1#s9Io6sd=gwA}eMTD`U5uELjj_cNP}rz^V#! zgh{0|tIR<2N-a&yYx2V>jpSrwR?ZALX!Xp<5SJ z$AS!!E`T;hgp-(mcC%u-jexwS!(5ilgrub;#^A_-KITHnO|dk z{#+hyX-gz>#xtJ$GGC7BmY?pfTuP>(J{^yRtzW? zJhWw*1XrhFva&)tFFTx0D`QD$FgteeTMi!;Z`<#fIE;@rtrRAsBX9=Ck_qk&sGsJO z&BKtx=}0t`+;>-6@qw-MT&b^^ls>2G*gMb3=v&OmnD|o(y^#^)BTpVoh$kamI4;06{b4)5MP~f?!`38IevCdek+6~46-i?t#@6f% zFaIzd6sfo`+k-c9;E}-K6_>iS&&blJ9{td6Z(zJ~Hfq#s=LfS-I@Ga}u_e(`3Wgu$ zz&)9cbm9ySpZNBz&pzo-)hwPEM#FXNQpjf2y;Fpp3Y|A|wW&LLZQg`BHvmPM^y90r z82iW(S~NBhD)(=6!D-cJ!N{PH!;u10$DTH+AE4bvfH{h%w-^~EHD~>RUhpS(VSuj zSMOhE8xRKj;`z91y$baG?WXk^<%+Sxr|5#3VyAFzT71 zbwG47v`NxR1s1<54v4Bu*8h-K-O$FR-44P&&oIlipss+WW4UQ=9-eQwl-(@TCuq2D zL{>9B7mAhF8>G+T0w&h`u>!S<6$)iC?wh#2o3}0xTt1zphe#n|On%vJegdDc$8zUM zI>EXjg?n){8C>x?Q|PWn zeT-#cu^8z!EI>@-L^LjTmbGKYn5tJexn4>L$MGp7SL>REZO?MGUc>^uI`zgh)A(HG z?j5rDH>JkukK~3PH69BzrFsH2etT+sHJ(~7-{J2RK6S6Mf{)?S-lpxc=?)G*B8<%& z$4S@X%YAI|CLq6ChixlsyhZP22asl)RxkP7bR;+V8dr1q{B zOY|C%i$AQK@MCgPY6S|xPieC0ow8LqTWzE7Kw3Ygjj*|PVsa?`ftx~Es_J$vS6zZ+jxZ1R4rFy-!EspiWwxi-8_@Le{S(Ih_+ zPq8#>dg*9 zKJj^8zqDm}32@pK3{T4|V$Dx$zm3l-$)~+yYPPDGy&kJ_)Y0)K21~M&2|RTKO++mv zHbQCF8t}7nNT3*m$>(jPNZKpJYGLH!xDka>%gNcKj`f|}t0@(rB;+im+W-6w|X(31(wZ83vK=^tE@n1qrknSx+Yj)?%i zgx!v|FikABq$y2%lNsZ6!`Xuhk~6nDzJZM6L^uh=t6m`|qYJz?(h$O&z&MRSE+`R^ zKm)UDd~!X~PaEod#7YEM;;BL_?Xs`wS%O$2;p$tDIcGZQRjT;F8O3BmoG+8Q2(J5@ znhu);PaR3cF5TqWG;2C&;Yh*BV=_eYnr56{Q`6f_@3&19A+}j2VW?+1AC4Uibj`*Q zt4ZdHRTo(8wC=yZ7;TP*wKa-zB}W?1amJAj1erm&X99m`GWTD@KM41~qR;r>QMOu> zS~YWMrp?&BW(6WQT|mD&4-W-2XP6WD$vP$|cEa*q%8|q<0+DDyOb+MPP76uWY1P(F z3rW&xP2+~-wU%*n4_fEeP76uW`NDUx*2)(@rKOE9kbQZ64wILaDpHI%F#{rH^!T_n zlHHRv`dpac!s_h#Ht*0J8XD5yxZjeeVrDA~=vtCgY6B)=B?*JIZ^1-o$EH{h^pUuy5 z!I0YEN<_1fH3{{RRegxgRZ$*fc65Gj$Dum@UD3J8I1^K1!ztPH$bv3&CZE-L71N5* zjjmdU{-@QZ4Chd#XREl-84W<}cRW~Q(gwbIHK6ep+2V=D@O$s*Pa7p*QBN$Ap(s(j z;x|T?kN9Db_$h zHyH(p&vTqZ-6>v9L9>-w?A2XrMMLV@1) z^vp~Z4Hw@=e@;L#Kz}RomG+IgJnezJ!RO>1us2onp5KtVgki z4*+9Q!LPZe@zd=n?xk+PlbjUfC`dHG{qqPX;8A_`N)LWYUV-`IQS4OETR>P?cf%*k z(^&GS0bK-`P|P|A2?6SX))P!aIVTy2A8vcTME~S{XkK)V7o0Y4VHk$-#hQjD5;cyc zq>K9+gNf~FUEqjXb1-6}c4A<%qBdd)MDv~Og}vpo&olSz+nswGwy-pd^%xY8CuZ?L zJ9T8hfxToZartMSBNv$K9KiI)y33;TqcRd>i_UPM?^;-K8eqcr-#639#pcOpYp1 zB>Z}N3ygn|&ktdXR_n?wUruZiMqS!*96WXSq}B^grT54{GekDB8e{X2Ptlo-W^iqd zTU68(^rPI!v3YEXVDfA8u%1SB-Fn9eU#p1LQ}$3T^EJ}cI46ORQ%-P_hM4@)z~<^SoMx9x4Wfivi!?QEOUS3_q%0kK zrEdlNh;`6r(8U7dx>=AE=`5r*3x@^HCnc}~*v%QCgF&fuWg}IoL{}4?N~%KTsK>b^ zJv+lg(tjy%1|MvI3^#9<{!bS;p{2g<5%S7g+P{<03G6p>X~u7aoT&!=d|tct`~NKL z=NINMYnU^WQ$*rh)d!9pec|N(qbH+N&*xq^Hi4Yc)a82`_%z$B>^*1myF9dm$4&~` z!FoB@n8|gp0@$9b;y#>4J)7U-q3%EMZGyVLbf(@o2N~e&UBkOQl%x9<1i2pBni6+xH^`*u$}5$ zh2ut8eu6IGo4;84*ow&uPLn(iD&xnpXDa7qa|F-m#iK`#9XlSeswMlZ|1wveUSGwpePgmaXWJIJrQoJom<)N*8` zq6V|dpBCTL!J+;9#6Z&MNOY$j!Y^T7pM+JAH#d{m8%mZ>yL}i(Wmv{-D5O+aj zsh3kqsvVJX-^DOinv$9l9;8&8)OvT~kli6d9mm=jo8Lc7`v)EpQz4;6GY z)FOYQ-Ij^{KR)iGOP2ESFd3Qhl5sRXqc;JcHm&;<>xnkUqFCz@7nC12*UI(EkMwYr zu@_yLTa&bLZPk$$ia_%vMR3d%$a#YE=(rp>{Srvgu0md}T(sMy1U2F<<)*}JM~D8$ z|CZlN$2e8Jz4_$ zM8Chhzd#t)b@h?_J6f*H6z6N0AT;V7PBxRM@K?VHnSPBK81OM3d+cTT-$45weSBcx z(QNkdNBb0#pUAI&IA3`9>mJtk(ed%ZmXi}Fx0nR|hOT+d^!4|%GWz>X`u@JY4G4XG z30{Byg?^U{z9+FtsIPC61G-?TJI{PxUe*h3fGiCD%VR7X%WUZ(iX51D{(c5o*mq)) zb;G_S(swO^@K%WW`!*;&{QENgivwf84N9P(N4MZ@6Xa*awdt|3qbH6Q3Xg5l_)VK0 zL;a2+==%lyx*-4P`!idnP@uxpmS^;RVVt;QW8 z(rZqPk54p7LHRTB-}=}$=)1-z`MozP6rxQKsmbqU%de52Qpdke`Nkkpo1cmQt{KD6 z7$Pb2m|uA(QOzIv!pe)rOn!N5x>TJr1!+5IGwTiiMt%EieLiDz(s=h@AsHD(a3V&> zH#{@GR{@mFsq*-E`BZ{1I$kJP{bb!db7Xw{h$%0zM#mT8_=mr)zkgJ0N|Jupk?|wD zjD{QX(0Uu+myss;X!34~G{GVR9~yvKG4jh>gEeaLGntc*BYZe{KSlYUP2L~ff)LZs zWKh2HDG;_8%HM{#MJ=GbNo*#w>9PJkTc5~YiuZ_V|D?g}tp4yFg&P=f#7y=ce}pj_ z5Zylzmp_x)vgMISU?d_N{|q%i+8M`sdn7>U|Dl?I0fvHBc*<{DxHVdr!(OH6{ktkb& zGfBk|mp$g3Cgw*KB?mAp%fktHvkWjfRSQ6B)BfO%ALXG zNEKp9`8;t68yd(pkFKidqGu4XJjvG7gJi^Uxk0dn#521BH8?PeT)N6?sTqV7>7)xk z;R?$s^lDm>4%=e4HbkbGGj{VbG?r7%$ZdO_#u;4f(&6?Nw(R)b(gDq4D~IMX5yQxw zS9d_JF>1738*T&MhSj;b3TzXa)j)*nP~z8pni^CVI@?3&U{TC&f+BOAxJ zEdn*Rv?Ia|Gxc&CKAmt@;z~0>bdgu)Va!B4T`~|&6j=^t9RV6yf7lmbVq`6`B)Koz zG-3sue(_`o*02nw%V*Qj?lZ>BORb{eRTe7Temrylt;w+HwGvqjFeY|1njex4z`fBH zE+T($3)W~1=tBUB%`>=NdC9iV$rD)Ulk#AL8``V>jLEVO6Kk<`eH9aPXifC2xC~$+ zTNZMC+m00mW9xV5WZh$5%-=%iIq^0Zr!~DbiL5?Ii-6+KV^LpNm#erWM^)yaZBYk$ zkn-vH91OMN{@`gWwd_ke^20|D9C>m4;68k<^fZPKe&kWC62u6o(oT&-3^A41=QBDX zouH{ZT$#ijKz5F@7Ly;2@`qrWJLf9cG)CVqtwM0L1~4?hC`3xGCK#!8B^U}(#Ost0|3JgA^*>QA$c>GvQASParP1Z3Bn|U3s~K)SnwKaJw@38CF6@V42OE|HpQMJ7X<`@<@Jv-1 z&PBQtJ3W?fAfn}@I^;J+(Icu~TJJCiY;9McnIpJpOi zrU}+*9x!u(`)>y0?7R_5qh+=>;3z}u28THm93I)SBbra%)n1$}wyNygFjmXPzg6QX zgb;>ifdx|I6d^-)9TsHKSX`*-!*!6X5lO>0V`mp%2aj2-HNi7Wv*&2lc`szQu~Ugh z8;rKM;yL{;cLXEtj_Kwi{#KK+$uY~Df$~r7DQ9uktu~L5ubG*|@53Wc?xq>B@nUS- zYJ8O0>G_!%Sfb=bFCN$?3TEw&Ww8Kz)P~~7Eof|Tj-EwNCp|UIR$~snll++S={iPw zY%=0vur(6f%yujG2Ezy-v^#K{=Ga|E+tU8f;fQ8qRS=yp{C71y21r8@H{y0gLYW4^ zt`3Sp*Y*0?%+YC&cmMHQ65xT(Az}-Vxf$u?M&*bL+b}v8K3eAr(eB;FqIgbZ(>O%_ zaKwVwSA;WyhC_UsJ{U<#2c@8;ut` zMH;R75aB{=+8&D&ZoN{1E zG+}(3c!8x12jNux;Wng<*oqAz?=@2fKGofgccqZ&7UQrcZo82Q{u{)&%wjF3S zSO~B@;{VYL(ZoS+clx(Gx(@!^|Groc7gTSg|9L~L6NQB48MtbQ*j1xYG6gxkDiwGL zYOmkP)i$xVq#}>Bh&V(goiM#$o(*C}i^yP8MK#>y1A(UaaRZ@XnK2M@_KYH*03DnJ zGg?`iUF0u9YIzQJ?;n+q?%gT)sUNigdjZ$NLGJ*8X;Z0aK{_^|u7B5%xmkTtJC}g~RP`tbs-{R%N z;^omr=n-B%Dqg}0V{h^DarSZ)28nN6Y6t(-LID&J!|j@SM%_} zTSrj7r7bsn@YYe3Z|Q9kK6vX$%D1EQUl3QR@A1~rlyCj@EO_gP%C}>UWRc2v>!`}N zPoExyWj=xL2Zu2Zkj*;E@-2d@eWx60 zBh>Mj<|Sv?cn02qb*`m|b*)-}tw z1!;r9j|jorg0u`73jB(<1!*^S;SOmZymh3-a5vt>cLeMxi;9W{x|GTXFLSc`pfJ32WaZqE+kH}1M^~9y7dUuL zZwtc8ej>hoP!LwN5q;gS9~6Yuy;FQ!5LQkw66Aug%d+Q-bqm5S%bp~@EeN~p!t&57 zM_7(`*)1b@>nO{&*X}jmI?_sAw?5&mqb=Wl<;;|Ln-lk|8yhSB!AnP6sTxTjZyj~z zZIZdHTab5fkk(tgEy#P5zb(jnn!SBkkoP=)TacF#3!&wH{jebK%>jK5chkU;$4ts^gK1Ousm zThRC3o%j+Id|1%;S$fI01$|+^iXXf!>6^bT==&{9W8u@U9~JZ+q?c&-Q9)nVWxg%w z%K+r?!P|nq40R44ye;XQzb)vy{4CVuTzFK_cR87|BLG5=9~Z=xFa>=H0zEE>dw6m5At(}fTM+jtU#GeSan(K& z(ohk2L0_C_##xBB1%0p2C52l+M?v4=`%5I>h=VHVo6KJ1y2p;bu;ICvpms1|5fqAg zY9j*MVr(fBB>X}fWWj>)49W-}ye$Y%_iOjIAiSIrM95zkgonK?e){#-p74yGzqm%g z8*-H_pxhxMNN~0XwH}v%S+*#qPezy^22cPhc;tjJJE;=|rN6x!-VsY*7nHuf8+b(C zmSo1^MyQRtC7E-`1(~n!hQ&c37i7M^AK=PcPiBml$NS-fc0FbB)>Y+*3Ua!td|Qwc zwwd_B+k%`tmkF=?^;$vB-@uy51PA=!Z9#>j(Ywegcw5X>92mwA-nzMp0RdY4;H4uV zU*sZxwluw*~D^ zhByvMbqm_zu;(3b`Q`_83)fnV7oG&e4dLe0Ib4v_&d?)A9m3^X zJwTQ&Ir8Y+aQZB7OZq^d@K!T|MzbY-7Ub|Zv|G^UaDhj$!!bLKx&?g>7mi26Q%3m6 z+k!q@6709W$+tkpdV>VtNJYLyXkd=z!-cD0SL4fK_8cw@Ff+9_-sZFCZ~>-Cdykin zK!QiSH2WD|=Jav$i~Y^%h}0P^*j z*XHYuoIclQ$q2@}If0JC1_Q10ZI0(7XQkxZ9MQ>fOY0VBPD+@*c6jC_61Q6$Ghus7 zL)U;i-eh!$93+Qh&TgVty?X^0tdJu=xua@p#pIAPN7Qm3{K6Hev6tGV@s*SJD9l1R zr38|b`&K9?m=s!djVYv@ZkXph0`MO;=MaHD!K}*QTi+`d$_I~0<_i!a3po)DNXY8L z!%~KG*#~y#zUw!s5))R1G61yH&-)#+6viSfQyeP5uWW_@YhwvesoI_9s*;w}+E6QN!PYxGoMTG({iMV<6e<H-SzvJZDjs$@%^W zx6Md$i~}TP6nVrlIezp=QlV&bER(MmR~PTz!J8bxv=b9+EaT<|@B^o8q!lUQQ8ErkEFU-sB6htzurBPjDucMuyD%D3i|%%w{-smSysJfeA=Bj{1aC%nOB+m+^)~ zj9u`2dhzbU)9Yc*8^`oAMfNo+fe_cA2HNsQMZi()!EG1UpXzL8nVdJQ%+2TsC-L%O znVdIn;1PF0?fNowh-Gr#urjAZq?$``^7-W>X;Yb;rsQo#+J=^NTsci?(e$IzGC579 zj2o4f$!YpDZwO6tTsciy#4QF^Ca3A~;p0O10**I{kfti<#ho#XeHmWZelBz29cMS- z;y}?aynw@X7xFow2Yp^H)?M*nq(uteR;jI=rc4$lc`LFqIZX#lA(j`jH7rb3=7RG#tsXATIzvWz1P5HNo4&LX5V%j7hnH);Ms8SnZ)I7~8|eOShk zgk^4?WhJCPr5nW9AG=6#0&?pkM?d!GNwH8tk+DDCiG>P^=;=d&$I?aORLE8qDk##t zkDeXRg&bHi-!hUSEBPWRaTsngDVE%%!}z)QNtUySPr}J5%S9|-xmYHrEHwj)Z)$ZK znS(Ok^MP%>PqsmAj%9Mne%nS5?*#!kr>$@tVNvF$wTz=H%DngXlt5PR7r`>mB4X?d z`|Rc!%ajaDS`@PP9Ve$UIsd$G6AgtQ zg_bFp)w@%0?9LjT+RFLo{b`G=TFv=K%M@)Do2vJx>1;5zRcxx>x5>p~Q>A6fwsQV? z@6Iq&Tb_T+Pd4}0{ty2}AODB{-Cl=(7A*Savk+braxF*O08Y{@DlGkAoTH#Dt!sPYtU_jxS|;UZ?HS3kWte;NXrasV^yiuL?y2$IT1 zEEJj6uo%~+)8YUh&rp*`dA~2$>cYf$cJN2+Q@?~~#RG`zdvxl%7)xB7`P0TqA)>By zRIkdg)DT?!yA)!1xbQ_0P^rheDlMB3Qb;n+TX_H&1C#Z@*}?^$;Edw8ZGi8JYqlPV zNLM#CH~>%)~iiE-`(8VT-(Wb$uyq z>gzgPMP(ky6+-}HR*MiQYw`A=vxN9qBq!n+nWgmo@aRsJ@^)Zo?Iea8F0~WVgV!^n zp1qb zK*f@pcvxyt9YJuL^jQAL(^gy;{M;ON9;X38x4P1w0R&*guE@73xj2PuF8yHc%GC-EauN6y*wub9^w^qWEff*Xd!9)K8J}O zfnf`jQ3%p-%z}gU5T0%EbrN8QD8a1UU5#S2A`--goWog>paWXG*y|0XwnN;2G#l6| zYuYA<5?PC{TJgZ^v&uiPQPDGLR@sMIR^kt47Jj6Kk@sO1*vDFuDI#VSUDu)rotse- zhoyoxIY6CR*l>&(T@N;+7&!C~hPXeIt@cvH_W1G|N!l0cF|_+L5p+D3<1@yu z>r;k#BWW#y3xRx$2?-Fd$GDC4ihffEIBpo@I2Jh|A8u-QZDN#~S*-zcodQmBz)Vb0`g0( zRLq_w#U@O(Y&8Tu$ zssf7JPMEk!aNos#Q>In2Hfxw{<^ZAWNwRmhQ|IBInTBfVK}7Y&AEpM?#P5u>C0I*W za9}B=8Kuuz9FnRYjYO&B<+QNzjz6F&bLo-Umwu&83Q&=lr~iFi#2`1?hR->#O2NYQ z{lyx_-7EGElCHA!)?BGkHEYoM459ZhW%A~L8`!!bt*{~B)c}xd@1Vyb6dZN&i~dD$ zxnvl%nEGvqX=s*UBP9!qZK?uUIHjlpL0wB6Z;(JqHOZDiih7jP`AS_!>7!lunz|X* zcFlVfr3!2mq9@_sR<%XlpeoyHBBR3ZARZ|8Og2VGC>F6jCCc>6a$(1~SV0hKZjPrV zG~{p?;$#8lVA-cJ^DF)j>HG%QCgFeJ_J4x^nY^s!?tv4?e`L8k53%1zcO;G)wN&d@ zPK8`TRxI-Vp}AL8-|9{<^)e!)?1WY`pRIh5X%>s$bA}gl#agI0pTvY$^sl&QDh=0# z7f(#G#;a=dNnr9jd@$IlS)7>)}$>_d& zC0NQ&CT#ukuHA2IB3@Vb(b?tc@C;KIl)>G5$YOJRJQ|Gf0Ny#@^fbG#jtko*1BP#? z?KeQuaP(#g#ZoCtxbiqXu|-MbolR%bN_=bjp&`i+ZSqPoxmBSnDznRqOQE79wYfz_ zi%RFsU2$aA=jkn4n#aXzb^eNA=rF=2qeBS+8c-yR1u3mqULKoMk>PiM)dwmV-ddJr z%NvEwLrf6x3?99hf)sn<#!TEmqVrOUhifq4hNJ=8!y}Z}i)^Hwy(b|8TOjS?XBMH2 zO#&Q$Q9%O1rJL$cAWNQ}k4+>z8g_$u0;Dm|qxsry*hF>-$^0N1W?eB+VeGFta8jT5qvKw3mwMA;e`USGtw$w!b^9V00d)`iFXi(^OpMd%QpzyO*5eaN@f(lVbzP_U$YM<@!uBTR-* z9`Nt-k$fNUZ}sq4en>NLWr(kR1w`QBxjw;V3sON_kQWBRw;O~KXpchJx7z@MJGog zSqLu|#*;s7zyw64f0?|9w-QKJEW&UXH<6B@p;@ML`}M#5&-ysz9SP>^&-!xzCDOc1 z{-Hl$3NG{+=iXSV5i~KW{|<9oqA=*dfWz5gdHuV*M4kHYkg^qDNde_5wAYBikwxvgRBvBGP%%BP(<)EYi3p}j<>dmf9 zYxEpr(2_{V2LT9qzyZUBt-U7d!*Hy3(CQeh0j8~gvxl=5+^t)oN7lc_sg`s=v(ibp zLvYE2Y}KhwKw;F((FNSOpI<<`mMmXtS~V<94w1+5`Y^{)hGo05{um$G`0+lRh!gD& z(ZL(J6$(=Y$aT5LAZpcLQR7iNRm7A)Xm14t+b;nLx|Bf7}U-}LS@+4kv6S8>;s-*1o!v|;!Q2pho1va1q)cqeV15@%F7|S{+kPi z)n{)c4%k;Q|%!c=lXv27515oB&e^Bo+2^w)i`@HIJ_*LoL?PfB@PkZ zg_#mb@YU53QZO~3509QA5W>U4ldGdYU0o(<`s5^kf*pbbK5PYkGI)A|{ho&|kB*RR z$yGkV;(A^s1`wu?9e+94g#(w|Zj_3w)=bV5?oK)x7%MvKu_Q%_0E-mS4#$Ca5bjB>q``^U{lWF_!7(==UO?uKK;1_ zQVa$_Sjqu`D@O+8=zLhfK)#8r1cp22dCX z5=DQt#B)~y2h6TF;DQsha)q1FQ+MD<>x!HV#wV8r1>yeMR$|!$Y4k*ZtW=a{Du?74 z3Cp%$GN4}L)2n|^$toF-9@hx0gC+;hinOwXVmm*rqd4;*u~>!t4`rFUMwz|cSVok> zHc*>?y^lzO2x_wp6v`~8G6W@th2_LWf7o~lfhnKJS-UTHdh6?ZeE7CrzaERj-@0A} z&s)ieeSqaBtFyCdb#^G$Hg!3-@>rCb<#&DgUAaj;7MJol_#Iz-=i&xNpi~^{Uf!Ga zJ))W;$a-F{V`+N_sl{u@P$_R>S1RF-M2^7sC{}YdxPtXIc6xi8`)_uD#Rw|A*nYDQ zL^U37y{=Z;o+1tO)&>t`AEIN@J^1Up_IONm#2IuM3hC{GUzddjS)o-KXrmBJX%5l@ zDfFm>G}JQ+f}WZ@lBNgl%ieYG;>e zyc?U(-~5namxqu&yXzFo-@z|Hr0lG@UzN=}ECTR|r;T$m9MZ|y|VJ?mx z6c2^~Y+hLE2qYO2-DKI=e6jZC)qW57-rwDR)%$5@kA|g){*BGwZ>?|kHa7Rxcei%- zw|9H5HedTywOL^QZ+13km*{Q3c!4DvmWU~B0r>i>wY|Mi_|de&=z1szy*@&H{^r$> z9NvqqAIf2Tol3oY^BiwwtkNQI9U;8l?&-70uRJxoz7%JA-fxP}Td0mSVomh^J-$YK zBCkKKQY~Dzt&vGmMQSZcEnKIG^!O4zrUhCU_z2e&NLW+LyFq*x_?q_+FGYsoujTC5 zO8kYBwef-6fRNaia|v740L*4@{B08e(HYR#kZSYqzHh~C z@7OHv`t#xpb+Dh(25fWHtikSMFE9jb^k{s=;>Avjp7Ejku>oqX971nN8?en#X9J=5 za#q~bd)I*VClp`Fip%0!xAX_W-_SD0y*0ESYEY%*Z+;pLXz}NG<%{z-KaJvHKd8mS zFIWo8;>3^GVn%RKKKRhX2^kLLHhOCt8(7%)^h5$Tg)28V_k6G;ZSZ;sxaDkafD~dZ zmBPruLf|MM78EwjuDb%kxKb;*VtLqCPA=Qa>#Jt@tM2l6Rg@12LR$KxuY7sg7rO<^E|nzUblN@7@6< zeQ)@FfSl6|(ft`M1D2cxO4rmw2CyN%;J8ws-hp)c{BtR#m@y|B6ftg?RwU3ZhZ1^a zsuwN3rjCl%hCWG$Ol7sRo|sO*%JoNhZ|Y&tlmbzx;7$pZFA%PJ+k?uFPW)8*UQM1QBHN@r>G%VD2fu>@*IDPSB7p6MTRER*;epWN!iS`$g+hZaSr{x&?KPH zmzqS>yH%5rH3G#lRYDaks?|}IXfHxdy(rS6N|?9e#pFQw7=Rj&Y#_RQK&Q$A=t%jf><{)1#c0reYc)>T7RZIS z->;y4-){#Y>jHDa$`%=2BZAW0O4@449HCE&P}h^j@Y2M$IcY>_!A?#X)oVSiKvtd$ zi2g`lAhR%^40r@z=|2d+5>Fa+RsX}m_#C%M!EZ^*=&nrDX<{m+oxgaU=wgJ7!B#js zMP?H?KK~PCcT`}}2e{hXF2Ypzp!t4@1Z|i#sk20q34A05qeU8*uA*}O%&^lsh`i)H zgX!4#R5tU%^l9xYC@JcX?`!^ST3_>$x9qDik+cs@qs3M%rp<}RZm?Ctz zoaU$wKlNTac?;w}!_C7WDA=r>?y|mvKcGGpHSZ{&6$osL_$%F!%0okf9H1Xu9g5>+r`Pn)OKN+hGqL&Y&AHi zYag_l*8QLxjdL^$7!Ix->%rTEiY?V5P#3>I^JkFbA<3{ieGmGP$XYEor7_0B)38`dB0Ld}-f}S%mB8!_n>fa40C~>chto(T3Ls zx;UsorT}IV1oC-R0gfSsQ$b=JB_a`@zSW=`x(3!qmo*O0XjXp3!{3)Q?}(C&rC$|5 zYF4wV$DOEduBR1W)PU-#P#3G$OO)1V|s) zC~pA>o&bcD0O^DI0g-Fnhk$&F^$1AIbfOZMZzB@L(HNHt+MTl-JGj*zp?UCAJ!;*H zNU(TtE!NF6x*#b7k^#^4G5aR_XomO4C$ zhjOmQ3Aylx!&zp|4RTmnGFynmlFm|%V!9z!_Qzh?&NI|(-BP&dX7Xui9kuUyUX#ZS z-bJRhdK$aV;u3`63ezmP$jD4y;p(FQkAST&3h81Dm3MM|3J2(9mQl-pbNx@odIG2=qmFFKq6y$U34D_C6*cR! z0HSf%5D$fJ3j*v25(v>#9JCZCT{vtMt?}jnW-~ZB^%z*t`_rQ1KWwQ-XG0u95>G)( zG5mza6i2R7`kJaobfuT}EtSczM%CBpvah#gJtsee9=YP~>teMAQ*zq}*#Q{$j`1KH z1V+SiP=$MpisBo(p(@UnT9R%P;#(x^K&lV0VCyG!O-F0y6FqywZ9F%+89?(w9~B|8 zQ03qe8))C@}Zo&sFPF}Crwff62OVJ zZ3>|=GD}(w80Z(nWV&Hs9Pq$8L*x|Vha{*OA?9>6?@PB)U&Cm+A%qP#JkQQ2 zh`5$R6%Qc<(R6@#i`dE2pAn>)Rp$nYJrFc77O0~(2@3nx%$PRZ}K{Mb|XE?Hd5DUs(WzAbsu@`|~z6Q|gqDZ_#DVpoUOG^OAD$=zX zdT8bQgjKWa1MzV(9Q;i456prBX;N)$S6Rmm4^V)!&)XV)t)V8HM4e3Ai%d{1D{_YoR+a&k_YYxl={gQ@&ok3|Se(Q_s%Z+Ws6>D}PxjD) zb9^UzhSIL2z>*~g>OH21I>ob|D-^(m*Zvj2x>f{SwAi~B3c^2Fl<+=oYV5L|N5{zZ zKnql+ib0j|we%RuKY3g4ZteZ}1W{s;49>A0%PFyae0p&+;Y}tU3|sLqRNbY4pnU#~ z1wO-Ye#!ZVVDm5Pt=H?X-fV1cfU?2hIf0gf#Ug|fgc%463jL?4A42=}O>&UfAp{K= z898qIS*Q{87{SB4so&R7GA`2i#<>QGTF6FmJr;cu3=;fyqjOVNC)qD&c#vgQeDnqbTjj@gI->G@gnd) z|NU1oa;^oO)SA4ymC=FZJ-G;A3(4NzCl-L9i&L}U`gy9jDNq!Tb0EZ{mdF&dYUdnS z)!S&&^q|5kq6VtZn>|FFzk@04q<)0}?`z(w!?YduE15VV26fJ2N5?yxvauI@Y3olu z$LYFz%Snjw7gMN|yO<6Z>}nzjRa8V_(~O<`3nW!v>lzhxb53H`Iq=K?Dn zE>g$o!Bm1fgoEZY#80G4yc(9e58|6xI=%<~LUrOy#vUFJo{uQYRzOlBET@LkY3q9q zsNCmyq9iEyoT3E!wM2L(=Zj~EN|P(tD*vnvlWot83yjkdFIw|ICZR8bN;4d^Y5{=N zU}Gr6V!2ffjLHc%gd4+OG~7!9VZEDHnLMo7{b)r?~Uc!D>6VL{%A9(h-91B~DhThK=P`HwJp4 zdZBKz;k83>CYuY)iOJJaGWlvw#|A`kh752J1A#Tso9NTV+gGqSM)K^zcof*$f`YNb z<&1!;>?TGzfRJw~4r0@0AO<0!iRFOPFeu|}TH0m}Q8pl*Ovhhon~yEoQkM}Xrs~FM2F2^^eQkgJCH(osw1RAL zf=3f6l0MF49P^%!FR;IXO+w0W8_NAoF-K%h2{NbHIg}rQbbTELjj>-TTfi(D*#a}M zXd}nv+^k$LeD~AE(Tj~m9GfJJwthp#S>8>5P)mgx2SV4#Po~M`H(xzp%X?skP)#Zk zXCPTqEF-*wRPqbO;mNGZ<`WWCf^Lmj2698TNm3@s#K$QpmRZH1Oe^`5QT#SW(!3XH z(k{EfgDbhw*Ez_sPikQmyIW9Qf(VQzG%}rYhlH5!{posy88z%7Nh&{Y>$M55GzG;$ zb{vP?zy*i6h9wBH<_O|rstvAc%HfixFfoiT0Fk!rlq+KQr7$w`_46EQ8oR$op1^PZi>3wq=6}@I}ltIL4EDym~%PObrH#X3%3jRZ6`QuLmAeqL zScw~b%P|_jl!Hg2a}f!xEok9IlT}lS1mO|&crjgw8If#`gZHBki_OLx>{IfsX#Fc{ z=wtI`?`HzA0$}88oUQ0*ZXi}UOri)2GDp&zT4UPTb7o&MFmqINk4z-OGEy6}$V>(TlXY zQ1oA_t6wK!yUEFpCr-~juGp!L=EH3HXd>nSBI(#2UHeJIkaZ8%`uBzl< zjB@K|#t>wCu!!t`a!{oUQVX1Upcp9bVHhvn0!1Fp099~vLWu?((7iurWc83#4pa}z zvJPSk@+z|H>0T11bu)1uj{v5z9HUk>)KiZ3JUSEw_C9ISI&||I*7BVt ziOvuxw&pY24TLRA7fdsjX=8`V9kr;}nPk(NjdNCqX*q4Rb68Ch;HfO%V>9q5j9Vrp zLH#**Nq&3Rr!Q@{tgOzjQ{0cWdduI~9U9cUsBjT1sws$G<3Xip8ZDw652d=rDrXV`j zUTikp;F(xhoaW)Z9R7vdb?9JFEF0r&RMry)j0}r9PhZh}44;kSejV7jyBPh6IP$1@ z7bjBQVuG8UBn2UEDN2dkoV*gT z*g#@>(CD)tZ(%}1c)52C0V1CYa-k}b{8Q+@_#~^ju3^@HEywfwYp-76{IDdvj)B@u z^#IAQ)vXbng=4+%+oXVKZhm4VN;nto(AXHV zsw?c{6kzjZv;cf-an<2?bae$+92lK9w$F#KtqiY+_iKbw!yrsI|NFYSIbKuW#Pk4q zN$#ymqcX0tdq;OR28dV)O>;2i6W8Bak=CKAt5Qm_LVSlB9xEm}0{fbO?G zYM6+lGsIo!9k;L&<18l4CXpTDd8a;Oia#^9G(>IcB>7k^B%#%gf0Gqf6!+4)*jmeu z*Q2TsUGv20u-s5|8>CAG!3>7aL?|GA0m0Gajl>q2$y+-WdOp*h4WT|dhga(rcR`92 zu|SL9%1ojG@Z}X%ZB2mV|Ub!8%>Vb1P6A^sZIZ%cO?O#y1u2B#54z^Z`ox z==!V8wcVF%ul8STuI<0sWeR)E)Q%%2B!Iv)h)+0`sOf7;3}|~ye-qS0I-N;uRqq%U zeFSWBkN`mgM(MCQ5>x%{v|=Mi1rKP80l`-cT)rcWW#zrmL%lA7acJF3DJs#TYrxb5dm9 zkD-Y+PqOgN5j6oVG4hFqgubT!fsZsSK|>3Vly&4iGslt$T6%=6Q~VKntWG7jaa>x`-Ymuk8faH<|M*2Mno03o6=J*-jf1eAPdZ$J zsc#m|WE03*YD_S=|0h*24S^!UGmq}GA?wHbog!rj9;kF3^lQ4*|1ImR!y8!JxyT)V!{?Nq*N}ueNX}*od@A*&{pe$C{ocPbJs^42e7ldi4T!C@Z z)Sr`AQ$HG~!gE3pqS$FXd!a^AJAU<(Qod)b7q%Gi*y0>9dHjT1b~%@}E-}bC$VKML z50lCZESuMyE@3jqLtB*+x)BJdo)673wt~wg41j{~VLHDJQ0?Da0H^Q_2hpHkc25m& zIfWpWOh>`wtA^u{&Ln%K)?j@_-v)T(hFY4#NnephcqOCCTjX^X86844qa9WJ_OSrS z1@^oXbsOH!dNXPcTv0-(1b6x3hOL+eN&F{Hga^uH}wIqvDOP}~Am@Fj4}oO;;8 zggFbgphq61QZj)X2S%~p?4AOLZnsDRcPW3jh2;(Va#*0t1N)|+;NMAy96v{};gl^Y z*MU@wN@)*qmBor{0ZTSm?2P7{4swH`Tw(JH*5dp1U(pC8_8;6t0?Uvod?H3Lh2oN) z6dBKA<0@ALe*#4b%bxqqXz4RP4>6Q zK4$3&wJQikoY^3T4i7)3n-JZg(QHiB(9yO^lQbPLVT*IaeEwx6gZyukMVW}{77(q| zui&w?5G3w3hRgqnHYf2Rkz=Q5qT{hISlEtfY@PM`v@Sb9_|3`aG+Z`juI0_*ex?4_ z^`c>-@X%~&!?C{}xVw7z+Nf$tf|!s3hK+^n7%fi)WPkv{k`)qB(GX!a$7#9NaXu41 zDK8AKjt0V71|QS0W4UoS#1MdQ&J|Q6XU#rsaaB}BfRilG1mYPB4m8BxE-Ol!{uxj!^p4ej)r7$+ES8ivy-3LprkeKf<)xo(ibwzymzj>-YNNQs*h2L9@+riB)c zlA6o2O%$Nzw>;F4OYPL{8c{acY%8__#4l_!ynk$PRXxJCn@sg6oUrRQJPgPgad?0s zS})Q9w6US|1eMuqrQu@&T-c%9(Oke?udm&SQNXF>=P2!uKR8BrvHK_mogL0~RZ zXp0WxYyCHIW5HUC^#Pmd(;5vuIIM?fNF{K8Qa^wIq?m$K)pmfp>LFB5F-uC7n~b%3WW<&vXu})P{x+@hM{PykVtbbg6v%2 zHL+_@@=HnLogtS+4%j9bS`P7PQoUYkqEOC&`dO)dvy^a;tYG1)O}RluSJ_1Aq(!$L zEyWdGz67B)&vV(}<~*YMNa&)r&T1lTo&#nB`E&rbnV1H|lQ1co79&9dQFUl9)bwHl zZGvcnxPXQr6F-SDqC9S8rk(EELB()^}Gpe5F*0jGqOeF zVX)H2Qp$vlay)ZvJj9Wf#e~J`96EWHciV@~NOTd7h{A7}{zpgGvr0@5hgO`>;M!uBB8}?=U_G(-zDm}B2j1={IdR5ZV##!3b|r! znrtxfUu;%ddP%%_c~X#71z*bcq+G_o^9?VUH&Q+MHl;EUx-F6^u#8r1t06`64zqAp zRLeM~bl~KjK?OfJN;{HF2EM>`az6B;*5|$H}Fn}hkT${ zus3%Q7W#7lRB%o8Yms&i;!LIO9Q9`s7ch)Q^H5hJGjlSE#wLF}V$Br>s=un*IqeG` zm7lR6IJ-^@T3bmx3p9;~2;Wp1o14e){-^&-pZ=%+BS!A(7m43R#5*#w=mV(2_=yXD zHILZ&!5MOZiMAV`aXE(8JUpi#BQpIV2j>^{U0VcugW>5ZenX+Sgm=*gEWAZQT3H&U zkl9edAx$h(j7d@pf}{KR&mrW{7GrLOE9bBf3_zb@Iy^Zyq_#1qdzJKr;@{qTu)_g#QTS;+%K2vA~bTJAH z!xzIHuvp`w`Fj20>{60~H%m6RA*ci=%5dTH7d5lNoPCJ!6T`4YO&uoRh@~JHz^ed* zG}M}A$ z{`!oWS{~O(A&qO6>K*u4ZtmB6TYtL=-%@P$$2?Ib^ECWX(LLrLpdrCB$p#x6G`iN@ zFpp`r57ZZQq#>s6N!RW)6MvA!y9v;a*wC2Bm~W6i7@o6|l0kDpB~P%E%gdWFIf-SK zrj-#3mqJ=qDE#XoAwjP|T8rtvPyl6p8K~S$Q>Jj7cbYGQ7zBmW??3GKmtz7eSLXWg zXd-YP!<4Z7dT)R2^?u!w7^zxX_V3GtL$44i^0k8iP%pNA=xuE7t?zE_>?3zCOTaD? z+vvUs3t}#oYEMx#yM*QYfe-H#PyoLEYHcqh2dW-TD@;b%e({37Vqd3n5EU4tU_(Gb z48;atZ};q3*at}f7DbZo+4z&0#oW)8^z-s!`SP7#fsk)P5(jUKTeE)u;o{;bC1}VT z?O63K=H=mstKmc@n!K(r<(xKE8k~f*lGfN;h-y}n``ut4gyy3vU$rItvA&58?{2L< zf3;c1#7iyj;w5I)sq_iK)Ud)y=$@!)En(mrC;aTIJw^~nG#_m%5Yd->}Km=`@L>vTKpLA>UdBDiS59A zQU7Lu{`8na1WQ^Y`6hTaCYPI@j<=-&IZ$vA8jaOpsbDS*c^^$tNKW&z2F@(ifZYNb zKw49%wzkk!c%Fvf%8zuVT>r~{>zi3Hh_kHyMh_b$W`S%^soB!QM&8Xf$j*)=U30(N zinrV_5gz5mGyW6nIJRY?9YX%s$X=t`8(rJQN=d<(a(+UCEcWqkdqmI{Dp!mP+jp;ar5*b*>CVMe3>ivPY zicafMsCA;f(^@3!#GPNS+Yw`}ofZNMrn?bs3R#Y}*kc-#KQX4KcUfagr!a;oez)i^ zeDePy)|lR5Tj(JJ&}p+DbuqOmw#~k0^;%KR1n^cW=A2#40nN?ptplPEBe%Q7A-1Ru zbEi!A(FWfKMLX}#omyNNGWLnNs}rtr*c_X9f@Re{W@Hdg+%|?Zn~fZ?9BWtyh9a0e z)7kAvXaoHAyXXdsHdJu!$rvbtf?D0y5WTtbU1*6 zY3x)cHN{?y%KM%@aMQYH{?0D?Wzf7zN z(qbRy##pRT60?o);DRnb`6RRl{H6Yi8Or4=T&_Pi-U}^fLj(WsFrlk*60ftGFau>9 zV{x9i2o%XkX_plQ&|pcS^yi;b^IF$*qz3Fsof1-lQ!G(wM^al0dTC|wGP@`CcoeHC zbticdRuXUT%BG+EXlDEj>`OHmawRC;k-)*cltRf}_6l3*)LyT-O|Hu66s8uJ$EpB1rf?TWGuqX+Ur@9u8z-no-5vn?}2N827o zZQR%ul0FsXT-Vg_!pOmARrs zq1O=10}KV4mSZt1b|j*fcfrUR(ES1l3*bHrByiR%w>a81T2N6UE>)aanq((2KjaiI zg4qMCwIhuSHIKCp`>E_iAnYOEc(E3TD-u-9QTOlD>5UW7NlIZORrcV+Z`Z-MZ5cw} zG6@Zdz{aEv*%Kkn2E6wg<5Z_H4(D9F8-XC*WUysSaAXCz(=sIIgvQMQyA_oo%sOas z=(A%_826fXP2;rLSG) zP;@~^oi!mF$7e7KN&pj^c#U))2Rv699m!#dwlNJjLOlO^Yd@@O9#aqEtk(2YxQk12 zQS($F@B0XLPo_P!9HjY?M^wMU`jyuu;;NzsSVZAP17rQQkETzfQc;8wZ-B1X3YN{*RS~2ZJ zK}mf}Xij!z)f^5peb%n1U{-i!&ZtHauf>doil9-Z$VD#hj+(Yvensy`jDB(fmq`^< zl(GT?tz}3c{got27P-Q8htkO|>}Xko zve)hk3hp6$6BzP`!ej2wf~;m9YEX-KO&c<9X6MJ*p=CG?h1e^5Ch{KZ19mhMt`$uo zUjRn1NIH#<-BZ8sX|gkcD&s6~Y*BA&zNdn#vUk>n=yV$zU>y2fI|1W5|bBNQNrZIC9*cbZ~xs4BYzy z$ISveW26kuOCeHMZ|_K8q}1MUJi^7Gz+bUEEs5=a?QU3@X)eZQJc0>L4ZXC`WuhlESgrDNDlFgc?%I#kxE?ucJW3)x9ba{$kgm(ld zVcG$?so6AFKd!Nkw&t43pQ6RGp=@e@Tm!X?sRZ1d;L9*na}nZ>)*?@!;#fpUl4P9f za+zDOf7PL)&u+SYV{tHvjzW2Cgs zw8ZZ7{1)|iN?}f|G<$*>0&STZHcLn5cFgOSsvsvCv|WU>EZ5bP6_fB4yA^WWT?{Tx z3(4sOc~)w2eJF@3io1oOy?Cg^O;Fs^czrwQMS87w+SRvhZp61pw>V)RnYKq$cLy_| zaj&$X3*uuWN9ySgHZFzss<~E%Rhd_B;GVgBW$s*aANL>qdQC_ti~d7U?5*!@_11Th z)oHV3v+0-e$8qUfJ!E3U@OfMR9qOLc)(>+la<~XlR`|)%*8M-h37Ivp}@6gQV-6oz&+N_h)+x5f& zN75Hq`;#Sx1_;_>M8ZgFrx1bn<(D`OAM0$0n-&q&@(1yq(GezGpqp@kd(ZVC_(04G zxV30Fxx|frLs`mNpc=CsOj%2>+|=oUS^)6>35&tM)a;dLr&yK3{Oq+h+h&59x7FUw_}~&M+O#!M z=9sL#K?#G0ldPn0uU)`Yhp*l-D8UV?Dl6$xR7k}30L)?Y{{*`q?&uXpSaif1)%2d# zcy1i{L^B{Q$JYK6-i2jNLVtsO@IfDJ*h!fdGb zHP>Q`KDCYmN1vZb`{__<@}OesFGc-&IMaocZqaYojrpNG9K zkI>Qrk~Y6ZGi29dQ|%i`d+KtB(r&Vv0j&g*?O{{TTDw%%ZERDuexvSUbE8VW*m}K> zw1RVOD^WDtrY5w;T@hCe+m>ly16tsm3k)+&m^v$Z5 zMCl|bYn6o?6b!o(LB>p!MbUfsfpIu0anshPu}kK$j0(EP5DwKstRF*5pkg+n%GZqqkub=nbk&S=hH*d>!o+1&=RtWR zFocV&nSRsP^bEigA50LXEA0)uGuedxqVhr+H^5~hk{;nl62j7EnDz$=HjEHwz${aa zy)yQ+q8o2^Jd?e#Tqw%3+Gq>T6zc(7x4PR?F7bsnGQi0J&x$1{e+ZW=?z_DIpY;Z-F2u|oo?Z-oj!z|OZaIXxfjNlezc6a5pSod66HU=bHnUc-%m^n^~) z3_a279bPkH$w#EfCWPI<$7pi!z8B)K5rV{5MhL=|ZcAzX!v*#D;QADvst*wJ^qkQ% zi&c+F+#EdV77y-1O(eI$rRGB- zR$iJpx<0#%ww;Fz($+GV?{DE7ae-TwB?#0mBEb4#DcAbnRhIvZCX6KpJ~4w{nqE-S zJ;&G3vY}EaLOJjAnU-n~FOekcbaFB}=EW$L3r~=3YA6(T~SDNa8|?^ zgkl@Qn3{Y#zKY?7pL60Z^)FP+{%s&nG!s%p?G_Oip%yJ3@T{SS3h7d>@BN_-8A;mK z8;NT^DGojX0ve--x(e1=H)%1s9&qhGzCLYH41{Yrn}RMEYMIL$?3cg|Jz(Fpgfpv{ zVRhB*kZH}gY%s*`280iWqhF{&@B&2mnJEbXU3|_8hW`H@HMW1Ohm>G&9}%`AR$B+| zcy6Hbm&!5(qOJxcEUNB_)>G8`hx_Wf}r|Z%9LkNF?sAR~*1ioQV zLF{GNNP&YmVWa8LUN;F+F1`U!Xa!CIP( z<_(u*@dRT_F})fr34#`d9a;)YqAA5?AH@qZNV|}ByyZsY> z#u^B|58$?U_P5s8Uip{wbJMnVH#d6HUaT40+J$(4h^VtRDgOAM*8aX;_@cg#VF;bvv-A{wm9T_wnht9tO;xlNRmy&rh-3K>;((QKyw zRC7U=ol|e}s~4>LVwU%lc0B4My}v}u32|zH{Qy1cbV_;9Z1;hw&>sg}Gx-23=;>3+{_!uvBb>$F zX)r$cVax?Ce&(F1kIT(f=j4PV0WuD+Avwy{e%BNgCF)lE5GdYc2rlcAkVjJ!DoYgG zyMkg%@V06Zs3j!eNF@7{x<5$t|40fs+PAb5$$>98Dm*$=J6t)d`g2o3l^rHKBBx<3 z!0Peze6HUB*5dy%O{>wsA)Vki{G+Uq^7|FE{T{{)WkIoETa&>W_Du{f~)tDQ+RVG$S|D+iPz9DGlZ z(5rPDqZ?aJ3PuenSBRpkUh;6V_y z2KH2`$cIf@2+JuWr46^PXt=Ud(jd{=kXAHYo0p#BT3VY((niY;wISnR(rXcN8B{0L zP`ZH7wXS)6k&-G?6*KSw$?4y+uADZMQVv~d*93QIi@*i~XresB0dv@~pMGc}{PuG; z>wI&@VsnoGs}L%cD*+u#id3Qce<@3p!}pxXj;I6kC0t{Il3}DjZeb}}le)}HhQ0LN zk62U`{3ph-^sx=M@Spjwf!bEQqAyd?`j;S;us=CYFD^@zh656Hck{oHhs(_Se76Ff zdNLgT4CEsnU+H9z8dO$j-^`gDsEdOFv|FWhrm6s+# z0PYc_SW%u3AeNSk`t)G@4g&5ASuyU{5(s~vyDF?|awl&W-1`K&NU-A9s3#P0X6P5h zUk!(h4IlKDmLEMp?k}{p^mrv2>^Mm5UF-$I5;Y9a`g6C*+g!7;r@0dSnNWxfP-hSf7=pj>vhmqhe2k_6}XC;7g zjPXe!`CYioD>_BnQ8 ziem6<=>%~y<|0-(DCdZUa`KuqfdYz5n(0{d3^#Bb=zbM{uf`uBgwGCs9`@V|aI$De z&@wXaRQCe(nLD)oyS)YQzAby`=y`u4NJf5abnnWfp7g2Rd-XI7V@{ z6!q57V-Jq4`Z(vd1dcC#3wf1W3Z`by>wqMt~o3yOr0RC6$ z(+ZQkhCZ#Yy(T`yTx9s^)o)(^_!eyG+d3&JXI$=nT#cOMSfmQl{y`caPx*VP^-4x!71lptpPn)gAb0G zMD&Zu^GLNjI)k=wpXsEz{$7no!wLQk@fp+%?(=FMShy;+!TR6f-1$Pa3E&T(FiXBjHX1%| z|G3^l37`)|ivflWiuM)EjoqjWC17z?n|ggeK1w$4Uym-7Mu9GpTRFyK5wny>#3~-H zYB&{8_T|ez^dt`AOJt|n*j|^5goI8ayt}9k(@a)ctTQ6za!dyd!<`dp+oJpvS_M); zfe-RYI781W5`E))b_O4PAKUppzHd(QG~H!1$|9)wJ(V3}5l%Kv9Y(wB^4qXU32Usj zTo?-d7BL>cszmo-Y3ijhh>XMz|Ez664o6- zMcx$#iNqDimURoKMs@7h}22nMaAZkq^<2 zg0ZCN*u4RP+Z$8l^qF*AeQTI=D&H~2hJzQGLe`)yo!;2swN|6tI~qd3A`d$>O`Z0o z^@#EP75V@Osn0wt&$OuY>N~h)CAB_@`{a~Gu4$weE&;MYQ$GsZO`clw=#2kDxnW`C z0UrE}O)3KU3(c=;U_4L@|MFH-80%e^4~JL=aakK+Qn}U~^YR`iuAu{Izl&bPAC0c? z0lR!n!kr*N45e2R+=P8UmOvFH zp$@`oKwyv;1_LARwBvwy5cBCWiyczUVc~fw4z>&)4e>%=ZDT?V{^jYYmPz$T-3-x_NPVH9~sp2IOsh4(0#s zV*Fu7e>Y30&t>4fRNUSY7`*-ZH_vcz#fEM zg=|!iT4!`H5eM8%3X$aaFy>kPZqqFO9rnnlr!|hity!w9%KXl3O)AZ0~ejn%HNvZ07b|-tjWft`!`!iax zs9eJ7ZUqMMBgtKr#q5ILCj+>6z^R`7HApkd&S-|T&YHn4Qh$s4ZT;fy8NO88h=n&h)pTj7pB6>yCeBA z+N^DGe9SM@(&@=7UFqKtY*{emM6*T&lPsw0NokSgXb;X0PCxKopUI7F*O{LQ{Rakk z-yTHjyWrCe1%857^@vxjw66B-rrab)QvpSLJPeWL^+GgA%qrgIOjO!5>5`aax-68B z#s@5UIEZvPCg+wuu*X7f8t`VKA`d$0|GtqaN z-sYmsyUsB@u&Zxrg8XWj3y$z`X%0P;vi$|iixb;ii-9ufSeDSIrDq@4 zv4;ImH;#HK7GsXW5doJy3MdgkscSJFv86{`8Rau?*Is}0JODKrr4%TMu=**?b=zLi z#%HsW>$P1d&LH}RGBs^BKxoDeZtA7vFfWmfVDy6t2~r4KHuyTj`T_+J=Uu#21R8jQ zM!0la9Xz3eu}47^n@=VVQL@*?ehQjL{yzErAnYrvIY{wUV8gXj?5eO!Lv)Zhf70kx zsHs(|0T(>Ze~_iTo56TOfyf10D44RWq;x8?R{ta>f;^SIKDxTzkvKFEZ+JAl@0MI7 zckMR5QNI-?CRN2CriaNp-p~SKb$p34B6J*mb}P>loVMbEbr}Q}L}au&A0E+ZlpCr7 z<>K%z3NZD`xF2F0Vbk=>0m9y~FTlcPU*e+O*bn+%N=H4Av{huT9(KmJ8LQ?k8vq`! z-W*)w`XUiA81UZpC8N#cQYW76av2PalTZC^P|S>0)6d8Ql4fDc%Ato0DU znd{B}{=MqU|9)kf-kj20XdEZ3E7|sli?8kg7`z!@{rdMG&U3qAC}V52-GB(6($;T26(#EdLRjipxiTt95?_i*KBk14gb_Ub=u?;@|} z5A~C#N)wi=)`U~d;xgtaJ?jCJkK^c^5hqhVNG}X8EQm&Alj>usMCMR1*eFkF*+Eq* zJ?(@wg0?VDqbpdm*%()8w7U~hZ%%2ljUPL~3Pb~*Cjp)VINx@h|*0?9_w(Q-pQ zf4`Waz~i?u?(lN!by}CIxGoh&x|S|BQE`hVD|ROh4nznN4Yr(=7`@#5Y$5Hi&a_0} zzo6C7rZhm;0RDq8&r&6Z*kbUGD@?X7I zWjC@sP%{(Af70$@%@09=mS;wc8@~=N%5gWOL~J%sYn^7hi&D&sloFz|V1SinzQ!6_ z&dk@cl;n+cC$sjo%TdZ~FS1#O_8MjLWk28p{R_rxXDgVN^NU%$Vc&1j`*CDtHYhn> zwkEhEaJHw)t8KcpTb59Dtv0m|zTn6vaZcwHYQ#evcYTl}0&x;epexy0=lkw2|4-d- zfBC-_`)sRse>{u9bpuiykDQP>7Py zD*VMLiS!GXmD?}a*W&ld;6N@Ji4WL8$%K+32qtQF6bB6)LKTc5JNsGV4t*ta}7mPV{`8s*JSwv&LU63JiU>talt^HnV^tO-d!s1e^or zFl3iHpscRS{G0)0a5X-i3TA0(CK$r_2XyBjj)tfI05t^gsHmtaj-E;z1=D66-1vd1 z$$lZ$h4(T{hDYC5Hsblgyv0E+d@CJ@)d74m=LNt-k$DfGqK=1$7Z+EE6>Ld7ptl2C zI89?j*#r9YLQxoDVdd?4r_|1CxbGljnimN|_9BE(q>wU4R=N8JvkIJ@(cf^4xKpIK z5VjLI@<*(o-PPOQL@CKmsnS4EbWN5QDlgP~5TNVa+khGQD6%w985_*e-b{Lm1|{-` z74LzB_lTen!WgvARD9aE#u`*HHSx3>t?#g-8y}ocPD!n_STHXIM_ct*NwmM?_rFK7 zG)aSub?Je7dKjNRbWaEI=_B_PnVgup84w=3r^ER4YxndxK0RPd$Dg#HSv=Omd|VJboX=ryjq^pk!q| zevx0xo_hQuc+H*)ewmp}ez#67eF#en73&HayD-9~Fk7bA*julwWg!bD${bBRhy0rG zj)@9MSI|s9bbo3y`v-^BvJjL}d9w$y$5dm8L3gC;MTB@_e;1#6V*g!uip!!BvHw0k z^~8P~pL()>6Q6pr{x&}KWc|nZ)RXmh@u?^4{rJ>Ro3Hd~wIY;DDv{b@>h}_+qbigx zWro7HwOMKq4yq)7G+bF)S$c3tbv_z2tWBZN+xo>)wIZYghoJcKtm4bnicn6AugogG zQmqKtwD{_*;;Yq)&{K;)m{t5iwIYPp;*Vw(e^|kVEn?>Jtm2QVRbdT<{`IWlkE>M? z5L&!HtN7Q|s<4_he}EN* zI{>hECi`1z;nCar0-KaEQ8}sM*Q<4S7l~Xaf>i-l==Q43r$O--{XCK0Rwaq+<~>(! zdqM2Ykjr0=5x9B0fF~ZdHxgHjD_q*^gbuvbqoD(?VgG~>ec@g9(w8UKZb`blfPQ_lNE2SeE0vH(CVqL5b`+{iwi(A`XuIh90% zt_o8n14I;Nofa&n(;VEKMmdA8A9zV?Tf*vr-+$VUu)=DdW`J!7s|SAfY5T$If#)pS z4pt95XW4GBdf++BHiOkezZtR3R`t+xmhGjghkgRthN*h!*)8lN5>5Te zER*rzc2pkmI^z>SN&a;+kJ2DH!D$Yjf-_?q74Kq1?W2oxi!G=fjgqq- zFl`1>52>|UY_xi2!Q(S!r;J!0UGNAHJ6ck~X`(2K5r-_}1q-@vpUPR@UeOV6;9`YsydAxFy5 zaD3+u6Qb+YyBI2E5HC#X(0)^c!r53P9c0}6I=l&%_y8!?D8GRObel0rlIT(8=Lcmq z_j|@ld4}u(Bg@0!0^msz%tkHl+E=aDl`~c~%WDj$@`QTX#lw?en zDkw)))}z#u=B`1pJ351!4-i@ssVXVPPcE)OA20+Y6ym&xNJvv(Nyz~=+aE-;nGc1x zLEkc6@LSM_!DgsKOwq7j=?^X^^CJ!Y2qPu3!f2J%XPt0y^&*Z>u(mk$EzYsliHGaj zpvpnJ6Rwl2PH>q;+RI~bg)pNK8aVq|6-oo0>Vhpix@51e0KSjXVK&=Zc()TQ1hO(@f+dVGWf`3UOP7D*+TwM^tpqoo&;fuvc*_s0 z2sphxp@RYPslc=*esTsZ_vNG{6|YkMd3t$(jH4{4saSjhCs8ADXL0BgbE^=pxKpu{ z;eq&)`3H&Ga+)muY4Tot6UaiEh6q8Ux!>x)`$zRx{dfOe;kWusK(;yBS;48!nq>es z1%av$o&J$5LLWA=`;DXnK~Co@V$%K0g8^$9n7aDWU5Z`ob~Cig^)EPsGwF z)ZL2+7~Mc%^`{K(Z1kTzlr`gqFa2l~n9}dyC<*^vy+Qsjag{ub&TR9#O8yFtk{taA zs|)rZ%6T8-^odNV>BDImU4grtKCu)8PNsPEH9p4WGo%jCA-E`E4C|A6e?DI7KZJv; zdbncDdDmxne`3%d=le-iNzy9J+`aZhHW1merZgiIQHSvlc11g-ECOVr13C=3C_q)F zJAhY=oy~wMs#wm~S=N8RDzAsBOMTcmvb-I&MNe9h4=A|-m8s%C;7HY;)*V5P18-msYyirU;KDw4*_AA@Ugqvgi zMw6E1g3Q!9JXMb~a7A+sQK@Z!=-9&TwWhIX@FTrkV;90$f?O3z`3VX?@>3vX@!T;iw9C?dhPkFUksn@PU11aF!dz&O z^+l$J)|Bw_&>Bg1*b~Vag%Bfj0x{FrAJfhVNp=6d{H2;I-O3$D8~FY4rQ-F+ z&rAGDM%5G^@!2oPd4tSH2iTm-E6t|bkObIHVYgvcRhFr-dq?^tL?|8AzfCoNTOlL4 zT~TSEaA&vh36SZ);u^P8I`oKP%NGIuY3{m_2EvX_7iqif4w-|})t3qq-NTIq@WPZU zFtO#bYcP>Wn~~`))#YY~&>vm}asCbpI85^E$n}raf;a18XmrJ_PCB93d`_K^_!3D; zE1sMH2HVjD-2x6|!qj_fKlN65!&67cBzt(k6vrj$dj%R($qtyHNXtMa7Q`dKrDsp% zx8ld(m}#K#0&^0p`TF*2Uedm=fOz+Jk;}W3!B_Ywc1euKEZO^U%^9ZQHtS+SBloH&ZMy+MTy9b~J&x z;Yevr9B;B9?`lPoccq2AdDiEWxY^qd(yp9TD@NM9_*{g|tB59}+@swl^XNw05TJa| zyR!gZu3}A0lEVsE%=juiye*4lpu;>1*O9o)^=u4ju|*-n2-2NZ$b#MV@#Q5)@9qZ1`!kL?w1)%itO`@pX%#~FrscqM!_?mhb4J6m{gJn2VbbJB< zgGl8?N{7(tzLyI)$=Xg{iRxnzTj9|drVE8c+oEO5L5Hb`dP|Sto6-7V1VNt94eC24 z56(bNr}U*Wj|n^SN2c#J8=%-E#H7YQtzBq5G-Q%dkdyowKsi==YW+n5(!l$X20KsNgiaA}5zJ85nMJ8ZxF`#5^ijkT6LXGKf9g8S-eUkVYLv zmlo5KQ|pqWx#Ed%UKOkNG23GEwtmzEFfR@# z7pGWRTVKXJ^+rs%v#s2}zriync}1=FclE|2{N6l2+CJtjDA#AzSEtQ(M(4*Dt!+d? zQ3Ju}ZT;Y=B`fsNQ*S0NQxR52IGXGhT7V~I@53E#X{ z3^0xGdRFx3)Tz{l8RVf3B856{E@_cXgJ;#Fq1=K2AsKF<0U_acYcdS_E5fc8Ch$DQ z{@|ApZ#h5Vq3ch3&oTHb%~Zw(Gw-zIF|$>Wsj)Q2rtt_)-1v-xNJ%A&k@E_v^7F4@ z+}7uIvNP@Lsk%#+WAmI9iHLjRu?8|@=i^Wh!Zv-Zm013sOdG9{6^vEhLT2|4aX_YZ zaH~wXU)%hRiDl<3Tf_|{kAKXbE-(_V}26OFFZaWRY z0^*=qHY zC0x_N!1{Tc^c7id&9*J}LojtalrTk>$YGx>Q76z~yLxG^0Zl!NxQo4-~_cTm|hfnjcv=fkl zfK*|#IpFZguUJ(~?@lemo0%8q+-(IAwg<>|UJkW7R@V+LUta*DNVc^hG z#DE}9o?yF=4evaku;~}0TV~5o{Dgpwahc3wq2`8!+r1Vc6uBez0Da^3QFi_ga6!;a z07(m2e=rbVBPTCvaA977gA+Op)gbvCpa8~L6JEt*{$Qz80XBut(g1(YVzT} zj+Q%q)%Y8u3z8uW?=2Kfa;olg6*u{w+O{Aiqyzx95yrz?Y%n*1%*a=@<|NhXpI~hZ zfb^(H*12-#x36lUqT`(Qing{XlZOQ^UleVH(;`r@L`rnoTmt6!Z??1sC_0CVg|?V+ zoGj=I^2>LDfhAJ}Ze03t@QHZ4oVXOIXY}n*%gj^j(F3^ydHZEQUq5Vb#gdvq)iwapXW694N~@R~GocKxD%81b3re z!efN%ab7oL$}Zzj=!1+Pub=TF``<)FORWY2);FpLM8AiI5|B6R)Bv6Mt>>9poi@c)uLnaxN>lglGDIex!}slpl5?4U1dW)3tkWe9df|6 zEIyqaPrII+AyTSgzTbCGX{!R|(-McvO2!gq<_f`N!E#SM?rxs(_T`_b!@d&VE8hQg zA2C0YgNeq{E&ztqfdKfb))UuyAL`58AOa!-j8`^cG5}reCzR%}%A&wTf^=rYIH3Pl-ej1q9ssgOVaiQiU<^r_wOyZi zK;gS-7k8t%Ac}-}){;i;8LNl&BU?6r##Xz%l@0r?27SevE+|Z$cTP4Bra9RJbHnic zU^wI{`03~jhc(?^HcJ6tE&mo?HV5Y)=rTDvs+H1ul9+~JTw(4h9v-&s*bs%j1-9U9 zUXsMa(?+D3BaNkPizS2VbR6<6m)|)g37$sSF8o2m7U^zf9VyGF-<`;?t|>M+CNW@J zLgu*Reb_QL1Ev%`s`=V1C0ck8(N#Yzkg0#*HX=EnxT4@R)=p)>U{ts6Nf?S2VA_7~hJ+fyqW>V=lQN^+c-qG*S;L~1F@X`0Q^p=e5G z^g=C3#qys1nEudy=<_@S;Ns$5Qc6#kC$UJp41mF4Fc{1XmNL0m%8t20m0mi@cSlg1 zrjv{c7Df&h9XO>%31I&dqwI#UbPybgIbU2yB^fEV422)O{^Ww`jA(=R7~j zaqnco5BA#&=qBeqww>mgshvqU3n8GlU`E-nYy_VkFEve$Guh*~@kBbrtb^ttEXucs&TtP(qlFT)S zQc?CkspOTCf&| zBP&d}|KYh*T6mUtT9Tjeww#%zW~O5*)hrMf{I8{)4NQrSG%M_j;>@)XcpQw?u^m`r8YH19%jf_MuUf$(dl@Ha9g zpymLtM^GSi#++8t8wW9LHEad37%H>35W11sGT#53_X7I4LtFmO_3i|7ckQRbzR>u6 z!>+y-3?qldEZYGI0SZ*BGidKs25;xyo3%p65fiAp-+Ki|YJ99nzuoG+ZTH*z8QzRm zX)7Yp+lq91gRI|f?*9~kSrP0w9?D^RzjJa(5IqCp8rsQ={Lt+0|JdxeLp!d>v%E;> z;Gq4wd4R_La?(B?pgC(ucd^!&lP=;YHV1=tchKqKnL=OW&pDL+=AfCmgOl~xpzP*F z_70leH(Be4cFQBkihP|HdCQc3c6`)sbzXH^p)XXBJJhv$M?YoFyN zFs#GFW|yU`A#KSvqPM++lf!n#NqBY8`!N*J>nK*_uyYImM?ju66QF?jTwhMQZ@Rr7 zg%Gxmk2M4vO%Vkml#Z!VlwkmZkn#uA+N34DF9tta5EH2hKk2~;)jw#OZpE&J*S($_ zrNMXqS~FW97wfB#N(Q~(@iUb71`o9OV!l9j*ycnRp<${F+TO`=PIbPJ9~=AyU9o=q zxZQu-WP@z_)j_9~QxCLSuGpY?{3bhY4{(q^I7k~s&|X)p*=lCZ)}Zq?pj$25ND+`B zhE|yVs2KTz4WT?UQL%@o2a!vj)*F}@#1h2unt=lr{A)r#Tpns?n5XPzwo>kaxIkwV z7f?(!pmtoya2F0+j3v41LumuI_vnj?$^#!E`Lm5#*1&r>q$LjcYx=q&P#I7uVv{o^ zu7UjLukeAwFc9WLa1dY=MrI4x*ULbJn~-{j{b%V%HcEQVjzx`vgDIk?VN)i_NZp?Y z^D~m^RTWyGsufx%pWR)Ar~^{ZQW0NOxR~a!1kJK{$&({r1E}FW8g9sVjq9$ZidFRs zvGRZqn9L+vP^VQv{mpC-Zm^g2W7yvt975g91~L|JIkRNsm|FYGibm2TSSSv!Mu-`K z>r=Bi_vqA=QY)TEM*=s1J6rrgb-fXVXrV*iwcE`FMc7i!P29oB%N}A=75zdVFENlWrPlha9k7?A2k?E7v7L zFq;X)U|52&Ww^SWT){iMiU?9P6}xh|w`Q{fR)HDK_Gq)=NH{oU=MHci-b&vucV6Wf zKg4@|Vm!nRpGL5Ncq%84^EJ`5udi$Dl4Ap;Ep3wd-F2Zn6t(o6%H0_tvqj}A%Lc!N zY)55luAgFGQrt+8WndLMoC22_>xnai%Q}u1LO43$17xbiDZUL8&jZYCBy6xcj(#M=D|tZ?049*L=Im& z{FP@i;#i+s{)8iOZYIzd=jFBPRDaIB3&u$+jP?EQ@2~z(ku8m%3<=Yk^K8_2ZMH zBM6yU@2K6Sq{+R6;dnTNdA=?L-YDJ^QPiTyqyW2x(J;17p$)yKhz7LoJT?rno3JAP z$D}hinyNXXpk7hZ;5*Ox4YrNYk;WFnrG^hC2UpZCXF7uWKQ6#kaWo?izWg%7xuM(X zzUGz}4ars6c*jjp?lf(qJP!mlg)I#R6JfDqL&M3JaLJqu$kCqSk`^#gs?R29KC5Tx z&&EXVHGG#C@D*9K+>*0(d02zlM-~PZ+Wg%hYy=MJ2z(RI|C8-?A|oGCgo`k}Wy-)g zPzAYa5FHY+i{6=Eak2j#zM|xh@5iG%ItM`3RNucsL~isYJiYxOCJpd1dAXA}JTG%d7Rxu9hr?-~;>24ZF3xrXB{~M<1+5(k+Y@SsQAU#U0-3)E>bD7q5iKAku!&fj zt}DLDt{U&IhrsETi2@mZo$@P?&yV&V{I%_eDWlon>N-GhQ%llOnfmE8d3t`1p+ZFy zN7~9-{lCC4nnqEJ zW&#I2^4+&&QMl6%@p(`XT*qcjnXZSzZs<^mwm0ZKE( z5W4`s2qWJ$91#p9c@h*YX_88*gh#)_!B%v;`L@$L?jN1<|5v^KAqE6BU0|v%_prGi za-*9_m)kqu+1d*EJEhvq&VPj5=cU|(PWL3w|8pt7(?yB42Vnls&`l%!5Z+z*j&mf# z#bT24r7slo*Eq$JrrE4DVt{=A0JB$2oZRUKVmB^`G@cLZw+nC&-lPs8*lnUu;JfqL zZN4C#wY1yy*K1e@$%m7ikA{l<(#(huRK|uU?SBGByOsg+<9(o*A>e^R4kIv4tjSn` z7eC<>x^5`4LgHHMZc9SZxRA$LcCUrbJfW&qT1UpV$=8akIxJ>lnTt$pPYe3z#SlU= zIKVGi&Meu2*1Wagm}o8&h2DA0zRb$#$9bf%$WLyfcn|%fu*j)es{p7S&Ug_U4x63L zRzynK{YwpiauZL3lqZ8o^BqQfI=z*ra4ckS0Uz|hyH0U2Qj1qOa|Xw6P7hxn78f@& zT8I0Eu#rsb5K!-AP#ZIaYGI-@&yOFcLAWq(lez6DpH(9a0^Q zP#=_N&Wd#AjvJl$^}w@NEJ6}4k57Hnt~y)y2T zimPBmP5B0o<-{34ECrB48ljt+g`^uOt3htqz7WEw`UB18_=;}z-X}rlQwl%O{!(VS z9xvYWN-J)et#}6!fW_-#Fo1OZmG<1wfGnNjm=ka@nF0?It|&|<2+4~X%0BxnDhq2- z2EUUU1a>AS$Kez$V8}!d*%HCZ{W>ke#p=rPG=i(-`_D66$AZa)qOQoFcA*epA$OpI zwGei>QmGM2nb|R0SIau=;WX!dm&Y&7STw4o7?@1SD>BK7d-$XrfzVt^$=5n|s2mZB|aI*1u;2M{1P~5>f5RsCQ9{7N-BvBoyR@^Bh zey)nRX@c@Epb)kmMEoW4J85m3@2eFA^v;d>v{A*wEgmN{++PnbpsVIVZ9C&3n>ry3 zIuXpJ0mxS^2O@s)QYZ1{O&$01bHM+-DSsxb(yTaL+G}(@jLFLL+(ASXtabc+dX)>Y z$wKQFwmeb zhjsWiL96YQtuDwjLe&4@=#+X-*DK zI5fIhdnxVYlNf?;d0&+LNg?<{sK<|bcI0-(cYvhM;V<@j?9UZN2uC*0? z;zYWobu+JFFrNf=$=GA;_wss4HM3h;~hRS(WH<_UQ2ee>oQ? ztBM8}0sMa)AjsHlz6?H{yFFl-Tx_rq?N>{hP_kVk z!+7pulh?-#R!%Au4bu_Be(e zeP7i~gW_O35_UZq&ARns)f@_6Sj>@3Rt6%;GwRopudBLC9$L*%VRqM03~aJ3P1#BJ zpw~N!?q?5|tgE-T^cW|b0D2gFJ1Q;CXuGGoIf`zf zTD(i*so?H5+&KACR!7GN1b)G37NcF%7l^`l_VJd+?UbRcP=586aG?CEtpnxH1oy3f zM{8;duV;?&EnM01%k6M<$uLDQRzc9N#mA!b)RlyBK~omX#oN?t*_Q3@u&rZs8$O){ zX+7$@P!V5FZC4J43Rw-q$t5L?>{_<=q_venga@`C_uo1M67*GfN2COhRtx@Ku%av_Y3NQtTT}z<&+5@UcNW zS)Ko)^dn+J1l~Foa(HXuW=@xQ@lU>Ff)#)%`D=DCoLwMYroL#(-X~NOf9aMIy8phtnR8sE-vn?T?%wM4{} z^bOuuVs_$vzFVMgSXH?|Xk^m<#RWd>z#ovl=TP0_XM-b6I0|gBCooKTp$%+h?a}ou zr3R`Pc3dU&p|T3vVrjH%mAFkl%j=|-ipAMytHzsT{vUB~%tUn8Ad0KYD+Q54#!v<=XfEKZK@lKQL1%#mPsSXCuVSA;4-jNx{Bn(Sy)8k+tQZW<5crZD*t zB)xH~(l%39FUYi_+2J zItxN%a`dq6lyZjwxxRxB^zVn_xHN>50o#^&oGfm#`txVm;{6P9f`x9j#I3<3Tdoh^ zQ6~}?)=aB;42!C0J#fhOfm2P)70oH9u(o|k`rn{qUA*(F$ZgI*gB=_E(C_`|Jfy5{ zPEVnkYQ)417HLC%L6uVy*GcCRom^1|HH8c3Ou>iZC7WVg`!gEYass$zeN0Ce_CsO( z-DH005x#^4ITJuaX5j$X45&no`BWNLvR6dw1WuhZgbOc$KwLv2L`pCw8drKQ#?aHS z`CH44NpsQHK@&Dg;FP)sf$K5wKFnzD9o|*3fhW74SJM~;mt<7O!;0qo`STN_m)Y3c zJJB91iV*V!$UKPiQpFJ!?hR0F20TMXlIy{AddY(WEzDI^LOsDqP6*_@@{9KX*>#UA z;6!{g%??hwu)N>OCb6(sOVQJL^%=X9nGH3by213o0_e!0 z#Cz`1=hN!6_UqX7@UyaxX5Fn*dU#r$-qE1bf}7~Wb?8HBb+B{S_YQikHQoVHn&QE$N{H$F_(u`ShcyMxC}jQAu{b9W~gacukcy>?ys?*-jp4Uetk z66_o|LfXf1lyE8T7^rg=Ha(l^oZ3M=xmB<>0NY#GCjI;(K;K57LT77cFK{%Md*a;+7Na6~c^DTxWI8po{hiEDMN>7?kUYu$$VZPo>+&iQAV-IF_d+xyUW1~G zk3LI+*o)ichT76%4m@@5KVi5nU@xCpYRSlRx38 zjztI_{z@7K)<$F6P2k=MT@W6tv3=a$m&=XRcq(P@9DdO)%5YwNBt{rAv(Npxlmi0G ztX~b!##fGIIgJxLf|-E!U@jf0dA~q9HQ_Vp~LGflsu}n%&c91Vc(kgFzz;2;NVl1_;bv2?6VSGJo%R z$|pts^iR&O ze&xTpzgxQFJEa%-#^n0qlTU8p*04Cw7C*OIzbyWB4xRqpiyle5vLB1zqjp6|eX@8<4)^K5dHrqxj?t6x9gsh!Beh2Wt>#FZ(Y zb)Ca0fJ(u|H&}m&l9hw1wWc@clM6ZSQ7QOMw)q|pVQwy_Hy=0EMQjSNf*G+>n>dtO zVXR-=hXLS=1RgTRH$x~HUH<$9>LU?M`FwK!q6)aiym7z#{Pg+G!$Z#-xEkJE+(A)3 ze}RG5+4(wz2H?y6qICu%UE@JGpFjTy|B`DU@$ByA1D)yWJOQb@H&-m>f8qFxnsEx$ zz;tfRivY;=-8-0j-4+w)^CaN{`kSbTi=a?H$C_Zc4u>vzfrHdv%wW01un=xY*SF`h zO0;oKFrK<0&KJM9zI|M2Khm@5bO9SnIGYbNW`+B{0@p@g5R{5k2fFB|TTg2^m>|v%tX+Y+@wL42VD9k^(lf}W g&v$NbNACO62EL2BS24+dH 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 diff --git a/roms/SLOF b/roms/SLOF index b94bde008b..32e3430c01 160000 --- a/roms/SLOF +++ b/roms/SLOF @@ -1 +1 @@ -Subproject commit b94bde008b0d49ec4bfe933e110d0952d032ac28 +Subproject commit 32e3430c018ceb8413cb808477449d1968c42497 From be40edcd87b8493cdf691dbe77049e0d9644dcc1 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Wed, 12 Oct 2011 22:40:31 +0000 Subject: [PATCH 11/24] ppc: Remove broken partial PVR matching The ppc target contains a ppc_find_by_pvr() function, which looks up a CPU spec based on a PVR (that is, based on the value in the target cpu's Processor Version Register). PVR values contain information on both the cpu model (upper 16 bits, usually) and on the precise revision (low 16 bits, usually). ppc_find_by_pvr, as well as making exact PVR matches, attempts to find "close" PVR matches, when we don't have a CPU spec for the exact revision specified. This sounds like a good idea, execpt that the current logic is completely nonsensical. It seems to assume CPU families are subdivided bit by bit in the PVR in a way they just aren't. Specifically, it requires a match on all bits of the specified pvr up to the last non-zero bit. This has the bizarre effect that when the low bits are simply a sequential revision number (a common though not universal pattern), then odd specified revisions must be matched exactly, whereas even specified revisions will also match the next odd revision, likewise for powers of 4, 8 and so forth. To correctly do inexact matching we'd need to re-organize the table of CPU specs to include a mask showing what PVR range the spec is compatible with (similar to the cputable code in the Linux kernel). For now, just remove the bogosity by only permitting exact PVR matches. That at least makes the matching simple and consistent. If we need inexact matching we can add the necessary per-subfamily masks later. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- target-ppc/translate_init.c | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index ca0d8525c8..73b49cfd6e 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -10043,40 +10043,16 @@ int cpu_ppc_register_internal (CPUPPCState *env, const ppc_def_t *def) static const ppc_def_t *ppc_find_by_pvr (uint32_t pvr) { - const ppc_def_t *ret; - uint32_t pvr_rev; - int i, best, match, best_match, max; + int i; - ret = NULL; - max = ARRAY_SIZE(ppc_defs); - best = -1; - pvr_rev = pvr & 0xFFFF; - /* We want all specified bits to match */ - best_match = 32 - ctz32(pvr_rev); - for (i = 0; i < max; i++) { - /* We check that the 16 higher bits are the same to ensure the CPU - * model will be the choosen one. - */ - if (((pvr ^ ppc_defs[i].pvr) >> 16) == 0) { - /* We want as much as possible of the low-level 16 bits - * to be the same but we allow inexact matches. - */ - match = clz32(pvr_rev ^ (ppc_defs[i].pvr & 0xFFFF)); - /* We check '>=' instead of '>' because the PPC_defs table - * is ordered by increasing revision. - * Then, we will match the higher revision compatible - * with the requested PVR - */ - if (match >= best_match) { - best = i; - best_match = match; - } + for (i = 0; i < ARRAY_SIZE(ppc_defs); i++) { + /* If we have an exact match, we're done */ + if (pvr == ppc_defs[i].pvr) { + return &ppc_defs[i]; } } - if (best != -1) - ret = &ppc_defs[best]; - return ret; + return NULL; } #include From a1e985833cde3208b0f57c4c7e640b60fbc6c54d Mon Sep 17 00:00:00 2001 From: David Gibson Date: Wed, 12 Oct 2011 22:40:32 +0000 Subject: [PATCH 12/24] ppc: First cut implementation of -cpu host For convenience with kvm, x86 allows the user to specify -cpu host on the qemu command line, which means make the guest cpu the same as the host cpu. This patch implements the same option for ppc targets. For now, this just read the host PVR (Processor Version Register) and selects one of our existing CPU specs based on it. This means that the option will not work if the host cpu is not supported by TCG, even if that wouldn't matter for use under kvm. In future, we can extend this in future to override parts of the cpu spec based on information obtained from the host (via /proc/cpuinfo, the host device tree, or explicit KVM calls). That will let us handle cases where the real kvm-virtualized CPU doesn't behave exactly like the TCG-emulated CPU. With appropriate annotation of the CPU specs we'll also then be able to use host cpus under kvm even when there isn't a matching full TCG model. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- target-ppc/cpu.h | 1 + target-ppc/kvm.c | 19 +++++++++++++++++++ target-ppc/kvm_ppc.h | 6 ++++++ target-ppc/translate_init.c | 8 +++++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index 3f77e308a6..8e5c85c28e 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -1107,6 +1107,7 @@ void ppc_store_msr (CPUPPCState *env, target_ulong value); void ppc_cpu_list (FILE *f, fprintf_function cpu_fprintf); +const ppc_def_t *ppc_find_by_pvr(uint32_t pvr); const ppc_def_t *cpu_ppc_find_by_name (const char *name); int cpu_ppc_register_internal (CPUPPCState *env, const ppc_def_t *def); diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index 96139acb23..313c7b2af2 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -879,6 +879,25 @@ int kvmppc_remove_spapr_tce(void *table, int fd, uint32_t window_size) return 0; } +static inline uint32_t mfpvr(void) +{ + uint32_t pvr; + + asm ("mfpvr %0" + : "=r"(pvr)); + return pvr; +} + +const ppc_def_t *kvmppc_host_cpu_def(void) +{ + uint32_t host_pvr = mfpvr(); + const ppc_def_t *base_spec; + + base_spec = ppc_find_by_pvr(host_pvr); + + return base_spec; +} + bool kvm_arch_stop_on_emulation_error(CPUState *env) { return true; diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h index 955729a1cf..b0d6fb667e 100644 --- a/target-ppc/kvm_ppc.h +++ b/target-ppc/kvm_ppc.h @@ -26,6 +26,7 @@ int kvmppc_smt_threads(void); off_t kvmppc_alloc_rma(const char *name, MemoryRegion *sysmem); void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t window_size, int *pfd); int kvmppc_remove_spapr_tce(void *table, int pfd, uint32_t window_size); +const ppc_def_t *kvmppc_host_cpu_def(void); #else @@ -85,6 +86,11 @@ static inline int kvmppc_remove_spapr_tce(void *table, int pfd, return -1; } +static inline const ppc_def_t *kvmppc_host_cpu_def(void) +{ + return NULL; +} + #endif #ifndef CONFIG_KVM diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index 73b49cfd6e..62f0a6b867 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -24,6 +24,8 @@ #include "dis-asm.h" #include "gdbstub.h" +#include +#include "kvm_ppc.h" //#define PPC_DUMP_CPU //#define PPC_DEBUG_SPR @@ -10041,7 +10043,7 @@ int cpu_ppc_register_internal (CPUPPCState *env, const ppc_def_t *def) return 0; } -static const ppc_def_t *ppc_find_by_pvr (uint32_t pvr) +const ppc_def_t *ppc_find_by_pvr(uint32_t pvr) { int i; @@ -10063,6 +10065,10 @@ const ppc_def_t *cpu_ppc_find_by_name (const char *name) const char *p; int i, max, len; + if (kvm_enabled() && (strcasecmp(name, "host") == 0)) { + return kvmppc_host_cpu_def(); + } + /* Check if the given name is a PVR */ len = strlen(name); if (len == 10 && name[0] == '0' && name[1] == 'x') { From 37e305ce167279307335b069bff7e254b858fa6b Mon Sep 17 00:00:00 2001 From: David Gibson Date: Wed, 12 Oct 2011 22:40:33 +0000 Subject: [PATCH 13/24] ppc: Add cpu defs for POWER7 revisions 2.1 and 2.3 This patch adds cpu specs to the table for POWER7 revisions 2.1 and 2.3. This allows -cpu host to be used on these host cpus. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- target-ppc/translate_init.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index 62f0a6b867..7de097d945 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -7333,6 +7333,8 @@ enum { CPU_POWERPC_POWER6A = 0x0F000002, #define CPU_POWERPC_POWER7 CPU_POWERPC_POWER7_v20 CPU_POWERPC_POWER7_v20 = 0x003F0200, + CPU_POWERPC_POWER7_v21 = 0x003F0201, + CPU_POWERPC_POWER7_v23 = 0x003F0203, CPU_POWERPC_970 = 0x00390202, #define CPU_POWERPC_970FX CPU_POWERPC_970FX_v31 CPU_POWERPC_970FX_v10 = 0x00391100, @@ -9139,6 +9141,8 @@ static const ppc_def_t ppc_defs[] = { /* POWER7 */ POWERPC_DEF("POWER7", CPU_POWERPC_POWER7, POWER7), POWERPC_DEF("POWER7_v2.0", CPU_POWERPC_POWER7_v20, POWER7), + POWERPC_DEF("POWER7_v2.1", CPU_POWERPC_POWER7_v21, POWER7), + POWERPC_DEF("POWER7_v2.3", CPU_POWERPC_POWER7_v23, POWER7), /* PowerPC 970 */ POWERPC_DEF("970", CPU_POWERPC_970, 970), /* PowerPC 970FX (G5) */ From 6b7a2cf6d93294a4e7c79fe101d31fc19d04fb48 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Wed, 12 Oct 2011 22:40:34 +0000 Subject: [PATCH 14/24] pseries: Under kvm use guest cpu = host cpu by default Now that we've implemented -cpu host for ppc, this patch updates the pseries machine to use the host cpu as the guest cpu by default when running under KVM. This is important because under KVM Book3S-HV the guest cpu _cannot_ be of a different type to the host cpu (at the moment KVM Book3S-HV will silently virtualize the host cpu instead of whatever was requested, but in future it is likely to simply refuse to run the VM if a cpu model other than the host's is requested). Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- hw/spapr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/spapr.c b/hw/spapr.c index 4d2a55e355..08c7399fef 100644 --- a/hw/spapr.c +++ b/hw/spapr.c @@ -406,7 +406,7 @@ static void ppc_spapr_init(ram_addr_t ram_size, /* init CPUs */ if (cpu_model == NULL) { - cpu_model = "POWER7"; + cpu_model = kvm_enabled() ? "host" : "POWER7"; } for (i = 0; i < smp_cpus; i++) { env = cpu_init(cpu_model); From 8b242eba641a6106db2d3b0356687f8e7e08e568 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 18 Oct 2011 01:46:08 +0200 Subject: [PATCH 15/24] PPC: Bump qemu-system-ppc to 64-bit physical address space Some 32-bit PPC CPUs can use up to 36 bit of physical address space. Treat them accordingly in the qemu-system-ppc binary type. Signed-off-by: Alexander Graf --- configure | 2 +- target-ppc/cpu.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 4f87e0a43b..f8dd4db6c5 100755 --- a/configure +++ b/configure @@ -3309,7 +3309,7 @@ case "$target_arch2" in ;; ppc) gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" - target_phys_bits=32 + target_phys_bits=64 target_nptl="yes" target_libs_softmmu="$fdt_libs" ;; diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index 8e5c85c28e..f36f375596 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -66,7 +66,7 @@ #define TARGET_PAGE_BITS 12 #endif /* defined(TARGET_PPCEMB) */ -#define TARGET_PHYS_ADDR_SPACE_BITS 32 +#define TARGET_PHYS_ADDR_SPACE_BITS 36 #define TARGET_VIRT_ADDR_SPACE_BITS 32 #endif /* defined (TARGET_PPC64) */ From f0ad8c340145b246982885addef1aac183790706 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 18 Oct 2011 02:00:51 +0200 Subject: [PATCH 16/24] PPC: Disable non-440 CPUs for ppcemb target The sole reason we have the ppcemb target is to support MMUs that have less than the usual 4k possible page size. There are very few of these chips and I don't want to add additional QA and testing burden to everyone to ensure that code still works when TARGET_PAGE_SIZE is not 4k. So this patch disables all CPUs except for MMU_BOOKE capable ones from the ppcemb target. Signed-off-by: Alexander Graf --- target-ppc/translate_init.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index 7de097d945..f0ae1d1764 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -10047,11 +10047,27 @@ int cpu_ppc_register_internal (CPUPPCState *env, const ppc_def_t *def) return 0; } +static bool ppc_cpu_usable(const ppc_def_t *def) +{ +#if defined(TARGET_PPCEMB) + /* When using the ppcemb target, we only support 440 style cores */ + if (def->mmu_model != POWERPC_MMU_BOOKE) { + return false; + } +#endif + + return true; +} + const ppc_def_t *ppc_find_by_pvr(uint32_t pvr) { int i; for (i = 0; i < ARRAY_SIZE(ppc_defs); i++) { + if (!ppc_cpu_usable(&ppc_defs[i])) { + continue; + } + /* If we have an exact match, we're done */ if (pvr == ppc_defs[i].pvr) { return &ppc_defs[i]; @@ -10091,6 +10107,10 @@ const ppc_def_t *cpu_ppc_find_by_name (const char *name) ret = NULL; max = ARRAY_SIZE(ppc_defs); for (i = 0; i < max; i++) { + if (!ppc_cpu_usable(&ppc_defs[i])) { + continue; + } + if (strcasecmp(name, ppc_defs[i].name) == 0) { ret = &ppc_defs[i]; break; @@ -10106,6 +10126,10 @@ void ppc_cpu_list (FILE *f, fprintf_function cpu_fprintf) max = ARRAY_SIZE(ppc_defs); for (i = 0; i < max; i++) { + if (!ppc_cpu_usable(&ppc_defs[i])) { + continue; + } + (*cpu_fprintf)(f, "PowerPC %-16s PVR %08x\n", ppc_defs[i].name, ppc_defs[i].pvr); } From 55f7d4b09e0bd1f6e5875fe0a5a58852999e4e92 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Sun, 16 Oct 2011 19:26:17 +0000 Subject: [PATCH 17/24] ppc: Avoid decrementer related kvm exits In __cpu_ppc_store_decr(), we set up a regular timer used to trigger decrementer interrupts. This is necessary to implement the decrementer properly under TCG, but is unnecessary under KVM (true for both Book3S-PR and Book3S-HV KVM variants), because the kernel handles generating and delivering decrementer exceptions. Under kvm, in fact, the timer causes expensive and unnecessary exits from kvm to qemu. This patch, therefore, disables setting the timer when kvm is in use. Signed-off-by: Anton Blanchard Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- hw/ppc.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/ppc.c b/hw/ppc.c index 25b59dddaa..d29af0bb35 100644 --- a/hw/ppc.c +++ b/hw/ppc.c @@ -662,6 +662,12 @@ static void __cpu_ppc_store_decr (CPUState *env, uint64_t *nextp, LOG_TB("%s: %08" PRIx32 " => %08" PRIx32 "\n", __func__, decr, value); + + if (kvm_enabled()) { + /* KVM handles decrementer exceptions, we don't need our own timer */ + return; + } + now = qemu_get_clock_ns(vm_clock); next = now + muldiv64(value, get_ticks_per_sec(), tb_env->decr_freq); if (is_excp) { From f90a9d02401eeeec18a122b61ccccb91244f321c Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 18 Oct 2011 02:10:36 +0200 Subject: [PATCH 18/24] PPC: Fail configure when libfdt is not available We have several targets in the PPC tree now that basically require libfdt to function properly, namely the pseries and the e500 targets. This dependency will rather increase than decrease in the future, so I want to make sure that people building shiny new 1.0 actually have libfdt installed to get rid of a few ifdefs in the code. Warning: This patch will likely make configure fail for people who don't select their own --target-list, but don't have libfdt development packages installed. However, we really need this new dependency to move on. Signed-off-by: Alexander Graf --- v1 -> v2: - no paranthesis - no fdt check for config_pseries - add . in error message --- configure | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/configure b/configure index f8dd4db6c5..18537e8404 100755 --- a/configure +++ b/configure @@ -3422,7 +3422,16 @@ case "$target_arch2" in fi fi esac -if test "$target_arch2" = "ppc64" -a "$fdt" = "yes"; then +if test "$fdt" != "yes" && test "$target_arch2" = "ppc" -o \ + "$target_arch2" = "ppc64" -o "$target_arch2" = "ppcemb"; then + echo + echo "Error: libfdt missing" + echo "The PowerPC target requires libfdt to work properly." + echo "Please make sure to have it and its development packages installed." + echo + exit 1 +fi +if test "$target_arch2" = "ppc64"; then echo "CONFIG_PSERIES=y" >> $config_target_mak fi if test "$target_bigendian" = "yes" ; then From a7342588c081c7497bc7810431a03fa7b669af40 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 17 Oct 2011 18:15:41 +0000 Subject: [PATCH 19/24] pseries: Correct vmx/dfp handling in both KVM and TCG cases Currently, when KVM is enabled, the pseries machine checks if the host CPU supports VMX, VSX and/or DFP instructions and advertises accordingly in the guest device tree. It does this regardless of what CPU is selected on the command line. On the other hand, when in TCG mode, it never advertises any of these facilities, even basic VMX (Altivec) which is supported in TCG. Now that we have a -cpu host option for ppc, it is fairly straightforward to fix both problems. This patch changes the -cpu host code to override the basic cpu spec derived from the PVR with information queried from the host avout VMX, VSX and DFP capability. The pseries code then uses the instruction availability advertised in the cpu state to set the guest device tree correctly for both the KVM and TCG cases. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- hw/spapr.c | 10 +++++----- target-ppc/cpu.h | 20 ++++++++++++++++++++ target-ppc/kvm.c | 23 ++++++++++++++++++++++- target-ppc/translate_init.c | 18 ++---------------- 4 files changed, 49 insertions(+), 22 deletions(-) diff --git a/hw/spapr.c b/hw/spapr.c index 08c7399fef..933af322c5 100644 --- a/hw/spapr.c +++ b/hw/spapr.c @@ -188,8 +188,6 @@ static void *spapr_create_fdt_skel(const char *cpu_model, 0xffffffff, 0xffffffff}; uint32_t tbfreq = kvm_enabled() ? kvmppc_get_tbfreq() : TIMEBASE_FREQ; uint32_t cpufreq = kvm_enabled() ? kvmppc_get_clockfreq() : 1000000000; - uint32_t vmx = kvm_enabled() ? kvmppc_get_vmx() : 0; - uint32_t dfp = kvm_enabled() ? kvmppc_get_dfp() : 0; if ((index % smt) != 0) { continue; @@ -241,15 +239,17 @@ static void *spapr_create_fdt_skel(const char *cpu_model, * 0 / no property == no vector extensions * 1 == VMX / Altivec available * 2 == VSX available */ - if (vmx) { + if (env->insns_flags & PPC_ALTIVEC) { + uint32_t vmx = (env->insns_flags2 & PPC2_VSX) ? 2 : 1; + _FDT((fdt_property_cell(fdt, "ibm,vmx", vmx))); } /* Advertise DFP (Decimal Floating Point) if available * 0 / no property == no DFP * 1 == DFP available */ - if (dfp) { - _FDT((fdt_property_cell(fdt, "ibm,dfp", dfp))); + if (env->insns_flags2 & PPC2_DFP) { + _FDT((fdt_property_cell(fdt, "ibm,dfp", 1))); } _FDT((fdt_end_node(fdt))); diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index f36f375596..3ef4eba836 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -858,6 +858,22 @@ enum { /* The whole PowerPC CPU context */ #define NB_MMU_MODES 3 +struct ppc_def_t { + const char *name; + uint32_t pvr; + uint32_t svr; + uint64_t insns_flags; + uint64_t insns_flags2; + uint64_t msr_mask; + powerpc_mmu_t mmu_model; + powerpc_excp_t excp_model; + powerpc_input_t bus_model; + uint32_t flags; + int bfd_mach; + void (*init_proc)(CPUPPCState *env); + int (*check_pow)(CPUPPCState *env); +}; + struct CPUPPCState { /* First are the most commonly used resources * during translated code execution @@ -1844,6 +1860,10 @@ enum { /* BookE 2.06 PowerPC specification */ PPC2_BOOKE206 = 0x0000000000000001ULL, + /* VSX (extensions to Altivec / VMX) */ + PPC2_VSX = 0x0000000000000002ULL, + /* Decimal Floating Point (DFP) */ + PPC2_DFP = 0x0000000000000004ULL, }; /*****************************************************************************/ diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index 313c7b2af2..a090d79ad4 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -888,14 +888,35 @@ static inline uint32_t mfpvr(void) return pvr; } +static void alter_insns(uint64_t *word, uint64_t flags, bool on) +{ + if (on) { + *word |= flags; + } else { + *word &= ~flags; + } +} + const ppc_def_t *kvmppc_host_cpu_def(void) { uint32_t host_pvr = mfpvr(); const ppc_def_t *base_spec; + ppc_def_t *spec; + uint32_t vmx = kvmppc_get_vmx(); + uint32_t dfp = kvmppc_get_dfp(); base_spec = ppc_find_by_pvr(host_pvr); - return base_spec; + spec = g_malloc0(sizeof(*spec)); + memcpy(spec, base_spec, sizeof(*spec)); + + /* Now fix up the spec with information we can query from the host */ + + alter_insns(&spec->insns_flags, PPC_ALTIVEC, vmx > 0); + alter_insns(&spec->insns_flags2, PPC2_VSX, vmx > 1); + alter_insns(&spec->insns_flags2, PPC2_DFP, dfp); + + return spec; } bool kvm_arch_stop_on_emulation_error(CPUState *env) diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index f0ae1d1764..4dfd7f3bfb 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -34,22 +34,6 @@ #define TODO_USER_ONLY 1 #endif -struct ppc_def_t { - const char *name; - uint32_t pvr; - uint32_t svr; - uint64_t insns_flags; - uint64_t insns_flags2; - uint64_t msr_mask; - powerpc_mmu_t mmu_model; - powerpc_excp_t excp_model; - powerpc_input_t bus_model; - uint32_t flags; - int bfd_mach; - void (*init_proc)(CPUPPCState *env); - int (*check_pow)(CPUPPCState *env); -}; - /* For user-mode emulation, we don't emulate any IRQ controller */ #if defined(CONFIG_USER_ONLY) #define PPC_IRQ_INIT_FN(name) \ @@ -6535,6 +6519,8 @@ static void init_proc_970MP (CPUPPCState *env) PPC_64B | PPC_ALTIVEC | \ PPC_SEGMENT_64B | PPC_SLBI | \ PPC_POPCNTB | PPC_POPCNTWD) +/* FIXME: Should also have PPC2_VSX and PPC2_DFP, but we don't + * implement those in TCG yet */ #define POWERPC_INSNS2_POWER7 (PPC_NONE) #define POWERPC_MSRM_POWER7 (0x800000000204FF36ULL) #define POWERPC_MMU_POWER7 (POWERPC_MMU_2_06) From 98efaf75282a96ffbe2914f79a9f5cb736a03db4 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Sun, 23 Oct 2011 17:25:04 +0000 Subject: [PATCH 20/24] ppc: Fix up usermode only builds The recent usage of MemoryRegion in kvm_ppc.h breaks builds with CONFIG_USER_ONLY=y. This patch fixes it. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- target-ppc/kvm_ppc.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h index b0d6fb667e..f9c0198311 100644 --- a/target-ppc/kvm_ppc.h +++ b/target-ppc/kvm_ppc.h @@ -23,9 +23,11 @@ int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len); int kvmppc_set_interrupt(CPUState *env, int irq, int level); void kvmppc_set_papr(CPUState *env); int kvmppc_smt_threads(void); +#ifndef CONFIG_USER_ONLY off_t kvmppc_alloc_rma(const char *name, MemoryRegion *sysmem); void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t window_size, int *pfd); int kvmppc_remove_spapr_tce(void *table, int pfd, uint32_t window_size); +#endif /* !CONFIG_USER_ONLY */ const ppc_def_t *kvmppc_host_cpu_def(void); #else @@ -69,6 +71,7 @@ static inline int kvmppc_smt_threads(void) return 1; } +#ifndef CONFIG_USER_ONLY static inline off_t kvmppc_alloc_rma(const char *name, MemoryRegion *sysmem) { return 0; @@ -85,6 +88,7 @@ static inline int kvmppc_remove_spapr_tce(void *table, int pfd, { return -1; } +#endif /* !CONFIG_USER_ONLY */ static inline const ppc_def_t *kvmppc_host_cpu_def(void) { From 70bca53ffb811ea59dc090b3ca7825cf0bf346a7 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 24 Oct 2011 20:43:22 +0200 Subject: [PATCH 21/24] KVM: PPC: Override host vmx/vsx/dfp only when information known The -cpu host feature tries to find out the host capabilities based on device tree information. However, we don't always have that available because it's an optional property in dt. So instead of force unsetting values depending on an unreliable source of information, let's just try to be clever about it and not override capabilities when we don't know the device tree pieces. This fixes altivec with -cpu host on YDL PowerStations. Reported-by: Nishanth Aravamudan Acked-by: David Gibson Signed-off-by: Alexander Graf --- target-ppc/kvm.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index a090d79ad4..f3d0861a11 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -912,9 +912,15 @@ const ppc_def_t *kvmppc_host_cpu_def(void) /* Now fix up the spec with information we can query from the host */ - alter_insns(&spec->insns_flags, PPC_ALTIVEC, vmx > 0); - alter_insns(&spec->insns_flags2, PPC2_VSX, vmx > 1); - alter_insns(&spec->insns_flags2, PPC2_DFP, dfp); + if (vmx != -1) { + /* Only override when we know what the host supports */ + alter_insns(&spec->insns_flags, PPC_ALTIVEC, vmx > 0); + alter_insns(&spec->insns_flags2, PPC2_VSX, vmx > 1); + } + if (dfp != -1) { + /* Only override when we know what the host supports */ + alter_insns(&spec->insns_flags2, PPC2_DFP, dfp); + } return spec; } From 74b41e5676568e6560474267bbf1a5a32d3e2c41 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Thu, 27 Oct 2011 15:56:31 +0000 Subject: [PATCH 22/24] pseries: Allow writes to KVM accelerated TCE table Sufficiently recent kernels include a KVM call to accelerate use of PAPR TCE tables (IOMMU), which are used by PAPR virtual IO devices. This involves qemu mapping the TCE table in from a kernel obtained fd, which currently we do with PROT_READ only. This is a hangover from early (never released) versions of this kernel interface which only permitted read-only mappings and required us to destroy and recreate the table when we needed to clear it from qemu. Now, the kernel permits read-write mappings, and we rely on this to clear the table in spapr_vio_quiesce_one(). However, due to insufficient testing, I forgot to update the actual mapping of the table in kvmppc_create_spapr_tce() to add PROT_WRITE to the mmap(). This patch corrects the oversight. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- target-ppc/kvm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index f3d0861a11..429349fb94 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -850,7 +850,7 @@ void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t window_size, int *pfd) len = (window_size / SPAPR_VIO_TCE_PAGE_SIZE) * sizeof(VIOsPAPR_RTCE); /* FIXME: round this up to page size */ - table = mmap(NULL, len, PROT_READ, MAP_SHARED, fd, 0); + table = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (table == MAP_FAILED) { close(fd); return NULL; From 02d4eae4b0be19d84996105cf6e0cc33f41e3833 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Sun, 30 Oct 2011 15:51:24 +0000 Subject: [PATCH 23/24] ppc: Alter CPU state to mask out TCG unimplemented instructions as appropriate The CPU state contains two bitmaps, initialized from the CPU spec which describes which instructions are implemented on the CPU. A couple of bits are defined which cover instructions (VSX and DFP) which are not currently implemented in TCG. So far, these are only used to handle the case of -cpu host because a KVM guest can use the instructions when the host CPU supports them. However, it's a mild layering violation to simply not include those bits in the CPU descriptions for those CPUs that do support them, just because we can't handle them in TCG. This patch corrects the situation, so that the instruction bits _are_ shown correctly in the cpu spec table, but are masked out from the cpu state in the non-KVM case. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- target-ppc/cpu.h | 26 ++++++++++++++++++++++++++ target-ppc/translate_init.c | 20 +++++++++++++++++--- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index 3ef4eba836..e84108c49a 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -1856,6 +1856,30 @@ enum { /* popcntw and popcntd instructions */ PPC_POPCNTWD = 0x8000000000000000ULL, +#define PPC_TCG_INSNS (PPC_INSNS_BASE | PPC_POWER | PPC_POWER2 \ + | PPC_POWER_RTC | PPC_POWER_BR | PPC_64B \ + | PPC_64BX | PPC_64H | PPC_WAIT | PPC_MFTB \ + | PPC_602_SPEC | PPC_ISEL | PPC_POPCNTB \ + | PPC_STRING | PPC_FLOAT | PPC_FLOAT_EXT \ + | PPC_FLOAT_FSQRT | PPC_FLOAT_FRES \ + | PPC_FLOAT_FRSQRTE | PPC_FLOAT_FRSQRTES \ + | PPC_FLOAT_FSEL | PPC_FLOAT_STFIWX \ + | PPC_ALTIVEC | PPC_SPE | PPC_SPE_SINGLE \ + | PPC_SPE_DOUBLE | PPC_MEM_TLBIA \ + | PPC_MEM_TLBIE | PPC_MEM_TLBSYNC \ + | PPC_MEM_SYNC | PPC_MEM_EIEIO \ + | PPC_CACHE | PPC_CACHE_ICBI \ + | PPC_CACHE_DCBZ | PPC_CACHE_DCBZT \ + | PPC_CACHE_DCBA | PPC_CACHE_LOCK \ + | PPC_EXTERN | PPC_SEGMENT | PPC_6xx_TLB \ + | PPC_74xx_TLB | PPC_40x_TLB | PPC_SEGMENT_64B \ + | PPC_SLBI | PPC_WRTEE | PPC_40x_EXCP \ + | PPC_405_MAC | PPC_440_SPEC | PPC_BOOKE \ + | PPC_MFAPIDI | PPC_TLBIVA | PPC_TLBIVAX \ + | PPC_4xx_COMMON | PPC_40x_ICBT | PPC_RFMCI \ + | PPC_RFDI | PPC_DCR | PPC_DCRX | PPC_DCRUX \ + | PPC_POPCNTWD) + /* extended type values */ /* BookE 2.06 PowerPC specification */ @@ -1864,6 +1888,8 @@ enum { PPC2_VSX = 0x0000000000000002ULL, /* Decimal Floating Point (DFP) */ PPC2_DFP = 0x0000000000000004ULL, + +#define PPC_TCG_INSNS2 (PPC2_BOOKE206) }; /*****************************************************************************/ diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index 4dfd7f3bfb..8a7233fc82 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -6519,9 +6519,7 @@ static void init_proc_970MP (CPUPPCState *env) PPC_64B | PPC_ALTIVEC | \ PPC_SEGMENT_64B | PPC_SLBI | \ PPC_POPCNTB | PPC_POPCNTWD) -/* FIXME: Should also have PPC2_VSX and PPC2_DFP, but we don't - * implement those in TCG yet */ -#define POWERPC_INSNS2_POWER7 (PPC_NONE) +#define POWERPC_INSNS2_POWER7 (PPC2_VSX | PPC2_DFP) #define POWERPC_MSRM_POWER7 (0x800000000204FF36ULL) #define POWERPC_MMU_POWER7 (POWERPC_MMU_2_06) #define POWERPC_EXCP_POWER7 (POWERPC_EXCP_POWER7) @@ -9848,6 +9846,22 @@ int cpu_ppc_register_internal (CPUPPCState *env, const ppc_def_t *def) env->bus_model = def->bus_model; env->insns_flags = def->insns_flags; env->insns_flags2 = def->insns_flags2; + if (!kvm_enabled()) { + /* TCG doesn't (yet) emulate some groups of instructions that + * are implemented on some otherwise supported CPUs (e.g. VSX + * and decimal floating point instructions on POWER7). We + * remove unsupported instruction groups from the cpu state's + * instruction masks and hope the guest can cope. For at + * least the pseries machine, the unavailability of these + * instructions can be advertise to the guest via the device + * tree. + * + * FIXME: we should have a similar masking for CPU features + * not accessible under KVM, but so far, there aren't any of + * those. */ + env->insns_flags &= PPC_TCG_INSNS; + env->insns_flags2 &= PPC_TCG_INSNS2; + } env->flags = def->flags; env->bfd_mach = def->bfd_mach; env->check_pow = def->check_pow; From 3384f95c59e5db381cf3e605c8acec71baf0e6b8 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Sun, 30 Oct 2011 17:16:46 +0000 Subject: [PATCH 24/24] pseries: Add partial support for PCI This patch adds a PCI bus to the pseries machine. This instantiates the qemu generic PCI bus code, advertises a PCI host bridge in the guest's device tree and implements the RTAS methods specified by PAPR to access PCI config space. It also sets up the memory regions we need to provide windows into the PCI memory and IO space, and advertises those to the guest. However, because qemu can't yet emulate an IOMMU, which is mandatory on pseries, PCI devices which use DMA (i.e. most of them) will not work with this code alone. Still, this is enough to support the virtio_pci device (which probably _should_ use emulated PCI DMA, but is specced to use direct hypervisor access to guest physical memory instead). [agraf] remove typedef which could cause compile errors Signed-off-by: Alexey Kardashevskiy Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- Makefile.target | 1 + hw/spapr.c | 36 +++- hw/spapr.h | 2 + hw/spapr_pci.c | 508 ++++++++++++++++++++++++++++++++++++++++++++++++ hw/spapr_pci.h | 61 ++++++ 5 files changed, 604 insertions(+), 4 deletions(-) create mode 100644 hw/spapr_pci.c create mode 100644 hw/spapr_pci.h diff --git a/Makefile.target b/Makefile.target index fe5f6f70af..2329df50a5 100644 --- a/Makefile.target +++ b/Makefile.target @@ -248,6 +248,7 @@ obj-ppc-y += ppc_newworld.o # IBM pSeries (sPAPR) obj-ppc-$(CONFIG_PSERIES) += spapr.o spapr_hcall.o spapr_rtas.o spapr_vio.o obj-ppc-$(CONFIG_PSERIES) += xics.o spapr_vty.o spapr_llan.o spapr_vscsi.o +obj-ppc-$(CONFIG_PSERIES) += spapr_pci.o device-hotplug.o pci-hotplug.o # PowerPC 4xx boards obj-ppc-y += ppc4xx_devs.o ppc4xx_pci.o ppc405_uc.o ppc405_boards.o obj-ppc-y += ppc440.o ppc440_bamboo.o diff --git a/hw/spapr.c b/hw/spapr.c index 933af322c5..bdaa938b6b 100644 --- a/hw/spapr.c +++ b/hw/spapr.c @@ -39,10 +39,12 @@ #include "hw/spapr.h" #include "hw/spapr_vio.h" +#include "hw/spapr_pci.h" #include "hw/xics.h" #include "kvm.h" #include "kvm_ppc.h" +#include "pci.h" #include "exec-memory.h" @@ -62,6 +64,11 @@ #define MAX_CPUS 256 #define XICS_IRQS 1024 +#define SPAPR_PCI_BUID 0x800000020000001ULL +#define SPAPR_PCI_MEM_WIN_ADDR (0x10000000000ULL + 0xA0000000) +#define SPAPR_PCI_MEM_WIN_SIZE 0x20000000 +#define SPAPR_PCI_IO_WIN_ADDR (0x10000000000ULL + 0x80000000) + #define PHANDLE_XICP 0x00001111 sPAPREnvironment *spapr; @@ -146,6 +153,14 @@ static void *spapr_create_fdt_skel(const char *cpu_model, &end_prop, sizeof(end_prop)))); _FDT((fdt_property_string(fdt, "qemu,boot-device", boot_device))); + /* + * Because we don't always invoke any firmware, we can't rely on + * that to do BAR allocation. Long term, we should probably do + * that ourselves, but for now, this setting (plus advertising the + * current BARs as 0) causes sufficiently recent kernels to to the + * BAR assignment themselves */ + _FDT((fdt_property_cell(fdt, "linux,pci-probe-only", 0))); + _FDT((fdt_end_node(fdt))); /* memory node(s) */ @@ -308,6 +323,7 @@ static void spapr_finalize_fdt(sPAPREnvironment *spapr, { int ret; void *fdt; + sPAPRPHBState *phb; fdt = g_malloc(FDT_MAX_SIZE); @@ -320,6 +336,15 @@ static void spapr_finalize_fdt(sPAPREnvironment *spapr, exit(1); } + QLIST_FOREACH(phb, &spapr->phbs, list) { + ret = spapr_populate_pci_devices(phb, PHANDLE_XICP, fdt); + } + + if (ret < 0) { + fprintf(stderr, "couldn't setup PCI devices in fdt\n"); + exit(1); + } + /* RTAS */ ret = spapr_rtas_device_tree_setup(fdt, rtas_addr, rtas_size); if (ret < 0) { @@ -478,6 +503,12 @@ static void ppc_spapr_init(ram_addr_t ram_size, } } + /* Set up PCI */ + spapr_create_phb(spapr, "pci", SPAPR_PCI_BUID, + SPAPR_PCI_MEM_WIN_ADDR, + SPAPR_PCI_MEM_WIN_SIZE, + SPAPR_PCI_IO_WIN_ADDR); + for (i = 0; i < nb_nics; i++) { NICInfo *nd = &nd_table[i]; @@ -488,10 +519,7 @@ static void ppc_spapr_init(ram_addr_t ram_size, if (strcmp(nd->model, "ibmveth") == 0) { spapr_vlan_create(spapr->vio_bus, 0x1000 + i, nd); } else { - fprintf(stderr, "pSeries (sPAPR) platform does not support " - "NIC model '%s' (only ibmveth is supported)\n", - nd->model); - exit(1); + pci_nic_init_nofail(&nd_table[i], nd->model, NULL); } } diff --git a/hw/spapr.h b/hw/spapr.h index 6657c336f6..df88f6abad 100644 --- a/hw/spapr.h +++ b/hw/spapr.h @@ -4,10 +4,12 @@ #include "hw/xics.h" struct VIOsPAPRBus; +struct sPAPRPHBState; struct icp_state; typedef struct sPAPREnvironment { struct VIOsPAPRBus *vio_bus; + QLIST_HEAD(, sPAPRPHBState) phbs; struct icp_state *icp; target_phys_addr_t ram_limit; diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c new file mode 100644 index 0000000000..2a5e6374c3 --- /dev/null +++ b/hw/spapr_pci.c @@ -0,0 +1,508 @@ +/* + * QEMU sPAPR PCI host originated from Uninorth PCI host + * + * Copyright (c) 2011 Alexey Kardashevskiy, IBM Corporation. + * Copyright (C) 2011 David Gibson, IBM Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#include "hw.h" +#include "pci.h" +#include "pci_host.h" +#include "hw/spapr.h" +#include "hw/spapr_pci.h" +#include "exec-memory.h" +#include + +#include "hw/pci_internals.h" + +static const uint32_t bars[] = { + PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_1, + PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, + PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_5 + /*, PCI_ROM_ADDRESS*/ +}; + +static PCIDevice *find_dev(sPAPREnvironment *spapr, + uint64_t buid, uint32_t config_addr) +{ + DeviceState *qdev; + int devfn = (config_addr >> 8) & 0xFF; + sPAPRPHBState *phb; + + QLIST_FOREACH(phb, &spapr->phbs, list) { + if (phb->buid != buid) { + continue; + } + + QLIST_FOREACH(qdev, &phb->host_state.bus->qbus.children, sibling) { + PCIDevice *dev = (PCIDevice *)qdev; + if (dev->devfn == devfn) { + return dev; + } + } + } + + return NULL; +} + +static void rtas_ibm_read_pci_config(sPAPREnvironment *spapr, + uint32_t token, uint32_t nargs, + target_ulong args, + uint32_t nret, target_ulong rets) +{ + uint32_t val, size, addr; + uint64_t buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); + PCIDevice *dev = find_dev(spapr, buid, rtas_ld(args, 0)); + + if (!dev) { + rtas_st(rets, 0, -1); + return; + } + size = rtas_ld(args, 3); + addr = rtas_ld(args, 0) & 0xFF; + val = pci_default_read_config(dev, addr, size); + rtas_st(rets, 0, 0); + rtas_st(rets, 1, val); +} + +static void rtas_read_pci_config(sPAPREnvironment *spapr, + uint32_t token, uint32_t nargs, + target_ulong args, + uint32_t nret, target_ulong rets) +{ + uint32_t val, size, addr; + PCIDevice *dev = find_dev(spapr, 0, rtas_ld(args, 0)); + + if (!dev) { + rtas_st(rets, 0, -1); + return; + } + size = rtas_ld(args, 1); + addr = rtas_ld(args, 0) & 0xFF; + val = pci_default_read_config(dev, addr, size); + rtas_st(rets, 0, 0); + rtas_st(rets, 1, val); +} + +static void rtas_ibm_write_pci_config(sPAPREnvironment *spapr, + uint32_t token, uint32_t nargs, + target_ulong args, + uint32_t nret, target_ulong rets) +{ + uint32_t val, size, addr; + uint64_t buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); + PCIDevice *dev = find_dev(spapr, buid, rtas_ld(args, 0)); + + if (!dev) { + rtas_st(rets, 0, -1); + return; + } + val = rtas_ld(args, 4); + size = rtas_ld(args, 3); + addr = rtas_ld(args, 0) & 0xFF; + pci_default_write_config(dev, addr, val, size); + rtas_st(rets, 0, 0); +} + +static void rtas_write_pci_config(sPAPREnvironment *spapr, + uint32_t token, uint32_t nargs, + target_ulong args, + uint32_t nret, target_ulong rets) +{ + uint32_t val, size, addr; + PCIDevice *dev = find_dev(spapr, 0, rtas_ld(args, 0)); + + if (!dev) { + rtas_st(rets, 0, -1); + return; + } + val = rtas_ld(args, 2); + size = rtas_ld(args, 1); + addr = rtas_ld(args, 0) & 0xFF; + pci_default_write_config(dev, addr, val, size); + rtas_st(rets, 0, 0); +} + +static int pci_spapr_map_irq(PCIDevice *pci_dev, int irq_num) +{ + /* + * Here we need to convert pci_dev + irq_num to some unique value + * which is less than number of IRQs on the specific bus (now it + * is 16). At the moment irq_num == device_id (number of the + * slot?) + * FIXME: we should swizzle in fn and irq_num + */ + return (pci_dev->devfn >> 3) % SPAPR_PCI_NUM_LSI; +} + +static void pci_spapr_set_irq(void *opaque, int irq_num, int level) +{ + /* + * Here we use the number returned by pci_spapr_map_irq to find a + * corresponding qemu_irq. + */ + sPAPRPHBState *phb = opaque; + + qemu_set_irq(phb->lsi_table[irq_num].qirq, level); +} + +static int spapr_phb_init(SysBusDevice *s) +{ + sPAPRPHBState *phb = FROM_SYSBUS(sPAPRPHBState, s); + int i; + + /* Initialize the LSI table */ + for (i = 0; i < SPAPR_PCI_NUM_LSI; i++) { + qemu_irq qirq; + uint32_t num; + + qirq = spapr_allocate_irq(0, &num); + if (!qirq) { + return -1; + } + + phb->lsi_table[i].dt_irq = num; + phb->lsi_table[i].qirq = qirq; + } + + return 0; +} + +static int spapr_main_pci_host_init(PCIDevice *d) +{ + return 0; +} + +static PCIDeviceInfo spapr_main_pci_host_info = { + .qdev.name = "spapr-pci-host-bridge", + .qdev.size = sizeof(PCIDevice), + .init = spapr_main_pci_host_init, +}; + +static void spapr_register_devices(void) +{ + sysbus_register_dev("spapr-pci-host-bridge", sizeof(sPAPRPHBState), + spapr_phb_init); + pci_qdev_register(&spapr_main_pci_host_info); +} + +device_init(spapr_register_devices) + +static uint64_t spapr_io_read(void *opaque, target_phys_addr_t addr, + unsigned size) +{ + switch (size) { + case 1: + return cpu_inb(addr); + case 2: + return cpu_inw(addr); + case 4: + return cpu_inl(addr); + } + assert(0); +} + +static void spapr_io_write(void *opaque, target_phys_addr_t addr, + uint64_t data, unsigned size) +{ + switch (size) { + case 1: + cpu_outb(addr, data); + return; + case 2: + cpu_outw(addr, data); + return; + case 4: + cpu_outl(addr, data); + return; + } + assert(0); +} + +static MemoryRegionOps spapr_io_ops = { + .endianness = DEVICE_LITTLE_ENDIAN, + .read = spapr_io_read, + .write = spapr_io_write +}; + +void spapr_create_phb(sPAPREnvironment *spapr, + const char *busname, uint64_t buid, + uint64_t mem_win_addr, uint64_t mem_win_size, + uint64_t io_win_addr) +{ + DeviceState *dev; + SysBusDevice *s; + sPAPRPHBState *phb; + PCIBus *bus; + char namebuf[strlen(busname)+11]; + + dev = qdev_create(NULL, "spapr-pci-host-bridge"); + qdev_init_nofail(dev); + s = sysbus_from_qdev(dev); + phb = FROM_SYSBUS(sPAPRPHBState, s); + + phb->mem_win_addr = mem_win_addr; + + sprintf(namebuf, "%s-mem", busname); + memory_region_init(&phb->memspace, namebuf, INT64_MAX); + + sprintf(namebuf, "%s-memwindow", busname); + memory_region_init_alias(&phb->memwindow, namebuf, &phb->memspace, + SPAPR_PCI_MEM_WIN_BUS_OFFSET, mem_win_size); + memory_region_add_subregion(get_system_memory(), mem_win_addr, + &phb->memwindow); + + phb->io_win_addr = io_win_addr; + + /* On ppc, we only have MMIO no specific IO space from the CPU + * perspective. In theory we ought to be able to embed the PCI IO + * memory region direction in the system memory space. However, + * if any of the IO BAR subregions use the old_portio mechanism, + * that won't be processed properly unless accessed from the + * system io address space. This hack to bounce things via + * system_io works around the problem until all the users of + * old_portion are updated */ + sprintf(namebuf, "%s-io", busname); + memory_region_init(&phb->iospace, namebuf, SPAPR_PCI_IO_WIN_SIZE); + /* FIXME: fix to support multiple PHBs */ + memory_region_add_subregion(get_system_io(), 0, &phb->iospace); + + sprintf(namebuf, "%s-iowindow", busname); + memory_region_init_io(&phb->iowindow, &spapr_io_ops, phb, + namebuf, SPAPR_PCI_IO_WIN_SIZE); + memory_region_add_subregion(get_system_memory(), io_win_addr, + &phb->iowindow); + + phb->host_state.bus = bus = pci_register_bus(&phb->busdev.qdev, busname, + pci_spapr_set_irq, + pci_spapr_map_irq, + phb, + &phb->memspace, &phb->iospace, + PCI_DEVFN(0, 0), + SPAPR_PCI_NUM_LSI); + + spapr_rtas_register("read-pci-config", rtas_read_pci_config); + spapr_rtas_register("write-pci-config", rtas_write_pci_config); + spapr_rtas_register("ibm,read-pci-config", rtas_ibm_read_pci_config); + spapr_rtas_register("ibm,write-pci-config", rtas_ibm_write_pci_config); + + QLIST_INSERT_HEAD(&spapr->phbs, phb, list); + + /* pci_bus_set_mem_base(bus, mem_va_start - SPAPR_PCI_MEM_BAR_START); */ +} + +/* Macros to operate with address in OF binding to PCI */ +#define b_x(x, p, l) (((x) & ((1<<(l))-1)) << (p)) +#define b_n(x) b_x((x), 31, 1) /* 0 if relocatable */ +#define b_p(x) b_x((x), 30, 1) /* 1 if prefetchable */ +#define b_t(x) b_x((x), 29, 1) /* 1 if the address is aliased */ +#define b_ss(x) b_x((x), 24, 2) /* the space code */ +#define b_bbbbbbbb(x) b_x((x), 16, 8) /* bus number */ +#define b_ddddd(x) b_x((x), 11, 5) /* device number */ +#define b_fff(x) b_x((x), 8, 3) /* function number */ +#define b_rrrrrrrr(x) b_x((x), 0, 8) /* register number */ + +static uint32_t regtype_to_ss(uint8_t type) +{ + if (type & PCI_BASE_ADDRESS_MEM_TYPE_64) { + return 3; + } + if (type == PCI_BASE_ADDRESS_SPACE_IO) { + return 1; + } + return 2; +} + +int spapr_populate_pci_devices(sPAPRPHBState *phb, + uint32_t xics_phandle, + void *fdt) +{ + PCIBus *bus = phb->host_state.bus; + int bus_off, node_off = 0, devid, fn, i, n, devices; + DeviceState *qdev; + char nodename[256]; + struct { + uint32_t hi; + uint64_t addr; + uint64_t size; + } __attribute__((packed)) reg[PCI_NUM_REGIONS + 1], + assigned_addresses[PCI_NUM_REGIONS]; + uint32_t bus_range[] = { cpu_to_be32(0), cpu_to_be32(0xff) }; + struct { + uint32_t hi; + uint64_t child; + uint64_t parent; + uint64_t size; + } __attribute__((packed)) ranges[] = { + { + cpu_to_be32(b_ss(1)), cpu_to_be64(0), + cpu_to_be64(phb->io_win_addr), + cpu_to_be64(memory_region_size(&phb->iospace)), + }, + { + cpu_to_be32(b_ss(2)), cpu_to_be64(SPAPR_PCI_MEM_WIN_BUS_OFFSET), + cpu_to_be64(phb->mem_win_addr), + cpu_to_be64(memory_region_size(&phb->memwindow)), + }, + }; + uint64_t bus_reg[] = { cpu_to_be64(phb->buid), 0 }; + uint32_t interrupt_map_mask[] = { + cpu_to_be32(b_ddddd(-1)|b_fff(-1)), 0x0, 0x0, 0x0}; + uint32_t interrupt_map[bus->nirq][7]; + + /* Start populating the FDT */ + sprintf(nodename, "pci@%" PRIx64, phb->buid); + bus_off = fdt_add_subnode(fdt, 0, nodename); + if (bus_off < 0) { + return bus_off; + } + +#define _FDT(exp) \ + do { \ + int ret = (exp); \ + if (ret < 0) { \ + return ret; \ + } \ + } while (0) + + /* Write PHB properties */ + _FDT(fdt_setprop_string(fdt, bus_off, "device_type", "pci")); + _FDT(fdt_setprop_string(fdt, bus_off, "compatible", "IBM,Logical_PHB")); + _FDT(fdt_setprop_cell(fdt, bus_off, "#address-cells", 0x3)); + _FDT(fdt_setprop_cell(fdt, bus_off, "#size-cells", 0x2)); + _FDT(fdt_setprop_cell(fdt, bus_off, "#interrupt-cells", 0x1)); + _FDT(fdt_setprop(fdt, bus_off, "used-by-rtas", NULL, 0)); + _FDT(fdt_setprop(fdt, bus_off, "bus-range", &bus_range, sizeof(bus_range))); + _FDT(fdt_setprop(fdt, bus_off, "ranges", &ranges, sizeof(ranges))); + _FDT(fdt_setprop(fdt, bus_off, "reg", &bus_reg, sizeof(bus_reg))); + _FDT(fdt_setprop(fdt, bus_off, "interrupt-map-mask", + &interrupt_map_mask, sizeof(interrupt_map_mask))); + + /* Populate PCI devices and allocate IRQs */ + devices = 0; + QLIST_FOREACH(qdev, &bus->qbus.children, sibling) { + PCIDevice *dev = DO_UPCAST(PCIDevice, qdev, qdev); + int irq_index = pci_spapr_map_irq(dev, 0); + uint32_t *irqmap = interrupt_map[devices]; + uint8_t *config = dev->config; + + devid = dev->devfn >> 3; + fn = dev->devfn & 7; + + sprintf(nodename, "pci@%u,%u", devid, fn); + + /* Allocate interrupt from the map */ + if (devid > bus->nirq) { + printf("Unexpected behaviour in spapr_populate_pci_devices," + "wrong devid %u\n", devid); + exit(-1); + } + irqmap[0] = cpu_to_be32(b_ddddd(devid)|b_fff(fn)); + irqmap[1] = 0; + irqmap[2] = 0; + irqmap[3] = 0; + irqmap[4] = cpu_to_be32(xics_phandle); + irqmap[5] = cpu_to_be32(phb->lsi_table[irq_index].dt_irq); + irqmap[6] = cpu_to_be32(0x8); + + /* Add node to FDT */ + node_off = fdt_add_subnode(fdt, bus_off, nodename); + if (node_off < 0) { + return node_off; + } + + _FDT(fdt_setprop_cell(fdt, node_off, "vendor-id", + pci_get_word(&config[PCI_VENDOR_ID]))); + _FDT(fdt_setprop_cell(fdt, node_off, "device-id", + pci_get_word(&config[PCI_DEVICE_ID]))); + _FDT(fdt_setprop_cell(fdt, node_off, "revision-id", + pci_get_byte(&config[PCI_REVISION_ID]))); + _FDT(fdt_setprop_cell(fdt, node_off, "class-code", + pci_get_long(&config[PCI_CLASS_REVISION]) >> 8)); + _FDT(fdt_setprop_cell(fdt, node_off, "subsystem-id", + pci_get_word(&config[PCI_SUBSYSTEM_ID]))); + _FDT(fdt_setprop_cell(fdt, node_off, "subsystem-vendor-id", + pci_get_word(&config[PCI_SUBSYSTEM_VENDOR_ID]))); + + /* Config space region comes first */ + reg[0].hi = cpu_to_be32( + b_n(0) | + b_p(0) | + b_t(0) | + b_ss(0/*config*/) | + b_bbbbbbbb(0) | + b_ddddd(devid) | + b_fff(fn)); + reg[0].addr = 0; + reg[0].size = 0; + + n = 0; + for (i = 0; i < PCI_NUM_REGIONS; ++i) { + if (0 == dev->io_regions[i].size) { + continue; + } + + reg[n+1].hi = cpu_to_be32( + b_n(0) | + b_p(0) | + b_t(0) | + b_ss(regtype_to_ss(dev->io_regions[i].type)) | + b_bbbbbbbb(0) | + b_ddddd(devid) | + b_fff(fn) | + b_rrrrrrrr(bars[i])); + reg[n+1].addr = 0; + reg[n+1].size = cpu_to_be64(dev->io_regions[i].size); + + assigned_addresses[n].hi = cpu_to_be32( + b_n(1) | + b_p(0) | + b_t(0) | + b_ss(regtype_to_ss(dev->io_regions[i].type)) | + b_bbbbbbbb(0) | + b_ddddd(devid) | + b_fff(fn) | + b_rrrrrrrr(bars[i])); + + /* + * Writing zeroes to assigned_addresses causes the guest kernel to + * reassign BARs + */ + assigned_addresses[n].addr = cpu_to_be64(dev->io_regions[i].addr); + assigned_addresses[n].size = reg[n+1].size; + + ++n; + } + _FDT(fdt_setprop(fdt, node_off, "reg", reg, sizeof(reg[0])*(n+1))); + _FDT(fdt_setprop(fdt, node_off, "assigned-addresses", + assigned_addresses, + sizeof(assigned_addresses[0])*(n))); + _FDT(fdt_setprop_cell(fdt, node_off, "interrupts", + pci_get_byte(&config[PCI_INTERRUPT_PIN]))); + + ++devices; + } + + /* Write interrupt map */ + _FDT(fdt_setprop(fdt, bus_off, "interrupt-map", &interrupt_map, + devices * sizeof(interrupt_map[0]))); + + return 0; +} diff --git a/hw/spapr_pci.h b/hw/spapr_pci.h new file mode 100644 index 0000000000..213340c915 --- /dev/null +++ b/hw/spapr_pci.h @@ -0,0 +1,61 @@ +/* + * QEMU SPAPR PCI BUS definitions + * + * Copyright (c) 2011 Alexey Kardashevskiy + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ +#if !defined(__HW_SPAPR_H__) +#error Please include spapr.h before this file! +#endif + +#if !defined(__HW_SPAPR_PCI_H__) +#define __HW_SPAPR_PCI_H__ + +#include "hw/pci_host.h" +#include "hw/xics.h" + +#define SPAPR_PCI_NUM_LSI 16 + +typedef struct sPAPRPHBState { + SysBusDevice busdev; + PCIHostState host_state; + + uint64_t buid; + + MemoryRegion memspace, iospace; + target_phys_addr_t mem_win_addr, io_win_addr; + MemoryRegion memwindow, iowindow; + + struct { + uint32_t dt_irq; + qemu_irq qirq; + } lsi_table[SPAPR_PCI_NUM_LSI]; + + QLIST_ENTRY(sPAPRPHBState) list; +} sPAPRPHBState; + +#define SPAPR_PCI_MEM_WIN_BUS_OFFSET 0x80000000ULL +#define SPAPR_PCI_IO_WIN_SIZE 0x10000 + +void spapr_create_phb(sPAPREnvironment *spapr, + const char *busname, uint64_t buid, + uint64_t mem_win_addr, uint64_t mem_win_size, + uint64_t io_win_addr); + +int spapr_populate_pci_devices(sPAPRPHBState *phb, + uint32_t xics_phandle, + void *fdt); + +#endif /* __HW_SPAPR_PCI_H__ */